Update clang to r339409.

Change-Id: I800772d2d838223be1f6b40d490c4591b937fca2
diff --git a/linux-x64/clang/include/c++/v1/__bsd_locale_fallbacks.h b/linux-x64/clang/include/c++/v1/__bsd_locale_fallbacks.h
index 5e9e094..3097b01 100644
--- a/linux-x64/clang/include/c++/v1/__bsd_locale_fallbacks.h
+++ b/linux-x64/clang/include/c++/v1/__bsd_locale_fallbacks.h
@@ -24,28 +24,28 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 decltype(MB_CUR_MAX) __libcpp_mb_cur_max_l(locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return MB_CUR_MAX;
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 wint_t __libcpp_btowc_l(int __c, locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return btowc(__c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 int __libcpp_wctob_l(wint_t __c, locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return wctob(__c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_wcsnrtombs_l(char *__dest, const wchar_t **__src, size_t __nwc,
                          size_t __len, mbstate_t *__ps, locale_t __l)
 {
@@ -53,14 +53,14 @@
     return wcsnrtombs(__dest, __src, __nwc, __len, __ps);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_wcrtomb_l(char *__s, wchar_t __wc, mbstate_t *__ps, locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return wcrtomb(__s, __wc, __ps);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_mbsnrtowcs_l(wchar_t * __dest, const char **__src, size_t __nms,
                       size_t __len, mbstate_t *__ps, locale_t __l)
 {
@@ -68,7 +68,7 @@
     return mbsnrtowcs(__dest, __src, __nms, __len, __ps);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_mbrtowc_l(wchar_t *__pwc, const char *__s, size_t __n,
                    mbstate_t *__ps, locale_t __l)
 {
@@ -76,28 +76,28 @@
     return mbrtowc(__pwc, __s, __n, __ps);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 int __libcpp_mbtowc_l(wchar_t *__pwc, const char *__pmb, size_t __max, locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return mbtowc(__pwc, __pmb, __max);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_mbrlen_l(const char *__s, size_t __n, mbstate_t *__ps, locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return mbrlen(__s, __n, __ps);
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 lconv *__libcpp_localeconv_l(locale_t __l)
 {
     __libcpp_locale_guard __current(__l);
     return localeconv();
 }
 
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 size_t __libcpp_mbsrtowcs_l(wchar_t *__dest, const char **__src, size_t __len,
                      mbstate_t *__ps, locale_t __l)
 {
diff --git a/linux-x64/clang/include/c++/v1/__config b/linux-x64/clang/include/c++/v1/__config
index d150ede..0f8f5a8 100644
--- a/linux-x64/clang/include/c++/v1/__config
+++ b/linux-x64/clang/include/c++/v1/__config
@@ -33,12 +33,28 @@
 #  define _GNUC_VER_NEW 0
 #endif
 
-#define _LIBCPP_VERSION 7000
+#define _LIBCPP_VERSION 8000
 
 #ifndef _LIBCPP_ABI_VERSION
-#define _LIBCPP_ABI_VERSION 1
+#  ifdef __Fuchsia__
+#    define _LIBCPP_ABI_VERSION 2
+#  else
+#    define _LIBCPP_ABI_VERSION 1
+#  endif
 #endif
 
+#ifndef _LIBCPP_STD_VER
+#  if  __cplusplus <= 201103L
+#    define _LIBCPP_STD_VER 11
+#  elif __cplusplus <= 201402L
+#    define _LIBCPP_STD_VER 14
+#  elif __cplusplus <= 201703L
+#    define _LIBCPP_STD_VER 17
+#  else
+#    define _LIBCPP_STD_VER 18  // current year, or date of c++2a ratification
+#  endif
+#endif  // _LIBCPP_STD_VER
+
 #if defined(__ELF__)
 #  define _LIBCPP_OBJECT_FORMAT_ELF   1
 #elif defined(__MACH__)
@@ -145,10 +161,8 @@
 
 #define __has_keyword(__x) !(__is_identifier(__x))
 
-#ifdef __has_include
-#  define __libcpp_has_include(__x) __has_include(__x)
-#else
-#  define __libcpp_has_include(__x) 0
+#ifndef __has_include
+#define __has_include(...) 0
 #endif
 
 #if defined(__clang__)
@@ -477,6 +491,8 @@
 #define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS
 #endif
 
+#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__))
+
 #elif defined(_LIBCPP_COMPILER_GCC)
 
 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
@@ -494,7 +510,7 @@
 #define _LIBCPP_HAS_IS_BASE_OF
 #endif
 
-#if !__EXCEPTIONS
+#if !__EXCEPTIONS && !defined(_LIBCPP_NO_EXCEPTIONS)
 #define _LIBCPP_NO_EXCEPTIONS
 #endif
 
@@ -568,6 +584,8 @@
 #define _LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS
 #endif
 
+#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__))
+
 #elif defined(_LIBCPP_COMPILER_MSVC)
 
 #define _LIBCPP_TOSTRING2(x) #x
@@ -582,9 +600,6 @@
 #define _LIBCPP_HAS_NO_CONSTEXPR
 #define _LIBCPP_HAS_NO_CXX14_CONSTEXPR
 #define _LIBCPP_HAS_NO_VARIABLE_TEMPLATES
-#if _MSC_VER <= 1800
-#define _LIBCPP_HAS_NO_UNICODE_CHARS
-#endif
 #define _LIBCPP_HAS_NO_NOEXCEPT
 #define __alignof__ __alignof
 #define _LIBCPP_NORETURN __declspec(noreturn)
@@ -603,6 +618,10 @@
 
 #define _LIBCPP_HAS_NO_ASAN
 
+#define _LIBCPP_ALWAYS_INLINE __forceinline
+
+#define _LIBCPP_HAS_NO_VECTOR_EXTENSION
+
 #elif defined(_LIBCPP_COMPILER_IBM)
 
 #define _ALIGNAS(x) __attribute__((__aligned__(x)))
@@ -633,8 +652,26 @@
 
 #define _LIBCPP_HAS_NO_ASAN
 
+#define _LIBCPP_ALWAYS_INLINE __attribute__ ((__always_inline__))
+
+#define _LIBCPP_HAS_NO_VECTOR_EXTENSION
+
 #endif // _LIBCPP_COMPILER_[CLANG|GCC|MSVC|IBM]
 
+#if _LIBCPP_STD_VER >= 17
+#define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM \
+  _LIBCPP_BEGIN_NAMESPACE_STD inline namespace __fs { namespace filesystem {
+#else
+#define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM \
+  _LIBCPP_BEGIN_NAMESPACE_STD namespace __fs { namespace filesystem {
+#endif
+
+#define _LIBCPP_END_NAMESPACE_FILESYSTEM \
+  _LIBCPP_END_NAMESPACE_STD } }
+
+#define _VSTD_FS _VSTD::__fs::filesystem
+
+
 #if defined(_LIBCPP_OBJECT_FORMAT_COFF)
 
 #ifdef _DLL
@@ -669,16 +706,6 @@
 #define _LIBCPP_TEMPLATE_VIS
 #define _LIBCPP_ENUM_VIS
 
-#if defined(_LIBCPP_COMPILER_MSVC)
-#  define _LIBCPP_INLINE_VISIBILITY __forceinline
-#  define _LIBCPP_ALWAYS_INLINE     __forceinline
-#  define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __forceinline
-#else
-#  define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))
-#  define _LIBCPP_ALWAYS_INLINE     __attribute__ ((__always_inline__))
-#  define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__ ((__always_inline__))
-#endif
-
 #endif // defined(_LIBCPP_OBJECT_FORMAT_COFF)
 
 #ifndef _LIBCPP_HIDDEN
@@ -762,30 +789,30 @@
 #define _LIBCPP_CLASS_TEMPLATE_INSTANTIATION_VIS
 #endif
 
-#ifndef _LIBCPP_INLINE_VISIBILITY
-#  if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
-#    define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__visibility__("hidden"), __always_inline__))
-#  else
-#    define _LIBCPP_INLINE_VISIBILITY __attribute__ ((__always_inline__))
-#  endif
+#if __has_attribute(internal_linkage)
+#  define _LIBCPP_INTERNAL_LINKAGE __attribute__ ((internal_linkage))
+#else
+#  define _LIBCPP_INTERNAL_LINKAGE _LIBCPP_ALWAYS_INLINE
 #endif
 
-#ifndef _LIBCPP_ALWAYS_INLINE
-#  if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
-#    define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__visibility__("hidden"), __always_inline__))
-#  else
-#    define _LIBCPP_ALWAYS_INLINE  __attribute__ ((__always_inline__))
-#  endif
+#ifndef _LIBCPP_HIDE_FROM_ABI
+#  define _LIBCPP_HIDE_FROM_ABI _LIBCPP_HIDDEN _LIBCPP_INTERNAL_LINKAGE
 #endif
 
-#ifndef _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
-#  if !defined(_LIBCPP_DISABLE_VISIBILITY_ANNOTATIONS)
-#    define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__visibility__("default"), __always_inline__))
+#ifdef _LIBCPP_BUILDING_LIBRARY
+#  if _LIBCPP_ABI_VERSION > 1
+#    define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 _LIBCPP_HIDE_FROM_ABI
 #  else
-#    define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY __attribute__((__always_inline__))
+#    define _LIBCPP_HIDE_FROM_ABI_AFTER_V1
 #  endif
+#else
+#  define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 _LIBCPP_HIDE_FROM_ABI
 #endif
 
+// Just so we can migrate to the new macros gradually.
+#define _LIBCPP_INLINE_VISIBILITY _LIBCPP_HIDE_FROM_ABI
+#define _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY _LIBCPP_HIDE_FROM_ABI_AFTER_V1
+
 #ifndef _LIBCPP_PREFERRED_OVERLOAD
 #  if __has_attribute(__enable_if__)
 #    define _LIBCPP_PREFERRED_OVERLOAD __attribute__ ((__enable_if__(true, "")))
@@ -888,9 +915,9 @@
 #  define _LIBCPP_DECLARE_STRONG_ENUM(x) struct _LIBCPP_TYPE_VIS x { enum __lx
 #  define _LIBCPP_DECLARE_STRONG_ENUM_EPILOG(x) \
      __lx __v_; \
-     _LIBCPP_ALWAYS_INLINE x(__lx __v) : __v_(__v) {} \
-     _LIBCPP_ALWAYS_INLINE explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
-     _LIBCPP_ALWAYS_INLINE operator int() const {return __v_;} \
+     _LIBCPP_INLINE_VISIBILITY x(__lx __v) : __v_(__v) {} \
+     _LIBCPP_INLINE_VISIBILITY explicit x(int __v) : __v_(static_cast<__lx>(__v)) {} \
+     _LIBCPP_INLINE_VISIBILITY operator int() const {return __v_;} \
      };
 #else  // _LIBCPP_HAS_NO_STRONG_ENUMS
 #  define _LIBCPP_DECLARE_STRONG_ENUM(x) enum class _LIBCPP_ENUM_VIS x
@@ -943,6 +970,12 @@
 #define _DECLARE_C99_LDBL_MATH 1
 #endif
 
+// If we are getting operator new from the MSVC CRT, then allocation overloads
+// for align_val_t were added in 19.12, aka VS 2017 version 15.3.
+#if defined(_LIBCPP_MSVCRT) && defined(_MSC_VER) && _MSC_VER < 1912
+#define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION
+#endif
+
 #if defined(__APPLE__)
 #  if !defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && \
       defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
@@ -964,18 +997,6 @@
 #define _LIBCPP_WCTYPE_IS_MASK
 #endif
 
-#ifndef _LIBCPP_STD_VER
-#  if  __cplusplus <= 201103L
-#    define _LIBCPP_STD_VER 11
-#  elif __cplusplus <= 201402L
-#    define _LIBCPP_STD_VER 14
-#  elif __cplusplus <= 201703L
-#    define _LIBCPP_STD_VER 17
-#  else
-#    define _LIBCPP_STD_VER 18  // current year, or date of c++2a ratification
-#  endif
-#endif  // _LIBCPP_STD_VER
-
 #if _LIBCPP_STD_VER > 11
 #  define _LIBCPP_DEPRECATED [[deprecated]]
 #else
@@ -1026,6 +1047,14 @@
 #  define _LIBCPP_EXPLICIT_MOVE(x) (x)
 #endif
 
+#ifndef _LIBCPP_CONSTEXPR_IF_NODEBUG
+#if defined(_LIBCPP_DEBUG) || defined(_LIBCPP_HAS_NO_CXX14_CONSTEXPR)
+#define _LIBCPP_CONSTEXPR_IF_NODEBUG
+#else
+#define _LIBCPP_CONSTEXPR_IF_NODEBUG constexpr
+#endif
+#endif
+
 #ifndef _LIBCPP_HAS_NO_ASAN
 _LIBCPP_FUNC_VIS extern "C" void __sanitizer_annotate_contiguous_container(
   const void *, const void *, const void *, const void *);
@@ -1061,7 +1090,7 @@
       defined(__APPLE__) || \
       defined(__CloudABI__) || \
       defined(__sun__) || \
-      (defined(__MINGW32__) && __libcpp_has_include(<pthread.h>))
+      (defined(__MINGW32__) && __has_include(<pthread.h>))
 #    define _LIBCPP_HAS_THREAD_API_PTHREAD
 #  elif defined(_LIBCPP_WIN32API)
 #    define _LIBCPP_HAS_THREAD_API_WIN32
@@ -1196,6 +1225,11 @@
 #define _LIBCPP_HAS_NO_COROUTINES
 #endif
 
+// FIXME: Correct this macro when either (A) a feature test macro for the
+// spaceship operator is provided, or (B) a compiler provides a complete
+// implementation.
+#define _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+
 // Decide whether to use availability macros.
 #if !defined(_LIBCPP_BUILDING_LIBRARY) &&                                      \
     !defined(_LIBCPP_DISABLE_AVAILABILITY) &&                                  \
diff --git a/linux-x64/clang/include/c++/v1/__cxxabi_config.h b/linux-x64/clang/include/c++/v1/__cxxabi_config.h
index 65b1961..46f5914 100644
--- a/linux-x64/clang/include/c++/v1/__cxxabi_config.h
+++ b/linux-x64/clang/include/c++/v1/__cxxabi_config.h
@@ -60,4 +60,14 @@
 #define _LIBCXXABI_WEAK __attribute__((__weak__))
 #endif
 
+#if defined(__clang__)
+#define _LIBCXXABI_COMPILER_CLANG
+#endif
+
+#if __has_attribute(__no_sanitize__) && defined(_LIBCXXABI_COMPILER_CLANG)
+#define _LIBCXXABI_NO_CFI __attribute__((__no_sanitize__("cfi")))
+#else
+#define _LIBCXXABI_NO_CFI
+#endif
+
 #endif // ____CXXABI_CONFIG_H
diff --git a/linux-x64/clang/include/c++/v1/__errc b/linux-x64/clang/include/c++/v1/__errc
new file mode 100644
index 0000000..d0f00b7
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/__errc
@@ -0,0 +1,218 @@
+// -*- C++ -*-
+//===---------------------------- __errc ----------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___ERRC
+#define _LIBCPP___ERRC
+
+/*
+    system_error synopsis
+
+namespace std
+{
+
+enum class errc
+{
+    address_family_not_supported,       // EAFNOSUPPORT
+    address_in_use,                     // EADDRINUSE
+    address_not_available,              // EADDRNOTAVAIL
+    already_connected,                  // EISCONN
+    argument_list_too_long,             // E2BIG
+    argument_out_of_domain,             // EDOM
+    bad_address,                        // EFAULT
+    bad_file_descriptor,                // EBADF
+    bad_message,                        // EBADMSG
+    broken_pipe,                        // EPIPE
+    connection_aborted,                 // ECONNABORTED
+    connection_already_in_progress,     // EALREADY
+    connection_refused,                 // ECONNREFUSED
+    connection_reset,                   // ECONNRESET
+    cross_device_link,                  // EXDEV
+    destination_address_required,       // EDESTADDRREQ
+    device_or_resource_busy,            // EBUSY
+    directory_not_empty,                // ENOTEMPTY
+    executable_format_error,            // ENOEXEC
+    file_exists,                        // EEXIST
+    file_too_large,                     // EFBIG
+    filename_too_long,                  // ENAMETOOLONG
+    function_not_supported,             // ENOSYS
+    host_unreachable,                   // EHOSTUNREACH
+    identifier_removed,                 // EIDRM
+    illegal_byte_sequence,              // EILSEQ
+    inappropriate_io_control_operation, // ENOTTY
+    interrupted,                        // EINTR
+    invalid_argument,                   // EINVAL
+    invalid_seek,                       // ESPIPE
+    io_error,                           // EIO
+    is_a_directory,                     // EISDIR
+    message_size,                       // EMSGSIZE
+    network_down,                       // ENETDOWN
+    network_reset,                      // ENETRESET
+    network_unreachable,                // ENETUNREACH
+    no_buffer_space,                    // ENOBUFS
+    no_child_process,                   // ECHILD
+    no_link,                            // ENOLINK
+    no_lock_available,                  // ENOLCK
+    no_message_available,               // ENODATA
+    no_message,                         // ENOMSG
+    no_protocol_option,                 // ENOPROTOOPT
+    no_space_on_device,                 // ENOSPC
+    no_stream_resources,                // ENOSR
+    no_such_device_or_address,          // ENXIO
+    no_such_device,                     // ENODEV
+    no_such_file_or_directory,          // ENOENT
+    no_such_process,                    // ESRCH
+    not_a_directory,                    // ENOTDIR
+    not_a_socket,                       // ENOTSOCK
+    not_a_stream,                       // ENOSTR
+    not_connected,                      // ENOTCONN
+    not_enough_memory,                  // ENOMEM
+    not_supported,                      // ENOTSUP
+    operation_canceled,                 // ECANCELED
+    operation_in_progress,              // EINPROGRESS
+    operation_not_permitted,            // EPERM
+    operation_not_supported,            // EOPNOTSUPP
+    operation_would_block,              // EWOULDBLOCK
+    owner_dead,                         // EOWNERDEAD
+    permission_denied,                  // EACCES
+    protocol_error,                     // EPROTO
+    protocol_not_supported,             // EPROTONOSUPPORT
+    read_only_file_system,              // EROFS
+    resource_deadlock_would_occur,      // EDEADLK
+    resource_unavailable_try_again,     // EAGAIN
+    result_out_of_range,                // ERANGE
+    state_not_recoverable,              // ENOTRECOVERABLE
+    stream_timeout,                     // ETIME
+    text_file_busy,                     // ETXTBSY
+    timed_out,                          // ETIMEDOUT
+    too_many_files_open_in_system,      // ENFILE
+    too_many_files_open,                // EMFILE
+    too_many_links,                     // EMLINK
+    too_many_symbolic_link_levels,      // ELOOP
+    value_too_large,                    // EOVERFLOW
+    wrong_protocol_type                 // EPROTOTYPE
+};
+
+*/
+
+#include <__config>
+#include <cerrno>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+// Some error codes are not present on all platforms, so we provide equivalents
+// for them:
+
+//enum class errc
+_LIBCPP_DECLARE_STRONG_ENUM(errc)
+{
+    address_family_not_supported        = EAFNOSUPPORT,
+    address_in_use                      = EADDRINUSE,
+    address_not_available               = EADDRNOTAVAIL,
+    already_connected                   = EISCONN,
+    argument_list_too_long              = E2BIG,
+    argument_out_of_domain              = EDOM,
+    bad_address                         = EFAULT,
+    bad_file_descriptor                 = EBADF,
+    bad_message                         = EBADMSG,
+    broken_pipe                         = EPIPE,
+    connection_aborted                  = ECONNABORTED,
+    connection_already_in_progress      = EALREADY,
+    connection_refused                  = ECONNREFUSED,
+    connection_reset                    = ECONNRESET,
+    cross_device_link                   = EXDEV,
+    destination_address_required        = EDESTADDRREQ,
+    device_or_resource_busy             = EBUSY,
+    directory_not_empty                 = ENOTEMPTY,
+    executable_format_error             = ENOEXEC,
+    file_exists                         = EEXIST,
+    file_too_large                      = EFBIG,
+    filename_too_long                   = ENAMETOOLONG,
+    function_not_supported              = ENOSYS,
+    host_unreachable                    = EHOSTUNREACH,
+    identifier_removed                  = EIDRM,
+    illegal_byte_sequence               = EILSEQ,
+    inappropriate_io_control_operation  = ENOTTY,
+    interrupted                         = EINTR,
+    invalid_argument                    = EINVAL,
+    invalid_seek                        = ESPIPE,
+    io_error                            = EIO,
+    is_a_directory                      = EISDIR,
+    message_size                        = EMSGSIZE,
+    network_down                        = ENETDOWN,
+    network_reset                       = ENETRESET,
+    network_unreachable                 = ENETUNREACH,
+    no_buffer_space                     = ENOBUFS,
+    no_child_process                    = ECHILD,
+    no_link                             = ENOLINK,
+    no_lock_available                   = ENOLCK,
+#ifdef ENODATA
+    no_message_available                = ENODATA,
+#else
+    no_message_available                = ENOMSG,
+#endif
+    no_message                          = ENOMSG,
+    no_protocol_option                  = ENOPROTOOPT,
+    no_space_on_device                  = ENOSPC,
+#ifdef ENOSR
+    no_stream_resources                 = ENOSR,
+#else
+    no_stream_resources                 = ENOMEM,
+#endif
+    no_such_device_or_address           = ENXIO,
+    no_such_device                      = ENODEV,
+    no_such_file_or_directory           = ENOENT,
+    no_such_process                     = ESRCH,
+    not_a_directory                     = ENOTDIR,
+    not_a_socket                        = ENOTSOCK,
+#ifdef ENOSTR
+    not_a_stream                        = ENOSTR,
+#else
+    not_a_stream                        = EINVAL,
+#endif
+    not_connected                       = ENOTCONN,
+    not_enough_memory                   = ENOMEM,
+    not_supported                       = ENOTSUP,
+    operation_canceled                  = ECANCELED,
+    operation_in_progress               = EINPROGRESS,
+    operation_not_permitted             = EPERM,
+    operation_not_supported             = EOPNOTSUPP,
+    operation_would_block               = EWOULDBLOCK,
+    owner_dead                          = EOWNERDEAD,
+    permission_denied                   = EACCES,
+    protocol_error                      = EPROTO,
+    protocol_not_supported              = EPROTONOSUPPORT,
+    read_only_file_system               = EROFS,
+    resource_deadlock_would_occur       = EDEADLK,
+    resource_unavailable_try_again      = EAGAIN,
+    result_out_of_range                 = ERANGE,
+    state_not_recoverable               = ENOTRECOVERABLE,
+#ifdef ETIME
+    stream_timeout                      = ETIME,
+#else
+    stream_timeout                      = ETIMEDOUT,
+#endif
+    text_file_busy                      = ETXTBSY,
+    timed_out                           = ETIMEDOUT,
+    too_many_files_open_in_system       = ENFILE,
+    too_many_files_open                 = EMFILE,
+    too_many_links                      = EMLINK,
+    too_many_symbolic_link_levels       = ELOOP,
+    value_too_large                     = EOVERFLOW,
+    wrong_protocol_type                 = EPROTOTYPE
+};
+_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(errc)
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif  // _LIBCPP___ERRC
diff --git a/linux-x64/clang/include/c++/v1/__functional_03 b/linux-x64/clang/include/c++/v1/__functional_03
index 13d8a3d..0a3bfba 100644
--- a/linux-x64/clang/include/c++/v1/__functional_03
+++ b/linux-x64/clang/include/c++/v1/__functional_03
@@ -600,7 +600,10 @@
 function<_Rp()>&
 function<_Rp()>::operator=(const function& __f)
 {
-    function(__f).swap(*this);
+    if (__f)
+        function(__f).swap(*this);
+    else
+        *this = nullptr;
     return *this;
 }
 
@@ -608,11 +611,12 @@
 function<_Rp()>&
 function<_Rp()>::operator=(nullptr_t)
 {
-    if (__f_ == (__base*)&__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
+    __base* __t = __f_;
     __f_ = 0;
+    if (__t == (__base*)&__buf_)
+        __t->destroy();
+    else if (__t)
+        __t->destroy_deallocate();
     return *this;
 }
 
@@ -876,7 +880,10 @@
 function<_Rp(_A0)>&
 function<_Rp(_A0)>::operator=(const function& __f)
 {
-    function(__f).swap(*this);
+    if (__f)
+        function(__f).swap(*this);
+    else
+        *this = nullptr;
     return *this;
 }
 
@@ -884,11 +891,12 @@
 function<_Rp(_A0)>&
 function<_Rp(_A0)>::operator=(nullptr_t)
 {
-    if (__f_ == (__base*)&__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
+    __base* __t = __f_;
     __f_ = 0;
+    if (__t == (__base*)&__buf_)
+        __t->destroy();
+    else if (__t)
+        __t->destroy_deallocate();
     return *this;
 }
 
@@ -1152,7 +1160,10 @@
 function<_Rp(_A0, _A1)>&
 function<_Rp(_A0, _A1)>::operator=(const function& __f)
 {
-    function(__f).swap(*this);
+    if (__f)
+        function(__f).swap(*this);
+    else
+        *this = nullptr;
     return *this;
 }
 
@@ -1160,11 +1171,12 @@
 function<_Rp(_A0, _A1)>&
 function<_Rp(_A0, _A1)>::operator=(nullptr_t)
 {
-    if (__f_ == (__base*)&__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
+    __base* __t = __f_;
     __f_ = 0;
+    if (__t == (__base*)&__buf_)
+        __t->destroy();
+    else if (__t)
+        __t->destroy_deallocate();
     return *this;
 }
 
@@ -1428,7 +1440,10 @@
 function<_Rp(_A0, _A1, _A2)>&
 function<_Rp(_A0, _A1, _A2)>::operator=(const function& __f)
 {
-    function(__f).swap(*this);
+    if (__f)
+        function(__f).swap(*this);
+    else
+        *this = nullptr;
     return *this;
 }
 
@@ -1436,11 +1451,12 @@
 function<_Rp(_A0, _A1, _A2)>&
 function<_Rp(_A0, _A1, _A2)>::operator=(nullptr_t)
 {
-    if (__f_ == (__base*)&__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
+    __base* __t = __f_;
     __f_ = 0;
+    if (__t == (__base*)&__buf_)
+        __t->destroy();
+    else if (__t)
+        __t->destroy_deallocate();
     return *this;
 }
 
diff --git a/linux-x64/clang/include/c++/v1/__functional_base b/linux-x64/clang/include/c++/v1/__functional_base
index 12af4dc..57fdf2b 100644
--- a/linux-x64/clang/include/c++/v1/__functional_base
+++ b/linux-x64/clang/include/c++/v1/__functional_base
@@ -561,7 +561,7 @@
 
 struct _LIBCPP_TEMPLATE_VIS allocator_arg_t { };
 
-#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_MEMORY)
+#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 extern const allocator_arg_t allocator_arg;
 #else
 /* _LIBCPP_INLINE_VAR */ constexpr allocator_arg_t allocator_arg = allocator_arg_t();
@@ -646,16 +646,6 @@
     new (__storage) _Tp (_VSTD::forward<_Args>(__args)..., __a);
 }
 
-// FIXME: Theis should have a version which takes a non-const alloc.
-template <class _Tp, class _Allocator, class... _Args>
-inline _LIBCPP_INLINE_VISIBILITY
-void __user_alloc_construct (_Tp *__storage, const _Allocator &__a, _Args &&... __args)
-{ 
-    __user_alloc_construct_impl( 
-             __uses_alloc_ctor<_Tp, _Allocator>(), 
-             __storage, __a, _VSTD::forward<_Args>(__args)...
-        );
-}
 #endif  // _LIBCPP_CXX03_LANG
 
 _LIBCPP_END_NAMESPACE_STD
diff --git a/linux-x64/clang/include/c++/v1/__hash_table b/linux-x64/clang/include/c++/v1/__hash_table
index 3f430af..c77de96 100644
--- a/linux-x64/clang/include/c++/v1/__hash_table
+++ b/linux-x64/clang/include/c++/v1/__hash_table
@@ -32,13 +32,8 @@
 
 _LIBCPP_BEGIN_NAMESPACE_STD
 
-#ifndef _LIBCPP_CXX03_LANG
-template <class _Key, class _Tp>
-union __hash_value_type;
-#else
 template <class _Key, class _Tp>
 struct __hash_value_type;
-#endif
 
 template <class _Key, class _Cp, class _Hash,
           bool =  is_empty<_Hash>::value && !__libcpp_is_final<_Hash>::value>
@@ -172,7 +167,7 @@
   }
 #ifndef _LIBCPP_CXX03_LANG
   _LIBCPP_INLINE_VISIBILITY
-  static  __container_value_type&& __move(__node_value_type& __v) {
+  static __container_value_type&& __move(__node_value_type& __v) {
     return _VSTD::move(__v);
   }
 #endif
@@ -184,7 +179,6 @@
   typedef _Tp                                          mapped_type;
   typedef __hash_value_type<_Key, _Tp>                 __node_value_type;
   typedef pair<const _Key, _Tp>                        __container_value_type;
-  typedef pair<_Key, _Tp>                              __nc_value_type;
   typedef __container_value_type                       __map_value_type;
   static const bool __is_map = true;
 
@@ -198,7 +192,7 @@
   static typename enable_if<__is_same_uncvref<_Up, __node_value_type>::value,
       __container_value_type const&>::type
   __get_value(_Up& __t) {
-    return __t.__cc;
+    return __t.__get_value();
   }
 
   template <class _Up>
@@ -211,12 +205,12 @@
 
   _LIBCPP_INLINE_VISIBILITY
   static __container_value_type* __get_ptr(__node_value_type& __n) {
-    return _VSTD::addressof(__n.__cc);
+    return _VSTD::addressof(__n.__get_value());
   }
 #ifndef _LIBCPP_CXX03_LANG
   _LIBCPP_INLINE_VISIBILITY
-  static __nc_value_type&& __move(__node_value_type& __v) {
-    return _VSTD::move(__v.__nc);
+  static pair<key_type&&, mapped_type&&> __move(__node_value_type& __v) {
+    return __v.__move();
   }
 #endif
 
@@ -865,6 +859,17 @@
     template <class> friend class __hash_map_node_destructor;
 };
 
+#if _LIBCPP_STD_VER > 14
+template <class _NodeType, class _Alloc>
+struct __generic_container_node_destructor;
+
+template <class _Tp, class _VoidPtr, class _Alloc>
+struct __generic_container_node_destructor<__hash_node<_Tp, _VoidPtr>, _Alloc>
+    : __hash_node_destructor<_Alloc>
+{
+    using __hash_node_destructor<_Alloc>::__hash_node_destructor;
+};
+#endif
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Key, class _Hash, class _Equal, class _Alloc>
@@ -1157,6 +1162,30 @@
         return __emplace_unique_key_args(_NodeTypes::__get_key(__x), __x);
     }
 
+#if _LIBCPP_STD_VER > 14
+    template <class _NodeHandle, class _InsertReturnType>
+    _LIBCPP_INLINE_VISIBILITY
+    _InsertReturnType __node_handle_insert_unique(_NodeHandle&& __nh);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_unique(const_iterator __hint,
+                                         _NodeHandle&& __nh);
+
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_multi(_NodeHandle&& __nh);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_multi(const_iterator __hint, _NodeHandle&& __nh);
+
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    _NodeHandle __node_handle_extract(key_type const& __key);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    _NodeHandle __node_handle_extract(const_iterator __it);
+#endif
+
     void clear() _NOEXCEPT;
     void rehash(size_type __n);
     _LIBCPP_INLINE_VISIBILITY void reserve(size_type __n)
@@ -2132,6 +2161,91 @@
 
 #endif  // _LIBCPP_CXX03_LANG
 
+#if _LIBCPP_STD_VER > 14
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle, class _InsertReturnType>
+_LIBCPP_INLINE_VISIBILITY
+_InsertReturnType
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_insert_unique(
+    _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return _InsertReturnType{end(), false, _NodeHandle()};
+    pair<iterator, bool> __result = __node_insert_unique(__nh.__ptr_);
+    if (__result.second)
+        __nh.__release();
+    return _InsertReturnType{__result.first, __result.second, _VSTD::move(__nh)};
+}
+
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_insert_unique(
+    const_iterator, _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+    pair<iterator, bool> __result = __node_insert_unique(__nh.__ptr_);
+    if (__result.second)
+        __nh.__release();
+    return __result.first;
+}
+
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+_NodeHandle
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_extract(
+    key_type const& __key)
+{
+    iterator __i = find(__key);
+    if (__i == end())
+        return _NodeHandle();
+    return __node_handle_extract<_NodeHandle>(__i);
+}
+
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+_NodeHandle
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_extract(
+    const_iterator __p)
+{
+    allocator_type __alloc(__node_alloc());
+    return _NodeHandle(remove(__p).release(), __alloc);
+}
+
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_insert_multi(
+    _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+    iterator __result = __node_insert_multi(__nh.__ptr_);
+    __nh.__release();
+    return __result;
+}
+
+template <class _Tp, class _Hash, class _Equal, class _Alloc>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __hash_table<_Tp, _Hash, _Equal, _Alloc>::iterator
+__hash_table<_Tp, _Hash, _Equal, _Alloc>::__node_handle_insert_multi(
+    const_iterator __hint, _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+    iterator __result = __node_insert_multi(__hint, __nh.__ptr_);
+    __nh.__release();
+    return __result;
+}
+
+#endif  // _LIBCPP_STD_VER > 14
+
 template <class _Tp, class _Hash, class _Equal, class _Alloc>
 void
 __hash_table<_Tp, _Hash, _Equal, _Alloc>::rehash(size_type __n)
diff --git a/linux-x64/clang/include/c++/v1/__libcpp_version b/linux-x64/clang/include/c++/v1/__libcpp_version
index 2bdc653..e002b36 100644
--- a/linux-x64/clang/include/c++/v1/__libcpp_version
+++ b/linux-x64/clang/include/c++/v1/__libcpp_version
@@ -1 +1 @@
-7000
+8000
diff --git a/linux-x64/clang/include/c++/v1/__locale b/linux-x64/clang/include/c++/v1/__locale
index 601f0d1..f43e7b4 100644
--- a/linux-x64/clang/include/c++/v1/__locale
+++ b/linux-x64/clang/include/c++/v1/__locale
@@ -24,11 +24,7 @@
 #elif defined(_AIX)
 # include <support/ibm/xlocale.h>
 #elif defined(__ANDROID__)
-// Android gained the locale aware functions in L (API level 21)
-# include <android/api-level.h>
-# if __ANDROID_API__ <= 20
-#  include <support/android/locale_bionic.h>
-# endif
+# include <support/android/locale_bionic.h>
 #elif defined(__sun__)
 # include <xlocale.h>
 # include <support/solaris/xlocale.h>
@@ -473,7 +469,7 @@
     static const mask alnum  = alpha | digit;
     static const mask graph  = alnum | punct;
 
-    _LIBCPP_ALWAYS_INLINE ctype_base() {}
+    _LIBCPP_INLINE_VISIBILITY ctype_base() {}
 };
 
 template <class _CharT> class _LIBCPP_TEMPLATE_VIS ctype;
@@ -486,77 +482,77 @@
 public:
     typedef wchar_t char_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit ctype(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool is(mask __m, char_type __c) const
     {
         return do_is(__m, __c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const
     {
         return do_is(__low, __high, __vec);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const
     {
         return do_scan_is(__m, __low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const
     {
         return do_scan_not(__m, __low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type toupper(char_type __c) const
     {
         return do_toupper(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* toupper(char_type* __low, const char_type* __high) const
     {
         return do_toupper(__low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type tolower(char_type __c) const
     {
         return do_tolower(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* tolower(char_type* __low, const char_type* __high) const
     {
         return do_tolower(__low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type widen(char __c) const
     {
         return do_widen(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char* widen(const char* __low, const char* __high, char_type* __to) const
     {
         return do_widen(__low, __high, __to);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char narrow(char_type __c, char __dfault) const
     {
         return do_narrow(__c, __dfault);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const
     {
         return do_narrow(__low, __high, __dfault, __to);
@@ -591,13 +587,13 @@
 
     explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0);
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool is(mask __m, char_type __c) const
     {
         return isascii(__c) ? (__tab_[static_cast<int>(__c)] & __m) !=0 : false;
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const
     {
         for (; __low != __high; ++__low, ++__vec)
@@ -605,7 +601,7 @@
         return __low;
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* scan_is (mask __m, const char_type* __low, const char_type* __high) const
     {
         for (; __low != __high; ++__low)
@@ -614,7 +610,7 @@
         return __low;
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const
     {
         for (; __low != __high; ++__low)
@@ -623,49 +619,49 @@
         return __low;
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type toupper(char_type __c) const
     {
         return do_toupper(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* toupper(char_type* __low, const char_type* __high) const
     {
         return do_toupper(__low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type tolower(char_type __c) const
     {
         return do_tolower(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char_type* tolower(char_type* __low, const char_type* __high) const
     {
         return do_tolower(__low, __high);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char_type widen(char __c) const
     {
         return do_widen(__c);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char* widen(const char* __low, const char* __high, char_type* __to) const
     {
         return do_widen(__low, __high, __to);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     char narrow(char_type __c, char __dfault) const
     {
         return do_narrow(__c, __dfault);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const char* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const
     {
         return do_narrow(__low, __high, __dfault, __to);
@@ -678,7 +674,7 @@
 #else
     static const size_t table_size = 256;  // FIXME: Don't hardcode this.
 #endif
-    _LIBCPP_ALWAYS_INLINE const mask* table() const  _NOEXCEPT {return __tab_;}
+    _LIBCPP_INLINE_VISIBILITY const mask* table() const  _NOEXCEPT {return __tab_;}
     static const mask* classic_table()  _NOEXCEPT;
 #if defined(__GLIBC__) || defined(__EMSCRIPTEN__)
     static const int* __classic_upper_table() _NOEXCEPT;
@@ -858,7 +854,7 @@
 class _LIBCPP_TYPE_VIS codecvt_base
 {
 public:
-    _LIBCPP_ALWAYS_INLINE codecvt_base() {}
+    _LIBCPP_INLINE_VISIBILITY codecvt_base() {}
     enum result {ok, partial, error, noconv};
 };
 
@@ -878,11 +874,11 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result out(state_type& __st,
                const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
                extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
@@ -890,14 +886,14 @@
         return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result unshift(state_type& __st,
                    extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
     {
         return do_unshift(__st, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result in(state_type& __st,
               const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
               intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const
@@ -905,25 +901,25 @@
         return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int encoding() const  _NOEXCEPT
     {
         return do_encoding();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool always_noconv() const  _NOEXCEPT
     {
         return do_always_noconv();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const
     {
         return do_length(__st, __frm, __end, __mx);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int max_length() const  _NOEXCEPT
     {
         return do_max_length();
@@ -932,7 +928,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(const char*, size_t __refs = 0)
         : locale::facet(__refs) {}
 
@@ -967,7 +963,7 @@
 
     explicit codecvt(size_t __refs = 0);
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result out(state_type& __st,
                const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
                extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
@@ -975,14 +971,14 @@
         return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result unshift(state_type& __st,
                    extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
     {
         return do_unshift(__st, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result in(state_type& __st,
               const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
               intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const
@@ -990,25 +986,25 @@
         return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int encoding() const  _NOEXCEPT
     {
         return do_encoding();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool always_noconv() const  _NOEXCEPT
     {
         return do_always_noconv();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const
     {
         return do_length(__st, __frm, __end, __mx);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int max_length() const  _NOEXCEPT
     {
         return do_max_length();
@@ -1047,11 +1043,11 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result out(state_type& __st,
                const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
                extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
@@ -1059,14 +1055,14 @@
         return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result unshift(state_type& __st,
                    extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
     {
         return do_unshift(__st, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result in(state_type& __st,
               const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
               intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const
@@ -1074,25 +1070,25 @@
         return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int encoding() const  _NOEXCEPT
     {
         return do_encoding();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool always_noconv() const  _NOEXCEPT
     {
         return do_always_noconv();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const
     {
         return do_length(__st, __frm, __end, __mx);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int max_length() const  _NOEXCEPT
     {
         return do_max_length();
@@ -1101,7 +1097,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(const char*, size_t __refs = 0)
         : locale::facet(__refs) {}
 
@@ -1133,11 +1129,11 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result out(state_type& __st,
                const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
                extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
@@ -1145,14 +1141,14 @@
         return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result unshift(state_type& __st,
                    extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const
     {
         return do_unshift(__st, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     result in(state_type& __st,
               const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
               intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const
@@ -1160,25 +1156,25 @@
         return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int encoding() const  _NOEXCEPT
     {
         return do_encoding();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool always_noconv() const  _NOEXCEPT
     {
         return do_always_noconv();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const
     {
         return do_length(__st, __frm, __end, __mx);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int max_length() const  _NOEXCEPT
     {
         return do_max_length();
@@ -1187,7 +1183,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt(const char*, size_t __refs = 0)
         : locale::facet(__refs) {}
 
@@ -1214,10 +1210,10 @@
     : public codecvt<_InternT, _ExternT, _StateT>
 {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt_byname(const char* __nm, size_t __refs = 0)
         : codecvt<_InternT, _ExternT, _StateT>(__nm, __refs) {}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt_byname(const string& __nm, size_t __refs = 0)
         : codecvt<_InternT, _ExternT, _StateT>(__nm.c_str(), __refs) {}
 protected:
@@ -1248,7 +1244,7 @@
 struct __narrow_to_utf8<8>
 {
     template <class _OutputIterator, class _CharT>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const
     {
@@ -1262,13 +1258,13 @@
 struct __narrow_to_utf8<16>
     : public codecvt<char16_t, char, mbstate_t>
 {
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     __narrow_to_utf8() : codecvt<char16_t, char, mbstate_t>(1) {}
 
     ~__narrow_to_utf8();
 
     template <class _OutputIterator, class _CharT>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const
     {
@@ -1296,13 +1292,13 @@
 struct __narrow_to_utf8<32>
     : public codecvt<char32_t, char, mbstate_t>
 {
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     __narrow_to_utf8() : codecvt<char32_t, char, mbstate_t>(1) {}
 
     ~__narrow_to_utf8();
 
     template <class _OutputIterator, class _CharT>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const
     {
@@ -1338,7 +1334,7 @@
 struct __widen_from_utf8<8>
 {
     template <class _OutputIterator>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const char* __nb, const char* __ne) const
     {
@@ -1352,13 +1348,13 @@
 struct __widen_from_utf8<16>
     : public codecvt<char16_t, char, mbstate_t>
 {
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     __widen_from_utf8() : codecvt<char16_t, char, mbstate_t>(1) {}
 
     ~__widen_from_utf8();
 
     template <class _OutputIterator>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const char* __nb, const char* __ne) const
     {
@@ -1386,13 +1382,13 @@
 struct __widen_from_utf8<32>
     : public codecvt<char32_t, char, mbstate_t>
 {
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     __widen_from_utf8() : codecvt<char32_t, char, mbstate_t>(1) {}
 
     ~__widen_from_utf8();
 
     template <class _OutputIterator>
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _OutputIterator
     operator()(_OutputIterator __s, const char* __nb, const char* __ne) const
     {
@@ -1430,11 +1426,11 @@
 
     explicit numpunct(size_t __refs = 0);
 
-    _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();}
-    _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();}
-    _LIBCPP_ALWAYS_INLINE string grouping() const         {return do_grouping();}
-    _LIBCPP_ALWAYS_INLINE string_type truename() const    {return do_truename();}
-    _LIBCPP_ALWAYS_INLINE string_type falsename() const   {return do_falsename();}
+    _LIBCPP_INLINE_VISIBILITY char_type decimal_point() const {return do_decimal_point();}
+    _LIBCPP_INLINE_VISIBILITY char_type thousands_sep() const {return do_thousands_sep();}
+    _LIBCPP_INLINE_VISIBILITY string grouping() const         {return do_grouping();}
+    _LIBCPP_INLINE_VISIBILITY string_type truename() const    {return do_truename();}
+    _LIBCPP_INLINE_VISIBILITY string_type falsename() const   {return do_falsename();}
 
     static locale::id id;
 
@@ -1461,11 +1457,11 @@
 
     explicit numpunct(size_t __refs = 0);
 
-    _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();}
-    _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();}
-    _LIBCPP_ALWAYS_INLINE string grouping() const         {return do_grouping();}
-    _LIBCPP_ALWAYS_INLINE string_type truename() const    {return do_truename();}
-    _LIBCPP_ALWAYS_INLINE string_type falsename() const   {return do_falsename();}
+    _LIBCPP_INLINE_VISIBILITY char_type decimal_point() const {return do_decimal_point();}
+    _LIBCPP_INLINE_VISIBILITY char_type thousands_sep() const {return do_thousands_sep();}
+    _LIBCPP_INLINE_VISIBILITY string grouping() const         {return do_grouping();}
+    _LIBCPP_INLINE_VISIBILITY string_type truename() const    {return do_truename();}
+    _LIBCPP_INLINE_VISIBILITY string_type falsename() const   {return do_falsename();}
 
     static locale::id id;
 
diff --git a/linux-x64/clang/include/c++/v1/__mutex_base b/linux-x64/clang/include/c++/v1/__mutex_base
index 402a52d..4659ca9 100644
--- a/linux-x64/clang/include/c++/v1/__mutex_base
+++ b/linux-x64/clang/include/c++/v1/__mutex_base
@@ -74,7 +74,7 @@
 struct _LIBCPP_TYPE_VIS try_to_lock_t {};
 struct _LIBCPP_TYPE_VIS adopt_lock_t {};
 
-#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_MUTEX)
+#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 
 extern const defer_lock_t  defer_lock;
 extern const try_to_lock_t try_to_lock;
diff --git a/linux-x64/clang/include/c++/v1/__node_handle b/linux-x64/clang/include/c++/v1/__node_handle
new file mode 100644
index 0000000..fe09f3c
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/__node_handle
@@ -0,0 +1,212 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___NODE_HANDLE
+#define _LIBCPP___NODE_HANDLE
+
+#include <__config>
+#include <memory>
+#include <optional>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER > 14
+
+#define __cpp_lib_node_extract 201606L
+
+// Specialized in __tree & __hash_table for their _NodeType.
+template <class _NodeType, class _Alloc>
+struct __generic_container_node_destructor;
+
+template <class _NodeType, class _Alloc,
+          template <class, class> class _MapOrSetSpecifics>
+class _LIBCPP_TEMPLATE_VIS __basic_node_handle
+    : public _MapOrSetSpecifics<
+          _NodeType,
+          __basic_node_handle<_NodeType, _Alloc, _MapOrSetSpecifics>>
+{
+    template <class _Tp, class _Compare, class _Allocator>
+        friend class __tree;
+    template <class _Tp, class _Hash, class _Equal, class _Allocator>
+        friend class __hash_table;
+    friend struct _MapOrSetSpecifics<
+        _NodeType, __basic_node_handle<_NodeType, _Alloc, _MapOrSetSpecifics>>;
+
+    typedef allocator_traits<_Alloc> __alloc_traits;
+    typedef typename __rebind_pointer<typename __alloc_traits::void_pointer,
+                                      _NodeType>::type
+        __node_pointer_type;
+
+public:
+    typedef _Alloc allocator_type;
+
+private:
+    __node_pointer_type __ptr_ = nullptr;
+    optional<allocator_type> __alloc_;
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __release()
+    {
+        __ptr_ = nullptr;
+        __alloc_ = _VSTD::nullopt;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __destroy_node_pointer()
+    {
+        if (__ptr_ != nullptr)
+        {
+            typedef typename __allocator_traits_rebind<
+                allocator_type, _NodeType>::type __node_alloc_type;
+            __node_alloc_type __alloc(*__alloc_);
+            __generic_container_node_destructor<_NodeType, __node_alloc_type>(
+                __alloc, true)(__ptr_);
+            __ptr_ = nullptr;
+        }
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __basic_node_handle(__node_pointer_type __ptr,
+                        allocator_type const& __alloc)
+            : __ptr_(__ptr), __alloc_(__alloc)
+    {
+    }
+
+public:
+    _LIBCPP_INLINE_VISIBILITY
+    __basic_node_handle() = default;
+
+    _LIBCPP_INLINE_VISIBILITY
+    __basic_node_handle(__basic_node_handle&& __other) noexcept
+            : __ptr_(__other.__ptr_),
+              __alloc_(_VSTD::move(__other.__alloc_))
+    {
+        __other.__ptr_ = nullptr;
+        __other.__alloc_ = _VSTD::nullopt;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __basic_node_handle& operator=(__basic_node_handle&& __other)
+    {
+        _LIBCPP_ASSERT(
+            __alloc_ == _VSTD::nullopt ||
+            __alloc_traits::propagate_on_container_move_assignment::value ||
+            __alloc_ == __other.__alloc_,
+            "node_type with incompatible allocator passed to "
+            "node_type::operator=(node_type&&)");
+
+        __destroy_node_pointer();
+        __ptr_ = __other.__ptr_;
+
+        if (__alloc_traits::propagate_on_container_move_assignment::value ||
+            __alloc_ == _VSTD::nullopt)
+            __alloc_ = _VSTD::move(__other.__alloc_);
+
+        __other.__ptr_ = nullptr;
+        __other.__alloc_ = _VSTD::nullopt;
+
+        return *this;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    allocator_type get_allocator() const { return *__alloc_; }
+
+    _LIBCPP_INLINE_VISIBILITY
+    explicit operator bool() const { return __ptr_ != nullptr; }
+
+    _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY
+    bool empty() const { return __ptr_ == nullptr; }
+
+    _LIBCPP_INLINE_VISIBILITY
+    void swap(__basic_node_handle& __other) noexcept(
+        __alloc_traits::propagate_on_container_swap::value ||
+        __alloc_traits::is_always_equal::value)
+    {
+        using _VSTD::swap;
+        swap(__ptr_, __other.__ptr_);
+        if (__alloc_traits::propagate_on_container_swap::value ||
+            __alloc_ == _VSTD::nullopt || __other.__alloc_ == _VSTD::nullopt)
+            swap(__alloc_, __other.__alloc_);
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    friend void swap(__basic_node_handle& __a, __basic_node_handle& __b)
+        noexcept(noexcept(__a.swap(__b))) { __a.swap(__b); }
+
+    _LIBCPP_INLINE_VISIBILITY
+    ~__basic_node_handle()
+    {
+        __destroy_node_pointer();
+    }
+};
+
+template <class _NodeType, class _Derived>
+struct __set_node_handle_specifics
+{
+    typedef typename _NodeType::__node_value_type value_type;
+
+    _LIBCPP_INLINE_VISIBILITY
+    value_type& value() const
+    {
+        return static_cast<_Derived const*>(this)->__ptr_->__value_;
+    }
+};
+
+template <class _NodeType, class _Derived>
+struct __map_node_handle_specifics
+{
+    typedef typename _NodeType::__node_value_type::key_type key_type;
+    typedef typename _NodeType::__node_value_type::mapped_type mapped_type;
+
+    _LIBCPP_INLINE_VISIBILITY
+    key_type& key() const
+    {
+        return static_cast<_Derived const*>(this)->
+            __ptr_->__value_.__ref().first;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    mapped_type& mapped() const
+    {
+        return static_cast<_Derived const*>(this)->
+            __ptr_->__value_.__ref().second;
+    }
+};
+
+template <class _NodeType, class _Alloc>
+using __set_node_handle =
+    __basic_node_handle< _NodeType, _Alloc, __set_node_handle_specifics>;
+
+template <class _NodeType, class _Alloc>
+using __map_node_handle =
+    __basic_node_handle< _NodeType, _Alloc, __map_node_handle_specifics>;
+
+template <class _Iterator, class _NodeType>
+_LIBCPP_TEMPLATE_VIS
+struct __insert_return_type
+{
+    _Iterator position;
+    bool inserted;
+    _NodeType node;
+};
+
+#endif // _LIBCPP_STD_VER > 14
+
+_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
+#endif
diff --git a/linux-x64/clang/include/c++/v1/__nullptr b/linux-x64/clang/include/c++/v1/__nullptr
index a341234..aa3b4d2 100644
--- a/linux-x64/clang/include/c++/v1/__nullptr
+++ b/linux-x64/clang/include/c++/v1/__nullptr
@@ -27,24 +27,24 @@
 
     struct __nat {int __for_bool_;};
 
-    _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {}
-    _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t() : __lx(0) {}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t(int __nat::*) : __lx(0) {}
 
-    _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR operator int __nat::*() const {return 0;}
 
     template <class _Tp>
-        _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR
+        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
         operator _Tp* () const {return 0;}
 
     template <class _Tp, class _Up>
-        _LIBCPP_ALWAYS_INLINE
+        _LIBCPP_INLINE_VISIBILITY
         operator _Tp _Up::* () const {return 0;}
 
-    friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator==(nullptr_t, nullptr_t) {return true;}
-    friend _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR bool operator!=(nullptr_t, nullptr_t) {return false;}
+    friend _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR bool operator==(nullptr_t, nullptr_t) {return true;}
+    friend _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR bool operator!=(nullptr_t, nullptr_t) {return false;}
 };
 
-inline _LIBCPP_ALWAYS_INLINE _LIBCPP_CONSTEXPR nullptr_t __get_nullptr_t() {return nullptr_t(0);}
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR nullptr_t __get_nullptr_t() {return nullptr_t(0);}
 
 #define nullptr _VSTD::__get_nullptr_t()
 
diff --git a/linux-x64/clang/include/c++/v1/__tree b/linux-x64/clang/include/c++/v1/__tree
index 3ccfcb7..3b3586c 100644
--- a/linux-x64/clang/include/c++/v1/__tree
+++ b/linux-x64/clang/include/c++/v1/__tree
@@ -37,13 +37,8 @@
 template <class _VoidPtr> class __tree_node_base;
 template <class _Tp, class _VoidPtr> class __tree_node;
 
-#ifndef _LIBCPP_CXX03_LANG
-template <class _Key, class _Value>
-union __value_type;
-#else
 template <class _Key, class _Value>
 struct __value_type;
-#endif
 
 template <class _Key, class _CP, class _Compare,
     bool = is_empty<_Compare>::value && !__libcpp_is_final<_Compare>::value>
@@ -569,10 +564,9 @@
   static __container_value_type* __get_ptr(__node_value_type& __n) {
     return _VSTD::addressof(__n);
   }
-
 #ifndef _LIBCPP_CXX03_LANG
   _LIBCPP_INLINE_VISIBILITY
-  static  __container_value_type&& __move(__node_value_type& __v) {
+  static __container_value_type&& __move(__node_value_type& __v) {
     return _VSTD::move(__v);
   }
 #endif
@@ -584,14 +578,13 @@
   typedef _Tp                                          mapped_type;
   typedef __value_type<_Key, _Tp>                      __node_value_type;
   typedef pair<const _Key, _Tp>                        __container_value_type;
-  typedef pair<_Key, _Tp>                              __nc_value_type;
   typedef __container_value_type                       __map_value_type;
   static const bool __is_map = true;
 
   _LIBCPP_INLINE_VISIBILITY
   static key_type const&
   __get_key(__node_value_type const& __t) {
-    return __t.__cc.first;
+    return __t.__get_value().first;
   }
 
   template <class _Up>
@@ -605,7 +598,7 @@
   _LIBCPP_INLINE_VISIBILITY
   static __container_value_type const&
   __get_value(__node_value_type const& __t) {
-    return __t.__cc;
+    return __t.__get_value();
   }
 
   template <class _Up>
@@ -618,13 +611,13 @@
 
   _LIBCPP_INLINE_VISIBILITY
   static __container_value_type* __get_ptr(__node_value_type& __n) {
-    return _VSTD::addressof(__n.__cc);
+    return _VSTD::addressof(__n.__get_value());
   }
 
 #ifndef _LIBCPP_CXX03_LANG
   _LIBCPP_INLINE_VISIBILITY
-  static  __nc_value_type&& __move(__node_value_type& __v) {
-    return _VSTD::move(__v.__nc);
+  static pair<key_type&&, mapped_type&&> __move(__node_value_type& __v) {
+    return __v.__move();
   }
 #endif
 };
@@ -803,6 +796,16 @@
     template <class> friend class __map_node_destructor;
 };
 
+#if _LIBCPP_STD_VER > 14
+template <class _NodeType, class _Alloc>
+struct __generic_container_node_destructor;
+template <class _Tp, class _VoidPtr, class _Alloc>
+struct __generic_container_node_destructor<__tree_node<_Tp, _VoidPtr>, _Alloc>
+    : __tree_node_destructor<_Alloc>
+{
+    using __tree_node_destructor<_Alloc>::__tree_node_destructor;
+};
+#endif
 
 template <class _Tp, class _NodePtr, class _DiffType>
 class _LIBCPP_TEMPLATE_VIS __tree_iterator
@@ -854,7 +857,7 @@
     __tree_iterator operator--(int)
         {__tree_iterator __t(*this); --(*this); return __t;}
 
-    friend _LIBCPP_INLINE_VISIBILITY 
+    friend _LIBCPP_INLINE_VISIBILITY
         bool operator==(const __tree_iterator& __x, const __tree_iterator& __y)
         {return __x.__ptr_ == __y.__ptr_;}
     friend _LIBCPP_INLINE_VISIBILITY
@@ -1345,6 +1348,33 @@
     iterator __node_insert_multi(__node_pointer __nd);
     iterator __node_insert_multi(const_iterator __p, __node_pointer __nd);
 
+
+    _LIBCPP_INLINE_VISIBILITY iterator __remove_node_pointer(__node_pointer);
+
+#if _LIBCPP_STD_VER > 14
+    template <class _NodeHandle, class _InsertReturnType>
+    _LIBCPP_INLINE_VISIBILITY
+    _InsertReturnType __node_handle_insert_unique(_NodeHandle&&);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_unique(const_iterator, _NodeHandle&&);
+
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_multi(_NodeHandle&&);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    iterator __node_handle_insert_multi(const_iterator, _NodeHandle&&);
+
+
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    _NodeHandle __node_handle_extract(key_type const&);
+    template <class _NodeHandle>
+    _LIBCPP_INLINE_VISIBILITY
+    _NodeHandle __node_handle_extract(const_iterator);
+#endif
+
     iterator erase(const_iterator __p);
     iterator erase(const_iterator __f, const_iterator __l);
     template <class _Key>
@@ -1458,7 +1488,7 @@
     void __copy_assign_alloc(const __tree& __t, true_type)
         {
         if (__node_alloc() != __t.__node_alloc())
-        	clear();
+            clear();
         __node_alloc() = __t.__node_alloc();
         }
     _LIBCPP_INLINE_VISIBILITY
@@ -1800,7 +1830,7 @@
         __node_traits::propagate_on_container_move_assignment::value &&
         is_nothrow_move_assignable<value_compare>::value &&
         is_nothrow_move_assignable<__node_allocator>::value)
-        
+
 {
     __move_assign(__t, integral_constant<bool,
                   __node_traits::propagate_on_container_move_assignment::value>());
@@ -2354,17 +2384,138 @@
 
 template <class _Tp, class _Compare, class _Allocator>
 typename __tree<_Tp, _Compare, _Allocator>::iterator
+__tree<_Tp, _Compare, _Allocator>::__remove_node_pointer(__node_pointer __ptr)
+{
+    iterator __r(__ptr);
+    ++__r;
+    if (__begin_node() == __ptr)
+        __begin_node() = __r.__ptr_;
+    --size();
+    __tree_remove(__end_node()->__left_,
+                  static_cast<__node_base_pointer>(__ptr));
+    return __r;
+}
+
+#if _LIBCPP_STD_VER > 14
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle, class _InsertReturnType>
+_LIBCPP_INLINE_VISIBILITY
+_InsertReturnType
+__tree<_Tp, _Compare, _Allocator>::__node_handle_insert_unique(
+    _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return _InsertReturnType{end(), false, _NodeHandle()};
+
+    __node_pointer __ptr = __nh.__ptr_;
+    __parent_pointer __parent;
+    __node_base_pointer& __child = __find_equal(__parent,
+                                                __ptr->__value_);
+    if (__child != nullptr)
+        return _InsertReturnType{
+            iterator(static_cast<__node_pointer>(__child)),
+            false, _VSTD::move(__nh)};
+
+    __insert_node_at(__parent, __child,
+                     static_cast<__node_base_pointer>(__ptr));
+    __nh.__release();
+    return _InsertReturnType{iterator(__ptr), true, _NodeHandle()};
+}
+
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __tree<_Tp, _Compare, _Allocator>::iterator
+__tree<_Tp, _Compare, _Allocator>::__node_handle_insert_unique(
+    const_iterator __hint, _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+
+    __node_pointer __ptr = __nh.__ptr_;
+    __parent_pointer __parent;
+    __node_base_pointer __dummy;
+    __node_base_pointer& __child = __find_equal(__hint, __parent, __dummy,
+                                                __ptr->__value_);
+    __node_pointer __r = static_cast<__node_pointer>(__child);
+    if (__child == nullptr)
+    {
+        __insert_node_at(__parent, __child,
+                         static_cast<__node_base_pointer>(__ptr));
+        __r = __ptr;
+        __nh.__release();
+    }
+    return iterator(__r);
+}
+
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+_NodeHandle
+__tree<_Tp, _Compare, _Allocator>::__node_handle_extract(key_type const& __key)
+{
+    iterator __it = find(__key);
+    if (__it == end())
+        return _NodeHandle();
+    return __node_handle_extract<_NodeHandle>(__it);
+}
+
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+_NodeHandle
+__tree<_Tp, _Compare, _Allocator>::__node_handle_extract(const_iterator __p)
+{
+    __node_pointer __np = __p.__get_np();
+    __remove_node_pointer(__np);
+    return _NodeHandle(__np, __alloc());
+}
+
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __tree<_Tp, _Compare, _Allocator>::iterator
+__tree<_Tp, _Compare, _Allocator>::__node_handle_insert_multi(_NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+    __node_pointer __ptr = __nh.__ptr_;
+    __parent_pointer __parent;
+    __node_base_pointer& __child = __find_leaf_high(
+        __parent, _NodeTypes::__get_key(__ptr->__value_));
+    __insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__ptr));
+    __nh.__release();
+    return iterator(__ptr);
+}
+
+template <class _Tp, class _Compare, class _Allocator>
+template <class _NodeHandle>
+_LIBCPP_INLINE_VISIBILITY
+typename __tree<_Tp, _Compare, _Allocator>::iterator
+__tree<_Tp, _Compare, _Allocator>::__node_handle_insert_multi(
+    const_iterator __hint, _NodeHandle&& __nh)
+{
+    if (__nh.empty())
+        return end();
+
+    __node_pointer __ptr = __nh.__ptr_;
+    __parent_pointer __parent;
+    __node_base_pointer& __child = __find_leaf(__hint, __parent,
+                                               _NodeTypes::__get_key(__ptr->__value_));
+    __insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__ptr));
+    __nh.__release();
+    return iterator(__ptr);
+}
+
+#endif  // _LIBCPP_STD_VER > 14
+
+template <class _Tp, class _Compare, class _Allocator>
+typename __tree<_Tp, _Compare, _Allocator>::iterator
 __tree<_Tp, _Compare, _Allocator>::erase(const_iterator __p)
 {
     __node_pointer __np = __p.__get_np();
-    iterator __r(__p.__ptr_);
-    ++__r;
-    if (__begin_node() == __p.__ptr_)
-        __begin_node() = __r.__ptr_;
-    --size();
+    iterator __r = __remove_node_pointer(__np);
     __node_allocator& __na = __node_alloc();
-    __tree_remove(__end_node()->__left_,
-                  static_cast<__node_base_pointer>(__np));
     __node_traits::destroy(__na, _NodeTypes::__get_ptr(
         const_cast<__node_value_type&>(*__p)));
     __node_traits::deallocate(__na, __np, 1);
diff --git a/linux-x64/clang/include/c++/v1/algorithm b/linux-x64/clang/include/c++/v1/algorithm
index a94b07b..90f1d24 100644
--- a/linux-x64/clang/include/c++/v1/algorithm
+++ b/linux-x64/clang/include/c++/v1/algorithm
@@ -671,10 +671,10 @@
 template <class _T1, class _T2 = _T1>
 struct __equal_to
 {
-    _LIBCPP_INLINE_VISIBILITY bool operator()(const _T1& __x, const _T1& __y) const {return __x == __y;}
-    _LIBCPP_INLINE_VISIBILITY bool operator()(const _T1& __x, const _T2& __y) const {return __x == __y;}
-    _LIBCPP_INLINE_VISIBILITY bool operator()(const _T2& __x, const _T1& __y) const {return __x == __y;}
-    _LIBCPP_INLINE_VISIBILITY bool operator()(const _T2& __x, const _T2& __y) const {return __x == __y;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 bool operator()(const _T1& __x, const _T1& __y) const {return __x == __y;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 bool operator()(const _T1& __x, const _T2& __y) const {return __x == __y;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 bool operator()(const _T2& __x, const _T1& __y) const {return __x == __y;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_AFTER_CXX11 bool operator()(const _T2& __x, const _T2& __y) const {return __x == __y;}
 };
 
 template <class _T1>
@@ -1708,7 +1708,7 @@
 #if _LIBCPP_DEBUG_LEVEL < 2
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename enable_if
 <
     is_trivially_copy_assignable<_Tp>::value,
@@ -1722,7 +1722,7 @@
 #else
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename enable_if
 <
     is_trivially_copy_assignable<_Tp>::value,
diff --git a/linux-x64/clang/include/c++/v1/any b/linux-x64/clang/include/c++/v1/any
index d7161b0..e6e0b6e 100644
--- a/linux-x64/clang/include/c++/v1/any
+++ b/linux-x64/clang/include/c++/v1/any
@@ -104,13 +104,13 @@
 
 #if _LIBCPP_STD_VER > 14
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_bad_any_cast()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw bad_any_cast();
 #else
-	_VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
@@ -304,7 +304,7 @@
         __any_imp::_Buffer __buf;
     };
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void * __call(_Action __a, any * __other = nullptr,
                   type_info const * __info = nullptr,
                    const void* __fallback_info = nullptr) const
@@ -312,7 +312,7 @@
         return __h(__a, this, __other, __info, __fallback_info);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void * __call(_Action __a, any * __other = nullptr,
                   type_info const * __info = nullptr,
                   const void* __fallback_info = nullptr)
diff --git a/linux-x64/clang/include/c++/v1/array b/linux-x64/clang/include/c++/v1/array
index fdb1f9d..ba4ff42 100644
--- a/linux-x64/clang/include/c++/v1/array
+++ b/linux-x64/clang/include/c++/v1/array
@@ -72,6 +72,9 @@
     const T* data() const noexcept;
 };
 
+  template <class T, class... U>
+    array(T, U...) -> array<T, 1 + sizeof...(U)>;
+
 template <class T, size_t N>
   bool operator==(const array<T,N>& x, const array<T,N>& y);
 template <class T, size_t N>
@@ -86,7 +89,7 @@
   bool operator>=(const array<T,N>& x, const array<T,N>& y);
 
 template <class T, size_t N >
-  void swap(array<T,N>& x, array<T,N>& y) noexcept(noexcept(x.swap(y)));
+  void swap(array<T,N>& x, array<T,N>& y) noexcept(noexcept(x.swap(y))); // C++17
 
 template <class T> class tuple_size;
 template <size_t I, class T> class tuple_element;
@@ -354,9 +357,17 @@
 };
 
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _Tp, class... _Args,
+         class = typename enable_if<(is_same_v<_Tp, _Args> && ...), void>::type
+         >
+array(_Tp, _Args...)
+  -> array<_Tp, 1 + sizeof...(_Args)>;
+#endif
+
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator==(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return _VSTD::equal(__x.begin(), __x.end(), __y.begin());
@@ -364,7 +375,7 @@
 
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator!=(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return !(__x == __y);
@@ -372,7 +383,7 @@
 
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator<(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return _VSTD::lexicographical_compare(__x.begin(), __x.end(),
@@ -381,7 +392,7 @@
 
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator>(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return __y < __x;
@@ -389,7 +400,7 @@
 
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator<=(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return !(__y < __x);
@@ -397,7 +408,7 @@
 
 template <class _Tp, size_t _Size>
 inline _LIBCPP_INLINE_VISIBILITY
-bool
+_LIBCPP_CONSTEXPR_AFTER_CXX17 bool
 operator>=(const array<_Tp, _Size>& __x, const array<_Tp, _Size>& __y)
 {
     return !(__x < __y);
diff --git a/linux-x64/clang/include/c++/v1/atomic b/linux-x64/clang/include/c++/v1/atomic
index f55e28f..809f78a 100644
--- a/linux-x64/clang/include/c++/v1/atomic
+++ b/linux-x64/clang/include/c++/v1/atomic
@@ -555,6 +555,9 @@
 #if !defined(_LIBCPP_HAS_C_ATOMIC_IMP) && !defined(_LIBCPP_HAS_GCC_ATOMIC_IMP)
 #error <atomic> is not implemented
 #endif
+#ifdef kill_dependency
+#error C++ standard library is incompatible with <stdatomic.h>
+#endif
 
 #if _LIBCPP_STD_VER > 14
 # define __cpp_lib_atomic_is_always_lock_free 201603L
@@ -695,7 +698,7 @@
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_load(volatile _Atomic(_Tp)* __a,
+static inline _Tp __c11_atomic_load(const volatile _Atomic(_Tp)* __a,
                                     memory_order __order) {
   _Tp __ret;
   __atomic_load(&__a->__a_value, &__ret,
@@ -704,7 +707,7 @@
 }
 
 template <typename _Tp>
-static inline _Tp __c11_atomic_load(_Atomic(_Tp)* __a, memory_order __order) {
+static inline _Tp __c11_atomic_load(const _Atomic(_Tp)* __a, memory_order __order) {
   _Tp __ret;
   __atomic_load(&__a->__a_value, &__ret,
                 __gcc_atomic::__to_gcc_order(__order));
@@ -1741,7 +1744,7 @@
     atomic_flag() _NOEXCEPT : __a_() {}
 #endif // _LIBCPP_CXX03_LANG
 
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR
     atomic_flag(bool __b) _NOEXCEPT : __a_(__b) {} // EXTENSION
 
 #ifndef _LIBCPP_CXX03_LANG
diff --git a/linux-x64/clang/include/c++/v1/bitset b/linux-x64/clang/include/c++/v1/bitset
index cd6c289..6e28596 100644
--- a/linux-x64/clang/include/c++/v1/bitset
+++ b/linux-x64/clang/include/c++/v1/bitset
@@ -238,9 +238,9 @@
     size_t __sz = _Size;
     for (size_t __i = 0; __i < sizeof(__t)/sizeof(__t[0]); ++__i, __v >>= __bits_per_word, __sz -= __bits_per_word )
         if ( __sz < __bits_per_word)
-        	__t[__i] = static_cast<__storage_type>(__v) & ( 1ULL << __sz ) - 1;
+            __t[__i] = static_cast<__storage_type>(__v) & ( 1ULL << __sz ) - 1;
         else
-        	__t[__i] = static_cast<__storage_type>(__v);
+            __t[__i] = static_cast<__storage_type>(__v);
 
     _VSTD::copy(__t, __t + sizeof(__t)/sizeof(__t[0]), __first_);
     _VSTD::fill(__first_ + sizeof(__t)/sizeof(__t[0]), __first_ + sizeof(__first_)/sizeof(__first_[0]),
@@ -254,7 +254,7 @@
 {
     __first_[0] = __v;
     if (_Size < __bits_per_word)
-    	__first_[0] &= ( 1ULL << _Size ) - 1;
+        __first_[0] &= ( 1ULL << _Size ) - 1;
 
     _VSTD::fill(__first_ + 1, __first_ + sizeof(__first_)/sizeof(__first_[0]), __storage_type(0));
 }
@@ -269,9 +269,9 @@
 #if __SIZEOF_SIZE_T__ == 8
     : __first_{__v}
 #elif __SIZEOF_SIZE_T__ == 4
-    : __first_{static_cast<__storage_type>(__v), 
-    			_Size >= 2 * __bits_per_word ? static_cast<__storage_type>(__v >> __bits_per_word)
-    			: static_cast<__storage_type>((__v >> __bits_per_word) & (__storage_type(1) << (_Size - __bits_per_word)) - 1)}
+    : __first_{static_cast<__storage_type>(__v),
+                _Size >= 2 * __bits_per_word ? static_cast<__storage_type>(__v >> __bits_per_word)
+                : static_cast<__storage_type>((__v >> __bits_per_word) & (__storage_type(1) << (_Size - __bits_per_word)) - 1)}
 #else
 #error This constructor has not been ported to this platform
 #endif
diff --git a/linux-x64/clang/include/c++/v1/cfloat b/linux-x64/clang/include/c++/v1/cfloat
index 176fa9d..0abe84b 100644
--- a/linux-x64/clang/include/c++/v1/cfloat
+++ b/linux-x64/clang/include/c++/v1/cfloat
@@ -20,11 +20,18 @@
     FLT_EVAL_METHOD     // C99
     FLT_RADIX
 
+    FLT_HAS_SUBNORM     // C11
+    DBL_HAS_SUBNORM     // C11
+    LDBL_HAS_SUBNORM    // C11
+
     FLT_MANT_DIG
     DBL_MANT_DIG
     LDBL_MANT_DIG
 
     DECIMAL_DIG         // C99
+    FLT_DECIMAL_DIG     // C11
+    DBL_DECIMAL_DIG     // C11
+    LDBL_DECIMAL_DIG    // C11
 
     FLT_DIG
     DBL_DIG
@@ -58,6 +65,9 @@
     DBL_MIN
     LDBL_MIN
 
+    FLT_TRUE_MIN        // C11
+    DBL_TRUE_MIN        // C11
+    LDBL_TRUE_MIN       // C11
 */
 
 #include <__config>
diff --git a/linux-x64/clang/include/c++/v1/charconv b/linux-x64/clang/include/c++/v1/charconv
new file mode 100644
index 0000000..7cb790e
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/charconv
@@ -0,0 +1,610 @@
+// -*- C++ -*-
+//===------------------------------ charconv ------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_CHARCONV
+#define _LIBCPP_CHARCONV
+
+/*
+    charconv synopsis
+
+namespace std {
+
+  // floating-point format for primitive numerical conversion
+  enum class chars_format {
+    scientific = unspecified,
+    fixed = unspecified,
+    hex = unspecified,
+    general = fixed | scientific
+  };
+
+  // 23.20.2, primitive numerical output conversion
+  struct to_chars_result {
+    char* ptr;
+    errc ec;
+  };
+
+  to_chars_result to_chars(char* first, char* last, see below value,
+                           int base = 10);
+
+  to_chars_result to_chars(char* first, char* last, float value);
+  to_chars_result to_chars(char* first, char* last, double value);
+  to_chars_result to_chars(char* first, char* last, long double value);
+
+  to_chars_result to_chars(char* first, char* last, float value,
+                           chars_format fmt);
+  to_chars_result to_chars(char* first, char* last, double value,
+                           chars_format fmt);
+  to_chars_result to_chars(char* first, char* last, long double value,
+                           chars_format fmt);
+
+  to_chars_result to_chars(char* first, char* last, float value,
+                           chars_format fmt, int precision);
+  to_chars_result to_chars(char* first, char* last, double value,
+                           chars_format fmt, int precision);
+  to_chars_result to_chars(char* first, char* last, long double value,
+                           chars_format fmt, int precision);
+
+  // 23.20.3, primitive numerical input conversion
+  struct from_chars_result {
+    const char* ptr;
+    errc ec;
+  };
+
+  from_chars_result from_chars(const char* first, const char* last,
+                               see below& value, int base = 10);
+
+  from_chars_result from_chars(const char* first, const char* last,
+                               float& value,
+                               chars_format fmt = chars_format::general);
+  from_chars_result from_chars(const char* first, const char* last,
+                               double& value,
+                               chars_format fmt = chars_format::general);
+  from_chars_result from_chars(const char* first, const char* last,
+                               long double& value,
+                               chars_format fmt = chars_format::general);
+
+} // namespace std
+
+*/
+
+#include <__errc>
+#include <type_traits>
+#include <limits>
+#include <stdint.h>
+#include <string.h>
+#include <math.h>
+
+#include <__debug>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER > 11
+
+enum class _LIBCPP_ENUM_VIS chars_format
+{
+    scientific = 0x1,
+    fixed = 0x2,
+    hex = 0x4,
+    general = fixed | scientific
+};
+
+struct _LIBCPP_TYPE_VIS to_chars_result
+{
+    char* ptr;
+    errc ec;
+};
+
+struct _LIBCPP_TYPE_VIS from_chars_result
+{
+    const char* ptr;
+    errc ec;
+};
+
+void to_chars(char*, char*, bool, int = 10) = delete;
+void from_chars(const char*, const char*, bool, int = 10) = delete;
+
+namespace __itoa
+{
+
+static constexpr uint64_t __pow10_64[] = {
+    UINT64_C(0),
+    UINT64_C(10),
+    UINT64_C(100),
+    UINT64_C(1000),
+    UINT64_C(10000),
+    UINT64_C(100000),
+    UINT64_C(1000000),
+    UINT64_C(10000000),
+    UINT64_C(100000000),
+    UINT64_C(1000000000),
+    UINT64_C(10000000000),
+    UINT64_C(100000000000),
+    UINT64_C(1000000000000),
+    UINT64_C(10000000000000),
+    UINT64_C(100000000000000),
+    UINT64_C(1000000000000000),
+    UINT64_C(10000000000000000),
+    UINT64_C(100000000000000000),
+    UINT64_C(1000000000000000000),
+    UINT64_C(10000000000000000000),
+};
+
+static constexpr uint32_t __pow10_32[] = {
+    UINT32_C(0),          UINT32_C(10),       UINT32_C(100),
+    UINT32_C(1000),       UINT32_C(10000),    UINT32_C(100000),
+    UINT32_C(1000000),    UINT32_C(10000000), UINT32_C(100000000),
+    UINT32_C(1000000000),
+};
+
+_LIBCPP_FUNC_VIS char* __u64toa(uint64_t __value, char* __buffer);
+_LIBCPP_FUNC_VIS char* __u32toa(uint32_t __value, char* __buffer);
+
+template <typename _Tp, typename = void>
+struct _LIBCPP_HIDDEN __traits_base
+{
+    using type = uint64_t;
+
+#if !defined(_LIBCPP_COMPILER_MSVC)
+    static _LIBCPP_INLINE_VISIBILITY int __width(_Tp __v)
+    {
+        auto __t = (64 - __builtin_clzll(__v | 1)) * 1233 >> 12;
+        return __t - (__v < __pow10_64[__t]) + 1;
+    }
+#endif
+
+    static _LIBCPP_INLINE_VISIBILITY char* __convert(_Tp __v, char* __p)
+    {
+        return __u64toa(__v, __p);
+    }
+
+    static _LIBCPP_INLINE_VISIBILITY auto& __pow() { return __pow10_64; }
+};
+
+template <typename _Tp>
+struct _LIBCPP_HIDDEN
+    __traits_base<_Tp, decltype(void(uint32_t{declval<_Tp>()}))>
+{
+    using type = uint32_t;
+
+#if !defined(_LIBCPP_COMPILER_MSVC)
+    static _LIBCPP_INLINE_VISIBILITY int __width(_Tp __v)
+    {
+        auto __t = (32 - __builtin_clz(__v | 1)) * 1233 >> 12;
+        return __t - (__v < __pow10_32[__t]) + 1;
+    }
+#endif
+
+    static _LIBCPP_INLINE_VISIBILITY char* __convert(_Tp __v, char* __p)
+    {
+        return __u32toa(__v, __p);
+    }
+
+    static _LIBCPP_INLINE_VISIBILITY auto& __pow() { return __pow10_32; }
+};
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY bool
+__mul_overflowed(unsigned char __a, _Tp __b, unsigned char& __r)
+{
+    auto __c = __a * __b;
+    __r = __c;
+    return __c > (numeric_limits<unsigned char>::max)();
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY bool
+__mul_overflowed(unsigned short __a, _Tp __b, unsigned short& __r)
+{
+    auto __c = __a * __b;
+    __r = __c;
+    return __c > (numeric_limits<unsigned short>::max)();
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY bool
+__mul_overflowed(_Tp __a, _Tp __b, _Tp& __r)
+{
+    static_assert(is_unsigned<_Tp>::value, "");
+#if !defined(_LIBCPP_COMPILER_MSVC)
+    return __builtin_mul_overflow(__a, __b, &__r);
+#else
+    bool __did = __b && ((numeric_limits<_Tp>::max)() / __b) < __a;
+    __r = __a * __b;
+    return __did;
+#endif
+}
+
+template <typename _Tp, typename _Up>
+inline _LIBCPP_INLINE_VISIBILITY bool
+__mul_overflowed(_Tp __a, _Up __b, _Tp& __r)
+{
+    return __mul_overflowed(__a, static_cast<_Tp>(__b), __r);
+}
+
+template <typename _Tp>
+struct _LIBCPP_HIDDEN __traits : __traits_base<_Tp>
+{
+    static constexpr int digits = numeric_limits<_Tp>::digits10 + 1;
+    using __traits_base<_Tp>::__pow;
+    using typename __traits_base<_Tp>::type;
+
+    // precondition: at least one non-zero character available
+    static _LIBCPP_INLINE_VISIBILITY char const*
+    __read(char const* __p, char const* __ep, type& __a, type& __b)
+    {
+        type __cprod[digits];
+        int __j = digits - 1;
+        int __i = digits;
+        do
+        {
+            if (!('0' <= *__p && *__p <= '9'))
+                break;
+            __cprod[--__i] = *__p++ - '0';
+        } while (__p != __ep && __i != 0);
+
+        __a = __inner_product(__cprod + __i + 1, __cprod + __j, __pow() + 1,
+                              __cprod[__i]);
+        if (__mul_overflowed(__cprod[__j], __pow()[__j - __i], __b))
+            --__p;
+        return __p;
+    }
+
+    template <typename _It1, typename _It2, class _Up>
+    static _LIBCPP_INLINE_VISIBILITY _Up
+    __inner_product(_It1 __first1, _It1 __last1, _It2 __first2, _Up __init)
+    {
+        for (; __first1 < __last1; ++__first1, ++__first2)
+            __init = __init + *__first1 * *__first2;
+        return __init;
+    }
+};
+
+}  // namespace __itoa
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY _Tp
+__complement(_Tp __x)
+{
+    static_assert(is_unsigned<_Tp>::value, "cast to unsigned first");
+    return _Tp(~__x + 1);
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY auto
+__to_unsigned(_Tp __x)
+{
+    return static_cast<make_unsigned_t<_Tp>>(__x);
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+__to_chars_itoa(char* __first, char* __last, _Tp __value, true_type)
+{
+    auto __x = __to_unsigned(__value);
+    if (__value < 0 && __first != __last)
+    {
+        *__first++ = '-';
+        __x = __complement(__x);
+    }
+
+    return __to_chars_itoa(__first, __last, __x, false_type());
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+__to_chars_itoa(char* __first, char* __last, _Tp __value, false_type)
+{
+    using __tx = __itoa::__traits<_Tp>;
+    auto __diff = __last - __first;
+
+#if !defined(_LIBCPP_COMPILER_MSVC)
+    if (__tx::digits <= __diff || __tx::__width(__value) <= __diff)
+        return {__tx::__convert(__value, __first), {}};
+    else
+        return {__last, errc::value_too_large};
+#else
+    if (__tx::digits <= __diff)
+        return {__tx::__convert(__value, __first), {}};
+    else
+    {
+        char __buf[__tx::digits];
+        auto __p = __tx::__convert(__value, __buf);
+        auto __len = __p - __buf;
+        if (__len <= __diff)
+        {
+            memcpy(__first, __buf, __len);
+            return {__first + __len, {}};
+        }
+        else
+            return {__last, errc::value_too_large};
+    }
+#endif
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+__to_chars_integral(char* __first, char* __last, _Tp __value, int __base,
+                    true_type)
+{
+    auto __x = __to_unsigned(__value);
+    if (__value < 0 && __first != __last)
+    {
+        *__first++ = '-';
+        __x = __complement(__x);
+    }
+
+    return __to_chars_integral(__first, __last, __x, __base, false_type());
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+__to_chars_integral(char* __first, char* __last, _Tp __value, int __base,
+                    false_type)
+{
+    if (__base == 10)
+        return __to_chars_itoa(__first, __last, __value, false_type());
+
+    auto __p = __last;
+    while (__p != __first)
+    {
+        auto __c = __value % __base;
+        __value /= __base;
+        *--__p = "0123456789abcdefghijklmnopqrstuvwxyz"[__c];
+        if (__value == 0)
+            break;
+    }
+
+    auto __len = __last - __p;
+    if (__value != 0 || !__len)
+        return {__last, errc::value_too_large};
+    else
+    {
+        memmove(__first, __p, __len);
+        return {__first + __len, {}};
+    }
+}
+
+template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+to_chars(char* __first, char* __last, _Tp __value)
+{
+    return __to_chars_itoa(__first, __last, __value, is_signed<_Tp>());
+}
+
+template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY to_chars_result
+to_chars(char* __first, char* __last, _Tp __value, int __base)
+{
+    _LIBCPP_ASSERT(2 <= __base && __base <= 36, "base not in [2, 36]");
+    return __to_chars_integral(__first, __last, __value, __base,
+                               is_signed<_Tp>());
+}
+
+template <typename _It, typename _Tp, typename _Fn, typename... _Ts>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__sign_combinator(_It __first, _It __last, _Tp& __value, _Fn __f, _Ts... __args)
+{
+    using __tl = numeric_limits<_Tp>;
+    decltype(__to_unsigned(__value)) __x;
+
+    bool __neg = (__first != __last && *__first == '-');
+    auto __r = __f(__neg ? __first + 1 : __first, __last, __x, __args...);
+    switch (__r.ec)
+    {
+    case errc::invalid_argument:
+        return {__first, __r.ec};
+    case errc::result_out_of_range:
+        return __r;
+    default:
+        break;
+    }
+
+    if (__neg)
+    {
+        if (__x <= __complement(__to_unsigned(__tl::min())))
+        {
+            __x = __complement(__x);
+            memcpy(&__value, &__x, sizeof(__x));
+            return __r;
+        }
+    }
+    else
+    {
+        if (__x <= (__tl::max)())
+        {
+            __value = __x;
+            return __r;
+        }
+    }
+
+    return {__r.ptr, errc::result_out_of_range};
+}
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY bool
+__in_pattern(_Tp __c)
+{
+    return '0' <= __c && __c <= '9';
+}
+
+struct _LIBCPP_HIDDEN __in_pattern_result
+{
+    bool __ok;
+    int __val;
+
+    explicit _LIBCPP_INLINE_VISIBILITY operator bool() const { return __ok; }
+};
+
+template <typename _Tp>
+inline _LIBCPP_INLINE_VISIBILITY __in_pattern_result
+__in_pattern(_Tp __c, int __base)
+{
+    if (__base <= 10)
+        return {'0' <= __c && __c < '0' + __base, __c - '0'};
+    else if (__in_pattern(__c))
+        return {true, __c - '0'};
+    else if ('a' <= __c && __c < 'a' + __base - 10)
+        return {true, __c - 'a' + 10};
+    else
+        return {'A' <= __c && __c < 'A' + __base - 10, __c - 'A' + 10};
+}
+
+template <typename _It, typename _Tp, typename _Fn, typename... _Ts>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__subject_seq_combinator(_It __first, _It __last, _Tp& __value, _Fn __f,
+                         _Ts... __args)
+{
+    auto __find_non_zero = [](_It __first, _It __last) {
+        for (; __first != __last; ++__first)
+            if (*__first != '0')
+                break;
+        return __first;
+    };
+
+    auto __p = __find_non_zero(__first, __last);
+    if (__p == __last || !__in_pattern(*__p, __args...))
+    {
+        if (__p == __first)
+            return {__first, errc::invalid_argument};
+        else
+        {
+            __value = 0;
+            return {__p, {}};
+        }
+    }
+
+    auto __r = __f(__p, __last, __value, __args...);
+    if (__r.ec == errc::result_out_of_range)
+    {
+        for (; __r.ptr != __last; ++__r.ptr)
+        {
+            if (!__in_pattern(*__r.ptr, __args...))
+                break;
+        }
+    }
+
+    return __r;
+}
+
+template <typename _Tp, enable_if_t<is_unsigned<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__from_chars_atoi(const char* __first, const char* __last, _Tp& __value)
+{
+    using __tx = __itoa::__traits<_Tp>;
+    using __output_type = typename __tx::type;
+
+    return __subject_seq_combinator(
+        __first, __last, __value,
+        [](const char* __first, const char* __last,
+           _Tp& __value) -> from_chars_result {
+            __output_type __a, __b;
+            auto __p = __tx::__read(__first, __last, __a, __b);
+            if (__p == __last || !__in_pattern(*__p))
+            {
+                __output_type __m = (numeric_limits<_Tp>::max)();
+                if (__m >= __a && __m - __a >= __b)
+                {
+                    __value = __a + __b;
+                    return {__p, {}};
+                }
+            }
+            return {__p, errc::result_out_of_range};
+        });
+}
+
+template <typename _Tp, enable_if_t<is_signed<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__from_chars_atoi(const char* __first, const char* __last, _Tp& __value)
+{
+    using __t = decltype(__to_unsigned(__value));
+    return __sign_combinator(__first, __last, __value, __from_chars_atoi<__t>);
+}
+
+template <typename _Tp, enable_if_t<is_unsigned<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__from_chars_integral(const char* __first, const char* __last, _Tp& __value,
+                      int __base)
+{
+    if (__base == 10)
+        return __from_chars_atoi(__first, __last, __value);
+
+    return __subject_seq_combinator(
+        __first, __last, __value,
+        [](const char* __p, const char* __last, _Tp& __value,
+           int __base) -> from_chars_result {
+            using __tl = numeric_limits<_Tp>;
+            auto __digits = __tl::digits / log2f(float(__base));
+            _Tp __a = __in_pattern(*__p++, __base).__val, __b = 0;
+
+            for (int __i = 1; __p != __last; ++__i, ++__p)
+            {
+                if (auto __c = __in_pattern(*__p, __base))
+                {
+                    if (__i < __digits - 1)
+                        __a = __a * __base + __c.__val;
+                    else
+                    {
+                        if (!__itoa::__mul_overflowed(__a, __base, __a))
+                            ++__p;
+                        __b = __c.__val;
+                        break;
+                    }
+                }
+                else
+                    break;
+            }
+
+            if (__p == __last || !__in_pattern(*__p, __base))
+            {
+                if ((__tl::max)() - __a >= __b)
+                {
+                    __value = __a + __b;
+                    return {__p, {}};
+                }
+            }
+            return {__p, errc::result_out_of_range};
+        },
+        __base);
+}
+
+template <typename _Tp, enable_if_t<is_signed<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+__from_chars_integral(const char* __first, const char* __last, _Tp& __value,
+                      int __base)
+{
+    using __t = decltype(__to_unsigned(__value));
+    return __sign_combinator(__first, __last, __value,
+                             __from_chars_integral<__t>, __base);
+}
+
+template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+from_chars(const char* __first, const char* __last, _Tp& __value)
+{
+    return __from_chars_atoi(__first, __last, __value);
+}
+
+template <typename _Tp, enable_if_t<is_integral<_Tp>::value, int> = 0>
+inline _LIBCPP_INLINE_VISIBILITY from_chars_result
+from_chars(const char* __first, const char* __last, _Tp& __value, int __base)
+{
+    _LIBCPP_ASSERT(2 <= __base && __base <= 36, "base not in [2, 36]");
+    return __from_chars_integral(__first, __last, __value, __base);
+}
+
+#endif  // _LIBCPP_STD_VER > 11
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif  // _LIBCPP_CHARCONV
diff --git a/linux-x64/clang/include/c++/v1/chrono b/linux-x64/clang/include/c++/v1/chrono
index 809f773..f0bd6af 100644
--- a/linux-x64/clang/include/c++/v1/chrono
+++ b/linux-x64/clang/include/c++/v1/chrono
@@ -147,6 +147,11 @@
 
 namespace chrono {
 
+
+template<class T> struct is_clock;  // C++20
+template<class T> inline constexpr bool is_clock_v = is_clock<T>::value;   // C++20
+
+
 // duration arithmetic
 template <class Rep1, class Period1, class Rep2, class Period2>
   constexpr
@@ -204,6 +209,8 @@
 template <class ToDuration, class Rep, class Period>
     constexpr ToDuration round(const duration<Rep, Period>& d);    // C++17
 
+// duration I/O is elsewhere
+
 // time_point arithmetic (all constexpr in C++14)
 template <class Clock, class Duration1, class Rep2, class Period2>
   time_point<Clock, typename common_type<Duration1, duration<Rep2, Period2>>::type>
@@ -251,6 +258,7 @@
 
 template <class Rep, class Period>
     constexpr duration<Rep, Period> abs(duration<Rep, Period> d);  // C++17
+
 // Clocks
 
 class system_clock
@@ -267,6 +275,28 @@
     static time_point from_time_t(time_t __t) noexcept;
 };
 
+template <class Duration>
+  using sys_time  = time_point<system_clock, Duration>; // C++20
+using sys_seconds = sys_time<seconds>;                  // C++20
+using sys_days    = sys_time<days>;                     // C++20
+
+class utc_clock;                                        // C++20
+
+template <class Duration>
+  using utc_time  = time_point<utc_clock, Duration>;    // C++20
+using utc_seconds = utc_time<seconds>;                  // C++20
+
+class tai_clock;                                        // C++20
+
+template <class Duration>
+  using tai_time  = time_point<tai_clock, Duration>;    // C++20
+using tai_seconds = tai_time<seconds>;                  // C++20
+
+class file_clock;                                       // C++20
+
+template<class Duration>
+  using file_time = time_point<file_clock, Duration>;   // C++20
+
 class steady_clock
 {
 public:
@@ -281,8 +311,466 @@
 
 typedef steady_clock high_resolution_clock;
 
+// 25.7.8, local time           // C++20
+struct local_t {};
+template<class Duration>
+  using local_time  = time_point<local_t, Duration>;
+using local_seconds = local_time<seconds>;
+using local_days    = local_time<days>;
+
+// 25.7.9, time_point conversions template<class DestClock, class SourceClock>    // C++20
+struct clock_time_conversion;
+
+template<class DestClock, class SourceClock, class Duration>
+  auto clock_cast(const time_point<SourceClock, Duration>& t);
+
+// 25.8.2, class last_spec    // C++20
+struct last_spec;
+
+// 25.8.3, class day          // C++20
+
+class day;
+constexpr bool operator==(const day& x, const day& y) noexcept;
+constexpr bool operator!=(const day& x, const day& y) noexcept;
+constexpr bool operator< (const day& x, const day& y) noexcept;
+constexpr bool operator> (const day& x, const day& y) noexcept;
+constexpr bool operator<=(const day& x, const day& y) noexcept;
+constexpr bool operator>=(const day& x, const day& y) noexcept;
+constexpr day  operator+(const day&  x, const days& y) noexcept;
+constexpr day  operator+(const days& x, const day&  y) noexcept;
+constexpr day  operator-(const day&  x, const days& y) noexcept;
+constexpr days operator-(const day&  x, const day&  y) noexcept;
+
+// 25.8.4, class month    // C++20
+class month;
+constexpr bool operator==(const month& x, const month& y) noexcept;
+constexpr bool operator!=(const month& x, const month& y) noexcept;
+constexpr bool operator< (const month& x, const month& y) noexcept;
+constexpr bool operator> (const month& x, const month& y) noexcept;
+constexpr bool operator<=(const month& x, const month& y) noexcept;
+constexpr bool operator>=(const month& x, const month& y) noexcept;
+constexpr month  operator+(const month&  x, const months& y) noexcept;
+constexpr month  operator+(const months& x,  const month& y) noexcept;
+constexpr month  operator-(const month&  x, const months& y) noexcept;
+constexpr months operator-(const month&  x,  const month& y) noexcept;
+
+// 25.8.5, class year    // C++20
+class year;
+constexpr bool operator==(const year& x, const year& y) noexcept;
+constexpr bool operator!=(const year& x, const year& y) noexcept;
+constexpr bool operator< (const year& x, const year& y) noexcept;
+constexpr bool operator> (const year& x, const year& y) noexcept;
+constexpr bool operator<=(const year& x, const year& y) noexcept;
+constexpr bool operator>=(const year& x, const year& y) noexcept;
+constexpr year  operator+(const year&  x, const years& y) noexcept;
+constexpr year  operator+(const years& x, const year&  y) noexcept;
+constexpr year  operator-(const year&  x, const years& y) noexcept;
+constexpr years operator-(const year&  x, const year&  y) noexcept;
+
+// 25.8.6, class weekday    // C++20
+class weekday;
+
+constexpr bool operator==(const weekday& x, const weekday& y) noexcept;
+constexpr bool operator!=(const weekday& x, const weekday& y) noexcept;
+constexpr weekday operator+(const weekday& x, const days&    y) noexcept;
+constexpr weekday operator+(const days&    x, const weekday& y) noexcept;
+constexpr weekday operator-(const weekday& x, const days&    y) noexcept;
+constexpr days    operator-(const weekday& x, const weekday& y) noexcept;
+
+// 25.8.7, class weekday_indexed    // C++20
+
+class weekday_indexed;
+constexpr bool operator==(const weekday_indexed& x, const weekday_indexed& y) noexcept;
+constexpr bool operator!=(const weekday_indexed& x, const weekday_indexed& y) noexcept;
+
+// 25.8.8, class weekday_last    // C++20
+class weekday_last;
+
+constexpr bool operator==(const weekday_last& x, const weekday_last& y) noexcept;
+constexpr bool operator!=(const weekday_last& x, const weekday_last& y) noexcept;
+
+// 25.8.9, class month_day    // C++20
+class month_day;
+
+constexpr bool operator==(const month_day& x, const month_day& y) noexcept;
+constexpr bool operator!=(const month_day& x, const month_day& y) noexcept;
+constexpr bool operator< (const month_day& x, const month_day& y) noexcept;
+constexpr bool operator> (const month_day& x, const month_day& y) noexcept;
+constexpr bool operator<=(const month_day& x, const month_day& y) noexcept;
+constexpr bool operator>=(const month_day& x, const month_day& y) noexcept;
+
+
+// 25.8.10, class month_day_last    // C++20
+class month_day_last;
+
+constexpr bool operator==(const month_day_last& x, const month_day_last& y) noexcept;
+constexpr bool operator!=(const month_day_last& x, const month_day_last& y) noexcept;
+constexpr bool operator< (const month_day_last& x, const month_day_last& y) noexcept;
+constexpr bool operator> (const month_day_last& x, const month_day_last& y) noexcept;
+constexpr bool operator<=(const month_day_last& x, const month_day_last& y) noexcept;
+constexpr bool operator>=(const month_day_last& x, const month_day_last& y) noexcept;
+
+// 25.8.11, class month_weekday    // C++20
+class month_weekday;
+
+constexpr bool operator==(const month_weekday& x, const month_weekday& y) noexcept;
+constexpr bool operator!=(const month_weekday& x, const month_weekday& y) noexcept;
+
+// 25.8.12, class month_weekday_last    // C++20
+class month_weekday_last;
+
+constexpr bool operator==(const month_weekday_last& x, const month_weekday_last& y) noexcept;
+constexpr bool operator!=(const month_weekday_last& x, const month_weekday_last& y) noexcept;
+
+
+// 25.8.13, class year_month    // C++20
+class year_month;
+
+constexpr bool operator==(const year_month& x, const year_month& y) noexcept;
+constexpr bool operator!=(const year_month& x, const year_month& y) noexcept;
+constexpr bool operator< (const year_month& x, const year_month& y) noexcept;
+constexpr bool operator> (const year_month& x, const year_month& y) noexcept;
+constexpr bool operator<=(const year_month& x, const year_month& y) noexcept;
+constexpr bool operator>=(const year_month& x, const year_month& y) noexcept;
+
+constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;
+constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;
+constexpr year_month operator-(const year_month& ym, const months& dm) noexcept;
+constexpr months operator-(const year_month& x, const year_month& y) noexcept;
+constexpr year_month operator+(const year_month& ym, const years& dy) noexcept;
+constexpr year_month operator+(const years& dy, const year_month& ym) noexcept;
+constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;
+
+// 25.8.14, class year_month_day class    // C++20
+year_month_day;
+
+constexpr bool operator==(const year_month_day& x, const year_month_day& y) noexcept;
+constexpr bool operator!=(const year_month_day& x, const year_month_day& y) noexcept;
+constexpr bool operator< (const year_month_day& x, const year_month_day& y) noexcept;
+constexpr bool operator> (const year_month_day& x, const year_month_day& y) noexcept;
+constexpr bool operator<=(const year_month_day& x, const year_month_day& y) noexcept;
+constexpr bool operator>=(const year_month_day& x, const year_month_day& y) noexcept;
+
+constexpr year_month_day operator+(const year_month_day& ymd, const months& dm) noexcept;
+constexpr year_month_day operator+(const months& dm, const year_month_day& ymd) noexcept;
+constexpr year_month_day operator+(const year_month_day& ymd, const years& dy) noexcept;
+constexpr year_month_day operator+(const years& dy, const year_month_day& ymd) noexcept;
+constexpr year_month_day operator-(const year_month_day& ymd, const months& dm) noexcept;
+constexpr year_month_day operator-(const year_month_day& ymd, const years& dy) noexcept;
+
+
+// 25.8.15, class year_month_day_last    // C++20
+class year_month_day_last;
+
+constexpr bool operator==(const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+constexpr bool operator!=(const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+constexpr bool operator< (const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+constexpr bool operator> (const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+constexpr bool operator<=(const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+constexpr bool operator>=(const year_month_day_last& x,
+                          const year_month_day_last& y) noexcept;
+
+constexpr year_month_day_last
+  operator+(const year_month_day_last& ymdl, const months& dm) noexcept;
+constexpr year_month_day_last
+  operator+(const months& dm, const year_month_day_last& ymdl) noexcept;
+constexpr year_month_day_last
+  operator+(const year_month_day_last& ymdl, const years& dy) noexcept;
+constexpr year_month_day_last
+  operator+(const years& dy, const year_month_day_last& ymdl) noexcept;
+constexpr year_month_day_last
+  operator-(const year_month_day_last& ymdl, const months& dm) noexcept;
+constexpr year_month_day_last
+  operator-(const year_month_day_last& ymdl, const years& dy) noexcept;
+
+// 25.8.16, class year_month_weekday    // C++20
+class year_month_weekday;
+
+constexpr bool operator==(const year_month_weekday& x,
+                          const year_month_weekday& y) noexcept;
+constexpr bool operator!=(const year_month_weekday& x,
+                          const year_month_weekday& y) noexcept;
+
+constexpr year_month_weekday
+  operator+(const year_month_weekday& ymwd, const months& dm) noexcept;
+constexpr year_month_weekday
+  operator+(const months& dm, const year_month_weekday& ymwd) noexcept;
+constexpr year_month_weekday
+  operator+(const year_month_weekday& ymwd, const years& dy) noexcept;
+constexpr year_month_weekday
+  operator+(const years& dy, const year_month_weekday& ymwd) noexcept;
+constexpr year_month_weekday
+  operator-(const year_month_weekday& ymwd, const months& dm) noexcept;
+constexpr year_month_weekday
+  operator-(const year_month_weekday& ymwd, const years& dy) noexcept;
+
+// 25.8.17, class year_month_weekday_last    // C++20
+class year_month_weekday_last;
+
+constexpr bool operator==(const year_month_weekday_last& x,
+                          const year_month_weekday_last& y) noexcept;
+constexpr bool operator!=(const year_month_weekday_last& x,
+                          const year_month_weekday_last& y) noexcept;
+constexpr year_month_weekday_last
+  operator+(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
+constexpr year_month_weekday_last
+  operator+(const months& dm, const year_month_weekday_last& ymwdl) noexcept;
+constexpr year_month_weekday_last
+  operator+(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
+constexpr year_month_weekday_last
+  operator+(const years& dy, const year_month_weekday_last& ymwdl) noexcept;
+constexpr year_month_weekday_last
+  operator-(const year_month_weekday_last& ymwdl, const months& dm) noexcept;
+constexpr year_month_weekday_last
+  operator-(const year_month_weekday_last& ymwdl, const years& dy) noexcept;
+
+// 25.8.18, civil calendar conventional syntax operators    // C++20
+constexpr year_month
+  operator/(const year& y, const month& m) noexcept;
+constexpr year_month
+  operator/(const year& y, int m) noexcept;
+constexpr month_day
+  operator/(const month& m, const day& d) noexcept;
+constexpr month_day
+  operator/(const month& m, int d) noexcept;
+constexpr month_day
+  operator/(int m, const day& d) noexcept;
+constexpr month_day
+  operator/(const day& d, const month& m) noexcept;
+constexpr month_day
+  operator/(const day& d, int m) noexcept;
+constexpr month_day_last
+  operator/(const month& m, last_spec) noexcept;
+constexpr month_day_last
+  operator/(int m, last_spec) noexcept;
+constexpr month_day_last
+  operator/(last_spec, const month& m) noexcept;
+constexpr month_day_last
+  operator/(last_spec, int m) noexcept;
+constexpr month_weekday
+  operator/(const month& m, const weekday_indexed& wdi) noexcept;
+constexpr month_weekday
+  operator/(int m, const weekday_indexed& wdi) noexcept;
+constexpr month_weekday
+  operator/(const weekday_indexed& wdi, const month& m) noexcept;
+constexpr month_weekday
+  operator/(const weekday_indexed& wdi, int m) noexcept;
+constexpr month_weekday_last
+  operator/(const month& m, const weekday_last& wdl) noexcept;
+constexpr month_weekday_last
+  operator/(int m, const weekday_last& wdl) noexcept;
+constexpr month_weekday_last
+  operator/(const weekday_last& wdl, const month& m) noexcept;
+constexpr month_weekday_last
+  operator/(const weekday_last& wdl, int m) noexcept;
+constexpr year_month_day
+  operator/(const year_month& ym, const day& d) noexcept;
+constexpr year_month_day
+  operator/(const year_month& ym, int d) noexcept;
+constexpr year_month_day
+  operator/(const year& y, const month_day& md) noexcept;
+constexpr year_month_day
+  operator/(int y, const month_day& md) noexcept;
+constexpr year_month_day
+  operator/(const month_day& md, const year& y) noexcept;
+constexpr year_month_day
+  operator/(const month_day& md, int y) noexcept;
+constexpr year_month_day_last
+  operator/(const year_month& ym, last_spec) noexcept;
+constexpr year_month_day_last
+  operator/(const year& y, const month_day_last& mdl) noexcept;
+constexpr year_month_day_last
+  operator/(int y, const month_day_last& mdl) noexcept;
+constexpr year_month_day_last
+  operator/(const month_day_last& mdl, const year& y) noexcept;
+constexpr year_month_day_last
+  operator/(const month_day_last& mdl, int y) noexcept;
+constexpr year_month_weekday
+  operator/(const year_month& ym, const weekday_indexed& wdi) noexcept;
+constexpr year_month_weekday
+  operator/(const year& y, const month_weekday& mwd) noexcept;
+constexpr year_month_weekday
+  operator/(int y, const month_weekday& mwd) noexcept;
+constexpr year_month_weekday
+  operator/(const month_weekday& mwd, const year& y) noexcept;
+constexpr year_month_weekday
+  operator/(const month_weekday& mwd, int y) noexcept;
+constexpr year_month_weekday_last
+  operator/(const year_month& ym, const weekday_last& wdl) noexcept;
+constexpr year_month_weekday_last
+  operator/(const year& y, const month_weekday_last& mwdl) noexcept;
+constexpr year_month_weekday_last
+  operator/(int y, const month_weekday_last& mwdl) noexcept;
+constexpr year_month_weekday_last
+  operator/(const month_weekday_last& mwdl, const year& y) noexcept;
+constexpr year_month_weekday_last
+  operator/(const month_weekday_last& mwdl, int y) noexcept;
+
+// 25.9, class template time_of_day    // C++20
+template<class Duration> class time_of_day;
+
+template<> class time_of_day<hours>;
+template<> class time_of_day<minutes>;
+template<> class time_of_day<seconds>;
+template<class Rep, class Period> class time_of_day<duration<Rep, Period>>;
+
+// 25.10.2, time zone database     // C++20
+struct tzdb;
+class tzdb_list;
+
+// 25.10.2.3, time zone database access    // C++20
+const tzdb& get_tzdb();
+tzdb_list& get_tzdb_list();
+const time_zone* locate_zone(string_view tz_name);
+const time_zone* current_zone();
+
+// 25.10.2.4, remote time zone database support    // C++20
+const tzdb& reload_tzdb();
+string remote_version();
+
+// 25.10.3, exception classes    // C++20
+class nonexistent_local_time;
+class ambiguous_local_time;
+
+// 25.10.4, information classes    // C++20
+struct sys_info;
+struct local_info;
+
+// 25.10.5, class time_zone    // C++20
+enum class choose {earliest, latest};
+class time_zone;
+bool operator==(const time_zone& x, const time_zone& y) noexcept;
+bool operator!=(const time_zone& x, const time_zone& y) noexcept;
+bool operator<(const time_zone& x, const time_zone& y) noexcept;
+bool operator>(const time_zone& x, const time_zone& y) noexcept;
+bool operator<=(const time_zone& x, const time_zone& y) noexcept;
+bool operator>=(const time_zone& x, const time_zone& y) noexcept;
+
+// 25.10.6, class template zoned_traits    // C++20
+template<class T> struct zoned_traits;
+
+// 25.10.7, class template zoned_time    // C++20
+template<class Duration, class TimeZonePtr = const time_zone*> class zoned_time;
+using zoned_seconds = zoned_time<seconds>;
+
+template<class Duration1, class Duration2, class TimeZonePtr>
+  bool operator==(const zoned_time<Duration1, TimeZonePtr>& x,
+                  const zoned_time<Duration2, TimeZonePtr>& y);
+template<class Duration1, class Duration2, class TimeZonePtr>
+  bool operator!=(const zoned_time<Duration1, TimeZonePtr>& x,
+                  const zoned_time<Duration2, TimeZonePtr>& y);
+
+// 25.10.8, leap second support    // C++20
+class leap;
+
+bool operator==(const leap& x, const leap& y);
+bool operator!=(const leap& x, const leap& y);
+bool operator< (const leap& x, const leap& y);
+bool operator> (const leap& x, const leap& y);
+bool operator<=(const leap& x, const leap& y);
+bool operator>=(const leap& x, const leap& y);
+template<class Duration>
+  bool operator==(const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator==(const sys_time<Duration>& x, const leap& y);
+template<class Duration>
+  bool operator!=(const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator!=(const sys_time<Duration>& x, const leap& y);
+template<class Duration>
+  bool operator< (const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator< (const sys_time<Duration>& x, const leap& y);
+template<class Duration>
+  bool operator> (const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator> (const sys_time<Duration>& x, const leap& y);
+template<class Duration>
+  bool operator<=(const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator<=(const sys_time<Duration>& x, const leap& y);
+template<class Duration>
+  bool operator>=(const leap& x, const sys_time<Duration>& y);
+template<class Duration>
+  bool operator>=(const sys_time<Duration>& x, const leap& y);
+
+// 25.10.9, class link    // C++20
+class link;
+bool operator==(const link& x, const link& y);
+bool operator!=(const link& x, const link& y);
+bool operator< (const link& x, const link& y);
+bool operator> (const link& x, const link& y);
+bool operator<=(const link& x, const link& y);
+bool operator>=(const link& x, const link& y);
+
+// 25.11, formatting    // C++20
+template<class charT, class Streamable>
+  basic_string<charT>
+    format(const charT* fmt, const Streamable& s);
+
+template<class charT, class Streamable>
+  basic_string<charT>
+    format(const locale& loc, const charT* fmt, const Streamable& s);
+
+template<class charT, class traits, class Alloc, class Streamable>
+  basic_string<charT, traits, Alloc>
+    format(const basic_string<charT, traits, Alloc>& fmt, const Streamable& s);
+
+template<class charT, class traits, class Alloc, class Streamable>
+  basic_string<charT, traits, Alloc>
+    format(const locale& loc, const basic_string<charT, traits, Alloc>& fmt,
+           const Streamable& s);
+
+// 25.12, parsing    // C++20
+template<class charT, class traits, class Alloc, class Parsable>
+unspecified
+    parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp);
+
+template<class charT, class traits, class Alloc, class Parsable>
+unspecified
+    parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
+          basic_string<charT, traits, Alloc>& abbrev);
+
+template<class charT, class traits, class Alloc, class Parsable>
+unspecified
+    parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
+          minutes& offset);
+
+template<class charT, class traits, class Alloc, class Parsable>
+unspecified
+    parse(const basic_string<charT, traits, Alloc>& format, Parsable& tp,
+          basic_string<charT, traits, Alloc>& abbrev, minutes& offset);
+
+inline constexpr last_spec                              last{};       // C++20
+inline constexpr chrono::weekday                        Sunday{0};    // C++20
+inline constexpr chrono::weekday                        Monday{1};    // C++20
+inline constexpr chrono::weekday                        Tuesday{2};   // C++20
+inline constexpr chrono::weekday                        Wednesday{3}; // C++20
+inline constexpr chrono::weekday                        Thursday{4};  // C++20
+inline constexpr chrono::weekday                        Friday{5};    // C++20
+inline constexpr chrono::weekday                        Saturday{6};  // C++20
+
+inline constexpr chrono::month                          January{1};   // C++20
+inline constexpr chrono::month                          February{2};  // C++20
+inline constexpr chrono::month                          March{3};     // C++20
+inline constexpr chrono::month                          April{4};     // C++20
+inline constexpr chrono::month                          May{5};       // C++20
+inline constexpr chrono::month                          June{6};      // C++20
+inline constexpr chrono::month                          July{7};      // C++20
+inline constexpr chrono::month                          August{8};    // C++20
+inline constexpr chrono::month                          September{9}; // C++20
+inline constexpr chrono::month                          October{10};  // C++20
+inline constexpr chrono::month                          November{11}; // C++20
+inline constexpr chrono::month                          December{12}; // C++20
 }  // chrono
 
+inline namespace literals {
+  inline namespace chrono_literals {
 constexpr chrono::hours                                 operator ""h(unsigned long long); // C++14
 constexpr chrono::duration<unspecified , ratio<3600,1>> operator ""h(long double); // C++14
 constexpr chrono::minutes                               operator ""min(unsigned long long); // C++14
@@ -295,6 +783,10 @@
 constexpr chrono::duration<unspecified , micro>         operator ""us(long double); // C++14
 constexpr chrono::nanoseconds                           operator ""ns(unsigned long long); // C++14
 constexpr chrono::duration<unspecified , nano>          operator ""ns(long double); // C++14
+constexpr chrono::day                                   operator ""d(unsigned long long d) noexcept; // C++20
+constexpr chrono::year                                  operator ""y(unsigned long long y) noexcept; // C++20
+}  // chrono_literals
+}  // literals
 
 }  // std
 */
@@ -523,7 +1015,7 @@
         typedef ratio<__mul<__n1, __d2, !value>::value,
                       __mul<__n2, __d1, !value>::value> type;
     };
-    
+
 public:
     typedef _Rep rep;
     typedef typename _Period::type period;
@@ -1084,7 +1576,7 @@
 #if _LIBCPP_STD_VER > 11
 // Suffixes for duration literals [time.duration.literals]
 inline namespace literals
-{ 
+{
   inline namespace chrono_literals
   {
 
@@ -1141,7 +1633,7 @@
     {
         return chrono::duration<long double, micro> (__us);
     }
-    
+
 
     constexpr chrono::nanoseconds operator""ns(unsigned long long __ns)
     {
diff --git a/linux-x64/clang/include/c++/v1/cmath b/linux-x64/clang/include/c++/v1/cmath
index 917928a..ffb1c46 100644
--- a/linux-x64/clang/include/c++/v1/cmath
+++ b/linux-x64/clang/include/c++/v1/cmath
@@ -547,7 +547,7 @@
 #endif
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
 __libcpp_isnan_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -559,7 +559,7 @@
 }
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
 __libcpp_isnan_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -567,7 +567,7 @@
 }
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
 __libcpp_isinf_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -579,7 +579,7 @@
 }
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
 __libcpp_isinf_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -587,7 +587,7 @@
 }
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<is_floating_point<_A1>::value, bool>::type
 __libcpp_isfinite_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -599,7 +599,7 @@
 }
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 _LIBCPP_CONSTEXPR typename enable_if<!is_floating_point<_A1>::value, bool>::type
 __libcpp_isfinite_or_builtin(_A1 __lcpp_x) _NOEXCEPT
 {
diff --git a/linux-x64/clang/include/c++/v1/codecvt b/linux-x64/clang/include/c++/v1/codecvt
index 46f56ac..5eb9d15 100644
--- a/linux-x64/clang/include/c++/v1/codecvt
+++ b/linux-x64/clang/include/c++/v1/codecvt
@@ -86,7 +86,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -121,7 +121,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -156,7 +156,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -186,11 +186,11 @@
     : public __codecvt_utf8<_Elem>
 {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt_utf8(size_t __refs = 0)
         : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~codecvt_utf8() {}
 };
 
@@ -209,7 +209,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -244,7 +244,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -279,7 +279,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -314,7 +314,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -349,7 +349,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -384,7 +384,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -414,11 +414,11 @@
     : public __codecvt_utf16<_Elem, _Mode & little_endian>
 {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt_utf16(size_t __refs = 0)
         : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~codecvt_utf16() {}
 };
 
@@ -437,7 +437,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -472,7 +472,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -507,7 +507,7 @@
     typedef char      extern_type;
     typedef mbstate_t state_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
                             codecvt_mode _Mode)
         : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
@@ -537,11 +537,11 @@
     : public __codecvt_utf8_utf16<_Elem>
 {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit codecvt_utf8_utf16(size_t __refs = 0)
         : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~codecvt_utf8_utf16() {}
 };
 
diff --git a/linux-x64/clang/include/c++/v1/compare b/linux-x64/clang/include/c++/v1/compare
new file mode 100644
index 0000000..07f88f0
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/compare
@@ -0,0 +1,679 @@
+// -*- C++ -*-
+//===-------------------------- compare -----------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_COMPARE
+#define _LIBCPP_COMPARE
+
+/*
+    compare synopsis
+
+namespace std {
+  // [cmp.categories], comparison category types
+  class weak_equality;
+  class strong_equality;
+  class partial_ordering;
+  class weak_ordering;
+  class strong_ordering;
+
+  // named comparison functions
+  constexpr bool is_eq  (weak_equality cmp) noexcept    { return cmp == 0; }
+  constexpr bool is_neq (weak_equality cmp) noexcept    { return cmp != 0; }
+  constexpr bool is_lt  (partial_ordering cmp) noexcept { return cmp < 0; }
+  constexpr bool is_lteq(partial_ordering cmp) noexcept { return cmp <= 0; }
+  constexpr bool is_gt  (partial_ordering cmp) noexcept { return cmp > 0; }
+  constexpr bool is_gteq(partial_ordering cmp) noexcept { return cmp >= 0; }
+
+  // [cmp.common], common comparison category type
+  template<class... Ts>
+  struct common_comparison_category {
+    using type = see below;
+  };
+  template<class... Ts>
+    using common_comparison_category_t = typename common_comparison_category<Ts...>::type;
+
+  // [cmp.alg], comparison algorithms
+  template<class T> constexpr strong_ordering strong_order(const T& a, const T& b);
+  template<class T> constexpr weak_ordering weak_order(const T& a, const T& b);
+  template<class T> constexpr partial_ordering partial_order(const T& a, const T& b);
+  template<class T> constexpr strong_equality strong_equal(const T& a, const T& b);
+  template<class T> constexpr weak_equality weak_equal(const T& a, const T& b);
+}
+*/
+
+#include <__config>
+#include <type_traits>
+#include <array>
+
+#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER
+#pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER > 17
+
+// exposition only
+enum class _LIBCPP_ENUM_VIS _EqResult : unsigned char {
+  __zero = 0,
+  __equal = __zero,
+  __equiv = __equal,
+  __nonequal = 1,
+  __nonequiv = __nonequal
+};
+
+enum class _LIBCPP_ENUM_VIS _OrdResult : signed char {
+  __less = -1,
+  __greater = 1
+};
+
+enum class _LIBCPP_ENUM_VIS _NCmpResult : signed char {
+  __unordered = -127
+};
+
+struct _CmpUnspecifiedType;
+using _CmpUnspecifiedParam = void (_CmpUnspecifiedType::*)();
+
+class  weak_equality {
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr explicit weak_equality(_EqResult __val) noexcept : __value_(__val) {}
+
+public:
+  static const weak_equality equivalent;
+  static const weak_equality nonequivalent;
+
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(weak_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(_CmpUnspecifiedParam, weak_equality __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(weak_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(_CmpUnspecifiedParam, weak_equality __v) noexcept;
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+  _LIBCPP_INLINE_VISIBILITY friend constexpr weak_equality operator<=>(weak_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr weak_equality operator<=>(_CmpUnspecifiedParam, weak_equality __v) noexcept;
+#endif
+
+private:
+  _EqResult __value_;
+};
+
+_LIBCPP_INLINE_VAR constexpr weak_equality weak_equality::equivalent(_EqResult::__equiv);
+_LIBCPP_INLINE_VAR constexpr weak_equality weak_equality::nonequivalent(_EqResult::__nonequiv);
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool operator==(weak_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ == _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool operator==(_CmpUnspecifiedParam, weak_equality __v) noexcept {
+  return __v.__value_ == _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool operator!=(weak_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ != _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr bool operator!=(_CmpUnspecifiedParam, weak_equality __v) noexcept {
+  return __v.__value_ != _EqResult::__zero;
+}
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr weak_equality operator<=>(weak_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr weak_equality operator<=>(_CmpUnspecifiedParam, weak_equality __v) noexcept {
+  return __v;
+}
+#endif
+
+class strong_equality {
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr strong_equality(_EqResult __val) noexcept : __value_(__val) {}
+
+public:
+  static const strong_equality equal;
+  static const strong_equality nonequal;
+  static const strong_equality equivalent;
+  static const strong_equality nonequivalent;
+
+  // conversion
+  _LIBCPP_INLINE_VISIBILITY constexpr operator weak_equality() const noexcept {
+    return __value_ == _EqResult::__zero ? weak_equality::equivalent
+          : weak_equality::nonequivalent;
+  }
+
+  // comparisons
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(strong_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(strong_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(_CmpUnspecifiedParam, strong_equality __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(_CmpUnspecifiedParam, strong_equality __v) noexcept;
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+  _LIBCPP_INLINE_VISIBILITY friend constexpr strong_equality operator<=>(strong_equality __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr strong_equality operator<=>(_CmpUnspecifiedParam, strong_equality __v) noexcept;
+#endif
+private:
+  _EqResult __value_;
+};
+
+_LIBCPP_INLINE_VAR constexpr strong_equality strong_equality::equal(_EqResult::__equal);
+_LIBCPP_INLINE_VAR constexpr strong_equality strong_equality::nonequal(_EqResult::__nonequal);
+_LIBCPP_INLINE_VAR constexpr strong_equality strong_equality::equivalent(_EqResult::__equiv);
+_LIBCPP_INLINE_VAR constexpr strong_equality strong_equality::nonequivalent(_EqResult::__nonequiv);
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(strong_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ == _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(_CmpUnspecifiedParam, strong_equality __v) noexcept {
+  return __v.__value_ == _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(strong_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ != _EqResult::__zero;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(_CmpUnspecifiedParam, strong_equality __v) noexcept {
+  return __v.__value_ != _EqResult::__zero;
+}
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+_LIBCPP_INLINE_VISIBILITY
+constexpr strong_equality operator<=>(strong_equality __v, _CmpUnspecifiedParam) noexcept {
+  return __v;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr strong_equality operator<=>(_CmpUnspecifiedParam, strong_equality __v) noexcept {
+  return __v;
+}
+#endif // _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+
+class partial_ordering {
+  using _ValueT = signed char;
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr partial_ordering(_EqResult __v) noexcept
+      : __value_(_ValueT(__v)) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr partial_ordering(_OrdResult __v) noexcept
+      : __value_(_ValueT(__v)) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr partial_ordering(_NCmpResult __v) noexcept
+      : __value_(_ValueT(__v)) {}
+
+  constexpr bool __is_ordered() const noexcept {
+    return __value_ != _ValueT(_NCmpResult::__unordered);
+  }
+public:
+  // valid values
+  static const partial_ordering less;
+  static const partial_ordering equivalent;
+  static const partial_ordering greater;
+  static const partial_ordering unordered;
+
+  // conversion
+  constexpr operator weak_equality() const noexcept {
+    return __value_ == 0 ? weak_equality::equivalent : weak_equality::nonequivalent;
+  }
+
+  // comparisons
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+  _LIBCPP_INLINE_VISIBILITY friend constexpr partial_ordering operator<=>(partial_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr partial_ordering operator<=>(_CmpUnspecifiedParam, partial_ordering __v) noexcept;
+#endif
+
+private:
+  _ValueT __value_;
+};
+
+_LIBCPP_INLINE_VAR constexpr partial_ordering partial_ordering::less(_OrdResult::__less);
+_LIBCPP_INLINE_VAR constexpr partial_ordering partial_ordering::equivalent(_EqResult::__equiv);
+_LIBCPP_INLINE_VAR constexpr partial_ordering partial_ordering::greater(_OrdResult::__greater);
+_LIBCPP_INLINE_VAR constexpr partial_ordering partial_ordering::unordered(_NCmpResult ::__unordered);
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__is_ordered() && __v.__value_ == 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__is_ordered() && __v.__value_ < 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__is_ordered() && __v.__value_ <= 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__is_ordered() && __v.__value_ > 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__is_ordered() && __v.__value_ >= 0;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v.__is_ordered() && 0 == __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v.__is_ordered() && 0 < __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v.__is_ordered() && 0 <= __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v.__is_ordered() && 0 > __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v.__is_ordered() && 0 >= __v.__value_;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return !__v.__is_ordered() || __v.__value_ != 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return !__v.__is_ordered() || __v.__value_ != 0;
+}
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+_LIBCPP_INLINE_VISIBILITY
+constexpr partial_ordering operator<=>(partial_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr partial_ordering operator<=>(_CmpUnspecifiedParam, partial_ordering __v) noexcept {
+  return __v < 0 ? partial_ordering::greater : (__v > 0 ? partial_ordering::less : __v);
+}
+#endif // _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+
+class weak_ordering {
+  using _ValueT = signed char;
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr weak_ordering(_EqResult __v) noexcept : __value_(_ValueT(__v)) {}
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr weak_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {}
+
+public:
+  static const weak_ordering less;
+  static const weak_ordering equivalent;
+  static const weak_ordering greater;
+
+  // conversions
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator weak_equality() const noexcept {
+    return __value_ == 0 ? weak_equality::equivalent
+                         : weak_equality::nonequivalent;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator partial_ordering() const noexcept {
+    return __value_ == 0 ? partial_ordering::equivalent
+        : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater);
+  }
+
+  // comparisons
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+  _LIBCPP_INLINE_VISIBILITY friend constexpr weak_ordering operator<=>(weak_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr weak_ordering operator<=>(_CmpUnspecifiedParam, weak_ordering __v) noexcept;
+#endif
+
+private:
+  _ValueT __value_;
+};
+
+_LIBCPP_INLINE_VAR constexpr weak_ordering weak_ordering::less(_OrdResult::__less);
+_LIBCPP_INLINE_VAR constexpr weak_ordering weak_ordering::equivalent(_EqResult::__equiv);
+_LIBCPP_INLINE_VAR constexpr weak_ordering weak_ordering::greater(_OrdResult::__greater);
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ == 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ != 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ < 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ <= 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ > 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ >= 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 == __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 != __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 < __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 <= __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 > __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return 0 >= __v.__value_;
+}
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+_LIBCPP_INLINE_VISIBILITY
+constexpr weak_ordering operator<=>(weak_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr weak_ordering operator<=>(_CmpUnspecifiedParam, weak_ordering __v) noexcept {
+  return __v < 0 ? weak_ordering::greater : (__v > 0 ? weak_ordering::less : __v);
+}
+#endif // _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+
+class strong_ordering {
+  using _ValueT = signed char;
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr strong_ordering(_EqResult __v) noexcept : __value_(_ValueT(__v)) {}
+  _LIBCPP_INLINE_VISIBILITY
+  explicit constexpr strong_ordering(_OrdResult __v) noexcept : __value_(_ValueT(__v)) {}
+
+public:
+  static const strong_ordering less;
+  static const strong_ordering equal;
+  static const strong_ordering equivalent;
+  static const strong_ordering greater;
+
+  // conversions
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator weak_equality() const noexcept {
+    return __value_ == 0 ? weak_equality::equivalent
+                         : weak_equality::nonequivalent;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator strong_equality() const noexcept {
+    return __value_ == 0 ? strong_equality::equal
+                         : strong_equality::nonequal;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator partial_ordering() const noexcept {
+    return __value_ == 0 ? partial_ordering::equivalent
+        : (__value_ < 0 ? partial_ordering::less : partial_ordering::greater);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  constexpr operator weak_ordering() const noexcept {
+    return __value_ == 0 ? weak_ordering::equivalent
+        : (__value_ < 0 ? weak_ordering::less : weak_ordering::greater);
+  }
+
+  // comparisons
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator==(_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator!=(_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator< (_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator<=(_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator> (_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr bool operator>=(_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+  _LIBCPP_INLINE_VISIBILITY friend constexpr strong_ordering operator<=>(strong_ordering __v, _CmpUnspecifiedParam) noexcept;
+  _LIBCPP_INLINE_VISIBILITY friend constexpr strong_ordering operator<=>(_CmpUnspecifiedParam, strong_ordering __v) noexcept;
+#endif
+
+private:
+  _ValueT __value_;
+};
+
+_LIBCPP_INLINE_VAR constexpr strong_ordering strong_ordering::less(_OrdResult::__less);
+_LIBCPP_INLINE_VAR constexpr strong_ordering strong_ordering::equal(_EqResult::__equal);
+_LIBCPP_INLINE_VAR constexpr strong_ordering strong_ordering::equivalent(_EqResult::__equiv);
+_LIBCPP_INLINE_VAR constexpr strong_ordering strong_ordering::greater(_OrdResult::__greater);
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ == 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ != 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ < 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ <= 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ > 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v.__value_ >= 0;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator==(_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 == __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator!=(_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 != __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator< (_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 < __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator<=(_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 <= __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator> (_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 > __v.__value_;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool operator>=(_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return 0 >= __v.__value_;
+}
+
+#ifndef _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+_LIBCPP_INLINE_VISIBILITY
+constexpr strong_ordering operator<=>(strong_ordering __v, _CmpUnspecifiedParam) noexcept {
+  return __v;
+}
+_LIBCPP_INLINE_VISIBILITY
+constexpr strong_ordering operator<=>(_CmpUnspecifiedParam, strong_ordering __v) noexcept {
+  return __v < 0 ? strong_ordering::greater : (__v > 0 ? strong_ordering::less : __v);
+}
+#endif // _LIBCPP_HAS_NO_SPACESHIP_OPERATOR
+
+// named comparison functions
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_eq(weak_equality __cmp) noexcept    { return __cmp == 0; }
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_neq(weak_equality __cmp) noexcept    { return __cmp != 0; }
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_lt(partial_ordering __cmp) noexcept { return __cmp < 0; }
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_lteq(partial_ordering __cmp) noexcept { return __cmp <= 0; }
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_gt(partial_ordering __cmp) noexcept { return __cmp > 0; }
+
+_LIBCPP_INLINE_VISIBILITY
+constexpr bool is_gteq(partial_ordering __cmp) noexcept { return __cmp >= 0; }
+
+namespace __comp_detail {
+
+enum _ClassifyCompCategory : unsigned{
+  _None,
+  _WeakEq,
+  _StrongEq,
+  _PartialOrd,
+  _WeakOrd,
+  _StrongOrd,
+  _CCC_Size
+};
+
+template <class _Tp>
+_LIBCPP_INLINE_VISIBILITY
+constexpr _ClassifyCompCategory __type_to_enum() noexcept {
+  if (is_same_v<_Tp, weak_equality>)
+    return _WeakEq;
+  if (is_same_v<_Tp, strong_equality>)
+    return _StrongEq;
+  if (is_same_v<_Tp, partial_ordering>)
+    return _PartialOrd;
+  if (is_same_v<_Tp, weak_ordering>)
+    return _WeakOrd;
+  if (is_same_v<_Tp, strong_ordering>)
+    return _StrongOrd;
+  return _None;
+}
+
+template <size_t _Size>
+constexpr _ClassifyCompCategory
+__compute_comp_type(std::array<_ClassifyCompCategory, _Size> __types) {
+  std::array<int, _CCC_Size> __seen = {};
+  for (auto __type : __types)
+    ++__seen[__type];
+  if (__seen[_None])
+    return _None;
+  if (__seen[_WeakEq])
+    return _WeakEq;
+  if (__seen[_StrongEq] && (__seen[_PartialOrd] || __seen[_WeakOrd]))
+    return _WeakEq;
+  if (__seen[_StrongEq])
+    return _StrongEq;
+  if (__seen[_PartialOrd])
+    return _PartialOrd;
+  if (__seen[_WeakOrd])
+    return _WeakOrd;
+  return _StrongOrd;
+}
+
+template <class ..._Ts>
+constexpr auto __get_comp_type() {
+  using _CCC = _ClassifyCompCategory;
+  constexpr array<_CCC, sizeof...(_Ts)> __type_kinds{{__comp_detail::__type_to_enum<_Ts>()...}};
+  constexpr _CCC _Cat = sizeof...(_Ts) == 0 ? _StrongOrd
+      : __compute_comp_type(__type_kinds);
+  if constexpr (_Cat == _None)
+    return void();
+  else if constexpr (_Cat == _WeakEq)
+    return weak_equality::equivalent;
+  else if constexpr (_Cat == _StrongEq)
+    return strong_equality::equivalent;
+  else if constexpr (_Cat == _PartialOrd)
+    return partial_ordering::equivalent;
+  else if constexpr (_Cat == _WeakOrd)
+    return weak_ordering::equivalent;
+  else if constexpr (_Cat == _StrongOrd)
+    return strong_ordering::equivalent;
+  else
+    static_assert(_Cat != _Cat, "unhandled case");
+}
+} // namespace __comp_detail
+
+// [cmp.common], common comparison category type
+template<class... _Ts>
+struct _LIBCPP_TEMPLATE_VIS common_comparison_category {
+  using type = decltype(__comp_detail::__get_comp_type<_Ts...>());
+};
+
+template<class... _Ts>
+using common_comparison_category_t = typename common_comparison_category<_Ts...>::type;
+
+// [cmp.alg], comparison algorithms
+// TODO: unimplemented
+template<class _Tp> constexpr strong_ordering strong_order(const _Tp& __lhs, const _Tp& __rhs);
+template<class _Tp> constexpr weak_ordering weak_order(const _Tp& __lhs, const _Tp& __rhs);
+template<class _Tp> constexpr partial_ordering partial_order(const _Tp& __lhs, const _Tp& __rhs);
+template<class _Tp> constexpr strong_equality strong_equal(const _Tp& __lhs, const _Tp& __rhs);
+template<class _Tp> constexpr weak_equality weak_equal(const _Tp& __lhs, const _Tp& __rhs);
+
+#endif // _LIBCPP_STD_VER > 17
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP_COMPARE
diff --git a/linux-x64/clang/include/c++/v1/cstddef b/linux-x64/clang/include/c++/v1/cstddef
index adeefda..1dc5d39 100644
--- a/linux-x64/clang/include/c++/v1/cstddef
+++ b/linux-x64/clang/include/c++/v1/cstddef
@@ -66,10 +66,10 @@
 
 constexpr byte  operator| (byte  __lhs, byte __rhs) noexcept
 {
-	return static_cast<byte>(
-	  static_cast<unsigned char>(
-	     static_cast<unsigned int>(__lhs) | static_cast<unsigned int>(__rhs)
-	));
+    return static_cast<byte>(
+      static_cast<unsigned char>(
+         static_cast<unsigned int>(__lhs) | static_cast<unsigned int>(__rhs)
+    ));
 }
 
 constexpr byte& operator|=(byte& __lhs, byte __rhs) noexcept
@@ -77,10 +77,10 @@
 
 constexpr byte  operator& (byte  __lhs, byte __rhs) noexcept
 {
-	return static_cast<byte>(
-	  static_cast<unsigned char>(
-	     static_cast<unsigned int>(__lhs) & static_cast<unsigned int>(__rhs)
-	));
+    return static_cast<byte>(
+      static_cast<unsigned char>(
+         static_cast<unsigned int>(__lhs) & static_cast<unsigned int>(__rhs)
+    ));
 }
 
 constexpr byte& operator&=(byte& __lhs, byte __rhs) noexcept
@@ -88,13 +88,13 @@
 
 constexpr byte  operator^ (byte  __lhs, byte __rhs) noexcept
 {
-	return static_cast<byte>(
-	  static_cast<unsigned char>(
-	     static_cast<unsigned int>(__lhs) ^ static_cast<unsigned int>(__rhs)
-	));
+    return static_cast<byte>(
+      static_cast<unsigned char>(
+         static_cast<unsigned int>(__lhs) ^ static_cast<unsigned int>(__rhs)
+    ));
 }
 
-constexpr byte& operator^=(byte& __lhs, byte __rhs) noexcept 
+constexpr byte& operator^=(byte& __lhs, byte __rhs) noexcept
 { return __lhs = __lhs ^ __rhs; }
 
 constexpr byte  operator~ (byte __b) noexcept
diff --git a/linux-x64/clang/include/c++/v1/ctime b/linux-x64/clang/include/c++/v1/ctime
index da9e329..81cf11a 100644
--- a/linux-x64/clang/include/c++/v1/ctime
+++ b/linux-x64/clang/include/c++/v1/ctime
@@ -18,7 +18,8 @@
 
     NULL
     CLOCKS_PER_SEC
-
+    TIME_UTC // C++17
+    
 namespace std
 {
 
@@ -28,7 +29,8 @@
     size_t
     time_t
     tm
-
+    timespec // C++17
+    
 clock_t clock();
 double difftime(time_t time1, time_t time0);
 time_t mktime(tm* timeptr);
@@ -39,7 +41,7 @@
 tm* localtime(const time_t* timer);
 size_t strftime(char* restrict s, size_t maxsize, const char* restrict format,
                 const tm* restrict timeptr);
-
+int timespec_get( struct timespec *ts, int base); // C++17
 }  // std
 
 */
@@ -57,6 +59,9 @@
 using ::size_t;
 using ::time_t;
 using ::tm;
+#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_C11_FEATURES)
+using ::timespec;
+#endif
 using ::clock;
 using ::difftime;
 using ::mktime;
@@ -68,6 +73,9 @@
 using ::localtime;
 #endif
 using ::strftime;
+#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_C11_FEATURES)
+using ::timespec_get;
+#endif
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/linux-x64/clang/include/c++/v1/deque b/linux-x64/clang/include/c++/v1/deque
index 08cb295..bfbd3a5 100644
--- a/linux-x64/clang/include/c++/v1/deque
+++ b/linux-x64/clang/include/c++/v1/deque
@@ -128,6 +128,10 @@
     void clear() noexcept;
 };
 
+template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+   deque(InputIterator, InputIterator, Allocator = Allocator())
+   -> deque<typename iterator_traits<InputIterator>::value_type, Allocator>;
+
 template <class T, class Allocator>
     bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
 template <class T, class Allocator>
@@ -921,13 +925,14 @@
 {
     __deque_base(const __deque_base& __c);
     __deque_base& operator=(const __deque_base& __c);
-protected:
-    typedef _Tp                                      value_type;
+public:
     typedef _Allocator                               allocator_type;
     typedef allocator_traits<allocator_type>         __alloc_traits;
+    typedef typename __alloc_traits::size_type       size_type;
+protected:
+    typedef _Tp                                      value_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
-    typedef typename __alloc_traits::size_type       size_type;
     typedef typename __alloc_traits::difference_type difference_type;
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
@@ -946,6 +951,7 @@
     typedef __deque_iterator<value_type, const_pointer, const_reference, __map_const_pointer,
                              difference_type>    const_iterator;
 
+protected:
     __map __map_;
     size_type __start_;
     __compressed_pair<size_type, allocator_type> __size_;
@@ -1461,6 +1467,23 @@
     void __move_assign(deque& __c, false_type);
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Alloc = typename std::allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+deque(_InputIterator, _InputIterator)
+  -> deque<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+
+template<class _InputIterator,
+         class _Alloc,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+deque(_InputIterator, _InputIterator, _Alloc)
+  -> deque<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+#endif
+
+
 template <class _Tp, class _Allocator>
 deque<_Tp, _Allocator>::deque(size_type __n)
 {
diff --git a/linux-x64/clang/include/c++/v1/exception b/linux-x64/clang/include/c++/v1/exception
index 79bd6ac..b517486 100644
--- a/linux-x64/clang/include/c++/v1/exception
+++ b/linux-x64/clang/include/c++/v1/exception
@@ -259,7 +259,7 @@
 
 template <class _Tp, class _Up>
 struct __throw_with_nested<_Tp, _Up, true> {
-    _LIBCPP_NORETURN static inline _LIBCPP_ALWAYS_INLINE void
+    _LIBCPP_NORETURN static inline _LIBCPP_INLINE_VISIBILITY void
 #ifndef _LIBCPP_CXX03_LANG
     __do_throw(_Tp&& __t)
 #else
@@ -272,7 +272,7 @@
 
 template <class _Tp, class _Up>
 struct __throw_with_nested<_Tp, _Up, false> {
-    _LIBCPP_NORETURN static inline _LIBCPP_ALWAYS_INLINE void
+    _LIBCPP_NORETURN static inline _LIBCPP_INLINE_VISIBILITY void
 #ifndef _LIBCPP_CXX03_LANG
     __do_throw(_Tp&& __t)
 #else
diff --git a/linux-x64/clang/include/c++/v1/experimental/__config b/linux-x64/clang/include/c++/v1/experimental/__config
index 37f88c1..c6f1776 100644
--- a/linux-x64/clang/include/c++/v1/experimental/__config
+++ b/linux-x64/clang/include/c++/v1/experimental/__config
@@ -52,6 +52,23 @@
 
 #define _VSTD_CORO _VSTD_EXPERIMENTAL::coroutines_v1
 
-#define _VSTD_FS ::std::experimental::filesystem::v1
+#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD \
+    _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL inline namespace parallelism_v2 {
+
+#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD \
+    } _LIBCPP_END_NAMESPACE_EXPERIMENTAL
+
+#define _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD_ABI \
+    _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD namespace simd_abi {
+
+#define _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD_ABI \
+    } _LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD
+
+// TODO: support more targets
+#if defined(__AVX__)
+#define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES 32
+#else
+#define _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES 16
+#endif
 
 #endif
diff --git a/linux-x64/clang/include/c++/v1/experimental/coroutine b/linux-x64/clang/include/c++/v1/experimental/coroutine
index ce795ad..1eb224a 100644
--- a/linux-x64/clang/include/c++/v1/experimental/coroutine
+++ b/linux-x64/clang/include/c++/v1/experimental/coroutine
@@ -93,28 +93,28 @@
 template <>
 class _LIBCPP_TEMPLATE_VIS coroutine_handle<void> {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR coroutine_handle() _NOEXCEPT : __handle_(nullptr) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR coroutine_handle(nullptr_t) _NOEXCEPT : __handle_(nullptr) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     coroutine_handle& operator=(nullptr_t) _NOEXCEPT {
         __handle_ = nullptr;
         return *this;
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR void* address() const _NOEXCEPT { return __handle_; }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR explicit operator bool() const _NOEXCEPT { return __handle_; }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void operator()() { resume(); }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void resume() {
       _LIBCPP_ASSERT(__is_suspended(),
                      "resume() can only be called on suspended coroutines");
@@ -123,14 +123,14 @@
       __builtin_coro_resume(__handle_);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void destroy() {
       _LIBCPP_ASSERT(__is_suspended(),
                      "destroy() can only be called on suspended coroutines");
       __builtin_coro_destroy(__handle_);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool done() const {
       _LIBCPP_ASSERT(__is_suspended(),
                      "done() can only be called on suspended coroutines");
@@ -138,7 +138,7 @@
     }
 
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     static coroutine_handle from_address(void* __addr) _NOEXCEPT {
         coroutine_handle __tmp;
         __tmp.__handle_ = __addr;
@@ -146,7 +146,7 @@
     }
 
     // FIXME: Should from_address(nullptr) be allowed?
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     static coroutine_handle from_address(nullptr_t) _NOEXCEPT {
       return coroutine_handle(nullptr);
     }
@@ -169,27 +169,27 @@
 };
 
 // 18.11.2.7 comparison operators:
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator==(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return __x.address() == __y.address();
 }
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator!=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return !(__x == __y);
 }
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator<(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return less<void*>()(__x.address(), __y.address());
 }
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator>(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return __y < __x;
 }
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator<=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return !(__x > __y);
 }
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 bool operator>=(coroutine_handle<> __x, coroutine_handle<> __y) _NOEXCEPT {
     return !(__x < __y);
 }
@@ -202,8 +202,8 @@
     // 18.11.2.1 construct/reset
     using coroutine_handle<>::coroutine_handle;
 #else
-    _LIBCPP_ALWAYS_INLINE coroutine_handle() _NOEXCEPT : _Base() {}
-    _LIBCPP_ALWAYS_INLINE coroutine_handle(nullptr_t) _NOEXCEPT : _Base(nullptr) {}
+    _LIBCPP_INLINE_VISIBILITY coroutine_handle() _NOEXCEPT : _Base() {}
+    _LIBCPP_INLINE_VISIBILITY coroutine_handle(nullptr_t) _NOEXCEPT : _Base(nullptr) {}
 #endif
     _LIBCPP_INLINE_VISIBILITY
     coroutine_handle& operator=(nullptr_t) _NOEXCEPT {
@@ -213,12 +213,12 @@
 
     _LIBCPP_INLINE_VISIBILITY
     _Promise& promise() const {
-        return *reinterpret_cast<_Promise*>(
+        return *static_cast<_Promise*>(
             __builtin_coro_promise(this->__handle_, __alignof(_Promise), false));
     }
 
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     static coroutine_handle from_address(void* __addr) _NOEXCEPT {
         coroutine_handle __tmp;
         __tmp.__handle_ = __addr;
@@ -229,7 +229,7 @@
     // the deleted _Promise* overload doesn't make from_address(nullptr)
     // ambiguous.
     // FIXME: should from_address work with nullptr?
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     static coroutine_handle from_address(nullptr_t) _NOEXCEPT {
       return coroutine_handle(nullptr);
     }
@@ -248,7 +248,7 @@
         "pointers to the coroutine's promise type; use 'from_promise' instead");
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     static coroutine_handle from_promise(_Promise& __promise) _NOEXCEPT {
         typedef typename remove_cv<_Promise>::type _RawPromise;
         coroutine_handle __tmp;
@@ -259,21 +259,61 @@
     }
 };
 
+#if __has_builtin(__builtin_coro_noop)
+struct noop_coroutine_promise {};
+
+template <>
+class _LIBCPP_TEMPLATE_VIS coroutine_handle<noop_coroutine_promise>
+    : public coroutine_handle<> {
+  using _Base = coroutine_handle<>;
+  using _Promise = noop_coroutine_promise;
+public:
+
+  _LIBCPP_INLINE_VISIBILITY
+  _Promise& promise() const {
+    return *static_cast<_Promise*>(
+      __builtin_coro_promise(this->__handle_, __alignof(_Promise), false));
+  }
+
+  _LIBCPP_CONSTEXPR explicit operator bool() const _NOEXCEPT { return true; }
+  _LIBCPP_CONSTEXPR bool done() const _NOEXCEPT { return false; }
+
+  _LIBCPP_CONSTEXPR_AFTER_CXX17 void operator()() const _NOEXCEPT {}
+  _LIBCPP_CONSTEXPR_AFTER_CXX17 void resume() const _NOEXCEPT {}
+  _LIBCPP_CONSTEXPR_AFTER_CXX17 void destroy() const _NOEXCEPT {}
+
+private:
+  _LIBCPP_INLINE_VISIBILITY
+  friend coroutine_handle<noop_coroutine_promise> noop_coroutine() _NOEXCEPT;
+
+  _LIBCPP_INLINE_VISIBILITY coroutine_handle() _NOEXCEPT {
+    this->__handle_ = __builtin_coro_noop();
+  }
+};
+
+using noop_coroutine_handle = coroutine_handle<noop_coroutine_promise>;
+
+inline _LIBCPP_INLINE_VISIBILITY
+noop_coroutine_handle noop_coroutine() _NOEXCEPT {
+  return noop_coroutine_handle();
+}
+#endif // __has_builtin(__builtin_coro_noop)
+
 struct _LIBCPP_TYPE_VIS suspend_never {
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   bool await_ready() const _NOEXCEPT { return true; }
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   void await_suspend(coroutine_handle<>) const _NOEXCEPT {}
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   void await_resume() const _NOEXCEPT {}
 };
 
 struct _LIBCPP_TYPE_VIS suspend_always {
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   bool await_ready() const _NOEXCEPT { return false; }
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   void await_suspend(coroutine_handle<>) const _NOEXCEPT {}
-  _LIBCPP_ALWAYS_INLINE
+  _LIBCPP_INLINE_VISIBILITY
   void await_resume() const _NOEXCEPT {}
 };
 
diff --git a/linux-x64/clang/include/c++/v1/experimental/dynarray b/linux-x64/clang/include/c++/v1/experimental/dynarray
index cebfc20..a60c87c 100644
--- a/linux-x64/clang/include/c++/v1/experimental/dynarray
+++ b/linux-x64/clang/include/c++/v1/experimental/dynarray
@@ -133,7 +133,7 @@
 private:
     size_t                  __size_;
     value_type *            __base_;
-    _LIBCPP_ALWAYS_INLINE dynarray () noexcept :  __size_(0), __base_(nullptr) {}
+    _LIBCPP_INLINE_VISIBILITY dynarray () noexcept :  __size_(0), __base_(nullptr) {}
     
     static inline _LIBCPP_INLINE_VISIBILITY
     value_type* __allocate(size_t __count) {
diff --git a/linux-x64/clang/include/c++/v1/experimental/filesystem b/linux-x64/clang/include/c++/v1/experimental/filesystem
index 47cc0c5..28d8dcf 100644
--- a/linux-x64/clang/include/c++/v1/experimental/filesystem
+++ b/linux-x64/clang/include/c++/v1/experimental/filesystem
@@ -16,15 +16,15 @@
 
     class path;
 
-    void swap(path& lhs, path& rhs) _NOEXCEPT;
-    size_t hash_value(const path& p) _NOEXCEPT;
+    void swap(path& lhs, path& rhs) noexcept;
+    size_t hash_value(const path& p) noexcept;
 
-    bool operator==(const path& lhs, const path& rhs) _NOEXCEPT;
-    bool operator!=(const path& lhs, const path& rhs) _NOEXCEPT;
-    bool operator< (const path& lhs, const path& rhs) _NOEXCEPT;
-    bool operator<=(const path& lhs, const path& rhs) _NOEXCEPT;
-    bool operator> (const path& lhs, const path& rhs) _NOEXCEPT;
-    bool operator>=(const path& lhs, const path& rhs) _NOEXCEPT;
+    bool operator==(const path& lhs, const path& rhs) noexcept;
+    bool operator!=(const path& lhs, const path& rhs) noexcept;
+    bool operator< (const path& lhs, const path& rhs) noexcept;
+    bool operator<=(const path& lhs, const path& rhs) noexcept;
+    bool operator> (const path& lhs, const path& rhs) noexcept;
+    bool operator>=(const path& lhs, const path& rhs) noexcept;
 
     path operator/ (const path& lhs, const path& rhs);
 
@@ -76,11 +76,11 @@
 
     // operational functions
 
-    path absolute(const path& p, const path& base=current_path());
+    path absolute(const path& p);
+    path absolute(const path& p, error_code &ec);
 
-    path canonical(const path& p, const path& base = current_path());
+    path canonical(const path& p);
     path canonical(const path& p, error_code& ec);
-    path canonical(const path& p, const path& base, error_code& ec);
 
     void copy(const path& from, const path& to);
     void copy(const path& from, const path& to, error_code& ec);
@@ -96,88 +96,88 @@
 
     void copy_symlink(const path& existing_symlink, const path& new_symlink);
     void copy_symlink(const path& existing_symlink, const path& new_symlink,
-                              error_code& ec) _NOEXCEPT;
+                              error_code& ec) noexcept;
 
     bool create_directories(const path& p);
     bool create_directories(const path& p, error_code& ec);
 
     bool create_directory(const path& p);
-    bool create_directory(const path& p, error_code& ec) _NOEXCEPT;
+    bool create_directory(const path& p, error_code& ec) noexcept;
 
     bool create_directory(const path& p, const path& attributes);
     bool create_directory(const path& p, const path& attributes,
-                                  error_code& ec) _NOEXCEPT;
+                                  error_code& ec) noexcept;
 
     void create_directory_symlink(const path& to, const path& new_symlink);
     void create_directory_symlink(const path& to, const path& new_symlink,
-                                          error_code& ec) _NOEXCEPT;
+                                          error_code& ec) noexcept;
 
     void create_hard_link(const path& to, const path& new_hard_link);
     void create_hard_link(const path& to, const path& new_hard_link,
-                                  error_code& ec) _NOEXCEPT;
+                                  error_code& ec) noexcept;
 
     void create_symlink(const path& to, const path& new_symlink);
     void create_symlink(const path& to, const path& new_symlink,
-                                error_code& ec) _NOEXCEPT;
+                                error_code& ec) noexcept;
 
     path current_path();
     path current_path(error_code& ec);
     void current_path(const path& p);
-    void current_path(const path& p, error_code& ec) _NOEXCEPT;
+    void current_path(const path& p, error_code& ec) noexcept;
 
-    bool exists(file_status s) _NOEXCEPT;
+    bool exists(file_status s) noexcept;
     bool exists(const path& p);
-    bool exists(const path& p, error_code& ec) _NOEXCEPT;
+    bool exists(const path& p, error_code& ec) noexcept;
 
     bool equivalent(const path& p1, const path& p2);
-    bool equivalent(const path& p1, const path& p2, error_code& ec) _NOEXCEPT;
+    bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept;
 
     uintmax_t    file_size(const path& p);
-    uintmax_t    file_size(const path& p, error_code& ec) _NOEXCEPT;
+    uintmax_t    file_size(const path& p, error_code& ec) noexcept;
 
     uintmax_t    hard_link_count(const path& p);
-    uintmax_t    hard_link_count(const path& p, error_code& ec) _NOEXCEPT;
+    uintmax_t    hard_link_count(const path& p, error_code& ec) noexcept;
 
-    bool is_block_file(file_status s) _NOEXCEPT;
+    bool is_block_file(file_status s) noexcept;
     bool is_block_file(const path& p);
-    bool is_block_file(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_block_file(const path& p, error_code& ec) noexcept;
 
-    bool is_character_file(file_status s) _NOEXCEPT;
+    bool is_character_file(file_status s) noexcept;
     bool is_character_file(const path& p);
-    bool is_character_file(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_character_file(const path& p, error_code& ec) noexcept;
 
-    bool is_directory(file_status s) _NOEXCEPT;
+    bool is_directory(file_status s) noexcept;
     bool is_directory(const path& p);
-    bool is_directory(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_directory(const path& p, error_code& ec) noexcept;
 
     bool is_empty(const path& p);
-    bool is_empty(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_empty(const path& p, error_code& ec) noexcept;
 
-    bool is_fifo(file_status s) _NOEXCEPT;
+    bool is_fifo(file_status s) noexcept;
     bool is_fifo(const path& p);
-    bool is_fifo(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_fifo(const path& p, error_code& ec) noexcept;
 
-    bool is_other(file_status s) _NOEXCEPT;
+    bool is_other(file_status s) noexcept;
     bool is_other(const path& p);
-    bool is_other(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_other(const path& p, error_code& ec) noexcept;
 
-    bool is_regular_file(file_status s) _NOEXCEPT;
+    bool is_regular_file(file_status s) noexcept;
     bool is_regular_file(const path& p);
-    bool is_regular_file(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_regular_file(const path& p, error_code& ec) noexcept;
 
-    bool is_socket(file_status s) _NOEXCEPT;
+    bool is_socket(file_status s) noexcept;
     bool is_socket(const path& p);
-    bool is_socket(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_socket(const path& p, error_code& ec) noexcept;
 
-    bool is_symlink(file_status s) _NOEXCEPT;
+    bool is_symlink(file_status s) noexcept;
     bool is_symlink(const path& p);
-    bool is_symlink(const path& p, error_code& ec) _NOEXCEPT;
+    bool is_symlink(const path& p, error_code& ec) noexcept;
 
     file_time_type  last_write_time(const path& p);
-    file_time_type  last_write_time(const path& p, error_code& ec) _NOEXCEPT;
+    file_time_type  last_write_time(const path& p, error_code& ec) noexcept;
     void last_write_time(const path& p, file_time_type new_time);
     void last_write_time(const path& p, file_time_type new_time,
-                                 error_code& ec) _NOEXCEPT;
+                                 error_code& ec) noexcept;
 
     void permissions(const path& p, perms prms,
                      perm_options opts=perm_options::replace);
@@ -185,2000 +185,73 @@
     void permissions(const path& p, perms prms, perm_options opts,
                      error_code& ec);
 
+    path proximate(const path& p, error_code& ec);
+    path proximate(const path& p, const path& base = current_path());
+    path proximate(const path& p, const path& base, error_code &ec);
+
     path read_symlink(const path& p);
     path read_symlink(const path& p, error_code& ec);
 
+    path relative(const path& p, error_code& ec);
+    path relative(const path& p, const path& base=current_path());
+    path relative(const path& p, const path& base, error_code& ec);
+
     bool remove(const path& p);
-    bool remove(const path& p, error_code& ec) _NOEXCEPT;
+    bool remove(const path& p, error_code& ec) noexcept;
 
     uintmax_t    remove_all(const path& p);
     uintmax_t    remove_all(const path& p, error_code& ec);
 
     void rename(const path& from, const path& to);
-    void rename(const path& from, const path& to, error_code& ec) _NOEXCEPT;
+    void rename(const path& from, const path& to, error_code& ec) noexcept;
 
     void resize_file(const path& p, uintmax_t size);
-    void resize_file(const path& p, uintmax_t size, error_code& ec) _NOEXCEPT;
+    void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept;
 
     space_info   space(const path& p);
-    space_info   space(const path& p, error_code& ec) _NOEXCEPT;
+    space_info   space(const path& p, error_code& ec) noexcept;
 
     file_status  status(const path& p);
-    file_status  status(const path& p, error_code& ec) _NOEXCEPT;
+    file_status  status(const path& p, error_code& ec) noexcept;
 
-    bool status_known(file_status s) _NOEXCEPT;
+    bool status_known(file_status s) noexcept;
 
     file_status  symlink_status(const path& p);
-    file_status  symlink_status(const path& p, error_code& ec) _NOEXCEPT;
-
-    path system_complete(const path& p);
-    path system_complete(const path& p, error_code& ec);
+    file_status  symlink_status(const path& p, error_code& ec) noexcept;
 
     path temp_directory_path();
     path temp_directory_path(error_code& ec);
 
+    path weakly_canonical(path const& p);
+    path weakly_canonical(path const& p, error_code& ec);
+
+
 } } } }  // namespaces std::experimental::filesystem::v1
 
 */
 
 #include <experimental/__config>
-#include <cstddef>
-#include <chrono>
-#include <iterator>
-#include <iosfwd>
-#include <locale>
-#include <memory>
-#include <stack>
-#include <string>
-#include <system_error>
-#include <utility>
-#include <iomanip> // for quoted
-#include <string_view>
-
-#include <__debug>
+#include <filesystem>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
 #endif
 
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+#ifndef _LIBCPP_CXX03_LANG
+
 #define __cpp_lib_experimental_filesystem 201406
 
 _LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_FILESYSTEM
 
-typedef chrono::time_point<std::chrono::system_clock>  file_time_type;
-
-struct _LIBCPP_TYPE_VIS space_info
-{
-  uintmax_t capacity;
-  uintmax_t free;
-  uintmax_t available;
-};
-
-enum class _LIBCPP_ENUM_VIS file_type : signed char
-{
-    none       = 0,
-    not_found  = -1,
-    regular    = 1,
-    directory  = 2,
-    symlink    = 3,
-    block      = 4,
-    character  = 5,
-    fifo       = 6,
-    socket     = 7,
-    unknown    = 8
-};
-
-enum class _LIBCPP_ENUM_VIS perms : unsigned
-{
-    none         = 0,
-
-    owner_read   = 0400,
-    owner_write  = 0200,
-    owner_exec   = 0100,
-    owner_all    = 0700,
-
-    group_read   = 040,
-    group_write  = 020,
-    group_exec   = 010,
-    group_all    = 070,
-
-    others_read  = 04,
-    others_write = 02,
-    others_exec  = 01,
-    others_all   = 07,
-
-    all          = 0777,
-
-    set_uid      = 04000,
-    set_gid      = 02000,
-    sticky_bit   = 01000,
-    mask         = 07777,
-    unknown      = 0xFFFF,
-};
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perms operator&(perms _LHS, perms _RHS)
-{ return static_cast<perms>(static_cast<unsigned>(_LHS) & static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perms operator|(perms _LHS, perms _RHS)
-{ return static_cast<perms>(static_cast<unsigned>(_LHS) | static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perms operator^(perms _LHS, perms _RHS)
-{ return static_cast<perms>(static_cast<unsigned>(_LHS) ^ static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perms operator~(perms _LHS)
-{ return static_cast<perms>(~static_cast<unsigned>(_LHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perms& operator&=(perms& _LHS, perms _RHS)
-{ return _LHS = _LHS & _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perms& operator|=(perms& _LHS, perms _RHS)
-{ return _LHS = _LHS | _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perms& operator^=(perms& _LHS, perms _RHS)
-{ return _LHS = _LHS ^ _RHS; }
-
-enum class _LIBCPP_ENUM_VIS perm_options : unsigned char {
-  replace  = 1,
-  add      = 2,
-  remove   = 4,
-  nofollow = 8
-};
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perm_options operator&(perm_options _LHS, perm_options _RHS)
-{ return static_cast<perm_options>(static_cast<unsigned>(_LHS) & static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perm_options operator|(perm_options _LHS, perm_options _RHS)
-{ return static_cast<perm_options>(static_cast<unsigned>(_LHS) | static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perm_options operator^(perm_options _LHS, perm_options _RHS)
-{ return static_cast<perm_options>(static_cast<unsigned>(_LHS) ^ static_cast<unsigned>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR perm_options operator~(perm_options _LHS)
-{ return static_cast<perm_options>(~static_cast<unsigned>(_LHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perm_options& operator&=(perm_options& _LHS, perm_options _RHS)
-{ return _LHS = _LHS & _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perm_options& operator|=(perm_options& _LHS, perm_options _RHS)
-{ return _LHS = _LHS | _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline perm_options& operator^=(perm_options& _LHS, perm_options _RHS)
-{ return _LHS = _LHS ^ _RHS; }
-
-enum class _LIBCPP_ENUM_VIS copy_options : unsigned short
-{
-    none               = 0,
-    skip_existing      = 1,
-    overwrite_existing = 2,
-    update_existing    = 4,
-    recursive          = 8,
-    copy_symlinks      = 16,
-    skip_symlinks      = 32,
-    directories_only   = 64,
-    create_symlinks    = 128,
-    create_hard_links  = 256,
-    __in_recursive_copy = 512,
-};
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR copy_options operator&(copy_options _LHS, copy_options _RHS)
-{ return static_cast<copy_options>(static_cast<unsigned short>(_LHS) & static_cast<unsigned short>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR copy_options operator|(copy_options _LHS, copy_options _RHS)
-{ return static_cast<copy_options>(static_cast<unsigned short>(_LHS) | static_cast<unsigned short>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR copy_options operator^(copy_options _LHS, copy_options _RHS)
-{ return static_cast<copy_options>(static_cast<unsigned short>(_LHS) ^ static_cast<unsigned short>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR copy_options operator~(copy_options _LHS)
-{ return static_cast<copy_options>(~static_cast<unsigned short>(_LHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline copy_options& operator&=(copy_options& _LHS, copy_options _RHS)
-{ return _LHS = _LHS & _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline copy_options& operator|=(copy_options& _LHS, copy_options _RHS)
-{ return _LHS = _LHS | _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline copy_options& operator^=(copy_options& _LHS, copy_options _RHS)
-{ return _LHS = _LHS ^ _RHS; }
-
-
-enum class _LIBCPP_ENUM_VIS directory_options : unsigned char
-{
-    none                     = 0,
-    follow_directory_symlink = 1,
-    skip_permission_denied   = 2
-};
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR directory_options operator&(directory_options _LHS, directory_options _RHS)
-{ return static_cast<directory_options>(static_cast<unsigned char>(_LHS) & static_cast<unsigned char>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR directory_options operator|(directory_options _LHS, directory_options _RHS)
-{ return static_cast<directory_options>(static_cast<unsigned char>(_LHS) | static_cast<unsigned char>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR directory_options operator^(directory_options _LHS, directory_options _RHS)
-{ return static_cast<directory_options>(static_cast<unsigned char>(_LHS) ^ static_cast<unsigned char>(_RHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline _LIBCPP_CONSTEXPR directory_options operator~(directory_options _LHS)
-{ return static_cast<directory_options>(~static_cast<unsigned char>(_LHS)); }
-
-_LIBCPP_INLINE_VISIBILITY
-inline directory_options& operator&=(directory_options& _LHS, directory_options _RHS)
-{ return _LHS = _LHS & _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline directory_options& operator|=(directory_options& _LHS, directory_options _RHS)
-{ return _LHS = _LHS | _RHS; }
-
-_LIBCPP_INLINE_VISIBILITY
-inline directory_options& operator^=(directory_options& _LHS, directory_options _RHS)
-{ return _LHS = _LHS ^ _RHS; }
-
-
-class _LIBCPP_TYPE_VIS file_status
-{
-public:
-    // constructors
-    _LIBCPP_INLINE_VISIBILITY
-    file_status() _NOEXCEPT : file_status(file_type::none) {}
-    _LIBCPP_INLINE_VISIBILITY
-    explicit file_status(file_type __ft,
-                         perms __prms = perms::unknown) _NOEXCEPT
-      : __ft_(__ft), __prms_(__prms)
-    {}
-
-    file_status(const file_status&) _NOEXCEPT = default;
-    file_status(file_status&&) _NOEXCEPT = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    ~file_status() {}
-
-    file_status& operator=(const file_status&) _NOEXCEPT = default;
-    file_status& operator=(file_status&&) _NOEXCEPT = default;
-
-    // observers
-    _LIBCPP_ALWAYS_INLINE
-    file_type type() const _NOEXCEPT {
-        return __ft_;
-    }
-
-    _LIBCPP_ALWAYS_INLINE
-    perms permissions() const _NOEXCEPT {
-        return __prms_;
-    }
-
-    // modifiers
-    _LIBCPP_ALWAYS_INLINE
-    void type(file_type __ft) _NOEXCEPT {
-        __ft_ = __ft;
-    }
-
-    _LIBCPP_ALWAYS_INLINE
-    void permissions(perms __p) _NOEXCEPT {
-        __prms_ = __p;
-    }
-private:
-    file_type __ft_;
-    perms __prms_;
-};
-
-class _LIBCPP_TYPE_VIS directory_entry;
-
-template <class _Tp> struct __can_convert_char {
-  static const bool value = false;
-};
-template <class _Tp> struct __can_convert_char<const _Tp>
-    : public __can_convert_char<_Tp> {
-};
-template <> struct __can_convert_char<char> {
-    static const bool value = true;
-    using __char_type = char;
-};
-template <> struct __can_convert_char<wchar_t>  {
-    static const bool value = true;
-    using __char_type = wchar_t;
-};
-template <> struct __can_convert_char<char16_t> {
-    static const bool value = true;
-    using __char_type = char16_t;
-};
-template <> struct __can_convert_char<char32_t> {
-    static const bool value = true;
-    using __char_type = char32_t;
-};
-
-template <class _ECharT>
-typename enable_if<__can_convert_char<_ECharT>::value, bool>::type
-__is_separator(_ECharT __e) {
-    return __e == _ECharT('/');
-};
-
-struct _NullSentinal {};
-
-template <class _Tp>
-using _Void = void;
-
-template <class _Tp, class = void>
-struct __is_pathable_string : public false_type {};
-
-template <class _ECharT, class _Traits, class _Alloc>
-struct __is_pathable_string<basic_string<_ECharT, _Traits, _Alloc>,
-                            _Void<typename __can_convert_char<_ECharT>::__char_type>>
-: public __can_convert_char<_ECharT>
-{
-    using _Str = basic_string<_ECharT, _Traits, _Alloc>;
-    using _Base = __can_convert_char<_ECharT>;
-    static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); }
-    static _ECharT const* __range_end(_Str const& __s) { return __s.data() + __s.length(); }
-    static _ECharT __first_or_null(_Str const& __s) {
-        return __s.empty() ? _ECharT{} : __s[0];
-    }
-};
-
-
-template <class _ECharT, class _Traits>
-struct __is_pathable_string<basic_string_view<_ECharT, _Traits>,
-                            _Void<typename __can_convert_char<_ECharT>::__char_type>>
-: public __can_convert_char<_ECharT>
-{
-    using _Str = basic_string_view<_ECharT, _Traits>;
-    using _Base = __can_convert_char<_ECharT>;
-    static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); }
-    static _ECharT const* __range_end(_Str const& __s) { return __s.data() + __s.length(); }
-    static _ECharT __first_or_null(_Str const& __s) {
-        return __s.empty() ? _ECharT{} : __s[0];
-    }
-};
-
-template <class _Source,
-          class _DS = typename decay<_Source>::type,
-          class _UnqualPtrType = typename remove_const<
-              typename remove_pointer<_DS>::type>::type,
-          bool _IsCharPtr = is_pointer<_DS>::value &&
-                            __can_convert_char<_UnqualPtrType>::value
-        >
-struct __is_pathable_char_array : false_type {};
-
-template <class _Source, class _ECharT, class _UPtr>
-struct __is_pathable_char_array<_Source, _ECharT*, _UPtr, true>
-        : __can_convert_char<typename remove_const<_ECharT>::type>
-{
-  using _Base = __can_convert_char<typename remove_const<_ECharT>::type>;
-
-  static _ECharT const* __range_begin(const _ECharT* __b) { return __b; }
-  static _ECharT const* __range_end(const _ECharT* __b)
-  {
-      using _Iter = const _ECharT*;
-      const _ECharT __sentinal = _ECharT{};
-      _Iter __e = __b;
-      for (; *__e != __sentinal; ++__e)
-          ;
-      return __e;
-  }
-
-  static _ECharT __first_or_null(const _ECharT* __b) { return *__b; }
-};
-
-template <class _Iter, bool _IsIt = __is_input_iterator<_Iter>::value, class = void>
-struct __is_pathable_iter : false_type {};
-
-template <class _Iter>
-struct __is_pathable_iter<_Iter, true,
-        _Void<typename __can_convert_char<typename iterator_traits<_Iter>::value_type>::__char_type>>
-        : __can_convert_char<typename iterator_traits<_Iter>::value_type>
-{
-  using _ECharT = typename iterator_traits<_Iter>::value_type;
-  using _Base = __can_convert_char<_ECharT>;
-
-  static _Iter         __range_begin(_Iter __b) { return __b; }
-  static _NullSentinal __range_end(_Iter)       { return _NullSentinal{}; }
-
-  static _ECharT __first_or_null(_Iter __b) { return *__b; }
-};
-
-template <class _Tp, bool _IsStringT =  __is_pathable_string<_Tp>::value,
-                     bool _IsCharIterT = __is_pathable_char_array<_Tp>::value,
-                     bool _IsIterT = !_IsCharIterT && __is_pathable_iter<_Tp>::value
-         >
-struct __is_pathable : false_type {
-  static_assert(!_IsStringT && !_IsCharIterT && !_IsIterT, "Must all be false");
-};
-
-template <class _Tp>
-struct __is_pathable<_Tp, true, false, false> : __is_pathable_string<_Tp> {};
-
-
-template <class _Tp>
-struct __is_pathable<_Tp, false, true, false> : __is_pathable_char_array<_Tp> {};
-
-
-template <class _Tp>
-struct __is_pathable<_Tp, false, false, true> : __is_pathable_iter<_Tp> {};
-
-
-template <class _ECharT>
-struct _PathCVT {
-    static_assert(__can_convert_char<_ECharT>::value, "Char type not convertible");
-
-    typedef __narrow_to_utf8<sizeof(_ECharT)*__CHAR_BIT__> _Narrower;
-
-    static void __append_range(string& __dest, _ECharT const* __b, _ECharT const* __e)  {
-        _Narrower()(back_inserter(__dest), __b, __e);
-    }
-
-    template <class _Iter>
-    static void __append_range(string& __dest, _Iter __b, _Iter __e) {
-        static_assert(!is_same<_Iter, _ECharT*>::value, "Call const overload");
-        if (__b == __e) return;
-        basic_string<_ECharT> __tmp(__b, __e);
-        _Narrower()(back_inserter(__dest), __tmp.data(),
-                    __tmp.data() + __tmp.length());
-    }
-
-    template <class _Iter>
-    static void __append_range(string& __dest, _Iter __b, _NullSentinal) {
-        static_assert(!is_same<_Iter, _ECharT*>::value, "Call const overload");
-        const _ECharT __sentinal = _ECharT{};
-        if (*__b == __sentinal) return;
-        basic_string<_ECharT> __tmp;
-        for (; *__b != __sentinal; ++__b)
-            __tmp.push_back(*__b);
-        _Narrower()(back_inserter(__dest), __tmp.data(),
-                    __tmp.data() + __tmp.length());
-    }
-
-    template <class _Source>
-    static void __append_source(string& __dest, _Source const& __s)
-    {
-        using _Traits = __is_pathable<_Source>;
-        __append_range(__dest, _Traits::__range_begin(__s), _Traits::__range_end(__s));
-    }
-};
-
-template <>
-struct _PathCVT<char> {
-
-    template <class _Iter>
-    static typename enable_if<
-        __is_exactly_input_iterator<_Iter>::value
-    >::type __append_range(string& __dest, _Iter __b, _Iter __e) {
-        for (; __b != __e; ++__b)
-            __dest.push_back(*__b);
-    }
-
-    template <class _Iter>
-    static typename enable_if<
-        __is_forward_iterator<_Iter>::value
-    >::type __append_range(string& __dest, _Iter __b, _Iter __e) {
-        __dest.__append_forward_unsafe(__b, __e);
-    }
-
-    template <class _Iter>
-    static void __append_range(string& __dest, _Iter __b, _NullSentinal) {
-        const char __sentinal = char{};
-        for (; *__b != __sentinal; ++__b)
-            __dest.push_back(*__b);
-    }
-
-    template <class _Source>
-    static void __append_source(string& __dest, _Source const& __s)
-    {
-        using _Traits = __is_pathable<_Source>;
-        __append_range(__dest, _Traits::__range_begin(__s),
-                               _Traits::__range_end(__s));
-    }
-};
-
-
-class _LIBCPP_TYPE_VIS path
-{
-    template <class _SourceOrIter, class _Tp = path&>
-    using _EnableIfPathable = typename
-        enable_if<__is_pathable<_SourceOrIter>::value, _Tp>::type;
-
-    template <class _Tp>
-    using _SourceChar = typename __is_pathable<_Tp>::__char_type;
-
-    template <class _Tp>
-    using _SourceCVT = _PathCVT<_SourceChar<_Tp>>;
-
-public:
-    typedef char value_type;
-    typedef basic_string<value_type> string_type;
-    typedef _VSTD::string_view __string_view;
-    static _LIBCPP_CONSTEXPR value_type preferred_separator = '/';
-
-    // constructors and destructor
-    _LIBCPP_INLINE_VISIBILITY path() _NOEXCEPT {}
-    _LIBCPP_INLINE_VISIBILITY path(const path& __p)      : __pn_(__p.__pn_) {}
-    _LIBCPP_INLINE_VISIBILITY path(path&& __p) _NOEXCEPT : __pn_(_VSTD::move(__p.__pn_)) {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    path(string_type&& __s) _NOEXCEPT : __pn_(_VSTD::move(__s)) {}
-
-    template <
-        class _Source,
-        class = _EnableIfPathable<_Source, void>
-        >
-    path(const _Source& __src) {
-        _SourceCVT<_Source>::__append_source(__pn_, __src);
-    }
-
-    template <class _InputIt>
-    path(_InputIt __first, _InputIt __last) {
-        typedef typename iterator_traits<_InputIt>::value_type _ItVal;
-        _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
-    }
-
-    // TODO Implement locale conversions.
-    template <class _Source,
-              class = _EnableIfPathable<_Source, void>
-             >
-        path(const _Source& __src, const locale& __loc);
-    template <class _InputIt>
-        path(_InputIt __first, _InputIt _last, const locale& __loc);
-
-    _LIBCPP_INLINE_VISIBILITY
-    ~path() = default;
-
-    // assignments
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator=(const path& __p) {
-        __pn_ = __p.__pn_;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator=(path&& __p) _NOEXCEPT {
-        __pn_ = _VSTD::move(__p.__pn_);
-        return *this;
-    }
-
-    template <class = void>
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator=(string_type&& __s) _NOEXCEPT {
-        __pn_ = _VSTD::move(__s);
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& assign(string_type&& __s) _NOEXCEPT {
-        __pn_ = _VSTD::move(__s);
-        return *this;
-    }
-
-    template <class _Source>
-    _LIBCPP_INLINE_VISIBILITY
-    _EnableIfPathable<_Source>
-    operator=(const _Source& __src)
-    { return this->assign(__src); }
-
-
-    template <class _Source>
-    _EnableIfPathable<_Source>
-    assign(const _Source& __src) {
-        __pn_.clear();
-        _SourceCVT<_Source>::__append_source(__pn_, __src);
-        return *this;
-    }
-
-    template <class _InputIt>
-    path& assign(_InputIt __first, _InputIt __last) {
-        typedef typename iterator_traits<_InputIt>::value_type _ItVal;
-        __pn_.clear();
-        _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
-        return *this;
-    }
-
-private:
-    template <class _ECharT>
-    void __append_sep_if_needed(_ECharT __first_or_null) {
-        const _ECharT __null_val = {};
-        bool __append_sep = !empty()                       &&
-                            !__is_separator(__pn_.back())  &&
-                            __first_or_null != __null_val  && // non-empty
-                            !__is_separator(__first_or_null);
-        if (__append_sep)
-            __pn_ += preferred_separator;
-    }
-
-public:
-    // appends
-    path& operator/=(const path& __p) {
-        _LIBCPP_ASSERT(!__p.has_root_name(),
-                      "cannot append to a path with a root name");
-        __append_sep_if_needed(__p.empty() ? char{} : __p.__pn_[0]);
-        __pn_ += __p.native();
-        return *this;
-    }
-
-    template <class _Source>
-    _LIBCPP_INLINE_VISIBILITY
-    _EnableIfPathable<_Source>
-    operator/=(const _Source& __src) {
-        return this->append(__src);
-    }
-
-    template <class _Source>
-    _EnableIfPathable<_Source>
-    append(const _Source& __src) {
-        using _Traits = __is_pathable<_Source>;
-        using _CVT = _PathCVT<_SourceChar<_Source>>;
-        __append_sep_if_needed(_Traits::__first_or_null(__src));
-        _CVT::__append_source(__pn_, __src);
-        return *this;
-    }
-
-    template <class _InputIt>
-    path& append(_InputIt __first, _InputIt __last) {
-        typedef typename iterator_traits<_InputIt>::value_type _ItVal;
-        static_assert(__can_convert_char<_ItVal>::value, "Must convertible");
-        using _CVT = _PathCVT<_ItVal>;
-        if (__first != __last) {
-            __append_sep_if_needed(*__first);
-            _CVT::__append_range(__pn_, __first, __last);
-        }
-        return *this;
-    }
-
-    // concatenation
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator+=(const path& __x) {
-        __pn_ += __x.__pn_;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator+=(const string_type& __x) {
-        __pn_ += __x;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator+=(__string_view __x) {
-        __pn_ += __x;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator+=(const value_type* __x) {
-        __pn_ += __x;
-        return *this;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& operator+=(value_type __x) {
-        __pn_ += __x;
-        return *this;
-    }
-
-    template <class _ECharT>
-    typename enable_if<__can_convert_char<_ECharT>::value, path&>::type
-    operator+=(_ECharT __x)
-    {
-        basic_string<_ECharT> __tmp;
-        __tmp += __x;
-        _PathCVT<_ECharT>::__append_source(__pn_, __tmp);
-        return *this;
-    }
-
-    template <class _Source>
-    _EnableIfPathable<_Source>
-    operator+=(const _Source& __x) {
-       return this->concat(__x);
-    }
-
-    template <class _Source>
-    _EnableIfPathable<_Source>
-    concat(const _Source& __x) {
-         _SourceCVT<_Source>::__append_source(__pn_, __x);
-        return *this;
-    }
-
-    template <class _InputIt>
-    path& concat(_InputIt __first, _InputIt __last) {
-        typedef typename iterator_traits<_InputIt>::value_type _ItVal;
-        _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
-        return *this;
-    }
-
-    // modifiers
-    _LIBCPP_INLINE_VISIBILITY
-    void clear() _NOEXCEPT {
-        __pn_.clear();
-    }
-
-    path& make_preferred() { return *this; }
-
-    _LIBCPP_INLINE_VISIBILITY
-    path& remove_filename() {
-      if (__pn_.size() == __root_path_raw().size())
-        clear();
-      else
-        __pn_ = __parent_path();
-      return *this;
-    }
-
-    path& replace_filename(const path& __replacement) {
-        remove_filename();
-        return (*this /= __replacement);
-    }
-
-    path& replace_extension(const path& __replacement = path());
-
-    _LIBCPP_INLINE_VISIBILITY
-    void  swap(path& __rhs) _NOEXCEPT {
-        __pn_.swap(__rhs.__pn_);
-    }
-
-    // native format observers
-    _LIBCPP_INLINE_VISIBILITY
-    const string_type& native() const _NOEXCEPT {
-        return __pn_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    const value_type* c_str() const _NOEXCEPT { return __pn_.c_str(); }
-
-    _LIBCPP_INLINE_VISIBILITY operator string_type() const { return __pn_;  }
-
-    template <class _ECharT, class _Traits = char_traits<_ECharT>,
-              class _Allocator = allocator<_ECharT> >
-    basic_string<_ECharT, _Traits, _Allocator>
-    string(const _Allocator& __a = _Allocator()) const {
-        using _CVT = __widen_from_utf8<sizeof(_ECharT)*__CHAR_BIT__>;
-        using _Str = basic_string<_ECharT, _Traits, _Allocator>;
-        _Str __s(__a);
-        __s.reserve(__pn_.size());
-        _CVT()(back_inserter(__s), __pn_.data(), __pn_.data() + __pn_.size());
-        return __s;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY std::string    string()    const { return __pn_; }
-    _LIBCPP_INLINE_VISIBILITY std::wstring   wstring()   const { return string<wchar_t>(); }
-    _LIBCPP_INLINE_VISIBILITY std::string    u8string()  const { return __pn_; }
-    _LIBCPP_INLINE_VISIBILITY std::u16string u16string() const { return string<char16_t>(); }
-    _LIBCPP_INLINE_VISIBILITY std::u32string u32string() const { return string<char32_t>(); }
-
-    // generic format observers
-    template <class _ECharT, class _Traits = char_traits<_ECharT>,
-              class _Allocator = allocator<_ECharT>
-    >
-    basic_string<_ECharT, _Traits, _Allocator>
-    generic_string(const _Allocator& __a = _Allocator()) const {
-        return string<_ECharT, _Traits, _Allocator>(__a);
-    }
-
-    std::string    generic_string()    const { return __pn_; }
-    std::wstring   generic_wstring()   const { return string<wchar_t>(); }
-    std::string    generic_u8string()  const { return __pn_; }
-    std::u16string generic_u16string() const { return string<char16_t>(); }
-    std::u32string generic_u32string() const { return string<char32_t>(); }
-
-private:
-    int __compare(__string_view) const;
-    __string_view __root_name() const;
-    __string_view __root_directory() const;
-    __string_view __root_path_raw() const;
-    __string_view __relative_path() const;
-    __string_view __parent_path() const;
-    __string_view __filename() const;
-    __string_view __stem() const;
-    __string_view __extension() const;
-
-public:
-    // compare
-    _LIBCPP_INLINE_VISIBILITY int compare(const path& __p) const _NOEXCEPT { return __compare(__p.__pn_);}
-    _LIBCPP_INLINE_VISIBILITY int compare(const string_type& __s) const { return __compare(__s); }
-    _LIBCPP_INLINE_VISIBILITY int compare(__string_view __s) const { return __compare(__s); }
-    _LIBCPP_INLINE_VISIBILITY int compare(const value_type* __s) const  { return __compare(__s); }
-
-    // decomposition
-    _LIBCPP_INLINE_VISIBILITY path root_name()      const { return  string_type(__root_name()); }
-    _LIBCPP_INLINE_VISIBILITY path root_directory() const { return  string_type(__root_directory()); }
-    _LIBCPP_INLINE_VISIBILITY path root_path()      const { return root_name().append(string_type(__root_directory())); }
-    _LIBCPP_INLINE_VISIBILITY path relative_path()  const { return string_type(__relative_path()); }
-    _LIBCPP_INLINE_VISIBILITY path parent_path()    const { return string_type(__parent_path()); }
-    _LIBCPP_INLINE_VISIBILITY path filename()       const { return string_type(__filename()); }
-    _LIBCPP_INLINE_VISIBILITY path stem()           const { return string_type(__stem());}
-    _LIBCPP_INLINE_VISIBILITY path extension()      const { return string_type(__extension()); }
-
-    // query
-    _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 
-    bool empty() const _NOEXCEPT { return __pn_.empty(); }
-
-    _LIBCPP_INLINE_VISIBILITY bool has_root_name()      const { return !__root_name().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_root_directory() const { return !__root_directory().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_root_path()      const { return !__root_path_raw().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_relative_path()  const { return !__relative_path().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_parent_path()    const { return !__parent_path().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_filename()       const { return !__filename().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_stem()           const { return !__stem().empty(); }
-    _LIBCPP_INLINE_VISIBILITY bool has_extension()      const { return !__extension().empty(); }
-
-    _LIBCPP_INLINE_VISIBILITY bool is_absolute()        const { return has_root_directory(); }
-    _LIBCPP_INLINE_VISIBILITY bool is_relative()        const { return !is_absolute(); }
-
-    // iterators
-    class _LIBCPP_TYPE_VIS iterator;
-    typedef iterator const_iterator;
-
-    iterator begin() const;
-    iterator end() const;
-
-
-    template <class _CharT, class _Traits>
-    _LIBCPP_INLINE_VISIBILITY
-    friend typename enable_if<is_same<_CharT, char>::value &&
-                       is_same<_Traits, char_traits<char>>::value,
-                       basic_ostream<_CharT, _Traits>&
-    >::type
-    operator<<(basic_ostream<_CharT, _Traits>& __os, const path& __p) {
-        __os << std::__quoted(__p.native());
-        return __os;
-    }
-
-    template <class _CharT, class _Traits>
-    _LIBCPP_INLINE_VISIBILITY
-    friend typename enable_if<!is_same<_CharT, char>::value ||
-                       !is_same<_Traits, char_traits<char>>::value,
-                       basic_ostream<_CharT, _Traits>&
-    >::type
-    operator<<(basic_ostream<_CharT, _Traits>& __os, const path& __p) {
-        __os << std::__quoted(__p.string<_CharT, _Traits>());
-        return __os;
-    }
-
-    template <class _CharT, class _Traits>
-    _LIBCPP_INLINE_VISIBILITY
-    friend basic_istream<_CharT, _Traits>&
-    operator>>(basic_istream<_CharT, _Traits>& __is, path& __p)
-    {
-        basic_string<_CharT, _Traits> __tmp;
-        __is >> __quoted(__tmp);
-        __p = __tmp;
-        return __is;
-    }
-
-private:
-    inline _LIBCPP_INLINE_VISIBILITY
-    path& __assign_view(__string_view const& __s) noexcept { __pn_ = string_type(__s); return *this; }
-    string_type __pn_;
-};
-
-inline _LIBCPP_ALWAYS_INLINE
-void swap(path& __lhs, path& __rhs) _NOEXCEPT {
-    __lhs.swap(__rhs);
-}
-
-_LIBCPP_FUNC_VIS
-size_t hash_value(const path& __p) _NOEXCEPT;
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator==(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) == 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator!=(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) != 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator<(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) < 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator<=(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) <= 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator>(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) > 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator>=(const path& __lhs, const path& __rhs) _NOEXCEPT
-{ return __lhs.compare(__rhs) >= 0; }
-
-inline _LIBCPP_INLINE_VISIBILITY
-path operator/(const path& __lhs, const path& __rhs) {
-    return path(__lhs) /= __rhs;
-}
-
-template <class _Source>
-_LIBCPP_INLINE_VISIBILITY
-typename enable_if<__is_pathable<_Source>::value, path>::type
-u8path(const _Source& __s){
-    static_assert(is_same<typename __is_pathable<_Source>::__char_type, char>::value,
-        "u8path(Source const&) requires Source have a character type of type 'char'");
-    return path(__s);
-}
-
-template <class _InputIt>
-_LIBCPP_INLINE_VISIBILITY
-typename enable_if<__is_pathable<_InputIt>::value, path>::type
-u8path(_InputIt __f, _InputIt __l) {
-    static_assert(is_same<typename __is_pathable<_InputIt>::__char_type, char>::value,
-        "u8path(Iter, Iter) requires Iter have a value_type of type 'char'");
-    return path(__f, __l);
-}
-
-class _LIBCPP_TYPE_VIS path::iterator
-{
-public:
-    typedef bidirectional_iterator_tag iterator_category;
-
-    typedef path                       value_type;
-    typedef std::ptrdiff_t             difference_type;
-    typedef const path*                pointer;
-    typedef const path&                reference;
-
-    typedef void __stashing_iterator_tag; // See reverse_iterator and __is_stashing_iterator
-public:
-    _LIBCPP_INLINE_VISIBILITY
-    iterator() : __stashed_elem_(), __path_ptr_(nullptr),
-                 __entry_(), __state_(__singular) {}
-
-    iterator(const iterator&) = default;
-    ~iterator() = default;
-
-    iterator& operator=(const iterator&) = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    reference operator*() const {
-        return __stashed_elem_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    pointer operator->() const {
-        return &__stashed_elem_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    iterator& operator++() {
-        _LIBCPP_ASSERT(__state_ != __singular,
-                       "attempting to increment a singular iterator");
-        _LIBCPP_ASSERT(__state_ != __at_end,
-                      "attempting to increment the end iterator");
-        return __increment();
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    iterator operator++(int) {
-        iterator __it(*this);
-        this->operator++();
-        return __it;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    iterator& operator--() {
-        _LIBCPP_ASSERT(__state_ != __singular,
-                       "attempting to decrement a singular iterator");
-        _LIBCPP_ASSERT(__entry_.data() != __path_ptr_->native().data(),
-                       "attempting to decrement the begin iterator");
-        return __decrement();
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    iterator operator--(int) {
-        iterator __it(*this);
-        this->operator--();
-        return __it;
-    }
-
-private:
-    friend class path;
-
-    static constexpr unsigned char __singular = 0;
-    static constexpr unsigned char __at_end = 6;
-
-    inline _LIBCPP_INLINE_VISIBILITY
-    friend bool operator==(const iterator&, const iterator&);
-
-    iterator& __increment();
-    iterator& __decrement();
-
-    path __stashed_elem_;
-    const path* __path_ptr_;
-    path::__string_view __entry_;
-    unsigned char __state_;
-};
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator==(const path::iterator& __lhs, const path::iterator& __rhs) {
-    return __lhs.__path_ptr_ == __rhs.__path_ptr_ &&
-           __lhs.__entry_.data() == __rhs.__entry_.data();
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator!=(const path::iterator& __lhs, const path::iterator& __rhs) {
-    return !(__lhs == __rhs);
-}
-
-class _LIBCPP_EXCEPTION_ABI filesystem_error : public system_error
-{
-public:
-    _LIBCPP_INLINE_VISIBILITY
-    filesystem_error(const string& __what, error_code __ec)
-        : system_error(__ec, __what),
-          __paths_(make_shared<_Storage>(path(), path()))
-    {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    filesystem_error(const string& __what, const path& __p1, error_code __ec)
-        : system_error(__ec, __what),
-        __paths_(make_shared<_Storage>(__p1, path()))
-    {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    filesystem_error(const string& __what, const path& __p1, const path& __p2,
-                     error_code __ec)
-        : system_error(__ec, __what),
-          __paths_(make_shared<_Storage>(__p1, __p2))
-    {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    const path& path1() const _NOEXCEPT {
-        return __paths_->first;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    const path& path2() const _NOEXCEPT {
-        return __paths_->second;
-    }
-
-    ~filesystem_error() override; // key function
-
-    // TODO(ericwf): Create a custom error message.
-    //const char* what() const _NOEXCEPT;
-
-private:
-    typedef pair<path, path> _Storage;
-    shared_ptr<_Storage> __paths_;
-};
-
-template <class... _Args>
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
-#ifndef _LIBCPP_NO_EXCEPTIONS
-void __throw_filesystem_error(_Args && ...__args)
-{
-    throw filesystem_error(std::forward<_Args>(__args)...);
-}
-#else
-void __throw_filesystem_error(_Args&&...)
-{
-    _VSTD::abort();
-}
-#endif
-
-
-// operational functions
-
-_LIBCPP_FUNC_VIS
-path __canonical(const path&, const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __copy(const path& __from, const path& __to, copy_options __opt,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __copy_file(const path& __from, const path& __to, copy_options __opt,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __copy_symlink(const path& __existing_symlink, const path& __new_symlink,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __create_directories(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __create_directory(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __create_directory(const path& p, const path & attributes,
-        error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __create_directory_symlink(const path& __to, const path& __new_symlink,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __create_hard_link(const path& __to, const path& __new_hard_link,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __create_symlink(const path& __to, const path& __new_symlink,
-        error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-path __current_path(error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __current_path(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __equivalent(const path&, const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-uintmax_t __file_size(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-uintmax_t __hard_link_count(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __fs_is_empty(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-file_time_type __last_write_time(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __last_write_time(const path& p, file_time_type new_time,
-        error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __permissions(const path&, perms, perm_options, error_code* = nullptr);
-_LIBCPP_FUNC_VIS
-path __read_symlink(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-bool __remove(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-uintmax_t __remove_all(const path& p, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __rename(const path& from, const path& to, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-void __resize_file(const path& p, uintmax_t size, error_code *ec=nullptr);
-_LIBCPP_FUNC_VIS
-space_info __space(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-file_status __status(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-file_status __symlink_status(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-path __system_complete(const path&, error_code *__ec=nullptr);
-_LIBCPP_FUNC_VIS
-path __temp_directory_path(error_code *__ec=nullptr);
-
-inline _LIBCPP_INLINE_VISIBILITY
-path current_path() {
-    return __current_path();
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path current_path(error_code& __ec) {
-    return __current_path(&__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void current_path(const path& __p) {
-    __current_path(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void current_path(const path& __p, error_code& __ec) _NOEXCEPT {
-    __current_path(__p, &__ec);
-}
-
-_LIBCPP_FUNC_VIS
-path absolute(const path&, const path& __p2 = current_path());
-
-inline _LIBCPP_INLINE_VISIBILITY
-path canonical(const path& __p, const path& __base = current_path()) {
-    return __canonical(__p, __base);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path canonical(const path& __p, error_code& __ec) {
-    path __base = __current_path(&__ec);
-    if (__ec) return {};
-    return __canonical(__p, __base, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path canonical(const path& __p, const path& __base, error_code& __ec) {
-    return __canonical(__p, __base, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy(const path& __from, const path& __to) {
-    __copy(__from, __to, copy_options::none);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy(const path& __from, const path& __to, error_code& __ec) {
-    __copy(__from, __to, copy_options::none, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy(const path& __from, const path& __to, copy_options __opt) {
-    __copy(__from, __to, __opt);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy(const path& __from, const path& __to,
-          copy_options __opt, error_code& __ec) {
-    __copy(__from, __to, __opt, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool copy_file(const path& __from, const path& __to) {
-    return __copy_file(__from, __to, copy_options::none);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool copy_file(const path& __from, const path& __to, error_code& __ec) {
-    return __copy_file(__from, __to, copy_options::none, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool copy_file(const path& __from, const path& __to, copy_options __opt) {
-    return __copy_file(__from, __to, __opt);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool copy_file(const path& __from, const path& __to,
-               copy_options __opt, error_code& __ec){
-    return __copy_file(__from, __to, __opt, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy_symlink(const path& __existing, const path& __new) {
-    __copy_symlink(__existing, __new);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void copy_symlink(const path& __ext, const path& __new, error_code& __ec) _NOEXCEPT {
-    __copy_symlink(__ext, __new, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directories(const path& __p) {
-    return __create_directories(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directories(const path& __p, error_code& __ec) {
-    return __create_directories(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directory(const path& __p) {
-    return __create_directory(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directory(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __create_directory(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directory(const path& __p, const path& __attrs) {
-    return __create_directory(__p, __attrs);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool create_directory(const path& __p, const path& __attrs, error_code& __ec) _NOEXCEPT {
-    return __create_directory(__p, __attrs, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_directory_symlink(const path& __to, const path& __new) {
-    __create_directory_symlink(__to, __new);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_directory_symlink(const path& __to, const path& __new,
-                              error_code& __ec) _NOEXCEPT {
-    __create_directory_symlink(__to, __new, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_hard_link(const path& __to, const path& __new) {
-    __create_hard_link(__to, __new);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_hard_link(const path& __to, const path& __new, error_code& __ec) _NOEXCEPT {
-    __create_hard_link(__to, __new, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_symlink(const path& __to, const path& __new) {
-    __create_symlink(__to, __new);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void create_symlink(const path& __to, const path& __new, error_code& __ec) _NOEXCEPT {
-    return __create_symlink(__to, __new, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool status_known(file_status __s) _NOEXCEPT {
-    return __s.type() != file_type::none;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool exists(file_status __s) _NOEXCEPT {
-    return status_known(__s) && __s.type() != file_type::not_found;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool exists(const path& __p) {
-    return exists(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool exists(const path& __p, error_code& __ec) _NOEXCEPT {
-    auto __s = __status(__p, &__ec);
-    if (status_known(__s)) __ec.clear();
-    return exists(__s);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool equivalent(const path& __p1, const path& __p2) {
-    return __equivalent(__p1, __p2);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool equivalent(const path& __p1, const path& __p2, error_code& __ec) _NOEXCEPT {
-    return __equivalent(__p1, __p2, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t file_size(const path& __p) {
-    return __file_size(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t file_size(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __file_size(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t hard_link_count(const path& __p) {
-    return __hard_link_count(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t hard_link_count(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __hard_link_count(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_block_file(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::block;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_block_file(const path& __p) {
-    return is_block_file(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_block_file(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_block_file(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_character_file(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::character;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_character_file(const path& __p) {
-    return is_character_file(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_character_file(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_character_file(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_directory(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::directory;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_directory(const path& __p) {
-    return is_directory(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_directory(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_directory(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_empty(const path& __p) {
-    return __fs_is_empty(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_empty(const path& __p, error_code& __ec) {
-    return __fs_is_empty(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_fifo(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::fifo;
-}
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_fifo(const path& __p) {
-    return is_fifo(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_fifo(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_fifo(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_regular_file(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::regular;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_regular_file(const path& __p) {
-    return is_regular_file(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_regular_file(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_regular_file(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_socket(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::socket;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_socket(const path& __p) {
-    return is_socket(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_socket(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_socket(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_symlink(file_status __s) _NOEXCEPT {
-    return __s.type() == file_type::symlink;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_symlink(const path& __p) {
-    return is_symlink(__symlink_status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_symlink(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_symlink(__symlink_status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_other(file_status __s) _NOEXCEPT {
-    return exists(__s)
-        && !is_regular_file(__s) && !is_directory(__s) && !is_symlink(__s);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_other(const path& __p) {
-    return is_other(__status(__p));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool is_other(const path& __p, error_code& __ec) _NOEXCEPT {
-    return is_other(__status(__p, &__ec));
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_time_type last_write_time(const path& __p) {
-    return __last_write_time(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_time_type last_write_time(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __last_write_time(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void last_write_time(const path& __p, file_time_type __t) {
-    __last_write_time(__p, __t);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void last_write_time(const path& __p, file_time_type __t, error_code& __ec) _NOEXCEPT {
-    __last_write_time(__p, __t, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void permissions(const path& __p, perms __prms,
-                 perm_options __opts = perm_options::replace) {
-    __permissions(__p, __prms, __opts);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void permissions(const path& __p, perms __prms, error_code& __ec) _NOEXCEPT {
-    __permissions(__p, __prms, perm_options::replace, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void permissions(const path& __p, perms __prms, perm_options __opts,
-                 error_code& __ec)  {
-    __permissions(__p, __prms, __opts, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path read_symlink(const path& __p) {
-    return __read_symlink(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path read_symlink(const path& __p, error_code& __ec) {
-    return __read_symlink(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool remove(const path& __p) {
-    return __remove(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool remove(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __remove(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t remove_all(const path& __p) {
-    return __remove_all(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-uintmax_t remove_all(const path& __p, error_code& __ec) {
-    return __remove_all(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void rename(const path& __from, const path& __to) {
-    return __rename(__from, __to);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void rename(const path& __from, const path& __to, error_code& __ec) _NOEXCEPT {
-    return __rename(__from, __to, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void resize_file(const path& __p, uintmax_t __ns) {
-    return __resize_file(__p, __ns);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-void resize_file(const path& __p, uintmax_t __ns, error_code& __ec) _NOEXCEPT {
-    return __resize_file(__p, __ns, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-space_info space(const path& __p) {
-    return __space(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-space_info space(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __space(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_status status(const path& __p) {
-    return __status(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_status status(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __status(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_status symlink_status(const path& __p) {
-    return __symlink_status(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-file_status symlink_status(const path& __p, error_code& __ec) _NOEXCEPT {
-    return __symlink_status(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path system_complete(const path& __p) {
-    return __system_complete(__p);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path system_complete(const path& __p, error_code& __ec) {
-    return __system_complete(__p, &__ec);
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path temp_directory_path() {
-    return __temp_directory_path();
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-path temp_directory_path(error_code& __ec) {
-    return __temp_directory_path(&__ec);
-}
-
-
-class directory_entry
-{
-    typedef _VSTD_FS::path _Path;
-
-public:
-    // constructors and destructors
-    directory_entry() _NOEXCEPT = default;
-    directory_entry(directory_entry const&) = default;
-    directory_entry(directory_entry&&) _NOEXCEPT = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    explicit directory_entry(_Path const& __p) : __p_(__p) {}
-
-    ~directory_entry() {}
-
-    directory_entry& operator=(directory_entry const&) = default;
-    directory_entry& operator=(directory_entry&&) _NOEXCEPT = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    void assign(_Path const& __p) {
-        __p_ = __p;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    void replace_filename(_Path const& __p) {
-        __p_ = __p_.parent_path() / __p;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    _Path const& path() const _NOEXCEPT {
-        return __p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    operator const _Path&() const _NOEXCEPT {
-        return __p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    file_status status() const {
-        return _VSTD_FS::status(__p_);
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    file_status status(error_code& __ec) const _NOEXCEPT {
-        return _VSTD_FS::status(__p_, __ec);
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    file_status symlink_status() const {
-        return _VSTD_FS::symlink_status(__p_);
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    file_status symlink_status(error_code& __ec) const _NOEXCEPT {
-        return _VSTD_FS::symlink_status(__p_, __ec);
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator< (directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ < __rhs.__p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator==(directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ == __rhs.__p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator!=(directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ != __rhs.__p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator<=(directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ <= __rhs.__p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator> (directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ > __rhs.__p_;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool operator>=(directory_entry const& __rhs) const _NOEXCEPT {
-        return __p_ >= __rhs.__p_;
-    }
-private:
-    _Path __p_;
-};
-
-
-class directory_iterator;
-class recursive_directory_iterator;
-class __dir_stream;
-
-class __dir_element_proxy {
-public:
-
-    inline _LIBCPP_INLINE_VISIBILITY
-    directory_entry operator*() { return _VSTD::move(__elem_); }
-
-private:
-    friend class directory_iterator;
-    friend class recursive_directory_iterator;
-    explicit __dir_element_proxy(directory_entry const& __e) : __elem_(__e) {}
-    __dir_element_proxy(__dir_element_proxy&& __o) : __elem_(_VSTD::move(__o.__elem_)) {}
-    directory_entry __elem_;
-};
-
-class directory_iterator
-{
-public:
-    typedef directory_entry value_type;
-    typedef ptrdiff_t difference_type;
-    typedef value_type const* pointer;
-    typedef value_type const& reference;
-    typedef input_iterator_tag iterator_category;
-
-public:
-    //ctor & dtor
-    directory_iterator() _NOEXCEPT
-    { }
-
-    explicit directory_iterator(const path& __p)
-        : directory_iterator(__p, nullptr)
-    { }
-
-    directory_iterator(const path& __p, directory_options __opts)
-        : directory_iterator(__p, nullptr, __opts)
-    { }
-
-    directory_iterator(const path& __p, error_code& __ec)
-        : directory_iterator(__p, &__ec)
-    { }
-
-    directory_iterator(const path& __p, directory_options __opts,
-                       error_code& __ec)
-        : directory_iterator(__p, &__ec, __opts)
-    { }
-
-    directory_iterator(const directory_iterator&) = default;
-    directory_iterator(directory_iterator&&) = default;
-    directory_iterator& operator=(const directory_iterator&) = default;
-
-    directory_iterator& operator=(directory_iterator&& __o) _NOEXCEPT {
-        // non-default implementation provided to support self-move assign.
-        if (this != &__o) {
-            __imp_ = _VSTD::move(__o.__imp_);
-        }
-        return *this;
-    }
-
-    ~directory_iterator() = default;
-
-    const directory_entry& operator*() const {
-        _LIBCPP_ASSERT(__imp_, "The end iterator cannot be dereferenced");
-        return __dereference();
-    }
-
-    const directory_entry* operator->() const
-    { return &**this; }
-
-    directory_iterator& operator++()
-    { return __increment(); }
-
-    __dir_element_proxy operator++(int) {
-        __dir_element_proxy __p(**this);
-        __increment();
-        return __p;
-    }
-
-    directory_iterator& increment(error_code& __ec)
-    { return __increment(&__ec); }
-
-private:
-    inline _LIBCPP_INLINE_VISIBILITY
-    friend bool operator==(const directory_iterator& __lhs,
-                           const directory_iterator& __rhs) _NOEXCEPT;
-
-    // construct the dir_stream
-    _LIBCPP_FUNC_VIS
-    directory_iterator(const path&, error_code *,
-                       directory_options = directory_options::none);
-
-    _LIBCPP_FUNC_VIS
-    directory_iterator& __increment(error_code * __ec = nullptr);
-
-    _LIBCPP_FUNC_VIS
-    const directory_entry& __dereference() const;
-
-private:
-    shared_ptr<__dir_stream> __imp_;
-};
-
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator==(const directory_iterator& __lhs,
-                const directory_iterator& __rhs) _NOEXCEPT {
-    return __lhs.__imp_ == __rhs.__imp_;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator!=(const directory_iterator& __lhs,
-                const directory_iterator& __rhs) _NOEXCEPT {
-    return !(__lhs == __rhs);
-}
-
-// enable directory_iterator range-based for statements
-inline _LIBCPP_INLINE_VISIBILITY
-directory_iterator begin(directory_iterator __iter) _NOEXCEPT {
-    return __iter;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-directory_iterator end(const directory_iterator&) _NOEXCEPT {
-    return directory_iterator();
-}
-
-class recursive_directory_iterator {
-public:
-    using value_type = directory_entry;
-    using difference_type = std::ptrdiff_t;
-    using pointer = directory_entry const *;
-    using reference = directory_entry const &;
-    using iterator_category = std::input_iterator_tag;
-
-public:
-    // constructors and destructor
-    _LIBCPP_INLINE_VISIBILITY
-    recursive_directory_iterator()  _NOEXCEPT
-        : __rec_(false)
-    {}
-
-    _LIBCPP_INLINE_VISIBILITY
-    explicit recursive_directory_iterator(const path& __p,
-                directory_options __xoptions = directory_options::none)
-        : recursive_directory_iterator(__p, __xoptions,  nullptr)
-    { }
-
-    _LIBCPP_INLINE_VISIBILITY
-    recursive_directory_iterator(const path& __p,
-        directory_options __xoptions, error_code& __ec)
-        : recursive_directory_iterator(__p, __xoptions, &__ec)
-    { }
-
-    _LIBCPP_INLINE_VISIBILITY
-    recursive_directory_iterator(const path& __p, error_code& __ec)
-        : recursive_directory_iterator(__p, directory_options::none,  &__ec)
-    { }
-
-    recursive_directory_iterator(const recursive_directory_iterator&) = default;
-    recursive_directory_iterator(recursive_directory_iterator&&) = default;
-
-    recursive_directory_iterator &
-    operator=(const recursive_directory_iterator&) = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    recursive_directory_iterator &
-    operator=(recursive_directory_iterator&& __o) noexcept {
-        // non-default implementation provided to support self-move assign.
-        if (this != &__o) {
-            __imp_ = _VSTD::move(__o.__imp_);
-            __rec_ = __o.__rec_;
-        }
-        return *this;
-    }
-
-    ~recursive_directory_iterator() = default;
-
-    _LIBCPP_INLINE_VISIBILITY
-    const directory_entry& operator*() const
-    { return __dereference(); }
-
-    _LIBCPP_INLINE_VISIBILITY
-    const directory_entry* operator->() const
-    { return &__dereference(); }
-
-    recursive_directory_iterator& operator++()
-    { return __increment(); }
-
-    _LIBCPP_INLINE_VISIBILITY
-    __dir_element_proxy operator++(int) {
-        __dir_element_proxy __p(**this);
-        __increment();
-        return __p;
-    }
-
-    _LIBCPP_INLINE_VISIBILITY
-    recursive_directory_iterator& increment(error_code& __ec)
-    { return __increment(&__ec); }
-
-    _LIBCPP_FUNC_VIS directory_options options() const;
-    _LIBCPP_FUNC_VIS int  depth() const;
-
-    _LIBCPP_INLINE_VISIBILITY
-    void pop() { __pop(); }
-
-    _LIBCPP_INLINE_VISIBILITY
-    void pop(error_code& __ec)
-    { __pop(&__ec); }
-
-    _LIBCPP_INLINE_VISIBILITY
-    bool recursion_pending() const
-    { return __rec_; }
-
-    _LIBCPP_INLINE_VISIBILITY
-    void disable_recursion_pending()
-    { __rec_ = false; }
-
-private:
-    recursive_directory_iterator(const path& __p, directory_options __opt,
-                                 error_code *__ec);
-
-    _LIBCPP_FUNC_VIS
-    const directory_entry& __dereference() const;
-
-    _LIBCPP_FUNC_VIS
-    bool __try_recursion(error_code* __ec);
-
-    _LIBCPP_FUNC_VIS
-    void __advance(error_code* __ec=nullptr);
-
-    _LIBCPP_FUNC_VIS
-    recursive_directory_iterator& __increment(error_code *__ec=nullptr);
-
-    _LIBCPP_FUNC_VIS
-    void __pop(error_code* __ec=nullptr);
-
-    inline _LIBCPP_INLINE_VISIBILITY
-    friend bool operator==(const recursive_directory_iterator&,
-                           const recursive_directory_iterator&) _NOEXCEPT;
-
-    struct __shared_imp;
-    shared_ptr<__shared_imp> __imp_;
-    bool __rec_;
-};                                     // class recursive_directory_iterator
-
-
-inline _LIBCPP_INLINE_VISIBILITY
-bool operator==(const recursive_directory_iterator& __lhs,
-                const recursive_directory_iterator& __rhs) _NOEXCEPT
-{
-    return __lhs.__imp_ == __rhs.__imp_;
-}
-
-_LIBCPP_INLINE_VISIBILITY
-inline bool operator!=(const recursive_directory_iterator& __lhs,
-                        const recursive_directory_iterator& __rhs) _NOEXCEPT
-{
-    return !(__lhs == __rhs);
-}
-// enable recursive_directory_iterator range-based for statements
-inline _LIBCPP_INLINE_VISIBILITY
-recursive_directory_iterator begin(recursive_directory_iterator __iter) _NOEXCEPT {
-    return __iter;
-}
-
-inline _LIBCPP_INLINE_VISIBILITY
-recursive_directory_iterator end(const recursive_directory_iterator&) _NOEXCEPT {
-    return recursive_directory_iterator();
-}
+using namespace _VSTD_FS;
 
 _LIBCPP_END_NAMESPACE_EXPERIMENTAL_FILESYSTEM
 
+#endif // !_LIBCPP_CXX03_LANG
+
+_LIBCPP_POP_MACROS
+
 #endif // _LIBCPP_EXPERIMENTAL_FILESYSTEM
diff --git a/linux-x64/clang/include/c++/v1/experimental/memory_resource b/linux-x64/clang/include/c++/v1/experimental/memory_resource
index d101f3e..221ce5b 100644
--- a/linux-x64/clang/include/c++/v1/experimental/memory_resource
+++ b/linux-x64/clang/include/c++/v1/experimental/memory_resource
@@ -71,7 +71,7 @@
 #include <memory>
 #include <new>
 #include <stdexcept>
-#include <tuple>
+#include <__tuple>
 #include <type_traits>
 #include <utility>
 #include <cstddef>
@@ -96,7 +96,7 @@
 }
 
 // 8.5, memory.resource
-class _LIBCPP_TEMPLATE_VIS memory_resource
+class _LIBCPP_TYPE_VIS memory_resource
 {
     static const size_t __max_align = alignof(max_align_t);
 
@@ -206,7 +206,7 @@
     void construct(_Tp* __p, _Ts &&... __args)
     {
         _VSTD_LFTS::__lfts_user_alloc_construct(
-            __p, resource(), _VSTD::forward<_Ts>(__args)...
+            __p, *this, _VSTD::forward<_Ts>(__args)...
           );
     }
 
@@ -218,14 +218,14 @@
         ::new ((void*)__p) pair<_T1, _T2>(piecewise_construct
           , __transform_tuple(
               typename __lfts_uses_alloc_ctor<
-                  _T1, memory_resource*, _Args1...
+                  _T1, polymorphic_allocator&, _Args1...
               >::type()
             , _VSTD::move(__x)
             , typename __make_tuple_indices<sizeof...(_Args1)>::type{}
           )
           , __transform_tuple(
               typename __lfts_uses_alloc_ctor<
-                  _T2, memory_resource*, _Args2...
+                  _T2, polymorphic_allocator&, _Args2...
               >::type()
             , _VSTD::move(__y)
             , typename __make_tuple_indices<sizeof...(_Args2)>::type{}
@@ -289,23 +289,23 @@
 
     template <class ..._Args, size_t ..._Idx>
     _LIBCPP_INLINE_VISIBILITY
-    tuple<allocator_arg_t const&, memory_resource*, _Args&&...>
+    tuple<allocator_arg_t const&, polymorphic_allocator&, _Args&&...>
     __transform_tuple(integral_constant<int, 1>, tuple<_Args...> && __t,
-                      __tuple_indices<_Idx...>) const
+                      __tuple_indices<_Idx...>)
     {
-        using _Tup = tuple<allocator_arg_t const&, memory_resource*, _Args&&...>;
-        return _Tup(allocator_arg, resource(),
+        using _Tup = tuple<allocator_arg_t const&, polymorphic_allocator&, _Args&&...>;
+        return _Tup(allocator_arg, *this,
                     _VSTD::get<_Idx>(_VSTD::move(__t))...);
     }
 
     template <class ..._Args, size_t ..._Idx>
     _LIBCPP_INLINE_VISIBILITY
-    tuple<_Args&&..., memory_resource*>
+    tuple<_Args&&..., polymorphic_allocator&>
     __transform_tuple(integral_constant<int, 2>, tuple<_Args...> && __t,
-                      __tuple_indices<_Idx...>) const
+                      __tuple_indices<_Idx...>)
     {
-        using _Tup = tuple<_Args&&..., memory_resource*>;
-        return _Tup(_VSTD::get<_Idx>(_VSTD::move(__t))..., resource());
+        using _Tup = tuple<_Args&&..., polymorphic_allocator&>;
+        return _Tup(_VSTD::get<_Idx>(_VSTD::move(__t))..., *this);
     }
 
     _LIBCPP_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/experimental/simd b/linux-x64/clang/include/c++/v1/experimental/simd
new file mode 100644
index 0000000..6580443
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/experimental/simd
@@ -0,0 +1,1570 @@
+// -*- C++ -*-
+//===------------------------------- simd ---------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP_EXPERIMENTAL_SIMD
+#define _LIBCPP_EXPERIMENTAL_SIMD
+
+/*
+    experimental/simd synopsis
+
+namespace std::experimental {
+
+inline namespace parallelism_v2 {
+
+namespace simd_abi {
+
+struct scalar {};
+template <int N> struct fixed_size {};
+template <typename T> inline constexpr int max_fixed_size = implementation-defined;
+template <typename T> using compatible = implementation-defined;
+template <typename T> using native = implementation-defined;
+
+} // simd_abi
+
+struct element_aligned_tag {};
+struct vector_aligned_tag {};
+template <size_t> struct overaligned_tag {};
+inline constexpr element_aligned_tag element_aligned{};
+inline constexpr vector_aligned_tag vector_aligned{};
+template <size_t N> inline constexpr overaligned_tag<N> overaligned{};
+
+// traits [simd.traits]
+template <class T> struct is_abi_tag;
+template <class T> inline constexpr bool is_abi_tag_v = is_abi_tag<T>::value;
+
+template <class T> struct is_simd;
+template <class T> inline constexpr bool is_simd_v = is_simd<T>::value;
+
+template <class T> struct is_simd_mask;
+template <class T> inline constexpr bool is_simd_mask_v = is_simd_mask<T>::value;
+
+template <class T> struct is_simd_flag_type;
+template <class T> inline constexpr bool is_simd_flag_type_v = is_simd_flag_type<T>::value;
+
+template <class T, size_t N> struct abi_for_size { using type = see below; };
+template <class T, size_t N> using abi_for_size_t = typename abi_for_size<T, N>::type;
+
+template <class T, class Abi = simd_abi::compatible<T>> struct simd_size;
+template <class T, class Abi = simd_abi::compatible<T>>
+inline constexpr size_t simd_size_v = simd_size<T, Abi>::value;
+
+template <class T, class U = typename T::value_type> struct memory_alignment;
+template <class T, class U = typename T::value_type>
+inline constexpr size_t memory_alignment_v = memory_alignment<T, U>::value;
+
+// class template simd [simd.class]
+template <class T, class Abi = simd_abi::compatible<T>> class simd;
+template <class T> using native_simd = simd<T, simd_abi::native<T>>;
+template <class T, int N> using fixed_size_simd = simd<T, simd_abi::fixed_size<N>>;
+
+// class template simd_mask [simd.mask.class]
+template <class T, class Abi = simd_abi::compatible<T>> class simd_mask;
+template <class T> using native_simd_mask = simd_mask<T, simd_abi::native<T>>;
+template <class T, int N> using fixed_size_simd_mask = simd_mask<T, simd_abi::fixed_size<N>>;
+
+// casts [simd.casts]
+template <class T, class U, class Abi> see below simd_cast(const simd<U, Abi>&);
+template <class T, class U, class Abi> see below static_simd_cast(const simd<U, Abi>&);
+
+template <class T, class Abi>
+fixed_size_simd<T, simd_size_v<T, Abi>> to_fixed_size(const simd<T, Abi>&) noexcept;
+template <class T, class Abi>
+fixed_size_simd_mask<T, simd_size_v<T, Abi>> to_fixed_size(const simd_mask<T, Abi>&) noexcept;
+template <class T, size_t N> native_simd<T> to_native(const fixed_size_simd<T, N>&) noexcept;
+template <class T, size_t N>
+native_simd_mask<T> to_native(const fixed_size_simd_mask<T, N>> &) noexcept;
+template <class T, size_t N> simd<T> to_compatible(const fixed_size_simd<T, N>&) noexcept;
+template <class T, size_t N> simd_mask<T> to_compatible(const fixed_size_simd_mask<T, N>&) noexcept;
+
+template <size_t... Sizes, class T, class Abi>
+tuple<simd<T, abi_for_size_t<Sizes>>...> split(const simd<T, Abi>&);
+template <size_t... Sizes, class T, class Abi>
+tuple<simd_mask<T, abi_for_size_t<Sizes>>...> split(const simd_mask<T, Abi>&);
+template <class V, class Abi>
+array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(
+const simd<typename V::value_type, Abi>&);
+template <class V, class Abi>
+array<V, simd_size_v<typename V::value_type, Abi> / V::size()> split(
+const simd_mask<typename V::value_type, Abi>&);
+
+template <class T, class... Abis>
+simd<T, abi_for_size_t<T, (simd_size_v<T, Abis> + ...)>> concat(const simd<T, Abis>&...);
+template <class T, class... Abis>
+simd_mask<T, abi_for_size_t<T, (simd_size_v<T, Abis> + ...)>> concat(const simd_mask<T, Abis>&...);
+
+// reductions [simd.mask.reductions]
+template <class T, class Abi> bool all_of(const simd_mask<T, Abi>&) noexcept;
+template <class T, class Abi> bool any_of(const simd_mask<T, Abi>&) noexcept;
+template <class T, class Abi> bool none_of(const simd_mask<T, Abi>&) noexcept;
+template <class T, class Abi> bool some_of(const simd_mask<T, Abi>&) noexcept;
+template <class T, class Abi> int popcount(const simd_mask<T, Abi>&) noexcept;
+template <class T, class Abi> int find_first_set(const simd_mask<T, Abi>&);
+template <class T, class Abi> int find_last_set(const simd_mask<T, Abi>&);
+
+bool all_of(see below) noexcept;
+bool any_of(see below) noexcept;
+bool none_of(see below) noexcept;
+bool some_of(see below) noexcept;
+int popcount(see below) noexcept;
+int find_first_set(see below) noexcept;
+int find_last_set(see below) noexcept;
+
+// masked assignment [simd.whereexpr]
+template <class M, class T> class const_where_expression;
+template <class M, class T> class where_expression;
+
+// masked assignment [simd.mask.where]
+template <class T> struct nodeduce { using type = T; }; // exposition only
+
+template <class T> using nodeduce_t = typename nodeduce<T>::type; // exposition only
+
+template <class T, class Abi>
+where_expression<simd_mask<T, Abi>, simd<T, Abi>>
+where(const typename simd<T, Abi>::mask_type&, simd<T, Abi>&) noexcept;
+
+template <class T, class Abi>
+const_where_expression<simd_mask<T, Abi>, const simd<T, Abi>>
+where(const typename simd<T, Abi>::mask_type&, const simd<T, Abi>&) noexcept;
+
+template <class T, class Abi>
+where_expression<simd_mask<T, Abi>, simd_mask<T, Abi>>
+where(const nodeduce_t<simd_mask<T, Abi>>&, simd_mask<T, Abi>&) noexcept;
+
+template <class T, class Abi>
+const_where_expression<simd_mask<T, Abi>, const simd_mask<T, Abi>>
+where(const nodeduce_t<simd_mask<T, Abi>>&, const simd_mask<T, Abi>&) noexcept;
+
+template <class T> where_expression<bool, T> where(see below k, T& d) noexcept;
+
+template <class T>
+const_where_expression<bool, const T> where(see below k, const T& d) noexcept;
+
+// reductions [simd.reductions]
+template <class T, class Abi, class BinaryOperation = std::plus<>>
+T reduce(const simd<T, Abi>&, BinaryOperation = BinaryOperation());
+
+template <class M, class V, class BinaryOperation>
+typename V::value_type reduce(const const_where_expression<M, V>& x,
+typename V::value_type neutral_element, BinaryOperation binary_op);
+
+template <class M, class V>
+typename V::value_type reduce(const const_where_expression<M, V>& x, plus<> binary_op = plus<>());
+
+template <class M, class V>
+typename V::value_type reduce(const const_where_expression<M, V>& x, multiplies<> binary_op);
+
+template <class M, class V>
+typename V::value_type reduce(const const_where_expression<M, V>& x, bit_and<> binary_op);
+
+template <class M, class V>
+typename V::value_type reduce(const const_where_expression<M, V>& x, bit_or<> binary_op);
+
+template <class M, class V>
+typename V::value_type reduce(const const_where_expression<M, V>& x, bit_xor<> binary_op);
+
+template <class T, class Abi> T hmin(const simd<T, Abi>&);
+template <class M, class V> T hmin(const const_where_expression<M, V>&);
+template <class T, class Abi> T hmax(const simd<T, Abi>&);
+template <class M, class V> T hmax(const const_where_expression<M, V>&);
+
+// algorithms [simd.alg]
+template <class T, class Abi> simd<T, Abi> min(const simd<T, Abi>&, const simd<T, Abi>&) noexcept;
+
+template <class T, class Abi> simd<T, Abi> max(const simd<T, Abi>&, const simd<T, Abi>&) noexcept;
+
+template <class T, class Abi>
+std::pair<simd<T, Abi>, simd<T, Abi>> minmax(const simd<T, Abi>&, const simd<T, Abi>&) noexcept;
+
+template <class T, class Abi>
+simd<T, Abi> clamp(const simd<T, Abi>& v, const simd<T, Abi>& lo, const simd<T, Abi>& hi);
+
+// [simd.whereexpr]
+template <class M, class T>
+class const_where_expression {
+  const M& mask; // exposition only
+  T& data; // exposition only
+public:
+  const_where_expression(const const_where_expression&) = delete;
+  const_where_expression& operator=(const const_where_expression&) = delete;
+  remove_const_t<T> operator-() const &&;
+  template <class U, class Flags> void copy_to(U* mem, Flags f) const &&;
+};
+
+template <class M, class T>
+class where_expression : public const_where_expression<M, T> {
+public:
+  where_expression(const where_expression&) = delete;
+  where_expression& operator=(const where_expression&) = delete;
+  template <class U> void operator=(U&& x);
+  template <class U> void operator+=(U&& x);
+  template <class U> void operator-=(U&& x);
+  template <class U> void operator*=(U&& x);
+  template <class U> void operator/=(U&& x);
+  template <class U> void operator%=(U&& x);
+  template <class U> void operator&=(U&& x);
+  template <class U> void operator|=(U&& x);
+  template <class U> void operator^=(U&& x);
+  template <class U> void operator<<=(U&& x);
+  template <class U> void operator>>=(U&& x);
+  void operator++();
+  void operator++(int);
+  void operator--();
+  void operator--(int);
+  template <class U, class Flags> void copy_from(const U* mem, Flags);
+};
+
+// [simd.class]
+template <class T, class Abi> class simd {
+public:
+  using value_type = T;
+  using reference = see below;
+  using mask_type = simd_mask<T, Abi>;
+
+  using abi_type = Abi;
+  static constexpr size_t size() noexcept;
+  simd() = default;
+
+  // implicit type conversion constructor
+  template <class U> simd(const simd<U, simd_abi::fixed_size<size()>>&);
+
+  // implicit broadcast constructor (see below for constraints)
+  template <class U> simd(U&& value);
+
+  // generator constructor (see below for constraints)
+  template <class G> explicit simd(G&& gen);
+
+  // load constructor
+  template <class U, class Flags> simd(const U* mem, Flags f);
+
+  // loads [simd.load]
+  template <class U, class Flags> void copy_from(const U* mem, Flags f);
+
+  // stores [simd.store]
+  template <class U, class Flags> void copy_to(U* mem, Flags f) const;
+
+  // scalar access [simd.subscr]
+  reference operator[](size_t);
+  value_type operator[](size_t) const;
+
+  // unary operators [simd.unary]
+  simd& operator++();
+  simd operator++(int);
+  simd& operator--();
+  simd operator--(int);
+  mask_type operator!() const;
+  simd operator~() const; // see below
+  simd operator+() const;
+  simd operator-() const;
+
+  // binary operators [simd.binary]
+  friend simd operator+ (const simd&, const simd&);
+  friend simd operator- (const simd&, const simd&);
+  friend simd operator* (const simd&, const simd&);
+  friend simd operator/ (const simd&, const simd&);
+  friend simd operator% (const simd&, const simd&);
+  friend simd operator& (const simd&, const simd&);
+  friend simd operator| (const simd&, const simd&);
+  friend simd operator^ (const simd&, const simd&);
+  friend simd operator<<(const simd&, const simd&);
+  friend simd operator>>(const simd&, const simd&);
+  friend simd operator<<(const simd&, int);
+  friend simd operator>>(const simd&, int);
+
+  // compound assignment [simd.cassign]
+  friend simd& operator+= (simd&, const simd&);
+  friend simd& operator-= (simd&, const simd&);
+  friend simd& operator*= (simd&, const simd&);
+  friend simd& operator/= (simd&, const simd&);
+  friend simd& operator%= (simd&, const simd&);
+
+  friend simd& operator&= (simd&, const simd&);
+  friend simd& operator|= (simd&, const simd&);
+  friend simd& operator^= (simd&, const simd&);
+  friend simd& operator<<=(simd&, const simd&);
+  friend simd& operator>>=(simd&, const simd&);
+  friend simd& operator<<=(simd&, int);
+  friend simd& operator>>=(simd&, int);
+
+  // compares [simd.comparison]
+  friend mask_type operator==(const simd&, const simd&);
+  friend mask_type operator!=(const simd&, const simd&);
+  friend mask_type operator>=(const simd&, const simd&);
+  friend mask_type operator<=(const simd&, const simd&);
+  friend mask_type operator> (const simd&, const simd&);
+  friend mask_type operator< (const simd&, const simd&);
+};
+
+// [simd.math]
+template <class Abi> using scharv = simd<signed char, Abi>; // exposition only
+template <class Abi> using shortv = simd<short, Abi>; // exposition only
+template <class Abi> using intv = simd<int, Abi>; // exposition only
+template <class Abi> using longv = simd<long int, Abi>; // exposition only
+template <class Abi> using llongv = simd<long long int, Abi>; // exposition only
+template <class Abi> using floatv = simd<float, Abi>; // exposition only
+template <class Abi> using doublev = simd<double, Abi>; // exposition only
+template <class Abi> using ldoublev = simd<long double, Abi>; // exposition only
+template <class T, class V> using samesize = fixed_size_simd<T, V::size()>; // exposition only
+
+template <class Abi> floatv<Abi> acos(floatv<Abi> x);
+template <class Abi> doublev<Abi> acos(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> acos(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> asin(floatv<Abi> x);
+template <class Abi> doublev<Abi> asin(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> asin(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> atan(floatv<Abi> x);
+template <class Abi> doublev<Abi> atan(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> atan(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> atan2(floatv<Abi> y, floatv<Abi> x);
+template <class Abi> doublev<Abi> atan2(doublev<Abi> y, doublev<Abi> x);
+template <class Abi> ldoublev<Abi> atan2(ldoublev<Abi> y, ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> cos(floatv<Abi> x);
+template <class Abi> doublev<Abi> cos(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> cos(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> sin(floatv<Abi> x);
+template <class Abi> doublev<Abi> sin(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> sin(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> tan(floatv<Abi> x);
+template <class Abi> doublev<Abi> tan(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> tan(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> acosh(floatv<Abi> x);
+template <class Abi> doublev<Abi> acosh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> acosh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> asinh(floatv<Abi> x);
+template <class Abi> doublev<Abi> asinh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> asinh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> atanh(floatv<Abi> x);
+template <class Abi> doublev<Abi> atanh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> atanh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> cosh(floatv<Abi> x);
+template <class Abi> doublev<Abi> cosh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> cosh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> sinh(floatv<Abi> x);
+template <class Abi> doublev<Abi> sinh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> sinh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> tanh(floatv<Abi> x);
+template <class Abi> doublev<Abi> tanh(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> tanh(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> exp(floatv<Abi> x);
+template <class Abi> doublev<Abi> exp(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> exp(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> exp2(floatv<Abi> x);
+template <class Abi> doublev<Abi> exp2(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> exp2(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> expm1(floatv<Abi> x);
+template <class Abi> doublev<Abi> expm1(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> expm1(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> frexp(floatv<Abi> value, samesize<int, floatv<Abi>>* exp);
+template <class Abi> doublev<Abi> frexp(doublev<Abi> value, samesize<int, doublev<Abi>>* exp);
+template <class Abi> ldoublev<Abi> frexp(ldoublev<Abi> value, samesize<int, ldoublev<Abi>>* exp);
+
+template <class Abi> samesize<int, floatv<Abi>> ilogb(floatv<Abi> x);
+template <class Abi> samesize<int, doublev<Abi>> ilogb(doublev<Abi> x);
+template <class Abi> samesize<int, ldoublev<Abi>> ilogb(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> ldexp(floatv<Abi> x, samesize<int, floatv<Abi>> exp);
+template <class Abi> doublev<Abi> ldexp(doublev<Abi> x, samesize<int, doublev<Abi>> exp);
+template <class Abi> ldoublev<Abi> ldexp(ldoublev<Abi> x, samesize<int, ldoublev<Abi>> exp);
+
+template <class Abi> floatv<Abi> log(floatv<Abi> x);
+template <class Abi> doublev<Abi> log(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> log(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> log10(floatv<Abi> x);
+template <class Abi> doublev<Abi> log10(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> log10(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> log1p(floatv<Abi> x);
+template <class Abi> doublev<Abi> log1p(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> log1p(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> log2(floatv<Abi> x);
+template <class Abi> doublev<Abi> log2(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> log2(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> logb(floatv<Abi> x);
+template <class Abi> doublev<Abi> logb(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> logb(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> modf(floatv<Abi> value, floatv<Abi>* iptr);
+template <class Abi> doublev<Abi> modf(doublev<Abi> value, doublev<Abi>* iptr);
+template <class Abi> ldoublev<Abi> modf(ldoublev<Abi> value, ldoublev<Abi>* iptr);
+
+template <class Abi> floatv<Abi> scalbn(floatv<Abi> x, samesize<int, floatv<Abi>> n);
+template <class Abi> doublev<Abi> scalbn(doublev<Abi> x, samesize<int, doublev<Abi>> n);
+template <class Abi> ldoublev<Abi> scalbn(ldoublev<Abi> x, samesize<int, ldoublev<Abi>> n);
+template <class Abi> floatv<Abi> scalbln(floatv<Abi> x, samesize<long int, floatv<Abi>> n);
+template <class Abi> doublev<Abi> scalbln(doublev<Abi> x, samesize<long int, doublev<Abi>> n);
+template <class Abi> ldoublev<Abi> scalbln(ldoublev<Abi> x, samesize<long int, ldoublev<Abi>> n);
+
+template <class Abi> floatv<Abi> cbrt(floatv<Abi> x);
+template <class Abi> doublev<Abi> cbrt(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> cbrt(ldoublev<Abi> x);
+
+template <class Abi> scharv<Abi> abs(scharv<Abi> j);
+template <class Abi> shortv<Abi> abs(shortv<Abi> j);
+template <class Abi> intv<Abi> abs(intv<Abi> j);
+template <class Abi> longv<Abi> abs(longv<Abi> j);
+template <class Abi> llongv<Abi> abs(llongv<Abi> j);
+template <class Abi> floatv<Abi> abs(floatv<Abi> j);
+template <class Abi> doublev<Abi> abs(doublev<Abi> j);
+template <class Abi> ldoublev<Abi> abs(ldoublev<Abi> j);
+
+template <class Abi> floatv<Abi> hypot(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> hypot(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> hypot(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> floatv<Abi> hypot(floatv<Abi> x, floatv<Abi> y, floatv<Abi> z);
+template <class Abi> doublev<Abi> hypot(doublev<Abi> x, doublev<Abi> y, doublev<Abi> z);
+template <class Abi> ldoublev<Abi> hypot(ldoublev<Abi> x, ldoublev<Abi> y, ldoublev<Abi> z);
+
+template <class Abi> floatv<Abi> pow(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> pow(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> pow(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> sqrt(floatv<Abi> x);
+template <class Abi> doublev<Abi> sqrt(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> sqrt(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> erf(floatv<Abi> x);
+template <class Abi> doublev<Abi> erf(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> erf(ldoublev<Abi> x);
+template <class Abi> floatv<Abi> erfc(floatv<Abi> x);
+template <class Abi> doublev<Abi> erfc(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> erfc(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> lgamma(floatv<Abi> x);
+template <class Abi> doublev<Abi> lgamma(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> lgamma(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> tgamma(floatv<Abi> x);
+template <class Abi> doublev<Abi> tgamma(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> tgamma(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> ceil(floatv<Abi> x);
+template <class Abi> doublev<Abi> ceil(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> ceil(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> floor(floatv<Abi> x);
+template <class Abi> doublev<Abi> floor(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> floor(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> nearbyint(floatv<Abi> x);
+template <class Abi> doublev<Abi> nearbyint(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> nearbyint(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> rint(floatv<Abi> x);
+template <class Abi> doublev<Abi> rint(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> rint(ldoublev<Abi> x);
+
+template <class Abi> samesize<long int, floatv<Abi>> lrint(floatv<Abi> x);
+template <class Abi> samesize<long int, doublev<Abi>> lrint(doublev<Abi> x);
+template <class Abi> samesize<long int, ldoublev<Abi>> lrint(ldoublev<Abi> x);
+template <class Abi> samesize<long long int, floatv<Abi>> llrint(floatv<Abi> x);
+template <class Abi> samesize<long long int, doublev<Abi>> llrint(doublev<Abi> x);
+template <class Abi> samesize<long long int, ldoublev<Abi>> llrint(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> round(floatv<Abi> x);
+template <class Abi> doublev<Abi> round(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> round(ldoublev<Abi> x);
+template <class Abi> samesize<long int, floatv<Abi>> lround(floatv<Abi> x);
+template <class Abi> samesize<long int, doublev<Abi>> lround(doublev<Abi> x);
+template <class Abi> samesize<long int, ldoublev<Abi>> lround(ldoublev<Abi> x);
+template <class Abi> samesize<long long int, floatv<Abi>> llround(floatv<Abi> x);
+template <class Abi> samesize<long long int, doublev<Abi>> llround(doublev<Abi> x);
+template <class Abi> samesize<long long int, ldoublev<Abi>> llround(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> trunc(floatv<Abi> x);
+template <class Abi> doublev<Abi> trunc(doublev<Abi> x);
+template <class Abi> ldoublev<Abi> trunc(ldoublev<Abi> x);
+
+template <class Abi> floatv<Abi> fmod(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> fmod(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> fmod(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> remainder(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> remainder(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> remainder(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> remquo(floatv<Abi> x, floatv<Abi> y, samesize<int, floatv<Abi>>* quo);
+template <class Abi> doublev<Abi> remquo(doublev<Abi> x, doublev<Abi> y, samesize<int, doublev<Abi>>* quo);
+template <class Abi> ldoublev<Abi> remquo(ldoublev<Abi> x, ldoublev<Abi> y, samesize<int, ldoublev<Abi>>* quo);
+
+template <class Abi> floatv<Abi> copysign(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> copysign(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> copysign(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> doublev<Abi> nan(const char* tagp);
+template <class Abi> floatv<Abi> nanf(const char* tagp);
+template <class Abi> ldoublev<Abi> nanl(const char* tagp);
+
+template <class Abi> floatv<Abi> nextafter(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> nextafter(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> nextafter(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> nexttoward(floatv<Abi> x, ldoublev<Abi> y);
+template <class Abi> doublev<Abi> nexttoward(doublev<Abi> x, ldoublev<Abi> y);
+template <class Abi> ldoublev<Abi> nexttoward(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> fdim(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> fdim(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> fdim(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> fmax(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> fmax(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> fmax(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> fmin(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> doublev<Abi> fmin(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> ldoublev<Abi> fmin(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> floatv<Abi> fma(floatv<Abi> x, floatv<Abi> y, floatv<Abi> z);
+template <class Abi> doublev<Abi> fma(doublev<Abi> x, doublev<Abi> y, doublev<Abi> z);
+template <class Abi> ldoublev<Abi> fma(ldoublev<Abi> x, ldoublev<Abi> y, ldoublev<Abi> z);
+
+template <class Abi> samesize<int, floatv<Abi>> fpclassify(floatv<Abi> x);
+template <class Abi> samesize<int, doublev<Abi>> fpclassify(doublev<Abi> x);
+template <class Abi> samesize<int, ldoublev<Abi>> fpclassify(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> isfinite(floatv<Abi> x);
+template <class Abi> simd_mask<double, Abi> isfinite(doublev<Abi> x);
+template <class Abi> simd_mask<long double, Abi> isfinite(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> isinf(floatv<Abi> x);
+template <class Abi> simd_mask<double, Abi> isinf(doublev<Abi> x);
+template <class Abi> simd_mask<long double, Abi> isinf(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> isnan(floatv<Abi> x);
+template <class Abi> simd_mask<double, Abi> isnan(doublev<Abi> x);
+template <class Abi> simd_mask<long double, Abi> isnan(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> isnormal(floatv<Abi> x);
+template <class Abi> simd_mask<double, Abi> isnormal(doublev<Abi> x);
+template <class Abi> simd_mask<long double, Abi> isnormal(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> signbit(floatv<Abi> x);
+template <class Abi> simd_mask<double, Abi> signbit(doublev<Abi> x);
+template <class Abi> simd_mask<long double, Abi> signbit(ldoublev<Abi> x);
+
+template <class Abi> simd_mask<float, Abi> isgreater(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> isgreater(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> isgreater(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> simd_mask<float, Abi> isgreaterequal(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> isgreaterequal(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> isgreaterequal(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> simd_mask<float, Abi> isless(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> isless(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> isless(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> simd_mask<float, Abi> islessequal(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> islessequal(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> islessequal(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> simd_mask<float, Abi> islessgreater(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> islessgreater(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> islessgreater(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class Abi> simd_mask<float, Abi> isunordered(floatv<Abi> x, floatv<Abi> y);
+template <class Abi> simd_mask<double, Abi> isunordered(doublev<Abi> x, doublev<Abi> y);
+template <class Abi> simd_mask<long double, Abi> isunordered(ldoublev<Abi> x, ldoublev<Abi> y);
+
+template <class V> struct simd_div_t { V quot, rem; };
+template <class Abi> simd_div_t<scharv<Abi>> div(scharv<Abi> numer, scharv<Abi> denom);
+template <class Abi> simd_div_t<shortv<Abi>> div(shortv<Abi> numer, shortv<Abi> denom);
+template <class Abi> simd_div_t<intv<Abi>> div(intv<Abi> numer, intv<Abi> denom);
+template <class Abi> simd_div_t<longv<Abi>> div(longv<Abi> numer, longv<Abi> denom);
+template <class Abi> simd_div_t<llongv<Abi>> div(llongv<Abi> numer, llongv<Abi> denom);
+
+// [simd.mask.class]
+template <class T, class Abi>
+class simd_mask {
+public:
+  using value_type = bool;
+  using reference = see below;
+  using simd_type = simd<T, Abi>;
+  using abi_type = Abi;
+  static constexpr size_t size() noexcept;
+  simd_mask() = default;
+
+  // broadcast constructor
+  explicit simd_mask(value_type) noexcept;
+
+  // implicit type conversion constructor
+  template <class U> simd_mask(const simd_mask<U, simd_abi::fixed_size<size()>>&) noexcept;
+
+  // load constructor
+  template <class Flags> simd_mask(const value_type* mem, Flags);
+
+  // loads [simd.mask.copy]
+  template <class Flags> void copy_from(const value_type* mem, Flags);
+  template <class Flags> void copy_to(value_type* mem, Flags) const;
+
+  // scalar access [simd.mask.subscr]
+  reference operator[](size_t);
+  value_type operator[](size_t) const;
+
+  // unary operators [simd.mask.unary]
+  simd_mask operator!() const noexcept;
+
+  // simd_mask binary operators [simd.mask.binary]
+  friend simd_mask operator&&(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator||(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator& (const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator| (const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator^ (const simd_mask&, const simd_mask&) noexcept;
+
+  // simd_mask compound assignment [simd.mask.cassign]
+  friend simd_mask& operator&=(simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask& operator|=(simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask& operator^=(simd_mask&, const simd_mask&) noexcept;
+
+  // simd_mask compares [simd.mask.comparison]
+  friend simd_mask operator==(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator!=(const simd_mask&, const simd_mask&) noexcept;
+};
+
+} // parallelism_v2
+} // std::experimental
+
+*/
+
+#include <experimental/__config>
+#include <algorithm>
+#include <array>
+#include <cstddef>
+#include <functional>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD
+
+#if _LIBCPP_STD_VER >= 17
+
+enum class _StorageKind {
+  _Scalar,
+  _Array,
+  _VecExt,
+};
+
+template <_StorageKind __kind, int _Np>
+struct __simd_abi {};
+
+template <class _Tp, class _Abi>
+class __simd_storage {};
+
+template <class _Tp, int __num_element>
+class __simd_storage<_Tp, __simd_abi<_StorageKind::_Array, __num_element>> {
+  std::array<_Tp, __num_element> __storage_;
+
+  template <class, class>
+  friend struct simd;
+
+  template <class, class>
+  friend struct simd_mask;
+
+public:
+  _Tp __get(size_t __index) const noexcept { return __storage_[__index]; };
+  void __set(size_t __index, _Tp __val) noexcept {
+    __storage_[__index] = __val;
+  }
+};
+
+template <class _Tp>
+class __simd_storage<_Tp, __simd_abi<_StorageKind::_Scalar, 1>> {
+  _Tp __storage_;
+
+  template <class, class>
+  friend struct simd;
+
+  template <class, class>
+  friend struct simd_mask;
+
+public:
+  _Tp __get(size_t __index) const noexcept { return (&__storage_)[__index]; };
+  void __set(size_t __index, _Tp __val) noexcept {
+    (&__storage_)[__index] = __val;
+  }
+};
+
+#ifndef _LIBCPP_HAS_NO_VECTOR_EXTENSION
+
+constexpr size_t __floor_pow_of_2(size_t __val) {
+  return ((__val - 1) & __val) == 0 ? __val
+                                    : __floor_pow_of_2((__val - 1) & __val);
+}
+
+constexpr size_t __ceil_pow_of_2(size_t __val) {
+  return __val == 1 ? 1 : __floor_pow_of_2(__val - 1) << 1;
+}
+
+template <class _Tp, size_t __bytes>
+struct __vec_ext_traits {
+#if !defined(_LIBCPP_COMPILER_CLANG)
+  typedef _Tp type __attribute__((vector_size(__ceil_pow_of_2(__bytes))));
+#endif
+};
+
+#if defined(_LIBCPP_COMPILER_CLANG)
+#define _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, _NUM_ELEMENT)                        \
+  template <>                                                                  \
+  struct __vec_ext_traits<_TYPE, sizeof(_TYPE) * _NUM_ELEMENT> {               \
+    using type =                                                               \
+        _TYPE __attribute__((vector_size(sizeof(_TYPE) * _NUM_ELEMENT)));      \
+  }
+
+#define _LIBCPP_SPECIALIZE_VEC_EXT_32(_TYPE)                                   \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 1);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 2);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 3);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 4);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 5);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 6);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 7);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 8);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 9);                                        \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 10);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 11);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 12);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 13);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 14);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 15);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 16);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 17);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 18);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 19);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 20);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 21);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 22);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 23);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 24);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 25);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 26);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 27);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 28);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 29);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 30);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 31);                                       \
+  _LIBCPP_SPECIALIZE_VEC_EXT(_TYPE, 32);
+
+_LIBCPP_SPECIALIZE_VEC_EXT_32(char);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(char16_t);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(char32_t);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(wchar_t);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(signed char);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(signed short);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(signed int);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(signed long);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(signed long long);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(unsigned char);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(unsigned short);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(unsigned int);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(unsigned long);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(unsigned long long);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(float);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(double);
+_LIBCPP_SPECIALIZE_VEC_EXT_32(long double);
+
+#undef _LIBCPP_SPECIALIZE_VEC_EXT_32
+#undef _LIBCPP_SPECIALIZE_VEC_EXT
+#endif
+
+template <class _Tp, int __num_element>
+class __simd_storage<_Tp, __simd_abi<_StorageKind::_VecExt, __num_element>> {
+  using _StorageType =
+      typename __vec_ext_traits<_Tp, sizeof(_Tp) * __num_element>::type;
+
+  _StorageType __storage_;
+
+  template <class, class>
+  friend struct simd;
+
+  template <class, class>
+  friend struct simd_mask;
+
+public:
+  _Tp __get(size_t __index) const noexcept { return __storage_[__index]; };
+  void __set(size_t __index, _Tp __val) noexcept {
+    __storage_[__index] = __val;
+  }
+};
+
+#endif // _LIBCPP_HAS_NO_VECTOR_EXTENSION
+
+template <class _Vp, class _Tp, class _Abi>
+class __simd_reference {
+  static_assert(std::is_same<_Vp, _Tp>::value, "");
+
+  template <class, class>
+  friend struct simd;
+
+  template <class, class>
+  friend struct simd_mask;
+
+  __simd_storage<_Tp, _Abi>* __ptr_;
+  size_t __index_;
+
+  __simd_reference(__simd_storage<_Tp, _Abi>* __ptr, size_t __index)
+      : __ptr_(__ptr), __index_(__index) {}
+
+  __simd_reference(const __simd_reference&) = default;
+
+public:
+  __simd_reference() = delete;
+  __simd_reference& operator=(const __simd_reference&) = delete;
+
+  operator _Vp() const { return __ptr_->__get(__index_); }
+
+  __simd_reference operator=(_Vp __value) && {
+    __ptr_->__set(__index_, __value);
+    return *this;
+  }
+
+  __simd_reference operator++() && {
+    return std::move(*this) = __ptr_->__get(__index_) + 1;
+  }
+
+  _Vp operator++(int) && {
+    auto __val = __ptr_->__get(__index_);
+    __ptr_->__set(__index_, __val + 1);
+    return __val;
+  }
+
+  __simd_reference operator--() && {
+    return std::move(*this) = __ptr_->__get(__index_) - 1;
+  }
+
+  _Vp operator--(int) && {
+    auto __val = __ptr_->__get(__index_);
+    __ptr_->__set(__index_, __val - 1);
+    return __val;
+  }
+
+  __simd_reference operator+=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) + __value;
+  }
+
+  __simd_reference operator-=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) - __value;
+  }
+
+  __simd_reference operator*=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) * __value;
+  }
+
+  __simd_reference operator/=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) / __value;
+  }
+
+  __simd_reference operator%=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) % __value;
+  }
+
+  __simd_reference operator>>=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) >> __value;
+  }
+
+  __simd_reference operator<<=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) << __value;
+  }
+
+  __simd_reference operator&=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) & __value;
+  }
+
+  __simd_reference operator|=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) | __value;
+  }
+
+  __simd_reference operator^=(_Vp __value) && {
+    return std::move(*this) = __ptr_->__get(__index_) ^ __value;
+  }
+};
+
+template <class _To, class _From>
+constexpr decltype(_To{std::declval<_From>()}, true)
+__is_non_narrowing_convertible_impl(_From) {
+  return true;
+}
+
+template <class _To>
+constexpr bool __is_non_narrowing_convertible_impl(...) {
+  return false;
+}
+
+template <class _From, class _To>
+constexpr typename std::enable_if<std::is_arithmetic<_To>::value &&
+                                      std::is_arithmetic<_From>::value,
+                                  bool>::type
+__is_non_narrowing_arithmetic_convertible() {
+  return __is_non_narrowing_convertible_impl<_To>(_From{});
+}
+
+template <class _From, class _To>
+constexpr typename std::enable_if<!(std::is_arithmetic<_To>::value &&
+                                    std::is_arithmetic<_From>::value),
+                                  bool>::type
+__is_non_narrowing_arithmetic_convertible() {
+  return false;
+}
+
+template <class _Tp>
+constexpr _Tp __variadic_sum() {
+  return _Tp{};
+}
+
+template <class _Tp, class _Up, class... _Args>
+constexpr _Tp __variadic_sum(_Up __first, _Args... __rest) {
+  return static_cast<_Tp>(__first) + __variadic_sum<_Tp>(__rest...);
+}
+
+template <class _Tp>
+struct __nodeduce {
+  using type = _Tp;
+};
+
+template <class _Tp>
+constexpr bool __vectorizable() {
+  return std::is_arithmetic<_Tp>::value && !std::is_const<_Tp>::value &&
+         !std::is_volatile<_Tp>::value && !std::is_same<_Tp, bool>::value;
+}
+
+_LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD
+_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD_ABI
+
+using scalar = __simd_abi<_StorageKind::_Scalar, 1>;
+
+template <int _Np>
+using fixed_size = __simd_abi<_StorageKind::_Array, _Np>;
+
+template <class _Tp>
+_LIBCPP_INLINE_VAR constexpr size_t max_fixed_size = 32;
+
+template <class _Tp>
+using compatible = fixed_size<16 / sizeof(_Tp)>;
+
+#ifndef _LIBCPP_HAS_NO_VECTOR_EXTENSION
+template <class _Tp>
+using native = __simd_abi<_StorageKind::_VecExt,
+                          _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES / sizeof(_Tp)>;
+#else
+template <class _Tp>
+using native =
+    fixed_size<_Tp, _LIBCPP_NATIVE_SIMD_WIDTH_IN_BYTES / sizeof(_Tp)>;
+#endif // _LIBCPP_HAS_NO_VECTOR_EXTENSION
+
+_LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD_ABI
+_LIBCPP_BEGIN_NAMESPACE_EXPERIMENTAL_SIMD
+
+template <class _Tp, class _Abi = simd_abi::compatible<_Tp>>
+class simd;
+template <class _Tp, class _Abi = simd_abi::compatible<_Tp>>
+class simd_mask;
+
+struct element_aligned_tag {};
+struct vector_aligned_tag {};
+template <size_t>
+struct overaligned_tag {};
+_LIBCPP_INLINE_VAR constexpr element_aligned_tag element_aligned{};
+_LIBCPP_INLINE_VAR constexpr vector_aligned_tag vector_aligned{};
+template <size_t _Np>
+_LIBCPP_INLINE_VAR constexpr overaligned_tag<_Np> overaligned{};
+
+// traits [simd.traits]
+template <class _Tp>
+struct is_abi_tag : std::integral_constant<bool, false> {};
+
+template <_StorageKind __kind, int _Np>
+struct is_abi_tag<__simd_abi<__kind, _Np>>
+    : std::integral_constant<bool, true> {};
+
+template <class _Tp>
+struct is_simd : std::integral_constant<bool, false> {};
+
+template <class _Tp, class _Abi>
+struct is_simd<simd<_Tp, _Abi>> : std::integral_constant<bool, true> {};
+
+template <class _Tp>
+struct is_simd_mask : std::integral_constant<bool, false> {};
+
+template <class _Tp, class _Abi>
+struct is_simd_mask<simd_mask<_Tp, _Abi>> : std::integral_constant<bool, true> {
+};
+
+template <class _Tp>
+struct is_simd_flag_type : std::integral_constant<bool, false> {};
+
+template <>
+struct is_simd_flag_type<element_aligned_tag>
+    : std::integral_constant<bool, true> {};
+
+template <>
+struct is_simd_flag_type<vector_aligned_tag>
+    : std::integral_constant<bool, true> {};
+
+template <size_t _Align>
+struct is_simd_flag_type<overaligned_tag<_Align>>
+    : std::integral_constant<bool, true> {};
+
+template <class _Tp>
+_LIBCPP_INLINE_VAR constexpr bool is_abi_tag_v = is_abi_tag<_Tp>::value;
+template <class _Tp>
+_LIBCPP_INLINE_VAR constexpr bool is_simd_v = is_simd<_Tp>::value;
+template <class _Tp>
+_LIBCPP_INLINE_VAR constexpr bool is_simd_mask_v = is_simd_mask<_Tp>::value;
+template <class _Tp>
+_LIBCPP_INLINE_VAR constexpr bool is_simd_flag_type_v =
+    is_simd_flag_type<_Tp>::value;
+template <class _Tp, size_t _Np>
+struct abi_for_size {
+  using type = simd_abi::fixed_size<_Np>;
+};
+template <class _Tp, size_t _Np>
+using abi_for_size_t = typename abi_for_size<_Tp, _Np>::type;
+
+template <class _Tp, class _Abi = simd_abi::compatible<_Tp>>
+struct simd_size;
+
+template <class _Tp, _StorageKind __kind, int _Np>
+struct simd_size<_Tp, __simd_abi<__kind, _Np>>
+    : std::integral_constant<size_t, _Np> {
+  static_assert(
+      std::is_arithmetic<_Tp>::value &&
+          !std::is_same<typename std::remove_const<_Tp>::type, bool>::value,
+      "Element type should be vectorizable");
+};
+
+// TODO: implement it.
+template <class _Tp, class _Up = typename _Tp::value_type>
+struct memory_alignment;
+
+template <class _Tp, class _Abi = simd_abi::compatible<_Tp>>
+_LIBCPP_INLINE_VAR constexpr size_t simd_size_v = simd_size<_Tp, _Abi>::value;
+
+template <class _Tp, class _Up = typename _Tp::value_type>
+_LIBCPP_INLINE_VAR constexpr size_t memory_alignment_v =
+    memory_alignment<_Tp, _Up>::value;
+
+// class template simd [simd.class]
+template <class _Tp>
+using native_simd = simd<_Tp, simd_abi::native<_Tp>>;
+template <class _Tp, int _Np>
+using fixed_size_simd = simd<_Tp, simd_abi::fixed_size<_Np>>;
+
+// class template simd_mask [simd.mask.class]
+template <class _Tp>
+using native_simd_mask = simd_mask<_Tp, simd_abi::native<_Tp>>;
+
+template <class _Tp, int _Np>
+using fixed_size_simd_mask = simd_mask<_Tp, simd_abi::fixed_size<_Np>>;
+
+// casts [simd.casts]
+template <class _Tp>
+struct __static_simd_cast_traits {
+  template <class _Up, class _Abi>
+  static simd<_Tp, _Abi> __apply(const simd<_Up, _Abi>& __v);
+};
+
+template <class _Tp, class _NewAbi>
+struct __static_simd_cast_traits<simd<_Tp, _NewAbi>> {
+  template <class _Up, class _Abi>
+  static typename std::enable_if<simd<_Up, _Abi>::size() ==
+                                     simd<_Tp, _NewAbi>::size(),
+                                 simd<_Tp, _NewAbi>>::type
+  __apply(const simd<_Up, _Abi>& __v);
+};
+
+template <class _Tp>
+struct __simd_cast_traits {
+  template <class _Up, class _Abi>
+  static typename std::enable_if<
+      __is_non_narrowing_arithmetic_convertible<_Up, _Tp>(),
+      simd<_Tp, _Abi>>::type
+  __apply(const simd<_Up, _Abi>& __v);
+};
+
+template <class _Tp, class _NewAbi>
+struct __simd_cast_traits<simd<_Tp, _NewAbi>> {
+  template <class _Up, class _Abi>
+  static typename std::enable_if<
+      __is_non_narrowing_arithmetic_convertible<_Up, _Tp>() &&
+          simd<_Up, _Abi>::size() == simd<_Tp, _NewAbi>::size(),
+      simd<_Tp, _NewAbi>>::type
+  __apply(const simd<_Up, _Abi>& __v);
+};
+
+template <class _Tp, class _Up, class _Abi>
+auto simd_cast(const simd<_Up, _Abi>& __v)
+    -> decltype(__simd_cast_traits<_Tp>::__apply(__v)) {
+  return __simd_cast_traits<_Tp>::__apply(__v);
+}
+
+template <class _Tp, class _Up, class _Abi>
+auto static_simd_cast(const simd<_Up, _Abi>& __v)
+    -> decltype(__static_simd_cast_traits<_Tp>::__apply(__v)) {
+  return __static_simd_cast_traits<_Tp>::__apply(__v);
+}
+
+template <class _Tp, class _Abi>
+fixed_size_simd<_Tp, simd_size<_Tp, _Abi>::value>
+to_fixed_size(const simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+fixed_size_simd_mask<_Tp, simd_size<_Tp, _Abi>::value>
+to_fixed_size(const simd_mask<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, size_t _Np>
+native_simd<_Tp> to_native(const fixed_size_simd<_Tp, _Np>&) noexcept;
+
+template <class _Tp, size_t _Np>
+native_simd_mask<_Tp> to_native(const fixed_size_simd_mask<_Tp, _Np>&) noexcept;
+
+template <class _Tp, size_t _Np>
+simd<_Tp> to_compatible(const fixed_size_simd<_Tp, _Np>&) noexcept;
+
+template <class _Tp, size_t _Np>
+simd_mask<_Tp> to_compatible(const fixed_size_simd_mask<_Tp, _Np>&) noexcept;
+
+template <size_t... __sizes, class _Tp, class _Abi>
+tuple<simd<_Tp, abi_for_size_t<_Tp, __sizes>>...> split(const simd<_Tp, _Abi>&);
+
+template <size_t... __sizes, class _Tp, class _Abi>
+tuple<simd_mask<_Tp, abi_for_size_t<_Tp, __sizes>>...>
+split(const simd_mask<_Tp, _Abi>&);
+
+template <class _SimdType, class _Abi>
+array<_SimdType, simd_size<typename _SimdType::value_type, _Abi>::value /
+                     _SimdType::size()>
+split(const simd<typename _SimdType::value_type, _Abi>&);
+
+template <class _SimdType, class _Abi>
+array<_SimdType, simd_size<typename _SimdType::value_type, _Abi>::value /
+                     _SimdType::size()>
+split(const simd_mask<typename _SimdType::value_type, _Abi>&);
+
+template <class _Tp, class... _Abis>
+simd<_Tp, abi_for_size_t<_Tp, __variadic_sum(simd_size<_Tp, _Abis>::value...)>>
+concat(const simd<_Tp, _Abis>&...);
+
+template <class _Tp, class... _Abis>
+simd_mask<_Tp,
+          abi_for_size_t<_Tp, __variadic_sum(simd_size<_Tp, _Abis>::value...)>>
+concat(const simd_mask<_Tp, _Abis>&...);
+
+// reductions [simd.mask.reductions]
+template <class _Tp, class _Abi>
+bool all_of(const simd_mask<_Tp, _Abi>&) noexcept;
+template <class _Tp, class _Abi>
+bool any_of(const simd_mask<_Tp, _Abi>&) noexcept;
+template <class _Tp, class _Abi>
+bool none_of(const simd_mask<_Tp, _Abi>&) noexcept;
+template <class _Tp, class _Abi>
+bool some_of(const simd_mask<_Tp, _Abi>&) noexcept;
+template <class _Tp, class _Abi>
+int popcount(const simd_mask<_Tp, _Abi>&) noexcept;
+template <class _Tp, class _Abi>
+int find_first_set(const simd_mask<_Tp, _Abi>&);
+template <class _Tp, class _Abi>
+int find_last_set(const simd_mask<_Tp, _Abi>&);
+bool all_of(bool) noexcept;
+bool any_of(bool) noexcept;
+bool none_of(bool) noexcept;
+bool some_of(bool) noexcept;
+int popcount(bool) noexcept;
+int find_first_set(bool) noexcept;
+int find_last_set(bool) noexcept;
+
+// masked assignment [simd.whereexpr]
+template <class _MaskType, class _Tp>
+class const_where_expression;
+template <class _MaskType, class _Tp>
+class where_expression;
+
+// masked assignment [simd.mask.where]
+template <class _Tp, class _Abi>
+where_expression<simd_mask<_Tp, _Abi>, simd<_Tp, _Abi>>
+where(const typename simd<_Tp, _Abi>::mask_type&, simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+const_where_expression<simd_mask<_Tp, _Abi>, const simd<_Tp, _Abi>>
+where(const typename simd<_Tp, _Abi>::mask_type&,
+      const simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+where_expression<simd_mask<_Tp, _Abi>, simd_mask<_Tp, _Abi>>
+where(const typename __nodeduce<simd_mask<_Tp, _Abi>>::type&,
+      simd_mask<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+const_where_expression<simd_mask<_Tp, _Abi>, const simd_mask<_Tp, _Abi>>
+where(const typename __nodeduce<simd_mask<_Tp, _Abi>>::type&,
+      const simd_mask<_Tp, _Abi>&) noexcept;
+
+template <class _Tp>
+where_expression<bool, _Tp> where(bool, _Tp&) noexcept;
+
+template <class _Tp>
+const_where_expression<bool, const _Tp> where(bool, const _Tp&) noexcept;
+
+// reductions [simd.reductions]
+template <class _Tp, class _Abi, class _BinaryOp = std::plus<_Tp>>
+_Tp reduce(const simd<_Tp, _Abi>&, _BinaryOp = _BinaryOp());
+
+template <class _MaskType, class _SimdType, class _BinaryOp>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       typename _SimdType::value_type neutral_element, _BinaryOp binary_op);
+
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       plus<typename _SimdType::value_type> binary_op = {});
+
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       multiplies<typename _SimdType::value_type> binary_op);
+
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       bit_and<typename _SimdType::value_type> binary_op);
+
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       bit_or<typename _SimdType::value_type> binary_op);
+
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+reduce(const const_where_expression<_MaskType, _SimdType>&,
+       bit_xor<typename _SimdType::value_type> binary_op);
+
+template <class _Tp, class _Abi>
+_Tp hmin(const simd<_Tp, _Abi>&);
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+hmin(const const_where_expression<_MaskType, _SimdType>&);
+template <class _Tp, class _Abi>
+_Tp hmax(const simd<_Tp, _Abi>&);
+template <class _MaskType, class _SimdType>
+typename _SimdType::value_type
+hmax(const const_where_expression<_MaskType, _SimdType>&);
+
+// algorithms [simd.alg]
+template <class _Tp, class _Abi>
+simd<_Tp, _Abi> min(const simd<_Tp, _Abi>&, const simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+simd<_Tp, _Abi> max(const simd<_Tp, _Abi>&, const simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+std::pair<simd<_Tp, _Abi>, simd<_Tp, _Abi>>
+minmax(const simd<_Tp, _Abi>&, const simd<_Tp, _Abi>&) noexcept;
+
+template <class _Tp, class _Abi>
+simd<_Tp, _Abi> clamp(const simd<_Tp, _Abi>&, const simd<_Tp, _Abi>&,
+                      const simd<_Tp, _Abi>&);
+
+// [simd.whereexpr]
+// TODO implement where expressions.
+template <class _MaskType, class _Tp>
+class const_where_expression {
+public:
+  const_where_expression(const const_where_expression&) = delete;
+  const_where_expression& operator=(const const_where_expression&) = delete;
+  typename remove_const<_Tp>::type operator-() const&&;
+  template <class _Up, class _Flags>
+  void copy_to(_Up*, _Flags) const&&;
+};
+
+template <class _MaskType, class _Tp>
+class where_expression : public const_where_expression<_MaskType, _Tp> {
+public:
+  where_expression(const where_expression&) = delete;
+  where_expression& operator=(const where_expression&) = delete;
+  template <class _Up>
+  void operator=(_Up&&);
+  template <class _Up>
+  void operator+=(_Up&&);
+  template <class _Up>
+  void operator-=(_Up&&);
+  template <class _Up>
+  void operator*=(_Up&&);
+  template <class _Up>
+  void operator/=(_Up&&);
+  template <class _Up>
+  void operator%=(_Up&&);
+  template <class _Up>
+  void operator&=(_Up&&);
+  template <class _Up>
+  void operator|=(_Up&&);
+  template <class _Up>
+  void operator^=(_Up&&);
+  template <class _Up>
+  void operator<<=(_Up&&);
+  template <class _Up>
+  void operator>>=(_Up&&);
+  void operator++();
+  void operator++(int);
+  void operator--();
+  void operator--(int);
+  template <class _Up, class _Flags>
+  void copy_from(const _Up*, _Flags);
+};
+
+// [simd.class]
+// TODO: implement simd
+template <class _Tp, class _Abi>
+class simd {
+public:
+  using value_type = _Tp;
+  using reference = __simd_reference<_Tp, _Tp, _Abi>;
+  using mask_type = simd_mask<_Tp, _Abi>;
+  using abi_type = _Abi;
+
+  simd() = default;
+  simd(const simd&) = default;
+  simd& operator=(const simd&) = default;
+
+  static constexpr size_t size() noexcept {
+    return simd_size<_Tp, _Abi>::value;
+  }
+
+private:
+  __simd_storage<_Tp, _Abi> __s_;
+
+  template <class _Up>
+  static constexpr bool __can_broadcast() {
+    return (std::is_arithmetic<_Up>::value &&
+            __is_non_narrowing_arithmetic_convertible<_Up, _Tp>()) ||
+           (!std::is_arithmetic<_Up>::value &&
+            std::is_convertible<_Up, _Tp>::value) ||
+           std::is_same<typename std::remove_const<_Up>::type, int>::value ||
+           (std::is_same<typename std::remove_const<_Up>::type,
+                         unsigned int>::value &&
+            std::is_unsigned<_Tp>::value);
+  }
+
+  template <class _Generator, size_t... __indicies>
+  static constexpr decltype(
+      std::forward_as_tuple(std::declval<_Generator>()(
+          std::integral_constant<size_t, __indicies>())...),
+      bool())
+  __can_generate(std::index_sequence<__indicies...>) {
+    return !__variadic_sum<bool>(
+        !__can_broadcast<decltype(std::declval<_Generator>()(
+            std::integral_constant<size_t, __indicies>()))>()...);
+  }
+
+  template <class _Generator>
+  static bool __can_generate(...) {
+    return false;
+  }
+
+  template <class _Generator, size_t... __indicies>
+  void __generator_init(_Generator&& __g, std::index_sequence<__indicies...>) {
+    int __not_used[]{((*this)[__indicies] =
+                          __g(std::integral_constant<size_t, __indicies>()),
+                      0)...};
+    (void)__not_used;
+  }
+
+public:
+  // implicit type conversion constructor
+  template <class _Up,
+            class = typename std::enable_if<
+                std::is_same<_Abi, simd_abi::fixed_size<size()>>::value &&
+                __is_non_narrowing_arithmetic_convertible<_Up, _Tp>()>::type>
+  simd(const simd<_Up, simd_abi::fixed_size<size()>>& __v) {
+    for (size_t __i = 0; __i < size(); __i++) {
+      (*this)[__i] = static_cast<_Tp>(__v[__i]);
+    }
+  }
+
+  // implicit broadcast constructor
+  template <class _Up,
+            class = typename std::enable_if<__can_broadcast<_Up>()>::type>
+  simd(_Up&& __rv) {
+    auto __v = static_cast<_Tp>(__rv);
+    for (size_t __i = 0; __i < size(); __i++) {
+      (*this)[__i] = __v;
+    }
+  }
+
+  // generator constructor
+  template <class _Generator,
+            int = typename std::enable_if<
+                __can_generate<_Generator>(std::make_index_sequence<size()>()),
+                int>::type()>
+  explicit simd(_Generator&& __g) {
+    __generator_init(std::forward<_Generator>(__g),
+                     std::make_index_sequence<size()>());
+  }
+
+  // load constructor
+  template <
+      class _Up, class _Flags,
+      class = typename std::enable_if<__vectorizable<_Up>()>::type,
+      class = typename std::enable_if<is_simd_flag_type<_Flags>::value>::type>
+  simd(const _Up* __buffer, _Flags) {
+    // TODO: optimize for overaligned flags
+    for (size_t __i = 0; __i < size(); __i++) {
+      (*this)[__i] = static_cast<_Tp>(__buffer[__i]);
+    }
+  }
+
+  // loads [simd.load]
+  template <class _Up, class _Flags>
+  typename std::enable_if<__vectorizable<_Up>() &&
+                          is_simd_flag_type<_Flags>::value>::type
+  copy_from(const _Up* __buffer, _Flags) {
+    *this = simd(__buffer, _Flags());
+  }
+
+  // stores [simd.store]
+  template <class _Up, class _Flags>
+  typename std::enable_if<__vectorizable<_Up>() &&
+                          is_simd_flag_type<_Flags>::value>::type
+  copy_to(_Up* __buffer, _Flags) const {
+    // TODO: optimize for overaligned flags
+    for (size_t __i = 0; __i < size(); __i++) {
+      __buffer[__i] = static_cast<_Up>((*this)[__i]);
+    }
+  }
+
+  // scalar access [simd.subscr]
+  reference operator[](size_t __i) { return reference(&__s_, __i); }
+
+  value_type operator[](size_t __i) const { return __s_.__get(__i); }
+
+  // unary operators [simd.unary]
+  simd& operator++();
+  simd operator++(int);
+  simd& operator--();
+  simd operator--(int);
+  mask_type operator!() const;
+  simd operator~() const;
+  simd operator+() const;
+  simd operator-() const;
+
+  // binary operators [simd.binary]
+  friend simd operator+(const simd&, const simd&);
+  friend simd operator-(const simd&, const simd&);
+  friend simd operator*(const simd&, const simd&);
+  friend simd operator/(const simd&, const simd&);
+  friend simd operator%(const simd&, const simd&);
+  friend simd operator&(const simd&, const simd&);
+  friend simd operator|(const simd&, const simd&);
+  friend simd operator^(const simd&, const simd&);
+  friend simd operator<<(const simd&, const simd&);
+  friend simd operator>>(const simd&, const simd&);
+  friend simd operator<<(const simd&, int);
+  friend simd operator>>(const simd&, int);
+
+  // compound assignment [simd.cassign]
+  friend simd& operator+=(simd&, const simd&);
+  friend simd& operator-=(simd&, const simd&);
+  friend simd& operator*=(simd&, const simd&);
+  friend simd& operator/=(simd&, const simd&);
+  friend simd& operator%=(simd&, const simd&);
+
+  friend simd& operator&=(simd&, const simd&);
+  friend simd& operator|=(simd&, const simd&);
+  friend simd& operator^=(simd&, const simd&);
+  friend simd& operator<<=(simd&, const simd&);
+  friend simd& operator>>=(simd&, const simd&);
+  friend simd& operator<<=(simd&, int);
+  friend simd& operator>>=(simd&, int);
+
+  // compares [simd.comparison]
+  friend mask_type operator==(const simd&, const simd&);
+  friend mask_type operator!=(const simd&, const simd&);
+  friend mask_type operator>=(const simd&, const simd&);
+  friend mask_type operator<=(const simd&, const simd&);
+  friend mask_type operator>(const simd&, const simd&);
+  friend mask_type operator<(const simd&, const simd&);
+};
+
+// [simd.mask.class]
+template <class _Tp, class _Abi>
+// TODO: implement simd_mask
+class simd_mask {
+public:
+  using value_type = bool;
+  // TODO: this is strawman implementation. Turn it into a proxy type.
+  using reference = bool&;
+  using simd_type = simd<_Tp, _Abi>;
+  using abi_type = _Abi;
+  static constexpr size_t size() noexcept;
+  simd_mask() = default;
+
+  // broadcast constructor
+  explicit simd_mask(value_type) noexcept;
+
+  // implicit type conversion constructor
+  template <class _Up>
+  simd_mask(const simd_mask<_Up, simd_abi::fixed_size<size()>>&) noexcept;
+
+  // load constructor
+  template <class _Flags>
+  simd_mask(const value_type*, _Flags);
+
+  // loads [simd.mask.copy]
+  template <class _Flags>
+  void copy_from(const value_type*, _Flags);
+  template <class _Flags>
+  void copy_to(value_type*, _Flags) const;
+
+  // scalar access [simd.mask.subscr]
+  reference operator[](size_t);
+  value_type operator[](size_t) const;
+
+  // unary operators [simd.mask.unary]
+  simd_mask operator!() const noexcept;
+
+  // simd_mask binary operators [simd.mask.binary]
+  friend simd_mask operator&&(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator||(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator&(const simd_mask&, const simd_mask&)noexcept;
+  friend simd_mask operator|(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator^(const simd_mask&, const simd_mask&) noexcept;
+
+  // simd_mask compound assignment [simd.mask.cassign]
+  friend simd_mask& operator&=(simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask& operator|=(simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask& operator^=(simd_mask&, const simd_mask&) noexcept;
+
+  // simd_mask compares [simd.mask.comparison]
+  friend simd_mask operator==(const simd_mask&, const simd_mask&) noexcept;
+  friend simd_mask operator!=(const simd_mask&, const simd_mask&) noexcept;
+};
+
+#endif // _LIBCPP_STD_VER >= 17
+
+_LIBCPP_END_NAMESPACE_EXPERIMENTAL_SIMD
+
+#endif /* _LIBCPP_EXPERIMENTAL_SIMD */
diff --git a/linux-x64/clang/include/c++/v1/filesystem b/linux-x64/clang/include/c++/v1/filesystem
new file mode 100644
index 0000000..aa1d718
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/filesystem
@@ -0,0 +1,2682 @@
+// -*- C++ -*-
+//===--------------------------- filesystem -------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+#ifndef _LIBCPP_FILESYSTEM
+#define _LIBCPP_FILESYSTEM
+/*
+    filesystem synopsis
+
+    namespace std { namespace filesystem {
+
+    class path;
+
+    void swap(path& lhs, path& rhs) noexcept;
+    size_t hash_value(const path& p) noexcept;
+
+    bool operator==(const path& lhs, const path& rhs) noexcept;
+    bool operator!=(const path& lhs, const path& rhs) noexcept;
+    bool operator< (const path& lhs, const path& rhs) noexcept;
+    bool operator<=(const path& lhs, const path& rhs) noexcept;
+    bool operator> (const path& lhs, const path& rhs) noexcept;
+    bool operator>=(const path& lhs, const path& rhs) noexcept;
+
+    path operator/ (const path& lhs, const path& rhs);
+
+    // fs.path.io operators are friends of path.
+    template <class charT, class traits>
+    friend basic_ostream<charT, traits>&
+    operator<<(basic_ostream<charT, traits>& os, const path& p);
+
+    template <class charT, class traits>
+    friend basic_istream<charT, traits>&
+    operator>>(basic_istream<charT, traits>& is, path& p);
+
+    template <class Source>
+      path u8path(const Source& source);
+    template <class InputIterator>
+      path u8path(InputIterator first, InputIterator last);
+
+    class filesystem_error;
+    class directory_entry;
+
+    class directory_iterator;
+
+    // enable directory_iterator range-based for statements
+    directory_iterator begin(directory_iterator iter) noexcept;
+    directory_iterator end(const directory_iterator&) noexcept;
+
+    class recursive_directory_iterator;
+
+    // enable recursive_directory_iterator range-based for statements
+    recursive_directory_iterator begin(recursive_directory_iterator iter) noexcept;
+    recursive_directory_iterator end(const recursive_directory_iterator&) noexcept;
+
+    class file_status;
+
+    struct space_info
+    {
+      uintmax_t capacity;
+      uintmax_t free;
+      uintmax_t available;
+    };
+
+    enum class file_type;
+    enum class perms;
+    enum class perm_options;
+    enum class copy_options;
+    enum class directory_options;
+
+    typedef chrono::time_point<trivial-clock>  file_time_type;
+
+    // operational functions
+
+    path absolute(const path& p);
+    path absolute(const path& p, error_code &ec);
+
+    path canonical(const path& p);
+    path canonical(const path& p, error_code& ec);
+
+    void copy(const path& from, const path& to);
+    void copy(const path& from, const path& to, error_code& ec);
+    void copy(const path& from, const path& to, copy_options options);
+    void copy(const path& from, const path& to, copy_options options,
+                   error_code& ec);
+
+    bool copy_file(const path& from, const path& to);
+    bool copy_file(const path& from, const path& to, error_code& ec);
+    bool copy_file(const path& from, const path& to, copy_options option);
+    bool copy_file(const path& from, const path& to, copy_options option,
+                           error_code& ec);
+
+    void copy_symlink(const path& existing_symlink, const path& new_symlink);
+    void copy_symlink(const path& existing_symlink, const path& new_symlink,
+                              error_code& ec) noexcept;
+
+    bool create_directories(const path& p);
+    bool create_directories(const path& p, error_code& ec);
+
+    bool create_directory(const path& p);
+    bool create_directory(const path& p, error_code& ec) noexcept;
+
+    bool create_directory(const path& p, const path& attributes);
+    bool create_directory(const path& p, const path& attributes,
+                                  error_code& ec) noexcept;
+
+    void create_directory_symlink(const path& to, const path& new_symlink);
+    void create_directory_symlink(const path& to, const path& new_symlink,
+                                          error_code& ec) noexcept;
+
+    void create_hard_link(const path& to, const path& new_hard_link);
+    void create_hard_link(const path& to, const path& new_hard_link,
+                                  error_code& ec) noexcept;
+
+    void create_symlink(const path& to, const path& new_symlink);
+    void create_symlink(const path& to, const path& new_symlink,
+                                error_code& ec) noexcept;
+
+    path current_path();
+    path current_path(error_code& ec);
+    void current_path(const path& p);
+    void current_path(const path& p, error_code& ec) noexcept;
+
+    bool exists(file_status s) noexcept;
+    bool exists(const path& p);
+    bool exists(const path& p, error_code& ec) noexcept;
+
+    bool equivalent(const path& p1, const path& p2);
+    bool equivalent(const path& p1, const path& p2, error_code& ec) noexcept;
+
+    uintmax_t    file_size(const path& p);
+    uintmax_t    file_size(const path& p, error_code& ec) noexcept;
+
+    uintmax_t    hard_link_count(const path& p);
+    uintmax_t    hard_link_count(const path& p, error_code& ec) noexcept;
+
+    bool is_block_file(file_status s) noexcept;
+    bool is_block_file(const path& p);
+    bool is_block_file(const path& p, error_code& ec) noexcept;
+
+    bool is_character_file(file_status s) noexcept;
+    bool is_character_file(const path& p);
+    bool is_character_file(const path& p, error_code& ec) noexcept;
+
+    bool is_directory(file_status s) noexcept;
+    bool is_directory(const path& p);
+    bool is_directory(const path& p, error_code& ec) noexcept;
+
+    bool is_empty(const path& p);
+    bool is_empty(const path& p, error_code& ec) noexcept;
+
+    bool is_fifo(file_status s) noexcept;
+    bool is_fifo(const path& p);
+    bool is_fifo(const path& p, error_code& ec) noexcept;
+
+    bool is_other(file_status s) noexcept;
+    bool is_other(const path& p);
+    bool is_other(const path& p, error_code& ec) noexcept;
+
+    bool is_regular_file(file_status s) noexcept;
+    bool is_regular_file(const path& p);
+    bool is_regular_file(const path& p, error_code& ec) noexcept;
+
+    bool is_socket(file_status s) noexcept;
+    bool is_socket(const path& p);
+    bool is_socket(const path& p, error_code& ec) noexcept;
+
+    bool is_symlink(file_status s) noexcept;
+    bool is_symlink(const path& p);
+    bool is_symlink(const path& p, error_code& ec) noexcept;
+
+    file_time_type  last_write_time(const path& p);
+    file_time_type  last_write_time(const path& p, error_code& ec) noexcept;
+    void last_write_time(const path& p, file_time_type new_time);
+    void last_write_time(const path& p, file_time_type new_time,
+                                 error_code& ec) noexcept;
+
+    void permissions(const path& p, perms prms,
+                     perm_options opts=perm_options::replace);
+    void permissions(const path& p, perms prms, error_code& ec) noexcept;
+    void permissions(const path& p, perms prms, perm_options opts,
+                     error_code& ec);
+
+    path proximate(const path& p, error_code& ec);
+    path proximate(const path& p, const path& base = current_path());
+    path proximate(const path& p, const path& base, error_code &ec);
+
+    path read_symlink(const path& p);
+    path read_symlink(const path& p, error_code& ec);
+
+    path relative(const path& p, error_code& ec);
+    path relative(const path& p, const path& base=current_path());
+    path relative(const path& p, const path& base, error_code& ec);
+
+    bool remove(const path& p);
+    bool remove(const path& p, error_code& ec) noexcept;
+
+    uintmax_t    remove_all(const path& p);
+    uintmax_t    remove_all(const path& p, error_code& ec);
+
+    void rename(const path& from, const path& to);
+    void rename(const path& from, const path& to, error_code& ec) noexcept;
+
+    void resize_file(const path& p, uintmax_t size);
+    void resize_file(const path& p, uintmax_t size, error_code& ec) noexcept;
+
+    space_info   space(const path& p);
+    space_info   space(const path& p, error_code& ec) noexcept;
+
+    file_status  status(const path& p);
+    file_status  status(const path& p, error_code& ec) noexcept;
+
+    bool status_known(file_status s) noexcept;
+
+    file_status  symlink_status(const path& p);
+    file_status  symlink_status(const path& p, error_code& ec) noexcept;
+
+    path temp_directory_path();
+    path temp_directory_path(error_code& ec);
+
+    path weakly_canonical(path const& p);
+    path weakly_canonical(path const& p, error_code& ec);
+
+
+} }  // namespaces std::filesystem
+
+*/
+
+#include <__config>
+#include <cstddef>
+#include <cstdlib>
+#include <chrono>
+#include <iterator>
+#include <iosfwd>
+#include <locale>
+#include <memory>
+#include <stack>
+#include <string>
+#include <system_error>
+#include <utility>
+#include <iomanip> // for quoted
+#include <string_view>
+
+#include <__debug>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+#ifndef _LIBCPP_CXX03_LANG
+
+#if _LIBCPP_STD_VER >= 17
+#define __cpp_lib_filesystem 201703
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM
+
+struct _FilesystemClock {
+#if !defined(_LIBCPP_HAS_NO_INT128)
+  typedef __int128_t rep;
+  typedef nano period;
+#else
+  typedef long long rep;
+  typedef nano period;
+#endif
+
+  typedef chrono::duration<rep, period> duration;
+  typedef chrono::time_point<_FilesystemClock> time_point;
+
+  static _LIBCPP_CONSTEXPR_AFTER_CXX11 const bool is_steady = false;
+
+  _LIBCPP_FUNC_VIS static time_point now() noexcept;
+
+  _LIBCPP_INLINE_VISIBILITY
+  static time_t to_time_t(const time_point& __t) noexcept {
+    typedef chrono::duration<rep> __secs;
+    return time_t(
+        chrono::duration_cast<__secs>(__t.time_since_epoch()).count());
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  static time_point from_time_t(time_t __t) noexcept {
+    typedef chrono::duration<rep> __secs;
+    return time_point(__secs(__t));
+  }
+};
+
+typedef chrono::time_point<_FilesystemClock> file_time_type;
+
+struct _LIBCPP_TYPE_VIS space_info {
+  uintmax_t capacity;
+  uintmax_t free;
+  uintmax_t available;
+};
+
+enum class _LIBCPP_ENUM_VIS file_type : signed char {
+  none = 0,
+  not_found = -1,
+  regular = 1,
+  directory = 2,
+  symlink = 3,
+  block = 4,
+  character = 5,
+  fifo = 6,
+  socket = 7,
+  unknown = 8
+};
+
+enum class _LIBCPP_ENUM_VIS perms : unsigned {
+  none = 0,
+
+  owner_read = 0400,
+  owner_write = 0200,
+  owner_exec = 0100,
+  owner_all = 0700,
+
+  group_read = 040,
+  group_write = 020,
+  group_exec = 010,
+  group_all = 070,
+
+  others_read = 04,
+  others_write = 02,
+  others_exec = 01,
+  others_all = 07,
+
+  all = 0777,
+
+  set_uid = 04000,
+  set_gid = 02000,
+  sticky_bit = 01000,
+  mask = 07777,
+  unknown = 0xFFFF,
+};
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perms operator&(perms _LHS, perms _RHS) {
+  return static_cast<perms>(static_cast<unsigned>(_LHS) &
+                            static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perms operator|(perms _LHS, perms _RHS) {
+  return static_cast<perms>(static_cast<unsigned>(_LHS) |
+                            static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perms operator^(perms _LHS, perms _RHS) {
+  return static_cast<perms>(static_cast<unsigned>(_LHS) ^
+                            static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perms operator~(perms _LHS) {
+  return static_cast<perms>(~static_cast<unsigned>(_LHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline perms& operator&=(perms& _LHS, perms _RHS) { return _LHS = _LHS & _RHS; }
+
+_LIBCPP_INLINE_VISIBILITY
+inline perms& operator|=(perms& _LHS, perms _RHS) { return _LHS = _LHS | _RHS; }
+
+_LIBCPP_INLINE_VISIBILITY
+inline perms& operator^=(perms& _LHS, perms _RHS) { return _LHS = _LHS ^ _RHS; }
+
+enum class _LIBCPP_ENUM_VIS perm_options : unsigned char {
+  replace = 1,
+  add = 2,
+  remove = 4,
+  nofollow = 8
+};
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perm_options operator&(perm_options _LHS, perm_options _RHS) {
+  return static_cast<perm_options>(static_cast<unsigned>(_LHS) &
+                                   static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perm_options operator|(perm_options _LHS, perm_options _RHS) {
+  return static_cast<perm_options>(static_cast<unsigned>(_LHS) |
+                                   static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perm_options operator^(perm_options _LHS, perm_options _RHS) {
+  return static_cast<perm_options>(static_cast<unsigned>(_LHS) ^
+                                   static_cast<unsigned>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr perm_options operator~(perm_options _LHS) {
+  return static_cast<perm_options>(~static_cast<unsigned>(_LHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline perm_options& operator&=(perm_options& _LHS, perm_options _RHS) {
+  return _LHS = _LHS & _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline perm_options& operator|=(perm_options& _LHS, perm_options _RHS) {
+  return _LHS = _LHS | _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline perm_options& operator^=(perm_options& _LHS, perm_options _RHS) {
+  return _LHS = _LHS ^ _RHS;
+}
+
+enum class _LIBCPP_ENUM_VIS copy_options : unsigned short {
+  none = 0,
+  skip_existing = 1,
+  overwrite_existing = 2,
+  update_existing = 4,
+  recursive = 8,
+  copy_symlinks = 16,
+  skip_symlinks = 32,
+  directories_only = 64,
+  create_symlinks = 128,
+  create_hard_links = 256,
+  __in_recursive_copy = 512,
+};
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr copy_options operator&(copy_options _LHS, copy_options _RHS) {
+  return static_cast<copy_options>(static_cast<unsigned short>(_LHS) &
+                                   static_cast<unsigned short>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr copy_options operator|(copy_options _LHS, copy_options _RHS) {
+  return static_cast<copy_options>(static_cast<unsigned short>(_LHS) |
+                                   static_cast<unsigned short>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr copy_options operator^(copy_options _LHS, copy_options _RHS) {
+  return static_cast<copy_options>(static_cast<unsigned short>(_LHS) ^
+                                   static_cast<unsigned short>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr copy_options operator~(copy_options _LHS) {
+  return static_cast<copy_options>(~static_cast<unsigned short>(_LHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline copy_options& operator&=(copy_options& _LHS, copy_options _RHS) {
+  return _LHS = _LHS & _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline copy_options& operator|=(copy_options& _LHS, copy_options _RHS) {
+  return _LHS = _LHS | _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline copy_options& operator^=(copy_options& _LHS, copy_options _RHS) {
+  return _LHS = _LHS ^ _RHS;
+}
+
+enum class _LIBCPP_ENUM_VIS directory_options : unsigned char {
+  none = 0,
+  follow_directory_symlink = 1,
+  skip_permission_denied = 2
+};
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr directory_options operator&(directory_options _LHS,
+                                             directory_options _RHS) {
+  return static_cast<directory_options>(static_cast<unsigned char>(_LHS) &
+                                        static_cast<unsigned char>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr directory_options operator|(directory_options _LHS,
+                                             directory_options _RHS) {
+  return static_cast<directory_options>(static_cast<unsigned char>(_LHS) |
+                                        static_cast<unsigned char>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr directory_options operator^(directory_options _LHS,
+                                             directory_options _RHS) {
+  return static_cast<directory_options>(static_cast<unsigned char>(_LHS) ^
+                                        static_cast<unsigned char>(_RHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline constexpr directory_options operator~(directory_options _LHS) {
+  return static_cast<directory_options>(~static_cast<unsigned char>(_LHS));
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline directory_options& operator&=(directory_options& _LHS,
+                                     directory_options _RHS) {
+  return _LHS = _LHS & _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline directory_options& operator|=(directory_options& _LHS,
+                                     directory_options _RHS) {
+  return _LHS = _LHS | _RHS;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline directory_options& operator^=(directory_options& _LHS,
+                                     directory_options _RHS) {
+  return _LHS = _LHS ^ _RHS;
+}
+
+class _LIBCPP_TYPE_VIS file_status {
+public:
+  // constructors
+  _LIBCPP_INLINE_VISIBILITY
+  file_status() noexcept : file_status(file_type::none) {}
+  _LIBCPP_INLINE_VISIBILITY
+  explicit file_status(file_type __ft, perms __prms = perms::unknown) noexcept
+      : __ft_(__ft),
+        __prms_(__prms) {}
+
+  file_status(const file_status&) noexcept = default;
+  file_status(file_status&&) noexcept = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  ~file_status() {}
+
+  file_status& operator=(const file_status&) noexcept = default;
+  file_status& operator=(file_status&&) noexcept = default;
+
+  // observers
+  _LIBCPP_INLINE_VISIBILITY
+  file_type type() const noexcept { return __ft_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  perms permissions() const noexcept { return __prms_; }
+
+  // modifiers
+  _LIBCPP_INLINE_VISIBILITY
+  void type(file_type __ft) noexcept { __ft_ = __ft; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void permissions(perms __p) noexcept { __prms_ = __p; }
+
+private:
+  file_type __ft_;
+  perms __prms_;
+};
+
+class _LIBCPP_TYPE_VIS directory_entry;
+
+template <class _Tp>
+struct __can_convert_char {
+  static const bool value = false;
+};
+template <class _Tp>
+struct __can_convert_char<const _Tp> : public __can_convert_char<_Tp> {};
+template <>
+struct __can_convert_char<char> {
+  static const bool value = true;
+  using __char_type = char;
+};
+template <>
+struct __can_convert_char<wchar_t> {
+  static const bool value = true;
+  using __char_type = wchar_t;
+};
+template <>
+struct __can_convert_char<char16_t> {
+  static const bool value = true;
+  using __char_type = char16_t;
+};
+template <>
+struct __can_convert_char<char32_t> {
+  static const bool value = true;
+  using __char_type = char32_t;
+};
+
+template <class _ECharT>
+typename enable_if<__can_convert_char<_ECharT>::value, bool>::type
+__is_separator(_ECharT __e) {
+  return __e == _ECharT('/');
+};
+
+struct _NullSentinal {};
+
+template <class _Tp>
+using _Void = void;
+
+template <class _Tp, class = void>
+struct __is_pathable_string : public false_type {};
+
+template <class _ECharT, class _Traits, class _Alloc>
+struct __is_pathable_string<
+    basic_string<_ECharT, _Traits, _Alloc>,
+    _Void<typename __can_convert_char<_ECharT>::__char_type> >
+    : public __can_convert_char<_ECharT> {
+  using _Str = basic_string<_ECharT, _Traits, _Alloc>;
+  using _Base = __can_convert_char<_ECharT>;
+  static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); }
+  static _ECharT const* __range_end(_Str const& __s) {
+    return __s.data() + __s.length();
+  }
+  static _ECharT __first_or_null(_Str const& __s) {
+    return __s.empty() ? _ECharT{} : __s[0];
+  }
+};
+
+template <class _ECharT, class _Traits>
+struct __is_pathable_string<
+    basic_string_view<_ECharT, _Traits>,
+    _Void<typename __can_convert_char<_ECharT>::__char_type> >
+    : public __can_convert_char<_ECharT> {
+  using _Str = basic_string_view<_ECharT, _Traits>;
+  using _Base = __can_convert_char<_ECharT>;
+  static _ECharT const* __range_begin(_Str const& __s) { return __s.data(); }
+  static _ECharT const* __range_end(_Str const& __s) {
+    return __s.data() + __s.length();
+  }
+  static _ECharT __first_or_null(_Str const& __s) {
+    return __s.empty() ? _ECharT{} : __s[0];
+  }
+};
+
+template <class _Source, class _DS = typename decay<_Source>::type,
+          class _UnqualPtrType =
+              typename remove_const<typename remove_pointer<_DS>::type>::type,
+          bool _IsCharPtr = is_pointer<_DS>::value&&
+              __can_convert_char<_UnqualPtrType>::value>
+struct __is_pathable_char_array : false_type {};
+
+template <class _Source, class _ECharT, class _UPtr>
+struct __is_pathable_char_array<_Source, _ECharT*, _UPtr, true>
+    : __can_convert_char<typename remove_const<_ECharT>::type> {
+  using _Base = __can_convert_char<typename remove_const<_ECharT>::type>;
+
+  static _ECharT const* __range_begin(const _ECharT* __b) { return __b; }
+  static _ECharT const* __range_end(const _ECharT* __b) {
+    using _Iter = const _ECharT*;
+    const _ECharT __sentinal = _ECharT{};
+    _Iter __e = __b;
+    for (; *__e != __sentinal; ++__e)
+      ;
+    return __e;
+  }
+
+  static _ECharT __first_or_null(const _ECharT* __b) { return *__b; }
+};
+
+template <class _Iter, bool _IsIt = __is_input_iterator<_Iter>::value,
+          class = void>
+struct __is_pathable_iter : false_type {};
+
+template <class _Iter>
+struct __is_pathable_iter<
+    _Iter, true,
+    _Void<typename __can_convert_char<
+        typename iterator_traits<_Iter>::value_type>::__char_type> >
+    : __can_convert_char<typename iterator_traits<_Iter>::value_type> {
+  using _ECharT = typename iterator_traits<_Iter>::value_type;
+  using _Base = __can_convert_char<_ECharT>;
+
+  static _Iter __range_begin(_Iter __b) { return __b; }
+  static _NullSentinal __range_end(_Iter) { return _NullSentinal{}; }
+
+  static _ECharT __first_or_null(_Iter __b) { return *__b; }
+};
+
+template <class _Tp, bool _IsStringT = __is_pathable_string<_Tp>::value,
+          bool _IsCharIterT = __is_pathable_char_array<_Tp>::value,
+          bool _IsIterT = !_IsCharIterT && __is_pathable_iter<_Tp>::value>
+struct __is_pathable : false_type {
+  static_assert(!_IsStringT && !_IsCharIterT && !_IsIterT, "Must all be false");
+};
+
+template <class _Tp>
+struct __is_pathable<_Tp, true, false, false> : __is_pathable_string<_Tp> {};
+
+template <class _Tp>
+struct __is_pathable<_Tp, false, true, false> : __is_pathable_char_array<_Tp> {
+};
+
+template <class _Tp>
+struct __is_pathable<_Tp, false, false, true> : __is_pathable_iter<_Tp> {};
+
+template <class _ECharT>
+struct _PathCVT {
+  static_assert(__can_convert_char<_ECharT>::value,
+                "Char type not convertible");
+
+  typedef __narrow_to_utf8<sizeof(_ECharT) * __CHAR_BIT__> _Narrower;
+
+  static void __append_range(string& __dest, _ECharT const* __b,
+                             _ECharT const* __e) {
+    _Narrower()(back_inserter(__dest), __b, __e);
+  }
+
+  template <class _Iter>
+  static void __append_range(string& __dest, _Iter __b, _Iter __e) {
+    static_assert(!is_same<_Iter, _ECharT*>::value, "Call const overload");
+    if (__b == __e)
+      return;
+    basic_string<_ECharT> __tmp(__b, __e);
+    _Narrower()(back_inserter(__dest), __tmp.data(),
+                __tmp.data() + __tmp.length());
+  }
+
+  template <class _Iter>
+  static void __append_range(string& __dest, _Iter __b, _NullSentinal) {
+    static_assert(!is_same<_Iter, _ECharT*>::value, "Call const overload");
+    const _ECharT __sentinal = _ECharT{};
+    if (*__b == __sentinal)
+      return;
+    basic_string<_ECharT> __tmp;
+    for (; *__b != __sentinal; ++__b)
+      __tmp.push_back(*__b);
+    _Narrower()(back_inserter(__dest), __tmp.data(),
+                __tmp.data() + __tmp.length());
+  }
+
+  template <class _Source>
+  static void __append_source(string& __dest, _Source const& __s) {
+    using _Traits = __is_pathable<_Source>;
+    __append_range(__dest, _Traits::__range_begin(__s),
+                   _Traits::__range_end(__s));
+  }
+};
+
+template <>
+struct _PathCVT<char> {
+
+  template <class _Iter>
+  static typename enable_if<__is_exactly_input_iterator<_Iter>::value>::type
+  __append_range(string& __dest, _Iter __b, _Iter __e) {
+    for (; __b != __e; ++__b)
+      __dest.push_back(*__b);
+  }
+
+  template <class _Iter>
+  static typename enable_if<__is_forward_iterator<_Iter>::value>::type
+  __append_range(string& __dest, _Iter __b, _Iter __e) {
+    __dest.__append_forward_unsafe(__b, __e);
+  }
+
+  template <class _Iter>
+  static void __append_range(string& __dest, _Iter __b, _NullSentinal) {
+    const char __sentinal = char{};
+    for (; *__b != __sentinal; ++__b)
+      __dest.push_back(*__b);
+  }
+
+  template <class _Source>
+  static void __append_source(string& __dest, _Source const& __s) {
+    using _Traits = __is_pathable<_Source>;
+    __append_range(__dest, _Traits::__range_begin(__s),
+                   _Traits::__range_end(__s));
+  }
+};
+
+class _LIBCPP_TYPE_VIS path {
+  template <class _SourceOrIter, class _Tp = path&>
+  using _EnableIfPathable =
+      typename enable_if<__is_pathable<_SourceOrIter>::value, _Tp>::type;
+
+  template <class _Tp>
+  using _SourceChar = typename __is_pathable<_Tp>::__char_type;
+
+  template <class _Tp>
+  using _SourceCVT = _PathCVT<_SourceChar<_Tp> >;
+
+public:
+  typedef char value_type;
+  typedef basic_string<value_type> string_type;
+  typedef _VSTD::string_view __string_view;
+  static constexpr value_type preferred_separator = '/';
+
+  enum class _LIBCPP_ENUM_VIS format : unsigned char {
+    auto_format,
+    native_format,
+    generic_format
+  };
+
+  // constructors and destructor
+  _LIBCPP_INLINE_VISIBILITY path() noexcept {}
+  _LIBCPP_INLINE_VISIBILITY path(const path& __p) : __pn_(__p.__pn_) {}
+  _LIBCPP_INLINE_VISIBILITY path(path&& __p) noexcept
+      : __pn_(_VSTD::move(__p.__pn_)) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  path(string_type&& __s, format = format::auto_format) noexcept
+      : __pn_(_VSTD::move(__s)) {}
+
+  template <class _Source, class = _EnableIfPathable<_Source, void> >
+  path(const _Source& __src, format = format::auto_format) {
+    _SourceCVT<_Source>::__append_source(__pn_, __src);
+  }
+
+  template <class _InputIt>
+  path(_InputIt __first, _InputIt __last, format = format::auto_format) {
+    typedef typename iterator_traits<_InputIt>::value_type _ItVal;
+    _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
+  }
+
+  // TODO Implement locale conversions.
+  template <class _Source, class = _EnableIfPathable<_Source, void> >
+  path(const _Source& __src, const locale& __loc, format = format::auto_format);
+  template <class _InputIt>
+  path(_InputIt __first, _InputIt _last, const locale& __loc,
+       format = format::auto_format);
+
+  _LIBCPP_INLINE_VISIBILITY
+  ~path() = default;
+
+  // assignments
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator=(const path& __p) {
+    __pn_ = __p.__pn_;
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator=(path&& __p) noexcept {
+    __pn_ = _VSTD::move(__p.__pn_);
+    return *this;
+  }
+
+  template <class = void>
+  _LIBCPP_INLINE_VISIBILITY path& operator=(string_type&& __s) noexcept {
+    __pn_ = _VSTD::move(__s);
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& assign(string_type&& __s) noexcept {
+    __pn_ = _VSTD::move(__s);
+    return *this;
+  }
+
+  template <class _Source>
+  _LIBCPP_INLINE_VISIBILITY _EnableIfPathable<_Source>
+  operator=(const _Source& __src) {
+    return this->assign(__src);
+  }
+
+  template <class _Source>
+  _EnableIfPathable<_Source> assign(const _Source& __src) {
+    __pn_.clear();
+    _SourceCVT<_Source>::__append_source(__pn_, __src);
+    return *this;
+  }
+
+  template <class _InputIt>
+  path& assign(_InputIt __first, _InputIt __last) {
+    typedef typename iterator_traits<_InputIt>::value_type _ItVal;
+    __pn_.clear();
+    _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
+    return *this;
+  }
+
+private:
+  template <class _ECharT>
+  static bool __source_is_absolute(_ECharT __first_or_null) {
+    return __is_separator(__first_or_null);
+  }
+
+public:
+  // appends
+  path& operator/=(const path& __p) {
+    if (__p.is_absolute()) {
+      __pn_ = __p.__pn_;
+      return *this;
+    }
+    if (has_filename())
+      __pn_ += preferred_separator;
+    __pn_ += __p.native();
+    return *this;
+  }
+
+  // FIXME: Use _LIBCPP_DIAGNOSE_WARNING to produce a diagnostic when __src
+  // is known at compile time to be "/' since the user almost certainly intended
+  // to append a separator instead of overwriting the path with "/"
+  template <class _Source>
+  _LIBCPP_INLINE_VISIBILITY _EnableIfPathable<_Source>
+  operator/=(const _Source& __src) {
+    return this->append(__src);
+  }
+
+  template <class _Source>
+  _EnableIfPathable<_Source> append(const _Source& __src) {
+    using _Traits = __is_pathable<_Source>;
+    using _CVT = _PathCVT<_SourceChar<_Source> >;
+    if (__source_is_absolute(_Traits::__first_or_null(__src)))
+      __pn_.clear();
+    else if (has_filename())
+      __pn_ += preferred_separator;
+    _CVT::__append_source(__pn_, __src);
+    return *this;
+  }
+
+  template <class _InputIt>
+  path& append(_InputIt __first, _InputIt __last) {
+    typedef typename iterator_traits<_InputIt>::value_type _ItVal;
+    static_assert(__can_convert_char<_ItVal>::value, "Must convertible");
+    using _CVT = _PathCVT<_ItVal>;
+    if (__first != __last && __source_is_absolute(*__first))
+      __pn_.clear();
+    else if (has_filename())
+      __pn_ += preferred_separator;
+    _CVT::__append_range(__pn_, __first, __last);
+    return *this;
+  }
+
+  // concatenation
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator+=(const path& __x) {
+    __pn_ += __x.__pn_;
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator+=(const string_type& __x) {
+    __pn_ += __x;
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator+=(__string_view __x) {
+    __pn_ += __x;
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator+=(const value_type* __x) {
+    __pn_ += __x;
+    return *this;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& operator+=(value_type __x) {
+    __pn_ += __x;
+    return *this;
+  }
+
+  template <class _ECharT>
+  typename enable_if<__can_convert_char<_ECharT>::value, path&>::type
+  operator+=(_ECharT __x) {
+    basic_string<_ECharT> __tmp;
+    __tmp += __x;
+    _PathCVT<_ECharT>::__append_source(__pn_, __tmp);
+    return *this;
+  }
+
+  template <class _Source>
+  _EnableIfPathable<_Source> operator+=(const _Source& __x) {
+    return this->concat(__x);
+  }
+
+  template <class _Source>
+  _EnableIfPathable<_Source> concat(const _Source& __x) {
+    _SourceCVT<_Source>::__append_source(__pn_, __x);
+    return *this;
+  }
+
+  template <class _InputIt>
+  path& concat(_InputIt __first, _InputIt __last) {
+    typedef typename iterator_traits<_InputIt>::value_type _ItVal;
+    _PathCVT<_ItVal>::__append_range(__pn_, __first, __last);
+    return *this;
+  }
+
+  // modifiers
+  _LIBCPP_INLINE_VISIBILITY
+  void clear() noexcept { __pn_.clear(); }
+
+  path& make_preferred() { return *this; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  path& remove_filename() {
+    auto __fname = __filename();
+    if (!__fname.empty())
+      __pn_.erase(__fname.data() - __pn_.data());
+    return *this;
+  }
+
+  path& replace_filename(const path& __replacement) {
+    remove_filename();
+    return (*this /= __replacement);
+  }
+
+  path& replace_extension(const path& __replacement = path());
+
+  _LIBCPP_INLINE_VISIBILITY
+  void swap(path& __rhs) noexcept { __pn_.swap(__rhs.__pn_); }
+
+  // private helper to allow reserving memory in the path
+  _LIBCPP_INLINE_VISIBILITY
+  void __reserve(size_t __s) { __pn_.reserve(__s); }
+
+  // native format observers
+  _LIBCPP_INLINE_VISIBILITY
+  const string_type& native() const noexcept { return __pn_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  const value_type* c_str() const noexcept { return __pn_.c_str(); }
+
+  _LIBCPP_INLINE_VISIBILITY operator string_type() const { return __pn_; }
+
+  template <class _ECharT, class _Traits = char_traits<_ECharT>,
+            class _Allocator = allocator<_ECharT> >
+  basic_string<_ECharT, _Traits, _Allocator>
+  string(const _Allocator& __a = _Allocator()) const {
+    using _CVT = __widen_from_utf8<sizeof(_ECharT) * __CHAR_BIT__>;
+    using _Str = basic_string<_ECharT, _Traits, _Allocator>;
+    _Str __s(__a);
+    __s.reserve(__pn_.size());
+    _CVT()(back_inserter(__s), __pn_.data(), __pn_.data() + __pn_.size());
+    return __s;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY std::string string() const { return __pn_; }
+  _LIBCPP_INLINE_VISIBILITY std::wstring wstring() const {
+    return string<wchar_t>();
+  }
+  _LIBCPP_INLINE_VISIBILITY std::string u8string() const { return __pn_; }
+  _LIBCPP_INLINE_VISIBILITY std::u16string u16string() const {
+    return string<char16_t>();
+  }
+  _LIBCPP_INLINE_VISIBILITY std::u32string u32string() const {
+    return string<char32_t>();
+  }
+
+  // generic format observers
+  template <class _ECharT, class _Traits = char_traits<_ECharT>,
+            class _Allocator = allocator<_ECharT> >
+  basic_string<_ECharT, _Traits, _Allocator>
+  generic_string(const _Allocator& __a = _Allocator()) const {
+    return string<_ECharT, _Traits, _Allocator>(__a);
+  }
+
+  std::string generic_string() const { return __pn_; }
+  std::wstring generic_wstring() const { return string<wchar_t>(); }
+  std::string generic_u8string() const { return __pn_; }
+  std::u16string generic_u16string() const { return string<char16_t>(); }
+  std::u32string generic_u32string() const { return string<char32_t>(); }
+
+private:
+  int __compare(__string_view) const;
+  __string_view __root_name() const;
+  __string_view __root_directory() const;
+  __string_view __root_path_raw() const;
+  __string_view __relative_path() const;
+  __string_view __parent_path() const;
+  __string_view __filename() const;
+  __string_view __stem() const;
+  __string_view __extension() const;
+
+public:
+  // compare
+  _LIBCPP_INLINE_VISIBILITY int compare(const path& __p) const noexcept {
+    return __compare(__p.__pn_);
+  }
+  _LIBCPP_INLINE_VISIBILITY int compare(const string_type& __s) const {
+    return __compare(__s);
+  }
+  _LIBCPP_INLINE_VISIBILITY int compare(__string_view __s) const {
+    return __compare(__s);
+  }
+  _LIBCPP_INLINE_VISIBILITY int compare(const value_type* __s) const {
+    return __compare(__s);
+  }
+
+  // decomposition
+  _LIBCPP_INLINE_VISIBILITY path root_name() const {
+    return string_type(__root_name());
+  }
+  _LIBCPP_INLINE_VISIBILITY path root_directory() const {
+    return string_type(__root_directory());
+  }
+  _LIBCPP_INLINE_VISIBILITY path root_path() const {
+    return root_name().append(string_type(__root_directory()));
+  }
+  _LIBCPP_INLINE_VISIBILITY path relative_path() const {
+    return string_type(__relative_path());
+  }
+  _LIBCPP_INLINE_VISIBILITY path parent_path() const {
+    return string_type(__parent_path());
+  }
+  _LIBCPP_INLINE_VISIBILITY path filename() const {
+    return string_type(__filename());
+  }
+  _LIBCPP_INLINE_VISIBILITY path stem() const { return string_type(__stem()); }
+  _LIBCPP_INLINE_VISIBILITY path extension() const {
+    return string_type(__extension());
+  }
+
+  // query
+  _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY bool
+  empty() const noexcept {
+    return __pn_.empty();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY bool has_root_name() const {
+    return !__root_name().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_root_directory() const {
+    return !__root_directory().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_root_path() const {
+    return !__root_path_raw().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_relative_path() const {
+    return !__relative_path().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_parent_path() const {
+    return !__parent_path().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_filename() const {
+    return !__filename().empty();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool has_stem() const { return !__stem().empty(); }
+  _LIBCPP_INLINE_VISIBILITY bool has_extension() const {
+    return !__extension().empty();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY bool is_absolute() const {
+    return has_root_directory();
+  }
+  _LIBCPP_INLINE_VISIBILITY bool is_relative() const { return !is_absolute(); }
+
+  // relative paths
+  path lexically_normal() const;
+  path lexically_relative(const path& __base) const;
+
+  _LIBCPP_INLINE_VISIBILITY path lexically_proximate(const path& __base) const {
+    path __result = this->lexically_relative(__base);
+    if (__result.native().empty())
+      return *this;
+    return __result;
+  }
+
+  // iterators
+  class _LIBCPP_TYPE_VIS iterator;
+  typedef iterator const_iterator;
+
+  iterator begin() const;
+  iterator end() const;
+
+  template <class _CharT, class _Traits>
+  _LIBCPP_INLINE_VISIBILITY friend
+      typename enable_if<is_same<_CharT, char>::value &&
+                             is_same<_Traits, char_traits<char> >::value,
+                         basic_ostream<_CharT, _Traits>&>::type
+      operator<<(basic_ostream<_CharT, _Traits>& __os, const path& __p) {
+    __os << std::__quoted(__p.native());
+    return __os;
+  }
+
+  template <class _CharT, class _Traits>
+  _LIBCPP_INLINE_VISIBILITY friend
+      typename enable_if<!is_same<_CharT, char>::value ||
+                             !is_same<_Traits, char_traits<char> >::value,
+                         basic_ostream<_CharT, _Traits>&>::type
+      operator<<(basic_ostream<_CharT, _Traits>& __os, const path& __p) {
+    __os << std::__quoted(__p.string<_CharT, _Traits>());
+    return __os;
+  }
+
+  template <class _CharT, class _Traits>
+  _LIBCPP_INLINE_VISIBILITY friend basic_istream<_CharT, _Traits>&
+  operator>>(basic_istream<_CharT, _Traits>& __is, path& __p) {
+    basic_string<_CharT, _Traits> __tmp;
+    __is >> __quoted(__tmp);
+    __p = __tmp;
+    return __is;
+  }
+
+private:
+  inline _LIBCPP_INLINE_VISIBILITY path&
+  __assign_view(__string_view const& __s) noexcept {
+    __pn_ = string_type(__s);
+    return *this;
+  }
+  string_type __pn_;
+};
+
+inline _LIBCPP_INLINE_VISIBILITY void swap(path& __lhs, path& __rhs) noexcept {
+  __lhs.swap(__rhs);
+}
+
+_LIBCPP_FUNC_VIS
+size_t hash_value(const path& __p) noexcept;
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator==(const path& __lhs,
+                                                 const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) == 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator!=(const path& __lhs,
+                                                 const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) != 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator<(const path& __lhs,
+                                                const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) < 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator<=(const path& __lhs,
+                                                 const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) <= 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator>(const path& __lhs,
+                                                const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) > 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator>=(const path& __lhs,
+                                                 const path& __rhs) noexcept {
+  return __lhs.compare(__rhs) >= 0;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path operator/(const path& __lhs,
+                                                const path& __rhs) {
+  path __result(__lhs);
+  __result /= __rhs;
+  return __result;
+}
+
+template <class _Source>
+_LIBCPP_INLINE_VISIBILITY
+    typename enable_if<__is_pathable<_Source>::value, path>::type
+    u8path(const _Source& __s) {
+  static_assert(
+      is_same<typename __is_pathable<_Source>::__char_type, char>::value,
+      "u8path(Source const&) requires Source have a character type of type "
+      "'char'");
+  return path(__s);
+}
+
+template <class _InputIt>
+_LIBCPP_INLINE_VISIBILITY
+    typename enable_if<__is_pathable<_InputIt>::value, path>::type
+    u8path(_InputIt __f, _InputIt __l) {
+  static_assert(
+      is_same<typename __is_pathable<_InputIt>::__char_type, char>::value,
+      "u8path(Iter, Iter) requires Iter have a value_type of type 'char'");
+  return path(__f, __l);
+}
+
+class _LIBCPP_TYPE_VIS path::iterator {
+public:
+  enum _ParserState : unsigned char {
+    _Singular,
+    _BeforeBegin,
+    _InRootName,
+    _InRootDir,
+    _InFilenames,
+    _InTrailingSep,
+    _AtEnd
+  };
+
+public:
+  typedef bidirectional_iterator_tag iterator_category;
+
+  typedef path value_type;
+  typedef std::ptrdiff_t difference_type;
+  typedef const path* pointer;
+  typedef const path& reference;
+
+  typedef void
+      __stashing_iterator_tag; // See reverse_iterator and __is_stashing_iterator
+
+public:
+  _LIBCPP_INLINE_VISIBILITY
+  iterator()
+      : __stashed_elem_(), __path_ptr_(nullptr), __entry_(),
+        __state_(_Singular) {}
+
+  iterator(const iterator&) = default;
+  ~iterator() = default;
+
+  iterator& operator=(const iterator&) = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  reference operator*() const { return __stashed_elem_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  pointer operator->() const { return &__stashed_elem_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  iterator& operator++() {
+    _LIBCPP_ASSERT(__state_ != _Singular,
+                   "attempting to increment a singular iterator");
+    _LIBCPP_ASSERT(__state_ != _AtEnd,
+                   "attempting to increment the end iterator");
+    return __increment();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  iterator operator++(int) {
+    iterator __it(*this);
+    this->operator++();
+    return __it;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  iterator& operator--() {
+    _LIBCPP_ASSERT(__state_ != _Singular,
+                   "attempting to decrement a singular iterator");
+    _LIBCPP_ASSERT(__entry_.data() != __path_ptr_->native().data(),
+                   "attempting to decrement the begin iterator");
+    return __decrement();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  iterator operator--(int) {
+    iterator __it(*this);
+    this->operator--();
+    return __it;
+  }
+
+private:
+  friend class path;
+
+  inline _LIBCPP_INLINE_VISIBILITY friend bool operator==(const iterator&,
+                                                          const iterator&);
+
+  iterator& __increment();
+  iterator& __decrement();
+
+  path __stashed_elem_;
+  const path* __path_ptr_;
+  path::__string_view __entry_;
+  _ParserState __state_;
+};
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator==(const path::iterator& __lhs,
+                                                 const path::iterator& __rhs) {
+  return __lhs.__path_ptr_ == __rhs.__path_ptr_ &&
+         __lhs.__entry_.data() == __rhs.__entry_.data();
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool operator!=(const path::iterator& __lhs,
+                                                 const path::iterator& __rhs) {
+  return !(__lhs == __rhs);
+}
+
+class _LIBCPP_EXCEPTION_ABI filesystem_error : public system_error {
+public:
+  _LIBCPP_INLINE_VISIBILITY
+  filesystem_error(const string& __what, error_code __ec)
+      : system_error(__ec, __what),
+        __storage_(make_shared<_Storage>(path(), path())) {
+    __create_what(0);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  filesystem_error(const string& __what, const path& __p1, error_code __ec)
+      : system_error(__ec, __what),
+        __storage_(make_shared<_Storage>(__p1, path())) {
+    __create_what(1);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  filesystem_error(const string& __what, const path& __p1, const path& __p2,
+                   error_code __ec)
+      : system_error(__ec, __what),
+        __storage_(make_shared<_Storage>(__p1, __p2)) {
+    __create_what(2);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  const path& path1() const noexcept { return __storage_->__p1_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  const path& path2() const noexcept { return __storage_->__p2_; }
+
+  ~filesystem_error() override; // key function
+
+  _LIBCPP_INLINE_VISIBILITY
+  const char* what() const noexcept override {
+    return __storage_->__what_.c_str();
+  }
+
+  _LIBCPP_FUNC_VIS
+  void __create_what(int __num_paths);
+
+private:
+  struct _Storage {
+    _LIBCPP_INLINE_VISIBILITY
+    _Storage(const path& __p1, const path& __p2) : __p1_(__p1), __p2_(__p2) {}
+
+    path __p1_;
+    path __p2_;
+    string __what_;
+  };
+  shared_ptr<_Storage> __storage_;
+};
+
+template <class... _Args>
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
+#ifndef _LIBCPP_NO_EXCEPTIONS
+    void
+    __throw_filesystem_error(_Args&&... __args) {
+  throw filesystem_error(std::forward<_Args>(__args)...);
+}
+#else
+    void
+    __throw_filesystem_error(_Args&&...) {
+  _VSTD::abort();
+}
+#endif
+
+// operational functions
+
+_LIBCPP_FUNC_VIS
+path __absolute(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+path __canonical(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __copy(const path& __from, const path& __to, copy_options __opt,
+            error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __copy_file(const path& __from, const path& __to, copy_options __opt,
+                 error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __copy_symlink(const path& __existing_symlink, const path& __new_symlink,
+                    error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __create_directories(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __create_directory(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __create_directory(const path& p, const path& attributes,
+                        error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __create_directory_symlink(const path& __to, const path& __new_symlink,
+                                error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __create_hard_link(const path& __to, const path& __new_hard_link,
+                        error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __create_symlink(const path& __to, const path& __new_symlink,
+                      error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+path __current_path(error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __current_path(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __equivalent(const path&, const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+uintmax_t __file_size(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+uintmax_t __hard_link_count(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __fs_is_empty(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+file_time_type __last_write_time(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __last_write_time(const path& p, file_time_type new_time,
+                       error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __permissions(const path&, perms, perm_options, error_code* = nullptr);
+_LIBCPP_FUNC_VIS
+path __read_symlink(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+bool __remove(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+uintmax_t __remove_all(const path& p, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __rename(const path& from, const path& to, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+void __resize_file(const path& p, uintmax_t size, error_code* ec = nullptr);
+_LIBCPP_FUNC_VIS
+space_info __space(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+file_status __status(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+file_status __symlink_status(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+path __system_complete(const path&, error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+path __temp_directory_path(error_code* __ec = nullptr);
+_LIBCPP_FUNC_VIS
+path __weakly_canonical(path const& __p, error_code* __ec = nullptr);
+
+inline _LIBCPP_INLINE_VISIBILITY path current_path() {
+  return __current_path();
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path current_path(error_code& __ec) {
+  return __current_path(&__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void current_path(const path& __p) {
+  __current_path(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void current_path(const path& __p,
+                                                   error_code& __ec) noexcept {
+  __current_path(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path absolute(const path& __p) {
+  return __absolute(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path absolute(const path& __p,
+                                               error_code& __ec) {
+  return __absolute(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path canonical(const path& __p) {
+  return __canonical(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path canonical(const path& __p,
+                                                error_code& __ec) {
+  return __canonical(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void copy(const path& __from,
+                                           const path& __to) {
+  __copy(__from, __to, copy_options::none);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void copy(const path& __from, const path& __to,
+                                           error_code& __ec) {
+  __copy(__from, __to, copy_options::none, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void copy(const path& __from, const path& __to,
+                                           copy_options __opt) {
+  __copy(__from, __to, __opt);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void copy(const path& __from, const path& __to,
+                                           copy_options __opt,
+                                           error_code& __ec) {
+  __copy(__from, __to, __opt, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool copy_file(const path& __from,
+                                                const path& __to) {
+  return __copy_file(__from, __to, copy_options::none);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+copy_file(const path& __from, const path& __to, error_code& __ec) {
+  return __copy_file(__from, __to, copy_options::none, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+copy_file(const path& __from, const path& __to, copy_options __opt) {
+  return __copy_file(__from, __to, __opt);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool copy_file(const path& __from,
+                                                const path& __to,
+                                                copy_options __opt,
+                                                error_code& __ec) {
+  return __copy_file(__from, __to, __opt, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void copy_symlink(const path& __existing,
+                                                   const path& __new) {
+  __copy_symlink(__existing, __new);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+copy_symlink(const path& __ext, const path& __new, error_code& __ec) noexcept {
+  __copy_symlink(__ext, __new, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool create_directories(const path& __p) {
+  return __create_directories(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool create_directories(const path& __p,
+                                                         error_code& __ec) {
+  return __create_directories(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool create_directory(const path& __p) {
+  return __create_directory(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+create_directory(const path& __p, error_code& __ec) noexcept {
+  return __create_directory(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool create_directory(const path& __p,
+                                                       const path& __attrs) {
+  return __create_directory(__p, __attrs);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+create_directory(const path& __p, const path& __attrs,
+                 error_code& __ec) noexcept {
+  return __create_directory(__p, __attrs, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+create_directory_symlink(const path& __to, const path& __new) {
+  __create_directory_symlink(__to, __new);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+create_directory_symlink(const path& __to, const path& __new,
+                         error_code& __ec) noexcept {
+  __create_directory_symlink(__to, __new, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void create_hard_link(const path& __to,
+                                                       const path& __new) {
+  __create_hard_link(__to, __new);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+create_hard_link(const path& __to, const path& __new,
+                 error_code& __ec) noexcept {
+  __create_hard_link(__to, __new, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void create_symlink(const path& __to,
+                                                     const path& __new) {
+  __create_symlink(__to, __new);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+create_symlink(const path& __to, const path& __new, error_code& __ec) noexcept {
+  return __create_symlink(__to, __new, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool status_known(file_status __s) noexcept {
+  return __s.type() != file_type::none;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool exists(file_status __s) noexcept {
+  return status_known(__s) && __s.type() != file_type::not_found;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool exists(const path& __p) {
+  return exists(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool exists(const path& __p,
+                                             error_code& __ec) noexcept {
+  auto __s = __status(__p, &__ec);
+  if (status_known(__s))
+    __ec.clear();
+  return exists(__s);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool equivalent(const path& __p1,
+                                                 const path& __p2) {
+  return __equivalent(__p1, __p2);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+equivalent(const path& __p1, const path& __p2, error_code& __ec) noexcept {
+  return __equivalent(__p1, __p2, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t file_size(const path& __p) {
+  return __file_size(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t
+file_size(const path& __p, error_code& __ec) noexcept {
+  return __file_size(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t hard_link_count(const path& __p) {
+  return __hard_link_count(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t
+hard_link_count(const path& __p, error_code& __ec) noexcept {
+  return __hard_link_count(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_block_file(file_status __s) noexcept {
+  return __s.type() == file_type::block;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_block_file(const path& __p) {
+  return is_block_file(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_block_file(const path& __p,
+                                                    error_code& __ec) noexcept {
+  return is_block_file(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+is_character_file(file_status __s) noexcept {
+  return __s.type() == file_type::character;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_character_file(const path& __p) {
+  return is_character_file(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+is_character_file(const path& __p, error_code& __ec) noexcept {
+  return is_character_file(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_directory(file_status __s) noexcept {
+  return __s.type() == file_type::directory;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_directory(const path& __p) {
+  return is_directory(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_directory(const path& __p,
+                                                   error_code& __ec) noexcept {
+  return is_directory(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_empty(const path& __p) {
+  return __fs_is_empty(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_empty(const path& __p,
+                                               error_code& __ec) {
+  return __fs_is_empty(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_fifo(file_status __s) noexcept {
+  return __s.type() == file_type::fifo;
+}
+inline _LIBCPP_INLINE_VISIBILITY bool is_fifo(const path& __p) {
+  return is_fifo(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_fifo(const path& __p,
+                                              error_code& __ec) noexcept {
+  return is_fifo(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+is_regular_file(file_status __s) noexcept {
+  return __s.type() == file_type::regular;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_regular_file(const path& __p) {
+  return is_regular_file(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+is_regular_file(const path& __p, error_code& __ec) noexcept {
+  return is_regular_file(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_socket(file_status __s) noexcept {
+  return __s.type() == file_type::socket;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_socket(const path& __p) {
+  return is_socket(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_socket(const path& __p,
+                                                error_code& __ec) noexcept {
+  return is_socket(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_symlink(file_status __s) noexcept {
+  return __s.type() == file_type::symlink;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_symlink(const path& __p) {
+  return is_symlink(__symlink_status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_symlink(const path& __p,
+                                                 error_code& __ec) noexcept {
+  return is_symlink(__symlink_status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_other(file_status __s) noexcept {
+  return exists(__s) && !is_regular_file(__s) && !is_directory(__s) &&
+         !is_symlink(__s);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_other(const path& __p) {
+  return is_other(__status(__p));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool is_other(const path& __p,
+                                               error_code& __ec) noexcept {
+  return is_other(__status(__p, &__ec));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_time_type
+last_write_time(const path& __p) {
+  return __last_write_time(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_time_type
+last_write_time(const path& __p, error_code& __ec) noexcept {
+  return __last_write_time(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void last_write_time(const path& __p,
+                                                      file_time_type __t) {
+  __last_write_time(__p, __t);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+last_write_time(const path& __p, file_time_type __t,
+                error_code& __ec) noexcept {
+  __last_write_time(__p, __t, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+permissions(const path& __p, perms __prms,
+            perm_options __opts = perm_options::replace) {
+  __permissions(__p, __prms, __opts);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void permissions(const path& __p, perms __prms,
+                                                  error_code& __ec) noexcept {
+  __permissions(__p, __prms, perm_options::replace, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void permissions(const path& __p, perms __prms,
+                                                  perm_options __opts,
+                                                  error_code& __ec) {
+  __permissions(__p, __prms, __opts, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path proximate(const path& __p,
+                                                const path& __base,
+                                                error_code& __ec) {
+  path __tmp = __weakly_canonical(__p, &__ec);
+  if (__ec)
+    return {};
+  path __tmp_base = __weakly_canonical(__base, &__ec);
+  if (__ec)
+    return {};
+  return __tmp.lexically_proximate(__tmp_base);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path proximate(const path& __p,
+                                                error_code& __ec) {
+  return proximate(__p, current_path(), __ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path
+proximate(const path& __p, const path& __base = current_path()) {
+  return __weakly_canonical(__p).lexically_proximate(
+      __weakly_canonical(__base));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path read_symlink(const path& __p) {
+  return __read_symlink(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path read_symlink(const path& __p,
+                                                   error_code& __ec) {
+  return __read_symlink(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path relative(const path& __p,
+                                               const path& __base,
+                                               error_code& __ec) {
+  path __tmp = __weakly_canonical(__p, &__ec);
+  if (__ec)
+    return path();
+  path __tmpbase = __weakly_canonical(__base, &__ec);
+  if (__ec)
+    return path();
+  return __tmp.lexically_relative(__tmpbase);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path relative(const path& __p,
+                                               error_code& __ec) {
+  return relative(__p, current_path(), __ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path
+relative(const path& __p, const path& __base = current_path()) {
+  return __weakly_canonical(__p).lexically_relative(__weakly_canonical(__base));
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool remove(const path& __p) {
+  return __remove(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool remove(const path& __p,
+                                             error_code& __ec) noexcept {
+  return __remove(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t remove_all(const path& __p) {
+  return __remove_all(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY uintmax_t remove_all(const path& __p,
+                                                      error_code& __ec) {
+  return __remove_all(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void rename(const path& __from,
+                                             const path& __to) {
+  return __rename(__from, __to);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+rename(const path& __from, const path& __to, error_code& __ec) noexcept {
+  return __rename(__from, __to, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void resize_file(const path& __p,
+                                                  uintmax_t __ns) {
+  return __resize_file(__p, __ns);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY void
+resize_file(const path& __p, uintmax_t __ns, error_code& __ec) noexcept {
+  return __resize_file(__p, __ns, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY space_info space(const path& __p) {
+  return __space(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY space_info space(const path& __p,
+                                                  error_code& __ec) noexcept {
+  return __space(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_status status(const path& __p) {
+  return __status(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_status status(const path& __p,
+                                                    error_code& __ec) noexcept {
+  return __status(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_status symlink_status(const path& __p) {
+  return __symlink_status(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY file_status
+symlink_status(const path& __p, error_code& __ec) noexcept {
+  return __symlink_status(__p, &__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path temp_directory_path() {
+  return __temp_directory_path();
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path temp_directory_path(error_code& __ec) {
+  return __temp_directory_path(&__ec);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path weakly_canonical(path const& __p) {
+  return __weakly_canonical(__p);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY path weakly_canonical(path const& __p,
+                                                       error_code& __ec) {
+  return __weakly_canonical(__p, &__ec);
+}
+
+class directory_iterator;
+class recursive_directory_iterator;
+class __dir_stream;
+
+class directory_entry {
+  typedef _VSTD_FS::path _Path;
+
+public:
+  // constructors and destructors
+  directory_entry() noexcept = default;
+  directory_entry(directory_entry const&) = default;
+  directory_entry(directory_entry&&) noexcept = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit directory_entry(_Path const& __p) : __p_(__p) {
+    error_code __ec;
+    __refresh(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  directory_entry(_Path const& __p, error_code& __ec) : __p_(__p) {
+    __refresh(&__ec);
+  }
+
+  ~directory_entry() {}
+
+  directory_entry& operator=(directory_entry const&) = default;
+  directory_entry& operator=(directory_entry&&) noexcept = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  void assign(_Path const& __p) {
+    __p_ = __p;
+    error_code __ec;
+    __refresh(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void assign(_Path const& __p, error_code& __ec) {
+    __p_ = __p;
+    __refresh(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void replace_filename(_Path const& __p) {
+    __p_.replace_filename(__p);
+    error_code __ec;
+    __refresh(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void replace_filename(_Path const& __p, error_code& __ec) {
+    __p_ = __p_.parent_path() / __p;
+    __refresh(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void refresh() { __refresh(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void refresh(error_code& __ec) noexcept { __refresh(&__ec); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  _Path const& path() const noexcept { return __p_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  operator const _Path&() const noexcept { return __p_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool exists() const { return _VSTD_FS::exists(file_status{__get_ft()}); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool exists(error_code& __ec) const noexcept {
+    return _VSTD_FS::exists(file_status{__get_ft(&__ec)});
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_block_file() const { return __get_ft() == file_type::block; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_block_file(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::block;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_character_file() const { return __get_ft() == file_type::character; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_character_file(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::character;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_directory() const { return __get_ft() == file_type::directory; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_directory(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::directory;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_fifo() const { return __get_ft() == file_type::fifo; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_fifo(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::fifo;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_other() const { return _VSTD_FS::is_other(file_status{__get_ft()}); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_other(error_code& __ec) const noexcept {
+    return _VSTD_FS::is_other(file_status{__get_ft(&__ec)});
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_regular_file() const { return __get_ft() == file_type::regular; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_regular_file(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::regular;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_socket() const { return __get_ft() == file_type::socket; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_socket(error_code& __ec) const noexcept {
+    return __get_ft(&__ec) == file_type::socket;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_symlink() const { return __get_sym_ft() == file_type::symlink; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool is_symlink(error_code& __ec) const noexcept {
+    return __get_sym_ft(&__ec) == file_type::symlink;
+  }
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t file_size() const { return __get_size(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t file_size(error_code& __ec) const noexcept {
+    return __get_size(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t hard_link_count() const { return __get_nlink(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t hard_link_count(error_code& __ec) const noexcept {
+    return __get_nlink(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_time_type last_write_time() const { return __get_write_time(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_time_type last_write_time(error_code& __ec) const noexcept {
+    return __get_write_time(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status status() const { return __get_status(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status status(error_code& __ec) const noexcept {
+    return __get_status(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status symlink_status() const { return __get_symlink_status(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status symlink_status(error_code& __ec) const noexcept {
+    return __get_symlink_status(&__ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator<(directory_entry const& __rhs) const noexcept {
+    return __p_ < __rhs.__p_;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator==(directory_entry const& __rhs) const noexcept {
+    return __p_ == __rhs.__p_;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator!=(directory_entry const& __rhs) const noexcept {
+    return __p_ != __rhs.__p_;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator<=(directory_entry const& __rhs) const noexcept {
+    return __p_ <= __rhs.__p_;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator>(directory_entry const& __rhs) const noexcept {
+    return __p_ > __rhs.__p_;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool operator>=(directory_entry const& __rhs) const noexcept {
+    return __p_ >= __rhs.__p_;
+  }
+
+private:
+  friend class directory_iterator;
+  friend class recursive_directory_iterator;
+  friend class __dir_stream;
+
+  enum _CacheType : unsigned char {
+    _Empty,
+    _IterSymlink,
+    _IterNonSymlink,
+    _RefreshSymlink,
+    _RefreshSymlinkUnresolved,
+    _RefreshNonSymlink
+  };
+
+  struct __cached_data {
+    uintmax_t __size_;
+    uintmax_t __nlink_;
+    file_time_type __write_time_;
+    perms __sym_perms_;
+    perms __non_sym_perms_;
+    file_type __type_;
+    _CacheType __cache_type_;
+
+    _LIBCPP_INLINE_VISIBILITY
+    __cached_data() noexcept { __reset(); }
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __reset() {
+      __cache_type_ = _Empty;
+      __type_ = file_type::none;
+      __sym_perms_ = __non_sym_perms_ = perms::unknown;
+      __size_ = __nlink_ = uintmax_t(-1);
+      __write_time_ = file_time_type::min();
+    }
+  };
+
+  _LIBCPP_INLINE_VISIBILITY
+  static __cached_data __create_iter_result(file_type __ft) {
+    __cached_data __data;
+    __data.__type_ = __ft;
+    __data.__cache_type_ = [&]() {
+      switch (__ft) {
+      case file_type::none:
+        return _Empty;
+      case file_type::symlink:
+        return _IterSymlink;
+      default:
+        return _IterNonSymlink;
+      }
+    }();
+    return __data;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void __assign_iter_entry(_Path&& __p, __cached_data __dt) {
+    __p_ = std::move(__p);
+    __data_ = __dt;
+  }
+
+  _LIBCPP_FUNC_VIS
+  error_code __do_refresh() noexcept;
+
+  _LIBCPP_INLINE_VISIBILITY
+  static bool __is_dne_error(error_code const& __ec) {
+    if (!__ec)
+      return true;
+    switch (static_cast<errc>(__ec.value())) {
+    case errc::no_such_file_or_directory:
+    case errc::not_a_directory:
+      return true;
+    default:
+      return false;
+    }
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void __handle_error(const char* __msg, error_code* __dest_ec,
+                      error_code const& __ec, bool __allow_dne = false) const {
+    if (__dest_ec) {
+      *__dest_ec = __ec;
+      return;
+    }
+    if (__ec && (!__allow_dne || !__is_dne_error(__ec)))
+      __throw_filesystem_error(__msg, __p_, __ec);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void __refresh(error_code* __ec = nullptr) {
+    __handle_error("in directory_entry::refresh", __ec, __do_refresh(),
+                   /*allow_dne*/ true);
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_type __get_sym_ft(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+      return __symlink_status(__p_, __ec).type();
+    case _IterSymlink:
+    case _RefreshSymlink:
+    case _RefreshSymlinkUnresolved:
+      if (__ec)
+        __ec->clear();
+      return file_type::symlink;
+    case _IterNonSymlink:
+    case _RefreshNonSymlink:
+      file_status __st(__data_.__type_);
+      if (__ec && !_VSTD_FS::exists(__st))
+        *__ec = make_error_code(errc::no_such_file_or_directory);
+      else if (__ec)
+        __ec->clear();
+      return __data_.__type_;
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_type __get_ft(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterSymlink:
+    case _RefreshSymlinkUnresolved:
+      return __status(__p_, __ec).type();
+    case _IterNonSymlink:
+    case _RefreshNonSymlink:
+    case _RefreshSymlink: {
+      file_status __st(__data_.__type_);
+      if (__ec && !_VSTD_FS::exists(__st))
+        *__ec = make_error_code(errc::no_such_file_or_directory);
+      else if (__ec)
+        __ec->clear();
+      return __data_.__type_;
+    }
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status __get_status(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterNonSymlink:
+    case _IterSymlink:
+    case _RefreshSymlinkUnresolved:
+      return __status(__p_, __ec);
+    case _RefreshNonSymlink:
+    case _RefreshSymlink:
+      return file_status(__get_ft(__ec), __data_.__non_sym_perms_);
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_status __get_symlink_status(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterNonSymlink:
+    case _IterSymlink:
+      return __symlink_status(__p_, __ec);
+    case _RefreshNonSymlink:
+      return file_status(__get_sym_ft(__ec), __data_.__non_sym_perms_);
+    case _RefreshSymlink:
+    case _RefreshSymlinkUnresolved:
+      return file_status(__get_sym_ft(__ec), __data_.__sym_perms_);
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t __get_size(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterNonSymlink:
+    case _IterSymlink:
+    case _RefreshSymlinkUnresolved:
+      return _VSTD_FS::__file_size(__p_, __ec);
+    case _RefreshSymlink:
+    case _RefreshNonSymlink: {
+      error_code __m_ec;
+      file_status __st(__get_ft(&__m_ec));
+      __handle_error("in directory_entry::file_size", __ec, __m_ec);
+      if (_VSTD_FS::exists(__st) && !_VSTD_FS::is_regular_file(__st)) {
+        errc __err_kind = _VSTD_FS::is_directory(__st) ? errc::is_a_directory
+                                                       : errc::not_supported;
+        __handle_error("in directory_entry::file_size", __ec,
+                       make_error_code(__err_kind));
+      }
+      return __data_.__size_;
+    }
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  uintmax_t __get_nlink(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterNonSymlink:
+    case _IterSymlink:
+    case _RefreshSymlinkUnresolved:
+      return _VSTD_FS::__hard_link_count(__p_, __ec);
+    case _RefreshSymlink:
+    case _RefreshNonSymlink: {
+      error_code __m_ec;
+      (void)__get_ft(&__m_ec);
+      __handle_error("in directory_entry::hard_link_count", __ec, __m_ec);
+      return __data_.__nlink_;
+    }
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  file_time_type __get_write_time(error_code* __ec = nullptr) const {
+    switch (__data_.__cache_type_) {
+    case _Empty:
+    case _IterNonSymlink:
+    case _IterSymlink:
+    case _RefreshSymlinkUnresolved:
+      return _VSTD_FS::__last_write_time(__p_, __ec);
+    case _RefreshSymlink:
+    case _RefreshNonSymlink: {
+      error_code __m_ec;
+      file_status __st(__get_ft(&__m_ec));
+      __handle_error("in directory_entry::last_write_time", __ec, __m_ec);
+      if (_VSTD_FS::exists(__st) &&
+          __data_.__write_time_ == file_time_type::min())
+        __handle_error("in directory_entry::last_write_time", __ec,
+                       make_error_code(errc::value_too_large));
+      return __data_.__write_time_;
+    }
+    }
+    _LIBCPP_UNREACHABLE();
+  }
+
+private:
+  _Path __p_;
+  __cached_data __data_;
+};
+
+class __dir_element_proxy {
+public:
+  inline _LIBCPP_INLINE_VISIBILITY directory_entry operator*() {
+    return _VSTD::move(__elem_);
+  }
+
+private:
+  friend class directory_iterator;
+  friend class recursive_directory_iterator;
+  explicit __dir_element_proxy(directory_entry const& __e) : __elem_(__e) {}
+  __dir_element_proxy(__dir_element_proxy&& __o)
+      : __elem_(_VSTD::move(__o.__elem_)) {}
+  directory_entry __elem_;
+};
+
+class directory_iterator {
+public:
+  typedef directory_entry value_type;
+  typedef ptrdiff_t difference_type;
+  typedef value_type const* pointer;
+  typedef value_type const& reference;
+  typedef input_iterator_tag iterator_category;
+
+public:
+  //ctor & dtor
+  directory_iterator() noexcept {}
+
+  explicit directory_iterator(const path& __p)
+      : directory_iterator(__p, nullptr) {}
+
+  directory_iterator(const path& __p, directory_options __opts)
+      : directory_iterator(__p, nullptr, __opts) {}
+
+  directory_iterator(const path& __p, error_code& __ec)
+      : directory_iterator(__p, &__ec) {}
+
+  directory_iterator(const path& __p, directory_options __opts,
+                     error_code& __ec)
+      : directory_iterator(__p, &__ec, __opts) {}
+
+  directory_iterator(const directory_iterator&) = default;
+  directory_iterator(directory_iterator&&) = default;
+  directory_iterator& operator=(const directory_iterator&) = default;
+
+  directory_iterator& operator=(directory_iterator&& __o) noexcept {
+    // non-default implementation provided to support self-move assign.
+    if (this != &__o) {
+      __imp_ = _VSTD::move(__o.__imp_);
+    }
+    return *this;
+  }
+
+  ~directory_iterator() = default;
+
+  const directory_entry& operator*() const {
+    _LIBCPP_ASSERT(__imp_, "The end iterator cannot be dereferenced");
+    return __dereference();
+  }
+
+  const directory_entry* operator->() const { return &**this; }
+
+  directory_iterator& operator++() { return __increment(); }
+
+  __dir_element_proxy operator++(int) {
+    __dir_element_proxy __p(**this);
+    __increment();
+    return __p;
+  }
+
+  directory_iterator& increment(error_code& __ec) { return __increment(&__ec); }
+
+private:
+  inline _LIBCPP_INLINE_VISIBILITY friend bool
+  operator==(const directory_iterator& __lhs,
+             const directory_iterator& __rhs) noexcept;
+
+  // construct the dir_stream
+  _LIBCPP_FUNC_VIS
+  directory_iterator(const path&, error_code*,
+                     directory_options = directory_options::none);
+
+  _LIBCPP_FUNC_VIS
+  directory_iterator& __increment(error_code* __ec = nullptr);
+
+  _LIBCPP_FUNC_VIS
+  const directory_entry& __dereference() const;
+
+private:
+  shared_ptr<__dir_stream> __imp_;
+};
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+operator==(const directory_iterator& __lhs,
+           const directory_iterator& __rhs) noexcept {
+  return __lhs.__imp_ == __rhs.__imp_;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+operator!=(const directory_iterator& __lhs,
+           const directory_iterator& __rhs) noexcept {
+  return !(__lhs == __rhs);
+}
+
+// enable directory_iterator range-based for statements
+inline _LIBCPP_INLINE_VISIBILITY directory_iterator
+begin(directory_iterator __iter) noexcept {
+  return __iter;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY directory_iterator
+end(const directory_iterator&) noexcept {
+  return directory_iterator();
+}
+
+class recursive_directory_iterator {
+public:
+  using value_type = directory_entry;
+  using difference_type = std::ptrdiff_t;
+  using pointer = directory_entry const*;
+  using reference = directory_entry const&;
+  using iterator_category = std::input_iterator_tag;
+
+public:
+  // constructors and destructor
+  _LIBCPP_INLINE_VISIBILITY
+  recursive_directory_iterator() noexcept : __rec_(false) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  explicit recursive_directory_iterator(
+      const path& __p, directory_options __xoptions = directory_options::none)
+      : recursive_directory_iterator(__p, __xoptions, nullptr) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  recursive_directory_iterator(const path& __p, directory_options __xoptions,
+                               error_code& __ec)
+      : recursive_directory_iterator(__p, __xoptions, &__ec) {}
+
+  _LIBCPP_INLINE_VISIBILITY
+  recursive_directory_iterator(const path& __p, error_code& __ec)
+      : recursive_directory_iterator(__p, directory_options::none, &__ec) {}
+
+  recursive_directory_iterator(const recursive_directory_iterator&) = default;
+  recursive_directory_iterator(recursive_directory_iterator&&) = default;
+
+  recursive_directory_iterator&
+  operator=(const recursive_directory_iterator&) = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  recursive_directory_iterator&
+  operator=(recursive_directory_iterator&& __o) noexcept {
+    // non-default implementation provided to support self-move assign.
+    if (this != &__o) {
+      __imp_ = _VSTD::move(__o.__imp_);
+      __rec_ = __o.__rec_;
+    }
+    return *this;
+  }
+
+  ~recursive_directory_iterator() = default;
+
+  _LIBCPP_INLINE_VISIBILITY
+  const directory_entry& operator*() const { return __dereference(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  const directory_entry* operator->() const { return &__dereference(); }
+
+  recursive_directory_iterator& operator++() { return __increment(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  __dir_element_proxy operator++(int) {
+    __dir_element_proxy __p(**this);
+    __increment();
+    return __p;
+  }
+
+  _LIBCPP_INLINE_VISIBILITY
+  recursive_directory_iterator& increment(error_code& __ec) {
+    return __increment(&__ec);
+  }
+
+  _LIBCPP_FUNC_VIS directory_options options() const;
+  _LIBCPP_FUNC_VIS int depth() const;
+
+  _LIBCPP_INLINE_VISIBILITY
+  void pop() { __pop(); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void pop(error_code& __ec) { __pop(&__ec); }
+
+  _LIBCPP_INLINE_VISIBILITY
+  bool recursion_pending() const { return __rec_; }
+
+  _LIBCPP_INLINE_VISIBILITY
+  void disable_recursion_pending() { __rec_ = false; }
+
+private:
+  recursive_directory_iterator(const path& __p, directory_options __opt,
+                               error_code* __ec);
+
+  _LIBCPP_FUNC_VIS
+  const directory_entry& __dereference() const;
+
+  _LIBCPP_FUNC_VIS
+  bool __try_recursion(error_code* __ec);
+
+  _LIBCPP_FUNC_VIS
+  void __advance(error_code* __ec = nullptr);
+
+  _LIBCPP_FUNC_VIS
+  recursive_directory_iterator& __increment(error_code* __ec = nullptr);
+
+  _LIBCPP_FUNC_VIS
+  void __pop(error_code* __ec = nullptr);
+
+  inline _LIBCPP_INLINE_VISIBILITY friend bool
+  operator==(const recursive_directory_iterator&,
+             const recursive_directory_iterator&) noexcept;
+
+  struct __shared_imp;
+  shared_ptr<__shared_imp> __imp_;
+  bool __rec_;
+}; // class recursive_directory_iterator
+
+inline _LIBCPP_INLINE_VISIBILITY bool
+operator==(const recursive_directory_iterator& __lhs,
+           const recursive_directory_iterator& __rhs) noexcept {
+  return __lhs.__imp_ == __rhs.__imp_;
+}
+
+_LIBCPP_INLINE_VISIBILITY
+inline bool operator!=(const recursive_directory_iterator& __lhs,
+                       const recursive_directory_iterator& __rhs) noexcept {
+  return !(__lhs == __rhs);
+}
+// enable recursive_directory_iterator range-based for statements
+inline _LIBCPP_INLINE_VISIBILITY recursive_directory_iterator
+begin(recursive_directory_iterator __iter) noexcept {
+  return __iter;
+}
+
+inline _LIBCPP_INLINE_VISIBILITY recursive_directory_iterator
+end(const recursive_directory_iterator&) noexcept {
+  return recursive_directory_iterator();
+}
+
+_LIBCPP_END_NAMESPACE_FILESYSTEM
+
+#endif // !_LIBCPP_CXX03_LANG
+
+_LIBCPP_POP_MACROS
+
+#endif // _LIBCPP_FILESYSTEM
diff --git a/linux-x64/clang/include/c++/v1/float.h b/linux-x64/clang/include/c++/v1/float.h
index 1acfdc6..759ac8e 100644
--- a/linux-x64/clang/include/c++/v1/float.h
+++ b/linux-x64/clang/include/c++/v1/float.h
@@ -24,7 +24,14 @@
     DBL_MANT_DIG
     LDBL_MANT_DIG
 
+    FLT_HAS_SUBNORM     // C11
+    DBL_HAS_SUBNORM     // C11
+    LDBL_HAS_SUBNORM    // C11
+
     DECIMAL_DIG         // C99
+    FLT_DECIMAL_DIG     // C11
+    DBL_DECIMAL_DIG     // C11
+    LDBL_DECIMAL_DIG    // C11
 
     FLT_DIG
     DBL_DIG
@@ -58,6 +65,10 @@
     DBL_MIN
     LDBL_MIN
 
+    FLT_TRUE_MIN        // C11
+    DBL_TRUE_MIN        // C11
+    LDBL_TRUE_MIN       // C11
+
 */
 
 #include <__config>
diff --git a/linux-x64/clang/include/c++/v1/forward_list b/linux-x64/clang/include/c++/v1/forward_list
index 7b82041..571afdc 100644
--- a/linux-x64/clang/include/c++/v1/forward_list
+++ b/linux-x64/clang/include/c++/v1/forward_list
@@ -134,6 +134,11 @@
     void reverse() noexcept;
 };
 
+
+template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+    forward_list(InputIterator, InputIterator, Allocator = Allocator())
+    -> forward_list<typename iterator_traits<InputIterator>::value_type, Allocator>;  // C++17
+
 template <class T, class Allocator>
     bool operator==(const forward_list<T, Allocator>& x,
                     const forward_list<T, Allocator>& y);
@@ -452,6 +457,10 @@
     typedef typename allocator_traits<__begin_node_allocator>::pointer
                                                       __begin_node_pointer;
 
+    static_assert((!is_same<allocator_type, __node_allocator>::value),
+                  "internal allocator type must differ from user-specified "
+                  "type; otherwise overload resolution breaks");
+
     __compressed_pair<__begin_node, __node_allocator> __before_begin_;
 
     _LIBCPP_INLINE_VISIBILITY
@@ -476,9 +485,11 @@
         _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value)
         : __before_begin_(__begin_node()) {}
     _LIBCPP_INLINE_VISIBILITY
-    __forward_list_base(const allocator_type& __a)
+    explicit __forward_list_base(const allocator_type& __a)
         : __before_begin_(__begin_node(), __node_allocator(__a)) {}
-
+    _LIBCPP_INLINE_VISIBILITY
+    explicit __forward_list_base(const __node_allocator& __a)
+        : __before_begin_(__begin_node(), __a) {}
 #ifndef _LIBCPP_CXX03_LANG
 public:
     _LIBCPP_INLINE_VISIBILITY
@@ -845,6 +856,23 @@
         __sort(__node_pointer __f, difference_type __sz, _Compare& __comp);
 };
 
+
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Alloc = typename std::allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+forward_list(_InputIterator, _InputIterator)
+  -> forward_list<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+
+template<class _InputIterator,
+         class _Alloc,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+forward_list(_InputIterator, _InputIterator, _Alloc)
+  -> forward_list<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+#endif
+
 template <class _Tp, class _Alloc>
 inline
 forward_list<_Tp, _Alloc>::forward_list(const allocator_type& __a)
@@ -932,12 +960,9 @@
 
 template <class _Tp, class _Alloc>
 forward_list<_Tp, _Alloc>::forward_list(const forward_list& __x)
-    : base(allocator_type(
-             __node_traits::select_on_container_copy_construction(__x.__alloc())
-                         )
-          )
-{
-    insert_after(cbefore_begin(), __x.begin(), __x.end());
+    : base(
+          __node_traits::select_on_container_copy_construction(__x.__alloc())) {
+  insert_after(cbefore_begin(), __x.begin(), __x.end());
 }
 
 template <class _Tp, class _Alloc>
diff --git a/linux-x64/clang/include/c++/v1/fstream b/linux-x64/clang/include/c++/v1/fstream
index 2ef4cf3..332b474 100644
--- a/linux-x64/clang/include/c++/v1/fstream
+++ b/linux-x64/clang/include/c++/v1/fstream
@@ -38,6 +38,7 @@
     bool is_open() const;
     basic_filebuf* open(const char* s, ios_base::openmode mode);
     basic_filebuf* open(const string& s, ios_base::openmode mode);
+    basic_filebuf* open(const filesystem::path& p, ios_base::openmode mode); // C++17
     basic_filebuf* close();
 
 protected:
@@ -77,6 +78,8 @@
     basic_ifstream();
     explicit basic_ifstream(const char* s, ios_base::openmode mode = ios_base::in);
     explicit basic_ifstream(const string& s, ios_base::openmode mode = ios_base::in);
+    explicit basic_ifstream(const filesystem::path& p,
+                            ios_base::openmode mode = ios_base::in); // C++17
     basic_ifstream(basic_ifstream&& rhs);
 
     basic_ifstream& operator=(basic_ifstream&& rhs);
@@ -86,6 +89,8 @@
     bool is_open() const;
     void open(const char* s, ios_base::openmode mode = ios_base::in);
     void open(const string& s, ios_base::openmode mode = ios_base::in);
+    void open(const filesystem::path& s, ios_base::openmode mode = ios_base::in); // C++17
+
     void close();
 };
 
@@ -110,6 +115,8 @@
     basic_ofstream();
     explicit basic_ofstream(const char* s, ios_base::openmode mode = ios_base::out);
     explicit basic_ofstream(const string& s, ios_base::openmode mode = ios_base::out);
+    explicit basic_ofstream(const filesystem::path& p,
+                            ios_base::openmode mode = ios_base::out); // C++17
     basic_ofstream(basic_ofstream&& rhs);
 
     basic_ofstream& operator=(basic_ofstream&& rhs);
@@ -119,6 +126,9 @@
     bool is_open() const;
     void open(const char* s, ios_base::openmode mode = ios_base::out);
     void open(const string& s, ios_base::openmode mode = ios_base::out);
+    void open(const filesystem::path& p,
+              ios_base::openmode mode = ios_base::out); // C++17
+
     void close();
 };
 
@@ -143,6 +153,8 @@
     basic_fstream();
     explicit basic_fstream(const char* s, ios_base::openmode mode = ios_base::in|ios_base::out);
     explicit basic_fstream(const string& s, ios_base::openmode mode = ios_base::in|ios_base::out);
+    explicit basic_fstream(const filesystem::path& p,
+                           ios_base::openmode mode = ios_base::in|ios_base::out); C++17
     basic_fstream(basic_fstream&& rhs);
 
     basic_fstream& operator=(basic_fstream&& rhs);
@@ -152,6 +164,9 @@
     bool is_open() const;
     void open(const char* s, ios_base::openmode mode = ios_base::in|ios_base::out);
     void open(const string& s, ios_base::openmode mode = ios_base::in|ios_base::out);
+    void open(const filesystem::path& s,
+              ios_base::openmode mode = ios_base::in|ios_base::out); // C++17
+
     void close();
 };
 
@@ -170,6 +185,8 @@
 #include <istream>
 #include <__locale>
 #include <cstdio>
+#include <cstdlib>
+#include <filesystem>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
 #pragma GCC system_header
@@ -217,10 +234,23 @@
 #endif
     _LIBCPP_INLINE_VISIBILITY
     basic_filebuf* open(const string& __s, ios_base::openmode __mode);
+
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    basic_filebuf* open(const _VSTD_FS::path& __p, ios_base::openmode __mode) {
+      return open(__p.c_str(), __mode);
+    }
+#endif
+    _LIBCPP_INLINE_VISIBILITY
+    basic_filebuf* __open(int __fd, ios_base::openmode __mode);
 #endif
     basic_filebuf* close();
 
-protected:
+    _LIBCPP_INLINE_VISIBILITY
+    inline static const char*
+    __make_mdstring(ios_base::openmode __mode) _NOEXCEPT;
+
+  protected:
     // 27.9.1.5 Overridden virtual functions:
     virtual int_type underflow();
     virtual int_type pbackfail(int_type __c = traits_type::eof());
@@ -234,25 +264,25 @@
     virtual void imbue(const locale& __loc);
 
 private:
-    char*       __extbuf_;
-    const char* __extbufnext_;
-    const char* __extbufend_;
-    char __extbuf_min_[8];
-    size_t __ebs_;
-    char_type* __intbuf_;
-    size_t __ibs_;
-    FILE* __file_;
-    const codecvt<char_type, char, state_type>* __cv_;
-    state_type __st_;
-    state_type __st_last_;
-    ios_base::openmode __om_;
-    ios_base::openmode __cm_;
-    bool __owns_eb_;
-    bool __owns_ib_;
-    bool __always_noconv_;
+  char* __extbuf_;
+  const char* __extbufnext_;
+  const char* __extbufend_;
+  char __extbuf_min_[8];
+  size_t __ebs_;
+  char_type* __intbuf_;
+  size_t __ibs_;
+  FILE* __file_;
+  const codecvt<char_type, char, state_type>* __cv_;
+  state_type __st_;
+  state_type __st_last_;
+  ios_base::openmode __om_;
+  ios_base::openmode __cm_;
+  bool __owns_eb_;
+  bool __owns_ib_;
+  bool __always_noconv_;
 
-    bool __read_mode();
-    void __write_mode();
+  bool __read_mode();
+  void __write_mode();
 };
 
 template <class _CharT, class _Traits>
@@ -473,6 +503,46 @@
     return __file_ != 0;
 }
 
+template <class _CharT, class _Traits>
+const char* basic_filebuf<_CharT, _Traits>::__make_mdstring(
+    ios_base::openmode __mode) _NOEXCEPT {
+  switch (__mode & ~ios_base::ate) {
+  case ios_base::out:
+  case ios_base::out | ios_base::trunc:
+    return "w";
+  case ios_base::out | ios_base::app:
+  case ios_base::app:
+    return "a";
+  case ios_base::in:
+    return "r";
+  case ios_base::in | ios_base::out:
+    return "r+";
+  case ios_base::in | ios_base::out | ios_base::trunc:
+    return "w+";
+  case ios_base::in | ios_base::out | ios_base::app:
+  case ios_base::in | ios_base::app:
+    return "a+";
+  case ios_base::out | ios_base::binary:
+  case ios_base::out | ios_base::trunc | ios_base::binary:
+    return "wb";
+  case ios_base::out | ios_base::app | ios_base::binary:
+  case ios_base::app | ios_base::binary:
+    return "ab";
+  case ios_base::in | ios_base::binary:
+    return "rb";
+  case ios_base::in | ios_base::out | ios_base::binary:
+    return "r+b";
+  case ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary:
+    return "w+b";
+  case ios_base::in | ios_base::out | ios_base::app | ios_base::binary:
+  case ios_base::in | ios_base::app | ios_base::binary:
+    return "a+b";
+  default:
+    return nullptr;
+  }
+  _LIBCPP_UNREACHABLE();
+}
+
 #ifndef _LIBCPP_HAS_NO_GLOBAL_FILESYSTEM_NAMESPACE
 template <class _CharT, class _Traits>
 basic_filebuf<_CharT, _Traits>*
@@ -481,79 +551,49 @@
     basic_filebuf<_CharT, _Traits>* __rt = 0;
     if (__file_ == 0)
     {
+      if (const char* __mdstr = __make_mdstring(__mode)) {
         __rt = this;
-        const char* __mdstr;
-        switch (__mode & ~ios_base::ate)
-        {
-        case ios_base::out:
-        case ios_base::out | ios_base::trunc:
-            __mdstr = "w";
-            break;
-        case ios_base::out | ios_base::app:
-        case ios_base::app:
-            __mdstr = "a";
-            break;
-        case ios_base::in:
-            __mdstr = "r";
-            break;
-        case ios_base::in | ios_base::out:
-            __mdstr = "r+";
-            break;
-        case ios_base::in | ios_base::out | ios_base::trunc:
-            __mdstr = "w+";
-            break;
-        case ios_base::in | ios_base::out | ios_base::app:
-        case ios_base::in | ios_base::app:
-            __mdstr = "a+";
-            break;
-        case ios_base::out | ios_base::binary:
-        case ios_base::out | ios_base::trunc | ios_base::binary:
-            __mdstr = "wb";
-            break;
-        case ios_base::out | ios_base::app | ios_base::binary:
-        case ios_base::app | ios_base::binary:
-            __mdstr = "ab";
-            break;
-        case ios_base::in | ios_base::binary:
-            __mdstr = "rb";
-            break;
-        case ios_base::in | ios_base::out | ios_base::binary:
-            __mdstr = "r+b";
-            break;
-        case ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary:
-            __mdstr = "w+b";
-            break;
-        case ios_base::in | ios_base::out | ios_base::app | ios_base::binary:
-        case ios_base::in | ios_base::app | ios_base::binary:
-            __mdstr = "a+b";
-            break;
-        default:
-            __rt = 0;
-            break;
-        }
-        if (__rt)
-        {
-            __file_ = fopen(__s, __mdstr);
-            if (__file_)
-            {
-                __om_ = __mode;
-                if (__mode & ios_base::ate)
-                {
-                    if (fseek(__file_, 0, SEEK_END))
-                    {
-                        fclose(__file_);
-                        __file_ = 0;
-                        __rt = 0;
-                    }
-                }
+        __file_ = fopen(__s, __mdstr);
+        if (__file_) {
+          __om_ = __mode;
+          if (__mode & ios_base::ate) {
+            if (fseek(__file_, 0, SEEK_END)) {
+              fclose(__file_);
+              __file_ = 0;
+              __rt = 0;
             }
-            else
-                __rt = 0;
-        }
+          }
+        } else
+          __rt = 0;
+      }
     }
     return __rt;
 }
 
+template <class _CharT, class _Traits>
+_LIBCPP_INLINE_VISIBILITY basic_filebuf<_CharT, _Traits>*
+basic_filebuf<_CharT, _Traits>::__open(int __fd, ios_base::openmode __mode) {
+  basic_filebuf<_CharT, _Traits>* __rt = 0;
+  if (__file_ == 0) {
+    if (const char* __mdstr = __make_mdstring(__mode)) {
+      __rt = this;
+      __file_ = fdopen(__fd, __mdstr);
+      if (__file_) {
+        __om_ = __mode;
+        if (__mode & ios_base::ate) {
+          if (fseek(__file_, 0, SEEK_END)) {
+            fclose(__file_);
+            __file_ = 0;
+            __rt = 0;
+          }
+        }
+      } else
+        __rt = 0;
+    }
+  }
+  return __rt;
+}
+
 #ifdef _LIBCPP_HAS_OPEN_WITH_WCHAR
 // This is basically the same as the char* overload except that it uses _wfopen
 // and long mode strings.
@@ -1110,6 +1150,11 @@
 #endif
     _LIBCPP_INLINE_VISIBILITY
     explicit basic_ifstream(const string& __s, ios_base::openmode __mode = ios_base::in);
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    explicit basic_ifstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in)
+      : basic_ifstream(__p.c_str(), __mode) {}
+#endif // _LIBCPP_STD_VER >= 17
 #endif
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
@@ -1131,6 +1176,16 @@
     void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in);
 #endif
     void open(const string& __s, ios_base::openmode __mode = ios_base::in);
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    void open(const filesystem::path& __p,
+              ios_base::openmode __mode = ios_base::in) {
+      return open(__p.c_str(), __mode);
+    }
+#endif // _LIBCPP_STD_VER >= 17
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __open(int __fd, ios_base::openmode __mode);
 #endif
     _LIBCPP_INLINE_VISIBILITY
     void close();
@@ -1265,6 +1320,15 @@
     else
         this->setstate(ios_base::failbit);
 }
+
+template <class _CharT, class _Traits>
+void basic_ifstream<_CharT, _Traits>::__open(int __fd,
+                                             ios_base::openmode __mode) {
+  if (__sb_.__open(__fd, __mode | ios_base::in))
+    this->clear();
+  else
+    this->setstate(ios_base::failbit);
+}
 #endif
 
 template <class _CharT, class _Traits>
@@ -1299,6 +1363,13 @@
 #endif
     _LIBCPP_INLINE_VISIBILITY
     explicit basic_ofstream(const string& __s, ios_base::openmode __mode = ios_base::out);
+
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    explicit basic_ofstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out)
+      : basic_ofstream(__p.c_str(), __mode) {}
+#endif // _LIBCPP_STD_VER >= 17
+
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     basic_ofstream(basic_ofstream&& __rhs);
@@ -1319,6 +1390,15 @@
     void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::out);
 #endif
     void open(const string& __s, ios_base::openmode __mode = ios_base::out);
+
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::out)
+    { return open(__p.c_str(), __mode); }
+#endif // _LIBCPP_STD_VER >= 17
+
+    _LIBCPP_INLINE_VISIBILITY
+    void __open(int __fd, ios_base::openmode __mode);
 #endif
     _LIBCPP_INLINE_VISIBILITY
     void close();
@@ -1453,6 +1533,15 @@
     else
         this->setstate(ios_base::failbit);
 }
+
+template <class _CharT, class _Traits>
+void basic_ofstream<_CharT, _Traits>::__open(int __fd,
+                                             ios_base::openmode __mode) {
+  if (__sb_.__open(__fd, __mode | ios_base::out))
+    this->clear();
+  else
+    this->setstate(ios_base::failbit);
+}
 #endif
 
 template <class _CharT, class _Traits>
@@ -1488,6 +1577,13 @@
 #endif
     _LIBCPP_INLINE_VISIBILITY
     explicit basic_fstream(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
+
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    explicit basic_fstream(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in | ios_base::out)
+      : basic_fstream(__p.c_str(), __mode) {}
+#endif // _LIBCPP_STD_VER >= 17
+
 #endif
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
@@ -1509,6 +1605,13 @@
     void open(const wchar_t* __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
 #endif
     void open(const string& __s, ios_base::openmode __mode = ios_base::in | ios_base::out);
+
+#if _LIBCPP_STD_VER >= 17
+    _LIBCPP_INLINE_VISIBILITY
+    void open(const filesystem::path& __p, ios_base::openmode __mode = ios_base::in|ios_base::out)
+    { return open(__p.c_str(), __mode); }
+#endif // _LIBCPP_STD_VER >= 17
+
 #endif
     _LIBCPP_INLINE_VISIBILITY
     void close();
diff --git a/linux-x64/clang/include/c++/v1/functional b/linux-x64/clang/include/c++/v1/functional
index e45beb8..b91fd75 100644
--- a/linux-x64/clang/include/c++/v1/functional
+++ b/linux-x64/clang/include/c++/v1/functional
@@ -1006,7 +1006,7 @@
 {
     _Predicate __pred_;
 public:
-    _LIBCPP_INLINE_VISIBILITY explicit _LIBCPP_CONSTEXPR_AFTER_CXX11 
+    _LIBCPP_INLINE_VISIBILITY explicit _LIBCPP_CONSTEXPR_AFTER_CXX11
     binary_negate(const _Predicate& __pred) : __pred_(__pred) {}
 
     _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY
@@ -1399,13 +1399,13 @@
 #endif
 };
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_bad_function_call()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw bad_function_call();
 #else
-	_VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
@@ -1790,7 +1790,7 @@
         typedef __function::__func<_Fp, _Alloc, _Rp(_ArgTypes...)> _FF;
         typedef typename __rebind_alloc_helper<__alloc_traits, _FF>::type _Ap;
         _Ap __a(__a0);
-        if (sizeof(_FF) <= sizeof(__buf_) && 
+        if (sizeof(_FF) <= sizeof(__buf_) &&
             is_nothrow_copy_constructible<_Fp>::value && is_nothrow_copy_constructible<_Ap>::value)
         {
             __f_ = ::new((void*)&__buf_) _FF(_VSTD::move(__f), _Alloc(__a));
@@ -1818,11 +1818,7 @@
 function<_Rp(_ArgTypes...)>&
 function<_Rp(_ArgTypes...)>::operator=(function&& __f) _NOEXCEPT
 {
-    if ((void *)__f_ == &__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
-    __f_ = 0;
+    *this = nullptr;
     if (__f.__f_ == 0)
         __f_ = 0;
     else if ((void *)__f.__f_ == &__f.__buf_)
@@ -1842,11 +1838,12 @@
 function<_Rp(_ArgTypes...)>&
 function<_Rp(_ArgTypes...)>::operator=(nullptr_t) _NOEXCEPT
 {
-    if ((void *)__f_ == &__buf_)
-        __f_->destroy();
-    else if (__f_)
-        __f_->destroy_deallocate();
+    __base* __t = __f_;
     __f_ = 0;
+    if ((void *)__t == &__buf_)
+        __t->destroy();
+    else if (__t)
+        __t->destroy_deallocate();
     return *this;
 }
 
@@ -2008,7 +2005,7 @@
 
 template <int _Np> struct __ph {};
 
-#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_BIND)
+#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 _LIBCPP_FUNC_VIS extern const __ph<1>   _1;
 _LIBCPP_FUNC_VIS extern const __ph<2>   _2;
 _LIBCPP_FUNC_VIS extern const __ph<3>   _3;
@@ -2030,7 +2027,7 @@
 /* _LIBCPP_INLINE_VAR */ constexpr __ph<8>   _8{};
 /* _LIBCPP_INLINE_VAR */ constexpr __ph<9>   _9{};
 /* _LIBCPP_INLINE_VAR */ constexpr __ph<10> _10{};
-#endif // defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_BIND)
+#endif // defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 
 }  // placeholders
 
@@ -2500,7 +2497,7 @@
 class _LIBCPP_TYPE_VIS default_searcher {
 public:
     _LIBCPP_INLINE_VISIBILITY
-    default_searcher(_ForwardIterator __f, _ForwardIterator __l, 
+    default_searcher(_ForwardIterator __f, _ForwardIterator __l,
                        _BinaryPredicate __p = _BinaryPredicate())
         : __first_(__f), __last_(__l), __pred_(__p) {}
 
diff --git a/linux-x64/clang/include/c++/v1/future b/linux-x64/clang/include/c++/v1/future
index 536574e..0f6d426 100644
--- a/linux-x64/clang/include/c++/v1/future
+++ b/linux-x64/clang/include/c++/v1/future
@@ -409,7 +409,7 @@
 
 #ifndef _LIBCPP_HAS_NO_STRONG_ENUMS
 
-#ifdef _LIBCXX_UNDERLYING_TYPE
+#ifdef _LIBCPP_UNDERLYING_TYPE
 typedef underlying_type<launch>::type __launch_underlying_type;
 #else
 typedef int __launch_underlying_type;
@@ -514,7 +514,7 @@
     virtual ~future_error() _NOEXCEPT;
 };
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 #ifndef _LIBCPP_NO_EXCEPTIONS
 _LIBCPP_AVAILABILITY_FUTURE_ERROR
 #endif
diff --git a/linux-x64/clang/include/c++/v1/initializer_list b/linux-x64/clang/include/c++/v1/initializer_list
index 8c234aa..b934637 100644
--- a/linux-x64/clang/include/c++/v1/initializer_list
+++ b/linux-x64/clang/include/c++/v1/initializer_list
@@ -61,7 +61,7 @@
     const _Ep* __begin_;
     size_t    __size_;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     initializer_list(const _Ep* __b, size_t __s) _NOEXCEPT
         : __begin_(__b),
@@ -76,19 +76,19 @@
     typedef const _Ep* iterator;
     typedef const _Ep* const_iterator;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     initializer_list() _NOEXCEPT : __begin_(nullptr), __size_(0) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     size_t    size()  const _NOEXCEPT {return __size_;}
     
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     const _Ep* begin() const _NOEXCEPT {return __begin_;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11
     const _Ep* end()   const _NOEXCEPT {return __begin_ + __size_;}
 };
diff --git a/linux-x64/clang/include/c++/v1/ios b/linux-x64/clang/include/c++/v1/ios
index 6e32d0f..040b2d4 100644
--- a/linux-x64/clang/include/c++/v1/ios
+++ b/linux-x64/clang/include/c++/v1/ios
@@ -337,9 +337,9 @@
                }
 
     void init(void* __sb);
-    _LIBCPP_ALWAYS_INLINE void* rdbuf() const {return __rdbuf_;}
+    _LIBCPP_INLINE_VISIBILITY void* rdbuf() const {return __rdbuf_;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void rdbuf(void* __sb)
     {
         __rdbuf_ = __sb;
@@ -351,7 +351,7 @@
     void move(ios_base&);
     void swap(ios_base&) _NOEXCEPT;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void set_rdbuf(void* __sb)
     {
         __rdbuf_ = __sb;
@@ -599,26 +599,26 @@
   // we give it internal linkage.
 
 #if defined(_LIBCPP_CXX03_LANG)
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     operator __cxx03_bool::__bool_type() const {
         return !fail() ? &__cxx03_bool::__true_value : nullptr;
     }
 #else
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_EXPLICIT operator bool() const {return !fail();}
 #endif
 
-    _LIBCPP_ALWAYS_INLINE bool operator!() const    {return  fail();}
-    _LIBCPP_ALWAYS_INLINE iostate rdstate() const   {return ios_base::rdstate();}
-    _LIBCPP_ALWAYS_INLINE void clear(iostate __state = goodbit) {ios_base::clear(__state);}
-    _LIBCPP_ALWAYS_INLINE void setstate(iostate __state) {ios_base::setstate(__state);}
-    _LIBCPP_ALWAYS_INLINE bool good() const {return ios_base::good();}
-    _LIBCPP_ALWAYS_INLINE bool eof() const  {return ios_base::eof();}
-    _LIBCPP_ALWAYS_INLINE bool fail() const {return ios_base::fail();}
-    _LIBCPP_ALWAYS_INLINE bool bad() const  {return ios_base::bad();}
+    _LIBCPP_INLINE_VISIBILITY bool operator!() const    {return  fail();}
+    _LIBCPP_INLINE_VISIBILITY iostate rdstate() const   {return ios_base::rdstate();}
+    _LIBCPP_INLINE_VISIBILITY void clear(iostate __state = goodbit) {ios_base::clear(__state);}
+    _LIBCPP_INLINE_VISIBILITY void setstate(iostate __state) {ios_base::setstate(__state);}
+    _LIBCPP_INLINE_VISIBILITY bool good() const {return ios_base::good();}
+    _LIBCPP_INLINE_VISIBILITY bool eof() const  {return ios_base::eof();}
+    _LIBCPP_INLINE_VISIBILITY bool fail() const {return ios_base::fail();}
+    _LIBCPP_INLINE_VISIBILITY bool bad() const  {return ios_base::bad();}
 
-    _LIBCPP_ALWAYS_INLINE iostate exceptions() const {return ios_base::exceptions();}
-    _LIBCPP_ALWAYS_INLINE void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);}
+    _LIBCPP_INLINE_VISIBILITY iostate exceptions() const {return ios_base::exceptions();}
+    _LIBCPP_INLINE_VISIBILITY void exceptions(iostate __iostate) {ios_base::exceptions(__iostate);}
 
     // 27.5.4.1 Constructor/destructor:
     _LIBCPP_INLINE_VISIBILITY
@@ -652,7 +652,7 @@
     char_type widen(char __c) const;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     basic_ios() {// purposefully does no initialization
                 }
     _LIBCPP_INLINE_VISIBILITY 
@@ -661,7 +661,7 @@
     _LIBCPP_INLINE_VISIBILITY 
     void move(basic_ios& __rhs);
 #ifndef _LIBCPP_CXX03_LANG
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void move(basic_ios&& __rhs) {move(__rhs);}
 #endif
     _LIBCPP_INLINE_VISIBILITY 
diff --git a/linux-x64/clang/include/c++/v1/istream b/linux-x64/clang/include/c++/v1/istream
index f2579c1..71c162b 100644
--- a/linux-x64/clang/include/c++/v1/istream
+++ b/linux-x64/clang/include/c++/v1/istream
@@ -358,381 +358,162 @@
 {
 }
 
-template <class _CharT, class _Traits>
+template <class _Tp, class _CharT, class _Traits>
+_LIBCPP_INLINE_VISIBILITY
 basic_istream<_CharT, _Traits>&
-basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
-{
+__input_arithmetic(basic_istream<_CharT, _Traits>& __is, _Tp& __n) {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     try
     {
 #endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
+        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
         if (__s)
         {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
+            typedef istreambuf_iterator<_CharT, _Traits> _Ip;
+            typedef num_get<_CharT, _Ip> _Fp;
             ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
+            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __n);
+            __is.setstate(__err);
         }
 #ifndef _LIBCPP_NO_EXCEPTIONS
     }
     catch (...)
     {
-        this->__set_badbit_and_consider_rethrow();
+        __is.__set_badbit_and_consider_rethrow();
     }
 #endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return __is;
+}
+
+template <class _CharT, class _Traits>
+basic_istream<_CharT, _Traits>&
+basic_istream<_CharT, _Traits>::operator>>(unsigned short& __n)
+{
+    return _VSTD::__input_arithmetic<unsigned short>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(unsigned int& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<unsigned int>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(long& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<long>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(unsigned long& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<unsigned long>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(long long& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<long long>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(unsigned long long& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<unsigned long long>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(float& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<float>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(double& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<double>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(long double& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<long double>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(bool& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic<bool>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(void*& __n)
 {
+    return _VSTD::__input_arithmetic<void*>(*this, __n);
+}
+
+template <class _Tp, class _CharT, class _Traits>
+_LIBCPP_INLINE_VISIBILITY
+basic_istream<_CharT, _Traits>&
+__input_arithmetic_with_numeric_limits(basic_istream<_CharT, _Traits>& __is, _Tp& __n) {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     try
     {
 #endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
+        typename basic_istream<_CharT, _Traits>::sentry __s(__is);
         if (__s)
         {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
+            typedef istreambuf_iterator<_CharT, _Traits> _Ip;
+            typedef num_get<_CharT, _Ip> _Fp;
             ios_base::iostate __err = ios_base::goodbit;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __n);
-            this->setstate(__err);
+            long __temp;
+            use_facet<_Fp>(__is.getloc()).get(_Ip(__is), _Ip(), __is, __err, __temp);
+            if (__temp < numeric_limits<_Tp>::min())
+            {
+                __err |= ios_base::failbit;
+                __n = numeric_limits<_Tp>::min();
+            }
+            else if (__temp > numeric_limits<_Tp>::max())
+            {
+                __err |= ios_base::failbit;
+                __n = numeric_limits<_Tp>::max();
+            }
+            else
+                __n = static_cast<_Tp>(__temp);
+            __is.setstate(__err);
         }
 #ifndef _LIBCPP_NO_EXCEPTIONS
     }
     catch (...)
     {
-        this->__set_badbit_and_consider_rethrow();
+        __is.__set_badbit_and_consider_rethrow();
     }
 #endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return __is;
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(short& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            long __temp;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
-            if (__temp < numeric_limits<short>::min())
-            {
-                __err |= ios_base::failbit;
-                __n = numeric_limits<short>::min();
-            }
-            else if (__temp > numeric_limits<short>::max())
-            {
-                __err |= ios_base::failbit;
-                __n = numeric_limits<short>::max();
-            }
-            else
-                __n = static_cast<short>(__temp);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic_with_numeric_limits<short>(*this, __n);
 }
 
 template <class _CharT, class _Traits>
 basic_istream<_CharT, _Traits>&
 basic_istream<_CharT, _Traits>::operator>>(int& __n)
 {
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    try
-    {
-#endif  // _LIBCPP_NO_EXCEPTIONS
-        sentry __s(*this);
-        if (__s)
-        {
-            typedef istreambuf_iterator<char_type, traits_type> _Ip;
-            typedef num_get<char_type, _Ip> _Fp;
-            ios_base::iostate __err = ios_base::goodbit;
-            long __temp;
-            use_facet<_Fp>(this->getloc()).get(_Ip(*this), _Ip(), *this, __err, __temp);
-            if (__temp < numeric_limits<int>::min())
-            {
-                __err |= ios_base::failbit;
-                __n = numeric_limits<int>::min();
-            }
-            else if (__temp > numeric_limits<int>::max())
-            {
-                __err |= ios_base::failbit;
-                __n = numeric_limits<int>::max();
-            }
-            else
-                __n = static_cast<int>(__temp);
-            this->setstate(__err);
-        }
-#ifndef _LIBCPP_NO_EXCEPTIONS
-    }
-    catch (...)
-    {
-        this->__set_badbit_and_consider_rethrow();
-    }
-#endif  // _LIBCPP_NO_EXCEPTIONS
-    return *this;
+    return _VSTD::__input_arithmetic_with_numeric_limits<int>(*this, __n);
 }
 
 template<class _CharT, class _Traits>
diff --git a/linux-x64/clang/include/c++/v1/iterator b/linux-x64/clang/include/c++/v1/iterator
index 8b887db..9415e0b 100644
--- a/linux-x64/clang/include/c++/v1/iterator
+++ b/linux-x64/clang/include/c++/v1/iterator
@@ -1217,38 +1217,38 @@
 template <class _Iter> class __wrap_iter;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Iter1, class _Iter2>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 auto
 operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 -> decltype(__x.base() - __y.base());
@@ -1260,7 +1260,7 @@
 #endif
 
 template <class _Iter>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 __wrap_iter<_Iter>
 operator+(typename __wrap_iter<_Iter>::difference_type, __wrap_iter<_Iter>) _NOEXCEPT_DEBUG;
 
@@ -1272,7 +1272,7 @@
 #if _LIBCPP_DEBUG_LEVEL < 2
 
 template <class _Tp>
-_LIBCPP_INLINE_VISIBILITY
+_LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename enable_if
 <
     is_trivially_copy_assignable<_Tp>::value,
@@ -1283,7 +1283,7 @@
 #else
 
 template <class _Tp>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename enable_if
 <
     is_trivially_copy_assignable<_Tp>::value,
@@ -1306,7 +1306,7 @@
 private:
     iterator_type __i;
 public:
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter() _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter() _NOEXCEPT_DEBUG
 #if _LIBCPP_STD_VER > 11
                 : __i{}
 #endif
@@ -1315,22 +1315,23 @@
         __get_db()->__insert_i(this);
 #endif
     }
-    template <class _Up> _LIBCPP_INLINE_VISIBILITY __wrap_iter(const __wrap_iter<_Up>& __u,
-        typename enable_if<is_convertible<_Up, iterator_type>::value>::type* = 0) _NOEXCEPT_DEBUG
-        : __i(__u.base())
+    template <class _Up> _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
+        __wrap_iter(const __wrap_iter<_Up>& __u,
+            typename enable_if<is_convertible<_Up, iterator_type>::value>::type* = 0) _NOEXCEPT_DEBUG
+            : __i(__u.base())
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         __get_db()->__iterator_copy(this, &__u);
 #endif
     }
 #if _LIBCPP_DEBUG_LEVEL >= 2
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
     __wrap_iter(const __wrap_iter& __x)
         : __i(__x.base())
     {
         __get_db()->__iterator_copy(this, &__x);
     }
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
     __wrap_iter& operator=(const __wrap_iter& __x)
     {
         if (this != &__x)
@@ -1340,13 +1341,13 @@
         }
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
     ~__wrap_iter()
     {
         __get_db()->__erase_i(this);
     }
 #endif
-    _LIBCPP_INLINE_VISIBILITY reference operator*() const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference operator*() const _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1354,7 +1355,7 @@
 #endif
         return *__i;
     }
-    _LIBCPP_INLINE_VISIBILITY pointer  operator->() const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG pointer  operator->() const _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1362,7 +1363,7 @@
 #endif
         return (pointer)_VSTD::addressof(*__i);
     }
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter& operator++() _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator++() _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this),
@@ -1371,9 +1372,10 @@
         ++__i;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter  operator++(int) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator++(int) _NOEXCEPT_DEBUG
         {__wrap_iter __tmp(*this); ++(*this); return __tmp;}
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter& operator--() _NOEXCEPT_DEBUG
+
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator--() _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__decrementable(this),
@@ -1382,11 +1384,11 @@
         --__i;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter  operator--(int) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator--(int) _NOEXCEPT_DEBUG
         {__wrap_iter __tmp(*this); --(*this); return __tmp;}
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter  operator+ (difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator+ (difference_type __n) const _NOEXCEPT_DEBUG
         {__wrap_iter __w(*this); __w += __n; return __w;}
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter& operator+=(difference_type __n) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator+=(difference_type __n) _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__addable(this, __n),
@@ -1395,11 +1397,11 @@
         __i += __n;
         return *this;
     }
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter  operator- (difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter  operator- (difference_type __n) const _NOEXCEPT_DEBUG
         {return *this + (-__n);}
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter& operator-=(difference_type __n) _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter& operator-=(difference_type __n) _NOEXCEPT_DEBUG
         {*this += -__n; return *this;}
-    _LIBCPP_INLINE_VISIBILITY reference        operator[](difference_type __n) const _NOEXCEPT_DEBUG
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG reference    operator[](difference_type __n) const _NOEXCEPT_DEBUG
     {
 #if _LIBCPP_DEBUG_LEVEL >= 2
         _LIBCPP_ASSERT(__get_const_db()->__subscriptable(this, __n),
@@ -1408,67 +1410,68 @@
         return __i[__n];
     }
 
-    _LIBCPP_INLINE_VISIBILITY iterator_type base() const _NOEXCEPT_DEBUG {return __i;}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG iterator_type base() const _NOEXCEPT_DEBUG {return __i;}
 
 private:
 #if _LIBCPP_DEBUG_LEVEL >= 2
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter(const void* __p, iterator_type __x) : __i(__x)
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter(const void* __p, iterator_type __x) : __i(__x)
     {
         __get_db()->__insert_ic(this, __p);
     }
 #else
-    _LIBCPP_INLINE_VISIBILITY __wrap_iter(iterator_type __x) _NOEXCEPT_DEBUG : __i(__x) {}
+    _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG __wrap_iter(iterator_type __x) _NOEXCEPT_DEBUG : __i(__x) {}
 #endif
 
     template <class _Up> friend class __wrap_iter;
     template <class _CharT, class _Traits, class _Alloc> friend class basic_string;
     template <class _Tp, class _Alloc> friend class _LIBCPP_TEMPLATE_VIS vector;
+    template <class _Tp, ptrdiff_t> friend class _LIBCPP_TEMPLATE_VIS span;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator==(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator<(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator!=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator>(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator>=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     bool
     operator<=(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 
 #ifndef _LIBCPP_CXX03_LANG
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     auto
     operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
     -> decltype(__x.base() - __y.base());
 #else
     template <class _Iter1, class _Iter2>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     typename __wrap_iter<_Iter1>::difference_type
     operator-(const __wrap_iter<_Iter1>&, const __wrap_iter<_Iter2>&) _NOEXCEPT_DEBUG;
 #endif
 
     template <class _Iter1>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     __wrap_iter<_Iter1>
     operator+(typename __wrap_iter<_Iter1>::difference_type, __wrap_iter<_Iter1>) _NOEXCEPT_DEBUG;
 
@@ -1479,7 +1482,7 @@
 
 #if _LIBCPP_DEBUG_LEVEL < 2
     template <class _Tp>
-    friend
+    _LIBCPP_CONSTEXPR_IF_NODEBUG friend
     typename enable_if
     <
         is_trivially_copy_assignable<_Tp>::value,
@@ -1488,7 +1491,7 @@
     __unwrap_iter(__wrap_iter<_Tp*>);
 #else
   template <class _Tp>
-  inline _LIBCPP_INLINE_VISIBILITY
+  inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
   typename enable_if
   <
       is_trivially_copy_assignable<_Tp>::value,
@@ -1499,7 +1502,7 @@
 };
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator==(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1507,7 +1510,7 @@
 }
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator<(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1519,7 +1522,7 @@
 }
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1527,7 +1530,7 @@
 }
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1535,7 +1538,7 @@
 }
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1543,7 +1546,7 @@
 }
 
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1551,7 +1554,7 @@
 }
 
 template <class _Iter1>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator!=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
 {
@@ -1559,7 +1562,7 @@
 }
 
 template <class _Iter1>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
 {
@@ -1567,7 +1570,7 @@
 }
 
 template <class _Iter1>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
 {
@@ -1575,7 +1578,7 @@
 }
 
 template <class _Iter1>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 bool
 operator<=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter1>& __y) _NOEXCEPT_DEBUG
 {
@@ -1584,7 +1587,7 @@
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 auto
 operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 -> decltype(__x.base() - __y.base())
@@ -1597,7 +1600,7 @@
 }
 #else
 template <class _Iter1, class _Iter2>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 typename __wrap_iter<_Iter1>::difference_type
 operator-(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT_DEBUG
 {
@@ -1610,7 +1613,7 @@
 #endif
 
 template <class _Iter>
-inline _LIBCPP_INLINE_VISIBILITY
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR_IF_NODEBUG
 __wrap_iter<_Iter>
 operator+(typename __wrap_iter<_Iter>::difference_type __n,
           __wrap_iter<_Iter> __x) _NOEXCEPT_DEBUG
diff --git a/linux-x64/clang/include/c++/v1/list b/linux-x64/clang/include/c++/v1/list
index f884b16..d2e78cd 100644
--- a/linux-x64/clang/include/c++/v1/list
+++ b/linux-x64/clang/include/c++/v1/list
@@ -147,6 +147,11 @@
     void reverse() noexcept;
 };
 
+
+template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+    list(InputIterator, InputIterator, Allocator = Allocator())
+    -> list<typename iterator_traits<InputIterator>::value_type, Allocator>;  // C++17
+
 template <class T, class Alloc>
     bool operator==(const list<T,Alloc>& x, const list<T,Alloc>& y);
 template <class T, class Alloc>
@@ -527,11 +532,12 @@
 {
     __list_imp(const __list_imp&);
     __list_imp& operator=(const __list_imp&);
-protected:
-    typedef _Tp                                                     value_type;
+public:
     typedef _Alloc                                                  allocator_type;
     typedef allocator_traits<allocator_type>                        __alloc_traits;
     typedef typename __alloc_traits::size_type                      size_type;
+protected:
+    typedef _Tp                                                     value_type;
     typedef typename __alloc_traits::void_pointer                   __void_pointer;
     typedef __list_iterator<value_type, __void_pointer>             iterator;
     typedef __list_const_iterator<value_type, __void_pointer>       const_iterator;
@@ -550,6 +556,9 @@
 
     typedef typename __rebind_alloc_helper<__alloc_traits, __node_base>::type __node_base_allocator;
     typedef typename allocator_traits<__node_base_allocator>::pointer __node_base_pointer;
+    static_assert((!is_same<allocator_type, __node_allocator>::value),
+                  "internal allocator type must differ from user-specified "
+                  "type; otherwise overload resolution breaks");
 
     __node_base __end_;
     __compressed_pair<size_type, __node_allocator> __size_alloc_;
@@ -584,6 +593,11 @@
         _NOEXCEPT_(is_nothrow_default_constructible<__node_allocator>::value);
     _LIBCPP_INLINE_VISIBILITY
     __list_imp(const allocator_type& __a);
+    _LIBCPP_INLINE_VISIBILITY
+    __list_imp(const __node_allocator& __a);
+#ifndef _LIBCPP_CXX03_LANG
+    __list_imp(__node_allocator&& __a) _NOEXCEPT;
+#endif
     ~__list_imp();
     void clear() _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
@@ -707,9 +721,18 @@
 }
 
 template <class _Tp, class _Alloc>
-__list_imp<_Tp, _Alloc>::~__list_imp()
-{
-    clear();
+inline __list_imp<_Tp, _Alloc>::__list_imp(const __node_allocator& __a)
+    : __size_alloc_(0, __a) {}
+
+#ifndef _LIBCPP_CXX03_LANG
+template <class _Tp, class _Alloc>
+inline __list_imp<_Tp, _Alloc>::__list_imp(__node_allocator&& __a) _NOEXCEPT
+    : __size_alloc_(0, std::move(__a)) {}
+#endif
+
+template <class _Tp, class _Alloc>
+__list_imp<_Tp, _Alloc>::~__list_imp() {
+  clear();
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__erase_c(this);
 #endif
@@ -1106,6 +1129,22 @@
     void __move_assign(list& __c, false_type);
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Alloc = typename std::allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+list(_InputIterator, _InputIterator)
+  -> list<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+
+template<class _InputIterator,
+         class _Alloc,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+list(_InputIterator, _InputIterator, _Alloc)
+  -> list<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+#endif
+
 // Link in nodes [__f, __l] just prior to __p
 template <class _Tp, class _Alloc>
 inline
@@ -1226,10 +1265,8 @@
 
 template <class _Tp, class _Alloc>
 list<_Tp, _Alloc>::list(const list& __c)
-    : base(allocator_type(
-           __node_alloc_traits::select_on_container_copy_construction(
-                __c.__node_alloc())))
-{
+    : base(__node_alloc_traits::select_on_container_copy_construction(
+          __c.__node_alloc())) {
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
 #endif
@@ -1274,11 +1311,9 @@
 }
 
 template <class _Tp, class _Alloc>
-inline
-list<_Tp, _Alloc>::list(list&& __c)
+inline list<_Tp, _Alloc>::list(list&& __c)
     _NOEXCEPT_(is_nothrow_move_constructible<__node_allocator>::value)
-    : base(allocator_type(_VSTD::move(__c.__node_alloc())))
-{
+    : base(_VSTD::move(__c.__node_alloc())) {
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
 #endif
diff --git a/linux-x64/clang/include/c++/v1/locale b/linux-x64/clang/include/c++/v1/locale
index 52885b7..e240799 100644
--- a/linux-x64/clang/include/c++/v1/locale
+++ b/linux-x64/clang/include/c++/v1/locale
@@ -573,81 +573,81 @@
     typedef _CharT char_type;
     typedef _InputIterator iter_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit num_get(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, bool& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, long& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, long long& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, unsigned short& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, unsigned int& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, unsigned long& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, unsigned long long& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, float& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, double& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, long double& __v) const
     {
         return do_get(__b, __e, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, void*& __v) const
     {
@@ -657,7 +657,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~num_get() {}
 
     template <class _Fp>
@@ -1261,60 +1261,60 @@
     typedef _CharT char_type;
     typedef _OutputIterator iter_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit num_put(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   bool __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   long __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   long long __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   unsigned long __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   unsigned long long __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   double __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   long double __v) const
     {
         return do_put(__s, __iob, __fl, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   const void* __v) const
     {
@@ -1324,7 +1324,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~num_put() {}
 
     virtual iter_type do_put(iter_type __s, ios_base& __iob, char_type __fl,
@@ -1738,7 +1738,7 @@
     virtual const string_type& __x() const;
     virtual const string_type& __X() const;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~__time_get_c_storage() {}
 };
 
@@ -1770,52 +1770,52 @@
     typedef time_base::dateorder    dateorder;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_get(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     dateorder date_order() const
     {
         return this->do_date_order();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get_time(iter_type __b, iter_type __e, ios_base& __iob,
                        ios_base::iostate& __err, tm* __tm) const
     {
         return do_get_time(__b, __e, __iob, __err, __tm);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get_date(iter_type __b, iter_type __e, ios_base& __iob,
                        ios_base::iostate& __err, tm* __tm) const
     {
         return do_get_date(__b, __e, __iob, __err, __tm);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get_weekday(iter_type __b, iter_type __e, ios_base& __iob,
                           ios_base::iostate& __err, tm* __tm) const
     {
         return do_get_weekday(__b, __e, __iob, __err, __tm);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get_monthname(iter_type __b, iter_type __e, ios_base& __iob,
                             ios_base::iostate& __err, tm* __tm) const
     {
         return do_get_monthname(__b, __e, __iob, __err, __tm);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get_year(iter_type __b, iter_type __e, ios_base& __iob,
                        ios_base::iostate& __err, tm* __tm) const
     {
         return do_get_year(__b, __e, __iob, __err, __tm);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, ios_base& __iob,
                   ios_base::iostate& __err, tm *__tm,
                   char __fmt, char __mod = 0) const
@@ -1830,7 +1830,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~time_get() {}
 
     virtual dateorder do_date_order() const;
@@ -2399,7 +2399,7 @@
     explicit __time_get_storage(const char* __nm);
     explicit __time_get_storage(const string& __nm);
 
-    _LIBCPP_ALWAYS_INLINE ~__time_get_storage() {}
+    _LIBCPP_INLINE_VISIBILITY ~__time_get_storage() {}
 
     time_base::dateorder __do_date_order() const;
 
@@ -2458,7 +2458,7 @@
 {
     locale_t __loc_;
 protected:
-    _LIBCPP_ALWAYS_INLINE __time_put() : __loc_(_LIBCPP_GET_C_LOCALE) {}
+    _LIBCPP_INLINE_VISIBILITY __time_put() : __loc_(_LIBCPP_GET_C_LOCALE) {}
     __time_put(const char* __nm);
     __time_put(const string& __nm);
     ~__time_put();
@@ -2477,14 +2477,14 @@
     typedef _CharT char_type;
     typedef _OutputIterator iter_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_put(size_t __refs = 0)
         : locale::facet(__refs) {}
 
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl, const tm* __tm,
                   const char_type* __pb, const char_type* __pe) const;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, ios_base& __iob, char_type __fl,
                   const tm* __tm, char __fmt, char __mod = 0) const
     {
@@ -2494,16 +2494,16 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~time_put() {}
     virtual iter_type do_put(iter_type __s, ios_base&, char_type, const tm* __tm,
                              char __fmt, char __mod) const;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_put(const char* __nm, size_t __refs)
         : locale::facet(__refs),
           __time_put(__nm) {}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_put(const string& __nm, size_t __refs)
         : locale::facet(__refs),
           __time_put(__nm) {}
@@ -2572,16 +2572,16 @@
     : public time_put<_CharT, _OutputIterator>
 {
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_put_byname(const char* __nm, size_t __refs = 0)
         : time_put<_CharT, _OutputIterator>(__nm, __refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit time_put_byname(const string& __nm, size_t __refs = 0)
         : time_put<_CharT, _OutputIterator>(__nm, __refs) {}
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~time_put_byname() {}
 };
 
@@ -2596,7 +2596,7 @@
     enum part {none, space, symbol, sign, value};
     struct pattern {char field[4];};
 
-    _LIBCPP_ALWAYS_INLINE money_base() {}
+    _LIBCPP_INLINE_VISIBILITY money_base() {}
 };
 
 // moneypunct
@@ -2610,25 +2610,25 @@
     typedef _CharT                  char_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit moneypunct(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE char_type   decimal_point() const {return do_decimal_point();}
-    _LIBCPP_ALWAYS_INLINE char_type   thousands_sep() const {return do_thousands_sep();}
-    _LIBCPP_ALWAYS_INLINE string      grouping()      const {return do_grouping();}
-    _LIBCPP_ALWAYS_INLINE string_type curr_symbol()   const {return do_curr_symbol();}
-    _LIBCPP_ALWAYS_INLINE string_type positive_sign() const {return do_positive_sign();}
-    _LIBCPP_ALWAYS_INLINE string_type negative_sign() const {return do_negative_sign();}
-    _LIBCPP_ALWAYS_INLINE int         frac_digits()   const {return do_frac_digits();}
-    _LIBCPP_ALWAYS_INLINE pattern     pos_format()    const {return do_pos_format();}
-    _LIBCPP_ALWAYS_INLINE pattern     neg_format()    const {return do_neg_format();}
+    _LIBCPP_INLINE_VISIBILITY char_type   decimal_point() const {return do_decimal_point();}
+    _LIBCPP_INLINE_VISIBILITY char_type   thousands_sep() const {return do_thousands_sep();}
+    _LIBCPP_INLINE_VISIBILITY string      grouping()      const {return do_grouping();}
+    _LIBCPP_INLINE_VISIBILITY string_type curr_symbol()   const {return do_curr_symbol();}
+    _LIBCPP_INLINE_VISIBILITY string_type positive_sign() const {return do_positive_sign();}
+    _LIBCPP_INLINE_VISIBILITY string_type negative_sign() const {return do_negative_sign();}
+    _LIBCPP_INLINE_VISIBILITY int         frac_digits()   const {return do_frac_digits();}
+    _LIBCPP_INLINE_VISIBILITY pattern     pos_format()    const {return do_pos_format();}
+    _LIBCPP_INLINE_VISIBILITY pattern     neg_format()    const {return do_neg_format();}
 
     static locale::id id;
     static const bool intl = _International;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~moneypunct() {}
 
     virtual char_type   do_decimal_point() const {return numeric_limits<char_type>::max();}
@@ -2668,16 +2668,16 @@
     typedef _CharT                  char_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit moneypunct_byname(const char* __nm, size_t __refs = 0)
         : moneypunct<_CharT, _International>(__refs) {init(__nm);}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit moneypunct_byname(const string& __nm, size_t __refs = 0)
         : moneypunct<_CharT, _International>(__refs) {init(__nm.c_str());}
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~moneypunct_byname() {}
 
     virtual char_type   do_decimal_point() const {return __decimal_point_;}
@@ -2723,7 +2723,7 @@
     typedef _CharT                  char_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE __money_get() {}
+    _LIBCPP_INLINE_VISIBILITY __money_get() {}
 
     static void __gather_info(bool __intl, const locale& __loc,
                               money_base::pattern& __pat, char_type& __dp,
@@ -2781,18 +2781,18 @@
     typedef _InputIterator          iter_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit money_get(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, bool __intl, ios_base& __iob,
                   ios_base::iostate& __err, long double& __v) const
     {
         return do_get(__b, __e, __intl, __iob, __err, __v);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type get(iter_type __b, iter_type __e, bool __intl, ios_base& __iob,
                   ios_base::iostate& __err, string_type& __v) const
     {
@@ -2803,7 +2803,7 @@
 
 protected:
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~money_get() {}
 
     virtual iter_type do_get(iter_type __b, iter_type __e, bool __intl,
@@ -3163,7 +3163,7 @@
     typedef _CharT                  char_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE __money_put() {}
+    _LIBCPP_INLINE_VISIBILITY __money_put() {}
 
     static void __gather_info(bool __intl, bool __neg, const locale& __loc,
                               money_base::pattern& __pat, char_type& __dp,
@@ -3339,18 +3339,18 @@
     typedef _OutputIterator         iter_type;
     typedef basic_string<char_type> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit money_put(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, bool __intl, ios_base& __iob, char_type __fl,
                   long double __units) const
     {
         return do_put(__s, __intl, __iob, __fl, __units);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     iter_type put(iter_type __s, bool __intl, ios_base& __iob, char_type __fl,
                   const string_type& __digits) const
     {
@@ -3360,7 +3360,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~money_put() {}
 
     virtual iter_type do_put(iter_type __s, bool __intl, ios_base& __iob,
@@ -3489,7 +3489,7 @@
 public:
     typedef ptrdiff_t catalog;
 
-    _LIBCPP_ALWAYS_INLINE messages_base() {}
+    _LIBCPP_INLINE_VISIBILITY messages_base() {}
 };
 
 template <class _CharT>
@@ -3501,24 +3501,24 @@
     typedef _CharT               char_type;
     typedef basic_string<_CharT> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit messages(size_t __refs = 0)
         : locale::facet(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     catalog open(const basic_string<char>& __nm, const locale& __loc) const
     {
         return do_open(__nm, __loc);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     string_type get(catalog __c, int __set, int __msgid,
                     const string_type& __dflt) const
     {
         return do_get(__c, __set, __msgid, __dflt);
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void close(catalog __c) const
     {
         do_close(__c);
@@ -3527,7 +3527,7 @@
     static locale::id id;
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~messages() {}
 
     virtual catalog do_open(const basic_string<char>&, const locale&) const;
@@ -3600,16 +3600,16 @@
     typedef messages_base::catalog catalog;
     typedef basic_string<_CharT> string_type;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit messages_byname(const char*, size_t __refs = 0)
         : messages<_CharT>(__refs) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     explicit messages_byname(const string&, size_t __refs = 0)
         : messages<_CharT>(__refs) {}
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     ~messages_byname() {}
 };
 
@@ -3637,43 +3637,43 @@
     wstring_convert(const wstring_convert& __wc);
     wstring_convert& operator=(const wstring_convert& __wc);
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_EXPLICIT_AFTER_CXX11 wstring_convert(_Codecvt* __pcvt = new _Codecvt);
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     wstring_convert(_Codecvt* __pcvt, state_type __state);
     _LIBCPP_EXPLICIT_AFTER_CXX11 wstring_convert(const byte_string& __byte_err,
                     const wide_string& __wide_err = wide_string());
 #ifndef _LIBCPP_CXX03_LANG
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     wstring_convert(wstring_convert&& __wc);
 #endif
     ~wstring_convert();
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     wide_string from_bytes(char __byte)
         {return from_bytes(&__byte, &__byte+1);}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     wide_string from_bytes(const char* __ptr)
         {return from_bytes(__ptr, __ptr + char_traits<char>::length(__ptr));}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     wide_string from_bytes(const byte_string& __str)
         {return from_bytes(__str.data(), __str.data() + __str.size());}
     wide_string from_bytes(const char* __first, const char* __last);
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     byte_string to_bytes(_Elem __wchar)
         {return to_bytes(&__wchar, &__wchar+1);}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     byte_string to_bytes(const _Elem* __wptr)
         {return to_bytes(__wptr, __wptr + char_traits<_Elem>::length(__wptr));}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     byte_string to_bytes(const wide_string& __wstr)
         {return to_bytes(__wstr.data(), __wstr.data() + __wstr.size());}
     byte_string to_bytes(const _Elem* __first, const _Elem* __last);
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     size_t converted() const _NOEXCEPT {return __cvtcount_;}
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     state_type state() const {return __cvtstate_;}
 };
 
diff --git a/linux-x64/clang/include/c++/v1/map b/linux-x64/clang/include/c++/v1/map
index 8a72260..559ec48 100644
--- a/linux-x64/clang/include/c++/v1/map
+++ b/linux-x64/clang/include/c++/v1/map
@@ -40,6 +40,8 @@
     typedef implementation-defined                   const_iterator;
     typedef std::reverse_iterator<iterator>          reverse_iterator;
     typedef std::reverse_iterator<const_iterator>    const_reverse_iterator;
+    typedef unspecified                              node_type;              // C++17
+    typedef INSERT_RETURN_TYPE<iterator, node_type>  insert_return_type;     // C++17
 
     class value_compare
         : public binary_function<value_type, value_type, bool>
@@ -137,6 +139,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type> il);
 
+    node_type extract(const_iterator position);                                       // C++17
+    node_type extract(const key_type& x);                                             // C++17
+    insert_return_type insert(node_type&& nh);                                        // C++17
+    iterator insert(const_iterator hint, node_type&& nh);                             // C++17
+
     template <class... Args>
         pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);          // C++17
     template <class... Args>
@@ -260,6 +267,7 @@
     typedef implementation-defined                   const_iterator;
     typedef std::reverse_iterator<iterator>          reverse_iterator;
     typedef std::reverse_iterator<const_iterator>    const_reverse_iterator;
+    typedef unspecified                              node_type;              // C++17
 
     class value_compare
         : public binary_function<value_type,value_type,bool>
@@ -349,6 +357,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type> il);
 
+    node_type extract(const_iterator position);                                       // C++17
+    node_type extract(const key_type& x);                                             // C++17
+    iterator insert(node_type&& nh);                                                  // C++17
+    iterator insert(const_iterator hint, node_type&& nh);                             // C++17
+
     iterator  erase(const_iterator position);
     iterator  erase(iterator position); // C++14
     size_type erase(const key_type& k);
@@ -440,6 +453,7 @@
 
 #include <__config>
 #include <__tree>
+#include <__node_handle>
 #include <iterator>
 #include <memory>
 #include <utility>
@@ -470,13 +484,13 @@
     const _Compare& key_comp() const _NOEXCEPT {return *this;}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _CP& __x, const _CP& __y) const
-        {return static_cast<const _Compare&>(*this)(__x.__cc.first, __y.__cc.first);}
+        {return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _CP& __x, const _Key& __y) const
-        {return static_cast<const _Compare&>(*this)(__x.__cc.first, __y);}
+        {return static_cast<const _Compare&>(*this)(__x.__get_value().first, __y);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Key& __x, const _CP& __y) const
-        {return static_cast<const _Compare&>(*this)(__x, __y.__cc.first);}
+        {return static_cast<const _Compare&>(*this)(__x, __y.__get_value().first);}
     void swap(__map_value_compare&__y)
         _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value)
     {
@@ -489,13 +503,13 @@
     _LIBCPP_INLINE_VISIBILITY
     typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
     operator () ( const _K2& __x, const _CP& __y ) const
-        {return static_cast<const _Compare&>(*this) (__x, __y.__cc.first);}
+        {return static_cast<const _Compare&>(*this) (__x, __y.__get_value().first);}
 
     template <typename _K2>
     _LIBCPP_INLINE_VISIBILITY
     typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
     operator () (const _CP& __x, const _K2& __y) const
-        {return static_cast<const _Compare&>(*this) (__x.__cc.first, __y);}
+        {return static_cast<const _Compare&>(*this) (__x.__get_value().first, __y);}
 #endif
 };
 
@@ -518,13 +532,13 @@
 
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _CP& __x, const _CP& __y) const
-        {return comp(__x.__cc.first, __y.__cc.first);}
+        {return comp(__x.__get_value().first, __y.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _CP& __x, const _Key& __y) const
-        {return comp(__x.__cc.first, __y);}
+        {return comp(__x.__get_value().first, __y);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Key& __x, const _CP& __y) const
-        {return comp(__x, __y.__cc.first);}
+        {return comp(__x, __y.__get_value().first);}
     void swap(__map_value_compare&__y)
         _NOEXCEPT_(__is_nothrow_swappable<_Compare>::value)
     {
@@ -537,13 +551,13 @@
     _LIBCPP_INLINE_VISIBILITY
     typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
     operator () ( const _K2& __x, const _CP& __y ) const
-        {return comp (__x, __y.__cc.first);}
+        {return comp (__x, __y.__get_value().first);}
 
     template <typename _K2>
     _LIBCPP_INLINE_VISIBILITY
     typename enable_if<__is_transparent<_Compare, _K2>::value, bool>::type
     operator () (const _CP& __x, const _K2& __y) const
-        {return comp (__x.__cc.first, __y);}
+        {return comp (__x.__get_value().first, __y);}
 #endif
 };
 
@@ -597,9 +611,9 @@
     void operator()(pointer __p) _NOEXCEPT
     {
         if (__second_constructed)
-            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.second));
+            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__get_value().second));
         if (__first_constructed)
-            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.first));
+            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__get_value().first));
         if (__p)
             __alloc_traits::deallocate(__na_, __p, 1);
     }
@@ -614,23 +628,67 @@
 #ifndef _LIBCPP_CXX03_LANG
 
 template <class _Key, class _Tp>
-union __value_type
+struct __value_type
 {
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef pair<key_type, mapped_type>              __nc_value_type;
+    typedef pair<key_type&, mapped_type&>            __nc_ref_pair_type;
+    typedef pair<key_type&&, mapped_type&&>          __nc_rref_pair_type;
 
+private:
     value_type __cc;
-    __nc_value_type __nc;
+
+public:
+    _LIBCPP_INLINE_VISIBILITY
+    value_type& __get_value()
+    {
+#if _LIBCPP_STD_VER > 14
+        return *_VSTD::launder(_VSTD::addressof(__cc));
+#else
+        return __cc;
+#endif
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    const value_type& __get_value() const
+    {
+#if _LIBCPP_STD_VER > 14
+        return *_VSTD::launder(_VSTD::addressof(__cc));
+#else
+        return __cc;
+#endif
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __nc_ref_pair_type __ref()
+    {
+        value_type& __v = __get_value();
+        return __nc_ref_pair_type(const_cast<key_type&>(__v.first), __v.second);
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __nc_rref_pair_type __move()
+    {
+        value_type& __v = __get_value();
+        return __nc_rref_pair_type(
+            _VSTD::move(const_cast<key_type&>(__v.first)),
+            _VSTD::move(__v.second));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __value_type& operator=(const __value_type& __v)
-        {__nc = __v.__cc; return *this;}
+    {
+        __ref() = __v.__get_value();
+        return *this;
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __value_type& operator=(__value_type&& __v)
-        {__nc = _VSTD::move(__v.__nc); return *this;}
+    {
+        __ref() = __v.__move();
+        return *this;
+    }
 
     template <class _ValueTp,
               class = typename enable_if<
@@ -638,8 +696,10 @@
                  >::type
              >
     _LIBCPP_INLINE_VISIBILITY
-    __value_type& operator=(_ValueTp&& __v) {
-        __nc = _VSTD::forward<_ValueTp>(__v); return *this;
+    __value_type& operator=(_ValueTp&& __v)
+    {
+        __ref() = _VSTD::forward<_ValueTp>(__v);
+        return *this;
     }
 
 private:
@@ -658,8 +718,15 @@
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
 
+private:
     value_type __cc;
 
+public:
+    _LIBCPP_INLINE_VISIBILITY
+    value_type& __get_value() { return __cc; }
+    _LIBCPP_INLINE_VISIBILITY
+    const value_type& __get_value() const { return __cc; }
+
 private:
    __value_type();
    __value_type(__value_type const&);
@@ -701,9 +768,9 @@
     __map_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {}
 
     _LIBCPP_INLINE_VISIBILITY
-    reference operator*() const {return __i_->__cc;}
+    reference operator*() const {return __i_->__get_value();}
     _LIBCPP_INLINE_VISIBILITY
-    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
+    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
 
     _LIBCPP_INLINE_VISIBILITY
     __map_iterator& operator++() {++__i_; return *this;}
@@ -764,9 +831,9 @@
         : __i_(__i.__i_) {}
 
     _LIBCPP_INLINE_VISIBILITY
-    reference operator*() const {return __i_->__cc;}
+    reference operator*() const {return __i_->__get_value();}
     _LIBCPP_INLINE_VISIBILITY
-    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
+    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
 
     _LIBCPP_INLINE_VISIBILITY
     __map_const_iterator& operator++() {++__i_; return *this;}
@@ -809,7 +876,6 @@
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef pair<key_type, mapped_type>              __nc_value_type;
     typedef _Compare                                 key_compare;
     typedef _Allocator                               allocator_type;
     typedef value_type&                              reference;
@@ -854,6 +920,11 @@
     typedef _VSTD::reverse_iterator<iterator>               reverse_iterator;
     typedef _VSTD::reverse_iterator<const_iterator>         const_reverse_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
+    typedef __insert_return_type<iterator, node_type> insert_return_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     map()
         _NOEXCEPT_(
@@ -1201,6 +1272,35 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {__tree_.clear();}
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    insert_return_type insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to map::insert()");
+        return __tree_.template __node_handle_insert_unique<
+            node_type, insert_return_type>(_VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to map::insert()");
+        return __tree_.template __node_handle_insert_unique<node_type>(
+            __hint.__i_, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__it.__i_);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void swap(map& __m)
         _NOEXCEPT_(__is_nothrow_swappable<__base>::value)
@@ -1308,7 +1408,7 @@
         const_iterator __e = cend();
         while (!__m.empty())
             __tree_.__insert_unique(__e.__i_,
-                    _VSTD::move(__m.__tree_.remove(__m.begin().__i_)->__value_.__nc));
+                    __m.__tree_.remove(__m.begin().__i_)->__value_.__move());
     }
 }
 
@@ -1319,7 +1419,7 @@
     return __tree_.__emplace_unique_key_args(__k,
         _VSTD::piecewise_construct,
         _VSTD::forward_as_tuple(__k),
-        _VSTD::forward_as_tuple()).first->__cc.second;
+        _VSTD::forward_as_tuple()).first->__get_value().second;
 }
 
 template <class _Key, class _Tp, class _Compare, class _Allocator>
@@ -1329,7 +1429,7 @@
     return __tree_.__emplace_unique_key_args(__k,
         _VSTD::piecewise_construct,
         _VSTD::forward_as_tuple(_VSTD::move(__k)),
-        _VSTD::forward_as_tuple()).first->__cc.second;
+        _VSTD::forward_as_tuple()).first->__get_value().second;
 }
 
 #else // _LIBCPP_CXX03_LANG
@@ -1340,9 +1440,9 @@
 {
     __node_allocator& __na = __tree_.__node_alloc();
     __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
-    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.first), __k);
+    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__get_value().first), __k);
     __h.get_deleter().__first_constructed = true;
-    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
+    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__get_value().second));
     __h.get_deleter().__second_constructed = true;
     return _LIBCPP_EXPLICIT_MOVE(__h);  // explicitly moved for C++03
 }
@@ -1360,7 +1460,7 @@
         __tree_.__insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__h.get()));
         __r = __h.release();
     }
-    return __r->__value_.__cc.second;
+    return __r->__value_.__get_value().second;
 }
 
 #endif  // _LIBCPP_CXX03_LANG
@@ -1375,7 +1475,7 @@
     if (__child == nullptr)
         throw out_of_range("map::at:  key not found");
 #endif  // _LIBCPP_NO_EXCEPTIONS
-    return static_cast<__node_pointer>(__child)->__value_.__cc.second;
+    return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
 }
 
 template <class _Key, class _Tp, class _Compare, class _Allocator>
@@ -1388,7 +1488,7 @@
     if (__child == nullptr)
         throw out_of_range("map::at:  key not found");
 #endif  // _LIBCPP_NO_EXCEPTIONS
-    return static_cast<__node_pointer>(__child)->__value_.__cc.second;
+    return static_cast<__node_pointer>(__child)->__value_.__get_value().second;
 }
 
 
@@ -1465,7 +1565,6 @@
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef pair<key_type, mapped_type>              __nc_value_type;
     typedef _Compare                                 key_compare;
     typedef _Allocator                               allocator_type;
     typedef value_type&                              reference;
@@ -1511,6 +1610,10 @@
     typedef _VSTD::reverse_iterator<iterator>               reverse_iterator;
     typedef _VSTD::reverse_iterator<const_iterator>         const_reverse_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __map_node_handle<typename __base::__node, allocator_type> node_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     multimap()
         _NOEXCEPT_(
@@ -1749,6 +1852,37 @@
     _LIBCPP_INLINE_VISIBILITY
     iterator  erase(const_iterator __f, const_iterator __l)
         {return __tree_.erase(__f.__i_, __l.__i_);}
+
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to multimap::insert()");
+        return __tree_.template __node_handle_insert_multi<node_type>(
+            _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to multimap::insert()");
+        return __tree_.template __node_handle_insert_multi<node_type>(
+            __hint.__i_, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __tree_.template __node_handle_extract<node_type>(
+            __it.__i_);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void clear() {__tree_.clear();}
 
@@ -1852,7 +1986,7 @@
         const_iterator __e = cend();
         while (!__m.empty())
             __tree_.__insert_multi(__e.__i_,
-                    _VSTD::move(__m.__tree_.remove(__m.begin().__i_)->__value_.__nc));
+                    _VSTD::move(__m.__tree_.remove(__m.begin().__i_)->__value_.__move()));
     }
 }
 #endif
diff --git a/linux-x64/clang/include/c++/v1/math.h b/linux-x64/clang/include/c++/v1/math.h
index cd055ca..3cc72aa 100644
--- a/linux-x64/clang/include/c++/v1/math.h
+++ b/linux-x64/clang/include/c++/v1/math.h
@@ -314,7 +314,7 @@
 #ifdef signbit
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_signbit(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -376,7 +376,7 @@
 #ifdef fpclassify
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 int
 __libcpp_fpclassify(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -422,7 +422,7 @@
 #ifdef isfinite
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isfinite(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -456,7 +456,7 @@
 #ifdef isinf
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isinf(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -483,6 +483,20 @@
 isinf(_A1) _NOEXCEPT
 { return false; }
 
+#ifdef _LIBCPP_PREFERRED_OVERLOAD
+inline _LIBCPP_INLINE_VISIBILITY
+bool
+isinf(float __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
+
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
+bool
+isinf(double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
+
+inline _LIBCPP_INLINE_VISIBILITY
+bool
+isinf(long double __lcpp_x) _NOEXCEPT { return __libcpp_isinf(__lcpp_x); }
+#endif
+
 #endif  // isinf
 
 // isnan
@@ -490,7 +504,7 @@
 #ifdef isnan
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isnan(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -513,6 +527,20 @@
 isnan(_A1) _NOEXCEPT
 { return false; }
 
+#ifdef _LIBCPP_PREFERRED_OVERLOAD
+inline _LIBCPP_INLINE_VISIBILITY
+bool
+isnan(float __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
+
+inline _LIBCPP_INLINE_VISIBILITY _LIBCPP_PREFERRED_OVERLOAD
+bool
+isnan(double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
+
+inline _LIBCPP_INLINE_VISIBILITY
+bool
+isnan(long double __lcpp_x) _NOEXCEPT { return __libcpp_isnan(__lcpp_x); }
+#endif
+
 #endif  // isnan
 
 // isnormal
@@ -520,7 +548,7 @@
 #ifdef isnormal
 
 template <class _A1>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isnormal(_A1 __lcpp_x) _NOEXCEPT
 {
@@ -550,7 +578,7 @@
 #ifdef isgreater
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
@@ -580,7 +608,7 @@
 #ifdef isgreaterequal
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isgreaterequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
@@ -610,7 +638,7 @@
 #ifdef isless
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isless(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
@@ -640,7 +668,7 @@
 #ifdef islessequal
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_islessequal(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
@@ -670,7 +698,7 @@
 #ifdef islessgreater
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_islessgreater(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
@@ -700,7 +728,7 @@
 #ifdef isunordered
 
 template <class _A1, class _A2>
-_LIBCPP_ALWAYS_INLINE
+_LIBCPP_INLINE_VISIBILITY
 bool
 __libcpp_isunordered(_A1 __lcpp_x, _A2 __lcpp_y) _NOEXCEPT
 {
diff --git a/linux-x64/clang/include/c++/v1/memory b/linux-x64/clang/include/c++/v1/memory
index 021bd13..a4bf89b 100644
--- a/linux-x64/clang/include/c++/v1/memory
+++ b/linux-x64/clang/include/c++/v1/memory
@@ -679,7 +679,7 @@
 _LIBCPP_BEGIN_NAMESPACE_STD
 
 template <class _ValueType>
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 _ValueType __libcpp_relaxed_load(_ValueType const* __value) {
 #if !defined(_LIBCPP_HAS_NO_THREADS) && \
     defined(__ATOMIC_RELAXED) &&        \
@@ -691,7 +691,7 @@
 }
 
 template <class _ValueType>
-inline _LIBCPP_ALWAYS_INLINE
+inline _LIBCPP_INLINE_VISIBILITY
 _ValueType __libcpp_acquire_load(_ValueType const* __value) {
 #if !defined(_LIBCPP_HAS_NO_THREADS) && \
     defined(__ATOMIC_ACQUIRE) &&        \
@@ -3483,7 +3483,7 @@
     virtual const char* what() const  _NOEXCEPT;
 };
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_bad_weak_ptr()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
@@ -3511,7 +3511,7 @@
     explicit __shared_count(long __refs = 0) _NOEXCEPT
         : __shared_owners_(__refs) {}
 
-#if defined(_LIBCPP_BUILDING_MEMORY) && \
+#if defined(_LIBCPP_BUILDING_LIBRARY) && \
     defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
     void __add_shared() _NOEXCEPT;
     bool __release_shared() _NOEXCEPT;
@@ -3549,7 +3549,7 @@
     virtual ~__shared_weak_count();
 
 public:
-#if defined(_LIBCPP_BUILDING_MEMORY) && \
+#if defined(_LIBCPP_BUILDING_LIBRARY) && \
     defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
     void __add_shared() _NOEXCEPT;
     void __add_weak() _NOEXCEPT;
@@ -5549,7 +5549,7 @@
 #endif
 
 #if !defined(_LIBCPP_ABI_POINTER_SAFETY_ENUM_TYPE) && \
-    defined(_LIBCPP_BUILDING_MEMORY)
+    defined(_LIBCPP_BUILDING_LIBRARY)
 _LIBCPP_FUNC_VIS pointer_safety get_pointer_safety() _NOEXCEPT;
 #else
 // This function is only offered in C++03 under ABI v1.
@@ -5638,15 +5638,15 @@
     };
 #endif
 
-#if _LIBCPP_STD_VER > 14
-template<typename _Alloc, typename = void>
+template<typename _Alloc, typename = void, typename = void>
 struct __is_allocator : false_type {};
 
 template<typename _Alloc>
 struct __is_allocator<_Alloc,
-     void_t<typename _Alloc::value_type, decltype(_VSTD::declval<_Alloc&>().allocate(size_t{}))>>
+       typename __void_t<typename _Alloc::value_type>::type,
+       typename __void_t<decltype(_VSTD::declval<_Alloc&>().allocate(size_t(0)))>::type
+     >
    : true_type {};
-#endif
 
 _LIBCPP_END_NAMESPACE_STD
 
diff --git a/linux-x64/clang/include/c++/v1/module.modulemap b/linux-x64/clang/include/c++/v1/module.modulemap
index 076ef23..0895055 100644
--- a/linux-x64/clang/include/c++/v1/module.modulemap
+++ b/linux-x64/clang/include/c++/v1/module.modulemap
@@ -235,6 +235,10 @@
     export *
   }
   // No submodule for cassert. It fundamentally needs repeated, textual inclusion.
+  module charconv {
+    header "charconv"
+    export *
+  }
   module chrono {
     header "chrono"
     export *
@@ -243,6 +247,10 @@
     header "codecvt"
     export *
   }
+  module compare {
+    header "compare"
+    export *
+  }
   module complex {
     header "complex"
     export *
@@ -260,6 +268,10 @@
     header "exception"
     export *
   }
+  module filesystem {
+    header "filesystem"
+    export *
+  }
   module forward_list {
     header "forward_list"
     export initializer_list
@@ -470,10 +482,15 @@
     export initializer_list
     export *
   }
+  module version {
+    header "version"
+    export *
+  }
 
   // FIXME: These should be private.
   module __bit_reference { header "__bit_reference" export * }
   module __debug { header "__debug" export * }
+  module __errc { header "__errc" export * }
   module __functional_base { header "__functional_base" export * }
   module __hash_table { header "__hash_table" export * }
   module __locale { header "__locale" export * }
@@ -485,6 +502,7 @@
   module __tree { header "__tree" export * }
   module __tuple { header "__tuple" export * }
   module __undef_macros { header "__undef_macros" export * }
+  module __node_handle { header "__node_handle" export * }
 
   module experimental {
     requires cplusplus11
@@ -542,10 +560,18 @@
       header "experimental/regex"
       export *
     }
+    module simd {
+      header "experimental/simd"
+      export *
+    }
     module set {
       header "experimental/set"
       export *
     }
+    module span {
+      header "span"
+      export *
+    }
     module string {
       header "experimental/string"
       export *
diff --git a/linux-x64/clang/include/c++/v1/new b/linux-x64/clang/include/c++/v1/new
index e42ffad..d33f691 100644
--- a/linux-x64/clang/include/c++/v1/new
+++ b/linux-x64/clang/include/c++/v1/new
@@ -103,13 +103,13 @@
 #pragma GCC system_header
 #endif
 
-#if !(defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER >= 14 || \
+#if !(defined(_LIBCPP_BUILDING_LIBRARY) || _LIBCPP_STD_VER >= 14 || \
     (defined(__cpp_sized_deallocation) && __cpp_sized_deallocation >= 201309))
 # define _LIBCPP_HAS_NO_SIZED_DEALLOCATION
 #endif
 
 #if !defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION) && \
-    (!(defined(_LIBCPP_BUILDING_NEW) || _LIBCPP_STD_VER > 14 || \
+    (!(defined(_LIBCPP_BUILDING_LIBRARY) || _LIBCPP_STD_VER > 14 || \
     (defined(__cpp_aligned_new) && __cpp_aligned_new >= 201606)))
 # define _LIBCPP_HAS_NO_ALIGNED_ALLOCATION
 #endif
@@ -167,7 +167,7 @@
 
 #define _LIBCPP_BAD_ARRAY_LENGTH_DEFINED
 
-#endif  // defined(_LIBCPP_BUILDING_NEW) || (_LIBCPP_STD_VER > 11)
+#endif  // defined(_LIBCPP_BUILDING_LIBRARY) || (_LIBCPP_STD_VER > 11)
 
 #if !defined(_LIBCPP_ABI_MICROSOFT) || defined(_LIBCPP_NO_VCRUNTIME)
 #if !defined(_LIBCPP_HAS_NO_ALIGNED_ALLOCATION) || _LIBCPP_STD_VER > 14
@@ -281,7 +281,7 @@
 }
 
 #ifdef _LIBCPP_BAD_ARRAY_LENGTH_DEFINED
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 #ifndef _LIBCPP_NO_EXCEPTIONS
 _LIBCPP_AVAILABILITY_BAD_ARRAY_LENGTH
 #endif
@@ -290,13 +290,13 @@
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw bad_array_length();
 #else
-	_VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 #endif
 
 template <class _Tp>
-_LIBCPP_NODISCARD_AFTER_CXX17 inline 
+_LIBCPP_NODISCARD_AFTER_CXX17 inline
 _LIBCPP_CONSTEXPR _Tp* __launder(_Tp* __p) _NOEXCEPT
 {
     static_assert (!(is_function<_Tp>::value), "can't launder functions" );
diff --git a/linux-x64/clang/include/c++/v1/numeric b/linux-x64/clang/include/c++/v1/numeric
index b33b6a3..70ef173 100644
--- a/linux-x64/clang/include/c++/v1/numeric
+++ b/linux-x64/clang/include/c++/v1/numeric
@@ -104,15 +104,15 @@
 
 template<class InputIterator, class OutputIterator,
          class BinaryOperation, class UnaryOperation>
-	OutputIterator
-	transform_inclusive_scan(InputIterator first, InputIterator last,
+    OutputIterator
+    transform_inclusive_scan(InputIterator first, InputIterator last,
                              OutputIterator result,
                              BinaryOperation binary_op, UnaryOperation unary_op);  // C++17
 
 template<class InputIterator, class OutputIterator,
          class BinaryOperation, class UnaryOperation, class T>
-	OutputIterator
-	transform_inclusive_scan(InputIterator first, InputIterator last,
+    OutputIterator
+    transform_inclusive_scan(InputIterator first, InputIterator last,
                              OutputIterator result,
                              BinaryOperation binary_op, UnaryOperation unary_op,
                              T init);  // C++17
diff --git a/linux-x64/clang/include/c++/v1/optional b/linux-x64/clang/include/c++/v1/optional
index 1f8e491..a76f8d1 100644
--- a/linux-x64/clang/include/c++/v1/optional
+++ b/linux-x64/clang/include/c++/v1/optional
@@ -139,6 +139,10 @@
   private:
     T *val; // exposition only
   };
+
+template<class T>
+  optional(T) -> optional<T>;
+
 } // namespace std
 
 */
@@ -1003,6 +1007,11 @@
     }
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class T>
+    optional(T) -> optional<T>;
+#endif
+
 // Comparisons between optionals
 template <class _Tp, class _Up>
 _LIBCPP_INLINE_VISIBILITY constexpr
diff --git a/linux-x64/clang/include/c++/v1/ostream b/linux-x64/clang/include/c++/v1/ostream
index 197636e..5404e0d 100644
--- a/linux-x64/clang/include/c++/v1/ostream
+++ b/linux-x64/clang/include/c++/v1/ostream
@@ -232,7 +232,7 @@
     basic_ostream& seekp(off_type __off, ios_base::seekdir __dir);
 
 protected:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     basic_ostream() {}  // extension, intentially does not initialize
 };
 
@@ -249,7 +249,7 @@
     explicit sentry(basic_ostream<_CharT, _Traits>& __os);
     ~sentry();
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
         _LIBCPP_EXPLICIT
         operator bool() const {return __ok_;}
 };
diff --git a/linux-x64/clang/include/c++/v1/queue b/linux-x64/clang/include/c++/v1/queue
index 80546fd..4677e52 100644
--- a/linux-x64/clang/include/c++/v1/queue
+++ b/linux-x64/clang/include/c++/v1/queue
@@ -69,6 +69,12 @@
     void swap(queue& q) noexcept(is_nothrow_swappable_v<Container>)
 };
 
+template<class Container>
+  queue(Container) -> queue<typename Container::value_type, Container>; // C++17
+  
+template<class Container, class Allocator> 
+  queue(Container, Allocator) -> queue<typename Container::value_type, Container>; // C++17
+
 template <class T, class Container>
   bool operator==(const queue<T, Container>& x,const queue<T, Container>& y);
 
@@ -157,6 +163,20 @@
                  is_nothrow_swappable_v<Comp>)
 };
 
+template <class Compare, class Container>
+priority_queue(Compare, Container)
+    -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
+  
+template<class InputIterator, 
+         class Compare = less<typename iterator_traits<InputIterator>::value_type>,
+         class Container = vector<typename iterator_traits<InputIterator>::value_type>>
+priority_queue(InputIterator, InputIterator, Compare = Compare(), Container = Container())
+    -> priority_queue<typename iterator_traits<InputIterator>::value_type, Container, Compare>; // C++17
+  
+template<class Compare, class Container, class Allocator>
+priority_queue(Compare, Container, Allocator)
+    -> priority_queue<typename Container::value_type, Container, Compare>; // C++17
+
 template <class T, class Container, class Compare>
   void swap(priority_queue<T, Container, Compare>& x,
             priority_queue<T, Container, Compare>& y)
@@ -321,6 +341,22 @@
     operator< (const queue<_T1, _C1>& __x,const queue<_T1, _C1>& __y);
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _Container,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
+>
+queue(_Container)
+    -> queue<typename _Container::value_type, _Container>;
+  
+template<class _Container,
+         class _Alloc,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
+         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
+>
+queue(_Container, _Alloc)
+    -> queue<typename _Container::value_type, _Container>;
+#endif
+
 template <class _Tp, class _Container>
 inline _LIBCPP_INLINE_VISIBILITY
 bool
@@ -515,6 +551,36 @@
                    __is_nothrow_swappable<value_compare>::value);
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template <class _Compare,
+          class _Container,
+          class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
+          class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
+>
+priority_queue(_Compare, _Container)
+    -> priority_queue<typename _Container::value_type, _Container, _Compare>;
+  
+template<class _InputIterator, 
+         class _Compare   = less<typename iterator_traits<_InputIterator>::value_type>,
+         class _Container = vector<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if< __is_input_iterator<_InputIterator>::value, nullptr_t>::type,
+         class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
+>
+priority_queue(_InputIterator, _InputIterator, _Compare = _Compare(), _Container = _Container())
+    -> priority_queue<typename iterator_traits<_InputIterator>::value_type, _Container, _Compare>;
+  
+template<class _Compare, 
+         class _Container,
+         class _Alloc,
+         class = typename enable_if<!__is_allocator<_Compare>::value, nullptr_t>::type,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
+         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
+>
+priority_queue(_Compare, _Container, _Alloc)
+    -> priority_queue<typename _Container::value_type, _Container, _Compare>;
+#endif
+
 template <class _Tp, class _Container, class _Compare>
 inline
 priority_queue<_Tp, _Container, _Compare>::priority_queue(const _Compare& __comp,
diff --git a/linux-x64/clang/include/c++/v1/regex b/linux-x64/clang/include/c++/v1/regex
index ed0781c..84aacc0 100644
--- a/linux-x64/clang/include/c++/v1/regex
+++ b/linux-x64/clang/include/c++/v1/regex
@@ -192,6 +192,11 @@
     void swap(basic_regex&);
 };
 
+template<class ForwardIterator>
+basic_regex(ForwardIterator, ForwardIterator,
+            regex_constants::syntax_option_type = regex_constants::ECMAScript)
+    -> basic_regex<typename iterator_traits<ForwardIterator>::value_type>; // C++17
+
 typedef basic_regex<char>    regex;
 typedef basic_regex<wchar_t> wregex;
 
@@ -963,7 +968,7 @@
 };
 
 template <regex_constants::error_type _Ev>
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_regex_error()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
@@ -2922,6 +2927,15 @@
     template <class, class> friend class __lookahead;
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template <class _ForwardIterator,
+          class = typename enable_if<__is_forward_iterator<_ForwardIterator>::value, nullptr_t>::type
+>
+basic_regex(_ForwardIterator, _ForwardIterator,
+            regex_constants::syntax_option_type = regex_constants::ECMAScript)
+    -> basic_regex<typename iterator_traits<_ForwardIterator>::value_type>;
+#endif
+
 template <class _CharT, class _Traits>
     const regex_constants::syntax_option_type basic_regex<_CharT, _Traits>::icase;
 template <class _CharT, class _Traits>
diff --git a/linux-x64/clang/include/c++/v1/set b/linux-x64/clang/include/c++/v1/set
index 94db8c7..108a9e9 100644
--- a/linux-x64/clang/include/c++/v1/set
+++ b/linux-x64/clang/include/c++/v1/set
@@ -40,6 +40,8 @@
     typedef implementation-defined                   const_iterator;
     typedef std::reverse_iterator<iterator>          reverse_iterator;
     typedef std::reverse_iterator<const_iterator>    const_reverse_iterator;
+    typedef unspecified                              node_type;               // C++17
+    typedef INSERT_RETURN_TYPE<iterator, node_type>  insert_return_type;      // C++17
 
     // construct/copy/destroy:
     set()
@@ -115,6 +117,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type> il);
 
+    node_type extract(const_iterator position);                                       // C++17
+    node_type extract(const key_type& x);                                             // C++17
+    insert_return_type insert(node_type&& nh);                                        // C++17
+    iterator insert(const_iterator hint, node_type&& nh);                             // C++17
+
     iterator  erase(const_iterator position);
     iterator  erase(iterator position);  // C++14
     size_type erase(const key_type& k);
@@ -222,6 +229,7 @@
     typedef implementation-defined                   const_iterator;
     typedef std::reverse_iterator<iterator>          reverse_iterator;
     typedef std::reverse_iterator<const_iterator>    const_reverse_iterator;
+    typedef unspecified                              node_type;               // C++17
 
     // construct/copy/destroy:
     multiset()
@@ -297,6 +305,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type> il);
 
+    node_type extract(const_iterator position);                                       // C++17
+    node_type extract(const key_type& x);                                             // C++17
+    iterator insert(node_type&& nh);                                                  // C++17
+    iterator insert(const_iterator hint, node_type&& nh);                             // C++17
+
     iterator  erase(const_iterator position);
     iterator  erase(iterator position);  // C++14
     size_type erase(const key_type& k);
@@ -387,6 +400,7 @@
 
 #include <__config>
 #include <__tree>
+#include <__node_handle>
 #include <functional>
 
 #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -429,6 +443,11 @@
     typedef _VSTD::reverse_iterator<iterator>       reverse_iterator;
     typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __set_node_handle<typename __base::__node, allocator_type> node_type;
+    typedef __insert_return_type<iterator, node_type> insert_return_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     set()
         _NOEXCEPT_(
@@ -634,6 +653,35 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {__tree_.clear();}
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    insert_return_type insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to set::insert()");
+        return __tree_.template __node_handle_insert_unique<
+            node_type, insert_return_type>(_VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to set::insert()");
+        return __tree_.template __node_handle_insert_unique<node_type>(
+            __hint, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__it);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void swap(set& __s) _NOEXCEPT_(__is_nothrow_swappable<__base>::value)
         {__tree_.swap(__s.__tree_);}
@@ -838,6 +886,10 @@
     typedef _VSTD::reverse_iterator<iterator>       reverse_iterator;
     typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __set_node_handle<typename __base::__node, allocator_type> node_type;
+#endif
+
     // construct/copy/destroy:
     _LIBCPP_INLINE_VISIBILITY
     multiset()
@@ -1042,6 +1094,35 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {__tree_.clear();}
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to multiset::insert()");
+        return __tree_.template __node_handle_insert_multi<node_type>(
+            _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to multiset::insert()");
+        return __tree_.template __node_handle_insert_multi<node_type>(
+            __hint, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __tree_.template __node_handle_extract<node_type>(__it);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void swap(multiset& __s)
         _NOEXCEPT_(__is_nothrow_swappable<__base>::value)
diff --git a/linux-x64/clang/include/c++/v1/shared_mutex b/linux-x64/clang/include/c++/v1/shared_mutex
index 9cb8152..a7735d6 100644
--- a/linux-x64/clang/include/c++/v1/shared_mutex
+++ b/linux-x64/clang/include/c++/v1/shared_mutex
@@ -129,7 +129,7 @@
 #include <__undef_macros>
 
 
-#if _LIBCPP_STD_VER > 11 || defined(_LIBCPP_BUILDING_SHARED_MUTEX)
+#if _LIBCPP_STD_VER > 11 || defined(_LIBCPP_BUILDING_LIBRARY)
 
 #include <__mutex_base>
 
diff --git a/linux-x64/clang/include/c++/v1/span b/linux-x64/clang/include/c++/v1/span
new file mode 100644
index 0000000..5a77ff8
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/span
@@ -0,0 +1,608 @@
+// -*- C++ -*-
+//===------------------------------ span ---------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_SPAN
+#define _LIBCPP_SPAN
+
+/*
+    span synopsis
+
+namespace std {
+
+// constants
+inline constexpr ptrdiff_t dynamic_extent = -1;
+
+// [views.span], class template span
+template <class ElementType, ptrdiff_t Extent = dynamic_extent>
+    class span;
+
+// [span.comparison], span comparison operators
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator==(span<T, X> l, span<U, Y> r);
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator!=(span<T, X> l, span<U, Y> r);
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator<(span<T, X> l, span<U, Y> r);
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator<=(span<T, X> l, span<U, Y> r);
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator>(span<T, X> l, span<U, Y> r);
+template <class T, ptrdiff_t X, class U, ptrdiff_t Y>
+    constexpr bool operator>=(span<T, X> l, span<U, Y> r);
+
+// [span.objectrep], views of object representation
+template <class ElementType, ptrdiff_t Extent>
+    span<const byte, ((Extent == dynamic_extent) ? dynamic_extent :
+        (static_cast<ptrdiff_t>(sizeof(ElementType)) * Extent))> as_bytes(span<ElementType, Extent> s) noexcept;
+
+template <class ElementType, ptrdiff_t Extent>
+    span<      byte, ((Extent == dynamic_extent) ? dynamic_extent :
+        (static_cast<ptrdiff_t>(sizeof(ElementType)) * Extent))> as_writable_bytes(span<ElementType, Extent> s) noexcept;
+
+
+namespace std {
+template <class ElementType, ptrdiff_t Extent = dynamic_extent>
+class span {
+public:
+    // constants and types
+    using element_type = ElementType;
+    using value_type = remove_cv_t<ElementType>;
+    using index_type = ptrdiff_t;
+    using difference_type = ptrdiff_t;
+    using pointer = element_type*;
+    using reference = element_type&;
+    using iterator = implementation-defined;
+    using const_iterator = implementation-defined;
+    using reverse_iterator = std::reverse_iterator<iterator>;
+    using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+    static constexpr index_type extent = Extent;
+
+    // [span.cons], span constructors, copy, assignment, and destructor
+    constexpr span() noexcept;
+    constexpr span(pointer ptr, index_type count);
+    constexpr span(pointer firstElem, pointer lastElem);
+    template <size_t N>
+        constexpr span(element_type (&arr)[N]) noexcept;
+    template <size_t N>
+        constexpr span(array<value_type, N>& arr) noexcept;
+    template <size_t N>
+        constexpr span(const array<value_type, N>& arr) noexcept;
+    template <class Container>
+        constexpr span(Container& cont);
+    template <class Container>
+        constexpr span(const Container& cont);
+    constexpr span(const span& other) noexcept = default;
+    template <class OtherElementType, ptrdiff_t OtherExtent>
+        constexpr span(const span<OtherElementType, OtherExtent>& s) noexcept;
+    ~span() noexcept = default;
+    constexpr span& operator=(const span& other) noexcept = default;
+
+    // [span.sub], span subviews
+    template <ptrdiff_t Count>
+        constexpr span<element_type, Count> first() const;
+    template <ptrdiff_t Count>
+        constexpr span<element_type, Count> last() const;
+    template <ptrdiff_t Offset, ptrdiff_t Count = dynamic_extent>
+        constexpr span<element_type, see below> subspan() const;
+
+    constexpr span<element_type, dynamic_extent> first(index_type count) const;
+    constexpr span<element_type, dynamic_extent> last(index_type count) const;
+    constexpr span<element_type, dynamic_extent> subspan(index_type offset, index_type count = dynamic_extent) const;
+
+    // [span.obs], span observers
+    constexpr index_type size() const noexcept;
+    constexpr index_type size_bytes() const noexcept;
+    constexpr bool empty() const noexcept;
+
+    // [span.elem], span element access
+    constexpr reference operator[](index_type idx) const;
+    constexpr reference operator()(index_type idx) const;
+    constexpr pointer data() const noexcept;
+
+    // [span.iterators], span iterator support
+    constexpr iterator begin() const noexcept;
+    constexpr iterator end() const noexcept;
+    constexpr const_iterator cbegin() const noexcept;
+    constexpr const_iterator cend() const noexcept;
+    constexpr reverse_iterator rbegin() const noexcept;
+    constexpr reverse_iterator rend() const noexcept;
+    constexpr const_reverse_iterator crbegin() const noexcept;
+    constexpr const_reverse_iterator crend() const noexcept;
+
+private:
+    pointer data_;     // exposition only
+    index_type size_;  // exposition only
+};
+
+template<class T, size_t N>
+    span(T (&)[N]) -> span<T, N>;
+
+template<class T, size_t N>
+    span(array<T, N>&) -> span<T, N>;
+
+template<class T, size_t N>
+    span(const array<T, N>&) -> span<const T, N>;
+
+template<class Container>
+    span(Container&) -> span<typename Container::value_type>;
+
+template<class Container>
+    span(const Container&) -> span<const typename Container::value_type>;
+
+} // namespace std
+
+*/
+
+#include <__config>
+#include <cstddef>      // for ptrdiff_t
+#include <iterator>     // for iterators
+#include <array>        // for array
+#include <type_traits>  // for remove_cv, etc
+#include <cstddef>      // for byte
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER > 17
+
+inline constexpr ptrdiff_t dynamic_extent = -1;
+template <typename _Tp, ptrdiff_t _Extent = dynamic_extent> class span;
+
+
+template <class _Tp>
+struct __is_span_impl : public false_type {};
+
+template <class _Tp, ptrdiff_t _Extent>
+struct __is_span_impl<span<_Tp, _Extent>> : public true_type {};
+
+template <class _Tp>
+struct __is_span : public __is_span_impl<remove_cv_t<_Tp>> {};
+
+template <class _Tp>
+struct __is_std_array_impl : public false_type {};
+
+template <class _Tp, size_t _Sz>
+struct __is_std_array_impl<array<_Tp, _Sz>> : public true_type {};
+
+template <class _Tp>
+struct __is_std_array : public __is_std_array_impl<remove_cv_t<_Tp>> {};
+
+template <class _Tp, class _ElementType, class = void>
+struct __is_span_compatible_container : public false_type {};
+
+template <class _Tp, class _ElementType>
+struct __is_span_compatible_container<_Tp, _ElementType,
+        void_t<
+        // is not a specialization of span
+            typename enable_if<!__is_span<_Tp>::value, nullptr_t>::type,
+        // is not a specialization of array
+            typename enable_if<!__is_std_array<_Tp>::value, nullptr_t>::type,
+        // is_array_v<Container> is false,
+            typename enable_if<!is_array_v<_Tp>, nullptr_t>::type,
+        // data(cont) and size(cont) are well formed
+            decltype(data(declval<_Tp>())),
+            decltype(size(declval<_Tp>())),
+        // remove_pointer_t<decltype(data(cont))>(*)[] is convertible to ElementType(*)[]
+            typename enable_if<
+                is_convertible_v<remove_pointer_t<decltype(data(declval<_Tp &>()))>(*)[],
+                                 _ElementType(*)[]>,
+                nullptr_t>::type
+        >>
+    : public true_type {};
+
+
+template <typename _Tp, ptrdiff_t _Extent>
+class _LIBCPP_TEMPLATE_VIS span {
+public:
+//  constants and types
+    using element_type           = _Tp;
+    using value_type             = remove_cv_t<_Tp>;
+    using index_type             = ptrdiff_t;
+    using difference_type        = ptrdiff_t;
+    using pointer                = _Tp *;
+    using const_pointer          = const _Tp *; // not in standard
+    using reference              = _Tp &;
+    using const_reference        = const _Tp &; // not in standard
+    using iterator               =  __wrap_iter<pointer>;
+    using const_iterator         =  __wrap_iter<const_pointer>;
+    using reverse_iterator       = _VSTD::reverse_iterator<iterator>;
+    using const_reverse_iterator = _VSTD::reverse_iterator<const_iterator>;
+
+    static constexpr index_type extent = _Extent;
+    static_assert (_Extent >= 0, "Can't have a span with an extent < 0");
+
+// [span.cons], span constructors, copy, assignment, and destructor
+    _LIBCPP_INLINE_VISIBILITY constexpr span() noexcept : __data{nullptr}
+    { static_assert(_Extent == 0, "Can't default construct a statically sized span with size > 0"); }
+
+    constexpr span           (const span&) noexcept = default;
+    constexpr span& operator=(const span&) noexcept = default;
+
+    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __ptr, index_type __count) : __data{__ptr}
+        { (void)__count; _LIBCPP_ASSERT(_Extent == __count, "size mismatch in span's constructor (ptr, len)"); }
+    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __f, pointer __l) : __data{__f}
+        { (void)__l;     _LIBCPP_ASSERT(_Extent == distance(__f, __l), "size mismatch in span's constructor (ptr, ptr)"); }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr span(element_type (&__arr)[_Extent])          noexcept : __data{__arr} {}
+    _LIBCPP_INLINE_VISIBILITY constexpr span(      array<value_type, _Extent>& __arr) noexcept : __data{__arr.data()} {}
+    _LIBCPP_INLINE_VISIBILITY constexpr span(const array<value_type, _Extent>& __arr) noexcept : __data{__arr.data()} {}
+
+    template <class _Container>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(      _Container& __c,
+            enable_if_t<__is_span_compatible_container<_Container, _Tp>::value, nullptr_t> = nullptr)
+        : __data{_VSTD::data(__c)}
+        { _LIBCPP_ASSERT(_Extent == _VSTD::size(__c), "size mismatch in span's constructor (container))"); }
+
+    template <class _Container>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const _Container& __c,
+            enable_if_t<__is_span_compatible_container<const _Container, _Tp>::value, nullptr_t> = nullptr)
+        : __data{_VSTD::data(__c)}
+        { _LIBCPP_ASSERT(_Extent == _VSTD::size(__c), "size mismatch in span's constructor (const container)"); }
+
+    template <class _OtherElementType>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const span<_OtherElementType, _Extent>& __other,
+                       enable_if_t<
+                          is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
+                          nullptr_t> = nullptr)
+        : __data{__other.data()} {}
+
+    template <class _OtherElementType>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const span<_OtherElementType, dynamic_extent>& __other,
+                       enable_if_t<
+                          is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
+                          nullptr_t> = nullptr) noexcept
+        : __data{__other.data()} { _LIBCPP_ASSERT(_Extent == __other.size(), "size mismatch in span's constructor (other span)"); }
+
+
+//  ~span() noexcept = default;
+
+    template <ptrdiff_t _Count>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span<element_type, _Count> first() const noexcept
+    {
+        static_assert(_Count >= 0, "Count must be >= 0 in span::first()");
+        static_assert(_Count <= _Extent, "Count out of range in span::first()");
+        return {data(), _Count};
+    }
+
+    template <ptrdiff_t _Count>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span<element_type, _Count> last() const noexcept
+    {
+        static_assert(_Count >= 0, "Count must be >= 0 in span::last()");
+        static_assert(_Count <= _Extent, "Count out of range in span::last()");
+        return {data() + size() - _Count, _Count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, dynamic_extent> first(index_type __count) const noexcept
+    {
+        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::first(count)");
+        return {data(), __count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, dynamic_extent> last(index_type __count) const noexcept
+    {
+        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::last(count)");
+        return {data() + size() - __count, __count};
+    }
+
+    template <ptrdiff_t _Offset, ptrdiff_t _Count = dynamic_extent>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr auto subspan() const noexcept
+        -> span<element_type, _Count != dynamic_extent ? _Count : _Extent - _Offset>
+    {
+        _LIBCPP_ASSERT(_Offset >= 0 && _Offset <= size(), "Offset out of range in span::subspan()");
+        return {data() + _Offset, _Count == dynamic_extent ? size() - _Offset : _Count};
+    }
+
+
+    inline _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, dynamic_extent>
+       subspan(index_type __offset, index_type __count = dynamic_extent) const noexcept
+    {
+        _LIBCPP_ASSERT( __offset >= 0 && __offset <= size(), "Offset out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT((__count  >= 0 && __count  <= size()) || __count == dynamic_extent, "Count out of range in span::subspan(offset, count)");
+        if (__count == dynamic_extent)
+            return {data() + __offset, size() - __offset};
+        _LIBCPP_ASSERT(__offset + __count <= size(), "count + offset out of range in span::subspan(offset, count)");
+        return {data() + __offset, __count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr index_type size()       const noexcept { return _Extent; }
+    _LIBCPP_INLINE_VISIBILITY constexpr index_type size_bytes() const noexcept { return _Extent * sizeof(element_type); }
+    _LIBCPP_INLINE_VISIBILITY constexpr bool empty()            const noexcept { return _Extent == 0; }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr reference operator[](index_type __idx) const noexcept
+    {
+        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T,N>[] index out of bounds");
+        return __data[__idx];
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr reference operator()(index_type __idx) const noexcept
+    {
+        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T,N>() index out of bounds");
+        return __data[__idx];
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr pointer data()                         const noexcept { return __data; }
+
+// [span.iter], span iterator support
+    _LIBCPP_INLINE_VISIBILITY constexpr iterator                 begin() const noexcept { return iterator(data()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr iterator                   end() const noexcept { return iterator(data() + size()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_iterator          cbegin() const noexcept { return const_iterator(data()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_iterator            cend() const noexcept { return const_iterator(data() + size()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr reverse_iterator        rbegin() const noexcept { return reverse_iterator(end()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr reverse_iterator          rend() const noexcept { return reverse_iterator(begin()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(cend()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_reverse_iterator   crend() const noexcept { return const_reverse_iterator(cbegin()); }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr void swap(span &__other) noexcept
+    {
+        pointer __p = __data;
+        __data = __other.__data;
+        __other.__data = __p;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY span<const byte, _Extent * sizeof(element_type)> __as_bytes() const noexcept
+    { return {reinterpret_cast<const byte *>(data()), size_bytes()}; }
+
+    _LIBCPP_INLINE_VISIBILITY span<byte, _Extent * sizeof(element_type)> __as_writeable_bytes() const noexcept
+    { return {reinterpret_cast<byte *>(data()), size_bytes()}; }
+
+private:
+    pointer    __data;
+
+};
+
+
+template <typename _Tp>
+class _LIBCPP_TEMPLATE_VIS span<_Tp, dynamic_extent> {
+private:
+
+public:
+//  constants and types
+    using element_type           = _Tp;
+    using value_type             = remove_cv_t<_Tp>;
+    using index_type             = ptrdiff_t;
+    using difference_type        = ptrdiff_t;
+    using pointer                = _Tp *;
+    using const_pointer          = const _Tp *; // not in standard
+    using reference              = _Tp &;
+    using const_reference        = const _Tp &; // not in standard
+    using iterator               =  __wrap_iter<pointer>;
+    using const_iterator         =  __wrap_iter<const_pointer>;
+    using reverse_iterator       = _VSTD::reverse_iterator<iterator>;
+    using const_reverse_iterator = _VSTD::reverse_iterator<const_iterator>;
+
+    static constexpr index_type extent = dynamic_extent;
+
+// [span.cons], span constructors, copy, assignment, and destructor
+    _LIBCPP_INLINE_VISIBILITY constexpr span() noexcept : __data{nullptr}, __size{0} {}
+
+    constexpr span           (const span&) noexcept = default;
+    constexpr span& operator=(const span&) noexcept = default;
+
+    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __ptr, index_type __count) : __data{__ptr}, __size{__count} {}
+    _LIBCPP_INLINE_VISIBILITY constexpr span(pointer __f, pointer __l) : __data{__f}, __size{distance(__f, __l)} {}
+
+    template <size_t _Sz>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(element_type (&__arr)[_Sz]) noexcept : __data{__arr}, __size{_Sz} {}
+
+    template <size_t _Sz>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(array<value_type, _Sz>& __arr)       noexcept : __data{__arr.data()}, __size{_Sz} {}
+
+    template <size_t _Sz>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const array<value_type, _Sz>& __arr) noexcept : __data{__arr.data()}, __size{_Sz} {}
+
+    template <class _Container>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(      _Container& __c,
+            enable_if_t<__is_span_compatible_container<_Container, _Tp>::value, nullptr_t> = nullptr)
+        : __data{_VSTD::data(__c)}, __size{(index_type) _VSTD::size(__c)} {}
+
+    template <class _Container>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const _Container& __c,
+            enable_if_t<__is_span_compatible_container<const _Container, _Tp>::value, nullptr_t> = nullptr)
+        : __data{_VSTD::data(__c)}, __size{(index_type) _VSTD::size(__c)} {}
+
+
+    template <class _OtherElementType, ptrdiff_t _OtherExtent>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span(const span<_OtherElementType, _OtherExtent>& __other,
+                       enable_if_t<
+                          is_convertible_v<_OtherElementType(*)[], element_type (*)[]>,
+                          nullptr_t> = nullptr) noexcept
+        : __data{__other.data()}, __size{__other.size()} {}
+
+//    ~span() noexcept = default;
+
+    template <ptrdiff_t _Count>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span<element_type, _Count> first() const noexcept
+    {
+        static_assert(_Count >= 0);
+        _LIBCPP_ASSERT(_Count <= size(), "Count out of range in span::first()");
+        return {data(), _Count};
+    }
+
+    template <ptrdiff_t _Count>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span<element_type, _Count> last() const noexcept
+    {
+        static_assert(_Count >= 0);
+        _LIBCPP_ASSERT(_Count <= size(), "Count out of range in span::last()");
+        return {data() + size() - _Count, _Count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, dynamic_extent> first(index_type __count) const noexcept
+    {
+        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::first(count)");
+        return {data(), __count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    constexpr span<element_type, dynamic_extent> last (index_type __count) const noexcept
+    {
+        _LIBCPP_ASSERT(__count >= 0 && __count <= size(), "Count out of range in span::last(count)");
+        return {data() + size() - __count, __count};
+    }
+
+    template <ptrdiff_t _Offset, ptrdiff_t _Count = dynamic_extent>
+    inline _LIBCPP_INLINE_VISIBILITY
+        constexpr span<_Tp, dynamic_extent> subspan() const noexcept
+    {
+        _LIBCPP_ASSERT(_Offset >= 0 && _Offset <= size(), "Offset out of range in span::subspan()");
+        _LIBCPP_ASSERT(_Count == dynamic_extent || _Offset + _Count <= size(), "Count out of range in span::subspan()");
+        return {data() + _Offset, _Count == dynamic_extent ? size() - _Offset : _Count};
+    }
+
+    constexpr span<element_type, dynamic_extent>
+    inline _LIBCPP_INLINE_VISIBILITY
+       subspan(index_type __offset, index_type __count = dynamic_extent) const noexcept
+    {
+        _LIBCPP_ASSERT( __offset >= 0 && __offset <= size(), "Offset out of range in span::subspan(offset, count)");
+        _LIBCPP_ASSERT((__count  >= 0 && __count  <= size()) || __count == dynamic_extent, "count out of range in span::subspan(offset, count)");
+        if (__count == dynamic_extent)
+            return {data() + __offset, size() - __offset};
+        _LIBCPP_ASSERT(__offset + __count <= size(), "Offset + count out of range in span::subspan(offset, count)");
+        return {data() + __offset, __count};
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr index_type size()       const noexcept { return __size; }
+    _LIBCPP_INLINE_VISIBILITY constexpr index_type size_bytes() const noexcept { return __size * sizeof(element_type); }
+    _LIBCPP_INLINE_VISIBILITY constexpr bool empty()            const noexcept { return __size == 0; }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr reference operator[](index_type __idx) const noexcept
+    {
+        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T>[] index out of bounds");
+        return __data[__idx];
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr reference operator()(index_type __idx) const noexcept
+    {
+        _LIBCPP_ASSERT(__idx >= 0 && __idx < size(), "span<T>() index out of bounds");
+        return __data[__idx];
+    }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr pointer data()                         const noexcept { return __data; }
+
+// [span.iter], span iterator support
+    _LIBCPP_INLINE_VISIBILITY constexpr iterator                 begin() const noexcept { return iterator(data()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr iterator                   end() const noexcept { return iterator(data() + size()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_iterator          cbegin() const noexcept { return const_iterator(data()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_iterator            cend() const noexcept { return const_iterator(data() + size()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr reverse_iterator        rbegin() const noexcept { return reverse_iterator(end()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr reverse_iterator          rend() const noexcept { return reverse_iterator(begin()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator(cend()); }
+    _LIBCPP_INLINE_VISIBILITY constexpr const_reverse_iterator   crend() const noexcept { return const_reverse_iterator(cbegin()); }
+
+    _LIBCPP_INLINE_VISIBILITY constexpr void swap(span &__other) noexcept
+    {
+        pointer __p = __data;
+        __data = __other.__data;
+        __other.__data = __p;
+
+        index_type __sz = __size;
+        __size = __other.__size;
+        __other.__size = __sz;
+    }
+
+    _LIBCPP_INLINE_VISIBILITY span<const byte, dynamic_extent> __as_bytes() const noexcept
+    { return {reinterpret_cast<const byte *>(data()), size_bytes()}; }
+
+    _LIBCPP_INLINE_VISIBILITY span<byte, dynamic_extent> __as_writeable_bytes() const noexcept
+    { return {reinterpret_cast<byte *>(data()), size_bytes()}; }
+
+private:
+    pointer    __data;
+    index_type __size;
+};
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator==(const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return equal(__lhs.begin(), __lhs.end(), __rhs.begin(), __rhs.end()); }
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator!=(const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return !(__rhs == __lhs); }
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator< (const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return lexicographical_compare (__lhs.begin(), __lhs.end(), __rhs.begin(), __rhs.end()); }
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator<=(const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return !(__rhs < __lhs); }
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator> (const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return __rhs < __lhs; }
+
+template <class _Tp1, ptrdiff_t _Extent1, class _Tp2, ptrdiff_t _Extent2>
+    constexpr bool
+    operator>=(const span<_Tp1, _Extent1>& __lhs, const span<_Tp2, _Extent2>& __rhs)
+    { return !(__lhs < __rhs); }
+
+//  as_bytes & as_writeable_bytes
+template <class _Tp, ptrdiff_t _Extent>
+    auto as_bytes(span<_Tp, _Extent> __s) noexcept
+    -> decltype(__s.__as_bytes())
+    { return __s.__as_bytes(); }
+
+template <class _Tp, ptrdiff_t _Extent>
+    auto as_writeable_bytes(span<_Tp, _Extent> __s) noexcept
+    -> typename enable_if<!is_const_v<_Tp>, decltype(__s.__as_writeable_bytes())>::type
+    { return __s.__as_writeable_bytes(); }
+
+template <class _Tp, ptrdiff_t _Extent>
+    constexpr void swap(span<_Tp, _Extent> &__lhs, span<_Tp, _Extent> &__rhs) noexcept
+    { __lhs.swap(__rhs); }
+
+
+//  Deduction guides
+template<class _Tp, size_t _Sz>
+    span(_Tp (&)[_Sz]) -> span<_Tp, _Sz>;
+
+template<class _Tp, size_t _Sz>
+    span(array<_Tp, _Sz>&) -> span<_Tp, _Sz>;
+
+template<class _Tp, size_t _Sz>
+    span(const array<_Tp, _Sz>&) -> span<const _Tp, _Sz>;
+
+template<class _Container>
+    span(_Container&) -> span<typename _Container::value_type>;
+
+template<class _Container>
+    span(const _Container&) -> span<const typename _Container::value_type>;
+
+#endif // _LIBCPP_STD_VER > 17
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP_SPAN
diff --git a/linux-x64/clang/include/c++/v1/sstream b/linux-x64/clang/include/c++/v1/sstream
index b01f47b..9c3ee13 100644
--- a/linux-x64/clang/include/c++/v1/sstream
+++ b/linux-x64/clang/include/c++/v1/sstream
@@ -473,12 +473,12 @@
         {
             while (__sz > INT_MAX)
             {
-            	this->pbump(INT_MAX);
-            	__sz -= INT_MAX;
+                this->pbump(INT_MAX);
+                __sz -= INT_MAX;
             }
             if (__sz > 0)
-            	this->pbump(__sz);
-    	}
+                this->pbump(__sz);
+        }
     }
 }
 
diff --git a/linux-x64/clang/include/c++/v1/stack b/linux-x64/clang/include/c++/v1/stack
index 7b81ade..2b3f8ae 100644
--- a/linux-x64/clang/include/c++/v1/stack
+++ b/linux-x64/clang/include/c++/v1/stack
@@ -61,6 +61,12 @@
     void swap(stack& c) noexcept(is_nothrow_swappable_v<Container>)
 };
 
+template<class Container>
+  stack(Container) -> stack<typename Container::value_type, Container>;  // C++17
+  
+template<class Container, class Allocator> 
+  stack(Container, Allocator) -> stack<typename Container::value_type, Container>; // C++17
+
 template <class T, class Container>
   bool operator==(const stack<T, Container>& x, const stack<T, Container>& y);
 template <class T, class Container>
@@ -229,6 +235,22 @@
     operator< (const stack<T1, _C1>& __x, const stack<T1, _C1>& __y);
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _Container,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type
+>
+stack(_Container)
+    -> stack<typename _Container::value_type, _Container>;
+  
+template<class _Container,
+         class _Alloc,
+         class = typename enable_if<!__is_allocator<_Container>::value, nullptr_t>::type,
+         class = typename enable_if< __is_allocator<_Alloc>::value, nullptr_t>::type
+         > 
+stack(_Container, _Alloc)
+    -> stack<typename _Container::value_type, _Container>;
+#endif
+
 template <class _Tp, class _Container>
 inline _LIBCPP_INLINE_VISIBILITY
 bool
diff --git a/linux-x64/clang/include/c++/v1/stdexcept b/linux-x64/clang/include/c++/v1/stdexcept
index 95a96cc..3ec7934 100644
--- a/linux-x64/clang/include/c++/v1/stdexcept
+++ b/linux-x64/clang/include/c++/v1/stdexcept
@@ -185,73 +185,73 @@
 // in the dylib
 _LIBCPP_NORETURN _LIBCPP_FUNC_VIS void __throw_runtime_error(const char*);
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_logic_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw logic_error(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_domain_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw domain_error(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_invalid_argument(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw invalid_argument(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_length_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw length_error(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_out_of_range(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw out_of_range(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_range_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw range_error(__msg);
 #else
     ((void)__msg);
-	  _VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_overflow_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
@@ -262,7 +262,7 @@
 #endif
 }
 
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_underflow_error(const char*__msg)
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
diff --git a/linux-x64/clang/include/c++/v1/streambuf b/linux-x64/clang/include/c++/v1/streambuf
index e409d21..37a6532 100644
--- a/linux-x64/clang/include/c++/v1/streambuf
+++ b/linux-x64/clang/include/c++/v1/streambuf
@@ -236,9 +236,9 @@
     void swap(basic_streambuf& __rhs);
 
     // 27.6.2.3.2 Get area:
-    _LIBCPP_ALWAYS_INLINE char_type* eback() const {return __binp_;}
-    _LIBCPP_ALWAYS_INLINE char_type* gptr()  const {return __ninp_;}
-    _LIBCPP_ALWAYS_INLINE char_type* egptr() const {return __einp_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* eback() const {return __binp_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* gptr()  const {return __ninp_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* egptr() const {return __einp_;}
 
     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
     void gbump(int __n) { __ninp_ += __n; }
@@ -251,14 +251,14 @@
     }
 
     // 27.6.2.3.3 Put area:
-    _LIBCPP_ALWAYS_INLINE char_type* pbase() const {return __bout_;}
-    _LIBCPP_ALWAYS_INLINE char_type* pptr()  const {return __nout_;}
-    _LIBCPP_ALWAYS_INLINE char_type* epptr() const {return __eout_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* pbase() const {return __bout_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* pptr()  const {return __nout_;}
+    _LIBCPP_INLINE_VISIBILITY char_type* epptr() const {return __eout_;}
 
     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
     void pbump(int __n) { __nout_ += __n; }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void __pbump(streamsize __n) { __nout_ += __n; }
 
     inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/string b/linux-x64/clang/include/c++/v1/string
index 7218aa2..162e540 100644
--- a/linux-x64/clang/include/c++/v1/string
+++ b/linux-x64/clang/include/c++/v1/string
@@ -104,7 +104,8 @@
                  const Allocator& a = Allocator());
     template<class T>
         basic_string(const T& t, size_type pos, size_type n, const Allocator& a = Allocator()); // C++17
-    explicit basic_string(const basic_string_view<charT, traits> sv, const Allocator& a = Allocator());
+    template <class T>
+        explicit basic_string(const T& t, const Allocator& a = Allocator()); // C++17
     basic_string(const value_type* s, const allocator_type& a = allocator_type());
     basic_string(const value_type* s, size_type n, const allocator_type& a = allocator_type());
     basic_string(size_type n, value_type c, const allocator_type& a = allocator_type());
@@ -120,7 +121,8 @@
     operator basic_string_view<charT, traits>() const noexcept;
 
     basic_string& operator=(const basic_string& str);
-    basic_string& operator=(basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& operator=(const T& t); // C++17
     basic_string& operator=(basic_string&& str)
         noexcept(
              allocator_type::propagate_on_container_move_assignment::value ||
@@ -164,13 +166,15 @@
     reference       at(size_type n);
 
     basic_string& operator+=(const basic_string& str);
-    basic_string& operator+=(basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& operator+=(const T& t);              // C++17
     basic_string& operator+=(const value_type* s);
     basic_string& operator+=(value_type c);
     basic_string& operator+=(initializer_list<value_type>);
 
     basic_string& append(const basic_string& str);
-    basic_string& append(basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& append(const T& t);                 // C++17
     basic_string& append(const basic_string& str, size_type pos, size_type n=npos); //C++14
     template <class T>
         basic_string& append(const T& t, size_type pos, size_type n=npos); // C++17
@@ -189,7 +193,8 @@
     const_reference back() const;
 
     basic_string& assign(const basic_string& str);
-    basic_string& assign(basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& assign(const T& t);  // C++17
     basic_string& assign(basic_string&& str);
     basic_string& assign(const basic_string& str, size_type pos, size_type n=npos); // C++14
     template <class T>
@@ -202,7 +207,8 @@
     basic_string& assign(initializer_list<value_type>);
 
     basic_string& insert(size_type pos1, const basic_string& str);
-    basic_string& insert(size_type pos1, basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& insert(size_type pos1, const T& t);
     basic_string& insert(size_type pos1, const basic_string& str,
                          size_type pos2, size_type n);
     template <class T>
@@ -221,7 +227,8 @@
     iterator      erase(const_iterator first, const_iterator last);
 
     basic_string& replace(size_type pos1, size_type n1, const basic_string& str);
-    basic_string& replace(size_type pos1, size_type n1, basic_string_view<charT, traits> sv);
+    template <class T>
+    basic_string& replace(size_type pos1, size_type n1, const T& t);  // C++17
     basic_string& replace(size_type pos1, size_type n1, const basic_string& str,
                           size_type pos2, size_type n2=npos); // C++14
     template <class T>
@@ -231,7 +238,8 @@
     basic_string& replace(size_type pos, size_type n1, const value_type* s);
     basic_string& replace(size_type pos, size_type n1, size_type n2, value_type c);
     basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str);
-    basic_string& replace(const_iterator i1, const_iterator i2, basic_string_view<charT, traits> sv);
+    template <class T>
+        basic_string& replace(const_iterator i1, const_iterator i2, const T& t);  // C++17
     basic_string& replace(const_iterator i1, const_iterator i2, const value_type* s, size_type n);
     basic_string& replace(const_iterator i1, const_iterator i2, const value_type* s);
     basic_string& replace(const_iterator i1, const_iterator i2, size_type n, value_type c);
@@ -253,45 +261,53 @@
     allocator_type get_allocator() const noexcept;
 
     size_type find(const basic_string& str, size_type pos = 0) const noexcept;
-    size_type find(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
+    template <class T>
+        size_type find(const T& t, size_type pos = 0) const;  // C++17
     size_type find(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type find(const value_type* s, size_type pos = 0) const noexcept;
     size_type find(value_type c, size_type pos = 0) const noexcept;
 
     size_type rfind(const basic_string& str, size_type pos = npos) const noexcept;
-    size_type rfind(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
+    template <class T>
+        size_type rfind(const T& t, size_type pos = npos) const;  // C++17
     size_type rfind(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type rfind(const value_type* s, size_type pos = npos) const noexcept;
     size_type rfind(value_type c, size_type pos = npos) const noexcept;
 
     size_type find_first_of(const basic_string& str, size_type pos = 0) const noexcept;
-    size_type find_first_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
+    template <class T>
+        size_type find_first_of(const T& t, size_type pos = 0) const; // C++17
     size_type find_first_of(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type find_first_of(const value_type* s, size_type pos = 0) const noexcept;
     size_type find_first_of(value_type c, size_type pos = 0) const noexcept;
 
     size_type find_last_of(const basic_string& str, size_type pos = npos) const noexcept;
-    size_type find_last_of(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
+    template <class T>
+        size_type find_last_of(const T& t, size_type pos = npos) const noexcept;  // C++17
     size_type find_last_of(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type find_last_of(const value_type* s, size_type pos = npos) const noexcept;
     size_type find_last_of(value_type c, size_type pos = npos) const noexcept;
 
     size_type find_first_not_of(const basic_string& str, size_type pos = 0) const noexcept;
-    size_type find_first_not_of(basic_string_view<charT, traits> sv, size_type pos = 0) const noexcept;
+    template <class T>
+        size_type find_first_not_of(const T& t, size_type pos = 0) const; // C++17
     size_type find_first_not_of(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type find_first_not_of(const value_type* s, size_type pos = 0) const noexcept;
     size_type find_first_not_of(value_type c, size_type pos = 0) const noexcept;
 
     size_type find_last_not_of(const basic_string& str, size_type pos = npos) const noexcept;
-    size_type find_last_not_of(basic_string_view<charT, traits> sv, size_type pos = npos) const noexcept;
+    template <class T>
+        size_type find_last_not_of(const T& t, size_type pos = npos) const; // C++17
     size_type find_last_not_of(const value_type* s, size_type pos, size_type n) const noexcept;
     size_type find_last_not_of(const value_type* s, size_type pos = npos) const noexcept;
     size_type find_last_not_of(value_type c, size_type pos = npos) const noexcept;
 
     int compare(const basic_string& str) const noexcept;
-    int compare(basic_string_view<charT, traits> sv) const noexcept;
+    template <class T>
+        int compare(const T& t) const noexcept;  // C++17
     int compare(size_type pos1, size_type n1, const basic_string& str) const;
-    int compare(size_type pos1, size_type n1, basic_string_view<charT, traits> sv) const;
+    template <class T>
+        int compare(size_type pos1, size_type n1, const T& t) const;  // C++17
     int compare(size_type pos1, size_type n1, const basic_string& str,
                 size_type pos2, size_type n2=npos) const; // C++14
     template <class T>
@@ -665,6 +681,7 @@
                   "traits_type::char_type must be the same type as CharT");
     static_assert(( is_same<typename allocator_type::value_type, value_type>::value),
                   "Allocator::value_type must be same type as value_type");
+
 #if defined(_LIBCPP_RAW_ITERATORS)
     typedef pointer                                      iterator;
     typedef const_pointer                                const_iterator;
@@ -788,31 +805,51 @@
     _LIBCPP_INLINE_VISIBILITY
     basic_string(basic_string&& __str, const allocator_type& __a);
 #endif  // _LIBCPP_CXX03_LANG
-    _LIBCPP_INLINE_VISIBILITY basic_string(const _CharT* __s);
+
+    template <class = typename enable_if<__is_allocator<_Allocator>::value, nullptr_t>::type>
     _LIBCPP_INLINE_VISIBILITY
-    basic_string(const _CharT* __s, const _Allocator& __a);
+    basic_string(const _CharT* __s) {
+      _LIBCPP_ASSERT(__s != nullptr, "basic_string(const char*) detected nullptr");
+      __init(__s, traits_type::length(__s));
+#   if _LIBCPP_DEBUG_LEVEL >= 2
+      __get_db()->__insert_c(this);
+#   endif
+    }
+
+    template <class = typename enable_if<__is_allocator<_Allocator>::value, nullptr_t>::type>
+        _LIBCPP_INLINE_VISIBILITY
+        basic_string(const _CharT* __s, const _Allocator& __a);
+
     _LIBCPP_INLINE_VISIBILITY
     basic_string(const _CharT* __s, size_type __n);
     _LIBCPP_INLINE_VISIBILITY
     basic_string(const _CharT* __s, size_type __n, const _Allocator& __a);
     _LIBCPP_INLINE_VISIBILITY
     basic_string(size_type __n, _CharT __c);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string(size_type __n, _CharT __c, const _Allocator& __a);
+
+    template <class = typename enable_if<__is_allocator<_Allocator>::value, nullptr_t>::type>
+        _LIBCPP_INLINE_VISIBILITY
+        basic_string(size_type __n, _CharT __c, const _Allocator& __a);
+
     basic_string(const basic_string& __str, size_type __pos, size_type __n,
                  const _Allocator& __a = _Allocator());
     _LIBCPP_INLINE_VISIBILITY
     basic_string(const basic_string& __str, size_type __pos,
                  const _Allocator& __a = _Allocator());
-    template<class _Tp>
+
+    template<class _Tp, class = typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type>
         _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
         basic_string(const _Tp& __t, size_type __pos, size_type __n,
-                     const allocator_type& __a = allocator_type(),
-                     typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type* = 0);
-    _LIBCPP_INLINE_VISIBILITY explicit
-    basic_string(__self_view __sv);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string(__self_view __sv, const _Allocator& __a);
+                              const allocator_type& __a = allocator_type());
+
+    template<class _Tp, class = typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type>
+        _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+        explicit basic_string(const _Tp& __t);
+
+    template<class _Tp, class = typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type>
+        _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+        explicit basic_string(const _Tp& __t, const allocator_type& __a);
+
     template<class _InputIterator>
         _LIBCPP_INLINE_VISIBILITY
         basic_string(_InputIterator __first, _InputIterator __last);
@@ -833,11 +870,10 @@
 
     basic_string& operator=(const basic_string& __str);
 
-#ifndef _LIBCPP_CXX03_LANG
-    template <class = void>
-#endif
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& operator=(__self_view __sv)  {return assign(__sv);}
+    template <class _Tp, class = typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type>
+    basic_string& operator=(const _Tp& __t)
+        {__self_view __sv = __t; return assign(__sv);}
+
 #ifndef _LIBCPP_CXX03_LANG
     _LIBCPP_INLINE_VISIBILITY
     basic_string& operator=(basic_string&& __str)
@@ -927,7 +963,15 @@
     reference       at(size_type __n);
 
     _LIBCPP_INLINE_VISIBILITY basic_string& operator+=(const basic_string& __str) {return append(__str);}
-    _LIBCPP_INLINE_VISIBILITY basic_string& operator+=(__self_view __sv)          {return append(__sv);}
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                                            operator+=(const _Tp& __t)            {__self_view __sv = __t; return append(__sv);}
     _LIBCPP_INLINE_VISIBILITY basic_string& operator+=(const value_type* __s)     {return append(__s);}
     _LIBCPP_INLINE_VISIBILITY basic_string& operator+=(value_type __c)            {push_back(__c); return *this;}
 #ifndef _LIBCPP_CXX03_LANG
@@ -936,9 +980,17 @@
 
     _LIBCPP_INLINE_VISIBILITY
     basic_string& append(const basic_string& __str);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& append(__self_view __sv) { return append(__sv.data(), __sv.size()); }
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                  append(const _Tp& __t) { __self_view __sv = __t; return append(__sv.data(), __sv.size()); }
     basic_string& append(const basic_string& __str, size_type __pos, size_type __n=npos);
+
     template <class _Tp>
     _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
     typename enable_if
@@ -993,8 +1045,14 @@
     _LIBCPP_INLINE_VISIBILITY reference       back();
     _LIBCPP_INLINE_VISIBILITY const_reference back() const;
 
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& assign(__self_view __sv) { return assign(__sv.data(), __sv.size()); }
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                 assign(const _Tp & __t) { __self_view __sv = __t; return assign(__sv.data(), __sv.size()); }
     _LIBCPP_INLINE_VISIBILITY
     basic_string& assign(const basic_string& __str) { return *this = __str; }
 #ifndef _LIBCPP_CXX03_LANG
@@ -1040,8 +1098,17 @@
 
     _LIBCPP_INLINE_VISIBILITY
     basic_string& insert(size_type __pos1, const basic_string& __str);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& insert(size_type __pos1, __self_view __sv) { return insert(__pos1, __sv.data(), __sv.size()); }
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                 insert(size_type __pos1, const _Tp& __t)
+    { __self_view __sv = __t; return insert(__pos1, __sv.data(), __sv.size()); }
+
     template <class _Tp>
     _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
     typename enable_if
@@ -1089,8 +1156,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     basic_string& replace(size_type __pos1, size_type __n1, const basic_string& __str);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& replace(size_type __pos1, size_type __n1, __self_view __sv) { return replace(__pos1, __n1, __sv.data(), __sv.size()); }
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                  replace(size_type __pos1, size_type __n1, const _Tp& __t) { __self_view __sv = __t; return replace(__pos1, __n1, __sv.data(), __sv.size()); }
     basic_string& replace(size_type __pos1, size_type __n1, const basic_string& __str, size_type __pos2, size_type __n2=npos);
     template <class _Tp>
     _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
@@ -1105,8 +1179,16 @@
     basic_string& replace(size_type __pos, size_type __n1, size_type __n2, value_type __c);
     _LIBCPP_INLINE_VISIBILITY
     basic_string& replace(const_iterator __i1, const_iterator __i2, const basic_string& __str);
-    _LIBCPP_INLINE_VISIBILITY
-    basic_string& replace(const_iterator __i1, const_iterator __i2, __self_view __sv) { return replace(__i1 - begin(), __i2 - __i1, __sv); }
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            basic_string&
+        >::type
+                  replace(const_iterator __i1, const_iterator __i2, const _Tp& __t) { __self_view __sv = __t; return replace(__i1 - begin(), __i2 - __i1, __sv); }
+
     _LIBCPP_INLINE_VISIBILITY
     basic_string& replace(const_iterator __i1, const_iterator __i2, const value_type* __s, size_type __n);
     _LIBCPP_INLINE_VISIBILITY
@@ -1154,8 +1236,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type find(const basic_string& __str, size_type __pos = 0) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type find(__self_view __sv, size_type __pos = 0) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              find(const _Tp& __t, size_type __pos = 0) const;
     size_type find(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type find(const value_type* __s, size_type __pos = 0) const _NOEXCEPT;
@@ -1163,8 +1252,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type rfind(const basic_string& __str, size_type __pos = npos) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type rfind(__self_view __sv, size_type __pos = npos) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              rfind(const _Tp& __t, size_type __pos = npos) const;
     size_type rfind(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type rfind(const value_type* __s, size_type __pos = npos) const _NOEXCEPT;
@@ -1172,8 +1268,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type find_first_of(const basic_string& __str, size_type __pos = 0) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type find_first_of(__self_view __sv, size_type __pos = 0) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              find_first_of(const _Tp& __t, size_type __pos = 0) const;
     size_type find_first_of(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type find_first_of(const value_type* __s, size_type __pos = 0) const _NOEXCEPT;
@@ -1182,8 +1285,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type find_last_of(const basic_string& __str, size_type __pos = npos) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type find_last_of(__self_view __sv, size_type __pos = npos) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              find_last_of(const _Tp& __t, size_type __pos = npos) const;
     size_type find_last_of(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type find_last_of(const value_type* __s, size_type __pos = npos) const _NOEXCEPT;
@@ -1192,8 +1302,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type find_first_not_of(const basic_string& __str, size_type __pos = 0) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type find_first_not_of(__self_view __sv, size_type __pos = 0) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              find_first_not_of(const _Tp &__t, size_type __pos = 0) const;
     size_type find_first_not_of(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type find_first_not_of(const value_type* __s, size_type __pos = 0) const _NOEXCEPT;
@@ -1202,8 +1319,15 @@
 
     _LIBCPP_INLINE_VISIBILITY
     size_type find_last_not_of(const basic_string& __str, size_type __pos = npos) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    size_type find_last_not_of(__self_view __sv, size_type __pos = npos) const _NOEXCEPT;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            size_type
+        >::type
+              find_last_not_of(const _Tp& __t, size_type __pos = npos) const;
     size_type find_last_not_of(const value_type* __s, size_type __pos, size_type __n) const _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     size_type find_last_not_of(const value_type* __s, size_type __pos = npos) const _NOEXCEPT;
@@ -1212,13 +1336,29 @@
 
     _LIBCPP_INLINE_VISIBILITY
     int compare(const basic_string& __str) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    int compare(__self_view __sv) const _NOEXCEPT;
-    _LIBCPP_INLINE_VISIBILITY
-    int compare(size_type __pos1, size_type __n1, __self_view __sv) const;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            int
+        >::type
+        compare(const _Tp &__t) const;
+
+    template <class _Tp>
+    _LIBCPP_METHOD_TEMPLATE_IMPLICIT_INSTANTIATION_VIS
+    typename enable_if
+        <
+            __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+            int
+        >::type
+         compare(size_type __pos1, size_type __n1, const _Tp& __t) const;
+
     _LIBCPP_INLINE_VISIBILITY
     int compare(size_type __pos1, size_type __n1, const basic_string& __str) const;
     int compare(size_type __pos1, size_type __n1, const basic_string& __str, size_type __pos2, size_type __n2=npos) const;
+
     template <class _Tp>
     inline _LIBCPP_INLINE_VISIBILITY
         typename enable_if
@@ -1259,7 +1399,7 @@
 
     _LIBCPP_INLINE_VISIBILITY bool __invariants() const;
 
-    _LIBCPP_INLINE_VISIBILITY void __clear_and_shrink();
+    _LIBCPP_INLINE_VISIBILITY void __clear_and_shrink() _NOEXCEPT;
     
     _LIBCPP_INLINE_VISIBILITY
     bool __is_long() const _NOEXCEPT
@@ -1503,6 +1643,23 @@
          >
 basic_string(_InputIterator, _InputIterator, _Allocator = _Allocator())
   -> basic_string<_CharT, char_traits<_CharT>, _Allocator>;
+
+template<class _CharT,
+         class _Traits,
+         class _Allocator = allocator<_CharT>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type
+         >
+explicit basic_string(basic_string_view<_CharT, _Traits>, const _Allocator& = _Allocator())
+  -> basic_string<_CharT, _Traits, _Allocator>;
+
+template<class _CharT,
+         class _Traits,
+         class _Allocator = allocator<_CharT>,
+         class = typename enable_if<__is_allocator<_Allocator>::value, void>::type,
+         class _Sz = typename allocator_traits<_Allocator>::size_type
+         >
+basic_string(basic_string_view<_CharT, _Traits>, _Sz, _Sz, const _Allocator& = _Allocator())
+  -> basic_string<_CharT, _Traits, _Allocator>;
 #endif
 
                   
@@ -1623,18 +1780,7 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-basic_string<_CharT, _Traits, _Allocator>::basic_string(const _CharT* __s)
-{
-    _LIBCPP_ASSERT(__s != nullptr, "basic_string(const char*) detected nullptr");
-    __init(__s, traits_type::length(__s));
-#if _LIBCPP_DEBUG_LEVEL >= 2
-    __get_db()->__insert_c(this);
-#endif
-}
-
-template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
+template <class>
 basic_string<_CharT, _Traits, _Allocator>::basic_string(const _CharT* __s, const _Allocator& __a)
     : __r_(__second_tag(), __a)
 {
@@ -1771,7 +1917,7 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
+template <class>
 basic_string<_CharT, _Traits, _Allocator>::basic_string(size_type __n, _CharT __c, const _Allocator& __a)
     : __r_(__second_tag(), __a)
 {
@@ -1812,13 +1958,13 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-template <class _Tp>
+template <class _Tp, class>
 basic_string<_CharT, _Traits, _Allocator>::basic_string(
-             const _Tp& __t, size_type __pos, size_type __n, const allocator_type& __a,
-             typename enable_if<__can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value, void>::type *)
+             const _Tp& __t, size_type __pos, size_type __n, const allocator_type& __a)
     : __r_(__second_tag(), __a)
 {
-    __self_view __sv = __self_view(__t).substr(__pos, __n);
+    __self_view __sv0 = __t;
+    __self_view __sv = __sv0.substr(__pos, __n);
     __init(__sv.data(), __sv.size());
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
@@ -1826,9 +1972,10 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-basic_string<_CharT, _Traits, _Allocator>::basic_string(__self_view __sv)
+template <class _Tp, class>
+basic_string<_CharT, _Traits, _Allocator>::basic_string(const _Tp & __t)
 {
+    __self_view __sv = __t;
     __init(__sv.data(), __sv.size());
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
@@ -1836,10 +1983,11 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-basic_string<_CharT, _Traits, _Allocator>::basic_string(__self_view __sv, const _Allocator& __a)
+template <class _Tp, class>
+basic_string<_CharT, _Traits, _Allocator>::basic_string(const _Tp & __t, const _Allocator& __a)
     : __r_(__second_tag(), __a)
 {
+    __self_view __sv = __t;
     __init(__sv.data(), __sv.size());
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
@@ -3149,11 +3297,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::find(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::find(const _Tp &__t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_find<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3202,11 +3355,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::rfind(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::rfind(const _Tp& __t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_rfind<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3255,11 +3413,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::find_first_of(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::find_first_of(const _Tp& __t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_find_first_of<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3308,11 +3471,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::find_last_of(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::find_last_of(const _Tp& __t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_find_last_of<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3361,11 +3529,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::find_first_not_of(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::find_first_not_of(const _Tp& __t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_find_first_not_of<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3415,11 +3588,16 @@
 }
 
 template<class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-typename basic_string<_CharT, _Traits, _Allocator>::size_type
-basic_string<_CharT, _Traits, _Allocator>::find_last_not_of(__self_view __sv,
-                                                size_type __pos) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    typename basic_string<_CharT, _Traits, _Allocator>::size_type
+>::type
+basic_string<_CharT, _Traits, _Allocator>::find_last_not_of(const _Tp& __t,
+                                                size_type __pos) const
 {
+    __self_view __sv = __t;
     return __str_find_last_not_of<value_type, size_type, traits_type, npos>
         (data(), size(), __sv.data(), __pos, __sv.size());
 }
@@ -3448,10 +3626,15 @@
 // compare
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-int
-basic_string<_CharT, _Traits, _Allocator>::compare(__self_view __sv) const _NOEXCEPT
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    int
+>::type
+basic_string<_CharT, _Traits, _Allocator>::compare(const _Tp& __t) const
 {
+    __self_view __sv = __t;
     size_t __lhs_sz = size();
     size_t __rhs_sz = __sv.size();
     int __result = traits_type::compare(data(), __sv.data(),
@@ -3497,12 +3680,17 @@
 }
 
 template <class _CharT, class _Traits, class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-int
+template <class _Tp>
+typename enable_if
+<
+    __can_be_converted_to_string_view<_CharT, _Traits, _Tp>::value,
+    int
+>::type
 basic_string<_CharT, _Traits, _Allocator>::compare(size_type __pos1,
                                                    size_type __n1,
-                                                   __self_view __sv) const
+                                                   const _Tp& __t) const
 {
+    __self_view __sv = __t;
     return compare(__pos1, __n1, __sv.data(), __sv.size());
 }
 
@@ -3585,7 +3773,7 @@
 template<class _CharT, class _Traits, class _Allocator>
 inline _LIBCPP_INLINE_VISIBILITY
 void 
-basic_string<_CharT, _Traits, _Allocator>::__clear_and_shrink()
+basic_string<_CharT, _Traits, _Allocator>::__clear_and_shrink() _NOEXCEPT
 {
     clear();
     if(__is_long())
diff --git a/linux-x64/clang/include/c++/v1/support/android/locale_bionic.h b/linux-x64/clang/include/c++/v1/support/android/locale_bionic.h
index 081035d..50fcf5c 100644
--- a/linux-x64/clang/include/c++/v1/support/android/locale_bionic.h
+++ b/linux-x64/clang/include/c++/v1/support/android/locale_bionic.h
@@ -24,7 +24,45 @@
 }
 #endif
 
+#if defined(__ANDROID__)
+
+#include <android/api-level.h>
+#include <android/ndk-version.h>
 #include <support/xlocale/__posix_l_fallback.h>
+// In NDK versions later than 16, locale-aware functions are provided by
+// legacy_stdlib_inlines.h
+#if __NDK_MAJOR__ <= 16
+#if __ANDROID_API__ < 21
+#include <support/xlocale/__strtonum_fallback.h>
+#elif __ANDROID_API__ < 26
+
+#if defined(__cplusplus)
+extern "C" {
+#endif
+
+inline _LIBCPP_INLINE_VISIBILITY float strtof_l(const char* __nptr, char** __endptr,
+                                                locale_t) {
+  return ::strtof(__nptr, __endptr);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY double strtod_l(const char* __nptr,
+                                                 char** __endptr, locale_t) {
+  return ::strtod(__nptr, __endptr);
+}
+
+inline _LIBCPP_INLINE_VISIBILITY long strtol_l(const char* __nptr, char** __endptr,
+                                               int __base, locale_t) {
+  return ::strtol(__nptr, __endptr, __base);
+}
+
+#if defined(__cplusplus)
+}
+#endif
+
+#endif // __ANDROID_API__ < 26
+
+#endif // __NDK_MAJOR__ <= 16
+#endif // defined(__ANDROID__)
 
 #endif // defined(__BIONIC__)
 #endif // _LIBCPP_SUPPORT_ANDROID_LOCALE_BIONIC_H
diff --git a/linux-x64/clang/include/c++/v1/support/newlib/xlocale.h b/linux-x64/clang/include/c++/v1/support/newlib/xlocale.h
index 4b7e9b7..09f9e39 100644
--- a/linux-x64/clang/include/c++/v1/support/newlib/xlocale.h
+++ b/linux-x64/clang/include/c++/v1/support/newlib/xlocale.h
@@ -19,9 +19,9 @@
 #if !defined(__NEWLIB__) || __NEWLIB__ < 2 || \
     __NEWLIB__ == 2 && __NEWLIB_MINOR__ < 5
 #include <support/xlocale/__nop_locale_mgmt.h>
-#endif
 #include <support/xlocale/__posix_l_fallback.h>
 #include <support/xlocale/__strtonum_fallback.h>
+#endif
 
 #endif // _NEWLIB_VERSION
 
diff --git a/linux-x64/clang/include/c++/v1/support/win32/locale_win32.h b/linux-x64/clang/include/c++/v1/support/win32/locale_win32.h
index aebfff2..68682c9 100644
--- a/linux-x64/clang/include/c++/v1/support/win32/locale_win32.h
+++ b/linux-x64/clang/include/c++/v1/support/win32/locale_win32.h
@@ -46,6 +46,10 @@
         return __left.__locale == nullptr && __right == 0;
     }
 
+    friend bool operator==(const locale_t& __left, long long __right) {
+        return __left.__locale == nullptr && __right == 0;
+    }
+
     friend bool operator==(const locale_t& __left, std::nullptr_t) {
         return __left.__locale == nullptr;
     }
@@ -66,6 +70,10 @@
         return !(__left == __right);
     }
 
+    friend bool operator!=(const locale_t& __left, long long __right) {
+        return !(__left == __right);
+    }
+
     friend bool operator!=(const locale_t& __left, std::nullptr_t __right) {
         return !(__left == __right);
     }
diff --git a/linux-x64/clang/include/c++/v1/support/xlocale/__posix_l_fallback.h b/linux-x64/clang/include/c++/v1/support/xlocale/__posix_l_fallback.h
index c893a67..b9a0939 100644
--- a/linux-x64/clang/include/c++/v1/support/xlocale/__posix_l_fallback.h
+++ b/linux-x64/clang/include/c++/v1/support/xlocale/__posix_l_fallback.h
@@ -20,141 +20,141 @@
 extern "C" {
 #endif
 
-inline _LIBCPP_ALWAYS_INLINE int isalnum_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isalnum_l(int c, locale_t) {
   return ::isalnum(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isalpha_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isalpha_l(int c, locale_t) {
   return ::isalpha(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isblank_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isblank_l(int c, locale_t) {
   return ::isblank(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iscntrl_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iscntrl_l(int c, locale_t) {
   return ::iscntrl(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isdigit_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isdigit_l(int c, locale_t) {
   return ::isdigit(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isgraph_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isgraph_l(int c, locale_t) {
   return ::isgraph(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int islower_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int islower_l(int c, locale_t) {
   return ::islower(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isprint_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isprint_l(int c, locale_t) {
   return ::isprint(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int ispunct_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int ispunct_l(int c, locale_t) {
   return ::ispunct(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isspace_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isspace_l(int c, locale_t) {
   return ::isspace(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isupper_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isupper_l(int c, locale_t) {
   return ::isupper(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int isxdigit_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int isxdigit_l(int c, locale_t) {
   return ::isxdigit(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswalnum_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswalnum_l(wint_t c, locale_t) {
   return ::iswalnum(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswalpha_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswalpha_l(wint_t c, locale_t) {
   return ::iswalpha(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswblank_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswblank_l(wint_t c, locale_t) {
   return ::iswblank(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswcntrl_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswcntrl_l(wint_t c, locale_t) {
   return ::iswcntrl(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswdigit_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswdigit_l(wint_t c, locale_t) {
   return ::iswdigit(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswgraph_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswgraph_l(wint_t c, locale_t) {
   return ::iswgraph(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswlower_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswlower_l(wint_t c, locale_t) {
   return ::iswlower(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswprint_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswprint_l(wint_t c, locale_t) {
   return ::iswprint(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswpunct_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswpunct_l(wint_t c, locale_t) {
   return ::iswpunct(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswspace_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswspace_l(wint_t c, locale_t) {
   return ::iswspace(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswupper_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswupper_l(wint_t c, locale_t) {
   return ::iswupper(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int iswxdigit_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int iswxdigit_l(wint_t c, locale_t) {
   return ::iswxdigit(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int toupper_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int toupper_l(int c, locale_t) {
   return ::toupper(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int tolower_l(int c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int tolower_l(int c, locale_t) {
   return ::tolower(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE wint_t towupper_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY wint_t towupper_l(wint_t c, locale_t) {
   return ::towupper(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE wint_t towlower_l(wint_t c, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY wint_t towlower_l(wint_t c, locale_t) {
   return ::towlower(c);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int strcoll_l(const char *s1, const char *s2,
-                                           locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int strcoll_l(const char *s1, const char *s2,
+                                               locale_t) {
   return ::strcoll(s1, s2);
 }
 
-inline _LIBCPP_ALWAYS_INLINE size_t strxfrm_l(char *dest, const char *src,
-                                              size_t n, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY size_t strxfrm_l(char *dest, const char *src,
+                                                  size_t n, locale_t) {
   return ::strxfrm(dest, src, n);
 }
 
-inline _LIBCPP_ALWAYS_INLINE size_t strftime_l(char *s, size_t max,
-                                               const char *format,
-                                               const struct tm *tm, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY size_t strftime_l(char *s, size_t max,
+                                                   const char *format,
+                                                   const struct tm *tm, locale_t) {
   return ::strftime(s, max, format, tm);
 }
 
-inline _LIBCPP_ALWAYS_INLINE int wcscoll_l(const wchar_t *ws1,
-                                           const wchar_t *ws2, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY int wcscoll_l(const wchar_t *ws1,
+                                               const wchar_t *ws2, locale_t) {
   return ::wcscoll(ws1, ws2);
 }
 
-inline _LIBCPP_ALWAYS_INLINE size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src,
-                                              size_t n, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY size_t wcsxfrm_l(wchar_t *dest, const wchar_t *src,
+                                                  size_t n, locale_t) {
   return ::wcsxfrm(dest, src, n);
 }
 
diff --git a/linux-x64/clang/include/c++/v1/support/xlocale/__strtonum_fallback.h b/linux-x64/clang/include/c++/v1/support/xlocale/__strtonum_fallback.h
index 4ae3918..50b4db3 100644
--- a/linux-x64/clang/include/c++/v1/support/xlocale/__strtonum_fallback.h
+++ b/linux-x64/clang/include/c++/v1/support/xlocale/__strtonum_fallback.h
@@ -20,43 +20,43 @@
 extern "C" {
 #endif
 
-inline _LIBCPP_ALWAYS_INLINE float strtof_l(const char *nptr,
-                                            char **endptr, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY float strtof_l(const char *nptr,
+                                                char **endptr, locale_t) {
   return ::strtof(nptr, endptr);
 }
 
-inline _LIBCPP_ALWAYS_INLINE double strtod_l(const char *nptr,
-                                                   char **endptr, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY double strtod_l(const char *nptr,
+                                                 char **endptr, locale_t) {
   return ::strtod(nptr, endptr);
 }
 
-inline _LIBCPP_ALWAYS_INLINE long double strtold_l(const char *nptr,
-                                                   char **endptr, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY long double strtold_l(const char *nptr,
+                                                       char **endptr, locale_t) {
   return ::strtold(nptr, endptr);
 }
 
-inline _LIBCPP_ALWAYS_INLINE long long
+inline _LIBCPP_INLINE_VISIBILITY long long
 strtoll_l(const char *nptr, char **endptr, int base, locale_t) {
   return ::strtoll(nptr, endptr, base);
 }
 
-inline _LIBCPP_ALWAYS_INLINE unsigned long long
+inline _LIBCPP_INLINE_VISIBILITY unsigned long long
 strtoull_l(const char *nptr, char **endptr, int base, locale_t) {
   return ::strtoull(nptr, endptr, base);
 }
 
-inline _LIBCPP_ALWAYS_INLINE long long
+inline _LIBCPP_INLINE_VISIBILITY long long
 wcstoll_l(const wchar_t *nptr, wchar_t **endptr, int base, locale_t) {
   return ::wcstoll(nptr, endptr, base);
 }
 
-inline _LIBCPP_ALWAYS_INLINE unsigned long long
+inline _LIBCPP_INLINE_VISIBILITY unsigned long long
 wcstoull_l(const wchar_t *nptr, wchar_t **endptr, int base, locale_t) {
   return ::wcstoull(nptr, endptr, base);
 }
 
-inline _LIBCPP_ALWAYS_INLINE long double wcstold_l(const wchar_t *nptr,
-                                                   wchar_t **endptr, locale_t) {
+inline _LIBCPP_INLINE_VISIBILITY long double wcstold_l(const wchar_t *nptr,
+                                                       wchar_t **endptr, locale_t) {
   return ::wcstold(nptr, endptr);
 }
 
diff --git a/linux-x64/clang/include/c++/v1/system_error b/linux-x64/clang/include/c++/v1/system_error
index c577edc..6e2c838 100644
--- a/linux-x64/clang/include/c++/v1/system_error
+++ b/linux-x64/clang/include/c++/v1/system_error
@@ -120,88 +120,6 @@
     const char* what() const noexcept;
 };
 
-enum class errc
-{
-    address_family_not_supported,       // EAFNOSUPPORT
-    address_in_use,                     // EADDRINUSE
-    address_not_available,              // EADDRNOTAVAIL
-    already_connected,                  // EISCONN
-    argument_list_too_long,             // E2BIG
-    argument_out_of_domain,             // EDOM
-    bad_address,                        // EFAULT
-    bad_file_descriptor,                // EBADF
-    bad_message,                        // EBADMSG
-    broken_pipe,                        // EPIPE
-    connection_aborted,                 // ECONNABORTED
-    connection_already_in_progress,     // EALREADY
-    connection_refused,                 // ECONNREFUSED
-    connection_reset,                   // ECONNRESET
-    cross_device_link,                  // EXDEV
-    destination_address_required,       // EDESTADDRREQ
-    device_or_resource_busy,            // EBUSY
-    directory_not_empty,                // ENOTEMPTY
-    executable_format_error,            // ENOEXEC
-    file_exists,                        // EEXIST
-    file_too_large,                     // EFBIG
-    filename_too_long,                  // ENAMETOOLONG
-    function_not_supported,             // ENOSYS
-    host_unreachable,                   // EHOSTUNREACH
-    identifier_removed,                 // EIDRM
-    illegal_byte_sequence,              // EILSEQ
-    inappropriate_io_control_operation, // ENOTTY
-    interrupted,                        // EINTR
-    invalid_argument,                   // EINVAL
-    invalid_seek,                       // ESPIPE
-    io_error,                           // EIO
-    is_a_directory,                     // EISDIR
-    message_size,                       // EMSGSIZE
-    network_down,                       // ENETDOWN
-    network_reset,                      // ENETRESET
-    network_unreachable,                // ENETUNREACH
-    no_buffer_space,                    // ENOBUFS
-    no_child_process,                   // ECHILD
-    no_link,                            // ENOLINK
-    no_lock_available,                  // ENOLCK
-    no_message_available,               // ENODATA
-    no_message,                         // ENOMSG
-    no_protocol_option,                 // ENOPROTOOPT
-    no_space_on_device,                 // ENOSPC
-    no_stream_resources,                // ENOSR
-    no_such_device_or_address,          // ENXIO
-    no_such_device,                     // ENODEV
-    no_such_file_or_directory,          // ENOENT
-    no_such_process,                    // ESRCH
-    not_a_directory,                    // ENOTDIR
-    not_a_socket,                       // ENOTSOCK
-    not_a_stream,                       // ENOSTR
-    not_connected,                      // ENOTCONN
-    not_enough_memory,                  // ENOMEM
-    not_supported,                      // ENOTSUP
-    operation_canceled,                 // ECANCELED
-    operation_in_progress,              // EINPROGRESS
-    operation_not_permitted,            // EPERM
-    operation_not_supported,            // EOPNOTSUPP
-    operation_would_block,              // EWOULDBLOCK
-    owner_dead,                         // EOWNERDEAD
-    permission_denied,                  // EACCES
-    protocol_error,                     // EPROTO
-    protocol_not_supported,             // EPROTONOSUPPORT
-    read_only_file_system,              // EROFS
-    resource_deadlock_would_occur,      // EDEADLK
-    resource_unavailable_try_again,     // EAGAIN
-    result_out_of_range,                // ERANGE
-    state_not_recoverable,              // ENOTRECOVERABLE
-    stream_timeout,                     // ETIME
-    text_file_busy,                     // ETXTBSY
-    timed_out,                          // ETIMEDOUT
-    too_many_files_open_in_system,      // ENFILE
-    too_many_files_open,                // EMFILE
-    too_many_links,                     // EMLINK
-    too_many_symbolic_link_levels,      // ELOOP
-    value_too_large,                    // EOVERFLOW
-    wrong_protocol_type                 // EPROTOTYPE
-};
-
 template <> struct is_error_condition_enum<errc>
     : true_type { }
 
@@ -225,8 +143,7 @@
 
 */
 
-#include <__config>
-#include <cerrno>
+#include <__errc>
 #include <type_traits>
 #include <stdexcept>
 #include <__functional_base>
@@ -260,109 +177,6 @@
 _LIBCPP_INLINE_VAR constexpr size_t is_error_condition_enum_v = is_error_condition_enum<_Tp>::value;
 #endif
 
-// Some error codes are not present on all platforms, so we provide equivalents
-// for them:
-
-//enum class errc
-_LIBCPP_DECLARE_STRONG_ENUM(errc)
-{
-    address_family_not_supported        = EAFNOSUPPORT,
-    address_in_use                      = EADDRINUSE,
-    address_not_available               = EADDRNOTAVAIL,
-    already_connected                   = EISCONN,
-    argument_list_too_long              = E2BIG,
-    argument_out_of_domain              = EDOM,
-    bad_address                         = EFAULT,
-    bad_file_descriptor                 = EBADF,
-    bad_message                         = EBADMSG,
-    broken_pipe                         = EPIPE,
-    connection_aborted                  = ECONNABORTED,
-    connection_already_in_progress      = EALREADY,
-    connection_refused                  = ECONNREFUSED,
-    connection_reset                    = ECONNRESET,
-    cross_device_link                   = EXDEV,
-    destination_address_required        = EDESTADDRREQ,
-    device_or_resource_busy             = EBUSY,
-    directory_not_empty                 = ENOTEMPTY,
-    executable_format_error             = ENOEXEC,
-    file_exists                         = EEXIST,
-    file_too_large                      = EFBIG,
-    filename_too_long                   = ENAMETOOLONG,
-    function_not_supported              = ENOSYS,
-    host_unreachable                    = EHOSTUNREACH,
-    identifier_removed                  = EIDRM,
-    illegal_byte_sequence               = EILSEQ,
-    inappropriate_io_control_operation  = ENOTTY,
-    interrupted                         = EINTR,
-    invalid_argument                    = EINVAL,
-    invalid_seek                        = ESPIPE,
-    io_error                            = EIO,
-    is_a_directory                      = EISDIR,
-    message_size                        = EMSGSIZE,
-    network_down                        = ENETDOWN,
-    network_reset                       = ENETRESET,
-    network_unreachable                 = ENETUNREACH,
-    no_buffer_space                     = ENOBUFS,
-    no_child_process                    = ECHILD,
-    no_link                             = ENOLINK,
-    no_lock_available                   = ENOLCK,
-#ifdef ENODATA
-    no_message_available                = ENODATA,
-#else
-    no_message_available                = ENOMSG,
-#endif
-    no_message                          = ENOMSG,
-    no_protocol_option                  = ENOPROTOOPT,
-    no_space_on_device                  = ENOSPC,
-#ifdef ENOSR
-    no_stream_resources                 = ENOSR,
-#else
-    no_stream_resources                 = ENOMEM,
-#endif
-    no_such_device_or_address           = ENXIO,
-    no_such_device                      = ENODEV,
-    no_such_file_or_directory           = ENOENT,
-    no_such_process                     = ESRCH,
-    not_a_directory                     = ENOTDIR,
-    not_a_socket                        = ENOTSOCK,
-#ifdef ENOSTR
-    not_a_stream                        = ENOSTR,
-#else
-    not_a_stream                        = EINVAL,
-#endif
-    not_connected                       = ENOTCONN,
-    not_enough_memory                   = ENOMEM,
-    not_supported                       = ENOTSUP,
-    operation_canceled                  = ECANCELED,
-    operation_in_progress               = EINPROGRESS,
-    operation_not_permitted             = EPERM,
-    operation_not_supported             = EOPNOTSUPP,
-    operation_would_block               = EWOULDBLOCK,
-    owner_dead                          = EOWNERDEAD,
-    permission_denied                   = EACCES,
-    protocol_error                      = EPROTO,
-    protocol_not_supported              = EPROTONOSUPPORT,
-    read_only_file_system               = EROFS,
-    resource_deadlock_would_occur       = EDEADLK,
-    resource_unavailable_try_again      = EAGAIN,
-    result_out_of_range                 = ERANGE,
-    state_not_recoverable               = ENOTRECOVERABLE,
-#ifdef ETIME
-    stream_timeout                      = ETIME,
-#else
-    stream_timeout                      = ETIMEDOUT,
-#endif
-    text_file_busy                      = ETXTBSY,
-    timed_out                           = ETIMEDOUT,
-    too_many_files_open_in_system       = ENFILE,
-    too_many_files_open                 = EMFILE,
-    too_many_links                      = EMLINK,
-    too_many_symbolic_link_levels       = ELOOP,
-    value_too_large                     = EOVERFLOW,
-    wrong_protocol_type                 = EPROTOTYPE
-};
-_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(errc)
-
 template <>
 struct _LIBCPP_TEMPLATE_VIS is_error_condition_enum<errc>
     : true_type { };
@@ -385,11 +199,11 @@
 public:
     virtual ~error_category() _NOEXCEPT;
 
-#if defined(_LIBCPP_BUILDING_SYSTEM_ERROR) && \
+#if defined(_LIBCPP_BUILDING_LIBRARY) && \
     defined(_LIBCPP_DEPRECATED_ABI_LEGACY_LIBRARY_DEFINITIONS_FOR_INLINE_FUNCTIONS)
     error_category() _NOEXCEPT;
 #else
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     _LIBCPP_CONSTEXPR_AFTER_CXX11 error_category() _NOEXCEPT _LIBCPP_DEFAULT
 #endif
 private:
@@ -403,13 +217,13 @@
     virtual bool equivalent(const error_code& __code, int __condition) const _NOEXCEPT;
     virtual string message(int __ev) const = 0;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool operator==(const error_category& __rhs) const _NOEXCEPT {return this == &__rhs;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool operator!=(const error_category& __rhs) const _NOEXCEPT {return !(*this == __rhs);}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     bool operator< (const error_category& __rhs) const _NOEXCEPT {return this < &__rhs;}
 
     friend class _LIBCPP_HIDDEN __do_message;
@@ -430,21 +244,21 @@
     int __val_;
     const error_category* __cat_;
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     error_condition() _NOEXCEPT : __val_(0), __cat_(&generic_category()) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     error_condition(int __val, const error_category& __cat) _NOEXCEPT
         : __val_(__val), __cat_(&__cat) {}
 
     template <class _Ep>
-        _LIBCPP_ALWAYS_INLINE
+        _LIBCPP_INLINE_VISIBILITY
         error_condition(_Ep __e,
               typename enable_if<is_error_condition_enum<_Ep>::value>::type* = 0
                                                                      ) _NOEXCEPT
             {*this = make_error_condition(__e);}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void assign(int __val, const error_category& __cat) _NOEXCEPT
     {
         __val_ = __val;
@@ -452,7 +266,7 @@
     }
 
     template <class _Ep>
-        _LIBCPP_ALWAYS_INLINE
+        _LIBCPP_INLINE_VISIBILITY
         typename enable_if
         <
             is_error_condition_enum<_Ep>::value,
@@ -461,21 +275,21 @@
         operator=(_Ep __e) _NOEXCEPT
             {*this = make_error_condition(__e); return *this;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT
     {
         __val_ = 0;
         __cat_ = &generic_category();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int value() const _NOEXCEPT {return __val_;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const error_category& category() const _NOEXCEPT {return *__cat_;}
     string message() const;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
         _LIBCPP_EXPLICIT
         operator bool() const _NOEXCEPT {return __val_ != 0;}
 };
@@ -502,21 +316,21 @@
     int __val_;
     const error_category* __cat_;
 public:
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     error_code() _NOEXCEPT : __val_(0), __cat_(&system_category()) {}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     error_code(int __val, const error_category& __cat) _NOEXCEPT
         : __val_(__val), __cat_(&__cat) {}
 
     template <class _Ep>
-        _LIBCPP_ALWAYS_INLINE
+        _LIBCPP_INLINE_VISIBILITY
         error_code(_Ep __e,
                    typename enable_if<is_error_code_enum<_Ep>::value>::type* = 0
                                                                      ) _NOEXCEPT
             {*this = make_error_code(__e);}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void assign(int __val, const error_category& __cat) _NOEXCEPT
     {
         __val_ = __val;
@@ -524,7 +338,7 @@
     }
 
     template <class _Ep>
-        _LIBCPP_ALWAYS_INLINE
+        _LIBCPP_INLINE_VISIBILITY
         typename enable_if
         <
             is_error_code_enum<_Ep>::value,
@@ -533,26 +347,26 @@
         operator=(_Ep __e) _NOEXCEPT
             {*this = make_error_code(__e); return *this;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT
     {
         __val_ = 0;
         __cat_ = &system_category();
     }
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     int value() const _NOEXCEPT {return __val_;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const error_category& category() const _NOEXCEPT {return *__cat_;}
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     error_condition default_error_condition() const _NOEXCEPT
         {return __cat_->default_error_condition(__val_);}
 
     string message() const;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
         _LIBCPP_EXPLICIT
         operator bool() const _NOEXCEPT {return __val_ != 0;}
 };
@@ -658,7 +472,7 @@
     system_error(int __ev, const error_category& __ecat);
     ~system_error() _NOEXCEPT;
 
-    _LIBCPP_ALWAYS_INLINE
+    _LIBCPP_INLINE_VISIBILITY
     const error_code& code() const _NOEXCEPT {return __ec_;}
 
 private:
diff --git a/linux-x64/clang/include/c++/v1/type_traits b/linux-x64/clang/include/c++/v1/type_traits
index 5cb3b5c..e413d26 100644
--- a/linux-x64/clang/include/c++/v1/type_traits
+++ b/linux-x64/clang/include/c++/v1/type_traits
@@ -21,7 +21,7 @@
     template <class T, T v> struct integral_constant;
     typedef integral_constant<bool, true>  true_type;   // C++11
     typedef integral_constant<bool, false> false_type;  // C++11
-    
+
     template <bool B>                                   // C++14
     using bool_constant = integral_constant<bool, B>;   // C++14
     typedef bool_constant<true> true_type;              // C++14
@@ -75,6 +75,10 @@
     template <class T> struct remove_pointer;
     template <class T> struct add_pointer;
 
+    template<class T> struct type_identity;                     // C++20
+    template<class T>
+      using type_identity_t = typename type_identity<T>::type;  // C++20
+
     // Integral properties:
     template <class T> struct is_signed;
     template <class T> struct is_unsigned;
@@ -172,7 +176,7 @@
       using add_volatile_t    = typename add_volatile<T>::type;  // C++14
     template <class T>
       using add_cv_t          = typename add_cv<T>::type;  // C++14
-  
+
     // reference modifications:
     template <class T>
       using remove_reference_t     = typename remove_reference<T>::type;  // C++14
@@ -180,13 +184,13 @@
       using add_lvalue_reference_t = typename add_lvalue_reference<T>::type;  // C++14
     template <class T>
       using add_rvalue_reference_t = typename add_rvalue_reference<T>::type;  // C++14
-  
+
     // sign modifications:
     template <class T>
       using make_signed_t   = typename make_signed<T>::type;  // C++14
     template <class T>
       using make_unsigned_t = typename make_unsigned<T>::type;  // C++14
-  
+
     // array modifications:
     template <class T>
       using remove_extent_t      = typename remove_extent<T>::type;  // C++14
@@ -223,7 +227,7 @@
 
     template <class...>
       using void_t = void;   // C++17
-      
+
       // See C++14 20.10.4.1, primary type categories
       template <class T> inline constexpr bool is_void_v
         = is_void<T>::value;                                             // C++17
@@ -386,13 +390,13 @@
 
       // [meta.logical], logical operator traits:
       template<class... B> struct conjunction;                           // C++17
-      template<class... B> 
+      template<class... B>
         inline constexpr bool conjunction_v = conjunction<B...>::value;  // C++17
       template<class... B> struct disjunction;                           // C++17
       template<class... B>
         inline constexpr bool disjunction_v = disjunction<B...>::value;  // C++17
       template<class B> struct negation;                                 // C++17
-      template<class B> 
+      template<class B>
         inline constexpr bool negation_v = negation<B>::value;           // C++17
 
 }
@@ -595,7 +599,7 @@
 struct __and_<_B0, _B1> : conditional<_B0::value, _B1, _B0>::type {};
 
 template<class _B0, class _B1, class _B2, class... _Bn>
-struct __and_<_B0, _B1, _B2, _Bn...> 
+struct __and_<_B0, _B1, _B2, _Bn...>
         : conditional<_B0::value, __and_<_B1, _B2, _Bn...>, _B0>::type {};
 
 // __or_
@@ -608,11 +612,11 @@
 struct __or_<_B0, _B1> : conditional<_B0::value, _B0, _B1>::type {};
 
 template<class _B0, class _B1, class _B2, class... _Bn>
-struct __or_<_B0, _B1, _B2, _Bn...> 
+struct __or_<_B0, _B1, _B2, _Bn...>
         : conditional<_B0::value, _B0, __or_<_B1, _B2, _Bn...> >::type {};
 
 // __not_
-template<class _Tp> 
+template<class _Tp>
 struct __not_ : conditional<_Tp::value, false_type, true_type>::type {};
 
 #endif // !defined(_LIBCPP_CXX03_LANG)
@@ -733,6 +737,12 @@
 // is_floating_point
 
 template <class _Tp> struct __libcpp_is_floating_point              : public false_type {};
+#ifdef __clang__
+template <>          struct __libcpp_is_floating_point<__fp16>      : public true_type {};
+#endif
+#ifdef __FLT16_MANT_DIG__
+template <>          struct __libcpp_is_floating_point<_Float16>    : public true_type {};
+#endif
 template <>          struct __libcpp_is_floating_point<float>       : public true_type {};
 template <>          struct __libcpp_is_floating_point<double>      : public true_type {};
 template <>          struct __libcpp_is_floating_point<long double> : public true_type {};
@@ -897,7 +907,7 @@
 
 // template <class _Tp> struct            __libcpp_is_member_function_pointer             : public false_type {};
 // template <class _Tp, class _Up> struct __libcpp_is_member_function_pointer<_Tp _Up::*> : public is_function<_Tp> {};
-// 
+//
 
 template <class _MP, bool _IsMemberFunctionPtr, bool _IsMemberObjectPtr>
 struct __member_pointer_traits_imp
@@ -1178,7 +1188,7 @@
                                    typename __uncvref<_Up>::type> {};
 
 #if _LIBCPP_STD_VER > 17
-// aligned_union - same as __uncvref
+// remove_cvref - same as __uncvref
 template <class _Tp>
 struct remove_cvref : public __uncvref<_Tp> {};
 
@@ -1205,12 +1215,12 @@
 
 // add_pointer
 
-template <class _Tp, 
-        bool = __is_referenceable<_Tp>::value || 
+template <class _Tp,
+        bool = __is_referenceable<_Tp>::value ||
                 is_same<typename remove_cv<_Tp>::type, void>::value>
 struct __add_pointer_impl
     {typedef typename remove_reference<_Tp>::type* type;};
-template <class _Tp> struct __add_pointer_impl<_Tp, false> 
+template <class _Tp> struct __add_pointer_impl<_Tp, false>
     {typedef _Tp type;};
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS add_pointer
@@ -1220,6 +1230,12 @@
 template <class _Tp> using add_pointer_t = typename add_pointer<_Tp>::type;
 #endif
 
+// type_identity
+#if _LIBCPP_STD_VER > 17
+template<class _Tp> struct type_identity { typedef _Tp type; };
+template<class _Tp> using type_identity_t = typename type_identity<_Tp>::type;
+#endif
+
 // is_signed
 
 template <class _Tp, bool = is_integral<_Tp>::value>
@@ -1624,7 +1640,7 @@
 #if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_UNIQUE_OBJECT_REPRESENTATIONS)
 
 template <class _Tp> struct _LIBCPP_TEMPLATE_VIS has_unique_object_representations
-    : public integral_constant<bool, 
+    : public integral_constant<bool,
        __has_unique_object_representations(remove_cv_t<remove_all_extents_t<_Tp>>)> {};
 
 #if !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -2235,7 +2251,7 @@
 
     template <typename _Tp1>
     static __two __test (...);
-    
+
     static const bool value = sizeof(__test<_Tp>(12)) == sizeof(char);
 };
 
@@ -2243,8 +2259,8 @@
 struct __destructible_imp;
 
 template <class _Tp>
-struct __destructible_imp<_Tp, false> 
-   : public _VSTD::integral_constant<bool, 
+struct __destructible_imp<_Tp, false>
+   : public _VSTD::integral_constant<bool,
         __is_destructor_wellformed<typename _VSTD::remove_all_extents<_Tp>::type>::value> {};
 
 template <class _Tp>
@@ -3395,7 +3411,7 @@
 
 template <class _Tp>
 struct _LIBCPP_TEMPLATE_VIS is_copy_constructible
-    : public is_constructible<_Tp, 
+    : public is_constructible<_Tp,
                   typename add_lvalue_reference<typename add_const<_Tp>::type>::type> {};
 
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
@@ -4103,7 +4119,7 @@
                               is_reference<typename remove_all_extents<_Tp>::type>::value>
 #endif
     {};
-    
+
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_literal_type_v
@@ -4119,7 +4135,7 @@
     : integral_constant<bool, is_scalar<typename remove_all_extents<_Tp>::type>::value>
 #endif
     {};
-    
+
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_standard_layout_v
@@ -4137,7 +4153,7 @@
     : integral_constant<bool, is_scalar<typename remove_all_extents<_Tp>::type>::value>
 #endif
     {};
-    
+
 #if _LIBCPP_STD_VER > 14 && !defined(_LIBCPP_HAS_NO_VARIABLE_TEMPLATES)
 template <class _Tp>
 _LIBCPP_INLINE_VAR _LIBCPP_CONSTEXPR bool is_trivially_copyable_v
@@ -4168,147 +4184,6 @@
 
 #ifndef _LIBCPP_CXX03_LANG
 
-// Check for complete types
-
-template <class ..._Tp> struct __check_complete;
-
-template <>
-struct __check_complete<>
-{
-};
-
-template <class _Hp, class _T0, class ..._Tp>
-struct __check_complete<_Hp, _T0, _Tp...>
-    : private __check_complete<_Hp>,
-      private __check_complete<_T0, _Tp...>
-{
-};
-
-template <class _Hp>
-struct __check_complete<_Hp, _Hp>
-    : private __check_complete<_Hp>
-{
-};
-
-template <class _Tp>
-struct __check_complete<_Tp>
-{
-    static_assert(sizeof(_Tp) > 0, "Type must be complete.");
-};
-
-template <class _Tp>
-struct __check_complete<_Tp&>
-    : private __check_complete<_Tp>
-{
-};
-
-template <class _Tp>
-struct __check_complete<_Tp&&>
-    : private __check_complete<_Tp>
-{
-};
-
-template <class _Rp, class ..._Param>
-struct __check_complete<_Rp (*)(_Param...)>
-    : private __check_complete<_Rp>
-{
-};
-
-template <class ..._Param>
-struct __check_complete<void (*)(_Param...)>
-{
-};
-
-template <class _Rp, class ..._Param>
-struct __check_complete<_Rp (_Param...)>
-    : private __check_complete<_Rp>
-{
-};
-
-template <class ..._Param>
-struct __check_complete<void (_Param...)>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...)>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) volatile>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const volatile>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) &>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) volatile&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const volatile&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) &&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const&&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) volatile&&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class, class ..._Param>
-struct __check_complete<_Rp (_Class::*)(_Param...) const volatile&&>
-    : private __check_complete<_Class>
-{
-};
-
-template <class _Rp, class _Class>
-struct __check_complete<_Rp _Class::*>
-    : private __check_complete<_Class>
-{
-};
-
-
 template <class _Fp, class _A0,
          class _DecayFp = typename decay<_Fp>::type,
          class _DecayA0 = typename decay<_A0>::type,
@@ -4491,8 +4366,9 @@
 
 template <class _Ret, class _Fp, class ..._Args>
 struct __invokable_r
-    : private __check_complete<_Fp>
 {
+    // FIXME: Check that _Ret, _Fp, and _Args... are all complete types, cv void,
+    // or incomplete array types as required by the standard.
     using _Result = decltype(
         _VSTD::__invoke(_VSTD::declval<_Fp>(), _VSTD::declval<_Args>()...));
 
@@ -4964,7 +4840,7 @@
   constexpr typename enable_if<is_integral_v<_Integer>, byte>::type &
   operator<<=(byte& __lhs, _Integer __shift) noexcept
   { return __lhs = __lhs << __shift; }
-  
+
 template <class _Integer>
   constexpr typename enable_if<is_integral_v<_Integer>, byte>::type
   operator<< (byte  __lhs, _Integer __shift) noexcept
@@ -4979,7 +4855,7 @@
   constexpr typename enable_if<is_integral_v<_Integer>, byte>::type
   operator>> (byte  __lhs, _Integer __shift) noexcept
   { return static_cast<byte>(static_cast<unsigned char>(static_cast<unsigned int>(__lhs) >> __shift)); }
-  
+
 template <class _Integer>
   constexpr typename enable_if<is_integral_v<_Integer>, _Integer>::type
   to_integer(byte __b) noexcept { return static_cast<_Integer>(__b); }
diff --git a/linux-x64/clang/include/c++/v1/typeinfo b/linux-x64/clang/include/c++/v1/typeinfo
index 74d94e9..92f1e22 100644
--- a/linux-x64/clang/include/c++/v1/typeinfo
+++ b/linux-x64/clang/include/c++/v1/typeinfo
@@ -226,13 +226,13 @@
 #endif // defined(_LIBCPP_ABI_MICROSOFT) && !defined(_LIBCPP_NO_VCRUNTIME)
 
 _LIBCPP_BEGIN_NAMESPACE_STD
-_LIBCPP_NORETURN inline _LIBCPP_ALWAYS_INLINE
+_LIBCPP_NORETURN inline _LIBCPP_INLINE_VISIBILITY
 void __throw_bad_cast()
 {
 #ifndef _LIBCPP_NO_EXCEPTIONS
     throw bad_cast();
 #else
-	_VSTD::abort();
+    _VSTD::abort();
 #endif
 }
 _LIBCPP_END_NAMESPACE_STD
diff --git a/linux-x64/clang/include/c++/v1/unordered_map b/linux-x64/clang/include/c++/v1/unordered_map
index 725cb6a..348f579 100644
--- a/linux-x64/clang/include/c++/v1/unordered_map
+++ b/linux-x64/clang/include/c++/v1/unordered_map
@@ -44,6 +44,9 @@
     typedef /unspecified/ local_iterator;
     typedef /unspecified/ const_local_iterator;
 
+    typedef unspecified                             node_type;            // C++17
+    typedef INSERT_RETURN_TYPE<iterator, node_type> insert_return_type;   // C++17
+
     unordered_map()
         noexcept(
             is_nothrow_default_constructible<hasher>::value &&
@@ -122,6 +125,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type>);
 
+    node_type extract(const_iterator position);                                       // C++17
+    node_type extract(const key_type& x);                                             // C++17
+    insert_return_type insert(node_type&& nh);                                        // C++17
+    iterator           insert(const_iterator hint, node_type&& nh);                   // C++17
+
     template <class... Args>
         pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);          // C++17
     template <class... Args>
@@ -226,6 +234,8 @@
     typedef /unspecified/ local_iterator;
     typedef /unspecified/ const_local_iterator;
 
+    typedef unspecified node_type;    // C++17
+
     unordered_multimap()
         noexcept(
             is_nothrow_default_constructible<hasher>::value &&
@@ -304,6 +314,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type>);
 
+    node_type extract(const_iterator position);                // C++17
+    node_type extract(const key_type& x);                      // C++17
+    iterator insert(node_type&& nh);                           // C++17
+    iterator insert(const_iterator hint, node_type&& nh);      // C++17
+
     iterator erase(const_iterator position);
     iterator erase(iterator position);  // C++14
     size_type erase(const key_type& k);
@@ -367,6 +382,7 @@
 
 #include <__config>
 #include <__hash_table>
+#include <__node_handle>
 #include <functional>
 #include <stdexcept>
 #include <tuple>
@@ -396,7 +412,7 @@
     const _Hash& hash_function() const _NOEXCEPT {return *this;}
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(const _Cp& __x) const
-        {return static_cast<const _Hash&>(*this)(__x.__cc.first);}
+        {return static_cast<const _Hash&>(*this)(__x.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(const _Key& __x) const
         {return static_cast<const _Hash&>(*this)(__x);}
@@ -425,7 +441,7 @@
     const _Hash& hash_function() const _NOEXCEPT {return __hash_;}
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(const _Cp& __x) const
-        {return __hash_(__x.__cc.first);}
+        {return __hash_(__x.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     size_t operator()(const _Key& __x) const
         {return __hash_(__x);}
@@ -464,13 +480,13 @@
     const _Pred& key_eq() const _NOEXCEPT {return *this;}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Cp& __x, const _Cp& __y) const
-        {return static_cast<const _Pred&>(*this)(__x.__cc.first, __y.__cc.first);}
+        {return static_cast<const _Pred&>(*this)(__x.__get_value().first, __y.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Cp& __x, const _Key& __y) const
-        {return static_cast<const _Pred&>(*this)(__x.__cc.first, __y);}
+        {return static_cast<const _Pred&>(*this)(__x.__get_value().first, __y);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Key& __x, const _Cp& __y) const
-        {return static_cast<const _Pred&>(*this)(__x, __y.__cc.first);}
+        {return static_cast<const _Pred&>(*this)(__x, __y.__get_value().first);}
     void swap(__unordered_map_equal&__y)
         _NOEXCEPT_(__is_nothrow_swappable<_Pred>::value)
     {
@@ -496,13 +512,13 @@
     const _Pred& key_eq() const _NOEXCEPT {return __pred_;}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Cp& __x, const _Cp& __y) const
-        {return __pred_(__x.__cc.first, __y.__cc.first);}
+        {return __pred_(__x.__get_value().first, __y.__get_value().first);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Cp& __x, const _Key& __y) const
-        {return __pred_(__x.__cc.first, __y);}
+        {return __pred_(__x.__get_value().first, __y);}
     _LIBCPP_INLINE_VISIBILITY
     bool operator()(const _Key& __x, const _Cp& __y) const
-        {return __pred_(__x, __y.__cc.first);}
+        {return __pred_(__x, __y.__get_value().first);}
     void swap(__unordered_map_equal&__y)
         _NOEXCEPT_(__is_nothrow_swappable<_Pred>::value)
     {
@@ -572,9 +588,9 @@
     void operator()(pointer __p) _NOEXCEPT
     {
         if (__second_constructed)
-            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.second));
+            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__get_value().second));
         if (__first_constructed)
-            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__cc.first));
+            __alloc_traits::destroy(__na_, _VSTD::addressof(__p->__value_.__get_value().first));
         if (__p)
             __alloc_traits::deallocate(__na_, __p, 1);
     }
@@ -582,23 +598,67 @@
 
 #ifndef _LIBCPP_CXX03_LANG
 template <class _Key, class _Tp>
-union __hash_value_type
+struct __hash_value_type
 {
     typedef _Key                                     key_type;
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
-    typedef pair<key_type, mapped_type>              __nc_value_type;
+    typedef pair<key_type&, mapped_type&>            __nc_ref_pair_type;
+    typedef pair<key_type&&, mapped_type&&>          __nc_rref_pair_type;
 
+private:
     value_type __cc;
-    __nc_value_type __nc;
+
+public:
+    _LIBCPP_INLINE_VISIBILITY
+    value_type& __get_value()
+    {
+#if _LIBCPP_STD_VER > 14
+        return *_VSTD::launder(_VSTD::addressof(__cc));
+#else
+        return __cc;
+#endif
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    const value_type& __get_value() const
+    {
+#if _LIBCPP_STD_VER > 14
+        return *_VSTD::launder(_VSTD::addressof(__cc));
+#else
+        return __cc;
+#endif
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __nc_ref_pair_type __ref()
+    {
+        value_type& __v = __get_value();
+        return __nc_ref_pair_type(const_cast<key_type&>(__v.first), __v.second);
+    }
+
+    _LIBCPP_INLINE_VISIBILITY
+    __nc_rref_pair_type __move()
+    {
+        value_type& __v = __get_value();
+        return __nc_rref_pair_type(
+            _VSTD::move(const_cast<key_type&>(__v.first)),
+            _VSTD::move(__v.second));
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_value_type& operator=(const __hash_value_type& __v)
-        {__nc = __v.__cc; return *this;}
+    {
+        __ref() = __v.__get_value();
+        return *this;
+    }
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_value_type& operator=(__hash_value_type&& __v)
-        {__nc = _VSTD::move(__v.__nc); return *this;}
+    {
+        __ref() = __v.__move();
+        return *this;
+    }
 
     template <class _ValueTp,
               class = typename enable_if<
@@ -606,8 +666,10 @@
                  >::type
              >
     _LIBCPP_INLINE_VISIBILITY
-    __hash_value_type& operator=(_ValueTp&& __v) {
-        __nc = _VSTD::forward<_ValueTp>(__v); return *this;
+    __hash_value_type& operator=(_ValueTp&& __v)
+    {
+        __ref() = _VSTD::forward<_ValueTp>(__v);
+        return *this;
     }
 
 private:
@@ -628,8 +690,15 @@
     typedef _Tp                                      mapped_type;
     typedef pair<const key_type, mapped_type>        value_type;
 
+private:
     value_type __cc;
 
+public:
+    _LIBCPP_INLINE_VISIBILITY
+    value_type& __get_value() { return __cc; }
+    _LIBCPP_INLINE_VISIBILITY
+    const value_type& __get_value() const { return __cc; }
+
 private:
    ~__hash_value_type();
 };
@@ -657,9 +726,9 @@
     __hash_map_iterator(_HashIterator __i) _NOEXCEPT : __i_(__i) {}
 
     _LIBCPP_INLINE_VISIBILITY
-    reference operator*() const {return __i_->__cc;}
+    reference operator*() const {return __i_->__get_value();}
     _LIBCPP_INLINE_VISIBILITY
-    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
+    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_map_iterator& operator++() {++__i_; return *this;}
@@ -711,9 +780,9 @@
                 : __i_(__i.__i_) {}
 
     _LIBCPP_INLINE_VISIBILITY
-    reference operator*() const {return __i_->__cc;}
+    reference operator*() const {return __i_->__get_value();}
     _LIBCPP_INLINE_VISIBILITY
-    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__cc);}
+    pointer operator->() const {return pointer_traits<pointer>::pointer_to(__i_->__get_value());}
 
     _LIBCPP_INLINE_VISIBILITY
     __hash_map_const_iterator& operator++() {++__i_; return *this;}
@@ -750,7 +819,6 @@
     typedef _Pred                                          key_equal;
     typedef _Alloc                                         allocator_type;
     typedef pair<const key_type, mapped_type>              value_type;
-    typedef pair<key_type, mapped_type>                    __nc_value_type;
     typedef value_type&                                    reference;
     typedef const value_type&                              const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
@@ -791,6 +859,11 @@
     typedef __hash_map_iterator<typename __table::local_iterator> local_iterator;
     typedef __hash_map_const_iterator<typename __table::const_local_iterator> const_local_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __map_node_handle<__node, allocator_type> node_type;
+    typedef __insert_return_type<iterator, node_type> insert_return_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_map()
         _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
@@ -1084,7 +1157,37 @@
     iterator erase(const_iterator __first, const_iterator __last)
         {return __table_.erase(__first.__i_, __last.__i_);}
     _LIBCPP_INLINE_VISIBILITY
-    void clear() _NOEXCEPT {__table_.clear();}
+        void clear() _NOEXCEPT {__table_.clear();}
+
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    insert_return_type insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_map::insert()");
+        return __table_.template __node_handle_insert_unique<
+            node_type, insert_return_type>(_VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_map::insert()");
+        return __table_.template __node_handle_insert_unique<node_type>(
+            __hint.__i_, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __table_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __table_.template __node_handle_extract<node_type>(
+            __it.__i_);
+    }
+#endif
 
     _LIBCPP_INLINE_VISIBILITY
     void swap(unordered_map& __u)
@@ -1298,8 +1401,8 @@
     {
         iterator __i = __u.begin();
         while (__u.size() != 0) {
-            __table_.__emplace_unique(_VSTD::move(
-                __u.__table_.remove((__i++).__i_)->__value_.__nc));
+            __table_.__emplace_unique(
+                __u.__table_.remove((__i++).__i_)->__value_.__move());
         }
     }
 #if _LIBCPP_DEBUG_LEVEL >= 2
@@ -1385,7 +1488,7 @@
 {
     return __table_.__emplace_unique_key_args(__k,
         std::piecewise_construct, std::forward_as_tuple(__k),
-                                  std::forward_as_tuple()).first->__cc.second;
+                                  std::forward_as_tuple()).first->__get_value().second;
 }
 
 template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
@@ -1394,7 +1497,7 @@
 {
     return __table_.__emplace_unique_key_args(__k,
         std::piecewise_construct, std::forward_as_tuple(std::move(__k)),
-                                  std::forward_as_tuple()).first->__cc.second;
+                                  std::forward_as_tuple()).first->__get_value().second;
 }
 #else // _LIBCPP_CXX03_LANG
 
@@ -1404,9 +1507,9 @@
 {
     __node_allocator& __na = __table_.__node_alloc();
     __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
-    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.first), __k);
+    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__get_value().first), __k);
     __h.get_deleter().__first_constructed = true;
-    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__cc.second));
+    __node_traits::construct(__na, _VSTD::addressof(__h->__value_.__get_value().second));
     __h.get_deleter().__second_constructed = true;
     return _LIBCPP_EXPLICIT_MOVE(__h);  // explicitly moved for C++03
 }
@@ -1500,7 +1603,6 @@
     typedef _Pred                                          key_equal;
     typedef _Alloc                                         allocator_type;
     typedef pair<const key_type, mapped_type>              value_type;
-    typedef pair<key_type, mapped_type>                    __nc_value_type;
     typedef value_type&                                    reference;
     typedef const value_type&                              const_reference;
     static_assert((is_same<value_type, typename allocator_type::value_type>::value),
@@ -1539,6 +1641,10 @@
     typedef __hash_map_iterator<typename __table::local_iterator> local_iterator;
     typedef __hash_map_const_iterator<typename __table::const_local_iterator> const_local_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __map_node_handle<__node, allocator_type> node_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_multimap()
         _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
@@ -1712,6 +1818,36 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {__table_.clear();}
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_multimap::insert()");
+        return __table_.template __node_handle_insert_multi<node_type>(
+            _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_multimap::insert()");
+        return __table_.template __node_handle_insert_multi<node_type>(
+            __hint.__i_, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __table_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __table_.template __node_handle_extract<node_type>(
+            __it.__i_);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void swap(unordered_multimap& __u)
         _NOEXCEPT_(__is_nothrow_swappable<__table>::value)
@@ -1915,8 +2051,7 @@
         while (__u.size() != 0)
         {
             __table_.__insert_multi(
-                      _VSTD::move(__u.__table_.remove((__i++).__i_)->__value_.__nc)
-                                   );
+                __u.__table_.remove((__i++).__i_)->__value_.__move());
         }
     }
 #if _LIBCPP_DEBUG_LEVEL >= 2
diff --git a/linux-x64/clang/include/c++/v1/unordered_set b/linux-x64/clang/include/c++/v1/unordered_set
index 3ae024a..9b8560d 100644
--- a/linux-x64/clang/include/c++/v1/unordered_set
+++ b/linux-x64/clang/include/c++/v1/unordered_set
@@ -43,6 +43,9 @@
     typedef /unspecified/ local_iterator;
     typedef /unspecified/ const_local_iterator;
 
+    typedef unspecified node_type unspecified;                            // C++17
+    typedef INSERT_RETURN_TYPE<iterator, node_type> insert_return_type;   // C++17
+
     unordered_set()
         noexcept(
             is_nothrow_default_constructible<hasher>::value &&
@@ -113,6 +116,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type>);
 
+    node_type extract(const_iterator position);                       // C++17
+    node_type extract(const key_type& x);                             // C++17
+    insert_return_type insert(node_type&& nh);                        // C++17
+    iterator           insert(const_iterator hint, node_type&& nh);   // C++17
+
     iterator erase(const_iterator position);
     iterator erase(iterator position);  // C++14
     size_type erase(const key_type& k);
@@ -191,6 +199,8 @@
     typedef /unspecified/ local_iterator;
     typedef /unspecified/ const_local_iterator;
 
+    typedef unspecified node_type unspecified;   // C++17
+
     unordered_multiset()
         noexcept(
             is_nothrow_default_constructible<hasher>::value &&
@@ -261,6 +271,11 @@
         void insert(InputIterator first, InputIterator last);
     void insert(initializer_list<value_type>);
 
+    node_type extract(const_iterator position);             // C++17
+    node_type extract(const key_type& x);                   // C++17
+    iterator insert(node_type&& nh);                        // C++17
+    iterator insert(const_iterator hint, node_type&& nh);   // C++17
+
     iterator erase(const_iterator position);
     iterator erase(iterator position);  // C++14
     size_type erase(const key_type& k);
@@ -321,6 +336,7 @@
 
 #include <__config>
 #include <__hash_table>
+#include <__node_handle>
 #include <functional>
 
 #include <__debug>
@@ -363,6 +379,11 @@
     typedef typename __table::const_local_iterator local_iterator;
     typedef typename __table::const_local_iterator const_local_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
+    typedef __insert_return_type<iterator, node_type> insert_return_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_set()
         _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
@@ -541,6 +562,35 @@
     _LIBCPP_INLINE_VISIBILITY
     void clear() _NOEXCEPT {__table_.clear();}
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    insert_return_type insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_set::insert()");
+        return __table_.template __node_handle_insert_unique<
+            node_type, insert_return_type>(_VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __h, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_set::insert()");
+        return __table_.template __node_handle_insert_unique<node_type>(
+            __h, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __table_.template __node_handle_extract<node_type>(__key);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __it)
+    {
+        return __table_.template __node_handle_extract<node_type>(__it);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     void swap(unordered_set& __u)
         _NOEXCEPT_(__is_nothrow_swappable<__table>::value)
@@ -883,6 +933,10 @@
     typedef typename __table::const_local_iterator local_iterator;
     typedef typename __table::const_local_iterator const_local_iterator;
 
+#if _LIBCPP_STD_VER > 14
+    typedef __set_node_handle<typename __table::__node, allocator_type> node_type;
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     unordered_multiset()
         _NOEXCEPT_(is_nothrow_default_constructible<__table>::value)
@@ -1019,6 +1073,36 @@
         _LIBCPP_INLINE_VISIBILITY
         void insert(_InputIterator __first, _InputIterator __last);
 
+#if _LIBCPP_STD_VER > 14
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_multiset::insert()");
+        return __table_.template __node_handle_insert_multi<node_type>(
+            _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    iterator insert(const_iterator __hint, node_type&& __nh)
+    {
+        _LIBCPP_ASSERT(__nh.empty() || __nh.get_allocator() == get_allocator(),
+            "node_type with incompatible allocator passed to unordered_multiset::insert()");
+        return __table_.template __node_handle_insert_multi<node_type>(
+            __hint, _VSTD::move(__nh));
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(const_iterator __position)
+    {
+        return __table_.template __node_handle_extract<node_type>(
+            __position);
+    }
+    _LIBCPP_INLINE_VISIBILITY
+    node_type extract(key_type const& __key)
+    {
+        return __table_.template __node_handle_extract<node_type>(__key);
+    }
+#endif
+
     _LIBCPP_INLINE_VISIBILITY
     iterator erase(const_iterator __p) {return __table_.erase(__p);}
     _LIBCPP_INLINE_VISIBILITY
diff --git a/linux-x64/clang/include/c++/v1/utility b/linux-x64/clang/include/c++/v1/utility
index f11d580..ed9bf03 100644
--- a/linux-x64/clang/include/c++/v1/utility
+++ b/linux-x64/clang/include/c++/v1/utility
@@ -14,6 +14,8 @@
 /*
     utility synopsis
 
+#include <initializer_list>
+
 namespace std
 {
 
@@ -293,7 +295,7 @@
 #endif
 
 struct _LIBCPP_TEMPLATE_VIS piecewise_construct_t { };
-#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_UTILITY)
+#if defined(_LIBCPP_CXX03_LANG) || defined(_LIBCPP_BUILDING_LIBRARY)
 extern const piecewise_construct_t piecewise_construct;// = piecewise_construct_t();
 #else
 /* _LIBCPP_INLINE_VAR */ constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
diff --git a/linux-x64/clang/include/c++/v1/vector b/linux-x64/clang/include/c++/v1/vector
index 54b1e88..0f5006f 100644
--- a/linux-x64/clang/include/c++/v1/vector
+++ b/linux-x64/clang/include/c++/v1/vector
@@ -244,6 +244,10 @@
     bool __invariants() const;
 };
 
+template <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>>
+   vector(InputIterator, InputIterator, Allocator = Allocator())
+   -> vector<typename iterator_traits<InputIterator>::value_type, Allocator>;
+
 template <class Allocator> struct hash<std::vector<bool, Allocator>>;
 
 template <class T, class Allocator> bool operator==(const vector<T,Allocator>& x, const vector<T,Allocator>& y);
@@ -291,7 +295,7 @@
 class __vector_base_common
 {
 protected:
-    _LIBCPP_ALWAYS_INLINE __vector_base_common() {}
+    _LIBCPP_INLINE_VISIBILITY __vector_base_common() {}
     _LIBCPP_NORETURN void __throw_length_error() const;
     _LIBCPP_NORETURN void __throw_out_of_range() const;
 };
@@ -316,13 +320,14 @@
 class __vector_base
     : protected __vector_base_common<true>
 {
-protected:
-    typedef _Tp                                      value_type;
+public:
     typedef _Allocator                               allocator_type;
     typedef allocator_traits<allocator_type>         __alloc_traits;
+    typedef typename __alloc_traits::size_type       size_type;
+protected:
+    typedef _Tp                                      value_type;
     typedef value_type&                              reference;
     typedef const value_type&                        const_reference;
-    typedef typename __alloc_traits::size_type       size_type;
     typedef typename __alloc_traits::difference_type difference_type;
     typedef typename __alloc_traits::pointer         pointer;
     typedef typename __alloc_traits::const_pointer   const_pointer;
@@ -350,6 +355,9 @@
     __vector_base()
         _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value);
     _LIBCPP_INLINE_VISIBILITY __vector_base(const allocator_type& __a);
+#ifndef _LIBCPP_CXX03_LANG
+    _LIBCPP_INLINE_VISIBILITY __vector_base(allocator_type&& __a) _NOEXCEPT;
+#endif
     ~__vector_base();
 
     _LIBCPP_INLINE_VISIBILITY
@@ -433,6 +441,15 @@
 {
 }
 
+#ifndef _LIBCPP_CXX03_LANG
+template <class _Tp, class _Allocator>
+inline _LIBCPP_INLINE_VISIBILITY
+__vector_base<_Tp, _Allocator>::__vector_base(allocator_type&& __a) _NOEXCEPT
+    : __begin_(nullptr),
+      __end_(nullptr),
+      __end_cap_(nullptr, std::move(__a)) {}
+#endif
+
 template <class _Tp, class _Allocator>
 __vector_base<_Tp, _Allocator>::~__vector_base()
 {
@@ -492,8 +509,8 @@
 #if _LIBCPP_STD_VER > 11
     explicit vector(size_type __n, const allocator_type& __a);
 #endif
-    vector(size_type __n, const_reference __x);
-    vector(size_type __n, const_reference __x, const allocator_type& __a);
+    vector(size_type __n, const value_type& __x);
+    vector(size_type __n, const value_type& __x, const allocator_type& __a);
     template <class _InputIterator>
         vector(_InputIterator __first,
                typename enable_if<__is_input_iterator  <_InputIterator>::value &&
@@ -776,8 +793,8 @@
 private:
     _LIBCPP_INLINE_VISIBILITY void __invalidate_all_iterators();
     _LIBCPP_INLINE_VISIBILITY void __invalidate_iterators_past(pointer __new_last);
-    void allocate(size_type __n);
-    void deallocate() _NOEXCEPT;
+    void __vallocate(size_type __n);
+    void __vdeallocate() _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY size_type __recommend(size_type __new_size) const;
     void __construct_at_end(size_type __n);
     _LIBCPP_INLINE_VISIBILITY
@@ -890,6 +907,22 @@
 
 };
 
+#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES
+template<class _InputIterator,
+         class _Alloc = typename std::allocator<typename iterator_traits<_InputIterator>::value_type>,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+vector(_InputIterator, _InputIterator)
+  -> vector<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+
+template<class _InputIterator,
+         class _Alloc,
+         class = typename enable_if<__is_allocator<_Alloc>::value, void>::type
+         >
+vector(_InputIterator, _InputIterator, _Alloc)
+  -> vector<typename iterator_traits<_InputIterator>::value_type, _Alloc>;
+#endif
+
 template <class _Tp, class _Allocator>
 void
 vector<_Tp, _Allocator>::__swap_out_circular_buffer(__split_buffer<value_type, allocator_type&>& __v)
@@ -930,7 +963,7 @@
 //  Postcondition:  size() == 0
 template <class _Tp, class _Allocator>
 void
-vector<_Tp, _Allocator>::allocate(size_type __n)
+vector<_Tp, _Allocator>::__vallocate(size_type __n)
 {
     if (__n > max_size())
         this->__throw_length_error();
@@ -941,7 +974,7 @@
 
 template <class _Tp, class _Allocator>
 void
-vector<_Tp, _Allocator>::deallocate() _NOEXCEPT
+vector<_Tp, _Allocator>::__vdeallocate() _NOEXCEPT
 {
     if (this->__begin_ != nullptr)
     {
@@ -1077,7 +1110,7 @@
 #endif
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n);
     }
 }
@@ -1092,27 +1125,27 @@
 #endif
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n);
     }
 }
 #endif
 
 template <class _Tp, class _Allocator>
-vector<_Tp, _Allocator>::vector(size_type __n, const_reference __x)
+vector<_Tp, _Allocator>::vector(size_type __n, const value_type& __x)
 {
 #if _LIBCPP_DEBUG_LEVEL >= 2
     __get_db()->__insert_c(this);
 #endif
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, __x);
     }
 }
 
 template <class _Tp, class _Allocator>
-vector<_Tp, _Allocator>::vector(size_type __n, const_reference __x, const allocator_type& __a)
+vector<_Tp, _Allocator>::vector(size_type __n, const value_type& __x, const allocator_type& __a)
     : __base(__a)
 {
 #if _LIBCPP_DEBUG_LEVEL >= 2
@@ -1120,7 +1153,7 @@
 #endif
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, __x);
     }
 }
@@ -1174,7 +1207,7 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__first, __last, __n);
     }
 }
@@ -1194,7 +1227,7 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__first, __last, __n);
     }
 }
@@ -1209,7 +1242,7 @@
     size_type __n = __x.size();
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__x.__begin_, __x.__end_, __n);
     }
 }
@@ -1224,7 +1257,7 @@
     size_type __n = __x.size();
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__x.__begin_, __x.__end_, __n);
     }
 }
@@ -1285,7 +1318,7 @@
 #endif
     if (__il.size() > 0)
     {
-        allocate(__il.size());
+        __vallocate(__il.size());
         __construct_at_end(__il.begin(), __il.end(), __il.size());
     }
 }
@@ -1300,7 +1333,7 @@
 #endif
     if (__il.size() > 0)
     {
-        allocate(__il.size());
+        __vallocate(__il.size());
         __construct_at_end(__il.begin(), __il.end(), __il.size());
     }
 }
@@ -1335,7 +1368,7 @@
 vector<_Tp, _Allocator>::__move_assign(vector& __c, true_type)
     _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
 {
-    deallocate();
+    __vdeallocate();
     __base::__move_assign_alloc(__c); // this can throw
     this->__begin_ = __c.__begin_;
     this->__end_ = __c.__end_;
@@ -1410,8 +1443,8 @@
     }
     else
     {
-        deallocate();
-        allocate(__recommend(__new_size));
+        __vdeallocate();
+        __vallocate(__recommend(__new_size));
         __construct_at_end(__first, __last, __new_size);
     }
     __invalidate_all_iterators();
@@ -1432,8 +1465,8 @@
     }
     else
     {
-        deallocate();
-        allocate(__recommend(static_cast<size_type>(__n)));
+        __vdeallocate();
+        __vallocate(__recommend(static_cast<size_type>(__n)));
         __construct_at_end(__n, __u);
     }
     __invalidate_all_iterators();
@@ -2416,8 +2449,8 @@
 
 private:
     _LIBCPP_INLINE_VISIBILITY void __invalidate_all_iterators();
-    void allocate(size_type __n);
-    void deallocate() _NOEXCEPT;
+    void __vallocate(size_type __n);
+    void __vdeallocate() _NOEXCEPT;
     _LIBCPP_INLINE_VISIBILITY
     static size_type __align_it(size_type __new_size) _NOEXCEPT
         {return __new_size + (__bits_per_word-1) & ~((size_type)__bits_per_word-1);};
@@ -2455,7 +2488,7 @@
     void __copy_assign_alloc(const vector& __c, true_type)
         {
             if (__alloc() != __c.__alloc())
-                deallocate();
+                __vdeallocate();
             __alloc() = __c.__alloc();
         }
 
@@ -2511,7 +2544,7 @@
 //  Postcondition:  size() == 0
 template <class _Allocator>
 void
-vector<bool, _Allocator>::allocate(size_type __n)
+vector<bool, _Allocator>::__vallocate(size_type __n)
 {
     if (__n > max_size())
         this->__throw_length_error();
@@ -2523,7 +2556,7 @@
 
 template <class _Allocator>
 void
-vector<bool, _Allocator>::deallocate() _NOEXCEPT
+vector<bool, _Allocator>::__vdeallocate() _NOEXCEPT
 {
     if (this->__begin_ != nullptr)
     {
@@ -2620,7 +2653,7 @@
 {
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, false);
     }
 }
@@ -2634,7 +2667,7 @@
 {
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, false);
     }
 }
@@ -2648,7 +2681,7 @@
 {
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, __x);
     }
 }
@@ -2661,7 +2694,7 @@
 {
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__n, __x);
     }
 }
@@ -2731,7 +2764,7 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__first, __last);
     }
 }
@@ -2747,7 +2780,7 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__first, __last);
     }
 }
@@ -2763,7 +2796,7 @@
     size_type __n = static_cast<size_type>(__il.size());
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__il.begin(), __il.end());
     }
 }
@@ -2777,7 +2810,7 @@
     size_type __n = static_cast<size_type>(__il.size());
     if (__n > 0)
     {
-        allocate(__n);
+        __vallocate(__n);
         __construct_at_end(__il.begin(), __il.end());
     }
 }
@@ -2800,7 +2833,7 @@
 {
     if (__v.size() > 0)
     {
-        allocate(__v.size());
+        __vallocate(__v.size());
         __construct_at_end(__v.begin(), __v.end());
     }
 }
@@ -2813,7 +2846,7 @@
 {
     if (__v.size() > 0)
     {
-        allocate(__v.size());
+        __vallocate(__v.size());
         __construct_at_end(__v.begin(), __v.end());
     }
 }
@@ -2829,8 +2862,8 @@
         {
             if (__v.__size_ > capacity())
             {
-                deallocate();
-                allocate(__v.__size_);
+                __vdeallocate();
+                __vallocate(__v.__size_);
             }
             _VSTD::copy(__v.__begin_, __v.__begin_ + __external_cap_to_internal(__v.__size_), __begin_);
         }
@@ -2842,17 +2875,15 @@
 #ifndef _LIBCPP_CXX03_LANG
 
 template <class _Allocator>
-inline _LIBCPP_INLINE_VISIBILITY
-vector<bool, _Allocator>::vector(vector&& __v)
+inline _LIBCPP_INLINE_VISIBILITY vector<bool, _Allocator>::vector(vector&& __v)
 #if _LIBCPP_STD_VER > 14
-        _NOEXCEPT
+    _NOEXCEPT
 #else
-        _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value)
+    _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value)
 #endif
     : __begin_(__v.__begin_),
       __size_(__v.__size_),
-      __cap_alloc_(__v.__cap_alloc_)
-{
+      __cap_alloc_(std::move(__v.__cap_alloc_)) {
     __v.__begin_ = nullptr;
     __v.__size_ = 0;
     __v.__cap() = 0;
@@ -2874,7 +2905,7 @@
     }
     else if (__v.size() > 0)
     {
-        allocate(__v.size());
+        __vallocate(__v.size());
         __construct_at_end(__v.begin(), __v.end());
     }
 }
@@ -2905,7 +2936,7 @@
 vector<bool, _Allocator>::__move_assign(vector& __c, true_type)
     _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value)
 {
-    deallocate();
+    __vdeallocate();
     __move_assign_alloc(__c);
     this->__begin_ = __c.__begin_;
     this->__size_ = __c.__size_;
@@ -2970,8 +3001,8 @@
     {
         if (__n > capacity())
         {
-            deallocate();
-            allocate(__n);
+            __vdeallocate();
+            __vallocate(__n);
         }
         __construct_at_end(__first, __last);
     }
@@ -2984,7 +3015,7 @@
     if (__n > capacity())
     {
         vector __v(this->__alloc());
-        __v.allocate(__n);
+        __v.__vallocate(__n);
         __v.__construct_at_end(this->begin(), this->end());
         swap(__v);
         __invalidate_all_iterators();
diff --git a/linux-x64/clang/include/c++/v1/version b/linux-x64/clang/include/c++/v1/version
new file mode 100644
index 0000000..23a872e
--- /dev/null
+++ b/linux-x64/clang/include/c++/v1/version
@@ -0,0 +1,25 @@
+// -*- C++ -*-
+//===--------------------------- version ----------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_VERSIONH
+#define _LIBCPP_VERSIONH
+
+/*
+    version synopsis
+
+*/
+
+#include <__config>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+#endif  // _LIBCPP_VERSIONH
diff --git a/linux-x64/clang/include/clang-c/BuildSystem.h b/linux-x64/clang/include/clang-c/BuildSystem.h
index 8d323a4..3cfec38 100644
--- a/linux-x64/clang/include/clang-c/BuildSystem.h
+++ b/linux-x64/clang/include/clang-c/BuildSystem.h
@@ -28,19 +28,19 @@
  */
 
 /**
- * \brief Return the timestamp for use with Clang's
+ * Return the timestamp for use with Clang's
  * \c -fbuild-session-timestamp= option.
  */
 CINDEX_LINKAGE unsigned long long clang_getBuildSessionTimestamp(void);
 
 /**
- * \brief Object encapsulating information about overlaying virtual
+ * Object encapsulating information about overlaying virtual
  * file/directories over the real file system.
  */
 typedef struct CXVirtualFileOverlayImpl *CXVirtualFileOverlay;
 
 /**
- * \brief Create a \c CXVirtualFileOverlay object.
+ * Create a \c CXVirtualFileOverlay object.
  * Must be disposed with \c clang_VirtualFileOverlay_dispose().
  *
  * \param options is reserved, always pass 0.
@@ -49,7 +49,7 @@
 clang_VirtualFileOverlay_create(unsigned options);
 
 /**
- * \brief Map an absolute virtual file path to an absolute real one.
+ * Map an absolute virtual file path to an absolute real one.
  * The virtual path must be canonicalized (not contain "."/"..").
  * \returns 0 for success, non-zero to indicate an error.
  */
@@ -59,17 +59,17 @@
                                         const char *realPath);
 
 /**
- * \brief Set the case sensitivity for the \c CXVirtualFileOverlay object.
+ * Set the case sensitivity for the \c CXVirtualFileOverlay object.
  * The \c CXVirtualFileOverlay object is case-sensitive by default, this
  * option can be used to override the default.
  * \returns 0 for success, non-zero to indicate an error.
  */
 CINDEX_LINKAGE enum CXErrorCode
 clang_VirtualFileOverlay_setCaseSensitivity(CXVirtualFileOverlay,
-											int caseSensitive);
+                                            int caseSensitive);
 
 /**
- * \brief Write out the \c CXVirtualFileOverlay object to a char buffer.
+ * Write out the \c CXVirtualFileOverlay object to a char buffer.
  *
  * \param options is reserved, always pass 0.
  * \param out_buffer_ptr pointer to receive the buffer pointer, which should be
@@ -83,7 +83,7 @@
                                        unsigned *out_buffer_size);
 
 /**
- * \brief free memory allocated by libclang, such as the buffer returned by
+ * free memory allocated by libclang, such as the buffer returned by
  * \c CXVirtualFileOverlay() or \c clang_ModuleMapDescriptor_writeToBuffer().
  *
  * \param buffer memory pointer to free.
@@ -91,17 +91,17 @@
 CINDEX_LINKAGE void clang_free(void *buffer);
 
 /**
- * \brief Dispose a \c CXVirtualFileOverlay object.
+ * Dispose a \c CXVirtualFileOverlay object.
  */
 CINDEX_LINKAGE void clang_VirtualFileOverlay_dispose(CXVirtualFileOverlay);
 
 /**
- * \brief Object encapsulating information about a module.map file.
+ * Object encapsulating information about a module.map file.
  */
 typedef struct CXModuleMapDescriptorImpl *CXModuleMapDescriptor;
 
 /**
- * \brief Create a \c CXModuleMapDescriptor object.
+ * Create a \c CXModuleMapDescriptor object.
  * Must be disposed with \c clang_ModuleMapDescriptor_dispose().
  *
  * \param options is reserved, always pass 0.
@@ -110,7 +110,7 @@
 clang_ModuleMapDescriptor_create(unsigned options);
 
 /**
- * \brief Sets the framework module name that the module.map describes.
+ * Sets the framework module name that the module.map describes.
  * \returns 0 for success, non-zero to indicate an error.
  */
 CINDEX_LINKAGE enum CXErrorCode
@@ -118,7 +118,7 @@
                                                  const char *name);
 
 /**
- * \brief Sets the umbrealla header name that the module.map describes.
+ * Sets the umbrealla header name that the module.map describes.
  * \returns 0 for success, non-zero to indicate an error.
  */
 CINDEX_LINKAGE enum CXErrorCode
@@ -126,7 +126,7 @@
                                             const char *name);
 
 /**
- * \brief Write out the \c CXModuleMapDescriptor object to a char buffer.
+ * Write out the \c CXModuleMapDescriptor object to a char buffer.
  *
  * \param options is reserved, always pass 0.
  * \param out_buffer_ptr pointer to receive the buffer pointer, which should be
@@ -140,7 +140,7 @@
                                        unsigned *out_buffer_size);
 
 /**
- * \brief Dispose a \c CXModuleMapDescriptor object.
+ * Dispose a \c CXModuleMapDescriptor object.
  */
 CINDEX_LINKAGE void clang_ModuleMapDescriptor_dispose(CXModuleMapDescriptor);
 
diff --git a/linux-x64/clang/include/clang-c/CXCompilationDatabase.h b/linux-x64/clang/include/clang-c/CXCompilationDatabase.h
index 29f89e5..6f483ee 100644
--- a/linux-x64/clang/include/clang-c/CXCompilationDatabase.h
+++ b/linux-x64/clang/include/clang-c/CXCompilationDatabase.h
@@ -38,7 +38,7 @@
 typedef void * CXCompilationDatabase;
 
 /**
- * \brief Contains the results of a search in the compilation database
+ * Contains the results of a search in the compilation database
  *
  * When searching for the compile command for a file, the compilation db can
  * return several commands, as the file may have been compiled with
@@ -49,28 +49,28 @@
 typedef void * CXCompileCommands;
 
 /**
- * \brief Represents the command line invocation to compile a specific file.
+ * Represents the command line invocation to compile a specific file.
  */
 typedef void * CXCompileCommand;
 
 /**
- * \brief Error codes for Compilation Database
+ * Error codes for Compilation Database
  */
 typedef enum  {
   /*
-   * \brief No error occurred
+   * No error occurred
    */
   CXCompilationDatabase_NoError = 0,
 
   /*
-   * \brief Database can not be loaded
+   * Database can not be loaded
    */
   CXCompilationDatabase_CanNotLoadDatabase = 1
 
 } CXCompilationDatabase_Error;
 
 /**
- * \brief Creates a compilation database from the database found in directory
+ * Creates a compilation database from the database found in directory
  * buildDir. For example, CMake can output a compile_commands.json which can
  * be used to build the database.
  *
@@ -81,13 +81,13 @@
                                         CXCompilationDatabase_Error *ErrorCode);
 
 /**
- * \brief Free the given compilation database
+ * Free the given compilation database
  */
 CINDEX_LINKAGE void
 clang_CompilationDatabase_dispose(CXCompilationDatabase);
 
 /**
- * \brief Find the compile commands used for a file. The compile commands
+ * Find the compile commands used for a file. The compile commands
  * must be freed by \c clang_CompileCommands_dispose.
  */
 CINDEX_LINKAGE CXCompileCommands
@@ -95,24 +95,24 @@
                                              const char *CompleteFileName);
 
 /**
- * \brief Get all the compile commands in the given compilation database.
+ * Get all the compile commands in the given compilation database.
  */
 CINDEX_LINKAGE CXCompileCommands
 clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase);
 
 /**
- * \brief Free the given CompileCommands
+ * Free the given CompileCommands
  */
 CINDEX_LINKAGE void clang_CompileCommands_dispose(CXCompileCommands);
 
 /**
- * \brief Get the number of CompileCommand we have for a file
+ * Get the number of CompileCommand we have for a file
  */
 CINDEX_LINKAGE unsigned
 clang_CompileCommands_getSize(CXCompileCommands);
 
 /**
- * \brief Get the I'th CompileCommand for a file
+ * Get the I'th CompileCommand for a file
  *
  * Note : 0 <= i < clang_CompileCommands_getSize(CXCompileCommands)
  */
@@ -120,26 +120,26 @@
 clang_CompileCommands_getCommand(CXCompileCommands, unsigned I);
 
 /**
- * \brief Get the working directory where the CompileCommand was executed from
+ * Get the working directory where the CompileCommand was executed from
  */
 CINDEX_LINKAGE CXString
 clang_CompileCommand_getDirectory(CXCompileCommand);
 
 /**
- * \brief Get the filename associated with the CompileCommand.
+ * Get the filename associated with the CompileCommand.
  */
 CINDEX_LINKAGE CXString
 clang_CompileCommand_getFilename(CXCompileCommand);
 
 /**
- * \brief Get the number of arguments in the compiler invocation.
+ * Get the number of arguments in the compiler invocation.
  *
  */
 CINDEX_LINKAGE unsigned
 clang_CompileCommand_getNumArgs(CXCompileCommand);
 
 /**
- * \brief Get the I'th argument value in the compiler invocations
+ * Get the I'th argument value in the compiler invocations
  *
  * Invariant :
  *  - argument 0 is the compiler executable
@@ -148,19 +148,19 @@
 clang_CompileCommand_getArg(CXCompileCommand, unsigned I);
 
 /**
- * \brief Get the number of source mappings for the compiler invocation.
+ * Get the number of source mappings for the compiler invocation.
  */
 CINDEX_LINKAGE unsigned
 clang_CompileCommand_getNumMappedSources(CXCompileCommand);
 
 /**
- * \brief Get the I'th mapped source path for the compiler invocation.
+ * Get the I'th mapped source path for the compiler invocation.
  */
 CINDEX_LINKAGE CXString
 clang_CompileCommand_getMappedSourcePath(CXCompileCommand, unsigned I);
 
 /**
- * \brief Get the I'th mapped source content for the compiler invocation.
+ * Get the I'th mapped source content for the compiler invocation.
  */
 CINDEX_LINKAGE CXString
 clang_CompileCommand_getMappedSourceContent(CXCompileCommand, unsigned I);
diff --git a/linux-x64/clang/include/clang-c/CXErrorCode.h b/linux-x64/clang/include/clang-c/CXErrorCode.h
index aff73b7..caee48d 100644
--- a/linux-x64/clang/include/clang-c/CXErrorCode.h
+++ b/linux-x64/clang/include/clang-c/CXErrorCode.h
@@ -21,19 +21,19 @@
 #endif
 
 /**
- * \brief Error codes returned by libclang routines.
+ * Error codes returned by libclang routines.
  *
  * Zero (\c CXError_Success) is the only error code indicating success.  Other
  * error codes, including not yet assigned non-zero values, indicate errors.
  */
 enum CXErrorCode {
   /**
-   * \brief No error.
+   * No error.
    */
   CXError_Success = 0,
 
   /**
-   * \brief A generic error code, no further details are available.
+   * A generic error code, no further details are available.
    *
    * Errors of this kind can get their own specific error codes in future
    * libclang versions.
@@ -41,18 +41,18 @@
   CXError_Failure = 1,
 
   /**
-   * \brief libclang crashed while performing the requested operation.
+   * libclang crashed while performing the requested operation.
    */
   CXError_Crashed = 2,
 
   /**
-   * \brief The function detected that the arguments violate the function
+   * The function detected that the arguments violate the function
    * contract.
    */
   CXError_InvalidArguments = 3,
 
   /**
-   * \brief An AST deserialization error has occurred.
+   * An AST deserialization error has occurred.
    */
   CXError_ASTReadError = 4
 };
diff --git a/linux-x64/clang/include/clang-c/CXString.h b/linux-x64/clang/include/clang-c/CXString.h
index 68ab7bc..76eeda1 100644
--- a/linux-x64/clang/include/clang-c/CXString.h
+++ b/linux-x64/clang/include/clang-c/CXString.h
@@ -28,7 +28,7 @@
  */
 
 /**
- * \brief A character string.
+ * A character string.
  *
  * The \c CXString type is used to return strings from the interface when
  * the ownership of that string might differ from one call to the next.
@@ -46,17 +46,17 @@
 } CXStringSet;
 
 /**
- * \brief Retrieve the character data associated with the given string.
+ * Retrieve the character data associated with the given string.
  */
 CINDEX_LINKAGE const char *clang_getCString(CXString string);
 
 /**
- * \brief Free the given string.
+ * Free the given string.
  */
 CINDEX_LINKAGE void clang_disposeString(CXString string);
 
 /**
- * \brief Free the given string set.
+ * Free the given string set.
  */
 CINDEX_LINKAGE void clang_disposeStringSet(CXStringSet *set);
 
diff --git a/linux-x64/clang/include/clang-c/Documentation.h b/linux-x64/clang/include/clang-c/Documentation.h
index 89373b1..58c8af5 100644
--- a/linux-x64/clang/include/clang-c/Documentation.h
+++ b/linux-x64/clang/include/clang-c/Documentation.h
@@ -32,7 +32,7 @@
  */
 
 /**
- * \brief A parsed comment.
+ * A parsed comment.
  */
 typedef struct {
   const void *ASTNode;
@@ -40,38 +40,38 @@
 } CXComment;
 
 /**
- * \brief Given a cursor that represents a documentable entity (e.g.,
+ * Given a cursor that represents a documentable entity (e.g.,
  * declaration), return the associated parsed comment as a
  * \c CXComment_FullComment AST node.
  */
 CINDEX_LINKAGE CXComment clang_Cursor_getParsedComment(CXCursor C);
 
 /**
- * \brief Describes the type of the comment AST node (\c CXComment).  A comment
+ * Describes the type of the comment AST node (\c CXComment).  A comment
  * node can be considered block content (e. g., paragraph), inline content
  * (plain text) or neither (the root AST node).
  */
 enum CXCommentKind {
   /**
-   * \brief Null comment.  No AST node is constructed at the requested location
+   * Null comment.  No AST node is constructed at the requested location
    * because there is no text or a syntax error.
    */
   CXComment_Null = 0,
 
   /**
-   * \brief Plain text.  Inline content.
+   * Plain text.  Inline content.
    */
   CXComment_Text = 1,
 
   /**
-   * \brief A command with word-like arguments that is considered inline content.
+   * A command with word-like arguments that is considered inline content.
    *
    * For example: \\c command.
    */
   CXComment_InlineCommand = 2,
 
   /**
-   * \brief HTML start tag with attributes (name-value pairs).  Considered
+   * HTML start tag with attributes (name-value pairs).  Considered
    * inline content.
    *
    * For example:
@@ -82,7 +82,7 @@
   CXComment_HTMLStartTag = 3,
 
   /**
-   * \brief HTML end tag.  Considered inline content.
+   * HTML end tag.  Considered inline content.
    *
    * For example:
    * \verbatim
@@ -92,19 +92,19 @@
   CXComment_HTMLEndTag = 4,
 
   /**
-   * \brief A paragraph, contains inline comment.  The paragraph itself is
+   * A paragraph, contains inline comment.  The paragraph itself is
    * block content.
    */
   CXComment_Paragraph = 5,
 
   /**
-   * \brief A command that has zero or more word-like arguments (number of
+   * A command that has zero or more word-like arguments (number of
    * word-like arguments depends on command name) and a paragraph as an
    * argument.  Block command is block content.
    *
    * Paragraph argument is also a child of the block command.
    *
-   * For example: \\brief has 0 word-like arguments and a paragraph argument.
+   * For example: \has 0 word-like arguments and a paragraph argument.
    *
    * AST nodes of special kinds that parser knows about (e. g., \\param
    * command) have their own node kinds.
@@ -112,7 +112,7 @@
   CXComment_BlockCommand = 6,
 
   /**
-   * \brief A \\param or \\arg command that describes the function parameter
+   * A \\param or \\arg command that describes the function parameter
    * (name, passing direction, description).
    *
    * For example: \\param [in] ParamName description.
@@ -120,7 +120,7 @@
   CXComment_ParamCommand = 7,
 
   /**
-   * \brief A \\tparam command that describes a template parameter (name and
+   * A \\tparam command that describes a template parameter (name and
    * description).
    *
    * For example: \\tparam T description.
@@ -128,7 +128,7 @@
   CXComment_TParamCommand = 8,
 
   /**
-   * \brief A verbatim block command (e. g., preformatted code).  Verbatim
+   * A verbatim block command (e. g., preformatted code).  Verbatim
    * block has an opening and a closing command and contains multiple lines of
    * text (\c CXComment_VerbatimBlockLine child nodes).
    *
@@ -140,67 +140,67 @@
   CXComment_VerbatimBlockCommand = 9,
 
   /**
-   * \brief A line of text that is contained within a
+   * A line of text that is contained within a
    * CXComment_VerbatimBlockCommand node.
    */
   CXComment_VerbatimBlockLine = 10,
 
   /**
-   * \brief A verbatim line command.  Verbatim line has an opening command,
+   * A verbatim line command.  Verbatim line has an opening command,
    * a single line of text (up to the newline after the opening command) and
    * has no closing command.
    */
   CXComment_VerbatimLine = 11,
 
   /**
-   * \brief A full comment attached to a declaration, contains block content.
+   * A full comment attached to a declaration, contains block content.
    */
   CXComment_FullComment = 12
 };
 
 /**
- * \brief The most appropriate rendering mode for an inline command, chosen on
+ * The most appropriate rendering mode for an inline command, chosen on
  * command semantics in Doxygen.
  */
 enum CXCommentInlineCommandRenderKind {
   /**
-   * \brief Command argument should be rendered in a normal font.
+   * Command argument should be rendered in a normal font.
    */
   CXCommentInlineCommandRenderKind_Normal,
 
   /**
-   * \brief Command argument should be rendered in a bold font.
+   * Command argument should be rendered in a bold font.
    */
   CXCommentInlineCommandRenderKind_Bold,
 
   /**
-   * \brief Command argument should be rendered in a monospaced font.
+   * Command argument should be rendered in a monospaced font.
    */
   CXCommentInlineCommandRenderKind_Monospaced,
 
   /**
-   * \brief Command argument should be rendered emphasized (typically italic
+   * Command argument should be rendered emphasized (typically italic
    * font).
    */
   CXCommentInlineCommandRenderKind_Emphasized
 };
 
 /**
- * \brief Describes parameter passing direction for \\param or \\arg command.
+ * Describes parameter passing direction for \\param or \\arg command.
  */
 enum CXCommentParamPassDirection {
   /**
-   * \brief The parameter is an input parameter.
+   * The parameter is an input parameter.
    */
   CXCommentParamPassDirection_In,
 
   /**
-   * \brief The parameter is an output parameter.
+   * The parameter is an output parameter.
    */
   CXCommentParamPassDirection_Out,
 
   /**
-   * \brief The parameter is an input and output parameter.
+   * The parameter is an input and output parameter.
    */
   CXCommentParamPassDirection_InOut
 };
@@ -230,7 +230,7 @@
 CXComment clang_Comment_getChild(CXComment Comment, unsigned ChildIdx);
 
 /**
- * \brief A \c CXComment_Paragraph node is considered whitespace if it contains
+ * A \c CXComment_Paragraph node is considered whitespace if it contains
  * only \c CXComment_Text nodes that are empty or whitespace.
  *
  * Other AST nodes (except \c CXComment_Paragraph and \c CXComment_Text) are
@@ -487,7 +487,7 @@
 CINDEX_LINKAGE CXString clang_VerbatimLineComment_getText(CXComment Comment);
 
 /**
- * \brief Convert an HTML tag AST node to string.
+ * Convert an HTML tag AST node to string.
  *
  * \param Comment a \c CXComment_HTMLStartTag or \c CXComment_HTMLEndTag AST
  * node.
@@ -497,13 +497,13 @@
 CINDEX_LINKAGE CXString clang_HTMLTagComment_getAsString(CXComment Comment);
 
 /**
- * \brief Convert a given full parsed comment to an HTML fragment.
+ * Convert a given full parsed comment to an HTML fragment.
  *
  * Specific details of HTML layout are subject to change.  Don't try to parse
  * this HTML back into an AST, use other APIs instead.
  *
  * Currently the following CSS classes are used:
- * \li "para-brief" for \\brief paragraph and equivalent commands;
+ * \li "para-brief" for \paragraph and equivalent commands;
  * \li "para-returns" for \\returns paragraph and equivalent commands;
  * \li "word-returns" for the "Returns" word in \\returns paragraph.
  *
@@ -530,7 +530,7 @@
 CINDEX_LINKAGE CXString clang_FullComment_getAsHTML(CXComment Comment);
 
 /**
- * \brief Convert a given full parsed comment to an XML document.
+ * Convert a given full parsed comment to an XML document.
  *
  * A Relax NG schema for the XML can be found in comment-xml-schema.rng file
  * inside clang source tree.
diff --git a/linux-x64/clang/include/clang-c/Index.h b/linux-x64/clang/include/clang-c/Index.h
index 6468d1a..86383d1 100644
--- a/linux-x64/clang/include/clang-c/Index.h
+++ b/linux-x64/clang/include/clang-c/Index.h
@@ -24,7 +24,7 @@
 #include "clang-c/BuildSystem.h"
 
 /**
- * \brief The version constants for the libclang API.
+ * The version constants for the libclang API.
  * CINDEX_VERSION_MINOR should increase when there are API additions.
  * CINDEX_VERSION_MAJOR is intended for "major" source/ABI breaking changes.
  *
@@ -32,7 +32,7 @@
  * compatible, thus CINDEX_VERSION_MAJOR is expected to remain stable.
  */
 #define CINDEX_VERSION_MAJOR 0
-#define CINDEX_VERSION_MINOR 48
+#define CINDEX_VERSION_MINOR 50
 
 #define CINDEX_VERSION_ENCODE(major, minor) ( \
       ((major) * 10000)                       \
@@ -75,30 +75,30 @@
  */
 
 /**
- * \brief An "index" that consists of a set of translation units that would
+ * An "index" that consists of a set of translation units that would
  * typically be linked together into an executable or library.
  */
 typedef void *CXIndex;
 
 /**
- * \brief An opaque type representing target information for a given translation
+ * An opaque type representing target information for a given translation
  * unit.
  */
 typedef struct CXTargetInfoImpl *CXTargetInfo;
 
 /**
- * \brief A single translation unit, which resides in an index.
+ * A single translation unit, which resides in an index.
  */
 typedef struct CXTranslationUnitImpl *CXTranslationUnit;
 
 /**
- * \brief Opaque pointer representing client data that will be passed through
+ * Opaque pointer representing client data that will be passed through
  * to various callbacks and visitors.
  */
 typedef void *CXClientData;
 
 /**
- * \brief Provides the contents of a file that has not yet been saved to disk.
+ * Provides the contents of a file that has not yet been saved to disk.
  *
  * Each CXUnsavedFile instance provides the name of a file on the
  * system along with the current contents of that file that have not
@@ -106,66 +106,66 @@
  */
 struct CXUnsavedFile {
   /**
-   * \brief The file whose contents have not yet been saved.
+   * The file whose contents have not yet been saved.
    *
    * This file must already exist in the file system.
    */
   const char *Filename;
 
   /**
-   * \brief A buffer containing the unsaved contents of this file.
+   * A buffer containing the unsaved contents of this file.
    */
   const char *Contents;
 
   /**
-   * \brief The length of the unsaved contents of this buffer.
+   * The length of the unsaved contents of this buffer.
    */
   unsigned long Length;
 };
 
 /**
- * \brief Describes the availability of a particular entity, which indicates
+ * Describes the availability of a particular entity, which indicates
  * whether the use of this entity will result in a warning or error due to
  * it being deprecated or unavailable.
  */
 enum CXAvailabilityKind {
   /**
-   * \brief The entity is available.
+   * The entity is available.
    */
   CXAvailability_Available,
   /**
-   * \brief The entity is available, but has been deprecated (and its use is
+   * The entity is available, but has been deprecated (and its use is
    * not recommended).
    */
   CXAvailability_Deprecated,
   /**
-   * \brief The entity is not available; any use of it will be an error.
+   * The entity is not available; any use of it will be an error.
    */
   CXAvailability_NotAvailable,
   /**
-   * \brief The entity is available, but not accessible; any use of it will be
+   * The entity is available, but not accessible; any use of it will be
    * an error.
    */
   CXAvailability_NotAccessible
 };
 
 /**
- * \brief Describes a version number of the form major.minor.subminor.
+ * Describes a version number of the form major.minor.subminor.
  */
 typedef struct CXVersion {
   /**
-   * \brief The major version number, e.g., the '10' in '10.7.3'. A negative
+   * The major version number, e.g., the '10' in '10.7.3'. A negative
    * value indicates that there is no version number at all.
    */
   int Major;
   /**
-   * \brief The minor version number, e.g., the '7' in '10.7.3'. This value
-   * will be negative if no minor version number was provided, e.g., for 
+   * The minor version number, e.g., the '7' in '10.7.3'. This value
+   * will be negative if no minor version number was provided, e.g., for
    * version '10'.
    */
   int Minor;
   /**
-   * \brief The subminor version number, e.g., the '3' in '10.7.3'. This value
+   * The subminor version number, e.g., the '3' in '10.7.3'. This value
    * will be negative if no minor or subminor version number was provided,
    * e.g., in version '10' or '10.7'.
    */
@@ -173,60 +173,59 @@
 } CXVersion;
 
 /**
- * \brief Describes the exception specification of a cursor.
+ * Describes the exception specification of a cursor.
  *
  * A negative value indicates that the cursor is not a function declaration.
  */
 enum CXCursor_ExceptionSpecificationKind {
-
   /**
-   * \brief The cursor has no exception specification.
+   * The cursor has no exception specification.
    */
   CXCursor_ExceptionSpecificationKind_None,
 
   /**
-   * \brief The cursor has exception specification throw()
+   * The cursor has exception specification throw()
    */
   CXCursor_ExceptionSpecificationKind_DynamicNone,
 
   /**
-   * \brief The cursor has exception specification throw(T1, T2)
+   * The cursor has exception specification throw(T1, T2)
    */
   CXCursor_ExceptionSpecificationKind_Dynamic,
 
   /**
-   * \brief The cursor has exception specification throw(...).
+   * The cursor has exception specification throw(...).
    */
   CXCursor_ExceptionSpecificationKind_MSAny,
 
   /**
-   * \brief The cursor has exception specification basic noexcept.
+   * The cursor has exception specification basic noexcept.
    */
   CXCursor_ExceptionSpecificationKind_BasicNoexcept,
 
   /**
-   * \brief The cursor has exception specification computed noexcept.
+   * The cursor has exception specification computed noexcept.
    */
   CXCursor_ExceptionSpecificationKind_ComputedNoexcept,
 
   /**
-   * \brief The exception specification has not yet been evaluated.
+   * The exception specification has not yet been evaluated.
    */
   CXCursor_ExceptionSpecificationKind_Unevaluated,
 
   /**
-   * \brief The exception specification has not yet been instantiated.
+   * The exception specification has not yet been instantiated.
    */
   CXCursor_ExceptionSpecificationKind_Uninstantiated,
 
   /**
-   * \brief The exception specification has not been parsed yet.
+   * The exception specification has not been parsed yet.
    */
   CXCursor_ExceptionSpecificationKind_Unparsed
 };
 
 /**
- * \brief Provides a shared context for creating translation units.
+ * Provides a shared context for creating translation units.
  *
  * It provides two options:
  *
@@ -269,7 +268,7 @@
                                          int displayDiagnostics);
 
 /**
- * \brief Destroy the given index.
+ * Destroy the given index.
  *
  * The index must not be destroyed until all of the translation units created
  * within that index have been destroyed.
@@ -278,12 +277,12 @@
 
 typedef enum {
   /**
-   * \brief Used to indicate that no special CXIndex options are needed.
+   * Used to indicate that no special CXIndex options are needed.
    */
   CXGlobalOpt_None = 0x0,
 
   /**
-   * \brief Used to indicate that threads that libclang creates for indexing
+   * Used to indicate that threads that libclang creates for indexing
    * purposes should use background priority.
    *
    * Affects #clang_indexSourceFile, #clang_indexTranslationUnit,
@@ -292,7 +291,7 @@
   CXGlobalOpt_ThreadBackgroundPriorityForIndexing = 0x1,
 
   /**
-   * \brief Used to indicate that threads that libclang creates for editing
+   * Used to indicate that threads that libclang creates for editing
    * purposes should use background priority.
    *
    * Affects #clang_reparseTranslationUnit, #clang_codeCompleteAt,
@@ -301,7 +300,7 @@
   CXGlobalOpt_ThreadBackgroundPriorityForEditing = 0x2,
 
   /**
-   * \brief Used to indicate that all threads that libclang creates should use
+   * Used to indicate that all threads that libclang creates should use
    * background priority.
    */
   CXGlobalOpt_ThreadBackgroundPriorityForAll =
@@ -311,7 +310,7 @@
 } CXGlobalOptFlags;
 
 /**
- * \brief Sets general options associated with a CXIndex.
+ * Sets general options associated with a CXIndex.
  *
  * For example:
  * \code
@@ -326,7 +325,7 @@
 CINDEX_LINKAGE void clang_CXIndex_setGlobalOptions(CXIndex, unsigned options);
 
 /**
- * \brief Gets the general options associated with a CXIndex.
+ * Gets the general options associated with a CXIndex.
  *
  * \returns A bitmask of options, a bitwise OR of CXGlobalOpt_XXX flags that
  * are associated with the given CXIndex object.
@@ -334,7 +333,7 @@
 CINDEX_LINKAGE unsigned clang_CXIndex_getGlobalOptions(CXIndex);
 
 /**
- * \brief Sets the invocation emission path option in a CXIndex.
+ * Sets the invocation emission path option in a CXIndex.
  *
  * The invocation emission path specifies a path which will contain log
  * files for certain libclang invocations. A null value (default) implies that
@@ -350,22 +349,22 @@
  */
 
 /**
- * \brief A particular source file that is part of a translation unit.
+ * A particular source file that is part of a translation unit.
  */
 typedef void *CXFile;
 
 /**
- * \brief Retrieve the complete file and path name of the given file.
+ * Retrieve the complete file and path name of the given file.
  */
 CINDEX_LINKAGE CXString clang_getFileName(CXFile SFile);
 
 /**
- * \brief Retrieve the last modification time of the given file.
+ * Retrieve the last modification time of the given file.
  */
 CINDEX_LINKAGE time_t clang_getFileTime(CXFile SFile);
 
 /**
- * \brief Uniquely identifies a CXFile, that refers to the same underlying file,
+ * Uniquely identifies a CXFile, that refers to the same underlying file,
  * across an indexing session.
  */
 typedef struct {
@@ -373,7 +372,7 @@
 } CXFileUniqueID;
 
 /**
- * \brief Retrieve the unique ID for the given \c file.
+ * Retrieve the unique ID for the given \c file.
  *
  * \param file the file to get the ID for.
  * \param outID stores the returned CXFileUniqueID.
@@ -383,15 +382,15 @@
 CINDEX_LINKAGE int clang_getFileUniqueID(CXFile file, CXFileUniqueID *outID);
 
 /**
- * \brief Determine whether the given header is guarded against
+ * Determine whether the given header is guarded against
  * multiple inclusions, either with the conventional
  * \#ifndef/\#define/\#endif macro guards or with \#pragma once.
  */
-CINDEX_LINKAGE unsigned 
+CINDEX_LINKAGE unsigned
 clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file);
 
 /**
- * \brief Retrieve a file handle within the given translation unit.
+ * Retrieve a file handle within the given translation unit.
  *
  * \param tu the translation unit
  *
@@ -404,7 +403,7 @@
                                     const char *file_name);
 
 /**
- * \brief Retrieve the buffer associated with the given file.
+ * Retrieve the buffer associated with the given file.
  *
  * \param tu the translation unit
  *
@@ -419,12 +418,19 @@
                                                  CXFile file, size_t *size);
 
 /**
- * \brief Returns non-zero if the \c file1 and \c file2 point to the same file,
+ * Returns non-zero if the \c file1 and \c file2 point to the same file,
  * or they are both NULL.
  */
 CINDEX_LINKAGE int clang_File_isEqual(CXFile file1, CXFile file2);
 
 /**
+ * Returns the real path name of \c file.
+ *
+ * An empty string may be returned. Use \c clang_getFileName() in that case.
+ */
+CINDEX_LINKAGE CXString clang_File_tryGetRealPathName(CXFile file);
+
+/**
  * @}
  */
 
@@ -442,7 +448,7 @@
  */
 
 /**
- * \brief Identifies a specific source location within a translation
+ * Identifies a specific source location within a translation
  * unit.
  *
  * Use clang_getExpansionLocation() or clang_getSpellingLocation()
@@ -454,7 +460,7 @@
 } CXSourceLocation;
 
 /**
- * \brief Identifies a half-open character range in the source code.
+ * Identifies a half-open character range in the source code.
  *
  * Use clang_getRangeStart() and clang_getRangeEnd() to retrieve the
  * starting and end locations from a source range, respectively.
@@ -466,12 +472,12 @@
 } CXSourceRange;
 
 /**
- * \brief Retrieve a NULL (invalid) source location.
+ * Retrieve a NULL (invalid) source location.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getNullLocation(void);
 
 /**
- * \brief Determine whether two source locations, which must refer into
+ * Determine whether two source locations, which must refer into
  * the same translation unit, refer to exactly the same point in the source
  * code.
  *
@@ -482,7 +488,7 @@
                                              CXSourceLocation loc2);
 
 /**
- * \brief Retrieves the source location associated with a given file/line/column
+ * Retrieves the source location associated with a given file/line/column
  * in a particular translation unit.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getLocation(CXTranslationUnit tu,
@@ -490,7 +496,7 @@
                                                   unsigned line,
                                                   unsigned column);
 /**
- * \brief Retrieves the source location associated with a given character offset
+ * Retrieves the source location associated with a given character offset
  * in a particular translation unit.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu,
@@ -498,30 +504,30 @@
                                                            unsigned offset);
 
 /**
- * \brief Returns non-zero if the given source location is in a system header.
+ * Returns non-zero if the given source location is in a system header.
  */
 CINDEX_LINKAGE int clang_Location_isInSystemHeader(CXSourceLocation location);
 
 /**
- * \brief Returns non-zero if the given source location is in the main file of
+ * Returns non-zero if the given source location is in the main file of
  * the corresponding translation unit.
  */
 CINDEX_LINKAGE int clang_Location_isFromMainFile(CXSourceLocation location);
 
 /**
- * \brief Retrieve a NULL (invalid) source range.
+ * Retrieve a NULL (invalid) source range.
  */
 CINDEX_LINKAGE CXSourceRange clang_getNullRange(void);
 
 /**
- * \brief Retrieve a source range given the beginning and ending source
+ * Retrieve a source range given the beginning and ending source
  * locations.
  */
 CINDEX_LINKAGE CXSourceRange clang_getRange(CXSourceLocation begin,
                                             CXSourceLocation end);
 
 /**
- * \brief Determine whether two ranges are equivalent.
+ * Determine whether two ranges are equivalent.
  *
  * \returns non-zero if the ranges are the same, zero if they differ.
  */
@@ -529,12 +535,12 @@
                                           CXSourceRange range2);
 
 /**
- * \brief Returns non-zero if \p range is null.
+ * Returns non-zero if \p range is null.
  */
 CINDEX_LINKAGE int clang_Range_isNull(CXSourceRange range);
 
 /**
- * \brief Retrieve the file, line, column, and offset represented by
+ * Retrieve the file, line, column, and offset represented by
  * the given source location.
  *
  * If the location refers into a macro expansion, retrieves the
@@ -562,7 +568,7 @@
                                                unsigned *offset);
 
 /**
- * \brief Retrieve the file, line and column represented by the given source
+ * Retrieve the file, line and column represented by the given source
  * location, as specified in a # line directive.
  *
  * Example: given the following source code in a file somefile.c
@@ -607,7 +613,7 @@
                                               unsigned *column);
 
 /**
- * \brief Legacy API to retrieve the file, line, column, and offset represented
+ * Legacy API to retrieve the file, line, column, and offset represented
  * by the given source location.
  *
  * This interface has been replaced by the newer interface
@@ -621,7 +627,7 @@
                                                    unsigned *offset);
 
 /**
- * \brief Retrieve the file, line, column, and offset represented by
+ * Retrieve the file, line, column, and offset represented by
  * the given source location.
  *
  * If the location refers into a macro instantiation, return where the
@@ -649,7 +655,7 @@
                                               unsigned *offset);
 
 /**
- * \brief Retrieve the file, line, column, and offset represented by
+ * Retrieve the file, line, column, and offset represented by
  * the given source location.
  *
  * If the location refers into a macro expansion, return where the macro was
@@ -678,31 +684,31 @@
                                           unsigned *offset);
 
 /**
- * \brief Retrieve a source location representing the first character within a
+ * Retrieve a source location representing the first character within a
  * source range.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getRangeStart(CXSourceRange range);
 
 /**
- * \brief Retrieve a source location representing the last character within a
+ * Retrieve a source location representing the last character within a
  * source range.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getRangeEnd(CXSourceRange range);
 
 /**
- * \brief Identifies an array of ranges.
+ * Identifies an array of ranges.
  */
 typedef struct {
-  /** \brief The number of ranges in the \c ranges array. */
+  /** The number of ranges in the \c ranges array. */
   unsigned count;
   /**
-   * \brief An array of \c CXSourceRanges.
+   * An array of \c CXSourceRanges.
    */
   CXSourceRange *ranges;
 } CXSourceRangeList;
 
 /**
- * \brief Retrieve all ranges that were skipped by the preprocessor.
+ * Retrieve all ranges that were skipped by the preprocessor.
  *
  * The preprocessor will skip lines when they are surrounded by an
  * if/ifdef/ifndef directive whose condition does not evaluate to true.
@@ -711,7 +717,7 @@
                                                          CXFile file);
 
 /**
- * \brief Retrieve all ranges from all files that were skipped by the
+ * Retrieve all ranges from all files that were skipped by the
  * preprocessor.
  *
  * The preprocessor will skip lines when they are surrounded by an
@@ -720,7 +726,7 @@
 CINDEX_LINKAGE CXSourceRangeList *clang_getAllSkippedRanges(CXTranslationUnit tu);
 
 /**
- * \brief Destroy the given \c CXSourceRangeList.
+ * Destroy the given \c CXSourceRangeList.
  */
 CINDEX_LINKAGE void clang_disposeSourceRangeList(CXSourceRangeList *ranges);
 
@@ -735,34 +741,34 @@
  */
 
 /**
- * \brief Describes the severity of a particular diagnostic.
+ * Describes the severity of a particular diagnostic.
  */
 enum CXDiagnosticSeverity {
   /**
-   * \brief A diagnostic that has been suppressed, e.g., by a command-line
+   * A diagnostic that has been suppressed, e.g., by a command-line
    * option.
    */
   CXDiagnostic_Ignored = 0,
 
   /**
-   * \brief This diagnostic is a note that should be attached to the
+   * This diagnostic is a note that should be attached to the
    * previous (non-note) diagnostic.
    */
   CXDiagnostic_Note    = 1,
 
   /**
-   * \brief This diagnostic indicates suspicious code that may not be
+   * This diagnostic indicates suspicious code that may not be
    * wrong.
    */
   CXDiagnostic_Warning = 2,
 
   /**
-   * \brief This diagnostic indicates that the code is ill-formed.
+   * This diagnostic indicates that the code is ill-formed.
    */
   CXDiagnostic_Error   = 3,
 
   /**
-   * \brief This diagnostic indicates that the code is ill-formed such
+   * This diagnostic indicates that the code is ill-formed such
    * that future parser recovery is unlikely to produce useful
    * results.
    */
@@ -770,23 +776,23 @@
 };
 
 /**
- * \brief A single diagnostic, containing the diagnostic's severity,
+ * A single diagnostic, containing the diagnostic's severity,
  * location, text, source ranges, and fix-it hints.
  */
 typedef void *CXDiagnostic;
 
 /**
- * \brief A group of CXDiagnostics.
+ * A group of CXDiagnostics.
  */
 typedef void *CXDiagnosticSet;
-  
+
 /**
- * \brief Determine the number of diagnostics in a CXDiagnosticSet.
+ * Determine the number of diagnostics in a CXDiagnosticSet.
  */
 CINDEX_LINKAGE unsigned clang_getNumDiagnosticsInSet(CXDiagnosticSet Diags);
 
 /**
- * \brief Retrieve a diagnostic associated with the given CXDiagnosticSet.
+ * Retrieve a diagnostic associated with the given CXDiagnosticSet.
  *
  * \param Diags the CXDiagnosticSet to query.
  * \param Index the zero-based diagnostic number to retrieve.
@@ -795,39 +801,39 @@
  * via a call to \c clang_disposeDiagnostic().
  */
 CINDEX_LINKAGE CXDiagnostic clang_getDiagnosticInSet(CXDiagnosticSet Diags,
-                                                     unsigned Index);  
+                                                     unsigned Index);
 
 /**
- * \brief Describes the kind of error that occurred (if any) in a call to
+ * Describes the kind of error that occurred (if any) in a call to
  * \c clang_loadDiagnostics.
  */
 enum CXLoadDiag_Error {
   /**
-   * \brief Indicates that no error occurred.
+   * Indicates that no error occurred.
    */
   CXLoadDiag_None = 0,
-  
+
   /**
-   * \brief Indicates that an unknown error occurred while attempting to
+   * Indicates that an unknown error occurred while attempting to
    * deserialize diagnostics.
    */
   CXLoadDiag_Unknown = 1,
-  
+
   /**
-   * \brief Indicates that the file containing the serialized diagnostics
+   * Indicates that the file containing the serialized diagnostics
    * could not be opened.
    */
   CXLoadDiag_CannotLoad = 2,
-  
+
   /**
-   * \brief Indicates that the serialized diagnostics file is invalid or
+   * Indicates that the serialized diagnostics file is invalid or
    * corrupt.
    */
   CXLoadDiag_InvalidFile = 3
 };
-  
+
 /**
- * \brief Deserialize a set of diagnostics from a Clang diagnostics bitcode
+ * Deserialize a set of diagnostics from a Clang diagnostics bitcode
  * file.
  *
  * \param file The name of the file to deserialize.
@@ -844,12 +850,12 @@
                                                   CXString *errorString);
 
 /**
- * \brief Release a CXDiagnosticSet and all of its contained diagnostics.
+ * Release a CXDiagnosticSet and all of its contained diagnostics.
  */
 CINDEX_LINKAGE void clang_disposeDiagnosticSet(CXDiagnosticSet Diags);
 
 /**
- * \brief Retrieve the child diagnostics of a CXDiagnostic. 
+ * Retrieve the child diagnostics of a CXDiagnostic.
  *
  * This CXDiagnosticSet does not need to be released by
  * clang_disposeDiagnosticSet.
@@ -857,13 +863,13 @@
 CINDEX_LINKAGE CXDiagnosticSet clang_getChildDiagnostics(CXDiagnostic D);
 
 /**
- * \brief Determine the number of diagnostics produced for the given
+ * Determine the number of diagnostics produced for the given
  * translation unit.
  */
 CINDEX_LINKAGE unsigned clang_getNumDiagnostics(CXTranslationUnit Unit);
 
 /**
- * \brief Retrieve a diagnostic associated with the given translation unit.
+ * Retrieve a diagnostic associated with the given translation unit.
  *
  * \param Unit the translation unit to query.
  * \param Index the zero-based diagnostic number to retrieve.
@@ -875,28 +881,28 @@
                                                 unsigned Index);
 
 /**
- * \brief Retrieve the complete set of diagnostics associated with a
+ * Retrieve the complete set of diagnostics associated with a
  *        translation unit.
  *
  * \param Unit the translation unit to query.
  */
 CINDEX_LINKAGE CXDiagnosticSet
-  clang_getDiagnosticSetFromTU(CXTranslationUnit Unit);  
+  clang_getDiagnosticSetFromTU(CXTranslationUnit Unit);
 
 /**
- * \brief Destroy a diagnostic.
+ * Destroy a diagnostic.
  */
 CINDEX_LINKAGE void clang_disposeDiagnostic(CXDiagnostic Diagnostic);
 
 /**
- * \brief Options to control the display of diagnostics.
+ * Options to control the display of diagnostics.
  *
  * The values in this enum are meant to be combined to customize the
  * behavior of \c clang_formatDiagnostic().
  */
 enum CXDiagnosticDisplayOptions {
   /**
-   * \brief Display the source-location information where the
+   * Display the source-location information where the
    * diagnostic was located.
    *
    * When set, diagnostics will be prefixed by the file, line, and
@@ -911,7 +917,7 @@
   CXDiagnostic_DisplaySourceLocation = 0x01,
 
   /**
-   * \brief If displaying the source-location information of the
+   * If displaying the source-location information of the
    * diagnostic, also include the column number.
    *
    * This option corresponds to the clang flag \c -fshow-column.
@@ -919,7 +925,7 @@
   CXDiagnostic_DisplayColumn = 0x02,
 
   /**
-   * \brief If displaying the source-location information of the
+   * If displaying the source-location information of the
    * diagnostic, also include information about source ranges in a
    * machine-parsable format.
    *
@@ -927,37 +933,37 @@
    * \c -fdiagnostics-print-source-range-info.
    */
   CXDiagnostic_DisplaySourceRanges = 0x04,
-  
+
   /**
-   * \brief Display the option name associated with this diagnostic, if any.
+   * Display the option name associated with this diagnostic, if any.
    *
    * The option name displayed (e.g., -Wconversion) will be placed in brackets
    * after the diagnostic text. This option corresponds to the clang flag
    * \c -fdiagnostics-show-option.
    */
   CXDiagnostic_DisplayOption = 0x08,
-  
+
   /**
-   * \brief Display the category number associated with this diagnostic, if any.
+   * Display the category number associated with this diagnostic, if any.
    *
    * The category number is displayed within brackets after the diagnostic text.
-   * This option corresponds to the clang flag 
+   * This option corresponds to the clang flag
    * \c -fdiagnostics-show-category=id.
    */
   CXDiagnostic_DisplayCategoryId = 0x10,
 
   /**
-   * \brief Display the category name associated with this diagnostic, if any.
+   * Display the category name associated with this diagnostic, if any.
    *
    * The category name is displayed within brackets after the diagnostic text.
-   * This option corresponds to the clang flag 
+   * This option corresponds to the clang flag
    * \c -fdiagnostics-show-category=name.
    */
   CXDiagnostic_DisplayCategoryName = 0x20
 };
 
 /**
- * \brief Format the given diagnostic in a manner that is suitable for display.
+ * Format the given diagnostic in a manner that is suitable for display.
  *
  * This routine will format the given diagnostic to a string, rendering
  * the diagnostic according to the various options given. The
@@ -975,7 +981,7 @@
                                                unsigned Options);
 
 /**
- * \brief Retrieve the set of display options most similar to the
+ * Retrieve the set of display options most similar to the
  * default behavior of the clang compiler.
  *
  * \returns A set of display options suitable for use with \c
@@ -984,13 +990,13 @@
 CINDEX_LINKAGE unsigned clang_defaultDiagnosticDisplayOptions(void);
 
 /**
- * \brief Determine the severity of the given diagnostic.
+ * Determine the severity of the given diagnostic.
  */
 CINDEX_LINKAGE enum CXDiagnosticSeverity
 clang_getDiagnosticSeverity(CXDiagnostic);
 
 /**
- * \brief Retrieve the source location of the given diagnostic.
+ * Retrieve the source location of the given diagnostic.
  *
  * This location is where Clang would print the caret ('^') when
  * displaying the diagnostic on the command line.
@@ -998,12 +1004,12 @@
 CINDEX_LINKAGE CXSourceLocation clang_getDiagnosticLocation(CXDiagnostic);
 
 /**
- * \brief Retrieve the text of the given diagnostic.
+ * Retrieve the text of the given diagnostic.
  */
 CINDEX_LINKAGE CXString clang_getDiagnosticSpelling(CXDiagnostic);
 
 /**
- * \brief Retrieve the name of the command-line option that enabled this
+ * Retrieve the name of the command-line option that enabled this
  * diagnostic.
  *
  * \param Diag The diagnostic to be queried.
@@ -1012,16 +1018,16 @@
  * diagnostic (if any).
  *
  * \returns A string that contains the command-line option used to enable this
- * warning, such as "-Wconversion" or "-pedantic". 
+ * warning, such as "-Wconversion" or "-pedantic".
  */
 CINDEX_LINKAGE CXString clang_getDiagnosticOption(CXDiagnostic Diag,
                                                   CXString *Disable);
 
 /**
- * \brief Retrieve the category number for this diagnostic.
+ * Retrieve the category number for this diagnostic.
  *
  * Diagnostics can be categorized into groups along with other, related
- * diagnostics (e.g., diagnostics under the same warning flag). This routine 
+ * diagnostics (e.g., diagnostics under the same warning flag). This routine
  * retrieves the category number for the given diagnostic.
  *
  * \returns The number of the category that contains this diagnostic, or zero
@@ -1030,11 +1036,11 @@
 CINDEX_LINKAGE unsigned clang_getDiagnosticCategory(CXDiagnostic);
 
 /**
- * \brief Retrieve the name of a particular diagnostic category.  This
+ * Retrieve the name of a particular diagnostic category.  This
  *  is now deprecated.  Use clang_getDiagnosticCategoryText()
  *  instead.
  *
- * \param Category A diagnostic category number, as returned by 
+ * \param Category A diagnostic category number, as returned by
  * \c clang_getDiagnosticCategory().
  *
  * \returns The name of the given diagnostic category.
@@ -1043,20 +1049,20 @@
 CXString clang_getDiagnosticCategoryName(unsigned Category);
 
 /**
- * \brief Retrieve the diagnostic category text for a given diagnostic.
+ * Retrieve the diagnostic category text for a given diagnostic.
  *
  * \returns The text of the given diagnostic category.
  */
 CINDEX_LINKAGE CXString clang_getDiagnosticCategoryText(CXDiagnostic);
-  
+
 /**
- * \brief Determine the number of source ranges associated with the given
+ * Determine the number of source ranges associated with the given
  * diagnostic.
  */
 CINDEX_LINKAGE unsigned clang_getDiagnosticNumRanges(CXDiagnostic);
 
 /**
- * \brief Retrieve a source range associated with the diagnostic.
+ * Retrieve a source range associated with the diagnostic.
  *
  * A diagnostic's source ranges highlight important elements in the source
  * code. On the command line, Clang displays source ranges by
@@ -1072,13 +1078,13 @@
                                                       unsigned Range);
 
 /**
- * \brief Determine the number of fix-it hints associated with the
+ * Determine the number of fix-it hints associated with the
  * given diagnostic.
  */
 CINDEX_LINKAGE unsigned clang_getDiagnosticNumFixIts(CXDiagnostic Diagnostic);
 
 /**
- * \brief Retrieve the replacement information for a given fix-it.
+ * Retrieve the replacement information for a given fix-it.
  *
  * Fix-its are described in terms of a source range whose contents
  * should be replaced by a string. This approach generalizes over
@@ -1121,13 +1127,13 @@
  */
 
 /**
- * \brief Get the original translation unit source file name.
+ * Get the original translation unit source file name.
  */
 CINDEX_LINKAGE CXString
 clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit);
 
 /**
- * \brief Return the CXTranslationUnit for a given source file and the provided
+ * Return the CXTranslationUnit for a given source file and the provided
  * command line arguments one would pass to the compiler.
  *
  * Note: The 'source_filename' argument is optional.  If the caller provides a
@@ -1175,7 +1181,7 @@
                                          struct CXUnsavedFile *unsaved_files);
 
 /**
- * \brief Same as \c clang_createTranslationUnit2, but returns
+ * Same as \c clang_createTranslationUnit2, but returns
  * the \c CXTranslationUnit instead of an error code.  In case of an error this
  * routine returns a \c NULL \c CXTranslationUnit, without further detailed
  * error codes.
@@ -1185,7 +1191,7 @@
     const char *ast_filename);
 
 /**
- * \brief Create a translation unit from an AST file (\c -emit-ast).
+ * Create a translation unit from an AST file (\c -emit-ast).
  *
  * \param[out] out_TU A non-NULL pointer to store the created
  * \c CXTranslationUnit.
@@ -1198,7 +1204,7 @@
     CXTranslationUnit *out_TU);
 
 /**
- * \brief Flags that control the creation of translation units.
+ * Flags that control the creation of translation units.
  *
  * The enumerators in this enumeration type are meant to be bitwise
  * ORed together to specify which options should be used when
@@ -1206,13 +1212,13 @@
  */
 enum CXTranslationUnit_Flags {
   /**
-   * \brief Used to indicate that no special translation-unit options are
+   * Used to indicate that no special translation-unit options are
    * needed.
    */
   CXTranslationUnit_None = 0x0,
 
   /**
-   * \brief Used to indicate that the parser should construct a "detailed"
+   * Used to indicate that the parser should construct a "detailed"
    * preprocessing record, including all macro definitions and instantiations.
    *
    * Constructing a detailed preprocessing record requires more memory
@@ -1224,7 +1230,7 @@
   CXTranslationUnit_DetailedPreprocessingRecord = 0x01,
 
   /**
-   * \brief Used to indicate that the translation unit is incomplete.
+   * Used to indicate that the translation unit is incomplete.
    *
    * When a translation unit is considered "incomplete", semantic
    * analysis that is typically performed at the end of the
@@ -1235,9 +1241,9 @@
    * intent of producing a precompiled header.
    */
   CXTranslationUnit_Incomplete = 0x02,
-  
+
   /**
-   * \brief Used to indicate that the translation unit should be built with an 
+   * Used to indicate that the translation unit should be built with an
    * implicit precompiled header for the preamble.
    *
    * An implicit precompiled header is used as an optimization when a
@@ -1251,9 +1257,9 @@
    * precompiled header to improve parsing performance.
    */
   CXTranslationUnit_PrecompiledPreamble = 0x04,
-  
+
   /**
-   * \brief Used to indicate that the translation unit should cache some
+   * Used to indicate that the translation unit should cache some
    * code-completion results with each reparse of the source file.
    *
    * Caching of code-completion results is a performance optimization that
@@ -1263,7 +1269,7 @@
   CXTranslationUnit_CacheCompletionResults = 0x08,
 
   /**
-   * \brief Used to indicate that the translation unit will be serialized with
+   * Used to indicate that the translation unit will be serialized with
    * \c clang_saveTranslationUnit.
    *
    * This option is typically used when parsing a header with the intent of
@@ -1272,7 +1278,7 @@
   CXTranslationUnit_ForSerialization = 0x10,
 
   /**
-   * \brief DEPRECATED: Enabled chained precompiled preambles in C++.
+   * DEPRECATED: Enabled chained precompiled preambles in C++.
    *
    * Note: this is a *temporary* option that is available only while
    * we are testing C++ precompiled preamble support. It is deprecated.
@@ -1280,7 +1286,7 @@
   CXTranslationUnit_CXXChainedPCH = 0x20,
 
   /**
-   * \brief Used to indicate that function/method bodies should be skipped while
+   * Used to indicate that function/method bodies should be skipped while
    * parsing.
    *
    * This option can be used to search for declarations/definitions while
@@ -1289,14 +1295,14 @@
   CXTranslationUnit_SkipFunctionBodies = 0x40,
 
   /**
-   * \brief Used to indicate that brief documentation comments should be
+   * Used to indicate that brief documentation comments should be
    * included into the set of code completions returned from this translation
    * unit.
    */
   CXTranslationUnit_IncludeBriefCommentsInCodeCompletion = 0x80,
 
   /**
-   * \brief Used to indicate that the precompiled preamble should be created on
+   * Used to indicate that the precompiled preamble should be created on
    * the first parse. Otherwise it will be created on the first reparse. This
    * trades runtime on the first parse (serializing the preamble takes time) for
    * reduced runtime on the second parse (can now reuse the preamble).
@@ -1304,7 +1310,7 @@
   CXTranslationUnit_CreatePreambleOnFirstParse = 0x100,
 
   /**
-   * \brief Do not stop processing when fatal errors are encountered.
+   * Do not stop processing when fatal errors are encountered.
    *
    * When fatal errors are encountered while parsing a translation unit,
    * semantic analysis is typically stopped early when compiling code. A common
@@ -1315,27 +1321,45 @@
   CXTranslationUnit_KeepGoing = 0x200,
 
   /**
-   * \brief Sets the preprocessor in a mode for parsing a single file only.
+   * Sets the preprocessor in a mode for parsing a single file only.
    */
-  CXTranslationUnit_SingleFileParse = 0x400
+  CXTranslationUnit_SingleFileParse = 0x400,
+
+  /**
+   * Used in combination with CXTranslationUnit_SkipFunctionBodies to
+   * constrain the skipping of function bodies to the preamble.
+   *
+   * The function bodies of the main file are not skipped.
+   */
+  CXTranslationUnit_LimitSkipFunctionBodiesToPreamble = 0x800,
+
+  /**
+   * Used to indicate that attributed types should be included in CXType.
+   */
+  CXTranslationUnit_IncludeAttributedTypes = 0x1000,
+
+  /**
+   * Used to indicate that implicit attributes should be visited.
+   */
+  CXTranslationUnit_VisitImplicitAttributes = 0x2000
 };
 
 /**
- * \brief Returns the set of flags that is suitable for parsing a translation
+ * Returns the set of flags that is suitable for parsing a translation
  * unit that is being edited.
  *
  * The set of flags returned provide options for \c clang_parseTranslationUnit()
  * to indicate that the translation unit is likely to be reparsed many times,
  * either explicitly (via \c clang_reparseTranslationUnit()) or implicitly
  * (e.g., by code completion (\c clang_codeCompletionAt())). The returned flag
- * set contains an unspecified set of optimizations (e.g., the precompiled 
+ * set contains an unspecified set of optimizations (e.g., the precompiled
  * preamble) geared toward improving the performance of these routines. The
  * set of optimizations enabled may change from one version to the next.
  */
 CINDEX_LINKAGE unsigned clang_defaultEditingTranslationUnitOptions(void);
 
 /**
- * \brief Same as \c clang_parseTranslationUnit2, but returns
+ * Same as \c clang_parseTranslationUnit2, but returns
  * the \c CXTranslationUnit instead of an error code.  In case of an error this
  * routine returns a \c NULL \c CXTranslationUnit, without further detailed
  * error codes.
@@ -1350,7 +1374,7 @@
                            unsigned options);
 
 /**
- * \brief Parse the given source file and the translation unit corresponding
+ * Parse the given source file and the translation unit corresponding
  * to that file.
  *
  * This routine is the main entry point for the Clang C API, providing the
@@ -1359,7 +1383,7 @@
  * command-line arguments so that the compilation can be configured in the same
  * way that the compiler is configured on the command line.
  *
- * \param CIdx The index object with which the translation unit will be 
+ * \param CIdx The index object with which the translation unit will be
  * associated.
  *
  * \param source_filename The name of the source file to load, or NULL if the
@@ -1368,7 +1392,7 @@
  * \param command_line_args The command-line arguments that would be
  * passed to the \c clang executable if it were being invoked out-of-process.
  * These command-line options will be parsed and will affect how the translation
- * unit is parsed. Note that the following options are ignored: '-c', 
+ * unit is parsed. Note that the following options are ignored: '-c',
  * '-emit-ast', '-fsyntax-only' (which is the default), and '-o \<output file>'.
  *
  * \param num_command_line_args The number of command-line arguments in
@@ -1404,7 +1428,7 @@
                             CXTranslationUnit *out_TU);
 
 /**
- * \brief Same as clang_parseTranslationUnit2 but requires a full command line
+ * Same as clang_parseTranslationUnit2 but requires a full command line
  * for \c command_line_args including argv[0]. This is useful if the standard
  * library paths are relative to the binary.
  */
@@ -1415,7 +1439,7 @@
     unsigned options, CXTranslationUnit *out_TU);
 
 /**
- * \brief Flags that control how translation units are saved.
+ * Flags that control how translation units are saved.
  *
  * The enumerators in this enumeration type are meant to be bitwise
  * ORed together to specify which options should be used when
@@ -1423,13 +1447,13 @@
  */
 enum CXSaveTranslationUnit_Flags {
   /**
-   * \brief Used to indicate that no special saving options are needed.
+   * Used to indicate that no special saving options are needed.
    */
   CXSaveTranslationUnit_None = 0x0
 };
 
 /**
- * \brief Returns the set of flags that is suitable for saving a translation
+ * Returns the set of flags that is suitable for saving a translation
  * unit.
  *
  * The set of flags returned provide options for
@@ -1440,42 +1464,42 @@
 CINDEX_LINKAGE unsigned clang_defaultSaveOptions(CXTranslationUnit TU);
 
 /**
- * \brief Describes the kind of error that occurred (if any) in a call to
+ * Describes the kind of error that occurred (if any) in a call to
  * \c clang_saveTranslationUnit().
  */
 enum CXSaveError {
   /**
-   * \brief Indicates that no error occurred while saving a translation unit.
+   * Indicates that no error occurred while saving a translation unit.
    */
   CXSaveError_None = 0,
-  
+
   /**
-   * \brief Indicates that an unknown error occurred while attempting to save
+   * Indicates that an unknown error occurred while attempting to save
    * the file.
    *
-   * This error typically indicates that file I/O failed when attempting to 
+   * This error typically indicates that file I/O failed when attempting to
    * write the file.
    */
   CXSaveError_Unknown = 1,
-  
+
   /**
-   * \brief Indicates that errors during translation prevented this attempt
+   * Indicates that errors during translation prevented this attempt
    * to save the translation unit.
-   * 
+   *
    * Errors that prevent the translation unit from being saved can be
    * extracted using \c clang_getNumDiagnostics() and \c clang_getDiagnostic().
    */
   CXSaveError_TranslationErrors = 2,
-  
+
   /**
-   * \brief Indicates that the translation unit to be saved was somehow
+   * Indicates that the translation unit to be saved was somehow
    * invalid (e.g., NULL).
    */
   CXSaveError_InvalidTU = 3
 };
-  
+
 /**
- * \brief Saves a translation unit into a serialized representation of
+ * Saves a translation unit into a serialized representation of
  * that translation unit on disk.
  *
  * Any translation unit that was parsed without error can be saved
@@ -1494,7 +1518,7 @@
  * CXSaveTranslationUnit_XXX flags.
  *
  * \returns A value that will match one of the enumerators of the CXSaveError
- * enumeration. Zero (CXSaveError_None) indicates that the translation unit was 
+ * enumeration. Zero (CXSaveError_None) indicates that the translation unit was
  * saved successfully, while a non-zero value indicates that a problem occurred.
  */
 CINDEX_LINKAGE int clang_saveTranslationUnit(CXTranslationUnit TU,
@@ -1502,7 +1526,7 @@
                                              unsigned options);
 
 /**
- * \brief Suspend a translation unit in order to free memory associated with it.
+ * Suspend a translation unit in order to free memory associated with it.
  *
  * A suspended translation unit uses significantly less memory but on the other
  * side does not support any other calls than \c clang_reparseTranslationUnit
@@ -1511,12 +1535,12 @@
 CINDEX_LINKAGE unsigned clang_suspendTranslationUnit(CXTranslationUnit);
 
 /**
- * \brief Destroy the specified CXTranslationUnit object.
+ * Destroy the specified CXTranslationUnit object.
  */
 CINDEX_LINKAGE void clang_disposeTranslationUnit(CXTranslationUnit);
 
 /**
- * \brief Flags that control the reparsing of translation units.
+ * Flags that control the reparsing of translation units.
  *
  * The enumerators in this enumeration type are meant to be bitwise
  * ORed together to specify which options should be used when
@@ -1524,41 +1548,41 @@
  */
 enum CXReparse_Flags {
   /**
-   * \brief Used to indicate that no special reparsing options are needed.
+   * Used to indicate that no special reparsing options are needed.
    */
   CXReparse_None = 0x0
 };
- 
+
 /**
- * \brief Returns the set of flags that is suitable for reparsing a translation
+ * Returns the set of flags that is suitable for reparsing a translation
  * unit.
  *
  * The set of flags returned provide options for
  * \c clang_reparseTranslationUnit() by default. The returned flag
  * set contains an unspecified set of optimizations geared toward common uses
- * of reparsing. The set of optimizations enabled may change from one version 
+ * of reparsing. The set of optimizations enabled may change from one version
  * to the next.
  */
 CINDEX_LINKAGE unsigned clang_defaultReparseOptions(CXTranslationUnit TU);
 
 /**
- * \brief Reparse the source files that produced this translation unit.
+ * Reparse the source files that produced this translation unit.
  *
  * This routine can be used to re-parse the source files that originally
  * created the given translation unit, for example because those source files
  * have changed (either on disk or as passed via \p unsaved_files). The
  * source code will be reparsed with the same command-line options as it
- * was originally parsed. 
+ * was originally parsed.
  *
  * Reparsing a translation unit invalidates all cursors and source locations
  * that refer into that translation unit. This makes reparsing a translation
  * unit semantically equivalent to destroying the translation unit and then
  * creating a new translation unit with the same command-line arguments.
- * However, it may be more efficient to reparse a translation 
+ * However, it may be more efficient to reparse a translation
  * unit using this routine.
  *
  * \param TU The translation unit whose contents will be re-parsed. The
- * translation unit must originally have been built with 
+ * translation unit must originally have been built with
  * \c clang_createTranslationUnitFromSourceFile().
  *
  * \param num_unsaved_files The number of unsaved file entries in \p
@@ -1569,7 +1593,7 @@
  * those files.  The contents and name of these files (as specified by
  * CXUnsavedFile) are copied when necessary, so the client only needs to
  * guarantee their validity until the call to this function returns.
- * 
+ *
  * \param options A bitset of options composed of the flags in CXReparse_Flags.
  * The function \c clang_defaultReparseOptions() produces a default set of
  * options recommended for most uses, based on the translation unit.
@@ -1586,7 +1610,7 @@
                                                 unsigned options);
 
 /**
-  * \brief Categorizes how memory is being used by a translation unit.
+  * Categorizes how memory is being used by a translation unit.
   */
 enum CXTUResourceUsageKind {
   CXTUResourceUsage_AST = 1,
@@ -1597,8 +1621,8 @@
   CXTUResourceUsage_AST_SideTables = 6,
   CXTUResourceUsage_SourceManager_Membuffer_Malloc = 7,
   CXTUResourceUsage_SourceManager_Membuffer_MMap = 8,
-  CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc = 9, 
-  CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10, 
+  CXTUResourceUsage_ExternalASTSource_Membuffer_Malloc = 9,
+  CXTUResourceUsage_ExternalASTSource_Membuffer_MMap = 10,
   CXTUResourceUsage_Preprocessor = 11,
   CXTUResourceUsage_PreprocessingRecord = 12,
   CXTUResourceUsage_SourceManager_DataStructures = 13,
@@ -1612,38 +1636,38 @@
 };
 
 /**
-  * \brief Returns the human-readable null-terminated C string that represents
+  * Returns the human-readable null-terminated C string that represents
   *  the name of the memory category.  This string should never be freed.
   */
 CINDEX_LINKAGE
 const char *clang_getTUResourceUsageName(enum CXTUResourceUsageKind kind);
 
 typedef struct CXTUResourceUsageEntry {
-  /* \brief The memory usage category. */
-  enum CXTUResourceUsageKind kind;  
-  /* \brief Amount of resources used. 
+  /* The memory usage category. */
+  enum CXTUResourceUsageKind kind;
+  /* Amount of resources used.
       The units will depend on the resource kind. */
   unsigned long amount;
 } CXTUResourceUsageEntry;
 
 /**
-  * \brief The memory usage of a CXTranslationUnit, broken into categories.
+  * The memory usage of a CXTranslationUnit, broken into categories.
   */
 typedef struct CXTUResourceUsage {
-  /* \brief Private data member, used for queries. */
+  /* Private data member, used for queries. */
   void *data;
 
-  /* \brief The number of entries in the 'entries' array. */
+  /* The number of entries in the 'entries' array. */
   unsigned numEntries;
 
-  /* \brief An array of key-value pairs, representing the breakdown of memory
+  /* An array of key-value pairs, representing the breakdown of memory
             usage. */
   CXTUResourceUsageEntry *entries;
 
 } CXTUResourceUsage;
 
 /**
-  * \brief Return the memory usage of a translation unit.  This object
+  * Return the memory usage of a translation unit.  This object
   *  should be released with clang_disposeCXTUResourceUsage().
   */
 CINDEX_LINKAGE CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU);
@@ -1651,7 +1675,7 @@
 CINDEX_LINKAGE void clang_disposeCXTUResourceUsage(CXTUResourceUsage usage);
 
 /**
- * \brief Get target information for this translation unit.
+ * Get target information for this translation unit.
  *
  * The CXTargetInfo object cannot outlive the CXTranslationUnit object.
  */
@@ -1659,13 +1683,13 @@
 clang_getTranslationUnitTargetInfo(CXTranslationUnit CTUnit);
 
 /**
- * \brief Destroy the CXTargetInfo object.
+ * Destroy the CXTargetInfo object.
  */
 CINDEX_LINKAGE void
 clang_TargetInfo_dispose(CXTargetInfo Info);
 
 /**
- * \brief Get the normalized target triple as a string.
+ * Get the normalized target triple as a string.
  *
  * Returns the empty string in case of any error.
  */
@@ -1673,7 +1697,7 @@
 clang_TargetInfo_getTriple(CXTargetInfo Info);
 
 /**
- * \brief Get the pointer width of the target in bits.
+ * Get the pointer width of the target in bits.
  *
  * Returns -1 in case of error.
  */
@@ -1685,12 +1709,12 @@
  */
 
 /**
- * \brief Describes the kind of entity that a cursor refers to.
+ * Describes the kind of entity that a cursor refers to.
  */
 enum CXCursorKind {
   /* Declarations */
   /**
-   * \brief A declaration whose specific kind is not exposed via this
+   * A declaration whose specific kind is not exposed via this
    * interface.
    *
    * Unexposed declarations have the same operations as any other kind
@@ -1699,84 +1723,84 @@
    * of the declaration is not reported.
    */
   CXCursor_UnexposedDecl                 = 1,
-  /** \brief A C or C++ struct. */
+  /** A C or C++ struct. */
   CXCursor_StructDecl                    = 2,
-  /** \brief A C or C++ union. */
+  /** A C or C++ union. */
   CXCursor_UnionDecl                     = 3,
-  /** \brief A C++ class. */
+  /** A C++ class. */
   CXCursor_ClassDecl                     = 4,
-  /** \brief An enumeration. */
+  /** An enumeration. */
   CXCursor_EnumDecl                      = 5,
   /**
-   * \brief A field (in C) or non-static data member (in C++) in a
+   * A field (in C) or non-static data member (in C++) in a
    * struct, union, or C++ class.
    */
   CXCursor_FieldDecl                     = 6,
-  /** \brief An enumerator constant. */
+  /** An enumerator constant. */
   CXCursor_EnumConstantDecl              = 7,
-  /** \brief A function. */
+  /** A function. */
   CXCursor_FunctionDecl                  = 8,
-  /** \brief A variable. */
+  /** A variable. */
   CXCursor_VarDecl                       = 9,
-  /** \brief A function or method parameter. */
+  /** A function or method parameter. */
   CXCursor_ParmDecl                      = 10,
-  /** \brief An Objective-C \@interface. */
+  /** An Objective-C \@interface. */
   CXCursor_ObjCInterfaceDecl             = 11,
-  /** \brief An Objective-C \@interface for a category. */
+  /** An Objective-C \@interface for a category. */
   CXCursor_ObjCCategoryDecl              = 12,
-  /** \brief An Objective-C \@protocol declaration. */
+  /** An Objective-C \@protocol declaration. */
   CXCursor_ObjCProtocolDecl              = 13,
-  /** \brief An Objective-C \@property declaration. */
+  /** An Objective-C \@property declaration. */
   CXCursor_ObjCPropertyDecl              = 14,
-  /** \brief An Objective-C instance variable. */
+  /** An Objective-C instance variable. */
   CXCursor_ObjCIvarDecl                  = 15,
-  /** \brief An Objective-C instance method. */
+  /** An Objective-C instance method. */
   CXCursor_ObjCInstanceMethodDecl        = 16,
-  /** \brief An Objective-C class method. */
+  /** An Objective-C class method. */
   CXCursor_ObjCClassMethodDecl           = 17,
-  /** \brief An Objective-C \@implementation. */
+  /** An Objective-C \@implementation. */
   CXCursor_ObjCImplementationDecl        = 18,
-  /** \brief An Objective-C \@implementation for a category. */
+  /** An Objective-C \@implementation for a category. */
   CXCursor_ObjCCategoryImplDecl          = 19,
-  /** \brief A typedef. */
+  /** A typedef. */
   CXCursor_TypedefDecl                   = 20,
-  /** \brief A C++ class method. */
+  /** A C++ class method. */
   CXCursor_CXXMethod                     = 21,
-  /** \brief A C++ namespace. */
+  /** A C++ namespace. */
   CXCursor_Namespace                     = 22,
-  /** \brief A linkage specification, e.g. 'extern "C"'. */
+  /** A linkage specification, e.g. 'extern "C"'. */
   CXCursor_LinkageSpec                   = 23,
-  /** \brief A C++ constructor. */
+  /** A C++ constructor. */
   CXCursor_Constructor                   = 24,
-  /** \brief A C++ destructor. */
+  /** A C++ destructor. */
   CXCursor_Destructor                    = 25,
-  /** \brief A C++ conversion function. */
+  /** A C++ conversion function. */
   CXCursor_ConversionFunction            = 26,
-  /** \brief A C++ template type parameter. */
+  /** A C++ template type parameter. */
   CXCursor_TemplateTypeParameter         = 27,
-  /** \brief A C++ non-type template parameter. */
+  /** A C++ non-type template parameter. */
   CXCursor_NonTypeTemplateParameter      = 28,
-  /** \brief A C++ template template parameter. */
+  /** A C++ template template parameter. */
   CXCursor_TemplateTemplateParameter     = 29,
-  /** \brief A C++ function template. */
+  /** A C++ function template. */
   CXCursor_FunctionTemplate              = 30,
-  /** \brief A C++ class template. */
+  /** A C++ class template. */
   CXCursor_ClassTemplate                 = 31,
-  /** \brief A C++ class template partial specialization. */
+  /** A C++ class template partial specialization. */
   CXCursor_ClassTemplatePartialSpecialization = 32,
-  /** \brief A C++ namespace alias declaration. */
+  /** A C++ namespace alias declaration. */
   CXCursor_NamespaceAlias                = 33,
-  /** \brief A C++ using directive. */
+  /** A C++ using directive. */
   CXCursor_UsingDirective                = 34,
-  /** \brief A C++ using declaration. */
+  /** A C++ using declaration. */
   CXCursor_UsingDeclaration              = 35,
-  /** \brief A C++ alias declaration */
+  /** A C++ alias declaration */
   CXCursor_TypeAliasDecl                 = 36,
-  /** \brief An Objective-C \@synthesize definition. */
+  /** An Objective-C \@synthesize definition. */
   CXCursor_ObjCSynthesizeDecl            = 37,
-  /** \brief An Objective-C \@dynamic definition. */
+  /** An Objective-C \@dynamic definition. */
   CXCursor_ObjCDynamicDecl               = 38,
-  /** \brief An access specifier. */
+  /** An access specifier. */
   CXCursor_CXXAccessSpecifier            = 39,
 
   CXCursor_FirstDecl                     = CXCursor_UnexposedDecl,
@@ -1788,7 +1812,7 @@
   CXCursor_ObjCProtocolRef               = 41,
   CXCursor_ObjCClassRef                  = 42,
   /**
-   * \brief A reference to a type declaration.
+   * A reference to a type declaration.
    *
    * A type reference occurs anywhere where a type is named but not
    * declared. For example, given:
@@ -1804,24 +1828,24 @@
    */
   CXCursor_TypeRef                       = 43,
   CXCursor_CXXBaseSpecifier              = 44,
-  /** 
-   * \brief A reference to a class template, function template, template
+  /**
+   * A reference to a class template, function template, template
    * template parameter, or class template partial specialization.
    */
   CXCursor_TemplateRef                   = 45,
   /**
-   * \brief A reference to a namespace or namespace alias.
+   * A reference to a namespace or namespace alias.
    */
   CXCursor_NamespaceRef                  = 46,
   /**
-   * \brief A reference to a member of a struct, union, or class that occurs in 
+   * A reference to a member of a struct, union, or class that occurs in
    * some non-expression context, e.g., a designated initializer.
    */
   CXCursor_MemberRef                     = 47,
   /**
-   * \brief A reference to a labeled statement.
+   * A reference to a labeled statement.
    *
-   * This cursor kind is used to describe the jump to "start_over" in the 
+   * This cursor kind is used to describe the jump to "start_over" in the
    * goto statement in the following example:
    *
    * \code
@@ -1834,9 +1858,9 @@
    * A label reference cursor refers to a label statement.
    */
   CXCursor_LabelRef                      = 48,
-  
+
   /**
-   * \brief A reference to a set of overloaded functions or function templates
+   * A reference to a set of overloaded functions or function templates
    * that has not yet been resolved to a specific function or function template.
    *
    * An overloaded declaration reference cursor occurs in C++ templates where
@@ -1867,18 +1891,18 @@
    * argument-dependent lookup (e.g., the "swap" function at the end of the
    * example).
    *
-   * The functions \c clang_getNumOverloadedDecls() and 
+   * The functions \c clang_getNumOverloadedDecls() and
    * \c clang_getOverloadedDecl() can be used to retrieve the definitions
    * referenced by this cursor.
    */
   CXCursor_OverloadedDeclRef             = 49,
-  
+
   /**
-   * \brief A reference to a variable that occurs in some non-expression 
+   * A reference to a variable that occurs in some non-expression
    * context, e.g., a C++ lambda capture list.
    */
   CXCursor_VariableRef                   = 50,
-  
+
   CXCursor_LastRef                       = CXCursor_VariableRef,
 
   /* Error conditions */
@@ -1893,7 +1917,7 @@
   CXCursor_FirstExpr                     = 100,
 
   /**
-   * \brief An expression whose specific kind is not exposed via this
+   * An expression whose specific kind is not exposed via this
    * interface.
    *
    * Unexposed expressions have the same operations as any other kind
@@ -1904,103 +1928,103 @@
   CXCursor_UnexposedExpr                 = 100,
 
   /**
-   * \brief An expression that refers to some value declaration, such
+   * An expression that refers to some value declaration, such
    * as a function, variable, or enumerator.
    */
   CXCursor_DeclRefExpr                   = 101,
 
   /**
-   * \brief An expression that refers to a member of a struct, union,
+   * An expression that refers to a member of a struct, union,
    * class, Objective-C class, etc.
    */
   CXCursor_MemberRefExpr                 = 102,
 
-  /** \brief An expression that calls a function. */
+  /** An expression that calls a function. */
   CXCursor_CallExpr                      = 103,
 
-  /** \brief An expression that sends a message to an Objective-C
+  /** An expression that sends a message to an Objective-C
    object or class. */
   CXCursor_ObjCMessageExpr               = 104,
 
-  /** \brief An expression that represents a block literal. */
+  /** An expression that represents a block literal. */
   CXCursor_BlockExpr                     = 105,
 
-  /** \brief An integer literal.
+  /** An integer literal.
    */
   CXCursor_IntegerLiteral                = 106,
 
-  /** \brief A floating point number literal.
+  /** A floating point number literal.
    */
   CXCursor_FloatingLiteral               = 107,
 
-  /** \brief An imaginary number literal.
+  /** An imaginary number literal.
    */
   CXCursor_ImaginaryLiteral              = 108,
 
-  /** \brief A string literal.
+  /** A string literal.
    */
   CXCursor_StringLiteral                 = 109,
 
-  /** \brief A character literal.
+  /** A character literal.
    */
   CXCursor_CharacterLiteral              = 110,
 
-  /** \brief A parenthesized expression, e.g. "(1)".
+  /** A parenthesized expression, e.g. "(1)".
    *
    * This AST node is only formed if full location information is requested.
    */
   CXCursor_ParenExpr                     = 111,
 
-  /** \brief This represents the unary-expression's (except sizeof and
+  /** This represents the unary-expression's (except sizeof and
    * alignof).
    */
   CXCursor_UnaryOperator                 = 112,
 
-  /** \brief [C99 6.5.2.1] Array Subscripting.
+  /** [C99 6.5.2.1] Array Subscripting.
    */
   CXCursor_ArraySubscriptExpr            = 113,
 
-  /** \brief A builtin binary operation expression such as "x + y" or
+  /** A builtin binary operation expression such as "x + y" or
    * "x <= y".
    */
   CXCursor_BinaryOperator                = 114,
 
-  /** \brief Compound assignment such as "+=".
+  /** Compound assignment such as "+=".
    */
   CXCursor_CompoundAssignOperator        = 115,
 
-  /** \brief The ?: ternary operator.
+  /** The ?: ternary operator.
    */
   CXCursor_ConditionalOperator           = 116,
 
-  /** \brief An explicit cast in C (C99 6.5.4) or a C-style cast in C++
+  /** An explicit cast in C (C99 6.5.4) or a C-style cast in C++
    * (C++ [expr.cast]), which uses the syntax (Type)expr.
    *
    * For example: (int)f.
    */
   CXCursor_CStyleCastExpr                = 117,
 
-  /** \brief [C99 6.5.2.5]
+  /** [C99 6.5.2.5]
    */
   CXCursor_CompoundLiteralExpr           = 118,
 
-  /** \brief Describes an C or C++ initializer list.
+  /** Describes an C or C++ initializer list.
    */
   CXCursor_InitListExpr                  = 119,
 
-  /** \brief The GNU address of label extension, representing &&label.
+  /** The GNU address of label extension, representing &&label.
    */
   CXCursor_AddrLabelExpr                 = 120,
 
-  /** \brief This is the GNU Statement Expression extension: ({int X=4; X;})
+  /** This is the GNU Statement Expression extension: ({int X=4; X;})
    */
   CXCursor_StmtExpr                      = 121,
 
-  /** \brief Represents a C11 generic selection.
+  /** Represents a C11 generic selection.
    */
   CXCursor_GenericSelectionExpr          = 122,
 
-  /** \brief Implements the GNU __null extension, which is a name for a null
+  /** Implements the GNU __null extension, which is a name for a null
    * pointer constant that has integral type (e.g., int or long) and is the same
    * size and alignment as a pointer.
    *
@@ -2010,23 +2034,23 @@
    */
   CXCursor_GNUNullExpr                   = 123,
 
-  /** \brief C++'s static_cast<> expression.
+  /** C++'s static_cast<> expression.
    */
   CXCursor_CXXStaticCastExpr             = 124,
 
-  /** \brief C++'s dynamic_cast<> expression.
+  /** C++'s dynamic_cast<> expression.
    */
   CXCursor_CXXDynamicCastExpr            = 125,
 
-  /** \brief C++'s reinterpret_cast<> expression.
+  /** C++'s reinterpret_cast<> expression.
    */
   CXCursor_CXXReinterpretCastExpr        = 126,
 
-  /** \brief C++'s const_cast<> expression.
+  /** C++'s const_cast<> expression.
    */
   CXCursor_CXXConstCastExpr              = 127,
 
-  /** \brief Represents an explicit C++ type conversion that uses "functional"
+  /** Represents an explicit C++ type conversion that uses "functional"
    * notion (C++ [expr.type.conv]).
    *
    * Example:
@@ -2036,60 +2060,60 @@
    */
   CXCursor_CXXFunctionalCastExpr         = 128,
 
-  /** \brief A C++ typeid expression (C++ [expr.typeid]).
+  /** A C++ typeid expression (C++ [expr.typeid]).
    */
   CXCursor_CXXTypeidExpr                 = 129,
 
-  /** \brief [C++ 2.13.5] C++ Boolean Literal.
+  /** [C++ 2.13.5] C++ Boolean Literal.
    */
   CXCursor_CXXBoolLiteralExpr            = 130,
 
-  /** \brief [C++0x 2.14.7] C++ Pointer Literal.
+  /** [C++0x 2.14.7] C++ Pointer Literal.
    */
   CXCursor_CXXNullPtrLiteralExpr         = 131,
 
-  /** \brief Represents the "this" expression in C++
+  /** Represents the "this" expression in C++
    */
   CXCursor_CXXThisExpr                   = 132,
 
-  /** \brief [C++ 15] C++ Throw Expression.
+  /** [C++ 15] C++ Throw Expression.
    *
    * This handles 'throw' and 'throw' assignment-expression. When
    * assignment-expression isn't present, Op will be null.
    */
   CXCursor_CXXThrowExpr                  = 133,
 
-  /** \brief A new expression for memory allocation and constructor calls, e.g:
+  /** A new expression for memory allocation and constructor calls, e.g:
    * "new CXXNewExpr(foo)".
    */
   CXCursor_CXXNewExpr                    = 134,
 
-  /** \brief A delete expression for memory deallocation and destructor calls,
+  /** A delete expression for memory deallocation and destructor calls,
    * e.g. "delete[] pArray".
    */
   CXCursor_CXXDeleteExpr                 = 135,
 
-  /** \brief A unary expression. (noexcept, sizeof, or other traits)
+  /** A unary expression. (noexcept, sizeof, or other traits)
    */
   CXCursor_UnaryExpr                     = 136,
 
-  /** \brief An Objective-C string literal i.e. @"foo".
+  /** An Objective-C string literal i.e. @"foo".
    */
   CXCursor_ObjCStringLiteral             = 137,
 
-  /** \brief An Objective-C \@encode expression.
+  /** An Objective-C \@encode expression.
    */
   CXCursor_ObjCEncodeExpr                = 138,
 
-  /** \brief An Objective-C \@selector expression.
+  /** An Objective-C \@selector expression.
    */
   CXCursor_ObjCSelectorExpr              = 139,
 
-  /** \brief An Objective-C \@protocol expression.
+  /** An Objective-C \@protocol expression.
    */
   CXCursor_ObjCProtocolExpr              = 140,
 
-  /** \brief An Objective-C "bridged" cast expression, which casts between
+  /** An Objective-C "bridged" cast expression, which casts between
    * Objective-C pointers and C pointers, transferring ownership in the process.
    *
    * \code
@@ -2098,7 +2122,7 @@
    */
   CXCursor_ObjCBridgedCastExpr           = 141,
 
-  /** \brief Represents a C++0x pack expansion that produces a sequence of
+  /** Represents a C++0x pack expansion that produces a sequence of
    * expressions.
    *
    * A pack expansion expression contains a pattern (which itself is an
@@ -2113,7 +2137,7 @@
    */
   CXCursor_PackExpansionExpr             = 142,
 
-  /** \brief Represents an expression that computes the length of a parameter
+  /** Represents an expression that computes the length of a parameter
    * pack.
    *
    * \code
@@ -2125,7 +2149,7 @@
    */
   CXCursor_SizeOfPackExpr                = 143,
 
-  /* \brief Represents a C++ lambda expression that produces a local function
+  /* Represents a C++ lambda expression that produces a local function
    * object.
    *
    * \code
@@ -2138,29 +2162,34 @@
    * \endcode
    */
   CXCursor_LambdaExpr                    = 144,
-  
-  /** \brief Objective-c Boolean Literal.
+
+  /** Objective-c Boolean Literal.
    */
   CXCursor_ObjCBoolLiteralExpr           = 145,
 
-  /** \brief Represents the "self" expression in an Objective-C method.
+  /** Represents the "self" expression in an Objective-C method.
    */
   CXCursor_ObjCSelfExpr                  = 146,
 
-  /** \brief OpenMP 4.0 [2.4, Array Section].
+  /** OpenMP 4.0 [2.4, Array Section].
    */
   CXCursor_OMPArraySectionExpr           = 147,
 
-  /** \brief Represents an @available(...) check.
+  /** Represents an @available(...) check.
    */
   CXCursor_ObjCAvailabilityCheckExpr     = 148,
 
-  CXCursor_LastExpr                      = CXCursor_ObjCAvailabilityCheckExpr,
+  /**
+   * Fixed point literal
+   */
+  CXCursor_FixedPointLiteral             = 149,
+
+  CXCursor_LastExpr                      = CXCursor_FixedPointLiteral,
 
   /* Statements */
   CXCursor_FirstStmt                     = 200,
   /**
-   * \brief A statement whose specific kind is not exposed via this
+   * A statement whose specific kind is not exposed via this
    * interface.
    *
    * Unexposed statements have the same operations as any other kind of
@@ -2169,10 +2198,10 @@
    * reported.
    */
   CXCursor_UnexposedStmt                 = 200,
-  
-  /** \brief A labelled statement in a function. 
+
+  /** A labelled statement in a function.
    *
-   * This cursor kind is used to describe the "start_over:" label statement in 
+   * This cursor kind is used to describe the "start_over:" label statement in
    * the following example:
    *
    * \code
@@ -2183,329 +2212,329 @@
    */
   CXCursor_LabelStmt                     = 201,
 
-  /** \brief A group of statements like { stmt stmt }.
+  /** A group of statements like { stmt stmt }.
    *
    * This cursor kind is used to describe compound statements, e.g. function
    * bodies.
    */
   CXCursor_CompoundStmt                  = 202,
 
-  /** \brief A case statement.
+  /** A case statement.
    */
   CXCursor_CaseStmt                      = 203,
 
-  /** \brief A default statement.
+  /** A default statement.
    */
   CXCursor_DefaultStmt                   = 204,
 
-  /** \brief An if statement
+  /** An if statement
    */
   CXCursor_IfStmt                        = 205,
 
-  /** \brief A switch statement.
+  /** A switch statement.
    */
   CXCursor_SwitchStmt                    = 206,
 
-  /** \brief A while statement.
+  /** A while statement.
    */
   CXCursor_WhileStmt                     = 207,
 
-  /** \brief A do statement.
+  /** A do statement.
    */
   CXCursor_DoStmt                        = 208,
 
-  /** \brief A for statement.
+  /** A for statement.
    */
   CXCursor_ForStmt                       = 209,
 
-  /** \brief A goto statement.
+  /** A goto statement.
    */
   CXCursor_GotoStmt                      = 210,
 
-  /** \brief An indirect goto statement.
+  /** An indirect goto statement.
    */
   CXCursor_IndirectGotoStmt              = 211,
 
-  /** \brief A continue statement.
+  /** A continue statement.
    */
   CXCursor_ContinueStmt                  = 212,
 
-  /** \brief A break statement.
+  /** A break statement.
    */
   CXCursor_BreakStmt                     = 213,
 
-  /** \brief A return statement.
+  /** A return statement.
    */
   CXCursor_ReturnStmt                    = 214,
 
-  /** \brief A GCC inline assembly statement extension.
+  /** A GCC inline assembly statement extension.
    */
   CXCursor_GCCAsmStmt                    = 215,
   CXCursor_AsmStmt                       = CXCursor_GCCAsmStmt,
 
-  /** \brief Objective-C's overall \@try-\@catch-\@finally statement.
+  /** Objective-C's overall \@try-\@catch-\@finally statement.
    */
   CXCursor_ObjCAtTryStmt                 = 216,
 
-  /** \brief Objective-C's \@catch statement.
+  /** Objective-C's \@catch statement.
    */
   CXCursor_ObjCAtCatchStmt               = 217,
 
-  /** \brief Objective-C's \@finally statement.
+  /** Objective-C's \@finally statement.
    */
   CXCursor_ObjCAtFinallyStmt             = 218,
 
-  /** \brief Objective-C's \@throw statement.
+  /** Objective-C's \@throw statement.
    */
   CXCursor_ObjCAtThrowStmt               = 219,
 
-  /** \brief Objective-C's \@synchronized statement.
+  /** Objective-C's \@synchronized statement.
    */
   CXCursor_ObjCAtSynchronizedStmt        = 220,
 
-  /** \brief Objective-C's autorelease pool statement.
+  /** Objective-C's autorelease pool statement.
    */
   CXCursor_ObjCAutoreleasePoolStmt       = 221,
 
-  /** \brief Objective-C's collection statement.
+  /** Objective-C's collection statement.
    */
   CXCursor_ObjCForCollectionStmt         = 222,
 
-  /** \brief C++'s catch statement.
+  /** C++'s catch statement.
    */
   CXCursor_CXXCatchStmt                  = 223,
 
-  /** \brief C++'s try statement.
+  /** C++'s try statement.
    */
   CXCursor_CXXTryStmt                    = 224,
 
-  /** \brief C++'s for (* : *) statement.
+  /** C++'s for (* : *) statement.
    */
   CXCursor_CXXForRangeStmt               = 225,
 
-  /** \brief Windows Structured Exception Handling's try statement.
+  /** Windows Structured Exception Handling's try statement.
    */
   CXCursor_SEHTryStmt                    = 226,
 
-  /** \brief Windows Structured Exception Handling's except statement.
+  /** Windows Structured Exception Handling's except statement.
    */
   CXCursor_SEHExceptStmt                 = 227,
 
-  /** \brief Windows Structured Exception Handling's finally statement.
+  /** Windows Structured Exception Handling's finally statement.
    */
   CXCursor_SEHFinallyStmt                = 228,
 
-  /** \brief A MS inline assembly statement extension.
+  /** A MS inline assembly statement extension.
    */
   CXCursor_MSAsmStmt                     = 229,
 
-  /** \brief The null statement ";": C99 6.8.3p3.
+  /** The null statement ";": C99 6.8.3p3.
    *
    * This cursor kind is used to describe the null statement.
    */
   CXCursor_NullStmt                      = 230,
 
-  /** \brief Adaptor class for mixing declarations with statements and
+  /** Adaptor class for mixing declarations with statements and
    * expressions.
    */
   CXCursor_DeclStmt                      = 231,
 
-  /** \brief OpenMP parallel directive.
+  /** OpenMP parallel directive.
    */
   CXCursor_OMPParallelDirective          = 232,
 
-  /** \brief OpenMP SIMD directive.
+  /** OpenMP SIMD directive.
    */
   CXCursor_OMPSimdDirective              = 233,
 
-  /** \brief OpenMP for directive.
+  /** OpenMP for directive.
    */
   CXCursor_OMPForDirective               = 234,
 
-  /** \brief OpenMP sections directive.
+  /** OpenMP sections directive.
    */
   CXCursor_OMPSectionsDirective          = 235,
 
-  /** \brief OpenMP section directive.
+  /** OpenMP section directive.
    */
   CXCursor_OMPSectionDirective           = 236,
 
-  /** \brief OpenMP single directive.
+  /** OpenMP single directive.
    */
   CXCursor_OMPSingleDirective            = 237,
 
-  /** \brief OpenMP parallel for directive.
+  /** OpenMP parallel for directive.
    */
   CXCursor_OMPParallelForDirective       = 238,
 
-  /** \brief OpenMP parallel sections directive.
+  /** OpenMP parallel sections directive.
    */
   CXCursor_OMPParallelSectionsDirective  = 239,
 
-  /** \brief OpenMP task directive.
+  /** OpenMP task directive.
    */
   CXCursor_OMPTaskDirective              = 240,
 
-  /** \brief OpenMP master directive.
+  /** OpenMP master directive.
    */
   CXCursor_OMPMasterDirective            = 241,
 
-  /** \brief OpenMP critical directive.
+  /** OpenMP critical directive.
    */
   CXCursor_OMPCriticalDirective          = 242,
 
-  /** \brief OpenMP taskyield directive.
+  /** OpenMP taskyield directive.
    */
   CXCursor_OMPTaskyieldDirective         = 243,
 
-  /** \brief OpenMP barrier directive.
+  /** OpenMP barrier directive.
    */
   CXCursor_OMPBarrierDirective           = 244,
 
-  /** \brief OpenMP taskwait directive.
+  /** OpenMP taskwait directive.
    */
   CXCursor_OMPTaskwaitDirective          = 245,
 
-  /** \brief OpenMP flush directive.
+  /** OpenMP flush directive.
    */
   CXCursor_OMPFlushDirective             = 246,
 
-  /** \brief Windows Structured Exception Handling's leave statement.
+  /** Windows Structured Exception Handling's leave statement.
    */
   CXCursor_SEHLeaveStmt                  = 247,
 
-  /** \brief OpenMP ordered directive.
+  /** OpenMP ordered directive.
    */
   CXCursor_OMPOrderedDirective           = 248,
 
-  /** \brief OpenMP atomic directive.
+  /** OpenMP atomic directive.
    */
   CXCursor_OMPAtomicDirective            = 249,
 
-  /** \brief OpenMP for SIMD directive.
+  /** OpenMP for SIMD directive.
    */
   CXCursor_OMPForSimdDirective           = 250,
 
-  /** \brief OpenMP parallel for SIMD directive.
+  /** OpenMP parallel for SIMD directive.
    */
   CXCursor_OMPParallelForSimdDirective   = 251,
 
-  /** \brief OpenMP target directive.
+  /** OpenMP target directive.
    */
   CXCursor_OMPTargetDirective            = 252,
 
-  /** \brief OpenMP teams directive.
+  /** OpenMP teams directive.
    */
   CXCursor_OMPTeamsDirective             = 253,
 
-  /** \brief OpenMP taskgroup directive.
+  /** OpenMP taskgroup directive.
    */
   CXCursor_OMPTaskgroupDirective         = 254,
 
-  /** \brief OpenMP cancellation point directive.
+  /** OpenMP cancellation point directive.
    */
   CXCursor_OMPCancellationPointDirective = 255,
 
-  /** \brief OpenMP cancel directive.
+  /** OpenMP cancel directive.
    */
   CXCursor_OMPCancelDirective            = 256,
 
-  /** \brief OpenMP target data directive.
+  /** OpenMP target data directive.
    */
   CXCursor_OMPTargetDataDirective        = 257,
 
-  /** \brief OpenMP taskloop directive.
+  /** OpenMP taskloop directive.
    */
   CXCursor_OMPTaskLoopDirective          = 258,
 
-  /** \brief OpenMP taskloop simd directive.
+  /** OpenMP taskloop simd directive.
    */
   CXCursor_OMPTaskLoopSimdDirective      = 259,
 
-  /** \brief OpenMP distribute directive.
+  /** OpenMP distribute directive.
    */
   CXCursor_OMPDistributeDirective        = 260,
 
-  /** \brief OpenMP target enter data directive.
+  /** OpenMP target enter data directive.
    */
   CXCursor_OMPTargetEnterDataDirective   = 261,
 
-  /** \brief OpenMP target exit data directive.
+  /** OpenMP target exit data directive.
    */
   CXCursor_OMPTargetExitDataDirective    = 262,
 
-  /** \brief OpenMP target parallel directive.
+  /** OpenMP target parallel directive.
    */
   CXCursor_OMPTargetParallelDirective    = 263,
 
-  /** \brief OpenMP target parallel for directive.
+  /** OpenMP target parallel for directive.
    */
   CXCursor_OMPTargetParallelForDirective = 264,
 
-  /** \brief OpenMP target update directive.
+  /** OpenMP target update directive.
    */
   CXCursor_OMPTargetUpdateDirective      = 265,
 
-  /** \brief OpenMP distribute parallel for directive.
+  /** OpenMP distribute parallel for directive.
    */
   CXCursor_OMPDistributeParallelForDirective = 266,
 
-  /** \brief OpenMP distribute parallel for simd directive.
+  /** OpenMP distribute parallel for simd directive.
    */
   CXCursor_OMPDistributeParallelForSimdDirective = 267,
 
-  /** \brief OpenMP distribute simd directive.
+  /** OpenMP distribute simd directive.
    */
   CXCursor_OMPDistributeSimdDirective = 268,
 
-  /** \brief OpenMP target parallel for simd directive.
+  /** OpenMP target parallel for simd directive.
    */
   CXCursor_OMPTargetParallelForSimdDirective = 269,
 
-  /** \brief OpenMP target simd directive.
+  /** OpenMP target simd directive.
    */
   CXCursor_OMPTargetSimdDirective = 270,
 
-  /** \brief OpenMP teams distribute directive.
+  /** OpenMP teams distribute directive.
    */
   CXCursor_OMPTeamsDistributeDirective = 271,
 
-  /** \brief OpenMP teams distribute simd directive.
+  /** OpenMP teams distribute simd directive.
    */
   CXCursor_OMPTeamsDistributeSimdDirective = 272,
 
-  /** \brief OpenMP teams distribute parallel for simd directive.
+  /** OpenMP teams distribute parallel for simd directive.
    */
   CXCursor_OMPTeamsDistributeParallelForSimdDirective = 273,
 
-  /** \brief OpenMP teams distribute parallel for directive.
+  /** OpenMP teams distribute parallel for directive.
    */
   CXCursor_OMPTeamsDistributeParallelForDirective = 274,
 
-  /** \brief OpenMP target teams directive.
+  /** OpenMP target teams directive.
    */
   CXCursor_OMPTargetTeamsDirective = 275,
 
-  /** \brief OpenMP target teams distribute directive.
+  /** OpenMP target teams distribute directive.
    */
   CXCursor_OMPTargetTeamsDistributeDirective = 276,
 
-  /** \brief OpenMP target teams distribute parallel for directive.
+  /** OpenMP target teams distribute parallel for directive.
    */
   CXCursor_OMPTargetTeamsDistributeParallelForDirective = 277,
 
-  /** \brief OpenMP target teams distribute parallel for simd directive.
+  /** OpenMP target teams distribute parallel for simd directive.
    */
   CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective = 278,
 
-  /** \brief OpenMP target teams distribute simd directive.
+  /** OpenMP target teams distribute simd directive.
    */
   CXCursor_OMPTargetTeamsDistributeSimdDirective = 279,
 
   CXCursor_LastStmt = CXCursor_OMPTargetTeamsDistributeSimdDirective,
 
   /**
-   * \brief Cursor that represents the translation unit itself.
+   * Cursor that represents the translation unit itself.
    *
    * The translation unit cursor exists primarily to act as the root
    * cursor for traversing the contents of a translation unit.
@@ -2515,7 +2544,7 @@
   /* Attributes */
   CXCursor_FirstAttr                     = 400,
   /**
-   * \brief An attribute whose specific kind is not exposed via this
+   * An attribute whose specific kind is not exposed via this
    * interface.
    */
   CXCursor_UnexposedAttr                 = 400,
@@ -2539,7 +2568,25 @@
   CXCursor_VisibilityAttr                = 417,
   CXCursor_DLLExport                     = 418,
   CXCursor_DLLImport                     = 419,
-  CXCursor_LastAttr                      = CXCursor_DLLImport,
+  CXCursor_NSReturnsRetained             = 420,
+  CXCursor_NSReturnsNotRetained          = 421,
+  CXCursor_NSReturnsAutoreleased         = 422,
+  CXCursor_NSConsumesSelf                = 423,
+  CXCursor_NSConsumed                    = 424,
+  CXCursor_ObjCException                 = 425,
+  CXCursor_ObjCNSObject                  = 426,
+  CXCursor_ObjCIndependentClass          = 427,
+  CXCursor_ObjCPreciseLifetime           = 428,
+  CXCursor_ObjCReturnsInnerPointer       = 429,
+  CXCursor_ObjCRequiresSuper             = 430,
+  CXCursor_ObjCRootClass                 = 431,
+  CXCursor_ObjCSubclassingRestricted     = 432,
+  CXCursor_ObjCExplicitProtocolImpl      = 433,
+  CXCursor_ObjCDesignatedInitializer     = 434,
+  CXCursor_ObjCRuntimeVisible            = 435,
+  CXCursor_ObjCBoxable                   = 436,
+  CXCursor_FlagEnum                      = 437,
+  CXCursor_LastAttr                      = CXCursor_FlagEnum,
 
   /* Preprocessing */
   CXCursor_PreprocessingDirective        = 500,
@@ -2552,29 +2599,29 @@
 
   /* Extra Declarations */
   /**
-   * \brief A module import declaration.
+   * A module import declaration.
    */
   CXCursor_ModuleImportDecl              = 600,
   CXCursor_TypeAliasTemplateDecl         = 601,
   /**
-   * \brief A static_assert or _Static_assert node
+   * A static_assert or _Static_assert node
    */
   CXCursor_StaticAssert                  = 602,
   /**
-   * \brief a friend declaration.
+   * a friend declaration.
    */
   CXCursor_FriendDecl                    = 603,
   CXCursor_FirstExtraDecl                = CXCursor_ModuleImportDecl,
   CXCursor_LastExtraDecl                 = CXCursor_FriendDecl,
 
   /**
-   * \brief A code completion overload candidate.
+   * A code completion overload candidate.
    */
   CXCursor_OverloadCandidate             = 700
 };
 
 /**
- * \brief A cursor representing some element in the abstract syntax tree for
+ * A cursor representing some element in the abstract syntax tree for
  * a translation unit.
  *
  * The cursor abstraction unifies the different kinds of entities in a
@@ -2604,12 +2651,12 @@
  */
 
 /**
- * \brief Retrieve the NULL cursor, which represents no entity.
+ * Retrieve the NULL cursor, which represents no entity.
  */
 CINDEX_LINKAGE CXCursor clang_getNullCursor(void);
 
 /**
- * \brief Retrieve the cursor that represents the given translation unit.
+ * Retrieve the cursor that represents the given translation unit.
  *
  * The translation unit cursor can be used to start traversing the
  * various declarations within the given translation unit.
@@ -2617,32 +2664,32 @@
 CINDEX_LINKAGE CXCursor clang_getTranslationUnitCursor(CXTranslationUnit);
 
 /**
- * \brief Determine whether two cursors are equivalent.
+ * Determine whether two cursors are equivalent.
  */
 CINDEX_LINKAGE unsigned clang_equalCursors(CXCursor, CXCursor);
 
 /**
- * \brief Returns non-zero if \p cursor is null.
+ * Returns non-zero if \p cursor is null.
  */
 CINDEX_LINKAGE int clang_Cursor_isNull(CXCursor cursor);
 
 /**
- * \brief Compute a hash value for the given cursor.
+ * Compute a hash value for the given cursor.
  */
 CINDEX_LINKAGE unsigned clang_hashCursor(CXCursor);
-  
+
 /**
- * \brief Retrieve the kind of the given cursor.
+ * Retrieve the kind of the given cursor.
  */
 CINDEX_LINKAGE enum CXCursorKind clang_getCursorKind(CXCursor);
 
 /**
- * \brief Determine whether the given cursor kind represents a declaration.
+ * Determine whether the given cursor kind represents a declaration.
  */
 CINDEX_LINKAGE unsigned clang_isDeclaration(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given declaration is invalid.
+ * Determine whether the given declaration is invalid.
  *
  * A declaration is invalid if it could not be parsed successfully.
  *
@@ -2652,7 +2699,7 @@
 CINDEX_LINKAGE unsigned clang_isInvalidDeclaration(CXCursor);
 
 /**
- * \brief Determine whether the given cursor kind represents a simple
+ * Determine whether the given cursor kind represents a simple
  * reference.
  *
  * Note that other kinds of cursors (such as expressions) can also refer to
@@ -2662,90 +2709,90 @@
 CINDEX_LINKAGE unsigned clang_isReference(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given cursor kind represents an expression.
+ * Determine whether the given cursor kind represents an expression.
  */
 CINDEX_LINKAGE unsigned clang_isExpression(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given cursor kind represents a statement.
+ * Determine whether the given cursor kind represents a statement.
  */
 CINDEX_LINKAGE unsigned clang_isStatement(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given cursor kind represents an attribute.
+ * Determine whether the given cursor kind represents an attribute.
  */
 CINDEX_LINKAGE unsigned clang_isAttribute(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given cursor has any attributes.
+ * Determine whether the given cursor has any attributes.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_hasAttrs(CXCursor C);
 
 /**
- * \brief Determine whether the given cursor kind represents an invalid
+ * Determine whether the given cursor kind represents an invalid
  * cursor.
  */
 CINDEX_LINKAGE unsigned clang_isInvalid(enum CXCursorKind);
 
 /**
- * \brief Determine whether the given cursor kind represents a translation
+ * Determine whether the given cursor kind represents a translation
  * unit.
  */
 CINDEX_LINKAGE unsigned clang_isTranslationUnit(enum CXCursorKind);
 
 /***
- * \brief Determine whether the given cursor represents a preprocessing
+ * Determine whether the given cursor represents a preprocessing
  * element, such as a preprocessor directive or macro instantiation.
  */
 CINDEX_LINKAGE unsigned clang_isPreprocessing(enum CXCursorKind);
-  
+
 /***
- * \brief Determine whether the given cursor represents a currently
+ * Determine whether the given cursor represents a currently
  *  unexposed piece of the AST (e.g., CXCursor_UnexposedStmt).
  */
 CINDEX_LINKAGE unsigned clang_isUnexposed(enum CXCursorKind);
 
 /**
- * \brief Describe the linkage of the entity referred to by a cursor.
+ * Describe the linkage of the entity referred to by a cursor.
  */
 enum CXLinkageKind {
-  /** \brief This value indicates that no linkage information is available
+  /** This value indicates that no linkage information is available
    * for a provided CXCursor. */
   CXLinkage_Invalid,
   /**
-   * \brief This is the linkage for variables, parameters, and so on that
+   * This is the linkage for variables, parameters, and so on that
    *  have automatic storage.  This covers normal (non-extern) local variables.
    */
   CXLinkage_NoLinkage,
-  /** \brief This is the linkage for static variables and static functions. */
+  /** This is the linkage for static variables and static functions. */
   CXLinkage_Internal,
-  /** \brief This is the linkage for entities with external linkage that live
+  /** This is the linkage for entities with external linkage that live
    * in C++ anonymous namespaces.*/
   CXLinkage_UniqueExternal,
-  /** \brief This is the linkage for entities with true, external linkage. */
+  /** This is the linkage for entities with true, external linkage. */
   CXLinkage_External
 };
 
 /**
- * \brief Determine the linkage of the entity referred to by a given cursor.
+ * Determine the linkage of the entity referred to by a given cursor.
  */
 CINDEX_LINKAGE enum CXLinkageKind clang_getCursorLinkage(CXCursor cursor);
 
 enum CXVisibilityKind {
-  /** \brief This value indicates that no visibility information is available
+  /** This value indicates that no visibility information is available
    * for a provided CXCursor. */
   CXVisibility_Invalid,
 
-  /** \brief Symbol not seen by the linker. */
+  /** Symbol not seen by the linker. */
   CXVisibility_Hidden,
-  /** \brief Symbol seen by the linker but resolves to a symbol inside this object. */
+  /** Symbol seen by the linker but resolves to a symbol inside this object. */
   CXVisibility_Protected,
-  /** \brief Symbol seen by the linker and acts like a normal symbol. */
+  /** Symbol seen by the linker and acts like a normal symbol. */
   CXVisibility_Default
 };
 
 /**
- * \brief Describe the visibility of the entity referred to by a cursor.
+ * Describe the visibility of the entity referred to by a cursor.
  *
  * This returns the default visibility if not explicitly specified by
  * a visibility attribute. The default visibility may be changed by
@@ -2758,14 +2805,14 @@
 CINDEX_LINKAGE enum CXVisibilityKind clang_getCursorVisibility(CXCursor cursor);
 
 /**
- * \brief Determine the availability of the entity that this cursor refers to,
+ * Determine the availability of the entity that this cursor refers to,
  * taking the current target platform into account.
  *
  * \param cursor The cursor to query.
  *
  * \returns The availability of the cursor.
  */
-CINDEX_LINKAGE enum CXAvailabilityKind 
+CINDEX_LINKAGE enum CXAvailabilityKind
 clang_getCursorAvailability(CXCursor cursor);
 
 /**
@@ -2774,47 +2821,47 @@
  */
 typedef struct CXPlatformAvailability {
   /**
-   * \brief A string that describes the platform for which this structure
+   * A string that describes the platform for which this structure
    * provides availability information.
    *
    * Possible values are "ios" or "macos".
    */
   CXString Platform;
   /**
-   * \brief The version number in which this entity was introduced.
+   * The version number in which this entity was introduced.
    */
   CXVersion Introduced;
   /**
-   * \brief The version number in which this entity was deprecated (but is
+   * The version number in which this entity was deprecated (but is
    * still available).
    */
   CXVersion Deprecated;
   /**
-   * \brief The version number in which this entity was obsoleted, and therefore
+   * The version number in which this entity was obsoleted, and therefore
    * is no longer available.
    */
   CXVersion Obsoleted;
   /**
-   * \brief Whether the entity is unconditionally unavailable on this platform.
+   * Whether the entity is unconditionally unavailable on this platform.
    */
   int Unavailable;
   /**
-   * \brief An optional message to provide to a user of this API, e.g., to
+   * An optional message to provide to a user of this API, e.g., to
    * suggest replacement APIs.
    */
   CXString Message;
 } CXPlatformAvailability;
 
 /**
- * \brief Determine the availability of the entity that this cursor refers to
+ * Determine the availability of the entity that this cursor refers to
  * on any platforms for which availability information is known.
  *
  * \param cursor The cursor to query.
  *
- * \param always_deprecated If non-NULL, will be set to indicate whether the 
+ * \param always_deprecated If non-NULL, will be set to indicate whether the
  * entity is deprecated on all platforms.
  *
- * \param deprecated_message If non-NULL, will be set to the message text 
+ * \param deprecated_message If non-NULL, will be set to the message text
  * provided along with the unconditional deprecation of this entity. The client
  * is responsible for deallocating this string.
  *
@@ -2822,7 +2869,7 @@
  * entity is unavailable on all platforms.
  *
  * \param unavailable_message If non-NULL, will be set to the message text
- * provided along with the unconditional unavailability of this entity. The 
+ * provided along with the unconditional unavailability of this entity. The
  * client is responsible for deallocating this string.
  *
  * \param availability If non-NULL, an array of CXPlatformAvailability instances
@@ -2830,15 +2877,15 @@
  * the number of platforms for which availability information is available (as
  * returned by this function) or \c availability_size, whichever is smaller.
  *
- * \param availability_size The number of elements available in the 
+ * \param availability_size The number of elements available in the
  * \c availability array.
  *
  * \returns The number of platforms (N) for which availability information is
  * available (which is unrelated to \c availability_size).
  *
- * Note that the client is responsible for calling 
- * \c clang_disposeCXPlatformAvailability to free each of the 
- * platform-availability structures returned. There are 
+ * Note that the client is responsible for calling
+ * \c clang_disposeCXPlatformAvailability to free each of the
+ * platform-availability structures returned. There are
  * \c min(N, availability_size) such structures.
  */
 CINDEX_LINKAGE int
@@ -2851,13 +2898,13 @@
                                     int availability_size);
 
 /**
- * \brief Free the memory associated with a \c CXPlatformAvailability structure.
+ * Free the memory associated with a \c CXPlatformAvailability structure.
  */
 CINDEX_LINKAGE void
 clang_disposeCXPlatformAvailability(CXPlatformAvailability *availability);
-  
+
 /**
- * \brief Describe the "language" of the entity referred to by a cursor.
+ * Describe the "language" of the entity referred to by a cursor.
  */
 enum CXLanguageKind {
   CXLanguage_Invalid = 0,
@@ -2867,12 +2914,12 @@
 };
 
 /**
- * \brief Determine the "language" of the entity referred to by a given cursor.
+ * Determine the "language" of the entity referred to by a given cursor.
  */
 CINDEX_LINKAGE enum CXLanguageKind clang_getCursorLanguage(CXCursor cursor);
 
 /**
- * \brief Describe the "thread-local storage (TLS) kind" of the declaration
+ * Describe the "thread-local storage (TLS) kind" of the declaration
  * referred to by a cursor.
  */
 enum CXTLSKind {
@@ -2882,33 +2929,33 @@
 };
 
 /**
- * \brief Determine the "thread-local storage (TLS) kind" of the declaration
+ * Determine the "thread-local storage (TLS) kind" of the declaration
  * referred to by a cursor.
  */
 CINDEX_LINKAGE enum CXTLSKind clang_getCursorTLSKind(CXCursor cursor);
 
 /**
- * \brief Returns the translation unit that a cursor originated from.
+ * Returns the translation unit that a cursor originated from.
  */
 CINDEX_LINKAGE CXTranslationUnit clang_Cursor_getTranslationUnit(CXCursor);
 
 /**
- * \brief A fast container representing a set of CXCursors.
+ * A fast container representing a set of CXCursors.
  */
 typedef struct CXCursorSetImpl *CXCursorSet;
 
 /**
- * \brief Creates an empty CXCursorSet.
+ * Creates an empty CXCursorSet.
  */
 CINDEX_LINKAGE CXCursorSet clang_createCXCursorSet(void);
 
 /**
- * \brief Disposes a CXCursorSet and releases its associated memory.
+ * Disposes a CXCursorSet and releases its associated memory.
  */
 CINDEX_LINKAGE void clang_disposeCXCursorSet(CXCursorSet cset);
 
 /**
- * \brief Queries a CXCursorSet to see if it contains a specific CXCursor.
+ * Queries a CXCursorSet to see if it contains a specific CXCursor.
  *
  * \returns non-zero if the set contains the specified cursor.
 */
@@ -2916,7 +2963,7 @@
                                                    CXCursor cursor);
 
 /**
- * \brief Inserts a CXCursor into a CXCursorSet.
+ * Inserts a CXCursor into a CXCursorSet.
  *
  * \returns zero if the CXCursor was already in the set, and non-zero otherwise.
 */
@@ -2924,11 +2971,11 @@
                                                  CXCursor cursor);
 
 /**
- * \brief Determine the semantic parent of the given cursor.
+ * Determine the semantic parent of the given cursor.
  *
  * The semantic parent of a cursor is the cursor that semantically contains
  * the given \p cursor. For many declarations, the lexical and semantic parents
- * are equivalent (the lexical parent is returned by 
+ * are equivalent (the lexical parent is returned by
  * \c clang_getCursorLexicalParent()). They diverge when declarations or
  * definitions are provided out-of-line. For example:
  *
@@ -2959,11 +3006,11 @@
 CINDEX_LINKAGE CXCursor clang_getCursorSemanticParent(CXCursor cursor);
 
 /**
- * \brief Determine the lexical parent of the given cursor.
+ * Determine the lexical parent of the given cursor.
  *
  * The lexical parent of a cursor is the cursor in which the given \p cursor
  * was actually written. For many declarations, the lexical and semantic parents
- * are equivalent (the semantic parent is returned by 
+ * are equivalent (the semantic parent is returned by
  * \c clang_getCursorSemanticParent()). They diverge when declarations or
  * definitions are provided out-of-line. For example:
  *
@@ -2995,7 +3042,7 @@
 CINDEX_LINKAGE CXCursor clang_getCursorLexicalParent(CXCursor cursor);
 
 /**
- * \brief Determine the set of methods that are overridden by the given
+ * Determine the set of methods that are overridden by the given
  * method.
  *
  * In both Objective-C and C++, a method (aka virtual member function,
@@ -3026,33 +3073,33 @@
  * \param cursor A cursor representing an Objective-C or C++
  * method. This routine will compute the set of methods that this
  * method overrides.
- * 
+ *
  * \param overridden A pointer whose pointee will be replaced with a
  * pointer to an array of cursors, representing the set of overridden
  * methods. If there are no overridden methods, the pointee will be
- * set to NULL. The pointee must be freed via a call to 
+ * set to NULL. The pointee must be freed via a call to
  * \c clang_disposeOverriddenCursors().
  *
  * \param num_overridden A pointer to the number of overridden
  * functions, will be set to the number of overridden functions in the
  * array pointed to by \p overridden.
  */
-CINDEX_LINKAGE void clang_getOverriddenCursors(CXCursor cursor, 
+CINDEX_LINKAGE void clang_getOverriddenCursors(CXCursor cursor,
                                                CXCursor **overridden,
                                                unsigned *num_overridden);
 
 /**
- * \brief Free the set of overridden cursors returned by \c
+ * Free the set of overridden cursors returned by \c
  * clang_getOverriddenCursors().
  */
 CINDEX_LINKAGE void clang_disposeOverriddenCursors(CXCursor *overridden);
 
 /**
- * \brief Retrieve the file that is included by the given inclusion directive
+ * Retrieve the file that is included by the given inclusion directive
  * cursor.
  */
 CINDEX_LINKAGE CXFile clang_getIncludedFile(CXCursor cursor);
-  
+
 /**
  * @}
  */
@@ -3069,7 +3116,7 @@
  */
 
 /**
- * \brief Map a source location to the cursor that describes the entity at that
+ * Map a source location to the cursor that describes the entity at that
  * location in the source code.
  *
  * clang_getCursor() maps an arbitrary source location within a translation
@@ -3086,7 +3133,7 @@
 CINDEX_LINKAGE CXCursor clang_getCursor(CXTranslationUnit, CXSourceLocation);
 
 /**
- * \brief Retrieve the physical location of the source constructor referenced
+ * Retrieve the physical location of the source constructor referenced
  * by the given cursor.
  *
  * The location of a declaration is typically the location of the name of that
@@ -3098,7 +3145,7 @@
 CINDEX_LINKAGE CXSourceLocation clang_getCursorLocation(CXCursor);
 
 /**
- * \brief Retrieve the physical extent of the source construct referenced by
+ * Retrieve the physical extent of the source construct referenced by
  * the given cursor.
  *
  * The extent of a cursor starts with the file/line/column pointing at the
@@ -3113,7 +3160,7 @@
 /**
  * @}
  */
-    
+
 /**
  * \defgroup CINDEX_TYPES Type information for CXCursors
  *
@@ -3121,16 +3168,16 @@
  */
 
 /**
- * \brief Describes the kind of type
+ * Describes the kind of type
  */
 enum CXTypeKind {
   /**
-   * \brief Represents an invalid type (e.g., where no type is available).
+   * Represents an invalid type (e.g., where no type is available).
    */
   CXType_Invalid = 0,
 
   /**
-   * \brief A type whose specific kind is not exposed via this
+   * A type whose specific kind is not exposed via this
    * interface.
    */
   CXType_Unexposed = 1,
@@ -3167,8 +3214,14 @@
   CXType_Float128 = 30,
   CXType_Half = 31,
   CXType_Float16 = 32,
+  CXType_ShortAccum = 33,
+  CXType_Accum = 34,
+  CXType_LongAccum = 35,
+  CXType_UShortAccum = 36,
+  CXType_UAccum = 37,
+  CXType_ULongAccum = 38,
   CXType_FirstBuiltin = CXType_Void,
-  CXType_LastBuiltin  = CXType_Float16,
+  CXType_LastBuiltin = CXType_ULongAccum,
 
   CXType_Complex = 100,
   CXType_Pointer = 101,
@@ -3191,7 +3244,7 @@
   CXType_Auto = 118,
 
   /**
-   * \brief Represents a type that was referred to using an elaborated type keyword.
+   * Represents a type that was referred to using an elaborated type keyword.
    *
    * E.g., struct S, or via a qualified name, e.g., N::M::type, or both.
    */
@@ -3240,11 +3293,15 @@
   CXType_OCLSampler = 157,
   CXType_OCLEvent = 158,
   CXType_OCLQueue = 159,
-  CXType_OCLReserveID = 160
+  CXType_OCLReserveID = 160,
+
+  CXType_ObjCObject = 161,
+  CXType_ObjCTypeParam = 162,
+  CXType_Attributed = 163
 };
 
 /**
- * \brief Describes the calling convention of a function type
+ * Describes the calling convention of a function type
  */
 enum CXCallingConv {
   CXCallingConv_Default = 0,
@@ -3271,7 +3328,7 @@
 };
 
 /**
- * \brief The type of an element in the abstract syntax tree.
+ * The type of an element in the abstract syntax tree.
  *
  */
 typedef struct {
@@ -3280,12 +3337,12 @@
 } CXType;
 
 /**
- * \brief Retrieve the type of a CXCursor (if any).
+ * Retrieve the type of a CXCursor (if any).
  */
 CINDEX_LINKAGE CXType clang_getCursorType(CXCursor C);
 
 /**
- * \brief Pretty-print the underlying type using the rules of the
+ * Pretty-print the underlying type using the rules of the
  * language of the translation unit from which it came.
  *
  * If the type is invalid, an empty string is returned.
@@ -3293,7 +3350,7 @@
 CINDEX_LINKAGE CXString clang_getTypeSpelling(CXType CT);
 
 /**
- * \brief Retrieve the underlying type of a typedef declaration.
+ * Retrieve the underlying type of a typedef declaration.
  *
  * If the cursor does not reference a typedef declaration, an invalid type is
  * returned.
@@ -3301,7 +3358,7 @@
 CINDEX_LINKAGE CXType clang_getTypedefDeclUnderlyingType(CXCursor C);
 
 /**
- * \brief Retrieve the integer type of an enum declaration.
+ * Retrieve the integer type of an enum declaration.
  *
  * If the cursor does not reference an enum declaration, an invalid type is
  * returned.
@@ -3309,7 +3366,7 @@
 CINDEX_LINKAGE CXType clang_getEnumDeclIntegerType(CXCursor C);
 
 /**
- * \brief Retrieve the integer value of an enum constant declaration as a signed
+ * Retrieve the integer value of an enum constant declaration as a signed
  *  long long.
  *
  * If the cursor does not reference an enum constant declaration, LLONG_MIN is returned.
@@ -3319,7 +3376,7 @@
 CINDEX_LINKAGE long long clang_getEnumConstantDeclValue(CXCursor C);
 
 /**
- * \brief Retrieve the integer value of an enum constant declaration as an unsigned
+ * Retrieve the integer value of an enum constant declaration as an unsigned
  *  long long.
  *
  * If the cursor does not reference an enum constant declaration, ULLONG_MAX is returned.
@@ -3329,14 +3386,14 @@
 CINDEX_LINKAGE unsigned long long clang_getEnumConstantDeclUnsignedValue(CXCursor C);
 
 /**
- * \brief Retrieve the bit width of a bit field declaration as an integer.
+ * Retrieve the bit width of a bit field declaration as an integer.
  *
  * If a cursor that is not a bit field declaration is passed in, -1 is returned.
  */
 CINDEX_LINKAGE int clang_getFieldDeclBitWidth(CXCursor C);
 
 /**
- * \brief Retrieve the number of non-variadic arguments associated with a given
+ * Retrieve the number of non-variadic arguments associated with a given
  * cursor.
  *
  * The number of arguments can be determined for calls as well as for
@@ -3345,7 +3402,7 @@
 CINDEX_LINKAGE int clang_Cursor_getNumArguments(CXCursor C);
 
 /**
- * \brief Retrieve the argument cursor of a function or method.
+ * Retrieve the argument cursor of a function or method.
  *
  * The argument cursor can be determined for calls as well as for declarations
  * of functions or methods. For other cursors and for invalid indices, an
@@ -3354,7 +3411,7 @@
 CINDEX_LINKAGE CXCursor clang_Cursor_getArgument(CXCursor C, unsigned i);
 
 /**
- * \brief Describes the kind of a template argument.
+ * Describes the kind of a template argument.
  *
  * See the definition of llvm::clang::TemplateArgument::ArgKind for full
  * element descriptions.
@@ -3374,7 +3431,7 @@
 };
 
 /**
- *\brief Returns the number of template args of a function decl representing a
+ *Returns the number of template args of a function decl representing a
  * template specialization.
  *
  * If the argument cursor cannot be converted into a template function
@@ -3392,7 +3449,7 @@
 CINDEX_LINKAGE int clang_Cursor_getNumTemplateArguments(CXCursor C);
 
 /**
- * \brief Retrieve the kind of the I'th template argument of the CXCursor C.
+ * Retrieve the kind of the I'th template argument of the CXCursor C.
  *
  * If the argument CXCursor does not represent a FunctionDecl, an invalid
  * template argument kind is returned.
@@ -3411,7 +3468,7 @@
     CXCursor C, unsigned I);
 
 /**
- * \brief Retrieve a CXType representing the type of a TemplateArgument of a
+ * Retrieve a CXType representing the type of a TemplateArgument of a
  *  function decl representing a template specialization.
  *
  * If the argument CXCursor does not represent a FunctionDecl whose I'th
@@ -3432,7 +3489,7 @@
                                                            unsigned I);
 
 /**
- * \brief Retrieve the value of an Integral TemplateArgument (of a function
+ * Retrieve the value of an Integral TemplateArgument (of a function
  *  decl representing a template specialization) as a signed long long.
  *
  * It is undefined to call this function on a CXCursor that does not represent a
@@ -3452,7 +3509,7 @@
                                                                unsigned I);
 
 /**
- * \brief Retrieve the value of an Integral TemplateArgument (of a function
+ * Retrieve the value of an Integral TemplateArgument (of a function
  *  decl representing a template specialization) as an unsigned long long.
  *
  * It is undefined to call this function on a CXCursor that does not represent a
@@ -3472,7 +3529,7 @@
     CXCursor C, unsigned I);
 
 /**
- * \brief Determine whether two CXTypes represent the same type.
+ * Determine whether two CXTypes represent the same type.
  *
  * \returns non-zero if the CXTypes represent the same type and
  *          zero otherwise.
@@ -3480,7 +3537,7 @@
 CINDEX_LINKAGE unsigned clang_equalTypes(CXType A, CXType B);
 
 /**
- * \brief Return the canonical type for a CXType.
+ * Return the canonical type for a CXType.
  *
  * Clang's type system explicitly models typedefs and all the ways
  * a specific type can be represented.  The canonical type is the underlying
@@ -3490,61 +3547,61 @@
 CINDEX_LINKAGE CXType clang_getCanonicalType(CXType T);
 
 /**
- * \brief Determine whether a CXType has the "const" qualifier set,
+ * Determine whether a CXType has the "const" qualifier set,
  * without looking through typedefs that may have added "const" at a
  * different level.
  */
 CINDEX_LINKAGE unsigned clang_isConstQualifiedType(CXType T);
 
 /**
- * \brief Determine whether a  CXCursor that is a macro, is
+ * Determine whether a  CXCursor that is a macro, is
  * function like.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isMacroFunctionLike(CXCursor C);
 
 /**
- * \brief Determine whether a  CXCursor that is a macro, is a
+ * Determine whether a  CXCursor that is a macro, is a
  * builtin one.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isMacroBuiltin(CXCursor C);
 
 /**
- * \brief Determine whether a  CXCursor that is a function declaration, is an
+ * Determine whether a  CXCursor that is a function declaration, is an
  * inline declaration.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isFunctionInlined(CXCursor C);
 
 /**
- * \brief Determine whether a CXType has the "volatile" qualifier set,
+ * Determine whether a CXType has the "volatile" qualifier set,
  * without looking through typedefs that may have added "volatile" at
  * a different level.
  */
 CINDEX_LINKAGE unsigned clang_isVolatileQualifiedType(CXType T);
 
 /**
- * \brief Determine whether a CXType has the "restrict" qualifier set,
+ * Determine whether a CXType has the "restrict" qualifier set,
  * without looking through typedefs that may have added "restrict" at a
  * different level.
  */
 CINDEX_LINKAGE unsigned clang_isRestrictQualifiedType(CXType T);
 
 /**
- * \brief Returns the address space of the given type.
+ * Returns the address space of the given type.
  */
 CINDEX_LINKAGE unsigned clang_getAddressSpace(CXType T);
 
 /**
- * \brief Returns the typedef name of the given type.
+ * Returns the typedef name of the given type.
  */
 CINDEX_LINKAGE CXString clang_getTypedefName(CXType CT);
 
 /**
- * \brief For pointer types, returns the type of the pointee.
+ * For pointer types, returns the type of the pointee.
  */
 CINDEX_LINKAGE CXType clang_getPointeeType(CXType T);
 
 /**
- * \brief Return the cursor for the declaration of the given type.
+ * Return the cursor for the declaration of the given type.
  */
 CINDEX_LINKAGE CXCursor clang_getTypeDeclaration(CXType T);
 
@@ -3556,36 +3613,37 @@
 /**
  * Returns the Objective-C type encoding for the specified CXType.
  */
-CINDEX_LINKAGE CXString clang_Type_getObjCEncoding(CXType type); 
+CINDEX_LINKAGE CXString clang_Type_getObjCEncoding(CXType type);
 
 /**
- * \brief Retrieve the spelling of a given CXTypeKind.
+ * Retrieve the spelling of a given CXTypeKind.
  */
 CINDEX_LINKAGE CXString clang_getTypeKindSpelling(enum CXTypeKind K);
 
 /**
- * \brief Retrieve the calling convention associated with a function type.
+ * Retrieve the calling convention associated with a function type.
  *
  * If a non-function type is passed in, CXCallingConv_Invalid is returned.
  */
 CINDEX_LINKAGE enum CXCallingConv clang_getFunctionTypeCallingConv(CXType T);
 
 /**
- * \brief Retrieve the return type associated with a function type.
+ * Retrieve the return type associated with a function type.
  *
  * If a non-function type is passed in, an invalid type is returned.
  */
 CINDEX_LINKAGE CXType clang_getResultType(CXType T);
 
 /**
- * \brief Retrieve the exception specification type associated with a function type.
+ * Retrieve the exception specification type associated with a function type.
+ * This is a value of type CXCursor_ExceptionSpecificationKind.
  *
  * If a non-function type is passed in, an error code of -1 is returned.
  */
 CINDEX_LINKAGE int clang_getExceptionSpecificationType(CXType T);
 
 /**
- * \brief Retrieve the number of non-variadic parameters associated with a
+ * Retrieve the number of non-variadic parameters associated with a
  * function type.
  *
  * If a non-function type is passed in, -1 is returned.
@@ -3593,7 +3651,7 @@
 CINDEX_LINKAGE int clang_getNumArgTypes(CXType T);
 
 /**
- * \brief Retrieve the type of a parameter of a function type.
+ * Retrieve the type of a parameter of a function type.
  *
  * If a non-function type is passed in or the function does not have enough
  * parameters, an invalid type is returned.
@@ -3601,32 +3659,70 @@
 CINDEX_LINKAGE CXType clang_getArgType(CXType T, unsigned i);
 
 /**
- * \brief Return 1 if the CXType is a variadic function type, and 0 otherwise.
+ * Retrieves the base type of the ObjCObjectType.
+ *
+ * If the type is not an ObjC object, an invalid type is returned.
+ */
+CINDEX_LINKAGE CXType clang_Type_getObjCObjectBaseType(CXType T);
+
+/**
+ * Retrieve the number of protocol references associated with an ObjC object/id.
+ *
+ * If the type is not an ObjC object, 0 is returned.
+ */
+CINDEX_LINKAGE unsigned clang_Type_getNumObjCProtocolRefs(CXType T);
+
+/**
+ * Retrieve the decl for a protocol reference for an ObjC object/id.
+ *
+ * If the type is not an ObjC object or there are not enough protocol
+ * references, an invalid cursor is returned.
+ */
+CINDEX_LINKAGE CXCursor clang_Type_getObjCProtocolDecl(CXType T, unsigned i);
+
+/**
+ * Retreive the number of type arguments associated with an ObjC object.
+ *
+ * If the type is not an ObjC object, 0 is returned.
+ */
+CINDEX_LINKAGE unsigned clang_Type_getNumObjCTypeArgs(CXType T);
+
+/**
+ * Retrieve a type argument associated with an ObjC object.
+ *
+ * If the type is not an ObjC or the index is not valid,
+ * an invalid type is returned.
+ */
+CINDEX_LINKAGE CXType clang_Type_getObjCTypeArg(CXType T, unsigned i);
+
+/**
+ * Return 1 if the CXType is a variadic function type, and 0 otherwise.
  */
 CINDEX_LINKAGE unsigned clang_isFunctionTypeVariadic(CXType T);
 
 /**
- * \brief Retrieve the return type associated with a given cursor.
+ * Retrieve the return type associated with a given cursor.
  *
  * This only returns a valid type if the cursor refers to a function or method.
  */
 CINDEX_LINKAGE CXType clang_getCursorResultType(CXCursor C);
 
 /**
- * \brief Retrieve the exception specification type associated with a given cursor.
+ * Retrieve the exception specification type associated with a given cursor.
+ * This is a value of type CXCursor_ExceptionSpecificationKind.
  *
  * This only returns a valid result if the cursor refers to a function or method.
  */
 CINDEX_LINKAGE int clang_getCursorExceptionSpecificationType(CXCursor C);
 
 /**
- * \brief Return 1 if the CXType is a POD (plain old data) type, and 0
+ * Return 1 if the CXType is a POD (plain old data) type, and 0
  *  otherwise.
  */
 CINDEX_LINKAGE unsigned clang_isPODType(CXType T);
 
 /**
- * \brief Return the element type of an array, complex, or vector type.
+ * Return the element type of an array, complex, or vector type.
  *
  * If a type is passed in that is not an array, complex, or vector type,
  * an invalid type is returned.
@@ -3634,7 +3730,7 @@
 CINDEX_LINKAGE CXType clang_getElementType(CXType T);
 
 /**
- * \brief Return the number of elements of an array or vector type.
+ * Return the number of elements of an array or vector type.
  *
  * If a type is passed in that is not an array or vector type,
  * -1 is returned.
@@ -3642,28 +3738,28 @@
 CINDEX_LINKAGE long long clang_getNumElements(CXType T);
 
 /**
- * \brief Return the element type of an array type.
+ * Return the element type of an array type.
  *
  * If a non-array type is passed in, an invalid type is returned.
  */
 CINDEX_LINKAGE CXType clang_getArrayElementType(CXType T);
 
 /**
- * \brief Return the array size of a constant array.
+ * Return the array size of a constant array.
  *
  * If a non-array type is passed in, -1 is returned.
  */
 CINDEX_LINKAGE long long clang_getArraySize(CXType T);
 
 /**
- * \brief Retrieve the type named by the qualified-id.
+ * Retrieve the type named by the qualified-id.
  *
  * If a non-elaborated type is passed in, an invalid type is returned.
  */
 CINDEX_LINKAGE CXType clang_Type_getNamedType(CXType T);
 
 /**
- * \brief Determine if a typedef is 'transparent' tag.
+ * Determine if a typedef is 'transparent' tag.
  *
  * A typedef is considered 'transparent' if it shares a name and spelling
  * location with its underlying tag type, as is the case with the NS_ENUM macro.
@@ -3672,8 +3768,35 @@
  */
 CINDEX_LINKAGE unsigned clang_Type_isTransparentTagTypedef(CXType T);
 
+enum CXTypeNullabilityKind {
+  /**
+   * Values of this type can never be null.
+   */
+  CXTypeNullability_NonNull = 0,
+  /**
+   * Values of this type can be null.
+   */
+  CXTypeNullability_Nullable = 1,
+  /**
+   * Whether values of this type can be null is (explicitly)
+   * unspecified. This captures a (fairly rare) case where we
+   * can't conclude anything about the nullability of the type even
+   * though it has been considered.
+   */
+  CXTypeNullability_Unspecified = 2,
+  /**
+   * Nullability is not applicable to this type.
+   */
+  CXTypeNullability_Invalid = 3
+};
+
 /**
- * \brief List the possible error codes for \c clang_Type_getSizeOf,
+ * Retrieve the nullability kind of a pointer type.
+ */
+CINDEX_LINKAGE enum CXTypeNullabilityKind clang_Type_getNullability(CXType T);
+
+/**
+ * List the possible error codes for \c clang_Type_getSizeOf,
  *   \c clang_Type_getAlignOf, \c clang_Type_getOffsetOf and
  *   \c clang_Cursor_getOffsetOf.
  *
@@ -3682,29 +3805,29 @@
  */
 enum CXTypeLayoutError {
   /**
-   * \brief Type is of kind CXType_Invalid.
+   * Type is of kind CXType_Invalid.
    */
   CXTypeLayoutError_Invalid = -1,
   /**
-   * \brief The type is an incomplete Type.
+   * The type is an incomplete Type.
    */
   CXTypeLayoutError_Incomplete = -2,
   /**
-   * \brief The type is a dependent Type.
+   * The type is a dependent Type.
    */
   CXTypeLayoutError_Dependent = -3,
   /**
-   * \brief The type is not a constant size type.
+   * The type is not a constant size type.
    */
   CXTypeLayoutError_NotConstantSize = -4,
   /**
-   * \brief The Field name is not valid for this record.
+   * The Field name is not valid for this record.
    */
   CXTypeLayoutError_InvalidFieldName = -5
 };
 
 /**
- * \brief Return the alignment of a type in bytes as per C++[expr.alignof]
+ * Return the alignment of a type in bytes as per C++[expr.alignof]
  *   standard.
  *
  * If the type declaration is invalid, CXTypeLayoutError_Invalid is returned.
@@ -3718,14 +3841,14 @@
 CINDEX_LINKAGE long long clang_Type_getAlignOf(CXType T);
 
 /**
- * \brief Return the class type of an member pointer type.
+ * Return the class type of an member pointer type.
  *
  * If a non-member-pointer type is passed in, an invalid type is returned.
  */
 CINDEX_LINKAGE CXType clang_Type_getClassType(CXType T);
 
 /**
- * \brief Return the size of a type in bytes as per C++[expr.sizeof] standard.
+ * Return the size of a type in bytes as per C++[expr.sizeof] standard.
  *
  * If the type declaration is invalid, CXTypeLayoutError_Invalid is returned.
  * If the type declaration is an incomplete type, CXTypeLayoutError_Incomplete
@@ -3736,7 +3859,7 @@
 CINDEX_LINKAGE long long clang_Type_getSizeOf(CXType T);
 
 /**
- * \brief Return the offset of a field named S in a record of type T in bits
+ * Return the offset of a field named S in a record of type T in bits
  *   as it would be returned by __offsetof__ as per C++11[18.2p4]
  *
  * If the cursor is not a record field declaration, CXTypeLayoutError_Invalid
@@ -3751,7 +3874,14 @@
 CINDEX_LINKAGE long long clang_Type_getOffsetOf(CXType T, const char *S);
 
 /**
- * \brief Return the offset of the field represented by the Cursor.
+ * Return the type that was modified by this attributed type.
+ *
+ * If the type is not an attributed type, an invalid type is returned.
+ */
+CINDEX_LINKAGE CXType clang_Type_getModifiedType(CXType T);
+
+/**
+ * Return the offset of the field represented by the Cursor.
  *
  * If the cursor is not a field declaration, -1 is returned.
  * If the cursor semantic parent is not a record field declaration,
@@ -3766,28 +3896,28 @@
 CINDEX_LINKAGE long long clang_Cursor_getOffsetOfField(CXCursor C);
 
 /**
- * \brief Determine whether the given cursor represents an anonymous record
+ * Determine whether the given cursor represents an anonymous record
  * declaration.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isAnonymous(CXCursor C);
 
 enum CXRefQualifierKind {
-  /** \brief No ref-qualifier was provided. */
+  /** No ref-qualifier was provided. */
   CXRefQualifier_None = 0,
-  /** \brief An lvalue ref-qualifier was provided (\c &). */
+  /** An lvalue ref-qualifier was provided (\c &). */
   CXRefQualifier_LValue,
-  /** \brief An rvalue ref-qualifier was provided (\c &&). */
+  /** An rvalue ref-qualifier was provided (\c &&). */
   CXRefQualifier_RValue
 };
 
 /**
- * \brief Returns the number of template arguments for given template
+ * Returns the number of template arguments for given template
  * specialization, or -1 if type \c T is not a template specialization.
  */
 CINDEX_LINKAGE int clang_Type_getNumTemplateArguments(CXType T);
 
 /**
- * \brief Returns the type template argument of a template class specialization
+ * Returns the type template argument of a template class specialization
  * at given index.
  *
  * This function only returns template type arguments and does not handle
@@ -3796,7 +3926,7 @@
 CINDEX_LINKAGE CXType clang_Type_getTemplateArgumentAsType(CXType T, unsigned i);
 
 /**
- * \brief Retrieve the ref-qualifier kind of a function or method.
+ * Retrieve the ref-qualifier kind of a function or method.
  *
  * The ref-qualifier is returned for C++ functions or methods. For other types
  * or non-C++ declarations, CXRefQualifier_None is returned.
@@ -3804,19 +3934,19 @@
 CINDEX_LINKAGE enum CXRefQualifierKind clang_Type_getCXXRefQualifier(CXType T);
 
 /**
- * \brief Returns non-zero if the cursor specifies a Record member that is a
+ * Returns non-zero if the cursor specifies a Record member that is a
  *   bitfield.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isBitField(CXCursor C);
 
 /**
- * \brief Returns 1 if the base class specified by the cursor with kind
+ * Returns 1 if the base class specified by the cursor with kind
  *   CX_CXXBaseSpecifier is virtual.
  */
 CINDEX_LINKAGE unsigned clang_isVirtualBase(CXCursor);
-    
+
 /**
- * \brief Represents the C++ access control level to a base class for a
+ * Represents the C++ access control level to a base class for a
  * cursor with kind CX_CXXBaseSpecifier.
  */
 enum CX_CXXAccessSpecifier {
@@ -3827,7 +3957,7 @@
 };
 
 /**
- * \brief Returns the access control level for the referenced object.
+ * Returns the access control level for the referenced object.
  *
  * If the cursor refers to a C++ declaration, its access control level within its
  * parent scope is returned. Otherwise, if the cursor refers to a base specifier or
@@ -3836,7 +3966,7 @@
 CINDEX_LINKAGE enum CX_CXXAccessSpecifier clang_getCXXAccessSpecifier(CXCursor);
 
 /**
- * \brief Represents the storage classes as declared in the source. CX_SC_Invalid
+ * Represents the storage classes as declared in the source. CX_SC_Invalid
  * was added for the case that the passed cursor in not a declaration.
  */
 enum CX_StorageClass {
@@ -3851,7 +3981,7 @@
 };
 
 /**
- * \brief Returns the storage class for a function or variable declaration.
+ * Returns the storage class for a function or variable declaration.
  *
  * If the passed in Cursor is not a function or variable declaration,
  * CX_SC_Invalid is returned else the storage class.
@@ -3859,7 +3989,7 @@
 CINDEX_LINKAGE enum CX_StorageClass clang_Cursor_getStorageClass(CXCursor);
 
 /**
- * \brief Determine the number of overloaded declarations referenced by a 
+ * Determine the number of overloaded declarations referenced by a
  * \c CXCursor_OverloadedDeclRef cursor.
  *
  * \param cursor The cursor whose overloaded declarations are being queried.
@@ -3870,7 +4000,7 @@
 CINDEX_LINKAGE unsigned clang_getNumOverloadedDecls(CXCursor cursor);
 
 /**
- * \brief Retrieve a cursor for one of the overloaded declarations referenced
+ * Retrieve a cursor for one of the overloaded declarations referenced
  * by a \c CXCursor_OverloadedDeclRef cursor.
  *
  * \param cursor The cursor whose overloaded declarations are being queried.
@@ -3878,18 +4008,18 @@
  * \param index The zero-based index into the set of overloaded declarations in
  * the cursor.
  *
- * \returns A cursor representing the declaration referenced by the given 
- * \c cursor at the specified \c index. If the cursor does not have an 
+ * \returns A cursor representing the declaration referenced by the given
+ * \c cursor at the specified \c index. If the cursor does not have an
  * associated set of overloaded declarations, or if the index is out of bounds,
  * returns \c clang_getNullCursor();
  */
-CINDEX_LINKAGE CXCursor clang_getOverloadedDecl(CXCursor cursor, 
+CINDEX_LINKAGE CXCursor clang_getOverloadedDecl(CXCursor cursor,
                                                 unsigned index);
-  
+
 /**
  * @}
  */
-  
+
 /**
  * \defgroup CINDEX_ATTRIBUTES Information for attributes
  *
@@ -3897,7 +4027,7 @@
  */
 
 /**
- * \brief For cursors representing an iboutletcollection attribute,
+ * For cursors representing an iboutletcollection attribute,
  *  this function returns the collection element type.
  *
  */
@@ -3917,7 +4047,7 @@
  */
 
 /**
- * \brief Describes how the traversal of the children of a particular
+ * Describes how the traversal of the children of a particular
  * cursor should proceed after visiting a particular child cursor.
  *
  * A value of this enumeration type should be returned by each
@@ -3925,23 +4055,23 @@
  */
 enum CXChildVisitResult {
   /**
-   * \brief Terminates the cursor traversal.
+   * Terminates the cursor traversal.
    */
   CXChildVisit_Break,
   /**
-   * \brief Continues the cursor traversal with the next sibling of
+   * Continues the cursor traversal with the next sibling of
    * the cursor just visited, without visiting its children.
    */
   CXChildVisit_Continue,
   /**
-   * \brief Recursively traverse the children of this cursor, using
+   * Recursively traverse the children of this cursor, using
    * the same visitor and client data.
    */
   CXChildVisit_Recurse
 };
 
 /**
- * \brief Visitor invoked for each cursor found by a traversal.
+ * Visitor invoked for each cursor found by a traversal.
  *
  * This visitor function will be invoked for each cursor found by
  * clang_visitCursorChildren(). Its first argument is the cursor being
@@ -3957,7 +4087,7 @@
                                                    CXClientData client_data);
 
 /**
- * \brief Visit the children of a particular cursor.
+ * Visit the children of a particular cursor.
  *
  * This function visits all the direct children of the given cursor,
  * invoking the given \p visitor function with the cursors of each
@@ -3984,7 +4114,7 @@
 #ifdef __has_feature
 #  if __has_feature(blocks)
 /**
- * \brief Visitor invoked for each cursor found by a traversal.
+ * Visitor invoked for each cursor found by a traversal.
  *
  * This visitor block will be invoked for each cursor found by
  * clang_visitChildrenWithBlock(). Its first argument is the cursor being
@@ -3993,7 +4123,7 @@
  * The visitor should return one of the \c CXChildVisitResult values
  * to direct clang_visitChildrenWithBlock().
  */
-typedef enum CXChildVisitResult 
+typedef enum CXChildVisitResult
      (^CXCursorVisitorBlock)(CXCursor cursor, CXCursor parent);
 
 /**
@@ -4021,7 +4151,7 @@
  */
 
 /**
- * \brief Retrieve a Unified Symbol Resolution (USR) for the entity referenced
+ * Retrieve a Unified Symbol Resolution (USR) for the entity referenced
  * by the given cursor.
  *
  * A Unified Symbol Resolution (USR) is a string that identifies a particular
@@ -4032,32 +4162,32 @@
 CINDEX_LINKAGE CXString clang_getCursorUSR(CXCursor);
 
 /**
- * \brief Construct a USR for a specified Objective-C class.
+ * Construct a USR for a specified Objective-C class.
  */
 CINDEX_LINKAGE CXString clang_constructUSR_ObjCClass(const char *class_name);
 
 /**
- * \brief Construct a USR for a specified Objective-C category.
+ * Construct a USR for a specified Objective-C category.
  */
 CINDEX_LINKAGE CXString
   clang_constructUSR_ObjCCategory(const char *class_name,
                                  const char *category_name);
 
 /**
- * \brief Construct a USR for a specified Objective-C protocol.
+ * Construct a USR for a specified Objective-C protocol.
  */
 CINDEX_LINKAGE CXString
   clang_constructUSR_ObjCProtocol(const char *protocol_name);
 
 /**
- * \brief Construct a USR for a specified Objective-C instance variable and
+ * Construct a USR for a specified Objective-C instance variable and
  *   the USR for its containing class.
  */
 CINDEX_LINKAGE CXString clang_constructUSR_ObjCIvar(const char *name,
                                                     CXString classUSR);
 
 /**
- * \brief Construct a USR for a specified Objective-C method and
+ * Construct a USR for a specified Objective-C method and
  *   the USR for its containing class.
  */
 CINDEX_LINKAGE CXString clang_constructUSR_ObjCMethod(const char *name,
@@ -4065,26 +4195,26 @@
                                                       CXString classUSR);
 
 /**
- * \brief Construct a USR for a specified Objective-C property and the USR
+ * Construct a USR for a specified Objective-C property and the USR
  *  for its containing class.
  */
 CINDEX_LINKAGE CXString clang_constructUSR_ObjCProperty(const char *property,
                                                         CXString classUSR);
 
 /**
- * \brief Retrieve a name for the entity referenced by this cursor.
+ * Retrieve a name for the entity referenced by this cursor.
  */
 CINDEX_LINKAGE CXString clang_getCursorSpelling(CXCursor);
 
 /**
- * \brief Retrieve a range for a piece that forms the cursors spelling name.
+ * Retrieve a range for a piece that forms the cursors spelling name.
  * Most of the times there is only one range for the complete spelling but for
  * Objective-C methods and Objective-C message expressions, there are multiple
  * pieces for each selector identifier.
- * 
+ *
  * \param pieceIndex the index of the spelling name piece. If this is greater
  * than the actual number of pieces, it will return a NULL (invalid) range.
- *  
+ *
  * \param options Reserved.
  */
 CINDEX_LINKAGE CXSourceRange clang_Cursor_getSpellingNameRange(CXCursor,
@@ -4092,13 +4222,13 @@
                                                           unsigned options);
 
 /**
- * \brief Opaque pointer representing a policy that controls pretty printing
+ * Opaque pointer representing a policy that controls pretty printing
  * for \c clang_getCursorPrettyPrinted.
  */
 typedef void *CXPrintingPolicy;
 
 /**
- * \brief Properties for the printing policy.
+ * Properties for the printing policy.
  *
  * See \c clang::PrintingPolicy for more information.
  */
@@ -4134,21 +4264,21 @@
 };
 
 /**
- * \brief Get a property value for the given printing policy.
+ * Get a property value for the given printing policy.
  */
 CINDEX_LINKAGE unsigned
 clang_PrintingPolicy_getProperty(CXPrintingPolicy Policy,
                                  enum CXPrintingPolicyProperty Property);
 
 /**
- * \brief Set a property value for the given printing policy.
+ * Set a property value for the given printing policy.
  */
 CINDEX_LINKAGE void clang_PrintingPolicy_setProperty(CXPrintingPolicy Policy,
                                                      enum CXPrintingPolicyProperty Property,
                                                      unsigned Value);
 
 /**
- * \brief Retrieve the default policy for the cursor.
+ * Retrieve the default policy for the cursor.
  *
  * The policy should be released after use with \c
  * clang_PrintingPolicy_dispose.
@@ -4156,12 +4286,12 @@
 CINDEX_LINKAGE CXPrintingPolicy clang_getCursorPrintingPolicy(CXCursor);
 
 /**
- * \brief Release a printing policy.
+ * Release a printing policy.
  */
 CINDEX_LINKAGE void clang_PrintingPolicy_dispose(CXPrintingPolicy Policy);
 
 /**
- * \brief Pretty print declarations.
+ * Pretty print declarations.
  *
  * \param Cursor The cursor representing a declaration.
  *
@@ -4175,15 +4305,15 @@
                                                      CXPrintingPolicy Policy);
 
 /**
- * \brief Retrieve the display name for the entity referenced by this cursor.
+ * Retrieve the display name for the entity referenced by this cursor.
  *
  * The display name contains extra information that helps identify the cursor,
- * such as the parameters of a function or template or the arguments of a 
+ * such as the parameters of a function or template or the arguments of a
  * class template specialization.
  */
 CINDEX_LINKAGE CXString clang_getCursorDisplayName(CXCursor);
-  
-/** \brief For a cursor that is a reference, retrieve a cursor representing the
+
+/** For a cursor that is a reference, retrieve a cursor representing the
  * entity that it references.
  *
  * Reference cursors refer to other entities in the AST. For example, an
@@ -4196,7 +4326,7 @@
 CINDEX_LINKAGE CXCursor clang_getCursorReferenced(CXCursor);
 
 /**
- *  \brief For a cursor that is either a reference to or a declaration
+ *  For a cursor that is either a reference to or a declaration
  *  of some entity, retrieve a cursor that describes the definition of
  *  that entity.
  *
@@ -4226,13 +4356,13 @@
 CINDEX_LINKAGE CXCursor clang_getCursorDefinition(CXCursor);
 
 /**
- * \brief Determine whether the declaration pointed to by this cursor
+ * Determine whether the declaration pointed to by this cursor
  * is also a definition of that entity.
  */
 CINDEX_LINKAGE unsigned clang_isCursorDefinition(CXCursor);
 
 /**
- * \brief Retrieve the canonical cursor corresponding to the given cursor.
+ * Retrieve the canonical cursor corresponding to the given cursor.
  *
  * In the C family of languages, many kinds of entities can be declared several
  * times within a single translation unit. For example, a structure type can
@@ -4246,10 +4376,10 @@
  * };
  * \endcode
  *
- * The declarations and the definition of \c X are represented by three 
- * different cursors, all of which are declarations of the same underlying 
+ * The declarations and the definition of \c X are represented by three
+ * different cursors, all of which are declarations of the same underlying
  * entity. One of these cursor is considered the "canonical" cursor, which
- * is effectively the representative for the underlying entity. One can 
+ * is effectively the representative for the underlying entity. One can
  * determine if two cursors are declarations of the same underlying entity by
  * comparing their canonical cursors.
  *
@@ -4258,7 +4388,7 @@
 CINDEX_LINKAGE CXCursor clang_getCanonicalCursor(CXCursor);
 
 /**
- * \brief If the cursor points to a selector identifier in an Objective-C
+ * If the cursor points to a selector identifier in an Objective-C
  * method or message expression, this returns the selector index.
  *
  * After getting a cursor with #clang_getCursor, this can be called to
@@ -4271,26 +4401,26 @@
 CINDEX_LINKAGE int clang_Cursor_getObjCSelectorIndex(CXCursor);
 
 /**
- * \brief Given a cursor pointing to a C++ method call or an Objective-C
+ * Given a cursor pointing to a C++ method call or an Objective-C
  * message, returns non-zero if the method/message is "dynamic", meaning:
- * 
+ *
  * For a C++ method: the call is virtual.
  * For an Objective-C message: the receiver is an object instance, not 'super'
  * or a specific class.
- * 
+ *
  * If the method/message is "static" or the cursor does not point to a
  * method/message, it will return zero.
  */
 CINDEX_LINKAGE int clang_Cursor_isDynamicCall(CXCursor C);
 
 /**
- * \brief Given a cursor pointing to an Objective-C message or property
+ * Given a cursor pointing to an Objective-C message or property
  * reference, or C++ method call, returns the CXType of the receiver.
  */
 CINDEX_LINKAGE CXType clang_Cursor_getReceiverType(CXCursor C);
 
 /**
- * \brief Property attributes for a \c CXCursor_ObjCPropertyDecl.
+ * Property attributes for a \c CXCursor_ObjCPropertyDecl.
  */
 typedef enum {
   CXObjCPropertyAttr_noattr    = 0x00,
@@ -4310,7 +4440,7 @@
 } CXObjCPropertyAttrKind;
 
 /**
- * \brief Given a cursor that represents a property declaration, return the
+ * Given a cursor that represents a property declaration, return the
  * associated property attributes. The bits are formed from
  * \c CXObjCPropertyAttrKind.
  *
@@ -4320,7 +4450,19 @@
                                                              unsigned reserved);
 
 /**
- * \brief 'Qualifiers' written next to the return and parameter types in
+ * Given a cursor that represents a property declaration, return the
+ * name of the method that implements the getter.
+ */
+CINDEX_LINKAGE CXString clang_Cursor_getObjCPropertyGetterName(CXCursor C);
+
+/**
+ * Given a cursor that represents a property declaration, return the
+ * name of the method that implements the setter, if any.
+ */
+CINDEX_LINKAGE CXString clang_Cursor_getObjCPropertySetterName(CXCursor C);
+
+/**
+ * 'Qualifiers' written next to the return and parameter types in
  * Objective-C method declarations.
  */
 typedef enum {
@@ -4334,7 +4476,7 @@
 } CXObjCDeclQualifierKind;
 
 /**
- * \brief Given a cursor that represents an Objective-C method or parameter
+ * Given a cursor that represents an Objective-C method or parameter
  * declaration, return the associated Objective-C qualifiers for the return
  * type or the parameter respectively. The bits are formed from
  * CXObjCDeclQualifierKind.
@@ -4342,19 +4484,19 @@
 CINDEX_LINKAGE unsigned clang_Cursor_getObjCDeclQualifiers(CXCursor C);
 
 /**
- * \brief Given a cursor that represents an Objective-C method or property
+ * Given a cursor that represents an Objective-C method or property
  * declaration, return non-zero if the declaration was affected by "\@optional".
  * Returns zero if the cursor is not such a declaration or it is "\@required".
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isObjCOptional(CXCursor C);
 
 /**
- * \brief Returns non-zero if the given cursor is a variadic function or method.
+ * Returns non-zero if the given cursor is a variadic function or method.
  */
 CINDEX_LINKAGE unsigned clang_Cursor_isVariadic(CXCursor C);
 
 /**
- * \brief Returns non-zero if the given cursor points to a symbol marked with
+ * Returns non-zero if the given cursor points to a symbol marked with
  * external_source_symbol attribute.
  *
  * \param language If non-NULL, and the attribute is present, will be set to
@@ -4371,21 +4513,21 @@
                                        unsigned *isGenerated);
 
 /**
- * \brief Given a cursor that represents a declaration, return the associated
+ * Given a cursor that represents a declaration, return the associated
  * comment's source range.  The range may include multiple consecutive comments
  * with whitespace in between.
  */
 CINDEX_LINKAGE CXSourceRange clang_Cursor_getCommentRange(CXCursor C);
 
 /**
- * \brief Given a cursor that represents a declaration, return the associated
+ * Given a cursor that represents a declaration, return the associated
  * comment text, including comment markers.
  */
 CINDEX_LINKAGE CXString clang_Cursor_getRawCommentText(CXCursor C);
 
 /**
- * \brief Given a cursor that represents a documentable entity (e.g.,
- * declaration), return the associated \\brief paragraph; otherwise return the
+ * Given a cursor that represents a documentable entity (e.g.,
+ * declaration), return the associated \paragraph; otherwise return the
  * first paragraph.
  */
 CINDEX_LINKAGE CXString clang_Cursor_getBriefCommentText(CXCursor C);
@@ -4400,18 +4542,18 @@
  */
 
 /**
- * \brief Retrieve the CXString representing the mangled name of the cursor.
+ * Retrieve the CXString representing the mangled name of the cursor.
  */
 CINDEX_LINKAGE CXString clang_Cursor_getMangling(CXCursor);
 
 /**
- * \brief Retrieve the CXStrings representing the mangled symbols of the C++
+ * Retrieve the CXStrings representing the mangled symbols of the C++
  * constructor or destructor at the cursor.
  */
 CINDEX_LINKAGE CXStringSet *clang_Cursor_getCXXManglings(CXCursor);
 
 /**
- * \brief Retrieve the CXStrings representing the mangled symbols of the ObjC
+ * Retrieve the CXStrings representing the mangled symbols of the ObjC
  * class interface or implementation at the cursor.
  */
 CINDEX_LINKAGE CXStringSet *clang_Cursor_getObjCManglings(CXCursor);
@@ -4431,12 +4573,12 @@
 typedef void *CXModule;
 
 /**
- * \brief Given a CXCursor_ModuleImportDecl cursor, return the associated module.
+ * Given a CXCursor_ModuleImportDecl cursor, return the associated module.
  */
 CINDEX_LINKAGE CXModule clang_Cursor_getModule(CXCursor C);
 
 /**
- * \brief Given a CXFile header file, return the module that contains it, if one
+ * Given a CXFile header file, return the module that contains it, if one
  * exists.
  */
 CINDEX_LINKAGE CXModule clang_getModuleForFile(CXTranslationUnit, CXFile);
@@ -4511,73 +4653,73 @@
  */
 
 /**
- * \brief Determine if a C++ constructor is a converting constructor.
+ * Determine if a C++ constructor is a converting constructor.
  */
 CINDEX_LINKAGE unsigned clang_CXXConstructor_isConvertingConstructor(CXCursor C);
 
 /**
- * \brief Determine if a C++ constructor is a copy constructor.
+ * Determine if a C++ constructor is a copy constructor.
  */
 CINDEX_LINKAGE unsigned clang_CXXConstructor_isCopyConstructor(CXCursor C);
 
 /**
- * \brief Determine if a C++ constructor is the default constructor.
+ * Determine if a C++ constructor is the default constructor.
  */
 CINDEX_LINKAGE unsigned clang_CXXConstructor_isDefaultConstructor(CXCursor C);
 
 /**
- * \brief Determine if a C++ constructor is a move constructor.
+ * Determine if a C++ constructor is a move constructor.
  */
 CINDEX_LINKAGE unsigned clang_CXXConstructor_isMoveConstructor(CXCursor C);
 
 /**
- * \brief Determine if a C++ field is declared 'mutable'.
+ * Determine if a C++ field is declared 'mutable'.
  */
 CINDEX_LINKAGE unsigned clang_CXXField_isMutable(CXCursor C);
 
 /**
- * \brief Determine if a C++ method is declared '= default'.
+ * Determine if a C++ method is declared '= default'.
  */
 CINDEX_LINKAGE unsigned clang_CXXMethod_isDefaulted(CXCursor C);
 
 /**
- * \brief Determine if a C++ member function or member function template is
+ * Determine if a C++ member function or member function template is
  * pure virtual.
  */
 CINDEX_LINKAGE unsigned clang_CXXMethod_isPureVirtual(CXCursor C);
 
 /**
- * \brief Determine if a C++ member function or member function template is 
+ * Determine if a C++ member function or member function template is
  * declared 'static'.
  */
 CINDEX_LINKAGE unsigned clang_CXXMethod_isStatic(CXCursor C);
 
 /**
- * \brief Determine if a C++ member function or member function template is
+ * Determine if a C++ member function or member function template is
  * explicitly declared 'virtual' or if it overrides a virtual method from
  * one of the base classes.
  */
 CINDEX_LINKAGE unsigned clang_CXXMethod_isVirtual(CXCursor C);
 
 /**
- * \brief Determine if a C++ record is abstract, i.e. whether a class or struct
+ * Determine if a C++ record is abstract, i.e. whether a class or struct
  * has a pure virtual member function.
  */
 CINDEX_LINKAGE unsigned clang_CXXRecord_isAbstract(CXCursor C);
 
 /**
- * \brief Determine if an enum declaration refers to a scoped enum.
+ * Determine if an enum declaration refers to a scoped enum.
  */
 CINDEX_LINKAGE unsigned clang_EnumDecl_isScoped(CXCursor C);
 
 /**
- * \brief Determine if a C++ member function or member function template is
+ * Determine if a C++ member function or member function template is
  * declared 'const'.
  */
 CINDEX_LINKAGE unsigned clang_CXXMethod_isConst(CXCursor C);
 
 /**
- * \brief Given a cursor that represents a template, determine
+ * Given a cursor that represents a template, determine
  * the cursor kind of the specializations would be generated by instantiating
  * the template.
  *
@@ -4594,16 +4736,16 @@
  * \c CXCursor_NoDeclFound.
  */
 CINDEX_LINKAGE enum CXCursorKind clang_getTemplateCursorKind(CXCursor C);
-  
+
 /**
- * \brief Given a cursor that may represent a specialization or instantiation
+ * Given a cursor that may represent a specialization or instantiation
  * of a template, retrieve the cursor that represents the template that it
  * specializes or from which it was instantiated.
  *
- * This routine determines the template involved both for explicit 
+ * This routine determines the template involved both for explicit
  * specializations of templates and for implicit instantiations of the template,
  * both of which are referred to as "specializations". For a class template
- * specialization (e.g., \c std::vector<bool>), this routine will return 
+ * specialization (e.g., \c std::vector<bool>), this routine will return
  * either the primary template (\c std::vector) or, if the specialization was
  * instantiated from a class template partial specialization, the class template
  * partial specialization. For a class template partial specialization and a
@@ -4611,7 +4753,7 @@
  * this routine will return the specialized template.
  *
  * For members of a class template (e.g., member functions, member classes, or
- * static data members), returns the specialized or instantiated member. 
+ * static data members), returns the specialized or instantiated member.
  * Although not strictly "templates" in the C++ language, members of class
  * templates have the same notions of specializations and instantiations that
  * templates do, so this routine treats them similarly.
@@ -4619,23 +4761,23 @@
  * \param C A cursor that may be a specialization of a template or a member
  * of a template.
  *
- * \returns If the given cursor is a specialization or instantiation of a 
+ * \returns If the given cursor is a specialization or instantiation of a
  * template or a member thereof, the template or member that it specializes or
  * from which it was instantiated. Otherwise, returns a NULL cursor.
  */
 CINDEX_LINKAGE CXCursor clang_getSpecializedCursorTemplate(CXCursor C);
 
 /**
- * \brief Given a cursor that references something else, return the source range
+ * Given a cursor that references something else, return the source range
  * covering that reference.
  *
  * \param C A cursor pointing to a member reference, a declaration reference, or
  * an operator call.
- * \param NameFlags A bitset with three independent flags: 
+ * \param NameFlags A bitset with three independent flags:
  * CXNameRange_WantQualifier, CXNameRange_WantTemplateArgs, and
  * CXNameRange_WantSinglePiece.
- * \param PieceIndex For contiguous names or when passing the flag 
- * CXNameRange_WantSinglePiece, only one piece with index 0 is 
+ * \param PieceIndex For contiguous names or when passing the flag
+ * CXNameRange_WantSinglePiece, only one piece with index 0 is
  * available. When the CXNameRange_WantSinglePiece flag is not passed for a
  * non-contiguous names, this index can be used to retrieve the individual
  * pieces of the name. See also CXNameRange_WantSinglePiece.
@@ -4644,24 +4786,24 @@
  * name, or if the PieceIndex is out-of-range, a null-cursor will be returned.
  */
 CINDEX_LINKAGE CXSourceRange clang_getCursorReferenceNameRange(CXCursor C,
-                                                unsigned NameFlags, 
+                                                unsigned NameFlags,
                                                 unsigned PieceIndex);
 
 enum CXNameRefFlags {
   /**
-   * \brief Include the nested-name-specifier, e.g. Foo:: in x.Foo::y, in the
+   * Include the nested-name-specifier, e.g. Foo:: in x.Foo::y, in the
    * range.
    */
   CXNameRange_WantQualifier = 0x1,
-  
+
   /**
-   * \brief Include the explicit template arguments, e.g. \<int> in x.f<int>,
+   * Include the explicit template arguments, e.g. \<int> in x.f<int>,
    * in the range.
    */
   CXNameRange_WantTemplateArgs = 0x2,
 
   /**
-   * \brief If the name is non-contiguous, return the full spanning range.
+   * If the name is non-contiguous, return the full spanning range.
    *
    * Non-contiguous names occur in Objective-C when a selector with two or more
    * parameters is used, or in C++ when using an operator:
@@ -4672,7 +4814,7 @@
    */
   CXNameRange_WantSinglePiece = 0x4
 };
-  
+
 /**
  * @}
  */
@@ -4688,37 +4830,37 @@
  */
 
 /**
- * \brief Describes a kind of token.
+ * Describes a kind of token.
  */
 typedef enum CXTokenKind {
   /**
-   * \brief A token that contains some kind of punctuation.
+   * A token that contains some kind of punctuation.
    */
   CXToken_Punctuation,
 
   /**
-   * \brief A language keyword.
+   * A language keyword.
    */
   CXToken_Keyword,
 
   /**
-   * \brief An identifier (that is not a keyword).
+   * An identifier (that is not a keyword).
    */
   CXToken_Identifier,
 
   /**
-   * \brief A numeric, string, or character literal.
+   * A numeric, string, or character literal.
    */
   CXToken_Literal,
 
   /**
-   * \brief A comment.
+   * A comment.
    */
   CXToken_Comment
 } CXTokenKind;
 
 /**
- * \brief Describes a single preprocessing token.
+ * Describes a single preprocessing token.
  */
 typedef struct {
   unsigned int_data[4];
@@ -4726,12 +4868,26 @@
 } CXToken;
 
 /**
- * \brief Determine the kind of the given token.
+ * Get the raw lexical token starting with the given location.
+ *
+ * \param TU the translation unit whose text is being tokenized.
+ *
+ * \param Location the source location with which the token starts.
+ *
+ * \returns The token starting with the given location or NULL if no such token
+ * exist. The returned pointer must be freed with clang_disposeTokens before the
+ * translation unit is destroyed.
+ */
+CINDEX_LINKAGE CXToken *clang_getToken(CXTranslationUnit TU,
+                                       CXSourceLocation Location);
+
+/**
+ * Determine the kind of the given token.
  */
 CINDEX_LINKAGE CXTokenKind clang_getTokenKind(CXToken);
 
 /**
- * \brief Determine the spelling of the given token.
+ * Determine the spelling of the given token.
  *
  * The spelling of a token is the textual representation of that token, e.g.,
  * the text of an identifier or keyword.
@@ -4739,18 +4895,18 @@
 CINDEX_LINKAGE CXString clang_getTokenSpelling(CXTranslationUnit, CXToken);
 
 /**
- * \brief Retrieve the source location of the given token.
+ * Retrieve the source location of the given token.
  */
 CINDEX_LINKAGE CXSourceLocation clang_getTokenLocation(CXTranslationUnit,
                                                        CXToken);
 
 /**
- * \brief Retrieve a source range that covers the given token.
+ * Retrieve a source range that covers the given token.
  */
 CINDEX_LINKAGE CXSourceRange clang_getTokenExtent(CXTranslationUnit, CXToken);
 
 /**
- * \brief Tokenize the source code described by the given range into raw
+ * Tokenize the source code described by the given range into raw
  * lexical tokens.
  *
  * \param TU the translation unit whose text is being tokenized.
@@ -4770,7 +4926,7 @@
                                    CXToken **Tokens, unsigned *NumTokens);
 
 /**
- * \brief Annotate the given set of tokens by providing cursors for each token
+ * Annotate the given set of tokens by providing cursors for each token
  * that can be mapped to a specific entity within the abstract syntax tree.
  *
  * This token-annotation routine is equivalent to invoking
@@ -4804,7 +4960,7 @@
                                          CXCursor *Cursors);
 
 /**
- * \brief Free the given set of tokens.
+ * Free the given set of tokens.
  */
 CINDEX_LINKAGE void clang_disposeTokens(CXTranslationUnit TU,
                                         CXToken *Tokens, unsigned NumTokens);
@@ -4852,7 +5008,7 @@
  */
 
 /**
- * \brief A semantic string that describes a code-completion result.
+ * A semantic string that describes a code-completion result.
  *
  * A semantic string that describes the formatting of a code-completion
  * result as a single "template" of text that should be inserted into the
@@ -4867,11 +5023,11 @@
 typedef void *CXCompletionString;
 
 /**
- * \brief A single result of code completion.
+ * A single result of code completion.
  */
 typedef struct {
   /**
-   * \brief The kind of entity that this completion refers to.
+   * The kind of entity that this completion refers to.
    *
    * The cursor kind will be a macro, keyword, or a declaration (one of the
    * *Decl cursor kinds), describing the entity that the completion is
@@ -4883,14 +5039,14 @@
   enum CXCursorKind CursorKind;
 
   /**
-   * \brief The code-completion string that describes how to insert this
+   * The code-completion string that describes how to insert this
    * code-completion result into the editing buffer.
    */
   CXCompletionString CompletionString;
 } CXCompletionResult;
 
 /**
- * \brief Describes a single piece of text within a code-completion string.
+ * Describes a single piece of text within a code-completion string.
  *
  * Each "chunk" within a code-completion string (\c CXCompletionString) is
  * either a piece of text with a specific "kind" that describes how that text
@@ -4898,7 +5054,7 @@
  */
 enum CXCompletionChunkKind {
   /**
-   * \brief A code-completion string that describes "optional" text that
+   * A code-completion string that describes "optional" text that
    * could be a part of the template (but is not required).
    *
    * The Optional chunk is the only kind of chunk that has a code-completion
@@ -4932,7 +5088,7 @@
    */
   CXCompletionChunk_Optional,
   /**
-   * \brief Text that a user would be expected to type to get this
+   * Text that a user would be expected to type to get this
    * code-completion result.
    *
    * There will be exactly one "typed text" chunk in a semantic string, which
@@ -4943,7 +5099,7 @@
    */
   CXCompletionChunk_TypedText,
   /**
-   * \brief Text that should be inserted as part of a code-completion result.
+   * Text that should be inserted as part of a code-completion result.
    *
    * A "text" chunk represents text that is part of the template to be
    * inserted into user code should this particular code-completion result
@@ -4951,7 +5107,7 @@
    */
   CXCompletionChunk_Text,
   /**
-   * \brief Placeholder text that should be replaced by the user.
+   * Placeholder text that should be replaced by the user.
    *
    * A "placeholder" chunk marks a place where the user should insert text
    * into the code-completion template. For example, placeholders might mark
@@ -4962,7 +5118,7 @@
    */
   CXCompletionChunk_Placeholder,
   /**
-   * \brief Informative text that should be displayed but never inserted as
+   * Informative text that should be displayed but never inserted as
    * part of the template.
    *
    * An "informative" chunk contains annotations that can be displayed to
@@ -4972,7 +5128,7 @@
    */
   CXCompletionChunk_Informative,
   /**
-   * \brief Text that describes the current parameter when code-completion is
+   * Text that describes the current parameter when code-completion is
    * referring to function call, message send, or template specialization.
    *
    * A "current parameter" chunk occurs when code-completion is providing
@@ -4988,49 +5144,49 @@
    * for "int x", indicating that the current argument will initialize that
    * parameter. After typing further, to \c add(17, (where the code-completion
    * point is after the ","), the code-completion string will contain a
-   * "current paremeter" chunk to "int y".
+   * "current parameter" chunk to "int y".
    */
   CXCompletionChunk_CurrentParameter,
   /**
-   * \brief A left parenthesis ('('), used to initiate a function call or
+   * A left parenthesis ('('), used to initiate a function call or
    * signal the beginning of a function parameter list.
    */
   CXCompletionChunk_LeftParen,
   /**
-   * \brief A right parenthesis (')'), used to finish a function call or
+   * A right parenthesis (')'), used to finish a function call or
    * signal the end of a function parameter list.
    */
   CXCompletionChunk_RightParen,
   /**
-   * \brief A left bracket ('[').
+   * A left bracket ('[').
    */
   CXCompletionChunk_LeftBracket,
   /**
-   * \brief A right bracket (']').
+   * A right bracket (']').
    */
   CXCompletionChunk_RightBracket,
   /**
-   * \brief A left brace ('{').
+   * A left brace ('{').
    */
   CXCompletionChunk_LeftBrace,
   /**
-   * \brief A right brace ('}').
+   * A right brace ('}').
    */
   CXCompletionChunk_RightBrace,
   /**
-   * \brief A left angle bracket ('<').
+   * A left angle bracket ('<').
    */
   CXCompletionChunk_LeftAngle,
   /**
-   * \brief A right angle bracket ('>').
+   * A right angle bracket ('>').
    */
   CXCompletionChunk_RightAngle,
   /**
-   * \brief A comma separator (',').
+   * A comma separator (',').
    */
   CXCompletionChunk_Comma,
   /**
-   * \brief Text that specifies the result type of a given result.
+   * Text that specifies the result type of a given result.
    *
    * This special kind of informative chunk is not meant to be inserted into
    * the text buffer. Rather, it is meant to illustrate the type that an
@@ -5038,15 +5194,15 @@
    */
   CXCompletionChunk_ResultType,
   /**
-   * \brief A colon (':').
+   * A colon (':').
    */
   CXCompletionChunk_Colon,
   /**
-   * \brief A semicolon (';').
+   * A semicolon (';').
    */
   CXCompletionChunk_SemiColon,
   /**
-   * \brief An '=' sign.
+   * An '=' sign.
    */
   CXCompletionChunk_Equal,
   /**
@@ -5061,7 +5217,7 @@
 };
 
 /**
- * \brief Determine the kind of a particular chunk within a completion string.
+ * Determine the kind of a particular chunk within a completion string.
  *
  * \param completion_string the completion string to query.
  *
@@ -5074,7 +5230,7 @@
                              unsigned chunk_number);
 
 /**
- * \brief Retrieve the text associated with a particular chunk within a
+ * Retrieve the text associated with a particular chunk within a
  * completion string.
  *
  * \param completion_string the completion string to query.
@@ -5088,7 +5244,7 @@
                              unsigned chunk_number);
 
 /**
- * \brief Retrieve the completion string associated with a particular chunk
+ * Retrieve the completion string associated with a particular chunk
  * within a completion string.
  *
  * \param completion_string the completion string to query.
@@ -5103,15 +5259,15 @@
                                          unsigned chunk_number);
 
 /**
- * \brief Retrieve the number of chunks in the given code-completion string.
+ * Retrieve the number of chunks in the given code-completion string.
  */
 CINDEX_LINKAGE unsigned
 clang_getNumCompletionChunks(CXCompletionString completion_string);
 
 /**
- * \brief Determine the priority of this code completion.
+ * Determine the priority of this code completion.
  *
- * The priority of a code completion indicates how likely it is that this 
+ * The priority of a code completion indicates how likely it is that this
  * particular completion is the completion that the user will select. The
  * priority is selected by various internal heuristics.
  *
@@ -5122,20 +5278,20 @@
  */
 CINDEX_LINKAGE unsigned
 clang_getCompletionPriority(CXCompletionString completion_string);
-  
+
 /**
- * \brief Determine the availability of the entity that this code-completion
+ * Determine the availability of the entity that this code-completion
  * string refers to.
  *
  * \param completion_string The completion string to query.
  *
  * \returns The availability of the completion string.
  */
-CINDEX_LINKAGE enum CXAvailabilityKind 
+CINDEX_LINKAGE enum CXAvailabilityKind
 clang_getCompletionAvailability(CXCompletionString completion_string);
 
 /**
- * \brief Retrieve the number of annotations associated with the given
+ * Retrieve the number of annotations associated with the given
  * completion string.
  *
  * \param completion_string the completion string to query.
@@ -5147,7 +5303,7 @@
 clang_getCompletionNumAnnotations(CXCompletionString completion_string);
 
 /**
- * \brief Retrieve the annotation associated with the given completion string.
+ * Retrieve the annotation associated with the given completion string.
  *
  * \param completion_string the completion string to query.
  *
@@ -5162,9 +5318,9 @@
                               unsigned annotation_number);
 
 /**
- * \brief Retrieve the parent context of the given completion string.
+ * Retrieve the parent context of the given completion string.
  *
- * The parent context of a completion string is the semantic parent of 
+ * The parent context of a completion string is the semantic parent of
  * the declaration (if any) that the code completion represents. For example,
  * a code completion for an Objective-C method would have the method's class
  * or protocol as its context.
@@ -5182,14 +5338,14 @@
                           enum CXCursorKind *kind);
 
 /**
- * \brief Retrieve the brief documentation comment attached to the declaration
+ * Retrieve the brief documentation comment attached to the declaration
  * that corresponds to the given completion string.
  */
 CINDEX_LINKAGE CXString
 clang_getCompletionBriefComment(CXCompletionString completion_string);
 
 /**
- * \brief Retrieve a completion string for an arbitrary declaration or macro
+ * Retrieve a completion string for an arbitrary declaration or macro
  * definition cursor.
  *
  * \param cursor The cursor to query.
@@ -5199,9 +5355,9 @@
  */
 CINDEX_LINKAGE CXCompletionString
 clang_getCursorCompletionString(CXCursor cursor);
-  
+
 /**
- * \brief Contains the results of code-completion.
+ * Contains the results of code-completion.
  *
  * This data structure contains the results of code completion, as
  * produced by \c clang_codeCompleteAt(). Its contents must be freed by
@@ -5209,19 +5365,83 @@
  */
 typedef struct {
   /**
-   * \brief The code-completion results.
+   * The code-completion results.
    */
   CXCompletionResult *Results;
 
   /**
-   * \brief The number of code-completion results stored in the
+   * The number of code-completion results stored in the
    * \c Results array.
    */
   unsigned NumResults;
 } CXCodeCompleteResults;
 
 /**
- * \brief Flags that can be passed to \c clang_codeCompleteAt() to
+ * Retrieve the number of fix-its for the given completion index.
+ *
+ * Calling this makes sense only if CXCodeComplete_IncludeCompletionsWithFixIts
+ * option was set.
+ *
+ * \param results The structure keeping all completion results
+ *
+ * \param completion_index The index of the completion
+ *
+ * \return The number of fix-its which must be applied before the completion at
+ * completion_index can be applied
+ */
+CINDEX_LINKAGE unsigned
+clang_getCompletionNumFixIts(CXCodeCompleteResults *results,
+                             unsigned completion_index);
+
+/**
+ * Fix-its that *must* be applied before inserting the text for the
+ * corresponding completion.
+ *
+ * By default, clang_codeCompleteAt() only returns completions with empty
+ * fix-its. Extra completions with non-empty fix-its should be explicitly
+ * requested by setting CXCodeComplete_IncludeCompletionsWithFixIts.
+ *
+ * For the clients to be able to compute position of the cursor after applying
+ * fix-its, the following conditions are guaranteed to hold for
+ * replacement_range of the stored fix-its:
+ *  - Ranges in the fix-its are guaranteed to never contain the completion
+ *  point (or identifier under completion point, if any) inside them, except
+ *  at the start or at the end of the range.
+ *  - If a fix-it range starts or ends with completion point (or starts or
+ *  ends after the identifier under completion point), it will contain at
+ *  least one character. It allows to unambiguously recompute completion
+ *  point after applying the fix-it.
+ *
+ * The intuition is that provided fix-its change code around the identifier we
+ * complete, but are not allowed to touch the identifier itself or the
+ * completion point. One example of completions with corrections are the ones
+ * replacing '.' with '->' and vice versa:
+ *
+ * std::unique_ptr<std::vector<int>> vec_ptr;
+ * In 'vec_ptr.^', one of the completions is 'push_back', it requires
+ * replacing '.' with '->'.
+ * In 'vec_ptr->^', one of the completions is 'release', it requires
+ * replacing '->' with '.'.
+ *
+ * \param results The structure keeping all completion results
+ *
+ * \param completion_index The index of the completion
+ *
+ * \param fixit_index The index of the fix-it for the completion at
+ * completion_index
+ *
+ * \param replacement_range The fix-it range that must be replaced before the
+ * completion at completion_index can be applied
+ *
+ * \returns The fix-it string that must replace the code at replacement_range
+ * before the completion at completion_index can be applied
+ */
+CINDEX_LINKAGE CXString clang_getCompletionFixIt(
+    CXCodeCompleteResults *results, unsigned completion_index,
+    unsigned fixit_index, CXSourceRange *replacement_range);
+
+/**
+ * Flags that can be passed to \c clang_codeCompleteAt() to
  * modify its behavior.
  *
  * The enumerators in this enumeration can be bitwise-OR'd together to
@@ -5229,19 +5449,19 @@
  */
 enum CXCodeComplete_Flags {
   /**
-   * \brief Whether to include macros within the set of code
+   * Whether to include macros within the set of code
    * completions returned.
    */
   CXCodeComplete_IncludeMacros = 0x01,
 
   /**
-   * \brief Whether to include code patterns for language constructs
+   * Whether to include code patterns for language constructs
    * within the set of code completions, e.g., for loops.
    */
   CXCodeComplete_IncludeCodePatterns = 0x02,
 
   /**
-   * \brief Whether to include brief documentation within the set of code
+   * Whether to include brief documentation within the set of code
    * completions returned.
    */
   CXCodeComplete_IncludeBriefComments = 0x04,
@@ -5251,148 +5471,154 @@
    * defined in the preamble. There's no guarantee any particular entity is
    * omitted. This may be useful if the headers are indexed externally.
    */
-  CXCodeComplete_SkipPreamble = 0x08
+  CXCodeComplete_SkipPreamble = 0x08,
+
+  /**
+   * Whether to include completions with small
+   * fix-its, e.g. change '.' to '->' on member access, etc.
+   */
+  CXCodeComplete_IncludeCompletionsWithFixIts = 0x10
 };
 
 /**
- * \brief Bits that represent the context under which completion is occurring.
+ * Bits that represent the context under which completion is occurring.
  *
  * The enumerators in this enumeration may be bitwise-OR'd together if multiple
  * contexts are occurring simultaneously.
  */
 enum CXCompletionContext {
   /**
-   * \brief The context for completions is unexposed, as only Clang results
+   * The context for completions is unexposed, as only Clang results
    * should be included. (This is equivalent to having no context bits set.)
    */
   CXCompletionContext_Unexposed = 0,
-  
+
   /**
-   * \brief Completions for any possible type should be included in the results.
+   * Completions for any possible type should be included in the results.
    */
   CXCompletionContext_AnyType = 1 << 0,
-  
+
   /**
-   * \brief Completions for any possible value (variables, function calls, etc.)
+   * Completions for any possible value (variables, function calls, etc.)
    * should be included in the results.
    */
   CXCompletionContext_AnyValue = 1 << 1,
   /**
-   * \brief Completions for values that resolve to an Objective-C object should
+   * Completions for values that resolve to an Objective-C object should
    * be included in the results.
    */
   CXCompletionContext_ObjCObjectValue = 1 << 2,
   /**
-   * \brief Completions for values that resolve to an Objective-C selector
+   * Completions for values that resolve to an Objective-C selector
    * should be included in the results.
    */
   CXCompletionContext_ObjCSelectorValue = 1 << 3,
   /**
-   * \brief Completions for values that resolve to a C++ class type should be
+   * Completions for values that resolve to a C++ class type should be
    * included in the results.
    */
   CXCompletionContext_CXXClassTypeValue = 1 << 4,
-  
+
   /**
-   * \brief Completions for fields of the member being accessed using the dot
+   * Completions for fields of the member being accessed using the dot
    * operator should be included in the results.
    */
   CXCompletionContext_DotMemberAccess = 1 << 5,
   /**
-   * \brief Completions for fields of the member being accessed using the arrow
+   * Completions for fields of the member being accessed using the arrow
    * operator should be included in the results.
    */
   CXCompletionContext_ArrowMemberAccess = 1 << 6,
   /**
-   * \brief Completions for properties of the Objective-C object being accessed
+   * Completions for properties of the Objective-C object being accessed
    * using the dot operator should be included in the results.
    */
   CXCompletionContext_ObjCPropertyAccess = 1 << 7,
-  
+
   /**
-   * \brief Completions for enum tags should be included in the results.
+   * Completions for enum tags should be included in the results.
    */
   CXCompletionContext_EnumTag = 1 << 8,
   /**
-   * \brief Completions for union tags should be included in the results.
+   * Completions for union tags should be included in the results.
    */
   CXCompletionContext_UnionTag = 1 << 9,
   /**
-   * \brief Completions for struct tags should be included in the results.
+   * Completions for struct tags should be included in the results.
    */
   CXCompletionContext_StructTag = 1 << 10,
-  
+
   /**
-   * \brief Completions for C++ class names should be included in the results.
+   * Completions for C++ class names should be included in the results.
    */
   CXCompletionContext_ClassTag = 1 << 11,
   /**
-   * \brief Completions for C++ namespaces and namespace aliases should be
+   * Completions for C++ namespaces and namespace aliases should be
    * included in the results.
    */
   CXCompletionContext_Namespace = 1 << 12,
   /**
-   * \brief Completions for C++ nested name specifiers should be included in
+   * Completions for C++ nested name specifiers should be included in
    * the results.
    */
   CXCompletionContext_NestedNameSpecifier = 1 << 13,
-  
+
   /**
-   * \brief Completions for Objective-C interfaces (classes) should be included
+   * Completions for Objective-C interfaces (classes) should be included
    * in the results.
    */
   CXCompletionContext_ObjCInterface = 1 << 14,
   /**
-   * \brief Completions for Objective-C protocols should be included in
+   * Completions for Objective-C protocols should be included in
    * the results.
    */
   CXCompletionContext_ObjCProtocol = 1 << 15,
   /**
-   * \brief Completions for Objective-C categories should be included in
+   * Completions for Objective-C categories should be included in
    * the results.
    */
   CXCompletionContext_ObjCCategory = 1 << 16,
   /**
-   * \brief Completions for Objective-C instance messages should be included
+   * Completions for Objective-C instance messages should be included
    * in the results.
    */
   CXCompletionContext_ObjCInstanceMessage = 1 << 17,
   /**
-   * \brief Completions for Objective-C class messages should be included in
+   * Completions for Objective-C class messages should be included in
    * the results.
    */
   CXCompletionContext_ObjCClassMessage = 1 << 18,
   /**
-   * \brief Completions for Objective-C selector names should be included in
+   * Completions for Objective-C selector names should be included in
    * the results.
    */
   CXCompletionContext_ObjCSelectorName = 1 << 19,
-  
+
   /**
-   * \brief Completions for preprocessor macro names should be included in
+   * Completions for preprocessor macro names should be included in
    * the results.
    */
   CXCompletionContext_MacroName = 1 << 20,
-  
+
   /**
-   * \brief Natural language completions should be included in the results.
+   * Natural language completions should be included in the results.
    */
   CXCompletionContext_NaturalLanguage = 1 << 21,
-  
+
   /**
-   * \brief The current context is unknown, so set all contexts.
+   * The current context is unknown, so set all contexts.
    */
   CXCompletionContext_Unknown = ((1 << 22) - 1)
 };
-  
+
 /**
- * \brief Returns a default set of code-completion options that can be
- * passed to\c clang_codeCompleteAt(). 
+ * Returns a default set of code-completion options that can be
+ * passed to\c clang_codeCompleteAt().
  */
 CINDEX_LINKAGE unsigned clang_defaultCodeCompleteOptions(void);
 
 /**
- * \brief Perform code completion at a given location in a translation unit.
+ * Perform code completion at a given location in a translation unit.
  *
  * This function performs code completion at a particular file, line, and
  * column within source code, providing results that suggest potential
@@ -5409,7 +5635,7 @@
  * user types punctuation characters or whitespace, at which point the
  * code-completion location will coincide with the cursor. For example, if \c p
  * is a pointer, code-completion might be triggered after the "-" and then
- * after the ">" in \c p->. When the code-completion location is afer the ">",
+ * after the ">" in \c p->. When the code-completion location is after the ">",
  * the completion results will provide, e.g., the members of the struct that
  * "p" points to. The client is responsible for placing the cursor at the
  * beginning of the token currently being typed, then filtering the results
@@ -5450,7 +5676,7 @@
  *
  * \param options Extra options that control the behavior of code
  * completion, expressed as a bitwise OR of the enumerators of the
- * CXCodeComplete_Flags enumeration. The 
+ * CXCodeComplete_Flags enumeration. The
  * \c clang_defaultCodeCompleteOptions() function returns a default set
  * of code-completion options.
  *
@@ -5469,7 +5695,7 @@
                                             unsigned options);
 
 /**
- * \brief Sort the code-completion results in case-insensitive alphabetical 
+ * Sort the code-completion results in case-insensitive alphabetical
  * order.
  *
  * \param Results The set of results to sort.
@@ -5478,22 +5704,22 @@
 CINDEX_LINKAGE
 void clang_sortCodeCompletionResults(CXCompletionResult *Results,
                                      unsigned NumResults);
-  
+
 /**
- * \brief Free the given set of code-completion results.
+ * Free the given set of code-completion results.
  */
 CINDEX_LINKAGE
 void clang_disposeCodeCompleteResults(CXCodeCompleteResults *Results);
-  
+
 /**
- * \brief Determine the number of diagnostics produced prior to the
+ * Determine the number of diagnostics produced prior to the
  * location where code completion was performed.
  */
 CINDEX_LINKAGE
 unsigned clang_codeCompleteGetNumDiagnostics(CXCodeCompleteResults *Results);
 
 /**
- * \brief Retrieve a diagnostic associated with the given code completion.
+ * Retrieve a diagnostic associated with the given code completion.
  *
  * \param Results the code completion results to query.
  * \param Index the zero-based diagnostic number to retrieve.
@@ -5506,9 +5732,9 @@
                                              unsigned Index);
 
 /**
- * \brief Determines what completions are appropriate for the context
+ * Determines what completions are appropriate for the context
  * the given code completion.
- * 
+ *
  * \param Results the code completion results to query
  *
  * \returns the kinds of completions that are appropriate for use
@@ -5519,7 +5745,7 @@
                                                 CXCodeCompleteResults *Results);
 
 /**
- * \brief Returns the cursor kind for the container for the current code
+ * Returns the cursor kind for the container for the current code
  * completion context. The container is only guaranteed to be set for
  * contexts where a container exists (i.e. member accesses or Objective-C
  * message sends); if there is not a container, this function will return
@@ -5540,7 +5766,7 @@
                                                      unsigned *IsIncomplete);
 
 /**
- * \brief Returns the USR for the container for the current code completion
+ * Returns the USR for the container for the current code completion
  * context. If there is not a container for the current context, this
  * function will return the empty string.
  *
@@ -5552,7 +5778,7 @@
 CXString clang_codeCompleteGetContainerUSR(CXCodeCompleteResults *Results);
 
 /**
- * \brief Returns the currently-entered selector for an Objective-C message
+ * Returns the currently-entered selector for an Objective-C message
  * send, formatted like "initWithFoo:bar:". Only guaranteed to return a
  * non-empty string for CXCompletionContext_ObjCInstanceMessage and
  * CXCompletionContext_ObjCClassMessage.
@@ -5564,7 +5790,7 @@
  */
 CINDEX_LINKAGE
 CXString clang_codeCompleteGetObjCSelector(CXCodeCompleteResults *Results);
-  
+
 /**
  * @}
  */
@@ -5576,21 +5802,21 @@
  */
 
 /**
- * \brief Return a version string, suitable for showing to a user, but not
+ * Return a version string, suitable for showing to a user, but not
  *        intended to be parsed (the format is not guaranteed to be stable).
  */
 CINDEX_LINKAGE CXString clang_getClangVersion(void);
 
 /**
- * \brief Enable/disable crash recovery.
+ * Enable/disable crash recovery.
  *
  * \param isEnabled Flag to indicate if crash recovery is enabled.  A non-zero
  *        value enables crash recovery, while 0 disables it.
  */
 CINDEX_LINKAGE void clang_toggleCrashRecovery(unsigned isEnabled);
-  
+
  /**
-  * \brief Visitor invoked for each file in a translation unit
+  * Visitor invoked for each file in a translation unit
   *        (used with clang_getInclusions()).
   *
   * This visitor function will be invoked by clang_getInclusions() for each
@@ -5606,7 +5832,7 @@
                                    CXClientData client_data);
 
 /**
- * \brief Visit the set of preprocessor inclusions in a translation unit.
+ * Visit the set of preprocessor inclusions in a translation unit.
  *   The visitor function is called with the provided data for every included
  *   file.  This does not include headers included by the PCH file (unless one
  *   is inspecting the inclusions in the PCH file itself).
@@ -5628,55 +5854,55 @@
 } CXEvalResultKind ;
 
 /**
- * \brief Evaluation result of a cursor
+ * Evaluation result of a cursor
  */
 typedef void * CXEvalResult;
 
 /**
- * \brief If cursor is a statement declaration tries to evaluate the 
+ * If cursor is a statement declaration tries to evaluate the
  * statement and if its variable, tries to evaluate its initializer,
  * into its corresponding type.
  */
 CINDEX_LINKAGE CXEvalResult clang_Cursor_Evaluate(CXCursor C);
 
 /**
- * \brief Returns the kind of the evaluated result.
+ * Returns the kind of the evaluated result.
  */
 CINDEX_LINKAGE CXEvalResultKind clang_EvalResult_getKind(CXEvalResult E);
 
 /**
- * \brief Returns the evaluation result as integer if the
+ * Returns the evaluation result as integer if the
  * kind is Int.
  */
 CINDEX_LINKAGE int clang_EvalResult_getAsInt(CXEvalResult E);
 
 /**
- * \brief Returns the evaluation result as a long long integer if the
+ * Returns the evaluation result as a long long integer if the
  * kind is Int. This prevents overflows that may happen if the result is
  * returned with clang_EvalResult_getAsInt.
  */
 CINDEX_LINKAGE long long clang_EvalResult_getAsLongLong(CXEvalResult E);
 
 /**
- * \brief Returns a non-zero value if the kind is Int and the evaluation
+ * Returns a non-zero value if the kind is Int and the evaluation
  * result resulted in an unsigned integer.
  */
 CINDEX_LINKAGE unsigned clang_EvalResult_isUnsignedInt(CXEvalResult E);
 
 /**
- * \brief Returns the evaluation result as an unsigned integer if
+ * Returns the evaluation result as an unsigned integer if
  * the kind is Int and clang_EvalResult_isUnsignedInt is non-zero.
  */
 CINDEX_LINKAGE unsigned long long clang_EvalResult_getAsUnsigned(CXEvalResult E);
 
 /**
- * \brief Returns the evaluation result as double if the
+ * Returns the evaluation result as double if the
  * kind is double.
  */
 CINDEX_LINKAGE double clang_EvalResult_getAsDouble(CXEvalResult E);
 
 /**
- * \brief Returns the evaluation result as a constant string if the
+ * Returns the evaluation result as a constant string if the
  * kind is other than Int or float. User must not free this pointer,
  * instead call clang_EvalResult_dispose on the CXEvalResult returned
  * by clang_Cursor_Evaluate.
@@ -5684,7 +5910,7 @@
 CINDEX_LINKAGE const char* clang_EvalResult_getAsStr(CXEvalResult E);
 
 /**
- * \brief Disposes the created Eval memory.
+ * Disposes the created Eval memory.
  */
 CINDEX_LINKAGE void clang_EvalResult_dispose(CXEvalResult E);
 /**
@@ -5697,12 +5923,12 @@
  */
 
 /**
- * \brief A remapping of original source files and their translated files.
+ * A remapping of original source files and their translated files.
  */
 typedef void *CXRemapping;
 
 /**
- * \brief Retrieve a remapping.
+ * Retrieve a remapping.
  *
  * \param path the path that contains metadata about remappings.
  *
@@ -5712,7 +5938,7 @@
 CINDEX_LINKAGE CXRemapping clang_getRemappings(const char *path);
 
 /**
- * \brief Retrieve a remapping.
+ * Retrieve a remapping.
  *
  * \param filePaths pointer to an array of file paths containing remapping info.
  *
@@ -5726,13 +5952,13 @@
                                             unsigned numFiles);
 
 /**
- * \brief Determine the number of remappings.
+ * Determine the number of remappings.
  */
 CINDEX_LINKAGE unsigned clang_remap_getNumFiles(CXRemapping);
 
 /**
- * \brief Get the original and the associated filename from the remapping.
- * 
+ * Get the original and the associated filename from the remapping.
+ *
  * \param original If non-NULL, will be set to the original filename.
  *
  * \param transformed If non-NULL, will be set to the filename that the original
@@ -5742,7 +5968,7 @@
                                      CXString *original, CXString *transformed);
 
 /**
- * \brief Dispose the remapping.
+ * Dispose the remapping.
  */
 CINDEX_LINKAGE void clang_remap_dispose(CXRemapping);
 
@@ -5767,15 +5993,15 @@
 
 typedef enum {
   /**
-   * \brief Function returned successfully.
+   * Function returned successfully.
    */
   CXResult_Success = 0,
   /**
-   * \brief One of the parameters was invalid for the function.
+   * One of the parameters was invalid for the function.
    */
   CXResult_Invalid = 1,
   /**
-   * \brief The function was terminated by a callback (e.g. it returned
+   * The function was terminated by a callback (e.g. it returned
    * CXVisit_Break)
    */
   CXResult_VisitBreak = 2
@@ -5783,8 +6009,8 @@
 } CXResult;
 
 /**
- * \brief Find references of a declaration in a specific file.
- * 
+ * Find references of a declaration in a specific file.
+ *
  * \param cursor pointing to a declaration or a reference of one.
  *
  * \param file to search for references.
@@ -5800,7 +6026,7 @@
                                                CXCursorAndRangeVisitor visitor);
 
 /**
- * \brief Find #import/#include directives in a specific file.
+ * Find #import/#include directives in a specific file.
  *
  * \param TU translation unit containing the file to query.
  *
@@ -5833,29 +6059,29 @@
 #endif
 
 /**
- * \brief The client's data object that is associated with a CXFile.
+ * The client's data object that is associated with a CXFile.
  */
 typedef void *CXIdxClientFile;
 
 /**
- * \brief The client's data object that is associated with a semantic entity.
+ * The client's data object that is associated with a semantic entity.
  */
 typedef void *CXIdxClientEntity;
 
 /**
- * \brief The client's data object that is associated with a semantic container
+ * The client's data object that is associated with a semantic container
  * of entities.
  */
 typedef void *CXIdxClientContainer;
 
 /**
- * \brief The client's data object that is associated with an AST file (PCH
+ * The client's data object that is associated with an AST file (PCH
  * or module).
  */
 typedef void *CXIdxClientASTFile;
 
 /**
- * \brief Source location passed to index callbacks.
+ * Source location passed to index callbacks.
  */
 typedef struct {
   void *ptr_data[2];
@@ -5863,48 +6089,48 @@
 } CXIdxLoc;
 
 /**
- * \brief Data for ppIncludedFile callback.
+ * Data for ppIncludedFile callback.
  */
 typedef struct {
   /**
-   * \brief Location of '#' in the \#include/\#import directive.
+   * Location of '#' in the \#include/\#import directive.
    */
   CXIdxLoc hashLoc;
   /**
-   * \brief Filename as written in the \#include/\#import directive.
+   * Filename as written in the \#include/\#import directive.
    */
   const char *filename;
   /**
-   * \brief The actual file that the \#include/\#import directive resolved to.
+   * The actual file that the \#include/\#import directive resolved to.
    */
   CXFile file;
   int isImport;
   int isAngled;
   /**
-   * \brief Non-zero if the directive was automatically turned into a module
+   * Non-zero if the directive was automatically turned into a module
    * import.
    */
   int isModuleImport;
 } CXIdxIncludedFileInfo;
 
 /**
- * \brief Data for IndexerCallbacks#importedASTFile.
+ * Data for IndexerCallbacks#importedASTFile.
  */
 typedef struct {
   /**
-   * \brief Top level AST file containing the imported PCH, module or submodule.
+   * Top level AST file containing the imported PCH, module or submodule.
    */
   CXFile file;
   /**
-   * \brief The imported module or NULL if the AST file is a PCH.
+   * The imported module or NULL if the AST file is a PCH.
    */
   CXModule module;
   /**
-   * \brief Location where the file is imported. Applicable only for modules.
+   * Location where the file is imported. Applicable only for modules.
    */
   CXIdxLoc loc;
   /**
-   * \brief Non-zero if an inclusion directive was automatically turned into
+   * Non-zero if an inclusion directive was automatically turned into
    * a module import. Applicable only for modules.
    */
   int isImplicit;
@@ -5955,7 +6181,7 @@
 } CXIdxEntityLanguage;
 
 /**
- * \brief Extra C++ template information for an entity. This can apply to:
+ * Extra C++ template information for an entity. This can apply to:
  * CXIdxEntity_Function
  * CXIdxEntity_CXXClass
  * CXIdxEntity_CXXStaticMethod
@@ -6016,7 +6242,7 @@
   CXIdxLoc loc;
   const CXIdxContainerInfo *semanticContainer;
   /**
-   * \brief Generally same as #semanticContainer but can be different in
+   * Generally same as #semanticContainer but can be different in
    * cases like out-of-line C++ member functions.
    */
   const CXIdxContainerInfo *lexicalContainer;
@@ -6025,7 +6251,7 @@
   int isContainer;
   const CXIdxContainerInfo *declAsContainer;
   /**
-   * \brief Whether the declaration exists in code or was created implicitly
+   * Whether the declaration exists in code or was created implicitly
    * by the compiler, e.g. implicit Objective-C methods for properties.
    */
   int isImplicit;
@@ -6091,25 +6317,25 @@
 } CXIdxCXXClassDeclInfo;
 
 /**
- * \brief Data for IndexerCallbacks#indexEntityReference.
+ * Data for IndexerCallbacks#indexEntityReference.
  *
  * This may be deprecated in a future version as this duplicates
  * the \c CXSymbolRole_Implicit bit in \c CXSymbolRole.
  */
 typedef enum {
   /**
-   * \brief The entity is referenced directly in user's code.
+   * The entity is referenced directly in user's code.
    */
   CXIdxEntityRef_Direct = 1,
   /**
-   * \brief An implicit reference, e.g. a reference of an Objective-C method
+   * An implicit reference, e.g. a reference of an Objective-C method
    * via the dot syntax.
    */
   CXIdxEntityRef_Implicit = 2
 } CXIdxEntityRefKind;
 
 /**
- * \brief Roles that are attributed to symbol occurrences.
+ * Roles that are attributed to symbol occurrences.
  *
  * Internal: this currently mirrors low 9 bits of clang::index::SymbolRole with
  * higher bits zeroed. These high bits may be exposed in the future.
@@ -6128,70 +6354,70 @@
 } CXSymbolRole;
 
 /**
- * \brief Data for IndexerCallbacks#indexEntityReference.
+ * Data for IndexerCallbacks#indexEntityReference.
  */
 typedef struct {
   CXIdxEntityRefKind kind;
   /**
-   * \brief Reference cursor.
+   * Reference cursor.
    */
   CXCursor cursor;
   CXIdxLoc loc;
   /**
-   * \brief The entity that gets referenced.
+   * The entity that gets referenced.
    */
   const CXIdxEntityInfo *referencedEntity;
   /**
-   * \brief Immediate "parent" of the reference. For example:
-   * 
+   * Immediate "parent" of the reference. For example:
+   *
    * \code
    * Foo *var;
    * \endcode
-   * 
+   *
    * The parent of reference of type 'Foo' is the variable 'var'.
    * For references inside statement bodies of functions/methods,
    * the parentEntity will be the function/method.
    */
   const CXIdxEntityInfo *parentEntity;
   /**
-   * \brief Lexical container context of the reference.
+   * Lexical container context of the reference.
    */
   const CXIdxContainerInfo *container;
   /**
-   * \brief Sets of symbol roles of the reference.
+   * Sets of symbol roles of the reference.
    */
   CXSymbolRole role;
 } CXIdxEntityRefInfo;
 
 /**
- * \brief A group of callbacks used by #clang_indexSourceFile and
+ * A group of callbacks used by #clang_indexSourceFile and
  * #clang_indexTranslationUnit.
  */
 typedef struct {
   /**
-   * \brief Called periodically to check whether indexing should be aborted.
+   * Called periodically to check whether indexing should be aborted.
    * Should return 0 to continue, and non-zero to abort.
    */
   int (*abortQuery)(CXClientData client_data, void *reserved);
 
   /**
-   * \brief Called at the end of indexing; passes the complete diagnostic set.
+   * Called at the end of indexing; passes the complete diagnostic set.
    */
   void (*diagnostic)(CXClientData client_data,
                      CXDiagnosticSet, void *reserved);
 
   CXIdxClientFile (*enteredMainFile)(CXClientData client_data,
                                      CXFile mainFile, void *reserved);
-  
+
   /**
-   * \brief Called when a file gets \#included/\#imported.
+   * Called when a file gets \#included/\#imported.
    */
   CXIdxClientFile (*ppIncludedFile)(CXClientData client_data,
                                     const CXIdxIncludedFileInfo *);
-  
+
   /**
-   * \brief Called when a AST file (PCH or module) gets imported.
-   * 
+   * Called when a AST file (PCH or module) gets imported.
+   *
    * AST files will not get indexed (there will not be callbacks to index all
    * the entities in an AST file). The recommended action is that, if the AST
    * file is not already indexed, to initiate a new indexing job specific to
@@ -6201,7 +6427,7 @@
                                         const CXIdxImportedASTFileInfo *);
 
   /**
-   * \brief Called at the beginning of indexing a translation unit.
+   * Called at the beginning of indexing a translation unit.
    */
   CXIdxClientContainer (*startedTranslationUnit)(CXClientData client_data,
                                                  void *reserved);
@@ -6210,7 +6436,7 @@
                            const CXIdxDeclInfo *);
 
   /**
-   * \brief Called to index a reference of an entity.
+   * Called to index a reference of an entity.
    */
   void (*indexEntityReference)(CXClientData client_data,
                                const CXIdxEntityRefInfo *);
@@ -6241,39 +6467,39 @@
 clang_index_getCXXClassDeclInfo(const CXIdxDeclInfo *);
 
 /**
- * \brief For retrieving a custom CXIdxClientContainer attached to a
+ * For retrieving a custom CXIdxClientContainer attached to a
  * container.
  */
 CINDEX_LINKAGE CXIdxClientContainer
 clang_index_getClientContainer(const CXIdxContainerInfo *);
 
 /**
- * \brief For setting a custom CXIdxClientContainer attached to a
+ * For setting a custom CXIdxClientContainer attached to a
  * container.
  */
 CINDEX_LINKAGE void
 clang_index_setClientContainer(const CXIdxContainerInfo *,CXIdxClientContainer);
 
 /**
- * \brief For retrieving a custom CXIdxClientEntity attached to an entity.
+ * For retrieving a custom CXIdxClientEntity attached to an entity.
  */
 CINDEX_LINKAGE CXIdxClientEntity
 clang_index_getClientEntity(const CXIdxEntityInfo *);
 
 /**
- * \brief For setting a custom CXIdxClientEntity attached to an entity.
+ * For setting a custom CXIdxClientEntity attached to an entity.
  */
 CINDEX_LINKAGE void
 clang_index_setClientEntity(const CXIdxEntityInfo *, CXIdxClientEntity);
 
 /**
- * \brief An indexing action/session, to be applied to one or multiple
+ * An indexing action/session, to be applied to one or multiple
  * translation units.
  */
 typedef void *CXIndexAction;
 
 /**
- * \brief An indexing action/session, to be applied to one or multiple
+ * An indexing action/session, to be applied to one or multiple
  * translation units.
  *
  * \param CIdx The index object with which the index action will be associated.
@@ -6281,7 +6507,7 @@
 CINDEX_LINKAGE CXIndexAction clang_IndexAction_create(CXIndex CIdx);
 
 /**
- * \brief Destroy the given index action.
+ * Destroy the given index action.
  *
  * The index action must not be destroyed until all of the translation units
  * created within that index action have been destroyed.
@@ -6290,36 +6516,36 @@
 
 typedef enum {
   /**
-   * \brief Used to indicate that no special indexing options are needed.
+   * Used to indicate that no special indexing options are needed.
    */
   CXIndexOpt_None = 0x0,
-  
+
   /**
-   * \brief Used to indicate that IndexerCallbacks#indexEntityReference should
+   * Used to indicate that IndexerCallbacks#indexEntityReference should
    * be invoked for only one reference of an entity per source file that does
    * not also include a declaration/definition of the entity.
    */
   CXIndexOpt_SuppressRedundantRefs = 0x1,
 
   /**
-   * \brief Function-local symbols should be indexed. If this is not set
+   * Function-local symbols should be indexed. If this is not set
    * function-local symbols will be ignored.
    */
   CXIndexOpt_IndexFunctionLocalSymbols = 0x2,
 
   /**
-   * \brief Implicit function/class template instantiations should be indexed.
+   * Implicit function/class template instantiations should be indexed.
    * If this is not set, implicit instantiations will be ignored.
    */
   CXIndexOpt_IndexImplicitTemplateInstantiations = 0x4,
 
   /**
-   * \brief Suppress all compiler warnings when parsing for indexing.
+   * Suppress all compiler warnings when parsing for indexing.
    */
   CXIndexOpt_SuppressWarnings = 0x8,
 
   /**
-   * \brief Skip a function/method body that was already parsed during an
+   * Skip a function/method body that was already parsed during an
    * indexing session associated with a \c CXIndexAction object.
    * Bodies in system headers are always skipped.
    */
@@ -6328,7 +6554,7 @@
 } CXIndexOptFlags;
 
 /**
- * \brief Index the given source file and the translation unit corresponding
+ * Index the given source file and the translation unit corresponding
  * to that file via callbacks implemented through #IndexerCallbacks.
  *
  * \param client_data pointer data supplied by the client, which will
@@ -6366,7 +6592,7 @@
                                          unsigned TU_options);
 
 /**
- * \brief Same as clang_indexSourceFile but requires a full command line
+ * Same as clang_indexSourceFile but requires a full command line
  * for \c command_line_args including argv[0]. This is useful if the standard
  * library paths are relative to the binary.
  */
@@ -6378,18 +6604,18 @@
     unsigned num_unsaved_files, CXTranslationUnit *out_TU, unsigned TU_options);
 
 /**
- * \brief Index the given translation unit via callbacks implemented through
+ * Index the given translation unit via callbacks implemented through
  * #IndexerCallbacks.
- * 
+ *
  * The order of callback invocations is not guaranteed to be the same as
  * when indexing a source file. The high level order will be:
- * 
+ *
  *   -Preprocessor callbacks invocations
  *   -Declaration/reference callbacks invocations
  *   -Diagnostic callback invocations
  *
  * The parameters are the same as #clang_indexSourceFile.
- * 
+ *
  * \returns If there is a failure from which there is no recovery, returns
  * non-zero, otherwise returns 0.
  */
@@ -6401,7 +6627,7 @@
                                               CXTranslationUnit);
 
 /**
- * \brief Retrieve the CXIdxFile, file, line, column, and offset represented by
+ * Retrieve the CXIdxFile, file, line, column, and offset represented by
  * the given CXIdxLoc.
  *
  * If the location refers into a macro expansion, retrieves the
@@ -6416,13 +6642,13 @@
                                                    unsigned *offset);
 
 /**
- * \brief Retrieve the CXSourceLocation represented by the given CXIdxLoc.
+ * Retrieve the CXSourceLocation represented by the given CXIdxLoc.
  */
 CINDEX_LINKAGE
 CXSourceLocation clang_indexLoc_getCXSourceLocation(CXIdxLoc loc);
 
 /**
- * \brief Visitor invoked for each field found by a traversal.
+ * Visitor invoked for each field found by a traversal.
  *
  * This visitor function will be invoked for each field found by
  * \c clang_Type_visitFields. Its first argument is the cursor being
@@ -6436,7 +6662,7 @@
                                                CXClientData client_data);
 
 /**
- * \brief Visit the fields of a particular type.
+ * Visit the fields of a particular type.
  *
  * This function visits all the direct fields of the given cursor,
  * invoking the given \p visitor function with the cursors of each
diff --git a/linux-x64/clang/include/clang/ARCMigrate/ARCMT.h b/linux-x64/clang/include/clang/ARCMigrate/ARCMT.h
index 7408186..30c24f1 100644
--- a/linux-x64/clang/include/clang/ARCMigrate/ARCMT.h
+++ b/linux-x64/clang/include/clang/ARCMigrate/ARCMT.h
@@ -22,7 +22,7 @@
 namespace arcmt {
   class MigrationPass;
 
-/// \brief Creates an AST with the provided CompilerInvocation but with these
+/// Creates an AST with the provided CompilerInvocation but with these
 /// changes:
 ///   -if a PCH/PTH is set, the original header is used instead
 ///   -Automatic Reference Counting mode is enabled
@@ -45,7 +45,7 @@
                      bool emitPremigrationARCErrors = false,
                      StringRef plistOut = StringRef());
 
-/// \brief Works similar to checkForManualIssues but instead of checking, it
+/// Works similar to checkForManualIssues but instead of checking, it
 /// applies automatic modifications to source files to conform to ARC.
 ///
 /// \returns false if no error is produced, true otherwise.
@@ -55,7 +55,7 @@
                      std::shared_ptr<PCHContainerOperations> PCHContainerOps,
                      DiagnosticConsumer *DiagClient);
 
-/// \brief Applies automatic modifications and produces temporary files
+/// Applies automatic modifications and produces temporary files
 /// and metadata into the \p outputDir path.
 ///
 /// \param emitPremigrationARCErrors if true all ARC errors will get emitted
@@ -72,7 +72,7 @@
     DiagnosticConsumer *DiagClient, StringRef outputDir,
     bool emitPremigrationARCErrors, StringRef plistOut);
 
-/// \brief Get the set of file remappings from the \p outputDir path that
+/// Get the set of file remappings from the \p outputDir path that
 /// migrateWithTemporaryFiles produced.
 ///
 /// \returns false if no error is produced, true otherwise.
@@ -80,7 +80,7 @@
                        StringRef outputDir,
                        DiagnosticConsumer *DiagClient);
 
-/// \brief Get the set of file remappings from a list of files with remapping
+/// Get the set of file remappings from a list of files with remapping
 /// info.
 ///
 /// \returns false if no error is produced, true otherwise.
diff --git a/linux-x64/clang/include/clang/ARCMigrate/ARCMTActions.h b/linux-x64/clang/include/clang/ARCMigrate/ARCMTActions.h
index 554e0c0..2571ca7 100644
--- a/linux-x64/clang/include/clang/ARCMigrate/ARCMTActions.h
+++ b/linux-x64/clang/include/clang/ARCMigrate/ARCMTActions.h
@@ -55,7 +55,7 @@
                 bool emitPremigrationARCErrors);
 };
 
-/// \brief Migrates to modern ObjC syntax.
+/// Migrates to modern ObjC syntax.
 class ObjCMigrateAction : public WrapperFrontendAction {
   std::string MigrateDir;
   unsigned    ObjCMigAction;
diff --git a/linux-x64/clang/include/clang/ARCMigrate/FileRemapper.h b/linux-x64/clang/include/clang/ARCMigrate/FileRemapper.h
index 53b88e9..731307f 100644
--- a/linux-x64/clang/include/clang/ARCMigrate/FileRemapper.h
+++ b/linux-x64/clang/include/clang/ARCMigrate/FileRemapper.h
@@ -41,7 +41,7 @@
 public:
   FileRemapper();
   ~FileRemapper();
-  
+
   bool initFromDisk(StringRef outputDir, DiagnosticsEngine &Diag,
                     bool ignoreIfFilesChanged);
   bool initFromFile(StringRef filePath, DiagnosticsEngine &Diag,
diff --git a/linux-x64/clang/include/clang/AST/APValue.h b/linux-x64/clang/include/clang/AST/APValue.h
index 7c431f3..d4057c9 100644
--- a/linux-x64/clang/include/clang/AST/APValue.h
+++ b/linux-x64/clang/include/clang/AST/APValue.h
@@ -53,7 +53,58 @@
     MemberPointer,
     AddrLabelDiff
   };
-  typedef llvm::PointerUnion<const ValueDecl *, const Expr *> LValueBase;
+
+  class LValueBase {
+  public:
+    typedef llvm::PointerUnion<const ValueDecl *, const Expr *> PtrTy;
+
+    LValueBase() : CallIndex(0), Version(0) {}
+
+    template <class T>
+    LValueBase(T P, unsigned I = 0, unsigned V = 0)
+        : Ptr(P), CallIndex(I), Version(V) {}
+
+    template <class T>
+    bool is() const { return Ptr.is<T>(); }
+
+    template <class T>
+    T get() const { return Ptr.get<T>(); }
+
+    template <class T>
+    T dyn_cast() const { return Ptr.dyn_cast<T>(); }
+
+    void *getOpaqueValue() const;
+
+    bool isNull() const;
+
+    explicit operator bool () const;
+
+    PtrTy getPointer() const {
+      return Ptr;
+    }
+
+    unsigned getCallIndex() const {
+      return CallIndex;
+    }
+
+    void setCallIndex(unsigned Index) {
+      CallIndex = Index;
+    }
+
+    unsigned getVersion() const {
+      return Version;
+    }
+
+    bool operator==(const LValueBase &Other) const {
+      return Ptr == Other.Ptr && CallIndex == Other.CallIndex &&
+             Version == Other.Version;
+    }
+
+  private:
+    PtrTy Ptr;
+    unsigned CallIndex, Version;
+  };
+
   typedef llvm::PointerIntPair<const Decl *, 1, bool> BaseOrMemberType;
   union LValuePathEntry {
     /// BaseOrMember - The FieldDecl or CXXRecordDecl indicating the next item
@@ -135,15 +186,15 @@
   }
   APValue(const APValue &RHS);
   APValue(APValue &&RHS) : Kind(Uninitialized) { swap(RHS); }
-  APValue(LValueBase B, const CharUnits &O, NoLValuePath N, unsigned CallIndex,
+  APValue(LValueBase B, const CharUnits &O, NoLValuePath N,
           bool IsNullPtr = false)
       : Kind(Uninitialized) {
-    MakeLValue(); setLValue(B, O, N, CallIndex, IsNullPtr);
+    MakeLValue(); setLValue(B, O, N, IsNullPtr);
   }
   APValue(LValueBase B, const CharUnits &O, ArrayRef<LValuePathEntry> Path,
-          bool OnePastTheEnd, unsigned CallIndex, bool IsNullPtr = false)
+          bool OnePastTheEnd, bool IsNullPtr = false)
       : Kind(Uninitialized) {
-    MakeLValue(); setLValue(B, O, Path, OnePastTheEnd, CallIndex, IsNullPtr);
+    MakeLValue(); setLValue(B, O, Path, OnePastTheEnd, IsNullPtr);
   }
   APValue(UninitArray, unsigned InitElts, unsigned Size) : Kind(Uninitialized) {
     MakeArray(InitElts, Size);
@@ -168,14 +219,14 @@
     MakeUninit();
   }
 
-  /// \brief Returns whether the object performed allocations.
+  /// Returns whether the object performed allocations.
   ///
   /// If APValues are constructed via placement new, \c needsCleanup()
   /// indicates whether the destructor must be called in order to correctly
   /// free all allocated memory.
   bool needsCleanup() const;
 
-  /// \brief Swaps the contents of this and the given APValue.
+  /// Swaps the contents of this and the given APValue.
   void swap(APValue &RHS);
 
   ValueKind getKind() const { return Kind; }
@@ -255,6 +306,7 @@
   bool hasLValuePath() const;
   ArrayRef<LValuePathEntry> getLValuePath() const;
   unsigned getLValueCallIndex() const;
+  unsigned getLValueVersion() const;
   bool isNullPointer() const;
 
   APValue &getVectorElt(unsigned I) {
@@ -376,10 +428,10 @@
     ((ComplexAPFloat *)(char *)Data.buffer)->Imag = std::move(I);
   }
   void setLValue(LValueBase B, const CharUnits &O, NoLValuePath,
-                 unsigned CallIndex, bool IsNullPtr);
+                 bool IsNullPtr);
   void setLValue(LValueBase B, const CharUnits &O,
                  ArrayRef<LValuePathEntry> Path, bool OnePastTheEnd,
-                 unsigned CallIndex, bool IsNullPtr);
+                 bool IsNullPtr);
   void setUnion(const FieldDecl *Field, const APValue &Value) {
     assert(isUnion() && "Invalid accessor");
     ((UnionData*)(char*)Data.buffer)->Field = Field;
@@ -451,4 +503,14 @@
 
 } // end namespace clang.
 
+namespace llvm {
+template<> struct DenseMapInfo<clang::APValue::LValueBase> {
+  static clang::APValue::LValueBase getEmptyKey();
+  static clang::APValue::LValueBase getTombstoneKey();
+  static unsigned getHashValue(const clang::APValue::LValueBase &Base);
+  static bool isEqual(const clang::APValue::LValueBase &LHS,
+                      const clang::APValue::LValueBase &RHS);
+};
+}
+
 #endif
diff --git a/linux-x64/clang/include/clang/AST/ASTConsumer.h b/linux-x64/clang/include/clang/AST/ASTConsumer.h
index ad368c8..1167c56 100644
--- a/linux-x64/clang/include/clang/AST/ASTConsumer.h
+++ b/linux-x64/clang/include/clang/AST/ASTConsumer.h
@@ -32,7 +32,7 @@
 /// clients that read ASTs.  This abstraction layer allows the client to be
 /// independent of the AST producer (e.g. parser vs AST dump file reader, etc).
 class ASTConsumer {
-  /// \brief Whether this AST consumer also requires information about
+  /// Whether this AST consumer also requires information about
   /// semantic analysis.
   bool SemaConsumer;
 
@@ -53,7 +53,7 @@
   /// \returns true to continue parsing, or false to abort parsing.
   virtual bool HandleTopLevelDecl(DeclGroupRef D);
 
-  /// \brief This callback is invoked each time an inline (method or friend)
+  /// This callback is invoked each time an inline (method or friend)
   /// function definition in a class is completed.
   virtual void HandleInlineFunctionDefinition(FunctionDecl *D) {}
 
@@ -72,22 +72,22 @@
   /// can be defined in declspecs).
   virtual void HandleTagDeclDefinition(TagDecl *D) {}
 
-  /// \brief This callback is invoked the first time each TagDecl is required to
+  /// This callback is invoked the first time each TagDecl is required to
   /// be complete.
   virtual void HandleTagDeclRequiredDefinition(const TagDecl *D) {}
 
-  /// \brief Invoked when a function is implicitly instantiated.
+  /// Invoked when a function is implicitly instantiated.
   /// Note that at this point point it does not have a body, its body is
   /// instantiated at the end of the translation unit and passed to
   /// HandleTopLevelDecl.
   virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D) {}
 
-  /// \brief Handle the specified top-level declaration that occurred inside
+  /// Handle the specified top-level declaration that occurred inside
   /// and ObjC container.
   /// The default implementation ignored them.
   virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D);
 
-  /// \brief Handle an ImportDecl that was implicitly created due to an
+  /// Handle an ImportDecl that was implicitly created due to an
   /// inclusion directive.
   /// The default implementation passes it to HandleTopLevelDecl.
   virtual void HandleImplicitImportDecl(ImportDecl *D);
@@ -103,7 +103,7 @@
   /// modified by the introduction of an implicit zero initializer.
   virtual void CompleteTentativeDefinition(VarDecl *D) {}
 
-  /// \brief Callback invoked when an MSInheritanceAttr has been attached to a
+  /// Callback invoked when an MSInheritanceAttr has been attached to a
   /// CXXRecordDecl.
   virtual void AssignInheritanceModel(CXXRecordDecl *RD) {}
 
@@ -111,19 +111,19 @@
   // variable has been instantiated.
   virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *D) {}
 
-  /// \brief Callback involved at the end of a translation unit to
+  /// Callback involved at the end of a translation unit to
   /// notify the consumer that a vtable for the given C++ class is
   /// required.
   ///
   /// \param RD The class whose vtable was used.
   virtual void HandleVTable(CXXRecordDecl *RD) {}
 
-  /// \brief If the consumer is interested in entities getting modified after
+  /// If the consumer is interested in entities getting modified after
   /// their initial creation, it should return a pointer to
   /// an ASTMutationListener here.
   virtual ASTMutationListener *GetASTMutationListener() { return nullptr; }
 
-  /// \brief If the consumer is interested in entities being deserialized from
+  /// If the consumer is interested in entities being deserialized from
   /// AST files, it should return a pointer to a ASTDeserializationListener here
   virtual ASTDeserializationListener *GetASTDeserializationListener() {
     return nullptr;
@@ -132,7 +132,7 @@
   /// PrintStats - If desired, print any statistics.
   virtual void PrintStats() {}
 
-  /// \brief This callback is called for each function if the Parser was
+  /// This callback is called for each function if the Parser was
   /// initialized with \c SkipFunctionBodies set to \c true.
   ///
   /// \return \c true if the function's body should be skipped. The function
diff --git a/linux-x64/clang/include/clang/AST/ASTContext.h b/linux-x64/clang/include/clang/AST/ASTContext.h
index a5b090d..8898574 100644
--- a/linux-x64/clang/include/clang/AST/ASTContext.h
+++ b/linux-x64/clang/include/clang/AST/ASTContext.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::ASTContext interface.
+/// Defines the clang::ASTContext interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -18,6 +18,7 @@
 #include "clang/AST/ASTTypeTraits.h"
 #include "clang/AST/CanonicalType.h"
 #include "clang/AST/CommentCommandTraits.h"
+#include "clang/AST/ComparisonCategories.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclBase.h"
 #include "clang/AST/DeclarationName.h"
@@ -78,6 +79,7 @@
 
 namespace clang {
 
+class APFixedPoint;
 class APValue;
 class ASTMutationListener;
 class ASTRecordLayout;
@@ -91,6 +93,7 @@
 class CXXRecordDecl;
 class DiagnosticsEngine;
 class Expr;
+class FixedPointSemantics;
 class MangleContext;
 class MangleNumberingContext;
 class MaterializeTemporaryExpr;
@@ -144,7 +147,7 @@
       : Width(Width), Align(Align), AlignIsRequired(AlignIsRequired) {}
 };
 
-/// \brief Holds long-lived AST nodes (such as types and decls) that can be
+/// Holds long-lived AST nodes (such as types and decls) that can be
 /// referred to throughout the semantic analysis of a file.
 class ASTContext : public RefCountedBase<ASTContext> {
   friend class NestedNameSpecifier;
@@ -167,6 +170,7 @@
   mutable llvm::FoldingSet<DependentAddressSpaceType>
       DependentAddressSpaceTypes;
   mutable llvm::FoldingSet<VectorType> VectorTypes;
+  mutable llvm::FoldingSet<DependentVectorType> DependentVectorTypes;
   mutable llvm::FoldingSet<FunctionNoProtoType> FunctionNoProtoTypes;
   mutable llvm::ContextualFoldingSet<FunctionProtoType, ASTContext&>
     FunctionProtoTypes;
@@ -206,13 +210,13 @@
                                      ASTContext&>
     SubstTemplateTemplateParmPacks;
 
-  /// \brief The set of nested name specifiers.
+  /// The set of nested name specifiers.
   ///
   /// This set is managed by the NestedNameSpecifier class.
   mutable llvm::FoldingSet<NestedNameSpecifier> NestedNameSpecifiers;
   mutable NestedNameSpecifier *GlobalNestedNameSpecifier = nullptr;
 
-  /// \brief A cache mapping from RecordDecls to ASTRecordLayouts.
+  /// A cache mapping from RecordDecls to ASTRecordLayouts.
   ///
   /// This is lazily created.  This is intentionally not serialized.
   mutable llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*>
@@ -220,35 +224,41 @@
   mutable llvm::DenseMap<const ObjCContainerDecl*, const ASTRecordLayout*>
     ObjCLayouts;
 
-  /// \brief A cache from types to size and alignment information.
+  /// A cache from types to size and alignment information.
   using TypeInfoMap = llvm::DenseMap<const Type *, struct TypeInfo>;
   mutable TypeInfoMap MemoizedTypeInfo;
 
-  /// \brief A cache mapping from CXXRecordDecls to key functions.
+  /// A cache from types to unadjusted alignment information. Only ARM and
+  /// AArch64 targets need this information, keeping it separate prevents
+  /// imposing overhead on TypeInfo size.
+  using UnadjustedAlignMap = llvm::DenseMap<const Type *, unsigned>;
+  mutable UnadjustedAlignMap MemoizedUnadjustedAlign;
+
+  /// A cache mapping from CXXRecordDecls to key functions.
   llvm::DenseMap<const CXXRecordDecl*, LazyDeclPtr> KeyFunctions;
 
-  /// \brief Mapping from ObjCContainers to their ObjCImplementations.
+  /// Mapping from ObjCContainers to their ObjCImplementations.
   llvm::DenseMap<ObjCContainerDecl*, ObjCImplDecl*> ObjCImpls;
 
-  /// \brief Mapping from ObjCMethod to its duplicate declaration in the same
+  /// Mapping from ObjCMethod to its duplicate declaration in the same
   /// interface.
   llvm::DenseMap<const ObjCMethodDecl*,const ObjCMethodDecl*> ObjCMethodRedecls;
 
-  /// \brief Mapping from __block VarDecls to their copy initialization expr.
+  /// Mapping from __block VarDecls to their copy initialization expr.
   llvm::DenseMap<const VarDecl*, Expr*> BlockVarCopyInits;
 
-  /// \brief Mapping from class scope functions specialization to their
+  /// Mapping from class scope functions specialization to their
   /// template patterns.
   llvm::DenseMap<const FunctionDecl*, FunctionDecl*>
     ClassScopeSpecializationPattern;
 
-  /// \brief Mapping from materialized temporaries with static storage duration
+  /// Mapping from materialized temporaries with static storage duration
   /// that appear in constant initializers to their evaluated values.  These are
   /// allocated in a std::map because their address must be stable.
   llvm::DenseMap<const MaterializeTemporaryExpr *, APValue *>
     MaterializedTemporaryValues;
 
-  /// \brief Representation of a "canonical" template template parameter that
+  /// Representation of a "canonical" template template parameter that
   /// is used in canonical template names.
   class CanonicalTemplateTemplateParm : public llvm::FoldingSetNode {
     TemplateTemplateParmDecl *Parm;
@@ -270,32 +280,32 @@
   TemplateTemplateParmDecl *
     getCanonicalTemplateTemplateParmDecl(TemplateTemplateParmDecl *TTP) const;
 
-  /// \brief The typedef for the __int128_t type.
+  /// The typedef for the __int128_t type.
   mutable TypedefDecl *Int128Decl = nullptr;
 
-  /// \brief The typedef for the __uint128_t type.
+  /// The typedef for the __uint128_t type.
   mutable TypedefDecl *UInt128Decl = nullptr;
 
-  /// \brief The typedef for the target specific predefined
+  /// The typedef for the target specific predefined
   /// __builtin_va_list type.
   mutable TypedefDecl *BuiltinVaListDecl = nullptr;
 
   /// The typedef for the predefined \c __builtin_ms_va_list type.
   mutable TypedefDecl *BuiltinMSVaListDecl = nullptr;
 
-  /// \brief The typedef for the predefined \c id type.
+  /// The typedef for the predefined \c id type.
   mutable TypedefDecl *ObjCIdDecl = nullptr;
 
-  /// \brief The typedef for the predefined \c SEL type.
+  /// The typedef for the predefined \c SEL type.
   mutable TypedefDecl *ObjCSelDecl = nullptr;
 
-  /// \brief The typedef for the predefined \c Class type.
+  /// The typedef for the predefined \c Class type.
   mutable TypedefDecl *ObjCClassDecl = nullptr;
 
-  /// \brief The typedef for the predefined \c Protocol class in Objective-C.
+  /// The typedef for the predefined \c Protocol class in Objective-C.
   mutable ObjCInterfaceDecl *ObjCProtocolClassDecl = nullptr;
 
-  /// \brief The typedef for the predefined 'BOOL' type.
+  /// The typedef for the predefined 'BOOL' type.
   mutable TypedefDecl *BOOLDecl = nullptr;
 
   // Typedefs which may be provided defining the structure of Objective-C
@@ -327,53 +337,53 @@
 
   QualType ObjCNSStringType;
 
-  /// \brief The typedef declaration for the Objective-C "instancetype" type.
+  /// The typedef declaration for the Objective-C "instancetype" type.
   TypedefDecl *ObjCInstanceTypeDecl = nullptr;
 
-  /// \brief The type for the C FILE type.
+  /// The type for the C FILE type.
   TypeDecl *FILEDecl = nullptr;
 
-  /// \brief The type for the C jmp_buf type.
+  /// The type for the C jmp_buf type.
   TypeDecl *jmp_bufDecl = nullptr;
 
-  /// \brief The type for the C sigjmp_buf type.
+  /// The type for the C sigjmp_buf type.
   TypeDecl *sigjmp_bufDecl = nullptr;
 
-  /// \brief The type for the C ucontext_t type.
+  /// The type for the C ucontext_t type.
   TypeDecl *ucontext_tDecl = nullptr;
 
-  /// \brief Type for the Block descriptor for Blocks CodeGen.
+  /// Type for the Block descriptor for Blocks CodeGen.
   ///
   /// Since this is only used for generation of debug info, it is not
   /// serialized.
   mutable RecordDecl *BlockDescriptorType = nullptr;
 
-  /// \brief Type for the Block descriptor for Blocks CodeGen.
+  /// Type for the Block descriptor for Blocks CodeGen.
   ///
   /// Since this is only used for generation of debug info, it is not
   /// serialized.
   mutable RecordDecl *BlockDescriptorExtendedType = nullptr;
 
-  /// \brief Declaration for the CUDA cudaConfigureCall function.
+  /// Declaration for the CUDA cudaConfigureCall function.
   FunctionDecl *cudaConfigureCallDecl = nullptr;
 
-  /// \brief Keeps track of all declaration attributes.
+  /// Keeps track of all declaration attributes.
   ///
   /// Since so few decls have attrs, we keep them in a hash map instead of
   /// wasting space in the Decl class.
   llvm::DenseMap<const Decl*, AttrVec*> DeclAttrs;
 
-  /// \brief A mapping from non-redeclarable declarations in modules that were
+  /// A mapping from non-redeclarable declarations in modules that were
   /// merged with other declarations to the canonical declaration that they were
   /// merged into.
   llvm::DenseMap<Decl*, Decl*> MergedDecls;
 
-  /// \brief A mapping from a defining declaration to a list of modules (other
+  /// A mapping from a defining declaration to a list of modules (other
   /// than the owning module of the declaration) that contain merged
   /// definitions of that entity.
   llvm::DenseMap<NamedDecl*, llvm::TinyPtrVector<Module*>> MergedDefModules;
 
-  /// \brief Initializers for a module, in order. Each Decl will be either
+  /// Initializers for a module, in order. Each Decl will be either
   /// something that has a semantic effect on startup (such as a variable with
   /// a non-constant initializer), or an ImportDecl (which recursively triggers
   /// initialization of another module).
@@ -388,7 +398,7 @@
   ASTContext &this_() { return *this; }
 
 public:
-  /// \brief A type synonym for the TemplateOrInstantiation mapping.
+  /// A type synonym for the TemplateOrInstantiation mapping.
   using TemplateOrSpecializationInfo =
       llvm::PointerUnion<VarTemplateDecl *, MemberSpecializationInfo *>;
 
@@ -398,7 +408,7 @@
   friend class ASTWriter;
   friend class CXXRecordDecl;
 
-  /// \brief A mapping to contain the template or declaration that
+  /// A mapping to contain the template or declaration that
   /// a variable declaration describes or was instantiated from,
   /// respectively.
   ///
@@ -431,7 +441,7 @@
   llvm::DenseMap<const VarDecl *, TemplateOrSpecializationInfo>
   TemplateOrInstantiation;
 
-  /// \brief Keeps track of the declaration from which a using declaration was
+  /// Keeps track of the declaration from which a using declaration was
   /// created during instantiation.
   ///
   /// The source and target declarations are always a UsingDecl, an
@@ -461,7 +471,7 @@
 
   llvm::DenseMap<FieldDecl *, FieldDecl *> InstantiatedFromUnnamedFieldDecl;
 
-  /// \brief Mapping that stores the methods overridden by a given C++
+  /// Mapping that stores the methods overridden by a given C++
   /// member function.
   ///
   /// Since most C++ member functions aren't virtual and therefore
@@ -470,18 +480,18 @@
   using CXXMethodVector = llvm::TinyPtrVector<const CXXMethodDecl *>;
   llvm::DenseMap<const CXXMethodDecl *, CXXMethodVector> OverriddenMethods;
 
-  /// \brief Mapping from each declaration context to its corresponding
+  /// Mapping from each declaration context to its corresponding
   /// mangling numbering context (used for constructs like lambdas which
   /// need to be consistently numbered for the mangler).
   llvm::DenseMap<const DeclContext *, std::unique_ptr<MangleNumberingContext>>
       MangleNumberingContexts;
 
-  /// \brief Side-table of mangling numbers for declarations which rarely
+  /// Side-table of mangling numbers for declarations which rarely
   /// need them (like static local vars).
   llvm::MapVector<const NamedDecl *, unsigned> MangleNumbers;
   llvm::MapVector<const VarDecl *, unsigned> StaticLocalNumbers;
 
-  /// \brief Mapping that stores parameterIndex values for ParmVarDecls when
+  /// Mapping that stores parameterIndex values for ParmVarDecls when
   /// that value exceeds the bitfield size of ParmVarDeclBits.ParameterIndex.
   using ParameterIndexTable = llvm::DenseMap<const VarDecl *, unsigned>;
   ParameterIndexTable ParamIndices;
@@ -494,38 +504,38 @@
   mutable BuiltinTemplateDecl *MakeIntegerSeqDecl = nullptr;
   mutable BuiltinTemplateDecl *TypePackElementDecl = nullptr;
 
-  /// \brief The associated SourceManager object.
+  /// The associated SourceManager object.
   SourceManager &SourceMgr;
 
-  /// \brief The language options used to create the AST associated with
+  /// The language options used to create the AST associated with
   ///  this ASTContext object.
   LangOptions &LangOpts;
 
-  /// \brief Blacklist object that is used by sanitizers to decide which
+  /// Blacklist object that is used by sanitizers to decide which
   /// entities should not be instrumented.
   std::unique_ptr<SanitizerBlacklist> SanitizerBL;
 
-  /// \brief Function filtering mechanism to determine whether a given function
+  /// Function filtering mechanism to determine whether a given function
   /// should be imbued with the XRay "always" or "never" attributes.
   std::unique_ptr<XRayFunctionFilter> XRayFilter;
 
-  /// \brief The allocator used to create AST objects.
+  /// The allocator used to create AST objects.
   ///
   /// AST objects are never destructed; rather, all memory associated with the
   /// AST objects will be released when the ASTContext itself is destroyed.
   mutable llvm::BumpPtrAllocator BumpAlloc;
 
-  /// \brief Allocator for partial diagnostics.
+  /// Allocator for partial diagnostics.
   PartialDiagnostic::StorageAllocator DiagAllocator;
 
-  /// \brief The current C++ ABI.
+  /// The current C++ ABI.
   std::unique_ptr<CXXABI> ABI;
   CXXABI *createCXXABI(const TargetInfo &T);
 
-  /// \brief The logical -> physical address space map.
+  /// The logical -> physical address space map.
   const LangASMap *AddrSpaceMap = nullptr;
 
-  /// \brief Address space map mangling must be used with language specific
+  /// Address space map mangling must be used with language specific
   /// address spaces (e.g. OpenCL/CUDA)
   bool AddrSpaceMapMangling;
 
@@ -541,10 +551,10 @@
   IntrusiveRefCntPtr<ExternalASTSource> ExternalSource;
   ASTMutationListener *Listener = nullptr;
 
-  /// \brief Contains parents of a node.
+  /// Contains parents of a node.
   using ParentVector = llvm::SmallVector<ast_type_traits::DynTypedNode, 2>;
 
-  /// \brief Maps from a node to its parents. This is used for nodes that have
+  /// Maps from a node to its parents. This is used for nodes that have
   /// pointer identity only, which are more common and we can save space by
   /// only storing a unique pointer to them.
   using ParentMapPointers =
@@ -602,7 +612,7 @@
     }
   };
 
-  /// \brief Returns the parents of the given node.
+  /// Returns the parents of the given node.
   ///
   /// Note that this will lazily compute the parents of all nodes
   /// and store them for later retrieval. Thus, the first call is O(n)
@@ -701,10 +711,10 @@
     return FullSourceLoc(Loc,SourceMgr);
   }
 
-  /// \brief All comments in this translation unit.
+  /// All comments in this translation unit.
   RawCommentList Comments;
 
-  /// \brief True if comments are already loaded from ExternalASTSource.
+  /// True if comments are already loaded from ExternalASTSource.
   mutable bool CommentsLoaded = false;
 
   class RawCommentAndCacheFlags {
@@ -761,18 +771,18 @@
     const Decl *OriginalDecl;
   };
 
-  /// \brief Mapping from declarations to comments attached to any
+  /// Mapping from declarations to comments attached to any
   /// redeclaration.
   ///
   /// Raw comments are owned by Comments list.  This mapping is populated
   /// lazily.
   mutable llvm::DenseMap<const Decl *, RawCommentAndCacheFlags> RedeclComments;
 
-  /// \brief Mapping from declarations to parsed comments attached to any
+  /// Mapping from declarations to parsed comments attached to any
   /// redeclaration.
   mutable llvm::DenseMap<const Decl *, comments::FullComment *> ParsedComments;
 
-  /// \brief Return the documentation comment attached to a given declaration,
+  /// Return the documentation comment attached to a given declaration,
   /// without looking into cache.
   RawComment *getRawCommentForDeclNoCache(const Decl *D) const;
 
@@ -787,7 +797,7 @@
     Comments.addComment(RC, LangOpts.CommentOpts, BumpAlloc);
   }
 
-  /// \brief Return the documentation comment attached to a given declaration.
+  /// Return the documentation comment attached to a given declaration.
   /// Returns nullptr if no comment is attached.
   ///
   /// \param OriginalDecl if not nullptr, is set to declaration AST node that
@@ -815,7 +825,7 @@
 private:
   mutable comments::CommandTraits CommentCommandTraits;
 
-  /// \brief Iterator that visits import declarations.
+  /// Iterator that visits import declarations.
   class import_iterator {
     ImportDecl *Import = nullptr;
 
@@ -857,13 +867,13 @@
     return CommentCommandTraits;
   }
 
-  /// \brief Retrieve the attributes for the given declaration.
+  /// Retrieve the attributes for the given declaration.
   AttrVec& getDeclAttrs(const Decl *D);
 
-  /// \brief Erase the attributes corresponding to the given declaration.
+  /// Erase the attributes corresponding to the given declaration.
   void eraseDeclAttrs(const Decl *D);
 
-  /// \brief If this variable is an instantiated static data member of a
+  /// If this variable is an instantiated static data member of a
   /// class template specialization, returns the templated static data member
   /// from which it was instantiated.
   // FIXME: Remove ?
@@ -878,7 +888,7 @@
   void setClassScopeSpecializationPattern(FunctionDecl *FD,
                                           FunctionDecl *Pattern);
 
-  /// \brief Note that the static data member \p Inst is an instantiation of
+  /// Note that the static data member \p Inst is an instantiation of
   /// the static data member template \p Tmpl of a class template.
   void setInstantiatedFromStaticDataMember(VarDecl *Inst, VarDecl *Tmpl,
                                            TemplateSpecializationKind TSK,
@@ -887,12 +897,12 @@
   void setTemplateOrSpecializationInfo(VarDecl *Inst,
                                        TemplateOrSpecializationInfo TSI);
 
-  /// \brief If the given using decl \p Inst is an instantiation of a
+  /// If the given using decl \p Inst is an instantiation of a
   /// (possibly unresolved) using decl from a template instantiation,
   /// return it.
   NamedDecl *getInstantiatedFromUsingDecl(NamedDecl *Inst);
 
-  /// \brief Remember that the using decl \p Inst is an instantiation
+  /// Remember that the using decl \p Inst is an instantiation
   /// of the using decl \p Pattern of a class template.
   void setInstantiatedFromUsingDecl(NamedDecl *Inst, NamedDecl *Pattern);
 
@@ -919,12 +929,12 @@
 
   overridden_method_range overridden_methods(const CXXMethodDecl *Method) const;
 
-  /// \brief Note that the given C++ \p Method overrides the given \p
+  /// Note that the given C++ \p Method overrides the given \p
   /// Overridden method.
   void addOverriddenMethod(const CXXMethodDecl *Method,
                            const CXXMethodDecl *Overridden);
 
-  /// \brief Return C++ or ObjC overridden methods for the given \p Method.
+  /// Return C++ or ObjC overridden methods for the given \p Method.
   ///
   /// An ObjC method is considered to override any method in the class's
   /// base classes, its protocols, or its categories' protocols, that has
@@ -935,7 +945,7 @@
                         const NamedDecl *Method,
                         SmallVectorImpl<const NamedDecl *> &Overridden) const;
 
-  /// \brief Notify the AST context that a new import declaration has been
+  /// Notify the AST context that a new import declaration has been
   /// parsed or implicitly created within this translation unit.
   void addedLocalImportDecl(ImportDecl *Import);
 
@@ -957,16 +967,16 @@
     MergedDecls[D] = Primary;
   }
 
-  /// \brief Note that the definition \p ND has been merged into module \p M,
+  /// Note that the definition \p ND has been merged into module \p M,
   /// and should be visible whenever \p M is visible.
   void mergeDefinitionIntoModule(NamedDecl *ND, Module *M,
                                  bool NotifyListeners = true);
 
-  /// \brief Clean up the merged definition list. Call this if you might have
+  /// Clean up the merged definition list. Call this if you might have
   /// added duplicates into the list.
   void deduplicateMergedDefinitonsFor(NamedDecl *ND);
 
-  /// \brief Get the additional modules in which the definition \p Def has
+  /// Get the additional modules in which the definition \p Def has
   /// been merged.
   ArrayRef<Module*> getModulesWithMergedDefinition(const NamedDecl *Def) {
     auto MergedIt = MergedDefModules.find(Def);
@@ -999,12 +1009,24 @@
   CanQualType WCharTy;  // [C++ 3.9.1p5].
   CanQualType WideCharTy; // Same as WCharTy in C++, integer type in C99.
   CanQualType WIntTy;   // [C99 7.24.1], integer type unchanged by default promotions.
+  CanQualType Char8Ty;  // [C++20 proposal]
   CanQualType Char16Ty; // [C++0x 3.9.1p5], integer type in C99.
   CanQualType Char32Ty; // [C++0x 3.9.1p5], integer type in C99.
   CanQualType SignedCharTy, ShortTy, IntTy, LongTy, LongLongTy, Int128Ty;
   CanQualType UnsignedCharTy, UnsignedShortTy, UnsignedIntTy, UnsignedLongTy;
   CanQualType UnsignedLongLongTy, UnsignedInt128Ty;
   CanQualType FloatTy, DoubleTy, LongDoubleTy, Float128Ty;
+  CanQualType ShortAccumTy, AccumTy,
+      LongAccumTy;  // ISO/IEC JTC1 SC22 WG14 N1169 Extension
+  CanQualType UnsignedShortAccumTy, UnsignedAccumTy, UnsignedLongAccumTy;
+  CanQualType ShortFractTy, FractTy, LongFractTy;
+  CanQualType UnsignedShortFractTy, UnsignedFractTy, UnsignedLongFractTy;
+  CanQualType SatShortAccumTy, SatAccumTy, SatLongAccumTy;
+  CanQualType SatUnsignedShortAccumTy, SatUnsignedAccumTy,
+      SatUnsignedLongAccumTy;
+  CanQualType SatShortFractTy, SatFractTy, SatLongFractTy;
+  CanQualType SatUnsignedShortFractTy, SatUnsignedFractTy,
+      SatUnsignedLongFractTy;
   CanQualType HalfTy; // [OpenCL 6.1.1.1], ARM NEON
   CanQualType Float16Ty; // C11 extension ISO/IEC TS 18661-3
   CanQualType FloatComplexTy, DoubleComplexTy, LongDoubleComplexTy;
@@ -1036,20 +1058,20 @@
   ASTContext &operator=(const ASTContext &) = delete;
   ~ASTContext();
 
-  /// \brief Attach an external AST source to the AST context.
+  /// Attach an external AST source to the AST context.
   ///
   /// The external AST source provides the ability to load parts of
   /// the abstract syntax tree as needed from some external storage,
   /// e.g., a precompiled header.
   void setExternalSource(IntrusiveRefCntPtr<ExternalASTSource> Source);
 
-  /// \brief Retrieve a pointer to the external AST source associated
+  /// Retrieve a pointer to the external AST source associated
   /// with this AST context, if any.
   ExternalASTSource *getExternalSource() const {
     return ExternalSource.get();
   }
 
-  /// \brief Attach an AST mutation listener to the AST context.
+  /// Attach an AST mutation listener to the AST context.
   ///
   /// The AST mutation listener provides the ability to track modifications to
   /// the abstract syntax tree entities committed after they were initially
@@ -1058,7 +1080,7 @@
     this->Listener = Listener;
   }
 
-  /// \brief Retrieve a pointer to the AST mutation listener associated
+  /// Retrieve a pointer to the AST mutation listener associated
   /// with this AST context, if any.
   ASTMutationListener *getASTMutationListener() const { return Listener; }
 
@@ -1068,18 +1090,18 @@
   BuiltinTemplateDecl *buildBuiltinTemplateDecl(BuiltinTemplateKind BTK,
                                                 const IdentifierInfo *II) const;
 
-  /// \brief Create a new implicit TU-level CXXRecordDecl or RecordDecl
+  /// Create a new implicit TU-level CXXRecordDecl or RecordDecl
   /// declaration.
   RecordDecl *buildImplicitRecord(StringRef Name,
                                   RecordDecl::TagKind TK = TTK_Struct) const;
 
-  /// \brief Create a new implicit TU-level typedef declaration.
+  /// Create a new implicit TU-level typedef declaration.
   TypedefDecl *buildImplicitTypedef(QualType T, StringRef Name) const;
 
-  /// \brief Retrieve the declaration for the 128-bit signed integer type.
+  /// Retrieve the declaration for the 128-bit signed integer type.
   TypedefDecl *getInt128Decl() const;
 
-  /// \brief Retrieve the declaration for the 128-bit unsigned integer type.
+  /// Retrieve the declaration for the 128-bit unsigned integer type.
   TypedefDecl *getUInt128Decl() const;
 
   //===--------------------------------------------------------------------===//
@@ -1087,7 +1109,7 @@
   //===--------------------------------------------------------------------===//
 
 private:
-  /// \brief Return a type with extended qualifiers.
+  /// Return a type with extended qualifiers.
   QualType getExtQualType(const Type *Base, Qualifiers Quals) const;
 
   QualType getTypeDeclTypeSlow(const TypeDecl *Decl) const;
@@ -1095,7 +1117,7 @@
   QualType getPipeType(QualType T, bool ReadOnly) const;
 
 public:
-  /// \brief Return the uniqued reference to the type for an address space
+  /// Return the uniqued reference to the type for an address space
   /// qualified type with the specified type and address space.
   ///
   /// The resulting type has a union of the qualifiers from T and the address
@@ -1103,29 +1125,29 @@
   /// replaced.
   QualType getAddrSpaceQualType(QualType T, LangAS AddressSpace) const;
 
-  /// \brief Remove any existing address space on the type and returns the type
+  /// Remove any existing address space on the type and returns the type
   /// with qualifiers intact (or that's the idea anyway)
   ///
   /// The return type should be T with all prior qualifiers minus the address
   /// space.
   QualType removeAddrSpaceQualType(QualType T) const;
 
-  /// \brief Apply Objective-C protocol qualifiers to the given type.
+  /// Apply Objective-C protocol qualifiers to the given type.
   /// \param allowOnPointerType specifies if we can apply protocol
   /// qualifiers on ObjCObjectPointerType. It can be set to true when
-  /// contructing the canonical type of a Objective-C type parameter.
+  /// constructing the canonical type of a Objective-C type parameter.
   QualType applyObjCProtocolQualifiers(QualType type,
       ArrayRef<ObjCProtocolDecl *> protocols, bool &hasError,
       bool allowOnPointerType = false) const;
 
-  /// \brief Return the uniqued reference to the type for an Objective-C
+  /// Return the uniqued reference to the type for an Objective-C
   /// gc-qualified type.
   ///
-  /// The retulting type has a union of the qualifiers from T and the gc
+  /// The resulting type has a union of the qualifiers from T and the gc
   /// attribute.
   QualType getObjCGCQualType(QualType T, Qualifiers::GC gcAttr) const;
 
-  /// \brief Return the uniqued reference to the type for a \c restrict
+  /// Return the uniqued reference to the type for a \c restrict
   /// qualified type.
   ///
   /// The resulting type has a union of the qualifiers from \p T and
@@ -1134,7 +1156,7 @@
     return T.withFastQualifiers(Qualifiers::Restrict);
   }
 
-  /// \brief Return the uniqued reference to the type for a \c volatile
+  /// Return the uniqued reference to the type for a \c volatile
   /// qualified type.
   ///
   /// The resulting type has a union of the qualifiers from \p T and
@@ -1143,7 +1165,7 @@
     return T.withFastQualifiers(Qualifiers::Volatile);
   }
 
-  /// \brief Return the uniqued reference to the type for a \c const
+  /// Return the uniqued reference to the type for a \c const
   /// qualified type.
   ///
   /// The resulting type has a union of the qualifiers from \p T and \c const.
@@ -1152,14 +1174,14 @@
   /// calling T.withConst().
   QualType getConstType(QualType T) const { return T.withConst(); }
 
-  /// \brief Change the ExtInfo on a function type.
+  /// Change the ExtInfo on a function type.
   const FunctionType *adjustFunctionType(const FunctionType *Fn,
                                          FunctionType::ExtInfo EInfo);
 
   /// Adjust the given function result type.
   CanQualType getCanonicalFunctionResultType(QualType ResultType) const;
 
-  /// \brief Change the result type of a function type once it is deduced.
+  /// Change the result type of a function type once it is deduced.
   void adjustDeducedFunctionResultType(FunctionDecl *FD, QualType ResultType);
 
   /// Get a function type and produce the equivalent function type with the
@@ -1169,35 +1191,31 @@
   QualType getFunctionTypeWithExceptionSpec(
       QualType Orig, const FunctionProtoType::ExceptionSpecInfo &ESI);
 
-  /// \brief Determine whether two function types are the same, ignoring
+  /// Determine whether two function types are the same, ignoring
   /// exception specifications in cases where they're part of the type.
   bool hasSameFunctionTypeIgnoringExceptionSpec(QualType T, QualType U);
 
-  /// \brief Change the exception specification on a function once it is
+  /// Change the exception specification on a function once it is
   /// delay-parsed, instantiated, or computed.
   void adjustExceptionSpec(FunctionDecl *FD,
                            const FunctionProtoType::ExceptionSpecInfo &ESI,
                            bool AsWritten = false);
 
-  /// Determine whether a type is a class that should be detructed in the
-  /// callee function.
-  bool isParamDestroyedInCallee(QualType T) const;
-
-  /// \brief Return the uniqued reference to the type for a complex
+  /// Return the uniqued reference to the type for a complex
   /// number with the specified element type.
   QualType getComplexType(QualType T) const;
   CanQualType getComplexType(CanQualType T) const {
     return CanQualType::CreateUnsafe(getComplexType((QualType) T));
   }
 
-  /// \brief Return the uniqued reference to the type for a pointer to
+  /// Return the uniqued reference to the type for a pointer to
   /// the specified type.
   QualType getPointerType(QualType T) const;
   CanQualType getPointerType(CanQualType T) const {
     return CanQualType::CreateUnsafe(getPointerType((QualType) T));
   }
 
-  /// \brief Return the uniqued reference to a type adjusted from the original
+  /// Return the uniqued reference to a type adjusted from the original
   /// type to a new type.
   QualType getAdjustedType(QualType Orig, QualType New) const;
   CanQualType getAdjustedType(CanQualType Orig, CanQualType New) const {
@@ -1205,7 +1223,7 @@
         getAdjustedType((QualType)Orig, (QualType)New));
   }
 
-  /// \brief Return the uniqued reference to the decayed version of the given
+  /// Return the uniqued reference to the decayed version of the given
   /// type.  Can only be called on array and function types which decay to
   /// pointer types.
   QualType getDecayedType(QualType T) const;
@@ -1213,11 +1231,11 @@
     return CanQualType::CreateUnsafe(getDecayedType((QualType) T));
   }
 
-  /// \brief Return the uniqued reference to the atomic type for the specified
+  /// Return the uniqued reference to the atomic type for the specified
   /// type.
   QualType getAtomicType(QualType T) const;
 
-  /// \brief Return the uniqued reference to the type for a block of the
+  /// Return the uniqued reference to the type for a block of the
   /// specified type.
   QualType getBlockPointerType(QualType T) const;
 
@@ -1225,10 +1243,10 @@
   /// blocks.
   QualType getBlockDescriptorType() const;
 
-  /// \brief Return a read_only pipe type for the specified type.
+  /// Return a read_only pipe type for the specified type.
   QualType getReadPipeType(QualType T) const;
 
-  /// \brief Return a write_only pipe type for the specified type.
+  /// Return a write_only pipe type for the specified type.
   QualType getWritePipeType(QualType T) const;
 
   /// Gets the struct used to keep track of the extended descriptor for
@@ -1252,36 +1270,36 @@
   /// Returns true iff we need copy/dispose helpers for the given type.
   bool BlockRequiresCopying(QualType Ty, const VarDecl *D);
 
-  /// Returns true, if given type has a known lifetime. HasByrefExtendedLayout is set
-  /// to false in this case. If HasByrefExtendedLayout returns true, byref variable
-  /// has extended lifetime.
+  /// Returns true, if given type has a known lifetime. HasByrefExtendedLayout
+  /// is set to false in this case. If HasByrefExtendedLayout returns true,
+  /// byref variable has extended lifetime.
   bool getByrefLifetime(QualType Ty,
                         Qualifiers::ObjCLifetime &Lifetime,
                         bool &HasByrefExtendedLayout) const;
 
-  /// \brief Return the uniqued reference to the type for an lvalue reference
+  /// Return the uniqued reference to the type for an lvalue reference
   /// to the specified type.
   QualType getLValueReferenceType(QualType T, bool SpelledAsLValue = true)
     const;
 
-  /// \brief Return the uniqued reference to the type for an rvalue reference
+  /// Return the uniqued reference to the type for an rvalue reference
   /// to the specified type.
   QualType getRValueReferenceType(QualType T) const;
 
-  /// \brief Return the uniqued reference to the type for a member pointer to
+  /// Return the uniqued reference to the type for a member pointer to
   /// the specified type in the specified class.
   ///
   /// The class \p Cls is a \c Type because it could be a dependent name.
   QualType getMemberPointerType(QualType T, const Type *Cls) const;
 
-  /// \brief Return a non-unique reference to the type for a variable array of
+  /// Return a non-unique reference to the type for a variable array of
   /// the specified element type.
   QualType getVariableArrayType(QualType EltTy, Expr *NumElts,
                                 ArrayType::ArraySizeModifier ASM,
                                 unsigned IndexTypeQuals,
                                 SourceRange Brackets) const;
 
-  /// \brief Return a non-unique reference to the type for a dependently-sized
+  /// Return a non-unique reference to the type for a dependently-sized
   /// array of the specified element type.
   ///
   /// FIXME: We will need these to be uniqued, or at least comparable, at some
@@ -1291,29 +1309,34 @@
                                       unsigned IndexTypeQuals,
                                       SourceRange Brackets) const;
 
-  /// \brief Return a unique reference to the type for an incomplete array of
+  /// Return a unique reference to the type for an incomplete array of
   /// the specified element type.
   QualType getIncompleteArrayType(QualType EltTy,
                                   ArrayType::ArraySizeModifier ASM,
                                   unsigned IndexTypeQuals) const;
 
-  /// \brief Return the unique reference to the type for a constant array of
+  /// Return the unique reference to the type for a constant array of
   /// the specified element type.
   QualType getConstantArrayType(QualType EltTy, const llvm::APInt &ArySize,
                                 ArrayType::ArraySizeModifier ASM,
                                 unsigned IndexTypeQuals) const;
 
-  /// \brief Returns a vla type where known sizes are replaced with [*].
+  /// Returns a vla type where known sizes are replaced with [*].
   QualType getVariableArrayDecayedType(QualType Ty) const;
 
-  /// \brief Return the unique reference to a vector type of the specified
+  /// Return the unique reference to a vector type of the specified
   /// element type and size.
   ///
   /// \pre \p VectorType must be a built-in type.
   QualType getVectorType(QualType VectorType, unsigned NumElts,
                          VectorType::VectorKind VecKind) const;
+  /// Return the unique reference to the type for a dependently sized vector of
+  /// the specified element type.
+  QualType getDependentVectorType(QualType VectorType, Expr *SizeExpr,
+                                  SourceLocation AttrLoc,
+                                  VectorType::VectorKind VecKind) const;
 
-  /// \brief Return the unique reference to an extended vector type
+  /// Return the unique reference to an extended vector type
   /// of the specified element type and size.
   ///
   /// \pre \p VectorType must be a built-in type.
@@ -1332,7 +1355,7 @@
                                         Expr *AddrSpaceExpr,
                                         SourceLocation AttrLoc) const;
 
-  /// \brief Return a K&R style C function type like 'int()'.
+  /// Return a K&R style C function type like 'int()'.
   QualType getFunctionNoProtoType(QualType ResultTy,
                                   const FunctionType::ExtInfo &Info) const;
 
@@ -1340,20 +1363,22 @@
     return getFunctionNoProtoType(ResultTy, FunctionType::ExtInfo());
   }
 
-  /// \brief Return a normal function type with a typed argument list.
+  /// Return a normal function type with a typed argument list.
   QualType getFunctionType(QualType ResultTy, ArrayRef<QualType> Args,
                            const FunctionProtoType::ExtProtoInfo &EPI) const {
     return getFunctionTypeInternal(ResultTy, Args, EPI, false);
   }
 
+  QualType adjustStringLiteralBaseType(QualType StrLTy) const;
+
 private:
-  /// \brief Return a normal function type with a typed argument list.
+  /// Return a normal function type with a typed argument list.
   QualType getFunctionTypeInternal(QualType ResultTy, ArrayRef<QualType> Args,
                                    const FunctionProtoType::ExtProtoInfo &EPI,
                                    bool OnlyWantCanonical) const;
 
 public:
-  /// \brief Return the unique reference to the type for the specified type
+  /// Return the unique reference to the type for the specified type
   /// declaration.
   QualType getTypeDeclType(const TypeDecl *Decl,
                            const TypeDecl *PrevDecl = nullptr) const {
@@ -1369,7 +1394,7 @@
     return getTypeDeclTypeSlow(Decl);
   }
 
-  /// \brief Return the unique reference to the type for the specified
+  /// Return the unique reference to the type for the specified
   /// typedef-name decl.
   QualType getTypedefType(const TypedefNameDecl *Decl,
                           QualType Canon = QualType()) const;
@@ -1415,8 +1440,8 @@
   QualType getParenType(QualType NamedType) const;
 
   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
-                             NestedNameSpecifier *NNS,
-                             QualType NamedType) const;
+                             NestedNameSpecifier *NNS, QualType NamedType,
+                             TagDecl *OwnedTagDecl = nullptr) const;
   QualType getDependentNameType(ElaboratedTypeKeyword Keyword,
                                 NestedNameSpecifier *NNS,
                                 const IdentifierInfo *Name,
@@ -1466,105 +1491,105 @@
   bool QIdProtocolsAdoptObjCObjectProtocols(QualType QT,
                                             ObjCInterfaceDecl *IDecl);
 
-  /// \brief Return a ObjCObjectPointerType type for the given ObjCObjectType.
+  /// Return a ObjCObjectPointerType type for the given ObjCObjectType.
   QualType getObjCObjectPointerType(QualType OIT) const;
 
-  /// \brief GCC extension.
+  /// GCC extension.
   QualType getTypeOfExprType(Expr *e) const;
   QualType getTypeOfType(QualType t) const;
 
-  /// \brief C++11 decltype.
+  /// C++11 decltype.
   QualType getDecltypeType(Expr *e, QualType UnderlyingType) const;
 
-  /// \brief Unary type transforms
+  /// Unary type transforms
   QualType getUnaryTransformType(QualType BaseType, QualType UnderlyingType,
                                  UnaryTransformType::UTTKind UKind) const;
 
-  /// \brief C++11 deduced auto type.
+  /// C++11 deduced auto type.
   QualType getAutoType(QualType DeducedType, AutoTypeKeyword Keyword,
                        bool IsDependent) const;
 
-  /// \brief C++11 deduction pattern for 'auto' type.
+  /// C++11 deduction pattern for 'auto' type.
   QualType getAutoDeductType() const;
 
-  /// \brief C++11 deduction pattern for 'auto &&' type.
+  /// C++11 deduction pattern for 'auto &&' type.
   QualType getAutoRRefDeductType() const;
 
-  /// \brief C++17 deduced class template specialization type.
+  /// C++17 deduced class template specialization type.
   QualType getDeducedTemplateSpecializationType(TemplateName Template,
                                                 QualType DeducedType,
                                                 bool IsDependent) const;
 
-  /// \brief Return the unique reference to the type for the specified TagDecl
+  /// Return the unique reference to the type for the specified TagDecl
   /// (struct/union/class/enum) decl.
   QualType getTagDeclType(const TagDecl *Decl) const;
 
-  /// \brief Return the unique type for "size_t" (C99 7.17), defined in
+  /// Return the unique type for "size_t" (C99 7.17), defined in
   /// <stddef.h>.
   ///
   /// The sizeof operator requires this (C99 6.5.3.4p4).
   CanQualType getSizeType() const;
 
-  /// \brief Return the unique signed counterpart of 
+  /// Return the unique signed counterpart of
   /// the integer type corresponding to size_t.
   CanQualType getSignedSizeType() const;
 
-  /// \brief Return the unique type for "intmax_t" (C99 7.18.1.5), defined in
+  /// Return the unique type for "intmax_t" (C99 7.18.1.5), defined in
   /// <stdint.h>.
   CanQualType getIntMaxType() const;
 
-  /// \brief Return the unique type for "uintmax_t" (C99 7.18.1.5), defined in
+  /// Return the unique type for "uintmax_t" (C99 7.18.1.5), defined in
   /// <stdint.h>.
   CanQualType getUIntMaxType() const;
 
-  /// \brief Return the unique wchar_t type available in C++ (and available as
+  /// Return the unique wchar_t type available in C++ (and available as
   /// __wchar_t as a Microsoft extension).
   QualType getWCharType() const { return WCharTy; }
 
-  /// \brief Return the type of wide characters. In C++, this returns the
+  /// Return the type of wide characters. In C++, this returns the
   /// unique wchar_t type. In C99, this returns a type compatible with the type
   /// defined in <stddef.h> as defined by the target.
   QualType getWideCharType() const { return WideCharTy; }
 
-  /// \brief Return the type of "signed wchar_t".
+  /// Return the type of "signed wchar_t".
   ///
   /// Used when in C++, as a GCC extension.
   QualType getSignedWCharType() const;
 
-  /// \brief Return the type of "unsigned wchar_t".
+  /// Return the type of "unsigned wchar_t".
   ///
   /// Used when in C++, as a GCC extension.
   QualType getUnsignedWCharType() const;
 
-  /// \brief In C99, this returns a type compatible with the type
+  /// In C99, this returns a type compatible with the type
   /// defined in <stddef.h> as defined by the target.
   QualType getWIntType() const { return WIntTy; }
 
-  /// \brief Return a type compatible with "intptr_t" (C99 7.18.1.4),
+  /// Return a type compatible with "intptr_t" (C99 7.18.1.4),
   /// as defined by the target.
   QualType getIntPtrType() const;
 
-  /// \brief Return a type compatible with "uintptr_t" (C99 7.18.1.4),
+  /// Return a type compatible with "uintptr_t" (C99 7.18.1.4),
   /// as defined by the target.
   QualType getUIntPtrType() const;
 
-  /// \brief Return the unique type for "ptrdiff_t" (C99 7.17) defined in
+  /// Return the unique type for "ptrdiff_t" (C99 7.17) defined in
   /// <stddef.h>. Pointer - pointer requires this (C99 6.5.6p9).
   QualType getPointerDiffType() const;
 
-  /// \brief Return the unique unsigned counterpart of "ptrdiff_t"
+  /// Return the unique unsigned counterpart of "ptrdiff_t"
   /// integer type. The standard (C11 7.21.6.1p7) refers to this type
   /// in the definition of %tu format specifier.
   QualType getUnsignedPointerDiffType() const;
 
-  /// \brief Return the unique type for "pid_t" defined in
+  /// Return the unique type for "pid_t" defined in
   /// <sys/types.h>. We need this to compute the correct type for vfork().
   QualType getProcessIDType() const;
 
-  /// \brief Return the C structure type used to represent constant CFStrings.
+  /// Return the C structure type used to represent constant CFStrings.
   QualType getCFConstantStringType() const;
 
-  /// \brief Returns the C struct type for objc_super
+  /// Returns the C struct type for objc_super
   QualType getObjCSuperType() const;
   void setObjCSuperType(QualType ST) { ObjCSuperType = ST; }
 
@@ -1593,7 +1618,7 @@
     ObjCNSStringType = T;
   }
 
-  /// \brief Retrieve the type that \c id has been defined to, which may be
+  /// Retrieve the type that \c id has been defined to, which may be
   /// different from the built-in \c id if \c id has been typedef'd.
   QualType getObjCIdRedefinitionType() const {
     if (ObjCIdRedefinitionType.isNull())
@@ -1601,12 +1626,12 @@
     return ObjCIdRedefinitionType;
   }
 
-  /// \brief Set the user-written type that redefines \c id.
+  /// Set the user-written type that redefines \c id.
   void setObjCIdRedefinitionType(QualType RedefType) {
     ObjCIdRedefinitionType = RedefType;
   }
 
-  /// \brief Retrieve the type that \c Class has been defined to, which may be
+  /// Retrieve the type that \c Class has been defined to, which may be
   /// different from the built-in \c Class if \c Class has been typedef'd.
   QualType getObjCClassRedefinitionType() const {
     if (ObjCClassRedefinitionType.isNull())
@@ -1614,12 +1639,12 @@
     return ObjCClassRedefinitionType;
   }
 
-  /// \brief Set the user-written type that redefines 'SEL'.
+  /// Set the user-written type that redefines 'SEL'.
   void setObjCClassRedefinitionType(QualType RedefType) {
     ObjCClassRedefinitionType = RedefType;
   }
 
-  /// \brief Retrieve the type that 'SEL' has been defined to, which may be
+  /// Retrieve the type that 'SEL' has been defined to, which may be
   /// different from the built-in 'SEL' if 'SEL' has been typedef'd.
   QualType getObjCSelRedefinitionType() const {
     if (ObjCSelRedefinitionType.isNull())
@@ -1627,7 +1652,7 @@
     return ObjCSelRedefinitionType;
   }
 
-  /// \brief Set the user-written type that redefines 'SEL'.
+  /// Set the user-written type that redefines 'SEL'.
   void setObjCSelRedefinitionType(QualType RedefType) {
     ObjCSelRedefinitionType = RedefType;
   }
@@ -1687,68 +1712,68 @@
     return TypePackElementName;
   }
 
-  /// \brief Retrieve the Objective-C "instancetype" type, if already known;
+  /// Retrieve the Objective-C "instancetype" type, if already known;
   /// otherwise, returns a NULL type;
   QualType getObjCInstanceType() {
     return getTypeDeclType(getObjCInstanceTypeDecl());
   }
 
-  /// \brief Retrieve the typedef declaration corresponding to the Objective-C
+  /// Retrieve the typedef declaration corresponding to the Objective-C
   /// "instancetype" type.
   TypedefDecl *getObjCInstanceTypeDecl();
 
-  /// \brief Set the type for the C FILE type.
+  /// Set the type for the C FILE type.
   void setFILEDecl(TypeDecl *FILEDecl) { this->FILEDecl = FILEDecl; }
 
-  /// \brief Retrieve the C FILE type.
+  /// Retrieve the C FILE type.
   QualType getFILEType() const {
     if (FILEDecl)
       return getTypeDeclType(FILEDecl);
     return QualType();
   }
 
-  /// \brief Set the type for the C jmp_buf type.
+  /// Set the type for the C jmp_buf type.
   void setjmp_bufDecl(TypeDecl *jmp_bufDecl) {
     this->jmp_bufDecl = jmp_bufDecl;
   }
 
-  /// \brief Retrieve the C jmp_buf type.
+  /// Retrieve the C jmp_buf type.
   QualType getjmp_bufType() const {
     if (jmp_bufDecl)
       return getTypeDeclType(jmp_bufDecl);
     return QualType();
   }
 
-  /// \brief Set the type for the C sigjmp_buf type.
+  /// Set the type for the C sigjmp_buf type.
   void setsigjmp_bufDecl(TypeDecl *sigjmp_bufDecl) {
     this->sigjmp_bufDecl = sigjmp_bufDecl;
   }
 
-  /// \brief Retrieve the C sigjmp_buf type.
+  /// Retrieve the C sigjmp_buf type.
   QualType getsigjmp_bufType() const {
     if (sigjmp_bufDecl)
       return getTypeDeclType(sigjmp_bufDecl);
     return QualType();
   }
 
-  /// \brief Set the type for the C ucontext_t type.
+  /// Set the type for the C ucontext_t type.
   void setucontext_tDecl(TypeDecl *ucontext_tDecl) {
     this->ucontext_tDecl = ucontext_tDecl;
   }
 
-  /// \brief Retrieve the C ucontext_t type.
+  /// Retrieve the C ucontext_t type.
   QualType getucontext_tType() const {
     if (ucontext_tDecl)
       return getTypeDeclType(ucontext_tDecl);
     return QualType();
   }
 
-  /// \brief The result type of logical operations, '<', '>', '!=', etc.
+  /// The result type of logical operations, '<', '>', '!=', etc.
   QualType getLogicalOperationType() const {
     return getLangOpts().CPlusPlus ? BoolTy : IntTy;
   }
 
-  /// \brief Emit the Objective-CC type encoding for the given type \p T into
+  /// Emit the Objective-CC type encoding for the given type \p T into
   /// \p S.
   ///
   /// If \p Field is specified then record field names are also encoded.
@@ -1756,17 +1781,17 @@
                               const FieldDecl *Field=nullptr,
                               QualType *NotEncodedT=nullptr) const;
 
-  /// \brief Emit the Objective-C property type encoding for the given
+  /// Emit the Objective-C property type encoding for the given
   /// type \p T into \p S.
   void getObjCEncodingForPropertyType(QualType T, std::string &S) const;
 
   void getLegacyIntegralTypeEncoding(QualType &t) const;
 
-  /// \brief Put the string version of the type qualifiers \p QT into \p S.
+  /// Put the string version of the type qualifiers \p QT into \p S.
   void getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT,
                                        std::string &S) const;
 
-  /// \brief Emit the encoded type for the function \p Decl into \p S.
+  /// Emit the encoded type for the function \p Decl into \p S.
   ///
   /// This is in the same format as Objective-C method encodings.
   ///
@@ -1774,12 +1799,12 @@
   /// types is incomplete), false otherwise.
   std::string getObjCEncodingForFunctionDecl(const FunctionDecl *Decl) const;
 
-  /// \brief Emit the encoded type for the method declaration \p Decl into
+  /// Emit the encoded type for the method declaration \p Decl into
   /// \p S.
   std::string getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl,
                                            bool Extended = false) const;
 
-  /// \brief Return the encoded type for this block declaration.
+  /// Return the encoded type for this block declaration.
   std::string getObjCEncodingForBlock(const BlockExpr *blockExpr) const;
 
   /// getObjCEncodingForPropertyDecl - Return the encoded type for
@@ -1796,15 +1821,15 @@
                                                   const ObjCPropertyDecl *PD,
                                                   const Decl *Container) const;
 
-  /// \brief Return the size of type \p T for Objective-C encoding purpose,
+  /// Return the size of type \p T for Objective-C encoding purpose,
   /// in characters.
   CharUnits getObjCEncodingTypeSize(QualType T) const;
 
-  /// \brief Retrieve the typedef corresponding to the predefined \c id type
+  /// Retrieve the typedef corresponding to the predefined \c id type
   /// in Objective-C.
   TypedefDecl *getObjCIdDecl() const;
 
-  /// \brief Represents the Objective-CC \c id type.
+  /// Represents the Objective-CC \c id type.
   ///
   /// This is set up lazily, by Sema.  \c id is always a (typedef for a)
   /// pointer type, a pointer to a struct.
@@ -1812,21 +1837,21 @@
     return getTypeDeclType(getObjCIdDecl());
   }
 
-  /// \brief Retrieve the typedef corresponding to the predefined 'SEL' type
+  /// Retrieve the typedef corresponding to the predefined 'SEL' type
   /// in Objective-C.
   TypedefDecl *getObjCSelDecl() const;
 
-  /// \brief Retrieve the type that corresponds to the predefined Objective-C
+  /// Retrieve the type that corresponds to the predefined Objective-C
   /// 'SEL' type.
   QualType getObjCSelType() const {
     return getTypeDeclType(getObjCSelDecl());
   }
 
-  /// \brief Retrieve the typedef declaration corresponding to the predefined
+  /// Retrieve the typedef declaration corresponding to the predefined
   /// Objective-C 'Class' type.
   TypedefDecl *getObjCClassDecl() const;
 
-  /// \brief Represents the Objective-C \c Class type.
+  /// Represents the Objective-C \c Class type.
   ///
   /// This is set up lazily, by Sema.  \c Class is always a (typedef for a)
   /// pointer type, a pointer to a struct.
@@ -1834,40 +1859,40 @@
     return getTypeDeclType(getObjCClassDecl());
   }
 
-  /// \brief Retrieve the Objective-C class declaration corresponding to
+  /// Retrieve the Objective-C class declaration corresponding to
   /// the predefined \c Protocol class.
   ObjCInterfaceDecl *getObjCProtocolDecl() const;
 
-  /// \brief Retrieve declaration of 'BOOL' typedef
+  /// Retrieve declaration of 'BOOL' typedef
   TypedefDecl *getBOOLDecl() const {
     return BOOLDecl;
   }
 
-  /// \brief Save declaration of 'BOOL' typedef
+  /// Save declaration of 'BOOL' typedef
   void setBOOLDecl(TypedefDecl *TD) {
     BOOLDecl = TD;
   }
 
-  /// \brief type of 'BOOL' type.
+  /// type of 'BOOL' type.
   QualType getBOOLType() const {
     return getTypeDeclType(getBOOLDecl());
   }
 
-  /// \brief Retrieve the type of the Objective-C \c Protocol class.
+  /// Retrieve the type of the Objective-C \c Protocol class.
   QualType getObjCProtoType() const {
     return getObjCInterfaceType(getObjCProtocolDecl());
   }
 
-  /// \brief Retrieve the C type declaration corresponding to the predefined
+  /// Retrieve the C type declaration corresponding to the predefined
   /// \c __builtin_va_list type.
   TypedefDecl *getBuiltinVaListDecl() const;
 
-  /// \brief Retrieve the type of the \c __builtin_va_list type.
+  /// Retrieve the type of the \c __builtin_va_list type.
   QualType getBuiltinVaListType() const {
     return getTypeDeclType(getBuiltinVaListDecl());
   }
 
-  /// \brief Retrieve the C type declaration corresponding to the predefined
+  /// Retrieve the C type declaration corresponding to the predefined
   /// \c __va_list_tag type used to help define the \c __builtin_va_list type
   /// for some targets.
   Decl *getVaListTagDecl() const;
@@ -1881,18 +1906,22 @@
     return getTypeDeclType(getBuiltinMSVaListDecl());
   }
 
-  /// \brief Return a type with additional \c const, \c volatile, or
+  /// Return whether a declaration to a builtin is allowed to be
+  /// overloaded/redeclared.
+  bool canBuiltinBeRedeclared(const FunctionDecl *) const;
+
+  /// Return a type with additional \c const, \c volatile, or
   /// \c restrict qualifiers.
   QualType getCVRQualifiedType(QualType T, unsigned CVR) const {
     return getQualifiedType(T, Qualifiers::fromCVRMask(CVR));
   }
 
-  /// \brief Un-split a SplitQualType.
+  /// Un-split a SplitQualType.
   QualType getQualifiedType(SplitQualType split) const {
     return getQualifiedType(split.Ty, split.Quals);
   }
 
-  /// \brief Return a type with additional qualifiers.
+  /// Return a type with additional qualifiers.
   QualType getQualifiedType(QualType T, Qualifiers Qs) const {
     if (!Qs.hasNonFastQualifiers())
       return T.withFastQualifiers(Qs.getFastQualifiers());
@@ -1901,14 +1930,14 @@
     return getExtQualType(Ptr, Qc);
   }
 
-  /// \brief Return a type with additional qualifiers.
+  /// Return a type with additional qualifiers.
   QualType getQualifiedType(const Type *T, Qualifiers Qs) const {
     if (!Qs.hasNonFastQualifiers())
       return QualType(T, Qs.getFastQualifiers());
     return getExtQualType(T, Qs);
   }
 
-  /// \brief Return a type with the given lifetime qualifier.
+  /// Return a type with the given lifetime qualifier.
   ///
   /// \pre Neither type.ObjCLifetime() nor \p lifetime may be \c OCL_None.
   QualType getLifetimeQualifiedType(QualType type,
@@ -1932,6 +1961,12 @@
     return getQualifiedType(type.getUnqualifiedType(), Qs);
   }
 
+  unsigned char getFixedPointScale(QualType Ty) const;
+  unsigned char getFixedPointIBits(QualType Ty) const;
+  FixedPointSemantics getFixedPointSemantics(QualType Ty) const;
+  APFixedPoint getFixedPointMax(QualType Ty) const;
+  APFixedPoint getFixedPointMin(QualType Ty) const;
+
   DeclarationNameInfo getNameForTemplate(TemplateName Name,
                                          SourceLocation NameLoc) const;
 
@@ -1965,7 +2000,7 @@
     GE_Missing_ucontext
   };
 
-  /// \brief Return the type for the specified builtin.
+  /// Return the type for the specified builtin.
   ///
   /// If \p IntegerConstantArgs is non-null, it is filled in with a bitmask of
   /// arguments to the builtin that are required to be integer constant
@@ -1973,6 +2008,10 @@
   QualType GetBuiltinType(unsigned ID, GetBuiltinTypeError &Error,
                           unsigned *IntegerConstantArgs = nullptr) const;
 
+  /// Types and expressions required to build C++2a three-way comparisons
+  /// using operator<=>, including the values return by builtin <=> operators.
+  ComparisonCategories CompCategories;
+
 private:
   CanQualType getFromTargetType(unsigned Type) const;
   TypeInfo getTypeInfoImpl(const Type *T) const;
@@ -1982,18 +2021,18 @@
   //===--------------------------------------------------------------------===//
 
 public:
-  /// \brief Return one of the GCNone, Weak or Strong Objective-C garbage
+  /// Return one of the GCNone, Weak or Strong Objective-C garbage
   /// collection attributes.
   Qualifiers::GC getObjCGCAttrKind(QualType Ty) const;
 
-  /// \brief Return true if the given vector types are of the same unqualified
+  /// Return true if the given vector types are of the same unqualified
   /// type or if they are equivalent to the same GCC vector type.
   ///
   /// \note This ignores whether they are target-specific (AltiVec or Neon)
   /// types.
   bool areCompatibleVectorTypes(QualType FirstVec, QualType SecondVec);
 
-  /// \brief Return true if this is an \c NSObject object with its \c NSObject
+  /// Return true if this is an \c NSObject object with its \c NSObject
   /// attribute set.
   static bool isObjCNSObjectType(QualType Ty) {
     return Ty->isObjCNSObjectType();
@@ -2003,52 +2042,68 @@
   //                         Type Sizing and Analysis
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the APFloat 'semantics' for the specified scalar floating
+  /// Return the APFloat 'semantics' for the specified scalar floating
   /// point type.
   const llvm::fltSemantics &getFloatTypeSemantics(QualType T) const;
 
-  /// \brief Get the size and alignment of the specified complete type in bits.
+  /// Get the size and alignment of the specified complete type in bits.
   TypeInfo getTypeInfo(const Type *T) const;
   TypeInfo getTypeInfo(QualType T) const { return getTypeInfo(T.getTypePtr()); }
 
-  /// \brief Get default simd alignment of the specified complete type in bits.
+  /// Get default simd alignment of the specified complete type in bits.
   unsigned getOpenMPDefaultSimdAlign(QualType T) const;
 
-  /// \brief Return the size of the specified (complete) type \p T, in bits.
+  /// Return the size of the specified (complete) type \p T, in bits.
   uint64_t getTypeSize(QualType T) const { return getTypeInfo(T).Width; }
   uint64_t getTypeSize(const Type *T) const { return getTypeInfo(T).Width; }
 
-  /// \brief Return the size of the character type, in bits.
+  /// Return the size of the character type, in bits.
   uint64_t getCharWidth() const {
     return getTypeSize(CharTy);
   }
 
-  /// \brief Convert a size in bits to a size in characters.
+  /// Convert a size in bits to a size in characters.
   CharUnits toCharUnitsFromBits(int64_t BitSize) const;
 
-  /// \brief Convert a size in characters to a size in bits.
+  /// Convert a size in characters to a size in bits.
   int64_t toBits(CharUnits CharSize) const;
 
-  /// \brief Return the size of the specified (complete) type \p T, in
+  /// Return the size of the specified (complete) type \p T, in
   /// characters.
   CharUnits getTypeSizeInChars(QualType T) const;
   CharUnits getTypeSizeInChars(const Type *T) const;
 
-  /// \brief Return the ABI-specified alignment of a (complete) type \p T, in
+  /// Return the ABI-specified alignment of a (complete) type \p T, in
   /// bits.
   unsigned getTypeAlign(QualType T) const { return getTypeInfo(T).Align; }
   unsigned getTypeAlign(const Type *T) const { return getTypeInfo(T).Align; }
 
-  /// \brief Return the ABI-specified alignment of a type, in bits, or 0 if
+  /// Return the ABI-specified natural alignment of a (complete) type \p T,
+  /// before alignment adjustments, in bits.
+  ///
+  /// This alignment is curently used only by ARM and AArch64 when passing
+  /// arguments of a composite type.
+  unsigned getTypeUnadjustedAlign(QualType T) const {
+    return getTypeUnadjustedAlign(T.getTypePtr());
+  }
+  unsigned getTypeUnadjustedAlign(const Type *T) const;
+
+  /// Return the ABI-specified alignment of a type, in bits, or 0 if
   /// the type is incomplete and we cannot determine the alignment (for
   /// example, from alignment attributes).
   unsigned getTypeAlignIfKnown(QualType T) const;
 
-  /// \brief Return the ABI-specified alignment of a (complete) type \p T, in
+  /// Return the ABI-specified alignment of a (complete) type \p T, in
   /// characters.
   CharUnits getTypeAlignInChars(QualType T) const;
   CharUnits getTypeAlignInChars(const Type *T) const;
 
+  /// getTypeUnadjustedAlignInChars - Return the ABI-specified alignment of a type,
+  /// in characters, before alignment adjustments. This method does not work on
+  /// incomplete types.
+  CharUnits getTypeUnadjustedAlignInChars(QualType T) const;
+  CharUnits getTypeUnadjustedAlignInChars(const Type *T) const;
+
   // getTypeInfoDataSizeInChars - Return the size of a type, in chars. If the
   // type is a record, its data size is returned.
   std::pair<CharUnits, CharUnits> getTypeInfoDataSizeInChars(QualType T) const;
@@ -2056,31 +2111,31 @@
   std::pair<CharUnits, CharUnits> getTypeInfoInChars(const Type *T) const;
   std::pair<CharUnits, CharUnits> getTypeInfoInChars(QualType T) const;
 
-  /// \brief Determine if the alignment the type has was required using an
+  /// Determine if the alignment the type has was required using an
   /// alignment attribute.
   bool isAlignmentRequired(const Type *T) const;
   bool isAlignmentRequired(QualType T) const;
 
-  /// \brief Return the "preferred" alignment of the specified type \p T for
+  /// Return the "preferred" alignment of the specified type \p T for
   /// the current target, in bits.
   ///
   /// This can be different than the ABI alignment in cases where it is
   /// beneficial for performance to overalign a data type.
   unsigned getPreferredTypeAlign(const Type *T) const;
 
-  /// \brief Return the default alignment for __attribute__((aligned)) on
+  /// Return the default alignment for __attribute__((aligned)) on
   /// this target, to be used if no alignment value is specified.
   unsigned getTargetDefaultAlignForAttributeAligned() const;
 
-  /// \brief Return the alignment in bits that should be given to a
+  /// Return the alignment in bits that should be given to a
   /// global variable with type \p T.
   unsigned getAlignOfGlobalVar(QualType T) const;
 
-  /// \brief Return the alignment in characters that should be given to a
+  /// Return the alignment in characters that should be given to a
   /// global variable with type \p T.
   CharUnits getAlignOfGlobalVarInChars(QualType T) const;
 
-  /// \brief Return a conservative estimate of the alignment of the specified
+  /// Return a conservative estimate of the alignment of the specified
   /// decl \p D.
   ///
   /// \pre \p D must not be a bitfield type, as bitfields do not have a valid
@@ -2092,12 +2147,12 @@
   /// pointers and large arrays get extra alignment.
   CharUnits getDeclAlign(const Decl *D, bool ForAlignof = false) const;
 
-  /// \brief Get or compute information about the layout of the specified
+  /// Get or compute information about the layout of the specified
   /// record (struct/union/class) \p D, which indicates its size and field
   /// position information.
   const ASTRecordLayout &getASTRecordLayout(const RecordDecl *D) const;
 
-  /// \brief Get or compute information about the layout of the specified
+  /// Get or compute information about the layout of the specified
   /// Objective-C interface.
   const ASTRecordLayout &getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D)
     const;
@@ -2105,14 +2160,14 @@
   void DumpRecordLayout(const RecordDecl *RD, raw_ostream &OS,
                         bool Simple = false) const;
 
-  /// \brief Get or compute information about the layout of the specified
+  /// Get or compute information about the layout of the specified
   /// Objective-C implementation.
   ///
   /// This may differ from the interface if synthesized ivars are present.
   const ASTRecordLayout &
   getASTObjCImplementationLayout(const ObjCImplementationDecl *D) const;
 
-  /// \brief Get our current best idea for the key function of the
+  /// Get our current best idea for the key function of the
   /// given record decl, or nullptr if there isn't one.
   ///
   /// The key function is, according to the Itanium C++ ABI section 5.2.3:
@@ -2124,7 +2179,7 @@
   /// the result of this computation can change.
   const CXXMethodDecl *getCurrentKeyFunction(const CXXRecordDecl *RD);
 
-  /// \brief Observe that the given method cannot be a key function.
+  /// Observe that the given method cannot be a key function.
   /// Checks the key-function cache for the method's class and clears it
   /// if matches the given declaration.
   ///
@@ -2166,7 +2221,7 @@
   void CollectInheritedProtocols(const Decl *CDecl,
                           llvm::SmallPtrSet<ObjCProtocolDecl*, 8> &Protocols);
 
-  /// \brief Return true if the specified type has unique object representations
+  /// Return true if the specified type has unique object representations
   /// according to (C++17 [meta.unary.prop]p9)
   bool hasUniqueObjectRepresentations(QualType Ty) const;
 
@@ -2174,7 +2229,7 @@
   //                            Type Operators
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the canonical (structural) type corresponding to the
+  /// Return the canonical (structural) type corresponding to the
   /// specified potentially non-canonical type \p T.
   ///
   /// The non-canonical version of a type may have many "decorated" versions of
@@ -2190,14 +2245,14 @@
     return T->getCanonicalTypeInternal().getTypePtr();
   }
 
-  /// \brief Return the canonical parameter type corresponding to the specific
+  /// Return the canonical parameter type corresponding to the specific
   /// potentially non-canonical one.
   ///
   /// Qualifiers are stripped off, functions are turned into function
   /// pointers, and arrays decay one level into pointers.
   CanQualType getCanonicalParamType(QualType T) const;
 
-  /// \brief Determine whether the given types \p T1 and \p T2 are equivalent.
+  /// Determine whether the given types \p T1 and \p T2 are equivalent.
   bool hasSameType(QualType T1, QualType T2) const {
     return getCanonicalType(T1) == getCanonicalType(T2);
   }
@@ -2205,7 +2260,7 @@
     return getCanonicalType(T1) == getCanonicalType(T2);
   }
 
-  /// \brief Return this type as a completely-unqualified array type,
+  /// Return this type as a completely-unqualified array type,
   /// capturing the qualifiers in \p Quals.
   ///
   /// This will remove the minimal amount of sugaring from the types, similar
@@ -2220,7 +2275,7 @@
   /// that corresponds to it. Otherwise, returns T.getUnqualifiedType().
   QualType getUnqualifiedArrayType(QualType T, Qualifiers &Quals);
 
-  /// \brief Determine whether the given types are equivalent after
+  /// Determine whether the given types are equivalent after
   /// cvr-qualifiers have been removed.
   bool hasSameUnqualifiedType(QualType T1, QualType T2) const {
     return getCanonicalType(T1).getTypePtr() ==
@@ -2260,9 +2315,22 @@
   bool ObjCMethodsAreEqual(const ObjCMethodDecl *MethodDecl,
                            const ObjCMethodDecl *MethodImp);
 
-  bool UnwrapSimilarPointerTypes(QualType &T1, QualType &T2);
+  bool UnwrapSimilarTypes(QualType &T1, QualType &T2);
+  bool UnwrapSimilarArrayTypes(QualType &T1, QualType &T2);
 
-  /// \brief Retrieves the "canonical" nested name specifier for a
+  /// Determine if two types are similar, according to the C++ rules. That is,
+  /// determine if they are the same other than qualifiers on the initial
+  /// sequence of pointer / pointer-to-member / array (and in Clang, object
+  /// pointer) types and their element types.
+  ///
+  /// Clang offers a number of qualifiers in addition to the C++ qualifiers;
+  /// those qualifiers are also ignored in the 'similarity' check.
+  bool hasSimilarType(QualType T1, QualType T2);
+
+  /// Determine if two types are similar, ignoring only CVR qualifiers.
+  bool hasCvrSimilarType(QualType T1, QualType T2);
+
+  /// Retrieves the "canonical" nested name specifier for a
   /// given nested name specifier.
   ///
   /// The canonical nested name specifier is a nested name specifier
@@ -2288,11 +2356,11 @@
   NestedNameSpecifier *
   getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS) const;
 
-  /// \brief Retrieves the default calling convention for the current target.
+  /// Retrieves the default calling convention for the current target.
   CallingConv getDefaultCallingConvention(bool IsVariadic,
                                           bool IsCXXMethod) const;
 
-  /// \brief Retrieves the "canonical" template name that refers to a
+  /// Retrieves the "canonical" template name that refers to a
   /// given template.
   ///
   /// The canonical template name is the simplest expression that can
@@ -2312,11 +2380,11 @@
   /// types, values, and templates.
   TemplateName getCanonicalTemplateName(TemplateName Name) const;
 
-  /// \brief Determine whether the given template names refer to the same
+  /// Determine whether the given template names refer to the same
   /// template.
   bool hasSameTemplateName(TemplateName X, TemplateName Y);
 
-  /// \brief Retrieve the "canonical" template argument.
+  /// Retrieve the "canonical" template argument.
   ///
   /// The canonical template argument is the simplest template argument
   /// (which may be a type, value, expression, or declaration) that
@@ -2343,33 +2411,33 @@
     return dyn_cast_or_null<DependentSizedArrayType>(getAsArrayType(T));
   }
 
-  /// \brief Return the innermost element type of an array type.
+  /// Return the innermost element type of an array type.
   ///
   /// For example, will return "int" for int[m][n]
   QualType getBaseElementType(const ArrayType *VAT) const;
 
-  /// \brief Return the innermost element type of a type (which needn't
+  /// Return the innermost element type of a type (which needn't
   /// actually be an array type).
   QualType getBaseElementType(QualType QT) const;
 
-  /// \brief Return number of constant array elements.
+  /// Return number of constant array elements.
   uint64_t getConstantArrayElementCount(const ConstantArrayType *CA) const;
 
-  /// \brief Perform adjustment on the parameter type of a function.
+  /// Perform adjustment on the parameter type of a function.
   ///
   /// This routine adjusts the given parameter type @p T to the actual
   /// parameter type used by semantic analysis (C99 6.7.5.3p[7,8],
   /// C++ [dcl.fct]p3). The adjusted parameter type is returned.
   QualType getAdjustedParameterType(QualType T) const;
 
-  /// \brief Retrieve the parameter type as adjusted for use in the signature
+  /// Retrieve the parameter type as adjusted for use in the signature
   /// of a function, decaying array and function types and removing top-level
   /// cv-qualifiers.
   QualType getSignatureParameterType(QualType T) const;
 
   QualType getExceptionObjectType(QualType T) const;
 
-  /// \brief Return the properly qualified result of decaying the specified
+  /// Return the properly qualified result of decaying the specified
   /// array type to a pointer.
   ///
   /// This operation is non-trivial when handling typedefs etc.  The canonical
@@ -2379,35 +2447,35 @@
   /// See C99 6.7.5.3p7 and C99 6.3.2.1p3.
   QualType getArrayDecayedType(QualType T) const;
 
-  /// \brief Return the type that \p PromotableType will promote to: C99
+  /// Return the type that \p PromotableType will promote to: C99
   /// 6.3.1.1p2, assuming that \p PromotableType is a promotable integer type.
   QualType getPromotedIntegerType(QualType PromotableType) const;
 
-  /// \brief Recurses in pointer/array types until it finds an Objective-C
+  /// Recurses in pointer/array types until it finds an Objective-C
   /// retainable type and returns its ownership.
   Qualifiers::ObjCLifetime getInnerObjCOwnership(QualType T) const;
 
-  /// \brief Whether this is a promotable bitfield reference according
+  /// Whether this is a promotable bitfield reference according
   /// to C99 6.3.1.1p2, bullet 2 (and GCC extensions).
   ///
   /// \returns the type this bit-field will promote to, or NULL if no
   /// promotion occurs.
   QualType isPromotableBitField(Expr *E) const;
 
-  /// \brief Return the highest ranked integer type, see C99 6.3.1.8p1.
+  /// Return the highest ranked integer type, see C99 6.3.1.8p1.
   ///
   /// If \p LHS > \p RHS, returns 1.  If \p LHS == \p RHS, returns 0.  If
   /// \p LHS < \p RHS, return -1.
   int getIntegerTypeOrder(QualType LHS, QualType RHS) const;
 
-  /// \brief Compare the rank of the two specified floating point types,
+  /// Compare the rank of the two specified floating point types,
   /// ignoring the domain of the type (i.e. 'double' == '_Complex double').
   ///
   /// If \p LHS > \p RHS, returns 1.  If \p LHS == \p RHS, returns 0.  If
   /// \p LHS < \p RHS, return -1.
   int getFloatingTypeOrder(QualType LHS, QualType RHS) const;
 
-  /// \brief Return a real floating point or a complex type (based on
+  /// Return a real floating point or a complex type (based on
   /// \p typeDomain/\p typeSize).
   ///
   /// \param typeDomain a real floating point or complex type.
@@ -2425,6 +2493,8 @@
 
   unsigned getTargetAddressSpace(LangAS AS) const;
 
+  LangAS getLangASForBuiltinAddressSpace(unsigned AS) const;
+
   /// Get target-dependent integer value for null pointer which is used for
   /// constant folding.
   uint64_t getTargetNullPointerValue(QualType QT) const;
@@ -2532,13 +2602,20 @@
   // Per C99 6.2.5p6, for every signed integer type, there is a corresponding
   // unsigned integer type.  This method takes a signed type, and returns the
   // corresponding unsigned integer type.
+  // With the introduction of fixed point types in ISO N1169, this method also
+  // accepts fixed point types and returns the corresponding unsigned type for
+  // a given fixed point type.
   QualType getCorrespondingUnsignedType(QualType T) const;
 
+  // Per ISO N1169, this method accepts fixed point types and returns the
+  // corresponding saturated type for a given fixed point type.
+  QualType getCorrespondingSaturatedType(QualType Ty) const;
+
   //===--------------------------------------------------------------------===//
   //                    Integer Values
   //===--------------------------------------------------------------------===//
 
-  /// \brief Make an APSInt of the appropriate width and signedness for the
+  /// Make an APSInt of the appropriate width and signedness for the
   /// given \p Value and integer \p Type.
   llvm::APSInt MakeIntValue(uint64_t Value, QualType Type) const {
     // If Type is a signed integer type larger than 64 bits, we need to be sure
@@ -2553,28 +2630,28 @@
 
   bool isSentinelNullExpr(const Expr *E);
 
-  /// \brief Get the implementation of the ObjCInterfaceDecl \p D, or nullptr if
+  /// Get the implementation of the ObjCInterfaceDecl \p D, or nullptr if
   /// none exists.
   ObjCImplementationDecl *getObjCImplementation(ObjCInterfaceDecl *D);
 
-  /// \brief Get the implementation of the ObjCCategoryDecl \p D, or nullptr if
+  /// Get the implementation of the ObjCCategoryDecl \p D, or nullptr if
   /// none exists.
   ObjCCategoryImplDecl *getObjCImplementation(ObjCCategoryDecl *D);
 
-  /// \brief Return true if there is at least one \@implementation in the TU.
+  /// Return true if there is at least one \@implementation in the TU.
   bool AnyObjCImplementation() {
     return !ObjCImpls.empty();
   }
 
-  /// \brief Set the implementation of ObjCInterfaceDecl.
+  /// Set the implementation of ObjCInterfaceDecl.
   void setObjCImplementation(ObjCInterfaceDecl *IFaceD,
                              ObjCImplementationDecl *ImplD);
 
-  /// \brief Set the implementation of ObjCCategoryDecl.
+  /// Set the implementation of ObjCCategoryDecl.
   void setObjCImplementation(ObjCCategoryDecl *CatD,
                              ObjCCategoryImplDecl *ImplD);
 
-  /// \brief Get the duplicate declaration of a ObjCMethod in the same
+  /// Get the duplicate declaration of a ObjCMethod in the same
   /// interface, or null if none exists.
   const ObjCMethodDecl *
   getObjCMethodRedeclaration(const ObjCMethodDecl *MD) const;
@@ -2582,19 +2659,19 @@
   void setObjCMethodRedeclaration(const ObjCMethodDecl *MD,
                                   const ObjCMethodDecl *Redecl);
 
-  /// \brief Returns the Objective-C interface that \p ND belongs to if it is
+  /// Returns the Objective-C interface that \p ND belongs to if it is
   /// an Objective-C method/property/ivar etc. that is part of an interface,
   /// otherwise returns null.
   const ObjCInterfaceDecl *getObjContainingInterface(const NamedDecl *ND) const;
 
-  /// \brief Set the copy inialization expression of a block var decl.
+  /// Set the copy inialization expression of a block var decl.
   void setBlockVarCopyInits(VarDecl*VD, Expr* Init);
 
-  /// \brief Get the copy initialization expression of the VarDecl \p VD, or
+  /// Get the copy initialization expression of the VarDecl \p VD, or
   /// nullptr if none exists.
   Expr *getBlockVarCopyInits(const VarDecl* VD);
 
-  /// \brief Allocate an uninitialized TypeSourceInfo.
+  /// Allocate an uninitialized TypeSourceInfo.
   ///
   /// The caller should initialize the memory held by TypeSourceInfo using
   /// the TypeLoc wrappers.
@@ -2607,14 +2684,14 @@
   /// should be calculated based on the type.
   TypeSourceInfo *CreateTypeSourceInfo(QualType T, unsigned Size = 0) const;
 
-  /// \brief Allocate a TypeSourceInfo where all locations have been
+  /// Allocate a TypeSourceInfo where all locations have been
   /// initialized to a given location, which defaults to the empty
   /// location.
   TypeSourceInfo *
   getTrivialTypeSourceInfo(QualType T,
                            SourceLocation Loc = SourceLocation()) const;
 
-  /// \brief Add a deallocation callback that will be invoked when the
+  /// Add a deallocation callback that will be invoked when the
   /// ASTContext is destroyed.
   ///
   /// \param Callback A callback function that will be invoked on destruction.
@@ -2636,7 +2713,7 @@
   GVALinkage GetGVALinkageForFunction(const FunctionDecl *FD) const;
   GVALinkage GetGVALinkageForVariable(const VarDecl *VD);
 
-  /// \brief Determines if the decl can be CodeGen'ed or deserialized from PCH
+  /// Determines if the decl can be CodeGen'ed or deserialized from PCH
   /// lazily, only when used; this is only relevant for function or file scoped
   /// var definitions.
   ///
@@ -2644,7 +2721,7 @@
   /// it is not used.
   bool DeclMustBeEmitted(const Decl *D);
 
-  /// \brief Visits all versions of a multiversioned function with the passed
+  /// Visits all versions of a multiversioned function with the passed
   /// predicate.
   void forEachMultiversionedFunctionVersion(
       const FunctionDecl *FD,
@@ -2670,21 +2747,21 @@
   void setStaticLocalNumber(const VarDecl *VD, unsigned Number);
   unsigned getStaticLocalNumber(const VarDecl *VD) const;
 
-  /// \brief Retrieve the context for computing mangling numbers in the given
+  /// Retrieve the context for computing mangling numbers in the given
   /// DeclContext.
   MangleNumberingContext &getManglingNumberContext(const DeclContext *DC);
 
   std::unique_ptr<MangleNumberingContext> createMangleNumberingContext() const;
 
-  /// \brief Used by ParmVarDecl to store on the side the
+  /// Used by ParmVarDecl to store on the side the
   /// index of the parameter when it exceeds the size of the normal bitfield.
   void setParameterIndex(const ParmVarDecl *D, unsigned index);
 
-  /// \brief Used by ParmVarDecl to retrieve on the side the
+  /// Used by ParmVarDecl to retrieve on the side the
   /// index of the parameter when it exceeds the size of the normal bitfield.
   unsigned getParameterIndex(const ParmVarDecl *D) const;
 
-  /// \brief Get the storage for the constant value of a materialized temporary
+  /// Get the storage for the constant value of a materialized temporary
   /// of static storage duration.
   APValue *getMaterializedTemporaryValue(const MaterializeTemporaryExpr *E,
                                          bool MayCreate);
@@ -2693,50 +2770,50 @@
   //                    Statistics
   //===--------------------------------------------------------------------===//
 
-  /// \brief The number of implicitly-declared default constructors.
+  /// The number of implicitly-declared default constructors.
   static unsigned NumImplicitDefaultConstructors;
 
-  /// \brief The number of implicitly-declared default constructors for
+  /// The number of implicitly-declared default constructors for
   /// which declarations were built.
   static unsigned NumImplicitDefaultConstructorsDeclared;
 
-  /// \brief The number of implicitly-declared copy constructors.
+  /// The number of implicitly-declared copy constructors.
   static unsigned NumImplicitCopyConstructors;
 
-  /// \brief The number of implicitly-declared copy constructors for
+  /// The number of implicitly-declared copy constructors for
   /// which declarations were built.
   static unsigned NumImplicitCopyConstructorsDeclared;
 
-  /// \brief The number of implicitly-declared move constructors.
+  /// The number of implicitly-declared move constructors.
   static unsigned NumImplicitMoveConstructors;
 
-  /// \brief The number of implicitly-declared move constructors for
+  /// The number of implicitly-declared move constructors for
   /// which declarations were built.
   static unsigned NumImplicitMoveConstructorsDeclared;
 
-  /// \brief The number of implicitly-declared copy assignment operators.
+  /// The number of implicitly-declared copy assignment operators.
   static unsigned NumImplicitCopyAssignmentOperators;
 
-  /// \brief The number of implicitly-declared copy assignment operators for
+  /// The number of implicitly-declared copy assignment operators for
   /// which declarations were built.
   static unsigned NumImplicitCopyAssignmentOperatorsDeclared;
 
-  /// \brief The number of implicitly-declared move assignment operators.
+  /// The number of implicitly-declared move assignment operators.
   static unsigned NumImplicitMoveAssignmentOperators;
 
-  /// \brief The number of implicitly-declared move assignment operators for
+  /// The number of implicitly-declared move assignment operators for
   /// which declarations were built.
   static unsigned NumImplicitMoveAssignmentOperatorsDeclared;
 
-  /// \brief The number of implicitly-declared destructors.
+  /// The number of implicitly-declared destructors.
   static unsigned NumImplicitDestructors;
 
-  /// \brief The number of implicitly-declared destructors for which
+  /// The number of implicitly-declared destructors for which
   /// declarations were built.
   static unsigned NumImplicitDestructorsDeclared;
 
 public:
-  /// \brief Initialize built-in types.
+  /// Initialize built-in types.
   ///
   /// This routine may only be invoked once for a given ASTContext object.
   /// It is normally invoked after ASTContext construction.
@@ -2773,7 +2850,7 @@
                                          QualType T, std::string& S,
                                          bool Extended) const;
 
-  /// \brief Returns true if this is an inline-initialized static data member
+  /// Returns true if this is an inline-initialized static data member
   /// which is treated as a definition for MSVC compatibility.
   bool isMSStaticDataMemberInlineDefinition(const VarDecl *VD) const;
 
@@ -2791,7 +2868,7 @@
     Strong
   };
 
-  /// \brief Determine whether a definition of this inline variable should
+  /// Determine whether a definition of this inline variable should
   /// be treated as a weak or strong definition. For compatibility with
   /// C++14 and before, for a constexpr static data member, if there is an
   /// out-of-line declaration of the member, we may promote it from weak to
@@ -2807,7 +2884,7 @@
   getObjCLayout(const ObjCInterfaceDecl *D,
                 const ObjCImplementationDecl *Impl) const;
 
-  /// \brief A set of deallocations that should be performed when the
+  /// A set of deallocations that should be performed when the
   /// ASTContext is destroyed.
   // FIXME: We really should have a better mechanism in the ASTContext to
   // manage running destructors for types which do variable sized allocation
@@ -2858,13 +2935,13 @@
   llvm::StringMap<SectionInfo> SectionInfos;
 };
 
-/// \brief Utility function for constructing a nullary selector.
+/// Utility function for constructing a nullary selector.
 inline Selector GetNullarySelector(StringRef name, ASTContext &Ctx) {
   IdentifierInfo* II = &Ctx.Idents.get(name);
   return Ctx.Selectors.getSelector(0, &II);
 }
 
-/// \brief Utility function for constructing an unary selector.
+/// Utility function for constructing an unary selector.
 inline Selector GetUnarySelector(StringRef name, ASTContext &Ctx) {
   IdentifierInfo* II = &Ctx.Idents.get(name);
   return Ctx.Selectors.getSelector(1, &II);
@@ -2874,7 +2951,7 @@
 
 // operator new and delete aren't allowed inside namespaces.
 
-/// @brief Placement new for using the ASTContext's allocator.
+/// Placement new for using the ASTContext's allocator.
 ///
 /// This placement form of operator new uses the ASTContext's allocator for
 /// obtaining memory.
@@ -2907,7 +2984,7 @@
   return C.Allocate(Bytes, Alignment);
 }
 
-/// @brief Placement delete companion to the new above.
+/// Placement delete companion to the new above.
 ///
 /// This operator is just a companion to the new above. There is no way of
 /// invoking it directly; see the new operator for more details. This operator
@@ -2945,7 +3022,7 @@
   return C.Allocate(Bytes, Alignment);
 }
 
-/// @brief Placement delete[] companion to the new[] above.
+/// Placement delete[] companion to the new[] above.
 ///
 /// This operator is just a companion to the new[] above. There is no way of
 /// invoking it directly; see the new[] operator for more details. This operator
@@ -2955,7 +3032,7 @@
   C.Deallocate(Ptr);
 }
 
-/// \brief Create the representation of a LazyGenerationalUpdatePtr.
+/// Create the representation of a LazyGenerationalUpdatePtr.
 template <typename Owner, typename T,
           void (clang::ExternalASTSource::*Update)(Owner)>
 typename clang::LazyGenerationalUpdatePtr<Owner, T, Update>::ValueType
diff --git a/linux-x64/clang/include/clang/AST/ASTDiagnostic.h b/linux-x64/clang/include/clang/AST/ASTDiagnostic.h
index 27c85e6..2534272 100644
--- a/linux-x64/clang/include/clang/AST/ASTDiagnostic.h
+++ b/linux-x64/clang/include/clang/AST/ASTDiagnostic.h
@@ -23,11 +23,11 @@
       NUM_BUILTIN_AST_DIAGNOSTICS
     };
   }  // end namespace diag
-  
-  /// \brief DiagnosticsEngine argument formatting function for diagnostics that
+
+  /// DiagnosticsEngine argument formatting function for diagnostics that
   /// involve AST nodes.
   ///
-  /// This function formats diagnostic arguments for various AST nodes, 
+  /// This function formats diagnostic arguments for various AST nodes,
   /// including types, declaration names, nested name specifiers, and
   /// declaration contexts, into strings that can be printed as part of
   /// diagnostics. It is meant to be used as the argument to
diff --git a/linux-x64/clang/include/clang/AST/ASTFwd.h b/linux-x64/clang/include/clang/AST/ASTFwd.h
index 003d489..038d5c3 100644
--- a/linux-x64/clang/include/clang/AST/ASTFwd.h
+++ b/linux-x64/clang/include/clang/AST/ASTFwd.h
@@ -8,7 +8,7 @@
 //===--------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Forward declaration of all AST node types.
+/// Forward declaration of all AST node types.
 ///
 //===-------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/clang/AST/ASTImporter.h b/linux-x64/clang/include/clang/AST/ASTImporter.h
index 66b9cd3..311d64e 100644
--- a/linux-x64/clang/include/clang/AST/ASTImporter.h
+++ b/linux-x64/clang/include/clang/AST/ASTImporter.h
@@ -1,4 +1,4 @@
-//===--- ASTImporter.h - Importing ASTs from other Contexts -----*- C++ -*-===//
+//===- ASTImporter.h - Importing ASTs from other Contexts -------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,82 +11,95 @@
 //  context into another context.
 //
 //===----------------------------------------------------------------------===//
+
 #ifndef LLVM_CLANG_AST_ASTIMPORTER_H
 #define LLVM_CLANG_AST_ASTIMPORTER_H
 
 #include "clang/AST/DeclarationName.h"
+#include "clang/AST/NestedNameSpecifier.h"
+#include "clang/AST/TemplateName.h"
 #include "clang/AST/Type.h"
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/IdentifierTable.h"
+#include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/SmallVector.h"
+#include <utility>
 
 namespace clang {
-  class ASTContext;
-  class CXXCtorInitializer;
-  class CXXBaseSpecifier;
-  class Decl;
-  class DeclContext;
-  class DiagnosticsEngine;
-  class Expr;
-  class FileManager;
-  class IdentifierInfo;
-  class NestedNameSpecifier;
-  class Stmt;
-  class TypeSourceInfo;
-  
-  /// \brief Imports selected nodes from one AST context into another context,
+
+class ASTContext;
+class CXXBaseSpecifier;
+class CXXCtorInitializer;
+class Decl;
+class DeclContext;
+class Expr;
+class FileManager;
+class NamedDecl;
+class Stmt;
+class TagDecl;
+class TypeSourceInfo;
+class Attr;
+
+  // \brief Returns with a list of declarations started from the canonical decl
+  // then followed by subsequent decls in the translation unit.
+  // This gives a canonical list for each entry in the redecl chain.
+  // `Decl::redecls()` gives a list of decls which always start from the
+  // previous decl and the next item is actually the previous item in the order
+  // of source locations.  Thus, `Decl::redecls()` gives different lists for
+  // the different entries in a given redecl chain.
+  llvm::SmallVector<Decl*, 2> getCanonicalForwardRedeclChain(Decl* D);
+
+  /// Imports selected nodes from one AST context into another context,
   /// merging AST nodes where appropriate.
   class ASTImporter {
   public:
-    typedef llvm::DenseSet<std::pair<Decl *, Decl *> > NonEquivalentDeclSet;
-    typedef llvm::DenseMap<const CXXBaseSpecifier *, CXXBaseSpecifier *>
-    ImportedCXXBaseSpecifierMap;
+    using NonEquivalentDeclSet = llvm::DenseSet<std::pair<Decl *, Decl *>>;
+    using ImportedCXXBaseSpecifierMap =
+        llvm::DenseMap<const CXXBaseSpecifier *, CXXBaseSpecifier *>;
 
   private:
-    /// \brief The contexts we're importing to and from.
+    /// The contexts we're importing to and from.
     ASTContext &ToContext, &FromContext;
-    
-    /// \brief The file managers we're importing to and from.
+
+    /// The file managers we're importing to and from.
     FileManager &ToFileManager, &FromFileManager;
 
-    /// \brief Whether to perform a minimal import.
+    /// Whether to perform a minimal import.
     bool Minimal;
 
-    /// \brief Whether the last diagnostic came from the "from" context.
-    bool LastDiagFromFrom;
-    
-    /// \brief Mapping from the already-imported types in the "from" context
+    /// Whether the last diagnostic came from the "from" context.
+    bool LastDiagFromFrom = false;
+
+    /// Mapping from the already-imported types in the "from" context
     /// to the corresponding types in the "to" context.
     llvm::DenseMap<const Type *, const Type *> ImportedTypes;
-    
-    /// \brief Mapping from the already-imported declarations in the "from"
+
+    /// Mapping from the already-imported declarations in the "from"
     /// context to the corresponding declarations in the "to" context.
     llvm::DenseMap<Decl *, Decl *> ImportedDecls;
 
-    /// \brief Mapping from the already-imported statements in the "from"
+    /// Mapping from the already-imported statements in the "from"
     /// context to the corresponding statements in the "to" context.
     llvm::DenseMap<Stmt *, Stmt *> ImportedStmts;
 
-    /// \brief Mapping from the already-imported FileIDs in the "from" source
+    /// Mapping from the already-imported FileIDs in the "from" source
     /// manager to the corresponding FileIDs in the "to" source manager.
     llvm::DenseMap<FileID, FileID> ImportedFileIDs;
 
-    /// \brief Mapping from the already-imported CXXBasesSpecifier in
+    /// Mapping from the already-imported CXXBasesSpecifier in
     ///  the "from" source manager to the corresponding CXXBasesSpecifier
     ///  in the "to" source manager.
     ImportedCXXBaseSpecifierMap ImportedCXXBaseSpecifiers;
 
-    /// \brief Imported, anonymous tag declarations that are missing their 
-    /// corresponding typedefs.
-    SmallVector<TagDecl *, 4> AnonTagsWithPendingTypedefs;
-    
-    /// \brief Declaration (from, to) pairs that are known not to be equivalent
+    /// Declaration (from, to) pairs that are known not to be equivalent
     /// (which we have already complained about).
     NonEquivalentDeclSet NonEquivalentDecls;
-    
+
   public:
-    /// \brief Create a new AST importer.
+    /// Create a new AST importer.
     ///
     /// \param ToContext The context we'll be importing into.
     ///
@@ -102,141 +115,150 @@
     ASTImporter(ASTContext &ToContext, FileManager &ToFileManager,
                 ASTContext &FromContext, FileManager &FromFileManager,
                 bool MinimalImport);
-    
+
     virtual ~ASTImporter();
-    
-    /// \brief Whether the importer will perform a minimal import, creating
+
+    /// Whether the importer will perform a minimal import, creating
     /// to-be-completed forward declarations when possible.
     bool isMinimalImport() const { return Minimal; }
-    
-    /// \brief Import the given type from the "from" context into the "to"
+
+    /// Import the given type from the "from" context into the "to"
     /// context.
     ///
     /// \returns the equivalent type in the "to" context, or a NULL type if
     /// an error occurred.
     QualType Import(QualType FromT);
 
-    /// \brief Import the given type source information from the
+    /// Import the given type source information from the
     /// "from" context into the "to" context.
     ///
     /// \returns the equivalent type source information in the "to"
     /// context, or NULL if an error occurred.
     TypeSourceInfo *Import(TypeSourceInfo *FromTSI);
 
-    /// \brief Import the given declaration from the "from" context into the 
+    /// Import the given attribute from the "from" context into the
     /// "to" context.
     ///
-    /// \returns the equivalent declaration in the "to" context, or a NULL type 
+    /// \returns the equivalent attribute in the "to" context.
+    Attr *Import(const Attr *FromAttr);
+
+    /// Import the given declaration from the "from" context into the
+    /// "to" context.
+    ///
+    /// \returns the equivalent declaration in the "to" context, or a NULL type
     /// if an error occurred.
     Decl *Import(Decl *FromD);
+    Decl *Import(const Decl *FromD) {
+      return Import(const_cast<Decl *>(FromD));
+    }
 
-    /// \brief Return the copy of the given declaration in the "to" context if
+    /// Return the copy of the given declaration in the "to" context if
     /// it has already been imported from the "from" context.  Otherwise return
     /// NULL.
     Decl *GetAlreadyImportedOrNull(Decl *FromD);
 
-    /// \brief Import the given declaration context from the "from"
+    /// Import the given declaration context from the "from"
     /// AST context into the "to" AST context.
     ///
     /// \returns the equivalent declaration context in the "to"
     /// context, or a NULL type if an error occurred.
     DeclContext *ImportContext(DeclContext *FromDC);
-    
-    /// \brief Import the given expression from the "from" context into the
+
+    /// Import the given expression from the "from" context into the
     /// "to" context.
     ///
     /// \returns the equivalent expression in the "to" context, or NULL if
     /// an error occurred.
     Expr *Import(Expr *FromE);
 
-    /// \brief Import the given statement from the "from" context into the
+    /// Import the given statement from the "from" context into the
     /// "to" context.
     ///
     /// \returns the equivalent statement in the "to" context, or NULL if
     /// an error occurred.
     Stmt *Import(Stmt *FromS);
 
-    /// \brief Import the given nested-name-specifier from the "from"
+    /// Import the given nested-name-specifier from the "from"
     /// context into the "to" context.
     ///
     /// \returns the equivalent nested-name-specifier in the "to"
     /// context, or NULL if an error occurred.
     NestedNameSpecifier *Import(NestedNameSpecifier *FromNNS);
 
-    /// \brief Import the given nested-name-specifier from the "from"
+    /// Import the given nested-name-specifier from the "from"
     /// context into the "to" context.
     ///
     /// \returns the equivalent nested-name-specifier in the "to"
     /// context.
     NestedNameSpecifierLoc Import(NestedNameSpecifierLoc FromNNS);
 
-    /// \brief Import the goven template name from the "from" context into the
+    /// Import the goven template name from the "from" context into the
     /// "to" context.
     TemplateName Import(TemplateName From);
-    
-    /// \brief Import the given source location from the "from" context into
+
+    /// Import the given source location from the "from" context into
     /// the "to" context.
     ///
     /// \returns the equivalent source location in the "to" context, or an
     /// invalid source location if an error occurred.
     SourceLocation Import(SourceLocation FromLoc);
 
-    /// \brief Import the given source range from the "from" context into
+    /// Import the given source range from the "from" context into
     /// the "to" context.
     ///
     /// \returns the equivalent source range in the "to" context, or an
     /// invalid source location if an error occurred.
     SourceRange Import(SourceRange FromRange);
 
-    /// \brief Import the given declaration name from the "from"
+    /// Import the given declaration name from the "from"
     /// context into the "to" context.
     ///
     /// \returns the equivalent declaration name in the "to" context,
     /// or an empty declaration name if an error occurred.
     DeclarationName Import(DeclarationName FromName);
 
-    /// \brief Import the given identifier from the "from" context
+    /// Import the given identifier from the "from" context
     /// into the "to" context.
     ///
     /// \returns the equivalent identifier in the "to" context.
     IdentifierInfo *Import(const IdentifierInfo *FromId);
 
-    /// \brief Import the given Objective-C selector from the "from"
+    /// Import the given Objective-C selector from the "from"
     /// context into the "to" context.
     ///
     /// \returns the equivalent selector in the "to" context.
     Selector Import(Selector FromSel);
 
-    /// \brief Import the given file ID from the "from" context into the 
+    /// Import the given file ID from the "from" context into the
     /// "to" context.
     ///
     /// \returns the equivalent file ID in the source manager of the "to"
     /// context.
     FileID Import(FileID);
 
-    /// \brief Import the given C++ constructor initializer from the "from"
+    /// Import the given C++ constructor initializer from the "from"
     /// context into the "to" context.
     ///
     /// \returns the equivalent initializer in the "to" context.
     CXXCtorInitializer *Import(CXXCtorInitializer *FromInit);
 
-    /// \brief Import the given CXXBaseSpecifier from the "from" context into
+    /// Import the given CXXBaseSpecifier from the "from" context into
     /// the "to" context.
     ///
     /// \returns the equivalent CXXBaseSpecifier in the source manager of the
     /// "to" context.
     CXXBaseSpecifier *Import(const CXXBaseSpecifier *FromSpec);
 
-    /// \brief Import the definition of the given declaration, including all of
+    /// Import the definition of the given declaration, including all of
     /// the declarations it contains.
     ///
-    /// This routine is intended to be used 
+    /// This routine is intended to be used
     void ImportDefinition(Decl *From);
 
-    /// \brief Cope with a name conflict when importing a declaration into the
+    /// Cope with a name conflict when importing a declaration into the
     /// given context.
     ///
-    /// This routine is invoked whenever there is a name conflict while 
+    /// This routine is invoked whenever there is a name conflict while
     /// importing a declaration. The returned name will become the name of the
     /// imported declaration. By default, the returned name is the same as the
     /// original name, leaving the conflict unresolve such that name lookup
@@ -248,7 +270,7 @@
     /// \param Name the name of the declaration being imported, which conflicts
     /// with other declarations.
     ///
-    /// \param DC the declaration context (in the "to" AST context) in which 
+    /// \param DC the declaration context (in the "to" AST context) in which
     /// the name is being imported.
     ///
     /// \param IDNS the identifier namespace in which the name will be found.
@@ -264,54 +286,62 @@
                                                unsigned IDNS,
                                                NamedDecl **Decls,
                                                unsigned NumDecls);
-    
-    /// \brief Retrieve the context that AST nodes are being imported into.
+
+    /// Retrieve the context that AST nodes are being imported into.
     ASTContext &getToContext() const { return ToContext; }
-    
-    /// \brief Retrieve the context that AST nodes are being imported from.
+
+    /// Retrieve the context that AST nodes are being imported from.
     ASTContext &getFromContext() const { return FromContext; }
-    
-    /// \brief Retrieve the file manager that AST nodes are being imported into.
+
+    /// Retrieve the file manager that AST nodes are being imported into.
     FileManager &getToFileManager() const { return ToFileManager; }
 
-    /// \brief Retrieve the file manager that AST nodes are being imported from.
+    /// Retrieve the file manager that AST nodes are being imported from.
     FileManager &getFromFileManager() const { return FromFileManager; }
-    
-    /// \brief Report a diagnostic in the "to" context.
+
+    /// Report a diagnostic in the "to" context.
     DiagnosticBuilder ToDiag(SourceLocation Loc, unsigned DiagID);
-    
-    /// \brief Report a diagnostic in the "from" context.
+
+    /// Report a diagnostic in the "from" context.
     DiagnosticBuilder FromDiag(SourceLocation Loc, unsigned DiagID);
-    
-    /// \brief Return the set of declarations that we know are not equivalent.
+
+    /// Return the set of declarations that we know are not equivalent.
     NonEquivalentDeclSet &getNonEquivalentDecls() { return NonEquivalentDecls; }
 
-    /// \brief Called for ObjCInterfaceDecl, ObjCProtocolDecl, and TagDecl.
+    /// Called for ObjCInterfaceDecl, ObjCProtocolDecl, and TagDecl.
     /// Mark the Decl as complete, filling it in as much as possible.
     ///
     /// \param D A declaration in the "to" context.
     virtual void CompleteDecl(Decl* D);
-    
-    /// \brief Note that we have imported the "from" declaration by mapping it
-    /// to the (potentially-newly-created) "to" declaration.
-    ///
+
     /// Subclasses can override this function to observe all of the \c From ->
     /// \c To declaration mappings as they are imported.
-    virtual Decl *Imported(Decl *From, Decl *To);
-      
-    /// \brief Called by StructuralEquivalenceContext.  If a RecordDecl is
+    virtual Decl *Imported(Decl *From, Decl *To) { return To; }
+
+    /// Store and assign the imported declaration to its counterpart.
+    Decl *MapImported(Decl *From, Decl *To);
+
+    /// Called by StructuralEquivalenceContext.  If a RecordDecl is
     /// being compared to another RecordDecl as part of import, completing the
     /// other RecordDecl may trigger importation of the first RecordDecl. This
     /// happens especially for anonymous structs.  If the original of the second
     /// RecordDecl can be found, we can complete it without the need for
     /// importation, eliminating this loop.
     virtual Decl *GetOriginalDecl(Decl *To) { return nullptr; }
-    
-    /// \brief Determine whether the given types are structurally
+
+    /// Determine whether the given types are structurally
     /// equivalent.
     bool IsStructurallyEquivalent(QualType From, QualType To,
                                   bool Complain = true);
+
+    /// Determine the index of a field in its parent record.
+    /// F should be a field (or indirect field) declaration.
+    /// \returns The index of the field in its parent context, starting from 1.
+    /// 0 is returned on error (parent context is non-record).
+    static unsigned getFieldIndex(Decl *F);
+
   };
-}
+
+} // namespace clang
 
 #endif // LLVM_CLANG_AST_ASTIMPORTER_H
diff --git a/linux-x64/clang/include/clang/AST/ASTLambda.h b/linux-x64/clang/include/clang/AST/ASTLambda.h
index 69df2d8..6fedcb8 100644
--- a/linux-x64/clang/include/clang/AST/ASTLambda.h
+++ b/linux-x64/clang/include/clang/AST/ASTLambda.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file provides some common utility functions for processing
+/// This file provides some common utility functions for processing
 /// Lambda related AST Constructs.
 ///
 //===----------------------------------------------------------------------===//
@@ -40,7 +40,7 @@
   if (!MD) return false;
   const CXXRecordDecl *LambdaClass = MD->getParent();
   if (LambdaClass && LambdaClass->isGenericLambda())
-    return isLambdaCallOperator(MD) && 
+    return isLambdaCallOperator(MD) &&
                     MD->isFunctionTemplateSpecialization();
   return false;
 }
@@ -51,11 +51,11 @@
 
 inline bool isLambdaConversionOperator(Decl *D) {
   if (!D) return false;
-  if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D)) 
-    return isLambdaConversionOperator(Conv);  
-  if (FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(D)) 
-    if (CXXConversionDecl *Conv = 
-        dyn_cast_or_null<CXXConversionDecl>(F->getTemplatedDecl())) 
+  if (CXXConversionDecl *Conv = dyn_cast<CXXConversionDecl>(D))
+    return isLambdaConversionOperator(Conv);
+  if (FunctionTemplateDecl *F = dyn_cast<FunctionTemplateDecl>(D))
+    if (CXXConversionDecl *Conv =
+        dyn_cast_or_null<CXXConversionDecl>(F->getTemplatedDecl()))
       return isLambdaConversionOperator(Conv);
   return false;
 }
@@ -71,7 +71,7 @@
 inline DeclContext *getLambdaAwareParentOfDeclContext(DeclContext *DC) {
   if (isLambdaCallOperator(DC))
     return DC->getParent()->getParent();
-  else 
+  else
     return DC->getParent();
 }
 
diff --git a/linux-x64/clang/include/clang/AST/ASTMutationListener.h b/linux-x64/clang/include/clang/AST/ASTMutationListener.h
index 9395d36..80184e1 100644
--- a/linux-x64/clang/include/clang/AST/ASTMutationListener.h
+++ b/linux-x64/clang/include/clang/AST/ASTMutationListener.h
@@ -41,86 +41,86 @@
   class VarTemplateDecl;
   class VarTemplateSpecializationDecl;
 
-/// \brief An abstract interface that should be implemented by listeners
+/// An abstract interface that should be implemented by listeners
 /// that want to be notified when an AST entity gets modified after its
 /// initial creation.
 class ASTMutationListener {
 public:
   virtual ~ASTMutationListener();
 
-  /// \brief A new TagDecl definition was completed.
+  /// A new TagDecl definition was completed.
   virtual void CompletedTagDefinition(const TagDecl *D) { }
 
-  /// \brief A new declaration with name has been added to a DeclContext.
+  /// A new declaration with name has been added to a DeclContext.
   virtual void AddedVisibleDecl(const DeclContext *DC, const Decl *D) {}
 
-  /// \brief An implicit member was added after the definition was completed.
+  /// An implicit member was added after the definition was completed.
   virtual void AddedCXXImplicitMember(const CXXRecordDecl *RD, const Decl *D) {}
 
-  /// \brief A template specialization (or partial one) was added to the
+  /// A template specialization (or partial one) was added to the
   /// template declaration.
   virtual void AddedCXXTemplateSpecialization(const ClassTemplateDecl *TD,
                                     const ClassTemplateSpecializationDecl *D) {}
 
-  /// \brief A template specialization (or partial one) was added to the
+  /// A template specialization (or partial one) was added to the
   /// template declaration.
   virtual void
   AddedCXXTemplateSpecialization(const VarTemplateDecl *TD,
                                  const VarTemplateSpecializationDecl *D) {}
 
-  /// \brief A template specialization (or partial one) was added to the
+  /// A template specialization (or partial one) was added to the
   /// template declaration.
   virtual void AddedCXXTemplateSpecialization(const FunctionTemplateDecl *TD,
                                               const FunctionDecl *D) {}
 
-  /// \brief A function's exception specification has been evaluated or
+  /// A function's exception specification has been evaluated or
   /// instantiated.
   virtual void ResolvedExceptionSpec(const FunctionDecl *FD) {}
 
-  /// \brief A function's return type has been deduced.
+  /// A function's return type has been deduced.
   virtual void DeducedReturnType(const FunctionDecl *FD, QualType ReturnType);
 
-  /// \brief A virtual destructor's operator delete has been resolved.
+  /// A virtual destructor's operator delete has been resolved.
   virtual void ResolvedOperatorDelete(const CXXDestructorDecl *DD,
                                       const FunctionDecl *Delete,
                                       Expr *ThisArg) {}
 
-  /// \brief An implicit member got a definition.
+  /// An implicit member got a definition.
   virtual void CompletedImplicitDefinition(const FunctionDecl *D) {}
 
-  /// \brief The instantiation of a templated function or variable was
+  /// The instantiation of a templated function or variable was
   /// requested. In particular, the point of instantiation and template
   /// specialization kind of \p D may have changed.
   virtual void InstantiationRequested(const ValueDecl *D) {}
 
-  /// \brief A templated variable's definition was implicitly instantiated.
+  /// A templated variable's definition was implicitly instantiated.
   virtual void VariableDefinitionInstantiated(const VarDecl *D) {}
 
-  /// \brief A function template's definition was instantiated.
+  /// A function template's definition was instantiated.
   virtual void FunctionDefinitionInstantiated(const FunctionDecl *D) {}
 
-  /// \brief A default argument was instantiated.
+  /// A default argument was instantiated.
   virtual void DefaultArgumentInstantiated(const ParmVarDecl *D) {}
 
-  /// \brief A default member initializer was instantiated.
+  /// A default member initializer was instantiated.
   virtual void DefaultMemberInitializerInstantiated(const FieldDecl *D) {}
 
-  /// \brief A new objc category class was added for an interface.
+  /// A new objc category class was added for an interface.
   virtual void AddedObjCCategoryToInterface(const ObjCCategoryDecl *CatD,
                                             const ObjCInterfaceDecl *IFD) {}
 
-  /// \brief A declaration is marked used which was not previously marked used.
+  /// A declaration is marked used which was not previously marked used.
   ///
   /// \param D the declaration marked used
   virtual void DeclarationMarkedUsed(const Decl *D) {}
 
-  /// \brief A declaration is marked as OpenMP threadprivate which was not
+  /// A declaration is marked as OpenMP threadprivate which was not
   /// previously marked as threadprivate.
   ///
   /// \param D the declaration marked OpenMP threadprivate.
   virtual void DeclarationMarkedOpenMPThreadPrivate(const Decl *D) {}
 
-  /// \brief A declaration is marked as OpenMP declaretarget which was not
+  /// A declaration is marked as OpenMP declaretarget which was not
   /// previously marked as declaretarget.
   ///
   /// \param D the declaration marked OpenMP declaretarget.
@@ -128,19 +128,19 @@
   virtual void DeclarationMarkedOpenMPDeclareTarget(const Decl *D,
                                                     const Attr *Attr) {}
 
-  /// \brief A definition has been made visible by being redefined locally.
+  /// A definition has been made visible by being redefined locally.
   ///
   /// \param D The definition that was previously not visible.
   /// \param M The containing module in which the definition was made visible,
   ///        if any.
   virtual void RedefinedHiddenDefinition(const NamedDecl *D, Module *M) {}
-  
-  /// \brief An attribute was added to a RecordDecl
+
+  /// An attribute was added to a RecordDecl
   ///
   /// \param Attr The attribute that was added to the Record
   ///
   /// \param Record The RecordDecl that got a new attribute
-  virtual void AddedAttributeToRecord(const Attr *Attr, 
+  virtual void AddedAttributeToRecord(const Attr *Attr,
                                       const RecordDecl *Record) {}
 
   // NOTE: If new methods are added they should also be added to
diff --git a/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h b/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
index 23674c6..2037796 100644
--- a/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
+++ b/linux-x64/clang/include/clang/AST/ASTStructuralEquivalence.h
@@ -1,4 +1,4 @@
-//===--- ASTStructuralEquivalence.h - ---------------------------*- C++ -*-===//
+//===- ASTStructuralEquivalence.h -------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -19,6 +19,7 @@
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/Optional.h"
 #include <deque>
+#include <utility>
 
 namespace clang {
 
@@ -29,6 +30,14 @@
 class RecordDecl;
 class SourceLocation;
 
+/// \brief Whether to perform a normal or minimal equivalence check.
+/// In case of `Minimal`, we do not perform a recursive check of decls with
+/// external storage.
+enum class StructuralEquivalenceKind {
+  Default,
+  Minimal,
+};
+
 struct StructuralEquivalenceContext {
   /// AST contexts for which we are checking structural equivalence.
   ASTContext &FromCtx, &ToCtx;
@@ -46,6 +55,8 @@
   /// (which we have already complained about).
   llvm::DenseSet<std::pair<Decl *, Decl *>> &NonEquivalentDecls;
 
+  StructuralEquivalenceKind EqKind;
+
   /// Whether we're being strict about the spelling of types when
   /// unifying two types.
   bool StrictTypeSpelling;
@@ -57,27 +68,35 @@
   bool Complain;
 
   /// \c true if the last diagnostic came from ToCtx.
-  bool LastDiagFromC2;
+  bool LastDiagFromC2 = false;
 
   StructuralEquivalenceContext(
       ASTContext &FromCtx, ASTContext &ToCtx,
       llvm::DenseSet<std::pair<Decl *, Decl *>> &NonEquivalentDecls,
+      StructuralEquivalenceKind EqKind,
       bool StrictTypeSpelling = false, bool Complain = true,
       bool ErrorOnTagTypeMismatch = false)
       : FromCtx(FromCtx), ToCtx(ToCtx), NonEquivalentDecls(NonEquivalentDecls),
-        StrictTypeSpelling(StrictTypeSpelling),
-        ErrorOnTagTypeMismatch(ErrorOnTagTypeMismatch), Complain(Complain),
-        LastDiagFromC2(false) {}
+        EqKind(EqKind), StrictTypeSpelling(StrictTypeSpelling),
+        ErrorOnTagTypeMismatch(ErrorOnTagTypeMismatch), Complain(Complain) {}
 
   DiagnosticBuilder Diag1(SourceLocation Loc, unsigned DiagID);
   DiagnosticBuilder Diag2(SourceLocation Loc, unsigned DiagID);
 
   /// Determine whether the two declarations are structurally
   /// equivalent.
-  bool IsStructurallyEquivalent(Decl *D1, Decl *D2);
+  /// Implementation functions (all static functions in
+  /// ASTStructuralEquivalence.cpp) must never call this function because that
+  /// will wreak havoc the internal state (\c DeclsToCheck and
+  /// \c TentativeEquivalences members) and can cause faulty equivalent results.
+  bool IsEquivalent(Decl *D1, Decl *D2);
 
   /// Determine whether the two types are structurally equivalent.
-  bool IsStructurallyEquivalent(QualType T1, QualType T2);
+  /// Implementation functions (all static functions in
+  /// ASTStructuralEquivalence.cpp) must never call this function because that
+  /// will wreak havoc the internal state (\c DeclsToCheck and
+  /// \c TentativeEquivalences members) and can cause faulty equivalent results.
+  bool IsEquivalent(QualType T1, QualType T2);
 
   /// Find the index of the given anonymous struct/union within its
   /// context.
@@ -95,9 +114,21 @@
 private:
   /// Finish checking all of the structural equivalences.
   ///
-  /// \returns true if an error occurred, false otherwise.
+  /// \returns true if the equivalence check failed (non-equivalence detected),
+  /// false if equivalence was detected.
   bool Finish();
+
+  /// Check for common properties at Finish.
+  /// \returns true if D1 and D2 may be equivalent,
+  /// false if they are for sure not.
+  bool CheckCommonEquivalence(Decl *D1, Decl *D2);
+
+  /// Check for class dependent properties at Finish.
+  /// \returns true if D1 and D2 may be equivalent,
+  /// false if they are for sure not.
+  bool CheckKindSpecificEquivalence(Decl *D1, Decl *D2);
 };
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_ASTSTRUCTURALEQUIVALENCE_H
diff --git a/linux-x64/clang/include/clang/AST/ASTTypeTraits.h b/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
index 51d60a9..9df9793 100644
--- a/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
+++ b/linux-x64/clang/include/clang/AST/ASTTypeTraits.h
@@ -38,62 +38,62 @@
 
 namespace ast_type_traits {
 
-/// \brief Kind identifier.
+/// Kind identifier.
 ///
 /// It can be constructed from any node kind and allows for runtime type
 /// hierarchy checks.
 /// Use getFromNodeKind<T>() to construct them.
 class ASTNodeKind {
 public:
-  /// \brief Empty identifier. It matches nothing.
+  /// Empty identifier. It matches nothing.
   ASTNodeKind() : KindId(NKI_None) {}
 
-  /// \brief Construct an identifier for T.
+  /// Construct an identifier for T.
   template <class T>
   static ASTNodeKind getFromNodeKind() {
     return ASTNodeKind(KindToKindId<T>::Id);
   }
 
   /// \{
-  /// \brief Construct an identifier for the dynamic type of the node
+  /// Construct an identifier for the dynamic type of the node
   static ASTNodeKind getFromNode(const Decl &D);
   static ASTNodeKind getFromNode(const Stmt &S);
   static ASTNodeKind getFromNode(const Type &T);
   /// \}
 
-  /// \brief Returns \c true if \c this and \c Other represent the same kind.
+  /// Returns \c true if \c this and \c Other represent the same kind.
   bool isSame(ASTNodeKind Other) const {
     return KindId != NKI_None && KindId == Other.KindId;
   }
 
-  /// \brief Returns \c true only for the default \c ASTNodeKind()
+  /// Returns \c true only for the default \c ASTNodeKind()
   bool isNone() const { return KindId == NKI_None; }
 
-  /// \brief Returns \c true if \c this is a base kind of (or same as) \c Other.
+  /// Returns \c true if \c this is a base kind of (or same as) \c Other.
   /// \param Distance If non-null, used to return the distance between \c this
   /// and \c Other in the class hierarchy.
   bool isBaseOf(ASTNodeKind Other, unsigned *Distance = nullptr) const;
 
-  /// \brief String representation of the kind.
+  /// String representation of the kind.
   StringRef asStringRef() const;
 
-  /// \brief Strict weak ordering for ASTNodeKind.
+  /// Strict weak ordering for ASTNodeKind.
   bool operator<(const ASTNodeKind &Other) const {
     return KindId < Other.KindId;
   }
 
-  /// \brief Return the most derived type between \p Kind1 and \p Kind2.
+  /// Return the most derived type between \p Kind1 and \p Kind2.
   ///
   /// Return ASTNodeKind() if they are not related.
   static ASTNodeKind getMostDerivedType(ASTNodeKind Kind1, ASTNodeKind Kind2);
 
-  /// \brief Return the most derived common ancestor between Kind1 and Kind2.
+  /// Return the most derived common ancestor between Kind1 and Kind2.
   ///
   /// Return ASTNodeKind() if they are not related.
   static ASTNodeKind getMostDerivedCommonAncestor(ASTNodeKind Kind1,
                                                   ASTNodeKind Kind2);
 
-  /// \brief Hooks for using ASTNodeKind as a key in a DenseMap.
+  /// Hooks for using ASTNodeKind as a key in a DenseMap.
   struct DenseMapInfo {
     // ASTNodeKind() is a good empty key because it is represented as a 0.
     static inline ASTNodeKind getEmptyKey() { return ASTNodeKind(); }
@@ -115,7 +115,7 @@
   }
 
 private:
-  /// \brief Kind ids.
+  /// Kind ids.
   ///
   /// Includes all possible base and derived kinds.
   enum NodeKindId {
@@ -140,16 +140,16 @@
     NKI_NumberOfKinds
   };
 
-  /// \brief Use getFromNodeKind<T>() to construct the kind.
+  /// Use getFromNodeKind<T>() to construct the kind.
   ASTNodeKind(NodeKindId KindId) : KindId(KindId) {}
 
-  /// \brief Returns \c true if \c Base is a base kind of (or same as) \c
+  /// Returns \c true if \c Base is a base kind of (or same as) \c
   ///   Derived.
   /// \param Distance If non-null, used to return the distance between \c Base
   /// and \c Derived in the class hierarchy.
   static bool isBaseOf(NodeKindId Base, NodeKindId Derived, unsigned *Distance);
 
-  /// \brief Helper meta-function to convert a kind T to its enum value.
+  /// Helper meta-function to convert a kind T to its enum value.
   ///
   /// This struct is specialized below for all known kinds.
   template <class T> struct KindToKindId {
@@ -158,11 +158,11 @@
   template <class T>
   struct KindToKindId<const T> : KindToKindId<T> {};
 
-  /// \brief Per kind info.
+  /// Per kind info.
   struct KindInfo {
-    /// \brief The id of the parent kind, or None if it has no parent.
+    /// The id of the parent kind, or None if it has no parent.
     NodeKindId ParentId;
-    /// \brief Name of the kind.
+    /// Name of the kind.
     const char *Name;
   };
   static const KindInfo AllKindInfo[NKI_NumberOfKinds];
@@ -197,7 +197,7 @@
   return OS;
 }
 
-/// \brief A dynamically typed AST node container.
+/// A dynamically typed AST node container.
 ///
 /// Stores an AST node in a type safe way. This allows writing code that
 /// works with different kinds of AST nodes, despite the fact that they don't
@@ -211,13 +211,13 @@
 /// the supported base types.
 class DynTypedNode {
 public:
-  /// \brief Creates a \c DynTypedNode from \c Node.
+  /// Creates a \c DynTypedNode from \c Node.
   template <typename T>
   static DynTypedNode create(const T &Node) {
     return BaseConverter<T>::create(Node);
   }
 
-  /// \brief Retrieve the stored node as type \c T.
+  /// Retrieve the stored node as type \c T.
   ///
   /// Returns NULL if the stored node does not have a type that is
   /// convertible to \c T.
@@ -234,7 +234,7 @@
     return BaseConverter<T>::get(NodeKind, Storage.buffer);
   }
 
-  /// \brief Retrieve the stored node as type \c T.
+  /// Retrieve the stored node as type \c T.
   ///
   /// Similar to \c get(), but asserts that the type is what we are expecting.
   template <typename T>
@@ -244,7 +244,7 @@
 
   ASTNodeKind getNodeKind() const { return NodeKind; }
 
-  /// \brief Returns a pointer that identifies the stored AST node.
+  /// Returns a pointer that identifies the stored AST node.
   ///
   /// Note that this is not supported by all AST nodes. For AST nodes
   /// that don't have a pointer-defined identity inside the AST, this
@@ -255,21 +255,21 @@
                : nullptr;
   }
 
-  /// \brief Prints the node to the given output stream.
+  /// Prints the node to the given output stream.
   void print(llvm::raw_ostream &OS, const PrintingPolicy &PP) const;
 
-  /// \brief Dumps the node to the given output stream.
+  /// Dumps the node to the given output stream.
   void dump(llvm::raw_ostream &OS, SourceManager &SM) const;
 
-  /// \brief For nodes which represent textual entities in the source code,
+  /// For nodes which represent textual entities in the source code,
   /// return their SourceRange.  For all other nodes, return SourceRange().
   SourceRange getSourceRange() const;
 
   /// @{
-  /// \brief Imposes an order on \c DynTypedNode.
+  /// Imposes an order on \c DynTypedNode.
   ///
   /// Supports comparison of nodes that support memoization.
-  /// FIXME: Implement comparsion for other node types (currently
+  /// FIXME: Implement comparison for other node types (currently
   /// only Stmt, Decl, Type and NestedNameSpecifier return memoization data).
   bool operator<(const DynTypedNode &Other) const {
     if (!NodeKind.isSame(Other.NodeKind))
@@ -326,7 +326,7 @@
   }
   /// @}
 
-  /// \brief Hooks for using DynTypedNode as a key in a DenseMap.
+  /// Hooks for using DynTypedNode as a key in a DenseMap.
   struct DenseMapInfo {
     static inline DynTypedNode getEmptyKey() {
       DynTypedNode Node;
@@ -368,10 +368,10 @@
   };
 
 private:
-  /// \brief Takes care of converting from and to \c T.
+  /// Takes care of converting from and to \c T.
   template <typename T, typename EnablerT = void> struct BaseConverter;
 
-  /// \brief Converter that uses dyn_cast<T> from a stored BaseT*.
+  /// Converter that uses dyn_cast<T> from a stored BaseT*.
   template <typename T, typename BaseT> struct DynCastPtrConverter {
     static const T *get(ASTNodeKind NodeKind, const char Storage[]) {
       if (ASTNodeKind::getFromNodeKind<T>().isBaseOf(NodeKind))
@@ -391,7 +391,7 @@
     }
   };
 
-  /// \brief Converter that stores T* (by pointer).
+  /// Converter that stores T* (by pointer).
   template <typename T> struct PtrConverter {
     static const T *get(ASTNodeKind NodeKind, const char Storage[]) {
       if (ASTNodeKind::getFromNodeKind<T>().isSame(NodeKind))
@@ -411,7 +411,7 @@
     }
   };
 
-  /// \brief Converter that stores T (by value).
+  /// Converter that stores T (by value).
   template <typename T> struct ValueConverter {
     static const T *get(ASTNodeKind NodeKind, const char Storage[]) {
       if (ASTNodeKind::getFromNodeKind<T>().isSame(NodeKind))
@@ -432,7 +432,7 @@
 
   ASTNodeKind NodeKind;
 
-  /// \brief Stores the data of the node.
+  /// Stores the data of the node.
   ///
   /// Note that we can store \c Decls, \c Stmts, \c Types,
   /// \c NestedNameSpecifiers and \c CXXCtorInitializer by pointer as they are
diff --git a/linux-x64/clang/include/clang/AST/ASTUnresolvedSet.h b/linux-x64/clang/include/clang/AST/ASTUnresolvedSet.h
index 3693aec..9bf63bb 100644
--- a/linux-x64/clang/include/clang/AST/ASTUnresolvedSet.h
+++ b/linux-x64/clang/include/clang/AST/ASTUnresolvedSet.h
@@ -26,7 +26,7 @@
 
 class NamedDecl;
 
-/// \brief An UnresolvedSet-like class which uses the ASTContext's allocator.
+/// An UnresolvedSet-like class which uses the ASTContext's allocator.
 class ASTUnresolvedSet {
   friend class LazyASTUnresolvedSet;
 
@@ -89,7 +89,7 @@
   const DeclAccessPair &operator[](unsigned I) const { return Decls[I]; }
 };
 
-/// \brief An UnresolvedSet-like class that might not have been loaded from the
+/// An UnresolvedSet-like class that might not have been loaded from the
 /// external AST source yet.
 class LazyASTUnresolvedSet {
   mutable ASTUnresolvedSet Impl;
diff --git a/linux-x64/clang/include/clang/AST/Attr.h b/linux-x64/clang/include/clang/AST/Attr.h
index 10b78bc..2092274 100644
--- a/linux-x64/clang/include/clang/AST/Attr.h
+++ b/linux-x64/clang/include/clang/AST/Attr.h
@@ -23,9 +23,9 @@
 #include "clang/Basic/OpenMPKinds.h"
 #include "clang/Basic/Sanitizers.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <cassert>
@@ -86,7 +86,7 @@
   attr::Kind getKind() const {
     return static_cast<attr::Kind>(AttrKind);
   }
-  
+
   unsigned getSpellingListIndex() const { return SpellingListIndex; }
   const char *getSpelling() const;
 
@@ -96,7 +96,7 @@
 
   bool isInherited() const { return Inherited; }
 
-  /// \brief Returns true if the attribute has been implicitly created instead
+  /// Returns true if the attribute has been implicitly created instead
   /// of explicitly written by the user.
   bool isImplicit() const { return Implicit; }
   void setImplicit(bool I) { Implicit = I; }
diff --git a/linux-x64/clang/include/clang/AST/AttrDump.inc b/linux-x64/clang/include/clang/AST/AttrDump.inc
index fca7f92..08100f1 100644
--- a/linux-x64/clang/include/clang/AST/AttrDump.inc
+++ b/linux-x64/clang/include/clang/AST/AttrDump.inc
@@ -228,6 +228,18 @@
   case attr::CFUnknownTransfer: {
     break;
   }
+  case attr::CPUDispatch: {
+    const auto *SA = cast<CPUDispatchAttr>(A);
+    for (const auto &Val : SA->cpus())
+      OS << " " << Val;
+    break;
+  }
+  case attr::CPUSpecific: {
+    const auto *SA = cast<CPUSpecificAttr>(A);
+    for (const auto &Val : SA->cpus())
+      OS << " " << Val;
+    break;
+  }
   case attr::CUDAConstant: {
     break;
   }
@@ -290,6 +302,11 @@
     dumpBareDeclRef(SA->getFunctionDecl());
     break;
   }
+  case attr::CodeSeg: {
+    const auto *SA = cast<CodeSegAttr>(A);
+    OS << " \"" << SA->getName() << "\"";
+    break;
+  }
   case attr::Cold: {
     break;
   }
@@ -483,6 +500,9 @@
     OS << " " << SA->getVersion();
     break;
   }
+  case attr::LifetimeBound: {
+    break;
+  }
   case attr::LockReturned: {
     const auto *SA = cast<LockReturnedAttr>(A);
     dumpStmt(SA->getArg());
@@ -516,6 +536,12 @@
     case LoopHintAttr::UnrollCount:
       OS << " UnrollCount";
       break;
+    case LoopHintAttr::UnrollAndJam:
+      OS << " UnrollAndJam";
+      break;
+    case LoopHintAttr::UnrollAndJamCount:
+      OS << " UnrollAndJamCount";
+      break;
     case LoopHintAttr::Distribute:
       OS << " Distribute";
       break;
@@ -579,6 +605,11 @@
   case attr::MinSize: {
     break;
   }
+  case attr::MinVectorWidth: {
+    const auto *SA = cast<MinVectorWidthAttr>(A);
+    OS << " " << SA->getVectorWidth();
+    break;
+  }
   case attr::Mips16: {
     break;
   }
@@ -686,6 +717,9 @@
   case attr::NoSplitStack: {
     break;
   }
+  case attr::NoStackProtector: {
+    break;
+  }
   case attr::NoThreadSafetyAnalysis: {
     break;
   }
@@ -957,6 +991,21 @@
   case attr::Pure: {
     break;
   }
+  case attr::RISCVInterrupt: {
+    const auto *SA = cast<RISCVInterruptAttr>(A);
+    switch(SA->getInterrupt()) {
+    case RISCVInterruptAttr::user:
+      OS << " user";
+      break;
+    case RISCVInterruptAttr::supervisor:
+      OS << " supervisor";
+      break;
+    case RISCVInterruptAttr::machine:
+      OS << " machine";
+      break;
+    }
+    break;
+  }
   case attr::RegCall: {
     break;
   }
diff --git a/linux-x64/clang/include/clang/AST/AttrImpl.inc b/linux-x64/clang/include/clang/AST/AttrImpl.inc
index 7b3abc5..c94817a 100644
--- a/linux-x64/clang/include/clang/AST/AttrImpl.inc
+++ b/linux-x64/clang/include/clang/AST/AttrImpl.inc
@@ -1766,6 +1766,132 @@
   }
 }
 
+CPUDispatchAttr *CPUDispatchAttr::clone(ASTContext &C) const {
+  auto *A = new (C) CPUDispatchAttr(getLocation(), C, cpus_, cpus_Size, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void CPUDispatchAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((cpu_dispatch(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::cpu_dispatch(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::cpu_dispatch(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")]]";
+    break;
+  }
+}
+}
+
+const char *CPUDispatchAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "cpu_dispatch";
+  case 1:
+    return "cpu_dispatch";
+  case 2:
+    return "cpu_dispatch";
+  }
+}
+
+CPUSpecificAttr *CPUSpecificAttr::clone(ASTContext &C) const {
+  auto *A = new (C) CPUSpecificAttr(getLocation(), C, cpus_, cpus_Size, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void CPUSpecificAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((cpu_specific(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::cpu_specific(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::cpu_specific(";
+  bool isFirst = true;
+  for (const auto &Val : cpus()) {
+    if (isFirst) isFirst = false;
+    else OS << ", ";
+    OS << Val;
+  }
+  OS << ")]]";
+    break;
+  }
+}
+}
+
+const char *CPUSpecificAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "cpu_specific";
+  case 1:
+    return "cpu_specific";
+  case 2:
+    return "cpu_specific";
+  }
+}
+
 CUDAConstantAttr *CUDAConstantAttr::clone(ASTContext &C) const {
   auto *A = new (C) CUDAConstantAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -2212,6 +2338,36 @@
   }
 }
 
+CodeSegAttr *CodeSegAttr::clone(ASTContext &C) const {
+  auto *A = new (C) CodeSegAttr(getLocation(), C, getName(), getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void CodeSegAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __declspec(code_seg(\"" << getName() << "\"))";
+    break;
+  }
+}
+}
+
+const char *CodeSegAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "code_seg";
+  }
+}
+
 ColdAttr *ColdAttr::clone(ASTContext &C) const {
   auto *A = new (C) ColdAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -3744,6 +3900,42 @@
   }
 }
 
+LifetimeBoundAttr *LifetimeBoundAttr::clone(ASTContext &C) const {
+  auto *A = new (C) LifetimeBoundAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void LifetimeBoundAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((lifetimebound))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::lifetimebound]]";
+    break;
+  }
+}
+}
+
+const char *LifetimeBoundAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "lifetimebound";
+  case 1:
+    return "lifetimebound";
+  }
+}
+
 LockReturnedAttr *LockReturnedAttr::clone(ASTContext &C) const {
   auto *A = new (C) LockReturnedAttr(getLocation(), C, arg, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -3839,6 +4031,16 @@
     printPrettyPragma(OS, Policy);
     OS << "\n";    break;
   }
+  case 3 : {
+    OS << "#pragma unroll_and_jam";
+    printPrettyPragma(OS, Policy);
+    OS << "\n";    break;
+  }
+  case 4 : {
+    OS << "#pragma nounroll_and_jam";
+    printPrettyPragma(OS, Policy);
+    OS << "\n";    break;
+  }
 }
 }
 
@@ -3853,6 +4055,10 @@
     return "unroll";
   case 2:
     return "nounroll";
+  case 3:
+    return "unroll_and_jam";
+  case 4:
+    return "nounroll_and_jam";
   }
 }
 
@@ -3906,19 +4112,19 @@
     llvm_unreachable("Unknown attribute spelling!");
     break;
   case 0 : {
-    OS << " __single_inheritance(" << getBestCase() << ")";
+    OS << " __single_inheritance";
     break;
   }
   case 1 : {
-    OS << " __multiple_inheritance(" << getBestCase() << ")";
+    OS << " __multiple_inheritance";
     break;
   }
   case 2 : {
-    OS << " __virtual_inheritance(" << getBestCase() << ")";
+    OS << " __virtual_inheritance";
     break;
   }
   case 3 : {
-    OS << " __unspecified_inheritance(" << getBestCase() << ")";
+    OS << " __unspecified_inheritance";
     break;
   }
 }
@@ -4186,6 +4392,48 @@
   }
 }
 
+MinVectorWidthAttr *MinVectorWidthAttr::clone(ASTContext &C) const {
+  auto *A = new (C) MinVectorWidthAttr(getLocation(), C, vectorWidth, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void MinVectorWidthAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((min_vector_width(" << getVectorWidth() << ")))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::min_vector_width(" << getVectorWidth() << ")]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::min_vector_width(" << getVectorWidth() << ")]]";
+    break;
+  }
+}
+}
+
+const char *MinVectorWidthAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "min_vector_width";
+  case 1:
+    return "min_vector_width";
+  case 2:
+    return "min_vector_width";
+  }
+}
+
 Mips16Attr *Mips16Attr::clone(ASTContext &C) const {
   auto *A = new (C) Mips16Attr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -5119,6 +5367,48 @@
   }
 }
 
+NoStackProtectorAttr *NoStackProtectorAttr::clone(ASTContext &C) const {
+  auto *A = new (C) NoStackProtectorAttr(getLocation(), C, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void NoStackProtectorAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((no_stack_protector))";
+    break;
+  }
+  case 1 : {
+    OS << " [[clang::no_stack_protector]]";
+    break;
+  }
+  case 2 : {
+    OS << " [[clang::no_stack_protector]]";
+    break;
+  }
+}
+}
+
+const char *NoStackProtectorAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "no_stack_protector";
+  case 1:
+    return "no_stack_protector";
+  case 2:
+    return "no_stack_protector";
+  }
+}
+
 NoThreadSafetyAnalysisAttr *NoThreadSafetyAnalysisAttr::clone(ASTContext &C) const {
   auto *A = new (C) NoThreadSafetyAnalysisAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -7034,6 +7324,42 @@
   }
 }
 
+RISCVInterruptAttr *RISCVInterruptAttr::clone(ASTContext &C) const {
+  auto *A = new (C) RISCVInterruptAttr(getLocation(), C, interrupt, getSpellingListIndex());
+  A->Inherited = Inherited;
+  A->IsPackExpansion = IsPackExpansion;
+  A->Implicit = Implicit;
+  return A;
+}
+
+void RISCVInterruptAttr::printPretty(raw_ostream &OS, const PrintingPolicy &Policy) const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    break;
+  case 0 : {
+    OS << " __attribute__((interrupt(\"" << RISCVInterruptAttr::ConvertInterruptTypeToStr(getInterrupt()) << "\")))";
+    break;
+  }
+  case 1 : {
+    OS << " [[gnu::interrupt(\"" << RISCVInterruptAttr::ConvertInterruptTypeToStr(getInterrupt()) << "\")]]";
+    break;
+  }
+}
+}
+
+const char *RISCVInterruptAttr::getSpelling() const {
+  switch (SpellingListIndex) {
+  default:
+    llvm_unreachable("Unknown attribute spelling!");
+    return "(No spelling)";
+  case 0:
+    return "interrupt";
+  case 1:
+    return "interrupt";
+  }
+}
+
 RegCallAttr *RegCallAttr::clone(ASTContext &C) const {
   auto *A = new (C) RegCallAttr(getLocation(), C, getSpellingListIndex());
   A->Inherited = Inherited;
@@ -9286,6 +9612,10 @@
     return cast<CFReturnsRetainedAttr>(this)->getSpelling();
   case attr::CFUnknownTransfer:
     return cast<CFUnknownTransferAttr>(this)->getSpelling();
+  case attr::CPUDispatch:
+    return cast<CPUDispatchAttr>(this)->getSpelling();
+  case attr::CPUSpecific:
+    return cast<CPUSpecificAttr>(this)->getSpelling();
   case attr::CUDAConstant:
     return cast<CUDAConstantAttr>(this)->getSpelling();
   case attr::CUDADevice:
@@ -9312,6 +9642,8 @@
     return cast<CarriesDependencyAttr>(this)->getSpelling();
   case attr::Cleanup:
     return cast<CleanupAttr>(this)->getSpelling();
+  case attr::CodeSeg:
+    return cast<CodeSegAttr>(this)->getSpelling();
   case attr::Cold:
     return cast<ColdAttr>(this)->getSpelling();
   case attr::Common:
@@ -9392,6 +9724,8 @@
     return cast<LTOVisibilityPublicAttr>(this)->getSpelling();
   case attr::LayoutVersion:
     return cast<LayoutVersionAttr>(this)->getSpelling();
+  case attr::LifetimeBound:
+    return cast<LifetimeBoundAttr>(this)->getSpelling();
   case attr::LockReturned:
     return cast<LockReturnedAttr>(this)->getSpelling();
   case attr::LocksExcluded:
@@ -9418,6 +9752,8 @@
     return cast<MicroMipsAttr>(this)->getSpelling();
   case attr::MinSize:
     return cast<MinSizeAttr>(this)->getSpelling();
+  case attr::MinVectorWidth:
+    return cast<MinVectorWidthAttr>(this)->getSpelling();
   case attr::Mips16:
     return cast<Mips16Attr>(this)->getSpelling();
   case attr::MipsInterrupt:
@@ -9464,6 +9800,8 @@
     return cast<NoSanitizeAttr>(this)->getSpelling();
   case attr::NoSplitStack:
     return cast<NoSplitStackAttr>(this)->getSpelling();
+  case attr::NoStackProtector:
+    return cast<NoStackProtectorAttr>(this)->getSpelling();
   case attr::NoThreadSafetyAnalysis:
     return cast<NoThreadSafetyAnalysisAttr>(this)->getSpelling();
   case attr::NoThrow:
@@ -9564,6 +9902,8 @@
     return cast<PtGuardedVarAttr>(this)->getSpelling();
   case attr::Pure:
     return cast<PureAttr>(this)->getSpelling();
+  case attr::RISCVInterrupt:
+    return cast<RISCVInterruptAttr>(this)->getSpelling();
   case attr::RegCall:
     return cast<RegCallAttr>(this)->getSpelling();
   case attr::ReleaseCapability:
@@ -9750,6 +10090,10 @@
     return cast<CFReturnsRetainedAttr>(this)->clone(C);
   case attr::CFUnknownTransfer:
     return cast<CFUnknownTransferAttr>(this)->clone(C);
+  case attr::CPUDispatch:
+    return cast<CPUDispatchAttr>(this)->clone(C);
+  case attr::CPUSpecific:
+    return cast<CPUSpecificAttr>(this)->clone(C);
   case attr::CUDAConstant:
     return cast<CUDAConstantAttr>(this)->clone(C);
   case attr::CUDADevice:
@@ -9776,6 +10120,8 @@
     return cast<CarriesDependencyAttr>(this)->clone(C);
   case attr::Cleanup:
     return cast<CleanupAttr>(this)->clone(C);
+  case attr::CodeSeg:
+    return cast<CodeSegAttr>(this)->clone(C);
   case attr::Cold:
     return cast<ColdAttr>(this)->clone(C);
   case attr::Common:
@@ -9856,6 +10202,8 @@
     return cast<LTOVisibilityPublicAttr>(this)->clone(C);
   case attr::LayoutVersion:
     return cast<LayoutVersionAttr>(this)->clone(C);
+  case attr::LifetimeBound:
+    return cast<LifetimeBoundAttr>(this)->clone(C);
   case attr::LockReturned:
     return cast<LockReturnedAttr>(this)->clone(C);
   case attr::LocksExcluded:
@@ -9882,6 +10230,8 @@
     return cast<MicroMipsAttr>(this)->clone(C);
   case attr::MinSize:
     return cast<MinSizeAttr>(this)->clone(C);
+  case attr::MinVectorWidth:
+    return cast<MinVectorWidthAttr>(this)->clone(C);
   case attr::Mips16:
     return cast<Mips16Attr>(this)->clone(C);
   case attr::MipsInterrupt:
@@ -9928,6 +10278,8 @@
     return cast<NoSanitizeAttr>(this)->clone(C);
   case attr::NoSplitStack:
     return cast<NoSplitStackAttr>(this)->clone(C);
+  case attr::NoStackProtector:
+    return cast<NoStackProtectorAttr>(this)->clone(C);
   case attr::NoThreadSafetyAnalysis:
     return cast<NoThreadSafetyAnalysisAttr>(this)->clone(C);
   case attr::NoThrow:
@@ -10028,6 +10380,8 @@
     return cast<PtGuardedVarAttr>(this)->clone(C);
   case attr::Pure:
     return cast<PureAttr>(this)->clone(C);
+  case attr::RISCVInterrupt:
+    return cast<RISCVInterruptAttr>(this)->clone(C);
   case attr::RegCall:
     return cast<RegCallAttr>(this)->clone(C);
   case attr::ReleaseCapability:
@@ -10214,6 +10568,10 @@
     return cast<CFReturnsRetainedAttr>(this)->printPretty(OS, Policy);
   case attr::CFUnknownTransfer:
     return cast<CFUnknownTransferAttr>(this)->printPretty(OS, Policy);
+  case attr::CPUDispatch:
+    return cast<CPUDispatchAttr>(this)->printPretty(OS, Policy);
+  case attr::CPUSpecific:
+    return cast<CPUSpecificAttr>(this)->printPretty(OS, Policy);
   case attr::CUDAConstant:
     return cast<CUDAConstantAttr>(this)->printPretty(OS, Policy);
   case attr::CUDADevice:
@@ -10240,6 +10598,8 @@
     return cast<CarriesDependencyAttr>(this)->printPretty(OS, Policy);
   case attr::Cleanup:
     return cast<CleanupAttr>(this)->printPretty(OS, Policy);
+  case attr::CodeSeg:
+    return cast<CodeSegAttr>(this)->printPretty(OS, Policy);
   case attr::Cold:
     return cast<ColdAttr>(this)->printPretty(OS, Policy);
   case attr::Common:
@@ -10320,6 +10680,8 @@
     return cast<LTOVisibilityPublicAttr>(this)->printPretty(OS, Policy);
   case attr::LayoutVersion:
     return cast<LayoutVersionAttr>(this)->printPretty(OS, Policy);
+  case attr::LifetimeBound:
+    return cast<LifetimeBoundAttr>(this)->printPretty(OS, Policy);
   case attr::LockReturned:
     return cast<LockReturnedAttr>(this)->printPretty(OS, Policy);
   case attr::LocksExcluded:
@@ -10346,6 +10708,8 @@
     return cast<MicroMipsAttr>(this)->printPretty(OS, Policy);
   case attr::MinSize:
     return cast<MinSizeAttr>(this)->printPretty(OS, Policy);
+  case attr::MinVectorWidth:
+    return cast<MinVectorWidthAttr>(this)->printPretty(OS, Policy);
   case attr::Mips16:
     return cast<Mips16Attr>(this)->printPretty(OS, Policy);
   case attr::MipsInterrupt:
@@ -10392,6 +10756,8 @@
     return cast<NoSanitizeAttr>(this)->printPretty(OS, Policy);
   case attr::NoSplitStack:
     return cast<NoSplitStackAttr>(this)->printPretty(OS, Policy);
+  case attr::NoStackProtector:
+    return cast<NoStackProtectorAttr>(this)->printPretty(OS, Policy);
   case attr::NoThreadSafetyAnalysis:
     return cast<NoThreadSafetyAnalysisAttr>(this)->printPretty(OS, Policy);
   case attr::NoThrow:
@@ -10492,6 +10858,8 @@
     return cast<PtGuardedVarAttr>(this)->printPretty(OS, Policy);
   case attr::Pure:
     return cast<PureAttr>(this)->printPretty(OS, Policy);
+  case attr::RISCVInterrupt:
+    return cast<RISCVInterruptAttr>(this)->printPretty(OS, Policy);
   case attr::RegCall:
     return cast<RegCallAttr>(this)->printPretty(OS, Policy);
   case attr::ReleaseCapability:
diff --git a/linux-x64/clang/include/clang/AST/AttrIterator.h b/linux-x64/clang/include/clang/AST/AttrIterator.h
index 56807b4..2087ecc 100644
--- a/linux-x64/clang/include/clang/AST/AttrIterator.h
+++ b/linux-x64/clang/include/clang/AST/AttrIterator.h
@@ -106,7 +106,7 @@
                          specific_attr_iterator Right) {
     assert((Left.Current == nullptr) == (Right.Current == nullptr));
     if (Left.Current < Right.Current)
-      Left.AdvanceToNext(Right.Current); 
+      Left.AdvanceToNext(Right.Current);
     else
       Right.AdvanceToNext(Left.Current);
     return Left.Current == Right.Current;
diff --git a/linux-x64/clang/include/clang/AST/AttrVisitor.inc b/linux-x64/clang/include/clang/AST/AttrVisitor.inc
index 0117372..594dec1 100644
--- a/linux-x64/clang/include/clang/AST/AttrVisitor.inc
+++ b/linux-x64/clang/include/clang/AST/AttrVisitor.inc
@@ -168,6 +168,14 @@
   bool VisitCFUnknownTransferAttr(CFUnknownTransferAttr *A) {
     return true; 
   }
+  bool TraverseCPUDispatchAttr(CPUDispatchAttr *A);
+  bool VisitCPUDispatchAttr(CPUDispatchAttr *A) {
+    return true; 
+  }
+  bool TraverseCPUSpecificAttr(CPUSpecificAttr *A);
+  bool VisitCPUSpecificAttr(CPUSpecificAttr *A) {
+    return true; 
+  }
   bool TraverseCUDAConstantAttr(CUDAConstantAttr *A);
   bool VisitCUDAConstantAttr(CUDAConstantAttr *A) {
     return true; 
@@ -220,6 +228,10 @@
   bool VisitCleanupAttr(CleanupAttr *A) {
     return true; 
   }
+  bool TraverseCodeSegAttr(CodeSegAttr *A);
+  bool VisitCodeSegAttr(CodeSegAttr *A) {
+    return true; 
+  }
   bool TraverseColdAttr(ColdAttr *A);
   bool VisitColdAttr(ColdAttr *A) {
     return true; 
@@ -380,6 +392,10 @@
   bool VisitLayoutVersionAttr(LayoutVersionAttr *A) {
     return true; 
   }
+  bool TraverseLifetimeBoundAttr(LifetimeBoundAttr *A);
+  bool VisitLifetimeBoundAttr(LifetimeBoundAttr *A) {
+    return true; 
+  }
   bool TraverseLockReturnedAttr(LockReturnedAttr *A);
   bool VisitLockReturnedAttr(LockReturnedAttr *A) {
     return true; 
@@ -432,6 +448,10 @@
   bool VisitMinSizeAttr(MinSizeAttr *A) {
     return true; 
   }
+  bool TraverseMinVectorWidthAttr(MinVectorWidthAttr *A);
+  bool VisitMinVectorWidthAttr(MinVectorWidthAttr *A) {
+    return true; 
+  }
   bool TraverseMips16Attr(Mips16Attr *A);
   bool VisitMips16Attr(Mips16Attr *A) {
     return true; 
@@ -524,6 +544,10 @@
   bool VisitNoSplitStackAttr(NoSplitStackAttr *A) {
     return true; 
   }
+  bool TraverseNoStackProtectorAttr(NoStackProtectorAttr *A);
+  bool VisitNoStackProtectorAttr(NoStackProtectorAttr *A) {
+    return true; 
+  }
   bool TraverseNoThreadSafetyAnalysisAttr(NoThreadSafetyAnalysisAttr *A);
   bool VisitNoThreadSafetyAnalysisAttr(NoThreadSafetyAnalysisAttr *A) {
     return true; 
@@ -724,6 +748,10 @@
   bool VisitPureAttr(PureAttr *A) {
     return true; 
   }
+  bool TraverseRISCVInterruptAttr(RISCVInterruptAttr *A);
+  bool VisitRISCVInterruptAttr(RISCVInterruptAttr *A) {
+    return true; 
+  }
   bool TraverseRegCallAttr(RegCallAttr *A);
   bool VisitRegCallAttr(RegCallAttr *A) {
     return true; 
@@ -1349,6 +1377,24 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseCPUDispatchAttr(CPUDispatchAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitCPUDispatchAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseCPUSpecificAttr(CPUSpecificAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitCPUSpecificAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseCUDAConstantAttr(CUDAConstantAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -1470,6 +1516,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseCodeSegAttr(CodeSegAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitCodeSegAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseColdAttr(ColdAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -1849,6 +1904,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseLifetimeBoundAttr(LifetimeBoundAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitLifetimeBoundAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseLockReturnedAttr(LockReturnedAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -1978,6 +2042,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseMinVectorWidthAttr(MinVectorWidthAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitMinVectorWidthAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseMips16Attr(Mips16Attr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2185,6 +2258,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseNoStackProtectorAttr(NoStackProtectorAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitNoStackProtectorAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseNoThreadSafetyAnalysisAttr(NoThreadSafetyAnalysisAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -2681,6 +2763,15 @@
 }
 
 template <typename Derived>
+bool VISITORCLASS<Derived>::TraverseRISCVInterruptAttr(RISCVInterruptAttr *A) {
+  if (!getDerived().VisitAttr(A))
+    return false;
+  if (!getDerived().VisitRISCVInterruptAttr(A))
+    return false;
+  return true;
+}
+
+template <typename Derived>
 bool VISITORCLASS<Derived>::TraverseRegCallAttr(RegCallAttr *A) {
   if (!getDerived().VisitAttr(A))
     return false;
@@ -3258,6 +3349,10 @@
       return getDerived().TraverseCFReturnsRetainedAttr(cast<CFReturnsRetainedAttr>(A));
     case attr::CFUnknownTransfer:
       return getDerived().TraverseCFUnknownTransferAttr(cast<CFUnknownTransferAttr>(A));
+    case attr::CPUDispatch:
+      return getDerived().TraverseCPUDispatchAttr(cast<CPUDispatchAttr>(A));
+    case attr::CPUSpecific:
+      return getDerived().TraverseCPUSpecificAttr(cast<CPUSpecificAttr>(A));
     case attr::CUDAConstant:
       return getDerived().TraverseCUDAConstantAttr(cast<CUDAConstantAttr>(A));
     case attr::CUDADevice:
@@ -3284,6 +3379,8 @@
       return getDerived().TraverseCarriesDependencyAttr(cast<CarriesDependencyAttr>(A));
     case attr::Cleanup:
       return getDerived().TraverseCleanupAttr(cast<CleanupAttr>(A));
+    case attr::CodeSeg:
+      return getDerived().TraverseCodeSegAttr(cast<CodeSegAttr>(A));
     case attr::Cold:
       return getDerived().TraverseColdAttr(cast<ColdAttr>(A));
     case attr::Common:
@@ -3364,6 +3461,8 @@
       return getDerived().TraverseLTOVisibilityPublicAttr(cast<LTOVisibilityPublicAttr>(A));
     case attr::LayoutVersion:
       return getDerived().TraverseLayoutVersionAttr(cast<LayoutVersionAttr>(A));
+    case attr::LifetimeBound:
+      return getDerived().TraverseLifetimeBoundAttr(cast<LifetimeBoundAttr>(A));
     case attr::LockReturned:
       return getDerived().TraverseLockReturnedAttr(cast<LockReturnedAttr>(A));
     case attr::LocksExcluded:
@@ -3390,6 +3489,8 @@
       return getDerived().TraverseMicroMipsAttr(cast<MicroMipsAttr>(A));
     case attr::MinSize:
       return getDerived().TraverseMinSizeAttr(cast<MinSizeAttr>(A));
+    case attr::MinVectorWidth:
+      return getDerived().TraverseMinVectorWidthAttr(cast<MinVectorWidthAttr>(A));
     case attr::Mips16:
       return getDerived().TraverseMips16Attr(cast<Mips16Attr>(A));
     case attr::MipsInterrupt:
@@ -3436,6 +3537,8 @@
       return getDerived().TraverseNoSanitizeAttr(cast<NoSanitizeAttr>(A));
     case attr::NoSplitStack:
       return getDerived().TraverseNoSplitStackAttr(cast<NoSplitStackAttr>(A));
+    case attr::NoStackProtector:
+      return getDerived().TraverseNoStackProtectorAttr(cast<NoStackProtectorAttr>(A));
     case attr::NoThreadSafetyAnalysis:
       return getDerived().TraverseNoThreadSafetyAnalysisAttr(cast<NoThreadSafetyAnalysisAttr>(A));
     case attr::NoThrow:
@@ -3536,6 +3639,8 @@
       return getDerived().TraversePtGuardedVarAttr(cast<PtGuardedVarAttr>(A));
     case attr::Pure:
       return getDerived().TraversePureAttr(cast<PureAttr>(A));
+    case attr::RISCVInterrupt:
+      return getDerived().TraverseRISCVInterruptAttr(cast<RISCVInterruptAttr>(A));
     case attr::RegCall:
       return getDerived().TraverseRegCallAttr(cast<RegCallAttr>(A));
     case attr::ReleaseCapability:
diff --git a/linux-x64/clang/include/clang/AST/Attrs.inc b/linux-x64/clang/include/clang/AST/Attrs.inc
index 586826b..1fdaa2a 100644
--- a/linux-x64/clang/include/clang/AST/Attrs.inc
+++ b/linux-x64/clang/include/clang/AST/Attrs.inc
@@ -1714,6 +1714,102 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::CFUnknownTransfer; }
 };
 
+class CPUDispatchAttr : public InheritableAttr {
+  unsigned cpus_Size;
+  IdentifierInfo * *cpus_;
+
+public:
+  static CPUDispatchAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) CPUDispatchAttr(Loc, Ctx, Cpus, CpusSize, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  CPUDispatchAttr(SourceRange R, ASTContext &Ctx
+              , IdentifierInfo * *Cpus, unsigned CpusSize
+              , unsigned SI
+             )
+    : InheritableAttr(attr::CPUDispatch, R, SI, false, false)
+              , cpus_Size(CpusSize), cpus_(new (Ctx, 16) IdentifierInfo *[cpus_Size])
+  {
+    std::copy(Cpus, Cpus + cpus_Size, cpus_);
+  }
+
+  CPUDispatchAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::CPUDispatch, R, SI, false, false)
+              , cpus_Size(0), cpus_(nullptr)
+  {
+  }
+
+  CPUDispatchAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  typedef IdentifierInfo ** cpus_iterator;
+  cpus_iterator cpus_begin() const { return cpus_; }
+  cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }
+  unsigned cpus_size() const { return cpus_Size; }
+  llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }
+
+
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::CPUDispatch; }
+};
+
+class CPUSpecificAttr : public InheritableAttr {
+  unsigned cpus_Size;
+  IdentifierInfo * *cpus_;
+
+public:
+  static CPUSpecificAttr *CreateImplicit(ASTContext &Ctx, IdentifierInfo * *Cpus, unsigned CpusSize, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) CPUSpecificAttr(Loc, Ctx, Cpus, CpusSize, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  CPUSpecificAttr(SourceRange R, ASTContext &Ctx
+              , IdentifierInfo * *Cpus, unsigned CpusSize
+              , unsigned SI
+             )
+    : InheritableAttr(attr::CPUSpecific, R, SI, false, false)
+              , cpus_Size(CpusSize), cpus_(new (Ctx, 16) IdentifierInfo *[cpus_Size])
+  {
+    std::copy(Cpus, Cpus + cpus_Size, cpus_);
+  }
+
+  CPUSpecificAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::CPUSpecific, R, SI, false, false)
+              , cpus_Size(0), cpus_(nullptr)
+  {
+  }
+
+  CPUSpecificAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  typedef IdentifierInfo ** cpus_iterator;
+  cpus_iterator cpus_begin() const { return cpus_; }
+  cpus_iterator cpus_end() const { return cpus_ + cpus_Size; }
+  unsigned cpus_size() const { return cpus_Size; }
+  llvm::iterator_range<cpus_iterator> cpus() const { return llvm::make_range(cpus_begin(), cpus_end()); }
+
+
+
+    unsigned ActiveArgIndex = 0;
+
+    IdentifierInfo *getCurCPUName() const {
+      return *(cpus_begin() + ActiveArgIndex);
+    }
+  
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::CPUSpecific; }
+};
+
 class CUDAConstantAttr : public InheritableAttr {
 public:
   static CUDAConstantAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -2150,6 +2246,50 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::Cleanup; }
 };
 
+class CodeSegAttr : public InheritableAttr {
+unsigned nameLength;
+char *name;
+
+public:
+  static CodeSegAttr *CreateImplicit(ASTContext &Ctx, llvm::StringRef Name, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) CodeSegAttr(Loc, Ctx, Name, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  CodeSegAttr(SourceRange R, ASTContext &Ctx
+              , llvm::StringRef Name
+              , unsigned SI
+             )
+    : InheritableAttr(attr::CodeSeg, R, SI, false, false)
+              , nameLength(Name.size()),name(new (Ctx, 1) char[nameLength])
+  {
+      if (!Name.empty())
+        std::memcpy(name, Name.data(), nameLength);
+  }
+
+  CodeSegAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  llvm::StringRef getName() const {
+    return llvm::StringRef(name, nameLength);
+  }
+  unsigned getNameLength() const {
+    return nameLength;
+  }
+  void setName(ASTContext &C, llvm::StringRef S) {
+    nameLength = S.size();
+    this->name = new (C, 1) char [nameLength];
+    if (!S.empty())
+      std::memcpy(this->name, S.data(), nameLength);
+  }
+
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::CodeSeg; }
+};
+
 class ColdAttr : public InheritableAttr {
 public:
   static ColdAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -2440,6 +2580,13 @@
                    const PrintingPolicy &Policy) const;
   const char *getSpelling() const;
 
+private:
+  bool PropagatedToBaseTemplate = false;
+
+public:
+  void setPropagatedToBaseTemplate() { PropagatedToBaseTemplate = true; }
+  bool wasPropagatedToBaseTemplate() { return PropagatedToBaseTemplate; }
+  
 
   static bool classof(const Attr *A) { return A->getKind() == attr::DLLImport; }
 };
@@ -3615,6 +3762,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::LayoutVersion; }
 };
 
+class LifetimeBoundAttr : public InheritableAttr {
+public:
+  static LifetimeBoundAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) LifetimeBoundAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  LifetimeBoundAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::LifetimeBound, R, SI, false, false)
+  {
+  }
+
+  LifetimeBoundAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::LifetimeBound; }
+};
+
 class LockReturnedAttr : public InheritableAttr {
 Expr * arg;
 
@@ -3701,6 +3872,8 @@
     InterleaveCount,
     Unroll,
     UnrollCount,
+    UnrollAndJam,
+    UnrollAndJamCount,
     Distribute
   };
 private:
@@ -3723,7 +3896,9 @@
   enum Spelling {
     Pragma_clang_loop = 0,
     Pragma_unroll = 1,
-    Pragma_nounroll = 2
+    Pragma_nounroll = 2,
+    Pragma_unroll_and_jam = 3,
+    Pragma_nounroll_and_jam = 4
   };
 
   static LoopHintAttr *CreateImplicit(ASTContext &Ctx, Spelling S, OptionType Option, LoopHintState State, Expr * Value, SourceRange Loc = SourceRange()) {
@@ -3755,6 +3930,8 @@
     case 0: return Pragma_clang_loop;
     case 1: return Pragma_unroll;
     case 2: return Pragma_nounroll;
+    case 3: return Pragma_unroll_and_jam;
+    case 4: return Pragma_nounroll_and_jam;
   }
   }
   OptionType getOption() const {
@@ -3769,6 +3946,8 @@
       .Case("interleave_count", LoopHintAttr::InterleaveCount)
       .Case("unroll", LoopHintAttr::Unroll)
       .Case("unroll_count", LoopHintAttr::UnrollCount)
+      .Case("unroll_and_jam", LoopHintAttr::UnrollAndJam)
+      .Case("unroll_and_jam_count", LoopHintAttr::UnrollAndJamCount)
       .Case("distribute", LoopHintAttr::Distribute)
       .Default(Optional<OptionType>());
     if (R) {
@@ -3786,6 +3965,8 @@
     case LoopHintAttr::InterleaveCount: return "interleave_count";
     case LoopHintAttr::Unroll: return "unroll";
     case LoopHintAttr::UnrollCount: return "unroll_count";
+    case LoopHintAttr::UnrollAndJam: return "unroll_and_jam";
+    case LoopHintAttr::UnrollAndJamCount: return "unroll_and_jam_count";
     case LoopHintAttr::Distribute: return "distribute";
     }
     llvm_unreachable("No enumerator with that value");
@@ -3832,6 +4013,8 @@
     case InterleaveCount: return "interleave_count";
     case Unroll: return "unroll";
     case UnrollCount: return "unroll_count";
+    case UnrollAndJam: return "unroll_and_jam";
+    case UnrollAndJamCount: return "unroll_and_jam_count";
     case Distribute: return "distribute";
     }
     llvm_unreachable("Unhandled LoopHint option.");
@@ -3841,9 +4024,9 @@
     unsigned SpellingIndex = getSpellingListIndex();
     // For "#pragma unroll" and "#pragma nounroll" the string "unroll" or
     // "nounroll" is already emitted as the pragma name.
-    if (SpellingIndex == Pragma_nounroll)
+    if (SpellingIndex == Pragma_nounroll || SpellingIndex == Pragma_nounroll_and_jam)
       return;
-    else if (SpellingIndex == Pragma_unroll) {
+    else if (SpellingIndex == Pragma_unroll || SpellingIndex == Pragma_unroll_and_jam) {
       OS << ' ' << getValueString(Policy);
       return;
     }
@@ -3879,6 +4062,11 @@
       return "#pragma nounroll";
     else if (SpellingIndex == Pragma_unroll)
       return "#pragma unroll" + (option == UnrollCount ? getValueString(Policy) : "");
+    else if (SpellingIndex == Pragma_nounroll_and_jam)
+      return "#pragma nounroll_and_jam";
+    else if (SpellingIndex == Pragma_unroll_and_jam)
+      return "#pragma unroll_and_jam" +
+        (option == UnrollAndJamCount ? getValueString(Policy) : "");
 
     assert(SpellingIndex == Pragma_clang_loop && "Unexpected spelling");
     return getOptionName(option) + getValueString(Policy);
@@ -3929,6 +4117,12 @@
     return A;
   }
 
+  static MSInheritanceAttr *CreateImplicit(ASTContext &Ctx, Spelling S, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) MSInheritanceAttr(Loc, Ctx, S);
+    A->setImplicit(true);
+    return A;
+  }
+
   MSInheritanceAttr(SourceRange R, ASTContext &Ctx
               , bool BestCase
               , unsigned SI
@@ -4215,6 +4409,38 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::MinSize; }
 };
 
+class MinVectorWidthAttr : public InheritableAttr {
+unsigned vectorWidth;
+
+public:
+  static MinVectorWidthAttr *CreateImplicit(ASTContext &Ctx, unsigned VectorWidth, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) MinVectorWidthAttr(Loc, Ctx, VectorWidth, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  MinVectorWidthAttr(SourceRange R, ASTContext &Ctx
+              , unsigned VectorWidth
+              , unsigned SI
+             )
+    : InheritableAttr(attr::MinVectorWidth, R, SI, false, false)
+              , vectorWidth(VectorWidth)
+  {
+  }
+
+  MinVectorWidthAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  unsigned getVectorWidth() const {
+    return vectorWidth;
+  }
+
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::MinVectorWidth; }
+};
+
 class Mips16Attr : public InheritableAttr {
 public:
   static Mips16Attr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -4901,6 +5127,30 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::NoSplitStack; }
 };
 
+class NoStackProtectorAttr : public InheritableAttr {
+public:
+  static NoStackProtectorAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) NoStackProtectorAttr(Loc, Ctx, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  NoStackProtectorAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::NoStackProtector, R, SI, false, false)
+  {
+  }
+
+  NoStackProtectorAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::NoStackProtector; }
+};
+
 class NoThreadSafetyAnalysisAttr : public InheritableAttr {
 public:
   static NoThreadSafetyAnalysisAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -6755,6 +7005,74 @@
   static bool classof(const Attr *A) { return A->getKind() == attr::Pure; }
 };
 
+class RISCVInterruptAttr : public InheritableAttr {
+public:
+  enum InterruptType {
+    user,
+    supervisor,
+    machine
+  };
+private:
+  InterruptType interrupt;
+
+public:
+  static RISCVInterruptAttr *CreateImplicit(ASTContext &Ctx, InterruptType Interrupt, SourceRange Loc = SourceRange()) {
+    auto *A = new (Ctx) RISCVInterruptAttr(Loc, Ctx, Interrupt, 0);
+    A->setImplicit(true);
+    return A;
+  }
+
+  RISCVInterruptAttr(SourceRange R, ASTContext &Ctx
+              , InterruptType Interrupt
+              , unsigned SI
+             )
+    : InheritableAttr(attr::RISCVInterrupt, R, SI, false, false)
+              , interrupt(Interrupt)
+  {
+  }
+
+  RISCVInterruptAttr(SourceRange R, ASTContext &Ctx
+              , unsigned SI
+             )
+    : InheritableAttr(attr::RISCVInterrupt, R, SI, false, false)
+              , interrupt(InterruptType(0))
+  {
+  }
+
+  RISCVInterruptAttr *clone(ASTContext &C) const;
+  void printPretty(raw_ostream &OS,
+                   const PrintingPolicy &Policy) const;
+  const char *getSpelling() const;
+  InterruptType getInterrupt() const {
+    return interrupt;
+  }
+
+  static bool ConvertStrToInterruptType(StringRef Val, InterruptType &Out) {
+    Optional<InterruptType> R = llvm::StringSwitch<Optional<InterruptType>>(Val)
+      .Case("user", RISCVInterruptAttr::user)
+      .Case("supervisor", RISCVInterruptAttr::supervisor)
+      .Case("machine", RISCVInterruptAttr::machine)
+      .Default(Optional<InterruptType>());
+    if (R) {
+      Out = *R;
+      return true;
+    }
+    return false;
+  }
+
+  static const char *ConvertInterruptTypeToStr(InterruptType Val) {
+    switch(Val) {
+    case RISCVInterruptAttr::user: return "user";
+    case RISCVInterruptAttr::supervisor: return "supervisor";
+    case RISCVInterruptAttr::machine: return "machine";
+    }
+    llvm_unreachable("No enumerator with that value");
+  }
+
+
+  static bool classof(const Attr *A) { return A->getKind() == attr::RISCVInterrupt; }
+};
+
 class RegCallAttr : public InheritableAttr {
 public:
   static RegCallAttr *CreateImplicit(ASTContext &Ctx, SourceRange Loc = SourceRange()) {
@@ -7764,7 +8082,7 @@
         // overall feature validity for the function with the rest of the
         // attributes on the function.
         if (Feature.startswith("fpmath=") || Feature.startswith("tune="))
-	  continue;
+          continue;
 
         // While we're here iterating check for a different target cpu.
         if (Feature.startswith("arch=")) {
diff --git a/linux-x64/clang/include/clang/AST/Availability.h b/linux-x64/clang/include/clang/AST/Availability.h
index 5ed8313..28f3c3c 100644
--- a/linux-x64/clang/include/clang/AST/Availability.h
+++ b/linux-x64/clang/include/clang/AST/Availability.h
@@ -15,12 +15,12 @@
 #define LLVM_CLANG_AST_AVAILABILITY_H
 
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/VersionTuple.h"
 
 namespace clang {
 
-/// \brief One specifier in an @available expression.
+/// One specifier in an @available expression.
 ///
 /// \code
 ///   @available(macos 10.10, *)
diff --git a/linux-x64/clang/include/clang/AST/BaseSubobject.h b/linux-x64/clang/include/clang/AST/BaseSubobject.h
index fdb7e71..2b702c7 100644
--- a/linux-x64/clang/include/clang/AST/BaseSubobject.h
+++ b/linux-x64/clang/include/clang/AST/BaseSubobject.h
@@ -24,21 +24,21 @@
 
 class CXXRecordDecl;
 
-// BaseSubobject - Uniquely identifies a direct or indirect base class. 
+// BaseSubobject - Uniquely identifies a direct or indirect base class.
 // Stores both the base class decl and the offset from the most derived class to
 // the base class. Used for vtable and VTT generation.
 class BaseSubobject {
   /// Base - The base class declaration.
   const CXXRecordDecl *Base;
-  
+
   /// BaseOffset - The offset from the most derived class to the base class.
   CharUnits BaseOffset;
-  
+
 public:
   BaseSubobject() = default;
   BaseSubobject(const CXXRecordDecl *Base, CharUnits BaseOffset)
       : Base(Base), BaseOffset(BaseOffset) {}
-  
+
   /// getBase - Returns the base class declaration.
   const CXXRecordDecl *getBase() const { return Base; }
 
@@ -74,7 +74,7 @@
                                                      Base.getBaseOffset()));
   }
 
-  static bool isEqual(const clang::BaseSubobject &LHS, 
+  static bool isEqual(const clang::BaseSubobject &LHS,
                       const clang::BaseSubobject &RHS) {
     return LHS == RHS;
   }
diff --git a/linux-x64/clang/include/clang/AST/BuiltinTypes.def b/linux-x64/clang/include/clang/AST/BuiltinTypes.def
index e4f5f7d..400efcb 100644
--- a/linux-x64/clang/include/clang/AST/BuiltinTypes.def
+++ b/linux-x64/clang/include/clang/AST/BuiltinTypes.def
@@ -72,6 +72,9 @@
 // 'wchar_t' for targets where it's unsigned
 SHARED_SINGLETON_TYPE(UNSIGNED_TYPE(WChar_U, WCharTy))
 
+// 'char8_t' in C++20 (proposed)
+UNSIGNED_TYPE(Char8, Char8Ty)
+
 // 'char16_t' in C++
 UNSIGNED_TYPE(Char16, Char16Ty)
 
@@ -119,6 +122,80 @@
 // '__int128_t'
 SIGNED_TYPE(Int128, Int128Ty)
 
+//===- Fixed point types --------------------------------------------------===//
+
+// 'short _Accum'
+SIGNED_TYPE(ShortAccum, ShortAccumTy)
+
+// '_Accum'
+SIGNED_TYPE(Accum, AccumTy)
+
+// 'long _Accum'
+SIGNED_TYPE(LongAccum, LongAccumTy)
+
+// 'unsigned short _Accum'
+UNSIGNED_TYPE(UShortAccum, UnsignedShortAccumTy)
+
+// 'unsigned _Accum'
+UNSIGNED_TYPE(UAccum, UnsignedAccumTy)
+
+// 'unsigned long _Accum'
+UNSIGNED_TYPE(ULongAccum, UnsignedLongAccumTy)
+
+// 'short _Fract'
+SIGNED_TYPE(ShortFract, ShortFractTy)
+
+// '_Fract'
+SIGNED_TYPE(Fract, FractTy)
+
+// 'long _Fract'
+SIGNED_TYPE(LongFract, LongFractTy)
+
+// 'unsigned short _Fract'
+UNSIGNED_TYPE(UShortFract, UnsignedShortFractTy)
+
+// 'unsigned _Fract'
+UNSIGNED_TYPE(UFract, UnsignedFractTy)
+
+// 'unsigned long _Fract'
+UNSIGNED_TYPE(ULongFract, UnsignedLongFractTy)
+
+// '_Sat short _Accum'
+SIGNED_TYPE(SatShortAccum, SatShortAccumTy)
+
+// '_Sat _Accum'
+SIGNED_TYPE(SatAccum, SatAccumTy)
+
+// '_Sat long _Accum'
+SIGNED_TYPE(SatLongAccum, SatLongAccumTy)
+
+// '_Sat unsigned short _Accum'
+UNSIGNED_TYPE(SatUShortAccum, SatUnsignedShortAccumTy)
+
+// '_Sat unsigned _Accum'
+UNSIGNED_TYPE(SatUAccum, SatUnsignedAccumTy)
+
+// '_Sat unsigned long _Accum'
+UNSIGNED_TYPE(SatULongAccum, SatUnsignedLongAccumTy)
+
+// '_Sat short _Fract'
+SIGNED_TYPE(SatShortFract, SatShortFractTy)
+
+// '_Sat _Fract'
+SIGNED_TYPE(SatFract, SatFractTy)
+
+// '_Sat long _Fract'
+SIGNED_TYPE(SatLongFract, SatLongFractTy)
+
+// '_Sat unsigned short _Fract'
+UNSIGNED_TYPE(SatUShortFract, SatUnsignedShortFractTy)
+
+// '_Sat unsigned _Fract'
+UNSIGNED_TYPE(SatUFract, SatUnsignedFractTy)
+
+// '_Sat unsigned long _Fract'
+UNSIGNED_TYPE(SatULongFract, SatUnsignedLongFractTy)
+
 //===- Floating point types -----------------------------------------------===//
 
 // 'half' in OpenCL, '__fp16' in ARM NEON.
diff --git a/linux-x64/clang/include/clang/AST/CXXInheritance.h b/linux-x64/clang/include/clang/AST/CXXInheritance.h
index 11fb229..f5e23f8 100644
--- a/linux-x64/clang/include/clang/AST/CXXInheritance.h
+++ b/linux-x64/clang/include/clang/AST/CXXInheritance.h
@@ -34,25 +34,25 @@
 
 class ASTContext;
 class NamedDecl;
-  
-/// \brief Represents an element in a path from a derived class to a
-/// base class. 
-/// 
+
+/// Represents an element in a path from a derived class to a
+/// base class.
+///
 /// Each step in the path references the link from a
 /// derived class to one of its direct base classes, along with a
 /// base "number" that identifies which base subobject of the
 /// original derived class we are referencing.
 struct CXXBasePathElement {
-  /// \brief The base specifier that states the link from a derived
+  /// The base specifier that states the link from a derived
   /// class to a base class, which will be followed by this base
   /// path element.
   const CXXBaseSpecifier *Base;
-  
-  /// \brief The record decl of the class that the base is a base of.
+
+  /// The record decl of the class that the base is a base of.
   const CXXRecordDecl *Class;
-  
-  /// \brief Identifies which base class subobject (of type
-  /// \c Base->getType()) this base path element refers to. 
+
+  /// Identifies which base class subobject (of type
+  /// \c Base->getType()) this base path element refers to.
   ///
   /// This value is only valid if \c !Base->isVirtual(), because there
   /// is no base numbering for the zero or one virtual bases of a
@@ -60,24 +60,24 @@
   int SubobjectNumber;
 };
 
-/// \brief Represents a path from a specific derived class
+/// Represents a path from a specific derived class
 /// (which is not represented as part of the path) to a particular
 /// (direct or indirect) base class subobject.
 ///
-/// Individual elements in the path are described by the \c CXXBasePathElement 
+/// Individual elements in the path are described by the \c CXXBasePathElement
 /// structure, which captures both the link from a derived class to one of its
 /// direct bases and identification describing which base class
 /// subobject is being used.
 class CXXBasePath : public SmallVector<CXXBasePathElement, 4> {
 public:
-  /// \brief The access along this inheritance path.  This is only
+  /// The access along this inheritance path.  This is only
   /// calculated when recording paths.  AS_none is a special value
   /// used to indicate a path which permits no legal access.
   AccessSpecifier Access = AS_public;
 
   CXXBasePath() = default;
 
-  /// \brief The set of declarations found inside this base class
+  /// The set of declarations found inside this base class
   /// subobject.
   DeclContext::lookup_result Decls;
 
@@ -119,53 +119,58 @@
 class CXXBasePaths {
   friend class CXXRecordDecl;
 
-  /// \brief The type from which this search originated.
+  /// The type from which this search originated.
   CXXRecordDecl *Origin = nullptr;
-  
+
   /// Paths - The actual set of paths that can be taken from the
   /// derived class to the same base class.
   std::list<CXXBasePath> Paths;
-  
+
   /// ClassSubobjects - Records the class subobjects for each class
-  /// type that we've seen. The first element in the pair says
+  /// type that we've seen. The first element IsVirtBase says
   /// whether we found a path to a virtual base for that class type,
-  /// while the element contains the number of non-virtual base
+  /// while NumberOfNonVirtBases contains the number of non-virtual base
   /// class subobjects for that class type. The key of the map is
   /// the cv-unqualified canonical type of the base class subobject.
-  llvm::SmallDenseMap<QualType, std::pair<bool, unsigned>, 8> ClassSubobjects;
+  struct IsVirtBaseAndNumberNonVirtBases {
+    unsigned IsVirtBase : 1;
+    unsigned NumberOfNonVirtBases : 31;
+  };
+  llvm::SmallDenseMap<QualType, IsVirtBaseAndNumberNonVirtBases, 8>
+      ClassSubobjects;
 
   /// VisitedDependentRecords - Records the dependent records that have been
   /// already visited.
-  llvm::SmallDenseSet<const CXXRecordDecl *, 4> VisitedDependentRecords;
+  llvm::SmallPtrSet<const CXXRecordDecl *, 4> VisitedDependentRecords;
+
+  /// DetectedVirtual - The base class that is virtual.
+  const RecordType *DetectedVirtual = nullptr;
+
+  /// ScratchPath - A BasePath that is used by Sema::lookupInBases
+  /// to help build the set of paths.
+  CXXBasePath ScratchPath;
+
+  /// Array of the declarations that have been found. This
+  /// array is constructed only if needed, e.g., to iterate over the
+  /// results within LookupResult.
+  std::unique_ptr<NamedDecl *[]> DeclsFound;
+  unsigned NumDeclsFound = 0;
 
   /// FindAmbiguities - Whether Sema::IsDerivedFrom should try find
   /// ambiguous paths while it is looking for a path from a derived
   /// type to a base type.
   bool FindAmbiguities;
-  
+
   /// RecordPaths - Whether Sema::IsDerivedFrom should record paths
   /// while it is determining whether there are paths from a derived
   /// type to a base type.
   bool RecordPaths;
-  
+
   /// DetectVirtual - Whether Sema::IsDerivedFrom should abort the search
   /// if it finds a path that goes across a virtual base. The virtual class
   /// is also recorded.
   bool DetectVirtual;
-  
-  /// ScratchPath - A BasePath that is used by Sema::lookupInBases
-  /// to help build the set of paths.
-  CXXBasePath ScratchPath;
 
-  /// DetectedVirtual - The base class that is virtual.
-  const RecordType *DetectedVirtual = nullptr;
-  
-  /// \brief Array of the declarations that have been found. This
-  /// array is constructed only if needed, e.g., to iterate over the
-  /// results within LookupResult.
-  std::unique_ptr<NamedDecl *[]> DeclsFound;
-  unsigned NumDeclsFound = 0;
-  
   void ComputeDeclsFound();
 
   bool lookupInBases(ASTContext &Context, const CXXRecordDecl *Record,
@@ -176,7 +181,7 @@
   using paths_iterator = std::list<CXXBasePath>::iterator;
   using const_paths_iterator = std::list<CXXBasePath>::const_iterator;
   using decl_iterator = NamedDecl **;
-  
+
   /// BasePaths - Construct a new BasePaths structure to record the
   /// paths for a derived-to-base search.
   explicit CXXBasePaths(bool FindAmbiguities = true, bool RecordPaths = true,
@@ -188,61 +193,61 @@
   paths_iterator end()   { return Paths.end(); }
   const_paths_iterator begin() const { return Paths.begin(); }
   const_paths_iterator end()   const { return Paths.end(); }
-  
+
   CXXBasePath&       front()       { return Paths.front(); }
   const CXXBasePath& front() const { return Paths.front(); }
-  
+
   using decl_range = llvm::iterator_range<decl_iterator>;
 
   decl_range found_decls();
-  
-  /// \brief Determine whether the path from the most-derived type to the
+
+  /// Determine whether the path from the most-derived type to the
   /// given base type is ambiguous (i.e., it refers to multiple subobjects of
   /// the same base type).
   bool isAmbiguous(CanQualType BaseType);
-  
-  /// \brief Whether we are finding multiple paths to detect ambiguities.
+
+  /// Whether we are finding multiple paths to detect ambiguities.
   bool isFindingAmbiguities() const { return FindAmbiguities; }
-  
-  /// \brief Whether we are recording paths.
+
+  /// Whether we are recording paths.
   bool isRecordingPaths() const { return RecordPaths; }
-  
-  /// \brief Specify whether we should be recording paths or not.
+
+  /// Specify whether we should be recording paths or not.
   void setRecordingPaths(bool RP) { RecordPaths = RP; }
-  
-  /// \brief Whether we are detecting virtual bases.
+
+  /// Whether we are detecting virtual bases.
   bool isDetectingVirtual() const { return DetectVirtual; }
-  
-  /// \brief The virtual base discovered on the path (if we are merely
+
+  /// The virtual base discovered on the path (if we are merely
   /// detecting virtuals).
   const RecordType* getDetectedVirtual() const {
     return DetectedVirtual;
   }
 
-  /// \brief Retrieve the type from which this base-paths search
+  /// Retrieve the type from which this base-paths search
   /// began
   CXXRecordDecl *getOrigin() const { return Origin; }
   void setOrigin(CXXRecordDecl *Rec) { Origin = Rec; }
-  
-  /// \brief Clear the base-paths results.
+
+  /// Clear the base-paths results.
   void clear();
-  
-  /// \brief Swap this data structure's contents with another CXXBasePaths 
+
+  /// Swap this data structure's contents with another CXXBasePaths
   /// object.
   void swap(CXXBasePaths &Other);
 };
 
-/// \brief Uniquely identifies a virtual method within a class
+/// Uniquely identifies a virtual method within a class
 /// hierarchy by the method itself and a class subobject number.
 struct UniqueVirtualMethod {
-  /// \brief The overriding virtual method.
+  /// The overriding virtual method.
   CXXMethodDecl *Method = nullptr;
 
-  /// \brief The subobject in which the overriding virtual method
+  /// The subobject in which the overriding virtual method
   /// resides.
   unsigned Subobject = 0;
 
-  /// \brief The virtual base class subobject of which this overridden
+  /// The virtual base class subobject of which this overridden
   /// virtual method is a part. Note that this records the closest
   /// derived virtual base class subobject.
   const CXXRecordDecl *InVirtualSubobject = nullptr;
@@ -266,7 +271,7 @@
   }
 };
 
-/// \brief The set of methods that override a given virtual method in
+/// The set of methods that override a given virtual method in
 /// each subobject where it occurs.
 ///
 /// The first part of the pair is the subobject in which the
@@ -310,7 +315,7 @@
   void replaceAll(UniqueVirtualMethod Overriding);
 };
 
-/// \brief A mapping from each virtual member function to its set of
+/// A mapping from each virtual member function to its set of
 /// final overriders.
 ///
 /// Within a class hierarchy for a given derived class, each virtual
@@ -364,7 +369,7 @@
 class CXXFinalOverriderMap
   : public llvm::MapVector<const CXXMethodDecl *, OverridingMethods> {};
 
-/// \brief A set of all the primary bases for a class.
+/// A set of all the primary bases for a class.
 class CXXIndirectPrimaryBaseSet
   : public llvm::SmallSet<const CXXRecordDecl*, 32> {};
 
diff --git a/linux-x64/clang/include/clang/AST/CanonicalType.h b/linux-x64/clang/include/clang/AST/CanonicalType.h
index 6487613..0e738da 100644
--- a/linux-x64/clang/include/clang/AST/CanonicalType.h
+++ b/linux-x64/clang/include/clang/AST/CanonicalType.h
@@ -44,7 +44,7 @@
 // Canonical, qualified type template
 //----------------------------------------------------------------------------//
 
-/// \brief Represents a canonical, potentially-qualified type.
+/// Represents a canonical, potentially-qualified type.
 ///
 /// The CanQual template is a lightweight smart pointer that provides access
 /// to the canonical representation of a type, where all typedefs and other
@@ -64,44 +64,44 @@
 /// a call to ASTContext::getCanonicalType().
 template<typename T = Type>
 class CanQual {
-  /// \brief The actual, canonical type.
+  /// The actual, canonical type.
   QualType Stored;
 
 public:
-  /// \brief Constructs a NULL canonical type.
+  /// Constructs a NULL canonical type.
   CanQual() = default;
 
-  /// \brief Converting constructor that permits implicit upcasting of
+  /// Converting constructor that permits implicit upcasting of
   /// canonical type pointers.
   template <typename U>
   CanQual(const CanQual<U> &Other,
           typename std::enable_if<std::is_base_of<T, U>::value, int>::type = 0);
 
-  /// \brief Retrieve the underlying type pointer, which refers to a
+  /// Retrieve the underlying type pointer, which refers to a
   /// canonical type.
   ///
   /// The underlying pointer must not be nullptr.
   const T *getTypePtr() const { return cast<T>(Stored.getTypePtr()); }
 
-  /// \brief Retrieve the underlying type pointer, which refers to a
+  /// Retrieve the underlying type pointer, which refers to a
   /// canonical type, or nullptr.
-  const T *getTypePtrOrNull() const { 
-    return cast_or_null<T>(Stored.getTypePtrOrNull()); 
+  const T *getTypePtrOrNull() const {
+    return cast_or_null<T>(Stored.getTypePtrOrNull());
   }
 
-  /// \brief Implicit conversion to a qualified type.
+  /// Implicit conversion to a qualified type.
   operator QualType() const { return Stored; }
 
-  /// \brief Implicit conversion to bool.
+  /// Implicit conversion to bool.
   explicit operator bool() const { return !isNull(); }
-  
+
   bool isNull() const {
     return Stored.isNull();
   }
 
   SplitQualType split() const { return Stored.split(); }
 
-  /// \brief Retrieve a canonical type pointer with a different static type,
+  /// Retrieve a canonical type pointer with a different static type,
   /// upcasting or downcasting as needed.
   ///
   /// The getAs() function is typically used to try to downcast to a
@@ -122,17 +122,17 @@
 
   template<typename U> CanProxy<U> castAs() const;
 
-  /// \brief Overloaded arrow operator that produces a canonical type
+  /// Overloaded arrow operator that produces a canonical type
   /// proxy.
   CanProxy<T> operator->() const;
 
-  /// \brief Retrieve all qualifiers.
+  /// Retrieve all qualifiers.
   Qualifiers getQualifiers() const { return Stored.getLocalQualifiers(); }
 
-  /// \brief Retrieve the const/volatile/restrict qualifiers.
+  /// Retrieve the const/volatile/restrict qualifiers.
   unsigned getCVRQualifiers() const { return Stored.getLocalCVRQualifiers(); }
 
-  /// \brief Determines whether this type has any qualifiers
+  /// Determines whether this type has any qualifiers
   bool hasQualifiers() const { return Stored.hasLocalQualifiers(); }
 
   bool isConstQualified() const {
@@ -147,45 +147,45 @@
     return Stored.isLocalRestrictQualified();
   }
 
-  /// \brief Determines if this canonical type is furthermore
+  /// Determines if this canonical type is furthermore
   /// canonical as a parameter.  The parameter-canonicalization
   /// process decays arrays to pointers and drops top-level qualifiers.
   bool isCanonicalAsParam() const {
     return Stored.isCanonicalAsParam();
   }
 
-  /// \brief Retrieve the unqualified form of this type.
+  /// Retrieve the unqualified form of this type.
   CanQual<T> getUnqualifiedType() const;
 
-  /// \brief Retrieves a version of this type with const applied.
+  /// Retrieves a version of this type with const applied.
   /// Note that this does not always yield a canonical type.
   QualType withConst() const {
     return Stored.withConst();
   }
 
-  /// \brief Determines whether this canonical type is more qualified than
+  /// Determines whether this canonical type is more qualified than
   /// the @p Other canonical type.
   bool isMoreQualifiedThan(CanQual<T> Other) const {
     return Stored.isMoreQualifiedThan(Other.Stored);
   }
 
-  /// \brief Determines whether this canonical type is at least as qualified as
+  /// Determines whether this canonical type is at least as qualified as
   /// the @p Other canonical type.
   bool isAtLeastAsQualifiedAs(CanQual<T> Other) const {
     return Stored.isAtLeastAsQualifiedAs(Other.Stored);
   }
 
-  /// \brief If the canonical type is a reference type, returns the type that
+  /// If the canonical type is a reference type, returns the type that
   /// it refers to; otherwise, returns the type itself.
   CanQual<Type> getNonReferenceType() const;
 
-  /// \brief Retrieve the internal representation of this canonical type.
+  /// Retrieve the internal representation of this canonical type.
   void *getAsOpaquePtr() const { return Stored.getAsOpaquePtr(); }
 
-  /// \brief Construct a canonical type from its internal representation.
+  /// Construct a canonical type from its internal representation.
   static CanQual<T> getFromOpaquePtr(void *Ptr);
 
-  /// \brief Builds a canonical type from a QualType.
+  /// Builds a canonical type from a QualType.
   ///
   /// This routine is inherently unsafe, because it requires the user to
   /// ensure that the given type is a canonical type with the correct
@@ -209,7 +209,7 @@
   return x.getAsOpaquePtr() != y.getAsOpaquePtr();
 }
 
-/// \brief Represents a canonical, potentially-qualified type.
+/// Represents a canonical, potentially-qualified type.
 using CanQualType = CanQual<Type>;
 
 inline CanQualType Type::getCanonicalTypeUnqualified() const {
@@ -234,7 +234,7 @@
 #define LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(Type, Accessor)             \
 Type Accessor() const { return this->getTypePtr()->Accessor(); }
 
-/// \brief Base class of all canonical proxy types, which is responsible for
+/// Base class of all canonical proxy types, which is responsible for
 /// storing the underlying canonical type and providing basic conversions.
 template<typename T>
 class CanProxyBase {
@@ -242,10 +242,10 @@
   CanQual<T> Stored;
 
 public:
-  /// \brief Retrieve the pointer to the underlying Type
+  /// Retrieve the pointer to the underlying Type
   const T *getTypePtr() const { return Stored.getTypePtr(); }
 
-  /// \brief Implicit conversion to the underlying pointer.
+  /// Implicit conversion to the underlying pointer.
   ///
   /// Also provides the ability to use canonical type proxies in a Boolean
   // context,e.g.,
@@ -254,7 +254,7 @@
   /// @endcode
   operator const T*() const { return this->Stored.getTypePtrOrNull(); }
 
-  /// \brief Try to convert the given canonical type to a specific structural
+  /// Try to convert the given canonical type to a specific structural
   /// type.
   template<typename U> CanProxy<U> getAs() const {
     return this->Stored.template getAs<U>();
@@ -313,7 +313,7 @@
   LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(bool, isSpecifierType)
   LLVM_CLANG_CANPROXY_SIMPLE_ACCESSOR(CXXRecordDecl*, getAsCXXRecordDecl)
 
-  /// \brief Retrieve the proxy-adaptor type.
+  /// Retrieve the proxy-adaptor type.
   ///
   /// This arrow operator is used when CanProxyAdaptor has been specialized
   /// for the given type T. In that case, we reference members of the
@@ -324,7 +324,7 @@
   }
 };
 
-/// \brief Replacable canonical proxy adaptor class that provides the link
+/// Replaceable canonical proxy adaptor class that provides the link
 /// between a canonical type and the accessors of the type.
 ///
 /// The CanProxyAdaptor is a replaceable class template that is instantiated
@@ -337,7 +337,7 @@
 template<typename T>
 struct CanProxyAdaptor : CanProxyBase<T> {};
 
-/// \brief Canonical proxy type returned when retrieving the members of a
+/// Canonical proxy type returned when retrieving the members of a
 /// canonical type or as the result of the @c CanQual<T>::getAs member
 /// function.
 ///
@@ -347,13 +347,13 @@
 template<typename T>
 class CanProxy : public CanProxyAdaptor<T> {
 public:
-  /// \brief Build a NULL proxy.
+  /// Build a NULL proxy.
   CanProxy() = default;
 
-  /// \brief Build a proxy to the given canonical type.
+  /// Build a proxy to the given canonical type.
   CanProxy(CanQual<T> Stored) { this->Stored = Stored; }
 
-  /// \brief Implicit conversion to the stored canonical type.
+  /// Implicit conversion to the stored canonical type.
   operator CanQual<T>() const { return this->Stored; }
 };
 
@@ -396,7 +396,7 @@
 // Canonical proxy adaptors for canonical type nodes.
 //----------------------------------------------------------------------------//
 
-/// \brief Iterator adaptor that turns an iterator over canonical QualTypes
+/// Iterator adaptor that turns an iterator over canonical QualTypes
 /// into an iterator over CanQualTypes.
 template <typename InputIterator>
 struct CanTypeIterator
diff --git a/linux-x64/clang/include/clang/AST/CharUnits.h b/linux-x64/clang/include/clang/AST/CharUnits.h
index ddead60..0aadf06 100644
--- a/linux-x64/clang/include/clang/AST/CharUnits.h
+++ b/linux-x64/clang/include/clang/AST/CharUnits.h
@@ -61,7 +61,7 @@
 
       /// fromQuantity - Construct a CharUnits quantity from a raw integer type.
       static CharUnits fromQuantity(QuantityType Quantity) {
-        return CharUnits(Quantity); 
+        return CharUnits(Quantity);
       }
 
       // Compound assignment.
@@ -87,7 +87,7 @@
       CharUnits operator-- (int) {
         return CharUnits(Quantity--);
       }
-       
+
       // Comparison operators.
       bool operator== (const CharUnits &Other) const {
         return Quantity == Other.Quantity;
@@ -97,21 +97,21 @@
       }
 
       // Relational operators.
-      bool operator<  (const CharUnits &Other) const { 
-        return Quantity <  Other.Quantity; 
+      bool operator<  (const CharUnits &Other) const {
+        return Quantity <  Other.Quantity;
       }
-      bool operator<= (const CharUnits &Other) const { 
+      bool operator<= (const CharUnits &Other) const {
         return Quantity <= Other.Quantity;
       }
-      bool operator>  (const CharUnits &Other) const { 
-        return Quantity >  Other.Quantity; 
+      bool operator>  (const CharUnits &Other) const {
+        return Quantity >  Other.Quantity;
       }
-      bool operator>= (const CharUnits &Other) const { 
-        return Quantity >= Other.Quantity; 
+      bool operator>= (const CharUnits &Other) const {
+        return Quantity >= Other.Quantity;
       }
 
       // Other predicates.
-      
+
       /// isZero - Test whether the quantity equals zero.
       bool isZero() const     { return Quantity == 0; }
 
@@ -172,7 +172,7 @@
         return CharUnits(-Quantity);
       }
 
-      
+
       // Conversions.
 
       /// getQuantity - Get the raw integer representation of this quantity.
@@ -205,7 +205,7 @@
   }; // class CharUnit
 } // namespace clang
 
-inline clang::CharUnits operator* (clang::CharUnits::QuantityType Scale, 
+inline clang::CharUnits operator* (clang::CharUnits::QuantityType Scale,
                                    const clang::CharUnits &CU) {
   return CU * Scale;
 }
@@ -223,8 +223,8 @@
   static clang::CharUnits getTombstoneKey() {
     clang::CharUnits::QuantityType Quantity =
       DenseMapInfo<clang::CharUnits::QuantityType>::getTombstoneKey();
-    
-    return clang::CharUnits::fromQuantity(Quantity);    
+
+    return clang::CharUnits::fromQuantity(Quantity);
   }
 
   static unsigned getHashValue(const clang::CharUnits &CU) {
@@ -232,7 +232,7 @@
     return DenseMapInfo<clang::CharUnits::QuantityType>::getHashValue(Quantity);
   }
 
-  static bool isEqual(const clang::CharUnits &LHS, 
+  static bool isEqual(const clang::CharUnits &LHS,
                       const clang::CharUnits &RHS) {
     return LHS == RHS;
   }
@@ -241,7 +241,7 @@
 template <> struct isPodLike<clang::CharUnits> {
   static const bool value = true;
 };
-  
+
 } // end namespace llvm
 
 #endif // LLVM_CLANG_AST_CHARUNITS_H
diff --git a/linux-x64/clang/include/clang/AST/Comment.h b/linux-x64/clang/include/clang/AST/Comment.h
index 94470cb..8660f1a 100644
--- a/linux-x64/clang/include/clang/AST/Comment.h
+++ b/linux-x64/clang/include/clang/AST/Comment.h
@@ -98,7 +98,7 @@
     unsigned RenderKind : 2;
     unsigned CommandID : CommandInfo::NumCommandIDBits;
   };
-  enum { NumInlineCommandCommentBits = NumInlineContentCommentBits + 2 + 
+  enum { NumInlineCommandCommentBits = NumInlineContentCommentBits + 2 +
                                        CommandInfo::NumCommandIDBits };
 
   class HTMLTagCommentBitfields {
@@ -146,7 +146,7 @@
     /// Contains values from CommandMarkerKind enum.
     unsigned CommandMarker : 1;
   };
-  enum { NumBlockCommandCommentBits = NumCommentBits + 
+  enum { NumBlockCommandCommentBits = NumCommentBits +
                                       CommandInfo::NumCommandIDBits + 1 };
 
   class ParamCommandCommentBitfields {
@@ -215,13 +215,17 @@
 
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return Range.getBegin();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return Range.getEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
   }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
   SourceLocation getLocation() const LLVM_READONLY { return Loc; }
 
@@ -351,8 +355,7 @@
   }
 
   SourceRange getCommandNameRange() const {
-    return SourceRange(getLocStart().getLocWithOffset(-1),
-                       getLocEnd());
+    return SourceRange(getBeginLoc().getLocWithOffset(-1), getEndLoc());
   }
 
   RenderKind getRenderKind() const {
@@ -566,9 +569,9 @@
 
     ParagraphCommentBits.IsWhitespaceValid = false;
 
-    setSourceRange(SourceRange(Content.front()->getLocStart(),
-                               Content.back()->getLocEnd()));
-    setLocation(Content.front()->getLocStart());
+    setSourceRange(SourceRange(Content.front()->getBeginLoc(),
+                               Content.back()->getEndLoc()));
+    setLocation(Content.front()->getBeginLoc());
   }
 
   static bool classof(const Comment *C) {
@@ -662,13 +665,13 @@
   }
 
   SourceLocation getCommandNameBeginLoc() const {
-    return getLocStart().getLocWithOffset(1);
+    return getBeginLoc().getLocWithOffset(1);
   }
 
   SourceRange getCommandNameRange(const CommandTraits &Traits) const {
     StringRef Name = getCommandName(Traits);
     return SourceRange(getCommandNameBeginLoc(),
-                       getLocStart().getLocWithOffset(1 + Name.size()));
+                       getBeginLoc().getLocWithOffset(1 + Name.size()));
   }
 
   unsigned getNumArgs() const {
@@ -688,7 +691,7 @@
     if (Args.size() > 0) {
       SourceLocation NewLocEnd = Args.back().Range.getEnd();
       if (NewLocEnd.isValid())
-        setSourceRange(SourceRange(getLocStart(), NewLocEnd));
+        setSourceRange(SourceRange(getBeginLoc(), NewLocEnd));
     }
   }
 
@@ -702,9 +705,9 @@
 
   void setParagraph(ParagraphComment *PC) {
     Paragraph = PC;
-    SourceLocation NewLocEnd = PC->getLocEnd();
+    SourceLocation NewLocEnd = PC->getEndLoc();
     if (NewLocEnd.isValid())
-      setSourceRange(SourceRange(getLocStart(), NewLocEnd));
+      setSourceRange(SourceRange(getBeginLoc(), NewLocEnd));
   }
 
   CommandMarkerKind getCommandMarker() const LLVM_READONLY {
@@ -978,7 +981,7 @@
   }
 
   SourceRange getTextRange() const {
-    return SourceRange(TextBegin, getLocEnd());
+    return SourceRange(TextBegin, getEndLoc());
   }
 };
 
@@ -987,17 +990,17 @@
   /// Declaration the comment is actually attached to (in the source).
   /// Should not be NULL.
   const Decl *CommentDecl;
-  
+
   /// CurrentDecl is the declaration with which the FullComment is associated.
   ///
-  /// It can be different from \c CommentDecl.  It happens when we we decide
+  /// It can be different from \c CommentDecl.  It happens when we decide
   /// that the comment originally attached to \c CommentDecl is fine for
   /// \c CurrentDecl too (for example, for a redeclaration or an overrider of
   /// \c CommentDecl).
   ///
   /// The information in the DeclInfo corresponds to CurrentDecl.
   const Decl *CurrentDecl;
-  
+
   /// Parameters that can be referenced by \\param if \c CommentDecl is something
   /// that we consider a "function".
   ArrayRef<const ParmVarDecl *> ParamVars;
@@ -1105,9 +1108,9 @@
     if (Blocks.empty())
       return;
 
-    setSourceRange(SourceRange(Blocks.front()->getLocStart(),
-                               Blocks.back()->getLocEnd()));
-    setLocation(Blocks.front()->getLocStart());
+    setSourceRange(
+        SourceRange(Blocks.front()->getBeginLoc(), Blocks.back()->getEndLoc()));
+    setLocation(Blocks.front()->getBeginLoc());
   }
 
   static bool classof(const Comment *C) {
@@ -1119,21 +1122,21 @@
   }
 
   child_iterator child_end() const {
-    return reinterpret_cast<child_iterator>(Blocks.end()); 
+    return reinterpret_cast<child_iterator>(Blocks.end());
   }
 
   const Decl *getDecl() const LLVM_READONLY {
     return ThisDeclInfo->CommentDecl;
   }
-  
+
   const DeclInfo *getDeclInfo() const LLVM_READONLY {
     if (!ThisDeclInfo->IsFilled)
       ThisDeclInfo->fill();
     return ThisDeclInfo;
   }
-  
+
   ArrayRef<BlockContentComment *> getBlocks() const { return Blocks; }
-  
+
 };
 } // end namespace comments
 } // end namespace clang
diff --git a/linux-x64/clang/include/clang/AST/CommentBriefParser.h b/linux-x64/clang/include/clang/AST/CommentBriefParser.h
index be5b8ee..baa2293 100644
--- a/linux-x64/clang/include/clang/AST/CommentBriefParser.h
+++ b/linux-x64/clang/include/clang/AST/CommentBriefParser.h
@@ -24,7 +24,7 @@
 ///
 /// Due to a variety of comment styles, it considers the following as "a brief
 /// description", in order of priority:
-/// \li a \\brief or \\short command,
+/// \li a \or \\short command,
 /// \li the first paragraph,
 /// \li a \\result or \\return or \\returns paragraph.
 class BriefParser {
diff --git a/linux-x64/clang/include/clang/AST/CommentCommandTraits.h b/linux-x64/clang/include/clang/AST/CommentCommandTraits.h
index 289f2fd..4fd0078 100644
--- a/linux-x64/clang/include/clang/AST/CommentCommandTraits.h
+++ b/linux-x64/clang/include/clang/AST/CommentCommandTraits.h
@@ -26,7 +26,7 @@
 namespace clang {
 namespace comments {
 
-/// \brief Information about a single command.
+/// Information about a single command.
 ///
 /// When reordering, adding or removing members please update the corresponding
 /// TableGen backend.
@@ -57,7 +57,7 @@
   unsigned IsBlockCommand : 1;
 
   /// True if this command is introducing a brief documentation
-  /// paragraph (\\brief or an alias).
+  /// paragraph (\or an alias).
   unsigned IsBriefCommand : 1;
 
   /// True if this command is \\returns or an alias.
@@ -77,29 +77,29 @@
   /// True if this command is \\deprecated or an alias.
   unsigned IsDeprecatedCommand : 1;
 
-  /// \brief True if this is a \\headerfile-like command.
+  /// True if this is a \\headerfile-like command.
   unsigned IsHeaderfileCommand : 1;
 
   /// True if we don't want to warn about this command being passed an empty
   /// paragraph.  Meaningful only for block commands.
   unsigned IsEmptyParagraphAllowed : 1;
 
-  /// \brief True if this command is a verbatim-like block command.
+  /// True if this command is a verbatim-like block command.
   ///
   /// A verbatim-like block command eats every character (except line starting
   /// decorations) until matching end command is seen or comment end is hit.
   unsigned IsVerbatimBlockCommand : 1;
 
-  /// \brief True if this command is an end command for a verbatim-like block.
+  /// True if this command is an end command for a verbatim-like block.
   unsigned IsVerbatimBlockEndCommand : 1;
 
-  /// \brief True if this command is a verbatim line command.
+  /// True if this command is a verbatim line command.
   ///
   /// A verbatim-like line command eats everything until a newline is seen or
   /// comment end is hit.
   unsigned IsVerbatimLineCommand : 1;
 
-  /// \brief True if this command contains a declaration for the entity being
+  /// True if this command contains a declaration for the entity being
   /// documented.
   ///
   /// For example:
@@ -107,18 +107,18 @@
   ///   \fn void f(int a);
   /// \endcode
   unsigned IsDeclarationCommand : 1;
-  
-  /// \brief True if verbatim-like line command is a function declaration.
+
+  /// True if verbatim-like line command is a function declaration.
   unsigned IsFunctionDeclarationCommand : 1;
 
-  /// \brief True if block command is further describing a container API; such
+  /// True if block command is further describing a container API; such
   /// as \@coclass, \@classdesign, etc.
   unsigned IsRecordLikeDetailCommand : 1;
-  
-  /// \brief True if block command is a container API; such as \@interface.
+
+  /// True if block command is a container API; such as \@interface.
   unsigned IsRecordLikeDeclarationCommand : 1;
-  
-  /// \brief True if this command is unknown.  This \c CommandInfo object was
+
+  /// True if this command is unknown.  This \c CommandInfo object was
   /// created during parsing.
   unsigned IsUnknownCommand : 1;
 };
@@ -150,7 +150,7 @@
   }
 
   const CommandInfo *getTypoCorrectCommandInfo(StringRef Typo) const;
-  
+
   const CommandInfo *getCommandInfo(unsigned CommandID) const;
 
   const CommandInfo *registerUnknownCommand(StringRef CommandName);
diff --git a/linux-x64/clang/include/clang/AST/CommentLexer.h b/linux-x64/clang/include/clang/AST/CommentLexer.h
index 5bb0758..3ef5b7c 100644
--- a/linux-x64/clang/include/clang/AST/CommentLexer.h
+++ b/linux-x64/clang/include/clang/AST/CommentLexer.h
@@ -52,7 +52,7 @@
 };
 } // end namespace tok
 
-/// \brief Comment token.
+/// Comment token.
 class Token {
   friend class Lexer;
   friend class TextTokenRetokenizer;
@@ -72,11 +72,11 @@
 
   /// Integer value associated with a token.
   ///
-  /// If the token is a konwn command, contains command ID and TextPtr is
+  /// If the token is a known command, contains command ID and TextPtr is
   /// unused (command spelling can be found with CommandTraits).  Otherwise,
   /// contains the length of the string that starts at TextPtr.
   unsigned IntVal;
-  
+
 public:
   SourceLocation getLocation() const LLVM_READONLY { return Loc; }
   void setLocation(SourceLocation SL) { Loc = SL; }
@@ -217,7 +217,7 @@
   void dump(const Lexer &L, const SourceManager &SM) const;
 };
 
-/// \brief Comment lexer.
+/// Comment lexer.
 class Lexer {
 private:
   Lexer(const Lexer &) = delete;
@@ -228,7 +228,7 @@
   llvm::BumpPtrAllocator &Allocator;
 
   DiagnosticsEngine &Diags;
-  
+
   const CommandTraits &Traits;
 
   const char *const BufferStart;
@@ -281,6 +281,11 @@
   /// command, including command marker.
   SmallString<16> VerbatimBlockEndCommandName;
 
+  /// If true, the commands, html tags, etc will be parsed and reported as
+  /// separate tokens inside the comment body. If false, the comment text will
+  /// be parsed into text and newline tokens.
+  bool ParseCommands;
+
   /// Given a character reference name (e.g., "lt"), return the character that
   /// it stands for (e.g., "<").
   StringRef resolveHTMLNamedCharacterReference(StringRef Name) const;
@@ -315,12 +320,11 @@
   /// Eat string matching regexp \code \s*\* \endcode.
   void skipLineStartingDecorations();
 
-  /// Lex stuff inside comments.  CommentEnd should be set correctly.
+  /// Lex comment text, including commands if ParseCommands is set to true.
   void lexCommentText(Token &T);
 
-  void setupAndLexVerbatimBlock(Token &T,
-                                const char *TextBegin,
-                                char Marker, const CommandInfo *Info);
+  void setupAndLexVerbatimBlock(Token &T, const char *TextBegin, char Marker,
+                                const CommandInfo *Info);
 
   void lexVerbatimBlockFirstLine(Token &T);
 
@@ -343,14 +347,13 @@
 
 public:
   Lexer(llvm::BumpPtrAllocator &Allocator, DiagnosticsEngine &Diags,
-        const CommandTraits &Traits,
-        SourceLocation FileLoc,
-        const char *BufferStart, const char *BufferEnd);
+        const CommandTraits &Traits, SourceLocation FileLoc,
+        const char *BufferStart, const char *BufferEnd,
+        bool ParseCommands = true);
 
   void lex(Token &T);
 
-  StringRef getSpelling(const Token &Tok,
-                        const SourceManager &SourceMgr,
+  StringRef getSpelling(const Token &Tok, const SourceManager &SourceMgr,
                         bool *Invalid = nullptr) const;
 };
 
diff --git a/linux-x64/clang/include/clang/AST/CommentSema.h b/linux-x64/clang/include/clang/AST/CommentSema.h
index 230e527..632eba7 100644
--- a/linux-x64/clang/include/clang/AST/CommentSema.h
+++ b/linux-x64/clang/include/clang/AST/CommentSema.h
@@ -55,7 +55,7 @@
   /// Contains a valid value if \c DeclInfo->IsFilled is true.
   llvm::StringMap<TParamCommandComment *> TemplateParameterDocs;
 
-  /// AST node for the \\brief command and its aliases.
+  /// AST node for the \command and its aliases.
   const BlockCommandComment *BriefCommand;
 
   /// AST node for the \\headerfile command.
@@ -187,15 +187,15 @@
   void checkReturnsCommand(const BlockCommandComment *Command);
 
   /// Emit diagnostics about duplicate block commands that should be
-  /// used only once per comment, e.g., \\brief and \\returns.
+  /// used only once per comment, e.g., \and \\returns.
   void checkBlockCommandDuplicate(const BlockCommandComment *Command);
 
   void checkDeprecatedCommand(const BlockCommandComment *Comment);
-  
+
   void checkFunctionDeclVerbatimLine(const BlockCommandComment *Comment);
-  
+
   void checkContainerDeclVerbatimLine(const BlockCommandComment *Comment);
-  
+
   void checkContainerDecl(const BlockCommandComment *Comment);
 
   /// Resolve parameter names to parameter indexes in function declaration.
diff --git a/linux-x64/clang/include/clang/AST/ComparisonCategories.h b/linux-x64/clang/include/clang/AST/ComparisonCategories.h
new file mode 100644
index 0000000..23bfd70
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/ComparisonCategories.h
@@ -0,0 +1,243 @@
+//===- ComparisonCategories.h - Three Way Comparison Data -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines the Comparison Category enum and data types, which
+//  store the types and expressions needed to support operator<=>
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_AST_COMPARISONCATEGORIES_H
+#define LLVM_CLANG_AST_COMPARISONCATEGORIES_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/APSInt.h"
+#include "llvm/ADT/DenseMap.h"
+#include <array>
+#include <cassert>
+
+namespace llvm {
+  class StringRef;
+  class APSInt;
+}
+
+namespace clang {
+
+class ASTContext;
+class VarDecl;
+class CXXRecordDecl;
+class Sema;
+class QualType;
+class NamespaceDecl;
+
+/// An enumeration representing the different comparison categories
+/// types.
+///
+/// C++2a [cmp.categories.pre] The types weak_equality, strong_equality,
+/// partial_ordering, weak_ordering, and strong_ordering are collectively
+/// termed the comparison category types.
+enum class ComparisonCategoryType : unsigned char {
+  WeakEquality,
+  StrongEquality,
+  PartialOrdering,
+  WeakOrdering,
+  StrongOrdering,
+  First = WeakEquality,
+  Last = StrongOrdering
+};
+
+/// An enumeration representing the possible results of a three-way
+/// comparison. These values map onto instances of comparison category types
+/// defined in the standard library. e.g. 'std::strong_ordering::less'.
+enum class ComparisonCategoryResult : unsigned char {
+  Equal,
+  Equivalent,
+  Nonequivalent,
+  Nonequal,
+  Less,
+  Greater,
+  Unordered,
+  Last = Unordered
+};
+
+class ComparisonCategoryInfo {
+  friend class ComparisonCategories;
+  friend class Sema;
+
+public:
+  ComparisonCategoryInfo(const ASTContext &Ctx, CXXRecordDecl *RD,
+                         ComparisonCategoryType Kind)
+      : Ctx(Ctx), Record(RD), Kind(Kind) {}
+
+  struct ValueInfo {
+    ComparisonCategoryResult Kind;
+    VarDecl *VD;
+
+    ValueInfo(ComparisonCategoryResult Kind, VarDecl *VD)
+        : Kind(Kind), VD(VD) {}
+
+    /// True iff we've successfully evaluated the variable as a constant
+    /// expression and extracted its integer value.
+    bool hasValidIntValue() const;
+
+    /// Get the constant integer value used by this variable to represent
+    /// the comparison category result type.
+    llvm::APSInt getIntValue() const;
+  };
+private:
+  const ASTContext &Ctx;
+
+  /// A map containing the comparison category result decls from the
+  /// standard library. The key is a value of ComparisonCategoryResult.
+  mutable llvm::SmallVector<
+      ValueInfo, static_cast<unsigned>(ComparisonCategoryResult::Last) + 1>
+      Objects;
+
+  /// Lookup the ValueInfo struct for the specified ValueKind. If the
+  /// VarDecl for the value cannot be found, nullptr is returned.
+  ///
+  /// If the ValueInfo does not have a valid integer value the variable
+  /// is evaluated as a constant expression to determine that value.
+  ValueInfo *lookupValueInfo(ComparisonCategoryResult ValueKind) const;
+
+public:
+  /// The declaration for the comparison category type from the
+  /// standard library.
+  // FIXME: Make this const
+  CXXRecordDecl *Record = nullptr;
+
+  /// The Kind of the comparison category type
+  ComparisonCategoryType Kind;
+
+public:
+  QualType getType() const;
+
+  const ValueInfo *getValueInfo(ComparisonCategoryResult ValueKind) const {
+    ValueInfo *Info = lookupValueInfo(ValueKind);
+    assert(Info &&
+           "comparison category does not contain the specified result kind");
+    assert(Info->hasValidIntValue() &&
+           "couldn't determine the integer constant for this value");
+    return Info;
+  }
+
+  /// True iff the comparison category is an equality comparison.
+  bool isEquality() const { return !isOrdered(); }
+
+  /// True iff the comparison category is a relational comparison.
+  bool isOrdered() const {
+    using CCK = ComparisonCategoryType;
+    return Kind == CCK::PartialOrdering || Kind == CCK::WeakOrdering ||
+           Kind == CCK::StrongOrdering;
+  }
+
+  /// True iff the comparison is "strong". i.e. it checks equality and
+  /// not equivalence.
+  bool isStrong() const {
+    using CCK = ComparisonCategoryType;
+    return Kind == CCK::StrongEquality || Kind == CCK::StrongOrdering;
+  }
+
+  /// True iff the comparison is not totally ordered.
+  bool isPartial() const {
+    using CCK = ComparisonCategoryType;
+    return Kind == CCK::PartialOrdering;
+  }
+
+  /// Converts the specified result kind into the the correct result kind
+  /// for this category. Specifically it lowers strong equality results to
+  /// weak equivalence if needed.
+  ComparisonCategoryResult makeWeakResult(ComparisonCategoryResult Res) const {
+    using CCR = ComparisonCategoryResult;
+    if (!isStrong()) {
+      if (Res == CCR::Equal)
+        return CCR::Equivalent;
+      if (Res == CCR::Nonequal)
+        return CCR::Nonequivalent;
+    }
+    return Res;
+  }
+
+  const ValueInfo *getEqualOrEquiv() const {
+    return getValueInfo(makeWeakResult(ComparisonCategoryResult::Equal));
+  }
+  const ValueInfo *getNonequalOrNonequiv() const {
+    assert(isEquality());
+    return getValueInfo(makeWeakResult(ComparisonCategoryResult::Nonequal));
+  }
+  const ValueInfo *getLess() const {
+    assert(isOrdered());
+    return getValueInfo(ComparisonCategoryResult::Less);
+  }
+  const ValueInfo *getGreater() const {
+    assert(isOrdered());
+    return getValueInfo(ComparisonCategoryResult::Greater);
+  }
+  const ValueInfo *getUnordered() const {
+    assert(isPartial());
+    return getValueInfo(ComparisonCategoryResult::Unordered);
+  }
+};
+
+class ComparisonCategories {
+public:
+  static StringRef getCategoryString(ComparisonCategoryType Kind);
+  static StringRef getResultString(ComparisonCategoryResult Kind);
+
+  /// Return the list of results which are valid for the specified
+  /// comparison category type.
+  static std::vector<ComparisonCategoryResult>
+  getPossibleResultsForType(ComparisonCategoryType Type);
+
+  /// Return the comparison category information for the category
+  /// specified by 'Kind'.
+  const ComparisonCategoryInfo &getInfo(ComparisonCategoryType Kind) const {
+    const ComparisonCategoryInfo *Result = lookupInfo(Kind);
+    assert(Result != nullptr &&
+           "information for specified comparison category has not been built");
+    return *Result;
+  }
+
+  /// Return the comparison category information as specified by
+  /// `getCategoryForType(Ty)`. If the information is not already cached,
+  /// the declaration is looked up and a cache entry is created.
+  /// NOTE: Lookup is expected to succeed. Use lookupInfo if failure is
+  /// possible.
+  const ComparisonCategoryInfo &getInfoForType(QualType Ty) const;
+
+public:
+  /// Return the cached comparison category information for the
+  /// specified 'Kind'. If no cache entry is present the comparison category
+  /// type is looked up. If lookup fails nullptr is returned. Otherwise, a
+  /// new cache entry is created and returned
+  const ComparisonCategoryInfo *lookupInfo(ComparisonCategoryType Kind) const;
+
+  ComparisonCategoryInfo *lookupInfo(ComparisonCategoryType Kind) {
+    const auto &This = *this;
+    return const_cast<ComparisonCategoryInfo *>(This.lookupInfo(Kind));
+  }
+
+private:
+  const ComparisonCategoryInfo *lookupInfoForType(QualType Ty) const;
+
+private:
+  friend class ASTContext;
+
+  explicit ComparisonCategories(const ASTContext &Ctx) : Ctx(Ctx) {}
+
+  const ASTContext &Ctx;
+
+  /// A map from the ComparisonCategoryType (represented as 'char') to the
+  /// cached information for the specified category.
+  mutable llvm::DenseMap<char, ComparisonCategoryInfo> Data;
+  mutable NamespaceDecl *StdNS = nullptr;
+};
+
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/AST/DataCollection.h b/linux-x64/clang/include/clang/AST/DataCollection.h
index 229ac2b..8b2a834 100644
--- a/linux-x64/clang/include/clang/AST/DataCollection.h
+++ b/linux-x64/clang/include/clang/AST/DataCollection.h
@@ -7,12 +7,12 @@
 //
 //===----------------------------------------------------------------------===//
 /// \file
-/// \brief This file declares helper methods for collecting data from AST nodes.
+/// This file declares helper methods for collecting data from AST nodes.
 ///
 /// To collect data from Stmt nodes, subclass ConstStmtVisitor and include
 /// StmtDataCollectors.inc after defining the macros that you need. This
 /// provides data collection implementations for most Stmt kinds. Note
-/// that that code requires some conditions to be met:
+/// that the code requires some conditions to be met:
 ///
 ///   - There must be a method addData(const T &Data) that accepts strings,
 ///     integral types as well as QualType. All data is forwarded using
diff --git a/linux-x64/clang/include/clang/AST/Decl.h b/linux-x64/clang/include/clang/AST/Decl.h
index da164c6..0c910e0 100644
--- a/linux-x64/clang/include/clang/AST/Decl.h
+++ b/linux-x64/clang/include/clang/AST/Decl.h
@@ -81,9 +81,9 @@
 /// A client can read the relevant info using TypeLoc wrappers, e.g:
 /// @code
 /// TypeLoc TL = TypeSourceInfo->getTypeLoc();
-/// TL.getStartLoc().print(OS, SrcMgr);
+/// TL.getBeginLoc().print(OS, SrcMgr);
 /// @endcode
-class LLVM_ALIGNAS(8) TypeSourceInfo {
+class alignas(8) TypeSourceInfo {
   // Contains a memory block after the class, used for type source information,
   // allocated by ASTContext.
   friend class ASTContext;
@@ -98,7 +98,7 @@
 
   /// Return the TypeLoc wrapper for the type source info.
   TypeLoc getTypeLoc() const; // implemented in TypeLoc.h
-  
+
   /// Override the type stored in this TypeSourceInfo. Use with caution!
   void overrideType(QualType T) { Ty = T; }
 };
@@ -488,7 +488,7 @@
                            SourceLocation IdentL, IdentifierInfo *II,
                            SourceLocation GnuLabelL);
   static LabelDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   LabelStmt *getStmt() const { return TheStmt; }
   void setStmt(LabelStmt *T) { TheStmt = T; }
 
@@ -511,8 +511,8 @@
 };
 
 /// Represent a C++ namespace.
-class NamespaceDecl : public NamedDecl, public DeclContext, 
-                      public Redeclarable<NamespaceDecl> 
+class NamespaceDecl : public NamedDecl, public DeclContext,
+                      public Redeclarable<NamespaceDecl>
 {
   /// The starting location of the source range, pointing
   /// to either the namespace or the inline keyword.
@@ -523,7 +523,7 @@
 
   /// A pointer to either the anonymous namespace that lives just inside
   /// this namespace or to the first namespace in the chain (the latter case
-  /// only when this is not the first in the chain), along with a 
+  /// only when this is not the first in the chain), along with a
   /// boolean value indicating whether this is an inline namespace.
   llvm::PointerIntPair<NamespaceDecl *, 1, bool> AnonOrFirstNamespaceAndInline;
 
@@ -614,7 +614,11 @@
     return SourceRange(LocStart, RBraceLoc);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LocStart; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LocStart; }
   SourceLocation getRBraceLoc() const { return RBraceLoc; }
   void setLocStart(SourceLocation L) { LocStart = L; }
   void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
@@ -735,7 +739,11 @@
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     return getOuterLocStart();
   }
 
@@ -1232,30 +1240,30 @@
 
   EvaluatedStmt *ensureEvaluatedStmt() const;
 
-  /// \brief Attempt to evaluate the value of the initializer attached to this
+  /// Attempt to evaluate the value of the initializer attached to this
   /// declaration, and produce notes explaining why it cannot be evaluated or is
   /// not a constant expression. Returns a pointer to the value if evaluation
   /// succeeded, 0 otherwise.
   APValue *evaluateValue() const;
   APValue *evaluateValue(SmallVectorImpl<PartialDiagnosticAt> &Notes) const;
 
-  /// \brief Return the already-evaluated value of this variable's
+  /// Return the already-evaluated value of this variable's
   /// initializer, or NULL if the value is not yet known. Returns pointer
   /// to untyped APValue if the value could not be evaluated.
   APValue *getEvaluatedValue() const;
 
-  /// \brief Determines whether it is already known whether the
+  /// Determines whether it is already known whether the
   /// initializer is an integral constant expression or not.
   bool isInitKnownICE() const;
 
-  /// \brief Determines whether the initializer is an integral constant
+  /// Determines whether the initializer is an integral constant
   /// expression, or in C++11, whether the initializer is a constant
   /// expression.
   ///
   /// \pre isInitKnownICE()
   bool isInitICE() const;
 
-  /// \brief Determine whether the value of the initializer attached to this
+  /// Determine whether the value of the initializer attached to this
   /// declaration is an integral constant expression.
   bool checkInitIsICE() const;
 
@@ -1263,7 +1271,7 @@
     VarDeclBits.InitStyle = Style;
   }
 
-  /// \brief The style of initialization for this declaration.
+  /// The style of initialization for this declaration.
   ///
   /// C-style initialization is "int x = 1;". Call-style initialization is
   /// a C++98 direct-initializer, e.g. "int x(1);". The Init expression will be
@@ -1277,18 +1285,18 @@
     return static_cast<InitializationStyle>(VarDeclBits.InitStyle);
   }
 
-  /// \brief Whether the initializer is a direct-initializer (list or call).
+  /// Whether the initializer is a direct-initializer (list or call).
   bool isDirectInit() const {
     return getInitStyle() != CInit;
   }
 
-  /// \brief If this definition should pretend to be a declaration.
+  /// If this definition should pretend to be a declaration.
   bool isThisDeclarationADemotedDefinition() const {
     return isa<ParmVarDecl>(this) ? false :
       NonParmVarDeclBits.IsThisDeclarationADemotedDefinition;
   }
 
-  /// \brief This is a definition which should be demoted to a declaration.
+  /// This is a definition which should be demoted to a declaration.
   ///
   /// In some cases (mostly module merging) we can end up with two visible
   /// definitions one of which needs to be demoted to a declaration to keep
@@ -1299,7 +1307,7 @@
     NonParmVarDeclBits.IsThisDeclarationADemotedDefinition = 1;
   }
 
-  /// \brief Determine whether this variable is the exception variable in a
+  /// Determine whether this variable is the exception variable in a
   /// C++ catch statememt or an Objective-C \@catch statement.
   bool isExceptionVariable() const {
     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.ExceptionVar;
@@ -1309,7 +1317,7 @@
     NonParmVarDeclBits.ExceptionVar = EV;
   }
 
-  /// \brief Determine whether this local variable can be used with the named
+  /// Determine whether this local variable can be used with the named
   /// return value optimization (NRVO).
   ///
   /// The named return value optimization (NRVO) works by marking certain
@@ -1327,7 +1335,7 @@
     NonParmVarDeclBits.NRVOVariable = NRVO;
   }
 
-  /// \brief Determine whether this variable is the for-range-declaration in
+  /// Determine whether this variable is the for-range-declaration in
   /// a C++0x for-range statement.
   bool isCXXForRangeDecl() const {
     return isa<ParmVarDecl>(this) ? false : NonParmVarDeclBits.CXXForRangeDecl;
@@ -1337,7 +1345,7 @@
     NonParmVarDeclBits.CXXForRangeDecl = FRD;
   }
 
-  /// \brief Determine whether this variable is a for-loop declaration for a
+  /// Determine whether this variable is a for-loop declaration for a
   /// for-in statement in Objective-C.
   bool isObjCForDecl() const {
     return NonParmVarDeclBits.ObjCForDecl;
@@ -1347,7 +1355,7 @@
     NonParmVarDeclBits.ObjCForDecl = FRD;
   }
 
-  /// \brief Determine whether this variable is an ARC pseudo-__strong
+  /// Determine whether this variable is an ARC pseudo-__strong
   /// variable.  A pseudo-__strong variable has a __strong-qualified
   /// type but does not actually retain the object written into it.
   /// Generally such variables are also 'const' for safety.
@@ -1407,41 +1415,41 @@
     NonParmVarDeclBits.PreviousDeclInSameBlockScope = Same;
   }
 
-  /// \brief Retrieve the variable declaration from which this variable could
+  /// Retrieve the variable declaration from which this variable could
   /// be instantiated, if it is an instantiation (rather than a non-template).
   VarDecl *getTemplateInstantiationPattern() const;
 
-  /// \brief If this variable is an instantiated static data member of a
+  /// If this variable is an instantiated static data member of a
   /// class template specialization, returns the templated static data member
   /// from which it was instantiated.
   VarDecl *getInstantiatedFromStaticDataMember() const;
 
-  /// \brief If this variable is an instantiation of a variable template or a
+  /// If this variable is an instantiation of a variable template or a
   /// static data member of a class template, determine what kind of
   /// template specialization or instantiation this is.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
-  /// \brief If this variable is an instantiation of a variable template or a
+  /// If this variable is an instantiation of a variable template or a
   /// static data member of a class template, determine its point of
   /// instantiation.
   SourceLocation getPointOfInstantiation() const;
 
-  /// \brief If this variable is an instantiation of a static data member of a
+  /// If this variable is an instantiation of a static data member of a
   /// class template specialization, retrieves the member specialization
   /// information.
   MemberSpecializationInfo *getMemberSpecializationInfo() const;
 
-  /// \brief For a static data member that was instantiated from a static
+  /// For a static data member that was instantiated from a static
   /// data member of a class template, set the template specialiation kind.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
                         SourceLocation PointOfInstantiation = SourceLocation());
 
-  /// \brief Specify that this variable is an instantiation of the
+  /// Specify that this variable is an instantiation of the
   /// static data member VD.
   void setInstantiationOfStaticDataMember(VarDecl *VD,
                                           TemplateSpecializationKind TSK);
 
-  /// \brief Retrieves the variable template that is described by this
+  /// Retrieves the variable template that is described by this
   /// variable declaration.
   ///
   /// Every variable template is represented as a VarTemplateDecl and a
@@ -1456,6 +1464,11 @@
 
   void setDescribedVarTemplate(VarTemplateDecl *Template);
 
+  // Is this variable known to have a definition somewhere in the complete
+  // program? This may be true even if the declaration has internal linkage and
+  // has no definition within this source file.
+  bool isKnownToBeDefined() const;
+
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) { return K >= firstVar && K <= lastVar; }
@@ -1613,7 +1626,7 @@
 
   void setDefaultArg(Expr *defarg);
 
-  /// \brief Retrieve the source range that covers the entire default
+  /// Retrieve the source range that covers the entire default
   /// argument.
   SourceRange getDefaultArgRange() const;
   void setUninstantiatedDefaultArg(Expr *arg);
@@ -1661,7 +1674,7 @@
 
   QualType getOriginalType() const;
 
-  /// \brief Determine whether this parameter is actually a function
+  /// Determine whether this parameter is actually a function
   /// parameter pack.
   bool isParameterPack() const;
 
@@ -1706,10 +1719,13 @@
 /// contains all of the information known about the function. Other,
 /// previous declarations of the function are available via the
 /// getPreviousDecl() chain.
-class FunctionDecl : public DeclaratorDecl, public DeclContext,
+class FunctionDecl : public DeclaratorDecl,
+                     public DeclContext,
                      public Redeclarable<FunctionDecl> {
+  // This class stores some data in DeclContext::FunctionDeclBits
+  // to save some space. Use the provided accessors to access it.
 public:
-  /// \brief The kind of templated function a FunctionDecl can be.
+  /// The kind of templated function a FunctionDecl can be.
   enum TemplatedKind {
     TK_NonTemplate,
     TK_FunctionTemplate,
@@ -1726,67 +1742,9 @@
 
   LazyDeclStmtPtr Body;
 
-  // FIXME: This can be packed into the bitfields in DeclContext.
-  // NOTE: VC++ packs bitfields poorly if the types differ.
-  unsigned SClass : 3;
-  unsigned IsInline : 1;
-  unsigned IsInlineSpecified : 1;
-
-protected:
-  // This is shared by CXXConstructorDecl, CXXConversionDecl, and
-  // CXXDeductionGuideDecl.
-  unsigned IsExplicitSpecified : 1;
-
-private:
-  unsigned IsVirtualAsWritten : 1;
-  unsigned IsPure : 1;
-  unsigned HasInheritedPrototype : 1;
-  unsigned HasWrittenPrototype : 1;
-  unsigned IsDeleted : 1;
-  unsigned IsTrivial : 1; // sunk from CXXMethodDecl
-
-  /// This flag indicates whether this function is trivial for the purpose of
-  /// calls. This is meaningful only when this function is a copy/move
-  /// constructor or a destructor.
-  unsigned IsTrivialForCall : 1;
-
-  unsigned IsDefaulted : 1; // sunk from CXXMethoDecl
-  unsigned IsExplicitlyDefaulted : 1; //sunk from CXXMethodDecl
-  unsigned HasImplicitReturnZero : 1;
-  unsigned IsLateTemplateParsed : 1;
-  unsigned IsConstexpr : 1;
-  unsigned InstantiationIsPending : 1;
-
-  /// \brief Indicates if the function uses __try.
-  unsigned UsesSEHTry : 1;
-
-  /// \brief Indicates if the function was a definition but its body was
-  /// skipped.
-  unsigned HasSkippedBody : 1;
-
-  /// Indicates if the function declaration will have a body, once we're done
-  /// parsing it.
-  unsigned WillHaveBody : 1;
-
-  /// Indicates that this function is a multiversioned function using attribute
-  /// 'target'.
-  unsigned IsMultiVersion : 1;
-
-protected:
-  /// [C++17] Only used by CXXDeductionGuideDecl. Declared here to avoid
-  /// increasing the size of CXXDeductionGuideDecl by the size of an unsigned
-  /// int as opposed to adding a single bit to FunctionDecl.
-  /// Indicates that the Deduction Guide is the implicitly generated 'copy
-  /// deduction candidate' (is used during overload resolution).
-  unsigned IsCopyDeductionCandidate : 1;
-
-private:
-
-  /// Store the ODRHash after first calculation.
-  unsigned HasODRHash : 1;
   unsigned ODRHash;
 
-  /// \brief End part of this FunctionDecl's source range.
+  /// End part of this FunctionDecl's source range.
   ///
   /// We could compute the full range in getSourceRange(). However, when we're
   /// dealing with a function definition deserialized from a PCH/AST file,
@@ -1795,7 +1753,7 @@
   /// EndRangeLoc.
   SourceLocation EndRangeLoc;
 
-  /// \brief The template or declaration that this declaration
+  /// The template or declaration that this declaration
   /// describes or was instantiated from, respectively.
   ///
   /// For non-templates, this value will be NULL. For function
@@ -1817,7 +1775,7 @@
   /// the DeclaratorDecl base class.
   DeclarationNameLoc DNLoc;
 
-  /// \brief Specify that this function declaration is actually a function
+  /// Specify that this function declaration is actually a function
   /// template specialization.
   ///
   /// \param C the ASTContext.
@@ -1846,32 +1804,29 @@
                           const TemplateArgumentListInfo *TemplateArgsAsWritten,
                                          SourceLocation PointOfInstantiation);
 
-  /// \brief Specify that this record is an instantiation of the
+  /// Specify that this record is an instantiation of the
   /// member function FD.
   void setInstantiationOfMemberFunction(ASTContext &C, FunctionDecl *FD,
                                         TemplateSpecializationKind TSK);
 
   void setParams(ASTContext &C, ArrayRef<ParmVarDecl *> NewParamInfo);
 
+  // This is unfortunately needed because ASTDeclWriter::VisitFunctionDecl
+  // need to access this bit but we want to avoid making ASTDeclWriter
+  // a friend of FunctionDeclBitfields just for this.
+  bool isDeletedBit() const { return FunctionDeclBits.IsDeleted; }
+
+  /// Whether an ODRHash has been stored.
+  bool hasODRHash() const { return FunctionDeclBits.HasODRHash; }
+
+  /// State that an ODRHash has been stored.
+  void setHasODRHash(bool B = true) { FunctionDeclBits.HasODRHash = B; }
+
 protected:
   FunctionDecl(Kind DK, ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
                const DeclarationNameInfo &NameInfo, QualType T,
                TypeSourceInfo *TInfo, StorageClass S, bool isInlineSpecified,
-               bool isConstexprSpecified)
-      : DeclaratorDecl(DK, DC, NameInfo.getLoc(), NameInfo.getName(), T, TInfo,
-                       StartLoc),
-        DeclContext(DK), redeclarable_base(C), SClass(S),
-        IsInline(isInlineSpecified), IsInlineSpecified(isInlineSpecified),
-        IsExplicitSpecified(false), IsVirtualAsWritten(false), IsPure(false),
-        HasInheritedPrototype(false), HasWrittenPrototype(true),
-        IsDeleted(false), IsTrivial(false), IsTrivialForCall(false),
-        IsDefaulted(false),
-        IsExplicitlyDefaulted(false), HasImplicitReturnZero(false),
-        IsLateTemplateParsed(false), IsConstexpr(isConstexprSpecified),
-        InstantiationIsPending(false), UsesSEHTry(false), HasSkippedBody(false),
-        WillHaveBody(false), IsMultiVersion(false),
-        IsCopyDeductionCandidate(false), HasODRHash(false), ODRHash(0),
-        EndRangeLoc(NameInfo.getEndLoc()), DNLoc(NameInfo.getInfo()) {}
+               bool isConstexprSpecified);
 
   using redeclarable_base = Redeclarable<FunctionDecl>;
 
@@ -1926,7 +1881,7 @@
                               bool isConstexprSpecified = false);
 
   static FunctionDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-                       
+
   DeclarationNameInfo getNameInfo() const {
     return DeclarationNameInfo(getDeclName(), getLocation(), DNLoc);
   }
@@ -1980,7 +1935,7 @@
     return isDefined(Definition);
   }
 
-  /// \brief Get the definition for this declaration.
+  /// Get the definition for this declaration.
   FunctionDecl *getDefinition() {
     const FunctionDecl *Definition;
     if (isDefined(Definition))
@@ -2010,13 +1965,13 @@
   /// This does not determine whether the function has been defined (e.g., in a
   /// previous definition); for that information, use isDefined.
   bool isThisDeclarationADefinition() const {
-    return IsDeleted || IsDefaulted || Body || HasSkippedBody ||
-           IsLateTemplateParsed || WillHaveBody || hasDefiningAttr();
+    return isDeletedAsWritten() || isDefaulted() || Body || hasSkippedBody() ||
+           isLateTemplateParsed() || willHaveBody() || hasDefiningAttr();
   }
 
   /// Returns whether this specific declaration of the function has a body.
   bool doesThisDeclarationHaveABody() const {
-    return Body || IsLateTemplateParsed;
+    return Body || isLateTemplateParsed();
   }
 
   void setBody(Stmt *B);
@@ -2026,77 +1981,124 @@
   bool isVariadic() const;
 
   /// Whether this function is marked as virtual explicitly.
-  bool isVirtualAsWritten() const { return IsVirtualAsWritten; }
-  void setVirtualAsWritten(bool V) { IsVirtualAsWritten = V; }
+  bool isVirtualAsWritten() const {
+    return FunctionDeclBits.IsVirtualAsWritten;
+  }
+
+  /// State that this function is marked as virtual explicitly.
+  void setVirtualAsWritten(bool V) { FunctionDeclBits.IsVirtualAsWritten = V; }
 
   /// Whether this virtual function is pure, i.e. makes the containing class
   /// abstract.
-  bool isPure() const { return IsPure; }
+  bool isPure() const { return FunctionDeclBits.IsPure; }
   void setPure(bool P = true);
 
   /// Whether this templated function will be late parsed.
-  bool isLateTemplateParsed() const { return IsLateTemplateParsed; }
-  void setLateTemplateParsed(bool ILT = true) { IsLateTemplateParsed = ILT; }
+  bool isLateTemplateParsed() const {
+    return FunctionDeclBits.IsLateTemplateParsed;
+  }
+
+  /// State that this templated function will be late parsed.
+  void setLateTemplateParsed(bool ILT = true) {
+    FunctionDeclBits.IsLateTemplateParsed = ILT;
+  }
 
   /// Whether this function is "trivial" in some specialized C++ senses.
   /// Can only be true for default constructors, copy constructors,
   /// copy assignment operators, and destructors.  Not meaningful until
   /// the class has been fully built by Sema.
-  bool isTrivial() const { return IsTrivial; }
-  void setTrivial(bool IT) { IsTrivial = IT; }
+  bool isTrivial() const { return FunctionDeclBits.IsTrivial; }
+  void setTrivial(bool IT) { FunctionDeclBits.IsTrivial = IT; }
 
-  bool isTrivialForCall() const { return IsTrivialForCall; }
-  void setTrivialForCall(bool IT) { IsTrivialForCall = IT; }
+  bool isTrivialForCall() const { return FunctionDeclBits.IsTrivialForCall; }
+  void setTrivialForCall(bool IT) { FunctionDeclBits.IsTrivialForCall = IT; }
 
   /// Whether this function is defaulted per C++0x. Only valid for
   /// special member functions.
-  bool isDefaulted() const { return IsDefaulted; }
-  void setDefaulted(bool D = true) { IsDefaulted = D; }
+  bool isDefaulted() const { return FunctionDeclBits.IsDefaulted; }
+  void setDefaulted(bool D = true) { FunctionDeclBits.IsDefaulted = D; }
 
   /// Whether this function is explicitly defaulted per C++0x. Only valid
   /// for special member functions.
-  bool isExplicitlyDefaulted() const { return IsExplicitlyDefaulted; }
-  void setExplicitlyDefaulted(bool ED = true) { IsExplicitlyDefaulted = ED; }
+  bool isExplicitlyDefaulted() const {
+    return FunctionDeclBits.IsExplicitlyDefaulted;
+  }
+
+  /// State that this function is explicitly defaulted per C++0x. Only valid
+  /// for special member functions.
+  void setExplicitlyDefaulted(bool ED = true) {
+    FunctionDeclBits.IsExplicitlyDefaulted = ED;
+  }
 
   /// Whether falling off this function implicitly returns null/zero.
   /// If a more specific implicit return value is required, front-ends
   /// should synthesize the appropriate return statements.
-  bool hasImplicitReturnZero() const { return HasImplicitReturnZero; }
-  void setHasImplicitReturnZero(bool IRZ) { HasImplicitReturnZero = IRZ; }
+  bool hasImplicitReturnZero() const {
+    return FunctionDeclBits.HasImplicitReturnZero;
+  }
 
-  /// \brief Whether this function has a prototype, either because one
+  /// State that falling off this function implicitly returns null/zero.
+  /// If a more specific implicit return value is required, front-ends
+  /// should synthesize the appropriate return statements.
+  void setHasImplicitReturnZero(bool IRZ) {
+    FunctionDeclBits.HasImplicitReturnZero = IRZ;
+  }
+
+  /// Whether this function has a prototype, either because one
   /// was explicitly written or because it was "inherited" by merging
   /// a declaration without a prototype with a declaration that has a
   /// prototype.
   bool hasPrototype() const {
-    return HasWrittenPrototype || HasInheritedPrototype;
+    return hasWrittenPrototype() || hasInheritedPrototype();
   }
 
-  bool hasWrittenPrototype() const { return HasWrittenPrototype; }
+  /// Whether this function has a written prototype.
+  bool hasWrittenPrototype() const {
+    return FunctionDeclBits.HasWrittenPrototype;
+  }
 
-  /// \brief Whether this function inherited its prototype from a
+  /// State that this function has a written prototype.
+  void setHasWrittenPrototype(bool P = true) {
+    FunctionDeclBits.HasWrittenPrototype = P;
+  }
+
+  /// Whether this function inherited its prototype from a
   /// previous declaration.
-  bool hasInheritedPrototype() const { return HasInheritedPrototype; }
-  void setHasInheritedPrototype(bool P = true) { HasInheritedPrototype = P; }
+  bool hasInheritedPrototype() const {
+    return FunctionDeclBits.HasInheritedPrototype;
+  }
+
+  /// State that this function inherited its prototype from a
+  /// previous declaration.
+  void setHasInheritedPrototype(bool P = true) {
+    FunctionDeclBits.HasInheritedPrototype = P;
+  }
 
   /// Whether this is a (C++11) constexpr function or constexpr constructor.
-  bool isConstexpr() const { return IsConstexpr; }
-  void setConstexpr(bool IC) { IsConstexpr = IC; }
+  bool isConstexpr() const { return FunctionDeclBits.IsConstexpr; }
+  void setConstexpr(bool IC) { FunctionDeclBits.IsConstexpr = IC; }
 
-  /// \brief Whether the instantiation of this function is pending.
+  /// Whether the instantiation of this function is pending.
   /// This bit is set when the decision to instantiate this function is made
   /// and unset if and when the function body is created. That leaves out
   /// cases where instantiation did not happen because the template definition
   /// was not seen in this TU. This bit remains set in those cases, under the
   /// assumption that the instantiation will happen in some other TU.
-  bool instantiationIsPending() const { return InstantiationIsPending; }
-  void setInstantiationIsPending(bool IC) { InstantiationIsPending = IC; }
+  bool instantiationIsPending() const {
+    return FunctionDeclBits.InstantiationIsPending;
+  }
 
-  /// \brief Indicates the function uses __try.
-  bool usesSEHTry() const { return UsesSEHTry; }
-  void setUsesSEHTry(bool UST) { UsesSEHTry = UST; }
+  /// State that the instantiation of this function is pending.
+  /// (see instantiationIsPending)
+  void setInstantiationIsPending(bool IC) {
+    FunctionDeclBits.InstantiationIsPending = IC;
+  }
 
-  /// \brief Whether this function has been deleted.
+  /// Indicates the function uses __try.
+  bool usesSEHTry() const { return FunctionDeclBits.UsesSEHTry; }
+  void setUsesSEHTry(bool UST) { FunctionDeclBits.UsesSEHTry = UST; }
+
+  /// Whether this function has been deleted.
   ///
   /// A function that is "deleted" (via the C++0x "= delete" syntax)
   /// acts like a normal function, except that it cannot actually be
@@ -2115,19 +2117,25 @@
   /// };
   /// @endcode
   // If a function is deleted, its first declaration must be.
-  bool isDeleted() const { return getCanonicalDecl()->IsDeleted; }
-  bool isDeletedAsWritten() const { return IsDeleted && !IsDefaulted; }
-  void setDeletedAsWritten(bool D = true) { IsDeleted = D; }
+  bool isDeleted() const {
+    return getCanonicalDecl()->FunctionDeclBits.IsDeleted;
+  }
 
-  /// \brief Determines whether this function is "main", which is the
+  bool isDeletedAsWritten() const {
+    return FunctionDeclBits.IsDeleted && !isDefaulted();
+  }
+
+  void setDeletedAsWritten(bool D = true) { FunctionDeclBits.IsDeleted = D; }
+
+  /// Determines whether this function is "main", which is the
   /// entry point into an executable program.
   bool isMain() const;
 
-  /// \brief Determines whether this function is a MSVCRT user defined entry
+  /// Determines whether this function is a MSVCRT user defined entry
   /// point.
   bool isMSVCRTEntryPoint() const;
 
-  /// \brief Determines whether this operator new or delete is one
+  /// Determines whether this operator new or delete is one
   /// of the reserved global placement operators:
   ///    void *operator new(size_t, void *);
   ///    void *operator new[](size_t, void *);
@@ -2142,7 +2150,7 @@
   /// This function must be an allocation or deallocation function.
   bool isReservedGlobalPlacementOperator() const;
 
-  /// \brief Determines whether this function is one of the replaceable
+  /// Determines whether this function is one of the replaceable
   /// global allocation functions:
   ///    void *operator new(size_t);
   ///    void *operator new(size_t, const std::nothrow_t &) noexcept;
@@ -2162,48 +2170,59 @@
   /// true through IsAligned.
   bool isReplaceableGlobalAllocationFunction(bool *IsAligned = nullptr) const;
 
-  /// \brief Determine whether this is a destroying operator delete.
+  /// Determine whether this is a destroying operator delete.
   bool isDestroyingOperatorDelete() const;
 
   /// Compute the language linkage.
   LanguageLinkage getLanguageLinkage() const;
 
-  /// \brief Determines whether this function is a function with
+  /// Determines whether this function is a function with
   /// external, C linkage.
   bool isExternC() const;
 
-  /// \brief Determines whether this function's context is, or is nested within,
+  /// Determines whether this function's context is, or is nested within,
   /// a C++ extern "C" linkage spec.
   bool isInExternCContext() const;
 
-  /// \brief Determines whether this function's context is, or is nested within,
+  /// Determines whether this function's context is, or is nested within,
   /// a C++ extern "C++" linkage spec.
   bool isInExternCXXContext() const;
 
-  /// \brief Determines whether this is a global function.
+  /// Determines whether this is a global function.
   bool isGlobal() const;
 
-  /// \brief Determines whether this function is known to be 'noreturn', through
+  /// Determines whether this function is known to be 'noreturn', through
   /// an attribute on its declaration or its type.
   bool isNoReturn() const;
 
-  /// \brief True if the function was a definition but its body was skipped.
-  bool hasSkippedBody() const { return HasSkippedBody; }
-  void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; }
+  /// True if the function was a definition but its body was skipped.
+  bool hasSkippedBody() const { return FunctionDeclBits.HasSkippedBody; }
+  void setHasSkippedBody(bool Skipped = true) {
+    FunctionDeclBits.HasSkippedBody = Skipped;
+  }
 
   /// True if this function will eventually have a body, once it's fully parsed.
-  bool willHaveBody() const { return WillHaveBody; }
-  void setWillHaveBody(bool V = true) { WillHaveBody = V; }
+  bool willHaveBody() const { return FunctionDeclBits.WillHaveBody; }
+  void setWillHaveBody(bool V = true) { FunctionDeclBits.WillHaveBody = V; }
 
   /// True if this function is considered a multiversioned function.
-  bool isMultiVersion() const { return getCanonicalDecl()->IsMultiVersion; }
+  bool isMultiVersion() const {
+    return getCanonicalDecl()->FunctionDeclBits.IsMultiVersion;
+  }
 
   /// Sets the multiversion state for this declaration and all of its
   /// redeclarations.
   void setIsMultiVersion(bool V = true) {
-    getCanonicalDecl()->IsMultiVersion = V;
+    getCanonicalDecl()->FunctionDeclBits.IsMultiVersion = V;
   }
 
+  /// True if this function is a multiversioned dispatch function as a part of
+  /// the cpu_specific/cpu_dispatch functionality.
+  bool isCPUDispatchMultiVersion() const;
+  /// True if this function is a multiversioned processor specific function as a
+  /// part of the cpu_specific/cpu_dispatch functionality.
+  bool isCPUSpecificMultiVersion() const;
+
   void setPreviousDeclaration(FunctionDecl * PrevDecl);
 
   FunctionDecl *getCanonicalDecl() override;
@@ -2259,52 +2278,67 @@
     return getType()->getAs<FunctionType>()->getReturnType();
   }
 
-  /// \brief Attempt to compute an informative source range covering the
+  /// Attempt to compute an informative source range covering the
   /// function return type. This may omit qualifiers and other information with
   /// limited representation in the AST.
   SourceRange getReturnTypeSourceRange() const;
 
-  /// \brief Attempt to compute an informative source range covering the
+  /// Attempt to compute an informative source range covering the
   /// function exception specification, if any.
   SourceRange getExceptionSpecSourceRange() const;
 
-  /// \brief Determine the type of an expression that calls this function.
+  /// Determine the type of an expression that calls this function.
   QualType getCallResultType() const {
     assert(getType()->getAs<FunctionType>() && "Expected a FunctionType!");
     return getType()->getAs<FunctionType>()->getCallResultType(getASTContext());
   }
 
-  /// \brief Returns the WarnUnusedResultAttr that is either declared on this
+  /// Returns the WarnUnusedResultAttr that is either declared on this
   /// function, or its return type declaration.
   const Attr *getUnusedResultAttr() const;
 
-  /// \brief Returns true if this function or its return type has the
+  /// Returns true if this function or its return type has the
   /// warn_unused_result attribute.
   bool hasUnusedResultAttr() const { return getUnusedResultAttr() != nullptr; }
 
-  /// \brief Returns the storage class as written in the source. For the
+  /// Returns the storage class as written in the source. For the
   /// computed linkage of symbol, see getLinkage.
-  StorageClass getStorageClass() const { return StorageClass(SClass); }
+  StorageClass getStorageClass() const {
+    return static_cast<StorageClass>(FunctionDeclBits.SClass);
+  }
 
-  /// \brief Determine whether the "inline" keyword was specified for this
+  /// Sets the storage class as written in the source.
+  void setStorageClass(StorageClass SClass) {
+    FunctionDeclBits.SClass = SClass;
+  }
+
+  /// Determine whether the "inline" keyword was specified for this
   /// function.
-  bool isInlineSpecified() const { return IsInlineSpecified; }
+  bool isInlineSpecified() const { return FunctionDeclBits.IsInlineSpecified; }
 
   /// Set whether the "inline" keyword was specified for this function.
   void setInlineSpecified(bool I) {
-    IsInlineSpecified = I;
-    IsInline = I;
+    FunctionDeclBits.IsInlineSpecified = I;
+    FunctionDeclBits.IsInline = I;
   }
 
   /// Flag that this function is implicitly inline.
-  void setImplicitlyInline() {
-    IsInline = true;
-  }
+  void setImplicitlyInline(bool I = true) { FunctionDeclBits.IsInline = I; }
 
-  /// \brief Determine whether this function should be inlined, because it is
+  /// Determine whether this function should be inlined, because it is
   /// either marked "inline" or "constexpr" or is a member function of a class
   /// that was defined in the class body.
-  bool isInlined() const { return IsInline; }
+  bool isInlined() const { return FunctionDeclBits.IsInline; }
+
+  /// Whether this function is marked as explicit explicitly.
+  bool isExplicitSpecified() const {
+    return FunctionDeclBits.IsExplicitSpecified;
+  }
+
+  /// State that this function is marked as explicit explicitly.
+  void setExplicitSpecified(bool ExpSpec = true) {
+    FunctionDeclBits.IsExplicitSpecified = ExpSpec;
+  }
 
   bool isInlineDefinitionExternallyVisible() const;
 
@@ -2322,7 +2356,7 @@
 
   const IdentifierInfo *getLiteralIdentifier() const;
 
-  /// \brief If this function is an instantiation of a member function
+  /// If this function is an instantiation of a member function
   /// of a class template specialization, retrieves the function from
   /// which it was instantiated.
   ///
@@ -2345,22 +2379,22 @@
   /// declaration returned by getInstantiatedFromMemberFunction().
   FunctionDecl *getInstantiatedFromMemberFunction() const;
 
-  /// \brief What kind of templated function this is.
+  /// What kind of templated function this is.
   TemplatedKind getTemplatedKind() const;
 
-  /// \brief If this function is an instantiation of a member function of a
+  /// If this function is an instantiation of a member function of a
   /// class template specialization, retrieves the member specialization
   /// information.
   MemberSpecializationInfo *getMemberSpecializationInfo() const;
 
-  /// \brief Specify that this record is an instantiation of the
+  /// Specify that this record is an instantiation of the
   /// member function FD.
   void setInstantiationOfMemberFunction(FunctionDecl *FD,
                                         TemplateSpecializationKind TSK) {
     setInstantiationOfMemberFunction(getASTContext(), FD, TSK);
   }
 
-  /// \brief Retrieves the function template that is described by this
+  /// Retrieves the function template that is described by this
   /// function declaration.
   ///
   /// Every function template is represented as a FunctionTemplateDecl
@@ -2376,50 +2410,50 @@
 
   void setDescribedFunctionTemplate(FunctionTemplateDecl *Template);
 
-  /// \brief Determine whether this function is a function template
+  /// Determine whether this function is a function template
   /// specialization.
   bool isFunctionTemplateSpecialization() const {
     return getPrimaryTemplate() != nullptr;
   }
 
-  /// \brief Retrieve the class scope template pattern that this function
+  /// Retrieve the class scope template pattern that this function
   ///  template specialization is instantiated from.
   FunctionDecl *getClassScopeSpecializationPattern() const;
 
-  /// \brief If this function is actually a function template specialization,
+  /// If this function is actually a function template specialization,
   /// retrieve information about this function template specialization.
   /// Otherwise, returns NULL.
   FunctionTemplateSpecializationInfo *getTemplateSpecializationInfo() const;
 
-  /// \brief Determines whether this function is a function template
+  /// Determines whether this function is a function template
   /// specialization or a member of a class template specialization that can
   /// be implicitly instantiated.
   bool isImplicitlyInstantiable() const;
 
-  /// \brief Determines if the given function was instantiated from a
+  /// Determines if the given function was instantiated from a
   /// function template.
   bool isTemplateInstantiation() const;
 
-  /// \brief Retrieve the function declaration from which this function could
+  /// Retrieve the function declaration from which this function could
   /// be instantiated, if it is an instantiation (rather than a non-template
   /// or a specialization, for example).
   FunctionDecl *getTemplateInstantiationPattern() const;
 
-  /// \brief Retrieve the primary template that this function template
+  /// Retrieve the primary template that this function template
   /// specialization either specializes or was instantiated from.
   ///
   /// If this function declaration is not a function template specialization,
   /// returns NULL.
   FunctionTemplateDecl *getPrimaryTemplate() const;
 
-  /// \brief Retrieve the template arguments used to produce this function
+  /// Retrieve the template arguments used to produce this function
   /// template specialization from the primary template.
   ///
   /// If this function declaration is not a function template specialization,
   /// returns NULL.
   const TemplateArgumentList *getTemplateSpecializationArgs() const;
 
-  /// \brief Retrieve the template argument list as written in the sources,
+  /// Retrieve the template argument list as written in the sources,
   /// if any.
   ///
   /// If this function declaration is not a function template specialization
@@ -2429,7 +2463,7 @@
   const ASTTemplateArgumentListInfo*
   getTemplateSpecializationArgsAsWritten() const;
 
-  /// \brief Specify that this function declaration is actually a function
+  /// Specify that this function declaration is actually a function
   /// template specialization.
   ///
   /// \param Template the function template that this function template
@@ -2459,7 +2493,7 @@
                                       PointOfInstantiation);
   }
 
-  /// \brief Specifies that this function declaration is actually a
+  /// Specifies that this function declaration is actually a
   /// dependent function template specialization.
   void setDependentTemplateSpecialization(ASTContext &Context,
                              const UnresolvedSetImpl &Templates,
@@ -2468,16 +2502,16 @@
   DependentFunctionTemplateSpecializationInfo *
   getDependentSpecializationInfo() const;
 
-  /// \brief Determine what kind of template instantiation this function
+  /// Determine what kind of template instantiation this function
   /// represents.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
-  /// \brief Determine what kind of template instantiation this function
+  /// Determine what kind of template instantiation this function
   /// represents.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
                         SourceLocation PointOfInstantiation = SourceLocation());
 
-  /// \brief Retrieve the (first) point of instantiation of a function template
+  /// Retrieve the (first) point of instantiation of a function template
   /// specialization or a member of a class template specialization.
   ///
   /// \returns the first point of instantiation, if this function was
@@ -2485,20 +2519,24 @@
   /// location.
   SourceLocation getPointOfInstantiation() const;
 
-  /// \brief Determine whether this is or was instantiated from an out-of-line
+  /// Determine whether this is or was instantiated from an out-of-line
   /// definition of a member function.
   bool isOutOfLine() const override;
 
-  /// \brief Identify a memory copying or setting function.
+  /// Identify a memory copying or setting function.
   /// If the given function is a memory copy or setting function, returns
   /// the corresponding Builtin ID. If the function is not a memory function,
   /// returns 0.
   unsigned getMemoryFunctionKind() const;
 
-  /// \brief Returns ODRHash of the function.  This value is calculated and
+  /// Returns ODRHash of the function.  This value is calculated and
   /// stored on first call, then the stored value returned on the other calls.
   unsigned getODRHash();
 
+  /// Returns cached ODRHash of the function.  This must have been previously
+  /// computed and stored.
+  unsigned getODRHash() const;
+
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) {
@@ -2548,7 +2586,7 @@
     Expr *BitWidth;
   };
 
-  /// \brief Storage for either the bit-width, the in-class initializer, or
+  /// Storage for either the bit-width, the in-class initializer, or
   /// both (via InitAndBitWidth), or the captured variable length array bound.
   ///
   /// If the storage kind is ISK_InClassCopyInit or
@@ -2582,7 +2620,7 @@
                            InClassInitStyle InitStyle);
 
   static FieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   /// Returns the index of this field within its record,
   /// as appropriate for passing to ASTRecordLayout::getFieldOffset.
   unsigned getFieldIndex() const;
@@ -2635,6 +2673,11 @@
     BitField = false;
   }
 
+  /// Is this a zero-length bit-field? Such bit-fields aren't really bit-fields
+  /// at all and instead act as a separator between contiguous runs of other
+  /// bit-fields.
+  bool isZeroLengthBitField(const ASTContext &Ctx) const;
+
   /// Get the kind of (C++11) default member initializer that this field has.
   InClassInitStyle getInClassInitStyle() const {
     InitStorageKind storageKind = InitStorage.getInt();
@@ -2674,20 +2717,20 @@
     InitStorage.setPointerAndInt(getBitWidth(), ISK_NoInit);
   }
 
-  /// \brief Determine whether this member captures the variable length array
+  /// Determine whether this member captures the variable length array
   /// type.
   bool hasCapturedVLAType() const {
     return InitStorage.getInt() == ISK_CapturedVLAType;
   }
 
-  /// \brief Get the captured variable length array type.
+  /// Get the captured variable length array type.
   const VariableArrayType *getCapturedVLAType() const {
     return hasCapturedVLAType() ? static_cast<const VariableArrayType *>(
                                       InitStorage.getPointer())
                                 : nullptr;
   }
 
-  /// \brief Set the captured variable length array type for this field.
+  /// Set the captured variable length array type for this field.
   void setCapturedVLAType(const VariableArrayType *VLAType);
 
   /// Returns the parent of this field declaration, which
@@ -2733,7 +2776,7 @@
                                   QualType T, Expr *E,
                                   const llvm::APSInt &V);
   static EnumConstantDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   const Expr *getInitExpr() const { return (const Expr*) Init; }
   Expr *getInitExpr() { return (Expr*) Init; }
   const llvm::APSInt &getInitVal() const { return Val; }
@@ -2830,7 +2873,11 @@
   const Type *getTypeForDecl() const { return TypeForDecl; }
   void setTypeForDecl(const Type *TD) { TypeForDecl = TD; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LocStart; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LocStart; }
   void setLocStart(SourceLocation L) { LocStart = L; }
   SourceRange getSourceRange() const override LLVM_READONLY {
     if (LocStart.isValid())
@@ -2846,7 +2893,7 @@
 
 /// Base class for declarations which introduce a typedef-name.
 class TypedefNameDecl : public TypeDecl, public Redeclarable<TypedefNameDecl> {
-  struct LLVM_ALIGNAS(8) ModedTInfo {
+  struct alignas(8) ModedTInfo {
     TypeSourceInfo *first;
     QualType second;
   };
@@ -2993,71 +3040,23 @@
 };
 
 /// Represents the declaration of a struct/union/class/enum.
-class TagDecl
-  : public TypeDecl, public DeclContext, public Redeclarable<TagDecl> {
+class TagDecl : public TypeDecl,
+                public DeclContext,
+                public Redeclarable<TagDecl> {
+  // This class stores some data in DeclContext::TagDeclBits
+  // to save some space. Use the provided accessors to access it.
 public:
   // This is really ugly.
   using TagKind = TagTypeKind;
 
 private:
-  // FIXME: This can be packed into the bitfields in Decl.
-  /// The TagKind enum.
-  unsigned TagDeclKind : 3;
-
-  /// True if this is a definition ("struct foo {};"), false if it is a
-  /// declaration ("struct foo;").  It is not considered a definition
-  /// until the definition has been fully processed.
-  unsigned IsCompleteDefinition : 1;
-
-protected:
-  /// True if this is currently being defined.
-  unsigned IsBeingDefined : 1;
-
-private:
-  /// True if this tag declaration is "embedded" (i.e., defined or declared
-  /// for the very first time) in the syntax of a declarator.
-  unsigned IsEmbeddedInDeclarator : 1;
-
-  /// True if this tag is free standing, e.g. "struct foo;".
-  unsigned IsFreeStanding : 1;
-
-protected:
-  // These are used by (and only defined for) EnumDecl.
-  unsigned NumPositiveBits : 8;
-  unsigned NumNegativeBits : 8;
-
-  /// True if this tag declaration is a scoped enumeration. Only
-  /// possible in C++11 mode.
-  unsigned IsScoped : 1;
-
-  /// If this tag declaration is a scoped enum,
-  /// then this is true if the scoped enum was declared using the class
-  /// tag, false if it was declared with the struct tag. No meaning is
-  /// associated if this tag declaration is not a scoped enum.
-  unsigned IsScopedUsingClassTag : 1;
-
-  /// True if this is an enumeration with fixed underlying type. Only
-  /// possible in C++11, Microsoft extensions, or Objective C mode.
-  unsigned IsFixed : 1;
-
-  /// Indicates whether it is possible for declarations of this kind
-  /// to have an out-of-date definition.
-  ///
-  /// This option is only enabled when modules are enabled.
-  unsigned MayHaveOutOfDateDef : 1;
-
-  /// Has the full definition of this type been required by a use somewhere in
-  /// the TU.
-  unsigned IsCompleteDefinitionRequired : 1;
-
-private:
   SourceRange BraceRange;
 
   // A struct representing syntactic qualifier info,
   // to be used for the (uncommon) case of out-of-line declarations.
   using ExtInfo = QualifierInfo;
 
-  /// \brief If the (out-of-line) tag declaration name
+  /// If the (out-of-line) tag declaration name
   /// is qualified, it points to the qualifier info (nns and range);
   /// otherwise, if the tag declaration is anonymous and it is part of
   /// a typedef or alias, it points to the TypedefNameDecl (used for mangling);
@@ -3076,16 +3075,7 @@
 protected:
   TagDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC,
           SourceLocation L, IdentifierInfo *Id, TagDecl *PrevDecl,
-          SourceLocation StartL)
-      : TypeDecl(DK, DC, L, Id, StartL), DeclContext(DK), redeclarable_base(C),
-        TagDeclKind(TK), IsCompleteDefinition(false), IsBeingDefined(false),
-        IsEmbeddedInDeclarator(false), IsFreeStanding(false),
-        IsCompleteDefinitionRequired(false),
-        TypedefNameDeclOrQualifier((TypedefNameDecl *)nullptr) {
-    assert((DK != Enum || TK == TTK_Enum) &&
-           "EnumDecl not matched with TTK_Enum");
-    setPreviousDecl(PrevDecl);
-  }
+          SourceLocation StartL);
 
   using redeclarable_base = Redeclarable<TagDecl>;
 
@@ -3101,11 +3091,22 @@
     return getMostRecentDecl();
   }
 
-  /// @brief Completes the definition of this tag declaration.
+  /// Completes the definition of this tag declaration.
   ///
   /// This is a helper function for derived classes.
   void completeDefinition();
 
+  /// True if this decl is currently being defined.
+  void setBeingDefined(bool V = true) { TagDeclBits.IsBeingDefined = V; }
+
+  /// Indicates whether it is possible for declarations of this kind
+  /// to have an out-of-date definition.
+  ///
+  /// This option is only enabled when modules are enabled.
+  void setMayHaveOutOfDateDef(bool V = true) {
+    TagDeclBits.MayHaveOutOfDateDef = V;
+  }
+
 public:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
@@ -3125,7 +3126,7 @@
 
   /// Return SourceLocation representing start of source
   /// range ignoring outer template declarations.
-  SourceLocation getInnerLocStart() const { return getLocStart(); }
+  SourceLocation getInnerLocStart() const { return getBeginLoc(); }
 
   /// Return SourceLocation representing start of source
   /// range taking into account any outer template declarations.
@@ -3144,34 +3145,55 @@
   }
 
   /// Return true if this decl has its body fully specified.
-  bool isCompleteDefinition() const {
-    return IsCompleteDefinition;
+  bool isCompleteDefinition() const { return TagDeclBits.IsCompleteDefinition; }
+
+  /// True if this decl has its body fully specified.
+  void setCompleteDefinition(bool V = true) {
+    TagDeclBits.IsCompleteDefinition = V;
   }
 
-  /// \brief Return true if this complete decl is
+  /// Return true if this complete decl is
   /// required to be complete for some existing use.
   bool isCompleteDefinitionRequired() const {
-    return IsCompleteDefinitionRequired;
+    return TagDeclBits.IsCompleteDefinitionRequired;
+  }
+
+  /// True if this complete decl is
+  /// required to be complete for some existing use.
+  void setCompleteDefinitionRequired(bool V = true) {
+    TagDeclBits.IsCompleteDefinitionRequired = V;
   }
 
   /// Return true if this decl is currently being defined.
-  bool isBeingDefined() const {
-    return IsBeingDefined;
-  }
+  bool isBeingDefined() const { return TagDeclBits.IsBeingDefined; }
 
+  /// True if this tag declaration is "embedded" (i.e., defined or declared
+  /// for the very first time) in the syntax of a declarator.
   bool isEmbeddedInDeclarator() const {
-    return IsEmbeddedInDeclarator;
+    return TagDeclBits.IsEmbeddedInDeclarator;
   }
+
+  /// True if this tag declaration is "embedded" (i.e., defined or declared
+  /// for the very first time) in the syntax of a declarator.
   void setEmbeddedInDeclarator(bool isInDeclarator) {
-    IsEmbeddedInDeclarator = isInDeclarator;
+    TagDeclBits.IsEmbeddedInDeclarator = isInDeclarator;
   }
 
-  bool isFreeStanding() const { return IsFreeStanding; }
+  /// True if this tag is free standing, e.g. "struct foo;".
+  bool isFreeStanding() const { return TagDeclBits.IsFreeStanding; }
+
+  /// True if this tag is free standing, e.g. "struct foo;".
   void setFreeStanding(bool isFreeStanding = true) {
-    IsFreeStanding = isFreeStanding;
+    TagDeclBits.IsFreeStanding = isFreeStanding;
   }
 
-  /// \brief Whether this declaration declares a type that is
+  /// Indicates whether it is possible for declarations of this kind
+  /// to have an out-of-date definition.
+  ///
+  /// This option is only enabled when modules are enabled.
+  bool mayHaveOutOfDateDef() const { return TagDeclBits.MayHaveOutOfDateDef; }
+
+  /// Whether this declaration declares a type that is
   /// dependent, i.e., a type that somehow depends on template
   /// parameters.
   bool isDependentType() const { return isDependentContext(); }
@@ -3193,21 +3215,15 @@
   ///  the struct/union/class/enum.
   TagDecl *getDefinition() const;
 
-  void setCompleteDefinition(bool V) { IsCompleteDefinition = V; }
-
-  void setCompleteDefinitionRequired(bool V = true) {
-    IsCompleteDefinitionRequired = V;
-  }
-
   StringRef getKindName() const {
     return TypeWithKeyword::getTagTypeKindName(getTagKind());
   }
 
   TagKind getTagKind() const {
-    return TagKind(TagDeclKind);
+    return static_cast<TagKind>(TagDeclBits.TagDeclKind);
   }
 
-  void setTagKind(TagKind TK) { TagDeclKind = TK; }
+  void setTagKind(TagKind TK) { TagDeclBits.TagDeclKind = TK; }
 
   bool isStruct() const { return getTagKind() == TTK_Struct; }
   bool isInterface() const { return getTagKind() == TTK_Interface; }
@@ -3241,14 +3257,14 @@
 
   void setTypedefNameForAnonDecl(TypedefNameDecl *TDD);
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name of this
+  /// Retrieve the nested-name-specifier that qualifies the name of this
   /// declaration, if it was present in the source.
   NestedNameSpecifier *getQualifier() const {
     return hasExtInfo() ? getExtInfo()->QualifierLoc.getNestedNameSpecifier()
                         : nullptr;
   }
 
-  /// \brief Retrieve the nested-name-specifier (with source-location
+  /// Retrieve the nested-name-specifier (with source-location
   /// information) that qualifies the name of this declaration, if it was
   /// present in the source.
   NestedNameSpecifierLoc getQualifierLoc() const {
@@ -3287,6 +3303,9 @@
 /// with a fixed underlying type, and in C we allow them to be forward-declared
 /// with no underlying type as an extension.
 class EnumDecl : public TagDecl {
+  // This class stores some data in DeclContext::EnumDeclBits
+  // to save some space. Use the provided accessors to access it.
+
   /// This represent the integer type that the enum corresponds
   /// to for code generation purposes.  Note that the enumerator constants may
   /// have a different type than this does.
@@ -3309,28 +3328,56 @@
   /// in C++) are of the enum type instead.
   QualType PromotionType;
 
-  /// \brief If this enumeration is an instantiation of a member enumeration
+  /// If this enumeration is an instantiation of a member enumeration
   /// of a class template specialization, this is the member specialization
   /// information.
   MemberSpecializationInfo *SpecializationInfo = nullptr;
 
+  /// Store the ODRHash after first calculation.
+  /// The corresponding flag HasODRHash is in EnumDeclBits
+  /// and can be accessed with the provided accessors.
+  unsigned ODRHash;
+
   EnumDecl(ASTContext &C, DeclContext *DC, SourceLocation StartLoc,
            SourceLocation IdLoc, IdentifierInfo *Id, EnumDecl *PrevDecl,
-           bool Scoped, bool ScopedUsingClassTag, bool Fixed)
-      : TagDecl(Enum, TTK_Enum, C, DC, IdLoc, Id, PrevDecl, StartLoc) {
-    assert(Scoped || !ScopedUsingClassTag);
-    IntegerType = (const Type *)nullptr;
-    NumNegativeBits = 0;
-    NumPositiveBits = 0;
-    IsScoped = Scoped;
-    IsScopedUsingClassTag = ScopedUsingClassTag;
-    IsFixed = Fixed;
-  }
+           bool Scoped, bool ScopedUsingClassTag, bool Fixed);
 
   void anchor() override;
 
   void setInstantiationOfMemberEnum(ASTContext &C, EnumDecl *ED,
                                     TemplateSpecializationKind TSK);
+
+  /// Sets the width in bits required to store all the
+  /// non-negative enumerators of this enum.
+  void setNumPositiveBits(unsigned Num) {
+    EnumDeclBits.NumPositiveBits = Num;
+    assert(EnumDeclBits.NumPositiveBits == Num && "can't store this bitcount");
+  }
+
+  /// Returns the width in bits required to store all the
+  /// negative enumerators of this enum. (see getNumNegativeBits)
+  void setNumNegativeBits(unsigned Num) { EnumDeclBits.NumNegativeBits = Num; }
+
+  /// True if this tag declaration is a scoped enumeration. Only
+  /// possible in C++11 mode.
+  void setScoped(bool Scoped = true) { EnumDeclBits.IsScoped = Scoped; }
+
+  /// If this tag declaration is a scoped enum,
+  /// then this is true if the scoped enum was declared using the class
+  /// tag, false if it was declared with the struct tag. No meaning is
+  /// associated if this tag declaration is not a scoped enum.
+  void setScopedUsingClassTag(bool ScopedUCT = true) {
+    EnumDeclBits.IsScopedUsingClassTag = ScopedUCT;
+  }
+
+  /// True if this is an Objective-C, C++11, or
+  /// Microsoft-style enumeration with a fixed underlying type.
+  void setFixed(bool Fixed = true) { EnumDeclBits.IsFixed = Fixed; }
+
+  /// True if a valid hash is stored in ODRHash.
+  bool hasODRHash() const { return EnumDeclBits.HasODRHash; }
+  void setHasODRHash(bool Hash = true) { EnumDeclBits.HasODRHash = Hash; }
+
 public:
   friend class ASTDeclReader;
 
@@ -3417,33 +3464,27 @@
     return IntegerType.get<TypeSourceInfo*>()->getType().getUnqualifiedType();
   }
 
-  /// \brief Set the underlying integer type.
+  /// Set the underlying integer type.
   void setIntegerType(QualType T) { IntegerType = T.getTypePtrOrNull(); }
 
-  /// \brief Set the underlying integer type source info.
+  /// Set the underlying integer type source info.
   void setIntegerTypeSourceInfo(TypeSourceInfo *TInfo) { IntegerType = TInfo; }
 
-  /// \brief Return the type source info for the underlying integer type,
+  /// Return the type source info for the underlying integer type,
   /// if no type source info exists, return 0.
   TypeSourceInfo *getIntegerTypeSourceInfo() const {
     return IntegerType.dyn_cast<TypeSourceInfo*>();
   }
 
-  /// \brief Retrieve the source range that covers the underlying type if
+  /// Retrieve the source range that covers the underlying type if
   /// specified.
   SourceRange getIntegerTypeRange() const LLVM_READONLY;
 
-  /// \brief Returns the width in bits required to store all the
+  /// Returns the width in bits required to store all the
   /// non-negative enumerators of this enum.
-  unsigned getNumPositiveBits() const {
-    return NumPositiveBits;
-  }
-  void setNumPositiveBits(unsigned Num) {
-    NumPositiveBits = Num;
-    assert(NumPositiveBits == Num && "can't store this bitcount");
-  }
+  unsigned getNumPositiveBits() const { return EnumDeclBits.NumPositiveBits; }
 
-  /// \brief Returns the width in bits required to store all the
+  /// Returns the width in bits required to store all the
   /// negative enumerators of this enum.  These widths include
   /// the rightmost leading 1;  that is:
   ///
@@ -3452,30 +3493,23 @@
   ///                       -1     1111111                     1
   ///                      -10     1110110                     5
   ///                     -101     1001011                     8
-  unsigned getNumNegativeBits() const {
-    return NumNegativeBits;
-  }
-  void setNumNegativeBits(unsigned Num) {
-    NumNegativeBits = Num;
-  }
+  unsigned getNumNegativeBits() const { return EnumDeclBits.NumNegativeBits; }
 
-  /// \brief Returns true if this is a C++11 scoped enumeration.
-  bool isScoped() const {
-    return IsScoped;
-  }
+  /// Returns true if this is a C++11 scoped enumeration.
+  bool isScoped() const { return EnumDeclBits.IsScoped; }
 
-  /// \brief Returns true if this is a C++11 scoped enumeration.
+  /// Returns true if this is a C++11 scoped enumeration.
   bool isScopedUsingClassTag() const {
-    return IsScopedUsingClassTag;
+    return EnumDeclBits.IsScopedUsingClassTag;
   }
 
-  /// \brief Returns true if this is an Objective-C, C++11, or
+  /// Returns true if this is an Objective-C, C++11, or
   /// Microsoft-style enumeration with a fixed underlying type.
-  bool isFixed() const {
-    return IsFixed;
-  }
+  bool isFixed() const { return EnumDeclBits.IsFixed; }
 
-  /// \brief Returns true if this can be considered a complete type.
+  unsigned getODRHash();
+
+  /// Returns true if this can be considered a complete type.
   bool isComplete() const {
     // IntegerType is set for fixed type enums and non-fixed but implicitly
     // int-sized Microsoft enums.
@@ -3494,33 +3528,33 @@
   /// enum_extensibility(open).
   bool isClosedNonFlag() const;
 
-  /// \brief Retrieve the enum definition from which this enumeration could
+  /// Retrieve the enum definition from which this enumeration could
   /// be instantiated, if it is an instantiation (rather than a non-template).
   EnumDecl *getTemplateInstantiationPattern() const;
 
-  /// \brief Returns the enumeration (declared within the template)
+  /// Returns the enumeration (declared within the template)
   /// from which this enumeration type was instantiated, or NULL if
   /// this enumeration was not instantiated from any template.
   EnumDecl *getInstantiatedFromMemberEnum() const;
 
-  /// \brief If this enumeration is a member of a specialization of a
+  /// If this enumeration is a member of a specialization of a
   /// templated class, determine what kind of template specialization
   /// or instantiation this is.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
-  /// \brief For an enumeration member that was instantiated from a member
+  /// For an enumeration member that was instantiated from a member
   /// enumeration of a templated class, set the template specialiation kind.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK,
                         SourceLocation PointOfInstantiation = SourceLocation());
 
-  /// \brief If this enumeration is an instantiation of a member enumeration of
+  /// If this enumeration is an instantiation of a member enumeration of
   /// a class template specialization, retrieves the member specialization
   /// information.
   MemberSpecializationInfo *getMemberSpecializationInfo() const {
     return SpecializationInfo;
   }
 
-  /// \brief Specify that this enumeration is an instantiation of the
+  /// Specify that this enumeration is an instantiation of the
   /// member enumeration ED.
   void setInstantiationOfMemberEnum(EnumDecl *ED,
                                     TemplateSpecializationKind TSK) {
@@ -3536,46 +3570,32 @@
 ///   union Y { int A, B; };     // Has body with members A and B (FieldDecls).
 /// This decl will be marked invalid if *any* members are invalid.
 class RecordDecl : public TagDecl {
+  // This class stores some data in DeclContext::RecordDeclBits
+  // to save some space. Use the provided accessors to access it.
+public:
   friend class DeclContext;
+  /// Enum that represents the different ways arguments are passed to and
+  /// returned from function calls. This takes into account the target-specific
+  /// and version-specific rules along with the rules determined by the
+  /// language.
+  enum ArgPassingKind : unsigned {
+    /// The argument of this type can be passed directly in registers.
+    APK_CanPassInRegs,
 
-  // FIXME: This can be packed into the bitfields in Decl.
-  /// This is true if this struct ends with a flexible
-  /// array member (e.g. int X[]) or if this union contains a struct that does.
-  /// If so, this cannot be contained in arrays or other structs as a member.
-  bool HasFlexibleArrayMember : 1;
+    /// The argument of this type cannot be passed directly in registers.
+    /// Records containing this type as a subobject are not forced to be passed
+    /// indirectly. This value is used only in C++. This value is required by
+    /// C++ because, in uncommon situations, it is possible for a class to have
+    /// only trivial copy/move constructors even when one of its subobjects has
+    /// a non-trivial copy/move constructor (if e.g. the corresponding copy/move
+    /// constructor in the derived class is deleted).
+    APK_CannotPassInRegs,
 
-  /// Whether this is the type of an anonymous struct or union.
-  bool AnonymousStructOrUnion : 1;
-
-  /// This is true if this struct has at least one member
-  /// containing an Objective-C object pointer type.
-  bool HasObjectMember : 1;
-
-  /// This is true if struct has at least one member of
-  /// 'volatile' type.
-  bool HasVolatileMember : 1;
-
-  /// Whether the field declarations of this record have been loaded
-  /// from external storage. To avoid unnecessary deserialization of
-  /// methods/nested types we allow deserialization of just the fields
-  /// when needed.
-  mutable bool LoadedFieldsFromExternalStorage : 1;
-
-  /// Basic properties of non-trivial C structs.
-  bool NonTrivialToPrimitiveDefaultInitialize : 1;
-  bool NonTrivialToPrimitiveCopy : 1;
-  bool NonTrivialToPrimitiveDestroy : 1;
-
-  /// True if this class can be passed in a non-address-preserving fashion
-  /// (such as in registers).
-  /// This does not imply anything about how the ABI in use will actually
-  /// pass an object of this class.
-  bool CanPassInRegisters : 1;
-
-  /// Indicates whether this struct is destroyed in the callee. This flag is
-  /// meaningless when Microsoft ABI is used since parameters are always
-  /// destroyed in the callee.
-  bool ParamDestroyedInCallee : 1;
+    /// The argument of this type cannot be passed directly in registers.
+    /// Records containing this type as a subobject are forced to be passed
+    /// indirectly.
+    APK_CanNeverPassInRegs
+  };
 
 protected:
   RecordDecl(Kind DK, TagKind TK, const ASTContext &C, DeclContext *DC,
@@ -3603,8 +3623,13 @@
     return const_cast<RecordDecl*>(this)->getMostRecentDecl();
   }
 
-  bool hasFlexibleArrayMember() const { return HasFlexibleArrayMember; }
-  void setHasFlexibleArrayMember(bool V) { HasFlexibleArrayMember = V; }
+  bool hasFlexibleArrayMember() const {
+    return RecordDeclBits.HasFlexibleArrayMember;
+  }
+
+  void setHasFlexibleArrayMember(bool V) {
+    RecordDeclBits.HasFlexibleArrayMember = V;
+  }
 
   /// Whether this is an anonymous struct or union. To be an anonymous
   /// struct or union, it must have been declared without a name and
@@ -3617,70 +3642,80 @@
   ///  union X { int i; float f; };
   ///  union { int i; float f; } obj;
   /// @endcode
-  bool isAnonymousStructOrUnion() const { return AnonymousStructOrUnion; }
-  void setAnonymousStructOrUnion(bool Anon) {
-    AnonymousStructOrUnion = Anon;
+  bool isAnonymousStructOrUnion() const {
+    return RecordDeclBits.AnonymousStructOrUnion;
   }
 
-  bool hasObjectMember() const { return HasObjectMember; }
-  void setHasObjectMember (bool val) { HasObjectMember = val; }
+  void setAnonymousStructOrUnion(bool Anon) {
+    RecordDeclBits.AnonymousStructOrUnion = Anon;
+  }
 
-  bool hasVolatileMember() const { return HasVolatileMember; }
-  void setHasVolatileMember (bool val) { HasVolatileMember = val; }
+  bool hasObjectMember() const { return RecordDeclBits.HasObjectMember; }
+  void setHasObjectMember(bool val) { RecordDeclBits.HasObjectMember = val; }
+
+  bool hasVolatileMember() const { return RecordDeclBits.HasVolatileMember; }
+
+  void setHasVolatileMember(bool val) {
+    RecordDeclBits.HasVolatileMember = val;
+  }
 
   bool hasLoadedFieldsFromExternalStorage() const {
-    return LoadedFieldsFromExternalStorage;
+    return RecordDeclBits.LoadedFieldsFromExternalStorage;
   }
-  void setHasLoadedFieldsFromExternalStorage(bool val) {
-    LoadedFieldsFromExternalStorage = val;
+
+  void setHasLoadedFieldsFromExternalStorage(bool val) const {
+    RecordDeclBits.LoadedFieldsFromExternalStorage = val;
   }
 
   /// Functions to query basic properties of non-trivial C structs.
   bool isNonTrivialToPrimitiveDefaultInitialize() const {
-    return NonTrivialToPrimitiveDefaultInitialize;
+    return RecordDeclBits.NonTrivialToPrimitiveDefaultInitialize;
   }
 
   void setNonTrivialToPrimitiveDefaultInitialize(bool V) {
-    NonTrivialToPrimitiveDefaultInitialize = V;
+    RecordDeclBits.NonTrivialToPrimitiveDefaultInitialize = V;
   }
 
   bool isNonTrivialToPrimitiveCopy() const {
-    return NonTrivialToPrimitiveCopy;
+    return RecordDeclBits.NonTrivialToPrimitiveCopy;
   }
 
   void setNonTrivialToPrimitiveCopy(bool V) {
-    NonTrivialToPrimitiveCopy = V;
+    RecordDeclBits.NonTrivialToPrimitiveCopy = V;
   }
 
   bool isNonTrivialToPrimitiveDestroy() const {
-    return NonTrivialToPrimitiveDestroy;
+    return RecordDeclBits.NonTrivialToPrimitiveDestroy;
   }
 
   void setNonTrivialToPrimitiveDestroy(bool V) {
-    NonTrivialToPrimitiveDestroy = V;
+    RecordDeclBits.NonTrivialToPrimitiveDestroy = V;
   }
 
   /// Determine whether this class can be passed in registers. In C++ mode,
   /// it must have at least one trivial, non-deleted copy or move constructor.
   /// FIXME: This should be set as part of completeDefinition.
   bool canPassInRegisters() const {
-    return CanPassInRegisters;
+    return getArgPassingRestrictions() == APK_CanPassInRegs;
   }
 
-  /// Set that we can pass this RecordDecl in registers.
-  void setCanPassInRegisters(bool CanPass) {
-    CanPassInRegisters = CanPass;
+  ArgPassingKind getArgPassingRestrictions() const {
+    return static_cast<ArgPassingKind>(RecordDeclBits.ArgPassingRestrictions);
+  }
+
+  void setArgPassingRestrictions(ArgPassingKind Kind) {
+    RecordDeclBits.ArgPassingRestrictions = Kind;
   }
 
   bool isParamDestroyedInCallee() const {
-    return ParamDestroyedInCallee;
+    return RecordDeclBits.ParamDestroyedInCallee;
   }
 
   void setParamDestroyedInCallee(bool V) {
-    ParamDestroyedInCallee = V;
+    RecordDeclBits.ParamDestroyedInCallee = V;
   }
 
-  /// \brief Determines whether this declaration represents the
+  /// Determines whether this declaration represents the
   /// injected class name.
   ///
   /// The injected class name in C++ is the name of the class that
@@ -3695,15 +3730,15 @@
   /// \endcode
   bool isInjectedClassName() const;
 
-  /// \brief Determine whether this record is a class describing a lambda
+  /// Determine whether this record is a class describing a lambda
   /// function object.
   bool isLambda() const;
 
-  /// \brief Determine whether this record is a record for captured variables in
+  /// Determine whether this record is a record for captured variables in
   /// CapturedStmt construct.
   bool isCapturedRecord() const;
 
-  /// \brief Mark the record as a record for captured variables in CapturedStmt
+  /// Mark the record as a record for captured variables in CapturedStmt
   /// construct.
   void setCapturedRecord();
 
@@ -3745,22 +3780,22 @@
     return K >= firstRecord && K <= lastRecord;
   }
 
-  /// \brief Get whether or not this is an ms_struct which can
+  /// Get whether or not this is an ms_struct which can
   /// be turned on with an attribute, pragma, or -mms-bitfields
   /// commandline option.
   bool isMsStruct(const ASTContext &C) const;
 
-  /// \brief Whether we are allowed to insert extra padding between fields.
+  /// Whether we are allowed to insert extra padding between fields.
   /// These padding are added to help AddressSanitizer detect
   /// intra-object-overflow bugs.
   bool mayInsertExtraPadding(bool EmitRemark = false) const;
 
   /// Finds the first data member which has a name.
   /// nullptr is returned if no named data member exists.
-  const FieldDecl *findFirstNamedDataMember() const;  
+  const FieldDecl *findFirstNamedDataMember() const;
 
 private:
-  /// \brief Deserialize just the fields.
+  /// Deserialize just the fields.
   void LoadFieldsFromExternalStorage() const;
 };
 
@@ -3780,7 +3815,7 @@
                                   SourceLocation RParenLoc);
 
   static FileScopeAsmDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   SourceLocation getAsmLoc() const { return getLocation(); }
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
@@ -3800,6 +3835,8 @@
 /// unnamed FunctionDecl.  For example:
 /// ^{ statement-body }   or   ^(int arg1, float arg2){ statement-body }
 class BlockDecl : public Decl, public DeclContext {
+  // This class stores some data in DeclContext::BlockDeclBits
+  // to save some space. Use the provided accessors to access it.
 public:
   /// A class which contains all the information about a particular
   /// captured value.
@@ -3840,16 +3877,6 @@
   };
 
 private:
-  // FIXME: This can be packed into the bitfields in Decl.
-  bool IsVariadic : 1;
-  bool CapturesCXXThis : 1;
-  bool BlockMissingReturnType : 1;
-  bool IsConversionFromLambda : 1;
-
-  /// A bit that indicates this block is passed directly to a function as a
-  /// non-escaping parameter.
-  bool DoesNotEscape : 1;
-
   /// A new[]'d array of pointers to ParmVarDecls for the formal
   /// parameters of this function.  This is null if a prototype or if there are
   /// no formals.
@@ -3866,19 +3893,16 @@
   Decl *ManglingContextDecl = nullptr;
 
 protected:
-  BlockDecl(DeclContext *DC, SourceLocation CaretLoc)
-      : Decl(Block, DC, CaretLoc), DeclContext(Block), IsVariadic(false),
-        CapturesCXXThis(false), BlockMissingReturnType(true),
-        IsConversionFromLambda(false), DoesNotEscape(false) {}
+  BlockDecl(DeclContext *DC, SourceLocation CaretLoc);
 
 public:
-  static BlockDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L); 
+  static BlockDecl *Create(ASTContext &C, DeclContext *DC, SourceLocation L);
   static BlockDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   SourceLocation getCaretLocation() const { return getLocation(); }
 
-  bool isVariadic() const { return IsVariadic; }
-  void setIsVariadic(bool value) { IsVariadic = value; }
+  bool isVariadic() const { return BlockDeclBits.IsVariadic; }
+  void setIsVariadic(bool value) { BlockDeclBits.IsVariadic = value; }
 
   CompoundStmt *getCompoundBody() const { return (CompoundStmt*) Body; }
   Stmt *getBody() const override { return (Stmt*) Body; }
@@ -3921,7 +3945,7 @@
 
   /// True if this block (or its nested blocks) captures
   /// anything of local storage from its enclosing scopes.
-  bool hasCaptures() const { return NumCaptures != 0 || CapturesCXXThis; }
+  bool hasCaptures() const { return NumCaptures || capturesCXXThis(); }
 
   /// Returns the number of captured variables.
   /// Does not include an entry for 'this'.
@@ -3934,15 +3958,27 @@
   capture_const_iterator capture_begin() const { return captures().begin(); }
   capture_const_iterator capture_end() const { return captures().end(); }
 
-  bool capturesCXXThis() const { return CapturesCXXThis; }
-  bool blockMissingReturnType() const { return BlockMissingReturnType; }
-  void setBlockMissingReturnType(bool val) { BlockMissingReturnType = val; }
+  bool capturesCXXThis() const { return BlockDeclBits.CapturesCXXThis; }
+  void setCapturesCXXThis(bool B = true) { BlockDeclBits.CapturesCXXThis = B; }
 
-  bool isConversionFromLambda() const { return IsConversionFromLambda; }
-  void setIsConversionFromLambda(bool val) { IsConversionFromLambda = val; }
+  bool blockMissingReturnType() const {
+    return BlockDeclBits.BlockMissingReturnType;
+  }
 
-  bool doesNotEscape() const { return DoesNotEscape; }
-  void setDoesNotEscape() { DoesNotEscape = true; }
+  void setBlockMissingReturnType(bool val = true) {
+    BlockDeclBits.BlockMissingReturnType = val;
+  }
+
+  bool isConversionFromLambda() const {
+    return BlockDeclBits.IsConversionFromLambda;
+  }
+
+  void setIsConversionFromLambda(bool val = true) {
+    BlockDeclBits.IsConversionFromLambda = val;
+  }
+
+  bool doesNotEscape() const { return BlockDeclBits.DoesNotEscape; }
+  void setDoesNotEscape(bool B = true) { BlockDeclBits.DoesNotEscape = B; }
 
   bool capturesVariable(const VarDecl *var) const;
 
@@ -3954,7 +3990,7 @@
    }
 
    Decl *getBlockManglingContextDecl() const {
-     return ManglingContextDecl;    
+     return ManglingContextDecl;
    }
 
   void setBlockMangling(unsigned Number, Decl *Ctx) {
@@ -3986,13 +4022,13 @@
   }
 
 private:
-  /// \brief The number of parameters to the outlined function.
+  /// The number of parameters to the outlined function.
   unsigned NumParams;
 
-  /// \brief The position of context parameter in list of parameters.
+  /// The position of context parameter in list of parameters.
   unsigned ContextParam;
 
-  /// \brief The body of the outlined function.
+  /// The body of the outlined function.
   llvm::PointerIntPair<Stmt *, 1, bool> BodyAndNothrow;
 
   explicit CapturedDecl(DeclContext *DC, unsigned NumParams);
@@ -4040,7 +4076,7 @@
     return {getParams(), getNumParams()};
   }
 
-  /// \brief Retrieve the parameter containing captured variables.
+  /// Retrieve the parameter containing captured variables.
   ImplicitParamDecl *getContextParam() const {
     assert(ContextParam < NumParams);
     return getParam(ContextParam);
@@ -4055,9 +4091,9 @@
   using param_iterator = ImplicitParamDecl *const *;
   using param_range = llvm::iterator_range<param_iterator>;
 
-  /// \brief Retrieve an iterator pointing to the first parameter decl.
+  /// Retrieve an iterator pointing to the first parameter decl.
   param_iterator param_begin() const { return getParams(); }
-  /// \brief Retrieve an iterator one past the last parameter decl.
+  /// Retrieve an iterator one past the last parameter decl.
   param_iterator param_end() const { return getParams() + NumParams; }
 
   // Implement isa/cast/dyncast/etc.
@@ -4071,7 +4107,7 @@
   }
 };
 
-/// \brief Describes a module import declaration, which makes the contents
+/// Describes a module import declaration, which makes the contents
 /// of the named module visible in the current translation unit.
 ///
 /// An import declaration imports the named module (or submodule). For example:
@@ -4088,18 +4124,18 @@
   friend class ASTReader;
   friend TrailingObjects;
 
-  /// \brief The imported module, along with a bit that indicates whether
+  /// The imported module, along with a bit that indicates whether
   /// we have source-location information for each identifier in the module
-  /// name. 
+  /// name.
   ///
   /// When the bit is false, we only have a single source location for the
   /// end of the import declaration.
   llvm::PointerIntPair<Module *, 1, bool> ImportedAndComplete;
-  
-  /// \brief The next import in the list of imports local to the translation
+
+  /// The next import in the list of imports local to the translation
   /// unit being parsed (not loaded from an AST file).
   ImportDecl *NextLocalImport = nullptr;
-  
+
   ImportDecl(DeclContext *DC, SourceLocation StartLoc, Module *Imported,
              ArrayRef<SourceLocation> IdentifierLocs);
 
@@ -4107,27 +4143,27 @@
              SourceLocation EndLoc);
 
   ImportDecl(EmptyShell Empty) : Decl(Import, Empty) {}
-  
+
 public:
-  /// \brief Create a new module import declaration.
-  static ImportDecl *Create(ASTContext &C, DeclContext *DC, 
+  /// Create a new module import declaration.
+  static ImportDecl *Create(ASTContext &C, DeclContext *DC,
                             SourceLocation StartLoc, Module *Imported,
                             ArrayRef<SourceLocation> IdentifierLocs);
-  
-  /// \brief Create a new module import declaration for an implicitly-generated
+
+  /// Create a new module import declaration for an implicitly-generated
   /// import.
-  static ImportDecl *CreateImplicit(ASTContext &C, DeclContext *DC, 
-                                    SourceLocation StartLoc, Module *Imported, 
+  static ImportDecl *CreateImplicit(ASTContext &C, DeclContext *DC,
+                                    SourceLocation StartLoc, Module *Imported,
                                     SourceLocation EndLoc);
-  
-  /// \brief Create a new, deserialized module import declaration.
-  static ImportDecl *CreateDeserialized(ASTContext &C, unsigned ID, 
+
+  /// Create a new, deserialized module import declaration.
+  static ImportDecl *CreateDeserialized(ASTContext &C, unsigned ID,
                                         unsigned NumLocations);
-  
-  /// \brief Retrieve the module that was imported by the import declaration.
+
+  /// Retrieve the module that was imported by the import declaration.
   Module *getImportedModule() const { return ImportedAndComplete.getPointer(); }
-  
-  /// \brief Retrieves the locations of each of the identifiers that make up
+
+  /// Retrieves the locations of each of the identifiers that make up
   /// the complete module name in the import declaration.
   ///
   /// This will return an empty array if the locations of the individual
@@ -4140,7 +4176,7 @@
   static bool classofKind(Kind K) { return K == Import; }
 };
 
-/// \brief Represents a C++ Modules TS module export declaration.
+/// Represents a C++ Modules TS module export declaration.
 ///
 /// For example:
 /// \code
@@ -4152,7 +4188,7 @@
 private:
   friend class ASTDeclReader;
 
-  /// \brief The source location for the right brace (if valid).
+  /// The source location for the right brace (if valid).
   SourceLocation RBraceLoc;
 
   ExportDecl(DeclContext *DC, SourceLocation ExportLoc)
@@ -4163,21 +4199,25 @@
   static ExportDecl *Create(ASTContext &C, DeclContext *DC,
                             SourceLocation ExportLoc);
   static ExportDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   SourceLocation getExportLoc() const { return getLocation(); }
   SourceLocation getRBraceLoc() const { return RBraceLoc; }
   void setRBraceLoc(SourceLocation L) { RBraceLoc = L; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (RBraceLoc.isValid())
       return RBraceLoc;
     // No braces: get the end location of the (only) declaration in context
     // (if present).
-    return decls_empty() ? getLocation() : decls_begin()->getLocEnd();
+    return decls_empty() ? getLocation() : decls_begin()->getEndLoc();
   }
 
   SourceRange getSourceRange() const override LLVM_READONLY {
-    return SourceRange(getLocation(), getLocEnd());
+    return SourceRange(getLocation(), getEndLoc());
   }
 
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
@@ -4224,7 +4264,7 @@
 void Redeclarable<decl_type>::setPreviousDecl(decl_type *PrevDecl) {
   // Note: This routine is implemented here because we need both NamedDecl
   // and Redeclarable to be defined.
-  assert(RedeclLink.NextIsLatest() &&
+  assert(RedeclLink.isFirst() &&
          "setPreviousDecl on a decl already in a redeclaration chain");
 
   if (PrevDecl) {
@@ -4232,7 +4272,7 @@
     // redeclaration, or we can build invalid chains. If the most recent
     // redeclaration is invalid, it won't be PrevDecl, but we want it anyway.
     First = PrevDecl->getFirstDecl();
-    assert(First->RedeclLink.NextIsLatest() && "Expected first");
+    assert(First->RedeclLink.isFirst() && "Expected first");
     decl_type *MostRecent = First->getNextRedeclaration();
     RedeclLink = PreviousDeclLink(cast<decl_type>(MostRecent));
 
diff --git a/linux-x64/clang/include/clang/AST/DeclBase.h b/linux-x64/clang/include/clang/AST/DeclBase.h
index 908894c..647d52f 100644
--- a/linux-x64/clang/include/clang/AST/DeclBase.h
+++ b/linux-x64/clang/include/clang/AST/DeclBase.h
@@ -19,7 +19,6 @@
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/PointerIntPair.h"
 #include "llvm/ADT/PointerUnion.h"
@@ -28,6 +27,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/PrettyStackTrace.h"
+#include "llvm/Support/VersionTuple.h"
 #include <algorithm>
 #include <cassert>
 #include <cstddef>
@@ -67,7 +67,7 @@
 class TranslationUnitDecl;
 class UsingDirectiveDecl;
 
-/// \brief Captures the result of checking the availability of a
+/// Captures the result of checking the availability of a
 /// declaration.
 enum AvailabilityResult {
   AR_Available = 0,
@@ -83,9 +83,9 @@
 /// (and its subclasses) in its Decl::operator new(). Proper alignment
 /// of all subclasses (not requiring more than the alignment of Decl) is
 /// asserted in DeclBase.cpp.
-class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) Decl {
+class alignas(8) Decl {
 public:
-  /// \brief Lists the kind of concrete classes of Decl.
+  /// Lists the kind of concrete classes of Decl.
   enum Kind {
 #define DECL(DERIVED, BASE) DERIVED,
 #define ABSTRACT_DECL(DECL)
@@ -96,7 +96,7 @@
 #include "clang/AST/DeclNodes.inc"
   };
 
-  /// \brief A placeholder type used to construct an empty shell of a
+  /// A placeholder type used to construct an empty shell of a
   /// decl-derived type that will be filled in later (e.g., by some
   /// deserialization method).
   struct EmptyShell {};
@@ -231,7 +231,7 @@
   };
 
 protected:
-  /// \brief The next declaration within the same lexical
+  /// The next declaration within the same lexical
   /// DeclContext. These pointers form the linked list that is
   /// traversed via DeclContext's decls_begin()/decls_end().
   ///
@@ -288,27 +288,28 @@
   /// the implementation rather than explicitly written by the user.
   unsigned Implicit : 1;
 
-  /// \brief Whether this declaration was "used", meaning that a definition is
+  /// Whether this declaration was "used", meaning that a definition is
   /// required.
   unsigned Used : 1;
 
-  /// \brief Whether this declaration was "referenced".
+  /// Whether this declaration was "referenced".
   /// The difference with 'Used' is whether the reference appears in a
   /// evaluated context or not, e.g. functions used in uninstantiated templates
   /// are regarded as "referenced" but not "used".
   unsigned Referenced : 1;
 
-  /// \brief Whether this declaration is a top-level declaration (function,
+  /// Whether this declaration is a top-level declaration (function,
   /// global variable, etc.) that is lexically inside an objc container
   /// definition.
   unsigned TopLevelDeclInObjCContainer : 1;
-  
-  /// \brief Whether statistic collection is enabled.
+
+  /// Whether statistic collection is enabled.
   static bool StatisticsEnabled;
 
 protected:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
+  friend class ASTNodeImporter;
   friend class ASTReader;
   friend class CXXClassMemberWrapper;
   friend class LinkageComputer;
@@ -318,17 +319,17 @@
   // NOTE: VC++ treats enums as signed, avoid using the AccessSpecifier enum
   unsigned Access : 2;
 
-  /// \brief Whether this declaration was loaded from an AST file.
+  /// Whether this declaration was loaded from an AST file.
   unsigned FromASTFile : 1;
 
   /// IdentifierNamespace - This specifies what IDNS_* namespace this lives in.
   unsigned IdentifierNamespace : 13;
 
-  /// \brief If 0, we have not computed the linkage of this declaration.
+  /// If 0, we have not computed the linkage of this declaration.
   /// Otherwise, it is the linkage + 1.
   mutable unsigned CacheValidAndLinkage : 3;
 
-  /// \brief Allocate memory for a deserialized declaration.
+  /// Allocate memory for a deserialized declaration.
   ///
   /// This routine must be used to allocate memory for any declaration that is
   /// deserialized from a module file.
@@ -340,7 +341,7 @@
   void *operator new(std::size_t Size, const ASTContext &Ctx, unsigned ID,
                      std::size_t Extra = 0);
 
-  /// \brief Allocate memory for a non-deserialized declaration.
+  /// Allocate memory for a non-deserialized declaration.
   void *operator new(std::size_t Size, const ASTContext &Ctx,
                      DeclContext *Parent, std::size_t Extra = 0);
 
@@ -384,7 +385,7 @@
 
   virtual ~Decl();
 
-  /// \brief Update a potentially out-of-date declaration.
+  /// Update a potentially out-of-date declaration.
   void updateOutOfDate(IdentifierInfo &II) const;
 
   Linkage getCachedLinkage() const {
@@ -400,16 +401,24 @@
   }
 
 public:
-  /// \brief Source range that this declaration covers.
+  /// Source range that this declaration covers.
   virtual SourceRange getSourceRange() const LLVM_READONLY {
     return SourceRange(getLocation(), getLocation());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     return getSourceRange().getBegin();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     return getSourceRange().getEnd();
   }
 
@@ -462,7 +471,7 @@
     return AccessSpecifier(Access);
   }
 
-  /// \brief Retrieve the access specifier for this declaration, even though
+  /// Retrieve the access specifier for this declaration, even though
   /// it may not yet have been properly set.
   AccessSpecifier getAccessUnsafe() const {
     return AccessSpecifier(Access);
@@ -551,7 +560,7 @@
   bool isImplicit() const { return Implicit; }
   void setImplicit(bool I = true) { Implicit = I; }
 
-  /// \brief Whether *any* (re-)declaration of the entity was used, meaning that
+  /// Whether *any* (re-)declaration of the entity was used, meaning that
   /// a definition is required.
   ///
   /// \param CheckUsedAttr When true, also consider the "used" attribute
@@ -559,28 +568,28 @@
   /// whether the function is used.
   bool isUsed(bool CheckUsedAttr = true) const;
 
-  /// \brief Set whether the declaration is used, in the sense of odr-use.
+  /// Set whether the declaration is used, in the sense of odr-use.
   ///
   /// This should only be used immediately after creating a declaration.
   /// It intentionally doesn't notify any listeners.
   void setIsUsed() { getCanonicalDecl()->Used = true; }
 
-  /// \brief Mark the declaration used, in the sense of odr-use.
+  /// Mark the declaration used, in the sense of odr-use.
   ///
   /// This notifies any mutation listeners in addition to setting a bit
   /// indicating the declaration is used.
   void markUsed(ASTContext &C);
 
-  /// \brief Whether any declaration of this entity was referenced.
+  /// Whether any declaration of this entity was referenced.
   bool isReferenced() const;
 
-  /// \brief Whether this declaration was referenced. This should not be relied
+  /// Whether this declaration was referenced. This should not be relied
   /// upon for anything other than debugging.
   bool isThisDeclarationReferenced() const { return Referenced; }
 
   void setReferenced(bool R = true) { Referenced = R; }
 
-  /// \brief Whether this declaration is a top-level declaration (function,
+  /// Whether this declaration is a top-level declaration (function,
   /// global variable, etc.) that is lexically inside an objc container
   /// definition.
   bool isTopLevelDeclInObjCContainer() const {
@@ -591,17 +600,17 @@
     TopLevelDeclInObjCContainer = V;
   }
 
-  /// \brief Looks on this and related declarations for an applicable
+  /// Looks on this and related declarations for an applicable
   /// external source symbol attribute.
   ExternalSourceSymbolAttr *getExternalSourceSymbolAttr() const;
 
-  /// \brief Whether this declaration was marked as being private to the
+  /// Whether this declaration was marked as being private to the
   /// module in which it was defined.
   bool isModulePrivate() const {
     return getModuleOwnershipKind() == ModuleOwnershipKind::ModulePrivate;
   }
 
-  /// \brief Whether this declaration is exported (by virtue of being lexically
+  /// Whether this declaration is exported (by virtue of being lexically
   /// within an ExportDecl or by being a NamespaceDecl).
   bool isExported() const;
 
@@ -613,7 +622,7 @@
   const Attr *getDefiningAttr() const;
 
 protected:
-  /// \brief Specify that this declaration was marked as being private
+  /// Specify that this declaration was marked as being private
   /// to the module in which it was defined.
   void setModulePrivate() {
     // The module-private specifier has no effect on unowned declarations.
@@ -623,14 +632,14 @@
     setModuleOwnershipKind(ModuleOwnershipKind::ModulePrivate);
   }
 
-  /// \brief Set the owning module ID.
+  /// Set the owning module ID.
   void setOwningModuleID(unsigned ID) {
     assert(isFromASTFile() && "Only works on a deserialized declaration");
     *((unsigned*)this - 2) = ID;
   }
-  
+
 public:
-  /// \brief Determine the availability of the given declaration.
+  /// Determine the availability of the given declaration.
   ///
   /// This routine will determine the most restrictive availability of
   /// the given declaration (e.g., preferring 'unavailable' to
@@ -643,11 +652,16 @@
   ///
   /// \param EnclosingVersion The version to compare with. If empty, assume the
   /// deployment target version.
+  ///
+  /// \param RealizedPlatform If non-NULL and the availability result is found
+  /// in an available attribute it will set to the platform which is written in
+  /// the available attribute.
   AvailabilityResult
   getAvailability(std::string *Message = nullptr,
-                  VersionTuple EnclosingVersion = VersionTuple()) const;
+                  VersionTuple EnclosingVersion = VersionTuple(),
+                  StringRef *RealizedPlatform = nullptr) const;
 
-  /// \brief Retrieve the version of the target platform in which this
+  /// Retrieve the version of the target platform in which this
   /// declaration was introduced.
   ///
   /// \returns An empty version tuple if this declaration has no 'introduced'
@@ -655,7 +669,7 @@
   /// attribute otherwise.
   VersionTuple getVersionIntroduced() const;
 
-  /// \brief Determine whether this declaration is marked 'deprecated'.
+  /// Determine whether this declaration is marked 'deprecated'.
   ///
   /// \param Message If non-NULL and the declaration is deprecated,
   /// this will be set to the message describing why the declaration
@@ -664,7 +678,7 @@
     return getAvailability(Message) == AR_Deprecated;
   }
 
-  /// \brief Determine whether this declaration is marked 'unavailable'.
+  /// Determine whether this declaration is marked 'unavailable'.
   ///
   /// \param Message If non-NULL and the declaration is unavailable,
   /// this will be set to the message describing why the declaration
@@ -673,7 +687,7 @@
     return getAvailability(Message) == AR_Unavailable;
   }
 
-  /// \brief Determine whether this is a weak-imported symbol.
+  /// Determine whether this is a weak-imported symbol.
   ///
   /// Weak-imported symbols are typically marked with the
   /// 'weak_import' attribute, but may also be marked with an
@@ -681,7 +695,7 @@
   /// the introduction of this feature.
   bool isWeakImported() const;
 
-  /// \brief Determines whether this symbol can be weak-imported,
+  /// Determines whether this symbol can be weak-imported,
   /// e.g., whether it would be well-formed to add the weak_import
   /// attribute.
   ///
@@ -689,11 +703,11 @@
   /// declaration cannot be weak-imported because it has a definition.
   bool canBeWeakImported(bool &IsDefinition) const;
 
-  /// \brief Determine whether this declaration came from an AST file (such as
+  /// Determine whether this declaration came from an AST file (such as
   /// a precompiled header or module) rather than having been parsed.
   bool isFromASTFile() const { return FromASTFile; }
 
-  /// \brief Retrieve the global declaration ID associated with this
+  /// Retrieve the global declaration ID associated with this
   /// declaration, which specifies where this Decl was loaded from.
   unsigned getGlobalID() const {
     if (isFromASTFile())
@@ -701,7 +715,7 @@
     return 0;
   }
 
-  /// \brief Retrieve the global ID of the module that owns this particular
+  /// Retrieve the global ID of the module that owns this particular
   /// declaration.
   unsigned getOwningModuleID() const {
     if (isFromASTFile())
@@ -716,7 +730,7 @@
   bool hasLocalOwningModuleStorage() const;
 
 public:
-  /// \brief Get the imported owning module, if this decl is from an imported
+  /// Get the imported owning module, if this decl is from an imported
   /// (non-local) module.
   Module *getImportedOwningModule() const {
     if (!isFromASTFile() || !hasOwningModule())
@@ -725,7 +739,7 @@
     return getOwningModuleSlow();
   }
 
-  /// \brief Get the local owning module, if known. Returns nullptr if owner is
+  /// Get the local owning module, if known. Returns nullptr if owner is
   /// not yet known or declaration is not from a module.
   Module *getLocalOwningModule() const {
     if (isFromASTFile() || !hasOwningModule())
@@ -759,7 +773,7 @@
   /// all declarations in a global module fragment are unowned.
   Module *getOwningModuleForLinkage(bool IgnoreLinkage = false) const;
 
-  /// \brief Determine whether this declaration might be hidden from name
+  /// Determine whether this declaration might be hidden from name
   /// lookup. Note that the declaration might be visible even if this returns
   /// \c false, if the owning module is visible within the query context.
   // FIXME: Rename this to make it clearer what it does.
@@ -774,12 +788,12 @@
       setModuleOwnershipKind(ModuleOwnershipKind::Visible);
   }
 
-  /// \brief Get the kind of module ownership for this declaration.
+  /// Get the kind of module ownership for this declaration.
   ModuleOwnershipKind getModuleOwnershipKind() const {
     return NextInContextAndBits.getInt();
   }
 
-  /// \brief Set whether this declaration is hidden from name lookup.
+  /// Set whether this declaration is hidden from name lookup.
   void setModuleOwnershipKind(ModuleOwnershipKind MOK) {
     assert(!(getModuleOwnershipKind() == ModuleOwnershipKind::Unowned &&
              MOK != ModuleOwnershipKind::Unowned && !isFromASTFile() &&
@@ -848,7 +862,7 @@
     return getParentFunctionOrMethod() == nullptr;
   }
 
-  /// \brief Returns true if this declaration lexically is inside a function.
+  /// Returns true if this declaration lexically is inside a function.
   /// It recognizes non-defining declarations as well as members of local
   /// classes:
   /// \code
@@ -857,7 +871,7 @@
   /// \endcode
   bool isLexicallyWithinFunctionOrMethod() const;
 
-  /// \brief If this decl is defined inside a function/method/block it returns
+  /// If this decl is defined inside a function/method/block it returns
   /// the corresponding DeclContext, otherwise it returns null.
   const DeclContext *getParentFunctionOrMethod() const;
   DeclContext *getParentFunctionOrMethod() {
@@ -865,32 +879,32 @@
                     const_cast<const Decl*>(this)->getParentFunctionOrMethod());
   }
 
-  /// \brief Retrieves the "canonical" declaration of the given declaration.
+  /// Retrieves the "canonical" declaration of the given declaration.
   virtual Decl *getCanonicalDecl() { return this; }
   const Decl *getCanonicalDecl() const {
     return const_cast<Decl*>(this)->getCanonicalDecl();
   }
 
-  /// \brief Whether this particular Decl is a canonical one.
+  /// Whether this particular Decl is a canonical one.
   bool isCanonicalDecl() const { return getCanonicalDecl() == this; }
-  
+
 protected:
-  /// \brief Returns the next redeclaration or itself if this is the only decl.
+  /// Returns the next redeclaration or itself if this is the only decl.
   ///
   /// Decl subclasses that can be redeclared should override this method so that
   /// Decl::redecl_iterator can iterate over them.
   virtual Decl *getNextRedeclarationImpl() { return this; }
 
-  /// \brief Implementation of getPreviousDecl(), to be overridden by any
+  /// Implementation of getPreviousDecl(), to be overridden by any
   /// subclass that has a redeclaration chain.
   virtual Decl *getPreviousDeclImpl() { return nullptr; }
 
-  /// \brief Implementation of getMostRecentDecl(), to be overridden by any
+  /// Implementation of getMostRecentDecl(), to be overridden by any
   /// subclass that has a redeclaration chain.
   virtual Decl *getMostRecentDeclImpl() { return this; }
 
 public:
-  /// \brief Iterates through all the redeclarations of the same decl.
+  /// Iterates through all the redeclarations of the same decl.
   class redecl_iterator {
     /// Current - The current declaration.
     Decl *Current = nullptr;
@@ -935,7 +949,7 @@
 
   using redecl_range = llvm::iterator_range<redecl_iterator>;
 
-  /// \brief Returns an iterator range for all the redeclarations of the same
+  /// Returns an iterator range for all the redeclarations of the same
   /// decl. It will iterate at least once (when this decl is the only one).
   redecl_range redecls() const {
     return redecl_range(redecls_begin(), redecls_end());
@@ -947,28 +961,28 @@
 
   redecl_iterator redecls_end() const { return redecl_iterator(); }
 
-  /// \brief Retrieve the previous declaration that declares the same entity
+  /// Retrieve the previous declaration that declares the same entity
   /// as this declaration, or NULL if there is no previous declaration.
   Decl *getPreviousDecl() { return getPreviousDeclImpl(); }
-  
-  /// \brief Retrieve the most recent declaration that declares the same entity
+
+  /// Retrieve the most recent declaration that declares the same entity
   /// as this declaration, or NULL if there is no previous declaration.
-  const Decl *getPreviousDecl() const { 
+  const Decl *getPreviousDecl() const {
     return const_cast<Decl *>(this)->getPreviousDeclImpl();
   }
 
-  /// \brief True if this is the first declaration in its redeclaration chain.
+  /// True if this is the first declaration in its redeclaration chain.
   bool isFirstDecl() const {
     return getPreviousDecl() == nullptr;
   }
 
-  /// \brief Retrieve the most recent declaration that declares the same entity
+  /// Retrieve the most recent declaration that declares the same entity
   /// as this declaration (which may be this declaration).
   Decl *getMostRecentDecl() { return getMostRecentDeclImpl(); }
 
-  /// \brief Retrieve the most recent declaration that declares the same entity
+  /// Retrieve the most recent declaration that declares the same entity
   /// as this declaration (which may be this declaration).
-  const Decl *getMostRecentDecl() const { 
+  const Decl *getMostRecentDecl() const {
     return const_cast<Decl *>(this)->getMostRecentDeclImpl();
   }
 
@@ -977,7 +991,7 @@
   ///  top-level Stmt* of that body.  Otherwise this method returns null.
   virtual Stmt* getBody() const { return nullptr; }
 
-  /// \brief Returns true if this \c Decl represents a declaration for a body of
+  /// Returns true if this \c Decl represents a declaration for a body of
   /// code, such as a function or method definition.
   /// Note that \c hasBody can also return true if any redeclaration of this
   /// \c Decl represents a declaration for a body of code.
@@ -1000,24 +1014,24 @@
   /// template parameter pack.
   bool isTemplateParameterPack() const;
 
-  /// \brief Whether this declaration is a parameter pack.
+  /// Whether this declaration is a parameter pack.
   bool isParameterPack() const;
 
-  /// \brief returns true if this declaration is a template
+  /// returns true if this declaration is a template
   bool isTemplateDecl() const;
 
-  /// \brief Whether this declaration is a function or function template.
+  /// Whether this declaration is a function or function template.
   bool isFunctionOrFunctionTemplate() const {
     return (DeclKind >= Decl::firstFunction &&
             DeclKind <= Decl::lastFunction) ||
            DeclKind == FunctionTemplate;
   }
 
-  /// \brief If this is a declaration that describes some template, this
+  /// If this is a declaration that describes some template, this
   /// method returns that template declaration.
   TemplateDecl *getDescribedTemplate() const;
 
-  /// \brief Returns the function itself, or the templated function if this is a
+  /// Returns the function itself, or the templated function if this is a
   /// function template.
   FunctionDecl *getAsFunction() LLVM_READONLY;
 
@@ -1025,7 +1039,7 @@
     return const_cast<Decl *>(this)->getAsFunction();
   }
 
-  /// \brief Changes the namespace of this declaration to reflect that it's
+  /// Changes the namespace of this declaration to reflect that it's
   /// a function-local extern declaration.
   ///
   /// These declarations appear in the lexical context of the extern
@@ -1046,14 +1060,14 @@
       IdentifierNamespace |= IDNS_Ordinary;
   }
 
-  /// \brief Determine whether this is a block-scope declaration with linkage.
+  /// Determine whether this is a block-scope declaration with linkage.
   /// This will either be a local variable declaration declared 'extern', or a
   /// local function declaration.
   bool isLocalExternDecl() {
     return IdentifierNamespace & IDNS_LocalExtern;
   }
 
-  /// \brief Changes the namespace of this declaration to reflect that it's
+  /// Changes the namespace of this declaration to reflect that it's
   /// the object of a friend declaration.
   ///
   /// These declarations appear in the lexical context of the friending
@@ -1095,7 +1109,7 @@
     FOK_Undeclared ///< A friend of a previously-undeclared entity.
   };
 
-  /// \brief Determines whether this declaration is the object of a
+  /// Determines whether this declaration is the object of a
   /// friend declaration and, if so, what kind.
   ///
   /// There is currently no direct way to find the associated FriendDecl.
@@ -1135,7 +1149,7 @@
 
   void dump(raw_ostream &Out, bool Deserialize = false) const;
 
-  /// \brief Looks through the Decl's underlying type to extract a FunctionType
+  /// Looks through the Decl's underlying type to extract a FunctionType
   /// when possible. Will return null if the type underlying the Decl does not
   /// have a FunctionType.
   const FunctionType *getFunctionType(bool BlocksToo = true) const;
@@ -1149,17 +1163,17 @@
   ASTMutationListener *getASTMutationListener() const;
 };
 
-/// \brief Determine whether two declarations declare the same entity.
+/// Determine whether two declarations declare the same entity.
 inline bool declaresSameEntity(const Decl *D1, const Decl *D2) {
   if (!D1 || !D2)
     return false;
-  
+
   if (D1 == D2)
     return true;
-  
+
   return D1->getCanonicalDecl() == D2->getCanonicalDecl();
 }
-  
+
 /// PrettyStackTraceDecl - If a crash occurs, indicate that it happened when
 /// doing something to a specific decl.
 class PrettyStackTraceDecl : public llvm::PrettyStackTraceEntry {
@@ -1176,7 +1190,7 @@
   void print(raw_ostream &OS) const override;
 };
 
-/// \brief The results of name lookup within a DeclContext. This is either a
+/// The results of name lookup within a DeclContext. This is either a
 /// single result (with no stable storage) or a collection of results (with
 /// stable storage provided by the lookup table).
 class DeclContextLookupResult {
@@ -1244,49 +1258,433 @@
 /// that directly derive from DeclContext are mentioned, not their subclasses):
 ///
 ///   TranslationUnitDecl
+///   ExternCContext
 ///   NamespaceDecl
-///   FunctionDecl
 ///   TagDecl
+///   OMPDeclareReductionDecl
+///   FunctionDecl
 ///   ObjCMethodDecl
 ///   ObjCContainerDecl
 ///   LinkageSpecDecl
 ///   ExportDecl
 ///   BlockDecl
-///   OMPDeclareReductionDecl
+///   CapturedDecl
 class DeclContext {
-  /// DeclKind - This indicates which class this is.
-  unsigned DeclKind : 8;
+  /// For makeDeclVisibleInContextImpl
+  friend class ASTDeclReader;
+  /// For reconcileExternalVisibleStorage, CreateStoredDeclsMap,
+  /// hasNeedToReconcileExternalVisibleStorage
+  friend class ExternalASTSource;
+  /// For CreateStoredDeclsMap
+  friend class DependentDiagnostic;
+  /// For hasNeedToReconcileExternalVisibleStorage,
+  /// hasLazyLocalLexicalLookups, hasLazyExternalLexicalLookups
+  friend class ASTWriter;
 
-  /// \brief Whether this declaration context also has some external
-  /// storage that contains additional declarations that are lexically
-  /// part of this context.
-  mutable bool ExternalLexicalStorage : 1;
+  // We use uint64_t in the bit-fields below since some bit-fields
+  // cross the unsigned boundary and this breaks the packing.
 
-  /// \brief Whether this declaration context also has some external
-  /// storage that contains additional declarations that are visible
-  /// in this context.
-  mutable bool ExternalVisibleStorage : 1;
+  /// Stores the bits used by DeclContext.
+  /// If modified NumDeclContextBit, the ctor of DeclContext and the accessor
+  /// methods in DeclContext should be updated appropriately.
+  class DeclContextBitfields {
+    friend class DeclContext;
+    /// DeclKind - This indicates which class this is.
+    uint64_t DeclKind : 7;
 
-  /// \brief Whether this declaration context has had external visible
-  /// storage added since the last lookup. In this case, \c LookupPtr's
-  /// invariant may not hold and needs to be fixed before we perform
-  /// another lookup.
-  mutable bool NeedToReconcileExternalVisibleStorage : 1;
+    /// Whether this declaration context also has some external
+    /// storage that contains additional declarations that are lexically
+    /// part of this context.
+    mutable uint64_t ExternalLexicalStorage : 1;
 
-  /// \brief If \c true, this context may have local lexical declarations
-  /// that are missing from the lookup table.
-  mutable bool HasLazyLocalLexicalLookups : 1;
+    /// Whether this declaration context also has some external
+    /// storage that contains additional declarations that are visible
+    /// in this context.
+    mutable uint64_t ExternalVisibleStorage : 1;
 
-  /// \brief If \c true, the external source may have lexical declarations
-  /// that are missing from the lookup table.
-  mutable bool HasLazyExternalLexicalLookups : 1;
+    /// Whether this declaration context has had externally visible
+    /// storage added since the last lookup. In this case, \c LookupPtr's
+    /// invariant may not hold and needs to be fixed before we perform
+    /// another lookup.
+    mutable uint64_t NeedToReconcileExternalVisibleStorage : 1;
 
-  /// \brief If \c true, lookups should only return identifier from
-  /// DeclContext scope (for example TranslationUnit). Used in
-  /// LookupQualifiedName()
-  mutable bool UseQualifiedLookup : 1;
+    /// If \c true, this context may have local lexical declarations
+    /// that are missing from the lookup table.
+    mutable uint64_t HasLazyLocalLexicalLookups : 1;
 
-  /// \brief Pointer to the data structure used to lookup declarations
+    /// If \c true, the external source may have lexical declarations
+    /// that are missing from the lookup table.
+    mutable uint64_t HasLazyExternalLexicalLookups : 1;
+
+    /// If \c true, lookups should only return identifier from
+    /// DeclContext scope (for example TranslationUnit). Used in
+    /// LookupQualifiedName()
+    mutable uint64_t UseQualifiedLookup : 1;
+  };
+
+  /// Number of bits in DeclContextBitfields.
+  enum { NumDeclContextBits = 13 };
+
+  /// Stores the bits used by TagDecl.
+  /// If modified NumTagDeclBits and the accessor
+  /// methods in TagDecl should be updated appropriately.
+  class TagDeclBitfields {
+    friend class TagDecl;
+    /// For the bits in DeclContextBitfields
+    uint64_t : NumDeclContextBits;
+
+    /// The TagKind enum.
+    uint64_t TagDeclKind : 3;
+
+    /// True if this is a definition ("struct foo {};"), false if it is a
+    /// declaration ("struct foo;").  It is not considered a definition
+    /// until the definition has been fully processed.
+    uint64_t IsCompleteDefinition : 1;
+
+    /// True if this is currently being defined.
+    uint64_t IsBeingDefined : 1;
+
+    /// True if this tag declaration is "embedded" (i.e., defined or declared
+    /// for the very first time) in the syntax of a declarator.
+    uint64_t IsEmbeddedInDeclarator : 1;
+
+    /// True if this tag is free standing, e.g. "struct foo;".
+    uint64_t IsFreeStanding : 1;
+
+    /// Indicates whether it is possible for declarations of this kind
+    /// to have an out-of-date definition.
+    ///
+    /// This option is only enabled when modules are enabled.
+    uint64_t MayHaveOutOfDateDef : 1;
+
+    /// Has the full definition of this type been required by a use somewhere in
+    /// the TU.
+    uint64_t IsCompleteDefinitionRequired : 1;
+  };
+
+  /// Number of non-inherited bits in TagDeclBitfields.
+  enum { NumTagDeclBits = 9 };
+
+  /// Stores the bits used by EnumDecl.
+  /// If modified NumEnumDeclBit and the accessor
+  /// methods in EnumDecl should be updated appropriately.
+  class EnumDeclBitfields {
+    friend class EnumDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+    /// For the bits in TagDeclBitfields.
+    uint64_t : NumTagDeclBits;
+
+    /// Width in bits required to store all the non-negative
+    /// enumerators of this enum.
+    uint64_t NumPositiveBits : 8;
+
+    /// Width in bits required to store all the negative
+    /// enumerators of this enum.
+    uint64_t NumNegativeBits : 8;
+
+    /// True if this tag declaration is a scoped enumeration. Only
+    /// possible in C++11 mode.
+    uint64_t IsScoped : 1;
+
+    /// If this tag declaration is a scoped enum,
+    /// then this is true if the scoped enum was declared using the class
+    /// tag, false if it was declared with the struct tag. No meaning is
+    /// associated if this tag declaration is not a scoped enum.
+    uint64_t IsScopedUsingClassTag : 1;
+
+    /// True if this is an enumeration with fixed underlying type. Only
+    /// possible in C++11, Microsoft extensions, or Objective C mode.
+    uint64_t IsFixed : 1;
+
+    /// True if a valid hash is stored in ODRHash.
+    uint64_t HasODRHash : 1;
+  };
+
+  /// Number of non-inherited bits in EnumDeclBitfields.
+  enum { NumEnumDeclBits = 20 };
+
+  /// Stores the bits used by RecordDecl.
+  /// If modified NumRecordDeclBits and the accessor
+  /// methods in RecordDecl should be updated appropriately.
+  class RecordDeclBitfields {
+    friend class RecordDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+    /// For the bits in TagDeclBitfields.
+    uint64_t : NumTagDeclBits;
+
+    /// This is true if this struct ends with a flexible
+    /// array member (e.g. int X[]) or if this union contains a struct that does.
+    /// If so, this cannot be contained in arrays or other structs as a member.
+    uint64_t HasFlexibleArrayMember : 1;
+
+    /// Whether this is the type of an anonymous struct or union.
+    uint64_t AnonymousStructOrUnion : 1;
+
+    /// This is true if this struct has at least one member
+    /// containing an Objective-C object pointer type.
+    uint64_t HasObjectMember : 1;
+
+    /// This is true if struct has at least one member of
+    /// 'volatile' type.
+    uint64_t HasVolatileMember : 1;
+
+    /// Whether the field declarations of this record have been loaded
+    /// from external storage. To avoid unnecessary deserialization of
+    /// methods/nested types we allow deserialization of just the fields
+    /// when needed.
+    mutable uint64_t LoadedFieldsFromExternalStorage : 1;
+
+    /// Basic properties of non-trivial C structs.
+    uint64_t NonTrivialToPrimitiveDefaultInitialize : 1;
+    uint64_t NonTrivialToPrimitiveCopy : 1;
+    uint64_t NonTrivialToPrimitiveDestroy : 1;
+
+    /// Indicates whether this struct is destroyed in the callee.
+    uint64_t ParamDestroyedInCallee : 1;
+
+    /// Represents the way this type is passed to a function.
+    uint64_t ArgPassingRestrictions : 2;
+  };
+
+  /// Number of non-inherited bits in RecordDeclBitfields.
+  enum { NumRecordDeclBits = 11 };
+
+  /// Stores the bits used by OMPDeclareReductionDecl.
+  /// If modified NumOMPDeclareReductionDeclBits and the accessor
+  /// methods in OMPDeclareReductionDecl should be updated appropriately.
+  class OMPDeclareReductionDeclBitfields {
+    friend class OMPDeclareReductionDecl;
+    /// For the bits in DeclContextBitfields
+    uint64_t : NumDeclContextBits;
+
+    /// Kind of initializer,
+    /// function call or omp_priv<init_expr> initializtion.
+    uint64_t InitializerKind : 2;
+  };
+
+  /// Number of non-inherited bits in OMPDeclareReductionDeclBitfields.
+  enum { NumOMPDeclareReductionDeclBits = 2 };
+
+  /// Stores the bits used by FunctionDecl.
+  /// If modified NumFunctionDeclBits and the accessor
+  /// methods in FunctionDecl and CXXDeductionGuideDecl
+  /// (for IsCopyDeductionCandidate) should be updated appropriately.
+  class FunctionDeclBitfields {
+    friend class FunctionDecl;
+    /// For IsCopyDeductionCandidate
+    friend class CXXDeductionGuideDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+
+    uint64_t SClass : 3;
+    uint64_t IsInline : 1;
+    uint64_t IsInlineSpecified : 1;
+
+    /// This is shared by CXXConstructorDecl,
+    /// CXXConversionDecl, and CXXDeductionGuideDecl.
+    uint64_t IsExplicitSpecified : 1;
+
+    uint64_t IsVirtualAsWritten : 1;
+    uint64_t IsPure : 1;
+    uint64_t HasInheritedPrototype : 1;
+    uint64_t HasWrittenPrototype : 1;
+    uint64_t IsDeleted : 1;
+    /// Used by CXXMethodDecl
+    uint64_t IsTrivial : 1;
+
+    /// This flag indicates whether this function is trivial for the purpose of
+    /// calls. This is meaningful only when this function is a copy/move
+    /// constructor or a destructor.
+    uint64_t IsTrivialForCall : 1;
+
+    /// Used by CXXMethodDecl
+    uint64_t IsDefaulted : 1;
+    /// Used by CXXMethodDecl
+    uint64_t IsExplicitlyDefaulted : 1;
+    uint64_t HasImplicitReturnZero : 1;
+    uint64_t IsLateTemplateParsed : 1;
+    uint64_t IsConstexpr : 1;
+    uint64_t InstantiationIsPending : 1;
+
+    /// Indicates if the function uses __try.
+    uint64_t UsesSEHTry : 1;
+
+    /// Indicates if the function was a definition
+    /// but its body was skipped.
+    uint64_t HasSkippedBody : 1;
+
+    /// Indicates if the function declaration will
+    /// have a body, once we're done parsing it.
+    uint64_t WillHaveBody : 1;
+
+    /// Indicates that this function is a multiversioned
+    /// function using attribute 'target'.
+    uint64_t IsMultiVersion : 1;
+
+    /// [C++17] Only used by CXXDeductionGuideDecl. Indicates that
+    /// the Deduction Guide is the implicitly generated 'copy
+    /// deduction candidate' (is used during overload resolution).
+    uint64_t IsCopyDeductionCandidate : 1;
+
+    /// Store the ODRHash after first calculation.
+    uint64_t HasODRHash : 1;
+  };
+
+  /// Number of non-inherited bits in FunctionDeclBitfields.
+  enum { NumFunctionDeclBits = 25 };
+
+  /// Stores the bits used by CXXConstructorDecl. If modified
+  /// NumCXXConstructorDeclBits and the accessor
+  /// methods in CXXConstructorDecl should be updated appropriately.
+  class CXXConstructorDeclBitfields {
+    friend class CXXConstructorDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+    /// For the bits in FunctionDeclBitfields.
+    uint64_t : NumFunctionDeclBits;
+
+    /// 25 bits to fit in the remaining availible space.
+    /// Note that this makes CXXConstructorDeclBitfields take
+    /// exactly 64 bits and thus the width of NumCtorInitializers
+    /// will need to be shrunk if some bit is added to NumDeclContextBitfields,
+    /// NumFunctionDeclBitfields or CXXConstructorDeclBitfields.
+    uint64_t NumCtorInitializers : 25;
+    uint64_t IsInheritingConstructor : 1;
+  };
+
+  /// Number of non-inherited bits in CXXConstructorDeclBitfields.
+  enum { NumCXXConstructorDeclBits = 26 };
+
+  /// Stores the bits used by ObjCMethodDecl.
+  /// If modified NumObjCMethodDeclBits and the accessor
+  /// methods in ObjCMethodDecl should be updated appropriately.
+  class ObjCMethodDeclBitfields {
+    friend class ObjCMethodDecl;
+
+    /// This is needed for the bitwidth of Family below but
+    /// is defined in Basic/IdentifierTable.h which we do not include.
+    /// To avoid mismatches between the two definitions we have
+    /// a static_assert in the ctor of ObjCMethodDecl which checks
+    /// that these two ObjCMethodFamilyBitWidth are equal.
+    enum { ObjCMethodFamilyBitWidth = 4 };
+
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+
+    /// The conventional meaning of this method; an ObjCMethodFamily.
+    /// This is not serialized; instead, it is computed on demand and
+    /// cached.
+    mutable uint64_t Family : ObjCMethodFamilyBitWidth;
+
+    /// instance (true) or class (false) method.
+    uint64_t IsInstance : 1;
+    uint64_t IsVariadic : 1;
+
+    /// True if this method is the getter or setter for an explicit property.
+    uint64_t IsPropertyAccessor : 1;
+
+    /// Method has a definition.
+    uint64_t IsDefined : 1;
+
+    /// Method redeclaration in the same interface.
+    uint64_t IsRedeclaration : 1;
+
+    /// Is redeclared in the same interface.
+    mutable uint64_t HasRedeclaration : 1;
+
+    /// \@required/\@optional
+    uint64_t DeclImplementation : 2;
+
+    /// in, inout, etc.
+    uint64_t objcDeclQualifier : 7;
+
+    /// Indicates whether this method has a related result type.
+    uint64_t RelatedResultType : 1;
+
+    /// Whether the locations of the selector identifiers are in a
+    /// "standard" position, a enum SelectorLocationsKind.
+    uint64_t SelLocsKind : 2;
+
+    /// Whether this method overrides any other in the class hierarchy.
+    ///
+    /// A method is said to override any method in the class's
+    /// base classes, its protocols, or its categories' protocols, that has
+    /// the same selector and is of the same kind (class or instance).
+    /// A method in an implementation is not considered as overriding the same
+    /// method in the interface or its categories.
+    uint64_t IsOverriding : 1;
+
+    /// Indicates if the method was a definition but its body was skipped.
+    uint64_t HasSkippedBody : 1;
+  };
+
+  /// Number of non-inherited bits in ObjCMethodDeclBitfields.
+  enum { NumObjCMethodDeclBits = 24 };
+
+  /// Stores the bits used by ObjCContainerDecl.
+  /// If modified NumObjCContainerDeclBits and the accessor
+  /// methods in ObjCContainerDecl should be updated appropriately.
+  class ObjCContainerDeclBitfields {
+    friend class ObjCContainerDecl;
+    /// For the bits in DeclContextBitfields
+    uint32_t : NumDeclContextBits;
+
+    // Not a bitfield but this saves space.
+    // Note that ObjCContainerDeclBitfields is full.
+    SourceLocation AtStart;
+  };
+
+  /// Number of non-inherited bits in ObjCContainerDeclBitfields.
+  /// Note that here we rely on the fact that SourceLocation is 32 bits
+  /// wide. We check this with the static_assert in the ctor of DeclContext.
+  enum { NumObjCContainerDeclBits = 64 - NumDeclContextBits };
+
+  /// Stores the bits used by LinkageSpecDecl.
+  /// If modified NumLinkageSpecDeclBits and the accessor
+  /// methods in LinkageSpecDecl should be updated appropriately.
+  class LinkageSpecDeclBitfields {
+    friend class LinkageSpecDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+
+    /// The language for this linkage specification with values
+    /// in the enum LinkageSpecDecl::LanguageIDs.
+    uint64_t Language : 3;
+
+    /// True if this linkage spec has braces.
+    /// This is needed so that hasBraces() returns the correct result while the
+    /// linkage spec body is being parsed.  Once RBraceLoc has been set this is
+    /// not used, so it doesn't need to be serialized.
+    uint64_t HasBraces : 1;
+  };
+
+  /// Number of non-inherited bits in LinkageSpecDeclBitfields.
+  enum { NumLinkageSpecDeclBits = 4 };
+
+  /// Stores the bits used by BlockDecl.
+  /// If modified NumBlockDeclBits and the accessor
+  /// methods in BlockDecl should be updated appropriately.
+  class BlockDeclBitfields {
+    friend class BlockDecl;
+    /// For the bits in DeclContextBitfields.
+    uint64_t : NumDeclContextBits;
+
+    uint64_t IsVariadic : 1;
+    uint64_t CapturesCXXThis : 1;
+    uint64_t BlockMissingReturnType : 1;
+    uint64_t IsConversionFromLambda : 1;
+
+    /// A bit that indicates this block is passed directly to a function as a
+    /// non-escaping parameter.
+    uint64_t DoesNotEscape : 1;
+  };
+
+  /// Number of non-inherited bits in BlockDeclBitfields.
+  enum { NumBlockDeclBits = 5 };
+
+  /// Pointer to the data structure used to lookup declarations
   /// within this context (or a DependentStoredDeclsMap if this is a
   /// dependent context). We maintain the invariant that, if the map
   /// contains an entry for a DeclarationName (and we haven't lazily
@@ -1295,9 +1693,50 @@
   mutable StoredDeclsMap *LookupPtr = nullptr;
 
 protected:
-  friend class ASTDeclReader;
-  friend class ASTWriter;
-  friend class ExternalASTSource;
+  /// This anonymous union stores the bits belonging to DeclContext and classes
+  /// deriving from it. The goal is to use otherwise wasted
+  /// space in DeclContext to store data belonging to derived classes.
+  /// The space saved is especially significient when pointers are aligned
+  /// to 8 bytes. In this case due to alignment requirements we have a
+  /// little less than 8 bytes free in DeclContext which we can use.
+  /// We check that none of the classes in this union is larger than
+  /// 8 bytes with static_asserts in the ctor of DeclContext.
+  union {
+    DeclContextBitfields DeclContextBits;
+    TagDeclBitfields TagDeclBits;
+    EnumDeclBitfields EnumDeclBits;
+    RecordDeclBitfields RecordDeclBits;
+    OMPDeclareReductionDeclBitfields OMPDeclareReductionDeclBits;
+    FunctionDeclBitfields FunctionDeclBits;
+    CXXConstructorDeclBitfields CXXConstructorDeclBits;
+    ObjCMethodDeclBitfields ObjCMethodDeclBits;
+    ObjCContainerDeclBitfields ObjCContainerDeclBits;
+    LinkageSpecDeclBitfields LinkageSpecDeclBits;
+    BlockDeclBitfields BlockDeclBits;
+
+    static_assert(sizeof(DeclContextBitfields) <= 8,
+                  "DeclContextBitfields is larger than 8 bytes!");
+    static_assert(sizeof(TagDeclBitfields) <= 8,
+                  "TagDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(EnumDeclBitfields) <= 8,
+                  "EnumDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(RecordDeclBitfields) <= 8,
+                  "RecordDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(OMPDeclareReductionDeclBitfields) <= 8,
+                  "OMPDeclareReductionDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(FunctionDeclBitfields) <= 8,
+                  "FunctionDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(CXXConstructorDeclBitfields) <= 8,
+                  "CXXConstructorDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(ObjCMethodDeclBitfields) <= 8,
+                  "ObjCMethodDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(ObjCContainerDeclBitfields) <= 8,
+                  "ObjCContainerDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(LinkageSpecDeclBitfields) <= 8,
+                  "LinkageSpecDeclBitfields is larger than 8 bytes!");
+    static_assert(sizeof(BlockDeclBitfields) <= 8,
+                  "BlockDeclBitfields is larger than 8 bytes!");
+  };
 
   /// FirstDecl - The first declaration stored within this declaration
   /// context.
@@ -1309,24 +1748,19 @@
   /// another pointer.
   mutable Decl *LastDecl = nullptr;
 
-  /// \brief Build up a chain of declarations.
+  /// Build up a chain of declarations.
   ///
   /// \returns the first/last pair of declarations.
   static std::pair<Decl *, Decl *>
   BuildDeclChain(ArrayRef<Decl*> Decls, bool FieldsAlreadyLoaded);
 
-  DeclContext(Decl::Kind K)
-      : DeclKind(K), ExternalLexicalStorage(false),
-        ExternalVisibleStorage(false),
-        NeedToReconcileExternalVisibleStorage(false),
-        HasLazyLocalLexicalLookups(false), HasLazyExternalLexicalLookups(false),
-        UseQualifiedLookup(false) {}
+  DeclContext(Decl::Kind K);
 
 public:
   ~DeclContext();
 
   Decl::Kind getDeclKind() const {
-    return static_cast<Decl::Kind>(DeclKind);
+    return static_cast<Decl::Kind>(DeclContextBits.DeclKind);
   }
 
   const char *getDeclKindName() const;
@@ -1365,60 +1799,60 @@
     return cast<Decl>(this)->getASTContext();
   }
 
-  bool isClosure() const {
-    return DeclKind == Decl::Block;
-  }
+  bool isClosure() const { return getDeclKind() == Decl::Block; }
 
   bool isObjCContainer() const {
-    switch (DeclKind) {
-        case Decl::ObjCCategory:
-        case Decl::ObjCCategoryImpl:
-        case Decl::ObjCImplementation:
-        case Decl::ObjCInterface:
-        case Decl::ObjCProtocol:
-            return true;
+    switch (getDeclKind()) {
+    case Decl::ObjCCategory:
+    case Decl::ObjCCategoryImpl:
+    case Decl::ObjCImplementation:
+    case Decl::ObjCInterface:
+    case Decl::ObjCProtocol:
+      return true;
+    default:
+      return false;
     }
-    return false;
   }
 
   bool isFunctionOrMethod() const {
-    switch (DeclKind) {
+    switch (getDeclKind()) {
     case Decl::Block:
     case Decl::Captured:
     case Decl::ObjCMethod:
       return true;
     default:
-      return DeclKind >= Decl::firstFunction && DeclKind <= Decl::lastFunction;
+      return getDeclKind() >= Decl::firstFunction &&
+             getDeclKind() <= Decl::lastFunction;
     }
   }
 
-  /// \brief Test whether the context supports looking up names.
+  /// Test whether the context supports looking up names.
   bool isLookupContext() const {
-    return !isFunctionOrMethod() && DeclKind != Decl::LinkageSpec &&
-           DeclKind != Decl::Export;
+    return !isFunctionOrMethod() && getDeclKind() != Decl::LinkageSpec &&
+           getDeclKind() != Decl::Export;
   }
 
   bool isFileContext() const {
-    return DeclKind == Decl::TranslationUnit || DeclKind == Decl::Namespace;
+    return getDeclKind() == Decl::TranslationUnit ||
+           getDeclKind() == Decl::Namespace;
   }
 
   bool isTranslationUnit() const {
-    return DeclKind == Decl::TranslationUnit;
+    return getDeclKind() == Decl::TranslationUnit;
   }
 
   bool isRecord() const {
-    return DeclKind >= Decl::firstRecord && DeclKind <= Decl::lastRecord;
+    return getDeclKind() >= Decl::firstRecord &&
+           getDeclKind() <= Decl::lastRecord;
   }
 
-  bool isNamespace() const {
-    return DeclKind == Decl::Namespace;
-  }
+  bool isNamespace() const { return getDeclKind() == Decl::Namespace; }
 
   bool isStdNamespace() const;
 
   bool isInlineNamespace() const;
 
-  /// \brief Determines whether this context is dependent on a
+  /// Determines whether this context is dependent on a
   /// template parameter.
   bool isDependentContext() const;
 
@@ -1439,28 +1873,28 @@
   /// C++0x scoped enums), and C++ linkage specifications.
   bool isTransparentContext() const;
 
-  /// \brief Determines whether this context or some of its ancestors is a
+  /// Determines whether this context or some of its ancestors is a
   /// linkage specification context that specifies C linkage.
   bool isExternCContext() const;
 
-  /// \brief Retrieve the nearest enclosing C linkage specification context.
+  /// Retrieve the nearest enclosing C linkage specification context.
   const LinkageSpecDecl *getExternCContext() const;
 
-  /// \brief Determines whether this context or some of its ancestors is a
+  /// Determines whether this context or some of its ancestors is a
   /// linkage specification context that specifies C++ linkage.
   bool isExternCXXContext() const;
 
-  /// \brief Determine whether this declaration context is equivalent
+  /// Determine whether this declaration context is equivalent
   /// to the declaration context DC.
   bool Equals(const DeclContext *DC) const {
     return DC && this->getPrimaryContext() == DC->getPrimaryContext();
   }
 
-  /// \brief Determine whether this declaration context encloses the
+  /// Determine whether this declaration context encloses the
   /// declaration context DC.
   bool Encloses(const DeclContext *DC) const;
 
-  /// \brief Find the nearest non-closure ancestor of this context,
+  /// Find the nearest non-closure ancestor of this context,
   /// i.e. the innermost semantic parent of this context which is not
   /// a closure.  A context may be its own non-closure ancestor.
   Decl *getNonClosureAncestor();
@@ -1487,19 +1921,19 @@
     return const_cast<DeclContext *>(this)->getRedeclContext();
   }
 
-  /// \brief Retrieve the nearest enclosing namespace context.
+  /// Retrieve the nearest enclosing namespace context.
   DeclContext *getEnclosingNamespaceContext();
   const DeclContext *getEnclosingNamespaceContext() const {
     return const_cast<DeclContext *>(this)->getEnclosingNamespaceContext();
   }
 
-  /// \brief Retrieve the outermost lexically enclosing record context.
+  /// Retrieve the outermost lexically enclosing record context.
   RecordDecl *getOuterLexicalRecordContext();
   const RecordDecl *getOuterLexicalRecordContext() const {
     return const_cast<DeclContext *>(this)->getOuterLexicalRecordContext();
   }
 
-  /// \brief Test if this context is part of the enclosing namespace set of
+  /// Test if this context is part of the enclosing namespace set of
   /// the context NS, as defined in C++0x [namespace.def]p9. If either context
   /// isn't a namespace, this is equivalent to Equals().
   ///
@@ -1507,11 +1941,11 @@
   /// inline, its enclosing namespace, recursively.
   bool InEnclosingNamespaceSetOf(const DeclContext *NS) const;
 
-  /// \brief Collects all of the declaration contexts that are semantically
+  /// Collects all of the declaration contexts that are semantically
   /// connected to this declaration context.
   ///
   /// For declaration contexts that have multiple semantically connected but
-  /// syntactically distinct contexts, such as C++ namespaces, this routine 
+  /// syntactically distinct contexts, such as C++ namespaces, this routine
   /// retrieves the complete set of such declaration contexts in source order.
   /// For example, given:
   ///
@@ -1663,7 +2097,7 @@
     }
   };
 
-  /// \brief Iterates over a filtered subrange of declarations stored
+  /// Iterates over a filtered subrange of declarations stored
   /// in a DeclContext.
   ///
   /// This iterator visits only those declarations that are of type
@@ -1739,7 +2173,7 @@
     }
   };
 
-  /// @brief Add the declaration D into this context.
+  /// Add the declaration D into this context.
   ///
   /// This routine should be invoked when the declaration D has first
   /// been declared, to place D into the context where it was
@@ -1753,7 +2187,7 @@
   /// semantic context via makeDeclVisibleInContext.
   void addDecl(Decl *D);
 
-  /// @brief Add the declaration D into this context, but suppress
+  /// Add the declaration D into this context, but suppress
   /// searches for external declarations with the same name.
   ///
   /// Although analogous in function to addDecl, this removes an
@@ -1763,7 +2197,7 @@
   /// See the ASTImporter for use cases.
   void addDeclInternal(Decl *D);
 
-  /// @brief Add the declaration D to this context without modifying
+  /// Add the declaration D to this context without modifying
   /// any lookup tables.
   ///
   /// This is useful for some operations in dependent contexts where
@@ -1771,12 +2205,16 @@
   /// only happens with friends.
   void addHiddenDecl(Decl *D);
 
-  /// @brief Removes a declaration from this context.
+  /// Removes a declaration from this context.
   void removeDecl(Decl *D);
-    
-  /// @brief Checks whether a declaration is in this context.
+
+  /// Checks whether a declaration is in this context.
   bool containsDecl(Decl *D) const;
 
+  /// Checks whether a declaration is in this context.
+  /// This also loads the Decls from the external source before the check.
+  bool containsDeclAndLoad(Decl *D) const;
+
   using lookup_result = DeclContextLookupResult;
   using lookup_iterator = lookup_result::iterator;
 
@@ -1787,12 +2225,12 @@
   /// routine will not look into parent contexts.
   lookup_result lookup(DeclarationName Name) const;
 
-  /// \brief Find the declarations with the given name that are visible
+  /// Find the declarations with the given name that are visible
   /// within this context; don't attempt to retrieve anything from an
   /// external source.
   lookup_result noload_lookup(DeclarationName Name);
 
-  /// \brief A simplistic name lookup mechanism that performs name lookup
+  /// A simplistic name lookup mechanism that performs name lookup
   /// into this declaration context without consulting the external source.
   ///
   /// This function should almost never be used, because it subverts the
@@ -1804,7 +2242,7 @@
   void localUncachedLookup(DeclarationName Name,
                            SmallVectorImpl<NamedDecl *> &Results);
 
-  /// @brief Makes a declaration visible within this context.
+  /// Makes a declaration visible within this context.
   ///
   /// This routine makes the declaration D visible to name lookup
   /// within this context and, if this is a transparent context,
@@ -1831,11 +2269,11 @@
   // If PreserveInternalState, avoids building lookup data structures too.
   lookups_range noload_lookups(bool PreserveInternalState) const;
 
-  /// \brief Iterators over all possible lookups within this context.
+  /// Iterators over all possible lookups within this context.
   all_lookups_iterator lookups_begin() const;
   all_lookups_iterator lookups_end() const;
 
-  /// \brief Iterators over all possible lookups within this context that are
+  /// Iterators over all possible lookups within this context that are
   /// currently loaded; don't attempt to retrieve anything from an external
   /// source.
   all_lookups_iterator noload_lookups_begin() const;
@@ -1867,7 +2305,7 @@
 
   // Low-level accessors
 
-  /// \brief Mark that there are external lexical declarations that we need
+  /// Mark that there are external lexical declarations that we need
   /// to include in our lookup table (and that are not available as external
   /// visible lookups). These extra lookup results will be found by walking
   /// the lexical declarations of this context. This should be used only if
@@ -1876,53 +2314,57 @@
   void setMustBuildLookupTable() {
     assert(this == getPrimaryContext() &&
            "should only be called on primary context");
-    HasLazyExternalLexicalLookups = true;
+    DeclContextBits.HasLazyExternalLexicalLookups = true;
   }
 
-  /// \brief Retrieve the internal representation of the lookup structure.
+  /// Retrieve the internal representation of the lookup structure.
   /// This may omit some names if we are lazily building the structure.
   StoredDeclsMap *getLookupPtr() const { return LookupPtr; }
 
-  /// \brief Ensure the lookup structure is fully-built and return it.
+  /// Ensure the lookup structure is fully-built and return it.
   StoredDeclsMap *buildLookup();
 
-  /// \brief Whether this DeclContext has external storage containing
+  /// Whether this DeclContext has external storage containing
   /// additional declarations that are lexically in this context.
-  bool hasExternalLexicalStorage() const { return ExternalLexicalStorage; }
+  bool hasExternalLexicalStorage() const {
+    return DeclContextBits.ExternalLexicalStorage;
+  }
 
-  /// \brief State whether this DeclContext has external storage for
+  /// State whether this DeclContext has external storage for
   /// declarations lexically in this context.
-  void setHasExternalLexicalStorage(bool ES = true) {
-    ExternalLexicalStorage = ES;
+  void setHasExternalLexicalStorage(bool ES = true) const {
+    DeclContextBits.ExternalLexicalStorage = ES;
   }
 
-  /// \brief Whether this DeclContext has external storage containing
+  /// Whether this DeclContext has external storage containing
   /// additional declarations that are visible in this context.
-  bool hasExternalVisibleStorage() const { return ExternalVisibleStorage; }
-
-  /// \brief State whether this DeclContext has external storage for
-  /// declarations visible in this context.
-  void setHasExternalVisibleStorage(bool ES = true) {
-    ExternalVisibleStorage = ES;
-    if (ES && LookupPtr)
-      NeedToReconcileExternalVisibleStorage = true;
+  bool hasExternalVisibleStorage() const {
+    return DeclContextBits.ExternalVisibleStorage;
   }
 
-  /// \brief Determine whether the given declaration is stored in the list of
+  /// State whether this DeclContext has external storage for
+  /// declarations visible in this context.
+  void setHasExternalVisibleStorage(bool ES = true) const {
+    DeclContextBits.ExternalVisibleStorage = ES;
+    if (ES && LookupPtr)
+      DeclContextBits.NeedToReconcileExternalVisibleStorage = true;
+  }
+
+  /// Determine whether the given declaration is stored in the list of
   /// declarations lexically within this context.
   bool isDeclInLexicalTraversal(const Decl *D) const {
-    return D && (D->NextInContextAndBits.getPointer() || D == FirstDecl || 
+    return D && (D->NextInContextAndBits.getPointer() || D == FirstDecl ||
                  D == LastDecl);
   }
 
-  bool setUseQualifiedLookup(bool use = true) {
-    bool old_value = UseQualifiedLookup;
-    UseQualifiedLookup = use;
+  bool setUseQualifiedLookup(bool use = true) const {
+    bool old_value = DeclContextBits.UseQualifiedLookup;
+    DeclContextBits.UseQualifiedLookup = use;
     return old_value;
   }
 
   bool shouldUseQualifiedLookup() const {
-    return UseQualifiedLookup;
+    return DeclContextBits.UseQualifiedLookup;
   }
 
   static bool classof(const Decl *D);
@@ -1934,12 +2376,50 @@
                    bool Deserialize = false) const;
 
 private:
-  friend class DependentDiagnostic;
+  /// Whether this declaration context has had externally visible
+  /// storage added since the last lookup. In this case, \c LookupPtr's
+  /// invariant may not hold and needs to be fixed before we perform
+  /// another lookup.
+  bool hasNeedToReconcileExternalVisibleStorage() const {
+    return DeclContextBits.NeedToReconcileExternalVisibleStorage;
+  }
+
+  /// State that this declaration context has had externally visible
+  /// storage added since the last lookup. In this case, \c LookupPtr's
+  /// invariant may not hold and needs to be fixed before we perform
+  /// another lookup.
+  void setNeedToReconcileExternalVisibleStorage(bool Need = true) const {
+    DeclContextBits.NeedToReconcileExternalVisibleStorage = Need;
+  }
+
+  /// If \c true, this context may have local lexical declarations
+  /// that are missing from the lookup table.
+  bool hasLazyLocalLexicalLookups() const {
+    return DeclContextBits.HasLazyLocalLexicalLookups;
+  }
+
+  /// If \c true, this context may have local lexical declarations
+  /// that are missing from the lookup table.
+  void setHasLazyLocalLexicalLookups(bool HasLLLL = true) const {
+    DeclContextBits.HasLazyLocalLexicalLookups = HasLLLL;
+  }
+
+  /// If \c true, the external source may have lexical declarations
+  /// that are missing from the lookup table.
+  bool hasLazyExternalLexicalLookups() const {
+    return DeclContextBits.HasLazyExternalLexicalLookups;
+  }
+
+  /// If \c true, the external source may have lexical declarations
+  /// that are missing from the lookup table.
+  void setHasLazyExternalLexicalLookups(bool HasLELL = true) const {
+    DeclContextBits.HasLazyExternalLexicalLookups = HasLELL;
+  }
 
   void reconcileExternalVisibleStorage() const;
   bool LoadLexicalDeclsFromExternalStorage() const;
 
-  /// @brief Makes a declaration visible within this context, but
+  /// Makes a declaration visible within this context, but
   /// suppresses searches for external declarations with the same
   /// name.
   ///
diff --git a/linux-x64/clang/include/clang/AST/DeclCXX.h b/linux-x64/clang/include/clang/AST/DeclCXX.h
index a5e1677..07bb59b 100644
--- a/linux-x64/clang/include/clang/AST/DeclCXX.h
+++ b/linux-x64/clang/include/clang/AST/DeclCXX.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the C++ Decl subclasses, other than those for templates
+/// Defines the C++ Decl subclasses, other than those for templates
 /// (found in DeclTemplate.h) and friends (in DeclFriend.h).
 //
 //===----------------------------------------------------------------------===//
@@ -20,6 +20,7 @@
 #include "clang/AST/ASTUnresolvedSet.h"
 #include "clang/AST/Attr.h"
 #include "clang/AST/Decl.h"
+#include "clang/AST/DeclBase.h"
 #include "clang/AST/DeclarationName.h"
 #include "clang/AST/Expr.h"
 #include "clang/AST/ExternalASTSource.h"
@@ -72,7 +73,7 @@
 class TemplateParameterList;
 class UsingDecl;
 
-/// \brief Represents any kind of function declaration, whether it is a
+/// Represents any kind of function declaration, whether it is a
 /// concrete function or a function template.
 class AnyFunctionDecl {
   NamedDecl *Function;
@@ -83,11 +84,11 @@
   AnyFunctionDecl(FunctionDecl *FD) : Function(FD) {}
   AnyFunctionDecl(FunctionTemplateDecl *FTD);
 
-  /// \brief Implicily converts any function or function template into a
+  /// Implicily converts any function or function template into a
   /// named declaration.
   operator NamedDecl *() const { return Function; }
 
-  /// \brief Retrieve the underlying function or function template.
+  /// Retrieve the underlying function or function template.
   NamedDecl *get() const { return Function; }
 
   static AnyFunctionDecl getFromNamedDecl(NamedDecl *ND) {
@@ -118,7 +119,7 @@
 
 namespace clang {
 
-/// \brief Represents an access specifier followed by colon ':'.
+/// Represents an access specifier followed by colon ':'.
 ///
 /// An objects of this class represents sugar for the syntactic occurrence
 /// of an access specifier followed by a colon in the list of member
@@ -129,7 +130,7 @@
 /// Also note that this class has nothing to do with so-called
 /// "access declarations" (C++98 11.3 [class.access.dcl]).
 class AccessSpecDecl : public Decl {
-  /// \brief The location of the ':'.
+  /// The location of the ':'.
   SourceLocation ColonLoc;
 
   AccessSpecDecl(AccessSpecifier AS, DeclContext *DC,
@@ -143,16 +144,16 @@
   virtual void anchor();
 
 public:
-  /// \brief The location of the access specifier.
+  /// The location of the access specifier.
   SourceLocation getAccessSpecifierLoc() const { return getLocation(); }
 
-  /// \brief Sets the location of the access specifier.
+  /// Sets the location of the access specifier.
   void setAccessSpecifierLoc(SourceLocation ASLoc) { setLocation(ASLoc); }
 
-  /// \brief The location of the colon following the access specifier.
+  /// The location of the colon following the access specifier.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
-  /// \brief Sets the location of the colon.
+  /// Sets the location of the colon.
   void setColonLoc(SourceLocation CLoc) { ColonLoc = CLoc; }
 
   SourceRange getSourceRange() const override LLVM_READONLY {
@@ -172,7 +173,7 @@
   static bool classofKind(Kind K) { return K == AccessSpec; }
 };
 
-/// \brief Represents a base class of a C++ class.
+/// Represents a base class of a C++ class.
 ///
 /// Each CXXBaseSpecifier represents a single, direct base class (or
 /// struct) of a C++ class (or struct). It specifies the type of that
@@ -189,35 +190,35 @@
 /// In this code, C will have two CXXBaseSpecifiers, one for "public
 /// virtual A" and the other for "protected B".
 class CXXBaseSpecifier {
-  /// \brief The source code range that covers the full base
+  /// The source code range that covers the full base
   /// specifier, including the "virtual" (if present) and access
   /// specifier (if present).
   SourceRange Range;
 
-  /// \brief The source location of the ellipsis, if this is a pack
+  /// The source location of the ellipsis, if this is a pack
   /// expansion.
   SourceLocation EllipsisLoc;
 
-  /// \brief Whether this is a virtual base class or not.
+  /// Whether this is a virtual base class or not.
   unsigned Virtual : 1;
 
-  /// \brief Whether this is the base of a class (true) or of a struct (false).
+  /// Whether this is the base of a class (true) or of a struct (false).
   ///
   /// This determines the mapping from the access specifier as written in the
   /// source code to the access specifier used for semantic analysis.
   unsigned BaseOfClass : 1;
 
-  /// \brief Access specifier as written in the source code (may be AS_none).
+  /// Access specifier as written in the source code (may be AS_none).
   ///
   /// The actual type of data stored here is an AccessSpecifier, but we use
   /// "unsigned" here to work around a VC++ bug.
   unsigned Access : 2;
 
-  /// \brief Whether the class contains a using declaration
+  /// Whether the class contains a using declaration
   /// to inherit the named class's constructors.
   unsigned InheritConstructors : 1;
 
-  /// \brief The type of the base class.
+  /// The type of the base class.
   ///
   /// This will be a class or struct (or a typedef of such). The source code
   /// range does not include the \c virtual or the access specifier.
@@ -230,40 +231,48 @@
     : Range(R), EllipsisLoc(EllipsisLoc), Virtual(V), BaseOfClass(BC),
       Access(A), InheritConstructors(false), BaseTypeInfo(TInfo) {}
 
-  /// \brief Retrieves the source range that contains the entire base specifier.
+  /// Retrieves the source range that contains the entire base specifier.
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
-  /// \brief Get the location at which the base class type was written.
+  /// Get the location at which the base class type was written.
   SourceLocation getBaseTypeLoc() const LLVM_READONLY {
-    return BaseTypeInfo->getTypeLoc().getLocStart();
+    return BaseTypeInfo->getTypeLoc().getBeginLoc();
   }
 
-  /// \brief Determines whether the base class is a virtual base class (or not).
+  /// Determines whether the base class is a virtual base class (or not).
   bool isVirtual() const { return Virtual; }
 
-  /// \brief Determine whether this base class is a base of a class declared
+  /// Determine whether this base class is a base of a class declared
   /// with the 'class' keyword (vs. one declared with the 'struct' keyword).
   bool isBaseOfClass() const { return BaseOfClass; }
 
-  /// \brief Determine whether this base specifier is a pack expansion.
+  /// Determine whether this base specifier is a pack expansion.
   bool isPackExpansion() const { return EllipsisLoc.isValid(); }
 
-  /// \brief Determine whether this base class's constructors get inherited.
+  /// Determine whether this base class's constructors get inherited.
   bool getInheritConstructors() const { return InheritConstructors; }
 
-  /// \brief Set that this base class's constructors should be inherited.
+  /// Set that this base class's constructors should be inherited.
   void setInheritConstructors(bool Inherit = true) {
     InheritConstructors = Inherit;
   }
 
-  /// \brief For a pack expansion, determine the location of the ellipsis.
+  /// For a pack expansion, determine the location of the ellipsis.
   SourceLocation getEllipsisLoc() const {
     return EllipsisLoc;
   }
 
-  /// \brief Returns the access specifier for this base specifier. 
+  /// Returns the access specifier for this base specifier.
   ///
   /// This is the actual base specifier as used for semantic analysis, so
   /// the result can never be AS_none. To retrieve the access specifier as
@@ -275,7 +284,7 @@
       return (AccessSpecifier)Access;
   }
 
-  /// \brief Retrieves the access specifier as written in the source code
+  /// Retrieves the access specifier as written in the source code
   /// (which may mean that no access specifier was explicitly written).
   ///
   /// Use getAccessSpecifier() to retrieve the access specifier for use in
@@ -284,18 +293,18 @@
     return (AccessSpecifier)Access;
   }
 
-  /// \brief Retrieves the type of the base class.
+  /// Retrieves the type of the base class.
   ///
   /// This type will always be an unqualified class type.
   QualType getType() const {
     return BaseTypeInfo->getType().getUnqualifiedType();
   }
 
-  /// \brief Retrieves the type and source location of the base class.
+  /// Retrieves the type and source location of the base class.
   TypeSourceInfo *getTypeSourceInfo() const { return BaseTypeInfo; }
 };
 
-/// \brief Represents a C++ struct/union/class.
+/// Represents a C++ struct/union/class.
 class CXXRecordDecl : public RecordDecl {
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
@@ -321,16 +330,16 @@
   };
 
   struct DefinitionData {
-    /// \brief True if this class has any user-declared constructors.
+    /// True if this class has any user-declared constructors.
     unsigned UserDeclaredConstructor : 1;
 
-    /// \brief The user-declared special members which this class has.
+    /// The user-declared special members which this class has.
     unsigned UserDeclaredSpecialMembers : 6;
 
-    /// \brief True when this class is an aggregate.
+    /// True when this class is an aggregate.
     unsigned Aggregate : 1;
 
-    /// \brief True when this class is a POD-type.
+    /// True when this class is a POD-type.
     unsigned PlainOldData : 1;
 
     /// true when this class is empty for traits purposes,
@@ -339,15 +348,20 @@
     /// class. Doesn't take union-ness into account.
     unsigned Empty : 1;
 
-    /// \brief True when this class is polymorphic, i.e., has at
+    /// True when this class is polymorphic, i.e., has at
     /// least one virtual member or derives from a polymorphic class.
     unsigned Polymorphic : 1;
 
-    /// \brief True when this class is abstract, i.e., has at least
+    /// True when this class is abstract, i.e., has at least
     /// one pure virtual function, (that can come from a base class).
     unsigned Abstract : 1;
 
-    /// \brief True when this class has standard layout.
+    /// True when this class is standard-layout, per the applicable
+    /// language rules (including DRs).
+    unsigned IsStandardLayout : 1;
+
+    /// True when this class was standard-layout under the C++11
+    /// definition.
     ///
     /// C++11 [class]p7.  A standard-layout class is a class that:
     /// * has no non-static data members of type non-standard-layout class (or
@@ -361,57 +375,63 @@
     ///   classes with non-static data members, and
     /// * has no base classes of the same type as the first non-static data
     ///   member.
-    unsigned IsStandardLayout : 1;
+    unsigned IsCXX11StandardLayout : 1;
 
-    /// \brief True when there are no non-empty base classes.
-    ///
+    /// True when any base class has any declared non-static data
+    /// members or bit-fields.
     /// This is a helper bit of state used to implement IsStandardLayout more
     /// efficiently.
-    unsigned HasNoNonEmptyBases : 1;
+    unsigned HasBasesWithFields : 1;
 
-    /// \brief True when there are private non-static data members.
+    /// True when any base class has any declared non-static data
+    /// members.
+    /// This is a helper bit of state used to implement IsCXX11StandardLayout
+    /// more efficiently.
+    unsigned HasBasesWithNonStaticDataMembers : 1;
+
+    /// True when there are private non-static data members.
     unsigned HasPrivateFields : 1;
 
-    /// \brief True when there are protected non-static data members.
+    /// True when there are protected non-static data members.
     unsigned HasProtectedFields : 1;
 
-    /// \brief True when there are private non-static data members.
+    /// True when there are private non-static data members.
     unsigned HasPublicFields : 1;
 
-    /// \brief True if this class (or any subobject) has mutable fields.
+    /// True if this class (or any subobject) has mutable fields.
     unsigned HasMutableFields : 1;
 
-    /// \brief True if this class (or any nested anonymous struct or union)
+    /// True if this class (or any nested anonymous struct or union)
     /// has variant members.
     unsigned HasVariantMembers : 1;
 
-    /// \brief True if there no non-field members declared by the user.
+    /// True if there no non-field members declared by the user.
     unsigned HasOnlyCMembers : 1;
 
-    /// \brief True if any field has an in-class initializer, including those
+    /// True if any field has an in-class initializer, including those
     /// within anonymous unions or structs.
     unsigned HasInClassInitializer : 1;
 
-    /// \brief True if any field is of reference type, and does not have an
+    /// True if any field is of reference type, and does not have an
     /// in-class initializer.
     ///
     /// In this case, value-initialization of this class is illegal in C++98
     /// even if the class has a trivial default constructor.
     unsigned HasUninitializedReferenceMember : 1;
 
-    /// \brief True if any non-mutable field whose type doesn't have a user-
+    /// True if any non-mutable field whose type doesn't have a user-
     /// provided default ctor also doesn't have an in-class initializer.
     unsigned HasUninitializedFields : 1;
 
-    /// \brief True if there are any member using-declarations that inherit
+    /// True if there are any member using-declarations that inherit
     /// constructors from a base class.
     unsigned HasInheritedConstructor : 1;
 
-    /// \brief True if there are any member using-declarations named
+    /// True if there are any member using-declarations named
     /// 'operator='.
     unsigned HasInheritedAssignment : 1;
 
-    /// \brief These flags are \c true if a defaulted corresponding special
+    /// These flags are \c true if a defaulted corresponding special
     /// member can't be fully analyzed without performing overload resolution.
     /// @{
     unsigned NeedOverloadResolutionForCopyConstructor : 1;
@@ -420,7 +440,7 @@
     unsigned NeedOverloadResolutionForDestructor : 1;
     /// @}
 
-    /// \brief These flags are \c true if an implicit defaulted corresponding
+    /// These flags are \c true if an implicit defaulted corresponding
     /// special member would be defined as deleted.
     /// @{
     unsigned DefaultedCopyConstructorIsDeleted : 1;
@@ -429,7 +449,7 @@
     unsigned DefaultedDestructorIsDeleted : 1;
     /// @}
 
-    /// \brief The trivial special members which this class has, per
+    /// The trivial special members which this class has, per
     /// C++11 [class.ctor]p5, C++11 [class.copy]p12, C++11 [class.copy]p25,
     /// C++11 [class.dtor]p5, or would have if the member were not suppressed.
     ///
@@ -442,7 +462,7 @@
     /// SMF_MoveConstructor, and SMF_Destructor are meaningful here.
     unsigned HasTrivialSpecialMembersForCall : 6;
 
-    /// \brief The declared special members of this class which are known to be
+    /// The declared special members of this class which are known to be
     /// non-trivial.
     ///
     /// This excludes any user-declared but not user-provided special members
@@ -456,117 +476,117 @@
     /// SMF_MoveConstructor, and SMF_Destructor are meaningful here.
     unsigned DeclaredNonTrivialSpecialMembersForCall : 6;
 
-    /// \brief True when this class has a destructor with no semantic effect.
+    /// True when this class has a destructor with no semantic effect.
     unsigned HasIrrelevantDestructor : 1;
 
-    /// \brief True when this class has at least one user-declared constexpr
+    /// True when this class has at least one user-declared constexpr
     /// constructor which is neither the copy nor move constructor.
     unsigned HasConstexprNonCopyMoveConstructor : 1;
 
-    /// \brief True if this class has a (possibly implicit) defaulted default
+    /// True if this class has a (possibly implicit) defaulted default
     /// constructor.
     unsigned HasDefaultedDefaultConstructor : 1;
 
-    /// \brief True if a defaulted default constructor for this class would
+    /// True if a defaulted default constructor for this class would
     /// be constexpr.
     unsigned DefaultedDefaultConstructorIsConstexpr : 1;
 
-    /// \brief True if this class has a constexpr default constructor.
+    /// True if this class has a constexpr default constructor.
     ///
     /// This is true for either a user-declared constexpr default constructor
     /// or an implicitly declared constexpr default constructor.
     unsigned HasConstexprDefaultConstructor : 1;
 
-    /// \brief True when this class contains at least one non-static data
+    /// True when this class contains at least one non-static data
     /// member or base class of non-literal or volatile type.
     unsigned HasNonLiteralTypeFieldsOrBases : 1;
 
-    /// \brief True when visible conversion functions are already computed
+    /// True when visible conversion functions are already computed
     /// and are available.
     unsigned ComputedVisibleConversions : 1;
 
-    /// \brief Whether we have a C++11 user-provided default constructor (not
+    /// Whether we have a C++11 user-provided default constructor (not
     /// explicitly deleted or defaulted).
     unsigned UserProvidedDefaultConstructor : 1;
 
-    /// \brief The special members which have been declared for this class,
+    /// The special members which have been declared for this class,
     /// either by the user or implicitly.
     unsigned DeclaredSpecialMembers : 6;
 
-    /// \brief Whether an implicit copy constructor could have a const-qualified
+    /// Whether an implicit copy constructor could have a const-qualified
     /// parameter, for initializing virtual bases and for other subobjects.
     unsigned ImplicitCopyConstructorCanHaveConstParamForVBase : 1;
     unsigned ImplicitCopyConstructorCanHaveConstParamForNonVBase : 1;
 
-    /// \brief Whether an implicit copy assignment operator would have a
+    /// Whether an implicit copy assignment operator would have a
     /// const-qualified parameter.
     unsigned ImplicitCopyAssignmentHasConstParam : 1;
 
-    /// \brief Whether any declared copy constructor has a const-qualified
+    /// Whether any declared copy constructor has a const-qualified
     /// parameter.
     unsigned HasDeclaredCopyConstructorWithConstParam : 1;
 
-    /// \brief Whether any declared copy assignment operator has either a
+    /// Whether any declared copy assignment operator has either a
     /// const-qualified reference parameter or a non-reference parameter.
     unsigned HasDeclaredCopyAssignmentWithConstParam : 1;
 
-    /// \brief Whether this class describes a C++ lambda.
+    /// Whether this class describes a C++ lambda.
     unsigned IsLambda : 1;
 
-    /// \brief Whether we are currently parsing base specifiers.
+    /// Whether we are currently parsing base specifiers.
     unsigned IsParsingBaseSpecifiers : 1;
 
     unsigned HasODRHash : 1;
 
-    /// \brief A hash of parts of the class to help in ODR checking.
+    /// A hash of parts of the class to help in ODR checking.
     unsigned ODRHash = 0;
 
-    /// \brief The number of base class specifiers in Bases.
+    /// The number of base class specifiers in Bases.
     unsigned NumBases = 0;
 
-    /// \brief The number of virtual base class specifiers in VBases.
+    /// The number of virtual base class specifiers in VBases.
     unsigned NumVBases = 0;
 
-    /// \brief Base classes of this class.
+    /// Base classes of this class.
     ///
     /// FIXME: This is wasted space for a union.
     LazyCXXBaseSpecifiersPtr Bases;
 
-    /// \brief direct and indirect virtual base classes of this class.
+    /// direct and indirect virtual base classes of this class.
     LazyCXXBaseSpecifiersPtr VBases;
 
-    /// \brief The conversion functions of this C++ class (but not its
+    /// The conversion functions of this C++ class (but not its
     /// inherited conversion functions).
     ///
     /// Each of the entries in this overload set is a CXXConversionDecl.
     LazyASTUnresolvedSet Conversions;
 
-    /// \brief The conversion functions of this C++ class and all those
+    /// The conversion functions of this C++ class and all those
     /// inherited conversion functions that are visible in this class.
     ///
     /// Each of the entries in this overload set is a CXXConversionDecl or a
     /// FunctionTemplateDecl.
     LazyASTUnresolvedSet VisibleConversions;
 
-    /// \brief The declaration which defines this record.
+    /// The declaration which defines this record.
     CXXRecordDecl *Definition;
 
-    /// \brief The first friend declaration in this class, or null if there
-    /// aren't any. 
+    /// The first friend declaration in this class, or null if there
+    /// aren't any.
     ///
     /// This is actually currently stored in reverse order.
     LazyDeclPtr FirstFriend;
 
     DefinitionData(CXXRecordDecl *D);
 
-    /// \brief Retrieve the set of direct base classes.
+    /// Retrieve the set of direct base classes.
     CXXBaseSpecifier *getBases() const {
       if (!Bases.isOffset())
         return Bases.get(nullptr);
       return getBasesSlowCase();
     }
 
-    /// \brief Retrieve the set of virtual base classes.
+    /// Retrieve the set of virtual base classes.
     CXXBaseSpecifier *getVBases() const {
       if (!VBases.isOffset())
         return VBases.get(nullptr);
@@ -588,54 +608,54 @@
 
   struct DefinitionData *DefinitionData;
 
-  /// \brief Describes a C++ closure type (generated by a lambda expression).
+  /// Describes a C++ closure type (generated by a lambda expression).
   struct LambdaDefinitionData : public DefinitionData {
     using Capture = LambdaCapture;
 
-    /// \brief Whether this lambda is known to be dependent, even if its
+    /// Whether this lambda is known to be dependent, even if its
     /// context isn't dependent.
-    /// 
+    ///
     /// A lambda with a non-dependent context can be dependent if it occurs
     /// within the default argument of a function template, because the
     /// lambda will have been created with the enclosing context as its
     /// declaration context, rather than function. This is an unfortunate
-    /// artifact of having to parse the default arguments before. 
+    /// artifact of having to parse the default arguments before.
     unsigned Dependent : 1;
-    
-    /// \brief Whether this lambda is a generic lambda.
+
+    /// Whether this lambda is a generic lambda.
     unsigned IsGenericLambda : 1;
 
-    /// \brief The Default Capture.
+    /// The Default Capture.
     unsigned CaptureDefault : 2;
 
-    /// \brief The number of captures in this lambda is limited 2^NumCaptures.
+    /// The number of captures in this lambda is limited 2^NumCaptures.
     unsigned NumCaptures : 15;
 
-    /// \brief The number of explicit captures in this lambda.
+    /// The number of explicit captures in this lambda.
     unsigned NumExplicitCaptures : 13;
 
-    /// \brief The number used to indicate this lambda expression for name 
+    /// The number used to indicate this lambda expression for name
     /// mangling in the Itanium C++ ABI.
     unsigned ManglingNumber = 0;
-    
-    /// \brief The declaration that provides context for this lambda, if the
+
+    /// The declaration that provides context for this lambda, if the
     /// actual DeclContext does not suffice. This is used for lambdas that
     /// occur within default arguments of function parameters within the class
     /// or within a data member initializer.
     LazyDeclPtr ContextDecl;
-    
-    /// \brief The list of captures, both explicit and implicit, for this 
+
+    /// The list of captures, both explicit and implicit, for this
     /// lambda.
     Capture *Captures = nullptr;
 
-    /// \brief The type of the call method.
+    /// The type of the call method.
     TypeSourceInfo *MethodTyInfo;
 
-    LambdaDefinitionData(CXXRecordDecl *D, TypeSourceInfo *Info, 
-                         bool Dependent, bool IsGeneric, 
-                         LambdaCaptureDefault CaptureDefault) 
-      : DefinitionData(D), Dependent(Dependent), IsGenericLambda(IsGeneric), 
-        CaptureDefault(CaptureDefault), NumCaptures(0), NumExplicitCaptures(0), 
+    LambdaDefinitionData(CXXRecordDecl *D, TypeSourceInfo *Info,
+                         bool Dependent, bool IsGeneric,
+                         LambdaCaptureDefault CaptureDefault)
+      : DefinitionData(D), Dependent(Dependent), IsGenericLambda(IsGeneric),
+        CaptureDefault(CaptureDefault), NumCaptures(0), NumExplicitCaptures(0),
         MethodTyInfo(Info) {
       IsLambda = true;
 
@@ -666,7 +686,7 @@
     return static_cast<LambdaDefinitionData&>(*DD);
   }
 
-  /// \brief The template or declaration that this declaration
+  /// The template or declaration that this declaration
   /// describes or was instantiated from, respectively.
   ///
   /// For non-templates, this value will be null. For record
@@ -678,11 +698,11 @@
   llvm::PointerUnion<ClassTemplateDecl *, MemberSpecializationInfo *>
       TemplateOrInstantiation;
 
-  /// \brief Called from setBases and addedMember to notify the class that a
+  /// Called from setBases and addedMember to notify the class that a
   /// direct or virtual base class or a member of class type has been added.
   void addedClassSubobject(CXXRecordDecl *Base);
 
-  /// \brief Notify the class that member has been added.
+  /// Notify the class that member has been added.
   ///
   /// This routine helps maintain information about the class based on which
   /// members have been added. It will be invoked by DeclContext::addDecl()
@@ -691,20 +711,26 @@
 
   void markedVirtualFunctionPure();
 
-  /// \brief Get the head of our list of friend declarations, possibly
+  /// Get the head of our list of friend declarations, possibly
   /// deserializing the friends from an external AST source.
   FriendDecl *getFirstFriend() const;
 
+  /// Determine whether this class has an empty base class subobject of type X
+  /// or of one of the types that might be at offset 0 within X (per the C++
+  /// "standard layout" rules).
+  bool hasSubobjectAtOffsetZeroOfEmptyBaseType(ASTContext &Ctx,
+                                               const CXXRecordDecl *X);
+
 protected:
   CXXRecordDecl(Kind K, TagKind TK, const ASTContext &C, DeclContext *DC,
                 SourceLocation StartLoc, SourceLocation IdLoc,
                 IdentifierInfo *Id, CXXRecordDecl *PrevDecl);
 
 public:
-  /// \brief Iterator that traverses the base classes of a class.
+  /// Iterator that traverses the base classes of a class.
   using base_class_iterator = CXXBaseSpecifier *;
 
-  /// \brief Iterator that traverses the base classes of a class.
+  /// Iterator that traverses the base classes of a class.
   using base_class_const_iterator = const CXXBaseSpecifier *;
 
   CXXRecordDecl *getCanonicalDecl() override {
@@ -733,6 +759,21 @@
     return const_cast<CXXRecordDecl*>(this)->getMostRecentDecl();
   }
 
+  CXXRecordDecl *getMostRecentNonInjectedDecl() {
+    CXXRecordDecl *Recent =
+        static_cast<CXXRecordDecl *>(this)->getMostRecentDecl();
+    while (Recent->isInjectedClassName()) {
+      // FIXME: Does injected class name need to be in the redeclarations chain?
+      assert(Recent->getPreviousDecl());
+      Recent = Recent->getPreviousDecl();
+    }
+    return Recent;
+  }
+
+  const CXXRecordDecl *getMostRecentNonInjectedDecl() const {
+    return const_cast<CXXRecordDecl*>(this)->getMostRecentNonInjectedDecl();
+  }
+
   CXXRecordDecl *getDefinition() const {
     // We only need an update if we don't already know which
     // declaration is the definition.
@@ -757,6 +798,18 @@
     return data().Polymorphic || data().NumVBases != 0;
   }
 
+  /// @returns true if class is dynamic or might be dynamic because the
+  /// definition is incomplete of dependent.
+  bool mayBeDynamicClass() const {
+    return !hasDefinition() || isDynamicClass() || hasAnyDependentBases();
+  }
+
+  /// @returns true if class is non dynamic or might be non dynamic because the
+  /// definition is incomplete of dependent.
+  bool mayBeNonDynamicClass() const {
+    return !hasDefinition() || !isDynamicClass() || hasAnyDependentBases();
+  }
+
   void setIsParsingBaseSpecifiers() { data().IsParsingBaseSpecifiers = true; }
 
   bool isParsingBaseSpecifiers() const {
@@ -765,10 +818,10 @@
 
   unsigned getODRHash() const;
 
-  /// \brief Sets the base classes of this struct or class.
+  /// Sets the base classes of this struct or class.
   void setBases(CXXBaseSpecifier const * const *Bases, unsigned NumBases);
 
-  /// \brief Retrieves the number of base classes of this class.
+  /// Retrieves the number of base classes of this class.
   unsigned getNumBases() const { return data().NumBases; }
 
   using base_class_range = llvm::iterator_range<base_class_iterator>;
@@ -789,7 +842,7 @@
     return bases_begin() + data().NumBases;
   }
 
-  /// \brief Retrieves the number of virtual base classes of this class.
+  /// Retrieves the number of virtual base classes of this class.
   unsigned getNumVBases() const { return data().NumVBases; }
 
   base_class_range vbases() {
@@ -806,7 +859,7 @@
     return vbases_begin() + data().NumVBases;
   }
 
-  /// \brief Determine whether this class has any dependent base classes which
+  /// Determine whether this class has any dependent base classes which
   /// are not the current instantiation.
   bool hasAnyDependentBases() const;
 
@@ -821,13 +874,13 @@
     return method_range(method_begin(), method_end());
   }
 
-  /// \brief Method begin iterator.  Iterates in the order the methods
+  /// Method begin iterator.  Iterates in the order the methods
   /// were declared.
   method_iterator method_begin() const {
     return method_iterator(decls_begin());
   }
 
-  /// \brief Method past-the-end iterator.
+  /// Method past-the-end iterator.
   method_iterator method_end() const {
     return method_iterator(decls_end());
   }
@@ -862,7 +915,7 @@
     return data().FirstFriend.isValid();
   }
 
-  /// \brief \c true if a defaulted copy constructor for this class would be
+  /// \c true if a defaulted copy constructor for this class would be
   /// deleted.
   bool defaultedCopyConstructorIsDeleted() const {
     assert((!needsOverloadResolutionForCopyConstructor() ||
@@ -871,7 +924,7 @@
     return data().DefaultedCopyConstructorIsDeleted;
   }
 
-  /// \brief \c true if a defaulted move constructor for this class would be
+  /// \c true if a defaulted move constructor for this class would be
   /// deleted.
   bool defaultedMoveConstructorIsDeleted() const {
     assert((!needsOverloadResolutionForMoveConstructor() ||
@@ -880,7 +933,7 @@
     return data().DefaultedMoveConstructorIsDeleted;
   }
 
-  /// \brief \c true if a defaulted destructor for this class would be deleted.
+  /// \c true if a defaulted destructor for this class would be deleted.
   bool defaultedDestructorIsDeleted() const {
     assert((!needsOverloadResolutionForDestructor() ||
             (data().DeclaredSpecialMembers & SMF_Destructor)) &&
@@ -888,41 +941,41 @@
     return data().DefaultedDestructorIsDeleted;
   }
 
-  /// \brief \c true if we know for sure that this class has a single,
+  /// \c true if we know for sure that this class has a single,
   /// accessible, unambiguous copy constructor that is not deleted.
   bool hasSimpleCopyConstructor() const {
     return !hasUserDeclaredCopyConstructor() &&
            !data().DefaultedCopyConstructorIsDeleted;
   }
 
-  /// \brief \c true if we know for sure that this class has a single,
+  /// \c true if we know for sure that this class has a single,
   /// accessible, unambiguous move constructor that is not deleted.
   bool hasSimpleMoveConstructor() const {
     return !hasUserDeclaredMoveConstructor() && hasMoveConstructor() &&
            !data().DefaultedMoveConstructorIsDeleted;
   }
 
-  /// \brief \c true if we know for sure that this class has a single,
+  /// \c true if we know for sure that this class has a single,
   /// accessible, unambiguous move assignment operator that is not deleted.
   bool hasSimpleMoveAssignment() const {
     return !hasUserDeclaredMoveAssignment() && hasMoveAssignment() &&
            !data().DefaultedMoveAssignmentIsDeleted;
   }
 
-  /// \brief \c true if we know for sure that this class has an accessible
+  /// \c true if we know for sure that this class has an accessible
   /// destructor that is not deleted.
   bool hasSimpleDestructor() const {
     return !hasUserDeclaredDestructor() &&
            !data().DefaultedDestructorIsDeleted;
   }
 
-  /// \brief Determine whether this class has any default constructors.
+  /// Determine whether this class has any default constructors.
   bool hasDefaultConstructor() const {
     return (data().DeclaredSpecialMembers & SMF_DefaultConstructor) ||
            needsImplicitDefaultConstructor();
   }
 
-  /// \brief Determine if we need to declare a default constructor for
+  /// Determine if we need to declare a default constructor for
   /// this class.
   ///
   /// This value is used for lazy creation of default constructors.
@@ -935,33 +988,33 @@
            !isLambda();
   }
 
-  /// \brief Determine whether this class has any user-declared constructors.
+  /// Determine whether this class has any user-declared constructors.
   ///
   /// When true, a default constructor will not be implicitly declared.
   bool hasUserDeclaredConstructor() const {
     return data().UserDeclaredConstructor;
   }
 
-  /// \brief Whether this class has a user-provided default constructor
+  /// Whether this class has a user-provided default constructor
   /// per C++11.
   bool hasUserProvidedDefaultConstructor() const {
     return data().UserProvidedDefaultConstructor;
   }
 
-  /// \brief Determine whether this class has a user-declared copy constructor.
+  /// Determine whether this class has a user-declared copy constructor.
   ///
   /// When false, a copy constructor will be implicitly declared.
   bool hasUserDeclaredCopyConstructor() const {
     return data().UserDeclaredSpecialMembers & SMF_CopyConstructor;
   }
 
-  /// \brief Determine whether this class needs an implicit copy
+  /// Determine whether this class needs an implicit copy
   /// constructor to be lazily declared.
   bool needsImplicitCopyConstructor() const {
     return !(data().DeclaredSpecialMembers & SMF_CopyConstructor);
   }
 
-  /// \brief Determine whether we need to eagerly declare a defaulted copy
+  /// Determine whether we need to eagerly declare a defaulted copy
   /// constructor for this class.
   bool needsOverloadResolutionForCopyConstructor() const {
     // C++17 [class.copy.ctor]p6:
@@ -976,7 +1029,7 @@
     return data().NeedOverloadResolutionForCopyConstructor;
   }
 
-  /// \brief Determine whether an implicit copy constructor for this type
+  /// Determine whether an implicit copy constructor for this type
   /// would have a parameter with a const-qualified reference type.
   bool implicitCopyConstructorHasConstParam() const {
     return data().ImplicitCopyConstructorCanHaveConstParamForNonVBase &&
@@ -984,7 +1037,7 @@
             data().ImplicitCopyConstructorCanHaveConstParamForVBase);
   }
 
-  /// \brief Determine whether this class has a copy constructor with
+  /// Determine whether this class has a copy constructor with
   /// a parameter type which is a reference to a const-qualified type.
   bool hasCopyConstructorWithConstParam() const {
     return data().HasDeclaredCopyConstructorWithConstParam ||
@@ -992,7 +1045,7 @@
             implicitCopyConstructorHasConstParam());
   }
 
-  /// \brief Whether this class has a user-declared move constructor or
+  /// Whether this class has a user-declared move constructor or
   /// assignment operator.
   ///
   /// When false, a move constructor and assignment operator may be
@@ -1002,19 +1055,19 @@
              (SMF_MoveConstructor | SMF_MoveAssignment);
   }
 
-  /// \brief Determine whether this class has had a move constructor
+  /// Determine whether this class has had a move constructor
   /// declared by the user.
   bool hasUserDeclaredMoveConstructor() const {
     return data().UserDeclaredSpecialMembers & SMF_MoveConstructor;
   }
 
-  /// \brief Determine whether this class has a move constructor.
+  /// Determine whether this class has a move constructor.
   bool hasMoveConstructor() const {
     return (data().DeclaredSpecialMembers & SMF_MoveConstructor) ||
            needsImplicitMoveConstructor();
   }
 
-  /// \brief Set that we attempted to declare an implicit copy
+  /// Set that we attempted to declare an implicit copy
   /// constructor, but overload resolution failed so we deleted it.
   void setImplicitCopyConstructorIsDeleted() {
     assert((data().DefaultedCopyConstructorIsDeleted ||
@@ -1023,7 +1076,7 @@
     data().DefaultedCopyConstructorIsDeleted = true;
   }
 
-  /// \brief Set that we attempted to declare an implicit move
+  /// Set that we attempted to declare an implicit move
   /// constructor, but overload resolution failed so we deleted it.
   void setImplicitMoveConstructorIsDeleted() {
     assert((data().DefaultedMoveConstructorIsDeleted ||
@@ -1032,7 +1085,7 @@
     data().DefaultedMoveConstructorIsDeleted = true;
   }
 
-  /// \brief Set that we attempted to declare an implicit destructor,
+  /// Set that we attempted to declare an implicit destructor,
   /// but overload resolution failed so we deleted it.
   void setImplicitDestructorIsDeleted() {
     assert((data().DefaultedDestructorIsDeleted ||
@@ -1041,7 +1094,7 @@
     data().DefaultedDestructorIsDeleted = true;
   }
 
-  /// \brief Determine whether this class should get an implicit move
+  /// Determine whether this class should get an implicit move
   /// constructor or if any existing special member function inhibits this.
   bool needsImplicitMoveConstructor() const {
     return !(data().DeclaredSpecialMembers & SMF_MoveConstructor) &&
@@ -1051,39 +1104,39 @@
            !hasUserDeclaredDestructor();
   }
 
-  /// \brief Determine whether we need to eagerly declare a defaulted move
+  /// Determine whether we need to eagerly declare a defaulted move
   /// constructor for this class.
   bool needsOverloadResolutionForMoveConstructor() const {
     return data().NeedOverloadResolutionForMoveConstructor;
   }
 
-  /// \brief Determine whether this class has a user-declared copy assignment
+  /// Determine whether this class has a user-declared copy assignment
   /// operator.
   ///
-  /// When false, a copy assigment operator will be implicitly declared.
+  /// When false, a copy assignment operator will be implicitly declared.
   bool hasUserDeclaredCopyAssignment() const {
     return data().UserDeclaredSpecialMembers & SMF_CopyAssignment;
   }
 
-  /// \brief Determine whether this class needs an implicit copy
+  /// Determine whether this class needs an implicit copy
   /// assignment operator to be lazily declared.
   bool needsImplicitCopyAssignment() const {
     return !(data().DeclaredSpecialMembers & SMF_CopyAssignment);
   }
 
-  /// \brief Determine whether we need to eagerly declare a defaulted copy
+  /// Determine whether we need to eagerly declare a defaulted copy
   /// assignment operator for this class.
   bool needsOverloadResolutionForCopyAssignment() const {
     return data().HasMutableFields;
   }
 
-  /// \brief Determine whether an implicit copy assignment operator for this
+  /// Determine whether an implicit copy assignment operator for this
   /// type would have a parameter with a const-qualified reference type.
   bool implicitCopyAssignmentHasConstParam() const {
     return data().ImplicitCopyAssignmentHasConstParam;
   }
 
-  /// \brief Determine whether this class has a copy assignment operator with
+  /// Determine whether this class has a copy assignment operator with
   /// a parameter type which is a reference to a const-qualified type or is not
   /// a reference.
   bool hasCopyAssignmentWithConstParam() const {
@@ -1092,19 +1145,19 @@
             implicitCopyAssignmentHasConstParam());
   }
 
-  /// \brief Determine whether this class has had a move assignment
+  /// Determine whether this class has had a move assignment
   /// declared by the user.
   bool hasUserDeclaredMoveAssignment() const {
     return data().UserDeclaredSpecialMembers & SMF_MoveAssignment;
   }
 
-  /// \brief Determine whether this class has a move assignment operator.
+  /// Determine whether this class has a move assignment operator.
   bool hasMoveAssignment() const {
     return (data().DeclaredSpecialMembers & SMF_MoveAssignment) ||
            needsImplicitMoveAssignment();
   }
 
-  /// \brief Set that we attempted to declare an implicit move assignment
+  /// Set that we attempted to declare an implicit move assignment
   /// operator, but overload resolution failed so we deleted it.
   void setImplicitMoveAssignmentIsDeleted() {
     assert((data().DefaultedMoveAssignmentIsDeleted ||
@@ -1113,7 +1166,7 @@
     data().DefaultedMoveAssignmentIsDeleted = true;
   }
 
-  /// \brief Determine whether this class should get an implicit move
+  /// Determine whether this class should get an implicit move
   /// assignment operator or if any existing special member function inhibits
   /// this.
   bool needsImplicitMoveAssignment() const {
@@ -1128,54 +1181,54 @@
            !isLambda();
   }
 
-  /// \brief Determine whether we need to eagerly declare a move assignment
+  /// Determine whether we need to eagerly declare a move assignment
   /// operator for this class.
   bool needsOverloadResolutionForMoveAssignment() const {
     return data().NeedOverloadResolutionForMoveAssignment;
   }
 
-  /// \brief Determine whether this class has a user-declared destructor.
+  /// Determine whether this class has a user-declared destructor.
   ///
   /// When false, a destructor will be implicitly declared.
   bool hasUserDeclaredDestructor() const {
     return data().UserDeclaredSpecialMembers & SMF_Destructor;
   }
 
-  /// \brief Determine whether this class needs an implicit destructor to
+  /// Determine whether this class needs an implicit destructor to
   /// be lazily declared.
   bool needsImplicitDestructor() const {
     return !(data().DeclaredSpecialMembers & SMF_Destructor);
   }
 
-  /// \brief Determine whether we need to eagerly declare a destructor for this
+  /// Determine whether we need to eagerly declare a destructor for this
   /// class.
   bool needsOverloadResolutionForDestructor() const {
     return data().NeedOverloadResolutionForDestructor;
   }
 
-  /// \brief Determine whether this class describes a lambda function object.
+  /// Determine whether this class describes a lambda function object.
   bool isLambda() const {
     // An update record can't turn a non-lambda into a lambda.
     auto *DD = DefinitionData;
     return DD && DD->IsLambda;
   }
 
-  /// \brief Determine whether this class describes a generic 
+  /// Determine whether this class describes a generic
   /// lambda function object (i.e. function call operator is
-  /// a template). 
-  bool isGenericLambda() const; 
+  /// a template).
+  bool isGenericLambda() const;
 
-  /// \brief Retrieve the lambda call operator of the closure type
+  /// Retrieve the lambda call operator of the closure type
   /// if this is a closure type.
-  CXXMethodDecl *getLambdaCallOperator() const; 
+  CXXMethodDecl *getLambdaCallOperator() const;
 
-  /// \brief Retrieve the lambda static invoker, the address of which
+  /// Retrieve the lambda static invoker, the address of which
   /// is returned by the conversion operator, and the body of which
-  /// is forwarded to the lambda call operator. 
-  CXXMethodDecl *getLambdaStaticInvoker() const; 
+  /// is forwarded to the lambda call operator.
+  CXXMethodDecl *getLambdaStaticInvoker() const;
 
-  /// \brief Retrieve the generic lambda's template parameter list.
-  /// Returns null if the class does not represent a lambda or a generic 
+  /// Retrieve the generic lambda's template parameter list.
+  /// Returns null if the class does not represent a lambda or a generic
   /// lambda.
   TemplateParameterList *getGenericLambdaTemplateParameterList() const;
 
@@ -1184,7 +1237,7 @@
     return static_cast<LambdaCaptureDefault>(getLambdaData().CaptureDefault);
   }
 
-  /// \brief For a closure type, retrieve the mapping from captured
+  /// For a closure type, retrieve the mapping from captured
   /// variables and \c this to the non-static data members that store the
   /// values or references of the captures.
   ///
@@ -1230,7 +1283,7 @@
   /// this class must currently be in the process of being defined.
   void removeConversion(const NamedDecl *Old);
 
-  /// \brief Get all conversion functions visible in current class,
+  /// Get all conversion functions visible in current class,
   /// including conversion function templates.
   llvm::iterator_range<conversion_iterator> getVisibleConversionFunctions();
 
@@ -1240,12 +1293,12 @@
   /// functions (C++ [dcl.init.aggr]p1).
   bool isAggregate() const { return data().Aggregate; }
 
-  /// \brief Whether this class has any in-class initializers
+  /// Whether this class has any in-class initializers
   /// for non-static data members (including those in anonymous unions or
   /// structs).
   bool hasInClassInitializer() const { return data().HasInClassInitializer; }
 
-  /// \brief Whether this class or any of its subobjects has any members of
+  /// Whether this class or any of its subobjects has any members of
   /// reference type which would make value-initialization ill-formed.
   ///
   /// Per C++03 [dcl.init]p5:
@@ -1258,7 +1311,7 @@
            data().HasUninitializedReferenceMember;
   }
 
-  /// \brief Whether this class is a POD-type (C++ [class]p4)
+  /// Whether this class is a POD-type (C++ [class]p4)
   ///
   /// For purposes of this function a class is POD if it is an aggregate
   /// that has no non-static non-POD data members, no reference data
@@ -1268,11 +1321,11 @@
   /// Note that this is the C++ TR1 definition of POD.
   bool isPOD() const { return data().PlainOldData; }
 
-  /// \brief True if this class is C-like, without C++-specific features, e.g.
+  /// True if this class is C-like, without C++-specific features, e.g.
   /// it contains only public fields, no bases, tag kind is not 'class', etc.
   bool isCLike() const;
 
-  /// \brief Determine whether this is an empty class in the sense of
+  /// Determine whether this is an empty class in the sense of
   /// (C++11 [meta.unary.prop]).
   ///
   /// The CXXRecordDecl is a class type, but not a union type,
@@ -1283,7 +1336,7 @@
   /// \note This does NOT include a check for union-ness.
   bool isEmpty() const { return data().Empty; }
 
-  /// \brief Determine whether this class has direct non-static data members.
+  /// Determine whether this class has direct non-static data members.
   bool hasDirectFields() const {
     auto &D = data();
     return D.HasPublicFields || D.HasProtectedFields || D.HasPrivateFields;
@@ -1293,32 +1346,36 @@
   /// which means that the class contains or inherits a virtual function.
   bool isPolymorphic() const { return data().Polymorphic; }
 
-  /// \brief Determine whether this class has a pure virtual function.
+  /// Determine whether this class has a pure virtual function.
   ///
   /// The class is is abstract per (C++ [class.abstract]p2) if it declares
   /// a pure virtual function or inherits a pure virtual function that is
   /// not overridden.
   bool isAbstract() const { return data().Abstract; }
 
-  /// \brief Determine whether this class has standard layout per 
-  /// (C++ [class]p7)
+  /// Determine whether this class is standard-layout per
+  /// C++ [class]p7.
   bool isStandardLayout() const { return data().IsStandardLayout; }
 
-  /// \brief Determine whether this class, or any of its class subobjects,
+  /// Determine whether this class was standard-layout per
+  /// C++11 [class]p7, specifically using the C++11 rules without any DRs.
+  bool isCXX11StandardLayout() const { return data().IsCXX11StandardLayout; }
+
+  /// Determine whether this class, or any of its class subobjects,
   /// contains a mutable field.
   bool hasMutableFields() const { return data().HasMutableFields; }
 
-  /// \brief Determine whether this class has any variant members.
+  /// Determine whether this class has any variant members.
   bool hasVariantMembers() const { return data().HasVariantMembers; }
 
-  /// \brief Determine whether this class has a trivial default constructor
+  /// Determine whether this class has a trivial default constructor
   /// (C++11 [class.ctor]p5).
   bool hasTrivialDefaultConstructor() const {
     return hasDefaultConstructor() &&
            (data().HasTrivialSpecialMembers & SMF_DefaultConstructor);
   }
 
-  /// \brief Determine whether this class has a non-trivial default constructor
+  /// Determine whether this class has a non-trivial default constructor
   /// (C++11 [class.ctor]p5).
   bool hasNonTrivialDefaultConstructor() const {
     return (data().DeclaredNonTrivialSpecialMembers & SMF_DefaultConstructor) ||
@@ -1326,7 +1383,7 @@
             !(data().HasTrivialSpecialMembers & SMF_DefaultConstructor));
   }
 
-  /// \brief Determine whether this class has at least one constexpr constructor
+  /// Determine whether this class has at least one constexpr constructor
   /// other than the copy or move constructors.
   bool hasConstexprNonCopyMoveConstructor() const {
     return data().HasConstexprNonCopyMoveConstructor ||
@@ -1334,21 +1391,21 @@
             defaultedDefaultConstructorIsConstexpr());
   }
 
-  /// \brief Determine whether a defaulted default constructor for this class
+  /// Determine whether a defaulted default constructor for this class
   /// would be constexpr.
   bool defaultedDefaultConstructorIsConstexpr() const {
     return data().DefaultedDefaultConstructorIsConstexpr &&
            (!isUnion() || hasInClassInitializer() || !hasVariantMembers());
   }
 
-  /// \brief Determine whether this class has a constexpr default constructor.
+  /// Determine whether this class has a constexpr default constructor.
   bool hasConstexprDefaultConstructor() const {
     return data().HasConstexprDefaultConstructor ||
            (needsImplicitDefaultConstructor() &&
             defaultedDefaultConstructorIsConstexpr());
   }
 
-  /// \brief Determine whether this class has a trivial copy constructor
+  /// Determine whether this class has a trivial copy constructor
   /// (C++ [class.copy]p6, C++11 [class.copy]p12)
   bool hasTrivialCopyConstructor() const {
     return data().HasTrivialSpecialMembers & SMF_CopyConstructor;
@@ -1358,7 +1415,7 @@
     return data().HasTrivialSpecialMembersForCall & SMF_CopyConstructor;
   }
 
-  /// \brief Determine whether this class has a non-trivial copy constructor
+  /// Determine whether this class has a non-trivial copy constructor
   /// (C++ [class.copy]p6, C++11 [class.copy]p12)
   bool hasNonTrivialCopyConstructor() const {
     return data().DeclaredNonTrivialSpecialMembers & SMF_CopyConstructor ||
@@ -1371,7 +1428,7 @@
            !hasTrivialCopyConstructorForCall();
   }
 
-  /// \brief Determine whether this class has a trivial move constructor
+  /// Determine whether this class has a trivial move constructor
   /// (C++11 [class.copy]p12)
   bool hasTrivialMoveConstructor() const {
     return hasMoveConstructor() &&
@@ -1383,7 +1440,7 @@
            (data().HasTrivialSpecialMembersForCall & SMF_MoveConstructor);
   }
 
-  /// \brief Determine whether this class has a non-trivial move constructor
+  /// Determine whether this class has a non-trivial move constructor
   /// (C++11 [class.copy]p12)
   bool hasNonTrivialMoveConstructor() const {
     return (data().DeclaredNonTrivialSpecialMembers & SMF_MoveConstructor) ||
@@ -1398,27 +1455,27 @@
             !(data().HasTrivialSpecialMembersForCall & SMF_MoveConstructor));
   }
 
-  /// \brief Determine whether this class has a trivial copy assignment operator
+  /// Determine whether this class has a trivial copy assignment operator
   /// (C++ [class.copy]p11, C++11 [class.copy]p25)
   bool hasTrivialCopyAssignment() const {
     return data().HasTrivialSpecialMembers & SMF_CopyAssignment;
   }
 
-  /// \brief Determine whether this class has a non-trivial copy assignment
+  /// Determine whether this class has a non-trivial copy assignment
   /// operator (C++ [class.copy]p11, C++11 [class.copy]p25)
   bool hasNonTrivialCopyAssignment() const {
     return data().DeclaredNonTrivialSpecialMembers & SMF_CopyAssignment ||
            !hasTrivialCopyAssignment();
   }
 
-  /// \brief Determine whether this class has a trivial move assignment operator
+  /// Determine whether this class has a trivial move assignment operator
   /// (C++11 [class.copy]p25)
   bool hasTrivialMoveAssignment() const {
     return hasMoveAssignment() &&
            (data().HasTrivialSpecialMembers & SMF_MoveAssignment);
   }
 
-  /// \brief Determine whether this class has a non-trivial move assignment
+  /// Determine whether this class has a non-trivial move assignment
   /// operator (C++11 [class.copy]p25)
   bool hasNonTrivialMoveAssignment() const {
     return (data().DeclaredNonTrivialSpecialMembers & SMF_MoveAssignment) ||
@@ -1426,7 +1483,7 @@
             !(data().HasTrivialSpecialMembers & SMF_MoveAssignment));
   }
 
-  /// \brief Determine whether this class has a trivial destructor
+  /// Determine whether this class has a trivial destructor
   /// (C++ [class.dtor]p3)
   bool hasTrivialDestructor() const {
     return data().HasTrivialSpecialMembers & SMF_Destructor;
@@ -1436,7 +1493,7 @@
     return data().HasTrivialSpecialMembersForCall & SMF_Destructor;
   }
 
-  /// \brief Determine whether this class has a non-trivial destructor
+  /// Determine whether this class has a non-trivial destructor
   /// (C++ [class.dtor]p3)
   bool hasNonTrivialDestructor() const {
     return !(data().HasTrivialSpecialMembers & SMF_Destructor);
@@ -1451,7 +1508,7 @@
         (SMF_CopyConstructor | SMF_MoveConstructor | SMF_Destructor);
   }
 
-  /// \brief Determine whether declaring a const variable with this type is ok
+  /// Determine whether declaring a const variable with this type is ok
   /// per core issue 253.
   bool allowConstDefaultInit() const {
     return !data().HasUninitializedFields ||
@@ -1459,7 +1516,7 @@
              needsImplicitDefaultConstructor());
   }
 
-  /// \brief Determine whether this class has a destructor which has no
+  /// Determine whether this class has a destructor which has no
   /// semantic effect.
   ///
   /// Any such destructor will be trivial, public, defaulted and not deleted,
@@ -1468,29 +1525,29 @@
     return data().HasIrrelevantDestructor;
   }
 
-  /// \brief Determine whether this class has a non-literal or/ volatile type
+  /// Determine whether this class has a non-literal or/ volatile type
   /// non-static data member or base class.
   bool hasNonLiteralTypeFieldsOrBases() const {
     return data().HasNonLiteralTypeFieldsOrBases;
   }
 
-  /// \brief Determine whether this class has a using-declaration that names
+  /// Determine whether this class has a using-declaration that names
   /// a user-declared base class constructor.
   bool hasInheritedConstructor() const {
     return data().HasInheritedConstructor;
   }
 
-  /// \brief Determine whether this class has a using-declaration that names
+  /// Determine whether this class has a using-declaration that names
   /// a base class assignment operator.
   bool hasInheritedAssignment() const {
     return data().HasInheritedAssignment;
   }
 
-  /// \brief Determine whether this class is considered trivially copyable per
+  /// Determine whether this class is considered trivially copyable per
   /// (C++11 [class]p6).
   bool isTriviallyCopyable() const;
 
-  /// \brief Determine whether this class is considered trivial.
+  /// Determine whether this class is considered trivial.
   ///
   /// C++11 [class]p6:
   ///    "A trivial class is a class that has a trivial default constructor and
@@ -1499,7 +1556,7 @@
     return isTriviallyCopyable() && hasTrivialDefaultConstructor();
   }
 
-  /// \brief Determine whether this class is a literal type.
+  /// Determine whether this class is a literal type.
   ///
   /// C++11 [basic.types]p10:
   ///   A class type that has all the following properties:
@@ -1525,7 +1582,7 @@
             hasTrivialDefaultConstructor());
   }
 
-  /// \brief If this record is an instantiation of a member class,
+  /// If this record is an instantiation of a member class,
   /// retrieves the member class from which it was instantiated.
   ///
   /// This routine will return non-null for (non-templated) member
@@ -1546,17 +1603,17 @@
   /// declaration returned by getInstantiatedFromMemberClass().
   CXXRecordDecl *getInstantiatedFromMemberClass() const;
 
-  /// \brief If this class is an instantiation of a member class of a
+  /// If this class is an instantiation of a member class of a
   /// class template specialization, retrieves the member specialization
   /// information.
   MemberSpecializationInfo *getMemberSpecializationInfo() const;
 
-  /// \brief Specify that this record is an instantiation of the
+  /// Specify that this record is an instantiation of the
   /// member class \p RD.
   void setInstantiationOfMemberClass(CXXRecordDecl *RD,
                                      TemplateSpecializationKind TSK);
 
-  /// \brief Retrieves the class template that is described by this
+  /// Retrieves the class template that is described by this
   /// class declaration.
   ///
   /// Every class template is represented as a ClassTemplateDecl and a
@@ -1571,15 +1628,15 @@
 
   void setDescribedClassTemplate(ClassTemplateDecl *Template);
 
-  /// \brief Determine whether this particular class is a specialization or
+  /// Determine whether this particular class is a specialization or
   /// instantiation of a class template or member class of a class template,
   /// and how it was instantiated or specialized.
   TemplateSpecializationKind getTemplateSpecializationKind() const;
 
-  /// \brief Set the kind of specialization or template instantiation this is.
+  /// Set the kind of specialization or template instantiation this is.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK);
 
-  /// \brief Retrieve the record declaration from which this record could be
+  /// Retrieve the record declaration from which this record could be
   /// instantiated. Returns null if this class is not a template instantiation.
   const CXXRecordDecl *getTemplateInstantiationPattern() const;
 
@@ -1588,17 +1645,17 @@
                                            ->getTemplateInstantiationPattern());
   }
 
-  /// \brief Returns the destructor decl for this class.
+  /// Returns the destructor decl for this class.
   CXXDestructorDecl *getDestructor() const;
 
-  /// \brief Returns true if the class destructor, or any implicitly invoked
+  /// Returns true if the class destructor, or any implicitly invoked
   /// destructors are marked noreturn.
   bool isAnyDestructorNoReturn() const;
 
-  /// \brief If the class is a local class [class.local], returns
+  /// If the class is a local class [class.local], returns
   /// the enclosing function declaration.
   const FunctionDecl *isLocalClass() const {
-    if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(getDeclContext()))
+    if (const auto *RD = dyn_cast<CXXRecordDecl>(getDeclContext()))
       return RD->isLocalClass();
 
     return dyn_cast<FunctionDecl>(getDeclContext());
@@ -1609,11 +1666,11 @@
         const_cast<const CXXRecordDecl*>(this)->isLocalClass());
   }
 
-  /// \brief Determine whether this dependent class is a current instantiation,
+  /// Determine whether this dependent class is a current instantiation,
   /// when viewed from within the given context.
   bool isCurrentInstantiation(const DeclContext *CurContext) const;
 
-  /// \brief Determine whether this class is derived from the class \p Base.
+  /// Determine whether this class is derived from the class \p Base.
   ///
   /// This routine only determines whether this class is derived from \p Base,
   /// but does not account for factors that may make a Derived -> Base class
@@ -1625,7 +1682,7 @@
   /// \returns true if this class is derived from Base, false otherwise.
   bool isDerivedFrom(const CXXRecordDecl *Base) const;
 
-  /// \brief Determine whether this class is derived from the type \p Base.
+  /// Determine whether this class is derived from the type \p Base.
   ///
   /// This routine only determines whether this class is derived from \p Base,
   /// but does not account for factors that may make a Derived -> Base class
@@ -1643,7 +1700,7 @@
   /// tangling input and output in \p Paths
   bool isDerivedFrom(const CXXRecordDecl *Base, CXXBasePaths &Paths) const;
 
-  /// \brief Determine whether this class is virtually derived from
+  /// Determine whether this class is virtually derived from
   /// the class \p Base.
   ///
   /// This routine only determines whether this class is virtually
@@ -1658,11 +1715,11 @@
   /// false otherwise.
   bool isVirtuallyDerivedFrom(const CXXRecordDecl *Base) const;
 
-  /// \brief Determine whether this class is provably not derived from
+  /// Determine whether this class is provably not derived from
   /// the type \p Base.
   bool isProvablyNotDerivedFrom(const CXXRecordDecl *Base) const;
 
-  /// \brief Function type used by forallBases() as a callback.
+  /// Function type used by forallBases() as a callback.
   ///
   /// \param BaseDefinition the definition of the base class
   ///
@@ -1670,7 +1727,7 @@
   using ForallBasesCallback =
       llvm::function_ref<bool(const CXXRecordDecl *BaseDefinition)>;
 
-  /// \brief Determines if the given callback holds for all the direct
+  /// Determines if the given callback holds for all the direct
   /// or indirect base classes of this type.
   ///
   /// The class itself does not count as a base class.  This routine
@@ -1686,7 +1743,7 @@
   bool forallBases(ForallBasesCallback BaseMatches,
                    bool AllowShortCircuit = true) const;
 
-  /// \brief Function type used by lookupInBases() to determine whether a
+  /// Function type used by lookupInBases() to determine whether a
   /// specific base class subobject matches the lookup criteria.
   ///
   /// \param Specifier the base-class specifier that describes the inheritance
@@ -1700,7 +1757,7 @@
       llvm::function_ref<bool(const CXXBaseSpecifier *Specifier,
                               CXXBasePath &Path)>;
 
-  /// \brief Look for entities within the base classes of this C++ class,
+  /// Look for entities within the base classes of this C++ class,
   /// transitively searching all base class subobjects.
   ///
   /// This routine uses the callback function \p BaseMatches to find base
@@ -1724,7 +1781,7 @@
   bool lookupInBases(BaseMatchesCallback BaseMatches, CXXBasePaths &Paths,
                      bool LookupInDependent = false) const;
 
-  /// \brief Base-class lookup callback that determines whether the given
+  /// Base-class lookup callback that determines whether the given
   /// base class specifier refers to a specific class declaration.
   ///
   /// This callback can be used with \c lookupInBases() to determine whether
@@ -1734,7 +1791,7 @@
   static bool FindBaseClass(const CXXBaseSpecifier *Specifier,
                             CXXBasePath &Path, const CXXRecordDecl *BaseRecord);
 
-  /// \brief Base-class lookup callback that determines whether the
+  /// Base-class lookup callback that determines whether the
   /// given base class specifier refers to a specific class
   /// declaration and describes virtual derivation.
   ///
@@ -1747,7 +1804,7 @@
                                    CXXBasePath &Path,
                                    const CXXRecordDecl *BaseRecord);
 
-  /// \brief Base-class lookup callback that determines whether there exists
+  /// Base-class lookup callback that determines whether there exists
   /// a tag with the given name.
   ///
   /// This callback can be used with \c lookupInBases() to find tag members
@@ -1755,7 +1812,7 @@
   static bool FindTagMember(const CXXBaseSpecifier *Specifier,
                             CXXBasePath &Path, DeclarationName Name);
 
-  /// \brief Base-class lookup callback that determines whether there exists
+  /// Base-class lookup callback that determines whether there exists
   /// a member with the given name.
   ///
   /// This callback can be used with \c lookupInBases() to find members
@@ -1763,7 +1820,7 @@
   static bool FindOrdinaryMember(const CXXBaseSpecifier *Specifier,
                                  CXXBasePath &Path, DeclarationName Name);
 
-  /// \brief Base-class lookup callback that determines whether there exists
+  /// Base-class lookup callback that determines whether there exists
   /// a member with the given name.
   ///
   /// This callback can be used with \c lookupInBases() to find members
@@ -1773,7 +1830,7 @@
   FindOrdinaryMemberInDependentClasses(const CXXBaseSpecifier *Specifier,
                                        CXXBasePath &Path, DeclarationName Name);
 
-  /// \brief Base-class lookup callback that determines whether there exists
+  /// Base-class lookup callback that determines whether there exists
   /// an OpenMP declare reduction member with the given name.
   ///
   /// This callback can be used with \c lookupInBases() to find members
@@ -1781,7 +1838,7 @@
   static bool FindOMPReductionMember(const CXXBaseSpecifier *Specifier,
                                      CXXBasePath &Path, DeclarationName Name);
 
-  /// \brief Base-class lookup callback that determines whether there exists
+  /// Base-class lookup callback that determines whether there exists
   /// a member with the given name that can be used in a nested-name-specifier.
   ///
   /// This callback can be used with \c lookupInBases() to find members of
@@ -1791,12 +1848,12 @@
                                             CXXBasePath &Path,
                                             DeclarationName Name);
 
-  /// \brief Retrieve the final overriders for each virtual member
+  /// Retrieve the final overriders for each virtual member
   /// function in the class hierarchy where this class is the
   /// most-derived class in the class hierarchy.
   void getFinalOverriders(CXXFinalOverriderMap &FinaOverriders) const;
 
-  /// \brief Get the indirect primary bases for this class.
+  /// Get the indirect primary bases for this class.
   void getIndirectPrimaryBases(CXXIndirectPrimaryBaseSet& Bases) const;
 
   /// Performs an imprecise lookup of a dependent name in this class.
@@ -1812,7 +1869,7 @@
   /// GraphViz.
   void viewInheritance(ASTContext& Context) const;
 
-  /// \brief Calculates the access of a decl that is reached
+  /// Calculates the access of a decl that is reached
   /// along a path.
   static AccessSpecifier MergeAccess(AccessSpecifier PathAccess,
                                      AccessSpecifier DeclAccess) {
@@ -1821,16 +1878,16 @@
     return (PathAccess > DeclAccess ? PathAccess : DeclAccess);
   }
 
-  /// \brief Indicates that the declaration of a defaulted or deleted special
+  /// Indicates that the declaration of a defaulted or deleted special
   /// member function is now complete.
   void finishedDefaultedOrDeletedMember(CXXMethodDecl *MD);
 
   void setTrivialForCallFlags(CXXMethodDecl *MD);
 
-  /// \brief Indicates that the definition of this class is now complete.
+  /// Indicates that the definition of this class is now complete.
   void completeDefinition() override;
 
-  /// \brief Indicates that the definition of this class is now complete,
+  /// Indicates that the definition of this class is now complete,
   /// and provides a final overrider map to help determine
   ///
   /// \param FinalOverriders The final overrider map for this class, which can
@@ -1839,7 +1896,7 @@
   /// definition.
   void completeDefinition(CXXFinalOverriderMap *FinalOverriders);
 
-  /// \brief Determine whether this class may end up being abstract, even though
+  /// Determine whether this class may end up being abstract, even though
   /// it is not yet known to be abstract.
   ///
   /// \returns true if this class is not known to be abstract but has any
@@ -1848,39 +1905,39 @@
   /// actually abstract.
   bool mayBeAbstract() const;
 
-  /// \brief If this is the closure type of a lambda expression, retrieve the
+  /// If this is the closure type of a lambda expression, retrieve the
   /// number to be used for name mangling in the Itanium C++ ABI.
   ///
-  /// Zero indicates that this closure type has internal linkage, so the 
+  /// Zero indicates that this closure type has internal linkage, so the
   /// mangling number does not matter, while a non-zero value indicates which
   /// lambda expression this is in this particular context.
   unsigned getLambdaManglingNumber() const {
     assert(isLambda() && "Not a lambda closure type!");
     return getLambdaData().ManglingNumber;
   }
-  
-  /// \brief Retrieve the declaration that provides additional context for a 
+
+  /// Retrieve the declaration that provides additional context for a
   /// lambda, when the normal declaration context is not specific enough.
   ///
-  /// Certain contexts (default arguments of in-class function parameters and 
+  /// Certain contexts (default arguments of in-class function parameters and
   /// the initializers of data members) have separate name mangling rules for
   /// lambdas within the Itanium C++ ABI. For these cases, this routine provides
-  /// the declaration in which the lambda occurs, e.g., the function parameter 
+  /// the declaration in which the lambda occurs, e.g., the function parameter
   /// or the non-static data member. Otherwise, it returns NULL to imply that
   /// the declaration context suffices.
   Decl *getLambdaContextDecl() const;
-  
-  /// \brief Set the mangling number and context declaration for a lambda
+
+  /// Set the mangling number and context declaration for a lambda
   /// class.
   void setLambdaMangling(unsigned ManglingNumber, Decl *ContextDecl) {
     getLambdaData().ManglingNumber = ManglingNumber;
     getLambdaData().ContextDecl = ContextDecl;
   }
 
-  /// \brief Returns the inheritance model used for this record.
+  /// Returns the inheritance model used for this record.
   MSInheritanceAttr::Spelling getMSInheritanceModel() const;
 
-  /// \brief Calculate what the inheritance model would be for this class.
+  /// Calculate what the inheritance model would be for this class.
   MSInheritanceAttr::Spelling calculateInheritanceModel() const;
 
   /// In the Microsoft C++ ABI, use zero for the field offset of a null data
@@ -1895,11 +1952,11 @@
            (hasDefinition() && isPolymorphic());
   }
 
-  /// \brief Controls when vtordisps will be emitted if this record is used as a
+  /// Controls when vtordisps will be emitted if this record is used as a
   /// virtual base.
   MSVtorDispAttr::Mode getMSVtorDispMode() const;
 
-  /// \brief Determine whether this lambda expression was known to be dependent
+  /// Determine whether this lambda expression was known to be dependent
   /// at the time it was created, even if its context does not appear to be
   /// dependent.
   ///
@@ -1918,8 +1975,8 @@
     return getLambdaData().MethodTyInfo;
   }
 
-  // \brief Determine whether this type is an Interface Like type for
-  // __interface inheritence purposes.
+  // Determine whether this type is an Interface Like type for
+  // __interface inheritance purposes.
   bool isInterfaceLike() const;
 
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
@@ -1928,7 +1985,7 @@
   }
 };
 
-/// \brief Represents a C++ deduction guide declaration.
+/// Represents a C++ deduction guide declaration.
 ///
 /// \code
 /// template<typename T> struct A { A(); A(T); };
@@ -1950,7 +2007,8 @@
                      SC_None, false, false) {
     if (EndLocation.isValid())
       setRangeEnd(EndLocation);
-    IsExplicitSpecified = IsExplicit;
+    setExplicitSpecified(IsExplicit);
+    setIsCopyDeductionCandidate(false);
   }
 
 public:
@@ -1966,28 +2024,27 @@
   static CXXDeductionGuideDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
   /// Whether this deduction guide is explicit.
-  bool isExplicit() const { return IsExplicitSpecified; }
-
-  /// Whether this deduction guide was declared with the 'explicit' specifier.
-  bool isExplicitSpecified() const { return IsExplicitSpecified; }
+  bool isExplicit() const { return isExplicitSpecified(); }
 
   /// Get the template for which this guide performs deduction.
   TemplateDecl *getDeducedTemplate() const {
     return getDeclName().getCXXDeductionGuideTemplate();
   }
 
-  void setIsCopyDeductionCandidate() {
-    IsCopyDeductionCandidate = true;
+  void setIsCopyDeductionCandidate(bool isCDC = true) {
+    FunctionDeclBits.IsCopyDeductionCandidate = isCDC;
   }
 
-  bool isCopyDeductionCandidate() const { return IsCopyDeductionCandidate; }
+  bool isCopyDeductionCandidate() const {
+    return FunctionDeclBits.IsCopyDeductionCandidate;
+  }
 
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) { return K == CXXDeductionGuide; }
 };
 
-/// \brief Represents a static or instance method of a struct/union/class.
+/// Represents a static or instance method of a struct/union/class.
 ///
 /// In the terminology of the C++ Standard, these are the (static and
 /// non-static) member functions, whether virtual or not.
@@ -2060,16 +2117,16 @@
         Base, IsAppleKext);
   }
 
-  /// \brief Determine whether this is a usual deallocation function
+  /// Determine whether this is a usual deallocation function
   /// (C++ [basic.stc.dynamic.deallocation]p2), which is an overloaded
   /// delete or delete[] operator with a particular signature.
   bool isUsualDeallocationFunction() const;
 
-  /// \brief Determine whether this is a copy-assignment operator, regardless
+  /// Determine whether this is a copy-assignment operator, regardless
   /// of whether it was declared implicitly or explicitly.
   bool isCopyAssignmentOperator() const;
 
-  /// \brief Determine whether this is a move assignment operator.
+  /// Determine whether this is a move assignment operator.
   bool isMoveAssignmentOperator() const;
 
   CXXMethodDecl *getCanonicalDecl() override {
@@ -2122,7 +2179,7 @@
              cast<CXXRecordDecl>(FunctionDecl::getParent()));
   }
 
-  /// \brief Returns the type of the \c this pointer.
+  /// Returns the type of the \c this pointer.
   ///
   /// Should only be called for instance (i.e., non-static) methods. Note
   /// that for the call operator of a lambda closure type, this returns the
@@ -2134,7 +2191,7 @@
     return getType()->getAs<FunctionProtoType>()->getTypeQuals();
   }
 
-  /// \brief Retrieve the ref-qualifier associated with this method.
+  /// Retrieve the ref-qualifier associated with this method.
   ///
   /// In the following example, \c f() has an lvalue ref-qualifier, \c g()
   /// has an rvalue ref-qualifier, and \c h() has no ref-qualifier.
@@ -2151,7 +2208,7 @@
 
   bool hasInlineBody() const;
 
-  /// \brief Determine whether this is a lambda closure type's static member
+  /// Determine whether this is a lambda closure type's static member
   /// function that is used for the result of the lambda's conversion to
   /// function pointer (for a lambda with no captures).
   ///
@@ -2160,7 +2217,7 @@
   /// or clone the function call operator.
   bool isLambdaStaticInvoker() const;
 
-  /// \brief Find the method in \p RD that corresponds to this one.
+  /// Find the method in \p RD that corresponds to this one.
   ///
   /// Find if \p RD or one of the classes it inherits from override this method.
   /// If so, return it. \p RD is assumed to be a subclass of the class defining
@@ -2183,7 +2240,7 @@
   }
 };
 
-/// \brief Represents a C++ base or member initializer.
+/// Represents a C++ base or member initializer.
 ///
 /// This is part of a constructor initializer that
 /// initializes one non-static member variable or one base class. For
@@ -2199,13 +2256,13 @@
 /// };
 /// \endcode
 class CXXCtorInitializer final {
-  /// \brief Either the base class name/delegating constructor type (stored as
+  /// Either the base class name/delegating constructor type (stored as
   /// a TypeSourceInfo*), an normal field (FieldDecl), or an anonymous field
   /// (IndirectFieldDecl*) being initialized.
   llvm::PointerUnion3<TypeSourceInfo *, FieldDecl *, IndirectFieldDecl *>
     Initializee;
 
-  /// \brief The source location for the field name or, for a base initializer
+  /// The source location for the field name or, for a base initializer
   /// pack expansion, the location of the ellipsis.
   ///
   /// In the case of a delegating
@@ -2213,25 +2270,25 @@
   /// Initializee points to the CXXConstructorDecl (to allow loop detection).
   SourceLocation MemberOrEllipsisLocation;
 
-  /// \brief The argument used to initialize the base or member, which may
+  /// The argument used to initialize the base or member, which may
   /// end up constructing an object (when multiple arguments are involved).
   Stmt *Init;
 
-  /// \brief Location of the left paren of the ctor-initializer.
+  /// Location of the left paren of the ctor-initializer.
   SourceLocation LParenLoc;
 
-  /// \brief Location of the right paren of the ctor-initializer.
+  /// Location of the right paren of the ctor-initializer.
   SourceLocation RParenLoc;
 
-  /// \brief If the initializee is a type, whether that type makes this
+  /// If the initializee is a type, whether that type makes this
   /// a delegating initialization.
   unsigned IsDelegating : 1;
 
-  /// \brief If the initializer is a base initializer, this keeps track
+  /// If the initializer is a base initializer, this keeps track
   /// of whether the base is virtual or not.
   unsigned IsVirtual : 1;
 
-  /// \brief Whether or not the initializer is explicitly written
+  /// Whether or not the initializer is explicitly written
   /// in the sources.
   unsigned IsWritten : 1;
 
@@ -2240,35 +2297,35 @@
   unsigned SourceOrder : 13;
 
 public:
-  /// \brief Creates a new base-class initializer.
+  /// Creates a new base-class initializer.
   explicit
   CXXCtorInitializer(ASTContext &Context, TypeSourceInfo *TInfo, bool IsVirtual,
                      SourceLocation L, Expr *Init, SourceLocation R,
                      SourceLocation EllipsisLoc);
 
-  /// \brief Creates a new member initializer.
+  /// Creates a new member initializer.
   explicit
   CXXCtorInitializer(ASTContext &Context, FieldDecl *Member,
                      SourceLocation MemberLoc, SourceLocation L, Expr *Init,
                      SourceLocation R);
 
-  /// \brief Creates a new anonymous field initializer.
+  /// Creates a new anonymous field initializer.
   explicit
   CXXCtorInitializer(ASTContext &Context, IndirectFieldDecl *Member,
                      SourceLocation MemberLoc, SourceLocation L, Expr *Init,
                      SourceLocation R);
 
-  /// \brief Creates a new delegating initializer.
+  /// Creates a new delegating initializer.
   explicit
   CXXCtorInitializer(ASTContext &Context, TypeSourceInfo *TInfo,
                      SourceLocation L, Expr *Init, SourceLocation R);
 
-  /// \brief Determine whether this initializer is initializing a base class.
+  /// Determine whether this initializer is initializing a base class.
   bool isBaseInitializer() const {
     return Initializee.is<TypeSourceInfo*>() && !IsDelegating;
   }
 
-  /// \brief Determine whether this initializer is initializing a non-static
+  /// Determine whether this initializer is initializing a non-static
   /// data member.
   bool isMemberInitializer() const { return Initializee.is<FieldDecl*>(); }
 
@@ -2280,7 +2337,7 @@
     return Initializee.is<IndirectFieldDecl*>();
   }
 
-  /// \brief Determine whether this initializer is an implicit initializer
+  /// Determine whether this initializer is an implicit initializer
   /// generated for a field with an initializer defined on the member
   /// declaration.
   ///
@@ -2290,18 +2347,18 @@
     return Init->getStmtClass() == Stmt::CXXDefaultInitExprClass;
   }
 
-  /// \brief Determine whether this initializer is creating a delegating
+  /// Determine whether this initializer is creating a delegating
   /// constructor.
   bool isDelegatingInitializer() const {
     return Initializee.is<TypeSourceInfo*>() && IsDelegating;
   }
 
-  /// \brief Determine whether this initializer is a pack expansion.
+  /// Determine whether this initializer is a pack expansion.
   bool isPackExpansion() const {
     return isBaseInitializer() && MemberOrEllipsisLocation.isValid();
   }
 
-  // \brief For a pack expansion, returns the location of the ellipsis.
+  // For a pack expansion, returns the location of the ellipsis.
   SourceLocation getEllipsisLoc() const {
     assert(isPackExpansion() && "Initializer is not a pack expansion");
     return MemberOrEllipsisLocation;
@@ -2323,13 +2380,13 @@
     return IsVirtual;
   }
 
-  /// \brief Returns the declarator information for a base class or delegating
+  /// Returns the declarator information for a base class or delegating
   /// initializer.
   TypeSourceInfo *getTypeSourceInfo() const {
     return Initializee.dyn_cast<TypeSourceInfo *>();
   }
 
-  /// \brief If this is a member initializer, returns the declaration of the
+  /// If this is a member initializer, returns the declaration of the
   /// non-static data member being initialized. Otherwise, returns null.
   FieldDecl *getMember() const {
     if (isMemberInitializer())
@@ -2355,23 +2412,23 @@
     return MemberOrEllipsisLocation;
   }
 
-  /// \brief Determine the source location of the initializer.
+  /// Determine the source location of the initializer.
   SourceLocation getSourceLocation() const;
 
-  /// \brief Determine the source range covering the entire initializer.
+  /// Determine the source range covering the entire initializer.
   SourceRange getSourceRange() const LLVM_READONLY;
 
-  /// \brief Determine whether this initializer is explicitly written
+  /// Determine whether this initializer is explicitly written
   /// in the source code.
   bool isWritten() const { return IsWritten; }
 
-  /// \brief Return the source position of the initializer, counting from 0.
+  /// Return the source position of the initializer, counting from 0.
   /// If the initializer was implicit, -1 is returned.
   int getSourceOrder() const {
     return IsWritten ? static_cast<int>(SourceOrder) : -1;
   }
 
-  /// \brief Set the source order of this initializer.
+  /// Set the source order of this initializer.
   ///
   /// This can only be called once for each initializer; it cannot be called
   /// on an initializer having a positive number of (implicit) array indices.
@@ -2392,8 +2449,8 @@
   SourceLocation getLParenLoc() const { return LParenLoc; }
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  /// \brief Get the initializer.
-  Expr *getInit() const { return static_cast<Expr*>(Init); }
+  /// Get the initializer.
+  Expr *getInit() const { return static_cast<Expr *>(Init); }
 };
 
 /// Description of a constructor that was inherited from a base class.
@@ -2413,7 +2470,7 @@
   CXXConstructorDecl *getConstructor() const { return BaseCtor; }
 };
 
-/// \brief Represents a C++ constructor within a class.
+/// Represents a C++ constructor within a class.
 ///
 /// For example:
 ///
@@ -2426,31 +2483,20 @@
 class CXXConstructorDecl final
     : public CXXMethodDecl,
       private llvm::TrailingObjects<CXXConstructorDecl, InheritedConstructor> {
+  // This class stores some data in DeclContext::CXXConstructorDeclBits
+  // to save some space. Use the provided accessors to access it.
+
   /// \name Support for base and member initializers.
   /// \{
-  /// \brief The arguments used to initialize the base or member.
+  /// The arguments used to initialize the base or member.
   LazyCXXCtorInitializersPtr CtorInitializers;
-  unsigned NumCtorInitializers : 31;
-  /// \}
-
-  /// \brief Whether this constructor declaration is an implicitly-declared
-  /// inheriting constructor.
-  unsigned IsInheritingConstructor : 1;
 
   CXXConstructorDecl(ASTContext &C, CXXRecordDecl *RD, SourceLocation StartLoc,
                      const DeclarationNameInfo &NameInfo,
                      QualType T, TypeSourceInfo *TInfo,
                      bool isExplicitSpecified, bool isInline,
                      bool isImplicitlyDeclared, bool isConstexpr,
-                     InheritedConstructor Inherited)
-    : CXXMethodDecl(CXXConstructor, C, RD, StartLoc, NameInfo, T, TInfo,
-                    SC_None, isInline, isConstexpr, SourceLocation()),
-      NumCtorInitializers(0), IsInheritingConstructor((bool)Inherited) {
-    setImplicit(isImplicitlyDeclared);
-    if (Inherited)
-      *getTrailingObjects<InheritedConstructor>() = Inherited;
-    IsExplicitSpecified = isExplicitSpecified;
-  }
+                     InheritedConstructor Inherited);
 
   void anchor() override;
 
@@ -2468,10 +2514,10 @@
          bool isConstexpr,
          InheritedConstructor Inherited = InheritedConstructor());
 
-  /// \brief Iterates through the member/base initializer list.
+  /// Iterates through the member/base initializer list.
   using init_iterator = CXXCtorInitializer **;
 
-  /// \brief Iterates through the member/base initializer list.
+  /// Iterates through the member/base initializer list.
   using init_const_iterator = CXXCtorInitializer *const *;
 
   using init_range = llvm::iterator_range<init_iterator>;
@@ -2482,23 +2528,23 @@
     return init_const_range(init_begin(), init_end());
   }
 
-  /// \brief Retrieve an iterator to the first initializer.
+  /// Retrieve an iterator to the first initializer.
   init_iterator init_begin() {
     const auto *ConstThis = this;
     return const_cast<init_iterator>(ConstThis->init_begin());
   }
 
-  /// \brief Retrieve an iterator to the first initializer.
+  /// Retrieve an iterator to the first initializer.
   init_const_iterator init_begin() const;
 
-  /// \brief Retrieve an iterator past the last initializer.
+  /// Retrieve an iterator past the last initializer.
   init_iterator       init_end()       {
-    return init_begin() + NumCtorInitializers;
+    return init_begin() + getNumCtorInitializers();
   }
 
-  /// \brief Retrieve an iterator past the last initializer.
+  /// Retrieve an iterator past the last initializer.
   init_const_iterator init_end() const {
-    return init_begin() + NumCtorInitializers;
+    return init_begin() + getNumCtorInitializers();
   }
 
   using init_reverse_iterator = std::reverse_iterator<init_iterator>;
@@ -2519,35 +2565,37 @@
     return init_const_reverse_iterator(init_begin());
   }
 
-  /// \brief Determine the number of arguments used to initialize the member
+  /// Determine the number of arguments used to initialize the member
   /// or base.
   unsigned getNumCtorInitializers() const {
-      return NumCtorInitializers;
+      return CXXConstructorDeclBits.NumCtorInitializers;
   }
 
   void setNumCtorInitializers(unsigned numCtorInitializers) {
-    NumCtorInitializers = numCtorInitializers;
+    CXXConstructorDeclBits.NumCtorInitializers = numCtorInitializers;
+    // This assert added because NumCtorInitializers is stored
+    // in CXXConstructorDeclBits as a bitfield and its width has
+    // been shrunk from 32 bits to fit into CXXConstructorDeclBitfields.
+    assert(CXXConstructorDeclBits.NumCtorInitializers ==
+           numCtorInitializers && "NumCtorInitializers overflow!");
   }
 
   void setCtorInitializers(CXXCtorInitializer **Initializers) {
     CtorInitializers = Initializers;
   }
 
-  /// Whether this function is marked as explicit explicitly.
-  bool isExplicitSpecified() const { return IsExplicitSpecified; }
-
   /// Whether this function is explicit.
   bool isExplicit() const {
     return getCanonicalDecl()->isExplicitSpecified();
   }
 
-  /// \brief Determine whether this constructor is a delegating constructor.
+  /// Determine whether this constructor is a delegating constructor.
   bool isDelegatingConstructor() const {
     return (getNumCtorInitializers() == 1) &&
            init_begin()[0]->isDelegatingInitializer();
   }
 
-  /// \brief When this constructor delegates to another, retrieve the target.
+  /// When this constructor delegates to another, retrieve the target.
   CXXConstructorDecl *getTargetConstructor() const;
 
   /// Whether this constructor is a default
@@ -2555,7 +2603,7 @@
   /// default-initialize a class of this type.
   bool isDefaultConstructor() const;
 
-  /// \brief Whether this constructor is a copy constructor (C++ [class.copy]p2,
+  /// Whether this constructor is a copy constructor (C++ [class.copy]p2,
   /// which can be used to copy the class.
   ///
   /// \p TypeQuals will be set to the qualifiers on the
@@ -2578,27 +2626,27 @@
     return isCopyConstructor(TypeQuals);
   }
 
-  /// \brief Determine whether this constructor is a move constructor
+  /// Determine whether this constructor is a move constructor
   /// (C++11 [class.copy]p3), which can be used to move values of the class.
   ///
   /// \param TypeQuals If this constructor is a move constructor, will be set
   /// to the type qualifiers on the referent of the first parameter's type.
   bool isMoveConstructor(unsigned &TypeQuals) const;
 
-  /// \brief Determine whether this constructor is a move constructor
+  /// Determine whether this constructor is a move constructor
   /// (C++11 [class.copy]p3), which can be used to move values of the class.
   bool isMoveConstructor() const {
     unsigned TypeQuals = 0;
     return isMoveConstructor(TypeQuals);
   }
 
-  /// \brief Determine whether this is a copy or move constructor.
+  /// Determine whether this is a copy or move constructor.
   ///
   /// \param TypeQuals Will be set to the type qualifiers on the reference
   /// parameter, if in fact this is a copy or move constructor.
   bool isCopyOrMoveConstructor(unsigned &TypeQuals) const;
 
-  /// \brief Determine whether this a copy or move constructor.
+  /// Determine whether this a copy or move constructor.
   bool isCopyOrMoveConstructor() const {
     unsigned Quals;
     return isCopyOrMoveConstructor(Quals);
@@ -2609,19 +2657,27 @@
   /// used for user-defined conversions.
   bool isConvertingConstructor(bool AllowExplicit) const;
 
-  /// \brief Determine whether this is a member template specialization that
+  /// Determine whether this is a member template specialization that
   /// would copy the object to itself. Such constructors are never used to copy
   /// an object.
   bool isSpecializationCopyingObject() const;
 
-  /// \brief Determine whether this is an implicit constructor synthesized to
+  /// Determine whether this is an implicit constructor synthesized to
   /// model a call to a constructor inherited from a base class.
-  bool isInheritingConstructor() const { return IsInheritingConstructor; }
+  bool isInheritingConstructor() const {
+    return CXXConstructorDeclBits.IsInheritingConstructor;
+  }
 
-  /// \brief Get the constructor that this inheriting constructor is based on.
+  /// State that this is an implicit constructor synthesized to
+  /// model a call to a constructor inherited from a base class.
+  void setInheritingConstructor(bool isIC = true) {
+    CXXConstructorDeclBits.IsInheritingConstructor = isIC;
+  }
+
+  /// Get the constructor that this inheriting constructor is based on.
   InheritedConstructor getInheritedConstructor() const {
-    return IsInheritingConstructor ? *getTrailingObjects<InheritedConstructor>()
-                                   : InheritedConstructor();
+    return isInheritingConstructor() ?
+      *getTrailingObjects<InheritedConstructor>() : InheritedConstructor();
   }
 
   CXXConstructorDecl *getCanonicalDecl() override {
@@ -2636,7 +2692,7 @@
   static bool classofKind(Kind K) { return K == CXXConstructor; }
 };
 
-/// \brief Represents a C++ destructor within a class.
+/// Represents a C++ destructor within a class.
 ///
 /// For example:
 ///
@@ -2698,7 +2754,7 @@
   static bool classofKind(Kind K) { return K == CXXDestructor; }
 };
 
-/// \brief Represents a C++ conversion function within a class.
+/// Represents a C++ conversion function within a class.
 ///
 /// For example:
 ///
@@ -2716,7 +2772,7 @@
                     SourceLocation EndLocation)
       : CXXMethodDecl(CXXConversion, C, RD, StartLoc, NameInfo, T, TInfo,
                       SC_None, isInline, isConstexpr, EndLocation) {
-    IsExplicitSpecified = isExplicitSpecified;
+    setExplicitSpecified(isExplicitSpecified);
   }
 
   void anchor() override;
@@ -2734,23 +2790,20 @@
                                    SourceLocation EndLocation);
   static CXXConversionDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
-  /// Whether this function is marked as explicit explicitly.
-  bool isExplicitSpecified() const { return IsExplicitSpecified; }
-
   /// Whether this function is explicit.
   bool isExplicit() const {
     return getCanonicalDecl()->isExplicitSpecified();
   }
 
-  /// \brief Returns the type that this conversion function is converting to.
+  /// Returns the type that this conversion function is converting to.
   QualType getConversionType() const {
     return getType()->getAs<FunctionType>()->getReturnType();
   }
 
-  /// \brief Determine whether this conversion function is a conversion from
+  /// Determine whether this conversion function is a conversion from
   /// a lambda closure type to a block pointer.
   bool isLambdaToBlockPointerConversion() const;
-  
+
   CXXConversionDecl *getCanonicalDecl() override {
     return cast<CXXConversionDecl>(FunctionDecl::getCanonicalDecl());
   }
@@ -2763,7 +2816,7 @@
   static bool classofKind(Kind K) { return K == CXXConversion; }
 };
 
-/// \brief Represents a linkage specification. 
+/// Represents a linkage specification.
 ///
 /// For example:
 /// \code
@@ -2771,9 +2824,10 @@
 /// \endcode
 class LinkageSpecDecl : public Decl, public DeclContext {
   virtual void anchor();
-
+  // This class stores some data in DeclContext::LinkageSpecDeclBits to save
+  // some space. Use the provided accessors to access it.
 public:
-  /// \brief Represents the language in a linkage specification.
+  /// Represents the language in a linkage specification.
   ///
   /// The values are part of the serialization ABI for
   /// ASTs and cannot be changed without altering that ABI.  To help
@@ -2785,27 +2839,14 @@
   };
 
 private:
-  /// \brief The language for this linkage specification.
-  unsigned Language : 3;
-
-  /// \brief True if this linkage spec has braces.
-  ///
-  /// This is needed so that hasBraces() returns the correct result while the
-  /// linkage spec body is being parsed.  Once RBraceLoc has been set this is
-  /// not used, so it doesn't need to be serialized.
-  unsigned HasBraces : 1;
-
-  /// \brief The source location for the extern keyword.
+  /// The source location for the extern keyword.
   SourceLocation ExternLoc;
 
-  /// \brief The source location for the right brace (if valid).
+  /// The source location for the right brace (if valid).
   SourceLocation RBraceLoc;
 
   LinkageSpecDecl(DeclContext *DC, SourceLocation ExternLoc,
-                  SourceLocation LangLoc, LanguageIDs lang, bool HasBraces)
-      : Decl(LinkageSpec, DC, LangLoc), DeclContext(LinkageSpec),
-        Language(lang), HasBraces(HasBraces), ExternLoc(ExternLoc),
-        RBraceLoc(SourceLocation()) {}
+                  SourceLocation LangLoc, LanguageIDs lang, bool HasBraces);
 
 public:
   static LinkageSpecDecl *Create(ASTContext &C, DeclContext *DC,
@@ -2813,18 +2854,20 @@
                                  SourceLocation LangLoc, LanguageIDs Lang,
                                  bool HasBraces);
   static LinkageSpecDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
-  /// \brief Return the language specified by this linkage specification.
-  LanguageIDs getLanguage() const { return LanguageIDs(Language); }
 
-  /// \brief Set the language specified by this linkage specification.
-  void setLanguage(LanguageIDs L) { Language = L; }
+  /// Return the language specified by this linkage specification.
+  LanguageIDs getLanguage() const {
+    return static_cast<LanguageIDs>(LinkageSpecDeclBits.Language);
+  }
 
-  /// \brief Determines whether this linkage specification had braces in
+  /// Set the language specified by this linkage specification.
+  void setLanguage(LanguageIDs L) { LinkageSpecDeclBits.Language = L; }
+
+  /// Determines whether this linkage specification had braces in
   /// its syntactic form.
   bool hasBraces() const {
-    assert(!RBraceLoc.isValid() || HasBraces);
-    return HasBraces;
+    assert(!RBraceLoc.isValid() || LinkageSpecDeclBits.HasBraces);
+    return LinkageSpecDeclBits.HasBraces;
   }
 
   SourceLocation getExternLoc() const { return ExternLoc; }
@@ -2832,19 +2875,23 @@
   void setExternLoc(SourceLocation L) { ExternLoc = L; }
   void setRBraceLoc(SourceLocation L) {
     RBraceLoc = L;
-    HasBraces = RBraceLoc.isValid();
+    LinkageSpecDeclBits.HasBraces = RBraceLoc.isValid();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (hasBraces())
       return getRBraceLoc();
     // No braces: get the end location of the (only) declaration in context
     // (if present).
-    return decls_empty() ? getLocation() : decls_begin()->getLocEnd();
+    return decls_empty() ? getLocation() : decls_begin()->getEndLoc();
   }
 
   SourceRange getSourceRange() const override LLVM_READONLY {
-    return SourceRange(ExternLoc, getLocEnd());
+    return SourceRange(ExternLoc, getEndLoc());
   }
 
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
@@ -2859,7 +2906,7 @@
   }
 };
 
-/// \brief Represents C++ using-directive.
+/// Represents C++ using-directive.
 ///
 /// For example:
 /// \code
@@ -2870,16 +2917,16 @@
 /// artificial names for all using-directives in order to store
 /// them in DeclContext effectively.
 class UsingDirectiveDecl : public NamedDecl {
-  /// \brief The location of the \c using keyword.
+  /// The location of the \c using keyword.
   SourceLocation UsingLoc;
 
-  /// \brief The location of the \c namespace keyword.
+  /// The location of the \c namespace keyword.
   SourceLocation NamespaceLoc;
 
-  /// \brief The nested-name-specifier that precedes the namespace.
+  /// The nested-name-specifier that precedes the namespace.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief The namespace nominated by this using-directive.
+  /// The namespace nominated by this using-directive.
   NamedDecl *NominatedNamespace;
 
   /// Enclosing context containing both using-directive and nominated
@@ -2896,7 +2943,7 @@
         NamespaceLoc(NamespcLoc), QualifierLoc(QualifierLoc),
         NominatedNamespace(Nominated), CommonAncestor(CommonAncestor) {}
 
-  /// \brief Returns special DeclarationName used by using-directives.
+  /// Returns special DeclarationName used by using-directives.
   ///
   /// This is only used by DeclContext for storing UsingDirectiveDecls in
   /// its lookup structure.
@@ -2912,11 +2959,11 @@
   // Friend for getUsingDirectiveName.
   friend class DeclContext;
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the
+  /// Retrieve the nested-name-specifier that qualifies the
   /// name of the namespace, with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the
+  /// Retrieve the nested-name-specifier that qualifies the
   /// name of the namespace.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
@@ -2927,26 +2974,26 @@
     return NominatedNamespace;
   }
 
-  /// \brief Returns the namespace nominated by this using-directive.
+  /// Returns the namespace nominated by this using-directive.
   NamespaceDecl *getNominatedNamespace();
 
   const NamespaceDecl *getNominatedNamespace() const {
     return const_cast<UsingDirectiveDecl*>(this)->getNominatedNamespace();
   }
 
-  /// \brief Returns the common ancestor context of this using-directive and
+  /// Returns the common ancestor context of this using-directive and
   /// its nominated namespace.
   DeclContext *getCommonAncestor() { return CommonAncestor; }
   const DeclContext *getCommonAncestor() const { return CommonAncestor; }
 
-  /// \brief Return the location of the \c using keyword.
+  /// Return the location of the \c using keyword.
   SourceLocation getUsingLoc() const { return UsingLoc; }
 
   // FIXME: Could omit 'Key' in name.
-  /// \brief Returns the location of the \c namespace keyword.
+  /// Returns the location of the \c namespace keyword.
   SourceLocation getNamespaceKeyLocation() const { return NamespaceLoc; }
 
-  /// \brief Returns the location of this using declaration's identifier.
+  /// Returns the location of this using declaration's identifier.
   SourceLocation getIdentLocation() const { return getLocation(); }
 
   static UsingDirectiveDecl *Create(ASTContext &C, DeclContext *DC,
@@ -2966,7 +3013,7 @@
   static bool classofKind(Kind K) { return K == UsingDirective; }
 };
 
-/// \brief Represents a C++ namespace alias.
+/// Represents a C++ namespace alias.
 ///
 /// For example:
 ///
@@ -2977,18 +3024,18 @@
                            public Redeclarable<NamespaceAliasDecl> {
   friend class ASTDeclReader;
 
-  /// \brief The location of the \c namespace keyword.
+  /// The location of the \c namespace keyword.
   SourceLocation NamespaceLoc;
 
-  /// \brief The location of the namespace's identifier.
+  /// The location of the namespace's identifier.
   ///
   /// This is accessed by TargetNameLoc.
   SourceLocation IdentLoc;
 
-  /// \brief The nested-name-specifier that precedes the namespace.
+  /// The nested-name-specifier that precedes the namespace.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief The Decl that this alias points to, either a NamespaceDecl or
+  /// The Decl that this alias points to, either a NamespaceDecl or
   /// a NamespaceAliasDecl.
   NamedDecl *Namespace;
 
@@ -3035,26 +3082,26 @@
     return getFirstDecl();
   }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the
+  /// Retrieve the nested-name-specifier that qualifies the
   /// name of the namespace, with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the
+  /// Retrieve the nested-name-specifier that qualifies the
   /// name of the namespace.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
 
-  /// \brief Retrieve the namespace declaration aliased by this directive.
+  /// Retrieve the namespace declaration aliased by this directive.
   NamespaceDecl *getNamespace() {
-    if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(Namespace))
+    if (auto *AD = dyn_cast<NamespaceAliasDecl>(Namespace))
       return AD->getNamespace();
 
     return cast<NamespaceDecl>(Namespace);
   }
 
   const NamespaceDecl *getNamespace() const {
-    return const_cast<NamespaceAliasDecl*>(this)->getNamespace();
+    return const_cast<NamespaceAliasDecl *>(this)->getNamespace();
   }
 
   /// Returns the location of the alias name, i.e. 'foo' in
@@ -3067,7 +3114,7 @@
   /// Returns the location of the identifier in the named namespace.
   SourceLocation getTargetNameLoc() const { return IdentLoc; }
 
-  /// \brief Retrieve the namespace that this alias refers to, which
+  /// Retrieve the namespace that this alias refers to, which
   /// may either be a NamespaceDecl or a NamespaceAliasDecl.
   NamedDecl *getAliasedNamespace() const { return Namespace; }
 
@@ -3079,7 +3126,7 @@
   static bool classofKind(Kind K) { return K == NamespaceAlias; }
 };
 
-/// \brief Represents a shadow declaration introduced into a scope by a
+/// Represents a shadow declaration introduced into a scope by a
 /// (resolved) using declaration.
 ///
 /// For example,
@@ -3098,7 +3145,7 @@
   /// The referenced declaration.
   NamedDecl *Underlying = nullptr;
 
-  /// \brief The using declaration which introduced this decl or the next using
+  /// The using declaration which introduced this decl or the next using
   /// shadow declaration contained in the aforementioned using declaration.
   NamedDecl *UsingOrNextShadow = nullptr;
 
@@ -3152,11 +3199,11 @@
     return getFirstDecl();
   }
 
-  /// \brief Gets the underlying declaration which has been brought into the
+  /// Gets the underlying declaration which has been brought into the
   /// local scope.
   NamedDecl *getTargetDecl() const { return Underlying; }
 
-  /// \brief Sets the underlying declaration which has been brought into the
+  /// Sets the underlying declaration which has been brought into the
   /// local scope.
   void setTargetDecl(NamedDecl *ND) {
     assert(ND && "Target decl is null!");
@@ -3168,10 +3215,10 @@
         ~(IDNS_OrdinaryFriend | IDNS_TagFriend | IDNS_LocalExtern);
   }
 
-  /// \brief Gets the using declaration to which this declaration is tied.
+  /// Gets the using declaration to which this declaration is tied.
   UsingDecl *getUsingDecl() const;
 
-  /// \brief The next using shadow declaration contained in the shadow decl
+  /// The next using shadow declaration contained in the shadow decl
   /// chain of the using declaration which introduced this decl.
   UsingShadowDecl *getNextUsingShadowDecl() const {
     return dyn_cast_or_null<UsingShadowDecl>(UsingOrNextShadow);
@@ -3183,7 +3230,7 @@
   }
 };
 
-/// \brief Represents a shadow constructor declaration introduced into a
+/// Represents a shadow constructor declaration introduced into a
 /// class by a C++11 using-declaration that names a constructor.
 ///
 /// For example:
@@ -3194,18 +3241,18 @@
 /// };
 /// \endcode
 class ConstructorUsingShadowDecl final : public UsingShadowDecl {
-  /// \brief If this constructor using declaration inherted the constructor
+  /// If this constructor using declaration inherted the constructor
   /// from an indirect base class, this is the ConstructorUsingShadowDecl
   /// in the named direct base class from which the declaration was inherited.
   ConstructorUsingShadowDecl *NominatedBaseClassShadowDecl = nullptr;
 
-  /// \brief If this constructor using declaration inherted the constructor
+  /// If this constructor using declaration inherted the constructor
   /// from an indirect base class, this is the ConstructorUsingShadowDecl
   /// that will be used to construct the unique direct or virtual base class
   /// that receives the constructor arguments.
   ConstructorUsingShadowDecl *ConstructedBaseClassShadowDecl = nullptr;
 
-  /// \brief \c true if the constructor ultimately named by this using shadow
+  /// \c true if the constructor ultimately named by this using shadow
   /// declaration is within a virtual base class subobject of the class that
   /// contains this declaration.
   unsigned IsVirtual : 1;
@@ -3257,24 +3304,24 @@
   }
   //@}
 
-  /// \brief Get the inheriting constructor declaration for the direct base
+  /// Get the inheriting constructor declaration for the direct base
   /// class from which this using shadow declaration was inherited, if there is
   /// one. This can be different for each redeclaration of the same shadow decl.
   ConstructorUsingShadowDecl *getNominatedBaseClassShadowDecl() const {
     return NominatedBaseClassShadowDecl;
   }
 
-  /// \brief Get the inheriting constructor declaration for the base class
+  /// Get the inheriting constructor declaration for the base class
   /// for which we don't have an explicit initializer, if there is one.
   ConstructorUsingShadowDecl *getConstructedBaseClassShadowDecl() const {
     return ConstructedBaseClassShadowDecl;
   }
 
-  /// \brief Get the base class that was named in the using declaration. This
+  /// Get the base class that was named in the using declaration. This
   /// can be different for each redeclaration of this same shadow decl.
   CXXRecordDecl *getNominatedBaseClass() const;
 
-  /// \brief Get the base class whose constructor or constructor shadow
+  /// Get the base class whose constructor or constructor shadow
   /// declaration is passed the constructor arguments.
   CXXRecordDecl *getConstructedBaseClass() const {
     return cast<CXXRecordDecl>((ConstructedBaseClassShadowDecl
@@ -3283,13 +3330,13 @@
                                    ->getDeclContext());
   }
 
-  /// \brief Returns \c true if the constructed base class is a virtual base
+  /// Returns \c true if the constructed base class is a virtual base
   /// class subobject of this declaration's class.
   bool constructsVirtualBase() const {
     return IsVirtual;
   }
 
-  /// \brief Get the constructor or constructor template in the derived class
+  /// Get the constructor or constructor template in the derived class
   /// correspnding to this using shadow declaration, if it has been implicitly
   /// declared already.
   CXXConstructorDecl *getConstructor() const;
@@ -3299,24 +3346,24 @@
   static bool classofKind(Kind K) { return K == ConstructorUsingShadow; }
 };
 
-/// \brief Represents a C++ using-declaration.
+/// Represents a C++ using-declaration.
 ///
 /// For example:
 /// \code
 ///    using someNameSpace::someIdentifier;
 /// \endcode
 class UsingDecl : public NamedDecl, public Mergeable<UsingDecl> {
-  /// \brief The source location of the 'using' keyword itself.
+  /// The source location of the 'using' keyword itself.
   SourceLocation UsingLocation;
 
-  /// \brief The nested-name-specifier that precedes the name.
+  /// The nested-name-specifier that precedes the name.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief Provides source/type location info for the declaration name
+  /// Provides source/type location info for the declaration name
   /// embedded in the ValueDecl base class.
   DeclarationNameLoc DNLoc;
 
-  /// \brief The first shadow declaration of the shadow decl chain associated
+  /// The first shadow declaration of the shadow decl chain associated
   /// with this using declaration.
   ///
   /// The bool member of the pair store whether this decl has the \c typename
@@ -3337,17 +3384,17 @@
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  /// \brief Return the source location of the 'using' keyword.
+  /// Return the source location of the 'using' keyword.
   SourceLocation getUsingLoc() const { return UsingLocation; }
 
-  /// \brief Set the source location of the 'using' keyword.
+  /// Set the source location of the 'using' keyword.
   void setUsingLoc(SourceLocation L) { UsingLocation = L; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name,
+  /// Retrieve the nested-name-specifier that qualifies the name,
   /// with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name.
+  /// Retrieve the nested-name-specifier that qualifies the name.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
@@ -3356,19 +3403,19 @@
     return DeclarationNameInfo(getDeclName(), getLocation(), DNLoc);
   }
 
-  /// \brief Return true if it is a C++03 access declaration (no 'using').
+  /// Return true if it is a C++03 access declaration (no 'using').
   bool isAccessDeclaration() const { return UsingLocation.isInvalid(); }
 
-  /// \brief Return true if the using declaration has 'typename'.
+  /// Return true if the using declaration has 'typename'.
   bool hasTypename() const { return FirstUsingShadow.getInt(); }
 
-  /// \brief Sets whether the using declaration has 'typename'.
+  /// Sets whether the using declaration has 'typename'.
   void setTypename(bool TN) { FirstUsingShadow.setInt(TN); }
 
-  /// \brief Iterates through the using shadow declarations associated with
+  /// Iterates through the using shadow declarations associated with
   /// this using declaration.
   class shadow_iterator {
-    /// \brief The current using shadow declaration.
+    /// The current using shadow declaration.
     UsingShadowDecl *Current = nullptr;
 
   public:
@@ -3415,7 +3462,7 @@
 
   shadow_iterator shadow_end() const { return shadow_iterator(); }
 
-  /// \brief Return the number of shadowed declarations associated with this
+  /// Return the number of shadowed declarations associated with this
   /// using declaration.
   unsigned shadow_size() const {
     return std::distance(shadow_begin(), shadow_end());
@@ -3513,7 +3560,7 @@
   static bool classofKind(Kind K) { return K == UsingPack; }
 };
 
-/// \brief Represents a dependent using declaration which was not marked with
+/// Represents a dependent using declaration which was not marked with
 /// \c typename.
 ///
 /// Unlike non-dependent using declarations, these *only* bring through
@@ -3526,16 +3573,16 @@
 /// \endcode
 class UnresolvedUsingValueDecl : public ValueDecl,
                                  public Mergeable<UnresolvedUsingValueDecl> {
-  /// \brief The source location of the 'using' keyword
+  /// The source location of the 'using' keyword
   SourceLocation UsingLocation;
 
-  /// \brief If this is a pack expansion, the location of the '...'.
+  /// If this is a pack expansion, the location of the '...'.
   SourceLocation EllipsisLoc;
 
-  /// \brief The nested-name-specifier that precedes the name.
+  /// The nested-name-specifier that precedes the name.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief Provides source/type location info for the declaration name
+  /// Provides source/type location info for the declaration name
   /// embedded in the ValueDecl base class.
   DeclarationNameLoc DNLoc;
 
@@ -3555,20 +3602,20 @@
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  /// \brief Returns the source location of the 'using' keyword.
+  /// Returns the source location of the 'using' keyword.
   SourceLocation getUsingLoc() const { return UsingLocation; }
 
-  /// \brief Set the source location of the 'using' keyword.
+  /// Set the source location of the 'using' keyword.
   void setUsingLoc(SourceLocation L) { UsingLocation = L; }
 
-  /// \brief Return true if it is a C++03 access declaration (no 'using').
+  /// Return true if it is a C++03 access declaration (no 'using').
   bool isAccessDeclaration() const { return UsingLocation.isInvalid(); }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name,
+  /// Retrieve the nested-name-specifier that qualifies the name,
   /// with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name.
+  /// Retrieve the nested-name-specifier that qualifies the name.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
@@ -3577,12 +3624,12 @@
     return DeclarationNameInfo(getDeclName(), getLocation(), DNLoc);
   }
 
-  /// \brief Determine whether this is a pack expansion.
+  /// Determine whether this is a pack expansion.
   bool isPackExpansion() const {
     return EllipsisLoc.isValid();
   }
 
-  /// \brief Get the location of the ellipsis if this is a pack expansion.
+  /// Get the location of the ellipsis if this is a pack expansion.
   SourceLocation getEllipsisLoc() const {
     return EllipsisLoc;
   }
@@ -3609,7 +3656,7 @@
   static bool classofKind(Kind K) { return K == UnresolvedUsingValue; }
 };
 
-/// \brief Represents a dependent using declaration which was marked with
+/// Represents a dependent using declaration which was marked with
 /// \c typename.
 ///
 /// \code
@@ -3625,13 +3672,13 @@
       public Mergeable<UnresolvedUsingTypenameDecl> {
   friend class ASTDeclReader;
 
-  /// \brief The source location of the 'typename' keyword
+  /// The source location of the 'typename' keyword
   SourceLocation TypenameLocation;
 
-  /// \brief If this is a pack expansion, the location of the '...'.
+  /// If this is a pack expansion, the location of the '...'.
   SourceLocation EllipsisLoc;
 
-  /// \brief The nested-name-specifier that precedes the name.
+  /// The nested-name-specifier that precedes the name.
   NestedNameSpecifierLoc QualifierLoc;
 
   UnresolvedUsingTypenameDecl(DeclContext *DC, SourceLocation UsingLoc,
@@ -3648,17 +3695,17 @@
   void anchor() override;
 
 public:
-  /// \brief Returns the source location of the 'using' keyword.
-  SourceLocation getUsingLoc() const { return getLocStart(); }
+  /// Returns the source location of the 'using' keyword.
+  SourceLocation getUsingLoc() const { return getBeginLoc(); }
 
-  /// \brief Returns the source location of the 'typename' keyword.
+  /// Returns the source location of the 'typename' keyword.
   SourceLocation getTypenameLoc() const { return TypenameLocation; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name,
+  /// Retrieve the nested-name-specifier that qualifies the name,
   /// with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the name.
+  /// Retrieve the nested-name-specifier that qualifies the name.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
@@ -3667,12 +3714,12 @@
     return DeclarationNameInfo(getDeclName(), getLocation());
   }
 
-  /// \brief Determine whether this is a pack expansion.
+  /// Determine whether this is a pack expansion.
   bool isPackExpansion() const {
     return EllipsisLoc.isValid();
   }
 
-  /// \brief Get the location of the ellipsis if this is a pack expansion.
+  /// Get the location of the ellipsis if this is a pack expansion.
   SourceLocation getEllipsisLoc() const {
     return EllipsisLoc;
   }
@@ -3698,7 +3745,7 @@
   static bool classofKind(Kind K) { return K == UnresolvedUsingTypename; }
 };
 
-/// \brief Represents a C++11 static_assert declaration.
+/// Represents a C++11 static_assert declaration.
 class StaticAssertDecl : public Decl {
   llvm::PointerIntPair<Expr *, 1, bool> AssertExprAndFailed;
   StringLiteral *Message;
@@ -3721,7 +3768,7 @@
                                   Expr *AssertExpr, StringLiteral *Message,
                                   SourceLocation RParenLoc, bool Failed);
   static StaticAssertDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   Expr *getAssertExpr() { return AssertExprAndFailed.getPointer(); }
   const Expr *getAssertExpr() const { return AssertExprAndFailed.getPointer(); }
 
diff --git a/linux-x64/clang/include/clang/AST/DeclContextInternals.h b/linux-x64/clang/include/clang/AST/DeclContextInternals.h
index 6545f70..ccd82d2 100644
--- a/linux-x64/clang/include/clang/AST/DeclContextInternals.h
+++ b/linux-x64/clang/include/clang/AST/DeclContextInternals.h
@@ -30,17 +30,17 @@
 
 class DependentDiagnostic;
 
-/// \brief An array of decls optimized for the common case of only containing
+/// An array of decls optimized for the common case of only containing
 /// one entry.
 struct StoredDeclsList {
-  /// \brief When in vector form, this is what the Data pointer points to.
+  /// When in vector form, this is what the Data pointer points to.
   using DeclsTy = SmallVector<NamedDecl *, 4>;
 
-  /// \brief A collection of declarations, with a flag to indicate if we have
+  /// A collection of declarations, with a flag to indicate if we have
   /// further external declarations.
   using DeclsAndHasExternalTy = llvm::PointerIntPair<DeclsTy *, 1, bool>;
 
-  /// \brief The stored data, which will be either a pointer to a NamedDecl,
+  /// The stored data, which will be either a pointer to a NamedDecl,
   /// or a pointer to a vector with a flag to indicate if there are further
   /// external declarations.
   llvm::PointerUnion<NamedDecl *, DeclsAndHasExternalTy> Data;
@@ -122,7 +122,7 @@
              == Vec.end() && "list still contains decl");
   }
 
-  /// \brief Remove any declarations which were imported from an external
+  /// Remove any declarations which were imported from an external
   /// AST source.
   void removeExternalDecls() {
     if (isNull()) {
diff --git a/linux-x64/clang/include/clang/AST/DeclFriend.h b/linux-x64/clang/include/clang/AST/DeclFriend.h
index 5d1c6b8..b5808f2 100644
--- a/linux-x64/clang/include/clang/AST/DeclFriend.h
+++ b/linux-x64/clang/include/clang/AST/DeclFriend.h
@@ -148,17 +148,17 @@
   /// Retrieves the source range for the friend declaration.
   SourceRange getSourceRange() const override LLVM_READONLY {
     if (NamedDecl *ND = getFriendDecl()) {
-      if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
+      if (const auto *FD = dyn_cast<FunctionDecl>(ND))
         return FD->getSourceRange();
-      if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
+      if (const auto *FTD = dyn_cast<FunctionTemplateDecl>(ND))
         return FTD->getSourceRange();
-      if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(ND))
+      if (const auto *CTD = dyn_cast<ClassTemplateDecl>(ND))
         return CTD->getSourceRange();
-      if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(ND)) {
+      if (const auto *DD = dyn_cast<DeclaratorDecl>(ND)) {
         if (DD->getOuterLocStart() != DD->getInnerLocStart())
           return DD->getSourceRange();
       }
-      return SourceRange(getFriendLoc(), ND->getLocEnd());
+      return SourceRange(getFriendLoc(), ND->getEndLoc());
     }
     else if (TypeSourceInfo *TInfo = getFriendType()) {
       SourceLocation StartL =
@@ -254,7 +254,7 @@
   FD->NextFriend = data().FirstFriend;
   data().FirstFriend = FD;
 }
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_DECLFRIEND_H
diff --git a/linux-x64/clang/include/clang/AST/DeclLookups.h b/linux-x64/clang/include/clang/AST/DeclLookups.h
index 64eb3f2..9627f44 100644
--- a/linux-x64/clang/include/clang/AST/DeclLookups.h
+++ b/linux-x64/clang/include/clang/AST/DeclLookups.h
@@ -54,7 +54,7 @@
       ++It;
     } while (It != End &&
              It->first == DeclarationName::getUsingDirectiveName());
-             
+
     return *this;
   }
 
diff --git a/linux-x64/clang/include/clang/AST/DeclObjC.h b/linux-x64/clang/include/clang/AST/DeclObjC.h
index cef7d93..d6ec91b 100644
--- a/linux-x64/clang/include/clang/AST/DeclObjC.h
+++ b/linux-x64/clang/include/clang/AST/DeclObjC.h
@@ -97,7 +97,7 @@
   }
 };
 
-/// \brief A list of Objective-C protocols, along with the source
+/// A list of Objective-C protocols, along with the source
 /// locations at which they were referenced.
 class ObjCProtocolList : public ObjCList<ObjCProtocolDecl> {
   SourceLocation *Locations = nullptr;
@@ -137,65 +137,20 @@
 /// the above methods are setMenu:, menu, replaceSubview:with:, and defaultMenu.
 ///
 class ObjCMethodDecl : public NamedDecl, public DeclContext {
+  // This class stores some data in DeclContext::ObjCMethodDeclBits
+  // to save some space. Use the provided accessors to access it.
+
 public:
   enum ImplementationControl { None, Required, Optional };
 
 private:
-  // The conventional meaning of this method; an ObjCMethodFamily.
-  // This is not serialized; instead, it is computed on demand and
-  // cached.
-  mutable unsigned Family : ObjCMethodFamilyBitWidth;
-
-  /// instance (true) or class (false) method.
-  unsigned IsInstance : 1;
-  unsigned IsVariadic : 1;
-
-  /// True if this method is the getter or setter for an explicit property.
-  unsigned IsPropertyAccessor : 1;
-
-  // Method has a definition.
-  unsigned IsDefined : 1;
-
-  /// \brief Method redeclaration in the same interface.
-  unsigned IsRedeclaration : 1;
-
-  /// \brief Is redeclared in the same interface.
-  mutable unsigned HasRedeclaration : 1;
-
-  // NOTE: VC++ treats enums as signed, avoid using ImplementationControl enum
-  /// \@required/\@optional
-  unsigned DeclImplementation : 2;
-
-  // NOTE: VC++ treats enums as signed, avoid using the ObjCDeclQualifier enum
-  /// in, inout, etc.
-  unsigned objcDeclQualifier : 7;
-
-  /// \brief Indicates whether this method has a related result type.
-  unsigned RelatedResultType : 1;
-
-  /// \brief Whether the locations of the selector identifiers are in a
-  /// "standard" position, a enum SelectorLocationsKind.
-  unsigned SelLocsKind : 2;
-
-  /// \brief Whether this method overrides any other in the class hierarchy.
-  ///
-  /// A method is said to override any method in the class's
-  /// base classes, its protocols, or its categories' protocols, that has
-  /// the same selector and is of the same kind (class or instance).
-  /// A method in an implementation is not considered as overriding the same
-  /// method in the interface or its categories.
-  unsigned IsOverriding : 1;
-
-  /// \brief Indicates if the method was a definition but its body was skipped.
-  unsigned HasSkippedBody : 1;
-
-  // Return type of this method.
+  /// Return type of this method.
   QualType MethodDeclType;
 
-  // Type source information for the return type.
+  /// Type source information for the return type.
   TypeSourceInfo *ReturnTInfo;
 
-  /// \brief Array of ParmVarDecls for the formal parameters of this method
+  /// Array of ParmVarDecls for the formal parameters of this method
   /// and optionally followed by selector locations.
   void *ParamsAndSelLocs = nullptr;
   unsigned NumParams = 0;
@@ -203,7 +158,7 @@
   /// List of attributes for this method declaration.
   SourceLocation DeclEndLoc; // the location of the ';' or '{'.
 
-  // The following are only used for method definitions, null otherwise.
+  /// The following are only used for method definitions, null otherwise.
   LazyDeclStmtPtr Body;
 
   /// SelfDecl - Decl for the implicit self parameter. This is lazily
@@ -220,37 +175,30 @@
                  bool isVariadic = false, bool isPropertyAccessor = false,
                  bool isImplicitlyDeclared = false, bool isDefined = false,
                  ImplementationControl impControl = None,
-                 bool HasRelatedResultType = false)
-      : NamedDecl(ObjCMethod, contextDecl, beginLoc, SelInfo),
-        DeclContext(ObjCMethod), Family(InvalidObjCMethodFamily),
-        IsInstance(isInstance), IsVariadic(isVariadic),
-        IsPropertyAccessor(isPropertyAccessor), IsDefined(isDefined),
-        IsRedeclaration(0), HasRedeclaration(0), DeclImplementation(impControl),
-        objcDeclQualifier(OBJC_TQ_None),
-        RelatedResultType(HasRelatedResultType),
-        SelLocsKind(SelLoc_StandardNoSpace), IsOverriding(0), HasSkippedBody(0),
-        MethodDeclType(T), ReturnTInfo(ReturnTInfo), DeclEndLoc(endLoc) {
-    setImplicit(isImplicitlyDeclared);
-  }
+                 bool HasRelatedResultType = false);
 
   SelectorLocationsKind getSelLocsKind() const {
-    return (SelectorLocationsKind)SelLocsKind;
+    return static_cast<SelectorLocationsKind>(ObjCMethodDeclBits.SelLocsKind);
+  }
+
+  void setSelLocsKind(SelectorLocationsKind Kind) {
+    ObjCMethodDeclBits.SelLocsKind = Kind;
   }
 
   bool hasStandardSelLocs() const {
     return getSelLocsKind() != SelLoc_NonStandard;
   }
 
-  /// \brief Get a pointer to the stored selector identifiers locations array.
+  /// Get a pointer to the stored selector identifiers locations array.
   /// No locations will be stored if HasStandardSelLocs is true.
   SourceLocation *getStoredSelLocs() {
-    return reinterpret_cast<SourceLocation*>(getParams() + NumParams);
+    return reinterpret_cast<SourceLocation *>(getParams() + NumParams);
   }
   const SourceLocation *getStoredSelLocs() const {
-    return reinterpret_cast<const SourceLocation*>(getParams() + NumParams);
+    return reinterpret_cast<const SourceLocation *>(getParams() + NumParams);
   }
 
-  /// \brief Get a pointer to the stored selector identifiers locations array.
+  /// Get a pointer to the stored selector identifiers locations array.
   /// No locations will be stored if HasStandardSelLocs is true.
   ParmVarDecl **getParams() {
     return reinterpret_cast<ParmVarDecl **>(ParamsAndSelLocs);
@@ -259,7 +207,7 @@
     return reinterpret_cast<const ParmVarDecl *const *>(ParamsAndSelLocs);
   }
 
-  /// \brief Get the number of stored selector identifiers locations.
+  /// Get the number of stored selector identifiers locations.
   /// No locations will be stored if HasStandardSelLocs is true.
   unsigned getNumStoredSelLocs() const {
     if (hasStandardSelLocs())
@@ -271,7 +219,7 @@
                            ArrayRef<ParmVarDecl*> Params,
                            ArrayRef<SourceLocation> SelLocs);
 
-  /// \brief A definition will return its interface declaration.
+  /// A definition will return its interface declaration.
   /// An interface declaration will return its definition.
   /// Otherwise it will return itself.
   ObjCMethodDecl *getNextRedeclarationImpl() override;
@@ -297,36 +245,58 @@
   }
 
   ObjCDeclQualifier getObjCDeclQualifier() const {
-    return ObjCDeclQualifier(objcDeclQualifier);
+    return static_cast<ObjCDeclQualifier>(ObjCMethodDeclBits.objcDeclQualifier);
   }
-  void setObjCDeclQualifier(ObjCDeclQualifier QV) { objcDeclQualifier = QV; }
 
-  /// \brief Determine whether this method has a result type that is related
+  void setObjCDeclQualifier(ObjCDeclQualifier QV) {
+    ObjCMethodDeclBits.objcDeclQualifier = QV;
+  }
+
+  /// Determine whether this method has a result type that is related
   /// to the message receiver's type.
-  bool hasRelatedResultType() const { return RelatedResultType; }
+  bool hasRelatedResultType() const {
+    return ObjCMethodDeclBits.RelatedResultType;
+  }
 
-  /// \brief Note whether this method has a related result type.
-  void SetRelatedResultType(bool RRT = true) { RelatedResultType = RRT; }
+  /// Note whether this method has a related result type.
+  void setRelatedResultType(bool RRT = true) {
+    ObjCMethodDeclBits.RelatedResultType = RRT;
+  }
 
-  /// \brief True if this is a method redeclaration in the same interface.
-  bool isRedeclaration() const { return IsRedeclaration; }
+  /// True if this is a method redeclaration in the same interface.
+  bool isRedeclaration() const { return ObjCMethodDeclBits.IsRedeclaration; }
+  void setIsRedeclaration(bool RD) { ObjCMethodDeclBits.IsRedeclaration = RD; }
   void setAsRedeclaration(const ObjCMethodDecl *PrevMethod);
 
-  /// \brief Returns the location where the declarator ends. It will be
+  /// True if redeclared in the same interface.
+  bool hasRedeclaration() const { return ObjCMethodDeclBits.HasRedeclaration; }
+  void setHasRedeclaration(bool HRD) const {
+    ObjCMethodDeclBits.HasRedeclaration = HRD;
+  }
+
+  /// Returns the location where the declarator ends. It will be
   /// the location of ';' for a method declaration and the location of '{'
   /// for a method definition.
   SourceLocation getDeclaratorEndLoc() const { return DeclEndLoc; }
 
   // Location information, modeled after the Stmt API.
-  SourceLocation getLocStart() const LLVM_READONLY { return getLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return getLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
   SourceRange getSourceRange() const override LLVM_READONLY {
-    return SourceRange(getLocation(), getLocEnd());
+    return SourceRange(getLocation(), getEndLoc());
   }
 
   SourceLocation getSelectorStartLoc() const {
     if (isImplicit())
-      return getLocStart();
+      return getBeginLoc();
     return getSelectorLoc(0);
   }
 
@@ -362,7 +332,7 @@
   void setReturnType(QualType T) { MethodDeclType = T; }
   SourceRange getReturnTypeSourceRange() const;
 
-  /// \brief Determine the type of an expression that sends a message to this
+  /// Determine the type of an expression that sends a message to this
   /// function. This replaces the type parameters with the types they would
   /// get if the receiver was parameterless (e.g. it may replace the type
   /// parameter with 'id').
@@ -407,7 +377,7 @@
                               NumParams);
   }
 
-  /// \brief Sets the method's parameters and selector source locations.
+  /// Sets the method's parameters and selector source locations.
   /// If the method is implicit (not coming from source) \p SelLocs is
   /// ignored.
   void setMethodParams(ASTContext &C,
@@ -449,30 +419,38 @@
   /// Determines the family of this method.
   ObjCMethodFamily getMethodFamily() const;
 
-  bool isInstanceMethod() const { return IsInstance; }
-  void setInstanceMethod(bool isInst) { IsInstance = isInst; }
-  bool isVariadic() const { return IsVariadic; }
-  void setVariadic(bool isVar) { IsVariadic = isVar; }
+  bool isInstanceMethod() const { return ObjCMethodDeclBits.IsInstance; }
+  void setInstanceMethod(bool isInst) {
+    ObjCMethodDeclBits.IsInstance = isInst;
+  }
 
-  bool isClassMethod() const { return !IsInstance; }
+  bool isVariadic() const { return ObjCMethodDeclBits.IsVariadic; }
+  void setVariadic(bool isVar) { ObjCMethodDeclBits.IsVariadic = isVar; }
 
-  bool isPropertyAccessor() const { return IsPropertyAccessor; }
-  void setPropertyAccessor(bool isAccessor) { IsPropertyAccessor = isAccessor; }
+  bool isClassMethod() const { return !isInstanceMethod(); }
 
-  bool isDefined() const { return IsDefined; }
-  void setDefined(bool isDefined) { IsDefined = isDefined; }
+  bool isPropertyAccessor() const {
+    return ObjCMethodDeclBits.IsPropertyAccessor;
+  }
 
-  /// \brief Whether this method overrides any other in the class hierarchy.
+  void setPropertyAccessor(bool isAccessor) {
+    ObjCMethodDeclBits.IsPropertyAccessor = isAccessor;
+  }
+
+  bool isDefined() const { return ObjCMethodDeclBits.IsDefined; }
+  void setDefined(bool isDefined) { ObjCMethodDeclBits.IsDefined = isDefined; }
+
+  /// Whether this method overrides any other in the class hierarchy.
   ///
   /// A method is said to override any method in the class's
   /// base classes, its protocols, or its categories' protocols, that has
   /// the same selector and is of the same kind (class or instance).
   /// A method in an implementation is not considered as overriding the same
   /// method in the interface or its categories.
-  bool isOverriding() const { return IsOverriding; }
-  void setOverriding(bool isOverriding) { IsOverriding = isOverriding; }
+  bool isOverriding() const { return ObjCMethodDeclBits.IsOverriding; }
+  void setOverriding(bool IsOver) { ObjCMethodDeclBits.IsOverriding = IsOver; }
 
-  /// \brief Return overridden methods for the given \p Method.
+  /// Return overridden methods for the given \p Method.
   ///
   /// An ObjC method is considered to override any method in the class's
   /// base classes (and base's categories), its protocols, or its categories'
@@ -483,11 +461,13 @@
   void getOverriddenMethods(
                      SmallVectorImpl<const ObjCMethodDecl *> &Overridden) const;
 
-  /// \brief True if the method was a definition but its body was skipped.
-  bool hasSkippedBody() const { return HasSkippedBody; }
-  void setHasSkippedBody(bool Skipped = true) { HasSkippedBody = Skipped; }
+  /// True if the method was a definition but its body was skipped.
+  bool hasSkippedBody() const { return ObjCMethodDeclBits.HasSkippedBody; }
+  void setHasSkippedBody(bool Skipped = true) {
+    ObjCMethodDeclBits.HasSkippedBody = Skipped;
+  }
 
-  /// \brief Returns the property associated with this method's selector.
+  /// Returns the property associated with this method's selector.
   ///
   /// Note that even if this particular method is not marked as a property
   /// accessor, it is still possible for it to match a property declared in a
@@ -496,11 +476,11 @@
 
   // Related to protocols declared in  \@protocol
   void setDeclImplementation(ImplementationControl ic) {
-    DeclImplementation = ic;
+    ObjCMethodDeclBits.DeclImplementation = ic;
   }
 
   ImplementationControl getImplementationControl() const {
-    return ImplementationControl(DeclImplementation);
+    return ImplementationControl(ObjCMethodDeclBits.DeclImplementation);
   }
 
   bool isOptional() const {
@@ -520,10 +500,10 @@
   bool isDesignatedInitializerForTheInterface(
       const ObjCMethodDecl **InitMethod = nullptr) const;
 
-  /// \brief Determine whether this method has a body.
+  /// Determine whether this method has a body.
   bool hasBody() const override { return Body.isValid(); }
 
-  /// \brief Retrieve the body of this method, if it has one.
+  /// Retrieve the body of this method, if it has one.
   Stmt *getBody() const override;
 
   void setLazyBody(uint64_t Offset) { Body = Offset; }
@@ -531,7 +511,7 @@
   CompoundStmt *getCompoundBody() { return (CompoundStmt*)getBody(); }
   void setBody(Stmt *B) { Body = B; }
 
-  /// \brief Returns whether this specific method is a definition.
+  /// Returns whether this specific method is a definition.
   bool isThisDeclarationADefinition() const { return hasBody(); }
 
   // Implement isa/cast/dyncast/etc.
@@ -587,7 +567,7 @@
   /// explicitly specified.
   SourceLocation ColonLoc;
 
-  ObjCTypeParamDecl(ASTContext &ctx, DeclContext *dc, 
+  ObjCTypeParamDecl(ASTContext &ctx, DeclContext *dc,
                     ObjCTypeParamVariance variance, SourceLocation varianceLoc,
                     unsigned index,
                     SourceLocation nameLoc, IdentifierInfo *name,
@@ -659,7 +639,7 @@
     unsigned End;
   };
 
-  union { 
+  union {
     /// Location of the left and right angle brackets.
     PODSourceRange Brackets;
 
@@ -737,7 +717,7 @@
   OBJC_PR_query_class
 };
 
-/// \brief Represents one property declaration in an Objective-C interface.
+/// Represents one property declaration in an Objective-C interface.
 ///
 /// For example:
 /// \code{.mm}
@@ -770,7 +750,7 @@
   };
 
   enum {
-    /// \brief Number of bits fitting all the property attributes.
+    /// Number of bits fitting all the property attributes.
     NumPropertyAttrsBits = 15
   };
 
@@ -984,7 +964,8 @@
 /// ObjCProtocolDecl, and ObjCImplDecl.
 ///
 class ObjCContainerDecl : public NamedDecl, public DeclContext {
-  SourceLocation AtStart;
+  // This class stores some data in DeclContext::ObjCContainerDeclBits
+  // to save some space. Use the provided accessors to access it.
 
   // These two locations in the range mark the end of the method container.
   // The first points to the '@' token, and the second to the 'end' token.
@@ -993,10 +974,8 @@
   void anchor() override;
 
 public:
-  ObjCContainerDecl(Kind DK, DeclContext *DC,
-                    IdentifierInfo *Id, SourceLocation nameLoc,
-                    SourceLocation atStartLoc)
-      : NamedDecl(DK, DC, nameLoc, Id), DeclContext(DK), AtStart(atStartLoc) {}
+  ObjCContainerDecl(Kind DK, DeclContext *DC, IdentifierInfo *Id,
+                    SourceLocation nameLoc, SourceLocation atStartLoc);
 
   // Iterator access to instance/class properties.
   using prop_iterator = specific_decl_iterator<ObjCPropertyDecl>;
@@ -1123,27 +1102,26 @@
                      ObjCPropertyDecl *>;
   using ProtocolPropertySet = llvm::SmallDenseSet<const ObjCProtocolDecl *, 8>;
   using PropertyDeclOrder = llvm::SmallVector<ObjCPropertyDecl *, 8>;
-  
+
   /// This routine collects list of properties to be implemented in the class.
   /// This includes, class's and its conforming protocols' properties.
   /// Note, the superclass's properties are not included in the list.
   virtual void collectPropertiesToImplement(PropertyMap &PM,
                                             PropertyDeclOrder &PO) const {}
 
-  SourceLocation getAtStartLoc() const { return AtStart; }
-  void setAtStartLoc(SourceLocation Loc) { AtStart = Loc; }
+  SourceLocation getAtStartLoc() const { return ObjCContainerDeclBits.AtStart; }
+
+  void setAtStartLoc(SourceLocation Loc) {
+    ObjCContainerDeclBits.AtStart = Loc;
+  }
 
   // Marks the end of the container.
-  SourceRange getAtEndRange() const {
-    return AtEnd;
-  }
+  SourceRange getAtEndRange() const { return AtEnd; }
 
-  void setAtEndRange(SourceRange atEnd) {
-    AtEnd = atEnd;
-  }
+  void setAtEndRange(SourceRange atEnd) { AtEnd = atEnd; }
 
   SourceRange getSourceRange() const override LLVM_READONLY {
-    return SourceRange(AtStart, getAtEndRange().getEnd());
+    return SourceRange(getAtStartLoc(), getAtEndRange().getEnd());
   }
 
   // Implement isa/cast/dyncast/etc.
@@ -1163,7 +1141,7 @@
   }
 };
 
-/// \brief Represents an ObjC class declaration.
+/// Represents an ObjC class declaration.
 ///
 /// For example:
 ///
@@ -1195,22 +1173,22 @@
   /// TypeForDecl - This indicates the Type object that represents this
   /// TypeDecl.  It is a cache maintained by ASTContext::getObjCInterfaceType
   mutable const Type *TypeForDecl = nullptr;
-  
+
   struct DefinitionData {
-    /// \brief The definition of this class, for quick access from any 
+    /// The definition of this class, for quick access from any
     /// declaration.
     ObjCInterfaceDecl *Definition = nullptr;
-    
+
     /// When non-null, this is always an ObjCObjectType.
     TypeSourceInfo *SuperClassTInfo = nullptr;
-    
+
     /// Protocols referenced in the \@interface  declaration
     ObjCProtocolList ReferencedProtocols;
 
     /// Protocols reference in both the \@interface and class extensions.
     ObjCList<ObjCProtocolDecl> AllReferencedProtocols;
 
-    /// \brief List of categories and class extensions defined for this class.
+    /// List of categories and class extensions defined for this class.
     ///
     /// Categories are stored as a linked list in the AST, since the categories
     /// and class extensions come long after the initial interface declaration,
@@ -1221,11 +1199,11 @@
     /// extensions and implementation. This list is built lazily.
     ObjCIvarDecl *IvarList = nullptr;
 
-    /// \brief Indicates that the contents of this Objective-C class will be
+    /// Indicates that the contents of this Objective-C class will be
     /// completed by the external AST source when required.
     mutable unsigned ExternallyCompleted : 1;
 
-    /// \brief Indicates that the ivar cache does not yet include ivars
+    /// Indicates that the ivar cache does not yet include ivars
     /// declared in the implementation.
     mutable unsigned IvarListMissingImplementation : 1;
 
@@ -1247,11 +1225,11 @@
 
     /// One of the \c InheritedDesignatedInitializersState enumeratos.
     mutable unsigned InheritedDesignatedInitializers : 2;
-    
-    /// \brief The location of the last location in this declaration, before
-    /// the properties/methods. For example, this will be the '>', '}', or 
-    /// identifier, 
-    SourceLocation EndLoc; 
+
+    /// The location of the last location in this declaration, before
+    /// the properties/methods. For example, this will be the '>', '}', or
+    /// identifier,
+    SourceLocation EndLoc;
 
     DefinitionData()
         : ExternallyCompleted(false), IvarListMissingImplementation(true),
@@ -1262,7 +1240,7 @@
   /// The type parameters associated with this class, if any.
   ObjCTypeParamList *TypeParamList = nullptr;
 
-  /// \brief Contains a pointer to the data associated with this class,
+  /// Contains a pointer to the data associated with this class,
   /// which will be NULL if this class has not yet been defined.
   ///
   /// The bit indicates when we don't need to check for out-of-date
@@ -1283,9 +1261,9 @@
     return *Data.getPointer();
   }
 
-  /// \brief Allocate the definition data for this class.
+  /// Allocate the definition data for this class.
   void allocateDefinitionData();
-  
+
   using redeclarable_base = Redeclarable<ObjCInterfaceDecl>;
 
   ObjCInterfaceDecl *getNextRedeclarationImpl() override {
@@ -1334,11 +1312,11 @@
   SourceRange getSourceRange() const override LLVM_READONLY {
     if (isThisDeclarationADefinition())
       return ObjCContainerDecl::getSourceRange();
-    
+
     return SourceRange(getAtStartLoc(), getLocation());
   }
 
-  /// \brief Indicate that this Objective-C class is complete, but that
+  /// Indicate that this Objective-C class is complete, but that
   /// the external AST source will be responsible for filling in its contents
   /// when a complete class is required.
   void setExternallyCompleted();
@@ -1390,7 +1368,7 @@
     // FIXME: Should make sure no callers ever do this.
     if (!hasDefinition())
       return protocol_iterator();
-    
+
     if (data().ExternallyCompleted)
       LoadExternalDefinition();
 
@@ -1453,7 +1431,7 @@
     if (data().ExternallyCompleted)
       LoadExternalDefinition();
 
-    return data().AllReferencedProtocols.empty()  
+    return data().AllReferencedProtocols.empty()
              ? protocol_begin()
              : data().AllReferencedProtocols.begin();
   }
@@ -1462,11 +1440,11 @@
     // FIXME: Should make sure no callers ever do this.
     if (!hasDefinition())
       return all_protocol_iterator();
-    
+
     if (data().ExternallyCompleted)
       LoadExternalDefinition();
 
-    return data().AllReferencedProtocols.empty() 
+    return data().AllReferencedProtocols.empty()
              ? protocol_end()
              : data().AllReferencedProtocols.end();
   }
@@ -1476,17 +1454,17 @@
 
   ivar_range ivars() const { return ivar_range(ivar_begin(), ivar_end()); }
 
-  ivar_iterator ivar_begin() const { 
+  ivar_iterator ivar_begin() const {
     if (const ObjCInterfaceDecl *Def = getDefinition())
-      return ivar_iterator(Def->decls_begin()); 
-    
+      return ivar_iterator(Def->decls_begin());
+
     // FIXME: Should make sure no callers ever do this.
     return ivar_iterator();
   }
 
-  ivar_iterator ivar_end() const { 
+  ivar_iterator ivar_end() const {
     if (const ObjCInterfaceDecl *Def = getDefinition())
-      return ivar_iterator(Def->decls_end()); 
+      return ivar_iterator(Def->decls_end());
 
     // FIXME: Should make sure no callers ever do this.
     return ivar_iterator();
@@ -1544,13 +1522,13 @@
   isDesignatedInitializer(Selector Sel,
                           const ObjCMethodDecl **InitMethod = nullptr) const;
 
-  /// \brief Determine whether this particular declaration of this class is
+  /// Determine whether this particular declaration of this class is
   /// actually also a definition.
-  bool isThisDeclarationADefinition() const { 
+  bool isThisDeclarationADefinition() const {
     return getDefinition() == this;
   }
-                          
-  /// \brief Determine whether this class has been defined.
+
+  /// Determine whether this class has been defined.
   bool hasDefinition() const {
     // If the name of this class is out-of-date, bring it up-to-date, which
     // might bring in a definition.
@@ -1561,25 +1539,25 @@
 
     return Data.getPointer();
   }
-                        
-  /// \brief Retrieve the definition of this class, or NULL if this class 
-  /// has been forward-declared (with \@class) but not yet defined (with 
+
+  /// Retrieve the definition of this class, or NULL if this class
+  /// has been forward-declared (with \@class) but not yet defined (with
   /// \@interface).
   ObjCInterfaceDecl *getDefinition() {
     return hasDefinition()? Data.getPointer()->Definition : nullptr;
   }
 
-  /// \brief Retrieve the definition of this class, or NULL if this class 
-  /// has been forward-declared (with \@class) but not yet defined (with 
+  /// Retrieve the definition of this class, or NULL if this class
+  /// has been forward-declared (with \@class) but not yet defined (with
   /// \@interface).
   const ObjCInterfaceDecl *getDefinition() const {
     return hasDefinition()? Data.getPointer()->Definition : nullptr;
   }
 
-  /// \brief Starts the definition of this Objective-C class, taking it from
+  /// Starts the definition of this Objective-C class, taking it from
   /// a forward declaration (\@class) to a definition (\@interface).
   void startDefinition();
-  
+
   /// Retrieve the superclass type.
   const ObjCObjectType *getSuperClassType() const {
     if (TypeSourceInfo *TInfo = getSuperClassTInfo())
@@ -1593,7 +1571,7 @@
     // FIXME: Should make sure no callers ever do this.
     if (!hasDefinition())
       return nullptr;
-    
+
     if (data().ExternallyCompleted)
       LoadExternalDefinition();
 
@@ -1604,11 +1582,11 @@
   // does not include any type arguments that apply to the superclass.
   ObjCInterfaceDecl *getSuperClass() const;
 
-  void setSuperClass(TypeSourceInfo *superClass) { 
+  void setSuperClass(TypeSourceInfo *superClass) {
     data().SuperClassTInfo = superClass;
   }
 
-  /// \brief Iterator that walks over the list of categories, filtering out
+  /// Iterator that walks over the list of categories, filtering out
   /// those that do not meet specific criteria.
   ///
   /// This class template is used for the various permutations of category
@@ -1618,7 +1596,7 @@
     ObjCCategoryDecl *Current = nullptr;
 
     void findAcceptableCategory();
-    
+
   public:
     using value_type = ObjCCategoryDecl *;
     using reference = value_type;
@@ -1655,13 +1633,13 @@
   };
 
 private:
-  /// \brief Test whether the given category is visible.
+  /// Test whether the given category is visible.
   ///
   /// Used in the \c visible_categories_iterator.
   static bool isVisibleCategory(ObjCCategoryDecl *Cat);
-                        
+
 public:
-  /// \brief Iterator that walks over the list of categories and extensions
+  /// Iterator that walks over the list of categories and extensions
   /// that are visible, i.e., not hidden in a non-imported submodule.
   using visible_categories_iterator =
       filtered_category_iterator<isVisibleCategory>;
@@ -1674,30 +1652,30 @@
                                     visible_categories_end());
   }
 
-  /// \brief Retrieve an iterator to the beginning of the visible-categories
+  /// Retrieve an iterator to the beginning of the visible-categories
   /// list.
   visible_categories_iterator visible_categories_begin() const {
     return visible_categories_iterator(getCategoryListRaw());
   }
 
-  /// \brief Retrieve an iterator to the end of the visible-categories list.
+  /// Retrieve an iterator to the end of the visible-categories list.
   visible_categories_iterator visible_categories_end() const {
     return visible_categories_iterator();
   }
 
-  /// \brief Determine whether the visible-categories list is empty.
+  /// Determine whether the visible-categories list is empty.
   bool visible_categories_empty() const {
     return visible_categories_begin() == visible_categories_end();
   }
 
 private:
-  /// \brief Test whether the given category... is a category.
+  /// Test whether the given category... is a category.
   ///
   /// Used in the \c known_categories_iterator.
   static bool isKnownCategory(ObjCCategoryDecl *) { return true; }
 
 public:
-  /// \brief Iterator that walks over all of the known categories and
+  /// Iterator that walks over all of the known categories and
   /// extensions, including those that are hidden.
   using known_categories_iterator = filtered_category_iterator<isKnownCategory>;
   using known_categories_range =
@@ -1708,30 +1686,30 @@
                                   known_categories_end());
   }
 
-  /// \brief Retrieve an iterator to the beginning of the known-categories
+  /// Retrieve an iterator to the beginning of the known-categories
   /// list.
   known_categories_iterator known_categories_begin() const {
     return known_categories_iterator(getCategoryListRaw());
   }
 
-  /// \brief Retrieve an iterator to the end of the known-categories list.
+  /// Retrieve an iterator to the end of the known-categories list.
   known_categories_iterator known_categories_end() const {
     return known_categories_iterator();
   }
 
-  /// \brief Determine whether the known-categories list is empty.
+  /// Determine whether the known-categories list is empty.
   bool known_categories_empty() const {
     return known_categories_begin() == known_categories_end();
   }
 
 private:
-  /// \brief Test whether the given category is a visible extension.
+  /// Test whether the given category is a visible extension.
   ///
   /// Used in the \c visible_extensions_iterator.
   static bool isVisibleExtension(ObjCCategoryDecl *Cat);
 
 public:
-  /// \brief Iterator that walks over all of the visible extensions, skipping
+  /// Iterator that walks over all of the visible extensions, skipping
   /// any that are known but hidden.
   using visible_extensions_iterator =
       filtered_category_iterator<isVisibleExtension>;
@@ -1744,34 +1722,34 @@
                                     visible_extensions_end());
   }
 
-  /// \brief Retrieve an iterator to the beginning of the visible-extensions
+  /// Retrieve an iterator to the beginning of the visible-extensions
   /// list.
   visible_extensions_iterator visible_extensions_begin() const {
     return visible_extensions_iterator(getCategoryListRaw());
   }
 
-  /// \brief Retrieve an iterator to the end of the visible-extensions list.
+  /// Retrieve an iterator to the end of the visible-extensions list.
   visible_extensions_iterator visible_extensions_end() const {
     return visible_extensions_iterator();
   }
 
-  /// \brief Determine whether the visible-extensions list is empty.
+  /// Determine whether the visible-extensions list is empty.
   bool visible_extensions_empty() const {
     return visible_extensions_begin() == visible_extensions_end();
   }
 
 private:
-  /// \brief Test whether the given category is an extension.
+  /// Test whether the given category is an extension.
   ///
   /// Used in the \c known_extensions_iterator.
   static bool isKnownExtension(ObjCCategoryDecl *Cat);
-  
+
 public:
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
   friend class ASTReader;
 
-  /// \brief Iterator that walks over all of the known extensions.
+  /// Iterator that walks over all of the known extensions.
   using known_extensions_iterator =
       filtered_category_iterator<isKnownExtension>;
   using known_extensions_range =
@@ -1782,36 +1760,36 @@
                                   known_extensions_end());
   }
 
-  /// \brief Retrieve an iterator to the beginning of the known-extensions
+  /// Retrieve an iterator to the beginning of the known-extensions
   /// list.
   known_extensions_iterator known_extensions_begin() const {
     return known_extensions_iterator(getCategoryListRaw());
   }
-  
-  /// \brief Retrieve an iterator to the end of the known-extensions list.
+
+  /// Retrieve an iterator to the end of the known-extensions list.
   known_extensions_iterator known_extensions_end() const {
     return known_extensions_iterator();
   }
 
-  /// \brief Determine whether the known-extensions list is empty.
+  /// Determine whether the known-extensions list is empty.
   bool known_extensions_empty() const {
     return known_extensions_begin() == known_extensions_end();
   }
 
-  /// \brief Retrieve the raw pointer to the start of the category/extension
+  /// Retrieve the raw pointer to the start of the category/extension
   /// list.
   ObjCCategoryDecl* getCategoryListRaw() const {
     // FIXME: Should make sure no callers ever do this.
     if (!hasDefinition())
       return nullptr;
-    
+
     if (data().ExternallyCompleted)
       LoadExternalDefinition();
 
     return data().CategoryList;
   }
 
-  /// \brief Set the raw pointer to the start of the category/extension
+  /// Set the raw pointer to the start of the category/extension
   /// list.
   void setCategoryListRaw(ObjCCategoryDecl *category) {
     data().CategoryList = category;
@@ -1831,7 +1809,7 @@
     while (I != nullptr) {
       if (declaresSameEntity(this, I))
         return true;
-      
+
       I = I->getSuperClass();
     }
     return false;
@@ -1841,7 +1819,7 @@
   /// to be incompatible with __weak references. Returns true if it is.
   bool isArcWeakrefUnavailable() const;
 
-  /// isObjCRequiresPropertyDefs - Checks that a class or one of its super 
+  /// isObjCRequiresPropertyDefs - Checks that a class or one of its super
   /// classes must not be auto-synthesized. Returns class decl. if it must not
   /// be; 0, otherwise.
   const ObjCInterfaceDecl *isObjCRequiresPropertyDefs() const;
@@ -1854,7 +1832,7 @@
   }
 
   ObjCProtocolDecl *lookupNestedProtocol(IdentifierInfo *Name);
-                          
+
   // Lookup a method. First, we search locally. If a method isn't
   // found, we search referenced protocols and class categories.
   ObjCMethodDecl *lookupMethod(Selector Sel, bool isInstance,
@@ -1874,7 +1852,7 @@
 
   ObjCInterfaceDecl *lookupInheritedClass(const IdentifierInfo *ICName);
 
-  /// \brief Lookup a method in the classes implementation hierarchy.
+  /// Lookup a method in the classes implementation hierarchy.
   ObjCMethodDecl *lookupPrivateMethod(const Selector &Sel,
                                       bool Instance=true) const;
 
@@ -1882,7 +1860,7 @@
     return lookupPrivateMethod(Sel, false);
   }
 
-  /// \brief Lookup a setter or getter in the class hierarchy,
+  /// Lookup a setter or getter in the class hierarchy,
   /// including in all categories except for category passed
   /// as argument.
   ObjCMethodDecl *lookupPropertyAccessor(const Selector Sel,
@@ -1893,14 +1871,14 @@
                         true /* followsSuper */,
                         Cat);
   }
-                          
-  SourceLocation getEndOfDefinitionLoc() const { 
+
+  SourceLocation getEndOfDefinitionLoc() const {
     if (!hasDefinition())
       return getLocation();
-    
-    return data().EndLoc; 
+
+    return data().EndLoc;
   }
-                          
+
   void setEndOfDefinitionLoc(SourceLocation LE) { data().EndLoc = LE; }
 
   /// Retrieve the starting location of the superclass.
@@ -1909,7 +1887,7 @@
   /// isImplicitInterfaceDecl - check that this is an implicitly declared
   /// ObjCInterfaceDecl node. This is for legacy objective-c \@implementation
   /// declaration without an \@interface declaration.
-  bool isImplicitInterfaceDecl() const { 
+  bool isImplicitInterfaceDecl() const {
     return hasDefinition() ? data().Definition->isImplicit() : isImplicit();
   }
 
@@ -1987,8 +1965,8 @@
                               bool synthesized=false);
 
   static ObjCIvarDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
-  /// \brief Return the class interface that this ivar is logically contained
+
+  /// Return the class interface that this ivar is logically contained
   /// in; this is either the interface where the ivar was declared, or the
   /// interface the ivar is conceptually a part of in the case of synthesized
   /// ivars.
@@ -2027,7 +2005,7 @@
   unsigned Synthesized : 1;
 };
 
-/// \brief Represents a field declaration created by an \@defs(...).
+/// Represents a field declaration created by an \@defs(...).
 class ObjCAtDefsFieldDecl : public FieldDecl {
   ObjCAtDefsFieldDecl(DeclContext *DC, SourceLocation StartLoc,
                       SourceLocation IdLoc, IdentifierInfo *Id,
@@ -2045,13 +2023,13 @@
                                      QualType T, Expr *BW);
 
   static ObjCAtDefsFieldDecl *CreateDeserialized(ASTContext &C, unsigned ID);
-  
+
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
   static bool classofKind(Kind K) { return K == ObjCAtDefsField; }
 };
 
-/// \brief Represents an Objective-C protocol declaration.
+/// Represents an Objective-C protocol declaration.
 ///
 /// Objective-C protocols declare a pure abstract type (i.e., no instance
 /// variables are permitted).  Protocols originally drew inspiration from
@@ -2083,14 +2061,14 @@
 class ObjCProtocolDecl : public ObjCContainerDecl,
                          public Redeclarable<ObjCProtocolDecl> {
   struct DefinitionData {
-    // \brief The declaration that defines this protocol.
+    // The declaration that defines this protocol.
     ObjCProtocolDecl *Definition;
 
-    /// \brief Referenced protocols
-    ObjCProtocolList ReferencedProtocols;    
+    /// Referenced protocols
+    ObjCProtocolList ReferencedProtocols;
   };
 
-  /// \brief Contains a pointer to the data associated with this class,
+  /// Contains a pointer to the data associated with this class,
   /// which will be NULL if this class has not yet been defined.
   ///
   /// The bit indicates when we don't need to check for out-of-date
@@ -2107,7 +2085,7 @@
     assert(Data.getPointer() && "Objective-C protocol has no definition!");
     return *Data.getPointer();
   }
-  
+
   void allocateDefinitionData();
 
   using redeclarable_base = Redeclarable<ObjCProtocolDecl>;
@@ -2152,15 +2130,15 @@
   protocol_iterator protocol_begin() const {
     if (!hasDefinition())
       return protocol_iterator();
-    
+
     return data().ReferencedProtocols.begin();
   }
 
-  protocol_iterator protocol_end() const { 
+  protocol_iterator protocol_end() const {
     if (!hasDefinition())
       return protocol_iterator();
-    
-    return data().ReferencedProtocols.end(); 
+
+    return data().ReferencedProtocols.end();
   }
 
   using protocol_loc_iterator = ObjCProtocolList::loc_iterator;
@@ -2173,22 +2151,22 @@
   protocol_loc_iterator protocol_loc_begin() const {
     if (!hasDefinition())
       return protocol_loc_iterator();
-    
+
     return data().ReferencedProtocols.loc_begin();
   }
 
   protocol_loc_iterator protocol_loc_end() const {
     if (!hasDefinition())
       return protocol_loc_iterator();
-    
+
     return data().ReferencedProtocols.loc_end();
   }
 
-  unsigned protocol_size() const { 
+  unsigned protocol_size() const {
     if (!hasDefinition())
       return 0;
-    
-    return data().ReferencedProtocols.size(); 
+
+    return data().ReferencedProtocols.size();
   }
 
   /// setProtocolList - Set the list of protocols that this interface
@@ -2213,7 +2191,7 @@
     return lookupMethod(Sel, false/*isInstance*/);
   }
 
-  /// \brief Determine whether this protocol has a definition.
+  /// Determine whether this protocol has a definition.
   bool hasDefinition() const {
     // If the name of this protocol is out-of-date, bring it up-to-date, which
     // might bring in a definition.
@@ -2225,23 +2203,23 @@
     return Data.getPointer();
   }
 
-  /// \brief Retrieve the definition of this protocol, if any.
+  /// Retrieve the definition of this protocol, if any.
   ObjCProtocolDecl *getDefinition() {
     return hasDefinition()? Data.getPointer()->Definition : nullptr;
   }
 
-  /// \brief Retrieve the definition of this protocol, if any.
+  /// Retrieve the definition of this protocol, if any.
   const ObjCProtocolDecl *getDefinition() const {
     return hasDefinition()? Data.getPointer()->Definition : nullptr;
   }
 
-  /// \brief Determine whether this particular declaration is also the 
+  /// Determine whether this particular declaration is also the
   /// definition.
   bool isThisDeclarationADefinition() const {
     return getDefinition() == this;
   }
-  
-  /// \brief Starts the definition of this Objective-C protocol.
+
+  /// Starts the definition of this Objective-C protocol.
   void startDefinition();
 
   /// Produce a name to be used for protocol's metadata. It comes either via
@@ -2251,10 +2229,10 @@
   SourceRange getSourceRange() const override LLVM_READONLY {
     if (isThisDeclarationADefinition())
       return ObjCContainerDecl::getSourceRange();
-   
+
     return SourceRange(getAtStartLoc(), getLocation());
   }
-   
+
   using redecl_range = redeclarable_base::redecl_range;
   using redecl_iterator = redeclarable_base::redecl_iterator;
 
@@ -2310,13 +2288,13 @@
   /// FIXME: this should not be a singly-linked list.  Move storage elsewhere.
   ObjCCategoryDecl *NextClassCategory = nullptr;
 
-  /// \brief The location of the category name in this declaration.
+  /// The location of the category name in this declaration.
   SourceLocation CategoryNameLoc;
 
   /// class extension may have private ivars.
   SourceLocation IvarLBraceLoc;
   SourceLocation IvarRBraceLoc;
-  
+
   ObjCCategoryDecl(DeclContext *DC, SourceLocation AtLoc,
                    SourceLocation ClassNameLoc, SourceLocation CategoryNameLoc,
                    IdentifierInfo *Id, ObjCInterfaceDecl *IDecl,
@@ -2400,7 +2378,7 @@
 
   ObjCCategoryDecl *getNextClassCategory() const { return NextClassCategory; }
 
-  /// \brief Retrieve the pointer to the next stored category (or extension),
+  /// Retrieve the pointer to the next stored category (or extension),
   /// which may be hidden.
   ObjCCategoryDecl *getNextClassCategoryRaw() const {
     return NextClassCategory;
@@ -2431,7 +2409,7 @@
 
   SourceLocation getCategoryNameLoc() const { return CategoryNameLoc; }
   void setCategoryNameLoc(SourceLocation Loc) { CategoryNameLoc = Loc; }
-  
+
   void setIvarLBraceLoc(SourceLocation Loc) { IvarLBraceLoc = Loc; }
   SourceLocation getIvarLBraceLoc() const { return IvarLBraceLoc; }
   void setIvarRBraceLoc(SourceLocation Loc) { IvarRBraceLoc = Loc; }
@@ -2576,9 +2554,9 @@
   /// \@implementation may have private ivars.
   SourceLocation IvarLBraceLoc;
   SourceLocation IvarRBraceLoc;
-  
+
   /// Support for ivar initialization.
-  /// \brief The arguments used to initialize the ivars
+  /// The arguments used to initialize the ivars
   LazyCXXCtorInitializersPtr IvarInitializers;
   unsigned NumIvarInitializers = 0;
 
@@ -2594,7 +2572,7 @@
                          ObjCInterfaceDecl *superDecl,
                          SourceLocation nameLoc, SourceLocation atStartLoc,
                          SourceLocation superLoc = SourceLocation(),
-                         SourceLocation IvarLBraceLoc=SourceLocation(), 
+                         SourceLocation IvarLBraceLoc=SourceLocation(),
                          SourceLocation IvarRBraceLoc=SourceLocation())
       : ObjCImplDecl(ObjCImplementation, DC, classInterface,
                      classInterface ? classInterface->getIdentifier()
@@ -2616,7 +2594,7 @@
                                         SourceLocation nameLoc,
                                         SourceLocation atStartLoc,
                                      SourceLocation superLoc = SourceLocation(),
-                                        SourceLocation IvarLBraceLoc=SourceLocation(), 
+                                        SourceLocation IvarLBraceLoc=SourceLocation(),
                                         SourceLocation IvarRBraceLoc=SourceLocation());
 
   static ObjCImplementationDecl *CreateDeserialized(ASTContext &C, unsigned ID);
@@ -2694,13 +2672,13 @@
     return getIdentifier()->getName();
   }
 
-  /// @brief Get the name of the class associated with this interface.
+  /// Get the name of the class associated with this interface.
   //
   // FIXME: Move to StringRef API.
   std::string getNameAsString() const {
     return getName();
   }
-    
+
   /// Produce a name to be used for class's metadata. It comes either via
   /// class's objc_runtime_name attribute or class name.
   StringRef getObjCRuntimeNameAsString() const;
@@ -2715,7 +2693,7 @@
   SourceLocation getIvarLBraceLoc() const { return IvarLBraceLoc; }
   void setIvarRBraceLoc(SourceLocation Loc) { IvarRBraceLoc = Loc; }
   SourceLocation getIvarRBraceLoc() const { return IvarRBraceLoc; }
-  
+
   using ivar_iterator = specific_decl_iterator<ObjCIvarDecl>;
   using ivar_range = llvm::iterator_range<specific_decl_iterator<ObjCIvarDecl>>;
 
@@ -2760,9 +2738,9 @@
                                          SourceLocation L, IdentifierInfo *Id,
                                          ObjCInterfaceDecl* aliasedClass);
 
-  static ObjCCompatibleAliasDecl *CreateDeserialized(ASTContext &C, 
+  static ObjCCompatibleAliasDecl *CreateDeserialized(ASTContext &C,
                                                      unsigned ID);
-  
+
   const ObjCInterfaceDecl *getClassInterface() const { return AliasedClass; }
   ObjCInterfaceDecl *getClassInterface() { return AliasedClass; }
   void setClassInterface(ObjCInterfaceDecl *D) { AliasedClass = D; }
@@ -2785,7 +2763,7 @@
 private:
   SourceLocation AtLoc;   // location of \@synthesize or \@dynamic
 
-  /// \brief For \@synthesize, the location of the ivar, if it was written in
+  /// For \@synthesize, the location of the ivar, if it was written in
   /// the source code.
   ///
   /// \code
@@ -2831,7 +2809,11 @@
 
   SourceRange getSourceRange() const override LLVM_READONLY;
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
   void setAtLoc(SourceLocation Loc) { AtLoc = Loc; }
 
   ObjCPropertyDecl *getPropertyDecl() const {
@@ -2854,7 +2836,7 @@
     this->IvarLoc = IvarLoc;
   }
 
-  /// \brief For \@synthesize, returns true if an ivar name was explicitly
+  /// For \@synthesize, returns true if an ivar name was explicitly
   /// specified.
   ///
   /// \code
diff --git a/linux-x64/clang/include/clang/AST/DeclOpenMP.h b/linux-x64/clang/include/clang/AST/DeclOpenMP.h
index 76fbe01..1f2aaa1 100644
--- a/linux-x64/clang/include/clang/AST/DeclOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/DeclOpenMP.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines OpenMP nodes for declarative directives.
+/// This file defines OpenMP nodes for declarative directives.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -24,7 +24,7 @@
 
 namespace clang {
 
-/// \brief This represents '#pragma omp threadprivate ...' directive.
+/// This represents '#pragma omp threadprivate ...' directive.
 /// For example, in the following, both 'a' and 'A::b' are threadprivate:
 ///
 /// \code
@@ -89,7 +89,7 @@
   static bool classofKind(Kind K) { return K == OMPThreadPrivate; }
 };
 
-/// \brief This represents '#pragma omp declare reduction ...' directive.
+/// This represents '#pragma omp declare reduction ...' directive.
 /// For example, in the following, declared reduction 'foo' for types 'int' and
 /// 'float':
 ///
@@ -100,6 +100,8 @@
 ///
 /// Here 'omp_out += omp_in' is a combiner and 'omp_priv = 0' is an initializer.
 class OMPDeclareReductionDecl final : public ValueDecl, public DeclContext {
+  // This class stores some data in DeclContext::OMPDeclareReductionDeclBits
+  // to save some space. Use the provided accessors to access it.
 public:
   enum InitKind {
     CallInit,   // Initialized by function call.
@@ -109,14 +111,12 @@
 
 private:
   friend class ASTDeclReader;
-  /// \brief Combiner for declare reduction construct.
+  /// Combiner for declare reduction construct.
   Expr *Combiner;
-  /// \brief Initializer for declare reduction construct.
+  /// Initializer for declare reduction construct.
   Expr *Initializer;
-  /// Kind of initializer - function call or omp_priv<init_expr> initializtion.
-  InitKind InitializerKind = CallInit;
 
-  /// \brief Reference to the previous declare reduction construct in the same
+  /// Reference to the previous declare reduction construct in the same
   /// scope with the same name. Required for proper templates instantiation if
   /// the declare reduction construct is declared inside compound statement.
   LazyDeclPtr PrevDeclInScope;
@@ -125,43 +125,42 @@
 
   OMPDeclareReductionDecl(Kind DK, DeclContext *DC, SourceLocation L,
                           DeclarationName Name, QualType Ty,
-                          OMPDeclareReductionDecl *PrevDeclInScope)
-      : ValueDecl(DK, DC, L, Name, Ty), DeclContext(DK), Combiner(nullptr),
-        Initializer(nullptr), InitializerKind(CallInit),
-        PrevDeclInScope(PrevDeclInScope) {}
+                          OMPDeclareReductionDecl *PrevDeclInScope);
 
   void setPrevDeclInScope(OMPDeclareReductionDecl *Prev) {
     PrevDeclInScope = Prev;
   }
 
 public:
-  /// \brief Create declare reduction node.
+  /// Create declare reduction node.
   static OMPDeclareReductionDecl *
   Create(ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,
          QualType T, OMPDeclareReductionDecl *PrevDeclInScope);
-  /// \brief Create deserialized declare reduction node.
+  /// Create deserialized declare reduction node.
   static OMPDeclareReductionDecl *CreateDeserialized(ASTContext &C,
                                                      unsigned ID);
 
-  /// \brief Get combiner expression of the declare reduction construct.
+  /// Get combiner expression of the declare reduction construct.
   Expr *getCombiner() { return Combiner; }
   const Expr *getCombiner() const { return Combiner; }
-  /// \brief Set combiner expression for the declare reduction construct.
+  /// Set combiner expression for the declare reduction construct.
   void setCombiner(Expr *E) { Combiner = E; }
 
-  /// \brief Get initializer expression (if specified) of the declare reduction
+  /// Get initializer expression (if specified) of the declare reduction
   /// construct.
   Expr *getInitializer() { return Initializer; }
   const Expr *getInitializer() const { return Initializer; }
   /// Get initializer kind.
-  InitKind getInitializerKind() const { return InitializerKind; }
-  /// \brief Set initializer expression for the declare reduction construct.
+  InitKind getInitializerKind() const {
+    return static_cast<InitKind>(OMPDeclareReductionDeclBits.InitializerKind);
+  }
+  /// Set initializer expression for the declare reduction construct.
   void setInitializer(Expr *E, InitKind IK) {
     Initializer = E;
-    InitializerKind = IK;
+    OMPDeclareReductionDeclBits.InitializerKind = IK;
   }
 
-  /// \brief Get reference to previous declare reduction construct in the same
+  /// Get reference to previous declare reduction construct in the same
   /// scope with the same name.
   OMPDeclareReductionDecl *getPrevDeclInScope();
   const OMPDeclareReductionDecl *getPrevDeclInScope() const;
@@ -189,8 +188,9 @@
   void anchor() override;
 
   OMPCapturedExprDecl(ASTContext &C, DeclContext *DC, IdentifierInfo *Id,
-                      QualType Type, SourceLocation StartLoc)
-      : VarDecl(OMPCapturedExpr, C, DC, StartLoc, StartLoc, Id, Type, nullptr,
+                      QualType Type, TypeSourceInfo *TInfo,
+                      SourceLocation StartLoc)
+      : VarDecl(OMPCapturedExpr, C, DC, StartLoc, StartLoc, Id, Type, TInfo,
                 SC_None) {
     setImplicit();
   }
diff --git a/linux-x64/clang/include/clang/AST/DeclTemplate.h b/linux-x64/clang/include/clang/AST/DeclTemplate.h
index 9c68352..e0ea7cb 100644
--- a/linux-x64/clang/include/clang/AST/DeclTemplate.h
+++ b/linux-x64/clang/include/clang/AST/DeclTemplate.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the C++ template declaration subclasses.
+/// Defines the C++ template declaration subclasses.
 //
 //===----------------------------------------------------------------------===//
 
@@ -56,14 +56,14 @@
 class VarTemplateDecl;
 class VarTemplatePartialSpecializationDecl;
 
-/// \brief Stores a template parameter of any kind.
+/// Stores a template parameter of any kind.
 using TemplateParameter =
     llvm::PointerUnion3<TemplateTypeParmDecl *, NonTypeTemplateParmDecl *,
                         TemplateTemplateParmDecl *>;
 
 NamedDecl *getAsNamedDecl(TemplateParameter P);
 
-/// \brief Stores a list of template parameters for a TemplateDecl and its
+/// Stores a list of template parameters for a TemplateDecl and its
 /// derived classes.
 class TemplateParameterList final
     : private llvm::TrailingObjects<TemplateParameterList, NamedDecl *,
@@ -110,10 +110,10 @@
                                        SourceLocation RAngleLoc,
                                        Expr *RequiresClause);
 
-  /// \brief Iterates through the template parameters in this list.
+  /// Iterates through the template parameters in this list.
   using iterator = NamedDecl **;
 
-  /// \brief Iterates through the template parameters in this list.
+  /// Iterates through the template parameters in this list.
   using const_iterator = NamedDecl * const *;
 
   iterator begin() { return getTrailingObjects<NamedDecl *>(); }
@@ -139,32 +139,32 @@
     return begin()[Idx];
   }
 
-  /// \brief Returns the minimum number of arguments needed to form a
+  /// Returns the minimum number of arguments needed to form a
   /// template specialization.
   ///
   /// This may be fewer than the number of template parameters, if some of
   /// the parameters have default arguments or if there is a parameter pack.
   unsigned getMinRequiredArguments() const;
 
-  /// \brief Get the depth of this template parameter list in the set of
+  /// Get the depth of this template parameter list in the set of
   /// template parameter lists.
   ///
   /// The first template parameter list in a declaration will have depth 0,
   /// the second template parameter list will have depth 1, etc.
   unsigned getDepth() const;
 
-  /// \brief Determine whether this template parameter list contains an
+  /// Determine whether this template parameter list contains an
   /// unexpanded parameter pack.
   bool containsUnexpandedParameterPack() const {
     return ContainsUnexpandedParameterPack;
   }
 
-  /// \brief The constraint-expression of the associated requires-clause.
+  /// The constraint-expression of the associated requires-clause.
   Expr *getRequiresClause() {
     return HasRequiresClause ? *getTrailingObjects<Expr *>() : nullptr;
   }
 
-  /// \brief The constraint-expression of the associated requires-clause.
+  /// The constraint-expression of the associated requires-clause.
   const Expr *getRequiresClause() const {
     return HasRequiresClause ? *getTrailingObjects<Expr *>() : nullptr;
   }
@@ -182,7 +182,7 @@
   using FixedSizeStorageOwner = TrailingObjects::FixedSizeStorageOwner;
 };
 
-/// \brief Stores a list of template parameters and the associated
+/// Stores a list of template parameters and the associated
 /// requires-clause (if any) for a TemplateDecl and its derived classes.
 /// Suitable for creating on the stack.
 template <size_t N, bool HasRequiresClause>
@@ -206,13 +206,13 @@
                  TemplateLoc, LAngleLoc, Params, RAngleLoc, RequiresClause))) {}
 };
 
-/// \brief A template argument list.
+/// A template argument list.
 class TemplateArgumentList final
     : private llvm::TrailingObjects<TemplateArgumentList, TemplateArgument> {
-  /// \brief The template argument list.
+  /// The template argument list.
   const TemplateArgument *Arguments;
 
-  /// \brief The number of template arguments in this template
+  /// The number of template arguments in this template
   /// argument list.
   unsigned NumArguments;
 
@@ -226,23 +226,23 @@
   TemplateArgumentList(const TemplateArgumentList &) = delete;
   TemplateArgumentList &operator=(const TemplateArgumentList &) = delete;
 
-  /// \brief Type used to indicate that the template argument list itself is a
+  /// Type used to indicate that the template argument list itself is a
   /// stack object. It does not own its template arguments.
   enum OnStackType { OnStack };
 
-  /// \brief Create a new template argument list that copies the given set of
+  /// Create a new template argument list that copies the given set of
   /// template arguments.
   static TemplateArgumentList *CreateCopy(ASTContext &Context,
                                           ArrayRef<TemplateArgument> Args);
 
-  /// \brief Construct a new, temporary template argument list on the stack.
+  /// Construct a new, temporary template argument list on the stack.
   ///
   /// The template argument list does not own the template arguments
   /// provided.
   explicit TemplateArgumentList(OnStackType, ArrayRef<TemplateArgument> Args)
       : Arguments(Args.data()), NumArguments(Args.size()) {}
 
-  /// \brief Produces a shallow copy of the given template argument list.
+  /// Produces a shallow copy of the given template argument list.
   ///
   /// This operation assumes that the input argument list outlives it.
   /// This takes the list as a pointer to avoid looking like a copy
@@ -251,25 +251,25 @@
   explicit TemplateArgumentList(const TemplateArgumentList *Other)
       : Arguments(Other->data()), NumArguments(Other->size()) {}
 
-  /// \brief Retrieve the template argument at a given index.
+  /// Retrieve the template argument at a given index.
   const TemplateArgument &get(unsigned Idx) const {
     assert(Idx < NumArguments && "Invalid template argument index");
     return data()[Idx];
   }
 
-  /// \brief Retrieve the template argument at a given index.
+  /// Retrieve the template argument at a given index.
   const TemplateArgument &operator[](unsigned Idx) const { return get(Idx); }
 
-  /// \brief Produce this as an array ref.
+  /// Produce this as an array ref.
   ArrayRef<TemplateArgument> asArray() const {
     return llvm::makeArrayRef(data(), size());
   }
 
-  /// \brief Retrieve the number of template arguments in this
+  /// Retrieve the number of template arguments in this
   /// template argument list.
   unsigned size() const { return NumArguments; }
 
-  /// \brief Retrieve a pointer to the template argument list.
+  /// Retrieve a pointer to the template argument list.
   const TemplateArgument *data() const { return Arguments; }
 };
 
@@ -365,7 +365,7 @@
 // Kinds of Templates
 //===----------------------------------------------------------------------===//
 
-/// \brief Stores the template parameter list and associated constraints for
+/// Stores the template parameter list and associated constraints for
 /// \c TemplateDecl objects that track associated constraints.
 class ConstrainedTemplateDeclInfo {
   friend TemplateDecl;
@@ -391,7 +391,7 @@
 };
 
 
-/// \brief The base class of all kinds of template declarations (e.g.,
+/// The base class of all kinds of template declarations (e.g.,
 /// class, function, etc.).
 ///
 /// The TemplateDecl class stores the list of template parameters and a
@@ -467,7 +467,7 @@
 protected:
   NamedDecl *TemplatedDecl;
 
-  /// \brief The template parameter list and optional requires-clause
+  /// The template parameter list and optional requires-clause
   /// associated with this declaration; alternatively, a
   /// \c ConstrainedTemplateDeclInfo if the associated constraints of the
   /// template are being tracked by this particular declaration.
@@ -492,7 +492,7 @@
   }
 
 public:
-  /// \brief Initialize the underlying templated declaration and
+  /// Initialize the underlying templated declaration and
   /// template parameters.
   void init(NamedDecl *templatedDecl, TemplateParameterList* templateParams) {
     assert(!TemplatedDecl && "TemplatedDecl already set!");
@@ -502,7 +502,7 @@
   }
 };
 
-/// \brief Provides information about a function template specialization,
+/// Provides information about a function template specialization,
 /// which is a FunctionDecl that has been explicitly specialization or
 /// instantiated from a function template.
 class FunctionTemplateSpecializationInfo : public llvm::FoldingSetNode {
@@ -525,31 +525,31 @@
          const TemplateArgumentListInfo *TemplateArgsAsWritten,
          SourceLocation POI);
 
-  /// \brief The function template specialization that this structure
+  /// The function template specialization that this structure
   /// describes.
   FunctionDecl *Function;
 
-  /// \brief The function template from which this function template
+  /// The function template from which this function template
   /// specialization was generated.
   ///
   /// The two bits contain the top 4 values of TemplateSpecializationKind.
   llvm::PointerIntPair<FunctionTemplateDecl *, 2> Template;
 
-  /// \brief The template arguments used to produce the function template
+  /// The template arguments used to produce the function template
   /// specialization from the function template.
   const TemplateArgumentList *TemplateArguments;
 
-  /// \brief The template arguments as written in the sources, if provided.
+  /// The template arguments as written in the sources, if provided.
   const ASTTemplateArgumentListInfo *TemplateArgumentsAsWritten;
 
-  /// \brief The point at which this function template specialization was
+  /// The point at which this function template specialization was
   /// first instantiated.
   SourceLocation PointOfInstantiation;
 
-  /// \brief Retrieve the template from which this function was specialized.
+  /// Retrieve the template from which this function was specialized.
   FunctionTemplateDecl *getTemplate() const { return Template.getPointer(); }
 
-  /// \brief Determine what kind of template specialization this is.
+  /// Determine what kind of template specialization this is.
   TemplateSpecializationKind getTemplateSpecializationKind() const {
     return (TemplateSpecializationKind)(Template.getInt() + 1);
   }
@@ -558,7 +558,7 @@
     return getTemplateSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
-  /// \brief True if this declaration is an explicit specialization,
+  /// True if this declaration is an explicit specialization,
   /// explicit instantiation declaration, or explicit instantiation
   /// definition.
   bool isExplicitInstantiationOrSpecialization() const {
@@ -566,14 +566,14 @@
         getTemplateSpecializationKind());
   }
 
-  /// \brief Set the template specialization kind.
+  /// Set the template specialization kind.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK) {
     assert(TSK != TSK_Undeclared &&
          "Cannot encode TSK_Undeclared for a function template specialization");
     Template.setInt(TSK - 1);
   }
 
-  /// \brief Retrieve the first point of instantiation of this function
+  /// Retrieve the first point of instantiation of this function
   /// template specialization.
   ///
   /// The point of instantiation may be an invalid source location if this
@@ -582,7 +582,7 @@
     return PointOfInstantiation;
   }
 
-  /// \brief Set the (first) point of instantiation of this function template
+  /// Set the (first) point of instantiation of this function template
   /// specialization.
   void setPointOfInstantiation(SourceLocation POI) {
     PointOfInstantiation = POI;
@@ -602,7 +602,7 @@
   }
 };
 
-/// \brief Provides information a specialization of a member of a class
+/// Provides information a specialization of a member of a class
 /// template, which may be a member function, static data member,
 /// member class or member enumeration.
 class MemberSpecializationInfo {
@@ -622,11 +622,11 @@
            "Cannot encode undeclared template specializations for members");
   }
 
-  /// \brief Retrieve the member declaration from which this member was
+  /// Retrieve the member declaration from which this member was
   /// instantiated.
   NamedDecl *getInstantiatedFrom() const { return MemberAndTSK.getPointer(); }
 
-  /// \brief Determine what kind of template specialization this is.
+  /// Determine what kind of template specialization this is.
   TemplateSpecializationKind getTemplateSpecializationKind() const {
     return (TemplateSpecializationKind)(MemberAndTSK.getInt() + 1);
   }
@@ -635,27 +635,27 @@
     return getTemplateSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
-  /// \brief Set the template specialization kind.
+  /// Set the template specialization kind.
   void setTemplateSpecializationKind(TemplateSpecializationKind TSK) {
     assert(TSK != TSK_Undeclared &&
            "Cannot encode undeclared template specializations for members");
     MemberAndTSK.setInt(TSK - 1);
   }
 
-  /// \brief Retrieve the first point of instantiation of this member.
+  /// Retrieve the first point of instantiation of this member.
   /// If the point of instantiation is an invalid location, then this member
   /// has not yet been instantiated.
   SourceLocation getPointOfInstantiation() const {
     return PointOfInstantiation;
   }
 
-  /// \brief Set the first point of instantiation.
+  /// Set the first point of instantiation.
   void setPointOfInstantiation(SourceLocation POI) {
     PointOfInstantiation = POI;
   }
 };
 
-/// \brief Provides information about a dependent function-template
+/// Provides information about a dependent function-template
 /// specialization declaration.
 ///
 /// Since explicit function template specialization and instantiation
@@ -700,25 +700,25 @@
   Create(ASTContext &Context, const UnresolvedSetImpl &Templates,
          const TemplateArgumentListInfo &TemplateArgs);
 
-  /// \brief Returns the number of function templates that this might
+  /// Returns the number of function templates that this might
   /// be a specialization of.
   unsigned getNumTemplates() const { return NumTemplates; }
 
-  /// \brief Returns the i'th template candidate.
+  /// Returns the i'th template candidate.
   FunctionTemplateDecl *getTemplate(unsigned I) const {
     assert(I < getNumTemplates() && "template index out of range");
     return getTrailingObjects<FunctionTemplateDecl *>()[I];
   }
 
-  /// \brief Returns the explicit template arguments that were given.
+  /// Returns the explicit template arguments that were given.
   const TemplateArgumentLoc *getTemplateArgs() const {
     return getTrailingObjects<TemplateArgumentLoc>();
   }
 
-  /// \brief Returns the number of explicit template arguments that were given.
+  /// Returns the number of explicit template arguments that were given.
   unsigned getNumTemplateArgs() const { return NumArgs; }
 
-  /// \brief Returns the nth template argument.
+  /// Returns the nth template argument.
   const TemplateArgumentLoc &getTemplateArg(unsigned I) const {
     assert(I < getNumTemplateArgs() && "template arg index out of range");
     return getTemplateArgs()[I];
@@ -734,8 +734,8 @@
 };
 
 /// Declaration of a redeclarable template.
-class RedeclarableTemplateDecl : public TemplateDecl, 
-                                 public Redeclarable<RedeclarableTemplateDecl> 
+class RedeclarableTemplateDecl : public TemplateDecl,
+                                 public Redeclarable<RedeclarableTemplateDecl>
 {
   using redeclarable_base = Redeclarable<RedeclarableTemplateDecl>;
 
@@ -804,7 +804,7 @@
   struct CommonBase {
     CommonBase() : InstantiatedFromMember(nullptr, false) {}
 
-    /// \brief The template from which this was most
+    /// The template from which this was most
     /// directly instantiated (or null).
     ///
     /// The boolean value indicates whether this template
@@ -812,7 +812,7 @@
     llvm::PointerIntPair<RedeclarableTemplateDecl*, 1, bool>
       InstantiatedFromMember;
 
-    /// \brief If non-null, points to an array of specializations (including
+    /// If non-null, points to an array of specializations (including
     /// partial specializations) known only by their external declaration IDs.
     ///
     /// The first value in the array is the number of specializations/partial
@@ -820,11 +820,11 @@
     uint32_t *LazySpecializations = nullptr;
   };
 
-  /// \brief Pointer to the common data shared by all declarations of this
+  /// Pointer to the common data shared by all declarations of this
   /// template.
   mutable CommonBase *Common = nullptr;
-  
-  /// \brief Retrieves the "common" pointer shared by all (re-)declarations of
+
+  /// Retrieves the "common" pointer shared by all (re-)declarations of
   /// the same template. Calling this routine may implicitly allocate memory
   /// for the common pointer.
   CommonBase *getCommonPtr() const;
@@ -850,7 +850,7 @@
   friend class ASTReader;
   template <class decl_type> friend class RedeclarableTemplate;
 
-  /// \brief Retrieves the canonical declaration of this template.
+  /// Retrieves the canonical declaration of this template.
   RedeclarableTemplateDecl *getCanonicalDecl() override {
     return getFirstDecl();
   }
@@ -858,7 +858,7 @@
     return getFirstDecl();
   }
 
-  /// \brief Determines whether this template was a specialization of a
+  /// Determines whether this template was a specialization of a
   /// member template.
   ///
   /// In the following example, the function template \c X<int>::f and the
@@ -880,18 +880,18 @@
     return getCommonPtr()->InstantiatedFromMember.getInt();
   }
 
-  /// \brief Note that this member template is a specialization.
+  /// Note that this member template is a specialization.
   void setMemberSpecialization() {
     assert(getCommonPtr()->InstantiatedFromMember.getPointer() &&
            "Only member templates can be member template specializations");
     getCommonPtr()->InstantiatedFromMember.setInt(true);
   }
 
-  /// \brief Retrieve the member template from which this template was
-  /// instantiated, or nullptr if this template was not instantiated from a 
+  /// Retrieve the member template from which this template was
+  /// instantiated, or nullptr if this template was not instantiated from a
   /// member template.
   ///
-  /// A template is instantiated from a member template when the member 
+  /// A template is instantiated from a member template when the member
   /// template itself is part of a class template (or member thereof). For
   /// example, given
   ///
@@ -969,14 +969,14 @@
 protected:
   friend class FunctionDecl;
 
-  /// \brief Data that is common to all of the declarations of a given
+  /// Data that is common to all of the declarations of a given
   /// function template.
   struct Common : CommonBase {
-    /// \brief The function template specializations for this function
+    /// The function template specializations for this function
     /// template, including explicit specializations and instantiations.
     llvm::FoldingSetVector<FunctionTemplateSpecializationInfo> Specializations;
 
-    /// \brief The set of "injected" template arguments used within this
+    /// The set of "injected" template arguments used within this
     /// function template.
     ///
     /// This pointer refers to the template arguments (there are as
@@ -1000,12 +1000,12 @@
     return static_cast<Common *>(RedeclarableTemplateDecl::getCommonPtr());
   }
 
-  /// \brief Retrieve the set of function template specializations of this
+  /// Retrieve the set of function template specializations of this
   /// function template.
   llvm::FoldingSetVector<FunctionTemplateSpecializationInfo> &
   getSpecializations() const;
 
-  /// \brief Add a specialization of this function template.
+  /// Add a specialization of this function template.
   ///
   /// \param InsertPos Insert position in the FoldingSetVector, must have been
   ///        retrieved by an earlier call to findSpecialization().
@@ -1016,7 +1016,7 @@
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  /// \brief Load any lazily-loaded specializations from the external source.
+  /// Load any lazily-loaded specializations from the external source.
   void LoadLazySpecializations() const;
 
   /// Get the underlying function declaration of the template.
@@ -1030,7 +1030,7 @@
     return getTemplatedDecl()->isThisDeclarationADefinition();
   }
 
-  /// \brief Return the specialization with the provided arguments if it exists,
+  /// Return the specialization with the provided arguments if it exists,
   /// otherwise return the insertion point.
   FunctionDecl *findSpecialization(ArrayRef<TemplateArgument> Args,
                                    void *&InsertPos);
@@ -1044,7 +1044,7 @@
              RedeclarableTemplateDecl::getCanonicalDecl());
   }
 
-  /// \brief Retrieve the previous declaration of this function template, or
+  /// Retrieve the previous declaration of this function template, or
   /// nullptr if no such declaration exists.
   FunctionTemplateDecl *getPreviousDecl() {
     return cast_or_null<FunctionTemplateDecl>(
@@ -1084,7 +1084,7 @@
     return makeSpecIterator(getSpecializations(), true);
   }
 
-  /// \brief Retrieve the "injected" template arguments that correspond to the
+  /// Retrieve the "injected" template arguments that correspond to the
   /// template parameters of this function template.
   ///
   /// Although the C++ standard has no notion of the "injected" template
@@ -1093,14 +1093,14 @@
   /// template.
   ArrayRef<TemplateArgument> getInjectedTemplateArgs();
 
-  /// \brief Create a function template node.
+  /// Create a function template node.
   static FunctionTemplateDecl *Create(ASTContext &C, DeclContext *DC,
                                       SourceLocation L,
                                       DeclarationName Name,
                                       TemplateParameterList *Params,
                                       NamedDecl *Decl);
 
-  /// \brief Create an empty function template node.
+  /// Create an empty function template node.
   static FunctionTemplateDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
   // Implement isa/cast/dyncast support
@@ -1112,7 +1112,7 @@
 // Kinds of Template Parameters
 //===----------------------------------------------------------------------===//
 
-/// \brief Defines the position of a template parameter within a template
+/// Defines the position of a template parameter within a template
 /// parameter list.
 ///
 /// Because template parameter can be listed
@@ -1145,7 +1145,7 @@
   unsigned getIndex() const { return Position; }
 };
 
-/// \brief Declaration of a template type parameter.
+/// Declaration of a template type parameter.
 ///
 /// For example, "T" in
 /// \code
@@ -1155,13 +1155,13 @@
   /// Sema creates these on the stack during auto type deduction.
   friend class Sema;
 
-  /// \brief Whether this template type parameter was declaration with
+  /// Whether this template type parameter was declaration with
   /// the 'typename' keyword.
   ///
   /// If false, it was declared with the 'class' keyword.
   bool Typename : 1;
 
-  /// \brief The default template argument, if any.
+  /// The default template argument, if any.
   using DefArgStorage =
       DefaultArgStorage<TemplateTypeParmDecl, TypeSourceInfo *>;
   DefArgStorage DefaultArgument;
@@ -1178,10 +1178,10 @@
                                       unsigned D, unsigned P,
                                       IdentifierInfo *Id, bool Typename,
                                       bool ParameterPack);
-  static TemplateTypeParmDecl *CreateDeserialized(const ASTContext &C, 
+  static TemplateTypeParmDecl *CreateDeserialized(const ASTContext &C,
                                                   unsigned ID);
 
-  /// \brief Whether this template type parameter was declared with
+  /// Whether this template type parameter was declared with
   /// the 'typename' keyword.
   ///
   /// If not, it was declared with the 'class' keyword.
@@ -1189,57 +1189,57 @@
 
   const DefArgStorage &getDefaultArgStorage() const { return DefaultArgument; }
 
-  /// \brief Determine whether this template parameter has a default
+  /// Determine whether this template parameter has a default
   /// argument.
   bool hasDefaultArgument() const { return DefaultArgument.isSet(); }
 
-  /// \brief Retrieve the default argument, if any.
+  /// Retrieve the default argument, if any.
   QualType getDefaultArgument() const {
     return DefaultArgument.get()->getType();
   }
 
-  /// \brief Retrieves the default argument's source information, if any.
+  /// Retrieves the default argument's source information, if any.
   TypeSourceInfo *getDefaultArgumentInfo() const {
     return DefaultArgument.get();
   }
 
-  /// \brief Retrieves the location of the default argument declaration.
+  /// Retrieves the location of the default argument declaration.
   SourceLocation getDefaultArgumentLoc() const;
 
-  /// \brief Determines whether the default argument was inherited
+  /// Determines whether the default argument was inherited
   /// from a previous declaration of this template.
   bool defaultArgumentWasInherited() const {
     return DefaultArgument.isInherited();
   }
 
-  /// \brief Set the default argument for this template parameter.
+  /// Set the default argument for this template parameter.
   void setDefaultArgument(TypeSourceInfo *DefArg) {
     DefaultArgument.set(DefArg);
   }
 
-  /// \brief Set that this default argument was inherited from another
+  /// Set that this default argument was inherited from another
   /// parameter.
   void setInheritedDefaultArgument(const ASTContext &C,
                                    TemplateTypeParmDecl *Prev) {
     DefaultArgument.setInherited(C, Prev);
   }
 
-  /// \brief Removes the default argument of this template parameter.
+  /// Removes the default argument of this template parameter.
   void removeDefaultArgument() {
     DefaultArgument.clear();
   }
 
-  /// \brief Set whether this template type parameter was declared with
+  /// Set whether this template type parameter was declared with
   /// the 'typename' or 'class' keyword.
   void setDeclaredWithTypename(bool withTypename) { Typename = withTypename; }
 
-  /// \brief Retrieve the depth of the template parameter.
+  /// Retrieve the depth of the template parameter.
   unsigned getDepth() const;
 
-  /// \brief Retrieve the index of the template parameter.
+  /// Retrieve the index of the template parameter.
   unsigned getIndex() const;
 
-  /// \brief Returns whether this is a parameter pack.
+  /// Returns whether this is a parameter pack.
   bool isParameterPack() const;
 
   SourceRange getSourceRange() const override LLVM_READONLY;
@@ -1262,7 +1262,7 @@
   friend class ASTDeclReader;
   friend TrailingObjects;
 
-  /// \brief The default template argument, if any, and whether or not
+  /// The default template argument, if any, and whether or not
   /// it was inherited.
   using DefArgStorage = DefaultArgStorage<NonTypeTemplateParmDecl, Expr *>;
   DefArgStorage DefaultArgument;
@@ -1270,15 +1270,15 @@
   // FIXME: Collapse this into TemplateParamPosition; or, just move depth/index
   // down here to save memory.
 
-  /// \brief Whether this non-type template parameter is a parameter pack.
+  /// Whether this non-type template parameter is a parameter pack.
   bool ParameterPack;
 
-  /// \brief Whether this non-type template parameter is an "expanded"
+  /// Whether this non-type template parameter is an "expanded"
   /// parameter pack, meaning that its type is a pack expansion and we
   /// already know the set of types that expansion expands to.
   bool ExpandedParameterPack = false;
 
-  /// \brief The number of types in an expanded parameter pack.
+  /// The number of types in an expanded parameter pack.
   unsigned NumExpandedTypes = 0;
 
   size_t numTrailingObjects(
@@ -1312,12 +1312,12 @@
          QualType T, TypeSourceInfo *TInfo, ArrayRef<QualType> ExpandedTypes,
          ArrayRef<TypeSourceInfo *> ExpandedTInfos);
 
-  static NonTypeTemplateParmDecl *CreateDeserialized(ASTContext &C, 
+  static NonTypeTemplateParmDecl *CreateDeserialized(ASTContext &C,
                                                      unsigned ID);
-  static NonTypeTemplateParmDecl *CreateDeserialized(ASTContext &C, 
+  static NonTypeTemplateParmDecl *CreateDeserialized(ASTContext &C,
                                                      unsigned ID,
                                                      unsigned NumExpandedTypes);
-    
+
   using TemplateParmPosition::getDepth;
   using TemplateParmPosition::setDepth;
   using TemplateParmPosition::getPosition;
@@ -1328,23 +1328,23 @@
 
   const DefArgStorage &getDefaultArgStorage() const { return DefaultArgument; }
 
-  /// \brief Determine whether this template parameter has a default
+  /// Determine whether this template parameter has a default
   /// argument.
   bool hasDefaultArgument() const { return DefaultArgument.isSet(); }
 
-  /// \brief Retrieve the default argument, if any.
+  /// Retrieve the default argument, if any.
   Expr *getDefaultArgument() const { return DefaultArgument.get(); }
 
-  /// \brief Retrieve the location of the default argument, if any.
+  /// Retrieve the location of the default argument, if any.
   SourceLocation getDefaultArgumentLoc() const;
 
-  /// \brief Determines whether the default argument was inherited
+  /// Determines whether the default argument was inherited
   /// from a previous declaration of this template.
   bool defaultArgumentWasInherited() const {
     return DefaultArgument.isInherited();
   }
 
-  /// \brief Set the default argument for this template parameter, and
+  /// Set the default argument for this template parameter, and
   /// whether that default argument was inherited from another
   /// declaration.
   void setDefaultArgument(Expr *DefArg) { DefaultArgument.set(DefArg); }
@@ -1353,10 +1353,10 @@
     DefaultArgument.setInherited(C, Parm);
   }
 
-  /// \brief Removes the default argument of this template parameter.
+  /// Removes the default argument of this template parameter.
   void removeDefaultArgument() { DefaultArgument.clear(); }
 
-  /// \brief Whether this parameter is a non-type template parameter pack.
+  /// Whether this parameter is a non-type template parameter pack.
   ///
   /// If the parameter is a parameter pack, the type may be a
   /// \c PackExpansionType. In the following example, the \c Dims parameter
@@ -1367,7 +1367,7 @@
   /// \endcode
   bool isParameterPack() const { return ParameterPack; }
 
-  /// \brief Whether this parameter pack is a pack expansion.
+  /// Whether this parameter pack is a pack expansion.
   ///
   /// A non-type template parameter pack is a pack expansion if its type
   /// contains an unexpanded parameter pack. In this case, we will have
@@ -1376,7 +1376,7 @@
     return ParameterPack && getType()->getAs<PackExpansionType>();
   }
 
-  /// \brief Whether this parameter is a non-type template parameter pack
+  /// Whether this parameter is a non-type template parameter pack
   /// that has a known list of different types at different positions.
   ///
   /// A parameter pack is an expanded parameter pack when the original
@@ -1402,14 +1402,14 @@
   /// return the expansion types.
   bool isExpandedParameterPack() const { return ExpandedParameterPack; }
 
-  /// \brief Retrieves the number of expansion types in an expanded parameter
+  /// Retrieves the number of expansion types in an expanded parameter
   /// pack.
   unsigned getNumExpansionTypes() const {
     assert(ExpandedParameterPack && "Not an expansion parameter pack");
     return NumExpandedTypes;
   }
 
-  /// \brief Retrieve a particular expansion type within an expanded parameter
+  /// Retrieve a particular expansion type within an expanded parameter
   /// pack.
   QualType getExpansionType(unsigned I) const {
     assert(I < NumExpandedTypes && "Out-of-range expansion type index");
@@ -1418,7 +1418,7 @@
     return TypesAndInfos[I].first;
   }
 
-  /// \brief Retrieve a particular expansion type source info within an
+  /// Retrieve a particular expansion type source info within an
   /// expanded parameter pack.
   TypeSourceInfo *getExpansionTypeSourceInfo(unsigned I) const {
     assert(I < NumExpandedTypes && "Out-of-range expansion type index");
@@ -1444,20 +1444,20 @@
       protected TemplateParmPosition,
       private llvm::TrailingObjects<TemplateTemplateParmDecl,
                                     TemplateParameterList *> {
-  /// \brief The default template argument, if any.
+  /// The default template argument, if any.
   using DefArgStorage =
       DefaultArgStorage<TemplateTemplateParmDecl, TemplateArgumentLoc *>;
   DefArgStorage DefaultArgument;
 
-  /// \brief Whether this parameter is a parameter pack.
+  /// Whether this parameter is a parameter pack.
   bool ParameterPack;
 
-  /// \brief Whether this template template parameter is an "expanded"
+  /// Whether this template template parameter is an "expanded"
   /// parameter pack, meaning that it is a pack expansion and we
   /// already know the set of template parameters that expansion expands to.
   bool ExpandedParameterPack = false;
 
-  /// \brief The number of parameters in an expanded parameter pack.
+  /// The number of parameters in an expanded parameter pack.
   unsigned NumExpandedParams = 0;
 
   TemplateTemplateParmDecl(DeclContext *DC, SourceLocation L,
@@ -1495,14 +1495,14 @@
   static TemplateTemplateParmDecl *CreateDeserialized(ASTContext &C,
                                                       unsigned ID,
                                                       unsigned NumExpansions);
-  
+
   using TemplateParmPosition::getDepth;
   using TemplateParmPosition::setDepth;
   using TemplateParmPosition::getPosition;
   using TemplateParmPosition::setPosition;
   using TemplateParmPosition::getIndex;
 
-  /// \brief Whether this template template parameter is a template
+  /// Whether this template template parameter is a template
   /// parameter pack.
   ///
   /// \code
@@ -1510,7 +1510,7 @@
   /// \endcode
   bool isParameterPack() const { return ParameterPack; }
 
-  /// \brief Whether this parameter pack is a pack expansion.
+  /// Whether this parameter pack is a pack expansion.
   ///
   /// A template template parameter pack is a pack expansion if its template
   /// parameter list contains an unexpanded parameter pack.
@@ -1519,7 +1519,7 @@
            getTemplateParameters()->containsUnexpandedParameterPack();
   }
 
-  /// \brief Whether this parameter is a template template parameter pack that
+  /// Whether this parameter is a template template parameter pack that
   /// has a known list of different template parameter lists at different
   /// positions.
   ///
@@ -1539,14 +1539,14 @@
   /// parameter pack.
   bool isExpandedParameterPack() const { return ExpandedParameterPack; }
 
-  /// \brief Retrieves the number of expansion template parameters in
+  /// Retrieves the number of expansion template parameters in
   /// an expanded parameter pack.
   unsigned getNumExpansionTemplateParameters() const {
     assert(ExpandedParameterPack && "Not an expansion parameter pack");
     return NumExpandedParams;
   }
 
-  /// \brief Retrieve a particular expansion type within an expanded parameter
+  /// Retrieve a particular expansion type within an expanded parameter
   /// pack.
   TemplateParameterList *getExpansionTemplateParameters(unsigned I) const {
     assert(I < NumExpandedParams && "Out-of-range expansion type index");
@@ -1555,26 +1555,26 @@
 
   const DefArgStorage &getDefaultArgStorage() const { return DefaultArgument; }
 
-  /// \brief Determine whether this template parameter has a default
+  /// Determine whether this template parameter has a default
   /// argument.
   bool hasDefaultArgument() const { return DefaultArgument.isSet(); }
 
-  /// \brief Retrieve the default argument, if any.
+  /// Retrieve the default argument, if any.
   const TemplateArgumentLoc &getDefaultArgument() const {
     static const TemplateArgumentLoc None;
     return DefaultArgument.isSet() ? *DefaultArgument.get() : None;
   }
 
-  /// \brief Retrieve the location of the default argument, if any.
+  /// Retrieve the location of the default argument, if any.
   SourceLocation getDefaultArgumentLoc() const;
 
-  /// \brief Determines whether the default argument was inherited
+  /// Determines whether the default argument was inherited
   /// from a previous declaration of this template.
   bool defaultArgumentWasInherited() const {
     return DefaultArgument.isInherited();
   }
 
-  /// \brief Set the default argument for this template parameter, and
+  /// Set the default argument for this template parameter, and
   /// whether that default argument was inherited from another
   /// declaration.
   void setDefaultArgument(const ASTContext &C,
@@ -1584,7 +1584,7 @@
     DefaultArgument.setInherited(C, Prev);
   }
 
-  /// \brief Removes the default argument of this template parameter.
+  /// Removes the default argument of this template parameter.
   void removeDefaultArgument() { DefaultArgument.clear(); }
 
   SourceRange getSourceRange() const override LLVM_READONLY {
@@ -1599,7 +1599,7 @@
   static bool classofKind(Kind K) { return K == TemplateTemplateParm; }
 };
 
-/// \brief Represents the builtin template declaration which is used to
+/// Represents the builtin template declaration which is used to
 /// implement __make_integer_seq and other builtin templates.  It serves
 /// no real purpose beyond existing as a place to hold template parameters.
 class BuiltinTemplateDecl : public TemplateDecl {
@@ -1628,7 +1628,7 @@
   BuiltinTemplateKind getBuiltinTemplateKind() const { return BTK; }
 };
 
-/// \brief Represents a class template specialization, which refers to
+/// Represents a class template specialization, which refers to
 /// a class template with a given set of template arguments.
 ///
 /// Class template specializations represent both explicit
@@ -1643,48 +1643,48 @@
 /// \endcode
 class ClassTemplateSpecializationDecl
   : public CXXRecordDecl, public llvm::FoldingSetNode {
-  /// \brief Structure that stores information about a class template
+  /// Structure that stores information about a class template
   /// specialization that was instantiated from a class template partial
   /// specialization.
   struct SpecializedPartialSpecialization {
-    /// \brief The class template partial specialization from which this
+    /// The class template partial specialization from which this
     /// class template specialization was instantiated.
     ClassTemplatePartialSpecializationDecl *PartialSpecialization;
 
-    /// \brief The template argument list deduced for the class template
+    /// The template argument list deduced for the class template
     /// partial specialization itself.
     const TemplateArgumentList *TemplateArgs;
   };
 
-  /// \brief The template that this specialization specializes
+  /// The template that this specialization specializes
   llvm::PointerUnion<ClassTemplateDecl *, SpecializedPartialSpecialization *>
     SpecializedTemplate;
 
-  /// \brief Further info for explicit template specialization/instantiation.
+  /// Further info for explicit template specialization/instantiation.
   struct ExplicitSpecializationInfo {
-    /// \brief The type-as-written.
+    /// The type-as-written.
     TypeSourceInfo *TypeAsWritten = nullptr;
 
-    /// \brief The location of the extern keyword.
+    /// The location of the extern keyword.
     SourceLocation ExternLoc;
 
-    /// \brief The location of the template keyword.
+    /// The location of the template keyword.
     SourceLocation TemplateKeywordLoc;
 
     ExplicitSpecializationInfo() = default;
   };
 
-  /// \brief Further info for explicit template specialization/instantiation.
+  /// Further info for explicit template specialization/instantiation.
   /// Does not apply to implicit specializations.
   ExplicitSpecializationInfo *ExplicitInfo = nullptr;
 
-  /// \brief The template arguments used to describe this specialization.
+  /// The template arguments used to describe this specialization.
   const TemplateArgumentList *TemplateArgs;
 
-  /// \brief The point where this template was instantiated (if any)
+  /// The point where this template was instantiated (if any)
   SourceLocation PointOfInstantiation;
 
-  /// \brief The kind of specialization this declaration refers to.
+  /// The kind of specialization this declaration refers to.
   /// Really a value of type TemplateSpecializationKind.
   unsigned SpecializationKind : 3;
 
@@ -1720,26 +1720,20 @@
   // it's not clear that we should override that, because the most recent
   // declaration as a CXXRecordDecl sometimes is the injected-class-name.
   ClassTemplateSpecializationDecl *getMostRecentDecl() {
-    CXXRecordDecl *Recent = static_cast<CXXRecordDecl *>(
-                              this)->getMostRecentDecl();
-    while (!isa<ClassTemplateSpecializationDecl>(Recent)) {
-      // FIXME: Does injected class name need to be in the redeclarations chain?
-      assert(Recent->isInjectedClassName() && Recent->getPreviousDecl());
-      Recent = Recent->getPreviousDecl();
-    }
-    return cast<ClassTemplateSpecializationDecl>(Recent);
+    return cast<ClassTemplateSpecializationDecl>(
+        getMostRecentNonInjectedDecl());
   }
 
-  /// \brief Retrieve the template that this specialization specializes.
+  /// Retrieve the template that this specialization specializes.
   ClassTemplateDecl *getSpecializedTemplate() const;
 
-  /// \brief Retrieve the template arguments of the class template
+  /// Retrieve the template arguments of the class template
   /// specialization.
   const TemplateArgumentList &getTemplateArgs() const {
     return *TemplateArgs;
   }
 
-  /// \brief Determine the kind of specialization that this
+  /// Determine the kind of specialization that this
   /// declaration represents.
   TemplateSpecializationKind getSpecializationKind() const {
     return static_cast<TemplateSpecializationKind>(SpecializationKind);
@@ -1749,7 +1743,7 @@
     return getSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
-  /// \brief True if this declaration is an explicit specialization,
+  /// True if this declaration is an explicit specialization,
   /// explicit instantiation declaration, or explicit instantiation
   /// definition.
   bool isExplicitInstantiationOrSpecialization() const {
@@ -1761,7 +1755,7 @@
     SpecializationKind = TSK;
   }
 
-  /// \brief Get the point of instantiation (if any), or null if none.
+  /// Get the point of instantiation (if any), or null if none.
   SourceLocation getPointOfInstantiation() const {
     return PointOfInstantiation;
   }
@@ -1771,7 +1765,7 @@
     PointOfInstantiation = Loc;
   }
 
-  /// \brief If this class template specialization is an instantiation of
+  /// If this class template specialization is an instantiation of
   /// a template (rather than an explicit specialization), return the
   /// class template or class template partial specialization from which it
   /// was instantiated.
@@ -1785,7 +1779,7 @@
     return getSpecializedTemplateOrPartial();
   }
 
-  /// \brief Retrieve the class template or class template partial
+  /// Retrieve the class template or class template partial
   /// specialization which was specialized by this.
   llvm::PointerUnion<ClassTemplateDecl *,
                      ClassTemplatePartialSpecializationDecl *>
@@ -1797,7 +1791,7 @@
     return SpecializedTemplate.get<ClassTemplateDecl*>();
   }
 
-  /// \brief Retrieve the set of template arguments that should be used
+  /// Retrieve the set of template arguments that should be used
   /// to instantiate members of the class template or class template partial
   /// specialization from which this class template specialization was
   /// instantiated.
@@ -1816,7 +1810,7 @@
     return getTemplateArgs();
   }
 
-  /// \brief Note that this class template specialization is actually an
+  /// Note that this class template specialization is actually an
   /// instantiation of the given class template partial specialization whose
   /// template arguments have been deduced.
   void setInstantiationOf(ClassTemplatePartialSpecializationDecl *PartialSpec,
@@ -1829,7 +1823,7 @@
     SpecializedTemplate = PS;
   }
 
-  /// \brief Note that this class template specialization is an instantiation
+  /// Note that this class template specialization is an instantiation
   /// of the given class template.
   void setInstantiationOf(ClassTemplateDecl *TemplDecl) {
     assert(!SpecializedTemplate.is<SpecializedPartialSpecialization*>() &&
@@ -1837,7 +1831,7 @@
     SpecializedTemplate = TemplDecl;
   }
 
-  /// \brief Sets the type of this specialization as it was written by
+  /// Sets the type of this specialization as it was written by
   /// the user. This will be a class template specialization type.
   void setTypeAsWritten(TypeSourceInfo *T) {
     if (!ExplicitInfo)
@@ -1845,32 +1839,32 @@
     ExplicitInfo->TypeAsWritten = T;
   }
 
-  /// \brief Gets the type of this specialization as it was written by
+  /// Gets the type of this specialization as it was written by
   /// the user, if it was so written.
   TypeSourceInfo *getTypeAsWritten() const {
     return ExplicitInfo ? ExplicitInfo->TypeAsWritten : nullptr;
   }
 
-  /// \brief Gets the location of the extern keyword, if present.
+  /// Gets the location of the extern keyword, if present.
   SourceLocation getExternLoc() const {
     return ExplicitInfo ? ExplicitInfo->ExternLoc : SourceLocation();
   }
 
-  /// \brief Sets the location of the extern keyword.
+  /// Sets the location of the extern keyword.
   void setExternLoc(SourceLocation Loc) {
     if (!ExplicitInfo)
       ExplicitInfo = new (getASTContext()) ExplicitSpecializationInfo;
     ExplicitInfo->ExternLoc = Loc;
   }
 
-  /// \brief Sets the location of the template keyword.
+  /// Sets the location of the template keyword.
   void setTemplateKeywordLoc(SourceLocation Loc) {
     if (!ExplicitInfo)
       ExplicitInfo = new (getASTContext()) ExplicitSpecializationInfo;
     ExplicitInfo->TemplateKeywordLoc = Loc;
   }
 
-  /// \brief Gets the location of the template keyword, if present.
+  /// Gets the location of the template keyword, if present.
   SourceLocation getTemplateKeywordLoc() const {
     return ExplicitInfo ? ExplicitInfo->TemplateKeywordLoc : SourceLocation();
   }
@@ -1899,14 +1893,14 @@
 
 class ClassTemplatePartialSpecializationDecl
   : public ClassTemplateSpecializationDecl {
-  /// \brief The list of template parameters
+  /// The list of template parameters
   TemplateParameterList* TemplateParams = nullptr;
 
-  /// \brief The source info for the template arguments as written.
+  /// The source info for the template arguments as written.
   /// FIXME: redundant with TypeAsWritten?
   const ASTTemplateArgumentListInfo *ArgsAsWritten = nullptr;
 
-  /// \brief The class template partial specialization from which this
+  /// The class template partial specialization from which this
   /// class template partial specialization was instantiated.
   ///
   /// The boolean value will be true to indicate that this class template
@@ -1963,7 +1957,7 @@
     return ArgsAsWritten;
   }
 
-  /// \brief Retrieve the member class template partial specialization from
+  /// Retrieve the member class template partial specialization from
   /// which this particular class template partial specialization was
   /// instantiated.
   ///
@@ -1999,7 +1993,7 @@
     First->InstantiatedFromMember.setPointer(PartialSpec);
   }
 
-  /// \brief Determines whether this class template partial specialization
+  /// Determines whether this class template partial specialization
   /// template was a specialization of a member partial specialization.
   ///
   /// In the following example, the member template partial specialization
@@ -2021,7 +2015,7 @@
     return First->InstantiatedFromMember.getInt();
   }
 
-  /// \brief Note that this member template is a specialization.
+  /// Note that this member template is a specialization.
   void setMemberSpecialization() {
     auto *First = cast<ClassTemplatePartialSpecializationDecl>(getFirstDecl());
     assert(First->InstantiatedFromMember.getPointer() &&
@@ -2050,29 +2044,29 @@
 /// Declaration of a class template.
 class ClassTemplateDecl : public RedeclarableTemplateDecl {
 protected:
-  /// \brief Data that is common to all of the declarations of a given
+  /// Data that is common to all of the declarations of a given
   /// class template.
   struct Common : CommonBase {
-    /// \brief The class template specializations for this class
+    /// The class template specializations for this class
     /// template, including explicit specializations and instantiations.
     llvm::FoldingSetVector<ClassTemplateSpecializationDecl> Specializations;
 
-    /// \brief The class template partial specializations for this class
+    /// The class template partial specializations for this class
     /// template.
     llvm::FoldingSetVector<ClassTemplatePartialSpecializationDecl>
       PartialSpecializations;
 
-    /// \brief The injected-class-name type for this class template.
+    /// The injected-class-name type for this class template.
     QualType InjectedClassNameType;
 
     Common() = default;
   };
 
-  /// \brief Retrieve the set of specializations of this class template.
+  /// Retrieve the set of specializations of this class template.
   llvm::FoldingSetVector<ClassTemplateSpecializationDecl> &
   getSpecializations() const;
 
-  /// \brief Retrieve the set of partial specializations of this class
+  /// Retrieve the set of partial specializations of this class
   /// template.
   llvm::FoldingSetVector<ClassTemplatePartialSpecializationDecl> &
   getPartialSpecializations();
@@ -2098,22 +2092,22 @@
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  /// \brief Load any lazily-loaded specializations from the external source.
+  /// Load any lazily-loaded specializations from the external source.
   void LoadLazySpecializations() const;
 
-  /// \brief Get the underlying class declarations of the template.
+  /// Get the underlying class declarations of the template.
   CXXRecordDecl *getTemplatedDecl() const {
     return static_cast<CXXRecordDecl *>(TemplatedDecl);
   }
 
-  /// \brief Returns whether this template declaration defines the primary
+  /// Returns whether this template declaration defines the primary
   /// class pattern.
   bool isThisDeclarationADefinition() const {
     return getTemplatedDecl()->isThisDeclarationADefinition();
   }
 
   // FIXME: remove default argument for AssociatedConstraints
-  /// \brief Create a class template node.
+  /// Create a class template node.
   static ClassTemplateDecl *Create(ASTContext &C, DeclContext *DC,
                                    SourceLocation L,
                                    DeclarationName Name,
@@ -2121,15 +2115,15 @@
                                    NamedDecl *Decl,
                                    Expr *AssociatedConstraints = nullptr);
 
-  /// \brief Create an empty class template node.
+  /// Create an empty class template node.
   static ClassTemplateDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
-  /// \brief Return the specialization with the provided arguments if it exists,
+  /// Return the specialization with the provided arguments if it exists,
   /// otherwise return the insertion point.
   ClassTemplateSpecializationDecl *
   findSpecialization(ArrayRef<TemplateArgument> Args, void *&InsertPos);
 
-  /// \brief Insert the specified specialization knowing that it is not already
+  /// Insert the specified specialization knowing that it is not already
   /// in. InsertPos must be obtained from findSpecialization.
   void AddSpecialization(ClassTemplateSpecializationDecl *D, void *InsertPos);
 
@@ -2142,7 +2136,7 @@
              RedeclarableTemplateDecl::getCanonicalDecl());
   }
 
-  /// \brief Retrieve the previous declaration of this class template, or
+  /// Retrieve the previous declaration of this class template, or
   /// nullptr if no such declaration exists.
   ClassTemplateDecl *getPreviousDecl() {
     return cast_or_null<ClassTemplateDecl>(
@@ -2167,21 +2161,21 @@
              RedeclarableTemplateDecl::getInstantiatedFromMemberTemplate());
   }
 
-  /// \brief Return the partial specialization with the provided arguments if it
+  /// Return the partial specialization with the provided arguments if it
   /// exists, otherwise return the insertion point.
   ClassTemplatePartialSpecializationDecl *
   findPartialSpecialization(ArrayRef<TemplateArgument> Args, void *&InsertPos);
 
-  /// \brief Insert the specified partial specialization knowing that it is not
+  /// Insert the specified partial specialization knowing that it is not
   /// already in. InsertPos must be obtained from findPartialSpecialization.
   void AddPartialSpecialization(ClassTemplatePartialSpecializationDecl *D,
                                 void *InsertPos);
 
-  /// \brief Retrieve the partial specializations as an ordered list.
+  /// Retrieve the partial specializations as an ordered list.
   void getPartialSpecializations(
           SmallVectorImpl<ClassTemplatePartialSpecializationDecl *> &PS);
 
-  /// \brief Find a class template partial specialization with the given
+  /// Find a class template partial specialization with the given
   /// type T.
   ///
   /// \param T a dependent type that names a specialization of this class
@@ -2191,7 +2185,7 @@
   /// the type \p T, or nullptr if no such partial specialization exists.
   ClassTemplatePartialSpecializationDecl *findPartialSpecialization(QualType T);
 
-  /// \brief Find a class template partial specialization which was instantiated
+  /// Find a class template partial specialization which was instantiated
   /// from the given member partial specialization.
   ///
   /// \param D a member class template partial specialization.
@@ -2203,7 +2197,7 @@
   findPartialSpecInstantiatedFromMember(
                                      ClassTemplatePartialSpecializationDecl *D);
 
-  /// \brief Retrieve the template specialization type of the
+  /// Retrieve the template specialization type of the
   /// injected-class-name for this class template.
   ///
   /// The injected-class-name for a class template \c X is \c
@@ -2239,7 +2233,7 @@
   static bool classofKind(Kind K) { return K == ClassTemplate; }
 };
 
-/// \brief Declaration of a friend template.
+/// Declaration of a friend template.
 ///
 /// For example:
 /// \code
@@ -2303,7 +2297,7 @@
     return Friend.dyn_cast<NamedDecl*>();
   }
 
-  /// \brief Retrieves the location of the 'friend' keyword.
+  /// Retrieves the location of the 'friend' keyword.
   SourceLocation getFriendLoc() const {
     return FriendLoc;
   }
@@ -2322,7 +2316,7 @@
   static bool classofKind(Kind K) { return K == Decl::FriendTemplate; }
 };
 
-/// \brief Declaration of an alias template.
+/// Declaration of an alias template.
 ///
 /// For example:
 /// \code
@@ -2363,7 +2357,7 @@
              RedeclarableTemplateDecl::getCanonicalDecl());
   }
 
-  /// \brief Retrieve the previous declaration of this function template, or
+  /// Retrieve the previous declaration of this function template, or
   /// nullptr if no such declaration exists.
   TypeAliasTemplateDecl *getPreviousDecl() {
     return cast_or_null<TypeAliasTemplateDecl>(
@@ -2380,14 +2374,14 @@
              RedeclarableTemplateDecl::getInstantiatedFromMemberTemplate());
   }
 
-  /// \brief Create a function template node.
+  /// Create a function template node.
   static TypeAliasTemplateDecl *Create(ASTContext &C, DeclContext *DC,
                                        SourceLocation L,
                                        DeclarationName Name,
                                        TemplateParameterList *Params,
                                        NamedDecl *Decl);
 
-  /// \brief Create an empty alias template node.
+  /// Create an empty alias template node.
   static TypeAliasTemplateDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
   // Implement isa/cast/dyncast support
@@ -2395,7 +2389,7 @@
   static bool classofKind(Kind K) { return K == TypeAliasTemplate; }
 };
 
-/// \brief Declaration of a function specialization at template class scope.
+/// Declaration of a function specialization at template class scope.
 ///
 /// This is a non-standard extension needed to support MSVC.
 ///
@@ -2448,7 +2442,7 @@
 
   static ClassScopeFunctionSpecializationDecl *
   CreateDeserialized(ASTContext &Context, unsigned ID);
-  
+
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Decl *D) { return classofKind(D->getKind()); }
 
@@ -2461,7 +2455,7 @@
 inline AnyFunctionDecl::AnyFunctionDecl(FunctionTemplateDecl *FTD)
     : Function(FTD) {}
 
-/// \brief Represents a variable template specialization, which refers to
+/// Represents a variable template specialization, which refers to
 /// a variable template with a given set of template arguments.
 ///
 /// Variable template specializations represent both explicit
@@ -2477,53 +2471,53 @@
 class VarTemplateSpecializationDecl : public VarDecl,
                                       public llvm::FoldingSetNode {
 
-  /// \brief Structure that stores information about a variable template
+  /// Structure that stores information about a variable template
   /// specialization that was instantiated from a variable template partial
   /// specialization.
   struct SpecializedPartialSpecialization {
-    /// \brief The variable template partial specialization from which this
+    /// The variable template partial specialization from which this
     /// variable template specialization was instantiated.
     VarTemplatePartialSpecializationDecl *PartialSpecialization;
 
-    /// \brief The template argument list deduced for the variable template
+    /// The template argument list deduced for the variable template
     /// partial specialization itself.
     const TemplateArgumentList *TemplateArgs;
   };
 
-  /// \brief The template that this specialization specializes.
+  /// The template that this specialization specializes.
   llvm::PointerUnion<VarTemplateDecl *, SpecializedPartialSpecialization *>
   SpecializedTemplate;
 
-  /// \brief Further info for explicit template specialization/instantiation.
+  /// Further info for explicit template specialization/instantiation.
   struct ExplicitSpecializationInfo {
-    /// \brief The type-as-written.
+    /// The type-as-written.
     TypeSourceInfo *TypeAsWritten = nullptr;
 
-    /// \brief The location of the extern keyword.
+    /// The location of the extern keyword.
     SourceLocation ExternLoc;
 
-    /// \brief The location of the template keyword.
+    /// The location of the template keyword.
     SourceLocation TemplateKeywordLoc;
 
     ExplicitSpecializationInfo() = default;
   };
 
-  /// \brief Further info for explicit template specialization/instantiation.
+  /// Further info for explicit template specialization/instantiation.
   /// Does not apply to implicit specializations.
   ExplicitSpecializationInfo *ExplicitInfo = nullptr;
 
-  /// \brief The template arguments used to describe this specialization.
+  /// The template arguments used to describe this specialization.
   const TemplateArgumentList *TemplateArgs;
   TemplateArgumentListInfo TemplateArgsInfo;
 
-  /// \brief The point where this template was instantiated (if any).
+  /// The point where this template was instantiated (if any).
   SourceLocation PointOfInstantiation;
 
-  /// \brief The kind of specialization this declaration refers to.
+  /// The kind of specialization this declaration refers to.
   /// Really a value of type TemplateSpecializationKind.
   unsigned SpecializationKind : 3;
 
-  /// \brief Whether this declaration is a complete definition of the
+  /// Whether this declaration is a complete definition of the
   /// variable template specialization. We can't otherwise tell apart
   /// an instantiated declaration from an instantiated definition with
   /// no initializer.
@@ -2560,10 +2554,10 @@
     return cast<VarTemplateSpecializationDecl>(Recent);
   }
 
-  /// \brief Retrieve the template that this specialization specializes.
+  /// Retrieve the template that this specialization specializes.
   VarTemplateDecl *getSpecializedTemplate() const;
 
-  /// \brief Retrieve the template arguments of the variable template
+  /// Retrieve the template arguments of the variable template
   /// specialization.
   const TemplateArgumentList &getTemplateArgs() const { return *TemplateArgs; }
 
@@ -2574,7 +2568,7 @@
     return TemplateArgsInfo;
   }
 
-  /// \brief Determine the kind of specialization that this
+  /// Determine the kind of specialization that this
   /// declaration represents.
   TemplateSpecializationKind getSpecializationKind() const {
     return static_cast<TemplateSpecializationKind>(SpecializationKind);
@@ -2584,7 +2578,7 @@
     return getSpecializationKind() == TSK_ExplicitSpecialization;
   }
 
-  /// \brief True if this declaration is an explicit specialization,
+  /// True if this declaration is an explicit specialization,
   /// explicit instantiation declaration, or explicit instantiation
   /// definition.
   bool isExplicitInstantiationOrSpecialization() const {
@@ -2596,7 +2590,7 @@
     SpecializationKind = TSK;
   }
 
-  /// \brief Get the point of instantiation (if any), or null if none.
+  /// Get the point of instantiation (if any), or null if none.
   SourceLocation getPointOfInstantiation() const {
     return PointOfInstantiation;
   }
@@ -2608,7 +2602,7 @@
 
   void setCompleteDefinition() { IsCompleteDefinition = true; }
 
-  /// \brief If this variable template specialization is an instantiation of
+  /// If this variable template specialization is an instantiation of
   /// a template (rather than an explicit specialization), return the
   /// variable template or variable template partial specialization from which
   /// it was instantiated.
@@ -2621,7 +2615,7 @@
     return getSpecializedTemplateOrPartial();
   }
 
-  /// \brief Retrieve the variable template or variable template partial
+  /// Retrieve the variable template or variable template partial
   /// specialization which was specialized by this.
   llvm::PointerUnion<VarTemplateDecl *, VarTemplatePartialSpecializationDecl *>
   getSpecializedTemplateOrPartial() const {
@@ -2632,7 +2626,7 @@
     return SpecializedTemplate.get<VarTemplateDecl *>();
   }
 
-  /// \brief Retrieve the set of template arguments that should be used
+  /// Retrieve the set of template arguments that should be used
   /// to instantiate the initializer of the variable template or variable
   /// template partial specialization from which this variable template
   /// specialization was instantiated.
@@ -2651,7 +2645,7 @@
     return getTemplateArgs();
   }
 
-  /// \brief Note that this variable template specialization is actually an
+  /// Note that this variable template specialization is actually an
   /// instantiation of the given variable template partial specialization whose
   /// template arguments have been deduced.
   void setInstantiationOf(VarTemplatePartialSpecializationDecl *PartialSpec,
@@ -2664,7 +2658,7 @@
     SpecializedTemplate = PS;
   }
 
-  /// \brief Note that this variable template specialization is an instantiation
+  /// Note that this variable template specialization is an instantiation
   /// of the given variable template.
   void setInstantiationOf(VarTemplateDecl *TemplDecl) {
     assert(!SpecializedTemplate.is<SpecializedPartialSpecialization *>() &&
@@ -2672,7 +2666,7 @@
     SpecializedTemplate = TemplDecl;
   }
 
-  /// \brief Sets the type of this specialization as it was written by
+  /// Sets the type of this specialization as it was written by
   /// the user.
   void setTypeAsWritten(TypeSourceInfo *T) {
     if (!ExplicitInfo)
@@ -2680,32 +2674,32 @@
     ExplicitInfo->TypeAsWritten = T;
   }
 
-  /// \brief Gets the type of this specialization as it was written by
+  /// Gets the type of this specialization as it was written by
   /// the user, if it was so written.
   TypeSourceInfo *getTypeAsWritten() const {
     return ExplicitInfo ? ExplicitInfo->TypeAsWritten : nullptr;
   }
 
-  /// \brief Gets the location of the extern keyword, if present.
+  /// Gets the location of the extern keyword, if present.
   SourceLocation getExternLoc() const {
     return ExplicitInfo ? ExplicitInfo->ExternLoc : SourceLocation();
   }
 
-  /// \brief Sets the location of the extern keyword.
+  /// Sets the location of the extern keyword.
   void setExternLoc(SourceLocation Loc) {
     if (!ExplicitInfo)
       ExplicitInfo = new (getASTContext()) ExplicitSpecializationInfo;
     ExplicitInfo->ExternLoc = Loc;
   }
 
-  /// \brief Sets the location of the template keyword.
+  /// Sets the location of the template keyword.
   void setTemplateKeywordLoc(SourceLocation Loc) {
     if (!ExplicitInfo)
       ExplicitInfo = new (getASTContext()) ExplicitSpecializationInfo;
     ExplicitInfo->TemplateKeywordLoc = Loc;
   }
 
-  /// \brief Gets the location of the template keyword, if present.
+  /// Gets the location of the template keyword, if present.
   SourceLocation getTemplateKeywordLoc() const {
     return ExplicitInfo ? ExplicitInfo->TemplateKeywordLoc : SourceLocation();
   }
@@ -2732,14 +2726,14 @@
 
 class VarTemplatePartialSpecializationDecl
     : public VarTemplateSpecializationDecl {
-  /// \brief The list of template parameters
+  /// The list of template parameters
   TemplateParameterList *TemplateParams = nullptr;
 
-  /// \brief The source info for the template arguments as written.
+  /// The source info for the template arguments as written.
   /// FIXME: redundant with TypeAsWritten?
   const ASTTemplateArgumentListInfo *ArgsAsWritten = nullptr;
 
-  /// \brief The variable template partial specialization from which this
+  /// The variable template partial specialization from which this
   /// variable template partial specialization was instantiated.
   ///
   /// The boolean value will be true to indicate that this variable template
@@ -2791,7 +2785,7 @@
     return ArgsAsWritten;
   }
 
-  /// \brief Retrieve the member variable template partial specialization from
+  /// Retrieve the member variable template partial specialization from
   /// which this particular variable template partial specialization was
   /// instantiated.
   ///
@@ -2823,7 +2817,7 @@
     First->InstantiatedFromMember.setPointer(PartialSpec);
   }
 
-  /// \brief Determines whether this variable template partial specialization
+  /// Determines whether this variable template partial specialization
   /// was a specialization of a member partial specialization.
   ///
   /// In the following example, the member template partial specialization
@@ -2845,7 +2839,7 @@
     return First->InstantiatedFromMember.getInt();
   }
 
-  /// \brief Note that this member template is a specialization.
+  /// Note that this member template is a specialization.
   void setMemberSpecialization() {
     auto *First = cast<VarTemplatePartialSpecializationDecl>(getFirstDecl());
     assert(First->InstantiatedFromMember.getPointer() &&
@@ -2863,14 +2857,14 @@
 /// Declaration of a variable template.
 class VarTemplateDecl : public RedeclarableTemplateDecl {
 protected:
-  /// \brief Data that is common to all of the declarations of a given
+  /// Data that is common to all of the declarations of a given
   /// variable template.
   struct Common : CommonBase {
-    /// \brief The variable template specializations for this variable
+    /// The variable template specializations for this variable
     /// template, including explicit specializations and instantiations.
     llvm::FoldingSetVector<VarTemplateSpecializationDecl> Specializations;
 
-    /// \brief The variable template partial specializations for this variable
+    /// The variable template partial specializations for this variable
     /// template.
     llvm::FoldingSetVector<VarTemplatePartialSpecializationDecl>
     PartialSpecializations;
@@ -2878,11 +2872,11 @@
     Common() = default;
   };
 
-  /// \brief Retrieve the set of specializations of this variable template.
+  /// Retrieve the set of specializations of this variable template.
   llvm::FoldingSetVector<VarTemplateSpecializationDecl> &
   getSpecializations() const;
 
-  /// \brief Retrieve the set of partial specializations of this class
+  /// Retrieve the set of partial specializations of this class
   /// template.
   llvm::FoldingSetVector<VarTemplatePartialSpecializationDecl> &
   getPartialSpecializations();
@@ -2902,15 +2896,15 @@
   friend class ASTDeclReader;
   friend class ASTDeclWriter;
 
-  /// \brief Load any lazily-loaded specializations from the external source.
+  /// Load any lazily-loaded specializations from the external source.
   void LoadLazySpecializations() const;
 
-  /// \brief Get the underlying variable declarations of the template.
+  /// Get the underlying variable declarations of the template.
   VarDecl *getTemplatedDecl() const {
     return static_cast<VarDecl *>(TemplatedDecl);
   }
 
-  /// \brief Returns whether this template declaration defines the primary
+  /// Returns whether this template declaration defines the primary
   /// variable pattern.
   bool isThisDeclarationADefinition() const {
     return getTemplatedDecl()->isThisDeclarationADefinition();
@@ -2918,21 +2912,21 @@
 
   VarTemplateDecl *getDefinition();
 
-  /// \brief Create a variable template node.
+  /// Create a variable template node.
   static VarTemplateDecl *Create(ASTContext &C, DeclContext *DC,
                                  SourceLocation L, DeclarationName Name,
                                  TemplateParameterList *Params,
                                  VarDecl *Decl);
 
-  /// \brief Create an empty variable template node.
+  /// Create an empty variable template node.
   static VarTemplateDecl *CreateDeserialized(ASTContext &C, unsigned ID);
 
-  /// \brief Return the specialization with the provided arguments if it exists,
+  /// Return the specialization with the provided arguments if it exists,
   /// otherwise return the insertion point.
   VarTemplateSpecializationDecl *
   findSpecialization(ArrayRef<TemplateArgument> Args, void *&InsertPos);
 
-  /// \brief Insert the specified specialization knowing that it is not already
+  /// Insert the specified specialization knowing that it is not already
   /// in. InsertPos must be obtained from findSpecialization.
   void AddSpecialization(VarTemplateSpecializationDecl *D, void *InsertPos);
 
@@ -2943,7 +2937,7 @@
     return cast<VarTemplateDecl>(RedeclarableTemplateDecl::getCanonicalDecl());
   }
 
-  /// \brief Retrieve the previous declaration of this variable template, or
+  /// Retrieve the previous declaration of this variable template, or
   /// nullptr if no such declaration exists.
   VarTemplateDecl *getPreviousDecl() {
     return cast_or_null<VarTemplateDecl>(
@@ -2968,21 +2962,21 @@
         RedeclarableTemplateDecl::getInstantiatedFromMemberTemplate());
   }
 
-  /// \brief Return the partial specialization with the provided arguments if it
+  /// Return the partial specialization with the provided arguments if it
   /// exists, otherwise return the insertion point.
   VarTemplatePartialSpecializationDecl *
   findPartialSpecialization(ArrayRef<TemplateArgument> Args, void *&InsertPos);
 
-  /// \brief Insert the specified partial specialization knowing that it is not
+  /// Insert the specified partial specialization knowing that it is not
   /// already in. InsertPos must be obtained from findPartialSpecialization.
   void AddPartialSpecialization(VarTemplatePartialSpecializationDecl *D,
                                 void *InsertPos);
 
-  /// \brief Retrieve the partial specializations as an ordered list.
+  /// Retrieve the partial specializations as an ordered list.
   void getPartialSpecializations(
       SmallVectorImpl<VarTemplatePartialSpecializationDecl *> &PS);
 
-  /// \brief Find a variable template partial specialization which was
+  /// Find a variable template partial specialization which was
   /// instantiated
   /// from the given member partial specialization.
   ///
diff --git a/linux-x64/clang/include/clang/AST/DeclVisitor.h b/linux-x64/clang/include/clang/AST/DeclVisitor.h
index 3ff274b..520a4a1 100644
--- a/linux-x64/clang/include/clang/AST/DeclVisitor.h
+++ b/linux-x64/clang/include/clang/AST/DeclVisitor.h
@@ -30,7 +30,7 @@
 template <typename T> struct make_ptr { using type = T *; };
 template <typename T> struct make_const_ptr { using type = const T *; };
 
-/// \brief A simple visitor class that helps create declaration visitors.
+/// A simple visitor class that helps create declaration visitors.
 template<template <typename> class Ptr, typename ImplClass, typename RetTy=void>
 class Base {
 public:
@@ -62,7 +62,7 @@
 
 } // namespace declvisitor
 
-/// \brief A simple visitor class that helps create declaration visitors.
+/// A simple visitor class that helps create declaration visitors.
 ///
 /// This class does not preserve constness of Decl pointers (see also
 /// ConstDeclVisitor).
@@ -70,7 +70,7 @@
 class DeclVisitor
  : public declvisitor::Base<declvisitor::make_ptr, ImplClass, RetTy> {};
 
-/// \brief A simple visitor class that helps create declaration visitors.
+/// A simple visitor class that helps create declaration visitors.
 ///
 /// This class preserves constness of Decl pointers (see also DeclVisitor).
 template<typename ImplClass, typename RetTy = void>
diff --git a/linux-x64/clang/include/clang/AST/DeclarationName.h b/linux-x64/clang/include/clang/AST/DeclarationName.h
index 467b02c..d544579 100644
--- a/linux-x64/clang/include/clang/AST/DeclarationName.h
+++ b/linux-x64/clang/include/clang/AST/DeclarationName.h
@@ -14,11 +14,13 @@
 #ifndef LLVM_CLANG_AST_DECLARATIONNAME_H
 #define LLVM_CLANG_AST_DECLARATIONNAME_H
 
+#include "clang/AST/Type.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/PartialDiagnostic.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/DenseMapInfo.h"
+#include "llvm/ADT/FoldingSet.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/type_traits.h"
 #include <cassert>
@@ -39,9 +41,7 @@
 class MultiKeywordSelector;
 enum OverloadedOperatorKind : int;
 struct PrintingPolicy;
-class QualType;
 class TemplateDecl;
-class Type;
 class TypeSourceInfo;
 class UsingDirectiveDecl;
 
@@ -194,7 +194,7 @@
            (reinterpret_cast<IdentifierInfo *>(Ptr & ~PtrMask));
   }
 
-  /// \brief Evaluates true when this declaration name is empty.
+  /// Evaluates true when this declaration name is empty.
   bool isEmpty() const {
     return !*this;
   }
@@ -211,14 +211,14 @@
   /// getNameKind - Determine what kind of name this is.
   NameKind getNameKind() const;
 
-  /// \brief Determines whether the name itself is dependent, e.g., because it 
+  /// Determines whether the name itself is dependent, e.g., because it
   /// involves a C++ type that is itself dependent.
   ///
   /// Note that this does not capture all of the notions of "dependent name",
-  /// because an identifier can be a dependent name if it is used as the 
+  /// because an identifier can be a dependent name if it is used as the
   /// callee in a call expression with dependent arguments.
   bool isDependentName() const;
-  
+
   /// getNameAsString - Retrieve the human-readable string for this name.
   std::string getAsString() const;
 
@@ -343,33 +343,113 @@
   return DeclarationName::compare(LHS, RHS) >= 0;
 }
 
+/// CXXSpecialName - Records the type associated with one of the
+/// "special" kinds of declaration names in C++, e.g., constructors,
+/// destructors, and conversion functions.
+class CXXSpecialName : public DeclarationNameExtra,
+                       public llvm::FoldingSetNode {
+public:
+  /// Type - The type associated with this declaration name.
+  QualType Type;
+
+  /// FETokenInfo - Extra information associated with this declaration
+  /// name that can be used by the front end. All bits are really needed
+  /// so it is not possible to stash something in the low order bits.
+  void *FETokenInfo;
+
+  void Profile(llvm::FoldingSetNodeID &ID) {
+    ID.AddInteger(ExtraKindOrNumArgs);
+    ID.AddPointer(Type.getAsOpaquePtr());
+  }
+};
+
+/// Contains extra information for the name of a C++ deduction guide.
+class CXXDeductionGuideNameExtra : public DeclarationNameExtra,
+                                   public llvm::FoldingSetNode {
+public:
+  /// The template named by the deduction guide.
+  TemplateDecl *Template;
+
+  /// FETokenInfo - Extra information associated with this operator
+  /// name that can be used by the front end. All bits are really needed
+  /// so it is not possible to stash something in the low order bits.
+  void *FETokenInfo;
+
+  void Profile(llvm::FoldingSetNodeID &ID) { ID.AddPointer(Template); }
+};
+
+/// CXXOperatorIdName - Contains extra information for the name of an
+/// overloaded operator in C++, such as "operator+.
+class CXXOperatorIdName : public DeclarationNameExtra {
+public:
+  /// FETokenInfo - Extra information associated with this operator
+  /// name that can be used by the front end. All bits are really needed
+  /// so it is not possible to stash something in the low order bits.
+  void *FETokenInfo;
+};
+
+/// CXXLiteralOperatorName - Contains the actual identifier that makes up the
+/// name.
+///
+/// This identifier is stored here rather than directly in DeclarationName so as
+/// to allow Objective-C selectors, which are about a million times more common,
+/// to consume minimal memory.
+class CXXLiteralOperatorIdName : public DeclarationNameExtra,
+                                 public llvm::FoldingSetNode {
+public:
+  IdentifierInfo *ID;
+
+  /// FETokenInfo - Extra information associated with this operator
+  /// name that can be used by the front end. All bits are really needed
+  /// so it is not possible to stash something in the low order bits.
+  void *FETokenInfo;
+
+  void Profile(llvm::FoldingSetNodeID &FSID) { FSID.AddPointer(ID); }
+};
+
 /// DeclarationNameTable - Used to store and retrieve DeclarationName
 /// instances for the various kinds of declaration names, e.g., normal
 /// identifiers, C++ constructor names, etc. This class contains
 /// uniqued versions of each of the C++ special names, which can be
-/// retrieved using its member functions (e.g.,
-/// getCXXConstructorName).
+/// retrieved using its member functions (e.g., getCXXConstructorName).
 class DeclarationNameTable {
+  /// Used to allocate elements in the FoldingSets and
+  /// in the array of CXXOperatorIdName below.
   const ASTContext &Ctx;
 
-  // Actually a FoldingSet<CXXSpecialName> *
-  void *CXXSpecialNamesImpl;
+  /// Manage the uniqued CXXSpecialName, which contain extra information
+  /// for the "special" kinds of declaration names in C++ such as constructors,
+  /// destructors and conversion functions. getCXXConstructorName,
+  /// getCXXDestructorName, getCXXConversionFunctionName, and getCXXSpecialName
+  /// can be used to obtain a DeclarationName from the corresponding type.
+  llvm::FoldingSet<CXXSpecialName> CXXSpecialNames;
 
-  // Operator names
+  /// Manage the uniqued CXXOperatorIdName, which contain extra information
+  /// for the name of overloaded C++ operators. getCXXOperatorName
+  /// can be used to obtain a DeclarationName from the operator kind.
+  /// This points to the first element of an array of NUM_OVERLOADED_OPERATORS
+  /// CXXOperatorIdName which is constructed by DeclarationNameTable.
   CXXOperatorIdName *CXXOperatorNames;
 
-  // Actually a CXXOperatorIdName*
-  void *CXXLiteralOperatorNames;
+  /// Manage the uniqued CXXLiteralOperatorIdName, which contain extra
+  /// information for the name of C++ literal operators.
+  /// getCXXLiteralOperatorName can be used to obtain a DeclarationName
+  /// from the corresponding IdentifierInfo.
+  llvm::FoldingSet<CXXLiteralOperatorIdName> CXXLiteralOperatorNames;
 
-  // FoldingSet<CXXDeductionGuideNameExtra> *
-  void *CXXDeductionGuideNames;
+  /// Manage the uniqued CXXDeductionGuideNameExtra, which contain
+  /// extra information for the name of a C++ deduction guide.
+  /// getCXXDeductionGuideName can be used to obtain a DeclarationName
+  /// from the corresponding template declaration.
+  llvm::FoldingSet<CXXDeductionGuideNameExtra> CXXDeductionGuideNames;
 
 public:
   DeclarationNameTable(const ASTContext &C);
   DeclarationNameTable(const DeclarationNameTable &) = delete;
   DeclarationNameTable &operator=(const DeclarationNameTable &) = delete;
-
-  ~DeclarationNameTable();
+  DeclarationNameTable(DeclarationNameTable &&) = delete;
+  DeclarationNameTable &operator=(DeclarationNameTable &&) = delete;
+  ~DeclarationNameTable() = default;
 
   /// getIdentifier - Create a declaration name that is a simple
   /// identifier.
@@ -541,10 +621,10 @@
     LocInfo.CXXLiteralOperatorName.OpNameLoc = Loc.getRawEncoding();
   }
 
-  /// \brief Determine whether this name involves a template parameter.
+  /// Determine whether this name involves a template parameter.
   bool isInstantiationDependent() const;
-  
-  /// \brief Determine whether this name contains an unexpanded
+
+  /// Determine whether this name contains an unexpanded
   /// parameter pack.
   bool containsUnexpandedParameterPack() const;
 
@@ -557,22 +637,27 @@
   /// getBeginLoc - Retrieve the location of the first token.
   SourceLocation getBeginLoc() const { return NameLoc; }
 
-  /// getEndLoc - Retrieve the location of the last token.
-  SourceLocation getEndLoc() const;
-
   /// getSourceRange - The range of the declaration name.
   SourceRange getSourceRange() const LLVM_READONLY {
-    return SourceRange(getLocStart(), getLocEnd());
+    return SourceRange(getBeginLoc(), getEndLoc());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
     return getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    SourceLocation EndLoc = getEndLoc();
-    return EndLoc.isValid() ? EndLoc : getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
   }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    SourceLocation EndLoc = getEndLocPrivate();
+    return EndLoc.isValid() ? EndLoc : getBeginLoc();
+  }
+
+private:
+  SourceLocation getEndLocPrivate() const;
 };
 
 /// Insertion operator for diagnostics.  This allows sending DeclarationName's
diff --git a/linux-x64/clang/include/clang/AST/DependentDiagnostic.h b/linux-x64/clang/include/clang/AST/DependentDiagnostic.h
index a514326..c21ef79 100644
--- a/linux-x64/clang/include/clang/AST/DependentDiagnostic.h
+++ b/linux-x64/clang/include/clang/AST/DependentDiagnostic.h
@@ -101,9 +101,9 @@
   friend class DependentStoredDeclsMap;
 
   DependentDiagnostic(const PartialDiagnostic &PDiag,
-                      PartialDiagnostic::Storage *Storage) 
+                      PartialDiagnostic::Storage *Storage)
     : Diag(PDiag, Storage) {}
-  
+
   static DependentDiagnostic *Create(ASTContext &Context,
                                      DeclContext *Parent,
                                      const PartialDiagnostic &PDiag);
diff --git a/linux-x64/clang/include/clang/AST/EvaluatedExprVisitor.h b/linux-x64/clang/include/clang/AST/EvaluatedExprVisitor.h
index aad7726..1aec5ae 100644
--- a/linux-x64/clang/include/clang/AST/EvaluatedExprVisitor.h
+++ b/linux-x64/clang/include/clang/AST/EvaluatedExprVisitor.h
@@ -21,10 +21,10 @@
 #include "clang/AST/StmtVisitor.h"
 
 namespace clang {
-  
+
 class ASTContext;
-  
-/// \brief Given a potentially-evaluated expression, this visitor visits all
+
+/// Given a potentially-evaluated expression, this visitor visits all
 /// of its potentially-evaluated subexpressions, recursively.
 template<template <typename> class Ptr, typename ImplClass>
 class EvaluatedExprVisitorBase : public StmtVisitorBase<Ptr, ImplClass, void> {
@@ -95,7 +95,7 @@
         this->Visit(*I);
   }
 
-  /// \brief The basis case walks all of the children of the statement or
+  /// The basis case walks all of the children of the statement or
   /// expression, assuming they are all potentially evaluated.
   void VisitStmt(PTR(Stmt) S) {
     for (auto *SubStmt : S->children())
diff --git a/linux-x64/clang/include/clang/AST/Expr.h b/linux-x64/clang/include/clang/AST/Expr.h
index 8c339a8..41d4b71 100644
--- a/linux-x64/clang/include/clang/AST/Expr.h
+++ b/linux-x64/clang/include/clang/AST/Expr.h
@@ -52,10 +52,10 @@
   class TargetInfo;
   class ValueDecl;
 
-/// \brief A simple array of base specifiers.
+/// A simple array of base specifiers.
 typedef SmallVector<CXXBaseSpecifier*, 4> CXXCastPath;
 
-/// \brief An adjustment to be made to the temporary created when emitting a
+/// An adjustment to be made to the temporary created when emitting a
 /// reference binding, which accesses a particular subobject of that temporary.
 struct SubobjectAdjustment {
   enum {
@@ -121,7 +121,7 @@
     setType(T);
   }
 
-  /// \brief Construct an empty expression.
+  /// Construct an empty expression.
   explicit Expr(StmtClass SC, EmptyShell) : Stmt(SC) { }
 
 public:
@@ -148,7 +148,7 @@
   /// @endcode
   bool isValueDependent() const { return ExprBits.ValueDependent; }
 
-  /// \brief Set whether this expression is value-dependent or not.
+  /// Set whether this expression is value-dependent or not.
   void setValueDependent(bool VD) {
     ExprBits.ValueDependent = VD;
   }
@@ -166,12 +166,12 @@
   /// @endcode
   bool isTypeDependent() const { return ExprBits.TypeDependent; }
 
-  /// \brief Set whether this expression is type-dependent or not.
+  /// Set whether this expression is type-dependent or not.
   void setTypeDependent(bool TD) {
     ExprBits.TypeDependent = TD;
   }
 
-  /// \brief Whether this expression is instantiation-dependent, meaning that
+  /// Whether this expression is instantiation-dependent, meaning that
   /// it depends in some way on a template parameter, even if neither its type
   /// nor (constant) value can change due to the template instantiation.
   ///
@@ -192,12 +192,12 @@
     return ExprBits.InstantiationDependent;
   }
 
-  /// \brief Set whether this expression is instantiation-dependent or not.
+  /// Set whether this expression is instantiation-dependent or not.
   void setInstantiationDependent(bool ID) {
     ExprBits.InstantiationDependent = ID;
   }
 
-  /// \brief Whether this expression contains an unexpanded parameter
+  /// Whether this expression contains an unexpanded parameter
   /// pack (for C++11 variadic templates).
   ///
   /// Given the following function template:
@@ -215,7 +215,7 @@
     return ExprBits.ContainsUnexpandedParameterPack;
   }
 
-  /// \brief Set the bit that describes whether this expression
+  /// Set the bit that describes whether this expression
   /// contains an unexpanded parameter pack.
   void setContainsUnexpandedParameterPack(bool PP = true) {
     ExprBits.ContainsUnexpandedParameterPack = PP;
@@ -297,11 +297,11 @@
   isModifiableLvalueResult
   isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc = nullptr) const;
 
-  /// \brief The return type of classify(). Represents the C++11 expression
+  /// The return type of classify(). Represents the C++11 expression
   ///        taxonomy.
   class Classification {
   public:
-    /// \brief The various classification results. Most of these mean prvalue.
+    /// The various classification results. Most of these mean prvalue.
     enum Kinds {
       CL_LValue,
       CL_XValue,
@@ -316,7 +316,7 @@
       CL_ObjCMessageRValue, // ObjC message is an rvalue
       CL_PRValue // A prvalue for any other reason, of any other type
     };
-    /// \brief The results of modification testing.
+    /// The results of modification testing.
     enum ModifiableType {
       CM_Untested, // testModifiable was false.
       CM_Modifiable,
@@ -356,13 +356,13 @@
     bool isRValue() const { return Kind >= CL_XValue; }
     bool isModifiable() const { return getModifiable() == CM_Modifiable; }
 
-    /// \brief Create a simple, modifiably lvalue
+    /// Create a simple, modifiably lvalue
     static Classification makeSimpleLValue() {
       return Classification(CL_LValue, CM_Modifiable);
     }
 
   };
-  /// \brief Classify - Classify this expression according to the C++11
+  /// Classify - Classify this expression according to the C++11
   ///        expression taxonomy.
   ///
   /// C++11 defines ([basic.lval]) a new taxonomy of expressions to replace the
@@ -378,7 +378,7 @@
     return ClassifyImpl(Ctx, nullptr);
   }
 
-  /// \brief ClassifyModifiable - Classify this expression according to the
+  /// ClassifyModifiable - Classify this expression according to the
   ///        C++11 expression taxonomy, and see if it is valid on the left side
   ///        of an assignment.
   ///
@@ -429,14 +429,14 @@
 
 public:
 
-  /// \brief Returns true if this expression is a gl-value that
+  /// Returns true if this expression is a gl-value that
   /// potentially refers to a bit-field.
   ///
   /// In C++, whether a gl-value refers to a bitfield is essentially
   /// an aspect of the value-kind type system.
   bool refersToBitField() const { return getObjectKind() == OK_BitField; }
 
-  /// \brief If this expression refers to a bit-field, retrieve the
+  /// If this expression refers to a bit-field, retrieve the
   /// declaration of that bit-field.
   ///
   /// Note that this returns a non-null pointer in subtly different
@@ -454,26 +454,26 @@
     return const_cast<Expr*>(this)->getReferencedDeclOfCallee();
   }
 
-  /// \brief If this expression is an l-value for an Objective C
+  /// If this expression is an l-value for an Objective C
   /// property, find the underlying property reference expression.
   const ObjCPropertyRefExpr *getObjCProperty() const;
 
-  /// \brief Check if this expression is the ObjC 'self' implicit parameter.
+  /// Check if this expression is the ObjC 'self' implicit parameter.
   bool isObjCSelfExpr() const;
 
-  /// \brief Returns whether this expression refers to a vector element.
+  /// Returns whether this expression refers to a vector element.
   bool refersToVectorElement() const;
 
-  /// \brief Returns whether this expression refers to a global register
+  /// Returns whether this expression refers to a global register
   /// variable.
   bool refersToGlobalRegisterVar() const;
 
-  /// \brief Returns whether this expression has a placeholder type.
+  /// Returns whether this expression has a placeholder type.
   bool hasPlaceholderType() const {
     return getType()->isPlaceholderType();
   }
 
-  /// \brief Returns whether this expression has a specific placeholder type.
+  /// Returns whether this expression has a specific placeholder type.
   bool hasPlaceholderType(BuiltinType::Kind K) const {
     assert(BuiltinType::isPlaceholderTypeKind(K));
     if (const BuiltinType *BT = dyn_cast<BuiltinType>(getType()))
@@ -539,11 +539,11 @@
 
   /// EvalStatus is a struct with detailed info about an evaluation in progress.
   struct EvalStatus {
-    /// \brief Whether the evaluated expression has side effects.
+    /// Whether the evaluated expression has side effects.
     /// For example, (f() && 0) can be folded, but it still has side effects.
     bool HasSideEffects;
 
-    /// \brief Whether the evaluation hit undefined behavior.
+    /// Whether the evaluation hit undefined behavior.
     /// For example, 1.0 / 0.0 can be folded to Inf, but has undefined behavior.
     /// Likewise, INT_MAX + 1 can be folded to INT_MIN, but has UB.
     bool HasUndefinedBehavior;
@@ -586,7 +586,7 @@
   bool EvaluateAsRValue(EvalResult &Result, const ASTContext &Ctx) const;
 
   /// EvaluateAsBooleanCondition - Return true if this is a constant
-  /// which we we can fold and convert to a boolean condition using
+  /// which we can fold and convert to a boolean condition using
   /// any crazy technique that we want to, even if the expression has
   /// side-effects.
   bool EvaluateAsBooleanCondition(bool &Result, const ASTContext &Ctx) const;
@@ -625,7 +625,7 @@
   bool HasSideEffects(const ASTContext &Ctx,
                       bool IncludePossibleEffects = true) const;
 
-  /// \brief Determine whether this expression involves a call to any function
+  /// Determine whether this expression involves a call to any function
   /// that is not trivial.
   bool hasNonTrivialCall(const ASTContext &Ctx) const;
 
@@ -658,7 +658,14 @@
                                 ArrayRef<const Expr*> Args,
                                 const Expr *This = nullptr) const;
 
-  /// \brief If the current Expr is a pointer, this will try to statically
+  /// Indicates how the constant expression will be used.
+  enum ConstExprUsage { EvaluateForCodeGen, EvaluateForMangling };
+
+  /// Evaluate an expression that is required to be a constant expression.
+  bool EvaluateAsConstantExpr(EvalResult &Result, ConstExprUsage Usage,
+                              const ASTContext &Ctx) const;
+
+  /// If the current Expr is a pointer, this will try to statically
   /// determine the number of bytes available where the pointer is pointing.
   /// Returns true if all of the above holds and we were able to figure out the
   /// size, false otherwise.
@@ -668,40 +675,40 @@
   bool tryEvaluateObjectSize(uint64_t &Result, ASTContext &Ctx,
                              unsigned Type) const;
 
-  /// \brief Enumeration used to describe the kind of Null pointer constant
+  /// Enumeration used to describe the kind of Null pointer constant
   /// returned from \c isNullPointerConstant().
   enum NullPointerConstantKind {
-    /// \brief Expression is not a Null pointer constant.
+    /// Expression is not a Null pointer constant.
     NPCK_NotNull = 0,
 
-    /// \brief Expression is a Null pointer constant built from a zero integer
+    /// Expression is a Null pointer constant built from a zero integer
     /// expression that is not a simple, possibly parenthesized, zero literal.
     /// C++ Core Issue 903 will classify these expressions as "not pointers"
     /// once it is adopted.
     /// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#903
     NPCK_ZeroExpression,
 
-    /// \brief Expression is a Null pointer constant built from a literal zero.
+    /// Expression is a Null pointer constant built from a literal zero.
     NPCK_ZeroLiteral,
 
-    /// \brief Expression is a C++11 nullptr.
+    /// Expression is a C++11 nullptr.
     NPCK_CXX11_nullptr,
 
-    /// \brief Expression is a GNU-style __null constant.
+    /// Expression is a GNU-style __null constant.
     NPCK_GNUNull
   };
 
-  /// \brief Enumeration used to describe how \c isNullPointerConstant()
+  /// Enumeration used to describe how \c isNullPointerConstant()
   /// should cope with value-dependent expressions.
   enum NullPointerConstantValueDependence {
-    /// \brief Specifies that the expression should never be value-dependent.
+    /// Specifies that the expression should never be value-dependent.
     NPC_NeverValueDependent = 0,
 
-    /// \brief Specifies that a value-dependent expression of integral or
+    /// Specifies that a value-dependent expression of integral or
     /// dependent type should be considered a null pointer constant.
     NPC_ValueDependentIsNull,
 
-    /// \brief Specifies that a value-dependent expression should be considered
+    /// Specifies that a value-dependent expression should be considered
     /// to never be a null pointer constant.
     NPC_ValueDependentIsNotNull
   };
@@ -717,10 +724,10 @@
   /// write barrier.
   bool isOBJCGCCandidate(ASTContext &Ctx) const;
 
-  /// \brief Returns true if this expression is a bound member function.
+  /// Returns true if this expression is a bound member function.
   bool isBoundMemberFunction(ASTContext &Ctx) const;
 
-  /// \brief Given an expression of bound-member type, find the type
+  /// Given an expression of bound-member type, find the type
   /// of the member.  Returns null if this is an *overloaded* bound
   /// member expression.
   static QualType findBoundMemberType(const Expr *expr);
@@ -788,7 +795,7 @@
     return const_cast<Expr*>(this)->ignoreParenBaseCasts();
   }
 
-  /// \brief Determine whether this expression is a default function argument.
+  /// Determine whether this expression is a default function argument.
   ///
   /// Default arguments are implicitly generated in the abstract syntax tree
   /// by semantic analysis for function calls, object constructions, etc. in
@@ -797,11 +804,11 @@
   /// the expression is a default argument.
   bool isDefaultArgument() const;
 
-  /// \brief Determine whether the result of this expression is a
+  /// Determine whether the result of this expression is a
   /// temporary object of the given class type.
   bool isTemporaryObject(ASTContext &Ctx, const CXXRecordDecl *TempTy) const;
 
-  /// \brief Whether this expression is an implicit reference to 'this' in C++.
+  /// Whether this expression is an implicit reference to 'this' in C++.
   bool isImplicitCXXThis() const;
 
   const Expr *IgnoreImpCasts() const LLVM_READONLY {
@@ -824,7 +831,7 @@
 
   static bool hasAnyTypeDependentArguments(ArrayRef<Expr *> Exprs);
 
-  /// \brief For an expression of class type or pointer to class type,
+  /// For an expression of class type or pointer to class type,
   /// return the most derived class decl the expression is known to refer to.
   ///
   /// If this expression is a cast, this method looks through it to find the
@@ -833,7 +840,7 @@
   /// behavior if the object isn't dynamically of the derived type.
   const CXXRecordDecl *getBestDynamicClassType() const;
 
-  /// \brief Get the inner expression that determines the best dynamic class.
+  /// Get the inner expression that determines the best dynamic class.
   /// If this is a prvalue, we guarantee that it is of the most-derived type
   /// for the object itself.
   const Expr *getBestDynamicClassTypeExpr() const;
@@ -877,7 +884,7 @@
     : Expr(OpaqueValueExprClass, T, VK, OK,
            T->isDependentType() ||
            (SourceExpr && SourceExpr->isTypeDependent()),
-           T->isDependentType() || 
+           T->isDependentType() ||
            (SourceExpr && SourceExpr->isValueDependent()),
            T->isInstantiationDependentType() ||
            (SourceExpr && SourceExpr->isInstantiationDependent()),
@@ -894,14 +901,22 @@
   explicit OpaqueValueExpr(EmptyShell Empty)
     : Expr(OpaqueValueExprClass, Empty) { }
 
-  /// \brief Retrieve the location of this expression.
+  /// Retrieve the location of this expression.
   SourceLocation getLocation() const { return Loc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return SourceExpr ? SourceExpr->getLocStart() : Loc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SourceExpr ? SourceExpr->getLocEnd() : Loc;
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return SourceExpr ? SourceExpr->getBeginLoc() : Loc;
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SourceExpr ? SourceExpr->getEndLoc() : Loc;
   }
   SourceLocation getExprLoc() const LLVM_READONLY {
     if (SourceExpr) return SourceExpr->getExprLoc();
@@ -939,7 +954,7 @@
   }
 };
 
-/// \brief A reference to a declared variable, function, enum, etc.
+/// A reference to a declared variable, function, enum, etc.
 /// [C99 6.5.1p2]
 ///
 /// This encodes all the information about how a declaration is referenced
@@ -967,13 +982,13 @@
       private llvm::TrailingObjects<DeclRefExpr, NestedNameSpecifierLoc,
                                     NamedDecl *, ASTTemplateKWAndArgsInfo,
                                     TemplateArgumentLoc> {
-  /// \brief The declaration that we are referencing.
+  /// The declaration that we are referencing.
   ValueDecl *D;
 
-  /// \brief The location of the declaration name itself.
+  /// The location of the declaration name itself.
   SourceLocation Loc;
 
-  /// \brief Provides source/type location info for the declaration name
+  /// Provides source/type location info for the declaration name
   /// embedded in D.
   DeclarationNameLoc DNLoc;
 
@@ -989,7 +1004,7 @@
     return hasTemplateKWAndArgsInfo() ? 1 : 0;
   }
 
-  /// \brief Test whether there is a distinct FoundDecl attached to the end of
+  /// Test whether there is a distinct FoundDecl attached to the end of
   /// this DRE.
   bool hasFoundDecl() const { return DeclRefExprBits.HasFoundDecl; }
 
@@ -1002,11 +1017,11 @@
               const TemplateArgumentListInfo *TemplateArgs,
               QualType T, ExprValueKind VK);
 
-  /// \brief Construct an empty declaration reference expression.
+  /// Construct an empty declaration reference expression.
   explicit DeclRefExpr(EmptyShell Empty)
     : Expr(DeclRefExprClass, Empty) { }
 
-  /// \brief Computes the type- and value-dependence flags for this
+  /// Computes the type- and value-dependence flags for this
   /// declaration reference expression.
   void computeDependence(const ASTContext &C);
 
@@ -1040,7 +1055,7 @@
          NamedDecl *FoundD = nullptr,
          const TemplateArgumentListInfo *TemplateArgs = nullptr);
 
-  /// \brief Construct an empty declaration reference expression.
+  /// Construct an empty declaration reference expression.
   static DeclRefExpr *CreateEmpty(const ASTContext &Context,
                                   bool HasQualifier,
                                   bool HasFoundDecl,
@@ -1057,14 +1072,22 @@
 
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
-  /// \brief Determine whether this declaration reference was preceded by a
+  /// Determine whether this declaration reference was preceded by a
   /// C++ nested-name-specifier, e.g., \c N::foo.
   bool hasQualifier() const { return DeclRefExprBits.HasQualifier; }
 
-  /// \brief If the name was qualified, retrieves the nested-name-specifier
+  /// If the name was qualified, retrieves the nested-name-specifier
   /// that precedes the name, with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const {
     if (!hasQualifier())
@@ -1072,13 +1095,13 @@
     return *getTrailingObjects<NestedNameSpecifierLoc>();
   }
 
-  /// \brief If the name was qualified, retrieves the nested-name-specifier
+  /// If the name was qualified, retrieves the nested-name-specifier
   /// that precedes the name. Otherwise, returns NULL.
   NestedNameSpecifier *getQualifier() const {
     return getQualifierLoc().getNestedNameSpecifier();
   }
 
-  /// \brief Get the NamedDecl through which this reference occurred.
+  /// Get the NamedDecl through which this reference occurred.
   ///
   /// This Decl may be different from the ValueDecl actually referred to in the
   /// presence of using declarations, etc. It always returns non-NULL, and may
@@ -1088,7 +1111,7 @@
     return hasFoundDecl() ? *getTrailingObjects<NamedDecl *>() : D;
   }
 
-  /// \brief Get the NamedDecl through which this reference occurred.
+  /// Get the NamedDecl through which this reference occurred.
   /// See non-const variant.
   const NamedDecl *getFoundDecl() const {
     return hasFoundDecl() ? *getTrailingObjects<NamedDecl *>() : D;
@@ -1098,36 +1121,36 @@
     return DeclRefExprBits.HasTemplateKWAndArgsInfo;
   }
 
-  /// \brief Retrieve the location of the template keyword preceding
+  /// Retrieve the location of the template keyword preceding
   /// this name, if any.
   SourceLocation getTemplateKeywordLoc() const {
     if (!hasTemplateKWAndArgsInfo()) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->TemplateKWLoc;
   }
 
-  /// \brief Retrieve the location of the left angle bracket starting the
+  /// Retrieve the location of the left angle bracket starting the
   /// explicit template argument list following the name, if any.
   SourceLocation getLAngleLoc() const {
     if (!hasTemplateKWAndArgsInfo()) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->LAngleLoc;
   }
 
-  /// \brief Retrieve the location of the right angle bracket ending the
+  /// Retrieve the location of the right angle bracket ending the
   /// explicit template argument list following the name, if any.
   SourceLocation getRAngleLoc() const {
     if (!hasTemplateKWAndArgsInfo()) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->RAngleLoc;
   }
 
-  /// \brief Determines whether the name in this declaration reference
+  /// Determines whether the name in this declaration reference
   /// was preceded by the template keyword.
   bool hasTemplateKeyword() const { return getTemplateKeywordLoc().isValid(); }
 
-  /// \brief Determines whether this declaration reference was followed by an
+  /// Determines whether this declaration reference was followed by an
   /// explicit template argument list.
   bool hasExplicitTemplateArgs() const { return getLAngleLoc().isValid(); }
 
-  /// \brief Copies the template arguments (if present) into the given
+  /// Copies the template arguments (if present) into the given
   /// structure.
   void copyTemplateArgumentsInto(TemplateArgumentListInfo &List) const {
     if (hasExplicitTemplateArgs())
@@ -1135,7 +1158,7 @@
           getTrailingObjects<TemplateArgumentLoc>(), List);
   }
 
-  /// \brief Retrieve the template arguments provided as part of this
+  /// Retrieve the template arguments provided as part of this
   /// template-id.
   const TemplateArgumentLoc *getTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -1144,7 +1167,7 @@
     return getTrailingObjects<TemplateArgumentLoc>();
   }
 
-  /// \brief Retrieve the number of template arguments provided as part of this
+  /// Retrieve the number of template arguments provided as part of this
   /// template-id.
   unsigned getNumTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -1157,19 +1180,19 @@
     return {getTemplateArgs(), getNumTemplateArgs()};
   }
 
-  /// \brief Returns true if this expression refers to a function that
+  /// Returns true if this expression refers to a function that
   /// was resolved from an overloaded set having size greater than 1.
   bool hadMultipleCandidates() const {
     return DeclRefExprBits.HadMultipleCandidates;
   }
-  /// \brief Sets the flag telling whether this expression refers to
+  /// Sets the flag telling whether this expression refers to
   /// a function that was resolved from an overloaded set having size
   /// greater than 1.
   void setHadMultipleCandidates(bool V = true) {
     DeclRefExprBits.HadMultipleCandidates = V;
   }
 
-  /// \brief Does this DeclRefExpr refer to an enclosing local or a captured
+  /// Does this DeclRefExpr refer to an enclosing local or a captured
   /// variable?
   bool refersToEnclosingVariableOrCapture() const {
     return DeclRefExprBits.RefersToEnclosingVariableOrCapture;
@@ -1193,17 +1216,18 @@
   friend class ASTStmtWriter;
 };
 
-/// \brief [C99 6.4.2.2] - A predefined identifier such as __func__.
+/// [C99 6.4.2.2] - A predefined identifier such as __func__.
 class PredefinedExpr : public Expr {
 public:
   enum IdentType {
     Func,
     Function,
-    LFunction,  // Same as Function, but as wide string.
+    LFunction, // Same as Function, but as wide string.
     FuncDName,
     FuncSig,
+    LFuncSig, // Same as FuncSig, but as as wide string
     PrettyFunction,
-    /// \brief The same as PrettyFunction, except that the
+    /// The same as PrettyFunction, except that the
     /// 'virtual' keyword is omitted for virtual member functions.
     PrettyFunctionNoVirtual
   };
@@ -1217,7 +1241,7 @@
   PredefinedExpr(SourceLocation L, QualType FNTy, IdentType IT,
                  StringLiteral *SL);
 
-  /// \brief Construct an empty predefined expression.
+  /// Construct an empty predefined expression.
   explicit PredefinedExpr(EmptyShell Empty)
       : Expr(PredefinedExprClass, Empty), Loc(), Type(Func), FnName(nullptr) {}
 
@@ -1234,8 +1258,16 @@
   static StringRef getIdentTypeName(IdentType IT);
   static std::string ComputeName(IdentType IT, const Decl *CurrentDecl);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == PredefinedExprClass;
@@ -1250,7 +1282,7 @@
   friend class ASTStmtReader;
 };
 
-/// \brief Used by IntegerLiteral/FloatingLiteral to store the numeric without
+/// Used by IntegerLiteral/FloatingLiteral to store the numeric without
 /// leaking memory.
 ///
 /// For large floats/integers, APFloat/APInt will allocate memory from the heap
@@ -1304,7 +1336,7 @@
 class IntegerLiteral : public Expr, public APIntStorage {
   SourceLocation Loc;
 
-  /// \brief Construct an empty integer literal.
+  /// Construct an empty integer literal.
   explicit IntegerLiteral(EmptyShell Empty)
     : Expr(IntegerLiteralClass, Empty) { }
 
@@ -1314,19 +1346,27 @@
   IntegerLiteral(const ASTContext &C, const llvm::APInt &V, QualType type,
                  SourceLocation l);
 
-  /// \brief Returns a new integer literal with value 'V' and type 'type'.
+  /// Returns a new integer literal with value 'V' and type 'type'.
   /// \param type - either IntTy, LongTy, LongLongTy, UnsignedIntTy,
   /// UnsignedLongTy, or UnsignedLongLongTy which should match the size of V
   /// \param V - the value that the returned integer literal contains.
   static IntegerLiteral *Create(const ASTContext &C, const llvm::APInt &V,
                                 QualType type, SourceLocation l);
-  /// \brief Returns a new empty integer literal.
+  /// Returns a new empty integer literal.
   static IntegerLiteral *Create(const ASTContext &C, EmptyShell Empty);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
-  /// \brief Retrieve the location of the literal.
+  /// Retrieve the location of the literal.
   SourceLocation getLocation() const { return Loc; }
 
   void setLocation(SourceLocation Location) { Loc = Location; }
@@ -1344,6 +1384,55 @@
   }
 };
 
+class FixedPointLiteral : public Expr, public APIntStorage {
+  SourceLocation Loc;
+  unsigned Scale;
+
+  /// \brief Construct an empty integer literal.
+  explicit FixedPointLiteral(EmptyShell Empty)
+      : Expr(FixedPointLiteralClass, Empty) {}
+
+ public:
+  FixedPointLiteral(const ASTContext &C, const llvm::APInt &V, QualType type,
+                    SourceLocation l, unsigned Scale);
+
+  // Store the int as is without any bit shifting.
+  static FixedPointLiteral *CreateFromRawInt(const ASTContext &C,
+                                             const llvm::APInt &V,
+                                             QualType type, SourceLocation l,
+                                             unsigned Scale);
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
+
+  /// \brief Retrieve the location of the literal.
+  SourceLocation getLocation() const { return Loc; }
+
+  void setLocation(SourceLocation Location) { Loc = Location; }
+
+  static bool classof(const Stmt *T) {
+    return T->getStmtClass() == FixedPointLiteralClass;
+  }
+
+  std::string getValueAsString(unsigned Radix) const;
+
+  // Iterators
+  child_range children() {
+    return child_range(child_iterator(), child_iterator());
+  }
+  const_child_range children() const {
+    return const_child_range(const_child_iterator(), const_child_iterator());
+  }
+};
+
 class CharacterLiteral : public Expr {
 public:
   enum CharacterKind {
@@ -1367,7 +1456,7 @@
     CharacterLiteralBits.Kind = kind;
   }
 
-  /// \brief Construct an empty character literal.
+  /// Construct an empty character literal.
   CharacterLiteral(EmptyShell Empty) : Expr(CharacterLiteralClass, Empty) { }
 
   SourceLocation getLocation() const { return Loc; }
@@ -1375,8 +1464,16 @@
     return static_cast<CharacterKind>(CharacterLiteralBits.Kind);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   unsigned getValue() const { return Value; }
 
@@ -1403,7 +1500,7 @@
   FloatingLiteral(const ASTContext &C, const llvm::APFloat &V, bool isexact,
                   QualType Type, SourceLocation L);
 
-  /// \brief Construct an empty floating-point literal.
+  /// Construct an empty floating-point literal.
   explicit FloatingLiteral(const ASTContext &C, EmptyShell Empty);
 
 public:
@@ -1448,8 +1545,16 @@
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == FloatingLiteralClass;
@@ -1477,7 +1582,7 @@
            false, false),
       Val(val) {}
 
-  /// \brief Build an empty imaginary literal.
+  /// Build an empty imaginary literal.
   explicit ImaginaryLiteral(EmptyShell Empty)
     : Expr(ImaginaryLiteralClass, Empty) { }
 
@@ -1485,8 +1590,18 @@
   Expr *getSubExpr() { return cast<Expr>(Val); }
   void setSubExpr(Expr *E) { Val = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Val->getLocStart(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Val->getLocEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return Val->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Val->getEndLoc(); }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ImaginaryLiteralClass;
@@ -1560,7 +1675,7 @@
     return Create(C, Str, Kind, Pascal, Ty, &Loc, 1);
   }
 
-  /// \brief Construct an empty string literal.
+  /// Construct an empty string literal.
   static StringLiteral *CreateEmpty(const ASTContext &C, unsigned NumStrs);
 
   StringRef getString() const {
@@ -1599,7 +1714,7 @@
   unsigned getLength() const { return Length; }
   unsigned getCharByteWidth() const { return CharByteWidth; }
 
-  /// \brief Sets the string data to the given string data.
+  /// Sets the string data to the given string data.
   void setString(const ASTContext &C, StringRef Str,
                  StringKind Kind, bool IsPascal);
 
@@ -1613,6 +1728,14 @@
   bool isUTF32() const { return Kind == UTF32; }
   bool isPascal() const { return IsPascal; }
 
+  bool containsNonAscii() const {
+    StringRef Str = getString();
+    for (unsigned i = 0, e = Str.size(); i != e; ++i)
+      if (!isASCII(Str[i]))
+        return true;
+    return false;
+  }
+
   bool containsNonAsciiOrNull() const {
     StringRef Str = getString();
     for (unsigned i = 0, e = Str.size(); i != e; ++i)
@@ -1651,8 +1774,16 @@
   tokloc_iterator tokloc_begin() const { return TokLocs; }
   tokloc_iterator tokloc_end() const { return TokLocs + NumConcatenated; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return TokLocs[0]; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return TokLocs[0]; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     return TokLocs[NumConcatenated - 1];
   }
 
@@ -1683,7 +1814,7 @@
            val->containsUnexpandedParameterPack()),
       L(l), R(r), Val(val) {}
 
-  /// \brief Construct an empty parenthesized expression.
+  /// Construct an empty parenthesized expression.
   explicit ParenExpr(EmptyShell Empty)
     : Expr(ParenExprClass, Empty) { }
 
@@ -1691,14 +1822,22 @@
   Expr *getSubExpr() { return cast<Expr>(Val); }
   void setSubExpr(Expr *E) { Val = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return L; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return R; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return L; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return R; }
 
-  /// \brief Get the location of the left parentheses '('.
+  /// Get the location of the left parentheses '('.
   SourceLocation getLParen() const { return L; }
   void setLParen(SourceLocation Loc) { L = Loc; }
 
-  /// \brief Get the location of the right parentheses ')'.
+  /// Get the location of the right parentheses ')'.
   SourceLocation getRParen() const { return R; }
   void setRParen(SourceLocation Loc) { R = Loc; }
 
@@ -1743,7 +1882,7 @@
              input->containsUnexpandedParameterPack()),
         Opc(opc), CanOverflow(CanOverflow), Loc(l), Val(input) {}
 
-  /// \brief Build an empty unary operator.
+  /// Build an empty unary operator.
   explicit UnaryOperator(EmptyShell Empty)
     : Expr(UnaryOperatorClass, Empty), Opc(UO_AddrOf) { }
 
@@ -1807,19 +1946,27 @@
   /// corresponds to, e.g. "sizeof" or "[pre]++"
   static StringRef getOpcodeStr(Opcode Op);
 
-  /// \brief Retrieve the unary opcode that corresponds to the given
+  /// Retrieve the unary opcode that corresponds to the given
   /// overloaded operator.
   static Opcode getOverloadedOpcode(OverloadedOperatorKind OO, bool Postfix);
 
-  /// \brief Retrieve the overloaded operator kind that corresponds to
+  /// Retrieve the overloaded operator kind that corresponds to
   /// the given unary opcode.
   static OverloadedOperatorKind getOverloadedOperator(Opcode Opc);
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return isPostfix() ? Val->getLocStart() : Loc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return isPostfix() ? Loc : Val->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return isPostfix() ? Val->getBeginLoc() : Loc;
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return isPostfix() ? Loc : Val->getEndLoc();
   }
   SourceLocation getExprLoc() const LLVM_READONLY { return Loc; }
 
@@ -1839,15 +1986,15 @@
 // __builtin_offsetof(type, identifier(.identifier|[expr])*)
 class OffsetOfNode {
 public:
-  /// \brief The kind of offsetof node we have.
+  /// The kind of offsetof node we have.
   enum Kind {
-    /// \brief An index into an array.
+    /// An index into an array.
     Array = 0x00,
-    /// \brief A field.
+    /// A field.
     Field = 0x01,
-    /// \brief A field in a dependent type, known only by its name.
+    /// A field in a dependent type, known only by its name.
     Identifier = 0x02,
-    /// \brief An implicit indirection through a C++ base class, when the
+    /// An implicit indirection through a C++ base class, when the
     /// field found is in a base class.
     Base = 0x03
   };
@@ -1855,10 +2002,10 @@
 private:
   enum { MaskBits = 2, Mask = 0x03 };
 
-  /// \brief The source range that covers this part of the designator.
+  /// The source range that covers this part of the designator.
   SourceRange Range;
 
-  /// \brief The data describing the designator, which comes in three
+  /// The data describing the designator, which comes in three
   /// different forms, depending on the lower two bits.
   ///   - An unsigned index into the array of Expr*'s stored after this node
   ///     in memory, for [constant-expression] designators.
@@ -1870,61 +2017,69 @@
   uintptr_t Data;
 
 public:
-  /// \brief Create an offsetof node that refers to an array element.
+  /// Create an offsetof node that refers to an array element.
   OffsetOfNode(SourceLocation LBracketLoc, unsigned Index,
                SourceLocation RBracketLoc)
       : Range(LBracketLoc, RBracketLoc), Data((Index << 2) | Array) {}
 
-  /// \brief Create an offsetof node that refers to a field.
+  /// Create an offsetof node that refers to a field.
   OffsetOfNode(SourceLocation DotLoc, FieldDecl *Field, SourceLocation NameLoc)
       : Range(DotLoc.isValid() ? DotLoc : NameLoc, NameLoc),
         Data(reinterpret_cast<uintptr_t>(Field) | OffsetOfNode::Field) {}
 
-  /// \brief Create an offsetof node that refers to an identifier.
+  /// Create an offsetof node that refers to an identifier.
   OffsetOfNode(SourceLocation DotLoc, IdentifierInfo *Name,
                SourceLocation NameLoc)
       : Range(DotLoc.isValid() ? DotLoc : NameLoc, NameLoc),
         Data(reinterpret_cast<uintptr_t>(Name) | Identifier) {}
 
-  /// \brief Create an offsetof node that refers into a C++ base class.
+  /// Create an offsetof node that refers into a C++ base class.
   explicit OffsetOfNode(const CXXBaseSpecifier *Base)
       : Range(), Data(reinterpret_cast<uintptr_t>(Base) | OffsetOfNode::Base) {}
 
-  /// \brief Determine what kind of offsetof node this is.
+  /// Determine what kind of offsetof node this is.
   Kind getKind() const { return static_cast<Kind>(Data & Mask); }
 
-  /// \brief For an array element node, returns the index into the array
+  /// For an array element node, returns the index into the array
   /// of expressions.
   unsigned getArrayExprIndex() const {
     assert(getKind() == Array);
     return Data >> 2;
   }
 
-  /// \brief For a field offsetof node, returns the field.
+  /// For a field offsetof node, returns the field.
   FieldDecl *getField() const {
     assert(getKind() == Field);
     return reinterpret_cast<FieldDecl *>(Data & ~(uintptr_t)Mask);
   }
 
-  /// \brief For a field or identifier offsetof node, returns the name of
+  /// For a field or identifier offsetof node, returns the name of
   /// the field.
   IdentifierInfo *getFieldName() const;
 
-  /// \brief For a base class node, returns the base specifier.
+  /// For a base class node, returns the base specifier.
   CXXBaseSpecifier *getBase() const {
     assert(getKind() == Base);
     return reinterpret_cast<CXXBaseSpecifier *>(Data & ~(uintptr_t)Mask);
   }
 
-  /// \brief Retrieve the source range that covers this offsetof node.
+  /// Retrieve the source range that covers this offsetof node.
   ///
   /// For an array element node, the source range contains the locations of
   /// the square brackets. For a field or identifier node, the source range
   /// contains the location of the period (if there is one) and the
   /// identifier.
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 };
 
 /// OffsetOfExpr - [C99 7.17] - This represents an expression of the form
@@ -1979,7 +2134,7 @@
   SourceLocation getOperatorLoc() const { return OperatorLoc; }
   void setOperatorLoc(SourceLocation L) { OperatorLoc = L; }
 
-  /// \brief Return the location of the right parentheses.
+  /// Return the location of the right parentheses.
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation R) { RParenLoc = R; }
 
@@ -2023,8 +2178,16 @@
     return NumExprs;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return OperatorLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return OperatorLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == OffsetOfExprClass;
@@ -2073,7 +2236,7 @@
                            QualType resultType, SourceLocation op,
                            SourceLocation rp);
 
-  /// \brief Construct an empty sizeof/alignof expression.
+  /// Construct an empty sizeof/alignof expression.
   explicit UnaryExprOrTypeTraitExpr(EmptyShell Empty)
     : Expr(UnaryExprOrTypeTraitExprClass, Empty) { }
 
@@ -2119,8 +2282,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return OpLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return OpLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == UnaryExprOrTypeTraitExprClass;
@@ -2156,7 +2327,7 @@
     SubExprs[RHS] = rhs;
   }
 
-  /// \brief Create an empty array subscript expression.
+  /// Create an empty array subscript expression.
   explicit ArraySubscriptExpr(EmptyShell Shell)
     : Expr(ArraySubscriptExprClass, Shell) { }
 
@@ -2193,10 +2364,18 @@
     return getRHS()->getType()->isIntegerType() ? getRHS() : getLHS();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getLHS()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBracketLoc; }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getLHS()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBracketLoc; }
 
   SourceLocation getRBracketLoc() const { return RBracketLoc; }
   void setRBracketLoc(SourceLocation L) { RBracketLoc = L; }
@@ -2261,7 +2440,7 @@
   CallExpr(const ASTContext& C, Expr *fn, ArrayRef<Expr*> args, QualType t,
            ExprValueKind VK, SourceLocation rparenloc);
 
-  /// \brief Build an empty call expression.
+  /// Build an empty call expression.
   CallExpr(const ASTContext &C, StmtClass SC, EmptyShell Empty);
 
   const Expr *getCallee() const { return cast<Expr>(SubExprs[FN]); }
@@ -2273,7 +2452,7 @@
     return const_cast<CallExpr*>(this)->getCalleeDecl();
   }
 
-  /// \brief If the callee is a FunctionDecl, return it. Otherwise return 0.
+  /// If the callee is a FunctionDecl, return it. Otherwise return 0.
   FunctionDecl *getDirectCallee();
   const FunctionDecl *getDirectCallee() const {
     return const_cast<CallExpr*>(this)->getDirectCallee();
@@ -2283,7 +2462,7 @@
   ///
   unsigned getNumArgs() const { return NumArgs; }
 
-  /// \brief Retrieve the call arguments.
+  /// Retrieve the call arguments.
   Expr **getArgs() {
     return reinterpret_cast<Expr **>(SubExprs+getNumPreArgs()+PREARGS_START);
   }
@@ -2351,7 +2530,7 @@
   /// of the callee. If not, return 0.
   unsigned getBuiltinCallee() const;
 
-  /// \brief Returns \c true if this is a call to a builtin which does not
+  /// Returns \c true if this is a call to a builtin which does not
   /// evaluate side-effects within its arguments.
   bool isUnevaluatedBuiltinCall(const ASTContext &Ctx) const;
 
@@ -2363,8 +2542,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   /// Return true if this is a call to __assume() or __builtin_assume() with
   /// a non-value-dependent constant parameter evaluating as false.
@@ -2395,11 +2582,11 @@
 
 /// Extra data stored in some MemberExpr objects.
 struct MemberExprNameQualifier {
-  /// \brief The nested-name-specifier that qualifies the name, including
+  /// The nested-name-specifier that qualifies the name, including
   /// source-location information.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief The DeclAccessPair through which the MemberDecl was found due to
+  /// The DeclAccessPair through which the MemberDecl was found due to
   /// name qualifiers.
   DeclAccessPair FoundDecl;
 };
@@ -2432,20 +2619,20 @@
   /// IsArrow - True if this is "X->F", false if this is "X.F".
   bool IsArrow : 1;
 
-  /// \brief True if this member expression used a nested-name-specifier to
+  /// True if this member expression used a nested-name-specifier to
   /// refer to the member, e.g., "x->Base::f", or found its member via a using
   /// declaration.  When true, a MemberExprNameQualifier
   /// structure is allocated immediately after the MemberExpr.
   bool HasQualifierOrFoundDecl : 1;
 
-  /// \brief True if this member expression specified a template keyword
+  /// True if this member expression specified a template keyword
   /// and/or a template argument list explicitly, e.g., x->f<int>,
   /// x->template f, x->template f<int>.
   /// When true, an ASTTemplateKWAndArgsInfo structure and its
   /// TemplateArguments (if any) are present.
   bool HasTemplateKWAndArgsInfo : 1;
 
-  /// \brief True if this member expression refers to a method that
+  /// True if this member expression refers to a method that
   /// was resolved from an overloaded set having size greater than 1.
   bool HadMultipleCandidates : 1;
 
@@ -2498,14 +2685,14 @@
   void setBase(Expr *E) { Base = E; }
   Expr *getBase() const { return cast<Expr>(Base); }
 
-  /// \brief Retrieve the member declaration to which this expression refers.
+  /// Retrieve the member declaration to which this expression refers.
   ///
   /// The returned declaration will be a FieldDecl or (in C++) a VarDecl (for
   /// static data members), a CXXMethodDecl, or an EnumConstantDecl.
   ValueDecl *getMemberDecl() const { return MemberDecl; }
   void setMemberDecl(ValueDecl *D) { MemberDecl = D; }
 
-  /// \brief Retrieves the declaration found by lookup.
+  /// Retrieves the declaration found by lookup.
   DeclAccessPair getFoundDecl() const {
     if (!HasQualifierOrFoundDecl)
       return DeclAccessPair::make(getMemberDecl(),
@@ -2513,12 +2700,12 @@
     return getTrailingObjects<MemberExprNameQualifier>()->FoundDecl;
   }
 
-  /// \brief Determines whether this member expression actually had
+  /// Determines whether this member expression actually had
   /// a C++ nested-name-specifier prior to the name of the member, e.g.,
   /// x->Base::foo.
   bool hasQualifier() const { return getQualifier() != nullptr; }
 
-  /// \brief If the member name was qualified, retrieves the
+  /// If the member name was qualified, retrieves the
   /// nested-name-specifier that precedes the member name, with source-location
   /// information.
   NestedNameSpecifierLoc getQualifierLoc() const {
@@ -2528,28 +2715,28 @@
     return getTrailingObjects<MemberExprNameQualifier>()->QualifierLoc;
   }
 
-  /// \brief If the member name was qualified, retrieves the
+  /// If the member name was qualified, retrieves the
   /// nested-name-specifier that precedes the member name. Otherwise, returns
   /// NULL.
   NestedNameSpecifier *getQualifier() const {
     return getQualifierLoc().getNestedNameSpecifier();
   }
 
-  /// \brief Retrieve the location of the template keyword preceding
+  /// Retrieve the location of the template keyword preceding
   /// the member name, if any.
   SourceLocation getTemplateKeywordLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->TemplateKWLoc;
   }
 
-  /// \brief Retrieve the location of the left angle bracket starting the
+  /// Retrieve the location of the left angle bracket starting the
   /// explicit template argument list following the member name, if any.
   SourceLocation getLAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->LAngleLoc;
   }
 
-  /// \brief Retrieve the location of the right angle bracket ending the
+  /// Retrieve the location of the right angle bracket ending the
   /// explicit template argument list following the member name, if any.
   SourceLocation getRAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
@@ -2559,11 +2746,11 @@
   /// Determines whether the member name was preceded by the template keyword.
   bool hasTemplateKeyword() const { return getTemplateKeywordLoc().isValid(); }
 
-  /// \brief Determines whether the member name was followed by an
+  /// Determines whether the member name was followed by an
   /// explicit template argument list.
   bool hasExplicitTemplateArgs() const { return getLAngleLoc().isValid(); }
 
-  /// \brief Copies the template arguments (if present) into the given
+  /// Copies the template arguments (if present) into the given
   /// structure.
   void copyTemplateArgumentsInto(TemplateArgumentListInfo &List) const {
     if (hasExplicitTemplateArgs())
@@ -2571,7 +2758,7 @@
           getTrailingObjects<TemplateArgumentLoc>(), List);
   }
 
-  /// \brief Retrieve the template arguments provided as part of this
+  /// Retrieve the template arguments provided as part of this
   /// template-id.
   const TemplateArgumentLoc *getTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -2580,7 +2767,7 @@
     return getTrailingObjects<TemplateArgumentLoc>();
   }
 
-  /// \brief Retrieve the number of template arguments provided as part of this
+  /// Retrieve the number of template arguments provided as part of this
   /// template-id.
   unsigned getNumTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -2593,7 +2780,7 @@
     return {getTemplateArgs(), getNumTemplateArgs()};
   }
 
-  /// \brief Retrieve the member declaration name info.
+  /// Retrieve the member declaration name info.
   DeclarationNameInfo getMemberNameInfo() const {
     return DeclarationNameInfo(MemberDecl->getDeclName(),
                                MemberLoc, MemberDNLoc);
@@ -2609,29 +2796,37 @@
   SourceLocation getMemberLoc() const { return MemberLoc; }
   void setMemberLoc(SourceLocation L) { MemberLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   SourceLocation getExprLoc() const LLVM_READONLY { return MemberLoc; }
 
-  /// \brief Determine whether the base of this explicit is implicit.
+  /// Determine whether the base of this explicit is implicit.
   bool isImplicitAccess() const {
     return getBase() && getBase()->isImplicitCXXThis();
   }
 
-  /// \brief Returns true if this member expression refers to a method that
+  /// Returns true if this member expression refers to a method that
   /// was resolved from an overloaded set having size greater than 1.
   bool hadMultipleCandidates() const {
     return HadMultipleCandidates;
   }
-  /// \brief Sets the flag telling whether this expression refers to
+  /// Sets the flag telling whether this expression refers to
   /// a method that was resolved from an overloaded set having size
   /// greater than 1.
   void setHadMultipleCandidates(bool V = true) {
     HadMultipleCandidates = V;
   }
 
-  /// \brief Returns true if virtual dispatch is performed.
+  /// Returns true if virtual dispatch is performed.
   /// If the member access is fully qualified, (i.e. X::f()), virtual
   /// dispatching is not performed. In -fapple-kext mode qualified
   /// calls to virtual method will still go through the vtable.
@@ -2678,7 +2873,7 @@
            init->containsUnexpandedParameterPack()),
       LParenLoc(lparenloc), TInfoAndScope(tinfo, fileScope), Init(init) {}
 
-  /// \brief Construct an empty compound literal.
+  /// Construct an empty compound literal.
   explicit CompoundLiteralExpr(EmptyShell Empty)
     : Expr(CompoundLiteralExprClass, Empty) { }
 
@@ -2699,19 +2894,27 @@
     TInfoAndScope.setPointer(tinfo);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     // FIXME: Init should never be null.
     if (!Init)
       return SourceLocation();
     if (LParenLoc.isInvalid())
-      return Init->getLocStart();
+      return Init->getBeginLoc();
     return LParenLoc;
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     // FIXME: Init should never be null.
     if (!Init)
       return SourceLocation();
-    return Init->getLocEnd();
+    return Init->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -2730,20 +2933,26 @@
 /// representation in the source code (ExplicitCastExpr's derived
 /// classes).
 class CastExpr : public Expr {
+public:
+  using BasePathSizeTy = unsigned int;
+  static_assert(std::numeric_limits<BasePathSizeTy>::max() >= 16384,
+                "[implimits] Direct and indirect base classes [16384].");
+
 private:
   Stmt *Op;
 
   bool CastConsistency() const;
 
+  BasePathSizeTy *BasePathSize();
+
   const CXXBaseSpecifier * const *path_buffer() const {
     return const_cast<CastExpr*>(this)->path_buffer();
   }
   CXXBaseSpecifier **path_buffer();
 
-  void setBasePathSize(unsigned basePathSize) {
-    CastExprBits.BasePathSize = basePathSize;
-    assert(CastExprBits.BasePathSize == basePathSize &&
-           "basePathSize doesn't fit in bits of CastExprBits.BasePathSize!");
+  void setBasePathSize(BasePathSizeTy basePathSize) {
+    assert(!path_empty() && basePathSize != 0);
+    *(BasePathSize()) = basePathSize;
   }
 
 protected:
@@ -2765,26 +2974,34 @@
               (op && op->containsUnexpandedParameterPack()))),
         Op(op) {
     CastExprBits.Kind = kind;
-    setBasePathSize(BasePathSize);
+    CastExprBits.PartOfExplicitCast = false;
+    CastExprBits.BasePathIsEmpty = BasePathSize == 0;
+    if (!path_empty())
+      setBasePathSize(BasePathSize);
     assert(CastConsistency());
   }
 
-  /// \brief Construct an empty cast.
+  /// Construct an empty cast.
   CastExpr(StmtClass SC, EmptyShell Empty, unsigned BasePathSize)
     : Expr(SC, Empty) {
-    setBasePathSize(BasePathSize);
+    CastExprBits.PartOfExplicitCast = false;
+    CastExprBits.BasePathIsEmpty = BasePathSize == 0;
+    if (!path_empty())
+      setBasePathSize(BasePathSize);
   }
 
 public:
   CastKind getCastKind() const { return (CastKind) CastExprBits.Kind; }
   void setCastKind(CastKind K) { CastExprBits.Kind = K; }
-  const char *getCastKindName() const;
+
+  static const char *getCastKindName(CastKind CK);
+  const char *getCastKindName() const { return getCastKindName(getCastKind()); }
 
   Expr *getSubExpr() { return cast<Expr>(Op); }
   const Expr *getSubExpr() const { return cast<Expr>(Op); }
   void setSubExpr(Expr *E) { Op = E; }
 
-  /// \brief Retrieve the cast subexpression as it was written in the source
+  /// Retrieve the cast subexpression as it was written in the source
   /// code, looking through any implicit casts or other intermediate nodes
   /// introduced by semantic analysis.
   Expr *getSubExprAsWritten();
@@ -2792,10 +3009,18 @@
     return const_cast<CastExpr *>(this)->getSubExprAsWritten();
   }
 
+  /// If this cast applies a user-defined conversion, retrieve the conversion
+  /// function that it invokes.
+  NamedDecl *getConversionFunction() const;
+
   typedef CXXBaseSpecifier **path_iterator;
   typedef const CXXBaseSpecifier * const *path_const_iterator;
-  bool path_empty() const { return CastExprBits.BasePathSize == 0; }
-  unsigned path_size() const { return CastExprBits.BasePathSize; }
+  bool path_empty() const { return CastExprBits.BasePathIsEmpty; }
+  unsigned path_size() const {
+    if (path_empty())
+      return 0U;
+    return *(const_cast<CastExpr *>(this)->BasePathSize());
+  }
   path_iterator path_begin() { return path_buffer(); }
   path_iterator path_end() { return path_buffer() + path_size(); }
   path_const_iterator path_begin() const { return path_buffer(); }
@@ -2843,14 +3068,19 @@
 /// @endcode
 class ImplicitCastExpr final
     : public CastExpr,
-      private llvm::TrailingObjects<ImplicitCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<ImplicitCastExpr, CastExpr::BasePathSizeTy,
+                                    CXXBaseSpecifier *> {
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 private:
   ImplicitCastExpr(QualType ty, CastKind kind, Expr *op,
                    unsigned BasePathLength, ExprValueKind VK)
     : CastExpr(ImplicitCastExprClass, ty, VK, kind, op, BasePathLength) {
   }
 
-  /// \brief Construct an empty implicit cast.
+  /// Construct an empty implicit cast.
   explicit ImplicitCastExpr(EmptyShell Shell, unsigned PathSize)
     : CastExpr(ImplicitCastExprClass, Shell, PathSize) { }
 
@@ -2861,6 +3091,11 @@
     : CastExpr(ImplicitCastExprClass, ty, VK, kind, op, 0) {
   }
 
+  bool isPartOfExplicitCast() const { return CastExprBits.PartOfExplicitCast; }
+  void setIsPartOfExplicitCast(bool PartOfExplicitCast) {
+    CastExprBits.PartOfExplicitCast = PartOfExplicitCast;
+  }
+
   static ImplicitCastExpr *Create(const ASTContext &Context, QualType T,
                                   CastKind Kind, Expr *Operand,
                                   const CXXCastPath *BasePath,
@@ -2869,11 +3104,19 @@
   static ImplicitCastExpr *CreateEmpty(const ASTContext &Context,
                                        unsigned PathSize);
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getSubExpr()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getSubExpr()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getSubExpr()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getSubExpr()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -2918,7 +3161,7 @@
                    TypeSourceInfo *writtenTy)
     : CastExpr(SC, exprTy, VK, kind, op, PathSize), TInfo(writtenTy) {}
 
-  /// \brief Construct an empty explicit cast.
+  /// Construct an empty explicit cast.
   ExplicitCastExpr(StmtClass SC, EmptyShell Shell, unsigned PathSize)
     : CastExpr(SC, Shell, PathSize) { }
 
@@ -2943,7 +3186,8 @@
 /// (Type)expr. For example: @c (int)f.
 class CStyleCastExpr final
     : public ExplicitCastExpr,
-      private llvm::TrailingObjects<CStyleCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<CStyleCastExpr, CastExpr::BasePathSizeTy,
+                                    CXXBaseSpecifier *> {
   SourceLocation LPLoc; // the location of the left paren
   SourceLocation RPLoc; // the location of the right paren
 
@@ -2953,10 +3197,14 @@
     : ExplicitCastExpr(CStyleCastExprClass, exprTy, vk, kind, op, PathSize,
                        writtenTy), LPLoc(l), RPLoc(r) {}
 
-  /// \brief Construct an empty C-style explicit cast.
+  /// Construct an empty C-style explicit cast.
   explicit CStyleCastExpr(EmptyShell Shell, unsigned PathSize)
     : ExplicitCastExpr(CStyleCastExprClass, Shell, PathSize) { }
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   static CStyleCastExpr *Create(const ASTContext &Context, QualType T,
                                 ExprValueKind VK, CastKind K,
@@ -2973,9 +3221,17 @@
   SourceLocation getRParenLoc() const { return RPLoc; }
   void setRParenLoc(SourceLocation L) { RPLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LPLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getSubExpr()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LPLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getSubExpr()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -2986,7 +3242,7 @@
   friend class CastExpr;
 };
 
-/// \brief A builtin binary operation expression such as "x + y" or "x <= y".
+/// A builtin binary operation expression such as "x + y" or "x <= y".
 ///
 /// This expression node kind describes a builtin binary operation,
 /// such as "x + y" for integer values "x" and "y". The operands will
@@ -3037,7 +3293,7 @@
            "Use CompoundAssignOperator for compound assignments");
   }
 
-  /// \brief Construct an empty binary operator.
+  /// Construct an empty binary operator.
   explicit BinaryOperator(EmptyShell Empty)
     : Expr(BinaryOperatorClass, Empty), Opc(BO_Comma) { }
 
@@ -3053,11 +3309,19 @@
   Expr *getRHS() const { return cast<Expr>(SubExprs[RHS]); }
   void setRHS(Expr *E) { SubExprs[RHS] = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getLHS()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getRHS()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getLHS()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getRHS()->getEndLoc();
   }
 
   /// getOpcodeStr - Turn an Opcode enum value into the punctuation char it
@@ -3066,11 +3330,11 @@
 
   StringRef getOpcodeStr() const { return getOpcodeStr(getOpcode()); }
 
-  /// \brief Retrieve the binary opcode that corresponds to the given
+  /// Retrieve the binary opcode that corresponds to the given
   /// overloaded operator.
   static Opcode getOverloadedOpcode(OverloadedOperatorKind OO);
 
-  /// \brief Retrieve the overloaded operator kind that corresponds to
+  /// Retrieve the overloaded operator kind that corresponds to
   /// the given binary opcode.
   static OverloadedOperatorKind getOverloadedOperator(Opcode Opc);
 
@@ -3100,7 +3364,7 @@
   static Opcode negateComparisonOp(Opcode Opc) {
     switch (Opc) {
     default:
-      llvm_unreachable("Not a comparsion operator.");
+      llvm_unreachable("Not a comparison operator.");
     case BO_LT: return BO_GE;
     case BO_GT: return BO_LE;
     case BO_LE: return BO_GT;
@@ -3113,7 +3377,7 @@
   static Opcode reverseComparisonOp(Opcode Opc) {
     switch (Opc) {
     default:
-      llvm_unreachable("Not a comparsion operator.");
+      llvm_unreachable("Not a comparison operator.");
     case BO_LT: return BO_GT;
     case BO_GT: return BO_LT;
     case BO_LE: return BO_GE;
@@ -3226,7 +3490,7 @@
            "Only should be used for compound assignments");
   }
 
-  /// \brief Build an empty compound assignment operator expression.
+  /// Build an empty compound assignment operator expression.
   explicit CompoundAssignOperator(EmptyShell Empty)
     : BinaryOperator(CompoundAssignOperatorClass, Empty) { }
 
@@ -3316,7 +3580,7 @@
     SubExprs[RHS] = rhs;
   }
 
-  /// \brief Build an empty conditional operator.
+  /// Build an empty conditional operator.
   explicit ConditionalOperator(EmptyShell Empty)
     : AbstractConditionalOperator(ConditionalOperatorClass, Empty) { }
 
@@ -3336,11 +3600,19 @@
   Expr *getLHS() const { return cast<Expr>(SubExprs[LHS]); }
   Expr *getRHS() const { return cast<Expr>(SubExprs[RHS]); }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getCond()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getRHS()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getCond()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getRHS()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -3394,41 +3666,49 @@
     assert(OpaqueValue->getSourceExpr() == common && "Wrong opaque value");
   }
 
-  /// \brief Build an empty conditional operator.
+  /// Build an empty conditional operator.
   explicit BinaryConditionalOperator(EmptyShell Empty)
     : AbstractConditionalOperator(BinaryConditionalOperatorClass, Empty) { }
 
-  /// \brief getCommon - Return the common expression, written to the
+  /// getCommon - Return the common expression, written to the
   ///   left of the condition.  The opaque value will be bound to the
   ///   result of this expression.
   Expr *getCommon() const { return cast<Expr>(SubExprs[COMMON]); }
 
-  /// \brief getOpaqueValue - Return the opaque value placeholder.
+  /// getOpaqueValue - Return the opaque value placeholder.
   OpaqueValueExpr *getOpaqueValue() const { return OpaqueValue; }
 
-  /// \brief getCond - Return the condition expression; this is defined
+  /// getCond - Return the condition expression; this is defined
   ///   in terms of the opaque value.
   Expr *getCond() const { return cast<Expr>(SubExprs[COND]); }
 
-  /// \brief getTrueExpr - Return the subexpression which will be
+  /// getTrueExpr - Return the subexpression which will be
   ///   evaluated if the condition evaluates to true;  this is defined
   ///   in terms of the opaque value.
   Expr *getTrueExpr() const {
     return cast<Expr>(SubExprs[LHS]);
   }
 
-  /// \brief getFalseExpr - Return the subexpression which will be
+  /// getFalseExpr - Return the subexpression which will be
   ///   evaluated if the condnition evaluates to false; this is
   ///   defined in terms of the opaque value.
   Expr *getFalseExpr() const {
     return cast<Expr>(SubExprs[RHS]);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getCommon()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getFalseExpr()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getCommon()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getFalseExpr()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -3473,7 +3753,7 @@
            false),
       AmpAmpLoc(AALoc), LabelLoc(LLoc), Label(L) {}
 
-  /// \brief Build an empty address of a label expression.
+  /// Build an empty address of a label expression.
   explicit AddrLabelExpr(EmptyShell Empty)
     : Expr(AddrLabelExprClass, Empty) { }
 
@@ -3482,8 +3762,16 @@
   SourceLocation getLabelLoc() const { return LabelLoc; }
   void setLabelLoc(SourceLocation L) { LabelLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AmpAmpLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return LabelLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AmpAmpLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return LabelLoc; }
 
   LabelDecl *getLabel() const { return Label; }
   void setLabel(LabelDecl *L) { Label = L; }
@@ -3520,15 +3808,23 @@
          T->isDependentType(), false, false, false),
     SubStmt(substmt), LParenLoc(lp), RParenLoc(rp) { }
 
-  /// \brief Build an empty statement expression.
+  /// Build an empty statement expression.
   explicit StmtExpr(EmptyShell Empty) : Expr(StmtExprClass, Empty) { }
 
   CompoundStmt *getSubStmt() { return cast<CompoundStmt>(SubStmt); }
   const CompoundStmt *getSubStmt() const { return cast<CompoundStmt>(SubStmt); }
   void setSubStmt(CompoundStmt *S) { SubStmt = S; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LParenLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   SourceLocation getLParenLoc() const { return LParenLoc; }
   void setLParenLoc(SourceLocation L) { LParenLoc = L; }
@@ -3566,7 +3862,7 @@
   ShuffleVectorExpr(const ASTContext &C, ArrayRef<Expr*> args, QualType Type,
                     SourceLocation BLoc, SourceLocation RP);
 
-  /// \brief Build an empty vector-shuffle expression.
+  /// Build an empty vector-shuffle expression.
   explicit ShuffleVectorExpr(EmptyShell Empty)
     : Expr(ShuffleVectorExprClass, Empty), SubExprs(nullptr) { }
 
@@ -3576,8 +3872,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ShuffleVectorExprClass;
@@ -3588,7 +3892,7 @@
   /// pointers.
   unsigned getNumSubExprs() const { return NumExprs; }
 
-  /// \brief Retrieve the array of expressions.
+  /// Retrieve the array of expressions.
   Expr **getSubExprs() { return reinterpret_cast<Expr **>(SubExprs); }
 
   /// getExpr - Return the Expr at the specified index.
@@ -3660,8 +3964,16 @@
   /// getRParenLoc - Return the location of final right parenthesis.
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ConvertVectorExprClass;
@@ -3706,7 +4018,7 @@
       SubExprs[RHS] = rhs;
     }
 
-  /// \brief Build an empty __builtin_choose_expr.
+  /// Build an empty __builtin_choose_expr.
   explicit ChooseExpr(EmptyShell Empty) : Expr(ChooseExprClass, Empty) { }
 
   /// isConditionTrue - Return whether the condition is true (i.e. not
@@ -3741,8 +4053,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ChooseExprClass;
@@ -3773,15 +4093,23 @@
            false),
       TokenLoc(Loc) { }
 
-  /// \brief Build an empty GNU __null expression.
+  /// Build an empty GNU __null expression.
   explicit GNUNullExpr(EmptyShell Empty) : Expr(GNUNullExprClass, Empty) { }
 
   /// getTokenLocation - The location of the __null token.
   SourceLocation getTokenLocation() const { return TokenLoc; }
   void setTokenLocation(SourceLocation L) { TokenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return TokenLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return TokenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return TokenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return TokenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == GNUNullExprClass;
@@ -3832,8 +4160,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == VAArgExprClass;
@@ -3846,7 +4182,7 @@
   }
 };
 
-/// @brief Describes an C or C++ initializer list.
+/// Describes an C or C++ initializer list.
 ///
 /// InitListExpr describes an initializer list, which can be used to
 /// initialize objects of different types, including
@@ -3904,7 +4240,7 @@
   ///   - the semantic form, if this is in syntactic form.
   llvm::PointerIntPair<InitListExpr *, 1, bool> AltForm;
 
-  /// \brief Either:
+  /// Either:
   ///  If this initializer list initializes an array with more elements than
   ///  there are initializers in the list, specifies an expression to be used
   ///  for value initialization of the rest of the elements.
@@ -3917,16 +4253,16 @@
   InitListExpr(const ASTContext &C, SourceLocation lbraceloc,
                ArrayRef<Expr*> initExprs, SourceLocation rbraceloc);
 
-  /// \brief Build an empty initializer list.
+  /// Build an empty initializer list.
   explicit InitListExpr(EmptyShell Empty)
     : Expr(InitListExprClass, Empty), AltForm(nullptr, true) { }
 
   unsigned getNumInits() const { return InitExprs.size(); }
 
-  /// \brief Retrieve the set of initializers.
+  /// Retrieve the set of initializers.
   Expr **getInits() { return reinterpret_cast<Expr **>(InitExprs.data()); }
 
-  /// \brief Retrieve the set of initializers.
+  /// Retrieve the set of initializers.
   Expr * const *getInits() const {
     return reinterpret_cast<Expr * const *>(InitExprs.data());
   }
@@ -3962,10 +4298,10 @@
     }
   }
 
-  /// \brief Reserve space for some number of initializers.
+  /// Reserve space for some number of initializers.
   void reserveInits(const ASTContext &C, unsigned NumInits);
 
-  /// @brief Specify the number of initializers
+  /// Specify the number of initializers
   ///
   /// If there are more than @p NumInits initializers, the remaining
   /// initializers will be destroyed. If there are fewer than @p
@@ -3973,7 +4309,7 @@
   /// unknown initializers.
   void resizeInits(const ASTContext &Context, unsigned NumInits);
 
-  /// @brief Updates the initializer at index @p Init with the new
+  /// Updates the initializer at index @p Init with the new
   /// expression @p expr, and returns the old expression at that
   /// location.
   ///
@@ -3982,7 +4318,7 @@
   /// accommodate the new entry.
   Expr *updateInit(const ASTContext &C, unsigned Init, Expr *expr);
 
-  /// \brief If this initializer list initializes an array with more elements
+  /// If this initializer list initializes an array with more elements
   /// than there are initializers in the list, specifies an expression to be
   /// used for value initialization of the rest of the elements.
   Expr *getArrayFiller() {
@@ -3993,11 +4329,11 @@
   }
   void setArrayFiller(Expr *filler);
 
-  /// \brief Return true if this is an array initializer and its array "filler"
+  /// Return true if this is an array initializer and its array "filler"
   /// has been set.
   bool hasArrayFiller() const { return getArrayFiller(); }
 
-  /// \brief If this initializes a union, specifies which field in the
+  /// If this initializes a union, specifies which field in the
   /// union to initialize.
   ///
   /// Typically, this field is the first named field within the
@@ -4066,8 +4402,16 @@
     InitListExprBits.HadArrayRangeDesignator = ARD;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == InitListExprClass;
@@ -4105,7 +4449,7 @@
   friend class ASTStmtWriter;
 };
 
-/// @brief Represents a C99 designated initializer expression.
+/// Represents a C99 designated initializer expression.
 ///
 /// A designated initializer expression (C99 6.7.8) contains one or
 /// more designators (which can be field designators, array
@@ -4129,7 +4473,7 @@
     : public Expr,
       private llvm::TrailingObjects<DesignatedInitExpr, Stmt *> {
 public:
-  /// \brief Forward declaration of the Designator class.
+  /// Forward declaration of the Designator class.
   class Designator;
 
 private:
@@ -4149,7 +4493,7 @@
   /// expressions used by array and array-range designators.
   unsigned NumSubExprs : 16;
 
-  /// \brief The designators in this designated initialization
+  /// The designators in this designated initialization
   /// expression.
   Designator *Designators;
 
@@ -4194,14 +4538,14 @@
     unsigned RBracketLoc;
   };
 
-  /// @brief Represents a single C99 designator.
+  /// Represents a single C99 designator.
   ///
   /// @todo This class is infuriatingly similar to clang::Designator,
   /// but minor differences (storing indices vs. storing pointers)
   /// keep us from reusing it. Try harder, later, to rectify these
   /// differences.
   class Designator {
-    /// @brief The kind of designator this describes.
+    /// The kind of designator this describes.
     enum {
       FieldDesignator,
       ArrayDesignator,
@@ -4219,7 +4563,7 @@
   public:
     Designator() {}
 
-    /// @brief Initializes a field designator.
+    /// Initializes a field designator.
     Designator(const IdentifierInfo *FieldName, SourceLocation DotLoc,
                SourceLocation FieldLoc)
       : Kind(FieldDesignator) {
@@ -4228,7 +4572,7 @@
       Field.FieldLoc = FieldLoc.getRawEncoding();
     }
 
-    /// @brief Initializes an array designator.
+    /// Initializes an array designator.
     Designator(unsigned Index, SourceLocation LBracketLoc,
                SourceLocation RBracketLoc)
       : Kind(ArrayDesignator) {
@@ -4238,7 +4582,7 @@
       ArrayOrRange.RBracketLoc = RBracketLoc.getRawEncoding();
     }
 
-    /// @brief Initializes a GNU array-range designator.
+    /// Initializes a GNU array-range designator.
     Designator(unsigned Index, SourceLocation LBracketLoc,
                SourceLocation EllipsisLoc, SourceLocation RBracketLoc)
       : Kind(ArrayRangeDesignator) {
@@ -4301,17 +4645,25 @@
       return ArrayOrRange.Index;
     }
 
-    SourceLocation getLocStart() const LLVM_READONLY {
+    LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                              "Use getBeginLoc instead") {
+      return getBeginLoc();
+    }
+    SourceLocation getBeginLoc() const LLVM_READONLY {
       if (Kind == FieldDesignator)
         return getDotLoc().isInvalid()? getFieldLoc() : getDotLoc();
       else
         return getLBracketLoc();
     }
-    SourceLocation getLocEnd() const LLVM_READONLY {
+    LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                              "Use getEndLoc instead") {
+      return getEndLoc();
+    }
+    SourceLocation getEndLoc() const LLVM_READONLY {
       return Kind == FieldDesignator ? getFieldLoc() : getRBracketLoc();
     }
     SourceRange getSourceRange() const LLVM_READONLY {
-      return SourceRange(getLocStart(), getLocEnd());
+      return SourceRange(getBeginLoc(), getEndLoc());
     }
   };
 
@@ -4324,7 +4676,7 @@
   static DesignatedInitExpr *CreateEmpty(const ASTContext &C,
                                          unsigned NumIndexExprs);
 
-  /// @brief Returns the number of designators in this initializer.
+  /// Returns the number of designators in this initializer.
   unsigned size() const { return NumDesignators; }
 
   // Iterator access to the designators.
@@ -4348,17 +4700,17 @@
   Expr *getArrayRangeStart(const Designator &D) const;
   Expr *getArrayRangeEnd(const Designator &D) const;
 
-  /// @brief Retrieve the location of the '=' that precedes the
+  /// Retrieve the location of the '=' that precedes the
   /// initializer value itself, if present.
   SourceLocation getEqualOrColonLoc() const { return EqualOrColonLoc; }
   void setEqualOrColonLoc(SourceLocation L) { EqualOrColonLoc = L; }
 
-  /// @brief Determines whether this designated initializer used the
+  /// Determines whether this designated initializer used the
   /// deprecated GNU syntax for designated initializers.
   bool usesGNUSyntax() const { return GNUSyntax; }
   void setGNUSyntax(bool GNU) { GNUSyntax = GNU; }
 
-  /// @brief Retrieve the initializer value.
+  /// Retrieve the initializer value.
   Expr *getInit() const {
     return cast<Expr>(*const_cast<DesignatedInitExpr*>(this)->child_begin());
   }
@@ -4367,7 +4719,7 @@
     *child_begin() = init;
   }
 
-  /// \brief Retrieve the total number of subexpressions in this
+  /// Retrieve the total number of subexpressions in this
   /// designated initializer expression, including the actual
   /// initialized value and any expressions that occur within array
   /// and array-range designators.
@@ -4383,15 +4735,23 @@
     getTrailingObjects<Stmt *>()[Idx] = E;
   }
 
-  /// \brief Replaces the designator at index @p Idx with the series
+  /// Replaces the designator at index @p Idx with the series
   /// of designators in [First, Last).
   void ExpandDesignator(const ASTContext &C, unsigned Idx,
                         const Designator *First, const Designator *Last);
 
   SourceRange getDesignatorsSourceRange() const;
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DesignatedInitExprClass;
@@ -4410,7 +4770,7 @@
   friend TrailingObjects;
 };
 
-/// \brief Represents a place-holder for an object not to be initialized by
+/// Represents a place-holder for an object not to be initialized by
 /// anything.
 ///
 /// This only makes sense when it appears as part of an updater of a
@@ -4432,8 +4792,16 @@
     return T->getStmtClass() == NoInitExprClass;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SourceLocation(); }
 
   // Iterators
   child_range children() {
@@ -4467,8 +4835,16 @@
   explicit DesignatedInitUpdateExpr(EmptyShell Empty)
     : Expr(DesignatedInitUpdateExprClass, Empty) { }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DesignatedInitUpdateExprClass;
@@ -4493,7 +4869,7 @@
   }
 };
 
-/// \brief Represents a loop initializing the elements of an array.
+/// Represents a loop initializing the elements of an array.
 ///
 /// The need to initialize the elements of an array occurs in a number of
 /// contexts:
@@ -4542,11 +4918,19 @@
     return S->getStmtClass() == ArrayInitLoopExprClass;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getCommonExpr()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getCommonExpr()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getCommonExpr()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getCommonExpr()->getEndLoc();
   }
 
   child_range children() {
@@ -4561,7 +4945,7 @@
   friend class ASTStmtWriter;
 };
 
-/// \brief Represents the index of the current element of an array being
+/// Represents the index of the current element of an array being
 /// initialized by an ArrayInitLoopExpr. This can only appear within the
 /// subexpression of an ArrayInitLoopExpr.
 class ArrayInitIndexExpr : public Expr {
@@ -4577,8 +4961,16 @@
     return S->getStmtClass() == ArrayInitIndexExprClass;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SourceLocation(); }
 
   child_range children() {
     return child_range(child_iterator(), child_iterator());
@@ -4591,7 +4983,7 @@
   friend class ASTStmtReader;
 };
 
-/// \brief Represents an implicitly-generated value initialization of
+/// Represents an implicitly-generated value initialization of
 /// an object of a given type.
 ///
 /// Implicit value initializations occur within semantic initializer
@@ -4605,7 +4997,7 @@
     : Expr(ImplicitValueInitExprClass, ty, VK_RValue, OK_Ordinary,
            false, false, ty->isInstantiationDependentType(), false) { }
 
-  /// \brief Construct an empty implicit value initialization.
+  /// Construct an empty implicit value initialization.
   explicit ImplicitValueInitExpr(EmptyShell Empty)
     : Expr(ImplicitValueInitExprClass, Empty) { }
 
@@ -4613,8 +5005,16 @@
     return T->getStmtClass() == ImplicitValueInitExprClass;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SourceLocation(); }
 
   // Iterators
   child_range children() {
@@ -4634,7 +5034,7 @@
   ParenListExpr(const ASTContext& C, SourceLocation lparenloc,
                 ArrayRef<Expr*> exprs, SourceLocation rparenloc);
 
-  /// \brief Build an empty paren list.
+  /// Build an empty paren list.
   explicit ParenListExpr(EmptyShell Empty) : Expr(ParenListExprClass, Empty) { }
 
   unsigned getNumExprs() const { return NumExprs; }
@@ -4658,8 +5058,16 @@
   SourceLocation getLParenLoc() const { return LParenLoc; }
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LParenLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ParenListExprClass;
@@ -4677,7 +5085,7 @@
   friend class ASTStmtWriter;
 };
 
-/// \brief Represents a C11 generic selection.
+/// Represents a C11 generic selection.
 ///
 /// A generic selection (C11 6.5.1.1) contains an unevaluated controlling
 /// expression, followed by one or more generic associations.  Each generic
@@ -4782,8 +5190,16 @@
   const Expr *getResultExpr() const { return getAssocExpr(getResultIndex()); }
   Expr *getResultExpr() { return getAssocExpr(getResultIndex()); }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return GenericLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return GenericLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == GenericSelectionExprClass;
@@ -4823,7 +5239,7 @@
            base->containsUnexpandedParameterPack()),
       Base(base), Accessor(&accessor), AccessorLoc(loc) {}
 
-  /// \brief Build an empty vector element expression.
+  /// Build an empty vector element expression.
   explicit ExtVectorElementExpr(EmptyShell Empty)
     : Expr(ExtVectorElementExprClass, Empty) { }
 
@@ -4848,10 +5264,18 @@
   /// aggregate Constant of ConstantInt(s).
   void getEncodedElementAccess(SmallVectorImpl<uint32_t> &Elts) const;
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getBase()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY { return AccessorLoc; }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getBase()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return AccessorLoc; }
 
   /// isArrow - Return true if the base expression is a pointer to vector,
   /// return false if the base expression is a vector.
@@ -4881,7 +5305,7 @@
            false),
       TheBlock(BD) {}
 
-  /// \brief Build an empty block expression.
+  /// Build an empty block expression.
   explicit BlockExpr(EmptyShell Empty) : Expr(BlockExprClass, Empty) { }
 
   const BlockDecl *getBlockDecl() const { return TheBlock; }
@@ -4893,8 +5317,20 @@
   const Stmt *getBody() const;
   Stmt *getBody();
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getCaretLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getBody()->getLocEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getCaretLocation();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getBody()->getEndLoc();
+  }
 
   /// getFunctionType - Return the underlying function type for this block.
   const FunctionProtoType *getFunctionType() const;
@@ -4946,8 +5382,16 @@
   /// getRParenLoc - Return the location of final right parenthesis.
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == AsTypeExprClass;
@@ -5088,11 +5532,19 @@
     return getSyntacticForm()->getExprLoc();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getSyntacticForm()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getSyntacticForm()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getSyntacticForm()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getSyntacticForm()->getEndLoc();
   }
 
   child_range children() {
@@ -5133,7 +5585,7 @@
   };
 
 private:
-  /// \brief Location of sub-expressions.
+  /// Location of sub-expressions.
   /// The location of Scope sub-expression is NumSubExprs - 1, which is
   /// not fixed, therefore is not defined in enum.
   enum { PTR, ORDER, VAL1, ORDER_FAIL, VAL2, WEAK, END_EXPR };
@@ -5147,11 +5599,11 @@
   AtomicExpr(SourceLocation BLoc, ArrayRef<Expr*> args, QualType t,
              AtomicOp op, SourceLocation RP);
 
-  /// \brief Determine the number of arguments the specified atomic builtin
+  /// Determine the number of arguments the specified atomic builtin
   /// should have.
   static unsigned getNumSubExprs(AtomicOp Op);
 
-  /// \brief Build an empty AtomicExpr.
+  /// Build an empty AtomicExpr.
   explicit AtomicExpr(EmptyShell Empty) : Expr(AtomicExprClass, Empty) { }
 
   Expr *getPtr() const {
@@ -5215,8 +5667,16 @@
   SourceLocation getBuiltinLoc() const { return BuiltinLoc; }
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BuiltinLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BuiltinLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == AtomicExprClass;
@@ -5230,7 +5690,7 @@
     return const_child_range(SubExprs, SubExprs + NumSubExprs);
   }
 
-  /// \brief Get atomic scope model for the atomic op code.
+  /// Get atomic scope model for the atomic op code.
   /// \return empty atomic scope model if the atomic op code does not have
   ///   scope operand.
   static std::unique_ptr<AtomicScopeModel> getScopeModel(AtomicOp Op) {
@@ -5241,7 +5701,7 @@
     return AtomicScopeModel::create(Kind);
   }
 
-  /// \brief Get atomic scope model.
+  /// Get atomic scope model.
   /// \return empty atomic scope model if this atomic expression does not have
   ///   scope operand.
   std::unique_ptr<AtomicScopeModel> getScopeModel() const {
@@ -5269,9 +5729,17 @@
     return const_child_range(const_child_iterator(), const_child_iterator());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
-  
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SourceLocation(); }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == TypoExprClass;
   }
diff --git a/linux-x64/clang/include/clang/AST/ExprCXX.h b/linux-x64/clang/include/clang/AST/ExprCXX.h
index e51ffb6..0b97009 100644
--- a/linux-x64/clang/include/clang/AST/ExprCXX.h
+++ b/linux-x64/clang/include/clang/AST/ExprCXX.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::Expr interface and subclasses for C++ expressions.
+/// Defines the clang::Expr interface and subclasses for C++ expressions.
 //
 //===----------------------------------------------------------------------===//
 
@@ -62,7 +62,7 @@
 // C++ Expressions.
 //===--------------------------------------------------------------------===//
 
-/// \brief A call to an overloaded operator written using operator
+/// A call to an overloaded operator written using operator
 /// syntax.
 ///
 /// Represents a call to an overloaded operator written using operator
@@ -76,7 +76,7 @@
 /// function templates that were found by name lookup at template
 /// definition time.
 class CXXOperatorCallExpr : public CallExpr {
-  /// \brief The overloaded operator.
+  /// The overloaded operator.
   OverloadedOperatorKind Operator;
 
   SourceRange Range;
@@ -101,7 +101,7 @@
   explicit CXXOperatorCallExpr(ASTContext& C, EmptyShell Empty)
       : CallExpr(C, CXXOperatorCallExprClass, Empty) {}
 
-  /// \brief Returns the kind of overloaded operator that this
+  /// Returns the kind of overloaded operator that this
   /// expression refers to.
   OverloadedOperatorKind getOperator() const { return Operator; }
 
@@ -115,10 +115,10 @@
   }
   bool isAssignmentOp() const { return isAssignmentOp(getOperator()); }
 
-  /// \brief Is this written as an infix binary operator?
+  /// Is this written as an infix binary operator?
   bool isInfixBinaryOp() const;
 
-  /// \brief Returns the location of the operator symbol in the expression.
+  /// Returns the location of the operator symbol in the expression.
   ///
   /// When \c getOperator()==OO_Call, this is the location of the right
   /// parentheses; when \c getOperator()==OO_Subscript, this is the location
@@ -128,12 +128,20 @@
   SourceLocation getExprLoc() const LLVM_READONLY {
     return (Operator < OO_Plus || Operator >= OO_Arrow ||
             Operator == OO_PlusPlus || Operator == OO_MinusMinus)
-               ? getLocStart()
+               ? getBeginLoc()
                : getOperatorLoc();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const { return Range; }
 
   static bool classof(const Stmt *T) {
@@ -170,15 +178,15 @@
   CXXMemberCallExpr(ASTContext &C, EmptyShell Empty)
       : CallExpr(C, CXXMemberCallExprClass, Empty) {}
 
-  /// \brief Retrieves the implicit object argument for the member call.
+  /// Retrieves the implicit object argument for the member call.
   ///
   /// For example, in "x.f(5)", this returns the sub-expression "x".
   Expr *getImplicitObjectArgument() const;
 
-  /// \brief Retrieves the declaration of the called method.
+  /// Retrieves the declaration of the called method.
   CXXMethodDecl *getMethodDecl() const;
 
-  /// \brief Retrieves the CXXRecordDecl for the underlying type of
+  /// Retrieves the CXXRecordDecl for the underlying type of
   /// the implicit object argument.
   ///
   /// Note that this is may not be the same declaration as that of the class
@@ -191,7 +199,7 @@
     if (CLoc.isValid())
       return CLoc;
 
-    return getLocStart();
+    return getBeginLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -199,7 +207,7 @@
   }
 };
 
-/// \brief Represents a call to a CUDA kernel function.
+/// Represents a call to a CUDA kernel function.
 class CUDAKernelCallExpr : public CallExpr {
 private:
   enum { CONFIG, END_PREARG };
@@ -218,7 +226,7 @@
   }
   CallExpr *getConfig() { return cast_or_null<CallExpr>(getPreArg(CONFIG)); }
 
-  /// \brief Sets the kernel configuration expression.
+  /// Sets the kernel configuration expression.
   ///
   /// Note that this method cannot be called if config has already been set to a
   /// non-null value.
@@ -237,7 +245,7 @@
   }
 };
 
-/// \brief Abstract class common to all of the C++ "named"/"keyword" casts.
+/// Abstract class common to all of the C++ "named"/"keyword" casts.
 ///
 /// This abstract class is inherited by all of the classes
 /// representing "named" casts: CXXStaticCastExpr for \c static_cast,
@@ -271,15 +279,23 @@
 public:
   const char *getCastName() const;
 
-  /// \brief Retrieve the location of the cast operator keyword, e.g.,
+  /// Retrieve the location of the cast operator keyword, e.g.,
   /// \c static_cast.
   SourceLocation getOperatorLoc() const { return Loc; }
 
-  /// \brief Retrieve the location of the closing parenthesis.
+  /// Retrieve the location of the closing parenthesis.
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
   SourceRange getAngleBrackets() const LLVM_READONLY { return AngleBrackets; }
 
   static bool classof(const Stmt *T) {
@@ -295,13 +311,14 @@
   }
 };
 
-/// \brief A C++ \c static_cast expression (C++ [expr.static.cast]).
+/// A C++ \c static_cast expression (C++ [expr.static.cast]).
 ///
 /// This expression node represents a C++ static cast, e.g.,
 /// \c static_cast<int>(1.0).
 class CXXStaticCastExpr final
     : public CXXNamedCastExpr,
-      private llvm::TrailingObjects<CXXStaticCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<CXXStaticCastExpr, CastExpr::BasePathSizeTy,
+                                    CXXBaseSpecifier *> {
   CXXStaticCastExpr(QualType ty, ExprValueKind vk, CastKind kind, Expr *op,
                     unsigned pathSize, TypeSourceInfo *writtenTy,
                     SourceLocation l, SourceLocation RParenLoc,
@@ -312,6 +329,10 @@
   explicit CXXStaticCastExpr(EmptyShell Empty, unsigned PathSize)
       : CXXNamedCastExpr(CXXStaticCastExprClass, Empty, PathSize) {}
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   friend class CastExpr;
   friend TrailingObjects;
@@ -330,14 +351,15 @@
   }
 };
 
-/// \brief A C++ @c dynamic_cast expression (C++ [expr.dynamic.cast]).
+/// A C++ @c dynamic_cast expression (C++ [expr.dynamic.cast]).
 ///
 /// This expression node represents a dynamic cast, e.g.,
 /// \c dynamic_cast<Derived*>(BasePtr). Such a cast may perform a run-time
 /// check to determine how to perform the type conversion.
 class CXXDynamicCastExpr final
     : public CXXNamedCastExpr,
-      private llvm::TrailingObjects<CXXDynamicCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<
+          CXXDynamicCastExpr, CastExpr::BasePathSizeTy, CXXBaseSpecifier *> {
   CXXDynamicCastExpr(QualType ty, ExprValueKind VK, CastKind kind,
                      Expr *op, unsigned pathSize, TypeSourceInfo *writtenTy,
                      SourceLocation l, SourceLocation RParenLoc,
@@ -348,6 +370,10 @@
   explicit CXXDynamicCastExpr(EmptyShell Empty, unsigned pathSize)
       : CXXNamedCastExpr(CXXDynamicCastExprClass, Empty, pathSize) {}
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   friend class CastExpr;
   friend TrailingObjects;
@@ -369,7 +395,7 @@
   }
 };
 
-/// \brief A C++ @c reinterpret_cast expression (C++ [expr.reinterpret.cast]).
+/// A C++ @c reinterpret_cast expression (C++ [expr.reinterpret.cast]).
 ///
 /// This expression node represents a reinterpret cast, e.g.,
 /// @c reinterpret_cast<int>(VoidPtr).
@@ -380,6 +406,7 @@
 class CXXReinterpretCastExpr final
     : public CXXNamedCastExpr,
       private llvm::TrailingObjects<CXXReinterpretCastExpr,
+                                    CastExpr::BasePathSizeTy,
                                     CXXBaseSpecifier *> {
   CXXReinterpretCastExpr(QualType ty, ExprValueKind vk, CastKind kind,
                          Expr *op, unsigned pathSize,
@@ -392,6 +419,10 @@
   CXXReinterpretCastExpr(EmptyShell Empty, unsigned pathSize)
       : CXXNamedCastExpr(CXXReinterpretCastExprClass, Empty, pathSize) {}
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   friend class CastExpr;
   friend TrailingObjects;
@@ -410,7 +441,7 @@
   }
 };
 
-/// \brief A C++ \c const_cast expression (C++ [expr.const.cast]).
+/// A C++ \c const_cast expression (C++ [expr.const.cast]).
 ///
 /// This expression node represents a const cast, e.g.,
 /// \c const_cast<char*>(PtrToConstChar).
@@ -419,7 +450,8 @@
 /// value.
 class CXXConstCastExpr final
     : public CXXNamedCastExpr,
-      private llvm::TrailingObjects<CXXConstCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<CXXConstCastExpr, CastExpr::BasePathSizeTy,
+                                    CXXBaseSpecifier *> {
   CXXConstCastExpr(QualType ty, ExprValueKind VK, Expr *op,
                    TypeSourceInfo *writtenTy, SourceLocation l,
                    SourceLocation RParenLoc, SourceRange AngleBrackets)
@@ -429,6 +461,10 @@
   explicit CXXConstCastExpr(EmptyShell Empty)
       : CXXNamedCastExpr(CXXConstCastExprClass, Empty, 0) {}
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   friend class CastExpr;
   friend TrailingObjects;
@@ -445,7 +481,7 @@
   }
 };
 
-/// \brief A call to a literal operator (C++11 [over.literal])
+/// A call to a literal operator (C++11 [over.literal])
 /// written as a user-defined literal (C++11 [lit.ext]).
 ///
 /// Represents a user-defined literal, e.g. "foo"_bar or 1.23_xyz. While this
@@ -455,7 +491,7 @@
 /// Since literal operators are never found by ADL and can only be declared at
 /// namespace scope, a user-defined literal is never dependent.
 class UserDefinedLiteral : public CallExpr {
-  /// \brief The location of a ud-suffix within the literal.
+  /// The location of a ud-suffix within the literal.
   SourceLocation UDSuffixLoc;
 
 public:
@@ -492,11 +528,11 @@
     LOK_Character
   };
 
-  /// \brief Returns the kind of literal operator invocation
+  /// Returns the kind of literal operator invocation
   /// which this expression represents.
   LiteralOperatorKind getLiteralOperatorKind() const;
 
-  /// \brief If this is not a raw user-defined literal, get the
+  /// If this is not a raw user-defined literal, get the
   /// underlying cooked literal (representing the literal with the suffix
   /// removed).
   Expr *getCookedLiteral();
@@ -504,21 +540,29 @@
     return const_cast<UserDefinedLiteral*>(this)->getCookedLiteral();
   }
 
-  SourceLocation getLocStart() const {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const {
     if (getLiteralOperatorKind() == LOK_Template)
       return getRParenLoc();
-    return getArg(0)->getLocStart();
+    return getArg(0)->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const { return getRParenLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const { return getRParenLoc(); }
 
-  /// \brief Returns the location of a ud-suffix in the expression.
+  /// Returns the location of a ud-suffix in the expression.
   ///
   /// For a string literal, there may be multiple identical suffixes. This
   /// returns the first.
   SourceLocation getUDSuffixLoc() const { return UDSuffixLoc; }
 
-  /// \brief Returns the ud-suffix specified for this literal.
+  /// Returns the ud-suffix specified for this literal.
   const IdentifierInfo *getUDSuffix() const;
 
   static bool classof(const Stmt *S) {
@@ -526,7 +570,7 @@
   }
 };
 
-/// \brief A boolean literal, per ([C++ lex.bool] Boolean literals).
+/// A boolean literal, per ([C++ lex.bool] Boolean literals).
 class CXXBoolLiteralExpr : public Expr {
   bool Value;
   SourceLocation Loc;
@@ -543,8 +587,16 @@
   bool getValue() const { return Value; }
   void setValue(bool V) { Value = V; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
@@ -559,7 +611,7 @@
   }
 };
 
-/// \brief The null pointer literal (C++11 [lex.nullptr])
+/// The null pointer literal (C++11 [lex.nullptr])
 ///
 /// Introduced in C++11, the only literal of type \c nullptr_t is \c nullptr.
 class CXXNullPtrLiteralExpr : public Expr {
@@ -574,8 +626,16 @@
   explicit CXXNullPtrLiteralExpr(EmptyShell Empty)
       : Expr(CXXNullPtrLiteralExprClass, Empty) {}
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
@@ -589,7 +649,7 @@
   }
 };
 
-/// \brief Implicit construction of a std::initializer_list<T> object from an
+/// Implicit construction of a std::initializer_list<T> object from an
 /// array temporary within list-initialization (C++11 [dcl.init.list]p5).
 class CXXStdInitializerListExpr : public Expr {
   Stmt *SubExpr = nullptr;
@@ -611,14 +671,23 @@
   Expr *getSubExpr() { return static_cast<Expr*>(SubExpr); }
   const Expr *getSubExpr() const { return static_cast<const Expr*>(SubExpr); }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return SubExpr->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return SubExpr->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExpr->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExpr->getEndLoc();
   }
 
+  /// Retrieve the source range of the expression.
   SourceRange getSourceRange() const LLVM_READONLY {
     return SubExpr->getSourceRange();
   }
@@ -677,11 +746,11 @@
 
   bool isTypeOperand() const { return Operand.is<TypeSourceInfo *>(); }
 
-  /// \brief Retrieves the type operand of this typeid() expression after
+  /// Retrieves the type operand of this typeid() expression after
   /// various required adjustments (removing reference types, cv-qualifiers).
   QualType getTypeOperand(ASTContext &Context) const;
 
-  /// \brief Retrieve source information for the type operand.
+  /// Retrieve source information for the type operand.
   TypeSourceInfo *getTypeOperandSourceInfo() const {
     assert(isTypeOperand() && "Cannot call getTypeOperand for typeid(expr)");
     return Operand.get<TypeSourceInfo *>();
@@ -702,8 +771,16 @@
     Operand = E;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
   void setSourceRange(SourceRange R) { Range = R; }
 
@@ -715,12 +792,12 @@
   child_range children() {
     if (isTypeOperand())
       return child_range(child_iterator(), child_iterator());
-    Stmt **begin = reinterpret_cast<Stmt**>(&Operand);
+    auto **begin = reinterpret_cast<Stmt **>(&Operand);
     return child_range(begin, begin + 1);
   }
 };
 
-/// \brief A member reference to an MSPropertyDecl. 
+/// A member reference to an MSPropertyDecl.
 ///
 /// This expression always has pseudo-object type, and therefore it is
 /// typically not encountered in a fully-typechecked expression except
@@ -750,23 +827,31 @@
   MSPropertyRefExpr(EmptyShell Empty) : Expr(MSPropertyRefExprClass, Empty) {}
 
   SourceRange getSourceRange() const LLVM_READONLY {
-    return SourceRange(getLocStart(), getLocEnd());
+    return SourceRange(getBeginLoc(), getEndLoc());
   }
 
   bool isImplicitAccess() const {
     return getBaseExpr() && getBaseExpr()->isImplicitCXXThis();
   }
 
-  SourceLocation getLocStart() const {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const {
     if (!isImplicitAccess())
-      return BaseExpr->getLocStart();
+      return BaseExpr->getBeginLoc();
     else if (QualifierLoc)
       return QualifierLoc.getBeginLoc();
     else
         return MemberLoc;
   }
 
-  SourceLocation getLocEnd() const { return getMemberLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const { return getMemberLoc(); }
 
   child_range children() {
     return child_range((Stmt**)&BaseExpr, (Stmt**)&BaseExpr + 1);
@@ -816,7 +901,7 @@
     SubExprs[IDX_EXPR] = Idx;
   }
 
-  /// \brief Create an empty array subscript expression.
+  /// Create an empty array subscript expression.
   explicit MSPropertySubscriptExpr(EmptyShell Shell)
       : Expr(MSPropertySubscriptExprClass, Shell) {}
 
@@ -826,11 +911,19 @@
   Expr *getIdx() { return cast<Expr>(SubExprs[IDX_EXPR]); }
   const Expr *getIdx() const { return cast<Expr>(SubExprs[IDX_EXPR]); }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getBase()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getBase()->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBracketLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBracketLoc; }
 
   SourceLocation getRBracketLoc() const { return RBracketLoc; }
   void setRBracketLoc(SourceLocation L) { RBracketLoc = L; }
@@ -884,11 +977,11 @@
 
   bool isTypeOperand() const { return Operand.is<TypeSourceInfo *>(); }
 
-  /// \brief Retrieves the type operand of this __uuidof() expression after
+  /// Retrieves the type operand of this __uuidof() expression after
   /// various required adjustments (removing reference types, cv-qualifiers).
   QualType getTypeOperand(ASTContext &Context) const;
 
-  /// \brief Retrieve source information for the type operand.
+  /// Retrieve source information for the type operand.
   TypeSourceInfo *getTypeOperandSourceInfo() const {
     assert(isTypeOperand() && "Cannot call getTypeOperand for __uuidof(expr)");
     return Operand.get<TypeSourceInfo *>();
@@ -912,8 +1005,16 @@
   void setUuidStr(StringRef US) { UuidStr = US; }
   StringRef getUuidStr() const { return UuidStr; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
   void setSourceRange(SourceRange R) { Range = R; }
 
@@ -925,12 +1026,12 @@
   child_range children() {
     if (isTypeOperand())
       return child_range(child_iterator(), child_iterator());
-    Stmt **begin = reinterpret_cast<Stmt**>(&Operand);
+    auto **begin = reinterpret_cast<Stmt **>(&Operand);
     return child_range(begin, begin + 1);
   }
 };
 
-/// \brief Represents the \c this expression in C++.
+/// Represents the \c this expression in C++.
 ///
 /// This is a pointer to the object on which the current member function is
 /// executing (C++ [expr.prim]p3). Example:
@@ -961,8 +1062,16 @@
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   bool isImplicit() const { return Implicit; }
   void setImplicit(bool I) { Implicit = I; }
@@ -977,7 +1086,7 @@
   }
 };
 
-/// \brief A C++ throw-expression (C++ [except.throw]).
+/// A C++ throw-expression (C++ [except.throw]).
 ///
 /// This handles 'throw' (for re-throwing the current exception) and
 /// 'throw' assignment-expression.  When assignment-expression isn't
@@ -988,7 +1097,7 @@
   Stmt *Op;
   SourceLocation ThrowLoc;
 
-  /// \brief Whether the thrown variable (if any) is in scope.
+  /// Whether the thrown variable (if any) is in scope.
   unsigned IsThrownVariableInScope : 1;
 
 public:
@@ -1009,19 +1118,27 @@
 
   SourceLocation getThrowLoc() const { return ThrowLoc; }
 
-  /// \brief Determines whether the variable thrown by this expression (if any!)
+  /// Determines whether the variable thrown by this expression (if any!)
   /// is within the innermost try block.
   ///
   /// This information is required to determine whether the NRVO can apply to
   /// this variable.
   bool isThrownVariableInScope() const { return IsThrownVariableInScope; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return ThrowLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return ThrowLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (!getSubExpr())
       return ThrowLoc;
-    return getSubExpr()->getLocEnd();
+    return getSubExpr()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -1034,16 +1151,16 @@
   }
 };
 
-/// \brief A default argument (C++ [dcl.fct.default]).
+/// A default argument (C++ [dcl.fct.default]).
 ///
 /// This wraps up a function call argument that was created from the
 /// corresponding parameter's default argument, when the call did not
 /// explicitly supply arguments for all of the parameters.
 class CXXDefaultArgExpr final : public Expr {
-  /// \brief The parameter whose default is being used.
+  /// The parameter whose default is being used.
   ParmVarDecl *Param;
 
-  /// \brief The location where the default argument expression was used.
+  /// The location where the default argument expression was used.
   SourceLocation Loc;
 
   CXXDefaultArgExpr(StmtClass SC, SourceLocation Loc, ParmVarDecl *param)
@@ -1081,14 +1198,22 @@
     return getParam()->getDefaultArg();
   }
 
-  /// \brief Retrieve the location where this default argument was actually
+  /// Retrieve the location where this default argument was actually
   /// used.
   SourceLocation getUsedLocation() const { return Loc; }
 
   /// Default argument expressions have no representation in the
   /// source, so they have an empty source range.
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SourceLocation(); }
 
   SourceLocation getExprLoc() const LLVM_READONLY { return Loc; }
 
@@ -1102,7 +1227,7 @@
   }
 };
 
-/// \brief A use of a default initializer in a constructor or in aggregate
+/// A use of a default initializer in a constructor or in aggregate
 /// initialization.
 ///
 /// This wraps a use of a C++ default initializer (technically,
@@ -1111,10 +1236,10 @@
 /// (C++11 [class.base.init]p8) or in aggregate initialization
 /// (C++1y [dcl.init.aggr]p7).
 class CXXDefaultInitExpr : public Expr {
-  /// \brief The field whose default is being used.
+  /// The field whose default is being used.
   FieldDecl *Field;
 
-  /// \brief The location where the default initializer expression was used.
+  /// The location where the default initializer expression was used.
   SourceLocation Loc;
 
   CXXDefaultInitExpr(const ASTContext &C, SourceLocation Loc, FieldDecl *Field,
@@ -1133,11 +1258,11 @@
     return new (C) CXXDefaultInitExpr(C, Loc, Field, Field->getType());
   }
 
-  /// \brief Get the field whose initializer will be used.
+  /// Get the field whose initializer will be used.
   FieldDecl *getField() { return Field; }
   const FieldDecl *getField() const { return Field; }
 
-  /// \brief Get the initialization expression that will be used.
+  /// Get the initialization expression that will be used.
   const Expr *getExpr() const {
     assert(Field->getInClassInitializer() && "initializer hasn't been parsed");
     return Field->getInClassInitializer();
@@ -1147,8 +1272,16 @@
     return Field->getInClassInitializer();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXDefaultInitExprClass;
@@ -1160,9 +1293,9 @@
   }
 };
 
-/// \brief Represents a C++ temporary.
+/// Represents a C++ temporary.
 class CXXTemporary {
-  /// \brief The destructor that needs to be called.
+  /// The destructor that needs to be called.
   const CXXDestructorDecl *Destructor;
 
   explicit CXXTemporary(const CXXDestructorDecl *destructor)
@@ -1179,7 +1312,7 @@
   }
 };
 
-/// \brief Represents binding an expression to a temporary.
+/// Represents binding an expression to a temporary.
 ///
 /// This ensures the destructor is called for the temporary. It should only be
 /// needed for non-POD, non-trivially destructable class types. For example:
@@ -1220,11 +1353,21 @@
   Expr *getSubExpr() { return cast<Expr>(SubExpr); }
   void setSubExpr(Expr *E) { SubExpr = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return SubExpr->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return SubExpr->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubExpr->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExpr->getEndLoc();
+  }
 
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Stmt *T) {
@@ -1235,7 +1378,7 @@
   child_range children() { return child_range(&SubExpr, &SubExpr + 1); }
 };
 
-/// \brief Represents a call to a C++ constructor.
+/// Represents a call to a C++ constructor.
 class CXXConstructExpr : public Expr {
 public:
   enum ConstructionKind {
@@ -1273,7 +1416,7 @@
                    ConstructionKind ConstructKind,
                    SourceRange ParenOrBraceRange);
 
-  /// \brief Construct an empty C++ construction expression.
+  /// Construct an empty C++ construction expression.
   CXXConstructExpr(StmtClass SC, EmptyShell Empty)
       : Expr(SC, Empty), NumArgs(0), Elidable(false),
         HadMultipleCandidates(false), ListInitialization(false),
@@ -1282,7 +1425,7 @@
 public:
   friend class ASTStmtReader;
 
-  /// \brief Construct an empty C++ construction expression.
+  /// Construct an empty C++ construction expression.
   explicit CXXConstructExpr(EmptyShell Empty)
       : CXXConstructExpr(CXXConstructExprClass, Empty) {}
 
@@ -1298,40 +1441,40 @@
                                   ConstructionKind ConstructKind,
                                   SourceRange ParenOrBraceRange);
 
-  /// \brief Get the constructor that this expression will (ultimately) call.
+  /// Get the constructor that this expression will (ultimately) call.
   CXXConstructorDecl *getConstructor() const { return Constructor; }
 
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation Loc) { this->Loc = Loc; }
 
-  /// \brief Whether this construction is elidable.
+  /// Whether this construction is elidable.
   bool isElidable() const { return Elidable; }
   void setElidable(bool E) { Elidable = E; }
 
-  /// \brief Whether the referred constructor was resolved from
+  /// Whether the referred constructor was resolved from
   /// an overloaded set having size greater than 1.
   bool hadMultipleCandidates() const { return HadMultipleCandidates; }
   void setHadMultipleCandidates(bool V) { HadMultipleCandidates = V; }
 
-  /// \brief Whether this constructor call was written as list-initialization.
+  /// Whether this constructor call was written as list-initialization.
   bool isListInitialization() const { return ListInitialization; }
   void setListInitialization(bool V) { ListInitialization = V; }
 
-  /// \brief Whether this constructor call was written as list-initialization,
+  /// Whether this constructor call was written as list-initialization,
   /// but was interpreted as forming a std::initializer_list<T> from the list
   /// and passing that as a single constructor argument.
   /// See C++11 [over.match.list]p1 bullet 1.
   bool isStdInitListInitialization() const { return StdInitListInitialization; }
   void setStdInitListInitialization(bool V) { StdInitListInitialization = V; }
 
-  /// \brief Whether this construction first requires
+  /// Whether this construction first requires
   /// zero-initialization before the initializer is called.
   bool requiresZeroInitialization() const { return ZeroInitialization; }
   void setRequiresZeroInitialization(bool ZeroInit) {
     ZeroInitialization = ZeroInit;
   }
 
-  /// \brief Determine whether this constructor is actually constructing
+  /// Determine whether this constructor is actually constructing
   /// a base class (rather than a complete object).
   ConstructionKind getConstructionKind() const {
     return (ConstructionKind)ConstructKind;
@@ -1361,7 +1504,7 @@
   }
   unsigned getNumArgs() const { return NumArgs; }
 
-  /// \brief Return the specified argument.
+  /// Return the specified argument.
   Expr *getArg(unsigned Arg) {
     assert(Arg < NumArgs && "Arg access out of range!");
     return cast<Expr>(Args[Arg]);
@@ -1371,14 +1514,22 @@
     return cast<Expr>(Args[Arg]);
   }
 
-  /// \brief Set the specified argument.
+  /// Set the specified argument.
   void setArg(unsigned Arg, Expr *ArgExpr) {
     assert(Arg < NumArgs && "Arg access out of range!");
     Args[Arg] = ArgExpr;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
   SourceRange getParenOrBraceRange() const { return ParenOrBraceRange; }
   void setParenOrBraceRange(SourceRange Range) { ParenOrBraceRange = Range; }
 
@@ -1393,7 +1544,7 @@
   }
 };
 
-/// \brief Represents a call to an inherited base class constructor from an
+/// Represents a call to an inherited base class constructor from an
 /// inheriting constructor. This call implicitly forwards the arguments from
 /// the enclosing context (an inheriting constructor) to the specified inherited
 /// base class constructor.
@@ -1414,7 +1565,7 @@
 public:
   friend class ASTStmtReader;
 
-  /// \brief Construct a C++ inheriting construction expression.
+  /// Construct a C++ inheriting construction expression.
   CXXInheritedCtorInitExpr(SourceLocation Loc, QualType T,
                            CXXConstructorDecl *Ctor, bool ConstructsVirtualBase,
                            bool InheritedFromVirtualBase)
@@ -1426,15 +1577,15 @@
     assert(!T->isDependentType());
   }
 
-  /// \brief Construct an empty C++ inheriting construction expression.
+  /// Construct an empty C++ inheriting construction expression.
   explicit CXXInheritedCtorInitExpr(EmptyShell Empty)
       : Expr(CXXInheritedCtorInitExprClass, Empty),
         ConstructsVirtualBase(false), InheritedFromVirtualBase(false) {}
 
-  /// \brief Get the constructor that this expression will call.
+  /// Get the constructor that this expression will call.
   CXXConstructorDecl *getConstructor() const { return Constructor; }
 
-  /// \brief Determine whether this constructor is actually constructing
+  /// Determine whether this constructor is actually constructing
   /// a base class (rather than a complete object).
   bool constructsVBase() const { return ConstructsVirtualBase; }
   CXXConstructExpr::ConstructionKind getConstructionKind() const {
@@ -1442,15 +1593,23 @@
                                  : CXXConstructExpr::CK_NonVirtualBase;
   }
 
-  /// \brief Determine whether the inherited constructor is inherited from a
+  /// Determine whether the inherited constructor is inherited from a
   /// virtual base of the object we construct. If so, we are not responsible
   /// for calling the inherited constructor (the complete object constructor
   /// does that), and so we don't need to pass any arguments.
   bool inheritedFromVBase() const { return InheritedFromVirtualBase; }
 
   SourceLocation getLocation() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXInheritedCtorInitExprClass;
@@ -1461,7 +1620,7 @@
   }
 };
 
-/// \brief Represents an explicit C++ type conversion that uses "functional"
+/// Represents an explicit C++ type conversion that uses "functional"
 /// notation (C++ [expr.type.conv]).
 ///
 /// Example:
@@ -1470,7 +1629,8 @@
 /// \endcode
 class CXXFunctionalCastExpr final
     : public ExplicitCastExpr,
-      private llvm::TrailingObjects<CXXFunctionalCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<
+          CXXFunctionalCastExpr, CastExpr::BasePathSizeTy, CXXBaseSpecifier *> {
   SourceLocation LParenLoc;
   SourceLocation RParenLoc;
 
@@ -1485,6 +1645,10 @@
   explicit CXXFunctionalCastExpr(EmptyShell Shell, unsigned PathSize)
       : ExplicitCastExpr(CXXFunctionalCastExprClass, Shell, PathSize) {}
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   friend class CastExpr;
   friend TrailingObjects;
@@ -1507,15 +1671,23 @@
   /// Determine whether this expression models list-initialization.
   bool isListInitialization() const { return LParenLoc.isInvalid(); }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXFunctionalCastExprClass;
   }
 };
 
-/// @brief Represents a C++ functional cast expression that builds a
+/// Represents a C++ functional cast expression that builds a
 /// temporary object.
 ///
 /// This expression type represents a C++ "functional" cast
@@ -1551,15 +1723,23 @@
 
   TypeSourceInfo *getTypeSourceInfo() const { return Type; }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXTemporaryObjectExprClass;
   }
 };
 
-/// \brief A C++ lambda expression, which produces a function object
+/// A C++ lambda expression, which produces a function object
 /// (of unspecified type) that can be invoked later.
 ///
 /// Example:
@@ -1582,29 +1762,29 @@
 /// and which can never occur implicitly.
 class LambdaExpr final : public Expr,
                          private llvm::TrailingObjects<LambdaExpr, Stmt *> {
-  /// \brief The source range that covers the lambda introducer ([...]).
+  /// The source range that covers the lambda introducer ([...]).
   SourceRange IntroducerRange;
 
-  /// \brief The source location of this lambda's capture-default ('=' or '&').
+  /// The source location of this lambda's capture-default ('=' or '&').
   SourceLocation CaptureDefaultLoc;
 
-  /// \brief The number of captures.
+  /// The number of captures.
   unsigned NumCaptures : 16;
-  
-  /// \brief The default capture kind, which is a value of type
+
+  /// The default capture kind, which is a value of type
   /// LambdaCaptureDefault.
   unsigned CaptureDefault : 2;
 
-  /// \brief Whether this lambda had an explicit parameter list vs. an
+  /// Whether this lambda had an explicit parameter list vs. an
   /// implicit (and empty) parameter list.
   unsigned ExplicitParams : 1;
 
-  /// \brief Whether this lambda had the result type explicitly specified.
+  /// Whether this lambda had the result type explicitly specified.
   unsigned ExplicitResultType : 1;
-  
-  /// \brief The location of the closing brace ('}') that completes
+
+  /// The location of the closing brace ('}') that completes
   /// the lambda.
-  /// 
+  ///
   /// The location of the brace is also available by looking up the
   /// function call operator in the lambda class. However, it is
   /// stored here to improve the performance of getSourceRange(), and
@@ -1612,7 +1792,7 @@
   /// module file just to determine the source range.
   SourceLocation ClosingBrace;
 
-  /// \brief Construct a lambda expression.
+  /// Construct a lambda expression.
   LambdaExpr(QualType T, SourceRange IntroducerRange,
              LambdaCaptureDefault CaptureDefault,
              SourceLocation CaptureDefaultLoc, ArrayRef<LambdaCapture> Captures,
@@ -1620,7 +1800,7 @@
              ArrayRef<Expr *> CaptureInits, SourceLocation ClosingBrace,
              bool ContainsUnexpandedParameterPack);
 
-  /// \brief Construct an empty lambda expression.
+  /// Construct an empty lambda expression.
   LambdaExpr(EmptyShell Empty, unsigned NumCaptures)
       : Expr(LambdaExprClass, Empty), NumCaptures(NumCaptures),
         CaptureDefault(LCD_None), ExplicitParams(false),
@@ -1637,7 +1817,7 @@
   friend class ASTStmtWriter;
   friend TrailingObjects;
 
-  /// \brief Construct a new lambda expression.
+  /// Construct a new lambda expression.
   static LambdaExpr *
   Create(const ASTContext &C, CXXRecordDecl *Class, SourceRange IntroducerRange,
          LambdaCaptureDefault CaptureDefault, SourceLocation CaptureDefaultLoc,
@@ -1645,154 +1825,162 @@
          bool ExplicitResultType, ArrayRef<Expr *> CaptureInits,
          SourceLocation ClosingBrace, bool ContainsUnexpandedParameterPack);
 
-  /// \brief Construct a new lambda expression that will be deserialized from
+  /// Construct a new lambda expression that will be deserialized from
   /// an external source.
   static LambdaExpr *CreateDeserialized(const ASTContext &C,
                                         unsigned NumCaptures);
 
-  /// \brief Determine the default capture kind for this lambda.
+  /// Determine the default capture kind for this lambda.
   LambdaCaptureDefault getCaptureDefault() const {
     return static_cast<LambdaCaptureDefault>(CaptureDefault);
   }
 
-  /// \brief Retrieve the location of this lambda's capture-default, if any.
+  /// Retrieve the location of this lambda's capture-default, if any.
   SourceLocation getCaptureDefaultLoc() const {
     return CaptureDefaultLoc;
   }
 
-  /// \brief Determine whether one of this lambda's captures is an init-capture.
+  /// Determine whether one of this lambda's captures is an init-capture.
   bool isInitCapture(const LambdaCapture *Capture) const;
 
-  /// \brief An iterator that walks over the captures of the lambda,
+  /// An iterator that walks over the captures of the lambda,
   /// both implicit and explicit.
   using capture_iterator = const LambdaCapture *;
 
-  /// \brief An iterator over a range of lambda captures.
+  /// An iterator over a range of lambda captures.
   using capture_range = llvm::iterator_range<capture_iterator>;
 
-  /// \brief Retrieve this lambda's captures.
+  /// Retrieve this lambda's captures.
   capture_range captures() const;
-  
-  /// \brief Retrieve an iterator pointing to the first lambda capture.
+
+  /// Retrieve an iterator pointing to the first lambda capture.
   capture_iterator capture_begin() const;
 
-  /// \brief Retrieve an iterator pointing past the end of the
+  /// Retrieve an iterator pointing past the end of the
   /// sequence of lambda captures.
   capture_iterator capture_end() const;
 
-  /// \brief Determine the number of captures in this lambda.
+  /// Determine the number of captures in this lambda.
   unsigned capture_size() const { return NumCaptures; }
 
-  /// \brief Retrieve this lambda's explicit captures.
+  /// Retrieve this lambda's explicit captures.
   capture_range explicit_captures() const;
-  
-  /// \brief Retrieve an iterator pointing to the first explicit
+
+  /// Retrieve an iterator pointing to the first explicit
   /// lambda capture.
   capture_iterator explicit_capture_begin() const;
 
-  /// \brief Retrieve an iterator pointing past the end of the sequence of
+  /// Retrieve an iterator pointing past the end of the sequence of
   /// explicit lambda captures.
   capture_iterator explicit_capture_end() const;
 
-  /// \brief Retrieve this lambda's implicit captures.
+  /// Retrieve this lambda's implicit captures.
   capture_range implicit_captures() const;
 
-  /// \brief Retrieve an iterator pointing to the first implicit
+  /// Retrieve an iterator pointing to the first implicit
   /// lambda capture.
   capture_iterator implicit_capture_begin() const;
 
-  /// \brief Retrieve an iterator pointing past the end of the sequence of
+  /// Retrieve an iterator pointing past the end of the sequence of
   /// implicit lambda captures.
   capture_iterator implicit_capture_end() const;
 
-  /// \brief Iterator that walks over the capture initialization
+  /// Iterator that walks over the capture initialization
   /// arguments.
   using capture_init_iterator = Expr **;
 
-  /// \brief Const iterator that walks over the capture initialization
+  /// Const iterator that walks over the capture initialization
   /// arguments.
   using const_capture_init_iterator = Expr *const *;
 
-  /// \brief Retrieve the initialization expressions for this lambda's captures.
+  /// Retrieve the initialization expressions for this lambda's captures.
   llvm::iterator_range<capture_init_iterator> capture_inits() {
     return llvm::make_range(capture_init_begin(), capture_init_end());
   }
 
-  /// \brief Retrieve the initialization expressions for this lambda's captures.
+  /// Retrieve the initialization expressions for this lambda's captures.
   llvm::iterator_range<const_capture_init_iterator> capture_inits() const {
     return llvm::make_range(capture_init_begin(), capture_init_end());
   }
 
-  /// \brief Retrieve the first initialization argument for this
+  /// Retrieve the first initialization argument for this
   /// lambda expression (which initializes the first capture field).
   capture_init_iterator capture_init_begin() {
     return reinterpret_cast<Expr **>(getStoredStmts());
   }
 
-  /// \brief Retrieve the first initialization argument for this
+  /// Retrieve the first initialization argument for this
   /// lambda expression (which initializes the first capture field).
   const_capture_init_iterator capture_init_begin() const {
     return reinterpret_cast<Expr *const *>(getStoredStmts());
   }
 
-  /// \brief Retrieve the iterator pointing one past the last
+  /// Retrieve the iterator pointing one past the last
   /// initialization argument for this lambda expression.
   capture_init_iterator capture_init_end() {
     return capture_init_begin() + NumCaptures;
   }
 
-  /// \brief Retrieve the iterator pointing one past the last
+  /// Retrieve the iterator pointing one past the last
   /// initialization argument for this lambda expression.
   const_capture_init_iterator capture_init_end() const {
     return capture_init_begin() + NumCaptures;
   }
 
-  /// \brief Retrieve the source range covering the lambda introducer,
+  /// Retrieve the source range covering the lambda introducer,
   /// which contains the explicit capture list surrounded by square
   /// brackets ([...]).
   SourceRange getIntroducerRange() const { return IntroducerRange; }
 
-  /// \brief Retrieve the class that corresponds to the lambda.
-  /// 
+  /// Retrieve the class that corresponds to the lambda.
+  ///
   /// This is the "closure type" (C++1y [expr.prim.lambda]), and stores the
   /// captures in its fields and provides the various operations permitted
   /// on a lambda (copying, calling).
   CXXRecordDecl *getLambdaClass() const;
 
-  /// \brief Retrieve the function call operator associated with this
-  /// lambda expression. 
+  /// Retrieve the function call operator associated with this
+  /// lambda expression.
   CXXMethodDecl *getCallOperator() const;
 
-  /// \brief If this is a generic lambda expression, retrieve the template 
-  /// parameter list associated with it, or else return null. 
+  /// If this is a generic lambda expression, retrieve the template
+  /// parameter list associated with it, or else return null.
   TemplateParameterList *getTemplateParameterList() const;
 
-  /// \brief Whether this is a generic lambda.
+  /// Whether this is a generic lambda.
   bool isGenericLambda() const { return getTemplateParameterList(); }
 
-  /// \brief Retrieve the body of the lambda.
+  /// Retrieve the body of the lambda.
   CompoundStmt *getBody() const;
 
-  /// \brief Determine whether the lambda is mutable, meaning that any
+  /// Determine whether the lambda is mutable, meaning that any
   /// captures values can be modified.
   bool isMutable() const;
 
-  /// \brief Determine whether this lambda has an explicit parameter
+  /// Determine whether this lambda has an explicit parameter
   /// list vs. an implicit (empty) parameter list.
   bool hasExplicitParameters() const { return ExplicitParams; }
 
-  /// \brief Whether this lambda had its result type explicitly specified.
+  /// Whether this lambda had its result type explicitly specified.
   bool hasExplicitResultType() const { return ExplicitResultType; }
-    
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == LambdaExprClass;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     return IntroducerRange.getBegin();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return ClosingBrace; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return ClosingBrace; }
 
   child_range children() {
     // Includes initialization exprs plus body stmt
@@ -1809,7 +1997,7 @@
   TypeSourceInfo *TypeInfo;
 
 public:
-  /// \brief Create an explicitly-written scalar-value initialization
+  /// Create an explicitly-written scalar-value initialization
   /// expression.
   CXXScalarValueInitExpr(QualType Type, TypeSourceInfo *TypeInfo,
                          SourceLocation rParenLoc)
@@ -1827,8 +2015,16 @@
 
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXScalarValueInitExprClass;
@@ -1840,7 +2036,7 @@
   }
 };
 
-/// \brief Represents a new-expression for memory allocation and constructor
+/// Represents a new-expression for memory allocation and constructor
 /// calls, e.g: "new CXXNewExpr(foo)".
 class CXXNewExpr : public Expr {
   friend class ASTStmtReader;
@@ -1850,24 +2046,24 @@
   /// expression, and any number of optional placement arguments, in that order.
   Stmt **SubExprs = nullptr;
 
-  /// \brief Points to the allocation function used.
+  /// Points to the allocation function used.
   FunctionDecl *OperatorNew;
 
-  /// \brief Points to the deallocation function used in case of error. May be
+  /// Points to the deallocation function used in case of error. May be
   /// null.
   FunctionDecl *OperatorDelete;
 
-  /// \brief The allocated type-source information, as written in the source.
+  /// The allocated type-source information, as written in the source.
   TypeSourceInfo *AllocatedTypeInfo;
 
-  /// \brief If the allocated type was expressed as a parenthesized type-id,
+  /// If the allocated type was expressed as a parenthesized type-id,
   /// the source range covering the parenthesized type-id.
   SourceRange TypeIdParens;
 
-  /// \brief Range of the entire new expression.
+  /// Range of the entire new expression.
   SourceRange Range;
 
-  /// \brief Source-range of a paren-delimited initializer.
+  /// Source-range of a paren-delimited initializer.
   SourceRange DirectInitRange;
 
   /// Was the usage ::new, i.e. is the global new to be used?
@@ -1925,7 +2121,7 @@
     return AllocatedTypeInfo;
   }
 
-  /// \brief True if the allocation result needs to be null-checked.
+  /// True if the allocation result needs to be null-checked.
   ///
   /// C++11 [expr.new]p13:
   ///   If the allocation function returns null, initialization shall
@@ -1976,17 +2172,17 @@
 
   bool isGlobalNew() const { return GlobalNew; }
 
-  /// \brief Whether this new-expression has any initializer at all.
+  /// Whether this new-expression has any initializer at all.
   bool hasInitializer() const { return StoredInitializationStyle > 0; }
 
-  /// \brief The kind of initializer this new-expression has.
+  /// The kind of initializer this new-expression has.
   InitializationStyle getInitializationStyle() const {
     if (StoredInitializationStyle == 0)
       return NoInit;
     return static_cast<InitializationStyle>(StoredInitializationStyle-1);
   }
 
-  /// \brief The initializer of this new-expression.
+  /// The initializer of this new-expression.
   Expr *getInitializer() {
     return hasInitializer() ? cast<Expr>(SubExprs[Array]) : nullptr;
   }
@@ -1994,7 +2190,7 @@
     return hasInitializer() ? cast<Expr>(SubExprs[Array]) : nullptr;
   }
 
-  /// \brief Returns the CXXConstructExpr from this new-expression, or null.
+  /// Returns the CXXConstructExpr from this new-expression, or null.
   const CXXConstructExpr *getConstructExpr() const {
     return dyn_cast_or_null<CXXConstructExpr>(getInitializer());
   }
@@ -2047,7 +2243,11 @@
     return SubExprs + Array + hasInitializer() + getNumPlacementArgs();
   }
 
-  SourceLocation getStartLoc() const { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getStartLoc() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const { return Range.getBegin(); }
   SourceLocation getEndLoc() const { return Range.getEnd(); }
 
   SourceRange getDirectInitRange() const { return DirectInitRange; }
@@ -2056,8 +2256,14 @@
     return Range;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getStartLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXNewExprClass;
@@ -2069,7 +2275,7 @@
   }
 };
 
-/// \brief Represents a \c delete expression for memory deallocation and
+/// Represents a \c delete expression for memory deallocation and
 /// destructor calls, e.g. "delete[] pArray".
 class CXXDeleteExpr : public Expr {
   /// Points to the operator delete overload that is used. Could be a member.
@@ -2128,14 +2334,24 @@
   Expr *getArgument() { return cast<Expr>(Argument); }
   const Expr *getArgument() const { return cast<Expr>(Argument); }
 
-  /// \brief Retrieve the type being destroyed. 
+  /// Retrieve the type being destroyed.
   ///
   /// If the type being destroyed is a dependent type which may or may not
   /// be a pointer, return an invalid type.
   QualType getDestroyedType() const;
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {return Argument->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return Argument->getEndLoc();
+  }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXDeleteExprClass;
@@ -2145,13 +2361,13 @@
   child_range children() { return child_range(&Argument, &Argument+1); }
 };
 
-/// \brief Stores the type being destroyed by a pseudo-destructor expression.
+/// Stores the type being destroyed by a pseudo-destructor expression.
 class PseudoDestructorTypeStorage {
-  /// \brief Either the type source information or the name of the type, if
+  /// Either the type source information or the name of the type, if
   /// it couldn't be resolved due to type-dependence.
   llvm::PointerUnion<TypeSourceInfo *, IdentifierInfo *> Type;
 
-  /// \brief The starting source location of the pseudo-destructor type.
+  /// The starting source location of the pseudo-destructor type.
   SourceLocation Location;
 
 public:
@@ -2173,7 +2389,7 @@
   SourceLocation getLocation() const { return Location; }
 };
 
-/// \brief Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
+/// Represents a C++ pseudo-destructor (C++ [expr.pseudo]).
 ///
 /// A pseudo-destructor is an expression that looks like a member access to a
 /// destructor of a scalar type, except that scalar types don't have
@@ -2200,31 +2416,31 @@
 class CXXPseudoDestructorExpr : public Expr {
   friend class ASTStmtReader;
 
-  /// \brief The base expression (that is being destroyed).
+  /// The base expression (that is being destroyed).
   Stmt *Base = nullptr;
 
-  /// \brief Whether the operator was an arrow ('->'); otherwise, it was a
+  /// Whether the operator was an arrow ('->'); otherwise, it was a
   /// period ('.').
   bool IsArrow : 1;
 
-  /// \brief The location of the '.' or '->' operator.
+  /// The location of the '.' or '->' operator.
   SourceLocation OperatorLoc;
 
-  /// \brief The nested-name-specifier that follows the operator, if present.
+  /// The nested-name-specifier that follows the operator, if present.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief The type that precedes the '::' in a qualified pseudo-destructor
+  /// The type that precedes the '::' in a qualified pseudo-destructor
   /// expression.
   TypeSourceInfo *ScopeType = nullptr;
 
-  /// \brief The location of the '::' in a qualified pseudo-destructor
+  /// The location of the '::' in a qualified pseudo-destructor
   /// expression.
   SourceLocation ColonColonLoc;
 
-  /// \brief The location of the '~'.
+  /// The location of the '~'.
   SourceLocation TildeLoc;
 
-  /// \brief The type being destroyed, or its name if we were unable to
+  /// The type being destroyed, or its name if we were unable to
   /// resolve the name.
   PseudoDestructorTypeStorage DestroyedType;
 
@@ -2242,30 +2458,30 @@
 
   Expr *getBase() const { return cast<Expr>(Base); }
 
-  /// \brief Determines whether this member expression actually had
+  /// Determines whether this member expression actually had
   /// a C++ nested-name-specifier prior to the name of the member, e.g.,
   /// x->Base::foo.
   bool hasQualifier() const { return QualifierLoc.hasQualifier(); }
 
-  /// \brief Retrieves the nested-name-specifier that qualifies the type name,
+  /// Retrieves the nested-name-specifier that qualifies the type name,
   /// with source-location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief If the member name was qualified, retrieves the
+  /// If the member name was qualified, retrieves the
   /// nested-name-specifier that precedes the member name. Otherwise, returns
   /// null.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
 
-  /// \brief Determine whether this pseudo-destructor expression was written
+  /// Determine whether this pseudo-destructor expression was written
   /// using an '->' (otherwise, it used a '.').
   bool isArrow() const { return IsArrow; }
 
-  /// \brief Retrieve the location of the '.' or '->' operator.
+  /// Retrieve the location of the '.' or '->' operator.
   SourceLocation getOperatorLoc() const { return OperatorLoc; }
 
-  /// \brief Retrieve the scope type in a qualified pseudo-destructor
+  /// Retrieve the scope type in a qualified pseudo-destructor
   /// expression.
   ///
   /// Pseudo-destructor expressions can have extra qualification within them
@@ -2276,14 +2492,14 @@
   /// destructor expression.
   TypeSourceInfo *getScopeTypeInfo() const { return ScopeType; }
 
-  /// \brief Retrieve the location of the '::' in a qualified pseudo-destructor
+  /// Retrieve the location of the '::' in a qualified pseudo-destructor
   /// expression.
   SourceLocation getColonColonLoc() const { return ColonColonLoc; }
 
-  /// \brief Retrieve the location of the '~'.
+  /// Retrieve the location of the '~'.
   SourceLocation getTildeLoc() const { return TildeLoc; }
 
-  /// \brief Retrieve the source location information for the type
+  /// Retrieve the source location information for the type
   /// being destroyed.
   ///
   /// This type-source information is available for non-dependent
@@ -2294,34 +2510,44 @@
     return DestroyedType.getTypeSourceInfo();
   }
 
-  /// \brief In a dependent pseudo-destructor expression for which we do not
+  /// In a dependent pseudo-destructor expression for which we do not
   /// have full type information on the destroyed type, provides the name
   /// of the destroyed type.
   IdentifierInfo *getDestroyedTypeIdentifier() const {
     return DestroyedType.getIdentifier();
   }
 
-  /// \brief Retrieve the type being destroyed.
+  /// Retrieve the type being destroyed.
   QualType getDestroyedType() const;
 
-  /// \brief Retrieve the starting location of the type being destroyed.
+  /// Retrieve the starting location of the type being destroyed.
   SourceLocation getDestroyedTypeLoc() const {
     return DestroyedType.getLocation();
   }
 
-  /// \brief Set the name of destroyed type for a dependent pseudo-destructor
+  /// Set the name of destroyed type for a dependent pseudo-destructor
   /// expression.
   void setDestroyedType(IdentifierInfo *II, SourceLocation Loc) {
     DestroyedType = PseudoDestructorTypeStorage(II, Loc);
   }
 
-  /// \brief Set the destroyed type.
+  /// Set the destroyed type.
   void setDestroyedType(TypeSourceInfo *Info) {
     DestroyedType = PseudoDestructorTypeStorage(Info);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {return Base->getLocStart();}
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return Base->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXPseudoDestructorExprClass;
@@ -2331,7 +2557,7 @@
   child_range children() { return child_range(&Base, &Base + 1); }
 };
 
-/// \brief A type trait used in the implementation of various C++11 and
+/// A type trait used in the implementation of various C++11 and
 /// Library TR1 trait templates.
 ///
 /// \code
@@ -2342,15 +2568,15 @@
 class TypeTraitExpr final
     : public Expr,
       private llvm::TrailingObjects<TypeTraitExpr, TypeSourceInfo *> {
-  /// \brief The location of the type trait keyword.
+  /// The location of the type trait keyword.
   SourceLocation Loc;
-  
-  /// \brief  The location of the closing parenthesis.
+
+  ///  The location of the closing parenthesis.
   SourceLocation RParenLoc;
-  
+
   // Note: The TypeSourceInfos for the arguments are allocated after the
   // TypeTraitExpr.
-  
+
   TypeTraitExpr(QualType T, SourceLocation Loc, TypeTrait Kind,
                 ArrayRef<TypeSourceInfo *> Args,
                 SourceLocation RParenLoc,
@@ -2367,7 +2593,7 @@
   friend class ASTStmtWriter;
   friend TrailingObjects;
 
-  /// \brief Create a new type trait expression.
+  /// Create a new type trait expression.
   static TypeTraitExpr *Create(const ASTContext &C, QualType T,
                                SourceLocation Loc, TypeTrait Kind,
                                ArrayRef<TypeSourceInfo *> Args,
@@ -2376,46 +2602,54 @@
 
   static TypeTraitExpr *CreateDeserialized(const ASTContext &C,
                                            unsigned NumArgs);
-  
-  /// \brief Determine which type trait this expression uses.
+
+  /// Determine which type trait this expression uses.
   TypeTrait getTrait() const {
     return static_cast<TypeTrait>(TypeTraitExprBits.Kind);
   }
 
-  bool getValue() const { 
-    assert(!isValueDependent()); 
-    return TypeTraitExprBits.Value; 
+  bool getValue() const {
+    assert(!isValueDependent());
+    return TypeTraitExprBits.Value;
   }
-  
-  /// \brief Determine the number of arguments to this type trait.
+
+  /// Determine the number of arguments to this type trait.
   unsigned getNumArgs() const { return TypeTraitExprBits.NumArgs; }
-  
-  /// \brief Retrieve the Ith argument.
+
+  /// Retrieve the Ith argument.
   TypeSourceInfo *getArg(unsigned I) const {
     assert(I < getNumArgs() && "Argument out-of-range");
     return getArgs()[I];
   }
-  
-  /// \brief Retrieve the argument types.
+
+  /// Retrieve the argument types.
   ArrayRef<TypeSourceInfo *> getArgs() const {
     return llvm::makeArrayRef(getTrailingObjects<TypeSourceInfo *>(),
                               getNumArgs());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == TypeTraitExprClass;
   }
-  
+
   // Iterators
   child_range children() {
     return child_range(child_iterator(), child_iterator());
   }
 };
 
-/// \brief An Embarcadero array type trait, as used in the implementation of
+/// An Embarcadero array type trait, as used in the implementation of
 /// __array_rank and __array_extent.
 ///
 /// Example:
@@ -2424,22 +2658,22 @@
 ///   __array_extent(int, 1)    == 20
 /// \endcode
 class ArrayTypeTraitExpr : public Expr {
-  /// \brief The trait. An ArrayTypeTrait enum in MSVC compat unsigned.
+  /// The trait. An ArrayTypeTrait enum in MSVC compat unsigned.
   unsigned ATT : 2;
 
-  /// \brief The value of the type trait. Unspecified if dependent.
+  /// The value of the type trait. Unspecified if dependent.
   uint64_t Value = 0;
 
-  /// \brief The array dimension being queried, or -1 if not used.
+  /// The array dimension being queried, or -1 if not used.
   Expr *Dimension;
 
-  /// \brief The location of the type trait keyword.
+  /// The location of the type trait keyword.
   SourceLocation Loc;
 
-  /// \brief The location of the closing paren.
+  /// The location of the closing paren.
   SourceLocation RParen;
 
-  /// \brief The type being queried.
+  /// The type being queried.
   TypeSourceInfo *QueriedType = nullptr;
 
   virtual void anchor();
@@ -2463,8 +2697,16 @@
 
   virtual ~ArrayTypeTraitExpr() = default;
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParen; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParen; }
 
   ArrayTypeTrait getTrait() const { return static_cast<ArrayTypeTrait>(ATT); }
 
@@ -2486,7 +2728,7 @@
   }
 };
 
-/// \brief An expression trait intrinsic.
+/// An expression trait intrinsic.
 ///
 /// Example:
 /// \code
@@ -2494,19 +2736,19 @@
 ///   __is_lvalue_expr(1) == false
 /// \endcode
 class ExpressionTraitExpr : public Expr {
-  /// \brief The trait. A ExpressionTrait enum in MSVC compatible unsigned.
+  /// The trait. A ExpressionTrait enum in MSVC compatible unsigned.
   unsigned ET : 31;
 
-  /// \brief The value of the type trait. Unspecified if dependent.
+  /// The value of the type trait. Unspecified if dependent.
   unsigned Value : 1;
 
-  /// \brief The location of the type trait keyword.
+  /// The location of the type trait keyword.
   SourceLocation Loc;
 
-  /// \brief The location of the closing paren.
+  /// The location of the closing paren.
   SourceLocation RParen;
 
-  /// \brief The expression being queried.
+  /// The expression being queried.
   Expr* QueriedExpression = nullptr;
 
 public:
@@ -2527,8 +2769,16 @@
   explicit ExpressionTraitExpr(EmptyShell Empty)
       : Expr(ExpressionTraitExprClass, Empty), ET(0), Value(false) {}
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParen; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParen; }
 
   ExpressionTrait getTrait() const { return static_cast<ExpressionTrait>(ET); }
 
@@ -2546,13 +2796,13 @@
   }
 };
 
-/// \brief A reference to an overloaded function set, either an
+/// A reference to an overloaded function set, either an
 /// \c UnresolvedLookupExpr or an \c UnresolvedMemberExpr.
 class OverloadExpr : public Expr {
-  /// \brief The common name of these declarations.
+  /// The common name of these declarations.
   DeclarationNameInfo NameInfo;
 
-  /// \brief The nested-name-specifier that qualifies the name, if any.
+  /// The nested-name-specifier that qualifies the name, if any.
   NestedNameSpecifierLoc QualifierLoc;
 
   /// The results.  These are undesugared, which is to say, they may
@@ -2564,7 +2814,7 @@
   unsigned NumResults = 0;
 
 protected:
-  /// \brief Whether the name includes info for explicit template
+  /// Whether the name includes info for explicit template
   /// keyword and arguments.
   bool HasTemplateKWAndArgsInfo = false;
 
@@ -2580,11 +2830,11 @@
 
   OverloadExpr(StmtClass K, EmptyShell Empty) : Expr(K, Empty) {}
 
-  /// \brief Return the optional template keyword and arguments info.
+  /// Return the optional template keyword and arguments info.
   ASTTemplateKWAndArgsInfo *
   getTrailingASTTemplateKWAndArgsInfo(); // defined far below.
 
-  /// \brief Return the optional template keyword and arguments info.
+  /// Return the optional template keyword and arguments info.
   const ASTTemplateKWAndArgsInfo *getTrailingASTTemplateKWAndArgsInfo() const {
     return const_cast<OverloadExpr *>(this)
         ->getTrailingASTTemplateKWAndArgsInfo();
@@ -2607,7 +2857,7 @@
     bool HasFormOfMemberPointer;
   };
 
-  /// \brief Finds the overloaded expression in the given expression \p E of
+  /// Finds the overloaded expression in the given expression \p E of
   /// OverloadTy.
   ///
   /// \return the expression (which must be there) and true if it has
@@ -2621,7 +2871,7 @@
     if (isa<UnaryOperator>(E)) {
       assert(cast<UnaryOperator>(E)->getOpcode() == UO_AddrOf);
       E = cast<UnaryOperator>(E)->getSubExpr();
-      OverloadExpr *Ovl = cast<OverloadExpr>(E->IgnoreParens());
+      auto *Ovl = cast<OverloadExpr>(E->IgnoreParens());
 
       Result.HasFormOfMemberPointer = (E == Ovl && Ovl->getQualifier());
       Result.IsAddressOfOperand = true;
@@ -2635,7 +2885,7 @@
     return Result;
   }
 
-  /// \brief Gets the naming class of this lookup, if any.
+  /// Gets the naming class of this lookup, if any.
   CXXRecordDecl *getNamingClass() const;
 
   using decls_iterator = UnresolvedSetImpl::iterator;
@@ -2648,52 +2898,52 @@
     return llvm::make_range(decls_begin(), decls_end());
   }
 
-  /// \brief Gets the number of declarations in the unresolved set.
+  /// Gets the number of declarations in the unresolved set.
   unsigned getNumDecls() const { return NumResults; }
 
-  /// \brief Gets the full name info.
+  /// Gets the full name info.
   const DeclarationNameInfo &getNameInfo() const { return NameInfo; }
 
-  /// \brief Gets the name looked up.
+  /// Gets the name looked up.
   DeclarationName getName() const { return NameInfo.getName(); }
 
-  /// \brief Gets the location of the name.
+  /// Gets the location of the name.
   SourceLocation getNameLoc() const { return NameInfo.getLoc(); }
 
-  /// \brief Fetches the nested-name qualifier, if one was given.
+  /// Fetches the nested-name qualifier, if one was given.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
 
-  /// \brief Fetches the nested-name qualifier with source-location
+  /// Fetches the nested-name qualifier with source-location
   /// information, if one was given.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the location of the template keyword preceding
+  /// Retrieve the location of the template keyword preceding
   /// this name, if any.
   SourceLocation getTemplateKeywordLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingASTTemplateKWAndArgsInfo()->TemplateKWLoc;
   }
 
-  /// \brief Retrieve the location of the left angle bracket starting the
+  /// Retrieve the location of the left angle bracket starting the
   /// explicit template argument list following the name, if any.
   SourceLocation getLAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingASTTemplateKWAndArgsInfo()->LAngleLoc;
   }
 
-  /// \brief Retrieve the location of the right angle bracket ending the
+  /// Retrieve the location of the right angle bracket ending the
   /// explicit template argument list following the name, if any.
   SourceLocation getRAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingASTTemplateKWAndArgsInfo()->RAngleLoc;
   }
 
-  /// \brief Determines whether the name was preceded by the template keyword.
+  /// Determines whether the name was preceded by the template keyword.
   bool hasTemplateKeyword() const { return getTemplateKeywordLoc().isValid(); }
 
-  /// \brief Determines whether this expression had explicit template arguments.
+  /// Determines whether this expression had explicit template arguments.
   bool hasExplicitTemplateArgs() const { return getLAngleLoc().isValid(); }
 
   TemplateArgumentLoc const *getTemplateArgs() const {
@@ -2713,7 +2963,7 @@
     return {getTemplateArgs(), getNumTemplateArgs()};
   }
 
-  /// \brief Copies the template arguments into the given structure.
+  /// Copies the template arguments into the given structure.
   void copyTemplateArgumentsInto(TemplateArgumentListInfo &List) const {
     if (hasExplicitTemplateArgs())
       getTrailingASTTemplateKWAndArgsInfo()->copyInto(getTemplateArgs(), List);
@@ -2725,7 +2975,7 @@
   }
 };
 
-/// \brief A reference to a name which we were able to look up during
+/// A reference to a name which we were able to look up during
 /// parsing but could not resolve to a specific declaration.
 ///
 /// This arises in several ways:
@@ -2819,16 +3069,24 @@
   /// that was looked in to find these results.
   CXXRecordDecl *getNamingClass() const { return NamingClass; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     if (NestedNameSpecifierLoc l = getQualifierLoc())
       return l.getBeginLoc();
-    return getNameInfo().getLocStart();
+    return getNameInfo().getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (hasExplicitTemplateArgs())
       return getRAngleLoc();
-    return getNameInfo().getLocEnd();
+    return getNameInfo().getEndLoc();
   }
 
   child_range children() {
@@ -2840,7 +3098,7 @@
   }
 };
 
-/// \brief A qualified reference to a name whose declaration cannot
+/// A qualified reference to a name whose declaration cannot
 /// yet be resolved.
 ///
 /// DependentScopeDeclRefExpr is similar to DeclRefExpr in that
@@ -2859,14 +3117,14 @@
       private llvm::TrailingObjects<DependentScopeDeclRefExpr,
                                     ASTTemplateKWAndArgsInfo,
                                     TemplateArgumentLoc> {
-  /// \brief The nested-name-specifier that qualifies this unresolved
+  /// The nested-name-specifier that qualifies this unresolved
   /// declaration name.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief The name of the entity we will be referencing.
+  /// The name of the entity we will be referencing.
   DeclarationNameInfo NameInfo;
 
-  /// \brief Whether the name includes info for explicit template
+  /// Whether the name includes info for explicit template
   /// keyword and arguments.
   bool HasTemplateKWAndArgsInfo;
 
@@ -2895,42 +3153,42 @@
                                                 bool HasTemplateKWAndArgsInfo,
                                                 unsigned NumTemplateArgs);
 
-  /// \brief Retrieve the name that this expression refers to.
+  /// Retrieve the name that this expression refers to.
   const DeclarationNameInfo &getNameInfo() const { return NameInfo; }
 
-  /// \brief Retrieve the name that this expression refers to.
+  /// Retrieve the name that this expression refers to.
   DeclarationName getDeclName() const { return NameInfo.getName(); }
 
-  /// \brief Retrieve the location of the name within the expression.
+  /// Retrieve the location of the name within the expression.
   ///
   /// For example, in "X<T>::value" this is the location of "value".
   SourceLocation getLocation() const { return NameInfo.getLoc(); }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the
+  /// Retrieve the nested-name-specifier that qualifies the
   /// name, with source location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies this
+  /// Retrieve the nested-name-specifier that qualifies this
   /// declaration.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
 
-  /// \brief Retrieve the location of the template keyword preceding
+  /// Retrieve the location of the template keyword preceding
   /// this name, if any.
   SourceLocation getTemplateKeywordLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->TemplateKWLoc;
   }
 
-  /// \brief Retrieve the location of the left angle bracket starting the
+  /// Retrieve the location of the left angle bracket starting the
   /// explicit template argument list following the name, if any.
   SourceLocation getLAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->LAngleLoc;
   }
 
-  /// \brief Retrieve the location of the right angle bracket ending the
+  /// Retrieve the location of the right angle bracket ending the
   /// explicit template argument list following the name, if any.
   SourceLocation getRAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
@@ -2943,7 +3201,7 @@
   /// Determines whether this lookup had explicit template arguments.
   bool hasExplicitTemplateArgs() const { return getLAngleLoc().isValid(); }
 
-  /// \brief Copies the template arguments (if present) into the given
+  /// Copies the template arguments (if present) into the given
   /// structure.
   void copyTemplateArgumentsInto(TemplateArgumentListInfo &List) const {
     if (hasExplicitTemplateArgs())
@@ -2969,13 +3227,21 @@
     return {getTemplateArgs(), getNumTemplateArgs()};
   }
 
-  /// Note: getLocStart() is the start of the whole DependentScopeDeclRefExpr,
+  /// Note: getBeginLoc() is the start of the whole DependentScopeDeclRefExpr,
   /// and differs from getLocation().getStart().
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     return QualifierLoc.getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (hasExplicitTemplateArgs())
       return getRAngleLoc();
     return getLocation();
@@ -3051,11 +3317,21 @@
   /// when modifying an existing AST to preserve its invariants.
   void setSubExpr(Expr *E) { SubExpr = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return SubExpr->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return SubExpr->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubExpr->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExpr->getEndLoc();
+  }
 
   // Implement isa/cast/dyncast/etc.
   static bool classof(const Stmt *T) {
@@ -3066,7 +3342,7 @@
   child_range children() { return child_range(&SubExpr, &SubExpr + 1); }
 };
 
-/// \brief Describes an explicit type conversion that uses functional
+/// Describes an explicit type conversion that uses functional
 /// notion but could not be resolved because one or more arguments are
 /// type-dependent.
 ///
@@ -3093,16 +3369,16 @@
   friend class ASTStmtReader;
   friend TrailingObjects;
 
-  /// \brief The type being constructed.
+  /// The type being constructed.
   TypeSourceInfo *Type = nullptr;
 
-  /// \brief The location of the left parentheses ('(').
+  /// The location of the left parentheses ('(').
   SourceLocation LParenLoc;
 
-  /// \brief The location of the right parentheses (')').
+  /// The location of the right parentheses (')').
   SourceLocation RParenLoc;
 
-  /// \brief The number of arguments used to construct the type.
+  /// The number of arguments used to construct the type.
   unsigned NumArgs;
 
   CXXUnresolvedConstructExpr(TypeSourceInfo *Type,
@@ -3123,20 +3399,20 @@
   static CXXUnresolvedConstructExpr *CreateEmpty(const ASTContext &C,
                                                  unsigned NumArgs);
 
-  /// \brief Retrieve the type that is being constructed, as specified
+  /// Retrieve the type that is being constructed, as specified
   /// in the source code.
   QualType getTypeAsWritten() const { return Type->getType(); }
 
-  /// \brief Retrieve the type source information for the type being
+  /// Retrieve the type source information for the type being
   /// constructed.
   TypeSourceInfo *getTypeSourceInfo() const { return Type; }
 
-  /// \brief Retrieve the location of the left parentheses ('(') that
+  /// Retrieve the location of the left parentheses ('(') that
   /// precedes the argument list.
   SourceLocation getLParenLoc() const { return LParenLoc; }
   void setLParenLoc(SourceLocation L) { LParenLoc = L; }
 
-  /// \brief Retrieve the location of the right parentheses (')') that
+  /// Retrieve the location of the right parentheses (')') that
   /// follows the argument list.
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
@@ -3146,7 +3422,7 @@
   /// an InitListExpr.
   bool isListInitialization() const { return LParenLoc.isInvalid(); }
 
-  /// \brief Retrieve the number of arguments.
+  /// Retrieve the number of arguments.
   unsigned arg_size() const { return NumArgs; }
 
   using arg_iterator = Expr **;
@@ -3176,11 +3452,19 @@
     *(arg_begin() + I) = E;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (!RParenLoc.isValid() && NumArgs > 0)
-      return getArg(NumArgs - 1)->getLocEnd();
+      return getArg(NumArgs - 1)->getEndLoc();
     return RParenLoc;
   }
 
@@ -3190,12 +3474,12 @@
 
   // Iterators
   child_range children() {
-    Stmt **begin = reinterpret_cast<Stmt **>(arg_begin());
+    auto **begin = reinterpret_cast<Stmt **>(arg_begin());
     return child_range(begin, begin + NumArgs);
   }
 };
 
-/// \brief Represents a C++ member access expression where the actual
+/// Represents a C++ member access expression where the actual
 /// member referenced could not be resolved because the base
 /// expression or the member name was dependent.
 ///
@@ -3207,29 +3491,29 @@
       private llvm::TrailingObjects<CXXDependentScopeMemberExpr,
                                     ASTTemplateKWAndArgsInfo,
                                     TemplateArgumentLoc> {
-  /// \brief The expression for the base pointer or class reference,
+  /// The expression for the base pointer or class reference,
   /// e.g., the \c x in x.f.  Can be null in implicit accesses.
   Stmt *Base;
 
-  /// \brief The type of the base expression.  Never null, even for
+  /// The type of the base expression.  Never null, even for
   /// implicit accesses.
   QualType BaseType;
 
-  /// \brief Whether this member expression used the '->' operator or
+  /// Whether this member expression used the '->' operator or
   /// the '.' operator.
   bool IsArrow : 1;
 
-  /// \brief Whether this member expression has info for explicit template
+  /// Whether this member expression has info for explicit template
   /// keyword and arguments.
   bool HasTemplateKWAndArgsInfo : 1;
 
-  /// \brief The location of the '->' or '.' operator.
+  /// The location of the '->' or '.' operator.
   SourceLocation OperatorLoc;
 
-  /// \brief The nested-name-specifier that precedes the member name, if any.
+  /// The nested-name-specifier that precedes the member name, if any.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief In a qualified member access expression such as t->Base::f, this
+  /// In a qualified member access expression such as t->Base::f, this
   /// member stores the resolves of name lookup in the context of the member
   /// access expression, to be used at instantiation time.
   ///
@@ -3238,7 +3522,7 @@
   /// the CXXDependentScopeMemberExpr, to save space in the common case.
   NamedDecl *FirstQualifierFoundInScope;
 
-  /// \brief The member to which this member expression refers, which
+  /// The member to which this member expression refers, which
   /// can be name, overloaded operator, or destructor.
   ///
   /// FIXME: could also be a template-id
@@ -3280,12 +3564,12 @@
   CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo,
               unsigned NumTemplateArgs);
 
-  /// \brief True if this is an implicit access, i.e. one in which the
+  /// True if this is an implicit access, i.e. one in which the
   /// member being accessed was not written in the source.  The source
   /// location of the operator is invalid in this case.
   bool isImplicitAccess() const;
 
-  /// \brief Retrieve the base object of this member expressions,
+  /// Retrieve the base object of this member expressions,
   /// e.g., the \c x in \c x.m.
   Expr *getBase() const {
     assert(!isImplicitAccess());
@@ -3294,24 +3578,24 @@
 
   QualType getBaseType() const { return BaseType; }
 
-  /// \brief Determine whether this member expression used the '->'
+  /// Determine whether this member expression used the '->'
   /// operator; otherwise, it used the '.' operator.
   bool isArrow() const { return IsArrow; }
 
-  /// \brief Retrieve the location of the '->' or '.' operator.
+  /// Retrieve the location of the '->' or '.' operator.
   SourceLocation getOperatorLoc() const { return OperatorLoc; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the member
+  /// Retrieve the nested-name-specifier that qualifies the member
   /// name.
   NestedNameSpecifier *getQualifier() const {
     return QualifierLoc.getNestedNameSpecifier();
   }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies the member
+  /// Retrieve the nested-name-specifier that qualifies the member
   /// name, with source location information.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the first part of the nested-name-specifier that was
+  /// Retrieve the first part of the nested-name-specifier that was
   /// found in the scope of the member access expression when the member access
   /// was initially parsed.
   ///
@@ -3326,35 +3610,35 @@
     return FirstQualifierFoundInScope;
   }
 
-  /// \brief Retrieve the name of the member that this expression
+  /// Retrieve the name of the member that this expression
   /// refers to.
   const DeclarationNameInfo &getMemberNameInfo() const {
     return MemberNameInfo;
   }
 
-  /// \brief Retrieve the name of the member that this expression
+  /// Retrieve the name of the member that this expression
   /// refers to.
   DeclarationName getMember() const { return MemberNameInfo.getName(); }
 
-  // \brief Retrieve the location of the name of the member that this
+  // Retrieve the location of the name of the member that this
   // expression refers to.
   SourceLocation getMemberLoc() const { return MemberNameInfo.getLoc(); }
 
-  /// \brief Retrieve the location of the template keyword preceding the
+  /// Retrieve the location of the template keyword preceding the
   /// member name, if any.
   SourceLocation getTemplateKeywordLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->TemplateKWLoc;
   }
 
-  /// \brief Retrieve the location of the left angle bracket starting the
+  /// Retrieve the location of the left angle bracket starting the
   /// explicit template argument list following the member name, if any.
   SourceLocation getLAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
     return getTrailingObjects<ASTTemplateKWAndArgsInfo>()->LAngleLoc;
   }
 
-  /// \brief Retrieve the location of the right angle bracket ending the
+  /// Retrieve the location of the right angle bracket ending the
   /// explicit template argument list following the member name, if any.
   SourceLocation getRAngleLoc() const {
     if (!HasTemplateKWAndArgsInfo) return SourceLocation();
@@ -3364,11 +3648,11 @@
   /// Determines whether the member name was preceded by the template keyword.
   bool hasTemplateKeyword() const { return getTemplateKeywordLoc().isValid(); }
 
-  /// \brief Determines whether this member expression actually had a C++
+  /// Determines whether this member expression actually had a C++
   /// template argument list explicitly specified, e.g., x.f<int>.
   bool hasExplicitTemplateArgs() const { return getLAngleLoc().isValid(); }
 
-  /// \brief Copies the template arguments (if present) into the given
+  /// Copies the template arguments (if present) into the given
   /// structure.
   void copyTemplateArgumentsInto(TemplateArgumentListInfo &List) const {
     if (hasExplicitTemplateArgs())
@@ -3376,7 +3660,7 @@
           getTrailingObjects<TemplateArgumentLoc>(), List);
   }
 
-  /// \brief Retrieve the template arguments provided as part of this
+  /// Retrieve the template arguments provided as part of this
   /// template-id.
   const TemplateArgumentLoc *getTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -3385,7 +3669,7 @@
     return getTrailingObjects<TemplateArgumentLoc>();
   }
 
-  /// \brief Retrieve the number of template arguments provided as part of this
+  /// Retrieve the number of template arguments provided as part of this
   /// template-id.
   unsigned getNumTemplateArgs() const {
     if (!hasExplicitTemplateArgs())
@@ -3398,15 +3682,23 @@
     return {getTemplateArgs(), getNumTemplateArgs()};
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     if (!isImplicitAccess())
-      return Base->getLocStart();
+      return Base->getBeginLoc();
     if (getQualifier())
       return getQualifierLoc().getBeginLoc();
     return MemberNameInfo.getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (hasExplicitTemplateArgs())
       return getRAngleLoc();
     return MemberNameInfo.getEndLoc();
@@ -3424,7 +3716,7 @@
   }
 };
 
-/// \brief Represents a C++ member access expression for which lookup
+/// Represents a C++ member access expression for which lookup
 /// produced a set of overloaded functions.
 ///
 /// The member access may be explicit or implicit:
@@ -3447,24 +3739,24 @@
   friend class OverloadExpr;
   friend TrailingObjects;
 
-  /// \brief Whether this member expression used the '->' operator or
+  /// Whether this member expression used the '->' operator or
   /// the '.' operator.
   bool IsArrow : 1;
 
-  /// \brief Whether the lookup results contain an unresolved using
+  /// Whether the lookup results contain an unresolved using
   /// declaration.
   bool HasUnresolvedUsing : 1;
 
-  /// \brief The expression for the base pointer or class reference,
+  /// The expression for the base pointer or class reference,
   /// e.g., the \c x in x.f.
   ///
   /// This can be null if this is an 'unbased' member expression.
   Stmt *Base = nullptr;
 
-  /// \brief The type of the base expression; never null.
+  /// The type of the base expression; never null.
   QualType BaseType;
 
-  /// \brief The location of the '->' or '.' operator.
+  /// The location of the '->' or '.' operator.
   SourceLocation OperatorLoc;
 
   UnresolvedMemberExpr(const ASTContext &C, bool HasUnresolvedUsing,
@@ -3499,13 +3791,13 @@
   CreateEmpty(const ASTContext &C, bool HasTemplateKWAndArgsInfo,
               unsigned NumTemplateArgs);
 
-  /// \brief True if this is an implicit access, i.e., one in which the
+  /// True if this is an implicit access, i.e., one in which the
   /// member being accessed was not written in the source.
   ///
   /// The source location of the operator is invalid in this case.
   bool isImplicitAccess() const;
 
-  /// \brief Retrieve the base object of this member expressions,
+  /// Retrieve the base object of this member expressions,
   /// e.g., the \c x in \c x.m.
   Expr *getBase() {
     assert(!isImplicitAccess());
@@ -3518,48 +3810,56 @@
 
   QualType getBaseType() const { return BaseType; }
 
-  /// \brief Determine whether the lookup results contain an unresolved using
+  /// Determine whether the lookup results contain an unresolved using
   /// declaration.
   bool hasUnresolvedUsing() const { return HasUnresolvedUsing; }
 
-  /// \brief Determine whether this member expression used the '->'
+  /// Determine whether this member expression used the '->'
   /// operator; otherwise, it used the '.' operator.
   bool isArrow() const { return IsArrow; }
 
-  /// \brief Retrieve the location of the '->' or '.' operator.
+  /// Retrieve the location of the '->' or '.' operator.
   SourceLocation getOperatorLoc() const { return OperatorLoc; }
 
-  /// \brief Retrieve the naming class of this lookup.
+  /// Retrieve the naming class of this lookup.
   CXXRecordDecl *getNamingClass() const;
 
-  /// \brief Retrieve the full name info for the member that this expression
+  /// Retrieve the full name info for the member that this expression
   /// refers to.
   const DeclarationNameInfo &getMemberNameInfo() const { return getNameInfo(); }
 
-  /// \brief Retrieve the name of the member that this expression
+  /// Retrieve the name of the member that this expression
   /// refers to.
   DeclarationName getMemberName() const { return getName(); }
 
-  // \brief Retrieve the location of the name of the member that this
+  // Retrieve the location of the name of the member that this
   // expression refers to.
   SourceLocation getMemberLoc() const { return getNameLoc(); }
 
-  // \brief Return the preferred location (the member name) for the arrow when
+  // Return the preferred location (the member name) for the arrow when
   // diagnosing a problem with this expression.
   SourceLocation getExprLoc() const LLVM_READONLY { return getMemberLoc(); }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
     if (!isImplicitAccess())
-      return Base->getLocStart();
+      return Base->getBeginLoc();
     if (NestedNameSpecifierLoc l = getQualifierLoc())
       return l.getBeginLoc();
-    return getMemberNameInfo().getLocStart();
+    return getMemberNameInfo().getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (hasExplicitTemplateArgs())
       return getRAngleLoc();
-    return getMemberNameInfo().getLocEnd();
+    return getMemberNameInfo().getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -3596,7 +3896,7 @@
         ->getTrailingObjects<TemplateArgumentLoc>();
 }
 
-/// \brief Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
+/// Represents a C++11 noexcept expression (C++ [expr.unary.noexcept]).
 ///
 /// The noexcept expression tests whether a given expression might throw. Its
 /// result is a boolean constant.
@@ -3621,8 +3921,16 @@
 
   Expr *getOperand() const { return static_cast<Expr*>(Operand); }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
   bool getValue() const { return Value; }
@@ -3635,7 +3943,7 @@
   child_range children() { return child_range(&Operand, &Operand + 1); }
 };
 
-/// \brief Represents a C++11 pack expansion that produces a sequence of
+/// Represents a C++11 pack expansion that produces a sequence of
 /// expressions.
 ///
 /// A pack expansion expression contains a pattern (which itself is an
@@ -3658,7 +3966,7 @@
 
   SourceLocation EllipsisLoc;
 
-  /// \brief The number of expansions that will be produced by this pack
+  /// The number of expansions that will be produced by this pack
   /// expansion expression, if known.
   ///
   /// When zero, the number of expansions is not known. Otherwise, this value
@@ -3680,17 +3988,17 @@
 
   PackExpansionExpr(EmptyShell Empty) : Expr(PackExpansionExprClass, Empty) {}
 
-  /// \brief Retrieve the pattern of the pack expansion.
+  /// Retrieve the pattern of the pack expansion.
   Expr *getPattern() { return reinterpret_cast<Expr *>(Pattern); }
 
-  /// \brief Retrieve the pattern of the pack expansion.
+  /// Retrieve the pattern of the pack expansion.
   const Expr *getPattern() const { return reinterpret_cast<Expr *>(Pattern); }
 
-  /// \brief Retrieve the location of the ellipsis that describes this pack
+  /// Retrieve the location of the ellipsis that describes this pack
   /// expansion.
   SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
 
-  /// \brief Determine the number of expansions that will be produced when
+  /// Determine the number of expansions that will be produced when
   /// this pack expansion is instantiated, if already known.
   Optional<unsigned> getNumExpansions() const {
     if (NumExpansions)
@@ -3699,11 +4007,19 @@
     return None;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return Pattern->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return Pattern->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return EllipsisLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return EllipsisLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == PackExpansionExprClass;
@@ -3715,7 +4031,7 @@
   }
 };
 
-/// \brief Represents an expression that computes the length of a parameter
+/// Represents an expression that computes the length of a parameter
 /// pack.
 ///
 /// \code
@@ -3731,16 +4047,16 @@
   friend class ASTStmtWriter;
   friend TrailingObjects;
 
-  /// \brief The location of the \c sizeof keyword.
+  /// The location of the \c sizeof keyword.
   SourceLocation OperatorLoc;
 
-  /// \brief The location of the name of the parameter pack.
+  /// The location of the name of the parameter pack.
   SourceLocation PackLoc;
 
-  /// \brief The location of the closing parenthesis.
+  /// The location of the closing parenthesis.
   SourceLocation RParenLoc;
 
-  /// \brief The length of the parameter pack, if known.
+  /// The length of the parameter pack, if known.
   ///
   /// When this expression is not value-dependent, this is the length of
   /// the pack. When the expression was parsed rather than instantiated
@@ -3752,10 +4068,10 @@
   /// and this is the length of that array.
   unsigned Length;
 
-  /// \brief The parameter pack.
+  /// The parameter pack.
   NamedDecl *Pack = nullptr;
 
-  /// \brief Create an expression that computes the length of
+  /// Create an expression that computes the length of
   /// the given parameter pack.
   SizeOfPackExpr(QualType SizeType, SourceLocation OperatorLoc, NamedDecl *Pack,
                  SourceLocation PackLoc, SourceLocation RParenLoc,
@@ -3768,11 +4084,11 @@
         Length(Length ? *Length : PartialArgs.size()), Pack(Pack) {
     assert((!Length || PartialArgs.empty()) &&
            "have partial args for non-dependent sizeof... expression");
-    TemplateArgument *Args = getTrailingObjects<TemplateArgument>();
+    auto *Args = getTrailingObjects<TemplateArgument>();
     std::uninitialized_copy(PartialArgs.begin(), PartialArgs.end(), Args);
   }
 
-  /// \brief Create an empty expression.
+  /// Create an empty expression.
   SizeOfPackExpr(EmptyShell Empty, unsigned NumPartialArgs)
       : Expr(SizeOfPackExprClass, Empty), Length(NumPartialArgs) {}
 
@@ -3785,19 +4101,19 @@
   static SizeOfPackExpr *CreateDeserialized(ASTContext &Context,
                                             unsigned NumPartialArgs);
 
-  /// \brief Determine the location of the 'sizeof' keyword.
+  /// Determine the location of the 'sizeof' keyword.
   SourceLocation getOperatorLoc() const { return OperatorLoc; }
 
-  /// \brief Determine the location of the parameter pack.
+  /// Determine the location of the parameter pack.
   SourceLocation getPackLoc() const { return PackLoc; }
 
-  /// \brief Determine the location of the right parenthesis.
+  /// Determine the location of the right parenthesis.
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  /// \brief Retrieve the parameter pack.
+  /// Retrieve the parameter pack.
   NamedDecl *getPack() const { return Pack; }
 
-  /// \brief Retrieve the length of the parameter pack.
+  /// Retrieve the length of the parameter pack.
   ///
   /// This routine may only be invoked when the expression is not
   /// value-dependent.
@@ -3807,7 +4123,7 @@
     return Length;
   }
 
-  /// \brief Determine whether this represents a partially-substituted sizeof...
+  /// Determine whether this represents a partially-substituted sizeof...
   /// expression, such as is produced for:
   ///
   ///   template<typename ...Ts> using X = int[sizeof...(Ts)];
@@ -3816,15 +4132,23 @@
     return isValueDependent() && Length;
   }
 
-  /// \brief Get
+  /// Get
   ArrayRef<TemplateArgument> getPartialArguments() const {
     assert(isPartiallySubstituted());
-    const TemplateArgument *Args = getTrailingObjects<TemplateArgument>();
+    const auto *Args = getTrailingObjects<TemplateArgument>();
     return llvm::makeArrayRef(Args, Args + Length);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return OperatorLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return OperatorLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SizeOfPackExprClass;
@@ -3836,19 +4160,19 @@
   }
 };
 
-/// \brief Represents a reference to a non-type template parameter
+/// Represents a reference to a non-type template parameter
 /// that has been substituted with a template argument.
 class SubstNonTypeTemplateParmExpr : public Expr {
   friend class ASTReader;
   friend class ASTStmtReader;
 
-  /// \brief The replaced parameter.
+  /// The replaced parameter.
   NonTypeTemplateParmDecl *Param;
 
-  /// \brief The replacement expression.
+  /// The replacement expression.
   Stmt *Replacement;
 
-  /// \brief The location of the non-type template parameter reference.
+  /// The location of the non-type template parameter reference.
   SourceLocation NameLoc;
 
   explicit SubstNonTypeTemplateParmExpr(EmptyShell Empty)
@@ -3867,8 +4191,16 @@
         Param(param), Replacement(replacement), NameLoc(loc) {}
 
   SourceLocation getNameLoc() const { return NameLoc; }
-  SourceLocation getLocStart() const LLVM_READONLY { return NameLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return NameLoc; }
 
   Expr *getReplacement() const { return cast<Expr>(Replacement); }
 
@@ -3882,7 +4214,7 @@
   child_range children() { return child_range(&Replacement, &Replacement+1); }
 };
 
-/// \brief Represents a reference to a non-type template parameter pack that
+/// Represents a reference to a non-type template parameter pack that
 /// has been substituted with a non-template argument pack.
 ///
 /// When a pack expansion in the source code contains multiple parameter packs
@@ -3898,17 +4230,17 @@
   friend class ASTReader;
   friend class ASTStmtReader;
 
-  /// \brief The non-type template parameter pack itself.
+  /// The non-type template parameter pack itself.
   NonTypeTemplateParmDecl *Param;
 
-  /// \brief A pointer to the set of template arguments that this
+  /// A pointer to the set of template arguments that this
   /// parameter pack is instantiated with.
   const TemplateArgument *Arguments;
 
-  /// \brief The number of template arguments in \c Arguments.
+  /// The number of template arguments in \c Arguments.
   unsigned NumArguments;
 
-  /// \brief The location of the non-type template parameter pack reference.
+  /// The location of the non-type template parameter pack reference.
   SourceLocation NameLoc;
 
   explicit SubstNonTypeTemplateParmPackExpr(EmptyShell Empty)
@@ -3921,18 +4253,26 @@
                                    SourceLocation NameLoc,
                                    const TemplateArgument &ArgPack);
 
-  /// \brief Retrieve the non-type template parameter pack being substituted.
+  /// Retrieve the non-type template parameter pack being substituted.
   NonTypeTemplateParmDecl *getParameterPack() const { return Param; }
 
-  /// \brief Retrieve the location of the parameter pack name.
+  /// Retrieve the location of the parameter pack name.
   SourceLocation getParameterPackLocation() const { return NameLoc; }
 
-  /// \brief Retrieve the template argument pack containing the substituted
+  /// Retrieve the template argument pack containing the substituted
   /// template arguments.
   TemplateArgument getArgumentPack() const;
 
-  SourceLocation getLocStart() const LLVM_READONLY { return NameLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return NameLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SubstNonTypeTemplateParmPackExprClass;
@@ -3944,7 +4284,7 @@
   }
 };
 
-/// \brief Represents a reference to a function parameter pack that has been
+/// Represents a reference to a function parameter pack that has been
 /// substituted but not yet expanded.
 ///
 /// When a pack expansion contains multiple parameter packs at different levels,
@@ -3965,13 +4305,13 @@
   friend class ASTStmtReader;
   friend TrailingObjects;
 
-  /// \brief The function parameter pack which was referenced.
+  /// The function parameter pack which was referenced.
   ParmVarDecl *ParamPack;
 
-  /// \brief The location of the function parameter pack reference.
+  /// The location of the function parameter pack reference.
   SourceLocation NameLoc;
 
-  /// \brief The number of expansions of this pack.
+  /// The number of expansions of this pack.
   unsigned NumParameters;
 
   FunctionParmPackExpr(QualType T, ParmVarDecl *ParamPack,
@@ -3986,26 +4326,34 @@
   static FunctionParmPackExpr *CreateEmpty(const ASTContext &Context,
                                            unsigned NumParams);
 
-  /// \brief Get the parameter pack which this expression refers to.
+  /// Get the parameter pack which this expression refers to.
   ParmVarDecl *getParameterPack() const { return ParamPack; }
 
-  /// \brief Get the location of the parameter pack.
+  /// Get the location of the parameter pack.
   SourceLocation getParameterPackLocation() const { return NameLoc; }
 
-  /// \brief Iterators over the parameters which the parameter pack expanded
+  /// Iterators over the parameters which the parameter pack expanded
   /// into.
   using iterator = ParmVarDecl * const *;
   iterator begin() const { return getTrailingObjects<ParmVarDecl *>(); }
   iterator end() const { return begin() + NumParameters; }
 
-  /// \brief Get the number of parameters in this parameter pack.
+  /// Get the number of parameters in this parameter pack.
   unsigned getNumExpansions() const { return NumParameters; }
 
-  /// \brief Get an expansion of the parameter pack by index.
+  /// Get an expansion of the parameter pack by index.
   ParmVarDecl *getExpansion(unsigned I) const { return begin()[I]; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return NameLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return NameLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return NameLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == FunctionParmPackExprClass;
@@ -4016,7 +4364,7 @@
   }
 };
 
-/// \brief Represents a prvalue temporary that is written into memory so that
+/// Represents a prvalue temporary that is written into memory so that
 /// a reference can bind to it.
 ///
 /// Prvalue expressions are materialized when they need to have an address
@@ -4042,11 +4390,11 @@
   friend class ASTStmtWriter;
 
   struct ExtraState {
-    /// \brief The temporary-generating expression whose value will be
+    /// The temporary-generating expression whose value will be
     /// materialized.
     Stmt *Temporary;
 
-    /// \brief The declaration which lifetime-extended this reference, if any.
+    /// The declaration which lifetime-extended this reference, if any.
     /// Either a VarDecl, or (for a ctor-initializer) a FieldDecl.
     const ValueDecl *ExtendingDecl;
 
@@ -4075,11 +4423,11 @@
                               : State.get<ExtraState *>()->Temporary;
   }
 
-  /// \brief Retrieve the temporary-generating subexpression whose value will
+  /// Retrieve the temporary-generating subexpression whose value will
   /// be materialized into a glvalue.
   Expr *GetTemporaryExpr() const { return static_cast<Expr *>(getTemporary()); }
 
-  /// \brief Retrieve the storage duration for the materialized temporary.
+  /// Retrieve the storage duration for the materialized temporary.
   StorageDuration getStorageDuration() const {
     const ValueDecl *ExtendingDecl = getExtendingDecl();
     if (!ExtendingDecl)
@@ -4097,7 +4445,7 @@
     return cast<VarDecl>(ExtendingDecl)->getStorageDuration();
   }
 
-  /// \brief Get the declaration which triggered the lifetime-extension of this
+  /// Get the declaration which triggered the lifetime-extension of this
   /// temporary, if any.
   const ValueDecl *getExtendingDecl() const {
     return State.is<Stmt *>() ? nullptr
@@ -4110,18 +4458,26 @@
     return State.is<Stmt *>() ? 0 : State.get<ExtraState *>()->ManglingNumber;
   }
 
-  /// \brief Determine whether this materialized temporary is bound to an
+  /// Determine whether this materialized temporary is bound to an
   /// lvalue reference; otherwise, it's bound to an rvalue reference.
   bool isBoundToLvalueReference() const {
     return getValueKind() == VK_LValue;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getTemporary()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getTemporary()->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getTemporary()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getTemporary()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -4138,7 +4494,7 @@
   }
 };
 
-/// \brief Represents a folding of a pack over an operator.
+/// Represents a folding of a pack over an operator.
 ///
 /// This expression is always dependent and represents a pack expansion of the
 /// forms:
@@ -4191,13 +4547,17 @@
   SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
   BinaryOperatorKind getOperator() const { return Opcode; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return LParenLoc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return RParenLoc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
   }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CXXFoldExprClass;
@@ -4207,7 +4567,7 @@
   child_range children() { return child_range(SubExprs, SubExprs + 2); }
 };
 
-/// \brief Represents an expression that might suspend coroutine execution;
+/// Represents an expression that might suspend coroutine execution;
 /// either a co_await or co_yield expression.
 ///
 /// Evaluation of this expression first evaluates its 'ready' expression. If
@@ -4271,7 +4631,7 @@
     return static_cast<Expr*>(SubExprs[SubExpr::Common]);
   }
 
-  /// \brief getOpaqueValue - Return the opaque value placeholder.
+  /// getOpaqueValue - Return the opaque value placeholder.
   OpaqueValueExpr *getOpaqueValue() const { return OpaqueValue; }
 
   Expr *getReadyExpr() const {
@@ -4286,12 +4646,18 @@
     return static_cast<Expr*>(SubExprs[SubExpr::Resume]);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return KeywordLoc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getCommonExpr()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getCommonExpr()->getEndLoc();
   }
 
   child_range children() {
@@ -4304,7 +4670,7 @@
   }
 };
 
-/// \brief Represents a 'co_await' expression.
+/// Represents a 'co_await' expression.
 class CoawaitExpr : public CoroutineSuspendExpr {
   friend class ASTStmtReader;
 
@@ -4339,7 +4705,7 @@
   }
 };
 
-/// \brief Represents a 'co_await' expression while the type of the promise
+/// Represents a 'co_await' expression while the type of the promise
 /// is dependent.
 class DependentCoawaitExpr : public Expr {
   friend class ASTStmtReader;
@@ -4374,10 +4740,18 @@
 
   SourceLocation getKeywordLoc() const { return KeywordLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return KeywordLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getOperand()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getOperand()->getEndLoc();
   }
 
   child_range children() { return child_range(SubExprs, SubExprs + 2); }
@@ -4387,7 +4761,7 @@
   }
 };
 
-/// \brief Represents a 'co_yield' expression.
+/// Represents a 'co_yield' expression.
 class CoyieldExpr : public CoroutineSuspendExpr {
   friend class ASTStmtReader;
 
diff --git a/linux-x64/clang/include/clang/AST/ExprObjC.h b/linux-x64/clang/include/clang/AST/ExprObjC.h
index 6959349..d6fdac1 100644
--- a/linux-x64/clang/include/clang/AST/ExprObjC.h
+++ b/linux-x64/clang/include/clang/AST/ExprObjC.h
@@ -25,7 +25,6 @@
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Specifiers.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
@@ -36,6 +35,7 @@
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/TrailingObjects.h"
+#include "llvm/Support/VersionTuple.h"
 #include "llvm/Support/type_traits.h"
 #include <cassert>
 #include <cstddef>
@@ -67,8 +67,16 @@
   SourceLocation getAtLoc() const { return AtLoc; }
   void setAtLoc(SourceLocation L) { AtLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return String->getLocEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return String->getEndLoc(); }
 
   // Iterators
   child_range children() { return child_range(&String, &String+1); }
@@ -90,16 +98,24 @@
         Value(val), Loc(l) {}
   explicit ObjCBoolLiteralExpr(EmptyShell Empty)
       : Expr(ObjCBoolLiteralExprClass, Empty) {}
-    
+
   bool getValue() const { return Value; }
   void setValue(bool V) { Value = V; }
-    
-  SourceLocation getLocStart() const LLVM_READONLY { return Loc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Loc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
 
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
-    
+
   // Iterators
   child_range children() {
     return child_range(child_iterator(), child_iterator());
@@ -124,30 +140,38 @@
 
   ObjCBoxedExpr(Expr *E, QualType T, ObjCMethodDecl *method,
                      SourceRange R)
-      : Expr(ObjCBoxedExprClass, T, VK_RValue, OK_Ordinary, 
-             E->isTypeDependent(), E->isValueDependent(), 
+      : Expr(ObjCBoxedExprClass, T, VK_RValue, OK_Ordinary,
+             E->isTypeDependent(), E->isValueDependent(),
              E->isInstantiationDependent(),
-             E->containsUnexpandedParameterPack()), 
+             E->containsUnexpandedParameterPack()),
         SubExpr(E), BoxingMethod(method), Range(R) {}
   explicit ObjCBoxedExpr(EmptyShell Empty)
       : Expr(ObjCBoxedExprClass, Empty) {}
-  
+
   Expr *getSubExpr() { return cast<Expr>(SubExpr); }
   const Expr *getSubExpr() const { return cast<Expr>(SubExpr); }
-  
+
   ObjCMethodDecl *getBoxingMethod() const {
-    return BoxingMethod; 
+    return BoxingMethod;
   }
-  
+
   SourceLocation getAtLoc() const { return Range.getBegin(); }
-  
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
   SourceRange getSourceRange() const LLVM_READONLY {
     return Range;
   }
-  
+
   // Iterators
   child_range children() { return child_range(&SubExpr, &SubExpr+1); }
 
@@ -194,21 +218,29 @@
   static ObjCArrayLiteral *CreateEmpty(const ASTContext &C,
                                        unsigned NumElements);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
-  /// \brief Retrieve elements of array of literals.
+  /// Retrieve elements of array of literals.
   Expr **getElements() { return getTrailingObjects<Expr *>(); }
 
-  /// \brief Retrieve elements of array of literals.
+  /// Retrieve elements of array of literals.
   const Expr * const *getElements() const {
     return getTrailingObjects<Expr *>();
   }
 
   /// getNumElements - Return number of elements of objective-c array literal.
   unsigned getNumElements() const { return NumElements; }
-    
+
   /// getElement - Return the Element at the specified index.
   Expr *getElement(unsigned Index) {
     assert((Index < NumElements) && "Arg access out of range!");
@@ -218,11 +250,11 @@
     assert((Index < NumElements) && "Arg access out of range!");
     return getElements()[Index];
   }
-    
+
   ObjCMethodDecl *getArrayWithObjectsMethod() const {
-    return ArrayWithObjectsMethod; 
+    return ArrayWithObjectsMethod;
   }
-    
+
   // Iterators
   child_range children() {
     return child_range(reinterpret_cast<Stmt **>(getElements()),
@@ -234,23 +266,23 @@
   }
 };
 
-/// \brief An element in an Objective-C dictionary literal.
+/// An element in an Objective-C dictionary literal.
 ///
 struct ObjCDictionaryElement {
-  /// \brief The key for the dictionary element.
+  /// The key for the dictionary element.
   Expr *Key;
-  
-  /// \brief The value of the dictionary element.
+
+  /// The value of the dictionary element.
   Expr *Value;
-  
-  /// \brief The location of the ellipsis, if this is a pack expansion.
+
+  /// The location of the ellipsis, if this is a pack expansion.
   SourceLocation EllipsisLoc;
-  
-  /// \brief The number of elements this pack expansion will expand to, if
+
+  /// The number of elements this pack expansion will expand to, if
   /// this is a pack expansion and is known.
   Optional<unsigned> NumExpansions;
 
-  /// \brief Determines whether this dictionary element is a pack expansion.
+  /// Determines whether this dictionary element is a pack expansion.
   bool isPackExpansion() const { return EllipsisLoc.isValid(); }
 };
 
@@ -264,21 +296,21 @@
 
 namespace clang {
 
-/// \brief Internal struct for storing Key/value pair.
+/// Internal struct for storing Key/value pair.
 struct ObjCDictionaryLiteral_KeyValuePair {
   Expr *Key;
   Expr *Value;
 };
 
-/// \brief Internal struct to describes an element that is a pack
+/// Internal struct to describes an element that is a pack
 /// expansion, used if any of the elements in the dictionary literal
 /// are pack expansions.
 struct ObjCDictionaryLiteral_ExpansionData {
-  /// \brief The location of the ellipsis, if this element is a pack
+  /// The location of the ellipsis, if this element is a pack
   /// expansion.
   SourceLocation EllipsisLoc;
 
-  /// \brief If non-zero, the number of elements that this pack
+  /// If non-zero, the number of elements that this pack
   /// expansion will expand to (+1).
   unsigned NumExpansionsPlusOne;
 };
@@ -290,10 +322,10 @@
       private llvm::TrailingObjects<ObjCDictionaryLiteral,
                                     ObjCDictionaryLiteral_KeyValuePair,
                                     ObjCDictionaryLiteral_ExpansionData> {
-  /// \brief The number of elements in this dictionary literal.
+  /// The number of elements in this dictionary literal.
   unsigned NumElements : 31;
 
-  /// \brief Determine whether this dictionary literal has any pack expansions.
+  /// Determine whether this dictionary literal has any pack expansions.
   ///
   /// If the dictionary literal has pack expansions, then there will
   /// be an array of pack expansion data following the array of
@@ -308,7 +340,7 @@
   using KeyValuePair = ObjCDictionaryLiteral_KeyValuePair;
   using ExpansionData = ObjCDictionaryLiteral_ExpansionData;
 
-  ObjCDictionaryLiteral(ArrayRef<ObjCDictionaryElement> VK, 
+  ObjCDictionaryLiteral(ArrayRef<ObjCDictionaryElement> VK,
                         bool HasPackExpansions,
                         QualType T, ObjCMethodDecl *method,
                         SourceRange SR);
@@ -328,16 +360,16 @@
   friend TrailingObjects;
 
   static ObjCDictionaryLiteral *Create(const ASTContext &C,
-                                       ArrayRef<ObjCDictionaryElement> VK, 
+                                       ArrayRef<ObjCDictionaryElement> VK,
                                        bool HasPackExpansions,
                                        QualType T, ObjCMethodDecl *method,
                                        SourceRange SR);
-  
+
   static ObjCDictionaryLiteral *CreateEmpty(const ASTContext &C,
                                             unsigned NumElements,
                                             bool HasPackExpansions);
-  
-  /// getNumElements - Return number of elements of objective-c dictionary 
+
+  /// getNumElements - Return number of elements of objective-c dictionary
   /// literal.
   unsigned getNumElements() const { return NumElements; }
 
@@ -354,13 +386,21 @@
     }
     return Result;
   }
-    
+
   ObjCMethodDecl *getDictWithObjectsMethod() const {
     return DictWithObjectsMethod;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
   // Iterators
@@ -394,7 +434,7 @@
              EncodedType->getType()->isDependentType(),
              EncodedType->getType()->isDependentType(),
              EncodedType->getType()->isInstantiationDependentType(),
-             EncodedType->getType()->containsUnexpandedParameterPack()), 
+             EncodedType->getType()->containsUnexpandedParameterPack()),
         EncodedType(EncodedType), AtLoc(at), RParenLoc(rp) {}
 
   explicit ObjCEncodeExpr(EmptyShell Empty) : Expr(ObjCEncodeExprClass, Empty){}
@@ -408,12 +448,20 @@
 
   TypeSourceInfo *getEncodedTypeSourceInfo() const { return EncodedType; }
 
-  void setEncodedTypeSourceInfo(TypeSourceInfo *EncType) { 
-    EncodedType = EncType; 
+  void setEncodedTypeSourceInfo(TypeSourceInfo *EncType) {
+    EncodedType = EncType;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   // Iterators
   child_range children() {
@@ -447,8 +495,16 @@
   void setAtLoc(SourceLocation L) { AtLoc = L; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   /// getNumArgs - Return the number of actual arguments to this call.
   unsigned getNumArgs() const { return SelName.getNumArgs(); }
@@ -496,8 +552,16 @@
   void setAtLoc(SourceLocation L) { AtLoc = L; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   // Iterators
   child_range children() {
@@ -531,9 +595,9 @@
                   bool arrow = false, bool freeIvar = false)
       : Expr(ObjCIvarRefExprClass, t, VK_LValue,
              d->isBitField() ? OK_BitField : OK_Ordinary,
-             /*TypeDependent=*/false, base->isValueDependent(), 
+             /*TypeDependent=*/false, base->isValueDependent(),
              base->isInstantiationDependent(),
-             base->containsUnexpandedParameterPack()), 
+             base->containsUnexpandedParameterPack()),
         D(d), Base(base), Loc(l), OpLoc(oploc), IsArrow(arrow),
         IsFreeIvar(freeIvar) {}
 
@@ -556,11 +620,19 @@
   SourceLocation getLocation() const { return Loc; }
   void setLocation(SourceLocation L) { Loc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return isFreeIvar() ? Loc : getBase()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Loc; }
-  
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return isFreeIvar() ? Loc : getBase()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Loc; }
+
   SourceLocation getOpLoc() const { return OpLoc; }
   void setOpLoc(SourceLocation L) { OpLoc = L; }
 
@@ -582,7 +654,7 @@
   /// the pointer is an ObjCPropertyDecl and Setter is always null.
   llvm::PointerIntPair<NamedDecl *, 1, bool> PropertyOrGetter;
 
-  /// \brief Indicates whether the property reference will result in a message
+  /// Indicates whether the property reference will result in a message
   /// to the getter, the setter, or both.
   /// This applies to both implicit and explicit property references.
   enum MethodRefFlags {
@@ -591,7 +663,7 @@
     MethodRef_Setter = 0x2
   };
 
-  /// \brief Contains the Setter method pointer and MethodRefFlags bit flags.
+  /// Contains the Setter method pointer and MethodRefFlags bit flags.
   llvm::PointerIntPair<ObjCMethodDecl *, 2, unsigned> SetterAndMethodRefFlags;
 
   // FIXME: Maybe we should store the property identifier here,
@@ -600,13 +672,13 @@
   // transformation is lossy on the first character).
 
   SourceLocation IdLoc;
-  
-  /// \brief When the receiver in property access is 'super', this is
+
+  /// When the receiver in property access is 'super', this is
   /// the location of the 'super' keyword.  When it's an interface,
   /// this is that interface.
   SourceLocation ReceiverLoc;
   llvm::PointerUnion3<Stmt *, const Type *, ObjCInterfaceDecl *> Receiver;
-  
+
 public:
   ObjCPropertyRefExpr(ObjCPropertyDecl *PD, QualType t,
                       ExprValueKind VK, ExprObjectKind OK,
@@ -618,7 +690,7 @@
         PropertyOrGetter(PD, false), IdLoc(l), Receiver(base) {
     assert(t->isSpecificPlaceholderType(BuiltinType::PseudoObject));
   }
-  
+
   ObjCPropertyRefExpr(ObjCPropertyDecl *PD, QualType t,
                       ExprValueKind VK, ExprObjectKind OK,
                       SourceLocation l, SourceLocation sl, QualType st)
@@ -694,14 +766,14 @@
     return getExplicitProperty()->getSetterName();
   }
 
-  /// \brief True if the property reference will result in a message to the
+  /// True if the property reference will result in a message to the
   /// getter.
   /// This applies to both implicit and explicit property references.
   bool isMessagingGetter() const {
     return SetterAndMethodRefFlags.getInt() & MethodRef_Getter;
   }
 
-  /// \brief True if the property reference will result in a message to the
+  /// True if the property reference will result in a message to the
   /// setter.
   /// This applies to both implicit and explicit property references.
   bool isMessagingSetter() const {
@@ -716,19 +788,19 @@
     setMethodRefFlag(MethodRef_Setter, val);
   }
 
-  const Expr *getBase() const { 
-    return cast<Expr>(Receiver.get<Stmt*>()); 
+  const Expr *getBase() const {
+    return cast<Expr>(Receiver.get<Stmt*>());
   }
-  Expr *getBase() { 
-    return cast<Expr>(Receiver.get<Stmt*>()); 
+  Expr *getBase() {
+    return cast<Expr>(Receiver.get<Stmt*>());
   }
 
   SourceLocation getLocation() const { return IdLoc; }
-  
+
   SourceLocation getReceiverLocation() const { return ReceiverLoc; }
 
-  QualType getSuperReceiverType() const { 
-    return QualType(Receiver.get<const Type*>(), 0); 
+  QualType getSuperReceiverType() const {
+    return QualType(Receiver.get<const Type*>(), 0);
   }
 
   ObjCInterfaceDecl *getClassReceiver() const {
@@ -742,11 +814,20 @@
   /// Determine the type of the base, regardless of the kind of receiver.
   QualType getReceiverType(const ASTContext &ctx) const;
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return isObjectReceiver() ? getBase()->getLocStart() :getReceiverLocation();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return isObjectReceiver() ? getBase()->getBeginLoc()
+                              : getReceiverLocation();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return IdLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return IdLoc; }
 
   // Iterators
   child_range children() {
@@ -796,7 +877,7 @@
     SetterAndMethodRefFlags.setInt(f);
   }
 };
-  
+
 /// ObjCSubscriptRefExpr - used for array and dictionary subscripting.
 /// array[4] = array[3]; dictionary[key] = dictionary[alt_key];
 class ObjCSubscriptRefExpr : public Expr {
@@ -808,20 +889,20 @@
   // an objective-c object pointer expression.
   enum { BASE, KEY, END_EXPR };
   Stmt* SubExprs[END_EXPR];
-  
+
   ObjCMethodDecl *GetAtIndexMethodDecl;
-  
+
   // For immutable objects this is null. When ObjCSubscriptRefExpr is to read
   // an indexed object this is null too.
   ObjCMethodDecl *SetAtIndexMethodDecl;
-  
+
 public:
   ObjCSubscriptRefExpr(Expr *base, Expr *key, QualType T,
                        ExprValueKind VK, ExprObjectKind OK,
                        ObjCMethodDecl *getMethod,
                        ObjCMethodDecl *setMethod, SourceLocation RB)
-      : Expr(ObjCSubscriptRefExprClass, T, VK, OK, 
-             base->isTypeDependent() || key->isTypeDependent(), 
+      : Expr(ObjCSubscriptRefExprClass, T, VK, OK,
+             base->isTypeDependent() || key->isTypeDependent(),
              base->isValueDependent() || key->isValueDependent(),
              (base->isInstantiationDependent() ||
               key->isInstantiationDependent()),
@@ -834,34 +915,42 @@
 
   explicit ObjCSubscriptRefExpr(EmptyShell Empty)
       : Expr(ObjCSubscriptRefExprClass, Empty) {}
-  
+
   SourceLocation getRBracket() const { return RBracket; }
   void setRBracket(SourceLocation RB) { RBracket = RB; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return SubExprs[BASE]->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return SubExprs[BASE]->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBracket; }
-  
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBracket; }
+
   Expr *getBaseExpr() const { return cast<Expr>(SubExprs[BASE]); }
   void setBaseExpr(Stmt *S) { SubExprs[BASE] = S; }
-  
+
   Expr *getKeyExpr() const { return cast<Expr>(SubExprs[KEY]); }
   void setKeyExpr(Stmt *S) { SubExprs[KEY] = S; }
-  
+
   ObjCMethodDecl *getAtIndexMethodDecl() const {
     return GetAtIndexMethodDecl;
   }
- 
+
   ObjCMethodDecl *setAtIndexMethodDecl() const {
     return SetAtIndexMethodDecl;
   }
-  
+
   bool isArraySubscriptRefExpr() const {
     return getKeyExpr()->getType()->isIntegralOrEnumerationType();
   }
-  
+
   child_range children() {
     return child_range(SubExprs, SubExprs+END_EXPR);
   }
@@ -874,7 +963,7 @@
   friend class ASTStmtReader;
 };
 
-/// \brief An expression that sends a message to the given Objective-C
+/// An expression that sends a message to the given Objective-C
 /// object or class.
 ///
 /// The following contains two message send expressions:
@@ -903,47 +992,47 @@
 class ObjCMessageExpr final
     : public Expr,
       private llvm::TrailingObjects<ObjCMessageExpr, void *, SourceLocation> {
-  /// \brief Stores either the selector that this message is sending
+  /// Stores either the selector that this message is sending
   /// to (when \c HasMethod is zero) or an \c ObjCMethodDecl pointer
   /// referring to the method that we type-checked against.
   uintptr_t SelectorOrMethod = 0;
 
   enum { NumArgsBitWidth = 16 };
 
-  /// \brief The number of arguments in the message send, not
+  /// The number of arguments in the message send, not
   /// including the receiver.
   unsigned NumArgs : NumArgsBitWidth;
-  
-  /// \brief The kind of message send this is, which is one of the
+
+  /// The kind of message send this is, which is one of the
   /// ReceiverKind values.
   ///
   /// We pad this out to a byte to avoid excessive masking and shifting.
   unsigned Kind : 8;
 
-  /// \brief Whether we have an actual method prototype in \c
+  /// Whether we have an actual method prototype in \c
   /// SelectorOrMethod.
   ///
   /// When non-zero, we have a method declaration; otherwise, we just
   /// have a selector.
   unsigned HasMethod : 1;
 
-  /// \brief Whether this message send is a "delegate init call",
+  /// Whether this message send is a "delegate init call",
   /// i.e. a call of an init method on self from within an init method.
   unsigned IsDelegateInitCall : 1;
 
-  /// \brief Whether this message send was implicitly generated by
+  /// Whether this message send was implicitly generated by
   /// the implementation rather than explicitly written by the user.
   unsigned IsImplicit : 1;
 
-  /// \brief Whether the locations of the selector identifiers are in a
+  /// Whether the locations of the selector identifiers are in a
   /// "standard" position, a enum SelectorLocationsKind.
   unsigned SelLocsKind : 2;
 
-  /// \brief When the message expression is a send to 'super', this is
+  /// When the message expression is a send to 'super', this is
   /// the location of the 'super' keyword.
   SourceLocation SuperLoc;
 
-  /// \brief The source locations of the open and close square
+  /// The source locations of the open and close square
   /// brackets ('[' and ']', respectively).
   SourceLocation LBracLoc, RBracLoc;
 
@@ -958,7 +1047,7 @@
                   SourceLocation SuperLoc,
                   bool IsInstanceSuper,
                   QualType SuperType,
-                  Selector Sel, 
+                  Selector Sel,
                   ArrayRef<SourceLocation> SelLocs,
                   SelectorLocationsKind SelLocsK,
                   ObjCMethodDecl *Method,
@@ -968,7 +1057,7 @@
   ObjCMessageExpr(QualType T, ExprValueKind VK,
                   SourceLocation LBracLoc,
                   TypeSourceInfo *Receiver,
-                  Selector Sel, 
+                  Selector Sel,
                   ArrayRef<SourceLocation> SelLocs,
                   SelectorLocationsKind SelLocsK,
                   ObjCMethodDecl *Method,
@@ -978,7 +1067,7 @@
   ObjCMessageExpr(QualType T, ExprValueKind VK,
                   SourceLocation LBracLoc,
                   Expr *Receiver,
-                  Selector Sel, 
+                  Selector Sel,
                   ArrayRef<SourceLocation> SelLocs,
                   SelectorLocationsKind SelLocsK,
                   ObjCMethodDecl *Method,
@@ -997,10 +1086,10 @@
                           ArrayRef<SourceLocation> SelLocs,
                           SelectorLocationsKind SelLocsK);
 
-  /// \brief Retrieve the pointer value of the message receiver.
+  /// Retrieve the pointer value of the message receiver.
   void *getReceiverPointer() const { return *getTrailingObjects<void *>(); }
 
-  /// \brief Set the pointer value of the message receiver.
+  /// Set the pointer value of the message receiver.
   void setReceiverPointer(void *Value) {
     *getTrailingObjects<void *>() = Value;
   }
@@ -1013,7 +1102,7 @@
     return getSelLocsKind() != SelLoc_NonStandard;
   }
 
-  /// \brief Get a pointer to the stored selector identifiers locations array.
+  /// Get a pointer to the stored selector identifiers locations array.
   /// No locations will be stored if HasStandardSelLocs is true.
   SourceLocation *getStoredSelLocs() {
     return getTrailingObjects<SourceLocation>();
@@ -1022,7 +1111,7 @@
     return getTrailingObjects<SourceLocation>();
   }
 
-  /// \brief Get the number of stored selector identifiers locations.
+  /// Get the number of stored selector identifiers locations.
   /// No locations will be stored if HasStandardSelLocs is true.
   unsigned getNumStoredSelLocs() const {
     if (hasStandardSelLocs())
@@ -1045,22 +1134,22 @@
   friend class ASTStmtWriter;
   friend TrailingObjects;
 
-  /// \brief The kind of receiver this message is sending to.
+  /// The kind of receiver this message is sending to.
   enum ReceiverKind {
-    /// \brief The receiver is a class.
+    /// The receiver is a class.
     Class = 0,
 
-    /// \brief The receiver is an object instance.
+    /// The receiver is an object instance.
     Instance,
 
-    /// \brief The receiver is a superclass.
+    /// The receiver is a superclass.
     SuperClass,
 
-    /// \brief The receiver is the instance of the superclass object.
+    /// The receiver is the instance of the superclass object.
     SuperInstance
   };
 
-  /// \brief Create a message send to super.
+  /// Create a message send to super.
   ///
   /// \param Context The ASTContext in which this expression will be created.
   ///
@@ -1091,14 +1180,14 @@
                                  SourceLocation SuperLoc,
                                  bool IsInstanceSuper,
                                  QualType SuperType,
-                                 Selector Sel, 
+                                 Selector Sel,
                                  ArrayRef<SourceLocation> SelLocs,
                                  ObjCMethodDecl *Method,
                                  ArrayRef<Expr *> Args,
                                  SourceLocation RBracLoc,
                                  bool isImplicit);
 
-  /// \brief Create a class message send.
+  /// Create a class message send.
   ///
   /// \param Context The ASTContext in which this expression will be created.
   ///
@@ -1125,14 +1214,14 @@
                                  ExprValueKind VK,
                                  SourceLocation LBracLoc,
                                  TypeSourceInfo *Receiver,
-                                 Selector Sel, 
+                                 Selector Sel,
                                  ArrayRef<SourceLocation> SelLocs,
                                  ObjCMethodDecl *Method,
                                  ArrayRef<Expr *> Args,
                                  SourceLocation RBracLoc,
                                  bool isImplicit);
 
-  /// \brief Create an instance message send.
+  /// Create an instance message send.
   ///
   /// \param Context The ASTContext in which this expression will be created.
   ///
@@ -1159,14 +1248,14 @@
                                  ExprValueKind VK,
                                  SourceLocation LBracLoc,
                                  Expr *Receiver,
-                                 Selector Sel, 
+                                 Selector Sel,
                                  ArrayRef<SourceLocation> SeLocs,
                                  ObjCMethodDecl *Method,
                                  ArrayRef<Expr *> Args,
                                  SourceLocation RBracLoc,
                                  bool isImplicit);
 
-  /// \brief Create an empty Objective-C message expression, to be
+  /// Create an empty Objective-C message expression, to be
   /// filled in by subsequent calls.
   ///
   /// \param Context The context in which the message send will be created.
@@ -1177,31 +1266,31 @@
                                       unsigned NumArgs,
                                       unsigned NumStoredSelLocs);
 
-  /// \brief Indicates whether the message send was implicitly
+  /// Indicates whether the message send was implicitly
   /// generated by the implementation. If false, it was written explicitly
   /// in the source code.
   bool isImplicit() const { return IsImplicit; }
 
-  /// \brief Determine the kind of receiver that this message is being
+  /// Determine the kind of receiver that this message is being
   /// sent to.
   ReceiverKind getReceiverKind() const { return (ReceiverKind)Kind; }
 
-  /// \brief Source range of the receiver.
+  /// Source range of the receiver.
   SourceRange getReceiverRange() const;
 
-  /// \brief Determine whether this is an instance message to either a
+  /// Determine whether this is an instance message to either a
   /// computed object or to super.
   bool isInstanceMessage() const {
     return getReceiverKind() == Instance || getReceiverKind() == SuperInstance;
   }
 
-  /// \brief Determine whether this is an class message to either a
+  /// Determine whether this is an class message to either a
   /// specified class or to super.
   bool isClassMessage() const {
     return getReceiverKind() == Class || getReceiverKind() == SuperClass;
   }
 
-  /// \brief Returns the object expression (receiver) for an instance message,
+  /// Returns the object expression (receiver) for an instance message,
   /// or null for a message that is not an instance message.
   Expr *getInstanceReceiver() {
     if (getReceiverKind() == Instance)
@@ -1213,23 +1302,23 @@
     return const_cast<ObjCMessageExpr*>(this)->getInstanceReceiver();
   }
 
-  /// \brief Turn this message send into an instance message that
+  /// Turn this message send into an instance message that
   /// computes the receiver object with the given expression.
-  void setInstanceReceiver(Expr *rec) { 
+  void setInstanceReceiver(Expr *rec) {
     Kind = Instance;
     setReceiverPointer(rec);
   }
-  
-  /// \brief Returns the type of a class message send, or NULL if the
+
+  /// Returns the type of a class message send, or NULL if the
   /// message is not a class message.
-  QualType getClassReceiver() const { 
+  QualType getClassReceiver() const {
     if (TypeSourceInfo *TSInfo = getClassReceiverTypeInfo())
       return TSInfo->getType();
 
     return {};
   }
 
-  /// \brief Returns a type-source information of a class message
+  /// Returns a type-source information of a class message
   /// send, or nullptr if the message is not a class message.
   TypeSourceInfo *getClassReceiverTypeInfo() const {
     if (getReceiverKind() == Class)
@@ -1242,16 +1331,16 @@
     setReceiverPointer(TSInfo);
   }
 
-  /// \brief Retrieve the location of the 'super' keyword for a class
+  /// Retrieve the location of the 'super' keyword for a class
   /// or instance message to 'super', otherwise an invalid source location.
-  SourceLocation getSuperLoc() const { 
+  SourceLocation getSuperLoc() const {
     if (getReceiverKind() == SuperInstance || getReceiverKind() == SuperClass)
       return SuperLoc;
 
     return SourceLocation();
   }
 
-  /// \brief Retrieve the receiver type to which this message is being directed.
+  /// Retrieve the receiver type to which this message is being directed.
   ///
   /// This routine cross-cuts all of the different kinds of message
   /// sends to determine what the underlying (statically known) type
@@ -1262,7 +1351,7 @@
   /// \returns The type of the receiver.
   QualType getReceiverType() const;
 
-  /// \brief Retrieve the Objective-C interface to which this message
+  /// Retrieve the Objective-C interface to which this message
   /// is being directed, if known.
   ///
   /// This routine cross-cuts all of the different kinds of message
@@ -1274,7 +1363,7 @@
   /// \returns The Objective-C interface if known, otherwise nullptr.
   ObjCInterfaceDecl *getReceiverInterface() const;
 
-  /// \brief Retrieve the type referred to by 'super'. 
+  /// Retrieve the type referred to by 'super'.
   ///
   /// The returned type will either be an ObjCInterfaceType (for an
   /// class message to super) or an ObjCObjectPointerType that refers
@@ -1294,26 +1383,26 @@
 
   Selector getSelector() const;
 
-  void setSelector(Selector S) { 
+  void setSelector(Selector S) {
     HasMethod = false;
     SelectorOrMethod = reinterpret_cast<uintptr_t>(S.getAsOpaquePtr());
   }
 
-  const ObjCMethodDecl *getMethodDecl() const { 
+  const ObjCMethodDecl *getMethodDecl() const {
     if (HasMethod)
       return reinterpret_cast<const ObjCMethodDecl *>(SelectorOrMethod);
 
     return nullptr;
   }
 
-  ObjCMethodDecl *getMethodDecl() { 
+  ObjCMethodDecl *getMethodDecl() {
     if (HasMethod)
       return reinterpret_cast<ObjCMethodDecl *>(SelectorOrMethod);
 
     return nullptr;
   }
 
-  void setMethodDecl(ObjCMethodDecl *MD) { 
+  void setMethodDecl(ObjCMethodDecl *MD) {
     HasMethod = true;
     SelectorOrMethod = reinterpret_cast<uintptr_t>(MD);
   }
@@ -1323,11 +1412,11 @@
     return getSelector().getMethodFamily();
   }
 
-  /// \brief Return the number of actual arguments in this message,
+  /// Return the number of actual arguments in this message,
   /// not counting the receiver.
   unsigned getNumArgs() const { return NumArgs; }
 
-  /// \brief Retrieve the arguments to this message, not including the
+  /// Retrieve the arguments to this message, not including the
   /// receiver.
   Expr **getArgs() {
     return reinterpret_cast<Expr **>(getTrailingObjects<void *>() + 1);
@@ -1364,7 +1453,7 @@
 
   SourceLocation getSelectorStartLoc() const {
     if (isImplicit())
-      return getLocStart();
+      return getBeginLoc();
     return getSelectorLoc(0);
   }
 
@@ -1395,8 +1484,16 @@
     RBracLoc = R.getEnd();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LBracLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBracLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LBracLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBracLoc; }
 
   // Iterators
   child_range children();
@@ -1414,16 +1511,16 @@
 
   arg_iterator arg_begin() { return reinterpret_cast<Stmt **>(getArgs()); }
 
-  arg_iterator arg_end()   { 
-    return reinterpret_cast<Stmt **>(getArgs() + NumArgs); 
+  arg_iterator arg_end()   {
+    return reinterpret_cast<Stmt **>(getArgs() + NumArgs);
   }
 
-  const_arg_iterator arg_begin() const { 
-    return reinterpret_cast<Stmt const * const*>(getArgs()); 
+  const_arg_iterator arg_begin() const {
+    return reinterpret_cast<Stmt const * const*>(getArgs());
   }
 
-  const_arg_iterator arg_end() const { 
-    return reinterpret_cast<Stmt const * const*>(getArgs() + NumArgs); 
+  const_arg_iterator arg_end() const {
+    return reinterpret_cast<Stmt const * const*>(getArgs() + NumArgs);
   }
 
   static bool classof(const Stmt *T) {
@@ -1439,7 +1536,7 @@
 
   /// IsaMemberLoc - This is the location of the 'isa'.
   SourceLocation IsaMemberLoc;
-  
+
   /// OpLoc - This is the location of '.' or '->'
   SourceLocation OpLoc;
 
@@ -1455,7 +1552,7 @@
              /*ContainsUnexpandedParameterPack=*/false),
         Base(base), IsaMemberLoc(l), OpLoc(oploc), IsArrow(isarrow) {}
 
-  /// \brief Build an empty expression.
+  /// Build an empty expression.
   explicit ObjCIsaExpr(EmptyShell Empty) : Expr(ObjCIsaExprClass, Empty) {}
 
   void setBase(Expr *E) { Base = E; }
@@ -1468,19 +1565,27 @@
   /// location of 'F'.
   SourceLocation getIsaMemberLoc() const { return IsaMemberLoc; }
   void setIsaMemberLoc(SourceLocation L) { IsaMemberLoc = L; }
-  
+
   SourceLocation getOpLoc() const { return OpLoc; }
   void setOpLoc(SourceLocation L) { OpLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getBase()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getBase()->getBeginLoc();
+  }
+
   SourceLocation getBaseLocEnd() const LLVM_READONLY {
-    return getBase()->getLocEnd();
+    return getBase()->getEndLoc();
   }
-  
-  SourceLocation getLocEnd() const LLVM_READONLY { return IsaMemberLoc; }
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return IsaMemberLoc; }
 
   SourceLocation getExprLoc() const LLVM_READONLY { return IsaMemberLoc; }
 
@@ -1546,13 +1651,23 @@
   /// copy-restore.  If false, the temporary will be zero-initialized.
   bool shouldCopy() const { return ObjCIndirectCopyRestoreExprBits.ShouldCopy; }
 
-  child_range children() { return child_range(&Operand, &Operand+1); }  
+  child_range children() { return child_range(&Operand, &Operand+1); }
 
   // Source locations are determined by the subexpression.
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return Operand->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Operand->getLocEnd();}
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return Operand->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return Operand->getEndLoc();
+  }
 
   SourceLocation getExprLoc() const LLVM_READONLY {
     return getSubExpr()->getExprLoc();
@@ -1563,7 +1678,7 @@
   }
 };
 
-/// \brief An Objective-C "bridged" cast expression, which casts between
+/// An Objective-C "bridged" cast expression, which casts between
 /// Objective-C pointers and C pointers, transferring ownership in the process.
 ///
 /// \code
@@ -1571,7 +1686,8 @@
 /// \endcode
 class ObjCBridgedCastExpr final
     : public ExplicitCastExpr,
-      private llvm::TrailingObjects<ObjCBridgedCastExpr, CXXBaseSpecifier *> {
+      private llvm::TrailingObjects<
+          ObjCBridgedCastExpr, CastExpr::BasePathSizeTy, CXXBaseSpecifier *> {
   friend class ASTStmtReader;
   friend class ASTStmtWriter;
   friend class CastExpr;
@@ -1581,6 +1697,10 @@
   SourceLocation BridgeKeywordLoc;
   unsigned Kind : 2;
 
+  size_t numTrailingObjects(OverloadToken<CastExpr::BasePathSizeTy>) const {
+    return path_empty() ? 0 : 1;
+  }
+
 public:
   ObjCBridgedCastExpr(SourceLocation LParenLoc, ObjCBridgeCastKind Kind,
                       CastKind CK, SourceLocation BridgeKeywordLoc,
@@ -1588,36 +1708,44 @@
       : ExplicitCastExpr(ObjCBridgedCastExprClass, TSInfo->getType(), VK_RValue,
                          CK, Operand, 0, TSInfo),
         LParenLoc(LParenLoc), BridgeKeywordLoc(BridgeKeywordLoc), Kind(Kind) {}
-  
-  /// \brief Construct an empty Objective-C bridged cast.
+
+  /// Construct an empty Objective-C bridged cast.
   explicit ObjCBridgedCastExpr(EmptyShell Shell)
       : ExplicitCastExpr(ObjCBridgedCastExprClass, Shell, 0) {}
 
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Determine which kind of bridge is being performed via this cast.
-  ObjCBridgeCastKind getBridgeKind() const { 
-    return static_cast<ObjCBridgeCastKind>(Kind); 
+  /// Determine which kind of bridge is being performed via this cast.
+  ObjCBridgeCastKind getBridgeKind() const {
+    return static_cast<ObjCBridgeCastKind>(Kind);
   }
-  
-  /// \brief Retrieve the kind of bridge being performed as a string.
-  StringRef getBridgeKindName() const;
-  
-  /// \brief The location of the bridge keyword.
-  SourceLocation getBridgeKeywordLoc() const { return BridgeKeywordLoc; }
-  
-  SourceLocation getLocStart() const LLVM_READONLY { return LParenLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getSubExpr()->getLocEnd();
+  /// Retrieve the kind of bridge being performed as a string.
+  StringRef getBridgeKindName() const;
+
+  /// The location of the bridge keyword.
+  SourceLocation getBridgeKeywordLoc() const { return BridgeKeywordLoc; }
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LParenLoc; }
+
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getSubExpr()->getEndLoc();
+  }
+
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCBridgedCastExprClass;
   }
 };
 
-/// \brief A runtime availability query.
+/// A runtime availability query.
 ///
 /// There are 2 ways to spell this node:
 /// \code
@@ -1646,11 +1774,19 @@
   explicit ObjCAvailabilityCheckExpr(EmptyShell Shell)
       : Expr(ObjCAvailabilityCheckExprClass, Shell) {}
 
-  SourceLocation getLocStart() const { return AtLoc; }
-  SourceLocation getLocEnd() const { return RParen; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const { return RParen; }
   SourceRange getSourceRange() const { return {AtLoc, RParen}; }
 
-  /// \brief This may be '*', in which case this should fold to true.
+  /// This may be '*', in which case this should fold to true.
   bool hasVersion() const { return !VersionToCheck.empty(); }
   VersionTuple getVersion() { return VersionToCheck; }
 
diff --git a/linux-x64/clang/include/clang/AST/ExprOpenMP.h b/linux-x64/clang/include/clang/AST/ExprOpenMP.h
index a4ef93b..7dba527 100644
--- a/linux-x64/clang/include/clang/AST/ExprOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/ExprOpenMP.h
@@ -17,7 +17,7 @@
 #include "clang/AST/Expr.h"
 
 namespace clang {
-/// \brief OpenMP 4.0 [2.4, Array Sections].
+/// OpenMP 4.0 [2.4, Array Sections].
 /// To specify an array section in an OpenMP construct, array subscript
 /// expressions are extended with the following syntax:
 /// \code
@@ -72,39 +72,47 @@
     SubExprs[LENGTH] = Length;
   }
 
-  /// \brief Create an empty array section expression.
+  /// Create an empty array section expression.
   explicit OMPArraySectionExpr(EmptyShell Shell)
       : Expr(OMPArraySectionExprClass, Shell) {}
 
   /// An array section can be written only as Base[LowerBound:Length].
 
-  /// \brief Get base of the array section.
+  /// Get base of the array section.
   Expr *getBase() { return cast<Expr>(SubExprs[BASE]); }
   const Expr *getBase() const { return cast<Expr>(SubExprs[BASE]); }
-  /// \brief Set base of the array section.
+  /// Set base of the array section.
   void setBase(Expr *E) { SubExprs[BASE] = E; }
 
-  /// \brief Return original type of the base expression for array section.
+  /// Return original type of the base expression for array section.
   static QualType getBaseOriginalType(const Expr *Base);
 
-  /// \brief Get lower bound of array section.
+  /// Get lower bound of array section.
   Expr *getLowerBound() { return cast_or_null<Expr>(SubExprs[LOWER_BOUND]); }
   const Expr *getLowerBound() const {
     return cast_or_null<Expr>(SubExprs[LOWER_BOUND]);
   }
-  /// \brief Set lower bound of the array section.
+  /// Set lower bound of the array section.
   void setLowerBound(Expr *E) { SubExprs[LOWER_BOUND] = E; }
 
-  /// \brief Get length of array section.
+  /// Get length of array section.
   Expr *getLength() { return cast_or_null<Expr>(SubExprs[LENGTH]); }
   const Expr *getLength() const { return cast_or_null<Expr>(SubExprs[LENGTH]); }
-  /// \brief Set length of the array section.
+  /// Set length of the array section.
   void setLength(Expr *E) { SubExprs[LENGTH] = E; }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getBase()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBracketLoc; }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getBase()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBracketLoc; }
 
   SourceLocation getColonLoc() const { return ColonLoc; }
   void setColonLoc(SourceLocation L) { ColonLoc = L; }
diff --git a/linux-x64/clang/include/clang/AST/ExternalASTMerger.h b/linux-x64/clang/include/clang/AST/ExternalASTMerger.h
index 81492ae..7b01fa8 100644
--- a/linux-x64/clang/include/clang/AST/ExternalASTMerger.h
+++ b/linux-x64/clang/include/clang/AST/ExternalASTMerger.h
@@ -37,7 +37,7 @@
 ///   lookup.  In this case, Origins contains an entry overriding lookup and
 ///   specifying the correct pair of DeclContext/ASTContext.
 ///
-/// - The DeclContext of origin was determined by another ExterenalASTMerger. 
+/// - The DeclContext of origin was determined by another ExterenalASTMerger.
 ///   (This is possible when the source ASTContext for one of the Importers has
 ///   its own ExternalASTMerger).  The origin must be properly forwarded in this
 ///   case.
@@ -57,7 +57,7 @@
   typedef std::map<const DeclContext *, DCOrigin> OriginMap;
   typedef std::vector<std::unique_ptr<ASTImporter>> ImporterVector;
 private:
-  /// One importer exists for each source.  
+  /// One importer exists for each source.
   ImporterVector Importers;
   /// Overrides in case name lookup would return nothing or would return
   /// the wrong thing.
@@ -97,7 +97,7 @@
   /// Add a set of ASTContexts as possible origins.
   ///
   /// Usually the set will be initialized in the constructor, but long-lived
-  /// ExternalASTMergers may neeed to import from new sources (for example,
+  /// ExternalASTMergers may need to import from new sources (for example,
   /// newly-parsed source files).
   ///
   /// Ensures that Importers does not gain duplicate entries as a result.
@@ -106,7 +106,7 @@
   /// Remove a set of ASTContexts as possible origins.
   ///
   /// Sometimes an origin goes away (for example, if a source file gets
-  /// superseded by a newer version). 
+  /// superseded by a newer version).
   ///
   /// The caller is responsible for ensuring that this doesn't leave
   /// DeclContexts that can't be completed.
@@ -163,7 +163,7 @@
   template <typename CallbackType>
   void ForEachMatchingDC(const DeclContext *DC, CallbackType Callback);
 
-public: 
+public:
   /// Log something if there is a logging callback installed.
   llvm::raw_ostream &logs() { return *LogStream; }
 
diff --git a/linux-x64/clang/include/clang/AST/ExternalASTSource.h b/linux-x64/clang/include/clang/AST/ExternalASTSource.h
index be013c5..525d4c7 100644
--- a/linux-x64/clang/include/clang/AST/ExternalASTSource.h
+++ b/linux-x64/clang/include/clang/AST/ExternalASTSource.h
@@ -19,7 +19,6 @@
 #include "clang/AST/DeclBase.h"
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Module.h"
-#include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
@@ -54,7 +53,7 @@
 class Stmt;
 class TagDecl;
 
-/// \brief Abstract interface for external sources of AST nodes.
+/// Abstract interface for external sources of AST nodes.
 ///
 /// External AST sources provide AST nodes constructed from some
 /// external source, such as a precompiled header. External AST
@@ -68,7 +67,7 @@
   /// whenever we might have added new redeclarations for existing decls.
   uint32_t CurrentGeneration = 0;
 
-  /// \brief Whether this AST source also provides information for
+  /// Whether this AST source also provides information for
   /// semantic analysis.
   bool SemaSource = false;
 
@@ -76,7 +75,7 @@
   ExternalASTSource() = default;
   virtual ~ExternalASTSource();
 
-  /// \brief RAII class for safely pairing a StartedDeserializing call
+  /// RAII class for safely pairing a StartedDeserializing call
   /// with FinishedDeserializing.
   class Deserializing {
     ExternalASTSource *Source;
@@ -92,12 +91,12 @@
     }
   };
 
-  /// \brief Get the current generation of this AST source. This number
+  /// Get the current generation of this AST source. This number
   /// is incremented each time the AST source lazily extends an existing
   /// entity.
   uint32_t getGeneration() const { return CurrentGeneration; }
 
-  /// \brief Resolve a declaration ID into a declaration, potentially
+  /// Resolve a declaration ID into a declaration, potentially
   /// building a new declaration.
   ///
   /// This method only needs to be implemented if the AST source ever
@@ -106,7 +105,7 @@
   /// The default implementation of this method is a no-op.
   virtual Decl *GetExternalDecl(uint32_t ID);
 
-  /// \brief Resolve a selector ID into a selector.
+  /// Resolve a selector ID into a selector.
   ///
   /// This operation only needs to be implemented if the AST source
   /// returns non-zero for GetNumKnownSelectors().
@@ -114,13 +113,13 @@
   /// The default implementation of this method is a no-op.
   virtual Selector GetExternalSelector(uint32_t ID);
 
-  /// \brief Returns the number of selectors known to the external AST
+  /// Returns the number of selectors known to the external AST
   /// source.
   ///
   /// The default implementation of this method is a no-op.
   virtual uint32_t GetNumExternalSelectors();
 
-  /// \brief Resolve the offset of a statement in the decl stream into
+  /// Resolve the offset of a statement in the decl stream into
   /// a statement.
   ///
   /// This operation is meant to be used via a LazyOffsetPtr.  It only
@@ -130,22 +129,22 @@
   /// The default implementation of this method is a no-op.
   virtual Stmt *GetExternalDeclStmt(uint64_t Offset);
 
-  /// \brief Resolve the offset of a set of C++ constructor initializers in
+  /// Resolve the offset of a set of C++ constructor initializers in
   /// the decl stream into an array of initializers.
   ///
   /// The default implementation of this method is a no-op.
   virtual CXXCtorInitializer **GetExternalCXXCtorInitializers(uint64_t Offset);
 
-  /// \brief Resolve the offset of a set of C++ base specifiers in the decl
+  /// Resolve the offset of a set of C++ base specifiers in the decl
   /// stream into an array of specifiers.
   ///
   /// The default implementation of this method is a no-op.
   virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset);
 
-  /// \brief Update an out-of-date identifier.
+  /// Update an out-of-date identifier.
   virtual void updateOutOfDateIdentifier(IdentifierInfo &II) {}
 
-  /// \brief Find all declarations with the given name in the given context,
+  /// Find all declarations with the given name in the given context,
   /// and add them to the context by calling SetExternalVisibleDeclsForName
   /// or SetNoExternalVisibleDeclsForName.
   /// \return \c true if any declarations might have been found, \c false if
@@ -155,15 +154,19 @@
   virtual bool
   FindExternalVisibleDeclsByName(const DeclContext *DC, DeclarationName Name);
 
-  /// \brief Ensures that the table of all visible declarations inside this
+  /// Ensures that the table of all visible declarations inside this
   /// context is up to date.
   ///
   /// The default implementation of this function is a no-op.
   virtual void completeVisibleDeclsMap(const DeclContext *DC);
 
-  /// \brief Retrieve the module that corresponds to the given module ID.
+  /// Retrieve the module that corresponds to the given module ID.
   virtual Module *getModule(unsigned ID) { return nullptr; }
 
+  /// Determine whether D comes from a PCH which was built with a corresponding
+  /// object file.
+  virtual bool DeclIsFromPCHWithObjectFile(const Decl *D) { return false; }
+
   /// Abstracts clang modules and precompiled header files and holds
   /// everything needed to generate debug info for an imported module
   /// or PCH.
@@ -196,7 +199,7 @@
 
   virtual ExtKind hasExternalDefinitions(const Decl *D);
 
-  /// \brief Finds all declarations lexically contained within the given
+  /// Finds all declarations lexically contained within the given
   /// DeclContext, after applying an optional filter predicate.
   ///
   /// \param IsKindWeWant a predicate function that returns true if the passed
@@ -208,31 +211,31 @@
                            llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
                            SmallVectorImpl<Decl *> &Result);
 
-  /// \brief Finds all declarations lexically contained within the given
+  /// Finds all declarations lexically contained within the given
   /// DeclContext.
   void FindExternalLexicalDecls(const DeclContext *DC,
                                 SmallVectorImpl<Decl *> &Result) {
     FindExternalLexicalDecls(DC, [](Decl::Kind) { return true; }, Result);
   }
 
-  /// \brief Get the decls that are contained in a file in the Offset/Length
+  /// Get the decls that are contained in a file in the Offset/Length
   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
   /// a range.
   virtual void FindFileRegionDecls(FileID File, unsigned Offset,
                                    unsigned Length,
                                    SmallVectorImpl<Decl *> &Decls);
 
-  /// \brief Gives the external AST source an opportunity to complete
+  /// Gives the external AST source an opportunity to complete
   /// the redeclaration chain for a declaration. Called each time we
   /// need the most recent declaration of a declaration after the
   /// generation count is incremented.
   virtual void CompleteRedeclChain(const Decl *D);
 
-  /// \brief Gives the external AST source an opportunity to complete
+  /// Gives the external AST source an opportunity to complete
   /// an incomplete type.
   virtual void CompleteType(TagDecl *Tag);
 
-  /// \brief Gives the external AST source an opportunity to complete an
+  /// Gives the external AST source an opportunity to complete an
   /// incomplete Objective-C class.
   ///
   /// This routine will only be invoked if the "externally completed" bit is
@@ -240,37 +243,37 @@
   /// \c ObjCInterfaceDecl::setExternallyCompleted().
   virtual void CompleteType(ObjCInterfaceDecl *Class);
 
-  /// \brief Loads comment ranges.
+  /// Loads comment ranges.
   virtual void ReadComments();
 
-  /// \brief Notify ExternalASTSource that we started deserialization of
+  /// Notify ExternalASTSource that we started deserialization of
   /// a decl or type so until FinishedDeserializing is called there may be
   /// decls that are initializing. Must be paired with FinishedDeserializing.
   ///
   /// The default implementation of this method is a no-op.
   virtual void StartedDeserializing();
 
-  /// \brief Notify ExternalASTSource that we finished the deserialization of
+  /// Notify ExternalASTSource that we finished the deserialization of
   /// a decl or type. Must be paired with StartedDeserializing.
   ///
   /// The default implementation of this method is a no-op.
   virtual void FinishedDeserializing();
 
-  /// \brief Function that will be invoked when we begin parsing a new
+  /// Function that will be invoked when we begin parsing a new
   /// translation unit involving this external AST source.
   ///
   /// The default implementation of this method is a no-op.
   virtual void StartTranslationUnit(ASTConsumer *Consumer);
 
-  /// \brief Print any statistics that have been gathered regarding
+  /// Print any statistics that have been gathered regarding
   /// the external AST source.
   ///
   /// The default implementation of this method is a no-op.
   virtual void PrintStats();
-  
-  /// \brief Perform layout on the given record.
+
+  /// Perform layout on the given record.
   ///
-  /// This routine allows the external AST source to provide an specific 
+  /// This routine allows the external AST source to provide an specific
   /// layout for a record, overriding the layout that would normally be
   /// constructed. It is intended for clients who receive specific layout
   /// details rather than source code (such as LLDB). The client is expected
@@ -287,13 +290,13 @@
   /// expressed in bits. All of the fields must be provided with offsets.
   ///
   /// \param BaseOffsets The offset of each of the direct, non-virtual base
-  /// classes. If any bases are not given offsets, the bases will be laid 
+  /// classes. If any bases are not given offsets, the bases will be laid
   /// out according to the ABI.
   ///
   /// \param VirtualBaseOffsets The offset of each of the virtual base classes
-  /// (either direct or not). If any bases are not given offsets, the bases will be laid 
+  /// (either direct or not). If any bases are not given offsets, the bases will be laid
   /// out according to the ABI.
-  /// 
+  ///
   /// \returns true if the record layout was provided, false otherwise.
   virtual bool layoutRecordType(
       const RecordDecl *Record, uint64_t &Size, uint64_t &Alignment,
@@ -304,15 +307,15 @@
   //===--------------------------------------------------------------------===//
   // Queries for performance analysis.
   //===--------------------------------------------------------------------===//
-  
+
   struct MemoryBufferSizes {
     size_t malloc_bytes;
     size_t mmap_bytes;
-    
+
     MemoryBufferSizes(size_t malloc_bytes, size_t mmap_bytes)
         : malloc_bytes(malloc_bytes), mmap_bytes(mmap_bytes) {}
   };
-  
+
   /// Return the amount of memory used by memory buffers, breaking down
   /// by heap-backed versus mmap'ed memory.
   MemoryBufferSizes getMemoryBufferSizes() const {
@@ -333,11 +336,11 @@
   SetNoExternalVisibleDeclsForName(const DeclContext *DC,
                                    DeclarationName Name);
 
-  /// \brief Increment the current generation.
+  /// Increment the current generation.
   uint32_t incrementGeneration(ASTContext &C);
 };
 
-/// \brief A lazy pointer to an AST node (of base type T) that resides
+/// A lazy pointer to an AST node (of base type T) that resides
 /// within an external AST source.
 ///
 /// The AST node is identified within the external AST source by a
@@ -345,7 +348,7 @@
 /// external AST source itself.
 template<typename T, typename OffsT, T* (ExternalASTSource::*Get)(OffsT Offset)>
 struct LazyOffsetPtr {
-  /// \brief Either a pointer to an AST node or the offset within the
+  /// Either a pointer to an AST node or the offset within the
   /// external AST source where the AST node can be found.
   ///
   /// If the low bit is clear, a pointer to the AST node. If the low
@@ -377,20 +380,20 @@
     return *this;
   }
 
-  /// \brief Whether this pointer is non-NULL.
+  /// Whether this pointer is non-NULL.
   ///
   /// This operation does not require the AST node to be deserialized.
   explicit operator bool() const { return Ptr != 0; }
 
-  /// \brief Whether this pointer is non-NULL.
+  /// Whether this pointer is non-NULL.
   ///
   /// This operation does not require the AST node to be deserialized.
   bool isValid() const { return Ptr != 0; }
 
-  /// \brief Whether this pointer is currently stored as an offset.
+  /// Whether this pointer is currently stored as an offset.
   bool isOffset() const { return Ptr & 0x01; }
 
-  /// \brief Retrieve the pointer to the AST node that this lazy pointer
+  /// Retrieve the pointer to the AST node that this lazy pointer points to.
   ///
   /// \param Source the external AST source.
   ///
@@ -405,7 +408,7 @@
   }
 };
 
-/// \brief A lazy value (of type T) that is within an AST node of type Owner,
+/// A lazy value (of type T) that is within an AST node of type Owner,
 /// where the value might change in later generations of the external AST
 /// source.
 template<typename Owner, typename T, void (ExternalASTSource::*Update)(Owner)>
@@ -447,7 +450,7 @@
 
   /// Set the value of this pointer, in the current generation.
   void set(T NewValue) {
-    if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>()) {
+    if (auto *LazyVal = Value.template dyn_cast<LazyData *>()) {
       LazyVal->LastValue = NewValue;
       return;
     }
@@ -459,7 +462,7 @@
 
   /// Get the value of this pointer, updating its owner if necessary.
   T get(Owner O) {
-    if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>()) {
+    if (auto *LazyVal = Value.template dyn_cast<LazyData *>()) {
       if (LazyVal->LastGeneration != LazyVal->ExternalSource->getGeneration()) {
         LazyVal->LastGeneration = LazyVal->ExternalSource->getGeneration();
         (LazyVal->ExternalSource->*Update)(O);
@@ -471,7 +474,7 @@
 
   /// Get the most recently computed value of this pointer without updating it.
   T getNotUpdated() const {
-    if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>())
+    if (auto *LazyVal = Value.template dyn_cast<LazyData *>())
       return LazyVal->LastValue;
     return Value.template get<T>();
   }
@@ -506,13 +509,13 @@
 
 namespace clang {
 
-/// \brief Represents a lazily-loaded vector of data.
+/// Represents a lazily-loaded vector of data.
 ///
 /// The lazily-loaded vector of data contains data that is partially loaded
-/// from an external source and partially added by local translation. The 
+/// from an external source and partially added by local translation. The
 /// items loaded from the external source are loaded lazily, when needed for
 /// iteration over the complete vector.
-template<typename T, typename Source, 
+template<typename T, typename Source,
          void (Source::*Loader)(SmallVectorImpl<T>&),
          unsigned LoadedStorage = 2, unsigned LocalStorage = 4>
 class LazyVector {
@@ -561,20 +564,20 @@
   iterator begin(Source *source, bool LocalOnly = false) {
     if (LocalOnly)
       return iterator(this, 0);
-    
+
     if (source)
       (source->*Loader)(Loaded);
     return iterator(this, -(int)Loaded.size());
   }
-  
+
   iterator end() {
     return iterator(this, Local.size());
   }
-  
+
   void push_back(const T& LocalValue) {
     Local.push_back(LocalValue);
   }
-  
+
   void erase(iterator From, iterator To) {
     if (From.isLoaded() && To.isLoaded()) {
       Loaded.erase(&*From, &*To);
@@ -590,20 +593,20 @@
   }
 };
 
-/// \brief A lazy pointer to a statement.
+/// A lazy pointer to a statement.
 using LazyDeclStmtPtr =
     LazyOffsetPtr<Stmt, uint64_t, &ExternalASTSource::GetExternalDeclStmt>;
 
-/// \brief A lazy pointer to a declaration.
+/// A lazy pointer to a declaration.
 using LazyDeclPtr =
     LazyOffsetPtr<Decl, uint32_t, &ExternalASTSource::GetExternalDecl>;
 
-/// \brief A lazy pointer to a set of CXXCtorInitializers.
+/// A lazy pointer to a set of CXXCtorInitializers.
 using LazyCXXCtorInitializersPtr =
     LazyOffsetPtr<CXXCtorInitializer *, uint64_t,
                   &ExternalASTSource::GetExternalCXXCtorInitializers>;
 
-/// \brief A lazy pointer to a set of CXXBaseSpecifiers.
+/// A lazy pointer to a set of CXXBaseSpecifiers.
 using LazyCXXBaseSpecifiersPtr =
     LazyOffsetPtr<CXXBaseSpecifier, uint64_t,
                   &ExternalASTSource::GetExternalCXXBaseSpecifiers>;
diff --git a/linux-x64/clang/include/clang/AST/GlobalDecl.h b/linux-x64/clang/include/clang/AST/GlobalDecl.h
index 3b3e436..7f01799 100644
--- a/linux-x64/clang/include/clang/AST/GlobalDecl.h
+++ b/linux-x64/clang/include/clang/AST/GlobalDecl.h
@@ -57,7 +57,7 @@
     GlobalDecl CanonGD;
     CanonGD.Value.setPointer(Value.getPointer()->getCanonicalDecl());
     CanonGD.Value.setInt(Value.getInt());
-    
+
     return CanonGD;
   }
 
@@ -72,11 +72,11 @@
     assert(isa<CXXDestructorDecl>(getDecl()) && "Decl is not a dtor!");
     return static_cast<CXXDtorType>(Value.getInt());
   }
-  
+
   friend bool operator==(const GlobalDecl &LHS, const GlobalDecl &RHS) {
     return LHS.Value == RHS.Value;
   }
-  
+
   void *getAsOpaquePtr() const { return Value.getOpaqueValue(); }
 
   static GlobalDecl getFromOpaquePtr(void *P) {
@@ -84,7 +84,7 @@
     GD.Value.setFromOpaqueValue(P);
     return GD;
   }
-  
+
   GlobalDecl getWithDecl(const Decl *D) {
     GlobalDecl Result(*this);
     Result.Value.setPointer(D);
@@ -100,7 +100,7 @@
     static inline clang::GlobalDecl getEmptyKey() {
       return clang::GlobalDecl();
     }
-  
+
     static inline clang::GlobalDecl getTombstoneKey() {
       return clang::GlobalDecl::
         getFromOpaquePtr(reinterpret_cast<void*>(-1));
@@ -109,13 +109,13 @@
     static unsigned getHashValue(clang::GlobalDecl GD) {
       return DenseMapInfo<void*>::getHashValue(GD.getAsOpaquePtr());
     }
-    
-    static bool isEqual(clang::GlobalDecl LHS, 
+
+    static bool isEqual(clang::GlobalDecl LHS,
                         clang::GlobalDecl RHS) {
       return LHS == RHS;
     }
   };
-  
+
   // GlobalDecl isn't *technically* a POD type. However, its copy constructor,
   // copy assignment operator, and destructor are all trivial.
   template <>
diff --git a/linux-x64/clang/include/clang/AST/LambdaCapture.h b/linux-x64/clang/include/clang/AST/LambdaCapture.h
index 6517d65..f246bc4 100644
--- a/linux-x64/clang/include/clang/AST/LambdaCapture.h
+++ b/linux-x64/clang/include/clang/AST/LambdaCapture.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the LambdaCapture class.
+/// Defines the LambdaCapture class.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -21,27 +21,27 @@
 
 namespace clang {
 
-/// \brief Describes the capture of a variable or of \c this, or of a
+/// Describes the capture of a variable or of \c this, or of a
 /// C++1y init-capture.
 class LambdaCapture {
   enum {
-    /// \brief Flag used by the Capture class to indicate that the given
+    /// Flag used by the Capture class to indicate that the given
     /// capture was implicit.
     Capture_Implicit = 0x01,
 
-    /// \brief Flag used by the Capture class to indicate that the
+    /// Flag used by the Capture class to indicate that the
     /// given capture was by-copy.
     ///
     /// This includes the case of a non-reference init-capture.
     Capture_ByCopy = 0x02,
 
-    /// \brief Flag used by the Capture class to distinguish between a capture
+    /// Flag used by the Capture class to distinguish between a capture
     /// of '*this' and a capture of a VLA type.
     Capture_This = 0x04
   };
 
   // Decl could represent:
-  // - a VarDecl* that represents the variable that was captured or the 
+  // - a VarDecl* that represents the variable that was captured or the
   //   init-capture.
   // - or, is a nullptr and Capture_This is set in Bits if this represents a
   //   capture of '*this' by value or reference.
@@ -56,7 +56,7 @@
   friend class ASTStmtWriter;
 
 public:
-  /// \brief Create a new capture of a variable or of \c this.
+  /// Create a new capture of a variable or of \c this.
   ///
   /// \param Loc The source location associated with this capture.
   ///
@@ -75,29 +75,29 @@
                 VarDecl *Var = nullptr,
                 SourceLocation EllipsisLoc = SourceLocation());
 
-  /// \brief Determine the kind of capture.
+  /// Determine the kind of capture.
   LambdaCaptureKind getCaptureKind() const;
 
-  /// \brief Determine whether this capture handles the C++ \c this
+  /// Determine whether this capture handles the C++ \c this
   /// pointer.
   bool capturesThis() const {
     return DeclAndBits.getPointer() == nullptr &&
           (DeclAndBits.getInt() & Capture_This);
   }
 
-  /// \brief Determine whether this capture handles a variable.
+  /// Determine whether this capture handles a variable.
   bool capturesVariable() const {
     return dyn_cast_or_null<VarDecl>(DeclAndBits.getPointer());
   }
 
-  /// \brief Determine whether this captures a variable length array bound
+  /// Determine whether this captures a variable length array bound
   /// expression.
   bool capturesVLAType() const {
     return DeclAndBits.getPointer() == nullptr &&
            !(DeclAndBits.getInt() & Capture_This);
   }
 
-  /// \brief Retrieve the declaration of the local variable being
+  /// Retrieve the declaration of the local variable being
   /// captured.
   ///
   /// This operation is only valid if this capture is a variable capture
@@ -107,17 +107,17 @@
     return static_cast<VarDecl *>(DeclAndBits.getPointer());
   }
 
-  /// \brief Determine whether this was an implicit capture (not
+  /// Determine whether this was an implicit capture (not
   /// written between the square brackets introducing the lambda).
   bool isImplicit() const {
     return DeclAndBits.getInt() & Capture_Implicit;
   }
 
-  /// \brief Determine whether this was an explicit capture (written
+  /// Determine whether this was an explicit capture (written
   /// between the square brackets introducing the lambda).
   bool isExplicit() const { return !isImplicit(); }
 
-  /// \brief Retrieve the source location of the capture.
+  /// Retrieve the source location of the capture.
   ///
   /// For an explicit capture, this returns the location of the
   /// explicit capture in the source. For an implicit capture, this
@@ -125,11 +125,11 @@
   /// used.
   SourceLocation getLocation() const { return Loc; }
 
-  /// \brief Determine whether this capture is a pack expansion,
+  /// Determine whether this capture is a pack expansion,
   /// which captures a function parameter pack.
   bool isPackExpansion() const { return EllipsisLoc.isValid(); }
 
-  /// \brief Retrieve the location of the ellipsis for a capture
+  /// Retrieve the location of the ellipsis for a capture
   /// that is a pack expansion.
   SourceLocation getEllipsisLoc() const {
     assert(isPackExpansion() && "No ellipsis location for a non-expansion");
diff --git a/linux-x64/clang/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h b/linux-x64/clang/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
index 264f20f..47dac43 100644
--- a/linux-x64/clang/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
+++ b/linux-x64/clang/include/clang/AST/LexicallyOrderedRecursiveASTVisitor.h
@@ -99,8 +99,8 @@
       LexicallyNestedDeclarations.clear();
       for (++I; I != E; ++I) {
         Decl *Sibling = *I;
-        if (!SM.isBeforeInTranslationUnit(Sibling->getLocStart(),
-                                          Child->getLocEnd()))
+        if (!SM.isBeforeInTranslationUnit(Sibling->getBeginLoc(),
+                                          Child->getEndLoc()))
           break;
         if (!BaseType::canIgnoreChildDeclWhileTraversingDeclContext(Sibling))
           LexicallyNestedDeclarations.push_back(Sibling);
diff --git a/linux-x64/clang/include/clang/AST/LocInfoType.h b/linux-x64/clang/include/clang/AST/LocInfoType.h
index 7e573bd..802d913 100644
--- a/linux-x64/clang/include/clang/AST/LocInfoType.h
+++ b/linux-x64/clang/include/clang/AST/LocInfoType.h
@@ -20,7 +20,7 @@
 
 class TypeSourceInfo;
 
-/// \brief Holds a QualType and a TypeSourceInfo* that came out of a declarator
+/// Holds a QualType and a TypeSourceInfo* that came out of a declarator
 /// parsing.
 ///
 /// LocInfoType is a "transient" type, only needed for passing to/from Parser
diff --git a/linux-x64/clang/include/clang/AST/Mangle.h b/linux-x64/clang/include/clang/AST/Mangle.h
index 71c78dc..c42fe91 100644
--- a/linux-x64/clang/include/clang/AST/Mangle.h
+++ b/linux-x64/clang/include/clang/AST/Mangle.h
@@ -73,7 +73,7 @@
   DiagnosticsEngine &getDiags() const { return Diags; }
 
   virtual void startNewFunction() { LocalBlockIds.clear(); }
-  
+
   unsigned getBlockId(const BlockDecl *BD, bool Local) {
     llvm::DenseMap<const BlockDecl *, unsigned> &BlockIds
       = Local? LocalBlockIds : GlobalBlockIds;
@@ -183,14 +183,14 @@
   explicit MicrosoftMangleContext(ASTContext &C, DiagnosticsEngine &D)
       : MangleContext(C, D, MK_Microsoft) {}
 
-  /// \brief Mangle vftable symbols.  Only a subset of the bases along the path
+  /// Mangle vftable symbols.  Only a subset of the bases along the path
   /// to the vftable are included in the name.  It's up to the caller to pick
   /// them correctly.
   virtual void mangleCXXVFTable(const CXXRecordDecl *Derived,
                                 ArrayRef<const CXXRecordDecl *> BasePath,
                                 raw_ostream &Out) = 0;
 
-  /// \brief Mangle vbtable symbols.  Only a subset of the bases along the path
+  /// Mangle vbtable symbols.  Only a subset of the bases along the path
   /// to the vbtable are included in the name.  It's up to the caller to pick
   /// them correctly.
   virtual void mangleCXXVBTable(const CXXRecordDecl *Derived,
diff --git a/linux-x64/clang/include/clang/AST/MangleNumberingContext.h b/linux-x64/clang/include/clang/AST/MangleNumberingContext.h
index 869221d..ff2148e 100644
--- a/linux-x64/clang/include/clang/AST/MangleNumberingContext.h
+++ b/linux-x64/clang/include/clang/AST/MangleNumberingContext.h
@@ -27,29 +27,29 @@
 class Type;
 class VarDecl;
 
-/// \brief Keeps track of the mangled names of lambda expressions and block
+/// Keeps track of the mangled names of lambda expressions and block
 /// literals within a particular context.
 class MangleNumberingContext {
 public:
   virtual ~MangleNumberingContext() {}
 
-  /// \brief Retrieve the mangling number of a new lambda expression with the
+  /// Retrieve the mangling number of a new lambda expression with the
   /// given call operator within this context.
   virtual unsigned getManglingNumber(const CXXMethodDecl *CallOperator) = 0;
 
-  /// \brief Retrieve the mangling number of a new block literal within this
+  /// Retrieve the mangling number of a new block literal within this
   /// context.
   virtual unsigned getManglingNumber(const BlockDecl *BD) = 0;
 
   /// Static locals are numbered by source order.
   virtual unsigned getStaticLocalNumber(const VarDecl *VD) = 0;
 
-  /// \brief Retrieve the mangling number of a static local variable within
+  /// Retrieve the mangling number of a static local variable within
   /// this context.
   virtual unsigned getManglingNumber(const VarDecl *VD,
                                      unsigned MSLocalManglingNumber) = 0;
 
-  /// \brief Retrieve the mangling number of a static local variable within
+  /// Retrieve the mangling number of a static local variable within
   /// this context.
   virtual unsigned getManglingNumber(const TagDecl *TD,
                                      unsigned MSLocalManglingNumber) = 0;
diff --git a/linux-x64/clang/include/clang/AST/NSAPI.h b/linux-x64/clang/include/clang/AST/NSAPI.h
index 3757116..bf2afe3 100644
--- a/linux-x64/clang/include/clang/AST/NSAPI.h
+++ b/linux-x64/clang/include/clang/AST/NSAPI.h
@@ -20,7 +20,7 @@
   class QualType;
   class Expr;
 
-// \brief Provides info and caches identifiers/selectors for NSFoundation API.
+// Provides info and caches identifiers/selectors for NSFoundation API.
 class NSAPI {
 public:
   explicit NSAPI(ASTContext &Ctx);
@@ -53,25 +53,25 @@
 
   IdentifierInfo *getNSClassId(NSClassIdKindKind K) const;
 
-  /// \brief The Objective-C NSString selectors.
+  /// The Objective-C NSString selectors.
   Selector getNSStringSelector(NSStringMethodKind MK) const;
 
-  /// \brief Return NSStringMethodKind if \param Sel is such a selector.
+  /// Return NSStringMethodKind if \param Sel is such a selector.
   Optional<NSStringMethodKind> getNSStringMethodKind(Selector Sel) const;
 
-  /// \brief Returns true if the expression \param E is a reference of
+  /// Returns true if the expression \param E is a reference of
   /// "NSUTF8StringEncoding" enum constant.
   bool isNSUTF8StringEncodingConstant(const Expr *E) const {
     return isObjCEnumerator(E, "NSUTF8StringEncoding", NSUTF8StringEncodingId);
   }
 
-  /// \brief Returns true if the expression \param E is a reference of
+  /// Returns true if the expression \param E is a reference of
   /// "NSASCIIStringEncoding" enum constant.
   bool isNSASCIIStringEncodingConstant(const Expr *E) const {
     return isObjCEnumerator(E, "NSASCIIStringEncoding",NSASCIIStringEncodingId);
   }
 
-  /// \brief Enumerates the NSArray/NSMutableArray methods used to generate
+  /// Enumerates the NSArray/NSMutableArray methods used to generate
   /// literals and to apply some checks.
   enum NSArrayMethodKind {
     NSArr_array,
@@ -89,13 +89,13 @@
   };
   static const unsigned NumNSArrayMethods = 12;
 
-  /// \brief The Objective-C NSArray selectors.
+  /// The Objective-C NSArray selectors.
   Selector getNSArraySelector(NSArrayMethodKind MK) const;
 
-  /// \brief Return NSArrayMethodKind if \p Sel is such a selector.
+  /// Return NSArrayMethodKind if \p Sel is such a selector.
   Optional<NSArrayMethodKind> getNSArrayMethodKind(Selector Sel);
 
-  /// \brief Enumerates the NSDictionary/NSMutableDictionary methods used
+  /// Enumerates the NSDictionary/NSMutableDictionary methods used
   /// to generate literals and to apply some checks.
   enum NSDictionaryMethodKind {
     NSDict_dictionary,
@@ -113,14 +113,14 @@
     NSMutableDict_setValueForKey
   };
   static const unsigned NumNSDictionaryMethods = 13;
-  
-  /// \brief The Objective-C NSDictionary selectors.
+
+  /// The Objective-C NSDictionary selectors.
   Selector getNSDictionarySelector(NSDictionaryMethodKind MK) const;
 
-  /// \brief Return NSDictionaryMethodKind if \p Sel is such a selector.
+  /// Return NSDictionaryMethodKind if \p Sel is such a selector.
   Optional<NSDictionaryMethodKind> getNSDictionaryMethodKind(Selector Sel);
 
-  /// \brief Enumerates the NSMutableSet/NSOrderedSet methods used
+  /// Enumerates the NSMutableSet/NSOrderedSet methods used
   /// to apply some checks.
   enum NSSetMethodKind {
     NSMutableSet_addObject,
@@ -131,42 +131,42 @@
   };
   static const unsigned NumNSSetMethods = 5;
 
-  /// \brief The Objective-C NSSet selectors.
+  /// The Objective-C NSSet selectors.
   Selector getNSSetSelector(NSSetMethodKind MK) const;
 
-  /// \brief Return NSSetMethodKind if \p Sel is such a selector.
+  /// Return NSSetMethodKind if \p Sel is such a selector.
   Optional<NSSetMethodKind> getNSSetMethodKind(Selector Sel);
 
-  /// \brief Returns selector for "objectForKeyedSubscript:".
+  /// Returns selector for "objectForKeyedSubscript:".
   Selector getObjectForKeyedSubscriptSelector() const {
     return getOrInitSelector(StringRef("objectForKeyedSubscript"),
                              objectForKeyedSubscriptSel);
   }
 
-  /// \brief Returns selector for "objectAtIndexedSubscript:".
+  /// Returns selector for "objectAtIndexedSubscript:".
   Selector getObjectAtIndexedSubscriptSelector() const {
     return getOrInitSelector(StringRef("objectAtIndexedSubscript"),
                              objectAtIndexedSubscriptSel);
   }
 
-  /// \brief Returns selector for "setObject:forKeyedSubscript".
+  /// Returns selector for "setObject:forKeyedSubscript".
   Selector getSetObjectForKeyedSubscriptSelector() const {
     StringRef Ids[] = { "setObject", "forKeyedSubscript" };
     return getOrInitSelector(Ids, setObjectForKeyedSubscriptSel);
   }
 
-  /// \brief Returns selector for "setObject:atIndexedSubscript".
+  /// Returns selector for "setObject:atIndexedSubscript".
   Selector getSetObjectAtIndexedSubscriptSelector() const {
     StringRef Ids[] = { "setObject", "atIndexedSubscript" };
     return getOrInitSelector(Ids, setObjectAtIndexedSubscriptSel);
   }
 
-  /// \brief Returns selector for "isEqual:".
+  /// Returns selector for "isEqual:".
   Selector getIsEqualSelector() const {
     return getOrInitSelector(StringRef("isEqual"), isEqualSel);
   }
 
-  /// \brief Enumerates the NSNumber methods used to generate literals.
+  /// Enumerates the NSNumber methods used to generate literals.
   enum NSNumberLiteralMethodKind {
     NSNumberWithChar,
     NSNumberWithUnsignedChar,
@@ -186,7 +186,7 @@
   };
   static const unsigned NumNSNumberLiteralMethods = 15;
 
-  /// \brief The Objective-C NSNumber selectors used to create NSNumber literals.
+  /// The Objective-C NSNumber selectors used to create NSNumber literals.
   /// \param Instance if true it will return the selector for the init* method
   /// otherwise it will return the selector for the number* method.
   Selector getNSNumberLiteralSelector(NSNumberLiteralMethodKind MK,
@@ -198,29 +198,29 @@
            Sel == getNSNumberLiteralSelector(MK, true);
   }
 
-  /// \brief Return NSNumberLiteralMethodKind if \p Sel is such a selector.
+  /// Return NSNumberLiteralMethodKind if \p Sel is such a selector.
   Optional<NSNumberLiteralMethodKind>
       getNSNumberLiteralMethodKind(Selector Sel) const;
 
-  /// \brief Determine the appropriate NSNumber factory method kind for a
+  /// Determine the appropriate NSNumber factory method kind for a
   /// literal of the given type.
   Optional<NSNumberLiteralMethodKind>
       getNSNumberFactoryMethodKind(QualType T) const;
 
-  /// \brief Returns true if \param T is a typedef of "BOOL" in objective-c.
+  /// Returns true if \param T is a typedef of "BOOL" in objective-c.
   bool isObjCBOOLType(QualType T) const;
-  /// \brief Returns true if \param T is a typedef of "NSInteger" in objective-c.
+  /// Returns true if \param T is a typedef of "NSInteger" in objective-c.
   bool isObjCNSIntegerType(QualType T) const;
-  /// \brief Returns true if \param T is a typedef of "NSUInteger" in objective-c.
+  /// Returns true if \param T is a typedef of "NSUInteger" in objective-c.
   bool isObjCNSUIntegerType(QualType T) const;
-  /// \brief Returns one of NSIntegral typedef names if \param T is a typedef
+  /// Returns one of NSIntegral typedef names if \param T is a typedef
   /// of that name in objective-c.
   StringRef GetNSIntegralKind(QualType T) const;
 
-  /// \brief Returns \c true if \p Id is currently defined as a macro.
+  /// Returns \c true if \p Id is currently defined as a macro.
   bool isMacroDefined(StringRef Id) const;
 
-  /// \brief Returns \c true if \p InterfaceDecl is subclass of \p NSClassKind
+  /// Returns \c true if \p InterfaceDecl is subclass of \p NSClassKind
   bool isSubclassOfNSClass(ObjCInterfaceDecl *InterfaceDecl,
                            NSClassIdKindKind NSClassKind) const;
 
@@ -236,16 +236,16 @@
 
   mutable Selector NSStringSelectors[NumNSStringMethods];
 
-  /// \brief The selectors for Objective-C NSArray methods.
+  /// The selectors for Objective-C NSArray methods.
   mutable Selector NSArraySelectors[NumNSArrayMethods];
 
-  /// \brief The selectors for Objective-C NSDictionary methods.
+  /// The selectors for Objective-C NSDictionary methods.
   mutable Selector NSDictionarySelectors[NumNSDictionaryMethods];
 
-  /// \brief The selectors for Objective-C NSSet methods.
+  /// The selectors for Objective-C NSSet methods.
   mutable Selector NSSetSelectors[NumNSSetMethods];
 
-  /// \brief The Objective-C NSNumber selectors used to create NSNumber literals.
+  /// The Objective-C NSNumber selectors used to create NSNumber literals.
   mutable Selector NSNumberClassSelectors[NumNSNumberLiteralMethods];
   mutable Selector NSNumberInstanceSelectors[NumNSNumberLiteralMethods];
 
diff --git a/linux-x64/clang/include/clang/AST/NestedNameSpecifier.h b/linux-x64/clang/include/clang/AST/NestedNameSpecifier.h
index e2cb45c..3a7b457 100644
--- a/linux-x64/clang/include/clang/AST/NestedNameSpecifier.h
+++ b/linux-x64/clang/include/clang/AST/NestedNameSpecifier.h
@@ -36,7 +36,7 @@
 class Type;
 class TypeLoc;
 
-/// \brief Represents a C++ nested name specifier, such as
+/// Represents a C++ nested name specifier, such as
 /// "\::std::vector<int>::".
 ///
 /// C++ nested name specifiers are the prefixes to qualified
@@ -44,10 +44,10 @@
 /// specifier. Nested name specifiers are made up of a sequence of
 /// specifiers, each of which can be a namespace, type, identifier
 /// (for dependent names), decltype specifier, or the global specifier ('::').
-/// The last two specifiers can only appear at the start of a 
+/// The last two specifiers can only appear at the start of a
 /// nested-namespace-specifier.
 class NestedNameSpecifier : public llvm::FoldingSetNode {
-  /// \brief Enumeration describing
+  /// Enumeration describing
   enum StoredSpecifierKind {
     StoredIdentifier = 0,
     StoredDecl = 1,
@@ -55,7 +55,7 @@
     StoredTypeSpecWithTemplate = 3
   };
 
-  /// \brief The nested name specifier that precedes this nested name
+  /// The nested name specifier that precedes this nested name
   /// specifier.
   ///
   /// The pointer is the nested-name-specifier that precedes this
@@ -63,7 +63,7 @@
   /// SpecifierKind.
   llvm::PointerIntPair<NestedNameSpecifier *, 2, StoredSpecifierKind> Prefix;
 
-  /// \brief The last component in the nested name specifier, which
+  /// The last component in the nested name specifier, which
   /// can be an identifier, a declaration, or a type.
   ///
   /// When the pointer is NULL, this specifier represents the global
@@ -73,42 +73,42 @@
   void* Specifier = nullptr;
 
 public:
-  /// \brief The kind of specifier that completes this nested name
+  /// The kind of specifier that completes this nested name
   /// specifier.
   enum SpecifierKind {
-    /// \brief An identifier, stored as an IdentifierInfo*.
+    /// An identifier, stored as an IdentifierInfo*.
     Identifier,
 
-    /// \brief A namespace, stored as a NamespaceDecl*.
+    /// A namespace, stored as a NamespaceDecl*.
     Namespace,
 
-    /// \brief A namespace alias, stored as a NamespaceAliasDecl*.
+    /// A namespace alias, stored as a NamespaceAliasDecl*.
     NamespaceAlias,
 
-    /// \brief A type, stored as a Type*.
+    /// A type, stored as a Type*.
     TypeSpec,
 
-    /// \brief A type that was preceded by the 'template' keyword,
+    /// A type that was preceded by the 'template' keyword,
     /// stored as a Type*.
     TypeSpecWithTemplate,
 
-    /// \brief The global specifier '::'. There is no stored value.
+    /// The global specifier '::'. There is no stored value.
     Global,
 
-    /// \brief Microsoft's '__super' specifier, stored as a CXXRecordDecl* of
+    /// Microsoft's '__super' specifier, stored as a CXXRecordDecl* of
     /// the class it appeared in.
     Super
   };
 
 private:
-  /// \brief Builds the global specifier.
+  /// Builds the global specifier.
   NestedNameSpecifier() : Prefix(nullptr, StoredIdentifier) {}
 
-  /// \brief Copy constructor used internally to clone nested name
+  /// Copy constructor used internally to clone nested name
   /// specifiers.
   NestedNameSpecifier(const NestedNameSpecifier &Other) = default;
 
-  /// \brief Either find or insert the given nested name specifier
+  /// Either find or insert the given nested name specifier
   /// mockup in the given context.
   static NestedNameSpecifier *FindOrInsert(const ASTContext &Context,
                                            const NestedNameSpecifier &Mockup);
@@ -116,7 +116,7 @@
 public:
   NestedNameSpecifier &operator=(const NestedNameSpecifier &) = delete;
 
-  /// \brief Builds a specifier combining a prefix and an identifier.
+  /// Builds a specifier combining a prefix and an identifier.
   ///
   /// The prefix must be dependent, since nested name specifiers
   /// referencing an identifier are only permitted when the identifier
@@ -125,22 +125,22 @@
                                      NestedNameSpecifier *Prefix,
                                      IdentifierInfo *II);
 
-  /// \brief Builds a nested name specifier that names a namespace.
+  /// Builds a nested name specifier that names a namespace.
   static NestedNameSpecifier *Create(const ASTContext &Context,
                                      NestedNameSpecifier *Prefix,
                                      const NamespaceDecl *NS);
 
-  /// \brief Builds a nested name specifier that names a namespace alias.
+  /// Builds a nested name specifier that names a namespace alias.
   static NestedNameSpecifier *Create(const ASTContext &Context,
                                      NestedNameSpecifier *Prefix,
                                      NamespaceAliasDecl *Alias);
 
-  /// \brief Builds a nested name specifier that names a type.
+  /// Builds a nested name specifier that names a type.
   static NestedNameSpecifier *Create(const ASTContext &Context,
                                      NestedNameSpecifier *Prefix,
                                      bool Template, const Type *T);
 
-  /// \brief Builds a specifier that consists of just an identifier.
+  /// Builds a specifier that consists of just an identifier.
   ///
   /// The nested-name-specifier is assumed to be dependent, but has no
   /// prefix because the prefix is implied by something outside of the
@@ -149,16 +149,16 @@
   static NestedNameSpecifier *Create(const ASTContext &Context,
                                      IdentifierInfo *II);
 
-  /// \brief Returns the nested name specifier representing the global
+  /// Returns the nested name specifier representing the global
   /// scope.
   static NestedNameSpecifier *GlobalSpecifier(const ASTContext &Context);
 
-  /// \brief Returns the nested name specifier representing the __super scope
+  /// Returns the nested name specifier representing the __super scope
   /// for the given CXXRecordDecl.
   static NestedNameSpecifier *SuperSpecifier(const ASTContext &Context,
                                              CXXRecordDecl *RD);
 
-  /// \brief Return the prefix of this nested name specifier.
+  /// Return the prefix of this nested name specifier.
   ///
   /// The prefix contains all of the parts of the nested name
   /// specifier that preced this current specifier. For example, for a
@@ -167,10 +167,10 @@
   /// "foo::".
   NestedNameSpecifier *getPrefix() const { return Prefix.getPointer(); }
 
-  /// \brief Determine what kind of nested name specifier is stored.
+  /// Determine what kind of nested name specifier is stored.
   SpecifierKind getKind() const;
 
-  /// \brief Retrieve the identifier stored in this nested name
+  /// Retrieve the identifier stored in this nested name
   /// specifier.
   IdentifierInfo *getAsIdentifier() const {
     if (Prefix.getInt() == StoredIdentifier)
@@ -179,19 +179,19 @@
     return nullptr;
   }
 
-  /// \brief Retrieve the namespace stored in this nested name
+  /// Retrieve the namespace stored in this nested name
   /// specifier.
   NamespaceDecl *getAsNamespace() const;
 
-  /// \brief Retrieve the namespace alias stored in this nested name
+  /// Retrieve the namespace alias stored in this nested name
   /// specifier.
   NamespaceAliasDecl *getAsNamespaceAlias() const;
 
-  /// \brief Retrieve the record declaration stored in this nested name
+  /// Retrieve the record declaration stored in this nested name
   /// specifier.
   CXXRecordDecl *getAsRecordDecl() const;
 
-  /// \brief Retrieve the type stored in this nested name specifier.
+  /// Retrieve the type stored in this nested name specifier.
   const Type *getAsType() const {
     if (Prefix.getInt() == StoredTypeSpec ||
         Prefix.getInt() == StoredTypeSpecWithTemplate)
@@ -200,19 +200,19 @@
     return nullptr;
   }
 
-  /// \brief Whether this nested name specifier refers to a dependent
+  /// Whether this nested name specifier refers to a dependent
   /// type or not.
   bool isDependent() const;
 
-  /// \brief Whether this nested name specifier involves a template
+  /// Whether this nested name specifier involves a template
   /// parameter.
   bool isInstantiationDependent() const;
 
-  /// \brief Whether this nested-name-specifier contains an unexpanded
+  /// Whether this nested-name-specifier contains an unexpanded
   /// parameter pack (for C++11 variadic templates).
   bool containsUnexpandedParameterPack() const;
 
-  /// \brief Print this nested name specifier to the given output
+  /// Print this nested name specifier to the given output
   /// stream.
   void print(raw_ostream &OS, const PrintingPolicy &Policy) const;
 
@@ -221,53 +221,53 @@
     ID.AddPointer(Specifier);
   }
 
-  /// \brief Dump the nested name specifier to standard output to aid
+  /// Dump the nested name specifier to standard output to aid
   /// in debugging.
   void dump(const LangOptions &LO) const;
   void dump() const;
 };
 
-/// \brief A C++ nested-name-specifier augmented with source location
+/// A C++ nested-name-specifier augmented with source location
 /// information.
 class NestedNameSpecifierLoc {
   NestedNameSpecifier *Qualifier = nullptr;
   void *Data = nullptr;
 
-  /// \brief Determines the data length for the last component in the
+  /// Determines the data length for the last component in the
   /// given nested-name-specifier.
   static unsigned getLocalDataLength(NestedNameSpecifier *Qualifier);
 
-  /// \brief Determines the data length for the entire
+  /// Determines the data length for the entire
   /// nested-name-specifier.
   static unsigned getDataLength(NestedNameSpecifier *Qualifier);
 
 public:
-  /// \brief Construct an empty nested-name-specifier.
+  /// Construct an empty nested-name-specifier.
   NestedNameSpecifierLoc() = default;
 
-  /// \brief Construct a nested-name-specifier with source location information
+  /// Construct a nested-name-specifier with source location information
   /// from
   NestedNameSpecifierLoc(NestedNameSpecifier *Qualifier, void *Data)
       : Qualifier(Qualifier), Data(Data) {}
 
-  /// \brief Evalutes true when this nested-name-specifier location is
+  /// Evaluates true when this nested-name-specifier location is
   /// non-empty.
   explicit operator bool() const { return Qualifier; }
 
-  /// \brief Evalutes true when this nested-name-specifier location is
+  /// Evaluates true when this nested-name-specifier location is
   /// empty.
   bool hasQualifier() const { return Qualifier; }
 
-  /// \brief Retrieve the nested-name-specifier to which this instance
+  /// Retrieve the nested-name-specifier to which this instance
   /// refers.
   NestedNameSpecifier *getNestedNameSpecifier() const {
     return Qualifier;
   }
 
-  /// \brief Retrieve the opaque pointer that refers to source-location data.
+  /// Retrieve the opaque pointer that refers to source-location data.
   void *getOpaqueData() const { return Data; }
 
-  /// \brief Retrieve the source range covering the entirety of this
+  /// Retrieve the source range covering the entirety of this
   /// nested-name-specifier.
   ///
   /// For example, if this instance refers to a nested-name-specifier
@@ -275,7 +275,7 @@
   /// from the initial '::' to the last '::'.
   SourceRange getSourceRange() const LLVM_READONLY;
 
-  /// \brief Retrieve the source range covering just the last part of
+  /// Retrieve the source range covering just the last part of
   /// this nested-name-specifier, not including the prefix.
   ///
   /// For example, if this instance refers to a nested-name-specifier
@@ -283,31 +283,31 @@
   /// from "vector" to the last '::'.
   SourceRange getLocalSourceRange() const;
 
-  /// \brief Retrieve the location of the beginning of this
+  /// Retrieve the location of the beginning of this
   /// nested-name-specifier.
   SourceLocation getBeginLoc() const {
     return getSourceRange().getBegin();
   }
 
-  /// \brief Retrieve the location of the end of this
+  /// Retrieve the location of the end of this
   /// nested-name-specifier.
   SourceLocation getEndLoc() const {
     return getSourceRange().getEnd();
   }
 
-  /// \brief Retrieve the location of the beginning of this
+  /// Retrieve the location of the beginning of this
   /// component of the nested-name-specifier.
   SourceLocation getLocalBeginLoc() const {
     return getLocalSourceRange().getBegin();
   }
 
-  /// \brief Retrieve the location of the end of this component of the
+  /// Retrieve the location of the end of this component of the
   /// nested-name-specifier.
   SourceLocation getLocalEndLoc() const {
     return getLocalSourceRange().getEnd();
   }
 
-  /// \brief Return the prefix of this nested-name-specifier.
+  /// Return the prefix of this nested-name-specifier.
   ///
   /// For example, if this instance refers to a nested-name-specifier
   /// \c \::std::vector<int>::, the prefix is \c \::std::. Note that the
@@ -320,11 +320,11 @@
     return NestedNameSpecifierLoc(Qualifier->getPrefix(), Data);
   }
 
-  /// \brief For a nested-name-specifier that refers to a type,
+  /// For a nested-name-specifier that refers to a type,
   /// retrieve the type with source-location information.
   TypeLoc getTypeLoc() const;
 
-  /// \brief Determines the data length for the entire
+  /// Determines the data length for the entire
   /// nested-name-specifier.
   unsigned getDataLength() const { return getDataLength(Qualifier); }
 
@@ -339,15 +339,15 @@
   }
 };
 
-/// \brief Class that aids in the construction of nested-name-specifiers along
+/// Class that aids in the construction of nested-name-specifiers along
 /// with source-location information for all of the components of the
 /// nested-name-specifier.
 class NestedNameSpecifierLocBuilder {
-  /// \brief The current representation of the nested-name-specifier we're
+  /// The current representation of the nested-name-specifier we're
   /// building.
   NestedNameSpecifier *Representation = nullptr;
 
-  /// \brief Buffer used to store source-location information for the
+  /// Buffer used to store source-location information for the
   /// nested-name-specifier.
   ///
   /// Note that we explicitly manage the buffer (rather than using a
@@ -355,11 +355,11 @@
   /// a \c CXXScopeSpec, and CXXScopeSpec uses a NestedNameSpecifierLocBuilder.
   char *Buffer = nullptr;
 
-  /// \brief The size of the buffer used to store source-location information
+  /// The size of the buffer used to store source-location information
   /// for the nested-name-specifier.
   unsigned BufferSize = 0;
 
-  /// \brief The capacity of the buffer used to store source-location
+  /// The capacity of the buffer used to store source-location
   /// information for the nested-name-specifier.
   unsigned BufferCapacity = 0;
 
@@ -375,10 +375,10 @@
       free(Buffer);
   }
 
-  /// \brief Retrieve the representation of the nested-name-specifier.
+  /// Retrieve the representation of the nested-name-specifier.
   NestedNameSpecifier *getRepresentation() const { return Representation; }
 
-  /// \brief Extend the current nested-name-specifier by another
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'type::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -392,7 +392,7 @@
   void Extend(ASTContext &Context, SourceLocation TemplateKWLoc, TypeLoc TL,
               SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'identifier::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -406,7 +406,7 @@
   void Extend(ASTContext &Context, IdentifierInfo *Identifier,
               SourceLocation IdentifierLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'namespace::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -420,7 +420,7 @@
   void Extend(ASTContext &Context, NamespaceDecl *Namespace,
               SourceLocation NamespaceLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'namespace-alias::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -435,11 +435,11 @@
   void Extend(ASTContext &Context, NamespaceAliasDecl *Alias,
               SourceLocation AliasLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Turn this (empty) nested-name-specifier into the global
+  /// Turn this (empty) nested-name-specifier into the global
   /// nested-name-specifier '::'.
   void MakeGlobal(ASTContext &Context, SourceLocation ColonColonLoc);
-  
-  /// \brief Turns this (empty) nested-name-specifier into '__super'
+
+  /// Turns this (empty) nested-name-specifier into '__super'
   /// nested-name-specifier.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -452,10 +452,10 @@
   /// name.
   ///
   /// \param ColonColonLoc The location of the trailing '::'.
-  void MakeSuper(ASTContext &Context, CXXRecordDecl *RD, 
+  void MakeSuper(ASTContext &Context, CXXRecordDecl *RD,
                  SourceLocation SuperLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Make a new nested-name-specifier from incomplete source-location
+  /// Make a new nested-name-specifier from incomplete source-location
   /// information.
   ///
   /// This routine should be used very, very rarely, in cases where we
@@ -464,23 +464,23 @@
   void MakeTrivial(ASTContext &Context, NestedNameSpecifier *Qualifier,
                    SourceRange R);
 
-  /// \brief Adopt an existing nested-name-specifier (with source-range
+  /// Adopt an existing nested-name-specifier (with source-range
   /// information).
   void Adopt(NestedNameSpecifierLoc Other);
 
-  /// \brief Retrieve the source range covered by this nested-name-specifier.
+  /// Retrieve the source range covered by this nested-name-specifier.
   SourceRange getSourceRange() const LLVM_READONLY {
     return NestedNameSpecifierLoc(Representation, Buffer).getSourceRange();
   }
 
-  /// \brief Retrieve a nested-name-specifier with location information,
+  /// Retrieve a nested-name-specifier with location information,
   /// copied into the given AST context.
   ///
   /// \param Context The context into which this nested-name-specifier will be
   /// copied.
   NestedNameSpecifierLoc getWithLocInContext(ASTContext &Context) const;
 
-  /// \brief Retrieve a nested-name-specifier with location
+  /// Retrieve a nested-name-specifier with location
   /// information based on the information in this builder.
   ///
   /// This loc will contain references to the builder's internal data and may
@@ -489,14 +489,14 @@
     return NestedNameSpecifierLoc(Representation, Buffer);
   }
 
-  /// \brief Clear out this builder, and prepare it to build another
+  /// Clear out this builder, and prepare it to build another
   /// nested-name-specifier with source-location information.
   void Clear() {
     Representation = nullptr;
     BufferSize = 0;
   }
 
-  /// \brief Retrieve the underlying buffer.
+  /// Retrieve the underlying buffer.
   ///
   /// \returns A pair containing a pointer to the buffer of source-location
   /// data and the size of the source-location data that resides in that
diff --git a/linux-x64/clang/include/clang/AST/NonTrivialTypeVisitor.h b/linux-x64/clang/include/clang/AST/NonTrivialTypeVisitor.h
new file mode 100644
index 0000000..bab373d
--- /dev/null
+++ b/linux-x64/clang/include/clang/AST/NonTrivialTypeVisitor.h
@@ -0,0 +1,113 @@
+//===-- NonTrivialTypeVisitor.h - Visitor for non-trivial Types *- C++ --*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines the visitor classes that are used to traverse non-trivial
+//  structs.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_NON_TRIVIAL_TYPE_VISITOR_H
+#define LLVM_CLANG_NON_TRIVIAL_TYPE_VISITOR_H
+
+#include "clang/AST/Type.h"
+
+namespace clang {
+
+template <class Derived, class RetTy = void> struct DestructedTypeVisitor {
+  template <class... Ts> RetTy visit(QualType FT, Ts &&... Args) {
+    return asDerived().visitWithKind(FT.isDestructedType(), FT,
+                                     std::forward<Ts>(Args)...);
+  }
+
+  template <class... Ts>
+  RetTy visitWithKind(QualType::DestructionKind DK, QualType FT,
+                      Ts &&... Args) {
+    switch (DK) {
+    case QualType::DK_objc_strong_lifetime:
+      return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
+    case QualType::DK_nontrivial_c_struct:
+      return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
+    case QualType::DK_none:
+      return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
+    case QualType::DK_cxx_destructor:
+      return asDerived().visitCXXDestructor(FT, std::forward<Ts>(Args)...);
+    case QualType::DK_objc_weak_lifetime:
+      return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
+    }
+
+    llvm_unreachable("unknown destruction kind");
+  }
+
+  Derived &asDerived() { return static_cast<Derived &>(*this); }
+};
+
+template <class Derived, class RetTy = void>
+struct DefaultInitializedTypeVisitor {
+  template <class... Ts> RetTy visit(QualType FT, Ts &&... Args) {
+    return asDerived().visitWithKind(
+        FT.isNonTrivialToPrimitiveDefaultInitialize(), FT,
+        std::forward<Ts>(Args)...);
+  }
+
+  template <class... Ts>
+  RetTy visitWithKind(QualType::PrimitiveDefaultInitializeKind PDIK,
+                      QualType FT, Ts &&... Args) {
+    switch (PDIK) {
+    case QualType::PDIK_ARCStrong:
+      return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
+    case QualType::PDIK_ARCWeak:
+      return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
+    case QualType::PDIK_Struct:
+      return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
+    case QualType::PDIK_Trivial:
+      return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
+    }
+
+    llvm_unreachable("unknown default-initialize kind");
+  }
+
+  Derived &asDerived() { return static_cast<Derived &>(*this); }
+};
+
+template <class Derived, bool IsMove, class RetTy = void>
+struct CopiedTypeVisitor {
+  template <class... Ts> RetTy visit(QualType FT, Ts &&... Args) {
+    QualType::PrimitiveCopyKind PCK =
+        IsMove ? FT.isNonTrivialToPrimitiveDestructiveMove()
+               : FT.isNonTrivialToPrimitiveCopy();
+    return asDerived().visitWithKind(PCK, FT, std::forward<Ts>(Args)...);
+  }
+
+  template <class... Ts>
+  RetTy visitWithKind(QualType::PrimitiveCopyKind PCK, QualType FT,
+                      Ts &&... Args) {
+    asDerived().preVisit(PCK, FT, std::forward<Ts>(Args)...);
+
+    switch (PCK) {
+    case QualType::PCK_ARCStrong:
+      return asDerived().visitARCStrong(FT, std::forward<Ts>(Args)...);
+    case QualType::PCK_ARCWeak:
+      return asDerived().visitARCWeak(FT, std::forward<Ts>(Args)...);
+    case QualType::PCK_Struct:
+      return asDerived().visitStruct(FT, std::forward<Ts>(Args)...);
+    case QualType::PCK_Trivial:
+      return asDerived().visitTrivial(FT, std::forward<Ts>(Args)...);
+    case QualType::PCK_VolatileTrivial:
+      return asDerived().visitVolatileTrivial(FT, std::forward<Ts>(Args)...);
+    }
+
+    llvm_unreachable("unknown primitive copy kind");
+  }
+
+  Derived &asDerived() { return static_cast<Derived &>(*this); }
+};
+
+} // end namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/AST/ODRHash.h b/linux-x64/clang/include/clang/AST/ODRHash.h
index c9e8027..75b3617 100644
--- a/linux-x64/clang/include/clang/AST/ODRHash.h
+++ b/linux-x64/clang/include/clang/AST/ODRHash.h
@@ -40,7 +40,6 @@
   // Use DenseMaps to convert from DeclarationName and Type pointers
   // to an index value.
   llvm::DenseMap<DeclarationName, unsigned> DeclNameMap;
-  llvm::DenseMap<const Type*, unsigned> TypeMap;
 
   // Save space by processing bools at the end.
   llvm::SmallVector<bool, 128> Bools;
@@ -55,8 +54,13 @@
   void AddCXXRecordDecl(const CXXRecordDecl *Record);
 
   // Use this for ODR checking functions between modules.  This method compares
+  // more information than the AddDecl class.  SkipBody will process the
+  // hash as if the function has no body.
+  void AddFunctionDecl(const FunctionDecl *Function, bool SkipBody = false);
+
+  // Use this for ODR checking enums between modules.  This method compares
   // more information than the AddDecl class.
-  void AddFunctionDecl(const FunctionDecl *Function);
+  void AddEnumDecl(const EnumDecl *Enum);
 
   // Process SubDecls of the main Decl.  This method calls the DeclVisitor
   // while AddDecl does not.
@@ -83,7 +87,7 @@
   // Save booleans until the end to lower the size of data to process.
   void AddBoolean(bool value);
 
-  static bool isWhitelistedDecl(const Decl* D, const CXXRecordDecl *Record);
+  static bool isWhitelistedDecl(const Decl* D, const DeclContext *Parent);
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/AST/OpenMPClause.h b/linux-x64/clang/include/clang/AST/OpenMPClause.h
index abcd1cb..302853b 100644
--- a/linux-x64/clang/include/clang/AST/OpenMPClause.h
+++ b/linux-x64/clang/include/clang/AST/OpenMPClause.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file defines OpenMP AST classes for clauses.
+/// This file defines OpenMP AST classes for clauses.
 /// There are clauses for executable directives, clauses for declarative
 /// directives and clauses which can be used in both kinds of directives.
 //
@@ -47,15 +47,15 @@
 // AST classes for clauses.
 //===----------------------------------------------------------------------===//
 
-/// \brief This is a basic class for representing single OpenMP clause.
+/// This is a basic class for representing single OpenMP clause.
 class OMPClause {
-  /// \brief Starting location of the clause (the clause keyword).
+  /// Starting location of the clause (the clause keyword).
   SourceLocation StartLoc;
 
-  /// \brief Ending location of the clause.
+  /// Ending location of the clause.
   SourceLocation EndLoc;
 
-  /// \brief Kind of the clause.
+  /// Kind of the clause.
   OpenMPClauseKind Kind;
 
 protected:
@@ -63,19 +63,27 @@
       : StartLoc(StartLoc), EndLoc(EndLoc), Kind(K) {}
 
 public:
-  /// \brief Returns the starting location of the clause.
-  SourceLocation getLocStart() const { return StartLoc; }
+  /// Returns the starting location of the clause.
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const { return StartLoc; }
 
-  /// \brief Returns the ending location of the clause.
-  SourceLocation getLocEnd() const { return EndLoc; }
+  /// Returns the ending location of the clause.
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const { return EndLoc; }
 
-  /// \brief Sets the starting location of the clause.
+  /// Sets the starting location of the clause.
   void setLocStart(SourceLocation Loc) { StartLoc = Loc; }
 
-  /// \brief Sets the ending location of the clause.
+  /// Sets the ending location of the clause.
   void setLocEnd(SourceLocation Loc) { EndLoc = Loc; }
 
-  /// \brief Returns kind of OpenMP clause (private, shared, reduction, etc.).
+  /// Returns kind of OpenMP clause (private, shared, reduction, etc.).
   OpenMPClauseKind getClauseKind() const { return Kind; }
 
   bool isImplicit() const { return StartLoc.isInvalid(); }
@@ -124,7 +132,7 @@
   Stmt *getPreInitStmt() { return PreInit; }
 
   /// Get capture region for the stmt in the clause.
-  OpenMPDirectiveKind getCaptureRegion() { return CaptureRegion; }
+  OpenMPDirectiveKind getCaptureRegion() const { return CaptureRegion; }
 
   static OMPClauseWithPreInit *get(OMPClause *C);
   static const OMPClauseWithPreInit *get(const OMPClause *C);
@@ -157,20 +165,20 @@
   static const OMPClauseWithPostUpdate *get(const OMPClause *C);
 };
 
-/// \brief This represents clauses with the list of variables like 'private',
+/// This represents clauses with the list of variables like 'private',
 /// 'firstprivate', 'copyin', 'shared', or 'reduction' clauses in the
 /// '#pragma omp ...' directives.
 template <class T> class OMPVarListClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Number of variables in the list.
+  /// Number of variables in the list.
   unsigned NumVars;
 
 protected:
-  /// \brief Build a clause with \a N variables
+  /// Build a clause with \a N variables
   ///
   /// \param K Kind of the clause.
   /// \param StartLoc Starting location of the clause (the clause keyword).
@@ -181,13 +189,13 @@
                    SourceLocation LParenLoc, SourceLocation EndLoc, unsigned N)
       : OMPClause(K, StartLoc, EndLoc), LParenLoc(LParenLoc), NumVars(N) {}
 
-  /// \brief Fetches list of variables associated with this clause.
+  /// Fetches list of variables associated with this clause.
   MutableArrayRef<Expr *> getVarRefs() {
     return MutableArrayRef<Expr *>(
         static_cast<T *>(this)->template getTrailingObjects<Expr *>(), NumVars);
   }
 
-  /// \brief Sets the list of variables for this clause.
+  /// Sets the list of variables for this clause.
   void setVarRefs(ArrayRef<Expr *> VL) {
     assert(VL.size() == NumVars &&
            "Number of variables is not the same as the preallocated buffer");
@@ -216,13 +224,13 @@
   varlist_const_iterator varlist_begin() const { return getVarRefs().begin(); }
   varlist_const_iterator varlist_end() const { return getVarRefs().end(); }
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Fetches list of all variables in the clause.
+  /// Fetches list of all variables in the clause.
   ArrayRef<const Expr *> getVarRefs() const {
     return llvm::makeArrayRef(
         static_cast<const T *>(this)->template getTrailingObjects<Expr *>(),
@@ -230,7 +238,7 @@
   }
 };
 
-/// \brief This represents 'if' clause in the '#pragma omp ...' directive.
+/// This represents 'if' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp parallel if(parallel:a > 5)
@@ -240,35 +248,35 @@
 class OMPIfClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Condition of the 'if' clause.
+  /// Condition of the 'if' clause.
   Stmt *Condition = nullptr;
 
-  /// \brief Location of ':' (if any).
+  /// Location of ':' (if any).
   SourceLocation ColonLoc;
 
-  /// \brief Directive name modifier for the clause.
+  /// Directive name modifier for the clause.
   OpenMPDirectiveKind NameModifier = OMPD_unknown;
 
-  /// \brief Name modifier location.
+  /// Name modifier location.
   SourceLocation NameModifierLoc;
 
-  /// \brief Set condition.
+  /// Set condition.
   void setCondition(Expr *Cond) { Condition = Cond; }
 
-  /// \brief Set directive name modifier for the clause.
+  /// Set directive name modifier for the clause.
   void setNameModifier(OpenMPDirectiveKind NM) { NameModifier = NM; }
 
-  /// \brief Set location of directive name modifier for the clause.
+  /// Set location of directive name modifier for the clause.
   void setNameModifierLoc(SourceLocation Loc) { NameModifierLoc = Loc; }
 
-  /// \brief Set location of ':'.
+  /// Set location of ':'.
   void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
 
 public:
-  /// \brief Build 'if' clause with condition \a Cond.
+  /// Build 'if' clause with condition \a Cond.
   ///
   /// \param NameModifier [OpenMP 4.1] Directive name modifier of clause.
   /// \param Cond Condition of the clause.
@@ -290,27 +298,27 @@
     setPreInitStmt(HelperCond, CaptureRegion);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPIfClause()
       : OMPClause(OMPC_if, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return the location of ':'.
+  /// Return the location of ':'.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
-  /// \brief Returns condition.
+  /// Returns condition.
   Expr *getCondition() const { return cast_or_null<Expr>(Condition); }
 
-  /// \brief Return directive name modifier associated with the clause.
+  /// Return directive name modifier associated with the clause.
   OpenMPDirectiveKind getNameModifier() const { return NameModifier; }
 
-  /// \brief Return the location of directive name modifier.
+  /// Return the location of directive name modifier.
   SourceLocation getNameModifierLoc() const { return NameModifierLoc; }
 
   child_range children() { return child_range(&Condition, &Condition + 1); }
@@ -320,7 +328,7 @@
   }
 };
 
-/// \brief This represents 'final' clause in the '#pragma omp ...' directive.
+/// This represents 'final' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp task final(a > 5)
@@ -330,17 +338,17 @@
 class OMPFinalClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Condition of the 'if' clause.
+  /// Condition of the 'if' clause.
   Stmt *Condition = nullptr;
 
-  /// \brief Set condition.
+  /// Set condition.
   void setCondition(Expr *Cond) { Condition = Cond; }
 
 public:
-  /// \brief Build 'final' clause with condition \a Cond.
+  /// Build 'final' clause with condition \a Cond.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -351,17 +359,17 @@
       : OMPClause(OMPC_final, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Condition(Cond) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPFinalClause()
       : OMPClause(OMPC_final, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Returns condition.
+  /// Returns condition.
   Expr *getCondition() const { return cast_or_null<Expr>(Condition); }
 
   child_range children() { return child_range(&Condition, &Condition + 1); }
@@ -371,7 +379,7 @@
   }
 };
 
-/// \brief This represents 'num_threads' clause in the '#pragma omp ...'
+/// This represents 'num_threads' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -382,17 +390,17 @@
 class OMPNumThreadsClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Condition of the 'num_threads' clause.
+  /// Condition of the 'num_threads' clause.
   Stmt *NumThreads = nullptr;
 
-  /// \brief Set condition.
+  /// Set condition.
   void setNumThreads(Expr *NThreads) { NumThreads = NThreads; }
 
 public:
-  /// \brief Build 'num_threads' clause with condition \a NumThreads.
+  /// Build 'num_threads' clause with condition \a NumThreads.
   ///
   /// \param NumThreads Number of threads for the construct.
   /// \param HelperNumThreads Helper Number of threads for the construct.
@@ -411,18 +419,18 @@
     setPreInitStmt(HelperNumThreads, CaptureRegion);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPNumThreadsClause()
       : OMPClause(OMPC_num_threads, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Returns number of threads.
+  /// Returns number of threads.
   Expr *getNumThreads() const { return cast_or_null<Expr>(NumThreads); }
 
   child_range children() { return child_range(&NumThreads, &NumThreads + 1); }
@@ -432,7 +440,7 @@
   }
 };
 
-/// \brief This represents 'safelen' clause in the '#pragma omp ...'
+/// This represents 'safelen' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -447,17 +455,17 @@
 class OMPSafelenClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Safe iteration space distance.
+  /// Safe iteration space distance.
   Stmt *Safelen = nullptr;
 
-  /// \brief Set safelen.
+  /// Set safelen.
   void setSafelen(Expr *Len) { Safelen = Len; }
 
 public:
-  /// \brief Build 'safelen' clause.
+  /// Build 'safelen' clause.
   ///
   /// \param Len Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -467,17 +475,17 @@
       : OMPClause(OMPC_safelen, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Safelen(Len) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPSafelenClause()
       : OMPClause(OMPC_safelen, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return safe iteration space distance.
+  /// Return safe iteration space distance.
   Expr *getSafelen() const { return cast_or_null<Expr>(Safelen); }
 
   child_range children() { return child_range(&Safelen, &Safelen + 1); }
@@ -487,7 +495,7 @@
   }
 };
 
-/// \brief This represents 'simdlen' clause in the '#pragma omp ...'
+/// This represents 'simdlen' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -501,17 +509,17 @@
 class OMPSimdlenClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Safe iteration space distance.
+  /// Safe iteration space distance.
   Stmt *Simdlen = nullptr;
 
-  /// \brief Set simdlen.
+  /// Set simdlen.
   void setSimdlen(Expr *Len) { Simdlen = Len; }
 
 public:
-  /// \brief Build 'simdlen' clause.
+  /// Build 'simdlen' clause.
   ///
   /// \param Len Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -521,17 +529,17 @@
       : OMPClause(OMPC_simdlen, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Simdlen(Len) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPSimdlenClause()
       : OMPClause(OMPC_simdlen, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return safe iteration space distance.
+  /// Return safe iteration space distance.
   Expr *getSimdlen() const { return cast_or_null<Expr>(Simdlen); }
 
   child_range children() { return child_range(&Simdlen, &Simdlen + 1); }
@@ -541,7 +549,7 @@
   }
 };
 
-/// \brief This represents 'collapse' clause in the '#pragma omp ...'
+/// This represents 'collapse' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -555,17 +563,17 @@
 class OMPCollapseClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Number of for-loops.
+  /// Number of for-loops.
   Stmt *NumForLoops = nullptr;
 
-  /// \brief Set the number of associated for-loops.
+  /// Set the number of associated for-loops.
   void setNumForLoops(Expr *Num) { NumForLoops = Num; }
 
 public:
-  /// \brief Build 'collapse' clause.
+  /// Build 'collapse' clause.
   ///
   /// \param Num Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -576,17 +584,17 @@
       : OMPClause(OMPC_collapse, StartLoc, EndLoc), LParenLoc(LParenLoc),
         NumForLoops(Num) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPCollapseClause()
       : OMPClause(OMPC_collapse, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return the number of associated for-loops.
+  /// Return the number of associated for-loops.
   Expr *getNumForLoops() const { return cast_or_null<Expr>(NumForLoops); }
 
   child_range children() { return child_range(&NumForLoops, &NumForLoops + 1); }
@@ -596,7 +604,7 @@
   }
 };
 
-/// \brief This represents 'default' clause in the '#pragma omp ...' directive.
+/// This represents 'default' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp parallel default(shared)
@@ -606,27 +614,27 @@
 class OMPDefaultClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief A kind of the 'default' clause.
+  /// A kind of the 'default' clause.
   OpenMPDefaultClauseKind Kind = OMPC_DEFAULT_unknown;
 
-  /// \brief Start location of the kind in source code.
+  /// Start location of the kind in source code.
   SourceLocation KindKwLoc;
 
-  /// \brief Set kind of the clauses.
+  /// Set kind of the clauses.
   ///
   /// \param K Argument of clause.
   void setDefaultKind(OpenMPDefaultClauseKind K) { Kind = K; }
 
-  /// \brief Set argument location.
+  /// Set argument location.
   ///
   /// \param KLoc Argument location.
   void setDefaultKindKwLoc(SourceLocation KLoc) { KindKwLoc = KLoc; }
 
 public:
-  /// \brief Build 'default' clause with argument \a A ('none' or 'shared').
+  /// Build 'default' clause with argument \a A ('none' or 'shared').
   ///
   /// \param A Argument of the clause ('none' or 'shared').
   /// \param ALoc Starting location of the argument.
@@ -639,20 +647,20 @@
       : OMPClause(OMPC_default, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Kind(A), KindKwLoc(ALoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPDefaultClause()
       : OMPClause(OMPC_default, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Returns kind of the clause.
+  /// Returns kind of the clause.
   OpenMPDefaultClauseKind getDefaultKind() const { return Kind; }
 
-  /// \brief Returns location of clause kind.
+  /// Returns location of clause kind.
   SourceLocation getDefaultKindKwLoc() const { return KindKwLoc; }
 
   child_range children() {
@@ -664,7 +672,7 @@
   }
 };
 
-/// \brief This represents 'proc_bind' clause in the '#pragma omp ...'
+/// This represents 'proc_bind' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -675,27 +683,27 @@
 class OMPProcBindClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief A kind of the 'proc_bind' clause.
+  /// A kind of the 'proc_bind' clause.
   OpenMPProcBindClauseKind Kind = OMPC_PROC_BIND_unknown;
 
-  /// \brief Start location of the kind in source code.
+  /// Start location of the kind in source code.
   SourceLocation KindKwLoc;
 
-  /// \brief Set kind of the clause.
+  /// Set kind of the clause.
   ///
   /// \param K Kind of clause.
   void setProcBindKind(OpenMPProcBindClauseKind K) { Kind = K; }
 
-  /// \brief Set clause kind location.
+  /// Set clause kind location.
   ///
   /// \param KLoc Kind location.
   void setProcBindKindKwLoc(SourceLocation KLoc) { KindKwLoc = KLoc; }
 
 public:
-  /// \brief Build 'proc_bind' clause with argument \a A ('master', 'close' or
+  /// Build 'proc_bind' clause with argument \a A ('master', 'close' or
   ///        'spread').
   ///
   /// \param A Argument of the clause ('master', 'close' or 'spread').
@@ -709,20 +717,20 @@
       : OMPClause(OMPC_proc_bind, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Kind(A), KindKwLoc(ALoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPProcBindClause()
       : OMPClause(OMPC_proc_bind, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Returns kind of the clause.
+  /// Returns kind of the clause.
   OpenMPProcBindClauseKind getProcBindKind() const { return Kind; }
 
-  /// \brief Returns location of clause kind.
+  /// Returns location of clause kind.
   SourceLocation getProcBindKindKwLoc() const { return KindKwLoc; }
 
   child_range children() {
@@ -734,7 +742,7 @@
   }
 };
 
-/// \brief This represents 'schedule' clause in the '#pragma omp ...' directive.
+/// This represents 'schedule' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp for schedule(static, 3)
@@ -744,58 +752,58 @@
 class OMPScheduleClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief A kind of the 'schedule' clause.
+  /// A kind of the 'schedule' clause.
   OpenMPScheduleClauseKind Kind = OMPC_SCHEDULE_unknown;
 
-  /// \brief Modifiers for 'schedule' clause.
+  /// Modifiers for 'schedule' clause.
   enum {FIRST, SECOND, NUM_MODIFIERS};
   OpenMPScheduleClauseModifier Modifiers[NUM_MODIFIERS];
 
-  /// \brief Locations of modifiers.
+  /// Locations of modifiers.
   SourceLocation ModifiersLoc[NUM_MODIFIERS];
 
-  /// \brief Start location of the schedule ind in source code.
+  /// Start location of the schedule ind in source code.
   SourceLocation KindLoc;
 
-  /// \brief Location of ',' (if any).
+  /// Location of ',' (if any).
   SourceLocation CommaLoc;
 
-  /// \brief Chunk size.
+  /// Chunk size.
   Expr *ChunkSize = nullptr;
 
-  /// \brief Set schedule kind.
+  /// Set schedule kind.
   ///
   /// \param K Schedule kind.
   void setScheduleKind(OpenMPScheduleClauseKind K) { Kind = K; }
 
-  /// \brief Set the first schedule modifier.
+  /// Set the first schedule modifier.
   ///
   /// \param M Schedule modifier.
   void setFirstScheduleModifier(OpenMPScheduleClauseModifier M) {
     Modifiers[FIRST] = M;
   }
 
-  /// \brief Set the second schedule modifier.
+  /// Set the second schedule modifier.
   ///
   /// \param M Schedule modifier.
   void setSecondScheduleModifier(OpenMPScheduleClauseModifier M) {
     Modifiers[SECOND] = M;
   }
 
-  /// \brief Set location of the first schedule modifier.
+  /// Set location of the first schedule modifier.
   void setFirstScheduleModifierLoc(SourceLocation Loc) {
     ModifiersLoc[FIRST] = Loc;
   }
 
-  /// \brief Set location of the second schedule modifier.
+  /// Set location of the second schedule modifier.
   void setSecondScheduleModifierLoc(SourceLocation Loc) {
     ModifiersLoc[SECOND] = Loc;
   }
 
-  /// \brief Set schedule modifier location.
+  /// Set schedule modifier location.
   ///
   /// \param M Schedule modifier location.
   void setScheduleModifer(OpenMPScheduleClauseModifier M) {
@@ -807,28 +815,28 @@
     }
   }
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   ///
   /// \param Loc Location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Set schedule kind start location.
+  /// Set schedule kind start location.
   ///
   /// \param KLoc Schedule kind location.
   void setScheduleKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
 
-  /// \brief Set location of ','.
+  /// Set location of ','.
   ///
   /// \param Loc Location of ','.
   void setCommaLoc(SourceLocation Loc) { CommaLoc = Loc; }
 
-  /// \brief Set chunk size.
+  /// Set chunk size.
   ///
   /// \param E Chunk size.
   void setChunkSize(Expr *E) { ChunkSize = E; }
 
 public:
-  /// \brief Build 'schedule' clause with schedule kind \a Kind and chunk size
+  /// Build 'schedule' clause with schedule kind \a Kind and chunk size
   /// expression \a ChunkSize.
   ///
   /// \param StartLoc Starting location of the clause.
@@ -859,7 +867,7 @@
     ModifiersLoc[SECOND] = M2Loc;
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPScheduleClause()
       : OMPClause(OMPC_schedule, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {
@@ -867,42 +875,42 @@
     Modifiers[SECOND] = OMPC_SCHEDULE_MODIFIER_unknown;
   }
 
-  /// \brief Get kind of the clause.
+  /// Get kind of the clause.
   OpenMPScheduleClauseKind getScheduleKind() const { return Kind; }
 
-  /// \brief Get the first modifier of the clause.
+  /// Get the first modifier of the clause.
   OpenMPScheduleClauseModifier getFirstScheduleModifier() const {
     return Modifiers[FIRST];
   }
 
-  /// \brief Get the second modifier of the clause.
+  /// Get the second modifier of the clause.
   OpenMPScheduleClauseModifier getSecondScheduleModifier() const {
     return Modifiers[SECOND];
   }
 
-  /// \brief Get location of '('.
+  /// Get location of '('.
   SourceLocation getLParenLoc() { return LParenLoc; }
 
-  /// \brief Get kind location.
+  /// Get kind location.
   SourceLocation getScheduleKindLoc() { return KindLoc; }
 
-  /// \brief Get the first modifier location.
+  /// Get the first modifier location.
   SourceLocation getFirstScheduleModifierLoc() const {
     return ModifiersLoc[FIRST];
   }
 
-  /// \brief Get the second modifier location.
+  /// Get the second modifier location.
   SourceLocation getSecondScheduleModifierLoc() const {
     return ModifiersLoc[SECOND];
   }
 
-  /// \brief Get location of ','.
+  /// Get location of ','.
   SourceLocation getCommaLoc() { return CommaLoc; }
 
-  /// \brief Get chunk size.
+  /// Get chunk size.
   Expr *getChunkSize() { return ChunkSize; }
 
-  /// \brief Get chunk size.
+  /// Get chunk size.
   const Expr *getChunkSize() const { return ChunkSize; }
 
   child_range children() {
@@ -915,7 +923,7 @@
   }
 };
 
-/// \brief This represents 'ordered' clause in the '#pragma omp ...' directive.
+/// This represents 'ordered' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp for ordered (2)
@@ -925,17 +933,17 @@
 class OMPOrderedClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Number of for-loops.
+  /// Number of for-loops.
   Stmt *NumForLoops = nullptr;
 
-  /// \brief Set the number of associated for-loops.
+  /// Set the number of associated for-loops.
   void setNumForLoops(Expr *Num) { NumForLoops = Num; }
 
 public:
-  /// \brief Build 'ordered' clause.
+  /// Build 'ordered' clause.
   ///
   /// \param Num Expression, possibly associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -946,17 +954,17 @@
       : OMPClause(OMPC_ordered, StartLoc, EndLoc), LParenLoc(LParenLoc),
         NumForLoops(Num) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPOrderedClause()
       : OMPClause(OMPC_ordered, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return the number of associated for-loops.
+  /// Return the number of associated for-loops.
   Expr *getNumForLoops() const { return cast_or_null<Expr>(NumForLoops); }
 
   child_range children() { return child_range(&NumForLoops, &NumForLoops + 1); }
@@ -966,7 +974,7 @@
   }
 };
 
-/// \brief This represents 'nowait' clause in the '#pragma omp ...' directive.
+/// This represents 'nowait' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp for nowait
@@ -974,14 +982,14 @@
 /// In this example directive '#pragma omp for' has 'nowait' clause.
 class OMPNowaitClause : public OMPClause {
 public:
-  /// \brief Build 'nowait' clause.
+  /// Build 'nowait' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPNowaitClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_nowait, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPNowaitClause()
       : OMPClause(OMPC_nowait, SourceLocation(), SourceLocation()) {}
 
@@ -994,7 +1002,7 @@
   }
 };
 
-/// \brief This represents 'untied' clause in the '#pragma omp ...' directive.
+/// This represents 'untied' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp task untied
@@ -1002,14 +1010,14 @@
 /// In this example directive '#pragma omp task' has 'untied' clause.
 class OMPUntiedClause : public OMPClause {
 public:
-  /// \brief Build 'untied' clause.
+  /// Build 'untied' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPUntiedClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_untied, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPUntiedClause()
       : OMPClause(OMPC_untied, SourceLocation(), SourceLocation()) {}
 
@@ -1022,7 +1030,7 @@
   }
 };
 
-/// \brief This represents 'mergeable' clause in the '#pragma omp ...'
+/// This represents 'mergeable' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -1031,14 +1039,14 @@
 /// In this example directive '#pragma omp task' has 'mergeable' clause.
 class OMPMergeableClause : public OMPClause {
 public:
-  /// \brief Build 'mergeable' clause.
+  /// Build 'mergeable' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPMergeableClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_mergeable, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPMergeableClause()
       : OMPClause(OMPC_mergeable, SourceLocation(), SourceLocation()) {}
 
@@ -1051,7 +1059,7 @@
   }
 };
 
-/// \brief This represents 'read' clause in the '#pragma omp atomic' directive.
+/// This represents 'read' clause in the '#pragma omp atomic' directive.
 ///
 /// \code
 /// #pragma omp atomic read
@@ -1059,14 +1067,14 @@
 /// In this example directive '#pragma omp atomic' has 'read' clause.
 class OMPReadClause : public OMPClause {
 public:
-  /// \brief Build 'read' clause.
+  /// Build 'read' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPReadClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_read, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPReadClause() : OMPClause(OMPC_read, SourceLocation(), SourceLocation()) {}
 
   child_range children() {
@@ -1078,7 +1086,7 @@
   }
 };
 
-/// \brief This represents 'write' clause in the '#pragma omp atomic' directive.
+/// This represents 'write' clause in the '#pragma omp atomic' directive.
 ///
 /// \code
 /// #pragma omp atomic write
@@ -1086,14 +1094,14 @@
 /// In this example directive '#pragma omp atomic' has 'write' clause.
 class OMPWriteClause : public OMPClause {
 public:
-  /// \brief Build 'write' clause.
+  /// Build 'write' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPWriteClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_write, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPWriteClause()
       : OMPClause(OMPC_write, SourceLocation(), SourceLocation()) {}
 
@@ -1106,7 +1114,7 @@
   }
 };
 
-/// \brief This represents 'update' clause in the '#pragma omp atomic'
+/// This represents 'update' clause in the '#pragma omp atomic'
 /// directive.
 ///
 /// \code
@@ -1115,14 +1123,14 @@
 /// In this example directive '#pragma omp atomic' has 'update' clause.
 class OMPUpdateClause : public OMPClause {
 public:
-  /// \brief Build 'update' clause.
+  /// Build 'update' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPUpdateClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_update, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPUpdateClause()
       : OMPClause(OMPC_update, SourceLocation(), SourceLocation()) {}
 
@@ -1135,7 +1143,7 @@
   }
 };
 
-/// \brief This represents 'capture' clause in the '#pragma omp atomic'
+/// This represents 'capture' clause in the '#pragma omp atomic'
 /// directive.
 ///
 /// \code
@@ -1144,14 +1152,14 @@
 /// In this example directive '#pragma omp atomic' has 'capture' clause.
 class OMPCaptureClause : public OMPClause {
 public:
-  /// \brief Build 'capture' clause.
+  /// Build 'capture' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPCaptureClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_capture, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPCaptureClause()
       : OMPClause(OMPC_capture, SourceLocation(), SourceLocation()) {}
 
@@ -1164,7 +1172,7 @@
   }
 };
 
-/// \brief This represents 'seq_cst' clause in the '#pragma omp atomic'
+/// This represents 'seq_cst' clause in the '#pragma omp atomic'
 /// directive.
 ///
 /// \code
@@ -1173,14 +1181,14 @@
 /// In this example directive '#pragma omp atomic' has 'seq_cst' clause.
 class OMPSeqCstClause : public OMPClause {
 public:
-  /// \brief Build 'seq_cst' clause.
+  /// Build 'seq_cst' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPSeqCstClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_seq_cst, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPSeqCstClause()
       : OMPClause(OMPC_seq_cst, SourceLocation(), SourceLocation()) {}
 
@@ -1193,7 +1201,7 @@
   }
 };
 
-/// \brief This represents clause 'private' in the '#pragma omp ...' directives.
+/// This represents clause 'private' in the '#pragma omp ...' directives.
 ///
 /// \code
 /// #pragma omp parallel private(a,b)
@@ -1207,7 +1215,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1218,7 +1226,7 @@
       : OMPVarListClause<OMPPrivateClause>(OMPC_private, StartLoc, LParenLoc,
                                            EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPPrivateClause(unsigned N)
@@ -1226,12 +1234,12 @@
                                            SourceLocation(), SourceLocation(),
                                            N) {}
 
-  /// \brief Sets the list of references to private copies with initializers for
+  /// Sets the list of references to private copies with initializers for
   /// new private variables.
   /// \param VL List of references.
   void setPrivateCopies(ArrayRef<Expr *> VL);
 
-  /// \brief Gets the list of references to private copies with initializers for
+  /// Gets the list of references to private copies with initializers for
   /// new private variables.
   MutableArrayRef<Expr *> getPrivateCopies() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
@@ -1241,7 +1249,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -1254,7 +1262,7 @@
                                   SourceLocation EndLoc, ArrayRef<Expr *> VL,
                                   ArrayRef<Expr *> PrivateVL);
 
-  /// \brief Creates an empty clause with the place for \a N variables.
+  /// Creates an empty clause with the place for \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -1286,7 +1294,7 @@
   }
 };
 
-/// \brief This represents clause 'firstprivate' in the '#pragma omp ...'
+/// This represents clause 'firstprivate' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -1302,7 +1310,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1314,7 +1322,7 @@
                                                 LParenLoc, EndLoc, N),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPFirstprivateClause(unsigned N)
@@ -1323,12 +1331,12 @@
             SourceLocation(), N),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the list of references to private copies with initializers for
+  /// Sets the list of references to private copies with initializers for
   /// new private variables.
   /// \param VL List of references.
   void setPrivateCopies(ArrayRef<Expr *> VL);
 
-  /// \brief Gets the list of references to private copies with initializers for
+  /// Gets the list of references to private copies with initializers for
   /// new private variables.
   MutableArrayRef<Expr *> getPrivateCopies() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
@@ -1337,12 +1345,12 @@
     return llvm::makeArrayRef(varlist_end(), varlist_size());
   }
 
-  /// \brief Sets the list of references to initializer variables for new
+  /// Sets the list of references to initializer variables for new
   /// private variables.
   /// \param VL List of references.
   void setInits(ArrayRef<Expr *> VL);
 
-  /// \brief Gets the list of references to initializer variables for new
+  /// Gets the list of references to initializer variables for new
   /// private variables.
   MutableArrayRef<Expr *> getInits() {
     return MutableArrayRef<Expr *>(getPrivateCopies().end(), varlist_size());
@@ -1352,7 +1360,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -1370,7 +1378,7 @@
          SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> PrivateVL,
          ArrayRef<Expr *> InitVL, Stmt *PreInit);
 
-  /// \brief Creates an empty clause with the place for \a N variables.
+  /// Creates an empty clause with the place for \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -1413,7 +1421,7 @@
   }
 };
 
-/// \brief This represents clause 'lastprivate' in the '#pragma omp ...'
+/// This represents clause 'lastprivate' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -1445,7 +1453,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1457,7 +1465,7 @@
                                                LParenLoc, EndLoc, N),
         OMPClauseWithPostUpdate(this) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPLastprivateClause(unsigned N)
@@ -1466,7 +1474,7 @@
             SourceLocation(), N),
         OMPClauseWithPostUpdate(this) {}
 
-  /// \brief Get the list of helper expressions for initialization of private
+  /// Get the list of helper expressions for initialization of private
   /// copies for lastprivate variables.
   MutableArrayRef<Expr *> getPrivateCopies() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
@@ -1475,13 +1483,13 @@
     return llvm::makeArrayRef(varlist_end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent private variables (for arrays, single
   /// array element) in the final assignment statement performed by the
   /// lastprivate clause.
   void setSourceExprs(ArrayRef<Expr *> SrcExprs);
 
-  /// \brief Get the list of helper source expressions.
+  /// Get the list of helper source expressions.
   MutableArrayRef<Expr *> getSourceExprs() {
     return MutableArrayRef<Expr *>(getPrivateCopies().end(), varlist_size());
   }
@@ -1489,13 +1497,13 @@
     return llvm::makeArrayRef(getPrivateCopies().end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent original variables (for arrays, single
   /// array element) in the final assignment statement performed by the
   /// lastprivate clause.
   void setDestinationExprs(ArrayRef<Expr *> DstExprs);
 
-  /// \brief Get the list of helper destination expressions.
+  /// Get the list of helper destination expressions.
   MutableArrayRef<Expr *> getDestinationExprs() {
     return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
   }
@@ -1503,12 +1511,12 @@
     return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
   }
 
-  /// \brief Set list of helper assignment expressions, required for proper
+  /// Set list of helper assignment expressions, required for proper
   /// codegen of the clause. These expressions are assignment expressions that
   /// assign private copy of the variable to original variable.
   void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
 
-  /// \brief Get the list of helper assignment expressions.
+  /// Get the list of helper assignment expressions.
   MutableArrayRef<Expr *> getAssignmentOps() {
     return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
   }
@@ -1517,7 +1525,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -1547,7 +1555,7 @@
          ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps,
          Stmt *PreInit, Expr *PostUpdate);
 
-  /// \brief Creates an empty clause with the place for \a N variables.
+  /// Creates an empty clause with the place for \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -1559,7 +1567,7 @@
   using helper_expr_const_range =
       llvm::iterator_range<helper_expr_const_iterator>;
 
-  /// \brief Set list of helper expressions, required for generation of private
+  /// Set list of helper expressions, required for generation of private
   /// copies of original lastprivate variables.
   void setPrivateCopies(ArrayRef<Expr *> PrivateCopies);
 
@@ -1612,7 +1620,7 @@
   }
 };
 
-/// \brief This represents clause 'shared' in the '#pragma omp ...' directives.
+/// This represents clause 'shared' in the '#pragma omp ...' directives.
 ///
 /// \code
 /// #pragma omp parallel shared(a,b)
@@ -1625,7 +1633,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1636,7 +1644,7 @@
       : OMPVarListClause<OMPSharedClause>(OMPC_shared, StartLoc, LParenLoc,
                                           EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPSharedClause(unsigned N)
@@ -1645,7 +1653,7 @@
                                           N) {}
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -1656,7 +1664,7 @@
                                  SourceLocation LParenLoc,
                                  SourceLocation EndLoc, ArrayRef<Expr *> VL);
 
-  /// \brief Creates an empty clause with \a N variables.
+  /// Creates an empty clause with \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -1672,7 +1680,7 @@
   }
 };
 
-/// \brief This represents clause 'reduction' in the '#pragma omp ...'
+/// This represents clause 'reduction' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -1688,16 +1696,16 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Location of ':'.
+  /// Location of ':'.
   SourceLocation ColonLoc;
 
-  /// \brief Nested name specifier for C++.
+  /// Nested name specifier for C++.
   NestedNameSpecifierLoc QualifierLoc;
 
-  /// \brief Name of custom operator.
+  /// Name of custom operator.
   DeclarationNameInfo NameInfo;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1715,7 +1723,7 @@
         OMPClauseWithPostUpdate(this), ColonLoc(ColonLoc),
         QualifierLoc(QualifierLoc), NameInfo(NameInfo) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPReductionClause(unsigned N)
@@ -1724,21 +1732,21 @@
                                              N),
         OMPClauseWithPostUpdate(this) {}
 
-  /// \brief Sets location of ':' symbol in clause.
+  /// Sets location of ':' symbol in clause.
   void setColonLoc(SourceLocation CL) { ColonLoc = CL; }
 
-  /// \brief Sets the name info for specified reduction identifier.
+  /// Sets the name info for specified reduction identifier.
   void setNameInfo(DeclarationNameInfo DNI) { NameInfo = DNI; }
 
-  /// \brief Sets the nested name specifier.
+  /// Sets the nested name specifier.
   void setQualifierLoc(NestedNameSpecifierLoc NSL) { QualifierLoc = NSL; }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent private copy of the reduction
   /// variable.
   void setPrivates(ArrayRef<Expr *> Privates);
 
-  /// \brief Get the list of helper privates.
+  /// Get the list of helper privates.
   MutableArrayRef<Expr *> getPrivates() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
   }
@@ -1746,12 +1754,12 @@
     return llvm::makeArrayRef(varlist_end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent LHS expression in the final
   /// reduction expression performed by the reduction clause.
   void setLHSExprs(ArrayRef<Expr *> LHSExprs);
 
-  /// \brief Get the list of helper LHS expressions.
+  /// Get the list of helper LHS expressions.
   MutableArrayRef<Expr *> getLHSExprs() {
     return MutableArrayRef<Expr *>(getPrivates().end(), varlist_size());
   }
@@ -1759,14 +1767,14 @@
     return llvm::makeArrayRef(getPrivates().end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent RHS expression in the final
   /// reduction expression performed by the reduction clause.
   /// Also, variables in these expressions are used for proper initialization of
   /// reduction copies.
   void setRHSExprs(ArrayRef<Expr *> RHSExprs);
 
-  /// \brief Get the list of helper destination expressions.
+  /// Get the list of helper destination expressions.
   MutableArrayRef<Expr *> getRHSExprs() {
     return MutableArrayRef<Expr *>(getLHSExprs().end(), varlist_size());
   }
@@ -1774,13 +1782,13 @@
     return llvm::makeArrayRef(getLHSExprs().end(), varlist_size());
   }
 
-  /// \brief Set list of helper reduction expressions, required for proper
+  /// Set list of helper reduction expressions, required for proper
   /// codegen of the clause. These expressions are binary expressions or
   /// operator/custom reduction call that calculates new value from source
   /// helper expressions to destination helper expressions.
   void setReductionOps(ArrayRef<Expr *> ReductionOps);
 
-  /// \brief Get the list of helper reduction expressions.
+  /// Get the list of helper reduction expressions.
   MutableArrayRef<Expr *> getReductionOps() {
     return MutableArrayRef<Expr *>(getRHSExprs().end(), varlist_size());
   }
@@ -1789,7 +1797,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -1829,19 +1837,19 @@
          ArrayRef<Expr *> LHSExprs, ArrayRef<Expr *> RHSExprs,
          ArrayRef<Expr *> ReductionOps, Stmt *PreInit, Expr *PostUpdate);
 
-  /// \brief Creates an empty clause with the place for \a N variables.
+  /// Creates an empty clause with the place for \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
   static OMPReductionClause *CreateEmpty(const ASTContext &C, unsigned N);
 
-  /// \brief Gets location of ':' symbol in clause.
+  /// Gets location of ':' symbol in clause.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
-  /// \brief Gets the name info for specified reduction identifier.
+  /// Gets the name info for specified reduction identifier.
   const DeclarationNameInfo &getNameInfo() const { return NameInfo; }
 
-  /// \brief Gets the nested name specifier.
+  /// Gets the nested name specifier.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
   using helper_expr_iterator = MutableArrayRef<Expr *>::iterator;
@@ -2357,7 +2365,7 @@
   }
 };
 
-/// \brief This represents clause 'linear' in the '#pragma omp ...'
+/// This represents clause 'linear' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -2373,22 +2381,22 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Modifier of 'linear' clause.
+  /// Modifier of 'linear' clause.
   OpenMPLinearClauseKind Modifier = OMPC_LINEAR_val;
 
-  /// \brief Location of linear modifier if any.
+  /// Location of linear modifier if any.
   SourceLocation ModifierLoc;
 
-  /// \brief Location of ':'.
+  /// Location of ':'.
   SourceLocation ColonLoc;
 
-  /// \brief Sets the linear step for clause.
+  /// Sets the linear step for clause.
   void setStep(Expr *Step) { *(getFinals().end()) = Step; }
 
-  /// \brief Sets the expression to calculate linear step for clause.
+  /// Sets the expression to calculate linear step for clause.
   void setCalcStep(Expr *CalcStep) { *(getFinals().end() + 1) = CalcStep; }
 
-  /// \brief Build 'linear' clause with given number of variables \a NumVars.
+  /// Build 'linear' clause with given number of variables \a NumVars.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -2404,7 +2412,7 @@
         OMPClauseWithPostUpdate(this), Modifier(Modifier),
         ModifierLoc(ModifierLoc), ColonLoc(ColonLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param NumVars Number of variables.
   explicit OMPLinearClause(unsigned NumVars)
@@ -2413,7 +2421,7 @@
                                           NumVars),
         OMPClauseWithPostUpdate(this) {}
 
-  /// \brief Gets the list of initial values for linear variables.
+  /// Gets the list of initial values for linear variables.
   ///
   /// There are NumVars expressions with initial values allocated after the
   /// varlist, they are followed by NumVars update expressions (used to update
@@ -2439,7 +2447,7 @@
     return llvm::makeArrayRef(getPrivates().end(), varlist_size());
   }
 
-  /// \brief Sets the list of update expressions for linear variables.
+  /// Sets the list of update expressions for linear variables.
   MutableArrayRef<Expr *> getUpdates() {
     return MutableArrayRef<Expr *>(getInits().end(), varlist_size());
   }
@@ -2447,7 +2455,7 @@
     return llvm::makeArrayRef(getInits().end(), varlist_size());
   }
 
-  /// \brief Sets the list of final update expressions for linear variables.
+  /// Sets the list of final update expressions for linear variables.
   MutableArrayRef<Expr *> getFinals() {
     return MutableArrayRef<Expr *>(getUpdates().end(), varlist_size());
   }
@@ -2455,16 +2463,16 @@
     return llvm::makeArrayRef(getUpdates().end(), varlist_size());
   }
 
-  /// \brief Sets the list of the copies of original linear variables.
+  /// Sets the list of the copies of original linear variables.
   /// \param PL List of expressions.
   void setPrivates(ArrayRef<Expr *> PL);
 
-  /// \brief Sets the list of the initial values for linear variables.
+  /// Sets the list of the initial values for linear variables.
   /// \param IL List of expressions.
   void setInits(ArrayRef<Expr *> IL);
 
 public:
-  /// \brief Creates clause with a list of variables \a VL and a linear step
+  /// Creates clause with a list of variables \a VL and a linear step
   /// \a Step.
   ///
   /// \param C AST Context.
@@ -2490,47 +2498,47 @@
          ArrayRef<Expr *> PL, ArrayRef<Expr *> IL, Expr *Step, Expr *CalcStep,
          Stmt *PreInit, Expr *PostUpdate);
 
-  /// \brief Creates an empty clause with the place for \a NumVars variables.
+  /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
   /// \param NumVars Number of variables.
   static OMPLinearClause *CreateEmpty(const ASTContext &C, unsigned NumVars);
 
-  /// \brief Set modifier.
+  /// Set modifier.
   void setModifier(OpenMPLinearClauseKind Kind) { Modifier = Kind; }
 
-  /// \brief Return modifier.
+  /// Return modifier.
   OpenMPLinearClauseKind getModifier() const { return Modifier; }
 
-  /// \brief Set modifier location.
+  /// Set modifier location.
   void setModifierLoc(SourceLocation Loc) { ModifierLoc = Loc; }
 
-  /// \brief Return modifier location.
+  /// Return modifier location.
   SourceLocation getModifierLoc() const { return ModifierLoc; }
 
-  /// \brief Sets the location of ':'.
+  /// Sets the location of ':'.
   void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
 
-  /// \brief Returns the location of ':'.
+  /// Returns the location of ':'.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
-  /// \brief Returns linear step.
+  /// Returns linear step.
   Expr *getStep() { return *(getFinals().end()); }
 
-  /// \brief Returns linear step.
+  /// Returns linear step.
   const Expr *getStep() const { return *(getFinals().end()); }
 
-  /// \brief Returns expression to calculate linear step.
+  /// Returns expression to calculate linear step.
   Expr *getCalcStep() { return *(getFinals().end() + 1); }
 
-  /// \brief Returns expression to calculate linear step.
+  /// Returns expression to calculate linear step.
   const Expr *getCalcStep() const { return *(getFinals().end() + 1); }
 
-  /// \brief Sets the list of update expressions for linear variables.
+  /// Sets the list of update expressions for linear variables.
   /// \param UL List of expressions.
   void setUpdates(ArrayRef<Expr *> UL);
 
-  /// \brief Sets the list of final update expressions for linear variables.
+  /// Sets the list of final update expressions for linear variables.
   /// \param FL List of expressions.
   void setFinals(ArrayRef<Expr *> FL);
 
@@ -2596,7 +2604,7 @@
   }
 };
 
-/// \brief This represents clause 'aligned' in the '#pragma omp ...'
+/// This represents clause 'aligned' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -2611,13 +2619,13 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Location of ':'.
+  /// Location of ':'.
   SourceLocation ColonLoc;
 
-  /// \brief Sets the alignment for clause.
+  /// Sets the alignment for clause.
   void setAlignment(Expr *A) { *varlist_end() = A; }
 
-  /// \brief Build 'aligned' clause with given number of variables \a NumVars.
+  /// Build 'aligned' clause with given number of variables \a NumVars.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -2631,7 +2639,7 @@
                                            EndLoc, NumVars),
         ColonLoc(ColonLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param NumVars Number of variables.
   explicit OMPAlignedClause(unsigned NumVars)
@@ -2640,7 +2648,7 @@
                                            NumVars) {}
 
 public:
-  /// \brief Creates clause with a list of variables \a VL and alignment \a A.
+  /// Creates clause with a list of variables \a VL and alignment \a A.
   ///
   /// \param C AST Context.
   /// \param StartLoc Starting location of the clause.
@@ -2655,22 +2663,22 @@
                                   SourceLocation EndLoc, ArrayRef<Expr *> VL,
                                   Expr *A);
 
-  /// \brief Creates an empty clause with the place for \a NumVars variables.
+  /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
   /// \param NumVars Number of variables.
   static OMPAlignedClause *CreateEmpty(const ASTContext &C, unsigned NumVars);
 
-  /// \brief Sets the location of ':'.
+  /// Sets the location of ':'.
   void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
 
-  /// \brief Returns the location of ':'.
+  /// Returns the location of ':'.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
-  /// \brief Returns alignment.
+  /// Returns alignment.
   Expr *getAlignment() { return *varlist_end(); }
 
-  /// \brief Returns alignment.
+  /// Returns alignment.
   const Expr *getAlignment() const { return *varlist_end(); }
 
   child_range children() {
@@ -2683,7 +2691,7 @@
   }
 };
 
-/// \brief This represents clause 'copyin' in the '#pragma omp ...' directives.
+/// This represents clause 'copyin' in the '#pragma omp ...' directives.
 ///
 /// \code
 /// #pragma omp parallel copyin(a,b)
@@ -2710,7 +2718,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -2721,7 +2729,7 @@
       : OMPVarListClause<OMPCopyinClause>(OMPC_copyin, StartLoc, LParenLoc,
                                           EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPCopyinClause(unsigned N)
@@ -2729,12 +2737,12 @@
                                           SourceLocation(), SourceLocation(),
                                           N) {}
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent source expression in the final
   /// assignment statement performed by the copyin clause.
   void setSourceExprs(ArrayRef<Expr *> SrcExprs);
 
-  /// \brief Get the list of helper source expressions.
+  /// Get the list of helper source expressions.
   MutableArrayRef<Expr *> getSourceExprs() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
   }
@@ -2742,12 +2750,12 @@
     return llvm::makeArrayRef(varlist_end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent destination expression in the final
   /// assignment statement performed by the copyin clause.
   void setDestinationExprs(ArrayRef<Expr *> DstExprs);
 
-  /// \brief Get the list of helper destination expressions.
+  /// Get the list of helper destination expressions.
   MutableArrayRef<Expr *> getDestinationExprs() {
     return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
   }
@@ -2755,13 +2763,13 @@
     return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
   }
 
-  /// \brief Set list of helper assignment expressions, required for proper
+  /// Set list of helper assignment expressions, required for proper
   /// codegen of the clause. These expressions are assignment expressions that
   /// assign source helper expressions to destination helper expressions
   /// correspondingly.
   void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
 
-  /// \brief Get the list of helper assignment expressions.
+  /// Get the list of helper assignment expressions.
   MutableArrayRef<Expr *> getAssignmentOps() {
     return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
   }
@@ -2770,7 +2778,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -2796,7 +2804,7 @@
          SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
          ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
 
-  /// \brief Creates an empty clause with \a N variables.
+  /// Creates an empty clause with \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -2847,7 +2855,7 @@
   }
 };
 
-/// \brief This represents clause 'copyprivate' in the '#pragma omp ...'
+/// This represents clause 'copyprivate' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -2862,7 +2870,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -2873,7 +2881,7 @@
       : OMPVarListClause<OMPCopyprivateClause>(OMPC_copyprivate, StartLoc,
                                                LParenLoc, EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPCopyprivateClause(unsigned N)
@@ -2881,12 +2889,12 @@
             OMPC_copyprivate, SourceLocation(), SourceLocation(),
             SourceLocation(), N) {}
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent source expression in the final
   /// assignment statement performed by the copyprivate clause.
   void setSourceExprs(ArrayRef<Expr *> SrcExprs);
 
-  /// \brief Get the list of helper source expressions.
+  /// Get the list of helper source expressions.
   MutableArrayRef<Expr *> getSourceExprs() {
     return MutableArrayRef<Expr *>(varlist_end(), varlist_size());
   }
@@ -2894,12 +2902,12 @@
     return llvm::makeArrayRef(varlist_end(), varlist_size());
   }
 
-  /// \brief Set list of helper expressions, required for proper codegen of the
+  /// Set list of helper expressions, required for proper codegen of the
   /// clause. These expressions represent destination expression in the final
   /// assignment statement performed by the copyprivate clause.
   void setDestinationExprs(ArrayRef<Expr *> DstExprs);
 
-  /// \brief Get the list of helper destination expressions.
+  /// Get the list of helper destination expressions.
   MutableArrayRef<Expr *> getDestinationExprs() {
     return MutableArrayRef<Expr *>(getSourceExprs().end(), varlist_size());
   }
@@ -2907,13 +2915,13 @@
     return llvm::makeArrayRef(getSourceExprs().end(), varlist_size());
   }
 
-  /// \brief Set list of helper assignment expressions, required for proper
+  /// Set list of helper assignment expressions, required for proper
   /// codegen of the clause. These expressions are assignment expressions that
   /// assign source helper expressions to destination helper expressions
   /// correspondingly.
   void setAssignmentOps(ArrayRef<Expr *> AssignmentOps);
 
-  /// \brief Get the list of helper assignment expressions.
+  /// Get the list of helper assignment expressions.
   MutableArrayRef<Expr *> getAssignmentOps() {
     return MutableArrayRef<Expr *>(getDestinationExprs().end(), varlist_size());
   }
@@ -2922,7 +2930,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -2947,7 +2955,7 @@
          SourceLocation EndLoc, ArrayRef<Expr *> VL, ArrayRef<Expr *> SrcExprs,
          ArrayRef<Expr *> DstExprs, ArrayRef<Expr *> AssignmentOps);
 
-  /// \brief Creates an empty clause with \a N variables.
+  /// Creates an empty clause with \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -2998,7 +3006,7 @@
   }
 };
 
-/// \brief This represents implicit clause 'flush' for the '#pragma omp flush'
+/// This represents implicit clause 'flush' for the '#pragma omp flush'
 /// directive.
 /// This clause does not exist by itself, it can be only as a part of 'omp
 /// flush' directive. This clause is introduced to keep the original structure
@@ -3016,7 +3024,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -3027,7 +3035,7 @@
       : OMPVarListClause<OMPFlushClause>(OMPC_flush, StartLoc, LParenLoc,
                                          EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPFlushClause(unsigned N)
@@ -3036,7 +3044,7 @@
                                          N) {}
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -3047,7 +3055,7 @@
                                 SourceLocation LParenLoc, SourceLocation EndLoc,
                                 ArrayRef<Expr *> VL);
 
-  /// \brief Creates an empty clause with \a N variables.
+  /// Creates an empty clause with \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
@@ -3063,7 +3071,7 @@
   }
 };
 
-/// \brief This represents implicit clause 'depend' for the '#pragma omp task'
+/// This represents implicit clause 'depend' for the '#pragma omp task'
 /// directive.
 ///
 /// \code
@@ -3078,16 +3086,16 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Dependency type (one of in, out, inout).
+  /// Dependency type (one of in, out, inout).
   OpenMPDependClauseKind DepKind = OMPC_DEPEND_unknown;
 
-  /// \brief Dependency type location.
+  /// Dependency type location.
   SourceLocation DepLoc;
 
-  /// \brief Colon location.
+  /// Colon location.
   SourceLocation ColonLoc;
 
-  /// \brief Build clause with number of variables \a N.
+  /// Build clause with number of variables \a N.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -3098,7 +3106,7 @@
       : OMPVarListClause<OMPDependClause>(OMPC_depend, StartLoc, LParenLoc,
                                           EndLoc, N) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param N Number of variables.
   explicit OMPDependClause(unsigned N)
@@ -3106,17 +3114,17 @@
                                           SourceLocation(), SourceLocation(),
                                           N) {}
 
-  /// \brief Set dependency kind.
+  /// Set dependency kind.
   void setDependencyKind(OpenMPDependClauseKind K) { DepKind = K; }
 
-  /// \brief Set dependency kind and its location.
+  /// Set dependency kind and its location.
   void setDependencyLoc(SourceLocation Loc) { DepLoc = Loc; }
 
-  /// \brief Set colon location.
+  /// Set colon location.
   void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -3131,19 +3139,19 @@
          SourceLocation EndLoc, OpenMPDependClauseKind DepKind,
          SourceLocation DepLoc, SourceLocation ColonLoc, ArrayRef<Expr *> VL);
 
-  /// \brief Creates an empty clause with \a N variables.
+  /// Creates an empty clause with \a N variables.
   ///
   /// \param C AST context.
   /// \param N The number of variables.
   static OMPDependClause *CreateEmpty(const ASTContext &C, unsigned N);
 
-  /// \brief Get dependency type.
+  /// Get dependency type.
   OpenMPDependClauseKind getDependencyKind() const { return DepKind; }
 
-  /// \brief Get dependency type location.
+  /// Get dependency type location.
   SourceLocation getDependencyLoc() const { return DepLoc; }
 
-  /// \brief Get colon location.
+  /// Get colon location.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
   /// Set the loop counter value for the depend clauses with 'sink|source' kind
@@ -3166,7 +3174,7 @@
   }
 };
 
-/// \brief This represents 'device' clause in the '#pragma omp ...'
+/// This represents 'device' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -3177,19 +3185,19 @@
 class OMPDeviceClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Device number.
+  /// Device number.
   Stmt *Device = nullptr;
 
-  /// \brief Set the device number.
+  /// Set the device number.
   ///
   /// \param E Device number.
   void setDevice(Expr *E) { Device = E; }
 
 public:
-  /// \brief Build 'device' clause.
+  /// Build 'device' clause.
   ///
   /// \param E Expression associated with this clause.
   /// \param CaptureRegion Innermost OpenMP region where expressions in this
@@ -3205,21 +3213,21 @@
     setPreInitStmt(HelperE, CaptureRegion);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPDeviceClause()
       : OMPClause(OMPC_device, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return device number.
+  /// Return device number.
   Expr *getDevice() { return cast<Expr>(Device); }
 
-  /// \brief Return device number.
+  /// Return device number.
   Expr *getDevice() const { return cast<Expr>(Device); }
 
   child_range children() { return child_range(&Device, &Device + 1); }
@@ -3229,7 +3237,7 @@
   }
 };
 
-/// \brief This represents 'threads' clause in the '#pragma omp ...' directive.
+/// This represents 'threads' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp ordered threads
@@ -3237,14 +3245,14 @@
 /// In this example directive '#pragma omp ordered' has simple 'threads' clause.
 class OMPThreadsClause : public OMPClause {
 public:
-  /// \brief Build 'threads' clause.
+  /// Build 'threads' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPThreadsClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_threads, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPThreadsClause()
       : OMPClause(OMPC_threads, SourceLocation(), SourceLocation()) {}
 
@@ -3257,7 +3265,7 @@
   }
 };
 
-/// \brief This represents 'simd' clause in the '#pragma omp ...' directive.
+/// This represents 'simd' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp ordered simd
@@ -3265,14 +3273,14 @@
 /// In this example directive '#pragma omp ordered' has simple 'simd' clause.
 class OMPSIMDClause : public OMPClause {
 public:
-  /// \brief Build 'simd' clause.
+  /// Build 'simd' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPSIMDClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_simd, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPSIMDClause() : OMPClause(OMPC_simd, SourceLocation(), SourceLocation()) {}
 
   child_range children() {
@@ -3284,23 +3292,23 @@
   }
 };
 
-/// \brief Struct that defines common infrastructure to handle mappable
+/// Struct that defines common infrastructure to handle mappable
 /// expressions used in OpenMP clauses.
 class OMPClauseMappableExprCommon {
 public:
-  // \brief Class that represents a component of a mappable expression. E.g.
-  // for an expression S.a, the first component is a declaration reference
-  // expression associated with 'S' and the second is a member expression
-  // associated with the field declaration 'a'. If the expression is an array
-  // subscript it may not have any associated declaration. In that case the
-  // associated declaration is set to nullptr.
+  /// Class that represents a component of a mappable expression. E.g.
+  /// for an expression S.a, the first component is a declaration reference
+  /// expression associated with 'S' and the second is a member expression
+  /// associated with the field declaration 'a'. If the expression is an array
+  /// subscript it may not have any associated declaration. In that case the
+  /// associated declaration is set to nullptr.
   class MappableComponent {
-    // \brief Expression associated with the component.
+    /// Expression associated with the component.
     Expr *AssociatedExpression = nullptr;
 
-    // \brief Declaration associated with the declaration. If the component does
-    // not have a declaration (e.g. array subscripts or section), this is set to
-    // nullptr.
+    /// Declaration associated with the declaration. If the component does
+    /// not have a declaration (e.g. array subscripts or section), this is set
+    /// to nullptr.
     ValueDecl *AssociatedDeclaration = nullptr;
 
   public:
@@ -3320,29 +3328,29 @@
     }
   };
 
-  // \brief List of components of an expression. This first one is the whole
+  // List of components of an expression. This first one is the whole
   // expression and the last one is the base expression.
   using MappableExprComponentList = SmallVector<MappableComponent, 8>;
   using MappableExprComponentListRef = ArrayRef<MappableComponent>;
 
-  // \brief List of all component lists associated to the same base declaration.
+  // List of all component lists associated to the same base declaration.
   // E.g. if both 'S.a' and 'S.b' are a mappable expressions, each will have
   // their component list but the same base declaration 'S'.
   using MappableExprComponentLists = SmallVector<MappableExprComponentList, 8>;
   using MappableExprComponentListsRef = ArrayRef<MappableExprComponentList>;
 
 protected:
-  // \brief Return the total number of elements in a list of component lists.
+  // Return the total number of elements in a list of component lists.
   static unsigned
   getComponentsTotalNumber(MappableExprComponentListsRef ComponentLists);
 
-  // \brief Return the total number of elements in a list of declarations. All
+  // Return the total number of elements in a list of declarations. All
   // declarations are expected to be canonical.
   static unsigned
-  getUniqueDeclarationsTotalNumber(ArrayRef<ValueDecl *> Declarations);
+  getUniqueDeclarationsTotalNumber(ArrayRef<const ValueDecl *> Declarations);
 };
 
-/// \brief This represents clauses with a list of expressions that are mappable.
+/// This represents clauses with a list of expressions that are mappable.
 /// Examples of these clauses are 'map' in
 /// '#pragma omp target [enter|exit] [data]...' directives, and  'to' and 'from
 /// in '#pragma omp target update...' directives.
@@ -3351,17 +3359,17 @@
                                   public OMPClauseMappableExprCommon {
   friend class OMPClauseReader;
 
-  /// \brief Number of unique declarations in this clause.
+  /// Number of unique declarations in this clause.
   unsigned NumUniqueDeclarations;
 
-  /// \brief Number of component lists in this clause.
+  /// Number of component lists in this clause.
   unsigned NumComponentLists;
 
-  /// \brief Total number of components in this clause.
+  /// Total number of components in this clause.
   unsigned NumComponents;
 
 protected:
-  /// \brief Build a clause for \a NumUniqueDeclarations declarations, \a
+  /// Build a clause for \a NumUniqueDeclarations declarations, \a
   /// NumComponentLists total component lists, and \a NumComponents total
   /// components.
   ///
@@ -3383,7 +3391,7 @@
         NumUniqueDeclarations(NumUniqueDeclarations),
         NumComponentLists(NumComponentLists), NumComponents(NumComponents) {}
 
-  /// \brief Get the unique declarations that are in the trailing objects of the
+  /// Get the unique declarations that are in the trailing objects of the
   /// class.
   MutableArrayRef<ValueDecl *> getUniqueDeclsRef() {
     return MutableArrayRef<ValueDecl *>(
@@ -3391,7 +3399,7 @@
         NumUniqueDeclarations);
   }
 
-  /// \brief Get the unique declarations that are in the trailing objects of the
+  /// Get the unique declarations that are in the trailing objects of the
   /// class.
   ArrayRef<ValueDecl *> getUniqueDeclsRef() const {
     return ArrayRef<ValueDecl *>(
@@ -3400,7 +3408,7 @@
         NumUniqueDeclarations);
   }
 
-  /// \brief Set the unique declarations that are in the trailing objects of the
+  /// Set the unique declarations that are in the trailing objects of the
   /// class.
   void setUniqueDecls(ArrayRef<ValueDecl *> UDs) {
     assert(UDs.size() == NumUniqueDeclarations &&
@@ -3408,7 +3416,7 @@
     std::copy(UDs.begin(), UDs.end(), getUniqueDeclsRef().begin());
   }
 
-  /// \brief Get the number of lists per declaration that are in the trailing
+  /// Get the number of lists per declaration that are in the trailing
   /// objects of the class.
   MutableArrayRef<unsigned> getDeclNumListsRef() {
     return MutableArrayRef<unsigned>(
@@ -3416,7 +3424,7 @@
         NumUniqueDeclarations);
   }
 
-  /// \brief Get the number of lists per declaration that are in the trailing
+  /// Get the number of lists per declaration that are in the trailing
   /// objects of the class.
   ArrayRef<unsigned> getDeclNumListsRef() const {
     return ArrayRef<unsigned>(
@@ -3424,7 +3432,7 @@
         NumUniqueDeclarations);
   }
 
-  /// \brief Set the number of lists per declaration that are in the trailing
+  /// Set the number of lists per declaration that are in the trailing
   /// objects of the class.
   void setDeclNumLists(ArrayRef<unsigned> DNLs) {
     assert(DNLs.size() == NumUniqueDeclarations &&
@@ -3432,7 +3440,7 @@
     std::copy(DNLs.begin(), DNLs.end(), getDeclNumListsRef().begin());
   }
 
-  /// \brief Get the cumulative component lists sizes that are in the trailing
+  /// Get the cumulative component lists sizes that are in the trailing
   /// objects of the class. They are appended after the number of lists.
   MutableArrayRef<unsigned> getComponentListSizesRef() {
     return MutableArrayRef<unsigned>(
@@ -3441,7 +3449,7 @@
         NumComponentLists);
   }
 
-  /// \brief Get the cumulative component lists sizes that are in the trailing
+  /// Get the cumulative component lists sizes that are in the trailing
   /// objects of the class. They are appended after the number of lists.
   ArrayRef<unsigned> getComponentListSizesRef() const {
     return ArrayRef<unsigned>(
@@ -3450,7 +3458,7 @@
         NumComponentLists);
   }
 
-  /// \brief Set the cumulative component lists sizes that are in the trailing
+  /// Set the cumulative component lists sizes that are in the trailing
   /// objects of the class.
   void setComponentListSizes(ArrayRef<unsigned> CLSs) {
     assert(CLSs.size() == NumComponentLists &&
@@ -3458,7 +3466,7 @@
     std::copy(CLSs.begin(), CLSs.end(), getComponentListSizesRef().begin());
   }
 
-  /// \brief Get the components that are in the trailing objects of the class.
+  /// Get the components that are in the trailing objects of the class.
   MutableArrayRef<MappableComponent> getComponentsRef() {
     return MutableArrayRef<MappableComponent>(
         static_cast<T *>(this)
@@ -3466,7 +3474,7 @@
         NumComponents);
   }
 
-  /// \brief Get the components that are in the trailing objects of the class.
+  /// Get the components that are in the trailing objects of the class.
   ArrayRef<MappableComponent> getComponentsRef() const {
     return ArrayRef<MappableComponent>(
         static_cast<const T *>(this)
@@ -3474,7 +3482,7 @@
         NumComponents);
   }
 
-  /// \brief Set the components that are in the trailing objects of the class.
+  /// Set the components that are in the trailing objects of the class.
   /// This requires the list sizes so that it can also fill the original
   /// expressions, which are the first component of each list.
   void setComponents(ArrayRef<MappableComponent> Components,
@@ -3486,7 +3494,7 @@
     std::copy(Components.begin(), Components.end(), getComponentsRef().begin());
   }
 
-  /// \brief Fill the clause information from the list of declarations and
+  /// Fill the clause information from the list of declarations and
   /// associated component lists.
   void setClauseInfo(ArrayRef<ValueDecl *> Declarations,
                      MappableExprComponentListsRef ComponentLists) {
@@ -3563,17 +3571,17 @@
   }
 
 public:
-  /// \brief Return the number of unique base declarations in this clause.
+  /// Return the number of unique base declarations in this clause.
   unsigned getUniqueDeclarationsNum() const { return NumUniqueDeclarations; }
 
-  /// \brief Return the number of lists derived from the clause expressions.
+  /// Return the number of lists derived from the clause expressions.
   unsigned getTotalComponentListNum() const { return NumComponentLists; }
 
-  /// \brief Return the total number of components in all lists derived from the
+  /// Return the total number of components in all lists derived from the
   /// clause.
   unsigned getTotalComponentsNum() const { return NumComponents; }
 
-  /// \brief Iterator that browse the components by lists. It also allows
+  /// Iterator that browse the components by lists. It also allows
   /// browsing components of a single declaration.
   class const_component_lists_iterator
       : public llvm::iterator_adaptor_base<
@@ -3603,7 +3611,7 @@
     MappableExprComponentListRef::const_iterator End;
 
   public:
-    /// \brief Construct an iterator that scans all lists.
+    /// Construct an iterator that scans all lists.
     explicit const_component_lists_iterator(
         ArrayRef<ValueDecl *> UniqueDecls, ArrayRef<unsigned> DeclsListNum,
         ArrayRef<unsigned> CumulativeListSizes,
@@ -3619,7 +3627,7 @@
         RemainingLists = *NumListsCur;
     }
 
-    /// \brief Construct an iterator that scan lists for a given declaration \a
+    /// Construct an iterator that scan lists for a given declaration \a
     /// Declaration.
     explicit const_component_lists_iterator(
         const ValueDecl *Declaration, ArrayRef<ValueDecl *> UniqueDecls,
@@ -3709,7 +3717,7 @@
   using const_component_lists_range =
       llvm::iterator_range<const_component_lists_iterator>;
 
-  /// \brief Iterators for all component lists.
+  /// Iterators for all component lists.
   const_component_lists_iterator component_lists_begin() const {
     return const_component_lists_iterator(
         getUniqueDeclsRef(), getDeclNumListsRef(), getComponentListSizesRef(),
@@ -3725,7 +3733,7 @@
     return {component_lists_begin(), component_lists_end()};
   }
 
-  /// \brief Iterators for component lists associated with the provided
+  /// Iterators for component lists associated with the provided
   /// declaration.
   const_component_lists_iterator
   decl_component_lists_begin(const ValueDecl *VD) const {
@@ -3778,7 +3786,7 @@
   }
 };
 
-/// \brief This represents clause 'map' in the '#pragma omp ...'
+/// This represents clause 'map' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -3807,22 +3815,22 @@
     return getUniqueDeclarationsNum() + getTotalComponentListNum();
   }
 
-  /// \brief Map type modifier for the 'map' clause.
+  /// Map type modifier for the 'map' clause.
   OpenMPMapClauseKind MapTypeModifier = OMPC_MAP_unknown;
 
-  /// \brief Map type for the 'map' clause.
+  /// Map type for the 'map' clause.
   OpenMPMapClauseKind MapType = OMPC_MAP_unknown;
 
-  /// \brief Is this an implicit map type or not.
+  /// Is this an implicit map type or not.
   bool MapTypeIsImplicit = false;
 
-  /// \brief Location of the map type.
+  /// Location of the map type.
   SourceLocation MapLoc;
 
-  /// \brief Colon location.
+  /// Colon location.
   SourceLocation ColonLoc;
 
-  /// \brief Build a clause for \a NumVars listed expressions, \a
+  /// Build a clause for \a NumVars listed expressions, \a
   /// NumUniqueDeclarations declarations, \a NumComponentLists total component
   /// lists, and \a NumComponents total expression components.
   ///
@@ -3849,7 +3857,7 @@
         MapTypeModifier(MapTypeModifier), MapType(MapType),
         MapTypeIsImplicit(MapTypeIsImplicit), MapLoc(MapLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param NumVars Number of expressions listed in this clause.
   /// \param NumUniqueDeclarations Number of unique base declarations in this
@@ -3862,26 +3870,26 @@
             OMPC_map, SourceLocation(), SourceLocation(), SourceLocation(),
             NumVars, NumUniqueDeclarations, NumComponentLists, NumComponents) {}
 
-  /// \brief Set type modifier for the clause.
+  /// Set type modifier for the clause.
   ///
   /// \param T Type Modifier for the clause.
   void setMapTypeModifier(OpenMPMapClauseKind T) { MapTypeModifier = T; }
 
-  /// \brief Set type for the clause.
+  /// Set type for the clause.
   ///
   /// \param T Type for the clause.
   void setMapType(OpenMPMapClauseKind T) { MapType = T; }
 
-  /// \brief Set type location.
+  /// Set type location.
   ///
   /// \param TLoc Type location.
   void setMapLoc(SourceLocation TLoc) { MapLoc = TLoc; }
 
-  /// \brief Set colon location.
+  /// Set colon location.
   void setColonLoc(SourceLocation Loc) { ColonLoc = Loc; }
 
 public:
-  /// \brief Creates clause with a list of variables \a VL.
+  /// Creates clause with a list of variables \a VL.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -3902,7 +3910,7 @@
                               OpenMPMapClauseKind Type, bool TypeIsImplicit,
                               SourceLocation TypeLoc);
 
-  /// \brief Creates an empty clause with the place for \a NumVars original
+  /// Creates an empty clause with the place for \a NumVars original
   /// expressions, \a NumUniqueDeclarations declarations, \NumComponentLists
   /// lists, and \a NumComponents expression components.
   ///
@@ -3918,25 +3926,25 @@
                                    unsigned NumComponentLists,
                                    unsigned NumComponents);
 
-  /// \brief Fetches mapping kind for the clause.
+  /// Fetches mapping kind for the clause.
   OpenMPMapClauseKind getMapType() const LLVM_READONLY { return MapType; }
 
-  /// \brief Is this an implicit map type?
+  /// Is this an implicit map type?
   /// We have to capture 'IsMapTypeImplicit' from the parser for more
   /// informative error messages.  It helps distinguish map(r) from
   /// map(tofrom: r), which is important to print more helpful error
   /// messages for some target directives.
   bool isImplicitMapType() const LLVM_READONLY { return MapTypeIsImplicit; }
 
-  /// \brief Fetches the map type modifier for the clause.
+  /// Fetches the map type modifier for the clause.
   OpenMPMapClauseKind getMapTypeModifier() const LLVM_READONLY {
     return MapTypeModifier;
   }
 
-  /// \brief Fetches location of clause mapping kind.
+  /// Fetches location of clause mapping kind.
   SourceLocation getMapLoc() const LLVM_READONLY { return MapLoc; }
 
-  /// \brief Get colon location.
+  /// Get colon location.
   SourceLocation getColonLoc() const { return ColonLoc; }
 
   child_range children() {
@@ -3950,7 +3958,7 @@
   }
 };
 
-/// \brief This represents 'num_teams' clause in the '#pragma omp ...'
+/// This represents 'num_teams' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -3961,19 +3969,19 @@
 class OMPNumTeamsClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief NumTeams number.
+  /// NumTeams number.
   Stmt *NumTeams = nullptr;
 
-  /// \brief Set the NumTeams number.
+  /// Set the NumTeams number.
   ///
   /// \param E NumTeams number.
   void setNumTeams(Expr *E) { NumTeams = E; }
 
 public:
-  /// \brief Build 'num_teams' clause.
+  /// Build 'num_teams' clause.
   ///
   /// \param E Expression associated with this clause.
   /// \param HelperE Helper Expression associated with this clause.
@@ -3990,21 +3998,21 @@
     setPreInitStmt(HelperE, CaptureRegion);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPNumTeamsClause()
       : OMPClause(OMPC_num_teams, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return NumTeams number.
+  /// Return NumTeams number.
   Expr *getNumTeams() { return cast<Expr>(NumTeams); }
 
-  /// \brief Return NumTeams number.
+  /// Return NumTeams number.
   Expr *getNumTeams() const { return cast<Expr>(NumTeams); }
 
   child_range children() { return child_range(&NumTeams, &NumTeams + 1); }
@@ -4014,7 +4022,7 @@
   }
 };
 
-/// \brief This represents 'thread_limit' clause in the '#pragma omp ...'
+/// This represents 'thread_limit' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -4025,19 +4033,19 @@
 class OMPThreadLimitClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief ThreadLimit number.
+  /// ThreadLimit number.
   Stmt *ThreadLimit = nullptr;
 
-  /// \brief Set the ThreadLimit number.
+  /// Set the ThreadLimit number.
   ///
   /// \param E ThreadLimit number.
   void setThreadLimit(Expr *E) { ThreadLimit = E; }
 
 public:
-  /// \brief Build 'thread_limit' clause.
+  /// Build 'thread_limit' clause.
   ///
   /// \param E Expression associated with this clause.
   /// \param HelperE Helper Expression associated with this clause.
@@ -4055,21 +4063,21 @@
     setPreInitStmt(HelperE, CaptureRegion);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPThreadLimitClause()
       : OMPClause(OMPC_thread_limit, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return ThreadLimit number.
+  /// Return ThreadLimit number.
   Expr *getThreadLimit() { return cast<Expr>(ThreadLimit); }
 
-  /// \brief Return ThreadLimit number.
+  /// Return ThreadLimit number.
   Expr *getThreadLimit() const { return cast<Expr>(ThreadLimit); }
 
   child_range children() { return child_range(&ThreadLimit, &ThreadLimit + 1); }
@@ -4079,7 +4087,7 @@
   }
 };
 
-/// \brief This represents 'priority' clause in the '#pragma omp ...'
+/// This represents 'priority' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -4090,19 +4098,19 @@
 class OMPPriorityClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Priority number.
+  /// Priority number.
   Stmt *Priority = nullptr;
 
-  /// \brief Set the Priority number.
+  /// Set the Priority number.
   ///
   /// \param E Priority number.
   void setPriority(Expr *E) { Priority = E; }
 
 public:
-  /// \brief Build 'priority' clause.
+  /// Build 'priority' clause.
   ///
   /// \param E Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -4113,20 +4121,20 @@
       : OMPClause(OMPC_priority, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Priority(E) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPPriorityClause()
       : OMPClause(OMPC_priority, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return Priority number.
+  /// Return Priority number.
   Expr *getPriority() { return cast<Expr>(Priority); }
 
-  /// \brief Return Priority number.
+  /// Return Priority number.
   Expr *getPriority() const { return cast<Expr>(Priority); }
 
   child_range children() { return child_range(&Priority, &Priority + 1); }
@@ -4136,7 +4144,7 @@
   }
 };
 
-/// \brief This represents 'grainsize' clause in the '#pragma omp ...'
+/// This represents 'grainsize' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -4147,17 +4155,17 @@
 class OMPGrainsizeClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Safe iteration space distance.
+  /// Safe iteration space distance.
   Stmt *Grainsize = nullptr;
 
-  /// \brief Set safelen.
+  /// Set safelen.
   void setGrainsize(Expr *Size) { Grainsize = Size; }
 
 public:
-  /// \brief Build 'grainsize' clause.
+  /// Build 'grainsize' clause.
   ///
   /// \param Size Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -4167,17 +4175,17 @@
       : OMPClause(OMPC_grainsize, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Grainsize(Size) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPGrainsizeClause()
       : OMPClause(OMPC_grainsize, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return safe iteration space distance.
+  /// Return safe iteration space distance.
   Expr *getGrainsize() const { return cast_or_null<Expr>(Grainsize); }
 
   child_range children() { return child_range(&Grainsize, &Grainsize + 1); }
@@ -4187,7 +4195,7 @@
   }
 };
 
-/// \brief This represents 'nogroup' clause in the '#pragma omp ...' directive.
+/// This represents 'nogroup' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp taskloop nogroup
@@ -4195,14 +4203,14 @@
 /// In this example directive '#pragma omp taskloop' has 'nogroup' clause.
 class OMPNogroupClause : public OMPClause {
 public:
-  /// \brief Build 'nogroup' clause.
+  /// Build 'nogroup' clause.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
   OMPNogroupClause(SourceLocation StartLoc, SourceLocation EndLoc)
       : OMPClause(OMPC_nogroup, StartLoc, EndLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPNogroupClause()
       : OMPClause(OMPC_nogroup, SourceLocation(), SourceLocation()) {}
 
@@ -4215,7 +4223,7 @@
   }
 };
 
-/// \brief This represents 'num_tasks' clause in the '#pragma omp ...'
+/// This represents 'num_tasks' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -4226,17 +4234,17 @@
 class OMPNumTasksClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Safe iteration space distance.
+  /// Safe iteration space distance.
   Stmt *NumTasks = nullptr;
 
-  /// \brief Set safelen.
+  /// Set safelen.
   void setNumTasks(Expr *Size) { NumTasks = Size; }
 
 public:
-  /// \brief Build 'num_tasks' clause.
+  /// Build 'num_tasks' clause.
   ///
   /// \param Size Expression associated with this clause.
   /// \param StartLoc Starting location of the clause.
@@ -4246,17 +4254,17 @@
       : OMPClause(OMPC_num_tasks, StartLoc, EndLoc), LParenLoc(LParenLoc),
         NumTasks(Size) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPNumTasksClause()
       : OMPClause(OMPC_num_tasks, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Return safe iteration space distance.
+  /// Return safe iteration space distance.
   Expr *getNumTasks() const { return cast_or_null<Expr>(NumTasks); }
 
   child_range children() { return child_range(&NumTasks, &NumTasks + 1); }
@@ -4266,7 +4274,7 @@
   }
 };
 
-/// \brief This represents 'hint' clause in the '#pragma omp ...' directive.
+/// This represents 'hint' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp critical (name) hint(6)
@@ -4276,17 +4284,17 @@
 class OMPHintClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Hint expression of the 'hint' clause.
+  /// Hint expression of the 'hint' clause.
   Stmt *Hint = nullptr;
 
-  /// \brief Set hint expression.
+  /// Set hint expression.
   void setHint(Expr *H) { Hint = H; }
 
 public:
-  /// \brief Build 'hint' clause with expression \a Hint.
+  /// Build 'hint' clause with expression \a Hint.
   ///
   /// \param Hint Hint expression.
   /// \param StartLoc Starting location of the clause.
@@ -4297,16 +4305,16 @@
       : OMPClause(OMPC_hint, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Hint(Hint) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   OMPHintClause() : OMPClause(OMPC_hint, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Returns the location of '('.
+  /// Returns the location of '('.
   SourceLocation getLParenLoc() const { return LParenLoc; }
 
-  /// \brief Returns number of threads.
+  /// Returns number of threads.
   Expr *getHint() const { return cast_or_null<Expr>(Hint); }
 
   child_range children() { return child_range(&Hint, &Hint + 1); }
@@ -4316,7 +4324,7 @@
   }
 };
 
-/// \brief This represents 'dist_schedule' clause in the '#pragma omp ...'
+/// This represents 'dist_schedule' clause in the '#pragma omp ...'
 /// directive.
 ///
 /// \code
@@ -4327,48 +4335,48 @@
 class OMPDistScheduleClause : public OMPClause, public OMPClauseWithPreInit {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief A kind of the 'schedule' clause.
+  /// A kind of the 'schedule' clause.
   OpenMPDistScheduleClauseKind Kind = OMPC_DIST_SCHEDULE_unknown;
 
-  /// \brief Start location of the schedule kind in source code.
+  /// Start location of the schedule kind in source code.
   SourceLocation KindLoc;
 
-  /// \brief Location of ',' (if any).
+  /// Location of ',' (if any).
   SourceLocation CommaLoc;
 
-  /// \brief Chunk size.
+  /// Chunk size.
   Expr *ChunkSize = nullptr;
 
-  /// \brief Set schedule kind.
+  /// Set schedule kind.
   ///
   /// \param K Schedule kind.
   void setDistScheduleKind(OpenMPDistScheduleClauseKind K) { Kind = K; }
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   ///
   /// \param Loc Location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Set schedule kind start location.
+  /// Set schedule kind start location.
   ///
   /// \param KLoc Schedule kind location.
   void setDistScheduleKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
 
-  /// \brief Set location of ','.
+  /// Set location of ','.
   ///
   /// \param Loc Location of ','.
   void setCommaLoc(SourceLocation Loc) { CommaLoc = Loc; }
 
-  /// \brief Set chunk size.
+  /// Set chunk size.
   ///
   /// \param E Chunk size.
   void setChunkSize(Expr *E) { ChunkSize = E; }
 
 public:
-  /// \brief Build 'dist_schedule' clause with schedule kind \a Kind and chunk
+  /// Build 'dist_schedule' clause with schedule kind \a Kind and chunk
   /// size expression \a ChunkSize.
   ///
   /// \param StartLoc Starting location of the clause.
@@ -4390,27 +4398,27 @@
     setPreInitStmt(HelperChunkSize);
   }
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPDistScheduleClause()
       : OMPClause(OMPC_dist_schedule, SourceLocation(), SourceLocation()),
         OMPClauseWithPreInit(this) {}
 
-  /// \brief Get kind of the clause.
+  /// Get kind of the clause.
   OpenMPDistScheduleClauseKind getDistScheduleKind() const { return Kind; }
 
-  /// \brief Get location of '('.
+  /// Get location of '('.
   SourceLocation getLParenLoc() { return LParenLoc; }
 
-  /// \brief Get kind location.
+  /// Get kind location.
   SourceLocation getDistScheduleKindLoc() { return KindLoc; }
 
-  /// \brief Get location of ','.
+  /// Get location of ','.
   SourceLocation getCommaLoc() { return CommaLoc; }
 
-  /// \brief Get chunk size.
+  /// Get chunk size.
   Expr *getChunkSize() { return ChunkSize; }
 
-  /// \brief Get chunk size.
+  /// Get chunk size.
   const Expr *getChunkSize() const { return ChunkSize; }
 
   child_range children() {
@@ -4423,7 +4431,7 @@
   }
 };
 
-/// \brief This represents 'defaultmap' clause in the '#pragma omp ...' directive.
+/// This represents 'defaultmap' clause in the '#pragma omp ...' directive.
 ///
 /// \code
 /// #pragma omp target defaultmap(tofrom: scalar)
@@ -4433,50 +4441,50 @@
 class OMPDefaultmapClause : public OMPClause {
   friend class OMPClauseReader;
 
-  /// \brief Location of '('.
+  /// Location of '('.
   SourceLocation LParenLoc;
 
-  /// \brief Modifiers for 'defaultmap' clause.
+  /// Modifiers for 'defaultmap' clause.
   OpenMPDefaultmapClauseModifier Modifier = OMPC_DEFAULTMAP_MODIFIER_unknown;
 
-  /// \brief Locations of modifiers.
+  /// Locations of modifiers.
   SourceLocation ModifierLoc;
 
-  /// \brief A kind of the 'defaultmap' clause.
+  /// A kind of the 'defaultmap' clause.
   OpenMPDefaultmapClauseKind Kind = OMPC_DEFAULTMAP_unknown;
 
-  /// \brief Start location of the defaultmap kind in source code.
+  /// Start location of the defaultmap kind in source code.
   SourceLocation KindLoc;
 
-  /// \brief Set defaultmap kind.
+  /// Set defaultmap kind.
   ///
   /// \param K Defaultmap kind.
   void setDefaultmapKind(OpenMPDefaultmapClauseKind K) { Kind = K; }
 
-  /// \brief Set the defaultmap modifier.
+  /// Set the defaultmap modifier.
   ///
   /// \param M Defaultmap modifier.
   void setDefaultmapModifier(OpenMPDefaultmapClauseModifier M) {
     Modifier = M;
   }
 
-  /// \brief Set location of the defaultmap modifier.
+  /// Set location of the defaultmap modifier.
   void setDefaultmapModifierLoc(SourceLocation Loc) {
     ModifierLoc = Loc;
   }
 
-  /// \brief Sets the location of '('.
+  /// Sets the location of '('.
   ///
   /// \param Loc Location of '('.
   void setLParenLoc(SourceLocation Loc) { LParenLoc = Loc; }
 
-  /// \brief Set defaultmap kind start location.
+  /// Set defaultmap kind start location.
   ///
   /// \param KLoc Defaultmap kind location.
   void setDefaultmapKindLoc(SourceLocation KLoc) { KindLoc = KLoc; }
 
 public:
-  /// \brief Build 'defaultmap' clause with defaultmap kind \a Kind
+  /// Build 'defaultmap' clause with defaultmap kind \a Kind
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param LParenLoc Location of '('.
@@ -4492,25 +4500,25 @@
       : OMPClause(OMPC_defaultmap, StartLoc, EndLoc), LParenLoc(LParenLoc),
         Modifier(M), ModifierLoc(MLoc), Kind(Kind), KindLoc(KLoc) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   explicit OMPDefaultmapClause()
       : OMPClause(OMPC_defaultmap, SourceLocation(), SourceLocation()) {}
 
-  /// \brief Get kind of the clause.
+  /// Get kind of the clause.
   OpenMPDefaultmapClauseKind getDefaultmapKind() const { return Kind; }
 
-  /// \brief Get the modifier of the clause.
+  /// Get the modifier of the clause.
   OpenMPDefaultmapClauseModifier getDefaultmapModifier() const {
     return Modifier;
   }
 
-  /// \brief Get location of '('.
+  /// Get location of '('.
   SourceLocation getLParenLoc() { return LParenLoc; }
 
-  /// \brief Get kind location.
+  /// Get kind location.
   SourceLocation getDefaultmapKindLoc() { return KindLoc; }
 
-  /// \brief Get the modifier location.
+  /// Get the modifier location.
   SourceLocation getDefaultmapModifierLoc() const {
     return ModifierLoc;
   }
@@ -4524,7 +4532,7 @@
   }
 };
 
-/// \brief This represents clause 'to' in the '#pragma omp ...'
+/// This represents clause 'to' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -4541,7 +4549,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a NumVars.
+  /// Build clause with number of variables \a NumVars.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
@@ -4558,7 +4566,7 @@
                                   NumUniqueDeclarations, NumComponentLists,
                                   NumComponents) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param NumVars Number of expressions listed in this clause.
   /// \param NumUniqueDeclarations Number of unique base declarations in this
@@ -4584,7 +4592,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a Vars.
+  /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -4598,7 +4606,7 @@
                              ArrayRef<ValueDecl *> Declarations,
                              MappableExprComponentListsRef ComponentLists);
 
-  /// \brief Creates an empty clause with the place for \a NumVars variables.
+  /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
   /// \param NumVars Number of expressions listed in the clause.
@@ -4622,7 +4630,7 @@
   }
 };
 
-/// \brief This represents clause 'from' in the '#pragma omp ...'
+/// This represents clause 'from' in the '#pragma omp ...'
 /// directives.
 ///
 /// \code
@@ -4640,7 +4648,7 @@
   friend OMPVarListClause;
   friend TrailingObjects;
 
-  /// \brief Build clause with number of variables \a NumVars.
+  /// Build clause with number of variables \a NumVars.
   ///
   /// \param StartLoc Starting location of the clause.
   /// \param EndLoc Ending location of the clause.
@@ -4657,7 +4665,7 @@
                                   NumVars, NumUniqueDeclarations,
                                   NumComponentLists, NumComponents) {}
 
-  /// \brief Build an empty clause.
+  /// Build an empty clause.
   ///
   /// \param NumVars Number of expressions listed in this clause.
   /// \param NumUniqueDeclarations Number of unique base declarations in this
@@ -4683,7 +4691,7 @@
   }
 
 public:
-  /// \brief Creates clause with a list of variables \a Vars.
+  /// Creates clause with a list of variables \a Vars.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the clause.
@@ -4697,7 +4705,7 @@
                                ArrayRef<ValueDecl *> Declarations,
                                MappableExprComponentListsRef ComponentLists);
 
-  /// \brief Creates an empty clause with the place for \a NumVars variables.
+  /// Creates an empty clause with the place for \a NumVars variables.
   ///
   /// \param C AST context.
   /// \param NumVars Number of expressions listed in the clause.
diff --git a/linux-x64/clang/include/clang/AST/OperationKinds.def b/linux-x64/clang/include/clang/AST/OperationKinds.def
index b13cf3b..e2d65d8 100644
--- a/linux-x64/clang/include/clang/AST/OperationKinds.def
+++ b/linux-x64/clang/include/clang/AST/OperationKinds.def
@@ -227,87 +227,87 @@
 /// to a block pointer.  Block-to-block casts are bitcasts.
 CAST_OPERATION(AnyPointerToBlockPointerCast)
 
-/// \brief Converting between two Objective-C object types, which
+/// Converting between two Objective-C object types, which
 /// can occur when performing reference binding to an Objective-C
 /// object.
 CAST_OPERATION(ObjCObjectLValueCast)
 
-/// \brief A conversion of a floating point real to a floating point
+/// A conversion of a floating point real to a floating point
 /// complex of the original type.  Injects the value as the real
 /// component with a zero imaginary component.
 ///   float -> _Complex float
 CAST_OPERATION(FloatingRealToComplex)
 
-/// \brief Converts a floating point complex to floating point real
+/// Converts a floating point complex to floating point real
 /// of the source's element type.  Just discards the imaginary
 /// component.
 ///   _Complex long double -> long double
 CAST_OPERATION(FloatingComplexToReal)
 
-/// \brief Converts a floating point complex to bool by comparing
+/// Converts a floating point complex to bool by comparing
 /// against 0+0i.
 CAST_OPERATION(FloatingComplexToBoolean)
 
-/// \brief Converts between different floating point complex types.
+/// Converts between different floating point complex types.
 ///   _Complex float -> _Complex double
 CAST_OPERATION(FloatingComplexCast)
 
-/// \brief Converts from a floating complex to an integral complex.
+/// Converts from a floating complex to an integral complex.
 ///   _Complex float -> _Complex int
 CAST_OPERATION(FloatingComplexToIntegralComplex)
 
-/// \brief Converts from an integral real to an integral complex
+/// Converts from an integral real to an integral complex
 /// whose element type matches the source.  Injects the value as
 /// the real component with a zero imaginary component.
 ///   long -> _Complex long
 CAST_OPERATION(IntegralRealToComplex)
 
-/// \brief Converts an integral complex to an integral real of the
+/// Converts an integral complex to an integral real of the
 /// source's element type by discarding the imaginary component.
 ///   _Complex short -> short
 CAST_OPERATION(IntegralComplexToReal)
 
-/// \brief Converts an integral complex to bool by comparing against
+/// Converts an integral complex to bool by comparing against
 /// 0+0i.
 CAST_OPERATION(IntegralComplexToBoolean)
 
-/// \brief Converts between different integral complex types.
+/// Converts between different integral complex types.
 ///   _Complex char -> _Complex long long
 ///   _Complex unsigned int -> _Complex signed int
 CAST_OPERATION(IntegralComplexCast)
 
-/// \brief Converts from an integral complex to a floating complex.
+/// Converts from an integral complex to a floating complex.
 ///   _Complex unsigned -> _Complex float
 CAST_OPERATION(IntegralComplexToFloatingComplex)
 
-/// \brief [ARC] Produces a retainable object pointer so that it may
+/// [ARC] Produces a retainable object pointer so that it may
 /// be consumed, e.g. by being passed to a consuming parameter.
 /// Calls objc_retain.
 CAST_OPERATION(ARCProduceObject)
 
-/// \brief [ARC] Consumes a retainable object pointer that has just
+/// [ARC] Consumes a retainable object pointer that has just
 /// been produced, e.g. as the return value of a retaining call.
 /// Enters a cleanup to call objc_release at some indefinite time.
 CAST_OPERATION(ARCConsumeObject)
 
-/// \brief [ARC] Reclaim a retainable object pointer object that may
+/// [ARC] Reclaim a retainable object pointer object that may
 /// have been produced and autoreleased as part of a function return
 /// sequence.
 CAST_OPERATION(ARCReclaimReturnedObject)
 
-/// \brief [ARC] Causes a value of block type to be copied to the
+/// [ARC] Causes a value of block type to be copied to the
 /// heap, if it is not already there.  A number of other operations
 /// in ARC cause blocks to be copied; this is for cases where that
 /// would not otherwise be guaranteed, such as when casting to a
 /// non-block pointer type.
 CAST_OPERATION(ARCExtendBlockObject)
 
-/// \brief Converts from _Atomic(T) to T.
+/// Converts from _Atomic(T) to T.
 CAST_OPERATION(AtomicToNonAtomic)
-/// \brief Converts from T to _Atomic(T).
+/// Converts from T to _Atomic(T).
 CAST_OPERATION(NonAtomicToAtomic)
 
-/// \brief Causes a block literal to by copied to the heap and then 
+/// Causes a block literal to by copied to the heap and then
 /// autoreleased.
 ///
 /// This particular cast kind is used for the conversion from a C++11
@@ -391,13 +391,13 @@
 // [C99 6.5.2.4] Postfix increment and decrement
 UNARY_OPERATION(PostInc, "++")
 UNARY_OPERATION(PostDec, "--")
-// [C99 6.5.3.1] Prefix increment and decrement 
+// [C99 6.5.3.1] Prefix increment and decrement
 UNARY_OPERATION(PreInc, "++")
 UNARY_OPERATION(PreDec, "--")
 // [C99 6.5.3.2] Address and indirection
 UNARY_OPERATION(AddrOf, "&")
 UNARY_OPERATION(Deref, "*")
-// [C99 6.5.3.3] Unary arithmetic 
+// [C99 6.5.3.3] Unary arithmetic
 UNARY_OPERATION(Plus, "+")
 UNARY_OPERATION(Minus, "-")
 UNARY_OPERATION(Not, "~")
diff --git a/linux-x64/clang/include/clang/AST/OperationKinds.h b/linux-x64/clang/include/clang/AST/OperationKinds.h
index e383268..ac512d7 100644
--- a/linux-x64/clang/include/clang/AST/OperationKinds.h
+++ b/linux-x64/clang/include/clang/AST/OperationKinds.h
@@ -16,7 +16,7 @@
 #define LLVM_CLANG_AST_OPERATIONKINDS_H
 
 namespace clang {
-  
+
 /// CastKind - The kind of operation required for a conversion.
 enum CastKind {
 #define CAST_OPERATION(Name) CK_##Name,
@@ -33,15 +33,15 @@
 #include "clang/AST/OperationKinds.def"
 };
 
-/// \brief The kind of bridging performed by the Objective-C bridge cast.
+/// The kind of bridging performed by the Objective-C bridge cast.
 enum ObjCBridgeCastKind {
-  /// \brief Bridging via __bridge, which does nothing but reinterpret
+  /// Bridging via __bridge, which does nothing but reinterpret
   /// the bits.
   OBC_Bridge,
-  /// \brief Bridging via __bridge_transfer, which transfers ownership of an
+  /// Bridging via __bridge_transfer, which transfers ownership of an
   /// Objective-C pointer into ARC.
   OBC_BridgeTransfer,
-  /// \brief Bridging via __bridge_retain, which makes an ARC object available
+  /// Bridging via __bridge_retain, which makes an ARC object available
   /// as a +1 C pointer.
   OBC_BridgeRetained
 };
diff --git a/linux-x64/clang/include/clang/AST/ParentMap.h b/linux-x64/clang/include/clang/AST/ParentMap.h
index 8945c41..c1c76ce 100644
--- a/linux-x64/clang/include/clang/AST/ParentMap.h
+++ b/linux-x64/clang/include/clang/AST/ParentMap.h
@@ -24,7 +24,7 @@
   ParentMap(Stmt* ASTRoot);
   ~ParentMap();
 
-  /// \brief Adds and/or updates the parent/child-relations of the complete
+  /// Adds and/or updates the parent/child-relations of the complete
   /// stmt tree of S. All children of S including indirect descendants are
   /// visited and updated or inserted but not the parents of S.
   void addStmt(Stmt* S);
diff --git a/linux-x64/clang/include/clang/AST/PrettyPrinter.h b/linux-x64/clang/include/clang/AST/PrettyPrinter.h
index e831b90..ed6b97f 100644
--- a/linux-x64/clang/include/clang/AST/PrettyPrinter.h
+++ b/linux-x64/clang/include/clang/AST/PrettyPrinter.h
@@ -36,7 +36,7 @@
 /// This type is intended to be small and suitable for passing by value.
 /// It is very frequently copied.
 struct PrintingPolicy {
-  /// \brief Create a default printing policy for the specified language.
+  /// Create a default printing policy for the specified language.
   PrintingPolicy(const LangOptions &LO)
     : Indentation(2), SuppressSpecifiers(false),
       SuppressTagKeyword(LO.CPlusPlus),
@@ -81,7 +81,7 @@
   /// declaration for "x", so that we will print "int *x"; it will be
   /// \c true when we print "y", so that we suppress printing the
   /// "const int" type specifier and instead only print the "*y".
-  bool SuppressSpecifiers : 1;
+  unsigned SuppressSpecifiers : 1;
 
   /// Whether type printing should skip printing the tag keyword.
   ///
@@ -91,7 +91,7 @@
   /// \code
   /// struct Geometry::Point;
   /// \endcode
-  bool SuppressTagKeyword : 1;
+  unsigned SuppressTagKeyword : 1;
 
   /// When true, include the body of a tag definition.
   ///
@@ -101,15 +101,15 @@
   /// \code
   /// typedef struct { int x, y; } Point;
   /// \endcode
-  bool IncludeTagDefinition : 1;
+  unsigned IncludeTagDefinition : 1;
 
   /// Suppresses printing of scope specifiers.
-  bool SuppressScope : 1;
+  unsigned SuppressScope : 1;
 
   /// Suppress printing parts of scope specifiers that don't need
   /// to be written, e.g., for inline or anonymous namespaces.
-  bool SuppressUnwrittenScope : 1;
-  
+  unsigned SuppressUnwrittenScope : 1;
+
   /// Suppress printing of variable initializers.
   ///
   /// This flag is used when printing the loop variable in a for-range
@@ -121,7 +121,7 @@
   ///
   /// SuppressInitializers will be true when printing "auto x", so that the
   /// internal initializer constructed for x will not be printed.
-  bool SuppressInitializers : 1;
+  unsigned SuppressInitializers : 1;
 
   /// Whether we should print the sizes of constant array expressions as written
   /// in the sources.
@@ -139,16 +139,16 @@
   /// int a[104];
   /// char a[9] = "A string";
   /// \endcode
-  bool ConstantArraySizeAsWritten : 1;
-  
+  unsigned ConstantArraySizeAsWritten : 1;
+
   /// When printing an anonymous tag name, also print the location of that
   /// entity (e.g., "enum <anonymous at t.h:10:5>"). Otherwise, just prints
   /// "(anonymous)" for the name.
-  bool AnonymousTagLocations : 1;
-  
+  unsigned AnonymousTagLocations : 1;
+
   /// When true, suppress printing of the __strong lifetime qualifier in ARC.
   unsigned SuppressStrongLifetime : 1;
-  
+
   /// When true, suppress printing of lifetime qualifier in ARC.
   unsigned SuppressLifetimeQualifiers : 1;
 
@@ -179,7 +179,7 @@
   /// declarations inside namespaces etc.  Effectively, this should print
   /// only the requested declaration.
   unsigned TerseOutput : 1;
-  
+
   /// When true, do certain refinement needed for producing proper declaration
   /// tag; such as, do not print attributes attached to the declaration.
   ///
@@ -199,7 +199,7 @@
   /// Use whitespace and punctuation like MSVC does. In particular, this prints
   /// anonymous namespaces as `anonymous namespace' and does not insert spaces
   /// after template arguments.
-  bool MSVCFormatting : 1;
+  unsigned MSVCFormatting : 1;
 
   /// Whether we should print the constant expressions as written in the
   /// sources.
@@ -217,14 +217,14 @@
   /// 0x10
   /// 2.5e3
   /// \endcode
-  bool ConstantsAsWritten : 1;
+  unsigned ConstantsAsWritten : 1;
 
   /// When true, don't print the implicit 'self' or 'this' expressions.
-  bool SuppressImplicitBase : 1;
+  unsigned SuppressImplicitBase : 1;
 
   /// When true, print the fully qualified name of function declarations.
   /// This is the opposite of SuppressScope and thus overrules it.
-  bool FullyQualifiedName : 1;
+  unsigned FullyQualifiedName : 1;
 };
 
 } // end namespace clang
diff --git a/linux-x64/clang/include/clang/AST/QualTypeNames.h b/linux-x64/clang/include/clang/AST/QualTypeNames.h
index 86d805f..422ed9e 100644
--- a/linux-x64/clang/include/clang/AST/QualTypeNames.h
+++ b/linux-x64/clang/include/clang/AST/QualTypeNames.h
@@ -63,7 +63,7 @@
 
 namespace clang {
 namespace TypeName {
-/// \brief Get the fully qualified name for a type. This includes full
+/// Get the fully qualified name for a type. This includes full
 /// qualification of all template parameters etc.
 ///
 /// \param[in] QT - the type for which the fully qualified name will be
@@ -72,9 +72,10 @@
 /// \param[in] WithGlobalNsPrefix - If true, then the global namespace
 /// specifier "::" will be prepended to the fully qualified name.
 std::string getFullyQualifiedName(QualType QT, const ASTContext &Ctx,
+                                  const PrintingPolicy &Policy,
                                   bool WithGlobalNsPrefix = false);
 
-/// \brief Generates a QualType that can be used to name the same type
+/// Generates a QualType that can be used to name the same type
 /// if used at the end of the current translation unit. This ignores
 /// issues such as type shadowing.
 ///
diff --git a/linux-x64/clang/include/clang/AST/RawCommentList.h b/linux-x64/clang/include/clang/AST/RawCommentList.h
index 9c931e0..3edb4b4 100644
--- a/linux-x64/clang/include/clang/AST/RawCommentList.h
+++ b/linux-x64/clang/include/clang/AST/RawCommentList.h
@@ -101,8 +101,16 @@
   }
 
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
   const char *getBriefText(const ASTContext &Context) const {
     if (BriefTextValid)
@@ -111,6 +119,30 @@
     return extractBriefText(Context);
   }
 
+  /// Returns sanitized comment text, suitable for presentation in editor UIs.
+  /// E.g. will transform:
+  ///     // This is a long multiline comment.
+  ///     //   Parts of it  might be indented.
+  ///     /* The comments styles might be mixed. */
+  ///  into
+  ///     "This is a long multiline comment.\n"
+  ///     "  Parts of it  might be indented.\n"
+  ///     "The comments styles might be mixed."
+  /// Also removes leading indentation and sanitizes some common cases:
+  ///     /* This is a first line.
+  ///      *   This is a second line. It is indented.
+  ///      * This is a third line. */
+  /// and
+  ///     /* This is a first line.
+  ///          This is a second line. It is indented.
+  ///     This is a third line. */
+  /// will both turn into:
+  ///     "This is a first line.\n"
+  ///     "  This is a second line. It is indented.\n"
+  ///     "This is a third line."
+  std::string getFormattedText(const SourceManager &SourceMgr,
+                               DiagnosticsEngine &Diags) const;
+
   /// Parse the comment, assuming it is attached to decl \c D.
   comments::FullComment *parse(const ASTContext &Context,
                                const Preprocessor *PP, const Decl *D) const;
@@ -132,7 +164,7 @@
   bool IsTrailingComment : 1;
   bool IsAlmostTrailingComment : 1;
 
-  /// \brief Constructor for AST deserialization.
+  /// Constructor for AST deserialization.
   RawComment(SourceRange SR, CommentKind K, bool IsTrailingComment,
              bool IsAlmostTrailingComment) :
     Range(SR), RawTextValid(false), BriefTextValid(false), Kind(K),
@@ -147,7 +179,7 @@
   friend class ASTReader;
 };
 
-/// \brief Compare comments' source locations.
+/// Compare comments' source locations.
 template<>
 class BeforeThanCompare<RawComment> {
   const SourceManager &SM;
@@ -156,7 +188,7 @@
   explicit BeforeThanCompare(const SourceManager &SM) : SM(SM) { }
 
   bool operator()(const RawComment &LHS, const RawComment &RHS) {
-    return SM.isBeforeInTranslationUnit(LHS.getLocStart(), RHS.getLocStart());
+    return SM.isBeforeInTranslationUnit(LHS.getBeginLoc(), RHS.getBeginLoc());
   }
 
   bool operator()(const RawComment *LHS, const RawComment *RHS) {
@@ -164,7 +196,7 @@
   }
 };
 
-/// \brief This class represents all comments included in the translation unit,
+/// This class represents all comments included in the translation unit,
 /// sorted in order of appearance in the translation unit.
 class RawCommentList {
 public:
diff --git a/linux-x64/clang/include/clang/AST/RecordLayout.h b/linux-x64/clang/include/clang/AST/RecordLayout.h
index 696d44e..a546c20 100644
--- a/linux-x64/clang/include/clang/AST/RecordLayout.h
+++ b/linux-x64/clang/include/clang/AST/RecordLayout.h
@@ -71,6 +71,10 @@
   // Alignment - Alignment of record in characters.
   CharUnits Alignment;
 
+  // UnadjustedAlignment - Maximum of the alignments of the record members in
+  // characters.
+  CharUnits UnadjustedAlignment;
+
   /// RequiredAlignment - The required alignment of the object.  In the MS-ABI
   /// the __declspec(align()) trumps #pramga pack and must always be obeyed.
   CharUnits RequiredAlignment;
@@ -111,7 +115,7 @@
     /// Only used for MS-ABI.
     bool EndsWithZeroSizedObject : 1;
 
-    /// \brief True if this class is zero sized or first base is zero sized or
+    /// True if this class is zero sized or first base is zero sized or
     /// has this property.  Only used for MS-ABI.
     bool LeadsWithZeroSizedBase : 1;
 
@@ -120,10 +124,10 @@
 
     /// BaseSharingVBPtr - The base we share vbptr with.
     const CXXRecordDecl *BaseSharingVBPtr;
-    
+
     /// FIXME: This should really use a SmallPtrMap, once we have one in LLVM :)
     using BaseOffsetsMapTy = llvm::DenseMap<const CXXRecordDecl *, CharUnits>;
-    
+
     /// BaseOffsets - Contains a map from base classes to their offset.
     BaseOffsetsMapTy BaseOffsets;
 
@@ -136,6 +140,7 @@
   CXXRecordLayoutInfo *CXXInfo = nullptr;
 
   ASTRecordLayout(const ASTContext &Ctx, CharUnits size, CharUnits alignment,
+                  CharUnits unadjustedAlignment,
                   CharUnits requiredAlignment, CharUnits datasize,
                   ArrayRef<uint64_t> fieldoffsets);
 
@@ -144,6 +149,7 @@
   // Constructor for C++ records.
   ASTRecordLayout(const ASTContext &Ctx,
                   CharUnits size, CharUnits alignment,
+                  CharUnits unadjustedAlignment,
                   CharUnits requiredAlignment,
                   bool hasOwnVFPtr, bool hasExtendableVFPtr,
                   CharUnits vbptroffset,
@@ -162,7 +168,7 @@
   ~ASTRecordLayout() = default;
 
   void Destroy(ASTContext &Ctx);
-  
+
 public:
   ASTRecordLayout(const ASTRecordLayout &) = delete;
   ASTRecordLayout &operator=(const ASTRecordLayout &) = delete;
@@ -170,6 +176,10 @@
   /// getAlignment - Get the record alignment in characters.
   CharUnits getAlignment() const { return Alignment; }
 
+  /// getUnadjustedAlignment - Get the record alignment in characters, before
+  /// alignment adjustement.
+  CharUnits getUnadjustedAlignment() const { return UnadjustedAlignment; }
+
   /// getSize - Get the record size in characters.
   CharUnits getSize() const { return Size; }
 
@@ -259,7 +269,7 @@
     assert(CXXInfo && "Record layout does not have C++ specific info!");
     return CXXInfo->HasExtendableVFPtr;
   }
-  
+
   /// hasOwnVBPtr - Does this class provide its own virtual-base
   /// table pointer, rather than inheriting one from a primary base
   /// class?
diff --git a/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h b/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
index ba76ea0..0d2b670 100644
--- a/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
+++ b/linux-x64/clang/include/clang/AST/RecursiveASTVisitor.h
@@ -83,7 +83,7 @@
       return false;                                                            \
   } while (false)
 
-/// \brief A class that does preorder or postorder
+/// A class that does preorder or postorder
 /// depth-first traversal on the entire Clang AST and visits each node.
 ///
 /// This class performs three distinct tasks:
@@ -146,7 +146,7 @@
 /// from which they were produced.
 ///
 /// By default, this visitor preorder traverses the AST. If postorder traversal
-/// is needed, the \c shouldTraversePostOrder method needs to be overriden
+/// is needed, the \c shouldTraversePostOrder method needs to be overridden
 /// to return \c true.
 template <typename Derived> class RecursiveASTVisitor {
 public:
@@ -158,25 +158,25 @@
   typedef SmallVectorImpl<llvm::PointerIntPair<Stmt *, 1, bool>>
     DataRecursionQueue;
 
-  /// \brief Return a reference to the derived class.
+  /// Return a reference to the derived class.
   Derived &getDerived() { return *static_cast<Derived *>(this); }
 
-  /// \brief Return whether this visitor should recurse into
+  /// Return whether this visitor should recurse into
   /// template instantiations.
   bool shouldVisitTemplateInstantiations() const { return false; }
 
-  /// \brief Return whether this visitor should recurse into the types of
+  /// Return whether this visitor should recurse into the types of
   /// TypeLocs.
   bool shouldWalkTypesOfTypeLocs() const { return true; }
 
-  /// \brief Return whether this visitor should recurse into implicit
+  /// Return whether this visitor should recurse into implicit
   /// code, e.g., implicit constructors and destructors.
   bool shouldVisitImplicitCode() const { return false; }
 
-  /// \brief Return whether this visitor should traverse post-order.
+  /// Return whether this visitor should traverse post-order.
   bool shouldTraversePostOrder() const { return false; }
 
-  /// \brief Recursively visit a statement or expression, by
+  /// Recursively visit a statement or expression, by
   /// dispatching to Traverse*() based on the argument's dynamic type.
   ///
   /// \returns false if the visitation was terminated early, true
@@ -195,70 +195,70 @@
   /// \returns false if the visitation was terminated early, true otherwise.
   bool dataTraverseStmtPost(Stmt *S) { return true; }
 
-  /// \brief Recursively visit a type, by dispatching to
+  /// Recursively visit a type, by dispatching to
   /// Traverse*Type() based on the argument's getTypeClass() property.
   ///
   /// \returns false if the visitation was terminated early, true
   /// otherwise (including when the argument is a Null type).
   bool TraverseType(QualType T);
 
-  /// \brief Recursively visit a type with location, by dispatching to
+  /// Recursively visit a type with location, by dispatching to
   /// Traverse*TypeLoc() based on the argument type's getTypeClass() property.
   ///
   /// \returns false if the visitation was terminated early, true
   /// otherwise (including when the argument is a Null type location).
   bool TraverseTypeLoc(TypeLoc TL);
 
-  /// \brief Recursively visit an attribute, by dispatching to
+  /// Recursively visit an attribute, by dispatching to
   /// Traverse*Attr() based on the argument's dynamic type.
   ///
   /// \returns false if the visitation was terminated early, true
   /// otherwise (including when the argument is a Null type location).
   bool TraverseAttr(Attr *At);
 
-  /// \brief Recursively visit a declaration, by dispatching to
+  /// Recursively visit a declaration, by dispatching to
   /// Traverse*Decl() based on the argument's dynamic type.
   ///
   /// \returns false if the visitation was terminated early, true
   /// otherwise (including when the argument is NULL).
   bool TraverseDecl(Decl *D);
 
-  /// \brief Recursively visit a C++ nested-name-specifier.
+  /// Recursively visit a C++ nested-name-specifier.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseNestedNameSpecifier(NestedNameSpecifier *NNS);
 
-  /// \brief Recursively visit a C++ nested-name-specifier with location
+  /// Recursively visit a C++ nested-name-specifier with location
   /// information.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS);
 
-  /// \brief Recursively visit a name with its location information.
+  /// Recursively visit a name with its location information.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseDeclarationNameInfo(DeclarationNameInfo NameInfo);
 
-  /// \brief Recursively visit a template name and dispatch to the
+  /// Recursively visit a template name and dispatch to the
   /// appropriate method.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseTemplateName(TemplateName Template);
 
-  /// \brief Recursively visit a template argument and dispatch to the
+  /// Recursively visit a template argument and dispatch to the
   /// appropriate method for the argument type.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   // FIXME: migrate callers to TemplateArgumentLoc instead.
   bool TraverseTemplateArgument(const TemplateArgument &Arg);
 
-  /// \brief Recursively visit a template argument location and dispatch to the
+  /// Recursively visit a template argument location and dispatch to the
   /// appropriate method for the argument type.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseTemplateArgumentLoc(const TemplateArgumentLoc &ArgLoc);
 
-  /// \brief Recursively visit a set of template arguments.
+  /// Recursively visit a set of template arguments.
   /// This can be overridden by a subclass, but it's not expected that
   /// will be needed -- this visitor always dispatches to another.
   ///
@@ -267,13 +267,13 @@
   bool TraverseTemplateArguments(const TemplateArgument *Args,
                                  unsigned NumArgs);
 
-  /// \brief Recursively visit a base specifier. This can be overridden by a
+  /// Recursively visit a base specifier. This can be overridden by a
   /// subclass.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseCXXBaseSpecifier(const CXXBaseSpecifier &Base);
 
-  /// \brief Recursively visit a constructor initializer.  This
+  /// Recursively visit a constructor initializer.  This
   /// automatically dispatches to another visitor for the initializer
   /// expression, but not for the name of the initializer, so may
   /// be overridden for clients that need access to the name.
@@ -281,14 +281,14 @@
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseConstructorInitializer(CXXCtorInitializer *Init);
 
-  /// \brief Recursively visit a lambda capture. \c Init is the expression that
+  /// Recursively visit a lambda capture. \c Init is the expression that
   /// will be used to initialize the capture.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseLambdaCapture(LambdaExpr *LE, const LambdaCapture *C,
                              Expr *Init);
 
-  /// \brief Recursively visit the body of a lambda expression.
+  /// Recursively visit the body of a lambda expression.
   ///
   /// This provides a hook for visitors that need more context when visiting
   /// \c LE->getBody().
@@ -296,7 +296,7 @@
   /// \returns false if the visitation was terminated early, true otherwise.
   bool TraverseLambdaBody(LambdaExpr *LE, DataRecursionQueue *Queue = nullptr);
 
-  /// \brief Recursively visit the syntactic or semantic form of an
+  /// Recursively visit the syntactic or semantic form of an
   /// initialization list.
   ///
   /// \returns false if the visitation was terminated early, true otherwise.
@@ -305,7 +305,7 @@
 
   // ---- Methods on Attrs ----
 
-  // \brief Visit an attribute.
+  // Visit an attribute.
   bool VisitAttr(Attr *A) { return true; }
 
 // Declare Traverse* and empty Visit* for all Attr classes.
@@ -529,7 +529,7 @@
   bool TraverseOMPClause(OMPClause *C);
 #define OPENMP_CLAUSE(Name, Class) bool Visit##Class(Class *C);
 #include "clang/Basic/OpenMPKinds.def"
-  /// \brief Process clauses with list of variables.
+  /// Process clauses with list of variables.
   template <typename T> bool VisitOMPClauseList(T *Node);
   /// Process clauses with pre-initis.
   bool VisitOMPClauseWithPreInit(OMPClauseWithPreInit *Node);
@@ -993,6 +993,12 @@
   TRY_TO(TraverseType(T->getPointeeType()));
 })
 
+DEF_TRAVERSE_TYPE(DependentVectorType, {
+  if (T->getSizeExpr())
+    TRY_TO(TraverseStmt(T->getSizeExpr()));
+  TRY_TO(TraverseType(T->getElementType()));
+})
+
 DEF_TRAVERSE_TYPE(DependentSizedExtVectorType, {
   if (T->getSizeExpr())
     TRY_TO(TraverseStmt(T->getSizeExpr()));
@@ -1221,6 +1227,12 @@
   TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
 })
 
+DEF_TRAVERSE_TYPELOC(DependentVectorType, {
+  if (TL.getTypePtr()->getSizeExpr())
+    TRY_TO(TraverseStmt(TL.getTypePtr()->getSizeExpr()));
+  TRY_TO(TraverseType(TL.getTypePtr()->getElementType()));
+})
+
 // FIXME: size and attributes
 // FIXME: base VectorTypeLoc is unfinished
 DEF_TRAVERSE_TYPELOC(ExtVectorType, {
@@ -2585,6 +2597,7 @@
 
 // These literals (all of them) do not need any action.
 DEF_TRAVERSE_STMT(IntegerLiteral, {})
+DEF_TRAVERSE_STMT(FixedPointLiteral, {})
 DEF_TRAVERSE_STMT(CharacterLiteral, {})
 DEF_TRAVERSE_STMT(FloatingLiteral, {})
 DEF_TRAVERSE_STMT(ImaginaryLiteral, {})
diff --git a/linux-x64/clang/include/clang/AST/Redeclarable.h b/linux-x64/clang/include/clang/AST/Redeclarable.h
index 86b0f35..c2bd6e6 100644
--- a/linux-x64/clang/include/clang/AST/Redeclarable.h
+++ b/linux-x64/clang/include/clang/AST/Redeclarable.h
@@ -36,7 +36,7 @@
 //    DeclLink that may point to one of 3 possible states:
 //      - the "previous" (temporal) element in the chain
 //      - the "latest" (temporal) element in the chain
-//      - the an "uninitialized-latest" value (when newly-constructed)
+//      - the "uninitialized-latest" value (when newly-constructed)
 //
 //  - The first element is also often called the canonical element. Every
 //    element has a pointer to it so that "getCanonical" can be fast.
@@ -48,10 +48,8 @@
 //    "most-recent" when referring to temporal order: order of addition
 //    to the chain.
 //
-//  - To make matters confusing, the DeclLink type uses the term "next"
-//    for its pointer-storage internally (thus functions like
-//    NextIsPrevious). It's easiest to just ignore the implementation of
-//    DeclLink when making sense of the redeclaration chain.
+//  - It's easiest to just ignore the implementation of DeclLink when making
+//    sense of the redeclaration chain.
 //
 //  - There's also a "definition" link for several types of
 //    redeclarable, where only one definition should exist at any given
@@ -82,7 +80,7 @@
 //        | link                +-----+                  |
 //        +-->-------------------------------------------+
 
-/// \brief Provides common interface for the Decls that can be redeclared.
+/// Provides common interface for the Decls that can be redeclared.
 template<typename decl_type>
 class Redeclarable {
 protected:
@@ -105,66 +103,64 @@
     /// previous declaration.
     using NotKnownLatest = llvm::PointerUnion<Previous, UninitializedLatest>;
 
-    mutable llvm::PointerUnion<NotKnownLatest, KnownLatest> Next;
+    mutable llvm::PointerUnion<NotKnownLatest, KnownLatest> Link;
 
   public:
     enum PreviousTag { PreviousLink };
     enum LatestTag { LatestLink };
 
     DeclLink(LatestTag, const ASTContext &Ctx)
-        : Next(NotKnownLatest(reinterpret_cast<UninitializedLatest>(&Ctx))) {}
-    DeclLink(PreviousTag, decl_type *D) : Next(NotKnownLatest(Previous(D))) {}
+        : Link(NotKnownLatest(reinterpret_cast<UninitializedLatest>(&Ctx))) {}
+    DeclLink(PreviousTag, decl_type *D) : Link(NotKnownLatest(Previous(D))) {}
 
-    bool NextIsPrevious() const {
-      return Next.is<NotKnownLatest>() &&
+    bool isFirst() const {
+      return Link.is<KnownLatest>() ||
              // FIXME: 'template' is required on the next line due to an
              // apparent clang bug.
-             Next.get<NotKnownLatest>().template is<Previous>();
+             Link.get<NotKnownLatest>().template is<UninitializedLatest>();
     }
 
-    bool NextIsLatest() const { return !NextIsPrevious(); }
-
-    decl_type *getNext(const decl_type *D) const {
-      if (Next.is<NotKnownLatest>()) {
-        NotKnownLatest NKL = Next.get<NotKnownLatest>();
+    decl_type *getPrevious(const decl_type *D) const {
+      if (Link.is<NotKnownLatest>()) {
+        NotKnownLatest NKL = Link.get<NotKnownLatest>();
         if (NKL.is<Previous>())
           return static_cast<decl_type*>(NKL.get<Previous>());
 
         // Allocate the generational 'most recent' cache now, if needed.
-        Next = KnownLatest(*reinterpret_cast<const ASTContext *>(
+        Link = KnownLatest(*reinterpret_cast<const ASTContext *>(
                                NKL.get<UninitializedLatest>()),
                            const_cast<decl_type *>(D));
       }
 
-      return static_cast<decl_type*>(Next.get<KnownLatest>().get(D));
+      return static_cast<decl_type*>(Link.get<KnownLatest>().get(D));
     }
 
     void setPrevious(decl_type *D) {
-      assert(NextIsPrevious() && "decl became non-canonical unexpectedly");
-      Next = Previous(D);
+      assert(!isFirst() && "decl became non-canonical unexpectedly");
+      Link = Previous(D);
     }
 
     void setLatest(decl_type *D) {
-      assert(NextIsLatest() && "decl became canonical unexpectedly");
-      if (Next.is<NotKnownLatest>()) {
-        NotKnownLatest NKL = Next.get<NotKnownLatest>();
-        Next = KnownLatest(*reinterpret_cast<const ASTContext *>(
+      assert(isFirst() && "decl became canonical unexpectedly");
+      if (Link.is<NotKnownLatest>()) {
+        NotKnownLatest NKL = Link.get<NotKnownLatest>();
+        Link = KnownLatest(*reinterpret_cast<const ASTContext *>(
                                NKL.get<UninitializedLatest>()),
                            D);
       } else {
-        auto Latest = Next.get<KnownLatest>();
+        auto Latest = Link.get<KnownLatest>();
         Latest.set(D);
-        Next = Latest;
+        Link = Latest;
       }
     }
 
-    void markIncomplete() { Next.get<KnownLatest>().markIncomplete(); }
+    void markIncomplete() { Link.get<KnownLatest>().markIncomplete(); }
 
     Decl *getLatestNotUpdated() const {
-      assert(NextIsLatest() && "expected a canonical decl");
-      if (Next.is<NotKnownLatest>())
+      assert(isFirst() && "expected a canonical decl");
+      if (Link.is<NotKnownLatest>())
         return nullptr;
-      return Next.get<KnownLatest>().getNotUpdated();
+      return Link.get<KnownLatest>().getNotUpdated();
     }
   };
 
@@ -176,10 +172,10 @@
     return DeclLink(DeclLink::LatestLink, Ctx);
   }
 
-  /// \brief Points to the next redeclaration in the chain.
+  /// Points to the next redeclaration in the chain.
   ///
-  /// If NextIsPrevious() is true, this is a link to the previous declaration
-  /// of this same Decl. If NextIsLatest() is true, this is the first
+  /// If isFirst() is false, this is a link to the previous declaration
+  /// of this same Decl. If isFirst() is true, this is the first
   /// declaration and Link points to the latest declaration. For example:
   ///
   ///  #1 int f(int x, int y = 1); // <pointer to #3, true>
@@ -192,7 +188,7 @@
   decl_type *First;
 
   decl_type *getNextRedeclaration() const {
-    return RedeclLink.getNext(static_cast<const decl_type *>(this));
+    return RedeclLink.getPrevious(static_cast<const decl_type *>(this));
   }
 
 public:
@@ -203,10 +199,10 @@
       : RedeclLink(LatestDeclLink(Ctx)),
         First(static_cast<decl_type *>(this)) {}
 
-  /// \brief Return the previous declaration of this declaration or NULL if this
+  /// Return the previous declaration of this declaration or NULL if this
   /// is the first declaration.
   decl_type *getPreviousDecl() {
-    if (RedeclLink.NextIsPrevious())
+    if (!RedeclLink.isFirst())
       return getNextRedeclaration();
     return nullptr;
   }
@@ -215,32 +211,32 @@
                  static_cast<const decl_type*>(this))->getPreviousDecl();
   }
 
-  /// \brief Return the first declaration of this declaration or itself if this
+  /// Return the first declaration of this declaration or itself if this
   /// is the only declaration.
   decl_type *getFirstDecl() { return First; }
 
-  /// \brief Return the first declaration of this declaration or itself if this
+  /// Return the first declaration of this declaration or itself if this
   /// is the only declaration.
   const decl_type *getFirstDecl() const { return First; }
 
-  /// \brief True if this is the first declaration in its redeclaration chain.
-  bool isFirstDecl() const { return RedeclLink.NextIsLatest(); }
+  /// True if this is the first declaration in its redeclaration chain.
+  bool isFirstDecl() const { return RedeclLink.isFirst(); }
 
-  /// \brief Returns the most recent (re)declaration of this declaration.
+  /// Returns the most recent (re)declaration of this declaration.
   decl_type *getMostRecentDecl() {
     return getFirstDecl()->getNextRedeclaration();
   }
 
-  /// \brief Returns the most recent (re)declaration of this declaration.
+  /// Returns the most recent (re)declaration of this declaration.
   const decl_type *getMostRecentDecl() const {
     return getFirstDecl()->getNextRedeclaration();
   }
 
-  /// \brief Set the previous declaration. If PrevDecl is NULL, set this as the
+  /// Set the previous declaration. If PrevDecl is NULL, set this as the
   /// first and only declaration.
   void setPreviousDecl(decl_type *PrevDecl);
 
-  /// \brief Iterates through all the redeclarations of the same decl.
+  /// Iterates through all the redeclarations of the same decl.
   class redecl_iterator {
     /// Current - The current declaration.
     decl_type *Current = nullptr;
@@ -294,7 +290,7 @@
 
   using redecl_range = llvm::iterator_range<redecl_iterator>;
 
-  /// \brief Returns an iterator range for all the redeclarations of the same
+  /// Returns an iterator range for all the redeclarations of the same
   /// decl. It will iterate at least once (when this decl is the only one).
   redecl_range redecls() const {
     return redecl_range(redecl_iterator(const_cast<decl_type *>(
@@ -306,11 +302,11 @@
   redecl_iterator redecls_end() const { return redecls().end(); }
 };
 
-/// \brief Get the primary declaration for a declaration from an AST file. That
+/// Get the primary declaration for a declaration from an AST file. That
 /// will be the first-loaded declaration.
 Decl *getPrimaryMergedDecl(Decl *D);
 
-/// \brief Provides common interface for the Decls that cannot be redeclared,
+/// Provides common interface for the Decls that cannot be redeclared,
 /// but can be merged if the same declaration is brought in from multiple
 /// modules.
 template<typename decl_type>
@@ -318,25 +314,25 @@
 public:
   Mergeable() = default;
 
-  /// \brief Return the first declaration of this declaration or itself if this
+  /// Return the first declaration of this declaration or itself if this
   /// is the only declaration.
   decl_type *getFirstDecl() {
-    decl_type *D = static_cast<decl_type*>(this);
+    auto *D = static_cast<decl_type *>(this);
     if (!D->isFromASTFile())
       return D;
     return cast<decl_type>(getPrimaryMergedDecl(const_cast<decl_type*>(D)));
   }
 
-  /// \brief Return the first declaration of this declaration or itself if this
+  /// Return the first declaration of this declaration or itself if this
   /// is the only declaration.
   const decl_type *getFirstDecl() const {
-    const decl_type *D = static_cast<const decl_type*>(this);
+    const auto *D = static_cast<const decl_type *>(this);
     if (!D->isFromASTFile())
       return D;
     return cast<decl_type>(getPrimaryMergedDecl(const_cast<decl_type*>(D)));
   }
 
-  /// \brief Returns true if this is the first declaration.
+  /// Returns true if this is the first declaration.
   bool isFirstDecl() const { return getFirstDecl() == this; }
 };
 
diff --git a/linux-x64/clang/include/clang/AST/SelectorLocationsKind.h b/linux-x64/clang/include/clang/AST/SelectorLocationsKind.h
index 6d903f8..6ca2dba 100644
--- a/linux-x64/clang/include/clang/AST/SelectorLocationsKind.h
+++ b/linux-x64/clang/include/clang/AST/SelectorLocationsKind.h
@@ -23,32 +23,32 @@
   class Expr;
   class ParmVarDecl;
 
-/// \brief Whether all locations of the selector identifiers are in a
+/// Whether all locations of the selector identifiers are in a
 /// "standard" position.
 enum SelectorLocationsKind {
-  /// \brief Non-standard.
+  /// Non-standard.
   SelLoc_NonStandard = 0,
 
-  /// \brief For nullary selectors, immediately before the end:
+  /// For nullary selectors, immediately before the end:
   ///    "[foo release]" / "-(void)release;"
   /// Or immediately before the arguments:
   ///    "[foo first:1 second:2]" / "-(id)first:(int)x second:(int)y;
   SelLoc_StandardNoSpace = 1,
 
-  /// \brief For nullary selectors, immediately before the end:
+  /// For nullary selectors, immediately before the end:
   ///    "[foo release]" / "-(void)release;"
   /// Or with a space between the arguments:
   ///    "[foo first: 1 second: 2]" / "-(id)first: (int)x second: (int)y;
   SelLoc_StandardWithSpace = 2
 };
 
-/// \brief Returns true if all \p SelLocs are in a "standard" location.
+/// Returns true if all \p SelLocs are in a "standard" location.
 SelectorLocationsKind hasStandardSelectorLocs(Selector Sel,
                                               ArrayRef<SourceLocation> SelLocs,
                                               ArrayRef<Expr *> Args,
                                               SourceLocation EndLoc);
 
-/// \brief Get the "standard" location of a selector identifier, e.g:
+/// Get the "standard" location of a selector identifier, e.g:
 /// For nullary selectors, immediately before ']': "[foo release]"
 ///
 /// \param WithArgSpace if true the standard location is with a space apart
@@ -60,13 +60,13 @@
                                       ArrayRef<Expr *> Args,
                                       SourceLocation EndLoc);
 
-/// \brief Returns true if all \p SelLocs are in a "standard" location.
+/// Returns true if all \p SelLocs are in a "standard" location.
 SelectorLocationsKind hasStandardSelectorLocs(Selector Sel,
                                               ArrayRef<SourceLocation> SelLocs,
                                               ArrayRef<ParmVarDecl *> Args,
                                               SourceLocation EndLoc);
 
-/// \brief Get the "standard" location of a selector identifier, e.g:
+/// Get the "standard" location of a selector identifier, e.g:
 /// For nullary selectors, immediately before ']': "[foo release]"
 ///
 /// \param WithArgSpace if true the standard location is with a space apart
diff --git a/linux-x64/clang/include/clang/AST/Stmt.h b/linux-x64/clang/include/clang/AST/Stmt.h
index aa8f3d9..3b0b823 100644
--- a/linux-x64/clang/include/clang/AST/Stmt.h
+++ b/linux-x64/clang/include/clang/AST/Stmt.h
@@ -92,7 +92,7 @@
   class StmtBitfields {
     friend class Stmt;
 
-    /// \brief The statement class.
+    /// The statement class.
     unsigned sClass : 8;
   };
   enum { NumStmtBits = 8 };
@@ -198,11 +198,13 @@
 
   class CastExprBitfields {
     friend class CastExpr;
+    friend class ImplicitCastExpr;
 
     unsigned : NumExprBits;
 
     unsigned Kind : 6;
-    unsigned BasePathSize : 32 - 6 - NumExprBits;
+    unsigned PartOfExplicitCast : 1; // Only set for ImplicitCastExpr.
+    unsigned BasePathIsEmpty : 1;
   };
 
   class CallExprBitfields {
@@ -269,17 +271,17 @@
     friend class ASTStmtReader;
     friend class ASTStmtWriter;
     friend class TypeTraitExpr;
-    
+
     unsigned : NumExprBits;
-    
-    /// \brief The kind of type trait, which is a value of a TypeTrait enumerator.
+
+    /// The kind of type trait, which is a value of a TypeTrait enumerator.
     unsigned Kind : 8;
-    
-    /// \brief If this expression is not value-dependent, this indicates whether
+
+    /// If this expression is not value-dependent, this indicates whether
     /// the trait evaluated true or false.
     unsigned Value : 1;
 
-    /// \brief The number of arguments to this type trait.
+    /// The number of arguments to this type trait.
     unsigned NumArgs : 32 - 8 - 1 - NumExprBits;
   };
 
@@ -330,7 +332,7 @@
   void operator delete(void *, void *) noexcept {}
 
 public:
-  /// \brief A placeholder type used to construct an empty shell of a
+  /// A placeholder type used to construct an empty shell of a
   /// type, that will be filled in later (e.g., by some
   /// de-serialization).
   struct EmptyShell {};
@@ -369,11 +371,11 @@
   };
 
 private:
-  /// \brief Whether statistic collection is enabled.
+  /// Whether statistic collection is enabled.
   static bool StatisticsEnabled;
 
 protected:
-  /// \brief Construct an empty statement.
+  /// Construct an empty statement.
   explicit Stmt(StmtClass SC, EmptyShell) : Stmt(SC) {}
 
 public:
@@ -396,15 +398,23 @@
   /// value objects created/interpreted by SourceManager. We assume AST
   /// clients will have a pointer to the respective SourceManager.
   SourceRange getSourceRange() const LLVM_READONLY;
-  SourceLocation getLocStart() const LLVM_READONLY;
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   // global temp stats (until we have a per-module visitor)
   static void addStmtClass(const StmtClass s);
   static void EnableStatistics();
   static void PrintStats();
 
-  /// \brief Dumps the specified AST fragment and all subtrees to
+  /// Dumps the specified AST fragment and all subtrees to
   /// \c llvm::errs().
   void dump() const;
   void dump(SourceManager &SM) const;
@@ -432,7 +442,7 @@
     return const_cast<Stmt *>(this)->IgnoreImplicit();
   }
 
-  /// \brief Skip no-op (attributed, compound) container stmts and skip captured
+  /// Skip no-op (attributed, compound) container stmts and skip captured
   /// stmt at the top, if \a IgnoreCaptured is true.
   Stmt *IgnoreContainers(bool IgnoreCaptured = false);
   const Stmt *IgnoreContainers(bool IgnoreCaptured = false) const {
@@ -455,6 +465,7 @@
   using const_child_range = llvm::iterator_range<const_child_iterator>;
 
   child_range children();
+
   const_child_range children() const {
     auto Children = const_cast<Stmt *>(this)->children();
     return const_child_range(Children.begin(), Children.end());
@@ -466,7 +477,7 @@
   const_child_iterator child_begin() const { return children().begin(); }
   const_child_iterator child_end() const { return children().end(); }
 
-  /// \brief Produce a unique representation of the given statement.
+  /// Produce a unique representation of the given statement.
   ///
   /// \param ID once the profiling operation is complete, will contain
   /// the unique representation of the given statement.
@@ -481,7 +492,7 @@
   void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context,
                bool Canonical) const;
 
-  /// \brief Calculate a unique representation for a statement that is
+  /// Calculate a unique representation for a statement that is
   /// stable across compiler invocations.
   ///
   /// \param ID profile information will be stored in ID.
@@ -503,7 +514,7 @@
   DeclStmt(DeclGroupRef dg, SourceLocation startLoc, SourceLocation endLoc)
       : Stmt(DeclStmtClass), DG(dg), StartLoc(startLoc), EndLoc(endLoc) {}
 
-  /// \brief Build an empty declaration statement.
+  /// Build an empty declaration statement.
   explicit DeclStmt(EmptyShell Empty) : Stmt(DeclStmtClass, Empty) {}
 
   /// isSingleDecl - This method returns true if this DeclStmt refers
@@ -519,13 +530,23 @@
   DeclGroupRef getDeclGroup() { return DG; }
   void setDeclGroup(DeclGroupRef DGR) { DG = DGR; }
 
-  SourceLocation getStartLoc() const { return StartLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getStartLoc() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
   void setStartLoc(SourceLocation L) { StartLoc = L; }
   SourceLocation getEndLoc() const { return EndLoc; }
   void setEndLoc(SourceLocation L) { EndLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return StartLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return EndLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return StartLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return EndLoc;
+  }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DeclStmtClass;
@@ -543,9 +564,11 @@
   using decl_const_range = llvm::iterator_range<const_decl_iterator>;
 
   decl_range decls() { return decl_range(decl_begin(), decl_end()); }
+
   decl_const_range decls() const {
     return decl_const_range(decl_begin(), decl_end());
   }
+
   decl_iterator decl_begin() { return DG.begin(); }
   decl_iterator decl_end() { return DG.end(); }
   const_decl_iterator decl_begin() const { return DG.begin(); }
@@ -567,7 +590,7 @@
 class NullStmt : public Stmt {
   SourceLocation SemiLoc;
 
-  /// \brief True if the null statement was preceded by an empty macro, e.g:
+  /// True if the null statement was preceded by an empty macro, e.g:
   /// @code
   ///   #define CALL(x)
   ///   CALL(0);
@@ -582,7 +605,7 @@
       : Stmt(NullStmtClass), SemiLoc(L),
         HasLeadingEmptyMacro(hasLeadingEmptyMacro) {}
 
-  /// \brief Build an empty null statement.
+  /// Build an empty null statement.
   explicit NullStmt(EmptyShell Empty) : Stmt(NullStmtClass, Empty) {}
 
   SourceLocation getSemiLoc() const { return SemiLoc; }
@@ -590,8 +613,16 @@
 
   bool hasLeadingEmptyMacro() const { return HasLeadingEmptyMacro; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SemiLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SemiLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SemiLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return SemiLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == NullStmtClass;
@@ -619,13 +650,13 @@
   static CompoundStmt *Create(const ASTContext &C, ArrayRef<Stmt *> Stmts,
                               SourceLocation LB, SourceLocation RB);
 
-  // \brief Build an empty compound statement with a location.
+  // Build an empty compound statement with a location.
   explicit CompoundStmt(SourceLocation Loc)
       : Stmt(CompoundStmtClass), LBraceLoc(Loc), RBraceLoc(Loc) {
     CompoundStmtBits.NumStmts = 0;
   }
 
-  // \brief Build an empty compound statement.
+  // Build an empty compound statement.
   static CompoundStmt *CreateEmpty(const ASTContext &C, unsigned NumStmts);
 
   bool body_empty() const { return CompoundStmtBits.NumStmts == 0; }
@@ -638,6 +669,7 @@
   body_iterator body_begin() { return getTrailingObjects<Stmt *>(); }
   body_iterator body_end() { return body_begin() + size(); }
   Stmt *body_front() { return !body_empty() ? body_begin()[0] : nullptr; }
+
   Stmt *body_back() {
     return !body_empty() ? body_begin()[size() - 1] : nullptr;
   }
@@ -657,6 +689,7 @@
   const_body_iterator body_begin() const {
     return getTrailingObjects<Stmt *>();
   }
+
   const_body_iterator body_end() const { return body_begin() + size(); }
 
   const Stmt *body_front() const {
@@ -688,8 +721,16 @@
     return const_reverse_body_iterator(body_begin());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LBraceLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RBraceLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LBraceLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RBraceLoc; }
 
   SourceLocation getLBracLoc() const { return LBraceLoc; }
   SourceLocation getRBracLoc() const { return RBraceLoc; }
@@ -737,8 +778,16 @@
     return const_cast<SwitchCase*>(this)->getSubStmt();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return KeywordLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == CaseStmtClass ||
@@ -762,7 +811,7 @@
     EllipsisLoc = ellipsisLoc;
   }
 
-  /// \brief Build an empty switch case statement.
+  /// Build an empty switch case statement.
   explicit CaseStmt(EmptyShell Empty) : SwitchCase(CaseStmtClass, Empty) {}
 
   SourceLocation getCaseLoc() const { return KeywordLoc; }
@@ -790,15 +839,23 @@
   void setLHS(Expr *Val) { SubExprs[LHS] = reinterpret_cast<Stmt*>(Val); }
   void setRHS(Expr *Val) { SubExprs[RHS] = reinterpret_cast<Stmt*>(Val); }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return KeywordLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     // Handle deeply nested case statements with iteration instead of recursion.
     const CaseStmt *CS = this;
-    while (const CaseStmt *CS2 = dyn_cast<CaseStmt>(CS->getSubStmt()))
+    while (const auto *CS2 = dyn_cast<CaseStmt>(CS->getSubStmt()))
       CS = CS2;
 
-    return CS->getSubStmt()->getLocEnd();
+    return CS->getSubStmt()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -818,7 +875,7 @@
   DefaultStmt(SourceLocation DL, SourceLocation CL, Stmt *substmt) :
     SwitchCase(DefaultStmtClass, DL, CL), SubStmt(substmt) {}
 
-  /// \brief Build an empty default statement.
+  /// Build an empty default statement.
   explicit DefaultStmt(EmptyShell Empty)
       : SwitchCase(DefaultStmtClass, Empty) {}
 
@@ -831,8 +888,18 @@
   SourceLocation getColonLoc() const { return ColonLoc; }
   void setColonLoc(SourceLocation L) { ColonLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return KeywordLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubStmt->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubStmt->getEndLoc();
+  }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DefaultStmtClass;
@@ -842,10 +909,10 @@
   child_range children() { return child_range(&SubStmt, &SubStmt+1); }
 };
 
-inline SourceLocation SwitchCase::getLocEnd() const {
-  if (const CaseStmt *CS = dyn_cast<CaseStmt>(this))
-    return CS->getLocEnd();
-  return cast<DefaultStmt>(this)->getLocEnd();
+inline SourceLocation SwitchCase::getEndLoc() const {
+  if (const auto *CS = dyn_cast<CaseStmt>(this))
+    return CS->getEndLoc();
+  return cast<DefaultStmt>(this)->getEndLoc();
 }
 
 /// LabelStmt - Represents a label, which has a substatement.  For example:
@@ -863,7 +930,7 @@
                   "LabelStmt too big");
   }
 
-  // \brief Build an empty label statement.
+  // Build an empty label statement.
   explicit LabelStmt(EmptyShell Empty) : Stmt(LabelStmtClass, Empty) {}
 
   SourceLocation getIdentLoc() const { return IdentLoc; }
@@ -875,8 +942,18 @@
   void setIdentLoc(SourceLocation L) { IdentLoc = L; }
   void setSubStmt(Stmt *SS) { SubStmt = SS; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return IdentLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubStmt->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return IdentLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubStmt->getEndLoc();
+  }
 
   child_range children() { return child_range(&SubStmt, &SubStmt+1); }
 
@@ -885,7 +962,7 @@
   }
 };
 
-/// \brief Represents an attribute applied to a statement.
+/// Represents an attribute applied to a statement.
 ///
 /// Represents an attribute applied to a statement. For example:
 ///   [[omp::for(...)]] for (...) { ... }
@@ -906,7 +983,7 @@
   }
 
   explicit AttributedStmt(EmptyShell Empty, unsigned NumAttrs)
-    : Stmt(AttributedStmtClass, Empty), NumAttrs(NumAttrs) {
+      : Stmt(AttributedStmtClass, Empty), NumAttrs(NumAttrs) {
     std::fill_n(getAttrArrayPtr(), NumAttrs, nullptr);
   }
 
@@ -919,7 +996,7 @@
   static AttributedStmt *Create(const ASTContext &C, SourceLocation Loc,
                                 ArrayRef<const Attr*> Attrs, Stmt *SubStmt);
 
-  // \brief Build an empty attributed statement.
+  // Build an empty attributed statement.
   static AttributedStmt *CreateEmpty(const ASTContext &C, unsigned NumAttrs);
 
   SourceLocation getAttrLoc() const { return AttrLoc; }
@@ -930,8 +1007,18 @@
   Stmt *getSubStmt() { return SubStmt; }
   const Stmt *getSubStmt() const { return SubStmt; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AttrLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubStmt->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AttrLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubStmt->getEndLoc();
+  }
 
   child_range children() { return child_range(&SubStmt, &SubStmt + 1); }
 
@@ -954,10 +1041,10 @@
          Stmt *then, SourceLocation EL = SourceLocation(),
          Stmt *elsev = nullptr);
 
-  /// \brief Build an empty if/then/else statement
+  /// Build an empty if/then/else statement
   explicit IfStmt(EmptyShell Empty) : Stmt(IfStmtClass, Empty) {}
 
-  /// \brief Retrieve the variable declared in this "if" statement, if any.
+  /// Retrieve the variable declared in this "if" statement, if any.
   ///
   /// In the following example, "x" is the condition variable.
   /// \code
@@ -998,13 +1085,21 @@
 
   bool isObjCAvailabilityCheck() const;
 
-  SourceLocation getLocStart() const LLVM_READONLY { return IfLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return IfLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
     if (SubExprs[ELSE])
-      return SubExprs[ELSE]->getLocEnd();
+      return SubExprs[ELSE]->getEndLoc();
     else
-      return SubExprs[THEN]->getLocEnd();
+      return SubExprs[THEN]->getEndLoc();
   }
 
   // Iterators over subexpressions.  The iterators will include iterating
@@ -1033,10 +1128,10 @@
 public:
   SwitchStmt(const ASTContext &C, Stmt *Init, VarDecl *Var, Expr *cond);
 
-  /// \brief Build a empty switch statement.
+  /// Build a empty switch statement.
   explicit SwitchStmt(EmptyShell Empty) : Stmt(SwitchStmtClass, Empty) {}
 
-  /// \brief Retrieve the variable declared in this "switch" statement, if any.
+  /// Retrieve the variable declared in this "switch" statement, if any.
   ///
   /// In the following example, "x" is the condition variable.
   /// \code
@@ -1067,7 +1162,7 @@
   void setBody(Stmt *S) { SubExprs[BODY] = S; }
   SwitchCase *getSwitchCaseList() { return FirstCase.getPointer(); }
 
-  /// \brief Set the case list for this switch statement.
+  /// Set the case list for this switch statement.
   void setSwitchCaseList(SwitchCase *SC) { FirstCase.setPointer(SC); }
 
   SourceLocation getSwitchLoc() const { return SwitchLoc; }
@@ -1093,10 +1188,19 @@
   /// have been explicitly covered.
   bool isAllEnumCasesCovered() const { return FirstCase.getInt(); }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SwitchLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return SwitchLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExprs[BODY] ? SubExprs[BODY]->getLocEnd() : SubExprs[COND]->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExprs[BODY] ? SubExprs[BODY]->getEndLoc()
+                          : SubExprs[COND]->getEndLoc();
   }
 
   // Iterators
@@ -1119,10 +1223,10 @@
   WhileStmt(const ASTContext &C, VarDecl *Var, Expr *cond, Stmt *body,
             SourceLocation WL);
 
-  /// \brief Build an empty while statement.
+  /// Build an empty while statement.
   explicit WhileStmt(EmptyShell Empty) : Stmt(WhileStmtClass, Empty) {}
 
-  /// \brief Retrieve the variable declared in this "while" statement, if any.
+  /// Retrieve the variable declared in this "while" statement, if any.
   ///
   /// In the following example, "x" is the condition variable.
   /// \code
@@ -1149,10 +1253,18 @@
   SourceLocation getWhileLoc() const { return WhileLoc; }
   void setWhileLoc(SourceLocation L) { WhileLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return WhileLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return WhileLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExprs[BODY]->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExprs[BODY]->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -1181,7 +1293,7 @@
     SubExprs[BODY] = body;
   }
 
-  /// \brief Build an empty do-while statement.
+  /// Build an empty do-while statement.
   explicit DoStmt(EmptyShell Empty) : Stmt(DoStmtClass, Empty) {}
 
   Expr *getCond() { return reinterpret_cast<Expr*>(SubExprs[COND]); }
@@ -1199,8 +1311,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return DoLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return DoLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == DoStmtClass;
@@ -1226,12 +1346,12 @@
           Expr *Inc, Stmt *Body, SourceLocation FL, SourceLocation LP,
           SourceLocation RP);
 
-  /// \brief Build an empty for statement.
+  /// Build an empty for statement.
   explicit ForStmt(EmptyShell Empty) : Stmt(ForStmtClass, Empty) {}
 
   Stmt *getInit() { return SubExprs[INIT]; }
 
-  /// \brief Retrieve the variable declared in this "for" statement, if any.
+  /// Retrieve the variable declared in this "for" statement, if any.
   ///
   /// In the following example, "y" is the condition variable.
   /// \code
@@ -1269,10 +1389,18 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation L) { RParenLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return ForLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return ForLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExprs[BODY]->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExprs[BODY]->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -1295,7 +1423,7 @@
   GotoStmt(LabelDecl *label, SourceLocation GL, SourceLocation LL)
       : Stmt(GotoStmtClass), Label(label), GotoLoc(GL), LabelLoc(LL) {}
 
-  /// \brief Build an empty goto statement.
+  /// Build an empty goto statement.
   explicit GotoStmt(EmptyShell Empty) : Stmt(GotoStmtClass, Empty) {}
 
   LabelDecl *getLabel() const { return Label; }
@@ -1306,8 +1434,16 @@
   SourceLocation getLabelLoc() const { return LabelLoc; }
   void setLabelLoc(SourceLocation L) { LabelLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return GotoLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return LabelLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return GotoLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return LabelLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == GotoStmtClass;
@@ -1331,7 +1467,7 @@
     : Stmt(IndirectGotoStmtClass), GotoLoc(gotoLoc), StarLoc(starLoc),
       Target((Stmt*)target) {}
 
-  /// \brief Build an empty indirect goto statement.
+  /// Build an empty indirect goto statement.
   explicit IndirectGotoStmt(EmptyShell Empty)
       : Stmt(IndirectGotoStmtClass, Empty) {}
 
@@ -1351,8 +1487,16 @@
     return const_cast<IndirectGotoStmt*>(this)->getConstantTarget();
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return GotoLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Target->getLocEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return GotoLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Target->getEndLoc(); }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == IndirectGotoStmtClass;
@@ -1369,14 +1513,22 @@
 public:
   ContinueStmt(SourceLocation CL) : Stmt(ContinueStmtClass), ContinueLoc(CL) {}
 
-  /// \brief Build an empty continue statement.
+  /// Build an empty continue statement.
   explicit ContinueStmt(EmptyShell Empty) : Stmt(ContinueStmtClass, Empty) {}
 
   SourceLocation getContinueLoc() const { return ContinueLoc; }
   void setContinueLoc(SourceLocation L) { ContinueLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return ContinueLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return ContinueLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return ContinueLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return ContinueLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ContinueStmtClass;
@@ -1398,14 +1550,22 @@
                   "BreakStmt too large");
   }
 
-  /// \brief Build an empty break statement.
+  /// Build an empty break statement.
   explicit BreakStmt(EmptyShell Empty) : Stmt(BreakStmtClass, Empty) {}
 
   SourceLocation getBreakLoc() const { return BreakLoc; }
   void setBreakLoc(SourceLocation L) { BreakLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return BreakLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return BreakLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return BreakLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return BreakLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == BreakStmtClass;
@@ -1437,7 +1597,7 @@
       : Stmt(ReturnStmtClass), RetLoc(RL), RetExpr((Stmt *)E),
         NRVOCandidate(NRVOCandidate) {}
 
-  /// \brief Build an empty return expression.
+  /// Build an empty return expression.
   explicit ReturnStmt(EmptyShell Empty) : Stmt(ReturnStmtClass, Empty) {}
 
   const Expr *getRetValue() const;
@@ -1447,7 +1607,7 @@
   SourceLocation getReturnLoc() const { return RetLoc; }
   void setReturnLoc(SourceLocation L) { RetLoc = L; }
 
-  /// \brief Retrieve the variable that might be used for the named return
+  /// Retrieve the variable that might be used for the named return
   /// value optimization.
   ///
   /// The optimization itself can only be performed if the variable is
@@ -1455,10 +1615,18 @@
   const VarDecl *getNRVOCandidate() const { return NRVOCandidate; }
   void setNRVOCandidate(const VarDecl *Var) { NRVOCandidate = Var; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return RetLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return RetLoc; }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return RetExpr ? RetExpr->getLocEnd() : RetLoc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return RetExpr ? RetExpr->getEndLoc() : RetLoc;
   }
 
   static bool classof(const Stmt *T) {
@@ -1479,11 +1647,11 @@
 
   SourceLocation AsmLoc;
 
-  /// \brief True if the assembly statement does not have any input or output
+  /// True if the assembly statement does not have any input or output
   /// operands.
   bool IsSimple;
 
-  /// \brief If true, treat this inline assembly as having side effects.
+  /// If true, treat this inline assembly as having side effects.
   /// This assembly statement should not be optimized, deleted or moved.
   bool IsVolatile;
 
@@ -1500,7 +1668,7 @@
         NumClobbers(numclobbers) {}
 
 public:
-  /// \brief Build an empty inline-assembly statement.
+  /// Build an empty inline-assembly statement.
   explicit AsmStmt(StmtClass SC, EmptyShell Empty) : Stmt(SC, Empty) {}
 
   SourceLocation getAsmLoc() const { return AsmLoc; }
@@ -1512,8 +1680,16 @@
   bool isVolatile() const { return IsVolatile; }
   void setVolatile(bool V) { IsVolatile = V; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return {}; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return {}; }
 
   //===--- Asm String Analysis ---===//
 
@@ -1549,7 +1725,7 @@
   /// getInputConstraint - Return the specified input constraint.  Unlike output
   /// constraints, these can be empty.
   StringRef getInputConstraint(unsigned i) const;
-  
+
   const Expr *getInputExpr(unsigned i) const;
 
   //===--- Other ---===//
@@ -1646,7 +1822,7 @@
              StringLiteral *asmstr, unsigned numclobbers,
              StringLiteral **clobbers, SourceLocation rparenloc);
 
-  /// \brief Build an empty inline-assembly statement.
+  /// Build an empty inline-assembly statement.
   explicit GCCAsmStmt(EmptyShell Empty) : AsmStmt(GCCAsmStmtClass, Empty) {}
 
   SourceLocation getRParenLoc() const { return RParenLoc; }
@@ -1686,9 +1862,7 @@
     bool isString() const { return MyKind == String; }
     bool isOperand() const { return MyKind == Operand; }
 
-    const std::string &getString() const {
-      return Str;
-    }
+    const std::string &getString() const { return Str; }
 
     unsigned getOperandNo() const {
       assert(isOperand());
@@ -1718,15 +1892,13 @@
 
   //===--- Output operands ---===//
 
-  IdentifierInfo *getOutputIdentifier(unsigned i) const {
-    return Names[i];
-  }
+  IdentifierInfo *getOutputIdentifier(unsigned i) const { return Names[i]; }
 
   StringRef getOutputName(unsigned i) const {
     if (IdentifierInfo *II = getOutputIdentifier(i))
       return II->getName();
 
-    return StringRef();
+    return {};
   }
 
   StringRef getOutputConstraint(unsigned i) const;
@@ -1754,7 +1926,7 @@
     if (IdentifierInfo *II = getInputIdentifier(i))
       return II->getName();
 
-    return StringRef();
+    return {};
   }
 
   StringRef getInputConstraint(unsigned i) const;
@@ -1798,8 +1970,16 @@
     return Clobbers[i];
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AsmLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return RParenLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AsmLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return RParenLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == GCCAsmStmtClass;
@@ -1827,7 +2007,7 @@
             ArrayRef<Expr*> exprs, StringRef asmstr,
             ArrayRef<StringRef> clobbers, SourceLocation endloc);
 
-  /// \brief Build an empty MS-style inline-assembly statement.
+  /// Build an empty MS-style inline-assembly statement.
   explicit MSAsmStmt(EmptyShell Empty) : AsmStmt(MSAsmStmtClass, Empty) {}
 
   SourceLocation getLBraceLoc() const { return LBraceLoc; }
@@ -1896,8 +2076,15 @@
                   ArrayRef<Expr*> Exprs, ArrayRef<StringRef> Clobbers);
 
 public:
-  SourceLocation getLocStart() const LLVM_READONLY { return AsmLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return EndLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AsmLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == MSAsmStmtClass;
@@ -1926,11 +2113,18 @@
                                Expr *FilterExpr,
                                Stmt *Block);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getExceptLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return getExceptLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   SourceLocation getExceptLoc() const { return Loc; }
-  SourceLocation getEndLoc() const { return getBlock()->getLocEnd(); }
+  SourceLocation getEndLoc() const { return getBlock()->getEndLoc(); }
 
   Expr *getFilterExpr() const {
     return reinterpret_cast<Expr*>(Children[FILTER_EXPR]);
@@ -1941,7 +2135,7 @@
   }
 
   child_range children() {
-    return child_range(Children,Children+2);
+    return child_range(Children, Children+2);
   }
 
   static bool classof(const Stmt *T) {
@@ -1964,11 +2158,18 @@
                                 SourceLocation FinallyLoc,
                                 Stmt *Block);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getFinallyLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return getFinallyLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   SourceLocation getFinallyLoc() const { return Loc; }
-  SourceLocation getEndLoc() const { return Block->getLocEnd(); }
+  SourceLocation getEndLoc() const { return Block->getEndLoc(); }
 
   CompoundStmt *getBlock() const { return cast<CompoundStmt>(Block); }
 
@@ -2003,11 +2204,18 @@
                             SourceLocation TryLoc, Stmt *TryBlock,
                             Stmt *Handler);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getTryLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return getTryLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   SourceLocation getTryLoc() const { return TryLoc; }
-  SourceLocation getEndLoc() const { return Children[HANDLER]->getLocEnd(); }
+  SourceLocation getEndLoc() const { return Children[HANDLER]->getEndLoc(); }
 
   bool getIsCXXTry() const { return IsCXXTry; }
 
@@ -2022,7 +2230,7 @@
   SEHFinallyStmt *getFinallyHandler() const;
 
   child_range children() {
-    return child_range(Children,Children+2);
+    return child_range(Children, Children+2);
   }
 
   static bool classof(const Stmt *T) {
@@ -2038,14 +2246,22 @@
   explicit SEHLeaveStmt(SourceLocation LL)
       : Stmt(SEHLeaveStmtClass), LeaveLoc(LL) {}
 
-  /// \brief Build an empty __leave statement.
+  /// Build an empty __leave statement.
   explicit SEHLeaveStmt(EmptyShell Empty) : Stmt(SEHLeaveStmtClass, Empty) {}
 
   SourceLocation getLeaveLoc() const { return LeaveLoc; }
   void setLeaveLoc(SourceLocation L) { LeaveLoc = L; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return LeaveLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return LeaveLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return LeaveLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return LeaveLoc; }
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == SEHLeaveStmtClass;
@@ -2057,7 +2273,7 @@
   }
 };
 
-/// \brief This captures a statement into a function. For example, the following
+/// This captures a statement into a function. For example, the following
 /// pragma annotated compound statement can be represented as a CapturedStmt,
 /// and this compound statement is the body of an anonymous outlined function.
 /// @code
@@ -2068,7 +2284,7 @@
 /// @endcode
 class CapturedStmt : public Stmt {
 public:
-  /// \brief The different capture forms: by 'this', by reference, capture for
+  /// The different capture forms: by 'this', by reference, capture for
   /// variable-length array type etc.
   enum VariableCaptureKind {
     VCK_This,
@@ -2077,7 +2293,7 @@
     VCK_VLAType,
   };
 
-  /// \brief Describes the capture of either a variable, or 'this', or
+  /// Describes the capture of either a variable, or 'this', or
   /// variable-length array type.
   class Capture {
     llvm::PointerIntPair<VarDecl *, 2, VariableCaptureKind> VarAndKind;
@@ -2086,7 +2302,7 @@
   public:
     friend class ASTStmtReader;
 
-    /// \brief Create a new capture.
+    /// Create a new capture.
     ///
     /// \param Loc The source location associated with this capture.
     ///
@@ -2096,52 +2312,52 @@
     Capture(SourceLocation Loc, VariableCaptureKind Kind,
             VarDecl *Var = nullptr);
 
-    /// \brief Determine the kind of capture.
+    /// Determine the kind of capture.
     VariableCaptureKind getCaptureKind() const;
 
-    /// \brief Retrieve the source location at which the variable or 'this' was
+    /// Retrieve the source location at which the variable or 'this' was
     /// first used.
     SourceLocation getLocation() const { return Loc; }
 
-    /// \brief Determine whether this capture handles the C++ 'this' pointer.
+    /// Determine whether this capture handles the C++ 'this' pointer.
     bool capturesThis() const { return getCaptureKind() == VCK_This; }
 
-    /// \brief Determine whether this capture handles a variable (by reference).
+    /// Determine whether this capture handles a variable (by reference).
     bool capturesVariable() const { return getCaptureKind() == VCK_ByRef; }
 
-    /// \brief Determine whether this capture handles a variable by copy.
+    /// Determine whether this capture handles a variable by copy.
     bool capturesVariableByCopy() const {
       return getCaptureKind() == VCK_ByCopy;
     }
 
-    /// \brief Determine whether this capture handles a variable-length array
+    /// Determine whether this capture handles a variable-length array
     /// type.
     bool capturesVariableArrayType() const {
       return getCaptureKind() == VCK_VLAType;
     }
 
-    /// \brief Retrieve the declaration of the variable being captured.
+    /// Retrieve the declaration of the variable being captured.
     ///
     /// This operation is only valid if this capture captures a variable.
     VarDecl *getCapturedVar() const;
   };
 
 private:
-  /// \brief The number of variable captured, including 'this'.
+  /// The number of variable captured, including 'this'.
   unsigned NumCaptures;
 
-  /// \brief The pointer part is the implicit the outlined function and the 
+  /// The pointer part is the implicit the outlined function and the
   /// int part is the captured region kind, 'CR_Default' etc.
-  llvm::PointerIntPair<CapturedDecl *, 1, CapturedRegionKind> CapDeclAndKind;
+  llvm::PointerIntPair<CapturedDecl *, 2, CapturedRegionKind> CapDeclAndKind;
 
-  /// \brief The record for captured variables, a RecordDecl or CXXRecordDecl.
+  /// The record for captured variables, a RecordDecl or CXXRecordDecl.
   RecordDecl *TheRecordDecl = nullptr;
 
-  /// \brief Construct a captured statement.
+  /// Construct a captured statement.
   CapturedStmt(Stmt *S, CapturedRegionKind Kind, ArrayRef<Capture> Captures,
                ArrayRef<Expr *> CaptureInits, CapturedDecl *CD, RecordDecl *RD);
 
-  /// \brief Construct an empty captured statement.
+  /// Construct an empty captured statement.
   CapturedStmt(EmptyShell Empty, unsigned NumCaptures);
 
   Stmt **getStoredStmts() { return reinterpret_cast<Stmt **>(this + 1); }
@@ -2166,36 +2382,36 @@
   static CapturedStmt *CreateDeserialized(const ASTContext &Context,
                                           unsigned NumCaptures);
 
-  /// \brief Retrieve the statement being captured.
+  /// Retrieve the statement being captured.
   Stmt *getCapturedStmt() { return getStoredStmts()[NumCaptures]; }
   const Stmt *getCapturedStmt() const { return getStoredStmts()[NumCaptures]; }
 
-  /// \brief Retrieve the outlined function declaration.
+  /// Retrieve the outlined function declaration.
   CapturedDecl *getCapturedDecl();
   const CapturedDecl *getCapturedDecl() const;
 
-  /// \brief Set the outlined function declaration.
+  /// Set the outlined function declaration.
   void setCapturedDecl(CapturedDecl *D);
 
-  /// \brief Retrieve the captured region kind.
+  /// Retrieve the captured region kind.
   CapturedRegionKind getCapturedRegionKind() const;
 
-  /// \brief Set the captured region kind.
+  /// Set the captured region kind.
   void setCapturedRegionKind(CapturedRegionKind Kind);
 
-  /// \brief Retrieve the record declaration for captured variables.
+  /// Retrieve the record declaration for captured variables.
   const RecordDecl *getCapturedRecordDecl() const { return TheRecordDecl; }
 
-  /// \brief Set the record declaration for captured variables.
+  /// Set the record declaration for captured variables.
   void setCapturedRecordDecl(RecordDecl *D) {
     assert(D && "null RecordDecl");
     TheRecordDecl = D;
   }
 
-  /// \brief True if this variable has been captured.
+  /// True if this variable has been captured.
   bool capturesVariable(const VarDecl *Var) const;
 
-  /// \brief An iterator that walks over the captures.
+  /// An iterator that walks over the captures.
   using capture_iterator = Capture *;
   using const_capture_iterator = const Capture *;
   using capture_range = llvm::iterator_range<capture_iterator>;
@@ -2208,24 +2424,24 @@
     return capture_const_range(capture_begin(), capture_end());
   }
 
-  /// \brief Retrieve an iterator pointing to the first capture.
+  /// Retrieve an iterator pointing to the first capture.
   capture_iterator capture_begin() { return getStoredCaptures(); }
   const_capture_iterator capture_begin() const { return getStoredCaptures(); }
 
-  /// \brief Retrieve an iterator pointing past the end of the sequence of
+  /// Retrieve an iterator pointing past the end of the sequence of
   /// captures.
   capture_iterator capture_end() const {
     return getStoredCaptures() + NumCaptures;
   }
 
-  /// \brief Retrieve the number of captures, including 'this'.
+  /// Retrieve the number of captures, including 'this'.
   unsigned capture_size() const { return NumCaptures; }
 
-  /// \brief Iterator that walks over the capture initialization arguments.
+  /// Iterator that walks over the capture initialization arguments.
   using capture_init_iterator = Expr **;
   using capture_init_range = llvm::iterator_range<capture_init_iterator>;
 
-  /// \brief Const iterator that walks over the capture initialization
+  /// Const iterator that walks over the capture initialization
   /// arguments.
   using const_capture_init_iterator = Expr *const *;
   using const_capture_init_range =
@@ -2239,7 +2455,7 @@
     return const_capture_init_range(capture_init_begin(), capture_init_end());
   }
 
-  /// \brief Retrieve the first initialization argument.
+  /// Retrieve the first initialization argument.
   capture_init_iterator capture_init_begin() {
     return reinterpret_cast<Expr **>(getStoredStmts());
   }
@@ -2248,7 +2464,7 @@
     return reinterpret_cast<Expr *const *>(getStoredStmts());
   }
 
-  /// \brief Retrieve the iterator pointing one past the last initialization
+  /// Retrieve the iterator pointing one past the last initialization
   /// argument.
   capture_init_iterator capture_init_end() {
     return capture_init_begin() + NumCaptures;
@@ -2258,12 +2474,20 @@
     return capture_init_begin() + NumCaptures;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getCapturedStmt()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getCapturedStmt()->getBeginLoc();
   }
 
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getCapturedStmt()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getCapturedStmt()->getEndLoc();
   }
 
   SourceRange getSourceRange() const LLVM_READONLY {
diff --git a/linux-x64/clang/include/clang/AST/StmtCXX.h b/linux-x64/clang/include/clang/AST/StmtCXX.h
index 77f8183..3b6d7ba 100644
--- a/linux-x64/clang/include/clang/AST/StmtCXX.h
+++ b/linux-x64/clang/include/clang/AST/StmtCXX.h
@@ -41,9 +41,17 @@
   CXXCatchStmt(EmptyShell Empty)
   : Stmt(CXXCatchStmtClass), ExceptionDecl(nullptr), HandlerBlock(nullptr) {}
 
-  SourceLocation getLocStart() const LLVM_READONLY { return CatchLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return HandlerBlock->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return CatchLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return HandlerBlock->getEndLoc();
   }
 
   SourceLocation getCatchLoc() const { return CatchLoc; }
@@ -62,21 +70,22 @@
 
 /// CXXTryStmt - A C++ try block, including all handlers.
 ///
-class CXXTryStmt : public Stmt {
+class CXXTryStmt final : public Stmt,
+                         private llvm::TrailingObjects<CXXTryStmt, Stmt *> {
+
+  friend TrailingObjects;
+  friend class ASTStmtReader;
+
   SourceLocation TryLoc;
   unsigned NumHandlers;
+  size_t numTrailingObjects(OverloadToken<Stmt *>) const { return NumHandlers; }
 
   CXXTryStmt(SourceLocation tryLoc, Stmt *tryBlock, ArrayRef<Stmt*> handlers);
-
   CXXTryStmt(EmptyShell Empty, unsigned numHandlers)
     : Stmt(CXXTryStmtClass), NumHandlers(numHandlers) { }
 
-  Stmt const * const *getStmts() const {
-    return reinterpret_cast<Stmt const * const*>(this + 1);
-  }
-  Stmt **getStmts() {
-    return reinterpret_cast<Stmt **>(this + 1);
-  }
+  Stmt *const *getStmts() const { return getTrailingObjects<Stmt *>(); }
+  Stmt **getStmts() { return getTrailingObjects<Stmt *>(); }
 
 public:
   static CXXTryStmt *Create(const ASTContext &C, SourceLocation tryLoc,
@@ -85,12 +94,19 @@
   static CXXTryStmt *Create(const ASTContext &C, EmptyShell Empty,
                             unsigned numHandlers);
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getTryLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return getTryLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
   SourceLocation getTryLoc() const { return TryLoc; }
   SourceLocation getEndLoc() const {
-    return getStmts()[NumHandlers]->getLocEnd();
+    return getStmts()[NumHandlers]->getEndLoc();
   }
 
   CompoundStmt *getTryBlock() {
@@ -115,8 +131,6 @@
   child_range children() {
     return child_range(getStmts(), getStmts() + getNumHandlers() + 1);
   }
-
-  friend class ASTStmtReader;
 };
 
 /// CXXForRangeStmt - This represents C++0x [stmt.ranged]'s ranged for
@@ -195,9 +209,17 @@
   SourceLocation getColonLoc() const { return ColonLoc; }
   SourceLocation getRParenLoc() const { return RParenLoc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return ForLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExprs[BODY]->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return ForLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExprs[BODY]->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -210,7 +232,7 @@
   }
 };
 
-/// \brief Representation of a Microsoft __if_exists or __if_not_exists
+/// Representation of a Microsoft __if_exists or __if_not_exists
 /// statement with a dependent name.
 ///
 /// The __if_exists statement can be used to include a sequence of statements
@@ -257,32 +279,42 @@
     QualifierLoc(QualifierLoc), NameInfo(NameInfo),
     SubStmt(reinterpret_cast<Stmt *>(SubStmt)) { }
 
-  /// \brief Retrieve the location of the __if_exists or __if_not_exists
+  /// Retrieve the location of the __if_exists or __if_not_exists
   /// keyword.
   SourceLocation getKeywordLoc() const { return KeywordLoc; }
 
-  /// \brief Determine whether this is an __if_exists statement.
+  /// Determine whether this is an __if_exists statement.
   bool isIfExists() const { return IsIfExists; }
 
-  /// \brief Determine whether this is an __if_exists statement.
+  /// Determine whether this is an __if_exists statement.
   bool isIfNotExists() const { return !IsIfExists; }
 
-  /// \brief Retrieve the nested-name-specifier that qualifies this name, if
+  /// Retrieve the nested-name-specifier that qualifies this name, if
   /// any.
   NestedNameSpecifierLoc getQualifierLoc() const { return QualifierLoc; }
 
-  /// \brief Retrieve the name of the entity we're testing for, along with
+  /// Retrieve the name of the entity we're testing for, along with
   /// location information
   DeclarationNameInfo getNameInfo() const { return NameInfo; }
 
-  /// \brief Retrieve the compound statement that will be included in the
+  /// Retrieve the compound statement that will be included in the
   /// program only if the existence of the symbol matches the initial keyword.
   CompoundStmt *getSubStmt() const {
     return reinterpret_cast<CompoundStmt *>(SubStmt);
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return KeywordLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubStmt->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return KeywordLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubStmt->getEndLoc();
+  }
 
   child_range children() {
     return child_range(&SubStmt, &SubStmt+1);
@@ -293,7 +325,7 @@
   }
 };
 
-/// \brief Represents the body of a coroutine. This wraps the normal function
+/// Represents the body of a coroutine. This wraps the normal function
 /// body and holds the additional semantic context required to set up and tear
 /// down the coroutine frame.
 class CoroutineBodyStmt final
@@ -355,7 +387,7 @@
     return getPromiseDecl()->getType()->isDependentType();
   }
 
-  /// \brief Retrieve the body of the coroutine as written. This will be either
+  /// Retrieve the body of the coroutine as written. This will be either
   /// a CompoundStmt or a TryStmt.
   Stmt *getBody() const {
     return getStoredStmts()[SubStmt::Body];
@@ -400,12 +432,20 @@
     return {getStoredStmts() + SubStmt::FirstParamMove, NumParams};
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY {
-    return getBody() ? getBody()->getLocStart()
-            : getPromiseDecl()->getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
   }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getBody() ? getBody()->getLocEnd() : getPromiseDecl()->getLocEnd();
+  SourceLocation getBeginLoc() const LLVM_READONLY {
+    return getBody() ? getBody()->getBeginLoc()
+                     : getPromiseDecl()->getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getBody() ? getBody()->getEndLoc() : getPromiseDecl()->getEndLoc();
   }
 
   child_range children() {
@@ -418,7 +458,7 @@
   }
 };
 
-/// \brief Represents a 'co_return' statement in the C++ Coroutines TS.
+/// Represents a 'co_return' statement in the C++ Coroutines TS.
 ///
 /// This statament models the initialization of the coroutine promise
 /// (encapsulating the eventual notional return value) from an expression
@@ -451,11 +491,11 @@
 
   SourceLocation getKeywordLoc() const { return CoreturnLoc; }
 
-  /// \brief Retrieve the operand of the 'co_return' statement. Will be nullptr
+  /// Retrieve the operand of the 'co_return' statement. Will be nullptr
   /// if none was specified.
   Expr *getOperand() const { return static_cast<Expr*>(SubStmts[Operand]); }
 
-  /// \brief Retrieve the promise call that results from this 'co_return'
+  /// Retrieve the promise call that results from this 'co_return'
   /// statement. Will be nullptr if either the coroutine has not yet been
   /// finalized or the coroutine has no eventual return type.
   Expr *getPromiseCall() const {
@@ -465,9 +505,17 @@
   bool isImplicit() const { return IsImplicit; }
   void setIsImplicit(bool value = true) { IsImplicit = value; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return CoreturnLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getOperand() ? getOperand()->getLocEnd() : getLocStart();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return CoreturnLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getOperand() ? getOperand()->getEndLoc() : getBeginLoc();
   }
 
   child_range children() {
diff --git a/linux-x64/clang/include/clang/AST/StmtDataCollectors.inc b/linux-x64/clang/include/clang/AST/StmtDataCollectors.inc
index 16f7968..9513531 100644
--- a/linux-x64/clang/include/clang/AST/StmtDataCollectors.inc
+++ b/linux-x64/clang/include/clang/AST/StmtDataCollectors.inc
@@ -196,8 +196,8 @@
     addData(S->getStmtClass());
     // This ensures that non-macro-generated code isn't identical to
     // macro-generated code.
-    addData(data_collection::getMacroStack(S->getLocStart(), Context));
-    addData(data_collection::getMacroStack(S->getLocEnd(), Context));
+    addData(data_collection::getMacroStack(S->getBeginLoc(), Context));
+    addData(data_collection::getMacroStack(S->getEndLoc(), Context));
   }
 )
 DEF_ADD_DATA(StringLiteral, {
diff --git a/linux-x64/clang/include/clang/AST/StmtIterator.h b/linux-x64/clang/include/clang/AST/StmtIterator.h
index 33aab08..806edaa 100644
--- a/linux-x64/clang/include/clang/AST/StmtIterator.h
+++ b/linux-x64/clang/include/clang/AST/StmtIterator.h
@@ -33,14 +33,14 @@
     DeclGroupMode = 0x2,
     Flags = 0x3
   };
-  
+
   union {
     Stmt **stmt;
     Decl **DGI;
   };
   uintptr_t RawVAPtr = 0;
   Decl **DGE;
-  
+
   StmtIteratorBase(Stmt **s) : stmt(s) {}
   StmtIteratorBase(const VariableArrayType *t);
   StmtIteratorBase(Decl **dgi, Decl **dge);
diff --git a/linux-x64/clang/include/clang/AST/StmtNodes.inc b/linux-x64/clang/include/clang/AST/StmtNodes.inc
index 1ffd5f0..5c35710 100644
--- a/linux-x64/clang/include/clang/AST/StmtNodes.inc
+++ b/linux-x64/clang/include/clang/AST/StmtNodes.inc
@@ -519,6 +519,12 @@
 EXTVECTORELEMENTEXPR(ExtVectorElementExpr, Expr)
 #undef EXTVECTORELEMENTEXPR
 
+#ifndef FIXEDPOINTLITERAL
+#  define FIXEDPOINTLITERAL(Type, Base) EXPR(Type, Base)
+#endif
+FIXEDPOINTLITERAL(FixedPointLiteral, Expr)
+#undef FIXEDPOINTLITERAL
+
 #ifndef FLOATINGLITERAL
 #  define FLOATINGLITERAL(Type, Base) EXPR(Type, Base)
 #endif
diff --git a/linux-x64/clang/include/clang/AST/StmtObjC.h b/linux-x64/clang/include/clang/AST/StmtObjC.h
index 5260b69..bad3a4a 100644
--- a/linux-x64/clang/include/clang/AST/StmtObjC.h
+++ b/linux-x64/clang/include/clang/AST/StmtObjC.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 
 /// \file
-/// \brief Defines the Objective-C statement AST node classes.
+/// Defines the Objective-C statement AST node classes.
 
 #ifndef LLVM_CLANG_AST_STMTOBJC_H
 #define LLVM_CLANG_AST_STMTOBJC_H
@@ -18,7 +18,7 @@
 
 namespace clang {
 
-/// \brief Represents Objective-C's collection statement.
+/// Represents Objective-C's collection statement.
 ///
 /// This is represented as 'for (element 'in' collection-expression)' stmt.
 class ObjCForCollectionStmt : public Stmt {
@@ -55,9 +55,17 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation Loc) { RParenLoc = Loc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return ForLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return SubExprs[BODY]->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return ForLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubExprs[BODY]->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -70,7 +78,7 @@
   }
 };
 
-/// \brief Represents Objective-C's \@catch statement.
+/// Represents Objective-C's \@catch statement.
 class ObjCAtCatchStmt : public Stmt {
 private:
   VarDecl *ExceptionDecl;
@@ -81,7 +89,7 @@
   ObjCAtCatchStmt(SourceLocation atCatchLoc, SourceLocation rparenloc,
                   VarDecl *catchVarDecl,
                   Stmt *atCatchStmt)
-    : Stmt(ObjCAtCatchStmtClass), ExceptionDecl(catchVarDecl), 
+    : Stmt(ObjCAtCatchStmtClass), ExceptionDecl(catchVarDecl),
     Body(atCatchStmt), AtCatchLoc(atCatchLoc), RParenLoc(rparenloc) { }
 
   explicit ObjCAtCatchStmt(EmptyShell Empty) :
@@ -104,8 +112,16 @@
   SourceLocation getRParenLoc() const { return RParenLoc; }
   void setRParenLoc(SourceLocation Loc) { RParenLoc = Loc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtCatchLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Body->getLocEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtCatchLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Body->getEndLoc(); }
 
   bool hasEllipsis() const { return getCatchParamDecl() == nullptr; }
 
@@ -116,7 +132,7 @@
   child_range children() { return child_range(&Body, &Body + 1); }
 };
 
-/// \brief Represents Objective-C's \@finally statement
+/// Represents Objective-C's \@finally statement
 class ObjCAtFinallyStmt : public Stmt {
   SourceLocation AtFinallyLoc;
   Stmt *AtFinallyStmt;
@@ -133,9 +149,17 @@
   Stmt *getFinallyBody() { return AtFinallyStmt; }
   void setFinallyBody(Stmt *S) { AtFinallyStmt = S; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtFinallyLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return AtFinallyStmt->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtFinallyLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return AtFinallyStmt->getEndLoc();
   }
 
   SourceLocation getAtFinallyLoc() const { return AtFinallyLoc; }
@@ -150,32 +174,32 @@
   }
 };
 
-/// \brief Represents Objective-C's \@try ... \@catch ... \@finally statement.
+/// Represents Objective-C's \@try ... \@catch ... \@finally statement.
 class ObjCAtTryStmt : public Stmt {
 private:
   // The location of the @ in the \@try.
   SourceLocation AtTryLoc;
-  
+
   // The number of catch blocks in this statement.
   unsigned NumCatchStmts : 16;
-  
+
   // Whether this statement has a \@finally statement.
   bool HasFinally : 1;
-  
-  /// \brief Retrieve the statements that are stored after this \@try statement.
+
+  /// Retrieve the statements that are stored after this \@try statement.
   ///
   /// The order of the statements in memory follows the order in the source,
   /// with the \@try body first, followed by the \@catch statements (if any)
   /// and, finally, the \@finally (if it exists).
   Stmt **getStmts() { return reinterpret_cast<Stmt **> (this + 1); }
-  const Stmt* const *getStmts() const { 
-    return reinterpret_cast<const Stmt * const*> (this + 1); 
+  const Stmt* const *getStmts() const {
+    return reinterpret_cast<const Stmt * const*> (this + 1);
   }
-  
+
   ObjCAtTryStmt(SourceLocation atTryLoc, Stmt *atTryStmt,
                 Stmt **CatchStmts, unsigned NumCatchStmts,
                 Stmt *atFinallyStmt);
-  
+
   explicit ObjCAtTryStmt(EmptyShell Empty, unsigned NumCatchStmts,
                          bool HasFinally)
     : Stmt(ObjCAtTryStmtClass, Empty), NumCatchStmts(NumCatchStmts),
@@ -188,58 +212,66 @@
                                Stmt *atFinallyStmt);
   static ObjCAtTryStmt *CreateEmpty(const ASTContext &Context,
                                     unsigned NumCatchStmts, bool HasFinally);
-  
-  /// \brief Retrieve the location of the @ in the \@try.
+
+  /// Retrieve the location of the @ in the \@try.
   SourceLocation getAtTryLoc() const { return AtTryLoc; }
   void setAtTryLoc(SourceLocation Loc) { AtTryLoc = Loc; }
 
-  /// \brief Retrieve the \@try body.
+  /// Retrieve the \@try body.
   const Stmt *getTryBody() const { return getStmts()[0]; }
   Stmt *getTryBody() { return getStmts()[0]; }
   void setTryBody(Stmt *S) { getStmts()[0] = S; }
 
-  /// \brief Retrieve the number of \@catch statements in this try-catch-finally
+  /// Retrieve the number of \@catch statements in this try-catch-finally
   /// block.
   unsigned getNumCatchStmts() const { return NumCatchStmts; }
-  
-  /// \brief Retrieve a \@catch statement.
+
+  /// Retrieve a \@catch statement.
   const ObjCAtCatchStmt *getCatchStmt(unsigned I) const {
     assert(I < NumCatchStmts && "Out-of-bounds @catch index");
     return cast_or_null<ObjCAtCatchStmt>(getStmts()[I + 1]);
   }
-  
-  /// \brief Retrieve a \@catch statement.
+
+  /// Retrieve a \@catch statement.
   ObjCAtCatchStmt *getCatchStmt(unsigned I) {
     assert(I < NumCatchStmts && "Out-of-bounds @catch index");
     return cast_or_null<ObjCAtCatchStmt>(getStmts()[I + 1]);
   }
-  
-  /// \brief Set a particular catch statement.
+
+  /// Set a particular catch statement.
   void setCatchStmt(unsigned I, ObjCAtCatchStmt *S) {
     assert(I < NumCatchStmts && "Out-of-bounds @catch index");
     getStmts()[I + 1] = S;
   }
-  
-  /// \brief Retrieve the \@finally statement, if any.
+
+  /// Retrieve the \@finally statement, if any.
   const ObjCAtFinallyStmt *getFinallyStmt() const {
     if (!HasFinally)
       return nullptr;
-    
+
     return cast_or_null<ObjCAtFinallyStmt>(getStmts()[1 + NumCatchStmts]);
   }
   ObjCAtFinallyStmt *getFinallyStmt() {
     if (!HasFinally)
       return nullptr;
-    
+
     return cast_or_null<ObjCAtFinallyStmt>(getStmts()[1 + NumCatchStmts]);
   }
-  void setFinallyStmt(Stmt *S) { 
+  void setFinallyStmt(Stmt *S) {
     assert(HasFinally && "@try does not have a @finally slot!");
-    getStmts()[1 + NumCatchStmts] = S; 
+    getStmts()[1 + NumCatchStmts] = S;
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtTryLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtTryLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY;
 
   static bool classof(const Stmt *T) {
     return T->getStmtClass() == ObjCAtTryStmtClass;
@@ -251,7 +283,7 @@
   }
 };
 
-/// \brief Represents Objective-C's \@synchronized statement.
+/// Represents Objective-C's \@synchronized statement.
 ///
 /// Example:
 /// \code
@@ -295,9 +327,17 @@
   }
   void setSynchExpr(Stmt *S) { SubStmts[SYNC_EXPR] = S; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtSynchronizedLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return getSynchBody()->getLocEnd();
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtSynchronizedLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return getSynchBody()->getEndLoc();
   }
 
   static bool classof(const Stmt *T) {
@@ -309,7 +349,7 @@
   }
 };
 
-/// \brief Represents Objective-C's \@throw statement.
+/// Represents Objective-C's \@throw statement.
 class ObjCAtThrowStmt : public Stmt {
   SourceLocation AtThrowLoc;
   Stmt *Throw;
@@ -329,9 +369,17 @@
   SourceLocation getThrowLoc() const LLVM_READONLY { return AtThrowLoc; }
   void setThrowLoc(SourceLocation Loc) { AtThrowLoc = Loc; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtThrowLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY {
-    return Throw ? Throw->getLocEnd() : AtThrowLoc;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtThrowLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return Throw ? Throw->getEndLoc() : AtThrowLoc;
   }
 
   static bool classof(const Stmt *T) {
@@ -341,7 +389,7 @@
   child_range children() { return child_range(&Throw, &Throw+1); }
 };
 
-/// \brief Represents Objective-C's \@autoreleasepool Statement
+/// Represents Objective-C's \@autoreleasepool Statement
 class ObjCAutoreleasePoolStmt : public Stmt {
   SourceLocation AtLoc;
   Stmt *SubStmt;
@@ -357,8 +405,18 @@
   Stmt *getSubStmt() { return SubStmt; }
   void setSubStmt(Stmt *S) { SubStmt = S; }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return AtLoc; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return SubStmt->getLocEnd();}
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return AtLoc; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY {
+    return SubStmt->getEndLoc();
+  }
 
   SourceLocation getAtLoc() const { return AtLoc; }
   void setAtLoc(SourceLocation Loc) { AtLoc = Loc; }
diff --git a/linux-x64/clang/include/clang/AST/StmtOpenMP.h b/linux-x64/clang/include/clang/AST/StmtOpenMP.h
index 8805209..7a9a1d5 100644
--- a/linux-x64/clang/include/clang/AST/StmtOpenMP.h
+++ b/linux-x64/clang/include/clang/AST/StmtOpenMP.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 /// \file
-/// \brief This file defines OpenMP AST classes for executable directives and
+/// This file defines OpenMP AST classes for executable directives and
 /// clauses.
 ///
 //===----------------------------------------------------------------------===//
@@ -27,28 +27,28 @@
 // AST classes for directives.
 //===----------------------------------------------------------------------===//
 
-/// \brief This is a basic class for representing single OpenMP executable
+/// This is a basic class for representing single OpenMP executable
 /// directive.
 ///
 class OMPExecutableDirective : public Stmt {
   friend class ASTStmtReader;
-  /// \brief Kind of the directive.
+  /// Kind of the directive.
   OpenMPDirectiveKind Kind;
-  /// \brief Starting location of the directive (directive keyword).
+  /// Starting location of the directive (directive keyword).
   SourceLocation StartLoc;
-  /// \brief Ending location of the directive.
+  /// Ending location of the directive.
   SourceLocation EndLoc;
-  /// \brief Numbers of clauses.
+  /// Numbers of clauses.
   const unsigned NumClauses;
-  /// \brief Number of child expressions/stmts.
+  /// Number of child expressions/stmts.
   const unsigned NumChildren;
-  /// \brief Offset from this to the start of clauses.
+  /// Offset from this to the start of clauses.
   /// There are NumClauses pointers to clauses, they are followed by
   /// NumChildren pointers to child stmts/exprs (if the directive type
   /// requires an associated stmt, then it has to be the first of them).
   const unsigned ClausesOffset;
 
-  /// \brief Get the clauses storage.
+  /// Get the clauses storage.
   MutableArrayRef<OMPClause *> getClauses() {
     OMPClause **ClauseStorage = reinterpret_cast<OMPClause **>(
         reinterpret_cast<char *>(this) + ClausesOffset);
@@ -56,7 +56,7 @@
   }
 
 protected:
-  /// \brief Build instance of directive of class \a K.
+  /// Build instance of directive of class \a K.
   ///
   /// \param SC Statement class.
   /// \param K Kind of OpenMP directive.
@@ -72,13 +72,13 @@
         NumChildren(NumChildren),
         ClausesOffset(llvm::alignTo(sizeof(T), alignof(OMPClause *))) {}
 
-  /// \brief Sets the list of variables for this clause.
+  /// Sets the list of variables for this clause.
   ///
   /// \param Clauses The list of clauses for the directive.
   ///
   void setClauses(ArrayRef<OMPClause *> Clauses);
 
-  /// \brief Set the associated statement for the directive.
+  /// Set the associated statement for the directive.
   ///
   /// /param S Associated statement.
   ///
@@ -88,7 +88,7 @@
   }
 
 public:
-  /// \brief Iterates over a filtered subrange of clauses applied to a
+  /// Iterates over a filtered subrange of clauses applied to a
   /// directive.
   ///
   /// This iterator visits only clauses of type SpecificClause.
@@ -164,35 +164,43 @@
     return Clauses.begin() != Clauses.end();
   }
 
-  /// \brief Returns starting location of directive kind.
-  SourceLocation getLocStart() const { return StartLoc; }
-  /// \brief Returns ending location of directive.
-  SourceLocation getLocEnd() const { return EndLoc; }
+  /// Returns starting location of directive kind.
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const { return StartLoc; }
+  /// Returns ending location of directive.
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const { return EndLoc; }
 
-  /// \brief Set starting location of directive kind.
+  /// Set starting location of directive kind.
   ///
   /// \param Loc New starting location of directive.
   ///
   void setLocStart(SourceLocation Loc) { StartLoc = Loc; }
-  /// \brief Set ending location of directive.
+  /// Set ending location of directive.
   ///
   /// \param Loc New ending location of directive.
   ///
   void setLocEnd(SourceLocation Loc) { EndLoc = Loc; }
 
-  /// \brief Get number of clauses.
+  /// Get number of clauses.
   unsigned getNumClauses() const { return NumClauses; }
 
-  /// \brief Returns specified clause.
+  /// Returns specified clause.
   ///
   /// \param i Number of clause.
   ///
   OMPClause *getClause(unsigned i) const { return clauses()[i]; }
 
-  /// \brief Returns true if directive has associated statement.
+  /// Returns true if directive has associated statement.
   bool hasAssociatedStmt() const { return NumChildren > 0; }
 
-  /// \brief Returns statement associated with the directive.
+  /// Returns statement associated with the directive.
   const Stmt *getAssociatedStmt() const {
     assert(hasAssociatedStmt() && "no associated statement.");
     return *child_begin();
@@ -202,7 +210,7 @@
     return *child_begin();
   }
 
-  /// \brief Returns the captured statement associated with the
+  /// Returns the captured statement associated with the
   /// component region within the (combined) directive.
   //
   // \param RegionKind Component region kind.
@@ -252,7 +260,9 @@
     if (!hasAssociatedStmt())
       return child_range(child_iterator(), child_iterator());
     Stmt **ChildStorage = reinterpret_cast<Stmt **>(getClauses().end());
-    return child_range(ChildStorage, ChildStorage + NumChildren);
+    /// Do not mark all the special expression/statements as children, except
+    /// for the associated statement.
+    return child_range(ChildStorage, ChildStorage + 1);
   }
 
   ArrayRef<OMPClause *> clauses() { return getClauses(); }
@@ -262,7 +272,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp parallel' directive.
+/// This represents '#pragma omp parallel' directive.
 ///
 /// \code
 /// #pragma omp parallel private(a,b) reduction(+: c,d)
@@ -273,10 +283,10 @@
 ///
 class OMPParallelDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief true if the construct has inner cancel directive.
+  /// true if the construct has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive (directive keyword).
   /// \param EndLoc Ending Location of the directive.
@@ -287,7 +297,7 @@
                                StartLoc, EndLoc, NumClauses, 1),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -297,11 +307,11 @@
                                1),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -314,7 +324,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place for \a N clauses.
+  /// Creates an empty directive with the place for \a N clauses.
   ///
   /// \param C AST context.
   /// \param NumClauses Number of clauses.
@@ -322,7 +332,7 @@
   static OMPParallelDirective *CreateEmpty(const ASTContext &C,
                                            unsigned NumClauses, EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -330,15 +340,15 @@
   }
 };
 
-/// \brief This is a common base class for loop directives ('omp simd', 'omp
+/// This is a common base class for loop directives ('omp simd', 'omp
 /// for', 'omp for simd' etc.). It is responsible for the loop code generation.
 ///
 class OMPLoopDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Number of collapsed loops as specified by 'collapse' clause.
+  /// Number of collapsed loops as specified by 'collapse' clause.
   unsigned CollapsedNum;
 
-  /// \brief Offsets to the stored exprs.
+  /// Offsets to the stored exprs.
   /// This enumeration contains offsets to all the pointers to children
   /// expressions stored in OMPLoopDirective.
   /// The first 9 children are necessary for all the loop directives,
@@ -395,21 +405,21 @@
     CombinedDistributeEnd = 28,
   };
 
-  /// \brief Get the counters storage.
+  /// Get the counters storage.
   MutableArrayRef<Expr *> getCounters() {
     Expr **Storage = reinterpret_cast<Expr **>(
         &(*(std::next(child_begin(), getArraysOffset(getDirectiveKind())))));
     return MutableArrayRef<Expr *>(Storage, CollapsedNum);
   }
 
-  /// \brief Get the private counters storage.
+  /// Get the private counters storage.
   MutableArrayRef<Expr *> getPrivateCounters() {
     Expr **Storage = reinterpret_cast<Expr **>(&*std::next(
         child_begin(), getArraysOffset(getDirectiveKind()) + CollapsedNum));
     return MutableArrayRef<Expr *>(Storage, CollapsedNum);
   }
 
-  /// \brief Get the updates storage.
+  /// Get the updates storage.
   MutableArrayRef<Expr *> getInits() {
     Expr **Storage = reinterpret_cast<Expr **>(
         &*std::next(child_begin(),
@@ -417,7 +427,7 @@
     return MutableArrayRef<Expr *>(Storage, CollapsedNum);
   }
 
-  /// \brief Get the updates storage.
+  /// Get the updates storage.
   MutableArrayRef<Expr *> getUpdates() {
     Expr **Storage = reinterpret_cast<Expr **>(
         &*std::next(child_begin(),
@@ -425,7 +435,7 @@
     return MutableArrayRef<Expr *>(Storage, CollapsedNum);
   }
 
-  /// \brief Get the final counter updates storage.
+  /// Get the final counter updates storage.
   MutableArrayRef<Expr *> getFinals() {
     Expr **Storage = reinterpret_cast<Expr **>(
         &*std::next(child_begin(),
@@ -434,7 +444,7 @@
   }
 
 protected:
-  /// \brief Build instance of loop directive of class \a Kind.
+  /// Build instance of loop directive of class \a Kind.
   ///
   /// \param SC Statement class.
   /// \param Kind Kind of OpenMP directive.
@@ -454,7 +464,7 @@
                                    NumSpecialChildren),
         CollapsedNum(CollapsedNum) {}
 
-  /// \brief Offset to the start of children expression arrays.
+  /// Offset to the start of children expression arrays.
   static unsigned getArraysOffset(OpenMPDirectiveKind Kind) {
     if (isOpenMPLoopBoundSharingDirective(Kind))
       return CombinedDistributeEnd;
@@ -464,7 +474,7 @@
     return DefaultEnd;
   }
 
-  /// \brief Children number.
+  /// Children number.
   static unsigned numLoopChildren(unsigned CollapsedNum,
                                   OpenMPDirectiveKind Kind) {
     return getArraysOffset(Kind) + 5 * CollapsedNum; // Counters,
@@ -629,72 +639,72 @@
     /// Distribute Loop condition used when composing 'omp distribute'
     ///  with 'omp for' in a same construct
     Expr *Cond;
-    /// Update of LowerBound for statically sheduled omp loops for
+    /// Update of LowerBound for statically scheduled omp loops for
     /// outer loop in combined constructs (e.g. 'distribute parallel for')
     Expr *NLB;
-    /// Update of UpperBound for statically sheduled omp loops for
+    /// Update of UpperBound for statically scheduled omp loops for
     /// outer loop in combined constructs (e.g. 'distribute parallel for')
     Expr *NUB;
   };
 
-  /// \brief The expressions built for the OpenMP loop CodeGen for the
+  /// The expressions built for the OpenMP loop CodeGen for the
   /// whole collapsed loop nest.
   struct HelperExprs {
-    /// \brief Loop iteration variable.
+    /// Loop iteration variable.
     Expr *IterationVarRef;
-    /// \brief Loop last iteration number.
+    /// Loop last iteration number.
     Expr *LastIteration;
-    /// \brief Loop number of iterations.
+    /// Loop number of iterations.
     Expr *NumIterations;
-    /// \brief Calculation of last iteration.
+    /// Calculation of last iteration.
     Expr *CalcLastIteration;
-    /// \brief Loop pre-condition.
+    /// Loop pre-condition.
     Expr *PreCond;
-    /// \brief Loop condition.
+    /// Loop condition.
     Expr *Cond;
-    /// \brief Loop iteration variable init.
+    /// Loop iteration variable init.
     Expr *Init;
-    /// \brief Loop increment.
+    /// Loop increment.
     Expr *Inc;
-    /// \brief IsLastIteration - local flag variable passed to runtime.
+    /// IsLastIteration - local flag variable passed to runtime.
     Expr *IL;
-    /// \brief LowerBound - local variable passed to runtime.
+    /// LowerBound - local variable passed to runtime.
     Expr *LB;
-    /// \brief UpperBound - local variable passed to runtime.
+    /// UpperBound - local variable passed to runtime.
     Expr *UB;
-    /// \brief Stride - local variable passed to runtime.
+    /// Stride - local variable passed to runtime.
     Expr *ST;
-    /// \brief EnsureUpperBound -- expression UB = min(UB, NumIterations).
+    /// EnsureUpperBound -- expression UB = min(UB, NumIterations).
     Expr *EUB;
-    /// \brief Update of LowerBound for statically sheduled 'omp for' loops.
+    /// Update of LowerBound for statically scheduled 'omp for' loops.
     Expr *NLB;
-    /// \brief Update of UpperBound for statically sheduled 'omp for' loops.
+    /// Update of UpperBound for statically scheduled 'omp for' loops.
     Expr *NUB;
-    /// \brief PreviousLowerBound - local variable passed to runtime in the
+    /// PreviousLowerBound - local variable passed to runtime in the
     /// enclosing schedule or null if that does not apply.
     Expr *PrevLB;
-    /// \brief PreviousUpperBound - local variable passed to runtime in the
+    /// PreviousUpperBound - local variable passed to runtime in the
     /// enclosing schedule or null if that does not apply.
     Expr *PrevUB;
-    /// \brief DistInc - increment expression for distribute loop when found
+    /// DistInc - increment expression for distribute loop when found
     /// combined with a further loop level (e.g. in 'distribute parallel for')
     /// expression IV = IV + ST
     Expr *DistInc;
-    /// \brief PrevEUB - expression similar to EUB but to be used when loop
+    /// PrevEUB - expression similar to EUB but to be used when loop
     /// scheduling uses PrevLB and PrevUB (e.g.  in 'distribute parallel for'
     /// when ensuring that the UB is either the calculated UB by the runtime or
     /// the end of the assigned distribute chunk)
     /// expression UB = min (UB, PrevUB)
     Expr *PrevEUB;
-    /// \brief Counters Loop counters.
+    /// Counters Loop counters.
     SmallVector<Expr *, 4> Counters;
-    /// \brief PrivateCounters Loop counters.
+    /// PrivateCounters Loop counters.
     SmallVector<Expr *, 4> PrivateCounters;
-    /// \brief Expressions for loop counters inits for CodeGen.
+    /// Expressions for loop counters inits for CodeGen.
     SmallVector<Expr *, 4> Inits;
-    /// \brief Expressions for loop counters update for CodeGen.
+    /// Expressions for loop counters update for CodeGen.
     SmallVector<Expr *, 4> Updates;
-    /// \brief Final loop counter values for GodeGen.
+    /// Final loop counter values for GodeGen.
     SmallVector<Expr *, 4> Finals;
     /// Init statement for all captured expressions.
     Stmt *PreInits;
@@ -702,7 +712,7 @@
     /// Expressions used when combining OpenMP loop pragmas
     DistCombinedHelperExprs DistCombinedFields;
 
-    /// \brief Check if all the expressions are built (does not check the
+    /// Check if all the expressions are built (does not check the
     /// worksharing ones).
     bool builtAll() {
       return IterationVarRef != nullptr && LastIteration != nullptr &&
@@ -710,7 +720,7 @@
              Cond != nullptr && Init != nullptr && Inc != nullptr;
     }
 
-    /// \brief Initialize all the fields to null.
+    /// Initialize all the fields to null.
     /// \param Size Number of elements in the counters/finals/updates arrays.
     void clear(unsigned Size) {
       IterationVarRef = nullptr;
@@ -755,7 +765,7 @@
     }
   };
 
-  /// \brief Get number of collapsed loops.
+  /// Get number of collapsed loops.
   unsigned getCollapsedNumber() const { return CollapsedNum; }
 
   Expr *getIterationVariable() const {
@@ -991,7 +1001,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp simd' directive.
+/// This represents '#pragma omp simd' directive.
 ///
 /// \code
 /// #pragma omp simd private(a,b) linear(i,j:s) reduction(+:c,d)
@@ -1002,7 +1012,7 @@
 ///
 class OMPSimdDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1014,7 +1024,7 @@
       : OMPLoopDirective(this, OMPSimdDirectiveClass, OMPD_simd, StartLoc,
                          EndLoc, CollapsedNum, NumClauses) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -1025,7 +1035,7 @@
                          NumClauses) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1041,7 +1051,7 @@
                                   Stmt *AssociatedStmt,
                                   const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -1056,7 +1066,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp for' directive.
+/// This represents '#pragma omp for' directive.
 ///
 /// \code
 /// #pragma omp for private(a,b) reduction(+:c,d)
@@ -1068,10 +1078,10 @@
 class OMPForDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current directive has inner cancel directive.
+  /// true if current directive has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1084,7 +1094,7 @@
                          CollapsedNum, NumClauses),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -1094,11 +1104,11 @@
                          SourceLocation(), CollapsedNum, NumClauses),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1115,7 +1125,7 @@
                                  Stmt *AssociatedStmt, const HelperExprs &Exprs,
                                  bool HasCancel);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -1125,7 +1135,7 @@
   static OMPForDirective *CreateEmpty(const ASTContext &C, unsigned NumClauses,
                                       unsigned CollapsedNum, EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1133,7 +1143,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp for simd' directive.
+/// This represents '#pragma omp for simd' directive.
 ///
 /// \code
 /// #pragma omp for simd private(a,b) linear(i,j:s) reduction(+:c,d)
@@ -1144,7 +1154,7 @@
 ///
 class OMPForSimdDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1156,7 +1166,7 @@
       : OMPLoopDirective(this, OMPForSimdDirectiveClass, OMPD_for_simd,
                          StartLoc, EndLoc, CollapsedNum, NumClauses) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -1167,7 +1177,7 @@
                          NumClauses) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1182,7 +1192,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -1198,7 +1208,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp sections' directive.
+/// This represents '#pragma omp sections' directive.
 ///
 /// \code
 /// #pragma omp sections private(a,b) reduction(+:c,d)
@@ -1210,10 +1220,10 @@
 class OMPSectionsDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current directive has inner cancel directive.
+  /// true if current directive has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1225,7 +1235,7 @@
                                StartLoc, EndLoc, NumClauses, 1),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -1235,11 +1245,11 @@
                                1),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1252,7 +1262,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -1261,7 +1271,7 @@
   static OMPSectionsDirective *CreateEmpty(const ASTContext &C,
                                            unsigned NumClauses, EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1269,7 +1279,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp section' directive.
+/// This represents '#pragma omp section' directive.
 ///
 /// \code
 /// #pragma omp section
@@ -1278,10 +1288,10 @@
 class OMPSectionDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current directive has inner cancel directive.
+  /// true if current directive has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1291,7 +1301,7 @@
                                StartLoc, EndLoc, 0, 1),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPSectionDirective()
       : OMPExecutableDirective(this, OMPSectionDirectiveClass, OMPD_section,
@@ -1299,7 +1309,7 @@
         HasCancel(false) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1312,16 +1322,16 @@
                                      SourceLocation EndLoc,
                                      Stmt *AssociatedStmt, bool HasCancel);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
   static OMPSectionDirective *CreateEmpty(const ASTContext &C, EmptyShell);
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1329,7 +1339,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp single' directive.
+/// This represents '#pragma omp single' directive.
 ///
 /// \code
 /// #pragma omp single private(a,b) copyprivate(c,d)
@@ -1339,7 +1349,7 @@
 ///
 class OMPSingleDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1350,7 +1360,7 @@
       : OMPExecutableDirective(this, OMPSingleDirectiveClass, OMPD_single,
                                StartLoc, EndLoc, NumClauses, 1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -1360,7 +1370,7 @@
                                1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1372,7 +1382,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -1386,7 +1396,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp master' directive.
+/// This represents '#pragma omp master' directive.
 ///
 /// \code
 /// #pragma omp master
@@ -1394,7 +1404,7 @@
 ///
 class OMPMasterDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1403,14 +1413,14 @@
       : OMPExecutableDirective(this, OMPMasterDirectiveClass, OMPD_master,
                                StartLoc, EndLoc, 0, 1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPMasterDirective()
       : OMPExecutableDirective(this, OMPMasterDirectiveClass, OMPD_master,
                                SourceLocation(), SourceLocation(), 0, 1) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1422,7 +1432,7 @@
                                     SourceLocation EndLoc,
                                     Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
@@ -1433,7 +1443,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp critical' directive.
+/// This represents '#pragma omp critical' directive.
 ///
 /// \code
 /// #pragma omp critical
@@ -1441,9 +1451,9 @@
 ///
 class OMPCriticalDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Name of the directive.
+  /// Name of the directive.
   DeclarationNameInfo DirName;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param Name Name of the directive.
   /// \param StartLoc Starting location of the directive kind.
@@ -1456,7 +1466,7 @@
                                StartLoc, EndLoc, NumClauses, 1),
         DirName(Name) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -1466,14 +1476,14 @@
                                1),
         DirName() {}
 
-  /// \brief Set name of the directive.
+  /// Set name of the directive.
   ///
   /// \param Name Name of the directive.
   ///
   void setDirectiveName(const DeclarationNameInfo &Name) { DirName = Name; }
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param Name Name of the directive.
@@ -1487,7 +1497,7 @@
          SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   /// \param NumClauses Number of clauses.
@@ -1495,7 +1505,7 @@
   static OMPCriticalDirective *CreateEmpty(const ASTContext &C,
                                            unsigned NumClauses, EmptyShell);
 
-  /// \brief Return name of the directive.
+  /// Return name of the directive.
   ///
   DeclarationNameInfo getDirectiveName() const { return DirName; }
 
@@ -1504,7 +1514,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp parallel for' directive.
+/// This represents '#pragma omp parallel for' directive.
 ///
 /// \code
 /// #pragma omp parallel for private(a,b) reduction(+:c,d)
@@ -1516,10 +1526,10 @@
 class OMPParallelForDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current region has inner cancel directive.
+  /// true if current region has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1532,7 +1542,7 @@
                          StartLoc, EndLoc, CollapsedNum, NumClauses),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -1543,11 +1553,11 @@
                          NumClauses),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1563,7 +1573,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -1575,7 +1585,7 @@
                                               unsigned CollapsedNum,
                                               EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1583,7 +1593,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp parallel for simd' directive.
+/// This represents '#pragma omp parallel for simd' directive.
 ///
 /// \code
 /// #pragma omp parallel for simd private(a,b) linear(i,j:s) reduction(+:c,d)
@@ -1595,7 +1605,7 @@
 ///
 class OMPParallelForSimdDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1608,7 +1618,7 @@
                          OMPD_parallel_for_simd, StartLoc, EndLoc, CollapsedNum,
                          NumClauses) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -1620,7 +1630,7 @@
                          SourceLocation(), CollapsedNum, NumClauses) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1635,7 +1645,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -1652,7 +1662,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp parallel sections' directive.
+/// This represents '#pragma omp parallel sections' directive.
 ///
 /// \code
 /// #pragma omp parallel sections private(a,b) reduction(+:c,d)
@@ -1664,10 +1674,10 @@
 class OMPParallelSectionsDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current directive has inner cancel directive.
+  /// true if current directive has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1680,7 +1690,7 @@
                                NumClauses, 1),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -1690,11 +1700,11 @@
                                SourceLocation(), NumClauses, 1),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1707,7 +1717,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -1716,7 +1726,7 @@
   static OMPParallelSectionsDirective *
   CreateEmpty(const ASTContext &C, unsigned NumClauses, EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1724,7 +1734,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp task' directive.
+/// This represents '#pragma omp task' directive.
 ///
 /// \code
 /// #pragma omp task private(a,b) final(d)
@@ -1734,10 +1744,10 @@
 ///
 class OMPTaskDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief true if this directive has inner cancel directive.
+  /// true if this directive has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1749,7 +1759,7 @@
                                EndLoc, NumClauses, 1),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -1759,11 +1769,11 @@
                                1),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1777,7 +1787,7 @@
                                   ArrayRef<OMPClause *> Clauses,
                                   Stmt *AssociatedStmt, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -1786,7 +1796,7 @@
   static OMPTaskDirective *CreateEmpty(const ASTContext &C, unsigned NumClauses,
                                        EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -1794,7 +1804,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp taskyield' directive.
+/// This represents '#pragma omp taskyield' directive.
 ///
 /// \code
 /// #pragma omp taskyield
@@ -1802,7 +1812,7 @@
 ///
 class OMPTaskyieldDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1811,14 +1821,14 @@
       : OMPExecutableDirective(this, OMPTaskyieldDirectiveClass, OMPD_taskyield,
                                StartLoc, EndLoc, 0, 0) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPTaskyieldDirective()
       : OMPExecutableDirective(this, OMPTaskyieldDirectiveClass, OMPD_taskyield,
                                SourceLocation(), SourceLocation(), 0, 0) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1827,7 +1837,7 @@
   static OMPTaskyieldDirective *
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
@@ -1838,7 +1848,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp barrier' directive.
+/// This represents '#pragma omp barrier' directive.
 ///
 /// \code
 /// #pragma omp barrier
@@ -1846,7 +1856,7 @@
 ///
 class OMPBarrierDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1855,14 +1865,14 @@
       : OMPExecutableDirective(this, OMPBarrierDirectiveClass, OMPD_barrier,
                                StartLoc, EndLoc, 0, 0) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPBarrierDirective()
       : OMPExecutableDirective(this, OMPBarrierDirectiveClass, OMPD_barrier,
                                SourceLocation(), SourceLocation(), 0, 0) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1871,7 +1881,7 @@
   static OMPBarrierDirective *
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
@@ -1882,7 +1892,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp taskwait' directive.
+/// This represents '#pragma omp taskwait' directive.
 ///
 /// \code
 /// #pragma omp taskwait
@@ -1890,7 +1900,7 @@
 ///
 class OMPTaskwaitDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -1899,14 +1909,14 @@
       : OMPExecutableDirective(this, OMPTaskwaitDirectiveClass, OMPD_taskwait,
                                StartLoc, EndLoc, 0, 0) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPTaskwaitDirective()
       : OMPExecutableDirective(this, OMPTaskwaitDirectiveClass, OMPD_taskwait,
                                SourceLocation(), SourceLocation(), 0, 0) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -1915,7 +1925,7 @@
   static OMPTaskwaitDirective *
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
@@ -1995,7 +2005,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp flush' directive.
+/// This represents '#pragma omp flush' directive.
 ///
 /// \code
 /// #pragma omp flush(a,b)
@@ -2007,7 +2017,7 @@
 /// FlushClause.
 class OMPFlushDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2018,7 +2028,7 @@
       : OMPExecutableDirective(this, OMPFlushDirectiveClass, OMPD_flush,
                                StartLoc, EndLoc, NumClauses, 0) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2028,7 +2038,7 @@
                                0) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2040,7 +2050,7 @@
                                    SourceLocation EndLoc,
                                    ArrayRef<OMPClause *> Clauses);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -2054,7 +2064,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp ordered' directive.
+/// This represents '#pragma omp ordered' directive.
 ///
 /// \code
 /// #pragma omp ordered
@@ -2062,7 +2072,7 @@
 ///
 class OMPOrderedDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2073,7 +2083,7 @@
       : OMPExecutableDirective(this, OMPOrderedDirectiveClass, OMPD_ordered,
                                StartLoc, EndLoc, NumClauses, 1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2083,7 +2093,7 @@
                                1) {}
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2095,7 +2105,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   /// \param NumClauses Number of clauses.
@@ -2108,7 +2118,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp atomic' directive.
+/// This represents '#pragma omp atomic' directive.
 ///
 /// \code
 /// #pragma omp atomic capture
@@ -2117,7 +2127,7 @@
 ///
 class OMPAtomicDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Used for 'atomic update' or 'atomic capture' constructs. They may
+  /// Used for 'atomic update' or 'atomic capture' constructs. They may
   /// have atomic expressions of forms
   /// \code
   /// x = x binop expr;
@@ -2127,7 +2137,7 @@
   /// second. Required for correct codegen of non-associative operations (like
   /// << or >>).
   bool IsXLHSInRHSPart;
-  /// \brief Used for 'atomic update' or 'atomic capture' constructs. They may
+  /// Used for 'atomic update' or 'atomic capture' constructs. They may
   /// have atomic expressions of forms
   /// \code
   /// v = x; <update x>;
@@ -2137,7 +2147,7 @@
   /// otherwise.
   bool IsPostfixUpdate;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2149,7 +2159,7 @@
                                StartLoc, EndLoc, NumClauses, 5),
         IsXLHSInRHSPart(false), IsPostfixUpdate(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2159,19 +2169,19 @@
                                5),
         IsXLHSInRHSPart(false), IsPostfixUpdate(false) {}
 
-  /// \brief Set 'x' part of the associated expression/statement.
+  /// Set 'x' part of the associated expression/statement.
   void setX(Expr *X) { *std::next(child_begin()) = X; }
-  /// \brief Set helper expression of the form
+  /// Set helper expression of the form
   /// 'OpaqueValueExpr(x) binop OpaqueValueExpr(expr)' or
   /// 'OpaqueValueExpr(expr) binop OpaqueValueExpr(x)'.
   void setUpdateExpr(Expr *UE) { *std::next(child_begin(), 2) = UE; }
-  /// \brief Set 'v' part of the associated expression/statement.
+  /// Set 'v' part of the associated expression/statement.
   void setV(Expr *V) { *std::next(child_begin(), 3) = V; }
-  /// \brief Set 'expr' part of the associated expression/statement.
+  /// Set 'expr' part of the associated expression/statement.
   void setExpr(Expr *E) { *std::next(child_begin(), 4) = E; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses and 'x', 'v' and 'expr'
+  /// Creates directive with a list of \a Clauses and 'x', 'v' and 'expr'
   /// parts of the atomic construct (see Section 2.12.6, atomic Construct, for
   /// detailed description of 'x', 'v' and 'expr').
   ///
@@ -2195,7 +2205,7 @@
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt, Expr *X, Expr *V,
          Expr *E, Expr *UE, bool IsXLHSInRHSPart, bool IsPostfixUpdate);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -2204,12 +2214,12 @@
   static OMPAtomicDirective *CreateEmpty(const ASTContext &C,
                                          unsigned NumClauses, EmptyShell);
 
-  /// \brief Get 'x' part of the associated expression/statement.
+  /// Get 'x' part of the associated expression/statement.
   Expr *getX() { return cast_or_null<Expr>(*std::next(child_begin())); }
   const Expr *getX() const {
     return cast_or_null<Expr>(*std::next(child_begin()));
   }
-  /// \brief Get helper expression of the form
+  /// Get helper expression of the form
   /// 'OpaqueValueExpr(x) binop OpaqueValueExpr(expr)' or
   /// 'OpaqueValueExpr(expr) binop OpaqueValueExpr(x)'.
   Expr *getUpdateExpr() {
@@ -2218,19 +2228,19 @@
   const Expr *getUpdateExpr() const {
     return cast_or_null<Expr>(*std::next(child_begin(), 2));
   }
-  /// \brief Return true if helper update expression has form
+  /// Return true if helper update expression has form
   /// 'OpaqueValueExpr(x) binop OpaqueValueExpr(expr)' and false if it has form
   /// 'OpaqueValueExpr(expr) binop OpaqueValueExpr(x)'.
   bool isXLHSInRHSPart() const { return IsXLHSInRHSPart; }
-  /// \brief Return true if 'v' expression must be updated to original value of
+  /// Return true if 'v' expression must be updated to original value of
   /// 'x', false if 'v' must be updated to the new value of 'x'.
   bool isPostfixUpdate() const { return IsPostfixUpdate; }
-  /// \brief Get 'v' part of the associated expression/statement.
+  /// Get 'v' part of the associated expression/statement.
   Expr *getV() { return cast_or_null<Expr>(*std::next(child_begin(), 3)); }
   const Expr *getV() const {
     return cast_or_null<Expr>(*std::next(child_begin(), 3));
   }
-  /// \brief Get 'expr' part of the associated expression/statement.
+  /// Get 'expr' part of the associated expression/statement.
   Expr *getExpr() { return cast_or_null<Expr>(*std::next(child_begin(), 4)); }
   const Expr *getExpr() const {
     return cast_or_null<Expr>(*std::next(child_begin(), 4));
@@ -2241,7 +2251,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target' directive.
+/// This represents '#pragma omp target' directive.
 ///
 /// \code
 /// #pragma omp target if(a)
@@ -2251,7 +2261,7 @@
 ///
 class OMPTargetDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2262,7 +2272,7 @@
       : OMPExecutableDirective(this, OMPTargetDirectiveClass, OMPD_target,
                                StartLoc, EndLoc, NumClauses, 1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2272,7 +2282,7 @@
                                1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2284,7 +2294,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -2298,7 +2308,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target data' directive.
+/// This represents '#pragma omp target data' directive.
 ///
 /// \code
 /// #pragma omp target data device(0) if(a) map(b[:])
@@ -2309,7 +2319,7 @@
 ///
 class OMPTargetDataDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending Location of the directive.
@@ -2317,21 +2327,21 @@
   ///
   OMPTargetDataDirective(SourceLocation StartLoc, SourceLocation EndLoc,
                          unsigned NumClauses)
-      : OMPExecutableDirective(this, OMPTargetDataDirectiveClass, 
+      : OMPExecutableDirective(this, OMPTargetDataDirectiveClass,
                                OMPD_target_data, StartLoc, EndLoc, NumClauses,
                                1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
   explicit OMPTargetDataDirective(unsigned NumClauses)
-      : OMPExecutableDirective(this, OMPTargetDataDirectiveClass, 
+      : OMPExecutableDirective(this, OMPTargetDataDirectiveClass,
                                OMPD_target_data, SourceLocation(),
                                SourceLocation(), NumClauses, 1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2343,7 +2353,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a N clauses.
+  /// Creates an empty directive with the place for \a N clauses.
   ///
   /// \param C AST context.
   /// \param N The number of clauses.
@@ -2356,7 +2366,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target enter data' directive.
+/// This represents '#pragma omp target enter data' directive.
 ///
 /// \code
 /// #pragma omp target enter data device(0) if(a) map(b[:])
@@ -2367,7 +2377,7 @@
 ///
 class OMPTargetEnterDataDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending Location of the directive.
@@ -2379,7 +2389,7 @@
                                OMPD_target_enter_data, StartLoc, EndLoc,
                                NumClauses, /*NumChildren=*/1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2390,7 +2400,7 @@
                                /*NumChildren=*/1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2402,7 +2412,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a N clauses.
+  /// Creates an empty directive with the place for \a N clauses.
   ///
   /// \param C AST context.
   /// \param N The number of clauses.
@@ -2415,7 +2425,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target exit data' directive.
+/// This represents '#pragma omp target exit data' directive.
 ///
 /// \code
 /// #pragma omp target exit data device(0) if(a) map(b[:])
@@ -2426,7 +2436,7 @@
 ///
 class OMPTargetExitDataDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending Location of the directive.
@@ -2438,7 +2448,7 @@
                                OMPD_target_exit_data, StartLoc, EndLoc,
                                NumClauses, /*NumChildren=*/1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2449,7 +2459,7 @@
                                /*NumChildren=*/1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2461,7 +2471,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a N clauses.
+  /// Creates an empty directive with the place for \a N clauses.
   ///
   /// \param C AST context.
   /// \param N The number of clauses.
@@ -2474,7 +2484,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target parallel' directive.
+/// This represents '#pragma omp target parallel' directive.
 ///
 /// \code
 /// #pragma omp target parallel if(a)
@@ -2484,7 +2494,7 @@
 ///
 class OMPTargetParallelDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2496,7 +2506,7 @@
                                OMPD_target_parallel, StartLoc, EndLoc,
                                NumClauses, /*NumChildren=*/1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2507,7 +2517,7 @@
                                /*NumChildren=*/1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2519,7 +2529,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -2533,7 +2543,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target parallel for' directive.
+/// This represents '#pragma omp target parallel for' directive.
 ///
 /// \code
 /// #pragma omp target parallel for private(a,b) reduction(+:c,d)
@@ -2545,10 +2555,10 @@
 class OMPTargetParallelForDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
 
-  /// \brief true if current region has inner cancel directive.
+  /// true if current region has inner cancel directive.
   bool HasCancel;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2562,7 +2572,7 @@
                          CollapsedNum, NumClauses),
         HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -2574,11 +2584,11 @@
                          SourceLocation(), CollapsedNum, NumClauses),
         HasCancel(false) {}
 
-  /// \brief Set cancel state.
+  /// Set cancel state.
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2594,7 +2604,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -2606,7 +2616,7 @@
                                                     unsigned CollapsedNum,
                                                     EmptyShell);
 
-  /// \brief Return true if current directive has inner cancel directive.
+  /// Return true if current directive has inner cancel directive.
   bool hasCancel() const { return HasCancel; }
 
   static bool classof(const Stmt *T) {
@@ -2614,7 +2624,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp teams' directive.
+/// This represents '#pragma omp teams' directive.
 ///
 /// \code
 /// #pragma omp teams if(a)
@@ -2624,7 +2634,7 @@
 ///
 class OMPTeamsDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2635,7 +2645,7 @@
       : OMPExecutableDirective(this, OMPTeamsDirectiveClass, OMPD_teams,
                                StartLoc, EndLoc, NumClauses, 1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -2645,7 +2655,7 @@
                                1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2658,7 +2668,7 @@
                                    ArrayRef<OMPClause *> Clauses,
                                    Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -2672,7 +2682,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp cancellation point' directive.
+/// This represents '#pragma omp cancellation point' directive.
 ///
 /// \code
 /// #pragma omp cancellation point for
@@ -2682,7 +2692,7 @@
 class OMPCancellationPointDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
   OpenMPDirectiveKind CancelRegion;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2692,7 +2702,7 @@
                                OMPD_cancellation_point, StartLoc, EndLoc, 0, 0),
         CancelRegion(OMPD_unknown) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   explicit OMPCancellationPointDirective()
       : OMPExecutableDirective(this, OMPCancellationPointDirectiveClass,
@@ -2700,12 +2710,12 @@
                                SourceLocation(), 0, 0),
         CancelRegion(OMPD_unknown) {}
 
-  /// \brief Set cancel region for current cancellation point.
+  /// Set cancel region for current cancellation point.
   /// \param CR Cancellation region.
   void setCancelRegion(OpenMPDirectiveKind CR) { CancelRegion = CR; }
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2715,14 +2725,14 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          OpenMPDirectiveKind CancelRegion);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   ///
   static OMPCancellationPointDirective *CreateEmpty(const ASTContext &C,
                                                     EmptyShell);
 
-  /// \brief Get cancellation region for the current cancellation point.
+  /// Get cancellation region for the current cancellation point.
   OpenMPDirectiveKind getCancelRegion() const { return CancelRegion; }
 
   static bool classof(const Stmt *T) {
@@ -2730,7 +2740,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp cancel' directive.
+/// This represents '#pragma omp cancel' directive.
 ///
 /// \code
 /// #pragma omp cancel for
@@ -2740,7 +2750,7 @@
 class OMPCancelDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
   OpenMPDirectiveKind CancelRegion;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2752,7 +2762,7 @@
                                StartLoc, EndLoc, NumClauses, 0),
         CancelRegion(OMPD_unknown) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   explicit OMPCancelDirective(unsigned NumClauses)
@@ -2761,12 +2771,12 @@
                                0),
         CancelRegion(OMPD_unknown) {}
 
-  /// \brief Set cancel region for current cancellation point.
+  /// Set cancel region for current cancellation point.
   /// \param CR Cancellation region.
   void setCancelRegion(OpenMPDirectiveKind CR) { CancelRegion = CR; }
 
 public:
-  /// \brief Creates directive.
+  /// Creates directive.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2777,7 +2787,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, OpenMPDirectiveKind CancelRegion);
 
-  /// \brief Creates an empty directive.
+  /// Creates an empty directive.
   ///
   /// \param C AST context.
   /// \param NumClauses Number of clauses.
@@ -2785,7 +2795,7 @@
   static OMPCancelDirective *CreateEmpty(const ASTContext &C,
                                          unsigned NumClauses, EmptyShell);
 
-  /// \brief Get cancellation region for the current cancellation point.
+  /// Get cancellation region for the current cancellation point.
   OpenMPDirectiveKind getCancelRegion() const { return CancelRegion; }
 
   static bool classof(const Stmt *T) {
@@ -2793,7 +2803,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp taskloop' directive.
+/// This represents '#pragma omp taskloop' directive.
 ///
 /// \code
 /// #pragma omp taskloop private(a,b) grainsize(val) num_tasks(num)
@@ -2804,7 +2814,7 @@
 ///
 class OMPTaskLoopDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2816,7 +2826,7 @@
       : OMPLoopDirective(this, OMPTaskLoopDirectiveClass, OMPD_taskloop,
                          StartLoc, EndLoc, CollapsedNum, NumClauses) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -2827,7 +2837,7 @@
                          NumClauses) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2842,7 +2852,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -2858,7 +2868,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp taskloop simd' directive.
+/// This represents '#pragma omp taskloop simd' directive.
 ///
 /// \code
 /// #pragma omp taskloop simd private(a,b) grainsize(val) num_tasks(num)
@@ -2869,7 +2879,7 @@
 ///
 class OMPTaskLoopSimdDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2882,7 +2892,7 @@
                          OMPD_taskloop_simd, StartLoc, EndLoc, CollapsedNum,
                          NumClauses) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -2893,7 +2903,7 @@
                          CollapsedNum, NumClauses) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2908,7 +2918,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -2925,7 +2935,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp distribute' directive.
+/// This represents '#pragma omp distribute' directive.
 ///
 /// \code
 /// #pragma omp distribute private(a,b)
@@ -2936,7 +2946,7 @@
 class OMPDistributeDirective : public OMPLoopDirective {
   friend class ASTStmtReader;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -2949,7 +2959,7 @@
                          StartLoc, EndLoc, CollapsedNum, NumClauses)
         {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -2961,7 +2971,7 @@
         {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -2976,7 +2986,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -2992,7 +3002,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp target update' directive.
+/// This represents '#pragma omp target update' directive.
 ///
 /// \code
 /// #pragma omp target update to(a) from(b) device(1)
@@ -3003,7 +3013,7 @@
 ///
 class OMPTargetUpdateDirective : public OMPExecutableDirective {
   friend class ASTStmtReader;
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending Location of the directive.
@@ -3015,7 +3025,7 @@
                                OMPD_target_update, StartLoc, EndLoc, NumClauses,
                                1) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param NumClauses Number of clauses.
   ///
@@ -3025,7 +3035,7 @@
                                SourceLocation(), NumClauses, 1) {}
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -3037,7 +3047,7 @@
   Create(const ASTContext &C, SourceLocation StartLoc, SourceLocation EndLoc,
          ArrayRef<OMPClause *> Clauses, Stmt *AssociatedStmt);
 
-  /// \brief Creates an empty directive with the place for \a NumClauses
+  /// Creates an empty directive with the place for \a NumClauses
   /// clauses.
   ///
   /// \param C AST context.
@@ -3051,7 +3061,7 @@
   }
 };
 
-/// \brief This represents '#pragma omp distribute parallel for' composite
+/// This represents '#pragma omp distribute parallel for' composite
 ///  directive.
 ///
 /// \code
@@ -3065,7 +3075,7 @@
   /// true if the construct has inner cancel directive.
   bool HasCancel = false;
 
-  /// \brief Build directive with the given start and end location.
+  /// Build directive with the given start and end location.
   ///
   /// \param StartLoc Starting location of the directive kind.
   /// \param EndLoc Ending location of the directive.
@@ -3079,7 +3089,7 @@
                          OMPD_distribute_parallel_for, StartLoc, EndLoc,
                          CollapsedNum, NumClauses), HasCancel(false) {}
 
-  /// \brief Build an empty directive.
+  /// Build an empty directive.
   ///
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
@@ -3095,7 +3105,7 @@
   void setHasCancel(bool Has) { HasCancel = Has; }
 
 public:
-  /// \brief Creates directive with a list of \a Clauses.
+  /// Creates directive with a list of \a Clauses.
   ///
   /// \param C AST context.
   /// \param StartLoc Starting location of the directive kind.
@@ -3111,7 +3121,7 @@
          unsigned CollapsedNum, ArrayRef<OMPClause *> Clauses,
          Stmt *AssociatedStmt, const HelperExprs &Exprs, bool HasCancel);
 
-  /// \brief Creates an empty directive with the place
+  /// Creates an empty directive with the place
   /// for \a NumClauses clauses.
   ///
   /// \param C AST context.
@@ -3155,7 +3165,7 @@
                                         unsigned CollapsedNum,
                                         unsigned NumClauses)
       : OMPLoopDirective(this, OMPDistributeParallelForSimdDirectiveClass,
-                         OMPD_distribute_parallel_for_simd, StartLoc, 
+                         OMPD_distribute_parallel_for_simd, StartLoc,
                          EndLoc, CollapsedNum, NumClauses) {}
 
   /// Build an empty directive.
@@ -3166,7 +3176,7 @@
   explicit OMPDistributeParallelForSimdDirective(unsigned CollapsedNum,
                                                  unsigned NumClauses)
       : OMPLoopDirective(this, OMPDistributeParallelForSimdDirectiveClass,
-                         OMPD_distribute_parallel_for_simd, 
+                         OMPD_distribute_parallel_for_simd,
                          SourceLocation(), SourceLocation(), CollapsedNum,
                          NumClauses) {}
 
@@ -3230,7 +3240,7 @@
   /// \param CollapsedNum Number of collapsed nested loops.
   /// \param NumClauses Number of clauses.
   ///
-  explicit OMPDistributeSimdDirective(unsigned CollapsedNum, 
+  explicit OMPDistributeSimdDirective(unsigned CollapsedNum,
                                       unsigned NumClauses)
       : OMPLoopDirective(this, OMPDistributeSimdDirectiveClass,
                          OMPD_distribute_simd, SourceLocation(),
@@ -3367,7 +3377,7 @@
   /// \param NumClauses Number of clauses.
   ///
   explicit OMPTargetSimdDirective(unsigned CollapsedNum, unsigned NumClauses)
-      : OMPLoopDirective(this, OMPTargetSimdDirectiveClass, OMPD_target_simd, 
+      : OMPLoopDirective(this, OMPTargetSimdDirectiveClass, OMPD_target_simd,
                          SourceLocation(),SourceLocation(), CollapsedNum,
                          NumClauses) {}
 
@@ -3423,8 +3433,8 @@
   ///
   OMPTeamsDistributeDirective(SourceLocation StartLoc, SourceLocation EndLoc,
                               unsigned CollapsedNum, unsigned NumClauses)
-      : OMPLoopDirective(this, OMPTeamsDistributeDirectiveClass, 
-                         OMPD_teams_distribute, StartLoc, EndLoc, 
+      : OMPLoopDirective(this, OMPTeamsDistributeDirectiveClass,
+                         OMPD_teams_distribute, StartLoc, EndLoc,
                          CollapsedNum, NumClauses) {}
 
   /// Build an empty directive.
@@ -3565,7 +3575,7 @@
                                              unsigned CollapsedNum,
                                              unsigned NumClauses)
       : OMPLoopDirective(this, OMPTeamsDistributeParallelForSimdDirectiveClass,
-                         OMPD_teams_distribute_parallel_for_simd, StartLoc, 
+                         OMPD_teams_distribute_parallel_for_simd, StartLoc,
                          EndLoc, CollapsedNum, NumClauses) {}
 
   /// Build an empty directive.
@@ -3576,7 +3586,7 @@
   explicit OMPTeamsDistributeParallelForSimdDirective(unsigned CollapsedNum,
                                                       unsigned NumClauses)
       : OMPLoopDirective(this, OMPTeamsDistributeParallelForSimdDirectiveClass,
-                         OMPD_teams_distribute_parallel_for_simd, 
+                         OMPD_teams_distribute_parallel_for_simd,
                          SourceLocation(), SourceLocation(), CollapsedNum,
                          NumClauses) {}
 
diff --git a/linux-x64/clang/include/clang/AST/StmtVisitor.h b/linux-x64/clang/include/clang/AST/StmtVisitor.h
index 98fa113..30bc257 100644
--- a/linux-x64/clang/include/clang/AST/StmtVisitor.h
+++ b/linux-x64/clang/include/clang/AST/StmtVisitor.h
@@ -195,7 +195,7 @@
 class ConstStmtVisitor
  : public StmtVisitorBase<make_const_ptr, ImplClass, RetTy, ParamTys...> {};
 
-/// \brief This class implements a simple visitor for OMPClause
+/// This class implements a simple visitor for OMPClause
 /// subclasses.
 template<class ImplClass, template <typename> class Ptr, typename RetTy>
 class OMPClauseVisitorBase {
diff --git a/linux-x64/clang/include/clang/AST/TemplateBase.h b/linux-x64/clang/include/clang/AST/TemplateBase.h
index 850250b..8f92e79 100644
--- a/linux-x64/clang/include/clang/AST/TemplateBase.h
+++ b/linux-x64/clang/include/clang/AST/TemplateBase.h
@@ -47,12 +47,12 @@
 class TypeSourceInfo;
 class ValueDecl;
 
-/// \brief Represents a template argument.
+/// Represents a template argument.
 class TemplateArgument {
 public:
-  /// \brief The kind of template argument we're storing.
+  /// The kind of template argument we're storing.
   enum ArgKind {
-    /// \brief Represents an empty template argument, e.g., one that has not
+    /// Represents an empty template argument, e.g., one that has not
     /// been deduced.
     Null = 0,
 
@@ -92,7 +92,7 @@
   };
 
 private:
-  /// \brief The kind of template argument we're storing.
+  /// The kind of template argument we're storing.
 
   struct DA {
     unsigned Kind;
@@ -138,16 +138,16 @@
   };
 
 public:
-  /// \brief Construct an empty, invalid template argument.
+  /// Construct an empty, invalid template argument.
   constexpr TemplateArgument() : TypeOrValue({Null, 0}) {}
 
-  /// \brief Construct a template type argument.
+  /// Construct a template type argument.
   TemplateArgument(QualType T, bool isNullPtr = false) {
     TypeOrValue.Kind = isNullPtr ? NullPtr : Type;
     TypeOrValue.V = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
   }
 
-  /// \brief Construct a template argument that refers to a
+  /// Construct a template argument that refers to a
   /// declaration, which is either an external declaration or a
   /// template declaration.
   TemplateArgument(ValueDecl *D, QualType QT) {
@@ -157,18 +157,18 @@
     DeclArg.D = D;
   }
 
-  /// \brief Construct an integral constant template argument. The memory to
+  /// Construct an integral constant template argument. The memory to
   /// store the value is allocated with Ctx.
   TemplateArgument(ASTContext &Ctx, const llvm::APSInt &Value, QualType Type);
 
-  /// \brief Construct an integral constant template argument with the same
+  /// Construct an integral constant template argument with the same
   /// value as Other but a different type.
   TemplateArgument(const TemplateArgument &Other, QualType Type) {
     Integer = Other.Integer;
     Integer.Type = Type.getAsOpaquePtr();
   }
 
-  /// \brief Construct a template argument that is a template.
+  /// Construct a template argument that is a template.
   ///
   /// This form of template argument is generally used for template template
   /// parameters. However, the template name could be a dependent template
@@ -182,7 +182,7 @@
     TemplateArg.NumExpansions = 0;
   }
 
-  /// \brief Construct a template argument that is a template pack expansion.
+  /// Construct a template argument that is a template pack expansion.
   ///
   /// This form of template argument is generally used for template template
   /// parameters. However, the template name could be a dependent template
@@ -202,7 +202,7 @@
       TemplateArg.NumExpansions = 0;
   }
 
-  /// \brief Construct a template argument that is an expression.
+  /// Construct a template argument that is an expression.
   ///
   /// This form of template argument only occurs in template argument
   /// lists used for dependent types and for expression; it will not
@@ -212,7 +212,7 @@
     TypeOrValue.V = reinterpret_cast<uintptr_t>(E);
   }
 
-  /// \brief Construct a template argument that is a template argument pack.
+  /// Construct a template argument that is a template argument pack.
   ///
   /// We assume that storage for the template arguments provided
   /// outlives the TemplateArgument itself.
@@ -226,40 +226,40 @@
 
   static TemplateArgument getEmptyPack() { return TemplateArgument(None); }
 
-  /// \brief Create a new template argument pack by copying the given set of
+  /// Create a new template argument pack by copying the given set of
   /// template arguments.
   static TemplateArgument CreatePackCopy(ASTContext &Context,
                                          ArrayRef<TemplateArgument> Args);
 
-  /// \brief Return the kind of stored template argument.
+  /// Return the kind of stored template argument.
   ArgKind getKind() const { return (ArgKind)TypeOrValue.Kind; }
 
-  /// \brief Determine whether this template argument has no value.
+  /// Determine whether this template argument has no value.
   bool isNull() const { return getKind() == Null; }
 
-  /// \brief Whether this template argument is dependent on a template
+  /// Whether this template argument is dependent on a template
   /// parameter such that its result can change from one instantiation to
   /// another.
   bool isDependent() const;
 
-  /// \brief Whether this template argument is dependent on a template
+  /// Whether this template argument is dependent on a template
   /// parameter.
   bool isInstantiationDependent() const;
 
-  /// \brief Whether this template argument contains an unexpanded
+  /// Whether this template argument contains an unexpanded
   /// parameter pack.
   bool containsUnexpandedParameterPack() const;
 
-  /// \brief Determine whether this template argument is a pack expansion.
+  /// Determine whether this template argument is a pack expansion.
   bool isPackExpansion() const;
-  
-  /// \brief Retrieve the type for a type template argument.
+
+  /// Retrieve the type for a type template argument.
   QualType getAsType() const {
     assert(getKind() == Type && "Unexpected kind");
     return QualType::getFromOpaquePtr(reinterpret_cast<void*>(TypeOrValue.V));
   }
 
-  /// \brief Retrieve the declaration for a declaration non-type
+  /// Retrieve the declaration for a declaration non-type
   /// template argument.
   ValueDecl *getAsDecl() const {
     assert(getKind() == Declaration && "Unexpected kind");
@@ -271,32 +271,32 @@
     return QualType::getFromOpaquePtr(DeclArg.QT);
   }
 
-  /// \brief Retrieve the type for null non-type template argument.
+  /// Retrieve the type for null non-type template argument.
   QualType getNullPtrType() const {
     assert(getKind() == NullPtr && "Unexpected kind");
     return QualType::getFromOpaquePtr(reinterpret_cast<void*>(TypeOrValue.V));
   }
 
-  /// \brief Retrieve the template name for a template name argument.
+  /// Retrieve the template name for a template name argument.
   TemplateName getAsTemplate() const {
     assert(getKind() == Template && "Unexpected kind");
     return TemplateName::getFromVoidPointer(TemplateArg.Name);
   }
 
-  /// \brief Retrieve the template argument as a template name; if the argument
+  /// Retrieve the template argument as a template name; if the argument
   /// is a pack expansion, return the pattern as a template name.
   TemplateName getAsTemplateOrTemplatePattern() const {
     assert((getKind() == Template || getKind() == TemplateExpansion) &&
            "Unexpected kind");
-    
+
     return TemplateName::getFromVoidPointer(TemplateArg.Name);
   }
 
-  /// \brief Retrieve the number of expansions that a template template argument
+  /// Retrieve the number of expansions that a template template argument
   /// expansion will produce, if known.
   Optional<unsigned> getNumTemplateExpansions() const;
-  
-  /// \brief Retrieve the template argument as an integral value.
+
+  /// Retrieve the template argument as an integral value.
   // FIXME: Provide a way to read the integral data without copying the value.
   llvm::APSInt getAsIntegral() const {
     assert(getKind() == Integral && "Unexpected kind");
@@ -311,7 +311,7 @@
                   Integer.IsUnsigned);
   }
 
-  /// \brief Retrieve the type of the integral value.
+  /// Retrieve the type of the integral value.
   QualType getIntegralType() const {
     assert(getKind() == Integral && "Unexpected kind");
     return QualType::getFromOpaquePtr(Integer.Type);
@@ -322,70 +322,70 @@
     Integer.Type = T.getAsOpaquePtr();
   }
 
-  /// \brief If this is a non-type template argument, get its type. Otherwise,
+  /// If this is a non-type template argument, get its type. Otherwise,
   /// returns a null QualType.
   QualType getNonTypeTemplateArgumentType() const;
 
-  /// \brief Retrieve the template argument as an expression.
+  /// Retrieve the template argument as an expression.
   Expr *getAsExpr() const {
     assert(getKind() == Expression && "Unexpected kind");
     return reinterpret_cast<Expr *>(TypeOrValue.V);
   }
 
-  /// \brief Iterator that traverses the elements of a template argument pack.
+  /// Iterator that traverses the elements of a template argument pack.
   using pack_iterator = const TemplateArgument *;
 
-  /// \brief Iterator referencing the first argument of a template argument
+  /// Iterator referencing the first argument of a template argument
   /// pack.
   pack_iterator pack_begin() const {
     assert(getKind() == Pack);
     return Args.Args;
   }
 
-  /// \brief Iterator referencing one past the last argument of a template
+  /// Iterator referencing one past the last argument of a template
   /// argument pack.
   pack_iterator pack_end() const {
     assert(getKind() == Pack);
     return Args.Args + Args.NumArgs;
   }
 
-  /// \brief Iterator range referencing all of the elements of a template
+  /// Iterator range referencing all of the elements of a template
   /// argument pack.
   ArrayRef<TemplateArgument> pack_elements() const {
     return llvm::makeArrayRef(pack_begin(), pack_end());
   }
 
-  /// \brief The number of template arguments in the given template argument
+  /// The number of template arguments in the given template argument
   /// pack.
   unsigned pack_size() const {
     assert(getKind() == Pack);
     return Args.NumArgs;
   }
 
-  /// \brief Return the array of arguments in this template argument pack.
+  /// Return the array of arguments in this template argument pack.
   ArrayRef<TemplateArgument> getPackAsArray() const {
     assert(getKind() == Pack);
     return llvm::makeArrayRef(Args.Args, Args.NumArgs);
   }
 
-  /// \brief Determines whether two template arguments are superficially the
+  /// Determines whether two template arguments are superficially the
   /// same.
   bool structurallyEquals(const TemplateArgument &Other) const;
 
-  /// \brief When the template argument is a pack expansion, returns
+  /// When the template argument is a pack expansion, returns
   /// the pattern of the pack expansion.
   TemplateArgument getPackExpansionPattern() const;
 
-  /// \brief Print this template argument to the given output stream.
+  /// Print this template argument to the given output stream.
   void print(const PrintingPolicy &Policy, raw_ostream &Out) const;
-             
-  /// \brief Debugging aid that dumps the template argument.
+
+  /// Debugging aid that dumps the template argument.
   void dump(raw_ostream &Out) const;
 
-  /// \brief Debugging aid that dumps the template argument to standard error.
+  /// Debugging aid that dumps the template argument to standard error.
   void dump() const;
-             
-  /// \brief Used to insert TemplateArguments into FoldingSets.
+
+  /// Used to insert TemplateArguments into FoldingSets.
   void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context) const;
 };
 
@@ -411,9 +411,9 @@
   constexpr TemplateArgumentLocInfo() : Template({nullptr, nullptr, 0, 0}) {}
 
   TemplateArgumentLocInfo(TypeSourceInfo *TInfo) : Declarator(TInfo) {}
-  
+
   TemplateArgumentLocInfo(Expr *E) : Expression(E) {}
-  
+
   TemplateArgumentLocInfo(NestedNameSpecifierLoc QualifierLoc,
                           SourceLocation TemplateNameLoc,
                           SourceLocation EllipsisLoc) {
@@ -432,14 +432,14 @@
   }
 
   NestedNameSpecifierLoc getTemplateQualifierLoc() const {
-    return NestedNameSpecifierLoc(Template.Qualifier, 
+    return NestedNameSpecifierLoc(Template.Qualifier,
                                   Template.QualifierLocData);
   }
-  
+
   SourceLocation getTemplateNameLoc() const {
     return SourceLocation::getFromRawEncoding(Template.TemplateNameLoc);
   }
-  
+
   SourceLocation getTemplateEllipsisLoc() const {
     return SourceLocation::getFromRawEncoding(Template.EllipsisLoc);
   }
@@ -465,10 +465,16 @@
 
   TemplateArgumentLoc(const TemplateArgument &Argument, Expr *E)
       : Argument(Argument), LocInfo(E) {
-    assert(Argument.getKind() == TemplateArgument::Expression);
+
+    // Permit any kind of template argument that can be represented with an
+    // expression.
+    assert(Argument.getKind() == TemplateArgument::NullPtr ||
+           Argument.getKind() == TemplateArgument::Integral ||
+           Argument.getKind() == TemplateArgument::Declaration ||
+           Argument.getKind() == TemplateArgument::Expression);
   }
 
-  TemplateArgumentLoc(const TemplateArgument &Argument, 
+  TemplateArgumentLoc(const TemplateArgument &Argument,
                       NestedNameSpecifierLoc QualifierLoc,
                       SourceLocation TemplateNameLoc,
                       SourceLocation EllipsisLoc = SourceLocation())
@@ -477,17 +483,17 @@
     assert(Argument.getKind() == TemplateArgument::Template ||
            Argument.getKind() == TemplateArgument::TemplateExpansion);
   }
-  
-  /// \brief - Fetches the primary location of the argument.
+
+  /// - Fetches the primary location of the argument.
   SourceLocation getLocation() const {
     if (Argument.getKind() == TemplateArgument::Template ||
         Argument.getKind() == TemplateArgument::TemplateExpansion)
       return getTemplateNameLoc();
-    
+
     return getSourceRange().getBegin();
   }
 
-  /// \brief - Fetches the full source range of the argument.
+  /// - Fetches the full source range of the argument.
   SourceRange getSourceRange() const LLVM_READONLY;
 
   const TemplateArgument &getArgument() const {
@@ -528,13 +534,13 @@
            Argument.getKind() == TemplateArgument::TemplateExpansion);
     return LocInfo.getTemplateQualifierLoc();
   }
-  
+
   SourceLocation getTemplateNameLoc() const {
     assert(Argument.getKind() == TemplateArgument::Template ||
            Argument.getKind() == TemplateArgument::TemplateExpansion);
     return LocInfo.getTemplateNameLoc();
-  }  
-  
+  }
+
   SourceLocation getTemplateEllipsisLoc() const {
     assert(Argument.getKind() == TemplateArgument::TemplateExpansion);
     return LocInfo.getTemplateEllipsisLoc();
@@ -588,7 +594,7 @@
   }
 };
 
-/// \brief Represents an explicit template argument list in C++, e.g.,
+/// Represents an explicit template argument list in C++, e.g.,
 /// the "<int>" in "sort<int>".
 /// This is safe to be used inside an AST node, in contrast with
 /// TemplateArgumentListInfo.
@@ -602,16 +608,16 @@
   ASTTemplateArgumentListInfo(const TemplateArgumentListInfo &List);
 
 public:
-  /// \brief The source location of the left angle bracket ('<').
+  /// The source location of the left angle bracket ('<').
   SourceLocation LAngleLoc;
 
-  /// \brief The source location of the right angle bracket ('>').
+  /// The source location of the right angle bracket ('>').
   SourceLocation RAngleLoc;
 
-  /// \brief The number of template arguments in TemplateArgs.
+  /// The number of template arguments in TemplateArgs.
   unsigned NumTemplateArgs;
 
-  /// \brief Retrieve the template arguments
+  /// Retrieve the template arguments
   const TemplateArgumentLoc *getTemplateArgs() const {
     return getTrailingObjects<TemplateArgumentLoc>();
   }
@@ -628,7 +634,7 @@
   Create(ASTContext &C, const TemplateArgumentListInfo &List);
 };
 
-/// \brief Represents an explicit template argument list in C++, e.g.,
+/// Represents an explicit template argument list in C++, e.g.,
 /// the "<int>" in "sort<int>".
 ///
 /// It is intended to be used as a trailing object on AST nodes, and
@@ -636,19 +642,19 @@
 /// but expects the containing object to also provide storage for
 /// that.
 struct alignas(void *) ASTTemplateKWAndArgsInfo {
-  /// \brief The source location of the left angle bracket ('<').
+  /// The source location of the left angle bracket ('<').
   SourceLocation LAngleLoc;
 
-  /// \brief The source location of the right angle bracket ('>').
+  /// The source location of the right angle bracket ('>').
   SourceLocation RAngleLoc;
 
-  /// \brief The source location of the template keyword; this is used
+  /// The source location of the template keyword; this is used
   /// as part of the representation of qualified identifiers, such as
   /// S<T>::template apply<T>.  Will be empty if this expression does
   /// not have a template keyword.
   SourceLocation TemplateKWLoc;
 
-  /// \brief The number of template arguments in TemplateArgs.
+  /// The number of template arguments in TemplateArgs.
   unsigned NumTemplateArgs;
 
   void initializeFrom(SourceLocation TemplateKWLoc,
@@ -689,7 +695,7 @@
   assert(Idx < getNumArgs() && "Template argument out of range");
   return getArgs()[Idx];
 }
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_TEMPLATEBASE_H
diff --git a/linux-x64/clang/include/clang/AST/TemplateName.h b/linux-x64/clang/include/clang/AST/TemplateName.h
index fb33cf5..d88d58d 100644
--- a/linux-x64/clang/include/clang/AST/TemplateName.h
+++ b/linux-x64/clang/include/clang/AST/TemplateName.h
@@ -22,7 +22,7 @@
 #include <cassert>
 
 namespace clang {
-  
+
 class ASTContext;
 class DependentTemplateName;
 class DiagnosticBuilder;
@@ -38,8 +38,8 @@
 class TemplateArgument;
 class TemplateDecl;
 class TemplateTemplateParmDecl;
-  
-/// \brief Implementation class used to describe either a set of overloaded
+
+/// Implementation class used to describe either a set of overloaded
 /// template names or an already-substituted template template parameter pack.
 class UncommonTemplateNameStorage {
 protected:
@@ -50,10 +50,10 @@
   };
 
   struct BitsTag {
-    /// \brief A Kind.
+    /// A Kind.
     unsigned Kind : 2;
-    
-    /// \brief The number of stored templates or template arguments,
+
+    /// The number of stored templates or template arguments,
     /// depending on which subclass we have.
     unsigned Size : 30;
   };
@@ -62,21 +62,21 @@
     struct BitsTag Bits;
     void *PointerAlignment;
   };
-  
+
   UncommonTemplateNameStorage(Kind kind, unsigned size) {
     Bits.Kind = kind;
     Bits.Size = size;
   }
-  
+
 public:
   unsigned size() const { return Bits.Size; }
-  
+
   OverloadedTemplateStorage *getAsOverloadedStorage()  {
     return Bits.Kind == Overloaded
-             ? reinterpret_cast<OverloadedTemplateStorage *>(this) 
+             ? reinterpret_cast<OverloadedTemplateStorage *>(this)
              : nullptr;
   }
-  
+
   SubstTemplateTemplateParmStorage *getAsSubstTemplateTemplateParm() {
     return Bits.Kind == SubstTemplateTemplateParm
              ? reinterpret_cast<SubstTemplateTemplateParmStorage *>(this)
@@ -89,13 +89,13 @@
              : nullptr;
   }
 };
-  
-/// \brief A structure for storing the information associated with an
+
+/// A structure for storing the information associated with an
 /// overloaded template name.
 class OverloadedTemplateStorage : public UncommonTemplateNameStorage {
   friend class ASTContext;
 
-  OverloadedTemplateStorage(unsigned size) 
+  OverloadedTemplateStorage(unsigned size)
       : UncommonTemplateNameStorage(Overloaded, size) {}
 
   NamedDecl **getStorage() {
@@ -112,10 +112,10 @@
   iterator end() const { return getStorage() + size(); }
 };
 
-/// \brief A structure for storing an already-substituted template template
+/// A structure for storing an already-substituted template template
 /// parameter pack.
 ///
-/// This kind of template names occurs when the parameter pack has been 
+/// This kind of template names occurs when the parameter pack has been
 /// provided with a template template argument pack in a context where its
 /// enclosing pack expansion could not be fully expanded.
 class SubstTemplateTemplateParmPackStorage
@@ -123,32 +123,32 @@
 {
   TemplateTemplateParmDecl *Parameter;
   const TemplateArgument *Arguments;
-  
+
 public:
   SubstTemplateTemplateParmPackStorage(TemplateTemplateParmDecl *Parameter,
-                                       unsigned Size, 
+                                       unsigned Size,
                                        const TemplateArgument *Arguments)
       : UncommonTemplateNameStorage(SubstTemplateTemplateParmPack, Size),
         Parameter(Parameter), Arguments(Arguments) {}
-  
-  /// \brief Retrieve the template template parameter pack being substituted.
+
+  /// Retrieve the template template parameter pack being substituted.
   TemplateTemplateParmDecl *getParameterPack() const {
     return Parameter;
   }
-  
-  /// \brief Retrieve the template template argument pack with which this
+
+  /// Retrieve the template template argument pack with which this
   /// parameter was substituted.
   TemplateArgument getArgumentPack() const;
-  
+
   void Profile(llvm::FoldingSetNodeID &ID, ASTContext &Context);
-  
+
   static void Profile(llvm::FoldingSetNodeID &ID,
                       ASTContext &Context,
                       TemplateTemplateParmDecl *Parameter,
                       const TemplateArgument &ArgPack);
 };
 
-/// \brief Represents a C++ template name within the type system.
+/// Represents a C++ template name within the type system.
 ///
 /// A C++ template name refers to a template within the C++ type
 /// system. In most cases, a template name is simply a reference to a
@@ -185,27 +185,27 @@
   explicit TemplateName(void *Ptr);
 
 public:
-  // \brief Kind of name that is actually stored.
+  // Kind of name that is actually stored.
   enum NameKind {
-    /// \brief A single template declaration.
+    /// A single template declaration.
     Template,
 
-    /// \brief A set of overloaded template declarations.
+    /// A set of overloaded template declarations.
     OverloadedTemplate,
 
-    /// \brief A qualified template name, where the qualification is kept 
+    /// A qualified template name, where the qualification is kept
     /// to describe the source code as written.
     QualifiedTemplate,
 
-    /// \brief A dependent template name that has not been resolved to a 
+    /// A dependent template name that has not been resolved to a
     /// template (or set of templates).
     DependentTemplate,
 
-    /// \brief A template template parameter that has been substituted
+    /// A template template parameter that has been substituted
     /// for some other template name.
     SubstTemplateTemplateParm,
 
-    /// \brief A template template parameter pack that has been substituted for 
+    /// A template template parameter pack that has been substituted for
     /// a template template argument pack, but has not yet been expanded into
     /// individual arguments.
     SubstTemplateTemplateParmPack
@@ -219,13 +219,13 @@
   explicit TemplateName(QualifiedTemplateName *Qual);
   explicit TemplateName(DependentTemplateName *Dep);
 
-  /// \brief Determine whether this template name is NULL.
+  /// Determine whether this template name is NULL.
   bool isNull() const;
-  
-  // \brief Get the kind of name that is actually stored.
+
+  // Get the kind of name that is actually stored.
   NameKind getKind() const;
 
-  /// \brief Retrieve the underlying template declaration that
+  /// Retrieve the underlying template declaration that
   /// this template name refers to, if known.
   ///
   /// \returns The template declaration that this template name refers
@@ -234,7 +234,7 @@
   /// set of function templates, returns NULL.
   TemplateDecl *getAsTemplateDecl() const;
 
-  /// \brief Retrieve the underlying, overloaded function template
+  /// Retrieve the underlying, overloaded function template
   // declarations that this template name refers to, if known.
   ///
   /// \returns The set of overloaded function templates that this template
@@ -243,14 +243,14 @@
   /// refers to a single template, returns NULL.
   OverloadedTemplateStorage *getAsOverloadedTemplate() const;
 
-  /// \brief Retrieve the substituted template template parameter, if 
+  /// Retrieve the substituted template template parameter, if
   /// known.
   ///
   /// \returns The storage for the substituted template template parameter,
   /// if known. Otherwise, returns NULL.
   SubstTemplateTemplateParmStorage *getAsSubstTemplateTemplateParm() const;
 
-  /// \brief Retrieve the substituted template template parameter pack, if 
+  /// Retrieve the substituted template template parameter pack, if
   /// known.
   ///
   /// \returns The storage for the substituted template template parameter pack,
@@ -258,11 +258,11 @@
   SubstTemplateTemplateParmPackStorage *
   getAsSubstTemplateTemplateParmPack() const;
 
-  /// \brief Retrieve the underlying qualified template name
+  /// Retrieve the underlying qualified template name
   /// structure, if any.
   QualifiedTemplateName *getAsQualifiedTemplateName() const;
 
-  /// \brief Retrieve the underlying dependent template name
+  /// Retrieve the underlying dependent template name
   /// structure, if any.
   DependentTemplateName *getAsDependentTemplateName() const;
 
@@ -273,18 +273,18 @@
   /// the template, including any default template arguments.
   TemplateName getNameToSubstitute() const;
 
-  /// \brief Determines whether this is a dependent template name.
+  /// Determines whether this is a dependent template name.
   bool isDependent() const;
 
-  /// \brief Determines whether this is a template name that somehow
+  /// Determines whether this is a template name that somehow
   /// depends on a template parameter.
   bool isInstantiationDependent() const;
 
-  /// \brief Determines whether this template name contains an
+  /// Determines whether this template name contains an
   /// unexpanded parameter pack (for C++0x variadic templates).
   bool containsUnexpandedParameterPack() const;
 
-  /// \brief Print the template name.
+  /// Print the template name.
   ///
   /// \param OS the output stream to which the template name will be
   /// printed.
@@ -295,10 +295,10 @@
   void print(raw_ostream &OS, const PrintingPolicy &Policy,
              bool SuppressNNS = false) const;
 
-  /// \brief Debugging aid that dumps the template name.
+  /// Debugging aid that dumps the template name.
   void dump(raw_ostream &OS) const;
 
-  /// \brief Debugging aid that dumps the template name to standard
+  /// Debugging aid that dumps the template name to standard
   /// error.
   void dump() const;
 
@@ -306,10 +306,10 @@
     ID.AddPointer(Storage.getOpaqueValue());
   }
 
-  /// \brief Retrieve the template name as a void pointer.
+  /// Retrieve the template name as a void pointer.
   void *getAsVoidPointer() const { return Storage.getOpaqueValue(); }
 
-  /// \brief Build a template name from a void pointer.
+  /// Build a template name from a void pointer.
   static TemplateName getFromVoidPointer(void *Ptr) {
     return TemplateName(Ptr);
   }
@@ -320,7 +320,7 @@
 const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
                                     TemplateName N);
 
-/// \brief A structure for storing the information associated with a
+/// A structure for storing the information associated with a
 /// substituted template template parameter.
 class SubstTemplateTemplateParmStorage
   : public UncommonTemplateNameStorage, public llvm::FoldingSetNode {
@@ -339,7 +339,7 @@
   TemplateName getReplacement() const { return Replacement; }
 
   void Profile(llvm::FoldingSetNodeID &ID);
-  
+
   static void Profile(llvm::FoldingSetNodeID &ID,
                       TemplateTemplateParmDecl *parameter,
                       TemplateName replacement);
@@ -352,7 +352,7 @@
   return *this;
 }
 
-/// \brief Represents a template name that was expressed as a
+/// Represents a template name that was expressed as a
 /// qualified name.
 ///
 /// This kind of template name refers to a template name that was
@@ -366,7 +366,7 @@
 class QualifiedTemplateName : public llvm::FoldingSetNode {
   friend class ASTContext;
 
-  /// \brief The nested name specifier that qualifies the template name.
+  /// The nested name specifier that qualifies the template name.
   ///
   /// The bit is used to indicate whether the "template" keyword was
   /// present before the template name itself. Note that the
@@ -375,7 +375,7 @@
   /// this name with DependentTemplateName).
   llvm::PointerIntPair<NestedNameSpecifier *, 1> Qualifier;
 
-  /// \brief The template declaration or set of overloaded function templates
+  /// The template declaration or set of overloaded function templates
   /// that this qualified name refers to.
   TemplateDecl *Template;
 
@@ -384,18 +384,18 @@
       : Qualifier(NNS, TemplateKeyword? 1 : 0), Template(Template) {}
 
 public:
-  /// \brief Return the nested name specifier that qualifies this name.
+  /// Return the nested name specifier that qualifies this name.
   NestedNameSpecifier *getQualifier() const { return Qualifier.getPointer(); }
 
-  /// \brief Whether the template name was prefixed by the "template"
+  /// Whether the template name was prefixed by the "template"
   /// keyword.
   bool hasTemplateKeyword() const { return Qualifier.getInt(); }
 
-  /// \brief The template declaration that this qualified name refers
+  /// The template declaration that this qualified name refers
   /// to.
   TemplateDecl *getDecl() const { return Template; }
 
-  /// \brief The template declaration to which this qualified name
+  /// The template declaration to which this qualified name
   /// refers.
   TemplateDecl *getTemplateDecl() const { return Template; }
 
@@ -411,7 +411,7 @@
   }
 };
 
-/// \brief Represents a dependent template name that cannot be
+/// Represents a dependent template name that cannot be
 /// resolved prior to template instantiation.
 ///
 /// This kind of template name refers to a dependent template name,
@@ -422,7 +422,7 @@
 class DependentTemplateName : public llvm::FoldingSetNode {
   friend class ASTContext;
 
-  /// \brief The nested name specifier that qualifies the template
+  /// The nested name specifier that qualifies the template
   /// name.
   ///
   /// The bit stored in this qualifier describes whether the \c Name field
@@ -430,20 +430,20 @@
   /// overloaded operator kind (when set).
   llvm::PointerIntPair<NestedNameSpecifier *, 1, bool> Qualifier;
 
-  /// \brief The dependent template name.
+  /// The dependent template name.
   union {
-    /// \brief The identifier template name.
+    /// The identifier template name.
     ///
     /// Only valid when the bit on \c Qualifier is clear.
     const IdentifierInfo *Identifier;
-    
-    /// \brief The overloaded operator name.
+
+    /// The overloaded operator name.
     ///
     /// Only valid when the bit on \c Qualifier is set.
     OverloadedOperatorKind Operator;
   };
 
-  /// \brief The canonical template name to which this dependent
+  /// The canonical template name to which this dependent
   /// template name refers.
   ///
   /// The canonical template name for a dependent template name is
@@ -453,50 +453,50 @@
 
   DependentTemplateName(NestedNameSpecifier *Qualifier,
                         const IdentifierInfo *Identifier)
-      : Qualifier(Qualifier, false), Identifier(Identifier), 
+      : Qualifier(Qualifier, false), Identifier(Identifier),
         CanonicalTemplateName(this) {}
 
   DependentTemplateName(NestedNameSpecifier *Qualifier,
                         const IdentifierInfo *Identifier,
                         TemplateName Canon)
-      : Qualifier(Qualifier, false), Identifier(Identifier), 
+      : Qualifier(Qualifier, false), Identifier(Identifier),
         CanonicalTemplateName(Canon) {}
 
   DependentTemplateName(NestedNameSpecifier *Qualifier,
                         OverloadedOperatorKind Operator)
-      : Qualifier(Qualifier, true), Operator(Operator), 
+      : Qualifier(Qualifier, true), Operator(Operator),
         CanonicalTemplateName(this) {}
-  
+
   DependentTemplateName(NestedNameSpecifier *Qualifier,
                         OverloadedOperatorKind Operator,
                         TemplateName Canon)
-       : Qualifier(Qualifier, true), Operator(Operator), 
+       : Qualifier(Qualifier, true), Operator(Operator),
          CanonicalTemplateName(Canon) {}
-  
+
 public:
-  /// \brief Return the nested name specifier that qualifies this name.
+  /// Return the nested name specifier that qualifies this name.
   NestedNameSpecifier *getQualifier() const { return Qualifier.getPointer(); }
 
-  /// \brief Determine whether this template name refers to an identifier.
+  /// Determine whether this template name refers to an identifier.
   bool isIdentifier() const { return !Qualifier.getInt(); }
 
-  /// \brief Returns the identifier to which this template name refers.
-  const IdentifierInfo *getIdentifier() const { 
+  /// Returns the identifier to which this template name refers.
+  const IdentifierInfo *getIdentifier() const {
     assert(isIdentifier() && "Template name isn't an identifier?");
     return Identifier;
   }
-  
-  /// \brief Determine whether this template name refers to an overloaded
+
+  /// Determine whether this template name refers to an overloaded
   /// operator.
   bool isOverloadedOperator() const { return Qualifier.getInt(); }
-  
-  /// \brief Return the overloaded operator to which this template name refers.
-  OverloadedOperatorKind getOperator() const { 
+
+  /// Return the overloaded operator to which this template name refers.
+  OverloadedOperatorKind getOperator() const {
     assert(isOverloadedOperator() &&
            "Template name isn't an overloaded operator?");
-    return Operator; 
+    return Operator;
   }
-  
+
   void Profile(llvm::FoldingSetNodeID &ID) {
     if (isIdentifier())
       Profile(ID, getQualifier(), getIdentifier());
@@ -523,7 +523,7 @@
 
 namespace llvm {
 
-/// \brief The clang::TemplateName class is effectively a pointer.
+/// The clang::TemplateName class is effectively a pointer.
 template<>
 struct PointerLikeTypeTraits<clang::TemplateName> {
   static inline void *getAsVoidPointer(clang::TemplateName TN) {
diff --git a/linux-x64/clang/include/clang/AST/Type.h b/linux-x64/clang/include/clang/AST/Type.h
index b5bb133..cda84b1 100644
--- a/linux-x64/clang/include/clang/AST/Type.h
+++ b/linux-x64/clang/include/clang/AST/Type.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief C Language Family Type Representation
+/// C Language Family Type Representation
 ///
 /// This file defines the clang::Type interface and subclasses, used to
 /// represent types for languages in the C family.
@@ -30,6 +30,7 @@
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/Visibility.h"
 #include "llvm/ADT/APInt.h"
+#include "llvm/ADT/APSInt.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/FoldingSet.h"
 #include "llvm/ADT/None.h"
@@ -56,6 +57,7 @@
 
 class ExtQuals;
 class QualType;
+class TagDecl;
 class Type;
 
 enum {
@@ -98,48 +100,33 @@
 
 namespace clang {
 
-class ArrayType;
 class ASTContext;
-class AttributedType;
-class AutoType;
-class BuiltinType;
 template <typename> class CanQual;
-class ComplexType;
 class CXXRecordDecl;
 class DeclContext;
-class DeducedType;
 class EnumDecl;
 class Expr;
 class ExtQualsTypeCommonBase;
 class FunctionDecl;
-class FunctionNoProtoType;
-class FunctionProtoType;
 class IdentifierInfo;
-class InjectedClassNameType;
 class NamedDecl;
 class ObjCInterfaceDecl;
-class ObjCObjectPointerType;
-class ObjCObjectType;
 class ObjCProtocolDecl;
 class ObjCTypeParamDecl;
-class ParenType;
 struct PrintingPolicy;
 class RecordDecl;
-class RecordType;
 class Stmt;
 class TagDecl;
 class TemplateArgument;
 class TemplateArgumentListInfo;
 class TemplateArgumentLoc;
-class TemplateSpecializationType;
 class TemplateTypeParmDecl;
 class TypedefNameDecl;
-class TypedefType;
 class UnresolvedUsingTypenameDecl;
 
 using CanQualType = CanQual<Type>;
 
-  // Provide forward declarations for all of the *Type classes
+// Provide forward declarations for all of the *Type classes.
 #define TYPE(Class, Base) class Class##Type;
 #include "clang/AST/TypeNodes.def"
 
@@ -445,7 +432,7 @@
     }
   }
 
-  /// \brief Remove the qualifiers from the given set from this set.
+  /// Remove the qualifiers from the given set from this set.
   void removeQualifiers(Qualifiers Q) {
     // If the other set doesn't have any non-boolean qualifiers, just
     // bit-and the inverse in.
@@ -508,7 +495,7 @@
            (!other.hasUnaligned() || hasUnaligned());
   }
 
-  /// \brief Determines if these qualifiers compatibly include another set of
+  /// Determines if these qualifiers compatibly include another set of
   /// qualifiers from the narrow perspective of Objective-C ARC lifetime.
   ///
   /// One set of Objective-C lifetime qualifiers compatibly includes the other
@@ -528,7 +515,7 @@
     return hasConst();
   }
 
-  /// \brief Determine whether this set of qualifiers is a strict superset of
+  /// Determine whether this set of qualifiers is a strict superset of
   /// another set of qualifiers, not considering qualifier compatibility.
   bool isStrictSupersetOf(Qualifiers Other) const;
 
@@ -554,7 +541,7 @@
     return *this;
   }
 
-  /// \brief Compute the difference between two qualifier sets.
+  /// Compute the difference between two qualifier sets.
   friend Qualifiers operator-(Qualifiers L, Qualifiers R) {
     L -= R;
     return L;
@@ -719,69 +706,69 @@
     return Value.getPointer().isNull();
   }
 
-  /// \brief Determine whether this particular QualType instance has the
+  /// Determine whether this particular QualType instance has the
   /// "const" qualifier set, without looking through typedefs that may have
   /// added "const" at a different level.
   bool isLocalConstQualified() const {
     return (getLocalFastQualifiers() & Qualifiers::Const);
   }
 
-  /// \brief Determine whether this type is const-qualified.
+  /// Determine whether this type is const-qualified.
   bool isConstQualified() const;
 
-  /// \brief Determine whether this particular QualType instance has the
+  /// Determine whether this particular QualType instance has the
   /// "restrict" qualifier set, without looking through typedefs that may have
   /// added "restrict" at a different level.
   bool isLocalRestrictQualified() const {
     return (getLocalFastQualifiers() & Qualifiers::Restrict);
   }
 
-  /// \brief Determine whether this type is restrict-qualified.
+  /// Determine whether this type is restrict-qualified.
   bool isRestrictQualified() const;
 
-  /// \brief Determine whether this particular QualType instance has the
+  /// Determine whether this particular QualType instance has the
   /// "volatile" qualifier set, without looking through typedefs that may have
   /// added "volatile" at a different level.
   bool isLocalVolatileQualified() const {
     return (getLocalFastQualifiers() & Qualifiers::Volatile);
   }
 
-  /// \brief Determine whether this type is volatile-qualified.
+  /// Determine whether this type is volatile-qualified.
   bool isVolatileQualified() const;
 
-  /// \brief Determine whether this particular QualType instance has any
+  /// Determine whether this particular QualType instance has any
   /// qualifiers, without looking through any typedefs that might add
   /// qualifiers at a different level.
   bool hasLocalQualifiers() const {
     return getLocalFastQualifiers() || hasLocalNonFastQualifiers();
   }
 
-  /// \brief Determine whether this type has any qualifiers.
+  /// Determine whether this type has any qualifiers.
   bool hasQualifiers() const;
 
-  /// \brief Determine whether this particular QualType instance has any
+  /// Determine whether this particular QualType instance has any
   /// "non-fast" qualifiers, e.g., those that are stored in an ExtQualType
   /// instance.
   bool hasLocalNonFastQualifiers() const {
     return Value.getPointer().is<const ExtQuals*>();
   }
 
-  /// \brief Retrieve the set of qualifiers local to this particular QualType
+  /// Retrieve the set of qualifiers local to this particular QualType
   /// instance, not including any qualifiers acquired through typedefs or
   /// other sugar.
   Qualifiers getLocalQualifiers() const;
 
-  /// \brief Retrieve the set of qualifiers applied to this type.
+  /// Retrieve the set of qualifiers applied to this type.
   Qualifiers getQualifiers() const;
 
-  /// \brief Retrieve the set of CVR (const-volatile-restrict) qualifiers
+  /// Retrieve the set of CVR (const-volatile-restrict) qualifiers
   /// local to this particular QualType instance, not including any qualifiers
   /// acquired through typedefs or other sugar.
   unsigned getLocalCVRQualifiers() const {
     return getLocalFastQualifiers();
   }
 
-  /// \brief Retrieve the set of CVR (const-volatile-restrict) qualifiers
+  /// Retrieve the set of CVR (const-volatile-restrict) qualifiers
   /// applied to this type.
   unsigned getCVRQualifiers() const;
 
@@ -789,7 +776,7 @@
     return QualType::isConstant(*this, Ctx);
   }
 
-  /// \brief Determine whether this is a Plain Old Data (POD) type (C++ 3.9p10).
+  /// Determine whether this is a Plain Old Data (POD) type (C++ 3.9p10).
   bool isPODType(const ASTContext &Context) const;
 
   /// Return true if this is a POD type according to the rules of the C++98
@@ -798,7 +785,8 @@
 
   /// Return true if this is a POD type according to the more relaxed rules
   /// of the C++11 standard, regardless of the current compilation's language.
-  /// (C++0x [basic.types]p9)
+  /// (C++0x [basic.types]p9). Note that, unlike
+  /// CXXRecordDecl::isCXX11StandardLayout, this takes DRs into account.
   bool isCXX11PODType(const ASTContext &Context) const;
 
   /// Return true if this is a trivial type per (C++0x [basic.types]p9)
@@ -807,6 +795,13 @@
   /// Return true if this is a trivially copyable type (C++0x [basic.types]p9)
   bool isTriviallyCopyableType(const ASTContext &Context) const;
 
+
+  /// Returns true if it is a class and it might be dynamic.
+  bool mayBeDynamicClass() const;
+
+  /// Returns true if it is not a class or if the class might not be dynamic.
+  bool mayBeNotDynamicClass() const;
+
   // Don't promise in the API that anything besides 'const' can be
   // easily added.
 
@@ -878,12 +873,12 @@
 
   QualType getCanonicalType() const;
 
-  /// \brief Return this type with all of the instance-specific qualifiers
+  /// Return this type with all of the instance-specific qualifiers
   /// removed, but without removing any qualifiers that may have been applied
   /// through typedefs.
   QualType getLocalUnqualifiedType() const { return QualType(getTypePtr(), 0); }
 
-  /// \brief Retrieve the unqualified variant of the given type,
+  /// Retrieve the unqualified variant of the given type,
   /// removing as little sugar as possible.
   ///
   /// This routine looks through various kinds of sugar to find the
@@ -914,17 +909,17 @@
   /// ASTContext::getUnqualifiedArrayType.
   inline SplitQualType getSplitUnqualifiedType() const;
 
-  /// \brief Determine whether this type is more qualified than the other
+  /// Determine whether this type is more qualified than the other
   /// given type, requiring exact equality for non-CVR qualifiers.
   bool isMoreQualifiedThan(QualType Other) const;
 
-  /// \brief Determine whether this type is at least as qualified as the other
+  /// Determine whether this type is at least as qualified as the other
   /// given type, requiring exact equality for non-CVR qualifiers.
   bool isAtLeastAsQualifiedAs(QualType Other) const;
 
   QualType getNonReferenceType() const;
 
-  /// \brief Determine the type of a (typically non-lvalue) expression with the
+  /// Determine the type of a (typically non-lvalue) expression with the
   /// specified result type.
   ///
   /// This routine should be used for expressions for which the return type is
@@ -950,7 +945,7 @@
     return getSplitDesugaredType(*this);
   }
 
-  /// \brief Return the specified type with one level of "sugar" removed from
+  /// Return the specified type with one level of "sugar" removed from
   /// the type.
   ///
   /// This routine takes off the first typedef, typeof, etc. If the outer level
@@ -982,7 +977,7 @@
   static std::string getAsString(const Type *ty, Qualifiers qs,
                                  const PrintingPolicy &Policy);
 
-  std::string getAsString() const; 
+  std::string getAsString() const;
   std::string getAsString(const PrintingPolicy &Policy) const;
 
   void print(raw_ostream &OS, const PrintingPolicy &Policy,
@@ -1148,8 +1143,6 @@
   /// source object is placed in an uninitialized state.
   PrimitiveCopyKind isNonTrivialToPrimitiveDestructiveMove() const;
 
-  bool canPassInRegisters() const;
-
   enum DestructionKind {
     DK_none,
     DK_cxx_destructor,
@@ -1273,7 +1266,7 @@
 
 namespace clang {
 
-/// \brief Base class that is common to both the \c ExtQuals and \c Type
+/// Base class that is common to both the \c ExtQuals and \c Type
 /// classes, which allows \c QualType to access the common fields between the
 /// two.
 class ExtQualsTypeCommonBase {
@@ -1281,14 +1274,14 @@
   friend class QualType;
   friend class Type;
 
-  /// \brief The "base" type of an extended qualifiers type (\c ExtQuals) or
+  /// The "base" type of an extended qualifiers type (\c ExtQuals) or
   /// a self-referential pointer (for \c Type).
   ///
   /// This pointer allows an efficient mapping from a QualType to its
   /// underlying type pointer.
   const Type *const BaseType;
 
-  /// \brief The canonical type of this type.  A QualType.
+  /// The canonical type of this type.  A QualType.
   QualType CanonicalType;
 
   ExtQualsTypeCommonBase(const Type *baseType, QualType canon)
@@ -1369,25 +1362,25 @@
 /// This determines whether a member function's "this" object can be an
 /// lvalue, rvalue, or neither.
 enum RefQualifierKind {
-  /// \brief No ref-qualifier was provided.
+  /// No ref-qualifier was provided.
   RQ_None = 0,
 
-  /// \brief An lvalue ref-qualifier was provided (\c &).
+  /// An lvalue ref-qualifier was provided (\c &).
   RQ_LValue,
 
-  /// \brief An rvalue ref-qualifier was provided (\c &&).
+  /// An rvalue ref-qualifier was provided (\c &&).
   RQ_RValue
 };
 
 /// Which keyword(s) were used to create an AutoType.
 enum class AutoTypeKeyword {
-  /// \brief auto
+  /// auto
   Auto,
 
-  /// \brief decltype(auto)
+  /// decltype(auto)
   DecltypeAuto,
 
-  /// \brief __auto_type (GNU extension)
+  /// __auto_type (GNU extension)
   GNUAutoType
 };
 
@@ -1446,21 +1439,21 @@
     /// Whether this type is a variably-modified type (C99 6.7.5).
     unsigned VariablyModified : 1;
 
-    /// \brief Whether this type contains an unexpanded parameter pack
+    /// Whether this type contains an unexpanded parameter pack
     /// (for C++11 variadic templates).
     unsigned ContainsUnexpandedParameterPack : 1;
 
-    /// \brief True if the cache (i.e. the bitfields here starting with
+    /// True if the cache (i.e. the bitfields here starting with
     /// 'Cache') is valid.
     mutable unsigned CacheValid : 1;
 
-    /// \brief Linkage of this type.
+    /// Linkage of this type.
     mutable unsigned CachedLinkage : 3;
 
-    /// \brief Whether this type involves and local or unnamed types.
+    /// Whether this type involves and local or unnamed types.
     mutable unsigned CachedLocalOrUnnamed : 1;
 
-    /// \brief Whether this type comes from an AST file.
+    /// Whether this type comes from an AST file.
     mutable unsigned FromAST : 1;
 
     bool isCacheValid() const {
@@ -1525,7 +1518,7 @@
     /// cv-qualifier-seq, [...], are part of the function type.
     unsigned TypeQuals : 4;
 
-    /// \brief The ref-qualifier associated with a \c FunctionProtoType.
+    /// The ref-qualifier associated with a \c FunctionProtoType.
     ///
     /// This is a value of type \c RefQualifierKind.
     unsigned RefQualifier : 2;
@@ -1582,6 +1575,7 @@
 
   class VectorTypeBitfields {
     friend class VectorType;
+    friend class DependentVectorType;
 
     unsigned : NumTypeBits;
 
@@ -1630,7 +1624,7 @@
 private:
   template <class T> friend class TypePropertyCache;
 
-  /// \brief Set whether this type comes from an AST file.
+  /// Set whether this type comes from an AST file.
   void setFromAST(bool V = true) const {
     TypeBits.FromAST = V;
   }
@@ -1681,10 +1675,10 @@
 
   TypeClass getTypeClass() const { return static_cast<TypeClass>(TypeBits.TC); }
 
-  /// \brief Whether this type comes from an AST file.
+  /// Whether this type comes from an AST file.
   bool isFromAST() const { return TypeBits.FromAST; }
 
-  /// \brief Whether this type is or contains an unexpanded parameter
+  /// Whether this type is or contains an unexpanded parameter
   /// pack, used to support C++0x variadic templates.
   ///
   /// A type that contains a parameter pack shall be expanded by the
@@ -1722,7 +1716,7 @@
   /// determine its size (e.g. void, or a fwd declared struct). Clients of this
   /// routine will need to determine if the size is actually required.
   ///
-  /// \brief Def If non-null, and the type refers to some kind of declaration
+  /// Def If non-null, and the type refers to some kind of declaration
   /// that can be completed (such as a C struct, C++ class, or Objective-C
   /// class), will be set to the declaration.
   bool isIncompleteType(NamedDecl **Def = nullptr) const;
@@ -1733,7 +1727,7 @@
     return !isFunctionType();
   }
 
-  /// \brief Determine whether this type is an object type.
+  /// Determine whether this type is an object type.
   bool isObjectType() const {
     // C++ [basic.types]p8:
     //   An object type is a (possibly cv-qualified) type that is not a
@@ -1775,9 +1769,13 @@
   /// isComplexIntegerType() can be used to test for complex integers.
   bool isIntegerType() const;     // C99 6.2.5p17 (int, char, bool, enum)
   bool isEnumeralType() const;
+
+  /// Determine whether this type is a scoped enumeration type.
+  bool isScopedEnumeralType() const;
   bool isBooleanType() const;
   bool isCharType() const;
   bool isWideCharType() const;
+  bool isChar8Type() const;
   bool isChar16Type() const;
   bool isChar32Type() const;
   bool isAnyCharacterType() const;
@@ -1798,6 +1796,7 @@
   bool isFloatingType() const;     // C99 6.2.5p11 (real floating + complex)
   bool isHalfType() const;         // OpenCL 6.1.1.1, NEON (IEEE 754-2008 half)
   bool isFloat16Type() const;      // C11 extension ISO/IEC TS 18661
+  bool isFloat128Type() const;
   bool isRealType() const;         // C99 6.2.5p17 (real floating + integer)
   bool isArithmeticType() const;   // C99 6.2.5p18 (integer + floating)
   bool isVoidType() const;         // C99 6.2.5p19
@@ -1927,7 +1926,7 @@
   /// somehow depends on a template parameter (C++ [temp.dep.type]).
   bool isDependentType() const { return TypeBits.Dependent; }
 
-  /// \brief Determine whether this type is an instantiation-dependent type,
+  /// Determine whether this type is an instantiation-dependent type,
   /// meaning that the type involves a template parameter (even if the
   /// definition does not actually depend on the type substituted for that
   /// template parameter).
@@ -1935,24 +1934,24 @@
     return TypeBits.InstantiationDependent;
   }
 
-  /// \brief Determine whether this type is an undeduced type, meaning that
+  /// Determine whether this type is an undeduced type, meaning that
   /// it somehow involves a C++11 'auto' type or similar which has not yet been
   /// deduced.
   bool isUndeducedType() const;
 
-  /// \brief Whether this type is a variably-modified type (C99 6.7.5).
+  /// Whether this type is a variably-modified type (C99 6.7.5).
   bool isVariablyModifiedType() const { return TypeBits.VariablyModified; }
 
-  /// \brief Whether this type involves a variable-length array type
+  /// Whether this type involves a variable-length array type
   /// with a definite size.
   bool hasSizedVLAType() const;
 
-  /// \brief Whether this type is or contains a local or unnamed type.
+  /// Whether this type is or contains a local or unnamed type.
   bool hasUnnamedOrLocalType() const;
 
   bool isOverloadableType() const;
 
-  /// \brief Determine wither this type is a C++ elaborated-type-specifier.
+  /// Determine wither this type is a C++ elaborated-type-specifier.
   bool isElaboratedTypeSpecifier() const;
 
   bool canDecayToPointerType() const;
@@ -1966,19 +1965,19 @@
   /// purpose of GC'ability
   bool hasObjCPointerRepresentation() const;
 
-  /// \brief Determine whether this type has an integer representation
+  /// Determine whether this type has an integer representation
   /// of some sort, e.g., it is an integer type or a vector.
   bool hasIntegerRepresentation() const;
 
-  /// \brief Determine whether this type has an signed integer representation
+  /// Determine whether this type has an signed integer representation
   /// of some sort, e.g., it is an signed integer type or a vector.
   bool hasSignedIntegerRepresentation() const;
 
-  /// \brief Determine whether this type has an unsigned integer representation
+  /// Determine whether this type has an unsigned integer representation
   /// of some sort, e.g., it is an unsigned integer type or a vector.
   bool hasUnsignedIntegerRepresentation() const;
 
-  /// \brief Determine whether this type has a floating-point representation
+  /// Determine whether this type has a floating-point representation
   /// of some sort, e.g., it is a floating-point type or a vector thereof.
   bool hasFloatingRepresentation() const;
 
@@ -1998,18 +1997,21 @@
   const ObjCObjectPointerType *getAsObjCQualifiedClassType() const;
   const ObjCObjectType *getAsObjCQualifiedInterfaceType() const;
 
-  /// \brief Retrieves the CXXRecordDecl that this type refers to, either
+  /// Retrieves the CXXRecordDecl that this type refers to, either
   /// because the type is a RecordType or because it is the injected-class-name
   /// type of a class template or class template partial specialization.
   CXXRecordDecl *getAsCXXRecordDecl() const;
 
-  /// \brief Retrieves the TagDecl that this type refers to, either
+  /// Retrieves the RecordDecl this type refers to.
+  RecordDecl *getAsRecordDecl() const;
+
+  /// Retrieves the TagDecl that this type refers to, either
   /// because the type is a TagType or because it is the injected-class-name
   /// type of a class template or class template partial specialization.
   TagDecl *getAsTagDecl() const;
 
   /// If this is a pointer or reference to a RecordType, return the
-  /// CXXRecordDecl that that type refers to.
+  /// CXXRecordDecl that the type refers to.
   ///
   /// If this is not a pointer or reference, or the type being pointed to does
   /// not refer to a CXXRecordDecl, returns NULL.
@@ -2107,6 +2109,26 @@
   /// enumeration types whose underlying type is a unsigned integer type.
   bool isUnsignedIntegerOrEnumerationType() const;
 
+  /// Return true if this is a fixed point type according to
+  /// ISO/IEC JTC1 SC22 WG14 N1169.
+  bool isFixedPointType() const;
+
+  /// Return true if this is a saturated fixed point type according to
+  /// ISO/IEC JTC1 SC22 WG14 N1169. This type can be signed or unsigned.
+  bool isSaturatedFixedPointType() const;
+
+  /// Return true if this is a saturated fixed point type according to
+  /// ISO/IEC JTC1 SC22 WG14 N1169. This type can be signed or unsigned.
+  bool isUnsaturatedFixedPointType() const;
+
+  /// Return true if this is a fixed point type that is signed according
+  /// to ISO/IEC JTC1 SC22 WG14 N1169. This type can also be saturated.
+  bool isSignedFixedPointType() const;
+
+  /// Return true if this is a fixed point type that is unsigned according
+  /// to ISO/IEC JTC1 SC22 WG14 N1169. This type can also be saturated.
+  bool isUnsignedFixedPointType() const;
+
   /// Return true if this is not a variable sized type,
   /// according to the rules of C99 6.7.5p3.  It is not legal to call this on
   /// incomplete types.
@@ -2183,16 +2205,16 @@
   void dump(llvm::raw_ostream &OS) const;
 };
 
-/// \brief This will check for a TypedefType by removing any existing sugar
+/// This will check for a TypedefType by removing any existing sugar
 /// until it reaches a TypedefType or a non-sugared type.
 template <> const TypedefType *Type::getAs() const;
 
-/// \brief This will check for a TemplateSpecializationType by removing any
+/// This will check for a TemplateSpecializationType by removing any
 /// existing sugar until it reaches a TemplateSpecializationType or a
 /// non-sugared type.
 template <> const TemplateSpecializationType *Type::getAs() const;
 
-/// \brief This will check for an AttributedType by removing any existing sugar
+/// This will check for an AttributedType by removing any existing sugar
 /// until it reaches an AttributedType or a non-sugared type.
 template <> const AttributedType *Type::getAs() const;
 
@@ -2222,7 +2244,9 @@
 #include "clang/AST/BuiltinTypes.def"
   };
 
-public:
+private:
+  friend class ASTContext; // ASTContext creates these.
+
   BuiltinType(Kind K)
       : Type(Builtin, QualType(), /*Dependent=*/(K == Dependent),
              /*InstantiationDependent=*/(K == Dependent),
@@ -2231,6 +2255,7 @@
     BuiltinTypeBits.Kind = K;
   }
 
+public:
   Kind getKind() const { return static_cast<Kind>(BuiltinTypeBits.Kind); }
   StringRef getName(const PrintingPolicy &Policy) const;
 
@@ -2707,13 +2732,13 @@
   bool isSugared() const { return false; }
   QualType desugar() const { return QualType(this, 0); }
 
-  /// \brief Determine the number of bits required to address a member of
+  /// Determine the number of bits required to address a member of
   // an array with the given element type and number of elements.
   static unsigned getNumAddressingBits(const ASTContext &Context,
                                        QualType ElementType,
                                        const llvm::APInt &NumElements);
 
-  /// \brief Determine the maximum number of active bits that an array's size
+  /// Determine the maximum number of active bits that an array's size
   /// can require, which limits the maximum size of the array.
   static unsigned getMaxSizeBits(const ASTContext &Context);
 
@@ -2844,7 +2869,7 @@
 
   const ASTContext &Context;
 
-  /// \brief An assignment expression that will instantiate to the
+  /// An assignment expression that will instantiate to the
   /// size of the array.
   ///
   /// The expression itself might be null, in which case the array
@@ -2889,7 +2914,7 @@
 };
 
 /// Represents an extended address space qualifier where the input address space
-/// value is dependent. Non-dependent address spaces are not represented with a 
+/// value is dependent. Non-dependent address spaces are not represented with a
 /// special Type subclass; they are stored on an ExtQuals node as part of a QualType.
 ///
 /// For example:
@@ -2908,7 +2933,7 @@
   SourceLocation loc;
 
   DependentAddressSpaceType(const ASTContext &Context, QualType PointeeType,
-                            QualType can, Expr *AddrSpaceExpr, 
+                            QualType can, Expr *AddrSpaceExpr,
                             SourceLocation loc);
 
 public:
@@ -3049,6 +3074,51 @@
   }
 };
 
+/// Represents a vector type where either the type or size is dependent.
+////
+/// For example:
+/// \code
+/// template<typename T, int Size>
+/// class vector {
+///   typedef T __attribute__((vector_size(Size))) type;
+/// }
+/// \endcode
+class DependentVectorType : public Type, public llvm::FoldingSetNode {
+  friend class ASTContext;
+
+  const ASTContext &Context;
+  QualType ElementType;
+  Expr *SizeExpr;
+  SourceLocation Loc;
+
+  DependentVectorType(const ASTContext &Context, QualType ElementType,
+                           QualType CanonType, Expr *SizeExpr,
+                           SourceLocation Loc, VectorType::VectorKind vecKind);
+
+public:
+  Expr *getSizeExpr() const { return SizeExpr; }
+  QualType getElementType() const { return ElementType; }
+  SourceLocation getAttributeLoc() const { return Loc; }
+  VectorType::VectorKind getVectorKind() const {
+    return VectorType::VectorKind(VectorTypeBits.VecKind);
+  }
+
+  bool isSugared() const { return false; }
+  QualType desugar() const { return QualType(this, 0); }
+
+  static bool classof(const Type *T) {
+    return T->getTypeClass() == DependentVector;
+  }
+
+  void Profile(llvm::FoldingSetNodeID &ID) {
+    Profile(ID, Context, getElementType(), getSizeExpr(), getVectorKind());
+  }
+
+  static void Profile(llvm::FoldingSetNodeID &ID, const ASTContext &Context,
+                      QualType ElementType, const Expr *SizeExpr,
+                      VectorType::VectorKind VecKind);
+};
+
 /// ExtVectorType - Extended vector type. This type is created using
 /// __attribute__((ext_vector_type(n)), where "n" is the number of elements.
 /// Unlike vector_size, ext_vector_type is only allowed on typedef's. This
@@ -3182,7 +3252,7 @@
        Bits = ((unsigned)cc) | (noReturn ? NoReturnMask : 0) |
               (producesResult ? ProducesResultMask : 0) |
               (noCallerSavedRegs ? NoCallerSavedRegsMask : 0) |
-              (hasRegParm ? ((regParm + 1) << RegParmOffset) : 0) | 
+              (hasRegParm ? ((regParm + 1) << RegParmOffset) : 0) |
               (NoCfCheck ? NoCfCheckMask : 0);
     }
 
@@ -3293,7 +3363,7 @@
   bool isVolatile() const { return getTypeQuals() & Qualifiers::Volatile; }
   bool isRestrict() const { return getTypeQuals() & Qualifiers::Restrict; }
 
-  /// \brief Determine the type of an expression that calls a function of
+  /// Determine the type of an expression that calls a function of
   /// this type.
   QualType getCallResultType(const ASTContext &Context) const {
     return getReturnType().getNonLValueExprType(Context);
@@ -3446,7 +3516,7 @@
     /// Explicitly-specified list of exception types.
     ArrayRef<QualType> Exceptions;
 
-    /// Noexcept expression, if this is EST_ComputedNoexcept.
+    /// Noexcept expression, if this is a computed noexcept specification.
     Expr *NoexceptExpr = nullptr;
 
     /// The function whose exception specification this is, for
@@ -3488,7 +3558,7 @@
 private:
   friend class ASTContext; // ASTContext creates these.
 
-  /// \brief Determine whether there are any argument types that
+  /// Determine whether there are any argument types that
   /// contain an unexpanded parameter pack.
   static bool containsAnyUnexpandedParameterPack(const QualType *ArgArray,
                                                  unsigned numArgs) {
@@ -3549,20 +3619,35 @@
     return reinterpret_cast<const ExtParameterInfo *>(ptr);
   }
 
-  size_t getExceptionSpecSize() const {
-    switch (getExceptionSpecType()) {
-    case EST_None:             return 0;
-    case EST_DynamicNone:      return 0;
-    case EST_MSAny:            return 0;
-    case EST_BasicNoexcept:    return 0;
-    case EST_Unparsed:         return 0;
-    case EST_Dynamic:          return getNumExceptions() * sizeof(QualType);
-    case EST_ComputedNoexcept: return sizeof(Expr*);
-    case EST_Uninstantiated:   return 2 * sizeof(FunctionDecl*);
-    case EST_Unevaluated:      return sizeof(FunctionDecl*);
+  static size_t getExceptionSpecSize(ExceptionSpecificationType EST,
+                                     unsigned NumExceptions) {
+    switch (EST) {
+    case EST_None:
+    case EST_DynamicNone:
+    case EST_MSAny:
+    case EST_BasicNoexcept:
+    case EST_Unparsed:
+      return 0;
+
+    case EST_Dynamic:
+      return NumExceptions * sizeof(QualType);
+
+    case EST_DependentNoexcept:
+    case EST_NoexceptFalse:
+    case EST_NoexceptTrue:
+      return sizeof(Expr *);
+
+    case EST_Uninstantiated:
+      return 2 * sizeof(FunctionDecl *);
+
+    case EST_Unevaluated:
+      return sizeof(FunctionDecl *);
     }
     llvm_unreachable("bad exception specification kind");
   }
+  size_t getExceptionSpecSize() const {
+    return getExceptionSpecSize(getExceptionSpecType(), getNumExceptions());
+  }
 
 public:
   unsigned getNumParams() const { return NumParams; }
@@ -3586,7 +3671,7 @@
     EPI.RefQualifier = getRefQualifier();
     if (EPI.ExceptionSpec.Type == EST_Dynamic) {
       EPI.ExceptionSpec.Exceptions = exceptions();
-    } else if (EPI.ExceptionSpec.Type == EST_ComputedNoexcept) {
+    } else if (isComputedNoexcept(EPI.ExceptionSpec.Type)) {
       EPI.ExceptionSpec.NoexceptExpr = getNoexceptExpr();
     } else if (EPI.ExceptionSpec.Type == EST_Uninstantiated) {
       EPI.ExceptionSpec.SourceDecl = getExceptionSpecDecl();
@@ -3626,39 +3711,19 @@
   /// spec.
   bool hasInstantiationDependentExceptionSpec() const;
 
-  /// Result type of getNoexceptSpec().
-  enum NoexceptResult {
-    /// There is no noexcept specifier.
-    NR_NoNoexcept,
-
-    /// The noexcept specifier has a bad expression.
-    NR_BadNoexcept,
-
-    /// The noexcept specifier is dependent.
-    NR_Dependent,
-
-    /// The noexcept specifier evaluates to false.
-    NR_Throw,
-
-    /// The noexcept specifier evaluates to true.
-    NR_Nothrow
-  };
-
-  /// Get the meaning of the noexcept spec on this function, if any.
-  NoexceptResult getNoexceptSpec(const ASTContext &Ctx) const;
   unsigned getNumExceptions() const { return NumExceptions; }
   QualType getExceptionType(unsigned i) const {
     assert(i < NumExceptions && "Invalid exception number!");
     return exception_begin()[i];
   }
   Expr *getNoexceptExpr() const {
-    if (getExceptionSpecType() != EST_ComputedNoexcept)
+    if (!isComputedNoexcept(getExceptionSpecType()))
       return nullptr;
     // NoexceptExpr sits where the arguments end.
     return *reinterpret_cast<Expr *const *>(param_type_end());
   }
 
-  /// \brief If this function type has an exception specification which hasn't
+  /// If this function type has an exception specification which hasn't
   /// been determined yet (either because it has not been evaluated or because
   /// it has not been instantiated), this is the function whose exception
   /// specification is represented by this type.
@@ -3669,7 +3734,7 @@
     return reinterpret_cast<FunctionDecl *const *>(param_type_end())[0];
   }
 
-  /// \brief If this function type has an uninstantiated exception
+  /// If this function type has an uninstantiated exception
   /// specification, this is the function whose exception specification
   /// should be instantiated to find the exception specification for
   /// this type.
@@ -3681,14 +3746,14 @@
 
   /// Determine whether this function type has a non-throwing exception
   /// specification.
-  CanThrowResult canThrow(const ASTContext &Ctx) const;
+  CanThrowResult canThrow() const;
 
   /// Determine whether this function type has a non-throwing exception
   /// specification. If this depends on template arguments, returns
   /// \c ResultIfDependent.
-  bool isNothrow(const ASTContext &Ctx, bool ResultIfDependent = false) const {
-    return ResultIfDependent ? canThrow(Ctx) != CT_Can
-                             : canThrow(Ctx) == CT_Cannot;
+  bool isNothrow(bool ResultIfDependent = false) const {
+    return ResultIfDependent ? canThrow() != CT_Can
+                             : canThrow() == CT_Cannot;
   }
 
   bool isVariadic() const { return Variadic; }
@@ -3798,7 +3863,7 @@
                       bool Canonical);
 };
 
-/// \brief Represents the dependent type named by a dependently-scoped
+/// Represents the dependent type named by a dependently-scoped
 /// typename using declaration, e.g.
 ///   using typename Base<T>::foo;
 ///
@@ -3869,16 +3934,16 @@
 public:
   Expr *getUnderlyingExpr() const { return TOExpr; }
 
-  /// \brief Remove a single level of sugar.
+  /// Remove a single level of sugar.
   QualType desugar() const;
 
-  /// \brief Returns whether this type directly provides sugar.
+  /// Returns whether this type directly provides sugar.
   bool isSugared() const;
 
   static bool classof(const Type *T) { return T->getTypeClass() == TypeOfExpr; }
 };
 
-/// \brief Internal representation of canonical, dependent
+/// Internal representation of canonical, dependent
 /// `typeof(expr)` types.
 ///
 /// This class is used internally by the ASTContext to manage
@@ -3918,10 +3983,10 @@
 public:
   QualType getUnderlyingType() const { return TOType; }
 
-  /// \brief Remove a single level of sugar.
+  /// Remove a single level of sugar.
   QualType desugar() const { return getUnderlyingType(); }
 
-  /// \brief Returns whether this type directly provides sugar.
+  /// Returns whether this type directly provides sugar.
   bool isSugared() const { return true; }
 
   static bool classof(const Type *T) { return T->getTypeClass() == TypeOf; }
@@ -3941,16 +4006,16 @@
   Expr *getUnderlyingExpr() const { return E; }
   QualType getUnderlyingType() const { return UnderlyingType; }
 
-  /// \brief Remove a single level of sugar.
+  /// Remove a single level of sugar.
   QualType desugar() const;
 
-  /// \brief Returns whether this type directly provides sugar.
+  /// Returns whether this type directly provides sugar.
   bool isSugared() const;
 
   static bool classof(const Type *T) { return T->getTypeClass() == Decltype; }
 };
 
-/// \brief Internal representation of canonical, dependent
+/// Internal representation of canonical, dependent
 /// decltype(expr) types.
 ///
 /// This class is used internally by the ASTContext to manage
@@ -4006,7 +4071,7 @@
   }
 };
 
-/// \brief Internal representation of canonical, dependent
+/// Internal representation of canonical, dependent
 /// __underlying_type(type) types.
 ///
 /// This class is used internally by the ASTContext to manage
@@ -4157,6 +4222,7 @@
     attr_null_unspecified,
     attr_objc_kindof,
     attr_objc_inert_unsafe_unretained,
+    attr_lifetimebound,
   };
 
 private:
@@ -4326,7 +4392,7 @@
   }
 };
 
-/// \brief Represents the result of substituting a type for a template
+/// Represents the result of substituting a type for a template
 /// type parameter.
 ///
 /// Within an instantiated template, all template type parameters have
@@ -4377,7 +4443,7 @@
   }
 };
 
-/// \brief Represents the result of substituting a set of types for a template
+/// Represents the result of substituting a set of types for a template
 /// type parameter pack.
 ///
 /// When a pack expansion in the source code contains multiple parameter packs
@@ -4392,14 +4458,14 @@
 class SubstTemplateTypeParmPackType : public Type, public llvm::FoldingSetNode {
   friend class ASTContext;
 
-  /// \brief The original type parameter.
+  /// The original type parameter.
   const TemplateTypeParmType *Replaced;
 
-  /// \brief A pointer to the set of template arguments that this
+  /// A pointer to the set of template arguments that this
   /// parameter pack is instantiated with.
   const TemplateArgument *Arguments;
 
-  /// \brief The number of template arguments in \c Arguments.
+  /// The number of template arguments in \c Arguments.
   unsigned NumArguments;
 
   SubstTemplateTypeParmPackType(const TemplateTypeParmType *Param,
@@ -4429,7 +4495,7 @@
   }
 };
 
-/// \brief Common base class for placeholders for types that get replaced by
+/// Common base class for placeholders for types that get replaced by
 /// placeholder type deduction: C++11 auto, C++14 decltype(auto), C++17 deduced
 /// class template types, and (eventually) constrained type names from the C++
 /// Concepts TS.
@@ -4462,7 +4528,7 @@
   bool isSugared() const { return !isCanonicalUnqualified(); }
   QualType desugar() const { return getCanonicalTypeInternal(); }
 
-  /// \brief Get the type deduced for this placeholder type, or null if it's
+  /// Get the type deduced for this placeholder type, or null if it's
   /// either not been deduced or was deduced to a dependent type.
   QualType getDeducedType() const {
     return !isCanonicalUnqualified() ? getCanonicalTypeInternal() : QualType();
@@ -4477,7 +4543,7 @@
   }
 };
 
-/// \brief Represents a C++11 auto or C++14 decltype(auto) type.
+/// Represents a C++11 auto or C++14 decltype(auto) type.
 class AutoType : public DeducedType, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
@@ -4513,7 +4579,7 @@
   }
 };
 
-/// \brief Represents a C++17 deduced template specialization type.
+/// Represents a C++17 deduced template specialization type.
 class DeducedTemplateSpecializationType : public DeducedType,
                                           public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -4550,7 +4616,7 @@
   }
 };
 
-/// \brief Represents a type template specialization; the template
+/// Represents a type template specialization; the template
 /// must be a class template, a type alias template, or a template
 /// template parameter.  A template which cannot be resolved to one of
 /// these, e.g. because it is written with a dependent scope
@@ -4570,7 +4636,7 @@
 /// TemplateArguments, followed by a QualType representing the
 /// non-canonical aliased type when the template is a type alias
 /// template.
-class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) TemplateSpecializationType
+class alignas(8) TemplateSpecializationType
     : public Type,
       public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -4610,7 +4676,7 @@
     return isa<InjectedClassNameType>(getCanonicalTypeInternal());
   }
 
-  /// \brief Determine if this template specialization type is for a type alias
+  /// Determine if this template specialization type is for a type alias
   /// template that has been substituted.
   ///
   /// Nearly every template specialization type whose template is an alias
@@ -4679,7 +4745,7 @@
   }
 };
 
-/// \brief Print a template argument list, including the '<' and '>'
+/// Print a template argument list, including the '<' and '>'
 /// enclosing the template arguments.
 void printTemplateArgumentList(raw_ostream &OS,
                                ArrayRef<TemplateArgument> Args,
@@ -4762,47 +4828,47 @@
   }
 };
 
-/// \brief The kind of a tag type.
+/// The kind of a tag type.
 enum TagTypeKind {
-  /// \brief The "struct" keyword.
+  /// The "struct" keyword.
   TTK_Struct,
 
-  /// \brief The "__interface" keyword.
+  /// The "__interface" keyword.
   TTK_Interface,
 
-  /// \brief The "union" keyword.
+  /// The "union" keyword.
   TTK_Union,
 
-  /// \brief The "class" keyword.
+  /// The "class" keyword.
   TTK_Class,
 
-  /// \brief The "enum" keyword.
+  /// The "enum" keyword.
   TTK_Enum
 };
 
-/// \brief The elaboration keyword that precedes a qualified type name or
+/// The elaboration keyword that precedes a qualified type name or
 /// introduces an elaborated-type-specifier.
 enum ElaboratedTypeKeyword {
-  /// \brief The "struct" keyword introduces the elaborated-type-specifier.
+  /// The "struct" keyword introduces the elaborated-type-specifier.
   ETK_Struct,
 
-  /// \brief The "__interface" keyword introduces the elaborated-type-specifier.
+  /// The "__interface" keyword introduces the elaborated-type-specifier.
   ETK_Interface,
 
-  /// \brief The "union" keyword introduces the elaborated-type-specifier.
+  /// The "union" keyword introduces the elaborated-type-specifier.
   ETK_Union,
 
-  /// \brief The "class" keyword introduces the elaborated-type-specifier.
+  /// The "class" keyword introduces the elaborated-type-specifier.
   ETK_Class,
 
-  /// \brief The "enum" keyword introduces the elaborated-type-specifier.
+  /// The "enum" keyword introduces the elaborated-type-specifier.
   ETK_Enum,
 
-  /// \brief The "typename" keyword precedes the qualified type name, e.g.,
+  /// The "typename" keyword precedes the qualified type name, e.g.,
   /// \c typename T::type.
   ETK_Typename,
 
-  /// \brief No keyword precedes the qualified type name.
+  /// No keyword precedes the qualified type name.
   ETK_None
 };
 
@@ -4853,7 +4919,7 @@
   static CannotCastToThisType classof(const Type *);
 };
 
-/// \brief Represents a type that was referred to using an elaborated type
+/// Represents a type that was referred to using an elaborated type
 /// keyword, e.g., struct S, or via a qualified name, e.g., N::M::type,
 /// or both.
 ///
@@ -4870,14 +4936,18 @@
   /// The type that this qualified name refers to.
   QualType NamedType;
 
+  /// The (re)declaration of this tag type owned by this occurrence, or nullptr
+  /// if none.
+  TagDecl *OwnedTagDecl;
+
   ElaboratedType(ElaboratedTypeKeyword Keyword, NestedNameSpecifier *NNS,
-                 QualType NamedType, QualType CanonType)
+                 QualType NamedType, QualType CanonType, TagDecl *OwnedTagDecl)
     : TypeWithKeyword(Keyword, Elaborated, CanonType,
                       NamedType->isDependentType(),
                       NamedType->isInstantiationDependentType(),
                       NamedType->isVariablyModifiedType(),
                       NamedType->containsUnexpandedParameterPack()),
-      NNS(NNS), NamedType(NamedType) {
+      NNS(NNS), NamedType(NamedType), OwnedTagDecl(OwnedTagDecl) {
     assert(!(Keyword == ETK_None && NNS == nullptr) &&
            "ElaboratedType cannot have elaborated type keyword "
            "and name qualifier both null.");
@@ -4898,15 +4968,21 @@
   /// Returns whether this type directly provides sugar.
   bool isSugared() const { return true; }
 
+  /// Return the (re)declaration of this type owned by this occurrence of this
+  /// type, or nullptr if none.
+  TagDecl *getOwnedTagDecl() const { return OwnedTagDecl; }
+
   void Profile(llvm::FoldingSetNodeID &ID) {
-    Profile(ID, getKeyword(), NNS, NamedType);
+    Profile(ID, getKeyword(), NNS, NamedType, OwnedTagDecl);
   }
 
   static void Profile(llvm::FoldingSetNodeID &ID, ElaboratedTypeKeyword Keyword,
-                      NestedNameSpecifier *NNS, QualType NamedType) {
+                      NestedNameSpecifier *NNS, QualType NamedType,
+                      TagDecl *OwnedTagDecl) {
     ID.AddInteger(Keyword);
     ID.AddPointer(NNS);
     NamedType.Profile(ID);
+    ID.AddPointer(OwnedTagDecl);
   }
 
   static bool classof(const Type *T) {
@@ -4914,7 +4990,7 @@
   }
 };
 
-/// \brief Represents a qualified type name for which the type name is
+/// Represents a qualified type name for which the type name is
 /// dependent.
 ///
 /// DependentNameType represents a class of dependent types that involve a
@@ -4929,10 +5005,10 @@
 class DependentNameType : public TypeWithKeyword, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
-  /// \brief The nested name specifier containing the qualifier.
+  /// The nested name specifier containing the qualifier.
   NestedNameSpecifier *NNS;
 
-  /// \brief The type that this typename specifier refers to.
+  /// The type that this typename specifier refers to.
   const IdentifierInfo *Name;
 
   DependentNameType(ElaboratedTypeKeyword Keyword, NestedNameSpecifier *NNS,
@@ -4978,7 +5054,7 @@
 /// Represents a template specialization type whose template cannot be
 /// resolved, e.g.
 ///   A<T>::template B<T>
-class LLVM_ALIGNAS(/*alignof(uint64_t)*/ 8) DependentTemplateSpecializationType
+class alignas(8) DependentTemplateSpecializationType
     : public TypeWithKeyword,
       public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
@@ -4989,7 +5065,7 @@
   /// The identifier of the template.
   const IdentifierInfo *Name;
 
-  /// \brief The number of template arguments named in this class template
+  /// The number of template arguments named in this class template
   /// specialization.
   unsigned NumArgs;
 
@@ -5011,12 +5087,12 @@
   NestedNameSpecifier *getQualifier() const { return NNS; }
   const IdentifierInfo *getIdentifier() const { return Name; }
 
-  /// \brief Retrieve the template arguments.
+  /// Retrieve the template arguments.
   const TemplateArgument *getArgs() const {
     return getArgBuffer();
   }
 
-  /// \brief Retrieve the number of template arguments.
+  /// Retrieve the number of template arguments.
   unsigned getNumArgs() const { return NumArgs; }
 
   const TemplateArgument &getArg(unsigned Idx) const; // in TemplateBase.h
@@ -5049,7 +5125,7 @@
   }
 };
 
-/// \brief Represents a pack expansion of types.
+/// Represents a pack expansion of types.
 ///
 /// Pack expansions are part of C++11 variadic templates. A pack
 /// expansion contains a pattern, which itself contains one or more
@@ -5074,10 +5150,10 @@
 class PackExpansionType : public Type, public llvm::FoldingSetNode {
   friend class ASTContext; // ASTContext creates these
 
-  /// \brief The pattern of the pack expansion.
+  /// The pattern of the pack expansion.
   QualType Pattern;
 
-  /// \brief The number of expansions that this pack expansion will
+  /// The number of expansions that this pack expansion will
   /// generate when substituted (+1), or indicates that
   ///
   /// This field will only have a non-zero value when some of the parameter
@@ -5095,12 +5171,12 @@
         NumExpansions(NumExpansions ? *NumExpansions + 1 : 0) {}
 
 public:
-  /// \brief Retrieve the pattern of this pack expansion, which is the
+  /// Retrieve the pattern of this pack expansion, which is the
   /// type that will be repeatedly instantiated when instantiating the
   /// pack expansion itself.
   QualType getPattern() const { return Pattern; }
 
-  /// \brief Retrieve the number of expansions that this pack expansion will
+  /// Retrieve the number of expansions that this pack expansion will
   /// generate, if known.
   Optional<unsigned> getNumExpansions() const {
     if (NumExpansions)
@@ -5249,7 +5325,7 @@
 /// with base C and no protocols.
 ///
 /// 'C<P>' is an unspecialized ObjCObjectType with base C and protocol list [P].
-/// 'C<C*>' is a specialized ObjCObjectType with type arguments 'C*' and no 
+/// 'C<C*>' is a specialized ObjCObjectType with type arguments 'C*' and no
 /// protocol list.
 /// 'C<C*><P>' is a specialized ObjCObjectType with base C, type arguments 'C*',
 /// and protocol list [P].
@@ -5881,7 +5957,7 @@
 
   return QualType(getSplitUnqualifiedTypeImpl(*this).Ty, 0);
 }
-  
+
 inline SplitQualType QualType::getSplitUnqualifiedType() const {
   if (!getTypePtr()->getCanonicalTypeInternal().hasLocalQualifiers())
     return split();
@@ -6265,6 +6341,12 @@
   return false;
 }
 
+inline bool Type::isFloat128Type() const {
+  if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType))
+    return BT->getKind() == BuiltinType::Float128;
+  return false;
+}
+
 inline bool Type::isNullPtrType() const {
   if (const auto *BT = getAs<BuiltinType>())
     return BT->getKind() == BuiltinType::NullPtr;
@@ -6287,6 +6369,44 @@
   return false;
 }
 
+inline bool Type::isFixedPointType() const {
+  if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType)) {
+    return BT->getKind() >= BuiltinType::ShortAccum &&
+           BT->getKind() <= BuiltinType::SatULongFract;
+  }
+  return false;
+}
+
+inline bool Type::isSaturatedFixedPointType() const {
+  if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType)) {
+    return BT->getKind() >= BuiltinType::SatShortAccum &&
+           BT->getKind() <= BuiltinType::SatULongFract;
+  }
+  return false;
+}
+
+inline bool Type::isUnsaturatedFixedPointType() const {
+  return isFixedPointType() && !isSaturatedFixedPointType();
+}
+
+inline bool Type::isSignedFixedPointType() const {
+  if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType)) {
+    return ((BT->getKind() >= BuiltinType::ShortAccum &&
+             BT->getKind() <= BuiltinType::LongAccum) ||
+            (BT->getKind() >= BuiltinType::ShortFract &&
+             BT->getKind() <= BuiltinType::LongFract) ||
+            (BT->getKind() >= BuiltinType::SatShortAccum &&
+             BT->getKind() <= BuiltinType::SatLongAccum) ||
+            (BT->getKind() >= BuiltinType::SatShortFract &&
+             BT->getKind() <= BuiltinType::SatLongFract));
+  }
+  return false;
+}
+
+inline bool Type::isUnsignedFixedPointType() const {
+  return isFixedPointType() && !isSignedFixedPointType();
+}
+
 inline bool Type::isScalarType() const {
   if (const auto *BT = dyn_cast<BuiltinType>(CanonicalType))
     return BT->getKind() > BuiltinType::Void &&
@@ -6312,7 +6432,7 @@
   if (const auto *ET = dyn_cast<EnumType>(CanonicalType))
     return IsEnumDeclComplete(ET->getDecl());
 
-  return false;  
+  return false;
 }
 
 inline bool Type::isBooleanType() const {
@@ -6326,13 +6446,13 @@
   return DT && !DT->isDeduced();
 }
 
-/// \brief Determines whether this is a type for which one can define
+/// Determines whether this is a type for which one can define
 /// an overloaded operator.
 inline bool Type::isOverloadableType() const {
   return isDependentType() || isRecordType() || isEnumeralType();
 }
 
-/// \brief Determines whether this type can decay to a pointer type.
+/// Determines whether this type can decay to a pointer type.
 inline bool Type::canDecayToPointerType() const {
   return isFunctionType() || isArrayType();
 }
@@ -6482,6 +6602,11 @@
   return cast<PointerType>(Decayed)->getPointeeType();
 }
 
+// Get the decimal string representation of a fixed point type, represented
+// as a scaled integer.
+void FixedPointValueToString(SmallVectorImpl<char> &Str, llvm::APSInt Val,
+                             unsigned Scale);
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_TYPE_H
diff --git a/linux-x64/clang/include/clang/AST/TypeLoc.h b/linux-x64/clang/include/clang/AST/TypeLoc.h
index b805160..82e83ea 100644
--- a/linux-x64/clang/include/clang/AST/TypeLoc.h
+++ b/linux-x64/clang/include/clang/AST/TypeLoc.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::TypeLoc interface and its subclasses.
+/// Defines the clang::TypeLoc interface and its subclasses.
 //
 //===----------------------------------------------------------------------===//
 
@@ -49,7 +49,7 @@
   class Class##TypeLoc;
 #include "clang/AST/TypeLocNodes.def"
 
-/// \brief Base wrapper for a particular "section" of type source info.
+/// Base wrapper for a particular "section" of type source info.
 ///
 /// A client should use the TypeLoc subclasses through castAs()/getAs()
 /// in order to get at the actual information.
@@ -67,7 +67,7 @@
   TypeLoc(const Type *ty, void *opaqueData)
       : Ty(ty), Data(opaqueData) {}
 
-  /// \brief Convert to the specified TypeLoc type, asserting that this TypeLoc
+  /// Convert to the specified TypeLoc type, asserting that this TypeLoc
   /// is of the desired type.
   ///
   /// \pre T::isKind(*this)
@@ -80,21 +80,21 @@
     return t;
   }
 
-  /// \brief Convert to the specified TypeLoc type, returning a null TypeLoc if
+  /// Convert to the specified TypeLoc type, returning a null TypeLoc if
   /// this TypeLoc is not of the desired type.
   template<typename T>
   T getAs() const {
     if (!T::isKind(*this))
-      return T();
+      return {};
     T t;
     TypeLoc& tl = t;
     tl = *this;
     return t;
   }
 
-  /// \brief Convert to the specified TypeLoc type, returning a null TypeLoc if
-  /// this TypeLock is not of the desired type. It will consider type
-  /// adjustments from a type that wad written as a T to another type that is
+  /// Convert to the specified TypeLoc type, returning a null TypeLoc if
+  /// this TypeLoc is not of the desired type. It will consider type
+  /// adjustments from a type that was written as a T to another type that is
   /// still canonically a T (ignores parens, attributes, elaborated types, etc).
   template <typename T>
   T getAsAdjusted() const;
@@ -118,14 +118,14 @@
   bool isNull() const { return !Ty; }
   explicit operator bool() const { return Ty; }
 
-  /// \brief Returns the size of type source info data block for the given type.
+  /// Returns the size of type source info data block for the given type.
   static unsigned getFullDataSizeForType(QualType Ty);
 
-  /// \brief Returns the alignment of type source info data block for
+  /// Returns the alignment of type source info data block for
   /// the given type.
   static unsigned getLocalAlignmentForType(QualType Ty);
 
-  /// \brief Get the type for which this source info wrapper provides
+  /// Get the type for which this source info wrapper provides
   /// information.
   QualType getType() const {
     return QualType::getFromOpaquePtr(Ty);
@@ -135,47 +135,53 @@
     return QualType::getFromOpaquePtr(Ty).getTypePtr();
   }
 
-  /// \brief Get the pointer where source information is stored.
+  /// Get the pointer where source information is stored.
   void *getOpaqueData() const {
     return Data;
   }
 
-  /// \brief Get the begin source location.
+  /// Get the begin source location.
   SourceLocation getBeginLoc() const;
 
-  /// \brief Get the end source location.
+  /// Get the end source location.
   SourceLocation getEndLoc() const;
 
-  /// \brief Get the full source range.
+  /// Get the full source range.
   SourceRange getSourceRange() const LLVM_READONLY {
     return SourceRange(getBeginLoc(), getEndLoc());
   }
 
-  SourceLocation getLocStart() const LLVM_READONLY { return getBeginLoc(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return getEndLoc(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
 
-  /// \brief Get the local source range.
+  /// Get the local source range.
   SourceRange getLocalSourceRange() const {
     return getLocalSourceRangeImpl(*this);
   }
 
-  /// \brief Returns the size of the type source info data block.
+  /// Returns the size of the type source info data block.
   unsigned getFullDataSize() const {
     return getFullDataSizeForType(getType());
   }
 
-  /// \brief Get the next TypeLoc pointed by this TypeLoc, e.g for "int*" the
+  /// Get the next TypeLoc pointed by this TypeLoc, e.g for "int*" the
   /// TypeLoc is a PointerLoc and next TypeLoc is for "int".
   TypeLoc getNextTypeLoc() const {
     return getNextTypeLocImpl(*this);
   }
 
-  /// \brief Skips past any qualifiers, if this is qualified.
+  /// Skips past any qualifiers, if this is qualified.
   UnqualTypeLoc getUnqualifiedLoc() const; // implemented in this header
 
   TypeLoc IgnoreParens() const;
 
-  /// \brief Find a type with the location of an explicit type qualifier.
+  /// Find a type with the location of an explicit type qualifier.
   ///
   /// The result, if non-null, will be one of:
   ///   QualifiedTypeLoc
@@ -183,7 +189,7 @@
   ///   AttributedTypeLoc, for those type attributes that behave as qualifiers
   TypeLoc findExplicitQualifierLoc() const;
 
-  /// \brief Initializes this to state that every location in this
+  /// Initializes this to state that every location in this
   /// type is the given location.
   ///
   /// This method exists to provide a simple transition for code that
@@ -192,14 +198,14 @@
     initializeImpl(Context, *this, Loc);
   }
 
-  /// \brief Initializes this by copying its information from another
+  /// Initializes this by copying its information from another
   /// TypeLoc of the same type.
   void initializeFullCopy(TypeLoc Other) {
     assert(getType() == Other.getType());
     copy(Other);
   }
 
-  /// \brief Initializes this by copying its information from another
+  /// Initializes this by copying its information from another
   /// TypeLoc of the same type.  The given size must be the full data
   /// size.
   void initializeFullCopy(TypeLoc Other, unsigned Size) {
@@ -235,13 +241,13 @@
   static SourceRange getLocalSourceRangeImpl(TypeLoc TL);
 };
 
-/// \brief Return the TypeLoc for a type source info.
+/// Return the TypeLoc for a type source info.
 inline TypeLoc TypeSourceInfo::getTypeLoc() const {
   // TODO: is this alignment already sufficient?
   return TypeLoc(Ty, const_cast<void*>(static_cast<const void*>(this + 1)));
 }
 
-/// \brief Wrapper of type source information for a type with
+/// Wrapper of type source information for a type with
 /// no direct qualifiers.
 class UnqualTypeLoc : public TypeLoc {
 public:
@@ -264,7 +270,7 @@
   }
 };
 
-/// \brief Wrapper of type source information for a type with
+/// Wrapper of type source information for a type with
 /// non-trivial direct qualifiers.
 ///
 /// Currently, we intentionally do not provide source location for
@@ -276,7 +282,7 @@
   UnqualTypeLoc getUnqualifiedLoc() const {
     unsigned align =
         TypeLoc::getLocalAlignmentForType(QualType(getTypePtr(), 0));
-    uintptr_t dataInt = reinterpret_cast<uintptr_t>(Data);
+    auto dataInt = reinterpret_cast<uintptr_t>(Data);
     dataInt = llvm::alignTo(dataInt, align);
     return UnqualTypeLoc(getTypePtr(), reinterpret_cast<void*>(dataInt));
   }
@@ -295,7 +301,7 @@
     return getUnqualifiedLoc();
   }
 
-  /// \brief Returns the size of the type source info data block that is
+  /// Returns the size of the type source info data block that is
   /// specific to this type.
   unsigned getLocalDataSize() const {
     // In fact, we don't currently preserve any location information
@@ -303,7 +309,7 @@
     return 0;
   }
 
-  /// \brief Returns the alignment of the type source info data block that is
+  /// Returns the alignment of the type source info data block that is
   /// specific to this type.
   unsigned getLocalDataAlignment() const {
     // We don't preserve any location information.
@@ -429,7 +435,7 @@
   }
 
   void *getNonLocalData() const {
-    uintptr_t data = reinterpret_cast<uintptr_t>(Base::Data);
+    auto data = reinterpret_cast<uintptr_t>(Base::Data);
     data += asDerived()->getLocalDataSize();
     data = llvm::alignTo(data, getNextTypeAlign());
     return reinterpret_cast<void*>(data);
@@ -503,7 +509,7 @@
   SourceLocation NameLoc;
 };
 
-/// \brief A reasonable base class for TypeLocs that correspond to
+/// A reasonable base class for TypeLocs that correspond to
 /// types that are written as a type-specifier.
 class TypeSpecTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                                TypeSpecTypeLoc,
@@ -541,7 +547,7 @@
   SourceRange BuiltinRange;
 };
 
-/// \brief Wrapper for source info for builtin types.
+/// Wrapper for source info for builtin types.
 class BuiltinTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                               BuiltinTypeLoc,
                                               BuiltinType,
@@ -661,7 +667,7 @@
   }
 };
 
-/// \brief Wrapper for source info for typedefs.
+/// Wrapper for source info for typedefs.
 class TypedefTypeLoc : public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
                                                         TypedefTypeLoc,
                                                         TypedefType> {
@@ -671,7 +677,7 @@
   }
 };
 
-/// \brief Wrapper for source info for injected class names of class
+/// Wrapper for source info for injected class names of class
 /// templates.
 class InjectedClassNameTypeLoc :
     public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
@@ -683,7 +689,7 @@
   }
 };
 
-/// \brief Wrapper for source info for unresolved typename using decls.
+/// Wrapper for source info for unresolved typename using decls.
 class UnresolvedUsingTypeLoc :
     public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
                                      UnresolvedUsingTypeLoc,
@@ -694,7 +700,7 @@
   }
 };
 
-/// \brief Wrapper for source info for tag types.  Note that this only
+/// Wrapper for source info for tag types.  Note that this only
 /// records source info for the name itself; a type written 'struct foo'
 /// should be represented as an ElaboratedTypeLoc.  We currently
 /// only do that when C++ is enabled because of the expense of
@@ -705,7 +711,7 @@
 public:
   TagDecl *getDecl() const { return getTypePtr()->getDecl(); }
 
-  /// \brief True if the tag was defined in this type specifier.
+  /// True if the tag was defined in this type specifier.
   bool isDefinition() const {
     TagDecl *D = getDecl();
     return D->isCompleteDefinition() &&
@@ -713,7 +719,7 @@
   }
 };
 
-/// \brief Wrapper for source info for record types.
+/// Wrapper for source info for record types.
 class RecordTypeLoc : public InheritingConcreteTypeLoc<TagTypeLoc,
                                                        RecordTypeLoc,
                                                        RecordType> {
@@ -721,7 +727,7 @@
   RecordDecl *getDecl() const { return getTypePtr()->getDecl(); }
 };
 
-/// \brief Wrapper for source info for enum types.
+/// Wrapper for source info for enum types.
 class EnumTypeLoc : public InheritingConcreteTypeLoc<TagTypeLoc,
                                                      EnumTypeLoc,
                                                      EnumType> {
@@ -729,7 +735,7 @@
   EnumDecl *getDecl() const { return getTypePtr()->getDecl(); }
 };
 
-/// \brief Wrapper for template type parameters.
+/// Wrapper for template type parameters.
 class TemplateTypeParmTypeLoc :
     public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
                                      TemplateTypeParmTypeLoc,
@@ -828,14 +834,14 @@
   }
 };
 
-/// \brief Wrapper for substituted template type parameters.
+/// Wrapper for substituted template type parameters.
 class SubstTemplateTypeParmTypeLoc :
     public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
                                      SubstTemplateTypeParmTypeLoc,
                                      SubstTemplateTypeParmType> {
 };
 
-  /// \brief Wrapper for substituted template type parameters.
+  /// Wrapper for substituted template type parameters.
 class SubstTemplateTypeParmPackTypeLoc :
     public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
                                      SubstTemplateTypeParmPackTypeLoc,
@@ -855,7 +861,7 @@
   SourceLocation AttrLoc;
 };
 
-/// \brief Type source information for an attributed type.
+/// Type source information for an attributed type.
 class AttributedTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                                  AttributedTypeLoc,
                                                  AttributedType,
@@ -992,7 +998,7 @@
     return (TypeSourceInfo**)this->getExtraLocalData();
   }
 
-  // SourceLocations are stored after the type argument information, one for 
+  // SourceLocations are stored after the type argument information, one for
   // each Protocol.
   SourceLocation *getProtocolLocArray() const {
     return (SourceLocation*)(getTypeArgLocArray() + getNumTypeArgs());
@@ -1114,7 +1120,7 @@
   SourceLocation NameEndLoc;
 };
 
-/// \brief Wrapper for source info for ObjC interfaces.
+/// Wrapper for source info for ObjC interfaces.
 class ObjCInterfaceTypeLoc : public ConcreteTypeLoc<ObjCObjectTypeLoc,
                                                     ObjCInterfaceTypeLoc,
                                                     ObjCInterfaceType,
@@ -1131,11 +1137,11 @@
   void setNameLoc(SourceLocation Loc) {
     getLocalData()->NameLoc = Loc;
   }
-                                                    
+
   SourceRange getLocalSourceRange() const {
     return SourceRange(getNameLoc(), getNameEndLoc());
   }
-  
+
   SourceLocation getNameEndLoc() const {
     return getLocalData()->NameEndLoc;
   }
@@ -1227,7 +1233,7 @@
   }
 };
 
-/// \brief Wrapper for source info for pointers decayed from arrays and
+/// Wrapper for source info for pointers decayed from arrays and
 /// functions.
 class DecayedTypeLoc : public InheritingConcreteTypeLoc<
                            AdjustedTypeLoc, DecayedTypeLoc, DecayedType> {
@@ -1267,7 +1273,7 @@
   }
 };
 
-/// \brief Wrapper for source info for pointers.
+/// Wrapper for source info for pointers.
 class PointerTypeLoc : public PointerLikeTypeLoc<PointerTypeLoc,
                                                  PointerType> {
 public:
@@ -1280,7 +1286,7 @@
   }
 };
 
-/// \brief Wrapper for source info for block pointers.
+/// Wrapper for source info for block pointers.
 class BlockPointerTypeLoc : public PointerLikeTypeLoc<BlockPointerTypeLoc,
                                                       BlockPointerType> {
 public:
@@ -1297,7 +1303,7 @@
   TypeSourceInfo *ClassTInfo;
 };
 
-/// \brief Wrapper for source info for member pointers.
+/// Wrapper for source info for member pointers.
 class MemberPointerTypeLoc : public PointerLikeTypeLoc<MemberPointerTypeLoc,
                                                        MemberPointerType,
                                                        MemberPointerLocInfo> {
@@ -1392,7 +1398,7 @@
   SourceLocation LocalRangeEnd;
 };
 
-/// \brief Wrapper for source info for functions.
+/// Wrapper for source info for functions.
 class FunctionTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                                FunctionTypeLoc,
                                                FunctionType,
@@ -1496,7 +1502,7 @@
       setExceptionSpecRange(Loc);
   }
 
-  /// \brief Returns the size of the type source info data block that is
+  /// Returns the size of the type source info data block that is
   /// specific to this type.
   unsigned getExtraLocalDataSize() const {
     unsigned ExceptSpecSize = hasExceptionSpec() ? sizeof(SourceRange) : 0;
@@ -1525,7 +1531,7 @@
   Expr *Size;
 };
 
-/// \brief Wrapper for source info for arrays.
+/// Wrapper for source info for arrays.
 class ArrayTypeLoc : public ConcreteTypeLoc<UnqualTypeLoc,
                                             ArrayTypeLoc,
                                             ArrayType,
@@ -1670,7 +1676,7 @@
     getLocalData()->NameLoc = Loc;
   }
 
-  /// \brief - Copy the location information from the given info.
+  /// - Copy the location information from the given info.
   void copy(TemplateSpecializationTypeLoc Loc) {
     unsigned size = getFullDataSize();
     assert(size == Loc.getFullDataSize());
@@ -1766,10 +1772,10 @@
     return range;
   }
 
-  ///  Returns the type before the address space attribute application 
-  ///  area.   
+  ///  Returns the type before the address space attribute application
+  ///  area.
   ///    int * __attribute__((address_space(11))) *
-  ///    ^   ^          
+  ///    ^   ^
   QualType getInnerType() const {
     return this->getTypePtr()->getPointeeType();
   }
@@ -1798,6 +1804,13 @@
                                                        VectorType> {
 };
 
+// FIXME: size expression and attribute locations (or keyword if we
+// ever fully support altivec syntax).
+class DependentVectorTypeLoc
+    : public InheritingConcreteTypeLoc<TypeSpecTypeLoc,
+                                       DependentVectorTypeLoc,
+                                       DependentVectorType> {};
+
 // FIXME: size expression and attribute locations.
 class ExtVectorTypeLoc : public InheritingConcreteTypeLoc<VectorTypeLoc,
                                                           ExtVectorTypeLoc,
@@ -1989,7 +2002,7 @@
 struct ElaboratedLocInfo {
   SourceLocation ElaboratedKWLoc;
 
-  /// \brief Data associated with the nested-name-specifier location.
+  /// Data associated with the nested-name-specifier location.
   void *QualifierData;
 };
 
diff --git a/linux-x64/clang/include/clang/AST/TypeNodes.def b/linux-x64/clang/include/clang/AST/TypeNodes.def
index 66697fa..8638f94 100644
--- a/linux-x64/clang/include/clang/AST/TypeNodes.def
+++ b/linux-x64/clang/include/clang/AST/TypeNodes.def
@@ -75,6 +75,7 @@
 DEPENDENT_TYPE(DependentSizedExtVector, Type)
 DEPENDENT_TYPE(DependentAddressSpace, Type)
 TYPE(Vector, Type)
+DEPENDENT_TYPE(DependentVector, Type)
 TYPE(ExtVector, VectorType)
 ABSTRACT_TYPE(Function, Type)
 TYPE(FunctionProto, FunctionType)
diff --git a/linux-x64/clang/include/clang/AST/TypeOrdering.h b/linux-x64/clang/include/clang/AST/TypeOrdering.h
index fa64fae..7ea7807 100644
--- a/linux-x64/clang/include/clang/AST/TypeOrdering.h
+++ b/linux-x64/clang/include/clang/AST/TypeOrdering.h
@@ -1,4 +1,4 @@
-//===-------------- TypeOrdering.h - Total ordering for types -------------===//
+//===-------------- TypeOrdering.h - Total ordering for types ---*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Allows QualTypes to be sorted and hence used in maps and sets.
+/// Allows QualTypes to be sorted and hence used in maps and sets.
 ///
 /// Defines clang::QualTypeOrdering, a total ordering on clang::QualType,
 /// and hence enables QualType values to be sorted and to be used in
@@ -25,7 +25,7 @@
 
 namespace clang {
 
-/// \brief Function object that provides a total ordering on QualType values.
+/// Function object that provides a total ordering on QualType values.
 struct QualTypeOrdering {
   bool operator()(QualType T1, QualType T2) const {
     return std::less<void*>()(T1.getAsOpaquePtr(), T2.getAsOpaquePtr());
@@ -56,20 +56,20 @@
   };
 
   template<> struct DenseMapInfo<clang::CanQualType> {
-    static inline clang::CanQualType getEmptyKey() { 
-      return clang::CanQualType(); 
+    static inline clang::CanQualType getEmptyKey() {
+      return clang::CanQualType();
     }
-    
+
     static inline clang::CanQualType getTombstoneKey() {
       using clang::CanQualType;
       return CanQualType::getFromOpaquePtr(reinterpret_cast<clang::Type *>(-1));
     }
-    
+
     static unsigned getHashValue(clang::CanQualType Val) {
       return (unsigned)((uintptr_t)Val.getAsOpaquePtr()) ^
       ((unsigned)((uintptr_t)Val.getAsOpaquePtr() >> 9));
     }
-    
+
     static bool isEqual(clang::CanQualType LHS, clang::CanQualType RHS) {
       return LHS == RHS;
     }
diff --git a/linux-x64/clang/include/clang/AST/TypeVisitor.h b/linux-x64/clang/include/clang/AST/TypeVisitor.h
index 11e5a47..75fa0ec 100644
--- a/linux-x64/clang/include/clang/AST/TypeVisitor.h
+++ b/linux-x64/clang/include/clang/AST/TypeVisitor.h
@@ -22,7 +22,7 @@
   return static_cast<ImplClass*>(this)-> \
            Visit##CLASS(static_cast<const CLASS*>(T))
 
-/// \brief An operation on a type.
+/// An operation on a type.
 ///
 /// \tparam ImplClass Class implementing the operation. Must be inherited from
 ///         TypeVisitor.
@@ -65,7 +65,7 @@
 class TypeVisitor {
 public:
 
-  /// \brief Performs the operation associated with this visitor object.
+  /// Performs the operation associated with this visitor object.
   RetTy Visit(const Type *T) {
     // Top switch stmt: dispatch to VisitFooType for each FooType.
     switch (T->getTypeClass()) {
@@ -83,7 +83,7 @@
 }
 #include "clang/AST/TypeNodes.def"
 
-  /// \brief Method called if \c ImpClass doesn't provide specific handler
+  /// Method called if \c ImpClass doesn't provide specific handler
   /// for some type class.
   RetTy VisitType(const Type*) { return RetTy(); }
 };
diff --git a/linux-x64/clang/include/clang/AST/UnresolvedSet.h b/linux-x64/clang/include/clang/AST/UnresolvedSet.h
index 614ff9b..b62e9f1 100644
--- a/linux-x64/clang/include/clang/AST/UnresolvedSet.h
+++ b/linux-x64/clang/include/clang/AST/UnresolvedSet.h
@@ -57,7 +57,7 @@
   NamedDecl *operator->() const { return **this; }
 };
 
-/// \brief A set of unresolved declarations.
+/// A set of unresolved declarations.
 class UnresolvedSetImpl {
   using DeclsTy = SmallVectorImpl<DeclAccessPair>;
 
@@ -140,13 +140,13 @@
   }
 };
 
-/// \brief A set of unresolved declarations.
+/// A set of unresolved declarations.
 template <unsigned InlineCapacity> class UnresolvedSet :
     public UnresolvedSetImpl {
   SmallVector<DeclAccessPair, InlineCapacity> Decls;
 };
 
- 
+
 } // namespace clang
 
 #endif // LLVM_CLANG_AST_UNRESOLVEDSET_H
diff --git a/linux-x64/clang/include/clang/AST/VTTBuilder.h b/linux-x64/clang/include/clang/AST/VTTBuilder.h
index 1781394..3a8a6a9 100644
--- a/linux-x64/clang/include/clang/AST/VTTBuilder.h
+++ b/linux-x64/clang/include/clang/AST/VTTBuilder.h
@@ -68,92 +68,92 @@
      : VTableIndex(VTableIndex), VTableBase(VTableBase) {}
 };
 
-/// \brief Class for building VTT layout information.
+/// Class for building VTT layout information.
 class VTTBuilder {
   ASTContext &Ctx;
 
-  /// \brief The most derived class for which we're building this vtable.
+  /// The most derived class for which we're building this vtable.
   const CXXRecordDecl *MostDerivedClass;
 
   using VTTVTablesVectorTy = SmallVector<VTTVTable, 64>;
-  
-  /// \brief The VTT vtables.
+
+  /// The VTT vtables.
   VTTVTablesVectorTy VTTVTables;
-  
+
   using VTTComponentsVectorTy = SmallVector<VTTComponent, 64>;
-  
-  /// \brief The VTT components.
+
+  /// The VTT components.
   VTTComponentsVectorTy VTTComponents;
-  
-  /// \brief The AST record layout of the most derived class.
+
+  /// The AST record layout of the most derived class.
   const ASTRecordLayout &MostDerivedClassLayout;
 
   using VisitedVirtualBasesSetTy = llvm::SmallPtrSet<const CXXRecordDecl *, 4>;
 
   using AddressPointsMapTy = llvm::DenseMap<BaseSubobject, uint64_t>;
 
-  /// \brief The sub-VTT indices for the bases of the most derived class.
+  /// The sub-VTT indices for the bases of the most derived class.
   llvm::DenseMap<BaseSubobject, uint64_t> SubVTTIndicies;
 
-  /// \brief The secondary virtual pointer indices of all subobjects of
+  /// The secondary virtual pointer indices of all subobjects of
   /// the most derived class.
   llvm::DenseMap<BaseSubobject, uint64_t> SecondaryVirtualPointerIndices;
 
-  /// \brief Whether the VTT builder should generate LLVM IR for the VTT.
+  /// Whether the VTT builder should generate LLVM IR for the VTT.
   bool GenerateDefinition;
 
-  /// \brief Add a vtable pointer to the VTT currently being built.
+  /// Add a vtable pointer to the VTT currently being built.
   void AddVTablePointer(BaseSubobject Base, uint64_t VTableIndex,
                         const CXXRecordDecl *VTableClass);
-                        
-  /// \brief Lay out the secondary VTTs of the given base subobject.
+
+  /// Lay out the secondary VTTs of the given base subobject.
   void LayoutSecondaryVTTs(BaseSubobject Base);
-  
-  /// \brief Lay out the secondary virtual pointers for the given base
+
+  /// Lay out the secondary virtual pointers for the given base
   /// subobject.
   ///
   /// \param BaseIsMorallyVirtual whether the base subobject is a virtual base
   /// or a direct or indirect base of a virtual base.
-  void LayoutSecondaryVirtualPointers(BaseSubobject Base, 
+  void LayoutSecondaryVirtualPointers(BaseSubobject Base,
                                       bool BaseIsMorallyVirtual,
                                       uint64_t VTableIndex,
                                       const CXXRecordDecl *VTableClass,
                                       VisitedVirtualBasesSetTy &VBases);
-  
-  /// \brief Lay out the secondary virtual pointers for the given base
+
+  /// Lay out the secondary virtual pointers for the given base
   /// subobject.
-  void LayoutSecondaryVirtualPointers(BaseSubobject Base, 
+  void LayoutSecondaryVirtualPointers(BaseSubobject Base,
                                       uint64_t VTableIndex);
 
-  /// \brief Lay out the VTTs for the virtual base classes of the given
+  /// Lay out the VTTs for the virtual base classes of the given
   /// record declaration.
   void LayoutVirtualVTTs(const CXXRecordDecl *RD,
                          VisitedVirtualBasesSetTy &VBases);
-  
-  /// \brief Lay out the VTT for the given subobject, including any
+
+  /// Lay out the VTT for the given subobject, including any
   /// secondary VTTs, secondary virtual pointers and virtual VTTs.
   void LayoutVTT(BaseSubobject Base, bool BaseIsVirtual);
-  
+
 public:
   VTTBuilder(ASTContext &Ctx, const CXXRecordDecl *MostDerivedClass,
              bool GenerateDefinition);
 
-  // \brief Returns a reference to the VTT components.
+  // Returns a reference to the VTT components.
   const VTTComponentsVectorTy &getVTTComponents() const {
     return VTTComponents;
   }
-  
-  // \brief Returns a reference to the VTT vtables.
+
+  // Returns a reference to the VTT vtables.
   const VTTVTablesVectorTy &getVTTVTables() const {
     return VTTVTables;
   }
-  
-  /// \brief Returns a reference to the sub-VTT indices.
+
+  /// Returns a reference to the sub-VTT indices.
   const llvm::DenseMap<BaseSubobject, uint64_t> &getSubVTTIndicies() const {
     return SubVTTIndicies;
   }
-  
-  /// \brief Returns a reference to the secondary virtual pointer indices.
+
+  /// Returns a reference to the secondary virtual pointer indices.
   const llvm::DenseMap<BaseSubobject, uint64_t> &
   getSecondaryVirtualPointerIndices() const {
     return SecondaryVirtualPointerIndices;
diff --git a/linux-x64/clang/include/clang/AST/VTableBuilder.h b/linux-x64/clang/include/clang/AST/VTableBuilder.h
index 96565fa..4a779db 100644
--- a/linux-x64/clang/include/clang/AST/VTableBuilder.h
+++ b/linux-x64/clang/include/clang/AST/VTableBuilder.h
@@ -26,7 +26,7 @@
 namespace clang {
   class CXXRecordDecl;
 
-/// \brief Represents a single component in a vtable.
+/// Represents a single component in a vtable.
 class VTableComponent {
 public:
   enum Kind {
@@ -36,13 +36,13 @@
     CK_RTTI,
     CK_FunctionPointer,
 
-    /// \brief A pointer to the complete destructor.
+    /// A pointer to the complete destructor.
     CK_CompleteDtorPointer,
 
-    /// \brief A pointer to the deleting destructor.
+    /// A pointer to the deleting destructor.
     CK_DeletingDtorPointer,
 
-    /// \brief An entry that is never used.
+    /// An entry that is never used.
     ///
     /// In some cases, a vtable function pointer will end up never being
     /// called. Such vtable function pointers are represented as a
@@ -93,11 +93,7 @@
                            reinterpret_cast<uintptr_t>(MD));
   }
 
-  static VTableComponent getFromOpaqueInteger(uint64_t I) {
-    return VTableComponent(I);
-  }
-
-  /// \brief Get the kind of this vtable component.
+  /// Get the kind of this vtable component.
   Kind getKind() const {
     return (Kind)(Value & 0x7);
   }
@@ -226,9 +222,6 @@
     return static_cast<uintptr_t>(Value & ~7ULL);
   }
 
-  explicit VTableComponent(uint64_t Value)
-    : Value(Value) { }
-
   /// The kind is stored in the lower 3 bits of the value. For offsets, we
   /// make use of the facts that classes can't be larger than 2^55 bytes,
   /// so we store the offset in the lower part of the 61 bits that remain.
@@ -255,10 +248,10 @@
 
   OwningArrayRef<VTableComponent> VTableComponents;
 
-  /// \brief Contains thunks needed by vtables, sorted by indices.
+  /// Contains thunks needed by vtables, sorted by indices.
   OwningArrayRef<VTableThunkTy> VTableThunks;
 
-  /// \brief Address points for all vtables.
+  /// Address points for all vtables.
   AddressPointsMapTy AddressPoints;
 
 public:
@@ -324,7 +317,7 @@
 protected:
   typedef llvm::DenseMap<const CXXMethodDecl *, ThunkInfoVectorTy> ThunksMapTy;
 
-  /// \brief Contains all thunks that a given method decl will need.
+  /// Contains all thunks that a given method decl will need.
   ThunksMapTy Thunks;
 
   /// Compute and store all vtable related information (vtable layout, vbase
@@ -355,7 +348,7 @@
 class ItaniumVTableContext : public VTableContextBase {
 private:
 
-  /// \brief Contains the index (relative to the vtable address point)
+  /// Contains the index (relative to the vtable address point)
   /// where the function pointer for a virtual function is stored.
   typedef llvm::DenseMap<GlobalDecl, int64_t> MethodVTableIndicesTy;
   MethodVTableIndicesTy MethodVTableIndices;
@@ -368,7 +361,7 @@
   typedef std::pair<const CXXRecordDecl *,
                     const CXXRecordDecl *> ClassPairTy;
 
-  /// \brief vtable offsets for offsets of virtual bases of a class.
+  /// vtable offsets for offsets of virtual bases of a class.
   ///
   /// Contains the vtable offset (relative to the address point) in chars
   /// where the offsets for virtual bases of a class are stored.
@@ -393,7 +386,7 @@
       const CXXRecordDecl *MostDerivedClass, CharUnits MostDerivedClassOffset,
       bool MostDerivedClassIsVirtual, const CXXRecordDecl *LayoutClass);
 
-  /// \brief Locate a virtual function in the vtable.
+  /// Locate a virtual function in the vtable.
   ///
   /// Return the index (relative to the vtable address point) where the
   /// function pointer for the given virtual function is stored.
@@ -401,7 +394,7 @@
 
   /// Return the offset in chars (relative to the vtable address point) where
   /// the offset of the virtual base that contains the given base is stored,
-  /// otherwise, if no virtual base contains the given class, return 0. 
+  /// otherwise, if no virtual base contains the given class, return 0.
   ///
   /// Base must be a virtual base class or an unambiguous base.
   CharUnits getVirtualBaseOffsetOffset(const CXXRecordDecl *RD,
@@ -523,7 +516,7 @@
     MethodVFTableLocationsTy;
   MethodVFTableLocationsTy MethodVFTableLocations;
 
-  typedef llvm::DenseMap<const CXXRecordDecl *, VPtrInfoVector>
+  typedef llvm::DenseMap<const CXXRecordDecl *, std::unique_ptr<VPtrInfoVector>>
       VFPtrLocationsMapTy;
   VFPtrLocationsMapTy VFPtrLocations;
 
@@ -560,7 +553,7 @@
   const VTableLayout &getVFTableLayout(const CXXRecordDecl *RD,
                                        CharUnits VFPtrOffset);
 
-  const MethodVFTableLocation &getMethodVFTableLocation(GlobalDecl GD);
+  MethodVFTableLocation getMethodVFTableLocation(GlobalDecl GD);
 
   const ThunkInfoVectorTy *getThunkInfo(GlobalDecl GD) override {
     // Complete destructors don't have a slot in a vftable, so no thunks needed.
@@ -570,7 +563,7 @@
     return VTableContextBase::getThunkInfo(GD);
   }
 
-  /// \brief Returns the index of VBase in the vbtable of Derived.
+  /// Returns the index of VBase in the vbtable of Derived.
   /// VBase must be a morally virtual base of Derived.
   /// The vbtable is an array of i32 offsets.  The first entry is a self entry,
   /// and the rest are offsets from the vbptr to virtual bases.
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchFinder.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchFinder.h
index 389af1b..324c02d 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchFinder.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchFinder.h
@@ -50,7 +50,7 @@
 
 namespace ast_matchers {
 
-/// \brief A class to allow finding matches over the Clang AST.
+/// A class to allow finding matches over the Clang AST.
 ///
 /// After creation, you can add multiple matchers to the MatchFinder via
 /// calls to addMatcher(...).
@@ -68,52 +68,52 @@
 /// Not intended to be subclassed.
 class MatchFinder {
 public:
-  /// \brief Contains all information for a given match.
+  /// Contains all information for a given match.
   ///
   /// Every time a match is found, the MatchFinder will invoke the registered
   /// MatchCallback with a MatchResult containing information about the match.
   struct MatchResult {
     MatchResult(const BoundNodes &Nodes, clang::ASTContext *Context);
 
-    /// \brief Contains the nodes bound on the current match.
+    /// Contains the nodes bound on the current match.
     ///
     /// This allows user code to easily extract matched AST nodes.
     const BoundNodes Nodes;
 
-    /// \brief Utilities for interpreting the matched AST structures.
+    /// Utilities for interpreting the matched AST structures.
     /// @{
     clang::ASTContext * const Context;
     clang::SourceManager * const SourceManager;
     /// @}
   };
 
-  /// \brief Called when the Match registered for it was successfully found
+  /// Called when the Match registered for it was successfully found
   /// in the AST.
   class MatchCallback {
   public:
     virtual ~MatchCallback();
 
-    /// \brief Called on every match by the \c MatchFinder.
+    /// Called on every match by the \c MatchFinder.
     virtual void run(const MatchResult &Result) = 0;
 
-    /// \brief Called at the start of each translation unit.
+    /// Called at the start of each translation unit.
     ///
     /// Optionally override to do per translation unit tasks.
     virtual void onStartOfTranslationUnit() {}
 
-    /// \brief Called at the end of each translation unit.
+    /// Called at the end of each translation unit.
     ///
     /// Optionally override to do per translation unit tasks.
     virtual void onEndOfTranslationUnit() {}
 
-    /// \brief An id used to group the matchers.
+    /// An id used to group the matchers.
     ///
     /// This id is used, for example, for the profiling output.
     /// It defaults to "<unknown>".
     virtual StringRef getID() const;
   };
 
-  /// \brief Called when parsing is finished. Intended for testing only.
+  /// Called when parsing is finished. Intended for testing only.
   class ParsingDoneTestCallback {
   public:
     virtual ~ParsingDoneTestCallback();
@@ -125,11 +125,11 @@
       Profiling(llvm::StringMap<llvm::TimeRecord> &Records)
           : Records(Records) {}
 
-      /// \brief Per bucket timing information.
+      /// Per bucket timing information.
       llvm::StringMap<llvm::TimeRecord> &Records;
     };
 
-    /// \brief Enables per-check timers.
+    /// Enables per-check timers.
     ///
     /// It prints a report after match.
     llvm::Optional<Profiling> CheckProfiling;
@@ -138,7 +138,7 @@
   MatchFinder(MatchFinderOptions Options = MatchFinderOptions());
   ~MatchFinder();
 
-  /// \brief Adds a matcher to execute when running over the AST.
+  /// Adds a matcher to execute when running over the AST.
   ///
   /// Calls 'Action' with the BoundNodes on every match.
   /// Adding more than one 'NodeMatch' allows finding different matches in a
@@ -162,7 +162,7 @@
                   MatchCallback *Action);
   /// @}
 
-  /// \brief Adds a matcher to execute when running over the AST.
+  /// Adds a matcher to execute when running over the AST.
   ///
   /// This is similar to \c addMatcher(), but it uses the dynamic interface. It
   /// is more flexible, but the lost type information enables a caller to pass
@@ -173,10 +173,10 @@
   bool addDynamicMatcher(const internal::DynTypedMatcher &NodeMatch,
                          MatchCallback *Action);
 
-  /// \brief Creates a clang ASTConsumer that finds all matches.
+  /// Creates a clang ASTConsumer that finds all matches.
   std::unique_ptr<clang::ASTConsumer> newASTConsumer();
 
-  /// \brief Calls the registered callbacks on all matches on the given \p Node.
+  /// Calls the registered callbacks on all matches on the given \p Node.
   ///
   /// Note that there can be multiple matches on a single node, for
   /// example when using decl(forEachDescendant(stmt())).
@@ -189,17 +189,17 @@
              ASTContext &Context);
   /// @}
 
-  /// \brief Finds all matches in the given AST.
+  /// Finds all matches in the given AST.
   void matchAST(ASTContext &Context);
 
-  /// \brief Registers a callback to notify the end of parsing.
+  /// Registers a callback to notify the end of parsing.
   ///
   /// The provided closure is called after parsing is done, before the AST is
   /// traversed. Useful for benchmarking.
   /// Each call to FindAll(...) will call the closure once.
   void registerTestCallbackAfterParsing(ParsingDoneTestCallback *ParsingDone);
 
-  /// \brief For each \c Matcher<> a \c MatchCallback that will be called
+  /// For each \c Matcher<> a \c MatchCallback that will be called
   /// when it matches.
   struct MatchersByType {
     std::vector<std::pair<internal::DynTypedMatcher, MatchCallback *>>
@@ -211,7 +211,7 @@
         NestedNameSpecifierLoc;
     std::vector<std::pair<TypeLocMatcher, MatchCallback *>> TypeLoc;
     std::vector<std::pair<CXXCtorInitializerMatcher, MatchCallback *>> CtorInit;
-    /// \brief All the callbacks in one container to simplify iteration.
+    /// All the callbacks in one container to simplify iteration.
     llvm::SmallPtrSet<MatchCallback *, 16> AllCallbacks;
   };
 
@@ -220,11 +220,11 @@
 
   MatchFinderOptions Options;
 
-  /// \brief Called when parsing is done.
+  /// Called when parsing is done.
   ParsingDoneTestCallback *ParsingDone;
 };
 
-/// \brief Returns the results of matching \p Matcher on \p Node.
+/// Returns the results of matching \p Matcher on \p Node.
 ///
 /// Collects the \c BoundNodes of all callback invocations when matching
 /// \p Matcher on \p Node and returns the collected results.
@@ -248,12 +248,12 @@
       ASTContext &Context);
 /// @}
 
-/// \brief Returns the results of matching \p Matcher on the translation unit of
+/// Returns the results of matching \p Matcher on the translation unit of
 /// \p Context and collects the \c BoundNodes of all callback invocations.
 template <typename MatcherT>
 SmallVector<BoundNodes, 1> match(MatcherT Matcher, ASTContext &Context);
 
-/// \brief Returns the first result of type \c NodeT bound to \p BoundTo.
+/// Returns the first result of type \c NodeT bound to \p BoundTo.
 ///
 /// Returns \c NULL if there is no match, or if the matching node cannot be
 /// casted to \c NodeT.
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
index 5008d53..2552ff2 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchers.h
@@ -92,7 +92,7 @@
 namespace clang {
 namespace ast_matchers {
 
-/// \brief Maps string IDs to AST nodes matched by parts of a matcher.
+/// Maps string IDs to AST nodes matched by parts of a matcher.
 ///
 /// The bound nodes are generated by calling \c bind("id") on the node matchers
 /// of the nodes we want to access later.
@@ -101,7 +101,7 @@
 /// callbacks are executed every time a match is found.
 class BoundNodes {
 public:
-  /// \brief Returns the AST node bound to \c ID.
+  /// Returns the AST node bound to \c ID.
   ///
   /// Returns NULL if there was no node bound to \c ID or if there is a node but
   /// it cannot be converted to the specified type.
@@ -110,12 +110,12 @@
     return MyBoundNodes.getNodeAs<T>(ID);
   }
 
-  /// \brief Type of mapping from binding identifiers to bound nodes. This type
+  /// Type of mapping from binding identifiers to bound nodes. This type
   /// is an associative container with a key type of \c std::string and a value
   /// type of \c clang::ast_type_traits::DynTypedNode
   using IDToNodeMap = internal::BoundNodesMap::IDToNodeMap;
 
-  /// \brief Retrieve mapping from binding identifiers to bound nodes.
+  /// Retrieve mapping from binding identifiers to bound nodes.
   const IDToNodeMap &getMap() const {
     return MyBoundNodes.getMap();
   }
@@ -123,14 +123,14 @@
 private:
   friend class internal::BoundNodesTreeBuilder;
 
-  /// \brief Create BoundNodes from a pre-filled map of bindings.
+  /// Create BoundNodes from a pre-filled map of bindings.
   BoundNodes(internal::BoundNodesMap &MyBoundNodes)
       : MyBoundNodes(MyBoundNodes) {}
 
   internal::BoundNodesMap MyBoundNodes;
 };
 
-/// \brief If the provided matcher matches a node, binds the node to \c ID.
+/// If the provided matcher matches a node, binds the node to \c ID.
 ///
 /// FIXME: Do we want to support this now that we have bind()?
 template <typename T>
@@ -139,7 +139,7 @@
   return InnerMatcher.bind(ID);
 }
 
-/// \brief Types of matchers for the top-level classes in the AST class
+/// Types of matchers for the top-level classes in the AST class
 /// hierarchy.
 /// @{
 using DeclarationMatcher = internal::Matcher<Decl>;
@@ -151,7 +151,7 @@
 using CXXCtorInitializerMatcher = internal::Matcher<CXXCtorInitializer>;
 /// @}
 
-/// \brief Matches any node.
+/// Matches any node.
 ///
 /// Useful when another matcher requires a child matcher, but there's no
 /// additional constraint. This will often be used with an explicit conversion
@@ -167,7 +167,7 @@
 /// Usable as: Any Matcher
 inline internal::TrueMatcher anything() { return internal::TrueMatcher(); }
 
-/// \brief Matches the top declaration context.
+/// Matches the top declaration context.
 ///
 /// Given
 /// \code
@@ -181,7 +181,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
     translationUnitDecl;
 
-/// \brief Matches typedef declarations.
+/// Matches typedef declarations.
 ///
 /// Given
 /// \code
@@ -193,7 +193,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
     typedefDecl;
 
-/// \brief Matches typedef name declarations.
+/// Matches typedef name declarations.
 ///
 /// Given
 /// \code
@@ -205,7 +205,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl>
     typedefNameDecl;
 
-/// \brief Matches type alias declarations.
+/// Matches type alias declarations.
 ///
 /// Given
 /// \code
@@ -217,7 +217,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl>
     typeAliasDecl;
 
-/// \brief Matches type alias template declarations.
+/// Matches type alias template declarations.
 ///
 /// typeAliasTemplateDecl() matches
 /// \code
@@ -227,7 +227,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasTemplateDecl>
     typeAliasTemplateDecl;
 
-/// \brief Matches AST nodes that were expanded within the main-file.
+/// Matches AST nodes that were expanded within the main-file.
 ///
 /// Example matches X but not Y
 ///   (matcher = cxxRecordDecl(isExpansionInMainFile())
@@ -245,10 +245,10 @@
                         AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)) {
   auto &SourceManager = Finder->getASTContext().getSourceManager();
   return SourceManager.isInMainFile(
-      SourceManager.getExpansionLoc(Node.getLocStart()));
+      SourceManager.getExpansionLoc(Node.getBeginLoc()));
 }
 
-/// \brief Matches AST nodes that were expanded within system-header-files.
+/// Matches AST nodes that were expanded within system-header-files.
 ///
 /// Example matches Y but not X
 ///     (matcher = cxxRecordDecl(isExpansionInSystemHeader())
@@ -265,14 +265,14 @@
 AST_POLYMORPHIC_MATCHER(isExpansionInSystemHeader,
                         AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)) {
   auto &SourceManager = Finder->getASTContext().getSourceManager();
-  auto ExpansionLoc = SourceManager.getExpansionLoc(Node.getLocStart());
+  auto ExpansionLoc = SourceManager.getExpansionLoc(Node.getBeginLoc());
   if (ExpansionLoc.isInvalid()) {
     return false;
   }
   return SourceManager.isInSystemHeader(ExpansionLoc);
 }
 
-/// \brief Matches AST nodes that were expanded within files whose name is
+/// Matches AST nodes that were expanded within files whose name is
 /// partially matching a given regex.
 ///
 /// Example matches Y but not X
@@ -291,7 +291,7 @@
                           AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc),
                           std::string, RegExp) {
   auto &SourceManager = Finder->getASTContext().getSourceManager();
-  auto ExpansionLoc = SourceManager.getExpansionLoc(Node.getLocStart());
+  auto ExpansionLoc = SourceManager.getExpansionLoc(Node.getBeginLoc());
   if (ExpansionLoc.isInvalid()) {
     return false;
   }
@@ -306,7 +306,7 @@
   return RE.match(Filename);
 }
 
-/// \brief Matches declarations.
+/// Matches declarations.
 ///
 /// Examples matches \c X, \c C, and the friend declaration inside \c C;
 /// \code
@@ -317,7 +317,7 @@
 /// \endcode
 extern const internal::VariadicAllOfMatcher<Decl> decl;
 
-/// \brief Matches a declaration of a linkage specification.
+/// Matches a declaration of a linkage specification.
 ///
 /// Given
 /// \code
@@ -328,7 +328,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
     linkageSpecDecl;
 
-/// \brief Matches a declaration of anything that could have a name.
+/// Matches a declaration of anything that could have a name.
 ///
 /// Example matches \c X, \c S, the anonymous union type, \c i, and \c U;
 /// \code
@@ -341,7 +341,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl> namedDecl;
 
-/// \brief Matches a declaration of label.
+/// Matches a declaration of label.
 ///
 /// Given
 /// \code
@@ -352,7 +352,7 @@
 ///   matches 'FOO:'
 extern const internal::VariadicDynCastAllOfMatcher<Decl, LabelDecl> labelDecl;
 
-/// \brief Matches a declaration of a namespace.
+/// Matches a declaration of a namespace.
 ///
 /// Given
 /// \code
@@ -364,7 +364,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
     namespaceDecl;
 
-/// \brief Matches a declaration of a namespace alias.
+/// Matches a declaration of a namespace alias.
 ///
 /// Given
 /// \code
@@ -376,7 +376,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceAliasDecl>
     namespaceAliasDecl;
 
-/// \brief Matches class, struct, and union declarations.
+/// Matches class, struct, and union declarations.
 ///
 /// Example matches \c X, \c Z, \c U, and \c S
 /// \code
@@ -387,7 +387,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, RecordDecl> recordDecl;
 
-/// \brief Matches C++ class declarations.
+/// Matches C++ class declarations.
 ///
 /// Example matches \c X, \c Z
 /// \code
@@ -397,7 +397,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl>
     cxxRecordDecl;
 
-/// \brief Matches C++ class template declarations.
+/// Matches C++ class template declarations.
 ///
 /// Example matches \c Z
 /// \code
@@ -406,7 +406,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ClassTemplateDecl>
     classTemplateDecl;
 
-/// \brief Matches C++ class template specializations.
+/// Matches C++ class template specializations.
 ///
 /// Given
 /// \code
@@ -420,7 +420,7 @@
     Decl, ClassTemplateSpecializationDecl>
     classTemplateSpecializationDecl;
 
-/// \brief Matches declarator declarations (field, variable, function
+/// Matches declarator declarations (field, variable, function
 /// and non-type template parameter declarations).
 ///
 /// Given
@@ -432,7 +432,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
     declaratorDecl;
 
-/// \brief Matches parameter variable declarations.
+/// Matches parameter variable declarations.
 ///
 /// Given
 /// \code
@@ -443,7 +443,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
     parmVarDecl;
 
-/// \brief Matches C++ access specifier declarations.
+/// Matches C++ access specifier declarations.
 ///
 /// Given
 /// \code
@@ -457,7 +457,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, AccessSpecDecl>
     accessSpecDecl;
 
-/// \brief Matches constructor initializers.
+/// Matches constructor initializers.
 ///
 /// Examples matches \c i(42).
 /// \code
@@ -469,7 +469,7 @@
 extern const internal::VariadicAllOfMatcher<CXXCtorInitializer>
     cxxCtorInitializer;
 
-/// \brief Matches template arguments.
+/// Matches template arguments.
 ///
 /// Given
 /// \code
@@ -480,7 +480,7 @@
 ///   matches 'int' in C<int>.
 extern const internal::VariadicAllOfMatcher<TemplateArgument> templateArgument;
 
-/// \brief Matches template name.
+/// Matches template name.
 ///
 /// Given
 /// \code
@@ -491,7 +491,7 @@
 ///   matches 'X' in X<int>.
 extern const internal::VariadicAllOfMatcher<TemplateName> templateName;
 
-/// \brief Matches non-type template parameter declarations.
+/// Matches non-type template parameter declarations.
 ///
 /// Given
 /// \code
@@ -503,7 +503,7 @@
                                                    NonTypeTemplateParmDecl>
     nonTypeTemplateParmDecl;
 
-/// \brief Matches template type parameter declarations.
+/// Matches template type parameter declarations.
 ///
 /// Given
 /// \code
@@ -514,7 +514,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTypeParmDecl>
     templateTypeParmDecl;
 
-/// \brief Matches public C++ declarations.
+/// Matches public C++ declarations.
 ///
 /// Given
 /// \code
@@ -530,7 +530,7 @@
   return Node.getAccess() == AS_public;
 }
 
-/// \brief Matches protected C++ declarations.
+/// Matches protected C++ declarations.
 ///
 /// Given
 /// \code
@@ -546,7 +546,7 @@
   return Node.getAccess() == AS_protected;
 }
 
-/// \brief Matches private C++ declarations.
+/// Matches private C++ declarations.
 ///
 /// Given
 /// \code
@@ -562,7 +562,7 @@
   return Node.getAccess() == AS_private;
 }
 
-/// \brief Matches non-static data members that are bit-fields.
+/// Matches non-static data members that are bit-fields.
 ///
 /// Given
 /// \code
@@ -577,7 +577,7 @@
   return Node.isBitField();
 }
 
-/// \brief Matches non-static data members that are bit-fields of the specified
+/// Matches non-static data members that are bit-fields of the specified
 /// bit width.
 ///
 /// Given
@@ -595,7 +595,7 @@
          Node.getBitWidthValue(Finder->getASTContext()) == Width;
 }
 
-/// \brief Matches non-static data members that have an in-class initializer.
+/// Matches non-static data members that have an in-class initializer.
 ///
 /// Given
 /// \code
@@ -616,7 +616,13 @@
           InnerMatcher.matches(*Initializer, Finder, Builder));
 }
 
-/// \brief Matches the specialized template of a specialization declaration.
+/// Determines whether the function is "main", which is the entry point
+/// into an executable program.
+AST_MATCHER(FunctionDecl, isMain) {
+  return Node.isMain();
+}
+
+/// Matches the specialized template of a specialization declaration.
 ///
 /// Given
 /// \code
@@ -633,13 +639,13 @@
           InnerMatcher.matches(*Decl, Finder, Builder));
 }
 
-/// \brief Matches a declaration that has been implicitly added
+/// Matches a declaration that has been implicitly added
 /// by the compiler (eg. implicit default/copy constructors).
 AST_MATCHER(Decl, isImplicit) {
   return Node.isImplicit();
 }
 
-/// \brief Matches classTemplateSpecializations, templateSpecializationType and
+/// Matches classTemplateSpecializations, templateSpecializationType and
 /// functionDecl that have at least one TemplateArgument matching the given
 /// InnerMatcher.
 ///
@@ -672,7 +678,7 @@
                              Builder);
 }
 
-/// \brief Matches expressions that match InnerMatcher after any implicit AST
+/// Matches expressions that match InnerMatcher after any implicit AST
 /// nodes are stripped off.
 ///
 /// Parentheses and explicit casts are not discarded.
@@ -698,7 +704,7 @@
   return InnerMatcher.matches(*Node.IgnoreImplicit(), Finder, Builder);
 }
 
-/// \brief Matches expressions that match InnerMatcher after any implicit casts
+/// Matches expressions that match InnerMatcher after any implicit casts
 /// are stripped off.
 ///
 /// Parentheses and explicit casts are not discarded.
@@ -728,7 +734,7 @@
   return InnerMatcher.matches(*Node.IgnoreImpCasts(), Finder, Builder);
 }
 
-/// \brief Matches expressions that match InnerMatcher after parentheses and
+/// Matches expressions that match InnerMatcher after parentheses and
 /// casts are stripped off.
 ///
 /// Implicit and non-C Style casts are also discarded.
@@ -749,7 +755,7 @@
   return InnerMatcher.matches(*Node.IgnoreParenCasts(), Finder, Builder);
 }
 
-/// \brief Matches expressions that match InnerMatcher after implicit casts and
+/// Matches expressions that match InnerMatcher after implicit casts and
 /// parentheses are stripped off.
 ///
 /// Explicit casts are not discarded.
@@ -775,7 +781,7 @@
   return InnerMatcher.matches(*Node.IgnoreParenImpCasts(), Finder, Builder);
 }
 
-/// \brief Matches types that match InnerMatcher after any parens are stripped.
+/// Matches types that match InnerMatcher after any parens are stripped.
 ///
 /// Given
 /// \code
@@ -791,7 +797,7 @@
   return InnerMatcher.matches(Node.IgnoreParens(), Finder, Builder);
 }
 
-/// \brief Matches classTemplateSpecializations, templateSpecializationType and
+/// Matches classTemplateSpecializations, templateSpecializationType and
 /// functionDecl where the n'th TemplateArgument matches the given InnerMatcher.
 ///
 /// Given
@@ -822,7 +828,7 @@
   return InnerMatcher.matches(List[N], Finder, Builder);
 }
 
-/// \brief Matches if the number of template arguments equals \p N.
+/// Matches if the number of template arguments equals \p N.
 ///
 /// Given
 /// \code
@@ -839,7 +845,7 @@
   return internal::getTemplateSpecializationArgs(Node).size() == N;
 }
 
-/// \brief Matches a TemplateArgument that refers to a certain type.
+/// Matches a TemplateArgument that refers to a certain type.
 ///
 /// Given
 /// \code
@@ -857,7 +863,7 @@
   return InnerMatcher.matches(Node.getAsType(), Finder, Builder);
 }
 
-/// \brief Matches a TemplateArgument that refers to a certain template.
+/// Matches a TemplateArgument that refers to a certain template.
 ///
 /// Given
 /// \code
@@ -875,7 +881,7 @@
   return InnerMatcher.matches(Node.getAsTemplate(), Finder, Builder);
 }
 
-/// \brief Matches a canonical TemplateArgument that refers to a certain
+/// Matches a canonical TemplateArgument that refers to a certain
 /// declaration.
 ///
 /// Given
@@ -895,7 +901,7 @@
   return false;
 }
 
-/// \brief Matches a sugar TemplateArgument that refers to a certain expression.
+/// Matches a sugar TemplateArgument that refers to a certain expression.
 ///
 /// Given
 /// \code
@@ -913,7 +919,7 @@
   return false;
 }
 
-/// \brief Matches a TemplateArgument that is an integral value.
+/// Matches a TemplateArgument that is an integral value.
 ///
 /// Given
 /// \code
@@ -928,7 +934,7 @@
   return Node.getKind() == TemplateArgument::Integral;
 }
 
-/// \brief Matches a TemplateArgument that referes to an integral type.
+/// Matches a TemplateArgument that referes to an integral type.
 ///
 /// Given
 /// \code
@@ -945,7 +951,7 @@
   return InnerMatcher.matches(Node.getIntegralType(), Finder, Builder);
 }
 
-/// \brief Matches a TemplateArgument of integral type with a given value.
+/// Matches a TemplateArgument of integral type with a given value.
 ///
 /// Note that 'Value' is a string as the template argument's value is
 /// an arbitrary precision integer. 'Value' must be euqal to the canonical
@@ -966,7 +972,20 @@
   return Node.getAsIntegral().toString(10) == Value;
 }
 
-/// \brief Matches any value declaration.
+/// Matches an Objective-C autorelease pool statement.
+///
+/// Given
+/// \code
+///   @autoreleasepool {
+///     int x = 0;
+///   }
+/// \endcode
+/// autoreleasePoolStmt(stmt()) matches the declaration of "x"
+/// inside the autorelease pool.
+extern const internal::VariadicDynCastAllOfMatcher<Stmt,
+       ObjCAutoreleasePoolStmt> autoreleasePoolStmt;
+
+/// Matches any value declaration.
 ///
 /// Example matches A, B, C and F
 /// \code
@@ -975,7 +994,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl> valueDecl;
 
-/// \brief Matches C++ constructor declarations.
+/// Matches C++ constructor declarations.
 ///
 /// Example matches Foo::Foo() and Foo::Foo(int)
 /// \code
@@ -989,7 +1008,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConstructorDecl>
     cxxConstructorDecl;
 
-/// \brief Matches explicit C++ destructor declarations.
+/// Matches explicit C++ destructor declarations.
 ///
 /// Example matches Foo::~Foo()
 /// \code
@@ -1001,7 +1020,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDestructorDecl>
     cxxDestructorDecl;
 
-/// \brief Matches enum declarations.
+/// Matches enum declarations.
 ///
 /// Example matches X
 /// \code
@@ -1011,7 +1030,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl> enumDecl;
 
-/// \brief Matches enum constants.
+/// Matches enum constants.
 ///
 /// Example matches A, B, C
 /// \code
@@ -1022,7 +1041,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumConstantDecl>
     enumConstantDecl;
 
-/// \brief Matches method declarations.
+/// Matches method declarations.
 ///
 /// Example matches y
 /// \code
@@ -1031,7 +1050,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
     cxxMethodDecl;
 
-/// \brief Matches conversion operator declarations.
+/// Matches conversion operator declarations.
 ///
 /// Example matches the operator.
 /// \code
@@ -1040,7 +1059,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
     cxxConversionDecl;
 
-/// \brief Matches variable declarations.
+/// Matches variable declarations.
 ///
 /// Note: this does not match declarations of member variables, which are
 /// "field" declarations in Clang parlance.
@@ -1051,7 +1070,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl> varDecl;
 
-/// \brief Matches field declarations.
+/// Matches field declarations.
 ///
 /// Given
 /// \code
@@ -1061,7 +1080,7 @@
 ///   matches 'm'.
 extern const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl> fieldDecl;
 
-/// \brief Matches function declarations.
+/// Matches function declarations.
 ///
 /// Example matches f
 /// \code
@@ -1070,7 +1089,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
     functionDecl;
 
-/// \brief Matches C++ function template declarations.
+/// Matches C++ function template declarations.
 ///
 /// Example matches f
 /// \code
@@ -1079,7 +1098,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionTemplateDecl>
     functionTemplateDecl;
 
-/// \brief Matches friend declarations.
+/// Matches friend declarations.
 ///
 /// Given
 /// \code
@@ -1089,7 +1108,7 @@
 ///   matches 'friend void foo()'.
 extern const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl> friendDecl;
 
-/// \brief Matches statements.
+/// Matches statements.
 ///
 /// Given
 /// \code
@@ -1099,7 +1118,7 @@
 ///   matches both the compound statement '{ ++a; }' and '++a'.
 extern const internal::VariadicAllOfMatcher<Stmt> stmt;
 
-/// \brief Matches declaration statements.
+/// Matches declaration statements.
 ///
 /// Given
 /// \code
@@ -1109,7 +1128,7 @@
 ///   matches 'int a'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclStmt> declStmt;
 
-/// \brief Matches member expressions.
+/// Matches member expressions.
 ///
 /// Given
 /// \code
@@ -1122,7 +1141,7 @@
 ///   matches this->x, x, y.x, a, this->b
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr> memberExpr;
 
-/// \brief Matches call expressions.
+/// Matches call expressions.
 ///
 /// Example matches x.y() and y()
 /// \code
@@ -1132,7 +1151,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr> callExpr;
 
-/// \brief Matches lambda expressions.
+/// Matches lambda expressions.
 ///
 /// Example matches [&](){return 5;}
 /// \code
@@ -1140,7 +1159,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr> lambdaExpr;
 
-/// \brief Matches member call expressions.
+/// Matches member call expressions.
 ///
 /// Example matches x.y()
 /// \code
@@ -1150,7 +1169,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXMemberCallExpr>
     cxxMemberCallExpr;
 
-/// \brief Matches ObjectiveC Message invocation expressions.
+/// Matches ObjectiveC Message invocation expressions.
 ///
 /// The innermost message send invokes the "alloc" class method on the
 /// NSString class, while the outermost message send invokes the
@@ -1162,7 +1181,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr>
     objcMessageExpr;
 
-/// \brief Matches Objective-C interface declarations.
+/// Matches Objective-C interface declarations.
 ///
 /// Example matches Foo
 /// \code
@@ -1172,7 +1191,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCInterfaceDecl>
     objcInterfaceDecl;
 
-/// \brief Matches Objective-C implementation declarations.
+/// Matches Objective-C implementation declarations.
 ///
 /// Example matches Foo
 /// \code
@@ -1182,7 +1201,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCImplementationDecl>
     objcImplementationDecl;
 
-/// \brief Matches Objective-C protocol declarations.
+/// Matches Objective-C protocol declarations.
 ///
 /// Example matches FooDelegate
 /// \code
@@ -1192,7 +1211,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCProtocolDecl>
     objcProtocolDecl;
 
-/// \brief Matches Objective-C category declarations.
+/// Matches Objective-C category declarations.
 ///
 /// Example matches Foo (Additions)
 /// \code
@@ -1202,7 +1221,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryDecl>
     objcCategoryDecl;
 
-/// \brief Matches Objective-C category definitions.
+/// Matches Objective-C category definitions.
 ///
 /// Example matches Foo (Additions)
 /// \code
@@ -1212,7 +1231,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryImplDecl>
     objcCategoryImplDecl;
 
-/// \brief Matches Objective-C method declarations.
+/// Matches Objective-C method declarations.
 ///
 /// Example matches both declaration and definition of -[Foo method]
 /// \code
@@ -1227,7 +1246,20 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCMethodDecl>
     objcMethodDecl;
 
-/// \brief Matches Objective-C instance variable declarations.
+/// Matches block declarations.
+///
+/// Example matches the declaration of the nameless block printing an input
+/// integer.
+///
+/// \code
+///   myFunc(^(int p) {
+///     printf("%d", p);
+///   })
+/// \endcode
+extern const internal::VariadicDynCastAllOfMatcher<Decl, BlockDecl>
+    blockDecl;
+
+/// Matches Objective-C instance variable declarations.
 ///
 /// Example matches _enabled
 /// \code
@@ -1239,7 +1271,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCIvarDecl>
     objcIvarDecl;
 
-/// \brief Matches Objective-C property declarations.
+/// Matches Objective-C property declarations.
 ///
 /// Example matches enabled
 /// \code
@@ -1250,7 +1282,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCPropertyDecl>
     objcPropertyDecl;
 
-/// \brief Matches Objective-C \@throw statements.
+/// Matches Objective-C \@throw statements.
 ///
 /// Example matches \@throw
 /// \code
@@ -1259,7 +1291,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtThrowStmt>
     objcThrowStmt;
 
-/// \brief Matches Objective-C @try statements.
+/// Matches Objective-C @try statements.
 ///
 /// Example matches @try
 /// \code
@@ -1269,7 +1301,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtTryStmt>
     objcTryStmt;
 
-/// \brief Matches Objective-C @catch statements.
+/// Matches Objective-C @catch statements.
 ///
 /// Example matches @catch
 /// \code
@@ -1279,7 +1311,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtCatchStmt>
     objcCatchStmt;
 
-/// \brief Matches Objective-C @finally statements.
+/// Matches Objective-C @finally statements.
 ///
 /// Example matches @finally
 /// \code
@@ -1289,7 +1321,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtFinallyStmt>
     objcFinallyStmt;
 
-/// \brief Matches expressions that introduce cleanups to be run at the end
+/// Matches expressions that introduce cleanups to be run at the end
 /// of the sub-expression's evaluation.
 ///
 /// Example matches std::string()
@@ -1299,7 +1331,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
     exprWithCleanups;
 
-/// \brief Matches init list expressions.
+/// Matches init list expressions.
 ///
 /// Given
 /// \code
@@ -1312,7 +1344,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
     initListExpr;
 
-/// \brief Matches the syntactic form of init list expressions
+/// Matches the syntactic form of init list expressions
 /// (if expression have it).
 AST_MATCHER_P(InitListExpr, hasSyntacticForm,
               internal::Matcher<Expr>, InnerMatcher) {
@@ -1321,7 +1353,7 @@
           InnerMatcher.matches(*SyntForm, Finder, Builder));
 }
 
-/// \brief Matches C++ initializer list expressions.
+/// Matches C++ initializer list expressions.
 ///
 /// Given
 /// \code
@@ -1336,7 +1368,7 @@
                                                    CXXStdInitializerListExpr>
     cxxStdInitializerListExpr;
 
-/// \brief Matches implicit initializers of init list expressions.
+/// Matches implicit initializers of init list expressions.
 ///
 /// Given
 /// \code
@@ -1347,7 +1379,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitValueInitExpr>
     implicitValueInitExpr;
 
-/// \brief Matches paren list expressions.
+/// Matches paren list expressions.
 /// ParenListExprs don't have a predefined type and are used for late parsing.
 /// In the final AST, they can be met in template declarations.
 ///
@@ -1365,7 +1397,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenListExpr>
     parenListExpr;
 
-/// \brief Matches substitutions of non-type template parameters.
+/// Matches substitutions of non-type template parameters.
 ///
 /// Given
 /// \code
@@ -1379,7 +1411,7 @@
                                                    SubstNonTypeTemplateParmExpr>
     substNonTypeTemplateParmExpr;
 
-/// \brief Matches using declarations.
+/// Matches using declarations.
 ///
 /// Given
 /// \code
@@ -1390,7 +1422,7 @@
 ///   matches \code using X::x \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl> usingDecl;
 
-/// \brief Matches using namespace declarations.
+/// Matches using namespace declarations.
 ///
 /// Given
 /// \code
@@ -1402,7 +1434,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
     usingDirectiveDecl;
 
-/// \brief Matches reference to a name that can be looked up during parsing
+/// Matches reference to a name that can be looked up during parsing
 /// but could not be resolved to a specific declaration.
 ///
 /// Given
@@ -1419,7 +1451,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
     unresolvedLookupExpr;
 
-/// \brief Matches unresolved using value declarations.
+/// Matches unresolved using value declarations.
 ///
 /// Given
 /// \code
@@ -1434,7 +1466,7 @@
                                                    UnresolvedUsingValueDecl>
     unresolvedUsingValueDecl;
 
-/// \brief Matches unresolved using value declarations that involve the
+/// Matches unresolved using value declarations that involve the
 /// typename.
 ///
 /// Given
@@ -1453,7 +1485,7 @@
                                                    UnresolvedUsingTypenameDecl>
     unresolvedUsingTypenameDecl;
 
-/// \brief Matches parentheses used in expressions.
+/// Matches parentheses used in expressions.
 ///
 /// Example matches (foo() + 1)
 /// \code
@@ -1462,7 +1494,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenExpr> parenExpr;
 
-/// \brief Matches constructor call expressions (including implicit ones).
+/// Matches constructor call expressions (including implicit ones).
 ///
 /// Example matches string(ptr, n) and ptr within arguments of f
 ///     (matcher = cxxConstructExpr())
@@ -1475,7 +1507,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstructExpr>
     cxxConstructExpr;
 
-/// \brief Matches unresolved constructor call expressions.
+/// Matches unresolved constructor call expressions.
 ///
 /// Example matches T(t) in return statement of f
 ///     (matcher = cxxUnresolvedConstructExpr())
@@ -1487,7 +1519,7 @@
                                                    CXXUnresolvedConstructExpr>
     cxxUnresolvedConstructExpr;
 
-/// \brief Matches implicit and explicit this expressions.
+/// Matches implicit and explicit this expressions.
 ///
 /// Example matches the implicit this expression in "return i".
 ///     (matcher = cxxThisExpr())
@@ -1500,7 +1532,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
     cxxThisExpr;
 
-/// \brief Matches nodes where temporaries are created.
+/// Matches nodes where temporaries are created.
 ///
 /// Example matches FunctionTakesString(GetStringByValue())
 ///     (matcher = cxxBindTemporaryExpr())
@@ -1511,7 +1543,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBindTemporaryExpr>
     cxxBindTemporaryExpr;
 
-/// \brief Matches nodes where temporaries are materialized.
+/// Matches nodes where temporaries are materialized.
 ///
 /// Example: Given
 /// \code
@@ -1533,7 +1565,7 @@
                                                    MaterializeTemporaryExpr>
     materializeTemporaryExpr;
 
-/// \brief Matches new expressions.
+/// Matches new expressions.
 ///
 /// Given
 /// \code
@@ -1543,7 +1575,7 @@
 ///   matches 'new X'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr> cxxNewExpr;
 
-/// \brief Matches delete expressions.
+/// Matches delete expressions.
 ///
 /// Given
 /// \code
@@ -1554,7 +1586,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
     cxxDeleteExpr;
 
-/// \brief Matches array subscript expressions.
+/// Matches array subscript expressions.
 ///
 /// Given
 /// \code
@@ -1565,7 +1597,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ArraySubscriptExpr>
     arraySubscriptExpr;
 
-/// \brief Matches the value of a default argument at the call site.
+/// Matches the value of a default argument at the call site.
 ///
 /// Example matches the CXXDefaultArgExpr placeholder inserted for the
 ///     default value of the second parameter in the call expression f(42)
@@ -1577,7 +1609,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDefaultArgExpr>
     cxxDefaultArgExpr;
 
-/// \brief Matches overloaded operator calls.
+/// Matches overloaded operator calls.
 ///
 /// Note that if an operator isn't overloaded, it won't match. Instead, use
 /// binaryOperator matcher.
@@ -1594,7 +1626,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXOperatorCallExpr>
     cxxOperatorCallExpr;
 
-/// \brief Matches expressions.
+/// Matches expressions.
 ///
 /// Example matches x()
 /// \code
@@ -1602,7 +1634,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, Expr> expr;
 
-/// \brief Matches expressions that refer to declarations.
+/// Matches expressions that refer to declarations.
 ///
 /// Example matches x in if (x)
 /// \code
@@ -1612,7 +1644,21 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
     declRefExpr;
 
-/// \brief Matches if statements.
+/// Matches a reference to an ObjCIvar.
+///
+/// Example: matches "a" in "init" method:
+/// \code
+/// @implementation A {
+///   NSString *a;
+/// }
+/// - (void) init {
+///   a = @"hello";
+/// }
+/// \endcode
+extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCIvarRefExpr>
+    objcIvarRefExpr;
+
+/// Matches if statements.
 ///
 /// Example matches 'if (x) {}'
 /// \code
@@ -1620,7 +1666,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt> ifStmt;
 
-/// \brief Matches for statements.
+/// Matches for statements.
 ///
 /// Example matches 'for (;;) {}'
 /// \code
@@ -1629,7 +1675,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt> forStmt;
 
-/// \brief Matches the increment statement of a for loop.
+/// Matches the increment statement of a for loop.
 ///
 /// Example:
 ///     forStmt(hasIncrement(unaryOperator(hasOperatorName("++"))))
@@ -1644,7 +1690,7 @@
           InnerMatcher.matches(*Increment, Finder, Builder));
 }
 
-/// \brief Matches the initialization statement of a for loop.
+/// Matches the initialization statement of a for loop.
 ///
 /// Example:
 ///     forStmt(hasLoopInit(declStmt()))
@@ -1658,7 +1704,7 @@
   return (Init != nullptr && InnerMatcher.matches(*Init, Finder, Builder));
 }
 
-/// \brief Matches range-based for statements.
+/// Matches range-based for statements.
 ///
 /// cxxForRangeStmt() matches 'for (auto a : i)'
 /// \code
@@ -1668,7 +1714,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
     cxxForRangeStmt;
 
-/// \brief Matches the initialization statement of a for loop.
+/// Matches the initialization statement of a for loop.
 ///
 /// Example:
 ///     forStmt(hasLoopVariable(anything()))
@@ -1682,7 +1728,7 @@
   return (Var != nullptr && InnerMatcher.matches(*Var, Finder, Builder));
 }
 
-/// \brief Matches the range initialization statement of a for loop.
+/// Matches the range initialization statement of a for loop.
 ///
 /// Example:
 ///     forStmt(hasRangeInit(anything()))
@@ -1696,7 +1742,7 @@
   return (Init != nullptr && InnerMatcher.matches(*Init, Finder, Builder));
 }
 
-/// \brief Matches while statements.
+/// Matches while statements.
 ///
 /// Given
 /// \code
@@ -1706,7 +1752,7 @@
 ///   matches 'while (true) {}'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt> whileStmt;
 
-/// \brief Matches do statements.
+/// Matches do statements.
 ///
 /// Given
 /// \code
@@ -1716,7 +1762,7 @@
 ///   matches 'do {} while(true)'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt> doStmt;
 
-/// \brief Matches break statements.
+/// Matches break statements.
 ///
 /// Given
 /// \code
@@ -1726,7 +1772,7 @@
 ///   matches 'break'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt> breakStmt;
 
-/// \brief Matches continue statements.
+/// Matches continue statements.
 ///
 /// Given
 /// \code
@@ -1737,7 +1783,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
     continueStmt;
 
-/// \brief Matches return statements.
+/// Matches return statements.
 ///
 /// Given
 /// \code
@@ -1747,7 +1793,7 @@
 ///   matches 'return 1'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt> returnStmt;
 
-/// \brief Matches goto statements.
+/// Matches goto statements.
 ///
 /// Given
 /// \code
@@ -1758,7 +1804,7 @@
 ///   matches 'goto FOO'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt> gotoStmt;
 
-/// \brief Matches label statements.
+/// Matches label statements.
 ///
 /// Given
 /// \code
@@ -1769,7 +1815,7 @@
 ///   matches 'FOO:'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt> labelStmt;
 
-/// \brief Matches address of label statements (GNU extension).
+/// Matches address of label statements (GNU extension).
 ///
 /// Given
 /// \code
@@ -1782,7 +1828,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AddrLabelExpr>
     addrLabelExpr;
 
-/// \brief Matches switch statements.
+/// Matches switch statements.
 ///
 /// Given
 /// \code
@@ -1792,7 +1838,7 @@
 ///   matches 'switch(a)'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt> switchStmt;
 
-/// \brief Matches case and default statements inside switch statements.
+/// Matches case and default statements inside switch statements.
 ///
 /// Given
 /// \code
@@ -1802,7 +1848,7 @@
 ///   matches 'case 42:' and 'default:'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase> switchCase;
 
-/// \brief Matches case statements inside switch statements.
+/// Matches case statements inside switch statements.
 ///
 /// Given
 /// \code
@@ -1812,7 +1858,7 @@
 ///   matches 'case 42:'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt> caseStmt;
 
-/// \brief Matches default statements inside switch statements.
+/// Matches default statements inside switch statements.
 ///
 /// Given
 /// \code
@@ -1823,7 +1869,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
     defaultStmt;
 
-/// \brief Matches compound statements.
+/// Matches compound statements.
 ///
 /// Example matches '{}' and '{{}}' in 'for (;;) {{}}'
 /// \code
@@ -1832,7 +1878,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
     compoundStmt;
 
-/// \brief Matches catch statements.
+/// Matches catch statements.
 ///
 /// \code
 ///   try {} catch(int i) {}
@@ -1842,7 +1888,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
     cxxCatchStmt;
 
-/// \brief Matches try statements.
+/// Matches try statements.
 ///
 /// \code
 ///   try {} catch(int i) {}
@@ -1851,7 +1897,7 @@
 ///   matches 'try {}'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt> cxxTryStmt;
 
-/// \brief Matches throw expressions.
+/// Matches throw expressions.
 ///
 /// \code
 ///   try { throw 5; } catch(int i) {}
@@ -1861,7 +1907,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
     cxxThrowExpr;
 
-/// \brief Matches null statements.
+/// Matches null statements.
 ///
 /// \code
 ///   foo();;
@@ -1870,7 +1916,7 @@
 ///   matches the second ';'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt> nullStmt;
 
-/// \brief Matches asm statements.
+/// Matches asm statements.
 ///
 /// \code
 ///  int i = 100;
@@ -1880,7 +1926,7 @@
 ///   matches '__asm("mov al, 2")'
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt> asmStmt;
 
-/// \brief Matches bool literals.
+/// Matches bool literals.
 ///
 /// Example matches true
 /// \code
@@ -1889,7 +1935,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
     cxxBoolLiteral;
 
-/// \brief Matches string literals (also matches wide string literals).
+/// Matches string literals (also matches wide string literals).
 ///
 /// Example matches "abcd", L"abcd"
 /// \code
@@ -1899,7 +1945,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral>
     stringLiteral;
 
-/// \brief Matches character literals (also matches wchar_t).
+/// Matches character literals (also matches wchar_t).
 ///
 /// Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral),
 /// though.
@@ -1912,14 +1958,14 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral>
     characterLiteral;
 
-/// \brief Matches integer literals of all sizes / encodings, e.g.
+/// Matches integer literals of all sizes / encodings, e.g.
 /// 1, 1L, 0x1 and 1U.
 ///
 /// Does not match character-encoded integers such as L'a'.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral>
     integerLiteral;
 
-/// \brief Matches float literals of all sizes / encodings, e.g.
+/// Matches float literals of all sizes / encodings, e.g.
 /// 1.0, 1.0f, 1.0L and 1e10.
 ///
 /// Does not match implicit conversions such as
@@ -1929,13 +1975,18 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral>
     floatLiteral;
 
-/// \brief Matches user defined literal operator call.
+/// Matches imaginary literals, which are based on integer and floating
+/// point literals e.g.: 1i, 1.0i
+extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImaginaryLiteral>
+    imaginaryLiteral;
+
+/// Matches user defined literal operator call.
 ///
 /// Example match: "foo"_suffix
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral>
     userDefinedLiteral;
 
-/// \brief Matches compound (i.e. non-scalar) literals
+/// Matches compound (i.e. non-scalar) literals
 ///
 /// Example match: {1}, (1, 2)
 /// \code
@@ -1945,22 +1996,22 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr>
     compoundLiteralExpr;
 
-/// \brief Matches nullptr literal.
+/// Matches nullptr literal.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
     cxxNullPtrLiteralExpr;
 
-/// \brief Matches GNU __null expression.
+/// Matches GNU __null expression.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
     gnuNullExpr;
 
-/// \brief Matches atomic builtins.
+/// Matches atomic builtins.
 /// Example matches __atomic_load_n(ptr, 1)
 /// \code
 ///   void foo() { int *ptr; __atomic_load_n(ptr, 1); }
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AtomicExpr> atomicExpr;
 
-/// \brief Matches statement expression (GNU extension).
+/// Matches statement expression (GNU extension).
 ///
 /// Example match: ({ int X = 4; X; })
 /// \code
@@ -1968,7 +2019,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StmtExpr> stmtExpr;
 
-/// \brief Matches binary operator expressions.
+/// Matches binary operator expressions.
 ///
 /// Example matches a || b
 /// \code
@@ -1977,7 +2028,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryOperator>
     binaryOperator;
 
-/// \brief Matches unary operator expressions.
+/// Matches unary operator expressions.
 ///
 /// Example matches !a
 /// \code
@@ -1986,7 +2037,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryOperator>
     unaryOperator;
 
-/// \brief Matches conditional operator expressions.
+/// Matches conditional operator expressions.
 ///
 /// Example matches a ? b : c
 /// \code
@@ -1995,7 +2046,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ConditionalOperator>
     conditionalOperator;
 
-/// \brief Matches binary conditional operator expressions (GNU extension).
+/// Matches binary conditional operator expressions (GNU extension).
 ///
 /// Example matches a ?: b
 /// \code
@@ -2005,7 +2056,7 @@
                                                    BinaryConditionalOperator>
     binaryConditionalOperator;
 
-/// \brief Matches opaque value expressions. They are used as helpers
+/// Matches opaque value expressions. They are used as helpers
 /// to reference another expressions and can be met
 /// in BinaryConditionalOperators, for example.
 ///
@@ -2016,7 +2067,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, OpaqueValueExpr>
     opaqueValueExpr;
 
-/// \brief Matches a C++ static_assert declaration.
+/// Matches a C++ static_assert declaration.
 ///
 /// Example:
 ///   staticAssertExpr()
@@ -2032,7 +2083,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Decl, StaticAssertDecl>
     staticAssertDecl;
 
-/// \brief Matches a reinterpret_cast expression.
+/// Matches a reinterpret_cast expression.
 ///
 /// Either the source expression or the destination type can be matched
 /// using has(), but hasDestinationType() is more specific and can be
@@ -2045,7 +2096,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXReinterpretCastExpr>
     cxxReinterpretCastExpr;
 
-/// \brief Matches a C++ static_cast expression.
+/// Matches a C++ static_cast expression.
 ///
 /// \see hasDestinationType
 /// \see reinterpretCast
@@ -2061,7 +2112,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStaticCastExpr>
     cxxStaticCastExpr;
 
-/// \brief Matches a dynamic_cast expression.
+/// Matches a dynamic_cast expression.
 ///
 /// Example:
 ///   cxxDynamicCastExpr()
@@ -2076,7 +2127,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDynamicCastExpr>
     cxxDynamicCastExpr;
 
-/// \brief Matches a const_cast expression.
+/// Matches a const_cast expression.
 ///
 /// Example: Matches const_cast<int*>(&r) in
 /// \code
@@ -2087,7 +2138,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstCastExpr>
     cxxConstCastExpr;
 
-/// \brief Matches a C-style cast expression.
+/// Matches a C-style cast expression.
 ///
 /// Example: Matches (int) 2.2f in
 /// \code
@@ -2096,7 +2147,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CStyleCastExpr>
     cStyleCastExpr;
 
-/// \brief Matches explicit cast expressions.
+/// Matches explicit cast expressions.
 ///
 /// Matches any cast expression written in user code, whether it be a
 /// C-style cast, a functional-style cast, or a keyword cast.
@@ -2120,14 +2171,14 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExplicitCastExpr>
     explicitCastExpr;
 
-/// \brief Matches the implicit cast nodes of Clang's AST.
+/// Matches the implicit cast nodes of Clang's AST.
 ///
 /// This matches many different places, including function call return value
 /// eliding, as well as any type conversions.
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitCastExpr>
     implicitCastExpr;
 
-/// \brief Matches any cast nodes of Clang's AST.
+/// Matches any cast nodes of Clang's AST.
 ///
 /// Example: castExpr() matches each of the following:
 /// \code
@@ -2142,7 +2193,7 @@
 /// \endcode
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr> castExpr;
 
-/// \brief Matches functional cast expressions
+/// Matches functional cast expressions
 ///
 /// Example: Matches Foo(bar);
 /// \code
@@ -2153,7 +2204,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXFunctionalCastExpr>
     cxxFunctionalCastExpr;
 
-/// \brief Matches functional cast expressions having N != 1 arguments
+/// Matches functional cast expressions having N != 1 arguments
 ///
 /// Example: Matches Foo(bar, bar)
 /// \code
@@ -2162,7 +2213,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTemporaryObjectExpr>
     cxxTemporaryObjectExpr;
 
-/// \brief Matches predefined identifier expressions [C99 6.4.2.2].
+/// Matches predefined identifier expressions [C99 6.4.2.2].
 ///
 /// Example: Matches __func__
 /// \code
@@ -2171,7 +2222,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, PredefinedExpr>
     predefinedExpr;
 
-/// \brief Matches C99 designated initializer expressions [C99 6.7.8].
+/// Matches C99 designated initializer expressions [C99 6.7.8].
 ///
 /// Example: Matches { [2].y = 1.0, [0].x = 1.0 }
 /// \code
@@ -2180,7 +2231,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DesignatedInitExpr>
     designatedInitExpr;
 
-/// \brief Matches designated initializer expressions that contain
+/// Matches designated initializer expressions that contain
 /// a specific number of designators.
 ///
 /// Example: Given
@@ -2195,16 +2246,16 @@
   return Node.size() == N;
 }
 
-/// \brief Matches \c QualTypes in the clang AST.
+/// Matches \c QualTypes in the clang AST.
 extern const internal::VariadicAllOfMatcher<QualType> qualType;
 
-/// \brief Matches \c Types in the clang AST.
+/// Matches \c Types in the clang AST.
 extern const internal::VariadicAllOfMatcher<Type> type;
 
-/// \brief Matches \c TypeLocs in the clang AST.
+/// Matches \c TypeLocs in the clang AST.
 extern const internal::VariadicAllOfMatcher<TypeLoc> typeLoc;
 
-/// \brief Matches if any of the given matchers matches.
+/// Matches if any of the given matchers matches.
 ///
 /// Unlike \c anyOf, \c eachOf will generate a match result for each
 /// matching submatcher.
@@ -2227,21 +2278,21 @@
     2, std::numeric_limits<unsigned>::max()>
     eachOf;
 
-/// \brief Matches if any of the given matchers matches.
+/// Matches if any of the given matchers matches.
 ///
 /// Usable as: Any Matcher
 extern const internal::VariadicOperatorMatcherFunc<
     2, std::numeric_limits<unsigned>::max()>
     anyOf;
 
-/// \brief Matches if all given matchers match.
+/// Matches if all given matchers match.
 ///
 /// Usable as: Any Matcher
 extern const internal::VariadicOperatorMatcherFunc<
     2, std::numeric_limits<unsigned>::max()>
     allOf;
 
-/// \brief Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
+/// Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
 ///
 /// Given
 /// \code
@@ -2254,7 +2305,7 @@
                                                    UnaryExprOrTypeTraitExpr>
     unaryExprOrTypeTraitExpr;
 
-/// \brief Matches unary expressions that have a specific type of argument.
+/// Matches unary expressions that have a specific type of argument.
 ///
 /// Given
 /// \code
@@ -2268,7 +2319,7 @@
   return InnerMatcher.matches(ArgumentType, Finder, Builder);
 }
 
-/// \brief Matches unary expressions of a certain kind.
+/// Matches unary expressions of a certain kind.
 ///
 /// Given
 /// \code
@@ -2281,7 +2332,7 @@
   return Node.getKind() == Kind;
 }
 
-/// \brief Same as unaryExprOrTypeTraitExpr, but only matching
+/// Same as unaryExprOrTypeTraitExpr, but only matching
 /// alignof.
 inline internal::Matcher<Stmt> alignOfExpr(
     const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
@@ -2289,7 +2340,7 @@
       ofKind(UETT_AlignOf), InnerMatcher)));
 }
 
-/// \brief Same as unaryExprOrTypeTraitExpr, but only matching
+/// Same as unaryExprOrTypeTraitExpr, but only matching
 /// sizeof.
 inline internal::Matcher<Stmt> sizeOfExpr(
     const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
@@ -2297,7 +2348,7 @@
       allOf(ofKind(UETT_SizeOf), InnerMatcher)));
 }
 
-/// \brief Matches NamedDecl nodes that have the specified name.
+/// Matches NamedDecl nodes that have the specified name.
 ///
 /// Supports specifying enclosing namespaces or classes by prefixing the name
 /// with '<enclosing>::'.
@@ -2316,7 +2367,7 @@
   return internal::Matcher<NamedDecl>(new internal::HasNameMatcher({Name}));
 }
 
-/// \brief Matches NamedDecl nodes that have any of the specified names.
+/// Matches NamedDecl nodes that have any of the specified names.
 ///
 /// This matcher is only provided as a performance optimization of hasName.
 /// \code
@@ -2330,7 +2381,7 @@
                                         internal::hasAnyNameFunc>
     hasAnyName;
 
-/// \brief Matches NamedDecl nodes whose fully qualified names contain
+/// Matches NamedDecl nodes whose fully qualified names contain
 /// a substring matched by the given RegExp.
 ///
 /// Supports specifying enclosing namespaces or classes by
@@ -2353,7 +2404,7 @@
   return RE.match(FullNameString);
 }
 
-/// \brief Matches overloaded operator names.
+/// Matches overloaded operator names.
 ///
 /// Matches overloaded operator names specified in strings without the
 /// "operator" prefix: e.g. "<<".
@@ -2381,7 +2432,7 @@
       AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr, FunctionDecl)>(Name);
 }
 
-/// \brief Matches C++ classes that are directly or indirectly derived from
+/// Matches C++ classes that are directly or indirectly derived from
 /// a class matching \c Base.
 ///
 /// Note that a class is not considered to be derived from itself.
@@ -2407,13 +2458,13 @@
   return Finder->classIsDerivedFrom(&Node, Base, Builder);
 }
 
-/// \brief Overloaded method as shortcut for \c isDerivedFrom(hasName(...)).
+/// Overloaded method as shortcut for \c isDerivedFrom(hasName(...)).
 AST_MATCHER_P_OVERLOAD(CXXRecordDecl, isDerivedFrom, std::string, BaseName, 1) {
   assert(!BaseName.empty());
   return isDerivedFrom(hasName(BaseName)).matches(Node, Finder, Builder);
 }
 
-/// \brief Similar to \c isDerivedFrom(), but also matches classes that directly
+/// Similar to \c isDerivedFrom(), but also matches classes that directly
 /// match \c Base.
 AST_MATCHER_P_OVERLOAD(CXXRecordDecl, isSameOrDerivedFrom,
                        internal::Matcher<NamedDecl>, Base, 0) {
@@ -2421,7 +2472,7 @@
       .matches(Node, Finder, Builder);
 }
 
-/// \brief Overloaded method as shortcut for
+/// Overloaded method as shortcut for
 /// \c isSameOrDerivedFrom(hasName(...)).
 AST_MATCHER_P_OVERLOAD(CXXRecordDecl, isSameOrDerivedFrom, std::string,
                        BaseName, 1) {
@@ -2429,7 +2480,7 @@
   return isSameOrDerivedFrom(hasName(BaseName)).matches(Node, Finder, Builder);
 }
 
-/// \brief Matches the first method of a class or struct that satisfies \c
+/// Matches the first method of a class or struct that satisfies \c
 /// InnerMatcher.
 ///
 /// Given:
@@ -2446,7 +2497,7 @@
                                     Node.method_end(), Finder, Builder);
 }
 
-/// \brief Matches the generated class of lambda expressions.
+/// Matches the generated class of lambda expressions.
 ///
 /// Given:
 /// \code
@@ -2459,7 +2510,7 @@
   return Node.isLambda();
 }
 
-/// \brief Matches AST nodes that have child AST nodes that match the
+/// Matches AST nodes that have child AST nodes that match the
 /// provided matcher.
 ///
 /// Example matches X, Y
@@ -2479,7 +2530,7 @@
 /// has(ignoringParenImpCasts(expr())).
 extern const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher> has;
 
-/// \brief Matches AST nodes that have descendant AST nodes that match the
+/// Matches AST nodes that have descendant AST nodes that match the
 /// provided matcher.
 ///
 /// Example matches X, Y, Z
@@ -2497,7 +2548,7 @@
     internal::HasDescendantMatcher>
     hasDescendant;
 
-/// \brief Matches AST nodes that have child AST nodes that match the
+/// Matches AST nodes that have child AST nodes that match the
 /// provided matcher.
 ///
 /// Example matches X, Y, Y::X, Z::Y, Z::Y::X
@@ -2518,7 +2569,7 @@
 extern const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
     forEach;
 
-/// \brief Matches AST nodes that have descendant AST nodes that match the
+/// Matches AST nodes that have descendant AST nodes that match the
 /// provided matcher.
 ///
 /// Example matches X, A, A::X, B, B::C, B::C::X
@@ -2549,7 +2600,7 @@
     internal::ForEachDescendantMatcher>
     forEachDescendant;
 
-/// \brief Matches if the node or any descendant matches.
+/// Matches if the node or any descendant matches.
 ///
 /// Generates results for each match.
 ///
@@ -2570,7 +2621,7 @@
   return eachOf(Matcher, forEachDescendant(Matcher));
 }
 
-/// \brief Matches AST nodes that have a parent that matches the provided
+/// Matches AST nodes that have a parent that matches the provided
 /// matcher.
 ///
 /// Given
@@ -2586,7 +2637,7 @@
     internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
     hasParent;
 
-/// \brief Matches AST nodes that have an ancestor that matches the provided
+/// Matches AST nodes that have an ancestor that matches the provided
 /// matcher.
 ///
 /// Given
@@ -2603,7 +2654,7 @@
     internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
     hasAncestor;
 
-/// \brief Matches if the provided matcher does not match.
+/// Matches if the provided matcher does not match.
 ///
 /// Example matches Y (matcher = cxxRecordDecl(unless(hasName("X"))))
 /// \code
@@ -2614,7 +2665,7 @@
 /// Usable as: Any Matcher
 extern const internal::VariadicOperatorMatcherFunc<1, 1> unless;
 
-/// \brief Matches a node if the declaration associated with that node
+/// Matches a node if the declaration associated with that node
 /// matches the given matcher.
 ///
 /// The associated declaration is:
@@ -2623,6 +2674,7 @@
 /// - for MemberExpr, the declaration of the referenced member
 /// - for CXXConstructExpr, the declaration of the constructor
 /// - for CXXNewExpr, the declaration of the operator new
+/// - for ObjCIvarExpr, the declaration of the ivar
 ///
 /// For type nodes, hasDeclaration will generally match the declaration of the
 /// sugared type. Given
@@ -2656,7 +2708,7 @@
       void(internal::HasDeclarationSupportedTypes)>(InnerMatcher);
 }
 
-/// \brief Matches a \c NamedDecl whose underlying declaration matches the given
+/// Matches a \c NamedDecl whose underlying declaration matches the given
 /// matcher.
 ///
 /// Given
@@ -2675,7 +2727,7 @@
          InnerMatcher.matches(*UnderlyingDecl, Finder, Builder);
 }
 
-/// \brief Matches on the implicit object argument of a member call expression.
+/// Matches on the implicit object argument of a member call expression.
 ///
 /// Example matches y.x()
 ///   (matcher = cxxMemberCallExpr(on(hasType(cxxRecordDecl(hasName("Y"))))))
@@ -2694,7 +2746,7 @@
 }
 
 
-/// \brief Matches on the receiver of an ObjectiveC Message expression.
+/// Matches on the receiver of an ObjectiveC Message expression.
 ///
 /// Example
 /// matcher = objCMessageExpr(hasReceiverType(asString("UIWebView *")));
@@ -2710,7 +2762,42 @@
   return InnerMatcher.matches(TypeDecl, Finder, Builder);
 }
 
-/// \brief Matches when BaseName == Selector.getAsString()
+/// Returns true when the Objective-C message is sent to an instance.
+///
+/// Example
+/// matcher = objcMessagaeExpr(isInstanceMessage())
+/// matches
+/// \code
+///   NSString *x = @"hello";
+///   [x containsString:@"h"];
+/// \endcode
+/// but not
+/// \code
+///   [NSString stringWithFormat:@"format"];
+/// \endcode
+AST_MATCHER(ObjCMessageExpr, isInstanceMessage) {
+  return Node.isInstanceMessage();
+}
+
+/// Matches if the Objective-C message is sent to an instance,
+/// and the inner matcher matches on that instance.
+///
+/// For example the method call in
+/// \code
+///   NSString *x = @"hello";
+///   [x containsString:@"h"];
+/// \endcode
+/// is matched by
+/// objcMessageExpr(hasReceiver(declRefExpr(to(varDecl(hasName("x"))))))
+AST_MATCHER_P(ObjCMessageExpr, hasReceiver, internal::Matcher<Expr>,
+              InnerMatcher) {
+  const Expr *ReceiverNode = Node.getInstanceReceiver();
+  return (ReceiverNode != nullptr &&
+          InnerMatcher.matches(*ReceiverNode->IgnoreParenImpCasts(), Finder,
+                               Builder));
+}
+
+/// Matches when BaseName == Selector.getAsString()
 ///
 ///  matcher = objCMessageExpr(hasSelector("loadHTMLString:baseURL:"));
 ///  matches the outer message expr in the code below, but NOT the message
@@ -2724,7 +2811,7 @@
 }
 
 
-/// \brief Matches when at least one of the supplied string equals to the
+/// Matches when at least one of the supplied string equals to the
 /// Selector.getAsString()
 ///
 ///  matcher = objCMessageExpr(hasSelector("methodA:", "methodB:"));
@@ -2738,7 +2825,7 @@
                                         internal::hasAnySelectorFunc>
                                         hasAnySelector;
 
-/// \brief Matches ObjC selectors whose name contains
+/// Matches ObjC selectors whose name contains
 /// a substring matched by the given RegExp.
 ///  matcher = objCMessageExpr(matchesSelector("loadHTMLString\:baseURL?"));
 ///  matches the outer message expr in the code below, but NOT the message
@@ -2753,7 +2840,7 @@
   return RE.match(SelectorString);
 }
 
-/// \brief Matches when the selector is the empty selector
+/// Matches when the selector is the empty selector
 ///
 /// Matches only when the selector of the objCMessageExpr is NULL. This may
 /// represent an error condition in the tree!
@@ -2761,7 +2848,7 @@
   return Node.getSelector().isNull();
 }
 
-/// \brief Matches when the selector is a Unary Selector
+/// Matches when the selector is a Unary Selector
 ///
 ///  matcher = objCMessageExpr(matchesSelector(hasUnarySelector());
 ///  matches self.bodyView in the code below, but NOT the outer message
@@ -2773,7 +2860,7 @@
   return Node.getSelector().isUnarySelector();
 }
 
-/// \brief Matches when the selector is a keyword selector
+/// Matches when the selector is a keyword selector
 ///
 /// objCMessageExpr(hasKeywordSelector()) matches the generated setFrame
 /// message expression in
@@ -2789,7 +2876,7 @@
   return Node.getSelector().isKeywordSelector();
 }
 
-/// \brief Matches when the selector has the specified number of arguments
+/// Matches when the selector has the specified number of arguments
 ///
 ///  matcher = objCMessageExpr(numSelectorArgs(0));
 ///  matches self.bodyView in the code below
@@ -2803,8 +2890,8 @@
 AST_MATCHER_P(ObjCMessageExpr, numSelectorArgs, unsigned, N) {
   return Node.getSelector().getNumArgs() == N;
 }
-   
-/// \brief Matches if the call expression's callee expression matches.
+
+/// Matches if the call expression's callee expression matches.
 ///
 /// Given
 /// \code
@@ -2827,7 +2914,7 @@
           InnerMatcher.matches(*ExprNode, Finder, Builder));
 }
 
-/// \brief Matches if the call expression's callee's declaration matches the
+/// Matches if the call expression's callee's declaration matches the
 /// given matcher.
 ///
 /// Example matches y.x() (matcher = callExpr(callee(
@@ -2841,19 +2928,23 @@
   return callExpr(hasDeclaration(InnerMatcher)).matches(Node, Finder, Builder);
 }
 
-/// \brief Matches if the expression's or declaration's type matches a type
+/// Matches if the expression's or declaration's type matches a type
 /// matcher.
 ///
 /// Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
 ///             and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
 ///             and U (matcher = typedefDecl(hasType(asString("int")))
+///             and friend class X (matcher = friendDecl(hasType("X"))
 /// \code
 ///  class X {};
 ///  void y(X &x) { x; X z; }
 ///  typedef int U;
+///  class Y { friend class X; };
 /// \endcode
 AST_POLYMORPHIC_MATCHER_P_OVERLOAD(
-    hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, TypedefNameDecl, ValueDecl),
+    hasType,
+    AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, FriendDecl, TypedefNameDecl,
+                                    ValueDecl),
     internal::Matcher<QualType>, InnerMatcher, 0) {
   QualType QT = internal::getUnderlyingType(Node);
   if (!QT.isNull())
@@ -2861,7 +2952,7 @@
   return false;
 }
 
-/// \brief Overloaded to match the declaration of the expression's or value
+/// Overloaded to match the declaration of the expression's or value
 /// declaration's type.
 ///
 /// In case of a value declaration (for example a variable declaration),
@@ -2872,21 +2963,24 @@
 ///
 /// Example matches x (matcher = expr(hasType(cxxRecordDecl(hasName("X")))))
 ///             and z (matcher = varDecl(hasType(cxxRecordDecl(hasName("X")))))
+///             and friend class X (matcher = friendDecl(hasType("X"))
 /// \code
 ///  class X {};
 ///  void y(X &x) { x; X z; }
+///  class Y { friend class X; };
 /// \endcode
 ///
 /// Usable as: Matcher<Expr>, Matcher<ValueDecl>
-AST_POLYMORPHIC_MATCHER_P_OVERLOAD(hasType,
-                                   AST_POLYMORPHIC_SUPPORTED_TYPES(Expr,
-                                                                   ValueDecl),
-                                   internal::Matcher<Decl>, InnerMatcher, 1) {
-  return qualType(hasDeclaration(InnerMatcher))
-      .matches(Node.getType(), Finder, Builder);
+AST_POLYMORPHIC_MATCHER_P_OVERLOAD(
+    hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, FriendDecl, ValueDecl),
+    internal::Matcher<Decl>, InnerMatcher, 1) {
+  QualType QT = internal::getUnderlyingType(Node);
+  if (!QT.isNull())
+    return qualType(hasDeclaration(InnerMatcher)).matches(QT, Finder, Builder);
+  return false;
 }
 
-/// \brief Matches if the type location of the declarator decl's type matches
+/// Matches if the type location of the declarator decl's type matches
 /// the inner matcher.
 ///
 /// Given
@@ -2902,7 +2996,7 @@
   return Inner.matches(Node.getTypeSourceInfo()->getTypeLoc(), Finder, Builder);
 }
 
-/// \brief Matches if the matched type is represented by the given string.
+/// Matches if the matched type is represented by the given string.
 ///
 /// Given
 /// \code
@@ -2915,7 +3009,7 @@
   return Name == Node.getAsString();
 }
 
-/// \brief Matches if the matched type is a pointer type and the pointee type
+/// Matches if the matched type is a pointer type and the pointee type
 /// matches the specified matcher.
 ///
 /// Example matches y->x()
@@ -2932,14 +3026,14 @@
           InnerMatcher.matches(Node->getPointeeType(), Finder, Builder));
 }
 
-/// \brief Overloaded to match the pointee type's declaration.
+/// Overloaded to match the pointee type's declaration.
 AST_MATCHER_P_OVERLOAD(QualType, pointsTo, internal::Matcher<Decl>,
                        InnerMatcher, 1) {
   return pointsTo(qualType(hasDeclaration(InnerMatcher)))
       .matches(Node, Finder, Builder);
 }
 
-/// \brief Matches if the matched type matches the unqualified desugared
+/// Matches if the matched type matches the unqualified desugared
 /// type of the matched node.
 ///
 /// For example, in:
@@ -2947,7 +3041,7 @@
 ///   class A {};
 ///   using B = A;
 /// \endcode
-/// The matcher type(hasUnqualifeidDesugaredType(recordType())) matches
+/// The matcher type(hasUnqualifiedDesugaredType(recordType())) matches
 /// both B and A.
 AST_MATCHER_P(Type, hasUnqualifiedDesugaredType, internal::Matcher<Type>,
               InnerMatcher) {
@@ -2955,7 +3049,7 @@
                               Builder);
 }
 
-/// \brief Matches if the matched type is a reference type and the referenced
+/// Matches if the matched type is a reference type and the referenced
 /// type matches the specified matcher.
 ///
 /// Example matches X &x and const X &y
@@ -2974,7 +3068,7 @@
           InnerMatcher.matches(Node->getPointeeType(), Finder, Builder));
 }
 
-/// \brief Matches QualTypes whose canonical type matches InnerMatcher.
+/// Matches QualTypes whose canonical type matches InnerMatcher.
 ///
 /// Given:
 /// \code
@@ -2993,7 +3087,7 @@
   return InnerMatcher.matches(Node.getCanonicalType(), Finder, Builder);
 }
 
-/// \brief Overloaded to match the referenced type's declaration.
+/// Overloaded to match the referenced type's declaration.
 AST_MATCHER_P_OVERLOAD(QualType, references, internal::Matcher<Decl>,
                        InnerMatcher, 1) {
   return references(qualType(hasDeclaration(InnerMatcher)))
@@ -3007,7 +3101,7 @@
           InnerMatcher.matches(*ExprNode, Finder, Builder));
 }
 
-/// \brief Matches if the expression's type either matches the specified
+/// Matches if the expression's type either matches the specified
 /// matcher, or is a pointer to a type that matches the InnerMatcher.
 AST_MATCHER_P_OVERLOAD(CXXMemberCallExpr, thisPointerType,
                        internal::Matcher<QualType>, InnerMatcher, 0) {
@@ -3016,7 +3110,7 @@
       .matches(Node, Finder, Builder);
 }
 
-/// \brief Overloaded to match the type's declaration.
+/// Overloaded to match the type's declaration.
 AST_MATCHER_P_OVERLOAD(CXXMemberCallExpr, thisPointerType,
                        internal::Matcher<Decl>, InnerMatcher, 1) {
   return onImplicitObjectArgument(
@@ -3024,7 +3118,7 @@
       .matches(Node, Finder, Builder);
 }
 
-/// \brief Matches a DeclRefExpr that refers to a declaration that matches the
+/// Matches a DeclRefExpr that refers to a declaration that matches the
 /// specified matcher.
 ///
 /// Example matches x in if(x)
@@ -3040,7 +3134,7 @@
           InnerMatcher.matches(*DeclNode, Finder, Builder));
 }
 
-/// \brief Matches a \c DeclRefExpr that refers to a declaration through a
+/// Matches a \c DeclRefExpr that refers to a declaration through a
 /// specific using shadow declaration.
 ///
 /// Given
@@ -3062,7 +3156,7 @@
   return false;
 }
 
-/// \brief Matches an \c OverloadExpr if any of the declarations in the set of
+/// Matches an \c OverloadExpr if any of the declarations in the set of
 /// overloads matches the given matcher.
 ///
 /// Given
@@ -3083,7 +3177,7 @@
                                     Node.decls_end(), Finder, Builder);
 }
 
-/// \brief Matches the Decl of a DeclStmt which has a single declaration.
+/// Matches the Decl of a DeclStmt which has a single declaration.
 ///
 /// Given
 /// \code
@@ -3100,7 +3194,7 @@
   return false;
 }
 
-/// \brief Matches a variable declaration that has an initializer expression
+/// Matches a variable declaration that has an initializer expression
 /// that matches the given matcher.
 ///
 /// Example matches x (matcher = varDecl(hasInitializer(callExpr())))
@@ -3116,7 +3210,7 @@
           InnerMatcher.matches(*Initializer, Finder, Builder));
 }
 
-/// \brief Matches a variable declaration that has function scope and is a
+/// Matches a variable declaration that has function scope and is a
 /// non-static local variable.
 ///
 /// Example matches x (matcher = varDecl(hasLocalStorage())
@@ -3131,7 +3225,7 @@
   return Node.hasLocalStorage();
 }
 
-/// \brief Matches a variable declaration that does not have local storage.
+/// Matches a variable declaration that does not have local storage.
 ///
 /// Example matches y and z (matcher = varDecl(hasGlobalStorage())
 /// \code
@@ -3145,7 +3239,7 @@
   return Node.hasGlobalStorage();
 }
 
-/// \brief Matches a variable declaration that has automatic storage duration.
+/// Matches a variable declaration that has automatic storage duration.
 ///
 /// Example matches x, but not y, z, or a.
 /// (matcher = varDecl(hasAutomaticStorageDuration())
@@ -3161,7 +3255,7 @@
   return Node.getStorageDuration() == SD_Automatic;
 }
 
-/// \brief Matches a variable declaration that has static storage duration.
+/// Matches a variable declaration that has static storage duration.
 /// It includes the variable declared at namespace scope and those declared
 /// with "static" and "extern" storage class specifiers.
 ///
@@ -3181,7 +3275,7 @@
   return Node.getStorageDuration() == SD_Static;
 }
 
-/// \brief Matches a variable declaration that has thread storage duration.
+/// Matches a variable declaration that has thread storage duration.
 ///
 /// Example matches z, but not x, z, or a.
 /// (matcher = varDecl(hasThreadStorageDuration())
@@ -3197,7 +3291,7 @@
   return Node.getStorageDuration() == SD_Thread;
 }
 
-/// \brief Matches a variable declaration that is an exception variable from
+/// Matches a variable declaration that is an exception variable from
 /// a C++ catch block, or an Objective-C \@catch statement.
 ///
 /// Example matches x (matcher = varDecl(isExceptionVariable())
@@ -3212,7 +3306,7 @@
   return Node.isExceptionVariable();
 }
 
-/// \brief Checks that a call expression or a constructor call expression has
+/// Checks that a call expression or a constructor call expression has
 /// a specific number of arguments (including absent default arguments).
 ///
 /// Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))
@@ -3228,7 +3322,7 @@
   return Node.getNumArgs() == N;
 }
 
-/// \brief Matches the n'th argument of a call expression or a constructor
+/// Matches the n'th argument of a call expression or a constructor
 /// call expression.
 ///
 /// Example matches y in x(y)
@@ -3246,7 +3340,7 @@
               *Node.getArg(N)->IgnoreParenImpCasts(), Finder, Builder));
 }
 
-/// \brief Matches declaration statements that contain a specific number of
+/// Matches declaration statements that contain a specific number of
 /// declarations.
 ///
 /// Example: Given
@@ -3261,7 +3355,7 @@
   return std::distance(Node.decl_begin(), Node.decl_end()) == (ptrdiff_t)N;
 }
 
-/// \brief Matches the n'th declaration of a declaration statement.
+/// Matches the n'th declaration of a declaration statement.
 ///
 /// Note that this does not work for global declarations because the AST
 /// breaks up multiple-declaration DeclStmt's into multiple single-declaration
@@ -3290,7 +3384,7 @@
   return InnerMatcher.matches(**Iterator, Finder, Builder);
 }
 
-/// \brief Matches a C++ catch statement that has a catch-all handler.
+/// Matches a C++ catch statement that has a catch-all handler.
 ///
 /// Given
 /// \code
@@ -3307,7 +3401,7 @@
   return Node.getExceptionDecl() == nullptr;
 }
 
-/// \brief Matches a constructor initializer.
+/// Matches a constructor initializer.
 ///
 /// Given
 /// \code
@@ -3326,7 +3420,7 @@
                                     Node.init_end(), Finder, Builder);
 }
 
-/// \brief Matches the field declaration of a constructor initializer.
+/// Matches the field declaration of a constructor initializer.
 ///
 /// Given
 /// \code
@@ -3346,7 +3440,7 @@
       InnerMatcher.matches(*NodeAsDecl, Finder, Builder));
 }
 
-/// \brief Matches the initializer expression of a constructor initializer.
+/// Matches the initializer expression of a constructor initializer.
 ///
 /// Given
 /// \code
@@ -3366,7 +3460,7 @@
       InnerMatcher.matches(*NodeAsExpr, Finder, Builder));
 }
 
-/// \brief Matches a constructor initializer if it is explicitly written in
+/// Matches a constructor initializer if it is explicitly written in
 /// code (as opposed to implicitly added by the compiler).
 ///
 /// Given
@@ -3383,7 +3477,7 @@
   return Node.isWritten();
 }
 
-/// \brief Matches a constructor initializer if it is initializing a base, as
+/// Matches a constructor initializer if it is initializing a base, as
 /// opposed to a member.
 ///
 /// Given
@@ -3403,7 +3497,7 @@
   return Node.isBaseInitializer();
 }
 
-/// \brief Matches a constructor initializer if it is initializing a member, as
+/// Matches a constructor initializer if it is initializing a member, as
 /// opposed to a base.
 ///
 /// Given
@@ -3423,7 +3517,7 @@
   return Node.isMemberInitializer();
 }
 
-/// \brief Matches any argument of a call expression or a constructor call
+/// Matches any argument of a call expression or a constructor call
 /// expression, or an ObjC-message-send expression.
 ///
 /// Given
@@ -3457,12 +3551,12 @@
   return false;
 }
 
-/// \brief Matches a constructor call expression which uses list initialization.
+/// Matches a constructor call expression which uses list initialization.
 AST_MATCHER(CXXConstructExpr, isListInitialization) {
   return Node.isListInitialization();
 }
 
-/// \brief Matches a constructor call expression which requires
+/// Matches a constructor call expression which requires
 /// zero initialization.
 ///
 /// Given
@@ -3478,8 +3572,8 @@
   return Node.requiresZeroInitialization();
 }
 
-/// \brief Matches the n'th parameter of a function or an ObjC method
-/// declaration.
+/// Matches the n'th parameter of a function or an ObjC method
+/// declaration or a block.
 ///
 /// Given
 /// \code
@@ -3500,14 +3594,15 @@
 /// matching y.
 AST_POLYMORPHIC_MATCHER_P2(hasParameter,
                            AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl,
-                                                           ObjCMethodDecl),
+                                                           ObjCMethodDecl,
+                                                           BlockDecl),
                            unsigned, N, internal::Matcher<ParmVarDecl>,
                            InnerMatcher) {
   return (N < Node.parameters().size()
           && InnerMatcher.matches(*Node.parameters()[N], Finder, Builder));
 }
 
-/// \brief Matches all arguments and their respective ParmVarDecl.
+/// Matches all arguments and their respective ParmVarDecl.
 ///
 /// Given
 /// \code
@@ -3561,7 +3656,8 @@
   return Matched;
 }
 
-/// \brief Matches any parameter of a function or ObjC method declaration.
+/// Matches any parameter of a function or an ObjC method declaration or a
+/// block.
 ///
 /// Does not match the 'this' parameter of a method.
 ///
@@ -3582,16 +3678,26 @@
 /// the matcher objcMethodDecl(hasAnyParameter(hasName("y")))
 /// matches the declaration of method f with hasParameter
 /// matching y.
+///
+/// For blocks, given
+/// \code
+///   b = ^(int y) { printf("%d", y) };
+/// \endcode
+///
+/// the matcher blockDecl(hasAnyParameter(hasName("y")))
+/// matches the declaration of the block b with hasParameter
+/// matching y.
 AST_POLYMORPHIC_MATCHER_P(hasAnyParameter,
                           AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl,
-                                                          ObjCMethodDecl),
+                                                          ObjCMethodDecl,
+                                                          BlockDecl),
                           internal::Matcher<ParmVarDecl>,
                           InnerMatcher) {
   return matchesFirstInPointerRange(InnerMatcher, Node.param_begin(),
                                     Node.param_end(), Finder, Builder);
 }
 
-/// \brief Matches \c FunctionDecls and \c FunctionProtoTypes that have a
+/// Matches \c FunctionDecls and \c FunctionProtoTypes that have a
 /// specific parameter count.
 ///
 /// Given
@@ -3615,7 +3721,7 @@
   return Node.getNumParams() == N;
 }
 
-/// \brief Matches \c FunctionDecls that have a noreturn attribute.
+/// Matches \c FunctionDecls that have a noreturn attribute.
 ///
 /// Given
 /// \code
@@ -3631,7 +3737,7 @@
 /// \endcode
 AST_MATCHER(FunctionDecl, isNoReturn) { return Node.isNoReturn(); }
 
-/// \brief Matches the return type of a function declaration.
+/// Matches the return type of a function declaration.
 ///
 /// Given:
 /// \code
@@ -3644,7 +3750,7 @@
   return InnerMatcher.matches(Node.getReturnType(), Finder, Builder);
 }
 
-/// \brief Matches extern "C" function or variable declarations.
+/// Matches extern "C" function or variable declarations.
 ///
 /// Given:
 /// \code
@@ -3664,7 +3770,7 @@
   return Node.isExternC();
 }
 
-/// \brief Matches variable/function declarations that have "static" storage
+/// Matches variable/function declarations that have "static" storage
 /// class specifier ("static" keyword) written in the source.
 ///
 /// Given:
@@ -3684,7 +3790,7 @@
   return Node.getStorageClass() == SC_Static;
 }
 
-/// \brief Matches deleted function declarations.
+/// Matches deleted function declarations.
 ///
 /// Given:
 /// \code
@@ -3697,7 +3803,7 @@
   return Node.isDeleted();
 }
 
-/// \brief Matches defaulted function declarations.
+/// Matches defaulted function declarations.
 ///
 /// Given:
 /// \code
@@ -3710,7 +3816,7 @@
   return Node.isDefaulted();
 }
 
-/// \brief Matches functions that have a dynamic exception specification.
+/// Matches functions that have a dynamic exception specification.
 ///
 /// Given:
 /// \code
@@ -3733,7 +3839,7 @@
   return false;
 }
 
-/// \brief Matches functions that have a non-throwing exception specification.
+/// Matches functions that have a non-throwing exception specification.
 ///
 /// Given:
 /// \code
@@ -3760,27 +3866,32 @@
   if (isUnresolvedExceptionSpec(FnTy->getExceptionSpecType()))
     return true;
 
-  return FnTy->isNothrow(Finder->getASTContext());
+  return FnTy->isNothrow();
 }
 
-/// \brief Matches constexpr variable and function declarations.
+/// Matches constexpr variable and function declarations,
+///        and if constexpr.
 ///
 /// Given:
 /// \code
 ///   constexpr int foo = 42;
 ///   constexpr int bar();
+///   void baz() { if constexpr(1 > 0) {} }
 /// \endcode
 /// varDecl(isConstexpr())
 ///   matches the declaration of foo.
 /// functionDecl(isConstexpr())
 ///   matches the declaration of bar.
+/// ifStmt(isConstexpr())
+///   matches the if statement in baz.
 AST_POLYMORPHIC_MATCHER(isConstexpr,
                         AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl,
-                                                        FunctionDecl)) {
+                                                        FunctionDecl,
+                                                        IfStmt)) {
   return Node.isConstexpr();
 }
 
-/// \brief Matches the condition expression of an if statement, for loop,
+/// Matches the condition expression of an if statement, for loop,
 /// switch statement or conditional operator.
 ///
 /// Example matches true (matcher = hasCondition(cxxBoolLiteral(equals(true))))
@@ -3797,7 +3908,7 @@
           InnerMatcher.matches(*Condition, Finder, Builder));
 }
 
-/// \brief Matches the then-statement of an if statement.
+/// Matches the then-statement of an if statement.
 ///
 /// Examples matches the if statement
 ///   (matcher = ifStmt(hasThen(cxxBoolLiteral(equals(true)))))
@@ -3809,7 +3920,7 @@
   return (Then != nullptr && InnerMatcher.matches(*Then, Finder, Builder));
 }
 
-/// \brief Matches the else-statement of an if statement.
+/// Matches the else-statement of an if statement.
 ///
 /// Examples matches the if statement
 ///   (matcher = ifStmt(hasElse(cxxBoolLiteral(equals(true)))))
@@ -3821,7 +3932,7 @@
   return (Else != nullptr && InnerMatcher.matches(*Else, Finder, Builder));
 }
 
-/// \brief Matches if a node equals a previously bound node.
+/// Matches if a node equals a previously bound node.
 ///
 /// Matches a node if it equals the node previously bound to \p ID.
 ///
@@ -3858,7 +3969,7 @@
   return Builder->removeBindings(Predicate);
 }
 
-/// \brief Matches the condition variable statement in an if statement.
+/// Matches the condition variable statement in an if statement.
 ///
 /// Given
 /// \code
@@ -3874,7 +3985,7 @@
          InnerMatcher.matches(*DeclarationStatement, Finder, Builder);
 }
 
-/// \brief Matches the index expression of an array subscript expression.
+/// Matches the index expression of an array subscript expression.
 ///
 /// Given
 /// \code
@@ -3890,7 +4001,7 @@
   return false;
 }
 
-/// \brief Matches the base expression of an array subscript expression.
+/// Matches the base expression of an array subscript expression.
 ///
 /// Given
 /// \code
@@ -3907,7 +4018,7 @@
   return false;
 }
 
-/// \brief Matches a 'for', 'while', 'do while' statement or a function
+/// Matches a 'for', 'while', 'do while' statement or a function
 /// definition that has a given body.
 ///
 /// Given
@@ -3929,7 +4040,7 @@
           InnerMatcher.matches(*Statement, Finder, Builder));
 }
 
-/// \brief Matches compound statements where at least one substatement matches
+/// Matches compound statements where at least one substatement matches
 /// a given matcher. Also matches StmtExprs that have CompoundStmt as children.
 ///
 /// Given
@@ -3949,7 +4060,7 @@
                                           CS->body_end(), Finder, Builder);
 }
 
-/// \brief Checks that a compound statement contains a specific number of
+/// Checks that a compound statement contains a specific number of
 /// child statements.
 ///
 /// Example: Given
@@ -3963,7 +4074,7 @@
   return Node.size() == N;
 }
 
-/// \brief Matches literals that are equal to the given value of type ValueT.
+/// Matches literals that are equal to the given value of type ValueT.
 ///
 /// Given
 /// \code
@@ -4024,7 +4135,7 @@
     .matchesNode(Node);
 }
 
-/// \brief Matches the operator Name of operator expressions (binary or
+/// Matches the operator Name of operator expressions (binary or
 /// unary).
 ///
 /// Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))
@@ -4038,7 +4149,7 @@
   return Name == Node.getOpcodeStr(Node.getOpcode());
 }
 
-/// \brief Matches on all kinds of assignment operators.
+/// Matches all kinds of assignment operators.
 ///
 /// Example 1: matches a += b (matcher = binaryOperator(isAssignmentOperator()))
 /// \code
@@ -4058,7 +4169,7 @@
   return Node.isAssignmentOp();
 }
 
-/// \brief Matches the left hand side of binary operator expressions.
+/// Matches the left hand side of binary operator expressions.
 ///
 /// Example matches a (matcher = binaryOperator(hasLHS()))
 /// \code
@@ -4073,7 +4184,7 @@
           InnerMatcher.matches(*LeftHandSide, Finder, Builder));
 }
 
-/// \brief Matches the right hand side of binary operator expressions.
+/// Matches the right hand side of binary operator expressions.
 ///
 /// Example matches b (matcher = binaryOperator(hasRHS()))
 /// \code
@@ -4088,14 +4199,14 @@
           InnerMatcher.matches(*RightHandSide, Finder, Builder));
 }
 
-/// \brief Matches if either the left hand side or the right hand side of a
+/// Matches if either the left hand side or the right hand side of a
 /// binary operator matches.
 inline internal::Matcher<BinaryOperator> hasEitherOperand(
     const internal::Matcher<Expr> &InnerMatcher) {
   return anyOf(hasLHS(InnerMatcher), hasRHS(InnerMatcher));
 }
 
-/// \brief Matches if the operand of a unary operator matches.
+/// Matches if the operand of a unary operator matches.
 ///
 /// Example matches true (matcher = hasUnaryOperand(
 ///                                   cxxBoolLiteral(equals(true))))
@@ -4109,7 +4220,7 @@
           InnerMatcher.matches(*Operand, Finder, Builder));
 }
 
-/// \brief Matches if the cast's source expression
+/// Matches if the cast's source expression
 /// or opaque value's source expression matches the given matcher.
 ///
 /// Example 1: matches "a string"
@@ -4134,7 +4245,7 @@
           InnerMatcher.matches(*SubExpression, Finder, Builder));
 }
 
-/// \brief Matches casts that has a given cast kind.
+/// Matches casts that has a given cast kind.
 ///
 /// Example: matches the implicit cast around \c 0
 /// (matcher = castExpr(hasCastKind(CK_NullToPointer)))
@@ -4145,7 +4256,7 @@
   return Node.getCastKind() == Kind;
 }
 
-/// \brief Matches casts whose destination type matches a given matcher.
+/// Matches casts whose destination type matches a given matcher.
 ///
 /// (Note: Clang's AST refers to other conversions as "casts" too, and calls
 /// actual casts "explicit" casts.)
@@ -4155,7 +4266,7 @@
   return InnerMatcher.matches(NodeType, Finder, Builder);
 }
 
-/// \brief Matches implicit casts whose destination type matches a given
+/// Matches implicit casts whose destination type matches a given
 /// matcher.
 ///
 /// FIXME: Unit test this matcher
@@ -4164,7 +4275,7 @@
   return InnerMatcher.matches(Node.getType(), Finder, Builder);
 }
 
-/// \brief Matches RecordDecl object that are spelled with "struct."
+/// Matches RecordDecl object that are spelled with "struct."
 ///
 /// Example matches S, but not C or U.
 /// \code
@@ -4176,7 +4287,7 @@
   return Node.isStruct();
 }
 
-/// \brief Matches RecordDecl object that are spelled with "union."
+/// Matches RecordDecl object that are spelled with "union."
 ///
 /// Example matches U, but not C or S.
 /// \code
@@ -4188,7 +4299,7 @@
   return Node.isUnion();
 }
 
-/// \brief Matches RecordDecl object that are spelled with "class."
+/// Matches RecordDecl object that are spelled with "class."
 ///
 /// Example matches C, but not S or U.
 /// \code
@@ -4200,7 +4311,7 @@
   return Node.isClass();
 }
 
-/// \brief Matches the true branch expression of a conditional operator.
+/// Matches the true branch expression of a conditional operator.
 ///
 /// Example 1 (conditional ternary operator): matches a
 /// \code
@@ -4218,7 +4329,7 @@
           InnerMatcher.matches(*Expression, Finder, Builder));
 }
 
-/// \brief Matches the false branch expression of a conditional operator
+/// Matches the false branch expression of a conditional operator
 /// (binary or ternary).
 ///
 /// Example matches b
@@ -4233,7 +4344,7 @@
           InnerMatcher.matches(*Expression, Finder, Builder));
 }
 
-/// \brief Matches if a declaration has a body attached.
+/// Matches if a declaration has a body attached.
 ///
 /// Example matches A, va, fa
 /// \code
@@ -4260,7 +4371,7 @@
   return Node.isThisDeclarationADefinition();
 }
 
-/// \brief Matches if a function declaration is variadic.
+/// Matches if a function declaration is variadic.
 ///
 /// Example matches f, but not g or h. The function i will not match, even when
 /// compiled in C mode.
@@ -4274,7 +4385,7 @@
   return Node.isVariadic();
 }
 
-/// \brief Matches the class declaration that the given method declaration
+/// Matches the class declaration that the given method declaration
 /// belongs to.
 ///
 /// FIXME: Generalize this for other kinds of declarations.
@@ -4298,7 +4409,7 @@
           InnerMatcher.matches(*Parent, Finder, Builder));
 }
 
-/// \brief Matches each method overriden by the given method. This matcher may
+/// Matches each method overridden by the given method. This matcher may
 /// produce multiple matches.
 ///
 /// Given
@@ -4339,7 +4450,7 @@
   return Matched;
 }
 
-/// \brief Matches if the given method declaration is virtual.
+/// Matches if the given method declaration is virtual.
 ///
 /// Given
 /// \code
@@ -4353,7 +4464,7 @@
   return Node.isVirtual();
 }
 
-/// \brief Matches if the given method declaration has an explicit "virtual".
+/// Matches if the given method declaration has an explicit "virtual".
 ///
 /// Given
 /// \code
@@ -4371,7 +4482,7 @@
   return Node.isVirtualAsWritten();
 }
 
-/// \brief Matches if the given method or class declaration is final.
+/// Matches if the given method or class declaration is final.
 ///
 /// Given:
 /// \code
@@ -4392,7 +4503,7 @@
   return Node.template hasAttr<FinalAttr>();
 }
 
-/// \brief Matches if the given method declaration is pure.
+/// Matches if the given method declaration is pure.
 ///
 /// Given
 /// \code
@@ -4406,7 +4517,7 @@
   return Node.isPure();
 }
 
-/// \brief Matches if the given method declaration is const.
+/// Matches if the given method declaration is const.
 ///
 /// Given
 /// \code
@@ -4421,7 +4532,7 @@
   return Node.isConst();
 }
 
-/// \brief Matches if the given method declaration declares a copy assignment
+/// Matches if the given method declaration declares a copy assignment
 /// operator.
 ///
 /// Given
@@ -4438,7 +4549,7 @@
   return Node.isCopyAssignmentOperator();
 }
 
-/// \brief Matches if the given method declaration declares a move assignment
+/// Matches if the given method declaration declares a move assignment
 /// operator.
 ///
 /// Given
@@ -4455,7 +4566,7 @@
   return Node.isMoveAssignmentOperator();
 }
 
-/// \brief Matches if the given method declaration overrides another method.
+/// Matches if the given method declaration overrides another method.
 ///
 /// Given
 /// \code
@@ -4473,7 +4584,7 @@
   return Node.size_overridden_methods() > 0 || Node.hasAttr<OverrideAttr>();
 }
 
-/// \brief Matches method declarations that are user-provided.
+/// Matches method declarations that are user-provided.
 ///
 /// Given
 /// \code
@@ -4488,7 +4599,7 @@
   return Node.isUserProvided();
 }
 
-/// \brief Matches member expressions that are called with '->' as opposed
+/// Matches member expressions that are called with '->' as opposed
 /// to '.'.
 ///
 /// Member calls on the implicit this pointer match as called with '->'.
@@ -4507,7 +4618,7 @@
   return Node.isArrow();
 }
 
-/// \brief Matches QualType nodes that are of integer type.
+/// Matches QualType nodes that are of integer type.
 ///
 /// Given
 /// \code
@@ -4521,7 +4632,7 @@
     return Node->isIntegerType();
 }
 
-/// \brief Matches QualType nodes that are of unsigned integer type.
+/// Matches QualType nodes that are of unsigned integer type.
 ///
 /// Given
 /// \code
@@ -4535,7 +4646,7 @@
     return Node->isUnsignedIntegerType();
 }
 
-/// \brief Matches QualType nodes that are of signed integer type.
+/// Matches QualType nodes that are of signed integer type.
 ///
 /// Given
 /// \code
@@ -4549,7 +4660,7 @@
     return Node->isSignedIntegerType();
 }
 
-/// \brief Matches QualType nodes that are of character type.
+/// Matches QualType nodes that are of character type.
 ///
 /// Given
 /// \code
@@ -4563,7 +4674,7 @@
     return Node->isAnyCharacterType();
 }
 
-/// \brief Matches QualType nodes that are of any pointer type; this includes
+/// Matches QualType nodes that are of any pointer type; this includes
 /// the Objective-C object pointer type, which is different despite being
 /// syntactically similar.
 ///
@@ -4583,7 +4694,7 @@
   return Node->isAnyPointerType();
 }
 
-/// \brief Matches QualType nodes that are const-qualified, i.e., that
+/// Matches QualType nodes that are const-qualified, i.e., that
 /// include "top-level" const.
 ///
 /// Given
@@ -4602,7 +4713,7 @@
   return Node.isConstQualified();
 }
 
-/// \brief Matches QualType nodes that are volatile-qualified, i.e., that
+/// Matches QualType nodes that are volatile-qualified, i.e., that
 /// include "top-level" volatile.
 ///
 /// Given
@@ -4621,7 +4732,7 @@
   return Node.isVolatileQualified();
 }
 
-/// \brief Matches QualType nodes that have local CV-qualifiers attached to
+/// Matches QualType nodes that have local CV-qualifiers attached to
 /// the node, not hidden within a typedef.
 ///
 /// Given
@@ -4638,7 +4749,7 @@
   return Node.hasLocalQualifiers();
 }
 
-/// \brief Matches a member expression where the member is matched by a
+/// Matches a member expression where the member is matched by a
 /// given matcher.
 ///
 /// Given
@@ -4655,7 +4766,7 @@
   return InnerMatcher.matches(*Node.getMemberDecl(), Finder, Builder);
 }
 
-/// \brief Matches a member expression where the object expression is
+/// Matches a member expression where the object expression is
 /// matched by a given matcher.
 ///
 /// Given
@@ -4672,7 +4783,7 @@
   return InnerMatcher.matches(*Node.getBase(), Finder, Builder);
 }
 
-/// \brief Matches any using shadow declaration.
+/// Matches any using shadow declaration.
 ///
 /// Given
 /// \code
@@ -4687,7 +4798,7 @@
                                     Node.shadow_end(), Finder, Builder);
 }
 
-/// \brief Matches a using shadow declaration where the target declaration is
+/// Matches a using shadow declaration where the target declaration is
 /// matched by the given matcher.
 ///
 /// Given
@@ -4704,7 +4815,7 @@
   return InnerMatcher.matches(*Node.getTargetDecl(), Finder, Builder);
 }
 
-/// \brief Matches template instantiations of function, class, or static
+/// Matches template instantiations of function, class, or static
 /// member variable template instantiations.
 ///
 /// Given
@@ -4741,7 +4852,7 @@
               TSK_ExplicitInstantiationDeclaration);
 }
 
-/// \brief Matches declarations that are template instantiations or are inside
+/// Matches declarations that are template instantiations or are inside
 /// template instantiations.
 ///
 /// Given
@@ -4758,7 +4869,7 @@
   return decl(anyOf(IsInstantiation, hasAncestor(IsInstantiation)));
 }
 
-/// \brief Matches statements inside of a template instantiation.
+/// Matches statements inside of a template instantiation.
 ///
 /// Given
 /// \code
@@ -4778,7 +4889,7 @@
                              functionDecl(isTemplateInstantiation())))));
 }
 
-/// \brief Matches explicit template specializations of function, class, or
+/// Matches explicit template specializations of function, class, or
 /// static member variable template instantiations.
 ///
 /// Given
@@ -4796,7 +4907,7 @@
   return (Node.getTemplateSpecializationKind() == TSK_ExplicitSpecialization);
 }
 
-/// \brief Matches \c TypeLocs for which the given inner
+/// Matches \c TypeLocs for which the given inner
 /// QualType-matcher matches.
 AST_MATCHER_FUNCTION_P_OVERLOAD(internal::BindableMatcher<TypeLoc>, loc,
                                 internal::Matcher<QualType>, InnerMatcher, 0) {
@@ -4804,7 +4915,7 @@
       new internal::TypeLocTypeMatcher(InnerMatcher));
 }
 
-/// \brief Matches type \c bool.
+/// Matches type \c bool.
 ///
 /// Given
 /// \code
@@ -4816,7 +4927,7 @@
   return Node.isBooleanType();
 }
 
-/// \brief Matches type \c void.
+/// Matches type \c void.
 ///
 /// Given
 /// \code
@@ -4831,7 +4942,7 @@
 template <typename NodeType>
 using AstTypeMatcher = internal::VariadicDynCastAllOfMatcher<Type, NodeType>;
 
-/// \brief Matches builtin Types.
+/// Matches builtin Types.
 ///
 /// Given
 /// \code
@@ -4845,7 +4956,7 @@
 ///   matches "int b", "float c" and "bool d"
 extern const AstTypeMatcher<BuiltinType> builtinType;
 
-/// \brief Matches all kinds of arrays.
+/// Matches all kinds of arrays.
 ///
 /// Given
 /// \code
@@ -4857,7 +4968,7 @@
 ///   matches "int a[]", "int b[4]" and "int c[a[0]]";
 extern const AstTypeMatcher<ArrayType> arrayType;
 
-/// \brief Matches C99 complex types.
+/// Matches C99 complex types.
 ///
 /// Given
 /// \code
@@ -4867,7 +4978,7 @@
 ///   matches "_Complex float f"
 extern const AstTypeMatcher<ComplexType> complexType;
 
-/// \brief Matches any real floating-point type (float, double, long double).
+/// Matches any real floating-point type (float, double, long double).
 ///
 /// Given
 /// \code
@@ -4880,7 +4991,7 @@
   return Node.isRealFloatingType();
 }
 
-/// \brief Matches arrays and C99 complex types that have a specific element
+/// Matches arrays and C99 complex types that have a specific element
 /// type.
 ///
 /// Given
@@ -4897,7 +5008,7 @@
                                   AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType,
                                                                   ComplexType));
 
-/// \brief Matches C arrays with a specified constant size.
+/// Matches C arrays with a specified constant size.
 ///
 /// Given
 /// \code
@@ -4911,7 +5022,7 @@
 ///   matches "int a[2]"
 extern const AstTypeMatcher<ConstantArrayType> constantArrayType;
 
-/// \brief Matches nodes that have the specified size.
+/// Matches nodes that have the specified size.
 ///
 /// Given
 /// \code
@@ -4933,7 +5044,7 @@
   return internal::HasSizeMatcher<NodeType>::hasSize(Node, N);
 }
 
-/// \brief Matches C++ arrays whose size is a value-dependent expression.
+/// Matches C++ arrays whose size is a value-dependent expression.
 ///
 /// Given
 /// \code
@@ -4946,7 +5057,7 @@
 ///   matches "T data[Size]"
 extern const AstTypeMatcher<DependentSizedArrayType> dependentSizedArrayType;
 
-/// \brief Matches C arrays with unspecified size.
+/// Matches C arrays with unspecified size.
 ///
 /// Given
 /// \code
@@ -4958,7 +5069,7 @@
 ///   matches "int a[]" and "int c[]"
 extern const AstTypeMatcher<IncompleteArrayType> incompleteArrayType;
 
-/// \brief Matches C arrays with a specified size that is not an
+/// Matches C arrays with a specified size that is not an
 /// integer-constant-expression.
 ///
 /// Given
@@ -4973,7 +5084,7 @@
 ///   matches "int c[a[0]]"
 extern const AstTypeMatcher<VariableArrayType> variableArrayType;
 
-/// \brief Matches \c VariableArrayType nodes that have a specific size
+/// Matches \c VariableArrayType nodes that have a specific size
 /// expression.
 ///
 /// Given
@@ -4990,7 +5101,7 @@
   return InnerMatcher.matches(*Node.getSizeExpr(), Finder, Builder);
 }
 
-/// \brief Matches atomic types.
+/// Matches atomic types.
 ///
 /// Given
 /// \code
@@ -5000,7 +5111,7 @@
 ///   matches "_Atomic(int) i"
 extern const AstTypeMatcher<AtomicType> atomicType;
 
-/// \brief Matches atomic types with a specific value type.
+/// Matches atomic types with a specific value type.
 ///
 /// Given
 /// \code
@@ -5014,7 +5125,7 @@
 AST_TYPELOC_TRAVERSE_MATCHER_DECL(hasValueType, getValue,
                                   AST_POLYMORPHIC_SUPPORTED_TYPES(AtomicType));
 
-/// \brief Matches types nodes representing C++11 auto types.
+/// Matches types nodes representing C++11 auto types.
 ///
 /// Given:
 /// \code
@@ -5026,7 +5137,19 @@
 ///   matches "auto n" and "auto i"
 extern const AstTypeMatcher<AutoType> autoType;
 
-/// \brief Matches \c AutoType nodes where the deduced type is a specific type.
+/// Matches types nodes representing C++11 decltype(<expr>) types.
+///
+/// Given:
+/// \code
+///   short i = 1;
+///   int j = 42;
+///   decltype(i + j) result = i + j;
+/// \endcode
+/// decltypeType()
+///   matches "decltype(i + j)"
+extern const AstTypeMatcher<DecltypeType> decltypeType;
+
+/// Matches \c AutoType nodes where the deduced type is a specific type.
 ///
 /// Note: There is no \c TypeLoc for the deduced type and thus no
 /// \c getDeducedLoc() matcher.
@@ -5043,7 +5166,21 @@
 AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType,
                           AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType));
 
-/// \brief Matches \c FunctionType nodes.
+/// Matches \c DecltypeType nodes to find out the underlying type.
+///
+/// Given
+/// \code
+///   decltype(1) a = 1;
+///   decltype(2.0) b = 2.0;
+/// \endcode
+/// decltypeType(hasUnderlyingType(isInteger()))
+///   matches "auto a"
+///
+/// Usable as: Matcher<DecltypeType>
+AST_TYPE_TRAVERSE_MATCHER(hasUnderlyingType, getUnderlyingType,
+                          AST_POLYMORPHIC_SUPPORTED_TYPES(DecltypeType));
+
+/// Matches \c FunctionType nodes.
 ///
 /// Given
 /// \code
@@ -5054,7 +5191,7 @@
 ///   matches "int (*f)(int)" and the type of "g".
 extern const AstTypeMatcher<FunctionType> functionType;
 
-/// \brief Matches \c FunctionProtoType nodes.
+/// Matches \c FunctionProtoType nodes.
 ///
 /// Given
 /// \code
@@ -5066,7 +5203,7 @@
 ///   In C mode, "g" is not matched because it does not contain a prototype.
 extern const AstTypeMatcher<FunctionProtoType> functionProtoType;
 
-/// \brief Matches \c ParenType nodes.
+/// Matches \c ParenType nodes.
 ///
 /// Given
 /// \code
@@ -5078,7 +5215,7 @@
 /// \c array_of_ptrs.
 extern const AstTypeMatcher<ParenType> parenType;
 
-/// \brief Matches \c ParenType nodes where the inner type is a specific type.
+/// Matches \c ParenType nodes where the inner type is a specific type.
 ///
 /// Given
 /// \code
@@ -5093,13 +5230,13 @@
 AST_TYPE_TRAVERSE_MATCHER(innerType, getInnerType,
                           AST_POLYMORPHIC_SUPPORTED_TYPES(ParenType));
 
-/// \brief Matches block pointer types, i.e. types syntactically represented as
+/// Matches block pointer types, i.e. types syntactically represented as
 /// "void (^)(int)".
 ///
 /// The \c pointee is always required to be a \c FunctionType.
 extern const AstTypeMatcher<BlockPointerType> blockPointerType;
 
-/// \brief Matches member pointer types.
+/// Matches member pointer types.
 /// Given
 /// \code
 ///   struct A { int i; }
@@ -5109,7 +5246,7 @@
 ///   matches "A::* ptr"
 extern const AstTypeMatcher<MemberPointerType> memberPointerType;
 
-/// \brief Matches pointer types, but does not match Objective-C object pointer
+/// Matches pointer types, but does not match Objective-C object pointer
 /// types.
 ///
 /// Given
@@ -5126,7 +5263,7 @@
 ///   matches "int *a", but does not match "Foo *f".
 extern const AstTypeMatcher<PointerType> pointerType;
 
-/// \brief Matches an Objective-C object pointer type, which is different from
+/// Matches an Objective-C object pointer type, which is different from
 /// a pointer type, despite being syntactically similar.
 ///
 /// Given
@@ -5141,7 +5278,7 @@
 ///   matches "Foo *f", but does not match "int *a".
 extern const AstTypeMatcher<ObjCObjectPointerType> objcObjectPointerType;
 
-/// \brief Matches both lvalue and rvalue reference types.
+/// Matches both lvalue and rvalue reference types.
 ///
 /// Given
 /// \code
@@ -5157,7 +5294,7 @@
 /// \c referenceType() matches the types of \c b, \c c, \c d, \c e, and \c f.
 extern const AstTypeMatcher<ReferenceType> referenceType;
 
-/// \brief Matches lvalue reference types.
+/// Matches lvalue reference types.
 ///
 /// Given:
 /// \code
@@ -5174,7 +5311,7 @@
 /// matched since the type is deduced as int& by reference collapsing rules.
 extern const AstTypeMatcher<LValueReferenceType> lValueReferenceType;
 
-/// \brief Matches rvalue reference types.
+/// Matches rvalue reference types.
 ///
 /// Given:
 /// \code
@@ -5191,7 +5328,7 @@
 /// matched as it is deduced to int& by reference collapsing rules.
 extern const AstTypeMatcher<RValueReferenceType> rValueReferenceType;
 
-/// \brief Narrows PointerType (and similar) matchers to those where the
+/// Narrows PointerType (and similar) matchers to those where the
 /// \c pointee matches a given matcher.
 ///
 /// Given
@@ -5210,7 +5347,7 @@
     AST_POLYMORPHIC_SUPPORTED_TYPES(BlockPointerType, MemberPointerType,
                                     PointerType, ReferenceType));
 
-/// \brief Matches typedef types.
+/// Matches typedef types.
 ///
 /// Given
 /// \code
@@ -5220,7 +5357,7 @@
 ///   matches "typedef int X"
 extern const AstTypeMatcher<TypedefType> typedefType;
 
-/// \brief Matches enum types.
+/// Matches enum types.
 ///
 /// Given
 /// \code
@@ -5235,7 +5372,7 @@
 /// \c s.
 extern const AstTypeMatcher<EnumType> enumType;
 
-/// \brief Matches template specialization types.
+/// Matches template specialization types.
 ///
 /// Given
 /// \code
@@ -5251,7 +5388,7 @@
 extern const AstTypeMatcher<TemplateSpecializationType>
     templateSpecializationType;
 
-/// \brief Matches types nodes representing unary type transformations.
+/// Matches types nodes representing unary type transformations.
 ///
 /// Given:
 /// \code
@@ -5261,7 +5398,7 @@
 ///   matches "__underlying_type(T)"
 extern const AstTypeMatcher<UnaryTransformType> unaryTransformType;
 
-/// \brief Matches record types (e.g. structs, classes).
+/// Matches record types (e.g. structs, classes).
 ///
 /// Given
 /// \code
@@ -5276,7 +5413,7 @@
 /// and \c s.
 extern const AstTypeMatcher<RecordType> recordType;
 
-/// \brief Matches tag types (record and enum types).
+/// Matches tag types (record and enum types).
 ///
 /// Given
 /// \code
@@ -5291,7 +5428,7 @@
 /// and \c c.
 extern const AstTypeMatcher<TagType> tagType;
 
-/// \brief Matches types specified with an elaborated type keyword or with a
+/// Matches types specified with an elaborated type keyword or with a
 /// qualified name.
 ///
 /// Given
@@ -5311,7 +5448,7 @@
 /// \c c and \c d.
 extern const AstTypeMatcher<ElaboratedType> elaboratedType;
 
-/// \brief Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
+/// Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
 /// matches \c InnerMatcher if the qualifier exists.
 ///
 /// Given
@@ -5334,7 +5471,7 @@
   return false;
 }
 
-/// \brief Matches ElaboratedTypes whose named type matches \c InnerMatcher.
+/// Matches ElaboratedTypes whose named type matches \c InnerMatcher.
 ///
 /// Given
 /// \code
@@ -5354,7 +5491,7 @@
   return InnerMatcher.matches(Node.getNamedType(), Finder, Builder);
 }
 
-/// \brief Matches types that represent the result of substituting a type for a
+/// Matches types that represent the result of substituting a type for a
 /// template type parameter.
 ///
 /// Given
@@ -5369,7 +5506,7 @@
 extern const AstTypeMatcher<SubstTemplateTypeParmType>
     substTemplateTypeParmType;
 
-/// \brief Matches template type parameter substitutions that have a replacement
+/// Matches template type parameter substitutions that have a replacement
 /// type that matches the provided matcher.
 ///
 /// Given
@@ -5385,7 +5522,7 @@
     hasReplacementType, getReplacementType,
     AST_POLYMORPHIC_SUPPORTED_TYPES(SubstTemplateTypeParmType));
 
-/// \brief Matches template type parameter types.
+/// Matches template type parameter types.
 ///
 /// Example matches T, but not int.
 ///     (matcher = templateTypeParmType())
@@ -5394,7 +5531,7 @@
 /// \endcode
 extern const AstTypeMatcher<TemplateTypeParmType> templateTypeParmType;
 
-/// \brief Matches injected class name types.
+/// Matches injected class name types.
 ///
 /// Example matches S s, but not S<T> s.
 ///     (matcher = parmVarDecl(hasType(injectedClassNameType())))
@@ -5406,7 +5543,7 @@
 /// \endcode
 extern const AstTypeMatcher<InjectedClassNameType> injectedClassNameType;
 
-/// \brief Matches decayed type
+/// Matches decayed type
 /// Example matches i[] in declaration of f.
 ///     (matcher = valueDecl(hasType(decayedType(hasDecayedType(pointerType())))))
 /// Example matches i[1].
@@ -5418,13 +5555,13 @@
 /// \endcode
 extern const AstTypeMatcher<DecayedType> decayedType;
 
-/// \brief Matches the decayed type, whos decayed type matches \c InnerMatcher
+/// Matches the decayed type, whos decayed type matches \c InnerMatcher
 AST_MATCHER_P(DecayedType, hasDecayedType, internal::Matcher<QualType>,
               InnerType) {
   return InnerType.matches(Node.getDecayedType(), Finder, Builder);
 }
 
-/// \brief Matches declarations whose declaration context, interpreted as a
+/// Matches declarations whose declaration context, interpreted as a
 /// Decl, matches \c InnerMatcher.
 ///
 /// Given
@@ -5444,7 +5581,7 @@
   return InnerMatcher.matches(*Decl::castFromDeclContext(DC), Finder, Builder);
 }
 
-/// \brief Matches nested name specifiers.
+/// Matches nested name specifiers.
 ///
 /// Given
 /// \code
@@ -5460,11 +5597,11 @@
 extern const internal::VariadicAllOfMatcher<NestedNameSpecifier>
     nestedNameSpecifier;
 
-/// \brief Same as \c nestedNameSpecifier but matches \c NestedNameSpecifierLoc.
+/// Same as \c nestedNameSpecifier but matches \c NestedNameSpecifierLoc.
 extern const internal::VariadicAllOfMatcher<NestedNameSpecifierLoc>
     nestedNameSpecifierLoc;
 
-/// \brief Matches \c NestedNameSpecifierLocs for which the given inner
+/// Matches \c NestedNameSpecifierLocs for which the given inner
 /// NestedNameSpecifier-matcher matches.
 AST_MATCHER_FUNCTION_P_OVERLOAD(
     internal::BindableMatcher<NestedNameSpecifierLoc>, loc,
@@ -5474,7 +5611,7 @@
           InnerMatcher));
 }
 
-/// \brief Matches nested name specifiers that specify a type matching the
+/// Matches nested name specifiers that specify a type matching the
 /// given \c QualType matcher without qualifiers.
 ///
 /// Given
@@ -5493,7 +5630,7 @@
   return InnerMatcher.matches(QualType(Node.getAsType(), 0), Finder, Builder);
 }
 
-/// \brief Matches nested name specifier locs that specify a type matching the
+/// Matches nested name specifier locs that specify a type matching the
 /// given \c TypeLoc.
 ///
 /// Given
@@ -5506,10 +5643,11 @@
 ///   matches "A::"
 AST_MATCHER_P(NestedNameSpecifierLoc, specifiesTypeLoc,
               internal::Matcher<TypeLoc>, InnerMatcher) {
-  return Node && InnerMatcher.matches(Node.getTypeLoc(), Finder, Builder);
+  return Node && Node.getNestedNameSpecifier()->getAsType() &&
+         InnerMatcher.matches(Node.getTypeLoc(), Finder, Builder);
 }
 
-/// \brief Matches on the prefix of a \c NestedNameSpecifier.
+/// Matches on the prefix of a \c NestedNameSpecifier.
 ///
 /// Given
 /// \code
@@ -5527,7 +5665,7 @@
   return InnerMatcher.matches(*NextNode, Finder, Builder);
 }
 
-/// \brief Matches on the prefix of a \c NestedNameSpecifierLoc.
+/// Matches on the prefix of a \c NestedNameSpecifierLoc.
 ///
 /// Given
 /// \code
@@ -5545,7 +5683,7 @@
   return InnerMatcher.matches(NextNode, Finder, Builder);
 }
 
-/// \brief Matches nested name specifiers that specify a namespace matching the
+/// Matches nested name specifiers that specify a namespace matching the
 /// given namespace matcher.
 ///
 /// Given
@@ -5562,23 +5700,23 @@
   return InnerMatcher.matches(*Node.getAsNamespace(), Finder, Builder);
 }
 
-/// \brief Overloads for the \c equalsNode matcher.
+/// Overloads for the \c equalsNode matcher.
 /// FIXME: Implement for other node types.
 /// @{
 
-/// \brief Matches if a node equals another node.
+/// Matches if a node equals another node.
 ///
 /// \c Decl has pointer identity in the AST.
 AST_MATCHER_P_OVERLOAD(Decl, equalsNode, const Decl*, Other, 0) {
   return &Node == Other;
 }
-/// \brief Matches if a node equals another node.
+/// Matches if a node equals another node.
 ///
 /// \c Stmt has pointer identity in the AST.
 AST_MATCHER_P_OVERLOAD(Stmt, equalsNode, const Stmt*, Other, 1) {
   return &Node == Other;
 }
-/// \brief Matches if a node equals another node.
+/// Matches if a node equals another node.
 ///
 /// \c Type has pointer identity in the AST.
 AST_MATCHER_P_OVERLOAD(Type, equalsNode, const Type*, Other, 2) {
@@ -5587,7 +5725,7 @@
 
 /// @}
 
-/// \brief Matches each case or default statement belonging to the given switch
+/// Matches each case or default statement belonging to the given switch
 /// statement. This matcher may produce multiple matches.
 ///
 /// Given
@@ -5619,7 +5757,7 @@
   return Matched;
 }
 
-/// \brief Matches each constructor initializer in a constructor definition.
+/// Matches each constructor initializer in a constructor definition.
 ///
 /// Given
 /// \code
@@ -5644,7 +5782,7 @@
   return Matched;
 }
 
-/// \brief Matches constructor declarations that are copy constructors.
+/// Matches constructor declarations that are copy constructors.
 ///
 /// Given
 /// \code
@@ -5659,7 +5797,7 @@
   return Node.isCopyConstructor();
 }
 
-/// \brief Matches constructor declarations that are move constructors.
+/// Matches constructor declarations that are move constructors.
 ///
 /// Given
 /// \code
@@ -5674,7 +5812,7 @@
   return Node.isMoveConstructor();
 }
 
-/// \brief Matches constructor declarations that are default constructors.
+/// Matches constructor declarations that are default constructors.
 ///
 /// Given
 /// \code
@@ -5689,7 +5827,7 @@
   return Node.isDefaultConstructor();
 }
 
-/// \brief Matches constructors that delegate to another constructor.
+/// Matches constructors that delegate to another constructor.
 ///
 /// Given
 /// \code
@@ -5706,7 +5844,7 @@
   return Node.isDelegatingConstructor();
 }
 
-/// \brief Matches constructor and conversion declarations that are marked with
+/// Matches constructor and conversion declarations that are marked with
 /// the explicit keyword.
 ///
 /// Given
@@ -5726,7 +5864,7 @@
   return Node.isExplicit();
 }
 
-/// \brief Matches function and namespace declarations that are marked with
+/// Matches function and namespace declarations that are marked with
 /// the inline keyword.
 ///
 /// Given
@@ -5751,7 +5889,7 @@
   llvm_unreachable("Not a valid polymorphic type");
 }
 
-/// \brief Matches anonymous namespace declarations.
+/// Matches anonymous namespace declarations.
 ///
 /// Given
 /// \code
@@ -5764,7 +5902,7 @@
   return Node.isAnonymousNamespace();
 }
 
-/// \brief If the given case statement does not use the GNU case range
+/// If the given case statement does not use the GNU case range
 /// extension, matches the constant given in the statement.
 ///
 /// Given
@@ -5781,7 +5919,7 @@
   return InnerMatcher.matches(*Node.getLHS(), Finder, Builder);
 }
 
-/// \brief Matches declaration that has a given attribute.
+/// Matches declaration that has a given attribute.
 ///
 /// Given
 /// \code
@@ -5798,7 +5936,7 @@
   return false;
 }
 
-/// \brief Matches the return value expression of a return statement
+/// Matches the return value expression of a return statement
 ///
 /// Given
 /// \code
@@ -5815,7 +5953,7 @@
   return false;
 }
 
-/// \brief Matches CUDA kernel call expression.
+/// Matches CUDA kernel call expression.
 ///
 /// Example matches,
 /// \code
@@ -5824,7 +5962,7 @@
 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr>
     cudaKernelCallExpr;
 
-/// \brief Matches expressions that resolve to a null pointer constant, such as
+/// Matches expressions that resolve to a null pointer constant, such as
 /// GNU's __null, C++11's nullptr, or C's NULL macro.
 ///
 /// Given:
@@ -5845,7 +5983,7 @@
       integerLiteral(equals(0), hasParent(expr(hasType(pointerType())))));
 }
 
-/// \brief Matches declaration of the function the statement belongs to
+/// Matches declaration of the function the statement belongs to
 ///
 /// Given:
 /// \code
@@ -5883,7 +6021,7 @@
   return false;
 }
 
-/// \brief Matches a declaration that has external formal linkage.
+/// Matches a declaration that has external formal linkage.
 ///
 /// Example matches only z (matcher = varDecl(hasExternalFormalLinkage()))
 /// \code
@@ -5907,18 +6045,18 @@
   return Node.hasExternalFormalLinkage();
 }
 
-/// \brief Matches a declaration that has default arguments.
+/// Matches a declaration that has default arguments.
 ///
 /// Example matches y (matcher = parmVarDecl(hasDefaultArgument()))
 /// \code
 /// void x(int val) {}
 /// void y(int val = 0) {}
 /// \endcode
-AST_MATCHER(ParmVarDecl, hasDefaultArgument) { 
-  return Node.hasDefaultArg(); 
+AST_MATCHER(ParmVarDecl, hasDefaultArgument) {
+  return Node.hasDefaultArg();
 }
 
-/// \brief Matches array new expressions.
+/// Matches array new expressions.
 ///
 /// Given:
 /// \code
@@ -5930,7 +6068,7 @@
   return Node.isArray();
 }
 
-/// \brief Matches array new expressions with a given array size.
+/// Matches array new expressions with a given array size.
 ///
 /// Given:
 /// \code
@@ -5943,7 +6081,7 @@
     InnerMatcher.matches(*Node.getArraySize(), Finder, Builder);
 }
 
-/// \brief Matches a class declaration that is defined.
+/// Matches a class declaration that is defined.
 ///
 /// Example matches x (matcher = cxxRecordDecl(hasDefinition()))
 /// \code
@@ -5954,7 +6092,7 @@
   return Node.hasDefinition();
 }
 
-/// \brief Matches C++11 scoped enum declaration.
+/// Matches C++11 scoped enum declaration.
 ///
 /// Example matches Y (matcher = enumDecl(isScoped()))
 /// \code
@@ -5965,7 +6103,7 @@
   return Node.isScoped();
 }
 
-/// \brief Matches a function declared with a trailing return type.
+/// Matches a function declared with a trailing return type.
 ///
 /// Example matches Y (matcher = functionDecl(hasTrailingReturn()))
 /// \code
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
index 8c1267b..9d9f867 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
@@ -38,9 +38,12 @@
 #include "clang/AST/ASTTypeTraits.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/DeclCXX.h"
+#include "clang/AST/DeclFriend.h"
 #include "clang/AST/DeclTemplate.h"
 #include "clang/AST/Expr.h"
+#include "clang/AST/ExprObjC.h"
 #include "clang/AST/ExprCXX.h"
+#include "clang/AST/ExprObjC.h"
 #include "clang/AST/NestedNameSpecifier.h"
 #include "clang/AST/Stmt.h"
 #include "clang/AST/TemplateName.h"
@@ -80,7 +83,7 @@
 
 namespace internal {
 
-/// \brief Variadic function object.
+/// Variadic function object.
 ///
 /// Most of the functions below that use VariadicFunction could be implemented
 /// using plain C++11 variadic functions, but the function object allows us to
@@ -113,19 +116,23 @@
   }
 };
 
-/// \brief Unifies obtaining the underlying type of a regular node through
+/// Unifies obtaining the underlying type of a regular node through
 /// `getType` and a TypedefNameDecl node through `getUnderlyingType`.
 inline QualType getUnderlyingType(const Expr &Node) { return Node.getType(); }
 
 inline QualType getUnderlyingType(const ValueDecl &Node) {
   return Node.getType();
 }
-
 inline QualType getUnderlyingType(const TypedefNameDecl &Node) {
   return Node.getUnderlyingType();
 }
+inline QualType getUnderlyingType(const FriendDecl &Node) {
+  if (const TypeSourceInfo *TSI = Node.getFriendType())
+    return TSI->getType();
+  return QualType();
+}
 
-/// \brief Unifies obtaining the FunctionProtoType pointer from both
+/// Unifies obtaining the FunctionProtoType pointer from both
 /// FunctionProtoType and FunctionDecl nodes..
 inline const FunctionProtoType *
 getFunctionProtoType(const FunctionProtoType &Node) {
@@ -136,17 +143,17 @@
   return Node.getType()->getAs<FunctionProtoType>();
 }
 
-/// \brief Internal version of BoundNodes. Holds all the bound nodes.
+/// Internal version of BoundNodes. Holds all the bound nodes.
 class BoundNodesMap {
 public:
-  /// \brief Adds \c Node to the map with key \c ID.
+  /// Adds \c Node to the map with key \c ID.
   ///
   /// The node's base type should be in NodeBaseType or it will be unaccessible.
   void addNode(StringRef ID, const ast_type_traits::DynTypedNode& DynNode) {
     NodeMap[ID] = DynNode;
   }
 
-  /// \brief Returns the AST node bound to \c ID.
+  /// Returns the AST node bound to \c ID.
   ///
   /// Returns NULL if there was no node bound to \c ID or if there is a node but
   /// it cannot be converted to the specified type.
@@ -167,12 +174,12 @@
     return It->second;
   }
 
-  /// \brief Imposes an order on BoundNodesMaps.
+  /// Imposes an order on BoundNodesMaps.
   bool operator<(const BoundNodesMap &Other) const {
     return NodeMap < Other.NodeMap;
   }
 
-  /// \brief A map from IDs to the bound nodes.
+  /// A map from IDs to the bound nodes.
   ///
   /// Note that we're using std::map here, as for memoization:
   /// - we need a comparison operator
@@ -183,7 +190,7 @@
     return NodeMap;
   }
 
-  /// \brief Returns \c true if this \c BoundNodesMap can be compared, i.e. all
+  /// Returns \c true if this \c BoundNodesMap can be compared, i.e. all
   /// stored nodes have memoization data.
   bool isComparable() const {
     for (const auto &IDAndNode : NodeMap) {
@@ -197,25 +204,25 @@
   IDToNodeMap NodeMap;
 };
 
-/// \brief Creates BoundNodesTree objects.
+/// Creates BoundNodesTree objects.
 ///
 /// The tree builder is used during the matching process to insert the bound
 /// nodes from the Id matcher.
 class BoundNodesTreeBuilder {
 public:
-  /// \brief A visitor interface to visit all BoundNodes results for a
+  /// A visitor interface to visit all BoundNodes results for a
   /// BoundNodesTree.
   class Visitor {
   public:
     virtual ~Visitor() = default;
 
-    /// \brief Called multiple times during a single call to VisitMatches(...).
+    /// Called multiple times during a single call to VisitMatches(...).
     ///
     /// 'BoundNodesView' contains the bound nodes for a single match.
     virtual void visitMatch(const BoundNodes& BoundNodesView) = 0;
   };
 
-  /// \brief Add a binding from an id to a node.
+  /// Add a binding from an id to a node.
   void setBinding(StringRef Id, const ast_type_traits::DynTypedNode &DynNode) {
     if (Bindings.empty())
       Bindings.emplace_back();
@@ -223,10 +230,10 @@
       Binding.addNode(Id, DynNode);
   }
 
-  /// \brief Adds a branch in the tree.
+  /// Adds a branch in the tree.
   void addMatch(const BoundNodesTreeBuilder &Bindings);
 
-  /// \brief Visits all matches that this BoundNodesTree represents.
+  /// Visits all matches that this BoundNodesTree represents.
   ///
   /// The ownership of 'ResultVisitor' remains at the caller.
   void visitMatches(Visitor* ResultVisitor);
@@ -238,12 +245,12 @@
     return !Bindings.empty();
   }
 
-  /// \brief Imposes an order on BoundNodesTreeBuilders.
+  /// Imposes an order on BoundNodesTreeBuilders.
   bool operator<(const BoundNodesTreeBuilder &Other) const {
     return Bindings < Other.Bindings;
   }
 
-  /// \brief Returns \c true if this \c BoundNodesTreeBuilder can be compared,
+  /// Returns \c true if this \c BoundNodesTreeBuilder can be compared,
   /// i.e. all stored node maps have memoization data.
   bool isComparable() const {
     for (const BoundNodesMap &NodesMap : Bindings) {
@@ -259,7 +266,7 @@
 
 class ASTMatchFinder;
 
-/// \brief Generic interface for all matchers.
+/// Generic interface for all matchers.
 ///
 /// Used by the implementation of Matcher<T> and DynTypedMatcher.
 /// In general, implement MatcherInterface<T> or SingleNodeMatcherInterface<T>
@@ -269,7 +276,7 @@
 public:
   virtual ~DynMatcherInterface() = default;
 
-  /// \brief Returns true if \p DynNode can be matched.
+  /// Returns true if \p DynNode can be matched.
   ///
   /// May bind \p DynNode to an ID via \p Builder, or recurse into
   /// the AST via \p Finder.
@@ -278,7 +285,7 @@
                           BoundNodesTreeBuilder *Builder) const = 0;
 };
 
-/// \brief Generic interface for matchers on an AST node of type T.
+/// Generic interface for matchers on an AST node of type T.
 ///
 /// Implement this if your matcher may need to inspect the children or
 /// descendants of the node or bind matched nodes to names. If you are
@@ -288,7 +295,7 @@
 template <typename T>
 class MatcherInterface : public DynMatcherInterface {
 public:
-  /// \brief Returns true if 'Node' can be matched.
+  /// Returns true if 'Node' can be matched.
   ///
   /// May bind 'Node' to an ID via 'Builder', or recurse into
   /// the AST via 'Finder'.
@@ -303,12 +310,12 @@
   }
 };
 
-/// \brief Interface for matchers that only evaluate properties on a single
+/// Interface for matchers that only evaluate properties on a single
 /// node.
 template <typename T>
 class SingleNodeMatcherInterface : public MatcherInterface<T> {
 public:
-  /// \brief Returns true if the matcher matches the provided node.
+  /// Returns true if the matcher matches the provided node.
   ///
   /// A subclass must implement this instead of Matches().
   virtual bool matchesNode(const T &Node) const = 0;
@@ -324,7 +331,7 @@
 
 template <typename> class Matcher;
 
-/// \brief Matcher that works on a \c DynTypedNode.
+/// Matcher that works on a \c DynTypedNode.
 ///
 /// It is constructed from a \c Matcher<T> object and redirects most calls to
 /// underlying matcher.
@@ -333,26 +340,26 @@
 /// return false if it is not convertible.
 class DynTypedMatcher {
 public:
-  /// \brief Takes ownership of the provided implementation pointer.
+  /// Takes ownership of the provided implementation pointer.
   template <typename T>
   DynTypedMatcher(MatcherInterface<T> *Implementation)
       : SupportedKind(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()),
         RestrictKind(SupportedKind), Implementation(Implementation) {}
 
-  /// \brief Construct from a variadic function.
+  /// Construct from a variadic function.
   enum VariadicOperator {
-    /// \brief Matches nodes for which all provided matchers match.
+    /// Matches nodes for which all provided matchers match.
     VO_AllOf,
 
-    /// \brief Matches nodes for which at least one of the provided matchers
+    /// Matches nodes for which at least one of the provided matchers
     /// matches.
     VO_AnyOf,
 
-    /// \brief Matches nodes for which at least one of the provided matchers
+    /// Matches nodes for which at least one of the provided matchers
     /// matches, but doesn't stop at the first match.
     VO_EachOf,
 
-    /// \brief Matches nodes that do not match the provided matcher.
+    /// Matches nodes that do not match the provided matcher.
     ///
     /// Uses the variadic matcher interface, but fails if
     /// InnerMatchers.size() != 1.
@@ -364,27 +371,27 @@
                     ast_type_traits::ASTNodeKind SupportedKind,
                     std::vector<DynTypedMatcher> InnerMatchers);
 
-  /// \brief Get a "true" matcher for \p NodeKind.
+  /// Get a "true" matcher for \p NodeKind.
   ///
   /// It only checks that the node is of the right kind.
   static DynTypedMatcher trueMatcher(ast_type_traits::ASTNodeKind NodeKind);
 
   void setAllowBind(bool AB) { AllowBind = AB; }
 
-  /// \brief Check whether this matcher could ever match a node of kind \p Kind.
+  /// Check whether this matcher could ever match a node of kind \p Kind.
   /// \return \c false if this matcher will never match such a node. Otherwise,
   /// return \c true.
   bool canMatchNodesOfKind(ast_type_traits::ASTNodeKind Kind) const;
 
-  /// \brief Return a matcher that points to the same implementation, but
+  /// Return a matcher that points to the same implementation, but
   ///   restricts the node types for \p Kind.
   DynTypedMatcher dynCastTo(const ast_type_traits::ASTNodeKind Kind) const;
 
-  /// \brief Returns true if the matcher matches the given \c DynNode.
+  /// Returns true if the matcher matches the given \c DynNode.
   bool matches(const ast_type_traits::DynTypedNode &DynNode,
                ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder) const;
 
-  /// \brief Same as matches(), but skips the kind check.
+  /// Same as matches(), but skips the kind check.
   ///
   /// It is faster, but the caller must ensure the node is valid for the
   /// kind of this matcher.
@@ -392,12 +399,12 @@
                           ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const;
 
-  /// \brief Bind the specified \p ID to the matcher.
+  /// Bind the specified \p ID to the matcher.
   /// \return A new matcher with the \p ID bound to it if this matcher supports
   ///   binding. Otherwise, returns an empty \c Optional<>.
   llvm::Optional<DynTypedMatcher> tryBind(StringRef ID) const;
 
-  /// \brief Returns a unique \p ID for the matcher.
+  /// Returns a unique \p ID for the matcher.
   ///
   /// Casting a Matcher<T> to Matcher<U> creates a matcher that has the
   /// same \c Implementation pointer, but different \c RestrictKind. We need to
@@ -412,7 +419,7 @@
                           reinterpret_cast<uint64_t>(Implementation.get()));
   }
 
-  /// \brief Returns the type this matcher works on.
+  /// Returns the type this matcher works on.
   ///
   /// \c matches() will always return false unless the node passed is of this
   /// or a derived type.
@@ -420,7 +427,7 @@
     return SupportedKind;
   }
 
-  /// \brief Returns \c true if the passed \c DynTypedMatcher can be converted
+  /// Returns \c true if the passed \c DynTypedMatcher can be converted
   ///   to a \c Matcher<T>.
   ///
   /// This method verifies that the underlying matcher in \c Other can process
@@ -430,7 +437,7 @@
   }
   bool canConvertTo(ast_type_traits::ASTNodeKind To) const;
 
-  /// \brief Construct a \c Matcher<T> interface around the dynamic matcher.
+  /// Construct a \c Matcher<T> interface around the dynamic matcher.
   ///
   /// This method asserts that \c canConvertTo() is \c true. Callers
   /// should call \c canConvertTo() first to make sure that \c this is
@@ -440,7 +447,7 @@
     return unconditionalConvertTo<T>();
   }
 
-  /// \brief Same as \c convertTo(), but does not check that the underlying
+  /// Same as \c convertTo(), but does not check that the underlying
   ///   matcher can handle a value of T.
   ///
   /// If it is not compatible, then this matcher will never match anything.
@@ -456,7 +463,7 @@
   bool AllowBind = false;
   ast_type_traits::ASTNodeKind SupportedKind;
 
-  /// \brief A potentially stricter node kind.
+  /// A potentially stricter node kind.
   ///
   /// It allows to perform implicit and dynamic cast of matchers without
   /// needing to change \c Implementation.
@@ -464,7 +471,7 @@
   IntrusiveRefCntPtr<DynMatcherInterface> Implementation;
 };
 
-/// \brief Wrapper base class for a wrapping matcher.
+/// Wrapper base class for a wrapping matcher.
 ///
 /// This is just a container for a DynTypedMatcher that can be used as a base
 /// class for another matcher.
@@ -477,7 +484,7 @@
   const DynTypedMatcher InnerMatcher;
 };
 
-/// \brief Wrapper of a MatcherInterface<T> *that allows copying.
+/// Wrapper of a MatcherInterface<T> *that allows copying.
 ///
 /// A Matcher<Base> can be used anywhere a Matcher<Derived> is
 /// required. This establishes an is-a relationship which is reverse
@@ -488,11 +495,11 @@
 template <typename T>
 class Matcher {
 public:
-  /// \brief Takes ownership of the provided implementation pointer.
+  /// Takes ownership of the provided implementation pointer.
   explicit Matcher(MatcherInterface<T> *Implementation)
       : Implementation(Implementation) {}
 
-  /// \brief Implicitly converts \c Other to a Matcher<T>.
+  /// Implicitly converts \c Other to a Matcher<T>.
   ///
   /// Requires \c T to be derived from \c From.
   template <typename From>
@@ -504,7 +511,7 @@
         ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
   }
 
-  /// \brief Implicitly converts \c Matcher<Type> to \c Matcher<QualType>.
+  /// Implicitly converts \c Matcher<Type> to \c Matcher<QualType>.
   ///
   /// The resulting matcher is not strict, i.e. ignores qualifiers.
   template <typename TypeT>
@@ -514,7 +521,7 @@
             std::is_same<TypeT, Type>::value>::type* = nullptr)
       : Implementation(new TypeToQualType<TypeT>(Other)) {}
 
-  /// \brief Convert \c this into a \c Matcher<T> by applying dyn_cast<> to the
+  /// Convert \c this into a \c Matcher<T> by applying dyn_cast<> to the
   /// argument.
   /// \c To must be a base class of \c T.
   template <typename To>
@@ -523,7 +530,7 @@
     return Matcher<To>(Implementation);
   }
 
-  /// \brief Forwards the call to the underlying MatcherInterface<T> pointer.
+  /// Forwards the call to the underlying MatcherInterface<T> pointer.
   bool matches(const T &Node,
                ASTMatchFinder *Finder,
                BoundNodesTreeBuilder *Builder) const {
@@ -531,18 +538,18 @@
                                   Finder, Builder);
   }
 
-  /// \brief Returns an ID that uniquely identifies the matcher.
+  /// Returns an ID that uniquely identifies the matcher.
   DynTypedMatcher::MatcherIDType getID() const {
     return Implementation.getID();
   }
 
-  /// \brief Extract the dynamic matcher.
+  /// Extract the dynamic matcher.
   ///
   /// The returned matcher keeps the same restrictions as \c this and remembers
   /// that it is meant to support nodes of type \c T.
   operator DynTypedMatcher() const { return Implementation; }
 
-  /// \brief Allows the conversion of a \c Matcher<Type> to a \c
+  /// Allows the conversion of a \c Matcher<Type> to a \c
   /// Matcher<QualType>.
   ///
   /// Depending on the constructor argument, the matcher is either strict, i.e.
@@ -583,14 +590,14 @@
   DynTypedMatcher Implementation;
 };  // class Matcher
 
-/// \brief A convenient helper for creating a Matcher<T> without specifying
+/// A convenient helper for creating a Matcher<T> without specifying
 /// the template type argument.
 template <typename T>
 inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
   return Matcher<T>(Implementation);
 }
 
-/// \brief Specialization of the conversion functions for QualType.
+/// Specialization of the conversion functions for QualType.
 ///
 /// This specialization provides the Matcher<Type>->Matcher<QualType>
 /// conversion that the static API does.
@@ -606,7 +613,7 @@
   return unconditionalConvertTo<QualType>();
 }
 
-/// \brief Finds the first node in a range that matches the given matcher.
+/// Finds the first node in a range that matches the given matcher.
 template <typename MatcherT, typename IteratorT>
 bool matchesFirstInRange(const MatcherT &Matcher, IteratorT Start,
                          IteratorT End, ASTMatchFinder *Finder,
@@ -621,7 +628,7 @@
   return false;
 }
 
-/// \brief Finds the first node in a pointer range that matches the given
+/// Finds the first node in a pointer range that matches the given
 /// matcher.
 template <typename MatcherT, typename IteratorT>
 bool matchesFirstInPointerRange(const MatcherT &Matcher, IteratorT Start,
@@ -653,7 +660,7 @@
   static const bool value = sizeof(test<Ty>(nullptr)) == sizeof(yes);
 };
 
-/// \brief Matches overloaded operators with a specific name.
+/// Matches overloaded operators with a specific name.
 ///
 /// The type argument ArgT is not used by this matcher but is used by
 /// PolymorphicMatcherWithParam1 and should be StringRef.
@@ -675,14 +682,14 @@
 
 private:
 
-  /// \brief CXXOperatorCallExpr exist only for calls to overloaded operators
+  /// CXXOperatorCallExpr exist only for calls to overloaded operators
   /// so this function returns true if the call is to an operator of the given
   /// name.
   bool matchesSpecialized(const CXXOperatorCallExpr &Node) const {
     return getOperatorSpelling(Node.getOperator()) == Name;
   }
 
-  /// \brief Returns true only if CXXMethodDecl represents an overloaded
+  /// Returns true only if CXXMethodDecl represents an overloaded
   /// operator and has the given operator name.
   bool matchesSpecialized(const FunctionDecl &Node) const {
     return Node.isOverloadedOperator() &&
@@ -692,7 +699,7 @@
   std::string Name;
 };
 
-/// \brief Matches named declarations with a specific name.
+/// Matches named declarations with a specific name.
 ///
 /// See \c hasName() and \c hasAnyName() in ASTMatchers.h for details.
 class HasNameMatcher : public SingleNodeMatcherInterface<NamedDecl> {
@@ -702,13 +709,13 @@
   bool matchesNode(const NamedDecl &Node) const override;
 
  private:
-  /// \brief Unqualified match routine.
+  /// Unqualified match routine.
   ///
   /// It is much faster than the full match, but it only works for unqualified
   /// matches.
   bool matchesNodeUnqualified(const NamedDecl &Node) const;
 
-  /// \brief Full match routine
+  /// Full match routine
   ///
   /// Fast implementation for the simple case of a named declaration at
   /// namespace or RecordDecl scope.
@@ -716,7 +723,7 @@
   /// matchesNodeFullSlow.
   bool matchesNodeFullFast(const NamedDecl &Node) const;
 
-  /// \brief Full match routine
+  /// Full match routine
   ///
   /// It generates the fully qualified name of the declaration (which is
   /// expensive) before trying to match.
@@ -727,16 +734,16 @@
   const std::vector<std::string> Names;
 };
 
-/// \brief Trampoline function to use VariadicFunction<> to construct a
+/// Trampoline function to use VariadicFunction<> to construct a
 ///        HasNameMatcher.
 Matcher<NamedDecl> hasAnyNameFunc(ArrayRef<const StringRef *> NameRefs);
 
-/// \brief Trampoline function to use VariadicFunction<> to construct a
+/// Trampoline function to use VariadicFunction<> to construct a
 ///        hasAnySelector matcher.
 Matcher<ObjCMessageExpr> hasAnySelectorFunc(
     ArrayRef<const StringRef *> NameRefs);
 
-/// \brief Matches declarations for QualType and CallExpr.
+/// Matches declarations for QualType and CallExpr.
 ///
 /// Type argument DeclMatcherT is required by PolymorphicMatcherWithParam1 but
 /// not actually used.
@@ -755,7 +762,7 @@
   }
 
 private:
-  /// \brief Forwards to matching on the underlying type of the QualType.
+  /// Forwards to matching on the underlying type of the QualType.
   bool matchesSpecialized(const QualType &Node, ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const {
     if (Node.isNull())
@@ -764,7 +771,7 @@
     return matchesSpecialized(*Node, Finder, Builder);
   }
 
-  /// \brief Finds the best declaration for a type and returns whether the inner
+  /// Finds the best declaration for a type and returns whether the inner
   /// matcher matches on it.
   bool matchesSpecialized(const Type &Node, ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const {
@@ -838,21 +845,21 @@
     return false;
   }
 
-  /// \brief Extracts the Decl the DeclRefExpr references and returns whether
+  /// Extracts the Decl the DeclRefExpr references and returns whether
   /// the inner matcher matches on it.
   bool matchesSpecialized(const DeclRefExpr &Node, ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const {
     return matchesDecl(Node.getDecl(), Finder, Builder);
   }
 
-  /// \brief Extracts the Decl of the callee of a CallExpr and returns whether
+  /// Extracts the Decl of the callee of a CallExpr and returns whether
   /// the inner matcher matches on it.
   bool matchesSpecialized(const CallExpr &Node, ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const {
     return matchesDecl(Node.getCalleeDecl(), Finder, Builder);
   }
 
-  /// \brief Extracts the Decl of the constructor call and returns whether the
+  /// Extracts the Decl of the constructor call and returns whether the
   /// inner matcher matches on it.
   bool matchesSpecialized(const CXXConstructExpr &Node,
                           ASTMatchFinder *Finder,
@@ -860,7 +867,13 @@
     return matchesDecl(Node.getConstructor(), Finder, Builder);
   }
 
-  /// \brief Extracts the operator new of the new call and returns whether the
+  bool matchesSpecialized(const ObjCIvarRefExpr &Node,
+                          ASTMatchFinder *Finder,
+                          BoundNodesTreeBuilder *Builder) const {
+    return matchesDecl(Node.getDecl(), Finder, Builder);
+  }
+
+  /// Extracts the operator new of the new call and returns whether the
   /// inner matcher matches on it.
   bool matchesSpecialized(const CXXNewExpr &Node,
                           ASTMatchFinder *Finder,
@@ -868,7 +881,7 @@
     return matchesDecl(Node.getOperatorNew(), Finder, Builder);
   }
 
-  /// \brief Extracts the \c ValueDecl a \c MemberExpr refers to and returns
+  /// Extracts the \c ValueDecl a \c MemberExpr refers to and returns
   /// whether the inner matcher matches on it.
   bool matchesSpecialized(const MemberExpr &Node,
                           ASTMatchFinder *Finder,
@@ -876,7 +889,7 @@
     return matchesDecl(Node.getMemberDecl(), Finder, Builder);
   }
 
-  /// \brief Extracts the \c LabelDecl a \c AddrLabelExpr refers to and returns
+  /// Extracts the \c LabelDecl a \c AddrLabelExpr refers to and returns
   /// whether the inner matcher matches on it.
   bool matchesSpecialized(const AddrLabelExpr &Node,
                           ASTMatchFinder *Finder,
@@ -884,14 +897,14 @@
     return matchesDecl(Node.getLabel(), Finder, Builder);
   }
 
-  /// \brief Extracts the declaration of a LabelStmt and returns whether the
+  /// Extracts the declaration of a LabelStmt and returns whether the
   /// inner matcher matches on it.
   bool matchesSpecialized(const LabelStmt &Node, ASTMatchFinder *Finder,
                           BoundNodesTreeBuilder *Builder) const {
     return matchesDecl(Node.getDecl(), Finder, Builder);
   }
 
-  /// \brief Returns whether the inner matcher \c Node. Returns false if \c Node
+  /// Returns whether the inner matcher \c Node. Returns false if \c Node
   /// is \c NULL.
   bool matchesDecl(const Decl *Node, ASTMatchFinder *Finder,
                    BoundNodesTreeBuilder *Builder) const {
@@ -901,7 +914,7 @@
   }
 };
 
-/// \brief IsBaseType<T>::value is true if T is a "base" type in the AST
+/// IsBaseType<T>::value is true if T is a "base" type in the AST
 /// node class hierarchies.
 template <typename T>
 struct IsBaseType {
@@ -918,7 +931,7 @@
 template <typename T>
 const bool IsBaseType<T>::value;
 
-/// \brief Interface that allows matchers to traverse the AST.
+/// Interface that allows matchers to traverse the AST.
 /// FIXME: Find a better name.
 ///
 /// This provides three entry methods for each base node type in the AST:
@@ -938,7 +951,7 @@
 /// all nodes, as all nodes have ancestors.
 class ASTMatchFinder {
 public:
-  /// \brief Defines how we descend a level in the AST when we pass
+  /// Defines how we descend a level in the AST when we pass
   /// through expressions.
   enum TraversalKind {
     /// Will traverse any child nodes.
@@ -948,7 +961,7 @@
     TK_IgnoreImplicitCastsAndParentheses
   };
 
-  /// \brief Defines how bindings are processed on recursive matches.
+  /// Defines how bindings are processed on recursive matches.
   enum BindKind {
     /// Stop at the first match and only bind the first match.
     BK_First,
@@ -957,7 +970,7 @@
     BK_All
   };
 
-  /// \brief Defines which ancestors are considered for a match.
+  /// Defines which ancestors are considered for a match.
   enum AncestorMatchMode {
     /// All ancestors.
     AMM_All,
@@ -968,7 +981,7 @@
 
   virtual ~ASTMatchFinder() = default;
 
-  /// \brief Returns true if the given class is directly or indirectly derived
+  /// Returns true if the given class is directly or indirectly derived
   /// from a base type matching \c base.
   ///
   /// A class is considered to be also derived from itself.
@@ -1044,27 +1057,27 @@
                                  AncestorMatchMode MatchMode) = 0;
 };
 
-/// \brief A type-list implementation.
+/// A type-list implementation.
 ///
 /// A "linked list" of types, accessible by using the ::head and ::tail
 /// typedefs.
 template <typename... Ts> struct TypeList {}; // Empty sentinel type list.
 
 template <typename T1, typename... Ts> struct TypeList<T1, Ts...> {
-  /// \brief The first type on the list.
+  /// The first type on the list.
   using head = T1;
 
-  /// \brief A sublist with the tail. ie everything but the head.
+  /// A sublist with the tail. ie everything but the head.
   ///
   /// This type is used to do recursion. TypeList<>/EmptyTypeList indicates the
   /// end of the list.
   using tail = TypeList<Ts...>;
 };
 
-/// \brief The empty type list.
+/// The empty type list.
 using EmptyTypeList = TypeList<>;
 
-/// \brief Helper meta-function to determine if some type \c T is present or
+/// Helper meta-function to determine if some type \c T is present or
 ///   a parent type in the list.
 template <typename AnyTypeList, typename T>
 struct TypeListContainsSuperOf {
@@ -1077,14 +1090,14 @@
   static const bool value = false;
 };
 
-/// \brief A "type list" that contains all types.
+/// A "type list" that contains all types.
 ///
 /// Useful for matchers like \c anything and \c unless.
 using AllNodeBaseTypes =
     TypeList<Decl, Stmt, NestedNameSpecifier, NestedNameSpecifierLoc, QualType,
              Type, TypeLoc, CXXCtorInitializer>;
 
-/// \brief Helper meta-function to extract the argument out of a function of
+/// Helper meta-function to extract the argument out of a function of
 ///   type void(Arg).
 ///
 /// See AST_POLYMORPHIC_SUPPORTED_TYPES for details.
@@ -1093,21 +1106,21 @@
   using type = T;
 };
 
-/// \brief Default type lists for ArgumentAdaptingMatcher matchers.
+/// Default type lists for ArgumentAdaptingMatcher matchers.
 using AdaptativeDefaultFromTypes = AllNodeBaseTypes;
 using AdaptativeDefaultToTypes =
     TypeList<Decl, Stmt, NestedNameSpecifier, NestedNameSpecifierLoc, TypeLoc,
              QualType>;
 
-/// \brief All types that are supported by HasDeclarationMatcher above.
+/// All types that are supported by HasDeclarationMatcher above.
 using HasDeclarationSupportedTypes =
     TypeList<CallExpr, CXXConstructExpr, CXXNewExpr, DeclRefExpr, EnumType,
              ElaboratedType, InjectedClassNameType, LabelStmt, AddrLabelExpr,
              MemberExpr, QualType, RecordType, TagType,
              TemplateSpecializationType, TemplateTypeParmType, TypedefType,
-             UnresolvedUsingType>;
+             UnresolvedUsingType, ObjCIvarRefExpr>;
 
-/// \brief Converts a \c Matcher<T> to a matcher of desired type \c To by
+/// Converts a \c Matcher<T> to a matcher of desired type \c To by
 /// "adapting" a \c To into a \c T.
 ///
 /// The \c ArgumentAdapterT argument specifies how the adaptation is done.
@@ -1150,7 +1163,7 @@
   }
 };
 
-/// \brief A PolymorphicMatcherWithParamN<MatcherT, P1, ..., PN> object can be
+/// A PolymorphicMatcherWithParamN<MatcherT, P1, ..., PN> object can be
 /// created from N parameters p1, ..., pN (of type P1, ..., PN) and
 /// used as a Matcher<T> where a MatcherT<T, P1, ..., PN>(p1, ..., pN)
 /// can be constructed.
@@ -1219,7 +1232,7 @@
   const P2 Param2;
 };
 
-/// \brief Matches any instance of the given NodeType.
+/// Matches any instance of the given NodeType.
 ///
 /// This is useful when a matcher syntactically requires a child matcher,
 /// but the context doesn't care. See for example: anything().
@@ -1235,7 +1248,7 @@
   }
 };
 
-/// \brief A Matcher that allows binding the node it matches to an id.
+/// A Matcher that allows binding the node it matches to an id.
 ///
 /// BindableMatcher provides a \a bind() method that allows binding the
 /// matched node to an id if the match was successful.
@@ -1246,7 +1259,7 @@
   explicit BindableMatcher(MatcherInterface<T> *Implementation)
     : Matcher<T>(Implementation) {}
 
-  /// \brief Returns a matcher that will bind the matched node on a match.
+  /// Returns a matcher that will bind the matched node on a match.
   ///
   /// The returned matcher is equivalent to this matcher, but will
   /// bind the matched node on a match.
@@ -1256,7 +1269,7 @@
         ->template unconditionalConvertTo<T>();
   }
 
-  /// \brief Same as Matcher<T>'s conversion operator, but enables binding on
+  /// Same as Matcher<T>'s conversion operator, but enables binding on
   /// the returned matcher.
   operator DynTypedMatcher() const {
     DynTypedMatcher Result = static_cast<const Matcher<T>&>(*this);
@@ -1265,7 +1278,7 @@
   }
 };
 
-/// \brief Matches nodes of type T that have child nodes of type ChildT for
+/// Matches nodes of type T that have child nodes of type ChildT for
 /// which a specified child matcher matches.
 ///
 /// ChildT must be an AST base type.
@@ -1283,7 +1296,7 @@
   }
 };
 
-/// \brief Matches nodes of type T that have child nodes of type ChildT for
+/// Matches nodes of type T that have child nodes of type ChildT for
 /// which a specified child matcher matches. ChildT must be an AST base
 /// type.
 /// As opposed to the HasMatcher, the ForEachMatcher will produce a match
@@ -1306,10 +1319,10 @@
   }
 };
 
-/// \brief VariadicOperatorMatcher related types.
+/// VariadicOperatorMatcher related types.
 /// @{
 
-/// \brief Polymorphic matcher object that uses a \c
+/// Polymorphic matcher object that uses a \c
 /// DynTypedMatcher::VariadicOperator operator.
 ///
 /// Input matchers can have any type (including other polymorphic matcher
@@ -1338,7 +1351,7 @@
   std::tuple<Ps...> Params;
 };
 
-/// \brief Overloaded function object to generate VariadicOperatorMatcher
+/// Overloaded function object to generate VariadicOperatorMatcher
 ///   objects from arbitrary matchers.
 template <unsigned MinCount, unsigned MaxCount>
 struct VariadicOperatorMatcherFunc {
@@ -1359,7 +1372,7 @@
   return Matcher<T>(*this);
 }
 
-/// \brief Creates a Matcher<T> that matches if all inner matchers match.
+/// Creates a Matcher<T> that matches if all inner matchers match.
 template<typename T>
 BindableMatcher<T> makeAllOfComposite(
     ArrayRef<const Matcher<T> *> InnerMatchers) {
@@ -1385,7 +1398,7 @@
           .template unconditionalConvertTo<T>());
 }
 
-/// \brief Creates a Matcher<T> that matches if
+/// Creates a Matcher<T> that matches if
 /// T is dyn_cast'able into InnerT and all inner matchers match.
 ///
 /// Returns BindableMatcher, as matchers that use dyn_cast have
@@ -1398,7 +1411,7 @@
       makeAllOfComposite(InnerMatchers).template dynCastTo<T>());
 }
 
-/// \brief Matches nodes of type T that have at least one descendant node of
+/// Matches nodes of type T that have at least one descendant node of
 /// type DescendantT for which the given inner matcher matches.
 ///
 /// DescendantT must be an AST base type.
@@ -1418,7 +1431,7 @@
   }
 };
 
-/// \brief Matches nodes of type \c T that have a parent node of type \c ParentT
+/// Matches nodes of type \c T that have a parent node of type \c ParentT
 /// for which the given inner matcher matches.
 ///
 /// \c ParentT must be an AST base type.
@@ -1438,7 +1451,7 @@
   }
 };
 
-/// \brief Matches nodes of type \c T that have at least one ancestor node of
+/// Matches nodes of type \c T that have at least one ancestor node of
 /// type \c AncestorT for which the given inner matcher matches.
 ///
 /// \c AncestorT must be an AST base type.
@@ -1458,7 +1471,7 @@
   }
 };
 
-/// \brief Matches nodes of type T that have at least one descendant node of
+/// Matches nodes of type T that have at least one descendant node of
 /// type DescendantT for which the given inner matcher matches.
 ///
 /// DescendantT must be an AST base type.
@@ -1481,7 +1494,7 @@
   }
 };
 
-/// \brief Matches on nodes that have a getValue() method if getValue() equals
+/// Matches on nodes that have a getValue() method if getValue() equals
 /// the value the ValueEqualsMatcher was constructed with.
 template <typename T, typename ValueT>
 class ValueEqualsMatcher : public SingleNodeMatcherInterface<T> {
@@ -1503,7 +1516,7 @@
   const ValueT ExpectedValue;
 };
 
-/// \brief Template specializations to easily write matchers for floating point
+/// Template specializations to easily write matchers for floating point
 /// literals.
 template <>
 inline bool ValueEqualsMatcher<FloatingLiteral, double>::matchesNode(
@@ -1529,7 +1542,7 @@
   return ExpectedValue.compare(Node.getValue()) == llvm::APFloat::cmpEqual;
 }
 
-/// \brief A VariadicDynCastAllOfMatcher<SourceT, TargetT> object is a
+/// A VariadicDynCastAllOfMatcher<SourceT, TargetT> object is a
 /// variadic functor that takes a number of Matcher<TargetT> and returns a
 /// Matcher<SourceT> that matches TargetT nodes that are matched by all of the
 /// given matchers, if SourceT can be dynamically casted into TargetT.
@@ -1549,7 +1562,7 @@
   VariadicDynCastAllOfMatcher() {}
 };
 
-/// \brief A \c VariadicAllOfMatcher<T> object is a variadic functor that takes
+/// A \c VariadicAllOfMatcher<T> object is a variadic functor that takes
 /// a number of \c Matcher<T> and returns a \c Matcher<T> that matches \c T
 /// nodes that are matched by all of the given matchers.
 ///
@@ -1567,7 +1580,7 @@
   VariadicAllOfMatcher() {}
 };
 
-/// \brief Matches nodes of type \c TLoc for which the inner
+/// Matches nodes of type \c TLoc for which the inner
 /// \c Matcher<T> matches.
 template <typename TLoc, typename T>
 class LocMatcher : public WrapperMatcherInterface<TLoc> {
@@ -1589,7 +1602,7 @@
   }
 };
 
-/// \brief Matches \c TypeLocs based on an inner matcher matching a certain
+/// Matches \c TypeLocs based on an inner matcher matching a certain
 /// \c QualType.
 ///
 /// Used to implement the \c loc() matcher.
@@ -1607,7 +1620,7 @@
   }
 };
 
-/// \brief Matches nodes of type \c T for which the inner matcher matches on a
+/// Matches nodes of type \c T for which the inner matcher matches on a
 /// another node of type \c T that can be reached using a given traverse
 /// function.
 template <typename T>
@@ -1631,7 +1644,7 @@
   QualType (T::*TraverseFunction)() const;
 };
 
-/// \brief Matches nodes of type \c T in a ..Loc hierarchy, for which the inner
+/// Matches nodes of type \c T in a ..Loc hierarchy, for which the inner
 /// matcher matches on a another node of type \c T that can be reached using a
 /// given traverse function.
 template <typename T>
@@ -1655,7 +1668,7 @@
   TypeLoc (T::*TraverseFunction)() const;
 };
 
-/// \brief Converts a \c Matcher<InnerT> to a \c Matcher<OuterT>, where
+/// Converts a \c Matcher<InnerT> to a \c Matcher<OuterT>, where
 /// \c OuterT is any type that is supported by \c Getter.
 ///
 /// \code Getter<OuterT>::value() \endcode returns a
@@ -1693,7 +1706,7 @@
   const Matcher<InnerTBase> InnerMatcher;
 };
 
-/// \brief A simple memoizer of T(*)() functions.
+/// A simple memoizer of T(*)() functions.
 ///
 /// It will call the passed 'Func' template parameter at most once.
 /// Used to support AST_MATCHER_FUNCTION() macro.
diff --git a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersMacros.h b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersMacros.h
index 1933324..3080f86 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersMacros.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/ASTMatchersMacros.h
@@ -50,7 +50,7 @@
 #ifndef LLVM_CLANG_ASTMATCHERS_ASTMATCHERSMACROS_H
 #define LLVM_CLANG_ASTMATCHERS_ASTMATCHERSMACROS_H
 
-/// \brief AST_MATCHER_FUNCTION(ReturnType, DefineMatcher) { ... }
+/// AST_MATCHER_FUNCTION(ReturnType, DefineMatcher) { ... }
 /// defines a zero parameter function named DefineMatcher() that returns a
 /// ReturnType object.
 #define AST_MATCHER_FUNCTION(ReturnType, DefineMatcher)                        \
@@ -61,7 +61,7 @@
   }                                                                            \
   inline ReturnType DefineMatcher##_getInstance()
 
-/// \brief AST_MATCHER_FUNCTION_P(ReturnType, DefineMatcher, ParamType, Param) {
+/// AST_MATCHER_FUNCTION_P(ReturnType, DefineMatcher, ParamType, Param) {
 /// ... }
 /// defines a single-parameter function named DefineMatcher() that returns a
 /// ReturnType object.
@@ -81,7 +81,7 @@
   typedef ReturnType (&DefineMatcher##_Type##OverloadId)(ParamType const &);   \
   inline ReturnType DefineMatcher(ParamType const &Param)
 
-/// \brief AST_MATCHER(Type, DefineMatcher) { ... }
+/// AST_MATCHER(Type, DefineMatcher) { ... }
 /// defines a zero parameter function named DefineMatcher() that returns a
 /// Matcher<Type> object.
 ///
@@ -113,7 +113,7 @@
       ::clang::ast_matchers::internal::ASTMatchFinder *Finder,                 \
       ::clang::ast_matchers::internal::BoundNodesTreeBuilder *Builder) const
 
-/// \brief AST_MATCHER_P(Type, DefineMatcher, ParamType, Param) { ... }
+/// AST_MATCHER_P(Type, DefineMatcher, ParamType, Param) { ... }
 /// defines a single-parameter function named DefineMatcher() that returns a
 /// Matcher<Type> object.
 ///
@@ -159,7 +159,7 @@
       ::clang::ast_matchers::internal::ASTMatchFinder *Finder,                 \
       ::clang::ast_matchers::internal::BoundNodesTreeBuilder *Builder) const
 
-/// \brief AST_MATCHER_P2(
+/// AST_MATCHER_P2(
 ///     Type, DefineMatcher, ParamType1, Param1, ParamType2, Param2) { ... }
 /// defines a two-parameter function named DefineMatcher() that returns a
 /// Matcher<Type> object.
@@ -211,7 +211,7 @@
       ::clang::ast_matchers::internal::ASTMatchFinder *Finder,                 \
       ::clang::ast_matchers::internal::BoundNodesTreeBuilder *Builder) const
 
-/// \brief Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER*
+/// Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER*
 ///   macros.
 ///
 /// You can't pass something like \c TypeList<Foo, Bar> to a macro, because it
@@ -222,7 +222,7 @@
 #define AST_POLYMORPHIC_SUPPORTED_TYPES(...)                                   \
   void(::clang::ast_matchers::internal::TypeList<__VA_ARGS__>)
 
-/// \brief AST_POLYMORPHIC_MATCHER(DefineMatcher) { ... }
+/// AST_POLYMORPHIC_MATCHER(DefineMatcher) { ... }
 /// defines a single-parameter function named DefineMatcher() that is
 /// polymorphic in the return type.
 ///
@@ -252,7 +252,7 @@
       ::clang::ast_matchers::internal::ASTMatchFinder *Finder,                 \
       ::clang::ast_matchers::internal::BoundNodesTreeBuilder *Builder) const
 
-/// \brief AST_POLYMORPHIC_MATCHER_P(DefineMatcher, ParamType, Param) { ... }
+/// AST_POLYMORPHIC_MATCHER_P(DefineMatcher, ParamType, Param) { ... }
 /// defines a single-parameter function named DefineMatcher() that is
 /// polymorphic in the return type.
 ///
@@ -305,7 +305,7 @@
           ::clang::ast_matchers::internal::BoundNodesTreeBuilder *Builder)     \
           const
 
-/// \brief AST_POLYMORPHIC_MATCHER_P2(
+/// AST_POLYMORPHIC_MATCHER_P2(
 ///     DefineMatcher, ParamType1, Param1, ParamType2, Param2) { ... }
 /// defines a two-parameter function named matcher() that is polymorphic in
 /// the return type.
@@ -383,7 +383,7 @@
       ::clang::ast_matchers::internal::TypeTraverseMatcher,                    \
       ReturnTypesF>::Func MatcherName
 
-/// \brief AST_TYPE_TRAVERSE_MATCHER(MatcherName, FunctionName) defines
+/// AST_TYPE_TRAVERSE_MATCHER(MatcherName, FunctionName) defines
 /// the matcher \c MatcherName that can be used to traverse from one \c Type
 /// to another.
 ///
@@ -426,7 +426,7 @@
       ReturnTypesF>::Func MatcherName##Loc;                                    \
   AST_TYPE_TRAVERSE_MATCHER_DEF(MatcherName, ReturnTypesF)
 
-/// \brief AST_TYPELOC_TRAVERSE_MATCHER(MatcherName, FunctionName) works
+/// AST_TYPELOC_TRAVERSE_MATCHER(MatcherName, FunctionName) works
 /// identical to \c AST_TYPE_TRAVERSE_MATCHER but operates on \c TypeLocs.
 #define AST_TYPELOC_TRAVERSE_MATCHER(MatcherName, FunctionName, ReturnTypesF)  \
   namespace internal {                                                         \
diff --git a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Diagnostics.h b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Diagnostics.h
index 908fa0d..ccd9590 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Diagnostics.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Diagnostics.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Diagnostics class to manage error messages.
+/// Diagnostics class to manage error messages.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -39,7 +39,7 @@
   SourceLocation End;
 };
 
-/// \brief A VariantValue instance annotated with its parser context.
+/// A VariantValue instance annotated with its parser context.
 struct ParserValue {
   ParserValue() : Text(), Range(), Value() {}
   StringRef Text;
@@ -47,16 +47,16 @@
   VariantValue Value;
 };
 
-/// \brief Helper class to manage error messages.
+/// Helper class to manage error messages.
 class Diagnostics {
 public:
-  /// \brief Parser context types.
+  /// Parser context types.
   enum ContextType {
     CT_MatcherArg = 0,
     CT_MatcherConstruct = 1
   };
 
-  /// \brief All errors from the system.
+  /// All errors from the system.
   enum ErrorType {
     ET_None = 0,
 
@@ -80,7 +80,7 @@
     ET_ParserOverloadedType = 110
   };
 
-  /// \brief Helper stream class.
+  /// Helper stream class.
   class ArgStream {
   public:
     ArgStream(std::vector<std::string> *Out) : Out(Out) {}
@@ -93,7 +93,7 @@
     std::vector<std::string> *Out;
   };
 
-  /// \brief Class defining a parser context.
+  /// Class defining a parser context.
   ///
   /// Used by the parser to specify (possibly recursive) contexts where the
   /// parsing/construction can fail. Any error triggered within a context will
@@ -101,11 +101,11 @@
   /// This class should be used as a RAII instance in the stack.
   struct Context {
   public:
-    /// \brief About to call the constructor for a matcher.
+    /// About to call the constructor for a matcher.
     enum ConstructMatcherEnum { ConstructMatcher };
     Context(ConstructMatcherEnum, Diagnostics *Error, StringRef MatcherName,
             SourceRange MatcherRange);
-    /// \brief About to recurse into parsing one argument for a matcher.
+    /// About to recurse into parsing one argument for a matcher.
     enum MatcherArgEnum { MatcherArg };
     Context(MatcherArgEnum, Diagnostics *Error, StringRef MatcherName,
             SourceRange MatcherRange, unsigned ArgNumber);
@@ -115,7 +115,7 @@
     Diagnostics *const Error;
   };
 
-  /// \brief Context for overloaded matcher construction.
+  /// Context for overloaded matcher construction.
   ///
   /// This context will take care of merging all errors that happen within it
   /// as "candidate" overloads for the same matcher.
@@ -124,7 +124,7 @@
    OverloadContext(Diagnostics* Error);
    ~OverloadContext();
 
-   /// \brief Revert all errors that happened within this context.
+   /// Revert all errors that happened within this context.
    void revertErrors();
 
   private:
@@ -132,21 +132,21 @@
     unsigned BeginIndex;
   };
 
-  /// \brief Add an error to the diagnostics.
+  /// Add an error to the diagnostics.
   ///
   /// All the context information will be kept on the error message.
   /// \return a helper class to allow the caller to pass the arguments for the
   /// error message, using the << operator.
   ArgStream addError(SourceRange Range, ErrorType Error);
 
-  /// \brief Information stored for one frame of the context.
+  /// Information stored for one frame of the context.
   struct ContextFrame {
     ContextType Type;
     SourceRange Range;
     std::vector<std::string> Args;
   };
 
-  /// \brief Information stored for each error found.
+  /// Information stored for each error found.
   struct ErrorContent {
     std::vector<ContextFrame> ContextStack;
     struct Message {
@@ -158,20 +158,20 @@
   };
   ArrayRef<ErrorContent> errors() const { return Errors; }
 
-  /// \brief Returns a simple string representation of each error.
+  /// Returns a simple string representation of each error.
   ///
   /// Each error only shows the error message without any context.
   void printToStream(llvm::raw_ostream &OS) const;
   std::string toString() const;
 
-  /// \brief Returns the full string representation of each error.
+  /// Returns the full string representation of each error.
   ///
   /// Each error message contains the full context.
   void printToStreamFull(llvm::raw_ostream &OS) const;
   std::string toStringFull() const;
 
 private:
-  /// \brief Helper function used by the constructors of ContextFrame.
+  /// Helper function used by the constructors of ContextFrame.
   ArgStream pushContextFrame(ContextType Type, SourceRange Range);
 
   std::vector<ContextFrame> ContextStack;
diff --git a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Parser.h b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Parser.h
index e8fcf0a..907db69 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Parser.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Parser.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Simple matcher expression parser.
+/// Simple matcher expression parser.
 ///
 /// The parser understands matcher expressions of the form:
 ///   MatcherName(Arg0, Arg1, ..., ArgN)
@@ -52,10 +52,10 @@
 
 class Diagnostics;
 
-/// \brief Matcher expression parser.
+/// Matcher expression parser.
 class Parser {
 public:
-  /// \brief Interface to connect the parser with the registry and more.
+  /// Interface to connect the parser with the registry and more.
   ///
   /// The parser uses the Sema instance passed into
   /// parseMatcherExpression() to handle all matcher tokens. The simplest
@@ -69,7 +69,7 @@
   public:
     virtual ~Sema();
 
-    /// \brief Process a matcher expression.
+    /// Process a matcher expression.
     ///
     /// All the arguments passed here have already been processed.
     ///
@@ -92,7 +92,7 @@
                                                   ArrayRef<ParserValue> Args,
                                                   Diagnostics *Error) = 0;
 
-    /// \brief Look up a matcher by name.
+    /// Look up a matcher by name.
     ///
     /// \param MatcherName The matcher name found by the parser.
     ///
@@ -101,7 +101,7 @@
     virtual llvm::Optional<MatcherCtor>
     lookupMatcherCtor(StringRef MatcherName) = 0;
 
-    /// \brief Compute the list of completion types for \p Context.
+    /// Compute the list of completion types for \p Context.
     ///
     /// Each element of \p Context represents a matcher invocation, going from
     /// outermost to innermost. Elements are pairs consisting of a reference to
@@ -112,7 +112,7 @@
     virtual std::vector<ArgKind> getAcceptedCompletionTypes(
         llvm::ArrayRef<std::pair<MatcherCtor, unsigned>> Context);
 
-    /// \brief Compute the list of completions that match any of
+    /// Compute the list of completions that match any of
     /// \p AcceptedTypes.
     ///
     /// \param AcceptedTypes All types accepted for this completion.
@@ -125,7 +125,7 @@
     getMatcherCompletions(llvm::ArrayRef<ArgKind> AcceptedTypes);
   };
 
-  /// \brief Sema implementation that uses the matcher registry to process the
+  /// Sema implementation that uses the matcher registry to process the
   ///   tokens.
   class RegistrySema : public Parser::Sema {
   public:
@@ -149,7 +149,7 @@
 
   using NamedValueMap = llvm::StringMap<VariantValue>;
 
-  /// \brief Parse a matcher expression.
+  /// Parse a matcher expression.
   ///
   /// \param MatcherCode The matcher expression to parse.
   ///
@@ -178,7 +178,7 @@
     return parseMatcherExpression(MatcherCode, nullptr, Error);
   }
 
-  /// \brief Parse an expression.
+  /// Parse an expression.
   ///
   /// Parses any expression supported by this parser. In general, the
   /// \c parseMatcherExpression function is a better approach to get a matcher
@@ -202,7 +202,7 @@
     return parseExpression(Code, nullptr, Value, Error);
   }
 
-  /// \brief Complete an expression at the given offset.
+  /// Complete an expression at the given offset.
   ///
   /// \param S The Sema instance that will help the parser
   ///   construct the matchers. If null, it uses the default registry.
diff --git a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Registry.h b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Registry.h
index 2774912..ad8628b 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Registry.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/Registry.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Registry of all known matchers.
+/// Registry of all known matchers.
 ///
 /// The registry provides a generic interface to construct any matcher by name.
 //
@@ -49,13 +49,13 @@
     return TypedText == Other.TypedText && MatcherDecl == Other.MatcherDecl;
   }
 
-  /// \brief The text to type to select this matcher.
+  /// The text to type to select this matcher.
   std::string TypedText;
 
-  /// \brief The "declaration" of the matcher, with type information.
+  /// The "declaration" of the matcher, with type information.
   std::string MatcherDecl;
 
-  /// \brief Value corresponding to the "specificity" of the converted matcher.
+  /// Value corresponding to the "specificity" of the converted matcher.
   ///
   /// Zero specificity indicates that this conversion would produce a trivial
   /// matcher that will either always or never match.
@@ -67,13 +67,13 @@
 public:
   Registry() = delete;
 
-  /// \brief Look up a matcher in the registry by name,
+  /// Look up a matcher in the registry by name,
   ///
   /// \return An opaque value which may be used to refer to the matcher
   /// constructor, or Optional<MatcherCtor>() if not found.
   static llvm::Optional<MatcherCtor> lookupMatcherCtor(StringRef MatcherName);
 
-  /// \brief Compute the list of completion types for \p Context.
+  /// Compute the list of completion types for \p Context.
   ///
   /// Each element of \p Context represents a matcher invocation, going from
   /// outermost to innermost. Elements are pairs consisting of a reference to
@@ -84,7 +84,7 @@
   static std::vector<ArgKind> getAcceptedCompletionTypes(
       llvm::ArrayRef<std::pair<MatcherCtor, unsigned>> Context);
 
-  /// \brief Compute the list of completions that match any of
+  /// Compute the list of completions that match any of
   /// \p AcceptedTypes.
   ///
   /// \param AcceptedTypes All types accepted for this completion.
@@ -96,7 +96,7 @@
   static std::vector<MatcherCompletion>
   getMatcherCompletions(ArrayRef<ArgKind> AcceptedTypes);
 
-  /// \brief Construct a matcher from the registry.
+  /// Construct a matcher from the registry.
   ///
   /// \param Ctor The matcher constructor to instantiate.
   ///
@@ -116,7 +116,7 @@
                                          ArrayRef<ParserValue> Args,
                                          Diagnostics *Error);
 
-  /// \brief Construct a matcher from the registry and bind it.
+  /// Construct a matcher from the registry and bind it.
   ///
   /// Similar the \c constructMatcher() above, but it then tries to bind the
   /// matcher to the specified \c BindID.
diff --git a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h
index f9efe0f..45ac3ca 100644
--- a/linux-x64/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h
+++ b/linux-x64/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h
@@ -7,7 +7,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Polymorphic value type.
+/// Polymorphic value type.
 ///
 /// Supports all the types required for dynamic Matcher construction.
 ///  Used by the registry to construct matchers in a generic way.
@@ -28,7 +28,7 @@
 namespace ast_matchers {
 namespace dynamic {
 
-/// \brief Kind identifier.
+/// Kind identifier.
 ///
 /// It supports all types that VariantValue can contain.
 class ArgKind {
@@ -40,10 +40,10 @@
     AK_Unsigned,
     AK_String
   };
-  /// \brief Constructor for non-matcher types.
+  /// Constructor for non-matcher types.
   ArgKind(Kind K) : K(K) { assert(K != AK_Matcher); }
 
-  /// \brief Constructor for matcher types.
+  /// Constructor for matcher types.
   ArgKind(ast_type_traits::ASTNodeKind MatcherKind)
       : K(AK_Matcher), MatcherKind(MatcherKind) {}
 
@@ -53,7 +53,7 @@
     return MatcherKind;
   }
 
-  /// \brief Determines if this type can be converted to \p To.
+  /// Determines if this type can be converted to \p To.
   ///
   /// \param To the requested destination type.
   ///
@@ -67,7 +67,7 @@
     return K < Other.K;
   }
 
-  /// \brief String representation of the type.
+  /// String representation of the type.
   std::string asString() const;
 
 private:
@@ -77,7 +77,7 @@
 
 using ast_matchers::internal::DynTypedMatcher;
 
-/// \brief A variant matcher object.
+/// A variant matcher object.
 ///
 /// The purpose of this object is to abstract simple and polymorphic matchers
 /// into a single object type.
@@ -91,7 +91,7 @@
 ///  - hasTypedMatcher<T>()/getTypedMatcher<T>(): These calls will determine if
 ///    the underlying matcher(s) can unambiguously return a Matcher<T>.
 class VariantMatcher {
-  /// \brief Methods that depend on T from hasTypedMatcher/getTypedMatcher.
+  /// Methods that depend on T from hasTypedMatcher/getTypedMatcher.
   class MatcherOps {
   public:
     MatcherOps(ast_type_traits::ASTNodeKind NodeKind) : NodeKind(NodeKind) {}
@@ -99,12 +99,12 @@
     bool canConstructFrom(const DynTypedMatcher &Matcher,
                           bool &IsExactMatch) const;
 
-    /// \brief Convert \p Matcher the destination type and return it as a new
+    /// Convert \p Matcher the destination type and return it as a new
     /// DynTypedMatcher.
     virtual DynTypedMatcher
     convertMatcher(const DynTypedMatcher &Matcher) const = 0;
 
-    /// \brief Constructs a variadic typed matcher from \p InnerMatchers.
+    /// Constructs a variadic typed matcher from \p InnerMatchers.
     /// Will try to convert each inner matcher to the destination type and
     /// return llvm::None if it fails to do so.
     llvm::Optional<DynTypedMatcher>
@@ -118,7 +118,7 @@
     ast_type_traits::ASTNodeKind NodeKind;
   };
 
-  /// \brief Payload interface to be specialized by each matcher type.
+  /// Payload interface to be specialized by each matcher type.
   ///
   /// It follows a similar interface as VariantMatcher itself.
   class Payload {
@@ -133,39 +133,39 @@
   };
 
 public:
-  /// \brief A null matcher.
+  /// A null matcher.
   VariantMatcher();
 
-  /// \brief Clones the provided matcher.
+  /// Clones the provided matcher.
   static VariantMatcher SingleMatcher(const DynTypedMatcher &Matcher);
 
-  /// \brief Clones the provided matchers.
+  /// Clones the provided matchers.
   ///
   /// They should be the result of a polymorphic matcher.
   static VariantMatcher
   PolymorphicMatcher(std::vector<DynTypedMatcher> Matchers);
 
-  /// \brief Creates a 'variadic' operator matcher.
+  /// Creates a 'variadic' operator matcher.
   ///
   /// It will bind to the appropriate type on getTypedMatcher<T>().
   static VariantMatcher
   VariadicOperatorMatcher(DynTypedMatcher::VariadicOperator Op,
                           std::vector<VariantMatcher> Args);
 
-  /// \brief Makes the matcher the "null" matcher.
+  /// Makes the matcher the "null" matcher.
   void reset();
 
-  /// \brief Whether the matcher is null.
+  /// Whether the matcher is null.
   bool isNull() const { return !Value; }
 
-  /// \brief Return a single matcher, if there is no ambiguity.
+  /// Return a single matcher, if there is no ambiguity.
   ///
   /// \returns the matcher, if there is only one matcher. An empty Optional, if
   /// the underlying matcher is a polymorphic matcher with more than one
   /// representation.
   llvm::Optional<DynTypedMatcher> getSingleMatcher() const;
 
-  /// \brief Determines if the contained matcher can be converted to
+  /// Determines if the contained matcher can be converted to
   ///   \c Matcher<T>.
   ///
   /// For the Single case, it returns true if it can be converted to
@@ -179,7 +179,7 @@
     return Value->getTypedMatcher(TypedMatcherOps<T>()).hasValue();
   }
 
-  /// \brief Determines if the contained matcher can be converted to \p Kind.
+  /// Determines if the contained matcher can be converted to \p Kind.
   ///
   /// \param Kind the requested destination type.
   ///
@@ -192,7 +192,7 @@
     return false;
   }
 
-  /// \brief Return this matcher as a \c Matcher<T>.
+  /// Return this matcher as a \c Matcher<T>.
   ///
   /// Handles the different types (Single, Polymorphic) accordingly.
   /// Asserts that \c hasTypedMatcher<T>() is true.
@@ -203,7 +203,7 @@
         ->template convertTo<T>();
   }
 
-  /// \brief String representation of the type of the value.
+  /// String representation of the type of the value.
   ///
   /// If the underlying matcher is a polymorphic one, the string will show all
   /// the types.
@@ -234,7 +234,7 @@
   }
 };
 
-/// \brief Variant value class.
+/// Variant value class.
 ///
 /// Basically, a tagged union with value type semantics.
 /// It is used by the registry as the return value and argument type for the
@@ -256,46 +256,46 @@
   ~VariantValue();
   VariantValue &operator=(const VariantValue &Other);
 
-  /// \brief Specific constructors for each supported type.
+  /// Specific constructors for each supported type.
   VariantValue(bool Boolean);
   VariantValue(double Double);
   VariantValue(unsigned Unsigned);
   VariantValue(StringRef String);
   VariantValue(const VariantMatcher &Matchers);
 
-  /// \brief Constructs an \c unsigned value (disambiguation from bool).
+  /// Constructs an \c unsigned value (disambiguation from bool).
   VariantValue(int Signed) : VariantValue(static_cast<unsigned>(Signed)) {}
 
-  /// \brief Returns true iff this is not an empty value.
+  /// Returns true iff this is not an empty value.
   explicit operator bool() const { return hasValue(); }
   bool hasValue() const { return Type != VT_Nothing; }
 
-  /// \brief Boolean value functions.
+  /// Boolean value functions.
   bool isBoolean() const;
   bool getBoolean() const;
   void setBoolean(bool Boolean);
 
-  /// \brief Double value functions.
+  /// Double value functions.
   bool isDouble() const;
   double getDouble() const;
   void setDouble(double Double);
 
-  /// \brief Unsigned value functions.
+  /// Unsigned value functions.
   bool isUnsigned() const;
   unsigned getUnsigned() const;
   void setUnsigned(unsigned Unsigned);
 
-  /// \brief String value functions.
+  /// String value functions.
   bool isString() const;
   const std::string &getString() const;
   void setString(StringRef String);
 
-  /// \brief Matcher value functions.
+  /// Matcher value functions.
   bool isMatcher() const;
   const VariantMatcher &getMatcher() const;
   void setMatcher(const VariantMatcher &Matcher);
 
-  /// \brief Determines if the contained value can be converted to \p Kind.
+  /// Determines if the contained value can be converted to \p Kind.
   ///
   /// \param Kind the requested destination type.
   ///
@@ -303,7 +303,7 @@
   ///   conversion.
   bool isConvertibleTo(ArgKind Kind, unsigned* Specificity) const;
 
-  /// \brief Determines if the contained value can be converted to any kind
+  /// Determines if the contained value can be converted to any kind
   /// in \p Kinds.
   ///
   /// \param Kinds the requested destination types.
@@ -313,13 +313,13 @@
   ///   conversions.
   bool isConvertibleTo(ArrayRef<ArgKind> Kinds, unsigned *Specificity) const;
 
-  /// \brief String representation of the type of the value.
+  /// String representation of the type of the value.
   std::string getTypeAsString() const;
 
 private:
   void reset();
 
-  /// \brief All supported value types.
+  /// All supported value types.
   enum ValueType {
     VT_Nothing,
     VT_Boolean,
@@ -329,7 +329,7 @@
     VT_Matcher
   };
 
-  /// \brief All supported value types.
+  /// All supported value types.
   union AllValues {
     unsigned Unsigned;
     double Double;
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/CFGReachabilityAnalysis.h b/linux-x64/clang/include/clang/Analysis/Analyses/CFGReachabilityAnalysis.h
index da59514..49da681 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/CFGReachabilityAnalysis.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/CFGReachabilityAnalysis.h
@@ -23,7 +23,7 @@
 
 class CFG;
 class CFGBlock;
-  
+
 // A class that performs reachability queries for CFGBlocks. Several internal
 // checks in this checker require reachability information. The requests all
 // tend to have a common destination, so we lazily do a predecessor search
@@ -45,7 +45,7 @@
 private:
   void mapReachability(const CFGBlock *Dst);
 };
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_ANALYSIS_ANALYSES_CFGREACHABILITYANALYSIS_H
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/Consumed.h b/linux-x64/clang/include/clang/Analysis/Analyses/Consumed.h
index 295d122..5a70989 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/Consumed.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/Consumed.h
@@ -38,18 +38,18 @@
 class VarDecl;
 
 namespace consumed {
-  
+
   class ConsumedStmtVisitor;
 
   enum ConsumedState {
     // No state information for the given variable.
     CS_None,
-    
+
     CS_Unknown,
     CS_Unconsumed,
     CS_Consumed
   };
-  
+
   using OptionalNotes = SmallVector<PartialDiagnosticAt, 1>;
   using DelayedDiag = std::pair<PartialDiagnosticAt, OptionalNotes>;
   using DiagList = std::list<DelayedDiag>;
@@ -58,10 +58,10 @@
   public:
     virtual ~ConsumedWarningsHandlerBase();
 
-    /// \brief Emit the warnings and notes left by the analysis.
+    /// Emit the warnings and notes left by the analysis.
     virtual void emitDiagnostics() {}
-    
-    /// \brief Warn that a variable's state doesn't match at the entry and exit
+
+    /// Warn that a variable's state doesn't match at the entry and exit
     /// of a loop.
     ///
     /// \param Loc -- The location of the end of the loop.
@@ -70,8 +70,8 @@
     /// state.
     virtual void warnLoopStateMismatch(SourceLocation Loc,
                                        StringRef VariableName) {}
-    
-    /// \brief Warn about parameter typestate mismatches upon return.
+
+    /// Warn about parameter typestate mismatches upon return.
     ///
     /// \param Loc -- The SourceLocation of the return statement.
     ///
@@ -84,23 +84,23 @@
                                                   StringRef VariableName,
                                                   StringRef ExpectedState,
                                                   StringRef ObservedState) {}
-    
+
     // FIXME: Add documentation.
     virtual void warnParamTypestateMismatch(SourceLocation LOC,
                                             StringRef ExpectedState,
                                             StringRef ObservedState) {}
-    
+
     // FIXME: This can be removed when the attr propagation fix for templated
     //        classes lands.
-    /// \brief Warn about return typestates set for unconsumable types.
-    /// 
+    /// Warn about return typestates set for unconsumable types.
+    ///
     /// \param Loc -- The location of the attributes.
     ///
     /// \param TypeName -- The name of the unconsumable type.
     virtual void warnReturnTypestateForUnconsumableType(SourceLocation Loc,
                                                         StringRef TypeName) {}
-    
-    /// \brief Warn about return typestate mismatches.
+
+    /// Warn about return typestate mismatches.
     ///
     /// \param Loc -- The SourceLocation of the return statement.
     ///
@@ -113,7 +113,7 @@
                                              StringRef ExpectedState,
                                              StringRef ObservedState) {}
 
-    /// \brief Warn about use-while-consumed errors.
+    /// Warn about use-while-consumed errors.
     /// \param MethodName -- The name of the method that was incorrectly
     /// invoked.
     ///
@@ -124,7 +124,7 @@
                                              StringRef State,
                                              SourceLocation Loc) {}
 
-    /// \brief Warn about use-while-consumed errors.
+    /// Warn about use-while-consumed errors.
     /// \param MethodName -- The name of the method that was incorrectly
     /// invoked.
     ///
@@ -144,71 +144,71 @@
     using VarMapType = llvm::DenseMap<const VarDecl *, ConsumedState>;
     using TmpMapType =
         llvm::DenseMap<const CXXBindTemporaryExpr *, ConsumedState>;
-    
+
   protected:
     bool Reachable = true;
     const Stmt *From = nullptr;
     VarMapType VarMap;
     TmpMapType TmpMap;
-    
+
   public:
     ConsumedStateMap() = default;
     ConsumedStateMap(const ConsumedStateMap &Other)
         : Reachable(Other.Reachable), From(Other.From), VarMap(Other.VarMap),
           TmpMap() {}
-    
-    /// \brief Warn if any of the parameters being tracked are not in the state
+
+    /// Warn if any of the parameters being tracked are not in the state
     /// they were declared to be in upon return from a function.
     void checkParamsForReturnTypestate(SourceLocation BlameLoc,
       ConsumedWarningsHandlerBase &WarningsHandler) const;
-    
-    /// \brief Clear the TmpMap.
+
+    /// Clear the TmpMap.
     void clearTemporaries();
-    
-    /// \brief Get the consumed state of a given variable.
+
+    /// Get the consumed state of a given variable.
     ConsumedState getState(const VarDecl *Var) const;
-    
-    /// \brief Get the consumed state of a given temporary value.
+
+    /// Get the consumed state of a given temporary value.
     ConsumedState getState(const CXXBindTemporaryExpr *Tmp) const;
-    
-    /// \brief Merge this state map with another map.
+
+    /// Merge this state map with another map.
     void intersect(const ConsumedStateMap &Other);
 
     void intersectAtLoopHead(const CFGBlock *LoopHead, const CFGBlock *LoopBack,
       const ConsumedStateMap *LoopBackStates,
       ConsumedWarningsHandlerBase &WarningsHandler);
-    
-    /// \brief Return true if this block is reachable.
+
+    /// Return true if this block is reachable.
     bool isReachable() const { return Reachable; }
-    
-    /// \brief Mark the block as unreachable.
+
+    /// Mark the block as unreachable.
     void markUnreachable();
-    
-    /// \brief Set the source for a decision about the branching of states.
+
+    /// Set the source for a decision about the branching of states.
     /// \param Source -- The statement that was the origin of a branching
     /// decision.
     void setSource(const Stmt *Source) { this->From = Source; }
-    
-    /// \brief Set the consumed state of a given variable.
+
+    /// Set the consumed state of a given variable.
     void setState(const VarDecl *Var, ConsumedState State);
-    
-    /// \brief Set the consumed state of a given temporary value.
+
+    /// Set the consumed state of a given temporary value.
     void setState(const CXXBindTemporaryExpr *Tmp, ConsumedState State);
-    
-    /// \brief Remove the temporary value from our state map.
+
+    /// Remove the temporary value from our state map.
     void remove(const CXXBindTemporaryExpr *Tmp);
-    
-    /// \brief Tests to see if there is a mismatch in the states stored in two
+
+    /// Tests to see if there is a mismatch in the states stored in two
     /// maps.
     ///
     /// \param Other -- The second map to compare against.
     bool operator!=(const ConsumedStateMap *Other) const;
   };
-  
+
   class ConsumedBlockInfo {
     std::vector<std::unique_ptr<ConsumedStateMap>> StateMapsArray;
     std::vector<unsigned int> VisitOrder;
-    
+
   public:
     ConsumedBlockInfo() = default;
 
@@ -218,7 +218,7 @@
       for (const auto BI : *SortedGraph)
         VisitOrder[BI->getBlockID()] = VisitOrderCounter++;
     }
-    
+
     bool allBackEdgesVisited(const CFGBlock *CurrBlock,
                              const CFGBlock *TargetBlock);
 
@@ -228,7 +228,7 @@
                  std::unique_ptr<ConsumedStateMap> StateMap);
 
     ConsumedStateMap* borrowInfo(const CFGBlock *Block);
-    
+
     void discardInfo(const CFGBlock *Block);
 
     std::unique_ptr<ConsumedStateMap> getInfo(const CFGBlock *Block);
@@ -243,12 +243,12 @@
     std::unique_ptr<ConsumedStateMap> CurrStates;
 
     ConsumedState ExpectedReturnState;
-    
+
     void determineExpectedReturnState(AnalysisDeclContext &AC,
                                       const FunctionDecl *D);
     bool splitState(const CFGBlock *CurrBlock,
                     const ConsumedStmtVisitor &Visitor);
-    
+
   public:
     ConsumedWarningsHandlerBase &WarningsHandler;
 
@@ -256,8 +256,8 @@
         : WarningsHandler(WarningsHandler) {}
 
     ConsumedState getExpectedReturnState() const { return ExpectedReturnState; }
-    
-    /// \brief Check a function's CFG for consumed violations.
+
+    /// Check a function's CFG for consumed violations.
     ///
     /// We traverse the blocks in the CFG, keeping track of the state of each
     /// value who's type has uniquness annotations.  If methods are invoked in
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h b/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
index 963bbd3..021e98d 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/Dominators.h
@@ -20,7 +20,7 @@
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/iterator.h"
 #include "llvm/Support/GenericDomTree.h"
-#include "llvm/Support/GenericDomTreeConstruction.h" 
+#include "llvm/Support/GenericDomTreeConstruction.h"
 #include "llvm/Support/raw_ostream.h"
 
 // FIXME: There is no good reason for the domtree to require a print method
@@ -37,7 +37,7 @@
 
 using DomTreeNode = llvm::DomTreeNodeBase<CFGBlock>;
 
-/// \brief Concrete subclass of DominatorTreeBase for Clang
+/// Concrete subclass of DominatorTreeBase for Clang
 /// This class implements the dominators tree functionality given a Clang CFG.
 ///
 class DominatorTree : public ManagedAnalysis {
@@ -54,18 +54,18 @@
 
   llvm::DomTreeBase<CFGBlock>& getBase() { return *DT; }
 
-  /// \brief This method returns the root CFGBlock of the dominators tree.
+  /// This method returns the root CFGBlock of the dominators tree.
   CFGBlock *getRoot() const {
     return DT->getRoot();
   }
 
-  /// \brief This method returns the root DomTreeNode, which is the wrapper
+  /// This method returns the root DomTreeNode, which is the wrapper
   /// for CFGBlock.
   DomTreeNode *getRootNode() const {
     return DT->getRootNode();
   }
 
-  /// \brief This method compares two dominator trees.
+  /// This method compares two dominator trees.
   /// The method returns false if the other dominator tree matches this
   /// dominator tree, otherwise returns true.
   bool compare(DominatorTree &Other) const {
@@ -81,14 +81,14 @@
     return false;
   }
 
-  /// \brief This method builds the dominator tree for a given CFG
+  /// This method builds the dominator tree for a given CFG
   /// The CFG information is passed via AnalysisDeclContext
   void buildDominatorTree(AnalysisDeclContext &AC) {
     cfg = AC.getCFG();
     DT->recalculate(*cfg);
   }
 
-  /// \brief This method dumps immediate dominators for each block,
+  /// This method dumps immediate dominators for each block,
   /// mainly used for debug purposes.
   void dump() {
     llvm::errs() << "Immediate dominance tree (Node#,IDom#):\n";
@@ -104,20 +104,20 @@
     }
   }
 
-  /// \brief This method tests if one CFGBlock dominates the other.
+  /// This method tests if one CFGBlock dominates the other.
   /// The method return true if A dominates B, false otherwise.
   /// Note a block always dominates itself.
   bool dominates(const CFGBlock *A, const CFGBlock *B) const {
     return DT->dominates(A, B);
   }
 
-  /// \brief This method tests if one CFGBlock properly dominates the other.
+  /// This method tests if one CFGBlock properly dominates the other.
   /// The method return true if A properly dominates B, false otherwise.
   bool properlyDominates(const CFGBlock *A, const CFGBlock *B) const {
     return DT->properlyDominates(A, B);
   }
 
-  /// \brief This method finds the nearest common dominator CFG block
+  /// This method finds the nearest common dominator CFG block
   /// for CFG block A and B. If there is no such block then return NULL.
   CFGBlock *findNearestCommonDominator(CFGBlock *A, CFGBlock *B) {
     return DT->findNearestCommonDominator(A, B);
@@ -128,24 +128,24 @@
     return DT->findNearestCommonDominator(A, B);
   }
 
-  /// \brief This method is used to update the dominator
+  /// This method is used to update the dominator
   /// tree information when a node's immediate dominator changes.
   void changeImmediateDominator(CFGBlock *N, CFGBlock *NewIDom) {
     DT->changeImmediateDominator(N, NewIDom);
   }
 
-  /// \brief This method tests if the given CFGBlock can be reachable from root.
+  /// This method tests if the given CFGBlock can be reachable from root.
   /// Returns true if reachable, false otherwise.
   bool isReachableFromEntry(const CFGBlock *A) {
     return DT->isReachableFromEntry(A);
   }
 
-  /// \brief This method releases the memory held by the dominator tree.
+  /// This method releases the memory held by the dominator tree.
   virtual void releaseMemory() {
     DT->releaseMemory();
   }
 
-  /// \brief This method converts the dominator tree to human readable form.
+  /// This method converts the dominator tree to human readable form.
   virtual void print(raw_ostream &OS, const llvm::Module* M= nullptr) const {
     DT->print(OS);
   }
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/FormatString.h b/linux-x64/clang/include/clang/Analysis/Analyses/FormatString.h
index 8c531d6..598d341 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/FormatString.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/FormatString.h
@@ -236,7 +236,7 @@
   const char *toString() const;
 
   bool isPrintfKind() const { return IsPrintf; }
-  
+
   Optional<ConversionSpecifier> getStandardSpecifier() const;
 
 protected:
@@ -256,18 +256,26 @@
 private:
   const Kind K;
   QualType T;
-  const char *Name;
-  bool Ptr;
+  const char *Name = nullptr;
+  bool Ptr = false;
+
+  /// The TypeKind identifies certain well-known types like size_t and
+  /// ptrdiff_t.
+  enum class TypeKind { DontCare, SizeT, PtrdiffT };
+  TypeKind TK = TypeKind::DontCare;
+
 public:
-  ArgType(Kind k = UnknownTy, const char *n = nullptr)
-      : K(k), Name(n), Ptr(false) {}
-  ArgType(QualType t, const char *n = nullptr)
-      : K(SpecificTy), T(t), Name(n), Ptr(false) {}
-  ArgType(CanQualType t) : K(SpecificTy), T(t), Name(nullptr), Ptr(false) {}
+  ArgType(Kind K = UnknownTy, const char *N = nullptr) : K(K), Name(N) {}
+  ArgType(QualType T, const char *N = nullptr) : K(SpecificTy), T(T), Name(N) {}
+  ArgType(CanQualType T) : K(SpecificTy), T(T) {}
 
   static ArgType Invalid() { return ArgType(InvalidTy); }
   bool isValid() const { return K != InvalidTy; }
 
+  bool isSizeT() const { return TK == TypeKind::SizeT; }
+
+  bool isPtrdiffT() const { return TK == TypeKind::PtrdiffT; }
+
   /// Create an ArgType which corresponds to the type pointer to A.
   static ArgType PtrTo(const ArgType& A) {
     assert(A.K >= InvalidTy && "ArgType cannot be pointer to invalid/unknown");
@@ -276,6 +284,21 @@
     return Res;
   }
 
+  /// Create an ArgType which corresponds to the size_t/ssize_t type.
+  static ArgType makeSizeT(const ArgType &A) {
+    ArgType Res = A;
+    Res.TK = TypeKind::SizeT;
+    return Res;
+  }
+
+  /// Create an ArgType which corresponds to the ptrdiff_t/unsigned ptrdiff_t
+  /// type.
+  static ArgType makePtrdiffT(const ArgType &A) {
+    ArgType Res = A;
+    Res.TK = TypeKind::PtrdiffT;
+    return Res;
+  }
+
   MatchKind matchesType(ASTContext &C, QualType argTy) const;
 
   QualType getRepresentativeType(ASTContext &C) const;
@@ -510,7 +533,7 @@
     return getConversionSpecifier().consumesDataArgument();
   }
 
-  /// \brief Returns the builtin type that a data argument
+  /// Returns the builtin type that a data argument
   /// paired with this format specifier should have.  This method
   /// will return null if the format specifier does not have
   /// a matching data argument or the matching argument matches
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/LiveVariables.h b/linux-x64/clang/include/clang/Analysis/Analyses/LiveVariables.h
index 6a12223..0cb500f 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/LiveVariables.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/LiveVariables.h
@@ -25,7 +25,7 @@
 class Stmt;
 class DeclRefExpr;
 class SourceManager;
-  
+
 class LiveVariables : public ManagedAnalysis {
 public:
   class LivenessValues {
@@ -33,33 +33,36 @@
 
     llvm::ImmutableSet<const Stmt *> liveStmts;
     llvm::ImmutableSet<const VarDecl *> liveDecls;
-    
+    llvm::ImmutableSet<const BindingDecl *> liveBindings;
+
     bool equals(const LivenessValues &V) const;
 
     LivenessValues()
-      : liveStmts(nullptr), liveDecls(nullptr) {}
+      : liveStmts(nullptr), liveDecls(nullptr), liveBindings(nullptr) {}
 
     LivenessValues(llvm::ImmutableSet<const Stmt *> LiveStmts,
-                   llvm::ImmutableSet<const VarDecl *> LiveDecls)
-      : liveStmts(LiveStmts), liveDecls(LiveDecls) {}
+                   llvm::ImmutableSet<const VarDecl *> LiveDecls,
+                   llvm::ImmutableSet<const BindingDecl *> LiveBindings)
+        : liveStmts(LiveStmts), liveDecls(LiveDecls),
+          liveBindings(LiveBindings) {}
 
     bool isLive(const Stmt *S) const;
     bool isLive(const VarDecl *D) const;
-    
-    friend class LiveVariables;    
+
+    friend class LiveVariables;
   };
-  
+
   class Observer {
     virtual void anchor();
   public:
     virtual ~Observer() {}
-    
+
     /// A callback invoked right before invoking the
     ///  liveness transfer function on the given statement.
     virtual void observeStmt(const Stmt *S,
                              const CFGBlock *currentBlock,
                              const LivenessValues& V) {}
-    
+
     /// Called when the live variables analysis registers
     /// that a variable is killed.
     virtual void observerKill(const DeclRefExpr *DR) {}
@@ -70,47 +73,47 @@
   /// Compute the liveness information for a given CFG.
   static LiveVariables *computeLiveness(AnalysisDeclContext &analysisContext,
                                         bool killAtAssign);
-  
+
   /// Return true if a variable is live at the end of a
   /// specified block.
   bool isLive(const CFGBlock *B, const VarDecl *D);
-  
+
   /// Returns true if a variable is live at the beginning of the
   ///  the statement.  This query only works if liveness information
   ///  has been recorded at the statement level (see runOnAllBlocks), and
   ///  only returns liveness information for block-level expressions.
   bool isLive(const Stmt *S, const VarDecl *D);
-  
+
   /// Returns true the block-level expression "value" is live
   ///  before the given block-level expression (see runOnAllBlocks).
   bool isLive(const Stmt *Loc, const Stmt *StmtVal);
-    
+
   /// Print to stderr the liveness information associated with
   /// each basic block.
   void dumpBlockLiveness(const SourceManager& M);
 
   void runOnAllBlocks(Observer &obs);
-  
+
   static LiveVariables *create(AnalysisDeclContext &analysisContext) {
     return computeLiveness(analysisContext, true);
   }
-  
+
   static const void *getTag();
-  
+
 private:
   LiveVariables(void *impl);
   void *impl;
 };
-  
+
 class RelaxedLiveVariables : public LiveVariables {
 public:
   static LiveVariables *create(AnalysisDeclContext &analysisContext) {
     return computeLiveness(analysisContext, false);
   }
-  
+
   static const void *getTag();
 };
-  
+
 } // end namespace clang
 
 #endif
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h b/linux-x64/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h
index e76f3d4..7df3dc6 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/PostOrderCFGView.h
@@ -30,7 +30,7 @@
   virtual void anchor();
 
 public:
-  /// \brief Implements a set of CFGBlocks using a BitVector.
+  /// Implements a set of CFGBlocks using a BitVector.
   ///
   /// This class contains a minimal interface, primarily dictated by the SetType
   /// template parameter of the llvm::po_iterator template, as used with
@@ -47,7 +47,7 @@
     CFGBlockSet() = default;
     CFGBlockSet(const CFG *G) : VisitedBlockIDs(G->getNumBlockIDs(), false) {}
 
-    /// \brief Set the bit associated with a particular CFGBlock.
+    /// Set the bit associated with a particular CFGBlock.
     /// This is the important method for the SetType template parameter.
     std::pair<llvm::NoneType, bool> insert(const CFGBlock *Block) {
       // Note that insert() is called by po_iterator, which doesn't check to
@@ -62,7 +62,7 @@
       return std::make_pair(None, true);
     }
 
-    /// \brief Check if the bit for a CFGBlock has been already set.
+    /// Check if the bit for a CFGBlock has been already set.
     /// This method is for tracking visited blocks in the main threadsafety
     /// loop. Block must not be null.
     bool alreadySet(const CFGBlock *Block) {
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ReachableCode.h b/linux-x64/clang/include/clang/Analysis/Analyses/ReachableCode.h
index 4c523bf..d79f1b0 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ReachableCode.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ReachableCode.h
@@ -57,7 +57,7 @@
 };
 
 /// ScanReachableFromBlock - Mark all blocks reachable from Start.
-/// Returns the total number of blocks that were marked reachable.  
+/// Returns the total number of blocks that were marked reachable.
 unsigned ScanReachableFromBlock(const CFGBlock *Start,
                                 llvm::BitVector &Reachable);
 
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
index 940f3ac..c72db6f 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafety.h
@@ -228,7 +228,7 @@
   bool IssueBetaWarnings = false;
 };
 
-/// \brief Check a function's CFG for thread-safety violations.
+/// Check a function's CFG for thread-safety violations.
 ///
 /// We traverse the blocks in the CFG, compute the set of mutexes that are held
 /// at the end of each block, and issue warnings for thread safety violations.
@@ -239,7 +239,7 @@
 
 void threadSafetyCleanup(BeforeSet *Cache);
 
-/// \brief Helper function that returns a LockKind required for the given level
+/// Helper function that returns a LockKind required for the given level
 /// of access.
 LockKind getLockKindFromAccessKind(AccessKind AK);
 
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h
index d8677ba..599c164 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyCommon.h
@@ -329,7 +329,7 @@
 // Translate clang::Expr to til::SExpr.
 class SExprBuilder {
 public:
-  /// \brief Encapsulates the lexical context of a function call.  The lexical
+  /// Encapsulates the lexical context of a function call.  The lexical
   /// context includes the arguments to the call, including the implicit object
   /// argument.  When an attribute containing a mutex expression is attached to
   /// a method, the expression may refer to formal parameters of the method.
@@ -500,7 +500,7 @@
   std::vector<til::BasicBlock *> BlockMap;
 
   // Extra information per BB. Indexed by clang BlockID.
-  std::vector<BlockInfo> BBInfo;           
+  std::vector<BlockInfo> BBInfo;
 
   LVarDefinitionMap CurrentLVarMap;
   std::vector<til::Phi *> CurrentArguments;
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyLogical.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyLogical.h
index bc78021..2508af1 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyLogical.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyLogical.h
@@ -29,7 +29,7 @@
   };
   Opcode kind() const { return Kind; }
 
-  /// \brief Logical implication. Returns true if the LExpr implies RHS, i.e. if
+  /// Logical implication. Returns true if the LExpr implies RHS, i.e. if
   /// the LExpr holds, then RHS must hold. For example, (A & B) implies A.
   inline bool implies(const LExpr *RHS) const;
 
@@ -92,7 +92,7 @@
   static bool classof(const LExpr *E) { return E->kind() == LExpr::Not; }
 };
 
-/// \brief Logical implication. Returns true if LHS implies RHS, i.e. if LHS
+/// Logical implication. Returns true if LHS implies RHS, i.e. if LHS
 /// holds, then RHS must hold. For example, (A & B) implies A.
 bool implies(const LExpr *LHS, const LExpr *RHS);
 
diff --git a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h
index 38e6205..4903101 100644
--- a/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h
+++ b/linux-x64/clang/include/clang/Analysis/Analyses/ThreadSafetyTraverse.h
@@ -32,7 +32,7 @@
 
 // Defines an interface used to traverse SExprs.  Traversals have been made as
 // generic as possible, and are intended to handle any kind of pass over the
-// AST, e.g. visiters, copying, non-destructive rewriting, destructive
+// AST, e.g. visitors, copying, non-destructive rewriting, destructive
 // (in-place) rewriting, hashing, typing, etc.
 //
 // Traversals implement the functional notion of a "fold" operation on SExprs.
diff --git a/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h b/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
index 448d8f3..19531d9 100644
--- a/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
+++ b/linux-x64/clang/include/clang/Analysis/AnalysisDeclContext.h
@@ -111,7 +111,7 @@
   AnalysisDeclContextManager *getManager() const {
     return Manager;
   }
-  
+
   /// Return the build options used to construct the CFG.
   CFG::BuildOptions &getCFGBuildOptions() {
     return cfgBuildOptions;
@@ -135,22 +135,22 @@
   void registerForcedBlockExpression(const Stmt *stmt);
   const CFGBlock *getBlockForRegisteredExpression(const Stmt *stmt);
 
-  /// \brief Get the body of the Declaration.
+  /// Get the body of the Declaration.
   Stmt *getBody() const;
 
-  /// \brief Get the body of the Declaration.
+  /// Get the body of the Declaration.
   /// \param[out] IsAutosynthesized Specifies if the body is auto-generated
   ///             by the BodyFarm.
   Stmt *getBody(bool &IsAutosynthesized) const;
 
-  /// \brief Checks if the body of the Decl is generated by the BodyFarm.
+  /// Checks if the body of the Decl is generated by the BodyFarm.
   ///
   /// Note, the lookup is not free. We are going to call getBody behind
   /// the scenes.
   /// \sa getBody
   bool isBodyAutosynthesized() const;
 
-  /// \brief Checks if the body of the Decl is generated by the BodyFarm from a
+  /// Checks if the body of the Decl is generated by the BodyFarm from a
   /// model file.
   ///
   /// Note, the lookup is not free. We are going to call getBody behind
@@ -169,7 +169,7 @@
 
   void dumpCFG(bool ShowColors);
 
-  /// \brief Returns true if we have built a CFG for this analysis context.
+  /// Returns true if we have built a CFG for this analysis context.
   /// Note that this doesn't correspond to whether or not a valid CFG exists, it
   /// corresponds to whether we *attempted* to build one.
   bool isCFGBuilt() const { return builtCFG; }
@@ -190,7 +190,7 @@
                                          const Stmt *S,
                                          const CFGBlock *Blk,
                                          unsigned Idx);
-  
+
   const BlockInvocationContext *
   getBlockInvocationContext(const LocationContext *parent,
                             const BlockDecl *BD,
@@ -264,7 +264,7 @@
     return Ctx->getSelfDecl();
   }
 
-  const StackFrameContext *getCurrentStackFrame() const;
+  const StackFrameContext *getStackFrame() const;
 
   /// Return true if the current LocationContext has no caller context.
   virtual bool inTopFrame() const;
@@ -359,7 +359,7 @@
   friend class LocationContextManager;
 
   const BlockDecl *BD;
-  
+
   // FIXME: Come up with a more type-safe way to model context-sensitivity.
   const void *ContextData;
 
@@ -372,7 +372,7 @@
   ~BlockInvocationContext() override = default;
 
   const BlockDecl *getBlockDecl() const { return BD; }
-  
+
   const void *getContextData() const { return ContextData; }
 
   void Profile(llvm::FoldingSetNodeID &ID) override;
@@ -403,7 +403,7 @@
   const ScopeContext *getScope(AnalysisDeclContext *ctx,
                                const LocationContext *parent,
                                const Stmt *s);
-  
+
   const BlockInvocationContext *
   getBlockInvocationContext(AnalysisDeclContext *ctx,
                             const LocationContext *parent,
@@ -451,6 +451,7 @@
                              bool addStaticInitBranches = false,
                              bool addCXXNewAllocator = true,
                              bool addRichCXXConstructors = true,
+                             bool markElidedCXXConstructors = true,
                              CodeInjector *injector = nullptr);
 
   AnalysisDeclContext *getContext(const Decl *D);
@@ -462,7 +463,7 @@
   CFG::BuildOptions &getCFGBuildOptions() {
     return cfgBuildOptions;
   }
-  
+
   /// Return true if faux bodies should be synthesized for well-known
   /// functions.
   bool synthesizeBodies() const { return SynthesizeBodies; }
diff --git a/linux-x64/clang/include/clang/Analysis/CFG.h b/linux-x64/clang/include/clang/Analysis/CFG.h
index 8120041..bf81d83 100644
--- a/linux-x64/clang/include/clang/Analysis/CFG.h
+++ b/linux-x64/clang/include/clang/Analysis/CFG.h
@@ -15,9 +15,10 @@
 #ifndef LLVM_CLANG_ANALYSIS_CFG_H
 #define LLVM_CLANG_ANALYSIS_CFG_H
 
-#include "clang/AST/ExprCXX.h"
 #include "clang/Analysis/Support/BumpVector.h"
 #include "clang/Analysis/ConstructionContext.h"
+#include "clang/AST/ExprCXX.h"
+#include "clang/AST/ExprObjC.h"
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/GraphTraits.h"
@@ -51,7 +52,7 @@
 class LangOptions;
 class VarDecl;
 
-/// CFGElement - Represents a top-level expression in a basic block.
+/// Represents a top-level expression in a basic block.
 class CFGElement {
 public:
   enum Kind {
@@ -92,7 +93,7 @@
   CFGElement() = default;
 
 public:
-  /// \brief Convert to the specified CFGElement type, asserting that this
+  /// Convert to the specified CFGElement type, asserting that this
   /// CFGElement is of the desired type.
   template<typename T>
   T castAs() const {
@@ -103,7 +104,7 @@
     return t;
   }
 
-  /// \brief Convert to the specified CFGElement type, returning None if this
+  /// Convert to the specified CFGElement type, returning None if this
   /// CFGElement is not of the desired type.
   template<typename T>
   Optional<T> getAs() const {
@@ -144,9 +145,9 @@
   CFGStmt() = default;
 };
 
-/// CFGConstructor - Represents C++ constructor call. Maintains information
-/// necessary to figure out what memory is being initialized by the
-/// constructor expression. For now this is only used by the analyzer's CFG.
+/// Represents C++ constructor call. Maintains information necessary to figure
+/// out what memory is being initialized by the constructor expression. For now
+/// this is only used by the analyzer's CFG.
 class CFGConstructor : public CFGStmt {
 public:
   explicit CFGConstructor(CXXConstructExpr *CE, const ConstructionContext *C)
@@ -169,30 +170,34 @@
   }
 };
 
-/// CFGCXXRecordTypedCall - Represents a function call that returns a C++ object
-/// by value. This, like constructor, requires a construction context in order
-/// to understand the storage of the returned object . In C such tracking is not
-/// necessary because no additional effort is required for destroying the object
-/// or modeling copy elision. Like CFGConstructor, this element is for now only
-/// used by the analyzer's CFG.
+/// Represents a function call that returns a C++ object by value. This, like
+/// constructor, requires a construction context in order to understand the
+/// storage of the returned object . In C such tracking is not necessary because
+/// no additional effort is required for destroying the object or modeling copy
+/// elision. Like CFGConstructor, this element is for now only used by the
+/// analyzer's CFG.
 class CFGCXXRecordTypedCall : public CFGStmt {
 public:
   /// Returns true when call expression \p CE needs to be represented
   /// by CFGCXXRecordTypedCall, as opposed to a regular CFGStmt.
-  static bool isCXXRecordTypedCall(CallExpr *CE, const ASTContext &ACtx) {
-    return CE->getCallReturnType(ACtx).getCanonicalType()->getAsCXXRecordDecl();
+  static bool isCXXRecordTypedCall(Expr *E) {
+    assert(isa<CallExpr>(E) || isa<ObjCMessageExpr>(E));
+    // There is no such thing as reference-type expression. If the function
+    // returns a reference, it'll return the respective lvalue or xvalue
+    // instead, and we're only interested in objects.
+    return !E->isGLValue() &&
+           E->getType().getCanonicalType()->getAsCXXRecordDecl();
   }
 
-  explicit CFGCXXRecordTypedCall(CallExpr *CE, const ConstructionContext *C)
-      : CFGStmt(CE, CXXRecordTypedCall) {
-    // FIXME: This is not protected against squeezing a non-record-typed-call
-    // into the constructor. An assertion would require passing an ASTContext
-    // which would mean paying for something we don't use.
+  explicit CFGCXXRecordTypedCall(Expr *E, const ConstructionContext *C)
+      : CFGStmt(E, CXXRecordTypedCall) {
+    assert(isCXXRecordTypedCall(E));
     assert(C && (isa<TemporaryObjectConstructionContext>(C) ||
                  // These are possible in C++17 due to mandatory copy elision.
                  isa<ReturnedValueConstructionContext>(C) ||
                  isa<VariableConstructionContext>(C) ||
-                 isa<ConstructorInitializerConstructionContext>(C)));
+                 isa<ConstructorInitializerConstructionContext>(C) ||
+                 isa<ArgumentConstructionContext>(C)));
     Data2.setPointer(const_cast<ConstructionContext *>(C));
   }
 
@@ -210,8 +215,8 @@
   }
 };
 
-/// CFGInitializer - Represents C++ base or member initializer from
-/// constructor's initialization list.
+/// Represents C++ base or member initializer from constructor's initialization
+/// list.
 class CFGInitializer : public CFGElement {
 public:
   explicit CFGInitializer(CXXCtorInitializer *initializer)
@@ -231,7 +236,7 @@
   }
 };
 
-/// CFGNewAllocator - Represents C++ allocator call.
+/// Represents C++ allocator call.
 class CFGNewAllocator : public CFGElement {
 public:
   explicit CFGNewAllocator(const CXXNewExpr *S)
@@ -349,8 +354,8 @@
   }
 };
 
-/// CFGImplicitDtor - Represents C++ object destructor implicitly generated
-/// by compiler on various occasions.
+/// Represents C++ object destructor implicitly generated by compiler on various
+/// occasions.
 class CFGImplicitDtor : public CFGElement {
 protected:
   CFGImplicitDtor() = default;
@@ -373,9 +378,9 @@
   }
 };
 
-/// CFGAutomaticObjDtor - Represents C++ object destructor implicitly generated
-/// for automatic object or temporary bound to const reference at the point
-/// of leaving its local scope.
+/// Represents C++ object destructor implicitly generated for automatic object
+/// or temporary bound to const reference at the point of leaving its local
+/// scope.
 class CFGAutomaticObjDtor: public CFGImplicitDtor {
 public:
   CFGAutomaticObjDtor(const VarDecl *var, const Stmt *stmt)
@@ -400,8 +405,7 @@
   }
 };
 
-/// CFGDeleteDtor - Represents C++ object destructor generated
-/// from a call to delete.
+/// Represents C++ object destructor generated from a call to delete.
 class CFGDeleteDtor : public CFGImplicitDtor {
 public:
   CFGDeleteDtor(const CXXRecordDecl *RD, const CXXDeleteExpr *DE)
@@ -426,8 +430,8 @@
   }
 };
 
-/// CFGBaseDtor - Represents C++ object destructor implicitly generated for
-/// base object in destructor.
+/// Represents C++ object destructor implicitly generated for base object in
+/// destructor.
 class CFGBaseDtor : public CFGImplicitDtor {
 public:
   CFGBaseDtor(const CXXBaseSpecifier *base)
@@ -447,8 +451,8 @@
   }
 };
 
-/// CFGMemberDtor - Represents C++ object destructor implicitly generated for
-/// member object in destructor.
+/// Represents C++ object destructor implicitly generated for member object in
+/// destructor.
 class CFGMemberDtor : public CFGImplicitDtor {
 public:
   CFGMemberDtor(const FieldDecl *field)
@@ -468,8 +472,8 @@
   }
 };
 
-/// CFGTemporaryDtor - Represents C++ object destructor implicitly generated
-/// at the end of full expression for temporary object.
+/// Represents C++ object destructor implicitly generated at the end of full
+/// expression for temporary object.
 class CFGTemporaryDtor : public CFGImplicitDtor {
 public:
   CFGTemporaryDtor(CXXBindTemporaryExpr *expr)
@@ -489,7 +493,7 @@
   }
 };
 
-/// CFGTerminator - Represents CFGBlock terminator statement.
+/// Represents CFGBlock terminator statement.
 ///
 /// TemporaryDtorsBranch bit is set to true if the terminator marks a branch
 /// in control flow of destructors of temporaries. In this case terminator
@@ -520,7 +524,7 @@
   explicit operator bool() const { return getStmt(); }
 };
 
-/// CFGBlock - Represents a single basic block in a source-level CFG.
+/// Represents a single basic block in a source-level CFG.
 ///  It consists of:
 ///
 ///  (1) A set of statements/expressions (which may contain subexpressions).
@@ -588,26 +592,24 @@
     bool empty() const { return Impl.empty(); }
   };
 
-  /// Stmts - The set of statements in the basic block.
+  /// The set of statements in the basic block.
   ElementList Elements;
 
-  /// Label - An (optional) label that prefixes the executable
-  ///  statements in the block.  When this variable is non-NULL, it is
-  ///  either an instance of LabelStmt, SwitchCase or CXXCatchStmt.
+  /// An (optional) label that prefixes the executable statements in the block.
+  /// When this variable is non-NULL, it is either an instance of LabelStmt,
+  /// SwitchCase or CXXCatchStmt.
   Stmt *Label = nullptr;
 
-  /// Terminator - The terminator for a basic block that
-  ///  indicates the type of control-flow that occurs between a block
-  ///  and its successors.
+  /// The terminator for a basic block that indicates the type of control-flow
+  /// that occurs between a block and its successors.
   CFGTerminator Terminator;
 
-  /// LoopTarget - Some blocks are used to represent the "loop edge" to
-  ///  the start of a loop from within the loop body.  This Stmt* will be
-  ///  refer to the loop statement for such blocks (and be null otherwise).
+  /// Some blocks are used to represent the "loop edge" to the start of a loop
+  /// from within the loop body. This Stmt* will be refer to the loop statement
+  /// for such blocks (and be null otherwise).
   const Stmt *LoopTarget = nullptr;
 
-  /// BlockID - A numerical ID assigned to a CFGBlock during construction
-  ///   of the CFG.
+  /// A numerical ID assigned to a CFGBlock during construction of the CFG.
   unsigned BlockID;
 
 public:
@@ -629,7 +631,7 @@
   public:
     /// Construct an AdjacentBlock with a possibly unreachable block.
     AdjacentBlock(CFGBlock *B, bool IsReachable);
-    
+
     /// Construct an AdjacentBlock with a reachable block and an alternate
     /// unreachable block.
     AdjacentBlock(CFGBlock *B, CFGBlock *AlternateBlock);
@@ -665,13 +667,12 @@
   };
 
 private:
-  /// Predecessors/Successors - Keep track of the predecessor / successor
-  /// CFG blocks.
+  /// Keep track of the predecessor / successor CFG blocks.
   using AdjacentBlocks = BumpVector<AdjacentBlock>;
   AdjacentBlocks Preds;
   AdjacentBlocks Succs;
 
-  /// NoReturn - This bit is set when the basic block contains a function call
+  /// This bit is set when the basic block contains a function call
   /// or implicit destructor that is attributed as 'noreturn'. In that case,
   /// control cannot technically ever proceed past this block. All such blocks
   /// will have a single immediate successor: the exit block. This allows them
@@ -682,7 +683,7 @@
   /// storage if the memory usage of CFGBlock becomes an issue.
   unsigned HasNoReturnElement : 1;
 
-  /// Parent - The parent CFG that owns this CFGBlock.
+  /// The parent CFG that owns this CFGBlock.
   CFG *Parent;
 
 public:
@@ -878,10 +879,10 @@
     Elements.push_back(CFGConstructor(CE, CC), C);
   }
 
-  void appendCXXRecordTypedCall(CallExpr *CE,
+  void appendCXXRecordTypedCall(Expr *E,
                                 const ConstructionContext *CC,
                                 BumpVectorContext &C) {
-    Elements.push_back(CFGCXXRecordTypedCall(CE, CC), C);
+    Elements.push_back(CFGCXXRecordTypedCall(E, CC), C);
   }
 
   void appendInitializer(CXXCtorInitializer *initializer,
@@ -980,7 +981,7 @@
 
 };
 
-/// \brief CFGCallback defines methods that should be called when a logical
+/// CFGCallback defines methods that should be called when a logical
 /// operator error is found when building the CFG.
 class CFGCallback {
 public:
@@ -992,7 +993,7 @@
                                       bool isAlwaysTrue) {}
 };
 
-/// CFG - Represents a source-level, intra-procedural CFG that represents the
+/// Represents a source-level, intra-procedural CFG that represents the
 ///  control-flow of a Stmt.  The Stmt can represent an entire function body,
 ///  or a single expression.  A CFG will always contain one empty block that
 ///  represents the Exit point of the CFG.  A CFG will also contain a designated
@@ -1025,6 +1026,7 @@
     bool AddCXXNewAllocator = false;
     bool AddCXXDefaultInitExprInCtors = false;
     bool AddRichCXXConstructors = false;
+    bool MarkElidedCXXConstructors = false;
 
     BuildOptions() = default;
 
@@ -1043,21 +1045,21 @@
     }
   };
 
-  /// buildCFG - Builds a CFG from an AST.
+  /// Builds a CFG from an AST.
   static std::unique_ptr<CFG> buildCFG(const Decl *D, Stmt *AST, ASTContext *C,
                                        const BuildOptions &BO);
 
-  /// createBlock - Create a new block in the CFG.  The CFG owns the block;
-  ///  the caller should not directly free it.
+  /// Create a new block in the CFG. The CFG owns the block; the caller should
+  /// not directly free it.
   CFGBlock *createBlock();
 
-  /// setEntry - Set the entry block of the CFG.  This is typically used
-  ///  only during CFG construction.  Most CFG clients expect that the
-  ///  entry block has no predecessors and contains no statements.
+  /// Set the entry block of the CFG. This is typically used only during CFG
+  /// construction. Most CFG clients expect that the entry block has no
+  /// predecessors and contains no statements.
   void setEntry(CFGBlock *B) { Entry = B; }
 
-  /// setIndirectGotoBlock - Set the block used for indirect goto jumps.
-  ///  This is typically used only during CFG construction.
+  /// Set the block used for indirect goto jumps. This is typically used only
+  /// during CFG construction.
   void setIndirectGotoBlock(CFGBlock *B) { IndirectGotoBlock = B; }
 
   //===--------------------------------------------------------------------===//
@@ -1151,8 +1153,8 @@
 
   template <typename CALLBACK>
   void VisitBlockStmts(CALLBACK& O) const {
-    for (const_iterator I=begin(), E=end(); I != E; ++I)
-      for (CFGBlock::const_iterator BI=(*I)->begin(), BE=(*I)->end();
+    for (const_iterator I = begin(), E = end(); I != E; ++I)
+      for (CFGBlock::const_iterator BI = (*I)->begin(), BE = (*I)->end();
            BI != BE; ++BI) {
         if (Optional<CFGStmt> stmt = BI->getAs<CFGStmt>())
           O(const_cast<Stmt*>(stmt->getStmt()));
@@ -1163,13 +1165,12 @@
   // CFG Introspection.
   //===--------------------------------------------------------------------===//
 
-  /// getNumBlockIDs - Returns the total number of BlockIDs allocated (which
-  /// start at 0).
+  /// Returns the total number of BlockIDs allocated (which start at 0).
   unsigned getNumBlockIDs() const { return NumBlockIDs; }
 
-  /// size - Return the total number of CFGBlocks within the CFG
-  /// This is simply a renaming of the getNumBlockIDs(). This is necessary 
-  /// because the dominator implementation needs such an interface.
+  /// Return the total number of CFGBlocks within the CFG This is simply a
+  /// renaming of the getNumBlockIDs(). This is necessary because the dominator
+  /// implementation needs such an interface.
   unsigned size() const { return NumBlockIDs; }
 
   //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/Analysis/CFGStmtMap.h b/linux-x64/clang/include/clang/Analysis/CFGStmtMap.h
index 4dfa91d..78e637d 100644
--- a/linux-x64/clang/include/clang/Analysis/CFGStmtMap.h
+++ b/linux-x64/clang/include/clang/Analysis/CFGStmtMap.h
@@ -19,20 +19,18 @@
 
 namespace clang {
 
-class CFG;
-class CFGBlock;
 class ParentMap;
 class Stmt;
 
 class CFGStmtMap {
   ParentMap *PM;
   void *M;
-  
+
   CFGStmtMap(ParentMap *pm, void *m) : PM(pm), M(m) {}
-  
+
 public:
   ~CFGStmtMap();
-  
+
   /// Returns a new CFGMap for the given CFG.  It is the caller's
   /// responsibility to 'delete' this object when done using it.
   static CFGStmtMap *Build(CFG* C, ParentMap *PM);
diff --git a/linux-x64/clang/include/clang/Analysis/CallGraph.h b/linux-x64/clang/include/clang/Analysis/CallGraph.h
index bdcdfec..ae0f392 100644
--- a/linux-x64/clang/include/clang/Analysis/CallGraph.h
+++ b/linux-x64/clang/include/clang/Analysis/CallGraph.h
@@ -34,7 +34,7 @@
 class DeclContext;
 class Stmt;
 
-/// \brief The AST-based call graph.
+/// The AST-based call graph.
 ///
 /// The call graph extends itself with the given declarations by implementing
 /// the recursive AST visitor, which constructs the graph by visiting the given
@@ -55,7 +55,7 @@
   CallGraph();
   ~CallGraph();
 
-  /// \brief Populate the call graph with the functions in the given
+  /// Populate the call graph with the functions in the given
   /// declaration.
   ///
   /// Recursively walks the declaration to find all the dependent Decls as well.
@@ -63,13 +63,13 @@
     TraverseDecl(D);
   }
 
-  /// \brief Determine if a declaration should be included in the graph.
+  /// Determine if a declaration should be included in the graph.
   static bool includeInGraph(const Decl *D);
 
-  /// \brief Lookup the node for the given declaration.
+  /// Lookup the node for the given declaration.
   CallGraphNode *getNode(const Decl *) const;
 
-  /// \brief Lookup the node for the given declaration. If none found, insert
+  /// Lookup the node for the given declaration. If none found, insert
   /// one into the graph.
   CallGraphNode *getOrInsertNode(Decl *);
 
@@ -83,7 +83,7 @@
   const_iterator begin() const { return FunctionMap.begin(); }
   const_iterator end()   const { return FunctionMap.end();   }
 
-  /// \brief Get the number of nodes in the graph.
+  /// Get the number of nodes in the graph.
   unsigned size() const { return FunctionMap.size(); }
 
   /// \ brief Get the virtual root of the graph, all the functions available
@@ -133,10 +133,10 @@
   bool shouldWalkTypesOfTypeLocs() const { return false; }
 
 private:
-  /// \brief Add the given declaration to the call graph.
+  /// Add the given declaration to the call graph.
   void addNodeForDecl(Decl *D, bool IsGlobal);
 
-  /// \brief Allocate a new node in the graph.
+  /// Allocate a new node in the graph.
   CallGraphNode *allocateNewNode(Decl *);
 };
 
@@ -145,10 +145,10 @@
   using CallRecord = CallGraphNode *;
 
 private:
-  /// \brief The function/method declaration.
+  /// The function/method declaration.
   Decl *FD;
 
-  /// \brief The list of functions called from this node.
+  /// The list of functions called from this node.
   SmallVector<CallRecord, 5> CalledFunctions;
 
 public:
diff --git a/linux-x64/clang/include/clang/Analysis/CloneDetection.h b/linux-x64/clang/include/clang/Analysis/CloneDetection.h
index 5ef4457..862dde4 100644
--- a/linux-x64/clang/include/clang/Analysis/CloneDetection.h
+++ b/linux-x64/clang/include/clang/Analysis/CloneDetection.h
@@ -122,7 +122,11 @@
   /// Returns the start sourcelocation of the first statement in this sequence.
   ///
   /// This method should only be called on a non-empty StmtSequence object.
-  SourceLocation getStartLoc() const;
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getStartLoc() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const;
 
   /// Returns the end sourcelocation of the last statement in this sequence.
   ///
@@ -161,7 +165,7 @@
 /// The result of findClones can be further constrained with the constrainClones
 /// method.
 ///
-/// This class only searches for clones in exectuable source code
+/// This class only searches for clones in executable source code
 /// (e.g. function bodies). Other clones (e.g. cloned comments or declarations)
 /// are not supported.
 class CloneDetector {
@@ -332,7 +336,7 @@
   StringRef IgnoredFilesPattern;
   std::shared_ptr<llvm::Regex> IgnoredFilesRegex;
 
-  FilenamePatternConstraint(StringRef IgnoredFilesPattern) 
+  FilenamePatternConstraint(StringRef IgnoredFilesPattern)
       : IgnoredFilesPattern(IgnoredFilesPattern) {
     IgnoredFilesRegex = std::make_shared<llvm::Regex>("^(" +
         IgnoredFilesPattern.str() + "$)");
diff --git a/linux-x64/clang/include/clang/Analysis/CodeInjector.h b/linux-x64/clang/include/clang/Analysis/CodeInjector.h
index 413a55b..2c87cde 100644
--- a/linux-x64/clang/include/clang/Analysis/CodeInjector.h
+++ b/linux-x64/clang/include/clang/Analysis/CodeInjector.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::CodeInjector interface which is responsible for
+/// Defines the clang::CodeInjector interface which is responsible for
 /// injecting AST of function definitions that may not be available in the
 /// original source.
 ///
@@ -23,7 +23,7 @@
 class FunctionDecl;
 class ObjCMethodDecl;
 
-/// \brief CodeInjector is an interface which is responsible for injecting AST
+/// CodeInjector is an interface which is responsible for injecting AST
 /// of function definitions that may not be available in the original source.
 ///
 /// The getBody function will be called each time the static analyzer examines a
diff --git a/linux-x64/clang/include/clang/Analysis/ConstructionContext.h b/linux-x64/clang/include/clang/Analysis/ConstructionContext.h
index 8df95a8..9c62bac 100644
--- a/linux-x64/clang/include/clang/Analysis/ConstructionContext.h
+++ b/linux-x64/clang/include/clang/Analysis/ConstructionContext.h
@@ -22,66 +22,201 @@
 
 namespace clang {
 
-/// Construction context is a linked list of multiple layers. Layers are
-/// created gradually while traversing the AST, and layers that represent
-/// the outmost AST nodes are built first, while the node that immediately
-/// contains the constructor would be built last and capture the previous
-/// layers as its parents. Construction context captures the last layer
-/// (which has links to the previous layers) and classifies the seemingly
-/// arbitrary chain of layers into one of the possible ways of constructing
-/// an object in C++ for user-friendly experience.
-class ConstructionContextLayer {
+/// Represents a single point (AST node) in the program that requires attention
+/// during construction of an object. ConstructionContext would be represented
+/// as a list of such items.
+class ConstructionContextItem {
 public:
-  typedef llvm::PointerUnion<Stmt *, CXXCtorInitializer *> TriggerTy;
+  enum ItemKind {
+    VariableKind,
+    NewAllocatorKind,
+    ReturnKind,
+    MaterializationKind,
+    TemporaryDestructorKind,
+    ElidedDestructorKind,
+    ElidableConstructorKind,
+    ArgumentKind,
+    STATEMENT_WITH_INDEX_KIND_BEGIN=ArgumentKind,
+    STATEMENT_WITH_INDEX_KIND_END=ArgumentKind,
+    STATEMENT_KIND_BEGIN = VariableKind,
+    STATEMENT_KIND_END = ArgumentKind,
+    InitializerKind,
+    INITIALIZER_KIND_BEGIN=InitializerKind,
+    INITIALIZER_KIND_END=InitializerKind
+  };
+
+  LLVM_DUMP_METHOD static StringRef getKindAsString(ItemKind K) {
+    switch (K) {
+      case VariableKind:            return "construct into local variable";
+      case NewAllocatorKind:        return "construct into new-allocator";
+      case ReturnKind:              return "construct into return address";
+      case MaterializationKind:     return "materialize temporary";
+      case TemporaryDestructorKind: return "destroy temporary";
+      case ElidedDestructorKind:    return "elide destructor";
+      case ElidableConstructorKind: return "elide constructor";
+      case ArgumentKind:            return "construct into argument";
+      case InitializerKind:         return "construct into member variable";
+    };
+    llvm_unreachable("Unknown ItemKind");
+  }
 
 private:
+  const void *const Data;
+  const ItemKind Kind;
+  const unsigned Index = 0;
+
+  bool hasStatement() const {
+    return Kind >= STATEMENT_KIND_BEGIN &&
+           Kind <= STATEMENT_KIND_END;
+  }
+
+  bool hasIndex() const {
+    return Kind >= STATEMENT_WITH_INDEX_KIND_BEGIN &&
+           Kind >= STATEMENT_WITH_INDEX_KIND_END;
+  }
+
+  bool hasInitializer() const {
+    return Kind >= INITIALIZER_KIND_BEGIN &&
+           Kind <= INITIALIZER_KIND_END;
+  }
+
+public:
+  // ConstructionContextItem should be simple enough so that it was easy to
+  // re-construct it from the AST node it captures. For that reason we provide
+  // simple implicit conversions from all sorts of supported AST nodes.
+  ConstructionContextItem(const DeclStmt *DS)
+      : Data(DS), Kind(VariableKind) {}
+
+  ConstructionContextItem(const CXXNewExpr *NE)
+      : Data(NE), Kind(NewAllocatorKind) {}
+
+  ConstructionContextItem(const ReturnStmt *RS)
+      : Data(RS), Kind(ReturnKind) {}
+
+  ConstructionContextItem(const MaterializeTemporaryExpr *MTE)
+      : Data(MTE), Kind(MaterializationKind) {}
+
+  ConstructionContextItem(const CXXBindTemporaryExpr *BTE,
+                          bool IsElided = false)
+      : Data(BTE),
+        Kind(IsElided ? ElidedDestructorKind : TemporaryDestructorKind) {}
+
+  ConstructionContextItem(const CXXConstructExpr *CE)
+      : Data(CE), Kind(ElidableConstructorKind) {}
+
+  ConstructionContextItem(const CallExpr *CE, unsigned Index)
+      : Data(CE), Kind(ArgumentKind), Index(Index) {}
+
+  ConstructionContextItem(const CXXConstructExpr *CE, unsigned Index)
+      : Data(CE), Kind(ArgumentKind), Index(Index) {}
+
+  ConstructionContextItem(const ObjCMessageExpr *ME, unsigned Index)
+      : Data(ME), Kind(ArgumentKind), Index(Index) {}
+
+  // A polymorphic version of the previous calls with dynamic type check.
+  ConstructionContextItem(const Expr *E, unsigned Index)
+      : Data(E), Kind(ArgumentKind), Index(Index) {
+    assert(isa<CallExpr>(E) || isa<CXXConstructExpr>(E) ||
+           isa<ObjCMessageExpr>(E));
+  }
+
+  ConstructionContextItem(const CXXCtorInitializer *Init)
+      : Data(Init), Kind(InitializerKind), Index(0) {}
+
+  ItemKind getKind() const { return Kind; }
+
+  LLVM_DUMP_METHOD StringRef getKindAsString() const {
+    return getKindAsString(getKind());
+  }
+
   /// The construction site - the statement that triggered the construction
   /// for one of its parts. For instance, stack variable declaration statement
   /// triggers construction of itself or its elements if it's an array,
   /// new-expression triggers construction of the newly allocated object(s).
-  TriggerTy Trigger;
+  const Stmt *getStmt() const {
+    assert(hasStatement());
+    return static_cast<const Stmt *>(Data);
+  }
 
-  /// Sometimes a single trigger is not enough to describe the construction
-  /// site. In this case we'd have a chain of "partial" construction context
-  /// layers.
-  /// Some examples:
-  /// - A constructor within in an aggregate initializer list within a variable
-  ///   would have a construction context of the initializer list with
-  ///   the parent construction context of a variable.
-  /// - A constructor for a temporary that needs to be both destroyed
-  ///   and materialized into an elidable copy constructor would have a
-  ///   construction context of a CXXBindTemporaryExpr with the parent
-  ///   construction context of a MaterializeTemproraryExpr.
-  /// Not all of these are currently supported.
+  const Stmt *getStmtOrNull() const {
+    return hasStatement() ? getStmt() : nullptr;
+  }
+
+  /// The construction site is not necessarily a statement. It may also be a
+  /// CXXCtorInitializer, which means that a member variable is being
+  /// constructed during initialization of the object that contains it.
+  const CXXCtorInitializer *getCXXCtorInitializer() const {
+    assert(hasInitializer());
+    return static_cast<const CXXCtorInitializer *>(Data);
+  }
+
+  /// If a single trigger statement triggers multiple constructors, they are
+  /// usually being enumerated. This covers function argument constructors
+  /// triggered by a call-expression and items in an initializer list triggered
+  /// by an init-list-expression.
+  unsigned getIndex() const {
+    // This is a fairly specific request. Let's make sure the user knows
+    // what he's doing.
+    assert(hasIndex());
+    return Index;
+  }
+
+  void Profile(llvm::FoldingSetNodeID &ID) const {
+    ID.AddPointer(Data);
+    ID.AddInteger(Kind);
+    ID.AddInteger(Index);
+  }
+
+  bool operator==(const ConstructionContextItem &Other) const {
+    // For most kinds the Index comparison is trivially true, but
+    // checking kind separately doesn't seem to be less expensive
+    // than checking Index. Same in operator<().
+    return std::make_tuple(Data, Kind, Index) ==
+           std::make_tuple(Other.Data, Other.Kind, Other.Index);
+  }
+
+  bool operator<(const ConstructionContextItem &Other) const {
+    return std::make_tuple(Data, Kind, Index) <
+           std::make_tuple(Other.Data, Other.Kind, Other.Index);
+  }
+};
+
+/// Construction context can be seen as a linked list of multiple layers.
+/// Sometimes a single trigger is not enough to describe the construction
+/// site. That's what causing us to have a chain of "partial" construction
+/// context layers. Some examples:
+/// - A constructor within in an aggregate initializer list within a variable
+///   would have a construction context of the initializer list with
+///   the parent construction context of a variable.
+/// - A constructor for a temporary that needs to be both destroyed
+///   and materialized into an elidable copy constructor would have a
+///   construction context of a CXXBindTemporaryExpr with the parent
+///   construction context of a MaterializeTemproraryExpr.
+/// Not all of these are currently supported.
+/// Layers are created gradually while traversing the AST, and layers that
+/// represent the outmost AST nodes are built first, while the node that
+/// immediately contains the constructor would be built last and capture the
+/// previous layers as its parents. Construction context captures the last layer
+/// (which has links to the previous layers) and classifies the seemingly
+/// arbitrary chain of layers into one of the possible ways of constructing
+/// an object in C++ for user-friendly experience.
+class ConstructionContextLayer {
   const ConstructionContextLayer *Parent = nullptr;
+  ConstructionContextItem Item;
 
-  ConstructionContextLayer(TriggerTy Trigger,
-                          const ConstructionContextLayer *Parent)
-      : Trigger(Trigger), Parent(Parent) {}
+  ConstructionContextLayer(ConstructionContextItem Item,
+                           const ConstructionContextLayer *Parent)
+      : Parent(Parent), Item(Item) {}
 
 public:
   static const ConstructionContextLayer *
-  create(BumpVectorContext &C, TriggerTy Trigger,
+  create(BumpVectorContext &C, const ConstructionContextItem &Item,
          const ConstructionContextLayer *Parent = nullptr);
 
+  const ConstructionContextItem &getItem() const { return Item; }
   const ConstructionContextLayer *getParent() const { return Parent; }
   bool isLast() const { return !Parent; }
 
-  const Stmt *getTriggerStmt() const {
-    return Trigger.dyn_cast<Stmt *>();
-  }
-
-  const CXXCtorInitializer *getTriggerInit() const {
-    return Trigger.dyn_cast<CXXCtorInitializer *>();
-  }
-
-  /// Returns true if these layers are equal as individual layers, even if
-  /// their parents are different.
-  bool isSameLayer(const ConstructionContextLayer *Other) const {
-    assert(Other);
-    return (Trigger == Other->Trigger);
-  }
-
   /// See if Other is a proper initial segment of this construction context
   /// in terms of the parent chain - i.e. a few first parents coincide and
   /// then the other context terminates but our context goes further - i.e.,
@@ -107,11 +242,15 @@
     INITIALIZER_BEGIN = SimpleConstructorInitializerKind,
     INITIALIZER_END = CXX17ElidedCopyConstructorInitializerKind,
     NewAllocatedObjectKind,
-    TemporaryObjectKind,
+    SimpleTemporaryObjectKind,
+    ElidedTemporaryObjectKind,
+    TEMPORARY_BEGIN = SimpleTemporaryObjectKind,
+    TEMPORARY_END = ElidedTemporaryObjectKind,
     SimpleReturnedValueKind,
     CXX17ElidedCopyReturnedValueKind,
     RETURNED_VALUE_BEGIN = SimpleReturnedValueKind,
-    RETURNED_VALUE_END = CXX17ElidedCopyReturnedValueKind
+    RETURNED_VALUE_END = CXX17ElidedCopyReturnedValueKind,
+    ArgumentKind
   };
 
 protected:
@@ -129,6 +268,23 @@
     return new (CC) T(Args...);
   }
 
+  // A sub-routine of createFromLayers() that deals with temporary objects
+  // that need to be materialized. The BTE argument is for the situation when
+  // the object also needs to be bound for destruction.
+  static const ConstructionContext *createMaterializedTemporaryFromLayers(
+      BumpVectorContext &C, const MaterializeTemporaryExpr *MTE,
+      const CXXBindTemporaryExpr *BTE,
+      const ConstructionContextLayer *ParentLayer);
+
+  // A sub-routine of createFromLayers() that deals with temporary objects
+  // that need to be bound for destruction. Automatically finds out if the
+  // object also needs to be materialized and delegates to
+  // createMaterializedTemporaryFromLayers() if necessary.
+  static const ConstructionContext *
+  createBoundTemporaryFromLayers(
+      BumpVectorContext &C, const CXXBindTemporaryExpr *BTE,
+      const ConstructionContextLayer *ParentLayer);
+
 public:
   /// Consume the construction context layer, together with its parent layers,
   /// and wrap it up into a complete construction context. May return null
@@ -305,16 +461,15 @@
   const CXXBindTemporaryExpr *BTE;
   const MaterializeTemporaryExpr *MTE;
 
-  friend class ConstructionContext; // Allows to create<>() itself.
-
+protected:
   explicit TemporaryObjectConstructionContext(
-      const CXXBindTemporaryExpr *BTE, const MaterializeTemporaryExpr *MTE)
-      : ConstructionContext(ConstructionContext::TemporaryObjectKind),
-        BTE(BTE), MTE(MTE) {
+      ConstructionContext::Kind K, const CXXBindTemporaryExpr *BTE,
+      const MaterializeTemporaryExpr *MTE)
+      : ConstructionContext(K), BTE(BTE), MTE(MTE) {
     // Both BTE and MTE can be null here, all combinations possible.
     // Even though for now at least one should be non-null, we simply haven't
-    // implemented this case yet (this would be a temporary in the middle of
-    // nowhere that doesn't have a non-trivial destructor).
+    // implemented the other case yet (this would be a temporary in the middle
+    // of nowhere that doesn't have a non-trivial destructor).
   }
 
 public:
@@ -334,7 +489,67 @@
   }
 
   static bool classof(const ConstructionContext *CC) {
-    return CC->getKind() == TemporaryObjectKind;
+    return CC->getKind() >= TEMPORARY_BEGIN && CC->getKind() <= TEMPORARY_END;
+  }
+};
+
+/// Represents a temporary object that is not constructed for the purpose of
+/// being immediately copied/moved by an elidable copy/move-constructor.
+/// This includes temporary objects "in the middle of nowhere" like T(123) and
+/// lifetime-extended temporaries.
+class SimpleTemporaryObjectConstructionContext
+    : public TemporaryObjectConstructionContext {
+  friend class ConstructionContext; // Allows to create<>() itself.
+
+  explicit SimpleTemporaryObjectConstructionContext(
+      const CXXBindTemporaryExpr *BTE, const MaterializeTemporaryExpr *MTE)
+      : TemporaryObjectConstructionContext(
+            ConstructionContext::SimpleTemporaryObjectKind, BTE, MTE) {}
+
+public:
+  static bool classof(const ConstructionContext *CC) {
+    return CC->getKind() == SimpleTemporaryObjectKind;
+  }
+};
+
+/// Represents a temporary object that is constructed for the sole purpose
+/// of being immediately copied by an elidable copy/move constructor.
+/// For example, T t = T(123); includes a temporary T(123) that is immediately
+/// copied to variable t. In such cases the elidable copy can (but not
+/// necessarily should) be omitted ("elided") accodring to the rules of the
+/// language; the constructor would then construct variable t directly.
+/// This construction context contains information of the elidable constructor
+/// and its respective construction context.
+class ElidedTemporaryObjectConstructionContext
+    : public TemporaryObjectConstructionContext {
+  const CXXConstructExpr *ElidedCE;
+  const ConstructionContext *ElidedCC;
+
+  friend class ConstructionContext; // Allows to create<>() itself.
+
+  explicit ElidedTemporaryObjectConstructionContext(
+      const CXXBindTemporaryExpr *BTE, const MaterializeTemporaryExpr *MTE,
+      const CXXConstructExpr *ElidedCE, const ConstructionContext *ElidedCC)
+      : TemporaryObjectConstructionContext(
+            ConstructionContext::ElidedTemporaryObjectKind, BTE, MTE),
+        ElidedCE(ElidedCE), ElidedCC(ElidedCC) {
+    // Elided constructor and its context should be either both specified
+    // or both unspecified. In the former case, the constructor must be
+    // elidable.
+    assert(ElidedCE && ElidedCE->isElidable() && ElidedCC);
+  }
+
+public:
+  const CXXConstructExpr *getConstructorAfterElision() const {
+    return ElidedCE;
+  }
+
+  const ConstructionContext *getConstructionContextAfterElision() const {
+    return ElidedCC;
+  }
+
+  static bool classof(const ConstructionContext *CC) {
+    return CC->getKind() == ElidedTemporaryObjectKind;
   }
 };
 
@@ -407,6 +622,39 @@
   }
 };
 
+class ArgumentConstructionContext : public ConstructionContext {
+  // The call of which the context is an argument.
+  const Expr *CE;
+
+  // Which argument we're constructing. Note that when numbering between
+  // arguments and parameters is inconsistent (eg., operator calls),
+  // this is the index of the argument, not of the parameter.
+  unsigned Index;
+
+  // Whether the object needs to be destroyed.
+  const CXXBindTemporaryExpr *BTE;
+
+  friend class ConstructionContext; // Allows to create<>() itself.
+
+  explicit ArgumentConstructionContext(const Expr *CE, unsigned Index,
+                                       const CXXBindTemporaryExpr *BTE)
+      : ConstructionContext(ArgumentKind), CE(CE),
+        Index(Index), BTE(BTE) {
+    assert(isa<CallExpr>(CE) || isa<CXXConstructExpr>(CE) ||
+           isa<ObjCMessageExpr>(CE));
+    // BTE is optional.
+  }
+
+public:
+  const Expr *getCallLikeExpr() const { return CE; }
+  unsigned getIndex() const { return Index; }
+  const CXXBindTemporaryExpr *getCXXBindTemporaryExpr() const { return BTE; }
+
+  static bool classof(const ConstructionContext *CC) {
+    return CC->getKind() == ArgumentKind;
+  }
+};
+
 } // end namespace clang
 
 #endif // LLVM_CLANG_ANALYSIS_CONSTRUCTIONCONTEXT_H
diff --git a/linux-x64/clang/include/clang/Analysis/DomainSpecific/CocoaConventions.h b/linux-x64/clang/include/clang/Analysis/DomainSpecific/CocoaConventions.h
index 8b3fcff..9326d1a 100644
--- a/linux-x64/clang/include/clang/Analysis/DomainSpecific/CocoaConventions.h
+++ b/linux-x64/clang/include/clang/Analysis/DomainSpecific/CocoaConventions.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// This file implements cocoa naming convention analysis. 
+// This file implements cocoa naming convention analysis.
 //
 //===----------------------------------------------------------------------===//
 
@@ -20,20 +20,20 @@
 namespace clang {
 class FunctionDecl;
 class QualType;
-  
+
 namespace ento {
 namespace cocoa {
-  
+
   bool isRefType(QualType RetTy, StringRef Prefix,
                  StringRef Name = StringRef());
-    
+
   bool isCocoaObjectRef(QualType T);
 
 }
 
 namespace coreFoundation {
   bool isCFObjectRef(QualType T);
-  
+
   bool followsCreateRule(const FunctionDecl *FD);
 }
 
diff --git a/linux-x64/clang/include/clang/Analysis/DomainSpecific/ObjCNoReturn.h b/linux-x64/clang/include/clang/Analysis/DomainSpecific/ObjCNoReturn.h
index f9e800a..e304d83 100644
--- a/linux-x64/clang/include/clang/Analysis/DomainSpecific/ObjCNoReturn.h
+++ b/linux-x64/clang/include/clang/Analysis/DomainSpecific/ObjCNoReturn.h
@@ -21,7 +21,7 @@
 
 class ASTContext;
 class ObjCMessageExpr;
-  
+
 class ObjCNoReturn {
   /// Cached "raise" selector.
   Selector RaiseSel;
@@ -36,7 +36,7 @@
 
 public:
   ObjCNoReturn(ASTContext &C);
-  
+
   /// Return true if the given message expression is known to never
   /// return.
   bool isImplicitNoReturn(const ObjCMessageExpr *ME);
diff --git a/linux-x64/clang/include/clang/Analysis/ProgramPoint.h b/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
index f7bd1be..25ae93f 100644
--- a/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
+++ b/linux-x64/clang/include/clang/Analysis/ProgramPoint.h
@@ -33,7 +33,7 @@
 class AnalysisDeclContext;
 class FunctionDecl;
 class LocationContext;
-  
+
 /// ProgramPoints can be "tagged" as representing points specific to a given
 /// analysis entity.  Tags are abstract annotations, with an associated
 /// description and potentially other information.
@@ -41,12 +41,12 @@
 public:
   ProgramPointTag(void *tagKind = nullptr) : TagKind(tagKind) {}
   virtual ~ProgramPointTag();
-  virtual StringRef getTagDescription() const = 0;    
+  virtual StringRef getTagDescription() const = 0;
 
 protected:
   /// Used to implement 'isKind' in subclasses.
   const void *getTagKind() { return TagKind; }
-  
+
 private:
   const void *TagKind;
 };
@@ -111,7 +111,7 @@
         assert(getLocationContext() == l);
         assert(getData1() == P);
       }
-        
+
   ProgramPoint(const void *P1,
                const void *P2,
                Kind k,
@@ -135,7 +135,7 @@
                         getLocationContext(), tag);
   }
 
-  /// \brief Convert to the specified ProgramPoint type, asserting that this
+  /// Convert to the specified ProgramPoint type, asserting that this
   /// ProgramPoint is of the desired type.
   template<typename T>
   T castAs() const {
@@ -146,7 +146,7 @@
     return t;
   }
 
-  /// \brief Convert to the specified ProgramPoint type, returning None if this
+  /// Convert to the specified ProgramPoint type, returning None if this
   /// ProgramPoint is not of the desired type.
   template<typename T>
   Optional<T> getAs() const {
@@ -167,7 +167,7 @@
     return (Kind) x;
   }
 
-  /// \brief Is this a program point corresponding to purge/removal of dead
+  /// Is this a program point corresponding to purge/removal of dead
   /// symbols and bindings.
   bool isPurgeKind() {
     Kind K = getKind();
@@ -181,6 +181,10 @@
     return L.getPointer();
   }
 
+  const StackFrameContext *getStackFrame() const {
+    return getLocationContext()->getStackFrame();
+  }
+
   // For use with DenseMap.  This hash is probably slow.
   unsigned getHashValue() const {
     llvm::FoldingSetNodeID ID;
@@ -219,7 +223,7 @@
 public:
   BlockEntrance(const CFGBlock *B, const LocationContext *L,
                 const ProgramPointTag *tag = nullptr)
-    : ProgramPoint(B, BlockEntranceKind, L, tag) {    
+    : ProgramPoint(B, BlockEntranceKind, L, tag) {
     assert(B && "BlockEntrance requires non-null block");
   }
 
@@ -231,7 +235,7 @@
     const CFGBlock *B = getBlock();
     return B->empty() ? Optional<CFGElement>() : B->front();
   }
-  
+
 private:
   friend class ProgramPoint;
   BlockEntrance() = default;
@@ -346,7 +350,7 @@
   LocationCheck(const Stmt *S, const LocationContext *L,
                 ProgramPoint::Kind K, const ProgramPointTag *tag)
     : StmtPoint(S, nullptr, K, L, tag) {}
-    
+
 private:
   friend class ProgramPoint;
   static bool isKind(const ProgramPoint &location) {
@@ -354,13 +358,13 @@
     return k == PreLoadKind || k == PreStoreKind;
   }
 };
-  
+
 class PreLoad : public LocationCheck {
 public:
   PreLoad(const Stmt *S, const LocationContext *L,
           const ProgramPointTag *tag = nullptr)
     : LocationCheck(S, L, PreLoadKind, tag) {}
-  
+
 private:
   friend class ProgramPoint;
   PreLoad() = default;
@@ -374,7 +378,7 @@
   PreStore(const Stmt *S, const LocationContext *L,
            const ProgramPointTag *tag = nullptr)
   : LocationCheck(S, L, PreStoreKind, tag) {}
-  
+
 private:
   friend class ProgramPoint;
   PreStore() = default;
@@ -397,11 +401,11 @@
   }
 };
 
-/// \brief Represents a program point after a store evaluation.
+/// Represents a program point after a store evaluation.
 class PostStore : public PostStmt {
 public:
   /// Construct the post store point.
-  /// \param Loc can be used to store the information about the location 
+  /// \param Loc can be used to store the information about the location
   /// used in the form it was uttered in the code.
   PostStore(const Stmt *S, const LocationContext *L, const void *Loc,
             const ProgramPointTag *tag = nullptr)
@@ -410,7 +414,7 @@
     setData2(Loc);
   }
 
-  /// \brief Returns the information about the location used in the store,
+  /// Returns the information about the location used in the store,
   /// how it was uttered in the code.
   const void *getLocationValue() const {
     return getData2();
@@ -475,7 +479,7 @@
   BlockEdge(const CFGBlock *B1, const CFGBlock *B2, const LocationContext *L)
     : ProgramPoint(B1, B2, BlockEdgeKind, L) {
     assert(B1 && "BlockEdge: source block must be non-null");
-    assert(B2 && "BlockEdge: destination block must be non-null");    
+    assert(B2 && "BlockEdge: destination block must be non-null");
   }
 
   const CFGBlock *getSrc() const {
@@ -496,7 +500,7 @@
 
 class PostInitializer : public ProgramPoint {
 public:
-  /// \brief Construct a PostInitializer point that represents a location after
+  /// Construct a PostInitializer point that represents a location after
   ///   CXXCtorInitializer expression evaluation.
   ///
   /// \param I The initializer.
@@ -510,7 +514,7 @@
     return static_cast<const CXXCtorInitializer *>(getData1());
   }
 
-  /// \brief Returns the location of the field.
+  /// Returns the location of the field.
   const void *getLocationValue() const {
     return getData2();
   }
@@ -599,7 +603,7 @@
 /// CallEnter uses the caller's location context.
 class CallEnter : public ProgramPoint {
 public:
-  CallEnter(const Stmt *stmt, const StackFrameContext *calleeCtx, 
+  CallEnter(const Stmt *stmt, const StackFrameContext *calleeCtx,
             const LocationContext *callerCtx)
     : ProgramPoint(stmt, calleeCtx, CallEnterKind, callerCtx, nullptr) {}
 
@@ -745,7 +749,7 @@
 }
 
 };
-  
+
 template <>
 struct isPodLike<clang::ProgramPoint> { static const bool value = true; };
 
diff --git a/linux-x64/clang/include/clang/Analysis/Support/BumpVector.h b/linux-x64/clang/include/clang/Analysis/Support/BumpVector.h
index 5940520..00a7417 100644
--- a/linux-x64/clang/include/clang/Analysis/Support/BumpVector.h
+++ b/linux-x64/clang/include/clang/Analysis/Support/BumpVector.h
@@ -29,7 +29,7 @@
 #include <type_traits>
 
 namespace clang {
-  
+
 class BumpVectorContext {
   llvm::PointerIntPair<llvm::BumpPtrAllocator*, 1> Alloc;
 
@@ -47,15 +47,15 @@
   /// BumpPtrAllocator.  This BumpPtrAllocator is not destroyed when the
   /// BumpVectorContext object is destroyed.
   BumpVectorContext(llvm::BumpPtrAllocator &A) : Alloc(&A, 0) {}
-  
+
   ~BumpVectorContext() {
     if (Alloc.getInt())
       delete Alloc.getPointer();
   }
-  
+
   llvm::BumpPtrAllocator &getAllocator() { return *Alloc.getPointer(); }
 };
-  
+
 template<typename T>
 class BumpVector {
   T *Begin = nullptr;
@@ -67,34 +67,34 @@
   explicit BumpVector(BumpVectorContext &C, unsigned N) {
     reserve(C, N);
   }
-  
+
   ~BumpVector() {
     if (std::is_class<T>::value) {
       // Destroy the constructed elements in the vector.
       destroy_range(Begin, End);
     }
   }
-  
+
   using size_type = size_t;
   using difference_type = ptrdiff_t;
   using value_type = T;
   using iterator = T *;
   using const_iterator = const T *;
-  
+
   using const_reverse_iterator = std::reverse_iterator<const_iterator>;
   using reverse_iterator = std::reverse_iterator<iterator>;
-  
+
   using reference = T &;
   using const_reference = const T &;
   using pointer = T *;
   using const_pointer = const T *;
-  
+
   // forward iterator creation methods.
   iterator begin() { return Begin; }
   const_iterator begin() const { return Begin; }
   iterator end() { return End; }
   const_iterator end() const { return End; }
-  
+
   // reverse iterator creation methods.
   reverse_iterator rbegin() { return reverse_iterator(end()); }
   const_reverse_iterator rbegin() const{ return const_reverse_iterator(end()); }
@@ -102,7 +102,7 @@
   const_reverse_iterator rend() const {
     return const_reverse_iterator(begin());
   }
-    
+
   bool empty() const { return Begin == End; }
   size_type size() const { return End-Begin; }
 
@@ -114,49 +114,49 @@
     assert(Begin + idx < End);
     return Begin[idx];
   }
-  
+
   reference front() {
     return begin()[0];
   }
   const_reference front() const {
     return begin()[0];
   }
-  
+
   reference back() {
     return end()[-1];
   }
   const_reference back() const {
     return end()[-1];
   }
-  
+
   void pop_back() {
     --End;
     End->~T();
   }
-  
+
   T pop_back_val() {
     T Result = back();
     pop_back();
     return Result;
   }
-  
+
   void clear() {
     if (std::is_class<T>::value) {
       destroy_range(Begin, End);
     }
     End = Begin;
   }
-  
+
   /// data - Return a pointer to the vector's buffer, even if empty().
   pointer data() {
     return pointer(Begin);
   }
-  
+
   /// data - Return a pointer to the vector's buffer, even if empty().
   const_pointer data() const {
     return const_pointer(Begin);
   }
-  
+
   void push_back(const_reference Elt, BumpVectorContext &C) {
     if (End < Capacity) {
     Retry:
@@ -165,7 +165,7 @@
       return;
     }
     grow(C);
-    goto Retry;    
+    goto Retry;
   }
 
   /// insert - Insert some number of copies of element into a position. Return
@@ -193,18 +193,18 @@
 
   /// capacity - Return the total number of elements in the currently allocated
   /// buffer.
-  size_t capacity() const { return Capacity - Begin; }  
-    
+  size_t capacity() const { return Capacity - Begin; }
+
 private:
   /// grow - double the size of the allocated memory, guaranteeing space for at
   /// least one more element or MinSize if specified.
   void grow(BumpVectorContext &C, size_type MinSize = 1);
-  
+
   void construct_range(T *S, T *E, const T &Elt) {
     for (; S != E; ++S)
       new (S) T(Elt);
   }
-  
+
   void destroy_range(T *S, T *E) {
     while (S != E) {
       --E;
@@ -220,7 +220,7 @@
     }
   }
 };
-  
+
 // Define this out-of-line to dissuade the C++ compiler from inlining it.
 template <typename T>
 void BumpVector<T>::grow(BumpVectorContext &C, size_t MinSize) {
@@ -232,7 +232,7 @@
 
   // Allocate the memory from the BumpPtrAllocator.
   T *NewElts = C.getAllocator().template Allocate<T>(NewCapacity);
-  
+
   // Copy the elements over.
   if (Begin != End) {
     if (std::is_class<T>::value) {
diff --git a/linux-x64/clang/include/clang/Basic/ABI.h b/linux-x64/clang/include/clang/Basic/ABI.h
index 75e9faf..dc0e49c 100644
--- a/linux-x64/clang/include/clang/Basic/ABI.h
+++ b/linux-x64/clang/include/clang/Basic/ABI.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Enums/classes describing ABI related information about constructors,
+/// Enums/classes describing ABI related information about constructors,
 /// destructors and thunks.
 ///
 //===----------------------------------------------------------------------===//
@@ -21,7 +21,7 @@
 
 namespace clang {
 
-/// \brief C++ constructor types.
+/// C++ constructor types.
 enum CXXCtorType {
   Ctor_Complete,       ///< Complete object ctor
   Ctor_Base,           ///< Base object ctor
@@ -30,7 +30,7 @@
   Ctor_DefaultClosure, ///< Default closure variant of a ctor
 };
 
-/// \brief C++ destructor types.
+/// C++ destructor types.
 enum CXXDtorType {
     Dtor_Deleting, ///< Deleting dtor
     Dtor_Complete, ///< Complete object dtor
@@ -38,29 +38,29 @@
     Dtor_Comdat    ///< The COMDAT used for dtors
 };
 
-/// \brief A return adjustment.
+/// A return adjustment.
 struct ReturnAdjustment {
-  /// \brief The non-virtual adjustment from the derived object to its
+  /// The non-virtual adjustment from the derived object to its
   /// nearest virtual base.
   int64_t NonVirtual;
 
-  /// \brief Holds the ABI-specific information about the virtual return
+  /// Holds the ABI-specific information about the virtual return
   /// adjustment, if needed.
   union VirtualAdjustment {
     // Itanium ABI
     struct {
-      /// \brief The offset (in bytes), relative to the address point
+      /// The offset (in bytes), relative to the address point
       /// of the virtual base class offset.
       int64_t VBaseOffsetOffset;
     } Itanium;
 
     // Microsoft ABI
     struct {
-      /// \brief The offset (in bytes) of the vbptr, relative to the beginning
+      /// The offset (in bytes) of the vbptr, relative to the beginning
       /// of the derived class.
       uint32_t VBPtrOffset;
 
-      /// \brief Index of the virtual base in the vbtable.
+      /// Index of the virtual base in the vbtable.
       uint32_t VBIndex;
     } Microsoft;
 
@@ -81,12 +81,12 @@
       return memcmp(this, &RHS, sizeof(RHS)) < 0;
     }
   } Virtual;
-  
+
   ReturnAdjustment() : NonVirtual(0) {}
-  
+
   bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); }
 
-  friend bool operator==(const ReturnAdjustment &LHS, 
+  friend bool operator==(const ReturnAdjustment &LHS,
                          const ReturnAdjustment &RHS) {
     return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual);
   }
@@ -103,32 +103,32 @@
     return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual);
   }
 };
-  
-/// \brief A \c this pointer adjustment.
+
+/// A \c this pointer adjustment.
 struct ThisAdjustment {
-  /// \brief The non-virtual adjustment from the derived object to its
+  /// The non-virtual adjustment from the derived object to its
   /// nearest virtual base.
   int64_t NonVirtual;
 
-  /// \brief Holds the ABI-specific information about the virtual this
+  /// Holds the ABI-specific information about the virtual this
   /// adjustment, if needed.
   union VirtualAdjustment {
     // Itanium ABI
     struct {
-      /// \brief The offset (in bytes), relative to the address point,
+      /// The offset (in bytes), relative to the address point,
       /// of the virtual call offset.
       int64_t VCallOffsetOffset;
     } Itanium;
 
     struct {
-      /// \brief The offset of the vtordisp (in bytes), relative to the ECX.
+      /// The offset of the vtordisp (in bytes), relative to the ECX.
       int32_t VtordispOffset;
 
-      /// \brief The offset of the vbptr of the derived class (in bytes),
+      /// The offset of the vbptr of the derived class (in bytes),
       /// relative to the ECX after vtordisp adjustment.
       int32_t VBPtrOffset;
 
-      /// \brief The offset (in bytes) of the vbase offset in the vbtable.
+      /// The offset (in bytes) of the vbase offset in the vbtable.
       int32_t VBOffsetOffset;
     } Microsoft;
 
@@ -149,12 +149,12 @@
       return memcmp(this, &RHS, sizeof(RHS)) < 0;
     }
   } Virtual;
-  
+
   ThisAdjustment() : NonVirtual(0) { }
 
   bool isEmpty() const { return !NonVirtual && Virtual.isEmpty(); }
 
-  friend bool operator==(const ThisAdjustment &LHS, 
+  friend bool operator==(const ThisAdjustment &LHS,
                          const ThisAdjustment &RHS) {
     return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Equals(RHS.Virtual);
   }
@@ -162,28 +162,28 @@
   friend bool operator!=(const ThisAdjustment &LHS, const ThisAdjustment &RHS) {
     return !(LHS == RHS);
   }
-  
+
   friend bool operator<(const ThisAdjustment &LHS,
                         const ThisAdjustment &RHS) {
     if (LHS.NonVirtual < RHS.NonVirtual)
       return true;
-    
+
     return LHS.NonVirtual == RHS.NonVirtual && LHS.Virtual.Less(RHS.Virtual);
   }
 };
 
 class CXXMethodDecl;
 
-/// \brief The \c this pointer adjustment as well as an optional return
+/// The \c this pointer adjustment as well as an optional return
 /// adjustment for a thunk.
 struct ThunkInfo {
-  /// \brief The \c this pointer adjustment.
+  /// The \c this pointer adjustment.
   ThisAdjustment This;
-    
-  /// \brief The return adjustment.
+
+  /// The return adjustment.
   ReturnAdjustment Return;
 
-  /// \brief Holds a pointer to the overridden method this thunk is for,
+  /// Holds a pointer to the overridden method this thunk is for,
   /// if needed by the ABI to distinguish different thunks with equal
   /// adjustments. Otherwise, null.
   /// CAUTION: In the unlikely event you need to sort ThunkInfos, consider using
@@ -204,7 +204,7 @@
   bool isEmpty() const {
     return This.isEmpty() && Return.isEmpty() && Method == nullptr;
   }
-};  
+};
 
 } // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/Basic/AddressSpaces.h b/linux-x64/clang/include/clang/Basic/AddressSpaces.h
index 286b033..217fbd7 100644
--- a/linux-x64/clang/include/clang/Basic/AddressSpaces.h
+++ b/linux-x64/clang/include/clang/Basic/AddressSpaces.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Provides definitions for the various language-specific address
+/// Provides definitions for the various language-specific address
 /// spaces.
 //
 //===----------------------------------------------------------------------===//
@@ -20,7 +20,7 @@
 
 namespace clang {
 
-/// \brief Defines the address space values used by the address space qualifier
+/// Defines the address space values used by the address space qualifier
 /// of QualType.
 ///
 enum class LangAS : unsigned {
diff --git a/linux-x64/clang/include/clang/Basic/AlignedAllocation.h b/linux-x64/clang/include/clang/Basic/AlignedAllocation.h
index b349694..9751f41 100644
--- a/linux-x64/clang/include/clang/Basic/AlignedAllocation.h
+++ b/linux-x64/clang/include/clang/Basic/AlignedAllocation.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines a function that returns the minimum OS versions supporting
+/// Defines a function that returns the minimum OS versions supporting
 /// C++17's aligned allocation functions.
 ///
 //===----------------------------------------------------------------------===//
@@ -16,24 +16,24 @@
 #ifndef LLVM_CLANG_BASIC_ALIGNED_ALLOCATION_H
 #define LLVM_CLANG_BASIC_ALIGNED_ALLOCATION_H
 
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/VersionTuple.h"
 
 namespace clang {
 
-inline VersionTuple alignedAllocMinVersion(llvm::Triple::OSType OS) {
+inline llvm::VersionTuple alignedAllocMinVersion(llvm::Triple::OSType OS) {
   switch (OS) {
   default:
     break;
   case llvm::Triple::Darwin:
   case llvm::Triple::MacOSX: // Earliest supporting version is 10.13.
-    return VersionTuple(10U, 13U);
+    return llvm::VersionTuple(10U, 13U);
   case llvm::Triple::IOS:
   case llvm::Triple::TvOS: // Earliest supporting version is 11.0.0.
-    return VersionTuple(11U);
+    return llvm::VersionTuple(11U);
   case llvm::Triple::WatchOS: // Earliest supporting version is 4.0.0.
-    return VersionTuple(4U);
+    return llvm::VersionTuple(4U);
   }
 
   llvm_unreachable("Unexpected OS");
diff --git a/linux-x64/clang/include/clang/Basic/AllDiagnostics.h b/linux-x64/clang/include/clang/Basic/AllDiagnostics.h
index 1c83e2d..afec2d7 100644
--- a/linux-x64/clang/include/clang/Basic/AllDiagnostics.h
+++ b/linux-x64/clang/include/clang/Basic/AllDiagnostics.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Includes all the separate Diagnostic headers & some related helpers.
+/// Includes all the separate Diagnostic headers & some related helpers.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -34,9 +34,9 @@
 public:
   enum { Size = SizeOfStr };
 };
-} // end namespace clang 
+} // end namespace clang
 
 #define STR_SIZE(str, fieldTy) clang::StringSizerHelper<sizeof(str)-1, \
-                                                        fieldTy>::Size 
+                                                        fieldTy>::Size
 
 #endif
diff --git a/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc b/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
index c7d2d1f..b0b878b 100644
--- a/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
+++ b/linux-x64/clang/include/clang/Basic/AttrHasAttributeImpl.inc
@@ -70,6 +70,8 @@
     .Case("cf_returns_not_retained", 1)
     .Case("cf_returns_retained", 1)
     .Case("cf_unknown_transfer", 1)
+    .Case("cpu_dispatch", 1)
+    .Case("cpu_specific", 1)
     .Case("constant", 1)
     .Case("cudart_builtin", 1)
     .Case("device", 1)
@@ -126,6 +128,7 @@
     .Case("intel_ocl_bicc", 1)
     .Case("internal_linkage", 1)
     .Case("lto_visibility_public", 1)
+    .Case("lifetimebound", 1)
     .Case("lock_returned", 1)
     .Case("lockable", 1)
     .Case("locks_excluded", 1)
@@ -135,6 +138,7 @@
     .Case("may_alias", 1)
     .Case("micromips", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
     .Case("minsize", 1)
+    .Case("min_vector_width", 1)
     .Case("mips16", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
     .Case("interrupt", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel) ? 1 : 0)
     .Case("long_call", true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el) ? 1 : 0)
@@ -181,6 +185,7 @@
     .Case("no_sanitize_thread", 1)
     .Case("no_sanitize_memory", 1)
     .Case("no_split_stack", 1)
+    .Case("no_stack_protector", 1)
     .Case("no_thread_safety_analysis", 1)
     .Case("nothrow", 1)
     .Case("nonnull", 1)
@@ -230,6 +235,7 @@
     .Case("pt_guarded_by", 1)
     .Case("pt_guarded_var", 1)
     .Case("pure", 1)
+    .Case("interrupt", true && (T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64) ? 1 : 0)
     .Case("regcall", 1)
     .Case("regparm", 1)
     .Case("release_capability", 1)
@@ -329,6 +335,7 @@
     .Case("__host__", 1)
     .Case("__launch_bounds__", 1)
     .Case("__shared__", 1)
+    .Case("code_seg", 1)
     .Case("dllexport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
     .Case("dllimport", true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (T.getOS() == llvm::Triple::Win32) ? 1 : 0)
     .Case("deprecated", 1)
@@ -357,12 +364,28 @@
     .Case("loop", 1)
     .Case("unroll", 1)
     .Case("nounroll", 1)
+    .Case("unroll_and_jam", 1)
+    .Case("nounroll_and_jam", 1)
     .Case("loop", 1)
     .Case("unroll", 1)
     .Case("nounroll", 1)
+    .Case("unroll_and_jam", 1)
+    .Case("nounroll_and_jam", 1)
     .Case("loop", 1)
     .Case("unroll", 1)
     .Case("nounroll", 1)
+    .Case("unroll_and_jam", 1)
+    .Case("nounroll_and_jam", 1)
+    .Case("loop", 1)
+    .Case("unroll", 1)
+    .Case("nounroll", 1)
+    .Case("unroll_and_jam", 1)
+    .Case("nounroll_and_jam", 1)
+    .Case("loop", 1)
+    .Case("unroll", 1)
+    .Case("nounroll", 1)
+    .Case("unroll_and_jam", 1)
+    .Case("nounroll_and_jam", 1)
     .Case("declare simd", 1)
     .Case("declare target", 1)
     .Default(0);
@@ -409,6 +432,8 @@
     .Case("cf_returns_not_retained", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("cf_returns_retained", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("cf_unknown_transfer", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("cpu_dispatch", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("cpu_specific", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("callable_when", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("capability", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("shared_capability", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -430,7 +455,9 @@
     .Case("intel_ocl_bicc", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("internal_linkage", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("lto_visibility_public", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("lifetimebound", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("minsize", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("min_vector_width", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("ns_consumed", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("ns_consumes_self", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("ns_returns_autoreleased", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -442,6 +469,7 @@
     .Case("noescape", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("no_sanitize", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("no_sanitize_memory", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("no_stack_protector", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("no_thread_safety_analysis", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("not_tail_called", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("objc_boxable", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -616,6 +644,7 @@
     .Case("packed", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("pcs", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("pure", LangOpts.CPlusPlus11 ? 1 : 0)
+    .Case("interrupt", true && (T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64) && LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("regcall", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("regparm", LangOpts.CPlusPlus11 ? 1 : 0)
     .Case("malloc", LangOpts.CPlusPlus11 ? 1 : 0)
@@ -670,6 +699,8 @@
     .Case("cf_returns_not_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("cf_returns_retained", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("cf_unknown_transfer", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("cpu_dispatch", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("cpu_specific", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("convergent", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("disable_tail_calls", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("enum_extensibility", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
@@ -681,6 +712,7 @@
     .Case("internal_linkage", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("lto_visibility_public", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("minsize", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("min_vector_width", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("ns_consumed", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("ns_consumes_self", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("ns_returns_autoreleased", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
@@ -692,6 +724,7 @@
     .Case("noescape", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("no_sanitize", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("no_sanitize_memory", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
+    .Case("no_stack_protector", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("no_thread_safety_analysis", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("not_tail_called", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
     .Case("objc_boxable", LangOpts.DoubleSquareBracketAttributes ? 1 : 0)
diff --git a/linux-x64/clang/include/clang/Basic/AttrKinds.h b/linux-x64/clang/include/clang/Basic/AttrKinds.h
index 8f7394f..d82dbb0 100644
--- a/linux-x64/clang/include/clang/Basic/AttrKinds.h
+++ b/linux-x64/clang/include/clang/Basic/AttrKinds.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::attr::Kind enum.
+/// Defines the clang::attr::Kind enum.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -19,7 +19,7 @@
 
 namespace attr {
 
-// \brief A list of all the recognized kinds of attributes.
+// A list of all the recognized kinds of attributes.
 enum Kind {
 #define ATTR(X) X,
 #define ATTR_RANGE(CLASS, FIRST_NAME, LAST_NAME) \
diff --git a/linux-x64/clang/include/clang/Basic/AttrList.inc b/linux-x64/clang/include/clang/Basic/AttrList.inc
index bf06294..9e24b4d 100644
--- a/linux-x64/clang/include/clang/Basic/AttrList.inc
+++ b/linux-x64/clang/include/clang/Basic/AttrList.inc
@@ -72,6 +72,8 @@
 INHERITABLE_ATTR(CFReturnsNotRetained)
 INHERITABLE_ATTR(CFReturnsRetained)
 INHERITABLE_ATTR(CFUnknownTransfer)
+INHERITABLE_ATTR(CPUDispatch)
+INHERITABLE_ATTR(CPUSpecific)
 INHERITABLE_ATTR(CUDAConstant)
 INHERITABLE_ATTR(CUDADevice)
 INHERITABLE_ATTR(CUDAGlobal)
@@ -84,6 +86,7 @@
 INHERITABLE_ATTR(Capability)
 INHERITABLE_ATTR(CapturedRecord)
 INHERITABLE_ATTR(Cleanup)
+INHERITABLE_ATTR(CodeSeg)
 INHERITABLE_ATTR(Cold)
 INHERITABLE_ATTR(Common)
 INHERITABLE_ATTR(Const)
@@ -121,6 +124,7 @@
 INHERITABLE_ATTR(InternalLinkage)
 INHERITABLE_ATTR(LTOVisibilityPublic)
 INHERITABLE_ATTR(LayoutVersion)
+INHERITABLE_ATTR(LifetimeBound)
 INHERITABLE_ATTR(LockReturned)
 INHERITABLE_ATTR(LocksExcluded)
 INHERITABLE_ATTR(MSABI)
@@ -133,6 +137,7 @@
 INHERITABLE_ATTR(MayAlias)
 INHERITABLE_ATTR(MicroMips)
 INHERITABLE_ATTR(MinSize)
+INHERITABLE_ATTR(MinVectorWidth)
 INHERITABLE_ATTR(Mips16)
 INHERITABLE_ATTR(MipsInterrupt)
 INHERITABLE_ATTR(MipsLongCall)
@@ -153,6 +158,7 @@
 INHERITABLE_ATTR(NoReturn)
 INHERITABLE_ATTR(NoSanitize)
 INHERITABLE_ATTR(NoSplitStack)
+INHERITABLE_ATTR(NoStackProtector)
 INHERITABLE_ATTR(NoThreadSafetyAnalysis)
 INHERITABLE_ATTR(NoThrow)
 INHERITABLE_ATTR(NotTailCalled)
@@ -191,6 +197,7 @@
 INHERITABLE_ATTR(PtGuardedBy)
 INHERITABLE_ATTR(PtGuardedVar)
 INHERITABLE_ATTR(Pure)
+INHERITABLE_ATTR(RISCVInterrupt)
 INHERITABLE_ATTR(RegCall)
 INHERITABLE_ATTR(ReleaseCapability)
 INHERITABLE_ATTR(ReqdWorkGroupSize)
diff --git a/linux-x64/clang/include/clang/Basic/AttrSubjectMatchRules.h b/linux-x64/clang/include/clang/Basic/AttrSubjectMatchRules.h
index 4c88adf..81aa634 100644
--- a/linux-x64/clang/include/clang/Basic/AttrSubjectMatchRules.h
+++ b/linux-x64/clang/include/clang/Basic/AttrSubjectMatchRules.h
@@ -16,7 +16,7 @@
 namespace clang {
 namespace attr {
 
-/// \brief A list of all the recognized kinds of attributes.
+/// A list of all the recognized kinds of attributes.
 enum SubjectMatchRule {
 #define ATTR_MATCH_RULE(X, Spelling, IsAbstract) X,
 #include "clang/Basic/AttrSubMatchRulesList.inc"
diff --git a/linux-x64/clang/include/clang/Basic/Attributes.h b/linux-x64/clang/include/clang/Basic/Attributes.h
index c651aba..3152453 100644
--- a/linux-x64/clang/include/clang/Basic/Attributes.h
+++ b/linux-x64/clang/include/clang/Basic/Attributes.h
@@ -32,7 +32,7 @@
   Pragma
 };
 
-/// \brief Return the version number associated with the attribute if we
+/// Return the version number associated with the attribute if we
 /// recognize and implement the attribute specified by the given information.
 int hasAttribute(AttrSyntax Syntax, const IdentifierInfo *Scope,
                  const IdentifierInfo *Attr, const TargetInfo &Target,
diff --git a/linux-x64/clang/include/clang/Basic/BitmaskEnum.h b/linux-x64/clang/include/clang/Basic/BitmaskEnum.h
new file mode 100644
index 0000000..12ff3cf
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/BitmaskEnum.h
@@ -0,0 +1,25 @@
+//===--- BitmaskEnum.h - wrapper of LLVM's bitmask enum facility-*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Provides LLVM's BitmaskEnum facility to enumeration types declared in
+/// namespace clang.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_BITMASKENUM_H
+#define LLVM_CLANG_BASIC_BITMASKENUM_H
+
+#include "llvm/ADT/BitmaskEnum.h"
+
+namespace clang {
+  LLVM_ENABLE_BITMASK_ENUMS_IN_NAMESPACE();
+}
+
+#endif
diff --git a/linux-x64/clang/include/clang/Basic/Builtins.def b/linux-x64/clang/include/clang/Basic/Builtins.def
index 36b72ba..2d69bbf 100644
--- a/linux-x64/clang/include/clang/Basic/Builtins.def
+++ b/linux-x64/clang/include/clang/Basic/Builtins.def
@@ -89,9 +89,10 @@
 //  S:N: -> similar to the s:N: attribute, but the function is like vscanf
 //          in that it accepts its arguments as a va_list rather than
 //          through an ellipsis
-//  e -> const, but only when -fmath-errno=0
+//  e -> const, but only when -fno-math-errno
 //  j -> returns_twice (like setjmp)
 //  u -> arguments are not evaluated for their side-effects
+//  V:N: -> requires vectors of at least N bits to be legal
 //  FIXME: gcc has nonnull
 
 #if defined(BUILTIN) && !defined(LIBBUILTIN)
@@ -137,14 +138,14 @@
 BUILTIN(__builtin_modf , "ddd*"  , "Fn")
 BUILTIN(__builtin_modff, "fff*"  , "Fn")
 BUILTIN(__builtin_modfl, "LdLdLd*", "Fn")
-BUILTIN(__builtin_nan,  "dcC*" , "ncF")
-BUILTIN(__builtin_nanf, "fcC*" , "ncF")
-BUILTIN(__builtin_nanl, "LdcC*", "ncF")
-BUILTIN(__builtin_nanf128, "LLdcC*", "ncF")
-BUILTIN(__builtin_nans,  "dcC*" , "ncF")
-BUILTIN(__builtin_nansf, "fcC*" , "ncF")
-BUILTIN(__builtin_nansl, "LdcC*", "ncF")
-BUILTIN(__builtin_nansf128, "LLdcC*", "ncF")
+BUILTIN(__builtin_nan,  "dcC*" , "FnU")
+BUILTIN(__builtin_nanf, "fcC*" , "FnU")
+BUILTIN(__builtin_nanl, "LdcC*", "FnU")
+BUILTIN(__builtin_nanf128, "LLdcC*", "FnU")
+BUILTIN(__builtin_nans,  "dcC*" , "FnU")
+BUILTIN(__builtin_nansf, "fcC*" , "FnU")
+BUILTIN(__builtin_nansl, "LdcC*", "FnU")
+BUILTIN(__builtin_nansf128, "LLdcC*", "FnU")
 BUILTIN(__builtin_powi , "ddi"  , "Fnc")
 BUILTIN(__builtin_powif, "ffi"  , "Fnc")
 BUILTIN(__builtin_powil, "LdLdi", "Fnc")
@@ -412,6 +413,9 @@
 BUILTIN(__builtin_popcount  , "iUi"  , "nc")
 BUILTIN(__builtin_popcountl , "iULi" , "nc")
 BUILTIN(__builtin_popcountll, "iULLi", "nc")
+BUILTIN(__builtin_clrsb  , "ii"  , "nc")
+BUILTIN(__builtin_clrsbl , "iLi" , "nc")
+BUILTIN(__builtin_clrsbll, "iLLi", "nc")
 
 // FIXME: These type signatures are not correct for targets with int != 32-bits
 // or with ULL != 64-bits.
@@ -470,6 +474,8 @@
 BUILTIN(__builtin_wcsncmp, "iwC*wC*z", "nF")
 BUILTIN(__builtin_wmemchr, "w*wC*wz", "nF")
 BUILTIN(__builtin_wmemcmp, "iwC*wC*z", "nF")
+BUILTIN(__builtin_wmemcpy, "w*w*wC*z", "nF")
+BUILTIN(__builtin_wmemmove, "w*w*wC*z", "nF")
 BUILTIN(__builtin_return_address, "v*IUi", "n")
 BUILTIN(__builtin_extract_return_addr, "v*v*", "n")
 BUILTIN(__builtin_frame_address, "v*IUi", "n")
@@ -721,6 +727,10 @@
 ATOMIC_BUILTIN(__opencl_atomic_fetch_min, "v.", "t")
 ATOMIC_BUILTIN(__opencl_atomic_fetch_max, "v.", "t")
 
+// GCC does not support these, they are a Clang extension.
+ATOMIC_BUILTIN(__atomic_fetch_min, "v.", "t")
+ATOMIC_BUILTIN(__atomic_fetch_max, "v.", "t")
+
 #undef ATOMIC_BUILTIN
 
 // Non-overloaded atomic builtins.
@@ -740,6 +750,14 @@
 LANGBUILTIN(_alloca,          "v*z", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__annotation,     "wC*.","n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__assume,         "vb",  "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittest,                "UcNiC*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandcomplement,   "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandreset,        "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandset,          "UcNi*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittest64,              "UcWiC*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandcomplement64, "UcWi*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandreset64,      "UcWi*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_bittestandset64,        "UcWi*Wi", "n", ALL_MS_LANGUAGES)
 LIBBUILTIN(_byteswap_ushort, "UsUs",     "fnc", "stdlib.h", ALL_MS_LANGUAGES)
 LIBBUILTIN(_byteswap_ulong,  "UNiUNi",   "fnc", "stdlib.h", ALL_MS_LANGUAGES)
 LIBBUILTIN(_byteswap_uint64, "ULLiULLi", "fnc", "stdlib.h", ALL_MS_LANGUAGES)
@@ -779,7 +797,16 @@
 LANGBUILTIN(_InterlockedXor8,  "ccD*c",       "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_InterlockedXor16, "ssD*s",       "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(_InterlockedXor,   "NiNiD*Ni",    "n", ALL_MS_LANGUAGES)
-LANGBUILTIN(_interlockedbittestandset, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset,     "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset64,   "UcWiD*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_acq, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_nf,  "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandreset_rel, "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset,       "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset64,     "UcWiD*Wi", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_acq,   "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_nf,    "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(_interlockedbittestandset_rel,   "UcNiD*Ni", "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__noop,           "i.",  "n", ALL_MS_LANGUAGES)
 LANGBUILTIN(__popcnt16, "UsUs",     "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__popcnt,   "UiUi",     "nc", ALL_MS_LANGUAGES)
@@ -813,6 +840,13 @@
 LIBBUILTIN(_Exit, "vi",           "fr",    "stdlib.h", ALL_LANGUAGES)
 LIBBUILTIN(malloc, "v*z",         "f",     "stdlib.h", ALL_LANGUAGES)
 LIBBUILTIN(realloc, "v*v*z",      "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtod, "dcC*c**",     "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtof, "fcC*c**",     "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtold, "LdcC*c**",   "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtol, "LicC*c**i",   "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoll, "LLicC*c**i", "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoul, "ULicC*c**i", "f",     "stdlib.h", ALL_LANGUAGES)
+LIBBUILTIN(strtoull, "ULLicC*c**i", "f",   "stdlib.h", ALL_LANGUAGES)
 // C99 string.h
 LIBBUILTIN(memcpy, "v*v*vC*z",    "f",     "string.h", ALL_LANGUAGES)
 LIBBUILTIN(memcmp, "ivC*vC*z",    "f",     "string.h", ALL_LANGUAGES)
@@ -836,6 +870,7 @@
 LIBBUILTIN(strerror, "c*i",       "f",     "string.h", ALL_LANGUAGES)
 LIBBUILTIN(strlen, "zcC*",        "f",     "string.h", ALL_LANGUAGES)
 // C99 stdio.h
+// FIXME: This list is incomplete.
 LIBBUILTIN(printf, "icC*.",       "fp:0:", "stdio.h", ALL_LANGUAGES)
 LIBBUILTIN(fprintf, "iP*cC*.",    "fp:1:", "stdio.h", ALL_LANGUAGES)
 LIBBUILTIN(snprintf, "ic*zcC*.",  "fp:2:", "stdio.h", ALL_LANGUAGES)
@@ -850,6 +885,10 @@
 LIBBUILTIN(vscanf, "icC*Ra",      "fS:0:", "stdio.h", ALL_LANGUAGES)
 LIBBUILTIN(vfscanf, "iP*RcC*Ra",  "fS:1:", "stdio.h", ALL_LANGUAGES)
 LIBBUILTIN(vsscanf, "icC*RcC*Ra", "fS:1:", "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fopen, "P*cC*cC*",     "f",     "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fread, "zv*zzP*",      "f",     "stdio.h", ALL_LANGUAGES)
+LIBBUILTIN(fwrite, "zvC*zzP*",    "f",     "stdio.h", ALL_LANGUAGES)
+
 // C99 ctype.h
 LIBBUILTIN(isalnum, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
 LIBBUILTIN(isalpha, "ii", "fnU", "ctype.h", ALL_LANGUAGES)
@@ -874,6 +913,8 @@
 LIBBUILTIN(wcsncmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES)
 LIBBUILTIN(wmemchr, "w*wC*wz",  "f", "wchar.h", ALL_LANGUAGES)
 LIBBUILTIN(wmemcmp, "iwC*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemcpy, "w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES)
+LIBBUILTIN(wmemmove,"w*w*wC*z", "f", "wchar.h", ALL_LANGUAGES)
 
 // C99
 // In some systems setjmp is a macro that expands to _setjmp. We undefine
@@ -922,7 +963,7 @@
 LIBBUILTIN(strlcat, "zc*cC*z",    "f",     "string.h", ALL_GNU_LANGUAGES)
 //   id objc_msgSend(id, SEL, ...)
 LIBBUILTIN(objc_msgSend, "GGH.",   "f",     "objc/message.h", OBJC_LANG)
-// long double objc_msgSend_fpret(id self, SEL op, ...) 
+// long double objc_msgSend_fpret(id self, SEL op, ...)
 LIBBUILTIN(objc_msgSend_fpret, "LdGH.", "f", "objc/message.h", OBJC_LANG)
 // _Complex long double objc_msgSend_fp2ret(id self, SEL op, ...)
 LIBBUILTIN(objc_msgSend_fp2ret, "XLdGH.", "f", "objc/message.h", OBJC_LANG)
@@ -1374,9 +1415,12 @@
 BUILTIN(__builtin_operator_new, "v*z", "tc")
 BUILTIN(__builtin_operator_delete, "vv*", "tn")
 BUILTIN(__builtin_char_memchr, "c*cC*iz", "n")
+BUILTIN(__builtin_dump_struct, "ivC*v*", "tn")
 
 // Safestack builtins
 BUILTIN(__builtin___get_unsafe_stack_start, "v*", "Fn")
+BUILTIN(__builtin___get_unsafe_stack_bottom, "v*", "Fn")
+BUILTIN(__builtin___get_unsafe_stack_top, "v*", "Fn")
 BUILTIN(__builtin___get_unsafe_stack_ptr, "v*", "Fn")
 
 // Nontemporal loads/stores builtins
@@ -1391,6 +1435,7 @@
 
 BUILTIN(__builtin_coro_size, "z", "n")
 BUILTIN(__builtin_coro_frame, "v*", "n")
+BUILTIN(__builtin_coro_noop, "v*", "n")
 BUILTIN(__builtin_coro_free, "v*v*", "n")
 
 BUILTIN(__builtin_coro_id, "v*Iiv*v*v*", "n")
@@ -1453,6 +1498,7 @@
 
 // Builtins for XRay
 BUILTIN(__xray_customevent, "vcC*z", "")
+BUILTIN(__xray_typedevent, "vzcC*z", "")
 
 // Win64-compatible va_list functions
 BUILTIN(__builtin_ms_va_start, "vc*&.", "nt")
diff --git a/linux-x64/clang/include/clang/Basic/Builtins.h b/linux-x64/clang/include/clang/Basic/Builtins.h
index 963c72e..fa2bcc4 100644
--- a/linux-x64/clang/include/clang/Basic/Builtins.h
+++ b/linux-x64/clang/include/clang/Basic/Builtins.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines enum values for all the target-independent builtin
+/// Defines enum values for all the target-independent builtin
 /// functions.
 ///
 //===----------------------------------------------------------------------===//
@@ -59,7 +59,7 @@
   const char *Features;
 };
 
-/// \brief Holds information about both target-independent and
+/// Holds information about both target-independent and
 /// target-specific builtins, allowing easy queries by clients.
 ///
 /// Builtins from an optional auxiliary target are stored in
@@ -72,122 +72,129 @@
 public:
   Context() {}
 
-  /// \brief Perform target-specific initialization
+  /// Perform target-specific initialization
   /// \param AuxTarget Target info to incorporate builtins from. May be nullptr.
   void InitializeTarget(const TargetInfo &Target, const TargetInfo *AuxTarget);
 
-  /// \brief Mark the identifiers for all the builtins with their
+  /// Mark the identifiers for all the builtins with their
   /// appropriate builtin ID # and mark any non-portable builtin identifiers as
   /// such.
   void initializeBuiltins(IdentifierTable &Table, const LangOptions& LangOpts);
 
-  /// \brief Return the identifier name for the specified builtin,
+  /// Return the identifier name for the specified builtin,
   /// e.g. "__builtin_abs".
   const char *getName(unsigned ID) const {
     return getRecord(ID).Name;
   }
 
-  /// \brief Get the type descriptor string for the specified builtin.
+  /// Get the type descriptor string for the specified builtin.
   const char *getTypeString(unsigned ID) const {
     return getRecord(ID).Type;
   }
 
-  /// \brief Return true if this function is a target-specific builtin.
+  /// Return true if this function is a target-specific builtin.
   bool isTSBuiltin(unsigned ID) const {
     return ID >= Builtin::FirstTSBuiltin;
   }
 
-  /// \brief Return true if this function has no side effects.
+  /// Return true if this function has no side effects.
   bool isPure(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'U') != nullptr;
   }
 
-  /// \brief Return true if this function has no side effects and doesn't
+  /// Return true if this function has no side effects and doesn't
   /// read memory.
   bool isConst(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'c') != nullptr;
   }
 
-  /// \brief Return true if we know this builtin never throws an exception.
+  /// Return true if we know this builtin never throws an exception.
   bool isNoThrow(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'n') != nullptr;
   }
 
-  /// \brief Return true if we know this builtin never returns.
+  /// Return true if we know this builtin never returns.
   bool isNoReturn(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'r') != nullptr;
   }
 
-  /// \brief Return true if we know this builtin can return twice.
+  /// Return true if we know this builtin can return twice.
   bool isReturnsTwice(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'j') != nullptr;
   }
 
-  /// \brief Returns true if this builtin does not perform the side-effects
+  /// Returns true if this builtin does not perform the side-effects
   /// of its arguments.
   bool isUnevaluated(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'u') != nullptr;
   }
 
-  /// \brief Return true if this is a builtin for a libc/libm function,
+  /// Return true if this is a builtin for a libc/libm function,
   /// with a "__builtin_" prefix (e.g. __builtin_abs).
   bool isLibFunction(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'F') != nullptr;
   }
 
-  /// \brief Determines whether this builtin is a predefined libc/libm
+  /// Determines whether this builtin is a predefined libc/libm
   /// function, such as "malloc", where we know the signature a
   /// priori.
   bool isPredefinedLibFunction(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'f') != nullptr;
   }
 
-  /// \brief Returns true if this builtin requires appropriate header in other
+  /// Returns true if this builtin requires appropriate header in other
   /// compilers. In Clang it will work even without including it, but we can emit
   /// a warning about missing header.
   bool isHeaderDependentFunction(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'h') != nullptr;
   }
 
-  /// \brief Determines whether this builtin is a predefined compiler-rt/libgcc
+  /// Determines whether this builtin is a predefined compiler-rt/libgcc
   /// function, such as "__clear_cache", where we know the signature a
   /// priori.
   bool isPredefinedRuntimeFunction(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 'i') != nullptr;
   }
 
-  /// \brief Determines whether this builtin has custom typechecking.
+  /// Determines whether this builtin has custom typechecking.
   bool hasCustomTypechecking(unsigned ID) const {
     return strchr(getRecord(ID).Attributes, 't') != nullptr;
   }
 
-  /// \brief Determines whether this builtin has a result or any arguments which
+  /// Determines whether this builtin has a result or any arguments which
   /// are pointer types.
   bool hasPtrArgsOrResult(unsigned ID) const {
     return strchr(getRecord(ID).Type, '*') != nullptr;
   }
 
-  /// \brief Completely forget that the given ID was ever considered a builtin,
+  /// Return true if this builtin has a result or any arguments which are
+  /// reference types.
+  bool hasReferenceArgsOrResult(unsigned ID) const {
+    return strchr(getRecord(ID).Type, '&') != nullptr ||
+           strchr(getRecord(ID).Type, 'A') != nullptr;
+  }
+
+  /// Completely forget that the given ID was ever considered a builtin,
   /// e.g., because the user provided a conflicting signature.
   void forgetBuiltin(unsigned ID, IdentifierTable &Table);
 
-  /// \brief If this is a library function that comes from a specific
+  /// If this is a library function that comes from a specific
   /// header, retrieve that header name.
   const char *getHeaderName(unsigned ID) const {
     return getRecord(ID).HeaderName;
   }
 
-  /// \brief Determine whether this builtin is like printf in its
+  /// Determine whether this builtin is like printf in its
   /// formatting rules and, if so, set the index to the format string
   /// argument and whether this function as a va_list argument.
   bool isPrintfLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg);
 
-  /// \brief Determine whether this builtin is like scanf in its
+  /// Determine whether this builtin is like scanf in its
   /// formatting rules and, if so, set the index to the format string
   /// argument and whether this function as a va_list argument.
   bool isScanfLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg);
 
-  /// \brief Return true if this function has no side effects and doesn't
+  /// Return true if this function has no side effects and doesn't
   /// read memory, except for possibly errno.
   ///
   /// Such functions can be const when the MathErrno lang option is disabled.
@@ -199,12 +206,14 @@
     return getRecord(ID).Features;
   }
 
-  /// \brief Return true if builtin ID belongs to AuxTarget.
+  unsigned getRequiredVectorWidth(unsigned ID) const;
+
+  /// Return true if builtin ID belongs to AuxTarget.
   bool isAuxBuiltinID(unsigned ID) const {
     return ID >= (Builtin::FirstTSBuiltin + TSRecords.size());
   }
 
-  /// Return real buitin ID (i.e. ID it would have furing compilation
+  /// Return real builtin ID (i.e. ID it would have during compilation
   /// for AuxTarget).
   unsigned getAuxBuiltinID(unsigned ID) const { return ID - TSRecords.size(); }
 
@@ -212,26 +221,30 @@
   /// prefix.
   static bool isBuiltinFunc(const char *Name);
 
+  /// Returns true if this is a builtin that can be redeclared.  Returns true
+  /// for non-builtins.
+  bool canBeRedeclared(unsigned ID) const;
+
 private:
   const Info &getRecord(unsigned ID) const;
 
-  /// \brief Is this builtin supported according to the given language options?
+  /// Is this builtin supported according to the given language options?
   bool builtinIsSupported(const Builtin::Info &BuiltinInfo,
                           const LangOptions &LangOpts);
 
-  /// \brief Helper function for isPrintfLike and isScanfLike.
+  /// Helper function for isPrintfLike and isScanfLike.
   bool isLike(unsigned ID, unsigned &FormatIdx, bool &HasVAListArg,
               const char *Fmt) const;
 };
 
 }
 
-/// \brief Kinds of BuiltinTemplateDecl.
+/// Kinds of BuiltinTemplateDecl.
 enum BuiltinTemplateKind : int {
-  /// \brief This names the __make_integer_seq BuiltinTemplateDecl.
+  /// This names the __make_integer_seq BuiltinTemplateDecl.
   BTK__make_integer_seq,
 
-  /// \brief This names the __type_pack_element BuiltinTemplateDecl.
+  /// This names the __type_pack_element BuiltinTemplateDecl.
   BTK__type_pack_element
 };
 
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def b/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
index 55a4f70..b5d971d 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -18,6 +18,10 @@
 #   define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS)
 #endif
 
+#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN)
+#  define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
+#endif
+
 // In libgcc
 BUILTIN(__clear_cache, "vv*v*", "i")
 
@@ -65,9 +69,40 @@
 BUILTIN(__builtin_arm_wsr64, "vcC*LUi", "nc")
 BUILTIN(__builtin_arm_wsrp, "vcC*vC*", "nc")
 
+// MSVC
 LANGBUILTIN(__dmb, "vUi", "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__dsb, "vUi", "nc", ALL_MS_LANGUAGES)
 LANGBUILTIN(__isb, "vUi", "nc", ALL_MS_LANGUAGES)
+LANGBUILTIN(__yield, "v", "",   ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfe,   "v", "",   ALL_MS_LANGUAGES)
+LANGBUILTIN(__wfi,   "v", "",   ALL_MS_LANGUAGES)
+LANGBUILTIN(__sev,   "v", "",   ALL_MS_LANGUAGES)
+LANGBUILTIN(__sevl,  "v", "",   ALL_MS_LANGUAGES)
+
+// MSVC intrinsics for volatile but non-acquire/release loads and stores
+LANGBUILTIN(__iso_volatile_load8,   "ccCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load16,  "ssCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load32,  "iiCD*",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_load64,  "LLiLLiCD*", "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store8,  "vcD*c",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store16, "vsD*s",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store32, "viD*i",     "n", ALL_MS_LANGUAGES)
+LANGBUILTIN(__iso_volatile_store64, "vLLiD*LLi", "n", ALL_MS_LANGUAGES)
+
+TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanForward64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_BitScanReverse64, "UcUNi*ULLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+
+TARGET_HEADER_BUILTIN(_InterlockedAnd64,         "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedDecrement64,   "LLiLLiD*",    "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchange64,    "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeAdd64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedExchangeSub64, "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedIncrement64,   "LLiLLiD*",    "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedOr64,          "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_InterlockedXor64,         "LLiLLiD*LLi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 
 #undef BUILTIN
 #undef LANGBUILTIN
+#undef TARGET_HEADER_BUILTIN
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def b/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
index 46687f7..35f3a88 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsAMDGPU.def
@@ -21,9 +21,10 @@
 // SI+ only builtins.
 //===----------------------------------------------------------------------===//
 
-BUILTIN(__builtin_amdgcn_dispatch_ptr, "Uc*4", "nc")
-BUILTIN(__builtin_amdgcn_kernarg_segment_ptr, "Uc*4", "nc")
-BUILTIN(__builtin_amdgcn_implicitarg_ptr, "Uc*4", "nc")
+BUILTIN(__builtin_amdgcn_dispatch_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_kernarg_segment_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_implicitarg_ptr, "v*4", "nc")
+BUILTIN(__builtin_amdgcn_queue_ptr, "v*4", "nc")
 
 BUILTIN(__builtin_amdgcn_workgroup_id_x, "Ui", "nc")
 BUILTIN(__builtin_amdgcn_workgroup_id_y, "Ui", "nc")
@@ -45,6 +46,8 @@
 BUILTIN(__builtin_amdgcn_wave_barrier, "v", "n")
 BUILTIN(__builtin_amdgcn_s_dcache_inv, "v", "n")
 BUILTIN(__builtin_amdgcn_buffer_wbinvl1, "v", "n")
+
+// FIXME: Need to disallow constant address space.
 BUILTIN(__builtin_amdgcn_div_scale, "dddbb*", "n")
 BUILTIN(__builtin_amdgcn_div_scalef, "fffbb*", "n")
 BUILTIN(__builtin_amdgcn_div_fmas, "ddddb", "nc")
@@ -93,9 +96,15 @@
 BUILTIN(__builtin_amdgcn_readfirstlane, "ii", "nc")
 BUILTIN(__builtin_amdgcn_readlane, "iii", "nc")
 BUILTIN(__builtin_amdgcn_fmed3f, "ffff", "nc")
-BUILTIN(__builtin_amdgcn_ds_fadd, "ff*3fiib", "n")
-BUILTIN(__builtin_amdgcn_ds_fmin, "ff*3fiib", "n")
-BUILTIN(__builtin_amdgcn_ds_fmax, "ff*3fiib", "n")
+BUILTIN(__builtin_amdgcn_ds_faddf, "ff*3fIiIiIb", "n")
+BUILTIN(__builtin_amdgcn_ds_fminf, "ff*3fIiIiIb", "n")
+BUILTIN(__builtin_amdgcn_ds_fmaxf, "ff*3fIiIiIb", "n")
+
+//===----------------------------------------------------------------------===//
+// CI+ only builtins.
+//===----------------------------------------------------------------------===//
+TARGET_BUILTIN(__builtin_amdgcn_s_dcache_inv_vol, "v", "n", "ci-insts")
+TARGET_BUILTIN(__builtin_amdgcn_buffer_wbinvl1_vol, "v", "n", "ci-insts")
 
 //===----------------------------------------------------------------------===//
 // VI+ only builtins.
@@ -113,6 +122,7 @@
 TARGET_BUILTIN(__builtin_amdgcn_classh, "bhi", "nc", "16-bit-insts")
 TARGET_BUILTIN(__builtin_amdgcn_s_memrealtime, "LUi", "n", "s-memrealtime")
 TARGET_BUILTIN(__builtin_amdgcn_mov_dpp, "iiIiIiIiIb", "nc", "dpp")
+TARGET_BUILTIN(__builtin_amdgcn_s_dcache_wb, "v", "n", "vi-insts")
 
 //===----------------------------------------------------------------------===//
 // GFX9+ only builtins.
@@ -121,6 +131,18 @@
 TARGET_BUILTIN(__builtin_amdgcn_fmed3h, "hhhh", "nc", "gfx9-insts")
 
 //===----------------------------------------------------------------------===//
+// Deep learning builtins.
+//===----------------------------------------------------------------------===//
+
+TARGET_BUILTIN(__builtin_amdgcn_fdot2, "fV2hV2hfIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot2, "SiV2SsV2SsSiIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot2, "UiV2UsV2UsUiIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot4, "SiSiSiSiIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot4, "UiUiUiUiIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_sdot8, "SiSiSiSiIb", "nc", "dl-insts")
+TARGET_BUILTIN(__builtin_amdgcn_udot8, "UiUiUiUiIb", "nc", "dl-insts")
+
+//===----------------------------------------------------------------------===//
 // Special builtins.
 //===----------------------------------------------------------------------===//
 BUILTIN(__builtin_amdgcn_read_exec, "LUi", "nc")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def b/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
index 7bab73a..08c6097 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsNVPTX.def
@@ -18,6 +18,19 @@
 #   define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, ATTRS)
 #endif
 
+#pragma push_macro("SM_70")
+#define SM_70 "sm_70|sm_71"
+#pragma push_macro("SM_60")
+#define SM_60 "sm_60|sm_61|sm_62|" SM_70
+
+#pragma push_macro("PTX61")
+#define PTX61 "ptx61"
+#pragma push_macro("PTX60")
+#define PTX60 "ptx60|" PTX61
+
+#pragma push_macro("AND")
+#define AND(a, b) a "," b
+
 // Special Registers
 
 BUILTIN(__nvvm_read_ptx_sreg_tid_x, "i", "nc")
@@ -372,7 +385,7 @@
 BUILTIN(__nvvm_bitcast_d2ll, "LLid", "")
 
 // FNS
-TARGET_BUILTIN(__nvvm_fns, "UiUiUii", "n", "ptx60")
+TARGET_BUILTIN(__nvvm_fns, "UiUiUii", "n", PTX60)
 
 // Sync
 
@@ -381,9 +394,9 @@
 BUILTIN(__nvvm_bar0_and, "ii", "")
 BUILTIN(__nvvm_bar0_or, "ii", "")
 BUILTIN(__nvvm_bar_sync, "vi", "n")
-TARGET_BUILTIN(__nvvm_bar_warp_sync, "vUi", "n", "ptx60")
-TARGET_BUILTIN(__nvvm_barrier_sync, "vUi", "n", "ptx60")
-TARGET_BUILTIN(__nvvm_barrier_sync_cnt, "vUiUi", "n", "ptx60")
+TARGET_BUILTIN(__nvvm_bar_warp_sync, "vUi", "n", PTX60)
+TARGET_BUILTIN(__nvvm_barrier_sync, "vUi", "n", PTX60)
+TARGET_BUILTIN(__nvvm_barrier_sync_cnt, "vUiUi", "n", PTX60)
 
 // Shuffle
 
@@ -396,14 +409,14 @@
 BUILTIN(__nvvm_shfl_idx_i32, "iiii", "")
 BUILTIN(__nvvm_shfl_idx_f32, "ffii", "")
 
-TARGET_BUILTIN(__nvvm_shfl_sync_down_i32, "iUiiii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_down_f32, "fUifii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_up_i32, "iUiiii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_up_f32, "fUifii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_bfly_i32, "iUiiii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_bfly_f32, "fUifii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_idx_i32, "iUiiii", "", "ptx60")
-TARGET_BUILTIN(__nvvm_shfl_sync_idx_f32, "fUifii", "", "ptx60")
+TARGET_BUILTIN(__nvvm_shfl_sync_down_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_down_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_up_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_up_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_bfly_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_bfly_f32, "fUifii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_idx_i32, "iUiiii", "", PTX60)
+TARGET_BUILTIN(__nvvm_shfl_sync_idx_f32, "fUifii", "", PTX60)
 
 // Vote
 BUILTIN(__nvvm_vote_all, "bb", "")
@@ -411,17 +424,17 @@
 BUILTIN(__nvvm_vote_uni, "bb", "")
 BUILTIN(__nvvm_vote_ballot, "Uib", "")
 
-TARGET_BUILTIN(__nvvm_vote_all_sync, "bUib", "", "ptx60")
-TARGET_BUILTIN(__nvvm_vote_any_sync, "bUib", "", "ptx60")
-TARGET_BUILTIN(__nvvm_vote_uni_sync, "bUib", "", "ptx60")
-TARGET_BUILTIN(__nvvm_vote_ballot_sync, "UiUib", "", "ptx60")
+TARGET_BUILTIN(__nvvm_vote_all_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_any_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_uni_sync, "bUib", "", PTX60)
+TARGET_BUILTIN(__nvvm_vote_ballot_sync, "UiUib", "", PTX60)
 
 // Match
-TARGET_BUILTIN(__nvvm_match_any_sync_i32, "UiUiUi", "", "ptx60")
-TARGET_BUILTIN(__nvvm_match_any_sync_i64, "WiUiWi", "", "ptx60")
+TARGET_BUILTIN(__nvvm_match_any_sync_i32, "UiUiUi", "", PTX60)
+TARGET_BUILTIN(__nvvm_match_any_sync_i64, "WiUiWi", "", PTX60)
 // These return a pair {value, predicate}, which requires custom lowering.
-TARGET_BUILTIN(__nvvm_match_all_sync_i32p, "UiUiUii*", "", "ptx60")
-TARGET_BUILTIN(__nvvm_match_all_sync_i64p, "WiUiWii*", "", "ptx60")
+TARGET_BUILTIN(__nvvm_match_all_sync_i32p, "UiUiUii*", "", PTX60)
+TARGET_BUILTIN(__nvvm_match_all_sync_i64p, "WiUiWii*", "", PTX60)
 
 // Membar
 
@@ -462,194 +475,120 @@
 // - they are used in address space analysis and optimization
 // So it does not hurt to expose them as builtins.
 //
-BUILTIN(__nvvm_atom_add_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_add_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_add_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_add_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_add_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_add_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_add_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_add_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_add_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_add_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_add_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_add_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_add_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_add_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_add_gen_ll, "LLiLLiD*LLi", "n", "satom")
-BUILTIN(__nvvm_atom_add_g_f, "ffD*1f", "n")
-BUILTIN(__nvvm_atom_add_s_f, "ffD*3f", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 BUILTIN(__nvvm_atom_add_gen_f, "ffD*f", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_add_gen_f, "ffD*f", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_add_gen_f, "ffD*f", "n", "satom")
-BUILTIN(__nvvm_atom_add_g_d, "ddD*1d", "n")
-BUILTIN(__nvvm_atom_add_s_d, "ddD*3d", "n")
-TARGET_BUILTIN(__nvvm_atom_add_gen_d, "ddD*d", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_cta_add_gen_d, "ddD*d", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_add_gen_d, "ddD*d", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_f, "ffD*f", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_f, "ffD*f", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_add_gen_d, "ddD*d", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_cta_add_gen_d, "ddD*d", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_add_gen_d, "ddD*d", "n", SM_60)
 
-BUILTIN(__nvvm_atom_sub_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_sub_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_sub_gen_i, "iiD*i", "n")
-BUILTIN(__nvvm_atom_sub_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_sub_s_l, "LiLiD*3Li", "n")
 BUILTIN(__nvvm_atom_sub_gen_l, "LiLiD*Li", "n")
-BUILTIN(__nvvm_atom_sub_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_sub_s_ll, "LLiLLiD*3LLi", "n")
 BUILTIN(__nvvm_atom_sub_gen_ll, "LLiLLiD*LLi", "n")
 
-BUILTIN(__nvvm_atom_xchg_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_xchg_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_xchg_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_xchg_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_xchg_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_xchg_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_xchg_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_xchg_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_xchg_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_ll, "LLiLLiD*LLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_xchg_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xchg_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_max_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_max_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_max_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_max_g_ui, "UiUiD*1Ui", "n")
-BUILTIN(__nvvm_atom_max_s_ui, "UiUiD*3Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_max_gen_ui, "UiUiD*Ui", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ui, "UiUiD*Ui", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ui, "UiUiD*Ui", "n", "satom")
-BUILTIN(__nvvm_atom_max_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_max_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ui, "UiUiD*Ui", "n", SM_60)
 BUILTIN(__nvvm_atom_max_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_max_g_ul, "ULiULiD*1ULi", "n")
-BUILTIN(__nvvm_atom_max_s_ul, "ULiULiD*3ULi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_max_gen_ul, "ULiULiD*ULi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ul, "ULiULiD*ULi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ul, "ULiULiD*ULi", "n", "satom")
-BUILTIN(__nvvm_atom_max_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_max_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ul, "ULiULiD*ULi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ul, "ULiULiD*ULi", "n", SM_60)
 BUILTIN(__nvvm_atom_max_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ll, "LLiLLiD*LLi", "n", "satom")
-BUILTIN(__nvvm_atom_max_g_ull, "ULLiULLiD*1ULLi", "n")
-BUILTIN(__nvvm_atom_max_s_ull, "ULLiULLiD*3ULLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 BUILTIN(__nvvm_atom_max_gen_ull, "ULLiULLiD*ULLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ull, "ULLiULLiD*ULLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ull, "ULLiULLiD*ULLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_max_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_max_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_min_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_min_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_min_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_min_g_ui, "UiUiD*1Ui", "n")
-BUILTIN(__nvvm_atom_min_s_ui, "UiUiD*3Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_min_gen_ui, "UiUiD*Ui", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ui, "UiUiD*Ui", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ui, "UiUiD*Ui", "n", "satom")
-BUILTIN(__nvvm_atom_min_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_min_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ui, "UiUiD*Ui", "n", SM_60)
 BUILTIN(__nvvm_atom_min_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_min_g_ul, "ULiULiD*1ULi", "n")
-BUILTIN(__nvvm_atom_min_s_ul, "ULiULiD*3ULi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_min_gen_ul, "ULiULiD*ULi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ul, "ULiULiD*ULi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ul, "ULiULiD*ULi", "n", "satom")
-BUILTIN(__nvvm_atom_min_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_min_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ul, "ULiULiD*ULi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ul, "ULiULiD*ULi", "n", SM_60)
 BUILTIN(__nvvm_atom_min_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ll, "LLiLLiD*LLi", "n", "satom")
-BUILTIN(__nvvm_atom_min_g_ull, "ULLiULLiD*1ULLi", "n")
-BUILTIN(__nvvm_atom_min_s_ull, "ULLiULLiD*3ULLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 BUILTIN(__nvvm_atom_min_gen_ull, "ULLiULLiD*ULLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ull, "ULLiULLiD*ULLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ull, "ULLiULLiD*ULLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_min_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_min_gen_ull, "ULLiULLiD*ULLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_inc_g_ui, "UiUiD*1Ui", "n")
-BUILTIN(__nvvm_atom_inc_s_ui, "UiUiD*3Ui", "n")
 BUILTIN(__nvvm_atom_inc_gen_ui, "UiUiD*Ui", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_inc_gen_ui, "UiUiD*Ui", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_inc_gen_ui, "UiUiD*Ui", "n", "satom")
-BUILTIN(__nvvm_atom_dec_g_ui, "UiUiD*1Ui", "n")
-BUILTIN(__nvvm_atom_dec_s_ui, "UiUiD*3Ui", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_inc_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_inc_gen_ui, "UiUiD*Ui", "n", SM_60)
 BUILTIN(__nvvm_atom_dec_gen_ui, "UiUiD*Ui", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_dec_gen_ui, "UiUiD*Ui", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_dec_gen_ui, "UiUiD*Ui", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_dec_gen_ui, "UiUiD*Ui", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_dec_gen_ui, "UiUiD*Ui", "n", SM_60)
 
-BUILTIN(__nvvm_atom_and_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_and_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_and_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_and_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_and_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_and_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_and_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_and_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_and_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_and_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_and_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_and_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_and_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_and_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_and_gen_ll, "LLiLLiD*LLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_and_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_and_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_or_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_or_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_or_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_or_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_or_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_or_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_or_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_or_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_or_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_or_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_or_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_or_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_or_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_or_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_or_gen_ll, "LLiLLiD*LLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_or_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_or_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_xor_g_i, "iiD*1i", "n")
-BUILTIN(__nvvm_atom_xor_s_i, "iiD*3i", "n")
 BUILTIN(__nvvm_atom_xor_gen_i, "iiD*i", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_i, "iiD*i", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_i, "iiD*i", "n", "satom")
-BUILTIN(__nvvm_atom_xor_g_l, "LiLiD*1Li", "n")
-BUILTIN(__nvvm_atom_xor_s_l, "LiLiD*3Li", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_i, "iiD*i", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_i, "iiD*i", "n", SM_60)
 BUILTIN(__nvvm_atom_xor_gen_l, "LiLiD*Li", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_l, "LiLiD*Li", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_l, "LiLiD*Li", "n", "satom")
-BUILTIN(__nvvm_atom_xor_g_ll, "LLiLLiD*1LLi", "n")
-BUILTIN(__nvvm_atom_xor_s_ll, "LLiLLiD*3LLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_l, "LiLiD*Li", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_l, "LiLiD*Li", "n", SM_60)
 BUILTIN(__nvvm_atom_xor_gen_ll, "LLiLLiD*LLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_ll, "LLiLLiD*LLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_ll, "LLiLLiD*LLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_xor_gen_ll, "LLiLLiD*LLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_xor_gen_ll, "LLiLLiD*LLi", "n", SM_60)
 
-BUILTIN(__nvvm_atom_cas_g_i, "iiD*1ii", "n")
-BUILTIN(__nvvm_atom_cas_s_i, "iiD*3ii", "n")
 BUILTIN(__nvvm_atom_cas_gen_i, "iiD*ii", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_i, "iiD*ii", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_i, "iiD*ii", "n", "satom")
-BUILTIN(__nvvm_atom_cas_g_l, "LiLiD*1LiLi", "n")
-BUILTIN(__nvvm_atom_cas_s_l, "LiLiD*3LiLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_i, "iiD*ii", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_i, "iiD*ii", "n", SM_60)
 BUILTIN(__nvvm_atom_cas_gen_l, "LiLiD*LiLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_l, "LiLiD*LiLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_l, "LiLiD*LiLi", "n", "satom")
-BUILTIN(__nvvm_atom_cas_g_ll, "LLiLLiD*1LLiLLi", "n")
-BUILTIN(__nvvm_atom_cas_s_ll, "LLiLLiD*3LLiLLi", "n")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_l, "LiLiD*LiLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_l, "LiLiD*LiLi", "n", SM_60)
 BUILTIN(__nvvm_atom_cas_gen_ll, "LLiLLiD*LLiLLi", "n")
-TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_ll, "LLiLLiD*LLiLLi", "n", "satom")
-TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_ll, "LLiLLiD*LLiLLi", "n", "satom")
+TARGET_BUILTIN(__nvvm_atom_cta_cas_gen_ll, "LLiLLiD*LLiLLi", "n", SM_60)
+TARGET_BUILTIN(__nvvm_atom_sys_cas_gen_ll, "LLiLLiD*LLiLLi", "n", SM_60)
 
 // Compiler Error Warn
 BUILTIN(__nvvm_compiler_error, "vcC*4", "n")
@@ -692,17 +631,46 @@
 BUILTIN(__nvvm_ldg_d2, "E2dE2dC*", "")
 
 // Builtins to support WMMA instructions on sm_70
-TARGET_BUILTIN(__hmma_m16n16k16_ld_a, "vi*iC*UiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_ld_b, "vi*iC*UiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f16, "vi*iC*UiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f32, "vf*fC*UiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_st_c_f16, "vi*i*UiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_st_c_f32, "vf*f*UiIi", "", "ptx60")
+TARGET_BUILTIN(__hmma_m16n16k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX60))
 
-TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", "ptx60")
-TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", "ptx60")
+TARGET_BUILTIN(__hmma_m32n8k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m8n32k16_ld_a, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_b, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_c_f16, "vi*iC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_ld_c_f32, "vf*fC*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_st_c_f16, "vi*i*UiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_st_c_f32, "vf*f*UiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX60))
+TARGET_BUILTIN(__hmma_m16n16k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX60))
+
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m32n8k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f16f16, "vi*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f32f16, "vf*iC*iC*iC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f32f32, "vf*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
+TARGET_BUILTIN(__hmma_m8n32k16_mma_f16f32, "vi*iC*iC*fC*IiIi", "", AND(SM_70,PTX61))
 
 #undef BUILTIN
 #undef TARGET_BUILTIN
+#pragma pop_macro("AND")
+#pragma pop_macro("SM_60")
+#pragma pop_macro("SM_70")
+#pragma pop_macro("PTX60")
+#pragma pop_macro("PTX61")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def b/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
index faa70a4..9be7608 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsPPC.def
@@ -58,7 +58,7 @@
 
 BUILTIN(__builtin_altivec_dss, "vUi", "")
 BUILTIN(__builtin_altivec_dssall, "v", "")
-BUILTIN(__builtin_altivec_dst, "vvC*iUi", "") 
+BUILTIN(__builtin_altivec_dst, "vvC*iUi", "")
 BUILTIN(__builtin_altivec_dstt, "vvC*iUi", "")
 BUILTIN(__builtin_altivec_dstst, "vvC*iUi", "")
 BUILTIN(__builtin_altivec_dststt, "vvC*iUi", "")
@@ -423,6 +423,15 @@
 BUILTIN(__builtin_vsx_xxpermdi, "v.", "t")
 BUILTIN(__builtin_vsx_xxsldwi, "v.", "t")
 
+// Float 128 built-ins
+BUILTIN(__builtin_sqrtf128_round_to_odd, "LLdLLd", "")
+BUILTIN(__builtin_addf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_subf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_mulf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_divf128_round_to_odd, "LLdLLdLLd", "")
+BUILTIN(__builtin_fmaf128_round_to_odd, "LLdLLdLLdLLd", "")
+BUILTIN(__builtin_truncf128_round_to_odd, "dLLd", "")
+
 // HTM builtins
 BUILTIN(__builtin_tbegin, "UiUIi", "")
 BUILTIN(__builtin_tend, "UiUIi", "")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def b/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
index d698151..45ce072 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsWebAssembly.def
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines the WebAssembly-specific builtin function database.
+/// This file defines the WebAssembly-specific builtin function database.
 /// Users of this file must define the BUILTIN macro to make use of this
 /// information.
 ///
@@ -17,15 +17,16 @@
 // The format of this database matches clang/Basic/Builtins.def.
 
 // Query the current memory size, and increase the current memory size.
-// Note that mem.size is not "c" (readnone) because it must be sequenced
-// with respect to grow_memory calls.
-// These are the new proposed names, which aren't yet official. Use at your own
-// risk.
+// Note that memory.size is not "c" (readnone) because it must be sequenced
+// with respect to memory.grow calls.
+BUILTIN(__builtin_wasm_memory_size, "zIi", "n")
+BUILTIN(__builtin_wasm_memory_grow, "zIiz", "n")
+
+// These are the old names.
 BUILTIN(__builtin_wasm_mem_size, "zIi", "n")
 BUILTIN(__builtin_wasm_mem_grow, "zIiz", "n")
 
-// These are the existing names, which are currently official, but expected
-// to be deprecated in the future. They also lack the immediate field.
+// These are the old old names. They also lack the immediate field.
 BUILTIN(__builtin_wasm_current_memory, "z", "n")
 BUILTIN(__builtin_wasm_grow_memory, "zz", "n")
 
@@ -33,4 +34,9 @@
 BUILTIN(__builtin_wasm_throw, "vUiv*", "r")
 BUILTIN(__builtin_wasm_rethrow, "v", "r")
 
+// Atomic wait and notify.
+BUILTIN(__builtin_wasm_atomic_wait_i32, "ii*iLLi", "n")
+BUILTIN(__builtin_wasm_atomic_wait_i64, "iLLi*LLiLLi", "n")
+BUILTIN(__builtin_wasm_atomic_notify, "ULLii*LLi", "n")
+
 #undef BUILTIN
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsX86.def b/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
index 44592d1..e98f7d6 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsX86.def
@@ -27,8 +27,6 @@
 #  define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) BUILTIN(ID, TYPE, ATTRS)
 #endif
 
-// FIXME: Are these nothrow/const?
-
 // Miscellaneous builtin for checking x86 cpu features.
 // TODO: Make this somewhat generic so that other backends
 // can use it?
@@ -38,9 +36,9 @@
 
 // Undefined Values
 //
-TARGET_BUILTIN(__builtin_ia32_undef128, "V2d", "nc", "")
-TARGET_BUILTIN(__builtin_ia32_undef256, "V4d", "nc", "")
-TARGET_BUILTIN(__builtin_ia32_undef512, "V8d", "nc", "")
+TARGET_BUILTIN(__builtin_ia32_undef128, "V2d", "ncV:128:", "")
+TARGET_BUILTIN(__builtin_ia32_undef256, "V4d", "ncV:256:", "")
+TARGET_BUILTIN(__builtin_ia32_undef512, "V8d", "ncV:512:", "")
 
 // FLAGS
 //
@@ -49,33 +47,33 @@
 
 // 3DNow!
 //
-TARGET_BUILTIN(__builtin_ia32_femms, "v", "", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "nc", "3dnow")
-TARGET_BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "nc", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_femms, "v", "n", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pavgusb, "V8cV8cV8c", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pf2id, "V2iV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfacc, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfadd, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpeq, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpge, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfcmpgt, "V2iV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmax, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmin, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfmul, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcp, "V2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcpit1, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrcpit2, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrsqrt, "V2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfrsqit1, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfsub, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pfsubr, "V2fV2fV2f", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pi2fd, "V2fV2i", "ncV:64:", "3dnow")
+TARGET_BUILTIN(__builtin_ia32_pmulhrw, "V4sV4sV4s", "ncV:64:", "3dnow")
 // 3DNow! Extensions (3dnowa).
-TARGET_BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "nc", "3dnowa")
-TARGET_BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "nc", "3dnowa")
-TARGET_BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "nc", "3dnowa")
-TARGET_BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "nc", "3dnowa")
-TARGET_BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "nc", "3dnowa")
-TARGET_BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "nc", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pf2iw, "V2iV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pfnacc, "V2fV2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pfpnacc, "V2fV2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pi2fw, "V2fV2i", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pswapdsf, "V2fV2f", "ncV:64:", "3dnowa")
+TARGET_BUILTIN(__builtin_ia32_pswapdsi, "V2iV2i", "ncV:64:", "3dnowa")
 
 // MMX
 //
@@ -86,1798 +84,1758 @@
 // argument and our prior approach of using a #define to the current built-in
 // doesn't work in the presence of re-declaration of _mm_prefetch for windows.
 TARGET_BUILTIN(_mm_prefetch, "vcC*i", "nc", "mmx")
-TARGET_BUILTIN(__builtin_ia32_emms, "v", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubsw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_packuswb, "V8cV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpckhbw, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpckhwd, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpeqw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpeqd, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpgtb, "V8cV8cV8c", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "", "mmx")
-TARGET_BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "", "mmx")
+TARGET_BUILTIN(__builtin_ia32_emms, "v", "n", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddsb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddsw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddusb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_paddusw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubsb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubsw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubusb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psubusw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmulhw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmullw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd, "V2iV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pand, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pandn, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_por, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pxor, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pslld, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrld, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psraw, "V4sV4sV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrad, "V2iV2iV1LLi", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllwi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pslldi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psllqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlwi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrldi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrlqi, "V1LLiV1LLii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psrawi, "V4sV4si", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_psradi, "V2iV2ii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packsswb, "V8cV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packssdw, "V4sV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_packuswb, "V8cV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhbw, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhwd, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckhdq, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpcklbw, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpcklwd, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_punpckldq, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpeqd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtb, "V8cV8cV8c", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtw, "V4sV4sV4s", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_pcmpgtd, "V2iV2iV2i", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_maskmovq, "vV8cV8cc*", "nV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_movntq, "vV1LLi*V1LLi", "nV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v2si, "V2iii", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v4hi, "V4sssss", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_init_v8qi, "V8ccccccccc", "ncV:64:", "mmx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v2si, "iV2ii", "ncV:64:", "mmx")
 
 // MMX2 (MMX+SSE) intrinsics
-TARGET_BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pmaxsw, "V4sV4sV4s", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pmaxub, "V8cV8cV8c", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pminsw, "V4sV4sV4s", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pminub, "V8cV8cV8c", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pmovmskb, "iV8c", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_psadbw, "V4sV8cV8c", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_pshufw, "V4sV4sIc", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_vec_ext_v4hi, "iV4sIi", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_vec_set_v4hi, "V4sV4siIi", "", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtpi2ps, "V4fV4fV2i", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_cvtps2pi, "V2iV4f", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_cvttps2pi, "V2iV4f", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pavgb, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pavgw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmaxub, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pminsw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pminub, "V8cV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb, "iV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw, "V4sV4sV4s", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_psadbw, "V4sV8cV8c", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_pshufw, "V4sV4sIc", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4hi, "iV4sIi", "ncV:64:", "mmx,sse")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4hi, "V4sV4siIi", "ncV:64:", "mmx,sse")
 
 // MMX+SSE2
-TARGET_BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpi2pd, "V2dV2i", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2pi, "V2iV2d", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_paddq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq, "V1LLiV2iV2i", "ncV:64:", "mmx,sse2")
+TARGET_BUILTIN(__builtin_ia32_psubq, "V1LLiV1LLiV1LLi", "ncV:64:", "mmx,sse2")
 
 // MMX+SSSE3
-TARGET_BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pabsd, "V2iV2i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pabsw, "V4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_palignr, "V8cV8cV8cIc", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phaddd, "V2iV2iV2i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phaddsw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phaddw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubd, "V2iV2iV2i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubsw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pmaddubsw, "V8cV8cV8c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pmulhrsw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pshufb, "V8cV8cV8c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignw, "V4sV4sV4s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignb, "V8cV8cV8c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignd, "V2iV2iV2i", "", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsb, "V8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsd, "V2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsw, "V4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_palignr, "V8cV8cV8cIc", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_pshufb, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignw, "V4sV4sV4s", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignb, "V8cV8cV8c", "ncV:64:", "mmx,ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignd, "V2iV2iV2i", "ncV:64:", "mmx,ssse3")
 
 // SSE intrinsics.
-TARGET_BUILTIN(__builtin_ia32_comieq, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_comilt, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_comile, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_comigt, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_comige, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_comineq, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomieq, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomilt, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomile, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomigt, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomige, "iV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_ucomineq, "iV4fV4f", "", "sse")
+TARGET_BUILTIN(__builtin_ia32_comieq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comilt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comile, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comigt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comige, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_comineq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomieq, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomilt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomile, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomigt, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomige, "iV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_ucomineq, "iV4fV4f", "ncV:128:", "sse")
 
-TARGET_BUILTIN(__builtin_ia32_comisdeq, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_comisdlt, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_comisdle, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_comisdgt, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_comisdge, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_comisdneq, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdeq, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdlt, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdeq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdlt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdle, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdgt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdge, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_comisdneq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdeq, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdlt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdle, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdgt, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdge, "iV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_ucomisdneq, "iV2dV2d", "ncV:128:", "sse2")
 
-TARGET_BUILTIN(__builtin_ia32_cmpeqps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpltps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpleps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpunordps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpneqps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpnltps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpnleps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpordps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpeqss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpltss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpless, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpunordss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpneqss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpnltss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpnless, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cmpordss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpeqps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpltps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpleps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpunordps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpneqps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnltps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnleps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpordps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpeqss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpltss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpless, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpunordss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpneqss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnltss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpnless, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cmpordss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_minps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_maxps, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_minss, "V4fV4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_maxss, "V4fV4fV4f", "ncV:128:", "sse")
 
-TARGET_BUILTIN(__builtin_ia32_cmpeqpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpltpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmplepd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpunordpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpneqpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpnltpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpnlepd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpordpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpeqsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpltsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmplesd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpunordsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpneqsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpnltsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpnlesd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cmpordsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psubsw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_paddusb128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_paddusw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_packsswb128, "V16cV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_packssdw128, "V8sV4iV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_packuswb128, "V16cV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmulhuw128, "V8sV8sV8s", "", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpeqpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpltpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmplepd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpunordpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpneqpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnltpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnlepd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpordpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpeqsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpltsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmplesd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpunordsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpneqsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnltsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpnlesd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cmpordsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_minpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_maxpd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_minsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_maxsd, "V2dV2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddsb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubsb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddusb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_paddusw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubusb128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psubusw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmulhw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaxub128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pminub128, "V16cV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pminsw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packsswb128, "V16cV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packssdw128, "V8sV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_packuswb128, "V16cV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4si, "iV4iIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4sf, "fV4fIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v8hi, "sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v8hi, "V8sV8ssIi", "ncV:128:", "sse2")
 
-TARGET_BUILTIN(__builtin_ia32_addsubps, "V4fV4fV4f", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_addsubpd, "V2dV2dV2d", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_haddps, "V4fV4fV4f", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_haddpd, "V2dV2dV2d", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_hsubps, "V4fV4fV4f", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_hsubpd, "V2dV2dV2d", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_phaddw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phaddd128, "V4iV4iV4i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignw128, "V8sV8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_psignd128, "V4iV4iV4i", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pabsb128, "V16cV16c", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "", "ssse3")
-TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_addsubps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_addsubpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_haddps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_haddpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_hsubps, "V4fV4fV4f", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_hsubpd, "V2dV2dV2d", "ncV:128:", "sse3")
+TARGET_BUILTIN(__builtin_ia32_phaddw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phaddsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_phsubsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw128, "V8sV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pshufb128, "V16cV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignb128, "V16cV16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignw128, "V8sV8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_psignd128, "V4iV4iV4i", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsb128, "V16cV16c", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsw128, "V8sV8s", "ncV:128:", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "ncV:128:", "ssse3")
 
-TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "", "sse")
-TARGET_HEADER_BUILTIN(_mm_setcsr, "vUi", "h","xmmintrin.h", ALL_LANGUAGES, "sse")
-TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "", "sse")
-TARGET_HEADER_BUILTIN(_mm_getcsr, "Ui", "h", "xmmintrin.h", ALL_LANGUAGES, "sse")
-TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_sfence, "v", "", "sse")
-TARGET_HEADER_BUILTIN(_mm_sfence, "v", "h", "xmmintrin.h", ALL_LANGUAGES, "sse")
-TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "", "sse")
+TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_setcsr, "vUi", "nh","xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_getcsr, "Ui", "nh", "xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_storehps, "vV2i*V4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "nV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sfence, "v", "n", "sse")
+TARGET_HEADER_BUILTIN(_mm_sfence, "v", "nh", "xmmintrin.h", ALL_LANGUAGES, "sse")
+TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_rsqrtss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sqrtps, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_sqrtss, "V4fV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_shufps, "V4fV4fV4fIi", "ncV:128:", "sse")
 
-TARGET_BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_movmskpd, "iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_movnti, "vi*i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtdq2ps, "V4fV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttsd2si, "iV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtsd2ss, "V4fV4fV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "", "sse2")
-TARGET_HEADER_BUILTIN(_mm_clflush, "vvC*", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")
-TARGET_BUILTIN(__builtin_ia32_lfence, "v", "", "sse2")
-TARGET_HEADER_BUILTIN(_mm_lfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")
-TARGET_BUILTIN(__builtin_ia32_mfence, "v", "", "sse2")
-TARGET_HEADER_BUILTIN(_mm_mfence, "v", "h", "emmintrin.h", ALL_LANGUAGES, "sse2")
-TARGET_BUILTIN(__builtin_ia32_pause, "v", "", "")
-TARGET_HEADER_BUILTIN(_mm_pause, "v", "h", "emmintrin.h", ALL_LANGUAGES, "")
-TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "", "sse2")
+TARGET_BUILTIN(__builtin_ia32_maskmovdqu, "vV16cV16cc*", "nV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movmskpd, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb128, "iV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movnti, "vi*i", "n", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshufd, "V4iV4iIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshuflw, "V8sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pshufhw, "V8sV8sIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psadbw128, "V2LLiV16cV16c", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_sqrtpd, "V2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_sqrtsd, "V2dV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_shufpd, "V2dV2dV2dIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq, "V2LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps, "V4fV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq, "V4iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2si, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttsd2si, "iV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2ss, "V4fV4fV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_clflush, "vvC*", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_lfence, "v", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_lfence, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_mfence, "v", "n", "sse2")
+TARGET_HEADER_BUILTIN(_mm_mfence, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "sse2")
+TARGET_BUILTIN(__builtin_ia32_pause, "v", "n", "")
+TARGET_HEADER_BUILTIN(_mm_pause, "v", "nh", "emmintrin.h", ALL_LANGUAGES, "")
+TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrld128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllw128, "V8sV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslld128, "V4iV4iV4i", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllq128, "V2LLiV2LLiV2LLi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllwi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslldi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psllqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlwi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrldi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi128, "V2LLiV2LLii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrawi128, "V8sV8si", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psradi128, "V4iV4ii", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd128, "V4iV8sV8s", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi128_byteshift, "V2LLiV2LLiIi", "ncV:128:", "sse2")
 
-TARGET_BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_mwait, "vUiUi", "", "sse3")
-TARGET_BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "", "sse3")
+TARGET_BUILTIN(__builtin_ia32_monitor, "vv*UiUi", "n", "sse3")
+TARGET_BUILTIN(__builtin_ia32_mwait, "vUiUi", "n", "sse3")
+TARGET_BUILTIN(__builtin_ia32_lddqu, "V16ccC*", "nV:128:", "sse3")
 
-TARGET_BUILTIN(__builtin_ia32_palignr128, "V16cV16cV16cIi", "", "ssse3")
+TARGET_BUILTIN(__builtin_ia32_palignr128, "V16cV16cV16cIi", "ncV:128:", "ssse3")
 
-TARGET_BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fIc", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pblendvb128, "V16cV16cV16cV16c", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_blendvpd, "V2dV2dV2dV2d", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_blendvps, "V4fV4fV4fV4f", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_packusdw128, "V8sV4iV4i", "", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_insertps128, "V4fV4fV4fIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pblendvb128, "V16cV16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pblendw128, "V8sV8sV8sIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendpd, "V2dV2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendps, "V4fV4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendvpd, "V2dV2dV2dV2d", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_blendvps, "V4fV4fV4fV4f", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_packusdw128, "V8sV4iV4i", "ncV:128:", "sse4.1")
 
-TARGET_BUILTIN(__builtin_ia32_pmaxsb128, "V16cV16cV16c", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pmaxsd128, "V4iV4iV4i", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pmaxud128, "V4iV4iV4i", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pmaxuw128, "V8sV8sV8s", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pminsb128, "V16cV16cV16c", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_roundps, "V4fV4fIi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fIi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2dIi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_roundpd, "V2dV2dIi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "", "sse4.1")
-TARGET_BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxsb128, "V16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxud128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw128, "V8sV8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminsb128, "V16cV16cV16c", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminsd128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminud128, "V4iV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pminuw128, "V8sV8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_pmuldq128, "V2LLiV4iV4i", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundps, "V4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundss, "V4fV4fV4fIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundsd, "V2dV2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_roundpd, "V2dV2dIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_dpps, "V4fV4fV4fIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_dppd, "V2dV2dV2dIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestz128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc128, "iV2LLiV2LLi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_mpsadbw128, "V16cV16cV16cIc", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_phminposuw128, "V8sV8s", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v16qi, "cV16cIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v16qi, "V16cV16ccIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4si, "V4iV4iiIi", "ncV:128:", "sse4.1")
 
 // SSE 4.2
-TARGET_BUILTIN(__builtin_ia32_pcmpistrm128, "V16cV16cV16cIc", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpistri128, "iV16cV16cIc", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestrm128, "V16cV16ciV16ciIc", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestri128, "iV16ciV16ciIc","", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistrm128, "V16cV16cV16cIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistri128, "iV16cV16cIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestrm128, "V16cV16ciV16ciIc", "ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestri128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
 
-TARGET_BUILTIN(__builtin_ia32_pcmpistria128, "iV16cV16cIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpistric128, "iV16cV16cIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpistrio128, "iV16cV16cIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpistris128, "iV16cV16cIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpistriz128, "iV16cV16cIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestria128, "iV16ciV16ciIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestric128, "iV16ciV16ciIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestrio128, "iV16ciV16ciIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestris128, "iV16ciV16ciIc","", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16ciIc","", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistria128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistric128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistrio128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistris128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpistriz128, "iV16cV16cIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestria128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestric128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestrio128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestris128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_pcmpestriz128, "iV16ciV16ciIc","ncV:128:", "sse4.2")
 
-TARGET_BUILTIN(__builtin_ia32_crc32qi, "UiUiUc", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_crc32hi, "UiUiUs", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_crc32qi, "UiUiUc", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_crc32hi, "UiUiUs", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_crc32si, "UiUiUi", "nc", "sse4.2")
 
 // SSE4a
-TARGET_BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "", "sse4a")
-TARGET_BUILTIN(__builtin_ia32_movntss, "vf*V4f", "", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_extrqi, "V2LLiV2LLiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_extrq, "V2LLiV2LLiV16c", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertqi, "V2LLiV2LLiV2LLiIcIc", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_insertq, "V2LLiV2LLiV2LLi", "ncV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_movntsd, "vd*V2d", "nV:128:", "sse4a")
+TARGET_BUILTIN(__builtin_ia32_movntss, "vf*V4f", "nV:128:", "sse4a")
 
 // AES
-TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "", "aes")
-TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "", "aes")
-TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesenc128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdec128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast128, "V2LLiV2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aesimc128, "V2LLiV2LLi", "ncV:128:", "aes")
+TARGET_BUILTIN(__builtin_ia32_aeskeygenassist128, "V2LLiV2LLiIc", "ncV:128:", "aes")
 
 // VAES
-TARGET_BUILTIN(__builtin_ia32_aesenc256, "V4LLiV4LLiV4LLi", "", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenc512, "V8LLiV8LLiV8LLi", "", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast256, "V4LLiV4LLiV4LLi", "", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesenclast512, "V8LLiV8LLiV8LLi", "", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdec256, "V4LLiV4LLiV4LLi", "", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdec512, "V8LLiV8LLiV8LLi", "", "avx512f,vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast256, "V4LLiV4LLiV4LLi", "", "vaes")
-TARGET_BUILTIN(__builtin_ia32_aesdeclast512, "V8LLiV8LLiV8LLi", "", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenc256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenc512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesenclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdec512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast256, "V4LLiV4LLiV4LLi", "ncV:256:", "vaes")
+TARGET_BUILTIN(__builtin_ia32_aesdeclast512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f,vaes")
 
 // GFNI
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v16qi, "V16cV16cV16cIc", "", "gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v32qi, "V32cV32cV32cIc", "", "avx,gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v64qi, "V64cV64cV64cIc", "", "avx512bw,gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v16qi, "V16cV16cV16cIc", "", "gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v32qi, "V32cV32cV32cIc", "", "avx,gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v64qi, "V64cV64cV64cIc", "", "avx512bw,gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v16qi, "V16cV16cV16c", "", "gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v32qi, "V32cV32cV32c", "", "avx,gfni")
-TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v64qi, "V64cV64cV64c", "", "avx512bw,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v16qi, "V16cV16cV16cIc", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v32qi, "V32cV32cV32cIc", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineinvqb_v64qi, "V64cV64cV64cIc", "ncV:512:", "avx512bw,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v16qi, "V16cV16cV16cIc", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v32qi, "V32cV32cV32cIc", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8affineqb_v64qi, "V64cV64cV64cIc", "ncV:512:", "avx512bw,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v16qi, "V16cV16cV16c", "ncV:128:", "gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v32qi, "V32cV32cV32c", "ncV:256:", "avx,gfni")
+TARGET_BUILTIN(__builtin_ia32_vgf2p8mulb_v64qi, "V64cV64cV64c", "ncV:512:", "avx512bw,gfni")
 
 // CLMUL
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "", "pclmul")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq128, "V2LLiV2LLiV2LLiIc", "ncV:128:", "pclmul")
 
 // VPCLMULQDQ
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq256, "V4LLiV4LLiV4LLiIc", "", "vpclmulqdq")
-TARGET_BUILTIN(__builtin_ia32_pclmulqdq512, "V8LLiV8LLiV8LLiIc", "", "avx512f,vpclmulqdq")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq256, "V4LLiV4LLiV4LLiIc", "ncV:256:", "vpclmulqdq")
+TARGET_BUILTIN(__builtin_ia32_pclmulqdq512, "V8LLiV8LLiV8LLiIc", "ncV:512:", "avx512f,vpclmulqdq")
 
 // AVX
-TARGET_BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_addsubps256, "V8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_haddpd256, "V4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_hsubps256, "V8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_hsubpd256, "V4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_haddps256, "V8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maxpd256, "V4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_blendvpd256, "V4dV4dV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_blendvps256, "V8fV8fV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_dpps256, "V8fV8fV8fIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmppd256, "V4dV4dV4dIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmpps256, "V8fV8fV8fIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvtdq2ps256, "V8fV8i", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2ps256, "V4fV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvtps2dq256, "V8iV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2dq256, "V4iV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2dq256, "V4iV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_cvttps2dq256, "V8iV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vperm2f128_pd256, "V4dV4dV4dIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vperm2f128_ps256, "V8fV8fV8fIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vperm2f128_si256, "V8iV8iV8iIc", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_sqrtpd256, "V4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_sqrtps256, "V8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_rsqrtps256, "V8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_rcpps256, "V8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_roundpd256, "V4dV4dIi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_roundps256, "V8fV8fIi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestzpd, "iV2dV2d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestcpd, "iV2dV2d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestnzcpd, "iV2dV2d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestzps, "iV4fV4f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestcps, "iV4fV4f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestnzcps, "iV4fV4f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestzpd256, "iV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestcpd256, "iV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestnzcpd256, "iV4dV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_movmskps256, "iV8f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vzeroall, "v", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vzeroupper, "v", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vbroadcastf128_pd256, "V4dV2dC*", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_vbroadcastf128_ps256, "V8fV4fC*", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4i", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4LLi", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8i", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2LLiV2d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4iV4f", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4LLiV4d", "", "avx")
-TARGET_BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8iV8f", "", "avx")
+TARGET_BUILTIN(__builtin_ia32_addsubpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_addsubps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_haddpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_hsubps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_hsubpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_haddps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maxpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maxps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_minpd256, "V4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_minps256, "V8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd, "V2dV2dV2LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps, "V4fV4fV4i", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd256, "V4dV4dV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps256, "V8fV8fV8i", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendpd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendvpd256, "V4dV4dV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_blendvps256, "V8fV8fV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_shufpd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_shufps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_dpps256, "V8fV8fV8fIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmppd, "V2dV2dV2dIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmppd256, "V4dV4dV4dIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpps, "V4fV4fV4fIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpps256, "V8fV8fV8fIc", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpsd, "V2dV2dV2dIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cmpss, "V4fV4fV4fIc", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_pd256, "V2dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_ps256, "V4fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vextractf128_si256, "V4iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps256, "V4fV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq256, "V8iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq256, "V4iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq256, "V4iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq256, "V8iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_pd256, "V4dV4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_ps256, "V8fV8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vperm2f128_si256, "V8iV8iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd, "V2dV2dIi", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilps, "V4fV4fIi", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd256, "V4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vpermilps256, "V8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_pd256, "V4dV4dV2dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_ps256, "V8fV8fV4fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vinsertf128_si256, "V8iV8iV4iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_sqrtpd256, "V4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_sqrtps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rsqrtps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rcpps256, "V8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_roundpd256, "V4dV4dIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_roundps256, "V8fV8fIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcpd, "iV2dV2d", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcps, "iV4fV4f", "ncV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcpd256, "iV4dV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestzps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestcps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vtestnzcps256, "iV8fV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestz256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestc256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_ptestnzc256, "iV4LLiV4LLi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_movmskpd256, "iV4d", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_movmskps256, "iV8f", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vzeroall, "v", "n", "avx")
+TARGET_BUILTIN(__builtin_ia32_vzeroupper, "v", "n", "avx")
+TARGET_BUILTIN(__builtin_ia32_lddqu256, "V32ccC*", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd, "V2dV2dC*V2LLi", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadps, "V4fV4fC*V4i", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadpd256, "V4dV4dC*V4LLi", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskloadps256, "V8fV8fC*V8i", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd, "vV2d*V2LLiV2d", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstoreps, "vV4f*V4iV4f", "nV:128:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstorepd256, "vV4d*V4LLiV4d", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_maskstoreps256, "vV8f*V8iV8f", "nV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v32qi, "cV32cIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v16hi, "sV16sIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v8si, "iV8iIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v32qi, "V32cV32ccIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v16hi, "V16sV16ssIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v8si, "V8iV8iiIi", "ncV:256:", "avx")
 
 // AVX2
-TARGET_BUILTIN(__builtin_ia32_mpsadbw256, "V32cV32cV32cIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pabsb256, "V32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pabsw256, "V16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pabsd256, "V8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_packsswb256, "V32cV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_packssdw256, "V16sV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_packuswb256, "V32cV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_packusdw256, "V16sV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_paddsb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_paddsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psubsb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psubsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_paddusb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_paddusw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phaddd256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxub256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxuw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxud256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxsb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmaxsd256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminub256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminuw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminud256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminsb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psignb256, "V32cV32cV32c", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psignw256, "V16sV16sV16s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "", "avx2")
+TARGET_BUILTIN(__builtin_ia32_mpsadbw256, "V32cV32cV32cIc", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsb256, "V32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsw256, "V16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pabsd256, "V8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packsswb256, "V32cV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packssdw256, "V16sV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packuswb256, "V32cV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_packusdw256, "V16sV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddusb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_paddusw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubusb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psubusw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_palignr256, "V32cV32cV32cIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendvb256, "V32cV32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendw256, "V16sV16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phaddsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_phsubsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw256, "V16sV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd256, "V8iV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxub256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxud256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminub256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminud256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pminsd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmovmskb256, "iV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuldq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmulhw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pmuludq256, "V4LLiV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psadbw256, "V4LLiV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufd256, "V8iV8iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshuflw256, "V16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pshufhw256, "V16sV16sIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignb256, "V32cV32cV32c", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignw256, "V16sV16sV16s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psignd256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllwi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslldi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pslld256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrawi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psraw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psradi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrad256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrldqi256_byteshift, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlwi256, "V16sV16si", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlw256, "V16sV16sV8s", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrldi256, "V8iV8ii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrld256, "V8iV8iV4i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlqi256, "V4LLiV4LLii", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendd128, "V4iV4iV4iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_pblendd256, "V8iV8iV8iIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permvarsi256, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permdf256, "V4dV4dIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permvarsf256, "V8fV8fV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permti256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_permdi256, "V4LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_extract128i256, "V2LLiV4LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_insert128i256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadd256, "V8iV8iC*V8i", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq256, "V4LLiV4LLiC*V4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadd, "V4iV4iC*V4i", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskloadq, "V2LLiV2LLiC*V2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstored256, "vV8i*V8iV8i", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq256, "vV4LLi*V4LLiV4LLi", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstored, "vV4i*V4iV4i", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_maskstoreq, "vV2LLi*V2LLiV2LLi", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psllv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrav8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrav4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv8si, "V8iV8iV8i", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv4si, "V4iV4iV4i", "ncV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv4di, "V4LLiV4LLiV4LLi", "ncV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_psrlv2di, "V2LLiV2LLiV2LLi", "ncV:128:", "avx2")
 
 // GATHER
-TARGET_BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2ddC*V4iV2dIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4ddC*V4iV4dIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2ddC*V2LLiV2dIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4ddC*V4LLiV4dIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4ffC*V4iV4fIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8ffC*V8iV8fIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4ffC*V2LLiV4fIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4ffC*V4LLiV4fIc", "", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_pd, "V2dV2ddC*V4iV2dIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_pd256, "V4dV4ddC*V4iV4dIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd, "V2dV2ddC*V2LLiV2dIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_pd256, "V4dV4ddC*V4LLiV4dIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_ps, "V4fV4ffC*V4iV4fIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_ps256, "V8fV8ffC*V8iV8fIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps, "V4fV4ffC*V2LLiV4fIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_ps256, "V4fV4ffC*V4LLiV4fIc", "nV:256:", "avx2")
 
-TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiLLiC*V4iV2LLiIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiLLiC*V4iV4LLiIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiLLiC*V2LLiV2LLiIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiLLiC*V4LLiV4LLiIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iiC*V4iV4iIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iiC*V8iV8iIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iiC*V2LLiV4iIc", "", "avx2")
-TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iiC*V4LLiV4iIc", "", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_q, "V2LLiV2LLiLLiC*V4iV2LLiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_q256, "V4LLiV4LLiLLiC*V4iV4LLiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q, "V2LLiV2LLiLLiC*V2LLiV2LLiIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_q256, "V4LLiV4LLiLLiC*V4LLiV4LLiIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_d, "V4iV4iiC*V4iV4iIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherd_d256, "V8iV8iiC*V8iV8iIc", "nV:256:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d, "V4iV4iiC*V2LLiV4iIc", "nV:128:", "avx2")
+TARGET_BUILTIN(__builtin_ia32_gatherq_d256, "V4iV4iiC*V4LLiV4iIc", "nV:256:", "avx2")
 
 // F16C
-TARGET_BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "", "f16c")
-TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256, "V8sV8fIi", "", "f16c")
-TARGET_BUILTIN(__builtin_ia32_vcvtph2ps, "V4fV8s", "", "f16c")
-TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256, "V8fV8s", "", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph, "V8sV4fIi", "ncV:128:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256, "V8sV8fIi", "ncV:256:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps, "V4fV8s", "ncV:128:", "f16c")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256, "V8fV8s", "ncV:256:", "f16c")
 
 // RDRAND
-TARGET_BUILTIN(__builtin_ia32_rdrand16_step, "UiUs*", "", "rdrnd")
-TARGET_BUILTIN(__builtin_ia32_rdrand32_step, "UiUi*", "", "rdrnd")
-TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "", "rdrnd")
-
-// FSGSBASE
-TARGET_BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdrand16_step, "UiUs*", "n", "rdrnd")
+TARGET_BUILTIN(__builtin_ia32_rdrand32_step, "UiUi*", "n", "rdrnd")
 
 // FXSR
-TARGET_BUILTIN(__builtin_ia32_fxrstor, "vv*", "", "fxsr")
-TARGET_BUILTIN(__builtin_ia32_fxsave, "vv*", "", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_fxrstor, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_fxsave, "vv*", "n", "fxsr")
 
 // XSAVE
-TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "", "xsaveopt")
-TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "", "xsavec")
-TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsave, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt, "vv*ULLi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec, "vv*ULLi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves, "vv*ULLi", "n", "xsaves")
 
 // SHSTK
-TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "u", "shstk")
-TARGET_BUILTIN(__builtin_ia32_rdsspd, "UiUi", "Un", "shstk")
-TARGET_BUILTIN(__builtin_ia32_saveprevssp, "v", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_rstorssp, "vv*", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrssd, "vUiv*", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrussd, "vUiv*", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_setssbsy, "v", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_clrssbsy, "vv*", "", "shstk")
+TARGET_BUILTIN(__builtin_ia32_incsspd, "vUi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rdsspd, "UiUi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_saveprevssp, "v", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rstorssp, "vv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrssd, "vUiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrussd, "vUiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_setssbsy, "v", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_clrssbsy, "vv*", "n", "shstk")
 
 //CLFLUSHOPT
-TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "", "clflushopt")
+TARGET_BUILTIN(__builtin_ia32_clflushopt, "vvC*", "n", "clflushopt")
 
 //CLWB
-TARGET_BUILTIN(__builtin_ia32_clwb, "vvC*", "", "clwb")
+TARGET_BUILTIN(__builtin_ia32_clwb, "vvC*", "n", "clwb")
+
+//WB[NO]INVD
+TARGET_BUILTIN(__builtin_ia32_wbinvd, "v", "n", "")
+TARGET_BUILTIN(__builtin_ia32_wbnoinvd, "v", "n", "wbnoinvd")
 
 // ADX
-TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "", "adx")
-TARGET_BUILTIN(__builtin_ia32_addcarry_u32, "UcUcUiUiUi*", "", "")
-TARGET_BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "", "")
+TARGET_BUILTIN(__builtin_ia32_addcarryx_u32, "UcUcUiUiUi*", "n", "adx")
+TARGET_BUILTIN(__builtin_ia32_addcarry_u32, "UcUcUiUiUi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_subborrow_u32, "UcUcUiUiUi*", "n", "")
 
 // RDSEED
-TARGET_BUILTIN(__builtin_ia32_rdseed16_step, "UiUs*", "", "rdseed")
-TARGET_BUILTIN(__builtin_ia32_rdseed32_step, "UiUi*", "", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_rdseed16_step, "UiUs*", "n", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_rdseed32_step, "UiUi*", "n", "rdseed")
 
 // BMI
-TARGET_BUILTIN(__builtin_ia32_bextr_u32, "UiUiUi", "", "bmi")
+TARGET_BUILTIN(__builtin_ia32_bextr_u32, "UiUiUi", "nc", "bmi")
 
 // BMI2
-TARGET_BUILTIN(__builtin_ia32_bzhi_si, "UiUiUi", "", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pdep_si, "UiUiUi", "", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pext_si, "UiUiUi", "", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_bzhi_si, "UiUiUi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pdep_si, "UiUiUi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pext_si, "UiUiUi", "nc", "bmi2")
 
 // TBM
-TARGET_BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "", "tbm")
+TARGET_BUILTIN(__builtin_ia32_bextri_u32, "UiUiIUi", "nc", "tbm")
 
 // LWP
-TARGET_BUILTIN(__builtin_ia32_llwpcb, "vv*", "", "lwp")
-TARGET_BUILTIN(__builtin_ia32_slwpcb, "v*", "", "lwp")
-TARGET_BUILTIN(__builtin_ia32_lwpins32, "UcUiUiUi", "", "lwp")
-TARGET_BUILTIN(__builtin_ia32_lwpval32, "vUiUiUi", "", "lwp")
+TARGET_BUILTIN(__builtin_ia32_llwpcb, "vv*", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_slwpcb, "v*", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpins32, "UcUiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpval32, "vUiUiUi", "n", "lwp")
 
 // SHA
-TARGET_BUILTIN(__builtin_ia32_sha1rnds4, "V4iV4iV4iIc", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha1nexte, "V4iV4iV4i", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha1msg1, "V4iV4iV4i", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha1msg2, "V4iV4iV4i", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "", "sha")
-TARGET_BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1rnds4, "V4iV4iV4iIc", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1nexte, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1msg1, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha1msg2, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256rnds2, "V4iV4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256msg1, "V4iV4iV4i", "ncV:128:", "sha")
+TARGET_BUILTIN(__builtin_ia32_sha256msg2, "V4iV4iV4i", "ncV:128:", "sha")
 
 // FMA
-TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddss3, "V4fV4fV4fV4f", "", "fma")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsd3, "V2dV2dV2dV2d", "", "fma")
-TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "", "fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "", "fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfnmaddps256, "V8fV8fV8fV8f", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256, "V4dV4dV4dV4d", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "", "fma|fma4")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps, "V4fV4fV4fV4f", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd, "V2dV2dV2dV2d", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3, "V4fV4fV4fV4f", "ncV:128:", "fma")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3, "V2dV2dV2dV2d", "ncV:128:", "fma")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss, "V4fV4fV4fV4f", "ncV:128:", "fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd, "V2dV2dV2dV2d", "ncV:128:", "fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps, "V4fV4fV4fV4f", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd, "V2dV2dV2dV2d", "ncV:128:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps256, "V8fV8fV8fV8f", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd256, "V4dV4dV4dV4d", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256, "V8fV8fV8fV8f", "ncV:256:", "fma|fma4")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256, "V4dV4dV4dV4d", "ncV:256:", "fma|fma4")
 
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd128_maskz, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd256_maskz, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_maskz, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps128_maskz, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps256_maskz, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddps512_maskz, "V16fV16fV16fV16fUsIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd128_maskz, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd256_maskz, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_maskz, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps128_maskz, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps256_maskz, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_maskz, "V16fV16fV16fV16fUsIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfmsubaddps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmaddpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmaddpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmaddpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmaddps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmaddps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmaddps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd128_mask3, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd256_mask3, "V4dV4dV4dV4dUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "", "avx512f")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps128_mask3, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps256_mask3, "V8fV8fV8fV8fUc", "", "avx512vl")
-
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubps512_mask3, "V16fV16fV16fV16fUsIi", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_maskz, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_maskz, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_maskz, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubaddpd512_mask3, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_maskz, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsubps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubaddps512_mask3, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
 
 // XOP
-TARGET_BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsww, "V8sV8sV8sV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsswd, "V4iV8sV8sV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssww, "V8sV8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsww, "V8sV8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdd, "V4iV4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdql, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacssdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmacsdqh, "V2LLiV4iV4iV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmadcsswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpmadcswd, "V4iV8sV8sV4i", "ncV:128:", "xop")
 
-TARGET_BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczsd, "V2dV2d", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczps, "V4fV4f", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczpd, "V2dV2d", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczps256, "V8fV8f", "", "xop")
-TARGET_BUILTIN(__builtin_ia32_vfrczpd256, "V4dV4d", "", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbd, "V4iV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddbq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddwq, "V2LLiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadddq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubd, "V4iV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddubq, "V2LLiV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadduwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphadduwq, "V2LLiV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphaddudq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubbw, "V8sV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubwd, "V4iV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vphsubdq, "V2LLiV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlb, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshld, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshlq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshab, "V16cV16cV16c", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshaw, "V8sV8sV8s", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshad, "V4iV4iV4i", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpshaq, "V2LLiV2LLiV2LLi", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomub, "V16cV16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomuw, "V8sV8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomud, "V4iV4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomuq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomb, "V16cV16cV16cIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomw, "V8sV8sV8sIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomd, "V4iV4iV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpcomq, "V2LLiV2LLiV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd, "V2dV2dV2dV2LLiIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2pd256, "V4dV4dV4dV4LLiIc", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2ps, "V4fV4fV4fV4iIc", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vpermil2ps256, "V8fV8fV8fV8iIc", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczss, "V4fV4f", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczsd, "V2dV2d", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczps, "V4fV4f", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczpd, "V2dV2d", "ncV:128:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczps256, "V8fV8f", "ncV:256:", "xop")
+TARGET_BUILTIN(__builtin_ia32_vfrczpd256, "V4dV4d", "ncV:256:", "xop")
 
-TARGET_BUILTIN(__builtin_ia32_xbegin, "i", "", "rtm")
-TARGET_BUILTIN(__builtin_ia32_xend, "v", "", "rtm")
-TARGET_BUILTIN(__builtin_ia32_xabort, "vIc", "", "rtm")
-TARGET_BUILTIN(__builtin_ia32_xtest, "i", "", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xbegin, "i", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xend, "v", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xabort, "vIc", "n", "rtm")
+TARGET_BUILTIN(__builtin_ia32_xtest, "i", "n", "rtm")
 
 BUILTIN(__builtin_ia32_rdpmc, "ULLii", "")
 BUILTIN(__builtin_ia32_rdtsc, "ULLi", "")
 BUILTIN(__rdtsc, "ULLi", "")
 BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "")
 
-TARGET_BUILTIN(__builtin_ia32_rdpid, "Ui", "", "rdpid")
+TARGET_BUILTIN(__builtin_ia32_rdpid, "Ui", "n", "rdpid")
 
 // PKU
-TARGET_BUILTIN(__builtin_ia32_rdpkru, "Ui", "", "pku")
-TARGET_BUILTIN(__builtin_ia32_wrpkru, "vUi", "", "pku")
+TARGET_BUILTIN(__builtin_ia32_rdpkru, "Ui", "n", "pku")
+TARGET_BUILTIN(__builtin_ia32_wrpkru, "vUi", "n", "pku")
 
 // AVX-512
-TARGET_BUILTIN(__builtin_ia32_sqrtpd512_mask, "V8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_sqrtps512_mask, "V16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14sd_mask, "V2dV2dV2dV2dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14ss_mask, "V4fV4fV4fV4fUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14pd512_mask, "V8dV8dV8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14ps512_mask, "V16fV16fV16fUs", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_sqrtpd512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_sqrtps512, "V16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14sd_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ss_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_rsqrt28sd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rsqrt28ss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rsqrt28pd_mask, "V8dV8dV8dUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rsqrt28ps_mask, "V16fV16fV16fUsIi", "", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28sd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28ss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rsqrt28ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
 
-TARGET_BUILTIN(__builtin_ia32_rcp14sd_mask, "V2dV2dV2dV2dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rcp14ss_mask, "V4fV4fV4fV4fUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rcp14pd512_mask, "V8dV8dV8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rcp14ps512_mask, "V16fV16fV16fUs", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14sd_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14ss_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_rcp28sd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rcp28ss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rcp28pd_mask, "V8dV8dV8dUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_rcp28ps_mask, "V16fV16fV16fUsIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_exp2pd_mask, "V8dV8dV8dUcIi", "", "avx512er")
-TARGET_BUILTIN(__builtin_ia32_exp2ps_mask, "V16fV16fV16fUsIi", "", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28sd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28ss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_rcp28ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_exp2pd_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512er")
+TARGET_BUILTIN(__builtin_ia32_exp2ps_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512er")
 
-TARGET_BUILTIN(__builtin_ia32_cvttps2dq512_mask, "V16iV16fV16iUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvttps2udq512_mask, "V16iV16fV16iUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2dq512_mask, "V8iV8dV8iUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2udq512_mask, "V8iV8dV8iUcIi", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttps2dq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_cmpps512_mask,   "UsV16fV16fIiUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpps256_mask,   "UcV8fV8fIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpps128_mask,   "UcV4fV4fIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmppd256_mask, "UcV4dV4dIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmppd128_mask, "UcV2dV2dIiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpps512_mask,   "UsV16fV16fIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpps256_mask,   "UcV8fV8fIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpps128_mask,   "UcV4fV4fIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmppd512_mask, "UcV8dV8dIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmppd256_mask, "UcV4dV4dIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmppd128_mask, "UcV2dV2dIiUc", "ncV:128:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_rndscaleps_mask, "V16fV16fIiV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_rndscalepd_mask, "V8dV8dIiV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtps2dq512_mask, "V16iV16fV16iUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2dq512_mask, "V8iV8dV8iUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtps2udq512_mask, "V16iV16fV16iUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2udq512_mask, "V8iV8dV8iUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_minps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_minpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_maxps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_maxpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtdq2ps512_mask, "V16fV16iV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtudq2ps512_mask, "V16fV16iV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2ps512_mask, "V8fV8dV8fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pabsd512_mask, "V16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pabsq512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxsd512_mask, "V16iV16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxud512_mask, "V16iV16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminsd512_mask, "V16iV16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminsq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminud512_mask, "V16iV16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pminuq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmuldq512, "V8LLiV16iV16i", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadaps512_mask, "V16fV16fC*V16fUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadupd512_mask, "V8ddC*V8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadapd512_mask, "V8dV8dC*V8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vLLi*V8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storedqusi512_mask, "vi*V16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeupd512_mask, "vd*V8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeapd512_mask, "vV8d*V8dUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeups512_mask, "vf*V16fUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeaps512_mask, "vV16f*V16fUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard512_mask, "V16iV16iV16iV16iUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps512_mask, "V16fV16iV16fV16fUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd512_mask, "V8dV8LLiV8dV8dUc", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2dq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq512_mask, "V16iV16fV16iUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq512_mask, "V8iV8dV8iUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtdq2ps512_mask, "V16fV16iV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtudq2ps512_mask, "V16fV16iV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps512_mask, "V8fV8dV8fUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph512_mask, "V16sV16fIiV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps512_mask, "V16fV16sV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pabsd512, "V16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pabsq512, "V8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxud512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminsd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminsq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminud512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pminuq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuldq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmuludq512, "V8LLiV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi512_mask, "V16iiC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi512_mask, "V8LLiLLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadups512_mask, "V16ffC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadaps512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadupd512_mask, "V8ddC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadapd512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storedqudi512_mask, "vLLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storedqusi512_mask, "vi*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeupd512_mask, "vd*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeapd512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeups512_mask, "vf*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeaps512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignd512, "V16iV16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_alignd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_alignq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf64x4_mask, "V4dV8dIiV4dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extractf32x4_mask, "V4fV16fIiV4fUc", "ncV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd512_mask, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds512_mask, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd512_mask, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds512_mask, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusd512_maskz, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpbusds512_maskz, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssd512_maskz, "V16iV16iV16iV16iUs", "", "avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vnni")
-TARGET_BUILTIN(__builtin_ia32_vpdpwssds512_maskz, "V16iV16iV16iV16iUs", "", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpbusds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssd512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl,avx512vnni")
+TARGET_BUILTIN(__builtin_ia32_vpdpwssds512, "V16iV16iV16iV16i", "ncV:512:", "avx512vnni")
 
-TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2ddC*V2LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2LLiV2LLiLLiC*V2LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4ddC*V4LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V4LLiV4LLiLLiC*V4LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4ffC*V2LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4iiC*V2LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4ffC*V4LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4iiC*V4LLiUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv2df, "V2dV2ddC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V2LLiV2LLiLLiC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv4df, "V4dV4ddC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V4LLiV4LLiLLiC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv4sf, "V4fV4ffC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv4si, "V4iV4iiC*V4iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv8sf, "V8fV8ffC*V8iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gather3siv8si, "V8iV8iiC*V8iUcIi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8ddC*V8iUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16ffC*V16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8ddC*V8LLiUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8ffC*V8LLiUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLiLLiC*V8iUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16iiC*V16iUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLiLLiC*V8LLiUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8iiC*V8LLiUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vd*UcV8iV8dIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scattersiv16sf, "vf*UsV16iV16fIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8df,  "vd*UcV8LLiV8dIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vf*UcV8LLiV8fIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scattersiv8di,  "vLLi*UcV8iV8LLiIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scattersiv16si, "vi*UsV16iV16iIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8di,  "vLLi*UcV8LLiV8LLiIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vi*UcV8LLiV8iIi", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gather3div2df, "V2dV2ddC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div2di, "V2LLiV2LLiLLiC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4df, "V4dV4ddC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4di, "V4LLiV4LLiLLiC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4sf, "V4fV4ffC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div4si, "V4iV4iiC*V2LLiUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8sf, "V4fV4ffC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3div8si, "V4iV4iiC*V4LLiUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv2df, "V2dV2ddC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv2di, "V2LLiV2LLiLLiC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4df, "V4dV4ddC*V4iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4di, "V4LLiV4LLiLLiC*V4iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4sf, "V4fV4ffC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv4si, "V4iV4iiC*V4iUcIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv8sf, "V8fV8ffC*V8iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gather3siv8si, "V8iV8iiC*V8iUcIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_gathersiv8df, "V8dV8ddC*V8iUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv16sf, "V16fV16ffC*V16fUsIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8df, "V8dV8ddC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16sf, "V8fV8ffC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv8di, "V8LLiV8LLiLLiC*V8iUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gathersiv16si, "V16iV16iiC*V16iUsIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv8di, "V8LLiV8LLiLLiC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_gatherdiv16si, "V8iV8iiC*V8LLiUcIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8df, "vd*UcV8iV8dIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv16sf, "vf*UsV16iV16fIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8df,  "vd*UcV8LLiV8dIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16sf, "vf*UcV8LLiV8fIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8di,  "vLLi*UcV8iV8LLiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scattersiv16si, "vi*UsV16iV16iIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8di,  "vLLi*UcV8LLiV8LLiIi", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv16si, "vi*UcV8LLiV8iIi", "nV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_gatherpfdpd,  "vUcV8iLLiC*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_gatherpfdps,  "vUsV16iiC*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_gatherpfqpd,  "vUcV8LLiLLiC*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_gatherpfqps,  "vUcV8LLiiC*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iLLi*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16ii*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiLLi*IiIi", "", "avx512pf")
-TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLii*IiIi", "", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfdpd,  "vUcV8iLLiC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfdps,  "vUsV16iiC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqpd,  "vUcV8LLiLLiC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_gatherpfqps,  "vUcV8LLiiC*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfdpd, "vUcV8iLLi*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfdps, "vUsV16ii*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqpd, "vUcV8LLiLLi*IiIi", "nV:512:", "avx512pf")
+TARGET_BUILTIN(__builtin_ia32_scatterpfqps, "vUcV8LLii*IiIi", "nV:512:", "avx512pf")
 
-TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_knothi, "UsUs", "nc", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb128_mask, "UsV16cV16cIiUs", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd128_mask, "UcV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq128_mask, "UcV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpw128_mask, "UcV8sV8sIiUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb256_mask, "UiV32cV32cIiUi", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd256_mask, "UcV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpq256_mask, "UcV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_ucmpw256_mask, "UsV16sV16sIiUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpb512_mask, "ULLiV64cV64cIiULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_ucmpd512_mask, "UsV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_ucmpq512_mask, "UcV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_ucmpw512_mask, "UiV32sV32sIiUi", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_pabsb512_mask, "V64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pabsw512_mask, "V32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_packssdw512, "V32sV16iV16i", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_packsswb512, "V64cV32sV32s", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_packusdw512, "V32sV16iV16i", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_packuswb512, "V64cV32sV32s", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_paddsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_paddsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_paddusb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_paddusw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmaxsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmaxsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmaxub512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmaxuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pminsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pminsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pminub512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pminuw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pshufb512, "V64cV64cV64c", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psubsb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psubsw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psubusb512_mask, "V64cV64cV64cV64cULLi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psubusw512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pabsb512, "V64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pabsw512, "V32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packssdw512, "V32sV16iV16i", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packsswb512, "V64cV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packusdw512, "V32sV16iV16i", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_packuswb512, "V64cV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddsb512_mask, "V64cV64cV64cV64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddsw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddusb512_mask, "V64cV64cV64cV64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_paddusw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxub512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaxuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminsb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminub512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pminuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pshufb512, "V64cV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubsb512_mask, "V64cV64cV64cV64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubsw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubusb512_mask, "V64cV64cV64cV64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psubusw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_vpermi2varhi512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi512_mask, "V32sV32sV32sV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi512_maskz, "V32sV32sV32sV32sUi", "", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_128_mask, "V4iV4iV4iUc", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vpconflictsi_512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_512, "V16iV16i", "ncV:512:", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512cd")
 
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_128_mask, "V2LLiV2LLiV2LLiUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_256_mask, "V4LLiV4LLiV4LLiUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictsi_128_mask, "V4iV4iV4iUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictsi_256_mask, "V8iV8iV8iUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpconflictdi_512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512cd")
-TARGET_BUILTIN(__builtin_ia32_vpconflictsi_512_mask, "V16iV16iV16iUs", "", "avx512cd")
-TARGET_BUILTIN(__builtin_ia32_vplzcntd_512_mask, "V16iV16iV16iUs", "", "avx512cd")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_512_mask, "V8LLiV8LLiV8LLiUc", "", "avx512cd")
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_128, "V4iV4i", "ncV:128:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_256, "V8iV8i", "ncV:256:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512vpopcntdq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpopcntd_512, "V16iV16i", "ncV:512:", "avx512vpopcntdq")
+TARGET_BUILTIN(__builtin_ia32_vpopcntq_512, "V8LLiV8LLi", "ncV:512:", "avx512vpopcntdq")
 
-TARGET_BUILTIN(__builtin_ia32_vpopcntd_128, "V4iV4i", "", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_128, "V2LLiV2LLi", "", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntd_256, "V8iV8i", "", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_256, "V4LLiV4LLi", "", "avx512vpopcntdq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpopcntd_512, "V16iV16i", "", "avx512vpopcntdq")
-TARGET_BUILTIN(__builtin_ia32_vpopcntq_512, "V8LLiV8LLi", "", "avx512vpopcntdq")
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_128, "V16cV16c", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_128, "V8sV8s", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_256, "V32cV32c", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_256, "V16sV16s", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntb_512, "V64cV64c", "ncV:512:", "avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpopcntw_512, "V32sV32s", "ncV:512:", "avx512bitalg")
 
-TARGET_BUILTIN(__builtin_ia32_vpopcntb_128, "V16cV16c", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpopcntw_128, "V8sV8s", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpopcntb_256, "V32cV32c", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpopcntw_256, "V16sV16s", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpopcntb_512, "V64cV64c", "", "avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpopcntw_512, "V32sV32s", "", "avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb128_mask, "UsV16cV16cUs", "ncV:128:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb256_mask, "UiV32cV32cUi", "ncV:256:", "avx512vl,avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb512_mask, "ULLiV64cV64cULLi", "ncV:512:", "avx512bitalg")
 
-TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb128_mask, "UsV16cV16cUs", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb256_mask, "UiV32cV32cUi", "", "avx512vl,avx512bitalg")
-TARGET_BUILTIN(__builtin_ia32_vpshufbitqmb512_mask, "ULLiV64cV64cULLi", "", "avx512bitalg")
+TARGET_BUILTIN(__builtin_ia32_pmulhrsw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmulhuw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmulhw512, "V32sV32sV32s", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_vpermi2varhi128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varhi256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi128_maskz, "V8sV8sV8sV8sUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varhi256_maskz, "V16sV16sV16sV16sUs", "", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_addpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_addps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_pmulhrsw512, "V32sV32sV32s", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmulhuw512, "V32sV32sV32s", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmulhw512, "V32sV32sV32s", "", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaddubsw512, "V32sV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmaddwd512, "V16iV32sV32s", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_addpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_addps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_divpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_divps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_mulpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_mulps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_subpd512_mask, "V8dV8dV8dV8dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_subps512_mask, "V16fV16fV16fV16fUsIi", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_addss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_addsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_divsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_mulsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_subsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_maxsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_minsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
 
-TARGET_BUILTIN(__builtin_ia32_pmaddubsw512_mask, "V32sV64cV64cV32sUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmaddwd512_mask, "V16iV32sV32sV16iUs", "", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_addss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_divss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_mulss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_subss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_maxss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_minss_round_mask, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_addsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_divsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_mulsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_subsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_maxsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_minsd_round_mask, "V2dV2dV2dV2dUcIi", "", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compresshi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compresshi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi128_mask, "V16cV16cV16cUs", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi256_mask, "V32cV32cV32cUi", "ncV:256:", "avx512vl,avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_compressdf128_mask, "V2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressdf256_mask, "V4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressdi128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressdi256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssf128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssf256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssi128_mask, "V4iV4iV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_compresshi128_mask, "V8sV8sV8sUc","","avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compresshi256_mask, "V16sV16sV16sUs","","avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressqi128_mask, "V16cV16cV16cUs","","avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressqi256_mask, "V32cV32cV32cUi","","avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstorehi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstorehi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi128_mask, "vV16c*V16cUs", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi256_mask, "vV32c*V32cUi", "nV:256:", "avx512vl,avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_compresssf128_mask, "V4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compresssf256_mask, "V8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compresssi128_mask, "V4iV4iV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compresssi256_mask, "V8iV8iV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredf128_mask, "vV2d*V2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredf256_mask, "vV4d*V4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi128_mask, "vV2LLi*V2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi256_mask, "vV4LLi*V4LLiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresf128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresf256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2dq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2ps_mask, "V4fV2dV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2udq256_mask, "V4iV4dV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq128_mask, "V4iV4fV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtps2udq256_mask, "V8iV8fV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2dq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq128_mask, "V4iV2dV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2udq256_mask, "V4iV4dV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq128_mask, "V4iV4fV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_compressstorehi128_mask, "vV8s*V8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstorehi256_mask, "vV16s*V16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstoreqi128_mask, "vV16c*V16cUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstoreqi256_mask, "vV32c*V32cUi", "", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandhi128_mask, "V8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandhi256_mask, "V16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi128_mask, "V16cV16cV16cUs", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi256_mask, "V32cV32cV32cUi", "ncV:256:", "avx512vl,avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_compressstoresf128_mask, "vV4f*V4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoresf256_mask, "vV8f*V8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoresi128_mask, "vV4i*V4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_compressstoresi256_mask, "vV8i*V8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2dq128_mask, "V4iV2dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2ps_mask, "V4fV2dV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2udq128_mask, "V4iV2dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2udq256_mask, "V4iV4dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtps2udq128_mask, "V4iV4fV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtps2udq256_mask, "V8iV8fV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2dq128_mask, "V4iV2dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2udq128_mask, "V4iV2dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2udq256_mask, "V4iV4dV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvttps2udq128_mask, "V4iV4fV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvttps2udq256_mask, "V8iV8fV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtudq2ps128_mask, "V4fV4iV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtudq2ps256_mask, "V8fV8iV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddf128_mask, "V2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddf256_mask, "V4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddi128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expanddi256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2dC*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4dC*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_expandhi128_mask, "V8sV8sV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandhi256_mask, "V16sV16sV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandqi128_mask, "V16cV16cV16cUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandqi256_mask, "V32cV32cV32cUi", "", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadhi128_mask, "V8sV8sC*V8sUc", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadhi256_mask, "V16sV16sC*V16sUs", "nV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi128_mask, "V16cV16cC*V16cUs", "nV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi256_mask, "V32cV32cC*V32cUi", "nV:256:", "avx512vl,avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_expandloaddf128_mask, "V2dV2d*V2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloaddf256_mask, "V4dV4d*V4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi128_mask, "V4iV2LLi*V2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi256_mask, "V4LLiV4LLi*V4LLiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsf128_mask, "V4fV4fC*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsf256_mask, "V8fV8fC*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi128_mask, "V4iV4iC*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi256_mask, "V8iV8iC*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsf128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsf256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsi128_mask, "V4iV4iV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_expandsi256_mask, "V8iV8iV8iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexppd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq128, "V2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pabsq256, "V4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmaxuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminsq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pminuq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rndscaleps_256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefpd128_mask, "V2dV2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefpd256_mask, "V4dV4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "ncV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_expandloadhi128_mask, "V8sV8sC*V8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadhi256_mask, "V16sV16sC*V16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadqi128_mask, "V16cV16cC*V16cUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadqi256_mask, "V32cV32cC*V32cUi", "", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vd*UcV2LLiV2dIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vLLi*UcV2LLiV2LLiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vd*UcV4LLiV4dIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vLLi*UcV4LLiV4LLiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vf*UcV2LLiV4fIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vi*UcV2LLiV4iIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vf*UcV4LLiV4fIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vi*UcV4LLiV4iIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv2df, "vd*UcV4iV2dIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vLLi*UcV4iV2LLiIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4df, "vd*UcV4iV4dIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vLLi*UcV4iV4LLiIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4sf, "vf*UcV4iV4fIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv4si, "vi*UcV4iV4iIi", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8sf, "vf*UcV8iV8fIi", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_scattersiv8si, "vi*UcV8iV8iIi", "nV:256:", "avx512vl")
 
-TARGET_BUILTIN(__builtin_ia32_expandloadsf128_mask, "V4fV4f*V4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloadsf256_mask, "V8fV8f*V8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloadsi128_mask, "V4iV4i*V4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandloadsi256_mask, "V8iV8i*V8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandsf128_mask, "V4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandsf256_mask, "V8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandsi128_mask, "V4iV4iV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_expandsi256_mask, "V8iV8iV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getexppd128_mask, "V2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getexppd256_mask, "V4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getexpps128_mask, "V4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getexpps256_mask, "V8fV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pabsq128_mask, "V2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pabsq256_mask, "V4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmaxuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminsq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminsq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminuq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pminuq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rndscalepd_128_mask, "V2dV2dIiV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rndscalepd_256_mask, "V4dV4dIiV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rndscaleps_128_mask, "V4fV4fIiV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rndscaleps_256_mask, "V8fV8fIiV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scalefpd128_mask, "V2dV2dV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scalefpd256_mask, "V4dV4dV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scalefps128_mask, "V4fV4fV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scalefps256_mask, "V8fV8fV8fV8fUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard128, "V4iV4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard256, "V8iV8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2vard512, "V16iV16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128, "V2dV2dV2LLiV2d", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256, "V4dV4dV4LLiV4d", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512, "V8dV8dV8LLiV8d", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps128, "V4fV4fV4iV4f", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps256, "V8fV8fV8iV8f", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varps512, "V16fV16fV16iV16f", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi128, "V16cV16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi256, "V32cV32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varqi512, "V64cV64cV64cV64c", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi128, "V8sV8sV8sV8s", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi256, "V16sV16sV16sV16s", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_vpermi2varhi512, "V32sV32sV32sV32s", "ncV:512:", "avx512bw")
 
-TARGET_BUILTIN(__builtin_ia32_scatterdiv2df, "vd*UcV2LLiV2dIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv2di, "vLLi*UcV2LLiV2LLiIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4df, "vd*UcV4LLiV4dIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4di, "vLLi*UcV4LLiV4LLiIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4sf, "vf*UcV2LLiV4fIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv4si, "vi*UcV2LLiV4iIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8sf, "vf*UcV4LLiV4fIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scatterdiv8si, "vi*UcV4LLiV4iIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv2df, "vd*UcV4iV2dIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv2di, "vLLi*UcV4iV2LLiIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv4df, "vd*UcV4iV4dIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv4di, "vLLi*UcV4iV4LLiIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv4sf, "vf*UcV4iV4fIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv4si, "vi*UcV4iV4iIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv8sf, "vf*UcV8iV8fIi", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_scattersiv8si, "vi*UcV8iV8iIi", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpshldd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_vpermi2vard128_mask, "V4iV4iV4iV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2vard256_mask, "V8iV8iV8iV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd128_mask, "V2dV2dV2LLiV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd256_mask, "V4dV4dV4LLiV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varps128_mask, "V4fV4fV4iV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varps256_mask, "V8fV8fV8iV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard128_mask, "V4iV4iV4iV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard256_mask, "V8iV8iV8iV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd128_mask, "V2dV2LLiV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd128_maskz, "V2dV2LLiV2dV2dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd256_mask, "V4dV4LLiV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd256_maskz, "V4dV4LLiV4dV4dUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps128_mask, "V4fV4iV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps128_maskz, "V4fV4iV4fV4fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps256_mask, "V8fV8iV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps256_maskz, "V8fV8iV8fV8fUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd128_mask, "V4iV4iV4iV4iUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd256_mask, "V8iV8iV8iV8iUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd512_mask, "V16iV16iV16iV16iUs", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw128_mask, "V8sV8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw256_mask, "V16sV16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd128_maskz, "V4iV4iV4iV4iUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd256_maskz, "V8iV8iV8iV8iUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvd512_maskz, "V16iV16iV16iV16iUs", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw128_maskz, "V8sV8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw256_maskz, "V16sV16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshldvw512_maskz, "V32sV32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_vpshldd128_mask, "V4iV4iV4iIiV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldd256_mask, "V8iV8iV8iIiV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldd512_mask, "V16iV16iV16iIiV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq128_mask, "V2LLiV2LLiV2LLiIiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq256_mask, "V4LLiV4LLiV4LLiIiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldq512_mask, "V8LLiV8LLiV8LLiIiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldw128_mask, "V8sV8sV8sIiV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldw256_mask, "V16sV16sV16sIiV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldw512_mask, "V32sV32sV32sIiV32sUi", "", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd128_mask, "V4iV4iV4iV4iUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd256_mask, "V8iV8iV8iV8iUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd512_mask, "V16iV16iV16iV16iUs", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw128_mask, "V8sV8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw256_mask, "V16sV16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw512_mask, "V32sV32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd128_maskz, "V4iV4iV4iV4iUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd256_maskz, "V8iV8iV8iV8iUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvd512_maskz, "V16iV16iV16iV16iUs", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw128_maskz, "V8sV8sV8sV8sUc", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw256_maskz, "V16sV16sV16sV16sUs", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdvw512_maskz, "V32sV32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_vpshldvd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvd512_mask, "V16iV16iV16iV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw512_mask, "V32sV32sV32sV32sUi", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvd128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvd256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvd512_maskz, "V16iV16iV16iV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw128_maskz, "V8sV8sV8sV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw256_maskz, "V16sV16sV16sV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshldvw512_maskz, "V32sV32sV32sV32sUi", "", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdd128, "V4iV4iV4iIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdd256, "V8iV8iV8iIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdd512, "V16iV16iV16iIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq128, "V2LLiV2LLiV2LLiIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdq512, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw128, "V8sV8sV8sIi", "ncV:128:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw256, "V16sV16sV16sIi", "ncV:256:", "avx512vl,avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_vpshrdw512, "V32sV32sV32sIi", "ncV:512:", "avx512vbmi2")
 
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd128_mask, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd256_mask, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd512_mask, "V16iV16iV16iV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw128_mask, "V8sV8sV8sV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw256_mask, "V16sV16sV16sV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw512_mask, "V32sV32sV32sV32sUi", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd128_maskz, "V4iV4iV4iV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd256_maskz, "V8iV8iV8iV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvd512_maskz, "V16iV16iV16iV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw128_maskz, "V8sV8sV8sV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw256_maskz, "V16sV16sV16sV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdvw512_maskz, "V32sV32sV32sV32sUi", "", "avx512vbmi2")
-
-TARGET_BUILTIN(__builtin_ia32_vpshrdd128_mask, "V4iV4iV4iIiV4iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdd256_mask, "V8iV8iV8iIiV8iUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdd512_mask, "V16iV16iV16iIiV16iUs", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq128_mask, "V2LLiV2LLiV2LLiIiV2LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq256_mask, "V4LLiV4LLiV4LLiIiV4LLiUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdq512_mask, "V8LLiV8LLiV8LLiIiV8LLiUc", "", "avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdw128_mask, "V8sV8sV8sIiV8sUc", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdw256_mask, "V16sV16sV16sIiV16sUs", "", "avx512vl,avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_vpshrdw512_mask, "V32sV32sV32sIiV32sUi", "", "avx512vbmi2")
-
-TARGET_BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "", "avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2pd128_mask, "V2dV2LLiV2dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2pd256_mask, "V4dV4LLiV4dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2ps256_mask, "V4fV4LLiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd128_mask, "V2dV2LLiV2dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd256_mask, "V4dV4LLiV4dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps256_mask, "V4fV4LLiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangesd128_round_mask, "V2dV2dV2dV2dUcIiIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangess128_round_mask, "V4fV4fV4fV4fUcIiIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "", "avx512vl,avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reducesd_mask, "V2dV2dV2dV2dUcIiIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reducess_mask, "V4fV4fV4fV4fUcIiIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovwb256_mask, "V16cV16sV16cUs", "", "avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2qq512_mask, "V8LLiV8fV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2pd512_mask, "V8dV8LLiV8dUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtqq2ps512_mask, "V8fV8LLiV8fUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2qq512_mask, "V8LLiV8fV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvttps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd512_mask, "V8dV8LLiV8dUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps512_mask, "V8fV8LLiV8fUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangepd512_mask, "V8dV8dV8dIiV8dUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_rangeps512_mask, "V16fV16fV16fIiV16fUsIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reducepd512_mask, "V8dV8dIiV8dUcIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_reduceps512_mask, "V16fV16fIiV16fUsIi", "", "avx512dq")
-TARGET_BUILTIN(__builtin_ia32_prold512_mask, "V16iV16iIiV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prolq512_mask, "V8LLiV8LLiIiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prold128_mask, "V4iV4iIiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prold256_mask, "V8iV8iIiV8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolq128_mask, "V2LLiV2LLiIiV2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolq256_mask, "V4LLiV4LLiIiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvd512_mask, "V16iV16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prolvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prord512_mask, "V16iV16iiV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prorq512_mask, "V8LLiV8LLiiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prolvd128_mask, "V4iV4iV4iV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvd256_mask, "V8iV8iV8iV8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prolvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prord128_mask, "V4iV4iIiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prord256_mask, "V8iV8iIiV8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorq128_mask, "V2LLiV2LLiIiV2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorq256_mask, "V4LLiV4LLiIiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvd512_mask, "V16iV16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prorvq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_prorvd128_mask, "V4iV4iV4iV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvd256_mask, "V8iV8iV8iV8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvq128_mask, "V2LLiV2LLiV2LLiV2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_prorvq256_mask, "V4LLiV4LLiV4LLiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psllv32hi, "V32sV32sV32s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psllw512, "V32sV32sV8s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psllwi512, "V32sV32si","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psllv16hi, "V16sV16sV16s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psllv8hi, "V8sV8sV8s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pslldi512, "V16iV16ii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllqi512, "V8LLiV8LLii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlv32hi, "V32sV32sV32s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrlv16hi, "V16sV16sV16s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psrlv8hi, "V8sV8sV8s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psrldi512, "V16iV16ii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlqi512, "V8LLiV8LLii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrav32hi, "V32sV32sV32s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrav16hi, "V16sV16sV16s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psrav8hi, "V8sV8sV8s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psravq128, "V2LLiV2LLiV2LLi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psravq256, "V4LLiV4LLiV4LLi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraw512, "V32sV32sV8s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrawi512, "V32sV32si","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrlw512, "V32sV32sV8s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psrlwi512, "V32sV32si","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_movdqa32load128_mask, "V4iV4i*V4iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa32load256_mask, "V8iV8i*V8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa32load512_mask, "V16iV16iC*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa32store512_mask, "vV16i*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load512_mask, "V8LLiV8LLiC*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store512_mask, "vV8LLi*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa32store128_mask, "vV4i*V4iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa32store256_mask, "vV8i*V8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask, "V2LLiV2LLiC*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4LLiV4LLiC*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2LLi*V2LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4LLi*V4LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc","","avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc","","avx512ifma")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128_mask, "V2LLiV2LLiV2LLiV2LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256_mask, "V4LLiV4LLiV4LLiV4LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128_mask, "V2LLiV2LLiV2LLiV2LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128_maskz, "V2LLiV2LLiV2LLiV2LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256_mask, "V4LLiV4LLiV4LLiV4LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256_maskz, "V4LLiV4LLiV4LLiV4LLiUc","","avx512ifma,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varqi512_mask, "V64cV64cV64cV64cULLi","","avx512vbmi")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi512_mask, "V64cV64cV64cV64cULLi","","avx512vbmi")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi512_maskz, "V64cV64cV64cV64cULLi","","avx512vbmi")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varqi128_mask, "V16cV16cV16cV16cUs","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varqi256_mask, "V32cV32cV32cV32cUi","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi128_mask, "V16cV16cV16cV16cUs","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi128_maskz, "V16cV16cV16cV16cUs","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi256_mask, "V32cV32cV32cV32cUi","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varqi256_maskz, "V32cV32cV32cV32cUi","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vcomisd, "iV2dV2dIiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcomiss, "iV4fV4fIiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kunpckdi, "ULLiULLiULLi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_kunpcksi, "UiUiUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_loaddquhi512_mask, "V32sV32s*V32sUi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64c*V64cULLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_mask, "V8dV8dV8dV8LLiIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_maskz, "V8dV8dV8dV8LLiIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps512_mask, "V16fV16fV16fV16iIiUsIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps512_maskz, "V16fV16fV16fV16iIiUsIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmsd_mask, "V2dV2dV2dV2LLiIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmsd_maskz, "V2dV2dV2dV2LLiIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmss_mask, "V4fV4fV4fV4iIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_fixupimmss_maskz, "V4fV4fV4fV4iIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getexpsd128_round_mask, "V2dV2dV2dV2dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getexpss128_round_mask, "V4fV4fV4fV4fUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getmantsd_round_mask, "V2dV2dV2dIiV2dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getmantss_round_mask, "V4fV4fV4fIiV4fUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddquhi128_mask, "V8sV8s*V8sUc","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddquhi256_mask, "V16sV16s*V16sUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddquqi128_mask, "V16cV16c*V16cUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddquqi256_mask, "V32cV32c*V32cUi","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_mask, "V2dV2dV2dV2LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_maskz, "V2dV2dV2dV2LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_mask, "V4dV4dV4dV4LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_maskz, "V4dV4dV4dV4LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps128_mask, "V4fV4fV4fV4iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps128_maskz, "V4fV4fV4fV4iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps256_mask, "V8fV8fV8fV8iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fixupimmps256_maskz, "V8fV8fV8fV8iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadapd128_mask, "V2dV2d*V2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadsd128_mask, "V8dV8d*V8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadapd256_mask, "V4dV4d*V4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadaps128_mask, "V4fV4f*V4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadss128_mask, "V16fV16f*V16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadaps256_mask, "V8fV8f*V8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi128_mask, "V2LLiV2LLi*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddqudi256_mask, "V4LLiV4LLi*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loaddqusi128_mask, "V4iV4i*V4iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loaddqusi256_mask, "V8iV8i*V8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_loadupd128_mask, "V2dV2d*V2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadupd256_mask, "V4dV4d*V4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadups128_mask, "V4fV4f*V4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_loadups256_mask, "V8fV8f*V8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedquhi512_mask, "vV32s*V32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cULLi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquhi128_mask, "vV8s*V8sUc","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquhi256_mask, "vV16s*V16sUs","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquqi128_mask, "vV16c*V16cUs","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storedquqi256_mask, "vV32c*V32cUi","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_storeapd128_mask, "vV2d*V2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storesd128_mask, "vV8d*V8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeapd256_mask, "vV4d*V4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storeaps128_mask, "vV4f*V4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storess128_mask, "vV16f*V16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_storeaps256_mask, "vV8f*V8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2LLi*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4LLi*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqusi128_mask, "vV4i*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storedqusi256_mask, "vV8i*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storeupd128_mask, "vV2d*V2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storeupd256_mask, "vV4d*V4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storeups128_mask, "vV4f*V4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_storeups256_mask, "vV8f*V8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rcp14pd128_mask, "V2dV2dV2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rcp14pd256_mask, "V4dV4dV4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rcp14ps128_mask, "V4fV4fV4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rcp14ps256_mask, "V8fV8fV8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntd_128_mask, "V4iV4iV4iUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntd_256_mask, "V8iV8iV8iUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_128_mask, "V2LLiV2LLiV2LLiUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vplzcntq_256_mask, "V4LLiV4LLiV4LLiUc","","avx512cd,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2si32, "iV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi32, "UiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2si32, "iV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2usi32, "UiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2si32, "iV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi32, "UiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2si32, "iV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2usi32, "UiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2vard512_mask, "V16iV16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varpd512_mask, "V8dV8dV8LLiV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varps512_mask, "V16fV16fV16iV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermi2varq512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermilvarps512, "V16fV16fV16i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2vard512_maskz, "V16iV16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varpd512_maskz, "V8dV8LLiV8dV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varps512_maskz, "V16fV16iV16fV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpermt2varq512_maskz, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_rndscalesd_round_mask, "V2dV2dV2dV2dUcIiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_rndscaless_round_mask, "V4fV4fV4fV4fUcIiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_scalefpd512_mask, "V8dV8dV8dV8dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_scalefps512_mask, "V16fV16fV16fV16fUsIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_scalefsd_round_mask, "V2dV2dV2dV2dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_scalefss_round_mask, "V4fV4fV4fV4fUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psradi512, "V16iV16ii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraqi512, "V8LLiV8LLii","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraq128, "V2LLiV2LLiV2LLi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraq256, "V4LLiV4LLiV2LLi","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraqi128, "V2LLiV2LLii","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_psraqi256, "V4LLiV4LLii","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pslld512, "V16iV16iV4i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllq512, "V8LLiV8LLiV2LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllv16si, "V16iV16iV16i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psllv8di, "V8LLiV8LLiV8LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrad512, "V16iV16iV4i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psraq512, "V8LLiV8LLiV2LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrav16si, "V16iV16iV16i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrav8di, "V8LLiV8LLiV8LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrld512, "V16iV16iV4i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlq512, "V8LLiV8LLiV2LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlv16si, "V16iV16iV16i","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_psrlv8di, "V8LLiV8LLiV8LLi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogd512_mask, "V16iV16iV16iV16iIiUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogd512_maskz, "V16iV16iV16iV16iIiUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogq512_mask, "V8LLiV8LLiV8LLiV8LLiIiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogq512_maskz, "V8LLiV8LLiV8LLiV8LLiIiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pternlogd128_mask, "V4iV4iV4iV4iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogd128_maskz, "V4iV4iV4iV4iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogd256_mask, "V8iV8iV8iV8iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogd256_maskz, "V8iV8iV8iV8iIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq128_mask, "V2LLiV2LLiV2LLiV2LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq128_maskz, "V2LLiV2LLiV2LLiV2LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq256_mask, "V4LLiV4LLiV4LLiV4LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pternlogq256_maskz, "V4LLiV4LLiV4LLiV4LLiIiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_shuf_f32x4_mask, "V16fV16fV16fIiV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_shuf_f64x2_mask, "V8dV8dV8dIiV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_shuf_i32x4_mask, "V16iV16iV16iIiV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_mask, "V8LLiV8LLiV8LLiIiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_shuf_f32x4_256_mask, "V8fV8fV8fIiV8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_shuf_f64x2_256_mask, "V4dV4dV4dIiV4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_shuf_i32x4_256_mask, "V8iV8iV8iIiV8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_256_mask, "V4LLiV4LLiV4LLiIiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_sqrtsd_round_mask, "V2dV2dV2dV2dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_sqrtss_round_mask, "V4fV4fV4fV4fUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14pd128_mask, "V2dV2dV2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14pd256_mask, "V4dV4dV4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14ps128_mask, "V4fV4fV4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_rsqrt14ps256_mask, "V8fV8fV8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtb2mask512, "ULLiV64c","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2b512, "V64cULLi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2w512, "V32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtd2mask512, "UsV16i","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2d512, "V16iUs","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q512, "V8LLiUc","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask512, "UcV8LLi","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_cvtb2mask128, "UsV16c","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtb2mask256, "UiV32c","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2b128, "V16cUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2b256, "V32cUi","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2w128, "V8sUc","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2w256, "V16sUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtd2mask128, "UcV4i","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtd2mask256, "UcV8i","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2d128, "V4iUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2d256, "V8iUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q128, "V2LLiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtmask2q256, "V4LLiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask128, "UcV2LLi","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtq2mask256, "UcV4LLi","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb512_mask, "V16cV16iV16cUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb512mem_mask, "vV16c*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovswb512mem_mask, "vV32c*V32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw512_mask, "V16sV16iV16sUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw512mem_mask, "vV16s*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb512_mask, "V16cV8LLiV16cUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb512mem_mask, "vV16c*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd512_mask, "V8iV8LLiV8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd512mem_mask, "vV8i*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw512_mask, "V8sV8LLiV8sUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw512mem_mask, "vV8s*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb128_mask, "V16cV4iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb128mem_mask, "vV16c*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovswb128mem_mask, "vV16c*V8sUc","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb256_mask, "V16cV8iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdb256mem_mask, "vV16c*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovswb256mem_mask, "vV16c*V16sUs","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw128_mask, "V8sV4iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw128mem_mask, "vV8s*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw256_mask, "V8sV8iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsdw256mem_mask, "vV8s*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb128_mask, "V16cV2LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb128mem_mask, "vV16c*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb256_mask, "V16cV4LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqb256mem_mask, "vV16c*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd128_mask, "V4iV2LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd128mem_mask, "vV4i*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd256_mask, "V4iV4LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqd256mem_mask, "vV4i*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw128_mask, "V8sV2LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw128mem_mask, "vV8s*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw256_mask, "V8sV4LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovsqw256mem_mask, "vV8s*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb512_mask, "V16cV16iV16cUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb512mem_mask, "vV16c*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb512mem_mask, "vV32c*V32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw512_mask, "V16sV16iV16sUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw512mem_mask, "vV16s*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb512_mask, "V16cV8LLiV16cUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb512mem_mask, "vV16c*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd512_mask, "V8iV8LLiV8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd512mem_mask, "vV8i*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw512_mask, "V8sV8LLiV8sUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw512mem_mask, "vV8s*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb128_mask, "V16cV4iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb128mem_mask, "vV16c*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb128mem_mask, "vV16c*V8sUc","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb256_mask, "V16cV8iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdb256mem_mask, "vV16c*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovuswb256mem_mask, "vV16c*V16sUs","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw128_mask, "V8sV4iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw128mem_mask, "vV8s*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw256_mask, "V8sV8iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusdw256mem_mask, "vV8s*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb128_mask, "V16cV2LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb128mem_mask, "vV16c*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb256_mask, "V16cV4LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqb256mem_mask, "vV16c*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd128_mask, "V4iV2LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd128mem_mask, "vV4i*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd256_mask, "V4iV4LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqd256mem_mask, "vV4i*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw128_mask, "V8sV2LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw128mem_mask, "vV8s*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw256_mask, "V8sV4LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovusqw256mem_mask, "vV8s*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdb512_mask, "V16cV16iV16cUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovdb512mem_mask, "vV16c*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovwb512mem_mask, "vV32c*V32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovdw512_mask, "V16sV16iV16sUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovdw512mem_mask, "vV16s*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqb512_mask, "V16cV8LLiV16cUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqb512mem_mask, "vV16c*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqd512_mask, "V8iV8LLiV8iUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqd512mem_mask, "vV8i*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqw512_mask, "V8sV8LLiV8sUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovqw512mem_mask, "vV8s*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_pmovdb128_mask, "V16cV4iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovwb128mem_mask, "vV16c*V8sUc","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovdb128mem_mask, "vV16c*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdb256_mask, "V16cV8iV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdb256mem_mask, "vV16c*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovwb256mem_mask, "vV16c*V16sUs","","avx512vl,avx512bw")
-TARGET_BUILTIN(__builtin_ia32_pmovdw128_mask, "V8sV4iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdw128mem_mask, "vV8s*V4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdw256_mask, "V8sV8iV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovdw256mem_mask, "vV8s*V8iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb128_mask, "V16cV2LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb128mem_mask, "vV16c*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb256_mask, "V16cV4LLiV16cUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqb256mem_mask, "vV16c*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd128_mask, "V4iV2LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd128mem_mask, "vV4i*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd256_mask, "V4iV4LLiV4iUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqd256mem_mask, "vV4i*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw128_mask, "V8sV2LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw128mem_mask, "vV8s*V2LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw256_mask, "V8sV4LLiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_pmovqw256mem_mask, "vV8s*V4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getmantpd128_mask, "V2dV2diV2dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getmantpd256_mask, "V4dV4diV4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getmantps128_mask, "V4fV4fiV4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getmantps256_mask, "V8fV8fiV8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_getmantpd512_mask, "V8dV8diV8dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getmantps512_mask, "V16fV16fiV16fUsIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getexppd512_mask, "V8dV8dV8dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_getexpps512_mask, "V16fV16fV16fUsIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask,  "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddss3_maskz, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask3, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask,  "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_maskz, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask3, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmsubsd3_mask3, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfmsubss3_mask3, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubsd3_mask3, "V2dV2dV2dV2dUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_vfnmsubss3_mask3, "V4fV4fV4fV4fUcIi", "", "avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvarhi512_mask, "V32sV32sV32sV32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_permvardf512_mask, "V8dV8dV8LLiV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvardi512_mask, "V8LLiV8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvarsf512_mask, "V16fV16fV16iV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvarsi512_mask, "V16iV16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_permvarqi512_mask, "V64cV64cV64cV64cULLi","","avx512vbmi")
-TARGET_BUILTIN(__builtin_ia32_permvarqi128_mask, "V16cV16cV16cV16cUs","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvarqi256_mask, "V32cV32cV32cV32cUi","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvarhi128_mask, "V8sV8sV8sV8sUc","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvarhi256_mask, "V16sV16sV16sV16sUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvardf256_mask, "V4dV4dV4LLiV4dUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_permvardi256_mask, "V4LLiV4LLiV4LLiV4LLiUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fpclasspd128_mask, "UcV2dIiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fpclasspd256_mask, "UcV4dIiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fpclassps128_mask, "UcV4fIiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fpclassps256_mask, "UcV8fIiUc","","avx512dq,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_fpclassps512_mask, "UsV16fIiUs","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_fpclasspd512_mask, "UcV8dIiUc","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_fpclasssd_mask, "UcV2dIiUc","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_fpclassss_mask, "UcV4fIiUc","","avx512dq")
-TARGET_BUILTIN(__builtin_ia32_kandhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kandnhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_korhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kortestchi, "iUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kortestzhi, "iUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kunpckhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kxnorhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_kxorhi, "UsUsUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_palignr512_mask, "V64cV64cV64cIiV64cULLi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_dbpsadbw128_mask, "V8sV16cV16cIiV8sUc","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_dbpsadbw256_mask, "V16sV32cV32cIiV16sUs","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_dbpsadbw512_mask, "V32sV64cV64cIiV32sUi","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_psadbw512, "V8LLiV64cV64c","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_compressdf512_mask, "V8dV8dV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressdi512_mask, "V8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compresshi512_mask, "V32sV32sV32sUi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressqi512_mask, "V64cV64cV64cULLi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compresssf512_mask, "V16fV16fV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compresssi512_mask, "V16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpsd_mask, "UcV2dV2dIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cmpss_mask, "UcV4fV4fIiUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expanddf512_mask, "V8dV8dV8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expanddi512_mask, "V8LLiV8LLiV8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandhi512_mask, "V32sV32sV32sUi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandqi512_mask, "V64cV64cV64cULLi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloaddf512_mask, "V8dV8dC*V8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandloaddi512_mask, "V8LLiV8LLiC*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandloadhi512_mask, "V32sV32sC*V32sUi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadqi512_mask, "V64cV64cC*V64cULLi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_expandloadsf512_mask, "V16fV16fC*V16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandloadsi512_mask, "V16iV16iC*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandsf512_mask, "V16fV16fV16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_expandsi512_mask, "V16iV16iV16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtps2pd512_mask, "V8dV8fV8dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressstoredf512_mask, "vV8d*V8dUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressstoredi512_mask, "vV8LLi*V8LLiUc","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressstorehi512_mask, "vV32s*V32sUi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstoreqi512_mask, "vV64c*V64cULLi","","avx512vbmi2")
-TARGET_BUILTIN(__builtin_ia32_compressstoresf512_mask, "vV16f*V16fUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_compressstoresi512_mask, "vV16i*V16iUs","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtph2ps_mask, "V4fV8sV4fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256_mask, "V8fV8sV8fUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vcvtps2ph_mask, "V8sV4fIiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256_mask, "V8sV8fIiV8sUc","","avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtw2mask512, "UiV32s","","avx512bw")
-TARGET_BUILTIN(__builtin_ia32_cvtw2mask128, "UcV8s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtw2mask256, "UsV16s","","avx512bw,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_cvtsd2ss_round_mask, "V4fV4fV2dV4fUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtsi2ss32, "V4fV4fiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtss2sd_round_mask, "V2dV2dV4fV2dUcIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2sd32, "V2dV2dUi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2ss32, "V4fV4fUiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb512_mask, "V64cV64cV64cV64cULLi","","avx512vbmi")
-TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb128_mask, "V16cV16cV16cV16cUs","","avx512vbmi,avx512vl")
-TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb256_mask, "V32cV32cV32cV32cUi","","avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovwb512_mask, "V32cV32sV32cUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps256_mask, "V4fV4LLiV4fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq128_mask, "V2LLiV2dV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq256_mask, "V4LLiV4dV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq128_mask, "V2LLiV4fV2LLiUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq256_mask, "V4LLiV4fV4LLiUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps128_mask, "V4fV2LLiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps256_mask, "V4fV4LLiV4fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd128_mask, "V2dV2dV2dIiV2dUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd256_mask, "V4dV4dV4dIiV4dUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps128_mask, "V4fV4fV4fIiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps256_mask, "V8fV8fV8fIiV8fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangesd128_round_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangess128_round_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl,avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducesd_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducess_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_pmovswb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovswb256_mask, "V16cV16sV16cUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb256_mask, "V16cV16sV16cUs", "ncV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovwb128_mask, "V16cV8sV16cUc", "ncV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2qq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttpd2uqq512_mask, "V8LLiV8dV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2qq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvttps2uqq512_mask, "V8LLiV8fV8LLiUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2pd512_mask, "V8dV8LLiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtuqq2ps512_mask, "V8fV8LLiV8fUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangepd512_mask, "V8dV8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_rangeps512_mask, "V16fV16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reducepd512_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_reduceps512_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_prold512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prold128, "V4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prold256, "V8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prord512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorq512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prolvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prolvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prord128, "V4iV4iIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prord256, "V8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq128, "V2LLiV2LLiIi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorq256, "V4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvd512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorvq512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_prorvd128, "V4iV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvd256, "V8iV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_prorvq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pshufhw512, "V32sV32sIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pshuflw512, "V32sV32sIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllwi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psllv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psllv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pslldi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlv16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrlv8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrldi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav32hi, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrav16hi, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psrav8hi, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psravq256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrawi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlw512, "V32sV32sV8s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrlwi512, "V32sV32si", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pslldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psrldqi512_byteshift, "V8LLiV8LLiIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32load512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa32store256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load128_mask, "V2LLiV2LLiC*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64load256_mask, "V4LLiV4LLiC*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_movdqa64store256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq512, "V8LLiV8LLiV8LLiV8LLi", "ncV:512:", "avx512ifma")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52huq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq128, "V2LLiV2LLiV2LLiV2LLi", "ncV:128:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmadd52luq256, "V4LLiV4LLiV4LLiV4LLi", "ncV:256:", "avx512ifma,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcomisd, "iV2dV2dIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcomiss, "iV4fV4fIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kunpckdi, "ULLiULLiULLi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_kunpcksi, "UiUiUi", "nc", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi512_mask, "V32sV32s*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi512_mask, "V64cV64c*V64cULLi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_mask, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd512_maskz, "V8dV8dV8dV8LLiIiUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps512_mask, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps512_maskz, "V16fV16fV16fV16iIiUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_mask, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmsd_maskz, "V2dV2dV2dV2LLiIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmss_mask, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_fixupimmss_maskz, "V4fV4fV4fV4iIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpsd128_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpss128_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantsd_round_mask, "V2dV2dV2dIiV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantss_round_mask, "V4fV4fV4fIiV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi128_mask, "V8sV8s*V8sUc", "nV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquhi256_mask, "V16sV16s*V16sUs", "nV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi128_mask, "V16cV16c*V16cUs", "nV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddquqi256_mask, "V32cV32c*V32cUi", "nV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_mask, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd128_maskz, "V2dV2dV2dV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_mask, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmpd256_maskz, "V4dV4dV4dV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps128_mask, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps128_maskz, "V4fV4fV4fV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps256_mask, "V8fV8fV8fV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fixupimmps256_maskz, "V8fV8fV8fV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadapd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadsd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadapd256_mask, "V4dV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadaps128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadss128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_loadaps256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi128_mask, "V2LLiV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqudi256_mask, "V4LLiV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi128_mask, "V4iV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loaddqusi256_mask, "V8iV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadupd128_mask, "V2dV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadupd256_mask, "V4dV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadups128_mask, "V4fV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_loadups256_mask, "V8fV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedquhi512_mask, "vV32s*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquhi128_mask, "vV8s*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquhi256_mask, "vV16s*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi128_mask, "vV16c*V16cUs", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storedquqi256_mask, "vV32c*V32cUi", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_storeapd128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storesd128_mask, "vV2d*V2dUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeapd256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeaps128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storess128_mask, "vV4f*V4fUc", "nV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_storeaps256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2LLi*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4LLi*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqusi128_mask, "vV4i*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storedqusi256_mask, "vV8i*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeupd128_mask, "vV2d*V2dUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeupd256_mask, "vV4d*V4dUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeups128_mask, "vV4f*V4fUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_storeups256_mask, "vV8f*V8fUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14pd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rcp14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_128, "V4iV4i", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntd_256, "V8iV8i", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_128, "V2LLiV2LLi", "ncV:128:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vplzcntq_256, "V4LLiV4LLi", "ncV:256:", "avx512cd,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2si32, "iV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi32, "UiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2si32, "iV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2usi32, "UiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2si32, "iV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi32, "UiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2si32, "iV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2usi32, "UiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilpd512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilps512, "V16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarpd512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpermilvarps512, "V16fV16fV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscalesd_round_mask, "V2dV2dV2dV2dUcIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rndscaless_round_mask, "V4fV4fV4fV4fUcIiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefpd512_mask, "V8dV8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefps512_mask, "V16fV16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_scalefss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psradi512, "V16iV16ii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraqi512, "V8LLiV8LLii", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq128, "V2LLiV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraq256, "V4LLiV4LLiV2LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi128, "V2LLiV2LLii", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_psraqi256, "V4LLiV4LLii", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pslld512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psllv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrad512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psraq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrav8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrld512, "V16iV16iV4i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlq512, "V8LLiV8LLiV2LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv16si, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_psrlv8di, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd512_mask, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd512_maskz, "V16iV16iV16iV16iIiUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_mask, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogq512_maskz, "V8LLiV8LLiV8LLiV8LLiIiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pternlogd128_mask, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd128_maskz, "V4iV4iV4iV4iIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd256_mask, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogd256_maskz, "V8iV8iV8iV8iIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_mask, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq128_maskz, "V2LLiV2LLiV2LLiV2LLiIiUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_mask, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pternlogq256_maskz, "V4LLiV4LLiV4LLiV4LLiIiUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_f32x4, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_f64x2, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_i32x4, "V16iV16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2, "V8LLiV8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shufpd512, "V8dV8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shufps512, "V16fV16fV16fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_shuf_f32x4_256, "V8fV8fV8fIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_f64x2_256, "V4dV4dV4dIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_i32x4_256, "V8iV8iV8iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_shuf_i64x2_256, "V4LLiV4LLiV4LLiIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_sqrtsd_round_mask, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_sqrtss_round_mask, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd128_mask, "V2dV2dV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14pd256_mask, "V4dV4dV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps128_mask, "V4fV4fV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_rsqrt14ps256_mask, "V8fV8fV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask512, "ULLiV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b512, "V64cULLi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w512, "V32sUi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask512, "UsV16i", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d512, "V16iUs", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q512, "V8LLiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask512, "UcV8LLi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask128, "UsV16c", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtb2mask256, "UiV32c", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b128, "V16cUs", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2b256, "V32cUi", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w128, "V8sUc", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2w256, "V16sUs", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask128, "UcV4i", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtd2mask256, "UcV8i", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d128, "V4iUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2d256, "V8iUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q128, "V2LLiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtmask2q256, "V4LLiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask128, "UcV2LLi", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtq2mask256, "UcV4LLi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovswb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovsqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovuswb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256_mask, "V4iV4LLiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovusqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb512_mask, "V16cV16iV16cUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdb512mem_mask, "vV16c*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovwb512mem_mask, "vV32c*V32sUi", "nV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdw512_mask, "V16sV16iV16sUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdw512mem_mask, "vV16s*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512_mask, "V16cV8LLiV16cUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqb512mem_mask, "vV16c*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512_mask, "V8iV8LLiV8iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqd512mem_mask, "vV8i*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512_mask, "V8sV8LLiV8sUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovqw512mem_mask, "vV8s*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pmovdb128_mask, "V16cV4iV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovwb128mem_mask, "vV16c*V8sUc", "nV:128:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdb128mem_mask, "vV16c*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb256_mask, "V16cV8iV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdb256mem_mask, "vV16c*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovwb256mem_mask, "vV16c*V16sUs", "nV:256:", "avx512vl,avx512bw")
+TARGET_BUILTIN(__builtin_ia32_pmovdw128_mask, "V8sV4iV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw128mem_mask, "vV8s*V4iUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw256_mask, "V8sV8iV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovdw256mem_mask, "vV8s*V8iUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128_mask, "V16cV2LLiV16cUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb128mem_mask, "vV16c*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256_mask, "V16cV4LLiV16cUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqb256mem_mask, "vV16c*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128_mask, "V4iV2LLiV4iUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd128mem_mask, "vV4i*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqd256mem_mask, "vV4i*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128_mask, "V8sV2LLiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw128mem_mask, "vV8s*V2LLiUc", "nV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256_mask, "V8sV4LLiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_pmovqw256mem_mask, "vV8s*V4LLiUc", "nV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf32x8_mask, "V8fV16fIiV8fUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extractf64x2_512_mask, "V2dV8dIiV2dUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti32x8_mask, "V8iV16iIiV8iUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_512_mask, "V2LLiV8LLiIiV2LLiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_extracti32x4_mask, "V4iV16iIiV4iUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extracti64x4_mask, "V4LLiV8LLiIiV4LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_extractf64x2_256_mask, "V2dV4dIiV2dUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extracti64x2_256_mask, "V2LLiV4LLiIiV2LLiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extractf32x4_256_mask, "V4fV8fIiV4fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_extracti32x4_256_mask, "V4iV8iIiV4iUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x8, "V16fV16fV8fIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_insertf64x2_512, "V8dV8dV2dIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_inserti32x8, "V16iV16iV8iIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_512, "V8LLiV8LLiV2LLiIi", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_insertf64x4, "V8dV8dV4dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_inserti64x4, "V8LLiV8LLiV4LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_insertf64x2_256, "V4dV4dV2dIi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_inserti64x2_256, "V4LLiV4LLiV2LLiIi", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x4_256, "V8fV8fV4fIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_inserti32x4_256, "V8iV8iV4iIi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_insertf32x4, "V16fV16fV4fIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_inserti32x4, "V16iV16iV4iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantpd128_mask, "V2dV2dIiV2dUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantpd256_mask, "V4dV4dIiV4dUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantps128_mask, "V4fV4fIiV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantps256_mask, "V8fV8fIiV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_getmantpd512_mask, "V8dV8dIiV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getmantps512_mask, "V16fV16fIiV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexppd512_mask, "V8dV8dV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_getexpps512_mask, "V16fV16fV16fUsIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask,  "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_maskz, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddss3_mask3, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask,  "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_maskz, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmaddsd3_mask3, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubsd3_mask3, "V2dV2dV2dV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vfmsubss3_mask3, "V4fV4fV4fV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permdf512, "V8dV8dIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permdi512, "V8LLiV8LLiIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarhi512, "V32sV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_permvardf512, "V8dV8dV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvardi512, "V8LLiV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarsf512, "V16fV16fV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarsi512, "V16iV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_permvarqi512, "V64cV64cV64c", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_permvarqi128, "V16cV16cV16c", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarqi256, "V32cV32cV32c", "ncV:256:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarhi128, "V8sV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvarhi256, "V16sV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardf256, "V4dV4dV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_permvardi256, "V4LLiV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd128_mask, "UcV2dIiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd256_mask, "UcV4dIiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps128_mask, "UcV4fIiUc", "ncV:128:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps256_mask, "UcV8fIiUc", "ncV:256:", "avx512dq,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_fpclassps512_mask, "UsV16fIiUs", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclasspd512_mask, "UcV8dIiUc", "ncV:512:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclasssd_mask, "UcV2dIiUc", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_fpclassss_mask, "UcV4fIiUc", "ncV:128:", "avx512dq")
+TARGET_BUILTIN(__builtin_ia32_kandhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kandnhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_korhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kortestchi, "iUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kortestzhi, "iUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kunpckhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kxnorhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_kxorhi, "UsUsUs", "nc", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_palignr512, "V64cV64cV64cIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw128, "V8sV16cV16cIi", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw256, "V16sV32cV32cIi", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_dbpsadbw512, "V32sV64cV64cIi", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_psadbw512, "V8LLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_compressdf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressdi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compresshi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compresssf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compresssi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpsd_mask, "UcV2dV2dIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cmpss_mask, "UcV4fV4fIiUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_pshufd512, "V16iV16iIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expanddf512_mask, "V8dV8dV8dUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expanddi512_mask, "V8LLiV8LLiV8LLiUc", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandhi512_mask, "V32sV32sV32sUi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandqi512_mask, "V64cV64cV64cULLi", "ncV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloaddf512_mask, "V8dV8dC*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloaddi512_mask, "V8LLiV8LLiC*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloadhi512_mask, "V32sV32sC*V32sUi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadqi512_mask, "V64cV64cC*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_expandloadsf512_mask, "V16fV16fC*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandloadsi512_mask, "V16iV16iC*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandsf512_mask, "V16fV16fV16fUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_expandsi512_mask, "V16iV16iV16iUs", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtps2pd512_mask, "V8dV8fV8dUcIi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoredf512_mask, "vV8d*V8dUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoredi512_mask, "vV8LLi*V8LLiUc", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstorehi512_mask, "vV32s*V32sUi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoreqi512_mask, "vV64c*V64cULLi", "nV:512:", "avx512vbmi2")
+TARGET_BUILTIN(__builtin_ia32_compressstoresf512_mask, "vV16f*V16fUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_compressstoresi512_mask, "vV16i*V16iUs", "nV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps_mask, "V4fV8sV4fUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtph2ps256_mask, "V8fV8sV8fUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph_mask, "V8sV4fIiV8sUc", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vcvtps2ph256_mask, "V8sV8fIiV8sUc", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask512, "UiV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask128, "UcV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtw2mask256, "UsV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2ss_round_mask, "V4fV4fV2dV4fUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2ss32, "V4fV4fiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtss2sd_round_mask, "V2dV2dV4fV2dUcIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2ss32, "V4fV4fUiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb512_mask, "V64cV64cV64cV64cULLi", "ncV:512:", "avx512vbmi")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb128_mask, "V16cV16cV16cV16cUs", "ncV:128:", "avx512vbmi,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_vpmultishiftqb256_mask, "V32cV32cV32cV32cUi", "ncV:256:", "avx512vbmi,avx512vl")
 
 // generic select intrinsics
-TARGET_BUILTIN(__builtin_ia32_selectb_128, "V16cUsV16cV16c", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectb_256, "V32cUiV32cV32c", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectb_512, "V64cULLiV64cV64c", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectw_128, "V8sUcV8sV8s", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectw_256, "V16sUsV16sV16s", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectw_512, "V32sUiV32sV32s", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectd_128, "V4iUcV4iV4i", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectd_256, "V8iUcV8iV8i", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectd_512, "V16iUsV16iV16i", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectq_128, "V2LLiUcV2LLiV2LLi", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectq_256, "V4LLiUcV4LLiV4LLi", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectq_512, "V8LLiUcV8LLiV8LLi", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectps_128, "V4fUcV4fV4f", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectps_256, "V8fUcV8fV8f", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectps_512, "V16fUsV16fV16f", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectpd_128, "V2dUcV2dV2d", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectpd_256, "V4dUcV4dV4d", "", "")
-TARGET_BUILTIN(__builtin_ia32_selectpd_512, "V8dUcV8dV8d", "", "")
+TARGET_BUILTIN(__builtin_ia32_selectb_128, "V16cUsV16cV16c", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectb_256, "V32cUiV32cV32c", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectb_512, "V64cULLiV64cV64c", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_selectw_128, "V8sUcV8sV8s", "ncV:128:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectw_256, "V16sUsV16sV16s", "ncV:256:", "avx512bw,avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectw_512, "V32sUiV32sV32s", "ncV:512:", "avx512bw")
+TARGET_BUILTIN(__builtin_ia32_selectd_128, "V4iUcV4iV4i", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectd_256, "V8iUcV8iV8i", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectd_512, "V16iUsV16iV16i", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectq_128, "V2LLiUcV2LLiV2LLi", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_256, "V4LLiUcV4LLiV4LLi", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectq_512, "V8LLiUcV8LLiV8LLi", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectps_128, "V4fUcV4fV4f", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectps_256, "V8fUcV8fV8f", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectps_512, "V16fUsV16fV16f", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectpd_128, "V2dUcV2dV2d", "ncV:128:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectpd_256, "V4dUcV4dV4d", "ncV:256:", "avx512vl")
+TARGET_BUILTIN(__builtin_ia32_selectpd_512, "V8dUcV8dV8d", "ncV:512:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectss_128, "V4fUcV4fV4f", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_selectsd_128, "V2dUcV2dV2d", "ncV:128:", "avx512f")
 
 // MONITORX/MWAITX
-TARGET_BUILTIN(__builtin_ia32_monitorx, "vv*UiUi", "", "mwaitx")
-TARGET_BUILTIN(__builtin_ia32_mwaitx, "vUiUiUi", "", "mwaitx")
+TARGET_BUILTIN(__builtin_ia32_monitorx, "vv*UiUi", "n", "mwaitx")
+TARGET_BUILTIN(__builtin_ia32_mwaitx, "vUiUiUi", "n", "mwaitx")
+
+// WAITPKG
+TARGET_BUILTIN(__builtin_ia32_umonitor, "vv*", "n", "waitpkg")
+TARGET_BUILTIN(__builtin_ia32_umwait, "UcUiUiUi", "n", "waitpkg")
+TARGET_BUILTIN(__builtin_ia32_tpause, "UcUiUiUi", "n", "waitpkg")
 
 // CLZERO
-TARGET_BUILTIN(__builtin_ia32_clzero, "vv*", "", "clzero")
+TARGET_BUILTIN(__builtin_ia32_clzero, "vv*", "n", "clzero")
+
+// CLDEMOTE
+TARGET_BUILTIN(__builtin_ia32_cldemote, "vvC*", "n", "cldemote")
+
+// Direct Move
+TARGET_BUILTIN(__builtin_ia32_directstore_u32, "vUi*Ui", "n", "movdiri")
+TARGET_BUILTIN(__builtin_ia32_movdir64b, "vv*vC*", "n", "movdir64b")
+
+// PTWRITE
+TARGET_BUILTIN(__builtin_ia32_ptwrite32, "vUi", "n", "ptwrite")
+
+// INVPCID
+TARGET_BUILTIN(__builtin_ia32_invpcid, "vUiv*", "nc", "invpcid")
 
 // MSVC
 TARGET_HEADER_BUILTIN(_BitScanForward, "UcUNi*UNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
@@ -1887,14 +1845,14 @@
 TARGET_HEADER_BUILTIN(_ReadBarrier,      "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(_WriteBarrier,     "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 
-TARGET_HEADER_BUILTIN(__emul,  "LLiii",    "nh", "intrin.h", ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__emulu, "ULLiUiUi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__emul,  "LLiii",    "nch", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__emulu, "ULLiUiUi", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
 
 TARGET_HEADER_BUILTIN(_AddressOfReturnAddress, "v*", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 
 TARGET_HEADER_BUILTIN(__stosb, "vUc*Ucz", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__int2c, "v",       "nr", "intrin.h", ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__ud2,   "v",       "nr", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__int2c, "v",       "nhr", "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__ud2,   "v",       "nhr", "intrin.h", ALL_MS_LANGUAGES, "")
 
 TARGET_HEADER_BUILTIN(__readfsbyte,  "UcUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(__readfsword,  "UsUNi", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
diff --git a/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def b/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
index fe2c887..cc400c0 100644
--- a/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
+++ b/linux-x64/clang/include/clang/Basic/BuiltinsX86_64.def
@@ -27,8 +27,8 @@
 
 TARGET_HEADER_BUILTIN(__mulh,  "LLiLLiLLi",    "nch", "intrin.h", ALL_MS_LANGUAGES, "")
 TARGET_HEADER_BUILTIN(__umulh, "ULLiULLiULLi", "nch", "intrin.h", ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_mul128, "LLiLLiLLiLLi*",      "nh",   "intrin.h", ALL_MS_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(_umul128, "ULLiULLiULLiULLi*", "nh",   "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_mul128, "LLiLLiLLiLLi*",      "nch",   "intrin.h", ALL_MS_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(_umul128, "ULLiULLiULLiULLi*", "nch",   "intrin.h", ALL_MS_LANGUAGES, "")
 
 TARGET_HEADER_BUILTIN(__faststorefence, "v", "nh", "intrin.h", ALL_MS_LANGUAGES, "")
 
@@ -44,50 +44,62 @@
 
 TARGET_BUILTIN(__builtin_ia32_readeflags_u64, "ULLi", "n", "")
 TARGET_BUILTIN(__builtin_ia32_writeeflags_u64, "vULLi", "n", "")
-TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "", "sse")
-TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_cvttsd2si64, "LLiV2d", "", "sse2")
-TARGET_BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "", "sse4.2")
-TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "", "fsgsbase")
-TARGET_BUILTIN(__builtin_ia32_fxrstor64, "vv*", "", "fxsr")
-TARGET_BUILTIN(__builtin_ia32_fxsave64, "vv*", "", "fxsr")
-TARGET_BUILTIN(__builtin_ia32_xsave64, "vv*ULLi", "", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xrstor64, "vv*ULLi", "", "xsave")
-TARGET_BUILTIN(__builtin_ia32_xsaveopt64, "vv*ULLi", "", "xsaveopt")
-TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "", "xsavec")
-TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "", "xsaves")
-TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "u", "shstk")
-TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "Un", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "", "shstk")
-TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "", "adx")
-TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "", "")
-TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "", "")
-TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "", "rdseed")
-TARGET_BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "", "bmi")
-TARGET_BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "", "bmi2")
-TARGET_BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "", "tbm")
-TARGET_BUILTIN(__builtin_ia32_lwpins64, "UcULLiUiUi", "", "lwp")
-TARGET_BUILTIN(__builtin_ia32_lwpval64, "vULLiUiUi", "", "lwp")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "LLiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "ULLiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "LLiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "ULLiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "LLiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "ULLiV2dIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "LLiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "ULLiV4fIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtsi2sd64, "V2dV2dLLiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtsi2ss64, "V4fV4fLLiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2sd64, "V2dV2dULLiIi","","avx512f")
-TARGET_BUILTIN(__builtin_ia32_cvtusi2ss64, "V4fV4fULLiIi","","avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvttss2si64, "LLiV4f", "ncV:128:", "sse")
+TARGET_BUILTIN(__builtin_ia32_cvtsd2si64, "LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_cvttsd2si64, "LLiV2d", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_movnti64, "vLLi*LLi", "n", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v2di, "LLiV2LLiIi", "ncV:128:", "sse2")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v2di, "V2LLiV2LLiLLiIi", "ncV:128:", "sse4.1")
+TARGET_BUILTIN(__builtin_ia32_crc32di, "ULLiULLiULLi", "nc", "sse4.2")
+TARGET_BUILTIN(__builtin_ia32_vec_ext_v4di, "LLiV4LLiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_vec_set_v4di, "V4LLiV4LLiLLiIi", "ncV:256:", "avx")
+TARGET_BUILTIN(__builtin_ia32_rdfsbase32, "Ui", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdfsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdgsbase32, "Ui", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_rdgsbase64, "ULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrfsbase32, "vUi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrfsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrgsbase32, "vUi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_wrgsbase64, "vULLi", "n", "fsgsbase")
+TARGET_BUILTIN(__builtin_ia32_fxrstor64, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_fxsave64, "vv*", "n", "fxsr")
+TARGET_BUILTIN(__builtin_ia32_xsave64, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xrstor64, "vv*ULLi", "n", "xsave")
+TARGET_BUILTIN(__builtin_ia32_xsaveopt64, "vv*ULLi", "n", "xsaveopt")
+TARGET_BUILTIN(__builtin_ia32_xrstors64, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_xsavec64, "vv*ULLi", "n", "xsavec")
+TARGET_BUILTIN(__builtin_ia32_xsaves64, "vv*ULLi", "n", "xsaves")
+TARGET_BUILTIN(__builtin_ia32_incsspq, "vULLi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_rdsspq, "ULLiULLi", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrssq, "vULLiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_wrussq, "vULLiv*", "n", "shstk")
+TARGET_BUILTIN(__builtin_ia32_addcarryx_u64, "UcUcULLiULLiULLi*", "n", "adx")
+TARGET_BUILTIN(__builtin_ia32_addcarry_u64, "UcUcULLiULLiULLi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_subborrow_u64, "UcUcULLiULLiULLi*", "n", "")
+TARGET_BUILTIN(__builtin_ia32_rdrand64_step, "UiULLi*", "n", "rdrnd")
+TARGET_BUILTIN(__builtin_ia32_rdseed64_step, "UiULLi*", "n", "rdseed")
+TARGET_BUILTIN(__builtin_ia32_bextr_u64, "ULLiULLiULLi", "nc", "bmi")
+TARGET_BUILTIN(__builtin_ia32_bzhi_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pdep_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_pext_di, "ULLiULLiULLi", "nc", "bmi2")
+TARGET_BUILTIN(__builtin_ia32_bextri_u64, "ULLiULLiIULLi", "nc", "tbm")
+TARGET_BUILTIN(__builtin_ia32_lwpins64, "UcULLiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_lwpval64, "vULLiUiUi", "n", "lwp")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "LLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "ULLiV2dIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "LLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "ULLiV4fIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2sd64, "V2dV2dLLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtsi2ss64, "V4fV4fLLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2sd64, "V2dV2dULLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_cvtusi2ss64, "V4fV4fULLiIi", "ncV:128:", "avx512f")
+TARGET_BUILTIN(__builtin_ia32_directstore_u64, "vULi*ULi", "n", "movdiri")
+TARGET_BUILTIN(__builtin_ia32_ptwrite64, "vULLi", "n", "ptwrite")
 
 #undef BUILTIN
 #undef TARGET_BUILTIN
diff --git a/linux-x64/clang/include/clang/Basic/CapturedStmt.h b/linux-x64/clang/include/clang/Basic/CapturedStmt.h
index c4a289b..324e1b1 100644
--- a/linux-x64/clang/include/clang/Basic/CapturedStmt.h
+++ b/linux-x64/clang/include/clang/Basic/CapturedStmt.h
@@ -13,9 +13,10 @@
 
 namespace clang {
 
-/// \brief The different kinds of captured statement.
+/// The different kinds of captured statement.
 enum CapturedRegionKind {
   CR_Default,
+  CR_ObjCAtFinally,
   CR_OpenMP
 };
 
diff --git a/linux-x64/clang/include/clang/Basic/CharInfo.h b/linux-x64/clang/include/clang/Basic/CharInfo.h
index be49f36..e6c5e90 100644
--- a/linux-x64/clang/include/clang/Basic/CharInfo.h
+++ b/linux-x64/clang/include/clang/Basic/CharInfo.h
@@ -1,4 +1,4 @@
-//===--- clang/Basic/CharInfo.h - Classifying ASCII Characters ------------===//
+//===--- clang/Basic/CharInfo.h - Classifying ASCII Characters --*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
diff --git a/linux-x64/clang/include/clang/Basic/CommentOptions.h b/linux-x64/clang/include/clang/Basic/CommentOptions.h
index efd94e6..6cc9cf6 100644
--- a/linux-x64/clang/include/clang/Basic/CommentOptions.h
+++ b/linux-x64/clang/include/clang/Basic/CommentOptions.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::CommentOptions interface.
+/// Defines the clang::CommentOptions interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -20,15 +20,15 @@
 
 namespace clang {
 
-/// \brief Options for controlling comment parsing.
+/// Options for controlling comment parsing.
 struct CommentOptions {
   using BlockCommandNamesTy = std::vector<std::string>;
 
-  /// \brief Command names to treat as block commands in comments.
+  /// Command names to treat as block commands in comments.
   /// Should not include the leading backslash.
   BlockCommandNamesTy BlockCommandNames;
 
-  /// \brief Treat ordinary comments as documentation comments.
+  /// Treat ordinary comments as documentation comments.
   bool ParseAllComments = false;
 
   CommentOptions() = default;
diff --git a/linux-x64/clang/include/clang/Basic/Cuda.h b/linux-x64/clang/include/clang/Basic/Cuda.h
index 8ce3807..24159e1 100644
--- a/linux-x64/clang/include/clang/Basic/Cuda.h
+++ b/linux-x64/clang/include/clang/Basic/Cuda.h
@@ -23,7 +23,8 @@
   CUDA_80,
   CUDA_90,
   CUDA_91,
-  LATEST = CUDA_91,
+  CUDA_92,
+  LATEST = CUDA_92,
 };
 const char *CudaVersionToString(CudaVersion V);
 
@@ -46,6 +47,19 @@
   SM_62,
   SM_70,
   SM_72,
+  GFX600,
+  GFX601,
+  GFX700,
+  GFX701,
+  GFX702,
+  GFX703,
+  GFX704,
+  GFX801,
+  GFX802,
+  GFX803,
+  GFX810,
+  GFX900,
+  GFX902,
   LAST,
 };
 const char *CudaArchToString(CudaArch A);
@@ -68,6 +82,7 @@
   COMPUTE_62,
   COMPUTE_70,
   COMPUTE_72,
+  COMPUTE_AMDGCN,
 };
 const char *CudaVirtualArchToString(CudaVirtualArch A);
 
diff --git a/linux-x64/clang/include/clang/Basic/DebugInfoOptions.h b/linux-x64/clang/include/clang/Basic/DebugInfoOptions.h
index e7ff4a6..037c813 100644
--- a/linux-x64/clang/include/clang/Basic/DebugInfoOptions.h
+++ b/linux-x64/clang/include/clang/Basic/DebugInfoOptions.h
@@ -28,7 +28,7 @@
                        /// forward decls for types that could be
                        /// replaced with forward decls in the source
                        /// code. For dynamic C++ classes type info
-                       /// is only emitted int the module that
+                       /// is only emitted into the module that
                        /// contains the classe's vtable.
   FullDebugInfo        /// Generate complete debug info.
 };
diff --git a/linux-x64/clang/include/clang/Basic/Diagnostic.h b/linux-x64/clang/include/clang/Basic/Diagnostic.h
index 8bf0fd1..d30ac14 100644
--- a/linux-x64/clang/include/clang/Basic/Diagnostic.h
+++ b/linux-x64/clang/include/clang/Basic/Diagnostic.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the Diagnostic-related interfaces.
+/// Defines the Diagnostic-related interfaces.
 //
 //===----------------------------------------------------------------------===//
 
@@ -25,7 +25,7 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/iterator_range.h"
-#include "llvm/Support/Compiler.h" 
+#include "llvm/Support/Compiler.h"
 #include <cassert>
 #include <cstdint>
 #include <limits>
@@ -54,7 +54,7 @@
 
 } // namespace tok
 
-/// \brief Annotates a diagnostic with some code that should be
+/// Annotates a diagnostic with some code that should be
 /// inserted, removed, or replaced to fix the problem.
 ///
 /// This kind of hint should be used when we are certain that the
@@ -65,29 +65,29 @@
 /// compilation.
 class FixItHint {
 public:
-  /// \brief Code that should be replaced to correct the error. Empty for an
+  /// Code that should be replaced to correct the error. Empty for an
   /// insertion hint.
   CharSourceRange RemoveRange;
 
-  /// \brief Code in the specific range that should be inserted in the insertion
+  /// Code in the specific range that should be inserted in the insertion
   /// location.
   CharSourceRange InsertFromRange;
 
-  /// \brief The actual code to insert at the insertion location, as a
+  /// The actual code to insert at the insertion location, as a
   /// string.
   std::string CodeToInsert;
 
   bool BeforePreviousInsertions = false;
 
-  /// \brief Empty code modification hint, indicating that no code
+  /// Empty code modification hint, indicating that no code
   /// modification is known.
   FixItHint() = default;
 
   bool isNull() const {
     return !RemoveRange.isValid();
   }
-  
-  /// \brief Create a code modification hint that inserts the given
+
+  /// Create a code modification hint that inserts the given
   /// code string at a specific location.
   static FixItHint CreateInsertion(SourceLocation InsertionLoc,
                                    StringRef Code,
@@ -99,8 +99,8 @@
     Hint.BeforePreviousInsertions = BeforePreviousInsertions;
     return Hint;
   }
-  
-  /// \brief Create a code modification hint that inserts the given
+
+  /// Create a code modification hint that inserts the given
   /// code from \p FromRange at a specific location.
   static FixItHint CreateInsertionFromRange(SourceLocation InsertionLoc,
                                             CharSourceRange FromRange,
@@ -113,7 +113,7 @@
     return Hint;
   }
 
-  /// \brief Create a code modification hint that removes the given
+  /// Create a code modification hint that removes the given
   /// source range.
   static FixItHint CreateRemoval(CharSourceRange RemoveRange) {
     FixItHint Hint;
@@ -123,8 +123,8 @@
   static FixItHint CreateRemoval(SourceRange RemoveRange) {
     return CreateRemoval(CharSourceRange::getTokenRange(RemoveRange));
   }
-  
-  /// \brief Create a code modification hint that replaces the given
+
+  /// Create a code modification hint that replaces the given
   /// source range with the given code string.
   static FixItHint CreateReplacement(CharSourceRange RemoveRange,
                                      StringRef Code) {
@@ -133,14 +133,14 @@
     Hint.CodeToInsert = Code;
     return Hint;
   }
-  
+
   static FixItHint CreateReplacement(SourceRange RemoveRange,
                                      StringRef Code) {
     return CreateReplacement(CharSourceRange::getTokenRange(RemoveRange), Code);
   }
 };
 
-/// \brief Concrete class used by the front-end to report problems and issues.
+/// Concrete class used by the front-end to report problems and issues.
 ///
 /// This massages the diagnostics (e.g. handling things like "report warnings
 /// as errors" and passes them off to the DiagnosticConsumer for reporting to
@@ -148,7 +148,7 @@
 /// SourceManager.
 class DiagnosticsEngine : public RefCountedBase<DiagnosticsEngine> {
 public:
-  /// \brief The level of the diagnostic, after it has been through mapping.
+  /// The level of the diagnostic, after it has been through mapping.
   enum Level {
     Ignored = DiagnosticIDs::Ignored,
     Note = DiagnosticIDs::Note,
@@ -199,7 +199,7 @@
     ak_attr
   };
 
-  /// \brief Represents on argument value, which is a union discriminated
+  /// Represents on argument value, which is a union discriminated
   /// by ArgumentKind, with a value.
   using ArgumentValue = std::pair<ArgumentKind, intptr_t>;
 
@@ -240,7 +240,7 @@
   std::unique_ptr<DiagnosticConsumer> Owner;
   SourceManager *SourceMgr = nullptr;
 
-  /// \brief Mapping information for diagnostics.
+  /// Mapping information for diagnostics.
   ///
   /// Mapping info is packed into four bits per diagnostic.  The low three
   /// bits are the mapping (an instance of diag::Severity), or zero if unset.
@@ -298,7 +298,7 @@
     const_iterator end() const { return DiagMap.end(); }
   };
 
-  /// \brief Keeps and automatically disposes all DiagStates that we create.
+  /// Keeps and automatically disposes all DiagStates that we create.
   std::list<DiagState> DiagStates;
 
   /// A mapping from files to the diagnostic states for those files. Lazily
@@ -338,7 +338,7 @@
     friend class ASTReader;
     friend class ASTWriter;
 
-    /// \brief Represents a point in source where the diagnostic state was
+    /// Represents a point in source where the diagnostic state was
     /// modified because of a pragma.
     ///
     /// 'Loc' can be null if the point represents the diagnostic state
@@ -348,7 +348,7 @@
       unsigned Offset;
 
       DiagStatePoint(DiagState *State, unsigned Offset)
-          : State(State), Offset(Offset) {} 
+          : State(State), Offset(Offset) {}
     };
 
     /// Description of the diagnostic states and state transitions for a
@@ -391,7 +391,7 @@
 
   DiagStateMap DiagStatesByLoc;
 
-  /// \brief Keeps the DiagState that was active during each diagnostic 'push'
+  /// Keeps the DiagState that was active during each diagnostic 'push'
   /// so we can get back at it when we 'pop'.
   std::vector<DiagState *> DiagStateOnPushStack;
 
@@ -401,32 +401,32 @@
 
   void PushDiagStatePoint(DiagState *State, SourceLocation L);
 
-  /// \brief Finds the DiagStatePoint that contains the diagnostic state of
+  /// Finds the DiagStatePoint that contains the diagnostic state of
   /// the given source location.
   DiagState *GetDiagStateForLoc(SourceLocation Loc) const {
     return SourceMgr ? DiagStatesByLoc.lookup(*SourceMgr, Loc)
                      : DiagStatesByLoc.getCurDiagState();
   }
 
-  /// \brief Sticky flag set to \c true when an error is emitted.
+  /// Sticky flag set to \c true when an error is emitted.
   bool ErrorOccurred;
 
-  /// \brief Sticky flag set to \c true when an "uncompilable error" occurs.
+  /// Sticky flag set to \c true when an "uncompilable error" occurs.
   /// I.e. an error that was not upgraded from a warning by -Werror.
   bool UncompilableErrorOccurred;
 
-  /// \brief Sticky flag set to \c true when a fatal error is emitted.
+  /// Sticky flag set to \c true when a fatal error is emitted.
   bool FatalErrorOccurred;
 
-  /// \brief Indicates that an unrecoverable error has occurred.
+  /// Indicates that an unrecoverable error has occurred.
   bool UnrecoverableErrorOccurred;
-  
-  /// \brief Counts for DiagnosticErrorTrap to check whether an error occurred
+
+  /// Counts for DiagnosticErrorTrap to check whether an error occurred
   /// during a parsing section, e.g. during parsing a function.
   unsigned TrapNumErrorsOccurred;
   unsigned TrapNumUnrecoverableErrorsOccurred;
 
-  /// \brief The level of the last diagnostic emitted.
+  /// The level of the last diagnostic emitted.
   ///
   /// This is used to emit continuation diagnostics with the same level as the
   /// diagnostic that they follow.
@@ -438,7 +438,7 @@
   /// Number of errors reported
   unsigned NumErrors;
 
-  /// \brief A function pointer that converts an opaque diagnostic
+  /// A function pointer that converts an opaque diagnostic
   /// argument to a strings.
   ///
   /// This takes the modifiers and argument that was present in the diagnostic.
@@ -459,18 +459,18 @@
   void *ArgToStringCookie = nullptr;
   ArgToStringFnTy ArgToStringFn;
 
-  /// \brief ID of the "delayed" diagnostic, which is a (typically
+  /// ID of the "delayed" diagnostic, which is a (typically
   /// fatal) diagnostic that had to be delayed because it was found
   /// while emitting another diagnostic.
   unsigned DelayedDiagID;
 
-  /// \brief First string argument for the delayed diagnostic.
+  /// First string argument for the delayed diagnostic.
   std::string DelayedDiagArg1;
 
-  /// \brief Second string argument for the delayed diagnostic.
+  /// Second string argument for the delayed diagnostic.
   std::string DelayedDiagArg2;
 
-  /// \brief Optional flag value.
+  /// Optional flag value.
   ///
   /// Some flags accept values, for instance: -Wframe-larger-than=<value> and
   /// -Rpass=<value>. The content of this string is emitted after the flag name
@@ -495,12 +495,12 @@
     return Diags;
   }
 
-  /// \brief Retrieve the diagnostic options.
+  /// Retrieve the diagnostic options.
   DiagnosticOptions &getDiagnosticOptions() const { return *DiagOpts; }
 
   using diag_mapping_range = llvm::iterator_range<DiagState::const_iterator>;
 
-  /// \brief Get the current set of diagnostic mappings.
+  /// Get the current set of diagnostic mappings.
   diag_mapping_range getDiagnosticMappings() const {
     const DiagState &DS = *GetCurDiagState();
     return diag_mapping_range(DS.begin(), DS.end());
@@ -509,10 +509,10 @@
   DiagnosticConsumer *getClient() { return Client; }
   const DiagnosticConsumer *getClient() const { return Client; }
 
-  /// \brief Determine whether this \c DiagnosticsEngine object own its client.
+  /// Determine whether this \c DiagnosticsEngine object own its client.
   bool ownsClient() const { return Owner != nullptr; }
 
-  /// \brief Return the current diagnostic client along with ownership of that
+  /// Return the current diagnostic client along with ownership of that
   /// client.
   std::unique_ptr<DiagnosticConsumer> takeClient() { return std::move(Owner); }
 
@@ -534,54 +534,54 @@
   //  how diagnostics are emitted.
   //
 
-  /// \brief Copies the current DiagMappings and pushes the new copy
+  /// Copies the current DiagMappings and pushes the new copy
   /// onto the top of the stack.
   void pushMappings(SourceLocation Loc);
 
-  /// \brief Pops the current DiagMappings off the top of the stack,
+  /// Pops the current DiagMappings off the top of the stack,
   /// causing the new top of the stack to be the active mappings.
   ///
   /// \returns \c true if the pop happens, \c false if there is only one
   /// DiagMapping on the stack.
   bool popMappings(SourceLocation Loc);
 
-  /// \brief Set the diagnostic client associated with this diagnostic object.
+  /// Set the diagnostic client associated with this diagnostic object.
   ///
   /// \param ShouldOwnClient true if the diagnostic object should take
   /// ownership of \c client.
   void setClient(DiagnosticConsumer *client, bool ShouldOwnClient = true);
 
-  /// \brief Specify a limit for the number of errors we should
+  /// Specify a limit for the number of errors we should
   /// emit before giving up.
   ///
   /// Zero disables the limit.
   void setErrorLimit(unsigned Limit) { ErrorLimit = Limit; }
-  
-  /// \brief Specify the maximum number of template instantiation
+
+  /// Specify the maximum number of template instantiation
   /// notes to emit along with a given diagnostic.
   void setTemplateBacktraceLimit(unsigned Limit) {
     TemplateBacktraceLimit = Limit;
   }
 
-  /// \brief Retrieve the maximum number of template instantiation
+  /// Retrieve the maximum number of template instantiation
   /// notes to emit along with a given diagnostic.
   unsigned getTemplateBacktraceLimit() const {
     return TemplateBacktraceLimit;
   }
 
-  /// \brief Specify the maximum number of constexpr evaluation
+  /// Specify the maximum number of constexpr evaluation
   /// notes to emit along with a given diagnostic.
   void setConstexprBacktraceLimit(unsigned Limit) {
     ConstexprBacktraceLimit = Limit;
   }
 
-  /// \brief Retrieve the maximum number of constexpr evaluation
+  /// Retrieve the maximum number of constexpr evaluation
   /// notes to emit along with a given diagnostic.
   unsigned getConstexprBacktraceLimit() const {
     return ConstexprBacktraceLimit;
   }
 
-  /// \brief When set to true, any unmapped warnings are ignored.
+  /// When set to true, any unmapped warnings are ignored.
   ///
   /// If this and WarningsAsErrors are both set, then this one wins.
   void setIgnoreAllWarnings(bool Val) {
@@ -591,7 +591,7 @@
     return GetCurDiagState()->IgnoreAllWarnings;
   }
 
-  /// \brief When set to true, any unmapped ignored warnings are no longer
+  /// When set to true, any unmapped ignored warnings are no longer
   /// ignored.
   ///
   /// If this and IgnoreAllWarnings are both set, then that one wins.
@@ -602,7 +602,7 @@
     return GetCurDiagState()->EnableAllWarnings;
   }
 
-  /// \brief When set to true, any warnings reported are issued as errors.
+  /// When set to true, any warnings reported are issued as errors.
   void setWarningsAsErrors(bool Val) {
     GetCurDiagState()->WarningsAsErrors = Val;
   }
@@ -610,15 +610,15 @@
     return GetCurDiagState()->WarningsAsErrors;
   }
 
-  /// \brief When set to true, any error reported is made a fatal error.
+  /// When set to true, any error reported is made a fatal error.
   void setErrorsAsFatal(bool Val) { GetCurDiagState()->ErrorsAsFatal = Val; }
   bool getErrorsAsFatal() const { return GetCurDiagState()->ErrorsAsFatal; }
 
-  /// \brief When set to true (the default), suppress further diagnostics after
+  /// When set to true (the default), suppress further diagnostics after
   /// a fatal error.
   void setSuppressAfterFatalError(bool Val) { SuppressAfterFatalError = Val; }
 
-  /// \brief When set to true mask warnings that come from system headers.
+  /// When set to true mask warnings that come from system headers.
   void setSuppressSystemWarnings(bool Val) {
     GetCurDiagState()->SuppressSystemWarnings = Val;
   }
@@ -626,30 +626,30 @@
     return GetCurDiagState()->SuppressSystemWarnings;
   }
 
-  /// \brief Suppress all diagnostics, to silence the front end when we 
+  /// Suppress all diagnostics, to silence the front end when we
   /// know that we don't want any more diagnostics to be passed along to the
   /// client
-  void setSuppressAllDiagnostics(bool Val = true) { 
-    SuppressAllDiagnostics = Val; 
+  void setSuppressAllDiagnostics(bool Val = true) {
+    SuppressAllDiagnostics = Val;
   }
   bool getSuppressAllDiagnostics() const { return SuppressAllDiagnostics; }
 
-  /// \brief Set type eliding, to skip outputting same types occurring in
+  /// Set type eliding, to skip outputting same types occurring in
   /// template types.
   void setElideType(bool Val = true) { ElideType = Val; }
   bool getElideType() { return ElideType; }
- 
-  /// \brief Set tree printing, to outputting the template difference in a
+
+  /// Set tree printing, to outputting the template difference in a
   /// tree format.
   void setPrintTemplateTree(bool Val = false) { PrintTemplateTree = Val; }
   bool getPrintTemplateTree() { return PrintTemplateTree; }
- 
-  /// \brief Set color printing, so the type diffing will inject color markers
+
+  /// Set color printing, so the type diffing will inject color markers
   /// into the output.
   void setShowColors(bool Val = false) { ShowColors = Val; }
   bool getShowColors() { return ShowColors; }
 
-  /// \brief Specify which overload candidates to show when overload resolution
+  /// Specify which overload candidates to show when overload resolution
   /// fails.
   ///
   /// By default, we show all candidates.
@@ -657,8 +657,8 @@
     ShowOverloads = Val;
   }
   OverloadsShown getShowOverloads() const { return ShowOverloads; }
-  
-  /// \brief Pretend that the last diagnostic issued was ignored, so any
+
+  /// Pretend that the last diagnostic issued was ignored, so any
   /// subsequent notes will be suppressed, or restore a prior ignoring
   /// state after ignoring some diagnostics and their notes, possibly in
   /// the middle of another diagnostic.
@@ -670,14 +670,14 @@
     LastDiagLevel = Ignored ? DiagnosticIDs::Ignored : DiagnosticIDs::Warning;
   }
 
-  /// \brief Determine whether the previous diagnostic was ignored. This can
+  /// Determine whether the previous diagnostic was ignored. This can
   /// be used by clients that want to determine whether notes attached to a
   /// diagnostic will be suppressed.
   bool isLastDiagnosticIgnored() const {
     return LastDiagLevel == DiagnosticIDs::Ignored;
   }
 
-  /// \brief Controls whether otherwise-unmapped extension diagnostics are
+  /// Controls whether otherwise-unmapped extension diagnostics are
   /// mapped onto ignore/warning/error.
   ///
   /// This corresponds to the GCC -pedantic and -pedantic-errors option.
@@ -688,7 +688,7 @@
     return GetCurDiagState()->ExtBehavior;
   }
 
-  /// \brief Counter bumped when an __extension__  block is/ encountered.
+  /// Counter bumped when an __extension__  block is/ encountered.
   ///
   /// When non-zero, all extension diagnostics are entirely silenced, no
   /// matter how they are mapped.
@@ -696,7 +696,7 @@
   void DecrementAllExtensionsSilenced() { --AllExtensionsSilenced; }
   bool hasAllExtensionsSilenced() { return AllExtensionsSilenced != 0; }
 
-  /// \brief This allows the client to specify that certain warnings are
+  /// This allows the client to specify that certain warnings are
   /// ignored.
   ///
   /// Notes can never be mapped, errors can only be mapped to fatal, and
@@ -706,7 +706,7 @@
   /// take affect. It can be null if we are setting the latest state.
   void setSeverity(diag::kind Diag, diag::Severity Map, SourceLocation Loc);
 
-  /// \brief Change an entire diagnostic group (e.g. "unknown-pragmas") to
+  /// Change an entire diagnostic group (e.g. "unknown-pragmas") to
   /// have the specified mapping.
   ///
   /// \returns true (and ignores the request) if "Group" was unknown, false
@@ -721,21 +721,21 @@
                            diag::Severity Map,
                            SourceLocation Loc = SourceLocation());
 
-  /// \brief Set the warning-as-error flag for the given diagnostic group.
+  /// Set the warning-as-error flag for the given diagnostic group.
   ///
   /// This function always only operates on the current diagnostic state.
   ///
   /// \returns True if the given group is unknown, false otherwise.
   bool setDiagnosticGroupWarningAsError(StringRef Group, bool Enabled);
 
-  /// \brief Set the error-as-fatal flag for the given diagnostic group.
+  /// Set the error-as-fatal flag for the given diagnostic group.
   ///
   /// This function always only operates on the current diagnostic state.
   ///
   /// \returns True if the given group is unknown, false otherwise.
   bool setDiagnosticGroupErrorAsFatal(StringRef Group, bool Enabled);
 
-  /// \brief Add the specified mapping to all diagnostics of the specified
+  /// Add the specified mapping to all diagnostics of the specified
   /// flavor.
   ///
   /// Mainly to be used by -Wno-everything to disable all warnings but allow
@@ -745,25 +745,25 @@
 
   bool hasErrorOccurred() const { return ErrorOccurred; }
 
-  /// \brief Errors that actually prevent compilation, not those that are
+  /// Errors that actually prevent compilation, not those that are
   /// upgraded from a warning by -Werror.
   bool hasUncompilableErrorOccurred() const {
     return UncompilableErrorOccurred;
   }
   bool hasFatalErrorOccurred() const { return FatalErrorOccurred; }
-  
-  /// \brief Determine whether any kind of unrecoverable error has occurred.
+
+  /// Determine whether any kind of unrecoverable error has occurred.
   bool hasUnrecoverableErrorOccurred() const {
     return FatalErrorOccurred || UnrecoverableErrorOccurred;
   }
-  
+
   unsigned getNumWarnings() const { return NumWarnings; }
 
   void setNumWarnings(unsigned NumWarnings) {
     this->NumWarnings = NumWarnings;
   }
 
-  /// \brief Return an ID for a diagnostic with the specified format string and
+  /// Return an ID for a diagnostic with the specified format string and
   /// level.
   ///
   /// If this is the first request for this diagnostic, it is registered and
@@ -777,7 +777,7 @@
                                   StringRef(FormatString, N - 1));
   }
 
-  /// \brief Converts a diagnostic argument (as an intptr_t) into the string
+  /// Converts a diagnostic argument (as an intptr_t) into the string
   /// that represents it.
   void ConvertArgToString(ArgumentKind Kind, intptr_t Val,
                           StringRef Modifier, StringRef Argument,
@@ -793,21 +793,21 @@
     ArgToStringCookie = Cookie;
   }
 
-  /// \brief Note that the prior diagnostic was emitted by some other
+  /// Note that the prior diagnostic was emitted by some other
   /// \c DiagnosticsEngine, and we may be attaching a note to that diagnostic.
   void notePriorDiagnosticFrom(const DiagnosticsEngine &Other) {
     LastDiagLevel = Other.LastDiagLevel;
   }
 
-  /// \brief Reset the state of the diagnostic object to its initial 
+  /// Reset the state of the diagnostic object to its initial
   /// configuration.
   void Reset();
-  
+
   //===--------------------------------------------------------------------===//
   // DiagnosticsEngine classification and reporting interfaces.
   //
 
-  /// \brief Determine whether the diagnostic is known to be ignored.
+  /// Determine whether the diagnostic is known to be ignored.
   ///
   /// This can be used to opportunistically avoid expensive checks when it's
   /// known for certain that the diagnostic has been suppressed at the
@@ -820,7 +820,7 @@
            diag::Severity::Ignored;
   }
 
-  /// \brief Based on the way the client configured the DiagnosticsEngine
+  /// Based on the way the client configured the DiagnosticsEngine
   /// object, classify the specified diagnostic ID into a Level, consumable by
   /// the DiagnosticConsumer.
   ///
@@ -834,7 +834,7 @@
     return (Level)Diags->getDiagnosticLevel(DiagID, Loc, *this);
   }
 
-  /// \brief Issue the message to the client.
+  /// Issue the message to the client.
   ///
   /// This actually returns an instance of DiagnosticBuilder which emits the
   /// diagnostics (through @c ProcessDiag) when it is destroyed.
@@ -847,12 +847,12 @@
 
   void Report(const StoredDiagnostic &storedDiag);
 
-  /// \brief Determine whethere there is already a diagnostic in flight.
+  /// Determine whethere there is already a diagnostic in flight.
   bool isDiagnosticInFlight() const {
     return CurDiagID != std::numeric_limits<unsigned>::max();
   }
 
-  /// \brief Set the "delayed" diagnostic that will be emitted once
+  /// Set the "delayed" diagnostic that will be emitted once
   /// the current diagnostic completes.
   ///
   ///  If a diagnostic is already in-flight but the front end must
@@ -875,11 +875,11 @@
   /// DiagnosticsEngine object itself.
   void SetDelayedDiagnostic(unsigned DiagID, StringRef Arg1 = "",
                             StringRef Arg2 = "");
-  
-  /// \brief Clear out the current diagnostic.
+
+  /// Clear out the current diagnostic.
   void Clear() { CurDiagID = std::numeric_limits<unsigned>::max(); }
 
-  /// \brief Return the value associated with this diagnostic flag.
+  /// Return the value associated with this diagnostic flag.
   StringRef getFlagValue() const { return FlagValue; }
 
 private:
@@ -894,21 +894,21 @@
   friend class DiagnosticErrorTrap;
   friend class DiagnosticIDs;
   friend class PartialDiagnostic;
-  
-  /// \brief Report the delayed diagnostic.
+
+  /// Report the delayed diagnostic.
   void ReportDelayed();
 
-  /// \brief The location of the current diagnostic that is in flight.
+  /// The location of the current diagnostic that is in flight.
   SourceLocation CurDiagLoc;
 
-  /// \brief The ID of the current diagnostic that is in flight.
+  /// The ID of the current diagnostic that is in flight.
   ///
   /// This is set to std::numeric_limits<unsigned>::max() when there is no
   /// diagnostic in flight.
   unsigned CurDiagID;
 
   enum {
-    /// \brief The maximum number of arguments we can hold.
+    /// The maximum number of arguments we can hold.
     ///
     /// We currently only support up to 10 arguments (%0-%9).  A single
     /// diagnostic with more than that almost certainly has to be simplified
@@ -916,33 +916,33 @@
     MaxArguments = 10,
   };
 
-  /// \brief The number of entries in Arguments.
+  /// The number of entries in Arguments.
   signed char NumDiagArgs;
 
-  /// \brief Specifies whether an argument is in DiagArgumentsStr or
+  /// Specifies whether an argument is in DiagArgumentsStr or
   /// in DiagArguments.
   ///
   /// This is an array of ArgumentKind::ArgumentKind enum values, one for each
   /// argument.
   unsigned char DiagArgumentsKind[MaxArguments];
 
-  /// \brief Holds the values of each string argument for the current
+  /// Holds the values of each string argument for the current
   /// diagnostic.
   ///
   /// This is only used when the corresponding ArgumentKind is ak_std_string.
   std::string DiagArgumentsStr[MaxArguments];
 
-  /// \brief The values for the various substitution positions.
+  /// The values for the various substitution positions.
   ///
   /// This is used when the argument is not an std::string.  The specific
   /// value is mangled into an intptr_t and the interpretation depends on
   /// exactly what sort of argument kind it is.
   intptr_t DiagArgumentsVal[MaxArguments];
 
-  /// \brief The list of ranges added to this diagnostic.
+  /// The list of ranges added to this diagnostic.
   SmallVector<CharSourceRange, 8> DiagRanges;
 
-  /// \brief If valid, provides a hint with some code to insert, remove,
+  /// If valid, provides a hint with some code to insert, remove,
   /// or modify at a particular position.
   SmallVector<FixItHint, 8> DiagFixItHints;
 
@@ -961,7 +961,7 @@
     return Mapping;
   }
 
-  /// \brief Used to report a diagnostic that is finally fully formed.
+  /// Used to report a diagnostic that is finally fully formed.
   ///
   /// \returns true if the diagnostic was emitted, false if it was suppressed.
   bool ProcessDiag() {
@@ -980,7 +980,7 @@
   // Sema::Diag() patterns.
   friend class Sema;
 
-  /// \brief Emit the current diagnostic and clear the diagnostic state.
+  /// Emit the current diagnostic and clear the diagnostic state.
   ///
   /// \param Force Emit the diagnostic regardless of suppression settings.
   bool EmitCurrentDiagnostic(bool Force = false);
@@ -992,7 +992,7 @@
   /// @}
 };
 
-/// \brief RAII class that determines when any errors have occurred
+/// RAII class that determines when any errors have occurred
 /// between the time the instance was created and the time it was
 /// queried.
 class DiagnosticErrorTrap {
@@ -1004,19 +1004,19 @@
   explicit DiagnosticErrorTrap(DiagnosticsEngine &Diag)
       : Diag(Diag) { reset(); }
 
-  /// \brief Determine whether any errors have occurred since this
+  /// Determine whether any errors have occurred since this
   /// object instance was created.
   bool hasErrorOccurred() const {
     return Diag.TrapNumErrorsOccurred > NumErrors;
   }
 
-  /// \brief Determine whether any unrecoverable errors have occurred since this
+  /// Determine whether any unrecoverable errors have occurred since this
   /// object instance was created.
   bool hasUnrecoverableErrorOccurred() const {
     return Diag.TrapNumUnrecoverableErrorsOccurred > NumUnrecoverableErrors;
   }
 
-  /// \brief Set to initial state of "no errors occurred".
+  /// Set to initial state of "no errors occurred".
   void reset() {
     NumErrors = Diag.TrapNumErrorsOccurred;
     NumUnrecoverableErrors = Diag.TrapNumUnrecoverableErrorsOccurred;
@@ -1027,7 +1027,7 @@
 // DiagnosticBuilder
 //===----------------------------------------------------------------------===//
 
-/// \brief A little helper class used to produce diagnostics.
+/// A little helper class used to produce diagnostics.
 ///
 /// This is constructed by the DiagnosticsEngine::Report method, and
 /// allows insertion of extra information (arguments and source ranges) into
@@ -1042,18 +1042,18 @@
 class DiagnosticBuilder {
   friend class DiagnosticsEngine;
   friend class PartialDiagnostic;
-  
+
   mutable DiagnosticsEngine *DiagObj = nullptr;
   mutable unsigned NumArgs = 0;
 
-  /// \brief Status variable indicating if this diagnostic is still active.
+  /// Status variable indicating if this diagnostic is still active.
   ///
   // NOTE: This field is redundant with DiagObj (IsActive iff (DiagObj == 0)),
   // but LLVM is not currently smart enough to eliminate the null check that
   // Emit() would end up with if we used that as our status variable.
   mutable bool IsActive = false;
 
-  /// \brief Flag indicating that this diagnostic is being emitted via a
+  /// Flag indicating that this diagnostic is being emitted via a
   /// call to ForceEmit.
   mutable bool IsForceEmit = false;
 
@@ -1071,17 +1071,17 @@
     DiagObj->NumDiagArgs = NumArgs;
   }
 
-  /// \brief Clear out the current diagnostic.
+  /// Clear out the current diagnostic.
   void Clear() const {
     DiagObj = nullptr;
     IsActive = false;
     IsForceEmit = false;
   }
 
-  /// \brief Determine whether this diagnostic is still active.
+  /// Determine whether this diagnostic is still active.
   bool isActive() const { return IsActive; }
 
-  /// \brief Force the diagnostic builder to emit the diagnostic now.
+  /// Force the diagnostic builder to emit the diagnostic now.
   ///
   /// Once this function has been called, the DiagnosticBuilder object
   /// should not be used again before it is destroyed.
@@ -1105,7 +1105,7 @@
 
     return Result;
   }
-  
+
 public:
   /// Copy constructor.  When copied, this "takes" the diagnostic info from the
   /// input and neuters it.
@@ -1119,23 +1119,23 @@
 
   DiagnosticBuilder &operator=(const DiagnosticBuilder &) = delete;
 
-  /// \brief Emits the diagnostic.
+  /// Emits the diagnostic.
   ~DiagnosticBuilder() {
     Emit();
   }
 
-  /// \brief Retrieve an empty diagnostic builder.
+  /// Retrieve an empty diagnostic builder.
   static DiagnosticBuilder getEmpty() {
     return {};
   }
 
-  /// \brief Forces the diagnostic to be emitted.
+  /// Forces the diagnostic to be emitted.
   const DiagnosticBuilder &setForceEmit() const {
     IsForceEmit = true;
     return *this;
   }
 
-  /// \brief Conversion of DiagnosticBuilder to bool always returns \c true.
+  /// Conversion of DiagnosticBuilder to bool always returns \c true.
   ///
   /// This allows is to be used in boolean error contexts (where \c true is
   /// used to indicate that an error has occurred), like:
@@ -1180,7 +1180,7 @@
   explicit AddFlagValue(StringRef V) : Val(V) {}
 };
 
-/// \brief Register a value for the flag in the current diagnostic. This
+/// Register a value for the flag in the current diagnostic. This
 /// value will be shown as the suffix "=value" after the flag name. It is
 /// useful in cases where the diagnostic flag accepts values (e.g.,
 /// -Rpass or -Wframe-larger-than).
@@ -1329,7 +1329,7 @@
 
   unsigned getNumArgs() const { return DiagObj->NumDiagArgs; }
 
-  /// \brief Return the kind of the specified index.
+  /// Return the kind of the specified index.
   ///
   /// Based on the kind of argument, the accessors below can be used to get
   /// the value.
@@ -1340,7 +1340,7 @@
     return (DiagnosticsEngine::ArgumentKind)DiagObj->DiagArgumentsKind[Idx];
   }
 
-  /// \brief Return the provided argument string specified by \p Idx.
+  /// Return the provided argument string specified by \p Idx.
   /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_std_string
   const std::string &getArgStdStr(unsigned Idx) const {
     assert(getArgKind(Idx) == DiagnosticsEngine::ak_std_string &&
@@ -1348,7 +1348,7 @@
     return DiagObj->DiagArgumentsStr[Idx];
   }
 
-  /// \brief Return the specified C string argument.
+  /// Return the specified C string argument.
   /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_c_string
   const char *getArgCStr(unsigned Idx) const {
     assert(getArgKind(Idx) == DiagnosticsEngine::ak_c_string &&
@@ -1356,7 +1356,7 @@
     return reinterpret_cast<const char*>(DiagObj->DiagArgumentsVal[Idx]);
   }
 
-  /// \brief Return the specified signed integer argument.
+  /// Return the specified signed integer argument.
   /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_sint
   int getArgSInt(unsigned Idx) const {
     assert(getArgKind(Idx) == DiagnosticsEngine::ak_sint &&
@@ -1364,7 +1364,7 @@
     return (int)DiagObj->DiagArgumentsVal[Idx];
   }
 
-  /// \brief Return the specified unsigned integer argument.
+  /// Return the specified unsigned integer argument.
   /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_uint
   unsigned getArgUInt(unsigned Idx) const {
     assert(getArgKind(Idx) == DiagnosticsEngine::ak_uint &&
@@ -1372,7 +1372,7 @@
     return (unsigned)DiagObj->DiagArgumentsVal[Idx];
   }
 
-  /// \brief Return the specified IdentifierInfo argument.
+  /// Return the specified IdentifierInfo argument.
   /// \pre getArgKind(Idx) == DiagnosticsEngine::ak_identifierinfo
   const IdentifierInfo *getArgIdentifier(unsigned Idx) const {
     assert(getArgKind(Idx) == DiagnosticsEngine::ak_identifierinfo &&
@@ -1380,7 +1380,7 @@
     return reinterpret_cast<IdentifierInfo*>(DiagObj->DiagArgumentsVal[Idx]);
   }
 
-  /// \brief Return the specified non-string argument in an opaque form.
+  /// Return the specified non-string argument in an opaque form.
   /// \pre getArgKind(Idx) != DiagnosticsEngine::ak_std_string
   intptr_t getRawArg(unsigned Idx) const {
     assert(getArgKind(Idx) != DiagnosticsEngine::ak_std_string &&
@@ -1388,7 +1388,7 @@
     return DiagObj->DiagArgumentsVal[Idx];
   }
 
-  /// \brief Return the number of source ranges associated with this diagnostic.
+  /// Return the number of source ranges associated with this diagnostic.
   unsigned getNumRanges() const {
     return DiagObj->DiagRanges.size();
   }
@@ -1399,7 +1399,7 @@
     return DiagObj->DiagRanges[Idx];
   }
 
-  /// \brief Return an array reference for this diagnostic's ranges.
+  /// Return an array reference for this diagnostic's ranges.
   ArrayRef<CharSourceRange> getRanges() const {
     return DiagObj->DiagRanges;
   }
@@ -1417,21 +1417,21 @@
     return DiagObj->DiagFixItHints;
   }
 
-  /// \brief Format this diagnostic into a string, substituting the
+  /// Format this diagnostic into a string, substituting the
   /// formal arguments into the %0 slots.
   ///
   /// The result is appended onto the \p OutStr array.
   void FormatDiagnostic(SmallVectorImpl<char> &OutStr) const;
 
-  /// \brief Format the given format-string into the output buffer using the
+  /// Format the given format-string into the output buffer using the
   /// arguments stored in this diagnostic.
   void FormatDiagnostic(const char *DiagStr, const char *DiagEnd,
                         SmallVectorImpl<char> &OutStr) const;
 };
 
 /**
- * \brief Represents a diagnostic in a form that can be retained until its 
- * corresponding source manager is destroyed. 
+ * Represents a diagnostic in a form that can be retained until its
+ * corresponding source manager is destroyed.
  */
 class StoredDiagnostic {
   unsigned ID;
@@ -1444,14 +1444,14 @@
 public:
   StoredDiagnostic() = default;
   StoredDiagnostic(DiagnosticsEngine::Level Level, const Diagnostic &Info);
-  StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, 
+  StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID,
                    StringRef Message);
-  StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID, 
+  StoredDiagnostic(DiagnosticsEngine::Level Level, unsigned ID,
                    StringRef Message, FullSourceLoc Loc,
                    ArrayRef<CharSourceRange> Ranges,
                    ArrayRef<FixItHint> Fixits);
 
-  /// \brief Evaluates true when this object stores a diagnostic.
+  /// Evaluates true when this object stores a diagnostic.
   explicit operator bool() const { return !Message.empty(); }
 
   unsigned getID() const { return ID; }
@@ -1466,7 +1466,7 @@
   range_iterator range_begin() const { return Ranges.begin(); }
   range_iterator range_end() const { return Ranges.end(); }
   unsigned range_size() const { return Ranges.size(); }
-  
+
   ArrayRef<CharSourceRange> getRanges() const {
     return llvm::makeArrayRef(Ranges);
   }
@@ -1476,19 +1476,19 @@
   fixit_iterator fixit_begin() const { return FixIts.begin(); }
   fixit_iterator fixit_end() const { return FixIts.end(); }
   unsigned fixit_size() const { return FixIts.size(); }
-  
+
   ArrayRef<FixItHint> getFixIts() const {
     return llvm::makeArrayRef(FixIts);
   }
 };
 
-/// \brief Abstract interface, implemented by clients of the front-end, which
+/// Abstract interface, implemented by clients of the front-end, which
 /// formats and prints fully processed diagnostics.
 class DiagnosticConsumer {
 protected:
   unsigned NumWarnings = 0;       ///< Number of warnings reported
   unsigned NumErrors = 0;         ///< Number of errors reported
-  
+
 public:
   DiagnosticConsumer() = default;
   virtual ~DiagnosticConsumer();
@@ -1497,7 +1497,7 @@
   unsigned getNumWarnings() const { return NumWarnings; }
   virtual void clear() { NumWarnings = NumErrors = 0; }
 
-  /// \brief Callback to inform the diagnostic client that processing
+  /// Callback to inform the diagnostic client that processing
   /// of a source file is beginning.
   ///
   /// Note that diagnostics may be emitted outside the processing of a source
@@ -1506,30 +1506,30 @@
   /// in between BeginSourceFile() and EndSourceFile().
   ///
   /// \param LangOpts The language options for the source file being processed.
-  /// \param PP The preprocessor object being used for the source; this is 
+  /// \param PP The preprocessor object being used for the source; this is
   /// optional, e.g., it may not be present when processing AST source files.
   virtual void BeginSourceFile(const LangOptions &LangOpts,
                                const Preprocessor *PP = nullptr) {}
 
-  /// \brief Callback to inform the diagnostic client that processing
+  /// Callback to inform the diagnostic client that processing
   /// of a source file has ended.
   ///
   /// The diagnostic client should assume that any objects made available via
   /// BeginSourceFile() are inaccessible.
   virtual void EndSourceFile() {}
 
-  /// \brief Callback to inform the diagnostic client that processing of all
+  /// Callback to inform the diagnostic client that processing of all
   /// source files has ended.
   virtual void finish() {}
 
-  /// \brief Indicates whether the diagnostics handled by this
+  /// Indicates whether the diagnostics handled by this
   /// DiagnosticConsumer should be included in the number of diagnostics
   /// reported by DiagnosticsEngine.
   ///
   /// The default implementation returns true.
   virtual bool IncludeInDiagnosticCounts() const;
 
-  /// \brief Handle this diagnostic, reporting it to the user or
+  /// Handle this diagnostic, reporting it to the user or
   /// capturing it to a log as needed.
   ///
   /// The default implementation just keeps track of the total number of
@@ -1538,7 +1538,7 @@
                                 const Diagnostic &Info);
 };
 
-/// \brief A diagnostic client that ignores all diagnostics.
+/// A diagnostic client that ignores all diagnostics.
 class IgnoringDiagConsumer : public DiagnosticConsumer {
   virtual void anchor();
 
@@ -1548,7 +1548,7 @@
   }
 };
 
-/// \brief Diagnostic consumer that forwards diagnostics along to an
+/// Diagnostic consumer that forwards diagnostics along to an
 /// existing, already-initialized diagnostic consumer.
 ///
 class ForwardingDiagnosticConsumer : public DiagnosticConsumer {
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
index 4afeb28..0355e05 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticASTKinds.inc
@@ -58,6 +58,10 @@
 DIAG(note_constexpr_ltor_mutable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of mutable member %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_ltor_non_const_int, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of non-const variable %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_ltor_non_constexpr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "read of non-constexpr variable %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_nontrivial, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot constant evaluate '%select{memcpy|memmove}0' between objects of non-trivially-copyable type %1", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_overlap, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%select{memcpy|wmemcpy}0' between overlapping memory regions", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_type_pun, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot constant evaluate '%select{memcpy|memmove}0' from object of type %1 to object of type %2", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_constexpr_memcpy_unsupported, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%select{%select{memcpy|wmemcpy}1|%select{memmove|wmemmove}1}0' not supported: %select{size to copy (%4) is not a multiple of size of element type %3 (%5)|source is not a contiguous array of at least %4 elements of type %3|destination is not a contiguous array of at least %4 elements of type %3}2", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_modify_const_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "modification of object of const-qualified type %0 is not allowed in a constant expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_modify_global, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "a constant expression cannot modify an object that is visible outside that expression", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_constexpr_negative_shift, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "negative shift count %0", 0, SFINAE_Suppress, false, false, 0)
@@ -94,9 +98,11 @@
 DIAG(note_odr_enumerator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "enumerator %0 with value %1 here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field %0 has type %1 here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_field_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field has name %0 here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_friend, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "friend declared here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_missing_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding base class here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_missing_enumerator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding enumerator here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_missing_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding field here", 0, SFINAE_Suppress, false, false, 0)
+DIAG(note_odr_missing_friend, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "no corresponding friend here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_not_bit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field %0 is not a bit-field", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_number_of_bases, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class has %0 base %plural{1:class|:classes}0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_objc_method_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|instance}0 method %1 also declared here", 0, SFINAE_Suppress, false, false, 0)
@@ -111,5 +117,5 @@
 DIAG(note_odr_value_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here with type %0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_odr_virtual_base, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{non-virtual|virtual}0 derivation here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_unimplemented_constexpr_lambda_feature_ast, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "unimplemented constexpr lambda feature: %0 (coming soon!)", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_integer_constant_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in expression; result is %0 with type %1", 313, SFINAE_Suppress, false, false, 0)
-DIAG(warn_odr_tag_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type %0 has incompatible definitions in different translation units", 472, SFINAE_Suppress, false, false, 0)
+DIAG(warn_integer_constant_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in expression; result is %0 with type %1", 320, SFINAE_Suppress, false, false, 0)
+DIAG(warn_odr_tag_type_inconsistent, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type %0 has incompatible definitions in different translation units", 481, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
index c152455..d1914da 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticCommentKinds.inc
@@ -12,28 +12,28 @@
 DIAG(note_doc_param_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
 DIAG(note_doc_tparam_name_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean '%0'?", 0, SFINAE_Suppress, false, false, 25)
 DIAG(note_doc_tparam_previous, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous documentation", 0, SFINAE_Suppress, false, false, 25)
-DIAG(warn_correct_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name '%0'; did you mean '%1'?", 178, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_api_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_block_command_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "duplicated command '%select{\\|@}0%1'", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_block_command_empty_paragraph, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty paragraph passed to '%select{\\|@}0%1' command", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1' command should not be used in a comment attached to a non-container declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_deprecated_not_sync, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration is marked with '\\deprecated' command but does not have a deprecation attribute", 175, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_function_method_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_end_forbidden, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag '%0' is forbidden", 176, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_end_unbalanced, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag does not match any start tag", 176, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_missing_end_tag, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML tag '%0' requires an end tag", 176, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag '%0' closed by '%1'", 176, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_tag_expected_ident_or_greater, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag prematurely ended, expected attribute name or '>'", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_html_start_tag_expected_quoted_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expected quoted string after equals sign", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' is already documented", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_invalid_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0param' command used in a comment that is not attached to a function declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not found in the function declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_param_spaces_in_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "whitespace is not allowed in parameter passing direction", 177, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_returns_attached_to_a_void_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_returns_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is not attached to a function or method declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' is already documented", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_not_attached_to_a_template_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0tparam' command used in a comment that is not attached to a template declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_doc_tparam_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' not found in the template declaration", 174, SFINAE_Suppress, false, false, 25)
-DIAG(warn_unknown_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name", 178, SFINAE_Suppress, false, false, 25)
-DIAG(warn_verbatim_block_end_without_start, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command does not terminate a verbatim text block", 174, SFINAE_Suppress, false, false, 25)
+DIAG(warn_correct_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name '%0'; did you mean '%1'?", 182, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_api_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{class|interface|protocol|struct|union}1' command should not be used in a comment attached to a non-%select{class|interface|protocol|struct|union}2 declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_block_command_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "duplicated command '%select{\\|@}0%1'", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_block_command_empty_paragraph, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty paragraph passed to '%select{\\|@}0%1' command", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_container_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{classdesign|coclass|dependency|helper|helperclass|helps|instancesize|ownership|performance|security|superclass}1' command should not be used in a comment attached to a non-container declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_deprecated_not_sync, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration is marked with '\\deprecated' command but does not have a deprecation attribute", 179, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_function_method_decl_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%select{function|functiongroup|method|methodgroup|callback}1' command should be used in a comment attached to %select{a function|a function|an Objective-C method|an Objective-C method|a pointer to function}2 declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_end_forbidden, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag '%0' is forbidden", 180, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_end_unbalanced, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML end tag does not match any start tag", 180, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_missing_end_tag, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML tag '%0' requires an end tag", 180, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag '%0' closed by '%1'", 180, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_tag_expected_ident_or_greater, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "HTML start tag prematurely ended, expected attribute name or '>'", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_html_start_tag_expected_quoted_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expected quoted string after equals sign", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' is already documented", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_invalid_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0param' command used in a comment that is not attached to a function declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not found in the function declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_param_spaces_in_direction, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "whitespace is not allowed in parameter passing direction", 181, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_returns_attached_to_a_void_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is attached to a %select{function returning void|constructor|destructor|method returning void}2", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_returns_not_attached_to_a_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command used in a comment that is not attached to a function or method declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' is already documented", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_not_attached_to_a_template_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0tparam' command used in a comment that is not attached to a template declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_doc_tparam_not_found, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template parameter '%0' not found in the template declaration", 178, SFINAE_Suppress, false, false, 25)
+DIAG(warn_unknown_comment_command_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown command tag name", 182, SFINAE_Suppress, false, false, 25)
+DIAG(warn_verbatim_block_end_without_start, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%select{\\|@}0%1' command does not terminate a verbatim text block", 178, SFINAE_Suppress, false, false, 25)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
index 20a63a4..3310a73 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticCommonKinds.inc
@@ -16,6 +16,7 @@
 DIAG(err_expected_namespace_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected namespace name", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_expected_string_literal, CLASS_ERROR, (unsigned)diag::Severity::Error, "expected string literal %select{in %1|for diagnostic message in static_assert|for optional message in 'availability' attribute|for %select{language|source container}1 name in 'external_source_symbol' attribute}0", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_file_modified, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "file '%0' modified since it was first processed", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fixed_point_not_enabled, CLASS_ERROR, (unsigned)diag::Severity::Error, "compile with '-ffixed-point' to enable fixed point types", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_integer_literal_too_large, CLASS_ERROR, (unsigned)diag::Severity::Error, "integer literal is too large to be represented in any %select{signed |}0integer type", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_invalid_character_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "character literal with user-defined suffix cannot be used here", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_invalid_numeric_udl, CLASS_ERROR, (unsigned)diag::Severity::Error, "numeric literal with user-defined suffix cannot be used here", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -34,6 +35,8 @@
 DIAG(err_mt_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "[rewriter] %0", 0, SFINAE_SubstitutionFailure, false, false, 0)
 DIAG(err_nullability_conflicting, CLASS_ERROR, (unsigned)diag::Severity::Error, "nullability specifier %0 conflicts with existing specifier %1", 0, SFINAE_SubstitutionFailure, false, true, 19)
 DIAG(err_omp_more_one_clause, CLASS_ERROR, (unsigned)diag::Severity::Error, "directive '#pragma omp %0' cannot contain more than one '%1' clause%select{| with '%3' name modifier| with 'source' dependence}2", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_openclcxx_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_opt_not_valid_on_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified on this target", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_opt_not_valid_with_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified with '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_opt_not_valid_without_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '%0' cannot be specified without '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_param_redefinition, CLASS_ERROR, (unsigned)diag::Severity::Error, "redefinition of parameter %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -51,16 +54,17 @@
 DIAG(err_target_unsupported_execute_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "execute only is not supported for the %0 sub-architecture", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_target_unsupported_fpmath, CLASS_ERROR, (unsigned)diag::Severity::Error, "the '%0' unit is not supported with this instruction set", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_target_unsupported_unaligned, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 sub-architecture does not support unaligned accesses", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_too_large_for_fixed_point, CLASS_ERROR, (unsigned)diag::Severity::Error, "this value is too large for this fixed point type", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unable_to_make_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to make temporary file: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unable_to_rename_temp, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to rename temporary '%0' to output file '%1': '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_unsupported_bom, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "%0 byte order mark detected in '%1', but encoding is not supported", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(ext_c99_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is an extension when C99 mode is not enabled", 339, SFINAE_Suppress, false, false, 0)
-DIAG(ext_clang_diagnose_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'diagnose_if' is a clang extension", 233, SFINAE_Suppress, false, false, 0)
-DIAG(ext_clang_enable_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'enable_if' is a clang extension", 233, SFINAE_Suppress, false, false, 0)
-DIAG(ext_cxx11_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is a C++11 extension", 80, SFINAE_Suppress, false, false, 0)
-DIAG(ext_integer_literal_too_large_for_signed, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in a signed integer type, interpreting as unsigned", 280, SFINAE_Suppress, false, false, 0)
-DIAG(ext_old_implicitly_unsigned_long_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long' and is subject to undefined behavior under C++98, interpreting as 'unsigned long'; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 73, SFINAE_Suppress, false, false, 0)
-DIAG(ext_variadic_templates, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variadic templates are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is an extension when C99 mode is not enabled", 346, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_diagnose_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'diagnose_if' is a clang extension", 239, SFINAE_Suppress, false, false, 0)
+DIAG(ext_clang_enable_if, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'enable_if' is a clang extension", 239, SFINAE_Suppress, false, false, 0)
+DIAG(ext_cxx11_longlong, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'long long' is a C++11 extension", 81, SFINAE_Suppress, false, false, 0)
+DIAG(ext_integer_literal_too_large_for_signed, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in a signed integer type, interpreting as unsigned", 286, SFINAE_Suppress, false, false, 0)
+DIAG(ext_old_implicitly_unsigned_long_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long' and is subject to undefined behavior under C++98, interpreting as 'unsigned long'; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 74, SFINAE_Suppress, false, false, 0)
+DIAG(ext_variadic_templates, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variadic templates are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
 DIAG(fatal_too_many_errors, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "too many errors emitted, stopping now", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(note_also_found, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "also found", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_decl_hiding_tag_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%1 %0 is hidden by a non-type declaration of %0 here", 0, SFINAE_Suppress, false, false, 4)
@@ -79,16 +83,16 @@
 DIAG(note_type_being_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition of %0 is not complete until the closing '}'", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_using, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "using", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_valid_options, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "valid target CPU values are: %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(remark_module_lock_failure, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "could not acquire lock file for module '%0': %1", 396, SFINAE_Suppress, false, false, 4)
-DIAG(remark_module_lock_timeout, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "timed out waiting to acquire lock file for module '%0'", 396, SFINAE_Suppress, false, false, 4)
+DIAG(remark_module_lock_failure, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "could not acquire lock file for module '%0': %1", 404, SFINAE_Suppress, false, false, 4)
+DIAG(remark_module_lock_timeout, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "timed out waiting to acquire lock file for module '%0'", 404, SFINAE_Suppress, false, false, 4)
 DIAG(warn_arcmt_nsalloc_realloc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] call returns pointer to GC managed memory; it will become unmanaged in ARC", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_conflicting_nullability_attr_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", 433, SFINAE_Suppress, false, false, 19)
-DIAG(warn_conflicting_nullability_attr_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", 433, SFINAE_Suppress, false, false, 19)
-DIAG(warn_cxx98_compat_longlong, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'long long' is incompatible with C++98", 108, SFINAE_Suppress, false, false, 0)
-DIAG(warn_cxx98_compat_variadic_templates, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic templates are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_method_param_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redeclaration of method parameter %0", 183, SFINAE_Suppress, false, false, 4)
+DIAG(warn_conflicting_nullability_attr_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on parameter types, %0 conflicts with existing specifier %1", 442, SFINAE_Suppress, false, false, 19)
+DIAG(warn_conflicting_nullability_attr_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting nullability specifier on return types, %0 conflicts with existing specifier %1", 442, SFINAE_Suppress, false, false, 19)
+DIAG(warn_cxx98_compat_longlong, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'long long' is incompatible with C++98", 109, SFINAE_Suppress, false, false, 0)
+DIAG(warn_cxx98_compat_variadic_templates, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic templates are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_method_param_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redeclaration of method parameter %0", 187, SFINAE_Suppress, false, false, 4)
 DIAG(warn_method_param_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of method parameter %0", 0, SFINAE_Suppress, false, false, 4)
 DIAG(warn_mt_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "[rewriter] %0", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_nullability_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate nullability specifier %0", 433, SFINAE_Suppress, false, false, 19)
-DIAG(warn_old_implicitly_unsigned_long, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will %select{have type 'long long'|be ill-formed}0 in C99 onwards", 111, SFINAE_Suppress, false, false, 0)
-DIAG(warn_old_implicitly_unsigned_long_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C++98; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 73, SFINAE_Suppress, false, false, 0)
+DIAG(warn_nullability_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate nullability specifier %0", 442, SFINAE_Suppress, false, false, 19)
+DIAG(warn_old_implicitly_unsigned_long, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C89; this literal will %select{have type 'long long'|be ill-formed}0 in C99 onwards", 112, SFINAE_Suppress, false, false, 0)
+DIAG(warn_old_implicitly_unsigned_long_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer literal is too large to be represented in type 'long', interpreting as 'unsigned long' per C++98; this literal will %select{have type 'long long'|be ill-formed}0 in C++11 onwards", 74, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
index 906635a..f974b0f 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticDriverKinds.inc
@@ -27,7 +27,7 @@
 DIAG(err_drv_config_file_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "configuration file '%0' cannot be found", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_conflicting_deployment_targets, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting deployment targets, both '%0' and '%1' are present in environment", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_cuda_bad_gpu_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "Unsupported CUDA gpu architecture: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_drv_cuda_nvptx_host, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported use of NVPTX for host compilation.", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_cuda_host_arch, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported architecture '%0' for host compilation.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_cuda_version_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "GPU arch %0 is supported by CUDA versions between %1 and %2 (inclusive), but installation at %3 is %4.  Use --cuda-path to specify a different CUDA install, pass a different GPU arch with --cuda-gpu-arch, or pass --no-cuda-version-check.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_defsym_invalid_format, CLASS_ERROR, (unsigned)diag::Severity::Error, "defsym must be of the form: sym=value: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_defsym_invalid_symval, CLASS_ERROR, (unsigned)diag::Severity::Error, "Value is not an integer: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -35,6 +35,7 @@
 DIAG(err_drv_emit_llvm_link, CLASS_ERROR, (unsigned)diag::Severity::Error, "-emit-llvm cannot be used when linking", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_expecting_fopenmp_with_fopenmp_targets, CLASS_ERROR, (unsigned)diag::Severity::Error, "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_force_crash, CLASS_ERROR, (unsigned)diag::Severity::Error, "failing because %select{environment variable 'FORCE_CLANG_DIAGNOSTICS_CRASH' is set|'-gen-reproducer' is used}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_gnustep_objc_runtime_incompatible_binary, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNUstep Objective-C runtime version %0 incompatible with target binary format", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xarch_argument_isdriver, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', cannot change driver behavior inside Xarch argument", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xarch_argument_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid Xarch argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_Xopenmp_target_with_args, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid -Xopenmp-target argument: '%0', options requiring arguments are unsupported", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -52,6 +53,8 @@
 DIAG(err_drv_invalid_output_with_multiple_archs, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' output with multiple -arch options", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_pgo_instrumentor, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid PGO instrumentor in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_remap_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid option '%0' not of the form <from-file>;<to-file>", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_riscv_arch_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid arch name '%0', %1", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_invalid_riscv_ext_arch_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid arch name '%0', %1 '%2'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_rtlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid runtime library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_stdlib_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid library name in argument '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_invalid_thread_model_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid thread model '%0' in '%1' for this target", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -62,6 +65,7 @@
 DIAG(err_drv_mg_requires_m_or_mm, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '-MG' requires '-M' or '-MM'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_missing_arg_mtp, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing argument to '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_missing_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to '%0' is missing (expected %1 value%s1)", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_mix_cuda_hip, CLASS_ERROR, (unsigned)diag::Severity::Error, "Mixed Cuda and HIP compilation is not supported.", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_modules_validate_once_requires_timestamp, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '-fmodules-validate-once-per-build-session' requires '-fbuild-session-timestamp=<seconds since Epoch>' or '-fbuild-session-file=<file>'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_nested_config_file, CLASS_ERROR, (unsigned)diag::Severity::Error, "option '--config' is not allowed inside configuration file", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_no_ast_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0': unable to use AST files with this tool", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -90,6 +94,7 @@
 DIAG(err_drv_unknown_stdin_type_clang_cl, CLASS_ERROR, (unsigned)diag::Severity::Error, "use /Tc or /Tp to set input type for standard input", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_indirect_jump_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "'-mindirect-jump=%0' is unsupported with the '%1' architecture", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_linker, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported value '%0' for -linker option", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_drv_unsupported_noabicalls_pic, CLASS_ERROR, (unsigned)diag::Severity::Error, "position-independent code requires \342\200\230-mabicalls\342\200\231", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_opt, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_opt_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0' for target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_drv_unsupported_opt_with_suggestion, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported option '%0', did you mean '%1'?", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -108,54 +113,56 @@
 DIAG(note_drv_use_standard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0'%select{| or '%3'|, '%3', or '%4'|, '%3', '%4', or '%5'}2 for '%1' standard", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_drv_verify_prefix_spelling, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "-verify prefixes must start with a letter and contain only alphanumeric characters, hyphens, and underscores", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_use_dashdash, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "Use '--' to treat subsequent arguments as filenames", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_O4_is_O3, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-O4 is equivalent to -O3", 153, SFINAE_Suppress, false, false, 27)
+DIAG(warn_O4_is_O3, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-O4 is equivalent to -O3", 156, SFINAE_Suppress, false, false, 27)
 DIAG(warn_c_kext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring -fapple-kext which is valid for C++ and Objective-C++ only", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_debug_compression_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot compress debug sections (zlib not installed)", 148, SFINAE_Suppress, false, false, 0)
+DIAG(warn_debug_compression_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot compress debug sections (zlib not installed)", 151, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_assuming_mfloat_abi_is, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform, assuming -mfloat-abi=%0", 0, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_clang_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the clang compiler does not support '%0'", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_deprecated_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' is deprecated, use '%1' instead", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_drv_diagnostics_hotness_requires_pgo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' requires profile-guided optimization information", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_disabling_vptr_no_rtti_default, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicitly disabling vptr sanitizer because rtti wasn't enabled", 46, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_empty_joined_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "joined argument expects additional value: '%0'", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_enabling_rtti_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicitly enabling rtti for exception handling", 546, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_experimental_isel_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support for the '%0' architecture is incomplete", 202, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_experimental_isel_incomplete_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support is incomplete for this architecture at the current optimization level", 202, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_fine_grained_bitfield_accesses_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '-ffine-grained-bitfield-accesses' cannot be enabled together with a sanitizer; flag ignored", 479, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused%select{ when '%3' is present|}2", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_input_file_unused_by_cpp, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused in cpp mode", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_invoking_fallback, CLASS_WARNING, (unsigned)diag::Severity::Warning, "falling back to %0", 211, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_msvc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to find a Visual Studio installation; try running Clang from a developer command prompt", 406, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_object_size_disabled_O0, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", 314, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_omp_offload_target_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.", 478, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_omp_offload_target_missingbcruntime, CLASS_WARNING, (unsigned)diag::Severity::Warning, "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.", 478, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_optimization_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization level '%0' is not supported; using '%1%2' instead", 314, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_overriding_flag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding '%0' option with '%1'", 489, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_deprecated_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' is deprecated, use '%1' instead", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_drv_diagnostics_hotness_requires_pgo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument '%0' requires profile-guided optimization information", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_disabling_vptr_no_rtti_default, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicitly disabling vptr sanitizer because rtti wasn't enabled", 47, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_empty_joined_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "joined argument expects additional value: '%0'", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support for the '%0' architecture is incomplete", 206, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_experimental_isel_incomplete_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-fexperimental-isel support is incomplete for this architecture at the current optimization level", 206, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_fine_grained_bitfield_accesses_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '-ffine-grained-bitfield-accesses' cannot be enabled together with a sanitizer; flag ignored", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused%select{ when '%3' is present|}2", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_input_file_unused_by_cpp, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: '%1' input unused in cpp mode", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_invoking_fallback, CLASS_WARNING, (unsigned)diag::Severity::Warning, "falling back to %0", 215, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_moutline_unsupported_opt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The '%0' architecture does not support -moutline; flag ignored", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_msvc_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to find a Visual Studio installation; try running Clang from a developer command prompt", 414, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_object_size_disabled_O0, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the object size sanitizer has no effect at -O0, but is explicitly enabled: %0", 321, SFINAE_Suppress, true, false, 0)
+DIAG(warn_drv_omp_offload_target_duplicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.", 487, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_omp_offload_target_missingbcruntime, CLASS_WARNING, (unsigned)diag::Severity::Warning, "No library '%0' found in the default clang lib directory or in LIBRARY_PATH. Expect degraded performance due to no inlining of runtime functions on target devices.", 487, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_optimization_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization level '%0' is not supported; using '%1%2' instead", 321, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_overriding_flag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding '%0' option with '%1'", 499, SFINAE_Suppress, false, false, 0)
 DIAG(warn_drv_pch_not_first_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "precompiled header '%0' was ignored because '%1' is not first '-include'", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_preprocessed_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: previously preprocessed input%select{ unused when '%2' is present|}1", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ps4_force_pic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '%0' was ignored by the PS4 toolchain, using '-fPIC'", 479, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ps4_sdk_dir, CLASS_WARNING, (unsigned)diag::Severity::Warning, "environment variable SCE_ORBIS_SDK_DIR is set, but points to invalid or nonexistent directory '%0'", 321, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_treating_input_as_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating '%0' input as '%1' when in C++ mode, this behavior is deprecated", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_drv_unable_to_find_directory_expected, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unable to find %0 directory, expected to be in '%1'", 321, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unknown_argument_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl: '%0'", 657, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unknown_argument_clang_cl_with_suggestion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl '%0' (did you mean '%1'?)", 657, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_abicalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabicalls' option as it cannot be used with non position-independent code and the N64 ABI", 479, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_gpopt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", 677, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_longcalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mlong-calls' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", 479, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unsupported_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported for target '%1'", 266, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_unused_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument unused during compilation: '%0'", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_yc_multiple_inputs_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' with more than one source file not implemented yet; flag ignored", 119, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ycyu_different_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored", 119, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ycyu_no_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a filename not implemented yet; flag ignored", 119, SFINAE_Suppress, false, false, 0)
-DIAG(warn_drv_ycyu_no_fi_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a corresponding /FI flag not implemented yet; flag ignored", 119, SFINAE_Suppress, false, false, 0)
-DIAG(warn_ignored_clang_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the flag '%0' has been deprecated and will be ignored", 683, SFINAE_Suppress, false, false, 0)
-DIAG(warn_ignored_gcc_optimization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported", 266, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_preprocessed_input_file_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0: previously preprocessed input%select{ unused when '%2' is present|}1", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_force_pic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "option '%0' was ignored by the PS4 toolchain, using '-fPIC'", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ps4_sdk_dir, CLASS_WARNING, (unsigned)diag::Severity::Warning, "environment variable SCE_ORBIS_SDK_DIR is set, but points to invalid or nonexistent directory '%0'", 328, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_treating_input_as_cxx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating '%0' input as '%1' when in C++ mode, this behavior is deprecated", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_drv_unable_to_find_directory_expected, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unable to find %0 directory, expected to be in '%1'", 328, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl: '%0'", 673, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unknown_argument_clang_cl_with_suggestion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown argument ignored in clang-cl '%0' (did you mean '%1'?)", 673, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_debug_info_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "debug information option '%0' is not supported for target '%1'", 695, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_gpopt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mgpopt' option as it cannot be used with %select{|the implicit usage of }0-mabicalls", 693, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_longcalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mlong-calls' option as it is not currently supported with %select{|the implicit usage of }0-mabicalls", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_opt_for_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported for target '%1'", 272, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unsupported_pic_with_mabicalls, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%0' option as it cannot be used with %select{implicit usage of|}1 -mabicalls and the N64 ABI", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_unused_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument unused during compilation: '%0'", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_vectorize_needs_hvx, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto-vectorization requires HVX, use -mhvx to enable it", 488, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_yc_multiple_inputs_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' with more than one source file not implemented yet; flag ignored", 121, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_different_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '/Yc' and '/Yu' with different filenames not implemented yet; flags ignored", 121, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_no_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a filename not implemented yet; flag ignored", 121, SFINAE_Suppress, false, false, 0)
+DIAG(warn_drv_ycyu_no_fi_arg_clang_cl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "support for '%0' without a corresponding /FI flag not implemented yet; flag ignored", 121, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_clang_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the flag '%0' has been deprecated and will be ignored", 700, SFINAE_Suppress, false, false, 0)
+DIAG(warn_ignored_gcc_optimization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "optimization flag '%0' is not supported", 272, SFINAE_Suppress, false, false, 0)
 DIAG(warn_ignoring_ftabstop_value, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring invalid -ftabstop value '%0', using default value %1", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_incompatible_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using sysroot for '%0' but targeting '%1'", 293, SFINAE_Suppress, false, false, 0)
-DIAG(warn_invalid_ios_deployment_target, CLASS_WARNING, (unsigned)diag::Severity::Error, "invalid iOS deployment version '%0', iOS 10 is the maximum deployment target for 32-bit targets", 318, SFINAE_Suppress, false, false, 0)
-DIAG(warn_missing_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no such sysroot directory: '%0'", 394, SFINAE_Suppress, false, false, 0)
-DIAG(warn_slash_u_filename, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/U%0' treated as the '/U' option", 579, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_abs2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=2008' option because the '%0' architecture does not support it", 672, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_abslegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=legacy' option because the '%0' architecture does not support it", 672, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_compact_branches, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mcompact-branches=' option because the '%0' architecture does not support it", 674, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_nan2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=2008' option because the '%0' architecture does not support it", 678, SFINAE_Suppress, false, false, 0)
-DIAG(warn_target_unsupported_nanlegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=legacy' option because the '%0' architecture does not support it", 678, SFINAE_Suppress, false, false, 0)
+DIAG(warn_incompatible_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using sysroot for '%0' but targeting '%1'", 299, SFINAE_Suppress, false, false, 0)
+DIAG(warn_invalid_ios_deployment_target, CLASS_WARNING, (unsigned)diag::Severity::Error, "invalid iOS deployment version '%0', iOS 10 is the maximum deployment target for 32-bit targets", 325, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_sysroot, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no such sysroot directory: '%0'", 402, SFINAE_Suppress, false, false, 0)
+DIAG(warn_slash_u_filename, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/U%0' treated as the '/U' option", 592, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abs2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=2008' option because the '%0' architecture does not support it", 688, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_abslegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mabs=legacy' option because the '%0' architecture does not support it", 688, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_compact_branches, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mcompact-branches=' option because the '%0' architecture does not support it", 690, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nan2008, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=2008' option because the '%0' architecture does not support it", 694, SFINAE_Suppress, false, false, 0)
+DIAG(warn_target_unsupported_nanlegacy, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '-mnan=legacy' option because the '%0' architecture does not support it", 694, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticError.h b/linux-x64/clang/include/clang/Basic/DiagnosticError.h
index 6b4b073..3f7be46 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticError.h
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticError.h
@@ -15,7 +15,7 @@
 
 namespace clang {
 
-/// \brief Carries a Clang diagnostic in an llvm::Error.
+/// Carries a Clang diagnostic in an llvm::Error.
 ///
 /// Users should emit the stored diagnostic using the DiagnosticsEngine.
 class DiagnosticError : public llvm::ErrorInfo<DiagnosticError> {
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
index 0620299..701bb1a 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticFrontendKinds.inc
@@ -18,6 +18,7 @@
 DIAG(err_fe_inline_asm, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 12)
 DIAG(err_fe_invalid_alignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid value '%1' in '%0'; alignment must be a power of 2", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_invalid_code_complete_file, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "cannot locate code-completion file %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_fe_invalid_exception_model, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid exception model '%0' for target '%1'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_invalid_plugin_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "unable to find plugin '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_invalid_wchar_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid wchar_t type '%0'; must be one of 'char', 'short', 'int'", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_fe_no_pch_in_dir, CLASS_ERROR, (unsigned)diag::Severity::Error, "no suitable precompiled header file found in directory '%0'", 0, SFINAE_SubstitutionFailure, false, true, 0)
@@ -68,34 +69,35 @@
 DIAG(note_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module imported here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_private_top_level_defined, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "module defined here", 0, SFINAE_Suppress, false, false, 0)
 DIAG(note_suggest_disabling_all_checkers, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -analyzer-disable-all-checks to disable all static analyzer checkers", 0, SFINAE_Suppress, false, false, 0)
-DIAG(remark_fe_backend_optimization_remark, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 495, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 496, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis_aliasing, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!", 496, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_analysis_fpcommute, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop or by providing the compiler option '-ffast-math'.", 496, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_optimization_remark_missed, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 498, SFINAE_Suppress, false, true, 16)
-DIAG(remark_fe_backend_plugin, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 537, SFINAE_Suppress, false, true, 16)
-DIAG(remark_module_build, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "building module '%0' as '%1'", 396, SFINAE_Suppress, false, false, 0)
-DIAG(remark_module_build_done, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "finished building module '%0'", 396, SFINAE_Suppress, false, false, 0)
-DIAG(remark_sanitize_address_insert_extra_padding_accepted, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding applied to %0", 547, SFINAE_Suppress, false, true, 0)
-DIAG(remark_sanitize_address_insert_extra_padding_rejected, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a blacklisted file|is blacklisted}1", 547, SFINAE_Suppress, false, true, 0)
-DIAG(warn_fe_backend_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 230, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_backend_optimization_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 497, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_backend_plugin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 51, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 505, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 506, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis_aliasing, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop. If the arrays will always be independent specify '#pragma clang loop vectorize(assume_safety)' before the loop or provide the '__restrict__' qualifier with the independent array arguments. Erroneous results will occur if these options are incorrectly applied!", 506, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_analysis_fpcommute, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0; allow reordering by specifying '#pragma clang loop vectorize(enable)' before the loop or by providing the compiler option '-ffast-math'.", 506, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_optimization_remark_missed, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 508, SFINAE_Suppress, false, true, 16)
+DIAG(remark_fe_backend_plugin, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "%0", 548, SFINAE_Suppress, false, true, 16)
+DIAG(remark_module_build, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "building module '%0' as '%1'", 404, SFINAE_Suppress, false, false, 0)
+DIAG(remark_module_build_done, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "finished building module '%0'", 404, SFINAE_Suppress, false, false, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_accepted, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding applied to %0", 559, SFINAE_Suppress, false, true, 0)
+DIAG(remark_sanitize_address_insert_extra_padding_rejected, CLASS_REMARK, (unsigned)diag::Severity::Ignored, "-fsanitize-address-field-padding ignored for %0 because it %select{is not C++|is packed|is a union|is trivially copyable|has trivial destructor|is standard layout|is in a blacklisted file|is blacklisted}1", 559, SFINAE_Suppress, false, true, 0)
+DIAG(warn_fe_backend_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 234, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_backend_optimization_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 507, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_backend_plugin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 52, SFINAE_Suppress, false, true, 16)
 DIAG(warn_fe_cc_log_diagnostics_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_LOG_DIAGNOSTICS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
 DIAG(warn_fe_cc_print_header_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open CC_PRINT_HEADERS file: %0 (using stderr)", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "stack frame size of %0 bytes in %q1", 230, SFINAE_Suppress, false, true, 16)
-DIAG(warn_fe_inline_asm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 306, SFINAE_Suppress, false, false, 12)
+DIAG(warn_fe_frame_larger_than, CLASS_WARNING, (unsigned)diag::Severity::Warning, "stack frame size of %0 bytes in %q1", 234, SFINAE_Suppress, false, true, 16)
+DIAG(warn_fe_inline_asm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 313, SFINAE_Suppress, false, false, 12)
 DIAG(warn_fe_macro_contains_embedded_newline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro '%0' contains embedded newline; text after the newline is ignored", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_override_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding the module target triple with %0", 487, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_serialized_diag_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open file %0 for serializing diagnostics (%1)", 557, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_serialized_diag_merge_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to merge a subprocess's serialized diagnostics", 557, SFINAE_Suppress, false, false, 0)
-DIAG(warn_fe_unable_to_open_stats_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open statistics output file '%0': '%1'", 639, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_override_module, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding the module target triple with %0", 497, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open file %0 for serializing diagnostics (%1)", 570, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_serialized_diag_merge_failure, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to merge a subprocess's serialized diagnostics", 570, SFINAE_Suppress, false, false, 0)
+DIAG(warn_fe_unable_to_open_stats_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unable to open statistics output file '%0': '%1'", 655, SFINAE_Suppress, false, false, 0)
 DIAG(warn_fixit_no_changes, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "FIX-IT detected errors it could not fix; no output will be generated", 0, SFINAE_Suppress, false, false, 0)
-DIAG(warn_incompatible_analyzer_plugin_api, CLASS_WARNING, (unsigned)diag::Severity::Warning, "checker plugin '%0' is not compatible with this version of the analyzer", 23, SFINAE_Suppress, false, false, 0)
-DIAG(warn_missing_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing submodule '%0'", 296, SFINAE_Suppress, false, false, 0)
-DIAG(warn_module_config_macro_undef, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{definition|#undef}0 of configuration macro '%1' has no effect on the import of '%2'; pass '%select{-D%1=...|-U%1}0' on the command line to configure the module", 128, SFINAE_Suppress, false, false, 0)
-DIAG(warn_module_config_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Error, "module file %0 cannot be loaded due to a configuration mismatch with the current compilation", 398, SFINAE_Suppress, false, false, 0)
-DIAG(warn_no_priv_submodule_use_toplevel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no submodule named %0 in module '%1'; using top level '%2'", 518, SFINAE_Suppress, false, false, 0)
-DIAG(warn_option_invalid_ocl_version, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL version %0 does not support the option '%1'", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_unknown_diag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %select{warning|remark}0 option '%1'%select{|; did you mean '%3'?}2", 662, SFINAE_Suppress, false, false, 0)
-DIAG(warn_unknown_warning_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %0 warning specifier: '%1'", 662, SFINAE_Suppress, false, false, 0)
+DIAG(warn_incompatible_analyzer_plugin_api, CLASS_WARNING, (unsigned)diag::Severity::Warning, "checker plugin '%0' is not compatible with this version of the analyzer", 21, SFINAE_Suppress, false, false, 0)
+DIAG(warn_missing_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing submodule '%0'", 303, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_macro_undef, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{definition|#undef}0 of configuration macro '%1' has no effect on the import of '%2'; pass '%select{-D%1=...|-U%1}0' on the command line to configure the module", 130, SFINAE_Suppress, false, false, 0)
+DIAG(warn_module_config_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Error, "module file %0 cannot be loaded due to a configuration mismatch with the current compilation", 406, SFINAE_Suppress, false, false, 0)
+DIAG(warn_no_priv_submodule_use_toplevel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no submodule named %0 in module '%1'; using top level '%2'", 528, SFINAE_Suppress, false, false, 0)
+DIAG(warn_option_invalid_ocl_version, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL version %0 does not support the option '%1'", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_stdlibcxx_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "include path for stdlibc++ headers not found; pass '-std=libc++' on the command line to use the libc++ standard library instead", 602, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_diag_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %select{warning|remark}0 option '%1'%select{|; did you mean '%3'?}2", 678, SFINAE_Suppress, false, false, 0)
+DIAG(warn_unknown_warning_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown %0 warning specifier: '%1'", 678, SFINAE_Suppress, false, false, 0)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc b/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
index 2ff756f..7dfadba 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticGroups.inc
@@ -10,986 +10,1010 @@
   /* DiagArray8 */ diag::warn_abs_too_small, diag::warn_pointer_abs, diag::warn_unsigned_abs, diag::warn_wrong_absolute_value_type, -1,
   /* DiagArray9 */ diag::warn_abstract_final_class, -1,
   /* DiagArray10 */ diag::warn_abstract_vbase_init_ignored, -1,
-  /* DiagArray12 */ diag::warn_temporary_array_to_pointer_decay, -1,
-  /* DiagArray13 */ diag::warn_taking_address_of_packed_member, -1,
-  /* DiagArray14 */ diag::ext_typecheck_addrof_temporary, -1,
-  /* DiagArray16 */ diag::warn_aligned_allocation_unavailable, -1,
-  /* DiagArray18 */ diag::warn_alloca_align_alignof, -1,
-  /* DiagArray19 */ diag::warn_ambiguous_suitable_delete_function_found, -1,
-  /* DiagArray20 */ diag::warn_misplaced_ellipsis_vararg, -1,
-  /* DiagArray21 */ diag::warn_pp_ambiguous_macro, -1,
-  /* DiagArray22 */ diag::ext_nested_name_member_ref_lookup_ambiguous, -1,
-  /* DiagArray23 */ diag::warn_incompatible_analyzer_plugin_api, -1,
-  /* DiagArray24 */ diag::ext_abstract_pack_declarator_parens, -1,
-  /* DiagArray26 */ diag::warn_arc_bridge_cast_nonarc, -1,
-  /* DiagArray27 */ diag::warn_arc_possible_repeated_use_of_weak, -1,
-  /* DiagArray28 */ diag::warn_arc_object_memaccess, -1,
-  /* DiagArray29 */ diag::warn_arc_perform_selector_leaks, -1,
-  /* DiagArray30 */ diag::warn_arc_repeated_use_of_weak, -1,
-  /* DiagArray31 */ diag::warn_arc_retain_cycle, -1,
-  /* DiagArray32 */ diag::warn_arc_literal_assign, diag::warn_arc_retained_assign, diag::warn_arc_retained_property_assign, -1,
-  /* DiagArray33 */ diag::warn_array_index_exceeds_bounds, diag::warn_array_index_precedes_bounds, diag::warn_static_array_too_small, diag::warn_typecheck_zero_static_array_size, -1,
-  /* DiagArray34 */ diag::warn_ptr_arith_exceeds_bounds, diag::warn_ptr_arith_precedes_bounds, -1,
-  /* DiagArray36 */ diag::warn_asm_qualifier_ignored, diag::warn_file_asm_volatile, -1,
-  /* DiagArray37 */ diag::warn_asm_mismatched_size_modifier, -1,
-  /* DiagArray38 */ diag::warn_not_in_enum_assignment, -1,
-  /* DiagArray39 */ diag::warn_assume_side_effects, -1,
-  /* DiagArray40 */ diag::warn_atprotocol_protocol, -1,
-  /* DiagArray41 */ diag::warn_atomic_op_has_invalid_memory_order, -1,
-  /* DiagArray43 */ diag::warn_atomic_property_rule, -1,
-  /* DiagArray44 */ diag::warn_attribute_packed_for_bitfield, -1,
-  /* DiagArray46 */ diag::warn_drv_disabling_vptr_no_rtti_default, -1,
-  /* DiagArray47 */ diag::warn_auto_module_import, -1,
-  /* DiagArray48 */ diag::ext_auto_storage_class, -1,
-  /* DiagArray49 */ diag::warn_auto_var_is_id, -1,
-  /* DiagArray50 */ diag::warn_availability_and_unavailable, diag::warn_availability_unknown_platform, diag::warn_availability_version_ordering, diag::warn_expected_consistent_version_separator, diag::warn_mismatched_availability, diag::warn_mismatched_availability_override, diag::warn_mismatched_availability_override_unavail, -1,
-  /* DiagArray51 */ diag::warn_fe_backend_plugin, -1,
-  /* DiagArray52 */ diag::backslash_newline_space, -1,
-  /* DiagArray53 */ diag::warn_bad_function_cast, -1,
-  /* DiagArray55 */ diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, -1,
-  /* DiagArray56 */ diag::ext_decomp_decl_cond, -1,
-  /* DiagArray57 */ diag::warn_impcast_bitfield_precision_constant, -1,
-  /* DiagArray58 */ diag::warn_bitfield_too_small_for_enum, diag::warn_signed_bitfield_enum_conversion, diag::warn_unsigned_bitfield_assigned_signed_enum, -1,
-  /* DiagArray59 */ diag::warn_anon_bitfield_width_exceeds_type_width, diag::warn_bitfield_width_exceeds_type_width, -1,
-  /* DiagArray60 */ diag::warn_bitwise_op_in_bitwise_op, -1,
-  /* DiagArray61 */ diag::warn_block_capture_autoreleasing, -1,
-  /* DiagArray62 */ diag::warn_impcast_bool_to_null_pointer, -1,
-  /* DiagArray64 */ diag::warn_braces_around_scalar_init, -1,
-  /* DiagArray65 */ diag::warn_objc_invalid_bridge, diag::warn_objc_invalid_bridge_to_cf, -1,
-  /* DiagArray66 */ diag::ext_pp_redef_builtin_macro, diag::ext_pp_undef_builtin_macro, -1,
-  /* DiagArray67 */ diag::warn_memcpy_chk_overflow, -1,
-  /* DiagArray68 */ diag::warn_implicit_decl_requires_sysheader, -1,
-  /* DiagArray69 */ diag::warn_zero_size_struct_union_compat, -1,
-  /* DiagArray73 */ diag::ext_old_implicitly_unsigned_long_cxx, diag::warn_auto_storage_class, diag::warn_cxx11_compat_user_defined_literal, diag::warn_cxx11_keyword, diag::warn_cxx11_right_shift_in_template_arg, diag::warn_explicit_instantiation_inline_0x, diag::warn_explicit_instantiation_must_be_global_0x, diag::warn_explicit_instantiation_out_of_scope_0x, diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x, diag::warn_old_implicitly_unsigned_long_cxx, -1,
-  /* DiagArray74 */ diag::warn_deprecated_string_literal_conversion, -1,
-  /* DiagArray76 */ diag::warn_cxx11_compat_reserved_user_defined_literal, -1,
-  /* DiagArray77 */ diag::ext_alias_declaration, diag::ext_array_size_conversion, diag::ext_auto_type_specifier, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_defaulted_deleted_function, diag::ext_enum_friend, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_conversion_functions, diag::ext_extern_template, diag::ext_for_range, diag::ext_generalized_initializer_lists, diag::ext_nested_name_spec_is_enum, diag::ext_nonclass_type_friend, diag::ext_nonstatic_member_init, diag::ext_override_control_keyword, diag::ext_ref_qualifier, diag::ext_rvalue_reference, diag::ext_scoped_enum, diag::ext_static_data_member_in_union, diag::ext_template_arg_object_internal, diag::ext_template_outside_of_template, diag::ext_template_parameter_default_in_function_template, diag::ext_typename_outside_of_template, diag::ext_unelaborated_friend_type, diag::ext_variadic_templates, -1,
-  /* DiagArray78 */ diag::ext_extra_semi_cxx11, -1,
-  /* DiagArray79 */ diag::ext_inline_namespace, -1,
-  /* DiagArray80 */ diag::ext_cxx11_longlong, -1,
-  /* DiagArray81 */ diag::ext_cce_narrowing, diag::ext_init_list_constant_narrowing, diag::ext_init_list_type_narrowing, diag::ext_init_list_variable_narrowing, diag::warn_init_list_constant_narrowing, diag::warn_init_list_type_narrowing, diag::warn_init_list_variable_narrowing, -1,
-  /* DiagArray82 */ diag::ext_binary_literal_cxx14, -1,
-  /* DiagArray85 */ diag::ext_constexpr_body_invalid_stmt, diag::ext_constexpr_body_multiple_return, diag::ext_constexpr_local_var, diag::ext_constexpr_type_definition, diag::ext_cxx14_attr, diag::ext_decltype_auto_type_specifier, diag::ext_init_capture, diag::ext_variable_template, -1,
-  /* DiagArray87 */ diag::warn_cxx17_compat_exception_spec_in_signature, -1,
-  /* DiagArray89 */ diag::ext_auto_new_list_init, diag::ext_constexpr_if, diag::ext_constexpr_on_lambda_cxx17, diag::ext_cxx17_attr, diag::ext_decomp_decl, diag::ext_fold_expression, diag::ext_for_range_begin_end_types_differ, diag::ext_hex_literal_invalid, diag::ext_init_statement, diag::ext_inline_variable, diag::ext_multi_using_declaration, diag::ext_nested_namespace_definition, diag::ext_ns_enum_attribute, diag::ext_star_this_lambda_capture_cxx17, diag::ext_static_assert_no_message, diag::ext_template_template_param_typename, diag::ext_using_attribute_ns, diag::ext_using_declaration_pack, -1,
-  /* DiagArray94 */ diag::warn_cxx2a_compat_spaceship, diag::warn_cxx2a_keyword, -1,
-  /* DiagArray96 */ diag::ext_bitfield_member_init, diag::ext_equals_this_lambda_capture_cxx2a, diag::ext_pointer_to_const_ref_member_on_rvalue, -1,
-  /* DiagArray97 */ diag::warn_cxx17_compat_bitfield_member_init, diag::warn_cxx17_compat_equals_this_lambda_capture, diag::warn_cxx17_compat_spaceship, -1,
-  /* DiagArray98 */ diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, -1,
-  /* DiagArray99 */ diag::warn_cxx14_compat_constexpr_if, diag::warn_cxx14_compat_constexpr_on_lambda, diag::warn_cxx14_compat_decomp_decl, diag::warn_cxx14_compat_fold_expression, diag::warn_cxx14_compat_init_statement, diag::warn_cxx14_compat_inline_variable, diag::warn_cxx14_compat_nested_namespace_definition, diag::warn_cxx14_compat_star_this_lambda_capture, diag::warn_cxx14_compat_static_assert_no_message, diag::warn_cxx14_compat_template_nontype_parm_auto_type, diag::warn_cxx14_compat_template_template_param_typename, diag::warn_cxx14_compat_u8_character_literal, diag::warn_cxx14_compat_using_attribute_ns, diag::warn_cxx17_compat_multi_using_declaration, diag::warn_cxx17_compat_using_declaration_pack, diag::warn_for_range_begin_end_types_differ, -1,
-  /* DiagArray100 */ diag::warn_cxx14_compat_ns_enum_attribute, diag::warn_cxx17_hex_literal, -1,
-  /* DiagArray101 */ diag::warn_cxx11_compat_constexpr_body_invalid_stmt, diag::warn_cxx11_compat_constexpr_body_multiple_return, diag::warn_cxx11_compat_constexpr_body_no_return, diag::warn_cxx11_compat_constexpr_local_var, diag::warn_cxx11_compat_constexpr_type_definition, diag::warn_cxx11_compat_decltype_auto_type_specifier, diag::warn_cxx11_compat_digit_separator, diag::warn_cxx11_compat_init_capture, diag::warn_cxx11_compat_variable_template, -1,
-  /* DiagArray102 */ diag::warn_cxx11_compat_binary_literal, -1,
-  /* DiagArray104 */ diag::warn_cxx98_compat_alias_declaration, diag::warn_cxx98_compat_alignas, diag::warn_cxx98_compat_alignof, diag::warn_cxx98_compat_attribute, diag::warn_cxx98_compat_auto_type_specifier, diag::warn_cxx98_compat_constexpr, diag::warn_cxx98_compat_ctor_list_init, diag::warn_cxx98_compat_decltype, diag::warn_cxx98_compat_defaulted_deleted_function, diag::warn_cxx98_compat_delegating_ctor, diag::warn_cxx98_compat_empty_scalar_initializer, diag::warn_cxx98_compat_enum_fixed_underlying_type, diag::warn_cxx98_compat_enum_friend, diag::warn_cxx98_compat_enum_nested_name_spec, diag::warn_cxx98_compat_explicit_conversion_functions, diag::warn_cxx98_compat_for_range, diag::warn_cxx98_compat_friend_is_member, diag::warn_cxx98_compat_generalized_initializer_lists, diag::warn_cxx98_compat_goto_into_protected_scope, diag::warn_cxx98_compat_indirect_goto_in_protected_scope, diag::warn_cxx98_compat_initializer_list_init, diag::warn_cxx98_compat_inline_namespace, diag::warn_cxx98_compat_lambda, diag::warn_cxx98_compat_less_colon_colon, diag::warn_cxx98_compat_literal_operator, diag::warn_cxx98_compat_literal_ucn_control_character, diag::warn_cxx98_compat_literal_ucn_escape_basic_scs, diag::warn_cxx98_compat_noexcept_decl, diag::warn_cxx98_compat_noexcept_expr, diag::warn_cxx98_compat_non_static_member_use, diag::warn_cxx98_compat_nonclass_type_friend, diag::warn_cxx98_compat_nonstatic_member_init, diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member, diag::warn_cxx98_compat_nullptr, diag::warn_cxx98_compat_override_control_keyword, diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg, diag::warn_cxx98_compat_raw_string_literal, diag::warn_cxx98_compat_ref_qualifier, diag::warn_cxx98_compat_reference_list_init, diag::warn_cxx98_compat_rvalue_reference, diag::warn_cxx98_compat_scoped_enum, diag::warn_cxx98_compat_sfinae_access_control, diag::warn_cxx98_compat_static_assert, diag::warn_cxx98_compat_static_data_member_in_union, diag::warn_cxx98_compat_switch_into_protected_scope, diag::warn_cxx98_compat_template_arg_extra_parens, diag::warn_cxx98_compat_template_arg_null, diag::warn_cxx98_compat_template_arg_object_internal, diag::warn_cxx98_compat_template_outside_of_template, diag::warn_cxx98_compat_template_parameter_default_in_function_template, diag::warn_cxx98_compat_trailing_return_type, diag::warn_cxx98_compat_two_right_angle_brackets, diag::warn_cxx98_compat_typename_outside_of_template, diag::warn_cxx98_compat_unelaborated_friend_type, diag::warn_cxx98_compat_unicode_id, diag::warn_cxx98_compat_unicode_literal, diag::warn_cxx98_compat_unicode_type, diag::warn_cxx98_compat_using_decl_constructor, diag::warn_cxx98_compat_variadic_templates, -1,
-  /* DiagArray105 */ diag::warn_cxx98_compat_temp_copy, -1,
-  /* DiagArray106 */ diag::warn_cxx98_compat_top_level_semi, -1,
-  /* DiagArray107 */ diag::warn_cxx98_compat_template_arg_local_type, -1,
-  /* DiagArray108 */ diag::warn_cxx98_compat_array_size_conversion, diag::warn_cxx98_compat_cast_fn_obj, diag::warn_cxx98_compat_empty_fnmacro_arg, diag::warn_cxx98_compat_enumerator_list_comma, diag::warn_cxx98_compat_extern_template, diag::warn_cxx98_compat_longlong, diag::warn_cxx98_compat_no_newline_eof, diag::warn_cxx98_compat_pp_line_too_big, diag::warn_cxx98_compat_variadic_macro, -1,
-  /* DiagArray109 */ diag::warn_cxx98_compat_template_arg_unnamed_type, -1,
-  /* DiagArray110 */ diag::ext_anonymous_union, diag::ext_c11_alignment, diag::ext_c11_anonymous_struct, diag::ext_c11_generic_selection, diag::ext_c11_noreturn, diag::ext_c11_static_assert, -1,
-  /* DiagArray111 */ diag::warn_c99_compat_unicode_id, diag::warn_c99_compat_unicode_literal, diag::warn_old_implicitly_unsigned_long, -1,
-  /* DiagArray112 */ diag::ext_aggregate_init_not_constant, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_c99_whitespace_required_after_macro_name, diag::ext_designated_init, diag::ext_empty_fnmacro_arg, diag::ext_enumerator_list_comma_c, diag::ext_hex_constant_invalid, -1,
-  /* DiagArray113 */ diag::warn_cast_align, -1,
-  /* DiagArray114 */ diag::warn_cast_calling_conv, -1,
-  /* DiagArray115 */ diag::warn_cast_pointer_from_sel, -1,
-  /* DiagArray116 */ diag::warn_cast_qual, diag::warn_cast_qual2, -1,
-  /* DiagArray118 */ diag::warn_omp_section_is_char, diag::warn_subscript_is_char, -1,
-  /* DiagArray119 */ diag::warn_drv_yc_multiple_inputs_clang_cl, diag::warn_drv_ycyu_different_arg_clang_cl, diag::warn_drv_ycyu_no_arg_clang_cl, diag::warn_drv_ycyu_no_fi_arg_clang_cl, -1,
-  /* DiagArray120 */ diag::warn_pass_class_arg_to_vararg, -1,
-  /* DiagArray121 */ diag::warn_comma_operator, -1,
-  /* DiagArray122 */ diag::escaped_newline_block_comment_end, diag::ext_line_comment, diag::ext_multi_line_line_comment, diag::warn_nested_block_comment, -1,
-  /* DiagArray124 */ diag::ext_typecheck_comparison_of_distinct_pointers, -1,
-  /* DiagArray125 */ diag::ext_complex_component_init, -1,
-  /* DiagArray126 */ diag::ext_typecheck_cond_pointer_integer_mismatch, -1,
-  /* DiagArray127 */ diag::warn_maybe_uninit_var, -1,
-  /* DiagArray128 */ diag::warn_module_config_macro_undef, -1,
-  /* DiagArray129 */ diag::warn_impcast_integer_precision_constant, -1,
-  /* DiagArray130 */ diag::warn_logical_instead_of_bitwise, -1,
-  /* DiagArray131 */ diag::warn_cxx14_compat_constexpr_not_const, -1,
-  /* DiagArray132 */ diag::warn_attr_on_unconsumable_class, diag::warn_loop_state_mismatch, diag::warn_param_return_typestate_mismatch, diag::warn_param_typestate_mismatch, diag::warn_return_typestate_for_unconsumable_type, diag::warn_return_typestate_mismatch, diag::warn_use_in_invalid_state, diag::warn_use_of_temp_in_invalid_state, -1,
-  /* DiagArray133 */ diag::warn_impcast_complex_scalar, diag::warn_impcast_float_precision, diag::warn_impcast_float_result_precision, diag::warn_impcast_integer_precision, diag::warn_impcast_vector_scalar, diag::warn_template_arg_negative, diag::warn_template_arg_too_large, -1,
-  /* DiagArray136 */ diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions, -1,
-  /* DiagArray137 */ diag::warn_unreachable_default, -1,
-  /* DiagArray139 */ diag::warn_objc_cdirective_format_string, -1,
-  /* DiagArray141 */ diag::warn_attribute_argument_n_negative, diag::warn_cuda_attr_lambda_position, diag::warn_kern_is_inline, diag::warn_kern_is_method, diag::warn_pragma_unroll_cuda_value_in_parens, -1,
-  /* DiagArray142 */ diag::warn_default_atomic_custom_getter_setter, -1,
-  /* DiagArray143 */ diag::warn_dangling_else, -1,
-  /* DiagArray144 */ diag::warn_bind_ref_member_to_parameter, diag::warn_bind_ref_member_to_temporary, diag::warn_init_ptr_member_to_parameter_addr, -1,
-  /* DiagArray145 */ diag::warn_dangling_std_initializer_list, -1,
-  /* DiagArray146 */ diag::warn_pp_date_time, -1,
-  /* DiagArray147 */ diag::warn_dealloc_in_category, -1,
-  /* DiagArray148 */ diag::warn_debug_compression_unavailable, -1,
-  /* DiagArray149 */ diag::ext_mixed_decls_code, -1,
-  /* DiagArray150 */ diag::warn_delegating_ctor_cycle, -1,
-  /* DiagArray151 */ diag::ext_delete_void_ptr_operand, diag::warn_delete_incomplete, -1,
-  /* DiagArray152 */ diag::warn_delete_abstract_non_virtual_dtor, diag::warn_delete_non_virtual_dtor, -1,
-  /* DiagArray153 */ diag::warn_O4_is_O3, diag::warn_access_decl_deprecated, diag::warn_deprecated_copy_operation, diag::warn_deprecated_redundant_constexpr_static_def, diag::warn_drv_deprecated_arg, diag::warn_drv_treating_input_as_cxx, diag::warn_option_invalid_ocl_version, diag::warn_vector_long_decl_spec_combination, -1,
-  /* DiagArray154 */ diag::warn_vector_mode_deprecated, -1,
-  /* DiagArray155 */ diag::warn_atl_uuid_deprecated, diag::warn_cstyle_param, diag::warn_deprecated, diag::warn_deprecated_fwdclass_message, diag::warn_deprecated_message, diag::warn_property_method_deprecated, -1,
-  /* DiagArray156 */ diag::warn_exception_spec_deprecated, -1,
-  /* DiagArray157 */ diag::warn_deprecated_def, diag::warn_unavailable_def, -1,
-  /* DiagArray158 */ diag::warn_increment_bool, -1,
-  /* DiagArray159 */ diag::warn_objc_isa_assign, diag::warn_objc_isa_use, -1,
-  /* DiagArray160 */ diag::warn_objc_pointer_masking, -1,
-  /* DiagArray161 */ diag::warn_objc_pointer_masking_performSelector, -1,
-  /* DiagArray162 */ diag::warn_deprecated_register, -1,
-  /* DiagArray164 */ diag::warn_direct_ivar_access, -1,
-  /* DiagArray165 */ diag::pp_disabled_macro_expansion, -1,
-  /* DiagArray168 */ diag::warn_conflicting_param_modifiers, diag::warn_conflicting_ret_type_modifiers, -1,
-  /* DiagArray170 */ diag::warn_remainder_division_by_zero, -1,
-  /* DiagArray171 */ diag::warn_attribute_dll_redeclaration, -1,
-  /* DiagArray172 */ diag::warn_attribute_dllexport_explicit_instantiation_decl, -1,
-  /* DiagArray173 */ diag::warn_attribute_dllimport_static_field_definition, -1,
-  /* DiagArray174 */ diag::warn_doc_api_container_decl_mismatch, diag::warn_doc_block_command_duplicate, diag::warn_doc_block_command_empty_paragraph, diag::warn_doc_container_decl_mismatch, diag::warn_doc_function_method_decl_mismatch, diag::warn_doc_html_start_tag_expected_ident_or_greater, diag::warn_doc_html_start_tag_expected_quoted_string, diag::warn_doc_param_duplicate, diag::warn_doc_param_invalid_direction, diag::warn_doc_param_not_attached_to_a_function_decl, diag::warn_doc_param_not_found, diag::warn_doc_returns_attached_to_a_void_function, diag::warn_doc_returns_not_attached_to_a_function_decl, diag::warn_doc_tparam_duplicate, diag::warn_doc_tparam_not_attached_to_a_template_decl, diag::warn_doc_tparam_not_found, diag::warn_not_a_doxygen_trailing_member_comment, diag::warn_verbatim_block_end_without_start, -1,
-  /* DiagArray175 */ diag::warn_doc_deprecated_not_sync, -1,
-  /* DiagArray176 */ diag::warn_doc_html_end_forbidden, diag::warn_doc_html_end_unbalanced, diag::warn_doc_html_missing_end_tag, diag::warn_doc_html_start_end_mismatch, -1,
-  /* DiagArray177 */ diag::warn_doc_param_spaces_in_direction, -1,
-  /* DiagArray178 */ diag::warn_correct_comment_command_name, diag::warn_unknown_comment_command_name, -1,
-  /* DiagArray179 */ diag::ext_dollar_in_identifier, -1,
-  /* DiagArray180 */ diag::warn_impcast_double_promotion, -1,
-  /* DiagArray181 */ diag::ext_duplicate_declspec, diag::warn_duplicate_declspec, -1,
-  /* DiagArray182 */ diag::warn_duplicate_enum_values, -1,
-  /* DiagArray183 */ diag::warn_method_param_declaration, -1,
-  /* DiagArray184 */ diag::warn_duplicate_method_decl, -1,
-  /* DiagArray185 */ diag::warn_duplicate_protocol_def, -1,
-  /* DiagArray186 */ diag::warn_dyn_class_memaccess, -1,
-  /* DiagArray187 */ diag::ext_dynamic_exception_spec, -1,
-  /* DiagArray189 */ diag::ext_embedded_directive, -1,
-  /* DiagArray190 */ diag::warn_empty_for_body, diag::warn_empty_if_body, diag::warn_empty_range_based_for_body, diag::warn_empty_switch_body, diag::warn_empty_while_body, -1,
-  /* DiagArray191 */ diag::ext_decomp_decl_empty, -1,
-  /* DiagArray192 */ diag::ext_empty_translation_unit, -1,
-  /* DiagArray193 */ diag::warn_incomplete_encoded_type, -1,
-  /* DiagArray195 */ diag::warn_comparison_of_mixed_enum_types, -1,
-  /* DiagArray196 */ diag::warn_comparison_of_mixed_enum_types_switch, -1,
-  /* DiagArray197 */ diag::warn_impcast_different_enum_types, -1,
-  /* DiagArray198 */ diag::ext_enum_too_large, diag::ext_enumerator_increment_too_large, -1,
-  /* DiagArray199 */ diag::warn_cdtor_function_try_handler_mem_expr, diag::warn_exception_caught_by_earlier_handler, diag::warn_throw_in_noexcept_func, -1,
-  /* DiagArray200 */ diag::warn_exit_time_destructor, -1,
-  /* DiagArray201 */ diag::warn_defined_in_function_type_macro, diag::warn_defined_in_object_type_macro, -1,
-  /* DiagArray202 */ diag::warn_drv_experimental_isel_incomplete, diag::warn_drv_experimental_isel_incomplete_opt, -1,
-  /* DiagArray203 */ diag::warn_direct_initialize_call, diag::warn_direct_super_initialize_call, -1,
-  /* DiagArray204 */ diag::warn_arc_strong_pointer_objc_pointer, -1,
-  /* DiagArray205 */ diag::warn_zero_size_struct_union_in_extern_c, -1,
-  /* DiagArray206 */ diag::warn_extern_init, -1,
-  /* DiagArray207 */ diag::warn_arm_interrupt_calling_convention, -1,
-  /* DiagArray208 */ diag::warn_namespace_member_extra_qualification, -1,
-  /* DiagArray209 */ diag::ext_extra_semi, diag::warn_extra_semi_after_mem_fn_def, -1,
-  /* DiagArray210 */ diag::ext_pp_extra_tokens_at_eol, diag::warn_omp_extra_tokens_at_eol, -1,
-  /* DiagArray211 */ diag::warn_drv_invoking_fallback, -1,
-  /* DiagArray212 */ diag::warn_flag_enum_constant_out_of_range, -1,
-  /* DiagArray213 */ diag::ext_flexible_array_in_array, diag::ext_flexible_array_in_struct, -1,
-  /* DiagArray214 */ diag::warn_impcast_float_integer, -1,
-  /* DiagArray215 */ diag::warn_floatingpoint_eq, -1,
-  /* DiagArray216 */ diag::warn_impcast_float_to_integer, -1,
-  /* DiagArray217 */ diag::warn_impcast_float_to_integer_zero, -1,
-  /* DiagArray218 */ diag::warn_redundant_loop_iteration, diag::warn_variables_not_in_loop_body, -1,
-  /* DiagArray219 */ diag::warn_format_P_no_precision, diag::warn_format_argument_needs_cast, diag::warn_format_conversion_argument_type_mismatch, diag::warn_format_invalid_annotation, diag::warn_format_invalid_positional_specifier, diag::warn_format_mix_positional_nonpositional_args, diag::warn_format_nonsensical_length, diag::warn_format_string_is_wide_literal, diag::warn_format_zero_positional_specifier, diag::warn_missing_format_string, diag::warn_printf_ObjCflags_without_ObjCConversion, diag::warn_printf_asterisk_missing_arg, diag::warn_printf_asterisk_wrong_type, diag::warn_printf_empty_objc_flag, diag::warn_printf_format_string_contains_null_char, diag::warn_printf_format_string_not_null_terminated, diag::warn_printf_ignored_flag, diag::warn_printf_incomplete_specifier, diag::warn_printf_insufficient_data_args, diag::warn_printf_invalid_objc_flag, diag::warn_printf_nonsensical_flag, diag::warn_printf_nonsensical_optional_amount, diag::warn_printf_positional_arg_exceeds_data_args, diag::warn_scanf_nonzero_width, diag::warn_scanf_scanlist_incomplete, -1,
-  /* DiagArray220 */ diag::warn_printf_data_arg_not_used, -1,
-  /* DiagArray221 */ diag::warn_format_invalid_conversion, -1,
-  /* DiagArray222 */ diag::warn_format_non_standard, diag::warn_format_non_standard_conversion_spec, diag::warn_format_non_standard_positional_arg, -1,
-  /* DiagArray223 */ diag::warn_format_nonliteral, -1,
-  /* DiagArray224 */ diag::warn_format_conversion_argument_type_mismatch_pedantic, -1,
-  /* DiagArray225 */ diag::warn_format_nonliteral_noargs, -1,
-  /* DiagArray227 */ diag::warn_empty_format_string, -1,
-  /* DiagArray229 */ diag::ext_four_char_character_literal, -1,
-  /* DiagArray230 */ diag::warn_fe_backend_frame_larger_than, diag::warn_fe_frame_larger_than, -1,
-  /* DiagArray231 */ diag::warn_function_def_in_objc_container, -1,
-  /* DiagArray233 */ diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_warn_gnu_final, diag::warn_attribute_on_function_definition, diag::warn_break_binds_to_switch, diag::warn_cleanup_ext, diag::warn_gcc_attribute_location, diag::warn_loop_ctrl_binds_to_inner, -1,
-  /* DiagArray234 */ diag::warn_global_constructor, diag::warn_global_destructor, -1,
-  /* DiagArray236 */ diag::ext_alignof_expr, -1,
-  /* DiagArray237 */ diag::ext_gnu_anonymous_struct, -1,
-  /* DiagArray238 */ diag::ext_array_init_parens, -1,
-  /* DiagArray239 */ diag::ext_auto_type, -1,
-  /* DiagArray240 */ diag::ext_binary_literal, -1,
-  /* DiagArray241 */ diag::ext_gnu_case_range, -1,
-  /* DiagArray242 */ diag::ext_integer_complex, -1,
-  /* DiagArray243 */ diag::ext_array_init_copy, -1,
-  /* DiagArray244 */ diag::ext_gnu_conditional_expr, -1,
-  /* DiagArray245 */ diag::ext_gnu_array_range, diag::ext_gnu_missing_equal_designator, diag::ext_gnu_old_style_field_designator, -1,
-  /* DiagArray246 */ diag::ext_gnu_empty_initializer, -1,
-  /* DiagArray247 */ diag::ext_empty_struct_union, diag::ext_flexible_array_empty_aggregate_gnu, diag::ext_no_named_members_in_struct_union, -1,
-  /* DiagArray248 */ diag::ext_flexible_array_init, -1,
-  /* DiagArray249 */ diag::ext_flexible_array_union_gnu, -1,
-  /* DiagArray250 */ diag::ext_expr_not_ice, diag::ext_in_class_initializer_non_constant, diag::ext_vla_folded_to_constant, -1,
-  /* DiagArray251 */ diag::ext_imaginary_constant, -1,
-  /* DiagArray252 */ diag::ext_pp_include_next_directive, -1,
-  /* DiagArray253 */ diag::ext_gnu_address_of_label, diag::ext_gnu_indirect_goto, -1,
-  /* DiagArray254 */ diag::ext_forward_ref_enum_def, -1,
-  /* DiagArray255 */ diag::ext_gnu_statement_expr, -1,
-  /* DiagArray256 */ diag::ext_in_class_initializer_float_type, -1,
-  /* DiagArray257 */ diag::ext_string_literal_operator_template, -1,
-  /* DiagArray258 */ diag::ext_typecheck_cast_to_union, -1,
-  /* DiagArray259 */ diag::ext_variable_sized_type_in_struct, -1,
-  /* DiagArray260 */ diag::ext_pp_line_zero, -1,
-  /* DiagArray261 */ diag::ext_missing_varargs_arg, diag::ext_paste_comma, -1,
-  /* DiagArray262 */ diag::warn_header_guard, -1,
-  /* DiagArray263 */ diag::warn_using_directive_in_header, -1,
-  /* DiagArray264 */ diag::warn_condition_is_idiomatic_assignment, -1,
-  /* DiagArray265 */ diag::ext_cannot_use_trivial_abi, diag::warn_alias_to_weak_alias, diag::warn_alias_with_section, diag::warn_attr_abi_tag_namespace, diag::warn_attribute_after_definition_ignored, diag::warn_attribute_iboutlet, diag::warn_attribute_ignored, diag::warn_attribute_ignored_for_field_of_type, diag::warn_attribute_ignored_on_inline, diag::warn_attribute_invalid_on_definition, diag::warn_attribute_no_decl, diag::warn_attribute_nonnull_no_pointers, diag::warn_attribute_nonnull_parm_no_args, diag::warn_attribute_not_on_decl, diag::warn_attribute_pointer_or_reference_only, diag::warn_attribute_pointers_only, diag::warn_attribute_precede_definition, diag::warn_attribute_return_pointers_only, diag::warn_attribute_return_pointers_refs_only, diag::warn_attribute_sentinel_named_arguments, diag::warn_attribute_sentinel_not_variadic, diag::warn_attribute_type_not_supported, diag::warn_attribute_unknown_visibility, diag::warn_attribute_void_function_method, diag::warn_attribute_weak_on_field, diag::warn_attribute_weak_on_local, diag::warn_attribute_wrong_decl_type, diag::warn_attribute_wrong_decl_type_str, diag::warn_block_literal_attributes_on_omitted_return_type, diag::warn_cconv_ignored, diag::warn_cconv_structors, diag::warn_cconv_varargs, diag::warn_cxx11_gnu_attribute_on_type, diag::warn_declspec_attribute_ignored, diag::warn_deprecated_anonymous_namespace, diag::warn_dllimport_dropped_from_inline_function, diag::warn_duplicate_attribute, diag::warn_duplicate_attribute_exact, diag::warn_gc_attribute_weak_on_local, diag::warn_gnu_inline_attribute_requires_inline, diag::warn_ignored_ms_inheritance, diag::warn_internal_linkage_local_storage, diag::warn_microsoft_qualifiers_ignored, diag::warn_mips_interrupt_attribute, diag::warn_mmap_unknown_attribute, diag::warn_nocf_check_attribute_ignored, diag::warn_ns_attribute_wrong_parameter_type, diag::warn_ns_attribute_wrong_return_type, diag::warn_opencl_attr_deprecated_ignored, diag::warn_transparent_union_attribute_field_size_align, diag::warn_transparent_union_attribute_floating, diag::warn_transparent_union_attribute_not_definition, diag::warn_transparent_union_attribute_zero_fields, diag::warn_type_attribute_wrong_type, diag::warn_unhandled_ms_attribute_ignored, diag::warn_unsupported_target_attribute, -1,
-  /* DiagArray266 */ diag::warn_drv_unsupported_opt_for_target, diag::warn_ignored_gcc_optimization, -1,
-  /* DiagArray267 */ diag::warn_pragma_intrinsic_builtin, -1,
-  /* DiagArray268 */ diag::warn_pragma_optimize, -1,
-  /* DiagArray269 */ diag::warn_pragma_align_expected_equal, diag::warn_pragma_align_invalid_option, diag::warn_pragma_begin_end_mismatch, diag::warn_pragma_comment_ignored, diag::warn_pragma_debug_missing_argument, diag::warn_pragma_debug_unexpected_command, diag::warn_pragma_expected_action_or_r_paren, diag::warn_pragma_expected_colon, diag::warn_pragma_expected_colon_r_paren, diag::warn_pragma_expected_comma, diag::warn_pragma_expected_identifier, diag::warn_pragma_expected_init_seg, diag::warn_pragma_expected_integer, diag::warn_pragma_expected_lparen, diag::warn_pragma_expected_non_wide_string, diag::warn_pragma_expected_predicate, diag::warn_pragma_expected_punc, diag::warn_pragma_expected_rparen, diag::warn_pragma_expected_section_label_or_name, diag::warn_pragma_expected_section_name, diag::warn_pragma_expected_section_push_pop_or_name, diag::warn_pragma_expected_string, diag::warn_pragma_extra_tokens_at_eol, diag::warn_pragma_force_cuda_host_device_bad_arg, diag::warn_pragma_init_seg_unsupported_target, diag::warn_pragma_invalid_action, diag::warn_pragma_invalid_argument, diag::warn_pragma_invalid_specific_action, diag::warn_pragma_missing_argument, diag::warn_pragma_ms_struct, diag::warn_pragma_options_align_reset_failed, diag::warn_pragma_options_expected_align, diag::warn_pragma_pack_invalid_alignment, diag::warn_pragma_pack_malformed, diag::warn_pragma_pop_failed, diag::warn_pragma_pop_macro_no_push, diag::warn_pragma_unknown_extension, diag::warn_pragma_unsupported_action, diag::warn_pragma_unsupported_extension, diag::warn_pragma_unused_expected_var, diag::warn_pragma_unused_expected_var_arg, diag::warn_pragma_unused_undeclared_var, -1,
-  /* DiagArray270 */ diag::warn_arc_lifetime_result_type, diag::warn_block_literal_qualifiers_on_omitted_return_type, diag::warn_qual_return_type, diag::warn_typecheck_function_qualifiers_ignored, diag::warn_typecheck_reference_qualifiers, -1,
-  /* DiagArray272 */ diag::warn_auto_implicit_atomic_property, diag::warn_implicit_atomic_property, -1,
-  /* DiagArray273 */ diag::warn_impcast_floating_point_to_bool, -1,
-  /* DiagArray274 */ diag::ext_implicit_exception_spec_mismatch, -1,
-  /* DiagArray275 */ diag::warn_fallthrough_attr_unreachable, diag::warn_unannotated_fallthrough, -1,
-  /* DiagArray276 */ diag::warn_unannotated_fallthrough_per_function, -1,
-  /* DiagArray277 */ diag::ext_implicit_function_decl, diag::ext_implicit_lib_function_decl, diag::warn_builtin_unknown, diag::warn_implicit_function_decl, -1,
-  /* DiagArray278 */ diag::ext_missing_type_specifier, -1,
-  /* DiagArray279 */ diag::warn_implicitly_retains_self, -1,
-  /* DiagArray280 */ diag::ext_integer_literal_too_large_for_signed, -1,
-  /* DiagArray282 */ diag::ext_pp_import_directive, -1,
-  /* DiagArray283 */ diag::warn_inaccessible_base_class, -1,
-  /* DiagArray284 */ diag::pp_include_next_absolute_path, -1,
-  /* DiagArray285 */ diag::pp_include_next_in_primary, -1,
-  /* DiagArray286 */ diag::warn_deep_exception_specs_differ, diag::warn_incompatible_exception_specs, -1,
-  /* DiagArray287 */ diag::ext_typecheck_convert_incompatible_function_pointer, -1,
-  /* DiagArray288 */ diag::warn_redecl_library_builtin, -1,
-  /* DiagArray289 */ diag::warn_cxx_ms_struct, diag::warn_npot_ms_struct, -1,
-  /* DiagArray290 */ diag::ext_typecheck_convert_incompatible_pointer, -1,
-  /* DiagArray291 */ diag::ext_nested_pointer_qualifier_mismatch, diag::ext_typecheck_convert_discards_qualifiers, -1,
-  /* DiagArray292 */ diag::warn_property_types_are_incompatible, -1,
-  /* DiagArray293 */ diag::warn_incompatible_sysroot, -1,
-  /* DiagArray294 */ diag::warn_undef_method_impl, -1,
-  /* DiagArray296 */ diag::warn_missing_submodule, diag::warn_mmap_umbrella_dir_not_found, diag::warn_uncovered_module_header, -1,
-  /* DiagArray297 */ diag::warn_redeclaration_without_attribute_prev_attribute_ignored, diag::warn_redeclaration_without_import_attribute, -1,
-  /* DiagArray298 */ diag::warn_destructor_marked_not_override_overriding, -1,
-  /* DiagArray299 */ diag::warn_function_marked_not_override_overriding, -1,
-  /* DiagArray300 */ diag::ext_increment_bool, -1,
-  /* DiagArray301 */ diag::warn_infinite_recursive_function, -1,
-  /* DiagArray303 */ diag::warn_initializer_overrides, diag::warn_subobject_initializer_overrides, -1,
-  /* DiagArray304 */ diag::ext_out_of_line_qualified_id_type_names_constructor, -1,
-  /* DiagArray306 */ diag::warn_fe_inline_asm, -1,
-  /* DiagArray307 */ diag::ext_operator_new_delete_declared_inline, -1,
-  /* DiagArray308 */ diag::warn_explicit_instantiation_after_specialization, -1,
-  /* DiagArray309 */ diag::ext_typecheck_convert_int_pointer, diag::ext_typecheck_convert_pointer_int, -1,
-  /* DiagArray311 */ diag::warn_int_to_pointer_cast, -1,
-  /* DiagArray312 */ diag::warn_int_to_void_pointer_cast, -1,
-  /* DiagArray313 */ diag::warn_integer_constant_overflow, -1,
-  /* DiagArray314 */ diag::warn_drv_object_size_disabled_O0, diag::warn_drv_optimization_value, -1,
-  /* DiagArray315 */ diag::ext_constexpr_function_never_constant_expr, -1,
-  /* DiagArray316 */ diag::warn_iboutlet_object_type, diag::warn_iboutletcollection_property_assign, -1,
-  /* DiagArray317 */ diag::warn_invalid_initializer_from_system_header, -1,
-  /* DiagArray318 */ diag::warn_invalid_ios_deployment_target, -1,
-  /* DiagArray319 */ diag::warn_falloff_noreturn_function, diag::warn_noreturn_function_has_return_expr, -1,
-  /* DiagArray320 */ diag::ext_offsetof_non_pod_type, diag::ext_offsetof_non_standardlayout_type, -1,
-  /* DiagArray321 */ diag::warn_drv_ps4_sdk_dir, diag::warn_drv_unable_to_find_directory_expected, -1,
-  /* DiagArray322 */ diag::ext_partial_spec_not_more_specialized_than_primary, -1,
-  /* DiagArray324 */ diag::ext_empty_character, diag::ext_unterminated_char_or_string, -1,
-  /* DiagArray325 */ diag::warn_bad_character_encoding, diag::warn_bad_string_encoding, -1,
-  /* DiagArray326 */ diag::ext_pp_bad_paste_ms, -1,
-  /* DiagArray327 */ diag::warn_jump_out_of_seh_finally, -1,
-  /* DiagArray328 */ diag::ext_keyword_as_ident, -1,
-  /* DiagArray329 */ diag::warn_pp_macro_hides_keyword, -1,
-  /* DiagArray330 */ diag::ext_param_promoted_not_compatible_with_prototype, -1,
-  /* DiagArray331 */ diag::ext_token_used, -1,
-  /* DiagArray332 */ diag::warn_parameter_size, diag::warn_return_value_size, -1,
-  /* DiagArray334 */ diag::warn_impcast_literal_float_to_integer, -1,
-  /* DiagArray335 */ diag::warn_float_overflow, diag::warn_float_underflow, -1,
-  /* DiagArray336 */ diag::ext_template_arg_local_type, -1,
-  /* DiagArray337 */ diag::warn_logical_not_on_lhs_of_check, -1,
-  /* DiagArray338 */ diag::warn_logical_and_in_logical_or, -1,
-  /* DiagArray339 */ diag::ext_c99_longlong, -1,
-  /* DiagArray341 */ diag::ext_pp_macro_redef, -1,
-  /* DiagArray342 */ diag::ext_main_used, diag::ext_noreturn_main, diag::ext_variadic_main, diag::warn_main_one_arg, diag::warn_main_redefined, diag::warn_main_returns_bool_literal, diag::warn_static_main, -1,
-  /* DiagArray343 */ diag::ext_main_returns_nonint, -1,
-  /* DiagArray344 */ diag::warn_has_warning_invalid_option, -1,
-  /* DiagArray345 */ diag::ext_many_braces_around_scalar_init, -1,
-  /* DiagArray346 */ diag::warn_max_unsigned_zero, -1,
-  /* DiagArray347 */ diag::warn_memsize_comparison, -1,
-  /* DiagArray348 */ diag::warn_non_contravariant_param_types, diag::warn_non_covariant_ret_types, -1,
-  /* DiagArray350 */ diag::ext_anonymous_record_with_type, diag::ext_ms_anonymous_record, -1,
-  /* DiagArray351 */ diag::ext_ms_cast_fn_obj, diag::ext_ms_impcast_fn_obj, -1,
-  /* DiagArray352 */ diag::ext_charize_microsoft, -1,
-  /* DiagArray353 */ diag::ext_comment_paste_microsoft, -1,
-  /* DiagArray354 */ diag::ext_default_init_const, -1,
-  /* DiagArray355 */ diag::ext_pp_operator_used_as_macro_name, -1,
-  /* DiagArray356 */ diag::ext_param_default_argument_redefinition, -1,
-  /* DiagArray357 */ diag::ext_ctrl_z_eof_microsoft, -1,
-  /* DiagArray358 */ diag::ext_ms_forward_ref_enum, -1,
-  /* DiagArray359 */ diag::ext_enumerator_too_large, -1,
-  /* DiagArray360 */ diag::ext_ellipsis_exception_spec, diag::ext_incomplete_in_exception_spec, diag::ext_mismatched_exception_spec, diag::ext_mismatched_exception_spec_explicit_instantiation, diag::ext_ms_missing_exception_specification, diag::ext_override_exception_spec, -1,
-  /* DiagArray361 */ diag::warn_microsoft_dependent_exists, -1,
-  /* DiagArray362 */ diag::ext_ms_explicit_constructor_call, -1,
-  /* DiagArray363 */ diag::warn_member_extra_qualification, -1,
-  /* DiagArray364 */ diag::ext_c_enum_fixed_underlying_type, -1,
-  /* DiagArray365 */ diag::ext_flexible_array_empty_aggregate_ms, diag::ext_flexible_array_union_ms, -1,
-  /* DiagArray366 */ diag::ext_goto_into_protected_scope, -1,
-  /* DiagArray367 */ diag::ext_ms_ambiguous_direct_base, -1,
-  /* DiagArray368 */ diag::ext_pp_include_search_ms, -1,
-  /* DiagArray369 */ diag::ext_mutable_reference, -1,
-  /* DiagArray370 */ diag::ext_pure_function_definition, -1,
-  /* DiagArray371 */ diag::ext_static_non_static, -1,
-  /* DiagArray372 */ diag::ext_ms_sealed_keyword, -1,
-  /* DiagArray373 */ diag::ext_explicit_instantiation_duplicate, diag::ext_found_via_dependent_bases_lookup, diag::ext_ms_delayed_template_argument, diag::ext_ms_deref_template_argument, diag::ext_ms_template_spec_redecl_out_of_scope, diag::ext_ms_template_type_arg_missing_typename, diag::ext_undeclared_unqual_id_with_dependent_base, -1,
-  /* DiagArray374 */ diag::ext_union_member_of_reference_type, -1,
-  /* DiagArray375 */ diag::ext_friend_tag_redecl_outside_namespace, -1,
-  /* DiagArray376 */ diag::ext_ms_using_declaration_inaccessible, -1,
-  /* DiagArray377 */ diag::ext_pseudo_dtor_on_void, -1,
-  /* DiagArray378 */ diag::warn_mismatched_delete_new, -1,
-  /* DiagArray379 */ diag::warn_conflicting_param_types, -1,
-  /* DiagArray380 */ diag::warn_conflicting_ret_types, -1,
-  /* DiagArray381 */ diag::warn_struct_class_previous_tag_mismatch, diag::warn_struct_class_tag_mismatch, -1,
-  /* DiagArray382 */ diag::warn_missing_braces, -1,
-  /* DiagArray383 */ diag::ext_no_declarators, diag::ext_standalone_specifier, diag::ext_typedef_without_a_name, diag::warn_standalone_specifier, -1,
-  /* DiagArray384 */ diag::ext_missing_exception_specification, -1,
-  /* DiagArray385 */ diag::warn_missing_field_initializers, -1,
-  /* DiagArray388 */ diag::warn_missing_method_return_type, -1,
-  /* DiagArray389 */ diag::warn_overriding_method_missing_noescape, -1,
-  /* DiagArray390 */ diag::warn_suggest_noreturn_block, diag::warn_suggest_noreturn_function, -1,
-  /* DiagArray391 */ diag::warn_cconv_knr, -1,
-  /* DiagArray392 */ diag::warn_missing_prototype, -1,
-  /* DiagArray393 */ diag::warn_missing_selector_name, -1,
-  /* DiagArray394 */ diag::warn_missing_sysroot, -1,
-  /* DiagArray395 */ diag::warn_missing_variable_declarations, -1,
-  /* DiagArray396 */ diag::remark_module_build, diag::remark_module_build_done, diag::remark_module_lock_failure, diag::remark_module_lock_timeout, -1,
-  /* DiagArray397 */ diag::warn_module_conflict, diag::warn_module_system_bit_conflict, -1,
-  /* DiagArray398 */ diag::warn_module_config_mismatch, -1,
-  /* DiagArray399 */ diag::warn_duplicate_module_file_extension, -1,
-  /* DiagArray400 */ diag::ext_module_import_in_extern_c, -1,
-  /* DiagArray401 */ diag::ext_equivalent_internal_linkage_decl_in_modules, -1,
-  /* DiagArray402 */ diag::ext_module_import_not_at_top_level_noop, -1,
-  /* DiagArray406 */ diag::warn_drv_msvc_not_found, -1,
-  /* DiagArray407 */ diag::ext_multichar_character_literal, -1,
-  /* DiagArray408 */ diag::warn_vbase_moved_multiple_times, -1,
-  /* DiagArray410 */ diag::ext_anonymous_record_with_anonymous_type, -1,
-  /* DiagArray412 */ diag::warn_operator_new_returns_null, -1,
-  /* DiagArray413 */ diag::ext_no_newline_eof, diag::warn_no_newline_eof, -1,
-  /* DiagArray416 */ diag::warn_non_literal_null_pointer, -1,
-  /* DiagArray417 */ diag::warn_non_modular_include_in_framework_module, -1,
-  /* DiagArray418 */ diag::warn_non_modular_include_in_module, -1,
-  /* DiagArray419 */ diag::warn_cannot_pass_non_pod_arg_to_vararg, diag::warn_non_pod_vararg_with_format_string, diag::warn_second_parameter_to_va_arg_not_pod, diag::warn_second_parameter_to_va_arg_ownership_qualified, -1,
-  /* DiagArray420 */ diag::warn_non_virtual_dtor, -1,
-  /* DiagArray421 */ diag::warn_null_arg, diag::warn_null_ret, -1,
-  /* DiagArray423 */ diag::pp_nonportable_path, -1,
-  /* DiagArray424 */ diag::pp_nonportable_system_path, -1,
-  /* DiagArray425 */ diag::warn_neon_vector_initializer_non_portable, -1,
-  /* DiagArray426 */ diag::warn_nsconsumed_attribute_mismatch, -1,
-  /* DiagArray427 */ diag::warn_nsreturns_retained_attribute_mismatch, -1,
-  /* DiagArray428 */ diag::warn_null_in_arithmetic_operation, diag::warn_null_in_comparison_operation, -1,
-  /* DiagArray429 */ diag::null_in_char_or_string, diag::null_in_file, -1,
-  /* DiagArray430 */ diag::warn_impcast_null_pointer_to_integer, -1,
-  /* DiagArray431 */ diag::warn_binding_null_to_reference, diag::warn_indirection_through_null, -1,
-  /* DiagArray432 */ diag::warn_gnu_null_ptr_arith, diag::warn_pointer_arith_null_ptr, -1,
-  /* DiagArray433 */ diag::warn_conflicting_nullability_attr_overriding_param_types, diag::warn_conflicting_nullability_attr_overriding_ret_types, diag::warn_mismatched_nullability_attr, diag::warn_null_resettable_setter, diag::warn_nullability_duplicate, -1,
-  /* DiagArray434 */ diag::warn_nullability_missing, -1,
-  /* DiagArray435 */ diag::warn_nullability_missing_array, -1,
-  /* DiagArray436 */ diag::warn_nullability_declspec, -1,
-  /* DiagArray437 */ diag::ext_nullability, -1,
-  /* DiagArray438 */ diag::warn_nullability_inferred_on_nested_type, -1,
-  /* DiagArray439 */ diag::warn_nullability_lost, -1,
-  /* DiagArray440 */ diag::warn_autosynthesis_property_ivar_match, -1,
-  /* DiagArray441 */ diag::warn_objc_circular_container, -1,
-  /* DiagArray443 */ diag::warn_objc_designated_init_missing_super_call, diag::warn_objc_designated_init_non_designated_init_call, diag::warn_objc_designated_init_non_super_designated_init_call, diag::warn_objc_implementation_missing_designated_init_override, diag::warn_objc_secondary_init_missing_init_call, diag::warn_objc_secondary_init_super_init_call, -1,
-  /* DiagArray444 */ diag::warn_superclass_variable_sized_type_not_at_end, diag::warn_variable_sized_ivar_visibility, -1,
-  /* DiagArray445 */ diag::warn_forward_class_redefinition, -1,
-  /* DiagArray446 */ diag::warn_ivars_in_interface, -1,
-  /* DiagArray447 */ diag::warn_objc_literal_comparison, -1,
-  /* DiagArray448 */ diag::warn_impcast_objective_c_literal_to_bool, diag::warn_objc_collection_literal_element, -1,
-  /* DiagArray449 */ diag::warn_pp_objc_macro_redef_ignored, -1,
-  /* DiagArray450 */ diag::warn_messaging_unqualified_id, -1,
-  /* DiagArray451 */ diag::warn_class_method_not_found, diag::warn_class_method_not_found_with_typo, diag::warn_inst_method_not_found, diag::warn_instance_method_not_found_with_typo, diag::warn_instance_method_on_class_found, diag::warn_root_inst_method_not_found, -1,
-  /* DiagArray452 */ diag::warn_missing_explicit_synthesis, -1,
-  /* DiagArray453 */ diag::warn_objc_missing_super_call, -1,
-  /* DiagArray454 */ diag::warn_multiple_method_decl, -1,
-  /* DiagArray455 */ diag::warn_objc_property_retain_of_block, -1,
-  /* DiagArray456 */ diag::warn_objc_pointer_cxx_catch_fragile, -1,
-  /* DiagArray457 */ diag::warn_impl_required_for_class_property, diag::warn_impl_required_in_category_for_class_property, diag::warn_setter_getter_impl_required, diag::warn_setter_getter_impl_required_in_category, -1,
-  /* DiagArray458 */ diag::warn_property_implicitly_mismatched, -1,
-  /* DiagArray459 */ diag::warn_cocoa_naming_owned_rule, -1,
-  /* DiagArray460 */ diag::warn_objc_property_default_assign_on_object, diag::warn_objc_property_no_assignment_attribute, -1,
-  /* DiagArray461 */ diag::warn_autosynthesis_property_in_superclass, diag::warn_no_autosynthesis_property, diag::warn_no_autosynthesis_shared_ivar_property, -1,
-  /* DiagArray462 */ diag::warn_category_method_impl_match, -1,
-  /* DiagArray463 */ diag::warn_auto_synthesizing_protocol_property, -1,
-  /* DiagArray464 */ diag::warn_objc_redundant_qualified_class_type, -1,
-  /* DiagArray465 */ diag::warn_objc_readonly_property_has_setter, -1,
-  /* DiagArray467 */ diag::warn_objc_redundant_literal_use, -1,
-  /* DiagArray468 */ diag::warn_objc_root_class_missing, -1,
-  /* DiagArray469 */ diag::warn_objc_string_literal_comparison, -1,
-  /* DiagArray470 */ diag::warn_concatenated_nsarray_literal, -1,
-  /* DiagArray471 */ diag::warn_objc_unsafe_perform_selector, -1,
-  /* DiagArray472 */ diag::warn_odr_tag_type_inconsistent, -1,
-  /* DiagArray473 */ diag::warn_old_style_cast, -1,
-  /* DiagArray475 */ diag::ext_opencl_ext_vector_type_rgba_selector, -1,
-  /* DiagArray476 */ diag::warn_omp_alignment_not_power_of_two, diag::warn_omp_linear_step_zero, -1,
-  /* DiagArray477 */ diag::ext_omp_loop_not_canonical_init, diag::warn_omp_loop_64_bit_var, -1,
-  /* DiagArray478 */ diag::warn_drv_omp_offload_target_duplicate, diag::warn_drv_omp_offload_target_missingbcruntime, diag::warn_omp_non_trivial_type_mapped, diag::warn_omp_not_in_target_context, -1,
-  /* DiagArray479 */ diag::warn_drv_fine_grained_bitfield_accesses_ignored, diag::warn_drv_ps4_force_pic, diag::warn_drv_unsupported_abicalls, diag::warn_drv_unsupported_longcalls, -1,
-  /* DiagArray480 */ diag::ext_out_of_line_declaration, -1,
-  /* DiagArray481 */ diag::ext_use_out_of_scope_declaration, -1,
-  /* DiagArray482 */ diag::warn_overaligned_type, -1,
-  /* DiagArray484 */ diag::ext_string_too_long, -1,
-  /* DiagArray485 */ diag::warn_overloaded_shift_in_comparison, -1,
-  /* DiagArray486 */ diag::warn_overloaded_virtual, -1,
-  /* DiagArray487 */ diag::warn_fe_override_module, -1,
-  /* DiagArray488 */ diag::warn_conflicting_overriding_param_modifiers, diag::warn_conflicting_overriding_param_types, diag::warn_conflicting_overriding_ret_type_modifiers, diag::warn_conflicting_overriding_ret_types, diag::warn_conflicting_overriding_variadic, diag::warn_non_contravariant_overriding_param_types, diag::warn_non_covariant_overriding_ret_types, -1,
-  /* DiagArray489 */ diag::warn_drv_overriding_flag_option, -1,
-  /* DiagArray490 */ diag::warn_unnecessary_packed, -1,
-  /* DiagArray491 */ diag::warn_padded_struct_anon_field, diag::warn_padded_struct_field, diag::warn_padded_struct_size, -1,
-  /* DiagArray492 */ diag::warn_condition_is_assignment, diag::warn_precedence_bitwise_rel, diag::warn_precedence_conditional, -1,
-  /* DiagArray493 */ diag::warn_equality_with_extra_parens, -1,
-  /* DiagArray495 */ diag::remark_fe_backend_optimization_remark, -1,
-  /* DiagArray496 */ diag::remark_fe_backend_optimization_remark_analysis, diag::remark_fe_backend_optimization_remark_analysis_aliasing, diag::remark_fe_backend_optimization_remark_analysis_fpcommute, -1,
-  /* DiagArray497 */ diag::warn_fe_backend_optimization_failure, -1,
-  /* DiagArray498 */ diag::remark_fe_backend_optimization_remark_missed, -1,
-  /* DiagArray499 */ diag::warn_module_uses_date_time, -1,
-  /* DiagArray500 */ diag::ext_aggregate_init_not_constant, diag::ext_anonymous_record_with_type, diag::ext_anonymous_struct_union_qualified, diag::ext_array_size_conversion, diag::ext_auto_new_list_init, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_cast_fn_obj, diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_cxx14_attr, diag::ext_cxx17_attr, diag::ext_designated_init, diag::ext_ellipsis_exception_spec, diag::ext_empty_fnmacro_arg, diag::ext_enum_value_not_int, diag::ext_enumerator_list_comma_c, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_instantiation_without_qualified_id, diag::ext_extern_template, diag::ext_extra_semi, diag::ext_forward_ref_enum, diag::ext_freestanding_complex, diag::ext_gnu_array_range, diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_hex_constant_invalid, diag::ext_hex_literal_invalid, diag::ext_ident_list_in_param, diag::ext_integer_complement_complex, diag::ext_integer_increment_complex, diag::ext_internal_in_extern_inline_quiet, diag::ext_invalid_sign_spec, diag::ext_line_comment, diag::ext_main_used, diag::ext_multi_line_line_comment, diag::ext_named_variadic_macro, diag::ext_no_newline_eof, diag::ext_nonstandard_escape, diag::ext_ns_enum_attribute, diag::ext_param_not_declared, diag::ext_pointer_to_const_ref_member_on_rvalue, diag::ext_pp_bad_vaargs_use, diag::ext_pp_comma_expr, diag::ext_pp_ident_directive, diag::ext_pp_line_too_big, diag::ext_pp_warning_directive, diag::ext_return_has_void_expr, diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::ext_subscript_non_lvalue, diag::ext_thread_before, diag::ext_typecheck_addrof_void, diag::ext_typecheck_cast_nonscalar, diag::ext_typecheck_comparison_of_fptr_to_void, diag::ext_typecheck_cond_one_void, diag::ext_typecheck_convert_pointer_void_func, diag::ext_typecheck_ordered_comparison_of_pointer_and_zero, diag::ext_variadic_macro, diag::warn_defined_in_function_type_macro, diag::warn_illegal_constant_array_size, diag::warn_kern_is_method, -1,
-  /* DiagArray501 */ diag::warn_pragma_extension_is_core, -1,
-  /* DiagArray502 */ diag::warn_pessimizing_move_on_initialization, diag::warn_pessimizing_move_on_return, -1,
-  /* DiagArray503 */ diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::warn_sub_ptr_zero_size_types, -1,
-  /* DiagArray504 */ diag::warn_cast_nonnull_to_bool, diag::warn_impcast_pointer_to_bool, -1,
-  /* DiagArray505 */ diag::ext_typecheck_convert_incompatible_pointer_sign, -1,
-  /* DiagArray507 */ diag::ext_typecheck_cond_incompatible_pointers, -1,
-  /* DiagArray508 */ diag::warn_side_effects_typeid, -1,
-  /* DiagArray509 */ diag::warn_pragma_attribute_unused, -1,
-  /* DiagArray510 */ diag::pp_pragma_once_in_main_file, -1,
-  /* DiagArray511 */ diag::warn_pragma_pack_modified_after_include, diag::warn_pragma_pack_no_pop_eof, -1,
-  /* DiagArray512 */ diag::warn_pragma_pack_non_default_at_include, -1,
-  /* DiagArray513 */ diag::pp_pragma_sysheader_in_main_file, -1,
-  /* DiagArray514 */ diag::warn_redefine_extname_not_applied, -1,
-  /* DiagArray515 */ diag::ext_predef_outside_function, -1,
-  /* DiagArray516 */ diag::warn_private_extern, -1,
-  /* DiagArray517 */ diag::warn_use_of_private_header_outside_module, -1,
-  /* DiagArray518 */ diag::warn_mmap_mismatched_private_module_name, diag::warn_mmap_mismatched_private_submodule, diag::warn_mmap_redundant_export_as, diag::warn_no_priv_submodule_use_toplevel, -1,
-  /* DiagArray519 */ diag::warn_profile_data_missing, -1,
-  /* DiagArray520 */ diag::warn_profile_data_out_of_date, -1,
-  /* DiagArray521 */ diag::warn_profile_data_unprofiled, -1,
-  /* DiagArray522 */ diag::warn_property_access_suggest, -1,
-  /* DiagArray523 */ diag::warn_property_attr_mismatch, diag::warn_property_attribute, diag::warn_property_redecl_getter_mismatch, diag::warn_readonly_property, -1,
-  /* DiagArray524 */ diag::warn_unimplemented_protocol_method, -1,
-  /* DiagArray525 */ diag::warn_protocol_property_mismatch, -1,
-  /* DiagArray526 */ diag::err_func_returning_qualified_void, -1,
-  /* DiagArray527 */ diag::warn_for_range_const_reference_copy, diag::warn_for_range_copy, diag::warn_for_range_variable_always_copy, -1,
-  /* DiagArray528 */ diag::warn_auto_readonly_iboutlet_property, -1,
-  /* DiagArray529 */ diag::warn_bad_receiver_type, -1,
-  /* DiagArray530 */ diag::warn_receiver_forward_class, diag::warn_receiver_forward_instance, -1,
-  /* DiagArray531 */ diag::ext_member_redeclared, -1,
-  /* DiagArray533 */ diag::warn_redundant_move_on_return, -1,
-  /* DiagArray534 */ diag::warn_redundant_parens_around_declarator, -1,
-  /* DiagArray535 */ diag::ext_register_storage_class, -1,
-  /* DiagArray536 */ diag::warn_reinterpret_different_from_static, -1,
-  /* DiagArray537 */ diag::remark_fe_backend_plugin, -1,
-  /* DiagArray538 */ diag::warn_initializer_out_of_order, -1,
-  /* DiagArray539 */ diag::warn_objc_requires_super_protocol, -1,
-  /* DiagArray540 */ diag::warn_pp_macro_is_reserved_id, -1,
-  /* DiagArray541 */ diag::ext_ms_reserved_user_defined_literal, diag::ext_reserved_user_defined_literal, -1,
-  /* DiagArray542 */ diag::ext_retained_language_linkage, -1,
-  /* DiagArray543 */ diag::warn_ret_addr_label, diag::warn_ret_local_temp_addr_ref, diag::warn_ret_stack_addr_ref, -1,
-  /* DiagArray544 */ diag::ext_return_has_expr, diag::ext_return_missing_expr, diag::warn_falloff_nonvoid_coroutine, diag::warn_falloff_nonvoid_function, diag::warn_falloff_nonvoid_lambda, diag::warn_maybe_falloff_nonvoid_coroutine, diag::warn_maybe_falloff_nonvoid_function, diag::warn_maybe_falloff_nonvoid_lambda, diag::warn_return_missing_expr, -1,
-  /* DiagArray545 */ diag::warn_return_value_udt, diag::warn_return_value_udt_incomplete, -1,
-  /* DiagArray546 */ diag::warn_drv_enabling_rtti_with_exceptions, -1,
-  /* DiagArray547 */ diag::remark_sanitize_address_insert_extra_padding_accepted, diag::remark_sanitize_address_insert_extra_padding_rejected, -1,
-  /* DiagArray548 */ diag::warn_attribute_section_on_redeclaration, diag::warn_mismatched_section, -1,
-  /* DiagArray549 */ diag::warn_unimplemented_selector, -1,
-  /* DiagArray550 */ diag::warn_multiple_selectors, -1,
-  /* DiagArray551 */ diag::warn_self_assignment, -1,
-  /* DiagArray552 */ diag::warn_identity_field_assign, -1,
-  /* DiagArray553 */ diag::warn_self_move, -1,
-  /* DiagArray554 */ diag::warn_semicolon_before_method_body, -1,
-  /* DiagArray555 */ diag::warn_missing_sentinel, diag::warn_not_enough_argument, -1,
-  /* DiagArray557 */ diag::warn_fe_serialized_diag_failure, diag::warn_fe_serialized_diag_merge_failure, -1,
-  /* DiagArray558 */ diag::warn_decl_shadow, -1,
-  /* DiagArray560 */ diag::warn_shadow_field, -1,
-  /* DiagArray561 */ diag::warn_ctor_parm_shadows_field, -1,
-  /* DiagArray562 */ diag::warn_modifying_shadowing_decl, -1,
-  /* DiagArray563 */ diag::warn_ivar_use_hidden, -1,
-  /* DiagArray564 */ diag::warn_decl_shadow_uncaptured_local, -1,
-  /* DiagArray565 */ diag::warn_shift_negative, -1,
-  /* DiagArray566 */ diag::warn_shift_gt_typewidth, -1,
-  /* DiagArray567 */ diag::warn_shift_lhs_negative, -1,
-  /* DiagArray568 */ diag::warn_addition_in_bitshift, -1,
-  /* DiagArray569 */ diag::warn_shift_result_gt_typewidth, -1,
-  /* DiagArray570 */ diag::warn_shift_result_sets_sign_bit, -1,
-  /* DiagArray571 */ diag::warn_impcast_integer_64_32, -1,
-  /* DiagArray572 */ diag::warn_mixed_sign_comparison, -1,
-  /* DiagArray573 */ diag::warn_impcast_integer_sign, diag::warn_impcast_integer_sign_conditional, -1,
-  /* DiagArray575 */ diag::warn_no_underlying_type_specified_for_enum_bitfield, -1,
-  /* DiagArray576 */ diag::warn_sizeof_array_param, -1,
-  /* DiagArray577 */ diag::warn_sizeof_array_decay, -1,
-  /* DiagArray578 */ diag::warn_sizeof_pointer_expr_memaccess, diag::warn_sizeof_pointer_type_memaccess, -1,
-  /* DiagArray579 */ diag::warn_slash_u_filename, -1,
-  /* DiagArray580 */ diag::warn_sometimes_uninit_var, -1,
-  /* DiagArray581 */ diag::warn_omp_nesting_simd, diag::warn_pragma_omp_ignored, -1,
-  /* DiagArray582 */ diag::warn_sampler_initializer_invalid_bits, -1,
-  /* DiagArray584 */ diag::ext_in_class_initializer_float_type_cxx11, -1,
-  /* DiagArray585 */ diag::ext_internal_in_extern_inline, diag::ext_internal_in_extern_inline_quiet, -1,
-  /* DiagArray586 */ diag::warn_static_inline_explicit_inst_ignored, -1,
-  /* DiagArray587 */ diag::warn_static_local_in_extern_inline, -1,
-  /* DiagArray588 */ diag::warn_static_self_reference_in_init, -1,
-  /* DiagArray600 */ diag::warn_strict_prototypes, -1,
-  /* DiagArray601 */ diag::warn_strict_multiple_method_decl, -1,
-  /* DiagArray602 */ diag::warn_stringcompare, -1,
-  /* DiagArray603 */ diag::warn_impcast_string_literal_to_bool, -1,
-  /* DiagArray604 */ diag::warn_string_plus_char, -1,
-  /* DiagArray605 */ diag::warn_string_plus_int, -1,
-  /* DiagArray606 */ diag::warn_strlcpycat_wrong_size, -1,
-  /* DiagArray607 */ diag::warn_strncat_large_size, diag::warn_strncat_src_size, diag::warn_strncat_wrong_size, -1,
-  /* DiagArray608 */ diag::ext_typecheck_base_super, -1,
-  /* DiagArray609 */ diag::warn_case_value_overflow, diag::warn_missing_case, diag::warn_not_in_enum, -1,
-  /* DiagArray610 */ diag::warn_bool_switch_condition, -1,
-  /* DiagArray612 */ diag::warn_def_missing_case, -1,
-  /* DiagArray613 */ diag::warn_sync_fetch_and_nand_semantics_change, -1,
-  /* DiagArray615 */ diag::warn_comparison_always, diag::warn_comparison_bitwise_always, -1,
-  /* DiagArray616 */ diag::warn_tautological_bool_compare, -1,
-  /* DiagArray618 */ diag::warn_out_of_range_compare, -1,
-  /* DiagArray619 */ diag::warn_tautological_overlap_comparison, -1,
-  /* DiagArray620 */ diag::warn_nonnull_expr_compare, diag::warn_null_pointer_compare, -1,
-  /* DiagArray621 */ diag::warn_tautological_constant_compare, -1,
-  /* DiagArray622 */ diag::warn_address_of_reference_null_compare, diag::warn_this_null_compare, -1,
-  /* DiagArray623 */ diag::warn_unsigned_enum_always_true_comparison, -1,
-  /* DiagArray624 */ diag::warn_unsigned_always_true_comparison, -1,
-  /* DiagArray625 */ diag::ext_typecheck_decl_incomplete_type, -1,
-  /* DiagArray627 */ diag::warn_acquired_before, diag::warn_acquired_before_after_cycle, diag::warn_cannot_resolve_lock, diag::warn_double_lock, diag::warn_expecting_lock_held_on_loop, diag::warn_expecting_locked, diag::warn_fun_excludes_mutex, diag::warn_fun_requires_lock, diag::warn_lock_exclusive_and_shared, diag::warn_lock_some_predecessors, diag::warn_no_unlock, diag::warn_unlock_but_no_lock, diag::warn_unlock_kind_mismatch, diag::warn_var_deref_requires_any_lock, diag::warn_var_deref_requires_lock, diag::warn_variable_requires_any_lock, diag::warn_variable_requires_lock, -1,
-  /* DiagArray628 */ diag::warn_invalid_capability_name, diag::warn_thread_attribute_argument_not_lockable, diag::warn_thread_attribute_decl_not_lockable, diag::warn_thread_attribute_decl_not_pointer, diag::warn_thread_attribute_ignored, -1,
-  /* DiagArray629 */ diag::warn_thread_safety_beta, -1,
-  /* DiagArray630 */ diag::warn_acquire_requires_negative_cap, -1,
-  /* DiagArray631 */ diag::warn_fun_requires_lock_precise, diag::warn_var_deref_requires_lock_precise, diag::warn_variable_requires_lock_precise, -1,
-  /* DiagArray632 */ diag::warn_guarded_pass_by_reference, diag::warn_pt_guarded_pass_by_reference, -1,
-  /* DiagArray633 */ diag::warn_thread_safety_verbose, -1,
-  /* DiagArray634 */ diag::trigraph_converted, diag::trigraph_ends_block_comment, diag::trigraph_ignored, diag::trigraph_ignored_block_comment, -1,
-  /* DiagArray636 */ diag::warn_type_safety_null_pointer_required, diag::warn_type_safety_type_mismatch, diag::warn_type_tag_for_datatype_wrong_kind, -1,
-  /* DiagArray637 */ diag::ext_redefinition_of_typedef, -1,
-  /* DiagArray638 */ diag::ext_typename_missing, -1,
-  /* DiagArray639 */ diag::warn_fe_unable_to_open_stats_file, -1,
-  /* DiagArray640 */ diag::warn_unavailable_fwdclass_message, -1,
-  /* DiagArray641 */ diag::warn_undeclared_selector, diag::warn_undeclared_selector_with_typo, -1,
-  /* DiagArray642 */ diag::warn_pp_undef_identifier, -1,
-  /* DiagArray643 */ diag::warn_address_of_reference_bool_conversion, diag::warn_this_bool_conversion, -1,
-  /* DiagArray644 */ diag::warn_func_template_missing, -1,
-  /* DiagArray645 */ diag::warn_undefined_inline, -1,
-  /* DiagArray646 */ diag::warn_undefined_internal, -1,
-  /* DiagArray647 */ diag::ext_undefined_internal_type, -1,
-  /* DiagArray648 */ diag::warn_pointer_indirection_from_incompatible_type, diag::warn_undefined_reinterpret_cast, -1,
-  /* DiagArray649 */ diag::warn_var_template_missing, -1,
-  /* DiagArray650 */ diag::warn_side_effects_unevaluated_context, -1,
-  /* DiagArray651 */ diag::warn_unguarded_availability, -1,
-  /* DiagArray652 */ diag::warn_unguarded_availability_new, -1,
-  /* DiagArray653 */ diag::warn_ucn_escape_incomplete, diag::warn_ucn_escape_no_digits, diag::warn_ucn_escape_surrogate, diag::warn_ucn_not_valid_in_c89, diag::warn_ucn_not_valid_in_c89_literal, -1,
-  /* DiagArray654 */ diag::warn_utf8_symbol_homoglyph, -1,
-  /* DiagArray655 */ diag::ext_unicode_whitespace, -1,
-  /* DiagArray656 */ diag::warn_base_class_is_uninit, diag::warn_field_is_uninit, diag::warn_reference_field_is_uninit, diag::warn_uninit_byref_blockvar_captured_by_block, diag::warn_uninit_self_reference_in_init, diag::warn_uninit_self_reference_in_reference_init, diag::warn_uninit_var, -1,
-  /* DiagArray657 */ diag::warn_drv_unknown_argument_clang_cl, diag::warn_drv_unknown_argument_clang_cl_with_suggestion, -1,
-  /* DiagArray658 */ diag::warn_unknown_attribute_ignored, -1,
-  /* DiagArray659 */ diag::ext_unknown_escape, -1,
-  /* DiagArray660 */ diag::ext_on_off_switch_syntax, diag::ext_pragma_syntax_eod, diag::ext_stdc_pragma_ignored, diag::warn_pragma_diagnostic_cannot_pop, diag::warn_pragma_diagnostic_invalid, diag::warn_pragma_diagnostic_invalid_option, diag::warn_pragma_diagnostic_invalid_token, diag::warn_pragma_ignored, diag::warn_pragma_include_alias_expected, diag::warn_pragma_include_alias_expected_filename, diag::warn_pragma_include_alias_mismatch_angle, diag::warn_pragma_include_alias_mismatch_quote, diag::warn_pragma_warning_expected, diag::warn_pragma_warning_expected_number, diag::warn_pragma_warning_push_level, diag::warn_pragma_warning_spec_invalid, diag::warn_stdc_fenv_access_not_supported, -1,
-  /* DiagArray661 */ diag::warn_unknown_sanitizer_ignored, -1,
-  /* DiagArray662 */ diag::warn_pragma_diagnostic_unknown_warning, diag::warn_unknown_diag_option, diag::warn_unknown_warning_specifier, -1,
-  /* DiagArray663 */ diag::ext_template_arg_unnamed_type, -1,
-  /* DiagArray664 */ diag::warn_unneeded_internal_decl, diag::warn_unneeded_static_internal_decl, -1,
-  /* DiagArray665 */ diag::warn_unneeded_member_function, -1,
-  /* DiagArray666 */ diag::warn_unreachable, -1,
-  /* DiagArray668 */ diag::warn_unreachable_break, -1,
-  /* DiagArray669 */ diag::warn_unreachable_loop_increment, -1,
-  /* DiagArray670 */ diag::warn_unreachable_return, -1,
-  /* DiagArray671 */ diag::warn_unsequenced_mod_mod, diag::warn_unsequenced_mod_use, -1,
-  /* DiagArray672 */ diag::warn_target_unsupported_abs2008, diag::warn_target_unsupported_abslegacy, -1,
-  /* DiagArray673 */ diag::warn_at_available_unchecked_use, -1,
-  /* DiagArray674 */ diag::warn_target_unsupported_compact_branches, -1,
-  /* DiagArray675 */ diag::warn_attribute_dll_instantiated_base_class, -1,
-  /* DiagArray676 */ diag::warn_template_qualified_friend_ignored, diag::warn_template_qualified_friend_unsupported, -1,
-  /* DiagArray677 */ diag::warn_drv_unsupported_gpopt, -1,
-  /* DiagArray678 */ diag::warn_target_unsupported_nan2008, diag::warn_target_unsupported_nanlegacy, -1,
-  /* DiagArray679 */ diag::warn_attribute_protected_visibility, -1,
-  /* DiagArray680 */ diag::ext_partial_specs_not_deducible, -1,
-  /* DiagArray683 */ diag::warn_drv_diagnostics_hotness_requires_pgo, diag::warn_drv_empty_joined_argument, diag::warn_drv_input_file_unused, diag::warn_drv_input_file_unused_by_cpp, diag::warn_drv_preprocessed_input_file_unused, diag::warn_drv_unused_argument, diag::warn_ignored_clang_option, -1,
-  /* DiagArray684 */ diag::warn_unused_comparison, -1,
-  /* DiagArray685 */ diag::warn_unused_const_variable, -1,
-  /* DiagArray686 */ diag::warn_unused_exception_param, -1,
-  /* DiagArray687 */ diag::warn_unused_function, -1,
-  /* DiagArray688 */ diag::warn_unused_property_expr, -1,
-  /* DiagArray689 */ diag::warn_unused_label, -1,
-  /* DiagArray690 */ diag::warn_unused_lambda_capture, -1,
-  /* DiagArray691 */ diag::warn_unused_local_typedef, -1,
-  /* DiagArray693 */ diag::pp_macro_not_used, -1,
-  /* DiagArray694 */ diag::warn_unused_member_function, -1,
-  /* DiagArray695 */ diag::warn_unused_parameter, -1,
-  /* DiagArray696 */ diag::warn_unused_private_field, -1,
-  /* DiagArray697 */ diag::warn_unused_property_backing_ivar, -1,
-  /* DiagArray698 */ diag::warn_unused_result, -1,
-  /* DiagArray699 */ diag::warn_unused_template, -1,
-  /* DiagArray700 */ diag::warn_unused_call, diag::warn_unused_container_subscript_expr, diag::warn_unused_expr, diag::warn_unused_voidptr, -1,
-  /* DiagArray701 */ diag::warn_unused_variable, -1,
-  /* DiagArray702 */ diag::warn_unused_volatile, -1,
-  /* DiagArray703 */ diag::warn_used_but_marked_unused, -1,
-  /* DiagArray704 */ diag::warn_user_literal_reserved, -1,
-  /* DiagArray705 */ diag::warn_diagnose_if_succeeded, -1,
-  /* DiagArray706 */ diag::warn_second_arg_of_va_start_not_last_named_param, diag::warn_second_parameter_to_va_arg_never_compatible, diag::warn_va_start_type_is_undefined, -1,
-  /* DiagArray707 */ diag::ext_named_variadic_macro, diag::ext_pp_bad_vaopt_use, diag::ext_variadic_macro, -1,
-  /* DiagArray708 */ diag::warn_typecheck_vector_element_sizes_not_equal, -1,
-  /* DiagArray709 */ diag::warn_incompatible_vectors, -1,
-  /* DiagArray711 */ diag::warn_empty_parens_are_function_decl, diag::warn_parens_disambiguated_as_function_declaration, diag::warn_parens_disambiguated_as_variable_declaration, -1,
-  /* DiagArray712 */ diag::warn_decl_in_param_list, diag::warn_redefinition_in_param_list, -1,
-  /* DiagArray713 */ diag::warn_vla_used, -1,
-  /* DiagArray714 */ diag::ext_vla, -1,
-  /* DiagArray715 */ diag::ext_typecheck_indirection_through_void_pointer, -1,
-  /* DiagArray717 */ diag::warn_weak_template_vtable, -1,
-  /* DiagArray718 */ diag::warn_weak_vtable, -1,
-  /* DiagArray719 */ diag::ext_deprecated_string_literal_conversion, -1,
-  /* DiagArray721 */ diag::warn_zero_as_null_pointer_constant, -1,
-  /* DiagArray722 */ diag::ext_typecheck_zero_array_size, -1,
+  /* DiagArray12 */ diag::warn_taking_address_of_packed_member, -1,
+  /* DiagArray13 */ diag::ext_typecheck_addrof_temporary, -1,
+  /* DiagArray16 */ diag::warn_alloca_align_alignof, -1,
+  /* DiagArray17 */ diag::warn_ambiguous_suitable_delete_function_found, -1,
+  /* DiagArray18 */ diag::warn_misplaced_ellipsis_vararg, -1,
+  /* DiagArray19 */ diag::warn_pp_ambiguous_macro, -1,
+  /* DiagArray20 */ diag::ext_nested_name_member_ref_lookup_ambiguous, -1,
+  /* DiagArray21 */ diag::warn_incompatible_analyzer_plugin_api, -1,
+  /* DiagArray22 */ diag::ext_abstract_pack_declarator_parens, -1,
+  /* DiagArray24 */ diag::warn_arc_bridge_cast_nonarc, -1,
+  /* DiagArray25 */ diag::warn_arc_possible_repeated_use_of_weak, -1,
+  /* DiagArray26 */ diag::warn_arc_object_memaccess, -1,
+  /* DiagArray27 */ diag::warn_arc_perform_selector_leaks, -1,
+  /* DiagArray28 */ diag::warn_arc_repeated_use_of_weak, -1,
+  /* DiagArray29 */ diag::warn_arc_retain_cycle, -1,
+  /* DiagArray30 */ diag::warn_arc_literal_assign, diag::warn_arc_retained_assign, diag::warn_arc_retained_property_assign, -1,
+  /* DiagArray31 */ diag::warn_argument_invalid_range, -1,
+  /* DiagArray32 */ diag::warn_array_index_exceeds_bounds, diag::warn_array_index_precedes_bounds, diag::warn_static_array_too_small, diag::warn_typecheck_zero_static_array_size, -1,
+  /* DiagArray33 */ diag::warn_ptr_arith_exceeds_bounds, diag::warn_ptr_arith_precedes_bounds, -1,
+  /* DiagArray35 */ diag::warn_asm_qualifier_ignored, diag::warn_file_asm_volatile, -1,
+  /* DiagArray36 */ diag::warn_asm_mismatched_size_modifier, -1,
+  /* DiagArray37 */ diag::warn_not_in_enum_assignment, -1,
+  /* DiagArray38 */ diag::warn_assume_side_effects, -1,
+  /* DiagArray39 */ diag::warn_atprotocol_protocol, -1,
+  /* DiagArray40 */ diag::warn_atimport_in_framework_header, -1,
+  /* DiagArray41 */ diag::warn_atomic_op_misaligned, -1,
+  /* DiagArray42 */ diag::warn_atomic_op_has_invalid_memory_order, -1,
+  /* DiagArray44 */ diag::warn_atomic_property_rule, -1,
+  /* DiagArray45 */ diag::warn_attribute_packed_for_bitfield, -1,
+  /* DiagArray47 */ diag::warn_drv_disabling_vptr_no_rtti_default, -1,
+  /* DiagArray48 */ diag::warn_auto_module_import, -1,
+  /* DiagArray49 */ diag::ext_auto_storage_class, -1,
+  /* DiagArray50 */ diag::warn_auto_var_is_id, -1,
+  /* DiagArray51 */ diag::warn_availability_and_unavailable, diag::warn_availability_on_static_initializer, diag::warn_availability_unknown_platform, diag::warn_availability_version_ordering, diag::warn_expected_consistent_version_separator, diag::warn_mismatched_availability, diag::warn_mismatched_availability_override, diag::warn_mismatched_availability_override_unavail, -1,
+  /* DiagArray52 */ diag::warn_fe_backend_plugin, -1,
+  /* DiagArray53 */ diag::backslash_newline_space, -1,
+  /* DiagArray54 */ diag::warn_bad_function_cast, -1,
+  /* DiagArray56 */ diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, -1,
+  /* DiagArray57 */ diag::ext_decomp_decl_cond, -1,
+  /* DiagArray58 */ diag::warn_impcast_bitfield_precision_constant, -1,
+  /* DiagArray59 */ diag::warn_bitfield_too_small_for_enum, diag::warn_signed_bitfield_enum_conversion, diag::warn_unsigned_bitfield_assigned_signed_enum, -1,
+  /* DiagArray60 */ diag::warn_anon_bitfield_width_exceeds_type_width, diag::warn_bitfield_width_exceeds_type_width, -1,
+  /* DiagArray61 */ diag::warn_bitwise_op_in_bitwise_op, -1,
+  /* DiagArray62 */ diag::warn_block_capture_autoreleasing, -1,
+  /* DiagArray63 */ diag::warn_impcast_bool_to_null_pointer, -1,
+  /* DiagArray65 */ diag::warn_braces_around_scalar_init, -1,
+  /* DiagArray66 */ diag::warn_objc_invalid_bridge, diag::warn_objc_invalid_bridge_to_cf, -1,
+  /* DiagArray67 */ diag::ext_pp_redef_builtin_macro, diag::ext_pp_undef_builtin_macro, -1,
+  /* DiagArray68 */ diag::warn_memcpy_chk_overflow, -1,
+  /* DiagArray69 */ diag::warn_implicit_decl_requires_sysheader, -1,
+  /* DiagArray70 */ diag::warn_zero_size_struct_union_compat, -1,
+  /* DiagArray74 */ diag::ext_old_implicitly_unsigned_long_cxx, diag::warn_auto_storage_class, diag::warn_cxx11_compat_user_defined_literal, diag::warn_cxx11_keyword, diag::warn_cxx11_right_shift_in_template_arg, diag::warn_explicit_instantiation_inline_0x, diag::warn_explicit_instantiation_must_be_global_0x, diag::warn_explicit_instantiation_out_of_scope_0x, diag::warn_explicit_instantiation_unqualified_wrong_namespace_0x, diag::warn_old_implicitly_unsigned_long_cxx, -1,
+  /* DiagArray75 */ diag::warn_deprecated_string_literal_conversion, -1,
+  /* DiagArray77 */ diag::warn_cxx11_compat_reserved_user_defined_literal, -1,
+  /* DiagArray78 */ diag::ext_alias_declaration, diag::ext_array_size_conversion, diag::ext_auto_type_specifier, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_defaulted_deleted_function, diag::ext_enum_friend, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_conversion_functions, diag::ext_extern_template, diag::ext_for_range, diag::ext_generalized_initializer_lists, diag::ext_nested_name_spec_is_enum, diag::ext_nonclass_type_friend, diag::ext_nonstatic_member_init, diag::ext_override_control_keyword, diag::ext_ref_qualifier, diag::ext_rvalue_reference, diag::ext_scoped_enum, diag::ext_static_data_member_in_union, diag::ext_template_arg_object_internal, diag::ext_template_outside_of_template, diag::ext_template_parameter_default_in_function_template, diag::ext_typename_outside_of_template, diag::ext_unelaborated_friend_type, diag::ext_variadic_templates, -1,
+  /* DiagArray79 */ diag::ext_extra_semi_cxx11, -1,
+  /* DiagArray80 */ diag::ext_inline_namespace, -1,
+  /* DiagArray81 */ diag::ext_cxx11_longlong, -1,
+  /* DiagArray82 */ diag::ext_cce_narrowing, diag::ext_init_list_constant_narrowing, diag::ext_init_list_type_narrowing, diag::ext_init_list_variable_narrowing, diag::warn_init_list_constant_narrowing, diag::warn_init_list_type_narrowing, diag::warn_init_list_variable_narrowing, -1,
+  /* DiagArray83 */ diag::ext_binary_literal_cxx14, -1,
+  /* DiagArray86 */ diag::ext_constexpr_body_invalid_stmt, diag::ext_constexpr_body_multiple_return, diag::ext_constexpr_local_var, diag::ext_constexpr_type_definition, diag::ext_cxx14_attr, diag::ext_decltype_auto_type_specifier, diag::ext_init_capture, diag::ext_variable_template, -1,
+  /* DiagArray88 */ diag::warn_cxx17_compat_exception_spec_in_signature, -1,
+  /* DiagArray90 */ diag::ext_auto_new_list_init, diag::ext_constexpr_if, diag::ext_constexpr_on_lambda_cxx17, diag::ext_cxx17_attr, diag::ext_decomp_decl, diag::ext_fold_expression, diag::ext_for_range_begin_end_types_differ, diag::ext_hex_literal_invalid, diag::ext_init_statement, diag::ext_inline_variable, diag::ext_multi_using_declaration, diag::ext_nested_namespace_definition, diag::ext_ns_enum_attribute, diag::ext_star_this_lambda_capture_cxx17, diag::ext_static_assert_no_message, diag::ext_template_template_param_typename, diag::ext_using_attribute_ns, diag::ext_using_declaration_pack, -1,
+  /* DiagArray95 */ diag::warn_cxx2a_compat_spaceship, diag::warn_cxx2a_keyword, -1,
+  /* DiagArray97 */ diag::ext_bitfield_member_init, diag::ext_equals_this_lambda_capture_cxx2a, diag::ext_pointer_to_const_ref_member_on_rvalue, -1,
+  /* DiagArray98 */ diag::warn_cxx17_compat_bitfield_member_init, diag::warn_cxx17_compat_equals_this_lambda_capture, diag::warn_cxx17_compat_spaceship, diag::warn_cxx17_compat_unicode_type, -1,
+  /* DiagArray99 */ diag::warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, -1,
+  /* DiagArray100 */ diag::warn_cxx14_compat_constexpr_if, diag::warn_cxx14_compat_constexpr_on_lambda, diag::warn_cxx14_compat_decomp_decl, diag::warn_cxx14_compat_fold_expression, diag::warn_cxx14_compat_init_statement, diag::warn_cxx14_compat_inline_variable, diag::warn_cxx14_compat_nested_namespace_definition, diag::warn_cxx14_compat_star_this_lambda_capture, diag::warn_cxx14_compat_static_assert_no_message, diag::warn_cxx14_compat_template_nontype_parm_auto_type, diag::warn_cxx14_compat_template_template_param_typename, diag::warn_cxx14_compat_u8_character_literal, diag::warn_cxx14_compat_using_attribute_ns, diag::warn_cxx17_compat_multi_using_declaration, diag::warn_cxx17_compat_using_declaration_pack, diag::warn_for_range_begin_end_types_differ, -1,
+  /* DiagArray101 */ diag::warn_cxx14_compat_ns_enum_attribute, diag::warn_cxx17_hex_literal, -1,
+  /* DiagArray102 */ diag::warn_cxx11_compat_constexpr_body_invalid_stmt, diag::warn_cxx11_compat_constexpr_body_multiple_return, diag::warn_cxx11_compat_constexpr_body_no_return, diag::warn_cxx11_compat_constexpr_local_var, diag::warn_cxx11_compat_constexpr_type_definition, diag::warn_cxx11_compat_decltype_auto_type_specifier, diag::warn_cxx11_compat_digit_separator, diag::warn_cxx11_compat_init_capture, diag::warn_cxx11_compat_variable_template, -1,
+  /* DiagArray103 */ diag::warn_cxx11_compat_binary_literal, -1,
+  /* DiagArray105 */ diag::warn_cxx98_compat_alias_declaration, diag::warn_cxx98_compat_alignas, diag::warn_cxx98_compat_alignof, diag::warn_cxx98_compat_attribute, diag::warn_cxx98_compat_auto_type_specifier, diag::warn_cxx98_compat_constexpr, diag::warn_cxx98_compat_ctor_list_init, diag::warn_cxx98_compat_decltype, diag::warn_cxx98_compat_defaulted_deleted_function, diag::warn_cxx98_compat_delegating_ctor, diag::warn_cxx98_compat_empty_scalar_initializer, diag::warn_cxx98_compat_enum_fixed_underlying_type, diag::warn_cxx98_compat_enum_friend, diag::warn_cxx98_compat_enum_nested_name_spec, diag::warn_cxx98_compat_explicit_conversion_functions, diag::warn_cxx98_compat_for_range, diag::warn_cxx98_compat_friend_is_member, diag::warn_cxx98_compat_generalized_initializer_lists, diag::warn_cxx98_compat_goto_into_protected_scope, diag::warn_cxx98_compat_indirect_goto_in_protected_scope, diag::warn_cxx98_compat_initializer_list_init, diag::warn_cxx98_compat_inline_namespace, diag::warn_cxx98_compat_lambda, diag::warn_cxx98_compat_less_colon_colon, diag::warn_cxx98_compat_literal_operator, diag::warn_cxx98_compat_literal_ucn_control_character, diag::warn_cxx98_compat_literal_ucn_escape_basic_scs, diag::warn_cxx98_compat_noexcept_decl, diag::warn_cxx98_compat_noexcept_expr, diag::warn_cxx98_compat_non_static_member_use, diag::warn_cxx98_compat_nonclass_type_friend, diag::warn_cxx98_compat_nonstatic_member_init, diag::warn_cxx98_compat_nontrivial_union_or_anon_struct_member, diag::warn_cxx98_compat_nullptr, diag::warn_cxx98_compat_override_control_keyword, diag::warn_cxx98_compat_pass_non_pod_arg_to_vararg, diag::warn_cxx98_compat_raw_string_literal, diag::warn_cxx98_compat_ref_qualifier, diag::warn_cxx98_compat_reference_list_init, diag::warn_cxx98_compat_rvalue_reference, diag::warn_cxx98_compat_scoped_enum, diag::warn_cxx98_compat_sfinae_access_control, diag::warn_cxx98_compat_static_assert, diag::warn_cxx98_compat_static_data_member_in_union, diag::warn_cxx98_compat_switch_into_protected_scope, diag::warn_cxx98_compat_template_arg_extra_parens, diag::warn_cxx98_compat_template_arg_null, diag::warn_cxx98_compat_template_arg_object_internal, diag::warn_cxx98_compat_template_outside_of_template, diag::warn_cxx98_compat_template_parameter_default_in_function_template, diag::warn_cxx98_compat_trailing_return_type, diag::warn_cxx98_compat_two_right_angle_brackets, diag::warn_cxx98_compat_typename_outside_of_template, diag::warn_cxx98_compat_unelaborated_friend_type, diag::warn_cxx98_compat_unicode_id, diag::warn_cxx98_compat_unicode_literal, diag::warn_cxx98_compat_unicode_type, diag::warn_cxx98_compat_using_decl_constructor, diag::warn_cxx98_compat_variadic_templates, -1,
+  /* DiagArray106 */ diag::warn_cxx98_compat_temp_copy, -1,
+  /* DiagArray107 */ diag::warn_cxx98_compat_top_level_semi, -1,
+  /* DiagArray108 */ diag::warn_cxx98_compat_template_arg_local_type, -1,
+  /* DiagArray109 */ diag::warn_cxx98_compat_array_size_conversion, diag::warn_cxx98_compat_cast_fn_obj, diag::warn_cxx98_compat_empty_fnmacro_arg, diag::warn_cxx98_compat_enumerator_list_comma, diag::warn_cxx98_compat_extern_template, diag::warn_cxx98_compat_longlong, diag::warn_cxx98_compat_no_newline_eof, diag::warn_cxx98_compat_pp_line_too_big, diag::warn_cxx98_compat_variadic_macro, -1,
+  /* DiagArray110 */ diag::warn_cxx98_compat_template_arg_unnamed_type, -1,
+  /* DiagArray111 */ diag::ext_anonymous_union, diag::ext_c11_alignment, diag::ext_c11_anonymous_struct, diag::ext_c11_generic_selection, diag::ext_c11_noreturn, diag::ext_c11_static_assert, -1,
+  /* DiagArray112 */ diag::warn_c99_compat_unicode_id, diag::warn_c99_compat_unicode_literal, diag::warn_old_implicitly_unsigned_long, -1,
+  /* DiagArray113 */ diag::ext_aggregate_init_not_constant, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_c99_whitespace_required_after_macro_name, diag::ext_designated_init, diag::ext_empty_fnmacro_arg, diag::ext_enumerator_list_comma_c, diag::ext_hex_constant_invalid, -1,
+  /* DiagArray114 */ diag::warn_cast_align, -1,
+  /* DiagArray115 */ diag::warn_cast_calling_conv, -1,
+  /* DiagArray116 */ diag::warn_cast_pointer_from_sel, -1,
+  /* DiagArray117 */ diag::warn_cast_qual, diag::warn_cast_qual2, -1,
+  /* DiagArray118 */ diag::ext_bad_cxx_cast_qualifiers_away_incoherent, -1,
+  /* DiagArray120 */ diag::warn_omp_section_is_char, diag::warn_subscript_is_char, -1,
+  /* DiagArray121 */ diag::warn_drv_yc_multiple_inputs_clang_cl, diag::warn_drv_ycyu_different_arg_clang_cl, diag::warn_drv_ycyu_no_arg_clang_cl, diag::warn_drv_ycyu_no_fi_arg_clang_cl, diag::warn_pp_macro_def_mismatch_with_pch, -1,
+  /* DiagArray122 */ diag::warn_pass_class_arg_to_vararg, -1,
+  /* DiagArray123 */ diag::warn_comma_operator, -1,
+  /* DiagArray124 */ diag::escaped_newline_block_comment_end, diag::ext_line_comment, diag::ext_multi_line_line_comment, diag::warn_nested_block_comment, -1,
+  /* DiagArray126 */ diag::ext_typecheck_comparison_of_distinct_pointers, -1,
+  /* DiagArray127 */ diag::ext_complex_component_init, -1,
+  /* DiagArray128 */ diag::ext_typecheck_cond_pointer_integer_mismatch, -1,
+  /* DiagArray129 */ diag::warn_maybe_uninit_var, -1,
+  /* DiagArray130 */ diag::warn_module_config_macro_undef, -1,
+  /* DiagArray131 */ diag::warn_impcast_integer_precision_constant, -1,
+  /* DiagArray132 */ diag::warn_logical_instead_of_bitwise, -1,
+  /* DiagArray133 */ diag::warn_cxx14_compat_constexpr_not_const, -1,
+  /* DiagArray134 */ diag::warn_attr_on_unconsumable_class, diag::warn_loop_state_mismatch, diag::warn_param_return_typestate_mismatch, diag::warn_param_typestate_mismatch, diag::warn_return_typestate_for_unconsumable_type, diag::warn_return_typestate_mismatch, diag::warn_use_in_invalid_state, diag::warn_use_of_temp_in_invalid_state, -1,
+  /* DiagArray135 */ diag::warn_impcast_complex_scalar, diag::warn_impcast_float_precision, diag::warn_impcast_float_result_precision, diag::warn_impcast_integer_precision, diag::warn_impcast_vector_scalar, diag::warn_template_arg_negative, diag::warn_template_arg_too_large, -1,
+  /* DiagArray138 */ diag::warn_coroutine_promise_unhandled_exception_required_with_exceptions, -1,
+  /* DiagArray139 */ diag::warn_unreachable_default, -1,
+  /* DiagArray141 */ diag::warn_objc_cdirective_format_string, -1,
+  /* DiagArray143 */ diag::warn_attribute_argument_n_negative, diag::warn_cuda_attr_lambda_position, diag::warn_kern_is_inline, diag::warn_kern_is_method, diag::warn_pragma_unroll_cuda_value_in_parens, -1,
+  /* DiagArray144 */ diag::warn_default_atomic_custom_getter_setter, -1,
+  /* DiagArray145 */ diag::warn_dangling_variable, diag::warn_unsupported_lifetime_extension, -1,
+  /* DiagArray146 */ diag::warn_dangling_else, -1,
+  /* DiagArray147 */ diag::warn_bind_ref_member_to_parameter, diag::warn_dangling_member, diag::warn_init_ptr_member_to_parameter_addr, diag::warn_new_dangling_reference, -1,
+  /* DiagArray148 */ diag::warn_new_dangling_initializer_list, -1,
+  /* DiagArray149 */ diag::warn_pp_date_time, -1,
+  /* DiagArray150 */ diag::warn_dealloc_in_category, -1,
+  /* DiagArray151 */ diag::warn_debug_compression_unavailable, -1,
+  /* DiagArray152 */ diag::ext_mixed_decls_code, -1,
+  /* DiagArray153 */ diag::warn_delegating_ctor_cycle, -1,
+  /* DiagArray154 */ diag::ext_delete_void_ptr_operand, diag::warn_delete_incomplete, -1,
+  /* DiagArray155 */ diag::warn_delete_abstract_non_virtual_dtor, diag::warn_delete_non_virtual_dtor, -1,
+  /* DiagArray156 */ diag::warn_O4_is_O3, diag::warn_access_decl_deprecated, diag::warn_deprecated_copy_operation, diag::warn_deprecated_redundant_constexpr_static_def, diag::warn_drv_deprecated_arg, diag::warn_drv_treating_input_as_cxx, diag::warn_option_invalid_ocl_version, diag::warn_vector_long_decl_spec_combination, -1,
+  /* DiagArray157 */ diag::warn_vector_mode_deprecated, -1,
+  /* DiagArray158 */ diag::warn_atl_uuid_deprecated, diag::warn_cstyle_param, diag::warn_deprecated, diag::warn_deprecated_fwdclass_message, diag::warn_deprecated_message, diag::warn_property_method_deprecated, -1,
+  /* DiagArray159 */ diag::warn_exception_spec_deprecated, -1,
+  /* DiagArray160 */ diag::warn_deprecated_def, diag::warn_unavailable_def, -1,
+  /* DiagArray161 */ diag::warn_increment_bool, -1,
+  /* DiagArray162 */ diag::warn_objc_isa_assign, diag::warn_objc_isa_use, -1,
+  /* DiagArray163 */ diag::warn_objc_pointer_masking, -1,
+  /* DiagArray164 */ diag::warn_objc_pointer_masking_performSelector, -1,
+  /* DiagArray165 */ diag::warn_deprecated_register, -1,
+  /* DiagArray166 */ diag::warn_deprecated_this_capture, -1,
+  /* DiagArray168 */ diag::warn_direct_ivar_access, -1,
+  /* DiagArray169 */ diag::pp_disabled_macro_expansion, -1,
+  /* DiagArray172 */ diag::warn_conflicting_param_modifiers, diag::warn_conflicting_ret_type_modifiers, -1,
+  /* DiagArray174 */ diag::warn_remainder_division_by_zero, -1,
+  /* DiagArray175 */ diag::warn_attribute_dll_redeclaration, -1,
+  /* DiagArray176 */ diag::warn_attribute_dllexport_explicit_instantiation_decl, -1,
+  /* DiagArray177 */ diag::warn_attribute_dllimport_static_field_definition, -1,
+  /* DiagArray178 */ diag::warn_doc_api_container_decl_mismatch, diag::warn_doc_block_command_duplicate, diag::warn_doc_block_command_empty_paragraph, diag::warn_doc_container_decl_mismatch, diag::warn_doc_function_method_decl_mismatch, diag::warn_doc_html_start_tag_expected_ident_or_greater, diag::warn_doc_html_start_tag_expected_quoted_string, diag::warn_doc_param_duplicate, diag::warn_doc_param_invalid_direction, diag::warn_doc_param_not_attached_to_a_function_decl, diag::warn_doc_param_not_found, diag::warn_doc_returns_attached_to_a_void_function, diag::warn_doc_returns_not_attached_to_a_function_decl, diag::warn_doc_tparam_duplicate, diag::warn_doc_tparam_not_attached_to_a_template_decl, diag::warn_doc_tparam_not_found, diag::warn_not_a_doxygen_trailing_member_comment, diag::warn_verbatim_block_end_without_start, -1,
+  /* DiagArray179 */ diag::warn_doc_deprecated_not_sync, -1,
+  /* DiagArray180 */ diag::warn_doc_html_end_forbidden, diag::warn_doc_html_end_unbalanced, diag::warn_doc_html_missing_end_tag, diag::warn_doc_html_start_end_mismatch, -1,
+  /* DiagArray181 */ diag::warn_doc_param_spaces_in_direction, -1,
+  /* DiagArray182 */ diag::warn_correct_comment_command_name, diag::warn_unknown_comment_command_name, -1,
+  /* DiagArray183 */ diag::ext_dollar_in_identifier, -1,
+  /* DiagArray184 */ diag::warn_impcast_double_promotion, -1,
+  /* DiagArray185 */ diag::ext_duplicate_declspec, diag::warn_attribute_address_multiple_identical_qualifiers, diag::warn_duplicate_declspec, -1,
+  /* DiagArray186 */ diag::warn_duplicate_enum_values, -1,
+  /* DiagArray187 */ diag::warn_method_param_declaration, -1,
+  /* DiagArray188 */ diag::warn_duplicate_method_decl, -1,
+  /* DiagArray189 */ diag::warn_duplicate_protocol_def, -1,
+  /* DiagArray190 */ diag::warn_dyn_class_memaccess, -1,
+  /* DiagArray191 */ diag::ext_dynamic_exception_spec, -1,
+  /* DiagArray193 */ diag::ext_embedded_directive, -1,
+  /* DiagArray194 */ diag::warn_empty_for_body, diag::warn_empty_if_body, diag::warn_empty_range_based_for_body, diag::warn_empty_switch_body, diag::warn_empty_while_body, -1,
+  /* DiagArray195 */ diag::ext_decomp_decl_empty, -1,
+  /* DiagArray196 */ diag::ext_empty_translation_unit, -1,
+  /* DiagArray197 */ diag::warn_incomplete_encoded_type, -1,
+  /* DiagArray199 */ diag::warn_comparison_of_mixed_enum_types, -1,
+  /* DiagArray200 */ diag::warn_comparison_of_mixed_enum_types_switch, -1,
+  /* DiagArray201 */ diag::warn_impcast_different_enum_types, -1,
+  /* DiagArray202 */ diag::ext_enum_too_large, diag::ext_enumerator_increment_too_large, -1,
+  /* DiagArray203 */ diag::warn_cdtor_function_try_handler_mem_expr, diag::warn_exception_caught_by_earlier_handler, diag::warn_throw_in_noexcept_func, -1,
+  /* DiagArray204 */ diag::warn_exit_time_destructor, -1,
+  /* DiagArray205 */ diag::warn_defined_in_function_type_macro, diag::warn_defined_in_object_type_macro, -1,
+  /* DiagArray206 */ diag::warn_drv_experimental_isel_incomplete, diag::warn_drv_experimental_isel_incomplete_opt, -1,
+  /* DiagArray207 */ diag::warn_direct_initialize_call, diag::warn_direct_super_initialize_call, -1,
+  /* DiagArray208 */ diag::warn_arc_strong_pointer_objc_pointer, -1,
+  /* DiagArray209 */ diag::warn_zero_size_struct_union_in_extern_c, -1,
+  /* DiagArray210 */ diag::warn_extern_init, -1,
+  /* DiagArray211 */ diag::warn_arm_interrupt_calling_convention, -1,
+  /* DiagArray212 */ diag::warn_namespace_member_extra_qualification, -1,
+  /* DiagArray213 */ diag::ext_extra_semi, diag::warn_extra_semi_after_mem_fn_def, -1,
+  /* DiagArray214 */ diag::ext_pp_extra_tokens_at_eol, diag::warn_omp_extra_tokens_at_eol, -1,
+  /* DiagArray215 */ diag::warn_drv_invoking_fallback, -1,
+  /* DiagArray216 */ diag::warn_flag_enum_constant_out_of_range, -1,
+  /* DiagArray217 */ diag::ext_flexible_array_in_array, diag::ext_flexible_array_in_struct, -1,
+  /* DiagArray218 */ diag::warn_impcast_float_integer, -1,
+  /* DiagArray219 */ diag::warn_floatingpoint_eq, -1,
+  /* DiagArray220 */ diag::warn_impcast_float_to_integer, diag::warn_impcast_float_to_integer_out_of_range, -1,
+  /* DiagArray221 */ diag::warn_impcast_float_to_integer_zero, -1,
+  /* DiagArray222 */ diag::warn_redundant_loop_iteration, diag::warn_variables_not_in_loop_body, -1,
+  /* DiagArray223 */ diag::warn_format_P_no_precision, diag::warn_format_argument_needs_cast, diag::warn_format_conversion_argument_type_mismatch, diag::warn_format_invalid_annotation, diag::warn_format_invalid_positional_specifier, diag::warn_format_mix_positional_nonpositional_args, diag::warn_format_nonsensical_length, diag::warn_format_string_is_wide_literal, diag::warn_format_zero_positional_specifier, diag::warn_missing_format_string, diag::warn_printf_ObjCflags_without_ObjCConversion, diag::warn_printf_asterisk_missing_arg, diag::warn_printf_asterisk_wrong_type, diag::warn_printf_empty_objc_flag, diag::warn_printf_format_string_contains_null_char, diag::warn_printf_format_string_not_null_terminated, diag::warn_printf_ignored_flag, diag::warn_printf_incomplete_specifier, diag::warn_printf_insufficient_data_args, diag::warn_printf_invalid_objc_flag, diag::warn_printf_nonsensical_flag, diag::warn_printf_nonsensical_optional_amount, diag::warn_printf_positional_arg_exceeds_data_args, diag::warn_scanf_nonzero_width, diag::warn_scanf_scanlist_incomplete, -1,
+  /* DiagArray224 */ diag::warn_printf_data_arg_not_used, -1,
+  /* DiagArray225 */ diag::warn_format_invalid_conversion, -1,
+  /* DiagArray226 */ diag::warn_format_non_standard, diag::warn_format_non_standard_conversion_spec, diag::warn_format_non_standard_positional_arg, -1,
+  /* DiagArray227 */ diag::warn_format_nonliteral, -1,
+  /* DiagArray228 */ diag::warn_format_argument_needs_cast_pedantic, diag::warn_format_conversion_argument_type_mismatch_pedantic, -1,
+  /* DiagArray229 */ diag::warn_format_nonliteral_noargs, -1,
+  /* DiagArray231 */ diag::warn_empty_format_string, -1,
+  /* DiagArray233 */ diag::ext_four_char_character_literal, -1,
+  /* DiagArray234 */ diag::warn_fe_backend_frame_larger_than, diag::warn_fe_frame_larger_than, -1,
+  /* DiagArray235 */ diag::warn_framework_include_private_from_public, -1,
+  /* DiagArray236 */ diag::warn_function_def_in_objc_container, -1,
+  /* DiagArray237 */ diag::warn_dispatch_body_ignored, diag::warn_multiversion_duplicate_entries, -1,
+  /* DiagArray239 */ diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_warn_gnu_final, diag::warn_attribute_on_function_definition, diag::warn_break_binds_to_switch, diag::warn_cleanup_ext, diag::warn_gcc_attribute_location, diag::warn_gcc_ignores_type_attr, diag::warn_gcc_variable_decl_in_for_loop, diag::warn_loop_ctrl_binds_to_inner, -1,
+  /* DiagArray240 */ diag::warn_global_constructor, diag::warn_global_destructor, -1,
+  /* DiagArray242 */ diag::ext_alignof_expr, -1,
+  /* DiagArray243 */ diag::ext_gnu_anonymous_struct, -1,
+  /* DiagArray244 */ diag::ext_array_init_parens, -1,
+  /* DiagArray245 */ diag::ext_auto_type, -1,
+  /* DiagArray246 */ diag::ext_binary_literal, -1,
+  /* DiagArray247 */ diag::ext_gnu_case_range, -1,
+  /* DiagArray248 */ diag::ext_integer_complex, -1,
+  /* DiagArray249 */ diag::ext_array_init_copy, -1,
+  /* DiagArray250 */ diag::ext_gnu_conditional_expr, -1,
+  /* DiagArray251 */ diag::ext_gnu_array_range, diag::ext_gnu_missing_equal_designator, diag::ext_gnu_old_style_field_designator, -1,
+  /* DiagArray252 */ diag::ext_gnu_empty_initializer, -1,
+  /* DiagArray253 */ diag::ext_empty_struct_union, diag::ext_flexible_array_empty_aggregate_gnu, diag::ext_no_named_members_in_struct_union, -1,
+  /* DiagArray254 */ diag::ext_flexible_array_init, -1,
+  /* DiagArray255 */ diag::ext_flexible_array_union_gnu, -1,
+  /* DiagArray256 */ diag::ext_expr_not_ice, diag::ext_in_class_initializer_non_constant, diag::ext_vla_folded_to_constant, -1,
+  /* DiagArray257 */ diag::ext_imaginary_constant, -1,
+  /* DiagArray258 */ diag::ext_pp_include_next_directive, -1,
+  /* DiagArray259 */ diag::ext_gnu_address_of_label, diag::ext_gnu_indirect_goto, -1,
+  /* DiagArray260 */ diag::ext_forward_ref_enum_def, -1,
+  /* DiagArray261 */ diag::ext_gnu_statement_expr, -1,
+  /* DiagArray262 */ diag::ext_in_class_initializer_float_type, -1,
+  /* DiagArray263 */ diag::ext_string_literal_operator_template, -1,
+  /* DiagArray264 */ diag::ext_typecheck_cast_to_union, -1,
+  /* DiagArray265 */ diag::ext_variable_sized_type_in_struct, -1,
+  /* DiagArray266 */ diag::ext_pp_line_zero, -1,
+  /* DiagArray267 */ diag::ext_missing_varargs_arg, diag::ext_paste_comma, -1,
+  /* DiagArray268 */ diag::warn_header_guard, -1,
+  /* DiagArray269 */ diag::warn_using_directive_in_header, -1,
+  /* DiagArray270 */ diag::warn_condition_is_idiomatic_assignment, -1,
+  /* DiagArray271 */ diag::ext_cannot_use_trivial_abi, diag::warn_alias_to_weak_alias, diag::warn_alias_with_section, diag::warn_attr_abi_tag_namespace, diag::warn_attribute_after_definition_ignored, diag::warn_attribute_iboutlet, diag::warn_attribute_ignored, diag::warn_attribute_ignored_for_field_of_type, diag::warn_attribute_ignored_on_inline, diag::warn_attribute_invalid_on_definition, diag::warn_attribute_no_decl, diag::warn_attribute_nonnull_no_pointers, diag::warn_attribute_nonnull_parm_no_args, diag::warn_attribute_not_on_decl, diag::warn_attribute_pointer_or_reference_only, diag::warn_attribute_pointers_only, diag::warn_attribute_precede_definition, diag::warn_attribute_return_pointers_only, diag::warn_attribute_return_pointers_refs_only, diag::warn_attribute_sentinel_named_arguments, diag::warn_attribute_sentinel_not_variadic, diag::warn_attribute_type_not_supported, diag::warn_attribute_unknown_visibility, diag::warn_attribute_void_function_method, diag::warn_attribute_weak_on_field, diag::warn_attribute_weak_on_local, diag::warn_attribute_wrong_decl_type, diag::warn_attribute_wrong_decl_type_str, diag::warn_block_literal_attributes_on_omitted_return_type, diag::warn_cconv_ignored, diag::warn_cconv_structors, diag::warn_cconv_varargs, diag::warn_cxx11_gnu_attribute_on_type, diag::warn_declspec_attribute_ignored, diag::warn_deprecated_anonymous_namespace, diag::warn_dllimport_dropped_from_inline_function, diag::warn_duplicate_attribute, diag::warn_duplicate_attribute_exact, diag::warn_gc_attribute_weak_on_local, diag::warn_gnu_inline_attribute_requires_inline, diag::warn_ignored_ms_inheritance, diag::warn_internal_linkage_local_storage, diag::warn_microsoft_qualifiers_ignored, diag::warn_mips_interrupt_attribute, diag::warn_mmap_unknown_attribute, diag::warn_nocf_check_attribute_ignored, diag::warn_ns_attribute_wrong_parameter_type, diag::warn_ns_attribute_wrong_return_type, diag::warn_opencl_attr_deprecated_ignored, diag::warn_riscv_interrupt_attribute, diag::warn_riscv_repeated_interrupt_attribute, diag::warn_transparent_union_attribute_field_size_align, diag::warn_transparent_union_attribute_floating, diag::warn_transparent_union_attribute_not_definition, diag::warn_transparent_union_attribute_zero_fields, diag::warn_type_attribute_wrong_type, diag::warn_unhandled_ms_attribute_ignored, diag::warn_unsupported_target_attribute, -1,
+  /* DiagArray272 */ diag::warn_drv_unsupported_opt_for_target, diag::warn_ignored_gcc_optimization, -1,
+  /* DiagArray273 */ diag::warn_pragma_intrinsic_builtin, -1,
+  /* DiagArray274 */ diag::warn_pragma_optimize, -1,
+  /* DiagArray275 */ diag::warn_pragma_align_expected_equal, diag::warn_pragma_align_invalid_option, diag::warn_pragma_begin_end_mismatch, diag::warn_pragma_comment_ignored, diag::warn_pragma_debug_missing_argument, diag::warn_pragma_debug_unexpected_command, diag::warn_pragma_expected_action_or_r_paren, diag::warn_pragma_expected_colon, diag::warn_pragma_expected_colon_r_paren, diag::warn_pragma_expected_comma, diag::warn_pragma_expected_identifier, diag::warn_pragma_expected_init_seg, diag::warn_pragma_expected_integer, diag::warn_pragma_expected_lparen, diag::warn_pragma_expected_non_wide_string, diag::warn_pragma_expected_predicate, diag::warn_pragma_expected_punc, diag::warn_pragma_expected_rparen, diag::warn_pragma_expected_section_label_or_name, diag::warn_pragma_expected_section_name, diag::warn_pragma_expected_section_push_pop_or_name, diag::warn_pragma_expected_string, diag::warn_pragma_extra_tokens_at_eol, diag::warn_pragma_force_cuda_host_device_bad_arg, diag::warn_pragma_init_seg_unsupported_target, diag::warn_pragma_invalid_action, diag::warn_pragma_invalid_argument, diag::warn_pragma_invalid_specific_action, diag::warn_pragma_missing_argument, diag::warn_pragma_ms_struct, diag::warn_pragma_options_align_reset_failed, diag::warn_pragma_options_expected_align, diag::warn_pragma_pack_invalid_alignment, diag::warn_pragma_pack_malformed, diag::warn_pragma_pop_failed, diag::warn_pragma_pop_macro_no_push, diag::warn_pragma_unknown_extension, diag::warn_pragma_unsupported_action, diag::warn_pragma_unsupported_extension, diag::warn_pragma_unused_expected_var, diag::warn_pragma_unused_expected_var_arg, diag::warn_pragma_unused_undeclared_var, -1,
+  /* DiagArray276 */ diag::warn_arc_lifetime_result_type, diag::warn_block_literal_qualifiers_on_omitted_return_type, diag::warn_qual_return_type, diag::warn_typecheck_function_qualifiers_ignored, diag::warn_typecheck_reference_qualifiers, -1,
+  /* DiagArray278 */ diag::warn_auto_implicit_atomic_property, diag::warn_implicit_atomic_property, -1,
+  /* DiagArray279 */ diag::warn_impcast_floating_point_to_bool, -1,
+  /* DiagArray280 */ diag::ext_implicit_exception_spec_mismatch, -1,
+  /* DiagArray281 */ diag::warn_fallthrough_attr_unreachable, diag::warn_unannotated_fallthrough, -1,
+  /* DiagArray282 */ diag::warn_unannotated_fallthrough_per_function, -1,
+  /* DiagArray283 */ diag::ext_implicit_function_decl, diag::ext_implicit_lib_function_decl, diag::warn_builtin_unknown, diag::warn_implicit_function_decl, -1,
+  /* DiagArray284 */ diag::ext_missing_type_specifier, -1,
+  /* DiagArray285 */ diag::warn_implicitly_retains_self, -1,
+  /* DiagArray286 */ diag::ext_integer_literal_too_large_for_signed, -1,
+  /* DiagArray288 */ diag::ext_pp_import_directive, -1,
+  /* DiagArray289 */ diag::warn_inaccessible_base_class, -1,
+  /* DiagArray290 */ diag::pp_include_next_absolute_path, -1,
+  /* DiagArray291 */ diag::pp_include_next_in_primary, -1,
+  /* DiagArray292 */ diag::warn_deep_exception_specs_differ, diag::warn_incompatible_exception_specs, -1,
+  /* DiagArray293 */ diag::ext_typecheck_convert_incompatible_function_pointer, -1,
+  /* DiagArray294 */ diag::warn_redecl_library_builtin, -1,
+  /* DiagArray295 */ diag::warn_cxx_ms_struct, diag::warn_npot_ms_struct, -1,
+  /* DiagArray296 */ diag::ext_typecheck_convert_incompatible_pointer, -1,
+  /* DiagArray297 */ diag::ext_nested_pointer_qualifier_mismatch, diag::ext_typecheck_convert_discards_qualifiers, -1,
+  /* DiagArray298 */ diag::warn_property_types_are_incompatible, -1,
+  /* DiagArray299 */ diag::warn_incompatible_sysroot, -1,
+  /* DiagArray300 */ diag::warn_mmap_incomplete_framework_module_declaration, -1,
+  /* DiagArray301 */ diag::warn_undef_method_impl, -1,
+  /* DiagArray303 */ diag::warn_missing_submodule, diag::warn_mmap_umbrella_dir_not_found, diag::warn_uncovered_module_header, -1,
+  /* DiagArray304 */ diag::warn_redeclaration_without_attribute_prev_attribute_ignored, diag::warn_redeclaration_without_import_attribute, -1,
+  /* DiagArray305 */ diag::warn_destructor_marked_not_override_overriding, -1,
+  /* DiagArray306 */ diag::warn_function_marked_not_override_overriding, -1,
+  /* DiagArray307 */ diag::ext_increment_bool, -1,
+  /* DiagArray308 */ diag::warn_infinite_recursive_function, -1,
+  /* DiagArray310 */ diag::warn_initializer_overrides, diag::warn_subobject_initializer_overrides, -1,
+  /* DiagArray311 */ diag::ext_out_of_line_qualified_id_type_names_constructor, -1,
+  /* DiagArray313 */ diag::warn_fe_inline_asm, -1,
+  /* DiagArray314 */ diag::ext_operator_new_delete_declared_inline, -1,
+  /* DiagArray315 */ diag::warn_explicit_instantiation_after_specialization, -1,
+  /* DiagArray316 */ diag::ext_typecheck_convert_int_pointer, diag::ext_typecheck_convert_pointer_int, -1,
+  /* DiagArray318 */ diag::warn_int_to_pointer_cast, -1,
+  /* DiagArray319 */ diag::warn_int_to_void_pointer_cast, -1,
+  /* DiagArray320 */ diag::warn_integer_constant_overflow, -1,
+  /* DiagArray321 */ diag::warn_drv_object_size_disabled_O0, diag::warn_drv_optimization_value, -1,
+  /* DiagArray322 */ diag::ext_constexpr_function_never_constant_expr, -1,
+  /* DiagArray323 */ diag::warn_iboutlet_object_type, diag::warn_iboutletcollection_property_assign, -1,
+  /* DiagArray324 */ diag::warn_invalid_initializer_from_system_header, -1,
+  /* DiagArray325 */ diag::warn_invalid_ios_deployment_target, -1,
+  /* DiagArray326 */ diag::warn_falloff_noreturn_function, diag::warn_noreturn_function_has_return_expr, -1,
+  /* DiagArray327 */ diag::ext_offsetof_non_pod_type, diag::ext_offsetof_non_standardlayout_type, -1,
+  /* DiagArray328 */ diag::warn_drv_ps4_sdk_dir, diag::warn_drv_unable_to_find_directory_expected, -1,
+  /* DiagArray329 */ diag::ext_partial_spec_not_more_specialized_than_primary, -1,
+  /* DiagArray331 */ diag::ext_empty_character, diag::ext_unterminated_char_or_string, -1,
+  /* DiagArray332 */ diag::warn_bad_character_encoding, diag::warn_bad_string_encoding, -1,
+  /* DiagArray333 */ diag::ext_pp_bad_paste_ms, -1,
+  /* DiagArray334 */ diag::warn_jump_out_of_seh_finally, -1,
+  /* DiagArray335 */ diag::ext_keyword_as_ident, -1,
+  /* DiagArray336 */ diag::warn_pp_macro_hides_keyword, -1,
+  /* DiagArray337 */ diag::ext_param_promoted_not_compatible_with_prototype, -1,
+  /* DiagArray338 */ diag::ext_token_used, -1,
+  /* DiagArray339 */ diag::warn_parameter_size, diag::warn_return_value_size, -1,
+  /* DiagArray341 */ diag::warn_impcast_literal_float_to_integer, diag::warn_impcast_literal_float_to_integer_out_of_range, -1,
+  /* DiagArray342 */ diag::warn_float_overflow, diag::warn_float_underflow, -1,
+  /* DiagArray343 */ diag::ext_template_arg_local_type, -1,
+  /* DiagArray344 */ diag::warn_logical_not_on_lhs_of_check, -1,
+  /* DiagArray345 */ diag::warn_logical_and_in_logical_or, -1,
+  /* DiagArray346 */ diag::ext_c99_longlong, -1,
+  /* DiagArray348 */ diag::ext_pp_macro_redef, -1,
+  /* DiagArray349 */ diag::ext_main_used, diag::ext_noreturn_main, diag::ext_variadic_main, diag::warn_main_one_arg, diag::warn_main_redefined, diag::warn_main_returns_bool_literal, diag::warn_static_main, -1,
+  /* DiagArray350 */ diag::ext_main_returns_nonint, -1,
+  /* DiagArray351 */ diag::warn_has_warning_invalid_option, -1,
+  /* DiagArray352 */ diag::ext_many_braces_around_scalar_init, -1,
+  /* DiagArray353 */ diag::warn_max_unsigned_zero, -1,
+  /* DiagArray354 */ diag::warn_suspicious_sizeof_memset, -1,
+  /* DiagArray355 */ diag::warn_memsize_comparison, -1,
+  /* DiagArray356 */ diag::warn_non_contravariant_param_types, diag::warn_non_covariant_ret_types, -1,
+  /* DiagArray358 */ diag::ext_anonymous_record_with_type, diag::ext_ms_anonymous_record, -1,
+  /* DiagArray359 */ diag::ext_ms_cast_fn_obj, diag::ext_ms_impcast_fn_obj, -1,
+  /* DiagArray360 */ diag::ext_charize_microsoft, -1,
+  /* DiagArray361 */ diag::ext_comment_paste_microsoft, -1,
+  /* DiagArray362 */ diag::ext_default_init_const, -1,
+  /* DiagArray363 */ diag::ext_pp_operator_used_as_macro_name, -1,
+  /* DiagArray364 */ diag::ext_param_default_argument_redefinition, -1,
+  /* DiagArray365 */ diag::ext_ctrl_z_eof_microsoft, -1,
+  /* DiagArray366 */ diag::ext_ms_forward_ref_enum, -1,
+  /* DiagArray367 */ diag::ext_enumerator_too_large, -1,
+  /* DiagArray368 */ diag::ext_ellipsis_exception_spec, diag::ext_incomplete_in_exception_spec, diag::ext_mismatched_exception_spec, diag::ext_mismatched_exception_spec_explicit_instantiation, diag::ext_ms_missing_exception_specification, diag::ext_override_exception_spec, -1,
+  /* DiagArray369 */ diag::warn_microsoft_dependent_exists, -1,
+  /* DiagArray370 */ diag::ext_ms_explicit_constructor_call, -1,
+  /* DiagArray371 */ diag::warn_member_extra_qualification, -1,
+  /* DiagArray372 */ diag::ext_c_enum_fixed_underlying_type, -1,
+  /* DiagArray373 */ diag::ext_flexible_array_empty_aggregate_ms, diag::ext_flexible_array_union_ms, -1,
+  /* DiagArray374 */ diag::ext_goto_into_protected_scope, -1,
+  /* DiagArray375 */ diag::ext_ms_ambiguous_direct_base, -1,
+  /* DiagArray376 */ diag::ext_pp_include_search_ms, -1,
+  /* DiagArray377 */ diag::ext_mutable_reference, -1,
+  /* DiagArray378 */ diag::ext_pure_function_definition, -1,
+  /* DiagArray379 */ diag::ext_static_non_static, -1,
+  /* DiagArray380 */ diag::ext_ms_sealed_keyword, -1,
+  /* DiagArray381 */ diag::ext_explicit_instantiation_duplicate, diag::ext_found_via_dependent_bases_lookup, diag::ext_ms_delayed_template_argument, diag::ext_ms_deref_template_argument, diag::ext_ms_template_spec_redecl_out_of_scope, diag::ext_ms_template_type_arg_missing_typename, diag::ext_undeclared_unqual_id_with_dependent_base, -1,
+  /* DiagArray382 */ diag::ext_union_member_of_reference_type, -1,
+  /* DiagArray383 */ diag::ext_friend_tag_redecl_outside_namespace, -1,
+  /* DiagArray384 */ diag::ext_ms_using_declaration_inaccessible, -1,
+  /* DiagArray385 */ diag::ext_pseudo_dtor_on_void, -1,
+  /* DiagArray386 */ diag::warn_mismatched_delete_new, -1,
+  /* DiagArray387 */ diag::warn_conflicting_param_types, -1,
+  /* DiagArray388 */ diag::warn_conflicting_ret_types, -1,
+  /* DiagArray389 */ diag::warn_struct_class_previous_tag_mismatch, diag::warn_struct_class_tag_mismatch, -1,
+  /* DiagArray390 */ diag::warn_missing_braces, -1,
+  /* DiagArray391 */ diag::ext_no_declarators, diag::ext_standalone_specifier, diag::ext_typedef_without_a_name, diag::warn_standalone_specifier, -1,
+  /* DiagArray392 */ diag::ext_missing_exception_specification, -1,
+  /* DiagArray393 */ diag::warn_missing_field_initializers, -1,
+  /* DiagArray396 */ diag::warn_missing_method_return_type, -1,
+  /* DiagArray397 */ diag::warn_overriding_method_missing_noescape, -1,
+  /* DiagArray398 */ diag::warn_suggest_noreturn_block, diag::warn_suggest_noreturn_function, -1,
+  /* DiagArray399 */ diag::warn_cconv_knr, -1,
+  /* DiagArray400 */ diag::warn_missing_prototype, -1,
+  /* DiagArray401 */ diag::warn_missing_selector_name, -1,
+  /* DiagArray402 */ diag::warn_missing_sysroot, -1,
+  /* DiagArray403 */ diag::warn_missing_variable_declarations, -1,
+  /* DiagArray404 */ diag::remark_module_build, diag::remark_module_build_done, diag::remark_module_lock_failure, diag::remark_module_lock_timeout, -1,
+  /* DiagArray405 */ diag::warn_module_conflict, diag::warn_module_system_bit_conflict, -1,
+  /* DiagArray406 */ diag::warn_module_config_mismatch, -1,
+  /* DiagArray407 */ diag::warn_duplicate_module_file_extension, -1,
+  /* DiagArray408 */ diag::ext_module_import_in_extern_c, -1,
+  /* DiagArray409 */ diag::ext_equivalent_internal_linkage_decl_in_modules, -1,
+  /* DiagArray410 */ diag::ext_module_import_not_at_top_level_noop, -1,
+  /* DiagArray414 */ diag::warn_drv_msvc_not_found, -1,
+  /* DiagArray415 */ diag::ext_multichar_character_literal, -1,
+  /* DiagArray416 */ diag::warn_vbase_moved_multiple_times, -1,
+  /* DiagArray418 */ diag::ext_anonymous_record_with_anonymous_type, -1,
+  /* DiagArray420 */ diag::warn_operator_new_returns_null, -1,
+  /* DiagArray421 */ diag::ext_no_newline_eof, diag::warn_no_newline_eof, -1,
+  /* DiagArray424 */ diag::warn_non_literal_null_pointer, -1,
+  /* DiagArray425 */ diag::warn_non_modular_include_in_framework_module, -1,
+  /* DiagArray426 */ diag::warn_non_modular_include_in_module, -1,
+  /* DiagArray427 */ diag::warn_cannot_pass_non_pod_arg_to_vararg, diag::warn_non_pod_vararg_with_format_string, diag::warn_second_parameter_to_va_arg_not_pod, diag::warn_second_parameter_to_va_arg_ownership_qualified, -1,
+  /* DiagArray428 */ diag::warn_non_virtual_dtor, -1,
+  /* DiagArray429 */ diag::warn_null_arg, diag::warn_null_ret, -1,
+  /* DiagArray431 */ diag::pp_nonportable_path, -1,
+  /* DiagArray432 */ diag::pp_nonportable_system_path, -1,
+  /* DiagArray433 */ diag::warn_neon_vector_initializer_non_portable, -1,
+  /* DiagArray434 */ diag::warn_cstruct_memaccess, -1,
+  /* DiagArray435 */ diag::warn_nsconsumed_attribute_mismatch, -1,
+  /* DiagArray436 */ diag::warn_nsreturns_retained_attribute_mismatch, -1,
+  /* DiagArray437 */ diag::warn_null_in_arithmetic_operation, diag::warn_null_in_comparison_operation, -1,
+  /* DiagArray438 */ diag::null_in_char_or_string, diag::null_in_file, -1,
+  /* DiagArray439 */ diag::warn_impcast_null_pointer_to_integer, -1,
+  /* DiagArray440 */ diag::warn_binding_null_to_reference, diag::warn_indirection_through_null, -1,
+  /* DiagArray441 */ diag::warn_gnu_null_ptr_arith, diag::warn_pointer_arith_null_ptr, -1,
+  /* DiagArray442 */ diag::warn_conflicting_nullability_attr_overriding_param_types, diag::warn_conflicting_nullability_attr_overriding_ret_types, diag::warn_mismatched_nullability_attr, diag::warn_null_resettable_setter, diag::warn_nullability_duplicate, -1,
+  /* DiagArray443 */ diag::warn_nullability_missing, -1,
+  /* DiagArray444 */ diag::warn_nullability_missing_array, -1,
+  /* DiagArray445 */ diag::warn_nullability_declspec, -1,
+  /* DiagArray446 */ diag::ext_nullability, -1,
+  /* DiagArray447 */ diag::warn_nullability_inferred_on_nested_type, -1,
+  /* DiagArray448 */ diag::warn_nullability_lost, -1,
+  /* DiagArray449 */ diag::warn_autosynthesis_property_ivar_match, -1,
+  /* DiagArray450 */ diag::warn_objc_circular_container, -1,
+  /* DiagArray452 */ diag::warn_objc_designated_init_missing_super_call, diag::warn_objc_designated_init_non_designated_init_call, diag::warn_objc_designated_init_non_super_designated_init_call, diag::warn_objc_implementation_missing_designated_init_override, diag::warn_objc_secondary_init_missing_init_call, diag::warn_objc_secondary_init_super_init_call, -1,
+  /* DiagArray453 */ diag::warn_superclass_variable_sized_type_not_at_end, diag::warn_variable_sized_ivar_visibility, -1,
+  /* DiagArray454 */ diag::warn_forward_class_redefinition, -1,
+  /* DiagArray455 */ diag::warn_ivars_in_interface, -1,
+  /* DiagArray456 */ diag::warn_objc_literal_comparison, -1,
+  /* DiagArray457 */ diag::warn_impcast_objective_c_literal_to_bool, diag::warn_objc_collection_literal_element, -1,
+  /* DiagArray458 */ diag::warn_pp_objc_macro_redef_ignored, -1,
+  /* DiagArray459 */ diag::warn_messaging_unqualified_id, -1,
+  /* DiagArray460 */ diag::warn_class_method_not_found, diag::warn_class_method_not_found_with_typo, diag::warn_inst_method_not_found, diag::warn_instance_method_not_found_with_typo, diag::warn_instance_method_on_class_found, diag::warn_root_inst_method_not_found, -1,
+  /* DiagArray461 */ diag::warn_missing_explicit_synthesis, -1,
+  /* DiagArray462 */ diag::warn_objc_missing_super_call, -1,
+  /* DiagArray463 */ diag::warn_multiple_method_decl, -1,
+  /* DiagArray464 */ diag::warn_objc_property_retain_of_block, -1,
+  /* DiagArray465 */ diag::warn_objc_pointer_cxx_catch_fragile, -1,
+  /* DiagArray466 */ diag::warn_impl_required_for_class_property, diag::warn_impl_required_in_category_for_class_property, diag::warn_setter_getter_impl_required, diag::warn_setter_getter_impl_required_in_category, -1,
+  /* DiagArray467 */ diag::warn_property_implicitly_mismatched, -1,
+  /* DiagArray468 */ diag::warn_cocoa_naming_owned_rule, -1,
+  /* DiagArray469 */ diag::warn_objc_property_default_assign_on_object, diag::warn_objc_property_no_assignment_attribute, -1,
+  /* DiagArray470 */ diag::warn_autosynthesis_property_in_superclass, diag::warn_no_autosynthesis_property, diag::warn_no_autosynthesis_shared_ivar_property, -1,
+  /* DiagArray471 */ diag::warn_category_method_impl_match, -1,
+  /* DiagArray472 */ diag::warn_auto_synthesizing_protocol_property, -1,
+  /* DiagArray473 */ diag::warn_objc_redundant_qualified_class_type, -1,
+  /* DiagArray474 */ diag::warn_objc_readonly_property_has_setter, -1,
+  /* DiagArray476 */ diag::warn_objc_redundant_literal_use, -1,
+  /* DiagArray477 */ diag::warn_objc_root_class_missing, -1,
+  /* DiagArray478 */ diag::warn_objc_string_literal_comparison, -1,
+  /* DiagArray479 */ diag::warn_concatenated_nsarray_literal, -1,
+  /* DiagArray480 */ diag::warn_objc_unsafe_perform_selector, -1,
+  /* DiagArray481 */ diag::warn_odr_tag_type_inconsistent, -1,
+  /* DiagArray482 */ diag::warn_old_style_cast, -1,
+  /* DiagArray484 */ diag::ext_opencl_ext_vector_type_rgba_selector, -1,
+  /* DiagArray485 */ diag::warn_omp_alignment_not_power_of_two, diag::warn_omp_linear_step_zero, -1,
+  /* DiagArray486 */ diag::ext_omp_loop_not_canonical_init, diag::warn_omp_loop_64_bit_var, -1,
+  /* DiagArray487 */ diag::warn_drv_omp_offload_target_duplicate, diag::warn_drv_omp_offload_target_missingbcruntime, diag::warn_omp_non_trivial_type_mapped, diag::warn_omp_not_in_target_context, -1,
+  /* DiagArray488 */ diag::warn_drv_fine_grained_bitfield_accesses_ignored, diag::warn_drv_moutline_unsupported_opt, diag::warn_drv_ps4_force_pic, diag::warn_drv_unsupported_longcalls, diag::warn_drv_unsupported_pic_with_mabicalls, diag::warn_drv_vectorize_needs_hvx, -1,
+  /* DiagArray489 */ diag::ext_typecheck_ordered_comparison_of_function_pointers, -1,
+  /* DiagArray490 */ diag::ext_out_of_line_declaration, -1,
+  /* DiagArray491 */ diag::ext_use_out_of_scope_declaration, -1,
+  /* DiagArray492 */ diag::warn_overaligned_type, -1,
+  /* DiagArray494 */ diag::ext_string_too_long, -1,
+  /* DiagArray495 */ diag::warn_overloaded_shift_in_comparison, -1,
+  /* DiagArray496 */ diag::warn_overloaded_virtual, -1,
+  /* DiagArray497 */ diag::warn_fe_override_module, -1,
+  /* DiagArray498 */ diag::warn_conflicting_overriding_param_modifiers, diag::warn_conflicting_overriding_param_types, diag::warn_conflicting_overriding_ret_type_modifiers, diag::warn_conflicting_overriding_ret_types, diag::warn_conflicting_overriding_variadic, diag::warn_non_contravariant_overriding_param_types, diag::warn_non_covariant_overriding_ret_types, -1,
+  /* DiagArray499 */ diag::warn_drv_overriding_flag_option, -1,
+  /* DiagArray500 */ diag::warn_unnecessary_packed, -1,
+  /* DiagArray501 */ diag::warn_padded_struct_anon_field, diag::warn_padded_struct_field, diag::warn_padded_struct_size, -1,
+  /* DiagArray502 */ diag::warn_condition_is_assignment, diag::warn_precedence_bitwise_rel, diag::warn_precedence_conditional, -1,
+  /* DiagArray503 */ diag::warn_equality_with_extra_parens, -1,
+  /* DiagArray505 */ diag::remark_fe_backend_optimization_remark, -1,
+  /* DiagArray506 */ diag::remark_fe_backend_optimization_remark_analysis, diag::remark_fe_backend_optimization_remark_analysis_aliasing, diag::remark_fe_backend_optimization_remark_analysis_fpcommute, -1,
+  /* DiagArray507 */ diag::warn_fe_backend_optimization_failure, -1,
+  /* DiagArray508 */ diag::remark_fe_backend_optimization_remark_missed, -1,
+  /* DiagArray509 */ diag::warn_module_uses_date_time, -1,
+  /* DiagArray510 */ diag::ext_aggregate_init_not_constant, diag::ext_anonymous_record_with_type, diag::ext_anonymous_struct_union_qualified, diag::ext_array_size_conversion, diag::ext_auto_new_list_init, diag::ext_c99_array_usage, diag::ext_c99_compound_literal, diag::ext_c99_flexible_array_member, diag::ext_c99_variable_decl_in_for_loop, diag::ext_cast_fn_obj, diag::ext_clang_diagnose_if, diag::ext_clang_enable_if, diag::ext_cxx11_enum_fixed_underlying_type, diag::ext_cxx14_attr, diag::ext_cxx17_attr, diag::ext_designated_init, diag::ext_ellipsis_exception_spec, diag::ext_empty_fnmacro_arg, diag::ext_enum_value_not_int, diag::ext_enumerator_list_comma_c, diag::ext_enumerator_list_comma_cxx, diag::ext_explicit_instantiation_without_qualified_id, diag::ext_extern_template, diag::ext_extra_semi, diag::ext_forward_ref_enum, diag::ext_freestanding_complex, diag::ext_gnu_array_range, diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_hex_constant_invalid, diag::ext_hex_literal_invalid, diag::ext_ident_list_in_param, diag::ext_integer_complement_complex, diag::ext_integer_increment_complex, diag::ext_internal_in_extern_inline_quiet, diag::ext_invalid_sign_spec, diag::ext_line_comment, diag::ext_main_used, diag::ext_multi_line_line_comment, diag::ext_named_variadic_macro, diag::ext_no_newline_eof, diag::ext_nonstandard_escape, diag::ext_ns_enum_attribute, diag::ext_param_not_declared, diag::ext_pointer_to_const_ref_member_on_rvalue, diag::ext_pp_bad_vaargs_use, diag::ext_pp_comma_expr, diag::ext_pp_ident_directive, diag::ext_pp_line_too_big, diag::ext_pp_warning_directive, diag::ext_return_has_void_expr, diag::ext_rvalue_to_reference_access_ctor, diag::ext_rvalue_to_reference_temp_copy_no_viable, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::ext_subscript_non_lvalue, diag::ext_thread_before, diag::ext_typecheck_addrof_void, diag::ext_typecheck_cast_nonscalar, diag::ext_typecheck_comparison_of_fptr_to_void, diag::ext_typecheck_cond_one_void, diag::ext_typecheck_convert_pointer_void_func, diag::ext_typecheck_ordered_comparison_of_pointer_and_zero, diag::ext_variadic_macro, diag::warn_defined_in_function_type_macro, diag::warn_format_conversion_argument_type_mismatch_pedantic, diag::warn_illegal_constant_array_size, diag::warn_kern_is_method, -1,
+  /* DiagArray511 */ diag::warn_pragma_extension_is_core, -1,
+  /* DiagArray512 */ diag::warn_pessimizing_move_on_initialization, diag::warn_pessimizing_move_on_return, -1,
+  /* DiagArray513 */ diag::ext_gnu_ptr_func_arith, diag::ext_gnu_subscript_void_type, diag::ext_gnu_void_ptr, diag::ext_sizeof_alignof_function_type, diag::ext_sizeof_alignof_void_type, diag::warn_sub_ptr_zero_size_types, -1,
+  /* DiagArray514 */ diag::warn_cast_nonnull_to_bool, diag::warn_impcast_pointer_to_bool, -1,
+  /* DiagArray515 */ diag::ext_typecheck_convert_incompatible_pointer_sign, -1,
+  /* DiagArray517 */ diag::ext_typecheck_cond_incompatible_pointers, -1,
+  /* DiagArray518 */ diag::warn_side_effects_typeid, -1,
+  /* DiagArray519 */ diag::warn_pragma_attribute_unused, -1,
+  /* DiagArray520 */ diag::pp_pragma_once_in_main_file, -1,
+  /* DiagArray521 */ diag::warn_pragma_pack_modified_after_include, diag::warn_pragma_pack_no_pop_eof, -1,
+  /* DiagArray522 */ diag::warn_pragma_pack_non_default_at_include, -1,
+  /* DiagArray523 */ diag::pp_pragma_sysheader_in_main_file, -1,
+  /* DiagArray524 */ diag::warn_redefine_extname_not_applied, -1,
+  /* DiagArray525 */ diag::ext_predef_outside_function, -1,
+  /* DiagArray526 */ diag::warn_private_extern, -1,
+  /* DiagArray527 */ diag::warn_use_of_private_header_outside_module, -1,
+  /* DiagArray528 */ diag::warn_mmap_mismatched_private_module_name, diag::warn_mmap_mismatched_private_submodule, diag::warn_mmap_redundant_export_as, diag::warn_no_priv_submodule_use_toplevel, -1,
+  /* DiagArray529 */ diag::warn_profile_data_missing, -1,
+  /* DiagArray530 */ diag::warn_profile_data_out_of_date, -1,
+  /* DiagArray531 */ diag::warn_profile_data_unprofiled, -1,
+  /* DiagArray532 */ diag::warn_property_access_suggest, -1,
+  /* DiagArray533 */ diag::warn_property_attr_mismatch, diag::warn_property_attribute, diag::warn_property_redecl_getter_mismatch, diag::warn_readonly_property, -1,
+  /* DiagArray534 */ diag::warn_unimplemented_protocol_method, -1,
+  /* DiagArray535 */ diag::warn_protocol_property_mismatch, -1,
+  /* DiagArray536 */ diag::err_func_returning_qualified_void, -1,
+  /* DiagArray537 */ diag::warn_quoted_include_in_framework_header, -1,
+  /* DiagArray538 */ diag::warn_for_range_const_reference_copy, diag::warn_for_range_copy, diag::warn_for_range_variable_always_copy, -1,
+  /* DiagArray539 */ diag::warn_auto_readonly_iboutlet_property, -1,
+  /* DiagArray540 */ diag::warn_bad_receiver_type, -1,
+  /* DiagArray541 */ diag::warn_receiver_forward_class, diag::warn_receiver_forward_instance, -1,
+  /* DiagArray542 */ diag::ext_member_redeclared, -1,
+  /* DiagArray544 */ diag::warn_redundant_move_on_return, -1,
+  /* DiagArray545 */ diag::warn_redundant_parens_around_declarator, -1,
+  /* DiagArray546 */ diag::ext_register_storage_class, -1,
+  /* DiagArray547 */ diag::warn_reinterpret_different_from_static, -1,
+  /* DiagArray548 */ diag::remark_fe_backend_plugin, -1,
+  /* DiagArray549 */ diag::warn_initializer_out_of_order, -1,
+  /* DiagArray550 */ diag::warn_objc_requires_super_protocol, -1,
+  /* DiagArray551 */ diag::warn_pp_macro_is_reserved_id, -1,
+  /* DiagArray552 */ diag::ext_ms_reserved_user_defined_literal, diag::ext_reserved_user_defined_literal, -1,
+  /* DiagArray553 */ diag::ext_retained_language_linkage, -1,
+  /* DiagArray554 */ diag::warn_ret_addr_label, diag::warn_ret_local_temp_addr_ref, diag::warn_ret_stack_addr_ref, -1,
+  /* DiagArray555 */ diag::warn_return_std_move, -1,
+  /* DiagArray556 */ diag::warn_return_std_move_in_cxx11, -1,
+  /* DiagArray557 */ diag::ext_return_has_expr, diag::ext_return_missing_expr, diag::warn_falloff_nonvoid_coroutine, diag::warn_falloff_nonvoid_function, diag::warn_falloff_nonvoid_lambda, diag::warn_maybe_falloff_nonvoid_coroutine, diag::warn_maybe_falloff_nonvoid_function, diag::warn_maybe_falloff_nonvoid_lambda, diag::warn_return_missing_expr, -1,
+  /* DiagArray558 */ diag::warn_return_value_udt, diag::warn_return_value_udt_incomplete, -1,
+  /* DiagArray559 */ diag::remark_sanitize_address_insert_extra_padding_accepted, diag::remark_sanitize_address_insert_extra_padding_rejected, -1,
+  /* DiagArray560 */ diag::warn_attribute_section_on_redeclaration, diag::warn_duplicate_codeseg_attribute, diag::warn_mismatched_section, -1,
+  /* DiagArray561 */ diag::warn_unimplemented_selector, -1,
+  /* DiagArray562 */ diag::warn_multiple_selectors, -1,
+  /* DiagArray563 */ diag::warn_self_assignment_builtin, -1,
+  /* DiagArray564 */ diag::warn_identity_field_assign, -1,
+  /* DiagArray565 */ diag::warn_self_assignment_overloaded, -1,
+  /* DiagArray566 */ diag::warn_self_move, -1,
+  /* DiagArray567 */ diag::warn_semicolon_before_method_body, -1,
+  /* DiagArray568 */ diag::warn_missing_sentinel, diag::warn_not_enough_argument, -1,
+  /* DiagArray570 */ diag::warn_fe_serialized_diag_failure, diag::warn_fe_serialized_diag_merge_failure, -1,
+  /* DiagArray571 */ diag::warn_decl_shadow, -1,
+  /* DiagArray573 */ diag::warn_shadow_field, -1,
+  /* DiagArray574 */ diag::warn_ctor_parm_shadows_field, -1,
+  /* DiagArray575 */ diag::warn_modifying_shadowing_decl, -1,
+  /* DiagArray576 */ diag::warn_ivar_use_hidden, -1,
+  /* DiagArray577 */ diag::warn_decl_shadow_uncaptured_local, -1,
+  /* DiagArray578 */ diag::warn_shift_negative, -1,
+  /* DiagArray579 */ diag::warn_shift_gt_typewidth, -1,
+  /* DiagArray580 */ diag::warn_shift_lhs_negative, -1,
+  /* DiagArray581 */ diag::warn_addition_in_bitshift, -1,
+  /* DiagArray582 */ diag::warn_shift_result_gt_typewidth, -1,
+  /* DiagArray583 */ diag::warn_shift_result_sets_sign_bit, -1,
+  /* DiagArray584 */ diag::warn_impcast_integer_64_32, -1,
+  /* DiagArray585 */ diag::warn_mixed_sign_comparison, -1,
+  /* DiagArray586 */ diag::warn_impcast_integer_sign, diag::warn_impcast_integer_sign_conditional, -1,
+  /* DiagArray588 */ diag::warn_no_underlying_type_specified_for_enum_bitfield, -1,
+  /* DiagArray589 */ diag::warn_sizeof_array_param, -1,
+  /* DiagArray590 */ diag::warn_sizeof_array_decay, -1,
+  /* DiagArray591 */ diag::warn_sizeof_pointer_expr_memaccess, diag::warn_sizeof_pointer_type_memaccess, -1,
+  /* DiagArray592 */ diag::warn_slash_u_filename, -1,
+  /* DiagArray593 */ diag::warn_sometimes_uninit_var, -1,
+  /* DiagArray594 */ diag::warn_omp_nesting_simd, diag::warn_pragma_omp_ignored, -1,
+  /* DiagArray595 */ diag::warn_sampler_initializer_invalid_bits, -1,
+  /* DiagArray597 */ diag::ext_in_class_initializer_float_type_cxx11, -1,
+  /* DiagArray598 */ diag::ext_internal_in_extern_inline, diag::ext_internal_in_extern_inline_quiet, -1,
+  /* DiagArray599 */ diag::warn_static_inline_explicit_inst_ignored, -1,
+  /* DiagArray600 */ diag::warn_static_local_in_extern_inline, -1,
+  /* DiagArray601 */ diag::warn_static_self_reference_in_init, -1,
+  /* DiagArray602 */ diag::warn_stdlibcxx_not_found, -1,
+  /* DiagArray614 */ diag::warn_strict_prototypes, -1,
+  /* DiagArray615 */ diag::warn_strict_multiple_method_decl, -1,
+  /* DiagArray616 */ diag::warn_stringcompare, -1,
+  /* DiagArray617 */ diag::warn_impcast_string_literal_to_bool, -1,
+  /* DiagArray618 */ diag::warn_string_plus_char, -1,
+  /* DiagArray619 */ diag::warn_string_plus_int, -1,
+  /* DiagArray620 */ diag::warn_strlcpycat_wrong_size, -1,
+  /* DiagArray621 */ diag::warn_strncat_large_size, diag::warn_strncat_src_size, diag::warn_strncat_wrong_size, -1,
+  /* DiagArray622 */ diag::ext_typecheck_base_super, -1,
+  /* DiagArray623 */ diag::warn_suspicious_bzero_size, -1,
+  /* DiagArray625 */ diag::warn_case_value_overflow, diag::warn_missing_case, diag::warn_not_in_enum, -1,
+  /* DiagArray626 */ diag::warn_bool_switch_condition, -1,
+  /* DiagArray628 */ diag::warn_def_missing_case, -1,
+  /* DiagArray629 */ diag::warn_sync_fetch_and_nand_semantics_change, -1,
+  /* DiagArray631 */ diag::warn_comparison_always, diag::warn_comparison_bitwise_always, -1,
+  /* DiagArray632 */ diag::warn_tautological_bool_compare, -1,
+  /* DiagArray634 */ diag::warn_out_of_range_compare, -1,
+  /* DiagArray635 */ diag::warn_tautological_overlap_comparison, -1,
+  /* DiagArray636 */ diag::warn_nonnull_expr_compare, diag::warn_null_pointer_compare, -1,
+  /* DiagArray637 */ diag::warn_tautological_constant_compare, -1,
+  /* DiagArray638 */ diag::warn_address_of_reference_null_compare, diag::warn_this_null_compare, -1,
+  /* DiagArray639 */ diag::warn_unsigned_enum_always_true_comparison, -1,
+  /* DiagArray640 */ diag::warn_unsigned_always_true_comparison, -1,
+  /* DiagArray641 */ diag::ext_typecheck_decl_incomplete_type, -1,
+  /* DiagArray643 */ diag::warn_acquired_before, diag::warn_acquired_before_after_cycle, diag::warn_cannot_resolve_lock, diag::warn_double_lock, diag::warn_expecting_lock_held_on_loop, diag::warn_expecting_locked, diag::warn_fun_excludes_mutex, diag::warn_fun_requires_lock, diag::warn_lock_exclusive_and_shared, diag::warn_lock_some_predecessors, diag::warn_no_unlock, diag::warn_unlock_but_no_lock, diag::warn_unlock_kind_mismatch, diag::warn_var_deref_requires_any_lock, diag::warn_var_deref_requires_lock, diag::warn_variable_requires_any_lock, diag::warn_variable_requires_lock, -1,
+  /* DiagArray644 */ diag::warn_invalid_capability_name, diag::warn_thread_attribute_argument_not_lockable, diag::warn_thread_attribute_decl_not_lockable, diag::warn_thread_attribute_decl_not_pointer, diag::warn_thread_attribute_ignored, -1,
+  /* DiagArray645 */ diag::warn_thread_safety_beta, -1,
+  /* DiagArray646 */ diag::warn_acquire_requires_negative_cap, -1,
+  /* DiagArray647 */ diag::warn_fun_requires_lock_precise, diag::warn_var_deref_requires_lock_precise, diag::warn_variable_requires_lock_precise, -1,
+  /* DiagArray648 */ diag::warn_guarded_pass_by_reference, diag::warn_pt_guarded_pass_by_reference, -1,
+  /* DiagArray649 */ diag::warn_thread_safety_verbose, -1,
+  /* DiagArray650 */ diag::trigraph_converted, diag::trigraph_ends_block_comment, diag::trigraph_ignored, diag::trigraph_ignored_block_comment, -1,
+  /* DiagArray652 */ diag::warn_type_safety_null_pointer_required, diag::warn_type_safety_type_mismatch, diag::warn_type_tag_for_datatype_wrong_kind, -1,
+  /* DiagArray653 */ diag::ext_redefinition_of_typedef, -1,
+  /* DiagArray654 */ diag::ext_typename_missing, -1,
+  /* DiagArray655 */ diag::warn_fe_unable_to_open_stats_file, -1,
+  /* DiagArray656 */ diag::warn_unavailable_fwdclass_message, -1,
+  /* DiagArray657 */ diag::warn_undeclared_selector, diag::warn_undeclared_selector_with_typo, -1,
+  /* DiagArray658 */ diag::warn_pp_undef_identifier, -1,
+  /* DiagArray659 */ diag::warn_address_of_reference_bool_conversion, diag::warn_this_bool_conversion, -1,
+  /* DiagArray660 */ diag::warn_func_template_missing, -1,
+  /* DiagArray661 */ diag::warn_undefined_inline, -1,
+  /* DiagArray662 */ diag::warn_undefined_internal, -1,
+  /* DiagArray663 */ diag::ext_undefined_internal_type, -1,
+  /* DiagArray664 */ diag::warn_pointer_indirection_from_incompatible_type, diag::warn_undefined_reinterpret_cast, -1,
+  /* DiagArray665 */ diag::warn_var_template_missing, -1,
+  /* DiagArray666 */ diag::warn_side_effects_unevaluated_context, -1,
+  /* DiagArray667 */ diag::warn_unguarded_availability, -1,
+  /* DiagArray668 */ diag::warn_unguarded_availability_new, -1,
+  /* DiagArray669 */ diag::warn_ucn_escape_incomplete, diag::warn_ucn_escape_no_digits, diag::warn_ucn_escape_surrogate, diag::warn_ucn_not_valid_in_c89, diag::warn_ucn_not_valid_in_c89_literal, -1,
+  /* DiagArray670 */ diag::warn_utf8_symbol_homoglyph, -1,
+  /* DiagArray671 */ diag::ext_unicode_whitespace, -1,
+  /* DiagArray672 */ diag::warn_base_class_is_uninit, diag::warn_field_is_uninit, diag::warn_reference_field_is_uninit, diag::warn_uninit_byref_blockvar_captured_by_block, diag::warn_uninit_self_reference_in_init, diag::warn_uninit_self_reference_in_reference_init, diag::warn_uninit_var, -1,
+  /* DiagArray673 */ diag::warn_drv_unknown_argument_clang_cl, diag::warn_drv_unknown_argument_clang_cl_with_suggestion, -1,
+  /* DiagArray674 */ diag::warn_unknown_attribute_ignored, -1,
+  /* DiagArray675 */ diag::ext_unknown_escape, -1,
+  /* DiagArray676 */ diag::ext_on_off_switch_syntax, diag::ext_pragma_syntax_eod, diag::ext_stdc_pragma_ignored, diag::warn_pragma_diagnostic_cannot_pop, diag::warn_pragma_diagnostic_invalid, diag::warn_pragma_diagnostic_invalid_option, diag::warn_pragma_diagnostic_invalid_token, diag::warn_pragma_ignored, diag::warn_pragma_include_alias_expected, diag::warn_pragma_include_alias_expected_filename, diag::warn_pragma_include_alias_mismatch_angle, diag::warn_pragma_include_alias_mismatch_quote, diag::warn_pragma_warning_expected, diag::warn_pragma_warning_expected_number, diag::warn_pragma_warning_push_level, diag::warn_pragma_warning_spec_invalid, diag::warn_stdc_fenv_access_not_supported, -1,
+  /* DiagArray677 */ diag::warn_unknown_sanitizer_ignored, -1,
+  /* DiagArray678 */ diag::warn_pragma_diagnostic_unknown_warning, diag::warn_unknown_diag_option, diag::warn_unknown_warning_specifier, -1,
+  /* DiagArray679 */ diag::ext_template_arg_unnamed_type, -1,
+  /* DiagArray680 */ diag::warn_unneeded_internal_decl, diag::warn_unneeded_static_internal_decl, -1,
+  /* DiagArray681 */ diag::warn_unneeded_member_function, -1,
+  /* DiagArray682 */ diag::warn_unreachable, -1,
+  /* DiagArray684 */ diag::warn_unreachable_break, -1,
+  /* DiagArray685 */ diag::warn_unreachable_loop_increment, -1,
+  /* DiagArray686 */ diag::warn_unreachable_return, -1,
+  /* DiagArray687 */ diag::warn_unsequenced_mod_mod, diag::warn_unsequenced_mod_use, -1,
+  /* DiagArray688 */ diag::warn_target_unsupported_abs2008, diag::warn_target_unsupported_abslegacy, -1,
+  /* DiagArray689 */ diag::warn_at_available_unchecked_use, -1,
+  /* DiagArray690 */ diag::warn_target_unsupported_compact_branches, -1,
+  /* DiagArray691 */ diag::warn_attribute_dll_instantiated_base_class, -1,
+  /* DiagArray692 */ diag::warn_template_qualified_friend_ignored, diag::warn_template_qualified_friend_unsupported, -1,
+  /* DiagArray693 */ diag::warn_drv_unsupported_gpopt, -1,
+  /* DiagArray694 */ diag::warn_target_unsupported_nan2008, diag::warn_target_unsupported_nanlegacy, -1,
+  /* DiagArray695 */ diag::warn_drv_unsupported_debug_info_opt_for_target, -1,
+  /* DiagArray696 */ diag::warn_attribute_protected_visibility, -1,
+  /* DiagArray697 */ diag::ext_partial_specs_not_deducible, -1,
+  /* DiagArray700 */ diag::warn_drv_diagnostics_hotness_requires_pgo, diag::warn_drv_empty_joined_argument, diag::warn_drv_input_file_unused, diag::warn_drv_input_file_unused_by_cpp, diag::warn_drv_preprocessed_input_file_unused, diag::warn_drv_unused_argument, diag::warn_ignored_clang_option, -1,
+  /* DiagArray701 */ diag::warn_unused_comparison, -1,
+  /* DiagArray702 */ diag::warn_unused_const_variable, -1,
+  /* DiagArray703 */ diag::warn_unused_exception_param, -1,
+  /* DiagArray704 */ diag::warn_unused_function, -1,
+  /* DiagArray705 */ diag::warn_unused_property_expr, -1,
+  /* DiagArray706 */ diag::warn_unused_label, -1,
+  /* DiagArray707 */ diag::warn_unused_lambda_capture, -1,
+  /* DiagArray708 */ diag::warn_unused_local_typedef, -1,
+  /* DiagArray710 */ diag::pp_macro_not_used, -1,
+  /* DiagArray711 */ diag::warn_unused_member_function, -1,
+  /* DiagArray712 */ diag::warn_unused_parameter, -1,
+  /* DiagArray713 */ diag::warn_unused_private_field, -1,
+  /* DiagArray714 */ diag::warn_unused_property_backing_ivar, -1,
+  /* DiagArray715 */ diag::warn_unused_result, -1,
+  /* DiagArray716 */ diag::warn_unused_template, -1,
+  /* DiagArray717 */ diag::warn_unused_call, diag::warn_unused_container_subscript_expr, diag::warn_unused_expr, diag::warn_unused_voidptr, -1,
+  /* DiagArray718 */ diag::warn_unused_variable, -1,
+  /* DiagArray719 */ diag::warn_unused_volatile, -1,
+  /* DiagArray720 */ diag::warn_used_but_marked_unused, -1,
+  /* DiagArray721 */ diag::warn_user_literal_reserved, -1,
+  /* DiagArray722 */ diag::warn_diagnose_if_succeeded, -1,
+  /* DiagArray723 */ diag::warn_second_arg_of_va_start_not_last_named_param, diag::warn_second_parameter_to_va_arg_never_compatible, diag::warn_va_start_type_is_undefined, -1,
+  /* DiagArray724 */ diag::ext_named_variadic_macro, diag::ext_pp_bad_vaopt_use, diag::ext_variadic_macro, -1,
+  /* DiagArray725 */ diag::warn_typecheck_vector_element_sizes_not_equal, -1,
+  /* DiagArray726 */ diag::warn_incompatible_vectors, -1,
+  /* DiagArray728 */ diag::warn_empty_parens_are_function_decl, diag::warn_parens_disambiguated_as_function_declaration, diag::warn_parens_disambiguated_as_variable_declaration, -1,
+  /* DiagArray729 */ diag::warn_decl_in_param_list, diag::warn_redefinition_in_param_list, -1,
+  /* DiagArray730 */ diag::warn_vla_used, -1,
+  /* DiagArray731 */ diag::ext_vla, -1,
+  /* DiagArray732 */ diag::ext_typecheck_indirection_through_void_pointer, -1,
+  /* DiagArray734 */ diag::warn_weak_template_vtable, -1,
+  /* DiagArray735 */ diag::warn_weak_vtable, -1,
+  /* DiagArray736 */ diag::ext_deprecated_string_literal_conversion, -1,
+  /* DiagArray738 */ diag::warn_zero_as_null_pointer_constant, -1,
+  /* DiagArray739 */ diag::ext_typecheck_zero_array_size, -1,
 };
 
 static const int16_t DiagSubGroups[] = {
   /* Empty */ -1,
-  /* DiagSubGroup0 */ 207, -1,
-  /* DiagSubGroup4 */ 17, 207, -1,
-  /* DiagSubGroup11 */ 504, 602, 620, -1,
-  /* DiagSubGroup17 */ 403, 492, 609, 610, -1,
-  /* DiagSubGroup25 */ 32, 31, 28, -1,
-  /* DiagSubGroup30 */ 27, -1,
-  /* DiagSubGroup35 */ 37, 36, -1,
-  /* DiagSubGroup42 */ 272, 142, -1,
-  /* DiagSubGroup45 */ 658, 265, -1,
-  /* DiagSubGroup54 */ 82, 102, 240, -1,
-  /* DiagSubGroup55 */ 105, -1,
-  /* DiagSubGroup62 */ 504, 643, -1,
-  /* DiagSubGroup63 */ 62, -1,
-  /* DiagSubGroup70 */ 73, -1,
-  /* DiagSubGroup71 */ 77, -1,
-  /* DiagSubGroup72 */ 81, -1,
-  /* DiagSubGroup73 */ 81, 76, 74, 101, 99, 97, -1,
-  /* DiagSubGroup75 */ 73, 103, 100, 98, -1,
-  /* DiagSubGroup77 */ 78, 79, 80, -1,
-  /* DiagSubGroup83 */ 99, 97, -1,
-  /* DiagSubGroup84 */ 83, 100, 98, -1,
-  /* DiagSubGroup85 */ 82, -1,
-  /* DiagSubGroup86 */ 162, 158, 87, 97, -1,
-  /* DiagSubGroup88 */ 86, 98, -1,
-  /* DiagSubGroup90 */ 85, -1,
+  /* DiagSubGroup0 */ 211, -1,
+  /* DiagSubGroup4 */ 15, 211, -1,
+  /* DiagSubGroup11 */ 514, 616, 636, -1,
+  /* DiagSubGroup15 */ 411, 502, 625, 626, -1,
+  /* DiagSubGroup23 */ 30, 29, 26, -1,
+  /* DiagSubGroup28 */ 25, -1,
+  /* DiagSubGroup34 */ 36, 35, -1,
+  /* DiagSubGroup43 */ 278, 144, -1,
+  /* DiagSubGroup46 */ 674, 271, -1,
+  /* DiagSubGroup55 */ 83, 103, 246, -1,
+  /* DiagSubGroup56 */ 106, -1,
+  /* DiagSubGroup63 */ 514, 659, -1,
+  /* DiagSubGroup64 */ 63, -1,
+  /* DiagSubGroup71 */ 74, -1,
+  /* DiagSubGroup72 */ 78, -1,
+  /* DiagSubGroup73 */ 82, -1,
+  /* DiagSubGroup74 */ 82, 77, 75, 102, 100, 98, -1,
+  /* DiagSubGroup76 */ 74, 104, 101, 99, -1,
+  /* DiagSubGroup78 */ 79, 80, 81, -1,
+  /* DiagSubGroup84 */ 100, 98, -1,
+  /* DiagSubGroup85 */ 84, 101, 99, -1,
+  /* DiagSubGroup86 */ 83, -1,
+  /* DiagSubGroup87 */ 165, 161, 88, 98, -1,
+  /* DiagSubGroup89 */ 87, 99, -1,
   /* DiagSubGroup91 */ 86, -1,
   /* DiagSubGroup92 */ 87, -1,
-  /* DiagSubGroup93 */ 89, -1,
-  /* DiagSubGroup95 */ 94, -1,
-  /* DiagSubGroup98 */ 97, -1,
-  /* DiagSubGroup100 */ 99, -1,
-  /* DiagSubGroup103 */ 101, 102, -1,
-  /* DiagSubGroup104 */ 107, 109, 101, 99, 97, -1,
-  /* DiagSubGroup108 */ 104, 105, 106, 103, 100, 98, -1,
-  /* DiagSubGroup120 */ 419, -1,
-  /* DiagSubGroup123 */ 122, -1,
-  /* DiagSubGroup129 */ 57, -1,
-  /* DiagSubGroup133 */ 62, 129, 197, 58, 214, 571, 309, 334, 416, 430, 448, 573, 603, -1,
-  /* DiagSubGroup134 */ 430, -1,
-  /* DiagSubGroup135 */ 136, -1,
-  /* DiagSubGroup138 */ 2, -1,
-  /* DiagSubGroup153 */ 154, 155, 156, 158, 162, 163, -1,
-  /* DiagSubGroup160 */ 161, -1,
-  /* DiagSubGroup163 */ 74, -1,
-  /* DiagSubGroup169 */ 170, -1,
-  /* DiagSubGroup174 */ 176, 175, -1,
-  /* DiagSubGroup177 */ 178, -1,
-  /* DiagSubGroup187 */ 156, -1,
-  /* DiagSubGroup188 */ 420, -1,
-  /* DiagSubGroup194 */ 210, -1,
-  /* DiagSubGroup195 */ 196, -1,
-  /* DiagSubGroup207 */ 385, 270, 303, 554, 388, 572, 695, 432, -1,
-  /* DiagSubGroup209 */ 106, 78, -1,
-  /* DiagSubGroup214 */ 216, 217, -1,
-  /* DiagSubGroup219 */ 220, 227, 421, 225, 226, 221, -1,
-  /* DiagSubGroup228 */ 223, 225, 226, -1,
-  /* DiagSubGroup235 */ 236, 237, 239, 240, 241, 242, 243, 244, 245, 246, 247, 714, 248, 249, 250, 251, 252, 253, 531, 254, 255, 256, 257, 258, 259, 722, 260, 261, -1,
-  /* DiagSubGroup269 */ 267, 268, -1,
-  /* DiagSubGroup271 */ 277, 278, -1,
-  /* DiagSubGroup275 */ 276, -1,
-  /* DiagSubGroup290 */ 291, 287, -1,
-  /* DiagSubGroup295 */ 296, 418, -1,
-  /* DiagSubGroup300 */ 158, -1,
-  /* DiagSubGroup310 */ 309, -1,
-  /* DiagSubGroup311 */ 312, -1,
-  /* DiagSubGroup314 */ 266, -1,
-  /* DiagSubGroup336 */ 107, -1,
-  /* DiagSubGroup339 */ 80, -1,
-  /* DiagSubGroup340 */ 218, 527, -1,
-  /* DiagSubGroup349 */ 352, 368, 355, 364, 372, 375, 360, 376, 369, 370, 374, 362, 359, 356, 373, 371, 358, 366, 365, 363, 351, 354, 377, 350, 353, 357, 297, -1,
-  /* DiagSubGroup403 */ 118, 122, 152, 218, 219, 271, 301, 381, 382, 404, 407, 538, 544, 551, 553, 576, 577, 605, 634, 656, 660, 681, 716, 453, 443, 444, 486, 516, 115, 205, 705, -1,
-  /* DiagSubGroup404 */ 502, 533, 553, -1,
-  /* DiagSubGroup405 */ 368, -1,
-  /* DiagSubGroup409 */ 81, -1,
-  /* DiagSubGroup414 */ 87, -1,
-  /* DiagSubGroup415 */ 572, 133, 335, -1,
-  /* DiagSubGroup418 */ 417, -1,
-  /* DiagSubGroup434 */ 435, -1,
-  /* DiagSubGroup442 */ 466, -1,
-  /* DiagSubGroup447 */ 469, -1,
-  /* DiagSubGroup466 */ 467, -1,
-  /* DiagSubGroup492 */ 338, 337, 60, 568, 485, 493, 143, -1,
-  /* DiagSubGroup494 */ 651, -1,
-  /* DiagSubGroup500 */ 110, 78, 80, 82, 213, 224, 229, 237, 239, 240, 241, 242, 243, 244, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 258, 260, 261, 329, 339, 352, 353, 355, 357, 359, 364, 365, 371, 484, 714, 722, 647, 542, 125, 410, 149, 179, 331, 282, 189, 192, 437, -1,
-  /* DiagSubGroup511 */ 512, -1,
-  /* DiagSubGroup514 */ 660, 269, 509, 511, -1,
-  /* DiagSubGroup535 */ 162, -1,
-  /* DiagSubGroup541 */ 76, -1,
-  /* DiagSubGroup544 */ 545, -1,
-  /* DiagSubGroup549 */ 550, -1,
-  /* DiagSubGroup551 */ 552, -1,
-  /* DiagSubGroup556 */ 671, -1,
-  /* DiagSubGroup558 */ 562, 563, -1,
-  /* DiagSubGroup559 */ 558, 561, 564, 560, -1,
+  /* DiagSubGroup93 */ 88, -1,
+  /* DiagSubGroup94 */ 90, -1,
+  /* DiagSubGroup96 */ 95, -1,
+  /* DiagSubGroup99 */ 98, -1,
+  /* DiagSubGroup101 */ 100, -1,
+  /* DiagSubGroup104 */ 102, 103, -1,
+  /* DiagSubGroup105 */ 108, 110, 102, 100, 98, -1,
+  /* DiagSubGroup109 */ 105, 106, 107, 104, 101, 99, -1,
+  /* DiagSubGroup122 */ 427, -1,
+  /* DiagSubGroup125 */ 124, -1,
+  /* DiagSubGroup131 */ 58, -1,
+  /* DiagSubGroup135 */ 63, 131, 201, 59, 218, 584, 316, 341, 424, 439, 457, 586, 617, -1,
+  /* DiagSubGroup136 */ 439, -1,
+  /* DiagSubGroup137 */ 138, -1,
+  /* DiagSubGroup140 */ 2, -1,
+  /* DiagSubGroup145 */ 147, 148, 554, -1,
+  /* DiagSubGroup156 */ 157, 158, 159, 161, 165, 166, 167, -1,
+  /* DiagSubGroup163 */ 164, -1,
+  /* DiagSubGroup167 */ 75, -1,
+  /* DiagSubGroup173 */ 174, -1,
+  /* DiagSubGroup178 */ 180, 179, -1,
+  /* DiagSubGroup181 */ 182, -1,
+  /* DiagSubGroup191 */ 159, -1,
+  /* DiagSubGroup192 */ 428, -1,
+  /* DiagSubGroup198 */ 214, -1,
+  /* DiagSubGroup199 */ 200, -1,
+  /* DiagSubGroup211 */ 393, 276, 310, 567, 396, 585, 712, 441, -1,
+  /* DiagSubGroup213 */ 107, 79, -1,
+  /* DiagSubGroup218 */ 220, 221, -1,
+  /* DiagSubGroup223 */ 224, 231, 429, 229, 230, 225, -1,
+  /* DiagSubGroup232 */ 227, 229, 230, -1,
+  /* DiagSubGroup241 */ 242, 243, 245, 246, 247, 248, 249, 250, 251, 252, 253, 731, 254, 255, 256, 257, 258, 259, 542, 260, 261, 262, 263, 264, 265, 739, 266, 267, -1,
+  /* DiagSubGroup275 */ 273, 274, -1,
+  /* DiagSubGroup277 */ 283, 284, -1,
+  /* DiagSubGroup281 */ 282, -1,
+  /* DiagSubGroup296 */ 297, 293, -1,
+  /* DiagSubGroup302 */ 303, 426, -1,
+  /* DiagSubGroup307 */ 161, -1,
+  /* DiagSubGroup317 */ 316, -1,
+  /* DiagSubGroup318 */ 319, -1,
+  /* DiagSubGroup321 */ 272, -1,
+  /* DiagSubGroup343 */ 108, -1,
+  /* DiagSubGroup346 */ 81, -1,
+  /* DiagSubGroup347 */ 222, 538, -1,
+  /* DiagSubGroup357 */ 360, 376, 363, 372, 380, 383, 368, 384, 377, 378, 382, 370, 367, 364, 381, 379, 366, 374, 373, 371, 359, 362, 385, 358, 361, 365, 304, -1,
+  /* DiagSubGroup411 */ 120, 124, 155, 222, 223, 277, 308, 389, 390, 412, 415, 549, 557, 563, 566, 589, 590, 619, 650, 672, 676, 698, 733, 462, 452, 453, 496, 526, 116, 209, 722, -1,
+  /* DiagSubGroup412 */ 512, 544, 555, 566, -1,
+  /* DiagSubGroup413 */ 376, -1,
+  /* DiagSubGroup417 */ 82, -1,
+  /* DiagSubGroup422 */ 88, -1,
+  /* DiagSubGroup423 */ 585, 135, 342, -1,
+  /* DiagSubGroup426 */ 425, -1,
+  /* DiagSubGroup443 */ 444, -1,
+  /* DiagSubGroup451 */ 475, -1,
+  /* DiagSubGroup456 */ 478, -1,
+  /* DiagSubGroup475 */ 476, -1,
+  /* DiagSubGroup502 */ 345, 344, 61, 581, 495, 503, 146, -1,
+  /* DiagSubGroup504 */ 667, -1,
+  /* DiagSubGroup510 */ 111, 79, 81, 83, 217, 233, 243, 245, 246, 247, 248, 249, 250, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 264, 266, 267, 336, 346, 360, 361, 363, 365, 367, 372, 373, 379, 494, 731, 739, 663, 553, 127, 418, 152, 183, 338, 288, 193, 196, 446, -1,
+  /* DiagSubGroup521 */ 522, -1,
+  /* DiagSubGroup524 */ 676, 275, 519, 521, -1,
+  /* DiagSubGroup546 */ 165, -1,
+  /* DiagSubGroup552 */ 77, -1,
+  /* DiagSubGroup557 */ 558, -1,
   /* DiagSubGroup561 */ 562, -1,
-  /* DiagSubGroup584 */ 256, -1,
-  /* DiagSubGroup615 */ 616, 620, 619, 622, -1,
-  /* DiagSubGroup616 */ 618, -1,
-  /* DiagSubGroup617 */ 621, 624, 623, -1,
-  /* DiagSubGroup626 */ 628, 627, 631, 632, -1,
-  /* DiagSubGroup650 */ 508, -1,
-  /* DiagSubGroup651 */ 652, -1,
-  /* DiagSubGroup656 */ 580, 588, -1,
-  /* DiagSubGroup663 */ 109, -1,
-  /* DiagSubGroup666 */ 669, -1,
-  /* DiagSubGroup667 */ 666, 668, 670, -1,
-  /* DiagSubGroup681 */ 682, 687, 689, 696, 690, 691, 700, 701, 697, -1,
-  /* DiagSubGroup687 */ 664, -1,
-  /* DiagSubGroup692 */ 691, -1,
-  /* DiagSubGroup694 */ 665, -1,
-  /* DiagSubGroup699 */ 664, -1,
-  /* DiagSubGroup700 */ 684, 698, 650, -1,
-  /* DiagSubGroup701 */ 685, -1,
-  /* DiagSubGroup710 */ 709, -1,
-  /* DiagSubGroup719 */ 163, -1,
-  /* DiagSubGroup720 */ 719, -1,
+  /* DiagSubGroup563 */ 565, 564, -1,
+  /* DiagSubGroup569 */ 687, -1,
+  /* DiagSubGroup571 */ 575, 576, -1,
+  /* DiagSubGroup572 */ 571, 574, 577, 573, -1,
+  /* DiagSubGroup574 */ 575, -1,
+  /* DiagSubGroup597 */ 262, -1,
+  /* DiagSubGroup624 */ 591, 190, 434, 354, 623, -1,
+  /* DiagSubGroup631 */ 632, 636, 635, 638, -1,
+  /* DiagSubGroup632 */ 634, -1,
+  /* DiagSubGroup633 */ 637, 640, 639, -1,
+  /* DiagSubGroup642 */ 644, 643, 647, 648, -1,
+  /* DiagSubGroup666 */ 518, -1,
+  /* DiagSubGroup667 */ 668, -1,
+  /* DiagSubGroup672 */ 593, 601, -1,
+  /* DiagSubGroup679 */ 110, -1,
+  /* DiagSubGroup682 */ 685, -1,
+  /* DiagSubGroup683 */ 682, 684, 686, -1,
+  /* DiagSubGroup698 */ 699, 704, 706, 713, 707, 708, 717, 718, 714, -1,
+  /* DiagSubGroup704 */ 680, -1,
+  /* DiagSubGroup709 */ 708, -1,
+  /* DiagSubGroup711 */ 681, -1,
+  /* DiagSubGroup716 */ 680, -1,
+  /* DiagSubGroup717 */ 701, 715, 666, -1,
+  /* DiagSubGroup718 */ 702, -1,
+  /* DiagSubGroup727 */ 726, -1,
+  /* DiagSubGroup736 */ 167, -1,
+  /* DiagSubGroup737 */ 736, -1,
 };
 
 static const char DiagGroupNames[] = {
     "\000\020#pragma-messages\t#warnings\020CFString-literal\003CL4\032Indep"
     "endentClass-attribute\022NSObject-attribute\003abi\016absolute-value\024"
-    "abstract-final-class\023abstract-vbase-init\007address\032address-of-ar"
-    "ray-temporary\030address-of-packed-member\024address-of-temporary\020ag"
-    "gregate-return\036aligned-allocation-unavailable\003all\031alloca-with-"
-    "align-alignof\020ambiguous-delete\022ambiguous-ellipsis\017ambiguous-ma"
-    "cro\031ambiguous-member-template\034analyzer-incompatible-plugin\025ano"
-    "nymous-pack-parens\003arc%arc-bridge-casts-disallowed-in-nonarc\036arc-"
-    "maybe-repeated-use-of-weak\025arc-non-pod-memaccess\031arc-performSelec"
-    "tor-leaks\030arc-repeated-use-of-weak\021arc-retain-cycles\032arc-unsaf"
-    "e-retained-assign\014array-bounds\037array-bounds-pointer-arithmetic\003"
-    "asm\025asm-ignored-qualifier\022asm-operand-widths\013assign-enum\006as"
-    "sume\013at-protocol\026atomic-memory-ordering\021atomic-properties*atom"
-    "ic-property-with-user-defined-accessor\035attribute-packed-for-bitfield"
-    "\nattributes\033auto-disable-vptr-sanitizer\013auto-import\022auto-stor"
-    "age-class\013auto-var-id\014availability\016backend-plugin\030backslash"
-    "-newline-escape\021bad-function-cast\016binary-literal\026bind-to-tempo"
-    "rary-copy\024binding-in-condition\034bitfield-constant-conversion\030bi"
-    "tfield-enum-conversion\016bitfield-width\026bitwise-op-parentheses\033b"
-    "lock-capture-autoreleasing\017bool-conversion\020bool-conversions\022br"
-    "aced-scalar-init\013bridge-cast\027builtin-macro-redefined\027builtin-m"
-    "emcpy-chk-size\027builtin-requires-header\nc++-compat\014c++0x-compat\020"
-    "c++0x-extensions\017c++0x-narrowing\014c++11-compat(c++11-compat-deprec"
-    "ated-writable-strings\025c++11-compat-pedantic*c++11-compat-reserved-us"
-    "er-defined-literal\020c++11-extensions\020c++11-extra-semi\026c++11-inl"
-    "ine-namespace\017c++11-long-long\017c++11-narrowing\024c++14-binary-lit"
-    "eral\014c++14-compat\025c++14-compat-pedantic\020c++14-extensions\014c+"
-    "+17-compat\025c++17-compat-mangling\025c++17-compat-pedantic\020c++17-e"
-    "xtensions\020c++1y-extensions\014c++1z-compat\025c++1z-compat-mangling\020"
-    "c++1z-extensions\014c++2a-compat\025c++2a-compat-pedantic\020c++2a-exte"
-    "nsions\036c++98-c++11-c++14-c++17-compat'c++98-c++11-c++14-c++17-compat"
-    "-pedantic\030c++98-c++11-c++14-compat!c++98-c++11-c++14-compat-pedantic"
-    "\022c++98-c++11-compat!c++98-c++11-compat-binary-literal\033c++98-c++11"
-    "-compat-pedantic\014c++98-compat#c++98-compat-bind-to-temporary-copy\027"
-    "c++98-compat-extra-semi%c++98-compat-local-type-template-args\025c++98-"
-    "compat-pedantic'c++98-compat-unnamed-type-template-args\016c11-extensio"
-    "ns\nc99-compat\016c99-extensions\ncast-align\027cast-calling-convention"
-    "\020cast-of-sel-type\tcast-qual\nchar-align\017char-subscripts\014clang"
-    "-cl-pch\015class-varargs\005comma\007comment\010comments\036compare-dis"
-    "tinct-pointer-types\026complex-component-init\031conditional-type-misma"
-    "tch\031conditional-uninitialized\015config-macros\023constant-conversio"
-    "n\030constant-logical-operand\023constexpr-not-const\010consumed\nconve"
-    "rsion\017conversion-null\tcoroutine%coroutine-missing-unhandled-excepti"
-    "on\026covered-switch-default\003cpp\030cstring-format-directive\021ctor"
-    "-dtor-privacy\013cuda-compat\030custom-atomic-properties\015dangling-el"
-    "se\016dangling-field\031dangling-initializer-list\tdate-time\023dealloc"
-    "-in-category\035debug-compression-unavailable\033declaration-after-stat"
-    "ement\026delegating-ctor-cycles\021delete-incomplete\027delete-non-virt"
-    "ual-dtor\ndeprecated\025deprecated-attributes\027deprecated-declaration"
-    "s!deprecated-dynamic-exception-spec\032deprecated-implementations\031de"
-    "precated-increment-bool\031deprecated-objc-isa-usage%deprecated-objc-po"
-    "inter-introspection5deprecated-objc-pointer-introspection-performSelect"
-    "or\023deprecated-register\033deprecated-writable-strings\022direct-ivar"
-    "-access\030disabled-macro-expansion\025disabled-optimization\014discard"
-    "-qual\034distributed-object-modifiers\013div-by-zero\020division-by-zer"
-    "o\036dll-attribute-on-redeclaration%dllexport-explicit-instantiation-de"
-    "cl\032dllimport-static-field-def\015documentation\035documentation-depr"
-    "ecated-sync\022documentation-html\026documentation-pedantic\035document"
-    "ation-unknown-command\036dollar-in-identifier-extension\020double-promo"
-    "tion\030duplicate-decl-specifier\016duplicate-enum\024duplicate-method-"
-    "arg\026duplicate-method-match\022duplicate-protocol\027dynamic-class-me"
-    "maccess\026dynamic-exception-spec\006effc++\022embedded-directive\nempt"
-    "y-body\023empty-decomposition\026empty-translation-unit\013encode-type\014"
-    "endif-labels\014enum-compare\023enum-compare-switch\017enum-conversion\016"
-    "enum-too-large\nexceptions\025exit-time-destructors\024expansion-to-def"
-    "ined\021experimental-isel\030explicit-initialize-call\027explicit-owner"
-    "ship-type\017extern-c-compat\022extern-initializer\005extra\023extra-qu"
-    "alification\nextra-semi\014extra-tokens\010fallback\tflag-enum\031flexi"
-    "ble-array-extensions\020float-conversion\013float-equal\031float-overfl"
-    "ow-conversion\025float-zero-conversion\021for-loop-analysis\006format\021"
-    "format-extra-args\030format-invalid-specifier\016format-non-iso\021form"
-    "at-nonliteral\017format-pedantic\017format-security\nformat-y2k\022form"
-    "at-zero-length\010format=2\023four-char-constants\022frame-larger-than="
-    "\036function-def-in-objc-container\015future-compat\ngcc-compat\023glob"
-    "al-constructors\003gnu\026gnu-alignof-expression\024gnu-anonymous-struc"
-    "t\033gnu-array-member-paren-init\015gnu-auto-type\022gnu-binary-literal"
-    "\016gnu-case-range\023gnu-complex-integer gnu-compound-literal-initiali"
-    "zer\037gnu-conditional-omitted-operand\016gnu-designator\025gnu-empty-i"
-    "nitializer\020gnu-empty-struct\036gnu-flexible-array-initializer\037gnu"
-    "-flexible-array-union-member\024gnu-folding-constant\026gnu-imaginary-c"
-    "onstant\020gnu-include-next\022gnu-label-as-value\023gnu-redeclared-enu"
-    "m\030gnu-statement-expression\025gnu-static-float-init$gnu-string-liter"
-    "al-operator-template\016gnu-union-cast\"gnu-variable-sized-type-not-at-"
-    "end\027gnu-zero-line-directive!gnu-zero-variadic-macro-arguments\014hea"
-    "der-guard\016header-hygiene\025idiomatic-parentheses\022ignored-attribu"
-    "tes\035ignored-optimization-argument\030ignored-pragma-intrinsic\027ign"
-    "ored-pragma-optimize\017ignored-pragmas\022ignored-qualifiers\010implic"
-    "it\032implicit-atomic-properties*implicit-conversion-floating-point-to-"
-    "bool implicit-exception-spec-mismatch\024implicit-fallthrough!implicit-"
-    "fallthrough-per-function\035implicit-function-declaration\014implicit-i"
-    "nt\024implicit-retain-self\033implicitly-unsigned-literal\006import&imp"
-    "ort-preprocessor-directive-pedantic\021inaccessible-base\032include-nex"
-    "t-absolute-path\033include-next-outside-header\033incompatible-exceptio"
-    "n-spec#incompatible-function-pointer-types\"incompatible-library-redecl"
-    "aration\026incompatible-ms-struct\032incompatible-pointer-types.incompa"
-    "tible-pointer-types-discards-qualifiers\032incompatible-property-type\024"
-    "incompatible-sysroot\031incomplete-implementation\021incomplete-module\023"
-    "incomplete-umbrella\026inconsistent-dllimport(inconsistent-missing-dest"
-    "ructor-override\035inconsistent-missing-override\016increment-bool\022i"
-    "nfinite-recursion\tinit-self\025initializer-overrides\023injected-class"
-    "-name\006inline\ninline-asm\021inline-new-delete\"instantiation-after-s"
-    "pecialization\016int-conversion\017int-conversions\023int-to-pointer-ca"
-    "st\030int-to-void-pointer-cast\020integer-overflow\035invalid-command-l"
-    "ine-argument\021invalid-constexpr\020invalid-iboutlet&invalid-initializ"
-    "er-from-system-header\035invalid-ios-deployment-target\020invalid-noret"
-    "urn\020invalid-offsetof invalid-or-nonexistent-directory\036invalid-par"
-    "tial-specialization\013invalid-pch\020invalid-pp-token\027invalid-sourc"
-    "e-encoding\023invalid-token-paste\020jump-seh-finally\016keyword-compat"
-    "\015keyword-macro\026knr-promoted-parameter\030language-extension-token"
-    "\023large-by-value-copy\006liblto\022literal-conversion\015literal-rang"
-    "e\030local-type-template-args\027logical-not-parentheses\026logical-op-"
-    "parentheses\tlong-long\015loop-analysis\017macro-redefined\004main\020m"
-    "ain-return-type\027malformed-warning-check\036many-braces-around-scalar"
-    "-init\021max-unsigned-zero\022memsize-comparison\021method-signatures\t"
-    "microsoft\022microsoft-anon-tag\016microsoft-cast\021microsoft-charize\027"
-    "microsoft-comment-paste\024microsoft-const-init\023microsoft-cpp-macro\""
-    "microsoft-default-arg-redefinition\025microsoft-end-of-file microsoft-e"
-    "num-forward-reference\024microsoft-enum-value\030microsoft-exception-sp"
-    "ec\020microsoft-exists#microsoft-explicit-constructor-call\035microsoft"
-    "-extra-qualification\024microsoft-fixed-enum\030microsoft-flexible-arra"
-    "y\016microsoft-goto\033microsoft-inaccessible-base\021microsoft-include"
-    "\033microsoft-mutable-reference\031microsoft-pure-definition\032microso"
-    "ft-redeclare-static\020microsoft-sealed\022microsoft-template microsoft"
-    "-union-member-reference\034microsoft-unqualified-friend\024microsoft-us"
-    "ing-decl\032microsoft-void-pseudo-dtor\025mismatched-new-delete\032mism"
-    "atched-parameter-types\027mismatched-return-types\017mismatched-tags\016"
-    "missing-braces\024missing-declarations\026missing-exception-spec\032mis"
-    "sing-field-initializers\030missing-format-attribute\024missing-include-"
-    "dirs\032missing-method-return-type\020missing-noescape\020missing-noret"
-    "urn\030missing-prototype-for-cc\022missing-prototypes\025missing-select"
-    "or-name\017missing-sysroot\035missing-variable-declarations\014module-b"
-    "uild\017module-conflict\033module-file-config-mismatch\025module-file-e"
-    "xtension\031module-import-in-extern-c\"modules-ambiguous-internal-linka"
-    "ge\037modules-import-nested-redundant\004most\004move\014msvc-include\016"
-    "msvc-not-found\tmultichar\023multiple-move-vbase\tnarrowing\021nested-a"
-    "non-types\016nested-externs\020new-returns-null\013newline-eof\015noexc"
-    "ept-type\007non-gcc\033non-literal-null-conversion'non-modular-include-"
-    "in-framework-module\035non-modular-include-in-module\017non-pod-varargs"
-    "\020non-virtual-dtor\007nonnull\025nonportable-cfstrings\030nonportable"
-    "-include-path\037nonportable-system-include-path!nonportable-vector-ini"
-    "tialization\023nsconsumed-mismatch\022nsreturns-mismatch\017null-arithm"
-    "etic\016null-character\017null-conversion\020null-dereference\027null-p"
-    "ointer-arithmetic\013nullability\030nullability-completeness\"nullabili"
-    "ty-completeness-on-arrays\024nullability-declspec\025nullability-extens"
-    "ion#nullability-inferred-on-nested-type\036nullable-to-nonnull-conversi"
-    "on+objc-autosynthesis-property-ivar-name-match\027objc-circular-contain"
-    "er\016objc-cocoa-api\034objc-designated-initializers\023objc-flexible-a"
-    "rray\037objc-forward-class-redefinition\024objc-interface-ivars\024objc"
-    "-literal-compare\027objc-literal-conversion\027objc-macro-redefinition\021"
-    "objc-messaging-id\022objc-method-access\037objc-missing-property-synthe"
-    "sis\030objc-missing-super-calls\032objc-multiple-method-names\"objc-non"
-    "copy-retain-block-property\032objc-nonunified-exceptions\034objc-proper"
-    "ty-implementation\037objc-property-implicit-mismatch*objc-property-matc"
-    "hes-cocoa-ownership-rule\032objc-property-no-attribute\027objc-property"
-    "-synthesis#objc-protocol-method-implementation objc-protocol-property-s"
-    "ynthesis\030objc-protocol-qualifiers\"objc-readonly-with-setter-propert"
-    "y\026objc-redundant-api-use\032objc-redundant-literal-use\017objc-root-"
-    "class\023objc-string-compare\031objc-string-concatenation\034objc-unsaf"
-    "e-perform-selector\003odr\016old-style-cast\024old-style-definition\027"
-    "opencl-unsupported-rgba\016openmp-clauses\020openmp-loop-form\015openmp"
-    "-target\016option-ignored\027out-of-line-declaration\025out-of-scope-fu"
-    "nction\014over-aligned\010overflow\022overlength-strings\037overloaded-"
-    "shift-op-parentheses\022overloaded-virtual\017override-module\032overri"
-    "ding-method-mismatch\023overriding-t-option\006packed\006padded\013pare"
-    "ntheses\024parentheses-equality\024partial-availability\004pass\015pass"
-    "-analysis\013pass-failed\013pass-missed\015pch-date-time\010pedantic\026"
-    "pedantic-core-features\020pessimizing-move\015pointer-arith\027pointer-"
-    "bool-conversion\014pointer-sign\023pointer-to-int-cast\025pointer-type-"
-    "mismatch potentially-evaluated-expression\026pragma-clang-attribute\032"
-    "pragma-once-outside-header\013pragma-pack\036pragma-pack-suspicious-inc"
-    "lude#pragma-system-header-outside-header\007pragmas&predefined-identifi"
-    "er-outside-function\016private-extern\016private-header\016private-modu"
-    "le\025profile-instr-missing\031profile-instr-out-of-date\030profile-ins"
-    "tr-unprofiled\032property-access-dot-syntax\033property-attribute-misma"
-    "tch\010protocol%protocol-property-synthesis-ambiguity\032qualified-void"
-    "-return-type\023range-loop-analysis\032readonly-iboutlet-property\015re"
-    "ceiver-expr\026receiver-forward-class\027redeclared-class-member\017red"
-    "undant-decls\016redundant-move\020redundant-parens\010register\026reint"
-    "erpret-base-class\025remark-backend-plugin\007reorder\030requires-super"
-    "-attribute\021reserved-id-macro\035reserved-user-defined-literal\031ret"
-    "ained-language-linkage\024return-stack-address\013return-type\025return"
-    "-type-c-linkage\023rtti-for-exceptions\020sanitize-address\007section\010"
-    "selector\026selector-type-mismatch\013self-assign\021self-assign-field\t"
-    "self-move\034semicolon-before-method-body\010sentinel\016sequence-point"
-    "\026serialized-diagnostics\006shadow\nshadow-all\014shadow-field\033sha"
-    "dow-field-in-constructor$shadow-field-in-constructor-modified\013shadow"
-    "-ivar\027shadow-uncaptured-local\024shift-count-negative\024shift-count"
-    "-overflow\024shift-negative-value\024shift-op-parentheses\016shift-over"
-    "flow\023shift-sign-overflow\020shorten-64-to-32\014sign-compare\017sign"
-    "-conversion\nsign-promo\024signed-enum-bitfield\025sizeof-array-argumen"
-    "t\022sizeof-array-decay\030sizeof-pointer-memaccess\020slash-u-filename"
-    "\027sometimes-uninitialized\022source-uses-openmp\013spir-compat\017sta"
-    "ck-protector\021static-float-init\020static-in-inline$static-inline-exp"
-    "licit-instantiation\026static-local-in-inline\020static-self-init\017st"
-    "rict-aliasing\021strict-aliasing=0\021strict-aliasing=1\021strict-alias"
-    "ing=2\017strict-overflow\021strict-overflow=0\021strict-overflow=1\021s"
-    "trict-overflow=2\021strict-overflow=3\021strict-overflow=4\021strict-ov"
-    "erflow=5\021strict-prototypes\025strict-selector-match\016string-compar"
-    "e\021string-conversion\020string-plus-char\017string-plus-int\024strlcp"
-    "y-strlcat-size\014strncat-size\033super-class-method-mismatch\006switch"
-    "\013switch-bool\016switch-default\013switch-enum%sync-fetch-and-nand-se"
-    "mantics-changed\005synth\024tautological-compare\035tautological-consta"
-    "nt-compare&tautological-constant-in-range-compare*tautological-constant"
-    "-out-of-range-compare\034tautological-overlap-compare\034tautological-p"
-    "ointer-compare\037tautological-type-limit-compare\036tautological-undef"
-    "ined-compare'tautological-unsigned-enum-zero-compare\"tautological-unsi"
-    "gned-zero-compare$tentative-definition-incomplete-type\015thread-safety"
-    "\026thread-safety-analysis\030thread-safety-attributes\022thread-safety"
-    "-beta\026thread-safety-negative\025thread-safety-precise\027thread-safe"
-    "ty-reference\025thread-safety-verbose\ttrigraphs\013type-limits\013type"
-    "-safety\024typedef-redefinition\020typename-missing\031unable-to-open-s"
-    "tats-file\030unavailable-declarations\023undeclared-selector\005undef\031"
-    "undefined-bool-conversion\027undefined-func-template\020undefined-inlin"
-    "e\022undefined-internal\027undefined-internal-type\032undefined-reinter"
-    "pret-cast\026undefined-var-template\026unevaluated-expression\026unguar"
-    "ded-availability\032unguarded-availability-new\007unicode\021unicode-ho"
-    "moglyph\022unicode-whitespace\015uninitialized\020unknown-argument\022u"
-    "nknown-attributes\027unknown-escape-sequence\017unknown-pragmas\022unkn"
-    "own-sanitizers\026unknown-warning-option\032unnamed-type-template-args\035"
-    "unneeded-internal-declaration\030unneeded-member-function\020unreachabl"
-    "e-code\033unreachable-code-aggressive\026unreachable-code-break\037unre"
-    "achable-code-loop-increment\027unreachable-code-return\013unsequenced\017"
-    "unsupported-abs\036unsupported-availability-guard\016unsupported-cb#uns"
-    "upported-dll-base-class-template\022unsupported-friend\021unsupported-g"
-    "popt\017unsupported-nan\026unsupported-visibility\037unusable-partial-s"
-    "pecialization\006unused\017unused-argument\034unused-command-line-argum"
-    "ent\021unused-comparison\025unused-const-variable\032unused-exception-p"
-    "arameter\017unused-function\032unused-getter-return-value\014unused-lab"
-    "el\025unused-lambda-capture\024unused-local-typedef\025unused-local-typ"
-    "edefs\015unused-macros\026unused-member-function\020unused-parameter\024"
-    "unused-private-field\024unused-property-ivar\015unused-result\017unused"
-    "-template\014unused-value\017unused-variable\026unused-volatile-lvalue\026"
-    "used-but-marked-unused\025user-defined-literals\025user-defined-warning"
-    "s\007varargs\017variadic-macros\015vec-elem-size\021vector-conversion\022"
-    "vector-conversions\014vexing-parse\nvisibility\003vla\015vla-extension\024"
-    "void-ptr-dereference\025volatile-register-var\025weak-template-vtables\014"
-    "weak-vtables\020writable-strings\015write-strings\035zero-as-null-point"
-    "er-constant\021zero-length-array"};
+    "abstract-final-class\023abstract-vbase-init\007address\030address-of-pa"
+    "cked-member\024address-of-temporary\020aggregate-return\003all\031alloc"
+    "a-with-align-alignof\020ambiguous-delete\022ambiguous-ellipsis\017ambig"
+    "uous-macro\031ambiguous-member-template\034analyzer-incompatible-plugin"
+    "\025anonymous-pack-parens\003arc%arc-bridge-casts-disallowed-in-nonarc\036"
+    "arc-maybe-repeated-use-of-weak\025arc-non-pod-memaccess\031arc-performS"
+    "elector-leaks\030arc-repeated-use-of-weak\021arc-retain-cycles\032arc-u"
+    "nsafe-retained-assign\026argument-outside-range\014array-bounds\037arra"
+    "y-bounds-pointer-arithmetic\003asm\025asm-ignored-qualifier\022asm-oper"
+    "and-widths\013assign-enum\006assume\013at-protocol\034atimport-in-frame"
+    "work-header\020atomic-alignment\026atomic-memory-ordering\021atomic-pro"
+    "perties*atomic-property-with-user-defined-accessor\035attribute-packed-"
+    "for-bitfield\nattributes\033auto-disable-vptr-sanitizer\013auto-import\022"
+    "auto-storage-class\013auto-var-id\014availability\016backend-plugin\030"
+    "backslash-newline-escape\021bad-function-cast\016binary-literal\026bind"
+    "-to-temporary-copy\024binding-in-condition\034bitfield-constant-convers"
+    "ion\030bitfield-enum-conversion\016bitfield-width\026bitwise-op-parenth"
+    "eses\033block-capture-autoreleasing\017bool-conversion\020bool-conversi"
+    "ons\022braced-scalar-init\013bridge-cast\027builtin-macro-redefined\027"
+    "builtin-memcpy-chk-size\027builtin-requires-header\nc++-compat\014c++0x"
+    "-compat\020c++0x-extensions\017c++0x-narrowing\014c++11-compat(c++11-co"
+    "mpat-deprecated-writable-strings\025c++11-compat-pedantic*c++11-compat-"
+    "reserved-user-defined-literal\020c++11-extensions\020c++11-extra-semi\026"
+    "c++11-inline-namespace\017c++11-long-long\017c++11-narrowing\024c++14-b"
+    "inary-literal\014c++14-compat\025c++14-compat-pedantic\020c++14-extensi"
+    "ons\014c++17-compat\025c++17-compat-mangling\025c++17-compat-pedantic\020"
+    "c++17-extensions\020c++1y-extensions\014c++1z-compat\025c++1z-compat-ma"
+    "ngling\020c++1z-extensions\014c++2a-compat\025c++2a-compat-pedantic\020"
+    "c++2a-extensions\036c++98-c++11-c++14-c++17-compat'c++98-c++11-c++14-c+"
+    "+17-compat-pedantic\030c++98-c++11-c++14-compat!c++98-c++11-c++14-compa"
+    "t-pedantic\022c++98-c++11-compat!c++98-c++11-compat-binary-literal\033c"
+    "++98-c++11-compat-pedantic\014c++98-compat#c++98-compat-bind-to-tempora"
+    "ry-copy\027c++98-compat-extra-semi%c++98-compat-local-type-template-arg"
+    "s\025c++98-compat-pedantic'c++98-compat-unnamed-type-template-args\016c"
+    "11-extensions\nc99-compat\016c99-extensions\ncast-align\027cast-calling"
+    "-convention\020cast-of-sel-type\tcast-qual\023cast-qual-unrelated\nchar"
+    "-align\017char-subscripts\014clang-cl-pch\015class-varargs\005comma\007"
+    "comment\010comments\036compare-distinct-pointer-types\026complex-compon"
+    "ent-init\031conditional-type-mismatch\031conditional-uninitialized\015c"
+    "onfig-macros\023constant-conversion\030constant-logical-operand\023cons"
+    "texpr-not-const\010consumed\nconversion\017conversion-null\tcoroutine%c"
+    "oroutine-missing-unhandled-exception\026covered-switch-default\003cpp\030"
+    "cstring-format-directive\021ctor-dtor-privacy\013cuda-compat\030custom-"
+    "atomic-properties\010dangling\015dangling-else\016dangling-field\031dan"
+    "gling-initializer-list\tdate-time\023dealloc-in-category\035debug-compr"
+    "ession-unavailable\033declaration-after-statement\026delegating-ctor-cy"
+    "cles\021delete-incomplete\027delete-non-virtual-dtor\ndeprecated\025dep"
+    "recated-attributes\027deprecated-declarations!deprecated-dynamic-except"
+    "ion-spec\032deprecated-implementations\031deprecated-increment-bool\031"
+    "deprecated-objc-isa-usage%deprecated-objc-pointer-introspection5depreca"
+    "ted-objc-pointer-introspection-performSelector\023deprecated-register\027"
+    "deprecated-this-capture\033deprecated-writable-strings\022direct-ivar-a"
+    "ccess\030disabled-macro-expansion\025disabled-optimization\014discard-q"
+    "ual\034distributed-object-modifiers\013div-by-zero\020division-by-zero\036"
+    "dll-attribute-on-redeclaration%dllexport-explicit-instantiation-decl\032"
+    "dllimport-static-field-def\015documentation\035documentation-deprecated"
+    "-sync\022documentation-html\026documentation-pedantic\035documentation-"
+    "unknown-command\036dollar-in-identifier-extension\020double-promotion\030"
+    "duplicate-decl-specifier\016duplicate-enum\024duplicate-method-arg\026d"
+    "uplicate-method-match\022duplicate-protocol\027dynamic-class-memaccess\026"
+    "dynamic-exception-spec\006effc++\022embedded-directive\nempty-body\023e"
+    "mpty-decomposition\026empty-translation-unit\013encode-type\014endif-la"
+    "bels\014enum-compare\023enum-compare-switch\017enum-conversion\016enum-"
+    "too-large\nexceptions\025exit-time-destructors\024expansion-to-defined\021"
+    "experimental-isel\030explicit-initialize-call\027explicit-ownership-typ"
+    "e\017extern-c-compat\022extern-initializer\005extra\023extra-qualificat"
+    "ion\nextra-semi\014extra-tokens\010fallback\tflag-enum\031flexible-arra"
+    "y-extensions\020float-conversion\013float-equal\031float-overflow-conve"
+    "rsion\025float-zero-conversion\021for-loop-analysis\006format\021format"
+    "-extra-args\030format-invalid-specifier\016format-non-iso\021format-non"
+    "literal\017format-pedantic\017format-security\nformat-y2k\022format-zer"
+    "o-length\010format=2\023four-char-constants\022frame-larger-than=%frame"
+    "work-include-private-from-public\036function-def-in-objc-container\025f"
+    "unction-multiversion\015future-compat\ngcc-compat\023global-constructor"
+    "s\003gnu\026gnu-alignof-expression\024gnu-anonymous-struct\033gnu-array"
+    "-member-paren-init\015gnu-auto-type\022gnu-binary-literal\016gnu-case-r"
+    "ange\023gnu-complex-integer gnu-compound-literal-initializer\037gnu-con"
+    "ditional-omitted-operand\016gnu-designator\025gnu-empty-initializer\020"
+    "gnu-empty-struct\036gnu-flexible-array-initializer\037gnu-flexible-arra"
+    "y-union-member\024gnu-folding-constant\026gnu-imaginary-constant\020gnu"
+    "-include-next\022gnu-label-as-value\023gnu-redeclared-enum\030gnu-state"
+    "ment-expression\025gnu-static-float-init$gnu-string-literal-operator-te"
+    "mplate\016gnu-union-cast\"gnu-variable-sized-type-not-at-end\027gnu-zer"
+    "o-line-directive!gnu-zero-variadic-macro-arguments\014header-guard\016h"
+    "eader-hygiene\025idiomatic-parentheses\022ignored-attributes\035ignored"
+    "-optimization-argument\030ignored-pragma-intrinsic\027ignored-pragma-op"
+    "timize\017ignored-pragmas\022ignored-qualifiers\010implicit\032implicit"
+    "-atomic-properties*implicit-conversion-floating-point-to-bool implicit-"
+    "exception-spec-mismatch\024implicit-fallthrough!implicit-fallthrough-pe"
+    "r-function\035implicit-function-declaration\014implicit-int\024implicit"
+    "-retain-self\033implicitly-unsigned-literal\006import&import-preprocess"
+    "or-directive-pedantic\021inaccessible-base\032include-next-absolute-pat"
+    "h\033include-next-outside-header\033incompatible-exception-spec#incompa"
+    "tible-function-pointer-types\"incompatible-library-redeclaration\026inc"
+    "ompatible-ms-struct\032incompatible-pointer-types.incompatible-pointer-"
+    "types-discards-qualifiers\032incompatible-property-type\024incompatible"
+    "-sysroot'incomplete-framework-module-declaration\031incomplete-implemen"
+    "tation\021incomplete-module\023incomplete-umbrella\026inconsistent-dlli"
+    "mport(inconsistent-missing-destructor-override\035inconsistent-missing-"
+    "override\016increment-bool\022infinite-recursion\tinit-self\025initiali"
+    "zer-overrides\023injected-class-name\006inline\ninline-asm\021inline-ne"
+    "w-delete\"instantiation-after-specialization\016int-conversion\017int-c"
+    "onversions\023int-to-pointer-cast\030int-to-void-pointer-cast\020intege"
+    "r-overflow\035invalid-command-line-argument\021invalid-constexpr\020inv"
+    "alid-iboutlet&invalid-initializer-from-system-header\035invalid-ios-dep"
+    "loyment-target\020invalid-noreturn\020invalid-offsetof invalid-or-nonex"
+    "istent-directory\036invalid-partial-specialization\013invalid-pch\020in"
+    "valid-pp-token\027invalid-source-encoding\023invalid-token-paste\020jum"
+    "p-seh-finally\016keyword-compat\015keyword-macro\026knr-promoted-parame"
+    "ter\030language-extension-token\023large-by-value-copy\006liblto\022lit"
+    "eral-conversion\015literal-range\030local-type-template-args\027logical"
+    "-not-parentheses\026logical-op-parentheses\tlong-long\015loop-analysis\017"
+    "macro-redefined\004main\020main-return-type\027malformed-warning-check\036"
+    "many-braces-around-scalar-init\021max-unsigned-zero\026memset-transpose"
+    "d-args\022memsize-comparison\021method-signatures\tmicrosoft\022microso"
+    "ft-anon-tag\016microsoft-cast\021microsoft-charize\027microsoft-comment"
+    "-paste\024microsoft-const-init\023microsoft-cpp-macro\"microsoft-defaul"
+    "t-arg-redefinition\025microsoft-end-of-file microsoft-enum-forward-refe"
+    "rence\024microsoft-enum-value\030microsoft-exception-spec\020microsoft-"
+    "exists#microsoft-explicit-constructor-call\035microsoft-extra-qualifica"
+    "tion\024microsoft-fixed-enum\030microsoft-flexible-array\016microsoft-g"
+    "oto\033microsoft-inaccessible-base\021microsoft-include\033microsoft-mu"
+    "table-reference\031microsoft-pure-definition\032microsoft-redeclare-sta"
+    "tic\020microsoft-sealed\022microsoft-template microsoft-union-member-re"
+    "ference\034microsoft-unqualified-friend\024microsoft-using-decl\032micr"
+    "osoft-void-pseudo-dtor\025mismatched-new-delete\032mismatched-parameter"
+    "-types\027mismatched-return-types\017mismatched-tags\016missing-braces\024"
+    "missing-declarations\026missing-exception-spec\032missing-field-initial"
+    "izers\030missing-format-attribute\024missing-include-dirs\032missing-me"
+    "thod-return-type\020missing-noescape\020missing-noreturn\030missing-pro"
+    "totype-for-cc\022missing-prototypes\025missing-selector-name\017missing"
+    "-sysroot\035missing-variable-declarations\014module-build\017module-con"
+    "flict\033module-file-config-mismatch\025module-file-extension\031module"
+    "-import-in-extern-c\"modules-ambiguous-internal-linkage\037modules-impo"
+    "rt-nested-redundant\004most\004move\014msvc-include\016msvc-not-found\t"
+    "multichar\023multiple-move-vbase\tnarrowing\021nested-anon-types\016nes"
+    "ted-externs\020new-returns-null\013newline-eof\015noexcept-type\007non-"
+    "gcc\033non-literal-null-conversion'non-modular-include-in-framework-mod"
+    "ule\035non-modular-include-in-module\017non-pod-varargs\020non-virtual-"
+    "dtor\007nonnull\025nonportable-cfstrings\030nonportable-include-path\037"
+    "nonportable-system-include-path!nonportable-vector-initialization\024no"
+    "ntrivial-memaccess\023nsconsumed-mismatch\022nsreturns-mismatch\017null"
+    "-arithmetic\016null-character\017null-conversion\020null-dereference\027"
+    "null-pointer-arithmetic\013nullability\030nullability-completeness\"nul"
+    "lability-completeness-on-arrays\024nullability-declspec\025nullability-"
+    "extension#nullability-inferred-on-nested-type\036nullable-to-nonnull-co"
+    "nversion+objc-autosynthesis-property-ivar-name-match\027objc-circular-c"
+    "ontainer\016objc-cocoa-api\034objc-designated-initializers\023objc-flex"
+    "ible-array\037objc-forward-class-redefinition\024objc-interface-ivars\024"
+    "objc-literal-compare\027objc-literal-conversion\027objc-macro-redefinit"
+    "ion\021objc-messaging-id\022objc-method-access\037objc-missing-property"
+    "-synthesis\030objc-missing-super-calls\032objc-multiple-method-names\"o"
+    "bjc-noncopy-retain-block-property\032objc-nonunified-exceptions\034objc"
+    "-property-implementation\037objc-property-implicit-mismatch*objc-proper"
+    "ty-matches-cocoa-ownership-rule\032objc-property-no-attribute\027objc-p"
+    "roperty-synthesis#objc-protocol-method-implementation objc-protocol-pro"
+    "perty-synthesis\030objc-protocol-qualifiers\"objc-readonly-with-setter-"
+    "property\026objc-redundant-api-use\032objc-redundant-literal-use\017obj"
+    "c-root-class\023objc-string-compare\031objc-string-concatenation\034obj"
+    "c-unsafe-perform-selector\003odr\016old-style-cast\024old-style-definit"
+    "ion\027opencl-unsupported-rgba\016openmp-clauses\020openmp-loop-form\015"
+    "openmp-target\016option-ignored!ordered-compare-function-pointers\027ou"
+    "t-of-line-declaration\025out-of-scope-function\014over-aligned\010overf"
+    "low\022overlength-strings\037overloaded-shift-op-parentheses\022overloa"
+    "ded-virtual\017override-module\032overriding-method-mismatch\023overrid"
+    "ing-t-option\006packed\006padded\013parentheses\024parentheses-equality"
+    "\024partial-availability\004pass\015pass-analysis\013pass-failed\013pas"
+    "s-missed\015pch-date-time\010pedantic\026pedantic-core-features\020pess"
+    "imizing-move\015pointer-arith\027pointer-bool-conversion\014pointer-sig"
+    "n\023pointer-to-int-cast\025pointer-type-mismatch potentially-evaluated"
+    "-expression\026pragma-clang-attribute\032pragma-once-outside-header\013"
+    "pragma-pack\036pragma-pack-suspicious-include#pragma-system-header-outs"
+    "ide-header\007pragmas&predefined-identifier-outside-function\016private"
+    "-extern\016private-header\016private-module\025profile-instr-missing\031"
+    "profile-instr-out-of-date\030profile-instr-unprofiled\032property-acces"
+    "s-dot-syntax\033property-attribute-mismatch\010protocol%protocol-proper"
+    "ty-synthesis-ambiguity\032qualified-void-return-type\"quoted-include-in"
+    "-framework-header\023range-loop-analysis\032readonly-iboutlet-property\015"
+    "receiver-expr\026receiver-forward-class\027redeclared-class-member\017r"
+    "edundant-decls\016redundant-move\020redundant-parens\010register\026rei"
+    "nterpret-base-class\025remark-backend-plugin\007reorder\030requires-sup"
+    "er-attribute\021reserved-id-macro\035reserved-user-defined-literal\031r"
+    "etained-language-linkage\024return-stack-address\017return-std-move\030"
+    "return-std-move-in-c++11\013return-type\025return-type-c-linkage\020san"
+    "itize-address\007section\010selector\026selector-type-mismatch\013self-"
+    "assign\021self-assign-field\026self-assign-overloaded\tself-move\034sem"
+    "icolon-before-method-body\010sentinel\016sequence-point\026serialized-d"
+    "iagnostics\006shadow\nshadow-all\014shadow-field\033shadow-field-in-con"
+    "structor$shadow-field-in-constructor-modified\013shadow-ivar\027shadow-"
+    "uncaptured-local\024shift-count-negative\024shift-count-overflow\024shi"
+    "ft-negative-value\024shift-op-parentheses\016shift-overflow\023shift-si"
+    "gn-overflow\020shorten-64-to-32\014sign-compare\017sign-conversion\nsig"
+    "n-promo\024signed-enum-bitfield\025sizeof-array-argument\022sizeof-arra"
+    "y-decay\030sizeof-pointer-memaccess\020slash-u-filename\027sometimes-un"
+    "initialized\022source-uses-openmp\013spir-compat\017stack-protector\021"
+    "static-float-init\020static-in-inline$static-inline-explicit-instantiat"
+    "ion\026static-local-in-inline\020static-self-init\023stdlibcxx-not-foun"
+    "d\017strict-aliasing\021strict-aliasing=0\021strict-aliasing=1\021stric"
+    "t-aliasing=2\017strict-overflow\021strict-overflow=0\021strict-overflow"
+    "=1\021strict-overflow=2\021strict-overflow=3\021strict-overflow=4\021st"
+    "rict-overflow=5\021strict-prototypes\025strict-selector-match\016string"
+    "-compare\021string-conversion\020string-plus-char\017string-plus-int\024"
+    "strlcpy-strlcat-size\014strncat-size\033super-class-method-mismatch\020"
+    "suspicious-bzero\024suspicious-memaccess\006switch\013switch-bool\016sw"
+    "itch-default\013switch-enum%sync-fetch-and-nand-semantics-changed\005sy"
+    "nth\024tautological-compare\035tautological-constant-compare&tautologic"
+    "al-constant-in-range-compare*tautological-constant-out-of-range-compare"
+    "\034tautological-overlap-compare\034tautological-pointer-compare\037tau"
+    "tological-type-limit-compare\036tautological-undefined-compare'tautolog"
+    "ical-unsigned-enum-zero-compare\"tautological-unsigned-zero-compare$ten"
+    "tative-definition-incomplete-type\015thread-safety\026thread-safety-ana"
+    "lysis\030thread-safety-attributes\022thread-safety-beta\026thread-safet"
+    "y-negative\025thread-safety-precise\027thread-safety-reference\025threa"
+    "d-safety-verbose\ttrigraphs\013type-limits\013type-safety\024typedef-re"
+    "definition\020typename-missing\031unable-to-open-stats-file\030unavaila"
+    "ble-declarations\023undeclared-selector\005undef\031undefined-bool-conv"
+    "ersion\027undefined-func-template\020undefined-inline\022undefined-inte"
+    "rnal\027undefined-internal-type\032undefined-reinterpret-cast\026undefi"
+    "ned-var-template\026unevaluated-expression\026unguarded-availability\032"
+    "unguarded-availability-new\007unicode\021unicode-homoglyph\022unicode-w"
+    "hitespace\015uninitialized\020unknown-argument\022unknown-attributes\027"
+    "unknown-escape-sequence\017unknown-pragmas\022unknown-sanitizers\026unk"
+    "nown-warning-option\032unnamed-type-template-args\035unneeded-internal-"
+    "declaration\030unneeded-member-function\020unreachable-code\033unreacha"
+    "ble-code-aggressive\026unreachable-code-break\037unreachable-code-loop-"
+    "increment\027unreachable-code-return\013unsequenced\017unsupported-abs\036"
+    "unsupported-availability-guard\016unsupported-cb#unsupported-dll-base-c"
+    "lass-template\022unsupported-friend\021unsupported-gpopt\017unsupported"
+    "-nan\026unsupported-target-opt\026unsupported-visibility\037unusable-pa"
+    "rtial-specialization\006unused\017unused-argument\034unused-command-lin"
+    "e-argument\021unused-comparison\025unused-const-variable\032unused-exce"
+    "ption-parameter\017unused-function\032unused-getter-return-value\014unu"
+    "sed-label\025unused-lambda-capture\024unused-local-typedef\025unused-lo"
+    "cal-typedefs\015unused-macros\026unused-member-function\020unused-param"
+    "eter\024unused-private-field\024unused-property-ivar\015unused-result\017"
+    "unused-template\014unused-value\017unused-variable\026unused-volatile-l"
+    "value\026used-but-marked-unused\025user-defined-literals\025user-define"
+    "d-warnings\007varargs\017variadic-macros\015vec-elem-size\021vector-con"
+    "version\022vector-conversions\014vexing-parse\nvisibility\003vla\015vla"
+    "-extension\024void-ptr-dereference\025volatile-register-var\025weak-tem"
+    "plate-vtables\014weak-vtables\020writable-strings\015write-strings\035z"
+    "ero-as-null-pointer-constant\021zero-length-array"};
 
 #endif // GET_DIAG_ARRAYS
 
@@ -1007,717 +1031,734 @@
   { /* abstract-final-class */                                  114, /* DiagArray9 */ 17, /* Empty */         0 },
   { /* abstract-vbase-init */                                   135, /* DiagArray10 */ 19, /* Empty */         0 },
   { /* address */                                               155, /* Empty */     0, /* DiagSubGroup11 */ 6 },
-  { /* address-of-array-temporary */                            163, /* DiagArray12 */ 21, /* Empty */         0 },
-  { /* address-of-packed-member */                              190, /* DiagArray13 */ 23, /* Empty */         0 },
-  { /* address-of-temporary */                                  215, /* DiagArray14 */ 25, /* Empty */         0 },
-  { /* aggregate-return */                                      236, /* Empty */     0, /* Empty */         0 },
-  { /* aligned-allocation-unavailable */                        253, /* DiagArray16 */ 27, /* Empty */         0 },
-  { /* all */                                                   284, /* Empty */     0, /* DiagSubGroup17 */ 10 },
-  { /* alloca-with-align-alignof */                             288, /* DiagArray18 */ 29, /* Empty */         0 },
-  { /* ambiguous-delete */                                      314, /* DiagArray19 */ 31, /* Empty */         0 },
-  { /* ambiguous-ellipsis */                                    331, /* DiagArray20 */ 33, /* Empty */         0 },
-  { /* ambiguous-macro */                                       350, /* DiagArray21 */ 35, /* Empty */         0 },
-  { /* ambiguous-member-template */                             366, /* DiagArray22 */ 37, /* Empty */         0 },
-  { /* analyzer-incompatible-plugin */                          392, /* DiagArray23 */ 39, /* Empty */         0 },
-  { /* anonymous-pack-parens */                                 421, /* DiagArray24 */ 41, /* Empty */         0 },
-  { /* arc */                                                   443, /* Empty */     0, /* DiagSubGroup25 */ 15 },
-  { /* arc-bridge-casts-disallowed-in-nonarc */                 447, /* DiagArray26 */ 43, /* Empty */         0 },
-  { /* arc-maybe-repeated-use-of-weak */                        485, /* DiagArray27 */ 45, /* Empty */         0 },
-  { /* arc-non-pod-memaccess */                                 516, /* DiagArray28 */ 47, /* Empty */         0 },
-  { /* arc-performSelector-leaks */                             538, /* DiagArray29 */ 49, /* Empty */         0 },
-  { /* arc-repeated-use-of-weak */                              564, /* DiagArray30 */ 51, /* DiagSubGroup30 */ 19 },
-  { /* arc-retain-cycles */                                     589, /* DiagArray31 */ 53, /* Empty */         0 },
-  { /* arc-unsafe-retained-assign */                            607, /* DiagArray32 */ 55, /* Empty */         0 },
-  { /* array-bounds */                                          634, /* DiagArray33 */ 59, /* Empty */         0 },
-  { /* array-bounds-pointer-arithmetic */                       647, /* DiagArray34 */ 64, /* Empty */         0 },
-  { /* asm */                                                   679, /* Empty */     0, /* DiagSubGroup35 */ 21 },
-  { /* asm-ignored-qualifier */                                 683, /* DiagArray36 */ 67, /* Empty */         0 },
-  { /* asm-operand-widths */                                    705, /* DiagArray37 */ 70, /* Empty */         0 },
-  { /* assign-enum */                                           724, /* DiagArray38 */ 72, /* Empty */         0 },
-  { /* assume */                                                736, /* DiagArray39 */ 74, /* Empty */         0 },
-  { /* at-protocol */                                           743, /* DiagArray40 */ 76, /* Empty */         0 },
-  { /* atomic-memory-ordering */                                755, /* DiagArray41 */ 78, /* Empty */         0 },
-  { /* atomic-properties */                                     778, /* Empty */     0, /* DiagSubGroup42 */ 24 },
-  { /* atomic-property-with-user-defined-accessor */            796, /* DiagArray43 */ 80, /* Empty */         0 },
-  { /* attribute-packed-for-bitfield */                         839, /* DiagArray44 */ 82, /* Empty */         0 },
-  { /* attributes */                                            869, /* Empty */     0, /* DiagSubGroup45 */ 27 },
-  { /* auto-disable-vptr-sanitizer */                           880, /* DiagArray46 */ 84, /* Empty */         0 },
-  { /* auto-import */                                           908, /* DiagArray47 */ 86, /* Empty */         0 },
-  { /* auto-storage-class */                                    920, /* DiagArray48 */ 88, /* Empty */         0 },
-  { /* auto-var-id */                                           939, /* DiagArray49 */ 90, /* Empty */         0 },
-  { /* availability */                                          951, /* DiagArray50 */ 92, /* Empty */         0 },
-  { /* backend-plugin */                                        964, /* DiagArray51 */ 100, /* Empty */         0 },
-  { /* backslash-newline-escape */                              979, /* DiagArray52 */ 102, /* Empty */         0 },
-  { /* bad-function-cast */                                     1004, /* DiagArray53 */ 104, /* Empty */         0 },
-  { /* binary-literal */                                        1022, /* Empty */     0, /* DiagSubGroup54 */ 30 },
-  { /* bind-to-temporary-copy */                                1037, /* DiagArray55 */ 106, /* DiagSubGroup55 */ 34 },
-  { /* binding-in-condition */                                  1060, /* DiagArray56 */ 109, /* Empty */         0 },
-  { /* bitfield-constant-conversion */                          1081, /* DiagArray57 */ 111, /* Empty */         0 },
-  { /* bitfield-enum-conversion */                              1110, /* DiagArray58 */ 113, /* Empty */         0 },
-  { /* bitfield-width */                                        1135, /* DiagArray59 */ 117, /* Empty */         0 },
-  { /* bitwise-op-parentheses */                                1150, /* DiagArray60 */ 120, /* Empty */         0 },
-  { /* block-capture-autoreleasing */                           1173, /* DiagArray61 */ 122, /* Empty */         0 },
-  { /* bool-conversion */                                       1201, /* DiagArray62 */ 124, /* DiagSubGroup62 */ 36 },
-  { /* bool-conversions */                                      1217, /* Empty */     0, /* DiagSubGroup63 */ 39 },
-  { /* braced-scalar-init */                                    1234, /* DiagArray64 */ 126, /* Empty */         0 },
-  { /* bridge-cast */                                           1253, /* DiagArray65 */ 128, /* Empty */         0 },
-  { /* builtin-macro-redefined */                               1265, /* DiagArray66 */ 131, /* Empty */         0 },
-  { /* builtin-memcpy-chk-size */                               1289, /* DiagArray67 */ 134, /* Empty */         0 },
-  { /* builtin-requires-header */                               1313, /* DiagArray68 */ 136, /* Empty */         0 },
-  { /* c++-compat */                                            1337, /* DiagArray69 */ 138, /* Empty */         0 },
-  { /* c++0x-compat */                                          1348, /* Empty */     0, /* DiagSubGroup70 */ 41 },
-  { /* c++0x-extensions */                                      1361, /* Empty */     0, /* DiagSubGroup71 */ 43 },
-  { /* c++0x-narrowing */                                       1378, /* Empty */     0, /* DiagSubGroup72 */ 45 },
-  { /* c++11-compat */                                          1394, /* DiagArray73 */ 140, /* DiagSubGroup73 */ 47 },
-  { /* c++11-compat-deprecated-writable-strings */              1407, /* DiagArray74 */ 151, /* Empty */         0 },
-  { /* c++11-compat-pedantic */                                 1448, /* Empty */     0, /* DiagSubGroup75 */ 54 },
-  { /* c++11-compat-reserved-user-defined-literal */            1470, /* DiagArray76 */ 153, /* Empty */         0 },
-  { /* c++11-extensions */                                      1513, /* DiagArray77 */ 155, /* DiagSubGroup77 */ 59 },
-  { /* c++11-extra-semi */                                      1530, /* DiagArray78 */ 181, /* Empty */         0 },
-  { /* c++11-inline-namespace */                                1547, /* DiagArray79 */ 183, /* Empty */         0 },
-  { /* c++11-long-long */                                       1570, /* DiagArray80 */ 185, /* Empty */         0 },
-  { /* c++11-narrowing */                                       1586, /* DiagArray81 */ 187, /* Empty */         0 },
-  { /* c++14-binary-literal */                                  1602, /* DiagArray82 */ 195, /* Empty */         0 },
-  { /* c++14-compat */                                          1623, /* Empty */     0, /* DiagSubGroup83 */ 63 },
-  { /* c++14-compat-pedantic */                                 1636, /* Empty */     0, /* DiagSubGroup84 */ 66 },
-  { /* c++14-extensions */                                      1658, /* DiagArray85 */ 197, /* DiagSubGroup85 */ 70 },
-  { /* c++17-compat */                                          1675, /* Empty */     0, /* DiagSubGroup86 */ 72 },
-  { /* c++17-compat-mangling */                                 1688, /* DiagArray87 */ 206, /* Empty */         0 },
-  { /* c++17-compat-pedantic */                                 1710, /* Empty */     0, /* DiagSubGroup88 */ 77 },
-  { /* c++17-extensions */                                      1732, /* DiagArray89 */ 208, /* Empty */         0 },
-  { /* c++1y-extensions */                                      1749, /* Empty */     0, /* DiagSubGroup90 */ 80 },
-  { /* c++1z-compat */                                          1766, /* Empty */     0, /* DiagSubGroup91 */ 82 },
-  { /* c++1z-compat-mangling */                                 1779, /* Empty */     0, /* DiagSubGroup92 */ 84 },
-  { /* c++1z-extensions */                                      1801, /* Empty */     0, /* DiagSubGroup93 */ 86 },
-  { /* c++2a-compat */                                          1818, /* DiagArray94 */ 227, /* Empty */         0 },
-  { /* c++2a-compat-pedantic */                                 1831, /* Empty */     0, /* DiagSubGroup95 */ 88 },
-  { /* c++2a-extensions */                                      1853, /* DiagArray96 */ 230, /* Empty */         0 },
-  { /* c++98-c++11-c++14-c++17-compat */                        1870, /* DiagArray97 */ 234, /* Empty */         0 },
-  { /* c++98-c++11-c++14-c++17-compat-pedantic */               1901, /* DiagArray98 */ 238, /* DiagSubGroup98 */ 90 },
-  { /* c++98-c++11-c++14-compat */                              1941, /* DiagArray99 */ 240, /* Empty */         0 },
-  { /* c++98-c++11-c++14-compat-pedantic */                     1966, /* DiagArray100 */ 257, /* DiagSubGroup100 */ 92 },
-  { /* c++98-c++11-compat */                                    2000, /* DiagArray101 */ 260, /* Empty */         0 },
-  { /* c++98-c++11-compat-binary-literal */                     2019, /* DiagArray102 */ 270, /* Empty */         0 },
-  { /* c++98-c++11-compat-pedantic */                           2053, /* Empty */     0, /* DiagSubGroup103 */ 94 },
-  { /* c++98-compat */                                          2081, /* DiagArray104 */ 272, /* DiagSubGroup104 */ 97 },
-  { /* c++98-compat-bind-to-temporary-copy */                   2094, /* DiagArray105 */ 332, /* Empty */         0 },
-  { /* c++98-compat-extra-semi */                               2130, /* DiagArray106 */ 334, /* Empty */         0 },
-  { /* c++98-compat-local-type-template-args */                 2154, /* DiagArray107 */ 336, /* Empty */         0 },
-  { /* c++98-compat-pedantic */                                 2192, /* DiagArray108 */ 338, /* DiagSubGroup108 */ 103 },
-  { /* c++98-compat-unnamed-type-template-args */               2214, /* DiagArray109 */ 348, /* Empty */         0 },
-  { /* c11-extensions */                                        2254, /* DiagArray110 */ 350, /* Empty */         0 },
-  { /* c99-compat */                                            2269, /* DiagArray111 */ 357, /* Empty */         0 },
-  { /* c99-extensions */                                        2280, /* DiagArray112 */ 361, /* Empty */         0 },
-  { /* cast-align */                                            2295, /* DiagArray113 */ 372, /* Empty */         0 },
-  { /* cast-calling-convention */                               2306, /* DiagArray114 */ 374, /* Empty */         0 },
-  { /* cast-of-sel-type */                                      2330, /* DiagArray115 */ 376, /* Empty */         0 },
-  { /* cast-qual */                                             2347, /* DiagArray116 */ 378, /* Empty */         0 },
-  { /* char-align */                                            2357, /* Empty */     0, /* Empty */         0 },
-  { /* char-subscripts */                                       2368, /* DiagArray118 */ 381, /* Empty */         0 },
-  { /* clang-cl-pch */                                          2384, /* DiagArray119 */ 384, /* Empty */         0 },
-  { /* class-varargs */                                         2397, /* DiagArray120 */ 389, /* DiagSubGroup120 */ 110 },
-  { /* comma */                                                 2411, /* DiagArray121 */ 391, /* Empty */         0 },
-  { /* comment */                                               2417, /* DiagArray122 */ 393, /* Empty */         0 },
-  { /* comments */                                              2425, /* Empty */     0, /* DiagSubGroup123 */ 112 },
-  { /* compare-distinct-pointer-types */                        2434, /* DiagArray124 */ 398, /* Empty */         0 },
-  { /* complex-component-init */                                2465, /* DiagArray125 */ 400, /* Empty */         0 },
-  { /* conditional-type-mismatch */                             2488, /* DiagArray126 */ 402, /* Empty */         0 },
-  { /* conditional-uninitialized */                             2514, /* DiagArray127 */ 404, /* Empty */         0 },
-  { /* config-macros */                                         2540, /* DiagArray128 */ 406, /* Empty */         0 },
-  { /* constant-conversion */                                   2554, /* DiagArray129 */ 408, /* DiagSubGroup129 */ 114 },
-  { /* constant-logical-operand */                              2574, /* DiagArray130 */ 410, /* Empty */         0 },
-  { /* constexpr-not-const */                                   2599, /* DiagArray131 */ 412, /* Empty */         0 },
-  { /* consumed */                                              2619, /* DiagArray132 */ 414, /* Empty */         0 },
-  { /* conversion */                                            2628, /* DiagArray133 */ 423, /* DiagSubGroup133 */ 116 },
-  { /* conversion-null */                                       2639, /* Empty */     0, /* DiagSubGroup134 */ 130 },
-  { /* coroutine */                                             2655, /* Empty */     0, /* DiagSubGroup135 */ 132 },
-  { /* coroutine-missing-unhandled-exception */                 2665, /* DiagArray136 */ 431, /* Empty */         0 },
-  { /* covered-switch-default */                                2703, /* DiagArray137 */ 433, /* Empty */         0 },
-  { /* cpp */                                                   2726, /* Empty */     0, /* DiagSubGroup138 */ 134 },
-  { /* cstring-format-directive */                              2730, /* DiagArray139 */ 435, /* Empty */         0 },
-  { /* ctor-dtor-privacy */                                     2755, /* Empty */     0, /* Empty */         0 },
-  { /* cuda-compat */                                           2773, /* DiagArray141 */ 437, /* Empty */         0 },
-  { /* custom-atomic-properties */                              2785, /* DiagArray142 */ 443, /* Empty */         0 },
-  { /* dangling-else */                                         2810, /* DiagArray143 */ 445, /* Empty */         0 },
-  { /* dangling-field */                                        2824, /* DiagArray144 */ 447, /* Empty */         0 },
-  { /* dangling-initializer-list */                             2839, /* DiagArray145 */ 451, /* Empty */         0 },
-  { /* date-time */                                             2865, /* DiagArray146 */ 453, /* Empty */         0 },
-  { /* dealloc-in-category */                                   2875, /* DiagArray147 */ 455, /* Empty */         0 },
-  { /* debug-compression-unavailable */                         2895, /* DiagArray148 */ 457, /* Empty */         0 },
-  { /* declaration-after-statement */                           2925, /* DiagArray149 */ 459, /* Empty */         0 },
-  { /* delegating-ctor-cycles */                                2953, /* DiagArray150 */ 461, /* Empty */         0 },
-  { /* delete-incomplete */                                     2976, /* DiagArray151 */ 463, /* Empty */         0 },
-  { /* delete-non-virtual-dtor */                               2994, /* DiagArray152 */ 466, /* Empty */         0 },
-  { /* deprecated */                                            3018, /* DiagArray153 */ 469, /* DiagSubGroup153 */ 136 },
-  { /* deprecated-attributes */                                 3029, /* DiagArray154 */ 478, /* Empty */         0 },
-  { /* deprecated-declarations */                               3051, /* DiagArray155 */ 480, /* Empty */         0 },
-  { /* deprecated-dynamic-exception-spec */                     3075, /* DiagArray156 */ 487, /* Empty */         0 },
-  { /* deprecated-implementations */                            3109, /* DiagArray157 */ 489, /* Empty */         0 },
-  { /* deprecated-increment-bool */                             3136, /* DiagArray158 */ 492, /* Empty */         0 },
-  { /* deprecated-objc-isa-usage */                             3162, /* DiagArray159 */ 494, /* Empty */         0 },
-  { /* deprecated-objc-pointer-introspection */                 3188, /* DiagArray160 */ 497, /* DiagSubGroup160 */ 143 },
-  { /* deprecated-objc-pointer-introspection-performSelector */ 3226, /* DiagArray161 */ 499, /* Empty */         0 },
-  { /* deprecated-register */                                   3280, /* DiagArray162 */ 501, /* Empty */         0 },
-  { /* deprecated-writable-strings */                           3300, /* Empty */     0, /* DiagSubGroup163 */ 145 },
-  { /* direct-ivar-access */                                    3328, /* DiagArray164 */ 503, /* Empty */         0 },
-  { /* disabled-macro-expansion */                              3347, /* DiagArray165 */ 505, /* Empty */         0 },
-  { /* disabled-optimization */                                 3372, /* Empty */     0, /* Empty */         0 },
-  { /* discard-qual */                                          3394, /* Empty */     0, /* Empty */         0 },
-  { /* distributed-object-modifiers */                          3407, /* DiagArray168 */ 507, /* Empty */         0 },
-  { /* div-by-zero */                                           3436, /* Empty */     0, /* DiagSubGroup169 */ 147 },
-  { /* division-by-zero */                                      3448, /* DiagArray170 */ 510, /* Empty */         0 },
-  { /* dll-attribute-on-redeclaration */                        3465, /* DiagArray171 */ 512, /* Empty */         0 },
-  { /* dllexport-explicit-instantiation-decl */                 3496, /* DiagArray172 */ 514, /* Empty */         0 },
-  { /* dllimport-static-field-def */                            3534, /* DiagArray173 */ 516, /* Empty */         0 },
-  { /* documentation */                                         3561, /* DiagArray174 */ 518, /* DiagSubGroup174 */ 149 },
-  { /* documentation-deprecated-sync */                         3575, /* DiagArray175 */ 537, /* Empty */         0 },
-  { /* documentation-html */                                    3605, /* DiagArray176 */ 539, /* Empty */         0 },
-  { /* documentation-pedantic */                                3624, /* DiagArray177 */ 544, /* DiagSubGroup177 */ 152 },
-  { /* documentation-unknown-command */                         3647, /* DiagArray178 */ 546, /* Empty */         0 },
-  { /* dollar-in-identifier-extension */                        3677, /* DiagArray179 */ 549, /* Empty */         0 },
-  { /* double-promotion */                                      3708, /* DiagArray180 */ 551, /* Empty */         0 },
-  { /* duplicate-decl-specifier */                              3725, /* DiagArray181 */ 553, /* Empty */         0 },
-  { /* duplicate-enum */                                        3750, /* DiagArray182 */ 556, /* Empty */         0 },
-  { /* duplicate-method-arg */                                  3765, /* DiagArray183 */ 558, /* Empty */         0 },
-  { /* duplicate-method-match */                                3786, /* DiagArray184 */ 560, /* Empty */         0 },
-  { /* duplicate-protocol */                                    3809, /* DiagArray185 */ 562, /* Empty */         0 },
-  { /* dynamic-class-memaccess */                               3828, /* DiagArray186 */ 564, /* Empty */         0 },
-  { /* dynamic-exception-spec */                                3852, /* DiagArray187 */ 566, /* DiagSubGroup187 */ 154 },
-  { /* effc++ */                                                3875, /* Empty */     0, /* DiagSubGroup188 */ 156 },
-  { /* embedded-directive */                                    3882, /* DiagArray189 */ 568, /* Empty */         0 },
-  { /* empty-body */                                            3901, /* DiagArray190 */ 570, /* Empty */         0 },
-  { /* empty-decomposition */                                   3912, /* DiagArray191 */ 576, /* Empty */         0 },
-  { /* empty-translation-unit */                                3932, /* DiagArray192 */ 578, /* Empty */         0 },
-  { /* encode-type */                                           3955, /* DiagArray193 */ 580, /* Empty */         0 },
-  { /* endif-labels */                                          3967, /* Empty */     0, /* DiagSubGroup194 */ 158 },
-  { /* enum-compare */                                          3980, /* DiagArray195 */ 582, /* DiagSubGroup195 */ 160 },
-  { /* enum-compare-switch */                                   3993, /* DiagArray196 */ 584, /* Empty */         0 },
-  { /* enum-conversion */                                       4013, /* DiagArray197 */ 586, /* Empty */         0 },
-  { /* enum-too-large */                                        4029, /* DiagArray198 */ 588, /* Empty */         0 },
-  { /* exceptions */                                            4044, /* DiagArray199 */ 591, /* Empty */         0 },
-  { /* exit-time-destructors */                                 4055, /* DiagArray200 */ 595, /* Empty */         0 },
-  { /* expansion-to-defined */                                  4077, /* DiagArray201 */ 597, /* Empty */         0 },
-  { /* experimental-isel */                                     4098, /* DiagArray202 */ 600, /* Empty */         0 },
-  { /* explicit-initialize-call */                              4116, /* DiagArray203 */ 603, /* Empty */         0 },
-  { /* explicit-ownership-type */                               4141, /* DiagArray204 */ 606, /* Empty */         0 },
-  { /* extern-c-compat */                                       4165, /* DiagArray205 */ 608, /* Empty */         0 },
-  { /* extern-initializer */                                    4181, /* DiagArray206 */ 610, /* Empty */         0 },
-  { /* extra */                                                 4200, /* DiagArray207 */ 612, /* DiagSubGroup207 */ 162 },
-  { /* extra-qualification */                                   4206, /* DiagArray208 */ 614, /* Empty */         0 },
-  { /* extra-semi */                                            4226, /* DiagArray209 */ 616, /* DiagSubGroup209 */ 171 },
-  { /* extra-tokens */                                          4237, /* DiagArray210 */ 619, /* Empty */         0 },
-  { /* fallback */                                              4250, /* DiagArray211 */ 622, /* Empty */         0 },
-  { /* flag-enum */                                             4259, /* DiagArray212 */ 624, /* Empty */         0 },
-  { /* flexible-array-extensions */                             4269, /* DiagArray213 */ 626, /* Empty */         0 },
-  { /* float-conversion */                                      4295, /* DiagArray214 */ 629, /* DiagSubGroup214 */ 174 },
-  { /* float-equal */                                           4312, /* DiagArray215 */ 631, /* Empty */         0 },
-  { /* float-overflow-conversion */                             4324, /* DiagArray216 */ 633, /* Empty */         0 },
-  { /* float-zero-conversion */                                 4350, /* DiagArray217 */ 635, /* Empty */         0 },
-  { /* for-loop-analysis */                                     4372, /* DiagArray218 */ 637, /* Empty */         0 },
-  { /* format */                                                4390, /* DiagArray219 */ 640, /* DiagSubGroup219 */ 177 },
-  { /* format-extra-args */                                     4397, /* DiagArray220 */ 666, /* Empty */         0 },
-  { /* format-invalid-specifier */                              4415, /* DiagArray221 */ 668, /* Empty */         0 },
-  { /* format-non-iso */                                        4440, /* DiagArray222 */ 670, /* Empty */         0 },
-  { /* format-nonliteral */                                     4455, /* DiagArray223 */ 674, /* Empty */         0 },
-  { /* format-pedantic */                                       4473, /* DiagArray224 */ 676, /* Empty */         0 },
-  { /* format-security */                                       4489, /* DiagArray225 */ 678, /* Empty */         0 },
-  { /* format-y2k */                                            4505, /* Empty */     0, /* Empty */         0 },
-  { /* format-zero-length */                                    4516, /* DiagArray227 */ 680, /* Empty */         0 },
-  { /* format=2 */                                              4535, /* Empty */     0, /* DiagSubGroup228 */ 184 },
-  { /* four-char-constants */                                   4544, /* DiagArray229 */ 682, /* Empty */         0 },
-  { /* frame-larger-than= */                                    4564, /* DiagArray230 */ 684, /* Empty */         0 },
-  { /* function-def-in-objc-container */                        4583, /* DiagArray231 */ 687, /* Empty */         0 },
-  { /* future-compat */                                         4614, /* Empty */     0, /* Empty */         0 },
-  { /* gcc-compat */                                            4628, /* DiagArray233 */ 689, /* Empty */         0 },
-  { /* global-constructors */                                   4639, /* DiagArray234 */ 698, /* Empty */         0 },
-  { /* gnu */                                                   4659, /* Empty */     0, /* DiagSubGroup235 */ 188 },
-  { /* gnu-alignof-expression */                                4663, /* DiagArray236 */ 701, /* Empty */         0 },
-  { /* gnu-anonymous-struct */                                  4686, /* DiagArray237 */ 703, /* Empty */         0 },
-  { /* gnu-array-member-paren-init */                           4707, /* DiagArray238 */ 705, /* Empty */         0 },
-  { /* gnu-auto-type */                                         4735, /* DiagArray239 */ 707, /* Empty */         0 },
-  { /* gnu-binary-literal */                                    4749, /* DiagArray240 */ 709, /* Empty */         0 },
-  { /* gnu-case-range */                                        4768, /* DiagArray241 */ 711, /* Empty */         0 },
-  { /* gnu-complex-integer */                                   4783, /* DiagArray242 */ 713, /* Empty */         0 },
-  { /* gnu-compound-literal-initializer */                      4803, /* DiagArray243 */ 715, /* Empty */         0 },
-  { /* gnu-conditional-omitted-operand */                       4836, /* DiagArray244 */ 717, /* Empty */         0 },
-  { /* gnu-designator */                                        4868, /* DiagArray245 */ 719, /* Empty */         0 },
-  { /* gnu-empty-initializer */                                 4883, /* DiagArray246 */ 723, /* Empty */         0 },
-  { /* gnu-empty-struct */                                      4905, /* DiagArray247 */ 725, /* Empty */         0 },
-  { /* gnu-flexible-array-initializer */                        4922, /* DiagArray248 */ 729, /* Empty */         0 },
-  { /* gnu-flexible-array-union-member */                       4953, /* DiagArray249 */ 731, /* Empty */         0 },
-  { /* gnu-folding-constant */                                  4985, /* DiagArray250 */ 733, /* Empty */         0 },
-  { /* gnu-imaginary-constant */                                5006, /* DiagArray251 */ 737, /* Empty */         0 },
-  { /* gnu-include-next */                                      5029, /* DiagArray252 */ 739, /* Empty */         0 },
-  { /* gnu-label-as-value */                                    5046, /* DiagArray253 */ 741, /* Empty */         0 },
-  { /* gnu-redeclared-enum */                                   5065, /* DiagArray254 */ 744, /* Empty */         0 },
-  { /* gnu-statement-expression */                              5085, /* DiagArray255 */ 746, /* Empty */         0 },
-  { /* gnu-static-float-init */                                 5110, /* DiagArray256 */ 748, /* Empty */         0 },
-  { /* gnu-string-literal-operator-template */                  5132, /* DiagArray257 */ 750, /* Empty */         0 },
-  { /* gnu-union-cast */                                        5169, /* DiagArray258 */ 752, /* Empty */         0 },
-  { /* gnu-variable-sized-type-not-at-end */                    5184, /* DiagArray259 */ 754, /* Empty */         0 },
-  { /* gnu-zero-line-directive */                               5219, /* DiagArray260 */ 756, /* Empty */         0 },
-  { /* gnu-zero-variadic-macro-arguments */                     5243, /* DiagArray261 */ 758, /* Empty */         0 },
-  { /* header-guard */                                          5277, /* DiagArray262 */ 761, /* Empty */         0 },
-  { /* header-hygiene */                                        5290, /* DiagArray263 */ 763, /* Empty */         0 },
-  { /* idiomatic-parentheses */                                 5305, /* DiagArray264 */ 765, /* Empty */         0 },
-  { /* ignored-attributes */                                    5327, /* DiagArray265 */ 767, /* Empty */         0 },
-  { /* ignored-optimization-argument */                         5346, /* DiagArray266 */ 824, /* Empty */         0 },
-  { /* ignored-pragma-intrinsic */                              5376, /* DiagArray267 */ 827, /* Empty */         0 },
-  { /* ignored-pragma-optimize */                               5401, /* DiagArray268 */ 829, /* Empty */         0 },
-  { /* ignored-pragmas */                                       5425, /* DiagArray269 */ 831, /* DiagSubGroup269 */ 217 },
-  { /* ignored-qualifiers */                                    5441, /* DiagArray270 */ 874, /* Empty */         0 },
-  { /* implicit */                                              5460, /* Empty */     0, /* DiagSubGroup271 */ 220 },
-  { /* implicit-atomic-properties */                            5469, /* DiagArray272 */ 880, /* Empty */         0 },
-  { /* implicit-conversion-floating-point-to-bool */            5496, /* DiagArray273 */ 883, /* Empty */         0 },
-  { /* implicit-exception-spec-mismatch */                      5539, /* DiagArray274 */ 885, /* Empty */         0 },
-  { /* implicit-fallthrough */                                  5572, /* DiagArray275 */ 887, /* DiagSubGroup275 */ 223 },
-  { /* implicit-fallthrough-per-function */                     5593, /* DiagArray276 */ 890, /* Empty */         0 },
-  { /* implicit-function-declaration */                         5627, /* DiagArray277 */ 892, /* Empty */         0 },
-  { /* implicit-int */                                          5657, /* DiagArray278 */ 897, /* Empty */         0 },
-  { /* implicit-retain-self */                                  5670, /* DiagArray279 */ 899, /* Empty */         0 },
-  { /* implicitly-unsigned-literal */                           5691, /* DiagArray280 */ 901, /* Empty */         0 },
-  { /* import */                                                5719, /* Empty */     0, /* Empty */         0 },
-  { /* import-preprocessor-directive-pedantic */                5726, /* DiagArray282 */ 903, /* Empty */         0 },
-  { /* inaccessible-base */                                     5765, /* DiagArray283 */ 905, /* Empty */         0 },
-  { /* include-next-absolute-path */                            5783, /* DiagArray284 */ 907, /* Empty */         0 },
-  { /* include-next-outside-header */                           5810, /* DiagArray285 */ 909, /* Empty */         0 },
-  { /* incompatible-exception-spec */                           5838, /* DiagArray286 */ 911, /* Empty */         0 },
-  { /* incompatible-function-pointer-types */                   5866, /* DiagArray287 */ 914, /* Empty */         0 },
-  { /* incompatible-library-redeclaration */                    5902, /* DiagArray288 */ 916, /* Empty */         0 },
-  { /* incompatible-ms-struct */                                5937, /* DiagArray289 */ 918, /* Empty */         0 },
-  { /* incompatible-pointer-types */                            5960, /* DiagArray290 */ 921, /* DiagSubGroup290 */ 225 },
-  { /* incompatible-pointer-types-discards-qualifiers */        5987, /* DiagArray291 */ 923, /* Empty */         0 },
-  { /* incompatible-property-type */                            6034, /* DiagArray292 */ 926, /* Empty */         0 },
-  { /* incompatible-sysroot */                                  6061, /* DiagArray293 */ 928, /* Empty */         0 },
-  { /* incomplete-implementation */                             6082, /* DiagArray294 */ 930, /* Empty */         0 },
-  { /* incomplete-module */                                     6108, /* Empty */     0, /* DiagSubGroup295 */ 228 },
-  { /* incomplete-umbrella */                                   6126, /* DiagArray296 */ 932, /* Empty */         0 },
-  { /* inconsistent-dllimport */                                6146, /* DiagArray297 */ 936, /* Empty */         0 },
-  { /* inconsistent-missing-destructor-override */              6169, /* DiagArray298 */ 939, /* Empty */         0 },
-  { /* inconsistent-missing-override */                         6210, /* DiagArray299 */ 941, /* Empty */         0 },
-  { /* increment-bool */                                        6240, /* DiagArray300 */ 943, /* DiagSubGroup300 */ 231 },
-  { /* infinite-recursion */                                    6255, /* DiagArray301 */ 945, /* Empty */         0 },
-  { /* init-self */                                             6274, /* Empty */     0, /* Empty */         0 },
-  { /* initializer-overrides */                                 6284, /* DiagArray303 */ 947, /* Empty */         0 },
-  { /* injected-class-name */                                   6306, /* DiagArray304 */ 950, /* Empty */         0 },
-  { /* inline */                                                6326, /* Empty */     0, /* Empty */         0 },
-  { /* inline-asm */                                            6333, /* DiagArray306 */ 952, /* Empty */         0 },
-  { /* inline-new-delete */                                     6344, /* DiagArray307 */ 954, /* Empty */         0 },
-  { /* instantiation-after-specialization */                    6362, /* DiagArray308 */ 956, /* Empty */         0 },
-  { /* int-conversion */                                        6397, /* DiagArray309 */ 958, /* Empty */         0 },
-  { /* int-conversions */                                       6412, /* Empty */     0, /* DiagSubGroup310 */ 233 },
-  { /* int-to-pointer-cast */                                   6428, /* DiagArray311 */ 961, /* DiagSubGroup311 */ 235 },
-  { /* int-to-void-pointer-cast */                              6448, /* DiagArray312 */ 963, /* Empty */         0 },
-  { /* integer-overflow */                                      6473, /* DiagArray313 */ 965, /* Empty */         0 },
-  { /* invalid-command-line-argument */                         6490, /* DiagArray314 */ 967, /* DiagSubGroup314 */ 237 },
-  { /* invalid-constexpr */                                     6520, /* DiagArray315 */ 970, /* Empty */         0 },
-  { /* invalid-iboutlet */                                      6538, /* DiagArray316 */ 972, /* Empty */         0 },
-  { /* invalid-initializer-from-system-header */                6555, /* DiagArray317 */ 975, /* Empty */         0 },
-  { /* invalid-ios-deployment-target */                         6594, /* DiagArray318 */ 977, /* Empty */         0 },
-  { /* invalid-noreturn */                                      6624, /* DiagArray319 */ 979, /* Empty */         0 },
-  { /* invalid-offsetof */                                      6641, /* DiagArray320 */ 982, /* Empty */         0 },
-  { /* invalid-or-nonexistent-directory */                      6658, /* DiagArray321 */ 985, /* Empty */         0 },
-  { /* invalid-partial-specialization */                        6691, /* DiagArray322 */ 988, /* Empty */         0 },
-  { /* invalid-pch */                                           6722, /* Empty */     0, /* Empty */         0 },
-  { /* invalid-pp-token */                                      6734, /* DiagArray324 */ 990, /* Empty */         0 },
-  { /* invalid-source-encoding */                               6751, /* DiagArray325 */ 993, /* Empty */         0 },
-  { /* invalid-token-paste */                                   6775, /* DiagArray326 */ 996, /* Empty */         0 },
-  { /* jump-seh-finally */                                      6795, /* DiagArray327 */ 998, /* Empty */         0 },
-  { /* keyword-compat */                                        6812, /* DiagArray328 */ 1000, /* Empty */         0 },
-  { /* keyword-macro */                                         6827, /* DiagArray329 */ 1002, /* Empty */         0 },
-  { /* knr-promoted-parameter */                                6841, /* DiagArray330 */ 1004, /* Empty */         0 },
-  { /* language-extension-token */                              6864, /* DiagArray331 */ 1006, /* Empty */         0 },
-  { /* large-by-value-copy */                                   6889, /* DiagArray332 */ 1008, /* Empty */         0 },
-  { /* liblto */                                                6909, /* Empty */     0, /* Empty */         0 },
-  { /* literal-conversion */                                    6916, /* DiagArray334 */ 1011, /* Empty */         0 },
-  { /* literal-range */                                         6935, /* DiagArray335 */ 1013, /* Empty */         0 },
-  { /* local-type-template-args */                              6949, /* DiagArray336 */ 1016, /* DiagSubGroup336 */ 239 },
-  { /* logical-not-parentheses */                               6974, /* DiagArray337 */ 1018, /* Empty */         0 },
-  { /* logical-op-parentheses */                                6998, /* DiagArray338 */ 1020, /* Empty */         0 },
-  { /* long-long */                                             7021, /* DiagArray339 */ 1022, /* DiagSubGroup339 */ 241 },
-  { /* loop-analysis */                                         7031, /* Empty */     0, /* DiagSubGroup340 */ 243 },
-  { /* macro-redefined */                                       7045, /* DiagArray341 */ 1024, /* Empty */         0 },
-  { /* main */                                                  7061, /* DiagArray342 */ 1026, /* Empty */         0 },
-  { /* main-return-type */                                      7066, /* DiagArray343 */ 1034, /* Empty */         0 },
-  { /* malformed-warning-check */                               7083, /* DiagArray344 */ 1036, /* Empty */         0 },
-  { /* many-braces-around-scalar-init */                        7107, /* DiagArray345 */ 1038, /* Empty */         0 },
-  { /* max-unsigned-zero */                                     7138, /* DiagArray346 */ 1040, /* Empty */         0 },
-  { /* memsize-comparison */                                    7156, /* DiagArray347 */ 1042, /* Empty */         0 },
-  { /* method-signatures */                                     7175, /* DiagArray348 */ 1044, /* Empty */         0 },
-  { /* microsoft */                                             7193, /* Empty */     0, /* DiagSubGroup349 */ 246 },
-  { /* microsoft-anon-tag */                                    7203, /* DiagArray350 */ 1047, /* Empty */         0 },
-  { /* microsoft-cast */                                        7222, /* DiagArray351 */ 1050, /* Empty */         0 },
-  { /* microsoft-charize */                                     7237, /* DiagArray352 */ 1053, /* Empty */         0 },
-  { /* microsoft-comment-paste */                               7255, /* DiagArray353 */ 1055, /* Empty */         0 },
-  { /* microsoft-const-init */                                  7279, /* DiagArray354 */ 1057, /* Empty */         0 },
-  { /* microsoft-cpp-macro */                                   7300, /* DiagArray355 */ 1059, /* Empty */         0 },
-  { /* microsoft-default-arg-redefinition */                    7320, /* DiagArray356 */ 1061, /* Empty */         0 },
-  { /* microsoft-end-of-file */                                 7355, /* DiagArray357 */ 1063, /* Empty */         0 },
-  { /* microsoft-enum-forward-reference */                      7377, /* DiagArray358 */ 1065, /* Empty */         0 },
-  { /* microsoft-enum-value */                                  7410, /* DiagArray359 */ 1067, /* Empty */         0 },
-  { /* microsoft-exception-spec */                              7431, /* DiagArray360 */ 1069, /* Empty */         0 },
-  { /* microsoft-exists */                                      7456, /* DiagArray361 */ 1076, /* Empty */         0 },
-  { /* microsoft-explicit-constructor-call */                   7473, /* DiagArray362 */ 1078, /* Empty */         0 },
-  { /* microsoft-extra-qualification */                         7509, /* DiagArray363 */ 1080, /* Empty */         0 },
-  { /* microsoft-fixed-enum */                                  7539, /* DiagArray364 */ 1082, /* Empty */         0 },
-  { /* microsoft-flexible-array */                              7560, /* DiagArray365 */ 1084, /* Empty */         0 },
-  { /* microsoft-goto */                                        7585, /* DiagArray366 */ 1087, /* Empty */         0 },
-  { /* microsoft-inaccessible-base */                           7600, /* DiagArray367 */ 1089, /* Empty */         0 },
-  { /* microsoft-include */                                     7628, /* DiagArray368 */ 1091, /* Empty */         0 },
-  { /* microsoft-mutable-reference */                           7646, /* DiagArray369 */ 1093, /* Empty */         0 },
-  { /* microsoft-pure-definition */                             7674, /* DiagArray370 */ 1095, /* Empty */         0 },
-  { /* microsoft-redeclare-static */                            7700, /* DiagArray371 */ 1097, /* Empty */         0 },
-  { /* microsoft-sealed */                                      7727, /* DiagArray372 */ 1099, /* Empty */         0 },
-  { /* microsoft-template */                                    7744, /* DiagArray373 */ 1101, /* Empty */         0 },
-  { /* microsoft-union-member-reference */                      7763, /* DiagArray374 */ 1109, /* Empty */         0 },
-  { /* microsoft-unqualified-friend */                          7796, /* DiagArray375 */ 1111, /* Empty */         0 },
-  { /* microsoft-using-decl */                                  7825, /* DiagArray376 */ 1113, /* Empty */         0 },
-  { /* microsoft-void-pseudo-dtor */                            7846, /* DiagArray377 */ 1115, /* Empty */         0 },
-  { /* mismatched-new-delete */                                 7873, /* DiagArray378 */ 1117, /* Empty */         0 },
-  { /* mismatched-parameter-types */                            7895, /* DiagArray379 */ 1119, /* Empty */         0 },
-  { /* mismatched-return-types */                               7922, /* DiagArray380 */ 1121, /* Empty */         0 },
-  { /* mismatched-tags */                                       7946, /* DiagArray381 */ 1123, /* Empty */         0 },
-  { /* missing-braces */                                        7962, /* DiagArray382 */ 1126, /* Empty */         0 },
-  { /* missing-declarations */                                  7977, /* DiagArray383 */ 1128, /* Empty */         0 },
-  { /* missing-exception-spec */                                7998, /* DiagArray384 */ 1133, /* Empty */         0 },
-  { /* missing-field-initializers */                            8021, /* DiagArray385 */ 1135, /* Empty */         0 },
-  { /* missing-format-attribute */                              8048, /* Empty */     0, /* Empty */         0 },
-  { /* missing-include-dirs */                                  8073, /* Empty */     0, /* Empty */         0 },
-  { /* missing-method-return-type */                            8094, /* DiagArray388 */ 1137, /* Empty */         0 },
-  { /* missing-noescape */                                      8121, /* DiagArray389 */ 1139, /* Empty */         0 },
-  { /* missing-noreturn */                                      8138, /* DiagArray390 */ 1141, /* Empty */         0 },
-  { /* missing-prototype-for-cc */                              8155, /* DiagArray391 */ 1144, /* Empty */         0 },
-  { /* missing-prototypes */                                    8180, /* DiagArray392 */ 1146, /* Empty */         0 },
-  { /* missing-selector-name */                                 8199, /* DiagArray393 */ 1148, /* Empty */         0 },
-  { /* missing-sysroot */                                       8221, /* DiagArray394 */ 1150, /* Empty */         0 },
-  { /* missing-variable-declarations */                         8237, /* DiagArray395 */ 1152, /* Empty */         0 },
-  { /* module-build */                                          8267, /* DiagArray396 */ 1154, /* Empty */         0 },
-  { /* module-conflict */                                       8280, /* DiagArray397 */ 1159, /* Empty */         0 },
-  { /* module-file-config-mismatch */                           8296, /* DiagArray398 */ 1162, /* Empty */         0 },
-  { /* module-file-extension */                                 8324, /* DiagArray399 */ 1164, /* Empty */         0 },
-  { /* module-import-in-extern-c */                             8346, /* DiagArray400 */ 1166, /* Empty */         0 },
-  { /* modules-ambiguous-internal-linkage */                    8372, /* DiagArray401 */ 1168, /* Empty */         0 },
-  { /* modules-import-nested-redundant */                       8407, /* DiagArray402 */ 1170, /* Empty */         0 },
-  { /* most */                                                  8439, /* Empty */     0, /* DiagSubGroup403 */ 274 },
-  { /* move */                                                  8444, /* Empty */     0, /* DiagSubGroup404 */ 306 },
-  { /* msvc-include */                                          8449, /* Empty */     0, /* DiagSubGroup405 */ 310 },
-  { /* msvc-not-found */                                        8462, /* DiagArray406 */ 1172, /* Empty */         0 },
-  { /* multichar */                                             8477, /* DiagArray407 */ 1174, /* Empty */         0 },
-  { /* multiple-move-vbase */                                   8487, /* DiagArray408 */ 1176, /* Empty */         0 },
-  { /* narrowing */                                             8507, /* Empty */     0, /* DiagSubGroup409 */ 312 },
-  { /* nested-anon-types */                                     8517, /* DiagArray410 */ 1178, /* Empty */         0 },
-  { /* nested-externs */                                        8535, /* Empty */     0, /* Empty */         0 },
-  { /* new-returns-null */                                      8550, /* DiagArray412 */ 1180, /* Empty */         0 },
-  { /* newline-eof */                                           8567, /* DiagArray413 */ 1182, /* Empty */         0 },
-  { /* noexcept-type */                                         8579, /* Empty */     0, /* DiagSubGroup414 */ 314 },
-  { /* non-gcc */                                               8593, /* Empty */     0, /* DiagSubGroup415 */ 316 },
-  { /* non-literal-null-conversion */                           8601, /* DiagArray416 */ 1185, /* Empty */         0 },
-  { /* non-modular-include-in-framework-module */               8629, /* DiagArray417 */ 1187, /* Empty */         0 },
-  { /* non-modular-include-in-module */                         8669, /* DiagArray418 */ 1189, /* DiagSubGroup418 */ 320 },
-  { /* non-pod-varargs */                                       8699, /* DiagArray419 */ 1191, /* Empty */         0 },
-  { /* non-virtual-dtor */                                      8715, /* DiagArray420 */ 1196, /* Empty */         0 },
-  { /* nonnull */                                               8732, /* DiagArray421 */ 1198, /* Empty */         0 },
-  { /* nonportable-cfstrings */                                 8740, /* Empty */     0, /* Empty */         0 },
-  { /* nonportable-include-path */                              8762, /* DiagArray423 */ 1201, /* Empty */         0 },
-  { /* nonportable-system-include-path */                       8787, /* DiagArray424 */ 1203, /* Empty */         0 },
-  { /* nonportable-vector-initialization */                     8819, /* DiagArray425 */ 1205, /* Empty */         0 },
-  { /* nsconsumed-mismatch */                                   8853, /* DiagArray426 */ 1207, /* Empty */         0 },
-  { /* nsreturns-mismatch */                                    8873, /* DiagArray427 */ 1209, /* Empty */         0 },
-  { /* null-arithmetic */                                       8892, /* DiagArray428 */ 1211, /* Empty */         0 },
-  { /* null-character */                                        8908, /* DiagArray429 */ 1214, /* Empty */         0 },
-  { /* null-conversion */                                       8923, /* DiagArray430 */ 1217, /* Empty */         0 },
-  { /* null-dereference */                                      8939, /* DiagArray431 */ 1219, /* Empty */         0 },
-  { /* null-pointer-arithmetic */                               8956, /* DiagArray432 */ 1222, /* Empty */         0 },
-  { /* nullability */                                           8980, /* DiagArray433 */ 1225, /* Empty */         0 },
-  { /* nullability-completeness */                              8992, /* DiagArray434 */ 1231, /* DiagSubGroup434 */ 322 },
-  { /* nullability-completeness-on-arrays */                    9017, /* DiagArray435 */ 1233, /* Empty */         0 },
-  { /* nullability-declspec */                                  9052, /* DiagArray436 */ 1235, /* Empty */         0 },
-  { /* nullability-extension */                                 9073, /* DiagArray437 */ 1237, /* Empty */         0 },
-  { /* nullability-inferred-on-nested-type */                   9095, /* DiagArray438 */ 1239, /* Empty */         0 },
-  { /* nullable-to-nonnull-conversion */                        9131, /* DiagArray439 */ 1241, /* Empty */         0 },
-  { /* objc-autosynthesis-property-ivar-name-match */           9162, /* DiagArray440 */ 1243, /* Empty */         0 },
-  { /* objc-circular-container */                               9206, /* DiagArray441 */ 1245, /* Empty */         0 },
-  { /* objc-cocoa-api */                                        9230, /* Empty */     0, /* DiagSubGroup442 */ 324 },
-  { /* objc-designated-initializers */                          9245, /* DiagArray443 */ 1247, /* Empty */         0 },
-  { /* objc-flexible-array */                                   9274, /* DiagArray444 */ 1254, /* Empty */         0 },
-  { /* objc-forward-class-redefinition */                       9294, /* DiagArray445 */ 1257, /* Empty */         0 },
-  { /* objc-interface-ivars */                                  9326, /* DiagArray446 */ 1259, /* Empty */         0 },
-  { /* objc-literal-compare */                                  9347, /* DiagArray447 */ 1261, /* DiagSubGroup447 */ 326 },
-  { /* objc-literal-conversion */                               9368, /* DiagArray448 */ 1263, /* Empty */         0 },
-  { /* objc-macro-redefinition */                               9392, /* DiagArray449 */ 1266, /* Empty */         0 },
-  { /* objc-messaging-id */                                     9416, /* DiagArray450 */ 1268, /* Empty */         0 },
-  { /* objc-method-access */                                    9434, /* DiagArray451 */ 1270, /* Empty */         0 },
-  { /* objc-missing-property-synthesis */                       9453, /* DiagArray452 */ 1277, /* Empty */         0 },
-  { /* objc-missing-super-calls */                              9485, /* DiagArray453 */ 1279, /* Empty */         0 },
-  { /* objc-multiple-method-names */                            9510, /* DiagArray454 */ 1281, /* Empty */         0 },
-  { /* objc-noncopy-retain-block-property */                    9537, /* DiagArray455 */ 1283, /* Empty */         0 },
-  { /* objc-nonunified-exceptions */                            9572, /* DiagArray456 */ 1285, /* Empty */         0 },
-  { /* objc-property-implementation */                          9599, /* DiagArray457 */ 1287, /* Empty */         0 },
-  { /* objc-property-implicit-mismatch */                       9628, /* DiagArray458 */ 1292, /* Empty */         0 },
-  { /* objc-property-matches-cocoa-ownership-rule */            9660, /* DiagArray459 */ 1294, /* Empty */         0 },
-  { /* objc-property-no-attribute */                            9703, /* DiagArray460 */ 1296, /* Empty */         0 },
-  { /* objc-property-synthesis */                               9730, /* DiagArray461 */ 1299, /* Empty */         0 },
-  { /* objc-protocol-method-implementation */                   9754, /* DiagArray462 */ 1303, /* Empty */         0 },
-  { /* objc-protocol-property-synthesis */                      9790, /* DiagArray463 */ 1305, /* Empty */         0 },
-  { /* objc-protocol-qualifiers */                              9823, /* DiagArray464 */ 1307, /* Empty */         0 },
-  { /* objc-readonly-with-setter-property */                    9848, /* DiagArray465 */ 1309, /* Empty */         0 },
-  { /* objc-redundant-api-use */                                9883, /* Empty */     0, /* DiagSubGroup466 */ 328 },
-  { /* objc-redundant-literal-use */                            9906, /* DiagArray467 */ 1311, /* Empty */         0 },
-  { /* objc-root-class */                                       9933, /* DiagArray468 */ 1313, /* Empty */         0 },
-  { /* objc-string-compare */                                   9949, /* DiagArray469 */ 1315, /* Empty */         0 },
-  { /* objc-string-concatenation */                             9969, /* DiagArray470 */ 1317, /* Empty */         0 },
-  { /* objc-unsafe-perform-selector */                          9995, /* DiagArray471 */ 1319, /* Empty */         0 },
-  { /* odr */                                                   10024, /* DiagArray472 */ 1321, /* Empty */         0 },
-  { /* old-style-cast */                                        10028, /* DiagArray473 */ 1323, /* Empty */         0 },
-  { /* old-style-definition */                                  10043, /* Empty */     0, /* Empty */         0 },
-  { /* opencl-unsupported-rgba */                               10064, /* DiagArray475 */ 1325, /* Empty */         0 },
-  { /* openmp-clauses */                                        10088, /* DiagArray476 */ 1327, /* Empty */         0 },
-  { /* openmp-loop-form */                                      10103, /* DiagArray477 */ 1330, /* Empty */         0 },
-  { /* openmp-target */                                         10120, /* DiagArray478 */ 1333, /* Empty */         0 },
-  { /* option-ignored */                                        10134, /* DiagArray479 */ 1338, /* Empty */         0 },
-  { /* out-of-line-declaration */                               10149, /* DiagArray480 */ 1343, /* Empty */         0 },
-  { /* out-of-scope-function */                                 10173, /* DiagArray481 */ 1345, /* Empty */         0 },
-  { /* over-aligned */                                          10195, /* DiagArray482 */ 1347, /* Empty */         0 },
-  { /* overflow */                                              10208, /* Empty */     0, /* Empty */         0 },
-  { /* overlength-strings */                                    10217, /* DiagArray484 */ 1349, /* Empty */         0 },
-  { /* overloaded-shift-op-parentheses */                       10236, /* DiagArray485 */ 1351, /* Empty */         0 },
-  { /* overloaded-virtual */                                    10268, /* DiagArray486 */ 1353, /* Empty */         0 },
-  { /* override-module */                                       10287, /* DiagArray487 */ 1355, /* Empty */         0 },
-  { /* overriding-method-mismatch */                            10303, /* DiagArray488 */ 1357, /* Empty */         0 },
-  { /* overriding-t-option */                                   10330, /* DiagArray489 */ 1365, /* Empty */         0 },
-  { /* packed */                                                10350, /* DiagArray490 */ 1367, /* Empty */         0 },
-  { /* padded */                                                10357, /* DiagArray491 */ 1369, /* Empty */         0 },
-  { /* parentheses */                                           10364, /* DiagArray492 */ 1373, /* DiagSubGroup492 */ 330 },
-  { /* parentheses-equality */                                  10376, /* DiagArray493 */ 1377, /* Empty */         0 },
-  { /* partial-availability */                                  10397, /* Empty */     0, /* DiagSubGroup494 */ 338 },
-  { /* pass */                                                  10418, /* DiagArray495 */ 1379, /* Empty */         0 },
-  { /* pass-analysis */                                         10423, /* DiagArray496 */ 1381, /* Empty */         0 },
-  { /* pass-failed */                                           10437, /* DiagArray497 */ 1385, /* Empty */         0 },
-  { /* pass-missed */                                           10449, /* DiagArray498 */ 1387, /* Empty */         0 },
-  { /* pch-date-time */                                         10461, /* DiagArray499 */ 1389, /* Empty */         0 },
-  { /* pedantic */                                              10475, /* DiagArray500 */ 1391, /* DiagSubGroup500 */ 340 },
-  { /* pedantic-core-features */                                10484, /* DiagArray501 */ 1460, /* Empty */         0 },
-  { /* pessimizing-move */                                      10507, /* DiagArray502 */ 1462, /* Empty */         0 },
-  { /* pointer-arith */                                         10524, /* DiagArray503 */ 1465, /* Empty */         0 },
-  { /* pointer-bool-conversion */                               10538, /* DiagArray504 */ 1472, /* Empty */         0 },
-  { /* pointer-sign */                                          10562, /* DiagArray505 */ 1475, /* Empty */         0 },
-  { /* pointer-to-int-cast */                                   10575, /* Empty */     0, /* Empty */         0 },
-  { /* pointer-type-mismatch */                                 10595, /* DiagArray507 */ 1477, /* Empty */         0 },
-  { /* potentially-evaluated-expression */                      10617, /* DiagArray508 */ 1479, /* Empty */         0 },
-  { /* pragma-clang-attribute */                                10650, /* DiagArray509 */ 1481, /* Empty */         0 },
-  { /* pragma-once-outside-header */                            10673, /* DiagArray510 */ 1483, /* Empty */         0 },
-  { /* pragma-pack */                                           10700, /* DiagArray511 */ 1485, /* DiagSubGroup511 */ 392 },
-  { /* pragma-pack-suspicious-include */                        10712, /* DiagArray512 */ 1488, /* Empty */         0 },
-  { /* pragma-system-header-outside-header */                   10743, /* DiagArray513 */ 1490, /* Empty */         0 },
-  { /* pragmas */                                               10779, /* DiagArray514 */ 1492, /* DiagSubGroup514 */ 394 },
-  { /* predefined-identifier-outside-function */                10787, /* DiagArray515 */ 1494, /* Empty */         0 },
-  { /* private-extern */                                        10826, /* DiagArray516 */ 1496, /* Empty */         0 },
-  { /* private-header */                                        10841, /* DiagArray517 */ 1498, /* Empty */         0 },
-  { /* private-module */                                        10856, /* DiagArray518 */ 1500, /* Empty */         0 },
-  { /* profile-instr-missing */                                 10871, /* DiagArray519 */ 1505, /* Empty */         0 },
-  { /* profile-instr-out-of-date */                             10893, /* DiagArray520 */ 1507, /* Empty */         0 },
-  { /* profile-instr-unprofiled */                              10919, /* DiagArray521 */ 1509, /* Empty */         0 },
-  { /* property-access-dot-syntax */                            10944, /* DiagArray522 */ 1511, /* Empty */         0 },
-  { /* property-attribute-mismatch */                           10971, /* DiagArray523 */ 1513, /* Empty */         0 },
-  { /* protocol */                                              10999, /* DiagArray524 */ 1518, /* Empty */         0 },
-  { /* protocol-property-synthesis-ambiguity */                 11008, /* DiagArray525 */ 1520, /* Empty */         0 },
-  { /* qualified-void-return-type */                            11046, /* DiagArray526 */ 1522, /* Empty */         0 },
-  { /* range-loop-analysis */                                   11073, /* DiagArray527 */ 1524, /* Empty */         0 },
-  { /* readonly-iboutlet-property */                            11093, /* DiagArray528 */ 1528, /* Empty */         0 },
-  { /* receiver-expr */                                         11120, /* DiagArray529 */ 1530, /* Empty */         0 },
-  { /* receiver-forward-class */                                11134, /* DiagArray530 */ 1532, /* Empty */         0 },
-  { /* redeclared-class-member */                               11157, /* DiagArray531 */ 1535, /* Empty */         0 },
-  { /* redundant-decls */                                       11181, /* Empty */     0, /* Empty */         0 },
-  { /* redundant-move */                                        11197, /* DiagArray533 */ 1537, /* Empty */         0 },
-  { /* redundant-parens */                                      11212, /* DiagArray534 */ 1539, /* Empty */         0 },
-  { /* register */                                              11229, /* DiagArray535 */ 1541, /* DiagSubGroup535 */ 399 },
-  { /* reinterpret-base-class */                                11238, /* DiagArray536 */ 1543, /* Empty */         0 },
-  { /* remark-backend-plugin */                                 11261, /* DiagArray537 */ 1545, /* Empty */         0 },
-  { /* reorder */                                               11283, /* DiagArray538 */ 1547, /* Empty */         0 },
-  { /* requires-super-attribute */                              11291, /* DiagArray539 */ 1549, /* Empty */         0 },
-  { /* reserved-id-macro */                                     11316, /* DiagArray540 */ 1551, /* Empty */         0 },
-  { /* reserved-user-defined-literal */                         11334, /* DiagArray541 */ 1553, /* DiagSubGroup541 */ 401 },
-  { /* retained-language-linkage */                             11364, /* DiagArray542 */ 1556, /* Empty */         0 },
-  { /* return-stack-address */                                  11390, /* DiagArray543 */ 1558, /* Empty */         0 },
-  { /* return-type */                                           11411, /* DiagArray544 */ 1562, /* DiagSubGroup544 */ 403 },
-  { /* return-type-c-linkage */                                 11423, /* DiagArray545 */ 1572, /* Empty */         0 },
-  { /* rtti-for-exceptions */                                   11445, /* DiagArray546 */ 1575, /* Empty */         0 },
-  { /* sanitize-address */                                      11465, /* DiagArray547 */ 1577, /* Empty */         0 },
-  { /* section */                                               11482, /* DiagArray548 */ 1580, /* Empty */         0 },
-  { /* selector */                                              11490, /* DiagArray549 */ 1583, /* DiagSubGroup549 */ 405 },
-  { /* selector-type-mismatch */                                11499, /* DiagArray550 */ 1585, /* Empty */         0 },
-  { /* self-assign */                                           11522, /* DiagArray551 */ 1587, /* DiagSubGroup551 */ 407 },
-  { /* self-assign-field */                                     11534, /* DiagArray552 */ 1589, /* Empty */         0 },
-  { /* self-move */                                             11552, /* DiagArray553 */ 1591, /* Empty */         0 },
-  { /* semicolon-before-method-body */                          11562, /* DiagArray554 */ 1593, /* Empty */         0 },
-  { /* sentinel */                                              11591, /* DiagArray555 */ 1595, /* Empty */         0 },
-  { /* sequence-point */                                        11600, /* Empty */     0, /* DiagSubGroup556 */ 409 },
-  { /* serialized-diagnostics */                                11615, /* DiagArray557 */ 1598, /* Empty */         0 },
-  { /* shadow */                                                11638, /* DiagArray558 */ 1601, /* DiagSubGroup558 */ 411 },
-  { /* shadow-all */                                            11645, /* Empty */     0, /* DiagSubGroup559 */ 414 },
-  { /* shadow-field */                                          11656, /* DiagArray560 */ 1603, /* Empty */         0 },
-  { /* shadow-field-in-constructor */                           11669, /* DiagArray561 */ 1605, /* DiagSubGroup561 */ 419 },
-  { /* shadow-field-in-constructor-modified */                  11697, /* DiagArray562 */ 1607, /* Empty */         0 },
-  { /* shadow-ivar */                                           11734, /* DiagArray563 */ 1609, /* Empty */         0 },
-  { /* shadow-uncaptured-local */                               11746, /* DiagArray564 */ 1611, /* Empty */         0 },
-  { /* shift-count-negative */                                  11770, /* DiagArray565 */ 1613, /* Empty */         0 },
-  { /* shift-count-overflow */                                  11791, /* DiagArray566 */ 1615, /* Empty */         0 },
-  { /* shift-negative-value */                                  11812, /* DiagArray567 */ 1617, /* Empty */         0 },
-  { /* shift-op-parentheses */                                  11833, /* DiagArray568 */ 1619, /* Empty */         0 },
-  { /* shift-overflow */                                        11854, /* DiagArray569 */ 1621, /* Empty */         0 },
-  { /* shift-sign-overflow */                                   11869, /* DiagArray570 */ 1623, /* Empty */         0 },
-  { /* shorten-64-to-32 */                                      11889, /* DiagArray571 */ 1625, /* Empty */         0 },
-  { /* sign-compare */                                          11906, /* DiagArray572 */ 1627, /* Empty */         0 },
-  { /* sign-conversion */                                       11919, /* DiagArray573 */ 1629, /* Empty */         0 },
-  { /* sign-promo */                                            11935, /* Empty */     0, /* Empty */         0 },
-  { /* signed-enum-bitfield */                                  11946, /* DiagArray575 */ 1632, /* Empty */         0 },
-  { /* sizeof-array-argument */                                 11967, /* DiagArray576 */ 1634, /* Empty */         0 },
-  { /* sizeof-array-decay */                                    11989, /* DiagArray577 */ 1636, /* Empty */         0 },
-  { /* sizeof-pointer-memaccess */                              12008, /* DiagArray578 */ 1638, /* Empty */         0 },
-  { /* slash-u-filename */                                      12033, /* DiagArray579 */ 1641, /* Empty */         0 },
-  { /* sometimes-uninitialized */                               12050, /* DiagArray580 */ 1643, /* Empty */         0 },
-  { /* source-uses-openmp */                                    12074, /* DiagArray581 */ 1645, /* Empty */         0 },
-  { /* spir-compat */                                           12093, /* DiagArray582 */ 1648, /* Empty */         0 },
-  { /* stack-protector */                                       12105, /* Empty */     0, /* Empty */         0 },
-  { /* static-float-init */                                     12121, /* DiagArray584 */ 1650, /* DiagSubGroup584 */ 421 },
-  { /* static-in-inline */                                      12139, /* DiagArray585 */ 1652, /* Empty */         0 },
-  { /* static-inline-explicit-instantiation */                  12156, /* DiagArray586 */ 1655, /* Empty */         0 },
-  { /* static-local-in-inline */                                12193, /* DiagArray587 */ 1657, /* Empty */         0 },
-  { /* static-self-init */                                      12216, /* DiagArray588 */ 1659, /* Empty */         0 },
-  { /* strict-aliasing */                                       12233, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=0 */                                     12249, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=1 */                                     12267, /* Empty */     0, /* Empty */         0 },
-  { /* strict-aliasing=2 */                                     12285, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow */                                       12303, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=0 */                                     12319, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=1 */                                     12337, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=2 */                                     12355, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=3 */                                     12373, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=4 */                                     12391, /* Empty */     0, /* Empty */         0 },
-  { /* strict-overflow=5 */                                     12409, /* Empty */     0, /* Empty */         0 },
-  { /* strict-prototypes */                                     12427, /* DiagArray600 */ 1661, /* Empty */         0 },
-  { /* strict-selector-match */                                 12445, /* DiagArray601 */ 1663, /* Empty */         0 },
-  { /* string-compare */                                        12467, /* DiagArray602 */ 1665, /* Empty */         0 },
-  { /* string-conversion */                                     12482, /* DiagArray603 */ 1667, /* Empty */         0 },
-  { /* string-plus-char */                                      12500, /* DiagArray604 */ 1669, /* Empty */         0 },
-  { /* string-plus-int */                                       12517, /* DiagArray605 */ 1671, /* Empty */         0 },
-  { /* strlcpy-strlcat-size */                                  12533, /* DiagArray606 */ 1673, /* Empty */         0 },
-  { /* strncat-size */                                          12554, /* DiagArray607 */ 1675, /* Empty */         0 },
-  { /* super-class-method-mismatch */                           12567, /* DiagArray608 */ 1679, /* Empty */         0 },
-  { /* switch */                                                12595, /* DiagArray609 */ 1681, /* Empty */         0 },
-  { /* switch-bool */                                           12602, /* DiagArray610 */ 1685, /* Empty */         0 },
-  { /* switch-default */                                        12614, /* Empty */     0, /* Empty */         0 },
-  { /* switch-enum */                                           12629, /* DiagArray612 */ 1687, /* Empty */         0 },
-  { /* sync-fetch-and-nand-semantics-changed */                 12641, /* DiagArray613 */ 1689, /* Empty */         0 },
-  { /* synth */                                                 12679, /* Empty */     0, /* Empty */         0 },
-  { /* tautological-compare */                                  12685, /* DiagArray615 */ 1691, /* DiagSubGroup615 */ 423 },
-  { /* tautological-constant-compare */                         12706, /* DiagArray616 */ 1694, /* DiagSubGroup616 */ 428 },
-  { /* tautological-constant-in-range-compare */                12736, /* Empty */     0, /* DiagSubGroup617 */ 430 },
-  { /* tautological-constant-out-of-range-compare */            12775, /* DiagArray618 */ 1696, /* Empty */         0 },
-  { /* tautological-overlap-compare */                          12818, /* DiagArray619 */ 1698, /* Empty */         0 },
-  { /* tautological-pointer-compare */                          12847, /* DiagArray620 */ 1700, /* Empty */         0 },
-  { /* tautological-type-limit-compare */                       12876, /* DiagArray621 */ 1703, /* Empty */         0 },
-  { /* tautological-undefined-compare */                        12908, /* DiagArray622 */ 1705, /* Empty */         0 },
-  { /* tautological-unsigned-enum-zero-compare */               12939, /* DiagArray623 */ 1708, /* Empty */         0 },
-  { /* tautological-unsigned-zero-compare */                    12979, /* DiagArray624 */ 1710, /* Empty */         0 },
-  { /* tentative-definition-incomplete-type */                  13014, /* DiagArray625 */ 1712, /* Empty */         0 },
-  { /* thread-safety */                                         13051, /* Empty */     0, /* DiagSubGroup626 */ 434 },
-  { /* thread-safety-analysis */                                13065, /* DiagArray627 */ 1714, /* Empty */         0 },
-  { /* thread-safety-attributes */                              13088, /* DiagArray628 */ 1732, /* Empty */         0 },
-  { /* thread-safety-beta */                                    13113, /* DiagArray629 */ 1738, /* Empty */         0 },
-  { /* thread-safety-negative */                                13132, /* DiagArray630 */ 1740, /* Empty */         0 },
-  { /* thread-safety-precise */                                 13155, /* DiagArray631 */ 1742, /* Empty */         0 },
-  { /* thread-safety-reference */                               13177, /* DiagArray632 */ 1746, /* Empty */         0 },
-  { /* thread-safety-verbose */                                 13201, /* DiagArray633 */ 1749, /* Empty */         0 },
-  { /* trigraphs */                                             13223, /* DiagArray634 */ 1751, /* Empty */         0 },
-  { /* type-limits */                                           13233, /* Empty */     0, /* Empty */         0 },
-  { /* type-safety */                                           13245, /* DiagArray636 */ 1756, /* Empty */         0 },
-  { /* typedef-redefinition */                                  13257, /* DiagArray637 */ 1760, /* Empty */         0 },
-  { /* typename-missing */                                      13278, /* DiagArray638 */ 1762, /* Empty */         0 },
-  { /* unable-to-open-stats-file */                             13295, /* DiagArray639 */ 1764, /* Empty */         0 },
-  { /* unavailable-declarations */                              13321, /* DiagArray640 */ 1766, /* Empty */         0 },
-  { /* undeclared-selector */                                   13346, /* DiagArray641 */ 1768, /* Empty */         0 },
-  { /* undef */                                                 13366, /* DiagArray642 */ 1771, /* Empty */         0 },
-  { /* undefined-bool-conversion */                             13372, /* DiagArray643 */ 1773, /* Empty */         0 },
-  { /* undefined-func-template */                               13398, /* DiagArray644 */ 1776, /* Empty */         0 },
-  { /* undefined-inline */                                      13422, /* DiagArray645 */ 1778, /* Empty */         0 },
-  { /* undefined-internal */                                    13439, /* DiagArray646 */ 1780, /* Empty */         0 },
-  { /* undefined-internal-type */                               13458, /* DiagArray647 */ 1782, /* Empty */         0 },
-  { /* undefined-reinterpret-cast */                            13482, /* DiagArray648 */ 1784, /* Empty */         0 },
-  { /* undefined-var-template */                                13509, /* DiagArray649 */ 1787, /* Empty */         0 },
-  { /* unevaluated-expression */                                13532, /* DiagArray650 */ 1789, /* DiagSubGroup650 */ 439 },
-  { /* unguarded-availability */                                13555, /* DiagArray651 */ 1791, /* DiagSubGroup651 */ 441 },
-  { /* unguarded-availability-new */                            13578, /* DiagArray652 */ 1793, /* Empty */         0 },
-  { /* unicode */                                               13605, /* DiagArray653 */ 1795, /* Empty */         0 },
-  { /* unicode-homoglyph */                                     13613, /* DiagArray654 */ 1801, /* Empty */         0 },
-  { /* unicode-whitespace */                                    13631, /* DiagArray655 */ 1803, /* Empty */         0 },
-  { /* uninitialized */                                         13650, /* DiagArray656 */ 1805, /* DiagSubGroup656 */ 443 },
-  { /* unknown-argument */                                      13664, /* DiagArray657 */ 1813, /* Empty */         0 },
-  { /* unknown-attributes */                                    13681, /* DiagArray658 */ 1816, /* Empty */         0 },
-  { /* unknown-escape-sequence */                               13700, /* DiagArray659 */ 1818, /* Empty */         0 },
-  { /* unknown-pragmas */                                       13724, /* DiagArray660 */ 1820, /* Empty */         0 },
-  { /* unknown-sanitizers */                                    13740, /* DiagArray661 */ 1838, /* Empty */         0 },
-  { /* unknown-warning-option */                                13759, /* DiagArray662 */ 1840, /* Empty */         0 },
-  { /* unnamed-type-template-args */                            13782, /* DiagArray663 */ 1844, /* DiagSubGroup663 */ 446 },
-  { /* unneeded-internal-declaration */                         13809, /* DiagArray664 */ 1846, /* Empty */         0 },
-  { /* unneeded-member-function */                              13839, /* DiagArray665 */ 1849, /* Empty */         0 },
-  { /* unreachable-code */                                      13864, /* DiagArray666 */ 1851, /* DiagSubGroup666 */ 448 },
-  { /* unreachable-code-aggressive */                           13881, /* Empty */     0, /* DiagSubGroup667 */ 450 },
-  { /* unreachable-code-break */                                13909, /* DiagArray668 */ 1853, /* Empty */         0 },
-  { /* unreachable-code-loop-increment */                       13932, /* DiagArray669 */ 1855, /* Empty */         0 },
-  { /* unreachable-code-return */                               13964, /* DiagArray670 */ 1857, /* Empty */         0 },
-  { /* unsequenced */                                           13988, /* DiagArray671 */ 1859, /* Empty */         0 },
-  { /* unsupported-abs */                                       14000, /* DiagArray672 */ 1862, /* Empty */         0 },
-  { /* unsupported-availability-guard */                        14016, /* DiagArray673 */ 1865, /* Empty */         0 },
-  { /* unsupported-cb */                                        14047, /* DiagArray674 */ 1867, /* Empty */         0 },
-  { /* unsupported-dll-base-class-template */                   14062, /* DiagArray675 */ 1869, /* Empty */         0 },
-  { /* unsupported-friend */                                    14098, /* DiagArray676 */ 1871, /* Empty */         0 },
-  { /* unsupported-gpopt */                                     14117, /* DiagArray677 */ 1874, /* Empty */         0 },
-  { /* unsupported-nan */                                       14135, /* DiagArray678 */ 1876, /* Empty */         0 },
-  { /* unsupported-visibility */                                14151, /* DiagArray679 */ 1879, /* Empty */         0 },
-  { /* unusable-partial-specialization */                       14174, /* DiagArray680 */ 1881, /* Empty */         0 },
-  { /* unused */                                                14206, /* Empty */     0, /* DiagSubGroup681 */ 454 },
-  { /* unused-argument */                                       14213, /* Empty */     0, /* Empty */         0 },
-  { /* unused-command-line-argument */                          14229, /* DiagArray683 */ 1883, /* Empty */         0 },
-  { /* unused-comparison */                                     14258, /* DiagArray684 */ 1891, /* Empty */         0 },
-  { /* unused-const-variable */                                 14276, /* DiagArray685 */ 1893, /* Empty */         0 },
-  { /* unused-exception-parameter */                            14298, /* DiagArray686 */ 1895, /* Empty */         0 },
-  { /* unused-function */                                       14325, /* DiagArray687 */ 1897, /* DiagSubGroup687 */ 464 },
-  { /* unused-getter-return-value */                            14341, /* DiagArray688 */ 1899, /* Empty */         0 },
-  { /* unused-label */                                          14368, /* DiagArray689 */ 1901, /* Empty */         0 },
-  { /* unused-lambda-capture */                                 14381, /* DiagArray690 */ 1903, /* Empty */         0 },
-  { /* unused-local-typedef */                                  14403, /* DiagArray691 */ 1905, /* Empty */         0 },
-  { /* unused-local-typedefs */                                 14424, /* Empty */     0, /* DiagSubGroup692 */ 466 },
-  { /* unused-macros */                                         14446, /* DiagArray693 */ 1907, /* Empty */         0 },
-  { /* unused-member-function */                                14460, /* DiagArray694 */ 1909, /* DiagSubGroup694 */ 468 },
-  { /* unused-parameter */                                      14483, /* DiagArray695 */ 1911, /* Empty */         0 },
-  { /* unused-private-field */                                  14500, /* DiagArray696 */ 1913, /* Empty */         0 },
-  { /* unused-property-ivar */                                  14521, /* DiagArray697 */ 1915, /* Empty */         0 },
-  { /* unused-result */                                         14542, /* DiagArray698 */ 1917, /* Empty */         0 },
-  { /* unused-template */                                       14556, /* DiagArray699 */ 1919, /* DiagSubGroup699 */ 470 },
-  { /* unused-value */                                          14572, /* DiagArray700 */ 1921, /* DiagSubGroup700 */ 472 },
-  { /* unused-variable */                                       14585, /* DiagArray701 */ 1926, /* DiagSubGroup701 */ 476 },
-  { /* unused-volatile-lvalue */                                14601, /* DiagArray702 */ 1928, /* Empty */         0 },
-  { /* used-but-marked-unused */                                14624, /* DiagArray703 */ 1930, /* Empty */         0 },
-  { /* user-defined-literals */                                 14647, /* DiagArray704 */ 1932, /* Empty */         0 },
-  { /* user-defined-warnings */                                 14669, /* DiagArray705 */ 1934, /* Empty */         0 },
-  { /* varargs */                                               14691, /* DiagArray706 */ 1936, /* Empty */         0 },
-  { /* variadic-macros */                                       14699, /* DiagArray707 */ 1940, /* Empty */         0 },
-  { /* vec-elem-size */                                         14715, /* DiagArray708 */ 1944, /* Empty */         0 },
-  { /* vector-conversion */                                     14729, /* DiagArray709 */ 1946, /* Empty */         0 },
-  { /* vector-conversions */                                    14747, /* Empty */     0, /* DiagSubGroup710 */ 478 },
-  { /* vexing-parse */                                          14766, /* DiagArray711 */ 1948, /* Empty */         0 },
-  { /* visibility */                                            14779, /* DiagArray712 */ 1952, /* Empty */         0 },
-  { /* vla */                                                   14790, /* DiagArray713 */ 1955, /* Empty */         0 },
-  { /* vla-extension */                                         14794, /* DiagArray714 */ 1957, /* Empty */         0 },
-  { /* void-ptr-dereference */                                  14808, /* DiagArray715 */ 1959, /* Empty */         0 },
-  { /* volatile-register-var */                                 14829, /* Empty */     0, /* Empty */         0 },
-  { /* weak-template-vtables */                                 14851, /* DiagArray717 */ 1961, /* Empty */         0 },
-  { /* weak-vtables */                                          14873, /* DiagArray718 */ 1963, /* Empty */         0 },
-  { /* writable-strings */                                      14886, /* DiagArray719 */ 1965, /* DiagSubGroup719 */ 480 },
-  { /* write-strings */                                         14903, /* Empty */     0, /* DiagSubGroup720 */ 482 },
-  { /* zero-as-null-pointer-constant */                         14917, /* DiagArray721 */ 1967, /* Empty */         0 },
-  { /* zero-length-array */                                     14947, /* DiagArray722 */ 1969, /* Empty */         0 },
+  { /* address-of-packed-member */                              163, /* DiagArray12 */ 21, /* Empty */         0 },
+  { /* address-of-temporary */                                  188, /* DiagArray13 */ 23, /* Empty */         0 },
+  { /* aggregate-return */                                      209, /* Empty */     0, /* Empty */         0 },
+  { /* all */                                                   226, /* Empty */     0, /* DiagSubGroup15 */ 10 },
+  { /* alloca-with-align-alignof */                             230, /* DiagArray16 */ 25, /* Empty */         0 },
+  { /* ambiguous-delete */                                      256, /* DiagArray17 */ 27, /* Empty */         0 },
+  { /* ambiguous-ellipsis */                                    273, /* DiagArray18 */ 29, /* Empty */         0 },
+  { /* ambiguous-macro */                                       292, /* DiagArray19 */ 31, /* Empty */         0 },
+  { /* ambiguous-member-template */                             308, /* DiagArray20 */ 33, /* Empty */         0 },
+  { /* analyzer-incompatible-plugin */                          334, /* DiagArray21 */ 35, /* Empty */         0 },
+  { /* anonymous-pack-parens */                                 363, /* DiagArray22 */ 37, /* Empty */         0 },
+  { /* arc */                                                   385, /* Empty */     0, /* DiagSubGroup23 */ 15 },
+  { /* arc-bridge-casts-disallowed-in-nonarc */                 389, /* DiagArray24 */ 39, /* Empty */         0 },
+  { /* arc-maybe-repeated-use-of-weak */                        427, /* DiagArray25 */ 41, /* Empty */         0 },
+  { /* arc-non-pod-memaccess */                                 458, /* DiagArray26 */ 43, /* Empty */         0 },
+  { /* arc-performSelector-leaks */                             480, /* DiagArray27 */ 45, /* Empty */         0 },
+  { /* arc-repeated-use-of-weak */                              506, /* DiagArray28 */ 47, /* DiagSubGroup28 */ 19 },
+  { /* arc-retain-cycles */                                     531, /* DiagArray29 */ 49, /* Empty */         0 },
+  { /* arc-unsafe-retained-assign */                            549, /* DiagArray30 */ 51, /* Empty */         0 },
+  { /* argument-outside-range */                                576, /* DiagArray31 */ 55, /* Empty */         0 },
+  { /* array-bounds */                                          599, /* DiagArray32 */ 57, /* Empty */         0 },
+  { /* array-bounds-pointer-arithmetic */                       612, /* DiagArray33 */ 62, /* Empty */         0 },
+  { /* asm */                                                   644, /* Empty */     0, /* DiagSubGroup34 */ 21 },
+  { /* asm-ignored-qualifier */                                 648, /* DiagArray35 */ 65, /* Empty */         0 },
+  { /* asm-operand-widths */                                    670, /* DiagArray36 */ 68, /* Empty */         0 },
+  { /* assign-enum */                                           689, /* DiagArray37 */ 70, /* Empty */         0 },
+  { /* assume */                                                701, /* DiagArray38 */ 72, /* Empty */         0 },
+  { /* at-protocol */                                           708, /* DiagArray39 */ 74, /* Empty */         0 },
+  { /* atimport-in-framework-header */                          720, /* DiagArray40 */ 76, /* Empty */         0 },
+  { /* atomic-alignment */                                      749, /* DiagArray41 */ 78, /* Empty */         0 },
+  { /* atomic-memory-ordering */                                766, /* DiagArray42 */ 80, /* Empty */         0 },
+  { /* atomic-properties */                                     789, /* Empty */     0, /* DiagSubGroup43 */ 24 },
+  { /* atomic-property-with-user-defined-accessor */            807, /* DiagArray44 */ 82, /* Empty */         0 },
+  { /* attribute-packed-for-bitfield */                         850, /* DiagArray45 */ 84, /* Empty */         0 },
+  { /* attributes */                                            880, /* Empty */     0, /* DiagSubGroup46 */ 27 },
+  { /* auto-disable-vptr-sanitizer */                           891, /* DiagArray47 */ 86, /* Empty */         0 },
+  { /* auto-import */                                           919, /* DiagArray48 */ 88, /* Empty */         0 },
+  { /* auto-storage-class */                                    931, /* DiagArray49 */ 90, /* Empty */         0 },
+  { /* auto-var-id */                                           950, /* DiagArray50 */ 92, /* Empty */         0 },
+  { /* availability */                                          962, /* DiagArray51 */ 94, /* Empty */         0 },
+  { /* backend-plugin */                                        975, /* DiagArray52 */ 103, /* Empty */         0 },
+  { /* backslash-newline-escape */                              990, /* DiagArray53 */ 105, /* Empty */         0 },
+  { /* bad-function-cast */                                     1015, /* DiagArray54 */ 107, /* Empty */         0 },
+  { /* binary-literal */                                        1033, /* Empty */     0, /* DiagSubGroup55 */ 30 },
+  { /* bind-to-temporary-copy */                                1048, /* DiagArray56 */ 109, /* DiagSubGroup56 */ 34 },
+  { /* binding-in-condition */                                  1071, /* DiagArray57 */ 112, /* Empty */         0 },
+  { /* bitfield-constant-conversion */                          1092, /* DiagArray58 */ 114, /* Empty */         0 },
+  { /* bitfield-enum-conversion */                              1121, /* DiagArray59 */ 116, /* Empty */         0 },
+  { /* bitfield-width */                                        1146, /* DiagArray60 */ 120, /* Empty */         0 },
+  { /* bitwise-op-parentheses */                                1161, /* DiagArray61 */ 123, /* Empty */         0 },
+  { /* block-capture-autoreleasing */                           1184, /* DiagArray62 */ 125, /* Empty */         0 },
+  { /* bool-conversion */                                       1212, /* DiagArray63 */ 127, /* DiagSubGroup63 */ 36 },
+  { /* bool-conversions */                                      1228, /* Empty */     0, /* DiagSubGroup64 */ 39 },
+  { /* braced-scalar-init */                                    1245, /* DiagArray65 */ 129, /* Empty */         0 },
+  { /* bridge-cast */                                           1264, /* DiagArray66 */ 131, /* Empty */         0 },
+  { /* builtin-macro-redefined */                               1276, /* DiagArray67 */ 134, /* Empty */         0 },
+  { /* builtin-memcpy-chk-size */                               1300, /* DiagArray68 */ 137, /* Empty */         0 },
+  { /* builtin-requires-header */                               1324, /* DiagArray69 */ 139, /* Empty */         0 },
+  { /* c++-compat */                                            1348, /* DiagArray70 */ 141, /* Empty */         0 },
+  { /* c++0x-compat */                                          1359, /* Empty */     0, /* DiagSubGroup71 */ 41 },
+  { /* c++0x-extensions */                                      1372, /* Empty */     0, /* DiagSubGroup72 */ 43 },
+  { /* c++0x-narrowing */                                       1389, /* Empty */     0, /* DiagSubGroup73 */ 45 },
+  { /* c++11-compat */                                          1405, /* DiagArray74 */ 143, /* DiagSubGroup74 */ 47 },
+  { /* c++11-compat-deprecated-writable-strings */              1418, /* DiagArray75 */ 154, /* Empty */         0 },
+  { /* c++11-compat-pedantic */                                 1459, /* Empty */     0, /* DiagSubGroup76 */ 54 },
+  { /* c++11-compat-reserved-user-defined-literal */            1481, /* DiagArray77 */ 156, /* Empty */         0 },
+  { /* c++11-extensions */                                      1524, /* DiagArray78 */ 158, /* DiagSubGroup78 */ 59 },
+  { /* c++11-extra-semi */                                      1541, /* DiagArray79 */ 184, /* Empty */         0 },
+  { /* c++11-inline-namespace */                                1558, /* DiagArray80 */ 186, /* Empty */         0 },
+  { /* c++11-long-long */                                       1581, /* DiagArray81 */ 188, /* Empty */         0 },
+  { /* c++11-narrowing */                                       1597, /* DiagArray82 */ 190, /* Empty */         0 },
+  { /* c++14-binary-literal */                                  1613, /* DiagArray83 */ 198, /* Empty */         0 },
+  { /* c++14-compat */                                          1634, /* Empty */     0, /* DiagSubGroup84 */ 63 },
+  { /* c++14-compat-pedantic */                                 1647, /* Empty */     0, /* DiagSubGroup85 */ 66 },
+  { /* c++14-extensions */                                      1669, /* DiagArray86 */ 200, /* DiagSubGroup86 */ 70 },
+  { /* c++17-compat */                                          1686, /* Empty */     0, /* DiagSubGroup87 */ 72 },
+  { /* c++17-compat-mangling */                                 1699, /* DiagArray88 */ 209, /* Empty */         0 },
+  { /* c++17-compat-pedantic */                                 1721, /* Empty */     0, /* DiagSubGroup89 */ 77 },
+  { /* c++17-extensions */                                      1743, /* DiagArray90 */ 211, /* Empty */         0 },
+  { /* c++1y-extensions */                                      1760, /* Empty */     0, /* DiagSubGroup91 */ 80 },
+  { /* c++1z-compat */                                          1777, /* Empty */     0, /* DiagSubGroup92 */ 82 },
+  { /* c++1z-compat-mangling */                                 1790, /* Empty */     0, /* DiagSubGroup93 */ 84 },
+  { /* c++1z-extensions */                                      1812, /* Empty */     0, /* DiagSubGroup94 */ 86 },
+  { /* c++2a-compat */                                          1829, /* DiagArray95 */ 230, /* Empty */         0 },
+  { /* c++2a-compat-pedantic */                                 1842, /* Empty */     0, /* DiagSubGroup96 */ 88 },
+  { /* c++2a-extensions */                                      1864, /* DiagArray97 */ 233, /* Empty */         0 },
+  { /* c++98-c++11-c++14-c++17-compat */                        1881, /* DiagArray98 */ 237, /* Empty */         0 },
+  { /* c++98-c++11-c++14-c++17-compat-pedantic */               1912, /* DiagArray99 */ 242, /* DiagSubGroup99 */ 90 },
+  { /* c++98-c++11-c++14-compat */                              1952, /* DiagArray100 */ 244, /* Empty */         0 },
+  { /* c++98-c++11-c++14-compat-pedantic */                     1977, /* DiagArray101 */ 261, /* DiagSubGroup101 */ 92 },
+  { /* c++98-c++11-compat */                                    2011, /* DiagArray102 */ 264, /* Empty */         0 },
+  { /* c++98-c++11-compat-binary-literal */                     2030, /* DiagArray103 */ 274, /* Empty */         0 },
+  { /* c++98-c++11-compat-pedantic */                           2064, /* Empty */     0, /* DiagSubGroup104 */ 94 },
+  { /* c++98-compat */                                          2092, /* DiagArray105 */ 276, /* DiagSubGroup105 */ 97 },
+  { /* c++98-compat-bind-to-temporary-copy */                   2105, /* DiagArray106 */ 336, /* Empty */         0 },
+  { /* c++98-compat-extra-semi */                               2141, /* DiagArray107 */ 338, /* Empty */         0 },
+  { /* c++98-compat-local-type-template-args */                 2165, /* DiagArray108 */ 340, /* Empty */         0 },
+  { /* c++98-compat-pedantic */                                 2203, /* DiagArray109 */ 342, /* DiagSubGroup109 */ 103 },
+  { /* c++98-compat-unnamed-type-template-args */               2225, /* DiagArray110 */ 352, /* Empty */         0 },
+  { /* c11-extensions */                                        2265, /* DiagArray111 */ 354, /* Empty */         0 },
+  { /* c99-compat */                                            2280, /* DiagArray112 */ 361, /* Empty */         0 },
+  { /* c99-extensions */                                        2291, /* DiagArray113 */ 365, /* Empty */         0 },
+  { /* cast-align */                                            2306, /* DiagArray114 */ 376, /* Empty */         0 },
+  { /* cast-calling-convention */                               2317, /* DiagArray115 */ 378, /* Empty */         0 },
+  { /* cast-of-sel-type */                                      2341, /* DiagArray116 */ 380, /* Empty */         0 },
+  { /* cast-qual */                                             2358, /* DiagArray117 */ 382, /* Empty */         0 },
+  { /* cast-qual-unrelated */                                   2368, /* DiagArray118 */ 385, /* Empty */         0 },
+  { /* char-align */                                            2388, /* Empty */     0, /* Empty */         0 },
+  { /* char-subscripts */                                       2399, /* DiagArray120 */ 387, /* Empty */         0 },
+  { /* clang-cl-pch */                                          2415, /* DiagArray121 */ 390, /* Empty */         0 },
+  { /* class-varargs */                                         2428, /* DiagArray122 */ 396, /* DiagSubGroup122 */ 110 },
+  { /* comma */                                                 2442, /* DiagArray123 */ 398, /* Empty */         0 },
+  { /* comment */                                               2448, /* DiagArray124 */ 400, /* Empty */         0 },
+  { /* comments */                                              2456, /* Empty */     0, /* DiagSubGroup125 */ 112 },
+  { /* compare-distinct-pointer-types */                        2465, /* DiagArray126 */ 405, /* Empty */         0 },
+  { /* complex-component-init */                                2496, /* DiagArray127 */ 407, /* Empty */         0 },
+  { /* conditional-type-mismatch */                             2519, /* DiagArray128 */ 409, /* Empty */         0 },
+  { /* conditional-uninitialized */                             2545, /* DiagArray129 */ 411, /* Empty */         0 },
+  { /* config-macros */                                         2571, /* DiagArray130 */ 413, /* Empty */         0 },
+  { /* constant-conversion */                                   2585, /* DiagArray131 */ 415, /* DiagSubGroup131 */ 114 },
+  { /* constant-logical-operand */                              2605, /* DiagArray132 */ 417, /* Empty */         0 },
+  { /* constexpr-not-const */                                   2630, /* DiagArray133 */ 419, /* Empty */         0 },
+  { /* consumed */                                              2650, /* DiagArray134 */ 421, /* Empty */         0 },
+  { /* conversion */                                            2659, /* DiagArray135 */ 430, /* DiagSubGroup135 */ 116 },
+  { /* conversion-null */                                       2670, /* Empty */     0, /* DiagSubGroup136 */ 130 },
+  { /* coroutine */                                             2686, /* Empty */     0, /* DiagSubGroup137 */ 132 },
+  { /* coroutine-missing-unhandled-exception */                 2696, /* DiagArray138 */ 438, /* Empty */         0 },
+  { /* covered-switch-default */                                2734, /* DiagArray139 */ 440, /* Empty */         0 },
+  { /* cpp */                                                   2757, /* Empty */     0, /* DiagSubGroup140 */ 134 },
+  { /* cstring-format-directive */                              2761, /* DiagArray141 */ 442, /* Empty */         0 },
+  { /* ctor-dtor-privacy */                                     2786, /* Empty */     0, /* Empty */         0 },
+  { /* cuda-compat */                                           2804, /* DiagArray143 */ 444, /* Empty */         0 },
+  { /* custom-atomic-properties */                              2816, /* DiagArray144 */ 450, /* Empty */         0 },
+  { /* dangling */                                              2841, /* DiagArray145 */ 452, /* DiagSubGroup145 */ 136 },
+  { /* dangling-else */                                         2850, /* DiagArray146 */ 455, /* Empty */         0 },
+  { /* dangling-field */                                        2864, /* DiagArray147 */ 457, /* Empty */         0 },
+  { /* dangling-initializer-list */                             2879, /* DiagArray148 */ 462, /* Empty */         0 },
+  { /* date-time */                                             2905, /* DiagArray149 */ 464, /* Empty */         0 },
+  { /* dealloc-in-category */                                   2915, /* DiagArray150 */ 466, /* Empty */         0 },
+  { /* debug-compression-unavailable */                         2935, /* DiagArray151 */ 468, /* Empty */         0 },
+  { /* declaration-after-statement */                           2965, /* DiagArray152 */ 470, /* Empty */         0 },
+  { /* delegating-ctor-cycles */                                2993, /* DiagArray153 */ 472, /* Empty */         0 },
+  { /* delete-incomplete */                                     3016, /* DiagArray154 */ 474, /* Empty */         0 },
+  { /* delete-non-virtual-dtor */                               3034, /* DiagArray155 */ 477, /* Empty */         0 },
+  { /* deprecated */                                            3058, /* DiagArray156 */ 480, /* DiagSubGroup156 */ 140 },
+  { /* deprecated-attributes */                                 3069, /* DiagArray157 */ 489, /* Empty */         0 },
+  { /* deprecated-declarations */                               3091, /* DiagArray158 */ 491, /* Empty */         0 },
+  { /* deprecated-dynamic-exception-spec */                     3115, /* DiagArray159 */ 498, /* Empty */         0 },
+  { /* deprecated-implementations */                            3149, /* DiagArray160 */ 500, /* Empty */         0 },
+  { /* deprecated-increment-bool */                             3176, /* DiagArray161 */ 503, /* Empty */         0 },
+  { /* deprecated-objc-isa-usage */                             3202, /* DiagArray162 */ 505, /* Empty */         0 },
+  { /* deprecated-objc-pointer-introspection */                 3228, /* DiagArray163 */ 508, /* DiagSubGroup163 */ 148 },
+  { /* deprecated-objc-pointer-introspection-performSelector */ 3266, /* DiagArray164 */ 510, /* Empty */         0 },
+  { /* deprecated-register */                                   3320, /* DiagArray165 */ 512, /* Empty */         0 },
+  { /* deprecated-this-capture */                               3340, /* DiagArray166 */ 514, /* Empty */         0 },
+  { /* deprecated-writable-strings */                           3364, /* Empty */     0, /* DiagSubGroup167 */ 150 },
+  { /* direct-ivar-access */                                    3392, /* DiagArray168 */ 516, /* Empty */         0 },
+  { /* disabled-macro-expansion */                              3411, /* DiagArray169 */ 518, /* Empty */         0 },
+  { /* disabled-optimization */                                 3436, /* Empty */     0, /* Empty */         0 },
+  { /* discard-qual */                                          3458, /* Empty */     0, /* Empty */         0 },
+  { /* distributed-object-modifiers */                          3471, /* DiagArray172 */ 520, /* Empty */         0 },
+  { /* div-by-zero */                                           3500, /* Empty */     0, /* DiagSubGroup173 */ 152 },
+  { /* division-by-zero */                                      3512, /* DiagArray174 */ 523, /* Empty */         0 },
+  { /* dll-attribute-on-redeclaration */                        3529, /* DiagArray175 */ 525, /* Empty */         0 },
+  { /* dllexport-explicit-instantiation-decl */                 3560, /* DiagArray176 */ 527, /* Empty */         0 },
+  { /* dllimport-static-field-def */                            3598, /* DiagArray177 */ 529, /* Empty */         0 },
+  { /* documentation */                                         3625, /* DiagArray178 */ 531, /* DiagSubGroup178 */ 154 },
+  { /* documentation-deprecated-sync */                         3639, /* DiagArray179 */ 550, /* Empty */         0 },
+  { /* documentation-html */                                    3669, /* DiagArray180 */ 552, /* Empty */         0 },
+  { /* documentation-pedantic */                                3688, /* DiagArray181 */ 557, /* DiagSubGroup181 */ 157 },
+  { /* documentation-unknown-command */                         3711, /* DiagArray182 */ 559, /* Empty */         0 },
+  { /* dollar-in-identifier-extension */                        3741, /* DiagArray183 */ 562, /* Empty */         0 },
+  { /* double-promotion */                                      3772, /* DiagArray184 */ 564, /* Empty */         0 },
+  { /* duplicate-decl-specifier */                              3789, /* DiagArray185 */ 566, /* Empty */         0 },
+  { /* duplicate-enum */                                        3814, /* DiagArray186 */ 570, /* Empty */         0 },
+  { /* duplicate-method-arg */                                  3829, /* DiagArray187 */ 572, /* Empty */         0 },
+  { /* duplicate-method-match */                                3850, /* DiagArray188 */ 574, /* Empty */         0 },
+  { /* duplicate-protocol */                                    3873, /* DiagArray189 */ 576, /* Empty */         0 },
+  { /* dynamic-class-memaccess */                               3892, /* DiagArray190 */ 578, /* Empty */         0 },
+  { /* dynamic-exception-spec */                                3916, /* DiagArray191 */ 580, /* DiagSubGroup191 */ 159 },
+  { /* effc++ */                                                3939, /* Empty */     0, /* DiagSubGroup192 */ 161 },
+  { /* embedded-directive */                                    3946, /* DiagArray193 */ 582, /* Empty */         0 },
+  { /* empty-body */                                            3965, /* DiagArray194 */ 584, /* Empty */         0 },
+  { /* empty-decomposition */                                   3976, /* DiagArray195 */ 590, /* Empty */         0 },
+  { /* empty-translation-unit */                                3996, /* DiagArray196 */ 592, /* Empty */         0 },
+  { /* encode-type */                                           4019, /* DiagArray197 */ 594, /* Empty */         0 },
+  { /* endif-labels */                                          4031, /* Empty */     0, /* DiagSubGroup198 */ 163 },
+  { /* enum-compare */                                          4044, /* DiagArray199 */ 596, /* DiagSubGroup199 */ 165 },
+  { /* enum-compare-switch */                                   4057, /* DiagArray200 */ 598, /* Empty */         0 },
+  { /* enum-conversion */                                       4077, /* DiagArray201 */ 600, /* Empty */         0 },
+  { /* enum-too-large */                                        4093, /* DiagArray202 */ 602, /* Empty */         0 },
+  { /* exceptions */                                            4108, /* DiagArray203 */ 605, /* Empty */         0 },
+  { /* exit-time-destructors */                                 4119, /* DiagArray204 */ 609, /* Empty */         0 },
+  { /* expansion-to-defined */                                  4141, /* DiagArray205 */ 611, /* Empty */         0 },
+  { /* experimental-isel */                                     4162, /* DiagArray206 */ 614, /* Empty */         0 },
+  { /* explicit-initialize-call */                              4180, /* DiagArray207 */ 617, /* Empty */         0 },
+  { /* explicit-ownership-type */                               4205, /* DiagArray208 */ 620, /* Empty */         0 },
+  { /* extern-c-compat */                                       4229, /* DiagArray209 */ 622, /* Empty */         0 },
+  { /* extern-initializer */                                    4245, /* DiagArray210 */ 624, /* Empty */         0 },
+  { /* extra */                                                 4264, /* DiagArray211 */ 626, /* DiagSubGroup211 */ 167 },
+  { /* extra-qualification */                                   4270, /* DiagArray212 */ 628, /* Empty */         0 },
+  { /* extra-semi */                                            4290, /* DiagArray213 */ 630, /* DiagSubGroup213 */ 176 },
+  { /* extra-tokens */                                          4301, /* DiagArray214 */ 633, /* Empty */         0 },
+  { /* fallback */                                              4314, /* DiagArray215 */ 636, /* Empty */         0 },
+  { /* flag-enum */                                             4323, /* DiagArray216 */ 638, /* Empty */         0 },
+  { /* flexible-array-extensions */                             4333, /* DiagArray217 */ 640, /* Empty */         0 },
+  { /* float-conversion */                                      4359, /* DiagArray218 */ 643, /* DiagSubGroup218 */ 179 },
+  { /* float-equal */                                           4376, /* DiagArray219 */ 645, /* Empty */         0 },
+  { /* float-overflow-conversion */                             4388, /* DiagArray220 */ 647, /* Empty */         0 },
+  { /* float-zero-conversion */                                 4414, /* DiagArray221 */ 650, /* Empty */         0 },
+  { /* for-loop-analysis */                                     4436, /* DiagArray222 */ 652, /* Empty */         0 },
+  { /* format */                                                4454, /* DiagArray223 */ 655, /* DiagSubGroup223 */ 182 },
+  { /* format-extra-args */                                     4461, /* DiagArray224 */ 681, /* Empty */         0 },
+  { /* format-invalid-specifier */                              4479, /* DiagArray225 */ 683, /* Empty */         0 },
+  { /* format-non-iso */                                        4504, /* DiagArray226 */ 685, /* Empty */         0 },
+  { /* format-nonliteral */                                     4519, /* DiagArray227 */ 689, /* Empty */         0 },
+  { /* format-pedantic */                                       4537, /* DiagArray228 */ 691, /* Empty */         0 },
+  { /* format-security */                                       4553, /* DiagArray229 */ 694, /* Empty */         0 },
+  { /* format-y2k */                                            4569, /* Empty */     0, /* Empty */         0 },
+  { /* format-zero-length */                                    4580, /* DiagArray231 */ 696, /* Empty */         0 },
+  { /* format=2 */                                              4599, /* Empty */     0, /* DiagSubGroup232 */ 189 },
+  { /* four-char-constants */                                   4608, /* DiagArray233 */ 698, /* Empty */         0 },
+  { /* frame-larger-than= */                                    4628, /* DiagArray234 */ 700, /* Empty */         0 },
+  { /* framework-include-private-from-public */                 4647, /* DiagArray235 */ 703, /* Empty */         0 },
+  { /* function-def-in-objc-container */                        4685, /* DiagArray236 */ 705, /* Empty */         0 },
+  { /* function-multiversion */                                 4716, /* DiagArray237 */ 707, /* Empty */         0 },
+  { /* future-compat */                                         4738, /* Empty */     0, /* Empty */         0 },
+  { /* gcc-compat */                                            4752, /* DiagArray239 */ 710, /* Empty */         0 },
+  { /* global-constructors */                                   4763, /* DiagArray240 */ 721, /* Empty */         0 },
+  { /* gnu */                                                   4783, /* Empty */     0, /* DiagSubGroup241 */ 193 },
+  { /* gnu-alignof-expression */                                4787, /* DiagArray242 */ 724, /* Empty */         0 },
+  { /* gnu-anonymous-struct */                                  4810, /* DiagArray243 */ 726, /* Empty */         0 },
+  { /* gnu-array-member-paren-init */                           4831, /* DiagArray244 */ 728, /* Empty */         0 },
+  { /* gnu-auto-type */                                         4859, /* DiagArray245 */ 730, /* Empty */         0 },
+  { /* gnu-binary-literal */                                    4873, /* DiagArray246 */ 732, /* Empty */         0 },
+  { /* gnu-case-range */                                        4892, /* DiagArray247 */ 734, /* Empty */         0 },
+  { /* gnu-complex-integer */                                   4907, /* DiagArray248 */ 736, /* Empty */         0 },
+  { /* gnu-compound-literal-initializer */                      4927, /* DiagArray249 */ 738, /* Empty */         0 },
+  { /* gnu-conditional-omitted-operand */                       4960, /* DiagArray250 */ 740, /* Empty */         0 },
+  { /* gnu-designator */                                        4992, /* DiagArray251 */ 742, /* Empty */         0 },
+  { /* gnu-empty-initializer */                                 5007, /* DiagArray252 */ 746, /* Empty */         0 },
+  { /* gnu-empty-struct */                                      5029, /* DiagArray253 */ 748, /* Empty */         0 },
+  { /* gnu-flexible-array-initializer */                        5046, /* DiagArray254 */ 752, /* Empty */         0 },
+  { /* gnu-flexible-array-union-member */                       5077, /* DiagArray255 */ 754, /* Empty */         0 },
+  { /* gnu-folding-constant */                                  5109, /* DiagArray256 */ 756, /* Empty */         0 },
+  { /* gnu-imaginary-constant */                                5130, /* DiagArray257 */ 760, /* Empty */         0 },
+  { /* gnu-include-next */                                      5153, /* DiagArray258 */ 762, /* Empty */         0 },
+  { /* gnu-label-as-value */                                    5170, /* DiagArray259 */ 764, /* Empty */         0 },
+  { /* gnu-redeclared-enum */                                   5189, /* DiagArray260 */ 767, /* Empty */         0 },
+  { /* gnu-statement-expression */                              5209, /* DiagArray261 */ 769, /* Empty */         0 },
+  { /* gnu-static-float-init */                                 5234, /* DiagArray262 */ 771, /* Empty */         0 },
+  { /* gnu-string-literal-operator-template */                  5256, /* DiagArray263 */ 773, /* Empty */         0 },
+  { /* gnu-union-cast */                                        5293, /* DiagArray264 */ 775, /* Empty */         0 },
+  { /* gnu-variable-sized-type-not-at-end */                    5308, /* DiagArray265 */ 777, /* Empty */         0 },
+  { /* gnu-zero-line-directive */                               5343, /* DiagArray266 */ 779, /* Empty */         0 },
+  { /* gnu-zero-variadic-macro-arguments */                     5367, /* DiagArray267 */ 781, /* Empty */         0 },
+  { /* header-guard */                                          5401, /* DiagArray268 */ 784, /* Empty */         0 },
+  { /* header-hygiene */                                        5414, /* DiagArray269 */ 786, /* Empty */         0 },
+  { /* idiomatic-parentheses */                                 5429, /* DiagArray270 */ 788, /* Empty */         0 },
+  { /* ignored-attributes */                                    5451, /* DiagArray271 */ 790, /* Empty */         0 },
+  { /* ignored-optimization-argument */                         5470, /* DiagArray272 */ 849, /* Empty */         0 },
+  { /* ignored-pragma-intrinsic */                              5500, /* DiagArray273 */ 852, /* Empty */         0 },
+  { /* ignored-pragma-optimize */                               5525, /* DiagArray274 */ 854, /* Empty */         0 },
+  { /* ignored-pragmas */                                       5549, /* DiagArray275 */ 856, /* DiagSubGroup275 */ 222 },
+  { /* ignored-qualifiers */                                    5565, /* DiagArray276 */ 899, /* Empty */         0 },
+  { /* implicit */                                              5584, /* Empty */     0, /* DiagSubGroup277 */ 225 },
+  { /* implicit-atomic-properties */                            5593, /* DiagArray278 */ 905, /* Empty */         0 },
+  { /* implicit-conversion-floating-point-to-bool */            5620, /* DiagArray279 */ 908, /* Empty */         0 },
+  { /* implicit-exception-spec-mismatch */                      5663, /* DiagArray280 */ 910, /* Empty */         0 },
+  { /* implicit-fallthrough */                                  5696, /* DiagArray281 */ 912, /* DiagSubGroup281 */ 228 },
+  { /* implicit-fallthrough-per-function */                     5717, /* DiagArray282 */ 915, /* Empty */         0 },
+  { /* implicit-function-declaration */                         5751, /* DiagArray283 */ 917, /* Empty */         0 },
+  { /* implicit-int */                                          5781, /* DiagArray284 */ 922, /* Empty */         0 },
+  { /* implicit-retain-self */                                  5794, /* DiagArray285 */ 924, /* Empty */         0 },
+  { /* implicitly-unsigned-literal */                           5815, /* DiagArray286 */ 926, /* Empty */         0 },
+  { /* import */                                                5843, /* Empty */     0, /* Empty */         0 },
+  { /* import-preprocessor-directive-pedantic */                5850, /* DiagArray288 */ 928, /* Empty */         0 },
+  { /* inaccessible-base */                                     5889, /* DiagArray289 */ 930, /* Empty */         0 },
+  { /* include-next-absolute-path */                            5907, /* DiagArray290 */ 932, /* Empty */         0 },
+  { /* include-next-outside-header */                           5934, /* DiagArray291 */ 934, /* Empty */         0 },
+  { /* incompatible-exception-spec */                           5962, /* DiagArray292 */ 936, /* Empty */         0 },
+  { /* incompatible-function-pointer-types */                   5990, /* DiagArray293 */ 939, /* Empty */         0 },
+  { /* incompatible-library-redeclaration */                    6026, /* DiagArray294 */ 941, /* Empty */         0 },
+  { /* incompatible-ms-struct */                                6061, /* DiagArray295 */ 943, /* Empty */         0 },
+  { /* incompatible-pointer-types */                            6084, /* DiagArray296 */ 946, /* DiagSubGroup296 */ 230 },
+  { /* incompatible-pointer-types-discards-qualifiers */        6111, /* DiagArray297 */ 948, /* Empty */         0 },
+  { /* incompatible-property-type */                            6158, /* DiagArray298 */ 951, /* Empty */         0 },
+  { /* incompatible-sysroot */                                  6185, /* DiagArray299 */ 953, /* Empty */         0 },
+  { /* incomplete-framework-module-declaration */               6206, /* DiagArray300 */ 955, /* Empty */         0 },
+  { /* incomplete-implementation */                             6246, /* DiagArray301 */ 957, /* Empty */         0 },
+  { /* incomplete-module */                                     6272, /* Empty */     0, /* DiagSubGroup302 */ 233 },
+  { /* incomplete-umbrella */                                   6290, /* DiagArray303 */ 959, /* Empty */         0 },
+  { /* inconsistent-dllimport */                                6310, /* DiagArray304 */ 963, /* Empty */         0 },
+  { /* inconsistent-missing-destructor-override */              6333, /* DiagArray305 */ 966, /* Empty */         0 },
+  { /* inconsistent-missing-override */                         6374, /* DiagArray306 */ 968, /* Empty */         0 },
+  { /* increment-bool */                                        6404, /* DiagArray307 */ 970, /* DiagSubGroup307 */ 236 },
+  { /* infinite-recursion */                                    6419, /* DiagArray308 */ 972, /* Empty */         0 },
+  { /* init-self */                                             6438, /* Empty */     0, /* Empty */         0 },
+  { /* initializer-overrides */                                 6448, /* DiagArray310 */ 974, /* Empty */         0 },
+  { /* injected-class-name */                                   6470, /* DiagArray311 */ 977, /* Empty */         0 },
+  { /* inline */                                                6490, /* Empty */     0, /* Empty */         0 },
+  { /* inline-asm */                                            6497, /* DiagArray313 */ 979, /* Empty */         0 },
+  { /* inline-new-delete */                                     6508, /* DiagArray314 */ 981, /* Empty */         0 },
+  { /* instantiation-after-specialization */                    6526, /* DiagArray315 */ 983, /* Empty */         0 },
+  { /* int-conversion */                                        6561, /* DiagArray316 */ 985, /* Empty */         0 },
+  { /* int-conversions */                                       6576, /* Empty */     0, /* DiagSubGroup317 */ 238 },
+  { /* int-to-pointer-cast */                                   6592, /* DiagArray318 */ 988, /* DiagSubGroup318 */ 240 },
+  { /* int-to-void-pointer-cast */                              6612, /* DiagArray319 */ 990, /* Empty */         0 },
+  { /* integer-overflow */                                      6637, /* DiagArray320 */ 992, /* Empty */         0 },
+  { /* invalid-command-line-argument */                         6654, /* DiagArray321 */ 994, /* DiagSubGroup321 */ 242 },
+  { /* invalid-constexpr */                                     6684, /* DiagArray322 */ 997, /* Empty */         0 },
+  { /* invalid-iboutlet */                                      6702, /* DiagArray323 */ 999, /* Empty */         0 },
+  { /* invalid-initializer-from-system-header */                6719, /* DiagArray324 */ 1002, /* Empty */         0 },
+  { /* invalid-ios-deployment-target */                         6758, /* DiagArray325 */ 1004, /* Empty */         0 },
+  { /* invalid-noreturn */                                      6788, /* DiagArray326 */ 1006, /* Empty */         0 },
+  { /* invalid-offsetof */                                      6805, /* DiagArray327 */ 1009, /* Empty */         0 },
+  { /* invalid-or-nonexistent-directory */                      6822, /* DiagArray328 */ 1012, /* Empty */         0 },
+  { /* invalid-partial-specialization */                        6855, /* DiagArray329 */ 1015, /* Empty */         0 },
+  { /* invalid-pch */                                           6886, /* Empty */     0, /* Empty */         0 },
+  { /* invalid-pp-token */                                      6898, /* DiagArray331 */ 1017, /* Empty */         0 },
+  { /* invalid-source-encoding */                               6915, /* DiagArray332 */ 1020, /* Empty */         0 },
+  { /* invalid-token-paste */                                   6939, /* DiagArray333 */ 1023, /* Empty */         0 },
+  { /* jump-seh-finally */                                      6959, /* DiagArray334 */ 1025, /* Empty */         0 },
+  { /* keyword-compat */                                        6976, /* DiagArray335 */ 1027, /* Empty */         0 },
+  { /* keyword-macro */                                         6991, /* DiagArray336 */ 1029, /* Empty */         0 },
+  { /* knr-promoted-parameter */                                7005, /* DiagArray337 */ 1031, /* Empty */         0 },
+  { /* language-extension-token */                              7028, /* DiagArray338 */ 1033, /* Empty */         0 },
+  { /* large-by-value-copy */                                   7053, /* DiagArray339 */ 1035, /* Empty */         0 },
+  { /* liblto */                                                7073, /* Empty */     0, /* Empty */         0 },
+  { /* literal-conversion */                                    7080, /* DiagArray341 */ 1038, /* Empty */         0 },
+  { /* literal-range */                                         7099, /* DiagArray342 */ 1041, /* Empty */         0 },
+  { /* local-type-template-args */                              7113, /* DiagArray343 */ 1044, /* DiagSubGroup343 */ 244 },
+  { /* logical-not-parentheses */                               7138, /* DiagArray344 */ 1046, /* Empty */         0 },
+  { /* logical-op-parentheses */                                7162, /* DiagArray345 */ 1048, /* Empty */         0 },
+  { /* long-long */                                             7185, /* DiagArray346 */ 1050, /* DiagSubGroup346 */ 246 },
+  { /* loop-analysis */                                         7195, /* Empty */     0, /* DiagSubGroup347 */ 248 },
+  { /* macro-redefined */                                       7209, /* DiagArray348 */ 1052, /* Empty */         0 },
+  { /* main */                                                  7225, /* DiagArray349 */ 1054, /* Empty */         0 },
+  { /* main-return-type */                                      7230, /* DiagArray350 */ 1062, /* Empty */         0 },
+  { /* malformed-warning-check */                               7247, /* DiagArray351 */ 1064, /* Empty */         0 },
+  { /* many-braces-around-scalar-init */                        7271, /* DiagArray352 */ 1066, /* Empty */         0 },
+  { /* max-unsigned-zero */                                     7302, /* DiagArray353 */ 1068, /* Empty */         0 },
+  { /* memset-transposed-args */                                7320, /* DiagArray354 */ 1070, /* Empty */         0 },
+  { /* memsize-comparison */                                    7343, /* DiagArray355 */ 1072, /* Empty */         0 },
+  { /* method-signatures */                                     7362, /* DiagArray356 */ 1074, /* Empty */         0 },
+  { /* microsoft */                                             7380, /* Empty */     0, /* DiagSubGroup357 */ 251 },
+  { /* microsoft-anon-tag */                                    7390, /* DiagArray358 */ 1077, /* Empty */         0 },
+  { /* microsoft-cast */                                        7409, /* DiagArray359 */ 1080, /* Empty */         0 },
+  { /* microsoft-charize */                                     7424, /* DiagArray360 */ 1083, /* Empty */         0 },
+  { /* microsoft-comment-paste */                               7442, /* DiagArray361 */ 1085, /* Empty */         0 },
+  { /* microsoft-const-init */                                  7466, /* DiagArray362 */ 1087, /* Empty */         0 },
+  { /* microsoft-cpp-macro */                                   7487, /* DiagArray363 */ 1089, /* Empty */         0 },
+  { /* microsoft-default-arg-redefinition */                    7507, /* DiagArray364 */ 1091, /* Empty */         0 },
+  { /* microsoft-end-of-file */                                 7542, /* DiagArray365 */ 1093, /* Empty */         0 },
+  { /* microsoft-enum-forward-reference */                      7564, /* DiagArray366 */ 1095, /* Empty */         0 },
+  { /* microsoft-enum-value */                                  7597, /* DiagArray367 */ 1097, /* Empty */         0 },
+  { /* microsoft-exception-spec */                              7618, /* DiagArray368 */ 1099, /* Empty */         0 },
+  { /* microsoft-exists */                                      7643, /* DiagArray369 */ 1106, /* Empty */         0 },
+  { /* microsoft-explicit-constructor-call */                   7660, /* DiagArray370 */ 1108, /* Empty */         0 },
+  { /* microsoft-extra-qualification */                         7696, /* DiagArray371 */ 1110, /* Empty */         0 },
+  { /* microsoft-fixed-enum */                                  7726, /* DiagArray372 */ 1112, /* Empty */         0 },
+  { /* microsoft-flexible-array */                              7747, /* DiagArray373 */ 1114, /* Empty */         0 },
+  { /* microsoft-goto */                                        7772, /* DiagArray374 */ 1117, /* Empty */         0 },
+  { /* microsoft-inaccessible-base */                           7787, /* DiagArray375 */ 1119, /* Empty */         0 },
+  { /* microsoft-include */                                     7815, /* DiagArray376 */ 1121, /* Empty */         0 },
+  { /* microsoft-mutable-reference */                           7833, /* DiagArray377 */ 1123, /* Empty */         0 },
+  { /* microsoft-pure-definition */                             7861, /* DiagArray378 */ 1125, /* Empty */         0 },
+  { /* microsoft-redeclare-static */                            7887, /* DiagArray379 */ 1127, /* Empty */         0 },
+  { /* microsoft-sealed */                                      7914, /* DiagArray380 */ 1129, /* Empty */         0 },
+  { /* microsoft-template */                                    7931, /* DiagArray381 */ 1131, /* Empty */         0 },
+  { /* microsoft-union-member-reference */                      7950, /* DiagArray382 */ 1139, /* Empty */         0 },
+  { /* microsoft-unqualified-friend */                          7983, /* DiagArray383 */ 1141, /* Empty */         0 },
+  { /* microsoft-using-decl */                                  8012, /* DiagArray384 */ 1143, /* Empty */         0 },
+  { /* microsoft-void-pseudo-dtor */                            8033, /* DiagArray385 */ 1145, /* Empty */         0 },
+  { /* mismatched-new-delete */                                 8060, /* DiagArray386 */ 1147, /* Empty */         0 },
+  { /* mismatched-parameter-types */                            8082, /* DiagArray387 */ 1149, /* Empty */         0 },
+  { /* mismatched-return-types */                               8109, /* DiagArray388 */ 1151, /* Empty */         0 },
+  { /* mismatched-tags */                                       8133, /* DiagArray389 */ 1153, /* Empty */         0 },
+  { /* missing-braces */                                        8149, /* DiagArray390 */ 1156, /* Empty */         0 },
+  { /* missing-declarations */                                  8164, /* DiagArray391 */ 1158, /* Empty */         0 },
+  { /* missing-exception-spec */                                8185, /* DiagArray392 */ 1163, /* Empty */         0 },
+  { /* missing-field-initializers */                            8208, /* DiagArray393 */ 1165, /* Empty */         0 },
+  { /* missing-format-attribute */                              8235, /* Empty */     0, /* Empty */         0 },
+  { /* missing-include-dirs */                                  8260, /* Empty */     0, /* Empty */         0 },
+  { /* missing-method-return-type */                            8281, /* DiagArray396 */ 1167, /* Empty */         0 },
+  { /* missing-noescape */                                      8308, /* DiagArray397 */ 1169, /* Empty */         0 },
+  { /* missing-noreturn */                                      8325, /* DiagArray398 */ 1171, /* Empty */         0 },
+  { /* missing-prototype-for-cc */                              8342, /* DiagArray399 */ 1174, /* Empty */         0 },
+  { /* missing-prototypes */                                    8367, /* DiagArray400 */ 1176, /* Empty */         0 },
+  { /* missing-selector-name */                                 8386, /* DiagArray401 */ 1178, /* Empty */         0 },
+  { /* missing-sysroot */                                       8408, /* DiagArray402 */ 1180, /* Empty */         0 },
+  { /* missing-variable-declarations */                         8424, /* DiagArray403 */ 1182, /* Empty */         0 },
+  { /* module-build */                                          8454, /* DiagArray404 */ 1184, /* Empty */         0 },
+  { /* module-conflict */                                       8467, /* DiagArray405 */ 1189, /* Empty */         0 },
+  { /* module-file-config-mismatch */                           8483, /* DiagArray406 */ 1192, /* Empty */         0 },
+  { /* module-file-extension */                                 8511, /* DiagArray407 */ 1194, /* Empty */         0 },
+  { /* module-import-in-extern-c */                             8533, /* DiagArray408 */ 1196, /* Empty */         0 },
+  { /* modules-ambiguous-internal-linkage */                    8559, /* DiagArray409 */ 1198, /* Empty */         0 },
+  { /* modules-import-nested-redundant */                       8594, /* DiagArray410 */ 1200, /* Empty */         0 },
+  { /* most */                                                  8626, /* Empty */     0, /* DiagSubGroup411 */ 279 },
+  { /* move */                                                  8631, /* Empty */     0, /* DiagSubGroup412 */ 311 },
+  { /* msvc-include */                                          8636, /* Empty */     0, /* DiagSubGroup413 */ 316 },
+  { /* msvc-not-found */                                        8649, /* DiagArray414 */ 1202, /* Empty */         0 },
+  { /* multichar */                                             8664, /* DiagArray415 */ 1204, /* Empty */         0 },
+  { /* multiple-move-vbase */                                   8674, /* DiagArray416 */ 1206, /* Empty */         0 },
+  { /* narrowing */                                             8694, /* Empty */     0, /* DiagSubGroup417 */ 318 },
+  { /* nested-anon-types */                                     8704, /* DiagArray418 */ 1208, /* Empty */         0 },
+  { /* nested-externs */                                        8722, /* Empty */     0, /* Empty */         0 },
+  { /* new-returns-null */                                      8737, /* DiagArray420 */ 1210, /* Empty */         0 },
+  { /* newline-eof */                                           8754, /* DiagArray421 */ 1212, /* Empty */         0 },
+  { /* noexcept-type */                                         8766, /* Empty */     0, /* DiagSubGroup422 */ 320 },
+  { /* non-gcc */                                               8780, /* Empty */     0, /* DiagSubGroup423 */ 322 },
+  { /* non-literal-null-conversion */                           8788, /* DiagArray424 */ 1215, /* Empty */         0 },
+  { /* non-modular-include-in-framework-module */               8816, /* DiagArray425 */ 1217, /* Empty */         0 },
+  { /* non-modular-include-in-module */                         8856, /* DiagArray426 */ 1219, /* DiagSubGroup426 */ 326 },
+  { /* non-pod-varargs */                                       8886, /* DiagArray427 */ 1221, /* Empty */         0 },
+  { /* non-virtual-dtor */                                      8902, /* DiagArray428 */ 1226, /* Empty */         0 },
+  { /* nonnull */                                               8919, /* DiagArray429 */ 1228, /* Empty */         0 },
+  { /* nonportable-cfstrings */                                 8927, /* Empty */     0, /* Empty */         0 },
+  { /* nonportable-include-path */                              8949, /* DiagArray431 */ 1231, /* Empty */         0 },
+  { /* nonportable-system-include-path */                       8974, /* DiagArray432 */ 1233, /* Empty */         0 },
+  { /* nonportable-vector-initialization */                     9006, /* DiagArray433 */ 1235, /* Empty */         0 },
+  { /* nontrivial-memaccess */                                  9040, /* DiagArray434 */ 1237, /* Empty */         0 },
+  { /* nsconsumed-mismatch */                                   9061, /* DiagArray435 */ 1239, /* Empty */         0 },
+  { /* nsreturns-mismatch */                                    9081, /* DiagArray436 */ 1241, /* Empty */         0 },
+  { /* null-arithmetic */                                       9100, /* DiagArray437 */ 1243, /* Empty */         0 },
+  { /* null-character */                                        9116, /* DiagArray438 */ 1246, /* Empty */         0 },
+  { /* null-conversion */                                       9131, /* DiagArray439 */ 1249, /* Empty */         0 },
+  { /* null-dereference */                                      9147, /* DiagArray440 */ 1251, /* Empty */         0 },
+  { /* null-pointer-arithmetic */                               9164, /* DiagArray441 */ 1254, /* Empty */         0 },
+  { /* nullability */                                           9188, /* DiagArray442 */ 1257, /* Empty */         0 },
+  { /* nullability-completeness */                              9200, /* DiagArray443 */ 1263, /* DiagSubGroup443 */ 328 },
+  { /* nullability-completeness-on-arrays */                    9225, /* DiagArray444 */ 1265, /* Empty */         0 },
+  { /* nullability-declspec */                                  9260, /* DiagArray445 */ 1267, /* Empty */         0 },
+  { /* nullability-extension */                                 9281, /* DiagArray446 */ 1269, /* Empty */         0 },
+  { /* nullability-inferred-on-nested-type */                   9303, /* DiagArray447 */ 1271, /* Empty */         0 },
+  { /* nullable-to-nonnull-conversion */                        9339, /* DiagArray448 */ 1273, /* Empty */         0 },
+  { /* objc-autosynthesis-property-ivar-name-match */           9370, /* DiagArray449 */ 1275, /* Empty */         0 },
+  { /* objc-circular-container */                               9414, /* DiagArray450 */ 1277, /* Empty */         0 },
+  { /* objc-cocoa-api */                                        9438, /* Empty */     0, /* DiagSubGroup451 */ 330 },
+  { /* objc-designated-initializers */                          9453, /* DiagArray452 */ 1279, /* Empty */         0 },
+  { /* objc-flexible-array */                                   9482, /* DiagArray453 */ 1286, /* Empty */         0 },
+  { /* objc-forward-class-redefinition */                       9502, /* DiagArray454 */ 1289, /* Empty */         0 },
+  { /* objc-interface-ivars */                                  9534, /* DiagArray455 */ 1291, /* Empty */         0 },
+  { /* objc-literal-compare */                                  9555, /* DiagArray456 */ 1293, /* DiagSubGroup456 */ 332 },
+  { /* objc-literal-conversion */                               9576, /* DiagArray457 */ 1295, /* Empty */         0 },
+  { /* objc-macro-redefinition */                               9600, /* DiagArray458 */ 1298, /* Empty */         0 },
+  { /* objc-messaging-id */                                     9624, /* DiagArray459 */ 1300, /* Empty */         0 },
+  { /* objc-method-access */                                    9642, /* DiagArray460 */ 1302, /* Empty */         0 },
+  { /* objc-missing-property-synthesis */                       9661, /* DiagArray461 */ 1309, /* Empty */         0 },
+  { /* objc-missing-super-calls */                              9693, /* DiagArray462 */ 1311, /* Empty */         0 },
+  { /* objc-multiple-method-names */                            9718, /* DiagArray463 */ 1313, /* Empty */         0 },
+  { /* objc-noncopy-retain-block-property */                    9745, /* DiagArray464 */ 1315, /* Empty */         0 },
+  { /* objc-nonunified-exceptions */                            9780, /* DiagArray465 */ 1317, /* Empty */         0 },
+  { /* objc-property-implementation */                          9807, /* DiagArray466 */ 1319, /* Empty */         0 },
+  { /* objc-property-implicit-mismatch */                       9836, /* DiagArray467 */ 1324, /* Empty */         0 },
+  { /* objc-property-matches-cocoa-ownership-rule */            9868, /* DiagArray468 */ 1326, /* Empty */         0 },
+  { /* objc-property-no-attribute */                            9911, /* DiagArray469 */ 1328, /* Empty */         0 },
+  { /* objc-property-synthesis */                               9938, /* DiagArray470 */ 1331, /* Empty */         0 },
+  { /* objc-protocol-method-implementation */                   9962, /* DiagArray471 */ 1335, /* Empty */         0 },
+  { /* objc-protocol-property-synthesis */                      9998, /* DiagArray472 */ 1337, /* Empty */         0 },
+  { /* objc-protocol-qualifiers */                              10031, /* DiagArray473 */ 1339, /* Empty */         0 },
+  { /* objc-readonly-with-setter-property */                    10056, /* DiagArray474 */ 1341, /* Empty */         0 },
+  { /* objc-redundant-api-use */                                10091, /* Empty */     0, /* DiagSubGroup475 */ 334 },
+  { /* objc-redundant-literal-use */                            10114, /* DiagArray476 */ 1343, /* Empty */         0 },
+  { /* objc-root-class */                                       10141, /* DiagArray477 */ 1345, /* Empty */         0 },
+  { /* objc-string-compare */                                   10157, /* DiagArray478 */ 1347, /* Empty */         0 },
+  { /* objc-string-concatenation */                             10177, /* DiagArray479 */ 1349, /* Empty */         0 },
+  { /* objc-unsafe-perform-selector */                          10203, /* DiagArray480 */ 1351, /* Empty */         0 },
+  { /* odr */                                                   10232, /* DiagArray481 */ 1353, /* Empty */         0 },
+  { /* old-style-cast */                                        10236, /* DiagArray482 */ 1355, /* Empty */         0 },
+  { /* old-style-definition */                                  10251, /* Empty */     0, /* Empty */         0 },
+  { /* opencl-unsupported-rgba */                               10272, /* DiagArray484 */ 1357, /* Empty */         0 },
+  { /* openmp-clauses */                                        10296, /* DiagArray485 */ 1359, /* Empty */         0 },
+  { /* openmp-loop-form */                                      10311, /* DiagArray486 */ 1362, /* Empty */         0 },
+  { /* openmp-target */                                         10328, /* DiagArray487 */ 1365, /* Empty */         0 },
+  { /* option-ignored */                                        10342, /* DiagArray488 */ 1370, /* Empty */         0 },
+  { /* ordered-compare-function-pointers */                     10357, /* DiagArray489 */ 1377, /* Empty */         0 },
+  { /* out-of-line-declaration */                               10391, /* DiagArray490 */ 1379, /* Empty */         0 },
+  { /* out-of-scope-function */                                 10415, /* DiagArray491 */ 1381, /* Empty */         0 },
+  { /* over-aligned */                                          10437, /* DiagArray492 */ 1383, /* Empty */         0 },
+  { /* overflow */                                              10450, /* Empty */     0, /* Empty */         0 },
+  { /* overlength-strings */                                    10459, /* DiagArray494 */ 1385, /* Empty */         0 },
+  { /* overloaded-shift-op-parentheses */                       10478, /* DiagArray495 */ 1387, /* Empty */         0 },
+  { /* overloaded-virtual */                                    10510, /* DiagArray496 */ 1389, /* Empty */         0 },
+  { /* override-module */                                       10529, /* DiagArray497 */ 1391, /* Empty */         0 },
+  { /* overriding-method-mismatch */                            10545, /* DiagArray498 */ 1393, /* Empty */         0 },
+  { /* overriding-t-option */                                   10572, /* DiagArray499 */ 1401, /* Empty */         0 },
+  { /* packed */                                                10592, /* DiagArray500 */ 1403, /* Empty */         0 },
+  { /* padded */                                                10599, /* DiagArray501 */ 1405, /* Empty */         0 },
+  { /* parentheses */                                           10606, /* DiagArray502 */ 1409, /* DiagSubGroup502 */ 336 },
+  { /* parentheses-equality */                                  10618, /* DiagArray503 */ 1413, /* Empty */         0 },
+  { /* partial-availability */                                  10639, /* Empty */     0, /* DiagSubGroup504 */ 344 },
+  { /* pass */                                                  10660, /* DiagArray505 */ 1415, /* Empty */         0 },
+  { /* pass-analysis */                                         10665, /* DiagArray506 */ 1417, /* Empty */         0 },
+  { /* pass-failed */                                           10679, /* DiagArray507 */ 1421, /* Empty */         0 },
+  { /* pass-missed */                                           10691, /* DiagArray508 */ 1423, /* Empty */         0 },
+  { /* pch-date-time */                                         10703, /* DiagArray509 */ 1425, /* Empty */         0 },
+  { /* pedantic */                                              10717, /* DiagArray510 */ 1427, /* DiagSubGroup510 */ 346 },
+  { /* pedantic-core-features */                                10726, /* DiagArray511 */ 1497, /* Empty */         0 },
+  { /* pessimizing-move */                                      10749, /* DiagArray512 */ 1499, /* Empty */         0 },
+  { /* pointer-arith */                                         10766, /* DiagArray513 */ 1502, /* Empty */         0 },
+  { /* pointer-bool-conversion */                               10780, /* DiagArray514 */ 1509, /* Empty */         0 },
+  { /* pointer-sign */                                          10804, /* DiagArray515 */ 1512, /* Empty */         0 },
+  { /* pointer-to-int-cast */                                   10817, /* Empty */     0, /* Empty */         0 },
+  { /* pointer-type-mismatch */                                 10837, /* DiagArray517 */ 1514, /* Empty */         0 },
+  { /* potentially-evaluated-expression */                      10859, /* DiagArray518 */ 1516, /* Empty */         0 },
+  { /* pragma-clang-attribute */                                10892, /* DiagArray519 */ 1518, /* Empty */         0 },
+  { /* pragma-once-outside-header */                            10915, /* DiagArray520 */ 1520, /* Empty */         0 },
+  { /* pragma-pack */                                           10942, /* DiagArray521 */ 1522, /* DiagSubGroup521 */ 397 },
+  { /* pragma-pack-suspicious-include */                        10954, /* DiagArray522 */ 1525, /* Empty */         0 },
+  { /* pragma-system-header-outside-header */                   10985, /* DiagArray523 */ 1527, /* Empty */         0 },
+  { /* pragmas */                                               11021, /* DiagArray524 */ 1529, /* DiagSubGroup524 */ 399 },
+  { /* predefined-identifier-outside-function */                11029, /* DiagArray525 */ 1531, /* Empty */         0 },
+  { /* private-extern */                                        11068, /* DiagArray526 */ 1533, /* Empty */         0 },
+  { /* private-header */                                        11083, /* DiagArray527 */ 1535, /* Empty */         0 },
+  { /* private-module */                                        11098, /* DiagArray528 */ 1537, /* Empty */         0 },
+  { /* profile-instr-missing */                                 11113, /* DiagArray529 */ 1542, /* Empty */         0 },
+  { /* profile-instr-out-of-date */                             11135, /* DiagArray530 */ 1544, /* Empty */         0 },
+  { /* profile-instr-unprofiled */                              11161, /* DiagArray531 */ 1546, /* Empty */         0 },
+  { /* property-access-dot-syntax */                            11186, /* DiagArray532 */ 1548, /* Empty */         0 },
+  { /* property-attribute-mismatch */                           11213, /* DiagArray533 */ 1550, /* Empty */         0 },
+  { /* protocol */                                              11241, /* DiagArray534 */ 1555, /* Empty */         0 },
+  { /* protocol-property-synthesis-ambiguity */                 11250, /* DiagArray535 */ 1557, /* Empty */         0 },
+  { /* qualified-void-return-type */                            11288, /* DiagArray536 */ 1559, /* Empty */         0 },
+  { /* quoted-include-in-framework-header */                    11315, /* DiagArray537 */ 1561, /* Empty */         0 },
+  { /* range-loop-analysis */                                   11350, /* DiagArray538 */ 1563, /* Empty */         0 },
+  { /* readonly-iboutlet-property */                            11370, /* DiagArray539 */ 1567, /* Empty */         0 },
+  { /* receiver-expr */                                         11397, /* DiagArray540 */ 1569, /* Empty */         0 },
+  { /* receiver-forward-class */                                11411, /* DiagArray541 */ 1571, /* Empty */         0 },
+  { /* redeclared-class-member */                               11434, /* DiagArray542 */ 1574, /* Empty */         0 },
+  { /* redundant-decls */                                       11458, /* Empty */     0, /* Empty */         0 },
+  { /* redundant-move */                                        11474, /* DiagArray544 */ 1576, /* Empty */         0 },
+  { /* redundant-parens */                                      11489, /* DiagArray545 */ 1578, /* Empty */         0 },
+  { /* register */                                              11506, /* DiagArray546 */ 1580, /* DiagSubGroup546 */ 404 },
+  { /* reinterpret-base-class */                                11515, /* DiagArray547 */ 1582, /* Empty */         0 },
+  { /* remark-backend-plugin */                                 11538, /* DiagArray548 */ 1584, /* Empty */         0 },
+  { /* reorder */                                               11560, /* DiagArray549 */ 1586, /* Empty */         0 },
+  { /* requires-super-attribute */                              11568, /* DiagArray550 */ 1588, /* Empty */         0 },
+  { /* reserved-id-macro */                                     11593, /* DiagArray551 */ 1590, /* Empty */         0 },
+  { /* reserved-user-defined-literal */                         11611, /* DiagArray552 */ 1592, /* DiagSubGroup552 */ 406 },
+  { /* retained-language-linkage */                             11641, /* DiagArray553 */ 1595, /* Empty */         0 },
+  { /* return-stack-address */                                  11667, /* DiagArray554 */ 1597, /* Empty */         0 },
+  { /* return-std-move */                                       11688, /* DiagArray555 */ 1601, /* Empty */         0 },
+  { /* return-std-move-in-c++11 */                              11704, /* DiagArray556 */ 1603, /* Empty */         0 },
+  { /* return-type */                                           11729, /* DiagArray557 */ 1605, /* DiagSubGroup557 */ 408 },
+  { /* return-type-c-linkage */                                 11741, /* DiagArray558 */ 1615, /* Empty */         0 },
+  { /* sanitize-address */                                      11763, /* DiagArray559 */ 1618, /* Empty */         0 },
+  { /* section */                                               11780, /* DiagArray560 */ 1621, /* Empty */         0 },
+  { /* selector */                                              11788, /* DiagArray561 */ 1625, /* DiagSubGroup561 */ 410 },
+  { /* selector-type-mismatch */                                11797, /* DiagArray562 */ 1627, /* Empty */         0 },
+  { /* self-assign */                                           11820, /* DiagArray563 */ 1629, /* DiagSubGroup563 */ 412 },
+  { /* self-assign-field */                                     11832, /* DiagArray564 */ 1631, /* Empty */         0 },
+  { /* self-assign-overloaded */                                11850, /* DiagArray565 */ 1633, /* Empty */         0 },
+  { /* self-move */                                             11873, /* DiagArray566 */ 1635, /* Empty */         0 },
+  { /* semicolon-before-method-body */                          11883, /* DiagArray567 */ 1637, /* Empty */         0 },
+  { /* sentinel */                                              11912, /* DiagArray568 */ 1639, /* Empty */         0 },
+  { /* sequence-point */                                        11921, /* Empty */     0, /* DiagSubGroup569 */ 415 },
+  { /* serialized-diagnostics */                                11936, /* DiagArray570 */ 1642, /* Empty */         0 },
+  { /* shadow */                                                11959, /* DiagArray571 */ 1645, /* DiagSubGroup571 */ 417 },
+  { /* shadow-all */                                            11966, /* Empty */     0, /* DiagSubGroup572 */ 420 },
+  { /* shadow-field */                                          11977, /* DiagArray573 */ 1647, /* Empty */         0 },
+  { /* shadow-field-in-constructor */                           11990, /* DiagArray574 */ 1649, /* DiagSubGroup574 */ 425 },
+  { /* shadow-field-in-constructor-modified */                  12018, /* DiagArray575 */ 1651, /* Empty */         0 },
+  { /* shadow-ivar */                                           12055, /* DiagArray576 */ 1653, /* Empty */         0 },
+  { /* shadow-uncaptured-local */                               12067, /* DiagArray577 */ 1655, /* Empty */         0 },
+  { /* shift-count-negative */                                  12091, /* DiagArray578 */ 1657, /* Empty */         0 },
+  { /* shift-count-overflow */                                  12112, /* DiagArray579 */ 1659, /* Empty */         0 },
+  { /* shift-negative-value */                                  12133, /* DiagArray580 */ 1661, /* Empty */         0 },
+  { /* shift-op-parentheses */                                  12154, /* DiagArray581 */ 1663, /* Empty */         0 },
+  { /* shift-overflow */                                        12175, /* DiagArray582 */ 1665, /* Empty */         0 },
+  { /* shift-sign-overflow */                                   12190, /* DiagArray583 */ 1667, /* Empty */         0 },
+  { /* shorten-64-to-32 */                                      12210, /* DiagArray584 */ 1669, /* Empty */         0 },
+  { /* sign-compare */                                          12227, /* DiagArray585 */ 1671, /* Empty */         0 },
+  { /* sign-conversion */                                       12240, /* DiagArray586 */ 1673, /* Empty */         0 },
+  { /* sign-promo */                                            12256, /* Empty */     0, /* Empty */         0 },
+  { /* signed-enum-bitfield */                                  12267, /* DiagArray588 */ 1676, /* Empty */         0 },
+  { /* sizeof-array-argument */                                 12288, /* DiagArray589 */ 1678, /* Empty */         0 },
+  { /* sizeof-array-decay */                                    12310, /* DiagArray590 */ 1680, /* Empty */         0 },
+  { /* sizeof-pointer-memaccess */                              12329, /* DiagArray591 */ 1682, /* Empty */         0 },
+  { /* slash-u-filename */                                      12354, /* DiagArray592 */ 1685, /* Empty */         0 },
+  { /* sometimes-uninitialized */                               12371, /* DiagArray593 */ 1687, /* Empty */         0 },
+  { /* source-uses-openmp */                                    12395, /* DiagArray594 */ 1689, /* Empty */         0 },
+  { /* spir-compat */                                           12414, /* DiagArray595 */ 1692, /* Empty */         0 },
+  { /* stack-protector */                                       12426, /* Empty */     0, /* Empty */         0 },
+  { /* static-float-init */                                     12442, /* DiagArray597 */ 1694, /* DiagSubGroup597 */ 427 },
+  { /* static-in-inline */                                      12460, /* DiagArray598 */ 1696, /* Empty */         0 },
+  { /* static-inline-explicit-instantiation */                  12477, /* DiagArray599 */ 1699, /* Empty */         0 },
+  { /* static-local-in-inline */                                12514, /* DiagArray600 */ 1701, /* Empty */         0 },
+  { /* static-self-init */                                      12537, /* DiagArray601 */ 1703, /* Empty */         0 },
+  { /* stdlibcxx-not-found */                                   12554, /* DiagArray602 */ 1705, /* Empty */         0 },
+  { /* strict-aliasing */                                       12574, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=0 */                                     12590, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=1 */                                     12608, /* Empty */     0, /* Empty */         0 },
+  { /* strict-aliasing=2 */                                     12626, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow */                                       12644, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=0 */                                     12660, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=1 */                                     12678, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=2 */                                     12696, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=3 */                                     12714, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=4 */                                     12732, /* Empty */     0, /* Empty */         0 },
+  { /* strict-overflow=5 */                                     12750, /* Empty */     0, /* Empty */         0 },
+  { /* strict-prototypes */                                     12768, /* DiagArray614 */ 1707, /* Empty */         0 },
+  { /* strict-selector-match */                                 12786, /* DiagArray615 */ 1709, /* Empty */         0 },
+  { /* string-compare */                                        12808, /* DiagArray616 */ 1711, /* Empty */         0 },
+  { /* string-conversion */                                     12823, /* DiagArray617 */ 1713, /* Empty */         0 },
+  { /* string-plus-char */                                      12841, /* DiagArray618 */ 1715, /* Empty */         0 },
+  { /* string-plus-int */                                       12858, /* DiagArray619 */ 1717, /* Empty */         0 },
+  { /* strlcpy-strlcat-size */                                  12874, /* DiagArray620 */ 1719, /* Empty */         0 },
+  { /* strncat-size */                                          12895, /* DiagArray621 */ 1721, /* Empty */         0 },
+  { /* super-class-method-mismatch */                           12908, /* DiagArray622 */ 1725, /* Empty */         0 },
+  { /* suspicious-bzero */                                      12936, /* DiagArray623 */ 1727, /* Empty */         0 },
+  { /* suspicious-memaccess */                                  12953, /* Empty */     0, /* DiagSubGroup624 */ 429 },
+  { /* switch */                                                12974, /* DiagArray625 */ 1729, /* Empty */         0 },
+  { /* switch-bool */                                           12981, /* DiagArray626 */ 1733, /* Empty */         0 },
+  { /* switch-default */                                        12993, /* Empty */     0, /* Empty */         0 },
+  { /* switch-enum */                                           13008, /* DiagArray628 */ 1735, /* Empty */         0 },
+  { /* sync-fetch-and-nand-semantics-changed */                 13020, /* DiagArray629 */ 1737, /* Empty */         0 },
+  { /* synth */                                                 13058, /* Empty */     0, /* Empty */         0 },
+  { /* tautological-compare */                                  13064, /* DiagArray631 */ 1739, /* DiagSubGroup631 */ 435 },
+  { /* tautological-constant-compare */                         13085, /* DiagArray632 */ 1742, /* DiagSubGroup632 */ 440 },
+  { /* tautological-constant-in-range-compare */                13115, /* Empty */     0, /* DiagSubGroup633 */ 442 },
+  { /* tautological-constant-out-of-range-compare */            13154, /* DiagArray634 */ 1744, /* Empty */         0 },
+  { /* tautological-overlap-compare */                          13197, /* DiagArray635 */ 1746, /* Empty */         0 },
+  { /* tautological-pointer-compare */                          13226, /* DiagArray636 */ 1748, /* Empty */         0 },
+  { /* tautological-type-limit-compare */                       13255, /* DiagArray637 */ 1751, /* Empty */         0 },
+  { /* tautological-undefined-compare */                        13287, /* DiagArray638 */ 1753, /* Empty */         0 },
+  { /* tautological-unsigned-enum-zero-compare */               13318, /* DiagArray639 */ 1756, /* Empty */         0 },
+  { /* tautological-unsigned-zero-compare */                    13358, /* DiagArray640 */ 1758, /* Empty */         0 },
+  { /* tentative-definition-incomplete-type */                  13393, /* DiagArray641 */ 1760, /* Empty */         0 },
+  { /* thread-safety */                                         13430, /* Empty */     0, /* DiagSubGroup642 */ 446 },
+  { /* thread-safety-analysis */                                13444, /* DiagArray643 */ 1762, /* Empty */         0 },
+  { /* thread-safety-attributes */                              13467, /* DiagArray644 */ 1780, /* Empty */         0 },
+  { /* thread-safety-beta */                                    13492, /* DiagArray645 */ 1786, /* Empty */         0 },
+  { /* thread-safety-negative */                                13511, /* DiagArray646 */ 1788, /* Empty */         0 },
+  { /* thread-safety-precise */                                 13534, /* DiagArray647 */ 1790, /* Empty */         0 },
+  { /* thread-safety-reference */                               13556, /* DiagArray648 */ 1794, /* Empty */         0 },
+  { /* thread-safety-verbose */                                 13580, /* DiagArray649 */ 1797, /* Empty */         0 },
+  { /* trigraphs */                                             13602, /* DiagArray650 */ 1799, /* Empty */         0 },
+  { /* type-limits */                                           13612, /* Empty */     0, /* Empty */         0 },
+  { /* type-safety */                                           13624, /* DiagArray652 */ 1804, /* Empty */         0 },
+  { /* typedef-redefinition */                                  13636, /* DiagArray653 */ 1808, /* Empty */         0 },
+  { /* typename-missing */                                      13657, /* DiagArray654 */ 1810, /* Empty */         0 },
+  { /* unable-to-open-stats-file */                             13674, /* DiagArray655 */ 1812, /* Empty */         0 },
+  { /* unavailable-declarations */                              13700, /* DiagArray656 */ 1814, /* Empty */         0 },
+  { /* undeclared-selector */                                   13725, /* DiagArray657 */ 1816, /* Empty */         0 },
+  { /* undef */                                                 13745, /* DiagArray658 */ 1819, /* Empty */         0 },
+  { /* undefined-bool-conversion */                             13751, /* DiagArray659 */ 1821, /* Empty */         0 },
+  { /* undefined-func-template */                               13777, /* DiagArray660 */ 1824, /* Empty */         0 },
+  { /* undefined-inline */                                      13801, /* DiagArray661 */ 1826, /* Empty */         0 },
+  { /* undefined-internal */                                    13818, /* DiagArray662 */ 1828, /* Empty */         0 },
+  { /* undefined-internal-type */                               13837, /* DiagArray663 */ 1830, /* Empty */         0 },
+  { /* undefined-reinterpret-cast */                            13861, /* DiagArray664 */ 1832, /* Empty */         0 },
+  { /* undefined-var-template */                                13888, /* DiagArray665 */ 1835, /* Empty */         0 },
+  { /* unevaluated-expression */                                13911, /* DiagArray666 */ 1837, /* DiagSubGroup666 */ 451 },
+  { /* unguarded-availability */                                13934, /* DiagArray667 */ 1839, /* DiagSubGroup667 */ 453 },
+  { /* unguarded-availability-new */                            13957, /* DiagArray668 */ 1841, /* Empty */         0 },
+  { /* unicode */                                               13984, /* DiagArray669 */ 1843, /* Empty */         0 },
+  { /* unicode-homoglyph */                                     13992, /* DiagArray670 */ 1849, /* Empty */         0 },
+  { /* unicode-whitespace */                                    14010, /* DiagArray671 */ 1851, /* Empty */         0 },
+  { /* uninitialized */                                         14029, /* DiagArray672 */ 1853, /* DiagSubGroup672 */ 455 },
+  { /* unknown-argument */                                      14043, /* DiagArray673 */ 1861, /* Empty */         0 },
+  { /* unknown-attributes */                                    14060, /* DiagArray674 */ 1864, /* Empty */         0 },
+  { /* unknown-escape-sequence */                               14079, /* DiagArray675 */ 1866, /* Empty */         0 },
+  { /* unknown-pragmas */                                       14103, /* DiagArray676 */ 1868, /* Empty */         0 },
+  { /* unknown-sanitizers */                                    14119, /* DiagArray677 */ 1886, /* Empty */         0 },
+  { /* unknown-warning-option */                                14138, /* DiagArray678 */ 1888, /* Empty */         0 },
+  { /* unnamed-type-template-args */                            14161, /* DiagArray679 */ 1892, /* DiagSubGroup679 */ 458 },
+  { /* unneeded-internal-declaration */                         14188, /* DiagArray680 */ 1894, /* Empty */         0 },
+  { /* unneeded-member-function */                              14218, /* DiagArray681 */ 1897, /* Empty */         0 },
+  { /* unreachable-code */                                      14243, /* DiagArray682 */ 1899, /* DiagSubGroup682 */ 460 },
+  { /* unreachable-code-aggressive */                           14260, /* Empty */     0, /* DiagSubGroup683 */ 462 },
+  { /* unreachable-code-break */                                14288, /* DiagArray684 */ 1901, /* Empty */         0 },
+  { /* unreachable-code-loop-increment */                       14311, /* DiagArray685 */ 1903, /* Empty */         0 },
+  { /* unreachable-code-return */                               14343, /* DiagArray686 */ 1905, /* Empty */         0 },
+  { /* unsequenced */                                           14367, /* DiagArray687 */ 1907, /* Empty */         0 },
+  { /* unsupported-abs */                                       14379, /* DiagArray688 */ 1910, /* Empty */         0 },
+  { /* unsupported-availability-guard */                        14395, /* DiagArray689 */ 1913, /* Empty */         0 },
+  { /* unsupported-cb */                                        14426, /* DiagArray690 */ 1915, /* Empty */         0 },
+  { /* unsupported-dll-base-class-template */                   14441, /* DiagArray691 */ 1917, /* Empty */         0 },
+  { /* unsupported-friend */                                    14477, /* DiagArray692 */ 1919, /* Empty */         0 },
+  { /* unsupported-gpopt */                                     14496, /* DiagArray693 */ 1922, /* Empty */         0 },
+  { /* unsupported-nan */                                       14514, /* DiagArray694 */ 1924, /* Empty */         0 },
+  { /* unsupported-target-opt */                                14530, /* DiagArray695 */ 1927, /* Empty */         0 },
+  { /* unsupported-visibility */                                14553, /* DiagArray696 */ 1929, /* Empty */         0 },
+  { /* unusable-partial-specialization */                       14576, /* DiagArray697 */ 1931, /* Empty */         0 },
+  { /* unused */                                                14608, /* Empty */     0, /* DiagSubGroup698 */ 466 },
+  { /* unused-argument */                                       14615, /* Empty */     0, /* Empty */         0 },
+  { /* unused-command-line-argument */                          14631, /* DiagArray700 */ 1933, /* Empty */         0 },
+  { /* unused-comparison */                                     14660, /* DiagArray701 */ 1941, /* Empty */         0 },
+  { /* unused-const-variable */                                 14678, /* DiagArray702 */ 1943, /* Empty */         0 },
+  { /* unused-exception-parameter */                            14700, /* DiagArray703 */ 1945, /* Empty */         0 },
+  { /* unused-function */                                       14727, /* DiagArray704 */ 1947, /* DiagSubGroup704 */ 476 },
+  { /* unused-getter-return-value */                            14743, /* DiagArray705 */ 1949, /* Empty */         0 },
+  { /* unused-label */                                          14770, /* DiagArray706 */ 1951, /* Empty */         0 },
+  { /* unused-lambda-capture */                                 14783, /* DiagArray707 */ 1953, /* Empty */         0 },
+  { /* unused-local-typedef */                                  14805, /* DiagArray708 */ 1955, /* Empty */         0 },
+  { /* unused-local-typedefs */                                 14826, /* Empty */     0, /* DiagSubGroup709 */ 478 },
+  { /* unused-macros */                                         14848, /* DiagArray710 */ 1957, /* Empty */         0 },
+  { /* unused-member-function */                                14862, /* DiagArray711 */ 1959, /* DiagSubGroup711 */ 480 },
+  { /* unused-parameter */                                      14885, /* DiagArray712 */ 1961, /* Empty */         0 },
+  { /* unused-private-field */                                  14902, /* DiagArray713 */ 1963, /* Empty */         0 },
+  { /* unused-property-ivar */                                  14923, /* DiagArray714 */ 1965, /* Empty */         0 },
+  { /* unused-result */                                         14944, /* DiagArray715 */ 1967, /* Empty */         0 },
+  { /* unused-template */                                       14958, /* DiagArray716 */ 1969, /* DiagSubGroup716 */ 482 },
+  { /* unused-value */                                          14974, /* DiagArray717 */ 1971, /* DiagSubGroup717 */ 484 },
+  { /* unused-variable */                                       14987, /* DiagArray718 */ 1976, /* DiagSubGroup718 */ 488 },
+  { /* unused-volatile-lvalue */                                15003, /* DiagArray719 */ 1978, /* Empty */         0 },
+  { /* used-but-marked-unused */                                15026, /* DiagArray720 */ 1980, /* Empty */         0 },
+  { /* user-defined-literals */                                 15049, /* DiagArray721 */ 1982, /* Empty */         0 },
+  { /* user-defined-warnings */                                 15071, /* DiagArray722 */ 1984, /* Empty */         0 },
+  { /* varargs */                                               15093, /* DiagArray723 */ 1986, /* Empty */         0 },
+  { /* variadic-macros */                                       15101, /* DiagArray724 */ 1990, /* Empty */         0 },
+  { /* vec-elem-size */                                         15117, /* DiagArray725 */ 1994, /* Empty */         0 },
+  { /* vector-conversion */                                     15131, /* DiagArray726 */ 1996, /* Empty */         0 },
+  { /* vector-conversions */                                    15149, /* Empty */     0, /* DiagSubGroup727 */ 490 },
+  { /* vexing-parse */                                          15168, /* DiagArray728 */ 1998, /* Empty */         0 },
+  { /* visibility */                                            15181, /* DiagArray729 */ 2002, /* Empty */         0 },
+  { /* vla */                                                   15192, /* DiagArray730 */ 2005, /* Empty */         0 },
+  { /* vla-extension */                                         15196, /* DiagArray731 */ 2007, /* Empty */         0 },
+  { /* void-ptr-dereference */                                  15210, /* DiagArray732 */ 2009, /* Empty */         0 },
+  { /* volatile-register-var */                                 15231, /* Empty */     0, /* Empty */         0 },
+  { /* weak-template-vtables */                                 15253, /* DiagArray734 */ 2011, /* Empty */         0 },
+  { /* weak-vtables */                                          15275, /* DiagArray735 */ 2013, /* Empty */         0 },
+  { /* writable-strings */                                      15288, /* DiagArray736 */ 2015, /* DiagSubGroup736 */ 492 },
+  { /* write-strings */                                         15305, /* Empty */     0, /* DiagSubGroup737 */ 494 },
+  { /* zero-as-null-pointer-constant */                         15319, /* DiagArray738 */ 2017, /* Empty */         0 },
+  { /* zero-length-array */                                     15349, /* DiagArray739 */ 2019, /* Empty */         0 },
 #endif // GET_DIAG_TABLE
 
 
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h b/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
index b4ea85b..983dcb2 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticIDs.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the Diagnostic IDs-related interfaces.
+/// Defines the Diagnostic IDs-related interfaces.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -60,7 +60,7 @@
 
     class CustomDiagInfo;
 
-    /// \brief All of the diagnostics that can be emitted by the frontend.
+    /// All of the diagnostics that can be emitted by the frontend.
     typedef unsigned kind;
 
     // Get typedefs for common diagnostics.
@@ -158,25 +158,25 @@
   }
 };
 
-/// \brief Used for handling and querying diagnostic IDs.
+/// Used for handling and querying diagnostic IDs.
 ///
 /// Can be used and shared by multiple Diagnostics for multiple translation units.
 class DiagnosticIDs : public RefCountedBase<DiagnosticIDs> {
 public:
-  /// \brief The level of the diagnostic, after it has been through mapping.
+  /// The level of the diagnostic, after it has been through mapping.
   enum Level {
     Ignored, Note, Remark, Warning, Error, Fatal
   };
 
 private:
-  /// \brief Information for uniquing and looking up custom diags.
+  /// Information for uniquing and looking up custom diags.
   diag::CustomDiagInfo *CustomDiagInfo;
 
 public:
   DiagnosticIDs();
   ~DiagnosticIDs();
 
-  /// \brief Return an ID for a diagnostic with the specified format string and
+  /// Return an ID for a diagnostic with the specified format string and
   /// level.
   ///
   /// If this is the first request for this diagnostic, it is registered and
@@ -191,31 +191,31 @@
   // Diagnostic classification and reporting interfaces.
   //
 
-  /// \brief Given a diagnostic ID, return a description of the issue.
+  /// Given a diagnostic ID, return a description of the issue.
   StringRef getDescription(unsigned DiagID) const;
 
-  /// \brief Return true if the unmapped diagnostic levelof the specified
+  /// Return true if the unmapped diagnostic levelof the specified
   /// diagnostic ID is a Warning or Extension.
   ///
   /// This only works on builtin diagnostics, not custom ones, and is not
   /// legal to call on NOTEs.
   static bool isBuiltinWarningOrExtension(unsigned DiagID);
 
-  /// \brief Return true if the specified diagnostic is mapped to errors by
+  /// Return true if the specified diagnostic is mapped to errors by
   /// default.
   static bool isDefaultMappingAsError(unsigned DiagID);
 
-  /// \brief Determine whether the given built-in diagnostic ID is a Note.
+  /// Determine whether the given built-in diagnostic ID is a Note.
   static bool isBuiltinNote(unsigned DiagID);
 
-  /// \brief Determine whether the given built-in diagnostic ID is for an
+  /// Determine whether the given built-in diagnostic ID is for an
   /// extension of some sort.
   static bool isBuiltinExtensionDiag(unsigned DiagID) {
     bool ignored;
     return isBuiltinExtensionDiag(DiagID, ignored);
   }
-  
-  /// \brief Determine whether the given built-in diagnostic ID is for an
+
+  /// Determine whether the given built-in diagnostic ID is for an
   /// extension of some sort, and whether it is enabled by default.
   ///
   /// This also returns EnabledByDefault, which is set to indicate whether the
@@ -223,55 +223,55 @@
   /// treated as a warning/error by default.
   ///
   static bool isBuiltinExtensionDiag(unsigned DiagID, bool &EnabledByDefault);
-  
 
-  /// \brief Return the lowest-level warning option that enables the specified
+
+  /// Return the lowest-level warning option that enables the specified
   /// diagnostic.
   ///
   /// If there is no -Wfoo flag that controls the diagnostic, this returns null.
   static StringRef getWarningOptionForDiag(unsigned DiagID);
-  
-  /// \brief Return the category number that a specified \p DiagID belongs to,
+
+  /// Return the category number that a specified \p DiagID belongs to,
   /// or 0 if no category.
   static unsigned getCategoryNumberForDiag(unsigned DiagID);
 
-  /// \brief Return the number of diagnostic categories.
+  /// Return the number of diagnostic categories.
   static unsigned getNumberOfCategories();
 
-  /// \brief Given a category ID, return the name of the category.
+  /// Given a category ID, return the name of the category.
   static StringRef getCategoryNameFromID(unsigned CategoryID);
-  
-  /// \brief Return true if a given diagnostic falls into an ARC diagnostic
+
+  /// Return true if a given diagnostic falls into an ARC diagnostic
   /// category.
   static bool isARCDiagnostic(unsigned DiagID);
 
-  /// \brief Enumeration describing how the emission of a diagnostic should
+  /// Enumeration describing how the emission of a diagnostic should
   /// be treated when it occurs during C++ template argument deduction.
   enum SFINAEResponse {
-    /// \brief The diagnostic should not be reported, but it should cause
+    /// The diagnostic should not be reported, but it should cause
     /// template argument deduction to fail.
     ///
-    /// The vast majority of errors that occur during template argument 
+    /// The vast majority of errors that occur during template argument
     /// deduction fall into this category.
     SFINAE_SubstitutionFailure,
-    
-    /// \brief The diagnostic should be suppressed entirely.
+
+    /// The diagnostic should be suppressed entirely.
     ///
     /// Warnings generally fall into this category.
     SFINAE_Suppress,
-    
-    /// \brief The diagnostic should be reported.
+
+    /// The diagnostic should be reported.
     ///
-    /// The diagnostic should be reported. Various fatal errors (e.g., 
+    /// The diagnostic should be reported. Various fatal errors (e.g.,
     /// template instantiation depth exceeded) fall into this category.
     SFINAE_Report,
-    
-    /// \brief The diagnostic is an access-control diagnostic, which will be
+
+    /// The diagnostic is an access-control diagnostic, which will be
     /// substitution failures in some contexts and reported in others.
     SFINAE_AccessControl
   };
-  
-  /// \brief Determines whether the given built-in diagnostic ID is
+
+  /// Determines whether the given built-in diagnostic ID is
   /// for an error that is suppressed if it occurs during C++ template
   /// argument deduction.
   ///
@@ -281,32 +281,32 @@
   /// are not SFINAE errors.
   static SFINAEResponse getDiagnosticSFINAEResponse(unsigned DiagID);
 
-  /// \brief Get the string of all diagnostic flags.
+  /// Get the string of all diagnostic flags.
   ///
   /// \returns A list of all diagnostics flags as they would be written in a
   /// command line invocation including their `no-` variants. For example:
   /// `{"-Wempty-body", "-Wno-empty-body", ...}`
   static std::vector<std::string> getDiagnosticFlags();
 
-  /// \brief Get the set of all diagnostic IDs in the group with the given name.
+  /// Get the set of all diagnostic IDs in the group with the given name.
   ///
   /// \param[out] Diags - On return, the diagnostics in the group.
   /// \returns \c true if the given group is unknown, \c false otherwise.
   bool getDiagnosticsInGroup(diag::Flavor Flavor, StringRef Group,
                              SmallVectorImpl<diag::kind> &Diags) const;
 
-  /// \brief Get the set of all diagnostic IDs.
+  /// Get the set of all diagnostic IDs.
   static void getAllDiagnostics(diag::Flavor Flavor,
                                 std::vector<diag::kind> &Diags);
 
-  /// \brief Get the diagnostic option with the closest edit distance to the
+  /// Get the diagnostic option with the closest edit distance to the
   /// given group name.
   static StringRef getNearestOption(diag::Flavor Flavor, StringRef Group);
 
 private:
-  /// \brief Classify the specified diagnostic ID into a Level, consumable by
+  /// Classify the specified diagnostic ID into a Level, consumable by
   /// the DiagnosticClient.
-  /// 
+  ///
   /// The classification is based on the way the client configured the
   /// DiagnosticsEngine object.
   ///
@@ -320,17 +320,17 @@
   getDiagnosticSeverity(unsigned DiagID, SourceLocation Loc,
                         const DiagnosticsEngine &Diag) const LLVM_READONLY;
 
-  /// \brief Used to report a diagnostic that is finally fully formed.
+  /// Used to report a diagnostic that is finally fully formed.
   ///
   /// \returns \c true if the diagnostic was emitted, \c false if it was
   /// suppressed.
   bool ProcessDiag(DiagnosticsEngine &Diag) const;
 
-  /// \brief Used to emit a diagnostic that is finally fully formed,
+  /// Used to emit a diagnostic that is finally fully formed,
   /// ignoring suppression.
   void EmitDiag(DiagnosticsEngine &Diag, Level DiagLevel) const;
 
-  /// \brief Whether the diagnostic may leave the AST in a state where some
+  /// Whether the diagnostic may leave the AST in a state where some
   /// invariants can break.
   bool isUnrecoverable(unsigned DiagID) const;
 
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc b/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
index a700751..4af2708 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticIndexName.inc
@@ -1,4 +1,5 @@
 DIAG_NAME_INDEX(backslash_newline_space)
+DIAG_NAME_INDEX(err_32_bit_builtin_64_bit_tgt)
 DIAG_NAME_INDEX(err_64_bit_builtin_32_bit_tgt)
 DIAG_NAME_INDEX(err__Pragma_malformed)
 DIAG_NAME_INDEX(err_abi_tag_on_redeclaration)
@@ -43,6 +44,7 @@
 DIAG_NAME_INDEX(err_alignas_mismatch)
 DIAG_NAME_INDEX(err_alignas_missing_on_definition)
 DIAG_NAME_INDEX(err_alignas_underaligned)
+DIAG_NAME_INDEX(err_aligned_allocation_unavailable)
 DIAG_NAME_INDEX(err_aligned_attribute_argument_not_int)
 DIAG_NAME_INDEX(err_alignment_dependent_typedef_name)
 DIAG_NAME_INDEX(err_alignment_not_power_of_two)
@@ -140,6 +142,8 @@
 DIAG_NAME_INDEX(err_array_init_narrow_string_into_wchar)
 DIAG_NAME_INDEX(err_array_init_non_constant_array)
 DIAG_NAME_INDEX(err_array_init_not_init_list)
+DIAG_NAME_INDEX(err_array_init_plain_string_into_char8_t)
+DIAG_NAME_INDEX(err_array_init_utf8_string_into_char)
 DIAG_NAME_INDEX(err_array_init_wide_string_into_char)
 DIAG_NAME_INDEX(err_array_new_needs_size)
 DIAG_NAME_INDEX(err_array_of_abstract_type)
@@ -190,6 +194,7 @@
 DIAG_NAME_INDEX(err_at_in_class)
 DIAG_NAME_INDEX(err_atdef_nonfragile_interface)
 DIAG_NAME_INDEX(err_atimport)
+DIAG_NAME_INDEX(err_atomic_builtin_cannot_be_const)
 DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer)
 DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer_intfltptr)
 DIAG_NAME_INDEX(err_atomic_builtin_must_be_pointer_intptr)
@@ -200,6 +205,7 @@
 DIAG_NAME_INDEX(err_atomic_op_has_invalid_synch_scope)
 DIAG_NAME_INDEX(err_atomic_op_needs_atomic)
 DIAG_NAME_INDEX(err_atomic_op_needs_atomic_int_or_ptr)
+DIAG_NAME_INDEX(err_atomic_op_needs_int32_or_ptr)
 DIAG_NAME_INDEX(err_atomic_op_needs_non_const_atomic)
 DIAG_NAME_INDEX(err_atomic_op_needs_non_const_pointer)
 DIAG_NAME_INDEX(err_atomic_op_needs_trivial_copy)
@@ -382,8 +388,10 @@
 DIAG_NAME_INDEX(err_builtin_longjmp_unsupported)
 DIAG_NAME_INDEX(err_builtin_needs_feature)
 DIAG_NAME_INDEX(err_builtin_operator_new_delete_not_usual)
+DIAG_NAME_INDEX(err_builtin_redeclare)
 DIAG_NAME_INDEX(err_builtin_requires_language)
 DIAG_NAME_INDEX(err_builtin_setjmp_unsupported)
+DIAG_NAME_INDEX(err_builtin_target_unsupported)
 DIAG_NAME_INDEX(err_builtin_x64_aarch64_only)
 DIAG_NAME_INDEX(err_c11_noreturn_misplaced)
 DIAG_NAME_INDEX(err_c99_array_usage_cxx)
@@ -448,6 +456,7 @@
 DIAG_NAME_INDEX(err_config_scalar_return)
 DIAG_NAME_INDEX(err_conflict_marker)
 DIAG_NAME_INDEX(err_conflicting_aliasing_type)
+DIAG_NAME_INDEX(err_conflicting_codeseg_attribute)
 DIAG_NAME_INDEX(err_conflicting_ivar_bitwidth)
 DIAG_NAME_INDEX(err_conflicting_ivar_name)
 DIAG_NAME_INDEX(err_conflicting_ivar_type)
@@ -514,6 +523,8 @@
 DIAG_NAME_INDEX(err_covariant_return_not_derived)
 DIAG_NAME_INDEX(err_covariant_return_type_class_type_more_qualified)
 DIAG_NAME_INDEX(err_covariant_return_type_different_qualifications)
+DIAG_NAME_INDEX(err_cpu_dispatch_mismatch)
+DIAG_NAME_INDEX(err_cpu_specific_multiple_defs)
 DIAG_NAME_INDEX(err_cpu_unsupported_isa)
 DIAG_NAME_INDEX(err_ctor_dtor_returns_void)
 DIAG_NAME_INDEX(err_ctor_init_missing_comma)
@@ -529,6 +540,7 @@
 DIAG_NAME_INDEX(err_cxx11_attribute_forbids_ellipsis)
 DIAG_NAME_INDEX(err_cxx11_attribute_repeated)
 DIAG_NAME_INDEX(err_cyclic_alias)
+DIAG_NAME_INDEX(err_dangling_member)
 DIAG_NAME_INDEX(err_dealloc_bad_result_type)
 DIAG_NAME_INDEX(err_decimal_unsupported)
 DIAG_NAME_INDEX(err_decl_attribute_invalid_on_stmt)
@@ -578,6 +590,7 @@
 DIAG_NAME_INDEX(err_deduction_guide_specialized)
 DIAG_NAME_INDEX(err_deduction_guide_template_not_deducible)
 DIAG_NAME_INDEX(err_deduction_guide_with_complex_decl)
+DIAG_NAME_INDEX(err_deduction_guide_wrong_access)
 DIAG_NAME_INDEX(err_deduction_guide_wrong_scope)
 DIAG_NAME_INDEX(err_deep_exception_specs_differ)
 DIAG_NAME_INDEX(err_default_arg_in_partial_spec)
@@ -611,6 +624,7 @@
 DIAG_NAME_INDEX(err_deleted_non_function)
 DIAG_NAME_INDEX(err_deleted_override)
 DIAG_NAME_INDEX(err_dependent_deduced_tst)
+DIAG_NAME_INDEX(err_dependent_function_template_spec_no_match)
 DIAG_NAME_INDEX(err_dependent_nested_name_spec)
 DIAG_NAME_INDEX(err_dependent_non_type_arg_in_partial_spec)
 DIAG_NAME_INDEX(err_dependent_tag_decl)
@@ -662,7 +676,7 @@
 DIAG_NAME_INDEX(err_drv_config_file_not_found)
 DIAG_NAME_INDEX(err_drv_conflicting_deployment_targets)
 DIAG_NAME_INDEX(err_drv_cuda_bad_gpu_arch)
-DIAG_NAME_INDEX(err_drv_cuda_nvptx_host)
+DIAG_NAME_INDEX(err_drv_cuda_host_arch)
 DIAG_NAME_INDEX(err_drv_cuda_version_unsupported)
 DIAG_NAME_INDEX(err_drv_defsym_invalid_format)
 DIAG_NAME_INDEX(err_drv_defsym_invalid_symval)
@@ -670,6 +684,7 @@
 DIAG_NAME_INDEX(err_drv_emit_llvm_link)
 DIAG_NAME_INDEX(err_drv_expecting_fopenmp_with_fopenmp_targets)
 DIAG_NAME_INDEX(err_drv_force_crash)
+DIAG_NAME_INDEX(err_drv_gnustep_objc_runtime_incompatible_binary)
 DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_isdriver)
 DIAG_NAME_INDEX(err_drv_invalid_Xarch_argument_with_args)
 DIAG_NAME_INDEX(err_drv_invalid_Xopenmp_target_with_args)
@@ -687,6 +702,8 @@
 DIAG_NAME_INDEX(err_drv_invalid_output_with_multiple_archs)
 DIAG_NAME_INDEX(err_drv_invalid_pgo_instrumentor)
 DIAG_NAME_INDEX(err_drv_invalid_remap_file)
+DIAG_NAME_INDEX(err_drv_invalid_riscv_arch_name)
+DIAG_NAME_INDEX(err_drv_invalid_riscv_ext_arch_name)
 DIAG_NAME_INDEX(err_drv_invalid_rtlib_name)
 DIAG_NAME_INDEX(err_drv_invalid_stdlib_name)
 DIAG_NAME_INDEX(err_drv_invalid_thread_model_for_target)
@@ -697,6 +714,7 @@
 DIAG_NAME_INDEX(err_drv_mg_requires_m_or_mm)
 DIAG_NAME_INDEX(err_drv_missing_arg_mtp)
 DIAG_NAME_INDEX(err_drv_missing_argument)
+DIAG_NAME_INDEX(err_drv_mix_cuda_hip)
 DIAG_NAME_INDEX(err_drv_modules_validate_once_requires_timestamp)
 DIAG_NAME_INDEX(err_drv_nested_config_file)
 DIAG_NAME_INDEX(err_drv_no_ast_support)
@@ -725,6 +743,7 @@
 DIAG_NAME_INDEX(err_drv_unknown_stdin_type_clang_cl)
 DIAG_NAME_INDEX(err_drv_unsupported_indirect_jump_opt)
 DIAG_NAME_INDEX(err_drv_unsupported_linker)
+DIAG_NAME_INDEX(err_drv_unsupported_noabicalls_pic)
 DIAG_NAME_INDEX(err_drv_unsupported_opt)
 DIAG_NAME_INDEX(err_drv_unsupported_opt_for_target)
 DIAG_NAME_INDEX(err_drv_unsupported_opt_with_suggestion)
@@ -905,6 +924,7 @@
 DIAG_NAME_INDEX(err_fe_inline_asm)
 DIAG_NAME_INDEX(err_fe_invalid_alignment)
 DIAG_NAME_INDEX(err_fe_invalid_code_complete_file)
+DIAG_NAME_INDEX(err_fe_invalid_exception_model)
 DIAG_NAME_INDEX(err_fe_invalid_plugin_name)
 DIAG_NAME_INDEX(err_fe_invalid_wchar_type)
 DIAG_NAME_INDEX(err_fe_module_file_modified)
@@ -941,6 +961,7 @@
 DIAG_NAME_INDEX(err_first_argument_to_cwsc_not_call)
 DIAG_NAME_INDEX(err_first_argument_to_cwsc_pdtor_call)
 DIAG_NAME_INDEX(err_first_argument_to_va_arg_not_of_type_va_list)
+DIAG_NAME_INDEX(err_fixed_point_not_enabled)
 DIAG_NAME_INDEX(err_flexible_array_arc_retainable)
 DIAG_NAME_INDEX(err_flexible_array_empty_aggregate)
 DIAG_NAME_INDEX(err_flexible_array_has_nontrivial_dtor)
@@ -1011,6 +1032,9 @@
 DIAG_NAME_INDEX(err_half_const_requires_fp16)
 DIAG_NAME_INDEX(err_hex_constant_requires)
 DIAG_NAME_INDEX(err_hex_escape_no_digits)
+DIAG_NAME_INDEX(err_hexagon_builtin_requires_hvx)
+DIAG_NAME_INDEX(err_hexagon_builtin_unsupported_cpu)
+DIAG_NAME_INDEX(err_hexagon_builtin_unsupported_hvx)
 DIAG_NAME_INDEX(err_iboutletcollection_builtintype)
 DIAG_NAME_INDEX(err_iboutletcollection_type)
 DIAG_NAME_INDEX(err_ice_ambiguous_conversion)
@@ -1044,6 +1068,7 @@
 DIAG_NAME_INDEX(err_implicit_coroutine_std_nothrow_type_not_found)
 DIAG_NAME_INDEX(err_implicit_empty_initializer)
 DIAG_NAME_INDEX(err_implicit_instantiate_member_undefined)
+DIAG_NAME_INDEX(err_implied_comparison_category_type_not_found)
 DIAG_NAME_INDEX(err_implied_coroutine_type_not_found)
 DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_class)
 DIAG_NAME_INDEX(err_implied_std_coroutine_traits_promise_type_not_found)
@@ -1127,6 +1152,7 @@
 DIAG_NAME_INDEX(err_invalid_conversion_between_vector_and_scalar)
 DIAG_NAME_INDEX(err_invalid_conversion_between_vectors)
 DIAG_NAME_INDEX(err_invalid_cpu_is)
+DIAG_NAME_INDEX(err_invalid_cpu_specific_dispatch_value)
 DIAG_NAME_INDEX(err_invalid_cpu_supports)
 DIAG_NAME_INDEX(err_invalid_decl_spec_combination)
 DIAG_NAME_INDEX(err_invalid_decl_specifier_in_nontype_parm)
@@ -1155,6 +1181,7 @@
 DIAG_NAME_INDEX(err_invalid_receiver_class_message)
 DIAG_NAME_INDEX(err_invalid_receiver_to_message_super)
 DIAG_NAME_INDEX(err_invalid_reference_qualifier_application)
+DIAG_NAME_INDEX(err_invalid_saturation_spec)
 DIAG_NAME_INDEX(err_invalid_sign_spec)
 DIAG_NAME_INDEX(err_invalid_storage_class_in_func_decl)
 DIAG_NAME_INDEX(err_invalid_string_udl)
@@ -1195,6 +1222,7 @@
 DIAG_NAME_INDEX(err_lambda_decl_specifier_repeated)
 DIAG_NAME_INDEX(err_lambda_impcap)
 DIAG_NAME_INDEX(err_lambda_in_constant_expression)
+DIAG_NAME_INDEX(err_lambda_in_invalid_context)
 DIAG_NAME_INDEX(err_lambda_incomplete_result)
 DIAG_NAME_INDEX(err_lambda_missing_parens)
 DIAG_NAME_INDEX(err_lambda_return_init_list)
@@ -1203,6 +1231,8 @@
 DIAG_NAME_INDEX(err_language_linkage_spec_unknown)
 DIAG_NAME_INDEX(err_late_asm_label_name)
 DIAG_NAME_INDEX(err_lexing_string)
+DIAG_NAME_INDEX(err_lifetimebound_ctor_dtor)
+DIAG_NAME_INDEX(err_lifetimebound_no_object_param)
 DIAG_NAME_INDEX(err_list_init_in_parens)
 DIAG_NAME_INDEX(err_literal_operator_bad_param_count)
 DIAG_NAME_INDEX(err_literal_operator_default_argument)
@@ -1251,7 +1281,10 @@
 DIAG_NAME_INDEX(err_member_reference_needs_call)
 DIAG_NAME_INDEX(err_mempointer_in_nonclass_type)
 DIAG_NAME_INDEX(err_memptr_conv_via_virtual)
+DIAG_NAME_INDEX(err_memptr_incomplete)
 DIAG_NAME_INDEX(err_method_not_found_with_typo)
+DIAG_NAME_INDEX(err_mismatched_code_seg_base)
+DIAG_NAME_INDEX(err_mismatched_code_seg_override)
 DIAG_NAME_INDEX(err_mismatched_exception_spec)
 DIAG_NAME_INDEX(err_mismatched_exception_spec_explicit_instantiation)
 DIAG_NAME_INDEX(err_mismatched_ms_inheritance)
@@ -1351,6 +1384,7 @@
 DIAG_NAME_INDEX(err_module_odr_violation_definition_data)
 DIAG_NAME_INDEX(err_module_odr_violation_different_definitions)
 DIAG_NAME_INDEX(err_module_odr_violation_different_instantiations)
+DIAG_NAME_INDEX(err_module_odr_violation_enum)
 DIAG_NAME_INDEX(err_module_odr_violation_function)
 DIAG_NAME_INDEX(err_module_odr_violation_mismatch_decl)
 DIAG_NAME_INDEX(err_module_odr_violation_mismatch_decl_diff)
@@ -1403,6 +1437,8 @@
 DIAG_NAME_INDEX(err_multiversion_noproto)
 DIAG_NAME_INDEX(err_multiversion_not_allowed_on_main)
 DIAG_NAME_INDEX(err_multiversion_not_supported)
+DIAG_NAME_INDEX(err_multiversion_required_in_redecl)
+DIAG_NAME_INDEX(err_multiversion_types_mixed)
 DIAG_NAME_INDEX(err_mutable_const)
 DIAG_NAME_INDEX(err_mutable_function)
 DIAG_NAME_INDEX(err_mutable_nonmember)
@@ -1810,6 +1846,9 @@
 DIAG_NAME_INDEX(err_opencl_unroll_hint_on_non_loop)
 DIAG_NAME_INDEX(err_opencl_variadic_function)
 DIAG_NAME_INDEX(err_opencl_vla)
+DIAG_NAME_INDEX(err_openclcxx_not_supported)
+DIAG_NAME_INDEX(err_openclcxx_reserved)
+DIAG_NAME_INDEX(err_openclcxx_virtual_function)
 DIAG_NAME_INDEX(err_openmp_default_simd_align_expr)
 DIAG_NAME_INDEX(err_operator_arrow_circular)
 DIAG_NAME_INDEX(err_operator_arrow_depth_exceeded)
@@ -1831,6 +1870,7 @@
 DIAG_NAME_INDEX(err_operator_overload_post_incdec_must_be_int)
 DIAG_NAME_INDEX(err_operator_overload_static)
 DIAG_NAME_INDEX(err_operator_overload_variadic)
+DIAG_NAME_INDEX(err_opt_not_valid_on_target)
 DIAG_NAME_INDEX(err_opt_not_valid_with_opt)
 DIAG_NAME_INDEX(err_opt_not_valid_without_opt)
 DIAG_NAME_INDEX(err_os_log_argument_too_big)
@@ -1874,6 +1914,7 @@
 DIAG_NAME_INDEX(err_ownership_type)
 DIAG_NAME_INDEX(err_pack_expansion_length_conflict)
 DIAG_NAME_INDEX(err_pack_expansion_length_conflict_multilevel)
+DIAG_NAME_INDEX(err_pack_expansion_length_conflict_partial)
 DIAG_NAME_INDEX(err_pack_expansion_member_init)
 DIAG_NAME_INDEX(err_pack_expansion_without_parameter_packs)
 DIAG_NAME_INDEX(err_param_default_argument)
@@ -1982,6 +2023,8 @@
 DIAG_NAME_INDEX(err_pp_operator_used_as_macro_name)
 DIAG_NAME_INDEX(err_pp_remainder_by_zero)
 DIAG_NAME_INDEX(err_pp_stringize_not_parameter)
+DIAG_NAME_INDEX(err_pp_through_header_not_found)
+DIAG_NAME_INDEX(err_pp_through_header_not_seen)
 DIAG_NAME_INDEX(err_pp_unmatched_end_of_arc_cf_code_audited)
 DIAG_NAME_INDEX(err_pp_unmatched_end_of_assume_nonnull)
 DIAG_NAME_INDEX(err_pp_unterminated_conditional)
@@ -2157,6 +2200,7 @@
 DIAG_NAME_INDEX(err_sizeof_pack_no_pack_name)
 DIAG_NAME_INDEX(err_sizeof_pack_no_pack_name_suggest)
 DIAG_NAME_INDEX(err_sizeof_parameter_pack)
+DIAG_NAME_INDEX(err_spaceship_argument_narrowing)
 DIAG_NAME_INDEX(err_spec_member_not_instantiated)
 DIAG_NAME_INDEX(err_specialization_after_instantiation)
 DIAG_NAME_INDEX(err_specialization_not_primary_template)
@@ -2179,6 +2223,7 @@
 DIAG_NAME_INDEX(err_static_out_of_line)
 DIAG_NAME_INDEX(err_static_overrides_virtual)
 DIAG_NAME_INDEX(err_statically_allocated_object)
+DIAG_NAME_INDEX(err_std_compare_type_not_supported)
 DIAG_NAME_INDEX(err_std_type_trait_not_class_template)
 DIAG_NAME_INDEX(err_stmt_attribute_invalid_on_decl)
 DIAG_NAME_INDEX(err_stmtexpr_file_scope)
@@ -2212,7 +2257,6 @@
 DIAG_NAME_INDEX(err_tag_reference_conflict)
 DIAG_NAME_INDEX(err_tag_reference_non_tag)
 DIAG_NAME_INDEX(err_tagless_friend_type_template)
-DIAG_NAME_INDEX(err_target_required_in_redecl)
 DIAG_NAME_INDEX(err_target_unknown_abi)
 DIAG_NAME_INDEX(err_target_unknown_cpu)
 DIAG_NAME_INDEX(err_target_unknown_fpmath)
@@ -2257,7 +2301,6 @@
 DIAG_NAME_INDEX(err_template_arg_thread_local)
 DIAG_NAME_INDEX(err_template_arg_untyped_null_constant)
 DIAG_NAME_INDEX(err_template_arg_wrongtype_null_constant)
-DIAG_NAME_INDEX(err_template_decl_ref)
 DIAG_NAME_INDEX(err_template_defn_explicit_instantiation)
 DIAG_NAME_INDEX(err_template_different_associated_constraints)
 DIAG_NAME_INDEX(err_template_id_not_a_type)
@@ -2322,6 +2365,7 @@
 DIAG_NAME_INDEX(err_throw_incomplete_ptr)
 DIAG_NAME_INDEX(err_tls_var_aligned_over_maximum)
 DIAG_NAME_INDEX(err_too_few_args_in_macro_invoc)
+DIAG_NAME_INDEX(err_too_large_for_fixed_point)
 DIAG_NAME_INDEX(err_too_many_args_in_macro_invoc)
 DIAG_NAME_INDEX(err_toomany_element_decls)
 DIAG_NAME_INDEX(err_trailing_return_in_parens)
@@ -2493,6 +2537,7 @@
 DIAG_NAME_INDEX(err_unexpected_protocol_qualifier)
 DIAG_NAME_INDEX(err_unexpected_scope_on_base_decltype)
 DIAG_NAME_INDEX(err_unexpected_semi)
+DIAG_NAME_INDEX(err_unexpected_template_in_unqualified_id)
 DIAG_NAME_INDEX(err_unexpected_token_in_nested_name_spec)
 DIAG_NAME_INDEX(err_unexpected_typedef)
 DIAG_NAME_INDEX(err_unexpected_typedef_ident)
@@ -2628,6 +2673,7 @@
 DIAG_NAME_INDEX(ext_auto_storage_class)
 DIAG_NAME_INDEX(ext_auto_type)
 DIAG_NAME_INDEX(ext_auto_type_specifier)
+DIAG_NAME_INDEX(ext_bad_cxx_cast_qualifiers_away_incoherent)
 DIAG_NAME_INDEX(ext_binary_literal)
 DIAG_NAME_INDEX(ext_binary_literal_cxx14)
 DIAG_NAME_INDEX(ext_bitfield_member_init)
@@ -2933,6 +2979,8 @@
 DIAG_NAME_INDEX(note_access_protected_restricted_noobject)
 DIAG_NAME_INDEX(note_access_protected_restricted_object)
 DIAG_NAME_INDEX(note_add_deprecation_attr)
+DIAG_NAME_INDEX(note_add_std_move)
+DIAG_NAME_INDEX(note_add_std_move_in_cxx11)
 DIAG_NAME_INDEX(note_add_synthesize_directive)
 DIAG_NAME_INDEX(note_additional_parens_for_variable_declaration)
 DIAG_NAME_INDEX(note_addrof_ovl_candidate_disabled_by_enable_if_attr)
@@ -2961,6 +3009,7 @@
 DIAG_NAME_INDEX(note_arc_weak_disabled)
 DIAG_NAME_INDEX(note_arc_weak_no_runtime)
 DIAG_NAME_INDEX(note_array_index_out_of_bounds)
+DIAG_NAME_INDEX(note_array_init_plain_string_into_char8_t)
 DIAG_NAME_INDEX(note_array_size_conversion)
 DIAG_NAME_INDEX(note_asm_input_duplicate_first)
 DIAG_NAME_INDEX(note_asm_missing_constraint_modifier)
@@ -2981,6 +3030,7 @@
 DIAG_NAME_INDEX(note_callee_static_array)
 DIAG_NAME_INDEX(note_carries_dependency_missing_first_decl)
 DIAG_NAME_INDEX(note_cast_to_void)
+DIAG_NAME_INDEX(note_cat_conform_to_noescape_prot)
 DIAG_NAME_INDEX(note_change_bitfield_sign)
 DIAG_NAME_INDEX(note_change_calling_conv_fixit)
 DIAG_NAME_INDEX(note_class_declared)
@@ -3024,6 +3074,10 @@
 DIAG_NAME_INDEX(note_constexpr_ltor_mutable)
 DIAG_NAME_INDEX(note_constexpr_ltor_non_const_int)
 DIAG_NAME_INDEX(note_constexpr_ltor_non_constexpr)
+DIAG_NAME_INDEX(note_constexpr_memcpy_nontrivial)
+DIAG_NAME_INDEX(note_constexpr_memcpy_overlap)
+DIAG_NAME_INDEX(note_constexpr_memcpy_type_pun)
+DIAG_NAME_INDEX(note_constexpr_memcpy_unsupported)
 DIAG_NAME_INDEX(note_constexpr_modify_const_type)
 DIAG_NAME_INDEX(note_constexpr_modify_global)
 DIAG_NAME_INDEX(note_constexpr_negative_shift)
@@ -3064,13 +3118,14 @@
 DIAG_NAME_INDEX(note_decl_hiding_tag_type)
 DIAG_NAME_INDEX(note_decl_unguarded_availability_silence)
 DIAG_NAME_INDEX(note_declaration_not_a_prototype)
-DIAG_NAME_INDEX(note_declare_parameter_autoreleasing)
 DIAG_NAME_INDEX(note_declare_parameter_strong)
 DIAG_NAME_INDEX(note_declared_at)
 DIAG_NAME_INDEX(note_declared_coroutine_here)
 DIAG_NAME_INDEX(note_declared_nonnull)
 DIAG_NAME_INDEX(note_declared_required_constant_init_here)
 DIAG_NAME_INDEX(note_deduced_template_arg_substitution_here)
+DIAG_NAME_INDEX(note_deduction_guide_access)
+DIAG_NAME_INDEX(note_deduction_guide_template_access)
 DIAG_NAME_INDEX(note_default_arg_instantiation_here)
 DIAG_NAME_INDEX(note_default_argument_declared_here)
 DIAG_NAME_INDEX(note_default_function_arg_instantiation_here)
@@ -3084,8 +3139,10 @@
 DIAG_NAME_INDEX(note_deleted_default_ctor_uninit_field)
 DIAG_NAME_INDEX(note_deleted_dtor_no_operator_delete)
 DIAG_NAME_INDEX(note_deleted_special_member_class_subobject)
+DIAG_NAME_INDEX(note_dependent_function_template_spec_discard_reason)
 DIAG_NAME_INDEX(note_dependent_non_type_default_arg_in_partial_spec)
 DIAG_NAME_INDEX(note_dependent_var_use)
+DIAG_NAME_INDEX(note_deprecated_this_capture)
 DIAG_NAME_INDEX(note_destructor_type_here)
 DIAG_NAME_INDEX(note_doc_block_command_previous)
 DIAG_NAME_INDEX(note_doc_block_command_previous_alias)
@@ -3214,6 +3271,7 @@
 DIAG_NAME_INDEX(note_inequality_comparison_to_or_assign)
 DIAG_NAME_INDEX(note_init_list_at_beginning_of_macro_argument)
 DIAG_NAME_INDEX(note_init_list_narrowing_silence)
+DIAG_NAME_INDEX(note_init_with_default_member_initalizer)
 DIAG_NAME_INDEX(note_insert_break_fixit)
 DIAG_NAME_INDEX(note_insert_fallthrough_fixit)
 DIAG_NAME_INDEX(note_inst_declaration_hint)
@@ -3224,8 +3282,10 @@
 DIAG_NAME_INDEX(note_ivar_decl)
 DIAG_NAME_INDEX(note_lambda_decl)
 DIAG_NAME_INDEX(note_lambda_to_block_conv)
+DIAG_NAME_INDEX(note_lifetime_extending_member_declared_here)
 DIAG_NAME_INDEX(note_local_decl_close_match)
 DIAG_NAME_INDEX(note_local_decl_close_param_match)
+DIAG_NAME_INDEX(note_local_var_initializer)
 DIAG_NAME_INDEX(note_lock_exclusive_and_shared)
 DIAG_NAME_INDEX(note_locked_here)
 DIAG_NAME_INDEX(note_logical_instead_of_bitwise_change_operator)
@@ -3256,6 +3316,7 @@
 DIAG_NAME_INDEX(note_misplaced_ellipsis_vararg_existing_ellipsis)
 DIAG_NAME_INDEX(note_missing_end_of_definition_before)
 DIAG_NAME_INDEX(note_missing_selector_name)
+DIAG_NAME_INDEX(note_mmap_add_framework_keyword)
 DIAG_NAME_INDEX(note_mmap_lbrace_match)
 DIAG_NAME_INDEX(note_mmap_lsquare_match)
 DIAG_NAME_INDEX(note_mmap_prev_definition)
@@ -3267,6 +3328,7 @@
 DIAG_NAME_INDEX(note_module_import_not_at_top_level)
 DIAG_NAME_INDEX(note_module_odr_violation_definition_data)
 DIAG_NAME_INDEX(note_module_odr_violation_different_definitions)
+DIAG_NAME_INDEX(note_module_odr_violation_enum)
 DIAG_NAME_INDEX(note_module_odr_violation_function)
 DIAG_NAME_INDEX(note_module_odr_violation_mismatch_decl)
 DIAG_NAME_INDEX(note_module_odr_violation_mismatch_decl_diff)
@@ -3286,6 +3348,7 @@
 DIAG_NAME_INDEX(note_non_literal_base_class)
 DIAG_NAME_INDEX(note_non_literal_field)
 DIAG_NAME_INDEX(note_non_literal_incomplete)
+DIAG_NAME_INDEX(note_non_literal_lambda)
 DIAG_NAME_INDEX(note_non_literal_no_constexpr_ctors)
 DIAG_NAME_INDEX(note_non_literal_nontrivial_dtor)
 DIAG_NAME_INDEX(note_non_literal_user_provided_dtor)
@@ -3294,6 +3357,7 @@
 DIAG_NAME_INDEX(note_non_usual_function_declared_here)
 DIAG_NAME_INDEX(note_nontemplate_decl_here)
 DIAG_NAME_INDEX(note_nontrivial_default_arg)
+DIAG_NAME_INDEX(note_nontrivial_field)
 DIAG_NAME_INDEX(note_nontrivial_has_virtual)
 DIAG_NAME_INDEX(note_nontrivial_in_class_init)
 DIAG_NAME_INDEX(note_nontrivial_no_copy)
@@ -3324,9 +3388,11 @@
 DIAG_NAME_INDEX(note_odr_enumerator)
 DIAG_NAME_INDEX(note_odr_field)
 DIAG_NAME_INDEX(note_odr_field_name)
+DIAG_NAME_INDEX(note_odr_friend)
 DIAG_NAME_INDEX(note_odr_missing_base)
 DIAG_NAME_INDEX(note_odr_missing_enumerator)
 DIAG_NAME_INDEX(note_odr_missing_field)
+DIAG_NAME_INDEX(note_odr_missing_friend)
 DIAG_NAME_INDEX(note_odr_not_bit_field)
 DIAG_NAME_INDEX(note_odr_number_of_bases)
 DIAG_NAME_INDEX(note_odr_objc_method_here)
@@ -3400,6 +3466,7 @@
 DIAG_NAME_INDEX(note_ovl_candidate_has_pass_object_size_params)
 DIAG_NAME_INDEX(note_ovl_candidate_illegal_constructor)
 DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction)
+DIAG_NAME_INDEX(note_ovl_candidate_incomplete_deduction_pack)
 DIAG_NAME_INDEX(note_ovl_candidate_inconsistent_deduction)
 DIAG_NAME_INDEX(note_ovl_candidate_inconsistent_deduction_types)
 DIAG_NAME_INDEX(note_ovl_candidate_inherited_constructor)
@@ -3500,8 +3567,6 @@
 DIAG_NAME_INDEX(note_redefinition_include_same_file)
 DIAG_NAME_INDEX(note_redefinition_modules_same_file)
 DIAG_NAME_INDEX(note_ref_or_ptr_member_declared_here)
-DIAG_NAME_INDEX(note_ref_subobject_of_member_declared_here)
-DIAG_NAME_INDEX(note_ref_var_local_bind)
 DIAG_NAME_INDEX(note_refconst_member_not_initialized)
 DIAG_NAME_INDEX(note_reference_is_return_value)
 DIAG_NAME_INDEX(note_referenced_class_template)
@@ -3515,6 +3580,7 @@
 DIAG_NAME_INDEX(note_remove_move)
 DIAG_NAME_INDEX(note_remove_parens_for_variable_declaration)
 DIAG_NAME_INDEX(note_replace_abs_function)
+DIAG_NAME_INDEX(note_riscv_repeated_interrupt_attribute)
 DIAG_NAME_INDEX(note_second_module_difference)
 DIAG_NAME_INDEX(note_sentinel_here)
 DIAG_NAME_INDEX(note_shadow_field)
@@ -3530,6 +3596,8 @@
 DIAG_NAME_INDEX(note_suppressed_class_declare)
 DIAG_NAME_INDEX(note_surrounding_namespace_ends_here)
 DIAG_NAME_INDEX(note_surrounding_namespace_starts_here)
+DIAG_NAME_INDEX(note_suspicious_bzero_size_silence)
+DIAG_NAME_INDEX(note_suspicious_sizeof_memset_silence)
 DIAG_NAME_INDEX(note_switch_conversion)
 DIAG_NAME_INDEX(note_template_arg_internal_object)
 DIAG_NAME_INDEX(note_template_arg_refers_here)
@@ -3542,6 +3610,7 @@
 DIAG_NAME_INDEX(note_template_default_arg_checking)
 DIAG_NAME_INDEX(note_template_enum_def_here)
 DIAG_NAME_INDEX(note_template_exception_spec_instantiation_here)
+DIAG_NAME_INDEX(note_template_kw_refers_to_non_template)
 DIAG_NAME_INDEX(note_template_member_class_here)
 DIAG_NAME_INDEX(note_template_member_function_here)
 DIAG_NAME_INDEX(note_template_nontype_parm_different_type)
@@ -3566,6 +3635,7 @@
 DIAG_NAME_INDEX(note_type_being_defined)
 DIAG_NAME_INDEX(note_type_incomplete)
 DIAG_NAME_INDEX(note_typecheck_assign_const)
+DIAG_NAME_INDEX(note_typecheck_invalid_operands_converted)
 DIAG_NAME_INDEX(note_typecheck_member_reference_suggestion)
 DIAG_NAME_INDEX(note_typedef_changes_linkage)
 DIAG_NAME_INDEX(note_typename_refers_here)
@@ -3655,7 +3725,6 @@
 DIAG_NAME_INDEX(warn_address_of_reference_null_compare)
 DIAG_NAME_INDEX(warn_alias_to_weak_alias)
 DIAG_NAME_INDEX(warn_alias_with_section)
-DIAG_NAME_INDEX(warn_aligned_allocation_unavailable)
 DIAG_NAME_INDEX(warn_alloca_align_alignof)
 DIAG_NAME_INDEX(warn_ambiguous_suitable_delete_function_found)
 DIAG_NAME_INDEX(warn_anon_bitfield_width_exceeds_type_width)
@@ -3671,6 +3740,7 @@
 DIAG_NAME_INDEX(warn_arc_retained_property_assign)
 DIAG_NAME_INDEX(warn_arc_strong_pointer_objc_pointer)
 DIAG_NAME_INDEX(warn_arcmt_nsalloc_realloc)
+DIAG_NAME_INDEX(warn_argument_invalid_range)
 DIAG_NAME_INDEX(warn_arm_interrupt_calling_convention)
 DIAG_NAME_INDEX(warn_array_index_exceeds_bounds)
 DIAG_NAME_INDEX(warn_array_index_precedes_bounds)
@@ -3679,12 +3749,15 @@
 DIAG_NAME_INDEX(warn_asm_qualifier_ignored)
 DIAG_NAME_INDEX(warn_assume_side_effects)
 DIAG_NAME_INDEX(warn_at_available_unchecked_use)
+DIAG_NAME_INDEX(warn_atimport_in_framework_header)
 DIAG_NAME_INDEX(warn_atl_uuid_deprecated)
 DIAG_NAME_INDEX(warn_atomic_op_has_invalid_memory_order)
+DIAG_NAME_INDEX(warn_atomic_op_misaligned)
 DIAG_NAME_INDEX(warn_atomic_property_rule)
 DIAG_NAME_INDEX(warn_atprotocol_protocol)
 DIAG_NAME_INDEX(warn_attr_abi_tag_namespace)
 DIAG_NAME_INDEX(warn_attr_on_unconsumable_class)
+DIAG_NAME_INDEX(warn_attribute_address_multiple_identical_qualifiers)
 DIAG_NAME_INDEX(warn_attribute_after_definition_ignored)
 DIAG_NAME_INDEX(warn_attribute_argument_n_negative)
 DIAG_NAME_INDEX(warn_attribute_dll_instantiated_base_class)
@@ -3727,6 +3800,7 @@
 DIAG_NAME_INDEX(warn_autosynthesis_property_in_superclass)
 DIAG_NAME_INDEX(warn_autosynthesis_property_ivar_match)
 DIAG_NAME_INDEX(warn_availability_and_unavailable)
+DIAG_NAME_INDEX(warn_availability_on_static_initializer)
 DIAG_NAME_INDEX(warn_availability_unknown_platform)
 DIAG_NAME_INDEX(warn_availability_version_ordering)
 DIAG_NAME_INDEX(warn_bad_character_encoding)
@@ -3735,7 +3809,6 @@
 DIAG_NAME_INDEX(warn_bad_string_encoding)
 DIAG_NAME_INDEX(warn_base_class_is_uninit)
 DIAG_NAME_INDEX(warn_bind_ref_member_to_parameter)
-DIAG_NAME_INDEX(warn_bind_ref_member_to_temporary)
 DIAG_NAME_INDEX(warn_binding_null_to_reference)
 DIAG_NAME_INDEX(warn_bitfield_too_small_for_enum)
 DIAG_NAME_INDEX(warn_bitfield_width_exceeds_type_width)
@@ -3800,6 +3873,7 @@
 DIAG_NAME_INDEX(warn_conv_to_void_not_used)
 DIAG_NAME_INDEX(warn_coroutine_promise_unhandled_exception_required_with_exceptions)
 DIAG_NAME_INDEX(warn_correct_comment_command_name)
+DIAG_NAME_INDEX(warn_cstruct_memaccess)
 DIAG_NAME_INDEX(warn_cstyle_param)
 DIAG_NAME_INDEX(warn_ctor_parm_shadows_field)
 DIAG_NAME_INDEX(warn_cuda_attr_lambda_position)
@@ -3839,6 +3913,7 @@
 DIAG_NAME_INDEX(warn_cxx17_compat_multi_using_declaration)
 DIAG_NAME_INDEX(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue)
 DIAG_NAME_INDEX(warn_cxx17_compat_spaceship)
+DIAG_NAME_INDEX(warn_cxx17_compat_unicode_type)
 DIAG_NAME_INDEX(warn_cxx17_compat_using_declaration_pack)
 DIAG_NAME_INDEX(warn_cxx17_hex_literal)
 DIAG_NAME_INDEX(warn_cxx2a_compat_spaceship)
@@ -3917,7 +3992,8 @@
 DIAG_NAME_INDEX(warn_cxx98_compat_variadic_templates)
 DIAG_NAME_INDEX(warn_cxx_ms_struct)
 DIAG_NAME_INDEX(warn_dangling_else)
-DIAG_NAME_INDEX(warn_dangling_std_initializer_list)
+DIAG_NAME_INDEX(warn_dangling_member)
+DIAG_NAME_INDEX(warn_dangling_variable)
 DIAG_NAME_INDEX(warn_dealloc_in_category)
 DIAG_NAME_INDEX(warn_debug_compression_unavailable)
 DIAG_NAME_INDEX(warn_decl_in_param_list)
@@ -3943,11 +4019,13 @@
 DIAG_NAME_INDEX(warn_deprecated_redundant_constexpr_static_def)
 DIAG_NAME_INDEX(warn_deprecated_register)
 DIAG_NAME_INDEX(warn_deprecated_string_literal_conversion)
+DIAG_NAME_INDEX(warn_deprecated_this_capture)
 DIAG_NAME_INDEX(warn_destructor_marked_not_override_overriding)
 DIAG_NAME_INDEX(warn_diagnose_if_succeeded)
 DIAG_NAME_INDEX(warn_direct_initialize_call)
 DIAG_NAME_INDEX(warn_direct_ivar_access)
 DIAG_NAME_INDEX(warn_direct_super_initialize_call)
+DIAG_NAME_INDEX(warn_dispatch_body_ignored)
 DIAG_NAME_INDEX(warn_dllimport_dropped_from_inline_function)
 DIAG_NAME_INDEX(warn_doc_api_container_decl_mismatch)
 DIAG_NAME_INDEX(warn_doc_block_command_duplicate)
@@ -3979,13 +4057,13 @@
 DIAG_NAME_INDEX(warn_drv_diagnostics_hotness_requires_pgo)
 DIAG_NAME_INDEX(warn_drv_disabling_vptr_no_rtti_default)
 DIAG_NAME_INDEX(warn_drv_empty_joined_argument)
-DIAG_NAME_INDEX(warn_drv_enabling_rtti_with_exceptions)
 DIAG_NAME_INDEX(warn_drv_experimental_isel_incomplete)
 DIAG_NAME_INDEX(warn_drv_experimental_isel_incomplete_opt)
 DIAG_NAME_INDEX(warn_drv_fine_grained_bitfield_accesses_ignored)
 DIAG_NAME_INDEX(warn_drv_input_file_unused)
 DIAG_NAME_INDEX(warn_drv_input_file_unused_by_cpp)
 DIAG_NAME_INDEX(warn_drv_invoking_fallback)
+DIAG_NAME_INDEX(warn_drv_moutline_unsupported_opt)
 DIAG_NAME_INDEX(warn_drv_msvc_not_found)
 DIAG_NAME_INDEX(warn_drv_object_size_disabled_O0)
 DIAG_NAME_INDEX(warn_drv_omp_offload_target_duplicate)
@@ -4000,11 +4078,13 @@
 DIAG_NAME_INDEX(warn_drv_unable_to_find_directory_expected)
 DIAG_NAME_INDEX(warn_drv_unknown_argument_clang_cl)
 DIAG_NAME_INDEX(warn_drv_unknown_argument_clang_cl_with_suggestion)
-DIAG_NAME_INDEX(warn_drv_unsupported_abicalls)
+DIAG_NAME_INDEX(warn_drv_unsupported_debug_info_opt_for_target)
 DIAG_NAME_INDEX(warn_drv_unsupported_gpopt)
 DIAG_NAME_INDEX(warn_drv_unsupported_longcalls)
 DIAG_NAME_INDEX(warn_drv_unsupported_opt_for_target)
+DIAG_NAME_INDEX(warn_drv_unsupported_pic_with_mabicalls)
 DIAG_NAME_INDEX(warn_drv_unused_argument)
+DIAG_NAME_INDEX(warn_drv_vectorize_needs_hvx)
 DIAG_NAME_INDEX(warn_drv_yc_multiple_inputs_clang_cl)
 DIAG_NAME_INDEX(warn_drv_ycyu_different_arg_clang_cl)
 DIAG_NAME_INDEX(warn_drv_ycyu_no_arg_clang_cl)
@@ -4012,6 +4092,7 @@
 DIAG_NAME_INDEX(warn_dup_category_def)
 DIAG_NAME_INDEX(warn_duplicate_attribute)
 DIAG_NAME_INDEX(warn_duplicate_attribute_exact)
+DIAG_NAME_INDEX(warn_duplicate_codeseg_attribute)
 DIAG_NAME_INDEX(warn_duplicate_declspec)
 DIAG_NAME_INDEX(warn_duplicate_enum_values)
 DIAG_NAME_INDEX(warn_duplicate_method_decl)
@@ -4072,6 +4153,7 @@
 DIAG_NAME_INDEX(warn_for_range_variable_always_copy)
 DIAG_NAME_INDEX(warn_format_P_no_precision)
 DIAG_NAME_INDEX(warn_format_argument_needs_cast)
+DIAG_NAME_INDEX(warn_format_argument_needs_cast_pedantic)
 DIAG_NAME_INDEX(warn_format_conversion_argument_type_mismatch)
 DIAG_NAME_INDEX(warn_format_conversion_argument_type_mismatch_pedantic)
 DIAG_NAME_INDEX(warn_format_invalid_annotation)
@@ -4087,6 +4169,7 @@
 DIAG_NAME_INDEX(warn_format_string_is_wide_literal)
 DIAG_NAME_INDEX(warn_format_zero_positional_specifier)
 DIAG_NAME_INDEX(warn_forward_class_redefinition)
+DIAG_NAME_INDEX(warn_framework_include_private_from_public)
 DIAG_NAME_INDEX(warn_fun_excludes_mutex)
 DIAG_NAME_INDEX(warn_fun_requires_lock)
 DIAG_NAME_INDEX(warn_fun_requires_lock_precise)
@@ -4095,6 +4178,8 @@
 DIAG_NAME_INDEX(warn_function_marked_not_override_overriding)
 DIAG_NAME_INDEX(warn_gc_attribute_weak_on_local)
 DIAG_NAME_INDEX(warn_gcc_attribute_location)
+DIAG_NAME_INDEX(warn_gcc_ignores_type_attr)
+DIAG_NAME_INDEX(warn_gcc_variable_decl_in_for_loop)
 DIAG_NAME_INDEX(warn_global_constructor)
 DIAG_NAME_INDEX(warn_global_destructor)
 DIAG_NAME_INDEX(warn_gnu_inline_attribute_requires_inline)
@@ -4119,6 +4204,7 @@
 DIAG_NAME_INDEX(warn_impcast_float_precision)
 DIAG_NAME_INDEX(warn_impcast_float_result_precision)
 DIAG_NAME_INDEX(warn_impcast_float_to_integer)
+DIAG_NAME_INDEX(warn_impcast_float_to_integer_out_of_range)
 DIAG_NAME_INDEX(warn_impcast_float_to_integer_zero)
 DIAG_NAME_INDEX(warn_impcast_floating_point_to_bool)
 DIAG_NAME_INDEX(warn_impcast_integer_64_32)
@@ -4127,6 +4213,7 @@
 DIAG_NAME_INDEX(warn_impcast_integer_sign)
 DIAG_NAME_INDEX(warn_impcast_integer_sign_conditional)
 DIAG_NAME_INDEX(warn_impcast_literal_float_to_integer)
+DIAG_NAME_INDEX(warn_impcast_literal_float_to_integer_out_of_range)
 DIAG_NAME_INDEX(warn_impcast_null_pointer_to_integer)
 DIAG_NAME_INDEX(warn_impcast_objective_c_literal_to_bool)
 DIAG_NAME_INDEX(warn_impcast_pointer_to_bool)
@@ -4221,6 +4308,7 @@
 DIAG_NAME_INDEX(warn_missing_variable_declarations)
 DIAG_NAME_INDEX(warn_missing_whitespace_after_macro_name)
 DIAG_NAME_INDEX(warn_mixed_sign_comparison)
+DIAG_NAME_INDEX(warn_mmap_incomplete_framework_module_declaration)
 DIAG_NAME_INDEX(warn_mmap_mismatched_private_module_name)
 DIAG_NAME_INDEX(warn_mmap_mismatched_private_submodule)
 DIAG_NAME_INDEX(warn_mmap_redundant_export_as)
@@ -4235,9 +4323,12 @@
 DIAG_NAME_INDEX(warn_mt_message)
 DIAG_NAME_INDEX(warn_multiple_method_decl)
 DIAG_NAME_INDEX(warn_multiple_selectors)
+DIAG_NAME_INDEX(warn_multiversion_duplicate_entries)
 DIAG_NAME_INDEX(warn_namespace_member_extra_qualification)
 DIAG_NAME_INDEX(warn_neon_vector_initializer_non_portable)
 DIAG_NAME_INDEX(warn_nested_block_comment)
+DIAG_NAME_INDEX(warn_new_dangling_initializer_list)
+DIAG_NAME_INDEX(warn_new_dangling_reference)
 DIAG_NAME_INDEX(warn_no_autosynthesis_property)
 DIAG_NAME_INDEX(warn_no_autosynthesis_shared_ivar_property)
 DIAG_NAME_INDEX(warn_no_constructor_for_refconst)
@@ -4352,6 +4443,7 @@
 DIAG_NAME_INDEX(warn_pp_date_time)
 DIAG_NAME_INDEX(warn_pp_expr_overflow)
 DIAG_NAME_INDEX(warn_pp_line_decimal)
+DIAG_NAME_INDEX(warn_pp_macro_def_mismatch_with_pch)
 DIAG_NAME_INDEX(warn_pp_macro_hides_keyword)
 DIAG_NAME_INDEX(warn_pp_macro_is_reserved_id)
 DIAG_NAME_INDEX(warn_pp_objc_macro_redef_ignored)
@@ -4409,7 +4501,7 @@
 DIAG_NAME_INDEX(warn_pragma_pack_modified_after_include)
 DIAG_NAME_INDEX(warn_pragma_pack_no_pop_eof)
 DIAG_NAME_INDEX(warn_pragma_pack_non_default_at_include)
-DIAG_NAME_INDEX(warn_pragma_pack_pop_identifer_and_alignment)
+DIAG_NAME_INDEX(warn_pragma_pack_pop_identifier_and_alignment)
 DIAG_NAME_INDEX(warn_pragma_pack_show)
 DIAG_NAME_INDEX(warn_pragma_pop_failed)
 DIAG_NAME_INDEX(warn_pragma_pop_macro_no_push)
@@ -4458,6 +4550,7 @@
 DIAG_NAME_INDEX(warn_ptr_arith_precedes_bounds)
 DIAG_NAME_INDEX(warn_ptr_independentclass_attribute)
 DIAG_NAME_INDEX(warn_qual_return_type)
+DIAG_NAME_INDEX(warn_quoted_include_in_framework_header)
 DIAG_NAME_INDEX(warn_readonly_property)
 DIAG_NAME_INDEX(warn_receiver_forward_class)
 DIAG_NAME_INDEX(warn_receiver_forward_instance)
@@ -4479,11 +4572,15 @@
 DIAG_NAME_INDEX(warn_ret_local_temp_addr_ref)
 DIAG_NAME_INDEX(warn_ret_stack_addr_ref)
 DIAG_NAME_INDEX(warn_return_missing_expr)
+DIAG_NAME_INDEX(warn_return_std_move)
+DIAG_NAME_INDEX(warn_return_std_move_in_cxx11)
 DIAG_NAME_INDEX(warn_return_typestate_for_unconsumable_type)
 DIAG_NAME_INDEX(warn_return_typestate_mismatch)
 DIAG_NAME_INDEX(warn_return_value_size)
 DIAG_NAME_INDEX(warn_return_value_udt)
 DIAG_NAME_INDEX(warn_return_value_udt_incomplete)
+DIAG_NAME_INDEX(warn_riscv_interrupt_attribute)
+DIAG_NAME_INDEX(warn_riscv_repeated_interrupt_attribute)
 DIAG_NAME_INDEX(warn_root_inst_method_not_found)
 DIAG_NAME_INDEX(warn_sampler_initializer_invalid_bits)
 DIAG_NAME_INDEX(warn_scanf_nonzero_width)
@@ -4492,7 +4589,8 @@
 DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_never_compatible)
 DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_not_pod)
 DIAG_NAME_INDEX(warn_second_parameter_to_va_arg_ownership_qualified)
-DIAG_NAME_INDEX(warn_self_assignment)
+DIAG_NAME_INDEX(warn_self_assignment_builtin)
+DIAG_NAME_INDEX(warn_self_assignment_overloaded)
 DIAG_NAME_INDEX(warn_self_move)
 DIAG_NAME_INDEX(warn_semicolon_before_method_body)
 DIAG_NAME_INDEX(warn_setter_getter_impl_required)
@@ -4520,6 +4618,7 @@
 DIAG_NAME_INDEX(warn_static_main)
 DIAG_NAME_INDEX(warn_static_self_reference_in_init)
 DIAG_NAME_INDEX(warn_stdc_fenv_access_not_supported)
+DIAG_NAME_INDEX(warn_stdlibcxx_not_found)
 DIAG_NAME_INDEX(warn_strict_multiple_method_decl)
 DIAG_NAME_INDEX(warn_strict_prototypes)
 DIAG_NAME_INDEX(warn_string_plus_char)
@@ -4537,6 +4636,8 @@
 DIAG_NAME_INDEX(warn_suggest_noreturn_block)
 DIAG_NAME_INDEX(warn_suggest_noreturn_function)
 DIAG_NAME_INDEX(warn_superclass_variable_sized_type_not_at_end)
+DIAG_NAME_INDEX(warn_suspicious_bzero_size)
+DIAG_NAME_INDEX(warn_suspicious_sizeof_memset)
 DIAG_NAME_INDEX(warn_sync_fetch_and_nand_semantics_change)
 DIAG_NAME_INDEX(warn_taking_address_of_packed_member)
 DIAG_NAME_INDEX(warn_target_unsupported_abs2008)
@@ -4553,7 +4654,6 @@
 DIAG_NAME_INDEX(warn_template_qualified_friend_ignored)
 DIAG_NAME_INDEX(warn_template_qualified_friend_unsupported)
 DIAG_NAME_INDEX(warn_template_spec_extra_headers)
-DIAG_NAME_INDEX(warn_temporary_array_to_pointer_decay)
 DIAG_NAME_INDEX(warn_tentative_incomplete_array)
 DIAG_NAME_INDEX(warn_this_bool_conversion)
 DIAG_NAME_INDEX(warn_this_null_compare)
@@ -4627,6 +4727,7 @@
 DIAG_NAME_INDEX(warn_unsigned_always_true_comparison)
 DIAG_NAME_INDEX(warn_unsigned_bitfield_assigned_signed_enum)
 DIAG_NAME_INDEX(warn_unsigned_enum_always_true_comparison)
+DIAG_NAME_INDEX(warn_unsupported_lifetime_extension)
 DIAG_NAME_INDEX(warn_unsupported_target_attribute)
 DIAG_NAME_INDEX(warn_unused_call)
 DIAG_NAME_INDEX(warn_unused_comparison)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
index a5ba843..0ab3fcc 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticLexKinds.inc
@@ -3,7 +3,7 @@
 #undef LEXSTART
 #endif
 
-DIAG(backslash_newline_space, CLASS_WARNING, (unsigned)diag::Severity::Warning, "backslash and newline separated by space", 52, SFINAE_Suppress, false, false, 1)
+DIAG(backslash_newline_space, CLASS_WARNING, (unsigned)diag::Severity::Warning, "backslash and newline separated by space", 53, SFINAE_Suppress, false, false, 1)
 DIAG(err__Pragma_malformed, CLASS_ERROR, (unsigned)diag::Severity::Error, "_Pragma takes a parenthesized string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_bad_character_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in character literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_bad_string_encoding, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal character encoding in string literal", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -131,6 +131,8 @@
 DIAG(err_pp_operator_used_as_macro_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "C++ operator %0 (aka %1) used as a macro name", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_remainder_by_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "remainder by zero in preprocessor expression", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_stringize_not_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%select{#|#@}0' is not followed by a macro parameter", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_through_header_not_found, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "'%0' required for precompiled header not found", 0, SFINAE_SubstitutionFailure, false, true, 1)
+DIAG(err_pp_through_header_not_seen, CLASS_ERROR, (unsigned)diag::Severity::Fatal, "#include of '%0' not seen while attempting to %select{create|use}1 precompiled header", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_unmatched_end_of_arc_cf_code_audited, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang arc_cf_code_audited'", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_pp_unmatched_end_of_assume_nonnull, CLASS_ERROR, (unsigned)diag::Severity::Error, "not currently inside '#pragma clang assume_nonnull'", 0, SFINAE_SubstitutionFailure, false, true, 19)
 DIAG(err_pp_unterminated_conditional, CLASS_ERROR, (unsigned)diag::Severity::Error, "unterminated conditional directive", 0, SFINAE_SubstitutionFailure, false, true, 1)
@@ -156,59 +158,60 @@
 DIAG(err_unterminated_raw_string, CLASS_ERROR, (unsigned)diag::Severity::Error, "raw string missing terminating delimiter )%0\"", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_vaopt_paste_at_end, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at end of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(err_vaopt_paste_at_start, CLASS_ERROR, (unsigned)diag::Severity::Error, "'##' cannot appear at start of __VA_OPT__ argument", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(escaped_newline_block_comment_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "escaped newline between */ characters at block comment end", 122, SFINAE_Suppress, false, false, 1)
-DIAG(ext_binary_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a GNU extension", 240, SFINAE_Suppress, false, false, 1)
-DIAG(ext_binary_literal_cxx14, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a C++14 extension", 82, SFINAE_Suppress, false, false, 1)
-DIAG(ext_c99_whitespace_required_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C99 requires whitespace after the macro name", 112, SFINAE_Suppress, false, false, 1)
-DIAG(ext_charize_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "charizing operator #@ is a Microsoft extension", 352, SFINAE_Suppress, false, false, 1)
-DIAG(ext_comment_paste_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "pasting two '/' tokens into a '//' comment is a Microsoft extension", 353, SFINAE_Suppress, false, false, 1)
-DIAG(ext_ctrl_z_eof_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "treating Ctrl-Z as end-of-file is a Microsoft extension", 357, SFINAE_Suppress, false, false, 1)
-DIAG(ext_dollar_in_identifier, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'$' in identifier", 179, SFINAE_Suppress, false, false, 1)
-DIAG(ext_embedded_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "embedding a directive within macro arguments has undefined behavior", 189, SFINAE_Suppress, false, false, 1)
-DIAG(ext_empty_character, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "empty character constant", 324, SFINAE_Suppress, false, false, 1)
-DIAG(ext_empty_fnmacro_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty macro arguments are a C99 feature", 112, SFINAE_Suppress, false, false, 1)
-DIAG(ext_four_char_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-character character constant", 229, SFINAE_Suppress, false, false, 1)
-DIAG(ext_hex_constant_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating constants are a C99 feature", 112, SFINAE_Suppress, false, false, 1)
-DIAG(ext_hex_literal_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are a C++17 feature", 89, SFINAE_Suppress, false, false, 1)
-DIAG(ext_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "// comments are not allowed in this language", 122, SFINAE_Suppress, false, false, 1)
-DIAG(ext_missing_varargs_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "must specify at least one argument for '...' parameter of variadic macro", 261, SFINAE_Suppress, false, false, 1)
+DIAG(escaped_newline_block_comment_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "escaped newline between */ characters at block comment end", 124, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a GNU extension", 246, SFINAE_Suppress, false, false, 1)
+DIAG(ext_binary_literal_cxx14, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "binary integer literals are a C++14 extension", 83, SFINAE_Suppress, false, false, 1)
+DIAG(ext_c99_whitespace_required_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C99 requires whitespace after the macro name", 113, SFINAE_Suppress, false, false, 1)
+DIAG(ext_charize_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "charizing operator #@ is a Microsoft extension", 360, SFINAE_Suppress, false, false, 1)
+DIAG(ext_comment_paste_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "pasting two '/' tokens into a '//' comment is a Microsoft extension", 361, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ctrl_z_eof_microsoft, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "treating Ctrl-Z as end-of-file is a Microsoft extension", 365, SFINAE_Suppress, false, false, 1)
+DIAG(ext_dollar_in_identifier, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'$' in identifier", 183, SFINAE_Suppress, false, false, 1)
+DIAG(ext_embedded_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "embedding a directive within macro arguments has undefined behavior", 193, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_character, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "empty character constant", 331, SFINAE_Suppress, false, false, 1)
+DIAG(ext_empty_fnmacro_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty macro arguments are a C99 feature", 113, SFINAE_Suppress, false, false, 1)
+DIAG(ext_four_char_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-character character constant", 233, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_constant_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating constants are a C99 feature", 113, SFINAE_Suppress, false, false, 1)
+DIAG(ext_hex_literal_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are a C++17 feature", 90, SFINAE_Suppress, false, false, 1)
+DIAG(ext_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "// comments are not allowed in this language", 124, SFINAE_Suppress, false, false, 1)
+DIAG(ext_missing_varargs_arg, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "must specify at least one argument for '...' parameter of variadic macro", 267, SFINAE_Suppress, false, false, 1)
 DIAG(ext_missing_whitespace_after_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "whitespace required after macro name", 0, SFINAE_Suppress, false, false, 1)
-DIAG(ext_ms_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "invalid suffix on literal; C++11 requires a space between literal and identifier", 541, SFINAE_Suppress, false, false, 1)
-DIAG(ext_multi_line_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-line // comment", 122, SFINAE_Suppress, false, false, 1)
-DIAG(ext_multichar_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multi-character character constant", 407, SFINAE_Suppress, false, false, 1)
-DIAG(ext_named_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "named variadic macros are a GNU extension", 707, SFINAE_Suppress, false, false, 1)
-DIAG(ext_no_newline_eof, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no newline at end of file", 413, SFINAE_Suppress, false, false, 1)
-DIAG(ext_nonstandard_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of non-standard escape character '\\%0'", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_on_off_switch_syntax, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected 'ON' or 'OFF' or 'DEFAULT' in pragma", 660, SFINAE_Suppress, false, false, 1)
-DIAG(ext_paste_comma, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "token pasting of ',' and __VA_ARGS__ is a GNU extension", 261, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_paste_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 326, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_vaargs_use, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_bad_vaopt_use, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__VA_OPT__ can only appear in the expansion of a variadic macro", 707, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_comma_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "comma operator in operand of #if", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_extra_tokens_at_eol, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "extra tokens at end of #%0 directive", 210, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_ident_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#ident is a language extension", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_import_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#import is a language extension", 282, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_include_next_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#include_next is a language extension", 252, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_include_search_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#include resolved using non-portable Microsoft search rules as: %0", 368, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_line_too_big, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C requires #line number to be less than %0, allowed as extension", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_line_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#line directive with zero argument is a GNU extension", 260, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_macro_redef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 macro redefined", 341, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_operator_used_as_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++ operator %0 (aka %1) used as a macro name", 355, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_redef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefining builtin macro", 66, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_undef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "undefining builtin macro", 66, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pp_warning_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#warning is a language extension", 500, SFINAE_Suppress, false, false, 1)
-DIAG(ext_pragma_syntax_eod, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected end of directive in pragma", 660, SFINAE_Suppress, false, false, 1)
-DIAG(ext_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "invalid suffix on literal; C++11 requires a space between literal and identifier", 541, SFINAE_Suppress, false, false, 1)
-DIAG(ext_string_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", 484, SFINAE_Suppress, false, false, 1)
-DIAG(ext_token_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extension used", 331, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unicode_whitespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "treating Unicode character as whitespace", 655, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unknown_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown escape sequence '\\%0'", 659, SFINAE_Suppress, false, false, 1)
-DIAG(ext_unterminated_char_or_string, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing terminating %select{'|'\"'}0 character", 324, SFINAE_Suppress, false, false, 1)
-DIAG(ext_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a C99 feature", 707, SFINAE_Suppress, false, false, 1)
+DIAG(ext_ms_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "invalid suffix on literal; C++11 requires a space between literal and identifier", 552, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multi_line_line_comment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "multi-line // comment", 124, SFINAE_Suppress, false, false, 1)
+DIAG(ext_multichar_character_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multi-character character constant", 415, SFINAE_Suppress, false, false, 1)
+DIAG(ext_named_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "named variadic macros are a GNU extension", 724, SFINAE_Suppress, false, false, 1)
+DIAG(ext_no_newline_eof, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no newline at end of file", 421, SFINAE_Suppress, false, false, 1)
+DIAG(ext_nonstandard_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of non-standard escape character '\\%0'", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_on_off_switch_syntax, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected 'ON' or 'OFF' or 'DEFAULT' in pragma", 676, SFINAE_Suppress, false, false, 1)
+DIAG(ext_paste_comma, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "token pasting of ',' and __VA_ARGS__ is a GNU extension", 267, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_paste_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "pasting formed '%0', an invalid preprocessing token", 333, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaargs_use, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "__VA_ARGS__ can only appear in the expansion of a C99 variadic macro", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_bad_vaopt_use, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__VA_OPT__ can only appear in the expansion of a variadic macro", 724, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_comma_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "comma operator in operand of #if", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_extra_tokens_at_eol, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "extra tokens at end of #%0 directive", 214, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_ident_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#ident is a language extension", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_import_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#import is a language extension", 288, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_next_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#include_next is a language extension", 258, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_include_search_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#include resolved using non-portable Microsoft search rules as: %0", 376, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_too_big, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C requires #line number to be less than %0, allowed as extension", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_line_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#line directive with zero argument is a GNU extension", 266, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_macro_redef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 macro redefined", 348, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_operator_used_as_macro_name, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++ operator %0 (aka %1) used as a macro name", 363, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_redef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefining builtin macro", 67, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_undef_builtin_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "undefining builtin macro", 67, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pp_warning_directive, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "#warning is a language extension", 510, SFINAE_Suppress, false, false, 1)
+DIAG(ext_pragma_syntax_eod, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected end of directive in pragma", 676, SFINAE_Suppress, false, false, 1)
+DIAG(ext_reserved_user_defined_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "invalid suffix on literal; C++11 requires a space between literal and identifier", 552, SFINAE_Suppress, false, false, 1)
+DIAG(ext_string_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "string literal of length %0 exceeds maximum length %1 that %select{C90|ISO C99|C++}2 compilers are required to support", 494, SFINAE_Suppress, false, false, 1)
+DIAG(ext_token_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extension used", 338, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unicode_whitespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "treating Unicode character as whitespace", 671, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unknown_escape, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown escape sequence '\\%0'", 675, SFINAE_Suppress, false, false, 1)
+DIAG(ext_unterminated_char_or_string, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing terminating %select{'|'\"'}0 character", 331, SFINAE_Suppress, false, false, 1)
+DIAG(ext_variadic_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variadic macros are a C99 feature", 724, SFINAE_Suppress, false, false, 1)
 DIAG(note_header_guard, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is defined here; did you mean %1?", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_implicit_top_level_module_import_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "submodule of top-level module '%0' implicitly imported here", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_init_list_at_beginning_of_macro_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cannot use initializer list at the beginning of a macro argument", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_macro_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "macro %0 defined here", 0, SFINAE_Suppress, false, false, 1)
+DIAG(note_mmap_add_framework_keyword, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use 'framework module' to declare module '%0'", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_mmap_lbrace_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this '{'", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_mmap_lsquare_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "to match this ']'", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_mmap_prev_definition, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previously defined here", 0, SFINAE_Suppress, false, false, 1)
@@ -218,103 +221,107 @@
 DIAG(note_pp_module_begin_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "entering module '%0' due to this pragma", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_suggest_parens_for_macro, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parentheses are required around macro argument containing braced initializer list", 0, SFINAE_Suppress, false, false, 1)
 DIAG(note_ucn_four_not_eight, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '\\u'?", 0, SFINAE_Suppress, false, false, 1)
-DIAG(null_in_char_or_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character(s) preserved in %select{char|string}0 literal", 429, SFINAE_Suppress, false, false, 1)
-DIAG(null_in_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character ignored", 429, SFINAE_Suppress, false, false, 1)
-DIAG(pp_disabled_macro_expansion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "disabled expansion of recursive macro", 165, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_char_or_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character(s) preserved in %select{char|string}0 literal", 438, SFINAE_Suppress, false, false, 1)
+DIAG(null_in_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null character ignored", 438, SFINAE_Suppress, false, false, 1)
+DIAG(pp_disabled_macro_expansion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "disabled expansion of recursive macro", 169, SFINAE_Suppress, false, false, 1)
 DIAG(pp_err_elif_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_elif_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#elif without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_else_after_else, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else after #else", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_err_else_without_if, CLASS_ERROR, (unsigned)diag::Severity::Error, "#else without #if", 0, SFINAE_SubstitutionFailure, false, true, 1)
 DIAG(pp_hash_warning, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 2, SFINAE_Suppress, false, true, 21)
 DIAG(pp_include_macros_out_of_predefines, CLASS_ERROR, (unsigned)diag::Severity::Error, "the #__include_macros directive is only for internal use by -imacros", 0, SFINAE_SubstitutionFailure, false, true, 1)
-DIAG(pp_include_next_absolute_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next with absolute path", 284, SFINAE_Suppress, false, false, 1)
-DIAG(pp_include_next_in_primary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in primary source file", 285, SFINAE_Suppress, false, false, 1)
+DIAG(pp_include_next_absolute_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next with absolute path", 290, SFINAE_Suppress, false, false, 1)
+DIAG(pp_include_next_in_primary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#include_next in primary source file", 291, SFINAE_Suppress, false, false, 1)
 DIAG(pp_invalid_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid string literal, ignoring final '\\'", 0, SFINAE_Suppress, false, false, 1)
-DIAG(pp_macro_not_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro is not used", 693, SFINAE_Suppress, false, false, 1)
-DIAG(pp_nonportable_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-portable path to file '%0'; specified path differs in case from file name on disk", 423, SFINAE_Suppress, false, false, 1)
-DIAG(pp_nonportable_system_path, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-portable path to file '%0'; specified path differs in case from file name on disk", 424, SFINAE_Suppress, false, false, 1)
+DIAG(pp_macro_not_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro is not used", 710, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_path, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-portable path to file '%0'; specified path differs in case from file name on disk", 431, SFINAE_Suppress, false, false, 1)
+DIAG(pp_nonportable_system_path, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-portable path to file '%0'; specified path differs in case from file name on disk", 432, SFINAE_Suppress, false, false, 1)
 DIAG(pp_out_of_date_dependency, CLASS_WARNING, (unsigned)diag::Severity::Warning, "current file is older than dependency %0", 0, SFINAE_Suppress, false, false, 1)
 DIAG(pp_poisoning_existing_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "poisoning existing macro", 0, SFINAE_Suppress, false, false, 1)
-DIAG(pp_pragma_once_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma once in main file", 510, SFINAE_Suppress, false, false, 1)
-DIAG(pp_pragma_sysheader_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma system_header ignored in main file", 513, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_converted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph converted to '%0' character", 634, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ends_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ends block comment", 634, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ignored", 634, SFINAE_Suppress, false, false, 1)
-DIAG(trigraph_ignored_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored trigraph would end block comment", 634, SFINAE_Suppress, false, false, 1)
-DIAG(warn_auto_module_import, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "treating #%select{include|import|include_next|__include_macros}0 as an import of module '%1'", 47, SFINAE_Suppress, false, false, 1)
-DIAG(warn_bad_character_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in character literal", 325, SFINAE_Suppress, false, false, 1)
-DIAG(warn_bad_string_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in string literal", 325, SFINAE_Suppress, false, false, 1)
-DIAG(warn_c99_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", 111, SFINAE_Suppress, false, false, 1)
-DIAG(warn_c99_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C99", 111, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_once_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma once in main file", 520, SFINAE_Suppress, false, false, 1)
+DIAG(pp_pragma_sysheader_in_main_file, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma system_header ignored in main file", 523, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_converted, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph converted to '%0' character", 650, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ends_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ends block comment", 650, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "trigraph ignored", 650, SFINAE_Suppress, false, false, 1)
+DIAG(trigraph_ignored_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored trigraph would end block comment", 650, SFINAE_Suppress, false, false, 1)
+DIAG(warn_auto_module_import, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "treating #%select{include|import|include_next|__include_macros}0 as an import of module '%1'", 48, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_character_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in character literal", 332, SFINAE_Suppress, false, false, 1)
+DIAG(warn_bad_string_encoding, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "illegal character encoding in string literal", 332, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{using this character in an identifier|starting an identifier with this character}0 is incompatible with C99", 112, SFINAE_Suppress, false, false, 1)
+DIAG(warn_c99_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C99", 112, SFINAE_Suppress, false, false, 1)
 DIAG(warn_char_constant_too_large, CLASS_WARNING, (unsigned)diag::Severity::Warning, "character constant too long for its type", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_binary_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "binary integer literals are incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_digit_separator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "digit separators are incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_reserved_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a reserved user-defined literal suffix in C++11", 76, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_compat_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a user-defined literal suffix in C++11", 73, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx11_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++11", 73, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx14_compat_u8_character_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx17_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<=>' operator is incompatible with C++ standards before C++2a", 97, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx17_hex_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx2a_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'<=>' is a single token in C++2a; add a space to avoid a change in behavior", 94, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx2a_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++2a", 94, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_empty_fnmacro_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty macro arguments are incompatible with C++98", 108, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_less_colon_colon, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<::' is treated as digraph '<:' (aka '[') followed by ':' in C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_literal_ucn_control_character, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "universal character name referring to a control character is incompatible with C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_literal_ucn_escape_basic_scs, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "specifying character '%0' with a universal character name is incompatible with C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++98 requires newline at end of file", 108, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_pp_line_too_big, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "#line number greater than 32767 is incompatible with C++98", 108, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_raw_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "raw string literals are incompatible with C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using this character in an identifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++98", 104, SFINAE_Suppress, false, false, 1)
-DIAG(warn_cxx98_compat_variadic_macro, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic macros are incompatible with C++98", 108, SFINAE_Suppress, false, false, 1)
-DIAG(warn_defined_in_function_type_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "macro expansion producing 'defined' has undefined behavior", 201, SFINAE_Suppress, false, false, 1)
-DIAG(warn_defined_in_object_type_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro expansion producing 'defined' has undefined behavior", 201, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_binary_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "binary integer literals are incompatible with C++ standards before C++14", 103, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_digit_separator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "digit separators are incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_reserved_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a reserved user-defined literal suffix in C++11", 77, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_compat_user_defined_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "identifier after literal will be treated as a user-defined literal suffix in C++11", 74, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx11_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++11", 74, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx14_compat_u8_character_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<=>' operator is incompatible with C++ standards before C++2a", 98, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx17_hex_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "hexadecimal floating literals are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_compat_spaceship, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'<=>' is a single token in C++2a; add a space to avoid a change in behavior", 95, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx2a_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' is a keyword in C++2a", 95, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_empty_fnmacro_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "empty macro arguments are incompatible with C++98", 109, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_less_colon_colon, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'<::' is treated as digraph '<:' (aka '[') followed by ':' in C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_control_character, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "universal character name referring to a control character is incompatible with C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_literal_ucn_escape_basic_scs, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "specifying character '%0' with a universal character name is incompatible with C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++98 requires newline at end of file", 109, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_pp_line_too_big, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "#line number greater than 32767 is incompatible with C++98", 109, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_raw_string_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "raw string literals are incompatible with C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using this character in an identifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_unicode_literal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unicode literals are incompatible with C++98", 105, SFINAE_Suppress, false, false, 1)
+DIAG(warn_cxx98_compat_variadic_macro, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variadic macros are incompatible with C++98", 109, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_function_type_macro, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "macro expansion producing 'defined' has undefined behavior", 205, SFINAE_Suppress, false, false, 1)
+DIAG(warn_defined_in_object_type_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "macro expansion producing 'defined' has undefined behavior", 205, SFINAE_Suppress, false, false, 1)
 DIAG(warn_extraneous_char_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous characters in character constant ignored", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_has_warning_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__has_warning expected option name (e.g. \"-Wundef\")", 344, SFINAE_Suppress, false, false, 1)
-DIAG(warn_header_guard, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is used as a header guard here, followed by #define of a different macro", 262, SFINAE_Suppress, false, false, 1)
+DIAG(warn_framework_include_private_from_public, CLASS_WARNING, (unsigned)diag::Severity::Warning, "public framework header includes private framework header '%0'", 235, SFINAE_Suppress, false, false, 1)
+DIAG(warn_has_warning_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__has_warning expected option name (e.g. \"-Wundef\")", 351, SFINAE_Suppress, false, false, 1)
+DIAG(warn_header_guard, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is used as a header guard here, followed by #define of a different macro", 268, SFINAE_Suppress, false, false, 1)
 DIAG(warn_missing_whitespace_after_macro_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "whitespace recommended after macro name", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_mismatched_private_module_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected canonical name for private module '%0'", 518, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_mismatched_private_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "private submodule '%0' in private module map, expected top-level module", 518, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_redundant_export_as, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' already re-exported as '%1'", 518, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_umbrella_dir_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella directory '%0' not found", 296, SFINAE_Suppress, false, false, 1)
-DIAG(warn_mmap_unknown_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute '%0'", 265, SFINAE_Suppress, false, false, 1)
-DIAG(warn_module_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' conflicts with already-imported module '%1': %2", 397, SFINAE_Suppress, false, false, 1)
-DIAG(warn_nested_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/*' within block comment", 122, SFINAE_Suppress, false, false, 1)
-DIAG(warn_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no newline at end of file", 413, SFINAE_Suppress, false, false, 1)
-DIAG(warn_non_modular_include_in_framework_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside framework module '%0': '%1'", 417, SFINAE_Suppress, false, false, 1)
-DIAG(warn_non_modular_include_in_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside module '%0': '%1'", 418, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_ambiguous_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ambiguous expansion of macro %0", 21, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_incomplete_framework_module_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "skipping '%0' because module declaration of '%1' lacks the 'framework' qualifier", 300, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_module_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected canonical name for private module '%0'", 528, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_mismatched_private_submodule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "private submodule '%0' in private module map, expected top-level module", 528, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_redundant_export_as, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' already re-exported as '%1'", 528, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_umbrella_dir_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella directory '%0' not found", 303, SFINAE_Suppress, false, false, 1)
+DIAG(warn_mmap_unknown_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute '%0'", 271, SFINAE_Suppress, false, false, 1)
+DIAG(warn_module_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module '%0' conflicts with already-imported module '%1': %2", 405, SFINAE_Suppress, false, false, 1)
+DIAG(warn_nested_block_comment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'/*' within block comment", 124, SFINAE_Suppress, false, false, 1)
+DIAG(warn_no_newline_eof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no newline at end of file", 421, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_framework_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside framework module '%0': '%1'", 425, SFINAE_Suppress, false, false, 1)
+DIAG(warn_non_modular_include_in_module, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "include of non-modular header inside module '%0': '%1'", 426, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_ambiguous_macro, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ambiguous expansion of macro %0", 19, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pp_convert_to_positive, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{left|right}0 side of operator converted from negative value to unsigned: %1", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_date_time, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expansion of date or time macro is not reproducible", 146, SFINAE_Suppress, false, true, 1)
+DIAG(warn_pp_date_time, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expansion of date or time macro is not reproducible", 149, SFINAE_Suppress, false, true, 1)
 DIAG(warn_pp_expr_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "integer overflow in preprocessor expression", 0, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pp_line_decimal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{#line|GNU line marker}0 directive interprets number as decimal, not octal", 0, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_macro_hides_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "keyword is hidden by macro definition", 329, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_macro_is_reserved_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro name is a reserved identifier", 540, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_objc_macro_redef_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring redefinition of Objective-C qualifier macro", 449, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pp_undef_identifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is not defined, evaluates to 0", 642, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_debug_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to debug command '%0'", 269, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_debug_unexpected_command, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected debug command '%0'", 269, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_cannot_pop, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic pop could not pop, no matching push", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected option name (e.g. \"-Wundef\")", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_invalid_token, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unexpected token in pragma diagnostic", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_diagnostic_unknown_warning, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown warning group '%0', ignored", 662, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown pragma ignored", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected '%0'", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_expected_filename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected include filename", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_mismatch_angle, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_include_alias_mismatch_quote, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", 660, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_def_mismatch_with_pch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of macro %0 does not match definition in precompiled header", 121, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_hides_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "keyword is hidden by macro definition", 336, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_macro_is_reserved_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "macro name is a reserved identifier", 551, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_objc_macro_redef_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring redefinition of Objective-C qualifier macro", 458, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pp_undef_identifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is not defined, evaluates to 0", 658, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to debug command '%0'", 275, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_debug_unexpected_command, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected debug command '%0'", 275, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_cannot_pop, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic pop could not pop, no matching push", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected 'error', 'warning', 'ignored', 'fatal', 'push', or 'pop'", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_option, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma diagnostic expected option name (e.g. \"-Wundef\")", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_invalid_token, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unexpected token in pragma diagnostic", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_diagnostic_unknown_warning, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown warning group '%0', ignored", 678, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unknown pragma ignored", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected '%0'", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_expected_filename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pragma include_alias expected include filename", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_angle, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "angle-bracketed include <%0> cannot be aliased to double-quoted include \"%1\"", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_include_alias_mismatch_quote, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "double-quoted include \"%0\" cannot be aliased to angle-bracketed include <%1>", 676, SFINAE_Suppress, false, false, 1)
 DIAG(warn_pragma_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 1, SFINAE_Suppress, true, false, 30)
-DIAG(warn_pragma_pop_macro_no_push, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma pop_macro could not pop '%0', no matching push_macro", 269, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected '%0'", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_expected_number, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected a warning number", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_push_level, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning(push, level) requires a level between 0 and 4", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_pragma_warning_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected 'push', 'pop', 'default', 'disable', 'error', 'once', 'suppress', 1, 2, 3, or 4", 660, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete universal character name; treating as '\\' followed by identifier", 653, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_no_digits, CLASS_WARNING, (unsigned)diag::Severity::Warning, "\\%0 used with no following hex digits; treating as '\\' followed by identifier", 653, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_escape_surrogate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character name refers to a surrogate character", 653, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_not_valid_in_c89, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++; treating as '\\' followed by identifier", 653, SFINAE_Suppress, false, false, 1)
-DIAG(warn_ucn_not_valid_in_c89_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++", 653, SFINAE_Suppress, false, false, 1)
-DIAG(warn_uncovered_module_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella header for module '%0' does not include header '%1'", 296, SFINAE_Suppress, false, false, 1)
-DIAG(warn_use_of_private_header_outside_module, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of private header from outside its module: '%0'", 517, SFINAE_Suppress, false, false, 1)
-DIAG(warn_utf8_symbol_homoglyph, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating Unicode character <U+%0> as identifier character rather than as '%1' symbol", 654, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_pop_macro_no_push, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma pop_macro could not pop '%0', no matching push_macro", 275, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected '%0'", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_expected_number, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected a warning number", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_push_level, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning(push, level) requires a level between 0 and 4", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_pragma_warning_spec_invalid, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "#pragma warning expected 'push', 'pop', 'default', 'disable', 'error', 'once', 'suppress', 1, 2, 3, or 4", 676, SFINAE_Suppress, false, false, 1)
+DIAG(warn_quoted_include_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "double-quoted include \"%0\" in framework header, expected angle-bracketed instead", 537, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete universal character name; treating as '\\' followed by identifier", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_no_digits, CLASS_WARNING, (unsigned)diag::Severity::Warning, "\\%0 used with no following hex digits; treating as '\\' followed by identifier", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_escape_surrogate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character name refers to a surrogate character", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89, CLASS_WARNING, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++; treating as '\\' followed by identifier", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_ucn_not_valid_in_c89_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "universal character names are only valid in C99 or C++", 669, SFINAE_Suppress, false, false, 1)
+DIAG(warn_uncovered_module_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "umbrella header for module '%0' does not include header '%1'", 303, SFINAE_Suppress, false, false, 1)
+DIAG(warn_use_of_private_header_outside_module, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of private header from outside its module: '%0'", 527, SFINAE_Suppress, false, false, 1)
+DIAG(warn_utf8_symbol_homoglyph, CLASS_WARNING, (unsigned)diag::Severity::Warning, "treating Unicode character <U+%0> as identifier character rather than as '%1' symbol", 670, SFINAE_Suppress, false, false, 1)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticOptions.def b/linux-x64/clang/include/clang/Basic/DiagnosticOptions.def
index 2467b24..2264565 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticOptions.def
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticOptions.def
@@ -61,9 +61,9 @@
 DIAGOPT(ShowNoteIncludeStack, 1, 0) /// Show include stacks for notes.
 VALUE_DIAGOPT(ShowCategories, 2, 0) /// Show categories: 0 -> none, 1 -> Number,
                                     /// 2 -> Full Name.
-                                 
-ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics: 
-  
+
+ENUM_DIAGOPT(Format, TextDiagnosticFormat, 2, Clang) /// Format for diagnostics:
+
 DIAGOPT(ShowColors, 1, 0)       /// Show diagnostics with ANSI color sequences.
 ENUM_DIAGOPT(ShowOverloads, OverloadsShown, 1,
              Ovl_All)    /// Overload candidates to show.
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticOptions.h b/linux-x64/clang/include/clang/Basic/DiagnosticOptions.h
index 404d0c5..4c5bcb4 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticOptions.h
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticOptions.h
@@ -18,7 +18,7 @@
 
 namespace clang {
 
-/// \brief Specifies which overload candidates to display when overload
+/// Specifies which overload candidates to display when overload
 /// resolution fails.
 enum OverloadsShown : unsigned {
   /// Show all overloads.
@@ -28,7 +28,7 @@
   Ovl_Best
 };
 
-/// \brief A bitmask representing the diagnostic levels used by
+/// A bitmask representing the diagnostic levels used by
 /// VerifyDiagnosticConsumer.
 enum class DiagnosticLevelMask : unsigned {
   None    = 0,
@@ -60,7 +60,7 @@
 
 raw_ostream& operator<<(raw_ostream& Out, DiagnosticLevelMask M);
 
-/// \brief Options for controlling the compiler diagnostics engine.
+/// Options for controlling the compiler diagnostics engine.
 class DiagnosticOptions : public RefCountedBase<DiagnosticOptions>{
 public:
   enum TextDiagnosticFormat { Clang, MSVC, Vi };
@@ -89,10 +89,10 @@
 #include "clang/Basic/DiagnosticOptions.def"
 
 public:
-  /// \brief The file to log diagnostic output to.
+  /// The file to log diagnostic output to.
   std::string DiagnosticLogFile;
-  
-  /// \brief The file to serialize diagnostics to (non-appending).
+
+  /// The file to serialize diagnostics to (non-appending).
   std::string DiagnosticSerializationFile;
 
   /// The list of -W... options used to alter the diagnostic mappings, with the
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
index 55a58e3..be92687 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticParseKinds.inc
@@ -218,6 +218,8 @@
 DIAG(err_opencl_logical_exclusive_or, CLASS_ERROR, (unsigned)diag::Severity::Error, "^^ is a reserved operator in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_opencl_taking_function_address_parser, CLASS_ERROR, (unsigned)diag::Severity::Error, "taking address of function is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_opencl_unroll_hint_on_non_loop, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL only supports 'opencl_unroll_hint' attribute on for, while, and do statements", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_openclcxx_reserved, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is a reserved keyword in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_openclcxx_virtual_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "virtual functions are not supported in OpenCL C++", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_out_of_line_constructor_template_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "out-of-line constructor for %0 cannot have template arguments", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_override_control_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' keyword not permitted with interface types", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_paren_sizeof_parameter_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "missing parentheses around the size of parameter pack %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -281,6 +283,7 @@
 DIAG(err_unexpected_protocol_qualifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "@implementation declaration cannot be protocol qualified", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_scope_on_base_decltype, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected namespace scope prior to decltype", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_semi, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected ';' before %0", 0, SFINAE_SubstitutionFailure, false, true, 4)
+DIAG(err_unexpected_template_in_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "'template' keyword not permitted here", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_token_in_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be a part of nested name specifier; did you mean ':'?", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_typedef_ident, CLASS_ERROR, (unsigned)diag::Severity::Error, "unexpected type name %0: expected identifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_unexpected_unqualified_id, CLASS_ERROR, (unsigned)diag::Severity::Error, "type-id cannot have a name", 0, SFINAE_SubstitutionFailure, false, true, 4)
@@ -290,64 +293,64 @@
 DIAG(err_using_attribute_ns_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute with scope specifier cannot follow default scope specifier", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_using_namespace_in_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "'using namespace' is not allowed in classes", 0, SFINAE_SubstitutionFailure, false, true, 4)
 DIAG(err_zero_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "version number must have non-zero major, minor, or sub-minor version", 0, SFINAE_SubstitutionFailure, false, true, 4)
-DIAG(ext_abstract_pack_declarator_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 requires a parenthesized pack declaration to have a name", 24, SFINAE_Suppress, false, false, 4)
-DIAG(ext_alias_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "alias declarations are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_alignof_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 applied to an expression is a GNU extension", 236, SFINAE_Suppress, false, false, 4)
-DIAG(ext_auto_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases", 48, SFINAE_Suppress, false, false, 4)
-DIAG(ext_auto_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__auto_type' is a GNU extension", 239, SFINAE_Suppress, false, false, 4)
-DIAG(ext_bitfield_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default member initializer for bit-field is a C++2a extension", 96, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_alignment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 is a C11-specific feature", 110, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_generic_selection, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "generic selections are a C11-specific feature", 110, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_noreturn, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Noreturn functions are a C11-specific feature", 110, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c11_static_assert, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Static_assert is a C11-specific feature", 110, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c99_compound_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "compound literals are a C99-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c99_variable_decl_in_for_loop, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable declaration in for loop is a C99-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Microsoft extension", 364, SFINAE_Suppress, false, false, 4)
-DIAG(ext_constexpr_if, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "constexpr if is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_constexpr_on_lambda_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'constexpr' on lambda expressions is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_cxx11_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_decltype_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'decltype(auto)' type specifier is a C++14 extension", 85, SFINAE_Suppress, false, false, 4)
-DIAG(ext_decomp_decl_empty, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not allow a decomposition group to be empty", 191, SFINAE_Suppress, false, false, 4)
-DIAG(ext_defaulted_deleted_function, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{defaulted|deleted}0 function definitions are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ellipsis_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "exception specification of '...' is a Microsoft extension", 360, SFINAE_Suppress, false, false, 4)
-DIAG(ext_empty_translation_unit, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C requires a translation unit to contain at least one declaration", 192, SFINAE_Suppress, false, false, 4)
-DIAG(ext_enumerator_list_comma_c, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C99-specific feature", 112, SFINAE_Suppress, false, false, 4)
-DIAG(ext_enumerator_list_comma_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
+DIAG(ext_abstract_pack_declarator_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 requires a parenthesized pack declaration to have a name", 22, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alias_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "alias declarations are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_alignof_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 applied to an expression is a GNU extension", 242, SFINAE_Suppress, false, false, 4)
+DIAG(ext_auto_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases", 49, SFINAE_Suppress, false, false, 4)
+DIAG(ext_auto_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__auto_type' is a GNU extension", 245, SFINAE_Suppress, false, false, 4)
+DIAG(ext_bitfield_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default member initializer for bit-field is a C++2a extension", 97, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_alignment, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 is a C11-specific feature", 111, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_generic_selection, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "generic selections are a C11-specific feature", 111, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_noreturn, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Noreturn functions are a C11-specific feature", 111, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c11_static_assert, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "_Static_assert is a C11-specific feature", 111, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_compound_literal, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "compound literals are a C99-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c99_variable_decl_in_for_loop, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable declaration in for loop is a C99-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_c_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a Microsoft extension", 372, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_if, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "constexpr if is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_constexpr_on_lambda_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'constexpr' on lambda expressions is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_cxx11_enum_fixed_underlying_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decltype_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'decltype(auto)' type specifier is a C++14 extension", 86, SFINAE_Suppress, false, false, 4)
+DIAG(ext_decomp_decl_empty, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not allow a decomposition group to be empty", 195, SFINAE_Suppress, false, false, 4)
+DIAG(ext_defaulted_deleted_function, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{defaulted|deleted}0 function definitions are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ellipsis_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "exception specification of '...' is a Microsoft extension", 368, SFINAE_Suppress, false, false, 4)
+DIAG(ext_empty_translation_unit, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C requires a translation unit to contain at least one declaration", 196, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_c, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C99-specific feature", 113, SFINAE_Suppress, false, false, 4)
+DIAG(ext_enumerator_list_comma_cxx, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
 DIAG(ext_expected_semi_decl_list, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected ';' at end of declaration list", 0, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extern_template, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extern templates are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extra_semi, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", 209, SFINAE_Suppress, false, false, 4)
-DIAG(ext_extra_semi_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
-DIAG(ext_fold_expression, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack fold expression is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_for_range, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop is a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_generalized_initializer_lists, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "generalized initializer lists are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_address_of_label, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU address-of-label extension", 253, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_array_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU array range extension", 245, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_case_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU case range extension", 241, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_conditional_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU ?: conditional expression extension, omitting middle operand", 244, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_empty_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU empty initializer extension", 246, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_indirect_goto, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU indirect-goto extension", 253, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_missing_equal_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU 'missing =' extension in designator", 245, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_old_style_field_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU old-style field designator extension", 245, SFINAE_Suppress, false, false, 4)
-DIAG(ext_gnu_statement_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU statement expression extension", 255, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ident_list_in_param, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type-less parameter names in function declaration", 500, SFINAE_Suppress, false, false, 4)
-DIAG(ext_init_statement, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%select{if|switch}0' initialization statements are a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_inline_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline namespaces are a C++11 feature", 79, SFINAE_Suppress, false, false, 4)
-DIAG(ext_keyword_as_ident, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "keyword '%0' will be made available as an identifier %select{here|for the remainder of the translation unit}1", 328, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ms_sealed_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'sealed' keyword is a Microsoft extension", 372, SFINAE_Suppress, false, false, 4)
-DIAG(ext_multi_using_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of multiple declarators in a single using declaration is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "nested namespace definition is a C++17 extension; define each namespace separately", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nonstatic_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initialization of non-static data member is a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ns_enum_attribute, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_nullability, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type nullability specifier %0 is a Clang extension", 437, SFINAE_Suppress, false, false, 4)
-DIAG(ext_override_control_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' keyword is a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_ref_qualifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "reference qualifiers on functions are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_rvalue_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "rvalue references are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_scoped_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "scoped enumerations are a C++11 extension", 77, SFINAE_Suppress, false, false, 4)
-DIAG(ext_stdc_pragma_ignored, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown pragma in STDC namespace", 660, SFINAE_Suppress, false, false, 4)
-DIAG(ext_template_template_param_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template template parameter using 'typename' is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_thread_before, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__thread' before '%0'", 500, SFINAE_Suppress, false, false, 4)
-DIAG(ext_using_attribute_ns, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default scope specifier for attributes is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
-DIAG(ext_using_declaration_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack expansion of using declaration is a C++17 extension", 89, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extern_template, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extern templates are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' %select{outside of a function|inside a %1|inside instance variable list|after member function definition}0", 213, SFINAE_Suppress, false, false, 4)
+DIAG(ext_extra_semi_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is a C++11 extension", 79, SFINAE_Suppress, false, false, 4)
+DIAG(ext_fold_expression, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack fold expression is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_for_range, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "range-based for loop is a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_generalized_initializer_lists, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "generalized initializer lists are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_address_of_label, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU address-of-label extension", 259, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_array_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU array range extension", 251, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_case_range, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU case range extension", 247, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_conditional_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU ?: conditional expression extension, omitting middle operand", 250, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_empty_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU empty initializer extension", 252, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_indirect_goto, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU indirect-goto extension", 259, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_missing_equal_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU 'missing =' extension in designator", 251, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_old_style_field_designator, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of GNU old-style field designator extension", 251, SFINAE_Suppress, false, false, 4)
+DIAG(ext_gnu_statement_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of GNU statement expression extension", 261, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ident_list_in_param, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type-less parameter names in function declaration", 510, SFINAE_Suppress, false, false, 4)
+DIAG(ext_init_statement, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%select{if|switch}0' initialization statements are a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_inline_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline namespaces are a C++11 feature", 80, SFINAE_Suppress, false, false, 4)
+DIAG(ext_keyword_as_ident, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "keyword '%0' will be made available as an identifier %select{here|for the remainder of the translation unit}1", 335, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ms_sealed_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'sealed' keyword is a Microsoft extension", 380, SFINAE_Suppress, false, false, 4)
+DIAG(ext_multi_using_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of multiple declarators in a single using declaration is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nested_namespace_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "nested namespace definition is a C++17 extension; define each namespace separately", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nonstatic_member_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initialization of non-static data member is a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ns_enum_attribute, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_nullability, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "type nullability specifier %0 is a Clang extension", 446, SFINAE_Suppress, false, false, 4)
+DIAG(ext_override_control_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' keyword is a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_ref_qualifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "reference qualifiers on functions are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_rvalue_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "rvalue references are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_scoped_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "scoped enumerations are a C++11 extension", 78, SFINAE_Suppress, false, false, 4)
+DIAG(ext_stdc_pragma_ignored, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unknown pragma in STDC namespace", 676, SFINAE_Suppress, false, false, 4)
+DIAG(ext_template_template_param_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template template parameter using 'typename' is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_thread_before, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'__thread' before '%0'", 510, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_attribute_ns, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default scope specifier for attributes is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
+DIAG(ext_using_declaration_pack, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pack expansion of using declaration is a C++17 extension", 90, SFINAE_Suppress, false, false, 4)
 DIAG(note_bracket_depth, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use -fbracket-depth=N to increase maximum nesting level", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_extra_comma_message_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "comma separating Objective-C messaging arguments", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_force_empty_selector_name, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "or insert whitespace before ':' to use %0 as parameter name and have an empty entry in the selector", 0, SFINAE_Suppress, false, false, 4)
@@ -360,104 +363,106 @@
 DIAG(note_objc_container_start, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{class|protocol|category|class extension|implementation|category implementation}0 started here", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_pragma_attribute_use_attribute_kw, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use the GNU '__attribute__' syntax", 0, SFINAE_Suppress, false, false, 4)
 DIAG(note_previous_default_assoc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "previous default generic association is here", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_arc_bridge_cast_nonarc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' casts have no effect when not using ARC", 26, SFINAE_Suppress, false, false, 8)
-DIAG(warn_asm_qualifier_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored %0 qualifier on asm", 36, SFINAE_Suppress, false, false, 12)
-DIAG(warn_attribute_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it is not attached to a declaration", 265, SFINAE_Suppress, false, false, 4)
-DIAG(warn_attribute_on_function_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow %0 attribute in this position on a function definition", 233, SFINAE_Suppress, false, false, 4)
-DIAG(warn_availability_and_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'unavailable' availability overrides all other availability information", 50, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cstyle_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of C-style parameters in Objective-C method declarations is deprecated", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_cuda_attr_lambda_position, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nvcc does not allow '__%0__' to appear after '()' in lambdas", 141, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx11_compat_decltype_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype(auto)' type specifier is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx11_right_shift_in_template_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of right-shift operator ('>>') in template argument will require parentheses in C++11", 73, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_constexpr_if, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr if is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_constexpr_on_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr on lambda expressions is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_fold_expression, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack fold expression is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "nested namespace definition is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_ns_enum_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_template_template_param_typename, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template template parameter using 'typename' is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx14_compat_using_attribute_ns, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default scope specifier for attributes is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_bitfield_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default member initializer for bit-field is incompatible with C++ standards before C++2a", 97, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_multi_using_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx17_compat_using_declaration_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack expansion using declaration is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alias_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alias declarations are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alignas, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'alignas' is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_alignof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alignof expressions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++11 attribute syntax is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_decltype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype' type specifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_defaulted_deleted_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{defaulted|deleted}0 function definitions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_enum_fixed_underlying_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_enumerator_list_comma, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are incompatible with C++98", 108, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_extern_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extern templates are incompatible with C++98", 108, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_for_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_generalized_initializer_lists, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generalized initializer lists are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_inline_namespace, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline namespaces are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda expressions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_literal_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "literal operators are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_noexcept_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept specifications are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_noexcept_expr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept expressions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_nonstatic_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "in-class initialization of non-static data members is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_nullptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'nullptr' is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_override_control_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' keyword is incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_ref_qualifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference qualifiers on functions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_rvalue_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "rvalue references are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_scoped_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scoped enumerations are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_static_assert, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert declarations are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_top_level_semi, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is incompatible with C++98", 106, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_trailing_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "trailing return types are incompatible with C++98", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_cxx98_compat_two_right_angle_brackets, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consecutive right angle brackets are incompatible with C++98 (use '> >')", 104, SFINAE_Suppress, false, false, 4)
-DIAG(warn_dangling_else, CLASS_WARNING, (unsigned)diag::Severity::Warning, "add explicit braces to avoid dangling else", 143, SFINAE_Suppress, false, false, 4)
-DIAG(warn_expected_consistent_version_separator, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use same version number separators '_' or '.'; as in 'major[.minor[.subminor]]'", 50, SFINAE_Suppress, false, false, 4)
+DIAG(warn_arc_bridge_cast_nonarc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' casts have no effect when not using ARC", 24, SFINAE_Suppress, false, false, 8)
+DIAG(warn_asm_qualifier_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored %0 qualifier on asm", 35, SFINAE_Suppress, false, false, 12)
+DIAG(warn_atimport_in_framework_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of '@import' in framework header is discouraged, including this header requires -fmodules", 40, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_no_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it is not attached to a declaration", 271, SFINAE_Suppress, false, false, 4)
+DIAG(warn_attribute_on_function_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow %0 attribute in this position on a function definition", 239, SFINAE_Suppress, false, false, 4)
+DIAG(warn_availability_and_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'unavailable' availability overrides all other availability information", 51, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cstyle_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of C-style parameters in Objective-C method declarations is deprecated", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_cuda_attr_lambda_position, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nvcc does not allow '__%0__' to appear after '()' in lambdas", 143, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_compat_decltype_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype(auto)' type specifier is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx11_right_shift_in_template_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of right-shift operator ('>>') in template argument will require parentheses in C++11", 74, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_if, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr if is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_constexpr_on_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr on lambda expressions is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_fold_expression, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack fold expression is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_init_statement, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{if|switch}0 initialization statements are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_nested_namespace_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "nested namespace definition is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_ns_enum_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "attributes on %select{a namespace|an enumerator}0 declaration are incompatible with C++ standards before C++17", 101, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_template_template_param_typename, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "template template parameter using 'typename' is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx14_compat_using_attribute_ns, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default scope specifier for attributes is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_bitfield_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default member initializer for bit-field is incompatible with C++ standards before C++2a", 98, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_multi_using_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of multiple declarators in a single using declaration is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx17_compat_using_declaration_pack, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "pack expansion using declaration is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alias_declaration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alias declarations are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignas, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'alignas' is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_alignof, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "alignof expressions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_attribute, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "C++11 attribute syntax is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_decltype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'decltype' type specifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_defaulted_deleted_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{defaulted|deleted}0 function definitions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enum_fixed_underlying_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration types with a fixed underlying type are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_enumerator_list_comma, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "commas at the end of enumerator lists are incompatible with C++98", 109, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_extern_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extern templates are incompatible with C++98", 109, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_for_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "range-based for loop is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_generalized_initializer_lists, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "generalized initializer lists are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_inline_namespace, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline namespaces are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_lambda, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda expressions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_literal_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "literal operators are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept specifications are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_noexcept_expr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "noexcept expressions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nonstatic_member_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "in-class initialization of non-static data members is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_nullptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'nullptr' is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_override_control_keyword, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' keyword is incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_ref_qualifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference qualifiers on functions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_rvalue_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "rvalue references are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_scoped_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scoped enumerations are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_static_assert, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert declarations are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_top_level_semi, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' outside of a function is incompatible with C++98", 107, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_trailing_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "trailing return types are incompatible with C++98", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_cxx98_compat_two_right_angle_brackets, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consecutive right angle brackets are incompatible with C++98 (use '> >')", 105, SFINAE_Suppress, false, false, 4)
+DIAG(warn_dangling_else, CLASS_WARNING, (unsigned)diag::Severity::Warning, "add explicit braces to avoid dangling else", 146, SFINAE_Suppress, false, false, 4)
+DIAG(warn_expected_consistent_version_separator, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use same version number separators '_' or '.'; as in 'major[.minor[.subminor]]'", 51, SFINAE_Suppress, false, false, 4)
 DIAG(warn_expected_qualified_after_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "expected a qualified name after 'typename'", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_extra_semi_after_mem_fn_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' after member function definition", 209, SFINAE_Suppress, false, false, 4)
-DIAG(warn_file_asm_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "meaningless 'volatile' on asm outside function", 36, SFINAE_Suppress, false, false, 12)
-DIAG(warn_gcc_attribute_location, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow an attribute in this position on a function declaration", 233, SFINAE_Suppress, false, false, 4)
-DIAG(warn_microsoft_dependent_exists, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", 361, SFINAE_Suppress, false, false, 4)
-DIAG(warn_microsoft_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "qualifiers after comma in declarator list are ignored", 265, SFINAE_Suppress, false, false, 4)
-DIAG(warn_misplaced_ellipsis_vararg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'...' in this location creates a C-style varargs function%select{, not a function parameter pack|}0", 20, SFINAE_Suppress, false, false, 4)
+DIAG(warn_extra_semi_after_mem_fn_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "extra ';' after member function definition", 213, SFINAE_Suppress, false, false, 4)
+DIAG(warn_file_asm_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "meaningless 'volatile' on asm outside function", 35, SFINAE_Suppress, false, false, 12)
+DIAG(warn_gcc_attribute_location, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow an attribute in this position on a function declaration", 239, SFINAE_Suppress, false, false, 4)
+DIAG(warn_gcc_variable_decl_in_for_loop, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow variable declarations in for loop initializers before C99", 239, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_dependent_exists, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent %select{__if_not_exists|__if_exists}0 declarations are ignored", 369, SFINAE_Suppress, false, false, 4)
+DIAG(warn_microsoft_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "qualifiers after comma in declarator list are ignored", 271, SFINAE_Suppress, false, false, 4)
+DIAG(warn_misplaced_ellipsis_vararg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'...' in this location creates a C-style varargs function%select{, not a function parameter pack|}0", 18, SFINAE_Suppress, false, false, 4)
 DIAG(warn_missing_dependent_template_keyword, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use 'template' keyword to treat '%0' as a dependent template name", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_missing_selector_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 used as the name of the previous parameter rather than as part of the selector", 393, SFINAE_Suppress, false, false, 4)
+DIAG(warn_missing_selector_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 used as the name of the previous parameter rather than as part of the selector", 401, SFINAE_Suppress, false, false, 4)
 DIAG(warn_objc_protocol_qualifier_missing_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol has no object type specified; defaults to qualified 'id'", 0, SFINAE_Suppress, false, false, 4)
-DIAG(warn_omp_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at the end of '#pragma omp %0' are ignored", 210, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_align_expected_equal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '=' following '#pragma %select{align|options align}0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_align_invalid_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid alignment option in '#pragma %select{align|options align}0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_begin_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL extension end directive mismatches begin directive - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_comment_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma comment %0' ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_action_or_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected action or ')' in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_colon, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' after %0 - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_colon_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' or ')' after %0 - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_comma, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ',' in '#pragma %0'", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_identifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected identifier in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_init_seg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'compiler', 'lib', 'user', or a string literal for the section name in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer between %0 and %1 inclusive in '#pragma %2' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_lparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing '(' after '#pragma %0' - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_non_wide_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected non-wide string literal in '#pragma %0'", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_predicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected %select{'enable', 'disable', 'begin' or 'end'|'disable'}0 - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_punc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ')' or ',' in '#pragma %0'", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_rparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ')' after '#pragma %0' - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_label_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a stack label or a string literal for the section name in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a string literal for the section name in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_section_push_pop_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected push, pop or a string literal for the section name in '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_expected_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected string literal in '#pragma %0' - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_extension_is_core, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "OpenCL extension %0 is core feature or supported optional core feature - ignoring", 501, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at end of '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_force_cuda_host_device_bad_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of #pragma clang force_cuda_host_device begin|end", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_init_seg_unsupported_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma init_seg' is only supported when targeting a Microsoft environment", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_intrinsic_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", 267, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action for '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_invalid_specific_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action '%1' for '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to '#pragma %0'%select{|; expected %2}1", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of '#pragma ms_struct on|off' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_omp_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unexpected '#pragma omp ...' in program", 581, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_optimize, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma optimize' is not supported", 268, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_options_expected_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'align' following '#pragma options' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_pack_malformed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer or identifier in '#pragma pack' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unknown_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown OpenCL extension %0 - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unroll_cuda_value_in_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++", 141, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unsupported_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "known but unsupported action '%1' for '#pragma %0' - ignored", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unsupported_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsupported OpenCL extension %0 - ignoring", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_pragma_unused_expected_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '#pragma unused' argument to be a variable name", 269, SFINAE_Suppress, false, false, 4)
-DIAG(warn_semicolon_before_method_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "semicolon before method body is ignored", 554, SFINAE_Suppress, false, false, 4)
-DIAG(warn_static_inline_explicit_inst_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%select{static|inline}0' keyword on explicit template instantiation", 586, SFINAE_Suppress, false, false, 4)
-DIAG(warn_stdc_fenv_access_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma", 660, SFINAE_Suppress, false, false, 4)
+DIAG(warn_omp_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at the end of '#pragma omp %0' are ignored", 214, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_expected_equal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '=' following '#pragma %select{align|options align}0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_align_invalid_option, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid alignment option in '#pragma %select{align|options align}0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_begin_end_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenCL extension end directive mismatches begin directive - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_comment_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma comment %0' ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_action_or_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected action or ')' in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' after %0 - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_colon_r_paren, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ':' or ')' after %0 - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_comma, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ',' in '#pragma %0'", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_identifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected identifier in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_init_seg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'compiler', 'lib', 'user', or a string literal for the section name in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer between %0 and %1 inclusive in '#pragma %2' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_lparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing '(' after '#pragma %0' - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_non_wide_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected non-wide string literal in '#pragma %0'", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_predicate, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected %select{'enable', 'disable', 'begin' or 'end'|'disable'}0 - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_punc, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected ')' or ',' in '#pragma %0'", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_rparen, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing ')' after '#pragma %0' - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_label_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a stack label or a string literal for the section name in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected a string literal for the section name in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_section_push_pop_or_name, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected push, pop or a string literal for the section name in '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_expected_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected string literal in '#pragma %0' - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extension_is_core, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "OpenCL extension %0 is core feature or supported optional core feature - ignoring", 511, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_extra_tokens_at_eol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra tokens at end of '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_force_cuda_host_device_bad_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of #pragma clang force_cuda_host_device begin|end", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_init_seg_unsupported_target, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma init_seg' is only supported when targeting a Microsoft environment", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_intrinsic_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is not a recognized builtin%select{|; consider including <intrin.h> to access non-builtin intrinsics}1", 273, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action for '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_invalid_specific_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown action '%1' for '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_missing_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing argument to '#pragma %0'%select{|; expected %2}1", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incorrect use of '#pragma ms_struct on|off' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_omp_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unexpected '#pragma omp ...' in program", 594, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_optimize, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'#pragma optimize' is not supported", 274, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_options_expected_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected 'align' following '#pragma options' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_pack_malformed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected integer or identifier in '#pragma pack' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unknown_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown OpenCL extension %0 - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unroll_cuda_value_in_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to '#pragma unroll' should not be in parentheses in CUDA C/C++", 143, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_action, CLASS_WARNING, (unsigned)diag::Severity::Warning, "known but unsupported action '%1' for '#pragma %0' - ignored", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unsupported_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsupported OpenCL extension %0 - ignoring", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_pragma_unused_expected_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected '#pragma unused' argument to be a variable name", 275, SFINAE_Suppress, false, false, 4)
+DIAG(warn_semicolon_before_method_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "semicolon before method body is ignored", 567, SFINAE_Suppress, false, false, 4)
+DIAG(warn_static_inline_explicit_inst_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring '%select{static|inline}0' keyword on explicit template instantiation", 599, SFINAE_Suppress, false, false, 4)
+DIAG(warn_stdc_fenv_access_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pragma STDC FENV_ACCESS ON is not supported, ignoring pragma", 676, SFINAE_Suppress, false, false, 4)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
index cb1fc0d..28ea234 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticSemaKinds.inc
@@ -3,6 +3,7 @@
 #undef SEMASTART
 #endif
 
+DIAG(err_32_bit_builtin_64_bit_tgt, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on 32-bit targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_64_bit_builtin_32_bit_tgt, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on 64-bit targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_abi_tag_on_redeclaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot add 'abi_tag' attribute in a redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_abstract_type_in_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{return|parameter|variable|field|instance variable|synthesized instance variable}0 type %1 is an abstract class", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -41,6 +42,7 @@
 DIAG(err_alignas_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "redeclaration has different alignment requirement (%1 vs %0)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_alignas_missing_on_definition, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 must be specified on definition if it is specified on any declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_alignas_underaligned, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is less than minimum alignment of %1 for type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_aligned_allocation_unavailable, CLASS_ERROR, (unsigned)diag::Severity::Error, "aligned %select{allocation|deallocation}0 function of type '%1' is only available on %2 %3 or newer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_aligned_attribute_argument_not_int, CLASS_ERROR, (unsigned)diag::Severity::Error, "'aligned' attribute requires integer constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_alignment_dependent_typedef_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is dependent but declaration is not dependent", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_alignment_not_power_of_two, CLASS_ERROR, (unsigned)diag::Severity::Error, "requested alignment is not a power of 2", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -116,7 +118,7 @@
 DIAG(err_arc_weak_unavailable_assign, CLASS_ERROR, (unsigned)diag::Severity::Error, "assignment of a weak-unavailable object to a __weak object", 0, SFINAE_SubstitutionFailure, false, true, 9)
 DIAG(err_arc_weak_unavailable_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesizing __weak instance variable of type %0, which does not support weak references", 0, SFINAE_SubstitutionFailure, false, true, 9)
 DIAG(err_arg_with_address_space, CLASS_ERROR, (unsigned)diag::Severity::Error, "parameter may not be qualified with an address space", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_argument_invalid_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument should be a value from %0 to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_argument_invalid_range, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument value %0 is outside the valid range [%1, %2]", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_argument_not_multiple, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument should be a multiple of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_arithmetic_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "arithmetic on pointer to interface %0, which is not a constant size for this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_arm_invalid_specialreg, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid special register for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -129,6 +131,8 @@
 DIAG(err_array_init_narrow_string_into_wchar, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing wide char array with non-wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_init_non_constant_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize array %diff{of type $ with non-constant array of type $|with different type of array}0,1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_init_not_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "array initializer must be an initializer list%select{| or string literal| or wide string literal}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_plain_string_into_char8_t, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing 'char8_t' array with plain string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_array_init_utf8_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization of char array with UTF-8 string literal is not permitted by '-fchar8_t'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_init_wide_string_into_char, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing char array with wide string literal", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_new_needs_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "array size must be specified in new expressions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_array_of_abstract_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of abstract class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -168,6 +172,7 @@
 DIAG(err_assoc_type_nonobject, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association not an object type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_assoc_type_variably_modified, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 in generic association is a variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atdef_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of @defs is not supported on this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_builtin_cannot_be_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin cannot be const-qualified (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_builtin_must_be_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_builtin_must_be_pointer_intfltptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer to integer, floating-point or pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_builtin_must_be_pointer_intptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic builtin must be a pointer to integer or pointer (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -178,6 +183,7 @@
 DIAG(err_atomic_op_has_invalid_synch_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "synchronization scope argument to atomic operation is invalid", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_op_needs_atomic, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to _Atomic type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_op_needs_atomic_int_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to %select{|atomic }0integer or pointer (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_atomic_op_needs_int32_or_ptr, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to signed or unsigned 32-bit integer", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_op_needs_non_const_atomic, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to non-%select{const|constant}0 _Atomic type (%1 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_op_needs_non_const_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to non-const type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_atomic_op_needs_trivial_copy, CLASS_ERROR, (unsigned)diag::Severity::Error, "address argument to atomic operation must be a pointer to a trivially-copyable type (%0 invalid)", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -230,7 +236,7 @@
 DIAG(err_attribute_regparm_wrong_platform, CLASS_ERROR, (unsigned)diag::Severity::Error, "'regparm' is not valid on this platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_requires_opencl_version, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires OpenCL version %1%select{| or above}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_requires_positive_integer, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute requires a positive integral compile time constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_attribute_section_invalid_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to 'section' attribute is not valid for this target: %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_section_invalid_for_target, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to %select{'code_seg'|'section'}1 attribute is not valid for this target: %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_selectany_non_extern_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "'selectany' can only be applied to data items with external linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_sentinel_less_than_zero, CLASS_ERROR, (unsigned)diag::Severity::Error, "'sentinel' parameter 1 less than zero", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_sentinel_not_zero_or_one, CLASS_ERROR, (unsigned)diag::Severity::Error, "'sentinel' parameter 2 not 0 or 1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -245,7 +251,7 @@
 DIAG(err_attribute_weakref_not_global_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration of %0 must be in a global context", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_weakref_not_static, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration must have internal linkage", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_weakref_without_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "weakref declaration of %0 must also have an alias attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_attribute_wrong_decl_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions|variables, functions, methods, types, enumerations, enumerators, labels, and non-static data members}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_attribute_wrong_decl_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_wrong_decl_type_str, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_wrong_number_arguments, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute %plural{0:takes no arguments|1:takes one argument|:requires exactly %1 arguments}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_attribute_zero_size, CLASS_ERROR, (unsigned)diag::Severity::Error, "zero vector size", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -327,7 +333,7 @@
 DIAG(err_block_on_vm, CLASS_ERROR, (unsigned)diag::Severity::Error, "__block attribute not allowed on declaration with a variably modified type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_block_return_missing_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-void block should return a value", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_block_returning_array_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "block cannot return %select{array|function}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_blocks_disable, CLASS_ERROR, (unsigned)diag::Severity::Error, "blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL 2.0 or above}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_blocks_disable, CLASS_ERROR, (unsigned)diag::Severity::Error, "blocks support disabled - compile with -fblocks or %select{pick a deployment target that supports them|for OpenCL 2.0}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_bound_member_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to non-static member function must be called%select{|; did you mean to call it with no arguments?}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_box_literal_collection, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{string|character|boolean|numeric}0 literal must be prefixed by '@' in a collection", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_break_not_in_loop_or_switch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'break' statement not in loop or switch statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -340,8 +346,10 @@
 DIAG(err_builtin_longjmp_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_longjmp is not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_builtin_needs_feature, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 needs target feature %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_builtin_operator_new_delete_not_usual, CLASS_ERROR, (unsigned)diag::Severity::Error, "call to '%select{__builtin_operator_new|__builtin_operator_delete}0' selects non-usual %select{allocation|deallocation}0 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_redeclare, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot redeclare builtin function %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_builtin_requires_language, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' is only available in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_builtin_setjmp_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "__builtin_setjmp is not supported for the current target", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_builtin_target_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this target", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_builtin_x64_aarch64_only, CLASS_ERROR, (unsigned)diag::Severity::Error, "this builtin is only available on x86-64 and aarch64 targets", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_c99_array_usage_cxx, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature, not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_call_function_incomplete_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "calling %0 with incomplete return type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -401,6 +409,7 @@
 DIAG(err_conditional_void_nonvoid, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{left|right}1 operand to ? is void, but %select{right|left}1 operand is of type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_config_scalar_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "CUDA special function 'cudaConfigureCall' must have scalar return type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_conflicting_aliasing_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting types for alias %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_conflicting_codeseg_attribute, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting code segment specifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_conflicting_ivar_bitwidth, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 has conflicting bit-field width", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_conflicting_ivar_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting instance variable names: %0 vs %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_conflicting_ivar_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable %0 has conflicting type%diff{: $ vs $|}1,2", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -458,7 +467,7 @@
 DIAG(err_coroutine_promise_requires_return_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "the coroutine promise type %0 must declare either 'return_value' or 'return_void'", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_promise_type_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %0 is an incomplete type", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_promise_unhandled_exception_required, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 is required to declare the member 'unhandled_exception()'", 0, SFINAE_SubstitutionFailure, false, true, 14)
-DIAG(err_coroutine_type_missing_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: missing definition of specialization %q0", 0, SFINAE_SubstitutionFailure, false, true, 14)
+DIAG(err_coroutine_type_missing_specialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: missing definition of specialization %0", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_coroutine_unevaluated_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be used in an unevaluated context", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_covariant_return_ambiguous_derived_to_base_conv, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %3 is not covariant with the return type of the function it overrides (ambiguous conversion from derived class %0 to base class %1:%2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_covariant_return_inaccessible_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid covariant return for virtual function: %1 is a %select{private|protected}2 base class of %0", 0, SFINAE_AccessControl, false, true, 2)
@@ -466,6 +475,8 @@
 DIAG(err_covariant_return_not_derived, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 is not derived from %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_covariant_return_type_class_type_more_qualified, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (class type %1 is more qualified than class type %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_covariant_return_type_different_qualifications, CLASS_ERROR, (unsigned)diag::Severity::Error, "return type of virtual function %0 is not covariant with the return type of the function it overrides (%1 has different qualifiers than %2)", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_cpu_dispatch_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'cpu_dispatch' function redeclared with different CPUs", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_cpu_specific_multiple_defs, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple 'cpu_specific' functions cannot specify the same CPU: %0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_ctor_dtor_returns_void, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{constructor|destructor}1 %0 must not return void expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cuda_device_exceptions, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use '%0' in %select{__device__|__global__|__host__|__host__ __device__}1 function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_cuda_extern_shared, CLASS_ERROR, (unsigned)diag::Severity::Error, "__shared__ variable %0 cannot be 'extern'", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -476,6 +487,7 @@
 DIAG(err_cuda_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use variable-length arrays in %select{__device__|__global__|__host__|__host__ __device__}0 functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_current_module_name_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "module name '%0' specified on command line does not match name of module", 0, SFINAE_SubstitutionFailure, false, true, 13)
 DIAG(err_cyclic_alias, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{alias|ifunc}0 definition is part of a cycle", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dangling_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime would be shorter than the lifetime of the constructed object", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_dealloc_bad_result_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "dealloc return type must be correctly specified as 'void' under ARC, instead of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_decimal_unsupported, CLASS_ERROR, (unsigned)diag::Severity::Error, "GNU decimal type extension not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_decl_attribute_invalid_on_stmt, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a statement", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -523,6 +535,7 @@
 DIAG(err_deduction_guide_specialized, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide cannot be %select{explicitly instantiated|explicitly specialized}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_template_not_deducible, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide template contains %select{a template parameter|template parameters}0 that cannot be deduced", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_with_complex_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot specify any part of a return type in the declaration of a deduction guide", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_deduction_guide_wrong_access, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide has different access from the corresponding member template", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deduction_guide_wrong_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduction guide must be declared in the same scope as template %q0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deep_exception_specs_differ, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specifications of %select{return|argument}0 types differ", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_default_arg_in_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "default template argument in a class template partial specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -536,7 +549,7 @@
 DIAG(err_defaulted_special_member_quals, CLASS_ERROR, (unsigned)diag::Severity::Error, "an explicitly-defaulted %select{copy|move}0 assignment operator may not have 'const'%select{, 'constexpr'|}1 or 'volatile' qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_defaulted_special_member_return_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicitly-defaulted %select{copy|move}0 assignment operator must return %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_defaulted_special_member_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "an explicitly-defaulted %select{|copy |move }0constructor cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_defaulted_special_member_volatile_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for an explicitly-defaulted %select{<<ERROR>>|copy constructor|move constructor|copy assignment operator|move assignment operator|<<ERROR>>}0 may not be volatile", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_defaulted_special_member_volatile_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "the parameter for an explicitly-defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 may not be volatile", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_definition_of_explicitly_defaulted_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_definition_of_implicitly_declared_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition of implicitly declared %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|function}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_delegating_ctor, CLASS_ERROR, (unsigned)diag::Severity::Error, "delegating constructors are permitted only in C++11", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -550,6 +563,7 @@
 DIAG(err_deleted_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' is not allowed to be deleted", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_deleted_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "deleted function %0 cannot override a non-deleted function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_dependent_deduced_tst, CLASS_ERROR, (unsigned)diag::Severity::Error, "typename specifier refers to %select{class template|function template|variable template|alias template|template template parameter|template}0 member in %1; argument deduction not allowed here", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_dependent_function_template_spec_no_match, CLASS_ERROR, (unsigned)diag::Severity::Error, "no candidate function template was found for dependent friend function template specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_dependent_nested_name_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "nested name specifier for a declaration cannot depend on a template parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_dependent_non_type_arg_in_partial_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "type of specialized non-type template argument depends on a template parameter of the partial specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_dependent_tag_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{declaration|definition}0 of %select{struct|interface|union|class|enum}1 in a dependent scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -569,7 +583,7 @@
 DIAG(err_destructor_typedef_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be declared using a %select{typedef|type alias}1 %0 of the class name", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_destructor_variadic, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot be variadic", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_destructor_with_params, CLASS_ERROR, (unsigned)diag::Severity::Error, "destructor cannot have any parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_device_static_local_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "within a %select{__device__|__global__|__host__|__host__ __device__}0 function, only __shared__ variables may be marked 'static'", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_device_static_local_var, CLASS_ERROR, (unsigned)diag::Severity::Error, "within a %select{__device__|__global__|__host__|__host__ __device__}0 function, only __shared__ variables or const variables without device memory qualifier may be marked 'static'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_diagnose_if_invalid_diagnostic_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid diagnostic type for 'diagnose_if'; use \"error\" or \"warning\" instead", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_diagnose_if_succeeded, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_different_asm_label, CLASS_ERROR, (unsigned)diag::Severity::Error, "conflicting asm label", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -588,7 +602,7 @@
 DIAG(err_duplicate_class_def, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate interface definition for class %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_duplicate_ivar_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "instance variable is already declared", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_duplicate_ivar_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "synthesized properties %0 and %1 both claim instance variable %2", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_duplicate_mangled_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition with same mangled name as another definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_duplicate_mangled_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "definition with same mangled name '%0' as another definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_duplicate_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_duplicate_method_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "duplicate declaration of method %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_duplicate_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "property has a previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -703,7 +717,7 @@
 DIAG(err_friend_not_first_in_declaration, CLASS_ERROR, (unsigned)diag::Severity::Error, "'friend' must appear first in a non-function declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_func_def_incomplete_result, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete result type %0 in function definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_func_returning_array_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "function cannot return %select{array|function}0 type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_func_returning_qualified_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function cannot return qualified void type %0", 526, SFINAE_Suppress, false, false, 2)
+DIAG(err_func_returning_qualified_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function cannot return qualified void type %0", 536, SFINAE_Suppress, false, false, 2)
 DIAG(err_function_attribute_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declared with %0 attribute was previously declared without the %0 attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_function_concept_bool_ret, CLASS_ERROR, (unsigned)diag::Severity::Error, "declared return type of function concept must be 'bool'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_function_concept_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "function concept cannot have exception specification", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -723,6 +737,9 @@
 DIAG(err_goto_into_protected_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this goto statement to its label", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_goto_ms_asm_label, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot jump from this goto statement to label %0 inside an inline assembly block", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_half_const_requires_fp16, CLASS_ERROR, (unsigned)diag::Severity::Error, "half precision constant requires cl_khr_fp16", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_requires_hvx, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin requires HVX", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_unsupported_cpu, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this CPU", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_hexagon_builtin_unsupported_hvx, CLASS_ERROR, (unsigned)diag::Severity::Error, "builtin is not supported on this version of HVX", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_iboutletcollection_builtintype, CLASS_ERROR, (unsigned)diag::Severity::Error, "type argument of iboutletcollection attribute cannot be a builtin type", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_iboutletcollection_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid type %0 as argument of iboutletcollection attribute", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ice_ambiguous_conversion, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous conversion from type %0 to an integral or unscoped enumeration type", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -747,12 +764,13 @@
 DIAG(err_illegal_initializer_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal initializer type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_illegal_message_expr_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "Objective-C message has incomplete result type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_illegal_qualifiers_on_catch_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "illegal qualifiers on @catch parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_illegal_union_or_anon_struct_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{anonymous struct|union}0 member %1 has a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_illegal_union_or_anon_struct_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{anonymous struct|union}0 member %1 has a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_imaginary_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "imaginary types are not supported", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_impcast_complex_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit conversion from %0 to %1 is not permitted in C++", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_implicit_coroutine_std_nothrow_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "std::nothrow was not found; include <new> before defining a coroutine which uses get_return_object_on_allocation_failure()", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implicit_empty_initializer, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for aggregate with no elements requires explicit braces", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_implicit_instantiate_member_undefined, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit instantiation of undefined member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_implied_comparison_category_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce return type of 'operator<=>' because type '%0' was not found; include <compare>", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_implied_coroutine_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 type was not found; include <experimental/coroutine> before defining a coroutine", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implied_std_coroutine_traits_promise_type_not_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %0 is not a class", 0, SFINAE_SubstitutionFailure, false, true, 14)
 DIAG(err_implied_std_coroutine_traits_promise_type_not_found, CLASS_ERROR, (unsigned)diag::Severity::Error, "this function cannot be a coroutine: %q0 has no member named 'promise_type'", 0, SFINAE_SubstitutionFailure, false, true, 14)
@@ -777,7 +795,7 @@
 DIAG(err_incomplete_type_used_in_type_trait_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete type %0 used in type trait expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incomplete_typeid, CLASS_ERROR, (unsigned)diag::Severity::Error, "'typeid' of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_inconsistent_ivar_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "inconsistent number of instance variables specified", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_incorrect_defaulted_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator}0 is not constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_incorrect_defaulted_constexpr, CLASS_ERROR, (unsigned)diag::Severity::Error, "defaulted definition of %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 is not constexpr", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incorrect_defaulted_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification of explicitly defaulted %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}0 does not match the calculated one", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_incorrect_number_of_vector_initializers, CLASS_ERROR, (unsigned)diag::Severity::Error, "number of elements must be either one or match the size of the vector", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_increment_decrement_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot %select{decrement|increment}0 expression of enum type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -788,7 +806,7 @@
 DIAG(err_init_capture_multiple_expressions, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer for lambda capture %0 contains multiple expressions", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_init_capture_no_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer missing for lambda capture %0", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_init_capture_paren_braces, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce type for lambda capture %1 from %select{parenthesized|nested}0 initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
-DIAG(err_init_conversion_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize %select{a variable|a parameter|return object|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function}0 %diff{of type $ with an %select{rvalue|lvalue}2 of type $|with an %select{rvalue|lvalue}2 of incompatible type}1,3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 vs %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)|: different exception specifications}4", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_init_conversion_failed, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize %select{a variable|a parameter|return object|statement expression result|an exception object|a member subobject|an array element|a new value|a value|a base class|a constructor delegation|a vector element|a block element|a block element|a complex element|a lambda capture|a compound literal initializer|a related result|a parameter of CF audited function}0 %diff{of type $ with an %select{rvalue|lvalue}2 of type $|with an %select{rvalue|lvalue}2 of incompatible type}1,3%select{|: different classes%diff{ ($ vs $)|}5,6|: different number of parameters (%5 vs %6)|: type mismatch at %ordinal5 parameter%diff{ ($ vs $)|}6,7|: different return type%diff{ ($ vs $)|}5,6|: different qualifiers (%select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 vs %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)|: different exception specifications}4", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_init_element_not_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializer element is not a compile-time constant", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_init_for_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot create object of function type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_init_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "initialization of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -824,6 +842,7 @@
 DIAG(err_invalid_conversion_between_vector_and_scalar, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between vector type %0 and scalar type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_conversion_between_vectors, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid conversion between vector type%diff{ $ and $|}0,1 of different size", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_cpu_is, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid cpu name for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_cpu_specific_dispatch_value, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid option '%0' for %select{cpu_specific|cpu_dispatch}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_cpu_supports, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid cpu feature string for builtin", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_decl_spec_combination, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot combine with previous '%0' declaration specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_decl_specifier_in_nontype_parm, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid declaration specifier in template non-type parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -847,6 +866,7 @@
 DIAG(err_invalid_qualified_function_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-member function|static member function|deduction guide}0 %select{of type %2 |}1cannot have '%3' qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_receiver_class_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "receiver type %0 is not an Objective-C class", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_receiver_to_message_super, CLASS_ERROR, (unsigned)diag::Severity::Error, "'super' is only valid in a method body", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_invalid_saturation_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'_Sat' specifier is only valid on '_Fract' or '_Accum', not '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_sign_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "'%0' cannot be signed or unsigned", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_super_scope, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', this keyword can only be used inside class or member function scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_invalid_this_use, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of 'this' outside of a non-static member function", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -877,12 +897,15 @@
 DIAG(err_lambda_decl_ref_not_modifiable_lvalue, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot assign to a variable captured by copy in a non-mutable lambda", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_lambda_impcap, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable %0 cannot be implicitly captured in a lambda with no capture-default specified", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_lambda_in_constant_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lambda expression may not appear inside of a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
+DIAG(err_lambda_in_invalid_context, CLASS_ERROR, (unsigned)diag::Severity::Error, "a lambda expression cannot appear in this context", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_lambda_incomplete_result, CLASS_ERROR, (unsigned)diag::Severity::Error, "incomplete result type %0 in lambda expression", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_lambda_return_init_list, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot deduce lambda return type from initializer list", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_lambda_unevaluated_operand, CLASS_ERROR, (unsigned)diag::Severity::Error, "lambda expression in an unevaluated operand", 0, SFINAE_SubstitutionFailure, false, true, 3)
 DIAG(err_language_linkage_spec_not_ascii, CLASS_ERROR, (unsigned)diag::Severity::Error, "string literal in language linkage specifier cannot have an encoding-prefix", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_language_linkage_spec_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "unknown linkage language", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_late_asm_label_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot apply asm label to %select{variable|function}0 after its first use", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lifetimebound_ctor_dtor, CLASS_ERROR, (unsigned)diag::Severity::Error, "'lifetimebound' attribute cannot be applied to a %select{constructor|destructor}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_lifetimebound_no_object_param, CLASS_ERROR, (unsigned)diag::Severity::Error, "'lifetimebound' attribute cannot be applied; %select{static |non-}0member function has no implicit object parameter", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_list_init_in_parens, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot initialize %select{non-class|reference}0 type %1 with a parenthesized initializer list", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_literal_operator_bad_param_count, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-template literal operator must have one or two parameters", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_literal_operator_default_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "literal operator cannot have a default argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -929,7 +952,10 @@
 DIAG(err_member_reference_needs_call, CLASS_ERROR, (unsigned)diag::Severity::Error, "base of member reference is a function; perhaps you meant to call it%select{| with no arguments}0?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mempointer_in_nonclass_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer refers into non-class type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_memptr_conv_via_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "conversion from pointer to member of class %0 to pointer to member of class %1 via virtual base %2 is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_memptr_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "member pointer has incomplete base type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_method_not_found_with_typo, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{instance|class}1 method %0 not found ; did you mean %2?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_code_seg_base, CLASS_ERROR, (unsigned)diag::Severity::Error, "derived class must specify the same code segment as its base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_mismatched_code_seg_override, CLASS_ERROR, (unsigned)diag::Severity::Error, "overriding virtual function must specify the same code segment as its overridden function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mismatched_exception_spec, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification in declaration does not match previous declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mismatched_exception_spec_explicit_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "exception specification in explicit instantiation does not match instantiated one", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mismatched_ms_inheritance, CLASS_ERROR, (unsigned)diag::Severity::Error, "inheritance model does not match %select{definition|previous declaration}0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -975,12 +1001,14 @@
 DIAG(err_multiple_mem_union_initialization, CLASS_ERROR, (unsigned)diag::Severity::Error, "initializing multiple members of union", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_multiversion_after_used, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration cannot become a multiversioned function after first usage", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function declaration has a different %select{calling convention|return type|constexpr specification|inline specification|storage class|linkage}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_multiversion_doesnt_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_doesnt_support, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioned functions do not yet support %select{function templates|virtual functions|deduced return types|constructors|destructors|deleted functions|defaulted functions|constexpr functions}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_duplicate, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function redeclarations require identical target attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_multiversion_no_other_attrs, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute 'target' multiversioning cannot be combined with other attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_no_other_attrs, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute '%select{target|cpu_specific|cpu_dispatch}0' multiversioning cannot be combined with other attributes", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_noproto, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioned function must have a prototype", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_not_allowed_on_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "'main' cannot be a multiversioned function", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_multiversion_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "function multiversioning is not supported on the current target", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_required_in_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration is missing %select{'target'|'cpu_specific' or 'cpu_dispatch'}0 attribute in a multiversioned function", 0, SFINAE_SubstitutionFailure, false, true, 0)
+DIAG(err_multiversion_types_mixed, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiversioning attributes cannot be combined", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_mutable_const, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' and 'const' cannot be mixed", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mutable_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' cannot be applied to functions", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_mutable_nonmember, CLASS_ERROR, (unsigned)diag::Severity::Error, "'mutable' can only be applied to member variables", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -999,7 +1027,7 @@
 DIAG(err_new_incomplete_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "allocation of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_accessor_for_property, CLASS_ERROR, (unsigned)diag::Severity::Error, "no %select{getter|setter}0 defined for property %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_base_classes, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid use of '__super', %0 has no base classes", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_no_dynamic_cast_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use dynamic_cast with -fno-rtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_dynamic_cast_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of dynamic_cast requires -frtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_matching_local_friend, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function found in local scope", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_matching_local_friend_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no matching function %0 found in local scope; did you mean %3?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "no member named %0 in %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1013,7 +1041,7 @@
 DIAG(err_no_super_class_message, CLASS_ERROR, (unsigned)diag::Severity::Error, "no @interface declaration found in class messaging of %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_no_template_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "no template named %0; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_no_typeid_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot use typeid with -fno-rtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_no_typeid_with_fno_rtti, CLASS_ERROR, (unsigned)diag::Severity::Error, "use of typeid requires -frtti", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_noexcept_needs_constant_expression, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to noexcept specifier must be a constant expression", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_nogetter_property_compound_assignment, CLASS_ERROR, (unsigned)diag::Severity::Error, "a getter method is needed to perform a compound assignment on a property", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_nogetter_property_incdec, CLASS_ERROR, (unsigned)diag::Severity::Error, "no getter method %1 for %select{increment|decrement}0 of property", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1304,7 +1332,7 @@
 DIAG(err_opencl_invalid_read_write, CLASS_ERROR, (unsigned)diag::Severity::Error, "access qualifier %0 can not be used for %1 %select{|prior to OpenCL version 2.0}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_invalid_return, CLASS_ERROR, (unsigned)diag::Severity::Error, "declaring function return value of type %0 is not allowed %select{; did you forget * ?|}1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_invalid_type_array, CLASS_ERROR, (unsigned)diag::Severity::Error, "array of %0 type is invalid in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_opencl_kernel_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can only be applied to a kernel function", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_kernel_attr, CLASS_ERROR, (unsigned)diag::Severity::Error, "attribute %0 can only be applied to an OpenCL kernel function", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_multiple_access_qualifiers, CLASS_ERROR, (unsigned)diag::Severity::Error, "multiple access qualifiers", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_no_main, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{function|kernel}0 cannot be called 'main'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_nonconst_global_sampler, CLASS_ERROR, (unsigned)diag::Severity::Error, "global sampler requires a const or constant address space qualifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1318,7 +1346,7 @@
 DIAG(err_opencl_ternary_with_block, CLASS_ERROR, (unsigned)diag::Severity::Error, "block type cannot be used as expression in ternary expression in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_type_can_only_be_used_as_function_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "type %0 can only be used as a function parameter in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_type_struct_or_union_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "the %0 type cannot be used to declare a structure or union field", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_opencl_unknown_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL version %0 does not support the '%1' %select{type qualifier|storage class specifier}2", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_opencl_unknown_type_specifier, CLASS_ERROR, (unsigned)diag::Severity::Error, "OpenCL %select{C|C++}0 version %1 does not support the '%2' %select{type qualifier|storage class specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_variadic_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid prototype, variadic arguments are not allowed in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_opencl_vla, CLASS_ERROR, (unsigned)diag::Severity::Error, "variable length arrays are not supported in OpenCL", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_openmp_default_simd_align_expr, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid application of '__builtin_omp_required_simd_align' to an expression, only type is allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1376,11 +1404,12 @@
 DIAG(err_ovl_no_viable_oper, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable overloaded '%0'", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_no_viable_subscript, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable overloaded operator[] for type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ovl_static_nonstatic_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "static and non-static member functions with the same parameter types cannot be overloaded", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_ovl_unresolvable, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to overloaded function could not be resolved; did you mean to call it%select{| with no arguments}0?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_ovl_unresolvable, CLASS_ERROR, (unsigned)diag::Severity::Error, "reference to %select{overloaded|multiversioned}1 function could not be resolved; did you mean to call it%select{| with no arguments}0?", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ownership_returns_index_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "'ownership_returns' attribute index does not match; here it is %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_ownership_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute only applies to %select{pointer|integer}1 arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_pack_expansion_length_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter packs %0 and %1 that have different lengths (%2 vs. %3)", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_pack_expansion_length_conflict_multilevel, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter pack %0 that has a different length (%1 vs. %2) from outer parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_pack_expansion_length_conflict_partial, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion contains parameter pack %0 that has a different length (at least %1 vs. %2) from outer parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_pack_expansion_member_init, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion for initialization of member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_pack_expansion_without_parameter_packs, CLASS_ERROR, (unsigned)diag::Severity::Error, "pack expansion does not contain any unexpanded parameter packs", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_param_default_argument, CLASS_ERROR, (unsigned)diag::Severity::Error, "C does not support default arguments", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1526,6 +1555,7 @@
 DIAG(err_sizeof_nonfragile_interface, CLASS_ERROR, (unsigned)diag::Severity::Error, "application of '%select{alignof|sizeof}1' to interface %0 is not supported on this architecture and platform", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_sizeof_pack_no_pack_name, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to the name of a parameter pack", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_sizeof_pack_no_pack_name_suggest, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 does not refer to the name of a parameter pack; did you mean %1?", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_spaceship_argument_narrowing, CLASS_ERROR, (unsigned)diag::Severity::Error, "argument to 'operator<=>' %select{cannot be narrowed from type %1 to %2|evaluates to %1, which cannot be narrowed to type %2}0", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_spec_member_not_instantiated, CLASS_ERROR, (unsigned)diag::Severity::Error, "specialization of member %q0 does not specialize an instantiated member", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_specialization_after_instantiation, CLASS_ERROR, (unsigned)diag::Severity::Error, "explicit specialization of %0 after instantiation", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_specialization_not_primary_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot reference member of primary template because deduced class template specialization %0 is %select{instantiated from a partial|an explicit}1 specialization", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1548,6 +1578,7 @@
 DIAG(err_static_out_of_line, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' can only be specified inside the class definition", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_static_overrides_virtual, CLASS_ERROR, (unsigned)diag::Severity::Error, "'static' member function %0 overrides a virtual function in a base class", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_statically_allocated_object, CLASS_ERROR, (unsigned)diag::Severity::Error, "interface type cannot be statically allocated", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_std_compare_type_not_supported, CLASS_ERROR, (unsigned)diag::Severity::Error, "standard library implementation of %0 is not supported; %select{member '%2' does not have expected form|member '%2' is missing|the type is not trivially copyable|the type does not have the expected form}1", 0, SFINAE_SubstitutionFailure, false, true, 0)
 DIAG(err_std_type_trait_not_class_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "unsupported standard library implementation: 'std::%0' is not a class template", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_stmt_attribute_invalid_on_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%0 attribute cannot be applied to a declaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_storage_class_for_static_member, CLASS_ERROR, (unsigned)diag::Severity::Error, "static data member definition cannot specify a storage class", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1577,11 +1608,10 @@
 DIAG(err_tag_reference_conflict, CLASS_ERROR, (unsigned)diag::Severity::Error, "implicit declaration introduced by elaborated type conflicts with a %select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}0 of the same name", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_tag_reference_non_tag, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{non-struct type|non-class type|non-union type|non-enum type|typedef|type alias|template|type alias template|template template argument}1 %0 cannot be referenced with a %select{struct|interface|union|class|enum}2 specifier", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_tagless_friend_type_template, CLASS_ERROR, (unsigned)diag::Severity::Error, "friend type templates must use an elaborated type", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_target_required_in_redecl, CLASS_ERROR, (unsigned)diag::Severity::Error, "function declaration is missing 'target' attribute in a multiversioned function", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(err_temp_copy_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous constructor call when %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_temp_copy_deleted, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_ambiguous, CLASS_ERROR, (unsigned)diag::Severity::Error, "ambiguous constructor call when %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_deleted, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1 invokes deleted constructor", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_temp_copy_incomplete, CLASS_ERROR, (unsigned)diag::Severity::Error, "copying a temporary object of incomplete type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_temp_copy_no_viable, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable constructor %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
+DIAG(err_temp_copy_no_viable, CLASS_ERROR, (unsigned)diag::Severity::Error, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_arg_address_of_non_pointer, CLASS_ERROR, (unsigned)diag::Severity::Error, "address taken in non-type template argument for template parameter of reference type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_arg_deduced_incomplete_pack, CLASS_ERROR, (unsigned)diag::Severity::Error, "deduced incomplete pack %0 for template parameter %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_arg_field, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to non-static data member %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1611,7 +1641,6 @@
 DIAG(err_template_arg_thread_local, CLASS_ERROR, (unsigned)diag::Severity::Error, "non-type template argument refers to thread-local object", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_arg_untyped_null_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "null non-type template argument must be cast to template parameter type %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_arg_wrongtype_null_constant, CLASS_ERROR, (unsigned)diag::Severity::Error, "null non-type template argument of type %0 does not match template parameter of type %1", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(err_template_decl_ref, CLASS_ERROR, (unsigned)diag::Severity::Error, "cannot refer to %select{class|variable}0 template %1 without a template argument list", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_different_associated_constraints, CLASS_ERROR, (unsigned)diag::Severity::Error, "associated constraints differ in template redeclaration", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_id_not_a_type, CLASS_ERROR, (unsigned)diag::Severity::Error, "template name refers to non-type template %0", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_template_inside_local_class, CLASS_ERROR, (unsigned)diag::Severity::Error, "templates cannot be declared inside of a local class", 0, SFINAE_SubstitutionFailure, false, true, 2)
@@ -1903,211 +1932,214 @@
 DIAG(err_x86_builtin_invalid_rounding, CLASS_ERROR, (unsigned)diag::Severity::Error, "invalid rounding argument", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(err_x86_builtin_invalid_scale, CLASS_ERROR, (unsigned)diag::Severity::Error, "scale argument must be 1, 2, 4, or 8", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(error_inoutput_conflict_with_clobber, CLASS_ERROR, (unsigned)diag::Severity::Error, "asm-specifier for input or output variable conflicts with asm clobber list", 0, SFINAE_SubstitutionFailure, false, true, 0)
-DIAG(ext_aggregate_init_not_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initializer for aggregate is not a compile-time constant", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_record_with_anonymous_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous types declared in an anonymous %select{struct|union}0 are an extension", 410, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_record_with_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "types declared in an anonymous %select{struct|union}0 are a Microsoft extension", 350, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_struct_union_qualified, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous %select{struct|union}0 cannot be '%1'", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_anonymous_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous unions are a C11 extension", 110, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_init_copy, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", 243, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_init_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "parenthesized initialization of a member array is a GNU extension", 238, SFINAE_Suppress, false, false, 2)
-DIAG(ext_array_size_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_auto_new_list_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' type specifier is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_c11_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a C11 extension", 110, SFINAE_Suppress, false, false, 2)
-DIAG(ext_c99_array_usage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_c99_flexible_array_member, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array members are a C99 feature", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cannot_use_trivial_abi, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'trivial_abi' cannot be applied to %0", 265, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is an extension", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cce_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", 81, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_complex_component_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex initialization specifying real and imaginary components is an extension", 125, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_body_invalid_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_body_multiple_return, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multiple return statements in constexpr function is a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_function_never_constant_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}0 never produces a constant expression", 315, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_local_var, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_constexpr_type_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type definition in a constexpr %select{function|constructor}0 is a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cxx14_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_cxx17_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++17 extension", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_decomp_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declarations are a C++17 extension", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_decomp_decl_cond, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not permit structured binding declaration in a condition", 56, SFINAE_Suppress, false, false, 2)
-DIAG(ext_default_init_const, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", 354, SFINAE_Suppress, false, false, 2)
-DIAG(ext_delete_void_ptr_operand, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "cannot delete expression with pointer-to-'void' type %0", 151, SFINAE_Suppress, false, false, 2)
-DIAG(ext_deprecated_string_literal_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 does not allow conversion from string literal to %0", 719, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_designated_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "designated initializers are a C99 feature", 112, SFINAE_Suppress, false, false, 2)
-DIAG(ext_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 181, SFINAE_Suppress, false, false, 2)
-DIAG(ext_dynamic_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow dynamic exception specifications", 187, SFINAE_Suppress, false, false, 2)
-DIAG(ext_empty_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty %select{struct|union}0 is a GNU extension", 247, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "befriending enumeration type %0 is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "enumeration values exceed range of largest integer", 198, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enum_value_not_int, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C restricts enumerator values to range of 'int' (%0 is too %select{small|large}1)", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enumerator_increment_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incremented enumerator value %0 is not representable in the largest integer type", 198, SFINAE_Suppress, false, false, 2)
-DIAG(ext_enumerator_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumerator value is not representable in the underlying type %0", 359, SFINAE_Suppress, false, false, 2)
-DIAG(ext_equals_this_lambda_capture_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit capture of 'this' with a capture default of '=' is a C++2a extension", 96, SFINAE_Suppress, false, false, 3)
-DIAG(ext_equivalent_internal_linkage_decl_in_modules, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ambiguous use of internal linkage declaration %0 defined in multiple modules", 401, SFINAE_Suppress, false, false, 13)
+DIAG(ext_aggregate_init_not_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initializer for aggregate is not a compile-time constant", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_anonymous_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous types declared in an anonymous %select{struct|union}0 are an extension", 418, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_record_with_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "types declared in an anonymous %select{struct|union}0 are a Microsoft extension", 358, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_struct_union_qualified, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous %select{struct|union}0 cannot be '%1'", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_anonymous_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous unions are a C11 extension", 111, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_copy, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "initialization of an array %diff{of type $ from a compound literal of type $|from a compound literal}0,1 is a GNU extension", 249, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_init_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "parenthesized initialization of a member array is a GNU extension", 244, SFINAE_Suppress, false, false, 2)
+DIAG(ext_array_size_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_new_list_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ standards before C++17 do not allow new expression for type %0 to use list-initialization", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_auto_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'auto' type specifier is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_bad_cxx_cast_qualifiers_away_incoherent, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow %select{const_cast|static_cast|reinterpret_cast|dynamic_cast|C-style cast|functional-style cast}0 from %1 to %2 because it casts away qualifiers, even though the source and destination types are unrelated", 118, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_c11_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a C11 extension", 111, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_array_usage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{qualifier in |static |}0array size %select{||'[*] '}0is a C99 feature", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_c99_flexible_array_member, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array members are a C99 feature", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cannot_use_trivial_abi, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'trivial_abi' cannot be applied to %0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is an extension", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cce_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{case value|enumerator value|non-type template argument|array size|constexpr if condition}0 %select{cannot be narrowed from type %2 to %3|evaluates to %2, which cannot be narrowed to type %3}1", 82, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_complex_component_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex initialization specifying real and imaginary components is an extension", 127, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_invalid_stmt, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of this statement in a constexpr %select{function|constructor}0 is a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_body_multiple_return, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "multiple return statements in constexpr function is a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_function_never_constant_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constexpr %select{function|constructor}0 never produces a constant expression", 322, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_local_var, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable declaration in a constexpr %select{function|constructor}0 is a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_constexpr_type_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type definition in a constexpr %select{function|constructor}0 is a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx14_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_cxx17_attr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "use of the %0 attribute is a C++17 extension", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "decomposition declarations are a C++17 extension", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_decomp_decl_cond, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++17 does not permit structured binding declaration in a condition", 57, SFINAE_Suppress, false, false, 2)
+DIAG(ext_default_init_const, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default initialization of an object of const type %0%select{| without a user-provided default constructor}1 is a Microsoft extension", 362, SFINAE_Suppress, false, false, 2)
+DIAG(ext_delete_void_ptr_operand, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "cannot delete expression with pointer-to-'void' type %0", 154, SFINAE_Suppress, false, false, 2)
+DIAG(ext_deprecated_string_literal_conversion, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++11 does not allow conversion from string literal to %0", 736, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_designated_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "designated initializers are a C99 feature", 113, SFINAE_Suppress, false, false, 2)
+DIAG(ext_duplicate_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 185, SFINAE_Suppress, false, false, 2)
+DIAG(ext_dynamic_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow dynamic exception specifications", 191, SFINAE_Suppress, false, false, 2)
+DIAG(ext_empty_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "empty %select{struct|union}0 is a GNU extension", 253, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "befriending enumeration type %0 is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "enumeration values exceed range of largest integer", 202, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enum_value_not_int, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C restricts enumerator values to range of 'int' (%0 is too %select{small|large}1)", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_increment_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incremented enumerator value %0 is not representable in the largest integer type", 202, SFINAE_Suppress, false, false, 2)
+DIAG(ext_enumerator_too_large, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "enumerator value is not representable in the underlying type %0", 367, SFINAE_Suppress, false, false, 2)
+DIAG(ext_equals_this_lambda_capture_cxx2a, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit capture of 'this' with a capture default of '=' is a C++2a extension", 97, SFINAE_Suppress, false, false, 3)
+DIAG(ext_equivalent_internal_linkage_decl_in_modules, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ambiguous use of internal linkage declaration %0 defined in multiple modules", 409, SFINAE_Suppress, false, false, 13)
 DIAG(ext_excess_initializers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in %select{array|vector|scalar|union|struct}0 initializer", 0, SFINAE_Suppress, false, false, 2)
 DIAG(ext_excess_initializers_in_char_array_initializer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "excess elements in char array initializer", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_conversion_functions, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit conversion functions are a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_instantiation_duplicate, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate explicit instantiation of %0 ignored as a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_explicit_instantiation_without_qualified_id, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", 500, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_conversion_functions, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit conversion functions are a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_duplicate, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "duplicate explicit instantiation of %0 ignored as a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_explicit_instantiation_without_qualified_id, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "qualifier in explicit instantiation of %q0 requires a template-id (a typedef is not permitted)", 510, SFINAE_Suppress, false, false, 2)
 DIAG(ext_explicit_specialization_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit specialization cannot have a storage class", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_expr_not_ice, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", 250, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_empty_aggregate_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", 247, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_empty_aggregate_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", 365, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_in_array, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be used as an array element due to flexible array member", 213, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be nested in a struct due to flexible array member", 213, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array initialization is a GNU extension", 248, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_union_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a GNU extension", 249, SFINAE_Suppress, false, false, 2)
-DIAG(ext_flexible_array_union_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a Microsoft extension", 365, SFINAE_Suppress, false, false, 2)
-DIAG(ext_for_range_begin_end_types_differ, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'begin' and 'end' returning different types (%0 and %1) is a C++17 extension", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids forward references to 'enum' types", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_forward_ref_enum_def, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaration of already-defined enum %0 is a GNU extension", 254, SFINAE_Suppress, false, false, 2)
-DIAG(ext_found_via_dependent_bases_lookup, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of identifier %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_freestanding_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex numbers are an extension in a freestanding C99 implementation", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_friend_tag_redecl_outside_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", 375, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a GNU extension", 237, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_ptr_func_arith, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", 503, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_subscript_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "subscript of a pointer to void is a GNU extension", 503, SFINAE_Suppress, false, false, 2)
-DIAG(ext_gnu_void_ptr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", 503, SFINAE_Suppress, false, false, 2)
-DIAG(ext_goto_into_protected_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "jump from this goto statement to its label is a Microsoft extension", 366, SFINAE_Suppress, false, false, 2)
-DIAG(ext_imaginary_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "imaginary constants are a GNU extension", 251, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_exception_spec_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", 274, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit declaration of function %0 is invalid in %select{C99|OpenCL}1", 277, SFINAE_Suppress, false, false, 2)
-DIAG(ext_implicit_lib_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicitly declaring library function '%0' with type %1", 277, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_float_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initializer for static data member of type %0 is a GNU extension", 256, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_float_type_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 584, SFINAE_Suppress, false, false, 2)
-DIAG(ext_in_class_initializer_non_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", 250, SFINAE_Suppress, false, false, 2)
-DIAG(ext_incomplete_in_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 360, SFINAE_Suppress, false, false, 2)
-DIAG(ext_increment_bool, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow incrementing expression of type bool", 300, SFINAE_Suppress, false, false, 2)
-DIAG(ext_init_capture, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda captures are a C++14 extension", 85, SFINAE_Suppress, false, false, 3)
-DIAG(ext_init_list_constant_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constant expression evaluates to %0 which cannot be narrowed to type %1", 81, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_init_list_type_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "type %0 cannot be narrowed to %1 in initializer list", 81, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_init_list_variable_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", 81, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_expr_not_ice, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "expression is not an %select{integer|integral}0 constant expression; folding it to a constant is a GNU extension", 256, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a GNU extension", 253, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_empty_aggregate_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in otherwise empty %select{struct|interface|union|class|enum}1 is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_array, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be used as an array element due to flexible array member", 217, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%0 may not be nested in a struct due to flexible array member", 217, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_init, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array initialization is a GNU extension", 254, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_gnu, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a GNU extension", 255, SFINAE_Suppress, false, false, 2)
+DIAG(ext_flexible_array_union_ms, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "flexible array member %0 in a union is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
+DIAG(ext_for_range_begin_end_types_differ, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'begin' and 'end' returning different types (%0 and %1) is a C++17 extension", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids forward references to 'enum' types", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_forward_ref_enum_def, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaration of already-defined enum %0 is a GNU extension", 260, SFINAE_Suppress, false, false, 2)
+DIAG(ext_found_via_dependent_bases_lookup, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of identifier %0 found via unqualified lookup into dependent bases of class templates is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_freestanding_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex numbers are an extension in a freestanding C99 implementation", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_friend_tag_redecl_outside_namespace, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unqualified friend declaration referring to type outside of the nearest enclosing namespace is a Microsoft extension; add a nested name specifier", 383, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_anonymous_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "anonymous structs are a GNU extension", 243, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_ptr_func_arith, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to%select{ the|}2 function type%select{|s}2 %1%select{| and %3}2 is a GNU extension", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_subscript_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "subscript of a pointer to void is a GNU extension", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_gnu_void_ptr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "arithmetic on%select{ a|}0 pointer%select{|s}0 to void is a GNU extension", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_goto_into_protected_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "jump from this goto statement to its label is a Microsoft extension", 374, SFINAE_Suppress, false, false, 2)
+DIAG(ext_imaginary_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "imaginary constants are a GNU extension", 257, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_exception_spec_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function previously declared with an %select{explicit|implicit}0 exception specification redeclared with an %select{implicit|explicit}0 exception specification", 280, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit declaration of function %0 is invalid in %select{C99|OpenCL}1", 283, SFINAE_Suppress, false, false, 2)
+DIAG(ext_implicit_lib_function_decl, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicitly declaring library function '%0' with type %1", 283, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "in-class initializer for static data member of type %0 is a GNU extension", 262, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_float_type_cxx11, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "in-class initializer for static data member of type %0 requires 'constexpr' specifier", 597, SFINAE_Suppress, false, false, 2)
+DIAG(ext_in_class_initializer_non_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "in-class initializer for static data member is not a constant expression; folding it to a constant is a GNU extension", 256, SFINAE_Suppress, false, false, 2)
+DIAG(ext_incomplete_in_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{|pointer to |reference to }0incomplete type %1 is not allowed in exception specification", 368, SFINAE_Suppress, false, false, 2)
+DIAG(ext_increment_bool, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow incrementing expression of type bool", 307, SFINAE_Suppress, false, false, 2)
+DIAG(ext_init_capture, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialized lambda captures are a C++14 extension", 86, SFINAE_Suppress, false, false, 3)
+DIAG(ext_init_list_constant_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "constant expression evaluates to %0 which cannot be narrowed to type %1", 82, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_type_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "type %0 cannot be narrowed to %1 in initializer list", 82, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_init_list_variable_narrowing, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list", 82, SFINAE_SubstitutionFailure, false, false, 2)
 DIAG(ext_initializer_string_for_char_array_too_long, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initializer-string for char array is too long", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_inline_variable, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline variables are a C++17 extension", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_complement_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '~' for complex conjugation of %0", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex integer types are a GNU extension", 242, SFINAE_Suppress, false, false, 2)
-DIAG(ext_integer_increment_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '++'/'--' on complex integer type %0", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_internal_in_extern_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 585, SFINAE_Suppress, false, false, 2)
-DIAG(ext_internal_in_extern_inline_quiet, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 585, SFINAE_Suppress, false, false, 2)
-DIAG(ext_invalid_sign_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'%0' cannot be signed or unsigned", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_main_returns_nonint, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "return type of 'main' is not 'int'", 343, SFINAE_Suppress, false, false, 2)
-DIAG(ext_main_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ does not allow 'main' to be used by a program", 342, SFINAE_Suppress, false, false, 2)
-DIAG(ext_many_braces_around_scalar_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "too many braces around scalar initializer", 345, SFINAE_Suppress, false, false, 2)
-DIAG(ext_member_redeclared, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "class member cannot be redeclared", 531, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mismatched_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in declaration does not match previous declaration", 360, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mismatched_exception_spec_explicit_instantiation, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in explicit instantiation does not match instantiated one", 360, SFINAE_Suppress, false, false, 2)
+DIAG(ext_inline_variable, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "inline variables are a C++17 extension", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complement_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '~' for complex conjugation of %0", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "complex integer types are a GNU extension", 248, SFINAE_Suppress, false, false, 2)
+DIAG(ext_integer_increment_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C does not support '++'/'--' on complex integer type %0", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 598, SFINAE_Suppress, false, false, 2)
+DIAG(ext_internal_in_extern_inline_quiet, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "static %select{function|variable}0 %1 is used in an inline function with external linkage", 598, SFINAE_Suppress, false, false, 2)
+DIAG(ext_invalid_sign_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "'%0' cannot be signed or unsigned", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_returns_nonint, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "return type of 'main' is not 'int'", 350, SFINAE_Suppress, false, false, 2)
+DIAG(ext_main_used, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ does not allow 'main' to be used by a program", 349, SFINAE_Suppress, false, false, 2)
+DIAG(ext_many_braces_around_scalar_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "too many braces around scalar initializer", 352, SFINAE_Suppress, false, false, 2)
+DIAG(ext_member_redeclared, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "class member cannot be redeclared", 542, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in declaration does not match previous declaration", 368, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mismatched_exception_spec_explicit_instantiation, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification in explicit instantiation does not match instantiated one", 368, SFINAE_Suppress, false, false, 2)
 DIAG(ext_missing_declspec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration specifier missing, defaulting to 'int'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 384, SFINAE_Suppress, false, false, 2)
-DIAG(ext_missing_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type specifier missing, defaults to 'int'", 278, SFINAE_Suppress, false, false, 2)
-DIAG(ext_mixed_decls_code, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 forbids mixing declarations and code", 149, SFINAE_Suppress, false, false, 2)
-DIAG(ext_module_import_in_extern_c, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "import of C++ module '%0' appears within extern \"C\" language linkage specification", 400, SFINAE_Suppress, false, false, 13)
-DIAG(ext_module_import_not_at_top_level_noop, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "redundant #include of module '%0' appears within %1", 402, SFINAE_Suppress, false, false, 13)
-DIAG(ext_ms_ambiguous_direct_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "accessing inaccessible direct base %0 of %1 is a Microsoft extension", 367, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_anonymous_record, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "anonymous %select{structs|unions}0 are a Microsoft extension", 350, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", 351, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_delayed_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using the undeclared type %0 as a default template argument is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_deref_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument containing a dereference operation is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_explicit_constructor_call, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit constructor calls are a Microsoft extension", 362, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "forward references to 'enum' types are a Microsoft extension", 358, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_impcast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", 351, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 360, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_template_spec_redecl_out_of_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_template_type_arg_missing_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument for template type parameter must be a type; omitted 'typename' is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_ms_using_declaration_inaccessible, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using declaration referring to inaccessible member '%0' (which refers to accessible member '%1') is a Microsoft compatibility extension", 376, SFINAE_AccessControl, false, false, 2)
-DIAG(ext_mutable_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'mutable' on a reference type is a Microsoft extension", 369, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nested_name_member_ref_lookup_ambiguous, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "lookup of %0 in member access expression is ambiguous; using member of %1", 22, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nested_name_spec_is_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of enumeration in a nested name specifier is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nested_pointer_qualifier_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types", 291, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 392, SFINAE_Suppress, false, false, 2)
+DIAG(ext_missing_type_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "type specifier missing, defaults to 'int'", 284, SFINAE_Suppress, false, false, 2)
+DIAG(ext_mixed_decls_code, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 forbids mixing declarations and code", 152, SFINAE_Suppress, false, false, 2)
+DIAG(ext_module_import_in_extern_c, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "import of C++ module '%0' appears within extern \"C\" language linkage specification", 408, SFINAE_Suppress, false, false, 13)
+DIAG(ext_module_import_not_at_top_level_noop, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "redundant #include of module '%0' appears within %1", 410, SFINAE_Suppress, false, false, 13)
+DIAG(ext_ms_ambiguous_direct_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "accessing inaccessible direct base %0 of %1 is a Microsoft extension", 375, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_anonymous_record, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "anonymous %select{structs|unions}0 are a Microsoft extension", 358, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_cast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_cast between pointer-to-function and pointer-to-object is a Microsoft extension", 359, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_delayed_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using the undeclared type %0 as a default template argument is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_deref_template_argument, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument containing a dereference operation is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_explicit_constructor_call, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "explicit constructor calls are a Microsoft extension", 370, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_forward_ref_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "forward references to 'enum' types are a Microsoft extension", 366, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_impcast_fn_obj, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "implicit conversion between pointer-to-function and pointer-to-object is a Microsoft extension", 359, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_missing_exception_specification, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%0 is missing exception specification '%1'", 368, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_spec_redecl_out_of_scope, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{class template|class template partial|variable template|variable template partial|function template|member function|static data member|member class|member enumeration}0 specialization of %1 not in %select{a namespace enclosing %2|class %2 or an enclosing namespace}3 is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_template_type_arg_missing_typename, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument for template type parameter must be a type; omitted 'typename' is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_ms_using_declaration_inaccessible, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using declaration referring to inaccessible member '%0' (which refers to accessible member '%1') is a Microsoft compatibility extension", 384, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_mutable_reference, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'mutable' on a reference type is a Microsoft extension", 377, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_name_member_ref_lookup_ambiguous, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "lookup of %0 in member access expression is ambiguous; using member of %1", 20, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_name_spec_is_enum, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of enumeration in a nested name specifier is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nested_pointer_qualifier_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers in nested pointer types", 297, SFINAE_Suppress, false, false, 2)
 DIAG(ext_new_paren_array_nonconst, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "when type is in parentheses, array cannot have dynamic size", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_no_declarators, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration does not declare anything", 383, SFINAE_Suppress, false, false, 2)
-DIAG(ext_no_named_members_in_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{struct|union}0 without named members is a GNU extension", 247, SFINAE_Suppress, false, false, 2)
-DIAG(ext_nonclass_type_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-class friend type %0 is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_noreturn_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared _Noreturn", 342, SFINAE_Suppress, false, false, 2)
-DIAG(ext_offsetof_non_pod_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-POD type %0", 320, SFINAE_Suppress, false, false, 2)
-DIAG(ext_offsetof_non_standardlayout_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-standard-layout type %0", 320, SFINAE_Suppress, false, false, 2)
-DIAG(ext_omp_loop_not_canonical_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 477, SFINAE_Suppress, false, false, 11)
-DIAG(ext_opencl_ext_vector_type_rgba_selector, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "vector component name '%0' is an OpenCL version 2.2 feature", 475, SFINAE_Suppress, false, false, 2)
-DIAG(ext_operator_new_delete_declared_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "replacement function %0 cannot be declared 'inline'", 307, SFINAE_Suppress, false, false, 2)
-DIAG(ext_out_of_line_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "out-of-line declaration of a member must be a definition", 480, SFINAE_Suppress, false, false, 2)
-DIAG(ext_out_of_line_qualified_id_type_names_constructor, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{'typename'|'template'}2 keyword", 304, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_override_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification of overriding function is more lax than base version", 360, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_default_argument_redefinition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of default argument", 356, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_not_declared, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "parameter %0 was not declared, defaulting to type 'int'", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_param_promoted_not_compatible_with_prototype, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", 330, SFINAE_Suppress, false, false, 2)
-DIAG(ext_partial_spec_not_more_specialized_than_primary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization is not more specialized than the primary template", 322, SFINAE_Suppress, false, false, 2)
-DIAG(ext_partial_specs_not_deducible, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", 680, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_declarators, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "declaration does not declare anything", 391, SFINAE_Suppress, false, false, 2)
+DIAG(ext_no_named_members_in_struct_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{struct|union}0 without named members is a GNU extension", 253, SFINAE_Suppress, false, false, 2)
+DIAG(ext_nonclass_type_friend, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-class friend type %0 is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_noreturn_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared _Noreturn", 349, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_pod_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-POD type %0", 327, SFINAE_Suppress, false, false, 2)
+DIAG(ext_offsetof_non_standardlayout_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "offset of on non-standard-layout type %0", 327, SFINAE_Suppress, false, false, 2)
+DIAG(ext_omp_loop_not_canonical_init, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "initialization clause of OpenMP for loop is not in canonical form ('var = init' or 'T var = init')", 486, SFINAE_Suppress, false, false, 11)
+DIAG(ext_opencl_ext_vector_type_rgba_selector, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "vector component name '%0' is an OpenCL version 2.2 feature", 484, SFINAE_Suppress, false, false, 2)
+DIAG(ext_operator_new_delete_declared_inline, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "replacement function %0 cannot be declared 'inline'", 314, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "out-of-line declaration of a member must be a definition", 490, SFINAE_Suppress, false, false, 2)
+DIAG(ext_out_of_line_qualified_id_type_names_constructor, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ specifies that qualified reference to %0 is a constructor name rather than a %select{template name|type}1 in this context, despite preceding %select{'typename'|'template'}2 keyword", 311, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_override_exception_spec, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "exception specification of overriding function is more lax than base version", 368, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_default_argument_redefinition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of default argument", 364, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_not_declared, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "parameter %0 was not declared, defaulting to type 'int'", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_param_promoted_not_compatible_with_prototype, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%diff{promoted type $ of K&R function parameter is not compatible with the parameter type $|promoted type of K&R function parameter is not compatible with parameter type}0,1 declared in a previous prototype", 337, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_spec_not_more_specialized_than_primary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization is not more specialized than the primary template", 329, SFINAE_Suppress, false, false, 2)
+DIAG(ext_partial_specs_not_deducible, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{class|variable}0 template partial specialization contains %select{a template parameter|template parameters}1 that cannot be deduced; this partial specialization will never be used", 697, SFINAE_Suppress, false, false, 2)
 DIAG(ext_plain_complex, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "plain '_Complex' requires a type specifier; assuming '_Complex double'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pointer_to_const_ref_member_on_rvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is a C++2a extension", 96, SFINAE_SubstitutionFailure, false, false, 2)
-DIAG(ext_predef_outside_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "predefined identifier is only valid inside function", 515, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pseudo_dtor_on_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pseudo-destructors on type void are a Microsoft extension", 377, SFINAE_Suppress, false, false, 2)
-DIAG(ext_pure_function_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function definition with pure-specifier is a Microsoft extension", 370, SFINAE_Suppress, false, false, 2)
-DIAG(ext_redefinition_of_typedef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of typedef %0 is a C11 feature", 637, SFINAE_Suppress, false, false, 2)
-DIAG(ext_register_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow 'register' storage class specifier", 535, SFINAE_Suppress, false, false, 2)
-DIAG(ext_retained_language_linkage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "friend function %0 retaining previous language linkage is an extension", 542, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_has_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 should not return a value", 544, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_has_void_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "void %select{function|method|block}1 %0 should not return void expression", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_return_missing_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 544, SFINAE_Suppress, false, false, 2)
-DIAG(ext_rvalue_to_reference_access_ctor, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", 55, SFINAE_AccessControl, false, false, 2)
-DIAG(ext_rvalue_to_reference_temp_copy_no_viable, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no viable constructor %select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", 55, SFINAE_Suppress, false, false, 2)
-DIAG(ext_sizeof_alignof_function_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step}0' to a function type", 503, SFINAE_Suppress, false, false, 2)
-DIAG(ext_sizeof_alignof_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step}0' to a void type", 503, SFINAE_Suppress, false, false, 2)
-DIAG(ext_standalone_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' is not permitted on a declaration of a type", 383, SFINAE_Suppress, false, false, 2)
-DIAG(ext_star_this_lambda_capture_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "capture of '*this' by copy is a C++17 extension", 89, SFINAE_Suppress, false, false, 3)
-DIAG(ext_static_assert_no_message, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_assert with no message is a C++17 extension", 89, SFINAE_Suppress, false, false, 2)
-DIAG(ext_static_data_member_in_union, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static data member %0 in union is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_static_non_static, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaring non-static %0 as static is a Microsoft extension", 371, SFINAE_Suppress, false, false, 2)
-DIAG(ext_string_literal_operator_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "string literal operator templates are a GNU extension", 257, SFINAE_Suppress, false, false, 2)
-DIAG(ext_subscript_non_lvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 does not allow subscripting non-lvalue array", 500, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pointer_to_const_ref_member_on_rvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is a C++2a extension", 97, SFINAE_SubstitutionFailure, false, false, 2)
+DIAG(ext_predef_outside_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "predefined identifier is only valid inside function", 525, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pseudo_dtor_on_void, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pseudo-destructors on type void are a Microsoft extension", 385, SFINAE_Suppress, false, false, 2)
+DIAG(ext_pure_function_definition, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "function definition with pure-specifier is a Microsoft extension", 378, SFINAE_Suppress, false, false, 2)
+DIAG(ext_redefinition_of_typedef, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "redefinition of typedef %0 is a C11 feature", 653, SFINAE_Suppress, false, false, 2)
+DIAG(ext_register_storage_class, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "ISO C++17 does not allow 'register' storage class specifier", 546, SFINAE_Suppress, false, false, 2)
+DIAG(ext_retained_language_linkage, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "friend function %0 retaining previous language linkage is an extension", 553, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "%select{void function|void method|constructor|destructor}1 %0 should not return a value", 557, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_has_void_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "void %select{function|method|block}1 %0 should not return void expression", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_return_missing_expr, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 557, SFINAE_Suppress, false, false, 2)
+DIAG(ext_rvalue_to_reference_access_ctor, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C++98 requires an accessible copy constructor for class %2 when binding a reference to a temporary; was %select{private|protected}0", 56, SFINAE_AccessControl, false, false, 2)
+DIAG(ext_rvalue_to_reference_temp_copy_no_viable, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "no viable constructor %select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}0 of type %1; C++98 requires a copy constructor when binding a reference to a temporary", 56, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_function_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step}0' to a function type", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_sizeof_alignof_void_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "invalid application of '%select{sizeof|alignof|vec_step}0' to a void type", 513, SFINAE_Suppress, false, false, 2)
+DIAG(ext_standalone_specifier, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'%0' is not permitted on a declaration of a type", 391, SFINAE_Suppress, false, false, 2)
+DIAG(ext_star_this_lambda_capture_cxx17, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "capture of '*this' by copy is a C++17 extension", 90, SFINAE_Suppress, false, false, 3)
+DIAG(ext_static_assert_no_message, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static_assert with no message is a C++17 extension", 90, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_data_member_in_union, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "static data member %0 in union is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_static_non_static, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "redeclaring non-static %0 as static is a Microsoft extension", 379, SFINAE_Suppress, false, false, 2)
+DIAG(ext_string_literal_operator_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "string literal operator templates are a GNU extension", 263, SFINAE_Suppress, false, false, 2)
+DIAG(ext_subscript_non_lvalue, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C90 does not allow subscripting non-lvalue array", 510, SFINAE_Suppress, false, false, 2)
 DIAG(ext_template_arg_extra_parens, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "address non-type template argument cannot be surrounded by parentheses", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_local_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses local type %0", 336, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_object_internal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_arg_unnamed_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses unnamed type", 663, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'template' keyword outside of a template", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_template_parameter_default_in_function_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default template arguments for a function template are a C++11 extension", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_addrof_temporary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "taking the address of a temporary object of type %0", 14, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_addrof_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids taking the address of an expression of type 'void'", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_base_super, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", 608, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cast_nonscalar, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids casting nonscalar type %0 to the same type", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cast_to_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast to union type is a GNU extension", 258, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_comparison_of_distinct_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 124, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_comparison_of_fptr_to_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "equality comparison between function pointer and void pointer (%0 and %1)", 500, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_local_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses local type %0", 343, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_object_internal, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_arg_unnamed_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "template argument uses unnamed type", 679, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'template' keyword outside of a template", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_template_parameter_default_in_function_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "default template arguments for a function template are a C++11 extension", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_addrof_temporary, CLASS_EXTENSION, (unsigned)diag::Severity::Error, "taking the address of a temporary object of type %0", 13, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_addrof_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C forbids taking the address of an expression of type 'void'", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_base_super, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter type %diff{$ does not match super class method parameter type $|does not match super class method parameter type}0,1", 622, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_nonscalar, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids casting nonscalar type %0 to the same type", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cast_to_union, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "cast to union type is a GNU extension", 264, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_distinct_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison of distinct pointer types%diff{ ($ and $)|}0,1", 126, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_comparison_of_fptr_to_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "equality comparison between function pointer and void pointer (%0 and %1)", 510, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "comparison between pointer and integer (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_cond_incompatible_operands, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible operand types (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_incompatible_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer type mismatch%diff{ ($ and $)|}0,1", 507, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_one_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids conditional expressions with only one void side", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_cond_pointer_integer_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", 126, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_discards_qualifiers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers", 291, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_function_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 287, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 290, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_incompatible_pointer_sign, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign", 505, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_convert_int_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 309, SFINAE_Suppress, false, false, 24)
-DIAG(ext_typecheck_convert_pointer_int, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 309, SFINAE_Suppress, false, false, 24)
-DIAG(ext_typecheck_convert_pointer_void_func, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer", 500, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_decl_incomplete_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "tentative definition of variable with internal linkage has incomplete non-array type %0", 625, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_indirection_through_void_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow indirection on operand of type %0", 715, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_ordered_comparison_of_function_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison of function pointers (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ordered comparison between pointer and zero (%0 and %1) is an extension", 500, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_incompatible_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer type mismatch%diff{ ($ and $)|}0,1", 517, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_one_void, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "C99 forbids conditional expressions with only one void side", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_cond_pointer_integer_mismatch, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "pointer/integer type mismatch in conditional expression%diff{ ($ and $)|}0,1", 128, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_discards_qualifiers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 discards qualifiers", 297, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_function_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible function pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 293, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 296, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_incompatible_pointer_sign, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between pointers to integer types with different sign", 515, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_convert_int_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible integer to pointer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 316, SFINAE_Suppress, false, false, 24)
+DIAG(ext_typecheck_convert_pointer_int, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "incompatible pointer to integer conversion %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2%select{|; dereference with *|; take the address with &|; remove *|; remove &}3", 316, SFINAE_Suppress, false, false, 24)
+DIAG(ext_typecheck_convert_pointer_void_func, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "%select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2 converts between void pointer and function pointer", 510, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_decl_incomplete_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "tentative definition of variable with internal linkage has incomplete non-array type %0", 641, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_indirection_through_void_pointer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ISO C++ does not allow indirection on operand of type %0", 732, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_function_pointers, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison of function pointers (%0 and %1)", 489, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_ordered_comparison_of_pointer_and_zero, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ordered comparison between pointer and zero (%0 and %1) is an extension", 510, SFINAE_Suppress, false, false, 2)
 DIAG(ext_typecheck_ordered_comparison_of_pointer_integer, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "ordered comparison between pointer and integer (%0 and %1)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typecheck_zero_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "zero size arrays are an extension", 722, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typedef_without_a_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "typedef requires a name", 383, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typename_missing, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing 'typename' prior to dependent type name '%0%1'", 638, SFINAE_Suppress, false, false, 2)
-DIAG(ext_typename_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'typename' occurs outside of a template", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_undeclared_unqual_id_with_dependent_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", 373, SFINAE_Suppress, false, false, 2)
-DIAG(ext_undefined_internal_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", 647, SFINAE_Suppress, false, false, 2)
-DIAG(ext_unelaborated_friend_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unelaborated friend declaration is a C++11 extension; specify '%select{struct|interface|union|class|enum}0' to befriend %1", 77, SFINAE_Suppress, false, false, 2)
-DIAG(ext_union_member_of_reference_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "union member %0 has reference type %1, which is a Microsoft extension", 374, SFINAE_Suppress, false, false, 2)
-DIAG(ext_use_out_of_scope_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", 481, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typecheck_zero_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "zero size arrays are an extension", 739, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typedef_without_a_name, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "typedef requires a name", 391, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_missing, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "missing 'typename' prior to dependent type name '%0%1'", 654, SFINAE_Suppress, false, false, 2)
+DIAG(ext_typename_outside_of_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'typename' occurs outside of a template", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undeclared_unqual_id_with_dependent_base, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of undeclared identifier %0; unqualified lookup into dependent bases of class template %1 is a Microsoft extension", 381, SFINAE_Suppress, false, false, 2)
+DIAG(ext_undefined_internal_type, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "ISO C++ requires a definition in this translation unit for %select{function|variable}0 %q1 because its type does not have linkage", 663, SFINAE_Suppress, false, false, 2)
+DIAG(ext_unelaborated_friend_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "unelaborated friend declaration is a C++11 extension; specify '%select{struct|interface|union|class|enum}0' to befriend %1", 78, SFINAE_Suppress, false, false, 2)
+DIAG(ext_union_member_of_reference_type, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "union member %0 has reference type %1, which is a Microsoft extension", 382, SFINAE_Suppress, false, false, 2)
+DIAG(ext_use_out_of_scope_declaration, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "use of out-of-scope declaration of %0%select{| whose type is not compatible with that of an implicit declaration}1", 491, SFINAE_Suppress, false, false, 2)
 DIAG(ext_using_undefined_std, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "using directive refers to implicitly-defined namespace 'std'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variable_sized_type_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", 259, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variable_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable templates are a C++14 extension", 85, SFINAE_Suppress, false, false, 2)
-DIAG(ext_variadic_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared variadic", 342, SFINAE_Suppress, false, false, 2)
-DIAG(ext_vla, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length arrays are a C99 feature", 714, SFINAE_Suppress, false, false, 2)
-DIAG(ext_vla_folded_to_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length array folded to constant array as an extension", 250, SFINAE_Suppress, false, false, 2)
-DIAG(ext_warn_gnu_final, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__final is a GNU extension, consider using C++11 final", 233, SFINAE_Suppress, false, false, 0)
+DIAG(ext_variable_sized_type_in_struct, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 not at the end of a struct or class is a GNU extension", 265, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variable_template, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "variable templates are a C++14 extension", 86, SFINAE_Suppress, false, false, 2)
+DIAG(ext_variadic_main, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "'main' is not allowed to be declared variadic", 349, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length arrays are a C99 feature", 731, SFINAE_Suppress, false, false, 2)
+DIAG(ext_vla_folded_to_constant, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "variable length array folded to constant array as an extension", 256, SFINAE_Suppress, false, false, 2)
+DIAG(ext_warn_gnu_final, CLASS_EXTENSION, (unsigned)diag::Severity::Warning, "__final is a GNU extension, consider using C++11 final", 239, SFINAE_Suppress, false, false, 0)
 DIAG(note_access_constrained_by_path, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constrained by %select{|implicitly }1%select{private|protected}0 inheritance here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_natural, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{|implicitly }1declared %select{private|protected}0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_protected_restricted_ctordtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "protected %select{constructor|destructor}0 can only be used to %select{construct|destroy}0 a base class subobject", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_protected_restricted_noobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "must name member using the type of the current context %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_access_protected_restricted_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "can only access this member on an object of type %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_add_std_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call 'std::move' explicitly to avoid copying", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_add_std_move_in_cxx11, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "call 'std::move' explicitly to avoid copying on older compilers", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_add_synthesize_directive, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a '@synthesize' directive", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_additional_parens_for_variable_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add a pair of parentheses to declare a variable", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_addrof_ovl_candidate_disabled_by_enable_if_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate function made ineligible by enable_if", 0, SFINAE_Suppress, false, false, 2)
@@ -2135,6 +2167,7 @@
 DIAG(note_arc_weak_disabled, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, but ARC is disabled", 0, SFINAE_Suppress, false, false, 10)
 DIAG(note_arc_weak_no_runtime, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration uses __weak, which the current deployment target does not support", 0, SFINAE_Suppress, false, false, 10)
 DIAG(note_array_index_out_of_bounds, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "array %0 declared here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_array_init_plain_string_into_char8_t, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add 'u8' prefix to form a 'char8_t' string literal", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_array_size_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_asm_input_duplicate_first, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constraint '%0' is already present here", 0, SFINAE_Suppress, false, false, 12)
 DIAG(note_asm_missing_constraint_modifier, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use constraint modifier \"%0\"", 0, SFINAE_Suppress, false, false, 12)
@@ -2154,6 +2187,7 @@
 DIAG(note_callee_static_array, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "callee declares array parameter as static here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_carries_dependency_missing_first_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration missing '[[carries_dependency]]' attribute is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_cast_to_void, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "cast expression to void to silence warning", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_cat_conform_to_noescape_prot, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{category|class extension}0 conforms to protocol %1 which defines method %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_change_bitfield_sign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider making the bitfield type %select{unsigned|signed}0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_change_calling_conv_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider defining %0 with the '%1' calling convention", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_class_declared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class is declared here", 0, SFINAE_Suppress, false, false, 2)
@@ -2177,12 +2211,13 @@
 DIAG(note_cuda_ovl_candidate_target_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: target attributes do not match", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_decl_unguarded_availability_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "annotate %select{%1|anonymous %1}0 with an availability attribute to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_declaration_not_a_prototype, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "this declaration is not a prototype; add 'void' to make it a prototype for a zero-parameter function", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_declare_parameter_autoreleasing, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declare the parameter __autoreleasing explicitly to suppress this warning", 0, SFINAE_Suppress, false, false, 5)
 DIAG(note_declare_parameter_strong, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declare the parameter __strong or capture a __block __strong variable to keep values alive across autorelease pools", 0, SFINAE_Suppress, false, false, 5)
 DIAG(note_declared_coroutine_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "function is a coroutine due to use of '%0' here", 0, SFINAE_Suppress, false, false, 14)
 DIAG(note_declared_nonnull, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared %select{'returns_nonnull'|'nonnull'}0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_declared_required_constant_init_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "required by 'require_constant_initialization' attribute here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_deduced_template_arg_substitution_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "during template argument deduction for %select{class|variable}0 template %select{partial specialization |}1%2 %3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deduction_guide_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "deduction guide declared %0 by intervening access specifier", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deduction_guide_template_access, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member template declared %0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_default_arg_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of default argument for '%0' required here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_default_argument_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "default argument declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_default_function_arg_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of default function argument expression for '%0' required here", 0, SFINAE_Suppress, false, false, 2)
@@ -2196,8 +2231,10 @@
 DIAG(note_deleted_default_ctor_uninit_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{default constructor of|constructor inherited by}0 %1 is implicitly deleted because field %2 of %select{reference|const-qualified}4 type %3 would not be initialized", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_deleted_dtor_no_operator_delete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "virtual destructor requires an unambiguous, accessible 'operator delete'", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_deleted_special_member_class_subobject, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{default constructor of|copy constructor of|move constructor of|copy assignment operator of|move assignment operator of|destructor of|constructor inherited by}0 %1 is implicitly deleted because %select{base class %3|%select{||||variant }4field %3}2 has %select{no|a deleted|multiple|an inaccessible|a non-trivial}4 %select{%select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor|%select{default|corresponding|default|default|default}4 constructor}0|destructor}5%select{||s||}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_dependent_function_template_spec_discard_reason, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate ignored: %select{not a function template|not a member of the enclosing namespace; did you mean to explicitly qualify the specialization?}0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_dependent_non_type_default_arg_in_partial_spec, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template parameter is used in default argument declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_dependent_var_use, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "must qualify identifier to find this declaration in dependent base class", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_deprecated_this_capture, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add an explicit capture of 'this' to capture '*this' by reference", 0, SFINAE_Suppress, false, false, 3)
 DIAG(note_destructor_type_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_due_to_dllexported_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "due to %0 being dllexported%select{|; try compiling in C++11 mode}1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_duplicate_element, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "element %0 also has value %1", 0, SFINAE_Suppress, false, false, 2)
@@ -2292,6 +2329,7 @@
 DIAG(note_indirection_through_null, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "consider using __builtin_trap() or qualifying pointer with 'volatile'", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_inequality_comparison_to_or_assign, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '|=' to turn this inequality comparison into an or-assignment", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_init_list_narrowing_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert an explicit cast to silence this issue", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_init_with_default_member_initalizer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "initializing field %0 with default member initializer", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_insert_break_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert 'break;' to avoid fall-through", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_insert_fallthrough_fixit, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "insert '%0;' to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_inst_declaration_hint, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "add an explicit instantiation declaration to suppress this warning if %q0 is explicitly instantiated in another translation unit", 0, SFINAE_Suppress, false, false, 2)
@@ -2301,8 +2339,10 @@
 DIAG(note_ivar_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "instance variable is declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_lambda_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lambda expression begins here", 0, SFINAE_Suppress, false, false, 3)
 DIAG(note_lambda_to_block_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "implicit capture of lambda object due to conversion to block pointer here", 0, SFINAE_Suppress, false, false, 3)
+DIAG(note_lifetime_extending_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{%select{reference|'std::initializer_list'}0 member|member with %select{reference|'std::initializer_list'}0 subobject}1 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_local_decl_close_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "local declaration nearly matches", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_local_decl_close_param_match, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "type of %ordinal0 parameter of local declaration does not match definition%diff{ ($ vs $)|}1,2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_local_var_initializer, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{via initialization of|binding reference}0 variable %select{%2 |}1here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_lock_exclusive_and_shared, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "the other acquisition of %0 '%1' is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_locked_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 acquired here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_logical_instead_of_bitwise_change_operator, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use '%0' for a bitwise operation", 0, SFINAE_Suppress, false, false, 2)
@@ -2337,6 +2377,7 @@
 DIAG(note_non_literal_base_class, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has base class %1 of non-literal type", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_non_literal_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has data member %1 of %select{non-literal|volatile}3 type %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_non_literal_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "incomplete type %0 is not a literal type", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_non_literal_lambda, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "lambda closure types are non-literal types before C++17", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_non_literal_no_constexpr_ctors, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it is not an aggregate and has no constexpr constructors other than copy or move constructors", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_non_literal_nontrivial_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has a non-trivial destructor", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_non_literal_user_provided_dtor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is not literal because it has a user-provided destructor", 0, SFINAE_Suppress, false, false, 2)
@@ -2345,6 +2386,7 @@
 DIAG(note_non_usual_function_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-usual %0 declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_nontemplate_decl_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-templated declaration is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_nontrivial_default_arg, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because it has a default argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_nontrivial_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "field is non-trivial to %select{copy|default-initialize}0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_nontrivial_has_virtual, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because type %0 has a virtual %select{member function|base class}1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_nontrivial_in_class_init, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because field %0 has an initializer", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_nontrivial_no_copy, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "because no %select{<<ERROR>>|constructor|constructor|assignment operator|assignment operator|<<ERROR>>}2 can be used to %select{<<ERROR>>|copy|move|copy|move|<<ERROR>>}2 %select{base class|field|an object}0 of type %3", 0, SFINAE_Suppress, false, false, 2)
@@ -2399,26 +2441,26 @@
 DIAG(note_overridden_virtual_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "overridden virtual function is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_builtin_binary_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "built-in candidate %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_builtin_unary_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "built-in candidate %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |is the implicit default constructor|is the implicit copy constructor|is the implicit move constructor|is the implicit copy assignment operator|is the implicit move assignment operator|inherited constructor|inherited constructor }0%2%select{| has different class%diff{ (expected $ but has $)|}4,5| has different number of parameters (expected %4 but has %5)| has type mismatch at %ordinal4 parameter%diff{ (expected $ but has $)|}5,6| has different return type%diff{ ($ expected but has $)|}4,5| has different qualifiers (expected %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}4 but found %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5)| has different exception specification}3", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_arity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor}0 %select{|template }1not viable: requires%select{ at least| at most|}2 %3 argument%s3, but %4 %plural{1:was|:were}4 provided", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_arity_one, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor}0 %select{|template }1not viable: %select{requires at least|allows at most single|requires single}2 argument %3, but %plural{0:no|:%4}4 arguments were provided", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_addrspace, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: %select{%ordinal6|'this'}5 argument (%2) is in address space %3, but parameter must be in address space %4", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_arc_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: cannot implicitly convert argument %diff{of type $ to $|type to parameter type}2,3 for %select{%ordinal5 argument|object argument}4 under ARC", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_base_to_derived_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: cannot %select{convert from|convert from|bind}2 %select{base class pointer|superclass|base class object of type}2 %3 to %select{derived class pointer|subclass|derived class reference}2 %4 for %ordinal5 argument", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: no known conversion %diff{from $ to $|from argument type to parameter type}2,3 for %select{%ordinal5 argument|object argument}4%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}6", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_conv_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: cannot convert argument of incomplete type %diff{$ to $|to parameter type}2,3 for %select{%ordinal5 argument|object argument}4%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}6", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_cvr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: %ordinal4 argument (%2) would lose %select{const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}3 qualifier%select{||s||s|s|s}3", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_cvr_this, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{|function|||function|||||function (the implicit copy assignment operator)|function (the implicit move assignment operator)||}0 not viable: 'this' argument has type %2, but method is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %3}1%select{| has different class%diff{ (expected $ but has $)|}5,6| has different number of parameters (expected %5 but has %6)| has type mismatch at %ordinal5 parameter%diff{ (expected $ but has $)|}6,7| has different return type%diff{ ($ expected but has $)|}5,6| has different qualifiers (expected %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}5 but found %select{none|const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}6)| has different exception specification}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_arity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: requires%select{ at least| at most|}3 %4 argument%s4, but %5 %plural{1:was|:were}5 provided", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_arity_one, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{requires at least|allows at most single|requires single}3 argument %4, but %plural{0:no|:%5}5 arguments were provided", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_addrspace, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: address space mismatch in %select{%ordinal6|'this'}5 argument (%3), parameter type must be %4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_arc_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot implicitly convert argument %diff{of type $ to $|type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5 under ARC", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_base_to_derived_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot %select{convert from|convert from|bind}3 %select{base class pointer|superclass|base class object of type}3 %4 to %select{derived class pointer|subclass|derived class reference}3 %5 for %ordinal6 argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_conv, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: no known conversion %diff{from $ to $|from argument type to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_conv_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot convert argument of incomplete type %diff{$ to $|to parameter type}3,4 for %select{%ordinal6 argument|object argument}5%select{|; dereference the argument with *|; take the address of the argument with &|; remove *|; remove &}7", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_cvr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose %select{const|restrict|const and restrict|volatile|const and volatile|volatile and restrict|const, volatile, and restrict}4 qualifier%select{||s||s|s|s}4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_cvr_this, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: 'this' argument has type %3, but method is not marked %select{const|restrict|const or restrict|volatile|const or volatile|volatile or restrict|const, volatile, or restrict}4", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_bad_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: failed template argument deduction", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_gc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: %select{%ordinal6|'this'}5 argument (%2) has %select{no|__weak|__strong}3 ownership, but parameter has %select{no|__weak|__strong}4 ownership", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_list_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: cannot convert initializer list argument to %3", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_lvalue, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: expects an l-value for %select{%ordinal3 argument|object argument}2", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_overload, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: no overload of %3 matching %2 for %ordinal4 argument", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_ownership, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: %select{%ordinal6|'this'}5 argument (%2) has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}3 ownership, but parameter has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}4 ownership", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor}0 not viable: call to %select{__device__|__global__|__host__|__host__ __device__|invalid}1 function from %select{__device__|__global__|__host__|__host__ __device__|invalid}2 function", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_bad_unaligned, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 not viable: %ordinal4 argument (%2) would lose __unaligned qualifier", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_gc, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|'this'}6 argument (%3) has %select{no|__weak|__strong}4 ownership, but parameter has %select{no|__weak|__strong}5 ownership", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_list_argument, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: cannot convert initializer list argument to %4", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_lvalue, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: expects an l-value for %select{%ordinal4 argument|object argument}3", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_overload, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: no overload of %4 matching %3 for %ordinal5 argument", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_ownership, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %select{%ordinal7|'this'}6 argument (%3) has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}4 ownership, but parameter has %select{no|__unsafe_unretained|__strong|__weak|__autoreleasing}5 ownership", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_target, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: call to %select{__device__|__global__|__host__|__host__ __device__|invalid}3 function from %select{__device__|__global__|__host__|__host__ __device__|invalid}4 function", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_bad_unaligned, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 not viable: %ordinal5 argument (%3) would lose __unaligned qualifier", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_deduced_mismatch, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced type %diff{$ of %select{|element of }4%ordinal0 parameter does not match adjusted type $ of %select{|element of }4argument|of %select{|element of }4%ordinal0 parameter does not match adjusted type of %select{|element of }4argument}1,2%3", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ovl_candidate_deleted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|function |function |constructor |constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor|inherited constructor }0%1 has been %select{explicitly made unavailable|explicitly deleted|implicitly deleted}2", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_deleted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{function|function|constructor|constructor (the implicit default constructor)|constructor (the implicit copy constructor)|constructor (the implicit move constructor)|function (the implicit copy assignment operator)|function (the implicit move assignment operator)|inherited constructor}0%select{| template| %2}1 has been %select{explicitly made unavailable|explicitly deleted|implicitly deleted}3", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_disabled_by_enable_if, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: disabled by %0%1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_disabled_by_extension, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate disabled due to OpenCL extension", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_disabled_by_function_cond_attr, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate disabled: %0", 0, SFINAE_Suppress, false, false, 2)
@@ -2428,6 +2470,7 @@
 DIAG(note_ovl_candidate_has_pass_object_size_params, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate address cannot be taken because parameter %0 has pass_object_size attribute", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_illegal_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate %select{constructor|template}0 ignored: instantiation %select{takes|would take}0 its own class type by value", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_incomplete_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: couldn't infer template argument %0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_ovl_candidate_incomplete_deduction_pack, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced too few arguments for expanded pack %0; no argument for %ordinal1 expanded parameter in deduced argument pack %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_inconsistent_deduction, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced conflicting %select{types|values|templates}0 for parameter %1%diff{ ($ vs. $)|}2,3", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_inconsistent_deduction_types, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "candidate template ignored: deduced values %diff{of conflicting types for parameter %0 (%1 of type $ vs. %3 of type $)|%1 and %3 of conflicting types for parameter %0}2,4", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_ovl_candidate_inherited_constructor, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "constructor from base class %0 inherited here", 0, SFINAE_Suppress, false, false, 2)
@@ -2514,8 +2557,6 @@
 DIAG(note_redefinition_include_same_file, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' included multiple times, additional include site here", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_redefinition_modules_same_file, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' included multiple times, additional include site in header from module '%1'", 0, SFINAE_Suppress, false, false, 13)
 DIAG(note_ref_or_ptr_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{reference|pointer}0 member declared here", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ref_subobject_of_member_declared_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "member with reference subobject declared here", 0, SFINAE_Suppress, false, false, 2)
-DIAG(note_ref_var_local_bind, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "binding reference variable %0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_refconst_member_not_initialized, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{const|reference}0 member %1 will never be initialized", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_reference_is_return_value, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 returns a reference", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_referenced_class_template, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class template declared here", 0, SFINAE_Suppress, false, false, 2)
@@ -2529,9 +2570,10 @@
 DIAG(note_remove_move, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove std::move call here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_remove_parens_for_variable_declaration, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "remove parentheses to silence this warning", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_replace_abs_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use function '%0' instead", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_riscv_repeated_interrupt_attribute, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "repeated RISC-V 'interrupt' attribute is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_sentinel_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function|method|block}0 has been explicitly marked sentinel here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_shadow_field, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared here", 0, SFINAE_Suppress, false, false, 0)
-DIAG(note_silence_unligned_allocation_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "if you supply your own aligned allocation functions, use -Wno-aligned-allocation-unavailable to silence this diagnostic", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_silence_unligned_allocation_unavailable, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "if you supply your own aligned allocation functions, use -faligned-allocation to silence this diagnostic", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_specialized_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "attempt to specialize declaration here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_specialized_entity, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "explicitly specialized declaration is here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_string_plus_scalar_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use array indexing to silence this warning", 0, SFINAE_Suppress, false, false, 2)
@@ -2541,6 +2583,8 @@
 DIAG(note_suppressed_class_declare, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "class with specified objc_requires_property_definitions attribute is declared here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_surrounding_namespace_ends_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "surrounding namespace with visibility attribute ends here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_surrounding_namespace_starts_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "surrounding namespace with visibility attribute starts here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suspicious_bzero_size_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "parenthesize the second argument to silence", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_suspicious_sizeof_memset_silence, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{parenthesize the third argument|cast the second argument to 'int'}0 to silence", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_switch_conversion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "conversion to %select{integral|enumeration}0 type %1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_arg_internal_object, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-type template argument refers to %select{function|object}0 here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_arg_refers_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "non-type template argument refers here", 0, SFINAE_Suppress, false, false, 2)
@@ -2553,6 +2597,7 @@
 DIAG(note_template_default_arg_checking, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "while checking a default template argument used here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_enum_def_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of enumeration %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_exception_spec_instantiation_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of exception specification for %0 requested here", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_template_kw_refers_to_non_template, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declared as a non-template here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_member_class_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of member class %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_member_function_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in instantiation of member function %q0 requested here", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_template_nontype_parm_different_type, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "template non-type parameter has a different type %0 in template argument", 0, SFINAE_Suppress, false, false, 2)
@@ -2576,6 +2621,7 @@
 DIAG(note_transparent_union_first_field_size_align, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{alignment|size}0 of first field is %1 bits", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_type_incomplete, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%0 is incomplete", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_typecheck_assign_const, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{function %1 which returns const-qualified type %2 declared here|variable %1 declared const here|%select{non-|}1static data member %2 declared const here|member function %q1 is declared const here|%select{|nested }1data member %2 declared const here}0", 0, SFINAE_Suppress, false, false, 2)
+DIAG(note_typecheck_invalid_operands_converted, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "%select{first|second}0 operand was implicitly converted to type %1", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_typecheck_member_reference_suggestion, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to use '.' instead?", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_typedef_changes_linkage, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "use a tag name here to establish linkage prior to definition", 0, SFINAE_Suppress, false, false, 2)
 DIAG(note_typename_refers_here, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "referenced member %0 is declared here", 0, SFINAE_Suppress, false, false, 2)
@@ -2614,746 +2660,768 @@
 DIAG(warn_abs_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "absolute value function %0 given an argument of type %1 but has parameter of type %2 which may cause truncation of value", 8, SFINAE_Suppress, false, false, 2)
 DIAG(warn_abstract_final_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "abstract class is marked '%select{final|sealed}0'", 9, SFINAE_Suppress, false, false, 2)
 DIAG(warn_abstract_vbase_init_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initializer for virtual base class %0 of abstract class %1 will never be used", 10, SFINAE_Suppress, false, false, 2)
-DIAG(warn_access_decl_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "access declarations are deprecated; use using declarations instead", 153, SFINAE_Suppress, false, false, 27)
+DIAG(warn_access_decl_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "access declarations are deprecated; use using declarations instead", 156, SFINAE_Suppress, false, false, 27)
 DIAG(warn_accessor_property_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "type of property %0 does not match type of accessor %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquire_requires_negative_cap, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' requires negative capability '%2'", 630, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquired_before, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' must be acquired before '%2'", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_acquired_before_after_cycle, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Cycle in acquired_before/after dependencies, starting with '%0'", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_addition_in_bitshift, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '%0' has lower precedence than '%1'; '%1' will be evaluated first", 568, SFINAE_Suppress, false, false, 2)
-DIAG(warn_address_of_reference_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", 643, SFINAE_Suppress, false, false, 24)
-DIAG(warn_address_of_reference_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 622, SFINAE_Suppress, false, false, 2)
-DIAG(warn_alias_to_weak_alias, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_alias_with_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_aligned_allocation_unavailable, CLASS_WARNING, (unsigned)diag::Severity::Error, "aligned %select{allocation|deallocation}0 function of type '%1' is only available on %2 %3 or newer", 16, SFINAE_Suppress, false, false, 2)
-DIAG(warn_alloca_align_alignof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to __builtin_alloca_with_align is supposed to be in bits", 18, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ambiguous_suitable_delete_function_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple suitable %0 functions for %1; no 'operator delete' function will be invoked if initialization throws an exception", 19, SFINAE_Suppress, false, false, 2)
-DIAG(warn_anon_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of anonymous bit-field (%0 bits) exceeds width of its type; value will be truncated to %1 bit%s1", 59, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_lifetime_result_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", 270, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_literal_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment", 32, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_object_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", 28, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_perform_selector_leaks, CLASS_WARNING, (unsigned)diag::Severity::Warning, "performSelector may cause a leak because its selector is unknown", 29, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_possible_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive", 27, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive", 30, SFINAE_Suppress, false, false, 2)
-DIAG(warn_arc_retain_cycle, CLASS_WARNING, (unsigned)diag::Severity::Warning, "capturing %0 strongly in this block is likely to lead to a retain cycle", 31, SFINAE_Suppress, false, false, 26)
-DIAG(warn_arc_retained_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", 32, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_retained_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to unsafe property; object will be released after assignment", 32, SFINAE_Suppress, false, false, 5)
-DIAG(warn_arc_strong_pointer_objc_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter of type %0 with no explicit ownership", 204, SFINAE_Suppress, false, false, 10)
-DIAG(warn_arm_interrupt_calling_convention, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to function without interrupt attribute could clobber interruptee's VFP registers", 207, SFINAE_Suppress, false, false, 2)
-DIAG(warn_array_index_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is past the end of the array (which contains %1 element%s2)", 33, SFINAE_Suppress, false, false, 2)
-DIAG(warn_array_index_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is before the beginning of the array", 33, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquire_requires_negative_cap, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' requires negative capability '%2'", 646, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' must be acquired before '%2'", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_acquired_before_after_cycle, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Cycle in acquired_before/after dependencies, starting with '%0'", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_addition_in_bitshift, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '%0' has lower precedence than '%1'; '%1' will be evaluated first", 581, SFINAE_Suppress, false, false, 2)
+DIAG(warn_address_of_reference_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; pointer may be assumed to always convert to true", 659, SFINAE_Suppress, false, false, 24)
+DIAG(warn_address_of_reference_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 638, SFINAE_Suppress, false, false, 2)
+DIAG(warn_alias_to_weak_alias, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}2 will always resolve to %0 even if weak definition of %1 is overridden", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_alias_with_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alias|ifunc}1 will not be in section '%0' but in the same section as the %select{aliasee|resolver}2", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_alloca_align_alignof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to __builtin_alloca_with_align is supposed to be in bits", 16, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ambiguous_suitable_delete_function_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple suitable %0 functions for %1; no 'operator delete' function will be invoked if initialization throws an exception", 17, SFINAE_Suppress, false, false, 2)
+DIAG(warn_anon_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of anonymous bit-field (%0 bits) exceeds width of its type; value will be truncated to %1 bit%s1", 60, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_lifetime_result_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ARC %select{unused|__unsafe_unretained|__strong|__weak|__autoreleasing}0 lifetime qualifier on return type is ignored", 276, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_literal_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{array literal|dictionary literal|numeric literal|boxed expression|<should not happen>|block literal}0 to a weak %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_object_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of}0 this %1 call is a pointer to ownership-qualified type %2", 26, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_perform_selector_leaks, CLASS_WARNING, (unsigned)diag::Severity::Warning, "performSelector may cause a leak because its selector is unknown", 27, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_possible_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 may be accessed multiple times in this %select{function|method|block|lambda}2 and may be unpredictably set to nil; assign to a strong variable to keep the object alive", 25, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_repeated_use_of_weak, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "weak %select{variable|property|implicit property|instance variable}0 %1 is accessed multiple times in this %select{function|method|block|lambda}2 but may be unpredictably set to nil; assign to a strong variable to keep the object alive", 28, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arc_retain_cycle, CLASS_WARNING, (unsigned)diag::Severity::Warning, "capturing %0 strongly in this block is likely to lead to a retain cycle", 29, SFINAE_Suppress, false, false, 26)
+DIAG(warn_arc_retained_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to %select{weak|unsafe_unretained}0 %select{property|variable}1; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_retained_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning retained object to unsafe property; object will be released after assignment", 30, SFINAE_Suppress, false, false, 5)
+DIAG(warn_arc_strong_pointer_objc_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method parameter of type %0 with no explicit ownership", 208, SFINAE_Suppress, false, false, 10)
+DIAG(warn_argument_invalid_range, CLASS_WARNING, (unsigned)diag::Severity::Error, "argument value %0 is outside the valid range [%1, %2]", 31, SFINAE_Suppress, false, false, 2)
+DIAG(warn_arm_interrupt_calling_convention, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to function without interrupt attribute could clobber interruptee's VFP registers", 211, SFINAE_Suppress, false, false, 2)
+DIAG(warn_array_index_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is past the end of the array (which contains %1 element%s2)", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_array_index_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array index %0 is before the beginning of the array", 32, SFINAE_Suppress, false, false, 2)
 DIAG(warn_asm_label_on_auto_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored asm label '%0' on automatic variable", 0, SFINAE_Suppress, false, false, 12)
-DIAG(warn_asm_mismatched_size_modifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value size does not match register size specified by the constraint and modifier", 37, SFINAE_Suppress, false, false, 12)
-DIAG(warn_assume_side_effects, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the argument to %0 has side effects that will be discarded", 39, SFINAE_Suppress, false, false, 2)
-DIAG(warn_at_available_unchecked_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", 673, SFINAE_Suppress, false, false, 2)
-DIAG(warn_atl_uuid_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying 'uuid' as an ATL attribute is deprecated; use __declspec instead", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_atomic_op_has_invalid_memory_order, CLASS_WARNING, (unsigned)diag::Severity::Warning, "memory order argument to atomic operation is invalid", 41, SFINAE_Suppress, false, false, 2)
-DIAG(warn_atomic_property_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", 43, SFINAE_Suppress, false, false, 2)
-DIAG(warn_atprotocol_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "@protocol is using a forward protocol declaration of %0", 40, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attr_abi_tag_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attr_on_unconsumable_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consumed analysis attribute is attached to member of class '%0' which isn't marked as consumable", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_after_definition_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 after definition is ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_argument_n_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute parameter %1 is negative and will be ignored", 141, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dll_instantiated_base_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", 675, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dll_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redeclaration of %q0 should not add %q1 attribute", 171, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dllexport_explicit_instantiation_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation declaration should not be 'dllexport'", 172, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_dllimport_static_field_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of dllimport static field", 173, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_iboutlet, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute can only be applied to instance variables or properties", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored_for_field_of_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored for field of type %1", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_ignored_on_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored on inline function", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_invalid_on_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' attribute cannot be specified on a definition", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_nonnull_no_pointers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute applied to function with no pointer arguments", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_nonnull_parm_no_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute when used on parameters takes no arguments", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_not_on_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored when parsing type", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_packed_for_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'packed' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", 44, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_pointer_or_reference_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to a pointer or reference (%1 is invalid)", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to%select{| constant}1 pointer arguments", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_precede_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute declaration must precede definition", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_protected_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target does not support 'protected' visibility; using 'default'", 679, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_return_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_return_pointers_refs_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers or references", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_section_on_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section attribute is specified on redeclared variable", 548, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_sentinel_named_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute requires named arguments", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_sentinel_not_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute only supported for variadic %select{functions|blocks}0", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_type_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute argument not supported: %1", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_unknown_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown visibility %0", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_void_function_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_weak_on_field, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on a field declaration", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on an automatic variable when ARC is not enabled", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_wrong_decl_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions|variables, functions, methods, types, enumerations, enumerators, labels, and non-static data members}1", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_attribute_wrong_decl_type_str, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %1", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic when auto-synthesizing the property", 272, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_readonly_iboutlet_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "readonly IBOutlet property %0 when auto-synthesized may not work correctly with 'nib' loader", 528, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_storage_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' storage class specifier is redundant and incompatible with C++11", 73, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_synthesizing_protocol_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 declared in protocol %1", 463, SFINAE_Suppress, false, false, 2)
-DIAG(warn_auto_var_is_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'auto' deduced as 'id' in declaration of %0", 49, SFINAE_Suppress, false, false, 2)
-DIAG(warn_autosynthesis_property_in_superclass, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", 461, SFINAE_Suppress, false, false, 2)
-DIAG(warn_autosynthesis_property_ivar_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", 440, SFINAE_Suppress, false, false, 2)
-DIAG(warn_availability_unknown_platform, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform %0 in availability macro", 50, SFINAE_Suppress, false, false, 2)
-DIAG(warn_availability_version_ordering, CLASS_WARNING, (unsigned)diag::Severity::Warning, "feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored", 50, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bad_function_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from function call of type %0 to non-matching type %1", 53, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bad_receiver_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver type %0 is not 'id' or interface pointer, consider casting it to 'id'", 529, SFINAE_Suppress, false, false, 2)
-DIAG(warn_base_class_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "base class %0 is uninitialized when used here to access %q1", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bind_ref_member_to_parameter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference member %0 to stack allocated parameter %1", 144, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bind_ref_member_to_temporary, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference %select{|subobject of }1member %0 to a temporary value", 144, SFINAE_Suppress, false, false, 2)
-DIAG(warn_binding_null_to_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding dereferenced null pointer to reference has undefined behavior", 431, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bitfield_too_small_for_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "bit-field %0 is not wide enough to store all enumerators of %1", 58, SFINAE_Suppress, false, false, 24)
-DIAG(warn_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", 59, SFINAE_Suppress, false, false, 2)
-DIAG(warn_bitwise_op_in_bitwise_op, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' within '%1'", 60, SFINAE_Suppress, false, false, 2)
-DIAG(warn_block_capture_autoreleasing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "block captures an autoreleasing out-parameter, which may result in use-after-free bugs", 61, SFINAE_Suppress, false, false, 5)
-DIAG(warn_block_literal_attributes_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to omitted return type", 265, SFINAE_Suppress, false, false, 0)
-DIAG(warn_block_literal_qualifiers_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on omitted return type %1 has no effect", 270, SFINAE_Suppress, false, false, 0)
-DIAG(warn_bool_switch_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch condition has boolean value", 610, SFINAE_Suppress, false, false, 2)
-DIAG(warn_braces_around_scalar_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "braces around scalar initializer", 64, SFINAE_Suppress, false, false, 2)
-DIAG(warn_break_binds_to_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'break' is bound to loop, GCC binds it to switch", 233, SFINAE_Suppress, false, false, 2)
-DIAG(warn_builtin_unknown, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of unknown builtin %0", 277, SFINAE_Suppress, false, false, 2)
+DIAG(warn_asm_mismatched_size_modifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value size does not match register size specified by the constraint and modifier", 36, SFINAE_Suppress, false, false, 12)
+DIAG(warn_assume_side_effects, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the argument to %0 has side effects that will be discarded", 38, SFINAE_Suppress, false, false, 2)
+DIAG(warn_at_available_unchecked_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{@available|__builtin_available}0 does not guard availability here; use if (%select{@available|__builtin_available}0) instead", 689, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atl_uuid_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying 'uuid' as an ATL attribute is deprecated; use __declspec instead", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_atomic_op_has_invalid_memory_order, CLASS_WARNING, (unsigned)diag::Severity::Warning, "memory order argument to atomic operation is invalid", 42, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atomic_op_misaligned, CLASS_WARNING, (unsigned)diag::Severity::Warning, "misaligned or large atomic operation may incur significant performance penalty", 41, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atomic_property_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "writable atomic property %0 cannot pair a synthesized %select{getter|setter}1 with a user defined %select{getter|setter}2", 44, SFINAE_Suppress, false, false, 2)
+DIAG(warn_atprotocol_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "@protocol is using a forward protocol declaration of %0", 39, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_abi_tag_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attr_on_unconsumable_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "consumed analysis attribute is attached to member of class '%0' which isn't marked as consumable", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_address_multiple_identical_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple identical address spaces specified for type", 185, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_after_definition_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 after definition is ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_argument_n_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute parameter %1 is negative and will be ignored", 143, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_instantiated_base_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "propagating dll attribute to %select{already instantiated|explicitly specialized}0 base class template without dll attribute is not supported", 691, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dll_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redeclaration of %q0 should not add %q1 attribute", 175, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllexport_explicit_instantiation_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation declaration should not be 'dllexport'", 176, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_dllimport_static_field_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "definition of dllimport static field", 177, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_iboutlet, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute can only be applied to instance variables or properties", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_for_field_of_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored for field of type %1", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_ignored_on_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored on inline function", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_invalid_on_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' attribute cannot be specified on a definition", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_no_pointers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute applied to function with no pointer arguments", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_nonnull_parm_no_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nonnull' attribute when used on parameters takes no arguments", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_not_on_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute ignored when parsing type", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_packed_for_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'packed' attribute was ignored on bit-fields with single-byte alignment in older versions of GCC and Clang", 45, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointer_or_reference_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to a pointer or reference (%1 is invalid)", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to%select{| constant}1 pointer arguments", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_precede_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute declaration must precede definition", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_protected_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target does not support 'protected' visibility; using 'default'", 696, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_return_pointers_refs_only, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to return values that are pointers or references", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_section_on_redeclaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section attribute is specified on redeclared variable", 560, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_named_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute requires named arguments", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_sentinel_not_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'sentinel' attribute only supported for variadic %select{functions|blocks}0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_type_not_supported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute argument not supported: %1", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_unknown_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown visibility %0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_void_function_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 cannot be applied to %select{functions|Objective-C method}1 without return value", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_field, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on a field declaration", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__weak attribute cannot be specified on an automatic variable when ARC is not enabled", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|unions|variables and functions|functions and methods|functions, methods and blocks|functions, methods, and parameters|variables|variables and fields|variables, data members and tag types|types and namespaces|variables, functions and classes|kernel functions|non-K&R-style functions}1", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_attribute_wrong_decl_type_str, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %1", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic when auto-synthesizing the property", 278, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_readonly_iboutlet_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "readonly IBOutlet property %0 when auto-synthesized may not work correctly with 'nib' loader", 539, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_storage_class, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' storage class specifier is redundant and incompatible with C++11", 74, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_synthesizing_protocol_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 declared in protocol %1", 472, SFINAE_Suppress, false, false, 2)
+DIAG(warn_auto_var_is_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'auto' deduced as 'id' in declaration of %0", 50, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_in_superclass, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0; it will be implemented by its superclass, use @dynamic to acknowledge intention", 470, SFINAE_Suppress, false, false, 2)
+DIAG(warn_autosynthesis_property_ivar_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "autosynthesized property %0 will use %select{|synthesized}1 instance variable %2, not existing instance variable %3", 449, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_on_static_initializer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring availability attribute %select{on '+load' method|with constructor attribute|with destructor attribute}0", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_unknown_platform, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown platform %0 in availability macro", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_availability_version_ordering, CLASS_WARNING, (unsigned)diag::Severity::Warning, "feature cannot be %select{introduced|deprecated|obsoleted}0 in %1 version %2 before it was %select{introduced|deprecated|obsoleted}3 in version %4; attribute ignored", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_function_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from function call of type %0 to non-matching type %1", 54, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bad_receiver_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver type %0 is not 'id' or interface pointer, consider casting it to 'id'", 540, SFINAE_Suppress, false, false, 2)
+DIAG(warn_base_class_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "base class %0 is uninitialized when used here to access %q1", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bind_ref_member_to_parameter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding reference member %0 to stack allocated %select{variable|parameter}2 %1", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_binding_null_to_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "binding dereferenced null pointer to reference has undefined behavior", 440, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitfield_too_small_for_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "bit-field %0 is not wide enough to store all enumerators of %1", 59, SFINAE_Suppress, false, false, 24)
+DIAG(warn_bitfield_width_exceeds_type_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "width of bit-field %0 (%1 bits) exceeds the width of its type; value will be truncated to %2 bit%s2", 60, SFINAE_Suppress, false, false, 2)
+DIAG(warn_bitwise_op_in_bitwise_op, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' within '%1'", 61, SFINAE_Suppress, false, false, 2)
+DIAG(warn_block_capture_autoreleasing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "block captures an autoreleasing out-parameter, which may result in use-after-free bugs", 62, SFINAE_Suppress, false, false, 5)
+DIAG(warn_block_literal_attributes_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to omitted return type", 271, SFINAE_Suppress, false, false, 0)
+DIAG(warn_block_literal_qualifiers_on_omitted_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on omitted return type %1 has no effect", 276, SFINAE_Suppress, false, false, 0)
+DIAG(warn_bool_switch_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch condition has boolean value", 626, SFINAE_Suppress, false, false, 2)
+DIAG(warn_braces_around_scalar_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "braces around scalar initializer", 65, SFINAE_Suppress, false, false, 2)
+DIAG(warn_break_binds_to_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'break' is bound to loop, GCC binds it to switch", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_builtin_unknown, CLASS_WARNING, (unsigned)diag::Severity::Error, "use of unknown builtin %0", 283, SFINAE_Suppress, false, false, 2)
 DIAG(warn_call_to_pure_virtual_member_function_from_ctor_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "call to pure virtual member function %0 has undefined behavior; overrides of %0 in subclasses are not available in the %select{constructor|destructor}1 of %2", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_call_wrong_number_of_arguments, CLASS_WARNING, (unsigned)diag::Severity::Warning, "too %select{few|many}0 arguments in call to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cannot_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime", 419, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cannot_resolve_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot resolve lock expression", 627, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass object of %select{non-POD|non-trivial}0 type %1 through variadic %select{function|block|method|constructor}2; call will abort at runtime", 427, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cannot_resolve_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot resolve lock expression", 643, SFINAE_Suppress, false, false, 2)
 DIAG(warn_case_empty_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty case range specified", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_case_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow converting case value to switch condition type (%0 to %1)", 609, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_align, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 increases required alignment from %2 to %3", 113, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_calling_conv, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast between incompatible calling conventions '%0' and '%1'; calls through this pointer may abort at runtime", 114, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_nonnull_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nonnull %select{function call|parameter}0 '%1' will evaluate to 'true' on first encounter", 504, SFINAE_Suppress, false, false, 24)
-DIAG(warn_cast_pointer_from_sel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast of type %0 to %1 is deprecated; use sel_getName instead", 115, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_qual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", 116, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cast_qual2, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 must have all intermediate pointers const qualified to be safe", 116, SFINAE_Suppress, false, false, 2)
-DIAG(warn_category_method_impl_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "category is implementing a method which will also be implemented by its primary class", 462, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "calling convention %0 ignored for this target", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_knr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function with no prototype cannot use the %0 calling convention", 391, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_structors, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on constructor/destructor", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cconv_varargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on variadic function", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cdtor_function_try_handler_mem_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", 199, SFINAE_Suppress, false, false, 2)
+DIAG(warn_case_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow converting case value to switch condition type (%0 to %1)", 625, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_align, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 increases required alignment from %2 to %3", 114, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_calling_conv, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast between incompatible calling conventions '%0' and '%1'; calls through this pointer may abort at runtime", 115, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_nonnull_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nonnull %select{function call|parameter}0 '%1' will evaluate to 'true' on first encounter", 514, SFINAE_Suppress, false, false, 24)
+DIAG(warn_cast_pointer_from_sel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast of type %0 to %1 is deprecated; use sel_getName instead", 116, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 drops %select{const and volatile qualifiers|const qualifier|volatile qualifier}2", 117, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cast_qual2, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast from %0 to %1 must have all intermediate pointers const qualified to be safe", 117, SFINAE_Suppress, false, false, 2)
+DIAG(warn_category_method_impl_match, CLASS_WARNING, (unsigned)diag::Severity::Warning, "category is implementing a method which will also be implemented by its primary class", 471, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "calling convention %0 ignored for this target", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_knr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function with no prototype cannot use the %0 calling convention", 399, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_structors, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on constructor/destructor", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cconv_varargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 calling convention ignored on variadic function", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cdtor_function_try_handler_mem_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot refer to a non-static member from the handler of a %select{constructor|destructor}0 function try block", 203, SFINAE_Suppress, false, false, 2)
 DIAG(warn_cfstring_truncated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "input conversion stopped due to an input byte that does not belong to the input codeset UTF-8", 3, SFINAE_Suppress, false, false, 2)
-DIAG(warn_class_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id')", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_class_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id'); did you mean %objcclass2?", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cleanup_ext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the 'cleanup' attribute argument to be anything other than a simple identifier", 233, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cocoa_naming_owned_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property follows Cocoa naming convention for returning 'owned' objects", 459, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id')", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_class_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class method %objcclass0 not found (return type defaults to 'id'); did you mean %objcclass2?", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cleanup_ext, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the 'cleanup' attribute argument to be anything other than a simple identifier", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cocoa_naming_owned_rule, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property follows Cocoa naming convention for returning 'owned' objects", 468, SFINAE_Suppress, false, false, 2)
 DIAG(warn_collection_expr_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "collection expression type %0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comma_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "possible misuse of comma operator here", 121, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{self-|array }0comparison always evaluates to %select{a constant|%2}1", 615, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_bitwise_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitwise comparison always evaluates to %select{false|true}0", 615, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_of_mixed_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types%diff{ ($ and $)|}0,1", 195, SFINAE_Suppress, false, false, 2)
-DIAG(warn_comparison_of_mixed_enum_types_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types in switch statement%diff{ ($ and $)|}0,1", 196, SFINAE_Suppress, false, false, 2)
-DIAG(warn_concatenated_nsarray_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "concatenated NSString literal for an NSArray expression - possibly missing a comma", 470, SFINAE_Suppress, false, false, 2)
-DIAG(warn_condition_is_assignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using the result of an assignment as a condition without parentheses", 492, SFINAE_Suppress, false, false, 2)
-DIAG(warn_condition_is_idiomatic_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using the result of an assignment as a condition without parentheses", 264, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on parameter type in declaration of %0", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on return type in declaration of %0", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0%diff{: $ vs $|}1,2", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_overriding_variadic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting variadic declaration of method and its implementation", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on parameter type in implementation of %0", 168, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", 379, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on return type in implementation of %0", 168, SFINAE_Suppress, false, false, 2)
-DIAG(warn_conflicting_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting return type in implementation of %0%diff{: $ vs $|}1,2", 380, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comma_operator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "possible misuse of comma operator here", 123, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{self-|array }0comparison always evaluates to %select{a constant|%2}1", 631, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_bitwise_always, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitwise comparison always evaluates to %select{false|true}0", 631, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types%diff{ ($ and $)|}0,1", 199, SFINAE_Suppress, false, false, 2)
+DIAG(warn_comparison_of_mixed_enum_types_switch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of two values with different enumeration types in switch statement%diff{ ($ and $)|}0,1", 200, SFINAE_Suppress, false, false, 2)
+DIAG(warn_concatenated_nsarray_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "concatenated NSString literal for an NSArray expression - possibly missing a comma", 479, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_assignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using the result of an assignment as a condition without parentheses", 502, SFINAE_Suppress, false, false, 2)
+DIAG(warn_condition_is_idiomatic_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using the result of an assignment as a condition without parentheses", 270, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on parameter type in declaration of %0", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0%diff{: $ vs $|}1,2", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting distributed object modifiers on return type in declaration of %0", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0%diff{: $ vs $|}1,2", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_overriding_variadic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting variadic declaration of method and its implementation", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on parameter type in implementation of %0", 172, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_param_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting parameter types in implementation of %0%diff{: $ vs $|}1,2", 387, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_type_modifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting distributed object modifiers on return type in implementation of %0", 172, SFINAE_Suppress, false, false, 2)
+DIAG(warn_conflicting_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting return type in implementation of %0%diff{: $ vs $|}1,2", 388, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conflicting_variadic, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conflicting variadic declaration of method and its implementation", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_base_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to its base class %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_self_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to itself will never be used", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_conv_to_void_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion function converting %0 to %1 will never be used", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_coroutine_promise_unhandled_exception_required_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is required to declare the member 'unhandled_exception()' when exceptions are enabled", 136, SFINAE_Suppress, false, false, 14)
-DIAG(warn_ctor_parm_shadows_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor parameter %0 shadows the field %1 of %2", 561, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_multiple_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple return statements in constexpr function is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_body_no_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr function with no return statements is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_local_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_constexpr_type_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_compat_init_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda captures are incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx11_compat_variable_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable templates are incompatible with C++ standards before C++14", 101, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx11_gnu_attribute_on_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to a type", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_constexpr_not_const, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior", 131, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_decomp_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declarations are incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_inline_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline variables are incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_star_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "by value capture of '*this' is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx14_compat_static_assert_no_message, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert with no message is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx14_compat_template_nontype_parm_auto_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template parameters declared with %0 are incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_equals_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit capture of 'this' with a capture default of '=' is incompatible with C++ standards before C++2a", 97, SFINAE_Suppress, false, false, 3)
-DIAG(warn_cxx17_compat_exception_spec_in_signature, CLASS_WARNING, (unsigned)diag::Severity::Warning, "mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", 87, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is incompatible with C++ standards before C++2a", 98, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_array_size_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", 108, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' type specifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_cast_fn_obj, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is incompatible with C++98", 108, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_constexpr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'constexpr' specifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_ctor_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor call from initializer list is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_delegating_ctor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "delegating constructors are incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_empty_scalar_initializer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scalar initialized from empty initializer list is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_enum_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending enumeration type %0 is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_enum_nested_name_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration type in nested name specifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_explicit_conversion_functions, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit conversion functions are incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_friend_is_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "friend declaration naming a member of the declaring class is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_goto_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this goto statement to its label is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_indirect_goto_in_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this indirect goto statement to one of its possible targets is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_initializer_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialization of initializer_list object is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_non_static_member_use, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of non-static data member %0 in an unevaluated context is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_nonclass_type_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-class friend type %0 is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_nontrivial_union_or_anon_struct_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{anonymous struct|union}0 member %1 with a non-trivial %select{constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_reference_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference initialized from initializer list is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_sfinae_access_control, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "substitution failure due to access control is incompatible with C++98", 104, SFINAE_Report, false, false, 2)
-DIAG(warn_cxx98_compat_static_data_member_in_union, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static data member %0 in union is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_switch_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from switch statement to this case label is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_temp_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{copying variable|copying parameter|returning object|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98", 105, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding address non-type template argument are incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_local_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local type %0 as template argument is incompatible with C++98", 107, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_null, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of null pointer as non-type template argument is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_object_internal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_arg_unnamed_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unnamed type as template argument is incompatible with C++98", 109, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'template' keyword outside of a template is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_template_parameter_default_in_function_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default template arguments for a function template are incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_typename_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'typename' outside of a template is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_unelaborated_friend_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending %1 without '%select{struct|interface|union|class|enum}0' keyword is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type specifier is incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx98_compat_using_decl_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inheriting constructors are incompatible with C++98", 104, SFINAE_Suppress, false, false, 2)
-DIAG(warn_cxx_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", 289, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dangling_std_initializer_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array backing the initializer list will be destroyed at the end of %select{the full-expression|the constructor}0", 145, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dealloc_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-dealloc is being overridden in a category", 147, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of %0 will not be visible outside of this function", 712, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_shadow, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 558, SFINAE_Suppress, false, false, 2)
-DIAG(warn_decl_shadow_uncaptured_local, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 564, SFINAE_Suppress, false, false, 2)
-DIAG(warn_declspec_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum}1\" to apply attribute to type declaration", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deep_exception_specs_differ, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception specifications of %select{return|argument}0 types differ", 286, SFINAE_Suppress, false, false, 2)
-DIAG(warn_def_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0", 612, SFINAE_Suppress, false, false, 2)
-DIAG(warn_default_atomic_custom_getter_setter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked 'atomic' if this is intended)", 142, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delegating_ctor_cycle, CLASS_WARNING, (unsigned)diag::Severity::Error, "constructor for %0 creates a delegation cycle", 150, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_abstract_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", 152, SFINAE_Suppress, false, true, 2)
+DIAG(warn_coroutine_promise_unhandled_exception_required_with_exceptions, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is required to declare the member 'unhandled_exception()' when exceptions are enabled", 138, SFINAE_Suppress, false, false, 14)
+DIAG(warn_cstruct_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to record %2 that is not trivial to %select{primitive-default-initialize|primitive-copy}3", 434, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ctor_parm_shadows_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor parameter %0 shadows the field %1 of %2", 574, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_invalid_stmt, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of this statement in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_multiple_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple return statements in constexpr function is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_body_no_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constexpr function with no return statements is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_local_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable declaration in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_constexpr_type_definition, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type definition in a constexpr %select{function|constructor}0 is incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_compat_init_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialized lambda captures are incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx11_compat_variable_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable templates are incompatible with C++ standards before C++14", 102, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx11_gnu_attribute_on_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 ignored, because it cannot be applied to a type", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_constexpr_not_const, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'constexpr' non-static member function will not be implicitly 'const' in C++14; add 'const' to avoid a change in behavior", 133, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_decomp_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "decomposition declarations are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_inline_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inline variables are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_star_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "by value capture of '*this' is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx14_compat_static_assert_no_message, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static_assert with no message is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx14_compat_template_nontype_parm_auto_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template parameters declared with %0 are incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_equals_this_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit capture of 'this' with a capture default of '=' is incompatible with C++ standards before C++2a", 98, SFINAE_Suppress, false, false, 3)
+DIAG(warn_cxx17_compat_exception_spec_in_signature, CLASS_WARNING, (unsigned)diag::Severity::Warning, "mangled name of %0 will change in C++17 due to non-throwing exception specification in function signature", 88, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_pointer_to_const_ref_member_on_rvalue, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invoking a pointer to a 'const &' member function on an rvalue is incompatible with C++ standards before C++2a", 99, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx17_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'char8_t' type specifier is incompatible with C++ standards before C++20", 98, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_array_size_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from array size expression of type %0 to %select{integral|enumeration}1 type %2 is incompatible with C++98", 109, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_auto_type_specifier, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'auto' type specifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_cast_fn_obj, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cast between pointer-to-function and pointer-to-object is incompatible with C++98", 109, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_constexpr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'constexpr' specifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_ctor_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constructor call from initializer list is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_delegating_ctor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "delegating constructors are incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_empty_scalar_initializer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "scalar initialized from empty initializer list is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending enumeration type %0 is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_enum_nested_name_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enumeration type in nested name specifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_explicit_conversion_functions, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit conversion functions are incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_friend_is_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "friend declaration naming a member of the declaring class is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_goto_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this goto statement to its label is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_indirect_goto_in_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from this indirect goto statement to one of its possible targets is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_initializer_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "initialization of initializer_list object is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_non_static_member_use, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of non-static data member %0 in an unevaluated context is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nonclass_type_friend, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-class friend type %0 is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_nontrivial_union_or_anon_struct_member, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{anonymous struct|union}0 member %1 with a non-trivial %select{default constructor|copy constructor|move constructor|copy assignment operator|move assignment operator|destructor}2 is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_pass_non_pod_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of trivial but non-POD type %0 through variadic %select{function|block|method|constructor}1 is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_reference_list_init, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reference initialized from initializer list is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_sfinae_access_control, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "substitution failure due to access control is incompatible with C++98", 105, SFINAE_Report, false, false, 2)
+DIAG(warn_cxx98_compat_static_data_member_in_union, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "static data member %0 in union is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_switch_into_protected_scope, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "jump from switch statement to this case label is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_temp_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{copying variable|copying parameter|returning object|initializing statement expression result|throwing object|copying member subobject|copying array element|allocating object|copying temporary|initializing base subobject|initializing vector element|capturing value}1 of type %2 when binding a reference to a temporary would %select{invoke an inaccessible constructor|find no viable constructor|find ambiguous constructors|invoke a deleted constructor}0 in C++98", 106, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding address non-type template argument are incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_local_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local type %0 as template argument is incompatible with C++98", 108, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_null, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of null pointer as non-type template argument is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_object_internal, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument referring to %select{function|object}0 %1 with internal linkage is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_arg_unnamed_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unnamed type as template argument is incompatible with C++98", 110, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'template' keyword outside of a template is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_template_parameter_default_in_function_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default template arguments for a function template are incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_typename_outside_of_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of 'typename' outside of a template is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unelaborated_friend_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "befriending %1 without '%select{struct|interface|union|class|enum}0' keyword is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_unicode_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type specifier is incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx98_compat_using_decl_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "inheriting constructors are incompatible with C++98", 105, SFINAE_Suppress, false, false, 2)
+DIAG(warn_cxx_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts for classes with base classes or virtual functions", 295, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{reference|backing array for 'std::initializer_list'}2 %select{|subobject of }1member %0 %select{binds to|is}2 a temporary object whose lifetime is shorter than the lifetime of the constructed object", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dangling_variable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{temporary %select{whose address is used as value of|%select{|implicitly }2bound to}4 %select{%select{|reference }4member of local variable|local %select{variable|reference}4}1|array backing %select{initializer list subobject of local variable|local initializer list}1}0 %select{%3 |}2will be destroyed at the end of the full-expression", 145, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dealloc_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "-dealloc is being overridden in a category", 150, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of %0 will not be visible outside of this function", 729, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 571, SFINAE_Suppress, false, false, 2)
+DIAG(warn_decl_shadow_uncaptured_local, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration shadows a %select{local variable|variable in %2|static data member of %2|field of %2|typedef in %2|type alias in %2}1", 577, SFINAE_Suppress, false, false, 2)
+DIAG(warn_declspec_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is ignored, place it after \"%select{class|struct|interface|union|enum}1\" to apply attribute to type declaration", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deep_exception_specs_differ, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception specifications of %select{return|argument}0 types differ", 292, SFINAE_Suppress, false, false, 2)
+DIAG(warn_def_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%plural{1:enumeration value %1 not explicitly handled in switch|2:enumeration values %1 and %2 not explicitly handled in switch|3:enumeration values %1, %2, and %3 not explicitly handled in switch|:%0 enumeration values not explicitly handled in switch: %1, %2, %3...}0", 628, SFINAE_Suppress, false, false, 2)
+DIAG(warn_default_atomic_custom_getter_setter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "atomic by default property %0 has a user defined %select{getter|setter}1 (property should be marked 'atomic' if this is intended)", 144, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delegating_ctor_cycle, CLASS_WARNING, (unsigned)diag::Severity::Error, "constructor for %0 creates a delegation cycle", 153, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_abstract_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{delete|destructor}0 called on %1 that is abstract but has non-virtual destructor", 155, SFINAE_Suppress, false, true, 2)
 DIAG(warn_delete_array_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete' applied to a pointer-to-array type %0 treated as 'delete[]'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "deleting pointer to incomplete type %0 may cause undefined behavior", 151, SFINAE_Suppress, false, false, 2)
-DIAG(warn_delete_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", 152, SFINAE_Suppress, false, true, 2)
-DIAG(warn_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_anonymous_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'deprecated' attribute on anonymous namespace ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deprecated_copy_operation, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared %select{copy %select{assignment operator|constructor}1|destructor}2", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing deprecated %select{method|class|category}0", 157, SFINAE_Suppress, false, false, 2)
-DIAG(warn_deprecated_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be deprecated because the receiver type is unknown", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated: %1", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_redundant_constexpr_static_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_register, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage class specifier is deprecated and incompatible with C++17", 162, SFINAE_Suppress, false, false, 27)
-DIAG(warn_deprecated_string_literal_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion from string literal to %0 is deprecated", 74, SFINAE_Suppress, false, false, 27)
-DIAG(warn_destructor_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 overrides a destructor but is not marked 'override'", 298, SFINAE_Suppress, false, false, 2)
-DIAG(warn_diagnose_if_succeeded, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 705, SFINAE_Suppress, false, true, 2)
-DIAG(warn_direct_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to +initialize results in duplicate call to +initialize", 203, SFINAE_Suppress, false, false, 2)
-DIAG(warn_direct_ivar_access, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instance variable %0 is being directly accessed", 164, SFINAE_Suppress, false, false, 2)
-DIAG(warn_direct_super_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to [super initialize] should only be in implementation of +initialize", 203, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dllimport_dropped_from_inline_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared inline; %1 attribute ignored", 265, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "deleting pointer to incomplete type %0 may cause undefined behavior", 154, SFINAE_Suppress, false, false, 2)
+DIAG(warn_delete_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{delete|destructor}0 called on non-final %1 that has virtual functions but non-virtual destructor", 155, SFINAE_Suppress, false, true, 2)
+DIAG(warn_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_anonymous_namespace, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'deprecated' attribute on anonymous namespace ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_copy_operation, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "definition of implicit copy %select{constructor|assignment operator}1 for %0 is deprecated because it has a user-declared %select{copy %select{assignment operator|constructor}1|destructor}2", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing deprecated %select{method|class|category}0", 160, SFINAE_Suppress, false, false, 2)
+DIAG(warn_deprecated_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be deprecated because the receiver type is unknown", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is deprecated: %1", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_redundant_constexpr_static_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "out-of-line definition of constexpr static data member is redundant in C++17 and is deprecated", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_register, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage class specifier is deprecated and incompatible with C++17", 165, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_string_literal_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "conversion from string literal to %0 is deprecated", 75, SFINAE_Suppress, false, false, 27)
+DIAG(warn_deprecated_this_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit capture of 'this' with a capture default of '=' is deprecated", 166, SFINAE_Suppress, false, false, 27)
+DIAG(warn_destructor_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 overrides a destructor but is not marked 'override'", 305, SFINAE_Suppress, false, false, 2)
+DIAG(warn_diagnose_if_succeeded, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0", 722, SFINAE_Suppress, false, true, 2)
+DIAG(warn_direct_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to +initialize results in duplicate call to +initialize", 207, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_ivar_access, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instance variable %0 is being directly accessed", 168, SFINAE_Suppress, false, false, 2)
+DIAG(warn_direct_super_initialize_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit call to [super initialize] should only be in implementation of +initialize", 207, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dispatch_body_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "body of cpu_dispatch function will be ignored", 237, SFINAE_Suppress, false, false, 0)
+DIAG(warn_dllimport_dropped_from_inline_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared inline; %1 attribute ignored", 271, SFINAE_Suppress, false, false, 2)
 DIAG(warn_double_const_requires_fp64, CLASS_WARNING, (unsigned)diag::Severity::Warning, "double precision constant requires cl_khr_fp64, casting to single precision", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_double_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' that is already held", 627, SFINAE_Suppress, false, false, 2)
+DIAG(warn_double_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "acquiring %0 '%1' that is already held", 643, SFINAE_Suppress, false, false, 2)
 DIAG(warn_dup_category_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate definition of category %1 on interface %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied with different parameters", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_attribute_exact, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_declspec, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 181, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_enum_values, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "element %0 has been implicitly assigned %1 which another element has been assigned", 182, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple declarations of method %0 found and ignored", 184, SFINAE_Suppress, false, false, 2)
-DIAG(warn_duplicate_protocol_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate protocol definition of %0 is ignored", 185, SFINAE_Suppress, false, false, 2)
-DIAG(warn_dyn_class_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4", 186, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "for loop has empty body", 190, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is empty", 227, SFINAE_Suppress, false, false, 28)
-DIAG(warn_empty_if_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "if statement has empty body", 190, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_parens_are_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty parentheses interpreted as a function declaration", 711, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_range_based_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "range-based for loop has empty body", 190, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_switch_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch statement has empty body", 190, SFINAE_Suppress, false, false, 2)
-DIAG(warn_empty_while_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "while loop has empty body", 190, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied with different parameters", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_attribute_exact, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute %0 is already applied", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_codeseg_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate code segment specifiers", 560, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_declspec, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate '%0' declaration specifier", 185, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_enum_values, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "element %0 has been implicitly assigned %1 which another element has been assigned", 186, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple declarations of method %0 found and ignored", 188, SFINAE_Suppress, false, false, 2)
+DIAG(warn_duplicate_protocol_def, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate protocol definition of %0 is ignored", 189, SFINAE_Suppress, false, false, 2)
+DIAG(warn_dyn_class_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{destination for|source of|first operand of|second operand of}0 this %1 call is a pointer to %select{|class containing a }2dynamic class %3; vtable pointer will be %select{overwritten|copied|moved|compared}4", 190, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "for loop has empty body", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is empty", 231, SFINAE_Suppress, false, false, 28)
+DIAG(warn_empty_if_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "if statement has empty body", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_parens_are_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "empty parentheses interpreted as a function declaration", 728, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_range_based_for_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "range-based for loop has empty body", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_switch_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "switch statement has empty body", 194, SFINAE_Suppress, false, false, 2)
+DIAG(warn_empty_while_body, CLASS_WARNING, (unsigned)diag::Severity::Warning, "while loop has empty body", 194, SFINAE_Suppress, false, false, 2)
 DIAG(warn_enum_value_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overflow in enumeration value", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_equality_with_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "equality comparison with extraneous parentheses", 493, SFINAE_Suppress, false, false, 2)
-DIAG(warn_exception_caught_by_earlier_handler, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception of type %0 will be caught by earlier handler", 199, SFINAE_Suppress, false, false, 2)
-DIAG(warn_exception_spec_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dynamic exception specifications are deprecated", 156, SFINAE_Suppress, false, false, 27)
-DIAG(warn_exit_time_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires an exit-time destructor", 200, SFINAE_Suppress, false, false, 2)
-DIAG(warn_expecting_lock_held_on_loop, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at start of each loop", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_expecting_locked, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at the end of function", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_after_specialization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation of %0 that occurs after an explicit specialization has no effect", 308, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_inline_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation cannot be 'inline'", 73, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_must_be_global_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 must occur at global scope", 73, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_out_of_scope_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 not in a namespace enclosing %1", 73, SFINAE_Suppress, false, false, 2)
-DIAG(warn_explicit_instantiation_unqualified_wrong_namespace_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %q0 must occur in namespace %1", 73, SFINAE_Suppress, false, false, 2)
-DIAG(warn_extern_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'extern' variable has an initializer", 206, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void function", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void lambda", 544, SFINAE_Suppress, false, false, 3)
-DIAG(warn_falloff_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function declared 'noreturn' should not return", 319, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fallthrough_attr_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "fallthrough annotation in unreachable code", 275, SFINAE_Suppress, false, false, 2)
-DIAG(warn_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 is uninitialized when used here", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_flag_enum_constant_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "enumeration value %0 is out of range of flags in enumeration type %1", 212, SFINAE_Suppress, false, false, 2)
-DIAG(warn_float_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too large for type %0; maximum is %1", 335, SFINAE_Suppress, false, false, 2)
-DIAG(warn_float_underflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too small for type %0; minimum is %1", 335, SFINAE_Suppress, false, false, 2)
-DIAG(warn_floatingpoint_eq, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparing floating point with == or != is unsafe", 215, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_begin_end_types_differ, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'begin' and 'end' returning different types (%0 and %1) is incompatible with C++ standards before C++17", 99, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_const_reference_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 %diff{has type $ but is initialized with type $| is initialized with a value of a different type}1,2 resulting in a copy", 527, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 of type %1 creates a copy from type %2", 527, SFINAE_Suppress, false, false, 2)
-DIAG(warn_for_range_variable_always_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 is always a copy because the range of type %1 does not return a reference", 527, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_P_no_precision, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%%P' format specifier without precision", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_argument_needs_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_conversion_argument_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_conversion_argument_type_mismatch_pedantic, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 224, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_invalid_annotation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%0' format specifier annotation outside of os_log()/os_trace()", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_invalid_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid conversion specifier '%0'", 221, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_invalid_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid position specified for %select{field width|field precision}0", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_mix_positional_nonpositional_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot mix positional and non-positional arguments in format string", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_non_standard, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' %select{length modifier|conversion specifier}1 is not supported by ISO C", 222, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_non_standard_conversion_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using length modifier '%0' with conversion specifier '%1' is not supported by ISO C", 222, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_non_standard_positional_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "positional arguments are not supported by ISO C", 222, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_nonliteral, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "format string is not a string literal", 223, SFINAE_Suppress, false, false, 2)
-DIAG(warn_format_nonliteral_noargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not a string literal (potentially insecure)", 225, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_nonsensical_length, CLASS_WARNING, (unsigned)diag::Severity::Warning, "length modifier '%0' results in undefined behavior or no effect with '%1' conversion specifier", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_string_is_wide_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string should not be a wide string", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_format_zero_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "position arguments in format strings start counting at 1 (not 0)", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_forward_class_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of forward class %0 of a typedef name of an object type is ignored", 445, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_excludes_mutex, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot call function '%1' while %0 '%2' is held", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_fun_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 631, SFINAE_Suppress, false, false, 2)
-DIAG(warn_func_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instantiation of function %q0 required here, but no definition is available", 644, SFINAE_Suppress, false, false, 2)
-DIAG(warn_function_def_in_objc_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function definition inside an Objective-C container is deprecated", 231, SFINAE_Suppress, false, false, 2)
-DIAG(warn_function_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 overrides a member function but is not marked 'override'", 299, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gc_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Objective-C GC does not allow weak variables on the stack", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_global_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global constructor", 234, SFINAE_Suppress, false, false, 2)
-DIAG(warn_global_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global destructor", 234, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gnu_inline_attribute_requires_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'gnu_inline' attribute requires function to be marked 'inline', attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_gnu_null_ptr_arith, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", 432, SFINAE_Suppress, false, false, 2)
-DIAG(warn_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing variable %1 by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 632, SFINAE_Suppress, false, false, 2)
-DIAG(warn_iboutlet_object_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", 316, SFINAE_Suppress, false, false, 2)
-DIAG(warn_iboutletcollection_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "IBOutletCollection properties should be copy/strong and not assign", 316, SFINAE_Suppress, false, false, 2)
-DIAG(warn_identity_field_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{field|instance variable}0 to itself", 552, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ignored_ms_inheritance, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inheritance model ignored on %select{primary template|partial specialization}0", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_illegal_constant_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "size of static array must be an integer constant expression", 500, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_bitfield_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit truncation from %2 to bit-field changes value from %0 to %1", 57, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_bool_to_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initialization of pointer of type %0 to null from a constant boolean expression", 62, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_complex_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion discards imaginary component: %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_different_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from enumeration type %0 to different enumeration type %1", 197, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_double_promotion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion increases floating-point precision: %0 to %1", 180, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_float_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns floating-point number into integer: %0 to %1", 214, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses floating-point precision: %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_result_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion when assigning computation result loses floating-point precision: %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion of out of range value from %0 to %1 changes value from %2 to %3", 216, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_float_to_integer_zero, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes non-zero value from %2 to %3", 217, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_floating_point_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion turns floating-point number into bool: %0 to %1", 273, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impcast_integer_64_32, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 571, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %2 to %3 changes value from %0 to %1", 129, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_sign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion changes signedness: %0 to %1", 573, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_integer_sign_conditional, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "operand of ? changes signedness: %0 to %1", 573, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_literal_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 to %1 changes value from %2 to %3", 334, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_null_pointer_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of %select{NULL|nullptr}0 constant to %1", 430, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_objective_c_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit boolean conversion of Objective-C object literal always evaluates to true", 448, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_pointer_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "address of%select{| function| array}0 '%1' will always evaluate to 'true'", 504, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_string_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns string literal into bool: %0 to %1", 603, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impcast_vector_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns vector to scalar: %0 to %1", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_impl_required_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", 457, SFINAE_Suppress, false, false, 2)
-DIAG(warn_impl_required_in_category_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 457, SFINAE_Suppress, false, false, 2)
+DIAG(warn_equality_with_extra_parens, CLASS_WARNING, (unsigned)diag::Severity::Warning, "equality comparison with extraneous parentheses", 503, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exception_caught_by_earlier_handler, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exception of type %0 will be caught by earlier handler", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_exception_spec_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dynamic exception specifications are deprecated", 159, SFINAE_Suppress, false, false, 27)
+DIAG(warn_exit_time_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires an exit-time destructor", 204, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_lock_held_on_loop, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at start of each loop", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_expecting_locked, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "expecting %0 '%1' to be held at the end of function", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_after_specialization, CLASS_WARNING, (unsigned)diag::Severity::Warning, "explicit instantiation of %0 that occurs after an explicit specialization has no effect", 315, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_inline_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation cannot be 'inline'", 74, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_must_be_global_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 must occur at global scope", 74, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_out_of_scope_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %0 not in a namespace enclosing %1", 74, SFINAE_Suppress, false, false, 2)
+DIAG(warn_explicit_instantiation_unqualified_wrong_namespace_0x, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit instantiation of %q0 must occur in namespace %1", 74, SFINAE_Suppress, false, false, 2)
+DIAG(warn_extern_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'extern' variable has an initializer", 210, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void function", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control reaches end of non-void lambda", 557, SFINAE_Suppress, false, false, 3)
+DIAG(warn_falloff_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function declared 'noreturn' should not return", 326, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fallthrough_attr_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "fallthrough annotation in unreachable code", 281, SFINAE_Suppress, false, false, 2)
+DIAG(warn_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 is uninitialized when used here", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_flag_enum_constant_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "enumeration value %0 is out of range of flags in enumeration type %1", 216, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too large for type %0; maximum is %1", 342, SFINAE_Suppress, false, false, 2)
+DIAG(warn_float_underflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "magnitude of floating-point constant too small for type %0; minimum is %1", 342, SFINAE_Suppress, false, false, 2)
+DIAG(warn_floatingpoint_eq, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparing floating point with == or != is unsafe", 219, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_begin_end_types_differ, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'begin' and 'end' returning different types (%0 and %1) is incompatible with C++ standards before C++17", 100, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_const_reference_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 %diff{has type $ but is initialized with type $| is initialized with a value of a different type}1,2 resulting in a copy", 538, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 of type %1 creates a copy from type %2", 538, SFINAE_Suppress, false, false, 2)
+DIAG(warn_for_range_variable_always_copy, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop variable %0 is always a copy because the range of type %1 does not return a reference", 538, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_P_no_precision, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%%P' format specifier without precision", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_argument_needs_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_argument_needs_cast_pedantic, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{values of type|enum values with underlying type}2 '%0' should not be used as format arguments; add an explicit cast to %1 instead", 228, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_conversion_argument_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_conversion_argument_type_mismatch_pedantic, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "format specifies type %0 but the argument has %select{type|underlying type}2 %1", 228, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_invalid_annotation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using '%0' format specifier annotation outside of os_log()/os_trace()", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_invalid_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid conversion specifier '%0'", 225, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_invalid_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid position specified for %select{field width|field precision}0", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_mix_positional_nonpositional_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot mix positional and non-positional arguments in format string", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_non_standard, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' %select{length modifier|conversion specifier}1 is not supported by ISO C", 226, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_conversion_spec, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using length modifier '%0' with conversion specifier '%1' is not supported by ISO C", 226, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_non_standard_positional_arg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "positional arguments are not supported by ISO C", 226, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "format string is not a string literal", 227, SFINAE_Suppress, false, false, 2)
+DIAG(warn_format_nonliteral_noargs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not a string literal (potentially insecure)", 229, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_nonsensical_length, CLASS_WARNING, (unsigned)diag::Severity::Warning, "length modifier '%0' results in undefined behavior or no effect with '%1' conversion specifier", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_string_is_wide_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string should not be a wide string", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_format_zero_positional_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "position arguments in format strings start counting at 1 (not 0)", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_forward_class_redefinition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of forward class %0 of a typedef name of an object type is ignored", 454, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_excludes_mutex, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "cannot call function '%1' while %0 '%2' is held", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_fun_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "calling function %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 647, SFINAE_Suppress, false, false, 2)
+DIAG(warn_func_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "instantiation of function %q0 required here, but no definition is available", 660, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_def_in_objc_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function definition inside an Objective-C container is deprecated", 236, SFINAE_Suppress, false, false, 2)
+DIAG(warn_function_marked_not_override_overriding, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 overrides a member function but is not marked 'override'", 306, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gc_attribute_weak_on_local, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Objective-C GC does not allow weak variables on the stack", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gcc_ignores_type_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "GCC does not allow the %0 attribute to be written on a type", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_constructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global constructor", 240, SFINAE_Suppress, false, false, 2)
+DIAG(warn_global_destructor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration requires a global destructor", 240, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_inline_attribute_requires_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'gnu_inline' attribute requires function to be marked 'inline', attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_gnu_null_ptr_arith, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "arithmetic on a null pointer treated as a cast from integer to pointer is a GNU extension", 441, SFINAE_Suppress, false, false, 2)
+DIAG(warn_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing variable %1 by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutlet_object_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{instance variable|property}2 with %0 attribute must be an object type (invalid %1)", 323, SFINAE_Suppress, false, false, 2)
+DIAG(warn_iboutletcollection_property_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "IBOutletCollection properties should be copy/strong and not assign", 323, SFINAE_Suppress, false, false, 2)
+DIAG(warn_identity_field_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assigning %select{field|instance variable}0 to itself", 564, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ignored_ms_inheritance, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inheritance model ignored on %select{primary template|partial specialization}0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_illegal_constant_array_size, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "size of static array must be an integer constant expression", 510, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_bitfield_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit truncation from %2 to bit-field changes value from %0 to %1", 58, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_bool_to_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initialization of pointer of type %0 to null from a constant boolean expression", 63, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_complex_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion discards imaginary component: %0 to %1", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_different_enum_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from enumeration type %0 to different enumeration type %1", 201, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_double_promotion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion increases floating-point precision: %0 to %1", 184, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_float_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns floating-point number into integer: %0 to %1", 218, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses floating-point precision: %0 to %1", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_result_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion when assigning computation result loses floating-point precision: %0 to %1", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes value from %2 to %3", 220, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion of out of range value from %0 to %1 is undefined", 220, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_float_to_integer_zero, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from %0 to %1 changes non-zero value from %2 to %3", 221, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_floating_point_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion turns floating-point number into bool: %0 to %1", 279, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impcast_integer_64_32, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 584, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_precision, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion loses integer precision: %0 to %1", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_precision_constant, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %2 to %3 changes value from %0 to %1", 131, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_sign, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion changes signedness: %0 to %1", 586, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_integer_sign_conditional, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "operand of ? changes signedness: %0 to %1", 586, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_literal_float_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion from %0 to %1 changes value from %2 to %3", 341, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_literal_float_to_integer_out_of_range, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of out of range value from %0 to %1 is undefined", 341, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_null_pointer_to_integer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit conversion of %select{NULL|nullptr}0 constant to %1", 439, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_objective_c_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "implicit boolean conversion of Objective-C object literal always evaluates to true", 457, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_pointer_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "address of%select{| function| array}0 '%1' will always evaluate to 'true'", 514, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_string_literal_to_bool, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns string literal into bool: %0 to %1", 617, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impcast_vector_scalar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion turns vector to scalar: %0 to %1", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_impl_required_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this class implementation", 466, SFINAE_Suppress, false, false, 2)
+DIAG(warn_impl_required_in_category_for_class_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 466, SFINAE_Suppress, false, false, 2)
 DIAG(warn_implements_nscopying, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default assign attribute on property %0 which implements NSCopying protocol is not appropriate with -fobjc-gc[-only]", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic by default", 272, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_decl_requires_sysheader, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of built-in function '%1' requires inclusion of the header <%0>", 68, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicit_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit declaration of function %0", 277, SFINAE_Suppress, false, false, 2)
-DIAG(warn_implicitly_retains_self, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior", 279, SFINAE_Suppress, false, false, 2)
-DIAG(warn_inaccessible_base_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct base %0 is inaccessible due to ambiguity:%1", 283, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incompatible_exception_specs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target exception specification is not superset of source", 286, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_atomic_property, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "property is assumed atomic by default", 278, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_decl_requires_sysheader, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration of built-in function '%1' requires inclusion of the header <%0>", 69, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicit_function_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit declaration of function %0", 283, SFINAE_Suppress, false, false, 2)
+DIAG(warn_implicitly_retains_self, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block implicitly retains 'self'; explicitly mention 'self' to indicate this is intended behavior", 285, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inaccessible_base_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct base %0 is inaccessible due to ambiguity:%1", 289, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incompatible_exception_specs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "target exception specification is not superset of source", 292, SFINAE_Suppress, false, false, 2)
 DIAG(warn_incompatible_qualified_id, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{%diff{assigning to $ from incompatible type $|assigning to type from incompatible type}0,1|%diff{passing $ to parameter of incompatible type $|passing type to parameter of incompatible type}0,1|%diff{returning $ from a function with incompatible result type $|returning type from a function with incompatible result type}0,1|%diff{converting $ to incompatible type $|converting type to incompatible type}0,1|%diff{initializing $ with an expression of incompatible type $|initializing type with an expression of incompatible type}0,1|%diff{sending $ to parameter of incompatible type $|sending type to parameter of incompatible type}0,1|%diff{casting $ to incompatible type $|casting type to incompatible type}0,1}2", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incompatible_vectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 709, SFINAE_Suppress, false, false, 2)
-DIAG(warn_incomplete_encoded_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "encoding of %0 type is incomplete because %1 component has unknown encoding", 193, SFINAE_Suppress, false, false, 2)
-DIAG(warn_increment_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incrementing expression of type bool is deprecated and incompatible with C++17", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_incompatible_vectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "incompatible vector types %select{%diff{assigning to $ from $|assigning to different types}0,1|%diff{passing $ to parameter of type $|passing to parameter of different type}0,1|%diff{returning $ from a function with result type $|returning from function with different return type}0,1|%diff{converting $ to type $|converting between types}0,1|%diff{initializing $ with an expression of type $|initializing with expression of different type}0,1|%diff{sending $ to parameter of type $|sending to parameter of different type}0,1|%diff{casting $ to type $|casting between types}0,1}2", 726, SFINAE_Suppress, false, false, 2)
+DIAG(warn_incomplete_encoded_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "encoding of %0 type is incomplete because %1 component has unknown encoding", 197, SFINAE_Suppress, false, false, 2)
+DIAG(warn_increment_bool, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incrementing expression of type bool is deprecated and incompatible with C++17", 161, SFINAE_Suppress, false, false, 27)
 DIAG(warn_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on a typedef only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
-DIAG(warn_indirection_through_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "indirection of non-volatile null pointer will be deleted, not trap", 431, SFINAE_Suppress, false, false, 2)
-DIAG(warn_infinite_recursive_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "all paths through this function will call itself", 301, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_constant_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", 81, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_type_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 cannot be narrowed to %1 in initializer list in C++11", 81, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_list_variable_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", 81, SFINAE_Suppress, false, false, 2)
-DIAG(warn_init_ptr_member_to_parameter_addr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializing pointer member %0 with the stack address of parameter %1", 144, SFINAE_Suppress, false, false, 2)
-DIAG(warn_initializer_out_of_order, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", 538, SFINAE_Suppress, false, false, 2)
-DIAG(warn_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializer overrides prior initialization of this subobject", 303, SFINAE_Suppress, false, false, 2)
+DIAG(warn_indirection_through_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "indirection of non-volatile null pointer will be deleted, not trap", 440, SFINAE_Suppress, false, false, 2)
+DIAG(warn_infinite_recursive_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "all paths through this function will call itself", 308, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_constant_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "constant expression evaluates to %0 which cannot be narrowed to type %1 in C++11", 82, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_type_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 cannot be narrowed to %1 in initializer list in C++11", 82, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_list_variable_narrowing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-constant-expression cannot be narrowed from type %0 to %1 in initializer list in C++11", 82, SFINAE_Suppress, false, false, 2)
+DIAG(warn_init_ptr_member_to_parameter_addr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializing pointer member %0 with the stack address of %select{variable|parameter}2 %1", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_out_of_order, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{field|base class}0 %1 will be initialized after %select{field|base}2 %3", 549, SFINAE_Suppress, false, false, 2)
+DIAG(warn_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "initializer overrides prior initialization of this subobject", 310, SFINAE_Suppress, false, false, 2)
 DIAG(warn_inline_namespace_reopened_noninline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline namespace reopened as a non-inline namespace", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id')", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_instance_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id'); did you mean %objcinstance2?", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_instance_method_on_class_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 found instead of class method %1", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_int_to_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 311, SFINAE_Suppress, false, false, 2)
-DIAG(warn_int_to_void_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 312, SFINAE_Suppress, false, false, 2)
-DIAG(warn_internal_linkage_local_storage, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'internal_linkage' attribute on a non-static local variable is ignored", 265, SFINAE_Suppress, false, false, 2)
+DIAG(warn_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id')", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_not_found_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %objcinstance0 not found (return type defaults to 'id'); did you mean %objcinstance2?", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_instance_method_on_class_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 found instead of class method %1", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 318, SFINAE_Suppress, false, false, 2)
+DIAG(warn_int_to_void_pointer_cast, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cast to %1 from smaller integer type %0", 319, SFINAE_Suppress, false, false, 2)
+DIAG(warn_internal_linkage_local_storage, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'internal_linkage' attribute on a non-static local variable is ignored", 271, SFINAE_Suppress, false, false, 2)
 DIAG(warn_invalid_asm_cast_lvalue, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid use of a cast in an inline asm context requiring an l-value: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future", 0, SFINAE_Suppress, false, false, 12)
-DIAG(warn_invalid_capability_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid capability name '%0'; capability name must be 'mutex' or 'role'", 628, SFINAE_Suppress, false, false, 2)
-DIAG(warn_invalid_initializer_from_system_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid constructor form class in system header, should not be explicit", 317, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ivar_use_hidden, CLASS_WARNING, (unsigned)diag::Severity::Warning, "local declaration of %0 hides instance variable", 563, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ivars_in_interface, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration of instance variables in the interface is deprecated", 446, SFINAE_Suppress, false, false, 2)
-DIAG(warn_jump_out_of_seh_finally, CLASS_WARNING, (unsigned)diag::Severity::Warning, "jump out of __finally block has undefined behavior", 327, SFINAE_Suppress, false, false, 2)
-DIAG(warn_kern_is_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored 'inline' attribute on kernel function %0", 141, SFINAE_Suppress, false, false, 2)
-DIAG(warn_kern_is_method, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "kernel function %0 is a member function; this may not be accepted by nvcc", 141, SFINAE_Suppress, false, false, 2)
-DIAG(warn_lock_exclusive_and_shared, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is acquired exclusively and shared in the same scope", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_lock_some_predecessors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is not held on every path through here", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_and_in_logical_or, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'&&' within '||'", 338, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_instead_of_bitwise, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of logical '%0' with constant operand", 130, SFINAE_Suppress, false, false, 2)
-DIAG(warn_logical_not_on_lhs_of_check, CLASS_WARNING, (unsigned)diag::Severity::Warning, "logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", 337, SFINAE_Suppress, false, false, 2)
-DIAG(warn_loop_ctrl_binds_to_inner, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is bound to current loop, GCC binds it to the enclosing loop", 233, SFINAE_Suppress, false, false, 2)
-DIAG(warn_loop_state_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "state of variable '%0' must match at the entry and exit of loop", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_one_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only one parameter on 'main' declaration", 342, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_redefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable named 'main' with external linkage has undefined behavior", 342, SFINAE_Suppress, false, false, 2)
-DIAG(warn_main_returns_bool_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bool literal returned from 'main'", 342, SFINAE_Suppress, false, false, 2)
-DIAG(warn_max_unsigned_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", 346, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void function", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_maybe_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void lambda", 544, SFINAE_Suppress, false, false, 3)
-DIAG(warn_maybe_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 may be uninitialized when %select{used here|captured by block}1", 127, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_capability_name, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid capability name '%0'; capability name must be 'mutex' or 'role'", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_invalid_initializer_from_system_header, CLASS_WARNING, (unsigned)diag::Severity::Warning, "invalid constructor form class in system header, should not be explicit", 324, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivar_use_hidden, CLASS_WARNING, (unsigned)diag::Severity::Warning, "local declaration of %0 hides instance variable", 576, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ivars_in_interface, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "declaration of instance variables in the interface is deprecated", 455, SFINAE_Suppress, false, false, 2)
+DIAG(warn_jump_out_of_seh_finally, CLASS_WARNING, (unsigned)diag::Severity::Warning, "jump out of __finally block has undefined behavior", 334, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignored 'inline' attribute on kernel function %0", 143, SFINAE_Suppress, false, false, 2)
+DIAG(warn_kern_is_method, CLASS_EXTENSION, (unsigned)diag::Severity::Ignored, "kernel function %0 is a member function; this may not be accepted by nvcc", 143, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_exclusive_and_shared, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is acquired exclusively and shared in the same scope", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_lock_some_predecessors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is not held on every path through here", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_and_in_logical_or, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'&&' within '||'", 345, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_instead_of_bitwise, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of logical '%0' with constant operand", 132, SFINAE_Suppress, false, false, 2)
+DIAG(warn_logical_not_on_lhs_of_check, CLASS_WARNING, (unsigned)diag::Severity::Warning, "logical not is only applied to the left hand side of this %select{comparison|bitwise operator}0", 344, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_ctrl_binds_to_inner, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is bound to current loop, GCC binds it to the enclosing loop", 239, SFINAE_Suppress, false, false, 2)
+DIAG(warn_loop_state_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "state of variable '%0' must match at the entry and exit of loop", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_one_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only one parameter on 'main' declaration", 349, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_redefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable named 'main' with external linkage has undefined behavior", 349, SFINAE_Suppress, false, false, 2)
+DIAG(warn_main_returns_bool_literal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bool literal returned from 'main'", 349, SFINAE_Suppress, false, false, 2)
+DIAG(warn_max_unsigned_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the max of %select{a value and unsigned zero|unsigned zero and a value}0 is always equal to the other value", 353, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_coroutine, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of coroutine; which is undefined behavior because the promise type %0 does not declare 'return_void()'", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_function, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void function", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_maybe_falloff_nonvoid_lambda, CLASS_WARNING, (unsigned)diag::Severity::Warning, "control may reach end of non-void lambda", 557, SFINAE_Suppress, false, false, 3)
+DIAG(warn_maybe_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 may be uninitialized when %select{used here|captured by block}1", 129, SFINAE_Suppress, false, false, 2)
 DIAG(warn_maynot_respond, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may not respond to %1", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 363, SFINAE_Suppress, false, false, 2)
-DIAG(warn_memcpy_chk_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 will always overflow destination buffer", 67, SFINAE_Suppress, false, false, 2)
-DIAG(warn_memsize_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call is a comparison", 347, SFINAE_Suppress, false, false, 2)
-DIAG(warn_messaging_unqualified_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "messaging unqualified id", 450, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mips_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "MIPS 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}0", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_availability, CLASS_WARNING, (unsigned)diag::Severity::Warning, "availability does not match previous declaration", 50, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_availability_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)", 50, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_availability_override_unavail, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available", 50, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_delete_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete%select{|[]}0' applied to a pointer that was allocated with 'new%select{[]|}0'; did you mean 'delete%select{[]|}0'?", 378, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mismatched_nullability_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nullability specifier %0 conflicts with existing specifier %1", 433, SFINAE_Suppress, false, false, 19)
-DIAG(warn_mismatched_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "section does not match previous declaration", 548, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_braces, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "suggest braces around initialization of subobject", 382, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0", 609, SFINAE_Suppress, false, false, 2)
+DIAG(warn_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 371, SFINAE_Suppress, false, false, 2)
+DIAG(warn_memcpy_chk_overflow, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 will always overflow destination buffer", 68, SFINAE_Suppress, false, false, 2)
+DIAG(warn_memsize_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call is a comparison", 355, SFINAE_Suppress, false, false, 2)
+DIAG(warn_messaging_unqualified_id, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "messaging unqualified id", 459, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mips_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "MIPS 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability, CLASS_WARNING, (unsigned)diag::Severity::Warning, "availability does not match previous declaration", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }4method %select{introduced after|deprecated before|obsoleted before}0 %select{the protocol method it implements|overridden method}4 on %1 (%2 vs. %3)", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_availability_override_unavail, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|overriding }1method cannot be unavailable on %0 when %select{the protocol method it implements|its overridden method}1 is available", 51, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_delete_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'delete%select{|[]}0' applied to a pointer that was allocated with 'new%select{[]|}0'; did you mean 'delete%select{[]|}0'?", 386, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mismatched_nullability_attr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "nullability specifier %0 conflicts with existing specifier %1", 442, SFINAE_Suppress, false, false, 19)
+DIAG(warn_mismatched_section, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{codeseg|section}0 does not match previous declaration", 560, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_braces, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "suggest braces around initialization of subobject", 390, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_case, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%plural{1:enumeration value %1 not handled in switch|2:enumeration values %1 and %2 not handled in switch|3:enumeration values %1, %2, and %3 not handled in switch|:%0 enumeration values not handled in switch: %1, %2, %3...}0", 625, SFINAE_Suppress, false, false, 2)
 DIAG(warn_missing_case_for_condition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no case matching constant switch condition '%0'", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_explicit_synthesis, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "auto property synthesis is synthesizing property not explicitly synthesized", 452, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_field_initializers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "missing field %0 initializer", 385, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string missing", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_missing_method_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method has no return type specified; defaults to 'id'", 388, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_prototype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous prototype for function %0", 392, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_sentinel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing sentinel in %select{function call|method dispatch|block call}0", 555, SFINAE_Suppress, false, false, 2)
-DIAG(warn_missing_variable_declarations, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous extern declaration for non-static variable %0", 395, SFINAE_Suppress, false, false, 2)
-DIAG(warn_mixed_sign_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparison of integers of different signs: %0 and %1", 572, SFINAE_Suppress, false, false, 2)
-DIAG(warn_modifying_shadowing_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "modifying constructor parameter %0 that shadows a field of %1", 562, SFINAE_Suppress, false, false, 2)
-DIAG(warn_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple methods named %0 found", 454, SFINAE_Suppress, false, false, 2)
-DIAG(warn_multiple_selectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "several methods with selector %0 of mismatched types are found for the @selector expression", 550, SFINAE_Suppress, false, false, 2)
-DIAG(warn_namespace_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 208, SFINAE_Suppress, false, false, 2)
-DIAG(warn_neon_vector_initializer_non_portable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "vector initializers are not compatible with NEON intrinsics in big endian mode", 425, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_autosynthesis_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it is 'readwrite' but it will be synthesized 'readonly' via another property", 461, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_autosynthesis_shared_ivar_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", 461, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_explicit_synthesis, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "auto property synthesis is synthesizing property not explicitly synthesized", 461, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_field_initializers, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "missing field %0 initializer", 393, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_format_string, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string missing", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_missing_method_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "method has no return type specified; defaults to 'id'", 396, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_prototype, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous prototype for function %0", 400, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_sentinel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing sentinel in %select{function call|method dispatch|block call}0", 568, SFINAE_Suppress, false, false, 2)
+DIAG(warn_missing_variable_declarations, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no previous extern declaration for non-static variable %0", 403, SFINAE_Suppress, false, false, 2)
+DIAG(warn_mixed_sign_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "comparison of integers of different signs: %0 and %1", 585, SFINAE_Suppress, false, false, 2)
+DIAG(warn_modifying_shadowing_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "modifying constructor parameter %0 that shadows a field of %1", 575, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple methods named %0 found", 463, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiple_selectors, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "several methods with selector %0 of mismatched types are found for the @selector expression", 562, SFINAE_Suppress, false, false, 2)
+DIAG(warn_multiversion_duplicate_entries, CLASS_WARNING, (unsigned)diag::Severity::Warning, "CPU list contains duplicate entries; attribute ignored", 237, SFINAE_Suppress, false, false, 0)
+DIAG(warn_namespace_member_extra_qualification, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extra qualification on member %0", 212, SFINAE_Suppress, false, false, 2)
+DIAG(warn_neon_vector_initializer_non_portable, CLASS_WARNING, (unsigned)diag::Severity::Warning, "vector initializers are not compatible with NEON intrinsics in big endian mode", 433, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_initializer_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array backing %select{initializer list subobject of the allocated object|the allocated initializer list}0 will be destroyed at the end of the full-expression", 148, SFINAE_Suppress, false, false, 2)
+DIAG(warn_new_dangling_reference, CLASS_WARNING, (unsigned)diag::Severity::Warning, "temporary bound to reference member of allocated object will be destroyed at the end of the full-expression", 147, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it is 'readwrite' but it will be synthesized 'readonly' via another property", 470, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_autosynthesis_shared_ivar_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "auto property synthesis will not synthesize property %0 because it cannot share an ivar with another synthesized property", 470, SFINAE_Suppress, false, false, 2)
 DIAG(warn_no_constructor_for_refconst, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{struct|interface|union|class|enum}0 %1 does not declare any constructor to initialize its non-modifiable members", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_underlying_type_specified_for_enum_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", 575, SFINAE_Suppress, false, false, 2)
-DIAG(warn_no_unlock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is still held at the end of function", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nocf_check_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nocf_check' attribute ignored; use -fcf-protection to enable the attribute", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_contravariant_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0: %1 vs %2", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_contravariant_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in implementation of %0: %1 vs %2", 348, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_covariant_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0: %1 vs %2", 488, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_covariant_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in implementation of %0: %1 vs %2", 348, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_literal_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression which evaluates to zero treated as a null pointer constant of type %0", 416, SFINAE_Suppress, false, false, 24)
-DIAG(warn_non_pod_vararg_with_format_string, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 419, SFINAE_Suppress, false, false, 2)
-DIAG(warn_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has virtual functions but non-virtual destructor", 420, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nonnull_expr_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of nonnull %select{function call|parameter}0 '%1' %select{not |}2equal to a null pointer is '%select{true|false}2' on first encounter", 620, SFINAE_Suppress, false, false, 2)
-DIAG(warn_noreturn_function_has_return_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function %0 declared 'noreturn' should not return", 319, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_a_doxygen_trailing_member_comment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "not a Doxygen trailing comment", 174, SFINAE_Suppress, false, false, 25)
+DIAG(warn_no_underlying_type_specified_for_enum_bitfield, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "enums in the Microsoft ABI are signed integers by default; consider giving the enum %0 an unsigned underlying type to make this code portable", 588, SFINAE_Suppress, false, false, 2)
+DIAG(warn_no_unlock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 '%1' is still held at the end of function", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nocf_check_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'nocf_check' attribute ignored; use -fcf-protection to enable the attribute", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_contravariant_overriding_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in declaration of %0: %1 vs %2", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_contravariant_param_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting parameter types in implementation of %0: %1 vs %2", 356, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_overriding_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in declaration of %0: %1 vs %2", 498, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_covariant_ret_types, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "conflicting return type in implementation of %0: %1 vs %2", 356, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_literal_null_pointer, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression which evaluates to zero treated as a null pointer constant of type %0", 424, SFINAE_Suppress, false, false, 24)
+DIAG(warn_non_pod_vararg_with_format_string, CLASS_WARNING, (unsigned)diag::Severity::Error, "cannot pass %select{non-POD|non-trivial}0 object of type %1 to variadic %select{function|block|method|constructor}2; expected type from format string was %3", 427, SFINAE_Suppress, false, false, 2)
+DIAG(warn_non_virtual_dtor, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has virtual functions but non-virtual destructor", 428, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nonnull_expr_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of nonnull %select{function call|parameter}0 '%1' %select{not |}2equal to a null pointer is '%select{true|false}2' on first encounter", 636, SFINAE_Suppress, false, false, 2)
+DIAG(warn_noreturn_function_has_return_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "function %0 declared 'noreturn' should not return", 326, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_a_doxygen_trailing_member_comment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "not a Doxygen trailing comment", 178, SFINAE_Suppress, false, false, 25)
 DIAG(warn_not_compound_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of unary operator that may be intended as compound assignment (%0=)", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_enough_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "not enough variable arguments in %0 declaration to fit a sentinel", 555, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_in_enum, CLASS_WARNING, (unsigned)diag::Severity::Warning, "case value not in enumerated type %0", 609, SFINAE_Suppress, false, false, 2)
-DIAG(warn_not_in_enum_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "integer constant not in range of enumerated type %0", 38, SFINAE_Suppress, false, false, 2)
-DIAG(warn_npot_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren't a power of two", 289, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ns_attribute_wrong_parameter_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ns_attribute_wrong_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nsconsumed_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_consumed attribute on its parameter", 426, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_enough_argument, CLASS_WARNING, (unsigned)diag::Severity::Warning, "not enough variable arguments in %0 declaration to fit a sentinel", 568, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_in_enum, CLASS_WARNING, (unsigned)diag::Severity::Warning, "case value not in enumerated type %0", 625, SFINAE_Suppress, false, false, 2)
+DIAG(warn_not_in_enum_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "integer constant not in range of enumerated type %0", 37, SFINAE_Suppress, false, false, 2)
+DIAG(warn_npot_ms_struct, CLASS_WARNING, (unsigned)diag::Severity::Error, "ms_struct may not produce Microsoft-compatible layouts with fundamental data types with sizes that aren't a power of two", 295, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_parameter_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{Objective-C object|pointer|pointer-to-CF-pointer}1 parameters", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ns_attribute_wrong_return_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute only applies to %select{functions|methods|properties}1 that return %select{an Objective-C object|a pointer|a non-retainable pointer}2", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsconsumed_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_consumed attribute on its parameter", 435, SFINAE_Suppress, false, false, 2)
 DIAG(warn_nsobject_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'NSObject' attribute may be put on a typedef only; attribute is ignored", 6, SFINAE_Suppress, false, false, 2)
-DIAG(warn_nsreturns_retained_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 427, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null passed to a callee that requires a non-null argument", 421, SFINAE_Suppress, false, false, 28)
-DIAG(warn_null_in_arithmetic_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of NULL in arithmetic operation", 428, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_in_comparison_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", 428, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_pointer_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of %select{address of|function|array}0 '%1' %select{not |}2equal to a null pointer is always %select{true|false}2", 620, SFINAE_Suppress, false, false, 2)
-DIAG(warn_null_resettable_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "synthesized setter %0 for null_resettable property %1 does not handle nil", 433, SFINAE_Suppress, false, false, 19)
-DIAG(warn_null_ret, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null returned from %select{function|method}0 that requires a non-null return value", 421, SFINAE_Suppress, false, false, 28)
-DIAG(warn_nullability_declspec, CLASS_WARNING, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", 436, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_inferred_on_nested_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inferring '_Nonnull' for pointer type within %select{array|reference}0 is deprecated", 438, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_lost, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from nullable pointer %0 to non-nullable pointer type %1", 439, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 434, SFINAE_Suppress, false, false, 19)
-DIAG(warn_nullability_missing_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 435, SFINAE_Suppress, false, false, 19)
-DIAG(warn_objc_cdirective_format_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", 139, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_circular_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to %1 might cause circular dependency in container", 441, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_collection_literal_element, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", 448, SFINAE_Suppress, false, false, 24)
-DIAG(warn_objc_designated_init_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer missing a 'super' call to a designated initializer of the super class", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_designated_init_non_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer invoked a non-designated initializer", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_designated_init_non_super_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer should only invoke a designated initializer on 'super'", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_implementation_missing_designated_init_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method override for the designated initializer of the superclass %objcinstance0 not found", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_invalid_bridge, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 bridges to %1, not %2", 65, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_invalid_bridge_to_cf, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 cannot bridge to %1", 65, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_isa_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assignment to Objective-C's isa is deprecated in favor of object_setClass()", 159, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_isa_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct access to Objective-C's isa is deprecated in favor of object_getClass()", 159, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", 447, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method possibly missing a [super %0] call", 453, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_cxx_catch_fragile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot catch an exception thrown with @throw in C++ in the non-unified exception model", 456, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_masking, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 160, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_pointer_masking_performSelector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 161, SFINAE_Suppress, false, false, 2)
+DIAG(warn_nsreturns_retained_attribute_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overriding method has mismatched ns_returns_%select{not_retained|retained}0 attributes", 436, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null passed to a callee that requires a non-null argument", 429, SFINAE_Suppress, false, false, 28)
+DIAG(warn_null_in_arithmetic_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of NULL in arithmetic operation", 437, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_in_comparison_operation, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison between NULL and non-pointer %select{(%1 and NULL)|(NULL and %1)}0", 437, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_pointer_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "comparison of %select{address of|function|array}0 '%1' %select{not |}2equal to a null pointer is always %select{true|false}2", 636, SFINAE_Suppress, false, false, 2)
+DIAG(warn_null_resettable_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "synthesized setter %0 for null_resettable property %1 does not handle nil", 442, SFINAE_Suppress, false, false, 19)
+DIAG(warn_null_ret, CLASS_WARNING, (unsigned)diag::Severity::Warning, "null returned from %select{function|method}0 that requires a non-null return value", 429, SFINAE_Suppress, false, false, 28)
+DIAG(warn_nullability_declspec, CLASS_WARNING, (unsigned)diag::Severity::Error, "nullability specifier %0 cannot be applied to non-pointer type %1; did you mean to apply the specifier to the %select{pointer|block pointer|member pointer|function pointer|member function pointer}2?", 445, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_inferred_on_nested_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inferring '_Nonnull' for pointer type within %select{array|reference}0 is deprecated", 447, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_lost, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implicit conversion from nullable pointer %0 to non-nullable pointer type %1", 448, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{pointer|block pointer|member pointer}0 is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 443, SFINAE_Suppress, false, false, 19)
+DIAG(warn_nullability_missing_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array parameter is missing a nullability type specifier (_Nonnull, _Nullable, or _Null_unspecified)", 444, SFINAE_Suppress, false, false, 19)
+DIAG(warn_objc_cdirective_format_string, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using %0 directive in %select{NSString|CFString}1 which is being passed as a formatting argument to the formatting %select{method|CFfunction}2", 141, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_circular_container, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to %1 might cause circular dependency in container", 450, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_collection_literal_element, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object of type %0 is not compatible with %select{array element type|dictionary key type|dictionary value type}1 %2", 457, SFINAE_Suppress, false, false, 24)
+DIAG(warn_objc_designated_init_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer missing a 'super' call to a designated initializer of the super class", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer invoked a non-designated initializer", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_designated_init_non_super_designated_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "designated initializer should only invoke a designated initializer on 'super'", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_implementation_missing_designated_init_override, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method override for the designated initializer of the superclass %objcinstance0 not found", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 bridges to %1, not %2", 66, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_invalid_bridge_to_cf, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 cannot bridge to %1", 66, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_assign, CLASS_WARNING, (unsigned)diag::Severity::Warning, "assignment to Objective-C's isa is deprecated in favor of object_setClass()", 162, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_isa_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct access to Objective-C's isa is deprecated in favor of object_getClass()", 162, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of %select{an array literal|a dictionary literal|a numeric literal|a boxed expression|}0 has undefined behavior", 456, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_missing_super_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method possibly missing a [super %0] call", 462, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_cxx_catch_fragile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot catch an exception thrown with @throw in C++ in the non-unified exception model", 465, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 163, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_pointer_masking_performSelector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "bitmasking for introspection of Objective-C object pointers is strongly discouraged", 164, SFINAE_Suppress, false, false, 2)
 DIAG(warn_objc_precise_lifetime_meaningless, CLASS_ERROR, (unsigned)diag::Severity::Error, "objc_precise_lifetime is not meaningful for %select{__unsafe_unretained|__autoreleasing}0 objects", 0, SFINAE_SubstitutionFailure, false, true, 2)
 DIAG(warn_objc_property_copy_missing_on_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'copy' attribute must be specified for the block property when -fobjc-gc-only is specified", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_default_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default property attribute 'assign' not appropriate for non-GC object", 460, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_no_assignment_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed", 460, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_property_retain_of_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "retain'ed block property does not copy the block - use copy attribute instead", 455, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_readonly_property_has_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "setter cannot be specified for a readonly property", 465, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_redundant_literal_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %0 with a literal is redundant", 467, SFINAE_Suppress, false, false, 29)
-DIAG(warn_objc_redundant_qualified_class_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameterized class %0 already conforms to the protocols listed; did you forget a '*'?", 464, SFINAE_Suppress, false, false, 0)
-DIAG(warn_objc_requires_super_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", 539, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_root_class_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 defined without specifying a base class", 468, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_secondary_init_missing_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer missing a 'self' call to another initializer", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_secondary_init_super_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer should not invoke an initializer on 'super'", 443, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_string_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of a string literal has undefined behavior", 469, SFINAE_Suppress, false, false, 2)
-DIAG(warn_objc_unsafe_perform_selector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", 471, SFINAE_Suppress, false, false, 2)
-DIAG(warn_old_style_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of old-style cast", 473, SFINAE_Suppress, false, false, 2)
-DIAG(warn_omp_alignment_not_power_of_two, CLASS_WARNING, (unsigned)diag::Severity::Warning, "aligned clause will be ignored because the requested alignment is not a power of 2", 476, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_linear_step_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero linear step (%0 %select{|and other variables in clause }1should probably be const)", 476, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_loop_64_bit_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", 477, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_nesting_simd, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP only allows an ordered construct with the simd clause nested in a simd construct", 581, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_non_trivial_type_mapped, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Non-trivial type %0 is mapped, only trivial types are guaranteed to be mapped correctly", 478, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_not_in_target_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration is not declared in any declare target region", 478, SFINAE_Suppress, false, false, 11)
-DIAG(warn_omp_section_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array section %select{lower bound|length}0 is of type 'char'", 118, SFINAE_Suppress, false, false, 11)
+DIAG(warn_objc_property_default_assign_on_object, CLASS_WARNING, (unsigned)diag::Severity::Warning, "default property attribute 'assign' not appropriate for object", 469, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_no_assignment_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no 'assign', 'retain', or 'copy' attribute is specified - 'assign' is assumed", 469, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_property_retain_of_block, CLASS_WARNING, (unsigned)diag::Severity::Warning, "retain'ed block property does not copy the block - use copy attribute instead", 464, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_readonly_property_has_setter, CLASS_WARNING, (unsigned)diag::Severity::Warning, "setter cannot be specified for a readonly property", 474, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_redundant_literal_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %0 with a literal is redundant", 476, SFINAE_Suppress, false, false, 29)
+DIAG(warn_objc_redundant_qualified_class_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameterized class %0 already conforms to the protocols listed; did you forget a '*'?", 473, SFINAE_Suppress, false, false, 0)
+DIAG(warn_objc_requires_super_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute cannot be applied to %select{methods in protocols|dealloc}1", 550, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_root_class_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class %0 defined without specifying a base class", 477, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_missing_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer missing a 'self' call to another initializer", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_secondary_init_super_init_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "convenience initializer should not invoke an initializer on 'super'", 452, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_string_literal_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "direct comparison of a string literal has undefined behavior", 478, SFINAE_Suppress, false, false, 2)
+DIAG(warn_objc_unsafe_perform_selector, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is incompatible with selectors that return a %select{struct|union|vector}1 type", 480, SFINAE_Suppress, false, false, 2)
+DIAG(warn_old_style_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "use of old-style cast", 482, SFINAE_Suppress, false, false, 2)
+DIAG(warn_omp_alignment_not_power_of_two, CLASS_WARNING, (unsigned)diag::Severity::Warning, "aligned clause will be ignored because the requested alignment is not a power of 2", 485, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_linear_step_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero linear step (%0 %select{|and other variables in clause }1should probably be const)", 485, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_loop_64_bit_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP loop iteration variable cannot have more than 64 bits size and will be narrowed", 486, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_nesting_simd, CLASS_WARNING, (unsigned)diag::Severity::Warning, "OpenMP only allows an ordered construct with the simd clause nested in a simd construct", 594, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_non_trivial_type_mapped, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Non-trivial type %0 is mapped, only trivial types are guaranteed to be mapped correctly", 487, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_not_in_target_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "declaration is not declared in any declare target region", 487, SFINAE_Suppress, false, false, 11)
+DIAG(warn_omp_section_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array section %select{lower bound|length}0 is of type 'char'", 120, SFINAE_Suppress, false, false, 11)
 DIAG(warn_on_superclass_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "class implementation may not have super class", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_opencl_attr_deprecated_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute is deprecated and ignored in OpenCL version %1", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_operator_new_returns_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 should not return a null pointer unless it is declared 'throw()'%select{| or 'noexcept'}1", 412, SFINAE_Suppress, false, false, 2)
+DIAG(warn_opencl_attr_deprecated_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 attribute is deprecated and ignored in OpenCL version %1", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_operator_new_returns_null, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 should not return a null pointer unless it is declared 'throw()'%select{| or 'noexcept'}1", 420, SFINAE_Suppress, false, false, 2)
 DIAG(warn_os_log_format_narg, CLASS_ERROR, (unsigned)diag::Severity::Error, "os_log() '%%n' format specifier is not allowed", 0, SFINAE_SubstitutionFailure, false, true, 2)
-DIAG(warn_out_of_range_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 618, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overaligned_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", 482, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overloaded_shift_in_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", 485, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overloaded_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%q0 hides overloaded virtual %select{function|functions}1", 486, SFINAE_Suppress, false, false, 2)
-DIAG(warn_overriding_method_missing_noescape, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter of overriding method should be annotated with __attribute__((noescape))", 389, SFINAE_Suppress, false, false, 2)
-DIAG(warn_padded_struct_anon_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", 491, SFINAE_Suppress, false, false, 2)
-DIAG(warn_padded_struct_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", 491, SFINAE_Suppress, false, false, 2)
-DIAG(warn_padded_struct_size, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", 491, SFINAE_Suppress, false, false, 2)
-DIAG(warn_param_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not in expected state when the function returns: expected '%1', observed '%2'", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_param_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "argument not in expected state; expected '%0', observed '%1'", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parameter_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", 332, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parens_disambiguated_as_function_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as a function declaration", 711, SFINAE_Suppress, false, false, 2)
-DIAG(warn_parens_disambiguated_as_variable_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as redundant parentheses around declaration of variable named %0", 711, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pass_class_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call '%3'?}2", 120, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pessimizing_move_on_initialization, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a temporary object prevents copy elision", 502, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pessimizing_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a local object in a return statement prevents copy elision", 502, SFINAE_Suppress, false, false, 2)
+DIAG(warn_out_of_range_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 634, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overaligned_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "type %0 requires %1 bytes of alignment and the default allocator only guarantees %2 bytes", 492, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_shift_in_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "overloaded operator %select{>>|<<}0 has higher precedence than comparison operator", 495, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overloaded_virtual, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%q0 hides overloaded virtual %select{function|functions}1", 496, SFINAE_Suppress, false, false, 2)
+DIAG(warn_overriding_method_missing_noescape, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parameter of overriding method should be annotated with __attribute__((noescape))", 397, SFINAE_Suppress, false, false, 2)
+DIAG(warn_padded_struct_anon_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align anonymous bit-field", 501, SFINAE_Suppress, false, false, 2)
+DIAG(warn_padded_struct_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding %select{struct|interface|class}0 %1 with %2 %select{byte|bit}3%s2 to align %4", 501, SFINAE_Suppress, false, false, 2)
+DIAG(warn_padded_struct_size, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "padding size of %0 with %1 %select{byte|bit}2%s1 to alignment boundary", 501, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "parameter '%0' not in expected state when the function returns: expected '%1', observed '%2'", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_param_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "argument not in expected state; expected '%0', observed '%1'", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parameter_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is a large (%1 bytes) pass-by-value argument; pass it by reference instead ?", 339, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_function_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as a function declaration", 728, SFINAE_Suppress, false, false, 2)
+DIAG(warn_parens_disambiguated_as_variable_declaration, CLASS_WARNING, (unsigned)diag::Severity::Warning, "parentheses were disambiguated as redundant parentheses around declaration of variable named %0", 728, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pass_class_arg_to_vararg, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing object of class type %0 through variadic %select{function|block|method|constructor}1%select{|; did you mean to call '%3'?}2", 122, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_initialization, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a temporary object prevents copy elision", 512, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pessimizing_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "moving a local object in a return statement prevents copy elision", 512, SFINAE_Suppress, false, false, 2)
 DIAG(warn_pointer_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of %select{pointer|function|array}0 type %1 is suspicious", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pointer_arith_null_ptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", 432, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pointer_indirection_from_incompatible_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", 648, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_attribute_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unused attribute %0 in '#pragma clang attribute push' region", 509, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_options_align_reset_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma options align=reset failed: %0", 269, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_invalid_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'", 269, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_modified_after_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the current #pragma pack aligment value is modified in the included file", 511, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_no_pop_eof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unterminated '#pragma pack (push, ...)' at end of file", 511, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_non_default_at_include, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-default #pragma pack value changes the alignment of struct or union members in the included file", 512, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pack_pop_identifer_and_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying both a name and alignment to 'pop' is undefined", 0, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_arith_null_ptr, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "performing pointer arithmetic on a null pointer has undefined behavior%select{| if the offset is nonzero}0", 441, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pointer_indirection_from_incompatible_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "dereference of type %1 that was reinterpret_cast from type %0 has undefined behavior", 664, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_attribute_unused, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unused attribute %0 in '#pragma clang attribute push' region", 519, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_options_align_reset_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma options align=reset failed: %0", 275, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_invalid_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expected #pragma pack parameter to be '1', '2', '4', '8', or '16'", 275, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_modified_after_include, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the current #pragma pack aligment value is modified in the included file", 521, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_no_pop_eof, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unterminated '#pragma pack (push, ...)' at end of file", 521, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_non_default_at_include, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-default #pragma pack value changes the alignment of struct or union members in the included file", 522, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pack_pop_identifier_and_alignment, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying both a name and alignment to 'pop' is undefined", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_pragma_pack_show, CLASS_WARNING, (unsigned)diag::Severity::Warning, "value of #pragma pack(show) == %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_pop_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(pop, ...) failed: %1", 269, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_unused_expected_var_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only variables can be arguments to '#pragma unused'", 269, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pragma_unused_undeclared_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "undeclared variable %0 used as an argument for '#pragma unused'", 269, SFINAE_Suppress, false, false, 2)
-DIAG(warn_precedence_bitwise_rel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has lower precedence than %1; %1 will be evaluated first", 492, SFINAE_Suppress, false, false, 2)
-DIAG(warn_precedence_conditional, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '?:' has lower precedence than '%0'; '%0' will be evaluated first", 492, SFINAE_Suppress, false, false, 2)
-DIAG(warn_printf_ObjCflags_without_ObjCConversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object format flags cannot be used with '%0' conversion specifier", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_asterisk_missing_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%select{*|.*}0' specified field %select{width|precision}0 is missing a matching 'int' argument", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_asterisk_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %select{width|precision}0 should have type %1, but argument has type %2", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_data_arg_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument not used by format string", 220, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_empty_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing object format flag", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_format_string_contains_null_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string contains '\\0' within the string body", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_format_string_not_null_terminated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not null-terminated", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_ignored_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' is ignored when flag '%1' is present", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_incomplete_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete format specifier", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_insufficient_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "more '%%' conversions than data arguments", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_invalid_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is not a valid object format flag", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_nonsensical_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' results in undefined behavior with '%1' conversion specifier", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_nonsensical_optional_amount, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{field width|precision}0 used with '%1' conversion specifier, resulting in undefined behavior", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_printf_positional_arg_exceeds_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument position '%0' exceeds the number of data arguments (%1)", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_private_extern, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", 516, SFINAE_Suppress, false, false, 2)
-DIAG(warn_profile_data_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", 519, SFINAE_Suppress, false, false, 31)
-DIAG(warn_profile_data_out_of_date, CLASS_WARNING, (unsigned)diag::Severity::Warning, "profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", 520, SFINAE_Suppress, false, false, 31)
-DIAG(warn_profile_data_unprofiled, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no profile data available for file \"%0\"", 521, SFINAE_Suppress, false, false, 31)
-DIAG(warn_property_access_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 not found on object of type %1; did you mean to access property %2?", 522, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_attr_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property attribute in class extension does not match the primary class", 523, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%1' attribute on property %0 does not match the property inherited from %2", 523, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_pop_failed, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma %0(pop, ...) failed: %1", 275, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_expected_var_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "only variables can be arguments to '#pragma unused'", 275, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pragma_unused_undeclared_var, CLASS_WARNING, (unsigned)diag::Severity::Warning, "undeclared variable %0 used as an argument for '#pragma unused'", 275, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_bitwise_rel, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has lower precedence than %1; %1 will be evaluated first", 502, SFINAE_Suppress, false, false, 2)
+DIAG(warn_precedence_conditional, CLASS_WARNING, (unsigned)diag::Severity::Warning, "operator '?:' has lower precedence than '%0'; '%0' will be evaluated first", 502, SFINAE_Suppress, false, false, 2)
+DIAG(warn_printf_ObjCflags_without_ObjCConversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "object format flags cannot be used with '%0' conversion specifier", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_asterisk_missing_arg, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%select{*|.*}0' specified field %select{width|precision}0 is missing a matching 'int' argument", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_asterisk_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %select{width|precision}0 should have type %1, but argument has type %2", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_data_arg_not_used, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument not used by format string", 224, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_empty_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "missing object format flag", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_format_string_contains_null_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string contains '\\0' within the string body", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_format_string_not_null_terminated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "format string is not null-terminated", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_ignored_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' is ignored when flag '%1' is present", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_incomplete_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incomplete format specifier", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_insufficient_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "more '%%' conversions than data arguments", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_invalid_objc_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' is not a valid object format flag", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_nonsensical_flag, CLASS_WARNING, (unsigned)diag::Severity::Warning, "flag '%0' results in undefined behavior with '%1' conversion specifier", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_nonsensical_optional_amount, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{field width|precision}0 used with '%1' conversion specifier, resulting in undefined behavior", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_printf_positional_arg_exceeds_data_args, CLASS_WARNING, (unsigned)diag::Severity::Warning, "data argument position '%0' exceeds the number of data arguments (%1)", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_private_extern, CLASS_WARNING, (unsigned)diag::Severity::Warning, "use of __private_extern__ on a declaration may not produce external symbol private to the linkage unit and is deprecated", 526, SFINAE_Suppress, false, false, 2)
+DIAG(warn_profile_data_missing, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "profile data may be incomplete: of %0 function%s0, %1 %plural{1:has|:have}1 no data", 529, SFINAE_Suppress, false, false, 31)
+DIAG(warn_profile_data_out_of_date, CLASS_WARNING, (unsigned)diag::Severity::Warning, "profile data may be out of date: of %0 function%s0, %1 %plural{1:has|:have}1 mismatched data that will be ignored", 530, SFINAE_Suppress, false, false, 31)
+DIAG(warn_profile_data_unprofiled, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no profile data available for file \"%0\"", 531, SFINAE_Suppress, false, false, 31)
+DIAG(warn_property_access_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 not found on object of type %1; did you mean to access property %2?", 532, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attr_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property attribute in class extension does not match the primary class", 533, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%1' attribute on property %0 does not match the property inherited from %2", 533, SFINAE_Suppress, false, false, 2)
 DIAG(warn_property_getter_owning_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property declared as returning non-retained objects; getter returning retained objects", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_implicitly_mismatched, CLASS_WARNING, (unsigned)diag::Severity::Warning, "primary property declaration is implicitly strong while redeclaration in class extension is weak", 458, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_method_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access is using %0 method which is deprecated", 155, SFINAE_Suppress, false, false, 27)
-DIAG(warn_property_redecl_getter_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "getter name mismatch between property redeclaration (%1) and its original declaration (%0)", 523, SFINAE_Suppress, false, false, 2)
-DIAG(warn_property_types_are_incompatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property type %0 is incompatible with type %1 inherited from %2", 292, SFINAE_Suppress, false, false, 2)
-DIAG(warn_protocol_property_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 525, SFINAE_Suppress, false, false, 2)
-DIAG(warn_pt_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing the value that %1 points to by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 632, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ptr_arith_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer incremented by %0 refers past the end of the array (that contains %1 element%s2)", 34, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ptr_arith_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer decremented by %0 refers before the beginning of the array", 34, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_implicitly_mismatched, CLASS_WARNING, (unsigned)diag::Severity::Warning, "primary property declaration is implicitly strong while redeclaration in class extension is weak", 467, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_method_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access is using %0 method which is deprecated", 158, SFINAE_Suppress, false, false, 27)
+DIAG(warn_property_redecl_getter_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "getter name mismatch between property redeclaration (%1) and its original declaration (%0)", 533, SFINAE_Suppress, false, false, 2)
+DIAG(warn_property_types_are_incompatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property type %0 is incompatible with type %1 inherited from %2", 298, SFINAE_Suppress, false, false, 2)
+DIAG(warn_protocol_property_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %select{of type %1|with attribute '%1'|without attribute '%1'|with getter %1|with setter %1}0 was selected for synthesis", 535, SFINAE_Suppress, false, false, 2)
+DIAG(warn_pt_guarded_pass_by_reference, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "passing the value that %1 points to by reference requires holding %0 %select{'%2'|'%2' exclusively}3", 648, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ptr_arith_exceeds_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer incremented by %0 refers past the end of the array (that contains %1 element%s2)", 33, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ptr_arith_precedes_bounds, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "the pointer decremented by %0 refers before the beginning of the array", 33, SFINAE_Suppress, false, false, 2)
 DIAG(warn_ptr_independentclass_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'objc_independent_class' attribute may be put on Objective-C object pointer type only; attribute is ignored", 5, SFINAE_Suppress, false, false, 2)
-DIAG(warn_qual_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", 270, SFINAE_Suppress, false, false, 2)
-DIAG(warn_readonly_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute 'readonly' of property %0 restricts attribute 'readwrite' of property inherited from %1", 523, SFINAE_Suppress, false, false, 2)
-DIAG(warn_receiver_forward_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver %0 is a forward class and corresponding @interface may not exist", 530, SFINAE_Suppress, false, false, 2)
-DIAG(warn_receiver_forward_instance, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "receiver type %0 for instance message is a forward declaration", 530, SFINAE_Suppress, false, false, 5)
-DIAG(warn_redecl_library_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incompatible redeclaration of library function %0", 288, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redeclaration_without_attribute_prev_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without %1 attribute: previous %1 ignored", 297, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redeclaration_without_import_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without 'dllimport' attribute: 'dllexport' attribute added", 297, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redefine_extname_not_applied, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", 514, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redefinition_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of %0 will not be visible outside of this function", 712, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_loop_iteration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", 218, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant move in return statement", 533, SFINAE_Suppress, false, false, 2)
-DIAG(warn_redundant_parens_around_declarator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding declarator", 534, SFINAE_Suppress, false, false, 2)
-DIAG(warn_reference_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used here", 656, SFINAE_Suppress, false, false, 2)
+DIAG(warn_qual_return_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'%0' type qualifier%s1 on return type %plural{1:has|:have}1 no effect", 276, SFINAE_Suppress, false, false, 2)
+DIAG(warn_readonly_property, CLASS_WARNING, (unsigned)diag::Severity::Warning, "attribute 'readonly' of property %0 restricts attribute 'readwrite' of property inherited from %1", 533, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "receiver %0 is a forward class and corresponding @interface may not exist", 541, SFINAE_Suppress, false, false, 2)
+DIAG(warn_receiver_forward_instance, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "receiver type %0 for instance message is a forward declaration", 541, SFINAE_Suppress, false, false, 5)
+DIAG(warn_redecl_library_builtin, CLASS_WARNING, (unsigned)diag::Severity::Warning, "incompatible redeclaration of library function %0", 294, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_attribute_prev_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without %1 attribute: previous %1 ignored", 304, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redeclaration_without_import_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%q0 redeclared without 'dllimport' attribute: 'dllexport' attribute added", 304, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefine_extname_not_applied, CLASS_WARNING, (unsigned)diag::Severity::Warning, "#pragma redefine_extname is applicable to external C declarations only; not applied to %select{function|variable}0 %1", 524, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redefinition_in_param_list, CLASS_WARNING, (unsigned)diag::Severity::Warning, "redefinition of %0 will not be visible outside of this function", 729, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_loop_iteration, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{decremented|incremented}1 both in the loop header and in the loop body", 222, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_move_on_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant move in return statement", 544, SFINAE_Suppress, false, false, 2)
+DIAG(warn_redundant_parens_around_declarator, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "redundant parentheses surrounding declarator", 545, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reference_field_is_uninit, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used here", 672, SFINAE_Suppress, false, false, 2)
 DIAG(warn_register_objc_catch_parm, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'register' storage specifier on @catch parameter will be ignored", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_reinterpret_different_from_static, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'reinterpret_cast' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from 'static_cast'", 536, SFINAE_Suppress, false, false, 2)
+DIAG(warn_reinterpret_different_from_static, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'reinterpret_cast' %select{from|to}3 class %0 %select{to|from}3 its %select{virtual base|base at non-zero offset}2 %1 behaves differently from 'static_cast'", 547, SFINAE_Suppress, false, false, 2)
 DIAG(warn_related_result_type_compatibility_class, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method is expected to return an instance of its class type %diff{$, but is declared to return $|, but is declared to return different type}0,1", 0, SFINAE_Suppress, false, false, 17)
 DIAG(warn_related_result_type_compatibility_protocol, CLASS_WARNING, (unsigned)diag::Severity::Warning, "protocol method is expected to return an instance of the implementing class, but is declared to return %0", 0, SFINAE_Suppress, false, false, 17)
-DIAG(warn_remainder_division_by_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{remainder|division}0 by zero is undefined", 170, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_addr_label, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning address of label, which is local", 543, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_local_temp_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning %select{address of|reference to}0 local temporary object", 543, SFINAE_Suppress, false, false, 2)
-DIAG(warn_ret_stack_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{address of|reference to}0 stack memory associated with local variable %1 returned", 543, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_missing_expr, CLASS_WARNING, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 544, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_typestate_for_unconsumable_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return state set for an unconsumable type '%0'", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return value not in expected state; expected '%0', observed '%1'", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", 332, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_udt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", 545, SFINAE_Suppress, false, false, 2)
-DIAG(warn_return_value_udt_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", 545, SFINAE_Suppress, false, false, 2)
-DIAG(warn_root_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 is being used on 'Class' which is not in the root class", 451, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sampler_initializer_invalid_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "sampler initializer has invalid %0 bits", 582, SFINAE_Suppress, false, false, 2)
-DIAG(warn_scanf_nonzero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero field width in scanf format string is unused", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_scanf_scanlist_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no closing ']' for '%%[' in scanf format string", 219, SFINAE_Suppress, false, false, 28)
-DIAG(warn_second_arg_of_va_start_not_last_named_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_start' is not the last named parameter", 706, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_never_compatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_arg' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", 706, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_not_pod, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of non-POD type %0", 419, SFINAE_Suppress, false, false, 2)
-DIAG(warn_second_parameter_to_va_arg_ownership_qualified, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of ARC ownership-qualified type %0", 419, SFINAE_Suppress, false, false, 2)
-DIAG(warn_self_assignment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 551, SFINAE_Suppress, false, false, 2)
-DIAG(warn_self_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly moving variable of type %0 to itself", 553, SFINAE_Suppress, false, false, 2)
-DIAG(warn_setter_getter_impl_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", 457, SFINAE_Suppress, false, false, 2)
-DIAG(warn_setter_getter_impl_required_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 457, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shadow_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-static data member %0 of %1 shadows member inherited from type %2", 560, SFINAE_Suppress, false, false, 0)
-DIAG(warn_shift_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count >= width of type", 566, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_lhs_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shifting a negative signed value is undefined", 567, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count is negative", 565, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_result_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", 569, SFINAE_Suppress, false, false, 2)
-DIAG(warn_shift_result_sets_sign_bit, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed shift result (%0) sets the sign bit of the shift expression's type (%1) and becomes negative", 570, SFINAE_Suppress, false, false, 2)
-DIAG(warn_side_effects_typeid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects will be evaluated despite being used as an operand to 'typeid'", 508, SFINAE_Suppress, false, false, 32)
-DIAG(warn_side_effects_unevaluated_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects has no effect in an unevaluated context", 650, SFINAE_Suppress, false, false, 32)
-DIAG(warn_signed_bitfield_enum_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", 58, SFINAE_Suppress, false, false, 24)
-DIAG(warn_sizeof_array_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on pointer operation will return size of %0 instead of %1", 577, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_array_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on array function parameter will return size of %0 instead of %1", 576, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_pointer_expr_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' call operates on objects of type %1 while the size is based on a different type %2", 578, SFINAE_Suppress, false, false, 2)
+DIAG(warn_remainder_division_by_zero, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{remainder|division}0 by zero is undefined", 174, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_addr_label, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning address of label, which is local", 554, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_local_temp_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "returning %select{address of|reference to}0 local temporary object", 554, SFINAE_Suppress, false, false, 2)
+DIAG(warn_ret_stack_addr_ref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{address of|reference to}0 stack memory associated with %select{local variable|parameter}2 %1 returned", 554, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_missing_expr, CLASS_WARNING, (unsigned)diag::Severity::Error, "non-void %select{function|method}1 %0 should return a value", 557, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "local variable %0 will be copied despite being %select{returned|thrown}1 by name", 555, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_std_move_in_cxx11, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "prior to the resolution of a defect report against ISO C++11, local variable %0 would have been copied despite being returned by name, due to its not matching the function return type%diff{ ($ vs $)|}1,2", 556, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_for_unconsumable_type, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return state set for an unconsumable type '%0'", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_typestate_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "return value not in expected state; expected '%0', observed '%1'", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "return value of %0 is a large (%1 bytes) pass-by-value object; pass it by reference instead ?", 339, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns user-defined type %1 which is incompatible with C", 558, SFINAE_Suppress, false, false, 2)
+DIAG(warn_return_value_udt_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has C-linkage specified, but returns incomplete type %1 which could be incompatible with C", 558, SFINAE_Suppress, false, false, 2)
+DIAG(warn_riscv_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "RISC-V 'interrupt' attribute only applies to functions that have %select{no parameters|a 'void' return type}0", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_riscv_repeated_interrupt_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "repeated RISC-V 'interrupt' attribute", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_root_inst_method_not_found, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instance method %0 is being used on 'Class' which is not in the root class", 460, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sampler_initializer_invalid_bits, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "sampler initializer has invalid %0 bits", 595, SFINAE_Suppress, false, false, 2)
+DIAG(warn_scanf_nonzero_width, CLASS_WARNING, (unsigned)diag::Severity::Warning, "zero field width in scanf format string is unused", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_scanf_scanlist_incomplete, CLASS_WARNING, (unsigned)diag::Severity::Warning, "no closing ']' for '%%[' in scanf format string", 223, SFINAE_Suppress, false, false, 28)
+DIAG(warn_second_arg_of_va_start_not_last_named_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_start' is not the last named parameter", 723, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_never_compatible, CLASS_WARNING, (unsigned)diag::Severity::Warning, "second argument to 'va_arg' is of promotable type %0; this va_arg has undefined behavior because arguments will be promoted to %1", 723, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_not_pod, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of non-POD type %0", 427, SFINAE_Suppress, false, false, 2)
+DIAG(warn_second_parameter_to_va_arg_ownership_qualified, CLASS_WARNING, (unsigned)diag::Severity::Error, "second argument to 'va_arg' is of ARC ownership-qualified type %0", 427, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_builtin, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 563, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_assignment_overloaded, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly assigning value of variable of type %0 to itself", 565, SFINAE_Suppress, false, false, 2)
+DIAG(warn_self_move, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicitly moving variable of type %0 to itself", 566, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @synthesize, @dynamic or provide a method implementation in this class implementation", 466, SFINAE_Suppress, false, false, 2)
+DIAG(warn_setter_getter_impl_required_in_category, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property %0 requires method %1 to be defined - use @dynamic or provide a method implementation in this category", 466, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shadow_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-static data member %0 of %1 shadows member inherited from type %2", 573, SFINAE_Suppress, false, false, 0)
+DIAG(warn_shift_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count >= width of type", 579, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_lhs_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shifting a negative signed value is undefined", 580, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_negative, CLASS_WARNING, (unsigned)diag::Severity::Warning, "shift count is negative", 578, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_gt_typewidth, CLASS_WARNING, (unsigned)diag::Severity::Warning, "signed shift result (%0) requires %1 bits to represent, but %2 only has %3 bits", 582, SFINAE_Suppress, false, false, 2)
+DIAG(warn_shift_result_sets_sign_bit, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed shift result (%0) sets the sign bit of the shift expression's type (%1) and becomes negative", 583, SFINAE_Suppress, false, false, 2)
+DIAG(warn_side_effects_typeid, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects will be evaluated despite being used as an operand to 'typeid'", 518, SFINAE_Suppress, false, false, 32)
+DIAG(warn_side_effects_unevaluated_context, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression with side effects has no effect in an unevaluated context", 666, SFINAE_Suppress, false, false, 32)
+DIAG(warn_signed_bitfield_enum_conversion, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "signed bit-field %0 needs an extra bit to represent the largest positive enumerators of %1", 59, SFINAE_Suppress, false, false, 24)
+DIAG(warn_sizeof_array_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on pointer operation will return size of %0 instead of %1", 590, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_array_param, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sizeof on array function parameter will return size of %0 instead of %1", 589, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sizeof_pointer_expr_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' call operates on objects of type %1 while the size is based on a different type %2", 591, SFINAE_Suppress, false, false, 2)
 DIAG(warn_sizeof_pointer_expr_memaccess_note, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "did you mean to %select{dereference the argument to 'sizeof' (and multiply it by the number of elements)|remove the addressof in the argument to 'sizeof' (and multiply it by the number of elements)|provide an explicit length}0?", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sizeof_pointer_type_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to 'sizeof' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", 578, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sometimes_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{used|captured}1 uninitialized whenever %select{'%3' condition is %select{true|false}4|'%3' loop %select{is entered|exits because its condition is false}4|'%3' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", 580, SFINAE_Suppress, false, false, 2)
-DIAG(warn_standalone_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' ignored on this declaration", 383, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_array_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array argument is too small; contains %0 elements, callee requires at least %1", 33, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_local_in_extern_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-constant static local variable in inline function may be different in different files", 587, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_main, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'main' should not be declared static", 342, SFINAE_Suppress, false, false, 2)
-DIAG(warn_static_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "static variable %0 is suspiciously used within its own initialization", 588, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strict_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple methods named %0 found", 601, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strict_prototypes, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this %select{function declaration is not|block declaration is not|old-style function definition is not preceded by}0 a prototype", 600, SFINAE_Suppress, false, false, 2)
-DIAG(warn_string_plus_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string pointer does not append to the string", 604, SFINAE_Suppress, false, false, 2)
-DIAG(warn_string_plus_int, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string does not append to the string", 605, SFINAE_Suppress, false, false, 2)
-DIAG(warn_stringcompare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)", 602, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strlcpycat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call appears to be size of the source; expected the size of the destination", 606, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_large_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument in 'strncat' is too large, might lead to a buffer overflow", 607, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_src_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in 'strncat' call appears to be size of the source", 607, SFINAE_Suppress, false, false, 2)
-DIAG(warn_strncat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument to 'strncat' is wrong", 607, SFINAE_Suppress, false, false, 2)
-DIAG(warn_struct_class_previous_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1", 381, SFINAE_Suppress, false, false, 2)
-DIAG(warn_struct_class_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1", 381, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sub_ptr_zero_size_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subtraction of pointers to type %0 of zero size has undefined behavior", 503, SFINAE_Suppress, false, false, 2)
-DIAG(warn_subobject_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subobject initialization overrides initialization of other fields within its enclosing subobject", 303, SFINAE_Suppress, false, false, 2)
-DIAG(warn_subscript_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array subscript is of type 'char'", 118, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suggest_noreturn_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block could be declared with attribute 'noreturn'", 390, SFINAE_Suppress, false, false, 2)
-DIAG(warn_suggest_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|method}0 %1 could be declared with attribute 'noreturn'", 390, SFINAE_Suppress, false, false, 2)
-DIAG(warn_superclass_variable_sized_type_not_at_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", 444, SFINAE_Suppress, false, false, 2)
-DIAG(warn_sync_fetch_and_nand_semantics_change, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", 613, SFINAE_Suppress, false, false, 2)
-DIAG(warn_taking_address_of_packed_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value", 13, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_bool_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 616, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_constant_compare, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", 621, SFINAE_Suppress, false, false, 2)
-DIAG(warn_tautological_overlap_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "overlapping comparisons always evaluate to %select{false|true}0", 619, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_arg_negative, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument with value '%0' converted to '%1' for unsigned template parameter of type %2", 133, SFINAE_Suppress, false, false, 24)
-DIAG(warn_template_arg_too_large, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument value '%0' truncated to '%1' for template parameter of type %2", 133, SFINAE_Suppress, false, false, 24)
+DIAG(warn_sizeof_pointer_type_memaccess, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument to 'sizeof' in %0 call is the same pointer type %1 as the %select{destination|source}2; expected %3 or an explicit length", 591, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sometimes_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is %select{used|captured}1 uninitialized whenever %select{'%3' condition is %select{true|false}4|'%3' loop %select{is entered|exits because its condition is false}4|'%3' loop %select{condition is true|exits because its condition is false}4|switch %3 is taken|its declaration is reached|%3 is called}2", 593, SFINAE_Suppress, false, false, 2)
+DIAG(warn_standalone_specifier, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' ignored on this declaration", 391, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_array_too_small, CLASS_WARNING, (unsigned)diag::Severity::Warning, "array argument is too small; contains %0 elements, callee requires at least %1", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_local_in_extern_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "non-constant static local variable in inline function may be different in different files", 600, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_main, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'main' should not be declared static", 349, SFINAE_Suppress, false, false, 2)
+DIAG(warn_static_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "static variable %0 is suspiciously used within its own initialization", 601, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_multiple_method_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "multiple methods named %0 found", 615, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strict_prototypes, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "this %select{function declaration is not|block declaration is not|old-style function definition is not preceded by}0 a prototype", 614, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_char, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string pointer does not append to the string", 618, SFINAE_Suppress, false, false, 2)
+DIAG(warn_string_plus_int, CLASS_WARNING, (unsigned)diag::Severity::Warning, "adding %0 to a string does not append to the string", 619, SFINAE_Suppress, false, false, 2)
+DIAG(warn_stringcompare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison against %select{a string literal|@encode}0 is unspecified (use strncmp instead)", 616, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strlcpycat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in %0 call appears to be size of the source; expected the size of the destination", 620, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_large_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument in 'strncat' is too large, might lead to a buffer overflow", 621, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_src_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "size argument in 'strncat' call appears to be size of the source", 621, SFINAE_Suppress, false, false, 2)
+DIAG(warn_strncat_wrong_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the value of the size argument to 'strncat' is wrong", 621, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_previous_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%2 defined as %select{a struct|an interface|a class}0%select{| template}1 here but previously declared as %select{a struct|an interface|a class}3%select{| template}1", 389, SFINAE_Suppress, false, false, 2)
+DIAG(warn_struct_class_tag_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{struct|interface|class}0%select{| template}1 %2 was previously declared as a %select{struct|interface|class}3%select{| template}1", 389, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sub_ptr_zero_size_types, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subtraction of pointers to type %0 of zero size has undefined behavior", 513, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subobject_initializer_overrides, CLASS_WARNING, (unsigned)diag::Severity::Warning, "subobject initialization overrides initialization of other fields within its enclosing subobject", 310, SFINAE_Suppress, false, false, 2)
+DIAG(warn_subscript_is_char, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "array subscript is of type 'char'", 120, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block could be declared with attribute 'noreturn'", 398, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suggest_noreturn_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|method}0 %1 could be declared with attribute 'noreturn'", 398, SFINAE_Suppress, false, false, 2)
+DIAG(warn_superclass_variable_sized_type_not_at_end, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 can overwrite instance variable %1 with variable sized type %2 in superclass %3", 453, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_bzero_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'size' argument to bzero is '0'", 623, SFINAE_Suppress, false, false, 2)
+DIAG(warn_suspicious_sizeof_memset, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{'size' argument to memset is '0'|setting buffer to a 'sizeof' expression}0; did you mean to transpose the last two arguments?", 354, SFINAE_Suppress, false, false, 2)
+DIAG(warn_sync_fetch_and_nand_semantics_change, CLASS_WARNING, (unsigned)diag::Severity::Warning, "the semantics of this intrinsic changed with GCC version 4.4 - the newer semantics are provided here", 629, SFINAE_Suppress, false, false, 2)
+DIAG(warn_taking_address_of_packed_member, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking address of packed member %0 of class or structure %q1 may result in an unaligned pointer value", 12, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_bool_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "result of comparison of %select{constant %0|true|false}1 with %select{expression of type %2|boolean expression}3 is always %4", 632, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_constant_compare, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison %select{%3|%1}0 %2 %select{%1|%3}0 is always %4", 637, SFINAE_Suppress, false, false, 2)
+DIAG(warn_tautological_overlap_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "overlapping comparisons always evaluate to %select{false|true}0", 635, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_arg_negative, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument with value '%0' converted to '%1' for unsigned template parameter of type %2", 135, SFINAE_Suppress, false, false, 24)
+DIAG(warn_template_arg_too_large, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "non-type template argument value '%0' truncated to '%1' for template parameter of type %2", 135, SFINAE_Suppress, false, false, 24)
 DIAG(warn_template_export_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "exported templates are unsupported", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_qualified_friend_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend template declaration is not supported; ignoring this friend declaration", 676, SFINAE_Suppress, false, false, 2)
-DIAG(warn_template_qualified_friend_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend class declaration is not supported; turning off access control for %1", 676, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend template declaration is not supported; ignoring this friend declaration", 692, SFINAE_Suppress, false, false, 2)
+DIAG(warn_template_qualified_friend_unsupported, CLASS_WARNING, (unsigned)diag::Severity::Warning, "dependent nested name specifier '%0' for friend class declaration is not supported; turning off access control for %1", 692, SFINAE_Suppress, false, false, 2)
 DIAG(warn_template_spec_extra_headers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "extraneous template parameter list in template specialization", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_temporary_array_to_pointer_decay, CLASS_WARNING, (unsigned)diag::Severity::Warning, "pointer is initialized by a temporary array, which will be destroyed at the end of the full-expression", 12, SFINAE_Suppress, false, false, 2)
 DIAG(warn_tentative_incomplete_array, CLASS_WARNING, (unsigned)diag::Severity::Warning, "tentative array definition assumed to have one element", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_this_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", 643, SFINAE_Suppress, false, false, 24)
-DIAG(warn_this_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 622, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_argument_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute requires arguments whose type is annotated with 'capability' attribute; type here is %1", 628, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_decl_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute can only be applied in a context annotated with 'capability(\"mutex\")' attribute", 628, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_decl_not_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 only applies to pointer types; type here is %1", 628, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ignoring %0 attribute because its argument is invalid", 628, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_safety_beta, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety beta warning.", 629, SFINAE_Suppress, false, false, 2)
-DIAG(warn_thread_safety_verbose, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety verbose warning.", 633, SFINAE_Suppress, false, false, 2)
-DIAG(warn_throw_in_noexcept_func, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has a non-throwing exception specification but can still throw", 199, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_field_size_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_floating, CLASS_WARNING, (unsigned)diag::Severity::Warning, "first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_not_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent_union attribute can only be applied to a union definition; attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_transparent_union_attribute_zero_fields, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent union definition must contain at least one field; transparent_union attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_attribute_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_safety_null_pointer_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specified %0 type tag requires a null pointer", 636, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_safety_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument type %0 doesn't match specified %1 type tag %select{that requires %3|}2", 636, SFINAE_Suppress, false, false, 2)
-DIAG(warn_type_tag_for_datatype_wrong_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "this type tag was not designed to be used with this function", 636, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_function_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has no effect", 270, SFINAE_Suppress, false, false, 2)
+DIAG(warn_this_bool_conversion, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; pointer may be assumed to always convert to true", 659, SFINAE_Suppress, false, false, 24)
+DIAG(warn_this_null_compare, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'this' pointer cannot be null in well-defined C++ code; comparison may be assumed to always evaluate to %select{true|false}0", 638, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_argument_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute requires arguments whose type is annotated with 'capability' attribute; type here is %1", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_lockable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 attribute can only be applied in a context annotated with 'capability(\"mutex\")' attribute", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_decl_not_pointer, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 only applies to pointer types; type here is %1", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ignoring %0 attribute because its argument is invalid", 644, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_beta, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety beta warning.", 645, SFINAE_Suppress, false, false, 2)
+DIAG(warn_thread_safety_verbose, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "Thread safety verbose warning.", 649, SFINAE_Suppress, false, false, 2)
+DIAG(warn_throw_in_noexcept_func, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 has a non-throwing exception specification but can still throw", 203, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_field_size_align, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{alignment|size}0 of field %1 (%2 bits) does not match the %select{alignment|size}0 of the first field in transparent union; transparent_union attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_floating, CLASS_WARNING, (unsigned)diag::Severity::Warning, "first field of a transparent union cannot have %select{floating point|vector}0 type %1; transparent_union attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_not_definition, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent_union attribute can only be applied to a union definition; attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_transparent_union_attribute_zero_fields, CLASS_WARNING, (unsigned)diag::Severity::Warning, "transparent union definition must contain at least one field; transparent_union attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_attribute_wrong_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' only applies to %select{function|pointer|Objective-C object or block pointer}1 types; type here is %2", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_null_pointer_required, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specified %0 type tag requires a null pointer", 652, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_safety_type_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Warning, "argument type %0 doesn't match specified %1 type tag %select{that requires %3|}2", 652, SFINAE_Suppress, false, false, 2)
+DIAG(warn_type_tag_for_datatype_wrong_kind, CLASS_WARNING, (unsigned)diag::Severity::Warning, "this type tag was not designed to be used with this function", 652, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_function_qualifiers_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has no effect", 276, SFINAE_Suppress, false, false, 2)
 DIAG(warn_typecheck_function_qualifiers_unspecified, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on function type %1 has unspecified behavior", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_reference_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on reference type %1 has no effect", 270, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_vector_element_sizes_not_equal, CLASS_WARNING, (unsigned)diag::Severity::Error, "vector operands do not have the same elements sizes (%0 and %1)", 708, SFINAE_Suppress, false, false, 2)
-DIAG(warn_typecheck_zero_static_array_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'static' has no effect on zero-length arrays", 33, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unannotated_fallthrough, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels", 275, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unannotated_fallthrough_per_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels in partly-annotated function", 276, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unavailable_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing unavailable method", 157, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unavailable_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be unavailable because the receiver type is unknown", 640, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undeclared_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0", 641, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undeclared_selector_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0; did you mean %1?", 641, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_reference_qualifiers, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'%0' qualifier on reference type %1 has no effect", 276, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_vector_element_sizes_not_equal, CLASS_WARNING, (unsigned)diag::Severity::Error, "vector operands do not have the same elements sizes (%0 and %1)", 725, SFINAE_Suppress, false, false, 2)
+DIAG(warn_typecheck_zero_static_array_size, CLASS_WARNING, (unsigned)diag::Severity::Warning, "'static' has no effect on zero-length arrays", 32, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels", 281, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unannotated_fallthrough_per_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unannotated fall-through between switch labels in partly-annotated function", 282, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_def, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "implementing unavailable method", 160, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unavailable_fwdclass_message, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 may be unavailable because the receiver type is unknown", 656, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0", 657, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undeclared_selector_with_typo, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "undeclared selector %0; did you mean %1?", 657, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_interface, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_interface_suggest, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find interface declaration for %0; did you mean %1?", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undef_method_impl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method definition for %0 not found", 294, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undef_method_impl, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method definition for %0 not found", 301, SFINAE_Suppress, false, false, 2)
 DIAG(warn_undef_protocolref, CLASS_WARNING, (unsigned)diag::Severity::Warning, "cannot find protocol definition for %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline function %q0 is not defined", 645, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_internal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{function|variable}0 %q1 has internal linkage but is not defined", 646, SFINAE_Suppress, false, false, 2)
-DIAG(warn_undefined_reinterpret_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reinterpret_cast from %0 to %1 has undefined behavior", 648, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unguarded_availability, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is only available on %1 %2 or newer", 651, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unguarded_availability_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is only available on %1 %2 or newer", 652, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unhandled_ms_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__declspec attribute %0 is not supported", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unimplemented_protocol_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method %0 in protocol %1 not implemented", 524, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unimplemented_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no method with selector %0 is implemented in this translation unit", 549, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_byref_blockvar_captured_by_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block pointer variable %0 is uninitialized when captured by block", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable %0 is uninitialized when used within its own initialization", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_self_reference_in_reference_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used within its own initialization", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is uninitialized when %select{used here|captured by block}1", 656, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unknown_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute %0 ignored", 658, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unknown_sanitizer_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown sanitizer '%0' ignored", 661, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unlock_but_no_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' that was not held", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unlock_kind_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unnecessary_packed, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "packed attribute is unnecessary for %0", 490, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unneeded_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|variable}0 %1 is not needed and will not be emitted", 664, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unneeded_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "member function %0 is not needed and will not be emitted", 665, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unneeded_static_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'static' function %0 declared in header file should be declared 'static inline'", 664, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "code will never be executed", 666, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_break, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'break' will never be executed", 668, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_default, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default label in switch which covers all enumeration values", 137, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_loop_increment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop will run at most once (loop increment never executed)", 669, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unreachable_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'return' will never be executed", 670, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsequenced_mod_mod, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple unsequenced modifications to %0", 671, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsequenced_mod_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsequenced modification and access to %0", 671, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_inline, CLASS_WARNING, (unsigned)diag::Severity::Warning, "inline function %q0 is not defined", 661, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_internal, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{function|variable}0 %q1 has internal linkage but is not defined", 662, SFINAE_Suppress, false, false, 2)
+DIAG(warn_undefined_reinterpret_cast, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "reinterpret_cast from %0 to %1 has undefined behavior", 664, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 is only available on %1 %2 or newer", 667, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unguarded_availability_new, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%0 is only available on %1 %2 or newer", 668, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unhandled_ms_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "__declspec attribute %0 is not supported", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_protocol_method, CLASS_WARNING, (unsigned)diag::Severity::Warning, "method %0 in protocol %1 not implemented", 534, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unimplemented_selector, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "no method with selector %0 is implemented in this translation unit", 561, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_byref_blockvar_captured_by_block, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "block pointer variable %0 is uninitialized when captured by block", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "variable %0 is uninitialized when used within its own initialization", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_self_reference_in_reference_init, CLASS_WARNING, (unsigned)diag::Severity::Warning, "reference %0 is not yet bound to a value when used within its own initialization", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_uninit_var, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable %0 is uninitialized when %select{used here|captured by block}1", 672, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unknown_attribute_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown attribute %0 ignored", 674, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unknown_sanitizer_ignored, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unknown sanitizer '%0' ignored", 677, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_but_no_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' that was not held", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unlock_kind_mismatch, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "releasing %0 '%1' using %select{shared|exclusive}2 access, expected %select{shared|exclusive}3 access", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unnecessary_packed, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "packed attribute is unnecessary for %0", 500, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{function|variable}0 %1 is not needed and will not be emitted", 680, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unneeded_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "member function %0 is not needed and will not be emitted", 681, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unneeded_static_internal_decl, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'static' function %0 declared in header file should be declared 'static inline'", 680, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unreachable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "code will never be executed", 682, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_break, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'break' will never be executed", 684, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_default, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "default label in switch which covers all enumeration values", 139, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_loop_increment, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "loop will run at most once (loop increment never executed)", 685, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unreachable_return, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "'return' will never be executed", 686, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_mod, CLASS_WARNING, (unsigned)diag::Severity::Warning, "multiple unsequenced modifications to %0", 687, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsequenced_mod_use, CLASS_WARNING, (unsigned)diag::Severity::Warning, "unsequenced modification and access to %0", 687, SFINAE_Suppress, false, false, 2)
 DIAG(warn_unsigned_abs, CLASS_WARNING, (unsigned)diag::Severity::Warning, "taking the absolute value of unsigned type %0 has no effect", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsigned_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", 624, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsigned_bitfield_assigned_signed_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", 58, SFINAE_Suppress, false, false, 24)
-DIAG(warn_unsigned_enum_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", 623, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unsupported_target_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{unsupported|duplicate}0%select{| architecture}1 '%2' in the 'target' attribute string; 'target' attribute ignored", 265, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{equality|inequality|relational|three-way}0 comparison result unused", 684, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_const_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 685, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_container_subscript_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "container access result unused - container access should not be used for side effects", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_exception_param, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused exception parameter %0", 686, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused function %0", 687, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_label, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused label %0", 689, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda capture %0 is not %select{used|required to be captured for this use}1", 690, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_local_typedef, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{typedef|type alias}0 %1", 691, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused member function %0", 694, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_parameter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused parameter %0", 695, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_private_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "private field %0 is not used", 696, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_property_backing_ivar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ivar %0 which backs the property is not referenced in this property's accessor", 697, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_property_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access result unused - getters should not be used for side effects", 688, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_result, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 698, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{function|variable}0 template %1", 699, SFINAE_Suppress, false, false, 2)
-DIAG(warn_unused_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 701, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_voidptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; should this cast be to 'void'?", 700, SFINAE_Suppress, false, false, 32)
-DIAG(warn_unused_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; assign into a variable to force a volatile load", 702, SFINAE_Suppress, false, false, 2)
-DIAG(warn_use_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on object '%1' while it is in the '%2' state", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_use_of_temp_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on a temporary object while it is in the '%1' state", 132, SFINAE_Suppress, false, false, 2)
-DIAG(warn_used_but_marked_unused, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 was marked unused but was used", 703, SFINAE_Suppress, false, false, 2)
-DIAG(warn_user_literal_reserved, CLASS_WARNING, (unsigned)diag::Severity::Warning, "user-defined literal suffixes not starting with '_' are reserved%select{; no literal will invoke this operator|}0", 704, SFINAE_Suppress, false, false, 2)
-DIAG(warn_using_directive_in_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using namespace directive in global context in header", 263, SFINAE_Suppress, false, false, 2)
-DIAG(warn_va_start_type_is_undefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the 'register' keyword}0 to 'va_start' has undefined behavior", 706, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_deref_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 631, SFINAE_Suppress, false, false, 2)
-DIAG(warn_var_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instantiation of variable %q0 required here, but no definition is available", 649, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 627, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 631, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variable_sized_ivar_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", 444, SFINAE_Suppress, false, false, 2)
-DIAG(warn_variables_not_in_loop_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", 218, SFINAE_Suppress, false, false, 2)
-DIAG(warn_vbase_moved_multiple_times, CLASS_WARNING, (unsigned)diag::Severity::Warning, "defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", 408, SFINAE_Suppress, false, false, 2)
-DIAG(warn_vector_long_decl_spec_combination, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Use of 'long' with '__vector' is deprecated", 153, SFINAE_Suppress, false, false, 27)
-DIAG(warn_vector_mode_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying vector types with the 'mode' attribute is deprecated; use the 'vector_size' attribute instead", 154, SFINAE_Suppress, false, false, 27)
-DIAG(warn_vla_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable length array used", 713, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned expression}0 %2 %select{unsigned expression|%3}0 is always %4", 640, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsigned_bitfield_assigned_signed_enum, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "assigning value of signed enum type %1 to unsigned bit-field %0; negative enumerators of enum %1 will be converted to positive values", 59, SFINAE_Suppress, false, false, 24)
+DIAG(warn_unsigned_enum_always_true_comparison, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "result of comparison of %select{%3|unsigned enum expression}0 %2 %select{unsigned enum expression|%3}0 is always %4", 639, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_lifetime_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "sorry, lifetime extension of %select{temporary|backing array of initializer list}0 created by aggregate initialization using default member initializer is not supported; lifetime of %select{temporary|backing array}0 will end at the end of the full-expression", 145, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unsupported_target_attribute, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{unsupported|duplicate}0%select{| architecture}1 '%2' in the 'target' attribute string; 'target' attribute ignored", 271, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_call, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 717, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_comparison, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{equality|inequality|relational|three-way}0 comparison result unused", 701, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_const_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 702, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_container_subscript_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "container access result unused - container access should not be used for side effects", 717, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_exception_param, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused exception parameter %0", 703, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused", 717, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused function %0", 704, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_label, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused label %0", 706, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_lambda_capture, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "lambda capture %0 is not %select{used|required to be captured for this use}1", 707, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_local_typedef, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{typedef|type alias}0 %1", 708, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_member_function, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused member function %0", 711, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_parameter, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused parameter %0", 712, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_private_field, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "private field %0 is not used", 713, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_property_backing_ivar, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "ivar %0 which backs the property is not referenced in this property's accessor", 714, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_property_expr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "property access result unused - getters should not be used for side effects", 705, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_result, CLASS_WARNING, (unsigned)diag::Severity::Warning, "ignoring return value of function declared with %0 attribute", 715, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_template, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused %select{function|variable}0 template %1", 716, SFINAE_Suppress, false, false, 2)
+DIAG(warn_unused_variable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "unused variable %0", 718, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_voidptr, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; should this cast be to 'void'?", 717, SFINAE_Suppress, false, false, 32)
+DIAG(warn_unused_volatile, CLASS_WARNING, (unsigned)diag::Severity::Warning, "expression result unused; assign into a variable to force a volatile load", 719, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on object '%1' while it is in the '%2' state", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_use_of_temp_in_invalid_state, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "invalid invocation of method '%0' on a temporary object while it is in the '%1' state", 134, SFINAE_Suppress, false, false, 2)
+DIAG(warn_used_but_marked_unused, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 was marked unused but was used", 720, SFINAE_Suppress, false, false, 2)
+DIAG(warn_user_literal_reserved, CLASS_WARNING, (unsigned)diag::Severity::Warning, "user-defined literal suffixes not starting with '_' are reserved%select{; no literal will invoke this operator|}0", 721, SFINAE_Suppress, false, false, 2)
+DIAG(warn_using_directive_in_header, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "using namespace directive in global context in header", 269, SFINAE_Suppress, false, false, 2)
+DIAG(warn_va_start_type_is_undefined, CLASS_WARNING, (unsigned)diag::Severity::Warning, "passing %select{an object that undergoes default argument promotion|an object of reference type|a parameter declared with the 'register' keyword}0 to 'va_start' has undefined behavior", 723, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 the value pointed to by %0 requires holding %select{any mutex|any mutex exclusively}1", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_deref_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 the value pointed to by %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 647, SFINAE_Suppress, false, false, 2)
+DIAG(warn_var_template_missing, CLASS_WARNING, (unsigned)diag::Severity::Warning, "instantiation of variable %q0 required here, but no definition is available", 665, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_any_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}1 variable %0 requires holding %select{any mutex|any mutex exclusively}1", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 643, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_requires_lock_precise, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{reading|writing}3 variable %1 requires holding %0 %select{'%2'|'%2' exclusively}3", 647, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variable_sized_ivar_visibility, CLASS_WARNING, (unsigned)diag::Severity::Warning, "field %0 with variable sized type %1 is not visible to subclasses and can conflict with their instance variables", 453, SFINAE_Suppress, false, false, 2)
+DIAG(warn_variables_not_in_loop_body, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable%select{s| %1|s %1 and %2|s %1, %2, and %3|s %1, %2, %3, and %4}0 used in loop condition not modified in loop body", 222, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vbase_moved_multiple_times, CLASS_WARNING, (unsigned)diag::Severity::Warning, "defaulted move assignment operator of %0 will move assign virtual base class %1 multiple times", 416, SFINAE_Suppress, false, false, 2)
+DIAG(warn_vector_long_decl_spec_combination, CLASS_WARNING, (unsigned)diag::Severity::Warning, "Use of 'long' with '__vector' is deprecated", 156, SFINAE_Suppress, false, false, 27)
+DIAG(warn_vector_mode_deprecated, CLASS_WARNING, (unsigned)diag::Severity::Warning, "specifying vector types with the 'mode' attribute is deprecated; use the 'vector_size' attribute instead", 157, SFINAE_Suppress, false, false, 27)
+DIAG(warn_vla_used, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "variable length array used", 730, SFINAE_Suppress, false, false, 2)
 DIAG(warn_weak_identifier_undeclared, CLASS_WARNING, (unsigned)diag::Severity::Warning, "weak identifier %0 never declared", 0, SFINAE_Suppress, false, false, 2)
 DIAG(warn_weak_import, CLASS_WARNING, (unsigned)diag::Severity::Warning, "an already-declared variable is made a weak_import declaration %0", 0, SFINAE_Suppress, false, false, 2)
-DIAG(warn_weak_template_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template instantiation %0 will emit a vtable in every translation unit", 717, SFINAE_Suppress, false, false, 2)
-DIAG(warn_weak_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", 718, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_template_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "explicit template instantiation %0 will emit a vtable in every translation unit", 734, SFINAE_Suppress, false, false, 2)
+DIAG(warn_weak_vtable, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%0 has no out-of-line virtual method definitions; its vtable will be emitted in every translation unit", 735, SFINAE_Suppress, false, false, 2)
 DIAG(warn_wrong_absolute_value_type, CLASS_WARNING, (unsigned)diag::Severity::Warning, "using %select{integer|floating point|complex}1 absolute value function %0 when argument is of %select{integer|floating point|complex}2 type", 8, SFINAE_Suppress, false, false, 2)
-DIAG(warn_zero_as_null_pointer_constant, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "zero as null pointer constant", 721, SFINAE_Suppress, false, false, 19)
-DIAG(warn_zero_size_struct_union_compat, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 69, SFINAE_Suppress, false, false, 2)
-DIAG(warn_zero_size_struct_union_in_extern_c, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 205, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_as_null_pointer_constant, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "zero as null pointer constant", 738, SFINAE_Suppress, false, false, 19)
+DIAG(warn_zero_size_struct_union_compat, CLASS_WARNING, (unsigned)diag::Severity::Ignored, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 70, SFINAE_Suppress, false, false, 2)
+DIAG(warn_zero_size_struct_union_in_extern_c, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{|empty }0%select{struct|union}1 has size 0 in C, %select{size 1|non-zero size}2 in C++", 209, SFINAE_Suppress, false, false, 2)
diff --git a/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc b/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
index 77f8996..6b0c69b 100644
--- a/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
+++ b/linux-x64/clang/include/clang/Basic/DiagnosticSerializationKinds.inc
@@ -24,9 +24,10 @@
 DIAG(err_module_odr_violation_definition_data, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{%4 base %plural{1:class|:classes}4|%4 virtual base %plural{1:class|:classes}4|%ordinal4 base class with type %5|%ordinal4 %select{non-virtual|virtual}5 base class %6|%ordinal4 base class %5 with %select{public|protected|private|no}6 access specifier}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_module_odr_violation_different_definitions, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2' is here|defined here}1", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_module_odr_violation_different_instantiations, CLASS_ERROR, (unsigned)diag::Severity::Error, "instantiation of %q0 is different in different modules", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_enum, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{enum that is %select{not scoped|scoped}4|enum scoped with keyword %select{struct|class}4|enum %select{without|with}4 specified type|enum with specified type %4|enum with %4 element%s4|%ordinal4 element has name %5|%ordinal4 element %5 %select{has|does not have}6 an initilizer|%ordinal4 element %5 has an initializer|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_module_odr_violation_function, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; %select{definition in module '%2'|defined here}1 first difference is %select{return type is %4|%ordinal4 parameter with name %5|%ordinal4 parameter with type %5%select{| decayed from %7}6|%ordinal4 parameter with%select{out|}5 a default argument|%ordinal4 parameter with a default argument|function body}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_mismatch_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_module_odr_violation_mismatch_decl_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initalizer|field %4 with an initializer|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6|data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5|friend %select{class|function}4|friend %4|friend function %4|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_mismatch_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_module_odr_violation_mismatch_decl_diff, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{static assert with condition|static assert with message|static assert with %select{|no }4message|field %4|field %4 with type %5|%select{non-|}5bitfield %4|bitfield %4 with one width expression|%select{non-|}5mutable field %4|field %4 with %select{no|an}5 initalizer|field %4 with an initializer|%select{method %5|constructor|destructor}4|%select{method %5|constructor|destructor}4 is %select{not deleted|deleted}6|%select{method %5|constructor|destructor}4 is %select{not defaulted|defaulted}6|%select{method %5|constructor|destructor}4 is %select{|pure }6%select{not virtual|virtual}7|%select{method %5|constructor|destructor}4 is %select{not static|static}6|%select{method %5|constructor|destructor}4 is %select{not volatile|volatile}6|%select{method %5|constructor|destructor}4 is %select{not const|const}6|%select{method %5|constructor|destructor}4 is %select{not inline|inline}6|%select{method %5|constructor|destructor}4 that has %6 parameter%s6|%select{method %5|constructor|destructor}4 with %ordinal6 parameter of type %7%select{| decayed from %9}8|%select{method %5|constructor|destructor}4 with %ordinal6 parameter named %7|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with%select{out|}7 a default argument|%select{method %5|constructor|destructor}4 with %ordinal6 parameter with a default argument|%select{method %5|constructor|destructor}4 with %select{no |}6template arguments|%select{method %5|constructor|destructor}4 with %6 template argument%s6|%select{method %5|constructor|destructor}4 with %6 for %ordinal7 template argument|%select{method %5|constructor|destructor}4 with %select{no body|body}6|%select{method %5|constructor|destructor}4 with body|%select{typedef|type alias}4 name %5|%select{typedef|type alias}4 %5 with underlying type %6|data member with name %4|data member %4 with type %5|data member %4 with%select{out|}5 an initializer|data member %4 with an initializer|data member %4 %select{is constexpr|is not constexpr}5|friend %select{class|function}4|friend %4|friend function %4|function template %4 with %5 template parameter%s5|function template %4 with %ordinal5 template parameter being a %select{type|non-type|template}6 template parameter|function template %4 with %ordinal5 template parameter %select{with no name|named %7}6|function template %4 with %ordinal5 template parameter with %select{no |}6default argument|function template %4 with %ordinal5 template parameter with default argument %6|function template %4 with %ordinal5 template parameter with one type|function template %4 with %ordinal5 template parameter %select{not |}6being a template parameter pack|}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_module_odr_violation_mismatch_decl_unknown, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 %select{with definition in module '%2'|defined here}1 has different definitions in different modules; first difference is this %select{||||static assert|field|method|type alias|typedef|data member|friend declaration|unexpected decl}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_module_odr_violation_missing_decl, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 from module '%1' is not present in definition of %q2%select{ in module '%4'| provided earlier}3", 0, SFINAE_Report, false, true, 15)
 DIAG(err_module_odr_violation_template_parameter, CLASS_ERROR, (unsigned)diag::Severity::Error, "%q0 has different definitions in different modules; first difference is %select{definition in module '%2'|defined here}1 found %select{unnamed template parameter|template parameter %4|template parameter with %select{no |}4default argument|template parameter with default argument}3", 0, SFINAE_SubstitutionFailure, false, true, 15)
@@ -38,7 +39,7 @@
 DIAG(err_pch_macro_def_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "macro '%0' was %select{defined|undef'd}1 in the precompiled header but %select{undef'd|defined}1 on the command line", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_pch_modulecache_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH was compiled with module cache path '%0', but the path is currently '%1'", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_pch_pp_detailed_record, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-detailed-preprocessing-record' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
-DIAG(err_pch_targetopt_feature_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{AST file|current translation unit}0 was compiled with the target feature'%1' but the %select{current translation unit is|AST file was}0 not", 0, SFINAE_SubstitutionFailure, false, true, 15)
+DIAG(err_pch_targetopt_feature_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{AST file was|current translation unit is}0 compiled with the target feature '%1' but the %select{current translation unit is|AST file was}0 not", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_pch_targetopt_mismatch, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file was compiled for the %0 '%1' but the current translation unit is being compiled for target '%2'", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_pch_undef, CLASS_ERROR, (unsigned)diag::Severity::Error, "%select{command line contains|precompiled header was built with}0 '-undef' but %select{precompiled header was not built with it|it is not present on the command line}0", 0, SFINAE_SubstitutionFailure, false, true, 15)
 DIAG(err_pch_version_too_new, CLASS_ERROR, (unsigned)diag::Severity::Error, "PCH file uses a newer PCH format that cannot be read", 0, SFINAE_SubstitutionFailure, false, true, 15)
@@ -50,9 +51,10 @@
 DIAG(note_module_file_imported_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "imported by %select{|module '%2' in }1'%0'", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_definition_data, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{%2 base %plural{1:class|:classes}2|%2 virtual base %plural{1:class|:classes}2|%ordinal2 base class with different type %3|%ordinal2 %select{non-virtual|virtual}3 base class %4|%ordinal2 base class %3 with %select{public|protected|private|no}4 access specifier}1", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_different_definitions, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition in module '%0' is here", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_enum, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{enum that is %select{not scoped|scoped}2|enum scoped with keyword %select{struct|class}2|enum %select{without|with}2 specified type|enum with specified type %2|enum with %2 element%s2|%ordinal2 element has name %3|%ordinal2 element %3 %select{has|does not have}4 an initializer|%ordinal2 element %3 has different initializer|}1", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_function, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{different return type %2|%ordinal2 parameter with name %3|%ordinal2 parameter with type %3%select{| decayed from %5}4|%ordinal2 parameter with%select{out|}3 a default argument|%ordinal2 parameter with a different default argument|a different body}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_mismatch_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration}1", 0, SFINAE_Suppress, false, false, 15)
-DIAG(note_module_odr_violation_mismatch_decl_diff, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|field %2|field %2 with type %3|%select{non-|}3bitfield %2|bitfield %2 with different width expression|%select{non-|}3mutable field %2|field %2 with %select{no|an}3 initializer|field %2 with a different initializer|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 that has %4 parameter%s4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter of type %5%select{| decayed from %7}6|%select{method %3|constructor|destructor}2 with %ordinal4 parameter named %5|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4|data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3|friend %select{class|function}2|friend %2|friend function %2|}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_mismatch_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{end of class|public access specifier|private access specifier|protected access specifier|static assert|field|method|type alias|typedef|data member|friend declaration|function template}1", 0, SFINAE_Suppress, false, false, 15)
+DIAG(note_module_odr_violation_mismatch_decl_diff, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{static assert with different condition|static assert with different message|static assert with %select{|no }2message|field %2|field %2 with type %3|%select{non-|}3bitfield %2|bitfield %2 with different width expression|%select{non-|}3mutable field %2|field %2 with %select{no|an}3 initializer|field %2 with a different initializer|%select{method %3|constructor|destructor}2|%select{method %3|constructor|destructor}2 is %select{not deleted|deleted}4|%select{method %3|constructor|destructor}2 is %select{not defaulted|defaulted}4|%select{method %3|constructor|destructor}2 is %select{|pure }4%select{not virtual|virtual}5|%select{method %3|constructor|destructor}2 is %select{not static|static}4|%select{method %3|constructor|destructor}2 is %select{not volatile|volatile}4|%select{method %3|constructor|destructor}2 is %select{not const|const}4|%select{method %3|constructor|destructor}2 is %select{not inline|inline}4|%select{method %3|constructor|destructor}2 that has %4 parameter%s4|%select{method %3|constructor|destructor}2 with %ordinal4 parameter of type %5%select{| decayed from %7}6|%select{method %3|constructor|destructor}2 with %ordinal4 parameter named %5|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with%select{out|}5 a default argument|%select{method %3|constructor|destructor}2 with %ordinal4 parameter with a different default argument|%select{method %3|constructor|destructor}2 with %select{no |}4template arguments|%select{method %3|constructor|destructor}2 with %4 template argument%s4|%select{method %3|constructor|destructor}2 with %4 for %ordinal5 template argument|%select{method %3|constructor|destructor}2 with %select{no body|body}4|%select{method %3|constructor|destructor}2 with different body|%select{typedef|type alias}2 name %3|%select{typedef|type alias}2 %3 with different underlying type %4|data member with name %2|data member %2 with different type %3|data member %2 with%select{out|}3 an initializer|data member %2 with a different initializer|data member %2 %select{is constexpr|is not constexpr}3|friend %select{class|function}2|friend %2|friend function %2|function template %2 with %3 template parameter%s3|function template %2 with %ordinal3 template paramter being a %select{type|non-type|template}4 template parameter|function template %2 with %ordinal3 template parameter %select{with no name|named %5}4|function template %2 with %ordinal3 template parameter with %select{no |}4default argument|function template %2 with %ordinal3 template parameter with default argument %4|function template %2 with %ordinal3 template parameter with different type|function template %2 with %ordinal3 template parameter %select{not |}4being a template parameter pack|}1", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_mismatch_decl_unknown, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "but in '%0' found %select{||||different static assert|different field|different method|different type alias|different typedef|different data member|different friend declaration|another unexpected decl}1", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_no_possible_decls, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "definition has no member %0", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_module_odr_violation_possible_decl, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "declaration of %0 does not match", 0, SFINAE_Suppress, false, false, 15)
@@ -60,6 +62,6 @@
 DIAG(note_pch_rebuild_required, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "please rebuild precompiled header '%0'", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_pch_required_by, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "'%0' required by '%1'", 0, SFINAE_Suppress, false, false, 15)
 DIAG(note_second_module_difference, CLASS_NOTE, (unsigned)diag::Severity::Fatal, "in second definition, possible difference is here", 0, SFINAE_Suppress, false, false, 15)
-DIAG(warn_duplicate_module_file_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate module file extension block name '%0'", 399, SFINAE_Suppress, false, false, 15)
-DIAG(warn_module_system_bit_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module file '%0' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", 397, SFINAE_Suppress, false, false, 15)
-DIAG(warn_module_uses_date_time, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{precompiled header|module}0 uses __DATE__ or __TIME__", 499, SFINAE_Suppress, false, false, 18)
+DIAG(warn_duplicate_module_file_extension, CLASS_WARNING, (unsigned)diag::Severity::Warning, "duplicate module file extension block name '%0'", 407, SFINAE_Suppress, false, false, 15)
+DIAG(warn_module_system_bit_conflict, CLASS_WARNING, (unsigned)diag::Severity::Warning, "module file '%0' was validated as a system module and is now being imported as a non-system module; any difference in diagnostic options will be ignored", 405, SFINAE_Suppress, false, false, 15)
+DIAG(warn_module_uses_date_time, CLASS_WARNING, (unsigned)diag::Severity::Warning, "%select{precompiled header|module}0 uses __DATE__ or __TIME__", 509, SFINAE_Suppress, false, false, 18)
diff --git a/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h b/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
index 132b5ba..0c2c8e6 100644
--- a/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
+++ b/linux-x64/clang/include/clang/Basic/ExceptionSpecificationType.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the ExceptionSpecificationType enumeration and various
+/// Defines the ExceptionSpecificationType enumeration and various
 /// utility functions.
 ///
 //===----------------------------------------------------------------------===//
@@ -17,14 +17,16 @@
 
 namespace clang {
 
-/// \brief The various types of exception specifications that exist in C++11.
+/// The various types of exception specifications that exist in C++11.
 enum ExceptionSpecificationType {
   EST_None,             ///< no exception specification
   EST_DynamicNone,      ///< throw()
   EST_Dynamic,          ///< throw(T1, T2)
   EST_MSAny,            ///< Microsoft throw(...) extension
   EST_BasicNoexcept,    ///< noexcept
-  EST_ComputedNoexcept, ///< noexcept(expression)
+  EST_DependentNoexcept,///< noexcept(expression), value-dependent
+  EST_NoexceptFalse,    ///< noexcept(expression), evals to 'false'
+  EST_NoexceptTrue,     ///< noexcept(expression), evals to 'true'
   EST_Unevaluated,      ///< not evaluated yet, for special member function
   EST_Uninstantiated,   ///< not instantiated yet
   EST_Unparsed          ///< not parsed yet
@@ -34,15 +36,20 @@
   return ESpecType >= EST_DynamicNone && ESpecType <= EST_MSAny;
 }
 
+inline bool isComputedNoexcept(ExceptionSpecificationType ESpecType) {
+  return ESpecType >= EST_DependentNoexcept &&
+         ESpecType <= EST_NoexceptTrue;
+}
+
 inline bool isNoexceptExceptionSpec(ExceptionSpecificationType ESpecType) {
-  return ESpecType == EST_BasicNoexcept || ESpecType == EST_ComputedNoexcept;
+  return ESpecType == EST_BasicNoexcept || isComputedNoexcept(ESpecType);
 }
 
 inline bool isUnresolvedExceptionSpec(ExceptionSpecificationType ESpecType) {
   return ESpecType == EST_Unevaluated || ESpecType == EST_Uninstantiated;
 }
 
-/// \brief Possible results from evaluation of a noexcept expression.
+/// Possible results from evaluation of a noexcept expression.
 enum CanThrowResult {
   CT_Cannot,
   CT_Dependent,
diff --git a/linux-x64/clang/include/clang/Basic/ExpressionTraits.h b/linux-x64/clang/include/clang/Basic/ExpressionTraits.h
index 0363a1d..2983add 100644
--- a/linux-x64/clang/include/clang/Basic/ExpressionTraits.h
+++ b/linux-x64/clang/include/clang/Basic/ExpressionTraits.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines enumerations for expression traits intrinsics.
+/// Defines enumerations for expression traits intrinsics.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/clang/Basic/Features.def b/linux-x64/clang/include/clang/Basic/Features.def
new file mode 100644
index 0000000..a0e0ce4
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/Features.def
@@ -0,0 +1,238 @@
+//===--- Features.def - Features and Extensions database --------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines features exposed via __has_feature and extensions exposed
+// via __has_extension. Users of this file must either define the FEATURE or
+// EXTENSION macros (or both) to make use of this information. Note that these
+// macros expect the following declarations to be available for the Predicate:
+//
+//   const LangOptions &LangOpts;
+//   const Preprocessor &PP;
+//
+// The Predicate field dictates the conditions under which the feature or
+// extension will be made available.
+//===----------------------------------------------------------------------===//
+
+#if !defined(FEATURE) && !defined(EXTENSION)
+#  error Define either the FEATURE or EXTENSION macro to handle features
+#endif
+
+#ifndef FEATURE
+#define FEATURE(Name, Predicate)
+#endif
+
+#ifndef EXTENSION
+#define EXTENSION(Name, Predicate)
+#endif
+
+FEATURE(address_sanitizer,
+        LangOpts.Sanitize.hasOneOf(SanitizerKind::Address |
+                                   SanitizerKind::KernelAddress))
+FEATURE(hwaddress_sanitizer,
+        LangOpts.Sanitize.hasOneOf(SanitizerKind::HWAddress |
+                                   SanitizerKind::KernelHWAddress))
+FEATURE(assume_nonnull, true)
+FEATURE(attribute_analyzer_noreturn, true)
+FEATURE(attribute_availability, true)
+FEATURE(attribute_availability_with_message, true)
+FEATURE(attribute_availability_app_extension, true)
+FEATURE(attribute_availability_with_version_underscores, true)
+FEATURE(attribute_availability_tvos, true)
+FEATURE(attribute_availability_watchos, true)
+FEATURE(attribute_availability_with_strict, true)
+FEATURE(attribute_availability_with_replacement, true)
+FEATURE(attribute_availability_in_templates, true)
+FEATURE(attribute_cf_returns_not_retained, true)
+FEATURE(attribute_cf_returns_retained, true)
+FEATURE(attribute_cf_returns_on_parameters, true)
+FEATURE(attribute_deprecated_with_message, true)
+FEATURE(attribute_deprecated_with_replacement, true)
+FEATURE(attribute_ext_vector_type, true)
+FEATURE(attribute_ns_returns_not_retained, true)
+FEATURE(attribute_ns_returns_retained, true)
+FEATURE(attribute_ns_consumes_self, true)
+FEATURE(attribute_ns_consumed, true)
+FEATURE(attribute_cf_consumed, true)
+FEATURE(attribute_objc_ivar_unused, true)
+FEATURE(attribute_objc_method_family, true)
+FEATURE(attribute_overloadable, true)
+FEATURE(attribute_unavailable_with_message, true)
+FEATURE(attribute_unused_on_fields, true)
+FEATURE(attribute_diagnose_if_objc, true)
+FEATURE(blocks, LangOpts.Blocks)
+FEATURE(c_thread_safety_attributes, true)
+FEATURE(cxx_exceptions, LangOpts.CXXExceptions)
+FEATURE(cxx_rtti, LangOpts.RTTI &&LangOpts.RTTIData)
+FEATURE(enumerator_attributes, true)
+FEATURE(nullability, true)
+FEATURE(nullability_on_arrays, true)
+FEATURE(memory_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Memory))
+FEATURE(thread_sanitizer, LangOpts.Sanitize.has(SanitizerKind::Thread))
+FEATURE(dataflow_sanitizer, LangOpts.Sanitize.has(SanitizerKind::DataFlow))
+FEATURE(efficiency_sanitizer,
+        LangOpts.Sanitize.hasOneOf(SanitizerKind::Efficiency))
+FEATURE(scudo, LangOpts.Sanitize.hasOneOf(SanitizerKind::Scudo))
+// Objective-C features
+FEATURE(objc_arr, LangOpts.ObjCAutoRefCount) // FIXME: REMOVE?
+FEATURE(objc_arc, LangOpts.ObjCAutoRefCount)
+FEATURE(objc_arc_fields, true)
+FEATURE(objc_arc_weak, LangOpts.ObjCWeak)
+FEATURE(objc_default_synthesize_properties, LangOpts.ObjC2)
+FEATURE(objc_fixed_enum, LangOpts.ObjC2)
+FEATURE(objc_instancetype, LangOpts.ObjC2)
+FEATURE(objc_kindof, LangOpts.ObjC2)
+FEATURE(objc_modules, LangOpts.ObjC2 &&LangOpts.Modules)
+FEATURE(objc_nonfragile_abi, LangOpts.ObjCRuntime.isNonFragile())
+FEATURE(objc_property_explicit_atomic, true)
+FEATURE(objc_protocol_qualifier_mangling, true)
+FEATURE(objc_weak_class, LangOpts.ObjCRuntime.hasWeakClassImport())
+FEATURE(ownership_holds, true)
+FEATURE(ownership_returns, true)
+FEATURE(ownership_takes, true)
+FEATURE(objc_bool, true)
+FEATURE(objc_subscripting, LangOpts.ObjCRuntime.isNonFragile())
+FEATURE(objc_array_literals, LangOpts.ObjC2)
+FEATURE(objc_dictionary_literals, LangOpts.ObjC2)
+FEATURE(objc_boxed_expressions, LangOpts.ObjC2)
+FEATURE(objc_boxed_nsvalue_expressions, LangOpts.ObjC2)
+FEATURE(arc_cf_code_audited, true)
+FEATURE(objc_bridge_id, true)
+FEATURE(objc_bridge_id_on_typedefs, true)
+FEATURE(objc_generics, LangOpts.ObjC2)
+FEATURE(objc_generics_variance, LangOpts.ObjC2)
+FEATURE(objc_class_property, LangOpts.ObjC2)
+// C11 features
+FEATURE(c_alignas, LangOpts.C11)
+FEATURE(c_alignof, LangOpts.C11)
+FEATURE(c_atomic, LangOpts.C11)
+FEATURE(c_generic_selections, LangOpts.C11)
+FEATURE(c_static_assert, LangOpts.C11)
+FEATURE(c_thread_local, LangOpts.C11 &&PP.getTargetInfo().isTLSSupported())
+// C++11 features
+FEATURE(cxx_access_control_sfinae, LangOpts.CPlusPlus11)
+FEATURE(cxx_alias_templates, LangOpts.CPlusPlus11)
+FEATURE(cxx_alignas, LangOpts.CPlusPlus11)
+FEATURE(cxx_alignof, LangOpts.CPlusPlus11)
+FEATURE(cxx_atomic, LangOpts.CPlusPlus11)
+FEATURE(cxx_attributes, LangOpts.CPlusPlus11)
+FEATURE(cxx_auto_type, LangOpts.CPlusPlus11)
+FEATURE(cxx_constexpr, LangOpts.CPlusPlus11)
+FEATURE(cxx_constexpr_string_builtins, LangOpts.CPlusPlus11)
+FEATURE(cxx_decltype, LangOpts.CPlusPlus11)
+FEATURE(cxx_decltype_incomplete_return_types, LangOpts.CPlusPlus11)
+FEATURE(cxx_default_function_template_args, LangOpts.CPlusPlus11)
+FEATURE(cxx_defaulted_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_delegating_constructors, LangOpts.CPlusPlus11)
+FEATURE(cxx_deleted_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_explicit_conversions, LangOpts.CPlusPlus11)
+FEATURE(cxx_generalized_initializers, LangOpts.CPlusPlus11)
+FEATURE(cxx_implicit_moves, LangOpts.CPlusPlus11)
+FEATURE(cxx_inheriting_constructors, LangOpts.CPlusPlus11)
+FEATURE(cxx_inline_namespaces, LangOpts.CPlusPlus11)
+FEATURE(cxx_lambdas, LangOpts.CPlusPlus11)
+FEATURE(cxx_local_type_template_args, LangOpts.CPlusPlus11)
+FEATURE(cxx_nonstatic_member_init, LangOpts.CPlusPlus11)
+FEATURE(cxx_noexcept, LangOpts.CPlusPlus11)
+FEATURE(cxx_nullptr, LangOpts.CPlusPlus11)
+FEATURE(cxx_override_control, LangOpts.CPlusPlus11)
+FEATURE(cxx_range_for, LangOpts.CPlusPlus11)
+FEATURE(cxx_raw_string_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_reference_qualified_functions, LangOpts.CPlusPlus11)
+FEATURE(cxx_rvalue_references, LangOpts.CPlusPlus11)
+FEATURE(cxx_strong_enums, LangOpts.CPlusPlus11)
+FEATURE(cxx_static_assert, LangOpts.CPlusPlus11)
+FEATURE(cxx_thread_local,
+        LangOpts.CPlusPlus11 &&PP.getTargetInfo().isTLSSupported())
+FEATURE(cxx_trailing_return, LangOpts.CPlusPlus11)
+FEATURE(cxx_unicode_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_unrestricted_unions, LangOpts.CPlusPlus11)
+FEATURE(cxx_user_literals, LangOpts.CPlusPlus11)
+FEATURE(cxx_variadic_templates, LangOpts.CPlusPlus11)
+// C++14 features
+FEATURE(cxx_aggregate_nsdmi, LangOpts.CPlusPlus14)
+FEATURE(cxx_binary_literals, LangOpts.CPlusPlus14)
+FEATURE(cxx_contextual_conversions, LangOpts.CPlusPlus14)
+FEATURE(cxx_decltype_auto, LangOpts.CPlusPlus14)
+FEATURE(cxx_generic_lambdas, LangOpts.CPlusPlus14)
+FEATURE(cxx_init_captures, LangOpts.CPlusPlus14)
+FEATURE(cxx_relaxed_constexpr, LangOpts.CPlusPlus14)
+FEATURE(cxx_return_type_deduction, LangOpts.CPlusPlus14)
+FEATURE(cxx_variable_templates, LangOpts.CPlusPlus14)
+// NOTE: For features covered by SD-6, it is preferable to provide *only*
+// the SD-6 macro and not a __has_feature check.
+
+// C++ TSes
+// FEATURE(cxx_runtime_arrays, LangOpts.CPlusPlusTSArrays)
+// FEATURE(cxx_concepts, LangOpts.CPlusPlusTSConcepts)
+// FIXME: Should this be __has_feature or __has_extension?
+// FEATURE(raw_invocation_type, LangOpts.CPlusPlus)
+// Type traits
+// N.B. Additional type traits should not be added to the following list.
+// Instead, they should be detected by has_extension.
+FEATURE(has_nothrow_assign, LangOpts.CPlusPlus)
+FEATURE(has_nothrow_copy, LangOpts.CPlusPlus)
+FEATURE(has_nothrow_constructor, LangOpts.CPlusPlus)
+FEATURE(has_trivial_assign, LangOpts.CPlusPlus)
+FEATURE(has_trivial_copy, LangOpts.CPlusPlus)
+FEATURE(has_trivial_constructor, LangOpts.CPlusPlus)
+FEATURE(has_trivial_destructor, LangOpts.CPlusPlus)
+FEATURE(has_virtual_destructor, LangOpts.CPlusPlus)
+FEATURE(is_abstract, LangOpts.CPlusPlus)
+FEATURE(is_base_of, LangOpts.CPlusPlus)
+FEATURE(is_class, LangOpts.CPlusPlus)
+FEATURE(is_constructible, LangOpts.CPlusPlus)
+FEATURE(is_convertible_to, LangOpts.CPlusPlus)
+FEATURE(is_empty, LangOpts.CPlusPlus)
+FEATURE(is_enum, LangOpts.CPlusPlus)
+FEATURE(is_final, LangOpts.CPlusPlus)
+FEATURE(is_literal, LangOpts.CPlusPlus)
+FEATURE(is_standard_layout, LangOpts.CPlusPlus)
+FEATURE(is_pod, LangOpts.CPlusPlus)
+FEATURE(is_polymorphic, LangOpts.CPlusPlus)
+FEATURE(is_sealed, LangOpts.CPlusPlus &&LangOpts.MicrosoftExt)
+FEATURE(is_trivial, LangOpts.CPlusPlus)
+FEATURE(is_trivially_assignable, LangOpts.CPlusPlus)
+FEATURE(is_trivially_constructible, LangOpts.CPlusPlus)
+FEATURE(is_trivially_copyable, LangOpts.CPlusPlus)
+FEATURE(is_union, LangOpts.CPlusPlus)
+FEATURE(modules, LangOpts.Modules)
+FEATURE(safe_stack, LangOpts.Sanitize.has(SanitizerKind::SafeStack))
+FEATURE(shadow_call_stack,
+        LangOpts.Sanitize.has(SanitizerKind::ShadowCallStack))
+FEATURE(tls, PP.getTargetInfo().isTLSSupported())
+FEATURE(underlying_type, LangOpts.CPlusPlus)
+
+// C11 features supported by other languages as extensions.
+EXTENSION(c_alignas, true)
+EXTENSION(c_alignof, true)
+EXTENSION(c_atomic, true)
+EXTENSION(c_generic_selections, true)
+EXTENSION(c_static_assert, true)
+EXTENSION(c_thread_local, PP.getTargetInfo().isTLSSupported())
+// C++11 features supported by other languages as extensions.
+EXTENSION(cxx_atomic, LangOpts.CPlusPlus)
+EXTENSION(cxx_deleted_functions, LangOpts.CPlusPlus)
+EXTENSION(cxx_explicit_conversions, LangOpts.CPlusPlus)
+EXTENSION(cxx_inline_namespaces, LangOpts.CPlusPlus)
+EXTENSION(cxx_local_type_template_args, LangOpts.CPlusPlus)
+EXTENSION(cxx_nonstatic_member_init, LangOpts.CPlusPlus)
+EXTENSION(cxx_override_control, LangOpts.CPlusPlus)
+EXTENSION(cxx_range_for, LangOpts.CPlusPlus)
+EXTENSION(cxx_reference_qualified_functions, LangOpts.CPlusPlus)
+EXTENSION(cxx_rvalue_references, LangOpts.CPlusPlus)
+EXTENSION(cxx_variadic_templates, LangOpts.CPlusPlus)
+// C++14 features supported by other languages as extensions.
+EXTENSION(cxx_binary_literals, true)
+EXTENSION(cxx_init_captures, LangOpts.CPlusPlus11)
+EXTENSION(cxx_variable_templates, LangOpts.CPlusPlus)
+// Miscellaneous language extensions
+EXTENSION(overloadable_unmarked, true)
+
+#undef EXTENSION
+#undef FEATURE
diff --git a/linux-x64/clang/include/clang/Basic/FileManager.h b/linux-x64/clang/include/clang/Basic/FileManager.h
index b817dd2..ab5dfca 100644
--- a/linux-x64/clang/include/clang/Basic/FileManager.h
+++ b/linux-x64/clang/include/clang/Basic/FileManager.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::FileManager interface and associated types.
+/// Defines the clang::FileManager interface and associated types.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -40,7 +40,7 @@
 
 class FileSystemStatCache;
 
-/// \brief Cached information about one directory (either on disk or in
+/// Cached information about one directory (either on disk or in
 /// the virtual file system).
 class DirectoryEntry {
   friend class FileManager;
@@ -51,7 +51,7 @@
   StringRef getName() const { return Name; }
 };
 
-/// \brief Cached information about one file (either on disk
+/// Cached information about one file (either on disk
 /// or in the virtual file system).
 ///
 /// If the 'File' member is valid, then this FileEntry has an open file
@@ -70,7 +70,7 @@
   bool InPCH;
   bool IsValid;               // Is this \c FileEntry initialized and valid?
 
-  /// \brief The open file, if it is owned by the \p FileEntry.
+  /// The open file, if it is owned by the \p FileEntry.
   mutable std::unique_ptr<vfs::File> File;
 
 public:
@@ -90,12 +90,12 @@
   bool isInPCH() const { return InPCH; }
   time_t getModificationTime() const { return ModTime; }
 
-  /// \brief Return the directory the file lives in.
+  /// Return the directory the file lives in.
   const DirectoryEntry *getDir() const { return Dir; }
 
   bool operator<(const FileEntry &RHS) const { return UniqueID < RHS.UniqueID; }
 
-  /// \brief Check whether the file is a named pipe (and thus can't be opened by
+  /// Check whether the file is a named pipe (and thus can't be opened by
   /// the native FileManager methods).
   bool isNamedPipe() const { return IsNamedPipe; }
 
@@ -106,7 +106,7 @@
 
 struct FileData;
 
-/// \brief Implements support for file system lookup, file system caching,
+/// Implements support for file system lookup, file system caching,
 /// and directory search management.
 ///
 /// This also handles more advanced properties, such as uniquing files based
@@ -117,21 +117,21 @@
   IntrusiveRefCntPtr<vfs::FileSystem> FS;
   FileSystemOptions FileSystemOpts;
 
-  /// \brief Cache for existing real directories.
+  /// Cache for existing real directories.
   std::map<llvm::sys::fs::UniqueID, DirectoryEntry> UniqueRealDirs;
 
-  /// \brief Cache for existing real files.
+  /// Cache for existing real files.
   std::map<llvm::sys::fs::UniqueID, FileEntry> UniqueRealFiles;
 
-  /// \brief The virtual directories that we have allocated.
+  /// The virtual directories that we have allocated.
   ///
   /// For each virtual file (e.g. foo/bar/baz.cpp), we add all of its parent
   /// directories (foo/ and foo/bar/) here.
   SmallVector<std::unique_ptr<DirectoryEntry>, 4> VirtualDirectoryEntries;
-  /// \brief The virtual files that we have allocated.
+  /// The virtual files that we have allocated.
   SmallVector<std::unique_ptr<FileEntry>, 4> VirtualFileEntries;
 
-  /// \brief A cache that maps paths to directory entries (either real or
+  /// A cache that maps paths to directory entries (either real or
   /// virtual) we have looked up
   ///
   /// The actual Entries for real directories/files are
@@ -141,19 +141,19 @@
   ///
   llvm::StringMap<DirectoryEntry*, llvm::BumpPtrAllocator> SeenDirEntries;
 
-  /// \brief A cache that maps paths to file entries (either real or
+  /// A cache that maps paths to file entries (either real or
   /// virtual) we have looked up.
   ///
   /// \see SeenDirEntries
   llvm::StringMap<FileEntry*, llvm::BumpPtrAllocator> SeenFileEntries;
 
-  /// \brief The canonical names of directories.
+  /// The canonical names of directories.
   llvm::DenseMap<const DirectoryEntry *, llvm::StringRef> CanonicalDirNames;
 
-  /// \brief Storage for canonical names that we have computed.
+  /// Storage for canonical names that we have computed.
   llvm::BumpPtrAllocator CanonicalNameStorage;
 
-  /// \brief Each FileEntry we create is assigned a unique ID #.
+  /// Each FileEntry we create is assigned a unique ID #.
   ///
   unsigned NextFileUID;
 
@@ -176,7 +176,7 @@
               IntrusiveRefCntPtr<vfs::FileSystem> FS = nullptr);
   ~FileManager();
 
-  /// \brief Installs the provided FileSystemStatCache object within
+  /// Installs the provided FileSystemStatCache object within
   /// the FileManager.
   ///
   /// Ownership of this object is transferred to the FileManager.
@@ -190,13 +190,13 @@
   void addStatCache(std::unique_ptr<FileSystemStatCache> statCache,
                     bool AtBeginning = false);
 
-  /// \brief Removes the specified FileSystemStatCache object from the manager.
+  /// Removes the specified FileSystemStatCache object from the manager.
   void removeStatCache(FileSystemStatCache *statCache);
 
-  /// \brief Removes all FileSystemStatCache objects from the manager.
+  /// Removes all FileSystemStatCache objects from the manager.
   void clearStatCaches();
 
-  /// \brief Lookup, cache, and verify the specified directory (real or
+  /// Lookup, cache, and verify the specified directory (real or
   /// virtual).
   ///
   /// This returns NULL if the directory doesn't exist.
@@ -206,7 +206,7 @@
   const DirectoryEntry *getDirectory(StringRef DirName,
                                      bool CacheFailure = true);
 
-  /// \brief Lookup, cache, and verify the specified file (real or
+  /// Lookup, cache, and verify the specified file (real or
   /// virtual).
   ///
   /// This returns NULL if the file doesn't exist.
@@ -218,7 +218,7 @@
   const FileEntry *getFile(StringRef Filename, bool OpenFile = false,
                            bool CacheFailure = true);
 
-  /// \brief Returns the current file system options
+  /// Returns the current file system options
   FileSystemOptions &getFileSystemOpts() { return FileSystemOpts; }
   const FileSystemOptions &getFileSystemOpts() const { return FileSystemOpts; }
 
@@ -226,22 +226,22 @@
     return FS;
   }
 
-  /// \brief Retrieve a file entry for a "virtual" file that acts as
+  /// Retrieve a file entry for a "virtual" file that acts as
   /// if there were a file with the given name on disk.
   ///
   /// The file itself is not accessed.
   const FileEntry *getVirtualFile(StringRef Filename, off_t Size,
                                   time_t ModificationTime);
 
-  /// \brief Open the specified file as a MemoryBuffer, returning a new
+  /// Open the specified file as a MemoryBuffer, returning a new
   /// MemoryBuffer if successful, otherwise returning null.
   llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
   getBufferForFile(const FileEntry *Entry, bool isVolatile = false,
                    bool ShouldCloseOpenFile = true);
   llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
-  getBufferForFile(StringRef Filename);
+  getBufferForFile(StringRef Filename, bool isVolatile = false);
 
-  /// \brief Get the 'stat' information for the given \p Path.
+  /// Get the 'stat' information for the given \p Path.
   ///
   /// If the path is relative, it will be resolved against the WorkingDir of the
   /// FileManager's FileSystemOptions.
@@ -250,10 +250,10 @@
   bool getNoncachedStatValue(StringRef Path,
                              vfs::Status &Result);
 
-  /// \brief Remove the real file \p Entry from the cache.
+  /// Remove the real file \p Entry from the cache.
   void invalidateCache(const FileEntry *Entry);
 
-  /// \brief If path is not absolute and FileSystemOptions set the working
+  /// If path is not absolute and FileSystemOptions set the working
   /// directory, the path is modified to be relative to the given
   /// working directory.
   /// \returns true if \c path changed.
@@ -264,17 +264,17 @@
   /// \returns true if \c Path changed to absolute.
   bool makeAbsolutePath(SmallVectorImpl<char> &Path) const;
 
-  /// \brief Produce an array mapping from the unique IDs assigned to each
+  /// Produce an array mapping from the unique IDs assigned to each
   /// file to the corresponding FileEntry pointer.
   void GetUniqueIDMapping(
                     SmallVectorImpl<const FileEntry *> &UIDToFiles) const;
 
-  /// \brief Modifies the size and modification time of a previously created
+  /// Modifies the size and modification time of a previously created
   /// FileEntry. Use with caution.
   static void modifyFileEntry(FileEntry *File, off_t Size,
                               time_t ModificationTime);
 
-  /// \brief Retrieve the canonical name for a given directory.
+  /// Retrieve the canonical name for a given directory.
   ///
   /// This is a very expensive operation, despite its results being cached,
   /// and should only be used when the physical layout of the file system is
diff --git a/linux-x64/clang/include/clang/Basic/FileSystemOptions.h b/linux-x64/clang/include/clang/Basic/FileSystemOptions.h
index 38f1346..8b8b13b 100644
--- a/linux-x64/clang/include/clang/Basic/FileSystemOptions.h
+++ b/linux-x64/clang/include/clang/Basic/FileSystemOptions.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::FileSystemOptions interface.
+/// Defines the clang::FileSystemOptions interface.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -19,10 +19,10 @@
 
 namespace clang {
 
-/// \brief Keeps track of options that affect how file operations are performed.
+/// Keeps track of options that affect how file operations are performed.
 class FileSystemOptions {
 public:
-  /// \brief If set, paths are resolved as if the working directory was
+  /// If set, paths are resolved as if the working directory was
   /// set to the value of WorkingDir.
   std::string WorkingDir;
 };
diff --git a/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h b/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
index 7bd2267..1ec3446 100644
--- a/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
+++ b/linux-x64/clang/include/clang/Basic/FileSystemStatCache.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the FileSystemStatCache interface.
+/// Defines the FileSystemStatCache interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -51,7 +51,7 @@
   FileData() = default;
 };
 
-/// \brief Abstract interface for introducing a FileManager cache for 'stat'
+/// Abstract interface for introducing a FileManager cache for 'stat'
 /// system calls, which is used by precompiled and pretokenized headers to
 /// improve performance.
 class FileSystemStatCache {
@@ -62,7 +62,7 @@
 
 public:
   virtual ~FileSystemStatCache() = default;
-  
+
   enum LookupResult {
     /// We know the file exists and its cached stat data.
     CacheExists,
@@ -71,7 +71,7 @@
     CacheMissing
   };
 
-  /// \brief Get the 'stat' information for the specified path, using the cache
+  /// Get the 'stat' information for the specified path, using the cache
   /// to accelerate it if possible.
   ///
   /// \returns \c true if the path does not exist or \c false if it exists.
@@ -85,16 +85,16 @@
                   std::unique_ptr<vfs::File> *F, FileSystemStatCache *Cache,
                   vfs::FileSystem &FS);
 
-  /// \brief Sets the next stat call cache in the chain of stat caches.
+  /// Sets the next stat call cache in the chain of stat caches.
   /// Takes ownership of the given stat cache.
   void setNextStatCache(std::unique_ptr<FileSystemStatCache> Cache) {
     NextStatCache = std::move(Cache);
   }
-  
-  /// \brief Retrieve the next stat call cache in the chain.
+
+  /// Retrieve the next stat call cache in the chain.
   FileSystemStatCache *getNextStatCache() { return NextStatCache.get(); }
-  
-  /// \brief Retrieve the next stat call cache in the chain, transferring
+
+  /// Retrieve the next stat call cache in the chain, transferring
   /// ownership of this cache (and, transitively, all of the remaining caches)
   /// to the caller.
   std::unique_ptr<FileSystemStatCache> takeNextStatCache() {
@@ -120,12 +120,12 @@
   }
 };
 
-/// \brief A stat "cache" that can be used by FileManager to keep
+/// A stat "cache" that can be used by FileManager to keep
 /// track of the results of stat() calls that occur throughout the
 /// execution of the front end.
 class MemorizeStatCalls : public FileSystemStatCache {
 public:
-  /// \brief The set of stat() calls that have been seen.
+  /// The set of stat() calls that have been seen.
   llvm::StringMap<FileData, llvm::BumpPtrAllocator> StatCalls;
 
   using iterator =
diff --git a/linux-x64/clang/include/clang/Basic/FixedPoint.h b/linux-x64/clang/include/clang/Basic/FixedPoint.h
new file mode 100644
index 0000000..9a9b7cc
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/FixedPoint.h
@@ -0,0 +1,138 @@
+//===- FixedPoint.h - Fixed point constant handling -------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the fixed point number interface.
+/// This is a class for abstracting various operations performed on fixed point
+/// types described in ISO/IEC JTC1 SC22 WG14 N1169 starting at clause 4.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_FIXEDPOINT_H
+#define LLVM_CLANG_BASIC_FIXEDPOINT_H
+
+#include "llvm/ADT/APSInt.h"
+
+namespace clang {
+
+class ASTContext;
+class QualType;
+
+/// The fixed point semantics work similarly to llvm::fltSemantics. The width
+/// specifies the whole bit width of the underlying scaled integer (with padding
+/// if any). The scale represents the number of fractional bits in this type.
+/// When HasUnsignedPadding is true and this type is signed, the first bit
+/// in the value this represents is treaded as padding.
+class FixedPointSemantics {
+public:
+  FixedPointSemantics(unsigned Width, unsigned Scale, bool IsSigned,
+                      bool IsSaturated, bool HasUnsignedPadding)
+      : Width(Width), Scale(Scale), IsSigned(IsSigned),
+        IsSaturated(IsSaturated), HasUnsignedPadding(HasUnsignedPadding) {
+    assert(Width >= Scale && "Not enough room for the scale");
+  }
+
+  unsigned getWidth() const { return Width; }
+  unsigned getScale() const { return Scale; }
+  bool isSigned() const { return IsSigned; }
+  bool isSaturated() const { return IsSaturated; }
+  bool hasUnsignedPadding() const { return HasUnsignedPadding; }
+
+  void setSaturated(bool Saturated) { IsSaturated = Saturated; }
+
+  unsigned getIntegralBits() const {
+    if (IsSigned || (!IsSigned && HasUnsignedPadding))
+      return Width - Scale - 1;
+    else
+      return Width - Scale;
+  }
+
+private:
+  unsigned Width;
+  unsigned Scale;
+  bool IsSigned;
+  bool IsSaturated;
+  bool HasUnsignedPadding;
+};
+
+/// The APFixedPoint class works similarly to APInt/APSInt in that it is a
+/// functional replacement for a scaled integer. It is meant to replicate the
+/// fixed point types proposed in ISO/IEC JTC1 SC22 WG14 N1169. The class carries
+/// info about the fixed point type's width, sign, scale, and saturation, and
+/// provides different operations that would normally be performed on fixed point
+/// types.
+///
+/// Semantically this does not represent any existing C type other than fixed
+/// point types and should eventually be moved to LLVM if fixed point types gain
+/// native IR support.
+class APFixedPoint {
+ public:
+   APFixedPoint(const llvm::APInt &Val, const FixedPointSemantics &Sema)
+       : Val(Val, !Sema.isSigned()), Sema(Sema) {
+     assert(Val.getBitWidth() == Sema.getWidth() &&
+            "The value should have a bit width that matches the Sema width");
+   }
+
+   APFixedPoint(uint64_t Val, const FixedPointSemantics &Sema)
+       : APFixedPoint(llvm::APInt(Sema.getWidth(), Val, Sema.isSigned()),
+                      Sema) {}
+
+   llvm::APSInt getValue() const { return llvm::APSInt(Val, !Sema.isSigned()); }
+   inline unsigned getWidth() const { return Sema.getWidth(); }
+   inline unsigned getScale() const { return Sema.getScale(); }
+   inline bool isSaturated() const { return Sema.isSaturated(); }
+   inline bool isSigned() const { return Sema.isSigned(); }
+   inline bool hasPadding() const { return Sema.hasUnsignedPadding(); }
+
+   // Convert this number to match the semantics provided.
+   APFixedPoint convert(const FixedPointSemantics &DstSema) const;
+
+   APFixedPoint shr(unsigned Amt) const {
+     return APFixedPoint(Val >> Amt, Sema);
+  }
+
+  APFixedPoint shl(unsigned Amt) const {
+    return APFixedPoint(Val << Amt, Sema);
+  }
+
+  llvm::APSInt getIntPart() const {
+    if (Val < 0 && Val != -Val) // Cover the case when we have the min val
+      return -(-Val >> getScale());
+    else
+      return Val >> getScale();
+  }
+
+  // If LHS > RHS, return 1. If LHS == RHS, return 0. If LHS < RHS, return -1.
+  int compare(const APFixedPoint &Other) const;
+  bool operator==(const APFixedPoint &Other) const {
+    return compare(Other) == 0;
+  }
+  bool operator!=(const APFixedPoint &Other) const {
+    return compare(Other) != 0;
+  }
+  bool operator>(const APFixedPoint &Other) const { return compare(Other) > 0; }
+  bool operator<(const APFixedPoint &Other) const { return compare(Other) < 0; }
+  bool operator>=(const APFixedPoint &Other) const {
+    return compare(Other) >= 0;
+  }
+  bool operator<=(const APFixedPoint &Other) const {
+    return compare(Other) <= 0;
+  }
+
+  static APFixedPoint getMax(const FixedPointSemantics &Sema);
+  static APFixedPoint getMin(const FixedPointSemantics &Sema);
+
+private:
+  llvm::APSInt Val;
+  FixedPointSemantics Sema;
+};
+
+}  // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/Basic/IdentifierTable.h b/linux-x64/clang/include/clang/Basic/IdentifierTable.h
index 8e3c15a..6f2fe4f 100644
--- a/linux-x64/clang/include/clang/Basic/IdentifierTable.h
+++ b/linux-x64/clang/include/clang/Basic/IdentifierTable.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::IdentifierInfo, clang::IdentifierTable, and
+/// Defines the clang::IdentifierInfo, clang::IdentifierTable, and
 /// clang::Selector interfaces.
 //
 //===----------------------------------------------------------------------===//
@@ -39,7 +39,7 @@
 class MultiKeywordSelector;
 class SourceLocation;
 
-/// \brief A simple pair of identifier info and location.
+/// A simple pair of identifier info and location.
 using IdentifierLocPair = std::pair<IdentifierInfo *, SourceLocation>;
 
 /// One of these records is kept for each identifier that
@@ -50,34 +50,58 @@
 class IdentifierInfo {
   friend class IdentifierTable;
 
-  unsigned TokenID            : 9; // Front-end token ID or tok::identifier.
-  // Objective-C keyword ('protocol' in '@protocol') or builtin (__builtin_inf).
-  // First NUM_OBJC_KEYWORDS values are for Objective-C, the remaining values
-  // are for builtins.
-  unsigned ObjCOrBuiltinID    :13;
-  bool HasMacro               : 1; // True if there is a #define for this.
-  bool HadMacro               : 1; // True if there was a #define for this.
-  bool IsExtension            : 1; // True if identifier is a lang extension.
-  bool IsFutureCompatKeyword  : 1; // True if identifier is a keyword in a
-                                   // newer Standard or proposed Standard.
-  bool IsPoisoned             : 1; // True if identifier is poisoned.
-  bool IsCPPOperatorKeyword   : 1; // True if ident is a C++ operator keyword.
-  bool NeedsHandleIdentifier  : 1; // See "RecomputeNeedsHandleIdentifier".
-  bool IsFromAST              : 1; // True if identifier was loaded (at least 
-                                   // partially) from an AST file.
-  bool ChangedAfterLoad       : 1; // True if identifier has changed from the
-                                   // definition loaded from an AST file.
-  bool FEChangedAfterLoad     : 1; // True if identifier's frontend information
-                                   // has changed from the definition loaded
-                                   // from an AST file.
-  bool RevertedTokenID        : 1; // True if revertTokenIDToIdentifier was
-                                   // called.
-  bool OutOfDate              : 1; // True if there may be additional
-                                   // information about this identifier
-                                   // stored externally.
-  bool IsModulesImport        : 1; // True if this is the 'import' contextual
-                                   // keyword.
-  // 29 bit left in 64-bit word.
+  // Front-end token ID or tok::identifier.
+  unsigned TokenID : 9;
+
+  // ObjC keyword ('protocol' in '@protocol') or builtin (__builtin_inf).
+  // First NUM_OBJC_KEYWORDS values are for Objective-C,
+  // the remaining values are for builtins.
+  unsigned ObjCOrBuiltinID : 13;
+
+  // True if there is a #define for this.
+  unsigned HasMacro : 1;
+
+  // True if there was a #define for this.
+  unsigned HadMacro : 1;
+
+  // True if the identifier is a language extension.
+  unsigned IsExtension : 1;
+
+  // True if the identifier is a keyword in a newer or proposed Standard.
+  unsigned IsFutureCompatKeyword : 1;
+
+  // True if the identifier is poisoned.
+  unsigned IsPoisoned : 1;
+
+  // True if the identifier is a C++ operator keyword.
+  unsigned IsCPPOperatorKeyword : 1;
+
+  // Internal bit set by the member function RecomputeNeedsHandleIdentifier.
+  // See comment about RecomputeNeedsHandleIdentifier for more info.
+  unsigned NeedsHandleIdentifier : 1;
+
+  // True if the identifier was loaded (at least partially) from an AST file.
+  unsigned IsFromAST : 1;
+
+  // True if the identifier has changed from the definition
+  // loaded from an AST file.
+  unsigned ChangedAfterLoad : 1;
+
+  // True if the identifier's frontend information has changed from the
+  // definition loaded from an AST file.
+  unsigned FEChangedAfterLoad : 1;
+
+  // True if revertTokenIDToIdentifier was called.
+  unsigned RevertedTokenID : 1;
+
+  // True if there may be additional information about
+  // this identifier stored externally.
+  unsigned OutOfDate : 1;
+
+  // True if this is the 'import' contextual keyword.
+  unsigned IsModulesImport : 1;
+
+  // 29 bits left in a 64-bit word.
 
   // Managed by the language front-end.
   void *FETokenInfo = nullptr;
@@ -89,7 +113,7 @@
   IdentifierInfo(const IdentifierInfo &) = delete;
   IdentifierInfo &operator=(const IdentifierInfo &) = delete;
 
-  /// \brief Return true if this is the identifier for the specified string.
+  /// Return true if this is the identifier for the specified string.
   ///
   /// This is intended to be used for string literals only: II->isStr("foo").
   template <std::size_t StrLen>
@@ -98,7 +122,13 @@
            memcmp(getNameStart(), Str, StrLen-1) == 0;
   }
 
-  /// \brief Return the beginning of the actual null-terminated string for this
+  /// Return true if this is the identifier for the specified StringRef.
+  bool isStr(llvm::StringRef Str) const {
+    llvm::StringRef ThisStr(getNameStart(), getLength());
+    return ThisStr == Str;
+  }
+
+  /// Return the beginning of the actual null-terminated string for this
   /// identifier.
   const char *getNameStart() const {
     if (Entry) return Entry->getKeyData();
@@ -112,7 +142,7 @@
     return ((const actualtype*) this)->second;
   }
 
-  /// \brief Efficiently return the length of this identifier info.
+  /// Efficiently return the length of this identifier info.
   unsigned getLength() const {
     if (Entry) return Entry->getKeyLength();
     // FIXME: This is gross. It would be best not to embed specific details
@@ -126,12 +156,12 @@
     return (((unsigned) p[0]) | (((unsigned) p[1]) << 8)) - 1;
   }
 
-  /// \brief Return the actual identifier string.
+  /// Return the actual identifier string.
   StringRef getName() const {
     return StringRef(getNameStart(), getLength());
   }
 
-  /// \brief Return true if this identifier is \#defined to some other value.
+  /// Return true if this identifier is \#defined to some other value.
   /// \note The current definition may be in a module and not currently visible.
   bool hasMacroDefinition() const {
     return HasMacro;
@@ -147,7 +177,7 @@
       RecomputeNeedsHandleIdentifier();
     }
   }
-  /// \brief Returns true if this identifier was \#defined to some value at any
+  /// Returns true if this identifier was \#defined to some value at any
   /// moment. In this case there should be an entry for the identifier in the
   /// macro history table in Preprocessor.
   bool hadMacroDefinition() const {
@@ -159,10 +189,10 @@
   /// tokens.
   tok::TokenKind getTokenID() const { return (tok::TokenKind)TokenID; }
 
-  /// \brief True if revertTokenIDToIdentifier() was called.
+  /// True if revertTokenIDToIdentifier() was called.
   bool hasRevertedTokenIDToIdentifier() const { return RevertedTokenID; }
 
-  /// \brief Revert TokenID to tok::identifier; used for GNU libstdc++ 4.2
+  /// Revert TokenID to tok::identifier; used for GNU libstdc++ 4.2
   /// compatibility.
   ///
   /// TokenID is normally read-only but there are 2 instances where we revert it
@@ -179,12 +209,12 @@
     RevertedTokenID = false;
   }
 
-  /// \brief Return the preprocessor keyword ID for this identifier.
+  /// Return the preprocessor keyword ID for this identifier.
   ///
   /// For example, "define" will return tok::pp_define.
   tok::PPKeywordKind getPPKeywordID() const;
 
-  /// \brief Return the Objective-C keyword ID for the this identifier.
+  /// Return the Objective-C keyword ID for the this identifier.
   ///
   /// For example, 'class' will return tok::objc_class if ObjC is enabled.
   tok::ObjCKeywordKind getObjCKeywordID() const {
@@ -195,19 +225,19 @@
   }
   void setObjCKeywordID(tok::ObjCKeywordKind ID) { ObjCOrBuiltinID = ID; }
 
-  /// \brief True if setNotBuiltin() was called.
+  /// True if setNotBuiltin() was called.
   bool hasRevertedBuiltin() const {
     return ObjCOrBuiltinID == tok::NUM_OBJC_KEYWORDS;
   }
 
-  /// \brief Revert the identifier to a non-builtin identifier. We do this if
+  /// Revert the identifier to a non-builtin identifier. We do this if
   /// the name of a known builtin library function is used to declare that
   /// function, but an unexpected type is specified.
   void revertBuiltin() {
     setBuiltinID(0);
   }
 
-  /// \brief Return a value indicating whether this is a builtin function.
+  /// Return a value indicating whether this is a builtin function.
   ///
   /// 0 is not-built-in. 1+ are specific builtin functions.
   unsigned getBuiltinID() const {
@@ -261,7 +291,7 @@
       RecomputeNeedsHandleIdentifier();
   }
 
-  /// \brief Return true if this token has been poisoned.
+  /// Return true if this token has been poisoned.
   bool isPoisoned() const { return IsPoisoned; }
 
   /// isCPlusPlusOperatorKeyword/setIsCPlusPlusOperatorKeyword controls whether
@@ -271,10 +301,10 @@
   }
   bool isCPlusPlusOperatorKeyword() const { return IsCPPOperatorKeyword; }
 
-  /// \brief Return true if this token is a keyword in the specified language.
+  /// Return true if this token is a keyword in the specified language.
   bool isKeyword(const LangOptions &LangOpts) const;
 
-  /// \brief Return true if this token is a C++ keyword in the specified
+  /// Return true if this token is a C++ keyword in the specified
   /// language.
   bool isCPlusPlusKeyword(const LangOptions &LangOpts) const;
 
@@ -284,48 +314,48 @@
   T *getFETokenInfo() const { return static_cast<T*>(FETokenInfo); }
   void setFETokenInfo(void *T) { FETokenInfo = T; }
 
-  /// \brief Return true if the Preprocessor::HandleIdentifier must be called
+  /// Return true if the Preprocessor::HandleIdentifier must be called
   /// on a token of this identifier.
   ///
   /// If this returns false, we know that HandleIdentifier will not affect
   /// the token.
   bool isHandleIdentifierCase() const { return NeedsHandleIdentifier; }
 
-  /// \brief Return true if the identifier in its current state was loaded
+  /// Return true if the identifier in its current state was loaded
   /// from an AST file.
   bool isFromAST() const { return IsFromAST; }
 
   void setIsFromAST() { IsFromAST = true; }
 
-  /// \brief Determine whether this identifier has changed since it was loaded
+  /// Determine whether this identifier has changed since it was loaded
   /// from an AST file.
   bool hasChangedSinceDeserialization() const {
     return ChangedAfterLoad;
   }
-  
-  /// \brief Note that this identifier has changed since it was loaded from
+
+  /// Note that this identifier has changed since it was loaded from
   /// an AST file.
   void setChangedSinceDeserialization() {
     ChangedAfterLoad = true;
   }
 
-  /// \brief Determine whether the frontend token information for this
+  /// Determine whether the frontend token information for this
   /// identifier has changed since it was loaded from an AST file.
   bool hasFETokenInfoChangedSinceDeserialization() const {
     return FEChangedAfterLoad;
   }
-  
-  /// \brief Note that the frontend token information for this identifier has
+
+  /// Note that the frontend token information for this identifier has
   /// changed since it was loaded from an AST file.
   void setFETokenInfoChangedSinceDeserialization() {
     FEChangedAfterLoad = true;
   }
 
-  /// \brief Determine whether the information for this identifier is out of
+  /// Determine whether the information for this identifier is out of
   /// date with respect to the external source.
   bool isOutOfDate() const { return OutOfDate; }
-  
-  /// \brief Set whether the information for this identifier is out of
+
+  /// Set whether the information for this identifier is out of
   /// date with respect to the external source.
   void setOutOfDate(bool OOD) {
     OutOfDate = OOD;
@@ -334,11 +364,11 @@
     else
       RecomputeNeedsHandleIdentifier();
   }
-  
-  /// \brief Determine whether this is the contextual keyword \c import.
+
+  /// Determine whether this is the contextual keyword \c import.
   bool isModulesImport() const { return IsModulesImport; }
-  
-  /// \brief Set whether this identifier is the contextual keyword \c import.
+
+  /// Set whether this identifier is the contextual keyword \c import.
   void setModulesImport(bool I) {
     IsModulesImport = I;
     if (I)
@@ -360,7 +390,7 @@
     return getName().startswith("<#") && getName().endswith("#>");
   }
 
-  /// \brief Provide less than operator for lexicographical sorting.
+  /// Provide less than operator for lexicographical sorting.
   bool operator<(const IdentifierInfo &RHS) const {
     return getName() < RHS.getName();
   }
@@ -379,7 +409,7 @@
   }
 };
 
-/// \brief An RAII object for [un]poisoning an identifier within a scope.
+/// An RAII object for [un]poisoning an identifier within a scope.
 ///
 /// \p II is allowed to be null, in which case objects of this type have
 /// no effect.
@@ -400,7 +430,7 @@
   }
 };
 
-/// \brief An iterator that walks over all of the known identifiers
+/// An iterator that walks over all of the known identifiers
 /// in the lookup table.
 ///
 /// Since this iterator uses an abstract interface via virtual
@@ -413,14 +443,14 @@
 class IdentifierIterator {
 protected:
   IdentifierIterator() = default;
-  
+
 public:
   IdentifierIterator(const IdentifierIterator &) = delete;
   IdentifierIterator &operator=(const IdentifierIterator &) = delete;
 
   virtual ~IdentifierIterator();
 
-  /// \brief Retrieve the next string in the identifier table and
+  /// Retrieve the next string in the identifier table and
   /// advances the iterator for the following string.
   ///
   /// \returns The next string in the identifier table. If there is
@@ -428,19 +458,19 @@
   virtual StringRef Next() = 0;
 };
 
-/// \brief Provides lookups to, and iteration over, IdentiferInfo objects.
+/// Provides lookups to, and iteration over, IdentiferInfo objects.
 class IdentifierInfoLookup {
 public:
   virtual ~IdentifierInfoLookup();
 
-  /// \brief Return the IdentifierInfo for the specified named identifier.
+  /// Return the IdentifierInfo for the specified named identifier.
   ///
   /// Unlike the version in IdentifierTable, this returns a pointer instead
   /// of a reference.  If the pointer is null then the IdentifierInfo cannot
   /// be found.
   virtual IdentifierInfo* get(StringRef Name) = 0;
 
-  /// \brief Retrieve an iterator into the set of all identifiers
+  /// Retrieve an iterator into the set of all identifiers
   /// known to this identifier lookup source.
   ///
   /// This routine provides access to all of the identifiers known to
@@ -453,7 +483,7 @@
   virtual IdentifierIterator *getIdentifiers();
 };
 
-/// \brief Implements an efficient mapping from strings to IdentifierInfo nodes.
+/// Implements an efficient mapping from strings to IdentifierInfo nodes.
 ///
 /// This has no other purpose, but this is an extremely performance-critical
 /// piece of the code, as each occurrence of every identifier goes through
@@ -467,26 +497,29 @@
   IdentifierInfoLookup* ExternalLookup;
 
 public:
-  /// \brief Create the identifier table, populating it with info about the
-  /// language keywords for the language specified by \p LangOpts.
-  IdentifierTable(const LangOptions &LangOpts,
-                  IdentifierInfoLookup* externalLookup = nullptr);
+  /// Create the identifier table.
+  explicit IdentifierTable(IdentifierInfoLookup *ExternalLookup = nullptr);
 
-  /// \brief Set the external identifier lookup mechanism.
+  /// Create the identifier table, populating it with info about the
+  /// language keywords for the language specified by \p LangOpts.
+  explicit IdentifierTable(const LangOptions &LangOpts,
+                           IdentifierInfoLookup *ExternalLookup = nullptr);
+
+  /// Set the external identifier lookup mechanism.
   void setExternalIdentifierLookup(IdentifierInfoLookup *IILookup) {
     ExternalLookup = IILookup;
   }
 
-  /// \brief Retrieve the external identifier lookup object, if any.
+  /// Retrieve the external identifier lookup object, if any.
   IdentifierInfoLookup *getExternalIdentifierLookup() const {
     return ExternalLookup;
   }
-  
+
   llvm::BumpPtrAllocator& getAllocator() {
     return HashTable.getAllocator();
   }
 
-  /// \brief Return the identifier token info for the specified named
+  /// Return the identifier token info for the specified named
   /// identifier.
   IdentifierInfo &get(StringRef Name) {
     auto &Entry = *HashTable.insert(std::make_pair(Name, nullptr)).first;
@@ -519,7 +552,7 @@
     return II;
   }
 
-  /// \brief Gets an IdentifierInfo for the given name without consulting
+  /// Gets an IdentifierInfo for the given name without consulting
   ///        external sources.
   ///
   /// This is a version of get() meant for external sources that want to
@@ -554,14 +587,16 @@
   iterator end() const   { return HashTable.end(); }
   unsigned size() const  { return HashTable.size(); }
 
-  /// \brief Print some statistics to stderr that indicate how well the
+  /// Print some statistics to stderr that indicate how well the
   /// hashing is doing.
   void PrintStats() const;
 
+  /// Populate the identifier table with info about the language keywords
+  /// for the language specified by \p LangOpts.
   void AddKeywords(const LangOptions &LangOpts);
 };
 
-/// \brief A family of Objective-C methods. 
+/// A family of Objective-C methods.
 ///
 /// These families have no inherent meaning in the language, but are
 /// nonetheless central enough in the existing implementations to
@@ -579,7 +614,7 @@
 /// explicitly change or remove a method's family.  Therefore the
 /// method's family should be considered the single source of truth.
 enum ObjCMethodFamily {
-  /// \brief No particular method family.
+  /// No particular method family.
   OMF_None,
 
   // Selectors in these families may have arbitrary arity, may be
@@ -611,10 +646,10 @@
 /// InvalidObjCMethodFamily.
 enum { ObjCMethodFamilyBitWidth = 4 };
 
-/// \brief An invalid value of ObjCMethodFamily.
+/// An invalid value of ObjCMethodFamily.
 enum { InvalidObjCMethodFamily = (1 << ObjCMethodFamilyBitWidth) - 1 };
 
-/// \brief A family of Objective-C methods.
+/// A family of Objective-C methods.
 ///
 /// These are family of methods whose result type is initially 'id', but
 /// but are candidate for the result type to be changed to 'instancetype'.
@@ -633,7 +668,7 @@
   SFF_CFString
 };
 
-/// \brief Smart pointer class that efficiently represents Objective-C method
+/// Smart pointer class that efficiently represents Objective-C method
 /// names.
 ///
 /// This class will either point to an IdentifierInfo or a
@@ -676,13 +711,13 @@
   MultiKeywordSelector *getMultiKeywordSelector() const {
     return reinterpret_cast<MultiKeywordSelector *>(InfoPtr & ~ArgFlags);
   }
-  
+
   unsigned getIdentifierInfoFlag() const {
     return InfoPtr & ArgFlags;
   }
 
   static ObjCMethodFamily getMethodFamilyImpl(Selector sel);
-  
+
   static ObjCStringFormatFamily getStringFormatFamilyImpl(Selector sel);
 
 public:
@@ -706,7 +741,7 @@
     return reinterpret_cast<void*>(InfoPtr);
   }
 
-  /// \brief Determine whether this is the empty selector.
+  /// Determine whether this is the empty selector.
   bool isNull() const { return InfoPtr == 0; }
 
   // Predicates to identify the selector type.
@@ -719,11 +754,11 @@
   }
 
   unsigned getNumArgs() const;
-  
-  /// \brief Retrieve the identifier at a given position in the selector.
+
+  /// Retrieve the identifier at a given position in the selector.
   ///
   /// Note that the identifier pointer returned may be NULL. Clients that only
-  /// care about the text of the identifier string, and not the specific, 
+  /// care about the text of the identifier string, and not the specific,
   /// uniqued identifier pointer, should use \c getNameForSlot(), which returns
   /// an empty string when the identifier pointer would be NULL.
   ///
@@ -734,8 +769,8 @@
   /// \returns the uniqued identifier for this slot, or NULL if this slot has
   /// no corresponding identifier.
   IdentifierInfo *getIdentifierInfoForSlot(unsigned argIndex) const;
-  
-  /// \brief Retrieve the name at a given position in the selector.
+
+  /// Retrieve the name at a given position in the selector.
   ///
   /// \param argIndex The index for which we want to retrieve the name.
   /// This index shall be less than \c getNumArgs() unless this is a keyword
@@ -744,23 +779,25 @@
   /// \returns the name for this slot, which may be the empty string if no
   /// name was supplied.
   StringRef getNameForSlot(unsigned argIndex) const;
-  
-  /// \brief Derive the full selector name (e.g. "foo:bar:") and return
+
+  /// Derive the full selector name (e.g. "foo:bar:") and return
   /// it as an std::string.
   std::string getAsString() const;
 
-  /// \brief Prints the full selector name (e.g. "foo:bar:").
+  /// Prints the full selector name (e.g. "foo:bar:").
   void print(llvm::raw_ostream &OS) const;
 
-  /// \brief Derive the conventional family of this method.
+  void dump() const;
+
+  /// Derive the conventional family of this method.
   ObjCMethodFamily getMethodFamily() const {
     return getMethodFamilyImpl(*this);
   }
-  
+
   ObjCStringFormatFamily getStringFormatFamily() const {
     return getStringFormatFamilyImpl(*this);
   }
-  
+
   static Selector getEmptyMarker() {
     return Selector(uintptr_t(-1));
   }
@@ -768,11 +805,11 @@
   static Selector getTombstoneMarker() {
     return Selector(uintptr_t(-2));
   }
-  
+
   static ObjCInstanceTypeFamily getInstTypeMethodFamily(Selector sel);
 };
 
-/// \brief This table allows us to fully hide how we implement
+/// This table allows us to fully hide how we implement
 /// multi-keyword caching.
 class SelectorTable {
   // Actually a SelectorTableImpl
@@ -784,7 +821,7 @@
   SelectorTable &operator=(const SelectorTable &) = delete;
   ~SelectorTable();
 
-  /// \brief Can create any sort of selector.
+  /// Can create any sort of selector.
   ///
   /// \p NumArgs indicates whether this is a no argument selector "foo", a
   /// single argument selector "foo:" or multi-argument "foo:bar:".
@@ -798,22 +835,25 @@
     return Selector(ID, 0);
   }
 
-  /// \brief Return the total amount of memory allocated for managing selectors.
+  /// Return the total amount of memory allocated for managing selectors.
   size_t getTotalMemory() const;
 
-  /// \brief Return the default setter name for the given identifier.
+  /// Return the default setter name for the given identifier.
   ///
   /// This is "set" + \p Name where the initial character of \p Name
   /// has been capitalized.
   static SmallString<64> constructSetterName(StringRef Name);
 
-  /// \brief Return the default setter selector for the given identifier.
+  /// Return the default setter selector for the given identifier.
   ///
   /// This is "set" + \p Name where the initial character of \p Name
   /// has been capitalized.
   static Selector constructSetterSelector(IdentifierTable &Idents,
                                           SelectorTable &SelTable,
                                           const IdentifierInfo *Name);
+
+  /// Return the property name for the given setter selector.
+  static std::string getPropertyNameFromSetterSelector(Selector Sel);
 };
 
 /// DeclarationNameExtra - Common base of the MultiKeywordSelector,
@@ -885,7 +925,7 @@
     return clang::Selector(reinterpret_cast<uintptr_t>(P));
   }
 
-  enum { NumLowBitsAvailable = 0 };  
+  enum { NumLowBitsAvailable = 0 };
 };
 
 // Provide PointerLikeTypeTraits for IdentifierInfo pointers, which
diff --git a/linux-x64/clang/include/clang/Basic/LLVM.h b/linux-x64/clang/include/clang/Basic/LLVM.h
index e60284d..3f833c6 100644
--- a/linux-x64/clang/include/clang/Basic/LLVM.h
+++ b/linux-x64/clang/include/clang/Basic/LLVM.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Forward-declares and imports various common LLVM datatypes that
+/// Forward-declares and imports various common LLVM datatypes that
 /// clang wants to use unqualified.
 ///
 //===----------------------------------------------------------------------===//
@@ -28,6 +28,7 @@
   // ADT's.
   class StringRef;
   class Twine;
+  class VersionTuple;
   template<typename T> class ArrayRef;
   template<typename T> class MutableArrayRef;
   template<typename T> class OwningArrayRef;
@@ -58,19 +59,20 @@
   using llvm::dyn_cast;
   using llvm::dyn_cast_or_null;
   using llvm::cast_or_null;
-  
+
   // ADT's.
-  using llvm::None;
-  using llvm::Optional;
-  using llvm::StringRef;
-  using llvm::Twine;
   using llvm::ArrayRef;
   using llvm::MutableArrayRef;
+  using llvm::None;
+  using llvm::Optional;
   using llvm::OwningArrayRef;
+  using llvm::SaveAndRestore;
   using llvm::SmallString;
   using llvm::SmallVector;
   using llvm::SmallVectorImpl;
-  using llvm::SaveAndRestore;
+  using llvm::StringRef;
+  using llvm::Twine;
+  using llvm::VersionTuple;
 
   // Error handling.
   using llvm::Expected;
diff --git a/linux-x64/clang/include/clang/Basic/Lambda.h b/linux-x64/clang/include/clang/Basic/Lambda.h
index 1c19f1d..675854e 100644
--- a/linux-x64/clang/include/clang/Basic/Lambda.h
+++ b/linux-x64/clang/include/clang/Basic/Lambda.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines several types used to describe C++ lambda expressions
+/// Defines several types used to describe C++ lambda expressions
 /// that are shared between the parser and AST.
 ///
 //===----------------------------------------------------------------------===//
@@ -19,14 +19,14 @@
 
 namespace clang {
 
-/// \brief The default, if any, capture method for a lambda expression.
+/// The default, if any, capture method for a lambda expression.
 enum LambdaCaptureDefault {
   LCD_None,
   LCD_ByCopy,
   LCD_ByRef
 };
 
-/// \brief The different capture forms in a lambda introducer
+/// The different capture forms in a lambda introducer
 ///
 /// C++11 allows capture of \c this, or of local variables by copy or
 /// by reference.  C++1y also allows "init-capture", where the initializer
diff --git a/linux-x64/clang/include/clang/Basic/LangOptions.def b/linux-x64/clang/include/clang/Basic/LangOptions.def
index 0802bbe..fc38af5 100644
--- a/linux-x64/clang/include/clang/Basic/LangOptions.def
+++ b/linux-x64/clang/include/clang/Basic/LangOptions.def
@@ -106,6 +106,7 @@
 LANGOPT(Bool              , 1, 0, "bool, true, and false keywords")
 LANGOPT(Half              , 1, 0, "half keyword")
 LANGOPT(WChar             , 1, CPlusPlus, "wchar_t keyword")
+LANGOPT(Char8             , 1, 0, "char8_t keyword")
 LANGOPT(DeclSpecKeyword   , 1, 0, "__declspec keyword")
 BENIGN_LANGOPT(DollarIdents   , 1, 1, "'$' in identifiers")
 BENIGN_LANGOPT(AsmPreprocessor, 1, 0, "preprocessor in asm mode")
@@ -153,6 +154,7 @@
 BENIGN_ENUM_LANGOPT(CompilingModule, CompilingModuleKind, 2, CMK_None,
                     "compiling a module interface")
 BENIGN_LANGOPT(CompilingPCH, 1, 0, "building a pch")
+BENIGN_LANGOPT(BuildingPCHWithObjectFile, 1, 0, "building a pch which has a corresponding object file")
 COMPATIBLE_LANGOPT(ModulesDeclUse    , 1, 0, "require declaration of module uses")
 BENIGN_LANGOPT(ModulesSearchAll  , 1, 1, "searching even non-imported modules to find unresolved references")
 COMPATIBLE_LANGOPT(ModulesStrictDeclUse, 1, 0, "requiring declaration of module uses and all headers to be in modules")
@@ -188,22 +190,25 @@
 LANGOPT(ShortEnums        , 1, 0, "short enum types")
 
 LANGOPT(OpenCL            , 1, 0, "OpenCL")
-LANGOPT(OpenCLVersion     , 32, 0, "OpenCL version")
+LANGOPT(OpenCLVersion     , 32, 0, "OpenCL C version")
+LANGOPT(OpenCLCPlusPlus   , 1, 0, "OpenCL C++")
+LANGOPT(OpenCLCPlusPlusVersion     , 32, 0, "OpenCL C++ version")
 LANGOPT(NativeHalfType    , 1, 0, "Native half type support")
 LANGOPT(NativeHalfArgsAndReturns, 1, 0, "Native half args and returns")
 LANGOPT(HalfArgsAndReturns, 1, 0, "half args and returns")
 LANGOPT(CUDA              , 1, 0, "CUDA")
+LANGOPT(HIP               , 1, 0, "HIP")
 LANGOPT(OpenMP            , 32, 0, "OpenMP support and version of OpenMP (31, 40 or 45)")
 LANGOPT(OpenMPSimd        , 1, 0, "Use SIMD only OpenMP support.")
 LANGOPT(OpenMPUseTLS      , 1, 0, "Use TLS for threadprivates or runtime calls")
 LANGOPT(OpenMPIsDevice    , 1, 0, "Generate code only for OpenMP target device")
 LANGOPT(OpenMPCUDAMode    , 1, 0, "Generate code for OpenMP pragmas in SIMT/SPMD mode")
+LANGOPT(OpenMPHostCXXExceptions    , 1, 0, "C++ exceptions handling in the host code.")
 LANGOPT(RenderScript      , 1, 0, "RenderScript")
 
 LANGOPT(CUDAIsDevice      , 1, 0, "compiling for CUDA device")
 LANGOPT(CUDAAllowVariadicFunctions, 1, 0, "allowing variadic functions in CUDA device code")
 LANGOPT(CUDAHostDeviceConstexpr, 1, 1, "treating unattributed constexpr functions as __host__ __device__")
-LANGOPT(CUDADeviceFlushDenormalsToZero, 1, 0, "flushing denormals to zero")
 LANGOPT(CUDADeviceApproxTranscendentals, 1, 0, "using approximate transcendental functions")
 LANGOPT(CUDARelocatableDeviceCode, 1, 0, "generate relocatable device code")
 
@@ -228,7 +233,7 @@
 BENIGN_LANGOPT(SpellChecking , 1, 1, "spell-checking")
 LANGOPT(SinglePrecisionConstants , 1, 0, "treating double-precision floating point constants as single precision constants")
 LANGOPT(FastRelaxedMath , 1, 0, "OpenCL fast relaxed math")
-/// \brief FP_CONTRACT mode (on/off/fast).
+/// FP_CONTRACT mode (on/off/fast).
 ENUM_LANGOPT(DefaultFPContractMode, FPContractModeKind, 2, FPC_Off, "FP contraction type")
 LANGOPT(NoBitFieldTypeAlign , 1, 0, "bit-field type alignment")
 LANGOPT(HexagonQdsp6Compat , 1, 0, "hexagon-qdsp6 backward compatibility")
@@ -242,6 +247,10 @@
 LANGOPT(IncludeDefaultHeader, 1, 0, "Include default header file for OpenCL")
 BENIGN_LANGOPT(DelayedTemplateParsing , 1, 0, "delayed template parsing")
 LANGOPT(BlocksRuntimeOptional , 1, 0, "optional blocks runtime")
+LANGOPT(
+    CompleteMemberPointers, 1, 0,
+    "Require member pointer base types to be complete at the point where the "
+    "type's inheritance model would be determined under the Microsoft ABI")
 
 ENUM_LANGOPT(GC, GCMode, 2, NonGC, "Objective-C Garbage Collection mode")
 ENUM_LANGOPT(ValueVisibilityMode, Visibility, 3, DefaultVisibility,
@@ -280,6 +289,11 @@
 LANGOPT(XRayAlwaysEmitCustomEvents, 1, 0,
         "controls whether to always emit intrinsic calls to "
         "__xray_customevent(...) builtin.")
+LANGOPT(XRayAlwaysEmitTypedEvents, 1, 0,
+        "controls whether to always emit intrinsic calls to "
+        "__xray_typedevent(...) builtin.")
+
+LANGOPT(ForceEmitVTables, 1, 0, "whether to emit all vtables")
 
 BENIGN_LANGOPT(AllowEditorPlaceholders, 1, 0,
                "allow editor placeholders in source")
@@ -288,6 +302,12 @@
              "version of Clang that we should attempt to be ABI-compatible "
              "with")
 
+COMPATIBLE_VALUE_LANGOPT(FunctionAlignment, 5, 0, "Default alignment for functions")
+
+LANGOPT(FixedPoint, 1, 0, "fixed point types")
+LANGOPT(PaddingOnUnsignedFixedPoint, 1, 0,
+        "unsigned fixed point types having one extra padding bit")
+
 #undef LANGOPT
 #undef COMPATIBLE_LANGOPT
 #undef BENIGN_LANGOPT
@@ -297,4 +317,3 @@
 #undef VALUE_LANGOPT
 #undef COMPATIBLE_VALUE_LANGOPT
 #undef BENIGN_VALUE_LANGOPT
-
diff --git a/linux-x64/clang/include/clang/Basic/LangOptions.h b/linux-x64/clang/include/clang/Basic/LangOptions.h
index 048ccc6..a1396f8 100644
--- a/linux-x64/clang/include/clang/Basic/LangOptions.h
+++ b/linux-x64/clang/include/clang/Basic/LangOptions.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::LangOptions interface.
+/// Defines the clang::LangOptions interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -45,15 +45,15 @@
 #include "clang/Basic/LangOptions.def"
 };
 
-/// \brief Keeps track of the various options that can be
+/// Keeps track of the various options that can be
 /// enabled, which controls the dialect of C or C++ that is accepted.
 class LangOptions : public LangOptionsBase {
 public:
   using Visibility = clang::Visibility;
-  
+
   enum GCMode { NonGC, GCOnly, HybridGC };
   enum StackProtectorMode { SSPOff, SSPOn, SSPStrong, SSPReq };
-  
+
   enum SignedOverflowBehaviorTy {
     // Default C standard behavior.
     SOB_Undefined,
@@ -114,6 +114,13 @@
     /// determining whether a class type can be passed or returned directly.
     Ver4,
 
+    /// Attempt to be ABI-compatible with code generated by Clang 6.0.x
+    /// (SVN r321711). This causes determination of whether a type is
+    /// standard-layout to ignore collisions between empty base classes
+    /// and between base classes and member subobjects, which affects
+    /// whether we reuse base class tail padding in some ABIs.
+    Ver6,
+
     /// Conform to the underlying platform's C and C++ ABIs as closely
     /// as we can.
     Latest
@@ -131,28 +138,35 @@
   };
 
 public:
-  /// \brief Set of enabled sanitizers.
+  /// Set of enabled sanitizers.
   SanitizerSet Sanitize;
 
-  /// \brief Paths to blacklist files specifying which objects
+  /// Paths to blacklist files specifying which objects
   /// (files, functions, variables) should not be instrumented.
   std::vector<std::string> SanitizerBlacklistFiles;
 
-  /// \brief Paths to the XRay "always instrument" files specifying which
+  /// Paths to the XRay "always instrument" files specifying which
   /// objects (files, functions, variables) should be imbued with the XRay
   /// "always instrument" attribute.
+  /// WARNING: This is a deprecated field and will go away in the future.
   std::vector<std::string> XRayAlwaysInstrumentFiles;
 
-  /// \brief Paths to the XRay "never instrument" files specifying which
+  /// Paths to the XRay "never instrument" files specifying which
   /// objects (files, functions, variables) should be imbued with the XRay
   /// "never instrument" attribute.
+  /// WARNING: This is a deprecated field and will go away in the future.
   std::vector<std::string> XRayNeverInstrumentFiles;
 
+  /// Paths to the XRay attribute list files, specifying which objects
+  /// (files, functions, variables) should be imbued with the appropriate XRay
+  /// attribute(s).
+  std::vector<std::string> XRayAttrListFiles;
+
   clang::ObjCRuntime ObjCRuntime;
 
   std::string ObjCConstantStringClass;
-  
-  /// \brief The name of the handler function to be called when -ftrapv is
+
+  /// The name of the handler function to be called when -ftrapv is
   /// specified.
   ///
   /// If none is specified, abort (GCC-compatible behaviour).
@@ -161,44 +175,44 @@
   /// The module currently being compiled as speficied by -fmodule-name.
   std::string ModuleName;
 
-  /// \brief The name of the current module, of which the main source file
+  /// The name of the current module, of which the main source file
   /// is a part. If CompilingModule is set, we are compiling the interface
   /// of this module, otherwise we are compiling an implementation file of
   /// it. This starts as ModuleName in case -fmodule-name is provided and
   /// changes during compilation to reflect the current module.
   std::string CurrentModule;
 
-  /// \brief The names of any features to enable in module 'requires' decls
+  /// The names of any features to enable in module 'requires' decls
   /// in addition to the hard-coded list in Module.cpp and the target features.
   ///
   /// This list is sorted.
   std::vector<std::string> ModuleFeatures;
 
-  /// \brief Options for parsing comments.
+  /// Options for parsing comments.
   CommentOptions CommentOpts;
 
-  /// \brief A list of all -fno-builtin-* function names (e.g., memset).
+  /// A list of all -fno-builtin-* function names (e.g., memset).
   std::vector<std::string> NoBuiltinFuncs;
 
-  /// \brief Triples of the OpenMP targets that the host code codegen should
+  /// Triples of the OpenMP targets that the host code codegen should
   /// take into account in order to generate accurate offloading descriptors.
   std::vector<llvm::Triple> OMPTargetTriples;
 
-  /// \brief Name of the IR file that contains the result of the OpenMP target
+  /// Name of the IR file that contains the result of the OpenMP target
   /// host code generation.
   std::string OMPHostIRFile;
 
-  /// \brief Indicates whether the front-end is explicitly told that the
+  /// Indicates whether the front-end is explicitly told that the
   /// input is a header file (i.e. -x c-header).
   bool IsHeaderFile = false;
 
   LangOptions();
 
   // Define accessors/mutators for language options of enumeration type.
-#define LANGOPT(Name, Bits, Default, Description) 
+#define LANGOPT(Name, Bits, Default, Description)
 #define ENUM_LANGOPT(Name, Type, Bits, Default, Description) \
   Type get##Name() const { return static_cast<Type>(Name); } \
-  void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }  
+  void set##Name(Type Value) { Name = static_cast<unsigned>(Value); }
 #include "clang/Basic/LangOptions.def"
 
   /// Are we compiling a module interface (.cppm or module map)?
@@ -214,7 +228,7 @@
   bool isSignedOverflowDefined() const {
     return getSignedOverflowBehavior() == SOB_Defined;
   }
-  
+
   bool isSubscriptPointerArithmetic() const {
     return ObjCRuntime.isSubscriptPointerArithmetic() &&
            !ObjCSubscriptingLegacyRuntime;
@@ -224,15 +238,15 @@
     return MSCompatibilityVersion >= MajorVersion * 10000000U;
   }
 
-  /// \brief Reset all of the options that are not considered when building a
+  /// Reset all of the options that are not considered when building a
   /// module.
   void resetNonModularOptions();
 
-  /// \brief Is this a libc/libm function that is no longer recognized as a
+  /// Is this a libc/libm function that is no longer recognized as a
   /// builtin because a -fno-builtin-* option has been specified?
   bool isNoBuiltinFunc(StringRef Name) const;
 
-  /// \brief True if any ObjC types may have non-trivial lifetime qualifiers.
+  /// True if any ObjC types may have non-trivial lifetime qualifiers.
   bool allowsNonTrivialObjCLifetimeQualifiers() const {
     return ObjCAutoRefCount || ObjCWeak;
   }
@@ -240,9 +254,12 @@
   bool assumeFunctionsAreConvergent() const {
     return (CUDA && CUDAIsDevice) || OpenCL;
   }
+
+  /// Return the OpenCL C or C++ version as a VersionTuple.
+  VersionTuple getOpenCLVersionTuple() const;
 };
 
-/// \brief Floating point control options
+/// Floating point control options
 class FPOptions {
 public:
   FPOptions() : fp_contract(LangOptions::FPC_Off) {}
@@ -280,19 +297,19 @@
   unsigned fp_contract : 2;
 };
 
-/// \brief Describes the kind of translation unit being processed.
+/// Describes the kind of translation unit being processed.
 enum TranslationUnitKind {
-  /// \brief The translation unit is a complete translation unit.
+  /// The translation unit is a complete translation unit.
   TU_Complete,
 
-  /// \brief The translation unit is a prefix to a translation unit, and is
+  /// The translation unit is a prefix to a translation unit, and is
   /// not complete.
   TU_Prefix,
 
-  /// \brief The translation unit is a module.
+  /// The translation unit is a module.
   TU_Module
 };
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_BASIC_LANGOPTIONS_H
diff --git a/linux-x64/clang/include/clang/Basic/Linkage.h b/linux-x64/clang/include/clang/Basic/Linkage.h
index adf1d08..529cfa9 100644
--- a/linux-x64/clang/include/clang/Basic/Linkage.h
+++ b/linux-x64/clang/include/clang/Basic/Linkage.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the Linkage enumeration and various utility functions.
+/// Defines the Linkage enumeration and various utility functions.
 //
 //===----------------------------------------------------------------------===//
 
@@ -19,19 +19,19 @@
 
 namespace clang {
 
-/// \brief Describes the different kinds of linkage 
+/// Describes the different kinds of linkage
 /// (C++ [basic.link], C99 6.2.2) that an entity may have.
 enum Linkage : unsigned char {
-  /// \brief No linkage, which means that the entity is unique and
+  /// No linkage, which means that the entity is unique and
   /// can only be referred to from within its scope.
   NoLinkage = 0,
 
-  /// \brief Internal linkage, which indicates that the entity can
+  /// Internal linkage, which indicates that the entity can
   /// be referred to from within the translation unit (but not other
   /// translation units).
   InternalLinkage,
 
-  /// \brief External linkage within a unique namespace. 
+  /// External linkage within a unique namespace.
   ///
   /// From the language perspective, these entities have external
   /// linkage. However, since they reside in an anonymous namespace,
@@ -40,27 +40,27 @@
   /// point of view.
   UniqueExternalLinkage,
 
-  /// \brief No linkage according to the standard, but is visible from other
+  /// No linkage according to the standard, but is visible from other
   /// translation units because of types defined in a inline function.
   VisibleNoLinkage,
 
-  /// \brief Internal linkage according to the Modules TS, but can be referred
+  /// Internal linkage according to the Modules TS, but can be referred
   /// to from other translation units indirectly through inline functions and
   /// templates in the module interface.
   ModuleInternalLinkage,
 
-  /// \brief Module linkage, which indicates that the entity can be referred
+  /// Module linkage, which indicates that the entity can be referred
   /// to from other translation units within the same module, and indirectly
   /// from arbitrary other translation units through inline functions and
   /// templates in the module interface.
   ModuleLinkage,
 
-  /// \brief External linkage, which indicates that the entity can
+  /// External linkage, which indicates that the entity can
   /// be referred to from other translation units.
   ExternalLinkage
 };
 
-/// \brief Describes the different kinds of language linkage
+/// Describes the different kinds of language linkage
 /// (C++ [dcl.link]) that an entity may have.
 enum LanguageLinkage {
   CLanguageLinkage,
@@ -68,7 +68,7 @@
   NoLanguageLinkage
 };
 
-/// \brief A more specific kind of linkage than enum Linkage.
+/// A more specific kind of linkage than enum Linkage.
 ///
 /// This is relevant to CodeGen and AST file reading.
 enum GVALinkage {
@@ -104,7 +104,7 @@
   return getFormalLinkage(L) == ExternalLinkage;
 }
 
-/// \brief Compute the minimum linkage given two linkages.
+/// Compute the minimum linkage given two linkages.
 ///
 /// The linkage can be interpreted as a pair formed by the formal linkage and
 /// a boolean for external visibility. This is just what getFormalLinkage and
diff --git a/linux-x64/clang/include/clang/Basic/MacroBuilder.h b/linux-x64/clang/include/clang/Basic/MacroBuilder.h
index 9a9eaa2..b2edc97 100644
--- a/linux-x64/clang/include/clang/Basic/MacroBuilder.h
+++ b/linux-x64/clang/include/clang/Basic/MacroBuilder.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::MacroBuilder utility class.
+/// Defines the clang::MacroBuilder utility class.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/clang/Basic/Module.h b/linux-x64/clang/include/clang/Basic/Module.h
index 3725fcb..02a4ef6 100644
--- a/linux-x64/clang/include/clang/Basic/Module.h
+++ b/linux-x64/clang/include/clang/Basic/Module.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::Module class, which describes a module in the
+/// Defines the clang::Module class, which describes a module in the
 /// source code.
 //
 //===----------------------------------------------------------------------===//
@@ -44,11 +44,11 @@
 } // namespace llvm
 
 namespace clang {
-  
+
 class LangOptions;
 class TargetInfo;
 
-/// \brief Describes the name of a module.
+/// Describes the name of a module.
 using ModuleId = SmallVector<std::pair<std::string, SourceLocation>, 2>;
 
 /// The signature of a module, which is a hash of the AST content.
@@ -61,76 +61,76 @@
   }
 };
 
-/// \brief Describes a module or submodule.
+/// Describes a module or submodule.
 class Module {
 public:
-  /// \brief The name of this module.
+  /// The name of this module.
   std::string Name;
-  
-  /// \brief The location of the module definition.
+
+  /// The location of the module definition.
   SourceLocation DefinitionLoc;
 
   enum ModuleKind {
-    /// \brief This is a module that was defined by a module map and built out
+    /// This is a module that was defined by a module map and built out
     /// of header files.
     ModuleMapModule,
 
-    /// \brief This is a C++ Modules TS module interface unit.
+    /// This is a C++ Modules TS module interface unit.
     ModuleInterfaceUnit,
 
-    /// \brief This is a fragment of the global module within some C++ Modules
+    /// This is a fragment of the global module within some C++ Modules
     /// TS module.
     GlobalModuleFragment,
   };
 
-  /// \brief The kind of this module.
+  /// The kind of this module.
   ModuleKind Kind = ModuleMapModule;
 
-  /// \brief The parent of this module. This will be NULL for the top-level
+  /// The parent of this module. This will be NULL for the top-level
   /// module.
   Module *Parent;
 
-  /// \brief The build directory of this module. This is the directory in
+  /// The build directory of this module. This is the directory in
   /// which the module is notionally built, and relative to which its headers
   /// are found.
   const DirectoryEntry *Directory = nullptr;
 
-  /// \brief The presumed file name for the module map defining this module.
+  /// The presumed file name for the module map defining this module.
   /// Only non-empty when building from preprocessed source.
   std::string PresumedModuleMapFile;
 
-  /// \brief The umbrella header or directory.
+  /// The umbrella header or directory.
   llvm::PointerUnion<const DirectoryEntry *, const FileEntry *> Umbrella;
 
-  /// \brief The module signature.
+  /// The module signature.
   ASTFileSignature Signature;
 
-  /// \brief The name of the umbrella entry, as written in the module map.
+  /// The name of the umbrella entry, as written in the module map.
   std::string UmbrellaAsWritten;
 
-  /// \brief The module through which entities defined in this module will
+  /// The module through which entities defined in this module will
   /// eventually be exposed, for use in "private" modules.
   std::string ExportAsModule;
-  
+
 private:
-  /// \brief The submodules of this module, indexed by name.
+  /// The submodules of this module, indexed by name.
   std::vector<Module *> SubModules;
-  
-  /// \brief A mapping from the submodule name to the index into the 
+
+  /// A mapping from the submodule name to the index into the
   /// \c SubModules vector at which that submodule resides.
   llvm::StringMap<unsigned> SubModuleIndex;
 
-  /// \brief The AST file if this is a top-level module which has a
+  /// The AST file if this is a top-level module which has a
   /// corresponding serialized AST file, or null otherwise.
   const FileEntry *ASTFile = nullptr;
 
-  /// \brief The top-level headers associated with this module.
+  /// The top-level headers associated with this module.
   llvm::SmallSetVector<const FileEntry *, 2> TopHeaders;
 
-  /// \brief top-level header filenames that aren't resolved to FileEntries yet.
+  /// top-level header filenames that aren't resolved to FileEntries yet.
   std::vector<std::string> TopHeaderNames;
 
-  /// \brief Cache of modules visible to lookup in this module.
+  /// Cache of modules visible to lookup in this module.
   mutable llvm::DenseSet<const Module*> VisibleModulesCache;
 
   /// The ID used when referencing this module within a VisibleModuleSet.
@@ -146,7 +146,7 @@
   };
   static const int NumHeaderKinds = HK_Excluded + 1;
 
-  /// \brief Information about a header directive as found in the module map
+  /// Information about a header directive as found in the module map
   /// file.
   struct Header {
     std::string NameAsWritten;
@@ -155,7 +155,7 @@
     explicit operator bool() { return Entry; }
   };
 
-  /// \brief Information about a directory name as found in the module map
+  /// Information about a directory name as found in the module map
   /// file.
   struct DirectoryName {
     std::string NameAsWritten;
@@ -164,10 +164,10 @@
     explicit operator bool() { return Entry; }
   };
 
-  /// \brief The headers that are part of this module.
+  /// The headers that are part of this module.
   SmallVector<Header, 2> Headers[5];
 
-  /// \brief Stored information about a header directive that was found in the
+  /// Stored information about a header directive that was found in the
   /// module map file but has not been resolved to a file.
   struct UnresolvedHeaderDirective {
     HeaderKind Kind = HK_Normal;
@@ -183,194 +183,202 @@
   /// yet attempted to resolve to a file on the file system.
   SmallVector<UnresolvedHeaderDirective, 1> UnresolvedHeaders;
 
-  /// \brief Headers that are mentioned in the module map file but could not be
+  /// Headers that are mentioned in the module map file but could not be
   /// found on the file system.
   SmallVector<UnresolvedHeaderDirective, 1> MissingHeaders;
 
-  /// \brief An individual requirement: a feature name and a flag indicating
+  /// An individual requirement: a feature name and a flag indicating
   /// the required state of that feature.
   using Requirement = std::pair<std::string, bool>;
 
-  /// \brief The set of language features required to use this module.
+  /// The set of language features required to use this module.
   ///
   /// If any of these requirements are not available, the \c IsAvailable bit
   /// will be false to indicate that this (sub)module is not available.
   SmallVector<Requirement, 2> Requirements;
 
-  /// \brief A module with the same name that shadows this module.
+  /// A module with the same name that shadows this module.
   Module *ShadowingModule = nullptr;
 
-  /// \brief Whether this module is missing a feature from \c Requirements.
+  /// Whether this module is missing a feature from \c Requirements.
   unsigned IsMissingRequirement : 1;
 
-  /// \brief Whether we tried and failed to load a module file for this module.
+  /// Whether we tried and failed to load a module file for this module.
   unsigned HasIncompatibleModuleFile : 1;
 
-  /// \brief Whether this module is available in the current translation unit.
+  /// Whether this module is available in the current translation unit.
   ///
   /// If the module is missing headers or does not meet all requirements then
   /// this bit will be 0.
   unsigned IsAvailable : 1;
 
-  /// \brief Whether this module was loaded from a module file.
+  /// Whether this module was loaded from a module file.
   unsigned IsFromModuleFile : 1;
-  
-  /// \brief Whether this is a framework module.
+
+  /// Whether this is a framework module.
   unsigned IsFramework : 1;
-  
-  /// \brief Whether this is an explicit submodule.
+
+  /// Whether this is an explicit submodule.
   unsigned IsExplicit : 1;
-  
-  /// \brief Whether this is a "system" module (which assumes that all
+
+  /// Whether this is a "system" module (which assumes that all
   /// headers in it are system headers).
   unsigned IsSystem : 1;
 
-  /// \brief Whether this is an 'extern "C"' module (which implicitly puts all
+  /// Whether this is an 'extern "C"' module (which implicitly puts all
   /// headers in it within an 'extern "C"' block, and allows the module to be
   /// imported within such a block).
   unsigned IsExternC : 1;
 
-  /// \brief Whether this is an inferred submodule (module * { ... }).
+  /// Whether this is an inferred submodule (module * { ... }).
   unsigned IsInferred : 1;
 
-  /// \brief Whether we should infer submodules for this module based on 
+  /// Whether we should infer submodules for this module based on
   /// the headers.
   ///
   /// Submodules can only be inferred for modules with an umbrella header.
   unsigned InferSubmodules : 1;
-  
-  /// \brief Whether, when inferring submodules, the inferred submodules
+
+  /// Whether, when inferring submodules, the inferred submodules
   /// should be explicit.
   unsigned InferExplicitSubmodules : 1;
-  
-  /// \brief Whether, when inferring submodules, the inferr submodules should
+
+  /// Whether, when inferring submodules, the inferr submodules should
   /// export all modules they import (e.g., the equivalent of "export *").
   unsigned InferExportWildcard : 1;
 
-  /// \brief Whether the set of configuration macros is exhaustive.
+  /// Whether the set of configuration macros is exhaustive.
   ///
   /// When the set of configuration macros is exhaustive, meaning
   /// that no identifier not in this list should affect how the module is
   /// built.
   unsigned ConfigMacrosExhaustive : 1;
 
-  /// \brief Whether files in this module can only include non-modular headers
+  /// Whether files in this module can only include non-modular headers
   /// and headers from used modules.
   unsigned NoUndeclaredIncludes : 1;
 
-  /// \brief Describes the visibility of the various names within a
+  /// Whether this module came from a "private" module map, found next
+  /// to a regular (public) module map.
+  unsigned ModuleMapIsPrivate : 1;
+
+  /// Describes the visibility of the various names within a
   /// particular module.
   enum NameVisibilityKind {
-    /// \brief All of the names in this module are hidden.
+    /// All of the names in this module are hidden.
     Hidden,
-    /// \brief All of the names in this module are visible.
+    /// All of the names in this module are visible.
     AllVisible
   };
 
-  /// \brief The visibility of names within this particular module.
+  /// The visibility of names within this particular module.
   NameVisibilityKind NameVisibility;
 
-  /// \brief The location of the inferred submodule.
+  /// The location of the inferred submodule.
   SourceLocation InferredSubmoduleLoc;
 
-  /// \brief The set of modules imported by this module, and on which this
+  /// The set of modules imported by this module, and on which this
   /// module depends.
   llvm::SmallSetVector<Module *, 2> Imports;
-  
-  /// \brief Describes an exported module.
+
+  /// Describes an exported module.
   ///
   /// The pointer is the module being re-exported, while the bit will be true
   /// to indicate that this is a wildcard export.
   using ExportDecl = llvm::PointerIntPair<Module *, 1, bool>;
-  
-  /// \brief The set of export declarations.
+
+  /// The set of export declarations.
   SmallVector<ExportDecl, 2> Exports;
-  
-  /// \brief Describes an exported module that has not yet been resolved
+
+  /// Describes an exported module that has not yet been resolved
   /// (perhaps because the module it refers to has not yet been loaded).
   struct UnresolvedExportDecl {
-    /// \brief The location of the 'export' keyword in the module map file.
+    /// The location of the 'export' keyword in the module map file.
     SourceLocation ExportLoc;
-    
-    /// \brief The name of the module.
+
+    /// The name of the module.
     ModuleId Id;
-    
-    /// \brief Whether this export declaration ends in a wildcard, indicating
+
+    /// Whether this export declaration ends in a wildcard, indicating
     /// that all of its submodules should be exported (rather than the named
     /// module itself).
     bool Wildcard;
   };
-  
-  /// \brief The set of export declarations that have yet to be resolved.
+
+  /// The set of export declarations that have yet to be resolved.
   SmallVector<UnresolvedExportDecl, 2> UnresolvedExports;
 
-  /// \brief The directly used modules.
+  /// The directly used modules.
   SmallVector<Module *, 2> DirectUses;
 
-  /// \brief The set of use declarations that have yet to be resolved.
+  /// The set of use declarations that have yet to be resolved.
   SmallVector<ModuleId, 2> UnresolvedDirectUses;
 
-  /// \brief A library or framework to link against when an entity from this
+  /// A library or framework to link against when an entity from this
   /// module is used.
   struct LinkLibrary {
     LinkLibrary() = default;
     LinkLibrary(const std::string &Library, bool IsFramework)
         : Library(Library), IsFramework(IsFramework) {}
-    
-    /// \brief The library to link against.
+
+    /// The library to link against.
     ///
     /// This will typically be a library or framework name, but can also
     /// be an absolute path to the library or framework.
     std::string Library;
 
-    /// \brief Whether this is a framework rather than a library.
+    /// Whether this is a framework rather than a library.
     bool IsFramework = false;
   };
 
-  /// \brief The set of libraries or frameworks to link against when
+  /// The set of libraries or frameworks to link against when
   /// an entity from this module is used.
   llvm::SmallVector<LinkLibrary, 2> LinkLibraries;
 
-  /// \brief The set of "configuration macros", which are macros that
+  /// Autolinking uses the framework name for linking purposes
+  /// when this is false and the export_as name otherwise.
+  bool UseExportAsModuleLinkName = false;
+
+  /// The set of "configuration macros", which are macros that
   /// (intentionally) change how this module is built.
   std::vector<std::string> ConfigMacros;
 
-  /// \brief An unresolved conflict with another module.
+  /// An unresolved conflict with another module.
   struct UnresolvedConflict {
-    /// \brief The (unresolved) module id.
+    /// The (unresolved) module id.
     ModuleId Id;
 
-    /// \brief The message provided to the user when there is a conflict.
+    /// The message provided to the user when there is a conflict.
     std::string Message;
   };
 
-  /// \brief The list of conflicts for which the module-id has not yet been
+  /// The list of conflicts for which the module-id has not yet been
   /// resolved.
   std::vector<UnresolvedConflict> UnresolvedConflicts;
 
-  /// \brief A conflict between two modules.
+  /// A conflict between two modules.
   struct Conflict {
-    /// \brief The module that this module conflicts with.
+    /// The module that this module conflicts with.
     Module *Other;
 
-    /// \brief The message provided to the user when there is a conflict.
+    /// The message provided to the user when there is a conflict.
     std::string Message;
   };
 
-  /// \brief The list of conflicts.
+  /// The list of conflicts.
   std::vector<Conflict> Conflicts;
 
-  /// \brief Construct a new module or submodule.
+  /// Construct a new module or submodule.
   Module(StringRef Name, SourceLocation DefinitionLoc, Module *Parent,
          bool IsFramework, bool IsExplicit, unsigned VisibilityID);
-  
+
   ~Module();
-  
-  /// \brief Determine whether this module is available for use within the
+
+  /// Determine whether this module is available for use within the
   /// current translation unit.
   bool isAvailable() const { return IsAvailable; }
 
-  /// \brief Determine whether this module is available for use within the
+  /// Determine whether this module is available for use within the
   /// current translation unit.
   ///
   /// \param LangOpts The language options used for the current
@@ -387,31 +395,31 @@
   ///
   /// \param ShadowingModule If this module is unavailable because it is
   /// shadowed, this parameter will be set to the shadowing module.
-  bool isAvailable(const LangOptions &LangOpts, 
+  bool isAvailable(const LangOptions &LangOpts,
                    const TargetInfo &Target,
                    Requirement &Req,
                    UnresolvedHeaderDirective &MissingHeader,
                    Module *&ShadowingModule) const;
 
-  /// \brief Determine whether this module is a submodule.
+  /// Determine whether this module is a submodule.
   bool isSubModule() const { return Parent != nullptr; }
-  
-  /// \brief Determine whether this module is a submodule of the given other
+
+  /// Determine whether this module is a submodule of the given other
   /// module.
   bool isSubModuleOf(const Module *Other) const;
-  
-  /// \brief Determine whether this module is a part of a framework,
+
+  /// Determine whether this module is a part of a framework,
   /// either because it is a framework module or because it is a submodule
   /// of a framework module.
   bool isPartOfFramework() const {
-    for (const Module *Mod = this; Mod; Mod = Mod->Parent) 
+    for (const Module *Mod = this; Mod; Mod = Mod->Parent)
       if (Mod->IsFramework)
         return true;
-    
+
     return false;
   }
 
-  /// \brief Determine whether this module is a subframework of another
+  /// Determine whether this module is a subframework of another
   /// framework.
   bool isSubFramework() const {
     return IsFramework && Parent && Parent->isPartOfFramework();
@@ -426,51 +434,51 @@
     Parent->SubModules.push_back(this);
   }
 
-  /// \brief Retrieve the full name of this module, including the path from
+  /// Retrieve the full name of this module, including the path from
   /// its top-level module.
   /// \param AllowStringLiterals If \c true, components that might not be
   ///        lexically valid as identifiers will be emitted as string literals.
   std::string getFullModuleName(bool AllowStringLiterals = false) const;
 
-  /// \brief Whether the full name of this module is equal to joining
+  /// Whether the full name of this module is equal to joining
   /// \p nameParts with "."s.
   ///
   /// This is more efficient than getFullModuleName().
   bool fullModuleNameIs(ArrayRef<StringRef> nameParts) const;
 
-  /// \brief Retrieve the top-level module for this (sub)module, which may
+  /// Retrieve the top-level module for this (sub)module, which may
   /// be this module.
   Module *getTopLevelModule() {
     return const_cast<Module *>(
              const_cast<const Module *>(this)->getTopLevelModule());
   }
 
-  /// \brief Retrieve the top-level module for this (sub)module, which may
+  /// Retrieve the top-level module for this (sub)module, which may
   /// be this module.
   const Module *getTopLevelModule() const;
-  
-  /// \brief Retrieve the name of the top-level module.
+
+  /// Retrieve the name of the top-level module.
   StringRef getTopLevelModuleName() const {
     return getTopLevelModule()->Name;
   }
 
-  /// \brief The serialized AST file for this module, if one was created.
+  /// The serialized AST file for this module, if one was created.
   const FileEntry *getASTFile() const {
     return getTopLevelModule()->ASTFile;
   }
 
-  /// \brief Set the serialized AST file for the top-level module of this module.
+  /// Set the serialized AST file for the top-level module of this module.
   void setASTFile(const FileEntry *File) {
     assert((File == nullptr || getASTFile() == nullptr ||
             getASTFile() == File) && "file path changed");
     getTopLevelModule()->ASTFile = File;
   }
 
-  /// \brief Retrieve the directory for which this module serves as the
+  /// Retrieve the directory for which this module serves as the
   /// umbrella.
   DirectoryName getUmbrellaDir() const;
 
-  /// \brief Retrieve the header that serves as the umbrella header for this
+  /// Retrieve the header that serves as the umbrella header for this
   /// module.
   Header getUmbrellaHeader() const {
     if (auto *E = Umbrella.dyn_cast<const FileEntry *>())
@@ -478,31 +486,31 @@
     return Header{};
   }
 
-  /// \brief Determine whether this module has an umbrella directory that is
+  /// Determine whether this module has an umbrella directory that is
   /// not based on an umbrella header.
   bool hasUmbrellaDir() const {
     return Umbrella && Umbrella.is<const DirectoryEntry *>();
   }
 
-  /// \brief Add a top-level header associated with this module.
+  /// Add a top-level header associated with this module.
   void addTopHeader(const FileEntry *File) {
     assert(File);
     TopHeaders.insert(File);
   }
 
-  /// \brief Add a top-level header filename associated with this module.
+  /// Add a top-level header filename associated with this module.
   void addTopHeaderFilename(StringRef Filename) {
     TopHeaderNames.push_back(Filename);
   }
 
-  /// \brief The top-level headers associated with this module.
+  /// The top-level headers associated with this module.
   ArrayRef<const FileEntry *> getTopHeaders(FileManager &FileMgr);
 
-  /// \brief Determine whether this module has declared its intention to
+  /// Determine whether this module has declared its intention to
   /// directly use another module.
   bool directlyUses(const Module *Requested) const;
 
-  /// \brief Add the given feature requirement to the list of features
+  /// Add the given feature requirement to the list of features
   /// required by this module.
   ///
   /// \param Feature The feature that is required by this module (and
@@ -520,15 +528,15 @@
                       const LangOptions &LangOpts,
                       const TargetInfo &Target);
 
-  /// \brief Mark this module and all of its submodules as unavailable.
+  /// Mark this module and all of its submodules as unavailable.
   void markUnavailable(bool MissingRequirement = false);
 
-  /// \brief Find the submodule with the given name.
+  /// Find the submodule with the given name.
   ///
   /// \returns The submodule if found, or NULL otherwise.
   Module *findSubmodule(StringRef Name) const;
 
-  /// \brief Determine whether the specified module would be visible to
+  /// Determine whether the specified module would be visible to
   /// a lookup at the end of this module.
   ///
   /// FIXME: This may return incorrect results for (submodules of) the
@@ -544,7 +552,7 @@
 
   using submodule_iterator = std::vector<Module *>::iterator;
   using submodule_const_iterator = std::vector<Module *>::const_iterator;
-  
+
   submodule_iterator submodule_begin() { return SubModules.begin(); }
   submodule_const_iterator submodule_begin() const {return SubModules.begin();}
   submodule_iterator submodule_end()   { return SubModules.end(); }
@@ -557,7 +565,7 @@
     return llvm::make_range(submodule_begin(), submodule_end());
   }
 
-  /// \brief Appends this module's list of exported modules to \p Exported.
+  /// Appends this module's list of exported modules to \p Exported.
   ///
   /// This provides a subset of immediately imported modules (the ones that are
   /// directly exported), not the complete set of exported modules.
@@ -567,17 +575,17 @@
     return "<module-includes>";
   }
 
-  /// \brief Print the module map for this module to the given stream. 
+  /// Print the module map for this module to the given stream.
   void print(raw_ostream &OS, unsigned Indent = 0) const;
-  
-  /// \brief Dump the contents of this module to the given output stream.
+
+  /// Dump the contents of this module to the given output stream.
   void dump() const;
 
 private:
   void buildVisibleModulesCache() const;
 };
 
-/// \brief A set of visible modules.
+/// A set of visible modules.
 class VisibleModuleSet {
 public:
   VisibleModuleSet() = default;
@@ -597,34 +605,34 @@
     return *this;
   }
 
-  /// \brief Get the current visibility generation. Incremented each time the
+  /// Get the current visibility generation. Incremented each time the
   /// set of visible modules changes in any way.
   unsigned getGeneration() const { return Generation; }
 
-  /// \brief Determine whether a module is visible.
+  /// Determine whether a module is visible.
   bool isVisible(const Module *M) const {
     return getImportLoc(M).isValid();
   }
 
-  /// \brief Get the location at which the import of a module was triggered.
+  /// Get the location at which the import of a module was triggered.
   SourceLocation getImportLoc(const Module *M) const {
     return M->getVisibilityID() < ImportLocs.size()
                ? ImportLocs[M->getVisibilityID()]
                : SourceLocation();
   }
 
-  /// \brief A callback to call when a module is made visible (directly or
+  /// A callback to call when a module is made visible (directly or
   /// indirectly) by a call to \ref setVisible.
   using VisibleCallback = llvm::function_ref<void(Module *M)>;
 
-  /// \brief A callback to call when a module conflict is found. \p Path
+  /// A callback to call when a module conflict is found. \p Path
   /// consists of a sequence of modules from the conflicting module to the one
   /// made visible, where each was exported by the next.
   using ConflictCallback =
       llvm::function_ref<void(ArrayRef<Module *> Path, Module *Conflict,
                          StringRef Message)>;
 
-  /// \brief Make a specific module visible.
+  /// Make a specific module visible.
   void setVisible(Module *M, SourceLocation Loc,
                   VisibleCallback Vis = [](Module *) {},
                   ConflictCallback Cb = [](ArrayRef<Module *>, Module *,
diff --git a/linux-x64/clang/include/clang/Basic/ObjCRuntime.h b/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
index c41803c..c307c96 100644
--- a/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
+++ b/linux-x64/clang/include/clang/Basic/ObjCRuntime.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines types useful for describing an Objective-C runtime.
+/// Defines types useful for describing an Objective-C runtime.
 //
 //===----------------------------------------------------------------------===//
 
@@ -16,18 +16,18 @@
 #define LLVM_CLANG_BASIC_OBJCRUNTIME_H
 
 #include "clang/Basic/LLVM.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Triple.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/VersionTuple.h"
 #include <string>
 
 namespace clang {
 
-/// \brief The basic abstraction for the target Objective-C runtime.
+/// The basic abstraction for the target Objective-C runtime.
 class ObjCRuntime {
 public:
-  /// \brief The basic Objective-C runtimes that we know about.
+  /// The basic Objective-C runtimes that we know about.
   enum Kind {
     /// 'macosx' is the Apple-provided NeXT-derived runtime on Mac OS
     /// X platforms that use the non-fragile ABI; the version is a
@@ -77,7 +77,7 @@
   Kind getKind() const { return TheKind; }
   const VersionTuple &getVersion() const { return Version; }
 
-  /// \brief Does this runtime follow the set of implied behaviors for a
+  /// Does this runtime follow the set of implied behaviors for a
   /// "non-fragile" ABI?
   bool isNonFragile() const {
     switch (getKind()) {
@@ -115,7 +115,7 @@
     return true;
   }
 
-  /// \brief Is this runtime basically of the GNU family of runtimes?
+  /// Is this runtime basically of the GNU family of runtimes?
   bool isGNUFamily() const {
     switch (getKind()) {
     case FragileMacOSX:
@@ -131,14 +131,14 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Is this runtime basically of the NeXT family of runtimes?
+  /// Is this runtime basically of the NeXT family of runtimes?
   bool isNeXTFamily() const {
     // For now, this is just the inverse of isGNUFamily(), but that's
     // not inherently true.
     return !isGNUFamily();
   }
 
-  /// \brief Does this runtime allow ARC at all?
+  /// Does this runtime allow ARC at all?
   bool allowsARC() const {
     switch (getKind()) {
     case FragileMacOSX:
@@ -154,7 +154,7 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Does this runtime natively provide the ARC entrypoints? 
+  /// Does this runtime natively provide the ARC entrypoints?
   ///
   /// ARC cannot be directly supported on a platform that does not provide
   /// these entrypoints, although it may be supportable via a stub
@@ -173,7 +173,7 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Does this runtime supports optimized setter entrypoints?
+  /// Does this runtime supports optimized setter entrypoints?
   bool hasOptimizedSetter() const {
     switch (getKind()) {
       case MacOSX:
@@ -194,7 +194,7 @@
     return hasNativeWeak();
   }
 
-  /// \brief Does this runtime natively provide ARC-compliant 'weak'
+  /// Does this runtime natively provide ARC-compliant 'weak'
   /// entrypoints?
   bool hasNativeWeak() const {
     // Right now, this is always equivalent to whether the runtime
@@ -202,7 +202,7 @@
     return hasNativeARC();
   }
 
-  /// \brief Does this runtime directly support the subscripting methods?
+  /// Does this runtime directly support the subscripting methods?
   ///
   /// This is really a property of the library, not the runtime.
   bool hasSubscripting() const {
@@ -222,12 +222,12 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Does this runtime allow sizeof or alignof on object types?
+  /// Does this runtime allow sizeof or alignof on object types?
   bool allowsSizeofAlignof() const {
     return isFragile();
   }
 
-  /// \brief Does this runtime allow pointer arithmetic on objects?
+  /// Does this runtime allow pointer arithmetic on objects?
   ///
   /// This covers +, -, ++, --, and (if isSubscriptPointerArithmetic()
   /// yields true) [].
@@ -246,12 +246,12 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Is subscripting pointer arithmetic?
+  /// Is subscripting pointer arithmetic?
   bool isSubscriptPointerArithmetic() const {
     return allowsPointerArithmetic();
   }
 
-  /// \brief Does this runtime provide an objc_terminate function?
+  /// Does this runtime provide an objc_terminate function?
   ///
   /// This is used in handlers for exceptions during the unwind process;
   /// without it, abort() must be used in pure ObjC files.
@@ -268,7 +268,7 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Does this runtime support weakly importing classes?
+  /// Does this runtime support weakly importing classes?
   bool hasWeakClassImport() const {
     switch (getKind()) {
     case MacOSX: return true;
@@ -282,7 +282,7 @@
     llvm_unreachable("bad kind");
   }
 
-  /// \brief Does this runtime use zero-cost exceptions?
+  /// Does this runtime use zero-cost exceptions?
   bool hasUnwindExceptions() const {
     switch (getKind()) {
     case MacOSX: return true;
@@ -340,7 +340,7 @@
     }
   }
 
-  /// \brief Try to parse an Objective-C runtime specification from the given
+  /// Try to parse an Objective-C runtime specification from the given
   /// string.
   ///
   /// \return true on error.
diff --git a/linux-x64/clang/include/clang/Basic/OpenCLOptions.h b/linux-x64/clang/include/clang/Basic/OpenCLOptions.h
index cc850f0..cc4e992 100644
--- a/linux-x64/clang/include/clang/Basic/OpenCLOptions.h
+++ b/linux-x64/clang/include/clang/Basic/OpenCLOptions.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::OpenCLOptions class.
+/// Defines the clang::OpenCLOptions class.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -19,7 +19,7 @@
 
 namespace clang {
 
-/// \brief OpenCL supported extensions and optional core features
+/// OpenCL supported extensions and optional core features
 class OpenCLOptions {
   struct Info {
     bool Supported; // Is this option supported
@@ -67,7 +67,7 @@
     OptMap[Ext].Enabled = V;
   }
 
-  /// \brief Enable or disable support for OpenCL extensions
+  /// Enable or disable support for OpenCL extensions
   /// \param Ext name of the extension optionally prefixed with
   ///        '+' or '-'
   /// \param V used when \p Ext is not prefixed by '+' or '-'
diff --git a/linux-x64/clang/include/clang/Basic/OpenMPKinds.def b/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
index 6a0bed7..4ed7053 100644
--- a/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
+++ b/linux-x64/clang/include/clang/Basic/OpenMPKinds.def
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 /// \file
-/// \brief This file defines the list of supported OpenMP directives and
+/// This file defines the list of supported OpenMP directives and
 /// clauses.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/Basic/OpenMPKinds.h b/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
index e003331..c47973e 100644
--- a/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
+++ b/linux-x64/clang/include/clang/Basic/OpenMPKinds.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines some OpenMP-specific enums and functions.
+/// Defines some OpenMP-specific enums and functions.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -19,7 +19,7 @@
 
 namespace clang {
 
-/// \brief OpenMP directives.
+/// OpenMP directives.
 enum OpenMPDirectiveKind {
 #define OPENMP_DIRECTIVE(Name) \
   OMPD_##Name,
@@ -29,7 +29,7 @@
   OMPD_unknown
 };
 
-/// \brief OpenMP clauses.
+/// OpenMP clauses.
 enum OpenMPClauseKind {
 #define OPENMP_CLAUSE(Name, Class) \
   OMPC_##Name,
@@ -39,7 +39,7 @@
   OMPC_unknown
 };
 
-/// \brief OpenMP attributes for 'default' clause.
+/// OpenMP attributes for 'default' clause.
 enum OpenMPDefaultClauseKind {
 #define OPENMP_DEFAULT_KIND(Name) \
   OMPC_DEFAULT_##Name,
@@ -47,7 +47,7 @@
   OMPC_DEFAULT_unknown
 };
 
-/// \brief OpenMP attributes for 'proc_bind' clause.
+/// OpenMP attributes for 'proc_bind' clause.
 enum OpenMPProcBindClauseKind {
 #define OPENMP_PROC_BIND_KIND(Name) \
   OMPC_PROC_BIND_##Name,
@@ -55,7 +55,7 @@
   OMPC_PROC_BIND_unknown
 };
 
-/// \brief OpenMP attributes for 'schedule' clause.
+/// OpenMP attributes for 'schedule' clause.
 enum OpenMPScheduleClauseKind {
 #define OPENMP_SCHEDULE_KIND(Name) \
   OMPC_SCHEDULE_##Name,
@@ -63,7 +63,7 @@
   OMPC_SCHEDULE_unknown
 };
 
-/// \brief OpenMP modifiers for 'schedule' clause.
+/// OpenMP modifiers for 'schedule' clause.
 enum OpenMPScheduleClauseModifier {
   OMPC_SCHEDULE_MODIFIER_unknown = OMPC_SCHEDULE_unknown,
 #define OPENMP_SCHEDULE_MODIFIER(Name) \
@@ -72,7 +72,7 @@
   OMPC_SCHEDULE_MODIFIER_last
 };
 
-/// \brief OpenMP attributes for 'depend' clause.
+/// OpenMP attributes for 'depend' clause.
 enum OpenMPDependClauseKind {
 #define OPENMP_DEPEND_KIND(Name) \
   OMPC_DEPEND_##Name,
@@ -80,7 +80,7 @@
   OMPC_DEPEND_unknown
 };
 
-/// \brief OpenMP attributes for 'linear' clause.
+/// OpenMP attributes for 'linear' clause.
 enum OpenMPLinearClauseKind {
 #define OPENMP_LINEAR_KIND(Name) \
   OMPC_LINEAR_##Name,
@@ -88,7 +88,7 @@
   OMPC_LINEAR_unknown
 };
 
-/// \brief OpenMP mapping kind for 'map' clause.
+/// OpenMP mapping kind for 'map' clause.
 enum OpenMPMapClauseKind {
 #define OPENMP_MAP_KIND(Name) \
   OMPC_MAP_##Name,
@@ -96,14 +96,14 @@
   OMPC_MAP_unknown
 };
 
-/// \brief OpenMP attributes for 'dist_schedule' clause.
+/// OpenMP attributes for 'dist_schedule' clause.
 enum OpenMPDistScheduleClauseKind {
 #define OPENMP_DIST_SCHEDULE_KIND(Name) OMPC_DIST_SCHEDULE_##Name,
 #include "clang/Basic/OpenMPKinds.def"
   OMPC_DIST_SCHEDULE_unknown
 };
 
-/// \brief OpenMP attributes for 'defaultmap' clause.
+/// OpenMP attributes for 'defaultmap' clause.
 enum OpenMPDefaultmapClauseKind {
 #define OPENMP_DEFAULTMAP_KIND(Name) \
   OMPC_DEFAULTMAP_##Name,
@@ -111,7 +111,7 @@
   OMPC_DEFAULTMAP_unknown
 };
 
-/// \brief OpenMP modifiers for 'defaultmap' clause.
+/// OpenMP modifiers for 'defaultmap' clause.
 enum OpenMPDefaultmapClauseModifier {
   OMPC_DEFAULTMAP_MODIFIER_unknown = OMPC_DEFAULTMAP_unknown,
 #define OPENMP_DEFAULTMAP_MODIFIER(Name) \
@@ -139,39 +139,39 @@
 bool isAllowedClauseForDirective(OpenMPDirectiveKind DKind,
                                  OpenMPClauseKind CKind);
 
-/// \brief Checks if the specified directive is a directive with an associated
+/// Checks if the specified directive is a directive with an associated
 /// loop construct.
 /// \param DKind Specified directive.
 /// \return true - the directive is a loop-associated directive like 'omp simd'
 /// or 'omp for' directive, otherwise - false.
 bool isOpenMPLoopDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a worksharing directive.
+/// Checks if the specified directive is a worksharing directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a worksharing directive like 'omp for',
 /// otherwise - false.
 bool isOpenMPWorksharingDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a taskloop directive.
+/// Checks if the specified directive is a taskloop directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a worksharing directive like 'omp taskloop',
 /// otherwise - false.
 bool isOpenMPTaskLoopDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a parallel-kind directive.
+/// Checks if the specified directive is a parallel-kind directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a parallel-like directive like 'omp
 /// parallel', otherwise - false.
 bool isOpenMPParallelDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a target code offload directive.
+/// Checks if the specified directive is a target code offload directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a target code offload directive like
 /// 'omp target', 'omp target parallel', 'omp target xxx'
 /// otherwise - false.
 bool isOpenMPTargetExecutionDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a target data offload directive.
+/// Checks if the specified directive is a target data offload directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a target data offload directive like
 /// 'omp target data', 'omp target update', 'omp target enter data',
@@ -193,13 +193,13 @@
 /// \return true - the directive is a teams-like directive, otherwise - false.
 bool isOpenMPTeamsDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a simd directive.
+/// Checks if the specified directive is a simd directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a simd directive like 'omp simd',
 /// otherwise - false.
 bool isOpenMPSimdDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified directive is a distribute directive.
+/// Checks if the specified directive is a distribute directive.
 /// \param DKind Specified directive.
 /// \return true - the directive is a distribute-directive like 'omp
 /// distribute',
@@ -214,13 +214,13 @@
 /// otherwise - false.
 bool isOpenMPNestingDistributeDirective(OpenMPDirectiveKind DKind);
 
-/// \brief Checks if the specified clause is one of private clauses like
+/// Checks if the specified clause is one of private clauses like
 /// 'private', 'firstprivate', 'reduction' etc..
 /// \param Kind Clause kind.
 /// \return true - the clause is a private clause, otherwise - false.
 bool isOpenMPPrivate(OpenMPClauseKind Kind);
 
-/// \brief Checks if the specified clause is one of threadprivate clauses like
+/// Checks if the specified clause is one of threadprivate clauses like
 /// 'threadprivate', 'copyin' or 'copyprivate'.
 /// \param Kind Clause kind.
 /// \return true - the clause is a threadprivate clause, otherwise - false.
diff --git a/linux-x64/clang/include/clang/Basic/OperatorKinds.h b/linux-x64/clang/include/clang/Basic/OperatorKinds.h
index 7120bae..3096f83 100644
--- a/linux-x64/clang/include/clang/Basic/OperatorKinds.h
+++ b/linux-x64/clang/include/clang/Basic/OperatorKinds.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines an enumeration for C++ overloaded operators.
+/// Defines an enumeration for C++ overloaded operators.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -17,7 +17,7 @@
 
 namespace clang {
 
-/// \brief Enumeration specifying the different kinds of C++ overloaded
+/// Enumeration specifying the different kinds of C++ overloaded
 /// operators.
 enum OverloadedOperatorKind : int {
   OO_None,                ///< Not an overloaded operator
@@ -27,7 +27,7 @@
   NUM_OVERLOADED_OPERATORS
 };
 
-/// \brief Retrieve the spelling of the given overloaded operator, without 
+/// Retrieve the spelling of the given overloaded operator, without
 /// the preceding "operator" keyword.
 const char *getOperatorSpelling(OverloadedOperatorKind Operator);
 
diff --git a/linux-x64/clang/include/clang/Basic/OperatorPrecedence.h b/linux-x64/clang/include/clang/Basic/OperatorPrecedence.h
index 94978f8..4389e3b 100644
--- a/linux-x64/clang/include/clang/Basic/OperatorPrecedence.h
+++ b/linux-x64/clang/include/clang/Basic/OperatorPrecedence.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines and computes precedence levels for binary/ternary operators.
+/// Defines and computes precedence levels for binary/ternary operators.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -44,7 +44,7 @@
   };
 }
 
-/// \brief Return the precedence of the specified binary operator token.
+/// Return the precedence of the specified binary operator token.
 prec::Level getBinOpPrecedence(tok::TokenKind Kind, bool GreaterThanIsOperator,
                                bool CPlusPlus11);
 
diff --git a/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h b/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
index dffeaee..9727af8 100644
--- a/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
+++ b/linux-x64/clang/include/clang/Basic/PartialDiagnostic.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Implements a partial diagnostic that can be emitted anwyhere
+/// Implements a partial diagnostic that can be emitted anwyhere
 /// in a DiagnosticBuilder stream.
 //
 //===----------------------------------------------------------------------===//
@@ -44,7 +44,7 @@
 
   struct Storage {
     enum {
-        /// \brief The maximum number of arguments we can hold. We
+        /// The maximum number of arguments we can hold. We
         /// currently only support up to 10 arguments (%0-%9).
         ///
         /// A single diagnostic with more than that almost certainly has to
@@ -52,35 +52,35 @@
         MaxArguments = PartialDiagnostic::MaxArguments
     };
 
-    /// \brief The number of entries in Arguments.
+    /// The number of entries in Arguments.
     unsigned char NumDiagArgs = 0;
 
-    /// \brief Specifies for each argument whether it is in DiagArgumentsStr
+    /// Specifies for each argument whether it is in DiagArgumentsStr
     /// or in DiagArguments.
     unsigned char DiagArgumentsKind[MaxArguments];
 
-    /// \brief The values for the various substitution positions.
+    /// The values for the various substitution positions.
     ///
     /// This is used when the argument is not an std::string. The specific value
     /// is mangled into an intptr_t and the interpretation depends on exactly
     /// what sort of argument kind it is.
     intptr_t DiagArgumentsVal[MaxArguments];
 
-    /// \brief The values for the various substitution positions that have
+    /// The values for the various substitution positions that have
     /// string arguments.
     std::string DiagArgumentsStr[MaxArguments];
 
-    /// \brief The list of ranges added to this diagnostic.
+    /// The list of ranges added to this diagnostic.
     SmallVector<CharSourceRange, 8> DiagRanges;
 
-    /// \brief If valid, provides a hint with some code to insert, remove, or
+    /// If valid, provides a hint with some code to insert, remove, or
     /// modify at a particular position.
     SmallVector<FixItHint, 6>  FixItHints;
 
     Storage() = default;
   };
 
-  /// \brief An allocator for Storage objects, which uses a small cache to
+  /// An allocator for Storage objects, which uses a small cache to
   /// objects, used to reduce malloc()/free() traffic for partial diagnostics.
   class StorageAllocator {
     static const unsigned NumCached = 16;
@@ -92,7 +92,7 @@
     StorageAllocator();
     ~StorageAllocator();
 
-    /// \brief Allocate new storage.
+    /// Allocate new storage.
     Storage *Allocate() {
       if (NumFreeListEntries == 0)
         return new Storage;
@@ -104,7 +104,7 @@
       return Result;
     }
 
-    /// \brief Free the given storage object.
+    /// Free the given storage object.
     void Deallocate(Storage *S) {
       if (S >= Cached && S <= Cached + NumCached) {
         FreeList[NumFreeListEntries++] = S;
@@ -120,16 +120,16 @@
   // in the sense that its bits can be safely memcpy'ed and destructed
   // in the new location.
 
-  /// \brief The diagnostic ID.
+  /// The diagnostic ID.
   mutable unsigned DiagID = 0;
 
-  /// \brief Storage for args and ranges.
+  /// Storage for args and ranges.
   mutable Storage *DiagStorage = nullptr;
 
-  /// \brief Allocator used to allocate storage for this diagnostic.
+  /// Allocator used to allocate storage for this diagnostic.
   StorageAllocator *Allocator = nullptr;
 
-  /// \brief Retrieve storage for this particular diagnostic.
+  /// Retrieve storage for this particular diagnostic.
   Storage *getStorage() const {
     if (DiagStorage)
       return DiagStorage;
@@ -184,7 +184,7 @@
 public:
   struct NullDiagnostic {};
 
-  /// \brief Create a null partial diagnostic, which cannot carry a payload,
+  /// Create a null partial diagnostic, which cannot carry a payload,
   /// and only exists to be swapped with a real partial diagnostic.
   PartialDiagnostic(NullDiagnostic) {}
 
@@ -324,7 +324,7 @@
     Diags.Clear();
   }
 
-  /// \brief Clear out this partial diagnostic, giving it a new diagnostic ID
+  /// Clear out this partial diagnostic, giving it a new diagnostic ID
   /// and removing all of its arguments, ranges, and fix-it hints.
   void Reset(unsigned DiagID = 0) {
     this->DiagID = DiagID;
@@ -414,7 +414,7 @@
   return DB;
 }
 
-/// \brief A partial diagnostic along with the source location where this
+/// A partial diagnostic along with the source location where this
 /// diagnostic occurs.
 using PartialDiagnosticAt = std::pair<SourceLocation, PartialDiagnostic>;
 
diff --git a/linux-x64/clang/include/clang/Basic/PrettyStackTrace.h b/linux-x64/clang/include/clang/Basic/PrettyStackTrace.h
index 6badae5..e652f52 100644
--- a/linux-x64/clang/include/clang/Basic/PrettyStackTrace.h
+++ b/linux-x64/clang/include/clang/Basic/PrettyStackTrace.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the PrettyStackTraceEntry class, which is used to make
+/// Defines the PrettyStackTraceEntry class, which is used to make
 /// crashes give more contextual information about what the program was doing
 /// when it crashed.
 ///
diff --git a/linux-x64/clang/include/clang/Basic/Sanitizers.def b/linux-x64/clang/include/clang/Basic/Sanitizers.def
index 30d5cc8..ae5c75f 100644
--- a/linux-x64/clang/include/clang/Basic/Sanitizers.def
+++ b/linux-x64/clang/include/clang/Basic/Sanitizers.def
@@ -44,8 +44,12 @@
 // Kernel AddressSanitizer (KASan)
 SANITIZER("kernel-address", KernelAddress)
 
+// Hardware-assisted AddressSanitizer
 SANITIZER("hwaddress", HWAddress)
 
+// Kernel Hardware-assisted AddressSanitizer (KHWASan)
+SANITIZER("kernel-hwaddress", KernelHWAddress)
+
 // MemorySanitizer
 SANITIZER("memory", Memory)
 
@@ -100,16 +104,20 @@
 SANITIZER("cfi-cast-strict", CFICastStrict)
 SANITIZER("cfi-derived-cast", CFIDerivedCast)
 SANITIZER("cfi-icall", CFIICall)
+SANITIZER("cfi-mfcall", CFIMFCall)
 SANITIZER("cfi-unrelated-cast", CFIUnrelatedCast)
 SANITIZER("cfi-nvcall", CFINVCall)
 SANITIZER("cfi-vcall", CFIVCall)
 SANITIZER_GROUP("cfi", CFI,
-                CFIDerivedCast | CFIICall | CFIUnrelatedCast | CFINVCall |
-                CFIVCall)
+                CFIDerivedCast | CFIICall | CFIMFCall | CFIUnrelatedCast |
+                    CFINVCall | CFIVCall)
 
 // Safe Stack
 SANITIZER("safe-stack", SafeStack)
 
+// Shadow Call Stack
+SANITIZER("shadow-call-stack", ShadowCallStack)
+
 // -fsanitize=undefined includes all the sanitizers which have low overhead, no
 // ABI or address space layout implications, and only catch undefined behavior.
 SANITIZER_GROUP("undefined", Undefined,
@@ -123,9 +131,14 @@
 // -fsanitize=undefined-trap is an alias for -fsanitize=undefined.
 SANITIZER_GROUP("undefined-trap", UndefinedTrap, Undefined)
 
+// ImplicitConversionSanitizer
+SANITIZER("implicit-integer-truncation", ImplicitIntegerTruncation)
+SANITIZER_GROUP("implicit-conversion", ImplicitConversion,
+                ImplicitIntegerTruncation)
+
 SANITIZER_GROUP("integer", Integer,
-                SignedIntegerOverflow | UnsignedIntegerOverflow | Shift |
-                IntegerDivideByZero)
+                ImplicitIntegerTruncation | IntegerDivideByZero | Shift |
+                    SignedIntegerOverflow | UnsignedIntegerOverflow)
 
 SANITIZER("local-bounds", LocalBounds)
 SANITIZER_GROUP("bounds", Bounds, ArrayBounds | LocalBounds)
diff --git a/linux-x64/clang/include/clang/Basic/Sanitizers.h b/linux-x64/clang/include/clang/Basic/Sanitizers.h
index fad22b2..2ecbde8 100644
--- a/linux-x64/clang/include/clang/Basic/Sanitizers.h
+++ b/linux-x64/clang/include/clang/Basic/Sanitizers.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::SanitizerKind enum.
+/// Defines the clang::SanitizerKind enum.
 //
 //===----------------------------------------------------------------------===//
 
@@ -48,16 +48,16 @@
 } // namespace SanitizerKind
 
 struct SanitizerSet {
-  /// \brief Check if a certain (single) sanitizer is enabled.
+  /// Check if a certain (single) sanitizer is enabled.
   bool has(SanitizerMask K) const {
     assert(llvm::isPowerOf2_64(K));
     return Mask & K;
   }
 
-  /// \brief Check if one or more sanitizers are enabled.
+  /// Check if one or more sanitizers are enabled.
   bool hasOneOf(SanitizerMask K) const { return Mask & K; }
 
-  /// \brief Enable or disable a certain (single) sanitizer.
+  /// Enable or disable a certain (single) sanitizer.
   void set(SanitizerMask K, bool Value) {
     assert(llvm::isPowerOf2_64(K));
     Mask = Value ? (Mask | K) : (Mask & ~K);
@@ -66,10 +66,10 @@
   /// Disable the sanitizers specified in \p K.
   void clear(SanitizerMask K = SanitizerKind::All) { Mask &= ~K; }
 
-  /// \brief Returns true if at least one sanitizer is enabled.
+  /// Returns true if at least one sanitizer is enabled.
   bool empty() const { return Mask == 0; }
 
-  /// \brief Bitmask of enabled sanitizers.
+  /// Bitmask of enabled sanitizers.
   SanitizerMask Mask = 0;
 };
 
@@ -84,7 +84,8 @@
 /// Return the sanitizers which do not affect preprocessing.
 inline SanitizerMask getPPTransparentSanitizers() {
   return SanitizerKind::CFI | SanitizerKind::Integer |
-         SanitizerKind::Nullability | SanitizerKind::Undefined;
+         SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
+         SanitizerKind::Undefined;
 }
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/SourceLocation.h b/linux-x64/clang/include/clang/Basic/SourceLocation.h
index a83f95e..488a604 100644
--- a/linux-x64/clang/include/clang/Basic/SourceLocation.h
+++ b/linux-x64/clang/include/clang/Basic/SourceLocation.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::SourceLocation class and associated facilities.
+/// Defines the clang::SourceLocation class and associated facilities.
 //
 //===----------------------------------------------------------------------===//
 
@@ -34,11 +34,11 @@
 
 class SourceManager;
 
-/// \brief An opaque identifier used by SourceManager which refers to a
+/// An opaque identifier used by SourceManager which refers to a
 /// source file (MemoryBuffer) along with its \#include path and \#line data.
 ///
 class FileID {
-  /// \brief A mostly-opaque identifier, where 0 is "invalid", >0 is 
+  /// A mostly-opaque identifier, where 0 is "invalid", >0 is
   /// this module, and <-1 is something loaded from another module.
   int ID = 0;
 
@@ -60,7 +60,7 @@
   friend class ASTWriter;
   friend class ASTReader;
   friend class SourceManager;
-  
+
   static FileID get(int V) {
     FileID F;
     F.ID = V;
@@ -70,7 +70,7 @@
   int getOpaqueValue() const { return ID; }
 };
 
-/// \brief Encodes a location in the source. The SourceManager can decode this
+/// Encodes a location in the source. The SourceManager can decode this
 /// to get at the full include stack, line and column information.
 ///
 /// Technically, a source location is simply an offset into the manager's view
@@ -100,7 +100,7 @@
   bool isFileID() const  { return (ID & MacroIDBit) == 0; }
   bool isMacroID() const { return (ID & MacroIDBit) != 0; }
 
-  /// \brief Return true if this is a valid SourceLocation object.
+  /// Return true if this is a valid SourceLocation object.
   ///
   /// Invalid SourceLocations are often used when events have no corresponding
   /// location in the source (e.g. a diagnostic is required for a command line
@@ -109,7 +109,7 @@
   bool isInvalid() const { return ID == 0; }
 
 private:
-  /// \brief Return the offset into the manager's global input view.
+  /// Return the offset into the manager's global input view.
   unsigned getOffset() const {
     return ID & ~MacroIDBit;
   }
@@ -129,7 +129,7 @@
   }
 
 public:
-  /// \brief Return a source location with the specified offset from this
+  /// Return a source location with the specified offset from this
   /// SourceLocation.
   SourceLocation getLocWithOffset(int Offset) const {
     assert(((getOffset()+Offset) & MacroIDBit) == 0 && "offset overflow");
@@ -138,14 +138,14 @@
     return L;
   }
 
-  /// \brief When a SourceLocation itself cannot be used, this returns
+  /// When a SourceLocation itself cannot be used, this returns
   /// an (opaque) 32-bit integer encoding for it.
   ///
   /// This should only be passed to SourceLocation::getFromRawEncoding, it
   /// should not be inspected directly.
   unsigned getRawEncoding() const { return ID; }
 
-  /// \brief Turn a raw encoding of a SourceLocation object into
+  /// Turn a raw encoding of a SourceLocation object into
   /// a real SourceLocation.
   ///
   /// \see getRawEncoding.
@@ -155,7 +155,7 @@
     return X;
   }
 
-  /// \brief When a SourceLocation itself cannot be used, this returns
+  /// When a SourceLocation itself cannot be used, this returns
   /// an (opaque) pointer encoding for it.
   ///
   /// This should only be passed to SourceLocation::getFromPtrEncoding, it
@@ -166,7 +166,7 @@
     return (void*)(uintptr_t)getRawEncoding();
   }
 
-  /// \brief Turn a pointer encoding of a SourceLocation object back
+  /// Turn a pointer encoding of a SourceLocation object back
   /// into a real SourceLocation.
   static SourceLocation getFromPtrEncoding(const void *Encoding) {
     return getFromRawEncoding((unsigned)(uintptr_t)Encoding);
@@ -194,7 +194,7 @@
   return LHS.getRawEncoding() < RHS.getRawEncoding();
 }
 
-/// \brief A trivial tuple used to represent a source range.
+/// A trivial tuple used to represent a source range.
 class SourceRange {
   SourceLocation B;
   SourceLocation E;
@@ -221,15 +221,15 @@
     return B != X.B || E != X.E;
   }
 };
-  
-/// \brief Represents a character-granular source range.
+
+/// Represents a character-granular source range.
 ///
 /// The underlying SourceRange can either specify the starting/ending character
 /// of the range, or it can specify the start of the range and the start of the
 /// last token of the range (a "token range").  In the token range case, the
 /// size of the last token must be measured to determine the actual end of the
 /// range.
-class CharSourceRange { 
+class CharSourceRange {
   SourceRange Range;
   bool IsTokenRange = false;
 
@@ -244,7 +244,7 @@
   static CharSourceRange getCharRange(SourceRange R) {
     return CharSourceRange(R, false);
   }
-    
+
   static CharSourceRange getTokenRange(SourceLocation B, SourceLocation E) {
     return getTokenRange(SourceRange(B, E));
   }
@@ -252,25 +252,26 @@
   static CharSourceRange getCharRange(SourceLocation B, SourceLocation E) {
     return getCharRange(SourceRange(B, E));
   }
-  
-  /// \brief Return true if the end of this range specifies the start of
+
+  /// Return true if the end of this range specifies the start of
   /// the last token.  Return false if the end of this range specifies the last
   /// character in the range.
   bool isTokenRange() const { return IsTokenRange; }
   bool isCharRange() const { return !IsTokenRange; }
-  
+
   SourceLocation getBegin() const { return Range.getBegin(); }
   SourceLocation getEnd() const { return Range.getEnd(); }
   SourceRange getAsRange() const { return Range; }
- 
+
   void setBegin(SourceLocation b) { Range.setBegin(b); }
   void setEnd(SourceLocation e) { Range.setEnd(e); }
-  
+  void setTokenRange(bool TR) { IsTokenRange = TR; }
+
   bool isValid() const { return Range.isValid(); }
   bool isInvalid() const { return !isValid(); }
 };
 
-/// \brief Represents an unpacked "presumed" location which can be presented
+/// Represents an unpacked "presumed" location which can be presented
 /// to the user.
 ///
 /// A 'presumed' location can be modified by \#line and GNU line marker
@@ -287,14 +288,14 @@
   PresumedLoc(const char *FN, unsigned Ln, unsigned Co, SourceLocation IL)
       : Filename(FN), Line(Ln), Col(Co), IncludeLoc(IL) {}
 
-  /// \brief Return true if this object is invalid or uninitialized.
+  /// Return true if this object is invalid or uninitialized.
   ///
   /// This occurs when created with invalid source locations or when walking
   /// off the top of a \#include stack.
   bool isInvalid() const { return Filename == nullptr; }
   bool isValid() const { return Filename != nullptr; }
 
-  /// \brief Return the presumed filename of this location.
+  /// Return the presumed filename of this location.
   ///
   /// This can be affected by \#line etc.
   const char *getFilename() const {
@@ -302,7 +303,7 @@
     return Filename;
   }
 
-  /// \brief Return the presumed line number of this location.
+  /// Return the presumed line number of this location.
   ///
   /// This can be affected by \#line etc.
   unsigned getLine() const {
@@ -310,7 +311,7 @@
     return Line;
   }
 
-  /// \brief Return the presumed column number of this location.
+  /// Return the presumed column number of this location.
   ///
   /// This cannot be affected by \#line, but is packaged here for convenience.
   unsigned getColumn() const {
@@ -318,7 +319,7 @@
     return Col;
   }
 
-  /// \brief Return the presumed include location of this location.
+  /// Return the presumed include location of this location.
   ///
   /// This can be affected by GNU linemarker directives.
   SourceLocation getIncludeLoc() const {
@@ -329,14 +330,14 @@
 
 class FileEntry;
 
-/// \brief A SourceLocation and its associated SourceManager.
+/// A SourceLocation and its associated SourceManager.
 ///
 /// This is useful for argument passing to functions that expect both objects.
 class FullSourceLoc : public SourceLocation {
   const SourceManager *SrcMgr = nullptr;
 
 public:
-  /// \brief Creates a FullSourceLoc where isValid() returns \c false.
+  /// Creates a FullSourceLoc where isValid() returns \c false.
   FullSourceLoc() = default;
 
   explicit FullSourceLoc(SourceLocation Loc, const SourceManager &SM)
@@ -359,7 +360,6 @@
   FullSourceLoc getExpansionLoc() const;
   FullSourceLoc getSpellingLoc() const;
   FullSourceLoc getFileLoc() const;
-  std::pair<FullSourceLoc, FullSourceLoc> getImmediateExpansionRange() const;
   PresumedLoc getPresumedLoc(bool UseLineDirectives = true) const;
   bool isMacroArgExpansion(FullSourceLoc *StartLoc = nullptr) const;
   FullSourceLoc getImmediateMacroCallerLoc() const;
@@ -377,15 +377,13 @@
   unsigned getLineNumber(bool *Invalid = nullptr) const;
   unsigned getColumnNumber(bool *Invalid = nullptr) const;
 
-  std::pair<FullSourceLoc, FullSourceLoc> getExpansionRange() const;
-
   const FileEntry *getFileEntry() const;
 
-  /// \brief Return a StringRef to the source buffer data for the
+  /// Return a StringRef to the source buffer data for the
   /// specified FileID.
   StringRef getBufferData(bool *Invalid = nullptr) const;
 
-  /// \brief Decompose the specified location into a raw FileID + Offset pair.
+  /// Decompose the specified location into a raw FileID + Offset pair.
   ///
   /// The first element is the FileID, the second is the offset from the
   /// start of the buffer of the location.
@@ -393,12 +391,12 @@
 
   bool isInSystemHeader() const;
 
-  /// \brief Determines the order of 2 source locations in the translation unit.
+  /// Determines the order of 2 source locations in the translation unit.
   ///
   /// \returns true if this source location comes before 'Loc', false otherwise.
   bool isBeforeInTranslationUnitThan(SourceLocation Loc) const;
 
-  /// \brief Determines the order of 2 source locations in the translation unit.
+  /// Determines the order of 2 source locations in the translation unit.
   ///
   /// \returns true if this source location comes before 'Loc', false otherwise.
   bool isBeforeInTranslationUnitThan(FullSourceLoc Loc) const {
@@ -407,14 +405,14 @@
     return isBeforeInTranslationUnitThan((SourceLocation)Loc);
   }
 
-  /// \brief Comparison function class, useful for sorting FullSourceLocs.
+  /// Comparison function class, useful for sorting FullSourceLocs.
   struct BeforeThanCompare {
     bool operator()(const FullSourceLoc& lhs, const FullSourceLoc& rhs) const {
       return lhs.isBeforeInTranslationUnitThan(rhs);
     }
   };
 
-  /// \brief Prints information about this FullSourceLoc to stderr.
+  /// Prints information about this FullSourceLoc to stderr.
   ///
   /// This is useful for debugging.
   void dump() const;
@@ -455,7 +453,7 @@
       return LHS == RHS;
     }
   };
-  
+
   template <>
   struct isPodLike<clang::SourceLocation> { static const bool value = true; };
   template <>
diff --git a/linux-x64/clang/include/clang/Basic/SourceManager.h b/linux-x64/clang/include/clang/Basic/SourceManager.h
index 17601b8..af7dbbc 100644
--- a/linux-x64/clang/include/clang/Basic/SourceManager.h
+++ b/linux-x64/clang/include/clang/Basic/SourceManager.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the SourceManager interface.
+/// Defines the SourceManager interface.
 ///
 /// There are three different types of locations in a %file: a spelling
 /// location, an expansion location, and a presumed location.
@@ -35,6 +35,7 @@
 #ifndef LLVM_CLANG_BASIC_SOURCEMANAGER_H
 #define LLVM_CLANG_BASIC_SOURCEMANAGER_H
 
+#include "clang/Basic/Diagnostic.h"
 #include "clang/Basic/FileManager.h"
 #include "clang/Basic/SourceLocation.h"
 #include "llvm/ADT/ArrayRef.h"
@@ -60,15 +61,14 @@
 
 class ASTReader;
 class ASTWriter;
-class DiagnosticsEngine;
 class LineTableInfo;
 class SourceManager;
 
-/// \brief Public enums and private classes that are part of the
+/// Public enums and private classes that are part of the
 /// SourceManager implementation.
 namespace SrcMgr {
 
-  /// \brief Indicates whether a file or directory holds normal user code,
+  /// Indicates whether a file or directory holds normal user code,
   /// system code, or system code which is implicitly 'extern "C"' in C++ mode.
   ///
   /// Entire directories can be tagged with this (this is maintained by
@@ -89,19 +89,19 @@
     return CK == C_User_ModuleMap || CK == C_System_ModuleMap;
   }
 
-  /// \brief One instance of this struct is kept for every file loaded or used.
+  /// One instance of this struct is kept for every file loaded or used.
   ///
   /// This object owns the MemoryBuffer object.
-  class LLVM_ALIGNAS(8) ContentCache {
+  class alignas(8) ContentCache {
     enum CCFlags {
-      /// \brief Whether the buffer is invalid.
+      /// Whether the buffer is invalid.
       InvalidFlag = 0x01,
 
-      /// \brief Whether the buffer should not be freed on destruction.
+      /// Whether the buffer should not be freed on destruction.
       DoNotFreeFlag = 0x02
     };
 
-    /// \brief The actual buffer containing the characters from the input
+    /// The actual buffer containing the characters from the input
     /// file.
     ///
     /// This is owned by the ContentCache object.  The bits indicate
@@ -109,7 +109,7 @@
     mutable llvm::PointerIntPair<llvm::MemoryBuffer *, 2> Buffer;
 
   public:
-    /// \brief Reference to the file entry representing this ContentCache.
+    /// Reference to the file entry representing this ContentCache.
     ///
     /// This reference does not own the FileEntry object.
     ///
@@ -117,35 +117,35 @@
     /// an imaginary text buffer.
     const FileEntry *OrigEntry;
 
-    /// \brief References the file which the contents were actually loaded from.
+    /// References the file which the contents were actually loaded from.
     ///
     /// Can be different from 'Entry' if we overridden the contents of one file
     /// with the contents of another file.
     const FileEntry *ContentsEntry;
 
-    /// \brief A bump pointer allocated array of offsets for each source line.
+    /// A bump pointer allocated array of offsets for each source line.
     ///
     /// This is lazily computed.  This is owned by the SourceManager
     /// BumpPointerAllocator object.
     unsigned *SourceLineCache = nullptr;
 
-    /// \brief The number of lines in this ContentCache.
+    /// The number of lines in this ContentCache.
     ///
     /// This is only valid if SourceLineCache is non-null.
     unsigned NumLines = 0;
 
-    /// \brief Indicates whether the buffer itself was provided to override
+    /// Indicates whether the buffer itself was provided to override
     /// the actual file contents.
     ///
     /// When true, the original entry may be a virtual file that does not
     /// exist.
     unsigned BufferOverridden : 1;
 
-    /// \brief True if this content cache was initially created for a source
+    /// True if this content cache was initially created for a source
     /// file considered as a system one.
     unsigned IsSystemFile : 1;
 
-    /// \brief True if this file may be transient, that is, if it might not
+    /// True if this file may be transient, that is, if it might not
     /// exist at some later point in time when this content entry is used,
     /// after serialization and deserialization.
     unsigned IsTransient : 1;
@@ -155,7 +155,7 @@
     ContentCache(const FileEntry *Ent, const FileEntry *contentEnt)
       : Buffer(nullptr, false), OrigEntry(Ent), ContentsEntry(contentEnt),
         BufferOverridden(false), IsSystemFile(false), IsTransient(false) {}
-    
+
     /// The copy ctor does not allow copies where source object has either
     /// a non-NULL Buffer or SourceLineCache.  Ownership of allocated memory
     /// is not transferred, so this is a logical error.
@@ -176,7 +176,7 @@
 
     ~ContentCache();
 
-    /// \brief Returns the memory buffer for the associated content.
+    /// Returns the memory buffer for the associated content.
     ///
     /// \param Diag Object through which diagnostics will be emitted if the
     ///   buffer cannot be retrieved.
@@ -190,7 +190,7 @@
                                   SourceLocation Loc = SourceLocation(),
                                   bool *Invalid = nullptr) const;
 
-    /// \brief Returns the size of the content encapsulated by this
+    /// Returns the size of the content encapsulated by this
     /// ContentCache.
     ///
     /// This can be the size of the source file or the size of an
@@ -198,7 +198,7 @@
     /// file this size is retrieved from the file's FileEntry.
     unsigned getSize() const;
 
-    /// \brief Returns the number of bytes actually mapped for this
+    /// Returns the number of bytes actually mapped for this
     /// ContentCache.
     ///
     /// This can be 0 if the MemBuffer was not actually expanded.
@@ -208,20 +208,20 @@
     /// this content cache.  This is used for performance analysis.
     llvm::MemoryBuffer::BufferKind getMemoryBufferKind() const;
 
-    /// \brief Get the underlying buffer, returning NULL if the buffer is not
+    /// Get the underlying buffer, returning NULL if the buffer is not
     /// yet available.
     llvm::MemoryBuffer *getRawBuffer() const { return Buffer.getPointer(); }
 
-    /// \brief Replace the existing buffer (which will be deleted)
+    /// Replace the existing buffer (which will be deleted)
     /// with the given buffer.
     void replaceBuffer(llvm::MemoryBuffer *B, bool DoNotFree = false);
 
-    /// \brief Determine whether the buffer itself is invalid.
+    /// Determine whether the buffer itself is invalid.
     bool isBufferInvalid() const {
       return Buffer.getInt() & InvalidFlag;
     }
 
-    /// \brief Determine whether the buffer should be freed.
+    /// Determine whether the buffer should be freed.
     bool shouldFreeBuffer() const {
       return (Buffer.getInt() & DoNotFreeFlag) == 0;
     }
@@ -232,7 +232,7 @@
   static_assert(alignof(ContentCache) >= 8,
                 "ContentCache must be 8-byte aligned.");
 
-  /// \brief Information about a FileID, basically just the logical file
+  /// Information about a FileID, basically just the logical file
   /// that it represents and include stack information.
   ///
   /// Each FileInfo has include stack information, indicating where it came
@@ -246,26 +246,26 @@
     friend class clang::ASTWriter;
     friend class clang::ASTReader;
 
-    /// \brief The location of the \#include that brought in this file.
+    /// The location of the \#include that brought in this file.
     ///
     /// This is an invalid SLOC for the main file (top of the \#include chain).
     unsigned IncludeLoc;  // Really a SourceLocation
 
-    /// \brief Number of FileIDs (files and macros) that were created during
+    /// Number of FileIDs (files and macros) that were created during
     /// preprocessing of this \#include, including this SLocEntry.
     ///
     /// Zero means the preprocessor didn't provide such info for this SLocEntry.
     unsigned NumCreatedFIDs : 31;
 
-    /// \brief Whether this FileInfo has any \#line directives.
+    /// Whether this FileInfo has any \#line directives.
     unsigned HasLineDirectives : 1;
 
-    /// \brief The content cache and the characteristic of the file.
+    /// The content cache and the characteristic of the file.
     llvm::PointerIntPair<const ContentCache*, 3, CharacteristicKind>
         ContentAndKind;
 
   public:
-    /// \brief Return a FileInfo object.
+    /// Return a FileInfo object.
     static FileInfo get(SourceLocation IL, const ContentCache *Con,
                         CharacteristicKind FileCharacter) {
       FileInfo X;
@@ -285,28 +285,28 @@
       return ContentAndKind.getPointer();
     }
 
-    /// \brief Return whether this is a system header or not.
+    /// Return whether this is a system header or not.
     CharacteristicKind getFileCharacteristic() const {
       return ContentAndKind.getInt();
     }
 
-    /// \brief Return true if this FileID has \#line directives in it.
+    /// Return true if this FileID has \#line directives in it.
     bool hasLineDirectives() const { return HasLineDirectives; }
 
-    /// \brief Set the flag that indicates that this FileID has
+    /// Set the flag that indicates that this FileID has
     /// line table entries associated with it.
     void setHasLineDirectives() {
       HasLineDirectives = true;
     }
   };
 
-  /// \brief Each ExpansionInfo encodes the expansion location - where
+  /// Each ExpansionInfo encodes the expansion location - where
   /// the token was ultimately expanded, and the SpellingLoc - where the actual
   /// character data for the token came from.
   class ExpansionInfo {
     // Really these are all SourceLocations.
 
-    /// \brief Where the spelling for the token can be found.
+    /// Where the spelling for the token can be found.
     unsigned SpellingLoc;
 
     /// In a macro expansion, ExpansionLocStart and ExpansionLocEnd
@@ -317,9 +317,13 @@
     /// invalid location.
     unsigned ExpansionLocStart, ExpansionLocEnd;
 
+    /// Whether the expansion range is a token range.
+    bool ExpansionIsTokenRange;
+
   public:
     SourceLocation getSpellingLoc() const {
-      return SourceLocation::getFromRawEncoding(SpellingLoc);
+      SourceLocation SpellLoc = SourceLocation::getFromRawEncoding(SpellingLoc);
+      return SpellLoc.isInvalid() ? getExpansionLocStart() : SpellLoc;
     }
 
     SourceLocation getExpansionLocStart() const {
@@ -332,8 +336,14 @@
       return EndLoc.isInvalid() ? getExpansionLocStart() : EndLoc;
     }
 
-    std::pair<SourceLocation,SourceLocation> getExpansionLocRange() const {
-      return std::make_pair(getExpansionLocStart(), getExpansionLocEnd());
+    bool isExpansionTokenRange() const {
+      return ExpansionIsTokenRange;
+    }
+
+    CharSourceRange getExpansionLocRange() const {
+      return CharSourceRange(
+          SourceRange(getExpansionLocStart(), getExpansionLocEnd()),
+          isExpansionTokenRange());
     }
 
     bool isMacroArgExpansion() const {
@@ -352,22 +362,24 @@
           getExpansionLocStart() != getExpansionLocEnd();
     }
 
-    /// \brief Return a ExpansionInfo for an expansion.
+    /// Return a ExpansionInfo for an expansion.
     ///
     /// Start and End specify the expansion range (where the macro is
     /// expanded), and SpellingLoc specifies the spelling location (where
     /// the characters from the token come from). All three can refer to
     /// normal File SLocs or expansion locations.
     static ExpansionInfo create(SourceLocation SpellingLoc,
-                                SourceLocation Start, SourceLocation End) {
+                                SourceLocation Start, SourceLocation End,
+                                bool ExpansionIsTokenRange = true) {
       ExpansionInfo X;
       X.SpellingLoc = SpellingLoc.getRawEncoding();
       X.ExpansionLocStart = Start.getRawEncoding();
       X.ExpansionLocEnd = End.getRawEncoding();
+      X.ExpansionIsTokenRange = ExpansionIsTokenRange;
       return X;
     }
 
-    /// \brief Return a special ExpansionInfo for the expansion of
+    /// Return a special ExpansionInfo for the expansion of
     /// a macro argument into a function-like macro's body.
     ///
     /// ExpansionLoc specifies the expansion location (where the macro is
@@ -389,13 +401,24 @@
     static ExpansionInfo createForMacroArg(SourceLocation SpellingLoc,
                                            SourceLocation ExpansionLoc) {
       // We store an intentionally invalid source location for the end of the
-      // expansion range to mark that this is a macro argument ion rather than
-      // a normal one.
+      // expansion range to mark that this is a macro argument location rather
+      // than a normal one.
       return create(SpellingLoc, ExpansionLoc, SourceLocation());
     }
+
+    /// Return a special ExpansionInfo representing a token that ends
+    /// prematurely. This is used to model a '>>' token that has been split
+    /// into '>' tokens and similar cases. Unlike for the other forms of
+    /// expansion, the expansion range in this case is a character range, not
+    /// a token range.
+    static ExpansionInfo createForTokenSplit(SourceLocation SpellingLoc,
+                                             SourceLocation Start,
+                                             SourceLocation End) {
+      return create(SpellingLoc, Start, End, false);
+    }
   };
 
-  /// \brief This is a discriminated union of FileInfo and ExpansionInfo.
+  /// This is a discriminated union of FileInfo and ExpansionInfo.
   ///
   /// SourceManager keeps an array of these objects, and they are uniquely
   /// identified by the FileID datatype.
@@ -446,44 +469,44 @@
 
 } // namespace SrcMgr
 
-/// \brief External source of source location entries.
+/// External source of source location entries.
 class ExternalSLocEntrySource {
 public:
   virtual ~ExternalSLocEntrySource();
 
-  /// \brief Read the source location entry with index ID, which will always be
+  /// Read the source location entry with index ID, which will always be
   /// less than -1.
   ///
   /// \returns true if an error occurred that prevented the source-location
   /// entry from being loaded.
   virtual bool ReadSLocEntry(int ID) = 0;
 
-  /// \brief Retrieve the module import location and name for the given ID, if
+  /// Retrieve the module import location and name for the given ID, if
   /// in fact it was loaded from a module (rather than, say, a precompiled
   /// header).
   virtual std::pair<SourceLocation, StringRef> getModuleImportLoc(int ID) = 0;
 };
 
-/// \brief Holds the cache used by isBeforeInTranslationUnit.
+/// Holds the cache used by isBeforeInTranslationUnit.
 ///
 /// The cache structure is complex enough to be worth breaking out of
 /// SourceManager.
 class InBeforeInTUCacheEntry {
-  /// \brief The FileID's of the cached query.
+  /// The FileID's of the cached query.
   ///
   /// If these match up with a subsequent query, the result can be reused.
   FileID LQueryFID, RQueryFID;
 
-  /// \brief True if LQueryFID was created before RQueryFID.
+  /// True if LQueryFID was created before RQueryFID.
   ///
   /// This is used to compare macro expansion locations.
   bool IsLQFIDBeforeRQFID;
 
-  /// \brief The file found in common between the two \#include traces, i.e.,
+  /// The file found in common between the two \#include traces, i.e.,
   /// the nearest common ancestor of the \#include tree.
   FileID CommonFID;
 
-  /// \brief The offset of the previous query in CommonFID.
+  /// The offset of the previous query in CommonFID.
   ///
   /// Usually, this represents the location of the \#include for QueryFID, but
   /// if LQueryFID is a parent of RQueryFID (or vice versa) then these can be a
@@ -491,7 +514,7 @@
   unsigned LCommonOffset, RCommonOffset;
 
 public:
-  /// \brief Return true if the currently cached values match up with
+  /// Return true if the currently cached values match up with
   /// the specified LHS/RHS query.
   ///
   /// If not, we can't use the cache.
@@ -499,7 +522,7 @@
     return LQueryFID == LHS && RQueryFID == RHS;
   }
 
-  /// \brief If the cache is valid, compute the result given the
+  /// If the cache is valid, compute the result given the
   /// specified offsets in the LHS/RHS FileID's.
   bool getCachedResult(unsigned LOffset, unsigned ROffset) const {
     // If one of the query files is the common file, use the offset.  Otherwise,
@@ -518,7 +541,7 @@
     return LOffset < ROffset;
   }
 
-  /// \brief Set up a new query.
+  /// Set up a new query.
   void setQueryFIDs(FileID LHS, FileID RHS, bool isLFIDBeforeRFID) {
     assert(LHS != RHS);
     LQueryFID = LHS;
@@ -539,12 +562,12 @@
   }
 };
 
-/// \brief The stack used when building modules on demand, which is used
+/// The stack used when building modules on demand, which is used
 /// to provide a link between the source managers of the different compiler
 /// instances.
 using ModuleBuildStack = ArrayRef<std::pair<std::string, FullSourceLoc>>;
 
-/// \brief This class handles loading and caching of source files into memory.
+/// This class handles loading and caching of source files into memory.
 ///
 /// This object owns the MemoryBuffer objects for all of the loaded
 /// files and assigns unique FileID's for each unique \#include chain.
@@ -557,14 +580,14 @@
 /// where the expanded token came from and the expansion location specifies
 /// where it was expanded.
 class SourceManager : public RefCountedBase<SourceManager> {
-  /// \brief DiagnosticsEngine object.
+  /// DiagnosticsEngine object.
   DiagnosticsEngine &Diag;
 
   FileManager &FileMgr;
 
   mutable llvm::BumpPtrAllocator ContentCacheAlloc;
 
-  /// \brief Memoized information about all of the files tracked by this
+  /// Memoized information about all of the files tracked by this
   /// SourceManager.
   ///
   /// This map allows us to merge ContentCache entries based
@@ -572,29 +595,29 @@
   /// non-null, FileEntry pointers.
   llvm::DenseMap<const FileEntry*, SrcMgr::ContentCache*> FileInfos;
 
-  /// \brief True if the ContentCache for files that are overridden by other
+  /// True if the ContentCache for files that are overridden by other
   /// files, should report the original file name. Defaults to true.
   bool OverridenFilesKeepOriginalName = true;
 
-  /// \brief True if non-system source files should be treated as volatile
+  /// True if non-system source files should be treated as volatile
   /// (likely to change while trying to use them). Defaults to false.
   bool UserFilesAreVolatile;
 
-  /// \brief True if all files read during this compilation should be treated
+  /// True if all files read during this compilation should be treated
   /// as transient (may not be present in later compilations using a module
   /// file created from this compilation). Defaults to false.
   bool FilesAreTransient = false;
 
   struct OverriddenFilesInfoTy {
-    /// \brief Files that have been overridden with the contents from another
+    /// Files that have been overridden with the contents from another
     /// file.
     llvm::DenseMap<const FileEntry *, const FileEntry *> OverriddenFiles;
 
-    /// \brief Files that were overridden with a memory buffer.
+    /// Files that were overridden with a memory buffer.
     llvm::DenseSet<const FileEntry *> OverriddenFilesWithBuffer;
   };
 
-  /// \brief Lazily create the object keeping overridden files info, since
+  /// Lazily create the object keeping overridden files info, since
   /// it is uncommonly used.
   std::unique_ptr<OverriddenFilesInfoTy> OverriddenFilesInfo;
 
@@ -604,77 +627,77 @@
     return *OverriddenFilesInfo;
   }
 
-  /// \brief Information about various memory buffers that we have read in.
+  /// Information about various memory buffers that we have read in.
   ///
   /// All FileEntry* within the stored ContentCache objects are NULL,
   /// as they do not refer to a file.
   std::vector<SrcMgr::ContentCache*> MemBufferInfos;
 
-  /// \brief The table of SLocEntries that are local to this module.
+  /// The table of SLocEntries that are local to this module.
   ///
   /// Positive FileIDs are indexes into this table. Entry 0 indicates an invalid
   /// expansion.
   SmallVector<SrcMgr::SLocEntry, 0> LocalSLocEntryTable;
 
-  /// \brief The table of SLocEntries that are loaded from other modules.
+  /// The table of SLocEntries that are loaded from other modules.
   ///
   /// Negative FileIDs are indexes into this table. To get from ID to an index,
   /// use (-ID - 2).
   mutable SmallVector<SrcMgr::SLocEntry, 0> LoadedSLocEntryTable;
 
-  /// \brief The starting offset of the next local SLocEntry.
+  /// The starting offset of the next local SLocEntry.
   ///
   /// This is LocalSLocEntryTable.back().Offset + the size of that entry.
   unsigned NextLocalOffset;
 
-  /// \brief The starting offset of the latest batch of loaded SLocEntries.
+  /// The starting offset of the latest batch of loaded SLocEntries.
   ///
   /// This is LoadedSLocEntryTable.back().Offset, except that that entry might
   /// not have been loaded, so that value would be unknown.
   unsigned CurrentLoadedOffset;
 
-  /// \brief The highest possible offset is 2^31-1, so CurrentLoadedOffset
+  /// The highest possible offset is 2^31-1, so CurrentLoadedOffset
   /// starts at 2^31.
   static const unsigned MaxLoadedOffset = 1U << 31U;
 
-  /// \brief A bitmap that indicates whether the entries of LoadedSLocEntryTable
+  /// A bitmap that indicates whether the entries of LoadedSLocEntryTable
   /// have already been loaded from the external source.
   ///
   /// Same indexing as LoadedSLocEntryTable.
   llvm::BitVector SLocEntryLoaded;
 
-  /// \brief An external source for source location entries.
+  /// An external source for source location entries.
   ExternalSLocEntrySource *ExternalSLocEntries = nullptr;
 
-  /// \brief A one-entry cache to speed up getFileID.
+  /// A one-entry cache to speed up getFileID.
   ///
   /// LastFileIDLookup records the last FileID looked up or created, because it
   /// is very common to look up many tokens from the same file.
   mutable FileID LastFileIDLookup;
 
-  /// \brief Holds information for \#line directives.
+  /// Holds information for \#line directives.
   ///
   /// This is referenced by indices from SLocEntryTable.
   LineTableInfo *LineTable = nullptr;
 
-  /// \brief These ivars serve as a cache used in the getLineNumber
+  /// These ivars serve as a cache used in the getLineNumber
   /// method which is used to speedup getLineNumber calls to nearby locations.
   mutable FileID LastLineNoFileIDQuery;
   mutable SrcMgr::ContentCache *LastLineNoContentCache;
   mutable unsigned LastLineNoFilePos;
   mutable unsigned LastLineNoResult;
 
-  /// \brief The file ID for the main source file of the translation unit.
+  /// The file ID for the main source file of the translation unit.
   FileID MainFileID;
 
-  /// \brief The file ID for the precompiled preamble there is one.
+  /// The file ID for the precompiled preamble there is one.
   FileID PreambleFileID;
 
   // Statistics for -print-stats.
   mutable unsigned NumLinearScans = 0;
   mutable unsigned NumBinaryProbes = 0;
 
-  /// \brief Associates a FileID with its "included/expanded in" decomposed
+  /// Associates a FileID with its "included/expanded in" decomposed
   /// location.
   ///
   /// Used to cache results from and speed-up \c getDecomposedIncludedLoc
@@ -702,14 +725,14 @@
 
   mutable std::unique_ptr<SrcMgr::ContentCache> FakeContentCacheForRecovery;
 
-  /// \brief Lazily computed map of macro argument chunks to their expanded
+  /// Lazily computed map of macro argument chunks to their expanded
   /// source location.
   using MacroArgsMap = std::map<unsigned, SourceLocation>;
 
   mutable llvm::DenseMap<FileID, std::unique_ptr<MacroArgsMap>>
       MacroArgsCacheMap;
 
-  /// \brief The stack of modules being built, which is used to detect
+  /// The stack of modules being built, which is used to detect
   /// cycles in the module dependency graph as modules are being built, as
   /// well as to describe why we're rebuilding a particular module.
   ///
@@ -735,29 +758,29 @@
 
   FileManager &getFileManager() const { return FileMgr; }
 
-  /// \brief Set true if the SourceManager should report the original file name
+  /// Set true if the SourceManager should report the original file name
   /// for contents of files that were overridden by other files. Defaults to
   /// true.
   void setOverridenFilesKeepOriginalName(bool value) {
     OverridenFilesKeepOriginalName = value;
   }
 
-  /// \brief True if non-system source files should be treated as volatile
+  /// True if non-system source files should be treated as volatile
   /// (likely to change while trying to use them).
   bool userFilesAreVolatile() const { return UserFilesAreVolatile; }
 
-  /// \brief Retrieve the module build stack.
+  /// Retrieve the module build stack.
   ModuleBuildStack getModuleBuildStack() const {
     return StoredModuleBuildStack;
   }
 
-  /// \brief Set the module build stack.
+  /// Set the module build stack.
   void setModuleBuildStack(ModuleBuildStack stack) {
     StoredModuleBuildStack.clear();
     StoredModuleBuildStack.append(stack.begin(), stack.end());
   }
 
-  /// \brief Push an entry to the module build stack.
+  /// Push an entry to the module build stack.
   void pushModuleBuildStack(StringRef moduleName, FullSourceLoc importLoc) {
     StoredModuleBuildStack.push_back(std::make_pair(moduleName.str(),importLoc));
   }
@@ -766,28 +789,28 @@
   // MainFileID creation and querying methods.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Returns the FileID of the main source file.
+  /// Returns the FileID of the main source file.
   FileID getMainFileID() const { return MainFileID; }
 
-  /// \brief Set the file ID for the main source file.
+  /// Set the file ID for the main source file.
   void setMainFileID(FileID FID) {
     MainFileID = FID;
   }
 
-  /// \brief Set the file ID for the precompiled preamble.
+  /// Set the file ID for the precompiled preamble.
   void setPreambleFileID(FileID Preamble) {
     assert(PreambleFileID.isInvalid() && "PreambleFileID already set!");
     PreambleFileID = Preamble;
   }
 
-  /// \brief Get the file ID for the precompiled preamble if there is one.
+  /// Get the file ID for the precompiled preamble if there is one.
   FileID getPreambleFileID() const { return PreambleFileID; }
 
   //===--------------------------------------------------------------------===//
   // Methods to create new FileID's and macro expansions.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Create a new FileID that represents the specified file
+  /// Create a new FileID that represents the specified file
   /// being \#included from the specified IncludePosition.
   ///
   /// This translates NULL into standard input.
@@ -800,7 +823,7 @@
     return createFileID(IR, IncludePos, FileCharacter, LoadedID, LoadedOffset);
   }
 
-  /// \brief Create a new FileID that represents the specified memory buffer.
+  /// Create a new FileID that represents the specified memory buffer.
   ///
   /// This does no caching of the buffer and takes ownership of the
   /// MemoryBuffer, so only pass a MemoryBuffer to this once.
@@ -815,7 +838,7 @@
 
   enum UnownedTag { Unowned };
 
-  /// \brief Create a new FileID that represents the specified memory buffer.
+  /// Create a new FileID that represents the specified memory buffer.
   ///
   /// This does no caching of the buffer and takes ownership of the
   /// MemoryBuffer, so only pass a MemoryBuffer to this once.
@@ -827,7 +850,7 @@
                         IncludeLoc, FileCharacter, LoadedID, LoadedOffset);
   }
 
-  /// \brief Get the FileID for \p SourceFile if it exists. Otherwise, create a
+  /// Get the FileID for \p SourceFile if it exists. Otherwise, create a
   /// new FileID for the \p SourceFile.
   FileID getOrCreateFileID(const FileEntry *SourceFile,
                            SrcMgr::CharacteristicKind FileCharacter) {
@@ -836,7 +859,7 @@
                                             FileCharacter);
   }
 
-  /// \brief Return a new SourceLocation that encodes the
+  /// Return a new SourceLocation that encodes the
   /// fact that a token from SpellingLoc should actually be referenced from
   /// ExpansionLoc, and that it represents the expansion of a macro argument
   /// into the function-like macro body.
@@ -844,24 +867,31 @@
                                             SourceLocation ExpansionLoc,
                                             unsigned TokLength);
 
-  /// \brief Return a new SourceLocation that encodes the fact
+  /// Return a new SourceLocation that encodes the fact
   /// that a token from SpellingLoc should actually be referenced from
   /// ExpansionLoc.
   SourceLocation createExpansionLoc(SourceLocation Loc,
                                     SourceLocation ExpansionLocStart,
                                     SourceLocation ExpansionLocEnd,
                                     unsigned TokLength,
+                                    bool ExpansionIsTokenRange = true,
                                     int LoadedID = 0,
                                     unsigned LoadedOffset = 0);
 
-  /// \brief Retrieve the memory buffer associated with the given file.
+  /// Return a new SourceLocation that encodes that the token starting
+  /// at \p TokenStart ends prematurely at \p TokenEnd.
+  SourceLocation createTokenSplitLoc(SourceLocation SpellingLoc,
+                                     SourceLocation TokenStart,
+                                     SourceLocation TokenEnd);
+
+  /// Retrieve the memory buffer associated with the given file.
   ///
   /// \param Invalid If non-NULL, will be set \c true if an error
   /// occurs while retrieving the memory buffer.
   llvm::MemoryBuffer *getMemoryBufferForFile(const FileEntry *File,
                                              bool *Invalid = nullptr);
 
-  /// \brief Override the contents of the given source file by providing an
+  /// Override the contents of the given source file by providing an
   /// already-allocated buffer.
   ///
   /// \param SourceFile the source file whose contents will be overridden.
@@ -878,7 +908,7 @@
     overrideFileContents(SourceFile, Buffer.release(), /*DoNotFree*/ false);
   }
 
-  /// \brief Override the given source file with another one.
+  /// Override the given source file with another one.
   ///
   /// \param SourceFile the source file which will be overridden.
   ///
@@ -887,7 +917,7 @@
   void overrideFileContents(const FileEntry *SourceFile,
                             const FileEntry *NewFile);
 
-  /// \brief Returns true if the file contents have been overridden.
+  /// Returns true if the file contents have been overridden.
   bool isFileOverridden(const FileEntry *File) const {
     if (OverriddenFilesInfo) {
       if (OverriddenFilesInfo->OverriddenFilesWithBuffer.count(File))
@@ -899,16 +929,16 @@
     return false;
   }
 
-  /// \brief Disable overridding the contents of a file, previously enabled
+  /// Disable overridding the contents of a file, previously enabled
   /// with #overrideFileContents.
   ///
   /// This should be called before parsing has begun.
   void disableFileContentsOverride(const FileEntry *File);
 
-  /// \brief Specify that a file is transient.
+  /// Specify that a file is transient.
   void setFileIsTransient(const FileEntry *SourceFile);
 
-  /// \brief Specify that all files that are read during this compilation are
+  /// Specify that all files that are read during this compilation are
   /// transient.
   void setAllFilesAreTransient(bool Transient) {
     FilesAreTransient = Transient;
@@ -918,7 +948,7 @@
   // FileID manipulation methods.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the buffer for the specified FileID.
+  /// Return the buffer for the specified FileID.
   ///
   /// If there is an error opening this buffer the first time, this
   /// manufactures a temporary buffer and returns a non-empty error string.
@@ -952,7 +982,7 @@
                                                         Invalid);
   }
 
-  /// \brief Returns the FileEntry record for the provided FileID.
+  /// Returns the FileEntry record for the provided FileID.
   const FileEntry *getFileEntryForID(FileID FID) const {
     bool MyInvalid = false;
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &MyInvalid);
@@ -965,7 +995,7 @@
     return Content->OrigEntry;
   }
 
-  /// \brief Returns the FileEntry record for the provided SLocEntry.
+  /// Returns the FileEntry record for the provided SLocEntry.
   const FileEntry *getFileEntryForSLocEntry(const SrcMgr::SLocEntry &sloc) const
   {
     const SrcMgr::ContentCache *Content = sloc.getFile().getContentCache();
@@ -974,14 +1004,14 @@
     return Content->OrigEntry;
   }
 
-  /// \brief Return a StringRef to the source buffer data for the
+  /// Return a StringRef to the source buffer data for the
   /// specified FileID.
   ///
   /// \param FID The file ID whose contents will be returned.
   /// \param Invalid If non-NULL, will be set true if an error occurred.
   StringRef getBufferData(FileID FID, bool *Invalid = nullptr) const;
 
-  /// \brief Get the number of FileIDs (files and macros) that were created
+  /// Get the number of FileIDs (files and macros) that were created
   /// during preprocessing of \p FID, including it.
   unsigned getNumCreatedFIDsForFileID(FileID FID) const {
     bool Invalid = false;
@@ -992,7 +1022,7 @@
     return Entry.getFile().NumCreatedFIDs;
   }
 
-  /// \brief Set the number of FileIDs (files and macros) that were created
+  /// Set the number of FileIDs (files and macros) that were created
   /// during preprocessing of \p FID, including it.
   void setNumCreatedFIDsForFileID(FileID FID, unsigned NumFIDs) const {
     bool Invalid = false;
@@ -1008,7 +1038,7 @@
   // SourceLocation manipulation methods.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the FileID for a SourceLocation.
+  /// Return the FileID for a SourceLocation.
   ///
   /// This is a very hot method that is used for all SourceManager queries
   /// that start with a SourceLocation object.  It is responsible for finding
@@ -1024,14 +1054,14 @@
     return getFileIDSlow(SLocOffset);
   }
 
-  /// \brief Return the filename of the file containing a SourceLocation.
+  /// Return the filename of the file containing a SourceLocation.
   StringRef getFilename(SourceLocation SpellingLoc) const {
     if (const FileEntry *F = getFileEntryForID(getFileID(SpellingLoc)))
       return F->getName();
     return StringRef();
   }
 
-  /// \brief Return the source location corresponding to the first byte of
+  /// Return the source location corresponding to the first byte of
   /// the specified file.
   SourceLocation getLocForStartOfFile(FileID FID) const {
     bool Invalid = false;
@@ -1042,20 +1072,20 @@
     unsigned FileOffset = Entry.getOffset();
     return SourceLocation::getFileLoc(FileOffset);
   }
-  
-  /// \brief Return the source location corresponding to the last byte of the
+
+  /// Return the source location corresponding to the last byte of the
   /// specified file.
   SourceLocation getLocForEndOfFile(FileID FID) const {
     bool Invalid = false;
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
     if (Invalid || !Entry.isFile())
       return SourceLocation();
-    
+
     unsigned FileOffset = Entry.getOffset();
     return SourceLocation::getFileLoc(FileOffset + getFileIDSize(FID));
   }
 
-  /// \brief Returns the include location if \p FID is a \#include'd file
+  /// Returns the include location if \p FID is a \#include'd file
   /// otherwise it returns an invalid location.
   SourceLocation getIncludeLoc(FileID FID) const {
     bool Invalid = false;
@@ -1066,7 +1096,7 @@
     return Entry.getFile().getIncludeLoc();
   }
 
-  // \brief Returns the import location if the given source location is
+  // Returns the import location if the given source location is
   // located within a module, or an invalid location if the source location
   // is within the current translation unit.
   std::pair<SourceLocation, StringRef>
@@ -1081,7 +1111,7 @@
     return ExternalSLocEntries->getModuleImportLoc(FID.ID);
   }
 
-  /// \brief Given a SourceLocation object \p Loc, return the expansion
+  /// Given a SourceLocation object \p Loc, return the expansion
   /// location referenced by the ID.
   SourceLocation getExpansionLoc(SourceLocation Loc) const {
     // Handle the non-mapped case inline, defer to out of line code to handle
@@ -1090,7 +1120,7 @@
     return getExpansionLocSlowCase(Loc);
   }
 
-  /// \brief Given \p Loc, if it is a macro location return the expansion
+  /// Given \p Loc, if it is a macro location return the expansion
   /// location or the spelling location, depending on if it comes from a
   /// macro argument or not.
   SourceLocation getFileLoc(SourceLocation Loc) const {
@@ -1098,26 +1128,35 @@
     return getFileLocSlowCase(Loc);
   }
 
-  /// \brief Return the start/end of the expansion information for an
+  /// Return the start/end of the expansion information for an
   /// expansion location.
   ///
   /// \pre \p Loc is required to be an expansion location.
-  std::pair<SourceLocation,SourceLocation>
-  getImmediateExpansionRange(SourceLocation Loc) const;
+  CharSourceRange getImmediateExpansionRange(SourceLocation Loc) const;
 
-  /// \brief Given a SourceLocation object, return the range of
+  /// Given a SourceLocation object, return the range of
   /// tokens covered by the expansion in the ultimate file.
-  std::pair<SourceLocation,SourceLocation>
-  getExpansionRange(SourceLocation Loc) const;
+  CharSourceRange getExpansionRange(SourceLocation Loc) const;
 
-  /// \brief Given a SourceRange object, return the range of
-  /// tokens covered by the expansion in the ultimate file.
-  SourceRange getExpansionRange(SourceRange Range) const {
-    return SourceRange(getExpansionRange(Range.getBegin()).first,
-                       getExpansionRange(Range.getEnd()).second);
+  /// Given a SourceRange object, return the range of
+  /// tokens or characters covered by the expansion in the ultimate file.
+  CharSourceRange getExpansionRange(SourceRange Range) const {
+    SourceLocation Begin = getExpansionRange(Range.getBegin()).getBegin();
+    CharSourceRange End = getExpansionRange(Range.getEnd());
+    return CharSourceRange(SourceRange(Begin, End.getEnd()),
+                           End.isTokenRange());
   }
 
-  /// \brief Given a SourceLocation object, return the spelling
+  /// Given a CharSourceRange object, return the range of
+  /// tokens or characters covered by the expansion in the ultimate file.
+  CharSourceRange getExpansionRange(CharSourceRange Range) const {
+    CharSourceRange Expansion = getExpansionRange(Range.getAsRange());
+    if (Expansion.getEnd() == Range.getEnd())
+      Expansion.setTokenRange(Range.isTokenRange());
+    return Expansion;
+  }
+
+  /// Given a SourceLocation object, return the spelling
   /// location referenced by the ID.
   ///
   /// This is the place where the characters that make up the lexed token
@@ -1129,7 +1168,7 @@
     return getSpellingLocSlowCase(Loc);
   }
 
-  /// \brief Given a SourceLocation object, return the spelling location
+  /// Given a SourceLocation object, return the spelling location
   /// referenced by the ID.
   ///
   /// This is the first level down towards the place where the characters
@@ -1137,7 +1176,7 @@
   /// be used by clients.
   SourceLocation getImmediateSpellingLoc(SourceLocation Loc) const;
 
-  /// \brief Form a SourceLocation from a FileID and Offset pair.
+  /// Form a SourceLocation from a FileID and Offset pair.
   SourceLocation getComposedLoc(FileID FID, unsigned Offset) const {
     bool Invalid = false;
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID, &Invalid);
@@ -1149,7 +1188,7 @@
                           : SourceLocation::getMacroLoc(GlobalOffset);
   }
 
-  /// \brief Decompose the specified location into a raw FileID + Offset pair.
+  /// Decompose the specified location into a raw FileID + Offset pair.
   ///
   /// The first element is the FileID, the second is the offset from the
   /// start of the buffer of the location.
@@ -1162,7 +1201,7 @@
     return std::make_pair(FID, Loc.getOffset()-E.getOffset());
   }
 
-  /// \brief Decompose the specified location into a raw FileID + Offset pair.
+  /// Decompose the specified location into a raw FileID + Offset pair.
   ///
   /// If the location is an expansion record, walk through it until we find
   /// the final location expanded.
@@ -1181,7 +1220,7 @@
     return getDecomposedExpansionLocSlowCase(E);
   }
 
-  /// \brief Decompose the specified location into a raw FileID + Offset pair.
+  /// Decompose the specified location into a raw FileID + Offset pair.
   ///
   /// If the location is an expansion record, walk through it until we find
   /// its spelling record.
@@ -1199,11 +1238,11 @@
     return getDecomposedSpellingLocSlowCase(E, Offset);
   }
 
-  /// \brief Returns the "included/expanded in" decomposed location of the given
+  /// Returns the "included/expanded in" decomposed location of the given
   /// FileID.
   std::pair<FileID, unsigned> getDecomposedIncludedLoc(FileID FID) const;
 
-  /// \brief Returns the offset from the start of the file that the
+  /// Returns the offset from the start of the file that the
   /// specified SourceLocation represents.
   ///
   /// This is not very meaningful for a macro ID.
@@ -1211,7 +1250,7 @@
     return getDecomposedLoc(SpellingLoc).second;
   }
 
-  /// \brief Tests whether the given source location represents a macro
+  /// Tests whether the given source location represents a macro
   /// argument's expansion into the function-like macro definition.
   ///
   /// \param StartLoc If non-null and function returns true, it is set to the
@@ -1223,14 +1262,14 @@
   bool isMacroArgExpansion(SourceLocation Loc,
                            SourceLocation *StartLoc = nullptr) const;
 
-  /// \brief Tests whether the given source location represents the expansion of
+  /// Tests whether the given source location represents the expansion of
   /// a macro body.
   ///
   /// This is equivalent to testing whether the location is part of a macro
   /// expansion but not the expansion of an argument to a function-like macro.
   bool isMacroBodyExpansion(SourceLocation Loc) const;
 
-  /// \brief Returns true if the given MacroID location points at the beginning
+  /// Returns true if the given MacroID location points at the beginning
   /// of the immediate macro expansion.
   ///
   /// \param MacroBegin If non-null and function returns true, it is set to the
@@ -1238,7 +1277,7 @@
   bool isAtStartOfImmediateMacroExpansion(SourceLocation Loc,
                                     SourceLocation *MacroBegin = nullptr) const;
 
-  /// \brief Returns true if the given MacroID location points at the character
+  /// Returns true if the given MacroID location points at the character
   /// end of the immediate macro expansion.
   ///
   /// \param MacroEnd If non-null and function returns true, it is set to the
@@ -1247,7 +1286,7 @@
   isAtEndOfImmediateMacroExpansion(SourceLocation Loc,
                                    SourceLocation *MacroEnd = nullptr) const;
 
-  /// \brief Returns true if \p Loc is inside the [\p Start, +\p Length)
+  /// Returns true if \p Loc is inside the [\p Start, +\p Length)
   /// chunk of the source location address space.
   ///
   /// If it's true and \p RelativeOffset is non-null, it will be set to the
@@ -1272,7 +1311,7 @@
     return false;
   }
 
-  /// \brief Return true if both \p LHS and \p RHS are in the local source
+  /// Return true if both \p LHS and \p RHS are in the local source
   /// location address space or the loaded one.
   ///
   /// If it's true and \p RelativeOffset is non-null, it will be set to the
@@ -1296,14 +1335,14 @@
   // Queries about the code at a SourceLocation.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return a pointer to the start of the specified location
+  /// Return a pointer to the start of the specified location
   /// in the appropriate spelling MemoryBuffer.
   ///
   /// \param Invalid If non-NULL, will be set \c true if an error occurs.
   const char *getCharacterData(SourceLocation SL,
                                bool *Invalid = nullptr) const;
 
-  /// \brief Return the column # for the specified file position.
+  /// Return the column # for the specified file position.
   ///
   /// This is significantly cheaper to compute than the line number.  This
   /// returns zero if the column number isn't known.  This may only be called
@@ -1318,7 +1357,7 @@
   unsigned getPresumedColumnNumber(SourceLocation Loc,
                                    bool *Invalid = nullptr) const;
 
-  /// \brief Given a SourceLocation, return the spelling line number
+  /// Given a SourceLocation, return the spelling line number
   /// for the position indicated.
   ///
   /// This requires building and caching a table of line offsets for the
@@ -1329,14 +1368,14 @@
   unsigned getExpansionLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
   unsigned getPresumedLineNumber(SourceLocation Loc, bool *Invalid = nullptr) const;
 
-  /// \brief Return the filename or buffer identifier of the buffer the
+  /// Return the filename or buffer identifier of the buffer the
   /// location is in.
   ///
   /// Note that this name does not respect \#line directives.  Use
   /// getPresumedLoc for normal clients.
   StringRef getBufferName(SourceLocation Loc, bool *Invalid = nullptr) const;
 
-  /// \brief Return the file characteristic of the specified source
+  /// Return the file characteristic of the specified source
   /// location, indicating whether this is a normal file, a system
   /// header, or an "implicit extern C" system header.
   ///
@@ -1348,7 +1387,7 @@
   /// considered to be from a system header.
   SrcMgr::CharacteristicKind getFileCharacteristic(SourceLocation Loc) const;
 
-  /// \brief Returns the "presumed" location of a SourceLocation specifies.
+  /// Returns the "presumed" location of a SourceLocation specifies.
   ///
   /// A "presumed location" can be modified by \#line or GNU line marker
   /// directives.  This provides a view on the data that a user should see
@@ -1364,7 +1403,7 @@
   PresumedLoc getPresumedLoc(SourceLocation Loc,
                              bool UseLineDirectives = true) const;
 
-  /// \brief Returns whether the PresumedLoc for a given SourceLocation is 
+  /// Returns whether the PresumedLoc for a given SourceLocation is
   /// in the main file.
   ///
   /// This computes the "presumed" location for a SourceLocation, then checks
@@ -1373,7 +1412,7 @@
   /// account.
   bool isInMainFile(SourceLocation Loc) const;
 
-  /// \brief Returns true if the spelling locations for both SourceLocations
+  /// Returns true if the spelling locations for both SourceLocations
   /// are part of the same file buffer.
   ///
   /// This check ignores line marker directives.
@@ -1381,7 +1420,7 @@
     return getFileID(Loc1) == getFileID(Loc2);
   }
 
-  /// \brief Returns true if the spelling location for the given location
+  /// Returns true if the spelling location for the given location
   /// is in the main file buffer.
   ///
   /// This check ignores line marker directives.
@@ -1389,25 +1428,25 @@
     return getFileID(Loc) == getMainFileID();
   }
 
-  /// \brief Returns if a SourceLocation is in a system header.
+  /// Returns if a SourceLocation is in a system header.
   bool isInSystemHeader(SourceLocation Loc) const {
     return isSystem(getFileCharacteristic(Loc));
   }
 
-  /// \brief Returns if a SourceLocation is in an "extern C" system header.
+  /// Returns if a SourceLocation is in an "extern C" system header.
   bool isInExternCSystemHeader(SourceLocation Loc) const {
     return getFileCharacteristic(Loc) == SrcMgr::C_ExternCSystem;
   }
 
-  /// \brief Returns whether \p Loc is expanded from a macro in a system header.
+  /// Returns whether \p Loc is expanded from a macro in a system header.
   bool isInSystemMacro(SourceLocation loc) const {
     return loc.isMacroID() && isInSystemHeader(getSpellingLoc(loc));
   }
 
-  /// \brief The size of the SLocEntry that \p FID represents.
+  /// The size of the SLocEntry that \p FID represents.
   unsigned getFileIDSize(FileID FID) const;
 
-  /// \brief Given a specific FileID, returns true if \p Loc is inside that
+  /// Given a specific FileID, returns true if \p Loc is inside that
   /// FileID chunk and sets relative offset (offset of \p Loc from beginning
   /// of FileID) to \p relativeOffset.
   bool isInFileID(SourceLocation Loc, FileID FID,
@@ -1426,10 +1465,10 @@
   // Line Table Manipulation Routines
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the uniqued ID for the specified filename.
+  /// Return the uniqued ID for the specified filename.
   unsigned getLineTableFilenameID(StringRef Str);
 
-  /// \brief Add a line note to the line table for the FileID and offset
+  /// Add a line note to the line table for the FileID and offset
   /// specified by Loc.
   ///
   /// If FilenameID is -1, it is considered to be unspecified.
@@ -1437,17 +1476,17 @@
                    bool IsFileEntry, bool IsFileExit,
                    SrcMgr::CharacteristicKind FileKind);
 
-  /// \brief Determine if the source manager has a line table.
+  /// Determine if the source manager has a line table.
   bool hasLineTable() const { return LineTable != nullptr; }
 
-  /// \brief Retrieve the stored line table.
+  /// Retrieve the stored line table.
   LineTableInfo &getLineTable();
 
   //===--------------------------------------------------------------------===//
   // Queries for performance analysis.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return the total amount of physical memory allocated by the
+  /// Return the total amount of physical memory allocated by the
   /// ContentCache allocator.
   size_t getContentCacheSize() const {
     return ContentCacheAlloc.getTotalMemory();
@@ -1461,11 +1500,11 @@
       : malloc_bytes(malloc_bytes), mmap_bytes(mmap_bytes) {}
   };
 
-  /// \brief Return the amount of memory used by memory buffers, breaking down
+  /// Return the amount of memory used by memory buffers, breaking down
   /// by heap-backed versus mmap'ed memory.
   MemoryBufferSizes getMemoryBufferSizes() const;
 
-  /// \brief Return the amount of memory used for various side tables and
+  /// Return the amount of memory used for various side tables and
   /// data structures in the SourceManager.
   size_t getDataStructureSizes() const;
 
@@ -1473,25 +1512,25 @@
   // Other miscellaneous methods.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Get the source location for the given file:line:col triplet.
+  /// Get the source location for the given file:line:col triplet.
   ///
   /// If the source file is included multiple times, the source location will
   /// be based upon the first inclusion.
   SourceLocation translateFileLineCol(const FileEntry *SourceFile,
                                       unsigned Line, unsigned Col) const;
 
-  /// \brief Get the FileID for the given file.
+  /// Get the FileID for the given file.
   ///
   /// If the source file is included multiple times, the FileID will be the
   /// first inclusion.
   FileID translateFile(const FileEntry *SourceFile) const;
 
-  /// \brief Get the source location in \p FID for the given line:col.
+  /// Get the source location in \p FID for the given line:col.
   /// Returns null location if \p FID is not a file SLocEntry.
   SourceLocation translateLineCol(FileID FID,
                                   unsigned Line, unsigned Col) const;
 
-  /// \brief If \p Loc points inside a function macro argument, the returned
+  /// If \p Loc points inside a function macro argument, the returned
   /// location will be the macro location in which the argument was expanded.
   /// If a macro argument is used multiple times, the expanded location will
   /// be at the first expansion of the argument.
@@ -1502,12 +1541,12 @@
   /// where 'foo' was expanded into.
   SourceLocation getMacroArgExpandedLocation(SourceLocation Loc) const;
 
-  /// \brief Determines the order of 2 source locations in the translation unit.
+  /// Determines the order of 2 source locations in the translation unit.
   ///
   /// \returns true if LHS source location comes before RHS, false otherwise.
   bool isBeforeInTranslationUnit(SourceLocation LHS, SourceLocation RHS) const;
 
-  /// \brief Determines whether the two decomposed source location is in the
+  /// Determines whether the two decomposed source location is in the
   ///        same translation unit. As a byproduct, it also calculates the order
   ///        of the source locations in case they are in the same TU.
   ///
@@ -1518,13 +1557,13 @@
   isInTheSameTranslationUnit(std::pair<FileID, unsigned> &LOffs,
                              std::pair<FileID, unsigned> &ROffs) const;
 
-  /// \brief Determines the order of 2 source locations in the "source location
+  /// Determines the order of 2 source locations in the "source location
   /// address space".
   bool isBeforeInSLocAddrSpace(SourceLocation LHS, SourceLocation RHS) const {
     return isBeforeInSLocAddrSpace(LHS, RHS.getOffset());
   }
 
-  /// \brief Determines the order of a source location and a source location
+  /// Determines the order of a source location and a source location
   /// offset in the "source location address space".
   ///
   /// Note that we always consider source locations loaded from
@@ -1556,25 +1595,25 @@
     return FileInfos.find(File) != FileInfos.end();
   }
 
-  /// \brief Print statistics to stderr.
+  /// Print statistics to stderr.
   void PrintStats() const;
 
   void dump() const;
 
-  /// \brief Get the number of local SLocEntries we have.
+  /// Get the number of local SLocEntries we have.
   unsigned local_sloc_entry_size() const { return LocalSLocEntryTable.size(); }
 
-  /// \brief Get a local SLocEntry. This is exposed for indexing.
+  /// Get a local SLocEntry. This is exposed for indexing.
   const SrcMgr::SLocEntry &getLocalSLocEntry(unsigned Index,
                                              bool *Invalid = nullptr) const {
     assert(Index < LocalSLocEntryTable.size() && "Invalid index");
     return LocalSLocEntryTable[Index];
   }
 
-  /// \brief Get the number of loaded SLocEntries we have.
+  /// Get the number of loaded SLocEntries we have.
   unsigned loaded_sloc_entry_size() const { return LoadedSLocEntryTable.size();}
 
-  /// \brief Get a loaded SLocEntry. This is exposed for indexing.
+  /// Get a loaded SLocEntry. This is exposed for indexing.
   const SrcMgr::SLocEntry &getLoadedSLocEntry(unsigned Index,
                                               bool *Invalid = nullptr) const {
     assert(Index < LoadedSLocEntryTable.size() && "Invalid index");
@@ -1600,7 +1639,7 @@
     ExternalSLocEntries = Source;
   }
 
-  /// \brief Allocate a number of loaded SLocEntries, which will be actually
+  /// Allocate a number of loaded SLocEntries, which will be actually
   /// loaded on demand from the external source.
   ///
   /// NumSLocEntries will be allocated, which occupy a total of TotalSize space
@@ -1609,23 +1648,23 @@
   std::pair<int, unsigned>
   AllocateLoadedSLocEntries(unsigned NumSLocEntries, unsigned TotalSize);
 
-  /// \brief Returns true if \p Loc came from a PCH/Module.
+  /// Returns true if \p Loc came from a PCH/Module.
   bool isLoadedSourceLocation(SourceLocation Loc) const {
     return Loc.getOffset() >= CurrentLoadedOffset;
   }
 
-  /// \brief Returns true if \p Loc did not come from a PCH/Module.
+  /// Returns true if \p Loc did not come from a PCH/Module.
   bool isLocalSourceLocation(SourceLocation Loc) const {
     return Loc.getOffset() < NextLocalOffset;
   }
 
-  /// \brief Returns true if \p FID came from a PCH/Module.
+  /// Returns true if \p FID came from a PCH/Module.
   bool isLoadedFileID(FileID FID) const {
     assert(FID.ID != -1 && "Using FileID sentinel value");
     return FID.ID < 0;
   }
 
-  /// \brief Returns true if \p FID did not come from a PCH/Module.
+  /// Returns true if \p FID did not come from a PCH/Module.
   bool isLocalFileID(FileID FID) const {
     return !isLoadedFileID(FID);
   }
@@ -1643,7 +1682,7 @@
 
     // Otherwise, the caller of the macro is located where this macro is
     // expanded (while the spelling is part of the macro definition).
-    return getImmediateExpansionRange(Loc).first;
+    return getImmediateExpansionRange(Loc).getBegin();
   }
 
   /// \return Location of the top-level macro caller.
@@ -1658,7 +1697,7 @@
 
   const SrcMgr::SLocEntry &loadSLocEntry(unsigned Index, bool *Invalid) const;
 
-  /// \brief Get the entry with the given unwrapped FileID.
+  /// Get the entry with the given unwrapped FileID.
   const SrcMgr::SLocEntry &getSLocEntryByID(int ID,
                                             bool *Invalid = nullptr) const {
     assert(ID != -1 && "Using FileID sentinel value");
@@ -1679,7 +1718,7 @@
                                         int LoadedID = 0,
                                         unsigned LoadedOffset = 0);
 
-  /// \brief Return true if the specified FileID contains the
+  /// Return true if the specified FileID contains the
   /// specified SourceLocation offset.  This is a very hot method.
   inline bool isOffsetInFileID(FileID FID, unsigned SLocOffset) const {
     const SrcMgr::SLocEntry &Entry = getSLocEntry(FID);
@@ -1699,15 +1738,15 @@
     return SLocOffset < getSLocEntryByID(FID.ID+1).getOffset();
   }
 
-  /// \brief Returns the previous in-order FileID or an invalid FileID if there
+  /// Returns the previous in-order FileID or an invalid FileID if there
   /// is no previous one.
   FileID getPreviousFileID(FileID FID) const;
 
-  /// \brief Returns the next in-order FileID or an invalid FileID if there is
+  /// Returns the next in-order FileID or an invalid FileID if there is
   /// no next one.
   FileID getNextFileID(FileID FID) const;
 
-  /// \brief Create a new fileID for the specified ContentCache and
+  /// Create a new fileID for the specified ContentCache and
   /// include position.
   ///
   /// This works regardless of whether the ContentCache corresponds to a
@@ -1721,7 +1760,7 @@
     getOrCreateContentCache(const FileEntry *SourceFile,
                             bool isSystemFile = false);
 
-  /// \brief Create a new ContentCache for the specified  memory buffer.
+  /// Create a new ContentCache for the specified  memory buffer.
   const SrcMgr::ContentCache *
   createMemBufferContentCache(llvm::MemoryBuffer *Buf, bool DoNotFree);
 
@@ -1746,11 +1785,11 @@
                                          unsigned ExpansionLength) const;
 };
 
-/// \brief Comparison function object.
+/// Comparison function object.
 template<typename T>
 class BeforeThanCompare;
 
-/// \brief Compare two source locations.
+/// Compare two source locations.
 template<>
 class BeforeThanCompare<SourceLocation> {
   SourceManager &SM;
@@ -1763,7 +1802,7 @@
   }
 };
 
-/// \brief Compare two non-overlapping source ranges.
+/// Compare two non-overlapping source ranges.
 template<>
 class BeforeThanCompare<SourceRange> {
   SourceManager &SM;
@@ -1776,6 +1815,28 @@
   }
 };
 
+/// SourceManager and necessary depdencies (e.g. VFS, FileManager) for a single
+/// in-memorty file.
+class SourceManagerForFile {
+public:
+  /// Creates SourceManager and necessary depdencies (e.g. VFS, FileManager).
+  /// The main file in the SourceManager will be \p FileName with \p Content.
+  SourceManagerForFile(StringRef FileName, StringRef Content);
+
+  SourceManager &get() {
+    assert(SourceMgr);
+    return *SourceMgr;
+  }
+
+private:
+  // The order of these fields are important - they should be in the same order
+  // as they are created in `createSourceManagerForFile` so that they can be
+  // deleted in the reverse order as they are created.
+  std::unique_ptr<FileManager> FileMgr;
+  std::unique_ptr<DiagnosticsEngine> Diagnostics;
+  std::unique_ptr<SourceManager> SourceMgr;
+};
+
 } // namespace clang
 
 #endif // LLVM_CLANG_BASIC_SOURCEMANAGER_H
diff --git a/linux-x64/clang/include/clang/Basic/SourceManagerInternals.h b/linux-x64/clang/include/clang/Basic/SourceManagerInternals.h
index edd910e..ddc58ff 100644
--- a/linux-x64/clang/include/clang/Basic/SourceManagerInternals.h
+++ b/linux-x64/clang/include/clang/Basic/SourceManagerInternals.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines implementation details of the clang::SourceManager class.
+/// Defines implementation details of the clang::SourceManager class.
 //
 //===----------------------------------------------------------------------===//
 
@@ -31,20 +31,20 @@
 //===----------------------------------------------------------------------===//
 
 struct LineEntry {
-  /// \brief The offset in this file that the line entry occurs at.
+  /// The offset in this file that the line entry occurs at.
   unsigned FileOffset;
 
-  /// \brief The presumed line number of this line entry: \#line 4.
+  /// The presumed line number of this line entry: \#line 4.
   unsigned LineNo;
 
-  /// \brief The ID of the filename identified by this line entry:
+  /// The ID of the filename identified by this line entry:
   /// \#line 4 "foo.c".  This is -1 if not specified.
   int FilenameID;
 
-  /// \brief Set the 0 if no flags, 1 if a system header,
+  /// Set the 0 if no flags, 1 if a system header,
   SrcMgr::CharacteristicKind FileKind;
 
-  /// \brief The offset of the virtual include stack location,
+  /// The offset of the virtual include stack location,
   /// which is manipulated by GNU linemarker directives.
   ///
   /// If this is 0 then there is no virtual \#includer.
@@ -77,9 +77,9 @@
   return Offset < E.FileOffset;
 }
 
-/// \brief Used to hold and unique data used to represent \#line information.
+/// Used to hold and unique data used to represent \#line information.
 class LineTableInfo {
-  /// \brief Map used to assign unique IDs to filenames in \#line directives. 
+  /// Map used to assign unique IDs to filenames in \#line directives.
   ///
   /// This allows us to unique the filenames that
   /// frequently reoccur and reference them with indices.  FilenameIDs holds
@@ -88,7 +88,7 @@
   llvm::StringMap<unsigned, llvm::BumpPtrAllocator> FilenameIDs;
   std::vector<llvm::StringMapEntry<unsigned>*> FilenamesByID;
 
-  /// \brief Map from FileIDs to a list of line entries (sorted by the offset
+  /// Map from FileIDs to a list of line entries (sorted by the offset
   /// at which they occur in the file).
   std::map<FileID, std::vector<LineEntry>> LineEntries;
 
@@ -113,7 +113,7 @@
                    unsigned EntryExit, SrcMgr::CharacteristicKind FileKind);
 
 
-  /// \brief Find the line entry nearest to FID that is before it.
+  /// Find the line entry nearest to FID that is before it.
   ///
   /// If there is no line entry before \p Offset in \p FID, returns null.
   const LineEntry *FindNearestLineEntry(FileID FID, unsigned Offset);
@@ -124,7 +124,7 @@
   iterator begin() { return LineEntries.begin(); }
   iterator end() { return LineEntries.end(); }
 
-  /// \brief Add a new line entry that has already been encoded into
+  /// Add a new line entry that has already been encoded into
   /// the internal representation of the line table.
   void AddEntry(FileID FID, const std::vector<LineEntry> &Entries);
 };
diff --git a/linux-x64/clang/include/clang/Basic/Specifiers.h b/linux-x64/clang/include/clang/Basic/Specifiers.h
index 377534b..cd8213f 100644
--- a/linux-x64/clang/include/clang/Basic/Specifiers.h
+++ b/linux-x64/clang/include/clang/Basic/Specifiers.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines various enumerations that describe declaration and
+/// Defines various enumerations that describe declaration and
 /// type specifiers.
 ///
 //===----------------------------------------------------------------------===//
@@ -21,38 +21,41 @@
 #include "llvm/Support/ErrorHandling.h"
 
 namespace clang {
-  /// \brief Specifies the width of a type, e.g., short, long, or long long.
+  /// Specifies the width of a type, e.g., short, long, or long long.
   enum TypeSpecifierWidth {
     TSW_unspecified,
     TSW_short,
     TSW_long,
     TSW_longlong
   };
-  
-  /// \brief Specifies the signedness of a type, e.g., signed or unsigned.
+
+  /// Specifies the signedness of a type, e.g., signed or unsigned.
   enum TypeSpecifierSign {
     TSS_unspecified,
     TSS_signed,
     TSS_unsigned
   };
-  
+
   enum TypeSpecifiersPipe {
     TSP_unspecified,
     TSP_pipe
   };
 
-  /// \brief Specifies the kind of type.
+  /// Specifies the kind of type.
   enum TypeSpecifierType {
     TST_unspecified,
     TST_void,
     TST_char,
     TST_wchar,        // C++ wchar_t
+    TST_char8,        // C++20 char8_t (proposed)
     TST_char16,       // C++11 char16_t
     TST_char32,       // C++11 char32_t
     TST_int,
     TST_int128,
     TST_half,         // OpenCL half, ARM NEON __fp16
     TST_Float16,      // C11 extension ISO/IEC TS 18661-3
+    TST_Accum,        // ISO/IEC JTC1 SC22 WG14 N1169 Extension
+    TST_Fract,
     TST_float,
     TST_double,
     TST_float128,
@@ -80,7 +83,7 @@
     TST_error // erroneous type
   };
 
-  /// \brief Structure that packs information about the type specifiers that
+  /// Structure that packs information about the type specifiers that
   /// were written in a particular type specifier sequence.
   struct WrittenBuiltinSpecs {
     static_assert(TST_error < 1 << 6, "Type bitfield not wide enough for TST");
@@ -90,7 +93,7 @@
     unsigned ModeAttr : 1;
   };
 
-  /// \brief A C++ access specifier (public, private, protected), plus the
+  /// A C++ access specifier (public, private, protected), plus the
   /// special value "none" which means different things in different contexts.
   enum AccessSpecifier {
     AS_public,
@@ -99,24 +102,24 @@
     AS_none
   };
 
-  /// \brief The categorization of expression values, currently following the
+  /// The categorization of expression values, currently following the
   /// C++11 scheme.
   enum ExprValueKind {
-    /// \brief An r-value expression (a pr-value in the C++11 taxonomy)
+    /// An r-value expression (a pr-value in the C++11 taxonomy)
     /// produces a temporary value.
     VK_RValue,
 
-    /// \brief An l-value expression is a reference to an object with
+    /// An l-value expression is a reference to an object with
     /// independent storage.
     VK_LValue,
 
-    /// \brief An x-value expression is a reference to an object with
+    /// An x-value expression is a reference to an object with
     /// independent storage but which can be "moved", i.e.
     /// efficiently cannibalized for its resources.
     VK_XValue
   };
 
-  /// \brief A further classification of the kind of object referenced by an
+  /// A further classification of the kind of object referenced by an
   /// l-value or x-value.
   enum ExprObjectKind {
     /// An ordinary object is located at an address in memory.
@@ -131,14 +134,14 @@
     /// An Objective-C property is a logical field of an Objective-C
     /// object which is read and written via Objective-C method calls.
     OK_ObjCProperty,
-    
+
     /// An Objective-C array/dictionary subscripting which reads an
     /// object or writes at the subscripted array/dictionary element via
     /// Objective-C method calls.
     OK_ObjCSubscript
   };
 
-  /// \brief Describes the kind of template specialization that a
+  /// Describes the kind of template specialization that a
   /// particular template specialization declaration represents.
   enum TemplateSpecializationKind {
     /// This template specialization was formed from a template-id but
@@ -161,14 +164,14 @@
     TSK_ExplicitInstantiationDefinition
   };
 
-  /// \brief Determine whether this template specialization kind refers
+  /// Determine whether this template specialization kind refers
   /// to an instantiation of an entity (as opposed to a non-template or
   /// an explicit specialization).
   inline bool isTemplateInstantiation(TemplateSpecializationKind Kind) {
     return Kind != TSK_Undeclared && Kind != TSK_ExplicitSpecialization;
   }
 
-  /// \brief True if this template specialization kind is an explicit
+  /// True if this template specialization kind is an explicit
   /// specialization, explicit instantiation declaration, or explicit
   /// instantiation definition.
   inline bool isTemplateExplicitInstantiationOrSpecialization(
@@ -186,7 +189,7 @@
     llvm_unreachable("bad template specialization kind");
   }
 
-  /// \brief Thread storage-class-specifier.
+  /// Thread storage-class-specifier.
   enum ThreadStorageClassSpecifier {
     TSCS_unspecified,
     /// GNU __thread.
@@ -199,7 +202,7 @@
     TSCS__Thread_local
   };
 
-  /// \brief Storage classes.
+  /// Storage classes.
   enum StorageClass {
     // These are legal on both functions and variables.
     SC_None,
@@ -212,24 +215,24 @@
     SC_Register
   };
 
-  /// \brief Checks whether the given storage class is legal for functions.
+  /// Checks whether the given storage class is legal for functions.
   inline bool isLegalForFunction(StorageClass SC) {
     return SC <= SC_PrivateExtern;
   }
 
-  /// \brief Checks whether the given storage class is legal for variables.
+  /// Checks whether the given storage class is legal for variables.
   inline bool isLegalForVariable(StorageClass SC) {
     return true;
   }
 
-  /// \brief In-class initialization styles for non-static data members.
+  /// In-class initialization styles for non-static data members.
   enum InClassInitStyle {
     ICIS_NoInit,   ///< No in-class initializer.
     ICIS_CopyInit, ///< Copy initialization.
     ICIS_ListInit  ///< Direct list-initialization.
   };
 
-  /// \brief CallingConv - Specifies the calling convention that a function uses.
+  /// CallingConv - Specifies the calling convention that a function uses.
   enum CallingConv {
     CC_C,           // __attribute__((cdecl))
     CC_X86StdCall,  // __attribute__((stdcall))
@@ -250,7 +253,7 @@
     CC_PreserveAll,  // __attribute__((preserve_all))
   };
 
-  /// \brief Checks whether the given calling convention supports variadic
+  /// Checks whether the given calling convention supports variadic
   /// calls. Unprototyped calls also use the variadic call rules.
   inline bool supportsVariadicCall(CallingConv CC) {
     switch (CC) {
@@ -269,7 +272,7 @@
     }
   }
 
-  /// \brief The storage duration for an object (per C++ [basic.stc]).
+  /// The storage duration for an object (per C++ [basic.stc]).
   enum StorageDuration {
     SD_FullExpression, ///< Full-expression storage duration (for temporaries).
     SD_Automatic,      ///< Automatic storage duration (most local variables).
@@ -291,11 +294,17 @@
     Unspecified
   };
 
+  /// Return true if \p L has a weaker nullability annotation than \p R. The
+  /// ordering is: Unspecified < Nullable < NonNull.
+  inline bool hasWeakerNullability(NullabilityKind L, NullabilityKind R) {
+    return uint8_t(L) > uint8_t(R);
+  }
+
   /// Retrieve the spelling of the given nullability kind.
   llvm::StringRef getNullabilitySpelling(NullabilityKind kind,
                                          bool isContextSensitive = false);
 
-  /// \brief Kinds of parameter ABI.
+  /// Kinds of parameter ABI.
   enum class ParameterABI {
     /// This parameter uses ordinary ABI rules for its type.
     Ordinary,
diff --git a/linux-x64/clang/include/clang/Basic/Stack.h b/linux-x64/clang/include/clang/Basic/Stack.h
new file mode 100644
index 0000000..15a37c6
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/Stack.h
@@ -0,0 +1,27 @@
+//===--- Stack.h - Utilities for dealing with stack space -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines utilities for dealing with stack allocation and stack space.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_STACK_H
+#define LLVM_CLANG_BASIC_STACK_H
+
+#include <cstddef>
+
+namespace clang {
+  /// The amount of stack space that Clang would like to be provided with.
+  /// If less than this much is available, we may be unable to reach our
+  /// template instantiation depth limit and other similar limits.
+  constexpr size_t DesiredStackSize = 8 << 20;
+} // end namespace clang
+
+#endif // LLVM_CLANG_BASIC_STACK_H
diff --git a/linux-x64/clang/include/clang/Basic/SyncScope.h b/linux-x64/clang/include/clang/Basic/SyncScope.h
index 09ac005..db4461e 100644
--- a/linux-x64/clang/include/clang/Basic/SyncScope.h
+++ b/linux-x64/clang/include/clang/Basic/SyncScope.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provides definitions for the atomic synchronization scopes.
+/// Provides definitions for the atomic synchronization scopes.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -22,7 +22,7 @@
 
 namespace clang {
 
-/// \brief Defines synch scope values used internally by clang.
+/// Defines synch scope values used internally by clang.
 ///
 /// The enum values start from 0 and are contiguous. They are mainly used for
 /// enumerating all supported synch scope values and mapping them to LLVM
@@ -62,36 +62,36 @@
   llvm_unreachable("Invalid synch scope");
 }
 
-/// \brief Defines the kind of atomic scope models.
+/// Defines the kind of atomic scope models.
 enum class AtomicScopeModelKind { None, OpenCL };
 
-/// \brief Defines the interface for synch scope model.
+/// Defines the interface for synch scope model.
 class AtomicScopeModel {
 public:
   virtual ~AtomicScopeModel() {}
-  /// \brief Maps language specific synch scope values to internal
+  /// Maps language specific synch scope values to internal
   /// SyncScope enum.
   virtual SyncScope map(unsigned S) const = 0;
 
-  /// \brief Check if the compile-time constant synch scope value
+  /// Check if the compile-time constant synch scope value
   /// is valid.
   virtual bool isValid(unsigned S) const = 0;
 
-  /// \brief Get all possible synch scope values that might be
+  /// Get all possible synch scope values that might be
   /// encountered at runtime for the current language.
   virtual ArrayRef<unsigned> getRuntimeValues() const = 0;
 
-  /// \brief If atomic builtin function is called with invalid
+  /// If atomic builtin function is called with invalid
   /// synch scope value at runtime, it will fall back to a valid
   /// synch scope value returned by this function.
   virtual unsigned getFallBackValue() const = 0;
 
-  /// \brief Create an atomic scope model by AtomicScopeModelKind.
+  /// Create an atomic scope model by AtomicScopeModelKind.
   /// \return an empty std::unique_ptr for AtomicScopeModelKind::None.
   static std::unique_ptr<AtomicScopeModel> create(AtomicScopeModelKind K);
 };
 
-/// \brief Defines the synch scope model for OpenCL.
+/// Defines the synch scope model for OpenCL.
 class AtomicScopeOpenCLModel : public AtomicScopeModel {
 public:
   /// The enum values match the pre-defined macros
diff --git a/linux-x64/clang/include/clang/Basic/TargetBuiltins.h b/linux-x64/clang/include/clang/Basic/TargetBuiltins.h
index 8f4f5e9..75a3811 100644
--- a/linux-x64/clang/include/clang/Basic/TargetBuiltins.h
+++ b/linux-x64/clang/include/clang/Basic/TargetBuiltins.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Enumerates target-specific builtins in their own namespaces within
+/// Enumerates target-specific builtins in their own namespaces within
 /// namespace ::clang.
 ///
 //===----------------------------------------------------------------------===//
@@ -31,7 +31,7 @@
   };
   }
 
-  /// \brief ARM builtins
+  /// ARM builtins
   namespace ARM {
     enum {
       LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -42,7 +42,7 @@
     };
   }
 
-  /// \brief AArch64 builtins
+  /// AArch64 builtins
   namespace AArch64 {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -53,7 +53,7 @@
   };
   }
 
-  /// \brief PPC builtins
+  /// PPC builtins
   namespace PPC {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -63,7 +63,7 @@
     };
   }
 
-  /// \brief NVPTX builtins
+  /// NVPTX builtins
   namespace NVPTX {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -73,7 +73,7 @@
     };
   }
 
-  /// \brief AMDGPU builtins
+  /// AMDGPU builtins
   namespace AMDGPU {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -83,7 +83,7 @@
   };
   }
 
-  /// \brief X86 builtins
+  /// X86 builtins
   namespace X86 {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -97,7 +97,7 @@
   };
   }
 
-  /// \brief Flags to identify the types for overloaded Neon builtins.
+  /// Flags to identify the types for overloaded Neon builtins.
   ///
   /// These must be kept in sync with the flags in utils/TableGen/NeonEmitter.h.
   class NeonTypeFlags {
@@ -140,7 +140,7 @@
     bool isQuad() const { return (Flags & QuadFlag) != 0; }
   };
 
-  /// \brief Hexagon builtins
+  /// Hexagon builtins
   namespace Hexagon {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -150,7 +150,7 @@
     };
   }
 
-  /// \brief Nios2 builtins
+  /// Nios2 builtins
   namespace Nios2 {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -160,7 +160,7 @@
   };
   }
 
-  /// \brief MIPS builtins
+  /// MIPS builtins
   namespace Mips {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -170,7 +170,7 @@
     };
   }
 
-  /// \brief XCore builtins
+  /// XCore builtins
   namespace XCore {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -180,7 +180,7 @@
     };
   }
 
-  /// \brief Le64 builtins
+  /// Le64 builtins
   namespace Le64 {
   enum {
     LastTIBuiltin = clang::Builtin::FirstTSBuiltin - 1,
@@ -190,7 +190,7 @@
   };
   }
 
-  /// \brief SystemZ builtins
+  /// SystemZ builtins
   namespace SystemZ {
     enum {
         LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
@@ -200,7 +200,7 @@
     };
   }
 
-  /// \brief WebAssembly builtins
+  /// WebAssembly builtins
   namespace WebAssembly {
     enum {
       LastTIBuiltin = clang::Builtin::FirstTSBuiltin-1,
diff --git a/linux-x64/clang/include/clang/Basic/TargetCXXABI.h b/linux-x64/clang/include/clang/Basic/TargetCXXABI.h
index 074f07c..455121a 100644
--- a/linux-x64/clang/include/clang/Basic/TargetCXXABI.h
+++ b/linux-x64/clang/include/clang/Basic/TargetCXXABI.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the TargetCXXABI class, which abstracts details of the
+/// Defines the TargetCXXABI class, which abstracts details of the
 /// C++ ABI that we're targeting.
 ///
 //===----------------------------------------------------------------------===//
@@ -20,10 +20,10 @@
 
 namespace clang {
 
-/// \brief The basic abstraction for the target C++ ABI.
+/// The basic abstraction for the target C++ ABI.
 class TargetCXXABI {
 public:
-  /// \brief The basic C++ ABI kind.
+  /// The basic C++ ABI kind.
   enum Kind {
     /// The generic Itanium ABI is the standard ABI of most open-source
     /// and Unix-like platforms.  It is the primary ABI targeted by
@@ -131,7 +131,7 @@
 
   Kind getKind() const { return TheKind; }
 
-  /// \brief Does this ABI generally fall into the Itanium family of ABIs?
+  /// Does this ABI generally fall into the Itanium family of ABIs?
   bool isItaniumFamily() const {
     switch (getKind()) {
     case GenericAArch64:
@@ -150,7 +150,7 @@
     llvm_unreachable("bad ABI kind");
   }
 
-  /// \brief Is this ABI an MSVC-compatible ABI?
+  /// Is this ABI an MSVC-compatible ABI?
   bool isMicrosoft() const {
     switch (getKind()) {
     case GenericAArch64:
@@ -169,7 +169,7 @@
     llvm_unreachable("bad ABI kind");
   }
 
-  /// \brief Are member functions differently aligned?
+  /// Are member functions differently aligned?
   ///
   /// Many Itanium-style C++ ABIs require member functions to be aligned, so
   /// that a pointer to such a function is guaranteed to have a zero in the
@@ -210,25 +210,25 @@
     return isMicrosoft();
   }
 
-  /// \brief Does this ABI have different entrypoints for complete-object
+  /// Does this ABI have different entrypoints for complete-object
   /// and base-subobject constructors?
   bool hasConstructorVariants() const {
     return isItaniumFamily();
   }
 
-  /// \brief Does this ABI allow virtual bases to be primary base classes?
+  /// Does this ABI allow virtual bases to be primary base classes?
   bool hasPrimaryVBases() const {
     return isItaniumFamily();
   }
 
-  /// \brief Does this ABI use key functions?  If so, class data such as the
+  /// Does this ABI use key functions?  If so, class data such as the
   /// vtable is emitted with strong linkage by the TU containing the key
   /// function.
   bool hasKeyFunctions() const {
     return isItaniumFamily();
   }
 
-  /// \brief Can an out-of-line inline function serve as a key function?
+  /// Can an out-of-line inline function serve as a key function?
   ///
   /// This flag is only useful in ABIs where type data (for example,
   /// vtables and type_info objects) are emitted only after processing
diff --git a/linux-x64/clang/include/clang/Basic/TargetInfo.h b/linux-x64/clang/include/clang/Basic/TargetInfo.h
index 26f72a1..c3ef561 100644
--- a/linux-x64/clang/include/clang/Basic/TargetInfo.h
+++ b/linux-x64/clang/include/clang/Basic/TargetInfo.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::TargetInfo interface.
+/// Defines the clang::TargetInfo interface.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -20,7 +20,6 @@
 #include "clang/Basic/Specifiers.h"
 #include "clang/Basic/TargetCXXABI.h"
 #include "clang/Basic/TargetOptions.h"
-#include "clang/Basic/VersionTuple.h"
 #include "llvm/ADT/APInt.h"
 #include "llvm/ADT/IntrusiveRefCntPtr.h"
 #include "llvm/ADT/Optional.h"
@@ -30,6 +29,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/IR/DataLayout.h"
 #include "llvm/Support/DataTypes.h"
+#include "llvm/Support/VersionTuple.h"
 #include <cassert>
 #include <string>
 #include <vector>
@@ -49,7 +49,7 @@
 
 namespace Builtin { struct Info; }
 
-/// \brief Exposes information about the current target.
+/// Exposes information about the current target.
 ///
 class TargetInfo : public RefCountedBase<TargetInfo> {
   std::shared_ptr<TargetOptions> TargetOpts;
@@ -74,6 +74,33 @@
   unsigned char LargeArrayMinWidth, LargeArrayAlign;
   unsigned char LongWidth, LongAlign;
   unsigned char LongLongWidth, LongLongAlign;
+
+  // Fixed point bit widths
+  unsigned char ShortAccumWidth, ShortAccumAlign;
+  unsigned char AccumWidth, AccumAlign;
+  unsigned char LongAccumWidth, LongAccumAlign;
+  unsigned char ShortFractWidth, ShortFractAlign;
+  unsigned char FractWidth, FractAlign;
+  unsigned char LongFractWidth, LongFractAlign;
+
+  // If true, unsigned fixed point types have the same number of fractional bits
+  // as their signed counterparts, forcing the unsigned types to have one extra
+  // bit of padding. Otherwise, unsigned fixed point types have
+  // one more fractional bit than its corresponding signed type. This is false
+  // by default.
+  bool PaddingOnUnsignedFixedPoint;
+
+  // Fixed point integral and fractional bit sizes
+  // Saturated types share the same integral/fractional bits as their
+  // corresponding unsaturated types.
+  // For simplicity, the fractional bits in a _Fract type will be one less the
+  // width of that _Fract type. This leaves all signed _Fract types having no
+  // padding and unsigned _Fract types will only have 1 bit of padding after the
+  // sign if PaddingOnUnsignedFixedPoint is set.
+  unsigned char ShortAccumScale;
+  unsigned char AccumScale;
+  unsigned char LongAccumScale;
+
   unsigned char SuitableAlign;
   unsigned char DefaultAlignForAttributeAligned;
   unsigned char MinGlobalAlign;
@@ -109,7 +136,7 @@
   }
 
 public:
-  /// \brief Construct a target for the given options.
+  /// Construct a target for the given options.
   ///
   /// \param Opts - The options to use to initialize the target. The target may
   /// modify the options to canonicalize the target feature information to match
@@ -120,7 +147,7 @@
 
   virtual ~TargetInfo();
 
-  /// \brief Retrieve the target options.
+  /// Retrieve the target options.
   TargetOptions &getTargetOpts() const {
     assert(TargetOpts && "Missing target options");
     return *TargetOpts;
@@ -149,7 +176,7 @@
     Float128
   };
 
-  /// \brief The different kinds of __builtin_va_list types defined by
+  /// The different kinds of __builtin_va_list types defined by
   /// the target implementation.
   enum BuiltinVaListKind {
     /// typedef char* __builtin_va_list;
@@ -195,7 +222,7 @@
           WIntType, Char16Type, Char32Type, Int64Type, SigAtomicType,
           ProcessIDType;
 
-  /// \brief Whether Objective-C's built-in boolean type should be signed char.
+  /// Whether Objective-C's built-in boolean type should be signed char.
   ///
   /// Otherwise, when this flag is not set, the normal built-in boolean type is
   /// used.
@@ -208,7 +235,7 @@
   /// boundary.
   unsigned UseBitFieldTypeAlignment : 1;
 
-  /// \brief Whether zero length bitfields (e.g., int : 0;) force alignment of
+  /// Whether zero length bitfields (e.g., int : 0;) force alignment of
   /// the next bitfield.
   ///
   /// If the alignment of the zero length bitfield is greater than the member
@@ -216,14 +243,14 @@
   /// zero-length bitfield.
   unsigned UseZeroLengthBitfieldAlignment : 1;
 
-  /// \brief  Whether explicit bit field alignment attributes are honored.
+  ///  Whether explicit bit field alignment attributes are honored.
   unsigned UseExplicitBitFieldAlignment : 1;
 
   /// If non-zero, specifies a fixed alignment value for bitfields that follow
   /// zero length bitfield, regardless of the zero length bitfield type.
   unsigned ZeroLengthBitfieldBoundary;
 
-  /// \brief Specify if mangling based on address space map should be used or
+  /// Specify if mangling based on address space map should be used or
   /// not for language specific address spaces
   bool UseAddrSpaceMapMangling;
 
@@ -285,30 +312,38 @@
     }
   }
 
-  /// \brief Return the width (in bits) of the specified integer type enum.
+  /// In the event this target uses the same number of fractional bits for its
+  /// unsigned types as it does with its signed counterparts, there will be
+  /// exactly one bit of padding.
+  /// Return true if unsigned fixed point types have padding for this target.
+  bool doUnsignedFixedPointTypesHavePadding() const {
+    return PaddingOnUnsignedFixedPoint;
+  }
+
+  /// Return the width (in bits) of the specified integer type enum.
   ///
   /// For example, SignedInt -> getIntWidth().
   unsigned getTypeWidth(IntType T) const;
 
-  /// \brief Return integer type with specified width.
+  /// Return integer type with specified width.
   virtual IntType getIntTypeByWidth(unsigned BitWidth, bool IsSigned) const;
 
-  /// \brief Return the smallest integer type with at least the specified width.
+  /// Return the smallest integer type with at least the specified width.
   virtual IntType getLeastIntTypeByWidth(unsigned BitWidth,
                                          bool IsSigned) const;
 
-  /// \brief Return floating point type with specified width.
+  /// Return floating point type with specified width.
   RealType getRealTypeByWidth(unsigned BitWidth) const;
 
-  /// \brief Return the alignment (in bits) of the specified integer type enum.
+  /// Return the alignment (in bits) of the specified integer type enum.
   ///
   /// For example, SignedInt -> getIntAlign().
   unsigned getTypeAlign(IntType T) const;
 
-  /// \brief Returns true if the type is signed; false otherwise.
+  /// Returns true if the type is signed; false otherwise.
   static bool isTypeSigned(IntType T);
 
-  /// \brief Return the width of pointers on this target, for the
+  /// Return the width of pointers on this target, for the
   /// specified address space.
   uint64_t getPointerWidth(unsigned AddrSpace) const {
     return AddrSpace == 0 ? PointerWidth : getPointerWidthV(AddrSpace);
@@ -317,29 +352,29 @@
     return AddrSpace == 0 ? PointerAlign : getPointerAlignV(AddrSpace);
   }
 
-  /// \brief Return the maximum width of pointers on this target.
+  /// Return the maximum width of pointers on this target.
   virtual uint64_t getMaxPointerWidth() const {
     return PointerWidth;
   }
 
-  /// \brief Get integer value for null pointer.
+  /// Get integer value for null pointer.
   /// \param AddrSpace address space of pointee in source language.
   virtual uint64_t getNullPointerValue(LangAS AddrSpace) const { return 0; }
 
-  /// \brief Return the size of '_Bool' and C++ 'bool' for this target, in bits.
+  /// Return the size of '_Bool' and C++ 'bool' for this target, in bits.
   unsigned getBoolWidth() const { return BoolWidth; }
 
-  /// \brief Return the alignment of '_Bool' and C++ 'bool' for this target.
+  /// Return the alignment of '_Bool' and C++ 'bool' for this target.
   unsigned getBoolAlign() const { return BoolAlign; }
 
   unsigned getCharWidth() const { return 8; } // FIXME
   unsigned getCharAlign() const { return 8; } // FIXME
 
-  /// \brief Return the size of 'signed short' and 'unsigned short' for this
+  /// Return the size of 'signed short' and 'unsigned short' for this
   /// target, in bits.
   unsigned getShortWidth() const { return 16; } // FIXME
 
-  /// \brief Return the alignment of 'signed short' and 'unsigned short' for
+  /// Return the alignment of 'signed short' and 'unsigned short' for
   /// this target.
   unsigned getShortAlign() const { return 16; } // FIXME
 
@@ -358,22 +393,135 @@
   unsigned getLongLongWidth() const { return LongLongWidth; }
   unsigned getLongLongAlign() const { return LongLongAlign; }
 
-  /// \brief Determine whether the __int128 type is supported on this target.
+  /// getShortAccumWidth/Align - Return the size of 'signed short _Accum' and
+  /// 'unsigned short _Accum' for this target, in bits.
+  unsigned getShortAccumWidth() const { return ShortAccumWidth; }
+  unsigned getShortAccumAlign() const { return ShortAccumAlign; }
+
+  /// getAccumWidth/Align - Return the size of 'signed _Accum' and
+  /// 'unsigned _Accum' for this target, in bits.
+  unsigned getAccumWidth() const { return AccumWidth; }
+  unsigned getAccumAlign() const { return AccumAlign; }
+
+  /// getLongAccumWidth/Align - Return the size of 'signed long _Accum' and
+  /// 'unsigned long _Accum' for this target, in bits.
+  unsigned getLongAccumWidth() const { return LongAccumWidth; }
+  unsigned getLongAccumAlign() const { return LongAccumAlign; }
+
+  /// getShortFractWidth/Align - Return the size of 'signed short _Fract' and
+  /// 'unsigned short _Fract' for this target, in bits.
+  unsigned getShortFractWidth() const { return ShortFractWidth; }
+  unsigned getShortFractAlign() const { return ShortFractAlign; }
+
+  /// getFractWidth/Align - Return the size of 'signed _Fract' and
+  /// 'unsigned _Fract' for this target, in bits.
+  unsigned getFractWidth() const { return FractWidth; }
+  unsigned getFractAlign() const { return FractAlign; }
+
+  /// getLongFractWidth/Align - Return the size of 'signed long _Fract' and
+  /// 'unsigned long _Fract' for this target, in bits.
+  unsigned getLongFractWidth() const { return LongFractWidth; }
+  unsigned getLongFractAlign() const { return LongFractAlign; }
+
+  /// getShortAccumScale/IBits - Return the number of fractional/integral bits
+  /// in a 'signed short _Accum' type.
+  unsigned getShortAccumScale() const { return ShortAccumScale; }
+  unsigned getShortAccumIBits() const {
+    return ShortAccumWidth - ShortAccumScale - 1;
+  }
+
+  /// getAccumScale/IBits - Return the number of fractional/integral bits
+  /// in a 'signed _Accum' type.
+  unsigned getAccumScale() const { return AccumScale; }
+  unsigned getAccumIBits() const { return AccumWidth - AccumScale - 1; }
+
+  /// getLongAccumScale/IBits - Return the number of fractional/integral bits
+  /// in a 'signed long _Accum' type.
+  unsigned getLongAccumScale() const { return LongAccumScale; }
+  unsigned getLongAccumIBits() const {
+    return LongAccumWidth - LongAccumScale - 1;
+  }
+
+  /// getUnsignedShortAccumScale/IBits - Return the number of
+  /// fractional/integral bits in a 'unsigned short _Accum' type.
+  unsigned getUnsignedShortAccumScale() const {
+    return PaddingOnUnsignedFixedPoint ? ShortAccumScale : ShortAccumScale + 1;
+  }
+  unsigned getUnsignedShortAccumIBits() const {
+    return PaddingOnUnsignedFixedPoint
+               ? getShortAccumIBits()
+               : ShortAccumWidth - getUnsignedShortAccumScale();
+  }
+
+  /// getUnsignedAccumScale/IBits - Return the number of fractional/integral
+  /// bits in a 'unsigned _Accum' type.
+  unsigned getUnsignedAccumScale() const {
+    return PaddingOnUnsignedFixedPoint ? AccumScale : AccumScale + 1;
+  }
+  unsigned getUnsignedAccumIBits() const {
+    return PaddingOnUnsignedFixedPoint ? getAccumIBits()
+                                       : AccumWidth - getUnsignedAccumScale();
+  }
+
+  /// getUnsignedLongAccumScale/IBits - Return the number of fractional/integral
+  /// bits in a 'unsigned long _Accum' type.
+  unsigned getUnsignedLongAccumScale() const {
+    return PaddingOnUnsignedFixedPoint ? LongAccumScale : LongAccumScale + 1;
+  }
+  unsigned getUnsignedLongAccumIBits() const {
+    return PaddingOnUnsignedFixedPoint
+               ? getLongAccumIBits()
+               : LongAccumWidth - getUnsignedLongAccumScale();
+  }
+
+  /// getShortFractScale - Return the number of fractional bits
+  /// in a 'signed short _Fract' type.
+  unsigned getShortFractScale() const { return ShortFractWidth - 1; }
+
+  /// getFractScale - Return the number of fractional bits
+  /// in a 'signed _Fract' type.
+  unsigned getFractScale() const { return FractWidth - 1; }
+
+  /// getLongFractScale - Return the number of fractional bits
+  /// in a 'signed long _Fract' type.
+  unsigned getLongFractScale() const { return LongFractWidth - 1; }
+
+  /// getUnsignedShortFractScale - Return the number of fractional bits
+  /// in a 'unsigned short _Fract' type.
+  unsigned getUnsignedShortFractScale() const {
+    return PaddingOnUnsignedFixedPoint ? getShortFractScale()
+                                       : getShortFractScale() + 1;
+  }
+
+  /// getUnsignedFractScale - Return the number of fractional bits
+  /// in a 'unsigned _Fract' type.
+  unsigned getUnsignedFractScale() const {
+    return PaddingOnUnsignedFixedPoint ? getFractScale() : getFractScale() + 1;
+  }
+
+  /// getUnsignedLongFractScale - Return the number of fractional bits
+  /// in a 'unsigned long _Fract' type.
+  unsigned getUnsignedLongFractScale() const {
+    return PaddingOnUnsignedFixedPoint ? getLongFractScale()
+                                       : getLongFractScale() + 1;
+  }
+
+  /// Determine whether the __int128 type is supported on this target.
   virtual bool hasInt128Type() const {
     return (getPointerWidth(0) >= 64) || getTargetOpts().ForceEnableInt128;
   } // FIXME
 
-  /// \brief Determine whether _Float16 is supported on this target.
+  /// Determine whether _Float16 is supported on this target.
   virtual bool hasLegalHalfType() const { return HasLegalHalfType; }
 
-  /// \brief Determine whether the __float128 type is supported on this target.
+  /// Determine whether the __float128 type is supported on this target.
   virtual bool hasFloat128Type() const { return HasFloat128; }
 
-  /// \brief Return the alignment that is suitable for storing any
+  /// Return the alignment that is suitable for storing any
   /// object with a fundamental alignment requirement.
   unsigned getSuitableAlign() const { return SuitableAlign; }
 
-  /// \brief Return the default alignment for __attribute__((aligned)) on
+  /// Return the default alignment for __attribute__((aligned)) on
   /// this target, to be used if no alignment value is specified.
   unsigned getDefaultAlignForAttributeAligned() const {
     return DefaultAlignForAttributeAligned;
@@ -436,11 +584,11 @@
     return *Float128Format;
   }
 
-  /// \brief Return true if the 'long double' type should be mangled like
+  /// Return true if the 'long double' type should be mangled like
   /// __float128.
   virtual bool useFloat128ManglingForLongDouble() const { return false; }
 
-  /// \brief Return the value for the C99 FLT_EVAL_METHOD macro.
+  /// Return the value for the C99 FLT_EVAL_METHOD macro.
   virtual unsigned getFloatEvalMethod() const { return 0; }
 
   // getLargeArrayMinWidth/Align - Return the minimum array size that is
@@ -448,16 +596,16 @@
   unsigned getLargeArrayMinWidth() const { return LargeArrayMinWidth; }
   unsigned getLargeArrayAlign() const { return LargeArrayAlign; }
 
-  /// \brief Return the maximum width lock-free atomic operation which will
+  /// Return the maximum width lock-free atomic operation which will
   /// ever be supported for the given target
   unsigned getMaxAtomicPromoteWidth() const { return MaxAtomicPromoteWidth; }
-  /// \brief Return the maximum width lock-free atomic operation which can be
+  /// Return the maximum width lock-free atomic operation which can be
   /// inlined given the supported features of the given target.
   unsigned getMaxAtomicInlineWidth() const { return MaxAtomicInlineWidth; }
-  /// \brief Set the maximum inline or promote width lock-free atomic operation
+  /// Set the maximum inline or promote width lock-free atomic operation
   /// for the given target.
   virtual void setMaxAtomicWidth() {}
-  /// \brief Returns true if the given target supports lock-free atomic
+  /// Returns true if the given target supports lock-free atomic
   /// operations at the specified width and alignment.
   virtual bool hasBuiltinAtomic(uint64_t AtomicSizeInBits,
                                 uint64_t AlignmentInBits) const {
@@ -467,14 +615,14 @@
             llvm::isPowerOf2_64(AtomicSizeInBits / getCharWidth()));
   }
 
-  /// \brief Return the maximum vector alignment supported for the given target.
+  /// Return the maximum vector alignment supported for the given target.
   unsigned getMaxVectorAlign() const { return MaxVectorAlign; }
-  /// \brief Return default simd alignment for the given target. Generally, this
+  /// Return default simd alignment for the given target. Generally, this
   /// value is type-specific, but this alignment can be used for most of the
   /// types for the given target.
   unsigned getSimdDefaultAlign() const { return SimdDefaultAlign; }
 
-  /// \brief Return the size of intmax_t and uintmax_t for this target, in bits.
+  /// Return the size of intmax_t and uintmax_t for this target, in bits.
   unsigned getIntMaxTWidth() const {
     return getTypeWidth(IntMaxType);
   }
@@ -482,7 +630,7 @@
   // Return the size of unwind_word for this target.
   virtual unsigned getUnwindWordWidth() const { return getPointerWidth(0); }
 
-  /// \brief Return the "preferred" register width on this target.
+  /// Return the "preferred" register width on this target.
   virtual unsigned getRegisterWidth() const {
     // Currently we assume the register width on the target matches the pointer
     // width, we can introduce a new variable for this if/when some target wants
@@ -490,12 +638,12 @@
     return PointerWidth;
   }
 
-  /// \brief Returns the name of the mcount instrumentation function.
+  /// Returns the name of the mcount instrumentation function.
   const char *getMCountName() const {
     return MCountName;
   }
 
-  /// \brief Check if the Objective-C built-in boolean type should be signed
+  /// Check if the Objective-C built-in boolean type should be signed
   /// char.
   ///
   /// Otherwise, if this returns false, the normal built-in boolean type
@@ -507,58 +655,58 @@
     UseSignedCharForObjCBool = false;
   }
 
-  /// \brief Check whether the alignment of bit-field types is respected
+  /// Check whether the alignment of bit-field types is respected
   /// when laying out structures.
   bool useBitFieldTypeAlignment() const {
     return UseBitFieldTypeAlignment;
   }
 
-  /// \brief Check whether zero length bitfields should force alignment of
+  /// Check whether zero length bitfields should force alignment of
   /// the next member.
   bool useZeroLengthBitfieldAlignment() const {
     return UseZeroLengthBitfieldAlignment;
   }
 
-  /// \brief Get the fixed alignment value in bits for a member that follows
+  /// Get the fixed alignment value in bits for a member that follows
   /// a zero length bitfield.
   unsigned getZeroLengthBitfieldBoundary() const {
     return ZeroLengthBitfieldBoundary;
   }
 
-  /// \brief Check whether explicit bitfield alignment attributes should be
+  /// Check whether explicit bitfield alignment attributes should be
   //  honored, as in "__attribute__((aligned(2))) int b : 1;".
   bool useExplicitBitFieldAlignment() const {
     return UseExplicitBitFieldAlignment;
   }
 
-  /// \brief Check whether this target support '\#pragma options align=mac68k'.
+  /// Check whether this target support '\#pragma options align=mac68k'.
   bool hasAlignMac68kSupport() const {
     return HasAlignMac68kSupport;
   }
 
-  /// \brief Return the user string for the specified integer type enum.
+  /// Return the user string for the specified integer type enum.
   ///
   /// For example, SignedShort -> "short".
   static const char *getTypeName(IntType T);
 
-  /// \brief Return the constant suffix for the specified integer type enum.
+  /// Return the constant suffix for the specified integer type enum.
   ///
   /// For example, SignedLong -> "L".
   const char *getTypeConstantSuffix(IntType T) const;
 
-  /// \brief Return the printf format modifier for the specified
+  /// Return the printf format modifier for the specified
   /// integer type enum.
   ///
   /// For example, SignedLong -> "l".
   static const char *getTypeFormatModifier(IntType T);
 
-  /// \brief Check whether the given real type should use the "fpret" flavor of
+  /// Check whether the given real type should use the "fpret" flavor of
   /// Objective-C message passing on this target.
   bool useObjCFPRetForRealType(RealType T) const {
     return RealTypeUsesObjCFPRet & (1 << T);
   }
 
-  /// \brief Check whether _Complex long double should use the "fp2ret" flavor
+  /// Check whether _Complex long double should use the "fp2ret" flavor
   /// of Objective-C message passing on this target.
   bool useObjCFP2RetForComplexLongDouble() const {
     return ComplexLongDoubleUsesFP2Ret;
@@ -572,7 +720,7 @@
     return true;
   }
 
-  /// \brief Specify if mangling based on address space map should be used or
+  /// Specify if mangling based on address space map should be used or
   /// not for language specific address spaces
   bool useAddressSpaceMapMangling() const {
     return UseAddrSpaceMapMangling;
@@ -580,7 +728,7 @@
 
   ///===---- Other target property query methods --------------------------===//
 
-  /// \brief Appends the target-specific \#define values for this
+  /// Appends the target-specific \#define values for this
   /// target set to the specified buffer.
   virtual void getTargetDefines(const LangOptions &Opts,
                                 MacroBuilder &Builder) const = 0;
@@ -598,7 +746,7 @@
   /// idea to avoid optimizing based on that undef behavior.
   virtual bool isCLZForZeroUndef() const { return true; }
 
-  /// \brief Returns the kind of __builtin_va_list type that should be used
+  /// Returns the kind of __builtin_va_list type that should be used
   /// with this target.
   virtual BuiltinVaListKind getBuiltinVaListKind() const = 0;
 
@@ -609,19 +757,19 @@
   /// Returns true for RenderScript.
   bool isRenderScriptTarget() const { return IsRenderScriptTarget; }
 
-  /// \brief Returns whether the passed in string is a valid clobber in an
+  /// Returns whether the passed in string is a valid clobber in an
   /// inline asm statement.
   ///
   /// This is used by Sema.
   bool isValidClobber(StringRef Name) const;
 
-  /// \brief Returns whether the passed in string is a valid register name
+  /// Returns whether the passed in string is a valid register name
   /// according to GCC.
   ///
   /// This is used by Sema for inline asm statements.
-  bool isValidGCCRegisterName(StringRef Name) const;
+  virtual bool isValidGCCRegisterName(StringRef Name) const;
 
-  /// \brief Returns the "normalized" GCC register name.
+  /// Returns the "normalized" GCC register name.
   ///
   /// ReturnCannonical true will return the register name without any additions
   /// such as "{}" or "%" in it's canonical form, for example:
@@ -629,6 +777,12 @@
   StringRef getNormalizedGCCRegisterName(StringRef Name,
                                          bool ReturnCanonical = false) const;
 
+  /// Extracts a register from the passed constraint (if it is a
+  /// single-register constraint) and the asm label expression related to a
+  /// variable in the input or output list of an inline asm statement.
+  ///
+  /// This function is used by Sema in order to diagnose conflicts between
+  /// the clobber list and the input/output lists.
   virtual StringRef getConstraintRegister(StringRef Constraint,
                                           StringRef Expression) const {
     return "";
@@ -668,11 +822,11 @@
     bool allowsRegister() const { return (Flags & CI_AllowsRegister) != 0; }
     bool allowsMemory() const { return (Flags & CI_AllowsMemory) != 0; }
 
-    /// \brief Return true if this output operand has a matching
+    /// Return true if this output operand has a matching
     /// (tied) input operand.
     bool hasMatchingInput() const { return (Flags & CI_HasMatchingInput) != 0; }
 
-    /// \brief Return true if this input operand is a matching
+    /// Return true if this input operand is a matching
     /// constraint that ties it to an output operand.
     ///
     /// If this returns true then getTiedOperand will indicate which output
@@ -716,7 +870,7 @@
       ImmRange.Max = INT_MAX;
     }
 
-    /// \brief Indicate that this is an input operand that is tied to
+    /// Indicate that this is an input operand that is tied to
     /// the specified output operand.
     ///
     /// Copy over the various constraint information from the output.
@@ -728,7 +882,7 @@
     }
   };
 
-  /// \brief Validate register name used for global register variables.
+  /// Validate register name used for global register variables.
   ///
   /// This function returns true if the register passed in RegName can be used
   /// for global register variables on this target. In addition, it returns
@@ -782,16 +936,16 @@
     return std::string(1, *Constraint);
   }
 
-  /// \brief Returns a string of target-specific clobbers, in LLVM format.
+  /// Returns a string of target-specific clobbers, in LLVM format.
   virtual const char *getClobbers() const = 0;
 
-  /// \brief Returns true if NaN encoding is IEEE 754-2008.
+  /// Returns true if NaN encoding is IEEE 754-2008.
   /// Only MIPS allows a different encoding.
   virtual bool isNan2008() const {
     return true;
   }
 
-  /// \brief Returns the target triple of the primary target.
+  /// Returns the target triple of the primary target.
   const llvm::Triple &getTriple() const {
     return Triple;
   }
@@ -811,7 +965,7 @@
     const unsigned RegNum;
   };
 
-  /// \brief Does this target support "protected" visibility?
+  /// Does this target support "protected" visibility?
   ///
   /// Any target which dynamic libraries will naturally support
   /// something like "default" (meaning that the symbol is visible
@@ -823,7 +977,7 @@
   /// either; the entire thing is pretty badly mangled.
   virtual bool hasProtectedVisibility() const { return true; }
 
-  /// \brief An optional hook that targets can implement to perform semantic
+  /// An optional hook that targets can implement to perform semantic
   /// checking on attribute((section("foo"))) specifiers.
   ///
   /// In this case, "foo" is passed in to be checked.  If the section
@@ -838,18 +992,18 @@
     return "";
   }
 
-  /// \brief Set forced language options.
+  /// Set forced language options.
   ///
   /// Apply changes to the target information with respect to certain
   /// language options which change the target configuration and adjust
   /// the language based on the target options where applicable.
   virtual void adjust(LangOptions &Opts);
 
-  /// \brief Adjust target options based on codegen options.
+  /// Adjust target options based on codegen options.
   virtual void adjustTargetOptions(const CodeGenOptions &CGOpts,
                                    TargetOptions &TargetOpts) const {}
 
-  /// \brief Initialize the map with the default set of target features for the
+  /// Initialize the map with the default set of target features for the
   /// CPU this should include all legal feature strings on the target.
   ///
   /// \return False on error (invalid features).
@@ -857,15 +1011,15 @@
                               DiagnosticsEngine &Diags, StringRef CPU,
                               const std::vector<std::string> &FeatureVec) const;
 
-  /// \brief Get the ABI currently in use.
+  /// Get the ABI currently in use.
   virtual StringRef getABI() const { return StringRef(); }
 
-  /// \brief Get the C++ ABI currently in use.
+  /// Get the C++ ABI currently in use.
   TargetCXXABI getCXXABI() const {
     return TheCXXABI;
   }
 
-  /// \brief Target the specified CPU.
+  /// Target the specified CPU.
   ///
   /// \return  False on error (invalid CPU name).
   virtual bool setCPU(const std::string &Name) {
@@ -880,21 +1034,21 @@
     return true;
   }
 
-  /// \brief Use the specified ABI.
+  /// Use the specified ABI.
   ///
   /// \return False on error (invalid ABI name).
   virtual bool setABI(const std::string &Name) {
     return false;
   }
 
-  /// \brief Use the specified unit for FP math.
+  /// Use the specified unit for FP math.
   ///
   /// \return False on error (invalid unit name).
   virtual bool setFPMath(StringRef Name) {
     return false;
   }
 
-  /// \brief Enable or disable a specific target feature;
+  /// Enable or disable a specific target feature;
   /// the feature name must be valid.
   virtual void setFeatureEnabled(llvm::StringMap<bool> &Features,
                                  StringRef Name,
@@ -902,12 +1056,12 @@
     Features[Name] = Enabled;
   }
 
-  /// \brief Determine whether this TargetInfo supports the given feature.
+  /// Determine whether this TargetInfo supports the given feature.
   virtual bool isValidFeatureName(StringRef Feature) const {
     return true;
   }
 
-  /// \brief Perform initialization based on the user configured
+  /// Perform initialization based on the user configured
   /// set of features (e.g., +sse4).
   ///
   /// The list is guaranteed to have at most one entry per feature.
@@ -923,41 +1077,62 @@
     return true;
   }
 
-  /// \brief Determine whether the given target has the given feature.
+  /// Determine whether the given target has the given feature.
   virtual bool hasFeature(StringRef Feature) const {
     return false;
   }
 
-  /// \brief Identify whether this taret supports multiversioning of functions,
+  /// Identify whether this taret supports multiversioning of functions,
   /// which requires support for cpu_supports and cpu_is functionality.
   virtual bool supportsMultiVersioning() const { return false; }
 
-  // \brief Validate the contents of the __builtin_cpu_supports(const char*)
+  // Validate the contents of the __builtin_cpu_supports(const char*)
   // argument.
   virtual bool validateCpuSupports(StringRef Name) const { return false; }
 
-  // \brief Return the target-specific priority for features/cpus/vendors so
+  // Return the target-specific priority for features/cpus/vendors so
   // that they can be properly sorted for checking.
   virtual unsigned multiVersionSortPriority(StringRef Name) const {
     return 0;
   }
 
-  // \brief Validate the contents of the __builtin_cpu_is(const char*)
+  // Validate the contents of the __builtin_cpu_is(const char*)
   // argument.
   virtual bool validateCpuIs(StringRef Name) const { return false; }
 
-  // \brief Returns maximal number of args passed in registers.
+  // Validate a cpu_dispatch/cpu_specific CPU option, which is a different list
+  // from cpu_is, since it checks via features rather than CPUs directly.
+  virtual bool validateCPUSpecificCPUDispatch(StringRef Name) const {
+    return false;
+  }
+
+  // Get the character to be added for mangling purposes for cpu_specific.
+  virtual char CPUSpecificManglingCharacter(StringRef Name) const {
+    llvm_unreachable(
+        "cpu_specific Multiversioning not implemented on this target");
+  }
+
+  // Get a list of the features that make up the CPU option for
+  // cpu_specific/cpu_dispatch so that it can be passed to llvm as optimization
+  // options.
+  virtual void getCPUSpecificCPUDispatchFeatures(
+      StringRef Name, llvm::SmallVectorImpl<StringRef> &Features) const {
+    llvm_unreachable(
+        "cpu_specific Multiversioning not implemented on this target");
+  }
+
+  // Returns maximal number of args passed in registers.
   unsigned getRegParmMax() const {
     assert(RegParmMax < 7 && "RegParmMax value is larger than AST can handle");
     return RegParmMax;
   }
 
-  /// \brief Whether the target supports thread-local storage.
+  /// Whether the target supports thread-local storage.
   bool isTLSSupported() const {
     return TLSSupported;
   }
 
-  /// \brief Return the maximum alignment (in bits) of a TLS variable
+  /// Return the maximum alignment (in bits) of a TLS variable
   ///
   /// Gets the maximum alignment (in bits) of a TLS variable on this target.
   /// Returns zero if there is no such constraint.
@@ -965,17 +1140,18 @@
     return MaxTLSAlign;
   }
 
-  /// \brief Whether target supports variable-length arrays.
+  /// Whether target supports variable-length arrays.
   bool isVLASupported() const { return VLASupported; }
 
-  /// \brief Whether the target supports SEH __try.
+  /// Whether the target supports SEH __try.
   bool isSEHTrySupported() const {
     return getTriple().isOSWindows() &&
            (getTriple().getArch() == llvm::Triple::x86 ||
-            getTriple().getArch() == llvm::Triple::x86_64);
+            getTriple().getArch() == llvm::Triple::x86_64 ||
+            getTriple().getArch() == llvm::Triple::aarch64);
   }
 
-  /// \brief Return true if {|} are normal characters in the asm string.
+  /// Return true if {|} are normal characters in the asm string.
   ///
   /// If this returns false (the default), then {abc|xyz} is syntax
   /// that says that when compiling for asm variant #0, "abc" should be
@@ -985,7 +1161,7 @@
     return NoAsmVariants;
   }
 
-  /// \brief Return the register number that __builtin_eh_return_regno would
+  /// Return the register number that __builtin_eh_return_regno would
   /// return with the specified argument.
   /// This corresponds with TargetLowering's getExceptionPointerRegister
   /// and getExceptionSelectorRegister in the backend.
@@ -993,14 +1169,26 @@
     return -1;
   }
 
-  /// \brief Return the section to use for C++ static initialization functions.
+  /// Return the section to use for C++ static initialization functions.
   virtual const char *getStaticInitSectionSpecifier() const {
     return nullptr;
   }
 
   const LangASMap &getAddressSpaceMap() const { return *AddrSpaceMap; }
 
-  /// \brief Return an AST address space which can be used opportunistically
+  /// Map from the address space field in builtin description strings to the
+  /// language address space.
+  virtual LangAS getOpenCLBuiltinAddressSpace(unsigned AS) const {
+    return getLangASFromTargetAS(AS);
+  }
+
+  /// Map from the address space field in builtin description strings to the
+  /// language address space.
+  virtual LangAS getCUDABuiltinAddressSpace(unsigned AS) const {
+    return getLangASFromTargetAS(AS);
+  }
+
+  /// Return an AST address space which can be used opportunistically
   /// for constant global memory. It must be possible to convert pointers into
   /// this address space to LangAS::Default. If no such address space exists,
   /// this may return None, and such optimizations will be disabled.
@@ -1008,11 +1196,11 @@
     return LangAS::Default;
   }
 
-  /// \brief Retrieve the name of the platform as it is used in the
+  /// Retrieve the name of the platform as it is used in the
   /// availability attribute.
   StringRef getPlatformName() const { return PlatformName; }
 
-  /// \brief Retrieve the minimum desired version of the platform, to
+  /// Retrieve the minimum desired version of the platform, to
   /// which the program should be compiled.
   VersionTuple getPlatformMinVersion() const { return PlatformMinVersion; }
 
@@ -1025,7 +1213,7 @@
     CCMT_NonMember
   };
 
-  /// \brief Gets the default calling convention for the given target and
+  /// Gets the default calling convention for the given target and
   /// declaration context.
   virtual CallingConv getDefaultCallingConv(CallingConvMethodType MT) const {
     // Not all targets will specify an explicit calling convention that we can
@@ -1040,7 +1228,7 @@
     CCCR_Ignore,
   };
 
-  /// \brief Determines whether a given calling convention is valid for the
+  /// Determines whether a given calling convention is valid for the
   /// target. A calling convention can either be accepted, produce a warning
   /// and be substituted with the default calling convention, or (someday)
   /// produce an error (such as using thiscall on a non-instance function).
@@ -1056,7 +1244,7 @@
   enum CallingConvKind {
     CCK_Default,
     CCK_ClangABI4OrPS4,
-    CCK_MicrosoftX86_64
+    CCK_MicrosoftWin64
   };
 
   virtual CallingConvKind getCallingConvKind(bool ClangABICompat4) const;
@@ -1069,35 +1257,31 @@
 
   /// Check if the target supports CFProtection branch.
   virtual bool
-  checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const {
-    return false;
-  }
+  checkCFProtectionBranchSupported(DiagnosticsEngine &Diags) const;
 
   /// Check if the target supports CFProtection branch.
   virtual bool
-  checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const {
-    return false;
-  }
+  checkCFProtectionReturnSupported(DiagnosticsEngine &Diags) const;
 
-  /// \brief Whether target allows to overalign ABI-specified preferred alignment
+  /// Whether target allows to overalign ABI-specified preferred alignment
   virtual bool allowsLargerPreferedTypeAlignment() const { return true; }
 
-  /// \brief Set supported OpenCL extensions and optional core features.
+  /// Set supported OpenCL extensions and optional core features.
   virtual void setSupportedOpenCLOpts() {}
 
-  /// \brief Set supported OpenCL extensions as written on command line
+  /// Set supported OpenCL extensions as written on command line
   virtual void setOpenCLExtensionOpts() {
     for (const auto &Ext : getTargetOpts().OpenCLExtensionsAsWritten) {
       getTargetOpts().SupportedOpenCLOptions.support(Ext);
     }
   }
 
-  /// \brief Get supported OpenCL extensions and optional core features.
+  /// Get supported OpenCL extensions and optional core features.
   OpenCLOptions &getSupportedOpenCLOpts() {
     return getTargetOpts().SupportedOpenCLOptions;
   }
 
-  /// \brief Get const supported OpenCL extensions and optional core features.
+  /// Get const supported OpenCL extensions and optional core features.
   const OpenCLOptions &getSupportedOpenCLOpts() const {
       return getTargetOpts().SupportedOpenCLOptions;
   }
@@ -1113,7 +1297,7 @@
     OCLTK_Sampler,
   };
 
-  /// \brief Get address space for OpenCL type.
+  /// Get address space for OpenCL type.
   virtual LangAS getOpenCLTypeAddrSpace(OpenCLTypeKind TK) const;
 
   /// \returns Target specific vtbl ptr address space.
@@ -1131,7 +1315,7 @@
     return None;
   }
 
-  /// \brief Check the target is valid after it is fully initialized.
+  /// Check the target is valid after it is fully initialized.
   virtual bool validateTarget(DiagnosticsEngine &Diags) const {
     return true;
   }
@@ -1151,6 +1335,11 @@
   virtual ArrayRef<AddlRegName> getGCCAddlRegNames() const {
     return None;
   }
+
+ private:
+  // Assert the values for the fractional and integral bits for each fixed point
+  // type follow the restrictions given in clause 6.2.6.3 of N1169.
+  void CheckFixedPointBits() const;
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/TargetOptions.h b/linux-x64/clang/include/clang/Basic/TargetOptions.h
index bd57393..31a6742 100644
--- a/linux-x64/clang/include/clang/Basic/TargetOptions.h
+++ b/linux-x64/clang/include/clang/Basic/TargetOptions.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::TargetOptions class.
+/// Defines the clang::TargetOptions class.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -22,7 +22,7 @@
 
 namespace clang {
 
-/// \brief Options for controlling the target.
+/// Options for controlling the target.
 class TargetOptions {
 public:
   /// The name of the target triple to compile for.
@@ -47,7 +47,7 @@
   /// If given, the version string of the linker in use.
   std::string LinkerVersion;
 
-  /// \brief The list of target specific features to enable or disable, as written on the command line.
+  /// The list of target specific features to enable or disable, as written on the command line.
   std::vector<std::string> FeaturesAsWritten;
 
   /// The list of target specific features to enable or disable -- this should
@@ -57,12 +57,16 @@
   /// Supported OpenCL extensions and optional core features.
   OpenCLOptions SupportedOpenCLOptions;
 
-  /// \brief The list of OpenCL extensions to enable or disable, as written on
+  /// The list of OpenCL extensions to enable or disable, as written on
   /// the command line.
   std::vector<std::string> OpenCLExtensionsAsWritten;
 
-  /// \brief If given, enables support for __int128_t and __uint128_t types.
+  /// If given, enables support for __int128_t and __uint128_t types.
   bool ForceEnableInt128 = false;
+
+  /// \brief If enabled, use 32-bit pointers for accessing const/local/shared
+  /// address space.
+  bool NVPTXUseShortPointers = false;
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/Basic/TemplateKinds.h b/linux-x64/clang/include/clang/Basic/TemplateKinds.h
index ac99ad1..a0bc362 100644
--- a/linux-x64/clang/include/clang/Basic/TemplateKinds.h
+++ b/linux-x64/clang/include/clang/Basic/TemplateKinds.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::TemplateNameKind enum.
+/// Defines the clang::TemplateNameKind enum.
 ///
 //===----------------------------------------------------------------------===//
 #ifndef LLVM_CLANG_BASIC_TEMPLATEKINDS_H
@@ -16,7 +16,7 @@
 
 namespace clang {
 
-/// \brief Specifies the kind of template name that an identifier refers to.
+/// Specifies the kind of template name that an identifier refers to.
 /// Be careful when changing this: this enumeration is used in diagnostics.
 enum TemplateNameKind {
   /// The name does not refer to a template.
@@ -31,7 +31,7 @@
   /// The name refers to a variable template whose specialization produces a
   /// variable.
   TNK_Var_template,
-  /// The name refers to a dependent template name: 
+  /// The name refers to a dependent template name:
   /// \code
   /// template<typename MetaFun, typename T1, typename T2> struct apply2 {
   ///   typedef typename MetaFun::template apply<T1, T2>::type type;
@@ -39,7 +39,7 @@
   /// \endcode
   ///
   /// Here, "apply" is a dependent template name within the typename
-  /// specifier in the typedef. "apply" is a nested template, and 
+  /// specifier in the typedef. "apply" is a nested template, and
   /// whether the template name is assumed to refer to a type template or a
   /// function template depends on the context in which the template
   /// name occurs.
diff --git a/linux-x64/clang/include/clang/Basic/TokenKinds.def b/linux-x64/clang/include/clang/Basic/TokenKinds.def
index f18e06f..30cb022 100644
--- a/linux-x64/clang/include/clang/Basic/TokenKinds.def
+++ b/linux-x64/clang/include/clang/Basic/TokenKinds.def
@@ -249,8 +249,10 @@
 //   KEYMS    - This is a keyword if Microsoft extensions are enabled
 //   KEYNOMS18 - This is a keyword that must never be enabled under
 //               MSVC <= v18.
-//   KEYOPENCL  - This is a keyword in OpenCL
-//   KEYNOOPENCL  - This is a keyword that is not supported in OpenCL
+//   KEYOPENCLC   - This is a keyword in OpenCL C
+//   KEYOPENCLCXX - This is a keyword in OpenCL C++
+//   KEYNOOPENCL  - This is a keyword that is not supported in OpenCL C
+//                  nor in OpenCL C++.
 //   KEYALTIVEC - This is a keyword in AltiVec
 //   KEYZVECTOR - This is a keyword for the System z vector extensions,
 //                which are heavily based on AltiVec
@@ -260,6 +262,7 @@
 //   BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
 //   HALFSUPPORT - This is a keyword if 'half' is a built-in type
 //   WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
+//   CHAR8SUPPORT - This is a keyword if 'char8_t' is a built-in type
 //
 KEYWORD(auto                        , KEYALL)
 KEYWORD(break                       , KEYALL)
@@ -380,9 +383,17 @@
 MODULES_KEYWORD(module)
 MODULES_KEYWORD(import)
 
+// C++ char8_t proposal
+KEYWORD(char8_t                     , CHAR8SUPPORT)
+
 // C11 Extension
 KEYWORD(_Float16                    , KEYALL)
 
+// ISO/IEC JTC1 SC22 WG14 N1169 Extension
+KEYWORD(_Accum                      , KEYNOCXX)
+KEYWORD(_Fract                      , KEYNOCXX)
+KEYWORD(_Sat                        , KEYNOCXX)
+
 // GNU Extensions (in impl-reserved namespace)
 KEYWORD(_Decimal32                  , KEYALL)
 KEYWORD(_Decimal64                  , KEYALL)
@@ -414,6 +425,7 @@
 KEYWORD(__FUNCDNAME__               , KEYMS)
 KEYWORD(__FUNCSIG__                 , KEYMS)
 KEYWORD(L__FUNCTION__               , KEYMS)
+KEYWORD(L__FUNCSIG__                , KEYMS)
 TYPE_TRAIT_1(__is_interface_class, IsInterfaceClass, KEYMS)
 TYPE_TRAIT_1(__is_sealed, IsSealed, KEYMS)
 
@@ -521,36 +533,36 @@
 KEYWORD(__super                     , KEYMS)
 
 // OpenCL address space qualifiers
-KEYWORD(__global                    , KEYOPENCL)
-KEYWORD(__local                     , KEYOPENCL)
-KEYWORD(__constant                  , KEYOPENCL)
-KEYWORD(__private                   , KEYOPENCL)
-KEYWORD(__generic                   , KEYOPENCL)
-ALIAS("global", __global            , KEYOPENCL)
-ALIAS("local", __local              , KEYOPENCL)
-ALIAS("constant", __constant        , KEYOPENCL)
-ALIAS("private", __private          , KEYOPENCL)
-ALIAS("generic", __generic          , KEYOPENCL)
+KEYWORD(__global                    , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__local                     , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__constant                  , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__private                   , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__generic                   , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("global", __global            , KEYOPENCLC)
+ALIAS("local", __local              , KEYOPENCLC)
+ALIAS("constant", __constant        , KEYOPENCLC)
+ALIAS("private", __private          , KEYOPENCLC)
+ALIAS("generic", __generic          , KEYOPENCLC)
 // OpenCL function qualifiers
-KEYWORD(__kernel                    , KEYOPENCL)
-ALIAS("kernel", __kernel            , KEYOPENCL)
+KEYWORD(__kernel                    , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("kernel", __kernel            , KEYOPENCLC | KEYOPENCLCXX)
 // OpenCL access qualifiers
-KEYWORD(__read_only                 , KEYOPENCL)
-KEYWORD(__write_only                , KEYOPENCL)
-KEYWORD(__read_write                , KEYOPENCL)
-ALIAS("read_only", __read_only      , KEYOPENCL)
-ALIAS("write_only", __write_only    , KEYOPENCL)
-ALIAS("read_write", __read_write    , KEYOPENCL)
+KEYWORD(__read_only                 , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__write_only                , KEYOPENCLC | KEYOPENCLCXX)
+KEYWORD(__read_write                , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("read_only", __read_only      , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("write_only", __write_only    , KEYOPENCLC | KEYOPENCLCXX)
+ALIAS("read_write", __read_write    , KEYOPENCLC | KEYOPENCLCXX)
 // OpenCL builtins
-KEYWORD(__builtin_astype            , KEYOPENCL)
-KEYWORD(vec_step                    , KEYOPENCL|KEYALTIVEC|KEYZVECTOR)
-#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCL)
+KEYWORD(__builtin_astype            , KEYOPENCLC)
+KEYWORD(vec_step                    , KEYOPENCLC | KEYALTIVEC | KEYZVECTOR)
+#define GENERIC_IMAGE_TYPE(ImgType, Id) KEYWORD(ImgType##_t, KEYOPENCLC)
 #include "clang/Basic/OpenCLImageTypes.def"
 
 // OpenMP Type Traits
 KEYWORD(__builtin_omp_required_simd_align, KEYALL)
 
-KEYWORD(pipe                        , KEYOPENCL)
+KEYWORD(pipe                        , KEYOPENCLC)
 
 // Borland Extensions.
 KEYWORD(__pascal                    , KEYALL)
diff --git a/linux-x64/clang/include/clang/Basic/TokenKinds.h b/linux-x64/clang/include/clang/Basic/TokenKinds.h
index f4ecb3e..fb4b525 100644
--- a/linux-x64/clang/include/clang/Basic/TokenKinds.h
+++ b/linux-x64/clang/include/clang/Basic/TokenKinds.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::TokenKind enum and support functions.
+/// Defines the clang::TokenKind enum and support functions.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -21,14 +21,14 @@
 
 namespace tok {
 
-/// \brief Provides a simple uniform namespace for tokens from all C languages.
+/// Provides a simple uniform namespace for tokens from all C languages.
 enum TokenKind : unsigned short {
 #define TOK(X) X,
 #include "clang/Basic/TokenKinds.def"
   NUM_TOKENS
 };
 
-/// \brief Provides a namespace for preprocessor keywords which start with a
+/// Provides a namespace for preprocessor keywords which start with a
 /// '#' at the beginning of the line.
 enum PPKeywordKind {
 #define PPKEYWORD(X) pp_##X,
@@ -36,7 +36,7 @@
   NUM_PP_KEYWORDS
 };
 
-/// \brief Provides a namespace for Objective-C keywords which start with
+/// Provides a namespace for Objective-C keywords which start with
 /// an '@'.
 enum ObjCKeywordKind {
 #define OBJC1_AT_KEYWORD(X) objc_##X,
@@ -45,18 +45,18 @@
   NUM_OBJC_KEYWORDS
 };
 
-/// \brief Defines the possible values of an on-off-switch (C99 6.10.6p2).
+/// Defines the possible values of an on-off-switch (C99 6.10.6p2).
 enum OnOffSwitch {
   OOS_ON, OOS_OFF, OOS_DEFAULT
 };
 
-/// \brief Determines the name of a token as used within the front end.
+/// Determines the name of a token as used within the front end.
 ///
 /// The name of a token will be an internal name (such as "l_square")
 /// and should not be used as part of diagnostic messages.
 const char *getTokenName(TokenKind Kind) LLVM_READNONE;
 
-/// \brief Determines the spelling of simple punctuation tokens like
+/// Determines the spelling of simple punctuation tokens like
 /// '!' or '%', and returns NULL for literal and annotation tokens.
 ///
 /// This routine only retrieves the "simple" spelling of the token,
@@ -65,16 +65,16 @@
 /// Preprocessor::getSpelling().
 const char *getPunctuatorSpelling(TokenKind Kind) LLVM_READNONE;
 
-/// \brief Determines the spelling of simple keyword and contextual keyword
+/// Determines the spelling of simple keyword and contextual keyword
 /// tokens like 'int' and 'dynamic_cast'. Returns NULL for other token kinds.
 const char *getKeywordSpelling(TokenKind Kind) LLVM_READNONE;
 
-/// \brief Return true if this is a raw identifier or an identifier kind.
+/// Return true if this is a raw identifier or an identifier kind.
 inline bool isAnyIdentifier(TokenKind K) {
   return (K == tok::identifier) || (K == tok::raw_identifier);
 }
 
-/// \brief Return true if this is a C or C++ string-literal (or
+/// Return true if this is a C or C++ string-literal (or
 /// C++11 user-defined-string-literal) token.
 inline bool isStringLiteral(TokenKind K) {
   return K == tok::string_literal || K == tok::wide_string_literal ||
@@ -82,7 +82,7 @@
          K == tok::utf32_string_literal;
 }
 
-/// \brief Return true if this is a "literal" kind, like a numeric
+/// Return true if this is a "literal" kind, like a numeric
 /// constant, string, etc.
 inline bool isLiteral(TokenKind K) {
   return K == tok::numeric_constant || K == tok::char_constant ||
@@ -91,7 +91,7 @@
          isStringLiteral(K) || K == tok::angle_string_literal;
 }
 
-/// \brief Return true if this is any of tok::annot_* kinds.
+/// Return true if this is any of tok::annot_* kinds.
 inline bool isAnnotation(TokenKind K) {
 #define ANNOTATION(NAME) \
   if (K == tok::annot_##NAME) \
diff --git a/linux-x64/clang/include/clang/Basic/TypeTraits.h b/linux-x64/clang/include/clang/Basic/TypeTraits.h
index 509e8b4..bdb4268 100644
--- a/linux-x64/clang/include/clang/Basic/TypeTraits.h
+++ b/linux-x64/clang/include/clang/Basic/TypeTraits.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines enumerations for the type traits support.
+/// Defines enumerations for the type traits support.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -17,7 +17,7 @@
 
 namespace clang {
 
-  /// \brief Names for traits that operate specifically on types.
+  /// Names for traits that operate specifically on types.
   enum TypeTrait {
     UTT_HasNothrowAssign,
     UTT_HasNothrowMoveAssign,
@@ -87,13 +87,13 @@
     TT_IsTriviallyConstructible
   };
 
-  /// \brief Names for the array type traits.
+  /// Names for the array type traits.
   enum ArrayTypeTrait {
     ATT_ArrayRank,
     ATT_ArrayExtent
   };
 
-  /// \brief Names for the "expression or type" traits.
+  /// Names for the "expression or type" traits.
   enum UnaryExprOrTypeTrait {
     UETT_SizeOf,
     UETT_AlignOf,
diff --git a/linux-x64/clang/include/clang/Basic/Version.h b/linux-x64/clang/include/clang/Basic/Version.h
index 57dcf92..6d625c6 100644
--- a/linux-x64/clang/include/clang/Basic/Version.h
+++ b/linux-x64/clang/include/clang/Basic/Version.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines version macros and version-related utility functions
+/// Defines version macros and version-related utility functions
 /// for Clang.
 ///
 //===----------------------------------------------------------------------===//
@@ -20,40 +20,40 @@
 #include "llvm/ADT/StringRef.h"
 
 namespace clang {
-  /// \brief Retrieves the repository path (e.g., Subversion path) that
+  /// Retrieves the repository path (e.g., Subversion path) that
   /// identifies the particular Clang branch, tag, or trunk from which this
   /// Clang was built.
   std::string getClangRepositoryPath();
 
-  /// \brief Retrieves the repository path from which LLVM was built.
+  /// Retrieves the repository path from which LLVM was built.
   ///
   /// This supports LLVM residing in a separate repository from clang.
   std::string getLLVMRepositoryPath();
 
-  /// \brief Retrieves the repository revision number (or identifer) from which
+  /// Retrieves the repository revision number (or identifier) from which
   /// this Clang was built.
   std::string getClangRevision();
 
-  /// \brief Retrieves the repository revision number (or identifer) from which
+  /// Retrieves the repository revision number (or identifier) from which
   /// LLVM was built.
   ///
   /// If Clang and LLVM are in the same repository, this returns the same
   /// string as getClangRevision.
   std::string getLLVMRevision();
 
-  /// \brief Retrieves the full repository version that is an amalgamation of
+  /// Retrieves the full repository version that is an amalgamation of
   /// the information in getClangRepositoryPath() and getClangRevision().
   std::string getClangFullRepositoryVersion();
 
-  /// \brief Retrieves a string representing the complete clang version,
+  /// Retrieves a string representing the complete clang version,
   /// which includes the clang version number, the repository version,
   /// and the vendor tag.
   std::string getClangFullVersion();
 
-  /// \brief Like getClangFullVersion(), but with a custom tool name.
+  /// Like getClangFullVersion(), but with a custom tool name.
   std::string getClangToolFullVersion(llvm::StringRef ToolName);
 
-  /// \brief Retrieves a string representing the complete clang version suitable
+  /// Retrieves a string representing the complete clang version suitable
   /// for use in the CPP __VERSION__ macro, which includes the clang version
   /// number, the repository version, and the vendor tag.
   std::string getClangFullCPPVersion();
diff --git a/linux-x64/clang/include/clang/Basic/Version.inc b/linux-x64/clang/include/clang/Basic/Version.inc
index 46d60f7..27610c3 100644
--- a/linux-x64/clang/include/clang/Basic/Version.inc
+++ b/linux-x64/clang/include/clang/Basic/Version.inc
@@ -1,5 +1,5 @@
-#define CLANG_VERSION 7.0.2
-#define CLANG_VERSION_STRING "7.0.2"
-#define CLANG_VERSION_MAJOR 7
+#define CLANG_VERSION 8.0.1
+#define CLANG_VERSION_STRING "8.0.1"
+#define CLANG_VERSION_MAJOR 8
 #define CLANG_VERSION_MINOR 0
-#define CLANG_VERSION_PATCHLEVEL 2
+#define CLANG_VERSION_PATCHLEVEL 1
diff --git a/linux-x64/clang/include/clang/Basic/VersionTuple.h b/linux-x64/clang/include/clang/Basic/VersionTuple.h
deleted file mode 100644
index da3b019..0000000
--- a/linux-x64/clang/include/clang/Basic/VersionTuple.h
+++ /dev/null
@@ -1,168 +0,0 @@
-//===- VersionTuple.h - Version Number Handling -----------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-///
-/// \file
-/// \brief Defines the clang::VersionTuple class, which represents a version in
-/// the form major[.minor[.subminor]].
-///
-//===----------------------------------------------------------------------===//
-#ifndef LLVM_CLANG_BASIC_VERSIONTUPLE_H
-#define LLVM_CLANG_BASIC_VERSIONTUPLE_H
-
-#include "clang/Basic/LLVM.h"
-#include "llvm/ADT/Optional.h"
-#include <string>
-#include <tuple>
-
-namespace clang {
-
-/// \brief Represents a version number in the form major[.minor[.subminor[.build]]].
-class VersionTuple {
-  unsigned Major : 31;
-
-  unsigned UsesUnderscores : 1;
-
-  unsigned Minor : 31;
-  unsigned HasMinor : 1;
-
-  unsigned Subminor : 31;
-  unsigned HasSubminor : 1;
-
-  unsigned Build : 31;
-  unsigned HasBuild : 1;
-
-public:
-  VersionTuple()
-      : Major(0), UsesUnderscores(false), Minor(0), HasMinor(false),
-        Subminor(0), HasSubminor(false), Build(0), HasBuild(false) {}
-
-  explicit VersionTuple(unsigned Major)
-      : Major(Major), UsesUnderscores(false), Minor(0), HasMinor(false),
-        Subminor(0), HasSubminor(false), Build(0), HasBuild(false) {}
-
-  explicit VersionTuple(unsigned Major, unsigned Minor,
-                        bool UsesUnderscores = false)
-      : Major(Major), UsesUnderscores(UsesUnderscores), Minor(Minor),
-        HasMinor(true), Subminor(0), HasSubminor(false), Build(0),
-        HasBuild(false) {}
-
-  explicit VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor,
-                        bool UsesUnderscores = false)
-      : Major(Major), UsesUnderscores(UsesUnderscores), Minor(Minor),
-        HasMinor(true), Subminor(Subminor), HasSubminor(true), Build(0),
-        HasBuild(false) {}
-
-  explicit VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor,
-                        unsigned Build, bool UsesUnderscores = false)
-      : Major(Major), UsesUnderscores(UsesUnderscores), Minor(Minor),
-        HasMinor(true), Subminor(Subminor), HasSubminor(true), Build(Build),
-        HasBuild(true) {}
-
-  /// \brief Determine whether this version information is empty
-  /// (e.g., all version components are zero).
-  bool empty() const {
-    return Major == 0 && Minor == 0 && Subminor == 0 && Build == 0;
-  }
-
-  /// \brief Retrieve the major version number.
-  unsigned getMajor() const { return Major; }
-
-  /// \brief Retrieve the minor version number, if provided.
-  Optional<unsigned> getMinor() const {
-    if (!HasMinor)
-      return None;
-    return Minor;
-  }
-
-  /// \brief Retrieve the subminor version number, if provided.
-  Optional<unsigned> getSubminor() const {
-    if (!HasSubminor)
-      return None;
-    return Subminor;
-  }
-
-  /// \brief Retrieve the build version number, if provided.
-  Optional<unsigned> getBuild() const {
-    if (!HasBuild)
-      return None;
-    return Build;
-  }
-
-  bool usesUnderscores() const {
-    return UsesUnderscores;
-  }
-
-  void UseDotAsSeparator() {
-    UsesUnderscores = false;
-  }
-  
-  /// \brief Determine if two version numbers are equivalent. If not
-  /// provided, minor and subminor version numbers are considered to be zero.
-  friend bool operator==(const VersionTuple& X, const VersionTuple &Y) {
-    return X.Major == Y.Major && X.Minor == Y.Minor &&
-           X.Subminor == Y.Subminor && X.Build == Y.Build;
-  }
-
-  /// \brief Determine if two version numbers are not equivalent.
-  ///
-  /// If not provided, minor and subminor version numbers are considered to be 
-  /// zero.
-  friend bool operator!=(const VersionTuple &X, const VersionTuple &Y) {
-    return !(X == Y);
-  }
-
-  /// \brief Determine whether one version number precedes another.
-  ///
-  /// If not provided, minor and subminor version numbers are considered to be
-  /// zero.
-  friend bool operator<(const VersionTuple &X, const VersionTuple &Y) {
-    return std::tie(X.Major, X.Minor, X.Subminor, X.Build) <
-           std::tie(Y.Major, Y.Minor, Y.Subminor, Y.Build);
-  }
-
-  /// \brief Determine whether one version number follows another.
-  ///
-  /// If not provided, minor and subminor version numbers are considered to be
-  /// zero.
-  friend bool operator>(const VersionTuple &X, const VersionTuple &Y) {
-    return Y < X;
-  }
-
-  /// \brief Determine whether one version number precedes or is
-  /// equivalent to another. 
-  ///
-  /// If not provided, minor and subminor version numbers are considered to be
-  /// zero.
-  friend bool operator<=(const VersionTuple &X, const VersionTuple &Y) {
-    return !(Y < X);
-  }
-
-  /// \brief Determine whether one version number follows or is
-  /// equivalent to another.
-  ///
-  /// If not provided, minor and subminor version numbers are considered to be
-  /// zero.
-  friend bool operator>=(const VersionTuple &X, const VersionTuple &Y) {
-    return !(X < Y);
-  }
-
-  /// \brief Retrieve a string representation of the version number.
-  std::string getAsString() const;
-
-  /// \brief Try to parse the given string as a version number.
-  /// \returns \c true if the string does not match the regular expression
-  ///   [0-9]+(\.[0-9]+){0,3}
-  bool tryParse(StringRef string);
-};
-
-/// \brief Print a version number.
-raw_ostream& operator<<(raw_ostream &Out, const VersionTuple &V);
-
-} // end namespace clang
-#endif // LLVM_CLANG_BASIC_VERSIONTUPLE_H
diff --git a/linux-x64/clang/include/clang/Basic/VirtualFileSystem.h b/linux-x64/clang/include/clang/Basic/VirtualFileSystem.h
index ec7cd6f..2480b91 100644
--- a/linux-x64/clang/include/clang/Basic/VirtualFileSystem.h
+++ b/linux-x64/clang/include/clang/Basic/VirtualFileSystem.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the virtual file system interface vfs::FileSystem.
+/// Defines the virtual file system interface vfs::FileSystem.
 //
 //===----------------------------------------------------------------------===//
 
@@ -45,7 +45,7 @@
 namespace clang {
 namespace vfs {
 
-/// \brief The result of a \p status operation.
+/// The result of a \p status operation.
 class Status {
   std::string Name;
   llvm::sys::fs::UniqueID UID;
@@ -72,7 +72,7 @@
   static Status copyWithNewName(const llvm::sys::fs::file_status &In,
                                 StringRef NewName);
 
-  /// \brief Returns the name that should be used for this file or directory.
+  /// Returns the name that should be used for this file or directory.
   StringRef getName() const { return Name; }
 
   /// @name Status interface from llvm::sys::fs
@@ -98,18 +98,18 @@
   /// @}
 };
 
-/// \brief Represents an open file.
+/// Represents an open file.
 class File {
 public:
-  /// \brief Destroy the file after closing it (if open).
+  /// Destroy the file after closing it (if open).
   /// Sub-classes should generally call close() inside their destructors.  We
   /// cannot do that from the base class, since close is virtual.
   virtual ~File();
 
-  /// \brief Get the status of the file.
+  /// Get the status of the file.
   virtual llvm::ErrorOr<Status> status() = 0;
 
-  /// \brief Get the name of the file
+  /// Get the name of the file
   virtual llvm::ErrorOr<std::string> getName() {
     if (auto Status = status())
       return Status->getName().str();
@@ -117,23 +117,23 @@
       return Status.getError();
   }
 
-  /// \brief Get the contents of the file as a \p MemoryBuffer.
+  /// Get the contents of the file as a \p MemoryBuffer.
   virtual llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>>
   getBuffer(const Twine &Name, int64_t FileSize = -1,
             bool RequiresNullTerminator = true, bool IsVolatile = false) = 0;
 
-  /// \brief Closes the file.
+  /// Closes the file.
   virtual std::error_code close() = 0;
 };
 
 namespace detail {
 
-/// \brief An interface for virtual file systems to provide an iterator over the
+/// An interface for virtual file systems to provide an iterator over the
 /// (non-recursive) contents of a directory.
 struct DirIterImpl {
   virtual ~DirIterImpl();
 
-  /// \brief Sets \c CurrentEntry to the next entry in the directory on success,
+  /// Sets \c CurrentEntry to the next entry in the directory on success,
   /// or returns a system-defined \c error_code.
   virtual std::error_code increment() = 0;
 
@@ -142,7 +142,7 @@
 
 } // namespace detail
 
-/// \brief An input iterator over the entries in a virtual path, similar to
+/// An input iterator over the entries in a virtual path, similar to
 /// llvm::sys::fs::directory_iterator.
 class directory_iterator {
   std::shared_ptr<detail::DirIterImpl> Impl; // Input iterator semantics on copy
@@ -155,10 +155,10 @@
       Impl.reset(); // Normalize the end iterator to Impl == nullptr.
   }
 
-  /// \brief Construct an 'end' iterator.
+  /// Construct an 'end' iterator.
   directory_iterator() = default;
 
-  /// \brief Equivalent to operator++, with an error code.
+  /// Equivalent to operator++, with an error code.
   directory_iterator &increment(std::error_code &EC) {
     assert(Impl && "attempting to increment past end");
     EC = Impl->increment();
@@ -182,7 +182,7 @@
 
 class FileSystem;
 
-/// \brief An input iterator over the recursive contents of a virtual path,
+/// An input iterator over the recursive contents of a virtual path,
 /// similar to llvm::sys::fs::recursive_directory_iterator.
 class recursive_directory_iterator {
   using IterState =
@@ -195,10 +195,10 @@
   recursive_directory_iterator(FileSystem &FS, const Twine &Path,
                                std::error_code &EC);
 
-  /// \brief Construct an 'end' iterator.
+  /// Construct an 'end' iterator.
   recursive_directory_iterator() = default;
 
-  /// \brief Equivalent to operator++, with an error code.
+  /// Equivalent to operator++, with an error code.
   recursive_directory_iterator &increment(std::error_code &EC);
 
   const Status &operator*() const { return *State->top(); }
@@ -211,22 +211,22 @@
     return !(*this == RHS);
   }
 
-  /// \brief Gets the current level. Starting path is at level 0.
+  /// Gets the current level. Starting path is at level 0.
   int level() const {
     assert(!State->empty() && "Cannot get level without any iteration state");
     return State->size()-1;
   }
 };
 
-/// \brief The virtual file system interface.
+/// The virtual file system interface.
 class FileSystem : public llvm::ThreadSafeRefCountedBase<FileSystem> {
 public:
   virtual ~FileSystem();
 
-  /// \brief Get the status of the entry at \p Path, if one exists.
+  /// Get the status of the entry at \p Path, if one exists.
   virtual llvm::ErrorOr<Status> status(const Twine &Path) = 0;
 
-  /// \brief Get a \p File object for the file at \p Path, if one exists.
+  /// Get a \p File object for the file at \p Path, if one exists.
   virtual llvm::ErrorOr<std::unique_ptr<File>>
   openFileForRead(const Twine &Path) = 0;
 
@@ -236,7 +236,7 @@
   getBufferForFile(const Twine &Name, int64_t FileSize = -1,
                    bool RequiresNullTerminator = true, bool IsVolatile = false);
 
-  /// \brief Get a directory_iterator for \p Dir.
+  /// Get a directory_iterator for \p Dir.
   /// \note The 'end' iterator is directory_iterator().
   virtual directory_iterator dir_begin(const Twine &Dir,
                                        std::error_code &EC) = 0;
@@ -248,6 +248,12 @@
   /// Get the working directory of this file system.
   virtual llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const = 0;
 
+  /// Gets real path of \p Path e.g. collapse all . and .. patterns, resolve
+  /// symlinks. For real file system, this uses `llvm::sys::fs::real_path`.
+  /// This returns errc::operation_not_permitted if not implemented by subclass.
+  virtual std::error_code getRealPath(const Twine &Path,
+                                      SmallVectorImpl<char> &Output) const;
+
   /// Check whether a file exists. Provided for convenience.
   bool exists(const Twine &Path);
 
@@ -265,11 +271,11 @@
   std::error_code makeAbsolute(SmallVectorImpl<char> &Path) const;
 };
 
-/// \brief Gets an \p vfs::FileSystem for the 'real' file system, as seen by
+/// Gets an \p vfs::FileSystem for the 'real' file system, as seen by
 /// the operating system.
 IntrusiveRefCntPtr<FileSystem> getRealFileSystem();
 
-/// \brief A file system that allows overlaying one \p AbstractFileSystem on top
+/// A file system that allows overlaying one \p AbstractFileSystem on top
 /// of another.
 ///
 /// Consists of a stack of >=1 \p FileSystem objects, which are treated as being
@@ -282,14 +288,14 @@
 class OverlayFileSystem : public FileSystem {
   using FileSystemList = SmallVector<IntrusiveRefCntPtr<FileSystem>, 1>;
 
-  /// \brief The stack of file systems, implemented as a list in order of
+  /// The stack of file systems, implemented as a list in order of
   /// their addition.
   FileSystemList FSList;
 
 public:
   OverlayFileSystem(IntrusiveRefCntPtr<FileSystem> Base);
 
-  /// \brief Pushes a file system on top of the stack.
+  /// Pushes a file system on top of the stack.
   void pushOverlay(IntrusiveRefCntPtr<FileSystem> FS);
 
   llvm::ErrorOr<Status> status(const Twine &Path) override;
@@ -298,15 +304,20 @@
   directory_iterator dir_begin(const Twine &Dir, std::error_code &EC) override;
   llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override;
   std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
+  std::error_code getRealPath(const Twine &Path,
+                              SmallVectorImpl<char> &Output) const override;
 
   using iterator = FileSystemList::reverse_iterator;
-  
-  /// \brief Get an iterator pointing to the most recently added file system.
-  iterator overlays_begin() { return FSList.rbegin(); }
+  using const_iterator = FileSystemList::const_reverse_iterator;
 
-  /// \brief Get an iterator pointing one-past the least recently added file
+  /// Get an iterator pointing to the most recently added file system.
+  iterator overlays_begin() { return FSList.rbegin(); }
+  const_iterator overlays_begin() const { return FSList.rbegin(); }
+
+  /// Get an iterator pointing one-past the least recently added file
   /// system.
   iterator overlays_end() { return FSList.rend(); }
+  const_iterator overlays_end() const { return FSList.rend(); }
 };
 
 namespace detail {
@@ -363,14 +374,22 @@
   llvm::ErrorOr<std::string> getCurrentWorkingDirectory() const override {
     return WorkingDirectory;
   }
+  /// Canonicalizes \p Path by combining with the current working
+  /// directory and normalizing the path (e.g. remove dots). If the current
+  /// working directory is not set, this returns errc::operation_not_permitted.
+  ///
+  /// This doesn't resolve symlinks as they are not supported in in-memory file
+  /// system.
+  std::error_code getRealPath(const Twine &Path,
+                              SmallVectorImpl<char> &Output) const override;
 
   std::error_code setCurrentWorkingDirectory(const Twine &Path) override;
 };
 
-/// \brief Get a globally unique ID for a virtual file or directory.
+/// Get a globally unique ID for a virtual file or directory.
 llvm::sys::fs::UniqueID getNextVirtualUniqueID();
 
-/// \brief Gets a \p FileSystem for a virtual file system described in YAML
+/// Gets a \p FileSystem for a virtual file system described in YAML
 /// format.
 IntrusiveRefCntPtr<FileSystem>
 getVFSFromYAML(std::unique_ptr<llvm::MemoryBuffer> Buffer,
@@ -386,7 +405,7 @@
   std::string RPath;
 };
 
-/// \brief Collect all pairs of <virtual path, real path> entries from the
+/// Collect all pairs of <virtual path, real path> entries from the
 /// \p YAMLFilePath. This is used by the module dependency collector to forward
 /// the entries into the reproducer output VFS YAML file.
 void collectVFSFromYAML(
diff --git a/linux-x64/clang/include/clang/Basic/Visibility.h b/linux-x64/clang/include/clang/Basic/Visibility.h
index cc839d7..c5ab624 100644
--- a/linux-x64/clang/include/clang/Basic/Visibility.h
+++ b/linux-x64/clang/include/clang/Basic/Visibility.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::Visibility enumeration and various utility
+/// Defines the clang::Visibility enumeration and various utility
 /// functions.
 ///
 //===----------------------------------------------------------------------===//
@@ -16,10 +16,12 @@
 #define LLVM_CLANG_BASIC_VISIBILITY_H
 
 #include "clang/Basic/Linkage.h"
+#include <cassert>
+#include <cstdint>
 
 namespace clang {
 
-/// \brief Describes the different kinds of visibility that a declaration
+/// Describes the different kinds of visibility that a declaration
 /// may have.
 ///
 /// Visibility determines how a declaration interacts with the dynamic
diff --git a/linux-x64/clang/include/clang/Basic/X86Target.def b/linux-x64/clang/include/clang/Basic/X86Target.def
index 0bb7589..d2d2540 100644
--- a/linux-x64/clang/include/clang/Basic/X86Target.def
+++ b/linux-x64/clang/include/clang/Basic/X86Target.def
@@ -29,6 +29,14 @@
 #define FEATURE(ENUM)
 #endif
 
+#ifndef CPU_SPECIFIC
+#define CPU_SPECIFIC(NAME, MANGLING, FEATURES)
+#endif
+
+#ifndef CPU_SPECIFIC_ALIAS
+#define CPU_SPECIFIC_ALIAS(NEW_NAME, NAME)
+#endif
+
 #define PROC_64_BIT true
 #define PROC_32_BIT false
 
@@ -104,6 +112,9 @@
 PROC_ALIAS(Silvermont, "slm")
 
 PROC(Goldmont, "goldmont", PROC_64_BIT)
+PROC(GoldmontPlus, "goldmont-plus", PROC_64_BIT)
+
+PROC(Tremont, "tremont", PROC_64_BIT)
 //@}
 
 /// \name Nehalem
@@ -149,7 +160,11 @@
 
 /// \name Icelake Client
 /// Icelake client microarchitecture based processors.
-PROC(Icelake, "icelake", PROC_64_BIT)
+PROC(IcelakeClient, "icelake-client", PROC_64_BIT)
+
+/// \name Icelake Server
+/// Icelake server microarchitecture based processors.
+PROC(IcelakeServer, "icelake-server", PROC_64_BIT)
 
 /// \name Knights Landing
 /// Knights Landing processor.
@@ -269,6 +284,45 @@
 FEATURE(FEATURE_AVX5124FMAPS)
 FEATURE(FEATURE_AVX512VPOPCNTDQ)
 
+
+// FIXME: When commented out features are supported in LLVM, enable them here.
+CPU_SPECIFIC("generic", 'A', "")
+CPU_SPECIFIC("pentium", 'B', "")
+CPU_SPECIFIC("pentium_pro", 'C', "+cmov")
+CPU_SPECIFIC("pentium_mmx", 'D', "+mmx")
+CPU_SPECIFIC("pentium_ii", 'E', "+cmov,+mmx")
+CPU_SPECIFIC("pentium_iii", 'H', "+cmov,+mmx,+sse")
+CPU_SPECIFIC("pentium_iii_no_xmm_regs", 'H',"+cmov,+sse")
+CPU_SPECIFIC("pentium_4", 'J', "+cmov,+mmx,+sse,+sse2")
+CPU_SPECIFIC("pentium_m", 'K', "+cmov,+mmx,+sse,+sse2")
+CPU_SPECIFIC("pentium_4_sse3", 'L', "+cmov,+mmx,+sse,+sse2,+sse3")
+CPU_SPECIFIC("core_2_duo_ssse3", 'M', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3")
+CPU_SPECIFIC("core_2_duo_sse4_1", 'N', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1")
+CPU_SPECIFIC("atom", 'O', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+movbe")
+CPU_SPECIFIC("atom_sse4_2", 'c', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("core_i7_sse4_2", 'P', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("core_aes_pclmulqdq", 'Q', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt")
+CPU_SPECIFIC("atom_sse4_2_movbe", 'd', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt")
+CPU_SPECIFIC("goldmont", 'i', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt")
+CPU_SPECIFIC("sandybridge", 'R', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+avx")
+CPU_SPECIFIC_ALIAS("core_2nd_gen_avx", "sandybridge")
+CPU_SPECIFIC("ivybridge", 'S', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+f16c,+avx")
+CPU_SPECIFIC_ALIAS("core_3rd_gen_avx", "ivybridge")
+CPU_SPECIFIC("haswell", 'V', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2")
+CPU_SPECIFIC_ALIAS("core_4th_gen_avx", "haswell")
+CPU_SPECIFIC("core_4th_gen_avx_tsx", 'W', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2")
+CPU_SPECIFIC("broadwell", 'X', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx")
+CPU_SPECIFIC_ALIAS("core_5th_gen_avx", "broadwell")
+CPU_SPECIFIC("core_5th_gen_avx_tsx", 'Y', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx")
+CPU_SPECIFIC("knl", 'Z', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512f,+adx,+avx512er,+avx512pf,+avx512cd")
+CPU_SPECIFIC_ALIAS("mic_avx512", "knl")
+CPU_SPECIFIC("skylake", 'b', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+adx,+mpx")
+CPU_SPECIFIC( "skylake_avx512", 'a', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512dq,+avx512f,+adx,+avx512cd,+avx512bw,+avx512vl,+clwb")
+CPU_SPECIFIC("cannonlake", 'e', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512dq,+avx512f,+adx,+avx512ifma,+avx512cd,+avx512bw,+avx512vl,+avx512vbmi")
+CPU_SPECIFIC("knm", 'j', "+cmov,+mmx,+sse,+sse2,+sse3,+ssse3,+sse4.1,+sse4.2,+movbe,+popcnt,+f16c,+avx,+fma,+bmi,+lzcnt,+avx2,+avx512f,+adx,+avx512er,+avx512pf,+avx512cd,+avx5124fmaps,+avx5124vnniw,+avx512vpopcntdq")
+
+#undef CPU_SPECIFIC_ALIAS
+#undef CPU_SPECIFIC
 #undef PROC_64_BIT
 #undef PROC_32_BIT
 #undef FEATURE
diff --git a/linux-x64/clang/include/clang/Basic/XRayInstr.h b/linux-x64/clang/include/clang/Basic/XRayInstr.h
new file mode 100644
index 0000000..13c3032
--- /dev/null
+++ b/linux-x64/clang/include/clang/Basic/XRayInstr.h
@@ -0,0 +1,70 @@
+//===--- XRayInstr.h --------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// Defines the clang::XRayInstrKind enum.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_BASIC_XRAYINSTR_H
+#define LLVM_CLANG_BASIC_XRAYINSTR_H
+
+#include "clang/Basic/LLVM.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/MathExtras.h"
+#include <cassert>
+#include <cstdint>
+
+namespace clang {
+
+using XRayInstrMask = uint32_t;
+
+namespace XRayInstrKind {
+
+// TODO: Auto-generate these as we add more instrumentation kinds.
+enum XRayInstrOrdinal : XRayInstrMask {
+  XRIO_Function,
+  XRIO_Custom,
+  XRIO_Typed,
+  XRIO_Count
+};
+
+constexpr XRayInstrMask None = 0;
+constexpr XRayInstrMask Function = 1U << XRIO_Function;
+constexpr XRayInstrMask Custom = 1U << XRIO_Custom;
+constexpr XRayInstrMask Typed = 1U << XRIO_Typed;
+constexpr XRayInstrMask All = Function | Custom | Typed;
+
+} // namespace XRayInstrKind
+
+struct XRayInstrSet {
+  bool has(XRayInstrMask K) const {
+    assert(llvm::isPowerOf2_32(K));
+    return Mask & K;
+  }
+
+  bool hasOneOf(XRayInstrMask K) const { return Mask & K; }
+
+  void set(XRayInstrMask K, bool Value) {
+    assert(llvm::isPowerOf2_32(K));
+    Mask = Value ? (Mask | K) : (Mask & ~K);
+  }
+
+  void clear(XRayInstrMask K = XRayInstrKind::All) { Mask &= ~K; }
+
+  bool empty() const { return Mask == 0; }
+
+  XRayInstrMask Mask = 0;
+};
+
+XRayInstrMask parseXRayInstrValue(StringRef Value);
+
+} // namespace clang
+
+#endif // LLVM_CLANG_BASIC_XRAYINSTR_H
diff --git a/linux-x64/clang/include/clang/Basic/XRayLists.h b/linux-x64/clang/include/clang/Basic/XRayLists.h
index 8cfea70..244b1d5 100644
--- a/linux-x64/clang/include/clang/Basic/XRayLists.h
+++ b/linux-x64/clang/include/clang/Basic/XRayLists.h
@@ -26,12 +26,13 @@
 class XRayFunctionFilter {
   std::unique_ptr<llvm::SpecialCaseList> AlwaysInstrument;
   std::unique_ptr<llvm::SpecialCaseList> NeverInstrument;
+  std::unique_ptr<llvm::SpecialCaseList> AttrList;
   SourceManager &SM;
 
 public:
   XRayFunctionFilter(ArrayRef<std::string> AlwaysInstrumentPaths,
                      ArrayRef<std::string> NeverInstrumentPaths,
-                     SourceManager &SM);
+                     ArrayRef<std::string> AttrListPaths, SourceManager &SM);
 
   enum class ImbueAttribute {
     NONE,
diff --git a/linux-x64/clang/include/clang/Basic/arm_fp16.inc b/linux-x64/clang/include/clang/Basic/arm_fp16.inc
index 37fe19a..a05142f 100644
--- a/linux-x64/clang/include/clang/Basic/arm_fp16.inc
+++ b/linux-x64/clang/include/clang/Basic/arm_fp16.inc
@@ -94,17 +94,17 @@
 #endif
 
 #ifdef GET_NEON_IMMEDIATE_CHECK
-case NEON::BI__builtin_neon_vcvth_n_s32_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_s64_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_s16_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_u32_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_u64_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_u16_f16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_u32: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_u64: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_u16: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_s32: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_s64: i = 1; u = 0; break;
-case NEON::BI__builtin_neon_vcvth_n_f16_s16: i = 1; u = 0; break;
+case NEON::BI__builtin_neon_vcvth_n_s32_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_s64_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_s16_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u32_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u64_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_u16_f16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u64: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_u16: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s32: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s64: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvth_n_f16_s16: i = 1; l = 1; u = 15; break;
 #endif
 
diff --git a/linux-x64/clang/include/clang/Basic/arm_neon.inc b/linux-x64/clang/include/clang/Basic/arm_neon.inc
index 507b5cb..a482e63 100644
--- a/linux-x64/clang/include/clang/Basic/arm_neon.inc
+++ b/linux-x64/clang/include/clang/Basic/arm_neon.inc
@@ -234,6 +234,8 @@
 BUILTIN(__builtin_neon_vcvts_u32_f32, "Uif", "n")
 BUILTIN(__builtin_neon_vcvtx_f32_v, "V2fV16Sci", "n")
 BUILTIN(__builtin_neon_vcvtxd_f32_f64, "fd", "n")
+BUILTIN(__builtin_neon_vdot_v, "V8ScV8ScV8ScV8Sci", "n")
+BUILTIN(__builtin_neon_vdotq_v, "V16ScV16ScV16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vdupb_lane_i8, "ScV8ScIi", "n")
 BUILTIN(__builtin_neon_vdupb_laneq_i8, "ScV16ScIi", "n")
 BUILTIN(__builtin_neon_vdupd_lane_f64, "dV1dIi", "n")
@@ -569,6 +571,7 @@
 BUILTIN(__builtin_neon_vrndmq_v, "V16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vrndn_v, "V8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vrndnq_v, "V16ScV16Sci", "n")
+BUILTIN(__builtin_neon_vrndns_f32, "ff", "n")
 BUILTIN(__builtin_neon_vrndp_v, "V8ScV8Sci", "n")
 BUILTIN(__builtin_neon_vrndpq_v, "V16ScV16Sci", "n")
 BUILTIN(__builtin_neon_vrndq_v, "V16ScV16Sci", "n")
@@ -829,6 +832,8 @@
 case NEON::BI__builtin_neon_vcvtq_u32_v: mask = 0x4000000000000ULL; break;
 case NEON::BI__builtin_neon_vcvtq_u64_v: mask = 0x8000000000000ULL; break;
 case NEON::BI__builtin_neon_vcvtx_f32_v: mask = 0x40000000000ULL; break;
+case NEON::BI__builtin_neon_vdot_v: mask = 0x40004ULL; break;
+case NEON::BI__builtin_neon_vdotq_v: mask = 0x4000400000000ULL; break;
 case NEON::BI__builtin_neon_vext_v: mask = 0xf077fULL; break;
 case NEON::BI__builtin_neon_vextq_v: mask = 0xf077f00000000ULL; break;
 case NEON::BI__builtin_neon_vfma_lane_v: mask = 0x700ULL; break;
@@ -1168,16 +1173,16 @@
 case NEON::BI__builtin_neon_vst3q_lane_v: i = 4; u = RFT(TV, false, false); break;
 case NEON::BI__builtin_neon_vst4_lane_v: i = 5; u = RFT(TV, false, false); break;
 case NEON::BI__builtin_neon_vst4q_lane_v: i = 5; u = RFT(TV, false, false); break;
-case NEON::BI__builtin_neon_vcvtq_n_f16_v: i = 1; l = 1; u = 63; break;
-case NEON::BI__builtin_neon_vcvt_n_f16_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtq_n_f16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_f16_v: i = 1; l = 1; u = 15; break;
 case NEON::BI__builtin_neon_vcvtq_n_f32_v: i = 1; l = 1; u = 31; break;
 case NEON::BI__builtin_neon_vcvt_n_f32_v: i = 1; l = 1; u = 31; break;
-case NEON::BI__builtin_neon_vcvtq_n_s16_v: i = 1; l = 1; u = 63; break;
-case NEON::BI__builtin_neon_vcvt_n_s16_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtq_n_s16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_s16_v: i = 1; l = 1; u = 15; break;
 case NEON::BI__builtin_neon_vcvtq_n_s32_v: i = 1; l = 1; u = 31; break;
 case NEON::BI__builtin_neon_vcvt_n_s32_v: i = 1; l = 1; u = 31; break;
-case NEON::BI__builtin_neon_vcvtq_n_u16_v: i = 1; l = 1; u = 63; break;
-case NEON::BI__builtin_neon_vcvt_n_u16_v: i = 1; l = 1; u = 63; break;
+case NEON::BI__builtin_neon_vcvtq_n_u16_v: i = 1; l = 1; u = 15; break;
+case NEON::BI__builtin_neon_vcvt_n_u16_v: i = 1; l = 1; u = 15; break;
 case NEON::BI__builtin_neon_vcvtq_n_u32_v: i = 1; l = 1; u = 31; break;
 case NEON::BI__builtin_neon_vcvt_n_u32_v: i = 1; l = 1; u = 31; break;
 case NEON::BI__builtin_neon_vext_v: i = 2; u = RFT(TV, false, false); break;
diff --git a/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h b/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
index d6f9908..cf64e9f 100644
--- a/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
+++ b/linux-x64/clang/include/clang/CodeGen/CGFunctionInfo.h
@@ -96,6 +96,7 @@
   bool InReg : 1;           // isDirect() || isExtend() || isIndirect()
   bool CanBeFlattened: 1;   // isDirect()
   bool SignExt : 1;         // isExtend()
+  bool SuppressSRet : 1;    // isIndirect()
 
   bool canHavePaddingType() const {
     return isDirect() || isExtend() || isIndirect() || isExpand();
@@ -111,13 +112,14 @@
   }
 
   ABIArgInfo(Kind K)
-      : TheKind(K), PaddingInReg(false), InReg(false) {
+      : TheKind(K), PaddingInReg(false), InReg(false), SuppressSRet(false) {
   }
 
 public:
   ABIArgInfo()
       : TypeData(nullptr), PaddingType(nullptr), DirectOffset(0),
-        TheKind(Direct), PaddingInReg(false), InReg(false) {}
+        TheKind(Direct), PaddingInReg(false), InReg(false),
+        SuppressSRet(false) {}
 
   static ABIArgInfo getDirect(llvm::Type *T = nullptr, unsigned Offset = 0,
                               llvm::Type *Padding = nullptr,
@@ -384,7 +386,7 @@
     AllocaFieldIndex = FieldIndex;
   }
 
-  /// \brief Return true if this field of an inalloca struct should be returned
+  /// Return true if this field of an inalloca struct should be returned
   /// to implement a struct return calling convention.
   bool getInAllocaSRet() const {
     assert(isInAlloca() && "Invalid kind!");
@@ -406,6 +408,16 @@
     CanBeFlattened = Flatten;
   }
 
+  bool getSuppressSRet() const {
+    assert(isIndirect() && "Invalid kind!");
+    return SuppressSRet;
+  }
+
+  void setSuppressSRet(bool Suppress) {
+    assert(isIndirect() && "Invalid kind!");
+    SuppressSRet = Suppress;
+  }
+
   void dump() const;
 };
 
@@ -648,10 +660,10 @@
     return getExtParameterInfos()[argIndex];
   }
 
-  /// \brief Return true if this function uses inalloca arguments.
+  /// Return true if this function uses inalloca arguments.
   bool usesInAlloca() const { return ArgStruct; }
 
-  /// \brief Get the struct type used to represent all the arguments in memory.
+  /// Get the struct type used to represent all the arguments in memory.
   llvm::StructType *getArgStruct() const { return ArgStruct; }
   CharUnits getArgStructAlignment() const {
     return CharUnits::fromQuantity(ArgStructAlign);
diff --git a/linux-x64/clang/include/clang/CodeGen/ConstantInitBuilder.h b/linux-x64/clang/include/clang/CodeGen/ConstantInitBuilder.h
index d1388f0..f2e78ad 100644
--- a/linux-x64/clang/include/clang/CodeGen/ConstantInitBuilder.h
+++ b/linux-x64/clang/include/clang/CodeGen/ConstantInitBuilder.h
@@ -266,7 +266,7 @@
   /// (2) finishing the entire builder.
   ///
   /// This is useful for emitting certain kinds of structure which
-  /// contain some sort of summary field, generaly a count, before any
+  /// contain some sort of summary field, generally a count, before any
   /// of the data.  By emitting a placeholder first, the structure can
   /// be emitted eagerly.
   PlaceholderPosition addPlaceholder() {
diff --git a/linux-x64/clang/include/clang/CodeGen/SwiftCallingConv.h b/linux-x64/clang/include/clang/CodeGen/SwiftCallingConv.h
index 8ea2b9d..45b3145 100644
--- a/linux-x64/clang/include/clang/CodeGen/SwiftCallingConv.h
+++ b/linux-x64/clang/include/clang/CodeGen/SwiftCallingConv.h
@@ -1,4 +1,4 @@
-//==-- SwiftCallingConv.h - Swift ABI lowering -----------------------------==//
+//==-- SwiftCallingConv.h - Swift ABI lowering ------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -152,9 +152,15 @@
                         llvm::VectorType *vectorTy,
                         llvm::SmallVectorImpl<llvm::Type*> &types);
 
-/// Should a C++ record type be passed and returned indirectly?
-bool shouldPassCXXRecordIndirectly(CodeGenModule &CGM,
-                                   const CXXRecordDecl *record);
+/// Is the given record type required to be passed and returned indirectly
+/// because of language restrictions?
+///
+/// This considers *only* mandatory indirectness due to language restrictions,
+/// such as C++'s non-trivially-copyable types and Objective-C's __weak
+/// references.  A record for which this returns true may still be passed
+/// indirectly for other reasons, such as being too large to fit in a
+/// reasonable number of registers.
+bool mustPassRecordIndirectly(CodeGenModule &CGM, const RecordDecl *record);
 
 /// Classify the rules for how to return a particular type.
 ABIArgInfo classifyReturnType(CodeGenModule &CGM, CanQualType type);
@@ -166,7 +172,7 @@
 /// private interface for Clang.
 void computeABIInfo(CodeGenModule &CGM, CGFunctionInfo &FI);
 
-/// Is swifterror lowered to a register by the target ABI.
+/// Is swifterror lowered to a register by the target ABI?
 bool isSwiftErrorLoweredInRegister(CodeGenModule &CGM);
 
 } // end namespace swiftcall
diff --git a/linux-x64/clang/include/clang/Config/config.h b/linux-x64/clang/include/clang/Config/config.h
index d37a476..f6cb2c2 100644
--- a/linux-x64/clang/include/clang/Config/config.h
+++ b/linux-x64/clang/include/clang/Config/config.h
@@ -61,7 +61,7 @@
 #define CLANG_HAVE_RLIMITS 1
 
 /* The LLVM product name and version */
-#define BACKEND_PACKAGE_STRING "LLVM 7.0.2svn"
+#define BACKEND_PACKAGE_STRING "LLVM 8.0.1svn"
 
 /* Linker version detected at compile time. */
 /* #undef HOST_LINK_VERSION */
@@ -72,6 +72,9 @@
 /* enable x86 relax relocations by default */
 #define ENABLE_X86_RELAX_RELOCATIONS 0
 
+/* Enable the experimental new pass manager by default */
+#define ENABLE_EXPERIMENTAL_NEW_PASS_MANAGER 0
+
 /* Enable each functionality of modules */
 #define CLANG_ENABLE_ARCMT 1
 #define CLANG_ENABLE_OBJC_REWRITER 1
diff --git a/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h b/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
index f2a1690..041f1a8 100644
--- a/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
+++ b/linux-x64/clang/include/clang/CrossTU/CrossTranslationUnit.h
@@ -62,7 +62,7 @@
   int LineNo;
 };
 
-/// \brief This function parses an index file that determines which
+/// This function parses an index file that determines which
 ///        translation unit contains which definition.
 ///
 /// The index file format is the following:
@@ -75,7 +75,7 @@
 
 std::string createCrossTUIndexString(const llvm::StringMap<std::string> &Index);
 
-/// \brief This class is used for tools that requires cross translation
+/// This class is used for tools that requires cross translation
 ///        unit capability.
 ///
 /// This class can load function definitions from external AST files.
@@ -90,7 +90,7 @@
   CrossTranslationUnitContext(CompilerInstance &CI);
   ~CrossTranslationUnitContext();
 
-  /// \brief This function loads a function definition from an external AST
+  /// This function loads a function definition from an external AST
   ///        file and merge it into the original AST.
   ///
   /// This method should only be used on functions that have no definitions in
@@ -110,7 +110,7 @@
   getCrossTUDefinition(const FunctionDecl *FD, StringRef CrossTUDir,
                        StringRef IndexName);
 
-  /// \brief This function loads a function definition from an external AST
+  /// This function loads a function definition from an external AST
   ///        file.
   ///
   /// A function definition with the same declaration will be looked up in the
@@ -126,17 +126,17 @@
                                             StringRef CrossTUDir,
                                             StringRef IndexName);
 
-  /// \brief This function merges a definition from a separate AST Unit into
+  /// This function merges a definition from a separate AST Unit into
   ///        the current one which was created by the compiler instance that
   ///        was passed to the constructor.
   ///
   /// \return Returns the resulting definition or an error.
   llvm::Expected<const FunctionDecl *> importDefinition(const FunctionDecl *FD);
 
-  /// \brief Get a name to identify a function.
+  /// Get a name to identify a function.
   static std::string getLookupName(const NamedDecl *ND);
 
-  /// \brief Emit diagnostics for the user for potential configuration errors.
+  /// Emit diagnostics for the user for potential configuration errors.
   void emitCrossTUDiagnostics(const IndexError &IE);
 
 private:
diff --git a/linux-x64/clang/include/clang/Driver/Action.h b/linux-x64/clang/include/clang/Driver/Action.h
index 4922817..723fbbe 100644
--- a/linux-x64/clang/include/clang/Driver/Action.h
+++ b/linux-x64/clang/include/clang/Driver/Action.h
@@ -88,6 +88,7 @@
     // The device offloading tool chains - one bit for each programming model.
     OFK_Cuda = 0x02,
     OFK_OpenMP = 0x04,
+    OFK_HIP = 0x08,
   };
 
   static const char *getClassName(ActionClass AC);
@@ -546,13 +547,13 @@
   /// Type that provides information about the actions that depend on this
   /// unbundling action.
   struct DependentActionInfo final {
-    /// \brief The tool chain of the dependent action.
+    /// The tool chain of the dependent action.
     const ToolChain *DependentToolChain = nullptr;
 
-    /// \brief The bound architecture of the dependent action.
+    /// The bound architecture of the dependent action.
     StringRef DependentBoundArch;
 
-    /// \brief The offload kind of the dependent action.
+    /// The offload kind of the dependent action.
     const OffloadKind DependentOffloadKind = OFK_None;
 
     DependentActionInfo(const ToolChain *DependentToolChain,
diff --git a/linux-x64/clang/include/clang/Driver/Compilation.h b/linux-x64/clang/include/clang/Driver/Compilation.h
index 0b4bb50..20eb07f 100644
--- a/linux-x64/clang/include/clang/Driver/Compilation.h
+++ b/linux-x64/clang/include/clang/Driver/Compilation.h
@@ -122,6 +122,9 @@
   /// Whether an error during the parsing of the input args.
   bool ContainsError;
 
+  /// Whether to keep temporary files regardless of -save-temps.
+  bool ForceKeepTempFiles = false;
+
 public:
   Compilation(const Driver &D, const ToolChain &DefaultToolChain,
               llvm::opt::InputArgList *Args,
diff --git a/linux-x64/clang/include/clang/Driver/Distro.h b/linux-x64/clang/include/clang/Driver/Distro.h
index 4ab4e2a..7b34a09 100644
--- a/linux-x64/clang/include/clang/Driver/Distro.h
+++ b/linux-x64/clang/include/clang/Driver/Distro.h
@@ -61,6 +61,7 @@
     UbuntuZesty,
     UbuntuArtful,
     UbuntuBionic,
+    UbuntuCosmic,
     UnknownDistro
   };
 
@@ -114,7 +115,7 @@
   }
 
   bool IsUbuntu() const {
-    return DistroVal >= UbuntuHardy && DistroVal <= UbuntuBionic;
+    return DistroVal >= UbuntuHardy && DistroVal <= UbuntuCosmic;
   }
 
   bool IsAlpineLinux() const {
diff --git a/linux-x64/clang/include/clang/Driver/Driver.h b/linux-x64/clang/include/clang/Driver/Driver.h
index ca2ca30..b7b8022 100644
--- a/linux-x64/clang/include/clang/Driver/Driver.h
+++ b/linux-x64/clang/include/clang/Driver/Driver.h
@@ -202,8 +202,8 @@
   unsigned CCGenDiagnostics : 1;
 
 private:
-  /// Default target triple.
-  std::string DefaultTargetTriple;
+  /// Raw target triple.
+  std::string TargetTriple;
 
   /// Name to use when invoking gcc/g++.
   std::string CCCGenericGCCName;
@@ -243,7 +243,7 @@
   std::list<std::string> TempFiles;
   std::list<std::string> ResultFiles;
 
-  /// \brief Cache of all the ToolChains in use by the driver.
+  /// Cache of all the ToolChains in use by the driver.
   ///
   /// This maps from the string representation of a triple to a ToolChain
   /// created targeting that triple. The driver owns all the ToolChain objects
@@ -256,7 +256,7 @@
   llvm::opt::DerivedArgList *
   TranslateInputArgs(const llvm::opt::InputArgList &Args) const;
 
-  // getFinalPhase - Determine which compilation mode we are in and record 
+  // getFinalPhase - Determine which compilation mode we are in and record
   // which option we used to determine the final phase.
   phases::ID getFinalPhase(const llvm::opt::DerivedArgList &DAL,
                            llvm::opt::Arg **FinalPhaseArg = nullptr) const;
@@ -267,7 +267,7 @@
   void generatePrefixedToolNames(StringRef Tool, const ToolChain &TC,
                                  SmallVectorImpl<std::string> &Names) const;
 
-  /// \brief Find the appropriate .crash diagonostic file for the child crash
+  /// Find the appropriate .crash diagonostic file for the child crash
   /// under this driver and copy it out to a temporary destination with the
   /// other reproducer related files (.sh, .cache, etc). If not found, suggest a
   /// directory for the user to look at.
@@ -282,7 +282,7 @@
                               SmallString<128> &CrashDiagDir);
 
 public:
-  Driver(StringRef ClangExecutable, StringRef DefaultTargetTriple,
+  Driver(StringRef ClangExecutable, StringRef TargetTriple,
          DiagnosticsEngine &Diags,
          IntrusiveRefCntPtr<vfs::FileSystem> VFS = nullptr);
 
@@ -309,12 +309,14 @@
   const std::string &getTitle() { return DriverTitle; }
   void setTitle(std::string Value) { DriverTitle = std::move(Value); }
 
-  /// \brief Get the path to the main clang executable.
+  std::string getTargetTriple() const { return TargetTriple; }
+
+  /// Get the path to the main clang executable.
   const char *getClangProgramPath() const {
     return ClangExecutable.c_str();
   }
 
-  /// \brief Get the path to where the clang executable was installed.
+  /// Get the path to where the clang executable was installed.
   const char *getInstalledDir() const {
     if (!InstalledDir.empty())
       return InstalledDir.c_str();
@@ -363,12 +365,12 @@
   llvm::opt::InputArgList ParseArgStrings(ArrayRef<const char *> Args,
                                           bool &ContainsError);
 
-  /// BuildInputs - Construct the list of inputs and their types from 
+  /// BuildInputs - Construct the list of inputs and their types from
   /// the given arguments.
   ///
   /// \param TC - The default host tool chain.
   /// \param Args - The input arguments.
-  /// \param Inputs - The list to store the resulting compilation 
+  /// \param Inputs - The list to store the resulting compilation
   /// inputs onto.
   void BuildInputs(const ToolChain &TC, llvm::opt::DerivedArgList &Args,
                    InputList &Inputs) const;
@@ -405,11 +407,19 @@
   int ExecuteCompilation(Compilation &C,
      SmallVectorImpl< std::pair<int, const Command *> > &FailingCommands);
 
-  /// generateCompilationDiagnostics - Generate diagnostics information 
+  /// Contains the files in the compilation diagnostic report generated by
+  /// generateCompilationDiagnostics.
+  struct CompilationDiagnosticReport {
+    llvm::SmallVector<std::string, 4> TemporaryFiles;
+  };
+
+  /// generateCompilationDiagnostics - Generate diagnostics information
   /// including preprocessed source file(s).
-  /// 
-  void generateCompilationDiagnostics(Compilation &C,
-                                      const Command &FailingCommand);
+  ///
+  void generateCompilationDiagnostics(
+      Compilation &C, const Command &FailingCommand,
+      StringRef AdditionalInformation = "",
+      CompilationDiagnosticReport *GeneratedReport = nullptr);
 
   /// @}
   /// @name Helper Methods
@@ -483,7 +493,7 @@
   /// \param JA - The action of interest.
   /// \param BaseInput - The original input file that this action was
   /// triggered by.
-  /// \param BoundArch - The bound architecture. 
+  /// \param BoundArch - The bound architecture.
   /// \param AtTopLevel - Whether this is a "top-level" action.
   /// \param MultipleArchs - Whether multiple -arch options were supplied.
   /// \param NormalizedTriple - The normalized triple of the relevant target.
@@ -492,7 +502,7 @@
                                  bool AtTopLevel, bool MultipleArchs,
                                  StringRef NormalizedTriple) const;
 
-  /// GetTemporaryPath - Return the pathname of a temporary file to use 
+  /// GetTemporaryPath - Return the pathname of a temporary file to use
   /// as part of compilation; the file will have the given prefix and suffix.
   ///
   /// GCC goes to extra lengths here to be a bit more robust.
@@ -532,7 +542,7 @@
   /// compilation based on which -f(no-)?lto(=.*)? option occurs last.
   void setLTOMode(const llvm::opt::ArgList &Args);
 
-  /// \brief Retrieves a ToolChain for a particular \p Target triple.
+  /// Retrieves a ToolChain for a particular \p Target triple.
   ///
   /// Will cache ToolChains for the life of the driver object, and create them
   /// on-demand.
@@ -541,7 +551,7 @@
 
   /// @}
 
-  /// \brief Get bitmasks for which option flags to include and exclude based on
+  /// Get bitmasks for which option flags to include and exclude based on
   /// the driver mode.
   std::pair<unsigned, unsigned> getIncludeExcludeOptionFlagMasks() const;
 
diff --git a/linux-x64/clang/include/clang/Driver/Job.h b/linux-x64/clang/include/clang/Driver/Job.h
index 98c1edb..47d9e99 100644
--- a/linux-x64/clang/include/clang/Driver/Job.h
+++ b/linux-x64/clang/include/clang/Driver/Job.h
@@ -116,7 +116,7 @@
     InputFileList = std::move(List);
   }
 
-  /// \brief Sets the environment to be used by the new process.
+  /// Sets the environment to be used by the new process.
   /// \param NewEnvironment An array of environment variables.
   /// \remark If the environment remains unset, then the environment
   ///         from the parent process will be used.
diff --git a/linux-x64/clang/include/clang/Driver/Multilib.h b/linux-x64/clang/include/clang/Driver/Multilib.h
index d148fad..132d981 100644
--- a/linux-x64/clang/include/clang/Driver/Multilib.h
+++ b/linux-x64/clang/include/clang/Driver/Multilib.h
@@ -40,7 +40,7 @@
   Multilib(StringRef GCCSuffix = {}, StringRef OSSuffix = {},
            StringRef IncludeSuffix = {});
 
-  /// \brief Get the detected GCC installation path suffix for the multi-arch
+  /// Get the detected GCC installation path suffix for the multi-arch
   /// target variant. Always starts with a '/', unless empty
   const std::string &gccSuffix() const {
     assert(GCCSuffix.empty() ||
@@ -51,7 +51,7 @@
   /// Set the GCC installation path suffix.
   Multilib &gccSuffix(StringRef S);
 
-  /// \brief Get the detected os path suffix for the multi-arch
+  /// Get the detected os path suffix for the multi-arch
   /// target variant. Always starts with a '/', unless empty
   const std::string &osSuffix() const {
     assert(OSSuffix.empty() ||
@@ -62,7 +62,7 @@
   /// Set the os path suffix.
   Multilib &osSuffix(StringRef S);
 
-  /// \brief Get the include directory suffix. Always starts with a '/', unless
+  /// Get the include directory suffix. Always starts with a '/', unless
   /// empty
   const std::string &includeSuffix() const {
     assert(IncludeSuffix.empty() ||
@@ -73,7 +73,7 @@
   /// Set the include directory suffix
   Multilib &includeSuffix(StringRef S);
 
-  /// \brief Get the flags that indicate or contraindicate this multilib's use
+  /// Get the flags that indicate or contraindicate this multilib's use
   /// All elements begin with either '+' or '-'
   const flags_list &flags() const { return Flags; }
   flags_list &flags() { return Flags; }
@@ -92,7 +92,7 @@
   }
 
   LLVM_DUMP_METHOD void dump() const;
-  /// \brief print summary of the Multilib
+  /// print summary of the Multilib
   void print(raw_ostream &OS) const;
 
   /// Check whether any of the 'against' flags contradict the 'for' flags.
@@ -150,7 +150,7 @@
   /// Union this set of multilibs with another
   void combineWith(const MultilibSet &MS);
 
-  /// Remove all of thie multilibs from the set
+  /// Remove all of the multilibs from the set
   void clear() { Multilibs.clear(); }
 
   iterator begin() { return Multilibs.begin(); }
diff --git a/linux-x64/clang/include/clang/Driver/Options.inc b/linux-x64/clang/include/clang/Driver/Options.inc
index 0d705f5..73e6d9f 100644
--- a/linux-x64/clang/include/clang/Driver/Options.inc
+++ b/linux-x64/clang/include/clang/Driver/Options.inc
@@ -71,8 +71,10 @@
 OPTION(nullptr, "<arm features group>", m_arm_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<hexagon features group>", m_hexagon_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<hexagon features group>", m_hexagon_Features_HVX_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(nullptr, "<m libc group>", m_libc_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(nullptr, "<m libc group>", m_libc_Group, Group, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(nullptr, "<mips features group>", m_mips_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<ppc features group>", m_ppc_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(nullptr, "<riscv features group>", m_riscv_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<wasm features group>", m_wasm_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<x86 features group>", m_x86_Features_Group, Group, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(nullptr, "<opencl group>", opencl_Group, Group, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -200,8 +202,6 @@
        "Auxiliary target triple.", nullptr, nullptr)
 OPTION(prefix_1, "A", A, JoinedOrSeparate, gfortran_Group, INVALID, nullptr, RenderJoined, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "a", a, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "backend-option", backend_option, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "Additional arguments to forward to LLVM backend (during code gen)", nullptr, nullptr)
 OPTION(prefix_2, "bigobj", _SLASH_bigobj, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "bind_at_load", bind__at__load, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "bootclasspath=", _bootclasspath_EQ, Joined, INVALID, fbootclasspath_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -212,6 +212,8 @@
        "Emit an object file which can be reproduced over time", nullptr, nullptr)
 OPTION(prefix_2, "Bt+", _SLASH_Bt_plus, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Bt", _SLASH_Bt, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "building-pch-with-obj", building_pch_with_obj, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "This compilation is part of building a PCH with corresponding object file.", nullptr, nullptr)
 OPTION(prefix_1, "bundle_loader", bundle__loader, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "bundle", bundle, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "B", B, JoinedOrSeparate, INVALID, INVALID, nullptr, 0, 0,
@@ -272,7 +274,7 @@
 OPTION(prefix_1, "cl-single-precision-constant", cl_single_precision_constant, Flag, opencl_Group, INVALID, nullptr, CC1Option, 0,
        "OpenCL only. Treat double precision floating-point constant as single precision constant.", nullptr, nullptr)
 OPTION(prefix_1, "cl-std=", cl_std_EQ, Joined, opencl_Group, INVALID, nullptr, CC1Option, 0,
-       "OpenCL language standard to compile for.", nullptr, "cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0")
+       "OpenCL language standard to compile for.", nullptr, "cl,CL,cl1.1,CL1.1,cl1.2,CL1.2,cl2.0,CL2.0,c++")
 OPTION(prefix_1, "cl-strict-aliasing", cl_strict_aliasing, Flag, opencl_Group, INVALID, nullptr, CC1Option, 0,
        "OpenCL only. This option is added for compatibility with OpenCL 1.0.", nullptr, nullptr)
 OPTION(prefix_1, "cl-uniform-work-group-size", cl_uniform_work_group_size, Flag, opencl_Group, INVALID, nullptr, CC1Option, 0,
@@ -294,10 +296,14 @@
        "Include macros in code-completion results", nullptr, nullptr)
 OPTION(prefix_1, "code-completion-patterns", code_completion_patterns, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Include code patterns in code-completion results", nullptr, nullptr)
+OPTION(prefix_1, "code-completion-with-fixits", code_completion_with_fixits, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Include code completion results which require small fix-its.", nullptr, nullptr)
 OPTION(prefix_4, "combine", combine, Flag, INVALID, INVALID, nullptr, DriverOption | Unsupported, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "comments-in-macros", _comments_in_macros, Flag, INVALID, CC, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "comments", _comments, Flag, INVALID, C, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "compatibility_version", compatibility__version, JoinedOrSeparate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "compiler-options-dump", compiler_options_dump, Flag, Action_Group, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Dump the compiler configuration options", nullptr, nullptr)
 OPTION(prefix_3, "compile", _compile, Flag, INVALID, c, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "compress-debug-sections=", compress_debug_sections_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "DWARF debug sections compression type", nullptr, nullptr)
@@ -335,6 +341,8 @@
        "CUDA GPU architecture (e.g. sm_35).  May be specified more than once.", nullptr, nullptr)
 OPTION(prefix_3, "cuda-host-only", cuda_host_only, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Compile CUDA code for host only.  Has no effect on non-CUDA compilations.", nullptr, nullptr)
+OPTION(prefix_3, "cuda-include-ptx=", cuda_include_ptx_EQ, Joined, INVALID, INVALID, nullptr, DriverOption, 0,
+       "Include PTX for the follwing GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.", nullptr, nullptr)
 OPTION(prefix_3, "cuda-noopt-device-debug", cuda_noopt_device_debug, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Enable device-side debug info generation. Disables ptxas optimizations.", nullptr, nullptr)
 OPTION(prefix_3, "cuda-path-ignore-env", cuda_path_ignore_env, Flag, i_Group, INVALID, nullptr, 0, 0,
@@ -505,10 +513,12 @@
 OPTION(prefix_1, "faccess-control", faccess_control, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "faddress-space-map-mangling=", faddress_space_map_mangling_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Set the mode for address space map based mangling; OpenCL testing purposes only", "<yes|no|target>", nullptr)
+OPTION(prefix_1, "faddrsig", faddrsig, Flag, f_Group, INVALID, nullptr, CoreOption | CC1Option, 0,
+       "Emit an address-significance table", nullptr, nullptr)
 OPTION(prefix_1, "faggressive-function-elimination", aggressive_function_elimination_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "falign-commons", align_commons_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "falign-functions=", falign_functions_EQ, Joined, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "falign-functions", align_functions_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "falign-functions=", falign_functions_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "falign-functions", falign_functions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "falign-jumps=", falign_jumps_EQ, Joined, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "falign-jumps", align_jumps_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "falign-labels=", falign_labels_EQ, Joined, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -520,7 +530,7 @@
 OPTION(prefix_1, "faligned-allocation", faligned_allocation, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable C++17 aligned allocation functions", nullptr, nullptr)
 OPTION(prefix_1, "faligned-new=", faligned_new_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "faligned-new", anonymous_14, Flag, INVALID, faligned_allocation, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "faligned-new", anonymous_16, Flag, INVALID, faligned_allocation, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fall-intrinsics", all_intrinsics_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "fallback", _SLASH_fallback, Flag, cl_compile_Group, INVALID, nullptr, CLOption | DriverOption, 0,
        "Fall back to cl.exe if clang-cl fails to compile", nullptr, nullptr)
@@ -564,7 +574,7 @@
 OPTION(prefix_1, "fblas-matmul-limit=", fblas_matmul_limit_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fblocks-runtime-optional", fblocks_runtime_optional, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Weakly link in the blocks runtime", nullptr, nullptr)
-OPTION(prefix_1, "fblocks", fblocks, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fblocks", fblocks, Flag, f_Group, INVALID, nullptr, CoreOption | CC1Option, 0,
        "Enable the 'blocks' language feature", nullptr, nullptr)
 OPTION(prefix_1, "fbootclasspath=", fbootclasspath_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fborland-extensions", fborland_extensions, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
@@ -580,7 +590,7 @@
        "Time when the current build session started", "<time since Epoch in seconds>", nullptr)
 OPTION(prefix_1, "fbuiltin-module-map", fbuiltin_module_map, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
        "Load the clang builtins module map file.", nullptr, nullptr)
-OPTION(prefix_1, "fbuiltin", fbuiltin, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fbuiltin", fbuiltin, Flag, f_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcaller-saves", caller_saves_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcaret-diagnostics-max-lines", fcaret_diagnostics_max_lines, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Set the maximum number of source lines to show in a caret diagnostic", "<N>", nullptr)
@@ -589,6 +599,8 @@
        "Instrument control-flow architecture protection. Options: return, branch, full, none.", nullptr, "return,branch,full,none")
 OPTION(prefix_1, "fcf-protection", fcf_protection, Flag, f_Group, fcf_protection_EQ, "full\0", CoreOption | CC1Option, 0,
        "Enable cf-protection in 'full' mode", nullptr, nullptr)
+OPTION(prefix_1, "fchar8_t", fchar8__t, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable C++ builtin type char8_t", nullptr, nullptr)
 OPTION(prefix_1, "fcheck-array-temporaries", check_array_temporaries_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcheck-new", fcheck_new_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcheck=", fcheck_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -602,6 +614,8 @@
        "Treat each comma separated argument in <arg> as a documentation comment block command", "<arg>", nullptr)
 OPTION(prefix_1, "fcommon", fcommon, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcompile-resource=", fcompile_resource_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fcomplete-member-pointers", fcomplete_member_pointers, Flag, f_clang_Group, INVALID, nullptr, CoreOption | CC1Option, 0,
+       "Require member pointer base types to be complete if they would be significant under the Microsoft ABI", nullptr, nullptr)
 OPTION(prefix_1, "fconcepts-ts", fconcepts_ts, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Enable C++ Extensions for Concepts.", nullptr, nullptr)
 OPTION(prefix_1, "fconst-strings", fconst_strings, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -622,8 +636,9 @@
 OPTION(prefix_1, "fconvert=", fconvert_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcoroutines-ts", fcoroutines_ts, Flag, f_Group, INVALID, nullptr, DriverOption | CC1Option, 0,
        "Enable support for the C++ Coroutines TS", nullptr, nullptr)
-OPTION(prefix_1, "fcoverage-mapping", fcoverage_mapping, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fcoverage-mapping", fcoverage_mapping, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Generate coverage mapping to enable code coverage analysis", nullptr, nullptr)
+OPTION(prefix_1, "fcrash-diagnostics-dir=", fcrash_diagnostics_dir, Joined, f_clang_Group, INVALID, nullptr, NoArgumentUnused, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcray-pointer", cray_pointer_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcreate-profile", fcreate_profile, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fcuda-allow-variadic-functions", fcuda_allow_variadic_functions, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -636,8 +651,10 @@
        "Incorporate CUDA device-side binary into host object file.", nullptr, nullptr)
 OPTION(prefix_1, "fcuda-is-device", fcuda_is_device, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Generate code for CUDA device", nullptr, nullptr)
-OPTION(prefix_1, "fcuda-rdc", fcuda_rdc, Flag, INVALID, INVALID, nullptr, CC1Option | HelpHidden, 0,
+OPTION(prefix_1, "fcuda-rdc", fcuda_rdc, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
        "Generate relocatable device code, also known as separate compilation mode.", nullptr, nullptr)
+OPTION(prefix_1, "fcuda-short-ptr", fcuda_short_ptr, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
+       "Use 32-bit pointers for accessing const/local/shared address spaces.", nullptr, nullptr)
 OPTION(prefix_1, "fcxx-exceptions", fcxx_exceptions, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable C++ exceptions", nullptr, nullptr)
 OPTION(prefix_1, "fcxx-modules", fcxx_modules, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
@@ -656,7 +673,7 @@
 OPTION(prefix_1, "fdebug-pass-manager", fdebug_pass_manager, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Prints debug information for the new pass manager", nullptr, nullptr)
 OPTION(prefix_1, "fdebug-pass-structure", fdebug_pass_structure, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fdebug-prefix-map=", fdebug_prefix_map_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fdebug-prefix-map=", fdebug_prefix_map_EQ, Joined, f_Group, INVALID, nullptr, CC1Option | CC1AsOption, 0,
        "remap file source paths in debug info", nullptr, nullptr)
 OPTION(prefix_1, "fdebug-types-section", fdebug_types_section, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Place debug types in their own section (ELF Only)", nullptr, nullptr)
@@ -674,10 +691,11 @@
 OPTION(prefix_1, "fdefault-inline", default_inline_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdefault-integer-8", default_integer_8_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdefault-real-8", default_real_8_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fdefer-pop", anonymous_6, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fdefer-pop", anonymous_8, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdelayed-template-parsing", fdelayed_template_parsing, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Parse templated function definitions at the end of the translation unit", nullptr, nullptr)
-OPTION(prefix_1, "fdelete-null-pointer-checks", delete_null_pointer_checks_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fdelete-null-pointer-checks", fdelete_null_pointer_checks, Flag, f_Group, INVALID, nullptr, 0, 0,
+       "Treat usage of null pointers as undefined behavior.", nullptr, nullptr)
 OPTION(prefix_1, "fdenormal-fp-math=", fdenormal_fp_math_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdepfile-entry=", fdepfile_entry, Joined, f_clang_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fdeprecated-macro", fdeprecated_macro, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -710,6 +728,8 @@
        "Print option name with mappable diagnostics", nullptr, nullptr)
 OPTION(prefix_1, "fdiagnostics-show-template-tree", fdiagnostics_show_template_tree, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Print a template comparison tree for differing templates", nullptr, nullptr)
+OPTION(prefix_1, "fdigraphs", fdigraphs, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:' (default)", nullptr, nullptr)
 OPTION(prefix_1, "fdisable-module-hash", fdisable_module_hash, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Disable the module hash", nullptr, nullptr)
 OPTION(prefix_1, "fdiscard-value-names", fdiscard_value_names, Flag, f_clang_Group, INVALID, nullptr, DriverOption, 0,
@@ -761,13 +781,13 @@
        "Enable support for exception handling", nullptr, nullptr)
 OPTION(prefix_1, "fexcess-precision=", fexcess_precision_EQ, Joined, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fexec-charset=", fexec_charset_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fexpensive-optimizations", anonymous_4, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fexpensive-optimizations", anonymous_6, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fexperimental-isel", fexperimental_isel, Flag, f_clang_Group, INVALID, nullptr, 0, 0,
        "Enables the experimental global instruction selector", nullptr, nullptr)
 OPTION(prefix_1, "fexperimental-new-pass-manager", fexperimental_new_pass_manager, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
        "Enables an experimental new pass manager in LLVM.", nullptr, nullptr)
 OPTION(prefix_1, "fextdirs=", fextdirs_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fextended-identifiers", anonymous_8, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fextended-identifiers", anonymous_10, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fexternal-blas", external_blas_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fexternc-nounwind", fexternc_nounwind, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Assume all functions with C linkage do not unwind", nullptr, nullptr)
@@ -780,21 +800,41 @@
        "Allow aggressive, lossy floating-point optimizations", nullptr, nullptr)
 OPTION(prefix_1, "ffat-lto-objects", fat_lto_objects_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ffine-grained-bitfield-accesses", ffine_grained_bitfield_accesses, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
-       "Use separate accesses for bitfields with legal widths and alignments.", nullptr, nullptr)
+       "Use separate accesses for consecutive bitfield runs with legal widths and alignments.", nullptr, nullptr)
 OPTION(prefix_1, "ffinite-math-only", ffinite_math_only, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ffixed-form", fixed_form_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ffixed-line-length-", ffixed_line_length_VALUE, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "ffixed-point", ffixed_point, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable fixed point types", nullptr, nullptr)
 OPTION(prefix_1, "ffixed-r19", ffixed_r19, Flag, INVALID, INVALID, nullptr, 0, 0,
-       "Reserve the r19 register (Hexagon only)", nullptr, nullptr)
+       "Reserve register r19 (Hexagon only)", nullptr, nullptr)
 OPTION(prefix_1, "ffixed-r9", ffixed_r9, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Reserve the r9 register (ARM only)", nullptr, nullptr)
 OPTION(prefix_1, "ffixed-x18", ffixed_x18, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
-       "Reserve the x18 register (AArch64 only)", nullptr, nullptr)
+       "Reserve the 18 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x1", ffixed_x1, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 1 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x20", ffixed_x20, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 20 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x2", ffixed_x2, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 2 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x3", ffixed_x3, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 3 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x4", ffixed_x4, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 4 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x5", ffixed_x5, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 5 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x6", ffixed_x6, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 6 register (AArch64 only)", nullptr, nullptr)
+OPTION(prefix_1, "ffixed-x7", ffixed_x7, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
+       "Reserve the 7 register (AArch64 only)", nullptr, nullptr)
 OPTION(prefix_1, "ffloat-store", float_store_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ffor-scope", ffor_scope, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fforbid-guard-variables", fforbid_guard_variables, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Emit an error if a C++ static local initializer would need a guard variable", nullptr, nullptr)
 OPTION(prefix_1, "fforce-addr", force_addr, Joined, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fforce-emit-vtables", fforce_emit_vtables, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Emits more virtual tables to improve devirtualization", nullptr, nullptr)
 OPTION(prefix_1, "fforce-enable-int128", fforce_enable_int128, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable support for int128_t type", nullptr, nullptr)
 OPTION(prefix_1, "ffp-contract=", ffp_contract, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
@@ -822,11 +862,12 @@
        "Use the gnu89 inline semantics", nullptr, nullptr)
 OPTION(prefix_1, "fgnu", gnu_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fheinous-gnu-extensions", fheinous_gnu_extensions, Flag, INVALID, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fhonor-infinites", anonymous_10, Flag, INVALID, fhonor_infinities, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fhip-dump-offload-linker-script", fhip_dump_offload_linker_script, Flag, f_Group, INVALID, nullptr, NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fhonor-infinites", anonymous_12, Flag, INVALID, fhonor_infinities, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fhonor-infinities", fhonor_infinities, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fhonor-nans", fhonor_nans, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fhosted", fhosted, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fident", ident_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fident", anonymous_3, Flag, f_Group, Qy, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "filelist", filelist, Separate, Link_Group, INVALID, nullptr, LinkerInput, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "filetype", filetype, Separate, INVALID, INVALID, nullptr, CC1AsOption | NoDriverOption, 0,
        "Specify the output file type ('asm', 'null', or 'obj')", nullptr, nullptr)
@@ -838,9 +879,7 @@
 OPTION(prefix_1, "fimplicit-templates", implicit_templates_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finclude-default-header", finclude_default_header, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Include the default header file for OpenCL", nullptr, nullptr)
-OPTION(prefix_1, "find-pch-source=", find_pch_source_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
-       "When building a pch, try to find the input file in include directories, as if it had been included by the argument passed to this flag.", nullptr, nullptr)
-OPTION(prefix_1, "findirect-virtual-calls", anonymous_12, Flag, INVALID, fapple_kext, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "findirect-virtual-calls", anonymous_14, Flag, INVALID, fapple_kext, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finit-character=", finit_character_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finit-integer=", finit_integer_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "finit-local-zero", init_local_zero_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -885,7 +924,7 @@
 OPTION(prefix_2, "Fi", _SLASH_Fi, Joined, cl_compile_Group, INVALID, nullptr, CLOption | DriverOption, 0,
        "Set preprocess output file name (with /P)", "<file>", nullptr)
 OPTION(prefix_1, "fjump-tables", fjump_tables, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fkeep-inline-functions", anonymous_26_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fkeep-inline-functions", anonymous_28_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "flat_namespace", flat__namespace, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "flax-vector-conversions", flax_vector_conversions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "flimit-debug-info", flimit_debug_info, Flag, INVALID, fno_standalone_debug, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -912,7 +951,7 @@
 OPTION(prefix_1, "fmax-subrecord-length=", fmax_subrecord_length_EQ, Joined, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fmax-type-align=", fmax_type_align_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
        "Specify the maximum alignment to enforce on pointers lacking an explicit alignment", nullptr, nullptr)
-OPTION(prefix_1, "fmerge-all-constants", fmerge_all_constants, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fmerge-all-constants", fmerge_all_constants, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Allow merging of constants", nullptr, nullptr)
 OPTION(prefix_1, "fmerge-constants", merge_constants_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fmerge-functions", fmerge_functions, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -997,18 +1036,20 @@
 OPTION(prefix_1, "fnested-functions", fnested_functions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fnew-alignment=", fnew_alignment_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
        "Specifies the largest alignment guaranteed by '::operator new(size_t)'", "<align>", nullptr)
-OPTION(prefix_1, "fnew-alignment", anonymous_13, Separate, INVALID, fnew_alignment_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fnew-alignment", anonymous_15, Separate, INVALID, fnew_alignment_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fnext-runtime", fnext_runtime, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-access-control", fno_access_control, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Disable C++ access control", nullptr, nullptr)
+OPTION(prefix_1, "fno-addrsig", fno_addrsig, Flag, f_Group, INVALID, nullptr, CoreOption, 0,
+       "Don't emit an address-significance table", nullptr, nullptr)
 OPTION(prefix_1, "fno-aggressive-function-elimination", aggressive_function_elimination_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-align-commons", align_commons_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-align-functions", align_functions_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-align-functions", fno_align_functions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-align-jumps", align_jumps_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-align-labels", align_labels_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-align-loops", align_loops_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-aligned-allocation", fno_aligned_allocation, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-aligned-new", anonymous_15, Flag, INVALID, fno_aligned_allocation, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-aligned-new", anonymous_17, Flag, INVALID, fno_aligned_allocation, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-all-intrinsics", all_intrinsics_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-allow-editor-placeholders", fno_allow_editor_placeholders, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-altivec", fno_altivec, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
@@ -1029,27 +1070,31 @@
 OPTION(prefix_1, "fno-backtrace", backtrace_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-bitfield-type-align", fno_bitfield_type_align, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Ignore bit-field types when aligning structures", nullptr, nullptr)
-OPTION(prefix_1, "fno-blocks", fno_blocks, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-blocks", fno_blocks, Flag, f_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-borland-extensions", fno_borland_extensions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-bounds-check", bounds_check_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-branch-count-reg", branch_count_reg_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-builtin-", fno_builtin_, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fno-builtin-", fno_builtin_, Joined, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Disable implicit builtin knowledge of a specific function", nullptr, nullptr)
-OPTION(prefix_1, "fno-builtin", fno_builtin, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+OPTION(prefix_1, "fno-builtin", fno_builtin, Flag, f_Group, INVALID, nullptr, CC1Option | CoreOption, 0,
        "Disable implicit builtin knowledge of functions", nullptr, nullptr)
 OPTION(prefix_1, "fno-caller-saves", caller_saves_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-caret-diagnostics", fno_caret_diagnostics, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-char8_t", fno_char8__t, Flag, f_Group, INVALID, nullptr, 0, 0,
+       "Disable C++ builtin type char8_t", nullptr, nullptr)
 OPTION(prefix_1, "fno-check-array-temporaries", check_array_temporaries_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-check-new", fcheck_new_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-color-diagnostics", fno_color_diagnostics, Flag, f_Group, INVALID, nullptr, CoreOption | CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-common", fno_common, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Compile common globals like normal definitions", nullptr, nullptr)
+OPTION(prefix_1, "fno-complete-member-pointers", fno_complete_member_pointers, Flag, f_clang_Group, INVALID, nullptr, CoreOption, 0,
+       "Do not require member pointer base types to be complete if they would be significant under the Microsoft ABI", nullptr, nullptr)
 OPTION(prefix_1, "fno-const-strings", fno_const_strings, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Don't use a const qualified type for string literals in C and ObjC", nullptr, nullptr)
 OPTION(prefix_1, "fno-constant-cfstrings", fno_constant_cfstrings, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Disable creation of CodeFoundation-type constant strings", nullptr, nullptr)
 OPTION(prefix_1, "fno-coroutines-ts", fno_coroutines_ts, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-coverage-mapping", fno_coverage_mapping, Flag, f_Group, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_1, "fno-coverage-mapping", fno_coverage_mapping, Flag, f_Group, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Disable code coverage analysis", nullptr, nullptr)
 OPTION(prefix_1, "fno-crash-diagnostics", fno_crash_diagnostics, Flag, f_clang_Group, INVALID, nullptr, NoArgumentUnused, 0,
        "Disable auto-generation of preprocessed source files and a script for reproduction during a clang crash", nullptr, nullptr)
@@ -1059,6 +1104,7 @@
 OPTION(prefix_1, "fno-cuda-host-device-constexpr", fno_cuda_host_device_constexpr, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Don't treat unattributed constexpr functions as __host__ __device__.", nullptr, nullptr)
 OPTION(prefix_1, "fno-cuda-rdc", fno_cuda_rdc, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-cuda-short-ptr", fno_cuda_short_ptr, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-cxx-exceptions", fno_cxx_exceptions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-cxx-modules", fno_cxx_modules, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-d-lines-as-code", d_lines_as_code_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1077,10 +1123,11 @@
 OPTION(prefix_1, "fno-default-inline", default_inline_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-default-integer-8", default_integer_8_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-default-real-8", default_real_8_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-defer-pop", anonymous_7, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-defer-pop", anonymous_9, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-delayed-template-parsing", fno_delayed_template_parsing, Flag, f_Group, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Disable delayed template parsing", nullptr, nullptr)
-OPTION(prefix_1, "fno-delete-null-pointer-checks", delete_null_pointer_checks_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-delete-null-pointer-checks", fno_delete_null_pointer_checks, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Do not treat usage of null pointers as undefined behavior.", nullptr, nullptr)
 OPTION(prefix_1, "fno-deprecated-macro", fno_deprecated_macro, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Undefines the __DEPRECATED macro", nullptr, nullptr)
 OPTION(prefix_1, "fno-devirtualize-speculatively", devirtualize_speculatively_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1093,6 +1140,8 @@
 OPTION(prefix_1, "fno-diagnostics-show-option", fno_diagnostics_show_option, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-diagnostics-use-presumed-location", fno_diagnostics_use_presumed_location, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Ignore #line directives when displaying diagnostic locations", nullptr, nullptr)
+OPTION(prefix_1, "fno-digraphs", fno_digraphs, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Disallow alternative token representations '<:', ':>', '<%', '%>', '%:', '%:%:'", nullptr, nullptr)
 OPTION(prefix_1, "fno-discard-value-names", fno_discard_value_names, Flag, f_clang_Group, INVALID, nullptr, DriverOption, 0,
        "Do not discard value names in LLVM IR", nullptr, nullptr)
 OPTION(prefix_1, "fno-dollar-ok", dollar_ok_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1114,12 +1163,12 @@
 OPTION(prefix_1, "fno-emulated-tls", fno_emulated_tls, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-escaping-block-tail-calls", fno_escaping_block_tail_calls, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-exceptions", fno_exceptions, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-expensive-optimizations", anonymous_5, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-expensive-optimizations", anonymous_7, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-experimental-isel", fno_experimental_isel, Flag, f_clang_Group, INVALID, nullptr, 0, 0,
        "Disables the experimental global instruction selector", nullptr, nullptr)
 OPTION(prefix_1, "fno-experimental-new-pass-manager", fno_experimental_new_pass_manager, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
        "Disables an experimental new pass manager in LLVM.", nullptr, nullptr)
-OPTION(prefix_1, "fno-extended-identifiers", anonymous_9, Flag, f_Group, INVALID, nullptr, Unsupported, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-extended-identifiers", anonymous_11, Flag, f_Group, INVALID, nullptr, Unsupported, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-external-blas", external_blas_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-f2c", f2c_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-fast-math", fno_fast_math, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1128,8 +1177,11 @@
        "Use large-integer access for consecutive bitfield runs.", nullptr, nullptr)
 OPTION(prefix_1, "fno-finite-math-only", fno_finite_math_only, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-fixed-form", fixed_form_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-fixed-point", fno_fixed_point, Flag, f_Group, INVALID, nullptr, 0, 0,
+       "Disable fixed point types", nullptr, nullptr)
 OPTION(prefix_1, "fno-float-store", float_store_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-for-scope", fno_for_scope, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-force-emit-vtables", fno_force_emit_vtables, Flag, f_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-force-enable-int128", fno_force_enable_int128, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Disable support for int128_t type", nullptr, nullptr)
 OPTION(prefix_1, "fno-free-form", free_form_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1146,10 +1198,10 @@
 OPTION(prefix_1, "fno-gnu-keywords", fno_gnu_keywords, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-gnu89-inline", fno_gnu89_inline, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-gnu", gnu_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-honor-infinites", anonymous_11, Flag, INVALID, fno_honor_infinities, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-honor-infinites", anonymous_13, Flag, INVALID, fno_honor_infinities, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-honor-infinities", fno_honor_infinities, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-honor-nans", fno_honor_nans, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-ident", ident_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-ident", anonymous_4, Flag, f_Group, Qn, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-implement-inlines", implement_inlines_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-implicit-module-maps", fno_implicit_module_maps, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-implicit-modules", fno_implicit_modules, Flag, f_Group, INVALID, nullptr, DriverOption | CC1Option, 0, nullptr, nullptr, nullptr)
@@ -1169,7 +1221,7 @@
 OPTION(prefix_1, "fno-ivopts", ivopts_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-jump-tables", fno_jump_tables, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Do not use jump tables for lowering switches", nullptr, nullptr)
-OPTION(prefix_1, "fno-keep-inline-functions", anonymous_26_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-keep-inline-functions", anonymous_28_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-lax-vector-conversions", fno_lax_vector_conversions, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Disallow implicit conversions between vectors with a different number of elements or different element types", nullptr, nullptr)
 OPTION(prefix_1, "fno-limit-debug-info", fno_limit_debug_info, Flag, INVALID, fstandalone_debug, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -1193,6 +1245,7 @@
 OPTION(prefix_1, "fno-modules-global-index", fno_modules_global_index, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Do not automatically generate or update the global module index", nullptr, nullptr)
 OPTION(prefix_1, "fno-modules-search-all", fno_modules_search_all, Flag, f_Group, INVALID, nullptr, DriverOption | CC1Option, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-modules-validate-system-headers", fno_modules_validate_system_headers, Flag, i_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-modules", fno_modules, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-modulo-sched-allow-regmoves", modulo_sched_allow_regmoves_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-modulo-sched", modulo_sched_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1208,7 +1261,7 @@
 OPTION(prefix_1, "fno-objc-nonfragile-abi", fno_objc_nonfragile_abi, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-objc-weak", fno_objc_weak, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-omit-frame-pointer", fno_omit_frame_pointer, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-openmp-cuda-mode", fno_openmp_cuda_mode, Flag, f_Group, INVALID, nullptr, NoArgumentUnused, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-openmp-cuda-mode", fno_openmp_cuda_mode, Flag, f_Group, INVALID, nullptr, NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-openmp-simd", fno_openmp_simd, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-openmp", fno_openmp, Flag, f_Group, INVALID, nullptr, NoArgumentUnused, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-operator-names", fno_operator_names, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
@@ -1216,6 +1269,7 @@
 OPTION(prefix_1, "fno-optimize-sibling-calls", fno_optimize_sibling_calls, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-pack-derived", pack_derived_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-pack-struct", fno_pack_struct, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-padding-on-unsigned-fixed-point", fno_padding_on_unsigned_fixed_point, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-pascal-strings", fno_pascal_strings, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-pch-timestamp", fno_pch_timestamp, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Disable inclusion of timestamp in precompiled headers", nullptr, nullptr)
@@ -1257,6 +1311,8 @@
 OPTION(prefix_1, "fno-realloc-lhs", realloc_lhs_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-reciprocal-math", fno_reciprocal_math, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-recursive", recursive_fno, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-register-global-dtors-with-atexit", fno_register_global_dtors_with_atexit, Flag, f_Group, INVALID, nullptr, 0, 0,
+       "Don't use atexit or __cxa_atexit to register global destructors", nullptr, nullptr)
 OPTION(prefix_1, "fno-regs-graph", regs_graph_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-relaxed-template-template-args", fno_relaxed_template_template_args, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-rename-registers", rename_registers_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1346,6 +1402,8 @@
 OPTION(prefix_1, "fno-strength-reduce", strength_reduce_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-strict-aliasing", fno_strict_aliasing, Flag, f_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-strict-enums", fno_strict_enums, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-strict-float-cast-overflow", fno_strict_float_cast_overflow, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Relax language rules and try to match the behavior of the target's native float-to-int conversion instructions", nullptr, nullptr)
 OPTION(prefix_1, "fno-strict-modules-decluse", fno_modules_strict_decluse, Flag, f_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-strict-overflow", fno_strict_overflow, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-strict-return", fno_strict_return, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
@@ -1358,10 +1416,10 @@
 OPTION(prefix_1, "fno-trapping-math", fno_trapping_math, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree-dce", tree_dce_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree-salias", tree_salias_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-tree-slp-vectorize", anonymous_20, Flag, INVALID, fno_slp_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-tree-slp-vectorize", anonymous_22, Flag, INVALID, fno_slp_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree-ter", tree_ter_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree-vectorizer-verbose", tree_vectorizer_verbose_fno, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fno-tree-vectorize", anonymous_18, Flag, INVALID, fno_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-tree-vectorize", anonymous_20, Flag, INVALID, fno_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree-vrp", tree_vrp_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree_loop_im", tree_loop_im_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-tree_loop_ivcanon", tree_loop_ivcanon_fno, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1401,12 +1459,14 @@
 OPTION(prefix_1, "fno-working-directory", fno_working_directory, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-wrapv", fno_wrapv, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-xray-always-emit-customevents", fnoxray_always_emit_customevents, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fno-xray-always-emit-typedevents", fnoxray_always_emit_typedevents, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-xray-instrument", fnoxray_instrument, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-zero-initialized-in-bss", fno_zero_initialized_in_bss, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fno-zvector", fno_zvector, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fnon-call-exceptions", non_call_exceptions_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fnoopenmp-relocatable-target", fnoopenmp_relocatable_target, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fnoopenmp-use-tls", fnoopenmp_use_tls, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fnoxray-link-deps", fnoxray_link_deps, Flag, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fobjc-abi-version=", fobjc_abi_version_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fobjc-arc-cxxlib=", fobjc_arc_cxxlib_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Objective-C++ Automatic Reference Counting standard library kind", nullptr, "libc++,libstdc++,none")
@@ -1440,7 +1500,7 @@
 OPTION(prefix_1, "fobjc-weak", fobjc_weak, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable ARC-style weak references in Objective-C", nullptr, nullptr)
 OPTION(prefix_1, "fomit-frame-pointer", fomit_frame_pointer, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "fopenmp-cuda-mode", fopenmp_cuda_mode, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fopenmp-cuda-mode", fopenmp_cuda_mode, Flag, f_Group, INVALID, nullptr, CC1Option | NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-dump-offload-linker-script", fopenmp_dump_offload_linker_script, Flag, f_Group, INVALID, nullptr, NoArgumentUnused | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fopenmp-host-ir-file-path", fopenmp_host_ir_file_path, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Path to the IR file produced by the frontend for the host.", nullptr, nullptr)
@@ -1488,6 +1548,8 @@
 OPTION(prefix_1, "fpack-struct=", fpack_struct_EQ, Joined, f_Group, INVALID, nullptr, CC1Option, 0,
        "Specify the default maximum struct packing alignment", nullptr, nullptr)
 OPTION(prefix_1, "fpack-struct", fpack_struct, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fpadding-on-unsigned-fixed-point", fpadding_on_unsigned_fixed_point, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Force each unsigned fixed point type to have an extra bit of padding to align their scales with those of signed fixed point types", nullptr, nullptr)
 OPTION(prefix_1, "fparse-all-comments", fparse_all_comments, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fpascal-strings", fpascal_strings, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Recognize and construct Pascal-style string literals", nullptr, nullptr)
@@ -1562,6 +1624,8 @@
 OPTION(prefix_1, "frecursive", recursive_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "freg-struct-return", freg_struct_return, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Override the default ABI to return small structs in registers", nullptr, nullptr)
+OPTION(prefix_1, "fregister-global-dtors-with-atexit", fregister_global_dtors_with_atexit, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Use atexit or __cxa_atexit to register global destructors", nullptr, nullptr)
 OPTION(prefix_1, "fregs-graph", regs_graph_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "frelaxed-template-template-args", frelaxed_template_template_args, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable C++17 relaxed template template argument matching", nullptr, nullptr)
@@ -1654,7 +1718,7 @@
        "Turn on runtime checks for various forms of undefined or suspicious behavior. See user manual for available checks", "<check>", nullptr)
 OPTION(prefix_1, "fsave-optimization-record", fsave_optimization_record, Flag, f_Group, INVALID, nullptr, 0, 0,
        "Generate a YAML optimization record file", nullptr, nullptr)
-OPTION(prefix_1, "fsched-interblock", anonymous_16, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fsched-interblock", anonymous_18, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fschedule-insns2", schedule_insns2_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fschedule-insns", schedule_insns_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fsecond-underscore", second_underscore_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -1709,6 +1773,8 @@
 OPTION(prefix_1, "fstrict-aliasing", fstrict_aliasing, Flag, f_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fstrict-enums", fstrict_enums, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Enable optimizations based on the strict definition of an enum's value range", nullptr, nullptr)
+OPTION(prefix_1, "fstrict-float-cast-overflow", fstrict_float_cast_overflow, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Assume that overflowing float-to-int casts are undefined (default)", nullptr, nullptr)
 OPTION(prefix_1, "fstrict-overflow", fstrict_overflow, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fstrict-return", fstrict_return, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Always treat control flow paths that fall off the end of a non-void function as unreachable", nullptr, nullptr)
@@ -1727,7 +1793,7 @@
 OPTION(prefix_1, "ftemplate-depth=", ftemplate_depth_EQ, Joined, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftemplate-depth", ftemplate_depth, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Maximum depth of recursive template instantiation", nullptr, nullptr)
-OPTION(prefix_1, "fterminated-vtables", anonymous_21, Flag, INVALID, fapple_kext, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fterminated-vtables", anonymous_23, Flag, INVALID, fapple_kext, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftest-coverage", ftest_coverage, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftest-module-file-extension=", ftest_module_file_extension_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "introduce a module file extension for testing purposes. The argument is parsed as blockname:major:minor:hashed:user info", nullptr, nullptr)
@@ -1750,10 +1816,10 @@
        "Trap on integer overflow", nullptr, nullptr)
 OPTION(prefix_1, "ftree-dce", tree_dce_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree-salias", tree_salias_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "ftree-slp-vectorize", anonymous_19, Flag, INVALID, fslp_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "ftree-slp-vectorize", anonymous_21, Flag, INVALID, fslp_vectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree-ter", tree_ter_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree-vectorizer-verbose", tree_vectorizer_verbose_f, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "ftree-vectorize", anonymous_17, Flag, INVALID, fvectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "ftree-vectorize", anonymous_19, Flag, INVALID, fvectorize, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree-vrp", tree_vrp_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree_loop_im", tree_loop_im_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "ftree_loop_ivcanon", tree_loop_ivcanon_f, Flag, clang_ignored_gcc_optimization_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -1762,6 +1828,8 @@
        "Process trigraph sequences", nullptr, nullptr)
 OPTION(prefix_1, "ftype-visibility", ftype_visibility, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Default type visibility", nullptr, nullptr)
+OPTION(prefix_1, "function-alignment", function_alignment, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "default alignment for functions", nullptr, nullptr)
 OPTION(prefix_1, "funderscoring", underscoring_f, Flag, gfortran_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "funique-section-names", funique_section_names, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Use unique names for text and data sections (ELF Only)", nullptr, nullptr)
@@ -1794,7 +1862,7 @@
        "Enable the loop vectorization passes", nullptr, nullptr)
 OPTION(prefix_1, "fverbose-asm", fverbose_asm, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fvisibility-inlines-hidden", fvisibility_inlines_hidden, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
-       "Give inline C++ member functions default visibility by default", nullptr, nullptr)
+       "Give inline C++ member functions hidden visibility by default", nullptr, nullptr)
 OPTION(prefix_1, "fvisibility-ms-compat", fvisibility_ms_compat, Flag, f_Group, INVALID, nullptr, 0, 0,
        "Give global types 'default' visibility and global functions and variables 'hidden' visibility by default", nullptr, nullptr)
 OPTION(prefix_1, "fvisibility=", fvisibility_EQ, Joined, f_Group, INVALID, nullptr, 0, 0,
@@ -1814,15 +1882,25 @@
        "Store string literals as writable data", nullptr, nullptr)
 OPTION(prefix_1, "fxray-always-emit-customevents", fxray_always_emit_customevents, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Determine whether to always emit __xray_customevent(...) calls even if the function it appears in is not always instrumented.", nullptr, nullptr)
+OPTION(prefix_1, "fxray-always-emit-typedevents", fxray_always_emit_typedevents, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Determine whether to always emit __xray_typedevent(...) calls even if the function it appears in is not always instrumented.", nullptr, nullptr)
 OPTION(prefix_1, "fxray-always-instrument=", fxray_always_instrument, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
-       "Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.", nullptr, nullptr)
+       "DEPRECATED: Filename defining the whitelist for imbuing the 'always instrument' XRay attribute.", nullptr, nullptr)
+OPTION(prefix_1, "fxray-attr-list=", fxray_attr_list, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Filename defining the list of functions/types for imbuing XRay attributes.", nullptr, nullptr)
 OPTION(prefix_1, "fxray-instruction-threshold=", fxray_instruction_threshold_EQ, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
        "Sets the minimum function size to instrument with XRay", nullptr, nullptr)
 OPTION(prefix_1, "fxray-instruction-threshold", fxray_instruction_threshold_, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "fxray-instrumentation-bundle=", fxray_instrumentation_bundle, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Select which XRay instrumentation points to emit. Options: all, none, function, custom. Default is 'all'.", nullptr, nullptr)
 OPTION(prefix_1, "fxray-instrument", fxray_instrument, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
        "Generate XRay instrumentation sleds on function entry and exit", nullptr, nullptr)
+OPTION(prefix_1, "fxray-link-deps", fxray_link_deps, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
+       "Tells clang to add the link dependencies for XRay.", nullptr, nullptr)
+OPTION(prefix_1, "fxray-modes=", fxray_modes, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
+       "List of modes to link in by default into XRay instrumented binaries.", nullptr, nullptr)
 OPTION(prefix_1, "fxray-never-instrument=", fxray_never_instrument, JoinedOrSeparate, f_Group, INVALID, nullptr, CC1Option, 0,
-       "Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.", nullptr, nullptr)
+       "DEPRECATED: Filename defining the whitelist for imbuing the 'never instrument' XRay attribute.", nullptr, nullptr)
 OPTION(prefix_2, "Fx", _SLASH_Fx, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fzero-initialized-in-bss", fzero_initialized_in_bss, Flag, f_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "fzvector", fzvector, Flag, f_Group, INVALID, nullptr, CC1Option, 0,
@@ -1888,6 +1966,7 @@
 OPTION(prefix_1, "gno-column-info", gno_column_info, Flag, g_flags_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "gno-embed-source", gno_embed_source, Flag, g_flags_Group, INVALID, nullptr, DriverOption, 0,
        "Restore the default behavior of not embedding source text in DWARF debug sections", nullptr, nullptr)
+OPTION(prefix_1, "gno-gnu-pubnames", gno_gnu_pubnames, Flag, g_flags_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "gno-record-gcc-switches", gno_record_gcc_switches, Flag, g_flags_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "gno-strict-dwarf", gno_strict_dwarf, Flag, g_flags_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "gnu-pubnames", gnu_pubnames, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -1953,6 +2032,12 @@
        "Display available options", nullptr, nullptr)
 OPTION(prefix_2, "help", _SLASH_help, Flag, cl_Group, help, nullptr, CLOption | DriverOption | CLOption, 0,
        "Display available options", nullptr, nullptr)
+OPTION(prefix_3, "hip-device-lib-path=", hip_device_lib_path_EQ, Joined, Link_Group, INVALID, nullptr, 0, 0,
+       "HIP device library path", nullptr, nullptr)
+OPTION(prefix_3, "hip-device-lib=", hip_device_lib_EQ, Joined, Link_Group, INVALID, nullptr, 0, 0,
+       "HIP device library", nullptr, nullptr)
+OPTION(prefix_3, "hip-link", hip_link, Flag, INVALID, INVALID, nullptr, 0, 0,
+       "Link clang-offload-bundler bundles for HIP", nullptr, nullptr)
 OPTION(prefix_2, "homeparams", _SLASH_homeparams, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "hotpatch", _SLASH_hotpatch, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "H", H, Flag, Preprocessor_Group, INVALID, nullptr, CC1Option, 0,
@@ -1999,7 +2084,7 @@
        "Only execute frontend initialization", nullptr, nullptr)
 OPTION(prefix_1, "init", init, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "install_name", install__name, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "integrated-as", anonymous_24, Flag, INVALID, fintegrated_as, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "integrated-as", anonymous_26, Flag, INVALID, fintegrated_as, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "internal-externc-isystem", internal_externc_isystem, JoinedOrSeparate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Add directory to the internal system include search path with implicit extern \"C\" semantics; these are assumed to not be user-provided and are used to model system and standard headers' paths.", "<directory>", nullptr)
 OPTION(prefix_1, "internal-isystem", internal_isystem, JoinedOrSeparate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -2026,6 +2111,7 @@
        "Add directory to include search path", "<dir>", nullptr)
 OPTION(prefix_2, "I", _SLASH_I, JoinedOrSeparate, cl_Group, I, nullptr, CLOption | DriverOption | CLOption, 0,
        "Add directory to include search path", "<dir>", nullptr)
+OPTION(prefix_2, "JMC", _SLASH_JMC, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "J", J, JoinedOrSeparate, gfortran_Group, INVALID, nullptr, RenderJoined, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "J", _SLASH_J, Flag, cl_Group, funsigned_char, nullptr, CLOption | DriverOption | CLOption, 0,
        "Make char type unsigned", nullptr, nullptr)
@@ -2059,9 +2145,9 @@
 OPTION(prefix_1, "m64", m64, Flag, m_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "m80387", m80387, Flag, INVALID, mx87, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mabi=", mabi_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mabicalls", mabicalls, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mabicalls", mabicalls, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Enable SVR4-style position-independent code (Mips only)", nullptr, nullptr)
-OPTION(prefix_1, "mabs=", mabs_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mabs=", mabs_EQ, Joined, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "Mach", Mach, Flag, Link_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "madx", madx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "maes", maes, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2105,7 +2191,8 @@
 OPTION(prefix_1, "mbmi2", mbmi2, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mbmi", mbmi, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mbranch-likely", mbranch_likely, Flag, m_Group, INVALID, nullptr, HelpHidden, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mcheck-zero-division", mcheck_zero_division, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mcheck-zero-division", mcheck_zero_division, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mcldemote", mcldemote, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mclflushopt", mclflushopt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mclwb", mclwb, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mclzero", mclzero, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2113,15 +2200,15 @@
 OPTION(prefix_1, "mcmpb", mcmpb, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcode-model", mcode_model, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "The code model to use", nullptr, "small,kernel,medium,large")
-OPTION(prefix_1, "mcompact-branches=", mcompact_branches_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mcompact-branches=", mcompact_branches_EQ, Joined, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mconsole", mconsole, Joined, m_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mconstant-cfstrings", mconstant_cfstrings, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mconstructor-aliases", mconstructor_aliases, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Emit complete constructors and destructors as aliases when possible", nullptr, nullptr)
 OPTION(prefix_1, "mcpu=", mcpu_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcrbits", mcrbits, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mcrc", mcrc, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
-       "Allow use of CRC instructions (ARM only)", nullptr, nullptr)
+OPTION(prefix_1, "mcrc", mcrc, Flag, m_Group, INVALID, nullptr, 0, 0,
+       "Allow use of CRC instructions (ARM/Mips only)", nullptr, nullptr)
 OPTION(prefix_1, "mcrypto", mpower8_crypto, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mcx16", mcx16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "MDd", _SLASH_MDd, Flag, _SLASH_M_Group, INVALID, nullptr, CLOption | DriverOption, 0,
@@ -2135,9 +2222,9 @@
 OPTION(prefix_1, "mdisable-tail-calls", mdisable_tail_calls, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Disable tail call optimization, keeping the call stack accurate", nullptr, nullptr)
 OPTION(prefix_1, "mdll", mdll, Joined, m_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mdouble-float", mdouble_float, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mdspr2", mdspr2, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mdsp", mdsp, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mdouble-float", mdouble_float, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mdspr2", mdspr2, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mdsp", mdsp, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mdynamic-no-pic", mdynamic_no_pic, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MD", MD, Flag, M_Group, INVALID, nullptr, 0, 0,
        "Write a depfile containing user and system headers", nullptr, nullptr)
@@ -2145,7 +2232,7 @@
        "Use DLL run-time", nullptr, nullptr)
 OPTION(prefix_1, "meabi", meabi, Separate, m_Group, INVALID, nullptr, CC1Option, 0,
        "Set EABI type, e.g. 4, 5 or gnu (default depends on triple)", nullptr, "default,4,5,gnu")
-OPTION(prefix_1, "membedded-data", membedded_data, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "membedded-data", membedded_data, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Place constants in the .rodata section instead of the .sdata section even if they meet the -G <size> threshold (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "menable-no-infs", menable_no_infinities, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Allow optimization to assume there are no infinities.", nullptr, nullptr)
@@ -2156,7 +2243,7 @@
 OPTION(prefix_1, "mexception-handling", mexception_handing, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mexecute-only", mexecute_only, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow generation of data access to code sections (ARM only)", nullptr, nullptr)
-OPTION(prefix_1, "mextern-sdata", mextern_sdata, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mextern-sdata", mextern_sdata, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Assume that externally defined data is in the small data if it meets the -G <size> threshold (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mf16c", mf16c, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfancy-math-387", mfancy_math_387, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
@@ -2171,16 +2258,16 @@
 OPTION(prefix_1, "mfloat128", mfloat128, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfma4", mfma4, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfma", mfma, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mfp32", mfp32, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mfp32", mfp32, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Use 32-bit floating point registers (MIPS only)", nullptr, nullptr)
-OPTION(prefix_1, "mfp64", mfp64, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mfp64", mfp64, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Use 64-bit floating point registers (MIPS only)", nullptr, nullptr)
 OPTION(prefix_1, "mfpmath=", mfpmath_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfpmath", mfpmath, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Which unit to use for fp math", nullptr, nullptr)
 OPTION(prefix_1, "mfprnd", mfprnd, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfpu=", mfpu_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mfpxx", mfpxx, Flag, m_Group, INVALID, nullptr, HelpHidden, 0,
+OPTION(prefix_1, "mfpxx", mfpxx, Flag, m_mips_Features_Group, INVALID, nullptr, HelpHidden, 0,
        "Avoid FPU mode dependent operations when used with the O32 ABI", nullptr, nullptr)
 OPTION(prefix_1, "mfsgsbase", mfsgsbase, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mfxsr", mfxsr, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2189,17 +2276,16 @@
 OPTION(prefix_1, "mgeneral-regs-only", mgeneral_regs_only, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
        "Generate code which only uses the general purpose registers (AArch64 only)", nullptr, nullptr)
 OPTION(prefix_1, "mgfni", mgfni, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mginv", mginv, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mglibc", mglibc, Flag, m_libc_Group, INVALID, nullptr, HelpHidden | HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mglobal-merge", mglobal_merge, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Enable merging of globals", nullptr, nullptr)
-OPTION(prefix_1, "mgpopt", mgpopt, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mgpopt", mgpopt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Use GP relative accesses for symbols known to be in a small data section (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "MG", MG, Flag, M_Group, INVALID, nullptr, CC1Option, 0,
        "Add missing headers to depfile", nullptr, nullptr)
 OPTION(prefix_1, "mhard-float", mhard_float, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mhtm", mhtm, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mhvx-double", mhexagon_hvx_double, Flag, m_hexagon_Features_HVX_Group, INVALID, nullptr, 0, 0,
-       "Enable Hexagon Double Vector eXtensions", nullptr, nullptr)
 OPTION(prefix_1, "mhvx-length=", mhexagon_hvx_length_EQ, Joined, m_hexagon_Features_HVX_Group, INVALID, nullptr, 0, 0,
        "Set Hexagon Vector Length", nullptr, "64B,128B")
 OPTION(prefix_1, "mhvx=", mhexagon_hvx_EQ, Joined, m_hexagon_Features_HVX_Group, INVALID, nullptr, 0, 0,
@@ -2211,7 +2297,6 @@
 OPTION(prefix_3, "mhwdiv", _mhwdiv, Separate, INVALID, mhwdiv_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "miamcu", miamcu, Flag, m_Group, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Use Intel MCU ABI", nullptr, nullptr)
-OPTION(prefix_1, "mibt", mibt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mieee-fp", mieee_fp, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mieee-rnd-near", mieee_rnd_near, Flag, m_hexagon_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "migrate", _migrate, Flag, INVALID, INVALID, nullptr, DriverOption, 0,
@@ -2222,51 +2307,52 @@
 OPTION(prefix_1, "mimplicit-it=", mimplicit_it_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mincremental-linker-compatible", mincremental_linker_compatible, Flag, m_Group, INVALID, nullptr, CC1Option | CC1AsOption, 0,
        "(integrated-as) Emit an object file which can be used with an incremental linker", nullptr, nullptr)
-OPTION(prefix_1, "mindirect-jump=", mindirect_jump_EQ, Joined, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mindirect-jump=", mindirect_jump_EQ, Joined, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Change indirect jump instructions to inhibit speculation", nullptr, nullptr)
 OPTION(prefix_1, "minline-all-stringops", minline_all_stringops, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "minvariant-function-descriptors", minvariant_function_descriptors, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "minvpcid", minvpcid, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mios-simulator-version-min=", mios_simulator_version_min_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mios-version-min=", mios_version_min_EQ, Joined, INVALID, miphoneos_version_min_EQ, nullptr, 0, 0,
        "Set iOS deployment target", nullptr, nullptr)
 OPTION(prefix_1, "miphoneos-version-min=", miphoneos_version_min_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "miphonesimulator-version-min=", miphonesimulator_version_min_EQ, Joined, INVALID, mios_simulator_version_min_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mips16", mips16, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mips1", mips1, Flag, INVALID, march_EQ, "mips1\0", HelpHidden, 0,
+OPTION(prefix_1, "mips16", mips16, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mips1", mips1, Flag, m_mips_Features_Group, march_EQ, "mips1\0", HelpHidden, 0,
        "Equivalent to -march=mips1", nullptr, nullptr)
-OPTION(prefix_1, "mips2", mips2, Flag, INVALID, march_EQ, "mips2\0", HelpHidden, 0,
+OPTION(prefix_1, "mips2", mips2, Flag, m_mips_Features_Group, march_EQ, "mips2\0", HelpHidden, 0,
        "Equivalent to -march=mips2", nullptr, nullptr)
-OPTION(prefix_1, "mips32r2", mips32r2, Flag, INVALID, march_EQ, "mips32r2\0", HelpHidden, 0,
+OPTION(prefix_1, "mips32r2", mips32r2, Flag, m_mips_Features_Group, march_EQ, "mips32r2\0", HelpHidden, 0,
        "Equivalent to -march=mips32r2", nullptr, nullptr)
-OPTION(prefix_1, "mips32r3", mips32r3, Flag, INVALID, march_EQ, "mips32r3\0", HelpHidden, 0,
+OPTION(prefix_1, "mips32r3", mips32r3, Flag, m_mips_Features_Group, march_EQ, "mips32r3\0", HelpHidden, 0,
        "Equivalent to -march=mips32r3", nullptr, nullptr)
-OPTION(prefix_1, "mips32r5", mips32r5, Flag, INVALID, march_EQ, "mips32r5\0", HelpHidden, 0,
+OPTION(prefix_1, "mips32r5", mips32r5, Flag, m_mips_Features_Group, march_EQ, "mips32r5\0", HelpHidden, 0,
        "Equivalent to -march=mips32r5", nullptr, nullptr)
-OPTION(prefix_1, "mips32r6", mips32r6, Flag, INVALID, march_EQ, "mips32r6\0", HelpHidden, 0,
+OPTION(prefix_1, "mips32r6", mips32r6, Flag, m_mips_Features_Group, march_EQ, "mips32r6\0", HelpHidden, 0,
        "Equivalent to -march=mips32r6", nullptr, nullptr)
-OPTION(prefix_1, "mips32", mips32, Flag, INVALID, march_EQ, "mips32\0", HelpHidden, 0,
+OPTION(prefix_1, "mips32", mips32, Flag, m_mips_Features_Group, march_EQ, "mips32\0", HelpHidden, 0,
        "Equivalent to -march=mips32", nullptr, nullptr)
-OPTION(prefix_1, "mips3", mips3, Flag, INVALID, march_EQ, "mips3\0", HelpHidden, 0,
+OPTION(prefix_1, "mips3", mips3, Flag, m_mips_Features_Group, march_EQ, "mips3\0", HelpHidden, 0,
        "Equivalent to -march=mips3", nullptr, nullptr)
-OPTION(prefix_1, "mips4", mips4, Flag, INVALID, march_EQ, "mips4\0", HelpHidden, 0,
+OPTION(prefix_1, "mips4", mips4, Flag, m_mips_Features_Group, march_EQ, "mips4\0", HelpHidden, 0,
        "Equivalent to -march=mips4", nullptr, nullptr)
-OPTION(prefix_1, "mips5", mips5, Flag, INVALID, march_EQ, "mips5\0", HelpHidden, 0,
+OPTION(prefix_1, "mips5", mips5, Flag, m_mips_Features_Group, march_EQ, "mips5\0", HelpHidden, 0,
        "Equivalent to -march=mips5", nullptr, nullptr)
-OPTION(prefix_1, "mips64r2", mips64r2, Flag, INVALID, march_EQ, "mips64r2\0", HelpHidden, 0,
+OPTION(prefix_1, "mips64r2", mips64r2, Flag, m_mips_Features_Group, march_EQ, "mips64r2\0", HelpHidden, 0,
        "Equivalent to -march=mips64r2", nullptr, nullptr)
-OPTION(prefix_1, "mips64r3", mips64r3, Flag, INVALID, march_EQ, "mips64r3\0", HelpHidden, 0,
+OPTION(prefix_1, "mips64r3", mips64r3, Flag, m_mips_Features_Group, march_EQ, "mips64r3\0", HelpHidden, 0,
        "Equivalent to -march=mips64r3", nullptr, nullptr)
-OPTION(prefix_1, "mips64r5", mips64r5, Flag, INVALID, march_EQ, "mips64r5\0", HelpHidden, 0,
+OPTION(prefix_1, "mips64r5", mips64r5, Flag, m_mips_Features_Group, march_EQ, "mips64r5\0", HelpHidden, 0,
        "Equivalent to -march=mips64r5", nullptr, nullptr)
-OPTION(prefix_1, "mips64r6", mips64r6, Flag, INVALID, march_EQ, "mips64r6\0", HelpHidden, 0,
+OPTION(prefix_1, "mips64r6", mips64r6, Flag, m_mips_Features_Group, march_EQ, "mips64r6\0", HelpHidden, 0,
        "Equivalent to -march=mips64r6", nullptr, nullptr)
-OPTION(prefix_1, "mips64", mips64, Flag, INVALID, march_EQ, "mips64\0", HelpHidden, 0,
+OPTION(prefix_1, "mips64", mips64, Flag, m_mips_Features_Group, march_EQ, "mips64\0", HelpHidden, 0,
        "Equivalent to -march=mips64", nullptr, nullptr)
 OPTION(prefix_1, "misel", misel, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MJ", MJ, JoinedOrSeparate, M_Group, INVALID, nullptr, 0, 0,
        "Write a compilation database entry per input", nullptr, nullptr)
 OPTION(prefix_1, "mkernel", mkernel, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mldc1-sdc1", mldc1_sdc1, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mldc1-sdc1", mldc1_sdc1, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mlimit-float-precision", mlimit_float_precision, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Limit float precision to the given value", nullptr, nullptr)
 OPTION(prefix_1, "mlink-bitcode-file", mlink_bitcode_file, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -2277,7 +2363,7 @@
 OPTION(prefix_1, "mlittle-endian", mlittle_endian, Flag, INVALID, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mllvm", mllvm, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | CoreOption, 0,
        "Additional arguments to forward to LLVM's option processing", nullptr, nullptr)
-OPTION(prefix_1, "mlocal-sdata", mlocal_sdata, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mlocal-sdata", mlocal_sdata, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Extend the -G behaviour to object local data (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mlong-calls", mlong_calls, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Generate branches with extended addressability, usually via indirect jumps.", nullptr, nullptr)
@@ -2287,31 +2373,35 @@
 OPTION(prefix_1, "mmacos-version-min=", mmacos_version_min_EQ, Joined, m_Group, mmacosx_version_min_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmacosx-version-min=", mmacosx_version_min_EQ, Joined, m_Group, INVALID, nullptr, 0, 0,
        "Set Mac OS X deployment target", nullptr, nullptr)
-OPTION(prefix_1, "mmadd4", mmadd4, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mmadd4", mmadd4, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Enable the generation of 4-operand madd.s, madd.d and related instructions.", nullptr, nullptr)
 OPTION(prefix_1, "mmcu=", mmcu_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MMD", MMD, Flag, M_Group, INVALID, nullptr, 0, 0,
        "Write a depfile containing user headers", nullptr, nullptr)
+OPTION(prefix_1, "mmemops", mmemops, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable generation of memop instructions", nullptr, nullptr)
 OPTION(prefix_1, "mmfcrf", mmfcrf, Flag, INVALID, mmfocrf, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmfocrf", mmfocrf, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mmicromips", mmicromips, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mmicromips", mmicromips, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmmx", mmmx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmovbe", mmovbe, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mmovdir64b", mmovdir64b, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mmovdiri", mmovdiri, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mmpx", mmpx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mms-bitfields", mms_bitfields, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Set the default structure layout to be compatible with the Microsoft compiler standard", nullptr, nullptr)
-OPTION(prefix_1, "mmsa", mmsa, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mmsa", mmsa, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Enable MSA ASE (MIPS only)", nullptr, nullptr)
-OPTION(prefix_1, "mmt", mmt, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mmt", mmt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Enable MT ASE (MIPS only)", nullptr, nullptr)
 OPTION(prefix_1, "mmwaitx", mmwaitx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MM", MM, Flag, M_Group, INVALID, nullptr, 0, 0,
        "Like -MMD, but also implies -E and writes to stdout by default", nullptr, nullptr)
-OPTION(prefix_1, "mnan=", mnan_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mnan=", mnan_EQ, Joined, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-3dnowa", mno_3dnowa, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-3dnow", mno_3dnow, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-80387", mno_80387, Flag, INVALID, mno_x87, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-abicalls", mno_abicalls, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-abicalls", mno_abicalls, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disable SVR4-style position-independent code (Mips only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-adx", mno_adx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-aes", mno_aes, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2335,25 +2425,28 @@
 OPTION(prefix_1, "mno-bmi2", mno_bmi2, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-bmi", mno_bmi, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-branch-likely", mno_branch_likely, Flag, m_Group, INVALID, nullptr, HelpHidden, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-check-zero-division", mno_check_zero_division, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-check-zero-division", mno_check_zero_division, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-cldemote", mno_cldemote, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-clflushopt", mno_clflushopt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-clwb", mno_clwb, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-clzero", mno_clzero, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-cmpb", mno_cmpb, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-constant-cfstrings", mno_constant_cfstrings, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-crbits", mno_crbits, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-crc", mno_crc, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
+       "Disallow use of CRC instructions (Mips only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-crypto", mnopower8_crypto, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-cx16", mno_cx16, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-default-build-attributes", mno_default_build_attributes, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-direct-move", mnodirect_move, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-dspr2", mno_dspr2, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-dsp", mno_dsp, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-embedded-data", mno_embedded_data, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-dspr2", mno_dspr2, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-dsp", mno_dsp, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-embedded-data", mno_embedded_data, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Do not place constants in the .rodata section instead of the .sdata if they meet the -G <size> threshold (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mno-exception-handling", mno_exception_handing, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-execute-only", mno_execute_only, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Allow generation of data access to code sections (ARM only)", nullptr, nullptr)
-OPTION(prefix_1, "mno-extern-sdata", mno_extern_sdata, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-extern-sdata", mno_extern_sdata, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Do not assume that externally defined data is in the small data if it meets the -G <size> threshold (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mno-f16c", mno_f16c, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-fix-cortex-a53-835769", mno_fix_cortex_a53_835769, Flag, m_aarch64_Features_Group, INVALID, nullptr, 0, 0,
@@ -2365,60 +2458,70 @@
 OPTION(prefix_1, "mno-fsgsbase", mno_fsgsbase, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-fxsr", mno_fxsr, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-gfni", mno_gfni, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-ginv", mno_ginv, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-global-merge", mno_global_merge, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Disable merging of globals", nullptr, nullptr)
-OPTION(prefix_1, "mno-gpopt", mno_gpopt, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-gpopt", mno_gpopt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Do not use GP relative accesses for symbols known to be in a small data section (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mno-htm", mno_htm, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-hvx-double", mno_hexagon_hvx_double, Flag, m_hexagon_Features_HVX_Group, INVALID, nullptr, 0, 0,
-       "Disable Hexagon Double Vector eXtensions", nullptr, nullptr)
 OPTION(prefix_1, "mno-hvx", mno_hexagon_hvx, Flag, m_hexagon_Features_HVX_Group, INVALID, nullptr, 0, 0,
        "Disable Hexagon Vector eXtensions", nullptr, nullptr)
 OPTION(prefix_1, "mno-iamcu", mno_iamcu, Flag, m_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-ibt", mno_ibt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-implicit-float", mno_implicit_float, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Don't generate implicit floating point instructions", nullptr, nullptr)
 OPTION(prefix_1, "mno-incremental-linker-compatible", mno_incremental_linker_compatible, Flag, m_Group, INVALID, nullptr, 0, 0,
        "(integrated-as) Emit an object file which cannot be used with an incremental linker", nullptr, nullptr)
 OPTION(prefix_1, "mno-inline-all-stringops", mno_inline_all_stringops, Flag, clang_ignored_m_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-invariant-function-descriptors", mno_invariant_function_descriptors, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-invpcid", mno_invpcid, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-isel", mno_isel, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-ldc1-sdc1", mno_ldc1_sdc1, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-local-sdata", mno_local_sdata, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-ldc1-sdc1", mno_ldc1_sdc1, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-local-sdata", mno_local_sdata, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Do not extend the -G behaviour to object local data (MIPS)", nullptr, nullptr)
 OPTION(prefix_1, "mno-long-calls", mno_long_calls, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Restore the default behaviour of not generating long calls", nullptr, nullptr)
 OPTION(prefix_1, "mno-longcall", mno_longcall, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-lwp", mno_lwp, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-lzcnt", mno_lzcnt, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-madd4", mno_madd4, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-madd4", mno_madd4, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disable the generation of 4-operand madd.s, madd.d and related instructions.", nullptr, nullptr)
+OPTION(prefix_1, "mno-memops", mno_memops, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Disable generation of memop instructions", nullptr, nullptr)
 OPTION(prefix_1, "mno-mfcrf", mno_mfcrf, Flag, INVALID, mno_mfocrf, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-mfocrf", mno_mfocrf, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-micromips", mno_micromips, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-mips16", mno_mips16, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-micromips", mno_micromips, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-mips16", mno_mips16, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-mmx", mno_mmx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-movbe", mno_movbe, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-movdir64b", mno_movdir64b, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-movdiri", mno_movdiri, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-movt", mno_movt, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow use of movt/movw pairs (ARM only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-mpx", mno_mpx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-ms-bitfields", mno_ms_bitfields, Flag, m_Group, INVALID, nullptr, 0, 0,
        "Do not set the default structure layout to be compatible with the Microsoft compiler standard", nullptr, nullptr)
-OPTION(prefix_1, "mno-msa", mno_msa, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-msa", mno_msa, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disable MSA ASE (MIPS only)", nullptr, nullptr)
-OPTION(prefix_1, "mno-mt", mno_mt, Flag, m_Group, INVALID, nullptr, 0, 0,
+OPTION(prefix_1, "mno-mt", mno_mt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0,
        "Disable MT ASE (MIPS only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-mwaitx", mno_mwaitx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-neg-immediates", mno_neg_immediates, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Disallow converting instructions with negative immediates to their negation or inversion.", nullptr, nullptr)
 OPTION(prefix_1, "mno-nontrapping-fptoint", mno_nontrapping_fptoint, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-odd-spreg", mno_odd_spreg, Flag, m_Group, INVALID, nullptr, HelpHidden, 0,
+OPTION(prefix_1, "mno-nvj", mno_nvj, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Disable generation of new-value jumps", nullptr, nullptr)
+OPTION(prefix_1, "mno-nvs", mno_nvs, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Disable generation of new-value stores", nullptr, nullptr)
+OPTION(prefix_1, "mno-odd-spreg", mno_odd_spreg, Flag, m_mips_Features_Group, INVALID, nullptr, HelpHidden, 0,
        "Disable odd single-precision floating point registers", nullptr, nullptr)
 OPTION(prefix_1, "mno-omit-leaf-frame-pointer", mno_omit_leaf_frame_pointer, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-outline", mno_outline, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
+       "Disable function outlining (AArch64 only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-packets", mno_packets, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
        "Disable generation of instruction packets", nullptr, nullptr)
 OPTION(prefix_1, "mno-pascal-strings", mno_pascal_strings, Flag, INVALID, fno_pascal_strings, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-pclmul", mno_pclmul, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-pconfig", mno_pconfig, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-pie-copy-relocations", mno_pie_copy_relocations, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-pku", mno_pku, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-popcntd", mno_popcntd, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2427,6 +2530,7 @@
 OPTION(prefix_1, "mno-power9-vector", mno_power9_vector, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-prefetchwt1", mno_prefetchwt1, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-prfchw", mno_prfchw, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-ptwrite", mno_ptwrite, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-pure-code", mno_pure_code, Flag, INVALID, mno_execute_only, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-qpx", mno_qpx, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-rdpid", mno_rdpid, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2434,6 +2538,8 @@
 OPTION(prefix_1, "mno-rdseed", mno_rdseed, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-red-zone", mno_red_zone, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-relax-all", mno_relax_all, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-relax", mno_relax, Flag, m_riscv_Features_Group, INVALID, nullptr, 0, 0,
+       "Disable linker relaxation", nullptr, nullptr)
 OPTION(prefix_1, "mno-restrict-it", mno_restrict_it, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Allow generation of deprecated IT blocks for ARMv8. It is off by default for ARMv8 Thumb mode", nullptr, nullptr)
 OPTION(prefix_1, "mno-retpoline-external-thunk", mno_retpoline_external_thunk, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2463,12 +2569,15 @@
 OPTION(prefix_1, "mno-unaligned-access", mno_unaligned_access, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
        "Force all memory accesses to be aligned (AArch32/AArch64 only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-vaes", mno_vaes, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-virt", mno_virt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-vpclmulqdq", mno_vpclmulqdq, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-vsx", mno_vsx, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-vx", mno_vx, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-waitpkg", mno_waitpkg, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-warn-nonportable-cfstrings", mno_warn_nonportable_cfstrings, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-wbnoinvd", mno_wbnoinvd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-x87", mno_x87, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mno-xgot", mno_xgot, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mno-xgot", mno_xgot, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mno-xnack", mno_xnack, Flag, m_amdgpu_Features_Group, INVALID, nullptr, 0, 0,
        "Disable XNACK (AMDGPU only)", nullptr, nullptr)
 OPTION(prefix_1, "mno-xop", mno_xop, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2484,7 +2593,11 @@
 OPTION(prefix_1, "mnoexecstack", mno_exec_stack, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "Mark the file as not needing an executable stack", nullptr, nullptr)
 OPTION(prefix_1, "mnontrapping-fptoint", mnontrapping_fptoint, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "modd-spreg", modd_spreg, Flag, m_Group, INVALID, nullptr, HelpHidden, 0,
+OPTION(prefix_1, "mnvj", mnvj, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable generation of new-value jumps", nullptr, nullptr)
+OPTION(prefix_1, "mnvs", mnvs, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable generation of new-value stores", nullptr, nullptr)
+OPTION(prefix_1, "modd-spreg", modd_spreg, Flag, m_mips_Features_Group, INVALID, nullptr, HelpHidden, 0,
        "Enable odd single-precision floating point registers", nullptr, nullptr)
 OPTION(prefix_1, "module-dependency-dir", module_dependency_dir, Separate, INVALID, INVALID, nullptr, CC1Option, 0,
        "Directory to dump module dependencies to", nullptr, nullptr)
@@ -2495,10 +2608,13 @@
 OPTION(prefix_1, "momit-leaf-frame-pointer", momit_leaf_frame_pointer, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Omit frame pointer setup for leaf functions", nullptr, nullptr)
 OPTION(prefix_1, "moslib=", moslib_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "moutline", moutline, Flag, f_clang_Group, INVALID, nullptr, CC1Option, 0,
+       "Enable function outlining (AArch64 only)", nullptr, nullptr)
 OPTION(prefix_1, "mpackets", mpackets, Flag, m_hexagon_Features_Group, INVALID, nullptr, CC1Option, 0,
        "Enable generation of instruction packets", nullptr, nullptr)
 OPTION(prefix_1, "mpascal-strings", mpascal_strings, Flag, INVALID, fpascal_strings, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mpclmul", mpclmul, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mpconfig", mpconfig, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mpie-copy-relocations", mpie_copy_relocations, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Use copy relocations support for PIE builds", nullptr, nullptr)
 OPTION(prefix_1, "mpku", mpku, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2510,6 +2626,7 @@
        "Specifies preferred vector width for auto-vectorization. Defaults to 'none' which allows target specific decisions.", nullptr, nullptr)
 OPTION(prefix_1, "mprefetchwt1", mprefetchwt1, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mprfchw", mprfchw, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mptwrite", mptwrite, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mpure-code", mpure_code, Flag, INVALID, mexecute_only, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MP", MP, Flag, M_Group, INVALID, nullptr, CC1Option, 0,
        "Create phony target for each dependency (other than main file)", nullptr, nullptr)
@@ -2534,6 +2651,8 @@
        "(integrated-as) Relax all machine instructions", nullptr, nullptr)
 OPTION(prefix_3, "mrelax-relocations", mrelax_relocations, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "Use relaxable elf relocations", nullptr, nullptr)
+OPTION(prefix_1, "mrelax", mrelax, Flag, m_riscv_Features_Group, INVALID, nullptr, 0, 0,
+       "Enable linker relaxation", nullptr, nullptr)
 OPTION(prefix_1, "mrelocation-model", mrelocation_model, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "The relocation model to use", nullptr, "static,pic,ropi,rwpi,ropi-rwpi,dynamic-no-pic")
 OPTION(prefix_1, "mrestrict-it", mrestrict_it, Flag, m_arm_Features_Group, INVALID, nullptr, 0, 0,
@@ -2546,12 +2665,13 @@
 OPTION(prefix_1, "msahf", msahf, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msave-temp-labels", msave_temp_labels, Flag, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "Save temporary labels in the symbol table. Note this may change .s semantics and shouldn't generally be used on compiler-generated code.", nullptr, nullptr)
+OPTION(prefix_1, "msecure-plt", msecure_plt, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msgx", msgx, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msha", msha, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mshstk", mshstk, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msign-ext", msign_ext, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msimd128", msimd128, Flag, m_wasm_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "msingle-float", msingle_float, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "msingle-float", msingle_float, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msmall-data-threshold=", msmall_data_threshold_EQ, Joined, m_Group, G, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "msoft-float", msoft_float, Flag, m_Group, INVALID, nullptr, CC1Option, 0,
        "Use software floating point", nullptr, nullptr)
@@ -2609,19 +2729,22 @@
 OPTION(prefix_1, "mv62", mv62, Flag, m_hexagon_Features_Group, mcpu_EQ, "hexagonv62\0", 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mv65", mv65, Flag, m_hexagon_Features_Group, mcpu_EQ, "hexagonv65\0", 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mvaes", mvaes, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mvirt", mvirt, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mvpclmulqdq", mvpclmulqdq, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mvsx", mvsx, Flag, m_ppc_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mvx", mvx, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "MV", MV, Flag, M_Group, INVALID, nullptr, CC1Option, 0,
        "Use NMake/Jom format for the depfile", nullptr, nullptr)
+OPTION(prefix_1, "mwaitpkg", mwaitpkg, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwarn-nonportable-cfstrings", mwarn_nonportable_cfstrings, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwatchos-simulator-version-min=", mwatchos_simulator_version_min_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwatchos-version-min=", mwatchos_version_min_EQ, Joined, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwatchsimulator-version-min=", mwatchsimulator_version_min_EQ, Joined, INVALID, mwatchos_simulator_version_min_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mwbnoinvd", mwbnoinvd, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mwindows", mwindows, Joined, m_Group, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mx32", mx32, Flag, m_Group, INVALID, nullptr, DriverOption | CoreOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mx87", mx87, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "mxgot", mxgot, Flag, m_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "mxgot", mxgot, Flag, m_mips_Features_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "mxnack", mxnack, Flag, m_amdgpu_Features_Group, INVALID, nullptr, 0, 0,
        "Enable XNACK (AMDGPU only)", nullptr, nullptr)
 OPTION(prefix_1, "mxop", mxop, Flag, m_x86_Features_Group, INVALID, nullptr, CoreOption, 0, nullptr, nullptr, nullptr)
@@ -2634,7 +2757,7 @@
        "Like -MD, but also implies -E and writes to stdout by default", nullptr, nullptr)
 OPTION(prefix_1, "new-struct-path-tbaa", new_struct_path_tbaa, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Enable enhanced struct-path aware Type Based Alias Analysis", nullptr, nullptr)
-OPTION(prefix_1, "no-canonical-prefixes", no_canonical_prefixes, Flag, INVALID, INVALID, nullptr, HelpHidden, 0,
+OPTION(prefix_1, "no-canonical-prefixes", no_canonical_prefixes, Flag, INVALID, INVALID, nullptr, HelpHidden | CoreOption, 0,
        "Use relative instead of canonical paths", nullptr, nullptr)
 OPTION(prefix_1, "no-code-completion-globals", no_code_completion_globals, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Do not include global declarations in code-completion results.", nullptr, nullptr)
@@ -2643,6 +2766,8 @@
 OPTION(prefix_1, "no-cpp-precomp", no_cpp_precomp, Flag, clang_ignored_f_Group, INVALID, nullptr, Ignored, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "no-cuda-gpu-arch=", no_cuda_gpu_arch_EQ, Joined, INVALID, INVALID, nullptr, DriverOption, 0,
        "Remove GPU architecture (e.g. sm_35) from the list of GPUs to compile for. 'all' resets the list to its default value.", nullptr, nullptr)
+OPTION(prefix_3, "no-cuda-include-ptx=", no_cuda_include_ptx_EQ, Joined, INVALID, INVALID, nullptr, DriverOption, 0,
+       "Do not include PTX for the follwing GPU architecture (e.g. sm_35) or 'all'. May be specified more than once.", nullptr, nullptr)
 OPTION(prefix_3, "no-cuda-noopt-device-debug", no_cuda_noopt_device_debug, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "no-cuda-version-check", no_cuda_version_check, Flag, INVALID, INVALID, nullptr, 0, 0,
        "Don't error out if the detected version of the CUDA install is too low for the requested CUDA gpu architecture.", nullptr, nullptr)
@@ -2652,7 +2777,7 @@
        "Do not remove finalize method in gc mode", nullptr, nullptr)
 OPTION(prefix_1, "no-implicit-float", no_implicit_float, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Don't generate implicit floating point instructions", nullptr, nullptr)
-OPTION(prefix_1, "no-integrated-as", anonymous_25, Flag, INVALID, fno_integrated_as, nullptr, CC1Option | DriverOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "no-integrated-as", anonymous_27, Flag, INVALID, fno_integrated_as, nullptr, CC1Option | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "no-integrated-cpp", no_integrated_cpp, Flag, INVALID, INVALID, nullptr, DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "no-line-commands", _no_line_commands, Flag, INVALID, P, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "no-ns-alloc-error", migrator_no_nsalloc_error, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
@@ -2666,7 +2791,7 @@
        "Turn off struct-path aware Type Based Alias Analysis", nullptr, nullptr)
 OPTION(prefix_3, "no-system-header-prefix=", no_system_header_prefix, Joined, clang_i_Group, INVALID, nullptr, CC1Option, 0,
        "Treat all #include paths starting with <prefix> as not including a system header.", "<prefix>", nullptr)
-OPTION(prefix_3, "no-system-header-prefix", anonymous_23, Separate, INVALID, no_system_header_prefix, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_3, "no-system-header-prefix", anonymous_25, Separate, INVALID, no_system_header_prefix, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "no-undefined", _no_undefined, Flag, INVALID, INVALID, nullptr, LinkerInput, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "no-warnings", _no_warnings, Flag, INVALID, w, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "no_dead_strip_inits_and_terms", no__dead__strip__inits__and__terms, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2775,6 +2900,8 @@
 OPTION(prefix_3, "param=", _param_EQ, Joined, INVALID, _param, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "param", _param, Separate, CompileOnly_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "pass-exit-codes", pass_exit_codes, Flag, INVALID, INVALID, nullptr, Unsupported, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "pch-through-header=", pch_through_header_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+       "Stop PCH generation after including this file.  When using a PCH, skip tokens until after this file is included.", nullptr, nullptr)
 OPTION(prefix_4, "pedantic-errors", pedantic_errors, Flag, pedantic_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "pedantic", pedantic, Flag, pedantic_Group, INVALID, nullptr, CC1Option, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "permissive-", _SLASH_permissive_, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
@@ -2842,7 +2969,8 @@
 OPTION(prefix_2, "Qfast_transcendentals", _SLASH_Qfast_transcendentals, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "QIfist", _SLASH_QIfist, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Qimprecise_fwaits", _SLASH_Qimprecise_fwaits, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "Qn", Qn, Flag, INVALID, INVALID, nullptr, HelpHidden, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "Qn", Qn, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
+       "Do not emit metadata containing compiler name and version", nullptr, nullptr)
 OPTION(prefix_2, "Qpar", _SLASH_Qpar, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "Qunused-arguments", Qunused_arguments, Flag, INVALID, INVALID, nullptr, DriverOption | CoreOption, 0,
        "Don't emit warning for unused driver arguments", nullptr, nullptr)
@@ -2851,6 +2979,8 @@
        "Disable the loop vectorization passes", nullptr, nullptr)
 OPTION(prefix_2, "Qvec", _SLASH_Qvec, Flag, cl_Group, fvectorize, nullptr, CLOption | DriverOption | CLOption, 0,
        "Enable the loop vectorization passes", nullptr, nullptr)
+OPTION(prefix_1, "Qy", Qy, Flag, INVALID, INVALID, nullptr, CC1Option, 0,
+       "Emit metadata containing compiler name and version", nullptr, nullptr)
 OPTION(prefix_1, "Q", Q, Flag, INVALID, INVALID, nullptr, HelpHidden, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "rdynamic", rdynamic, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "read_only_relocs", read__only__relocs, Separate, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2894,7 +3024,7 @@
        "Save llvm statistics.", nullptr, nullptr)
 OPTION(prefix_4, "save-stats", save_stats, Flag, INVALID, save_stats_EQ, "cwd\0", DriverOption, 0,
        "Save llvm statistics.", nullptr, nullptr)
-OPTION(prefix_4, "save-temps=", save_temps_EQ, Joined, INVALID, INVALID, nullptr, DriverOption, 0,
+OPTION(prefix_4, "save-temps=", save_temps_EQ, Joined, INVALID, INVALID, nullptr, CC1Option | DriverOption, 0,
        "Save intermediate compilation results.", nullptr, nullptr)
 OPTION(prefix_4, "save-temps", save_temps, Flag, INVALID, save_temps_EQ, "cwd\0", DriverOption, 0,
        "Save intermediate compilation results", nullptr, nullptr)
@@ -2918,7 +3048,7 @@
        "File for serializing diagnostics in a binary format", "<filename>", nullptr)
 OPTION(prefix_4, "serialize-diagnostics", _serialize_diags, Separate, INVALID, INVALID, nullptr, DriverOption, 0,
        "Serialize compiler diagnostics to a file", nullptr, nullptr)
-OPTION(prefix_1, "shared-libasan", anonymous_3, Flag, INVALID, shared_libsan, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_1, "shared-libasan", anonymous_5, Flag, INVALID, shared_libsan, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "shared-libgcc", shared_libgcc, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "shared-libsan", shared_libsan, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "shared", shared, Flag, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -2936,7 +3066,7 @@
        "Source encoding, supports only UTF-8", nullptr, nullptr)
 OPTION(prefix_4, "specs=", specs_EQ, Joined, INVALID, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_4, "specs", specs, Separate, INVALID, INVALID, nullptr, Unsupported, 0, nullptr, nullptr, nullptr)
-OPTION(prefix_1, "split-dwarf-file", split_dwarf_file, Separate, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
+OPTION(prefix_1, "split-dwarf-file", split_dwarf_file, Separate, INVALID, INVALID, nullptr, CC1Option | CC1AsOption | NoDriverOption, 0,
        "File name to use for split dwarf debug info output", nullptr, nullptr)
 OPTION(prefix_1, "split-dwarf", split_dwarf, Flag, INVALID, INVALID, nullptr, CC1Option | NoDriverOption, 0,
        "Split out the dwarf .dwo sections", nullptr, nullptr)
@@ -2972,7 +3102,7 @@
 OPTION(prefix_3, "sysroot", _sysroot, Separate, INVALID, _sysroot_EQ, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_3, "system-header-prefix=", system_header_prefix, Joined, clang_i_Group, INVALID, nullptr, CC1Option, 0,
        "Treat all #include paths starting with <prefix> as including a system header.", "<prefix>", nullptr)
-OPTION(prefix_3, "system-header-prefix", anonymous_22, Separate, INVALID, system_header_prefix, nullptr, 0, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_3, "system-header-prefix", anonymous_24, Separate, INVALID, system_header_prefix, nullptr, 0, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_1, "S", S, Flag, Action_Group, INVALID, nullptr, DriverOption | CC1Option, 0,
        "Only run preprocess and compilation steps", nullptr, nullptr)
 OPTION(prefix_1, "s", s, Flag, Link_Group, INVALID, nullptr, 0, 0, nullptr, nullptr, nullptr)
@@ -3198,6 +3328,7 @@
 OPTION(prefix_2, "Z7", _SLASH_Z7, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0,
        "Enable CodeView debug information in object files", nullptr, nullptr)
 OPTION(prefix_2, "Za", _SLASH_Za, Flag, cl_Group, INVALID, nullptr, CLOption | DriverOption | CLOption, 0, nullptr, nullptr, nullptr)
+OPTION(prefix_2, "Zc:__cplusplus", _SLASH_Zc___cplusplus, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Zc:auto", _SLASH_Zc_auto, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Zc:forScope", _SLASH_Zc_forScope, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
 OPTION(prefix_2, "Zc:inline", _SLASH_Zc_inline, Flag, cl_ignored_Group, INVALID, nullptr, CLOption | DriverOption, 0, nullptr, nullptr, nullptr)
diff --git a/linux-x64/clang/include/clang/Driver/Tool.h b/linux-x64/clang/include/clang/Driver/Tool.h
index 8f76e17..b02ac66 100644
--- a/linux-x64/clang/include/clang/Driver/Tool.h
+++ b/linux-x64/clang/include/clang/Driver/Tool.h
@@ -88,12 +88,12 @@
   virtual bool hasIntegratedCPP() const = 0;
   virtual bool isLinkJob() const { return false; }
   virtual bool isDsymutilJob() const { return false; }
-  /// \brief Returns the level of support for response files of this tool,
+  /// Returns the level of support for response files of this tool,
   /// whether it accepts arguments to be passed via a file on disk.
   ResponseFileSupport getResponseFilesSupport() const {
     return ResponseSupport;
   }
-  /// \brief Returns which encoding the response file should use. This is only
+  /// Returns which encoding the response file should use. This is only
   /// relevant on Windows platforms where there are different encodings being
   /// accepted for different tools. On UNIX, UTF8 is universal.
   ///
@@ -108,11 +108,11 @@
   llvm::sys::WindowsEncodingMethod getResponseFileEncoding() const {
     return ResponseEncoding;
   }
-  /// \brief Returns which prefix to use when passing the name of a response
+  /// Returns which prefix to use when passing the name of a response
   /// file as a parameter to this tool.
   const char *getResponseFileFlag() const { return ResponseFlag; }
 
-  /// \brief Does this tool have "good" standardized diagnostics, or should the
+  /// Does this tool have "good" standardized diagnostics, or should the
   /// driver add an additional "command failed" diagnostic on failures.
   virtual bool hasGoodDiagnostics() const { return false; }
 
diff --git a/linux-x64/clang/include/clang/Driver/ToolChain.h b/linux-x64/clang/include/clang/Driver/ToolChain.h
index b1f7338..2f9c2c1 100644
--- a/linux-x64/clang/include/clang/Driver/ToolChain.h
+++ b/linux-x64/clang/include/clang/Driver/ToolChain.h
@@ -12,7 +12,6 @@
 
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/Sanitizers.h"
-#include "clang/Basic/VersionTuple.h"
 #include "clang/Driver/Action.h"
 #include "clang/Driver/Multilib.h"
 #include "clang/Driver/Types.h"
@@ -22,6 +21,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/MC/MCTargetOptions.h"
 #include "llvm/Option/Option.h"
+#include "llvm/Support/VersionTuple.h"
 #include "llvm/Target/TargetOptions.h"
 #include <cassert>
 #include <memory>
@@ -78,6 +78,10 @@
                   bool IsRegistered)
       : TargetPrefix(Target), ModeSuffix(Suffix), DriverMode(Mode),
         TargetIsValid(IsRegistered) {}
+
+  bool isEmpty() const {
+    return TargetPrefix.empty() && ModeSuffix.empty() && DriverMode == nullptr;
+  }
 };
 
 /// ToolChain - Access to tools for a single platform.
@@ -96,10 +100,8 @@
   };
 
   enum RTTIMode {
-    RM_EnabledExplicitly,
-    RM_EnabledImplicitly,
-    RM_DisabledExplicitly,
-    RM_DisabledImplicitly
+    RM_Enabled,
+    RM_Disabled,
   };
 
 private:
@@ -197,7 +199,7 @@
   StringRef getPlatform() const { return Triple.getVendorName(); }
   StringRef getOS() const { return Triple.getOSName(); }
 
-  /// \brief Provide the default architecture name (as expected by -arch) for
+  /// Provide the default architecture name (as expected by -arch) for
   /// this toolchain.
   StringRef getDefaultUniversalArchName() const;
 
@@ -229,7 +231,7 @@
   // Returns the RTTIMode for the toolchain with the current arguments.
   RTTIMode getRTTIMode() const { return CachedRTTIMode; }
 
-  /// \brief Return any implicit target and/or mode flag for an invocation of
+  /// Return any implicit target and/or mode flag for an invocation of
   /// the compiler driver as `ProgName`.
   ///
   /// For example, when called with i686-linux-android-g++, the first element
@@ -283,7 +285,7 @@
   /// the linker suffix or name.
   std::string GetLinkerPath() const;
 
-  /// \brief Dispatch to the specific toolchain for verbose printing.
+  /// Dispatch to the specific toolchain for verbose printing.
   ///
   /// This is used when handling the verbose option to print detailed,
   /// toolchain-specific information useful for understanding the behavior of
@@ -292,7 +294,7 @@
 
   // Platform defaults information
 
-  /// \brief Returns true if the toolchain is targeting a non-native
+  /// Returns true if the toolchain is targeting a non-native
   /// architecture.
   virtual bool isCrossCompiling() const;
 
@@ -311,7 +313,7 @@
   /// by default.
   virtual bool IsIntegratedAssemblerDefault() const { return false; }
 
-  /// \brief Check if the toolchain should use the integrated assembler.
+  /// Check if the toolchain should use the integrated assembler.
   virtual bool useIntegratedAs() const;
 
   /// IsMathErrnoDefault - Does this tool chain use -fmath-errno by default.
@@ -329,7 +331,7 @@
   /// mixed dispatch method be used?
   virtual bool UseObjCMixedDispatch() const { return false; }
 
-  /// \brief Check whether to enable x86 relax relocations by default.
+  /// Check whether to enable x86 relax relocations by default.
   virtual bool useRelaxRelocations() const;
 
   /// GetDefaultStackProtectorLevel - Get the default stack protector level for
@@ -374,13 +376,13 @@
   /// by default.
   virtual bool IsUnwindTablesDefault(const llvm::opt::ArgList &Args) const;
 
-  /// \brief Test whether this toolchain defaults to PIC.
+  /// Test whether this toolchain defaults to PIC.
   virtual bool isPICDefault() const = 0;
 
-  /// \brief Test whether this toolchain defaults to PIE.
+  /// Test whether this toolchain defaults to PIE.
   virtual bool isPIEDefault() const = 0;
 
-  /// \brief Tests whether this toolchain forces its default for PIC, PIE or
+  /// Tests whether this toolchain forces its default for PIC, PIE or
   /// non-PIC.  If this returns true, any PIC related flags should be ignored
   /// and instead the results of \c isPICDefault() and \c isPIEDefault() are
   /// used exclusively.
@@ -411,6 +413,11 @@
     return llvm::DebuggerKind::GDB;
   }
 
+  /// Does this toolchain supports given debug info option or not.
+  virtual bool supportsDebugInfoOption(const llvm::opt::Arg *) const {
+    return true;
+  }
+
   /// GetExceptionModel - Return the tool chain exception model.
   virtual llvm::ExceptionHandling
   GetExceptionModel(const llvm::opt::ArgList &Args) const;
@@ -452,7 +459,7 @@
   /// FIXME: this really belongs on some sort of DeploymentTarget abstraction
   virtual bool hasBlocksRuntime() const { return true; }
 
-  /// \brief Add the clang cc1 arguments for system include paths.
+  /// Add the clang cc1 arguments for system include paths.
   ///
   /// This routine is responsible for adding the necessary cc1 arguments to
   /// include headers from standard system header directories.
@@ -460,12 +467,12 @@
   AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                             llvm::opt::ArgStringList &CC1Args) const;
 
-  /// \brief Add options that need to be passed to cc1 for this target.
+  /// Add options that need to be passed to cc1 for this target.
   virtual void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
                                      llvm::opt::ArgStringList &CC1Args,
                                      Action::OffloadKind DeviceOffloadKind) const;
 
-  /// \brief Add warning options that need to be passed to cc1 for this target.
+  /// Add warning options that need to be passed to cc1 for this target.
   virtual void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const;
 
   // GetRuntimeLibType - Determine the runtime library type to use with the
@@ -513,22 +520,22 @@
   virtual void addProfileRTLibs(const llvm::opt::ArgList &Args,
                                 llvm::opt::ArgStringList &CmdArgs) const;
 
-  /// \brief Add arguments to use system-specific CUDA includes.
+  /// Add arguments to use system-specific CUDA includes.
   virtual void AddCudaIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                                   llvm::opt::ArgStringList &CC1Args) const;
 
-  /// \brief Add arguments to use MCU GCC toolchain includes.
+  /// Add arguments to use MCU GCC toolchain includes.
   virtual void AddIAMCUIncludeArgs(const llvm::opt::ArgList &DriverArgs,
                                    llvm::opt::ArgStringList &CC1Args) const;
 
-  /// \brief On Windows, returns the MSVC compatibility version.
+  /// On Windows, returns the MSVC compatibility version.
   virtual VersionTuple computeMSVCVersion(const Driver *D,
                                           const llvm::opt::ArgList &Args) const;
 
-  /// \brief Return sanitizers which are available in this toolchain.
+  /// Return sanitizers which are available in this toolchain.
   virtual SanitizerMask getSupportedSanitizers() const;
 
-  /// \brief Return sanitizers which are enabled by default.
+  /// Return sanitizers which are enabled by default.
   virtual SanitizerMask getDefaultSanitizers() const { return 0; }
 };
 
diff --git a/linux-x64/clang/include/clang/Driver/Types.def b/linux-x64/clang/include/clang/Driver/Types.def
index 2430b5b..c23f1f1 100644
--- a/linux-x64/clang/include/clang/Driver/Types.def
+++ b/linux-x64/clang/include/clang/Driver/Types.def
@@ -46,6 +46,9 @@
 TYPE("cuda-cpp-output",          PP_CUDA,      INVALID,         "cui",   "u")
 TYPE("cuda",                     CUDA,         PP_CUDA,         "cu",    "u")
 TYPE("cuda",                     CUDA_DEVICE,  PP_CUDA,         "cu",    "")
+TYPE("hip-cpp-output",           PP_HIP,       INVALID,         "cui",   "u")
+TYPE("hip",                      HIP,          PP_HIP,          "cu",    "u")
+TYPE("hip",                      HIP_DEVICE,   PP_HIP,          "cu",    "")
 TYPE("objective-c-cpp-output",   PP_ObjC,      INVALID,         "mi",    "u")
 TYPE("objc-cpp-output",          PP_ObjC_Alias, INVALID,        "mi",    "u")
 TYPE("objective-c",              ObjC,         PP_ObjC,         "m",     "u")
diff --git a/linux-x64/clang/include/clang/Driver/Types.h b/linux-x64/clang/include/clang/Driver/Types.h
index 22a26ae..5bc6668 100644
--- a/linux-x64/clang/include/clang/Driver/Types.h
+++ b/linux-x64/clang/include/clang/Driver/Types.h
@@ -77,6 +77,9 @@
   /// isCuda - Is this a CUDA input.
   bool isCuda(ID Id);
 
+  /// isHIP - Is this a HIP input.
+  bool isHIP(ID Id);
+
   /// isObjC - Is this an "ObjC" input (Obj-C and Obj-C++ sources and headers).
   bool isObjC(ID Id);
 
diff --git a/linux-x64/clang/include/clang/Driver/XRayArgs.h b/linux-x64/clang/include/clang/Driver/XRayArgs.h
index e5b7616..c7ca945 100644
--- a/linux-x64/clang/include/clang/Driver/XRayArgs.h
+++ b/linux-x64/clang/include/clang/Driver/XRayArgs.h
@@ -9,6 +9,7 @@
 #ifndef LLVM_CLANG_DRIVER_XRAYARGS_H
 #define LLVM_CLANG_DRIVER_XRAYARGS_H
 
+#include "clang/Basic/XRayInstr.h"
 #include "clang/Driver/Types.h"
 #include "llvm/Option/Arg.h"
 #include "llvm/Option/ArgList.h"
@@ -21,16 +22,25 @@
 class XRayArgs {
   std::vector<std::string> AlwaysInstrumentFiles;
   std::vector<std::string> NeverInstrumentFiles;
+  std::vector<std::string> AttrListFiles;
   std::vector<std::string> ExtraDeps;
+  std::vector<std::string> Modes;
+  XRayInstrSet InstrumentationBundle;
   bool XRayInstrument = false;
   int InstructionThreshold = 200;
   bool XRayAlwaysEmitCustomEvents = false;
+  bool XRayAlwaysEmitTypedEvents = false;
+  bool XRayRT = true;
 
 public:
   /// Parses the XRay arguments from an argument list.
   XRayArgs(const ToolChain &TC, const llvm::opt::ArgList &Args);
   void addArgs(const ToolChain &TC, const llvm::opt::ArgList &Args,
                llvm::opt::ArgStringList &CmdArgs, types::ID InputType) const;
+
+  bool needsXRayRt() const { return XRayInstrument && XRayRT; }
+  llvm::ArrayRef<std::string> modeList() const { return Modes; }
+  XRayInstrSet instrumentationBundle() const { return InstrumentationBundle; }
 };
 
 } // namespace driver
diff --git a/linux-x64/clang/include/clang/Edit/Commit.h b/linux-x64/clang/include/clang/Edit/Commit.h
index a574b8e..d6eb6cd 100644
--- a/linux-x64/clang/include/clang/Edit/Commit.h
+++ b/linux-x64/clang/include/clang/Edit/Commit.h
@@ -57,7 +57,7 @@
 
   bool IsCommitable = true;
   SmallVector<Edit, 8> CachedEdits;
-  
+
   llvm::BumpPtrAllocator StrAlloc;
 
 public:
diff --git a/linux-x64/clang/include/clang/Edit/EditedSource.h b/linux-x64/clang/include/clang/Edit/EditedSource.h
index 3d33688..52873c3 100644
--- a/linux-x64/clang/include/clang/Edit/EditedSource.h
+++ b/linux-x64/clang/include/clang/Edit/EditedSource.h
@@ -85,7 +85,7 @@
   bool canInsertInOffset(SourceLocation OrigLoc, FileOffset Offs);
 
   bool commit(const Commit &commit);
-  
+
   void applyRewrites(EditsReceiver &receiver, bool adjustRemovals = true);
   void clearRewrites();
 
diff --git a/linux-x64/clang/include/clang/Edit/EditsReceiver.h b/linux-x64/clang/include/clang/Edit/EditsReceiver.h
index 4fd4347..1bebbeb 100644
--- a/linux-x64/clang/include/clang/Edit/EditsReceiver.h
+++ b/linux-x64/clang/include/clang/Edit/EditsReceiver.h
@@ -24,7 +24,7 @@
   virtual void insert(SourceLocation loc, StringRef text) = 0;
   virtual void replace(CharSourceRange range, StringRef text) = 0;
 
-  /// \brief By default it calls replace with an empty string.
+  /// By default it calls replace with an empty string.
   virtual void remove(CharSourceRange range);
 };
 
diff --git a/linux-x64/clang/include/clang/Edit/Rewriters.h b/linux-x64/clang/include/clang/Edit/Rewriters.h
index 980ed1d..8338d71 100644
--- a/linux-x64/clang/include/clang/Edit/Rewriters.h
+++ b/linux-x64/clang/include/clang/Edit/Rewriters.h
@@ -29,7 +29,7 @@
 bool rewriteToObjCLiteralSyntax(const ObjCMessageExpr *Msg,
                                 const NSAPI &NS, Commit &commit,
                                 const ParentMap *PMap);
-  
+
 bool rewriteToObjCSubscriptSyntax(const ObjCMessageExpr *Msg,
                                   const NSAPI &NS, Commit &commit);
 
diff --git a/linux-x64/clang/include/clang/Format/Format.h b/linux-x64/clang/include/clang/Format/Format.h
index 0a8b6cf..85dda94 100644
--- a/linux-x64/clang/include/clang/Format/Format.h
+++ b/linux-x64/clang/include/clang/Format/Format.h
@@ -17,7 +17,9 @@
 
 #include "clang/Basic/LangOptions.h"
 #include "clang/Tooling/Core/Replacement.h"
+#include "clang/Tooling/Inclusions/IncludeStyle.h"
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/Support/Regex.h"
 #include <system_error>
 
 namespace clang {
@@ -41,27 +43,27 @@
 const std::error_category &getParseCategory();
 std::error_code make_error_code(ParseError e);
 
-/// \brief The ``FormatStyle`` is used to configure the formatting to follow
+/// The ``FormatStyle`` is used to configure the formatting to follow
 /// specific guidelines.
 struct FormatStyle {
-  /// \brief The extra indent or outdent of access modifiers, e.g. ``public:``.
+  /// The extra indent or outdent of access modifiers, e.g. ``public:``.
   int AccessModifierOffset;
 
-  /// \brief Different styles for aligning after open brackets.
+  /// Different styles for aligning after open brackets.
   enum BracketAlignmentStyle {
-    /// \brief Align parameters on the open bracket, e.g.:
+    /// Align parameters on the open bracket, e.g.:
     /// \code
     ///   someLongFunction(argument1,
     ///                    argument2);
     /// \endcode
     BAS_Align,
-    /// \brief Don't align, instead use ``ContinuationIndentWidth``, e.g.:
+    /// Don't align, instead use ``ContinuationIndentWidth``, e.g.:
     /// \code
     ///   someLongFunction(argument1,
     ///       argument2);
     /// \endcode
     BAS_DontAlign,
-    /// \brief Always break after an open bracket, if the parameters don't fit
+    /// Always break after an open bracket, if the parameters don't fit
     /// on a single line, e.g.:
     /// \code
     ///   someLongFunction(
@@ -70,13 +72,13 @@
     BAS_AlwaysBreak,
   };
 
-  /// \brief If ``true``, horizontally aligns arguments after an open bracket.
+  /// If ``true``, horizontally aligns arguments after an open bracket.
   ///
   /// This applies to round brackets (parentheses), angle brackets and square
   /// brackets.
   BracketAlignmentStyle AlignAfterOpenBracket;
 
-  /// \brief If ``true``, aligns consecutive assignments.
+  /// If ``true``, aligns consecutive assignments.
   ///
   /// This will align the assignment operators of consecutive lines. This
   /// will result in formattings like
@@ -87,7 +89,7 @@
   /// \endcode
   bool AlignConsecutiveAssignments;
 
-  /// \brief If ``true``, aligns consecutive declarations.
+  /// If ``true``, aligns consecutive declarations.
   ///
   /// This will align the declaration names of consecutive lines. This
   /// will result in formattings like
@@ -98,9 +100,9 @@
   /// \endcode
   bool AlignConsecutiveDeclarations;
 
-  /// \brief Different styles for aligning escaped newlines.
+  /// Different styles for aligning escaped newlines.
   enum EscapedNewlineAlignmentStyle {
-    /// \brief Don't align escaped newlines.
+    /// Don't align escaped newlines.
     /// \code
     ///   #define A \
     ///     int aaaa; \
@@ -108,7 +110,7 @@
     ///     int dddddddddd;
     /// \endcode
     ENAS_DontAlign,
-    /// \brief Align escaped newlines as far left as possible.
+    /// Align escaped newlines as far left as possible.
     /// \code
     ///   true:
     ///   #define A   \
@@ -119,7 +121,7 @@
     ///   false:
     /// \endcode
     ENAS_Left,
-    /// \brief Align escaped newlines in the right-most column.
+    /// Align escaped newlines in the right-most column.
     /// \code
     ///   #define A                                                                      \
     ///     int aaaa;                                                                    \
@@ -129,10 +131,10 @@
     ENAS_Right,
   };
 
-  /// \brief Options for aligning backslashes in escaped newlines.
+  /// Options for aligning backslashes in escaped newlines.
   EscapedNewlineAlignmentStyle AlignEscapedNewlines;
 
-  /// \brief If ``true``, horizontally align operands of binary and ternary
+  /// If ``true``, horizontally align operands of binary and ternary
   /// expressions.
   ///
   /// Specifically, this aligns operands of a single expression that needs to be
@@ -143,7 +145,7 @@
   /// \endcode
   bool AlignOperands;
 
-  /// \brief If ``true``, aligns trailing comments.
+  /// If ``true``, aligns trailing comments.
   /// \code
   ///   true:                                   false:
   ///   int a;     // My comment a      vs.     int a; // My comment a
@@ -151,7 +153,7 @@
   /// \endcode
   bool AlignTrailingComments;
 
-  /// \brief If the function declaration doesn't fit on a line,
+  /// If the function declaration doesn't fit on a line,
   /// allow putting all parameters of a function declaration onto
   /// the next line even if ``BinPackParameters`` is ``false``.
   /// \code
@@ -168,12 +170,12 @@
   /// \endcode
   bool AllowAllParametersOfDeclarationOnNextLine;
 
-  /// \brief Allows contracting simple braced statements to a single line.
+  /// Allows contracting simple braced statements to a single line.
   ///
   /// E.g., this allows ``if (a) { return; }`` to be put on a single line.
   bool AllowShortBlocksOnASingleLine;
 
-  /// \brief If ``true``, short case labels will be contracted to a single line.
+  /// If ``true``, short case labels will be contracted to a single line.
   /// \code
   ///   true:                                   false:
   ///   switch (a) {                    vs.     switch (a) {
@@ -186,12 +188,12 @@
   /// \endcode
   bool AllowShortCaseLabelsOnASingleLine;
 
-  /// \brief Different styles for merging short functions containing at most one
+  /// Different styles for merging short functions containing at most one
   /// statement.
   enum ShortFunctionStyle {
-    /// \brief Never merge functions into a single line.
+    /// Never merge functions into a single line.
     SFS_None,
-    /// \brief Only merge functions defined inside a class. Same as "inline",
+    /// Only merge functions defined inside a class. Same as "inline",
     /// except it does not implies "empty": i.e. top level empty functions
     /// are not merged either.
     /// \code
@@ -205,7 +207,7 @@
     ///   }
     /// \endcode
     SFS_InlineOnly,
-    /// \brief Only merge empty functions.
+    /// Only merge empty functions.
     /// \code
     ///   void f() {}
     ///   void f2() {
@@ -213,7 +215,7 @@
     ///   }
     /// \endcode
     SFS_Empty,
-    /// \brief Only merge functions defined inside a class. Implies "empty".
+    /// Only merge functions defined inside a class. Implies "empty".
     /// \code
     ///   class Foo {
     ///     void f() { foo(); }
@@ -224,7 +226,7 @@
     ///   void f() {}
     /// \endcode
     SFS_Inline,
-    /// \brief Merge all functions fitting on a single line.
+    /// Merge all functions fitting on a single line.
     /// \code
     ///   class Foo {
     ///     void f() { foo(); }
@@ -234,18 +236,18 @@
     SFS_All,
   };
 
-  /// \brief Dependent on the value, ``int f() { return 0; }`` can be put on a
+  /// Dependent on the value, ``int f() { return 0; }`` can be put on a
   /// single line.
   ShortFunctionStyle AllowShortFunctionsOnASingleLine;
 
-  /// \brief If ``true``, ``if (a) return;`` can be put on a single line.
+  /// If ``true``, ``if (a) return;`` can be put on a single line.
   bool AllowShortIfStatementsOnASingleLine;
 
-  /// \brief If ``true``, ``while (true) continue;`` can be put on a single
+  /// If ``true``, ``while (true) continue;`` can be put on a single
   /// line.
   bool AllowShortLoopsOnASingleLine;
 
-  /// \brief Different ways to break after the function definition return type.
+  /// Different ways to break after the function definition return type.
   /// This option is **deprecated** and is retained for backwards compatibility.
   enum DefinitionReturnTypeBreakingStyle {
     /// Break after return type automatically.
@@ -257,7 +259,7 @@
     DRTBS_TopLevel,
   };
 
-  /// \brief Different ways to break after the function definition or
+  /// Different ways to break after the function definition or
   /// declaration return type.
   enum ReturnTypeBreakingStyle {
     /// Break after return type automatically.
@@ -328,14 +330,14 @@
     RTBS_TopLevelDefinitions,
   };
 
-  /// \brief The function definition return type breaking style to use.  This
+  /// The function definition return type breaking style to use.  This
   /// option is **deprecated** and is retained for backwards compatibility.
   DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
 
-  /// \brief The function declaration return type breaking style to use.
+  /// The function declaration return type breaking style to use.
   ReturnTypeBreakingStyle AlwaysBreakAfterReturnType;
 
-  /// \brief If ``true``, always break before multiline string literals.
+  /// If ``true``, always break before multiline string literals.
   ///
   /// This flag is mean to make cases where there are multiple multiline strings
   /// in a file look more consistent. Thus, it will only take effect if wrapping
@@ -349,16 +351,46 @@
   /// \endcode
   bool AlwaysBreakBeforeMultilineStrings;
 
-  /// \brief If ``true``, always break after the ``template<...>`` of a template
-  /// declaration.
-  /// \code
-  ///    true:                                  false:
-  ///    template <typename T>          vs.     template <typename T> class C {};
-  ///    class C {};
-  /// \endcode
-  bool AlwaysBreakTemplateDeclarations;
+  /// Different ways to break after the template declaration.
+  enum BreakTemplateDeclarationsStyle {
+      /// Do not force break before declaration.
+      /// ``PenaltyBreakTemplateDeclaration`` is taken into account.
+      /// \code
+      ///    template <typename T> T foo() {
+      ///    }
+      ///    template <typename T> T foo(int aaaaaaaaaaaaaaaaaaaaa,
+      ///                                int bbbbbbbbbbbbbbbbbbbbb) {
+      ///    }
+      /// \endcode
+      BTDS_No,
+      /// Force break after template declaration only when the following
+      /// declaration spans multiple lines.
+      /// \code
+      ///    template <typename T> T foo() {
+      ///    }
+      ///    template <typename T>
+      ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
+      ///          int bbbbbbbbbbbbbbbbbbbbb) {
+      ///    }
+      /// \endcode
+      BTDS_MultiLine,
+      /// Always break after template declaration.
+      /// \code
+      ///    template <typename T>
+      ///    T foo() {
+      ///    }
+      ///    template <typename T>
+      ///    T foo(int aaaaaaaaaaaaaaaaaaaaa,
+      ///          int bbbbbbbbbbbbbbbbbbbbb) {
+      ///    }
+      /// \endcode
+      BTDS_Yes
+  };
 
-  /// \brief If ``false``, a function call's arguments will either be all on the
+  /// The template declaration breaking style to use.
+  BreakTemplateDeclarationsStyle AlwaysBreakTemplateDeclarations;
+
+  /// If ``false``, a function call's arguments will either be all on the
   /// same line or will have one line each.
   /// \code
   ///   true:
@@ -376,7 +408,7 @@
   /// \endcode
   bool BinPackArguments;
 
-  /// \brief If ``false``, a function declaration's or function definition's
+  /// If ``false``, a function declaration's or function definition's
   /// parameters will either all be on the same line or will have one line each.
   /// \code
   ///   true:
@@ -390,7 +422,7 @@
   /// \endcode
   bool BinPackParameters;
 
-  /// \brief The style of wrapping parameters on the same line (bin-packed) or
+  /// The style of wrapping parameters on the same line (bin-packed) or
   /// on one line each.
   enum BinPackStyle {
     /// Automatically determine parameter bin-packing behavior.
@@ -401,7 +433,7 @@
     BPS_Never,
   };
 
-  /// \brief The style of breaking before or after binary operators.
+  /// The style of breaking before or after binary operators.
   enum BinaryOperatorStyle {
     /// Break after operators.
     /// \code
@@ -441,10 +473,10 @@
     BOS_All,
   };
 
-  /// \brief The way to wrap binary operators.
+  /// The way to wrap binary operators.
   BinaryOperatorStyle BreakBeforeBinaryOperators;
 
-  /// \brief Different ways to attach braces to their surrounding context.
+  /// Different ways to attach braces to their surrounding context.
   enum BraceBreakingStyle {
     /// Always attach braces to surrounding context.
     /// \code
@@ -579,10 +611,10 @@
     BS_Custom
   };
 
-  /// \brief The brace breaking style to use.
+  /// The brace breaking style to use.
   BraceBreakingStyle BreakBeforeBraces;
 
-  /// \brief Precise control over the wrapping of braces.
+  /// Precise control over the wrapping of braces.
   /// \code
   ///   # Should be declared this way:
   ///   BreakBeforeBraces: Custom
@@ -590,7 +622,7 @@
   ///       AfterClass: true
   /// \endcode
   struct BraceWrappingFlags {
-    /// \brief Wrap class definitions.
+    /// Wrap class definitions.
     /// \code
     ///   true:
     ///   class foo {};
@@ -600,7 +632,7 @@
     ///   {};
     /// \endcode
     bool AfterClass;
-    /// \brief Wrap control statements (``if``/``for``/``while``/``switch``/..).
+    /// Wrap control statements (``if``/``for``/``while``/``switch``/..).
     /// \code
     ///   true:
     ///   if (foo())
@@ -618,7 +650,7 @@
     ///   }
     /// \endcode
     bool AfterControlStatement;
-    /// \brief Wrap enum definitions.
+    /// Wrap enum definitions.
     /// \code
     ///   true:
     ///   enum X : int
@@ -630,7 +662,7 @@
     ///   enum X : int { B };
     /// \endcode
     bool AfterEnum;
-    /// \brief Wrap function definitions.
+    /// Wrap function definitions.
     /// \code
     ///   true:
     ///   void foo()
@@ -646,7 +678,7 @@
     ///   }
     /// \endcode
     bool AfterFunction;
-    /// \brief Wrap namespace definitions.
+    /// Wrap namespace definitions.
     /// \code
     ///   true:
     ///   namespace
@@ -662,11 +694,11 @@
     ///   }
     /// \endcode
     bool AfterNamespace;
-    /// \brief Wrap ObjC definitions (interfaces, implementations...).
+    /// Wrap ObjC definitions (interfaces, implementations...).
     /// \note @autoreleasepool and @synchronized blocks are wrapped
     /// according to `AfterControlStatement` flag.
     bool AfterObjCDeclaration;
-    /// \brief Wrap struct definitions.
+    /// Wrap struct definitions.
     /// \code
     ///   true:
     ///   struct foo
@@ -680,7 +712,7 @@
     ///   };
     /// \endcode
     bool AfterStruct;
-    /// \brief Wrap union definitions.
+    /// Wrap union definitions.
     /// \code
     ///   true:
     ///   union foo
@@ -694,7 +726,7 @@
     ///   }
     /// \endcode
     bool AfterUnion;
-    /// \brief Wrap extern blocks.
+    /// Wrap extern blocks.
     /// \code
     ///   true:
     ///   extern "C"
@@ -708,7 +740,7 @@
     ///   }
     /// \endcode
     bool AfterExternBlock;
-    /// \brief Wrap before ``catch``.
+    /// Wrap before ``catch``.
     /// \code
     ///   true:
     ///   try {
@@ -724,7 +756,7 @@
     ///   }
     /// \endcode
     bool BeforeCatch;
-    /// \brief Wrap before ``else``.
+    /// Wrap before ``else``.
     /// \code
     ///   true:
     ///   if (foo()) {
@@ -738,9 +770,9 @@
     ///   }
     /// \endcode
     bool BeforeElse;
-    /// \brief Indent the wrapped braces themselves.
+    /// Indent the wrapped braces themselves.
     bool IndentBraces;
-    /// \brief If ``false``, empty function body can be put on a single line.
+    /// If ``false``, empty function body can be put on a single line.
     /// This option is used only if the opening brace of the function has
     /// already been wrapped, i.e. the `AfterFunction` brace wrapping mode is
     /// set, and the function could/should not be put on a single line (as per
@@ -752,7 +784,7 @@
     /// \endcode
     ///
     bool SplitEmptyFunction;
-    /// \brief If ``false``, empty record (e.g. class, struct or union) body
+    /// If ``false``, empty record (e.g. class, struct or union) body
     /// can be put on a single line. This option is used only if the opening
     /// brace of the record has already been wrapped, i.e. the `AfterClass`
     /// (for classes) brace wrapping mode is set.
@@ -763,7 +795,7 @@
     /// \endcode
     ///
     bool SplitEmptyRecord;
-    /// \brief If ``false``, empty namespace body can be put on a single line.
+    /// If ``false``, empty namespace body can be put on a single line.
     /// This option is used only if the opening brace of the namespace has
     /// already been wrapped, i.e. the `AfterNamespace` brace wrapping mode is
     /// set.
@@ -776,7 +808,7 @@
     bool SplitEmptyNamespace;
   };
 
-  /// \brief Control of individual brace wrapping cases.
+  /// Control of individual brace wrapping cases.
   ///
   /// If ``BreakBeforeBraces`` is set to ``BS_Custom``, use this to specify how
   /// each individual brace case should be handled. Otherwise, this is ignored.
@@ -790,7 +822,7 @@
   /// \endcode
   BraceWrappingFlags BraceWrapping;
 
-  /// \brief If ``true``, ternary operators will be placed after line breaks.
+  /// If ``true``, ternary operators will be placed after line breaks.
   /// \code
   ///    true:
   ///    veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription
@@ -804,36 +836,36 @@
   /// \endcode
   bool BreakBeforeTernaryOperators;
 
-  /// \brief Different ways to break initializers.
+  /// Different ways to break initializers.
   enum BreakConstructorInitializersStyle {
     /// Break constructor initializers before the colon and after the commas.
     /// \code
-    /// Constructor()
-    ///     : initializer1(),
-    ///       initializer2()
+    ///    Constructor()
+    ///        : initializer1(),
+    ///          initializer2()
     /// \endcode
     BCIS_BeforeColon,
     /// Break constructor initializers before the colon and commas, and align
     /// the commas with the colon.
     /// \code
-    /// Constructor()
-    ///     : initializer1()
-    ///     , initializer2()
+    ///    Constructor()
+    ///        : initializer1()
+    ///        , initializer2()
     /// \endcode
     BCIS_BeforeComma,
     /// Break constructor initializers after the colon and commas.
     /// \code
-    /// Constructor() :
-    ///     initializer1(),
-    ///     initializer2()
+    ///    Constructor() :
+    ///        initializer1(),
+    ///        initializer2()
     /// \endcode
     BCIS_AfterColon
   };
 
-  /// \brief The constructor initializers style to use.
+  /// The constructor initializers style to use.
   BreakConstructorInitializersStyle BreakConstructorInitializers;
 
-  /// \brief Break after each annotation on a field in Java files.
+  /// Break after each annotation on a field in Java files.
   /// \code{.java}
   ///    true:                                  false:
   ///    @Partial                       vs.     @Partial @Mock DataLoad loader;
@@ -842,17 +874,17 @@
   /// \endcode
   bool BreakAfterJavaFieldAnnotations;
 
-  /// \brief Allow breaking string literals when formatting.
+  /// Allow breaking string literals when formatting.
   bool BreakStringLiterals;
 
-  /// \brief The column limit.
+  /// The column limit.
   ///
   /// A column limit of ``0`` means that there is no column limit. In this case,
   /// clang-format will respect the input's line breaking decisions within
   /// statements unless they contradict other rules.
   unsigned ColumnLimit;
 
-  /// \brief A regular expression that describes comments with special meaning,
+  /// A regular expression that describes comments with special meaning,
   /// which should not be split into lines or otherwise changed.
   /// \code
   ///    // CommentPragmas: '^ FOOBAR pragma:'
@@ -861,18 +893,39 @@
   /// \endcode
   std::string CommentPragmas;
 
-  /// \brief If ``true``, in the class inheritance expression clang-format will
-  /// break before ``:`` and ``,`` if there is multiple inheritance.
-  /// \code
-  ///    true:                                  false:
-  ///    class MyClass                  vs.     class MyClass : public X, public Y {
-  ///        : public X                         };
-  ///        , public Y {
-  ///    };
-  /// \endcode
-  bool BreakBeforeInheritanceComma;
+  /// Different ways to break inheritance list.
+  enum BreakInheritanceListStyle {
+    /// Break inheritance list before the colon and after the commas.
+    /// \code
+    ///    class Foo
+    ///        : Base1,
+    ///          Base2
+    ///    {};
+    /// \endcode
+    BILS_BeforeColon,
+    /// Break inheritance list before the colon and commas, and align
+    /// the commas with the colon.
+    /// \code
+    ///    class Foo
+    ///        : Base1
+    ///        , Base2
+    ///    {};
+    /// \endcode
+    BILS_BeforeComma,
+    /// Break inheritance list after the colon and commas.
+    /// \code
+    ///    class Foo :
+    ///        Base1,
+    ///        Base2
+    ///    {};
+    /// \endcode
+    BILS_AfterColon
+  };
 
-  /// \brief If ``true``, consecutive namespace declarations will be on the same
+  /// The inheritance list style to use.
+  BreakInheritanceListStyle BreakInheritanceList;
+
+  /// If ``true``, consecutive namespace declarations will be on the same
   /// line. If ``false``, each namespace is declared on a new line.
   /// \code
   ///   true:
@@ -895,7 +948,7 @@
   /// \endcode
   bool CompactNamespaces;
 
-  /// \brief If the constructor initializers don't fit on a line, put each
+  /// If the constructor initializers don't fit on a line, put each
   /// initializer on its own line.
   /// \code
   ///   true:
@@ -913,11 +966,11 @@
   /// \endcode
   bool ConstructorInitializerAllOnOneLineOrOnePerLine;
 
-  /// \brief The number of characters to use for indentation of constructor
-  /// initializer lists.
+  /// The number of characters to use for indentation of constructor
+  /// initializer lists as well as inheritance lists.
   unsigned ConstructorInitializerIndentWidth;
 
-  /// \brief Indent width for line continuations.
+  /// Indent width for line continuations.
   /// \code
   ///    ContinuationIndentWidth: 2
   ///
@@ -927,7 +980,7 @@
   /// \endcode
   unsigned ContinuationIndentWidth;
 
-  /// \brief If ``true``, format braced lists as best suited for C++11 braced
+  /// If ``true``, format braced lists as best suited for C++11 braced
   /// lists.
   ///
   /// Important differences:
@@ -949,17 +1002,17 @@
   /// \endcode
   bool Cpp11BracedListStyle;
 
-  /// \brief If ``true``, analyze the formatted file for the most common
+  /// If ``true``, analyze the formatted file for the most common
   /// alignment of ``&`` and ``*``.
   /// Pointer and reference alignment styles are going to be updated according
   /// to the preferences found in the file.
   /// ``PointerAlignment`` is then used only as fallback.
   bool DerivePointerAlignment;
 
-  /// \brief Disables formatting completely.
+  /// Disables formatting completely.
   bool DisableFormat;
 
-  /// \brief If ``true``, clang-format detects whether function calls and
+  /// If ``true``, clang-format detects whether function calls and
   /// definitions are formatted with one parameter per line.
   ///
   /// Each call can be bin-packed, one-per-line or inconclusive. If it is
@@ -971,7 +1024,7 @@
   /// not use this in config files, etc. Use at your own risk.
   bool ExperimentalAutoDetectBinPacking;
 
-  /// \brief If ``true``, clang-format adds missing namespace end comments and
+  /// If ``true``, clang-format adds missing namespace end comments and
   /// fixes invalid existing ones.
   /// \code
   ///    true:                                  false:
@@ -981,7 +1034,7 @@
   /// \endcode
   bool FixNamespaceComments;
 
-  /// \brief A vector of macros that should be interpreted as foreach loops
+  /// A vector of macros that should be interpreted as foreach loops
   /// instead of as function calls.
   ///
   /// These are expected to be macros of the form:
@@ -998,93 +1051,9 @@
   /// For example: BOOST_FOREACH.
   std::vector<std::string> ForEachMacros;
 
-  /// \brief Styles for sorting multiple ``#include`` blocks.
-  enum IncludeBlocksStyle {
-    /// \brief Sort each ``#include`` block separately.
-    /// \code
-    ///    #include "b.h"               into      #include "b.h"
-    ///
-    ///    #include <lib/main.h>                  #include "a.h"
-    ///    #include "a.h"                         #include <lib/main.h>
-    /// \endcode
-    IBS_Preserve,
-    /// \brief Merge multiple ``#include`` blocks together and sort as one.
-    /// \code
-    ///    #include "b.h"               into      #include "a.h"
-    ///                                           #include "b.h"
-    ///    #include <lib/main.h>                  #include <lib/main.h>
-    ///    #include "a.h"
-    /// \endcode
-    IBS_Merge,
-    /// \brief Merge multiple ``#include`` blocks together and sort as one.
-    /// Then split into groups based on category priority. See
-    /// ``IncludeCategories``.
-    /// \code
-    ///    #include "b.h"               into      #include "a.h"
-    ///                                           #include "b.h"
-    ///    #include <lib/main.h>
-    ///    #include "a.h"                         #include <lib/main.h>
-    /// \endcode
-    IBS_Regroup,
-  };
+  tooling::IncludeStyle IncludeStyle;
 
-  /// \brief Dependent on the value, multiple ``#include`` blocks can be sorted
-  /// as one and divided based on category.
-  IncludeBlocksStyle IncludeBlocks;
-
-  /// \brief See documentation of ``IncludeCategories``.
-  struct IncludeCategory {
-    /// \brief The regular expression that this category matches.
-    std::string Regex;
-    /// \brief The priority to assign to this category.
-    int Priority;
-    bool operator==(const IncludeCategory &Other) const {
-      return Regex == Other.Regex && Priority == Other.Priority;
-    }
-  };
-
-  /// \brief Regular expressions denoting the different ``#include`` categories
-  /// used for ordering ``#includes``.
-  ///
-  /// These regular expressions are matched against the filename of an include
-  /// (including the <> or "") in order. The value belonging to the first
-  /// matching regular expression is assigned and ``#includes`` are sorted first
-  /// according to increasing category number and then alphabetically within
-  /// each category.
-  ///
-  /// If none of the regular expressions match, INT_MAX is assigned as
-  /// category. The main header for a source file automatically gets category 0.
-  /// so that it is generally kept at the beginning of the ``#includes``
-  /// (http://llvm.org/docs/CodingStandards.html#include-style). However, you
-  /// can also assign negative priorities if you have certain headers that
-  /// always need to be first.
-  ///
-  /// To configure this in the .clang-format file, use:
-  /// \code{.yaml}
-  ///   IncludeCategories:
-  ///     - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
-  ///       Priority:        2
-  ///     - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
-  ///       Priority:        3
-  ///     - Regex:           '.*'
-  ///       Priority:        1
-  /// \endcode
-  std::vector<IncludeCategory> IncludeCategories;
-
-  /// \brief Specify a regular expression of suffixes that are allowed in the
-  /// file-to-main-include mapping.
-  ///
-  /// When guessing whether a #include is the "main" include (to assign
-  /// category 0, see above), use this regex of allowed suffixes to the header
-  /// stem. A partial match is done, so that:
-  /// - "" means "arbitrary suffix"
-  /// - "$" means "no suffix"
-  ///
-  /// For example, if configured to "(_test)?$", then a header a.h would be seen
-  /// as the "main" include in both a.cc and a_test.cc.
-  std::string IncludeIsMainRegex;
-
-  /// \brief Indent case labels one level from the switch statement.
+  /// Indent case labels one level from the switch statement.
   ///
   /// When ``false``, use the same indentation level as for the switch statement.
   /// Switch statement body is always indented one level more than case labels.
@@ -1100,7 +1069,7 @@
   /// \endcode
   bool IndentCaseLabels;
 
-  /// \brief Options for indenting preprocessor directives.
+  /// Options for indenting preprocessor directives.
   enum PPDirectiveIndentStyle {
     /// Does not indent any directives.
     /// \code
@@ -1122,10 +1091,10 @@
     PPDIS_AfterHash
   };
 
-  /// \brief The preprocessor directive indenting style to use.
+  /// The preprocessor directive indenting style to use.
   PPDirectiveIndentStyle IndentPPDirectives;
 
-  /// \brief The number of columns to use for indentation.
+  /// The number of columns to use for indentation.
   /// \code
   ///    IndentWidth: 3
   ///
@@ -1138,7 +1107,7 @@
   /// \endcode
   unsigned IndentWidth;
 
-  /// \brief Indent if a function definition or declaration is wrapped after the
+  /// Indent if a function definition or declaration is wrapped after the
   /// type.
   /// \code
   ///    true:
@@ -1151,7 +1120,7 @@
   /// \endcode
   bool IndentWrappedFunctionNames;
 
-  /// \brief Quotation styles for JavaScript strings. Does not affect template
+  /// Quotation styles for JavaScript strings. Does not affect template
   /// strings.
   enum JavaScriptQuoteStyle {
     /// Leave string quotes as they are.
@@ -1174,10 +1143,10 @@
     JSQS_Double
   };
 
-  /// \brief The JavaScriptQuoteStyle to use for JavaScript strings.
+  /// The JavaScriptQuoteStyle to use for JavaScript strings.
   JavaScriptQuoteStyle JavaScriptQuotes;
 
-  /// \brief Whether to wrap JavaScript import/export statements.
+  /// Whether to wrap JavaScript import/export statements.
   /// \code{.js}
   ///    true:
   ///    import {
@@ -1191,7 +1160,7 @@
   /// \endcode
   bool JavaScriptWrapImports;
 
-  /// \brief If true, the empty line at the start of blocks is kept.
+  /// If true, the empty line at the start of blocks is kept.
   /// \code
   ///    true:                                  false:
   ///    if (foo) {                     vs.     if (foo) {
@@ -1201,7 +1170,7 @@
   /// \endcode
   bool KeepEmptyLinesAtTheStartOfBlocks;
 
-  /// \brief Supported languages.
+  /// Supported languages.
   ///
   /// When stored in a configuration file, specifies the language, that the
   /// configuration targets. When passed to the ``reformat()`` function, enables
@@ -1228,10 +1197,10 @@
   };
   bool isCpp() const { return Language == LK_Cpp || Language == LK_ObjC; }
 
-  /// \brief Language, this format style is targeted at.
+  /// Language, this format style is targeted at.
   LanguageKind Language;
 
-  /// \brief A regular expression matching macros that start a block.
+  /// A regular expression matching macros that start a block.
   /// \code
   ///    # With:
   ///    MacroBlockBegin: "^NS_MAP_BEGIN|\
@@ -1259,10 +1228,10 @@
   /// \endcode
   std::string MacroBlockBegin;
 
-  /// \brief A regular expression matching macros that end a block.
+  /// A regular expression matching macros that end a block.
   std::string MacroBlockEnd;
 
-  /// \brief The maximum number of consecutive empty lines to keep.
+  /// The maximum number of consecutive empty lines to keep.
   /// \code
   ///    MaxEmptyLinesToKeep: 1         vs.     MaxEmptyLinesToKeep: 0
   ///    int f() {                              int f() {
@@ -1275,7 +1244,7 @@
   /// \endcode
   unsigned MaxEmptyLinesToKeep;
 
-  /// \brief Different ways to indent namespace contents.
+  /// Different ways to indent namespace contents.
   enum NamespaceIndentationKind {
     /// Don't indent in namespaces.
     /// \code
@@ -1309,10 +1278,10 @@
     NI_All
   };
 
-  /// \brief The indentation used for namespaces.
+  /// The indentation used for namespaces.
   NamespaceIndentationKind NamespaceIndentation;
 
-  /// \brief Controls bin-packing Objective-C protocol conformance list
+  /// Controls bin-packing Objective-C protocol conformance list
   /// items into as few lines as possible when they go over ``ColumnLimit``.
   ///
   /// If ``Auto`` (the default), delegates to the value in
@@ -1327,7 +1296,7 @@
   /// If ``Never``, lays out Objective-C protocol conformance list items
   /// onto individual lines whenever they go over ``ColumnLimit``.
   ///
-  /// \code
+  /// \code{.objc}
   ///    Always (or Auto, if BinPackParameters=true):
   ///    @interface ccccccccccccc () <
   ///        ccccccccccccc, ccccccccccccc,
@@ -1344,7 +1313,7 @@
   /// \endcode
   BinPackStyle ObjCBinPackProtocolList;
 
-  /// \brief The number of characters to use for indentation of ObjC blocks.
+  /// The number of characters to use for indentation of ObjC blocks.
   /// \code{.objc}
   ///    ObjCBlockIndentWidth: 4
   ///
@@ -1354,37 +1323,40 @@
   /// \endcode
   unsigned ObjCBlockIndentWidth;
 
-  /// \brief Add a space after ``@property`` in Objective-C, i.e. use
+  /// Add a space after ``@property`` in Objective-C, i.e. use
   /// ``@property (readonly)`` instead of ``@property(readonly)``.
   bool ObjCSpaceAfterProperty;
 
-  /// \brief Add a space in front of an Objective-C protocol list, i.e. use
+  /// Add a space in front of an Objective-C protocol list, i.e. use
   /// ``Foo <Protocol>`` instead of ``Foo<Protocol>``.
   bool ObjCSpaceBeforeProtocolList;
 
-  /// \brief The penalty for breaking around an assignment operator.
+  /// The penalty for breaking around an assignment operator.
   unsigned PenaltyBreakAssignment;
 
-  /// \brief The penalty for breaking a function call after ``call(``.
+  /// The penalty for breaking a function call after ``call(``.
   unsigned PenaltyBreakBeforeFirstCallParameter;
 
-  /// \brief The penalty for each line break introduced inside a comment.
+  /// The penalty for each line break introduced inside a comment.
   unsigned PenaltyBreakComment;
 
-  /// \brief The penalty for breaking before the first ``<<``.
+  /// The penalty for breaking before the first ``<<``.
   unsigned PenaltyBreakFirstLessLess;
 
-  /// \brief The penalty for each line break introduced inside a string literal.
+  /// The penalty for each line break introduced inside a string literal.
   unsigned PenaltyBreakString;
 
-  /// \brief The penalty for each character outside of the column limit.
+  /// The penalty for breaking after template declaration.
+  unsigned PenaltyBreakTemplateDeclaration;
+
+  /// The penalty for each character outside of the column limit.
   unsigned PenaltyExcessCharacter;
 
-  /// \brief Penalty for putting the return type of a function onto its own
+  /// Penalty for putting the return type of a function onto its own
   /// line.
   unsigned PenaltyReturnTypeOnItsOwnLine;
 
-  /// \brief The ``&`` and ``*`` alignment style.
+  /// The ``&`` and ``*`` alignment style.
   enum PointerAlignmentStyle {
     /// Align pointer to the left.
     /// \code
@@ -1403,20 +1375,20 @@
     PAS_Middle
   };
 
-  /// \brief Pointer and reference alignment style.
+  /// Pointer and reference alignment style.
   PointerAlignmentStyle PointerAlignment;
 
   /// See documentation of ``RawStringFormats``.
   struct RawStringFormat {
-    /// \brief The language of this raw string.
+    /// The language of this raw string.
     LanguageKind Language;
-    /// \brief A list of raw string delimiters that match this language.
+    /// A list of raw string delimiters that match this language.
     std::vector<std::string> Delimiters;
-    /// \brief A list of enclosing function names that match this language.
+    /// A list of enclosing function names that match this language.
     std::vector<std::string> EnclosingFunctions;
-    /// \brief The canonical delimiter for this language.
+    /// The canonical delimiter for this language.
     std::string CanonicalDelimiter;
-    /// \brief The style name on which this raw string format is based on.
+    /// The style name on which this raw string format is based on.
     /// If not specified, the raw string format is based on the style that this
     /// format is based on.
     std::string BasedOnStyle;
@@ -1428,7 +1400,7 @@
     }
   };
 
-  /// \brief Defines hints for detecting supported languages code blocks in raw
+  /// Defines hints for detecting supported languages code blocks in raw
   /// strings.
   ///
   /// A raw string with a matching delimiter or a matching enclosing function
@@ -1465,7 +1437,7 @@
   /// \endcode
   std::vector<RawStringFormat> RawStringFormats;
 
-  /// \brief If ``true``, clang-format will attempt to re-flow comments.
+  /// If ``true``, clang-format will attempt to re-flow comments.
   /// \code
   ///    false:
   ///    // veryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongComment with plenty of information
@@ -1479,7 +1451,7 @@
   /// \endcode
   bool ReflowComments;
 
-  /// \brief If ``true``, clang-format will sort ``#includes``.
+  /// If ``true``, clang-format will sort ``#includes``.
   /// \code
   ///    false:                                 true:
   ///    #include "b.h"                 vs.     #include "a.h"
@@ -1487,7 +1459,7 @@
   /// \endcode
   bool SortIncludes;
 
-  /// \brief If ``true``, clang-format will sort using declarations.
+  /// If ``true``, clang-format will sort using declarations.
   ///
   /// The order of using declarations is defined as follows:
   /// Split the strings by "::" and discard any initial empty strings. The last
@@ -1503,21 +1475,21 @@
   /// \endcode
   bool SortUsingDeclarations;
 
-  /// \brief If ``true``, a space is inserted after C style casts.
+  /// If ``true``, a space is inserted after C style casts.
   /// \code
   ///    true:                                  false:
   ///    (int) i;                       vs.     (int)i;
   /// \endcode
   bool SpaceAfterCStyleCast;
 
-  /// \brief If \c true, a space will be inserted after the 'template' keyword.
+  /// If \c true, a space will be inserted after the 'template' keyword.
   /// \code
   ///    true:                                  false:
   ///    template <int> void foo();     vs.     template<int> void foo();
   /// \endcode
   bool SpaceAfterTemplateKeyword;
 
-  /// \brief If ``false``, spaces will be removed before assignment operators.
+  /// If ``false``, spaces will be removed before assignment operators.
   /// \code
   ///    true:                                  false:
   ///    int a = 5;                     vs.     int a=5;
@@ -1525,7 +1497,18 @@
   /// \endcode
   bool SpaceBeforeAssignmentOperators;
 
-  /// \brief If ``false``, spaces will be removed before constructor initializer
+  /// If ``true``, a space will be inserted before a C++11 braced list
+  /// used to initialize an object (after the preceding identifier or type).
+  /// \code
+  ///    true:                                  false:
+  ///    Foo foo { bar };               vs.     Foo foo{ bar };
+  ///    Foo {};                                Foo{};
+  ///    vector<int> { 1, 2, 3 };               vector<int>{ 1, 2, 3 };
+  ///    new int[3] { 1, 2, 3 };                new int[3]{ 1, 2, 3 };
+  /// \endcode
+  bool SpaceBeforeCpp11BracedList;
+
+  /// If ``false``, spaces will be removed before constructor initializer
   /// colon.
   /// \code
   ///    true:                                  false:
@@ -1533,14 +1516,14 @@
   /// \endcode
   bool SpaceBeforeCtorInitializerColon;
 
-  /// \brief If ``false``, spaces will be removed before inheritance colon.
+  /// If ``false``, spaces will be removed before inheritance colon.
   /// \code
   ///    true:                                  false:
   ///    class Foo : Bar {}             vs.     class Foo: Bar {}
   /// \endcode
   bool SpaceBeforeInheritanceColon;
 
-  /// \brief Different ways to put a space before opening parentheses.
+  /// Different ways to put a space before opening parentheses.
   enum SpaceBeforeParensOptions {
     /// Never put a space before opening parentheses.
     /// \code
@@ -1575,10 +1558,10 @@
     SBPO_Always
   };
 
-  /// \brief Defines in which cases to put a space before opening parentheses.
+  /// Defines in which cases to put a space before opening parentheses.
   SpaceBeforeParensOptions SpaceBeforeParens;
 
-  /// \brief If ``false``, spaces will be removed before range-based for loop
+  /// If ``false``, spaces will be removed before range-based for loop
   /// colon.
   /// \code
   ///    true:                                  false:
@@ -1586,7 +1569,7 @@
   /// \endcode
   bool SpaceBeforeRangeBasedForLoopColon;
 
-  /// \brief If ``true``, spaces may be inserted into ``()``.
+  /// If ``true``, spaces may be inserted into ``()``.
   /// \code
   ///    true:                                false:
   ///    void f( ) {                    vs.   void f() {
@@ -1598,7 +1581,7 @@
   /// \endcode
   bool SpaceInEmptyParentheses;
 
-  /// \brief The number of spaces before trailing line comments
+  /// The number of spaces before trailing line comments
   /// (``//`` - comments).
   ///
   /// This does not affect trailing block comments (``/*`` - comments) as
@@ -1614,7 +1597,7 @@
   /// \endcode
   unsigned SpacesBeforeTrailingComments;
 
-  /// \brief If ``true``, spaces will be inserted after ``<`` and before ``>``
+  /// If ``true``, spaces will be inserted after ``<`` and before ``>``
   /// in template argument lists.
   /// \code
   ///    true:                                  false:
@@ -1623,7 +1606,7 @@
   /// \endcode
   bool SpacesInAngles;
 
-  /// \brief If ``true``, spaces are inserted inside container literals (e.g.
+  /// If ``true``, spaces are inserted inside container literals (e.g.
   /// ObjC and Javascript array and dict literals).
   /// \code{.js}
   ///    true:                                  false:
@@ -1632,21 +1615,21 @@
   /// \endcode
   bool SpacesInContainerLiterals;
 
-  /// \brief If ``true``, spaces may be inserted into C style casts.
+  /// If ``true``, spaces may be inserted into C style casts.
   /// \code
   ///    true:                                  false:
   ///    x = ( int32 )y                 vs.     x = (int32)y
   /// \endcode
   bool SpacesInCStyleCastParentheses;
 
-  /// \brief If ``true``, spaces will be inserted after ``(`` and before ``)``.
+  /// If ``true``, spaces will be inserted after ``(`` and before ``)``.
   /// \code
   ///    true:                                  false:
   ///    t f( Deleted & ) & = delete;   vs.     t f(Deleted &) & = delete;
   /// \endcode
   bool SpacesInParentheses;
 
-  /// \brief If ``true``, spaces will be inserted after ``[`` and before ``]``.
+  /// If ``true``, spaces will be inserted after ``[`` and before ``]``.
   /// Lambdas or unspecified size array declarations will not be affected.
   /// \code
   ///    true:                                  false:
@@ -1655,7 +1638,7 @@
   /// \endcode
   bool SpacesInSquareBrackets;
 
-  /// \brief Supported language standards.
+  /// Supported language standards.
   enum LanguageStandard {
     /// Use C++03-compatible syntax.
     LS_Cpp03,
@@ -1666,14 +1649,14 @@
     LS_Auto
   };
 
-  /// \brief Format compatible with this standard, e.g. use ``A<A<int> >``
+  /// Format compatible with this standard, e.g. use ``A<A<int> >``
   /// instead of ``A<A<int>>`` for ``LS_Cpp03``.
   LanguageStandard Standard;
 
-  /// \brief The number of columns used for tab stops.
+  /// The number of columns used for tab stops.
   unsigned TabWidth;
 
-  /// \brief Different ways to use tab in formatting.
+  /// Different ways to use tab in formatting.
   enum UseTabStyle {
     /// Never use tab.
     UT_Never,
@@ -1686,7 +1669,7 @@
     UT_Always
   };
 
-  /// \brief The way to use tab characters in the resulting file.
+  /// The way to use tab characters in the resulting file.
   UseTabStyle UseTab;
 
   bool operator==(const FormatStyle &R) const {
@@ -1722,7 +1705,7 @@
            BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
            BreakStringLiterals == R.BreakStringLiterals &&
            ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
-           BreakBeforeInheritanceComma == R.BreakBeforeInheritanceComma &&
+           BreakInheritanceList == R.BreakInheritanceList &&
            ConstructorInitializerAllOnOneLineOrOnePerLine ==
                R.ConstructorInitializerAllOnOneLineOrOnePerLine &&
            ConstructorInitializerIndentWidth ==
@@ -1735,8 +1718,8 @@
                R.ExperimentalAutoDetectBinPacking &&
            FixNamespaceComments == R.FixNamespaceComments &&
            ForEachMacros == R.ForEachMacros &&
-           IncludeBlocks == R.IncludeBlocks &&
-           IncludeCategories == R.IncludeCategories &&
+           IncludeStyle.IncludeBlocks == R.IncludeStyle.IncludeBlocks &&
+           IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
            IndentCaseLabels == R.IndentCaseLabels &&
            IndentPPDirectives == R.IndentPPDirectives &&
            IndentWidth == R.IndentWidth && Language == R.Language &&
@@ -1753,8 +1736,7 @@
            ObjCBlockIndentWidth == R.ObjCBlockIndentWidth &&
            ObjCSpaceAfterProperty == R.ObjCSpaceAfterProperty &&
            ObjCSpaceBeforeProtocolList == R.ObjCSpaceBeforeProtocolList &&
-           PenaltyBreakAssignment ==
-               R.PenaltyBreakAssignment &&
+           PenaltyBreakAssignment == R.PenaltyBreakAssignment &&
            PenaltyBreakBeforeFirstCallParameter ==
                R.PenaltyBreakBeforeFirstCallParameter &&
            PenaltyBreakComment == R.PenaltyBreakComment &&
@@ -1762,11 +1744,14 @@
            PenaltyBreakString == R.PenaltyBreakString &&
            PenaltyExcessCharacter == R.PenaltyExcessCharacter &&
            PenaltyReturnTypeOnItsOwnLine == R.PenaltyReturnTypeOnItsOwnLine &&
+           PenaltyBreakTemplateDeclaration ==
+               R.PenaltyBreakTemplateDeclaration &&
            PointerAlignment == R.PointerAlignment &&
            RawStringFormats == R.RawStringFormats &&
            SpaceAfterCStyleCast == R.SpaceAfterCStyleCast &&
            SpaceAfterTemplateKeyword == R.SpaceAfterTemplateKeyword &&
            SpaceBeforeAssignmentOperators == R.SpaceBeforeAssignmentOperators &&
+           SpaceBeforeCpp11BracedList == R.SpaceBeforeCpp11BracedList &&
            SpaceBeforeCtorInitializerColon ==
                R.SpaceBeforeCtorInitializerColon &&
            SpaceBeforeInheritanceColon == R.SpaceBeforeInheritanceColon &&
@@ -1822,36 +1807,36 @@
   friend std::error_code parseConfiguration(StringRef Text, FormatStyle *Style);
 };
 
-/// \brief Returns a format style complying with the LLVM coding standards:
+/// Returns a format style complying with the LLVM coding standards:
 /// http://llvm.org/docs/CodingStandards.html.
 FormatStyle getLLVMStyle();
 
-/// \brief Returns a format style complying with one of Google's style guides:
+/// Returns a format style complying with one of Google's style guides:
 /// http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml.
 /// http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml.
 /// https://developers.google.com/protocol-buffers/docs/style.
 FormatStyle getGoogleStyle(FormatStyle::LanguageKind Language);
 
-/// \brief Returns a format style complying with Chromium's style guide:
+/// Returns a format style complying with Chromium's style guide:
 /// http://www.chromium.org/developers/coding-style.
 FormatStyle getChromiumStyle(FormatStyle::LanguageKind Language);
 
-/// \brief Returns a format style complying with Mozilla's style guide:
+/// Returns a format style complying with Mozilla's style guide:
 /// https://developer.mozilla.org/en-US/docs/Developer_Guide/Coding_Style.
 FormatStyle getMozillaStyle();
 
-/// \brief Returns a format style complying with Webkit's style guide:
+/// Returns a format style complying with Webkit's style guide:
 /// http://www.webkit.org/coding/coding-style.html
 FormatStyle getWebKitStyle();
 
-/// \brief Returns a format style complying with GNU Coding Standards:
+/// Returns a format style complying with GNU Coding Standards:
 /// http://www.gnu.org/prep/standards/standards.html
 FormatStyle getGNUStyle();
 
-/// \brief Returns style indicating formatting should be not applied at all.
+/// Returns style indicating formatting should be not applied at all.
 FormatStyle getNoStyle();
 
-/// \brief Gets a predefined style for the specified language by name.
+/// Gets a predefined style for the specified language by name.
 ///
 /// Currently supported names: LLVM, Google, Chromium, Mozilla. Names are
 /// compared case-insensitively.
@@ -1860,7 +1845,7 @@
 bool getPredefinedStyle(StringRef Name, FormatStyle::LanguageKind Language,
                         FormatStyle *Style);
 
-/// \brief Parse configuration from YAML-formatted text.
+/// Parse configuration from YAML-formatted text.
 ///
 /// Style->Language is used to get the base style, if the ``BasedOnStyle``
 /// option is present.
@@ -1871,57 +1856,53 @@
 /// document, are retained in \p Style.
 std::error_code parseConfiguration(StringRef Text, FormatStyle *Style);
 
-/// \brief Gets configuration in a YAML string.
+/// Gets configuration in a YAML string.
 std::string configurationAsText(const FormatStyle &Style);
 
-/// \brief Returns the replacements necessary to sort all ``#include`` blocks
+/// Returns the replacements necessary to sort all ``#include`` blocks
 /// that are affected by ``Ranges``.
 tooling::Replacements sortIncludes(const FormatStyle &Style, StringRef Code,
                                    ArrayRef<tooling::Range> Ranges,
                                    StringRef FileName,
                                    unsigned *Cursor = nullptr);
 
-/// \brief Returns the replacements corresponding to applying and formatting
+/// Returns the replacements corresponding to applying and formatting
 /// \p Replaces on success; otheriwse, return an llvm::Error carrying
 /// llvm::StringError.
 llvm::Expected<tooling::Replacements>
 formatReplacements(StringRef Code, const tooling::Replacements &Replaces,
                    const FormatStyle &Style);
 
-/// \brief Returns the replacements corresponding to applying \p Replaces and
+/// Returns the replacements corresponding to applying \p Replaces and
 /// cleaning up the code after that on success; otherwise, return an llvm::Error
 /// carrying llvm::StringError.
 /// This also supports inserting/deleting C++ #include directives:
 /// - If a replacement has offset UINT_MAX, length 0, and a replacement text
 ///   that is an #include directive, this will insert the #include into the
-///   correct block in the \p Code. When searching for points to insert new
-///   header, this ignores #include's after the #include block(s) in the
-///   beginning of a file to avoid inserting headers into code sections where
-///   new #include's should not be added by default. These code sections
-///   include:
-///     - raw string literals (containing #include).
-///     - #if blocks.
-///     - Special #include's among declarations (e.g. functions).
+///   correct block in the \p Code.
 /// - If a replacement has offset UINT_MAX, length 1, and a replacement text
 ///   that is the name of the header to be removed, the header will be removed
 ///   from \p Code if it exists.
+/// The include manipulation is done via `tooling::HeaderInclude`, see its
+/// documentation for more details on how include insertion points are found and
+/// what edits are produced.
 llvm::Expected<tooling::Replacements>
 cleanupAroundReplacements(StringRef Code, const tooling::Replacements &Replaces,
                           const FormatStyle &Style);
 
-/// \brief Represents the status of a formatting attempt.
+/// Represents the status of a formatting attempt.
 struct FormattingAttemptStatus {
-  /// \brief A value of ``false`` means that any of the affected ranges were not
+  /// A value of ``false`` means that any of the affected ranges were not
   /// formatted due to a non-recoverable syntax error.
   bool FormatComplete = true;
 
-  /// \brief If ``FormatComplete`` is false, ``Line`` records a one-based
+  /// If ``FormatComplete`` is false, ``Line`` records a one-based
   /// original line number at which a syntax error might have occurred. This is
   /// based on a best-effort analysis and could be imprecise.
   unsigned Line = 0;
 };
 
-/// \brief Reformats the given \p Ranges in \p Code.
+/// Reformats the given \p Ranges in \p Code.
 ///
 /// Each range is extended on either end to its next bigger logic unit, i.e.
 /// everything that might influence its formatting or might be influenced by its
@@ -1937,7 +1918,7 @@
                                StringRef FileName = "<stdin>",
                                FormattingAttemptStatus *Status = nullptr);
 
-/// \brief Same as above, except if ``IncompleteFormat`` is non-null, its value
+/// Same as above, except if ``IncompleteFormat`` is non-null, its value
 /// will be set to true if any of the affected ranges were not formatted due to
 /// a non-recoverable syntax error.
 tooling::Replacements reformat(const FormatStyle &Style, StringRef Code,
@@ -1945,7 +1926,7 @@
                                StringRef FileName,
                                bool *IncompleteFormat);
 
-/// \brief Clean up any erroneous/redundant code in the given \p Ranges in \p
+/// Clean up any erroneous/redundant code in the given \p Ranges in \p
 /// Code.
 ///
 /// Returns the ``Replacements`` that clean up all \p Ranges in \p Code.
@@ -1953,7 +1934,7 @@
                               ArrayRef<tooling::Range> Ranges,
                               StringRef FileName = "<stdin>");
 
-/// \brief Fix namespace end comments in the given \p Ranges in \p Code.
+/// Fix namespace end comments in the given \p Ranges in \p Code.
 ///
 /// Returns the ``Replacements`` that fix the namespace comments in all
 /// \p Ranges in \p Code.
@@ -1962,7 +1943,7 @@
                                               ArrayRef<tooling::Range> Ranges,
                                               StringRef FileName = "<stdin>");
 
-/// \brief Sort consecutive using declarations in the given \p Ranges in
+/// Sort consecutive using declarations in the given \p Ranges in
 /// \p Code.
 ///
 /// Returns the ``Replacements`` that sort the using declarations in all
@@ -1972,17 +1953,26 @@
                                             ArrayRef<tooling::Range> Ranges,
                                             StringRef FileName = "<stdin>");
 
-/// \brief Returns the ``LangOpts`` that the formatter expects you to set.
+/// Returns the ``LangOpts`` that the formatter expects you to set.
 ///
 /// \param Style determines specific settings for lexing mode.
 LangOptions getFormattingLangOpts(const FormatStyle &Style = getLLVMStyle());
 
-/// \brief Description to be used for help text for a ``llvm::cl`` option for
+/// Description to be used for help text for a ``llvm::cl`` option for
 /// specifying format style. The description is closely related to the operation
 /// of ``getStyle()``.
 extern const char *StyleOptionHelpDescription;
 
-/// \brief Construct a FormatStyle based on ``StyleName``.
+/// The suggested format style to use by default. This allows tools using
+/// `getStyle` to have a consistent default style.
+/// Different builds can modify the value to the preferred styles.
+extern const char *DefaultFormatStyle;
+
+/// The suggested predefined style to use as the fallback style in `getStyle`.
+/// Different builds can modify the value to the preferred styles.
+extern const char *DefaultFallbackStyle;
+
+/// Construct a FormatStyle based on ``StyleName``.
 ///
 /// ``StyleName`` can take several forms:
 /// * "{<key>: <value>, ...}" - Set specic style parameters.
@@ -2011,11 +2001,11 @@
                                      StringRef Code = "",
                                      vfs::FileSystem *FS = nullptr);
 
-// \brief Guesses the language from the ``FileName`` and ``Code`` to be formatted.
+// Guesses the language from the ``FileName`` and ``Code`` to be formatted.
 // Defaults to FormatStyle::LK_Cpp.
 FormatStyle::LanguageKind guessLanguage(StringRef FileName, StringRef Code);
 
-// \brief Returns a string representation of ``Language``.
+// Returns a string representation of ``Language``.
 inline StringRef getLanguageName(FormatStyle::LanguageKind Language) {
   switch (Language) {
   case FormatStyle::LK_Cpp:
diff --git a/linux-x64/clang/include/clang/Frontend/ASTConsumers.h b/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
index 53975a0..2a13527 100644
--- a/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
+++ b/linux-x64/clang/include/clang/Frontend/ASTConsumers.h
@@ -34,9 +34,10 @@
 std::unique_ptr<ASTConsumer> CreateASTPrinter(std::unique_ptr<raw_ostream> OS,
                                               StringRef FilterString);
 
-// AST dumper: dumps the raw AST in human-readable form to stderr; this is
-// intended for debugging.
-std::unique_ptr<ASTConsumer> CreateASTDumper(StringRef FilterString,
+// AST dumper: dumps the raw AST in human-readable form to the given output
+// stream, or stdout if OS is nullptr.
+std::unique_ptr<ASTConsumer> CreateASTDumper(std::unique_ptr<raw_ostream> OS,
+                                             StringRef FilterString,
                                              bool DumpDecls, bool Deserialize,
                                              bool DumpLookups);
 
diff --git a/linux-x64/clang/include/clang/Frontend/ASTUnit.h b/linux-x64/clang/include/clang/Frontend/ASTUnit.h
index 49c0da4..ba14596 100644
--- a/linux-x64/clang/include/clang/Frontend/ASTUnit.h
+++ b/linux-x64/clang/include/clang/Frontend/ASTUnit.h
@@ -81,7 +81,10 @@
 
 } // namespace vfs
 
-/// \brief Utility class for loading a ASTContext from an AST file.
+/// \brief Enumerates the available scopes for skipping function bodies.
+enum class SkipFunctionBodiesScope { None, Preamble, PreambleAndMainFile };
+
+/// Utility class for loading a ASTContext from an AST file.
 class ASTUnit {
 public:
   struct StandaloneFixIt {
@@ -122,11 +125,11 @@
 
   FileSystemOptions FileSystemOpts;
 
-  /// \brief The AST consumer that received information about the translation
+  /// The AST consumer that received information about the translation
   /// unit as it was parsed or loaded.
   std::unique_ptr<ASTConsumer> Consumer;
 
-  /// \brief The semantic analysis object used to type-check the translation
+  /// The semantic analysis object used to type-check the translation
   /// unit.
   std::unique_ptr<Sema> TheSema;
 
@@ -142,21 +145,21 @@
   // FIXME: This is temporary; eventually, CIndex will always do this.
   bool OnlyLocalDecls = false;
 
-  /// \brief Whether to capture any diagnostics produced.
+  /// Whether to capture any diagnostics produced.
   bool CaptureDiagnostics = false;
 
-  /// \brief Track whether the main file was loaded from an AST or not.
+  /// Track whether the main file was loaded from an AST or not.
   bool MainFileIsAST;
 
-  /// \brief What kind of translation unit this AST represents.
+  /// What kind of translation unit this AST represents.
   TranslationUnitKind TUKind = TU_Complete;
 
-  /// \brief Whether we should time each operation.
+  /// Whether we should time each operation.
   bool WantTiming;
 
-  /// \brief Whether the ASTUnit should delete the remapped buffers.
+  /// Whether the ASTUnit should delete the remapped buffers.
   bool OwnsRemappedFileBuffers = true;
-  
+
   /// Track the top-level decls which appeared in an ASTUnit which was loaded
   /// from a source file.
   //
@@ -166,36 +169,36 @@
   // more scalable search mechanisms.
   std::vector<Decl*> TopLevelDecls;
 
-  /// \brief Sorted (by file offset) vector of pairs of file offset/Decl.
+  /// Sorted (by file offset) vector of pairs of file offset/Decl.
   using LocDeclsTy = SmallVector<std::pair<unsigned, Decl *>, 64>;
   using FileDeclsTy = llvm::DenseMap<FileID, LocDeclsTy *>;
 
-  /// \brief Map from FileID to the file-level declarations that it contains.
+  /// Map from FileID to the file-level declarations that it contains.
   /// The files and decls are only local (and non-preamble) ones.
   FileDeclsTy FileDecls;
-  
+
   /// The name of the original source file used to generate this ASTUnit.
   std::string OriginalSourceFile;
 
-  /// \brief The set of diagnostics produced when creating the preamble.
+  /// The set of diagnostics produced when creating the preamble.
   SmallVector<StandaloneDiagnostic, 4> PreambleDiagnostics;
 
-  /// \brief The set of diagnostics produced when creating this
+  /// The set of diagnostics produced when creating this
   /// translation unit.
   SmallVector<StoredDiagnostic, 4> StoredDiagnostics;
 
-  /// \brief The set of diagnostics produced when failing to parse, e.g. due
+  /// The set of diagnostics produced when failing to parse, e.g. due
   /// to failure to load the PCH.
   SmallVector<StoredDiagnostic, 4> FailedParseDiagnostics;
 
-  /// \brief The number of stored diagnostics that come from the driver
+  /// The number of stored diagnostics that come from the driver
   /// itself.
   ///
   /// Diagnostics that come from the driver are retained from one parse to
   /// the next.
   unsigned NumStoredDiagnosticsFromDriver = 0;
-  
-  /// \brief Counter that determines when we want to try building a
+
+  /// Counter that determines when we want to try building a
   /// precompiled preamble.
   ///
   /// If zero, we will never build a precompiled preamble. Otherwise,
@@ -206,23 +209,23 @@
   /// some number of calls.
   unsigned PreambleRebuildCounter = 0;
 
-  /// \brief Cache pairs "filename - source location"
+  /// Cache pairs "filename - source location"
   ///
   /// Cache contains only source locations from preamble so it is
   /// guaranteed that they stay valid when the SourceManager is recreated.
-  /// This cache is used when loading preambule to increase performance
+  /// This cache is used when loading preamble to increase performance
   /// of that loading. It must be cleared when preamble is recreated.
   llvm::StringMap<SourceLocation> PreambleSrcLocCache;
 
   /// The contents of the preamble.
   llvm::Optional<PrecompiledPreamble> Preamble;
 
-  /// \brief When non-NULL, this is the buffer used to store the contents of
+  /// When non-NULL, this is the buffer used to store the contents of
   /// the main file when it has been padded for use with the precompiled
   /// preamble.
   std::unique_ptr<llvm::MemoryBuffer> SavedMainFileBuffer;
 
-  /// \brief The number of warnings that occurred while parsing the preamble.
+  /// The number of warnings that occurred while parsing the preamble.
   ///
   /// This value will be used to restore the state of the \c DiagnosticsEngine
   /// object when re-using the precompiled preamble. Note that only the
@@ -230,21 +233,21 @@
   /// when any errors are present.
   unsigned NumWarningsInPreamble = 0;
 
-  /// \brief A list of the serialization ID numbers for each of the top-level
+  /// A list of the serialization ID numbers for each of the top-level
   /// declarations parsed within the precompiled preamble.
   std::vector<serialization::DeclID> TopLevelDeclsInPreamble;
-  
-  /// \brief Whether we should be caching code-completion results.
+
+  /// Whether we should be caching code-completion results.
   bool ShouldCacheCodeCompletionResults : 1;
 
-  /// \brief Whether to include brief documentation within the set of code
+  /// Whether to include brief documentation within the set of code
   /// completions cached.
   bool IncludeBriefCommentsInCodeCompletion : 1;
 
-  /// \brief True if non-system source files should be treated as volatile
+  /// True if non-system source files should be treated as volatile
   /// (likely to change while trying to use them).
   bool UserFilesAreVolatile : 1;
- 
+
   static void ConfigureDiags(IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
                              ASTUnit &AST, bool CaptureDiagnostics);
 
@@ -256,14 +259,14 @@
   void clearFileLevelDecls();
 
 public:
-  /// \brief A cached code-completion result, which may be introduced in one of
+  /// A cached code-completion result, which may be introduced in one of
   /// many different contexts.
   struct CachedCodeCompletionResult {
-    /// \brief The code-completion string corresponding to this completion
+    /// The code-completion string corresponding to this completion
     /// result.
     CodeCompletionString *Completion;
-    
-    /// \brief A bitmask that indicates which code-completion contexts should
+
+    /// A bitmask that indicates which code-completion contexts should
     /// contain this completion result.
     ///
     /// The bits in the bitmask correspond to the values of
@@ -271,21 +274,21 @@
     /// bit, shift 1 by that number of bits. Many completions can occur in
     /// several different contexts.
     uint64_t ShowInContexts;
-    
-    /// \brief The priority given to this code-completion result.
+
+    /// The priority given to this code-completion result.
     unsigned Priority;
-    
-    /// \brief The libclang cursor kind corresponding to this code-completion 
+
+    /// The libclang cursor kind corresponding to this code-completion
     /// result.
     CXCursorKind Kind;
-    
-    /// \brief The availability of this code-completion result.
+
+    /// The availability of this code-completion result.
     CXAvailabilityKind Availability;
-    
-    /// \brief The simplified type class for a non-macro completion result.
+
+    /// The simplified type class for a non-macro completion result.
     SimplifiedTypeClass TypeClass;
-    
-    /// \brief The type of a non-macro completion result, stored as a unique
+
+    /// The type of a non-macro completion result, stored as a unique
     /// integer used by the string map of cached completion types.
     ///
     /// This value will be zero if the type is not known, or a unique value
@@ -293,14 +296,14 @@
     /// for more information.
     unsigned Type;
   };
-  
-  /// \brief Retrieve the mapping from formatted type names to unique type
+
+  /// Retrieve the mapping from formatted type names to unique type
   /// identifiers.
   llvm::StringMap<unsigned> &getCachedCompletionTypes() {
-    return CachedCompletionTypes; 
+    return CachedCompletionTypes;
   }
-  
-  /// \brief Retrieve the allocator used to cache global code completions.
+
+  /// Retrieve the allocator used to cache global code completions.
   std::shared_ptr<GlobalCodeCompletionAllocator>
   getCachedCompletionAllocator() {
     return CachedCompletionAllocator;
@@ -314,47 +317,50 @@
   }
 
 private:
-  /// \brief Allocator used to store cached code completions.
+  /// Allocator used to store cached code completions.
   std::shared_ptr<GlobalCodeCompletionAllocator> CachedCompletionAllocator;
 
   std::unique_ptr<CodeCompletionTUInfo> CCTUInfo;
 
-  /// \brief The set of cached code-completion results.
+  /// The set of cached code-completion results.
   std::vector<CachedCodeCompletionResult> CachedCompletionResults;
-  
-  /// \brief A mapping from the formatted type name to a unique number for that
+
+  /// A mapping from the formatted type name to a unique number for that
   /// type, which is used for type equality comparisons.
   llvm::StringMap<unsigned> CachedCompletionTypes;
-  
-  /// \brief A string hash of the top-level declaration and macro definition 
+
+  /// A string hash of the top-level declaration and macro definition
   /// names processed the last time that we reparsed the file.
   ///
-  /// This hash value is used to determine when we need to refresh the 
+  /// This hash value is used to determine when we need to refresh the
   /// global code-completion cache.
   unsigned CompletionCacheTopLevelHashValue = 0;
 
-  /// \brief A string hash of the top-level declaration and macro definition 
+  /// A string hash of the top-level declaration and macro definition
   /// names processed the last time that we reparsed the precompiled preamble.
   ///
-  /// This hash value is used to determine when we need to refresh the 
+  /// This hash value is used to determine when we need to refresh the
   /// global code-completion cache after a rebuild of the precompiled preamble.
   unsigned PreambleTopLevelHashValue = 0;
 
-  /// \brief The current hash value for the top-level declaration and macro
+  /// The current hash value for the top-level declaration and macro
   /// definition names
   unsigned CurrentTopLevelHashValue = 0;
-  
-  /// \brief Bit used by CIndex to mark when a translation unit may be in an
+
+  /// Bit used by CIndex to mark when a translation unit may be in an
   /// inconsistent state, and is not safe to free.
   unsigned UnsafeToFree : 1;
 
-  /// \brief Cache any "global" code-completion results, so that we can avoid
+  /// \brief Enumerator specifying the scope for skipping function bodies.
+  SkipFunctionBodiesScope SkipFunctionBodies = SkipFunctionBodiesScope::None;
+
+  /// Cache any "global" code-completion results, so that we can avoid
   /// recomputing them with each completion.
   void CacheCodeCompletionResults();
-  
-  /// \brief Clear out and deallocate 
+
+  /// Clear out and deallocate
   void ClearCachedCompletionResults();
-  
+
   explicit ASTUnit(bool MainFileIsAST);
 
   bool Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
@@ -363,16 +369,16 @@
 
   std::unique_ptr<llvm::MemoryBuffer> getMainBufferWithPrecompiledPreamble(
       std::shared_ptr<PCHContainerOperations> PCHContainerOps,
-      const CompilerInvocation &PreambleInvocationIn,
+      CompilerInvocation &PreambleInvocationIn,
       IntrusiveRefCntPtr<vfs::FileSystem> VFS, bool AllowRebuild = true,
       unsigned MaxLines = 0);
   void RealizeTopLevelDeclsFromPreamble();
 
-  /// \brief Transfers ownership of the objects (like SourceManager) from
+  /// Transfers ownership of the objects (like SourceManager) from
   /// \param CI to this ASTUnit.
   void transferASTDataFromCompilerInstance(CompilerInstance &CI);
 
-  /// \brief Allows us to assert that ASTUnit is not being used concurrently,
+  /// Allows us to assert that ASTUnit is not being used concurrently,
   /// which is not supported.
   ///
   /// Clients should create instances of the ConcurrencyCheck class whenever
@@ -396,9 +402,9 @@
 
   class ConcurrencyCheck {
     ASTUnit &Self;
-    
+
   public:
-    explicit ConcurrencyCheck(ASTUnit &Self) : Self(Self) { 
+    explicit ConcurrencyCheck(ASTUnit &Self) : Self(Self) {
       Self.ConcurrencyCheckValue.start();
     }
 
@@ -418,7 +424,7 @@
 
   const DiagnosticsEngine &getDiagnostics() const { return *Diagnostics; }
   DiagnosticsEngine &getDiagnostics() { return *Diagnostics; }
-  
+
   const SourceManager &getSourceManager() const { return *SourceMgr; }
   SourceManager &getSourceManager() { return *SourceMgr; }
 
@@ -432,9 +438,18 @@
   void setASTContext(ASTContext *ctx) { Ctx = ctx; }
   void setPreprocessor(std::shared_ptr<Preprocessor> pp);
 
+  /// Enable source-range based diagnostic messages.
+  ///
+  /// If diagnostic messages with source-range information are to be expected
+  /// and AST comes not from file (e.g. after LoadFromCompilerInvocation) this
+  /// function has to be called.
+  /// The function is to be called only once and the AST should be associated
+  /// with the same source file afterwards.
+  void enableSourceFileDiagnostics();
+
   bool hasSema() const { return (bool)TheSema; }
 
-  Sema &getSema() const { 
+  Sema &getSema() const {
     assert(TheSema && "ASTUnit does not have a Sema object!");
     return *TheSema;
   }
@@ -448,12 +463,12 @@
     assert(HSOpts && "ASTUnit does not have header search options");
     return *HSOpts;
   }
-  
+
   const PreprocessorOptions &getPreprocessorOpts() const {
     assert(PPOpts && "ASTUnit does not have preprocessor options");
     return *PPOpts;
   }
-  
+
   const FileManager &getFileManager() const { return *FileMgr; }
   FileManager &getFileManager() { return *FileMgr; }
 
@@ -475,7 +490,7 @@
 
   StringRef getMainFileName() const;
 
-  /// \brief If this ASTUnit came from an AST file, returns the filename for it.
+  /// If this ASTUnit came from an AST file, returns the filename for it.
   StringRef getASTFileName() const;
 
   using top_level_iterator = std::vector<Decl *>::iterator;
@@ -504,26 +519,26 @@
     return TopLevelDeclsInPreamble.empty() && TopLevelDecls.empty();
   }
 
-  /// \brief Add a new top-level declaration.
+  /// Add a new top-level declaration.
   void addTopLevelDecl(Decl *D) {
     TopLevelDecls.push_back(D);
   }
 
-  /// \brief Add a new local file-level declaration.
+  /// Add a new local file-level declaration.
   void addFileLevelDecl(Decl *D);
 
-  /// \brief Get the decls that are contained in a file in the Offset/Length
+  /// Get the decls that are contained in a file in the Offset/Length
   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
-  /// a range. 
+  /// a range.
   void findFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
                            SmallVectorImpl<Decl *> &Decls);
 
-  /// \brief Retrieve a reference to the current top-level name hash value.
+  /// Retrieve a reference to the current top-level name hash value.
   ///
   /// Note: This is used internally by the top-level tracking action
   unsigned &getCurrentTopLevelHashValue() { return CurrentTopLevelHashValue; }
 
-  /// \brief Get the source location for the given file:line:col triplet.
+  /// Get the source location for the given file:line:col triplet.
   ///
   /// The difference with SourceManager::getLocation is that this method checks
   /// whether the requested location points inside the precompiled preamble
@@ -531,15 +546,15 @@
   SourceLocation getLocation(const FileEntry *File,
                              unsigned Line, unsigned Col) const;
 
-  /// \brief Get the source location for the given file:offset pair.
+  /// Get the source location for the given file:offset pair.
   SourceLocation getLocation(const FileEntry *File, unsigned Offset) const;
 
-  /// \brief If \p Loc is a loaded location from the preamble, returns
+  /// If \p Loc is a loaded location from the preamble, returns
   /// the corresponding local location of the main file, otherwise it returns
   /// \p Loc.
   SourceLocation mapLocationFromPreamble(SourceLocation Loc) const;
 
-  /// \brief If \p Loc is a local location of the main file but inside the
+  /// If \p Loc is a local location of the main file but inside the
   /// preamble chunk, returns the corresponding loaded location from the
   /// preamble, otherwise it returns \p Loc.
   SourceLocation mapLocationToPreamble(SourceLocation Loc) const;
@@ -560,25 +575,25 @@
     return SourceRange(mapLocationToPreamble(R.getBegin()),
                        mapLocationToPreamble(R.getEnd()));
   }
-  
+
   // Retrieve the diagnostics associated with this AST
   using stored_diag_iterator = StoredDiagnostic *;
   using stored_diag_const_iterator = const StoredDiagnostic *;
 
-  stored_diag_const_iterator stored_diag_begin() const { 
-    return StoredDiagnostics.begin(); 
+  stored_diag_const_iterator stored_diag_begin() const {
+    return StoredDiagnostics.begin();
   }
 
-  stored_diag_iterator stored_diag_begin() { 
-    return StoredDiagnostics.begin(); 
+  stored_diag_iterator stored_diag_begin() {
+    return StoredDiagnostics.begin();
   }
 
-  stored_diag_const_iterator stored_diag_end() const { 
-    return StoredDiagnostics.end(); 
+  stored_diag_const_iterator stored_diag_end() const {
+    return StoredDiagnostics.end();
   }
 
-  stored_diag_iterator stored_diag_end() { 
-    return StoredDiagnostics.end(); 
+  stored_diag_iterator stored_diag_end() {
+    return StoredDiagnostics.end();
   }
 
   unsigned stored_diag_size() const { return StoredDiagnostics.size(); }
@@ -586,12 +601,12 @@
   stored_diag_iterator stored_diag_afterDriver_begin() {
     if (NumStoredDiagnosticsFromDriver > StoredDiagnostics.size())
       NumStoredDiagnosticsFromDriver = 0;
-    return StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver; 
+    return StoredDiagnostics.begin() + NumStoredDiagnosticsFromDriver;
   }
 
   using cached_completion_iterator =
       std::vector<CachedCodeCompletionResult>::iterator;
-  
+
   cached_completion_iterator cached_completion_begin() {
     return CachedCompletionResults.begin();
   }
@@ -600,47 +615,47 @@
     return CachedCompletionResults.end();
   }
 
-  unsigned cached_completion_size() const { 
-    return CachedCompletionResults.size(); 
+  unsigned cached_completion_size() const {
+    return CachedCompletionResults.size();
   }
 
-  /// \brief Returns an iterator range for the local preprocessing entities
+  /// Returns an iterator range for the local preprocessing entities
   /// of the local Preprocessor, if this is a parsed source file, or the loaded
   /// preprocessing entities of the primary module if this is an AST file.
   llvm::iterator_range<PreprocessingRecord::iterator>
   getLocalPreprocessingEntities() const;
 
-  /// \brief Type for a function iterating over a number of declarations.
+  /// Type for a function iterating over a number of declarations.
   /// \returns true to continue iteration and false to abort.
   using DeclVisitorFn = bool (*)(void *context, const Decl *D);
 
-  /// \brief Iterate over local declarations (locally parsed if this is a parsed
+  /// Iterate over local declarations (locally parsed if this is a parsed
   /// source file or the loaded declarations of the primary module if this is an
   /// AST file).
   /// \returns true if the iteration was complete or false if it was aborted.
   bool visitLocalTopLevelDecls(void *context, DeclVisitorFn Fn);
 
-  /// \brief Get the PCH file if one was included.
+  /// Get the PCH file if one was included.
   const FileEntry *getPCHFile();
 
-  /// \brief Returns true if the ASTUnit was constructed from a serialized
+  /// Returns true if the ASTUnit was constructed from a serialized
   /// module file.
   bool isModuleFile() const;
 
   std::unique_ptr<llvm::MemoryBuffer>
   getBufferForFile(StringRef Filename, std::string *ErrorStr = nullptr);
 
-  /// \brief Determine what kind of translation unit this AST represents.
+  /// Determine what kind of translation unit this AST represents.
   TranslationUnitKind getTranslationUnitKind() const { return TUKind; }
 
-  /// \brief Determine the input kind this AST unit represents.
+  /// Determine the input kind this AST unit represents.
   InputKind getInputKind() const;
 
-  /// \brief A mapping from a file name to the memory buffer that stores the
+  /// A mapping from a file name to the memory buffer that stores the
   /// remapped contents of that file.
   using RemappedFile = std::pair<std::string, llvm::MemoryBuffer *>;
 
-  /// \brief Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
+  /// Create a ASTUnit. Gets ownership of the passed CompilerInvocation.
   static std::unique_ptr<ASTUnit>
   create(std::shared_ptr<CompilerInvocation> CI,
          IntrusiveRefCntPtr<DiagnosticsEngine> Diags, bool CaptureDiagnostics,
@@ -657,7 +672,7 @@
     LoadEverything
   };
 
-  /// \brief Create a ASTUnit from an AST file.
+  /// Create a ASTUnit from an AST file.
   ///
   /// \param Filename - The AST file to load.
   ///
@@ -676,7 +691,7 @@
       bool UserFilesAreVolatile = false);
 
 private:
-  /// \brief Helper function for \c LoadFromCompilerInvocation() and
+  /// Helper function for \c LoadFromCompilerInvocation() and
   /// \c LoadFromCommandLine(), which loads an AST from a compiler invocation.
   ///
   /// \param PrecompilePreambleAfterNParses After how many parses the preamble
@@ -696,8 +711,8 @@
       IntrusiveRefCntPtr<vfs::FileSystem> VFS);
 
 public:
-  /// \brief Create an ASTUnit from a source file, via a CompilerInvocation
-  /// object, by invoking the optionally provided ASTFrontendAction. 
+  /// Create an ASTUnit from a source file, via a CompilerInvocation
+  /// object, by invoking the optionally provided ASTFrontendAction.
   ///
   /// \param CI - The compiler invocation to use; it must have exactly one input
   /// source file. The ASTUnit takes ownership of the CompilerInvocation object.
@@ -801,14 +816,16 @@
       TranslationUnitKind TUKind = TU_Complete,
       bool CacheCodeCompletionResults = false,
       bool IncludeBriefCommentsInCodeCompletion = false,
-      bool AllowPCHWithCompilerErrors = false, bool SkipFunctionBodies = false,
-      bool SingleFileParse = false,
-      bool UserFilesAreVolatile = false, bool ForSerialization = false,
+      bool AllowPCHWithCompilerErrors = false,
+      SkipFunctionBodiesScope SkipFunctionBodies =
+          SkipFunctionBodiesScope::None,
+      bool SingleFileParse = false, bool UserFilesAreVolatile = false,
+      bool ForSerialization = false,
       llvm::Optional<StringRef> ModuleFormat = llvm::None,
       std::unique_ptr<ASTUnit> *ErrAST = nullptr,
       IntrusiveRefCntPtr<vfs::FileSystem> VFS = nullptr);
 
-  /// \brief Reparse the source files using the same command-line options that
+  /// Reparse the source files using the same command-line options that
   /// were originally used to produce this translation unit.
   ///
   /// \param VFS - A vfs::FileSystem to be used for all file accesses. Note that
@@ -823,12 +840,12 @@
                ArrayRef<RemappedFile> RemappedFiles = None,
                IntrusiveRefCntPtr<vfs::FileSystem> VFS = nullptr);
 
-  /// \brief Free data that will be re-generated on the next parse.
+  /// Free data that will be re-generated on the next parse.
   ///
   /// Preamble-related data is not affected.
   void ResetForParse();
 
-  /// \brief Perform code completion at the given file, line, and
+  /// Perform code completion at the given file, line, and
   /// column within this translation unit.
   ///
   /// \param File The file in which code completion will occur.
@@ -837,10 +854,10 @@
   ///
   /// \param Column The column at which code completion will occur.
   ///
-  /// \param IncludeMacros Whether to include macros in the code-completion 
+  /// \param IncludeMacros Whether to include macros in the code-completion
   /// results.
   ///
-  /// \param IncludeCodePatterns Whether to include code patterns (such as a 
+  /// \param IncludeCodePatterns Whether to include code patterns (such as a
   /// for loop) in the code-completion results.
   ///
   /// \param IncludeBriefComments Whether to include brief documentation within
@@ -858,13 +875,13 @@
                     SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
                     SmallVectorImpl<const llvm::MemoryBuffer *> &OwnedBuffers);
 
-  /// \brief Save this translation unit to a file with the given name.
+  /// Save this translation unit to a file with the given name.
   ///
   /// \returns true if there was a file error or false if the save was
   /// successful.
   bool Save(StringRef File);
 
-  /// \brief Serialize this translation unit with the given output stream.
+  /// Serialize this translation unit with the given output stream.
   ///
   /// \returns True if an error occurred, false otherwise.
   bool serialize(raw_ostream &OS);
diff --git a/linux-x64/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h b/linux-x64/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h
index eb33273..04c6077 100644
--- a/linux-x64/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h
+++ b/linux-x64/clang/include/clang/Frontend/ChainedDiagnosticConsumer.h
@@ -32,7 +32,7 @@
       : OwningPrimary(std::move(Primary)), Primary(OwningPrimary.get()),
         Secondary(std::move(Secondary)) {}
 
-  /// \brief Construct without taking ownership of \c Primary.
+  /// Construct without taking ownership of \c Primary.
   ChainedDiagnosticConsumer(DiagnosticConsumer *Primary,
                             std::unique_ptr<DiagnosticConsumer> Secondary)
       : Primary(Primary), Secondary(std::move(Secondary)) {}
diff --git a/linux-x64/clang/include/clang/Frontend/CodeGenOptions.def b/linux-x64/clang/include/clang/Frontend/CodeGenOptions.def
index adcbe36..b872890 100644
--- a/linux-x64/clang/include/clang/Frontend/CodeGenOptions.def
+++ b/linux-x64/clang/include/clang/Frontend/CodeGenOptions.def
@@ -43,6 +43,7 @@
 CODEGENOPT(CoverageNoFunctionNamesInData, 1, 0) ///< Do not include function names in GCDA files.
 CODEGENOPT(CoverageExitBlockBeforeBody, 1, 0) ///< Whether to emit the exit block before the body blocks in GCNO files.
 CODEGENOPT(CXAAtExit         , 1, 1) ///< Use __cxa_atexit for calling destructors.
+CODEGENOPT(RegisterGlobalDtorsWithAtExit, 1, 1) ///< Use atexit or __cxa_atexit to register global destructors.
 CODEGENOPT(CXXCtorDtorAliases, 1, 0) ///< Emit complete ctors/dtors as linker
                                      ///< aliases to base ctors when possible.
 CODEGENOPT(DataSections      , 1, 0) ///< Set when -fdata-sections is enabled.
@@ -68,12 +69,13 @@
                                      ///< Decl* various IR entities came from.
                                      ///< Only useful when running CodeGen as a
                                      ///< subroutine.
+CODEGENOPT(EmitVersionIdentMetadata , 1, 1) ///< Emit compiler version metadata.
 CODEGENOPT(EmitGcovArcs      , 1, 0) ///< Emit coverage data files, aka. GCDA.
 CODEGENOPT(EmitGcovNotes     , 1, 0) ///< Emit coverage "notes" files, aka GCNO.
 CODEGENOPT(EmitOpenCLArgMetadata , 1, 0) ///< Emit OpenCL kernel arg metadata.
 CODEGENOPT(EmulatedTLS       , 1, 0) ///< Set by default or -f[no-]emulated-tls.
 CODEGENOPT(ExplicitEmulatedTLS , 1, 0) ///< Set if -f[no-]emulated-tls is used.
-/// \brief Embed Bitcode mode (off/all/bitcode/marker).
+/// Embed Bitcode mode (off/all/bitcode/marker).
 ENUM_CODEGENOPT(EmbedBitcode, EmbedBitcodeKind, 2, Embed_Off)
 CODEGENOPT(ForbidGuardVariables , 1, 0) ///< Issue errors if C++ guard variables
                                         ///< are required.
@@ -95,6 +97,9 @@
 ///< Set when -fxray-always-emit-customevents is enabled.
 CODEGENOPT(XRayAlwaysEmitCustomEvents , 1, 0)
 
+///< Set when -fxray-always-emit-typedevents is enabled.
+CODEGENOPT(XRayAlwaysEmitTypedEvents , 1, 0)
+
 ///< Set the minimum number of instructions in a function to determine selective
 ///< XRay instrumentation.
 VALUE_CODEGENOPT(XRayInstructionThreshold , 32, 200)
@@ -125,15 +130,22 @@
 CODEGENOPT(NoImplicitFloat   , 1, 0) ///< Set when -mno-implicit-float is enabled.
 CODEGENOPT(NoInfsFPMath      , 1, 0) ///< Assume FP arguments, results not +-Inf.
 CODEGENOPT(NoSignedZeros     , 1, 0) ///< Allow ignoring the signedness of FP zero
+CODEGENOPT(NullPointerIsValid , 1, 0) ///< Assume Null pointer deference is defined.
 CODEGENOPT(Reassociate       , 1, 0) ///< Allow reassociation of FP math ops
 CODEGENOPT(ReciprocalMath    , 1, 0) ///< Allow FP divisions to be reassociated.
 CODEGENOPT(NoTrappingMath    , 1, 0) ///< Set when -fno-trapping-math is enabled.
 CODEGENOPT(NoNaNsFPMath      , 1, 0) ///< Assume FP arguments, results not NaN.
 CODEGENOPT(FlushDenorm       , 1, 0) ///< Allow FP denorm numbers to be flushed to zero
 CODEGENOPT(CorrectlyRoundedDivSqrt, 1, 0) ///< -cl-fp32-correctly-rounded-divide-sqrt
+
+/// When false, this attempts to generate code as if the result of an
+/// overflowing conversion matches the overflowing behavior of a target's native
+/// float-to-int conversion instructions.
+CODEGENOPT(StrictFloatCastOverflow, 1, 1)
+
 CODEGENOPT(UniformWGSize     , 1, 0) ///< -cl-uniform-work-group-size
 CODEGENOPT(NoZeroInitializedInBSS , 1, 0) ///< -fno-zero-initialized-in-bss.
-/// \brief Method of Objective-C dispatch to use.
+/// Method of Objective-C dispatch to use.
 ENUM_CODEGENOPT(ObjCDispatchMethod, ObjCDispatchMethodKind, 2, Legacy)
 CODEGENOPT(OmitLeafFramePointer , 1, 0) ///< Set when -momit-leaf-frame-pointer is
                                         ///< enabled.
@@ -141,9 +153,9 @@
 VALUE_CODEGENOPT(OptimizationLevel, 2, 0) ///< The -O[0-3] option specified.
 VALUE_CODEGENOPT(OptimizeSize, 2, 0) ///< If -Os (==1) or -Oz (==2) is specified.
 
-/// \brief Choose profile instrumenation kind or no instrumentation.
+/// Choose profile instrumenation kind or no instrumentation.
 ENUM_CODEGENOPT(ProfileInstr, ProfileInstrKind, 2, ProfileNone)
-/// \brief Choose profile kind for PGO use compilation.
+/// Choose profile kind for PGO use compilation.
 ENUM_CODEGENOPT(ProfileUse, ProfileInstrKind, 2, ProfileNone)
 CODEGENOPT(CoverageMapping , 1, 0) ///< Generate coverage mapping regions to
                                    ///< enable code coverage analysis.
@@ -240,7 +252,7 @@
 CODEGENOPT(EnableSplitDwarf, 1, 0) ///< Whether to enable split DWARF
 CODEGENOPT(SplitDwarfInlining, 1, 1) ///< Whether to include inlining info in the
                                      ///< skeleton CU to allow for symbolication
-				     ///< of inline stack frames without .dwo files.
+                                     ///< of inline stack frames without .dwo files.
 CODEGENOPT(DebugFwdTemplateParams, 1, 0) ///< Whether to emit complete
                                          ///< template parameter descriptions in
                                          ///< forward declarations (versus just
@@ -321,6 +333,13 @@
 /// Whether to embed source in DWARF debug line section.
 CODEGENOPT(EmbedSource, 1, 0)
 
+/// Whether to emit all vtables
+CODEGENOPT(ForceEmitVTables, 1, 0)
+
+/// Whether to emit an address-significance table into the object file.
+CODEGENOPT(Addrsig, 1, 0)
+
+
 #undef CODEGENOPT
 #undef ENUM_CODEGENOPT
 #undef VALUE_CODEGENOPT
diff --git a/linux-x64/clang/include/clang/Frontend/CodeGenOptions.h b/linux-x64/clang/include/clang/Frontend/CodeGenOptions.h
index dd2e9bd..a6d061a 100644
--- a/linux-x64/clang/include/clang/Frontend/CodeGenOptions.h
+++ b/linux-x64/clang/include/clang/Frontend/CodeGenOptions.h
@@ -16,6 +16,7 @@
 
 #include "clang/Basic/DebugInfoOptions.h"
 #include "clang/Basic/Sanitizers.h"
+#include "clang/Basic/XRayInstr.h"
 #include "llvm/Support/CodeGen.h"
 #include "llvm/Support/Regex.h"
 #include "llvm/Target/TargetOptions.h"
@@ -26,7 +27,7 @@
 
 namespace clang {
 
-/// \brief Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
+/// Bitfields of CodeGenOptions, split out from CodeGenOptions to ensure
 /// that this large collection of bitfields is a trivial class type.
 class CodeGenOptionsBase {
 public:
@@ -177,9 +178,6 @@
   /// function instead of to trap instructions.
   std::string TrapFuncName;
 
-  /// A list of command-line options to forward to the LLVM backend.
-  std::vector<std::string> BackendOptions;
-
   /// A list of dependent libraries.
   std::vector<std::string> DependentLibraries;
 
@@ -205,6 +203,9 @@
   /// the summary and module symbol table (and not, e.g. any debug metadata).
   std::string ThinLinkBitcodeFile;
 
+  /// Prefix to use for -save-temps output.
+  std::string SaveTempsFilePrefix;
+
   /// Name of file passed with -fcuda-include-gpubinary option to forward to
   /// CUDA runtime back-end for incorporating them into host-side object file.
   std::string CudaGpuBinaryFileName;
@@ -248,7 +249,7 @@
   /// List of backend command-line options for -fembed-bitcode.
   std::vector<uint8_t> CmdArgs;
 
-  /// \brief A list of all -fno-builtin-* function names (e.g., memset).
+  /// A list of all -fno-builtin-* function names (e.g., memset).
   std::vector<std::string> NoBuiltinFuncs;
 
   std::vector<std::string> Reciprocals;
@@ -258,6 +259,9 @@
   /// registers.
   std::string PreferVectorWidth;
 
+  /// Set of XRay instrumentation kinds to emit.
+  XRayInstrSet XRayInstrumentationBundle;
+
 public:
   // Define accessors/mutators for code generation options of enumeration type.
 #define CODEGENOPT(Name, Bits, Default)
@@ -268,7 +272,7 @@
 
   CodeGenOptions();
 
-  /// \brief Is this a libc/libm function that is no longer recognized as a
+  /// Is this a libc/libm function that is no longer recognized as a
   /// builtin because a -fno-builtin-* option has been specified?
   bool isNoBuiltinFunc(const char *Name) const;
 
@@ -276,22 +280,22 @@
     return NoBuiltinFuncs;
   }
 
-  /// \brief Check if Clang profile instrumenation is on.
+  /// Check if Clang profile instrumenation is on.
   bool hasProfileClangInstr() const {
     return getProfileInstr() == ProfileClangInstr;
   }
 
-  /// \brief Check if IR level profile instrumentation is on.
+  /// Check if IR level profile instrumentation is on.
   bool hasProfileIRInstr() const {
     return getProfileInstr() == ProfileIRInstr;
   }
 
-  /// \brief Check if Clang profile use is on.
+  /// Check if Clang profile use is on.
   bool hasProfileClangUse() const {
     return getProfileUse() == ProfileClangInstr;
   }
 
-  /// \brief Check if IR level profile use is on.
+  /// Check if IR level profile use is on.
   bool hasProfileIRUse() const {
     return getProfileUse() == ProfileIRInstr;
   }
diff --git a/linux-x64/clang/include/clang/Frontend/CommandLineSourceLoc.h b/linux-x64/clang/include/clang/Frontend/CommandLineSourceLoc.h
index f5c1e1a..7ae98e0 100644
--- a/linux-x64/clang/include/clang/Frontend/CommandLineSourceLoc.h
+++ b/linux-x64/clang/include/clang/Frontend/CommandLineSourceLoc.h
@@ -21,7 +21,7 @@
 
 namespace clang {
 
-/// \brief A source location that has been parsed on the command line.
+/// A source location that has been parsed on the command line.
 struct ParsedSourceLocation {
   std::string FileName;
   unsigned Line;
@@ -101,7 +101,7 @@
 
 namespace llvm {
   namespace cl {
-    /// \brief Command-line option parser that parses source locations.
+    /// Command-line option parser that parses source locations.
     ///
     /// Source locations are of the form filename:line:column.
     template<>
diff --git a/linux-x64/clang/include/clang/Frontend/CompilerInstance.h b/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
index bd0170d..818c733 100644
--- a/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
+++ b/linux-x64/clang/include/clang/Frontend/CompilerInstance.h
@@ -109,59 +109,59 @@
   /// The code completion consumer.
   std::unique_ptr<CodeCompleteConsumer> CompletionConsumer;
 
-  /// \brief The semantic analysis object.
+  /// The semantic analysis object.
   std::unique_ptr<Sema> TheSema;
 
-  /// \brief The frontend timer group.
+  /// The frontend timer group.
   std::unique_ptr<llvm::TimerGroup> FrontendTimerGroup;
 
-  /// \brief The frontend timer.
+  /// The frontend timer.
   std::unique_ptr<llvm::Timer> FrontendTimer;
 
-  /// \brief The ASTReader, if one exists.
+  /// The ASTReader, if one exists.
   IntrusiveRefCntPtr<ASTReader> ModuleManager;
 
-  /// \brief The module dependency collector for crashdumps
+  /// The module dependency collector for crashdumps
   std::shared_ptr<ModuleDependencyCollector> ModuleDepCollector;
 
-  /// \brief The module provider.
+  /// The module provider.
   std::shared_ptr<PCHContainerOperations> ThePCHContainerOperations;
 
-  /// \brief The dependency file generator.
+  /// The dependency file generator.
   std::unique_ptr<DependencyFileGenerator> TheDependencyFileGenerator;
 
   std::vector<std::shared_ptr<DependencyCollector>> DependencyCollectors;
 
-  /// \brief The set of top-level modules that has already been loaded,
+  /// The set of top-level modules that has already been loaded,
   /// along with the module map
   llvm::DenseMap<const IdentifierInfo *, Module *> KnownModules;
 
-  /// \brief The set of top-level modules that has already been built on the
+  /// The set of top-level modules that has already been built on the
   /// fly as part of this overall compilation action.
   std::map<std::string, std::string> BuiltModules;
 
   /// Should we delete the BuiltModules when we're done?
   bool DeleteBuiltModules = true;
 
-  /// \brief The location of the module-import keyword for the last module
-  /// import. 
+  /// The location of the module-import keyword for the last module
+  /// import.
   SourceLocation LastModuleImportLoc;
-  
-  /// \brief The result of the last module import.
+
+  /// The result of the last module import.
   ///
   ModuleLoadResult LastModuleImportResult;
 
-  /// \brief Whether we should (re)build the global module index once we
+  /// Whether we should (re)build the global module index once we
   /// have finished with this translation unit.
   bool BuildGlobalModuleIndex = false;
 
-  /// \brief We have a full global module index, with all modules.
+  /// We have a full global module index, with all modules.
   bool HaveFullGlobalModuleIndex = false;
 
-  /// \brief One or more modules failed to build.
+  /// One or more modules failed to build.
   bool ModuleBuildFailed = false;
 
-  /// \brief Holds information about the output file.
+  /// Holds information about the output file.
   ///
   /// If TempFilename is not empty we must rename it to Filename at the end.
   /// TempFilename may be empty and Filename non-empty if creating the temporary
@@ -244,10 +244,10 @@
   /// setInvocation - Replace the current invocation.
   void setInvocation(std::shared_ptr<CompilerInvocation> Value);
 
-  /// \brief Indicates whether we should (re)build the global module index.
+  /// Indicates whether we should (re)build the global module index.
   bool shouldBuildGlobalModuleIndex() const;
-  
-  /// \brief Set the flag indicating whether we should (re)build the global
+
+  /// Set the flag indicating whether we should (re)build the global
   /// module index.
   void setBuildGlobalModuleIndex(bool Build) {
     BuildGlobalModuleIndex = Build;
@@ -350,7 +350,7 @@
   void setDiagnostics(DiagnosticsEngine *Value);
 
   DiagnosticConsumer &getDiagnosticClient() const {
-    assert(Diagnostics && Diagnostics->getClient() && 
+    assert(Diagnostics && Diagnostics->getClient() &&
            "Compiler instance has no diagnostic client!");
     return *Diagnostics->getClient();
   }
@@ -390,7 +390,7 @@
     return *VirtualFileSystem;
   }
 
-  /// \brief Replace the current virtual file system.
+  /// Replace the current virtual file system.
   ///
   /// \note Most clients should use setFileManager, which will implicitly reset
   /// the virtual file system to the one contained in the file manager.
@@ -409,13 +409,13 @@
     assert(FileMgr && "Compiler instance has no file manager!");
     return *FileMgr;
   }
-  
+
   void resetAndLeakFileManager() {
     BuryPointer(FileMgr.get());
     FileMgr.resetWithoutRelease();
   }
 
-  /// \brief Replace the current file manager and virtual file system.
+  /// Replace the current file manager and virtual file system.
   void setFileManager(FileManager *Value);
 
   /// }
@@ -429,7 +429,7 @@
     assert(SourceMgr && "Compiler instance has no source manager!");
     return *SourceMgr;
   }
-  
+
   void resetAndLeakSourceManager() {
     BuryPointer(SourceMgr.get());
     SourceMgr.resetWithoutRelease();
@@ -469,7 +469,7 @@
     assert(Context && "Compiler instance has no AST context!");
     return *Context;
   }
-  
+
   void resetAndLeakASTContext() {
     BuryPointer(Context.get());
     Context.resetWithoutRelease();
@@ -478,10 +478,10 @@
   /// setASTContext - Replace the current AST context.
   void setASTContext(ASTContext *Value);
 
-  /// \brief Replace the current Sema; the compiler instance takes ownership
+  /// Replace the current Sema; the compiler instance takes ownership
   /// of S.
   void setSema(Sema *S);
-  
+
   /// }
   /// @name ASTConsumer
   /// {
@@ -506,7 +506,7 @@
   /// {
   bool hasSema() const { return (bool)TheSema; }
 
-  Sema &getSema() const { 
+  Sema &getSema() const {
     assert(TheSema && "Compiler instance has no Sema object!");
     return *TheSema;
   }
@@ -613,7 +613,7 @@
   /// attached to (and, then, owned by) the DiagnosticsEngine inside this AST
   /// unit.
   ///
-  /// \param ShouldOwnClient If Client is non-NULL, specifies whether 
+  /// \param ShouldOwnClient If Client is non-NULL, specifies whether
   /// the diagnostic object should take ownership of the client.
   void createDiagnostics(DiagnosticConsumer *Client = nullptr,
                          bool ShouldOwnClient = true);
@@ -690,10 +690,10 @@
       Preprocessor &PP, StringRef Filename, unsigned Line, unsigned Column,
       const CodeCompleteOptions &Opts, raw_ostream &OS);
 
-  /// \brief Create the Sema object to be used for parsing.
+  /// Create the Sema object to be used for parsing.
   void createSema(TranslationUnitKind TUKind,
                   CodeCompleteConsumer *CompletionConsumer);
-  
+
   /// Create the frontend timer and replace any existing one with it.
   void createFrontendTimer();
 
diff --git a/linux-x64/clang/include/clang/Frontend/CompilerInvocation.h b/linux-x64/clang/include/clang/Frontend/CompilerInvocation.h
index f6efcaf..1d421f0 100644
--- a/linux-x64/clang/include/clang/Frontend/CompilerInvocation.h
+++ b/linux-x64/clang/include/clang/Frontend/CompilerInvocation.h
@@ -44,7 +44,7 @@
 class PreprocessorOptions;
 class TargetOptions;
 
-/// \brief Fill out Opts based on the options given in Args.
+/// Fill out Opts based on the options given in Args.
 ///
 /// Args must have been created from the OptTable returned by
 /// createCC1OptTable().
@@ -106,8 +106,8 @@
     return *PreprocessorOpts;
   }
 };
-  
-/// \brief Helper class for holding the data necessary to invoke the compiler.
+
+/// Helper class for holding the data necessary to invoke the compiler.
 ///
 /// This class is designed to represent an abstract "invocation" of the
 /// compiler, including data such as the include paths, the code generation
@@ -117,7 +117,7 @@
   AnalyzerOptionsRef AnalyzerOpts;
 
   MigratorOptions MigratorOpts;
-  
+
   /// Options controlling IRgen and the backend.
   CodeGenOptions CodeGenOpts;
 
@@ -139,7 +139,7 @@
   /// @name Utility Methods
   /// @{
 
-  /// \brief Create a compiler invocation from a list of input options.
+  /// Create a compiler invocation from a list of input options.
   /// \returns true on success.
   ///
   /// \param [out] Res - The resulting invocation.
@@ -151,7 +151,7 @@
                              const char* const *ArgEnd,
                              DiagnosticsEngine &Diags);
 
-  /// \brief Get the directory where the compiler headers
+  /// Get the directory where the compiler headers
   /// reside, relative to the compiler binary (found by the passed in
   /// arguments).
   ///
@@ -161,7 +161,7 @@
   /// executable), for finding the builtin compiler path.
   static std::string GetResourcesPath(const char *Argv0, void *MainAddr);
 
-  /// \brief Set language defaults for the given input language and
+  /// Set language defaults for the given input language and
   /// language standard in the given LangOptions object.
   ///
   /// \param Opts - The LangOptions object to set up.
@@ -172,11 +172,11 @@
   static void setLangDefaults(LangOptions &Opts, InputKind IK,
                    const llvm::Triple &T, PreprocessorOptions &PPOpts,
                    LangStandard::Kind LangStd = LangStandard::lang_unspecified);
-  
-  /// \brief Retrieve a module hash string that is suitable for uniquely 
+
+  /// Retrieve a module hash string that is suitable for uniquely
   /// identifying the conditions under which the module was built.
   std::string getModuleHash() const;
-  
+
   /// @}
   /// @name Option Subgroups
   /// @{
@@ -185,7 +185,7 @@
 
   MigratorOptions &getMigratorOpts() { return MigratorOpts; }
   const MigratorOptions &getMigratorOpts() const { return MigratorOpts; }
-  
+
   CodeGenOptions &getCodeGenOpts() { return CodeGenOpts; }
   const CodeGenOptions &getCodeGenOpts() const { return CodeGenOpts; }
 
diff --git a/linux-x64/clang/include/clang/Frontend/DependencyOutputOptions.h b/linux-x64/clang/include/clang/Frontend/DependencyOutputOptions.h
index 0be36cd..f419d26 100644
--- a/linux-x64/clang/include/clang/Frontend/DependencyOutputOptions.h
+++ b/linux-x64/clang/include/clang/Frontend/DependencyOutputOptions.h
@@ -15,6 +15,9 @@
 
 namespace clang {
 
+/// ShowIncludesDestination - Destination for /showIncludes output.
+enum class ShowIncludesDestination { None, Stdout, Stderr };
+
 /// DependencyOutputFormat - Format for the compiler dependency file.
 enum class DependencyOutputFormat { Make, NMake };
 
@@ -28,11 +31,13 @@
                                      /// dependency, which can avoid some 'make'
                                      /// problems.
   unsigned AddMissingHeaderDeps : 1; ///< Add missing headers to dependency list
-  unsigned PrintShowIncludes : 1; ///< Print cl.exe style /showIncludes info.
   unsigned IncludeModuleFiles : 1; ///< Include module file dependencies.
 
+  /// Destination of cl.exe style /showIncludes info.
+  ShowIncludesDestination ShowIncludesDest = ShowIncludesDestination::None;
+
   /// The format for the dependency file.
-  DependencyOutputFormat OutputFormat;
+  DependencyOutputFormat OutputFormat = DependencyOutputFormat::Make;
 
   /// The file to write dependency output to.
   std::string OutputFile;
@@ -53,22 +58,16 @@
   /// In /showIncludes mode, pretend the main TU is a header with this name.
   std::string ShowIncludesPretendHeader;
 
-  /// \brief The file to write GraphViz-formatted header dependencies to.
+  /// The file to write GraphViz-formatted header dependencies to.
   std::string DOTOutputFile;
 
-  /// \brief The directory to copy module dependencies to when collecting them.
+  /// The directory to copy module dependencies to when collecting them.
   std::string ModuleDependencyOutputDir;
 
 public:
-  DependencyOutputOptions() {
-    IncludeSystemHeaders = 0;
-    ShowHeaderIncludes = 0;
-    UsePhonyTargets = 0;
-    AddMissingHeaderDeps = 0;
-    PrintShowIncludes = 0;
-    IncludeModuleFiles = 0;
-    OutputFormat = DependencyOutputFormat::Make;
-  }
+  DependencyOutputOptions()
+      : IncludeSystemHeaders(0), ShowHeaderIncludes(0), UsePhonyTargets(0),
+        AddMissingHeaderDeps(0), IncludeModuleFiles(0) {}
 };
 
 }  // end namespace clang
diff --git a/linux-x64/clang/include/clang/Frontend/DiagnosticRenderer.h b/linux-x64/clang/include/clang/Frontend/DiagnosticRenderer.h
index 0814569..3bbf379 100644
--- a/linux-x64/clang/include/clang/Frontend/DiagnosticRenderer.h
+++ b/linux-x64/clang/include/clang/Frontend/DiagnosticRenderer.h
@@ -32,8 +32,8 @@
 
 using DiagOrStoredDiag =
     llvm::PointerUnion<const Diagnostic *, const StoredDiagnostic *>;
-  
-/// \brief Class to encapsulate the logic for formatting a diagnostic message.
+
+/// Class to encapsulate the logic for formatting a diagnostic message.
 ///
 /// Actual "printing" logic is implemented by subclasses.
 ///
@@ -49,21 +49,21 @@
 protected:
   const LangOptions &LangOpts;
   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
-  
-  /// \brief The location of the previous diagnostic if known.
+
+  /// The location of the previous diagnostic if known.
   ///
   /// This will be invalid in cases where there is no (known) previous
   /// diagnostic location, or that location itself is invalid or comes from
   /// a different source manager than SM.
   SourceLocation LastLoc;
-  
-  /// \brief The location of the last include whose stack was printed if known.
+
+  /// The location of the last include whose stack was printed if known.
   ///
   /// Same restriction as LastLoc essentially, but tracking include stack
   /// root locations rather than diagnostic locations.
   SourceLocation LastIncludeLoc;
-  
-  /// \brief The level of the last diagnostic emitted.
+
+  /// The level of the last diagnostic emitted.
   ///
   /// The level of the last diagnostic emitted. Used to detect level changes
   /// which change the amount of information displayed.
@@ -71,7 +71,7 @@
 
   DiagnosticRenderer(const LangOptions &LangOpts,
                      DiagnosticOptions *DiagOpts);
-  
+
   virtual ~DiagnosticRenderer();
 
   virtual void emitDiagnosticMessage(FullSourceLoc Loc, PresumedLoc PLoc,
@@ -118,7 +118,7 @@
                            ArrayRef<FixItHint> Hints);
 
 public:
-  /// \brief Emit a diagnostic.
+  /// Emit a diagnostic.
   ///
   /// This is the primary entry point for emitting diagnostic messages.
   /// It handles formatting and rendering the message as well as any ancillary
@@ -137,7 +137,7 @@
 
   void emitStoredDiagnostic(StoredDiagnostic &Diag);
 };
-  
+
 /// Subclass of DiagnosticRender that turns all subdiagostics into explicit
 /// notes.  It is up to subclasses to further define the behavior.
 class DiagnosticNoteRenderer : public DiagnosticRenderer {
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendAction.h b/linux-x64/clang/include/clang/Frontend/FrontendAction.h
index 7ae6173..2a4077d 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendAction.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendAction.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the clang::FrontendAction interface and various convenience
+/// Defines the clang::FrontendAction interface and various convenience
 /// abstract classes (clang::ASTFrontendAction, clang::PluginASTAction,
 /// clang::PreprocessorFrontendAction, and clang::WrapperFrontendAction)
 /// derived from it.
@@ -48,7 +48,7 @@
   /// @name Implementation Action Interface
   /// @{
 
-  /// \brief Create the AST consumer object for this action, if supported.
+  /// Create the AST consumer object for this action, if supported.
   ///
   /// This routine is called as part of BeginSourceFile(), which will
   /// fail if the AST consumer cannot be created. This will not be called if the
@@ -64,7 +64,7 @@
   virtual std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
                                                          StringRef InFile) = 0;
 
-  /// \brief Callback before starting processing a single input, giving the
+  /// Callback before starting processing a single input, giving the
   /// opportunity to modify the CompilerInvocation or do some other action
   /// before BeginSourceFileAction is called.
   ///
@@ -72,7 +72,7 @@
   /// ExecuteAction() and EndSourceFileAction() will not be called.
   virtual bool BeginInvocation(CompilerInstance &CI) { return true; }
 
-  /// \brief Callback at the start of processing a single input.
+  /// Callback at the start of processing a single input.
   ///
   /// \return True on success; on failure ExecutionAction() and
   /// EndSourceFileAction() will not be called.
@@ -80,20 +80,20 @@
     return true;
   }
 
-  /// \brief Callback to run the program action, using the initialized
+  /// Callback to run the program action, using the initialized
   /// compiler instance.
   ///
   /// This is guaranteed to only be called between BeginSourceFileAction()
   /// and EndSourceFileAction().
   virtual void ExecuteAction() = 0;
 
-  /// \brief Callback at the end of processing a single input.
+  /// Callback at the end of processing a single input.
   ///
   /// This is guaranteed to only be called following a successful call to
   /// BeginSourceFileAction (and BeginSourceFile).
   virtual void EndSourceFileAction() {}
 
-  /// \brief Callback at the end of processing a single input, to determine
+  /// Callback at the end of processing a single input, to determine
   /// if the output files should be erased or not.
   ///
   /// By default it returns true if a compiler error occurred.
@@ -158,39 +158,39 @@
   /// @name Supported Modes
   /// @{
 
-  /// \brief Is this action invoked on a model file?
+  /// Is this action invoked on a model file?
   ///
   /// Model files are incomplete translation units that relies on type
   /// information from another translation unit. Check ParseModelFileAction for
   /// details.
   virtual bool isModelParsingAction() const { return false; }
 
-  /// \brief Does this action only use the preprocessor?
+  /// Does this action only use the preprocessor?
   ///
   /// If so no AST context will be created and this action will be invalid
   /// with AST file inputs.
   virtual bool usesPreprocessorOnly() const = 0;
 
-  /// \brief For AST-based actions, the kind of translation unit we're handling.
+  /// For AST-based actions, the kind of translation unit we're handling.
   virtual TranslationUnitKind getTranslationUnitKind() { return TU_Complete; }
 
-  /// \brief Does this action support use with PCH?
+  /// Does this action support use with PCH?
   virtual bool hasPCHSupport() const { return true; }
 
-  /// \brief Does this action support use with AST files?
+  /// Does this action support use with AST files?
   virtual bool hasASTFileSupport() const { return true; }
 
-  /// \brief Does this action support use with IR files?
+  /// Does this action support use with IR files?
   virtual bool hasIRSupport() const { return false; }
 
-  /// \brief Does this action support use with code completion?
+  /// Does this action support use with code completion?
   virtual bool hasCodeCompletionSupport() const { return false; }
 
   /// @}
   /// @name Public Action Interface
   /// @{
 
-  /// \brief Prepare the action for processing the input file \p Input.
+  /// Prepare the action for processing the input file \p Input.
   ///
   /// This is run after the options and frontend have been initialized,
   /// but prior to executing any per-file processing.
@@ -211,20 +211,20 @@
   /// be aborted and neither Execute() nor EndSourceFile() should be called.
   bool BeginSourceFile(CompilerInstance &CI, const FrontendInputFile &Input);
 
-  /// \brief Set the source manager's main input file, and run the action.
+  /// Set the source manager's main input file, and run the action.
   bool Execute();
 
-  /// \brief Perform any per-file post processing, deallocate per-file
+  /// Perform any per-file post processing, deallocate per-file
   /// objects, and run statistics and output file cleanup code.
   void EndSourceFile();
 
   /// @}
 };
 
-/// \brief Abstract base class to use for AST consumer-based frontend actions.
+/// Abstract base class to use for AST consumer-based frontend actions.
 class ASTFrontendAction : public FrontendAction {
 protected:
-  /// \brief Implement the ExecuteAction interface by running Sema on
+  /// Implement the ExecuteAction interface by running Sema on
   /// the already-initialized AST consumer.
   ///
   /// This will also take care of instantiating a code completion consumer if
@@ -242,7 +242,7 @@
   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
                                                  StringRef InFile) override = 0;
 
-  /// \brief Parse the given plugin command line arguments.
+  /// Parse the given plugin command line arguments.
   ///
   /// \param CI - The compiler instance, for use in reporting diagnostics.
   /// \return True if the parsing succeeded; otherwise the plugin will be
@@ -257,7 +257,7 @@
     AddBeforeMainAction, ///< Execute the action before the main action
     AddAfterMainAction   ///< Execute the action after the main action
   };
-  /// \brief Get the action type for this plugin
+  /// Get the action type for this plugin
   ///
   /// \return The action type. If the type is Cmdline then by default the
   /// plugin does nothing and what it does is determined by the cc1
@@ -265,10 +265,10 @@
   virtual ActionType getActionType() { return Cmdline; }
 };
 
-/// \brief Abstract base class to use for preprocessor-based frontend actions.
+/// Abstract base class to use for preprocessor-based frontend actions.
 class PreprocessorFrontendAction : public FrontendAction {
 protected:
-  /// \brief Provide a default implementation which returns aborts;
+  /// Provide a default implementation which returns aborts;
   /// this method should never be called by FrontendAction clients.
   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
                                                  StringRef InFile) override;
@@ -277,7 +277,7 @@
   bool usesPreprocessorOnly() const override { return true; }
 };
 
-/// \brief A frontend action which simply wraps some other runtime-specified
+/// A frontend action which simply wraps some other runtime-specified
 /// frontend action.
 ///
 /// Deriving from this class allows an action to inject custom logic around
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendActions.h b/linux-x64/clang/include/clang/Frontend/FrontendActions.h
index df0b7a6..54539a5 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendActions.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendActions.h
@@ -18,7 +18,7 @@
 
 class Module;
 class FileEntry;
-  
+
 //===----------------------------------------------------------------------===//
 // Custom Consumer Actions
 //===----------------------------------------------------------------------===//
@@ -35,6 +35,18 @@
   bool usesPreprocessorOnly() const override { return false; }
 };
 
+class DumpCompilerOptionsAction : public FrontendAction {
+  std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
+                                                 StringRef InFile) override {
+    return nullptr;
+  }
+
+  void ExecuteAction() override;
+
+public:
+  bool usesPreprocessorOnly() const override { return true; }
+};
+
 //===----------------------------------------------------------------------===//
 // AST Consumer Actions
 //===----------------------------------------------------------------------===//
@@ -83,14 +95,14 @@
   bool shouldEraseOutputFiles() override;
 
 public:
-  /// \brief Compute the AST consumer arguments that will be used to
+  /// Compute the AST consumer arguments that will be used to
   /// create the PCHGenerator instance returned by CreateASTConsumer.
   ///
   /// \returns false if an error occurred, true otherwise.
   static bool ComputeASTConsumerArguments(CompilerInstance &CI,
                                           std::string &Sysroot);
 
-  /// \brief Creates file to write the PCH into and returns a stream to write it
+  /// Creates file to write the PCH into and returns a stream to write it
   /// into. On error, returns null.
   static std::unique_ptr<llvm::raw_pwrite_stream>
   CreateOutputFile(CompilerInstance &CI, StringRef InFile,
@@ -140,7 +152,7 @@
   bool hasCodeCompletionSupport() const override { return true; }
 };
 
-/// \brief Dump information about the given module file, to be used for
+/// Dump information about the given module file, to be used for
 /// basic debugging and discovery.
 class DumpModuleInfoAction : public ASTFrontendAction {
 protected:
@@ -176,7 +188,7 @@
 };
 
 /**
- * \brief Frontend action adaptor that merges ASTs together.
+ * Frontend action adaptor that merges ASTs together.
  *
  * This action takes an existing AST file and "merges" it into the AST
  * context, producing a merged context. This action is an action
@@ -184,10 +196,10 @@
  * will consume the merged context.
  */
 class ASTMergeAction : public FrontendAction {
-  /// \brief The action that the merge action adapts.
+  /// The action that the merge action adapts.
   std::unique_ptr<FrontendAction> AdaptedAction;
-  
-  /// \brief The set of AST files to merge.
+
+  /// The set of AST files to merge.
   std::vector<std::string> ASTFiles;
 
 protected:
@@ -221,7 +233,7 @@
 
   bool usesPreprocessorOnly() const override { return true; }
 };
-  
+
 //===----------------------------------------------------------------------===//
 // Preprocessor Actions
 //===----------------------------------------------------------------------===//
@@ -252,7 +264,7 @@
 
   bool hasPCHSupport() const override { return true; }
 };
-  
+
 }  // end namespace clang
 
 #endif
diff --git a/linux-x64/clang/include/clang/Frontend/FrontendOptions.h b/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
index 768957a..668df83 100644
--- a/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
+++ b/linux-x64/clang/include/clang/Frontend/FrontendOptions.h
@@ -43,6 +43,9 @@
   /// Parse ASTs and view them in Graphviz.
   ASTView,
 
+  /// Dump the compiler configuration.
+  DumpCompilerOptions,
+
   /// Dump out raw tokens.
   DumpRawTokens,
 
@@ -161,6 +164,7 @@
     OpenCL,
     CUDA,
     RenderScript,
+    HIP,
     ///@}
   };
 
@@ -194,9 +198,9 @@
   }
 };
 
-/// \brief An input file for the front end.
+/// An input file for the front end.
 class FrontendInputFile {
-  /// \brief The file name, or "-" to read from standard input.
+  /// The file name, or "-" to read from standard input.
   std::string File;
 
   /// The input, if it comes from a buffer rather than a file. This object
@@ -204,10 +208,10 @@
   /// that it outlives any users.
   llvm::MemoryBuffer *Buffer = nullptr;
 
-  /// \brief The kind of input, e.g., C source, AST file, LLVM IR.
+  /// The kind of input, e.g., C source, AST file, LLVM IR.
   InputKind Kind;
 
-  /// \brief Whether we're dealing with a 'system' input (vs. a 'user' input).
+  /// Whether we're dealing with a 'system' input (vs. a 'user' input).
   bool IsSystem = false;
 
 public:
@@ -314,46 +318,46 @@
   enum {
     ObjCMT_None = 0,
 
-    /// \brief Enable migration to modern ObjC literals.
+    /// Enable migration to modern ObjC literals.
     ObjCMT_Literals = 0x1,
 
-    /// \brief Enable migration to modern ObjC subscripting.
+    /// Enable migration to modern ObjC subscripting.
     ObjCMT_Subscripting = 0x2,
 
-    /// \brief Enable migration to modern ObjC readonly property.
+    /// Enable migration to modern ObjC readonly property.
     ObjCMT_ReadonlyProperty = 0x4,
 
-    /// \brief Enable migration to modern ObjC readwrite property.
+    /// Enable migration to modern ObjC readwrite property.
     ObjCMT_ReadwriteProperty = 0x8,
 
-    /// \brief Enable migration to modern ObjC property.
+    /// Enable migration to modern ObjC property.
     ObjCMT_Property = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty),
 
-    /// \brief Enable annotation of ObjCMethods of all kinds.
+    /// Enable annotation of ObjCMethods of all kinds.
     ObjCMT_Annotation = 0x10,
 
-    /// \brief Enable migration of ObjC methods to 'instancetype'.
+    /// Enable migration of ObjC methods to 'instancetype'.
     ObjCMT_Instancetype = 0x20,
 
-    /// \brief Enable migration to NS_ENUM/NS_OPTIONS macros.
+    /// Enable migration to NS_ENUM/NS_OPTIONS macros.
     ObjCMT_NsMacros = 0x40,
 
-    /// \brief Enable migration to add conforming protocols.
+    /// Enable migration to add conforming protocols.
     ObjCMT_ProtocolConformance = 0x80,
 
-    /// \brief prefer 'atomic' property over 'nonatomic'.
+    /// prefer 'atomic' property over 'nonatomic'.
     ObjCMT_AtomicProperty = 0x100,
 
-    /// \brief annotate property with NS_RETURNS_INNER_POINTER
+    /// annotate property with NS_RETURNS_INNER_POINTER
     ObjCMT_ReturnsInnerPointerProperty = 0x200,
 
-    /// \brief use NS_NONATOMIC_IOSONLY for property 'atomic' attribute
+    /// use NS_NONATOMIC_IOSONLY for property 'atomic' attribute
     ObjCMT_NsAtomicIOSOnlyProperty = 0x400,
 
-    /// \brief Enable inferring NS_DESIGNATED_INITIALIZER for ObjC methods.
+    /// Enable inferring NS_DESIGNATED_INITIALIZER for ObjC methods.
     ObjCMT_DesignatedInitializer = 0x800,
 
-    /// \brief Enable converting setter/getter expressions to property-dot syntx.
+    /// Enable converting setter/getter expressions to property-dot syntx.
     ObjCMT_PropertyDotSyntax = 0x1000,
 
     ObjCMT_MigrateDecls = (ObjCMT_ReadonlyProperty | ObjCMT_ReadwriteProperty |
@@ -407,34 +411,30 @@
   /// The list of module file extensions.
   std::vector<std::shared_ptr<ModuleFileExtension>> ModuleFileExtensions;
 
-  /// \brief The list of module map files to load before processing the input.
+  /// The list of module map files to load before processing the input.
   std::vector<std::string> ModuleMapFiles;
 
-  /// \brief The list of additional prebuilt module files to load before
+  /// The list of additional prebuilt module files to load before
   /// processing the input.
   std::vector<std::string> ModuleFiles;
 
-  /// \brief The list of files to embed into the compiled module file.
+  /// The list of files to embed into the compiled module file.
   std::vector<std::string> ModulesEmbedFiles;
 
-  /// \brief The list of AST files to merge.
+  /// The list of AST files to merge.
   std::vector<std::string> ASTMergeFiles;
 
-  /// \brief A list of arguments to forward to LLVM's option processing; this
+  /// A list of arguments to forward to LLVM's option processing; this
   /// should only be used for debugging and experimental features.
   std::vector<std::string> LLVMArgs;
 
-  /// \brief File name of the file that will provide record layouts
+  /// File name of the file that will provide record layouts
   /// (in the format produced by -fdump-record-layouts).
   std::string OverrideRecordLayoutsFile;
 
-  /// \brief Auxiliary triple for CUDA compilation.
+  /// Auxiliary triple for CUDA compilation.
   std::string AuxTriple;
 
-  /// \brief If non-empty, search the pch input file as if it was a header
-  /// included by this file.
-  std::string FindPchSource;
-
   /// Filename to write statistics to.
   std::string StatsFile;
 
diff --git a/linux-x64/clang/include/clang/Frontend/LangStandards.def b/linux-x64/clang/include/clang/Frontend/LangStandards.def
index e7a081d..1e895d7 100644
--- a/linux-x64/clang/include/clang/Frontend/LangStandards.def
+++ b/linux-x64/clang/include/clang/Frontend/LangStandards.def
@@ -155,6 +155,9 @@
 LANGSTANDARD(opencl20, "cl2.0",
              OpenCL, "OpenCL 2.0",
              LineComment | C99 | Digraphs | HexFloat | OpenCL)
+LANGSTANDARD(openclcpp, "c++",
+             OpenCL, "OpenCL C++ 1.0",
+             LineComment | CPlusPlus | CPlusPlus11 | CPlusPlus14 | Digraphs | OpenCL)
 
 LANGSTANDARD_ALIAS_DEPR(opencl10, "CL")
 LANGSTANDARD_ALIAS_DEPR(opencl11, "CL1.1")
@@ -165,6 +168,10 @@
 LANGSTANDARD(cuda, "cuda", CUDA, "NVIDIA CUDA(tm)",
              LineComment | CPlusPlus | Digraphs)
 
+// HIP
+LANGSTANDARD(hip, "hip", HIP, "HIP",
+             LineComment | CPlusPlus | Digraphs)
+
 #undef LANGSTANDARD
 #undef LANGSTANDARD_ALIAS
 #undef LANGSTANDARD_ALIAS_DEPR
diff --git a/linux-x64/clang/include/clang/Frontend/LayoutOverrideSource.h b/linux-x64/clang/include/clang/Frontend/LayoutOverrideSource.h
index 16d032b..28e3cf0 100644
--- a/linux-x64/clang/include/clang/Frontend/LayoutOverrideSource.h
+++ b/linux-x64/clang/include/clang/Frontend/LayoutOverrideSource.h
@@ -1,4 +1,4 @@
-//===--- LayoutOverrideSource.h --Override Record Layouts -----------------===//
+//===--- LayoutOverrideSource.h --Override Record Layouts -------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -16,36 +16,36 @@
 #include "llvm/ADT/StringRef.h"
 
 namespace clang {
-  /// \brief An external AST source that overrides the layout of
+  /// An external AST source that overrides the layout of
   /// a specified set of record types.
   ///
   /// This class is used only for testing the ability of external AST sources
   /// to override the layout of record types. Its input is the output format
   /// of the command-line argument -fdump-record-layouts.
   class LayoutOverrideSource : public ExternalASTSource {
-    /// \brief The layout of a given record.
+    /// The layout of a given record.
     struct Layout {
-      /// \brief The size of the record.
+      /// The size of the record.
       uint64_t Size;
-      
-      /// \brief The alignment of the record.
+
+      /// The alignment of the record.
       uint64_t Align;
-      
-      /// \brief The offsets of the fields, in source order.
+
+      /// The offsets of the fields, in source order.
       SmallVector<uint64_t, 8> FieldOffsets;
     };
-    
-    /// \brief The set of layouts that will be overridden.
+
+    /// The set of layouts that will be overridden.
     llvm::StringMap<Layout> Layouts;
-    
+
   public:
-    /// \brief Create a new AST source that overrides the layout of some
+    /// Create a new AST source that overrides the layout of some
     /// set of record types.
     ///
     /// The file is the result of passing -fdump-record-layouts to a file.
     explicit LayoutOverrideSource(StringRef Filename);
-    
-    /// \brief If this particular record type has an overridden layout,
+
+    /// If this particular record type has an overridden layout,
     /// return that layout.
     bool
     layoutRecordType(const RecordDecl *Record,
@@ -54,8 +54,8 @@
        llvm::DenseMap<const CXXRecordDecl *, CharUnits> &BaseOffsets,
        llvm::DenseMap<const CXXRecordDecl *,
                       CharUnits> &VirtualBaseOffsets) override;
-    
-    /// \brief Dump the overridden layouts.
+
+    /// Dump the overridden layouts.
     void dump();
   };
 }
diff --git a/linux-x64/clang/include/clang/Frontend/LogDiagnosticPrinter.h b/linux-x64/clang/include/clang/Frontend/LogDiagnosticPrinter.h
index 98adf65..3286ecf 100644
--- a/linux-x64/clang/include/clang/Frontend/LogDiagnosticPrinter.h
+++ b/linux-x64/clang/include/clang/Frontend/LogDiagnosticPrinter.h
@@ -23,22 +23,22 @@
   struct DiagEntry {
     /// The primary message line of the diagnostic.
     std::string Message;
-  
+
     /// The source file name, if available.
     std::string Filename;
-  
+
     /// The source file line number, if available.
     unsigned Line;
-  
+
     /// The source file column number, if available.
     unsigned Column;
-  
+
     /// The ID of the diagnostic.
     unsigned DiagnosticID;
 
     /// The Option Flag for the diagnostic
     std::string WarningOption;
-  
+
     /// The level of the diagnostic.
     DiagnosticsEngine::Level DiagnosticLevel;
   };
diff --git a/linux-x64/clang/include/clang/Frontend/MultiplexConsumer.h b/linux-x64/clang/include/clang/Frontend/MultiplexConsumer.h
index d13565c..214fefb 100644
--- a/linux-x64/clang/include/clang/Frontend/MultiplexConsumer.h
+++ b/linux-x64/clang/include/clang/Frontend/MultiplexConsumer.h
@@ -17,13 +17,34 @@
 
 #include "clang/Basic/LLVM.h"
 #include "clang/Sema/SemaConsumer.h"
+#include "clang/Serialization/ASTDeserializationListener.h"
 #include <memory>
 #include <vector>
 
 namespace clang {
 
 class MultiplexASTMutationListener;
-class MultiplexASTDeserializationListener;
+
+// This ASTDeserializationListener forwards its notifications to a set of
+// child listeners.
+class MultiplexASTDeserializationListener : public ASTDeserializationListener {
+public:
+  // Does NOT take ownership of the elements in L.
+  MultiplexASTDeserializationListener(
+      const std::vector<ASTDeserializationListener *> &L);
+  void ReaderInitialized(ASTReader *Reader) override;
+  void IdentifierRead(serialization::IdentID ID, IdentifierInfo *II) override;
+  void MacroRead(serialization::MacroID ID, MacroInfo *MI) override;
+  void TypeRead(serialization::TypeIdx Idx, QualType T) override;
+  void DeclRead(serialization::DeclID ID, const Decl *D) override;
+  void SelectorRead(serialization::SelectorID iD, Selector Sel) override;
+  void MacroDefinitionRead(serialization::PreprocessedEntityID,
+                           MacroDefinitionRecord *MD) override;
+  void ModuleRead(serialization::SubmoduleID ID, Module *Mod) override;
+
+private:
+  std::vector<ASTDeserializationListener *> Listeners;
+};
 
 // Has a list of ASTConsumers and calls each of them. Owns its children.
 class MultiplexConsumer : public SemaConsumer {
diff --git a/linux-x64/clang/include/clang/Frontend/PCHContainerOperations.h b/linux-x64/clang/include/clang/Frontend/PCHContainerOperations.h
index f9a7350..7a12ebc 100644
--- a/linux-x64/clang/include/clang/Frontend/PCHContainerOperations.h
+++ b/linux-x64/clang/include/clang/Frontend/PCHContainerOperations.h
@@ -34,12 +34,12 @@
   llvm::SmallVector<char, 0> Data;
   bool IsComplete;
 };
-  
+
 /// This abstract interface provides operations for creating
 /// containers for serialized ASTs (precompiled headers and clang
 /// modules).
 class PCHContainerWriter {
-public: 
+public:
   virtual ~PCHContainerWriter() = 0;
   virtual StringRef getFormat() const = 0;
 
@@ -58,7 +58,7 @@
 /// containers for serialized ASTs (precompiled headers and clang
 /// modules).
 class PCHContainerReader {
-public: 
+public:
   virtual ~PCHContainerReader() = 0;
   /// Equivalent to the format passed to -fmodule-format=
   virtual StringRef getFormat() const = 0;
@@ -102,7 +102,7 @@
   }
   void registerReader(std::unique_ptr<PCHContainerReader> Reader) {
     Readers[Reader->getFormat()] = std::move(Reader);
-  }  
+  }
   const PCHContainerWriter *getWriterOrNull(StringRef Format) {
     return Writers[Format].get();
   }
diff --git a/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h b/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
index aa8fb82..6abdbe3 100644
--- a/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
+++ b/linux-x64/clang/include/clang/Frontend/PrecompiledPreamble.h
@@ -38,7 +38,7 @@
 class DeclGroupRef;
 class PCHContainerOperations;
 
-/// \brief Runs lexer to compute suggested preamble bounds.
+/// Runs lexer to compute suggested preamble bounds.
 PreambleBounds ComputePreambleBounds(const LangOptions &LangOpts,
                                      llvm::MemoryBuffer *Buffer,
                                      unsigned MaxLines);
@@ -53,7 +53,7 @@
   struct PreambleFileHash;
 
 public:
-  /// \brief Try to build PrecompiledPreamble for \p Invocation. See
+  /// Try to build PrecompiledPreamble for \p Invocation. See
   /// BuildPreambleError for possible error codes.
   ///
   /// \param Invocation Original CompilerInvocation with options to compile the
@@ -107,7 +107,7 @@
   /// Requires that CanReuse() is true.
   /// For in-memory preambles, PrecompiledPreamble instance continues to own the
   /// MemoryBuffer with the Preamble after this method returns. The caller is
-  /// reponsible for making sure the PrecompiledPreamble instance outlives the
+  /// responsible for making sure the PrecompiledPreamble instance outlives the
   /// compiler run and the AST that will be using the PCH.
   void AddImplicitPreamble(CompilerInvocation &CI,
                            IntrusiveRefCntPtr<vfs::FileSystem> &VFS,
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
index 36ef014..dc68c32 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticPrinter.h
@@ -1,4 +1,4 @@
-//===--- SerializedDiagnosticPrinter.h - Serializer for diagnostics -------===//
+//===--- SerializedDiagnosticPrinter.h - Diagnostics serializer -*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -25,7 +25,7 @@
 
 namespace serialized_diags {
 
-/// \brief Returns a DiagnosticConsumer that serializes diagnostics to
+/// Returns a DiagnosticConsumer that serializes diagnostics to
 ///  a bitcode file.
 ///
 /// The created DiagnosticConsumer is designed for quick and lightweight
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
index 31637c2..595bdf1 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnosticReader.h
@@ -43,7 +43,7 @@
   return std::error_code(static_cast<int>(E), SDErrorCategory());
 }
 
-/// \brief A location that is represented in the serialized diagnostics.
+/// A location that is represented in the serialized diagnostics.
 struct Location {
   unsigned FileID;
   unsigned Line;
@@ -54,7 +54,7 @@
       : FileID(FileID), Line(Line), Col(Col), Offset(Offset) {}
 };
 
-/// \brief A base class that handles reading serialized diagnostics from a file.
+/// A base class that handles reading serialized diagnostics from a file.
 ///
 /// Subclasses should override the visit* methods with their logic for handling
 /// the various constructs that are found in serialized diagnostics.
@@ -63,66 +63,66 @@
   SerializedDiagnosticReader() = default;
   virtual ~SerializedDiagnosticReader() = default;
 
-  /// \brief Read the diagnostics in \c File
+  /// Read the diagnostics in \c File
   std::error_code readDiagnostics(StringRef File);
 
 private:
   enum class Cursor;
 
-  /// \brief Read to the next record or block to process.
+  /// Read to the next record or block to process.
   llvm::ErrorOr<Cursor> skipUntilRecordOrBlock(llvm::BitstreamCursor &Stream,
                                                unsigned &BlockOrRecordId);
 
-  /// \brief Read a metadata block from \c Stream.
+  /// Read a metadata block from \c Stream.
   std::error_code readMetaBlock(llvm::BitstreamCursor &Stream);
 
-  /// \brief Read a diagnostic block from \c Stream.
+  /// Read a diagnostic block from \c Stream.
   std::error_code readDiagnosticBlock(llvm::BitstreamCursor &Stream);
 
 protected:
-  /// \brief Visit the start of a diagnostic block.
+  /// Visit the start of a diagnostic block.
   virtual std::error_code visitStartOfDiagnostic() { return {}; }
 
-  /// \brief Visit the end of a diagnostic block.
+  /// Visit the end of a diagnostic block.
   virtual std::error_code visitEndOfDiagnostic() { return {}; }
 
-  /// \brief Visit a category. This associates the category \c ID to a \c Name.
+  /// Visit a category. This associates the category \c ID to a \c Name.
   virtual std::error_code visitCategoryRecord(unsigned ID, StringRef Name) {
     return {};
   }
 
-  /// \brief Visit a flag. This associates the flag's \c ID to a \c Name.
+  /// Visit a flag. This associates the flag's \c ID to a \c Name.
   virtual std::error_code visitDiagFlagRecord(unsigned ID, StringRef Name) {
     return {};
   }
 
-  /// \brief Visit a diagnostic.
+  /// Visit a diagnostic.
   virtual std::error_code
   visitDiagnosticRecord(unsigned Severity, const Location &Location,
                         unsigned Category, unsigned Flag, StringRef Message) {
     return {};
   }
 
-  /// \brief Visit a filename. This associates the file's \c ID to a \c Name.
+  /// Visit a filename. This associates the file's \c ID to a \c Name.
   virtual std::error_code visitFilenameRecord(unsigned ID, unsigned Size,
                                               unsigned Timestamp,
                                               StringRef Name) {
     return {};
   }
 
-  /// \brief Visit a fixit hint.
+  /// Visit a fixit hint.
   virtual std::error_code
   visitFixitRecord(const Location &Start, const Location &End, StringRef Text) {
     return {};
   }
 
-  /// \brief Visit a source range.
+  /// Visit a source range.
   virtual std::error_code visitSourceRangeRecord(const Location &Start,
                                                  const Location &End) {
     return {};
   }
 
-  /// \brief Visit the version of the set of diagnostics.
+  /// Visit the version of the set of diagnostics.
   virtual std::error_code visitVersionRecord(unsigned Version) { return {}; }
 };
 
diff --git a/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h b/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
index 2032cd3..dacbc67 100644
--- a/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
+++ b/linux-x64/clang/include/clang/Frontend/SerializedDiagnostics.h
@@ -16,11 +16,11 @@
 namespace serialized_diags {
 
 enum BlockIDs {
-  /// \brief A top-level block which represents any meta data associated
+  /// A top-level block which represents any meta data associated
   /// with the diagostics, including versioning of the format.
   BLOCK_META = llvm::bitc::FIRST_APPLICATION_BLOCKID,
 
-  /// \brief The this block acts as a container for all the information
+  /// The this block acts as a container for all the information
   /// for a specific diagnostic.
   BLOCK_DIAG
 };
@@ -37,7 +37,7 @@
   RECORD_LAST = RECORD_FIXIT
 };
 
-/// \brief A stable version of DiagnosticIDs::Level.
+/// A stable version of DiagnosticIDs::Level.
 ///
 /// Do not change the order of values in this enum, and please increment the
 /// serialized diagnostics version number when you add to it.
@@ -50,7 +50,7 @@
   Remark
 };
 
-/// \brief The serialized diagnostics version number.
+/// The serialized diagnostics version number.
 enum { VersionNumber = 2 };
 
 } // end serialized_diags namespace
diff --git a/linux-x64/clang/include/clang/Frontend/TextDiagnostic.h b/linux-x64/clang/include/clang/Frontend/TextDiagnostic.h
index 1bbfe9f..9f33b86 100644
--- a/linux-x64/clang/include/clang/Frontend/TextDiagnostic.h
+++ b/linux-x64/clang/include/clang/Frontend/TextDiagnostic.h
@@ -20,7 +20,7 @@
 
 namespace clang {
 
-/// \brief Class to encapsulate the logic for formatting and printing a textual
+/// Class to encapsulate the logic for formatting and printing a textual
 /// diagnostic message.
 ///
 /// This class provides an interface for building and emitting a textual
@@ -42,7 +42,7 @@
 
   ~TextDiagnostic() override;
 
-  /// \brief Print the diagonstic level to a raw_ostream.
+  /// Print the diagonstic level to a raw_ostream.
   ///
   /// This is a static helper that handles colorizing the level and formatting
   /// it into an arbitrary output stream. This is used internally by the
@@ -54,7 +54,7 @@
                                    bool ShowColors,
                                    bool CLFallbackMode = false);
 
-  /// \brief Pretty-print a diagnostic message to a raw_ostream.
+  /// Pretty-print a diagnostic message to a raw_ostream.
   ///
   /// This is a static helper to handle the line wrapping, colorizing, and
   /// rendering of a diagnostic message to a particular ostream. It is
diff --git a/linux-x64/clang/include/clang/Frontend/TextDiagnosticPrinter.h b/linux-x64/clang/include/clang/Frontend/TextDiagnosticPrinter.h
index 07cee9f..3cb4e02 100644
--- a/linux-x64/clang/include/clang/Frontend/TextDiagnosticPrinter.h
+++ b/linux-x64/clang/include/clang/Frontend/TextDiagnosticPrinter.h
@@ -29,7 +29,7 @@
   raw_ostream &OS;
   IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts;
 
-  /// \brief Handle to the currently active text diagnostic emitter.
+  /// Handle to the currently active text diagnostic emitter.
   std::unique_ptr<TextDiagnostic> TextDiag;
 
   /// A string to prefix to error messages.
diff --git a/linux-x64/clang/include/clang/Frontend/Utils.h b/linux-x64/clang/include/clang/Frontend/Utils.h
index 47a5e91..67912a8 100644
--- a/linux-x64/clang/include/clang/Frontend/Utils.h
+++ b/linux-x64/clang/include/clang/Frontend/Utils.h
@@ -234,6 +234,12 @@
   BuryPointer(Ptr.release());
 }
 
+// Frontend timing utils
+
+/// If the user specifies the -ftime-report argument on an Clang command line
+/// then the value of this boolean will be true, otherwise false.
+extern bool FrontendTimesIsEnabled;
+
 } // namespace clang
 
 #endif // LLVM_CLANG_FRONTEND_UTILS_H
diff --git a/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h b/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
index 45499b4..f36970f 100644
--- a/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
+++ b/linux-x64/clang/include/clang/Frontend/VerifyDiagnosticConsumer.h
@@ -252,7 +252,7 @@
 
 public:
   /// Create a new verifying diagnostic client, which will issue errors to
-  /// the currently-attached diagnostic client when a diagnostic does not match 
+  /// the currently-attached diagnostic client when a diagnostic does not match
   /// what is expected (as indicated in the source file).
   VerifyDiagnosticConsumer(DiagnosticsEngine &Diags);
   ~VerifyDiagnosticConsumer() override;
@@ -273,7 +273,7 @@
     IsUnparsedNoDirectives
   };
 
-  /// \brief Update lists of parsed and unparsed files.
+  /// Update lists of parsed and unparsed files.
   void UpdateParsedFileStatus(SourceManager &SM, FileID FID, ParsedStatus PS);
 
   bool HandleComment(Preprocessor &PP, SourceRange Comment) override;
diff --git a/linux-x64/clang/include/clang/Index/IndexDataConsumer.h b/linux-x64/clang/include/clang/Index/IndexDataConsumer.h
index 080f4cb..6e11455 100644
--- a/linux-x64/clang/include/clang/Index/IndexDataConsumer.h
+++ b/linux-x64/clang/include/clang/Index/IndexDataConsumer.h
@@ -1,4 +1,4 @@
-//===--- IndexDataConsumer.h - Abstract index data consumer ---------------===//
+//===--- IndexDataConsumer.h - Abstract index data consumer -----*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -42,23 +42,18 @@
   /// \returns true to continue indexing, or false to abort.
   virtual bool handleDeclOccurence(const Decl *D, SymbolRoleSet Roles,
                                    ArrayRef<SymbolRelation> Relations,
-                                   FileID FID, unsigned Offset,
-                                   ASTNodeInfo ASTNode);
+                                   SourceLocation Loc, ASTNodeInfo ASTNode);
 
   /// \returns true to continue indexing, or false to abort.
   virtual bool handleMacroOccurence(const IdentifierInfo *Name,
                                     const MacroInfo *MI, SymbolRoleSet Roles,
-                                    FileID FID, unsigned Offset);
+                                    SourceLocation Loc);
 
   /// \returns true to continue indexing, or false to abort.
   virtual bool handleModuleOccurence(const ImportDecl *ImportD,
-                                     SymbolRoleSet Roles,
-                                     FileID FID, unsigned Offset);
+                                     SymbolRoleSet Roles, SourceLocation Loc);
 
   virtual void finish() {}
-
-private:
-  virtual void _anchor();
 };
 
 } // namespace index
diff --git a/linux-x64/clang/include/clang/Index/IndexSymbol.h b/linux-x64/clang/include/clang/Index/IndexSymbol.h
index 3355dd2..0687961 100644
--- a/linux-x64/clang/include/clang/Index/IndexSymbol.h
+++ b/linux-x64/clang/include/clang/Index/IndexSymbol.h
@@ -1,4 +1,4 @@
-//===--- IndexSymbol.h - Types and functions for indexing symbols ---------===//
+//===- IndexSymbol.h - Types and functions for indexing symbols -*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,6 +11,7 @@
 #define LLVM_CLANG_INDEX_INDEXSYMBOL_H
 
 #include "clang/Basic/LLVM.h"
+#include "clang/Lex/MacroInfo.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/Support/DataTypes.h"
 
@@ -93,28 +94,31 @@
 /// Low 9 bits of clang-c/include/Index.h CXSymbolRole mirrors this enum.
 enum class SymbolRole : uint32_t {
   Declaration = 1 << 0,
-  Definition  = 1 << 1,
-  Reference   = 1 << 2,
-  Read        = 1 << 3,
-  Write       = 1 << 4,
-  Call        = 1 << 5,
-  Dynamic     = 1 << 6,
-  AddressOf   = 1 << 7,
-  Implicit    = 1 << 8,
+  Definition = 1 << 1,
+  Reference = 1 << 2,
+  Read = 1 << 3,
+  Write = 1 << 4,
+  Call = 1 << 5,
+  Dynamic = 1 << 6,
+  AddressOf = 1 << 7,
+  Implicit = 1 << 8,
+  // FIXME: this is not mirrored in CXSymbolRole.
+  // Note that macro occurrences aren't currently supported in libclang.
+  Undefinition = 1 << 9, // macro #undef
 
   // Relation roles.
-  RelationChildOf     = 1 << 9,
-  RelationBaseOf      = 1 << 10,
-  RelationOverrideOf  = 1 << 11,
-  RelationReceivedBy  = 1 << 12,
-  RelationCalledBy    = 1 << 13,
-  RelationExtendedBy  = 1 << 14,
-  RelationAccessorOf  = 1 << 15,
-  RelationContainedBy = 1 << 16,
-  RelationIBTypeOf    = 1 << 17,
-  RelationSpecializationOf = 1 << 18,
+  RelationChildOf = 1 << 10,
+  RelationBaseOf = 1 << 11,
+  RelationOverrideOf = 1 << 12,
+  RelationReceivedBy = 1 << 13,
+  RelationCalledBy = 1 << 14,
+  RelationExtendedBy = 1 << 15,
+  RelationAccessorOf = 1 << 16,
+  RelationContainedBy = 1 << 17,
+  RelationIBTypeOf = 1 << 18,
+  RelationSpecializationOf = 1 << 19,
 };
-static const unsigned SymbolRoleBitNum = 19;
+static const unsigned SymbolRoleBitNum = 20;
 typedef unsigned SymbolRoleSet;
 
 /// Represents a relation to another symbol for a symbol occurrence.
@@ -135,6 +139,8 @@
 
 SymbolInfo getSymbolInfo(const Decl *D);
 
+SymbolInfo getSymbolInfoForMacro(const MacroInfo &MI);
+
 bool isFunctionLocalSymbol(const Decl *D);
 
 void applyForEachSymbolRole(SymbolRoleSet Roles,
diff --git a/linux-x64/clang/include/clang/Index/IndexingAction.h b/linux-x64/clang/include/clang/Index/IndexingAction.h
index fb703be..0d09c40 100644
--- a/linux-x64/clang/include/clang/Index/IndexingAction.h
+++ b/linux-x64/clang/include/clang/Index/IndexingAction.h
@@ -1,4 +1,4 @@
-//===--- IndexingAction.h - Frontend index action -------------------------===//
+//===--- IndexingAction.h - Frontend index action ---------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,6 +11,7 @@
 #define LLVM_CLANG_INDEX_INDEXINGACTION_H
 
 #include "clang/Basic/LLVM.h"
+#include "clang/Lex/PPCallbacks.h"
 #include "llvm/ADT/ArrayRef.h"
 #include <memory>
 
@@ -38,25 +39,35 @@
   SystemSymbolFilterKind SystemSymbolFilter
     = SystemSymbolFilterKind::DeclarationsOnly;
   bool IndexFunctionLocals = false;
+  bool IndexImplicitInstantiation = false;
 };
 
+/// Creates a frontend action that indexes all symbols (macros and AST decls).
 /// \param WrappedAction another frontend action to wrap over or null.
 std::unique_ptr<FrontendAction>
 createIndexingAction(std::shared_ptr<IndexDataConsumer> DataConsumer,
                      IndexingOptions Opts,
                      std::unique_ptr<FrontendAction> WrappedAction);
 
-void indexASTUnit(ASTUnit &Unit,
-                  std::shared_ptr<IndexDataConsumer> DataConsumer,
+/// Recursively indexes all decls in the AST.
+/// Note that this does not index macros.
+void indexASTUnit(ASTUnit &Unit, IndexDataConsumer &DataConsumer,
                   IndexingOptions Opts);
 
+/// Recursively indexes \p Decls.
+/// Note that this does not index macros.
 void indexTopLevelDecls(ASTContext &Ctx, ArrayRef<const Decl *> Decls,
-                        std::shared_ptr<IndexDataConsumer> DataConsumer,
-                        IndexingOptions Opts);
+                        IndexDataConsumer &DataConsumer, IndexingOptions Opts);
 
+/// Creates a PPCallbacks that indexes macros and feeds macros to \p Consumer.
+/// The caller is responsible for calling `Consumer.setPreprocessor()`.
+std::unique_ptr<PPCallbacks> indexMacrosCallback(IndexDataConsumer &Consumer,
+                                                 IndexingOptions Opts);
+
+/// Recursively indexes all top-level decls in the module.
+/// FIXME: make this index macros as well.
 void indexModuleFile(serialization::ModuleFile &Mod, ASTReader &Reader,
-                     std::shared_ptr<IndexDataConsumer> DataConsumer,
-                     IndexingOptions Opts);
+                     IndexDataConsumer &DataConsumer, IndexingOptions Opts);
 
 } // namespace index
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Index/USRGeneration.h b/linux-x64/clang/include/clang/Index/USRGeneration.h
index 8c661bd..1ece321 100644
--- a/linux-x64/clang/include/clang/Index/USRGeneration.h
+++ b/linux-x64/clang/include/clang/Index/USRGeneration.h
@@ -1,4 +1,4 @@
-//===- USRGeneration.h - Routines for USR generation ----------------------===//
+//===- USRGeneration.h - Routines for USR generation ------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -25,33 +25,33 @@
   return "c:";
 }
 
-/// \brief Generate a USR for a Decl, including the USR prefix.
+/// Generate a USR for a Decl, including the USR prefix.
 /// \returns true if the results should be ignored, false otherwise.
 bool generateUSRForDecl(const Decl *D, SmallVectorImpl<char> &Buf);
 
-/// \brief Generate a USR fragment for an Objective-C class.
+/// Generate a USR fragment for an Objective-C class.
 void generateUSRForObjCClass(StringRef Cls, raw_ostream &OS,
                              StringRef ExtSymbolDefinedIn = "",
                              StringRef CategoryContextExtSymbolDefinedIn = "");
 
-/// \brief Generate a USR fragment for an Objective-C class category.
+/// Generate a USR fragment for an Objective-C class category.
 void generateUSRForObjCCategory(StringRef Cls, StringRef Cat, raw_ostream &OS,
                                 StringRef ClsExtSymbolDefinedIn = "",
                                 StringRef CatExtSymbolDefinedIn = "");
 
-/// \brief Generate a USR fragment for an Objective-C instance variable.  The
+/// Generate a USR fragment for an Objective-C instance variable.  The
 /// complete USR can be created by concatenating the USR for the
 /// encompassing class with this USR fragment.
 void generateUSRForObjCIvar(StringRef Ivar, raw_ostream &OS);
 
-/// \brief Generate a USR fragment for an Objective-C method.
+/// Generate a USR fragment for an Objective-C method.
 void generateUSRForObjCMethod(StringRef Sel, bool IsInstanceMethod,
                               raw_ostream &OS);
 
-/// \brief Generate a USR fragment for an Objective-C property.
+/// Generate a USR fragment for an Objective-C property.
 void generateUSRForObjCProperty(StringRef Prop, bool isClassProp, raw_ostream &OS);
 
-/// \brief Generate a USR fragment for an Objective-C protocol.
+/// Generate a USR fragment for an Objective-C protocol.
 void generateUSRForObjCProtocol(StringRef Prot, raw_ostream &OS,
                                 StringRef ExtSymbolDefinedIn = "");
 
@@ -62,7 +62,7 @@
 /// Generate a USR fragment for an enum constant.
 void generateUSRForEnumConstant(StringRef EnumConstantName, raw_ostream &OS);
 
-/// \brief Generate a USR for a macro, including the USR prefix.
+/// Generate a USR for a macro, including the USR prefix.
 ///
 /// \returns true on error, false on success.
 bool generateUSRForMacro(const MacroDefinitionRecord *MD,
diff --git a/linux-x64/clang/include/clang/Lex/CodeCompletionHandler.h b/linux-x64/clang/include/clang/Lex/CodeCompletionHandler.h
index 91c3b78..87089fd 100644
--- a/linux-x64/clang/include/clang/Lex/CodeCompletionHandler.h
+++ b/linux-x64/clang/include/clang/Lex/CodeCompletionHandler.h
@@ -18,14 +18,14 @@
 
 class IdentifierInfo;
 class MacroInfo;
-  
-/// \brief Callback handler that receives notifications when performing code 
+
+/// Callback handler that receives notifications when performing code
 /// completion within the preprocessor.
 class CodeCompletionHandler {
 public:
   virtual ~CodeCompletionHandler();
-  
-  /// \brief Callback invoked when performing code completion for a preprocessor
+
+  /// Callback invoked when performing code completion for a preprocessor
   /// directive.
   ///
   /// This callback will be invoked when the preprocessor processes a '#' at the
@@ -34,23 +34,23 @@
   /// \param InConditional Whether we're inside a preprocessor conditional
   /// already.
   virtual void CodeCompleteDirective(bool InConditional) { }
-  
-  /// \brief Callback invoked when performing code completion within a block of
+
+  /// Callback invoked when performing code completion within a block of
   /// code that was excluded due to preprocessor conditionals.
   virtual void CodeCompleteInConditionalExclusion() { }
-  
-  /// \brief Callback invoked when performing code completion in a context
+
+  /// Callback invoked when performing code completion in a context
   /// where the name of a macro is expected.
   ///
   /// \param IsDefinition Whether this is the definition of a macro, e.g.,
   /// in a \#define.
   virtual void CodeCompleteMacroName(bool IsDefinition) { }
-  
-  /// \brief Callback invoked when performing code completion in a preprocessor
+
+  /// Callback invoked when performing code completion in a preprocessor
   /// expression, such as the condition of an \#if or \#elif directive.
   virtual void CodeCompletePreprocessorExpression() { }
-  
-  /// \brief Callback invoked when performing code completion inside a 
+
+  /// Callback invoked when performing code completion inside a
   /// function-like macro argument.
   ///
   /// There will be another callback invocation after the macro arguments are
@@ -60,12 +60,12 @@
                                          MacroInfo *MacroInfo,
                                          unsigned ArgumentIndex) { }
 
-  /// \brief Callback invoked when performing code completion in a part of the
-  /// file where we expect natural language, e.g., a comment, string, or 
+  /// Callback invoked when performing code completion in a part of the
+  /// file where we expect natural language, e.g., a comment, string, or
   /// \#error directive.
   virtual void CodeCompleteNaturalLanguage() { }
 };
-  
+
 }
 
 #endif // LLVM_CLANG_LEX_CODECOMPLETIONHANDLER_H
diff --git a/linux-x64/clang/include/clang/Lex/DirectoryLookup.h b/linux-x64/clang/include/clang/Lex/DirectoryLookup.h
index dcd58f4..55065b7 100644
--- a/linux-x64/clang/include/clang/Lex/DirectoryLookup.h
+++ b/linux-x64/clang/include/clang/Lex/DirectoryLookup.h
@@ -24,7 +24,7 @@
 class FileEntry;
 class HeaderSearch;
 class Module;
-  
+
 /// DirectoryLookup - This class represents one entry in the search list that
 /// specifies the search order for directories in \#include directives.  It
 /// represents either a directory, a framework, or a headermap.
@@ -54,14 +54,14 @@
   /// LookupType - This indicates whether this DirectoryLookup object is a
   /// normal directory, a framework, or a headermap.
   unsigned LookupType : 2;
-  
-  /// \brief Whether this is a header map used when building a framework.
+
+  /// Whether this is a header map used when building a framework.
   unsigned IsIndexHeaderMap : 1;
 
-  /// \brief Whether we've performed an exhaustive search for module maps
+  /// Whether we've performed an exhaustive search for module maps
   /// within the subdirectories of this directory.
   unsigned SearchedAllModuleMaps : 1;
-  
+
 public:
   /// DirectoryLookup ctor - Note that this ctor *does not take ownership* of
   /// 'dir'.
@@ -118,11 +118,11 @@
   /// isHeaderMap - Return true if this is a header map, not a normal directory.
   bool isHeaderMap() const { return getLookupType() == LT_HeaderMap; }
 
-  /// \brief Determine whether we have already searched this entire
+  /// Determine whether we have already searched this entire
   /// directory for module maps.
   bool haveSearchedAllModuleMaps() const { return SearchedAllModuleMaps; }
 
-  /// \brief Specify whether we have already searched all of the subdirectories
+  /// Specify whether we have already searched all of the subdirectories
   /// for module maps.
   void setSearchedAllModuleMaps(bool SAMM) {
     SearchedAllModuleMaps = SAMM;
@@ -134,16 +134,16 @@
     return (SrcMgr::CharacteristicKind)DirCharacteristic;
   }
 
-  /// \brief Whether this describes a system header directory.
+  /// Whether this describes a system header directory.
   bool isSystemHeaderDirectory() const {
     return getDirCharacteristic() != SrcMgr::C_User;
   }
 
-  /// \brief Whether this header map is building a framework or not.
-  bool isIndexHeaderMap() const { 
-    return isHeaderMap() && IsIndexHeaderMap; 
+  /// Whether this header map is building a framework or not.
+  bool isIndexHeaderMap() const {
+    return isHeaderMap() && IsIndexHeaderMap;
   }
-  
+
   /// LookupFile - Lookup the specified file in this search path, returning it
   /// if it exists or returning null if not.
   ///
diff --git a/linux-x64/clang/include/clang/Lex/ExternalPreprocessorSource.h b/linux-x64/clang/include/clang/Lex/ExternalPreprocessorSource.h
index adf8e71..d849bbd 100644
--- a/linux-x64/clang/include/clang/Lex/ExternalPreprocessorSource.h
+++ b/linux-x64/clang/include/clang/Lex/ExternalPreprocessorSource.h
@@ -19,30 +19,30 @@
 class IdentifierInfo;
 class Module;
 
-/// \brief Abstract interface for external sources of preprocessor 
+/// Abstract interface for external sources of preprocessor
 /// information.
 ///
-/// This abstract class allows an external sources (such as the \c ASTReader) 
+/// This abstract class allows an external sources (such as the \c ASTReader)
 /// to provide additional preprocessing information.
 class ExternalPreprocessorSource {
 public:
   virtual ~ExternalPreprocessorSource();
-  
-  /// \brief Read the set of macros defined by this external macro source.
+
+  /// Read the set of macros defined by this external macro source.
   virtual void ReadDefinedMacros() = 0;
-  
-  /// \brief Update an out-of-date identifier.
+
+  /// Update an out-of-date identifier.
   virtual void updateOutOfDateIdentifier(IdentifierInfo &II) = 0;
 
-  /// \brief Return the identifier associated with the given ID number.
+  /// Return the identifier associated with the given ID number.
   ///
   /// The ID 0 is associated with the NULL identifier.
   virtual IdentifierInfo *GetIdentifier(unsigned ID) = 0;
 
-  /// \brief Map a module ID to a module.
+  /// Map a module ID to a module.
   virtual Module *getModule(unsigned ModuleID) = 0;
 };
-  
+
 }
 
 #endif
diff --git a/linux-x64/clang/include/clang/Lex/HeaderSearch.h b/linux-x64/clang/include/clang/Lex/HeaderSearch.h
index 4e8d9cb..6bb0f58 100644
--- a/linux-x64/clang/include/clang/Lex/HeaderSearch.h
+++ b/linux-x64/clang/include/clang/Lex/HeaderSearch.h
@@ -46,13 +46,13 @@
 class Preprocessor;
 class TargetInfo;
 
-/// \brief The preprocessor keeps track of this information for each
+/// The preprocessor keeps track of this information for each
 /// file that is \#included.
 struct HeaderFileInfo {
-  /// \brief True if this is a \#import'd or \#pragma once file.
+  /// True if this is a \#import'd or \#pragma once file.
   unsigned isImport : 1;
 
-  /// \brief True if this is a \#pragma once file.
+  /// True if this is a \#pragma once file.
   unsigned isPragmaOnce : 1;
 
   /// DirInfo - Keep track of whether this is a system header, and if so,
@@ -61,22 +61,22 @@
   /// SrcMgr::CharacteristicKind.
   unsigned DirInfo : 3;
 
-  /// \brief Whether this header file info was supplied by an external source,
+  /// Whether this header file info was supplied by an external source,
   /// and has not changed since.
   unsigned External : 1;
 
-  /// \brief Whether this header is part of a module.
+  /// Whether this header is part of a module.
   unsigned isModuleHeader : 1;
 
-  /// \brief Whether this header is part of the module that we are building.
+  /// Whether this header is part of the module that we are building.
   unsigned isCompilingModuleHeader : 1;
 
-  /// \brief Whether this structure is considered to already have been
+  /// Whether this structure is considered to already have been
   /// "resolved", meaning that it was loaded from the external source.
   unsigned Resolved : 1;
-  
-  /// \brief Whether this is a header inside a framework that is currently
-  /// being built. 
+
+  /// Whether this is a header inside a framework that is currently
+  /// being built.
   ///
   /// When a framework is being built, the headers have not yet been placed
   /// into the appropriate framework subdirectories, and therefore are
@@ -84,13 +84,13 @@
   /// those framework headers.
   unsigned IndexHeaderMapHeader : 1;
 
-  /// \brief Whether this file has been looked up as a header.
+  /// Whether this file has been looked up as a header.
   unsigned IsValid : 1;
-  
-  /// \brief The number of times the file has been included already.
+
+  /// The number of times the file has been included already.
   unsigned short NumIncludes = 0;
 
-  /// \brief The ID number of the controlling macro.
+  /// The ID number of the controlling macro.
   ///
   /// This ID number will be non-zero when there is a controlling
   /// macro whose IdentifierInfo may not yet have been loaded from
@@ -107,43 +107,43 @@
   /// external storage.
   const IdentifierInfo *ControllingMacro = nullptr;
 
-  /// \brief If this header came from a framework include, this is the name
+  /// If this header came from a framework include, this is the name
   /// of the framework.
   StringRef Framework;
-  
+
   HeaderFileInfo()
-      : isImport(false), isPragmaOnce(false), DirInfo(SrcMgr::C_User), 
+      : isImport(false), isPragmaOnce(false), DirInfo(SrcMgr::C_User),
         External(false), isModuleHeader(false), isCompilingModuleHeader(false),
         Resolved(false), IndexHeaderMapHeader(false), IsValid(false)  {}
 
-  /// \brief Retrieve the controlling macro for this header file, if
+  /// Retrieve the controlling macro for this header file, if
   /// any.
   const IdentifierInfo *
   getControllingMacro(ExternalPreprocessorSource *External);
 
-  /// \brief Determine whether this is a non-default header file info, e.g.,
+  /// Determine whether this is a non-default header file info, e.g.,
   /// it corresponds to an actual header we've included or tried to include.
   bool isNonDefault() const {
-    return isImport || isPragmaOnce || NumIncludes || ControllingMacro || 
+    return isImport || isPragmaOnce || NumIncludes || ControllingMacro ||
       ControllingMacroID;
   }
 };
 
-/// \brief An external source of header file information, which may supply
+/// An external source of header file information, which may supply
 /// information about header files already included.
 class ExternalHeaderFileInfoSource {
 public:
   virtual ~ExternalHeaderFileInfoSource();
-  
-  /// \brief Retrieve the header file information for the given file entry.
+
+  /// Retrieve the header file information for the given file entry.
   ///
   /// \returns Header file information for the given file entry, with the
-  /// \c External bit set. If the file entry is not known, return a 
+  /// \c External bit set. If the file entry is not known, return a
   /// default-constructed \c HeaderFileInfo.
   virtual HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) = 0;
 };
-  
-/// \brief Encapsulates the information needed to find the file referenced
+
+/// Encapsulates the information needed to find the file referenced
 /// by a \#include or \#include_next, (sub-)framework lookup, etc.
 class HeaderSearch {
   friend class DirectoryLookup;
@@ -159,7 +159,7 @@
     bool IsUserSpecifiedSystemFramework;
   };
 
-  /// \brief Header-search options used to initialize this header search.
+  /// Header-search options used to initialize this header search.
   std::shared_ptr<HeaderSearchOptions> HSOpts;
 
   DiagnosticsEngine &Diags;
@@ -176,7 +176,7 @@
   unsigned SystemDirIdx = 0;
   bool NoCurDirSearch = false;
 
-  /// \brief \#include prefixes for which the 'system header' property is
+  /// \#include prefixes for which the 'system header' property is
   /// overridden.
   ///
   /// For a \#include "x" or \#include \<x> directive, the last string in this
@@ -184,10 +184,10 @@
   /// a system header.
   std::vector<std::pair<std::string, bool>> SystemHeaderPrefixes;
 
-  /// \brief The path to the module cache.
+  /// The path to the module cache.
   std::string ModuleCachePath;
-  
-  /// \brief All of the preprocessor-specific data about files that are
+
+  /// All of the preprocessor-specific data about files that are
   /// included, indexed by the FileEntry's UID.
   mutable std::vector<HeaderFileInfo> FileInfo;
 
@@ -215,7 +215,7 @@
   };
   llvm::StringMap<LookupFileCacheInfo, llvm::BumpPtrAllocator> LookupFileCache;
 
-  /// \brief Collection mapping a framework or subframework
+  /// Collection mapping a framework or subframework
   /// name like "Carbon" to the Carbon.framework directory.
   llvm::StringMap<FrameworkCacheEntry, llvm::BumpPtrAllocator> FrameworkMap;
 
@@ -230,28 +230,28 @@
   /// headermaps.  This vector owns the headermap.
   std::vector<std::pair<const FileEntry *, const HeaderMap *>> HeaderMaps;
 
-  /// \brief The mapping between modules and headers.
+  /// The mapping between modules and headers.
   mutable ModuleMap ModMap;
-  
-  /// \brief Describes whether a given directory has a module map in it.
+
+  /// Describes whether a given directory has a module map in it.
   llvm::DenseMap<const DirectoryEntry *, bool> DirectoryHasModuleMap;
 
-  /// \brief Set of module map files we've already loaded, and a flag indicating
+  /// Set of module map files we've already loaded, and a flag indicating
   /// whether they were valid or not.
   llvm::DenseMap<const FileEntry *, bool> LoadedModuleMaps;
 
-  /// \brief Uniqued set of framework names, which is used to track which 
+  /// Uniqued set of framework names, which is used to track which
   /// headers were included as framework headers.
   llvm::StringSet<llvm::BumpPtrAllocator> FrameworkNames;
-  
-  /// \brief Entity used to resolve the identifier IDs of controlling
+
+  /// Entity used to resolve the identifier IDs of controlling
   /// macros into IdentifierInfo pointers, and keep the identifire up to date,
   /// as needed.
   ExternalPreprocessorSource *ExternalLookup = nullptr;
 
-  /// \brief Entity used to look up stored header file information.
+  /// Entity used to look up stored header file information.
   ExternalHeaderFileInfoSource *ExternalSource = nullptr;
-  
+
   // Various statistics we track for performance analysis.
   unsigned NumIncluded = 0;
   unsigned NumMultiIncludeFileOptzn = 0;
@@ -266,18 +266,20 @@
   HeaderSearch &operator=(const HeaderSearch &) = delete;
   ~HeaderSearch();
 
-  /// \brief Retrieve the header-search options with which this header search
+  /// Retrieve the header-search options with which this header search
   /// was initialized.
   HeaderSearchOptions &getHeaderSearchOpts() const { return *HSOpts; }
-  
+
   FileManager &getFileMgr() const { return FileMgr; }
 
-  /// \brief Interface for setting the file search paths.
+  DiagnosticsEngine &getDiags() const { return Diags; }
+
+  /// Interface for setting the file search paths.
   void SetSearchPaths(const std::vector<DirectoryLookup> &dirs,
                       unsigned angledDirIdx, unsigned systemDirIdx,
                       bool noCurDirSearch) {
     assert(angledDirIdx <= systemDirIdx && systemDirIdx <= dirs.size() &&
-        "Directory indicies are unordered");
+        "Directory indices are unordered");
     SearchDirs = dirs;
     AngledDirIdx = angledDirIdx;
     SystemDirIdx = systemDirIdx;
@@ -285,7 +287,7 @@
     //LookupFileCache.clear();
   }
 
-  /// \brief Add an additional search path.
+  /// Add an additional search path.
   void AddSearchPath(const DirectoryLookup &dir, bool isAngled) {
     unsigned idx = isAngled ? SystemDirIdx : AngledDirIdx;
     SearchDirs.insert(SearchDirs.begin() + idx, dir);
@@ -294,17 +296,17 @@
     SystemDirIdx++;
   }
 
-  /// \brief Set the list of system header prefixes.
+  /// Set the list of system header prefixes.
   void SetSystemHeaderPrefixes(ArrayRef<std::pair<std::string, bool>> P) {
     SystemHeaderPrefixes.assign(P.begin(), P.end());
   }
 
-  /// \brief Checks whether the map exists or not.
+  /// Checks whether the map exists or not.
   bool HasIncludeAliasMap() const { return (bool)IncludeAliases; }
 
-  /// \brief Map the source include name to the dest include name.
+  /// Map the source include name to the dest include name.
   ///
-  /// The Source should include the angle brackets or quotes, the dest 
+  /// The Source should include the angle brackets or quotes, the dest
   /// should not.  This allows for distinction between <> and "" headers.
   void AddIncludeAlias(StringRef Source, StringRef Dest) {
     if (!IncludeAliases)
@@ -326,20 +328,20 @@
     return {};
   }
 
-  /// \brief Set the path to the module cache.
+  /// Set the path to the module cache.
   void setModuleCachePath(StringRef CachePath) {
     ModuleCachePath = CachePath;
   }
-  
-  /// \brief Retrieve the path to the module cache.
+
+  /// Retrieve the path to the module cache.
   StringRef getModuleCachePath() const { return ModuleCachePath; }
 
-  /// \brief Consider modules when including files from this directory.
+  /// Consider modules when including files from this directory.
   void setDirectoryHasModuleMap(const DirectoryEntry* Dir) {
     DirectoryHasModuleMap[Dir] = true;
   }
-  
-  /// \brief Forget everything we know about headers so far.
+
+  /// Forget everything we know about headers so far.
   void ClearFileInfo() {
     FileInfo.clear();
   }
@@ -351,17 +353,17 @@
   ExternalPreprocessorSource *getExternalLookup() const {
     return ExternalLookup;
   }
-  
-  /// \brief Set the external source of header information.
+
+  /// Set the external source of header information.
   void SetExternalSource(ExternalHeaderFileInfoSource *ES) {
     ExternalSource = ES;
   }
-  
-  /// \brief Set the target information for the header search, if not
+
+  /// Set the target information for the header search, if not
   /// already known.
   void setTarget(const TargetInfo &Target);
-  
-  /// \brief Given a "foo" or \<foo> reference, look up the indicated file,
+
+  /// Given a "foo" or \<foo> reference, look up the indicated file,
   /// return null on failure.
   ///
   /// \returns If successful, this returns 'UsedDir', the DirectoryLookup member
@@ -399,7 +401,7 @@
       Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule,
       bool *IsMapped, bool SkipCache = false, bool BuildSystemModule = false);
 
-  /// \brief Look up a subframework for the specified \#include file.
+  /// Look up a subframework for the specified \#include file.
   ///
   /// For example, if \#include'ing <HIToolbox/HIToolbox.h> from
   /// within ".../Carbon.framework/Headers/Carbon.h", check to see if
@@ -410,13 +412,13 @@
       SmallVectorImpl<char> *SearchPath, SmallVectorImpl<char> *RelativePath,
       Module *RequestingModule, ModuleMap::KnownHeader *SuggestedModule);
 
-  /// \brief Look up the specified framework name in our framework cache.
+  /// Look up the specified framework name in our framework cache.
   /// \returns The DirectoryEntry it is in if we know, null otherwise.
   FrameworkCacheEntry &LookupFrameworkCache(StringRef FWName) {
     return FrameworkMap[FWName];
   }
 
-  /// \brief Mark the specified file as a target of a \#include,
+  /// Mark the specified file as a target of a \#include,
   /// \#include_next, or \#import directive.
   ///
   /// \return false if \#including the file will have no effect or true
@@ -425,13 +427,13 @@
                               bool isImport, bool ModulesEnabled,
                               Module *CorrespondingModule);
 
-  /// \brief Return whether the specified file is a normal header,
+  /// Return whether the specified file is a normal header,
   /// a system header, or a C++ friendly system header.
   SrcMgr::CharacteristicKind getFileDirFlavor(const FileEntry *File) {
     return (SrcMgr::CharacteristicKind)getFileInfo(File).DirInfo;
   }
 
-  /// \brief Mark the specified file as a "once only" file, e.g. due to
+  /// Mark the specified file as a "once only" file, e.g. due to
   /// \#pragma once.
   void MarkFileIncludeOnce(const FileEntry *File) {
     HeaderFileInfo &FI = getFileInfo(File);
@@ -439,24 +441,24 @@
     FI.isPragmaOnce = true;
   }
 
-  /// \brief Mark the specified file as a system header, e.g. due to
+  /// Mark the specified file as a system header, e.g. due to
   /// \#pragma GCC system_header.
   void MarkFileSystemHeader(const FileEntry *File) {
     getFileInfo(File).DirInfo = SrcMgr::C_System;
   }
 
-  /// \brief Mark the specified file as part of a module.
+  /// Mark the specified file as part of a module.
   void MarkFileModuleHeader(const FileEntry *File,
                             ModuleMap::ModuleHeaderRole Role,
                             bool IsCompiledModuleHeader);
 
-  /// \brief Increment the count for the number of times the specified
+  /// Increment the count for the number of times the specified
   /// FileEntry has been entered.
   void IncrementIncludeCount(const FileEntry *File) {
     ++getFileInfo(File).NumIncludes;
   }
 
-  /// \brief Mark the specified file as having a controlling macro.
+  /// Mark the specified file as having a controlling macro.
   ///
   /// This is used by the multiple-include optimization to eliminate
   /// no-op \#includes.
@@ -465,12 +467,12 @@
     getFileInfo(File).ControllingMacro = ControllingMacro;
   }
 
-  /// \brief Return true if this is the first time encountering this header.
+  /// Return true if this is the first time encountering this header.
   bool FirstTimeLexingFile(const FileEntry *File) {
     return getFileInfo(File).NumIncludes == 1;
   }
 
-  /// \brief Determine whether this file is intended to be safe from
+  /// Determine whether this file is intended to be safe from
   /// multiple inclusions, e.g., it has \#pragma once or a controlling
   /// macro.
   ///
@@ -481,10 +483,10 @@
   /// FileEntry, uniquing them through the 'HeaderMaps' datastructure.
   const HeaderMap *CreateHeaderMap(const FileEntry *FE);
 
-  /// \brief Get filenames for all registered header maps.
+  /// Get filenames for all registered header maps.
   void getHeaderMapFileNames(SmallVectorImpl<std::string> &Names) const;
 
-  /// \brief Retrieve the name of the cached module file that should be used
+  /// Retrieve the name of the cached module file that should be used
   /// to load the given module.
   ///
   /// \param Module The module whose module file name will be returned.
@@ -493,7 +495,7 @@
   /// or an empty string if this module does not correspond to any module file.
   std::string getCachedModuleFileName(Module *Module);
 
-  /// \brief Retrieve the name of the prebuilt module file that should be used
+  /// Retrieve the name of the prebuilt module file that should be used
   /// to load a module with the given name.
   ///
   /// \param ModuleName The module whose module file name will be returned.
@@ -506,7 +508,7 @@
   std::string getPrebuiltModuleFileName(StringRef ModuleName,
                                         bool FileMapOnly = false);
 
-  /// \brief Retrieve the name of the (to-be-)cached module file that should
+  /// Retrieve the name of the (to-be-)cached module file that should
   /// be used to load a module with the given name.
   ///
   /// \param ModuleName The module whose module file name will be returned.
@@ -519,7 +521,7 @@
   std::string getCachedModuleFileName(StringRef ModuleName,
                                       StringRef ModuleMapPath);
 
-  /// \brief Lookup a module Search for a module with the given name.
+  /// Lookup a module Search for a module with the given name.
   ///
   /// \param ModuleName The name of the module we're looking for.
   ///
@@ -527,17 +529,21 @@
   /// search directories to produce a module definition. If not, this lookup
   /// will only return an already-known module.
   ///
+  /// \param AllowExtraModuleMapSearch Whether we allow to search modulemaps
+  /// in subdirectories.
+  ///
   /// \returns The module with the given name.
-  Module *lookupModule(StringRef ModuleName, bool AllowSearch = true);
+  Module *lookupModule(StringRef ModuleName, bool AllowSearch = true,
+                       bool AllowExtraModuleMapSearch = false);
 
-  /// \brief Try to find a module map file in the given directory, returning
+  /// Try to find a module map file in the given directory, returning
   /// \c nullptr if none is found.
   const FileEntry *lookupModuleMapFile(const DirectoryEntry *Dir,
                                        bool IsFramework);
-  
+
   void IncrementFrameworkLookupCount() { ++NumFrameworkLookups; }
 
-  /// \brief Determine whether there is a module map that may map the header
+  /// Determine whether there is a module map that may map the header
   /// with the given file name to a (sub)module.
   /// Always returns false if modules are disabled.
   ///
@@ -550,15 +556,15 @@
   /// header directories.
   bool hasModuleMap(StringRef Filename, const DirectoryEntry *Root,
                     bool IsSystem);
-  
-  /// \brief Retrieve the module that corresponds to the given file, if any.
+
+  /// Retrieve the module that corresponds to the given file, if any.
   ///
   /// \param File The header that we wish to map to a module.
   /// \param AllowTextual Whether we want to find textual headers too.
   ModuleMap::KnownHeader findModuleForHeader(const FileEntry *File,
                                              bool AllowTextual = false) const;
 
-  /// \brief Read the contents of the given module map file.
+  /// Read the contents of the given module map file.
   ///
   /// \param File The module map file.
   /// \param IsSystem Whether this file is in a system header directory.
@@ -575,16 +581,16 @@
                          FileID ID = FileID(), unsigned *Offset = nullptr,
                          StringRef OriginalModuleMapFile = StringRef());
 
-  /// \brief Collect the set of all known, top-level modules.
+  /// Collect the set of all known, top-level modules.
   ///
   /// \param Modules Will be filled with the set of known, top-level modules.
   void collectAllModules(SmallVectorImpl<Module *> &Modules);
 
-  /// \brief Load all known, top-level system modules.
+  /// Load all known, top-level system modules.
   void loadTopLevelSystemModules();
 
 private:
-  /// \brief Lookup a module with the given module name and search-name.
+  /// Lookup a module with the given module name and search-name.
   ///
   /// \param ModuleName The name of the module we're looking for.
   ///
@@ -593,10 +599,14 @@
   /// but for compatibility with some buggy frameworks, additional attempts
   /// may be made to find the module under a related-but-different search-name.
   ///
+  /// \param AllowExtraModuleMapSearch Whether we allow to search modulemaps
+  /// in subdirectories.
+  ///
   /// \returns The module named ModuleName.
-  Module *lookupModule(StringRef ModuleName, StringRef SearchName);
+  Module *lookupModule(StringRef ModuleName, StringRef SearchName,
+                       bool AllowExtraModuleMapSearch = false);
 
-  /// \brief Retrieve a module with the given name, which may be part of the
+  /// Retrieve a module with the given name, which may be part of the
   /// given framework.
   ///
   /// \param Name The name of the module to retrieve.
@@ -607,15 +617,15 @@
   /// frameworks.
   ///
   /// \returns The module, if found; otherwise, null.
-  Module *loadFrameworkModule(StringRef Name, 
+  Module *loadFrameworkModule(StringRef Name,
                               const DirectoryEntry *Dir,
                               bool IsSystem);
 
-  /// \brief Load all of the module maps within the immediate subdirectories
+  /// Load all of the module maps within the immediate subdirectories
   /// of the given search directory.
   void loadSubdirectoryModuleMaps(DirectoryLookup &SearchDir);
 
-  /// \brief Find and suggest a usable module for the given file.
+  /// Find and suggest a usable module for the given file.
   ///
   /// \return \c true if the file can be used, \c false if we are not permitted to
   ///         find this file due to requirements from \p RequestingModule.
@@ -625,7 +635,7 @@
                                  ModuleMap::KnownHeader *SuggestedModule,
                                  bool IsSystemHeaderDir);
 
-  /// \brief Find and suggest a usable module for the given file, which is part of
+  /// Find and suggest a usable module for the given file, which is part of
   /// the specified framework.
   ///
   /// \return \c true if the file can be used, \c false if we are not permitted to
@@ -634,7 +644,7 @@
       const FileEntry *File, StringRef FrameworkDir, Module *RequestingModule,
       ModuleMap::KnownHeader *SuggestedModule, bool IsSystemFramework);
 
-  /// \brief Look up the file with the specified name and determine its owning
+  /// Look up the file with the specified name and determine its owning
   /// module.
   const FileEntry *
   getFileAndSuggestModule(StringRef FileName, SourceLocation IncludeLoc,
@@ -643,19 +653,19 @@
                           ModuleMap::KnownHeader *SuggestedModule);
 
 public:
-  /// \brief Retrieve the module map.
+  /// Retrieve the module map.
   ModuleMap &getModuleMap() { return ModMap; }
-  
-  /// \brief Retrieve the module map.
+
+  /// Retrieve the module map.
   const ModuleMap &getModuleMap() const { return ModMap; }
-  
+
   unsigned header_file_size() const { return FileInfo.size(); }
 
-  /// \brief Return the HeaderFileInfo structure for the specified FileEntry,
+  /// Return the HeaderFileInfo structure for the specified FileEntry,
   /// in preparation for updating it in some way.
   HeaderFileInfo &getFileInfo(const FileEntry *FE);
 
-  /// \brief Return the HeaderFileInfo structure for the specified FileEntry,
+  /// Return the HeaderFileInfo structure for the specified FileEntry,
   /// if it has ever been filled in.
   /// \param WantExternal Whether the caller wants purely-external header file
   ///        info (where \p External is true).
@@ -691,10 +701,10 @@
 
   search_dir_iterator system_dir_end() const { return SearchDirs.end(); }
 
-  /// \brief Retrieve a uniqued framework name.
+  /// Retrieve a uniqued framework name.
   StringRef getUniqueFrameworkName(StringRef Framework);
 
-  /// \brief Suggest a path by which the specified file could be found, for
+  /// Suggest a path by which the specified file could be found, for
   /// use in diagnostics to suggest a #include.
   ///
   /// \param IsSystem If non-null, filled in to indicate whether the suggested
@@ -702,7 +712,7 @@
   std::string suggestPathToFileForDiagnostics(const FileEntry *File,
                                               bool *IsSystem = nullptr);
 
-  /// \brief Suggest a path by which the specified file could be found, for
+  /// Suggest a path by which the specified file could be found, for
   /// use in diagnostics to suggest a #include.
   ///
   /// \param WorkingDir If non-empty, this will be prepended to search directory
@@ -712,22 +722,22 @@
                                               bool *IsSystem = nullptr);
 
   void PrintStats();
-  
+
   size_t getTotalMemory() const;
 
 private:
-  /// \brief Describes what happened when we tried to load a module map file.
+  /// Describes what happened when we tried to load a module map file.
   enum LoadModuleMapResult {
-    /// \brief The module map file had already been loaded.
+    /// The module map file had already been loaded.
     LMM_AlreadyLoaded,
 
-    /// \brief The module map file was loaded by this invocation.
+    /// The module map file was loaded by this invocation.
     LMM_NewlyLoaded,
 
-    /// \brief There is was directory with the given name.
+    /// There is was directory with the given name.
     LMM_NoDirectory,
 
-    /// \brief There was either no module map file or the module map file was
+    /// There was either no module map file or the module map file was
     /// invalid.
     LMM_InvalidModuleMap
   };
@@ -738,7 +748,7 @@
                                             FileID ID = FileID(),
                                             unsigned *Offset = nullptr);
 
-  /// \brief Try to load the module map file in the given directory.
+  /// Try to load the module map file in the given directory.
   ///
   /// \param DirName The name of the directory where we will look for a module
   /// map file.
@@ -750,7 +760,7 @@
   LoadModuleMapResult loadModuleMapFile(StringRef DirName, bool IsSystem,
                                         bool IsFramework);
 
-  /// \brief Try to load the module map file in the given directory.
+  /// Try to load the module map file in the given directory.
   ///
   /// \param Dir The directory where we will look for a module map file.
   /// \param IsSystem Whether this is a system header directory.
diff --git a/linux-x64/clang/include/clang/Lex/HeaderSearchOptions.h b/linux-x64/clang/include/clang/Lex/HeaderSearchOptions.h
index 937ad98..e5b52b3 100644
--- a/linux-x64/clang/include/clang/Lex/HeaderSearchOptions.h
+++ b/linux-x64/clang/include/clang/Lex/HeaderSearchOptions.h
@@ -14,7 +14,7 @@
 #include "llvm/ADT/CachedHashString.h"
 #include "llvm/ADT/SetVector.h"
 #include "llvm/ADT/StringRef.h"
-#include <cstdint> 
+#include <cstdint>
 #include <string>
 #include <vector>
 #include <map>
@@ -36,7 +36,7 @@
   Angled,
 
   /// Like Angled, but marks header maps used when building frameworks.
-  IndexHeaderMap, 
+  IndexHeaderMap,
 
   /// Like Angled, but marks system directories.
   System,
@@ -70,7 +70,7 @@
     std::string Path;
     frontend::IncludeDirGroup Group;
     unsigned IsFramework : 1;
-    
+
     /// IgnoreSysRoot - This is false if an absolute path should be treated
     /// relative to the sysroot, or true if it should always be the absolute
     /// path.
@@ -108,32 +108,32 @@
   /// etc.).
   std::string ResourceDir;
 
-  /// \brief The directory used for the module cache.
+  /// The directory used for the module cache.
   std::string ModuleCachePath;
 
-  /// \brief The directory used for a user build.
+  /// The directory used for a user build.
   std::string ModuleUserBuildPath;
 
-  /// \brief The mapping of module names to prebuilt module files.
+  /// The mapping of module names to prebuilt module files.
   std::map<std::string, std::string> PrebuiltModuleFiles;
 
-  /// \brief The directories used to load prebuilt module files.
+  /// The directories used to load prebuilt module files.
   std::vector<std::string> PrebuiltModulePaths;
 
   /// The module/pch container format.
   std::string ModuleFormat;
 
-  /// \brief Whether we should disable the use of the hash string within the
+  /// Whether we should disable the use of the hash string within the
   /// module cache.
   ///
   /// Note: Only used for testing!
   unsigned DisableModuleHash : 1;
 
-  /// \brief Implicit module maps.  This option is enabld by default when
+  /// Implicit module maps.  This option is enabld by default when
   /// modules is enabled.
   unsigned ImplicitModuleMaps : 1;
 
-  /// \brief Set the 'home directory' of a module map file to the current
+  /// Set the 'home directory' of a module map file to the current
   /// working directory (or the home directory of the module map file that
   /// contained the 'extern module' directive importing this module map file
   /// if any) rather than the directory containing the module map file.
@@ -142,7 +142,7 @@
   /// file.
   unsigned ModuleMapFileHomeIsCwd : 1;
 
-  /// \brief The interval (in seconds) between pruning operations.
+  /// The interval (in seconds) between pruning operations.
   ///
   /// This operation is expensive, because it requires Clang to walk through
   /// the directory structure of the module cache, stat()'ing and removing
@@ -151,7 +151,7 @@
   /// The default value is large, e.g., the operation runs once a week.
   unsigned ModuleCachePruneInterval = 7 * 24 * 60 * 60;
 
-  /// \brief The time (in seconds) after which an unused module file will be
+  /// The time (in seconds) after which an unused module file will be
   /// considered unused and will, therefore, be pruned.
   ///
   /// When the module cache is pruned, any module file that has not been
@@ -160,17 +160,17 @@
   /// regenerated often.
   unsigned ModuleCachePruneAfter = 31 * 24 * 60 * 60;
 
-  /// \brief The time in seconds when the build session started.
+  /// The time in seconds when the build session started.
   ///
   /// This time is used by other optimizations in header search and module
   /// loading.
   uint64_t BuildSessionTimestamp = 0;
 
-  /// \brief The set of macro names that should be ignored for the purposes
+  /// The set of macro names that should be ignored for the purposes
   /// of computing the module hash.
   llvm::SmallSetVector<llvm::CachedHashString, 16> ModulesIgnoreMacros;
 
-  /// \brief The set of user-provided virtual filesystem overlay files.
+  /// The set of user-provided virtual filesystem overlay files.
   std::vector<std::string> VFSOverlayFiles;
 
   /// Include the compiler builtin includes.
@@ -188,12 +188,12 @@
   /// Whether header search information should be output as for -v.
   unsigned Verbose : 1;
 
-  /// \brief If true, skip verifying input files used by modules if the
+  /// If true, skip verifying input files used by modules if the
   /// module was already verified during this build session (see
   /// \c BuildSessionTimestamp).
   unsigned ModulesValidateOncePerBuildSession : 1;
 
-  /// \brief Whether to validate system input files when a module is loaded.
+  /// Whether to validate system input files when a module is loaded.
   unsigned ModulesValidateSystemHeaders : 1;
 
   /// Whether the module includes debug information (-gmodules).
diff --git a/linux-x64/clang/include/clang/Lex/Lexer.h b/linux-x64/clang/include/clang/Lex/Lexer.h
index d588496..624151e 100644
--- a/linux-x64/clang/include/clang/Lex/Lexer.h
+++ b/linux-x64/clang/include/clang/Lex/Lexer.h
@@ -57,10 +57,10 @@
 /// PreprocessorOptions::PrecompiledPreambleBytes.
 /// The preamble includes the BOM, if any.
 struct PreambleBounds {
-  /// \brief Size of the preamble in bytes.
+  /// Size of the preamble in bytes.
   unsigned Size;
 
-  /// \brief Whether the preamble ends at the start of a new line.
+  /// Whether the preamble ends at the start of a new line.
   ///
   /// Used to inform the lexer as to whether it's starting at the beginning of
   /// a line after skipping the preamble.
@@ -263,7 +263,7 @@
     return getSourceLocation(BufferPtr);
   }
 
-  /// \brief Return the current location in the buffer.
+  /// Return the current location in the buffer.
   const char *getBufferLocation() const { return BufferPtr; }
 
   /// Stringify - Convert the specified string into a C string by i) escaping
@@ -322,29 +322,39 @@
                                      const SourceManager &SM,
                                      const LangOptions &LangOpts);
 
-  /// \brief Relex the token at the specified location.
+  /// Relex the token at the specified location.
   /// \returns true if there was a failure, false on success.
   static bool getRawToken(SourceLocation Loc, Token &Result,
                           const SourceManager &SM,
                           const LangOptions &LangOpts,
                           bool IgnoreWhiteSpace = false);
 
-  /// \brief Given a location any where in a source buffer, find the location
+  /// Given a location any where in a source buffer, find the location
   /// that corresponds to the beginning of the token in which the original
   /// source location lands.
   static SourceLocation GetBeginningOfToken(SourceLocation Loc,
                                             const SourceManager &SM,
                                             const LangOptions &LangOpts);
 
+  /// Get the physical length (including trigraphs and escaped newlines) of the
+  /// first \p Characters characters of the token starting at TokStart.
+  static unsigned getTokenPrefixLength(SourceLocation TokStart,
+                                       unsigned Characters,
+                                       const SourceManager &SM,
+                                       const LangOptions &LangOpts);
+
   /// AdvanceToTokenCharacter - If the current SourceLocation specifies a
   /// location at the start of a token, return a new location that specifies a
   /// character within the token.  This handles trigraphs and escaped newlines.
   static SourceLocation AdvanceToTokenCharacter(SourceLocation TokStart,
-                                                unsigned Character,
+                                                unsigned Characters,
                                                 const SourceManager &SM,
-                                                const LangOptions &LangOpts);
+                                                const LangOptions &LangOpts) {
+    return TokStart.getLocWithOffset(
+        getTokenPrefixLength(TokStart, Characters, SM, LangOpts));
+  }
 
-  /// \brief Computes the source location just past the end of the
+  /// Computes the source location just past the end of the
   /// token at this source location.
   ///
   /// This routine can be used to produce a source location that
@@ -363,7 +373,7 @@
                                             const SourceManager &SM,
                                             const LangOptions &LangOpts);
 
-  /// \brief Given a token range, produce a corresponding CharSourceRange that
+  /// Given a token range, produce a corresponding CharSourceRange that
   /// is not a token range. This allows the source range to be used by
   /// components that don't have access to the lexer and thus can't find the
   /// end of the range for themselves.
@@ -383,7 +393,7 @@
                : Range;
   }
 
-  /// \brief Returns true if the given MacroID location points at the first
+  /// Returns true if the given MacroID location points at the first
   /// token of the macro expansion.
   ///
   /// \param MacroBegin If non-null and function returns true, it is set to
@@ -393,7 +403,7 @@
                                         const LangOptions &LangOpts,
                                         SourceLocation *MacroBegin = nullptr);
 
-  /// \brief Returns true if the given MacroID location points at the last
+  /// Returns true if the given MacroID location points at the last
   /// token of the macro expansion.
   ///
   /// \param MacroEnd If non-null and function returns true, it is set to
@@ -403,7 +413,7 @@
                                       const LangOptions &LangOpts,
                                       SourceLocation *MacroEnd = nullptr);
 
-  /// \brief Accepts a range and returns a character range with file locations.
+  /// Accepts a range and returns a character range with file locations.
   ///
   /// Returns a null range if a part of the range resides inside a macro
   /// expansion or the range does not reside on the same FileID.
@@ -433,13 +443,13 @@
                                            const SourceManager &SM,
                                            const LangOptions &LangOpts);
 
-  /// \brief Returns a string for the source that the range encompasses.
+  /// Returns a string for the source that the range encompasses.
   static StringRef getSourceText(CharSourceRange Range,
                                  const SourceManager &SM,
                                  const LangOptions &LangOpts,
                                  bool *Invalid = nullptr);
 
-  /// \brief Retrieve the name of the immediate macro expansion.
+  /// Retrieve the name of the immediate macro expansion.
   ///
   /// This routine starts from a source location, and finds the name of the macro
   /// responsible for its immediate expansion. It looks through any intervening
@@ -450,7 +460,7 @@
                                          const SourceManager &SM,
                                          const LangOptions &LangOpts);
 
-  /// \brief Retrieve the name of the immediate macro expansion.
+  /// Retrieve the name of the immediate macro expansion.
   ///
   /// This routine starts from a source location, and finds the name of the
   /// macro responsible for its immediate expansion. It looks through any
@@ -470,7 +480,7 @@
   static StringRef getImmediateMacroNameForDiagnostics(
       SourceLocation Loc, const SourceManager &SM, const LangOptions &LangOpts);
 
-  /// \brief Compute the preamble of the given file.
+  /// Compute the preamble of the given file.
   ///
   /// The preamble of a file contains the initial comments, include directives,
   /// and other preprocessor directives that occur before the code in this
@@ -496,7 +506,7 @@
                                        const SourceManager &SM,
                                        const LangOptions &LangOpts);
 
-  /// \brief Checks that the given token is the first token that occurs after
+  /// Checks that the given token is the first token that occurs after
   /// the given location (this excludes comments and whitespace). Returns the
   /// location immediately after the specified token. If the token is not found
   /// or the location is inside a macro, the returned source location will be
@@ -507,10 +517,10 @@
                                          const LangOptions &LangOpts,
                                          bool SkipTrailingWhitespaceAndNewLine);
 
-  /// \brief Returns true if the given character could appear in an identifier.
+  /// Returns true if the given character could appear in an identifier.
   static bool isIdentifierBodyChar(char c, const LangOptions &LangOpts);
 
-  /// \brief Checks whether new line pointed by Str is preceded by escape
+  /// Checks whether new line pointed by Str is preceded by escape
   /// sequence.
   static bool isNewLineEscaped(const char *BufferStart, const char *Str);
 
@@ -716,7 +726,7 @@
   ///         invalid.
   uint32_t tryReadUCN(const char *&CurPtr, const char *SlashLoc, Token *Tok);
 
-  /// \brief Try to consume a UCN as part of an identifier at the current
+  /// Try to consume a UCN as part of an identifier at the current
   /// location.
   /// \param CurPtr Initially points to the range of characters in the source
   ///               buffer containing the '\'. Updated to point past the end of
@@ -730,7 +740,7 @@
   bool tryConsumeIdentifierUCN(const char *&CurPtr, unsigned Size,
                                Token &Result);
 
-  /// \brief Try to consume an identifier character encoded in UTF-8.
+  /// Try to consume an identifier character encoded in UTF-8.
   /// \param CurPtr Points to the start of the (potential) UTF-8 code unit
   ///        sequence. On success, updated to point past the end of it.
   /// \return \c true if a UTF-8 sequence mapping to an acceptable identifier
diff --git a/linux-x64/clang/include/clang/Lex/LiteralSupport.h b/linux-x64/clang/include/clang/Lex/LiteralSupport.h
index cc9223e..3843a5a 100644
--- a/linux-x64/clang/include/clang/Lex/LiteralSupport.h
+++ b/linux-x64/clang/include/clang/Lex/LiteralSupport.h
@@ -50,7 +50,7 @@
 
   unsigned radix;
 
-  bool saw_exponent, saw_period, saw_ud_suffix;
+  bool saw_exponent, saw_period, saw_ud_suffix, saw_fixed_point_suffix;
 
   SmallString<32> UDSuffixBuf;
 
@@ -69,11 +69,16 @@
   bool isFloat128 : 1;      // 1.0q
   uint8_t MicrosoftInteger; // Microsoft suffix extension i8, i16, i32, or i64.
 
+  bool isFract : 1;         // 1.0hr/r/lr/uhr/ur/ulr
+  bool isAccum : 1;         // 1.0hk/k/lk/uhk/uk/ulk
+
+  bool isFixedPointLiteral() const { return saw_fixed_point_suffix; }
+
   bool isIntegerLiteral() const {
-    return !saw_period && !saw_exponent;
+    return !saw_period && !saw_exponent && !isFixedPointLiteral();
   }
   bool isFloatingLiteral() const {
-    return saw_period || saw_exponent;
+    return (saw_period || saw_exponent) && !isFixedPointLiteral();
   }
 
   bool hasUDSuffix() const {
@@ -105,6 +110,12 @@
   /// literal exactly, and false otherwise.
   llvm::APFloat::opStatus GetFloatValue(llvm::APFloat &Result);
 
+  /// GetFixedPointValue - Convert this numeric literal value into a
+  /// scaled integer that represents this value. Returns true if an overflow
+  /// occurred when calculating the integral part of the scaled integer or
+  /// calculating the digit sequence of the exponent.
+  bool GetFixedPointValue(llvm::APInt &StoreVal, unsigned Scale);
+
 private:
 
   void ParseNumberStartingWithZero(SourceLocation TokLoc);
@@ -112,7 +123,7 @@
 
   static bool isDigitSeparator(char C) { return C == '\''; }
 
-  /// \brief Determine whether the sequence of characters [Start, End) contains
+  /// Determine whether the sequence of characters [Start, End) contains
   /// any real digits (not digit separators).
   bool containsDigits(const char *Start, const char *End) {
     return Start != End && (Start + 1 != End || !isDigitSeparator(Start[0]));
@@ -120,7 +131,7 @@
 
   enum CheckSeparatorKind { CSK_BeforeDigits, CSK_AfterDigits };
 
-  /// \brief Ensure that we don't have a digit separator here.
+  /// Ensure that we don't have a digit separator here.
   void checkSeparator(SourceLocation TokLoc, const char *Pos,
                       CheckSeparatorKind IsAfterDigits);
 
@@ -197,7 +208,7 @@
   const LangOptions &Features;
   const TargetInfo &Target;
   DiagnosticsEngine *Diags;
-  
+
   unsigned MaxTokenLength;
   unsigned SizeBound;
   unsigned CharByteWidth;
@@ -219,7 +230,7 @@
       ResultPtr(ResultBuf.data()), hadError(false), Pascal(false) {
     init(StringToks);
   }
-    
+
 
   bool hadError;
   bool Pascal;
diff --git a/linux-x64/clang/include/clang/Lex/MacroArgs.h b/linux-x64/clang/include/clang/Lex/MacroArgs.h
index a202550..853eee2 100644
--- a/linux-x64/clang/include/clang/Lex/MacroArgs.h
+++ b/linux-x64/clang/include/clang/Lex/MacroArgs.h
@@ -27,7 +27,7 @@
 
 /// MacroArgs - An instance of this class captures information about
 /// the formal arguments specified to a function-like macro invocation.
-class MacroArgs final 
+class MacroArgs final
     : private llvm::TrailingObjects<MacroArgs, Token> {
 
   friend TrailingObjects;
@@ -43,7 +43,7 @@
   /// if in strict mode and the C99 varargs macro had only a ... argument, this
   /// is false.
   bool VarargsElided;
-  
+
   /// PreExpArgTokens - Pre-expanded tokens for arguments that need them.  Empty
   /// if not yet computed.  This includes the EOF marker at the end of the
   /// stream.
@@ -115,7 +115,7 @@
   /// Returns true if the macro was defined with a variadic (ellipsis) parameter
   /// AND was invoked with at least one token supplied as a variadic argument.
   ///
-  /// \code 
+  /// \code
   ///   #define F(a)  a
   ///   #define V(a, ...) __VA_OPT__(a)
   ///   F()    <-- returns false on this invocation.
@@ -123,7 +123,7 @@
   ///   V(,)   <-- returns false on this invocation.
   /// \endcode
   ///
- 
+
   bool invokedWithVariadicArgument(const MacroInfo *const MI) const;
 
   /// StringifyArgument - Implement C99 6.10.3.2p2, converting a sequence of
@@ -135,8 +135,8 @@
                                  Preprocessor &PP, bool Charify,
                                  SourceLocation ExpansionLocStart,
                                  SourceLocation ExpansionLocEnd);
-  
-  
+
+
   /// deallocate - This should only be called by the Preprocessor when managing
   /// its freelist.
   MacroArgs *deallocate();
diff --git a/linux-x64/clang/include/clang/Lex/MacroInfo.h b/linux-x64/clang/include/clang/Lex/MacroInfo.h
index 3029294..0cc1cb9 100644
--- a/linux-x64/clang/include/clang/Lex/MacroInfo.h
+++ b/linux-x64/clang/include/clang/Lex/MacroInfo.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::MacroInfo and clang::MacroDirective classes.
+/// Defines the clang::MacroInfo and clang::MacroDirective classes.
 //
 //===----------------------------------------------------------------------===//
 
@@ -34,20 +34,20 @@
 class Preprocessor;
 class SourceManager;
 
-/// \brief Encapsulates the data about a macro definition (e.g. its tokens).
+/// Encapsulates the data about a macro definition (e.g. its tokens).
 ///
 /// There's an instance of this class for every #define.
 class MacroInfo {
   //===--------------------------------------------------------------------===//
   // State set when the macro is defined.
 
-  /// \brief The location the macro is defined.
+  /// The location the macro is defined.
   SourceLocation Location;
 
-  /// \brief The location of the last token in the macro.
+  /// The location of the last token in the macro.
   SourceLocation EndLocation;
 
-  /// \brief The list of arguments for a function-like macro.
+  /// The list of arguments for a function-like macro.
   ///
   /// ParameterList points to the first of NumParameters pointers.
   ///
@@ -58,61 +58,61 @@
   /// \see ParameterList
   unsigned NumParameters = 0;
 
-  /// \brief This is the list of tokens that the macro is defined to.
+  /// This is the list of tokens that the macro is defined to.
   SmallVector<Token, 8> ReplacementTokens;
 
-  /// \brief Length in characters of the macro definition.
+  /// Length in characters of the macro definition.
   mutable unsigned DefinitionLength;
   mutable bool IsDefinitionLengthCached : 1;
 
-  /// \brief True if this macro is function-like, false if it is object-like.
+  /// True if this macro is function-like, false if it is object-like.
   bool IsFunctionLike : 1;
 
-  /// \brief True if this macro is of the form "#define X(...)" or
+  /// True if this macro is of the form "#define X(...)" or
   /// "#define X(Y,Z,...)".
   ///
   /// The __VA_ARGS__ token should be replaced with the contents of "..." in an
   /// invocation.
   bool IsC99Varargs : 1;
 
-  /// \brief True if this macro is of the form "#define X(a...)".
+  /// True if this macro is of the form "#define X(a...)".
   ///
   /// The "a" identifier in the replacement list will be replaced with all
   /// arguments of the macro starting with the specified one.
   bool IsGNUVarargs : 1;
 
-  /// \brief True if this macro requires processing before expansion.
+  /// True if this macro requires processing before expansion.
   ///
   /// This is the case for builtin macros such as __LINE__, so long as they have
   /// not been redefined, but not for regular predefined macros from the
   /// "<built-in>" memory buffer (see Preprocessing::getPredefinesFileID).
   bool IsBuiltinMacro : 1;
 
-  /// \brief Whether this macro contains the sequence ", ## __VA_ARGS__"
+  /// Whether this macro contains the sequence ", ## __VA_ARGS__"
   bool HasCommaPasting : 1;
 
   //===--------------------------------------------------------------------===//
   // State that changes as the macro is used.
 
-  /// \brief True if we have started an expansion of this macro already.
+  /// True if we have started an expansion of this macro already.
   ///
   /// This disables recursive expansion, which would be quite bad for things
   /// like \#define A A.
   bool IsDisabled : 1;
 
-  /// \brief True if this macro is either defined in the main file and has
+  /// True if this macro is either defined in the main file and has
   /// been used, or if it is not defined in the main file.
   ///
   /// This is used to emit -Wunused-macros diagnostics.
   bool IsUsed : 1;
 
-  /// \brief True if this macro can be redefined without emitting a warning.
+  /// True if this macro can be redefined without emitting a warning.
   bool IsAllowRedefinitionsWithoutWarning : 1;
 
-  /// \brief Must warn if the macro is unused at the end of translation unit.
+  /// Must warn if the macro is unused at the end of translation unit.
   bool IsWarnIfUnused : 1;
 
-  /// \brief Whether this macro was used as header guard.
+  /// Whether this macro was used as header guard.
   bool UsedForHeaderGuard : 1;
 
   // Only the Preprocessor gets to create and destroy these.
@@ -120,23 +120,23 @@
   ~MacroInfo() = default;
 
 public:
-  /// \brief Return the location that the macro was defined at.
+  /// Return the location that the macro was defined at.
   SourceLocation getDefinitionLoc() const { return Location; }
 
-  /// \brief Set the location of the last token in the macro.
+  /// Set the location of the last token in the macro.
   void setDefinitionEndLoc(SourceLocation EndLoc) { EndLocation = EndLoc; }
 
-  /// \brief Return the location of the last token in the macro.
+  /// Return the location of the last token in the macro.
   SourceLocation getDefinitionEndLoc() const { return EndLocation; }
 
-  /// \brief Get length in characters of the macro definition.
+  /// Get length in characters of the macro definition.
   unsigned getDefinitionLength(const SourceManager &SM) const {
     if (IsDefinitionLengthCached)
       return DefinitionLength;
     return getDefinitionLengthSlow(SM);
   }
 
-  /// \brief Return true if the specified macro definition is equal to
+  /// Return true if the specified macro definition is equal to
   /// this macro in spelling, arguments, and whitespace.
   ///
   /// \param Syntactically if true, the macro definitions can be identical even
@@ -146,21 +146,21 @@
   bool isIdenticalTo(const MacroInfo &Other, Preprocessor &PP,
                      bool Syntactically) const;
 
-  /// \brief Set or clear the isBuiltinMacro flag.
+  /// Set or clear the isBuiltinMacro flag.
   void setIsBuiltinMacro(bool Val = true) { IsBuiltinMacro = Val; }
 
-  /// \brief Set the value of the IsUsed flag.
+  /// Set the value of the IsUsed flag.
   void setIsUsed(bool Val) { IsUsed = Val; }
 
-  /// \brief Set the value of the IsAllowRedefinitionsWithoutWarning flag.
+  /// Set the value of the IsAllowRedefinitionsWithoutWarning flag.
   void setIsAllowRedefinitionsWithoutWarning(bool Val) {
     IsAllowRedefinitionsWithoutWarning = Val;
   }
 
-  /// \brief Set the value of the IsWarnIfUnused flag.
+  /// Set the value of the IsWarnIfUnused flag.
   void setIsWarnIfUnused(bool val) { IsWarnIfUnused = val; }
 
-  /// \brief Set the specified list of identifiers as the parameter list for
+  /// Set the specified list of identifiers as the parameter list for
   /// this macro.
   void setParameterList(ArrayRef<IdentifierInfo *> List,
                        llvm::BumpPtrAllocator &PPAllocator) {
@@ -174,7 +174,7 @@
     std::copy(List.begin(), List.end(), ParameterList);
   }
 
-  /// Parameters - The list of parameters for a function-like macro.  This can 
+  /// Parameters - The list of parameters for a function-like macro.  This can
   /// be empty, for, e.g. "#define X()".
   using param_iterator = IdentifierInfo *const *;
   bool param_empty() const { return NumParameters == 0; }
@@ -185,7 +185,7 @@
     return ArrayRef<const IdentifierInfo *>(ParameterList, NumParameters);
   }
 
-  /// \brief Return the parameter number of the specified identifier,
+  /// Return the parameter number of the specified identifier,
   /// or -1 if the identifier is not a formal parameter identifier.
   int getParameterNum(const IdentifierInfo *Arg) const {
     for (param_iterator I = param_begin(), E = param_end(); I != E; ++I)
@@ -207,7 +207,7 @@
   bool isGNUVarargs() const { return IsGNUVarargs; }
   bool isVariadic() const { return IsC99Varargs | IsGNUVarargs; }
 
-  /// \brief Return true if this macro requires processing before expansion.
+  /// Return true if this macro requires processing before expansion.
   ///
   /// This is true only for builtin macro, such as \__LINE__, whose values
   /// are not given by fixed textual expansions.  Regular predefined macros
@@ -218,19 +218,19 @@
   bool hasCommaPasting() const { return HasCommaPasting; }
   void setHasCommaPasting() { HasCommaPasting = true; }
 
-  /// \brief Return false if this macro is defined in the main file and has
+  /// Return false if this macro is defined in the main file and has
   /// not yet been used.
   bool isUsed() const { return IsUsed; }
 
-  /// \brief Return true if this macro can be redefined without warning.
+  /// Return true if this macro can be redefined without warning.
   bool isAllowRedefinitionsWithoutWarning() const {
     return IsAllowRedefinitionsWithoutWarning;
   }
 
-  /// \brief Return true if we should emit a warning if the macro is unused.
+  /// Return true if we should emit a warning if the macro is unused.
   bool isWarnIfUnused() const { return IsWarnIfUnused; }
 
-  /// \brief Return the number of tokens that this macro expands to.
+  /// Return the number of tokens that this macro expands to.
   unsigned getNumTokens() const { return ReplacementTokens.size(); }
 
   const Token &getReplacementToken(unsigned Tok) const {
@@ -245,7 +245,7 @@
   bool tokens_empty() const { return ReplacementTokens.empty(); }
   ArrayRef<Token> tokens() const { return ReplacementTokens; }
 
-  /// \brief Add the specified token to the replacement text for the macro.
+  /// Add the specified token to the replacement text for the macro.
   void AddTokenToBody(const Token &Tok) {
     assert(
         !IsDefinitionLengthCached &&
@@ -253,7 +253,7 @@
     ReplacementTokens.push_back(Tok);
   }
 
-  /// \brief Return true if this macro is enabled.
+  /// Return true if this macro is enabled.
   ///
   /// In other words, that we are not currently in an expansion of this macro.
   bool isEnabled() const { return !IsDisabled; }
@@ -268,7 +268,7 @@
     IsDisabled = true;
   }
 
-  /// \brief Determine whether this macro was used for a header guard.
+  /// Determine whether this macro was used for a header guard.
   bool isUsedForHeaderGuard() const { return UsedForHeaderGuard; }
 
   void setUsedForHeaderGuard(bool Val) { UsedForHeaderGuard = Val; }
@@ -281,7 +281,7 @@
   unsigned getDefinitionLengthSlow(const SourceManager &SM) const;
 };
 
-/// \brief Encapsulates changes to the "macros namespace" (the location where
+/// Encapsulates changes to the "macros namespace" (the location where
 /// the macro name became active, the location where it was undefined, etc.).
 ///
 /// MacroDirectives, associated with an identifier, are used to model the macro
@@ -297,20 +297,20 @@
   };
 
 protected:
-  /// \brief Previous macro directive for the same identifier, or nullptr.
+  /// Previous macro directive for the same identifier, or nullptr.
   MacroDirective *Previous = nullptr;
 
   SourceLocation Loc;
 
-  /// \brief MacroDirective kind.
+  /// MacroDirective kind.
   unsigned MDKind : 2;
 
-  /// \brief True if the macro directive was loaded from a PCH file.
+  /// True if the macro directive was loaded from a PCH file.
   unsigned IsFromPCH : 1;
 
   // Used by VisibilityMacroDirective ----------------------------------------//
 
-  /// \brief Whether the macro has public visibility (when described in a
+  /// Whether the macro has public visibility (when described in a
   /// module).
   unsigned IsPublic : 1;
 
@@ -322,16 +322,16 @@
 
   SourceLocation getLocation() const { return Loc; }
 
-  /// \brief Set previous definition of the macro with the same name.
+  /// Set previous definition of the macro with the same name.
   void setPrevious(MacroDirective *Prev) { Previous = Prev; }
 
-  /// \brief Get previous definition of the macro with the same name.
+  /// Get previous definition of the macro with the same name.
   const MacroDirective *getPrevious() const { return Previous; }
 
-  /// \brief Get previous definition of the macro with the same name.
+  /// Get previous definition of the macro with the same name.
   MacroDirective *getPrevious() { return Previous; }
 
-  /// \brief Return true if the macro directive was loaded from a PCH file.
+  /// Return true if the macro directive was loaded from a PCH file.
   bool isFromPCH() const { return IsFromPCH; }
 
   void setIsFromPCH() { IsFromPCH = true; }
@@ -374,7 +374,7 @@
     }
   };
 
-  /// \brief Traverses the macro directives history and returns the next
+  /// Traverses the macro directives history and returns the next
   /// macro definition directive along with info about its undefined location
   /// (if there is one) and if it is public or private.
   DefInfo getDefinition();
@@ -393,7 +393,7 @@
   }
   MacroInfo *getMacroInfo() { return getDefinition().getMacroInfo(); }
 
-  /// \brief Find macro definition active in the specified source location. If
+  /// Find macro definition active in the specified source location. If
   /// this macro was not defined there, return NULL.
   const DefInfo findDirectiveAtLoc(SourceLocation L, SourceManager &SM) const;
 
@@ -402,7 +402,7 @@
   static bool classof(const MacroDirective *) { return true; }
 };
 
-/// \brief A directive for a defined macro or a macro imported from a module.
+/// A directive for a defined macro or a macro imported from a module.
 class DefMacroDirective : public MacroDirective {
   MacroInfo *Info;
 
@@ -414,7 +414,7 @@
   explicit DefMacroDirective(MacroInfo *MI)
       : DefMacroDirective(MI, MI->getDefinitionLoc()) {}
 
-  /// \brief The data for the macro definition.
+  /// The data for the macro definition.
   const MacroInfo *getInfo() const { return Info; }
   MacroInfo *getInfo() { return Info; }
 
@@ -425,7 +425,7 @@
   static bool classof(const DefMacroDirective *) { return true; }
 };
 
-/// \brief A directive for an undefined macro.
+/// A directive for an undefined macro.
 class UndefMacroDirective : public MacroDirective {
 public:
   explicit UndefMacroDirective(SourceLocation UndefLoc)
@@ -440,7 +440,7 @@
   static bool classof(const UndefMacroDirective *) { return true; }
 };
 
-/// \brief A directive for setting the module visibility of a macro.
+/// A directive for setting the module visibility of a macro.
 class VisibilityMacroDirective : public MacroDirective {
 public:
   explicit VisibilityMacroDirective(SourceLocation Loc, bool Public)
@@ -448,7 +448,7 @@
     IsPublic = Public;
   }
 
-  /// \brief Determine whether this macro is part of the public API of its
+  /// Determine whether this macro is part of the public API of its
   /// module.
   bool isPublic() const { return IsPublic; }
 
@@ -478,7 +478,7 @@
   return DefDirective->getPrevious()->getDefinition();
 }
 
-/// \brief Represents a macro directive exported by a module.
+/// Represents a macro directive exported by a module.
 ///
 /// There's an instance of this class for every macro #define or #undef that is
 /// the final directive for a macro name within a module. These entities also
@@ -557,7 +557,7 @@
   unsigned getNumOverridingMacros() const { return NumOverriddenBy; }
 };
 
-/// \brief A description of the current definition of a macro.
+/// A description of the current definition of a macro.
 ///
 /// The definition of a macro comprises a set of (at least one) defining
 /// entities, which are either local MacroDirectives or imported ModuleMacros.
@@ -571,12 +571,12 @@
                   bool IsAmbiguous)
       : LatestLocalAndAmbiguous(MD, IsAmbiguous), ModuleMacros(MMs) {}
 
-  /// \brief Determine whether there is a definition of this macro.
+  /// Determine whether there is a definition of this macro.
   explicit operator bool() const {
     return getLocalDirective() || !ModuleMacros.empty();
   }
 
-  /// \brief Get the MacroInfo that should be used for this definition.
+  /// Get the MacroInfo that should be used for this definition.
   MacroInfo *getMacroInfo() const {
     if (!ModuleMacros.empty())
       return ModuleMacros.back()->getMacroInfo();
@@ -585,16 +585,16 @@
     return nullptr;
   }
 
-  /// \brief \c true if the definition is ambiguous, \c false otherwise.
+  /// \c true if the definition is ambiguous, \c false otherwise.
   bool isAmbiguous() const { return LatestLocalAndAmbiguous.getInt(); }
 
-  /// \brief Get the latest non-imported, non-\#undef'd macro definition
+  /// Get the latest non-imported, non-\#undef'd macro definition
   /// for this macro.
   DefMacroDirective *getLocalDirective() const {
     return LatestLocalAndAmbiguous.getPointer();
   }
 
-  /// \brief Get the active module macros for this macro.
+  /// Get the active module macros for this macro.
   ArrayRef<ModuleMacro *> getModuleMacros() const { return ModuleMacros; }
 
   template <typename Fn> void forAllDefinitions(Fn F) const {
diff --git a/linux-x64/clang/include/clang/Lex/ModuleLoader.h b/linux-x64/clang/include/clang/Lex/ModuleLoader.h
index 30ea583..05396dd 100644
--- a/linux-x64/clang/include/clang/Lex/ModuleLoader.h
+++ b/linux-x64/clang/include/clang/Lex/ModuleLoader.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-//  This file defines the ModuleLoader interface, which is responsible for 
+//  This file defines the ModuleLoader interface, which is responsible for
 //  loading named modules.
 //
 //===----------------------------------------------------------------------===//
@@ -28,11 +28,11 @@
 class GlobalModuleIndex;
 class IdentifierInfo;
 
-/// \brief A sequence of identifier/location pairs used to describe a particular
+/// A sequence of identifier/location pairs used to describe a particular
 /// module or submodule, e.g., std.vector.
 using ModuleIdPath = ArrayRef<std::pair<IdentifierInfo *, SourceLocation>>;
 
-/// \brief Describes the result of attempting to load a module.
+/// Describes the result of attempting to load a module.
 class ModuleLoadResult {
 public:
   enum LoadResultKind {
@@ -55,18 +55,18 @@
 
   operator Module *() const { return Storage.getPointer(); }
 
-  /// \brief Determines whether the module, which failed to load, was
+  /// Determines whether the module, which failed to load, was
   /// actually a submodule that we expected to see (based on implying the
   /// submodule from header structure), but didn't materialize in the actual
   /// module.
   bool isMissingExpected() const { return Storage.getInt() == MissingExpected; }
 
-  /// \brief Determines whether the module failed to load due to a configuration
+  /// Determines whether the module failed to load due to a configuration
   /// mismatch with an explicitly-named .pcm file from the command line.
   bool isConfigMismatch() const { return Storage.getInt() == ConfigMismatch; }
 };
 
-/// \brief Abstract interface for a module loader.
+/// Abstract interface for a module loader.
 ///
 /// This abstract interface describes a module loader, which is responsible
 /// for resolving a module name (e.g., "std") to an actual module file, and
@@ -80,27 +80,27 @@
       : BuildingModule(BuildingModule) {}
 
   virtual ~ModuleLoader();
-  
-  /// \brief Returns true if this instance is building a module.
+
+  /// Returns true if this instance is building a module.
   bool buildingModule() const {
     return BuildingModule;
   }
 
-  /// \brief Flag indicating whether this instance is building a module.
+  /// Flag indicating whether this instance is building a module.
   void setBuildingModule(bool BuildingModuleFlag) {
     BuildingModule = BuildingModuleFlag;
   }
- 
-  /// \brief Attempt to load the given module.
+
+  /// Attempt to load the given module.
   ///
-  /// This routine attempts to load the module described by the given 
+  /// This routine attempts to load the module described by the given
   /// parameters.
   ///
   /// \param ImportLoc The location of the 'import' keyword.
   ///
   /// \param Path The identifiers (and their locations) of the module
   /// "path", e.g., "std.vector" would be split into "std" and "vector".
-  /// 
+  ///
   /// \param Visibility The visibility provided for the names in the loaded
   /// module.
   ///
@@ -108,7 +108,7 @@
   /// implicitly, due to the presence of an inclusion directive. Otherwise,
   /// it is being loaded due to an import declaration.
   ///
-  /// \returns If successful, returns the loaded module. Otherwise, returns 
+  /// \returns If successful, returns the loaded module. Otherwise, returns
   /// NULL to indicate that the module could not be loaded.
   virtual ModuleLoadResult loadModule(SourceLocation ImportLoc,
                                       ModuleIdPath Path,
@@ -125,12 +125,12 @@
   virtual void loadModuleFromSource(SourceLocation Loc, StringRef ModuleName,
                                     StringRef Source) = 0;
 
-  /// \brief Make the given module visible.
+  /// Make the given module visible.
   virtual void makeModuleVisible(Module *Mod,
                                  Module::NameVisibilityKind Visibility,
                                  SourceLocation ImportLoc) = 0;
 
-  /// \brief Load, create, or return global module.
+  /// Load, create, or return global module.
   /// This function returns an existing global module index, if one
   /// had already been loaded or created, or loads one if it
   /// exists, or creates one if it doesn't exist.
@@ -177,7 +177,7 @@
     return false;
   }
 };
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_LEX_MODULELOADER_H
diff --git a/linux-x64/clang/include/clang/Lex/ModuleMap.h b/linux-x64/clang/include/clang/Lex/ModuleMap.h
index b4ca320..aa51989 100644
--- a/linux-x64/clang/include/clang/Lex/ModuleMap.h
+++ b/linux-x64/clang/include/clang/Lex/ModuleMap.h
@@ -21,6 +21,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/PointerIntPair.h"
+#include "llvm/ADT/StringSet.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringMap.h"
@@ -41,13 +42,13 @@
 class HeaderSearch;
 class SourceManager;
 
-/// \brief A mechanism to observe the actions of the module map parser as it
+/// A mechanism to observe the actions of the module map parser as it
 /// reads module map files.
 class ModuleMapCallbacks {
 public:
   virtual ~ModuleMapCallbacks() = default;
 
-  /// \brief Called when a module map file has been read.
+  /// Called when a module map file has been read.
   ///
   /// \param FileStart A SourceLocation referring to the start of the file's
   /// contents.
@@ -56,19 +57,19 @@
   virtual void moduleMapFileRead(SourceLocation FileStart,
                                  const FileEntry &File, bool IsSystem) {}
 
-  /// \brief Called when a header is added during module map parsing.
+  /// Called when a header is added during module map parsing.
   ///
   /// \param Filename The header file itself.
   virtual void moduleMapAddHeader(StringRef Filename) {}
 
-  /// \brief Called when an umbrella header is added during module map parsing.
+  /// Called when an umbrella header is added during module map parsing.
   ///
   /// \param FileMgr FileManager instance
   /// \param Header The umbrella header to collect.
   virtual void moduleMapAddUmbrellaHeader(FileManager *FileMgr,
                                           const FileEntry *Header) {}
 };
-  
+
 class ModuleMap {
   SourceManager &SourceMgr;
   DiagnosticsEngine &Diags;
@@ -77,12 +78,12 @@
   HeaderSearch &HeaderInfo;
 
   llvm::SmallVector<std::unique_ptr<ModuleMapCallbacks>, 1> Callbacks;
-  
-  /// \brief The directory used for Clang-supplied, builtin include headers,
+
+  /// The directory used for Clang-supplied, builtin include headers,
   /// such as "stdint.h".
   const DirectoryEntry *BuiltinIncludeDir = nullptr;
-  
-  /// \brief Language options used to parse the module map itself.
+
+  /// Language options used to parse the module map itself.
   ///
   /// These are always simple C language options.
   LangOptions MMapLangOpts;
@@ -95,25 +96,37 @@
   /// transferred if/when we create an enclosing module.
   std::unique_ptr<Module> PendingGlobalModule;
 
-  /// \brief The top-level modules that are known.
+  /// The top-level modules that are known.
   llvm::StringMap<Module *> Modules;
 
   /// Shadow modules created while building this module map.
   llvm::SmallVector<Module*, 2> ShadowModules;
 
-  /// \brief The number of modules we have created in total.
+  /// The number of modules we have created in total.
   unsigned NumCreatedModules = 0;
 
+  /// In case a module has a export_as entry, it might have a pending link
+  /// name to be determined if that module is imported.
+  llvm::StringMap<llvm::StringSet<>> PendingLinkAsModule;
+
 public:
-  /// \brief Flags describing the role of a module header.
+  /// Use PendingLinkAsModule information to mark top level link names that
+  /// are going to be replaced by export_as aliases.
+  void resolveLinkAsDependencies(Module *Mod);
+
+  /// Make module to use export_as as the link dependency name if enough
+  /// information is available or add it to a pending list otherwise.
+  void addLinkAsDependency(Module *Mod);
+
+  /// Flags describing the role of a module header.
   enum ModuleHeaderRole {
-    /// \brief This header is normally included in the module.
+    /// This header is normally included in the module.
     NormalHeader  = 0x0,
 
-    /// \brief This header is included but private.
+    /// This header is included but private.
     PrivateHeader = 0x1,
 
-    /// \brief This header is part of the module (for layering purposes) but
+    /// This header is part of the module (for layering purposes) but
     /// should be textually included.
     TextualHeader = 0x2,
 
@@ -131,7 +144,7 @@
   /// Convert a header role to a kind.
   static Module::HeaderKind headerRoleToKind(ModuleHeaderRole Role);
 
-  /// \brief A header that is known to reside within a given module,
+  /// A header that is known to reside within a given module,
   /// whether it was included or excluded.
   class KnownHeader {
     llvm::PointerIntPair<Module *, 2, ModuleHeaderRole> Storage;
@@ -147,24 +160,24 @@
       return A.Storage != B.Storage;
     }
 
-    /// \brief Retrieve the module the header is stored in.
+    /// Retrieve the module the header is stored in.
     Module *getModule() const { return Storage.getPointer(); }
 
-    /// \brief The role of this header within the module.
+    /// The role of this header within the module.
     ModuleHeaderRole getRole() const { return Storage.getInt(); }
 
-    /// \brief Whether this header is available in the module.
+    /// Whether this header is available in the module.
     bool isAvailable() const {
       return getModule()->isAvailable();
     }
 
-    /// \brief Whether this header is accessible from the specified module.
+    /// Whether this header is accessible from the specified module.
     bool isAccessibleFrom(Module *M) const {
       return !(getRole() & PrivateHeader) ||
              (M && M->getTopLevelModule() == getModule()->getTopLevelModule());
     }
 
-    // \brief Whether this known header is valid (i.e., it has an
+    // Whether this known header is valid (i.e., it has an
     // associated module).
     explicit operator bool() const {
       return Storage.getPointer() != nullptr;
@@ -179,7 +192,7 @@
   using HeadersMap =
       llvm::DenseMap<const FileEntry *, SmallVector<KnownHeader, 1>>;
 
-  /// \brief Mapping from each header to the module that owns the contents of
+  /// Mapping from each header to the module that owns the contents of
   /// that header.
   HeadersMap Headers;
 
@@ -190,7 +203,7 @@
   mutable llvm::DenseMap<time_t, llvm::TinyPtrVector<Module*>>
               LazyHeadersByModTime;
 
-  /// \brief Mapping from directories with umbrella headers to the module
+  /// Mapping from directories with umbrella headers to the module
   /// that is generated from the umbrella header.
   ///
   /// This mapping is used to map headers that haven't explicitly been named
@@ -198,8 +211,8 @@
   /// header.
   llvm::DenseMap<const DirectoryEntry *, Module *> UmbrellaDirs;
 
-  /// \brief A generation counter that is used to test whether modules of the
-  /// same name may shadow or are illegal redefintions.
+  /// A generation counter that is used to test whether modules of the
+  /// same name may shadow or are illegal redefinitions.
   ///
   /// Modules from earlier scopes may shadow modules from later ones.
   /// Modules from the same scope may not have the same name.
@@ -207,18 +220,18 @@
 
   llvm::DenseMap<Module *, unsigned> ModuleScopeIDs;
 
-  /// \brief The set of attributes that can be attached to a module.
+  /// The set of attributes that can be attached to a module.
   struct Attributes {
-    /// \brief Whether this is a system module.
+    /// Whether this is a system module.
     unsigned IsSystem : 1;
 
-    /// \brief Whether this is an extern "C" module.
+    /// Whether this is an extern "C" module.
     unsigned IsExternC : 1;
 
-    /// \brief Whether this is an exhaustive set of configuration macros.
+    /// Whether this is an exhaustive set of configuration macros.
     unsigned IsExhaustive : 1;
 
-    /// \brief Whether files in this module can only include non-modular headers
+    /// Whether files in this module can only include non-modular headers
     /// and headers from used modules.
     unsigned NoUndeclaredIncludes : 1;
 
@@ -227,26 +240,26 @@
           NoUndeclaredIncludes(false) {}
   };
 
-  /// \brief A directory for which framework modules can be inferred.
+  /// A directory for which framework modules can be inferred.
   struct InferredDirectory {
-    /// \brief Whether to infer modules from this directory.
+    /// Whether to infer modules from this directory.
     unsigned InferModules : 1;
 
-    /// \brief The attributes to use for inferred modules.
+    /// The attributes to use for inferred modules.
     Attributes Attrs;
 
-    /// \brief If \c InferModules is non-zero, the module map file that allowed
+    /// If \c InferModules is non-zero, the module map file that allowed
     /// inferred modules.  Otherwise, nullptr.
     const FileEntry *ModuleMapFile;
 
-    /// \brief The names of modules that cannot be inferred within this
+    /// The names of modules that cannot be inferred within this
     /// directory.
     SmallVector<std::string, 2> ExcludedModules;
 
     InferredDirectory() : InferModules(false) {}
   };
 
-  /// \brief A mapping from directories to information about inferring
+  /// A mapping from directories to information about inferring
   /// framework modules from within those directories.
   llvm::DenseMap<const DirectoryEntry *, InferredDirectory> InferredDirectories;
 
@@ -256,11 +269,11 @@
 
   llvm::DenseMap<const Module *, AdditionalModMapsSet> AdditionalModMaps;
 
-  /// \brief Describes whether we haved parsed a particular file as a module
+  /// Describes whether we haved parsed a particular file as a module
   /// map.
   llvm::DenseMap<const FileEntry *, bool> ParsedModuleMap;
 
-  /// \brief Resolve the given export declaration into an actual export
+  /// Resolve the given export declaration into an actual export
   /// declaration.
   ///
   /// \param Mod The module in which we're resolving the export declaration.
@@ -272,11 +285,11 @@
   ///
   /// \returns The resolved export declaration, which will have a NULL pointer
   /// if the export could not be resolved.
-  Module::ExportDecl 
+  Module::ExportDecl
   resolveExport(Module *Mod, const Module::UnresolvedExportDecl &Unresolved,
                 bool Complain) const;
 
-  /// \brief Resolve the given module id to an actual module.
+  /// Resolve the given module id to an actual module.
   ///
   /// \param Id The module-id to resolve.
   ///
@@ -290,8 +303,15 @@
   Module *resolveModuleId(const ModuleId &Id, Module *Mod, bool Complain) const;
 
   /// Add an unresolved header to a module.
+  ///
+  /// \param Mod The module in which we're adding the unresolved header
+  ///        directive.
+  /// \param Header The unresolved header directive.
+  /// \param NeedsFramework If Mod is not a framework but a missing header would
+  ///        be found in case Mod was, set it to true. False otherwise.
   void addUnresolvedHeader(Module *Mod,
-                           Module::UnresolvedHeaderDirective Header);
+                           Module::UnresolvedHeaderDirective Header,
+                           bool &NeedsFramework);
 
   /// Look up the given header directive to find an actual header file.
   ///
@@ -299,14 +319,22 @@
   /// \param Header The header directive to resolve.
   /// \param RelativePathName Filled in with the relative path name from the
   ///        module to the resolved header.
+  /// \param NeedsFramework If M is not a framework but a missing header would
+  ///        be found in case M was, set it to true. False otherwise.
   /// \return The resolved file, if any.
   const FileEntry *findHeader(Module *M,
                               const Module::UnresolvedHeaderDirective &Header,
-                              SmallVectorImpl<char> &RelativePathName);
+                              SmallVectorImpl<char> &RelativePathName,
+                              bool &NeedsFramework);
 
   /// Resolve the given header directive.
-  void resolveHeader(Module *M,
-                     const Module::UnresolvedHeaderDirective &Header);
+  ///
+  /// \param M The module in which we're resolving the header directive.
+  /// \param Header The header directive to resolve.
+  /// \param NeedsFramework If M is not a framework but a missing header would
+  ///        be found in case M was, set it to true. False otherwise.
+  void resolveHeader(Module *M, const Module::UnresolvedHeaderDirective &Header,
+                     bool &NeedsFramework);
 
   /// Attempt to resolve the specified header directive as naming a builtin
   /// header.
@@ -314,14 +342,14 @@
   bool resolveAsBuiltinHeader(Module *M,
                               const Module::UnresolvedHeaderDirective &Header);
 
-  /// \brief Looks up the modules that \p File corresponds to.
+  /// Looks up the modules that \p File corresponds to.
   ///
   /// If \p File represents a builtin header within Clang's builtin include
   /// directory, this also loads all of the module maps to see if it will get
   /// associated with a specific module (e.g. in /usr/include).
   HeadersMap::iterator findKnownHeader(const FileEntry *File);
 
-  /// \brief Searches for a module whose umbrella directory contains \p File.
+  /// Searches for a module whose umbrella directory contains \p File.
   ///
   /// \param File The header to search for.
   ///
@@ -330,11 +358,11 @@
   KnownHeader findHeaderInUmbrellaDirs(const FileEntry *File,
                     SmallVectorImpl<const DirectoryEntry *> &IntermediateDirs);
 
-  /// \brief Given that \p File is not in the Headers map, look it up within
+  /// Given that \p File is not in the Headers map, look it up within
   /// umbrella directories and find or create a module for it.
   KnownHeader findOrCreateModuleForHeaderInUmbrellaDir(const FileEntry *File);
 
-  /// \brief A convenience method to determine if \p File is (possibly nested)
+  /// A convenience method to determine if \p File is (possibly nested)
   /// in an umbrella directory.
   bool isHeaderInUmbrellaDirs(const FileEntry *File) {
     SmallVector<const DirectoryEntry *, 2> IntermediateDirs;
@@ -345,7 +373,7 @@
                                Attributes Attrs, Module *Parent);
 
 public:
-  /// \brief Construct a new module map.
+  /// Construct a new module map.
   ///
   /// \param SourceMgr The source manager used to find module files and headers.
   /// This source manager should be shared with the header-search mechanism,
@@ -360,32 +388,32 @@
             const LangOptions &LangOpts, const TargetInfo *Target,
             HeaderSearch &HeaderInfo);
 
-  /// \brief Destroy the module map.
+  /// Destroy the module map.
   ~ModuleMap();
 
-  /// \brief Set the target information.
+  /// Set the target information.
   void setTarget(const TargetInfo &Target);
 
-  /// \brief Set the directory that contains Clang-supplied include
+  /// Set the directory that contains Clang-supplied include
   /// files, such as our stdarg.h or tgmath.h.
   void setBuiltinIncludeDir(const DirectoryEntry *Dir) {
     BuiltinIncludeDir = Dir;
   }
 
-  /// \brief Get the directory that contains Clang-supplied include files.
+  /// Get the directory that contains Clang-supplied include files.
   const DirectoryEntry *getBuiltinDir() const {
     return BuiltinIncludeDir;
   }
 
-  /// \brief Is this a compiler builtin header?
+  /// Is this a compiler builtin header?
   static bool isBuiltinHeader(StringRef FileName);
 
-  /// \brief Add a module map callback.
+  /// Add a module map callback.
   void addModuleMapCallbacks(std::unique_ptr<ModuleMapCallbacks> Callback) {
     Callbacks.push_back(std::move(Callback));
   }
 
-  /// \brief Retrieve the module that owns the given header file, if any.
+  /// Retrieve the module that owns the given header file, if any.
   ///
   /// \param File The header file that is likely to be included.
   ///
@@ -399,7 +427,7 @@
   KnownHeader findModuleForHeader(const FileEntry *File,
                                   bool AllowTextual = false);
 
-  /// \brief Retrieve all the modules that contain the given header file. This
+  /// Retrieve all the modules that contain the given header file. This
   /// may not include umbrella modules, nor information from external sources,
   /// if they have not yet been inferred / loaded.
   ///
@@ -416,7 +444,7 @@
   /// Resolve all lazy header directives for the specified module.
   void resolveHeaderDirectives(Module *Mod) const;
 
-  /// \brief Reports errors if a module must not include a specific file.
+  /// Reports errors if a module must not include a specific file.
   ///
   /// \param RequestingModule The module including a file.
   ///
@@ -435,23 +463,23 @@
                                SourceLocation FilenameLoc, StringRef Filename,
                                const FileEntry *File);
 
-  /// \brief Determine whether the given header is part of a module
+  /// Determine whether the given header is part of a module
   /// marked 'unavailable'.
   bool isHeaderInUnavailableModule(const FileEntry *Header) const;
 
-  /// \brief Determine whether the given header is unavailable as part
+  /// Determine whether the given header is unavailable as part
   /// of the specified module.
   bool isHeaderUnavailableInModule(const FileEntry *Header,
                                    const Module *RequestingModule) const;
 
-  /// \brief Retrieve a module with the given name.
+  /// Retrieve a module with the given name.
   ///
   /// \param Name The name of the module to look up.
   ///
   /// \returns The named module, if known; otherwise, returns null.
   Module *findModule(StringRef Name) const;
 
-  /// \brief Retrieve a module with the given name using lexical name lookup,
+  /// Retrieve a module with the given name using lexical name lookup,
   /// starting at the given context.
   ///
   /// \param Name The name of the module to look up.
@@ -462,18 +490,18 @@
   /// \returns The named module, if known; otherwise, returns null.
   Module *lookupModuleUnqualified(StringRef Name, Module *Context) const;
 
-  /// \brief Retrieve a module with the given name within the given context,
+  /// Retrieve a module with the given name within the given context,
   /// using direct (qualified) name lookup.
   ///
   /// \param Name The name of the module to look up.
-  /// 
+  ///
   /// \param Context The module for which we will look for a submodule. If
   /// null, we will look for a top-level module.
   ///
   /// \returns The named submodule, if known; otherwose, returns null.
   Module *lookupModuleQualified(StringRef Name, Module *Context) const;
-  
-  /// \brief Find a new module or submodule, or create it if it does not already
+
+  /// Find a new module or submodule, or create it if it does not already
   /// exist.
   ///
   /// \param Name The name of the module to find or create.
@@ -491,7 +519,7 @@
                                                bool IsFramework,
                                                bool IsExplicit);
 
-  /// \brief Create a 'global module' for a C++ Modules TS module interface
+  /// Create a 'global module' for a C++ Modules TS module interface
   /// unit.
   ///
   /// We model the global module as a submodule of the module interface unit.
@@ -499,7 +527,7 @@
   /// later, because we don't know what it will be called.
   Module *createGlobalModuleForInterfaceUnit(SourceLocation Loc);
 
-  /// \brief Create a new module for a C++ Modules TS module interface unit.
+  /// Create a new module for a C++ Modules TS module interface unit.
   /// The module must not already exist, and will be configured for the current
   /// compilation.
   ///
@@ -509,17 +537,17 @@
   Module *createModuleForInterfaceUnit(SourceLocation Loc, StringRef Name,
                                        Module *GlobalModule);
 
-  /// \brief Infer the contents of a framework module map from the given
+  /// Infer the contents of a framework module map from the given
   /// framework directory.
   Module *inferFrameworkModule(const DirectoryEntry *FrameworkDir,
                                bool IsSystem, Module *Parent);
 
-  /// \brief Create a new top-level module that is shadowed by
+  /// Create a new top-level module that is shadowed by
   /// \p ShadowingModule.
   Module *createShadowedModule(StringRef Name, bool IsFramework,
                                Module *ShadowingModule);
 
-  /// \brief Creates a new declaration scope for module names, allowing
+  /// Creates a new declaration scope for module names, allowing
   /// previously defined modules to shadow definitions from the new scope.
   ///
   /// \note Module names from earlier scopes will shadow names from the new
@@ -532,7 +560,7 @@
     return ModuleScopeIDs[ExistingModule] < CurrentModuleScopeID;
   }
 
-  /// \brief Retrieve the module map file containing the definition of the given
+  /// Retrieve the module map file containing the definition of the given
   /// module.
   ///
   /// \param Module The module whose module map file will be returned, if known.
@@ -541,7 +569,7 @@
   /// module, or nullptr if the module definition was inferred.
   const FileEntry *getContainingModuleMapFile(const Module *Module) const;
 
-  /// \brief Get the module map file that (along with the module name) uniquely
+  /// Get the module map file that (along with the module name) uniquely
   /// identifies this module.
   ///
   /// The particular module that \c Name refers to may depend on how the module
@@ -554,7 +582,7 @@
 
   void setInferredModuleAllowedBy(Module *M, const FileEntry *ModuleMap);
 
-  /// \brief Get any module map files other than getModuleMapFileForUniquing(M)
+  /// Get any module map files other than getModuleMapFileForUniquing(M)
   /// that define submodules of a top-level module \p M. This is cheaper than
   /// getting the module map file for each submodule individually, since the
   /// expected number of results is very small.
@@ -569,7 +597,7 @@
     AdditionalModMaps[M].insert(ModuleMap);
   }
 
-  /// \brief Resolve all of the unresolved exports in the given module.
+  /// Resolve all of the unresolved exports in the given module.
   ///
   /// \param Mod The module whose exports should be resolved.
   ///
@@ -579,7 +607,7 @@
   /// false otherwise.
   bool resolveExports(Module *Mod, bool Complain);
 
-  /// \brief Resolve all of the unresolved uses in the given module.
+  /// Resolve all of the unresolved uses in the given module.
   ///
   /// \param Mod The module whose uses should be resolved.
   ///
@@ -589,7 +617,7 @@
   /// false otherwise.
   bool resolveUses(Module *Mod, bool Complain);
 
-  /// \brief Resolve all of the unresolved conflicts in the given module.
+  /// Resolve all of the unresolved conflicts in the given module.
   ///
   /// \param Mod The module whose conflicts should be resolved.
   ///
@@ -599,25 +627,25 @@
   /// false otherwise.
   bool resolveConflicts(Module *Mod, bool Complain);
 
-  /// \brief Sets the umbrella header of the given module to the given
+  /// Sets the umbrella header of the given module to the given
   /// header.
   void setUmbrellaHeader(Module *Mod, const FileEntry *UmbrellaHeader,
                          Twine NameAsWritten);
 
-  /// \brief Sets the umbrella directory of the given module to the given
+  /// Sets the umbrella directory of the given module to the given
   /// directory.
   void setUmbrellaDir(Module *Mod, const DirectoryEntry *UmbrellaDir,
                       Twine NameAsWritten);
 
-  /// \brief Adds this header to the given module.
+  /// Adds this header to the given module.
   /// \param Role The role of the header wrt the module.
   void addHeader(Module *Mod, Module::Header Header,
                  ModuleHeaderRole Role, bool Imported = false);
 
-  /// \brief Marks this header as being excluded from the given module.
+  /// Marks this header as being excluded from the given module.
   void excludeHeader(Module *Mod, Module::Header Header);
 
-  /// \brief Parse the given module map file, and record any modules we 
+  /// Parse the given module map file, and record any modules we
   /// encounter.
   ///
   /// \param File The file to be parsed.
@@ -642,15 +670,15 @@
                           FileID ID = FileID(), unsigned *Offset = nullptr,
                           SourceLocation ExternModuleLoc = SourceLocation());
 
-  /// \brief Dump the contents of the module map, for debugging purposes.
+  /// Dump the contents of the module map, for debugging purposes.
   void dump();
-  
+
   using module_iterator = llvm::StringMap<Module *>::const_iterator;
 
   module_iterator module_begin() const { return Modules.begin(); }
   module_iterator module_end()   const { return Modules.end(); }
 };
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_LEX_MODULEMAP_H
diff --git a/linux-x64/clang/include/clang/Lex/MultipleIncludeOpt.h b/linux-x64/clang/include/clang/Lex/MultipleIncludeOpt.h
index 00d3047..ac0dcc7 100644
--- a/linux-x64/clang/include/clang/Lex/MultipleIncludeOpt.h
+++ b/linux-x64/clang/include/clang/Lex/MultipleIncludeOpt.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the MultipleIncludeOpt interface.
+/// Defines the MultipleIncludeOpt interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -20,7 +20,7 @@
 namespace clang {
 class IdentifierInfo;
 
-/// \brief Implements the simple state machine that the Lexer class uses to
+/// Implements the simple state machine that the Lexer class uses to
 /// detect files subject to the 'multiple-include' optimization.
 ///
 /// The public methods in this class are triggered by various
@@ -113,7 +113,7 @@
   /// buffer, this method is called to disable the MIOpt if needed.
   void ExpandedMacro() { DidMacroExpansion = true; }
 
-  /// \brief Called when entering a top-level \#ifndef directive (or the
+  /// Called when entering a top-level \#ifndef directive (or the
   /// "\#if !defined" equivalent) without any preceding tokens.
   ///
   /// Note, we don't care about the input value of 'ReadAnyTokens'.  The caller
@@ -139,14 +139,14 @@
     MacroLoc = Loc;
   }
 
-  /// \brief Invoked when a top level conditional (except \#ifndef) is found.
+  /// Invoked when a top level conditional (except \#ifndef) is found.
   void EnterTopLevelConditional() {
     // If a conditional directive (except #ifndef) is found at the top level,
     // there is a chunk of the file not guarded by the controlling macro.
     Invalidate();
   }
 
-  /// \brief Called when the lexer exits the top-level conditional.
+  /// Called when the lexer exits the top-level conditional.
   void ExitTopLevelConditional() {
     // If we have a macro, that means the top of the file was ok.  Set our state
     // back to "not having read any tokens" so we can detect anything after the
@@ -159,7 +159,7 @@
     ImmediatelyAfterTopLevelIfndef = false;
   }
 
-  /// \brief Once the entire file has been lexed, if there is a controlling
+  /// Once the entire file has been lexed, if there is a controlling
   /// macro, return it.
   const IdentifierInfo *GetControllingMacroAtEndOfFile() const {
     // If we haven't read any tokens after the #endif, return the controlling
@@ -169,7 +169,7 @@
     return nullptr;
   }
 
-  /// \brief If the ControllingMacro is followed by a macro definition, return
+  /// If the ControllingMacro is followed by a macro definition, return
   /// the macro that was defined.
   const IdentifierInfo *GetDefinedMacro() const {
     return DefinedMacro;
diff --git a/linux-x64/clang/include/clang/Lex/PPCallbacks.h b/linux-x64/clang/include/clang/Lex/PPCallbacks.h
index 19bce4d..45c2d18 100644
--- a/linux-x64/clang/include/clang/Lex/PPCallbacks.h
+++ b/linux-x64/clang/include/clang/Lex/PPCallbacks.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the PPCallbacks interface.
+/// Defines the PPCallbacks interface.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -29,7 +29,7 @@
   class MacroDirective;
   class MacroArgs;
 
-/// \brief This interface provides a way to observe the actions of the
+/// This interface provides a way to observe the actions of the
 /// preprocessor as it does its thing.
 ///
 /// Clients can define their hooks here to implement preprocessor level tools.
@@ -41,7 +41,7 @@
     EnterFile, ExitFile, SystemHeaderPragma, RenameFile
   };
 
-  /// \brief Callback invoked whenever a source file is entered or exited.
+  /// Callback invoked whenever a source file is entered or exited.
   ///
   /// \param Loc Indicates the new location.
   /// \param PrevFID the file that was exited if \p Reason is ExitFile.
@@ -50,7 +50,7 @@
                            FileID PrevFID = FileID()) {
   }
 
-  /// \brief Callback invoked whenever a source file is skipped as the result
+  /// Callback invoked whenever a source file is skipped as the result
   /// of header guard optimization.
   ///
   /// \param SkippedFile The file that is skipped instead of entering \#include
@@ -63,13 +63,13 @@
                            SrcMgr::CharacteristicKind FileType) {
   }
 
-  /// \brief Callback invoked whenever an inclusion directive results in a
+  /// Callback invoked whenever an inclusion directive results in a
   /// file-not-found error.
   ///
-  /// \param FileName The name of the file being included, as written in the 
+  /// \param FileName The name of the file being included, as written in the
   /// source code.
   ///
-  /// \param RecoveryPath If this client indicates that it can recover from 
+  /// \param RecoveryPath If this client indicates that it can recover from
   /// this missing file, the client should set this as an additional header
   /// search patch.
   ///
@@ -80,17 +80,17 @@
     return false;
   }
 
-  /// \brief Callback invoked whenever an inclusion directive of
+  /// Callback invoked whenever an inclusion directive of
   /// any kind (\c \#include, \c \#import, etc.) has been processed, regardless
   /// of whether the inclusion will actually result in an inclusion.
   ///
-  /// \param HashLoc The location of the '#' that starts the inclusion 
+  /// \param HashLoc The location of the '#' that starts the inclusion
   /// directive.
   ///
-  /// \param IncludeTok The token that indicates the kind of inclusion 
+  /// \param IncludeTok The token that indicates the kind of inclusion
   /// directive, e.g., 'include' or 'import'.
   ///
-  /// \param FileName The name of the file being included, as written in the 
+  /// \param FileName The name of the file being included, as written in the
   /// source code.
   ///
   /// \param IsAngled Whether the file name was enclosed in angle brackets;
@@ -99,7 +99,7 @@
   /// \param FilenameRange The character range of the quotes or angle brackets
   /// for the written file name.
   ///
-  /// \param File The actual file that may be included by this inclusion 
+  /// \param File The actual file that may be included by this inclusion
   /// directive.
   ///
   /// \param SearchPath Contains the search path which was used to find the file
@@ -117,6 +117,10 @@
   /// \param Imported The module, whenever an inclusion directive was
   /// automatically turned into a module import or null otherwise.
   ///
+  /// \param FileType The characteristic kind, indicates whether a file or
+  /// directory holds normal user code, system code, or system code which is
+  /// implicitly 'extern "C"' in C++ mode.
+  ///
   virtual void InclusionDirective(SourceLocation HashLoc,
                                   const Token &IncludeTok,
                                   StringRef FileName,
@@ -125,10 +129,11 @@
                                   const FileEntry *File,
                                   StringRef SearchPath,
                                   StringRef RelativePath,
-                                  const Module *Imported) {
+                                  const Module *Imported,
+                                  SrcMgr::CharacteristicKind FileType) {
   }
 
-  /// \brief Callback invoked whenever there was an explicit module-import
+  /// Callback invoked whenever there was an explicit module-import
   /// syntax.
   ///
   /// \param ImportLoc The location of import directive token.
@@ -143,54 +148,54 @@
                             const Module *Imported) {
   }
 
-  /// \brief Callback invoked when the end of the main file is reached.
+  /// Callback invoked when the end of the main file is reached.
   ///
   /// No subsequent callbacks will be made.
   virtual void EndOfMainFile() {
   }
 
-  /// \brief Callback invoked when a \#ident or \#sccs directive is read.
+  /// Callback invoked when a \#ident or \#sccs directive is read.
   /// \param Loc The location of the directive.
   /// \param str The text of the directive.
   ///
   virtual void Ident(SourceLocation Loc, StringRef str) {
   }
 
-  /// \brief Callback invoked when start reading any pragma directive.
+  /// Callback invoked when start reading any pragma directive.
   virtual void PragmaDirective(SourceLocation Loc,
                                PragmaIntroducerKind Introducer) {
   }
 
-  /// \brief Callback invoked when a \#pragma comment directive is read.
+  /// Callback invoked when a \#pragma comment directive is read.
   virtual void PragmaComment(SourceLocation Loc, const IdentifierInfo *Kind,
                              StringRef Str) {
   }
 
-  /// \brief Callback invoked when a \#pragma detect_mismatch directive is
+  /// Callback invoked when a \#pragma detect_mismatch directive is
   /// read.
   virtual void PragmaDetectMismatch(SourceLocation Loc, StringRef Name,
                                     StringRef Value) {
   }
 
-  /// \brief Callback invoked when a \#pragma clang __debug directive is read.
+  /// Callback invoked when a \#pragma clang __debug directive is read.
   /// \param Loc The location of the debug directive.
   /// \param DebugType The identifier following __debug.
   virtual void PragmaDebug(SourceLocation Loc, StringRef DebugType) {
   }
 
-  /// \brief Determines the kind of \#pragma invoking a call to PragmaMessage.
+  /// Determines the kind of \#pragma invoking a call to PragmaMessage.
   enum PragmaMessageKind {
-    /// \brief \#pragma message has been invoked.
+    /// \#pragma message has been invoked.
     PMK_Message,
 
-    /// \brief \#pragma GCC warning has been invoked.
+    /// \#pragma GCC warning has been invoked.
     PMK_Warning,
 
-    /// \brief \#pragma GCC error has been invoked.
+    /// \#pragma GCC error has been invoked.
     PMK_Error
   };
 
-  /// \brief Callback invoked when a \#pragma message directive is read.
+  /// Callback invoked when a \#pragma message directive is read.
   /// \param Loc The location of the message directive.
   /// \param Namespace The namespace of the message directive.
   /// \param Kind The type of the message directive.
@@ -199,62 +204,62 @@
                              PragmaMessageKind Kind, StringRef Str) {
   }
 
-  /// \brief Callback invoked when a \#pragma gcc diagnostic push directive
+  /// Callback invoked when a \#pragma gcc diagnostic push directive
   /// is read.
   virtual void PragmaDiagnosticPush(SourceLocation Loc,
                                     StringRef Namespace) {
   }
 
-  /// \brief Callback invoked when a \#pragma gcc diagnostic pop directive
+  /// Callback invoked when a \#pragma gcc diagnostic pop directive
   /// is read.
   virtual void PragmaDiagnosticPop(SourceLocation Loc,
                                    StringRef Namespace) {
   }
 
-  /// \brief Callback invoked when a \#pragma gcc diagnostic directive is read.
+  /// Callback invoked when a \#pragma gcc diagnostic directive is read.
   virtual void PragmaDiagnostic(SourceLocation Loc, StringRef Namespace,
                                 diag::Severity mapping, StringRef Str) {}
 
-  /// \brief Called when an OpenCL extension is either disabled or
+  /// Called when an OpenCL extension is either disabled or
   /// enabled with a pragma.
-  virtual void PragmaOpenCLExtension(SourceLocation NameLoc, 
+  virtual void PragmaOpenCLExtension(SourceLocation NameLoc,
                                      const IdentifierInfo *Name,
                                      SourceLocation StateLoc, unsigned State) {
   }
 
-  /// \brief Callback invoked when a \#pragma warning directive is read.
+  /// Callback invoked when a \#pragma warning directive is read.
   virtual void PragmaWarning(SourceLocation Loc, StringRef WarningSpec,
                              ArrayRef<int> Ids) {
   }
 
-  /// \brief Callback invoked when a \#pragma warning(push) directive is read.
+  /// Callback invoked when a \#pragma warning(push) directive is read.
   virtual void PragmaWarningPush(SourceLocation Loc, int Level) {
   }
 
-  /// \brief Callback invoked when a \#pragma warning(pop) directive is read.
+  /// Callback invoked when a \#pragma warning(pop) directive is read.
   virtual void PragmaWarningPop(SourceLocation Loc) {
   }
 
-  /// \brief Callback invoked when a \#pragma clang assume_nonnull begin directive
+  /// Callback invoked when a \#pragma clang assume_nonnull begin directive
   /// is read.
   virtual void PragmaAssumeNonNullBegin(SourceLocation Loc) {}
 
-  /// \brief Callback invoked when a \#pragma clang assume_nonnull end directive
+  /// Callback invoked when a \#pragma clang assume_nonnull end directive
   /// is read.
   virtual void PragmaAssumeNonNullEnd(SourceLocation Loc) {}
 
-  /// \brief Called by Preprocessor::HandleMacroExpandedIdentifier when a
+  /// Called by Preprocessor::HandleMacroExpandedIdentifier when a
   /// macro invocation is found.
   virtual void MacroExpands(const Token &MacroNameTok,
                             const MacroDefinition &MD, SourceRange Range,
                             const MacroArgs *Args) {}
 
-  /// \brief Hook called whenever a macro definition is seen.
+  /// Hook called whenever a macro definition is seen.
   virtual void MacroDefined(const Token &MacroNameTok,
                             const MacroDirective *MD) {
   }
 
-  /// \brief Hook called whenever a macro \#undef is seen.
+  /// Hook called whenever a macro \#undef is seen.
   /// \param MacroNameTok The active Token
   /// \param MD A MacroDefinition for the named macro.
   /// \param Undef New MacroDirective if the macro was defined, null otherwise.
@@ -264,14 +269,14 @@
                               const MacroDefinition &MD,
                               const MacroDirective *Undef) {
   }
-  
-  /// \brief Hook called whenever the 'defined' operator is seen.
+
+  /// Hook called whenever the 'defined' operator is seen.
   /// \param MD The MacroDirective if the name was a macro, null otherwise.
   virtual void Defined(const Token &MacroNameTok, const MacroDefinition &MD,
                        SourceRange Range) {
   }
-  
-  /// \brief Hook called when a source range is skipped.
+
+  /// Hook called when a source range is skipped.
   /// \param Range The SourceRange that was skipped. The range begins at the
   /// \#if/\#else directive and ends after the \#endif/\#else directive.
   /// \param EndifLoc The end location of the 'endif' token, which may precede
@@ -284,7 +289,7 @@
     CVK_NotEvaluated, CVK_False, CVK_True
   };
 
-  /// \brief Hook called whenever an \#if is seen.
+  /// Hook called whenever an \#if is seen.
   /// \param Loc the source location of the directive.
   /// \param ConditionRange The SourceRange of the expression being tested.
   /// \param ConditionValue The evaluated value of the condition.
@@ -294,7 +299,7 @@
                   ConditionValueKind ConditionValue) {
   }
 
-  /// \brief Hook called whenever an \#elif is seen.
+  /// Hook called whenever an \#elif is seen.
   /// \param Loc the source location of the directive.
   /// \param ConditionRange The SourceRange of the expression being tested.
   /// \param ConditionValue The evaluated value of the condition.
@@ -304,7 +309,7 @@
                     ConditionValueKind ConditionValue, SourceLocation IfLoc) {
   }
 
-  /// \brief Hook called whenever an \#ifdef is seen.
+  /// Hook called whenever an \#ifdef is seen.
   /// \param Loc the source location of the directive.
   /// \param MacroNameTok Information on the token being tested.
   /// \param MD The MacroDefinition if the name was a macro, null otherwise.
@@ -312,7 +317,7 @@
                      const MacroDefinition &MD) {
   }
 
-  /// \brief Hook called whenever an \#ifndef is seen.
+  /// Hook called whenever an \#ifndef is seen.
   /// \param Loc the source location of the directive.
   /// \param MacroNameTok Information on the token being tested.
   /// \param MD The MacroDefiniton if the name was a macro, null otherwise.
@@ -320,20 +325,20 @@
                       const MacroDefinition &MD) {
   }
 
-  /// \brief Hook called whenever an \#else is seen.
+  /// Hook called whenever an \#else is seen.
   /// \param Loc the source location of the directive.
   /// \param IfLoc the source location of the \#if/\#ifdef/\#ifndef directive.
   virtual void Else(SourceLocation Loc, SourceLocation IfLoc) {
   }
 
-  /// \brief Hook called whenever an \#endif is seen.
+  /// Hook called whenever an \#endif is seen.
   /// \param Loc the source location of the directive.
   /// \param IfLoc the source location of the \#if/\#ifdef/\#ifndef directive.
   virtual void Endif(SourceLocation Loc, SourceLocation IfLoc) {
   }
 };
 
-/// \brief Simple wrapper class for chaining callbacks.
+/// Simple wrapper class for chaining callbacks.
 class PPChainedCallbacks : public PPCallbacks {
   virtual void anchor();
   std::unique_ptr<PPCallbacks> First, Second;
@@ -367,13 +372,14 @@
                           StringRef FileName, bool IsAngled,
                           CharSourceRange FilenameRange, const FileEntry *File,
                           StringRef SearchPath, StringRef RelativePath,
-                          const Module *Imported) override {
+                          const Module *Imported,
+                          SrcMgr::CharacteristicKind FileType) override {
     First->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled,
                               FilenameRange, File, SearchPath, RelativePath,
-                              Imported);
+                              Imported, FileType);
     Second->InclusionDirective(HashLoc, IncludeTok, FileName, IsAngled,
                                FilenameRange, File, SearchPath, RelativePath,
-                               Imported);
+                               Imported, FileType);
   }
 
   void moduleImport(SourceLocation ImportLoc, ModuleIdPath Path,
@@ -499,41 +505,41 @@
     Second->SourceRangeSkipped(Range, EndifLoc);
   }
 
-  /// \brief Hook called whenever an \#if is seen.
+  /// Hook called whenever an \#if is seen.
   void If(SourceLocation Loc, SourceRange ConditionRange,
           ConditionValueKind ConditionValue) override {
     First->If(Loc, ConditionRange, ConditionValue);
     Second->If(Loc, ConditionRange, ConditionValue);
   }
 
-  /// \brief Hook called whenever an \#elif is seen.
+  /// Hook called whenever an \#elif is seen.
   void Elif(SourceLocation Loc, SourceRange ConditionRange,
             ConditionValueKind ConditionValue, SourceLocation IfLoc) override {
     First->Elif(Loc, ConditionRange, ConditionValue, IfLoc);
     Second->Elif(Loc, ConditionRange, ConditionValue, IfLoc);
   }
 
-  /// \brief Hook called whenever an \#ifdef is seen.
+  /// Hook called whenever an \#ifdef is seen.
   void Ifdef(SourceLocation Loc, const Token &MacroNameTok,
              const MacroDefinition &MD) override {
     First->Ifdef(Loc, MacroNameTok, MD);
     Second->Ifdef(Loc, MacroNameTok, MD);
   }
 
-  /// \brief Hook called whenever an \#ifndef is seen.
+  /// Hook called whenever an \#ifndef is seen.
   void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
               const MacroDefinition &MD) override {
     First->Ifndef(Loc, MacroNameTok, MD);
     Second->Ifndef(Loc, MacroNameTok, MD);
   }
 
-  /// \brief Hook called whenever an \#else is seen.
+  /// Hook called whenever an \#else is seen.
   void Else(SourceLocation Loc, SourceLocation IfLoc) override {
     First->Else(Loc, IfLoc);
     Second->Else(Loc, IfLoc);
   }
 
-  /// \brief Hook called whenever an \#endif is seen.
+  /// Hook called whenever an \#endif is seen.
   void Endif(SourceLocation Loc, SourceLocation IfLoc) override {
     First->Endif(Loc, IfLoc);
     Second->Endif(Loc, IfLoc);
diff --git a/linux-x64/clang/include/clang/Lex/PPConditionalDirectiveRecord.h b/linux-x64/clang/include/clang/Lex/PPConditionalDirectiveRecord.h
index 8c52275..a2ccf14 100644
--- a/linux-x64/clang/include/clang/Lex/PPConditionalDirectiveRecord.h
+++ b/linux-x64/clang/include/clang/Lex/PPConditionalDirectiveRecord.h
@@ -20,12 +20,12 @@
 #include <vector>
 
 namespace clang {
-  
-/// \brief Records preprocessor conditional directive regions and allows
+
+/// Records preprocessor conditional directive regions and allows
 /// querying in which region source locations belong to.
 class PPConditionalDirectiveRecord : public PPCallbacks {
   SourceManager &SourceMgr;
-  
+
   SmallVector<SourceLocation, 6> CondDirectiveStack;
 
   class CondDirectiveLoc {
@@ -57,25 +57,25 @@
   };
 
   typedef std::vector<CondDirectiveLoc> CondDirectiveLocsTy;
-  /// \brief The locations of conditional directives in source order.
+  /// The locations of conditional directives in source order.
   CondDirectiveLocsTy CondDirectiveLocs;
 
   void addCondDirectiveLoc(CondDirectiveLoc DirLoc);
 
 public:
-  /// \brief Construct a new preprocessing record.
+  /// Construct a new preprocessing record.
   explicit PPConditionalDirectiveRecord(SourceManager &SM);
 
   size_t getTotalMemory() const;
 
   SourceManager &getSourceManager() const { return SourceMgr; }
 
-  /// \brief Returns true if the given range intersects with a conditional
+  /// Returns true if the given range intersects with a conditional
   /// directive. if a \#if/\#endif block is fully contained within the range,
   /// this function will return false.
   bool rangeIntersectsConditionalDirective(SourceRange Range) const;
 
-  /// \brief Returns true if the given locations are in different regions,
+  /// Returns true if the given locations are in different regions,
   /// separated by conditional directive blocks.
   bool areInDifferentConditionalDirectiveRegion(SourceLocation LHS,
                                                 SourceLocation RHS) const {
diff --git a/linux-x64/clang/include/clang/Lex/PTHLexer.h b/linux-x64/clang/include/clang/Lex/PTHLexer.h
index f122a00..0b84df1 100644
--- a/linux-x64/clang/include/clang/Lex/PTHLexer.h
+++ b/linux-x64/clang/include/clang/Lex/PTHLexer.h
@@ -49,7 +49,7 @@
 
   /// ReadToken - Used by PTHLexer to read tokens TokBuf.
   void ReadToken(Token &T);
-  
+
   bool LexEndOfFile(Token &Result);
 
   /// PTHMgr - The PTHManager object that created this PTHLexer.
diff --git a/linux-x64/clang/include/clang/Lex/Pragma.h b/linux-x64/clang/include/clang/Lex/Pragma.h
index 090ae2a..4d74fac 100644
--- a/linux-x64/clang/include/clang/Lex/Pragma.h
+++ b/linux-x64/clang/include/clang/Lex/Pragma.h
@@ -26,27 +26,27 @@
 class Token;
 
   /**
-   * \brief Describes how the pragma was introduced, e.g., with \#pragma,
+   * Describes how the pragma was introduced, e.g., with \#pragma,
    * _Pragma, or __pragma.
    */
   enum PragmaIntroducerKind {
     /**
-     * \brief The pragma was introduced via \#pragma.
+     * The pragma was introduced via \#pragma.
      */
     PIK_HashPragma,
-    
+
     /**
-     * \brief The pragma was introduced via the C99 _Pragma(string-literal).
+     * The pragma was introduced via the C99 _Pragma(string-literal).
      */
     PIK__Pragma,
-    
+
     /**
-     * \brief The pragma was introduced via the Microsoft 
+     * The pragma was introduced via the Microsoft
      * __pragma(token-string).
      */
     PIK___pragma
   };
-  
+
 /// PragmaHandler - Instances of this interface defined to handle the various
 /// pragmas that the language front-end uses.  Each handler optionally has a
 /// name (e.g. "pack") and the HandlePragma method is invoked when a pragma with
diff --git a/linux-x64/clang/include/clang/Lex/PreprocessingRecord.h b/linux-x64/clang/include/clang/Lex/PreprocessingRecord.h
index 77da1eb..44d79d9 100644
--- a/linux-x64/clang/include/clang/Lex/PreprocessingRecord.h
+++ b/linux-x64/clang/include/clang/Lex/PreprocessingRecord.h
@@ -39,11 +39,11 @@
 
 } // namespace clang
 
-/// \brief Allocates memory within a Clang preprocessing record.
+/// Allocates memory within a Clang preprocessing record.
 void *operator new(size_t bytes, clang::PreprocessingRecord &PR,
                    unsigned alignment = 8) noexcept;
 
-/// \brief Frees memory allocated in a Clang preprocessing record.
+/// Frees memory allocated in a Clang preprocessing record.
 void operator delete(void *ptr, clang::PreprocessingRecord &PR,
                      unsigned) noexcept;
 
@@ -55,25 +55,25 @@
 class SourceManager;
 class Token;
 
-  /// \brief Base class that describes a preprocessed entity, which may be a
+  /// Base class that describes a preprocessed entity, which may be a
   /// preprocessor directive or macro expansion.
   class PreprocessedEntity {
   public:
-    /// \brief The kind of preprocessed entity an object describes.
+    /// The kind of preprocessed entity an object describes.
     enum EntityKind {
-      /// \brief Indicates a problem trying to load the preprocessed entity.
+      /// Indicates a problem trying to load the preprocessed entity.
       InvalidKind,
 
-      /// \brief A macro expansion.
+      /// A macro expansion.
       MacroExpansionKind,
-      
+
       /// \defgroup Preprocessing directives
       /// @{
-      
-      /// \brief A macro definition.
+
+      /// A macro definition.
       MacroDefinitionKind,
-      
-      /// \brief An inclusion directive, such as \c \#include, \c
+
+      /// An inclusion directive, such as \c \#include, \c
       /// \#import, or \c \#include_next.
       InclusionDirectiveKind,
 
@@ -84,12 +84,12 @@
     };
 
   private:
-    /// \brief The kind of preprocessed entity that this object describes.
+    /// The kind of preprocessed entity that this object describes.
     EntityKind Kind;
-    
-    /// \brief The source range that covers this preprocessed entity.
+
+    /// The source range that covers this preprocessed entity.
     SourceRange Range;
-    
+
   protected:
     friend class PreprocessingRecord;
 
@@ -97,18 +97,18 @@
         : Kind(Kind), Range(Range) {}
 
   public:
-    /// \brief Retrieve the kind of preprocessed entity stored in this object.
+    /// Retrieve the kind of preprocessed entity stored in this object.
     EntityKind getKind() const { return Kind; }
-    
-    /// \brief Retrieve the source range that covers this entire preprocessed 
+
+    /// Retrieve the source range that covers this entire preprocessed
     /// entity.
     SourceRange getSourceRange() const LLVM_READONLY { return Range; }
 
-    /// \brief Returns true if there was a problem loading the preprocessed
+    /// Returns true if there was a problem loading the preprocessed
     /// entity.
     bool isInvalid() const { return Kind == InvalidKind; }
 
-    // Only allow allocation of preprocessed entities using the allocator 
+    // Only allow allocation of preprocessed entities using the allocator
     // in PreprocessingRecord or by doing a placement new.
     void *operator new(size_t bytes, PreprocessingRecord &PR,
                        unsigned alignment = 8) noexcept {
@@ -130,23 +130,23 @@
     void *operator new(size_t bytes) noexcept;
     void operator delete(void *data) noexcept;
   };
-  
-  /// \brief Records the presence of a preprocessor directive.
+
+  /// Records the presence of a preprocessor directive.
   class PreprocessingDirective : public PreprocessedEntity {
   public:
-    PreprocessingDirective(EntityKind Kind, SourceRange Range) 
+    PreprocessingDirective(EntityKind Kind, SourceRange Range)
         : PreprocessedEntity(Kind, Range) {}
-    
+
     // Implement isa/cast/dyncast/etc.
-    static bool classof(const PreprocessedEntity *PD) { 
+    static bool classof(const PreprocessedEntity *PD) {
       return PD->getKind() >= FirstPreprocessingDirective &&
              PD->getKind() <= LastPreprocessingDirective;
     }
   };
 
-  /// \brief Record the location of a macro definition.
+  /// Record the location of a macro definition.
   class MacroDefinitionRecord : public PreprocessingDirective {
-    /// \brief The name of the macro being defined.
+    /// The name of the macro being defined.
     const IdentifierInfo *Name;
 
   public:
@@ -154,21 +154,21 @@
                                    SourceRange Range)
         : PreprocessingDirective(MacroDefinitionKind, Range), Name(Name) {}
 
-    /// \brief Retrieve the name of the macro being defined.
+    /// Retrieve the name of the macro being defined.
     const IdentifierInfo *getName() const { return Name; }
 
-    /// \brief Retrieve the location of the macro name in the definition.
+    /// Retrieve the location of the macro name in the definition.
     SourceLocation getLocation() const { return getSourceRange().getBegin(); }
-    
+
     // Implement isa/cast/dyncast/etc.
     static bool classof(const PreprocessedEntity *PE) {
       return PE->getKind() == MacroDefinitionKind;
     }
   };
-  
-  /// \brief Records the location of a macro expansion.
+
+  /// Records the location of a macro expansion.
   class MacroExpansion : public PreprocessedEntity {
-    /// \brief The definition of this macro or the name of the macro if it is
+    /// The definition of this macro or the name of the macro if it is
     /// a builtin macro.
     llvm::PointerUnion<IdentifierInfo *, MacroDefinitionRecord *> NameOrDef;
 
@@ -181,17 +181,17 @@
         : PreprocessedEntity(MacroExpansionKind, Range), NameOrDef(Definition) {
     }
 
-    /// \brief True if it is a builtin macro.
+    /// True if it is a builtin macro.
     bool isBuiltinMacro() const { return NameOrDef.is<IdentifierInfo *>(); }
 
-    /// \brief The name of the macro being expanded.
+    /// The name of the macro being expanded.
     const IdentifierInfo *getName() const {
       if (MacroDefinitionRecord *Def = getDefinition())
         return Def->getName();
       return NameOrDef.get<IdentifierInfo *>();
     }
 
-    /// \brief The definition of the macro being expanded. May return null if
+    /// The definition of the macro being expanded. May return null if
     /// this is a builtin macro.
     MacroDefinitionRecord *getDefinition() const {
       return NameOrDef.dyn_cast<MacroDefinitionRecord *>();
@@ -203,131 +203,131 @@
     }
   };
 
-  /// \brief Record the location of an inclusion directive, such as an
+  /// Record the location of an inclusion directive, such as an
   /// \c \#include or \c \#import statement.
   class InclusionDirective : public PreprocessingDirective {
   public:
-    /// \brief The kind of inclusion directives known to the
+    /// The kind of inclusion directives known to the
     /// preprocessor.
     enum InclusionKind {
-      /// \brief An \c \#include directive.
+      /// An \c \#include directive.
       Include,
 
-      /// \brief An Objective-C \c \#import directive.
+      /// An Objective-C \c \#import directive.
       Import,
 
-      /// \brief A GNU \c \#include_next directive.
+      /// A GNU \c \#include_next directive.
       IncludeNext,
 
-      /// \brief A Clang \c \#__include_macros directive.
+      /// A Clang \c \#__include_macros directive.
       IncludeMacros
     };
 
   private:
-    /// \brief The name of the file that was included, as written in
+    /// The name of the file that was included, as written in
     /// the source.
     StringRef FileName;
 
-    /// \brief Whether the file name was in quotation marks; otherwise, it was
+    /// Whether the file name was in quotation marks; otherwise, it was
     /// in angle brackets.
     unsigned InQuotes : 1;
 
-    /// \brief The kind of inclusion directive we have.
+    /// The kind of inclusion directive we have.
     ///
     /// This is a value of type InclusionKind.
     unsigned Kind : 2;
 
-    /// \brief Whether the inclusion directive was automatically turned into
+    /// Whether the inclusion directive was automatically turned into
     /// a module import.
     unsigned ImportedModule : 1;
 
-    /// \brief The file that was included.
+    /// The file that was included.
     const FileEntry *File;
 
   public:
     InclusionDirective(PreprocessingRecord &PPRec,
-                       InclusionKind Kind, StringRef FileName, 
+                       InclusionKind Kind, StringRef FileName,
                        bool InQuotes, bool ImportedModule,
                        const FileEntry *File, SourceRange Range);
-    
-    /// \brief Determine what kind of inclusion directive this is.
+
+    /// Determine what kind of inclusion directive this is.
     InclusionKind getKind() const { return static_cast<InclusionKind>(Kind); }
-    
-    /// \brief Retrieve the included file name as it was written in the source.
+
+    /// Retrieve the included file name as it was written in the source.
     StringRef getFileName() const { return FileName; }
-    
-    /// \brief Determine whether the included file name was written in quotes;
+
+    /// Determine whether the included file name was written in quotes;
     /// otherwise, it was written in angle brackets.
     bool wasInQuotes() const { return InQuotes; }
 
-    /// \brief Determine whether the inclusion directive was automatically
+    /// Determine whether the inclusion directive was automatically
     /// turned into a module import.
     bool importedModule() const { return ImportedModule; }
-    
-    /// \brief Retrieve the file entry for the actual file that was included
+
+    /// Retrieve the file entry for the actual file that was included
     /// by this directive.
     const FileEntry *getFile() const { return File; }
-        
+
     // Implement isa/cast/dyncast/etc.
     static bool classof(const PreprocessedEntity *PE) {
       return PE->getKind() == InclusionDirectiveKind;
     }
   };
-  
-  /// \brief An abstract class that should be subclassed by any external source
+
+  /// An abstract class that should be subclassed by any external source
   /// of preprocessing record entries.
   class ExternalPreprocessingRecordSource {
   public:
     virtual ~ExternalPreprocessingRecordSource();
-    
-    /// \brief Read a preallocated preprocessed entity from the external source.
+
+    /// Read a preallocated preprocessed entity from the external source.
     ///
     /// \returns null if an error occurred that prevented the preprocessed
     /// entity from being loaded.
     virtual PreprocessedEntity *ReadPreprocessedEntity(unsigned Index) = 0;
 
-    /// \brief Returns a pair of [Begin, End) indices of preallocated
+    /// Returns a pair of [Begin, End) indices of preallocated
     /// preprocessed entities that \p Range encompasses.
     virtual std::pair<unsigned, unsigned>
         findPreprocessedEntitiesInRange(SourceRange Range) = 0;
 
-    /// \brief Optionally returns true or false if the preallocated preprocessed
+    /// Optionally returns true or false if the preallocated preprocessed
     /// entity with index \p Index came from file \p FID.
     virtual Optional<bool> isPreprocessedEntityInFileID(unsigned Index,
                                                         FileID FID) {
       return None;
     }
 
-    /// \brief Read a preallocated skipped range from the external source.
+    /// Read a preallocated skipped range from the external source.
     virtual SourceRange ReadSkippedRange(unsigned Index) = 0;
   };
-  
-  /// \brief A record of the steps taken while preprocessing a source file,
-  /// including the various preprocessing directives processed, macros 
+
+  /// A record of the steps taken while preprocessing a source file,
+  /// including the various preprocessing directives processed, macros
   /// expanded, etc.
   class PreprocessingRecord : public PPCallbacks {
     SourceManager &SourceMgr;
-    
-    /// \brief Allocator used to store preprocessing objects.
+
+    /// Allocator used to store preprocessing objects.
     llvm::BumpPtrAllocator BumpAlloc;
 
-    /// \brief The set of preprocessed entities in this record, in order they
+    /// The set of preprocessed entities in this record, in order they
     /// were seen.
     std::vector<PreprocessedEntity *> PreprocessedEntities;
-    
-    /// \brief The set of preprocessed entities in this record that have been
+
+    /// The set of preprocessed entities in this record that have been
     /// loaded from external sources.
     ///
     /// The entries in this vector are loaded lazily from the external source,
     /// and are referenced by the iterator using negative indices.
     std::vector<PreprocessedEntity *> LoadedPreprocessedEntities;
 
-    /// \brief The set of ranges that were skipped by the preprocessor,
+    /// The set of ranges that were skipped by the preprocessor,
     std::vector<SourceRange> SkippedRanges;
 
     bool SkippedRangesAllLoaded = true;
 
-    /// \brief Global (loaded or local) ID for a preprocessed entity.
+    /// Global (loaded or local) ID for a preprocessed entity.
     /// Negative values are used to indicate preprocessed entities
     /// loaded from the external source while non-negative values are used to
     /// indicate preprocessed entities introduced by the current preprocessor.
@@ -351,60 +351,60 @@
       return isLoaded ? PPEntityID(-int(Index)-1) : PPEntityID(Index+1);
     }
 
-    /// \brief Mapping from MacroInfo structures to their definitions.
+    /// Mapping from MacroInfo structures to their definitions.
     llvm::DenseMap<const MacroInfo *, MacroDefinitionRecord *> MacroDefinitions;
 
-    /// \brief External source of preprocessed entities.
+    /// External source of preprocessed entities.
     ExternalPreprocessingRecordSource *ExternalSource = nullptr;
 
-    /// \brief Retrieve the preprocessed entity at the given ID.
+    /// Retrieve the preprocessed entity at the given ID.
     PreprocessedEntity *getPreprocessedEntity(PPEntityID PPID);
 
-    /// \brief Retrieve the loaded preprocessed entity at the given index.
+    /// Retrieve the loaded preprocessed entity at the given index.
     PreprocessedEntity *getLoadedPreprocessedEntity(unsigned Index);
-    
-    /// \brief Determine the number of preprocessed entities that were
+
+    /// Determine the number of preprocessed entities that were
     /// loaded (or can be loaded) from an external source.
     unsigned getNumLoadedPreprocessedEntities() const {
       return LoadedPreprocessedEntities.size();
     }
 
-    /// \brief Returns a pair of [Begin, End) indices of local preprocessed
+    /// Returns a pair of [Begin, End) indices of local preprocessed
     /// entities that \p Range encompasses.
     std::pair<unsigned, unsigned>
       findLocalPreprocessedEntitiesInRange(SourceRange Range) const;
     unsigned findBeginLocalPreprocessedEntity(SourceLocation Loc) const;
     unsigned findEndLocalPreprocessedEntity(SourceLocation Loc) const;
 
-    /// \brief Allocate space for a new set of loaded preprocessed entities.
+    /// Allocate space for a new set of loaded preprocessed entities.
     ///
     /// \returns The index into the set of loaded preprocessed entities, which
     /// corresponds to the first newly-allocated entity.
     unsigned allocateLoadedEntities(unsigned NumEntities);
 
-    /// \brief Allocate space for a new set of loaded preprocessed skipped
+    /// Allocate space for a new set of loaded preprocessed skipped
     /// ranges.
     ///
     /// \returns The index into the set of loaded preprocessed ranges, which
     /// corresponds to the first newly-allocated range.
     unsigned allocateSkippedRanges(unsigned NumRanges);
 
-    /// \brief Ensures that all external skipped ranges have been loaded.
+    /// Ensures that all external skipped ranges have been loaded.
     void ensureSkippedRangesLoaded();
 
-    /// \brief Register a new macro definition.
+    /// Register a new macro definition.
     void RegisterMacroDefinition(MacroInfo *Macro, MacroDefinitionRecord *Def);
 
   public:
-    /// \brief Construct a new preprocessing record.
+    /// Construct a new preprocessing record.
     explicit PreprocessingRecord(SourceManager &SM);
 
-    /// \brief Allocate memory in the preprocessing record.
+    /// Allocate memory in the preprocessing record.
     void *Allocate(unsigned Size, unsigned Align = 8) {
       return BumpAlloc.Allocate(Size, Align);
     }
-    
-    /// \brief Deallocate memory in the preprocessing record.
+
+    /// Deallocate memory in the preprocessing record.
     void Deallocate(void *Ptr) {}
 
     size_t getTotalMemory() const;
@@ -451,27 +451,27 @@
       PreprocessedEntity *operator->() const { return **this; }
     };
 
-    /// \brief Begin iterator for all preprocessed entities.
+    /// Begin iterator for all preprocessed entities.
     iterator begin() {
       return iterator(this, -(int)LoadedPreprocessedEntities.size());
     }
 
-    /// \brief End iterator for all preprocessed entities.
+    /// End iterator for all preprocessed entities.
     iterator end() {
       return iterator(this, PreprocessedEntities.size());
     }
 
-    /// \brief Begin iterator for local, non-loaded, preprocessed entities.
+    /// Begin iterator for local, non-loaded, preprocessed entities.
     iterator local_begin() {
       return iterator(this, 0);
     }
 
-    /// \brief End iterator for local, non-loaded, preprocessed entities.
+    /// End iterator for local, non-loaded, preprocessed entities.
     iterator local_end() {
       return iterator(this, PreprocessedEntities.size());
     }
 
-    /// \brief iterator range for the given range of loaded
+    /// iterator range for the given range of loaded
     /// preprocessed entities.
     llvm::iterator_range<iterator> getIteratorsForLoadedRange(unsigned start,
                                                               unsigned count) {
@@ -482,14 +482,14 @@
           iterator(this, int(end) - LoadedPreprocessedEntities.size()));
     }
 
-    /// \brief Returns a range of preprocessed entities that source range \p R
+    /// Returns a range of preprocessed entities that source range \p R
     /// encompasses.
     ///
     /// \param R the range to look for preprocessed entities.
     llvm::iterator_range<iterator>
     getPreprocessedEntitiesInRange(SourceRange R);
 
-    /// \brief Returns true if the preprocessed entity that \p PPEI iterator
+    /// Returns true if the preprocessed entity that \p PPEI iterator
     /// points to is coming from the file \p FID.
     ///
     /// Can be used to avoid implicit deserializations of preallocated
@@ -498,27 +498,27 @@
     /// \see getPreprocessedEntitiesInRange.
     bool isEntityInFileID(iterator PPEI, FileID FID);
 
-    /// \brief Add a new preprocessed entity to this record.
+    /// Add a new preprocessed entity to this record.
     PPEntityID addPreprocessedEntity(PreprocessedEntity *Entity);
 
-    /// \brief Set the external source for preprocessed entities.
+    /// Set the external source for preprocessed entities.
     void SetExternalSource(ExternalPreprocessingRecordSource &Source);
 
-    /// \brief Retrieve the external source for preprocessed entities.
+    /// Retrieve the external source for preprocessed entities.
     ExternalPreprocessingRecordSource *getExternalSource() const {
       return ExternalSource;
     }
 
-    /// \brief Retrieve the macro definition that corresponds to the given
+    /// Retrieve the macro definition that corresponds to the given
     /// \c MacroInfo.
     MacroDefinitionRecord *findMacroDefinition(const MacroInfo *MI);
 
-    /// \brief Retrieve all ranges that got skipped while preprocessing.
+    /// Retrieve all ranges that got skipped while preprocessing.
     const std::vector<SourceRange> &getSkippedRanges() {
       ensureSkippedRangesLoaded();
       return SkippedRanges;
     }
-        
+
   private:
     friend class ASTReader;
     friend class ASTWriter;
@@ -532,14 +532,14 @@
                             StringRef FileName, bool IsAngled,
                             CharSourceRange FilenameRange,
                             const FileEntry *File, StringRef SearchPath,
-                            StringRef RelativePath,
-                            const Module *Imported) override;
+                            StringRef RelativePath, const Module *Imported,
+                            SrcMgr::CharacteristicKind FileType) override;
     void Ifdef(SourceLocation Loc, const Token &MacroNameTok,
                const MacroDefinition &MD) override;
     void Ifndef(SourceLocation Loc, const Token &MacroNameTok,
                 const MacroDefinition &MD) override;
 
-    /// \brief Hook called whenever the 'defined' operator is seen.
+    /// Hook called whenever the 'defined' operator is seen.
     void Defined(const Token &MacroNameTok, const MacroDefinition &MD,
                  SourceRange Range) override;
 
@@ -549,7 +549,7 @@
     void addMacroExpansion(const Token &Id, const MacroInfo *MI,
                            SourceRange Range);
 
-    /// \brief Cached result of the last \see getPreprocessedEntitiesInRange
+    /// Cached result of the last \see getPreprocessedEntitiesInRange
     /// query.
     struct {
       SourceRange Range;
diff --git a/linux-x64/clang/include/clang/Lex/Preprocessor.h b/linux-x64/clang/include/clang/Lex/Preprocessor.h
index 485600f..e718f5b 100644
--- a/linux-x64/clang/include/clang/Lex/Preprocessor.h
+++ b/linux-x64/clang/include/clang/Lex/Preprocessor.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the clang::Preprocessor interface.
+/// Defines the clang::Preprocessor interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -83,7 +83,7 @@
 class ScratchBuffer;
 class TargetInfo;
 
-/// \brief Stores token information for comparing actual tokens with
+/// Stores token information for comparing actual tokens with
 /// predefined values.  Only handles simple tokens and identifiers.
 class TokenValue {
   tok::TokenKind Kind;
@@ -106,7 +106,7 @@
   }
 };
 
-/// \brief Context in which macro name is used.
+/// Context in which macro name is used.
 enum MacroUse {
   // other than #define or #undef
   MU_Other  = 0,
@@ -118,7 +118,7 @@
   MU_Undef  = 2
 };
 
-/// \brief Engages in a tight little dance with the lexer to efficiently
+/// Engages in a tight little dance with the lexer to efficiently
 /// preprocess tokens.
 ///
 /// Lexers know only about tokens within a single source file, and don't
@@ -140,7 +140,7 @@
   HeaderSearch      &HeaderInfo;
   ModuleLoader      &TheModuleLoader;
 
-  /// \brief External source of macros.
+  /// External source of macros.
   ExternalPreprocessorSource *ExternalSource;
 
   /// An optional PTHManager object used for getting tokens from
@@ -186,7 +186,7 @@
   unsigned CounterValue = 0;
 
   enum {
-    /// \brief Maximum depth of \#includes.
+    /// Maximum depth of \#includes.
     MaxAllowedIncludeStackDepth = 200
   };
 
@@ -210,26 +210,26 @@
 
   class ResetMacroExpansionHelper;
 
-  /// \brief Whether we have already loaded macros from the external source.
+  /// Whether we have already loaded macros from the external source.
   mutable bool ReadMacrosFromExternalSource : 1;
 
-  /// \brief True if pragmas are enabled.
+  /// True if pragmas are enabled.
   bool PragmasEnabled : 1;
 
-  /// \brief True if the current build action is a preprocessing action.
+  /// True if the current build action is a preprocessing action.
   bool PreprocessedOutput : 1;
 
-  /// \brief True if we are currently preprocessing a #if or #elif directive
+  /// True if we are currently preprocessing a #if or #elif directive
   bool ParsingIfOrElifDirective;
 
-  /// \brief True if we are pre-expanding macro arguments.
+  /// True if we are pre-expanding macro arguments.
   bool InMacroArgPreExpansion;
 
-  /// \brief Mapping/lookup information for all identifiers in
+  /// Mapping/lookup information for all identifiers in
   /// the program, including program keywords.
   mutable IdentifierTable Identifiers;
 
-  /// \brief This table contains all the selectors in the program.
+  /// This table contains all the selectors in the program.
   ///
   /// Unlike IdentifierTable above, this table *isn't* populated by the
   /// preprocessor. It is declared/expanded here because its role/lifetime is
@@ -240,82 +240,82 @@
   /// the lifetime of the preprocessor.
   SelectorTable Selectors;
 
-  /// \brief Information about builtins.
+  /// Information about builtins.
   Builtin::Context BuiltinInfo;
 
-  /// \brief Tracks all of the pragmas that the client registered
+  /// Tracks all of the pragmas that the client registered
   /// with this preprocessor.
   std::unique_ptr<PragmaNamespace> PragmaHandlers;
 
-  /// \brief Pragma handlers of the original source is stored here during the
+  /// Pragma handlers of the original source is stored here during the
   /// parsing of a model file.
   std::unique_ptr<PragmaNamespace> PragmaHandlersBackup;
 
-  /// \brief Tracks all of the comment handlers that the client registered
+  /// Tracks all of the comment handlers that the client registered
   /// with this preprocessor.
   std::vector<CommentHandler *> CommentHandlers;
 
-  /// \brief True if we want to ignore EOF token and continue later on (thus 
+  /// True if we want to ignore EOF token and continue later on (thus
   /// avoid tearing the Lexer and etc. down).
   bool IncrementalProcessing = false;
 
   /// The kind of translation unit we are processing.
   TranslationUnitKind TUKind;
 
-  /// \brief The code-completion handler.
+  /// The code-completion handler.
   CodeCompletionHandler *CodeComplete = nullptr;
 
-  /// \brief The file that we're performing code-completion for, if any.
+  /// The file that we're performing code-completion for, if any.
   const FileEntry *CodeCompletionFile = nullptr;
 
-  /// \brief The offset in file for the code-completion point.
+  /// The offset in file for the code-completion point.
   unsigned CodeCompletionOffset = 0;
 
-  /// \brief The location for the code-completion point. This gets instantiated
+  /// The location for the code-completion point. This gets instantiated
   /// when the CodeCompletionFile gets \#include'ed for preprocessing.
   SourceLocation CodeCompletionLoc;
 
-  /// \brief The start location for the file of the code-completion point.
+  /// The start location for the file of the code-completion point.
   ///
   /// This gets instantiated when the CodeCompletionFile gets \#include'ed
   /// for preprocessing.
   SourceLocation CodeCompletionFileLoc;
 
-  /// \brief The source location of the \c import contextual keyword we just 
+  /// The source location of the \c import contextual keyword we just
   /// lexed, if any.
   SourceLocation ModuleImportLoc;
 
-  /// \brief The module import path that we're currently processing.
+  /// The module import path that we're currently processing.
   SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> ModuleImportPath;
 
-  /// \brief Whether the last token we lexed was an '@'.
+  /// Whether the last token we lexed was an '@'.
   bool LastTokenWasAt = false;
 
-  /// \brief Whether the module import expects an identifier next. Otherwise,
+  /// Whether the module import expects an identifier next. Otherwise,
   /// it expects a '.' or ';'.
   bool ModuleImportExpectsIdentifier = false;
-  
-  /// \brief The source location of the currently-active
+
+  /// The source location of the currently-active
   /// \#pragma clang arc_cf_code_audited begin.
   SourceLocation PragmaARCCFCodeAuditedLoc;
 
-  /// \brief The source location of the currently-active
+  /// The source location of the currently-active
   /// \#pragma clang assume_nonnull begin.
   SourceLocation PragmaAssumeNonNullLoc;
 
-  /// \brief True if we hit the code-completion point.
+  /// True if we hit the code-completion point.
   bool CodeCompletionReached = false;
 
-  /// \brief The code completion token containing the information
+  /// The code completion token containing the information
   /// on the stem that is to be code completed.
   IdentifierInfo *CodeCompletionII = nullptr;
 
-  /// \brief The directory that the main file should be considered to occupy,
+  /// The directory that the main file should be considered to occupy,
   /// if it does not correspond to a real file (as happens when building a
   /// module).
   const DirectoryEntry *MainFileDir = nullptr;
 
-  /// \brief The number of bytes that we will initially skip when entering the
+  /// The number of bytes that we will initially skip when entering the
   /// main file, along with a flag that indicates whether skipping this number
   /// of bytes will place the lexer at the start of a line.
   ///
@@ -386,37 +386,37 @@
     State ConditionalStackState = Off;
   } PreambleConditionalStack;
 
-  /// \brief The current top of the stack that we're lexing from if
+  /// The current top of the stack that we're lexing from if
   /// not expanding a macro and we are lexing directly from source code.
   ///
   /// Only one of CurLexer, CurPTHLexer, or CurTokenLexer will be non-null.
   std::unique_ptr<Lexer> CurLexer;
 
-  /// \brief The current top of stack that we're lexing from if
+  /// The current top of stack that we're lexing from if
   /// not expanding from a macro and we are lexing from a PTH cache.
   ///
   /// Only one of CurLexer, CurPTHLexer, or CurTokenLexer will be non-null.
   std::unique_ptr<PTHLexer> CurPTHLexer;
 
-  /// \brief The current top of the stack what we're lexing from
+  /// The current top of the stack what we're lexing from
   /// if not expanding a macro.
   ///
   /// This is an alias for either CurLexer or  CurPTHLexer.
   PreprocessorLexer *CurPPLexer = nullptr;
 
-  /// \brief Used to find the current FileEntry, if CurLexer is non-null
+  /// Used to find the current FileEntry, if CurLexer is non-null
   /// and if applicable.
   ///
   /// This allows us to implement \#include_next and find directory-specific
   /// properties.
   const DirectoryLookup *CurDirLookup = nullptr;
 
-  /// \brief The current macro we are expanding, if we are expanding a macro.
+  /// The current macro we are expanding, if we are expanding a macro.
   ///
   /// One of CurLexer and CurTokenLexer must be null.
   std::unique_ptr<TokenLexer> CurTokenLexer;
 
-  /// \brief The kind of lexer we're currently working with.
+  /// The kind of lexer we're currently working with.
   enum CurLexerKind {
     CLK_Lexer,
     CLK_PTHLexer,
@@ -425,11 +425,11 @@
     CLK_LexAfterModuleImport
   } CurLexerKind = CLK_Lexer;
 
-  /// \brief If the current lexer is for a submodule that is being built, this
+  /// If the current lexer is for a submodule that is being built, this
   /// is that submodule.
   Module *CurLexerSubmodule = nullptr;
 
-  /// \brief Keeps track of the stack of files currently
+  /// Keeps track of the stack of files currently
   /// \#included, and macros currently being expanded from, not counting
   /// CurLexer/CurTokenLexer.
   struct IncludeStackInfo {
@@ -458,7 +458,7 @@
   };
   std::vector<IncludeStackInfo> IncludeMacroStack;
 
-  /// \brief Actions invoked when some preprocessor activity is
+  /// Actions invoked when some preprocessor activity is
   /// encountered (e.g. a file is \#included, etc).
   std::unique_ptr<PPCallbacks> Callbacks;
 
@@ -617,7 +617,7 @@
 
   struct SubmoduleState;
 
-  /// \brief Information about a submodule that we're currently building.
+  /// Information about a submodule that we're currently building.
   struct BuildingSubmoduleInfo {
     /// The module that we are building.
     Module *M;
@@ -643,7 +643,7 @@
   };
   SmallVector<BuildingSubmoduleInfo, 8> BuildingSubmoduleStack;
 
-  /// \brief Information about a submodule's preprocessor state.
+  /// Information about a submodule's preprocessor state.
   struct SubmoduleState {
     /// The macros for the submodule.
     MacroMap Macros;
@@ -674,7 +674,7 @@
   llvm::DenseMap<const IdentifierInfo *, llvm::TinyPtrVector<ModuleMacro *>>
       LeafModuleMacros;
 
-  /// \brief Macros that we want to warn because they are not used at the end
+  /// Macros that we want to warn because they are not used at the end
   /// of the translation unit.
   ///
   /// We store just their SourceLocations instead of
@@ -686,7 +686,7 @@
   using WarnUnusedMacroLocsTy = llvm::SmallPtrSet<SourceLocation, 32>;
   WarnUnusedMacroLocsTy WarnUnusedMacroLocs;
 
-  /// \brief A "freelist" of MacroArg objects that can be
+  /// A "freelist" of MacroArg objects that can be
   /// reused for quick allocation.
   MacroArgs *MacroArgCache = nullptr;
 
@@ -713,21 +713,27 @@
   unsigned NumFastTokenPaste = 0;
   unsigned NumSkipped = 0;
 
-  /// \brief The predefined macros that preprocessor should use from the
+  /// The predefined macros that preprocessor should use from the
   /// command line etc.
   std::string Predefines;
 
-  /// \brief The file ID for the preprocessor predefines.
+  /// The file ID for the preprocessor predefines.
   FileID PredefinesFileID;
 
+  /// The file ID for the PCH through header.
+  FileID PCHThroughHeaderFileID;
+
+  /// Whether tokens are being skipped until the through header is seen.
+  bool SkippingUntilPCHThroughHeader = false;
+
   /// \{
-  /// \brief Cache of macro expanders to reduce malloc traffic.
+  /// Cache of macro expanders to reduce malloc traffic.
   enum { TokenLexerCacheSize = 8 };
   unsigned NumCachedTokenLexers;
   std::unique_ptr<TokenLexer> TokenLexerCache[TokenLexerCacheSize];
   /// \}
 
-  /// \brief Keeps macro expanded tokens for TokenLexers.
+  /// Keeps macro expanded tokens for TokenLexers.
   //
   /// Works like a stack; a TokenLexer adds the macro expanded tokens that is
   /// going to lex in the cache and when it finishes the tokens are removed
@@ -735,7 +741,7 @@
   SmallVector<Token, 16> MacroExpandedTokens;
   std::vector<std::pair<TokenLexer *, size_t>> MacroExpandingLexersStack;
 
-  /// \brief A record of the macro definitions and expansions that
+  /// A record of the macro definitions and expansions that
   /// occurred during preprocessing.
   ///
   /// This is an optional side structure that can be enabled with
@@ -745,18 +751,18 @@
   /// Cached tokens state.
   using CachedTokensTy = SmallVector<Token, 1>;
 
-  /// \brief Cached tokens are stored here when we do backtracking or
+  /// Cached tokens are stored here when we do backtracking or
   /// lookahead. They are "lexed" by the CachingLex() method.
   CachedTokensTy CachedTokens;
 
-  /// \brief The position of the cached token that CachingLex() should
+  /// The position of the cached token that CachingLex() should
   /// "lex" next.
   ///
   /// If it points beyond the CachedTokens vector, it means that a normal
   /// Lex() should be invoked.
   CachedTokensTy::size_type CachedLexPos = 0;
 
-  /// \brief Stack of backtrack positions, allowing nested backtracks.
+  /// Stack of backtrack positions, allowing nested backtracks.
   ///
   /// The EnableBacktrackAtThisPos() method pushes a position to
   /// indicate where CachedLexPos should be set when the BackTrack() method is
@@ -785,7 +791,7 @@
 
   ~Preprocessor();
 
-  /// \brief Initialize the preprocessor using information about the target.
+  /// Initialize the preprocessor using information about the target.
   ///
   /// \param Target is owned by the caller and must remain valid for the
   /// lifetime of the preprocessor.
@@ -794,7 +800,7 @@
   void Initialize(const TargetInfo &Target,
                   const TargetInfo *AuxTarget = nullptr);
 
-  /// \brief Initialize the preprocessor to parse a model file
+  /// Initialize the preprocessor to parse a model file
   ///
   /// To parse model files the preprocessor of the original source is reused to
   /// preserver the identifier table. However to avoid some duplicate
@@ -802,13 +808,13 @@
   /// to parse model files. This method does that cleanup.
   void InitializeForModelFile();
 
-  /// \brief Cleanup after model file parsing
+  /// Cleanup after model file parsing
   void FinalizeForModelFile();
 
-  /// \brief Retrieve the preprocessor options used to initialize this
+  /// Retrieve the preprocessor options used to initialize this
   /// preprocessor.
   PreprocessorOptions &getPreprocessorOpts() const { return *PPOpts; }
-  
+
   DiagnosticsEngine &getDiagnostics() const { return *Diags; }
   void setDiagnostics(DiagnosticsEngine &D) { Diags = &D; }
 
@@ -838,19 +844,19 @@
     return ExternalSource;
   }
 
-  /// \brief Retrieve the module loader associated with this preprocessor.
+  /// Retrieve the module loader associated with this preprocessor.
   ModuleLoader &getModuleLoader() const { return TheModuleLoader; }
 
   bool hadModuleLoaderFatalFailure() const {
     return TheModuleLoader.HadFatalFailure;
   }
 
-  /// \brief True if we are currently preprocessing a #if or #elif directive
-  bool isParsingIfOrElifDirective() const { 
+  /// True if we are currently preprocessing a #if or #elif directive
+  bool isParsingIfOrElifDirective() const {
     return ParsingIfOrElifDirective;
   }
 
-  /// \brief Control whether the preprocessor retains comments in output.
+  /// Control whether the preprocessor retains comments in output.
   void SetCommentRetentionState(bool KeepComments, bool KeepMacroComments) {
     this->KeepComments = KeepComments | KeepMacroComments;
     this->KeepMacroComments = KeepMacroComments;
@@ -879,32 +885,32 @@
   /// false if it is producing tokens to be consumed by Parse and Sema.
   bool isPreprocessedOutput() const { return PreprocessedOutput; }
 
-  /// \brief Return true if we are lexing directly from the specified lexer.
+  /// Return true if we are lexing directly from the specified lexer.
   bool isCurrentLexer(const PreprocessorLexer *L) const {
     return CurPPLexer == L;
   }
 
-  /// \brief Return the current lexer being lexed from.
+  /// Return the current lexer being lexed from.
   ///
   /// Note that this ignores any potentially active macro expansions and _Pragma
   /// expansions going on at the time.
   PreprocessorLexer *getCurrentLexer() const { return CurPPLexer; }
 
-  /// \brief Return the current file lexer being lexed from.
+  /// Return the current file lexer being lexed from.
   ///
   /// Note that this ignores any potentially active macro expansions and _Pragma
   /// expansions going on at the time.
   PreprocessorLexer *getCurrentFileLexer() const;
 
-  /// \brief Return the submodule owning the file being lexed. This may not be
+  /// Return the submodule owning the file being lexed. This may not be
   /// the current module if we have changed modules since entering the file.
   Module *getCurrentLexerSubmodule() const { return CurLexerSubmodule; }
 
-  /// \brief Returns the FileID for the preprocessor predefines.
+  /// Returns the FileID for the preprocessor predefines.
   FileID getPredefinesFileID() const { return PredefinesFileID; }
 
   /// \{
-  /// \brief Accessors for preprocessor callbacks.
+  /// Accessors for preprocessor callbacks.
   ///
   /// Note that this class takes ownership of any PPCallbacks object given to
   /// it.
@@ -925,7 +931,7 @@
            (!getLangOpts().Modules || (bool)getMacroDefinition(II));
   }
 
-  /// \brief Determine whether II is defined as a macro within the module M,
+  /// Determine whether II is defined as a macro within the module M,
   /// if that is a module that we've already preprocessed. Does not check for
   /// macros imported into M.
   bool isMacroDefinedInLocalModule(const IdentifierInfo *II, Module *M) {
@@ -969,7 +975,7 @@
                            S.isAmbiguous(*this, II));
   }
 
-  /// \brief Given an identifier, return its latest non-imported MacroDirective
+  /// Given an identifier, return its latest non-imported MacroDirective
   /// if it is \#define'd and not \#undef'd, or null if it isn't \#define'd.
   MacroDirective *getLocalMacroDirective(const IdentifierInfo *II) const {
     if (!II->hasMacroDefinition())
@@ -994,14 +1000,14 @@
     return nullptr;
   }
 
-  /// \brief Given an identifier, return the latest non-imported macro
+  /// Given an identifier, return the latest non-imported macro
   /// directive for that identifier.
   ///
   /// One can iterate over all previous macro directives from the most recent
   /// one.
   MacroDirective *getLocalMacroDirectiveHistory(const IdentifierInfo *II) const;
 
-  /// \brief Add a directive to the macro directive history for this identifier.
+  /// Add a directive to the macro directive history for this identifier.
   void appendMacroDirective(IdentifierInfo *II, MacroDirective *MD);
   DefMacroDirective *appendDefMacroDirective(IdentifierInfo *II, MacroInfo *MI,
                                              SourceLocation Loc) {
@@ -1014,16 +1020,16 @@
     return appendDefMacroDirective(II, MI, MI->getDefinitionLoc());
   }
 
-  /// \brief Set a MacroDirective that was loaded from a PCH file.
+  /// Set a MacroDirective that was loaded from a PCH file.
   void setLoadedMacroDirective(IdentifierInfo *II, MacroDirective *ED,
                                MacroDirective *MD);
 
-  /// \brief Register an exported macro for a module and identifier.
+  /// Register an exported macro for a module and identifier.
   ModuleMacro *addModuleMacro(Module *Mod, IdentifierInfo *II, MacroInfo *Macro,
                               ArrayRef<ModuleMacro *> Overrides, bool &IsNew);
   ModuleMacro *getModuleMacro(Module *Mod, IdentifierInfo *II);
 
-  /// \brief Get the list of leaf (non-overridden) module macros for a name.
+  /// Get the list of leaf (non-overridden) module macros for a name.
   ArrayRef<ModuleMacro*> getLeafModuleMacros(const IdentifierInfo *II) const {
     if (II->isOutOfDate())
       updateOutOfDateIdentifier(const_cast<IdentifierInfo&>(*II));
@@ -1041,15 +1047,17 @@
 
   macro_iterator macro_begin(bool IncludeExternalMacros = true) const;
   macro_iterator macro_end(bool IncludeExternalMacros = true) const;
-  llvm::iterator_range<macro_iterator>
 
+  llvm::iterator_range<macro_iterator>
   macros(bool IncludeExternalMacros = true) const {
-    return llvm::make_range(macro_begin(IncludeExternalMacros),
-                            macro_end(IncludeExternalMacros));
+    macro_iterator begin = macro_begin(IncludeExternalMacros);
+    macro_iterator end = macro_end(IncludeExternalMacros);
+    return llvm::make_range(begin, end);
   }
+
   /// \}
 
-  /// \brief Return the name of the macro defined before \p Loc that has
+  /// Return the name of the macro defined before \p Loc that has
   /// spelling \p Tokens.  If there are multiple macros with same spelling,
   /// return the last one defined.
   StringRef getLastMacroWithSpelling(SourceLocation Loc,
@@ -1057,7 +1065,7 @@
 
   const std::string &getPredefines() const { return Predefines; }
 
-  /// \brief Set the predefines for this Preprocessor.
+  /// Set the predefines for this Preprocessor.
   ///
   /// These predefines are automatically injected when parsing the main file.
   void setPredefines(const char *P) { Predefines = P; }
@@ -1069,7 +1077,7 @@
     return &Identifiers.get(Name);
   }
 
-  /// \brief Add the specified pragma handler to this preprocessor.
+  /// Add the specified pragma handler to this preprocessor.
   ///
   /// If \p Namespace is non-null, then it is a token required to exist on the
   /// pragma line before the pragma string starts, e.g. "STDC" or "GCC".
@@ -1078,7 +1086,7 @@
     AddPragmaHandler(StringRef(), Handler);
   }
 
-  /// \brief Remove the specific pragma handler from this preprocessor.
+  /// Remove the specific pragma handler from this preprocessor.
   ///
   /// If \p Namespace is non-null, then it should be the namespace that
   /// \p Handler was added to. It is an error to remove a handler that
@@ -1091,68 +1099,84 @@
   /// Install empty handlers for all pragmas (making them ignored).
   void IgnorePragmas();
 
-  /// \brief Add the specified comment handler to the preprocessor.
+  /// Add the specified comment handler to the preprocessor.
   void addCommentHandler(CommentHandler *Handler);
 
-  /// \brief Remove the specified comment handler.
+  /// Remove the specified comment handler.
   ///
   /// It is an error to remove a handler that has not been registered.
   void removeCommentHandler(CommentHandler *Handler);
 
-  /// \brief Set the code completion handler to the given object.
+  /// Set the code completion handler to the given object.
   void setCodeCompletionHandler(CodeCompletionHandler &Handler) {
     CodeComplete = &Handler;
   }
 
-  /// \brief Retrieve the current code-completion handler.
+  /// Retrieve the current code-completion handler.
   CodeCompletionHandler *getCodeCompletionHandler() const {
     return CodeComplete;
   }
 
-  /// \brief Clear out the code completion handler.
+  /// Clear out the code completion handler.
   void clearCodeCompletionHandler() {
     CodeComplete = nullptr;
   }
 
-  /// \brief Hook used by the lexer to invoke the "natural language" code
+  /// Hook used by the lexer to invoke the "natural language" code
   /// completion point.
   void CodeCompleteNaturalLanguage();
 
-  /// \brief Set the code completion token for filtering purposes.
+  /// Set the code completion token for filtering purposes.
   void setCodeCompletionIdentifierInfo(IdentifierInfo *Filter) {
     CodeCompletionII = Filter;
   }
 
-  /// \brief Get the code completion token for filtering purposes.
+  /// Get the code completion token for filtering purposes.
   StringRef getCodeCompletionFilter() {
     if (CodeCompletionII)
       return CodeCompletionII->getName();
     return {};
   }
 
-  /// \brief Retrieve the preprocessing record, or NULL if there is no
+  /// Retrieve the preprocessing record, or NULL if there is no
   /// preprocessing record.
   PreprocessingRecord *getPreprocessingRecord() const { return Record; }
 
-  /// \brief Create a new preprocessing record, which will keep track of
+  /// Create a new preprocessing record, which will keep track of
   /// all macro expansions, macro definitions, etc.
   void createPreprocessingRecord();
 
-  /// \brief Enter the specified FileID as the main source file,
+  /// Returns true if the FileEntry is the PCH through header.
+  bool isPCHThroughHeader(const FileEntry *File);
+
+  /// True if creating a PCH with a through header.
+  bool creatingPCHWithThroughHeader();
+
+  /// True if using a PCH with a through header.
+  bool usingPCHWithThroughHeader();
+
+  /// Skip tokens until after the #include of the through header.
+  void SkipTokensUntilPCHThroughHeader();
+
+  /// Process directives while skipping until the through header is found.
+  void HandleSkippedThroughHeaderDirective(Token &Result,
+                                           SourceLocation HashLoc);
+
+  /// Enter the specified FileID as the main source file,
   /// which implicitly adds the builtin defines etc.
   void EnterMainSourceFile();
 
-  /// \brief Inform the preprocessor callbacks that processing is complete.
+  /// Inform the preprocessor callbacks that processing is complete.
   void EndSourceFile();
 
-  /// \brief Add a source file to the top of the include stack and
+  /// Add a source file to the top of the include stack and
   /// start lexing tokens from it instead of the current buffer.
   ///
   /// Emits a diagnostic, doesn't enter the file, and returns true on error.
   bool EnterSourceFile(FileID CurFileID, const DirectoryLookup *Dir,
                        SourceLocation Loc);
 
-  /// \brief Add a Macro to the top of the include stack and start lexing
+  /// Add a Macro to the top of the include stack and start lexing
   /// tokens from it instead of the current buffer.
   ///
   /// \param Args specifies the tokens input to a function-like macro.
@@ -1161,7 +1185,7 @@
   void EnterMacro(Token &Identifier, SourceLocation ILEnd, MacroInfo *Macro,
                   MacroArgs *Args);
 
-  /// \brief Add a "macro" context to the top of the include stack,
+  /// Add a "macro" context to the top of the include stack,
   /// which will cause the lexer to start returning the specified tokens.
   ///
   /// If \p DisableMacroExpansion is true, tokens lexed from the token stream
@@ -1186,7 +1210,7 @@
     EnterTokenStream(Toks.data(), Toks.size(), DisableMacroExpansion, false);
   }
 
-  /// \brief Pop the current lexer/macro exp off the top of the lexer stack.
+  /// Pop the current lexer/macro exp off the top of the lexer stack.
   ///
   /// This should only be used in situations where the current state of the
   /// top-of-stack lexer is known.
@@ -1207,7 +1231,7 @@
   ///
   void EnableBacktrackAtThisPos();
 
-  /// \brief Disable the last EnableBacktrackAtThisPos call.
+  /// Disable the last EnableBacktrackAtThisPos call.
   void CommitBacktrackedTokens();
 
   struct CachedTokensRange {
@@ -1215,28 +1239,28 @@
   };
 
 private:
-  /// \brief A range of cached tokens that should be erased after lexing
+  /// A range of cached tokens that should be erased after lexing
   /// when backtracking requires the erasure of such cached tokens.
   Optional<CachedTokensRange> CachedTokenRangeToErase;
 
 public:
-  /// \brief Returns the range of cached tokens that were lexed since
+  /// Returns the range of cached tokens that were lexed since
   /// EnableBacktrackAtThisPos() was previously called.
   CachedTokensRange LastCachedTokenRange();
 
-  /// \brief Erase the range of cached tokens that were lexed since
+  /// Erase the range of cached tokens that were lexed since
   /// EnableBacktrackAtThisPos() was previously called.
   void EraseCachedTokens(CachedTokensRange TokenRange);
 
-  /// \brief Make Preprocessor re-lex the tokens that were lexed since
+  /// Make Preprocessor re-lex the tokens that were lexed since
   /// EnableBacktrackAtThisPos() was previously called.
   void Backtrack();
 
-  /// \brief True if EnableBacktrackAtThisPos() was called and
+  /// True if EnableBacktrackAtThisPos() was called and
   /// caching of tokens is on.
   bool isBacktrackEnabled() const { return !BacktrackPositions.empty(); }
 
-  /// \brief Lex the next token for this preprocessor.
+  /// Lex the next token for this preprocessor.
   void Lex(Token &Result);
 
   void LexAfterModuleImport(Token &Result);
@@ -1247,7 +1271,7 @@
     return CurSubmoduleState->VisibleModules.getImportLoc(M);
   }
 
-  /// \brief Lex a string literal, which may be the concatenation of multiple
+  /// Lex a string literal, which may be the concatenation of multiple
   /// string literals and may even come from macro expansion.
   /// \returns true on success, false if a error diagnostic has been generated.
   bool LexStringLiteral(Token &Result, std::string &String,
@@ -1260,13 +1284,13 @@
                                   AllowMacroExpansion);
   }
 
-  /// \brief Complete the lexing of a string literal where the first token has
+  /// Complete the lexing of a string literal where the first token has
   /// already been lexed (see LexStringLiteral).
   bool FinishLexStringLiteral(Token &Result, std::string &String,
                               const char *DiagnosticTag,
                               bool AllowMacroExpansion);
 
-  /// \brief Lex a token.  If it's a comment, keep lexing until we get
+  /// Lex a token.  If it's a comment, keep lexing until we get
   /// something not a comment.
   ///
   /// This is useful in -E -C mode where comments would foul up preprocessor
@@ -1277,7 +1301,7 @@
     while (Result.getKind() == tok::comment);
   }
 
-  /// \brief Just like Lex, but disables macro expansion of identifier tokens.
+  /// Just like Lex, but disables macro expansion of identifier tokens.
   void LexUnexpandedToken(Token &Result) {
     // Disable macro expansion.
     bool OldVal = DisableMacroExpansion;
@@ -1289,7 +1313,7 @@
     DisableMacroExpansion = OldVal;
   }
 
-  /// \brief Like LexNonComment, but this disables macro expansion of
+  /// Like LexNonComment, but this disables macro expansion of
   /// identifier tokens.
   void LexUnexpandedNonComment(Token &Result) {
     do
@@ -1297,7 +1321,7 @@
     while (Result.getKind() == tok::comment);
   }
 
-  /// \brief Parses a simple integer literal to get its numeric value.  Floating
+  /// Parses a simple integer literal to get its numeric value.  Floating
   /// point literals and user defined literals are rejected.  Used primarily to
   /// handle pragmas that accept integer arguments.
   bool parseSimpleIntegerLiteral(Token &Tok, uint64_t &Value);
@@ -1308,7 +1332,7 @@
     MacroExpansionInDirectivesOverride = true;
   }
 
-  /// \brief Peeks ahead N tokens and returns that token without consuming any
+  /// Peeks ahead N tokens and returns that token without consuming any
   /// tokens.
   ///
   /// LookAhead(0) returns the next token that would be returned by Lex(),
@@ -1322,7 +1346,7 @@
       return PeekAhead(N+1);
   }
 
-  /// \brief When backtracking is enabled and tokens are cached,
+  /// When backtracking is enabled and tokens are cached,
   /// this allows to revert a specific number of tokens.
   ///
   /// Note that the number of tokens being reverted should be up to the last
@@ -1337,7 +1361,7 @@
     CachedLexPos -= N;
   }
 
-  /// \brief Enters a token in the token stream to be lexed next.
+  /// Enters a token in the token stream to be lexed next.
   ///
   /// If BackTrack() is called afterwards, the token will remain at the
   /// insertion point.
@@ -1367,18 +1391,18 @@
     return CachedTokens[CachedLexPos-1].getLastLoc();
   }
 
-  /// \brief Whether \p Tok is the most recent token (`CachedLexPos - 1`) in
+  /// Whether \p Tok is the most recent token (`CachedLexPos - 1`) in
   /// CachedTokens.
   bool IsPreviousCachedToken(const Token &Tok) const;
 
-  /// \brief Replace token in `CachedLexPos - 1` in CachedTokens by the tokens
+  /// Replace token in `CachedLexPos - 1` in CachedTokens by the tokens
   /// in \p NewToks.
   ///
   /// Useful when a token needs to be split in smaller ones and CachedTokens
   /// most recent token must to be updated to reflect that.
   void ReplacePreviousCachedToken(ArrayRef<Token> NewToks);
 
-  /// \brief Replace the last token with an annotation token.
+  /// Replace the last token with an annotation token.
   ///
   /// Like AnnotateCachedTokens(), this routine replaces an
   /// already-parsed (and resolved) token with an annotation
@@ -1404,19 +1428,19 @@
       CachedTokens[CachedLexPos-1] = Tok;
   }
 
-  /// \brief Recompute the current lexer kind based on the CurLexer/CurPTHLexer/
+  /// Recompute the current lexer kind based on the CurLexer/CurPTHLexer/
   /// CurTokenLexer pointers.
   void recomputeCurLexerKind();
 
-  /// \brief Returns true if incremental processing is enabled
+  /// Returns true if incremental processing is enabled
   bool isIncrementalProcessingEnabled() const { return IncrementalProcessing; }
 
-  /// \brief Enables the incremental processing
+  /// Enables the incremental processing
   void enableIncrementalProcessing(bool value = true) {
     IncrementalProcessing = value;
   }
-  
-  /// \brief Specify the point at which code-completion will be performed.
+
+  /// Specify the point at which code-completion will be performed.
   ///
   /// \param File the file in which code completion should occur. If
   /// this file is included multiple times, code-completion will
@@ -1433,16 +1457,16 @@
   bool SetCodeCompletionPoint(const FileEntry *File,
                               unsigned Line, unsigned Column);
 
-  /// \brief Determine if we are performing code completion.
+  /// Determine if we are performing code completion.
   bool isCodeCompletionEnabled() const { return CodeCompletionFile != nullptr; }
 
-  /// \brief Returns the location of the code-completion point.
+  /// Returns the location of the code-completion point.
   ///
   /// Returns an invalid location if code-completion is not enabled or the file
   /// containing the code-completion point has not been lexed yet.
   SourceLocation getCodeCompletionLoc() const { return CodeCompletionLoc; }
 
-  /// \brief Returns the start location of the file of code-completion point.
+  /// Returns the start location of the file of code-completion point.
   ///
   /// Returns an invalid location if code-completion is not enabled or the file
   /// containing the code-completion point has not been lexed yet.
@@ -1450,11 +1474,11 @@
     return CodeCompletionFileLoc;
   }
 
-  /// \brief Returns true if code-completion is enabled and we have hit the
+  /// Returns true if code-completion is enabled and we have hit the
   /// code-completion point.
   bool isCodeCompletionReached() const { return CodeCompletionReached; }
 
-  /// \brief Note that we hit the code-completion point.
+  /// Note that we hit the code-completion point.
   void setCodeCompletionReached() {
     assert(isCodeCompletionEnabled() && "Code-completion not enabled!");
     CodeCompletionReached = true;
@@ -1462,7 +1486,7 @@
     getDiagnostics().setSuppressAllDiagnostics(true);
   }
 
-  /// \brief The location of the currently-active \#pragma clang
+  /// The location of the currently-active \#pragma clang
   /// arc_cf_code_audited begin.
   ///
   /// Returns an invalid location if there is no such pragma active.
@@ -1470,13 +1494,13 @@
     return PragmaARCCFCodeAuditedLoc;
   }
 
-  /// \brief Set the location of the currently-active \#pragma clang
+  /// Set the location of the currently-active \#pragma clang
   /// arc_cf_code_audited begin.  An invalid location ends the pragma.
   void setPragmaARCCFCodeAuditedLoc(SourceLocation Loc) {
     PragmaARCCFCodeAuditedLoc = Loc;
   }
 
-  /// \brief The location of the currently-active \#pragma clang
+  /// The location of the currently-active \#pragma clang
   /// assume_nonnull begin.
   ///
   /// Returns an invalid location if there is no such pragma active.
@@ -1484,19 +1508,19 @@
     return PragmaAssumeNonNullLoc;
   }
 
-  /// \brief Set the location of the currently-active \#pragma clang
+  /// Set the location of the currently-active \#pragma clang
   /// assume_nonnull begin.  An invalid location ends the pragma.
   void setPragmaAssumeNonNullLoc(SourceLocation Loc) {
     PragmaAssumeNonNullLoc = Loc;
   }
 
-  /// \brief Set the directory in which the main file should be considered
+  /// Set the directory in which the main file should be considered
   /// to have been found, if it is not a real file.
   void setMainFileDir(const DirectoryEntry *Dir) {
     MainFileDir = Dir;
   }
 
-  /// \brief Instruct the preprocessor to skip part of the main source file.
+  /// Instruct the preprocessor to skip part of the main source file.
   ///
   /// \param Bytes The number of bytes in the preamble to skip.
   ///
@@ -1531,7 +1555,7 @@
     return Lexer::getSpelling(loc, buffer, SourceMgr, LangOpts, invalid);
   }
 
-  /// \brief Return the 'spelling' of the Tok token.
+  /// Return the 'spelling' of the Tok token.
   ///
   /// The spelling of a token is the characters used to represent the token in
   /// the source file after trigraph expansion and escaped-newline folding.  In
@@ -1543,7 +1567,7 @@
     return Lexer::getSpelling(Tok, SourceMgr, LangOpts, Invalid);
   }
 
-  /// \brief Get the spelling of a token into a preallocated buffer, instead
+  /// Get the spelling of a token into a preallocated buffer, instead
   /// of as an std::string.
   ///
   /// The caller is required to allocate enough space for the token, which is
@@ -1560,7 +1584,7 @@
     return Lexer::getSpelling(Tok, Buffer, SourceMgr, LangOpts, Invalid);
   }
 
-  /// \brief Get the spelling of a token into a SmallVector.
+  /// Get the spelling of a token into a SmallVector.
   ///
   /// Note that the returned StringRef may not point to the
   /// supplied buffer if a copy can be avoided.
@@ -1568,14 +1592,14 @@
                         SmallVectorImpl<char> &Buffer,
                         bool *Invalid = nullptr) const;
 
-  /// \brief Relex the token at the specified location.
+  /// Relex the token at the specified location.
   /// \returns true if there was a failure, false on success.
   bool getRawToken(SourceLocation Loc, Token &Result,
                    bool IgnoreWhiteSpace = false) {
     return Lexer::getRawToken(Loc, Result, SourceMgr, LangOpts, IgnoreWhiteSpace);
   }
 
-  /// \brief Given a Token \p Tok that is a numeric constant with length 1,
+  /// Given a Token \p Tok that is a numeric constant with length 1,
   /// return the character.
   char
   getSpellingOfSingleCharacterNumericConstant(const Token &Tok,
@@ -1593,7 +1617,7 @@
     return *SourceMgr.getCharacterData(Tok.getLocation(), Invalid);
   }
 
-  /// \brief Retrieve the name of the immediate macro expansion.
+  /// Retrieve the name of the immediate macro expansion.
   ///
   /// This routine starts from a source location, and finds the name of the
   /// macro responsible for its immediate expansion. It looks through any
@@ -1605,8 +1629,8 @@
     return Lexer::getImmediateMacroName(Loc, SourceMgr, getLangOpts());
   }
 
-  /// \brief Plop the specified string into a scratch buffer and set the
-  /// specified token's location and length to it. 
+  /// Plop the specified string into a scratch buffer and set the
+  /// specified token's location and length to it.
   ///
   /// If specified, the source location provides a location of the expansion
   /// point of the token.
@@ -1614,7 +1638,12 @@
                     SourceLocation ExpansionLocStart = SourceLocation(),
                     SourceLocation ExpansionLocEnd = SourceLocation());
 
-  /// \brief Computes the source location just past the end of the
+  /// Split the first Length characters out of the token starting at TokLoc
+  /// and return a location pointing to the split token. Re-lexing from the
+  /// split token will return the split token rather than the original.
+  SourceLocation SplitToken(SourceLocation TokLoc, unsigned Length);
+
+  /// Computes the source location just past the end of the
   /// token at this source location.
   ///
   /// This routine can be used to produce a source location that
@@ -1633,7 +1662,7 @@
     return Lexer::getLocForEndOfToken(Loc, Offset, SourceMgr, LangOpts);
   }
 
-  /// \brief Returns true if the given MacroID location points at the first
+  /// Returns true if the given MacroID location points at the first
   /// token of the macro expansion.
   ///
   /// \param MacroBegin If non-null and function returns true, it is set to
@@ -1644,7 +1673,7 @@
                                             MacroBegin);
   }
 
-  /// \brief Returns true if the given MacroID location points at the last
+  /// Returns true if the given MacroID location points at the last
   /// token of the macro expansion.
   ///
   /// \param MacroEnd If non-null and function returns true, it is set to
@@ -1654,20 +1683,20 @@
     return Lexer::isAtEndOfMacroExpansion(loc, SourceMgr, LangOpts, MacroEnd);
   }
 
-  /// \brief Print the token to stderr, used for debugging.
+  /// Print the token to stderr, used for debugging.
   void DumpToken(const Token &Tok, bool DumpFlags = false) const;
   void DumpLocation(SourceLocation Loc) const;
   void DumpMacro(const MacroInfo &MI) const;
   void dumpMacroInfo(const IdentifierInfo *II);
 
-  /// \brief Given a location that specifies the start of a
+  /// Given a location that specifies the start of a
   /// token, return a new location that specifies a character within the token.
   SourceLocation AdvanceToTokenCharacter(SourceLocation TokStart,
                                          unsigned Char) const {
     return Lexer::AdvanceToTokenCharacter(TokStart, Char, SourceMgr, LangOpts);
   }
 
-  /// \brief Increment the counters for the number of token paste operations
+  /// Increment the counters for the number of token paste operations
   /// performed.
   ///
   /// If fast was specified, this is a 'fast paste' case we handled.
@@ -1700,13 +1729,13 @@
   llvm::DenseMap<IdentifierInfo*,unsigned> PoisonReasons;
 
 public:
-  /// \brief Specifies the reason for poisoning an identifier.
+  /// Specifies the reason for poisoning an identifier.
   ///
   /// If that identifier is accessed while poisoned, then this reason will be
   /// used instead of the default "poisoned" diagnostic.
   void SetPoisonReason(IdentifierInfo *II, unsigned DiagID);
 
-  /// \brief Display reason for poisoned identifier.
+  /// Display reason for poisoned identifier.
   void HandlePoisonedIdentifier(Token & Tok);
 
   void MaybeHandlePoisonedIdentifier(Token & Identifier) {
@@ -1739,8 +1768,8 @@
 public:
   void PoisonSEHIdentifiers(bool Poison = true); // Borland
 
-  /// \brief Callback invoked when the lexer reads an identifier and has
-  /// filled in the tokens IdentifierInfo member. 
+  /// Callback invoked when the lexer reads an identifier and has
+  /// filled in the tokens IdentifierInfo member.
   ///
   /// This callback potentially macro expands it or turns it into a named
   /// token (like 'for').
@@ -1749,36 +1778,36 @@
   /// lex again.
   bool HandleIdentifier(Token &Identifier);
 
-  /// \brief Callback invoked when the lexer hits the end of the current file.
+  /// Callback invoked when the lexer hits the end of the current file.
   ///
   /// This either returns the EOF token and returns true, or
   /// pops a level off the include stack and returns false, at which point the
   /// client should call lex again.
   bool HandleEndOfFile(Token &Result, bool isEndOfMacro = false);
 
-  /// \brief Callback invoked when the current TokenLexer hits the end of its
+  /// Callback invoked when the current TokenLexer hits the end of its
   /// token stream.
   bool HandleEndOfTokenLexer(Token &Result);
 
-  /// \brief Callback invoked when the lexer sees a # token at the start of a
+  /// Callback invoked when the lexer sees a # token at the start of a
   /// line.
   ///
   /// This consumes the directive, modifies the lexer/preprocessor state, and
   /// advances the lexer(s) so that the next token read is the correct one.
   void HandleDirective(Token &Result);
 
-  /// \brief Ensure that the next token is a tok::eod token.
+  /// Ensure that the next token is a tok::eod token.
   ///
   /// If not, emit a diagnostic and consume up until the eod.
   /// If \p EnableMacros is true, then we consider macros that expand to zero
   /// tokens as being ok.
   void CheckEndOfDirective(const char *Directive, bool EnableMacros = false);
 
-  /// \brief Read and discard all tokens remaining on the current line until
+  /// Read and discard all tokens remaining on the current line until
   /// the tok::eod token is found.
   void DiscardUntilEndOfDirective();
 
-  /// \brief Returns true if the preprocessor has seen a use of
+  /// Returns true if the preprocessor has seen a use of
   /// __DATE__ or __TIME__ in the file so far.
   bool SawDateOrTime() const {
     return DATELoc != SourceLocation() || TIMELoc != SourceLocation();
@@ -1786,14 +1815,14 @@
   unsigned getCounterValue() const { return CounterValue; }
   void setCounterValue(unsigned V) { CounterValue = V; }
 
-  /// \brief Retrieves the module that we're currently building, if any.
+  /// Retrieves the module that we're currently building, if any.
   Module *getCurrentModule();
-  
-  /// \brief Allocate a new MacroInfo object with the provided SourceLocation.
+
+  /// Allocate a new MacroInfo object with the provided SourceLocation.
   MacroInfo *AllocateMacroInfo(SourceLocation L);
 
-  /// \brief Turn the specified lexer token into a fully checked and spelled
-  /// filename, e.g. as an operand of \#include. 
+  /// Turn the specified lexer token into a fully checked and spelled
+  /// filename, e.g. as an operand of \#include.
   ///
   /// The caller is expected to provide a buffer that is large enough to hold
   /// the spelling of the filename, but is also expected to handle the case
@@ -1803,7 +1832,7 @@
   /// in ""'s.
   bool GetIncludeFilenameSpelling(SourceLocation Loc,StringRef &Filename);
 
-  /// \brief Given a "foo" or \<foo> reference, look up the indicated file.
+  /// Given a "foo" or \<foo> reference, look up the indicated file.
   ///
   /// Returns null on failure.  \p isAngled indicates whether the file
   /// reference is for system \#include's or not (i.e. using <> instead of "").
@@ -1816,18 +1845,18 @@
                               ModuleMap::KnownHeader *SuggestedModule,
                               bool *IsMapped, bool SkipCache = false);
 
-  /// \brief Get the DirectoryLookup structure used to find the current
-  /// FileEntry, if CurLexer is non-null and if applicable. 
+  /// Get the DirectoryLookup structure used to find the current
+  /// FileEntry, if CurLexer is non-null and if applicable.
   ///
   /// This allows us to implement \#include_next and find directory-specific
   /// properties.
   const DirectoryLookup *GetCurDirLookup() { return CurDirLookup; }
 
-  /// \brief Return true if we're in the top-level file, not in a \#include.
+  /// Return true if we're in the top-level file, not in a \#include.
   bool isInPrimaryFile() const;
 
-  /// \brief Handle cases where the \#include name is expanded
-  /// from a macro as multiple tokens, which need to be glued together. 
+  /// Handle cases where the \#include name is expanded
+  /// from a macro as multiple tokens, which need to be glued together.
   ///
   /// This occurs for code like:
   /// \code
@@ -1842,7 +1871,7 @@
   bool ConcatenateIncludeName(SmallString<128> &FilenameBuffer,
                               SourceLocation &End);
 
-  /// \brief Lex an on-off-switch (C99 6.10.6p2) and verify that it is
+  /// Lex an on-off-switch (C99 6.10.6p2) and verify that it is
   /// followed by EOD.  Return true if the token is not a valid on-off-switch.
   bool LexOnOffSwitch(tok::OnOffSwitch &OOS);
 
@@ -1891,7 +1920,7 @@
   VisibilityMacroDirective *AllocateVisibilityMacroDirective(SourceLocation Loc,
                                                              bool isPublic);
 
-  /// \brief Lex and validate a macro name, which occurs after a
+  /// Lex and validate a macro name, which occurs after a
   /// \#define or \#undef.
   ///
   /// \param MacroNameTok Token that represents the name defined or undefined.
@@ -1910,7 +1939,7 @@
   ///   - # (stringization) is followed by a macro parameter
   /// \param MacroNameTok - Token that represents the macro name
   /// \param ImmediatelyAfterHeaderGuard - Macro follows an #ifdef header guard
-  /// 
+  ///
   ///  Either returns a pointer to a MacroInfo object OR emits a diagnostic and
   ///  returns a nullptr if an invalid sequence of tokens is encountered.
   MacroInfo *ReadOptionalMacroParameterListAndBody(
@@ -1935,7 +1964,7 @@
                                     bool FoundNonSkipPortion, bool FoundElse,
                                     SourceLocation ElseLoc = SourceLocation());
 
-  /// \brief A fast PTH version of SkipExcludedConditionalBlock.
+  /// A fast PTH version of SkipExcludedConditionalBlock.
   void PTHSkipExcludedConditionalBlock();
 
   /// Information about the result for evaluating an expression for a
@@ -1948,17 +1977,17 @@
     bool IncludedUndefinedIds;
   };
 
-  /// \brief Evaluate an integer constant expression that may occur after a
+  /// Evaluate an integer constant expression that may occur after a
   /// \#if or \#elif directive and return a \p DirectiveEvalResult object.
   ///
   /// If the expression is equivalent to "!defined(X)" return X in IfNDefMacro.
   DirectiveEvalResult EvaluateDirectiveExpression(IdentifierInfo *&IfNDefMacro);
 
-  /// \brief Install the standard preprocessor pragmas:
+  /// Install the standard preprocessor pragmas:
   /// \#pragma GCC poison/system_header/dependency and \#pragma once.
   void RegisterBuiltinPragmas();
 
-  /// \brief Register builtin macros such as __LINE__ with the identifier table.
+  /// Register builtin macros such as __LINE__ with the identifier table.
   void RegisterBuiltinMacros();
 
   /// If an identifier token is read that is to be expanded as a macro, handle
@@ -1966,7 +1995,7 @@
   /// otherwise the caller should lex again.
   bool HandleMacroExpandedIdentifier(Token &Tok, const MacroDefinition &MD);
 
-  /// \brief Cache macro expanded tokens for TokenLexers.
+  /// Cache macro expanded tokens for TokenLexers.
   //
   /// Works like a stack; a TokenLexer adds the macro expanded tokens that is
   /// going to lex in the cache and when it finishes the tokens are removed
@@ -1986,34 +2015,37 @@
   MacroArgs *ReadMacroCallArgumentList(Token &MacroName, MacroInfo *MI,
                                        SourceLocation &ExpansionEnd);
 
-  /// \brief If an identifier token is read that is to be expanded
+  /// If an identifier token is read that is to be expanded
   /// as a builtin macro, handle it and return the next token as 'Tok'.
   void ExpandBuiltinMacro(Token &Tok);
 
-  /// \brief Read a \c _Pragma directive, slice it up, process it, then
+  /// Read a \c _Pragma directive, slice it up, process it, then
   /// return the first token after the directive.
   /// This assumes that the \c _Pragma token has just been read into \p Tok.
   void Handle_Pragma(Token &Tok);
 
-  /// \brief Like Handle_Pragma except the pragma text is not enclosed within
+  /// Like Handle_Pragma except the pragma text is not enclosed within
   /// a string literal.
   void HandleMicrosoft__pragma(Token &Tok);
 
-  /// \brief Add a lexer to the top of the include stack and
+  /// Add a lexer to the top of the include stack and
   /// start lexing tokens from it instead of the current buffer.
   void EnterSourceFileWithLexer(Lexer *TheLexer, const DirectoryLookup *Dir);
 
-  /// \brief Add a lexer to the top of the include stack and
+  /// Add a lexer to the top of the include stack and
   /// start getting tokens from it using the PTH cache.
   void EnterSourceFileWithPTH(PTHLexer *PL, const DirectoryLookup *Dir);
 
-  /// \brief Set the FileID for the preprocessor predefines.
+  /// Set the FileID for the preprocessor predefines.
   void setPredefinesFileID(FileID FID) {
     assert(PredefinesFileID.isInvalid() && "PredefinesFileID already set!");
     PredefinesFileID = FID;
   }
 
-  /// \brief Returns true if we are lexing from a file and not a
+  /// Set the FileID for the PCH through header.
+  void setPCHThroughHeaderFileID(FileID FID);
+
+  /// Returns true if we are lexing from a file and not a
   /// pragma or a macro.
   static bool IsFileLexer(const Lexer* L, const PreprocessorLexer* P) {
     return L ? !L->isPragmaLexer() : P != nullptr;
@@ -2079,12 +2111,12 @@
                                      DiagnosticsEngine &Diags, Module *M);
 
   // Module inclusion testing.
-  /// \brief Find the module that owns the source or header file that
+  /// Find the module that owns the source or header file that
   /// \p Loc points to. If the location is in a file that was included
   /// into a module, or is outside any module, returns nullptr.
   Module *getModuleForLocation(SourceLocation Loc);
 
-  /// \brief We want to produce a diagnostic at location IncLoc concerning a
+  /// We want to produce a diagnostic at location IncLoc concerning a
   /// missing module import.
   ///
   /// \param IncLoc The location at which the missing import was detected.
@@ -2127,7 +2159,7 @@
   }
 
 private:
-  /// \brief After processing predefined file, initialize the conditional stack from
+  /// After processing predefined file, initialize the conditional stack from
   /// the preamble.
   void replayPreambleConditionalStack();
 
@@ -2164,12 +2196,12 @@
   // has inserted some tokens and getCommentRetentionState() is false.
   bool HandleComment(Token &Token, SourceRange Comment);
 
-  /// \brief A macro is used, update information about macros that need unused
+  /// A macro is used, update information about macros that need unused
   /// warnings.
   void markMacroAsUsed(MacroInfo *MI);
 };
 
-/// \brief Abstract base class that describes a handler that will receive
+/// Abstract base class that describes a handler that will receive
 /// source ranges for each of the comments encountered in the source file.
 class CommentHandler {
 public:
@@ -2180,7 +2212,7 @@
   virtual bool HandleComment(Preprocessor &PP, SourceRange Comment) = 0;
 };
 
-/// \brief Registry of pragma handlers added by plugins
+/// Registry of pragma handlers added by plugins
 using PragmaHandlerRegistry = llvm::Registry<PragmaHandler>;
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h b/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
index ff71d11..b619f19 100644
--- a/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
+++ b/linux-x64/clang/include/clang/Lex/PreprocessorLexer.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the PreprocessorLexer interface.
+/// Defines the PreprocessorLexer interface.
 //
 //===----------------------------------------------------------------------===//
 
@@ -39,21 +39,21 @@
   /// The SourceManager FileID corresponding to the file being lexed.
   const FileID FID;
 
-  /// \brief Number of SLocEntries before lexing the file.
+  /// Number of SLocEntries before lexing the file.
   unsigned InitialNumSLocEntries = 0;
 
   //===--------------------------------------------------------------------===//
   // Context-specific lexing flags set by the preprocessor.
   //===--------------------------------------------------------------------===//
 
-  /// \brief True when parsing \#XXX; turns '\\n' into a tok::eod token.
+  /// True when parsing \#XXX; turns '\\n' into a tok::eod token.
   bool ParsingPreprocessorDirective = false;
 
-  /// \brief True after \#include; turns \<xx> into a tok::angle_string_literal
+  /// True after \#include; turns \<xx> into a tok::angle_string_literal
   /// token.
   bool ParsingFilename = false;
 
-  /// \brief True if in raw mode.
+  /// True if in raw mode.
   ///
   /// Raw mode disables interpretation of tokens and is a far faster mode to
   /// lex in than non-raw-mode.  This flag:
@@ -68,11 +68,11 @@
   /// Note that in raw mode that the PP pointer may be null.
   bool LexingRawMode = false;
 
-  /// \brief A state machine that detects the \#ifndef-wrapping a file
+  /// A state machine that detects the \#ifndef-wrapping a file
   /// idiom for the multiple-include optimization.
   MultipleIncludeOpt MIOpt;
 
-  /// \brief Information about the set of \#if/\#ifdef/\#ifndef blocks
+  /// Information about the set of \#if/\#ifdef/\#ifndef blocks
   /// we are currently in.
   SmallVector<PPConditionalInfo, 4> ConditionalStack;
 
@@ -82,7 +82,7 @@
 
   virtual void IndirectLex(Token& Result) = 0;
 
-  /// \brief Return the source location for the next observable location.
+  /// Return the source location for the next observable location.
   virtual SourceLocation getSourceLocation() = 0;
 
   //===--------------------------------------------------------------------===//
@@ -114,7 +114,7 @@
     return false;
   }
 
-  /// \brief Return the top of the conditional stack.
+  /// Return the top of the conditional stack.
   /// \pre This requires that there be a conditional active.
   PPConditionalInfo &peekConditionalLevel() {
     assert(!ConditionalStack.empty() && "No conditionals active!");
@@ -130,23 +130,23 @@
   //===--------------------------------------------------------------------===//
   // Misc. lexing methods.
 
-  /// \brief After the preprocessor has parsed a \#include, lex and
+  /// After the preprocessor has parsed a \#include, lex and
   /// (potentially) macro expand the filename.
   ///
   /// If the sequence parsed is not lexically legal, emit a diagnostic and
   /// return a result EOD token.
   void LexIncludeFilename(Token &Result);
 
-  /// \brief Inform the lexer whether or not we are currently lexing a
+  /// Inform the lexer whether or not we are currently lexing a
   /// preprocessor directive.
   void setParsingPreprocessorDirective(bool f) {
     ParsingPreprocessorDirective = f;
   }
 
-  /// \brief Return true if this lexer is in raw mode or not.
+  /// Return true if this lexer is in raw mode or not.
   bool isLexingRawMode() const { return LexingRawMode; }
 
-  /// \brief Return the preprocessor object for this lexer.
+  /// Return the preprocessor object for this lexer.
   Preprocessor *getPP() const { return PP; }
 
   FileID getFileID() const {
@@ -155,7 +155,7 @@
     return FID;
   }
 
-  /// \brief Number of SLocEntries before lexing the file.
+  /// Number of SLocEntries before lexing the file.
   unsigned getInitialNumSLocEntries() const {
     return InitialNumSLocEntries;
   }
@@ -164,17 +164,17 @@
   /// getFileID(), this only works for lexers with attached preprocessors.
   const FileEntry *getFileEntry() const;
 
-  /// \brief Iterator that traverses the current stack of preprocessor
+  /// Iterator that traverses the current stack of preprocessor
   /// conditional directives (\#if/\#ifdef/\#ifndef).
   using conditional_iterator =
       SmallVectorImpl<PPConditionalInfo>::const_iterator;
 
-  conditional_iterator conditional_begin() const { 
-    return ConditionalStack.begin(); 
+  conditional_iterator conditional_begin() const {
+    return ConditionalStack.begin();
   }
 
-  conditional_iterator conditional_end() const { 
-    return ConditionalStack.end(); 
+  conditional_iterator conditional_end() const {
+    return ConditionalStack.end();
   }
 
   void setConditionalLevels(ArrayRef<PPConditionalInfo> CL) {
diff --git a/linux-x64/clang/include/clang/Lex/PreprocessorOptions.h b/linux-x64/clang/include/clang/Lex/PreprocessorOptions.h
index 55fc305..5134aea 100644
--- a/linux-x64/clang/include/clang/Lex/PreprocessorOptions.h
+++ b/linux-x64/clang/include/clang/Lex/PreprocessorOptions.h
@@ -13,7 +13,7 @@
 #include "clang/Basic/LLVM.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringSet.h"
-#include <memory> 
+#include <memory>
 #include <set>
 #include <string>
 #include <utility>
@@ -27,17 +27,17 @@
 
 namespace clang {
 
-/// \brief Enumerate the kinds of standard library that 
+/// Enumerate the kinds of standard library that
 enum ObjCXXARCStandardLibraryKind {
   ARCXX_nolib,
 
-  /// \brief libc++
+  /// libc++
   ARCXX_libcxx,
 
-  /// \brief libstdc++
+  /// libstdc++
   ARCXX_libstdcxx
 };
-  
+
 /// PreprocessorOptions - This class is used for passing the various options
 /// used in preprocessor initialization to InitializePreprocessor().
 class PreprocessorOptions {
@@ -46,48 +46,60 @@
   std::vector<std::string> Includes;
   std::vector<std::string> MacroIncludes;
 
-  /// \brief Initialize the preprocessor with the compiler and target specific
+  /// Initialize the preprocessor with the compiler and target specific
   /// predefines.
   bool UsePredefines = true;
 
-  /// \brief Whether we should maintain a detailed record of all macro
+  /// Whether we should maintain a detailed record of all macro
   /// definitions and expansions.
   bool DetailedRecord = false;
 
+  /// If non-empty, the filename used in an #include directive in the primary
+  /// source file (or command-line preinclude) that is used to implement
+  /// MSVC-style precompiled headers. When creating a PCH, after the #include
+  /// of this header, the PCH generation stops. When using a PCH, tokens are
+  /// skipped until after an #include of this header is seen.
+  std::string PCHThroughHeader;
+
   /// The implicit PCH included at the start of the translation unit, or empty.
   std::string ImplicitPCHInclude;
 
-  /// \brief Headers that will be converted to chained PCHs in memory.
+  /// Headers that will be converted to chained PCHs in memory.
   std::vector<std::string> ChainedIncludes;
 
-  /// \brief When true, disables most of the normal validation performed on
+  /// When true, disables most of the normal validation performed on
   /// precompiled headers.
   bool DisablePCHValidation = false;
 
-  /// \brief When true, a PCH with compiler errors will not be rejected.
+  /// When true, a PCH with compiler errors will not be rejected.
   bool AllowPCHWithCompilerErrors = false;
 
-  /// \brief Dump declarations that are deserialized from PCH, for testing.
+  /// Dump declarations that are deserialized from PCH, for testing.
   bool DumpDeserializedPCHDecls = false;
 
-  /// \brief This is a set of names for decls that we do not want to be
+  /// This is a set of names for decls that we do not want to be
   /// deserialized, and we emit an error if they are; for testing purposes.
   std::set<std::string> DeserializedPCHDeclsToErrorOn;
 
-  /// \brief If non-zero, the implicit PCH include is actually a precompiled
+  /// If non-zero, the implicit PCH include is actually a precompiled
   /// preamble that covers this number of bytes in the main source file.
   ///
   /// The boolean indicates whether the preamble ends at the start of a new
   /// line.
   std::pair<unsigned, bool> PrecompiledPreambleBytes;
 
-  /// \brief True indicates that a preamble is being generated.
+  /// True indicates that a preamble is being generated.
   ///
   /// When the lexer is done, one of the things that need to be preserved is the
   /// conditional #if stack, so the ASTWriter/ASTReader can save/restore it when
   /// processing the rest of the file.
   bool GeneratePreamble = false;
 
+  /// Whether to write comment locations into the PCH when building it.
+  /// Reading the comments from the PCH can be a performance hit even if the
+  /// clients don't use them.
+  bool WriteCommentListToPCH = true;
+
   /// The implicit PTH input included at the start of the translation unit, or
   /// empty.
   std::string ImplicitPTHInclude;
@@ -105,35 +117,35 @@
   /// When enabled, the preprocessor will construct editor placeholder tokens.
   bool LexEditorPlaceholders = true;
 
-  /// \brief True if the SourceManager should report the original file name for
+  /// True if the SourceManager should report the original file name for
   /// contents of files that were remapped to other files. Defaults to true.
   bool RemappedFilesKeepOriginalName = true;
 
-  /// \brief The set of file remappings, which take existing files on
+  /// The set of file remappings, which take existing files on
   /// the system (the first part of each pair) and gives them the
   /// contents of other files on the system (the second part of each
   /// pair).
   std::vector<std::pair<std::string, std::string>> RemappedFiles;
 
-  /// \brief The set of file-to-buffer remappings, which take existing files
+  /// The set of file-to-buffer remappings, which take existing files
   /// on the system (the first part of each pair) and gives them the contents
   /// of the specified memory buffer (the second part of each pair).
   std::vector<std::pair<std::string, llvm::MemoryBuffer *>> RemappedFileBuffers;
 
-  /// \brief Whether the compiler instance should retain (i.e., not free)
+  /// Whether the compiler instance should retain (i.e., not free)
   /// the buffers associated with remapped files.
   ///
   /// This flag defaults to false; it can be set true only through direct
-  /// manipulation of the compiler invocation object, in cases where the 
+  /// manipulation of the compiler invocation object, in cases where the
   /// compiler invocation and its buffers will be reused.
   bool RetainRemappedFileBuffers = false;
-  
-  /// \brief The Objective-C++ ARC standard library that we should support,
+
+  /// The Objective-C++ ARC standard library that we should support,
   /// by providing appropriate definitions to retrofit the standard library
   /// with support for lifetime-qualified pointers.
   ObjCXXARCStandardLibraryKind ObjCXXARCStandardLibrary = ARCXX_nolib;
-    
-  /// \brief Records the set of modules
+
+  /// Records the set of modules
   class FailedModulesSet {
     llvm::StringSet<> Failed;
 
@@ -146,8 +158,8 @@
       Failed.insert(module);
     }
   };
-  
-  /// \brief The set of modules that failed to build.
+
+  /// The set of modules that failed to build.
   ///
   /// This pointer will be shared among all of the compiler instances created
   /// to (re)build modules, so that once a module fails to build anywhere,
@@ -173,8 +185,8 @@
     RemappedFiles.clear();
     RemappedFileBuffers.clear();
   }
-  
-  /// \brief Reset any options that are not considered when building a
+
+  /// Reset any options that are not considered when building a
   /// module.
   void resetNonModularOptions() {
     Includes.clear();
diff --git a/linux-x64/clang/include/clang/Lex/Token.h b/linux-x64/clang/include/clang/Lex/Token.h
index 02a1fef..85bef72 100644
--- a/linux-x64/clang/include/clang/Lex/Token.h
+++ b/linux-x64/clang/include/clang/Lex/Token.h
@@ -73,7 +73,7 @@
   enum TokenFlags {
     StartOfLine   = 0x01,  // At start of line or only after whitespace
                            // (considering the line after macro expansion).
-    LeadingSpace  = 0x02,  // Whitespace exists before this token (considering 
+    LeadingSpace  = 0x02,  // Whitespace exists before this token (considering
                            // whitespace after macro expansion).
     DisableExpand = 0x04,  // This identifier may never be macro expanded.
     NeedsCleaning = 0x08,  // Contained an escaped newline or trigraph.
@@ -102,24 +102,24 @@
     return is(K1) || isOneOf(K2, Ks...);
   }
 
-  /// \brief Return true if this is a raw identifier (when lexing
+  /// Return true if this is a raw identifier (when lexing
   /// in raw mode) or a non-keyword identifier (when lexing in non-raw mode).
   bool isAnyIdentifier() const {
     return tok::isAnyIdentifier(getKind());
   }
 
-  /// \brief Return true if this is a "literal", like a numeric
+  /// Return true if this is a "literal", like a numeric
   /// constant, string, etc.
   bool isLiteral() const {
     return tok::isLiteral(getKind());
   }
 
-  /// \brief Return true if this is any of tok::annot_* kind tokens.
+  /// Return true if this is any of tok::annot_* kind tokens.
   bool isAnnotation() const {
     return tok::isAnnotation(getKind());
   }
 
-  /// \brief Return a source location identifier for the specified
+  /// Return a source location identifier for the specified
   /// offset in the current file.
   SourceLocation getLocation() const {
     return SourceLocation::getFromRawEncoding(Loc);
@@ -153,7 +153,7 @@
                           : getLocation().getLocWithOffset(getLength());
   }
 
-  /// \brief SourceRange of the group of tokens that this annotation token
+  /// SourceRange of the group of tokens that this annotation token
   /// represents.
   SourceRange getAnnotationRange() const {
     return SourceRange(getLocation(), getAnnotationEndLoc());
@@ -165,7 +165,7 @@
 
   const char *getName() const { return tok::getTokenName(Kind); }
 
-  /// \brief Reset all flags to cleared.
+  /// Reset all flags to cleared.
   void startToken() {
     Kind = tok::unknown;
     Flags = 0;
@@ -230,22 +230,22 @@
     PtrData = val;
   }
 
-  /// \brief Set the specified flag.
+  /// Set the specified flag.
   void setFlag(TokenFlags Flag) {
     Flags |= Flag;
   }
 
-  /// \brief Get the specified flag.
+  /// Get the specified flag.
   bool getFlag(TokenFlags Flag) const {
     return (Flags & Flag) != 0;
   }
 
-  /// \brief Unset the specified flag.
+  /// Unset the specified flag.
   void clearFlag(TokenFlags Flag) {
     Flags &= ~Flag;
   }
 
-  /// \brief Return the internal represtation of the flags.
+  /// Return the internal represtation of the flags.
   ///
   /// This is only intended for low-level operations such as writing tokens to
   /// disk.
@@ -253,7 +253,7 @@
     return Flags;
   }
 
-  /// \brief Set a flag to either true or false.
+  /// Set a flag to either true or false.
   void setFlagValue(TokenFlags Flag, bool Val) {
     if (Val)
       setFlag(Flag);
@@ -265,28 +265,28 @@
   ///
   bool isAtStartOfLine() const { return getFlag(StartOfLine); }
 
-  /// \brief Return true if this token has whitespace before it.
+  /// Return true if this token has whitespace before it.
   ///
   bool hasLeadingSpace() const { return getFlag(LeadingSpace); }
 
-  /// \brief Return true if this identifier token should never
+  /// Return true if this identifier token should never
   /// be expanded in the future, due to C99 6.10.3.4p2.
   bool isExpandDisabled() const { return getFlag(DisableExpand); }
 
-  /// \brief Return true if we have an ObjC keyword identifier.
+  /// Return true if we have an ObjC keyword identifier.
   bool isObjCAtKeyword(tok::ObjCKeywordKind objcKey) const;
 
-  /// \brief Return the ObjC keyword kind.
+  /// Return the ObjC keyword kind.
   tok::ObjCKeywordKind getObjCKeywordID() const;
 
-  /// \brief Return true if this token has trigraphs or escaped newlines in it.
+  /// Return true if this token has trigraphs or escaped newlines in it.
   bool needsCleaning() const { return getFlag(NeedsCleaning); }
 
-  /// \brief Return true if this token has an empty macro before it.
+  /// Return true if this token has an empty macro before it.
   ///
   bool hasLeadingEmptyMacro() const { return getFlag(LeadingEmptyMacro); }
 
-  /// \brief Return true if this token is a string or character literal which
+  /// Return true if this token is a string or character literal which
   /// has a ud-suffix.
   bool hasUDSuffix() const { return getFlag(HasUDSuffix); }
 
@@ -308,21 +308,21 @@
   bool isEditorPlaceholder() const { return getFlag(IsEditorPlaceholder); }
 };
 
-/// \brief Information about the conditional stack (\#if directives)
+/// Information about the conditional stack (\#if directives)
 /// currently active.
 struct PPConditionalInfo {
-  /// \brief Location where the conditional started.
+  /// Location where the conditional started.
   SourceLocation IfLoc;
 
-  /// \brief True if this was contained in a skipping directive, e.g.,
+  /// True if this was contained in a skipping directive, e.g.,
   /// in a "\#if 0" block.
   bool WasSkipping;
 
-  /// \brief True if we have emitted tokens already, and now we're in
+  /// True if we have emitted tokens already, and now we're in
   /// an \#else block or something.  Only useful in Skipping blocks.
   bool FoundNonSkip;
 
-  /// \brief True if we've seen a \#else in this block.  If so,
+  /// True if we've seen a \#else in this block.  If so,
   /// \#elif/\#else directives are not allowed.
   bool FoundElse;
 };
diff --git a/linux-x64/clang/include/clang/Lex/TokenConcatenation.h b/linux-x64/clang/include/clang/Lex/TokenConcatenation.h
index a2d98b0..60c182b 100644
--- a/linux-x64/clang/include/clang/Lex/TokenConcatenation.h
+++ b/linux-x64/clang/include/clang/Lex/TokenConcatenation.h
@@ -58,8 +58,8 @@
   public:
     TokenConcatenation(Preprocessor &PP);
 
-    bool AvoidConcat(const Token &PrevPrevTok, 
-                     const Token &PrevTok, 
+    bool AvoidConcat(const Token &PrevPrevTok,
+                     const Token &PrevTok,
                      const Token &Tok) const;
 
   private:
diff --git a/linux-x64/clang/include/clang/Lex/TokenLexer.h b/linux-x64/clang/include/clang/Lex/TokenLexer.h
index b8b0bea..98935ad 100644
--- a/linux-x64/clang/include/clang/Lex/TokenLexer.h
+++ b/linux-x64/clang/include/clang/Lex/TokenLexer.h
@@ -62,18 +62,18 @@
   /// expanded.
   SourceLocation ExpandLocStart, ExpandLocEnd;
 
-  /// \brief Source location pointing at the source location entry chunk that
+  /// Source location pointing at the source location entry chunk that
   /// was reserved for the current macro expansion.
   SourceLocation MacroExpansionStart;
-  
-  /// \brief The offset of the macro expansion in the
+
+  /// The offset of the macro expansion in the
   /// "source location address space".
   unsigned MacroStartSLocOffset;
 
-  /// \brief Location of the macro definition.
+  /// Location of the macro definition.
   SourceLocation MacroDefStart;
 
-  /// \brief Length of the macro definition.
+  /// Length of the macro definition.
   unsigned MacroDefLength;
 
   /// Lexical information about the expansion point of the macro: the identifier
@@ -198,7 +198,7 @@
   /// the tokens just expanded through __VA_OPT__ processing.  These (sub)
   /// sequence of tokens are folded into one stringified token.
   ///
-  /// \param[in] VCtx - contains relevent contextual information about the
+  /// \param[in] VCtx - contains relevant contextual information about the
   /// state of the tokens around and including the __VA_OPT__ token, necessary
   /// for stringification.
   void stringifyVAOPTContents(SmallVectorImpl<Token> &ReplacementToks,
@@ -216,12 +216,12 @@
   /// first token on the next line.
   void HandleMicrosoftCommentPaste(Token &Tok, SourceLocation OpLoc);
 
-  /// \brief If \p loc is a FileID and points inside the current macro
+  /// If \p loc is a FileID and points inside the current macro
   /// definition, returns the appropriate source location pointing at the
   /// macro expansion source location entry.
   SourceLocation getExpansionLocForMacroDefLoc(SourceLocation loc) const;
 
-  /// \brief Creates SLocEntries and updates the locations of macro argument
+  /// Creates SLocEntries and updates the locations of macro argument
   /// tokens to their new expanded locations.
   ///
   /// \param ArgIdSpellLoc the location of the macro argument id inside the
diff --git a/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h b/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
index db1ce0e..3a7a955 100644
--- a/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
+++ b/linux-x64/clang/include/clang/Lex/VariadicMacroSupport.h
@@ -66,15 +66,15 @@
     ~VariadicMacroScopeGuard() { exitScope(); }
   };
 
-  /// \brief A class for tracking whether we're inside a VA_OPT during a
+  /// A class for tracking whether we're inside a VA_OPT during a
   /// traversal of the tokens of a variadic macro definition.
   class VAOptDefinitionContext {
     /// Contains all the locations of so far unmatched lparens.
     SmallVector<SourceLocation, 8> UnmatchedOpeningParens;
-    
+
     const IdentifierInfo *const Ident__VA_OPT__;
-    
-    
+
+
   public:
     VAOptDefinitionContext(Preprocessor &PP)
         : Ident__VA_OPT__(PP.Ident__VA_OPT__) {}
@@ -86,12 +86,12 @@
     /// Returns true if we have seen the __VA_OPT__ and '(' but before having
     /// seen the matching ')'.
     bool isInVAOpt() const { return UnmatchedOpeningParens.size(); }
-    
+
     /// Call this function as soon as you see __VA_OPT__ and '('.
     void sawVAOptFollowedByOpeningParens(const SourceLocation LParenLoc) {
       assert(!isInVAOpt() && "Must NOT be within VAOPT context to call this");
       UnmatchedOpeningParens.push_back(LParenLoc);
-      
+
     }
 
     SourceLocation getUnmatchedOpeningParenLoc() const {
@@ -107,16 +107,16 @@
       UnmatchedOpeningParens.pop_back();
       return !UnmatchedOpeningParens.size();
     }
-    
+
     /// Call this function each time an lparen is seen.
     void sawOpeningParen(SourceLocation LParenLoc) {
       assert(isInVAOpt() && "Must be within VAOPT context to call this");
       UnmatchedOpeningParens.push_back(LParenLoc);
     }
-    
+
   };
 
-  /// \brief A class for tracking whether we're inside a VA_OPT during a
+  /// A class for tracking whether we're inside a VA_OPT during a
   /// traversal of the tokens of a macro during macro expansion.
   class VAOptExpansionContext : VAOptDefinitionContext {
 
@@ -133,11 +133,11 @@
     int NumOfTokensPriorToVAOpt = -1;
 
     unsigned LeadingSpaceForStringifiedToken : 1;
-    
+
     unsigned StringifyBefore : 1;
     unsigned CharifyBefore : 1;
-    
-    
+
+
     bool hasStringifyBefore() const {
       assert(!isReset() &&
              "Must only be called if the state has not been reset");
@@ -169,14 +169,14 @@
 
     void sawHashOrHashAtBefore(const bool HasLeadingSpace,
                                const bool IsHashAt) {
-      
+
       StringifyBefore = !IsHashAt;
       CharifyBefore = IsHashAt;
       LeadingSpaceForStringifiedToken = HasLeadingSpace;
     }
 
-    
-    
+
+
     bool hasCharifyBefore() const {
       assert(!isReset() &&
              "Must only be called if the state has not been reset");
@@ -185,13 +185,13 @@
     bool hasStringifyOrCharifyBefore() const {
       return hasStringifyBefore() || hasCharifyBefore();
     }
-    
+
     unsigned int getNumberOfTokensPriorToVAOpt() const {
       assert(!isReset() &&
              "Must only be called if the state has not been reset");
       return NumOfTokensPriorToVAOpt;
     }
-    
+
     bool getLeadingSpaceForStringifiedToken() const {
       assert(hasStringifyBefore() &&
              "Must only be called if this has been marked for stringification");
@@ -219,7 +219,7 @@
     using VAOptDefinitionContext::isInVAOpt;
     using VAOptDefinitionContext::sawClosingParen;
     using VAOptDefinitionContext::sawOpeningParen;
-    
+
   };
 }  // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/Parse/AttrParserStringSwitches.inc b/linux-x64/clang/include/clang/Parse/AttrParserStringSwitches.inc
index 053e605..1913bb9 100644
--- a/linux-x64/clang/include/clang/Parse/AttrParserStringSwitches.inc
+++ b/linux-x64/clang/include/clang/Parse/AttrParserStringSwitches.inc
@@ -48,6 +48,8 @@
 .Case("loop", true)
 .Case("unroll", true)
 .Case("nounroll", true)
+.Case("unroll_and_jam", true)
+.Case("nounroll_and_jam", true)
 .Case("interrupt", true)
 .Case("mode", true)
 .Case("declare simd", true)
@@ -63,6 +65,7 @@
 .Case("ownership_takes", true)
 .Case("param_typestate", true)
 .Case("pcs", true)
+.Case("interrupt", true)
 .Case("return_typestate", true)
 .Case("set_typestate", true)
 .Case("test_typestate", true)
@@ -71,6 +74,11 @@
 .Case("visibility", true)
 #endif // CLANG_ATTR_IDENTIFIER_ARG_LIST
 
+#if defined(CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST)
+.Case("cpu_dispatch", true)
+.Case("cpu_specific", true)
+#endif // CLANG_ATTR_VARIADIC_IDENTIFIER_ARG_LIST
+
 #if defined(CLANG_ATTR_TYPE_ARG_LIST)
 .Case("iboutletcollection", true)
 .Case("vec_type_hint", true)
diff --git a/linux-x64/clang/include/clang/Parse/ParseAST.h b/linux-x64/clang/include/clang/Parse/ParseAST.h
index 34c9681..f6e78ac 100644
--- a/linux-x64/clang/include/clang/Parse/ParseAST.h
+++ b/linux-x64/clang/include/clang/Parse/ParseAST.h
@@ -23,7 +23,7 @@
   class CodeCompleteConsumer;
   class Sema;
 
-  /// \brief Parse the entire file specified, notifying the ASTConsumer as
+  /// Parse the entire file specified, notifying the ASTConsumer as
   /// the file is parsed.
   ///
   /// This operation inserts the parsed decls into the translation
@@ -42,7 +42,7 @@
                 CodeCompleteConsumer *CompletionConsumer = nullptr,
                 bool SkipFunctionBodies = false);
 
-  /// \brief Parse the main file known to the preprocessor, producing an 
+  /// Parse the main file known to the preprocessor, producing an
   /// abstract syntax tree.
   void ParseAST(Sema &S, bool PrintStats = false,
                 bool SkipFunctionBodies = false);
diff --git a/linux-x64/clang/include/clang/Parse/Parser.h b/linux-x64/clang/include/clang/Parse/Parser.h
index 0df9f3f..1d6849c 100644
--- a/linux-x64/clang/include/clang/Parse/Parser.h
+++ b/linux-x64/clang/include/clang/Parse/Parser.h
@@ -15,6 +15,7 @@
 #define LLVM_CLANG_PARSE_PARSER_H
 
 #include "clang/AST/Availability.h"
+#include "clang/Basic/BitmaskEnum.h"
 #include "clang/Basic/OpenMPKinds.h"
 #include "clang/Basic/OperatorPrecedence.h"
 #include "clang/Basic/Specifiers.h"
@@ -45,7 +46,6 @@
   class ColonProtectionRAIIObject;
   class InMessageExpressionRAIIObject;
   class PoisonSEHIdentifiersRAIIObject;
-  class VersionTuple;
   class OMPClause;
   class ObjCTypeParamList;
   class ObjCTypeParameter;
@@ -121,25 +121,25 @@
   /// Objective-C contextual keywords.
   mutable IdentifierInfo *Ident_instancetype;
 
-  /// \brief Identifier for "introduced".
+  /// Identifier for "introduced".
   IdentifierInfo *Ident_introduced;
 
-  /// \brief Identifier for "deprecated".
+  /// Identifier for "deprecated".
   IdentifierInfo *Ident_deprecated;
 
-  /// \brief Identifier for "obsoleted".
+  /// Identifier for "obsoleted".
   IdentifierInfo *Ident_obsoleted;
 
-  /// \brief Identifier for "unavailable".
+  /// Identifier for "unavailable".
   IdentifierInfo *Ident_unavailable;
-  
-  /// \brief Identifier for "message".
+
+  /// Identifier for "message".
   IdentifierInfo *Ident_message;
 
-  /// \brief Identifier for "strict".
+  /// Identifier for "strict".
   IdentifierInfo *Ident_strict;
 
-  /// \brief Identifier for "replacement".
+  /// Identifier for "replacement".
   IdentifierInfo *Ident_replacement;
 
   /// Identifiers used by the 'external_source_symbol' attribute.
@@ -185,6 +185,8 @@
   std::unique_ptr<PragmaHandler> LoopHintHandler;
   std::unique_ptr<PragmaHandler> UnrollHintHandler;
   std::unique_ptr<PragmaHandler> NoUnrollHintHandler;
+  std::unique_ptr<PragmaHandler> UnrollAndJamHintHandler;
+  std::unique_ptr<PragmaHandler> NoUnrollAndJamHintHandler;
   std::unique_ptr<PragmaHandler> FPHandler;
   std::unique_ptr<PragmaHandler> STDCFENVHandler;
   std::unique_ptr<PragmaHandler> STDCCXLIMITHandler;
@@ -205,7 +207,7 @@
   /// ColonProtectionRAIIObject RAII object.
   bool ColonIsSacred;
 
-  /// \brief When true, we are directly inside an Objective-C message
+  /// When true, we are directly inside an Objective-C message
   /// send expression.
   ///
   /// This is managed by the \c InMessageExpressionRAIIObject class, and
@@ -215,7 +217,7 @@
   /// The "depth" of the template parameters currently being parsed.
   unsigned TemplateParameterDepth;
 
-  /// \brief RAII class that manages the template parameter depth.
+  /// RAII class that manages the template parameter depth.
   class TemplateParameterDepthRAII {
     unsigned &Depth;
     unsigned AddedLevels;
@@ -238,16 +240,100 @@
     unsigned getDepth() const { return Depth; }
   };
 
-  /// Factory object for creating AttributeList objects.
+  /// Factory object for creating ParsedAttr objects.
   AttributeFactory AttrFactory;
 
-  /// \brief Gathers and cleans up TemplateIdAnnotations when parsing of a
+  /// Gathers and cleans up TemplateIdAnnotations when parsing of a
   /// top-level declaration is finished.
   SmallVector<TemplateIdAnnotation *, 16> TemplateIds;
 
-  /// \brief Identifiers which have been declared within a tentative parse.
+  /// Identifiers which have been declared within a tentative parse.
   SmallVector<IdentifierInfo *, 8> TentativelyDeclaredIdentifiers;
 
+  /// Tracker for '<' tokens that might have been intended to be treated as an
+  /// angle bracket instead of a less-than comparison.
+  ///
+  /// This happens when the user intends to form a template-id, but typoes the
+  /// template-name or forgets a 'template' keyword for a dependent template
+  /// name.
+  ///
+  /// We track these locations from the point where we see a '<' with a
+  /// name-like expression on its left until we see a '>' or '>>' that might
+  /// match it.
+  struct AngleBracketTracker {
+    /// Flags used to rank candidate template names when there is more than one
+    /// '<' in a scope.
+    enum Priority : unsigned short {
+      /// A non-dependent name that is a potential typo for a template name.
+      PotentialTypo = 0x0,
+      /// A dependent name that might instantiate to a template-name.
+      DependentName = 0x2,
+
+      /// A space appears before the '<' token.
+      SpaceBeforeLess = 0x0,
+      /// No space before the '<' token
+      NoSpaceBeforeLess = 0x1,
+
+      LLVM_MARK_AS_BITMASK_ENUM(/*LargestValue*/ DependentName)
+    };
+
+    struct Loc {
+      Expr *TemplateName;
+      SourceLocation LessLoc;
+      AngleBracketTracker::Priority Priority;
+      unsigned short ParenCount, BracketCount, BraceCount;
+
+      bool isActive(Parser &P) const {
+        return P.ParenCount == ParenCount && P.BracketCount == BracketCount &&
+               P.BraceCount == BraceCount;
+      }
+
+      bool isActiveOrNested(Parser &P) const {
+        return isActive(P) || P.ParenCount > ParenCount ||
+               P.BracketCount > BracketCount || P.BraceCount > BraceCount;
+      }
+    };
+
+    SmallVector<Loc, 8> Locs;
+
+    /// Add an expression that might have been intended to be a template name.
+    /// In the case of ambiguity, we arbitrarily select the innermost such
+    /// expression, for example in 'foo < bar < baz', 'bar' is the current
+    /// candidate. No attempt is made to track that 'foo' is also a candidate
+    /// for the case where we see a second suspicious '>' token.
+    void add(Parser &P, Expr *TemplateName, SourceLocation LessLoc,
+             Priority Prio) {
+      if (!Locs.empty() && Locs.back().isActive(P)) {
+        if (Locs.back().Priority <= Prio) {
+          Locs.back().TemplateName = TemplateName;
+          Locs.back().LessLoc = LessLoc;
+          Locs.back().Priority = Prio;
+        }
+      } else {
+        Locs.push_back({TemplateName, LessLoc, Prio,
+                        P.ParenCount, P.BracketCount, P.BraceCount});
+      }
+    }
+
+    /// Mark the current potential missing template location as having been
+    /// handled (this happens if we pass a "corresponding" '>' or '>>' token
+    /// or leave a bracket scope).
+    void clear(Parser &P) {
+      while (!Locs.empty() && Locs.back().isActiveOrNested(P))
+        Locs.pop_back();
+    }
+
+    /// Get the current enclosing expression that might hve been intended to be
+    /// a template name.
+    Loc *getCurrent(Parser &P) {
+      if (!Locs.empty() && Locs.back().isActive(P))
+        return &Locs.back();
+      return nullptr;
+    }
+  };
+
+  AngleBracketTracker AngleBrackets;
+
   IdentifierInfo *getSEHExceptKeyword();
 
   /// True if we are within an Objective-C container while parsing C-like decls.
@@ -400,11 +486,11 @@
            isTokenBrace() || Tok.is(tok::code_completion) || Tok.isAnnotation();
   }
 
-  /// \brief Returns true if the current token is '=' or is a type of '='.
+  /// Returns true if the current token is '=' or is a type of '='.
   /// For typos, give a fixit to '='
   bool isTokenEqualOrEqualTypo();
 
-  /// \brief Return the current token to the token stream and make the given
+  /// Return the current token to the token stream and make the given
   /// token the current token.
   void UnconsumeToken(Token &Consumed) {
       Token Next = Tok;
@@ -427,8 +513,10 @@
     assert(isTokenParen() && "wrong consume method");
     if (Tok.getKind() == tok::l_paren)
       ++ParenCount;
-    else if (ParenCount)
+    else if (ParenCount) {
+      AngleBrackets.clear(*this);
       --ParenCount;       // Don't let unbalanced )'s drive the count negative.
+    }
     PrevTokLocation = Tok.getLocation();
     PP.Lex(Tok);
     return PrevTokLocation;
@@ -440,8 +528,10 @@
     assert(isTokenBracket() && "wrong consume method");
     if (Tok.getKind() == tok::l_square)
       ++BracketCount;
-    else if (BracketCount)
+    else if (BracketCount) {
+      AngleBrackets.clear(*this);
       --BracketCount;     // Don't let unbalanced ]'s drive the count negative.
+    }
 
     PrevTokLocation = Tok.getLocation();
     PP.Lex(Tok);
@@ -454,8 +544,10 @@
     assert(isTokenBrace() && "wrong consume method");
     if (Tok.getKind() == tok::l_brace)
       ++BraceCount;
-    else if (BraceCount)
+    else if (BraceCount) {
+      AngleBrackets.clear(*this);
       --BraceCount;     // Don't let unbalanced }'s drive the count negative.
+    }
 
     PrevTokLocation = Tok.getLocation();
     PP.Lex(Tok);
@@ -474,7 +566,7 @@
     return PrevTokLocation;
   }
 
-  /// \brief Consume the current code-completion token.
+  /// Consume the current code-completion token.
   ///
   /// This routine can be called to consume the code-completion token and
   /// continue processing in special cases where \c cutOffParsing() isn't
@@ -493,7 +585,7 @@
   /// \returns the source location of the code-completion token.
   SourceLocation handleUnexpectedCodeCompletionToken();
 
-  /// \brief Abruptly cut off parsing; mainly used when we have reached the
+  /// Abruptly cut off parsing; mainly used when we have reached the
   /// code-completion point.
   void cutOffParsing() {
     if (PP.isCodeCompletionEnabled())
@@ -502,7 +594,7 @@
     Tok.setKind(tok::eof);
   }
 
-  /// \brief Determine if we're at the end of the file or at a transition
+  /// Determine if we're at the end of the file or at a transition
   /// between modules.
   bool isEofOrEom() {
     tok::TokenKind Kind = Tok.getKind();
@@ -510,34 +602,34 @@
            Kind == tok::annot_module_end || Kind == tok::annot_module_include;
   }
 
-  /// \brief Checks if the \p Level is valid for use in a fold expression.
+  /// Checks if the \p Level is valid for use in a fold expression.
   bool isFoldOperator(prec::Level Level) const;
 
-  /// \brief Checks if the \p Kind is a valid operator for fold expressions.
+  /// Checks if the \p Kind is a valid operator for fold expressions.
   bool isFoldOperator(tok::TokenKind Kind) const;
 
-  /// \brief Initialize all pragma handlers.
+  /// Initialize all pragma handlers.
   void initializePragmaHandlers();
 
-  /// \brief Destroy and reset all pragma handlers.
+  /// Destroy and reset all pragma handlers.
   void resetPragmaHandlers();
 
-  /// \brief Handle the annotation token produced for #pragma unused(...)
+  /// Handle the annotation token produced for #pragma unused(...)
   void HandlePragmaUnused();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma GCC visibility...
   void HandlePragmaVisibility();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma pack...
   void HandlePragmaPack();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma ms_struct...
   void HandlePragmaMSStruct();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma comment...
   void HandlePragmaMSComment();
 
@@ -553,43 +645,43 @@
   bool HandlePragmaMSInitSeg(StringRef PragmaName,
                              SourceLocation PragmaLocation);
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma align...
   void HandlePragmaAlign();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma clang __debug dump...
   void HandlePragmaDump();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma weak id...
   void HandlePragmaWeak();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma weak id = id...
   void HandlePragmaWeakAlias();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma redefine_extname...
   void HandlePragmaRedefineExtname();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma STDC FP_CONTRACT...
   void HandlePragmaFPContract();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma clang fp ...
   void HandlePragmaFP();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma OPENCL EXTENSION...
   void HandlePragmaOpenCLExtension();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma clang __debug captured
   StmtResult HandlePragmaCaptured();
 
-  /// \brief Handle the annotation token produced for
+  /// Handle the annotation token produced for
   /// #pragma clang loop and #pragma unroll.
   bool HandlePragmaLoopHint(LoopHint &Hint);
 
@@ -628,13 +720,13 @@
     Tok.setAnnotationValue(T.getAsOpaquePtr());
   }
 
-  /// \brief Read an already-translated primary expression out of an annotation
+  /// Read an already-translated primary expression out of an annotation
   /// token.
   static ExprResult getExprAnnotation(const Token &Tok) {
     return ExprResult::getFromOpaquePointer(Tok.getAnnotationValue());
   }
 
-  /// \brief Set the primary expression corresponding to the given annotation
+  /// Set the primary expression corresponding to the given annotation
   /// token.
   static void setExprAnnotation(Token &Tok, ExprResult ER) {
     Tok.setAnnotationValue(ER.getAsOpaquePointer());
@@ -718,7 +810,7 @@
   /// otherwise emits a diagnostic and returns true.
   bool TryKeywordIdentFallback(bool DisableKeyword);
 
-  /// \brief Get the TemplateIdAnnotation from the token.
+  /// Get the TemplateIdAnnotation from the token.
   TemplateIdAnnotation *takeTemplateIdAnnotation(const Token &tok);
 
   /// TentativeParsingAction - An object that is used as a kind of "tentative
@@ -816,14 +908,14 @@
                         unsigned Diag = diag::err_expected,
                         StringRef DiagMsg = "");
 
-  /// \brief The parser expects a semicolon and, if present, will consume it.
+  /// The parser expects a semicolon and, if present, will consume it.
   ///
   /// If the next token is not a semicolon, this emits the specified diagnostic,
   /// or, if there's just some closing-delimiter noise (e.g., ')' or ']') prior
   /// to the semicolon, consumes that extra token.
   bool ExpectAndConsumeSemi(unsigned DiagID);
 
-  /// \brief The kind of extra semi diagnostic to emit.
+  /// The kind of extra semi diagnostic to emit.
   enum ExtraSemiKind {
     OutsideFunction = 0,
     InsideStruct = 1,
@@ -831,7 +923,7 @@
     AfterMemberFunctionDefinition = 3
   };
 
-  /// \brief Consume any extra semi-colons until the end of the line.
+  /// Consume any extra semi-colons until the end of the line.
   void ConsumeExtraSemi(ExtraSemiKind Kind, unsigned TST = TST_unspecified);
 
   /// Return false if the next token is an identifier. An 'expected identifier'
@@ -895,7 +987,7 @@
   void ExitScope();
 
 private:
-  /// \brief RAII object used to modify the scope flags for the current scope.
+  /// RAII object used to modify the scope flags for the current scope.
   class ParseScopeFlags {
     Scope *CurScope;
     unsigned OldFlags;
@@ -924,10 +1016,10 @@
 
 public:
 
-  /// \brief Control flags for SkipUntil functions.
+  /// Control flags for SkipUntil functions.
   enum SkipUntilFlags {
     StopAtSemi = 1 << 0,  ///< Stop skipping at semicolon
-    /// \brief Stop skipping at specified token, but don't skip the token itself
+    /// Stop skipping at specified token, but don't skip the token itself
     StopBeforeMatch = 1 << 1,
     StopAtCodeCompletion = 1 << 2 ///< Stop at code completion
   };
@@ -1049,7 +1141,7 @@
     Decl *D;
     CachedTokens Toks;
 
-    /// \brief Whether this member function had an associated template
+    /// Whether this member function had an associated template
     /// scope. When true, D is a template declaration.
     /// otherwise, it is a member function declaration.
     bool TemplateScope;
@@ -1095,9 +1187,9 @@
     /// Method - The method declaration.
     Decl *Method;
 
-    /// \brief Whether this member function had an associated template
+    /// Whether this member function had an associated template
     /// scope. When true, D is a template declaration.
-    /// othewise, it is a member function declaration.
+    /// otherwise, it is a member function declaration.
     bool TemplateScope;
 
     /// DefaultArgs - Contains the parameters of the function and
@@ -1106,8 +1198,8 @@
     /// method will be stored so that they can be reintroduced into
     /// scope at the appropriate times.
     SmallVector<LateParsedDefaultArgument, 8> DefaultArgs;
-  
-    /// \brief The set of tokens that make up an exception-specification that
+
+    /// The set of tokens that make up an exception-specification that
     /// has not yet been parsed.
     CachedTokens *ExceptionSpecTokens;
   };
@@ -1135,11 +1227,11 @@
   /// C++ class, its method declarations that contain parts that won't be
   /// parsed until after the definition is completed (C++ [class.mem]p2),
   /// the method declarations and possibly attached inline definitions
-  /// will be stored here with the tokens that will be parsed to create those 
+  /// will be stored here with the tokens that will be parsed to create those
   /// entities.
   typedef SmallVector<LateParsedDeclaration*,2> LateParsedDeclarationsContainer;
 
-  /// \brief Representation of a class that has been parsed, including
+  /// Representation of a class that has been parsed, including
   /// any member function declarations or definitions that need to be
   /// parsed after the corresponding top-level class is complete.
   struct ParsingClass {
@@ -1147,19 +1239,19 @@
       : TopLevelClass(TopLevelClass), TemplateScope(false),
         IsInterface(IsInterface), TagOrTemplate(TagOrTemplate) { }
 
-    /// \brief Whether this is a "top-level" class, meaning that it is
+    /// Whether this is a "top-level" class, meaning that it is
     /// not nested within another class.
     bool TopLevelClass : 1;
 
-    /// \brief Whether this class had an associated template
+    /// Whether this class had an associated template
     /// scope. When true, TagOrTemplate is a template declaration;
-    /// othewise, it is a tag declaration.
+    /// otherwise, it is a tag declaration.
     bool TemplateScope : 1;
 
-    /// \brief Whether this class is an __interface.
+    /// Whether this class is an __interface.
     bool IsInterface : 1;
 
-    /// \brief The class or class template whose definition we are parsing.
+    /// The class or class template whose definition we are parsing.
     Decl *TagOrTemplate;
 
     /// LateParsedDeclarations - Method declarations, inline definitions and
@@ -1168,7 +1260,7 @@
     LateParsedDeclarationsContainer LateParsedDeclarations;
   };
 
-  /// \brief The stack of classes that is currently being
+  /// The stack of classes that is currently being
   /// parsed. Nested and local classes will be pushed onto this stack
   /// when they are parsed, and removed afterward.
   std::stack<ParsingClass *> ClassStack;
@@ -1178,7 +1270,7 @@
     return *ClassStack.top();
   }
 
-  /// \brief RAII object used to manage the parsing of a class definition.
+  /// RAII object used to manage the parsing of a class definition.
   class ParsingClassDefinition {
     Parser &P;
     bool Popped;
@@ -1191,7 +1283,7 @@
         State(P.PushParsingClass(TagOrTemplate, TopLevelClass, IsInterface)) {
     }
 
-    /// \brief Pop this class of the stack.
+    /// Pop this class of the stack.
     void Pop() {
       assert(!Popped && "Nested class has already been popped");
       Popped = true;
@@ -1204,7 +1296,7 @@
     }
   };
 
-  /// \brief Contains information about any template-specific
+  /// Contains information about any template-specific
   /// information that has been parsed prior to parsing declaration
   /// specifiers.
   struct ParsedTemplateInfo {
@@ -1224,31 +1316,31 @@
         ExternLoc(ExternLoc), TemplateLoc(TemplateLoc),
         LastParameterListWasEmpty(false){ }
 
-    /// \brief The kind of template we are parsing.
+    /// The kind of template we are parsing.
     enum {
-      /// \brief We are not parsing a template at all.
+      /// We are not parsing a template at all.
       NonTemplate = 0,
-      /// \brief We are parsing a template declaration.
+      /// We are parsing a template declaration.
       Template,
-      /// \brief We are parsing an explicit specialization.
+      /// We are parsing an explicit specialization.
       ExplicitSpecialization,
-      /// \brief We are parsing an explicit instantiation.
+      /// We are parsing an explicit instantiation.
       ExplicitInstantiation
     } Kind;
 
-    /// \brief The template parameter lists, for template declarations
+    /// The template parameter lists, for template declarations
     /// and explicit specializations.
     TemplateParameterLists *TemplateParams;
 
-    /// \brief The location of the 'extern' keyword, if any, for an explicit
+    /// The location of the 'extern' keyword, if any, for an explicit
     /// instantiation
     SourceLocation ExternLoc;
 
-    /// \brief The location of the 'template' keyword, for an explicit
+    /// The location of the 'template' keyword, for an explicit
     /// instantiation.
     SourceLocation TemplateLoc;
 
-    /// \brief Whether the last template parameter list was empty.
+    /// Whether the last template parameter list was empty.
     bool LastParameterListWasEmpty;
 
     SourceRange getSourceRange() const LLVM_READONLY;
@@ -1271,11 +1363,11 @@
   };
 
   NamedDecl *ParseCXXInlineMethodDef(AccessSpecifier AS,
-                                AttributeList *AccessAttrs,
-                                ParsingDeclarator &D,
-                                const ParsedTemplateInfo &TemplateInfo,
-                                const VirtSpecifiers& VS,
-                                SourceLocation PureSpecLoc);
+                                     ParsedAttributes &AccessAttrs,
+                                     ParsingDeclarator &D,
+                                     const ParsedTemplateInfo &TemplateInfo,
+                                     const VirtSpecifiers &VS,
+                                     SourceLocation PureSpecLoc);
   void ParseCXXNonStaticMemberInitializer(Decl *VarD);
   void ParseLexedAttributes(ParsingClass &Class);
   void ParseLexedAttributeList(LateParsedAttrList &LAs, Decl *D,
@@ -1316,6 +1408,15 @@
 
     SourceRange Range;
   };
+  struct ParsedAttributesViewWithRange : ParsedAttributesView {
+    ParsedAttributesViewWithRange() : ParsedAttributesView() {}
+    void clearListOnly() {
+      ParsedAttributesView::clearListOnly();
+      Range = SourceRange();
+    }
+
+    SourceRange Range;
+  };
 
   DeclGroupPtrTy ParseExternalDeclaration(ParsedAttributesWithRange &attrs,
                                           ParsingDeclSpec *DS = nullptr);
@@ -1479,6 +1580,7 @@
   ExprResult ParseConstantExpressionInExprEvalContext(
       TypeCastState isTypeCast = NotTypeCast);
   ExprResult ParseConstantExpression(TypeCastState isTypeCast = NotTypeCast);
+  ExprResult ParseCaseExpression(SourceLocation CaseLoc);
   ExprResult ParseConstraintExpression();
   // Expr that doesn't include commas.
   ExprResult ParseAssignmentExpression(TypeCastState isTypeCast = NotTypeCast);
@@ -1517,6 +1619,14 @@
   }
 
   bool diagnoseUnknownTemplateId(ExprResult TemplateName, SourceLocation Less);
+  void checkPotentialAngleBracket(ExprResult &PotentialTemplateName);
+  bool checkPotentialAngleBracketDelimiter(const AngleBracketTracker::Loc &,
+                                           const Token &OpToken);
+  bool checkPotentialAngleBracketDelimiter(const Token &OpToken) {
+    if (auto *Info = AngleBrackets.getCurrent(*this))
+      return checkPotentialAngleBracketDelimiter(*Info, OpToken);
+    return false;
+  }
 
   ExprResult ParsePostfixExpressionSuffix(ExprResult LHS);
   ExprResult ParseUnaryExprOrTypeTraitExpression();
@@ -1545,6 +1655,7 @@
   /// ParenParseOption - Control what ParseParenExpression will parse.
   enum ParenParseOption {
     SimpleExpr,      // Only parse '(' expression ')'
+    FoldExpr,        // Also allow fold-expression <anything>
     CompoundStmt,    // Also allow '(' compound-statement ')'
     CompoundLiteral, // Also allow '(' type-name ')' '{' ... '}'
     CastExpr         // Also allow '(' type-name ')' <anything>
@@ -1565,7 +1676,7 @@
   ExprResult ParseStringLiteralExpression(bool AllowUserDefinedLiteral = false);
 
   ExprResult ParseGenericSelectionExpression();
-  
+
   ExprResult ParseObjCBoolLiteral();
 
   ExprResult ParseFoldExpression(ExprResult LHS, BalancedDelimiterTracker &T);
@@ -1727,7 +1838,7 @@
       SourceLocation LBracloc, SourceLocation SuperLoc,
       ParsedType ReceiverType, Expr *ReceiverExpr);
   bool ParseObjCXXMessageReceiver(bool &IsExpr, void *&TypeOrExpr);
-    
+
   //===--------------------------------------------------------------------===//
   // C99 6.8: Statements and Blocks.
 
@@ -1742,11 +1853,11 @@
   StmtResult ParseStatement(SourceLocation *TrailingElseLoc = nullptr,
                             bool AllowOpenMPStandalone = false);
   enum AllowedConstructsKind {
-    /// \brief Allow any declarations, statements, OpenMP directives.
+    /// Allow any declarations, statements, OpenMP directives.
     ACK_Any,
-    /// \brief Allow only statements and non-standalone OpenMP directives.
+    /// Allow only statements and non-standalone OpenMP directives.
     ACK_StatementsOpenMPNonStandalone,
-    /// \brief Allow statements and all executable OpenMP directives
+    /// Allow statements and all executable OpenMP directives
     ACK_StatementsOpenMPAnyExecutable
   };
   StmtResult
@@ -1787,34 +1898,34 @@
                                  SourceLocation *TrailingElseLoc,
                                  ParsedAttributesWithRange &Attrs);
 
-  /// \brief Describes the behavior that should be taken for an __if_exists
+  /// Describes the behavior that should be taken for an __if_exists
   /// block.
   enum IfExistsBehavior {
-    /// \brief Parse the block; this code is always used.
+    /// Parse the block; this code is always used.
     IEB_Parse,
-    /// \brief Skip the block entirely; this code is never used.
+    /// Skip the block entirely; this code is never used.
     IEB_Skip,
-    /// \brief Parse the block as a dependent block, which may be used in
+    /// Parse the block as a dependent block, which may be used in
     /// some template instantiations but not others.
     IEB_Dependent
   };
 
-  /// \brief Describes the condition of a Microsoft __if_exists or
+  /// Describes the condition of a Microsoft __if_exists or
   /// __if_not_exists block.
   struct IfExistsCondition {
-    /// \brief The location of the initial keyword.
+    /// The location of the initial keyword.
     SourceLocation KeywordLoc;
-    /// \brief Whether this is an __if_exists block (rather than an
+    /// Whether this is an __if_exists block (rather than an
     /// __if_not_exists block).
     bool IsIfExists;
 
-    /// \brief Nested-name-specifier preceding the name.
+    /// Nested-name-specifier preceding the name.
     CXXScopeSpec SS;
 
-    /// \brief The name we're looking for.
+    /// The name we're looking for.
     UnqualifiedId Name;
 
-    /// \brief The behavior of this __if_exists or __if_not_exists block
+    /// The behavior of this __if_exists or __if_not_exists block
     /// should.
     IfExistsBehavior Behavior;
   };
@@ -1823,7 +1934,8 @@
   void ParseMicrosoftIfExistsStatement(StmtVector &Stmts);
   void ParseMicrosoftIfExistsExternalDeclaration();
   void ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType,
-                                              AccessSpecifier& CurAS);
+                                              ParsedAttributes &AccessAttrs,
+                                              AccessSpecifier &CurAS);
   bool ParseMicrosoftIfExistsBraceInitializer(ExprVector &InitExprs,
                                               bool &InitExprsOk);
   bool ParseAsmOperandsOpt(SmallVectorImpl<IdentifierInfo *> &Names,
@@ -1947,7 +2059,7 @@
   Decl *ParseFunctionStatementBody(Decl *Decl, ParseScope &BodyScope);
   Decl *ParseFunctionTryBlock(Decl *Decl, ParseScope &BodyScope);
 
-  /// \brief When in code-completion, skip parsing of the function/method body
+  /// When in code-completion, skip parsing of the function/method body
   /// unless the body contains the code-completion point.
   ///
   /// \returns true if the function body was skipped.
@@ -1955,7 +2067,7 @@
 
   bool ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS,
                         const ParsedTemplateInfo &TemplateInfo,
-                        AccessSpecifier AS, DeclSpecContext DSC, 
+                        AccessSpecifier AS, DeclSpecContext DSC,
                         ParsedAttributesWithRange &Attrs);
   DeclSpecContext
   getDeclSpecContextFromDeclaratorContext(DeclaratorContext Context);
@@ -1995,7 +2107,7 @@
   /// specifier or if we're not sure.
   bool isKnownToBeTypeSpecifier(const Token &Tok) const;
 
-  /// \brief Return true if we know that we are definitely looking at a
+  /// Return true if we know that we are definitely looking at a
   /// decl-specifier, and isn't part of an expression such as a function-style
   /// cast. Return false if it's no a decl-specifier, or we're not sure.
   bool isKnownToBeDeclarationSpecifier() {
@@ -2023,19 +2135,19 @@
     return isDeclarationSpecifier(true);
   }
 
-  /// \brief Determine whether this is a C++1z for-range-identifier.
+  /// Determine whether this is a C++1z for-range-identifier.
   bool isForRangeIdentifier();
 
-  /// \brief Determine whether we are currently at the start of an Objective-C
+  /// Determine whether we are currently at the start of an Objective-C
   /// class message that appears to be missing the open bracket '['.
   bool isStartOfObjCClassMessageMissingOpenBracket();
 
-  /// \brief Starting with a scope specifier, identifier, or
+  /// Starting with a scope specifier, identifier, or
   /// template-id that refers to the current class, determine whether
   /// this is a constructor declarator.
   bool isConstructorDeclarator(bool Unqualified, bool DeductionGuide = false);
 
-  /// \brief Specifies the context in which type-id/expression
+  /// Specifies the context in which type-id/expression
   /// disambiguation will occur.
   enum TentativeCXXTypeIdContext {
     TypeIdInParens,
@@ -2058,7 +2170,7 @@
     return isTypeIdInParens(isAmbiguous);
   }
 
-  /// \brief Checks if the current tokens form type-id or expression.
+  /// Checks if the current tokens form type-id or expression.
   /// It is similar to isTypeIdInParens but does not suppose that type-id
   /// is in parenthesis.
   bool isTypeIdUnambiguously() {
@@ -2083,7 +2195,7 @@
   /// isCXXFunctionDeclarator - Disambiguates between a function declarator or
   /// a constructor-style initializer, when parsing declaration statements.
   /// Returns true for function declarator and false for constructor-style
-  /// initializer. Sets 'IsAmbiguous' to true to indicate that this declaration 
+  /// initializer. Sets 'IsAmbiguous' to true to indicate that this declaration
   /// might be a constructor-style initializer.
   /// If during the disambiguation process a parsing error is encountered,
   /// the function returns true to let the declaration parsing code handle it.
@@ -2096,7 +2208,7 @@
     InitStmtDecl,  ///< Disambiguated as a simple-declaration init-statement.
     Error          ///< Can't be any of the above!
   };
-  /// \brief Disambiguates between the different kinds of things that can happen
+  /// Disambiguates between the different kinds of things that can happen
   /// after 'if (' or 'switch ('. This could be one of two different kinds of
   /// declaration (depending on whether there is a ';' later) or an expression.
   ConditionOrInitStatement
@@ -2114,7 +2226,7 @@
     True, False, Ambiguous, Error
   };
 
-  /// \brief Based only on the given token kind, determine whether we know that
+  /// Based only on the given token kind, determine whether we know that
   /// we're at the start of an expression or a type-specifier-seq (which may
   /// be an expression, in C++).
   ///
@@ -2142,7 +2254,7 @@
   /// a type-specifier other than a cv-qualifier.
   bool isCXXDeclarationSpecifierAType();
 
-  /// \brief Determine whether an identifier has been tentatively declared as a
+  /// Determine whether an identifier has been tentatively declared as a
   /// non-type. Such tentative declarations should not be found to name a type
   /// during a tentative parse, but also should not be annotated as a non-type.
   bool isTentativelyDeclared(IdentifierInfo *II);
@@ -2210,16 +2322,25 @@
 
   void stripTypeAttributesOffDeclSpec(ParsedAttributesWithRange &Attrs,
                                       DeclSpec &DS, Sema::TagUseKind TUK);
-  
+
   // FixItLoc = possible correct location for the attributes
-  void ProhibitAttributes(ParsedAttributesWithRange &attrs,
+  void ProhibitAttributes(ParsedAttributesWithRange &Attrs,
                           SourceLocation FixItLoc = SourceLocation()) {
-    if (!attrs.Range.isValid()) return;
-    DiagnoseProhibitedAttributes(attrs, FixItLoc);
-    attrs.clear();
+    if (Attrs.Range.isInvalid())
+      return;
+    DiagnoseProhibitedAttributes(Attrs.Range, FixItLoc);
+    Attrs.clear();
   }
-  void DiagnoseProhibitedAttributes(ParsedAttributesWithRange &attrs, 
-    SourceLocation FixItLoc);
+
+  void ProhibitAttributes(ParsedAttributesViewWithRange &Attrs,
+                          SourceLocation FixItLoc = SourceLocation()) {
+    if (Attrs.Range.isInvalid())
+      return;
+    DiagnoseProhibitedAttributes(Attrs.Range, FixItLoc);
+    Attrs.clearListOnly();
+  }
+  void DiagnoseProhibitedAttributes(const SourceRange &Range,
+                                    SourceLocation FixItLoc);
 
   // Forbid C++11 and C2x attributes that appear on certain syntactic locations
   // which standard permits but we don't supported yet, for example, attributes
@@ -2227,16 +2348,16 @@
   void ProhibitCXX11Attributes(ParsedAttributesWithRange &Attrs,
                                unsigned DiagID);
 
-  /// \brief Skip C++11 and C2x attributes and return the end location of the
+  /// Skip C++11 and C2x attributes and return the end location of the
   /// last one.
   /// \returns SourceLocation() if there are no attributes.
   SourceLocation SkipCXX11Attributes();
 
-  /// \brief Diagnose and skip C++11 and C2x attributes that appear in syntactic
+  /// Diagnose and skip C++11 and C2x attributes that appear in syntactic
   /// locations where attributes are not allowed.
   void DiagnoseAndSkipCXX11Attributes();
 
-  /// \brief Parses syntax-generic attribute arguments for attributes which are
+  /// Parses syntax-generic attribute arguments for attributes which are
   /// known to the implementation, and adds them to the given ParsedAttributes
   /// list with the given attribute syntax. Returns the number of arguments
   /// parsed for the attribute.
@@ -2244,7 +2365,7 @@
   ParseAttributeArgsCommon(IdentifierInfo *AttrName, SourceLocation AttrNameLoc,
                            ParsedAttributes &Attrs, SourceLocation *EndLoc,
                            IdentifierInfo *ScopeName, SourceLocation ScopeLoc,
-                           AttributeList::Syntax Syntax);
+                           ParsedAttr::Syntax Syntax);
 
   void MaybeParseGNUAttributes(Declarator &D,
                                LateParsedAttrList *LateAttrs = nullptr) {
@@ -2267,19 +2388,16 @@
                           Declarator *D = nullptr);
   void ParseGNUAttributeArgs(IdentifierInfo *AttrName,
                              SourceLocation AttrNameLoc,
-                             ParsedAttributes &Attrs,
-                             SourceLocation *EndLoc,
-                             IdentifierInfo *ScopeName,
-                             SourceLocation ScopeLoc,
-                             AttributeList::Syntax Syntax,
-                             Declarator *D);
+                             ParsedAttributes &Attrs, SourceLocation *EndLoc,
+                             IdentifierInfo *ScopeName, SourceLocation ScopeLoc,
+                             ParsedAttr::Syntax Syntax, Declarator *D);
   IdentifierLoc *ParseIdentifierLoc();
 
   unsigned
   ParseClangAttributeArgs(IdentifierInfo *AttrName, SourceLocation AttrNameLoc,
                           ParsedAttributes &Attrs, SourceLocation *EndLoc,
                           IdentifierInfo *ScopeName, SourceLocation ScopeLoc,
-                          AttributeList::Syntax Syntax);
+                          ParsedAttr::Syntax Syntax);
 
   void MaybeParseCXX11Attributes(Declarator &D) {
     if (standardAttributesAllowed() && isCXX11AttributeSpecifier()) {
@@ -2309,7 +2427,7 @@
                                     SourceLocation *EndLoc = nullptr);
   void ParseCXX11Attributes(ParsedAttributesWithRange &attrs,
                             SourceLocation *EndLoc = nullptr);
-  /// \brief Parses a C++11 (or C2x)-style attribute argument list. Returns true
+  /// Parses a C++11 (or C2x)-style attribute argument list. Returns true
   /// if this results in adding an attribute to the ParsedAttributes list.
   bool ParseCXX11AttributeArgs(IdentifierInfo *AttrName,
                                SourceLocation AttrNameLoc,
@@ -2345,7 +2463,7 @@
   void ParseBorlandTypeAttributes(ParsedAttributes &attrs);
   void ParseOpenCLKernelAttributes(ParsedAttributes &attrs);
   void ParseOpenCLQualifiers(ParsedAttributes &Attrs);
-  /// \brief Parses opencl_unroll_hint attribute if language is OpenCL v2.0
+  /// Parses opencl_unroll_hint attribute if language is OpenCL v2.0
   /// or higher.
   /// \return false if error happens.
   bool MaybeParseOpenCLUnrollHintAttribute(ParsedAttributes &Attrs) {
@@ -2353,7 +2471,7 @@
       return ParseOpenCLUnrollHintAttribute(Attrs);
     return true;
   }
-  /// \brief Parses opencl_unroll_hint attribute.
+  /// Parses opencl_unroll_hint attribute.
   /// \return false if error happens.
   bool ParseOpenCLUnrollHintAttribute(ParsedAttributes &Attrs);
   void ParseNullabilityTypeSpecifiers(ParsedAttributes &attrs);
@@ -2365,7 +2483,7 @@
                                   SourceLocation *endLoc,
                                   IdentifierInfo *ScopeName,
                                   SourceLocation ScopeLoc,
-                                  AttributeList::Syntax Syntax);
+                                  ParsedAttr::Syntax Syntax);
 
   Optional<AvailabilitySpec> ParseAvailabilitySpec();
   ExprResult ParseAvailabilityCheckExpr(SourceLocation StartLoc);
@@ -2376,7 +2494,7 @@
                                           SourceLocation *EndLoc,
                                           IdentifierInfo *ScopeName,
                                           SourceLocation ScopeLoc,
-                                          AttributeList::Syntax Syntax);
+                                          ParsedAttr::Syntax Syntax);
 
   void ParseObjCBridgeRelatedAttribute(IdentifierInfo &ObjCBridgeRelated,
                                        SourceLocation ObjCBridgeRelatedLoc,
@@ -2384,7 +2502,7 @@
                                        SourceLocation *endLoc,
                                        IdentifierInfo *ScopeName,
                                        SourceLocation ScopeLoc,
-                                       AttributeList::Syntax Syntax);
+                                       ParsedAttr::Syntax Syntax);
 
   void ParseTypeTagForDatatypeAttribute(IdentifierInfo &AttrName,
                                         SourceLocation AttrNameLoc,
@@ -2392,15 +2510,13 @@
                                         SourceLocation *EndLoc,
                                         IdentifierInfo *ScopeName,
                                         SourceLocation ScopeLoc,
-                                        AttributeList::Syntax Syntax);
+                                        ParsedAttr::Syntax Syntax);
 
-  void ParseAttributeWithTypeArg(IdentifierInfo &AttrName,
-                                 SourceLocation AttrNameLoc,
-                                 ParsedAttributes &Attrs,
-                                 SourceLocation *EndLoc,
-                                 IdentifierInfo *ScopeName,
-                                 SourceLocation ScopeLoc,
-                                 AttributeList::Syntax Syntax);
+  void
+  ParseAttributeWithTypeArg(IdentifierInfo &AttrName,
+                            SourceLocation AttrNameLoc, ParsedAttributes &Attrs,
+                            SourceLocation *EndLoc, IdentifierInfo *ScopeName,
+                            SourceLocation ScopeLoc, ParsedAttr::Syntax Syntax);
 
   void ParseTypeofSpecifier(DeclSpec &DS);
   SourceLocation ParseDecltypeSpecifier(DeclSpec &DS);
@@ -2544,12 +2660,11 @@
   struct UsingDeclarator {
     SourceLocation TypenameLoc;
     CXXScopeSpec SS;
-    SourceLocation TemplateKWLoc;
     UnqualifiedId Name;
     SourceLocation EllipsisLoc;
 
     void clear() {
-      TypenameLoc = TemplateKWLoc = EllipsisLoc = SourceLocation();
+      TypenameLoc = EllipsisLoc = SourceLocation();
       SS.clear();
       Name.clear();
     }
@@ -2577,7 +2692,7 @@
   void ParseClassSpecifier(tok::TokenKind TagTokKind, SourceLocation TagLoc,
                            DeclSpec &DS, const ParsedTemplateInfo &TemplateInfo,
                            AccessSpecifier AS, bool EnteringContext,
-                           DeclSpecContext DSC, 
+                           DeclSpecContext DSC,
                            ParsedAttributesWithRange &Attributes);
   void SkipCXXMemberSpecification(SourceLocation StartLoc,
                                   SourceLocation AttrFixitLoc,
@@ -2597,7 +2712,7 @@
   void MaybeParseAndDiagnoseDeclSpecAfterCXX11VirtSpecifierSeq(Declarator &D,
                                                                VirtSpecifiers &VS);
   DeclGroupPtrTy ParseCXXClassMemberDeclaration(
-      AccessSpecifier AS, AttributeList *Attr,
+      AccessSpecifier AS, ParsedAttributes &Attr,
       const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
       ParsingDeclRAIIObject *DiagsFromTParams = nullptr);
   DeclGroupPtrTy ParseCXXClassMemberDeclarationWithPragmas(
@@ -2634,18 +2749,18 @@
   DeclGroupPtrTy ParseOMPDeclareSimdClauses(DeclGroupPtrTy Ptr,
                                             CachedTokens &Toks,
                                             SourceLocation Loc);
-  /// \brief Parses declarative OpenMP directives.
+  /// Parses declarative OpenMP directives.
   DeclGroupPtrTy ParseOpenMPDeclarativeDirectiveWithExtDecl(
       AccessSpecifier &AS, ParsedAttributesWithRange &Attrs,
       DeclSpec::TST TagType = DeclSpec::TST_unspecified,
       Decl *TagDecl = nullptr);
-  /// \brief Parse 'omp declare reduction' construct.
+  /// Parse 'omp declare reduction' construct.
   DeclGroupPtrTy ParseOpenMPDeclareReductionDirective(AccessSpecifier AS);
   /// Parses initializer for provided omp_priv declaration inside the reduction
   /// initializer.
   void ParseOpenMPReductionInitializerForDecl(VarDecl *OmpPrivParm);
 
-  /// \brief Parses simple list of variables.
+  /// Parses simple list of variables.
   ///
   /// \param Kind Kind of the directive.
   /// \param Callback Callback function to be called for the list elements.
@@ -2657,7 +2772,7 @@
       const llvm::function_ref<void(CXXScopeSpec &, DeclarationNameInfo)> &
           Callback,
       bool AllowScopeSpecifier);
-  /// \brief Parses declarative or executable directive.
+  /// Parses declarative or executable directive.
   ///
   /// \param Allowed ACK_Any, if any directives are allowed,
   /// ACK_StatementsOpenMPAnyExecutable - if any executable directives are
@@ -2666,7 +2781,7 @@
   ///
   StmtResult
   ParseOpenMPDeclarativeOrExecutableDirective(AllowedConstructsKind Allowed);
-  /// \brief Parses clause of kind \a CKind for directive of a kind \a Kind.
+  /// Parses clause of kind \a CKind for directive of a kind \a Kind.
   ///
   /// \param DKind Kind of current directive.
   /// \param CKind Kind of current clause.
@@ -2675,7 +2790,7 @@
   ///
   OMPClause *ParseOpenMPClause(OpenMPDirectiveKind DKind,
                                OpenMPClauseKind CKind, bool FirstClause);
-  /// \brief Parses clause with a single expression of a kind \a Kind.
+  /// Parses clause with a single expression of a kind \a Kind.
   ///
   /// \param Kind Kind of current clause.
   /// \param ParseOnly true to skip the clause's semantic actions and return
@@ -2683,14 +2798,14 @@
   ///
   OMPClause *ParseOpenMPSingleExprClause(OpenMPClauseKind Kind,
                                          bool ParseOnly);
-  /// \brief Parses simple clause of a kind \a Kind.
+  /// Parses simple clause of a kind \a Kind.
   ///
   /// \param Kind Kind of current clause.
   /// \param ParseOnly true to skip the clause's semantic actions and return
   /// nullptr.
   ///
   OMPClause *ParseOpenMPSimpleClause(OpenMPClauseKind Kind, bool ParseOnly);
-  /// \brief Parses clause with a single expression and an additional argument
+  /// Parses clause with a single expression and an additional argument
   /// of a kind \a Kind.
   ///
   /// \param Kind Kind of current clause.
@@ -2699,14 +2814,14 @@
   ///
   OMPClause *ParseOpenMPSingleExprWithArgClause(OpenMPClauseKind Kind,
                                                 bool ParseOnly);
-  /// \brief Parses clause without any additional arguments.
+  /// Parses clause without any additional arguments.
   ///
   /// \param Kind Kind of current clause.
   /// \param ParseOnly true to skip the clause's semantic actions and return
   /// nullptr.
   ///
   OMPClause *ParseOpenMPClause(OpenMPClauseKind Kind, bool ParseOnly = false);
-  /// \brief Parses clause with the list of variables of a kind \a Kind.
+  /// Parses clause with the list of variables of a kind \a Kind.
   ///
   /// \param Kind Kind of current clause.
   /// \param ParseOnly true to skip the clause's semantic actions and return
@@ -2725,6 +2840,7 @@
   struct OpenMPVarListDataTy {
     Expr *TailExpr = nullptr;
     SourceLocation ColonLoc;
+    SourceLocation RLoc;
     CXXScopeSpec ReductionIdScopeSpec;
     DeclarationNameInfo ReductionId;
     OpenMPDependClauseKind DepKind = OMPC_DEPEND_unknown;
@@ -2744,7 +2860,7 @@
                           bool AllowConstructorName,
                           bool AllowDeductionGuide,
                           ParsedType ObjectType,
-                          SourceLocation& TemplateKWLoc,
+                          SourceLocation *TemplateKWLoc,
                           UnqualifiedId &Result);
 
 private:
@@ -2753,20 +2869,17 @@
 
   // C++ 14.1: Template Parameters [temp.param]
   Decl *ParseDeclarationStartingWithTemplate(DeclaratorContext Context,
-                                          SourceLocation &DeclEnd,
-                                          AccessSpecifier AS = AS_none,
-                                          AttributeList *AccessAttrs = nullptr);
+                                             SourceLocation &DeclEnd,
+                                             ParsedAttributes &AccessAttrs,
+                                             AccessSpecifier AS = AS_none);
   Decl *ParseTemplateDeclarationOrSpecialization(DeclaratorContext Context,
                                                  SourceLocation &DeclEnd,
-                                                 AccessSpecifier AS,
-                                                 AttributeList *AccessAttrs);
+                                                 ParsedAttributes &AccessAttrs,
+                                                 AccessSpecifier AS);
   Decl *ParseSingleDeclarationAfterTemplate(
-                                       DeclaratorContext Context,
-                                       const ParsedTemplateInfo &TemplateInfo,
-                                       ParsingDeclRAIIObject &DiagsFromParams,
-                                       SourceLocation &DeclEnd,
-                                       AccessSpecifier AS=AS_none,
-                                       AttributeList *AccessAttrs = nullptr);
+      DeclaratorContext Context, const ParsedTemplateInfo &TemplateInfo,
+      ParsingDeclRAIIObject &DiagsFromParams, SourceLocation &DeclEnd,
+      ParsedAttributes &AccessAttrs, AccessSpecifier AS = AS_none);
   bool ParseTemplateParameters(unsigned Depth,
                                SmallVectorImpl<NamedDecl *> &TemplateParams,
                                SourceLocation &LAngleLoc,
@@ -2809,6 +2922,7 @@
                                    SourceLocation ExternLoc,
                                    SourceLocation TemplateLoc,
                                    SourceLocation &DeclEnd,
+                                   ParsedAttributes &AccessAttrs,
                                    AccessSpecifier AS = AS_none);
 
   //===--------------------------------------------------------------------===//
@@ -2832,7 +2946,7 @@
   //===--------------------------------------------------------------------===//
   // C++11/G++: Type Traits [Type-Traits.html in the GCC manual]
   ExprResult ParseTypeTrait();
-  
+
   //===--------------------------------------------------------------------===//
   // Embarcadero: Arary and Expression Traits
   ExprResult ParseArrayTypeTrait();
diff --git a/linux-x64/clang/include/clang/Parse/RAIIObjectsForParser.h b/linux-x64/clang/include/clang/Parse/RAIIObjectsForParser.h
index 9a9453b..ba5e5fe 100644
--- a/linux-x64/clang/include/clang/Parse/RAIIObjectsForParser.h
+++ b/linux-x64/clang/include/clang/Parse/RAIIObjectsForParser.h
@@ -25,7 +25,7 @@
   // TODO: move ParsingClassDefinition here.
   // TODO: move TentativeParsingAction here.
 
-  /// \brief A RAII object used to temporarily suppress access-like
+  /// A RAII object used to temporarily suppress access-like
   /// checking.  Access-like checks are those associated with
   /// controlling the use of a declaration, like C++ access control
   /// errors and deprecation warnings.  They are contextually
@@ -49,7 +49,7 @@
     bool Active;
 
   public:
-    /// Begin suppressing access-like checks 
+    /// Begin suppressing access-like checks
     SuppressAccessChecks(Parser &P, bool activate = true)
         : S(P.getActions()), DiagnosticPool(nullptr) {
       if (activate) {
@@ -84,7 +84,7 @@
     }
   };
 
-  /// \brief RAII object used to inform the actions that we're
+  /// RAII object used to inform the actions that we're
   /// currently parsing a declaration.  This is active when parsing a
   /// variable's initializer, but not when parsing the body of a
   /// class or function definition.
@@ -264,7 +264,7 @@
       Diags.DecrementAllExtensionsSilenced();
     }
   };
-  
+
   /// ColonProtectionRAIIObject - This sets the Parser::ColonIsSacred bool and
   /// restores it when destroyed.  This says that "foo:" should not be
   /// considered a possible typo for "foo::" for error recovery purposes.
@@ -276,19 +276,19 @@
       : P(p), OldVal(P.ColonIsSacred) {
       P.ColonIsSacred = Value;
     }
-    
+
     /// restore - This can be used to restore the state early, before the dtor
     /// is run.
     void restore() {
       P.ColonIsSacred = OldVal;
     }
-    
+
     ~ColonProtectionRAIIObject() {
       restore();
     }
   };
-  
-  /// \brief RAII object that makes '>' behave either as an operator
+
+  /// RAII object that makes '>' behave either as an operator
   /// or as the closing angle bracket for a template argument list.
   class GreaterThanIsOperatorScope {
     bool &GreaterThanIsOperator;
@@ -298,29 +298,29 @@
     : GreaterThanIsOperator(GTIO), OldGreaterThanIsOperator(GTIO) {
       GreaterThanIsOperator = Val;
     }
-    
+
     ~GreaterThanIsOperatorScope() {
       GreaterThanIsOperator = OldGreaterThanIsOperator;
     }
   };
-  
+
   class InMessageExpressionRAIIObject {
     bool &InMessageExpression;
     bool OldValue;
-    
+
   public:
     InMessageExpressionRAIIObject(Parser &P, bool Value)
-      : InMessageExpression(P.InMessageExpression), 
+      : InMessageExpression(P.InMessageExpression),
         OldValue(P.InMessageExpression) {
       InMessageExpression = Value;
     }
-    
+
     ~InMessageExpressionRAIIObject() {
       InMessageExpression = OldValue;
     }
   };
-  
-  /// \brief RAII object that makes sure paren/bracket/brace count is correct
+
+  /// RAII object that makes sure paren/bracket/brace count is correct
   /// after declaration/statement parsing, even when there's a parsing error.
   class ParenBraceBracketBalancer {
     Parser &P;
@@ -329,8 +329,9 @@
     ParenBraceBracketBalancer(Parser &p)
       : P(p), ParenCount(p.ParenCount), BracketCount(p.BracketCount),
         BraceCount(p.BraceCount) { }
-    
+
     ~ParenBraceBracketBalancer() {
+      P.AngleBrackets.clear(P);
       P.ParenCount = ParenCount;
       P.BracketCount = BracketCount;
       P.BraceCount = BraceCount;
@@ -361,14 +362,14 @@
     }
   };
 
-  /// \brief RAII class that helps handle the parsing of an open/close delimiter
+  /// RAII class that helps handle the parsing of an open/close delimiter
   /// pair, such as braces { ... } or parentheses ( ... ).
   class BalancedDelimiterTracker : public GreaterThanIsOperatorScope {
     Parser& P;
     tok::TokenKind Kind, Close, FinalToken;
     SourceLocation (Parser::*Consumer)();
     SourceLocation LOpen, LClose;
-    
+
     unsigned short &getDepth() {
       switch (Kind) {
         case tok::l_brace: return P.BraceCount;
@@ -377,10 +378,10 @@
         default: llvm_unreachable("Wrong token kind");
       }
     }
-    
+
     bool diagnoseOverflow();
     bool diagnoseMissingClose();
-    
+
   public:
     BalancedDelimiterTracker(Parser& p, tok::TokenKind k,
                              tok::TokenKind FinalToken = tok::semi)
@@ -390,34 +391,34 @@
       switch (Kind) {
         default: llvm_unreachable("Unexpected balanced token");
         case tok::l_brace:
-          Close = tok::r_brace; 
+          Close = tok::r_brace;
           Consumer = &Parser::ConsumeBrace;
           break;
         case tok::l_paren:
-          Close = tok::r_paren; 
+          Close = tok::r_paren;
           Consumer = &Parser::ConsumeParen;
           break;
-          
+
         case tok::l_square:
-          Close = tok::r_square; 
+          Close = tok::r_square;
           Consumer = &Parser::ConsumeBracket;
           break;
-      }      
+      }
     }
-    
+
     SourceLocation getOpenLocation() const { return LOpen; }
     SourceLocation getCloseLocation() const { return LClose; }
     SourceRange getRange() const { return SourceRange(LOpen, LClose); }
-    
+
     bool consumeOpen() {
       if (!P.Tok.is(Kind))
         return true;
-      
+
       if (getDepth() < P.getLangOpts().BracketDepth) {
         LOpen = (P.*Consumer)();
         return false;
       }
-      
+
       return diagnoseOverflow();
     }
 
@@ -435,13 +436,13 @@
         LClose = (P.*Consumer)();
         return false;
       }
-      
+
       return diagnoseMissingClose();
     }
     void skipToEnd();
   };
 
-  /// \brief RAIIObject to destroy the contents of a SmallVector of
+  /// RAIIObject to destroy the contents of a SmallVector of
   /// TemplateIdAnnotation pointers and clear the vector.
   class DestroyTemplateIdAnnotationsRAIIObj {
     SmallVectorImpl<TemplateIdAnnotation *> &Container;
diff --git a/linux-x64/clang/include/clang/Rewrite/Core/HTMLRewrite.h b/linux-x64/clang/include/clang/Rewrite/Core/HTMLRewrite.h
index 1fd7c7a..0f1f490 100644
--- a/linux-x64/clang/include/clang/Rewrite/Core/HTMLRewrite.h
+++ b/linux-x64/clang/include/clang/Rewrite/Core/HTMLRewrite.h
@@ -31,7 +31,8 @@
   /// start/end tags are placed at the start/end of each line if the range is
   /// multiline.
   void HighlightRange(Rewriter &R, SourceLocation B, SourceLocation E,
-                      const char *StartTag, const char *EndTag);
+                      const char *StartTag, const char *EndTag,
+                      bool IsTokenRange = true);
 
   /// HighlightRange - Highlight a range in the source code with the specified
   /// start/end tags.  The Start/end of the range must be in the same file.
diff --git a/linux-x64/clang/include/clang/Rewrite/Core/RewriteBuffer.h b/linux-x64/clang/include/clang/Rewrite/Core/RewriteBuffer.h
index 1e69054..c618298 100644
--- a/linux-x64/clang/include/clang/Rewrite/Core/RewriteBuffer.h
+++ b/linux-x64/clang/include/clang/Rewrite/Core/RewriteBuffer.h
@@ -48,7 +48,7 @@
     Initialize(Input.begin(), Input.end());
   }
 
-  /// \brief Write to \p Stream the result of applying all changes to the
+  /// Write to \p Stream the result of applying all changes to the
   /// original buffer.
   /// Note that it isn't safe to use this function to overwrite memory mapped
   /// files in-place (PR17960). Consider using a higher-level utility such as
diff --git a/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h b/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
index cf33cd6..107968a 100644
--- a/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
+++ b/linux-x64/clang/include/clang/Rewrite/Core/Rewriter.h
@@ -37,15 +37,15 @@
 
 public:
   struct RewriteOptions {
-    /// \brief Given a source range, true to include previous inserts at the
+    /// Given a source range, true to include previous inserts at the
     /// beginning of the range as part of the range itself (true by default).
     bool IncludeInsertsAtBeginOfRange = true;
 
-    /// \brief Given a source range, true to include previous inserts at the
+    /// Given a source range, true to include previous inserts at the
     /// end of the range as part of the range itself (true by default).
     bool IncludeInsertsAtEndOfRange = true;
 
-    /// \brief If true and removing some text leaves a blank line
+    /// If true and removing some text leaves a blank line
     /// also remove the empty line (false by default).
     bool RemoveLineIfEmpty = false;
 
@@ -105,7 +105,7 @@
     return InsertText(Loc, Str);
   }
 
-  /// \brief Insert the specified string after the token in the
+  /// Insert the specified string after the token in the
   /// specified location.
   bool InsertTextAfterToken(SourceLocation Loc, StringRef Str);
 
@@ -122,13 +122,13 @@
   bool RemoveText(SourceLocation Start, unsigned Length,
                   RewriteOptions opts = RewriteOptions());
 
-  /// \brief Remove the specified text region.
+  /// Remove the specified text region.
   bool RemoveText(CharSourceRange range,
                   RewriteOptions opts = RewriteOptions()) {
     return RemoveText(range.getBegin(), getRangeSize(range, opts), opts);
   }
 
-  /// \brief Remove the specified text region.
+  /// Remove the specified text region.
   bool RemoveText(SourceRange range, RewriteOptions opts = RewriteOptions()) {
     return RemoveText(range.getBegin(), getRangeSize(range, opts), opts);
   }
@@ -151,7 +151,7 @@
   /// operation.
   bool ReplaceText(SourceRange range, SourceRange replacementRange);
 
-  /// \brief Increase indentation for the lines between the given source range.
+  /// Increase indentation for the lines between the given source range.
   /// To determine what the indentation should be, 'parentIndent' is used
   /// that should be at a source location with an indentation one degree
   /// lower than the given range.
diff --git a/linux-x64/clang/include/clang/Rewrite/Frontend/FixItRewriter.h b/linux-x64/clang/include/clang/Rewrite/Frontend/FixItRewriter.h
index 18ab776..7456840 100644
--- a/linux-x64/clang/include/clang/Rewrite/Frontend/FixItRewriter.h
+++ b/linux-x64/clang/include/clang/Rewrite/Frontend/FixItRewriter.h
@@ -36,7 +36,7 @@
   FixItOptions() = default;
   virtual ~FixItOptions();
 
-  /// \brief This file is about to be rewritten. Return the name of the file
+  /// This file is about to be rewritten. Return the name of the file
   /// that is okay to write to.
   ///
   /// \param fd out parameter for file descriptor. After the call it may be set
@@ -48,52 +48,52 @@
   /// if this is false.
   bool InPlace = false;
 
-  /// \brief Whether to abort fixing a file when not all errors could be fixed.
+  /// Whether to abort fixing a file when not all errors could be fixed.
   bool FixWhatYouCan = false;
 
-  /// \brief Whether to only fix warnings and not errors.
+  /// Whether to only fix warnings and not errors.
   bool FixOnlyWarnings = false;
 
-  /// \brief If true, only pass the diagnostic to the actual diagnostic consumer
+  /// If true, only pass the diagnostic to the actual diagnostic consumer
   /// if it is an error or a fixit was applied as part of the diagnostic.
   /// It basically silences warnings without accompanying fixits.
   bool Silent = false;
 };
 
 class FixItRewriter : public DiagnosticConsumer {
-  /// \brief The diagnostics machinery.
+  /// The diagnostics machinery.
   DiagnosticsEngine &Diags;
 
   edit::EditedSource Editor;
 
-  /// \brief The rewriter used to perform the various code
+  /// The rewriter used to perform the various code
   /// modifications.
   Rewriter Rewrite;
 
-  /// \brief The diagnostic client that performs the actual formatting
+  /// The diagnostic client that performs the actual formatting
   /// of error messages.
   DiagnosticConsumer *Client;
   std::unique_ptr<DiagnosticConsumer> Owner;
 
-  /// \brief Turn an input path into an output path. NULL implies overwriting
+  /// Turn an input path into an output path. NULL implies overwriting
   /// the original.
   FixItOptions *FixItOpts;
 
-  /// \brief The number of rewriter failures.
+  /// The number of rewriter failures.
   unsigned NumFailures = 0;
 
-  /// \brief Whether the previous diagnostic was not passed to the consumer.
+  /// Whether the previous diagnostic was not passed to the consumer.
   bool PrevDiagSilenced = false;
 
 public:
-  /// \brief Initialize a new fix-it rewriter.
+  /// Initialize a new fix-it rewriter.
   FixItRewriter(DiagnosticsEngine &Diags, SourceManager &SourceMgr,
                 const LangOptions &LangOpts, FixItOptions *FixItOpts);
 
-  /// \brief Destroy the fix-it rewriter.
+  /// Destroy the fix-it rewriter.
   ~FixItRewriter() override;
 
-  /// \brief Check whether there are modifications for a given file.
+  /// Check whether there are modifications for a given file.
   bool IsModified(FileID ID) const {
     return Rewrite.getRewriteBufferFor(ID) != nullptr;
   }
@@ -104,12 +104,12 @@
   iterator buffer_begin() { return Rewrite.buffer_begin(); }
   iterator buffer_end() { return Rewrite.buffer_end(); }
 
-  /// \brief Write a single modified source file.
+  /// Write a single modified source file.
   ///
   /// \returns true if there was an error, false otherwise.
   bool WriteFixedFile(FileID ID, raw_ostream &OS);
 
-  /// \brief Write the modified source files.
+  /// Write the modified source files.
   ///
   /// \returns true if there was an error, false otherwise.
   bool WriteFixedFiles(
@@ -126,7 +126,7 @@
   void HandleDiagnostic(DiagnosticsEngine::Level DiagLevel,
                         const Diagnostic &Info) override;
 
-  /// \brief Emit a diagnostic via the adapted diagnostic client.
+  /// Emit a diagnostic via the adapted diagnostic client.
   void Diag(SourceLocation Loc, unsigned DiagID);
 };
 
diff --git a/linux-x64/clang/include/clang/Rewrite/Frontend/FrontendActions.h b/linux-x64/clang/include/clang/Rewrite/Frontend/FrontendActions.h
index 5f83ac1..40d2f4c 100644
--- a/linux-x64/clang/include/clang/Rewrite/Frontend/FrontendActions.h
+++ b/linux-x64/clang/include/clang/Rewrite/Frontend/FrontendActions.h
@@ -46,7 +46,7 @@
   ~FixItAction() override;
 };
 
-/// \brief Emits changes to temporary files and uses them for the original
+/// Emits changes to temporary files and uses them for the original
 /// frontend action.
 class FixItRecompile : public WrapperFrontendAction {
 public:
diff --git a/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h b/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
index 64dd2d3..6e8d839 100644
--- a/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
+++ b/linux-x64/clang/include/clang/Sema/AnalysisBasedWarnings.h
@@ -54,34 +54,34 @@
   /// \name Statistics
   /// @{
 
-  /// \brief Number of function CFGs built and analyzed.
+  /// Number of function CFGs built and analyzed.
   unsigned NumFunctionsAnalyzed;
 
-  /// \brief Number of functions for which the CFG could not be successfully
+  /// Number of functions for which the CFG could not be successfully
   /// built.
   unsigned NumFunctionsWithBadCFGs;
 
-  /// \brief Total number of blocks across all CFGs.
+  /// Total number of blocks across all CFGs.
   unsigned NumCFGBlocks;
 
-  /// \brief Largest number of CFG blocks for a single function analyzed.
+  /// Largest number of CFG blocks for a single function analyzed.
   unsigned MaxCFGBlocksPerFunction;
 
-  /// \brief Total number of CFGs with variables analyzed for uninitialized
+  /// Total number of CFGs with variables analyzed for uninitialized
   /// uses.
   unsigned NumUninitAnalysisFunctions;
 
-  /// \brief Total number of variables analyzed for uninitialized uses.
+  /// Total number of variables analyzed for uninitialized uses.
   unsigned NumUninitAnalysisVariables;
 
-  /// \brief Max number of variables analyzed for uninitialized uses in a single
+  /// Max number of variables analyzed for uninitialized uses in a single
   /// function.
   unsigned MaxUninitAnalysisVariablesPerFunction;
 
-  /// \brief Total number of block visits during uninitialized use analysis.
+  /// Total number of block visits during uninitialized use analysis.
   unsigned NumUninitAnalysisBlockVisits;
 
-  /// \brief Max number of block visits during uninitialized use analysis of
+  /// Max number of block visits during uninitialized use analysis of
   /// a single function.
   unsigned MaxUninitAnalysisBlockVisitsPerFunction;
 
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
index dc0153c..77d7894 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrImpl.inc
@@ -6,11 +6,11 @@
 |*                                                                            *|
 \*===----------------------------------------------------------------------===*/
 
-static bool defaultAppertainsTo(Sema &, const AttributeList &,const Decl *) {
+static bool defaultAppertainsTo(Sema &, const ParsedAttr &,const Decl *) {
   return true;
 }
 
-static bool defaultDiagnoseLangOpts(Sema &, const AttributeList &) {
+static bool defaultDiagnoseLangOpts(Sema &, const ParsedAttr &) {
   return true;
 }
 
@@ -18,14 +18,14 @@
   return true;
 }
 
-static unsigned defaultSpellingIndexToSemanticSpelling(const AttributeList &Attr) {
+static unsigned defaultSpellingIndexToSemanticSpelling(const ParsedAttr &Attr) {
   return UINT_MAX;
 }
 
-static bool checkAMDGPUFlatWorkGroupSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAMDGPUFlatWorkGroupSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "kernel functions";
+      << Attr << "kernel functions";
     return false;
   }
   return true;
@@ -35,10 +35,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkAMDGPUNumSGPRAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAMDGPUNumSGPRAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "kernel functions";
+      << Attr << "kernel functions";
     return false;
   }
   return true;
@@ -48,10 +48,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkAMDGPUNumVGPRAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAMDGPUNumVGPRAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "kernel functions";
+      << Attr << "kernel functions";
     return false;
   }
   return true;
@@ -61,10 +61,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkAMDGPUWavesPerEUAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAMDGPUWavesPerEUAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "kernel functions";
+      << Attr << "kernel functions";
     return false;
   }
   return true;
@@ -74,15 +74,15 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool isTargetarmthumbarmebthumbebavrx86x86_64msp430mipsmipsel(const TargetInfo &Target) {
+static bool isTargetarmthumbarmebthumbebavrx86x86_64msp430mipsmipselriscv32riscv64(const TargetInfo &Target) {
   const llvm::Triple &T = Target.getTriple();
-  return true && (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::armeb || T.getArch() == llvm::Triple::thumbeb || T.getArch() == llvm::Triple::avr || T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::msp430 || T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel);
+  return true && (T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::armeb || T.getArch() == llvm::Triple::thumbeb || T.getArch() == llvm::Triple::avr || T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::msp430 || T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::riscv32 || T.getArch() == llvm::Triple::riscv64);
 }
 
-static bool checkAVRSignalAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAVRSignalAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -103,10 +103,10 @@
   return false;
 }
 
-static bool checkAbiTagAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isStruct(D) && !isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<NamespaceDecl>(D)) {
+static bool checkAbiTagAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isStruct(D) && !isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<NamespaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, variables, functions, and namespaces";
+      << Attr << "structs, variables, functions, and namespaces";
     return false;
   }
   return true;
@@ -119,16 +119,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_namespace, /*IsSupported=*/LangOpts.CPlusPlus));
 }
 
-static bool checkAcquireCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAcquireCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned AcquireCapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned AcquireCapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_acquire_capability = 0,
     CXX11_clang_acquire_capability = 1,
@@ -156,19 +156,19 @@
   return false;
 }
 
-static bool checkAcquiredAfterAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkAcquiredAfterAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkAcquiredBeforeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkAcquiredBeforeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
@@ -180,19 +180,19 @@
   return false;
 }
 
-static bool checkAliasAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isGlobalVar(D)) {
+static bool checkAliasAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and global variables";
+      << Attr << "functions and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkAlignValueAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<TypedefNameDecl>(D)) {
+static bool checkAlignValueAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<TypedefNameDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables and typedefs";
+      << Attr << "variables and typedefs";
     return false;
   }
   return true;
@@ -203,7 +203,7 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_type_alias, /*IsSupported=*/true));
 }
 
-static unsigned AlignedAttrSpellingMap(const AttributeList &Attr) {
+static unsigned AlignedAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_aligned = 0,
     CXX11_gnu_aligned = 1,
@@ -232,19 +232,19 @@
   return false;
 }
 
-static bool checkAllocAlignAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isHasFunctionProto(D)) {
+static bool checkAllocAlignAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isHasFunctionProto(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-K&R-style functions";
+      << Attr << "non-K&R-style functions";
     return false;
   }
   return true;
 }
 
-static bool checkAllocSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAllocSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -254,16 +254,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkAlwaysInlineAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAlwaysInlineAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned AlwaysInlineAttrSpellingMap(const AttributeList &Attr) {
+static unsigned AlwaysInlineAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_always_inline = 0,
     CXX11_gnu_always_inline = 1,
@@ -293,10 +293,10 @@
   return false;
 }
 
-static bool checkAnyX86NoCfCheckAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isFunctionLike(D)) {
+static bool checkAnyX86NoCfCheckAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isFunctionLike(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and function pointers";
+      << Attr << "functions and function pointers";
     return false;
   }
   return true;
@@ -306,25 +306,25 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_hasType_functionType, /*IsSupported=*/true));
 }
 
-static bool checkArcWeakrefUnavailableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkArcWeakrefUnavailableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
 }
 
-static bool checkArgumentWithTypeTagAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isHasFunctionProto(D)) {
+static bool checkArgumentWithTypeTagAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isHasFunctionProto(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-K&R-style functions";
+      << Attr << "non-K&R-style functions";
     return false;
   }
   return true;
 }
 
-static unsigned ArgumentWithTypeTagAttrSpellingMap(const AttributeList &Attr) {
+static unsigned ArgumentWithTypeTagAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_argument_with_type_tag = 0,
     CXX11_clang_argument_with_type_tag = 1,
@@ -352,25 +352,25 @@
   return false;
 }
 
-static bool checkArtificialAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isInlineFunction(D)) {
+static bool checkArtificialAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isInlineFunction(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "inline functions";
+      << Attr << "inline functions";
     return false;
   }
   return true;
 }
 
-static bool checkAssertCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAssertCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned AssertCapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned AssertCapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_assert_capability = 0,
     CXX11_clang_assert_capability = 1,
@@ -388,28 +388,28 @@
   }
 }
 
-static bool checkAssertExclusiveLockAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAssertExclusiveLockAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkAssertSharedLockAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkAssertSharedLockAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkAssumeAlignedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D)) {
+static bool checkAssumeAlignedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods and functions";
+      << Attr << "Objective-C methods and functions";
     return false;
   }
   return true;
@@ -420,10 +420,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkAvailabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<NamedDecl>(D)) {
+static bool checkAvailabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<NamedDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "named declarations";
+      << Attr << "named declarations";
     return false;
   }
   return true;
@@ -446,43 +446,69 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable, /*IsSupported=*/true));
 }
 
-static bool checkCFAuditedTransferAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCFAuditedTransferAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCFConsumedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkCFConsumedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
 }
 
-static bool checkCFUnknownTransferAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCFUnknownTransferAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCUDAConstantAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkCPUDispatchAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCUDALangOpts(Sema &S, const AttributeList &Attr) {
+static void matchRulesForCPUDispatch(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+}
+
+static bool checkCPUSpecificAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
+static void matchRulesForCPUSpecific(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+}
+
+static bool checkCUDAConstantAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "variables";
+    return false;
+  }
+  return true;
+}
+
+static bool checkCUDALangOpts(Sema &S, const ParsedAttr &Attr) {
   if (S.LangOpts.CUDA)
     return true;
 
@@ -490,64 +516,64 @@
   return false;
 }
 
-static bool checkCUDADeviceAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<VarDecl>(D)) {
+static bool checkCUDADeviceAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and variables";
+      << Attr << "functions and variables";
     return false;
   }
   return true;
 }
 
-static bool checkCUDAGlobalAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCUDAGlobalAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCUDAHostAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCUDAHostAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCUDAInvalidTargetAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCUDAInvalidTargetAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkCUDALaunchBoundsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isFunctionLike(D)) {
+static bool checkCUDALaunchBoundsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isFunctionLike(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods, functions, and function pointers";
+      << Attr << "Objective-C methods, functions, and function pointers";
     return false;
   }
   return true;
 }
 
-static bool checkCUDASharedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkCUDASharedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkCXX11NoReturnAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCXX11NoReturnAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -557,10 +583,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkCallableWhenAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXMethodDecl>(D)) {
+static bool checkCallableWhenAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -570,16 +596,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function_is_member, /*IsSupported=*/LangOpts.CPlusPlus));
 }
 
-static bool checkCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D) && !isa<TypedefNameDecl>(D)) {
+static bool checkCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D) && !isa<TypedefNameDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, classes, and typedefs";
+      << Attr << "structs, unions, classes, and typedefs";
     return false;
   }
   return true;
 }
 
-static unsigned CapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned CapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_capability = 0,
     CXX11_clang_capability = 1,
@@ -597,10 +623,10 @@
   }
 }
 
-static bool checkCarriesDependencyAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D) && !isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D)) {
+static bool checkCarriesDependencyAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D) && !isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters, Objective-C methods, and functions";
+      << Attr << "parameters, Objective-C methods, and functions";
     return false;
   }
   return true;
@@ -618,46 +644,55 @@
   return false;
 }
 
-static bool checkCleanupAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isLocalVar(D)) {
+static bool checkCleanupAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isLocalVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "local variables";
+      << Attr << "local variables";
     return false;
   }
   return true;
 }
 
-static bool checkColdAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
-    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+static bool checkCodeSegAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<CXXRecordDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
+      << Attr << "functions and classes";
     return false;
   }
   return true;
 }
 
-static bool checkCommonAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkColdAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkConstructorAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkCommonAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkConsumableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkConstructorAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
+static bool checkConsumableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "classes";
     return false;
   }
   return true;
@@ -667,28 +702,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
-static bool checkConsumableAutoCastAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkConsumableAutoCastAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
 }
 
-static bool checkConsumableSetOnReadAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkConsumableSetOnReadAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
 }
 
-static bool checkConvergentAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkConvergentAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -698,10 +733,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkDLLExportAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<VarDecl>(D) && !isa<CXXRecordDecl>(D) && !isa<ObjCInterfaceDecl>(D)) {
+static bool checkDLLExportAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<VarDecl>(D) && !isa<CXXRecordDecl>(D) && !isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, variables, classes, and Objective-C interfaces";
+      << Attr << "functions, variables, classes, and Objective-C interfaces";
     return false;
   }
   return true;
@@ -719,10 +754,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkDLLImportAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<VarDecl>(D) && !isa<CXXRecordDecl>(D) && !isa<ObjCInterfaceDecl>(D)) {
+static bool checkDLLImportAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<VarDecl>(D) && !isa<CXXRecordDecl>(D) && !isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, variables, classes, and Objective-C interfaces";
+      << Attr << "functions, variables, classes, and Objective-C interfaces";
     return false;
   }
   return true;
@@ -735,28 +770,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkDestructorAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkDestructorAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkDiagnoseIfAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D)) {
+static bool checkDiagnoseIfAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, Objective-C methods, and Objective-C properties";
+      << Attr << "functions, Objective-C methods, and Objective-C properties";
     return false;
   }
   return true;
 }
 
-static bool checkDisableTailCallsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkDisableTailCallsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and Objective-C methods";
+      << Attr << "functions and Objective-C methods";
     return false;
   }
   return true;
@@ -767,10 +802,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkEmptyBasesAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkEmptyBasesAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
@@ -781,10 +816,10 @@
   return true && (T.getArch() == llvm::Triple::x86 || T.getArch() == llvm::Triple::x86_64 || T.getArch() == llvm::Triple::arm || T.getArch() == llvm::Triple::thumb || T.getArch() == llvm::Triple::aarch64) && (Target.getCXXABI().getKind() == TargetCXXABI::Microsoft);
 }
 
-static bool checkEnableIfAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkEnableIfAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -794,10 +829,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkEnumExtensibilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<EnumDecl>(D)) {
+static bool checkEnumExtensibilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<EnumDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "enums";
+      << Attr << "enums";
     return false;
   }
   return true;
@@ -807,28 +842,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_enum, /*IsSupported=*/true));
 }
 
-static bool checkExclusiveTrylockFunctionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkExclusiveTrylockFunctionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkExtVectorTypeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<TypedefNameDecl>(D)) {
+static bool checkExtVectorTypeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<TypedefNameDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "typedefs";
+      << Attr << "typedefs";
     return false;
   }
   return true;
 }
 
-static bool checkExternalSourceSymbolAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<NamedDecl>(D)) {
+static bool checkExternalSourceSymbolAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<NamedDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "named declarations";
+      << Attr << "named declarations";
     return false;
   }
   return true;
@@ -851,10 +886,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable, /*IsSupported=*/true));
 }
 
-static bool checkFlagEnumAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<EnumDecl>(D)) {
+static bool checkFlagEnumAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<EnumDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "enums";
+      << Attr << "enums";
     return false;
   }
   return true;
@@ -864,10 +899,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_enum, /*IsSupported=*/true));
 }
 
-static bool checkFlattenAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkFlattenAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -877,55 +912,55 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkFormatAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isa<BlockDecl>(D) && !isHasFunctionProto(D)) {
+static bool checkFormatAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isa<BlockDecl>(D) && !isHasFunctionProto(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods, blocks, and non-K&R-style functions";
+      << Attr << "Objective-C methods, blocks, and non-K&R-style functions";
     return false;
   }
   return true;
 }
 
-static bool checkFormatArgAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isHasFunctionProto(D)) {
+static bool checkFormatArgAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isHasFunctionProto(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods and non-K&R-style functions";
+      << Attr << "Objective-C methods and non-K&R-style functions";
     return false;
   }
   return true;
 }
 
-static bool checkGNUInlineAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkGNUInlineAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkGuardedByAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkGuardedByAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkGuardedVarAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkGuardedVarAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkHotAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkHotAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -937,19 +972,19 @@
   return false;
 }
 
-static bool checkIBActionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isObjCInstanceMethod(D)) {
+static bool checkIBActionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isObjCInstanceMethod(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C instance methods";
+      << Attr << "Objective-C instance methods";
     return false;
   }
   return true;
 }
 
-static bool checkIFuncAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkIFuncAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -964,19 +999,19 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkInitPriorityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkInitPriorityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkInternalLinkageAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<CXXRecordDecl>(D)) {
+static bool checkInternalLinkageAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables, functions, and classes";
+      << Attr << "variables, functions, and classes";
     return false;
   }
   return true;
@@ -988,10 +1023,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
-static bool checkLTOVisibilityPublicAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkLTOVisibilityPublicAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
@@ -1001,47 +1036,72 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
-static bool checkLayoutVersionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkLayoutVersionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
 }
 
-static bool checkLockReturnedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
-    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+static bool isImplicitObjectParameter(const Decl *D) {
+  if (const auto *S = dyn_cast<FunctionDecl>(D))
+    return static_cast<void>(S), false;
+  return false;
+}
+
+static bool checkLifetimeBoundAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D) && !isImplicitObjectParameter(D))) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
+      << Attr << "parameters and implicit object parameters";
     return false;
   }
   return true;
 }
 
-static bool checkLockableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkCPlusPlusLangOpts(Sema &S, const ParsedAttr &Attr) {
+  if (S.LangOpts.CPlusPlus)
+    return true;
+
+  S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
+  return false;
+}
+
+static bool checkLockReturnedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkLocksExcludedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkLockableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
 }
 
-static unsigned LoopHintAttrSpellingMap(const AttributeList &Attr) {
+static bool checkLocksExcludedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
+static unsigned LoopHintAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     Pragma_clang_loop = 0,
     Pragma_unroll = 1,
-    Pragma_nounroll = 2
+    Pragma_nounroll = 2,
+    Pragma_unroll_and_jam = 3,
+    Pragma_nounroll_and_jam = 4
   };
 
   unsigned Idx = Attr.getAttributeSpellingListIndex();
@@ -1050,10 +1110,12 @@
     case 0: return Pragma_clang_loop;
     case 1: return Pragma_unroll;
     case 2: return Pragma_nounroll;
+    case 3: return Pragma_unroll_and_jam;
+    case 4: return Pragma_nounroll_and_jam;
   }
 }
 
-static bool checkMicrosoftExtLangOpts(Sema &S, const AttributeList &Attr) {
+static bool checkMicrosoftExtLangOpts(Sema &S, const ParsedAttr &Attr) {
   if (S.LangOpts.MicrosoftExt)
     return true;
 
@@ -1061,7 +1123,7 @@
   return false;
 }
 
-static unsigned MSInheritanceAttrSpellingMap(const AttributeList &Attr) {
+static unsigned MSInheritanceAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     Keyword_single_inheritance = 0,
     Keyword_multiple_inheritance = 1,
@@ -1079,28 +1141,28 @@
   }
 }
 
-static bool checkMSNoVTableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkMSNoVTableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
 }
 
-static bool checkMSStructAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkMSStructAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
 }
 
-static bool checkMicroMipsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkMicroMipsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1115,28 +1177,41 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkMinSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkMinSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and Objective-C methods";
+      << Attr << "functions and Objective-C methods";
     return false;
   }
   return true;
 }
 
-static bool checkMips16AppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkMinVectorWidthAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkMipsLongCallAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static void matchRulesForMinVectorWidth(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+}
+
+static bool checkMips16AppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
+static bool checkMipsLongCallAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1147,7 +1222,7 @@
   return true && (T.getArch() == llvm::Triple::mips || T.getArch() == llvm::Triple::mipsel || T.getArch() == llvm::Triple::mips64 || T.getArch() == llvm::Triple::mips64el);
 }
 
-static unsigned MipsLongCallAttrSpellingMap(const AttributeList &Attr) {
+static unsigned MipsLongCallAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_long_call = 0,
     CXX11_gnu_long_call = 1,
@@ -1169,16 +1244,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkMipsShortCallAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkMipsShortCallAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned MipsShortCallAttrSpellingMap(const AttributeList &Attr) {
+static unsigned MipsShortCallAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_short_call = 0,
     CXX11_gnu_short_call = 1,
@@ -1200,55 +1275,55 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkModeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<EnumDecl>(D) && !isa<TypedefNameDecl>(D) && !isa<FieldDecl>(D)) {
+static bool checkModeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<EnumDecl>(D) && !isa<TypedefNameDecl>(D) && !isa<FieldDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables, enums, typedefs, and non-static data members";
+      << Attr << "variables, enums, typedefs, and non-static data members";
     return false;
   }
   return true;
 }
 
-static bool checkNSConsumedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkNSConsumedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
 }
 
-static bool checkNSConsumesSelfAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D)) {
+static bool checkNSConsumesSelfAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods";
+      << Attr << "Objective-C methods";
     return false;
   }
   return true;
 }
 
-static bool checkNakedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNakedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoAliasAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoAliasAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoCommonAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkNoCommonAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
@@ -1260,10 +1335,10 @@
   return false;
 }
 
-static bool checkNoDebugAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isFunctionLike(D) && !isa<ObjCMethodDecl>(D) && !isNonParmVar(D)) {
+static bool checkNoDebugAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isFunctionLike(D) && !isa<ObjCMethodDecl>(D) && !isNonParmVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, function pointers, Objective-C methods, and variables";
+      << Attr << "functions, function pointers, Objective-C methods, and variables";
     return false;
   }
   return true;
@@ -1275,10 +1350,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_not_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkNoDuplicateAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoDuplicateAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1288,10 +1363,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkNoEscapeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkNoEscapeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -1301,28 +1376,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkNoInlineAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoInlineAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoInstrumentFunctionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoInstrumentFunctionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoMicroMipsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoMicroMipsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1332,19 +1407,19 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkNoMips16AppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoMips16AppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoSanitizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D) && !isGlobalVar(D)) {
+static bool checkNoSanitizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D) && !isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, Objective-C methods, and global variables";
+      << Attr << "functions, Objective-C methods, and global variables";
     return false;
   }
   return true;
@@ -1356,10 +1431,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_global, /*IsSupported=*/true));
 }
 
-static bool checkNoSanitizeSpecificAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isGlobalVar(D)) {
+static bool checkNoSanitizeSpecificAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and global variables";
+      << Attr << "functions and global variables";
     return false;
   }
   return true;
@@ -1370,10 +1445,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_global, /*IsSupported=*/true));
 }
 
-static bool checkNoSplitStackAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoSplitStackAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1383,19 +1458,32 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkNoThreadSafetyAnalysisAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNoStackProtectorAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkNoThrowAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static void matchRulesForNoStackProtector(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
+  MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
+}
+
+static bool checkNoThreadSafetyAnalysisAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
+    return false;
+  }
+  return true;
+}
+
+static bool checkNoThrowAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
+    S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1405,19 +1493,19 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkNonNullAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isHasFunctionProto(D) && !isa<ParmVarDecl>(D)) {
+static bool checkNonNullAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isHasFunctionProto(D) && !isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, methods, and parameters";
+      << Attr << "functions, methods, and parameters";
     return false;
   }
   return true;
 }
 
-static bool checkNotTailCalledAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkNotTailCalledAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1427,10 +1515,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkObjCBoxableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkObjCBoxableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
@@ -1440,28 +1528,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
-static bool checkObjCBridgeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D) && !isa<TypedefNameDecl>(D)) {
+static bool checkObjCBridgeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D) && !isa<TypedefNameDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, classes, and typedefs";
+      << Attr << "structs, unions, classes, and typedefs";
     return false;
   }
   return true;
 }
 
-static bool checkObjCBridgeMutableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkObjCBridgeMutableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
 }
 
-static bool checkObjCBridgeRelatedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkObjCBridgeRelatedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
@@ -1476,37 +1564,37 @@
   return false;
 }
 
-static bool checkObjCDesignatedInitializerAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isObjCInterfaceDeclInitMethod(D)) {
+static bool checkObjCDesignatedInitializerAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isObjCInterfaceDeclInitMethod(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "init methods of interface or class extension declarations";
+      << Attr << "init methods of interface or class extension declarations";
     return false;
   }
   return true;
 }
 
-static bool checkObjCExceptionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkObjCExceptionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
 }
 
-static bool checkObjCExplicitProtocolImplAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCProtocolDecl>(D)) {
+static bool checkObjCExplicitProtocolImplAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCProtocolDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C protocols";
+      << Attr << "Objective-C protocols";
     return false;
   }
   return true;
 }
 
-static bool checkObjCMethodFamilyAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D)) {
+static bool checkObjCMethodFamilyAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods";
+      << Attr << "Objective-C methods";
     return false;
   }
   return true;
@@ -1516,28 +1604,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkObjCPreciseLifetimeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkObjCPreciseLifetimeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkObjCRequiresPropertyDefsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkObjCRequiresPropertyDefsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
 }
 
-static bool checkObjCRequiresSuperAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D)) {
+static bool checkObjCRequiresSuperAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods";
+      << Attr << "Objective-C methods";
     return false;
   }
   return true;
@@ -1547,28 +1635,28 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkObjCReturnsInnerPointerAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D)) {
+static bool checkObjCReturnsInnerPointerAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods and Objective-C properties";
+      << Attr << "Objective-C methods and Objective-C properties";
     return false;
   }
   return true;
 }
 
-static bool checkObjCRootClassAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkObjCRootClassAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
 }
 
-static bool checkObjCRuntimeNameAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D) && !isa<ObjCProtocolDecl>(D)) {
+static bool checkObjCRuntimeNameAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D) && !isa<ObjCProtocolDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces and Objective-C protocols";
+      << Attr << "Objective-C interfaces and Objective-C protocols";
     return false;
   }
   return true;
@@ -1579,10 +1667,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_protocol, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkObjCRuntimeVisibleAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkObjCRuntimeVisibleAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
@@ -1592,10 +1680,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkObjCSubclassingRestrictedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCInterfaceDecl>(D)) {
+static bool checkObjCSubclassingRestrictedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCInterfaceDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C interfaces";
+      << Attr << "Objective-C interfaces";
     return false;
   }
   return true;
@@ -1605,16 +1693,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_interface, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkOpenCLAccessAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D) && !isa<TypedefNameDecl>(D)) {
+static bool checkOpenCLAccessAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D) && !isa<TypedefNameDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters and typedefs";
+      << Attr << "parameters and typedefs";
     return false;
   }
   return true;
 }
 
-static unsigned OpenCLAccessAttrSpellingMap(const AttributeList &Attr) {
+static unsigned OpenCLAccessAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     Keyword_read_only = 0,
     Keyword_write_only = 2,
@@ -1633,10 +1721,10 @@
   }
 }
 
-static bool checkOpenCLIntelReqdSubGroupSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkOpenCLIntelReqdSubGroupSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1646,25 +1734,25 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkOpenCLKernelAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkOpenCLKernelAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkOpenCLNoSVMAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkOpenCLNoSVMAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkOpenCLLangOpts(Sema &S, const AttributeList &Attr) {
+static bool checkOpenCLLangOpts(Sema &S, const ParsedAttr &Attr) {
   if (S.LangOpts.OpenCL)
     return true;
 
@@ -1676,10 +1764,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable, /*IsSupported=*/true));
 }
 
-static bool checkOptimizeNoneAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkOptimizeNoneAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and Objective-C methods";
+      << Attr << "functions and Objective-C methods";
     return false;
   }
   return true;
@@ -1690,10 +1778,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkOverloadableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkOverloadableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -1703,16 +1791,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkOwnershipAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isHasFunctionProto(D)) {
+static bool checkOwnershipAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isHasFunctionProto(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-K&R-style functions";
+      << Attr << "non-K&R-style functions";
     return false;
   }
   return true;
 }
 
-static unsigned OwnershipAttrSpellingMap(const AttributeList &Attr) {
+static unsigned OwnershipAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_ownership_holds = 0,
     CXX11_clang_ownership_holds = 1,
@@ -1740,10 +1828,10 @@
   }
 }
 
-static bool checkParamTypestateAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkParamTypestateAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -1753,10 +1841,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkPassObjectSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkPassObjectSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -1766,70 +1854,70 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkPragmaClangBSSSectionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isGlobalVar(D)) {
+static bool checkPragmaClangBSSSectionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "global variables";
+      << Attr << "global variables";
     return false;
   }
   return true;
 }
 
-static bool checkPragmaClangDataSectionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isGlobalVar(D)) {
+static bool checkPragmaClangDataSectionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "global variables";
+      << Attr << "global variables";
     return false;
   }
   return true;
 }
 
-static bool checkPragmaClangRodataSectionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isGlobalVar(D)) {
+static bool checkPragmaClangRodataSectionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "global variables";
+      << Attr << "global variables";
     return false;
   }
   return true;
 }
 
-static bool checkPragmaClangTextSectionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkPragmaClangTextSectionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkPtGuardedByAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkPtGuardedByAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkPtGuardedVarAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FieldDecl>(D) && !isSharedVar(D)) {
+static bool checkPtGuardedVarAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FieldDecl>(D) && !isSharedVar(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "non-static data members and global variables";
+      << Attr << "non-static data members and global variables";
     return false;
   }
   return true;
 }
 
-static bool checkReleaseCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkReleaseCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned ReleaseCapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned ReleaseCapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_release_capability = 0,
     CXX11_clang_release_capability = 1,
@@ -1855,16 +1943,16 @@
   }
 }
 
-static bool checkRenderScriptKernelAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkRenderScriptKernelAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkRenderScriptLangOpts(Sema &S, const AttributeList &Attr) {
+static bool checkRenderScriptLangOpts(Sema &S, const ParsedAttr &Attr) {
   if (S.LangOpts.RenderScript)
     return true;
 
@@ -1876,46 +1964,38 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkReqdWorkGroupSizeAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkReqdWorkGroupSizeAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkRequireConstantInitAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isGlobalVar(D)) {
+static bool checkRequireConstantInitAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isGlobalVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "global variables";
+      << Attr << "global variables";
     return false;
   }
   return true;
 }
 
-static bool checkCPlusPlusLangOpts(Sema &S, const AttributeList &Attr) {
-  if (S.LangOpts.CPlusPlus)
-    return true;
-
-  S.Diag(Attr.getLoc(), diag::warn_attribute_ignored) << Attr.getName();
-  return false;
-}
-
 static void matchRulesForRequireConstantInit(llvm::SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>> &MatchRules, const LangOptions &LangOpts) {
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_global, /*IsSupported=*/true));
 }
 
-static bool checkRequiresCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkRequiresCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned RequiresCapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned RequiresCapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_requires_capability = 0,
     CXX11_clang_requires_capability = 1,
@@ -1941,16 +2021,16 @@
   }
 }
 
-static bool checkRestrictAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkRestrictAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned RestrictAttrSpellingMap(const AttributeList &Attr) {
+static unsigned RestrictAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     Declspec_restrict = 0,
     GNU_malloc = 1,
@@ -1966,10 +2046,10 @@
   }
 }
 
-static bool checkReturnTypestateAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ParmVarDecl>(D)) {
+static bool checkReturnTypestateAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and parameters";
+      << Attr << "functions and parameters";
     return false;
   }
   return true;
@@ -1980,10 +2060,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkReturnsNonNullAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D)) {
+static bool checkReturnsNonNullAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods and functions";
+      << Attr << "Objective-C methods and functions";
     return false;
   }
   return true;
@@ -1994,34 +2074,34 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkReturnsTwiceAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkReturnsTwiceAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkScopedLockableAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkScopedLockableAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
 }
 
-static bool checkSectionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isGlobalVar(D) && !isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D)) {
+static bool checkSectionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isGlobalVar(D) && !isa<ObjCMethodDecl>(D) && !isa<ObjCPropertyDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions, global variables, Objective-C methods, and Objective-C properties";
+      << Attr << "functions, global variables, Objective-C methods, and Objective-C properties";
     return false;
   }
   return true;
 }
 
-static unsigned SectionAttrSpellingMap(const AttributeList &Attr) {
+static unsigned SectionAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_section = 0,
     CXX11_gnu_section = 1,
@@ -2044,10 +2124,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_property, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkSetTypestateAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXMethodDecl>(D)) {
+static bool checkSetTypestateAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -2057,19 +2137,19 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function_is_member, /*IsSupported=*/LangOpts.CPlusPlus));
 }
 
-static bool checkSharedTrylockFunctionAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkSharedTrylockFunctionAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkSwiftContextAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkSwiftContextAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -2079,10 +2159,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkSwiftErrorResultAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkSwiftErrorResultAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -2092,10 +2172,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_parameter, /*IsSupported=*/true));
 }
 
-static bool checkSwiftIndirectResultAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ParmVarDecl>(D)) {
+static bool checkSwiftIndirectResultAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ParmVarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "parameters";
+      << Attr << "parameters";
     return false;
   }
   return true;
@@ -2111,10 +2191,10 @@
   return false;
 }
 
-static bool checkTLSModelAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isTLSVar(D)) {
+static bool checkTLSModelAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isTLSVar(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "thread-local variables";
+      << Attr << "thread-local variables";
     return false;
   }
   return true;
@@ -2124,10 +2204,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_variable_is_thread_local, /*IsSupported=*/true));
 }
 
-static bool checkTargetAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkTargetAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -2137,10 +2217,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function, /*IsSupported=*/true));
 }
 
-static bool checkTestTypestateAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXMethodDecl>(D)) {
+static bool checkTestTypestateAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
@@ -2150,16 +2230,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_function_is_member, /*IsSupported=*/LangOpts.CPlusPlus));
 }
 
-static bool checkThreadAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D)) {
+static bool checkThreadAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables";
+      << Attr << "variables";
     return false;
   }
   return true;
 }
 
-static bool checkNotCPlusPlusLangOpts(Sema &S, const AttributeList &Attr) {
+static bool checkNotCPlusPlusLangOpts(Sema &S, const ParsedAttr &Attr) {
   if (!S.LangOpts.CPlusPlus)
     return true;
 
@@ -2167,10 +2247,10 @@
   return false;
 }
 
-static bool checkTrivialABIAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkTrivialABIAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
@@ -2180,16 +2260,16 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_record, /*IsSupported=*/true));
 }
 
-static bool checkTryAcquireCapabilityAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkTryAcquireCapabilityAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static unsigned TryAcquireCapabilityAttrSpellingMap(const AttributeList &Attr) {
+static unsigned TryAcquireCapabilityAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_try_acquire_capability = 0,
     CXX11_clang_try_acquire_capability = 1,
@@ -2207,16 +2287,16 @@
   }
 }
 
-static bool checkUnusedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<ObjCIvarDecl>(D) && !isa<TypeDecl>(D) && !isa<EnumDecl>(D) && !isa<EnumConstantDecl>(D) && !isa<LabelDecl>(D) && !isa<FieldDecl>(D) && !isa<ObjCMethodDecl>(D) && !isFunctionLike(D)) {
+static bool checkUnusedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<ObjCIvarDecl>(D) && !isa<TypeDecl>(D) && !isa<EnumDecl>(D) && !isa<EnumConstantDecl>(D) && !isa<LabelDecl>(D) && !isa<FieldDecl>(D) && !isa<ObjCMethodDecl>(D) && !isFunctionLike(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables, non-static data members, types, enums, enumerators, labels, non-static data members, Objective-C methods, functions, and function pointers";
+      << Attr << "variables, non-static data members, types, enums, enumerators, labels, non-static data members, Objective-C methods, functions, and function pointers";
     return false;
   }
   return true;
 }
 
-static unsigned UnusedAttrSpellingMap(const AttributeList &Attr) {
+static unsigned UnusedAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     CXX11_maybe_unused = 0,
     GNU_unused = 1,
@@ -2240,25 +2320,25 @@
   return false;
 }
 
-static bool checkUsedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isNonLocalVar(D) && !isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkUsedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isNonLocalVar(D) && !isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables with non-local storage, functions, and Objective-C methods";
+      << Attr << "variables with non-local storage, functions, and Objective-C methods";
     return false;
   }
   return true;
 }
 
-static bool checkUuidAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D) && !isa<EnumDecl>(D)) {
+static bool checkUuidAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D) && !isa<EnumDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, classes, and enums";
+      << Attr << "structs, unions, classes, and enums";
     return false;
   }
   return true;
 }
 
-static bool checkMicrosoftExtBorlandLangOpts(Sema &S, const AttributeList &Attr) {
+static bool checkMicrosoftExtBorlandLangOpts(Sema &S, const ParsedAttr &Attr) {
   if (S.LangOpts.MicrosoftExt || S.LangOpts.Borland)
     return true;
 
@@ -2266,43 +2346,43 @@
   return false;
 }
 
-static bool checkVecReturnAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<CXXRecordDecl>(D)) {
+static bool checkVecReturnAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "classes";
+      << Attr << "classes";
     return false;
   }
   return true;
 }
 
-static bool checkVecTypeHintAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkVecTypeHintAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkWarnUnusedAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<RecordDecl>(D)) {
+static bool checkWarnUnusedAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<RecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "structs, unions, and classes";
+      << Attr << "structs, unions, and classes";
     return false;
   }
   return true;
 }
 
-static bool checkWarnUnusedResultAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<ObjCMethodDecl>(D) && !isa<EnumDecl>(D) && !isa<RecordDecl>(D) && !isFunctionLike(D)) {
+static bool checkWarnUnusedResultAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<ObjCMethodDecl>(D) && !isa<EnumDecl>(D) && !isa<RecordDecl>(D) && !isFunctionLike(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "Objective-C methods, enums, structs, unions, classes, functions, and function pointers";
+      << Attr << "Objective-C methods, enums, structs, unions, classes, functions, and function pointers";
     return false;
   }
   return true;
 }
 
-static unsigned WarnUnusedResultAttrSpellingMap(const AttributeList &Attr) {
+static unsigned WarnUnusedResultAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     CXX11_nodiscard = 0,
     C2x_nodiscard = 1,
@@ -2329,43 +2409,43 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_hasType_functionType, /*IsSupported=*/true));
 }
 
-static bool checkWeakAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<CXXRecordDecl>(D)) {
+static bool checkWeakAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<FunctionDecl>(D) && !isa<CXXRecordDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables, functions, and classes";
+      << Attr << "variables, functions, and classes";
     return false;
   }
   return true;
 }
 
-static bool checkWeakRefAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<VarDecl>(D) && !isa<FunctionDecl>(D)) {
+static bool checkWeakRefAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<VarDecl>(D) && !isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "variables and functions";
+      << Attr << "variables and functions";
     return false;
   }
   return true;
 }
 
-static bool checkWorkGroupSizeHintAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D)) {
+static bool checkWorkGroupSizeHintAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::err_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions";
+      << Attr << "functions";
     return false;
   }
   return true;
 }
 
-static bool checkXRayInstrumentAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkXRayInstrumentAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and Objective-C methods";
+      << Attr << "functions and Objective-C methods";
     return false;
   }
   return true;
 }
 
-static unsigned XRayInstrumentAttrSpellingMap(const AttributeList &Attr) {
+static unsigned XRayInstrumentAttrSpellingMap(const ParsedAttr &Attr) {
   enum Spelling {
     GNU_xray_always_instrument = 0,
     CXX11_clang_xray_always_instrument = 1,
@@ -2392,10 +2472,10 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static bool checkXRayLogArgsAppertainsTo(Sema &S, const AttributeList &Attr, const Decl *D) {
-  if (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D)) {
+static bool checkXRayLogArgsAppertainsTo(Sema &S, const ParsedAttr &Attr, const Decl *D) {
+  if (!D || (!isa<FunctionDecl>(D) && !isa<ObjCMethodDecl>(D))) {
     S.Diag(Attr.getLoc(), diag::warn_attribute_wrong_decl_type_str)
-      << Attr.getName() << "functions and Objective-C methods";
+      << Attr << "functions and Objective-C methods";
     return false;
   }
   return true;
@@ -2406,12 +2486,12 @@
   MatchRules.push_back(std::make_pair(attr::SubjectMatchRule_objc_method, /*IsSupported=*/LangOpts.ObjC1));
 }
 
-static const ParsedAttrInfo AttrInfoMap[AttributeList::UnknownAttribute + 1] = {
+static const ParsedAttrInfo AttrInfoMap[ParsedAttr::UnknownAttribute + 1] = {
   { 2, 0, 0, 0, 0, 0, 0, 1, checkAMDGPUFlatWorkGroupSizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAMDGPUFlatWorkGroupSize },  // AT_AMDGPUFlatWorkGroupSize
   { 1, 0, 0, 0, 0, 0, 0, 1, checkAMDGPUNumSGPRAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAMDGPUNumSGPR },  // AT_AMDGPUNumSGPR
   { 1, 0, 0, 0, 0, 0, 0, 1, checkAMDGPUNumVGPRAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAMDGPUNumVGPR },  // AT_AMDGPUNumVGPR
   { 1, 1, 0, 0, 0, 0, 0, 1, checkAMDGPUWavesPerEUAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAMDGPUWavesPerEU },  // AT_AMDGPUWavesPerEU
-  { 0, 1, 1, 1, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, isTargetarmthumbarmebthumbebavrx86x86_64msp430mipsmipsel, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Interrupt
+  { 0, 1, 1, 1, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, isTargetarmthumbarmebthumbebavrx86x86_64msp430mipsmipselriscv32riscv64, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Interrupt
   { 0, 0, 0, 1, 0, 0, 1, 1, checkAVRSignalAppertainsTo, defaultDiagnoseLangOpts, isTargetavr, defaultSpellingIndexToSemanticSpelling, matchRulesForAVRSignal },  // AT_AVRSignal
   { 0, 15, 0, 0, 0, 0, 1, 1, checkAbiTagAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAbiTag },  // AT_AbiTag
   { 0, 15, 0, 0, 0, 0, 0, 0, checkAcquireCapabilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, AcquireCapabilityAttrSpellingMap, nullptr },  // AT_AcquireCapability
@@ -2437,12 +2517,14 @@
   { 1, 1, 0, 0, 0, 0, 1, 1, checkAssumeAlignedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAssumeAligned },  // AT_AssumeAligned
   { 8, 0, 1, 0, 0, 0, 0, 1, checkAvailabilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForAvailability },  // AT_Availability
   { 1, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Blocks
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CDecl
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CDecl
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCFAuditedTransferAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CFAuditedTransfer
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCFConsumedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CFConsumed
   { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CFReturnsNotRetained
   { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CFReturnsRetained
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCFUnknownTransferAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CFUnknownTransfer
+  { 0, 15, 0, 0, 0, 0, 0, 1, checkCPUDispatchAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForCPUDispatch },  // AT_CPUDispatch
+  { 0, 15, 0, 0, 0, 0, 0, 1, checkCPUSpecificAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForCPUSpecific },  // AT_CPUSpecific
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCUDAConstantAppertainsTo, checkCUDALangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CUDAConstant
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCUDADeviceAppertainsTo, checkCUDALangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CUDADevice
   { 0, 0, 0, 0, 0, 0, 0, 0, checkCUDAGlobalAppertainsTo, checkCUDALangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CUDAGlobal
@@ -2455,6 +2537,7 @@
   { 1, 0, 0, 0, 0, 0, 0, 0, checkCapabilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, CapabilityAttrSpellingMap, nullptr },  // AT_Capability
   { 0, 0, 0, 0, 0, 0, 0, 1, checkCarriesDependencyAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForCarriesDependency },  // AT_CarriesDependency
   { 1, 0, 0, 0, 0, 0, 1, 0, checkCleanupAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Cleanup
+  { 1, 0, 0, 0, 0, 0, 0, 0, checkCodeSegAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_CodeSeg
   { 0, 0, 0, 0, 0, 0, 1, 0, checkColdAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Cold
   { 0, 0, 0, 0, 0, 0, 1, 0, checkCommonAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Common
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Const
@@ -2476,7 +2559,7 @@
   { 1, 0, 0, 0, 0, 0, 0, 0, checkExtVectorTypeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_ExtVectorType
   { 0, 3, 1, 0, 0, 0, 0, 1, checkExternalSourceSymbolAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForExternalSourceSymbol },  // AT_ExternalSourceSymbol
   { 0, 0, 0, 0, 0, 1, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_FallThrough
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_FastCall
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_FastCall
   { 0, 0, 0, 0, 0, 0, 0, 1, checkFlagEnumAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForFlagEnum },  // AT_FlagEnum
   { 0, 0, 0, 0, 0, 0, 1, 1, checkFlattenAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForFlatten },  // AT_Flatten
   { 3, 0, 0, 0, 0, 0, 1, 0, checkFormatAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Format
@@ -2490,21 +2573,23 @@
   { 0, 1, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_IBOutletCollection
   { 1, 0, 0, 1, 0, 0, 1, 1, checkIFuncAppertainsTo, defaultDiagnoseLangOpts, isTargetELF, defaultSpellingIndexToSemanticSpelling, matchRulesForIFunc },  // AT_IFunc
   { 1, 0, 0, 0, 0, 0, 1, 0, checkInitPriorityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_InitPriority
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_IntelOclBicc
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_IntelOclBicc
   { 0, 0, 0, 0, 0, 0, 0, 1, checkInternalLinkageAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForInternalLinkage },  // AT_InternalLinkage
   { 0, 0, 0, 0, 0, 0, 0, 1, checkLTOVisibilityPublicAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForLTOVisibilityPublic },  // AT_LTOVisibilityPublic
   { 1, 0, 0, 1, 0, 0, 0, 0, checkLayoutVersionAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64Microsoft, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LayoutVersion
+  { 0, 0, 0, 0, 0, 0, 0, 0, checkLifetimeBoundAppertainsTo, checkCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LifetimeBound
   { 1, 0, 0, 0, 0, 0, 0, 0, checkLockReturnedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LockReturned
   { 0, 0, 0, 0, 0, 0, 0, 0, checkLockableAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Lockable
   { 0, 15, 0, 0, 0, 0, 0, 0, checkLocksExcludedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_LocksExcluded
   { 3, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, LoopHintAttrSpellingMap, nullptr },  // AT_LoopHint
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSABI
-  { 0, 1, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, checkMicrosoftExtLangOpts, defaultTargetRequirements, MSInheritanceAttrSpellingMap, nullptr },  // AT_MSInheritance
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSABI
+  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, checkMicrosoftExtLangOpts, defaultTargetRequirements, MSInheritanceAttrSpellingMap, nullptr },  // AT_MSInheritance
   { 0, 0, 0, 1, 0, 0, 0, 0, checkMSNoVTableAppertainsTo, defaultDiagnoseLangOpts, isTargetx86x86_64armthumbaarch64Microsoft, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSNoVTable
   { 0, 0, 0, 0, 0, 0, 1, 0, checkMSStructAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MSStruct
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MayAlias
   { 0, 0, 0, 1, 0, 0, 1, 1, checkMicroMipsAppertainsTo, defaultDiagnoseLangOpts, isTargetmipsmipsel, defaultSpellingIndexToSemanticSpelling, matchRulesForMicroMips },  // AT_MicroMips
   { 0, 0, 0, 0, 0, 0, 0, 0, checkMinSizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_MinSize
+  { 1, 0, 0, 0, 0, 0, 0, 1, checkMinVectorWidthAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForMinVectorWidth },  // AT_MinVectorWidth
   { 0, 0, 0, 1, 0, 0, 1, 0, checkMips16AppertainsTo, defaultDiagnoseLangOpts, isTargetmipsmipsel, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Mips16
   { 0, 0, 0, 1, 0, 0, 1, 1, checkMipsLongCallAppertainsTo, defaultDiagnoseLangOpts, isTargetmipsmipselmips64mips64el, MipsLongCallAttrSpellingMap, matchRulesForMipsLongCall },  // AT_MipsLongCall
   { 0, 0, 0, 1, 0, 0, 1, 1, checkMipsShortCallAppertainsTo, defaultDiagnoseLangOpts, isTargetmipsmipselmips64mips64el, MipsShortCallAttrSpellingMap, matchRulesForMipsShortCall },  // AT_MipsShortCall
@@ -2530,6 +2615,7 @@
   { 0, 15, 0, 0, 0, 0, 0, 1, checkNoSanitizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoSanitize },  // AT_NoSanitize
   { 0, 0, 0, 0, 0, 0, 1, 1, checkNoSanitizeSpecificAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoSanitizeSpecific },  // AT_NoSanitizeSpecific
   { 0, 0, 0, 0, 0, 0, 1, 1, checkNoSplitStackAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoSplitStack },  // AT_NoSplitStack
+  { 0, 0, 0, 0, 0, 0, 0, 1, checkNoStackProtectorAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoStackProtector },  // AT_NoStackProtector
   { 0, 0, 0, 0, 0, 0, 0, 0, checkNoThreadSafetyAnalysisAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_NoThreadSafetyAnalysis
   { 0, 0, 0, 0, 0, 0, 1, 1, checkNoThrowAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForNoThrow },  // AT_NoThrow
   { 0, 15, 0, 0, 0, 0, 1, 0, checkNonNullAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_NonNull
@@ -2570,21 +2656,21 @@
   { 1, 15, 0, 0, 0, 0, 0, 0, checkOwnershipAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, OwnershipAttrSpellingMap, nullptr },  // AT_Ownership
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Packed
   { 1, 0, 0, 0, 0, 0, 0, 1, checkParamTypestateAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForParamTypestate },  // AT_ParamTypestate
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pascal
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pascal
   { 1, 0, 0, 0, 0, 0, 0, 1, checkPassObjectSizeAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForPassObjectSize },  // AT_PassObjectSize
-  { 1, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pcs
+  { 1, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pcs
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangBSSSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangBSSSection
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangDataSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangDataSection
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangRodataSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangRodataSection
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPragmaClangTextSectionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PragmaClangTextSection
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PreserveAll
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PreserveMost
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PreserveAll
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PreserveMost
   { 1, 0, 0, 0, 0, 0, 0, 0, checkPtGuardedByAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PtGuardedBy
   { 0, 0, 0, 0, 0, 0, 0, 0, checkPtGuardedVarAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_PtGuardedVar
   { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Ptr32
   { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Ptr64
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Pure
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_RegCall
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_RegCall
   { 1, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Regparm
   { 0, 15, 0, 0, 0, 0, 0, 0, checkReleaseCapabilityAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, ReleaseCapabilityAttrSpellingMap, nullptr },  // AT_ReleaseCapability
   { 0, 0, 0, 0, 0, 0, 0, 1, checkRenderScriptKernelAppertainsTo, checkRenderScriptLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForRenderScriptKernel },  // AT_RenderScriptKernel
@@ -2602,17 +2688,17 @@
   { 0, 2, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Sentinel
   { 1, 0, 0, 0, 0, 0, 0, 1, checkSetTypestateAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForSetTypestate },  // AT_SetTypestate
   { 1, 15, 0, 0, 0, 0, 0, 0, checkSharedTrylockFunctionAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_SharedTrylockFunction
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_StdCall
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_StdCall
   { 0, 15, 0, 0, 0, 1, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Suppress
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_SwiftCall
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_SwiftCall
   { 0, 0, 0, 0, 0, 0, 0, 1, checkSwiftContextAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForSwiftContext },  // AT_SwiftContext
   { 0, 0, 0, 0, 0, 0, 0, 1, checkSwiftErrorResultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForSwiftErrorResult },  // AT_SwiftErrorResult
   { 0, 0, 0, 0, 0, 0, 0, 1, checkSwiftIndirectResultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForSwiftIndirectResult },  // AT_SwiftIndirectResult
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_SysVABI
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_SysVABI
   { 1, 0, 0, 0, 0, 0, 1, 1, checkTLSModelAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTLSModel },  // AT_TLSModel
   { 1, 0, 0, 0, 0, 0, 1, 1, checkTargetAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTarget },  // AT_Target
   { 1, 0, 0, 0, 0, 0, 0, 1, checkTestTypestateAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTestTypestate },  // AT_TestTypestate
-  { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_ThisCall
+  { 0, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_ThisCall
   { 0, 0, 0, 0, 0, 0, 0, 0, checkThreadAppertainsTo, checkMicrosoftExtLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Thread
   { 0, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, checkNotCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_TransparentUnion
   { 0, 0, 0, 0, 0, 0, 0, 1, checkTrivialABIAppertainsTo, checkCPlusPlusLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, matchRulesForTrivialABI },  // AT_TrivialABI
@@ -2629,7 +2715,7 @@
   { 1, 0, 0, 0, 0, 0, 0, 0, checkUuidAppertainsTo, checkMicrosoftExtBorlandLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Uuid
   { 0, 0, 0, 0, 0, 0, 0, 0, checkVecReturnAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_VecReturn
   { 1, 0, 0, 0, 0, 0, 0, 0, checkVecTypeHintAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_VecTypeHint
-  { 0, 0, 0, 0, 0, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_VectorCall
+  { 0, 0, 0, 0, 1, 0, 0, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_VectorCall
   { 1, 0, 0, 0, 1, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_VectorSize
   { 1, 0, 0, 0, 0, 0, 1, 0, defaultAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_Visibility
   { 0, 0, 0, 0, 0, 0, 1, 0, checkWarnUnusedAppertainsTo, defaultDiagnoseLangOpts, defaultTargetRequirements, defaultSpellingIndexToSemanticSpelling, nullptr },  // AT_WarnUnused
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
index f9df18c..506481b 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrKinds.inc
@@ -6,8 +6,8 @@
 |*                                                                            *|
 \*===----------------------------------------------------------------------===*/
 
-static AttributeList::Kind getAttrKind(StringRef Name, AttributeList::Syntax Syntax) {
-  if (AttributeList::AS_GNU == Syntax) {
+static ParsedAttr::Kind getAttrKind(StringRef Name, ParsedAttr::Syntax Syntax) {
+  if (ParsedAttr::AS_GNU == Syntax) {
   switch (Name.size()) {
   default: break;
   case 3:	 // 3 strings to match.
@@ -16,15 +16,15 @@
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ar", 2) != 0)
         break;
-      return AttributeList::AT_MipsLongCall;	 // "far"
+      return ParsedAttr::AT_MipsLongCall;	 // "far"
     case 'h':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ot", 2) != 0)
         break;
-      return AttributeList::AT_Hot;	 // "hot"
+      return ParsedAttr::AT_Hot;	 // "hot"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "cs", 2) != 0)
         break;
-      return AttributeList::AT_Pcs;	 // "pcs"
+      return ParsedAttr::AT_Pcs;	 // "pcs"
     }
     break;
   case 4:	 // 7 strings to match.
@@ -33,31 +33,31 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "old", 3) != 0)
         break;
-      return AttributeList::AT_Cold;	 // "cold"
+      return ParsedAttr::AT_Cold;	 // "cold"
     case 'h':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ost", 3) != 0)
         break;
-      return AttributeList::AT_CUDAHost;	 // "host"
+      return ParsedAttr::AT_CUDAHost;	 // "host"
     case 'm':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ode", 3) != 0)
         break;
-      return AttributeList::AT_Mode;	 // "mode"
+      return ParsedAttr::AT_Mode;	 // "mode"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ear", 3) != 0)
         break;
-      return AttributeList::AT_MipsShortCall;	 // "near"
+      return ParsedAttr::AT_MipsShortCall;	 // "near"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ure", 3) != 0)
         break;
-      return AttributeList::AT_Pure;	 // "pure"
+      return ParsedAttr::AT_Pure;	 // "pure"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+1, "sed", 3) != 0)
         break;
-      return AttributeList::AT_Used;	 // "used"
+      return ParsedAttr::AT_Used;	 // "used"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eak", 3) != 0)
         break;
-      return AttributeList::AT_Weak;	 // "weak"
+      return ParsedAttr::AT_Weak;	 // "weak"
     }
     break;
   case 5:	 // 6 strings to match.
@@ -66,35 +66,35 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lias", 4) != 0)
         break;
-      return AttributeList::AT_Alias;	 // "alias"
+      return ParsedAttr::AT_Alias;	 // "alias"
     case 'c':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'd':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ecl", 3) != 0)
           break;
-        return AttributeList::AT_CDecl;	 // "cdecl"
+        return ParsedAttr::AT_CDecl;	 // "cdecl"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+2, "nst", 3) != 0)
           break;
-        return AttributeList::AT_Const;	 // "const"
+        return ParsedAttr::AT_Const;	 // "const"
       }
       break;
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "func", 4) != 0)
         break;
-      return AttributeList::AT_IFunc;	 // "ifunc"
+      return ParsedAttr::AT_IFunc;	 // "ifunc"
     case 'n':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ked", 3) != 0)
           break;
-        return AttributeList::AT_Naked;	 // "naked"
+        return ParsedAttr::AT_Naked;	 // "naked"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+2, "svm", 3) != 0)
           break;
-        return AttributeList::AT_OpenCLNoSVM;	 // "nosvm"
+        return ParsedAttr::AT_OpenCLNoSVM;	 // "nosvm"
       }
       break;
     }
@@ -105,42 +105,42 @@
     case 'b':	 // 1 string to match.
       if (memcmp(Name.data()+1, "locks", 5) != 0)
         break;
-      return AttributeList::AT_Blocks;	 // "blocks"
+      return ParsedAttr::AT_Blocks;	 // "blocks"
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ommon", 5) != 0)
         break;
-      return AttributeList::AT_Common;	 // "common"
+      return ParsedAttr::AT_Common;	 // "common"
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+1, "evice", 5) != 0)
         break;
-      return AttributeList::AT_CUDADevice;	 // "device"
+      return ParsedAttr::AT_CUDADevice;	 // "device"
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ormat", 5) != 0)
         break;
-      return AttributeList::AT_Format;	 // "format"
+      return ParsedAttr::AT_Format;	 // "format"
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lobal", 5) != 0)
         break;
-      return AttributeList::AT_CUDAGlobal;	 // "global"
+      return ParsedAttr::AT_CUDAGlobal;	 // "global"
     case 'k':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ernel", 5) != 0)
         break;
-      return AttributeList::AT_RenderScriptKernel;	 // "kernel"
+      return ParsedAttr::AT_RenderScriptKernel;	 // "kernel"
     case 'm':	 // 3 strings to match.
       switch (Name[1]) {
       default: break;
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "lloc", 4) != 0)
           break;
-        return AttributeList::AT_Restrict;	 // "malloc"
+        return ParsedAttr::AT_Restrict;	 // "malloc"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ps16", 4) != 0)
           break;
-        return AttributeList::AT_Mips16;	 // "mips16"
+        return ParsedAttr::AT_Mips16;	 // "mips16"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_abi", 4) != 0)
           break;
-        return AttributeList::AT_MSABI;	 // "ms_abi"
+        return ParsedAttr::AT_MSABI;	 // "ms_abi"
       }
       break;
     case 'p':	 // 2 strings to match.
@@ -151,11 +151,11 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+3, "ked", 3) != 0)
           break;
-        return AttributeList::AT_Packed;	 // "packed"
+        return ParsedAttr::AT_Packed;	 // "packed"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+3, "cal", 3) != 0)
           break;
-        return AttributeList::AT_Pascal;	 // "pascal"
+        return ParsedAttr::AT_Pascal;	 // "pascal"
       }
       break;
     case 's':	 // 2 strings to match.
@@ -164,21 +164,21 @@
       case 'h':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ared", 4) != 0)
           break;
-        return AttributeList::AT_CUDAShared;	 // "shared"
+        return ParsedAttr::AT_CUDAShared;	 // "shared"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+2, "gnal", 4) != 0)
           break;
-        return AttributeList::AT_AVRSignal;	 // "signal"
+        return ParsedAttr::AT_AVRSignal;	 // "signal"
       }
       break;
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "arget", 5) != 0)
         break;
-      return AttributeList::AT_Target;	 // "target"
+      return ParsedAttr::AT_Target;	 // "target"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nused", 5) != 0)
         break;
-      return AttributeList::AT_Unused;	 // "unused"
+      return ParsedAttr::AT_Unused;	 // "unused"
     }
     break;
   case 7:	 // 18 strings to match.
@@ -187,36 +187,36 @@
     case '_':	 // 1 string to match.
       if (memcmp(Name.data()+1, "_const", 6) != 0)
         break;
-      return AttributeList::AT_Const;	 // "__const"
+      return ParsedAttr::AT_Const;	 // "__const"
     case 'a':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "i_tag", 5) != 0)
           break;
-        return AttributeList::AT_AbiTag;	 // "abi_tag"
+        return ParsedAttr::AT_AbiTag;	 // "abi_tag"
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+2, "igned", 5) != 0)
           break;
-        return AttributeList::AT_Aligned;	 // "aligned"
+        return ParsedAttr::AT_Aligned;	 // "aligned"
       }
       break;
     case 'b':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ounded", 6) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "bounded"
+      return ParsedAttr::IgnoredAttribute;	 // "bounded"
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "leanup", 6) != 0)
         break;
-      return AttributeList::AT_Cleanup;	 // "cleanup"
+      return ParsedAttr::AT_Cleanup;	 // "cleanup"
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "latten", 6) != 0)
         break;
-      return AttributeList::AT_Flatten;	 // "flatten"
+      return ParsedAttr::AT_Flatten;	 // "flatten"
     case 'm':	 // 1 string to match.
       if (memcmp(Name.data()+1, "insize", 6) != 0)
         break;
-      return AttributeList::AT_MinSize;	 // "minsize"
+      return ParsedAttr::AT_MinSize;	 // "minsize"
     case 'n':	 // 4 strings to match.
       switch (Name[1]) {
       default: break;
@@ -226,21 +226,21 @@
         case 'd':	 // 1 string to match.
           if (memcmp(Name.data()+3, "ebug", 4) != 0)
             break;
-          return AttributeList::AT_NoDebug;	 // "nodebug"
+          return ParsedAttr::AT_NoDebug;	 // "nodebug"
         case 'n':	 // 1 string to match.
           if (memcmp(Name.data()+3, "null", 4) != 0)
             break;
-          return AttributeList::AT_NonNull;	 // "nonnull"
+          return ParsedAttr::AT_NonNull;	 // "nonnull"
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+3, "hrow", 4) != 0)
             break;
-          return AttributeList::AT_NoThrow;	 // "nothrow"
+          return ParsedAttr::AT_NoThrow;	 // "nothrow"
         }
         break;
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_weak", 5) != 0)
           break;
-        return AttributeList::IgnoredAttribute;	 // "nv_weak"
+        return ParsedAttr::IgnoredAttribute;	 // "nv_weak"
       }
       break;
     case 'o':	 // 2 strings to match.
@@ -249,11 +249,11 @@
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "jc_gc", 5) != 0)
           break;
-        return AttributeList::AT_ObjCGC;	 // "objc_gc"
+        return ParsedAttr::AT_ObjCGC;	 // "objc_gc"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+2, "tnone", 5) != 0)
           break;
-        return AttributeList::AT_OptimizeNone;	 // "optnone"
+        return ParsedAttr::AT_OptimizeNone;	 // "optnone"
       }
       break;
     case 'r':	 // 2 strings to match.
@@ -264,11 +264,11 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+4, "all", 3) != 0)
           break;
-        return AttributeList::AT_RegCall;	 // "regcall"
+        return ParsedAttr::AT_RegCall;	 // "regcall"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+4, "arm", 3) != 0)
           break;
-        return AttributeList::AT_Regparm;	 // "regparm"
+        return ParsedAttr::AT_Regparm;	 // "regparm"
       }
       break;
     case 's':	 // 2 strings to match.
@@ -277,17 +277,17 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ction", 5) != 0)
           break;
-        return AttributeList::AT_Section;	 // "section"
+        return ParsedAttr::AT_Section;	 // "section"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+2, "dcall", 5) != 0)
           break;
-        return AttributeList::AT_StdCall;	 // "stdcall"
+        return ParsedAttr::AT_StdCall;	 // "stdcall"
       }
       break;
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eakref", 6) != 0)
         break;
-      return AttributeList::AT_WeakRef;	 // "weakref"
+      return ParsedAttr::AT_WeakRef;	 // "weakref"
     }
     break;
   case 8:	 // 15 strings to match.
@@ -296,19 +296,19 @@
     case 'N':	 // 1 string to match.
       if (memcmp(Name.data()+1, "SObject", 7) != 0)
         break;
-      return AttributeList::AT_ObjCNSObject;	 // "NSObject"
+      return ParsedAttr::AT_ObjCNSObject;	 // "NSObject"
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nnotate", 7) != 0)
         break;
-      return AttributeList::AT_Annotate;	 // "annotate"
+      return ParsedAttr::AT_Annotate;	 // "annotate"
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "onstant", 7) != 0)
         break;
-      return AttributeList::AT_CUDAConstant;	 // "constant"
+      return ParsedAttr::AT_CUDAConstant;	 // "constant"
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "astcall", 7) != 0)
         break;
-      return AttributeList::AT_FastCall;	 // "fastcall"
+      return ParsedAttr::AT_FastCall;	 // "fastcall"
     case 'i':	 // 2 strings to match.
       if (Name[1] != 'b')
         break;
@@ -317,17 +317,17 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+3, "ction", 5) != 0)
           break;
-        return AttributeList::AT_IBAction;	 // "ibaction"
+        return ParsedAttr::AT_IBAction;	 // "ibaction"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+3, "utlet", 5) != 0)
           break;
-        return AttributeList::AT_IBOutlet;	 // "iboutlet"
+        return ParsedAttr::AT_IBOutlet;	 // "iboutlet"
       }
       break;
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ockable", 7) != 0)
         break;
-      return AttributeList::AT_Lockable;	 // "lockable"
+      return ParsedAttr::AT_Lockable;	 // "lockable"
     case 'n':	 // 5 strings to match.
       if (Name[1] != 'o')
         break;
@@ -336,23 +336,23 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+3, "ommon", 5) != 0)
           break;
-        return AttributeList::AT_NoCommon;	 // "nocommon"
+        return ParsedAttr::AT_NoCommon;	 // "nocommon"
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+3, "scape", 5) != 0)
           break;
-        return AttributeList::AT_NoEscape;	 // "noescape"
+        return ParsedAttr::AT_NoEscape;	 // "noescape"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+3, "nline", 5) != 0)
           break;
-        return AttributeList::AT_NoInline;	 // "noinline"
+        return ParsedAttr::AT_NoInline;	 // "noinline"
       case 'm':	 // 1 string to match.
         if (memcmp(Name.data()+3, "ips16", 5) != 0)
           break;
-        return AttributeList::AT_NoMips16;	 // "nomips16"
+        return ParsedAttr::AT_NoMips16;	 // "nomips16"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+3, "eturn", 5) != 0)
           break;
-        return AttributeList::AT_NoReturn;	 // "noreturn"
+        return ParsedAttr::AT_NoReturn;	 // "noreturn"
       }
       break;
     case 's':	 // 2 strings to match.
@@ -361,17 +361,17 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ntinel", 6) != 0)
           break;
-        return AttributeList::AT_Sentinel;	 // "sentinel"
+        return ParsedAttr::AT_Sentinel;	 // "sentinel"
       case 'y':	 // 1 string to match.
         if (memcmp(Name.data()+2, "sv_abi", 6) != 0)
           break;
-        return AttributeList::AT_SysVABI;	 // "sysv_abi"
+        return ParsedAttr::AT_SysVABI;	 // "sysv_abi"
       }
       break;
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "hiscall", 7) != 0)
         break;
-      return AttributeList::AT_ThisCall;	 // "thiscall"
+      return ParsedAttr::AT_ThisCall;	 // "thiscall"
     }
     break;
   case 9:	 // 13 strings to match.
@@ -385,44 +385,44 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+4, "xport", 5) != 0)
           break;
-        return AttributeList::AT_DLLExport;	 // "dllexport"
+        return ParsedAttr::AT_DLLExport;	 // "dllexport"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+4, "mport", 5) != 0)
           break;
-        return AttributeList::AT_DLLImport;	 // "dllimport"
+        return ParsedAttr::AT_DLLImport;	 // "dllimport"
       }
       break;
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nable_if", 8) != 0)
         break;
-      return AttributeList::AT_EnableIf;	 // "enable_if"
+      return ParsedAttr::AT_EnableIf;	 // "enable_if"
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lag_enum", 8) != 0)
         break;
-      return AttributeList::AT_FlagEnum;	 // "flag_enum"
+      return ParsedAttr::AT_FlagEnum;	 // "flag_enum"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nterrupt", 8) != 0)
         break;
-      return AttributeList::AT_Interrupt;	 // "interrupt"
+      return ParsedAttr::AT_Interrupt;	 // "interrupt"
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ong_call", 8) != 0)
         break;
-      return AttributeList::AT_MipsLongCall;	 // "long_call"
+      return ParsedAttr::AT_MipsLongCall;	 // "long_call"
     case 'm':	 // 3 strings to match.
       switch (Name[1]) {
       default: break;
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "y_alias", 7) != 0)
           break;
-        return AttributeList::AT_MayAlias;	 // "may_alias"
+        return ParsedAttr::AT_MayAlias;	 // "may_alias"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+2, "cromips", 7) != 0)
           break;
-        return AttributeList::AT_MicroMips;	 // "micromips"
+        return ParsedAttr::AT_MicroMips;	 // "micromips"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_struct", 7) != 0)
           break;
-        return AttributeList::AT_MSStruct;	 // "ms_struct"
+        return ParsedAttr::AT_MSStruct;	 // "ms_struct"
       }
       break;
     case 's':	 // 2 strings to match.
@@ -431,21 +431,21 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "lectany", 7) != 0)
           break;
-        return AttributeList::AT_SelectAny;	 // "selectany"
+        return ParsedAttr::AT_SelectAny;	 // "selectany"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+2, "iftcall", 7) != 0)
           break;
-        return AttributeList::AT_SwiftCall;	 // "swiftcall"
+        return ParsedAttr::AT_SwiftCall;	 // "swiftcall"
       }
       break;
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ls_model", 8) != 0)
         break;
-      return AttributeList::AT_TLSModel;	 // "tls_model"
+      return ParsedAttr::AT_TLSModel;	 // "tls_model"
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ecreturn", 8) != 0)
         break;
-      return AttributeList::AT_VecReturn;	 // "vecreturn"
+      return ParsedAttr::AT_VecReturn;	 // "vecreturn"
     }
     break;
   case 10:	 // 14 strings to match.
@@ -457,11 +457,11 @@
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+2, "loc_size", 8) != 0)
           break;
-        return AttributeList::AT_AllocSize;	 // "alloc_size"
+        return ParsedAttr::AT_AllocSize;	 // "alloc_size"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+2, "tificial", 8) != 0)
           break;
-        return AttributeList::AT_Artificial;	 // "artificial"
+        return ParsedAttr::AT_Artificial;	 // "artificial"
       }
       break;
     case 'c':	 // 3 strings to match.
@@ -470,7 +470,7 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "pability", 8) != 0)
           break;
-        return AttributeList::AT_Capability;	 // "capability"
+        return ParsedAttr::AT_Capability;	 // "capability"
       case 'o':	 // 2 strings to match.
         if (Name[2] != 'n')
           break;
@@ -479,11 +479,11 @@
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+4, "umable", 6) != 0)
             break;
-          return AttributeList::AT_Consumable;	 // "consumable"
+          return ParsedAttr::AT_Consumable;	 // "consumable"
         case 'v':	 // 1 string to match.
           if (memcmp(Name.data()+4, "ergent", 6) != 0)
             break;
-          return AttributeList::AT_Convergent;	 // "convergent"
+          return ParsedAttr::AT_Convergent;	 // "convergent"
         }
         break;
       }
@@ -496,49 +496,49 @@
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+3, "recated", 7) != 0)
           break;
-        return AttributeList::AT_Deprecated;	 // "deprecated"
+        return ParsedAttr::AT_Deprecated;	 // "deprecated"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+3, "tructor", 7) != 0)
           break;
-        return AttributeList::AT_Destructor;	 // "destructor"
+        return ParsedAttr::AT_Destructor;	 // "destructor"
       }
       break;
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ormat_arg", 9) != 0)
         break;
-      return AttributeList::AT_FormatArg;	 // "format_arg"
+      return ParsedAttr::AT_FormatArg;	 // "format_arg"
     case 'g':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+2, "u_inline", 8) != 0)
           break;
-        return AttributeList::AT_GNUInline;	 // "gnu_inline"
+        return ParsedAttr::AT_GNUInline;	 // "gnu_inline"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+2, "arded_by", 8) != 0)
           break;
-        return AttributeList::AT_GuardedBy;	 // "guarded_by"
+        return ParsedAttr::AT_GuardedBy;	 // "guarded_by"
       }
       break;
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ocf_check", 9) != 0)
         break;
-      return AttributeList::AT_AnyX86NoCfCheck;	 // "nocf_check"
+      return ParsedAttr::AT_AnyX86NoCfCheck;	 // "nocf_check"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "hort_call", 9) != 0)
         break;
-      return AttributeList::AT_MipsShortCall;	 // "short_call"
+      return ParsedAttr::AT_MipsShortCall;	 // "short_call"
     case 'v':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ctorcall", 8) != 0)
           break;
-        return AttributeList::AT_VectorCall;	 // "vectorcall"
+        return ParsedAttr::AT_VectorCall;	 // "vectorcall"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+2, "sibility", 8) != 0)
           break;
-        return AttributeList::AT_Visibility;	 // "visibility"
+        return ParsedAttr::AT_Visibility;	 // "visibility"
       }
       break;
     }
@@ -554,11 +554,11 @@
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+3, "gn_value", 8) != 0)
           break;
-        return AttributeList::AT_AlignValue;	 // "align_value"
+        return ParsedAttr::AT_AlignValue;	 // "align_value"
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+3, "oc_align", 8) != 0)
           break;
-        return AttributeList::AT_AllocAlign;	 // "alloc_align"
+        return ParsedAttr::AT_AllocAlign;	 // "alloc_align"
       }
       break;
     case 'c':	 // 2 strings to match.
@@ -567,21 +567,21 @@
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
           break;
-        return AttributeList::AT_CFConsumed;	 // "cf_consumed"
+        return ParsedAttr::AT_CFConsumed;	 // "cf_consumed"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+2, "nstructor", 9) != 0)
           break;
-        return AttributeList::AT_Constructor;	 // "constructor"
+        return ParsedAttr::AT_Constructor;	 // "constructor"
       }
       break;
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+1, "iagnose_if", 10) != 0)
         break;
-      return AttributeList::AT_DiagnoseIf;	 // "diagnose_if"
+      return ParsedAttr::AT_DiagnoseIf;	 // "diagnose_if"
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "uarded_var", 10) != 0)
         break;
-      return AttributeList::AT_GuardedVar;	 // "guarded_var"
+      return ParsedAttr::AT_GuardedVar;	 // "guarded_var"
     case 'n':	 // 4 strings to match.
       switch (Name[1]) {
       default: break;
@@ -591,81 +591,96 @@
         case '_':	 // 1 string to match.
           if (memcmp(Name.data()+3, "sanitize", 8) != 0)
             break;
-          return AttributeList::AT_NoSanitize;	 // "no_sanitize"
+          return ParsedAttr::AT_NoSanitize;	 // "no_sanitize"
         case 'd':	 // 1 string to match.
           if (memcmp(Name.data()+3, "uplicate", 8) != 0)
             break;
-          return AttributeList::AT_NoDuplicate;	 // "noduplicate"
+          return ParsedAttr::AT_NoDuplicate;	 // "noduplicate"
         case 'm':	 // 1 string to match.
           if (memcmp(Name.data()+3, "icromips", 8) != 0)
             break;
-          return AttributeList::AT_NoMicroMips;	 // "nomicromips"
+          return ParsedAttr::AT_NoMicroMips;	 // "nomicromips"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_consumed", 9) != 0)
           break;
-        return AttributeList::AT_NSConsumed;	 // "ns_consumed"
+        return ParsedAttr::AT_NSConsumed;	 // "ns_consumed"
       }
       break;
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+1, "bjc_bridge", 10) != 0)
         break;
-      return AttributeList::AT_ObjCBridge;	 // "objc_bridge"
+      return ParsedAttr::AT_ObjCBridge;	 // "objc_bridge"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "rivial_abi", 10) != 0)
         break;
-      return AttributeList::AT_TrivialABI;	 // "trivial_abi"
+      return ParsedAttr::AT_TrivialABI;	 // "trivial_abi"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+1, "navailable", 10) != 0)
         break;
-      return AttributeList::AT_Unavailable;	 // "unavailable"
+      return ParsedAttr::AT_Unavailable;	 // "unavailable"
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ector_size", 10) != 0)
         break;
-      return AttributeList::AT_VectorSize;	 // "vector_size"
+      return ParsedAttr::AT_VectorSize;	 // "vector_size"
     case 'w':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "rn_unused", 9) != 0)
           break;
-        return AttributeList::AT_WarnUnused;	 // "warn_unused"
+        return ParsedAttr::AT_WarnUnused;	 // "warn_unused"
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ak_import", 9) != 0)
           break;
-        return AttributeList::AT_WeakImport;	 // "weak_import"
+        return ParsedAttr::AT_WeakImport;	 // "weak_import"
       }
       break;
     }
     break;
-  case 12:	 // 4 strings to match.
+  case 12:	 // 6 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "vailability", 11) != 0)
         break;
-      return AttributeList::AT_Availability;	 // "availability"
+      return ParsedAttr::AT_Availability;	 // "availability"
+    case 'c':	 // 2 strings to match.
+      if (memcmp(Name.data()+1, "pu_", 3) != 0)
+        break;
+      switch (Name[4]) {
+      default: break;
+      case 'd':	 // 1 string to match.
+        if (memcmp(Name.data()+5, "ispatch", 7) != 0)
+          break;
+        return ParsedAttr::AT_CPUDispatch;	 // "cpu_dispatch"
+      case 's':	 // 1 string to match.
+        if (memcmp(Name.data()+5, "pecific", 7) != 0)
+          break;
+        return ParsedAttr::AT_CPUSpecific;	 // "cpu_specific"
+      }
+      break;
     case 'o':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "jc_boxable", 10) != 0)
           break;
-        return AttributeList::AT_ObjCBoxable;	 // "objc_boxable"
+        return ParsedAttr::AT_ObjCBoxable;	 // "objc_boxable"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+2, "erloadable", 10) != 0)
           break;
-        return AttributeList::AT_Overloadable;	 // "overloadable"
+        return ParsedAttr::AT_Overloadable;	 // "overloadable"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "reserve_all", 11) != 0)
         break;
-      return AttributeList::AT_PreserveAll;	 // "preserve_all"
+      return ParsedAttr::AT_PreserveAll;	 // "preserve_all"
     }
     break;
-  case 13:	 // 13 strings to match.
+  case 13:	 // 14 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 2 strings to match.
@@ -674,32 +689,36 @@
       case 'd':	 // 1 string to match.
         if (memcmp(Name.data()+2, "dress_space", 11) != 0)
           break;
-        return AttributeList::AT_AddressSpace;	 // "address_space"
+        return ParsedAttr::AT_AddressSpace;	 // "address_space"
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ways_inline", 11) != 0)
           break;
-        return AttributeList::AT_AlwaysInline;	 // "always_inline"
+        return ParsedAttr::AT_AlwaysInline;	 // "always_inline"
       }
       break;
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "allable_when", 12) != 0)
         break;
-      return AttributeList::AT_CallableWhen;	 // "callable_when"
+      return ParsedAttr::AT_CallableWhen;	 // "callable_when"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nit_priority", 12) != 0)
         break;
-      return AttributeList::AT_InitPriority;	 // "init_priority"
-    case 'l':	 // 2 strings to match.
+      return ParsedAttr::AT_InitPriority;	 // "init_priority"
+    case 'l':	 // 3 strings to match.
       switch (Name[1]) {
       default: break;
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+2, "unch_bounds", 11) != 0)
           break;
-        return AttributeList::AT_CUDALaunchBounds;	 // "launch_bounds"
+        return ParsedAttr::AT_CUDALaunchBounds;	 // "launch_bounds"
+      case 'i':	 // 1 string to match.
+        if (memcmp(Name.data()+2, "fetimebound", 11) != 0)
+          break;
+        return ParsedAttr::AT_LifetimeBound;	 // "lifetimebound"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ck_returned", 11) != 0)
           break;
-        return AttributeList::AT_LockReturned;	 // "lock_returned"
+        return ParsedAttr::AT_LockReturned;	 // "lock_returned"
       }
       break;
     case 'p':	 // 2 strings to match.
@@ -708,38 +727,38 @@
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+2, "eserve_most", 11) != 0)
           break;
-        return AttributeList::AT_PreserveMost;	 // "preserve_most"
+        return ParsedAttr::AT_PreserveMost;	 // "preserve_most"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_guarded_by", 11) != 0)
           break;
-        return AttributeList::AT_PtGuardedBy;	 // "pt_guarded_by"
+        return ParsedAttr::AT_PtGuardedBy;	 // "pt_guarded_by"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eturns_twice", 12) != 0)
         break;
-      return AttributeList::AT_ReturnsTwice;	 // "returns_twice"
+      return ParsedAttr::AT_ReturnsTwice;	 // "returns_twice"
     case 's':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "t_typestate", 11) != 0)
           break;
-        return AttributeList::AT_SetTypestate;	 // "set_typestate"
+        return ParsedAttr::AT_SetTypestate;	 // "set_typestate"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ift_context", 11) != 0)
           break;
-        return AttributeList::AT_SwiftContext;	 // "swift_context"
+        return ParsedAttr::AT_SwiftContext;	 // "swift_context"
       }
       break;
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ec_type_hint", 12) != 0)
         break;
-      return AttributeList::AT_VecTypeHint;	 // "vec_type_hint"
+      return ParsedAttr::AT_VecTypeHint;	 // "vec_type_hint"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ray_log_args", 12) != 0)
         break;
-      return AttributeList::AT_XRayLogArgs;	 // "xray_log_args"
+      return ParsedAttr::AT_XRayLogArgs;	 // "xray_log_args"
     }
     break;
   case 14:	 // 11 strings to match.
@@ -751,33 +770,33 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+2, "quired_after", 12) != 0)
           break;
-        return AttributeList::AT_AcquiredAfter;	 // "acquired_after"
+        return ParsedAttr::AT_AcquiredAfter;	 // "acquired_after"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "sume_aligned", 12) != 0)
           break;
-        return AttributeList::AT_AssumeAligned;	 // "assume_aligned"
+        return ParsedAttr::AT_AssumeAligned;	 // "assume_aligned"
       }
       break;
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "udart_builtin", 13) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "cudart_builtin"
+      return ParsedAttr::IgnoredAttribute;	 // "cudart_builtin"
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+1, "evice_builtin", 13) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "device_builtin"
+      return ParsedAttr::IgnoredAttribute;	 // "device_builtin"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ntel_ocl_bicc", 13) != 0)
         break;
-      return AttributeList::AT_IntelOclBicc;	 // "intel_ocl_bicc"
+      return ParsedAttr::AT_IntelOclBicc;	 // "intel_ocl_bicc"
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ocks_excluded", 13) != 0)
         break;
-      return AttributeList::AT_LocksExcluded;	 // "locks_excluded"
+      return ParsedAttr::AT_LocksExcluded;	 // "locks_excluded"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "o_split_stack", 13) != 0)
         break;
-      return AttributeList::AT_NoSplitStack;	 // "no_split_stack"
+      return ParsedAttr::AT_NoSplitStack;	 // "no_split_stack"
     case 'o':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "bjc_", 4) != 0)
         break;
@@ -786,21 +805,21 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+6, "xception", 8) != 0)
           break;
-        return AttributeList::AT_ObjCException;	 // "objc_exception"
+        return ParsedAttr::AT_ObjCException;	 // "objc_exception"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+6, "wnership", 8) != 0)
           break;
-        return AttributeList::AT_ObjCOwnership;	 // "objc_ownership"
+        return ParsedAttr::AT_ObjCOwnership;	 // "objc_ownership"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "t_guarded_var", 13) != 0)
         break;
-      return AttributeList::AT_PtGuardedVar;	 // "pt_guarded_var"
+      return ParsedAttr::AT_PtGuardedVar;	 // "pt_guarded_var"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "est_typestate", 13) != 0)
         break;
-      return AttributeList::AT_TestTypestate;	 // "test_typestate"
+      return ParsedAttr::AT_TestTypestate;	 // "test_typestate"
     }
     break;
   case 15:	 // 13 strings to match.
@@ -812,7 +831,7 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+2, "quired_before", 13) != 0)
           break;
-        return AttributeList::AT_AcquiredBefore;	 // "acquired_before"
+        return ParsedAttr::AT_AcquiredBefore;	 // "acquired_before"
       case 'm':	 // 2 strings to match.
         if (memcmp(Name.data()+2, "dgpu_num_", 9) != 0)
           break;
@@ -821,11 +840,11 @@
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+12, "gpr", 3) != 0)
             break;
-          return AttributeList::AT_AMDGPUNumSGPR;	 // "amdgpu_num_sgpr"
+          return ParsedAttr::AT_AMDGPUNumSGPR;	 // "amdgpu_num_sgpr"
         case 'v':	 // 1 string to match.
           if (memcmp(Name.data()+12, "gpr", 3) != 0)
             break;
-          return AttributeList::AT_AMDGPUNumVGPR;	 // "amdgpu_num_vgpr"
+          return ParsedAttr::AT_AMDGPUNumVGPR;	 // "amdgpu_num_vgpr"
         }
         break;
       }
@@ -833,18 +852,18 @@
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "xt_vector_type", 14) != 0)
         break;
-      return AttributeList::AT_ExtVectorType;	 // "ext_vector_type"
+      return ParsedAttr::AT_ExtVectorType;	 // "ext_vector_type"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ot_tail_called", 14) != 0)
         break;
-      return AttributeList::AT_NotTailCalled;	 // "not_tail_called"
+      return ParsedAttr::AT_NotTailCalled;	 // "not_tail_called"
     case 'o':	 // 3 strings to match.
       switch (Name[1]) {
       default: break;
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "jc_root_class", 13) != 0)
           break;
-        return AttributeList::AT_ObjCRootClass;	 // "objc_root_class"
+        return ParsedAttr::AT_ObjCRootClass;	 // "objc_root_class"
       case 'w':	 // 2 strings to match.
         if (memcmp(Name.data()+2, "nership_", 8) != 0)
           break;
@@ -853,11 +872,11 @@
         case 'h':	 // 1 string to match.
           if (memcmp(Name.data()+11, "olds", 4) != 0)
             break;
-          return AttributeList::AT_Ownership;	 // "ownership_holds"
+          return ParsedAttr::AT_Ownership;	 // "ownership_holds"
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+11, "akes", 4) != 0)
             break;
-          return AttributeList::AT_Ownership;	 // "ownership_takes"
+          return ParsedAttr::AT_Ownership;	 // "ownership_takes"
         }
         break;
       }
@@ -865,53 +884,57 @@
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "aram_typestate", 14) != 0)
         break;
-      return AttributeList::AT_ParamTypestate;	 // "param_typestate"
+      return ParsedAttr::AT_ParamTypestate;	 // "param_typestate"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eturns_nonnull", 14) != 0)
         break;
-      return AttributeList::AT_ReturnsNonNull;	 // "returns_nonnull"
+      return ParsedAttr::AT_ReturnsNonNull;	 // "returns_nonnull"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "coped_lockable", 14) != 0)
         break;
-      return AttributeList::AT_ScopedLockable;	 // "scoped_lockable"
+      return ParsedAttr::AT_ScopedLockable;	 // "scoped_lockable"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ype_visibility", 14) != 0)
         break;
-      return AttributeList::AT_TypeVisibility;	 // "type_visibility"
+      return ParsedAttr::AT_TypeVisibility;	 // "type_visibility"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nlock_function", 14) != 0)
         break;
-      return AttributeList::AT_ReleaseCapability;	 // "unlock_function"
+      return ParsedAttr::AT_ReleaseCapability;	 // "unlock_function"
     }
     break;
-  case 16:	 // 5 strings to match.
+  case 16:	 // 6 strings to match.
     switch (Name[0]) {
     default: break;
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nternal_linkage", 15) != 0)
         break;
-      return AttributeList::AT_InternalLinkage;	 // "internal_linkage"
+      return ParsedAttr::AT_InternalLinkage;	 // "internal_linkage"
+    case 'm':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "in_vector_width", 15) != 0)
+        break;
+      return ParsedAttr::AT_MinVectorWidth;	 // "min_vector_width"
     case 'n':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+2, "on_vector_type", 14) != 0)
           break;
-        return AttributeList::AT_NeonVectorType;	 // "neon_vector_type"
+        return ParsedAttr::AT_NeonVectorType;	 // "neon_vector_type"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_consumes_self", 14) != 0)
           break;
-        return AttributeList::AT_NSConsumesSelf;	 // "ns_consumes_self"
+        return ParsedAttr::AT_NSConsumesSelf;	 // "ns_consumes_self"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ass_object_size", 15) != 0)
         break;
-      return AttributeList::AT_PassObjectSize;	 // "pass_object_size"
+      return ParsedAttr::AT_PassObjectSize;	 // "pass_object_size"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eturn_typestate", 15) != 0)
         break;
-      return AttributeList::AT_ReturnTypestate;	 // "return_typestate"
+      return ParsedAttr::AT_ReturnTypestate;	 // "return_typestate"
     }
     break;
   case 17:	 // 6 strings to match.
@@ -923,11 +946,11 @@
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+2, "alyzer_noreturn", 15) != 0)
           break;
-        return AttributeList::AT_AnalyzerNoReturn;	 // "analyzer_noreturn"
+        return ParsedAttr::AT_AnalyzerNoReturn;	 // "analyzer_noreturn"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "sert_capability", 15) != 0)
           break;
-        return AttributeList::AT_AssertCapability;	 // "assert_capability"
+        return ParsedAttr::AT_AssertCapability;	 // "assert_capability"
       }
       break;
     case 'o':	 // 2 strings to match.
@@ -936,24 +959,24 @@
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "jc_runtime_name", 15) != 0)
           break;
-        return AttributeList::AT_ObjCRuntimeName;	 // "objc_runtime_name"
+        return ParsedAttr::AT_ObjCRuntimeName;	 // "objc_runtime_name"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+2, "nership_returns", 15) != 0)
           break;
-        return AttributeList::AT_Ownership;	 // "ownership_returns"
+        return ParsedAttr::AT_Ownership;	 // "ownership_returns"
       }
       break;
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "hared_capability", 16) != 0)
         break;
-      return AttributeList::AT_Capability;	 // "shared_capability"
+      return ParsedAttr::AT_Capability;	 // "shared_capability"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ransparent_union", 16) != 0)
         break;
-      return AttributeList::AT_TransparentUnion;	 // "transparent_union"
+      return ParsedAttr::AT_TransparentUnion;	 // "transparent_union"
     }
     break;
-  case 18:	 // 13 strings to match.
+  case 18:	 // 14 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 2 strings to match.
@@ -962,42 +985,53 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+2, "quire_capability", 16) != 0)
           break;
-        return AttributeList::AT_AcquireCapability;	 // "acquire_capability"
+        return ParsedAttr::AT_AcquireCapability;	 // "acquire_capability"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "sert_shared_lock", 16) != 0)
           break;
-        return AttributeList::AT_AssertSharedLock;	 // "assert_shared_lock"
+        return ParsedAttr::AT_AssertSharedLock;	 // "assert_shared_lock"
       }
       break;
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "arries_dependency", 17) != 0)
         break;
-      return AttributeList::AT_CarriesDependency;	 // "carries_dependency"
+      return ParsedAttr::AT_CarriesDependency;	 // "carries_dependency"
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+1, "isable_tail_calls", 17) != 0)
         break;
-      return AttributeList::AT_DisableTailCalls;	 // "disable_tail_calls"
+      return ParsedAttr::AT_DisableTailCalls;	 // "disable_tail_calls"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "num_extensibility", 17) != 0)
         break;
-      return AttributeList::AT_EnumExtensibility;	 // "enum_extensibility"
+      return ParsedAttr::AT_EnumExtensibility;	 // "enum_extensibility"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "boutletcollection", 17) != 0)
         break;
-      return AttributeList::AT_IBOutletCollection;	 // "iboutletcollection"
-    case 'n':	 // 2 strings to match.
-      if (memcmp(Name.data()+1, "o_sanitize_", 11) != 0)
+      return ParsedAttr::AT_IBOutletCollection;	 // "iboutletcollection"
+    case 'n':	 // 3 strings to match.
+      if (memcmp(Name.data()+1, "o_s", 3) != 0)
         break;
-      switch (Name[12]) {
+      switch (Name[4]) {
       default: break;
-      case 'm':	 // 1 string to match.
-        if (memcmp(Name.data()+13, "emory", 5) != 0)
+      case 'a':	 // 2 strings to match.
+        if (memcmp(Name.data()+5, "nitize_", 7) != 0)
           break;
-        return AttributeList::AT_NoSanitizeSpecific;	 // "no_sanitize_memory"
+        switch (Name[12]) {
+        default: break;
+        case 'm':	 // 1 string to match.
+          if (memcmp(Name.data()+13, "emory", 5) != 0)
+            break;
+          return ParsedAttr::AT_NoSanitizeSpecific;	 // "no_sanitize_memory"
+        case 't':	 // 1 string to match.
+          if (memcmp(Name.data()+13, "hread", 5) != 0)
+            break;
+          return ParsedAttr::AT_NoSanitizeSpecific;	 // "no_sanitize_thread"
+        }
+        break;
       case 't':	 // 1 string to match.
-        if (memcmp(Name.data()+13, "hread", 5) != 0)
+        if (memcmp(Name.data()+5, "ack_protector", 13) != 0)
           break;
-        return AttributeList::AT_NoSanitizeSpecific;	 // "no_sanitize_thread"
+        return ParsedAttr::AT_NoStackProtector;	 // "no_stack_protector"
       }
       break;
     case 'o':	 // 2 strings to match.
@@ -1006,25 +1040,25 @@
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+2, "jc_method_family", 16) != 0)
           break;
-        return AttributeList::AT_ObjCMethodFamily;	 // "objc_method_family"
+        return ParsedAttr::AT_ObjCMethodFamily;	 // "objc_method_family"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+2, "encl_unroll_hint", 16) != 0)
           break;
-        return AttributeList::AT_OpenCLUnrollHint;	 // "opencl_unroll_hint"
+        return ParsedAttr::AT_OpenCLUnrollHint;	 // "opencl_unroll_hint"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "elease_capability", 17) != 0)
         break;
-      return AttributeList::AT_ReleaseCapability;	 // "release_capability"
+      return ParsedAttr::AT_ReleaseCapability;	 // "release_capability"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "wift_error_result", 17) != 0)
         break;
-      return AttributeList::AT_SwiftErrorResult;	 // "swift_error_result"
+      return ParsedAttr::AT_SwiftErrorResult;	 // "swift_error_result"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+1, "arn_unused_result", 17) != 0)
         break;
-      return AttributeList::AT_WarnUnusedResult;	 // "warn_unused_result"
+      return ParsedAttr::AT_WarnUnusedResult;	 // "warn_unused_result"
     }
     break;
   case 19:	 // 10 strings to match.
@@ -1033,7 +1067,7 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "mdgpu_waves_per_eu", 18) != 0)
         break;
-      return AttributeList::AT_AMDGPUWavesPerEU;	 // "amdgpu_waves_per_eu"
+      return ParsedAttr::AT_AMDGPUWavesPerEU;	 // "amdgpu_waves_per_eu"
     case 'c':	 // 3 strings to match.
       if (memcmp(Name.data()+1, "f_", 2) != 0)
         break;
@@ -1042,15 +1076,15 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+4, "udited_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFAuditedTransfer;	 // "cf_audited_transfer"
+        return ParsedAttr::AT_CFAuditedTransfer;	 // "cf_audited_transfer"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+4, "eturns_retained", 15) != 0)
           break;
-        return AttributeList::AT_CFReturnsRetained;	 // "cf_returns_retained"
+        return ParsedAttr::AT_CFReturnsRetained;	 // "cf_returns_retained"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+4, "nknown_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFUnknownTransfer;	 // "cf_unknown_transfer"
+        return ParsedAttr::AT_CFUnknownTransfer;	 // "cf_unknown_transfer"
       }
       break;
     case 'n':	 // 2 strings to match.
@@ -1059,11 +1093,11 @@
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_sanitize_address", 17) != 0)
           break;
-        return AttributeList::AT_NoSanitizeSpecific;	 // "no_sanitize_address"
+        return ParsedAttr::AT_NoSanitizeSpecific;	 // "no_sanitize_address"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "_returns_retained", 17) != 0)
           break;
-        return AttributeList::AT_NSReturnsRetained;	 // "ns_returns_retained"
+        return ParsedAttr::AT_NSReturnsRetained;	 // "ns_returns_retained"
       }
       break;
     case 'o':	 // 3 strings to match.
@@ -1079,23 +1113,23 @@
         case 'm':	 // 1 string to match.
           if (memcmp(Name.data()+13, "utable", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeMutable;	 // "objc_bridge_mutable"
+          return ParsedAttr::AT_ObjCBridgeMutable;	 // "objc_bridge_mutable"
         case 'r':	 // 1 string to match.
           if (memcmp(Name.data()+13, "elated", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeRelated;	 // "objc_bridge_related"
+          return ParsedAttr::AT_ObjCBridgeRelated;	 // "objc_bridge_related"
         }
         break;
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+6, "equires_super", 13) != 0)
           break;
-        return AttributeList::AT_ObjCRequiresSuper;	 // "objc_requires_super"
+        return ParsedAttr::AT_ObjCRequiresSuper;	 // "objc_requires_super"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "equires_capability", 18) != 0)
         break;
-      return AttributeList::AT_RequiresCapability;	 // "requires_capability"
+      return ParsedAttr::AT_RequiresCapability;	 // "requires_capability"
     }
     break;
   case 20:	 // 5 strings to match.
@@ -1104,23 +1138,23 @@
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eon_polyvector_type", 19) != 0)
         break;
-      return AttributeList::AT_NeonPolyVectorType;	 // "neon_polyvector_type"
+      return ParsedAttr::AT_NeonPolyVectorType;	 // "neon_polyvector_type"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+1, "bjc_runtime_visible", 19) != 0)
         break;
-      return AttributeList::AT_ObjCRuntimeVisible;	 // "objc_runtime_visible"
+      return ParsedAttr::AT_ObjCRuntimeVisible;	 // "objc_runtime_visible"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eqd_work_group_size", 19) != 0)
         break;
-      return AttributeList::AT_ReqdWorkGroupSize;	 // "reqd_work_group_size"
+      return ParsedAttr::AT_ReqdWorkGroupSize;	 // "reqd_work_group_size"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "hared_lock_function", 19) != 0)
         break;
-      return AttributeList::AT_AcquireCapability;	 // "shared_lock_function"
+      return ParsedAttr::AT_AcquireCapability;	 // "shared_lock_function"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ork_group_size_hint", 19) != 0)
         break;
-      return AttributeList::AT_WorkGroupSizeHint;	 // "work_group_size_hint"
+      return ParsedAttr::AT_WorkGroupSizeHint;	 // "work_group_size_hint"
     }
     break;
   case 21:	 // 8 strings to match.
@@ -1129,40 +1163,40 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ssert_exclusive_lock", 20) != 0)
         break;
-      return AttributeList::AT_AssertExclusiveLock;	 // "assert_exclusive_lock"
+      return ParsedAttr::AT_AssertExclusiveLock;	 // "assert_exclusive_lock"
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+1, "to_visibility_public", 20) != 0)
         break;
-      return AttributeList::AT_LTOVisibilityPublic;	 // "lto_visibility_public"
+      return ParsedAttr::AT_LTOVisibilityPublic;	 // "lto_visibility_public"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+1, "bjc_precise_lifetime", 20) != 0)
         break;
-      return AttributeList::AT_ObjCPreciseLifetime;	 // "objc_precise_lifetime"
+      return ParsedAttr::AT_ObjCPreciseLifetime;	 // "objc_precise_lifetime"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ointer_with_type_tag", 20) != 0)
         break;
-      return AttributeList::AT_ArgumentWithTypeTag;	 // "pointer_with_type_tag"
+      return ParsedAttr::AT_ArgumentWithTypeTag;	 // "pointer_with_type_tag"
     case 's':	 // 2 strings to match.
       switch (Name[1]) {
       default: break;
       case 'h':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ared_locks_required", 19) != 0)
           break;
-        return AttributeList::AT_RequiresCapability;	 // "shared_locks_required"
+        return ParsedAttr::AT_RequiresCapability;	 // "shared_locks_required"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ift_indirect_result", 19) != 0)
           break;
-        return AttributeList::AT_SwiftIndirectResult;	 // "swift_indirect_result"
+        return ParsedAttr::AT_SwiftIndirectResult;	 // "swift_indirect_result"
       }
       break;
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ype_tag_for_datatype", 20) != 0)
         break;
-      return AttributeList::AT_TypeTagForDatatype;	 // "type_tag_for_datatype"
+      return ParsedAttr::AT_TypeTagForDatatype;	 // "type_tag_for_datatype"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ray_never_instrument", 20) != 0)
         break;
-      return AttributeList::AT_XRayInstrument;	 // "xray_never_instrument"
+      return ParsedAttr::AT_XRayInstrument;	 // "xray_never_instrument"
     }
     break;
   case 22:	 // 6 strings to match.
@@ -1171,27 +1205,27 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "rgument_with_type_tag", 21) != 0)
         break;
-      return AttributeList::AT_ArgumentWithTypeTag;	 // "argument_with_type_tag"
+      return ParsedAttr::AT_ArgumentWithTypeTag;	 // "argument_with_type_tag"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "xternal_source_symbol", 21) != 0)
         break;
-      return AttributeList::AT_ExternalSourceSymbol;	 // "external_source_symbol"
+      return ParsedAttr::AT_ExternalSourceSymbol;	 // "external_source_symbol"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "o_instrument_function", 21) != 0)
         break;
-      return AttributeList::AT_NoInstrumentFunction;	 // "no_instrument_function"
+      return ParsedAttr::AT_NoInstrumentFunction;	 // "no_instrument_function"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+1, "bjc_independent_class", 21) != 0)
         break;
-      return AttributeList::AT_ObjCIndependentClass;	 // "objc_independent_class"
+      return ParsedAttr::AT_ObjCIndependentClass;	 // "objc_independent_class"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ry_acquire_capability", 21) != 0)
         break;
-      return AttributeList::AT_TryAcquireCapability;	 // "try_acquire_capability"
+      return ParsedAttr::AT_TryAcquireCapability;	 // "try_acquire_capability"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ray_always_instrument", 21) != 0)
         break;
-      return AttributeList::AT_XRayInstrument;	 // "xray_always_instrument"
+      return ParsedAttr::AT_XRayInstrument;	 // "xray_always_instrument"
     }
     break;
   case 23:	 // 6 strings to match.
@@ -1200,15 +1234,15 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "f_returns_not_retained", 22) != 0)
         break;
-      return AttributeList::AT_CFReturnsNotRetained;	 // "cf_returns_not_retained"
+      return ParsedAttr::AT_CFReturnsNotRetained;	 // "cf_returns_not_retained"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "xclusive_lock_function", 22) != 0)
         break;
-      return AttributeList::AT_AcquireCapability;	 // "exclusive_lock_function"
+      return ParsedAttr::AT_AcquireCapability;	 // "exclusive_lock_function"
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+1, "orce_align_arg_pointer", 22) != 0)
         break;
-      return AttributeList::AT_X86ForceAlignArgPointer;	 // "force_align_arg_pointer"
+      return ParsedAttr::AT_X86ForceAlignArgPointer;	 // "force_align_arg_pointer"
     case 'n':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "s_returns_", 10) != 0)
         break;
@@ -1217,17 +1251,17 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+12, "utoreleased", 11) != 0)
           break;
-        return AttributeList::AT_NSReturnsAutoreleased;	 // "ns_returns_autoreleased"
+        return ParsedAttr::AT_NSReturnsAutoreleased;	 // "ns_returns_autoreleased"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+12, "ot_retained", 11) != 0)
           break;
-        return AttributeList::AT_NSReturnsNotRetained;	 // "ns_returns_not_retained"
+        return ParsedAttr::AT_NSReturnsNotRetained;	 // "ns_returns_not_retained"
       }
       break;
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "hared_trylock_function", 22) != 0)
         break;
-      return AttributeList::AT_SharedTrylockFunction;	 // "shared_trylock_function"
+      return ParsedAttr::AT_SharedTrylockFunction;	 // "shared_trylock_function"
     }
     break;
   case 24:	 // 2 strings to match.
@@ -1236,11 +1270,11 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ssert_shared_capability", 23) != 0)
         break;
-      return AttributeList::AT_AssertCapability;	 // "assert_shared_capability"
+      return ParsedAttr::AT_AssertCapability;	 // "assert_shared_capability"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "xclusive_locks_required", 23) != 0)
         break;
-      return AttributeList::AT_RequiresCapability;	 // "exclusive_locks_required"
+      return ParsedAttr::AT_RequiresCapability;	 // "exclusive_locks_required"
     }
     break;
   case 25:	 // 5 strings to match.
@@ -1249,11 +1283,11 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "cquire_shared_capability", 24) != 0)
         break;
-      return AttributeList::AT_AcquireCapability;	 // "acquire_shared_capability"
+      return ParsedAttr::AT_AcquireCapability;	 // "acquire_shared_capability"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ntel_reqd_sub_group_size", 24) != 0)
         break;
-      return AttributeList::AT_OpenCLIntelReqdSubGroupSize;	 // "intel_reqd_sub_group_size"
+      return ParsedAttr::AT_OpenCLIntelReqdSubGroupSize;	 // "intel_reqd_sub_group_size"
     case 'n':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "o_", 2) != 0)
         break;
@@ -1262,17 +1296,17 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+4, "aller_saved_registers", 21) != 0)
           break;
-        return AttributeList::AT_AnyX86NoCallerSavedRegisters;	 // "no_caller_saved_registers"
+        return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;	 // "no_caller_saved_registers"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+4, "hread_safety_analysis", 21) != 0)
           break;
-        return AttributeList::AT_NoThreadSafetyAnalysis;	 // "no_thread_safety_analysis"
+        return ParsedAttr::AT_NoThreadSafetyAnalysis;	 // "no_thread_safety_analysis"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "elease_shared_capability", 24) != 0)
         break;
-      return AttributeList::AT_ReleaseCapability;	 // "release_shared_capability"
+      return ParsedAttr::AT_ReleaseCapability;	 // "release_shared_capability"
     }
     break;
   case 26:	 // 6 strings to match.
@@ -1281,19 +1315,19 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "onsumable_auto_cast_state", 25) != 0)
         break;
-      return AttributeList::AT_ConsumableAutoCast;	 // "consumable_auto_cast_state"
+      return ParsedAttr::AT_ConsumableAutoCast;	 // "consumable_auto_cast_state"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+1, "xclusive_trylock_function", 25) != 0)
         break;
-      return AttributeList::AT_ExclusiveTrylockFunction;	 // "exclusive_trylock_function"
+      return ParsedAttr::AT_ExclusiveTrylockFunction;	 // "exclusive_trylock_function"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "o_address_safety_analysis", 25) != 0)
         break;
-      return AttributeList::AT_NoSanitizeSpecific;	 // "no_address_safety_analysis"
+      return ParsedAttr::AT_NoSanitizeSpecific;	 // "no_address_safety_analysis"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+1, "bjc_returns_inner_pointer", 25) != 0)
         break;
-      return AttributeList::AT_ObjCReturnsInnerPointer;	 // "objc_returns_inner_pointer"
+      return ParsedAttr::AT_ObjCReturnsInnerPointer;	 // "objc_returns_inner_pointer"
     case 'r':	 // 2 strings to match.
       if (Name[1] != 'e')
         break;
@@ -1302,11 +1336,11 @@
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+3, "ease_generic_capability", 23) != 0)
           break;
-        return AttributeList::AT_ReleaseCapability;	 // "release_generic_capability"
+        return ParsedAttr::AT_ReleaseCapability;	 // "release_generic_capability"
       case 'q':	 // 1 string to match.
         if (memcmp(Name.data()+3, "uires_shared_capability", 23) != 0)
           break;
-        return AttributeList::AT_RequiresCapability;	 // "requires_shared_capability"
+        return ParsedAttr::AT_RequiresCapability;	 // "requires_shared_capability"
       }
       break;
     }
@@ -1317,7 +1351,7 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "mdgpu_flat_work_group_size", 26) != 0)
         break;
-      return AttributeList::AT_AMDGPUFlatWorkGroupSize;	 // "amdgpu_flat_work_group_size"
+      return ParsedAttr::AT_AMDGPUFlatWorkGroupSize;	 // "amdgpu_flat_work_group_size"
     case 'd':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "evice_builtin_", 14) != 0)
         break;
@@ -1326,11 +1360,11 @@
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+16, "urface_type", 11) != 0)
           break;
-        return AttributeList::IgnoredAttribute;	 // "device_builtin_surface_type"
+        return ParsedAttr::IgnoredAttribute;	 // "device_builtin_surface_type"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+16, "exture_type", 11) != 0)
           break;
-        return AttributeList::IgnoredAttribute;	 // "device_builtin_texture_type"
+        return ParsedAttr::IgnoredAttribute;	 // "device_builtin_texture_type"
       }
       break;
     case 'o':	 // 2 strings to match.
@@ -1341,11 +1375,11 @@
       case 'd':	 // 1 string to match.
         if (memcmp(Name.data()+6, "esignated_initializer", 21) != 0)
           break;
-        return AttributeList::AT_ObjCDesignatedInitializer;	 // "objc_designated_initializer"
+        return ParsedAttr::AT_ObjCDesignatedInitializer;	 // "objc_designated_initializer"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ubclassing_restricted", 21) != 0)
           break;
-        return AttributeList::AT_ObjCSubclassingRestricted;	 // "objc_subclassing_restricted"
+        return ParsedAttr::AT_ObjCSubclassingRestricted;	 // "objc_subclassing_restricted"
       }
       break;
     }
@@ -1353,52 +1387,52 @@
   case 28:	 // 1 string to match.
     if (memcmp(Name.data()+0, "consumable_set_state_on_read", 28) != 0)
       break;
-    return AttributeList::AT_ConsumableSetOnRead;	 // "consumable_set_state_on_read"
+    return ParsedAttr::AT_ConsumableSetOnRead;	 // "consumable_set_state_on_read"
   case 29:	 // 1 string to match.
     if (memcmp(Name.data()+0, "try_acquire_shared_capability", 29) != 0)
       break;
-    return AttributeList::AT_TryAcquireCapability;	 // "try_acquire_shared_capability"
+    return ParsedAttr::AT_TryAcquireCapability;	 // "try_acquire_shared_capability"
   case 31:	 // 1 string to match.
     if (memcmp(Name.data()+0, "require_constant_initialization", 31) != 0)
       break;
-    return AttributeList::AT_RequireConstantInit;	 // "require_constant_initialization"
+    return ParsedAttr::AT_RequireConstantInit;	 // "require_constant_initialization"
   case 34:	 // 1 string to match.
     if (memcmp(Name.data()+0, "objc_requires_property_definitions", 34) != 0)
       break;
-    return AttributeList::AT_ObjCRequiresPropertyDefs;	 // "objc_requires_property_definitions"
+    return ParsedAttr::AT_ObjCRequiresPropertyDefs;	 // "objc_requires_property_definitions"
   case 35:	 // 1 string to match.
     if (memcmp(Name.data()+0, "objc_arc_weak_reference_unavailable", 35) != 0)
       break;
-    return AttributeList::AT_ArcWeakrefUnavailable;	 // "objc_arc_weak_reference_unavailable"
+    return ParsedAttr::AT_ArcWeakrefUnavailable;	 // "objc_arc_weak_reference_unavailable"
   case 46:	 // 1 string to match.
     if (memcmp(Name.data()+0, "objc_protocol_requires_explicit_implementation", 46) != 0)
       break;
-    return AttributeList::AT_ObjCExplicitProtocolImpl;	 // "objc_protocol_requires_explicit_implementation"
+    return ParsedAttr::AT_ObjCExplicitProtocolImpl;	 // "objc_protocol_requires_explicit_implementation"
   }
-  } else if (AttributeList::AS_Declspec == Syntax) {
+  } else if (ParsedAttr::AS_Declspec == Syntax) {
   switch (Name.size()) {
   default: break;
   case 4:	 // 1 string to match.
     if (memcmp(Name.data()+0, "uuid", 4) != 0)
       break;
-    return AttributeList::AT_Uuid;	 // "uuid"
+    return ParsedAttr::AT_Uuid;	 // "uuid"
   case 5:	 // 2 strings to match.
     switch (Name[0]) {
     default: break;
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lign", 4) != 0)
         break;
-      return AttributeList::AT_Aligned;	 // "align"
+      return ParsedAttr::AT_Aligned;	 // "align"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+1, "aked", 4) != 0)
         break;
-      return AttributeList::AT_Naked;	 // "naked"
+      return ParsedAttr::AT_Naked;	 // "naked"
     }
     break;
   case 6:	 // 1 string to match.
     if (memcmp(Name.data()+0, "thread", 6) != 0)
       break;
-    return AttributeList::AT_Thread;	 // "thread"
+    return ParsedAttr::AT_Thread;	 // "thread"
   case 7:	 // 2 strings to match.
     if (memcmp(Name.data()+0, "no", 2) != 0)
       break;
@@ -1407,24 +1441,28 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+3, "lias", 4) != 0)
         break;
-      return AttributeList::AT_NoAlias;	 // "noalias"
+      return ParsedAttr::AT_NoAlias;	 // "noalias"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+3, "hrow", 4) != 0)
         break;
-      return AttributeList::AT_NoThrow;	 // "nothrow"
+      return ParsedAttr::AT_NoThrow;	 // "nothrow"
     }
     break;
-  case 8:	 // 7 strings to match.
+  case 8:	 // 8 strings to match.
     switch (Name[0]) {
     default: break;
     case '_':	 // 1 string to match.
       if (memcmp(Name.data()+1, "_host__", 7) != 0)
         break;
-      return AttributeList::AT_CUDAHost;	 // "__host__"
+      return ParsedAttr::AT_CUDAHost;	 // "__host__"
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "llocate", 7) != 0)
         break;
-      return AttributeList::AT_Section;	 // "allocate"
+      return ParsedAttr::AT_Section;	 // "allocate"
+    case 'c':	 // 1 string to match.
+      if (memcmp(Name.data()+1, "ode_seg", 7) != 0)
+        break;
+      return ParsedAttr::AT_CodeSeg;	 // "code_seg"
     case 'n':	 // 3 strings to match.
       if (Name[1] != 'o')
         break;
@@ -1433,25 +1471,25 @@
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+3, "nline", 5) != 0)
           break;
-        return AttributeList::AT_NoInline;	 // "noinline"
+        return ParsedAttr::AT_NoInline;	 // "noinline"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+3, "eturn", 5) != 0)
           break;
-        return AttributeList::AT_NoReturn;	 // "noreturn"
+        return ParsedAttr::AT_NoReturn;	 // "noreturn"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+3, "table", 5) != 0)
           break;
-        return AttributeList::AT_MSNoVTable;	 // "novtable"
+        return ParsedAttr::AT_MSNoVTable;	 // "novtable"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "roperty", 7) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "property"
+      return ParsedAttr::IgnoredAttribute;	 // "property"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "estrict", 7) != 0)
         break;
-      return AttributeList::AT_Restrict;	 // "restrict"
+      return ParsedAttr::AT_Restrict;	 // "restrict"
     }
     break;
   case 9:	 // 3 strings to match.
@@ -1465,17 +1503,17 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+4, "xport", 5) != 0)
           break;
-        return AttributeList::AT_DLLExport;	 // "dllexport"
+        return ParsedAttr::AT_DLLExport;	 // "dllexport"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+4, "mport", 5) != 0)
           break;
-        return AttributeList::AT_DLLImport;	 // "dllimport"
+        return ParsedAttr::AT_DLLImport;	 // "dllimport"
       }
       break;
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+1, "electany", 8) != 0)
         break;
-      return AttributeList::AT_SelectAny;	 // "selectany"
+      return ParsedAttr::AT_SelectAny;	 // "selectany"
     }
     break;
   case 10:	 // 4 strings to match.
@@ -1489,39 +1527,39 @@
       case 'd':	 // 1 string to match.
         if (memcmp(Name.data()+3, "evice__", 7) != 0)
           break;
-        return AttributeList::AT_CUDADevice;	 // "__device__"
+        return ParsedAttr::AT_CUDADevice;	 // "__device__"
       case 'g':	 // 1 string to match.
         if (memcmp(Name.data()+3, "lobal__", 7) != 0)
           break;
-        return AttributeList::AT_CUDAGlobal;	 // "__global__"
+        return ParsedAttr::AT_CUDAGlobal;	 // "__global__"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+3, "hared__", 7) != 0)
           break;
-        return AttributeList::AT_CUDAShared;	 // "__shared__"
+        return ParsedAttr::AT_CUDAShared;	 // "__shared__"
       }
       break;
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eprecated", 9) != 0)
         break;
-      return AttributeList::AT_Deprecated;	 // "deprecated"
+      return ParsedAttr::AT_Deprecated;	 // "deprecated"
     }
     break;
   case 11:	 // 1 string to match.
     if (memcmp(Name.data()+0, "empty_bases", 11) != 0)
       break;
-    return AttributeList::AT_EmptyBases;	 // "empty_bases"
+    return ParsedAttr::AT_EmptyBases;	 // "empty_bases"
   case 12:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__constant__", 12) != 0)
       break;
-    return AttributeList::AT_CUDAConstant;	 // "__constant__"
+    return ParsedAttr::AT_CUDAConstant;	 // "__constant__"
   case 14:	 // 1 string to match.
     if (memcmp(Name.data()+0, "layout_version", 14) != 0)
       break;
-    return AttributeList::AT_LayoutVersion;	 // "layout_version"
+    return ParsedAttr::AT_LayoutVersion;	 // "layout_version"
   case 17:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__launch_bounds__", 17) != 0)
       break;
-    return AttributeList::AT_CUDALaunchBounds;	 // "__launch_bounds__"
+    return ParsedAttr::AT_CUDALaunchBounds;	 // "__launch_bounds__"
   case 18:	 // 2 strings to match.
     if (memcmp(Name.data()+0, "__", 2) != 0)
       break;
@@ -1530,11 +1568,11 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+3, "udart_builtin__", 15) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "__cudart_builtin__"
+      return ParsedAttr::IgnoredAttribute;	 // "__cudart_builtin__"
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+3, "evice_builtin__", 15) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "__device_builtin__"
+      return ParsedAttr::IgnoredAttribute;	 // "__device_builtin__"
     }
     break;
   case 31:	 // 2 strings to match.
@@ -1545,23 +1583,23 @@
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+18, "urface_type__", 13) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "__device_builtin_surface_type__"
+      return ParsedAttr::IgnoredAttribute;	 // "__device_builtin_surface_type__"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+18, "exture_type__", 13) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "__device_builtin_texture_type__"
+      return ParsedAttr::IgnoredAttribute;	 // "__device_builtin_texture_type__"
     }
     break;
   }
-  } else if (AttributeList::AS_Microsoft == Syntax) {
+  } else if (ParsedAttr::AS_Microsoft == Syntax) {
   switch (Name.size()) {
   default: break;
   case 4:	 // 1 string to match.
     if (memcmp(Name.data()+0, "uuid", 4) != 0)
       break;
-    return AttributeList::AT_Uuid;	 // "uuid"
+    return ParsedAttr::AT_Uuid;	 // "uuid"
   }
-  } else if (AttributeList::AS_CXX11 == Syntax) {
+  } else if (ParsedAttr::AS_CXX11 == Syntax) {
   switch (Name.size()) {
   default: break;
   case 8:	 // 3 strings to match.
@@ -1572,15 +1610,15 @@
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+6, "ar", 2) != 0)
         break;
-      return AttributeList::AT_MipsLongCall;	 // "gnu::far"
+      return ParsedAttr::AT_MipsLongCall;	 // "gnu::far"
     case 'h':	 // 1 string to match.
       if (memcmp(Name.data()+6, "ot", 2) != 0)
         break;
-      return AttributeList::AT_Hot;	 // "gnu::hot"
+      return ParsedAttr::AT_Hot;	 // "gnu::hot"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+6, "cs", 2) != 0)
         break;
-      return AttributeList::AT_Pcs;	 // "gnu::pcs"
+      return ParsedAttr::AT_Pcs;	 // "gnu::pcs"
     }
     break;
   case 9:	 // 6 strings to match.
@@ -1591,27 +1629,27 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+6, "old", 3) != 0)
         break;
-      return AttributeList::AT_Cold;	 // "gnu::cold"
+      return ParsedAttr::AT_Cold;	 // "gnu::cold"
     case 'm':	 // 1 string to match.
       if (memcmp(Name.data()+6, "ode", 3) != 0)
         break;
-      return AttributeList::AT_Mode;	 // "gnu::mode"
+      return ParsedAttr::AT_Mode;	 // "gnu::mode"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+6, "ear", 3) != 0)
         break;
-      return AttributeList::AT_MipsShortCall;	 // "gnu::near"
+      return ParsedAttr::AT_MipsShortCall;	 // "gnu::near"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+6, "ure", 3) != 0)
         break;
-      return AttributeList::AT_Pure;	 // "gnu::pure"
+      return ParsedAttr::AT_Pure;	 // "gnu::pure"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+6, "sed", 3) != 0)
         break;
-      return AttributeList::AT_Used;	 // "gnu::used"
+      return ParsedAttr::AT_Used;	 // "gnu::used"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+6, "eak", 3) != 0)
         break;
-      return AttributeList::AT_Weak;	 // "gnu::weak"
+      return ParsedAttr::AT_Weak;	 // "gnu::weak"
     }
     break;
   case 10:	 // 6 strings to match.
@@ -1620,7 +1658,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":noreturn", 9) != 0)
         break;
-      return AttributeList::AT_CXX11NoReturn;	 // "::noreturn"
+      return ParsedAttr::AT_CXX11NoReturn;	 // "::noreturn"
     case 'g':	 // 5 strings to match.
       if (memcmp(Name.data()+1, "nu::", 4) != 0)
         break;
@@ -1629,28 +1667,28 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+6, "lias", 4) != 0)
           break;
-        return AttributeList::AT_Alias;	 // "gnu::alias"
+        return ParsedAttr::AT_Alias;	 // "gnu::alias"
       case 'c':	 // 2 strings to match.
         switch (Name[6]) {
         default: break;
         case 'd':	 // 1 string to match.
           if (memcmp(Name.data()+7, "ecl", 3) != 0)
             break;
-          return AttributeList::AT_CDecl;	 // "gnu::cdecl"
+          return ParsedAttr::AT_CDecl;	 // "gnu::cdecl"
         case 'o':	 // 1 string to match.
           if (memcmp(Name.data()+7, "nst", 3) != 0)
             break;
-          return AttributeList::AT_Const;	 // "gnu::const"
+          return ParsedAttr::AT_Const;	 // "gnu::const"
         }
         break;
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+6, "func", 4) != 0)
           break;
-        return AttributeList::AT_IFunc;	 // "gnu::ifunc"
+        return ParsedAttr::AT_IFunc;	 // "gnu::ifunc"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+6, "aked", 4) != 0)
           break;
-        return AttributeList::AT_Naked;	 // "gnu::naked"
+        return ParsedAttr::AT_Naked;	 // "gnu::naked"
       }
       break;
     }
@@ -1661,7 +1699,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":nodiscard", 10) != 0)
         break;
-      return AttributeList::AT_WarnUnusedResult;	 // "::nodiscard"
+      return ParsedAttr::AT_WarnUnusedResult;	 // "::nodiscard"
     case 'g':	 // 9 strings to match.
       if (memcmp(Name.data()+1, "nu::", 4) != 0)
         break;
@@ -1670,44 +1708,44 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ommon", 5) != 0)
           break;
-        return AttributeList::AT_Common;	 // "gnu::common"
+        return ParsedAttr::AT_Common;	 // "gnu::common"
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ormat", 5) != 0)
           break;
-        return AttributeList::AT_Format;	 // "gnu::format"
+        return ParsedAttr::AT_Format;	 // "gnu::format"
       case 'm':	 // 3 strings to match.
         switch (Name[6]) {
         default: break;
         case 'a':	 // 1 string to match.
           if (memcmp(Name.data()+7, "lloc", 4) != 0)
             break;
-          return AttributeList::AT_Restrict;	 // "gnu::malloc"
+          return ParsedAttr::AT_Restrict;	 // "gnu::malloc"
         case 'i':	 // 1 string to match.
           if (memcmp(Name.data()+7, "ps16", 4) != 0)
             break;
-          return AttributeList::AT_Mips16;	 // "gnu::mips16"
+          return ParsedAttr::AT_Mips16;	 // "gnu::mips16"
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+7, "_abi", 4) != 0)
             break;
-          return AttributeList::AT_MSABI;	 // "gnu::ms_abi"
+          return ParsedAttr::AT_MSABI;	 // "gnu::ms_abi"
         }
         break;
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+6, "acked", 5) != 0)
           break;
-        return AttributeList::AT_Packed;	 // "gnu::packed"
+        return ParsedAttr::AT_Packed;	 // "gnu::packed"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ignal", 5) != 0)
           break;
-        return AttributeList::AT_AVRSignal;	 // "gnu::signal"
+        return ParsedAttr::AT_AVRSignal;	 // "gnu::signal"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+6, "arget", 5) != 0)
           break;
-        return AttributeList::AT_Target;	 // "gnu::target"
+        return ParsedAttr::AT_Target;	 // "gnu::target"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+6, "nused", 5) != 0)
           break;
-        return AttributeList::AT_Unused;	 // "gnu::unused"
+        return ParsedAttr::AT_Unused;	 // "gnu::unused"
       }
       break;
     }
@@ -1718,7 +1756,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":deprecated", 11) != 0)
         break;
-      return AttributeList::AT_Deprecated;	 // "::deprecated"
+      return ParsedAttr::AT_Deprecated;	 // "::deprecated"
     case 'g':	 // 13 strings to match.
       if (memcmp(Name.data()+1, "nu::", 4) != 0)
         break;
@@ -1727,28 +1765,28 @@
       case '_':	 // 1 string to match.
         if (memcmp(Name.data()+6, "_const", 6) != 0)
           break;
-        return AttributeList::AT_Const;	 // "gnu::__const"
+        return ParsedAttr::AT_Const;	 // "gnu::__const"
       case 'a':	 // 2 strings to match.
         switch (Name[6]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+7, "i_tag", 5) != 0)
             break;
-          return AttributeList::AT_AbiTag;	 // "gnu::abi_tag"
+          return ParsedAttr::AT_AbiTag;	 // "gnu::abi_tag"
         case 'l':	 // 1 string to match.
           if (memcmp(Name.data()+7, "igned", 5) != 0)
             break;
-          return AttributeList::AT_Aligned;	 // "gnu::aligned"
+          return ParsedAttr::AT_Aligned;	 // "gnu::aligned"
         }
         break;
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+6, "leanup", 6) != 0)
           break;
-        return AttributeList::AT_Cleanup;	 // "gnu::cleanup"
+        return ParsedAttr::AT_Cleanup;	 // "gnu::cleanup"
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+6, "latten", 6) != 0)
           break;
-        return AttributeList::AT_Flatten;	 // "gnu::flatten"
+        return ParsedAttr::AT_Flatten;	 // "gnu::flatten"
       case 'n':	 // 3 strings to match.
         if (Name[6] != 'o')
           break;
@@ -1757,15 +1795,15 @@
         case 'd':	 // 1 string to match.
           if (memcmp(Name.data()+8, "ebug", 4) != 0)
             break;
-          return AttributeList::AT_NoDebug;	 // "gnu::nodebug"
+          return ParsedAttr::AT_NoDebug;	 // "gnu::nodebug"
         case 'n':	 // 1 string to match.
           if (memcmp(Name.data()+8, "null", 4) != 0)
             break;
-          return AttributeList::AT_NonNull;	 // "gnu::nonnull"
+          return ParsedAttr::AT_NonNull;	 // "gnu::nonnull"
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+8, "hrow", 4) != 0)
             break;
-          return AttributeList::AT_NoThrow;	 // "gnu::nothrow"
+          return ParsedAttr::AT_NoThrow;	 // "gnu::nothrow"
         }
         break;
       case 'r':	 // 2 strings to match.
@@ -1776,11 +1814,11 @@
         case 'c':	 // 1 string to match.
           if (memcmp(Name.data()+9, "all", 3) != 0)
             break;
-          return AttributeList::AT_RegCall;	 // "gnu::regcall"
+          return ParsedAttr::AT_RegCall;	 // "gnu::regcall"
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+9, "arm", 3) != 0)
             break;
-          return AttributeList::AT_Regparm;	 // "gnu::regparm"
+          return ParsedAttr::AT_Regparm;	 // "gnu::regparm"
         }
         break;
       case 's':	 // 2 strings to match.
@@ -1789,17 +1827,17 @@
         case 'e':	 // 1 string to match.
           if (memcmp(Name.data()+7, "ction", 5) != 0)
             break;
-          return AttributeList::AT_Section;	 // "gnu::section"
+          return ParsedAttr::AT_Section;	 // "gnu::section"
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+7, "dcall", 5) != 0)
             break;
-          return AttributeList::AT_StdCall;	 // "gnu::stdcall"
+          return ParsedAttr::AT_StdCall;	 // "gnu::stdcall"
         }
         break;
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+6, "eakref", 6) != 0)
           break;
-        return AttributeList::AT_WeakRef;	 // "gnu::weakref"
+        return ParsedAttr::AT_WeakRef;	 // "gnu::weakref"
       }
       break;
     }
@@ -1810,7 +1848,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
         break;
-      return AttributeList::AT_FallThrough;	 // "::fallthrough"
+      return ParsedAttr::AT_FallThrough;	 // "::fallthrough"
     case 'c':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
@@ -1819,11 +1857,11 @@
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+8, "locks", 5) != 0)
           break;
-        return AttributeList::AT_Blocks;	 // "clang::blocks"
+        return ParsedAttr::AT_Blocks;	 // "clang::blocks"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ascal", 5) != 0)
           break;
-        return AttributeList::AT_Pascal;	 // "clang::pascal"
+        return ParsedAttr::AT_Pascal;	 // "clang::pascal"
       }
       break;
     case 'g':	 // 9 strings to match.
@@ -1837,7 +1875,7 @@
         case 'f':	 // 1 string to match.
           if (memcmp(Name.data()+6, "astcall", 7) != 0)
             break;
-          return AttributeList::AT_FastCall;	 // "gnu::fastcall"
+          return ParsedAttr::AT_FastCall;	 // "gnu::fastcall"
         case 'n':	 // 4 strings to match.
           if (Name[6] != 'o')
             break;
@@ -1846,19 +1884,19 @@
           case 'c':	 // 1 string to match.
             if (memcmp(Name.data()+8, "ommon", 5) != 0)
               break;
-            return AttributeList::AT_NoCommon;	 // "gnu::nocommon"
+            return ParsedAttr::AT_NoCommon;	 // "gnu::nocommon"
           case 'i':	 // 1 string to match.
             if (memcmp(Name.data()+8, "nline", 5) != 0)
               break;
-            return AttributeList::AT_NoInline;	 // "gnu::noinline"
+            return ParsedAttr::AT_NoInline;	 // "gnu::noinline"
           case 'm':	 // 1 string to match.
             if (memcmp(Name.data()+8, "ips16", 5) != 0)
               break;
-            return AttributeList::AT_NoMips16;	 // "gnu::nomips16"
+            return ParsedAttr::AT_NoMips16;	 // "gnu::nomips16"
           case 'r':	 // 1 string to match.
             if (memcmp(Name.data()+8, "eturn", 5) != 0)
               break;
-            return AttributeList::AT_NoReturn;	 // "gnu::noreturn"
+            return ParsedAttr::AT_NoReturn;	 // "gnu::noreturn"
           }
           break;
         case 's':	 // 2 strings to match.
@@ -1867,23 +1905,23 @@
           case 'e':	 // 1 string to match.
             if (memcmp(Name.data()+7, "ntinel", 6) != 0)
               break;
-            return AttributeList::AT_Sentinel;	 // "gnu::sentinel"
+            return ParsedAttr::AT_Sentinel;	 // "gnu::sentinel"
           case 'y':	 // 1 string to match.
             if (memcmp(Name.data()+7, "sv_abi", 6) != 0)
               break;
-            return AttributeList::AT_SysVABI;	 // "gnu::sysv_abi"
+            return ParsedAttr::AT_SysVABI;	 // "gnu::sysv_abi"
           }
           break;
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+6, "hiscall", 7) != 0)
             break;
-          return AttributeList::AT_ThisCall;	 // "gnu::thiscall"
+          return ParsedAttr::AT_ThisCall;	 // "gnu::thiscall"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "l::suppress", 11) != 0)
           break;
-        return AttributeList::AT_Suppress;	 // "gsl::suppress"
+        return ParsedAttr::AT_Suppress;	 // "gsl::suppress"
       }
       break;
     }
@@ -1894,7 +1932,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
         break;
-      return AttributeList::AT_Unused;	 // "::maybe_unused"
+      return ParsedAttr::AT_Unused;	 // "::maybe_unused"
     case 'c':	 // 3 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
@@ -1903,18 +1941,18 @@
       case 'm':	 // 1 string to match.
         if (memcmp(Name.data()+8, "insize", 6) != 0)
           break;
-        return AttributeList::AT_MinSize;	 // "clang::minsize"
+        return ParsedAttr::AT_MinSize;	 // "clang::minsize"
       case 'o':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
             break;
-          return AttributeList::AT_ObjCGC;	 // "clang::objc_gc"
+          return ParsedAttr::AT_ObjCGC;	 // "clang::objc_gc"
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+9, "tnone", 5) != 0)
             break;
-          return AttributeList::AT_OptimizeNone;	 // "clang::optnone"
+          return ParsedAttr::AT_OptimizeNone;	 // "clang::optnone"
         }
         break;
       }
@@ -1932,46 +1970,46 @@
         case 'e':	 // 1 string to match.
           if (memcmp(Name.data()+9, "xport", 5) != 0)
             break;
-          return AttributeList::AT_DLLExport;	 // "gnu::dllexport"
+          return ParsedAttr::AT_DLLExport;	 // "gnu::dllexport"
         case 'i':	 // 1 string to match.
           if (memcmp(Name.data()+9, "mport", 5) != 0)
             break;
-          return AttributeList::AT_DLLImport;	 // "gnu::dllimport"
+          return ParsedAttr::AT_DLLImport;	 // "gnu::dllimport"
         }
         break;
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+6, "nterrupt", 8) != 0)
           break;
-        return AttributeList::AT_Interrupt;	 // "gnu::interrupt"
+        return ParsedAttr::AT_Interrupt;	 // "gnu::interrupt"
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ong_call", 8) != 0)
           break;
-        return AttributeList::AT_MipsLongCall;	 // "gnu::long_call"
+        return ParsedAttr::AT_MipsLongCall;	 // "gnu::long_call"
       case 'm':	 // 3 strings to match.
         switch (Name[6]) {
         default: break;
         case 'a':	 // 1 string to match.
           if (memcmp(Name.data()+7, "y_alias", 7) != 0)
             break;
-          return AttributeList::AT_MayAlias;	 // "gnu::may_alias"
+          return ParsedAttr::AT_MayAlias;	 // "gnu::may_alias"
         case 'i':	 // 1 string to match.
           if (memcmp(Name.data()+7, "cromips", 7) != 0)
             break;
-          return AttributeList::AT_MicroMips;	 // "gnu::micromips"
+          return ParsedAttr::AT_MicroMips;	 // "gnu::micromips"
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+7, "_struct", 7) != 0)
             break;
-          return AttributeList::AT_MSStruct;	 // "gnu::ms_struct"
+          return ParsedAttr::AT_MSStruct;	 // "gnu::ms_struct"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+6, "electany", 8) != 0)
           break;
-        return AttributeList::AT_SelectAny;	 // "gnu::selectany"
+        return ParsedAttr::AT_SelectAny;	 // "gnu::selectany"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ls_model", 8) != 0)
           break;
-        return AttributeList::AT_TLSModel;	 // "gnu::tls_model"
+        return ParsedAttr::AT_TLSModel;	 // "gnu::tls_model"
       }
       break;
     }
@@ -1987,11 +2025,11 @@
       case 'N':	 // 1 string to match.
         if (memcmp(Name.data()+8, "SObject", 7) != 0)
           break;
-        return AttributeList::AT_ObjCNSObject;	 // "clang::NSObject"
+        return ParsedAttr::AT_ObjCNSObject;	 // "clang::NSObject"
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+8, "nnotate", 7) != 0)
           break;
-        return AttributeList::AT_Annotate;	 // "clang::annotate"
+        return ParsedAttr::AT_Annotate;	 // "clang::annotate"
       case 'i':	 // 2 strings to match.
         if (Name[8] != 'b')
           break;
@@ -2000,17 +2038,17 @@
         case 'a':	 // 1 string to match.
           if (memcmp(Name.data()+10, "ction", 5) != 0)
             break;
-          return AttributeList::AT_IBAction;	 // "clang::ibaction"
+          return ParsedAttr::AT_IBAction;	 // "clang::ibaction"
         case 'o':	 // 1 string to match.
           if (memcmp(Name.data()+10, "utlet", 5) != 0)
             break;
-          return AttributeList::AT_IBOutlet;	 // "clang::iboutlet"
+          return ParsedAttr::AT_IBOutlet;	 // "clang::iboutlet"
         }
         break;
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+8, "oescape", 7) != 0)
           break;
-        return AttributeList::AT_NoEscape;	 // "clang::noescape"
+        return ParsedAttr::AT_NoEscape;	 // "clang::noescape"
       }
       break;
     case 'g':	 // 9 strings to match.
@@ -2024,11 +2062,11 @@
         case 'l':	 // 1 string to match.
           if (memcmp(Name.data()+7, "loc_size", 8) != 0)
             break;
-          return AttributeList::AT_AllocSize;	 // "gnu::alloc_size"
+          return ParsedAttr::AT_AllocSize;	 // "gnu::alloc_size"
         case 'r':	 // 1 string to match.
           if (memcmp(Name.data()+7, "tificial", 8) != 0)
             break;
-          return AttributeList::AT_Artificial;	 // "gnu::artificial"
+          return ParsedAttr::AT_Artificial;	 // "gnu::artificial"
         }
         break;
       case 'd':	 // 2 strings to match.
@@ -2039,33 +2077,33 @@
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+8, "recated", 7) != 0)
             break;
-          return AttributeList::AT_Deprecated;	 // "gnu::deprecated"
+          return ParsedAttr::AT_Deprecated;	 // "gnu::deprecated"
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+8, "tructor", 7) != 0)
             break;
-          return AttributeList::AT_Destructor;	 // "gnu::destructor"
+          return ParsedAttr::AT_Destructor;	 // "gnu::destructor"
         }
         break;
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ormat_arg", 9) != 0)
           break;
-        return AttributeList::AT_FormatArg;	 // "gnu::format_arg"
+        return ParsedAttr::AT_FormatArg;	 // "gnu::format_arg"
       case 'g':	 // 1 string to match.
         if (memcmp(Name.data()+6, "nu_inline", 9) != 0)
           break;
-        return AttributeList::AT_GNUInline;	 // "gnu::gnu_inline"
+        return ParsedAttr::AT_GNUInline;	 // "gnu::gnu_inline"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ocf_check", 9) != 0)
           break;
-        return AttributeList::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
+        return ParsedAttr::AT_AnyX86NoCfCheck;	 // "gnu::nocf_check"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+6, "hort_call", 9) != 0)
           break;
-        return AttributeList::AT_MipsShortCall;	 // "gnu::short_call"
+        return ParsedAttr::AT_MipsShortCall;	 // "gnu::short_call"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+6, "isibility", 9) != 0)
           break;
-        return AttributeList::AT_Visibility;	 // "gnu::visibility"
+        return ParsedAttr::AT_Visibility;	 // "gnu::visibility"
       }
       break;
     }
@@ -2081,15 +2119,15 @@
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
           break;
-        return AttributeList::AT_FlagEnum;	 // "clang::flag_enum"
+        return ParsedAttr::AT_FlagEnum;	 // "clang::flag_enum"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
           break;
-        return AttributeList::AT_SwiftCall;	 // "clang::swiftcall"
+        return ParsedAttr::AT_SwiftCall;	 // "clang::swiftcall"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ecreturn", 8) != 0)
           break;
-        return AttributeList::AT_VecReturn;	 // "clang::vecreturn"
+        return ParsedAttr::AT_VecReturn;	 // "clang::vecreturn"
       }
       break;
     case 'g':	 // 5 strings to match.
@@ -2100,23 +2138,23 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+6, "lloc_align", 10) != 0)
           break;
-        return AttributeList::AT_AllocAlign;	 // "gnu::alloc_align"
+        return ParsedAttr::AT_AllocAlign;	 // "gnu::alloc_align"
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+6, "onstructor", 10) != 0)
           break;
-        return AttributeList::AT_Constructor;	 // "gnu::constructor"
+        return ParsedAttr::AT_Constructor;	 // "gnu::constructor"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+6, "omicromips", 10) != 0)
           break;
-        return AttributeList::AT_NoMicroMips;	 // "gnu::nomicromips"
+        return ParsedAttr::AT_NoMicroMips;	 // "gnu::nomicromips"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ector_size", 10) != 0)
           break;
-        return AttributeList::AT_VectorSize;	 // "gnu::vector_size"
+        return ParsedAttr::AT_VectorSize;	 // "gnu::vector_size"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+6, "arn_unused", 10) != 0)
           break;
-        return AttributeList::AT_WarnUnused;	 // "gnu::warn_unused"
+        return ParsedAttr::AT_WarnUnused;	 // "gnu::warn_unused"
       }
       break;
     }
@@ -2132,7 +2170,7 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+9, "pability", 8) != 0)
           break;
-        return AttributeList::AT_Capability;	 // "clang::capability"
+        return ParsedAttr::AT_Capability;	 // "clang::capability"
       case 'o':	 // 2 strings to match.
         if (Name[9] != 'n')
           break;
@@ -2141,11 +2179,11 @@
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+11, "umable", 6) != 0)
             break;
-          return AttributeList::AT_Consumable;	 // "clang::consumable"
+          return ParsedAttr::AT_Consumable;	 // "clang::consumable"
         case 'v':	 // 1 string to match.
           if (memcmp(Name.data()+11, "ergent", 6) != 0)
             break;
-          return AttributeList::AT_Convergent;	 // "clang::convergent"
+          return ParsedAttr::AT_Convergent;	 // "clang::convergent"
         }
         break;
       }
@@ -2153,7 +2191,7 @@
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
         break;
-      return AttributeList::AT_VectorCall;	 // "clang::vectorcall"
+      return ParsedAttr::AT_VectorCall;	 // "clang::vectorcall"
     }
     break;
   case 18:	 // 13 strings to match.
@@ -2167,15 +2205,15 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
           break;
-        return AttributeList::AT_CFConsumed;	 // "clang::cf_consumed"
+        return ParsedAttr::AT_CFConsumed;	 // "clang::cf_consumed"
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+8, "allthrough", 10) != 0)
           break;
-        return AttributeList::AT_FallThrough;	 // "clang::fallthrough"
+        return ParsedAttr::AT_FallThrough;	 // "clang::fallthrough"
       case 'g':	 // 1 string to match.
         if (memcmp(Name.data()+8, "uarded_var", 10) != 0)
           break;
-        return AttributeList::AT_GuardedVar;	 // "clang::guarded_var"
+        return ParsedAttr::AT_GuardedVar;	 // "clang::guarded_var"
       case 'n':	 // 3 strings to match.
         switch (Name[8]) {
         default: break;
@@ -2185,35 +2223,35 @@
           case '_':	 // 1 string to match.
             if (memcmp(Name.data()+10, "sanitize", 8) != 0)
               break;
-            return AttributeList::AT_NoSanitize;	 // "clang::no_sanitize"
+            return ParsedAttr::AT_NoSanitize;	 // "clang::no_sanitize"
           case 'd':	 // 1 string to match.
             if (memcmp(Name.data()+10, "uplicate", 8) != 0)
               break;
-            return AttributeList::AT_NoDuplicate;	 // "clang::noduplicate"
+            return ParsedAttr::AT_NoDuplicate;	 // "clang::noduplicate"
           }
           break;
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+9, "_consumed", 9) != 0)
             break;
-          return AttributeList::AT_NSConsumed;	 // "clang::ns_consumed"
+          return ParsedAttr::AT_NSConsumed;	 // "clang::ns_consumed"
         }
         break;
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
           break;
-        return AttributeList::AT_ObjCBridge;	 // "clang::objc_bridge"
+        return ParsedAttr::AT_ObjCBridge;	 // "clang::objc_bridge"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+8, "rivial_abi", 10) != 0)
           break;
-        return AttributeList::AT_TrivialABI;	 // "clang::trivial_abi"
+        return ParsedAttr::AT_TrivialABI;	 // "clang::trivial_abi"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+8, "navailable", 10) != 0)
           break;
-        return AttributeList::AT_Unavailable;	 // "clang::unavailable"
+        return ParsedAttr::AT_Unavailable;	 // "clang::unavailable"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+8, "eak_import", 10) != 0)
           break;
-        return AttributeList::AT_WeakImport;	 // "clang::weak_import"
+        return ParsedAttr::AT_WeakImport;	 // "clang::weak_import"
       }
       break;
     case 'g':	 // 3 strings to match.
@@ -2224,23 +2262,23 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+6, "lways_inline", 12) != 0)
           break;
-        return AttributeList::AT_AlwaysInline;	 // "gnu::always_inline"
+        return ParsedAttr::AT_AlwaysInline;	 // "gnu::always_inline"
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+6, "nit_priority", 12) != 0)
           break;
-        return AttributeList::AT_InitPriority;	 // "gnu::init_priority"
+        return ParsedAttr::AT_InitPriority;	 // "gnu::init_priority"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+6, "eturns_twice", 12) != 0)
           break;
-        return AttributeList::AT_ReturnsTwice;	 // "gnu::returns_twice"
+        return ParsedAttr::AT_ReturnsTwice;	 // "gnu::returns_twice"
       }
       break;
     }
     break;
-  case 19:	 // 6 strings to match.
+  case 19:	 // 8 strings to match.
     switch (Name[0]) {
     default: break;
-    case 'c':	 // 4 strings to match.
+    case 'c':	 // 6 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
       switch (Name[7]) {
@@ -2248,24 +2286,39 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+8, "vailability", 11) != 0)
           break;
-        return AttributeList::AT_Availability;	 // "clang::availability"
+        return ParsedAttr::AT_Availability;	 // "clang::availability"
+      case 'c':	 // 2 strings to match.
+        if (memcmp(Name.data()+8, "pu_", 3) != 0)
+          break;
+        switch (Name[11]) {
+        default: break;
+        case 'd':	 // 1 string to match.
+          if (memcmp(Name.data()+12, "ispatch", 7) != 0)
+            break;
+          return ParsedAttr::AT_CPUDispatch;	 // "clang::cpu_dispatch"
+        case 's':	 // 1 string to match.
+          if (memcmp(Name.data()+12, "pecific", 7) != 0)
+            break;
+          return ParsedAttr::AT_CPUSpecific;	 // "clang::cpu_specific"
+        }
+        break;
       case 'o':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
             break;
-          return AttributeList::AT_ObjCBoxable;	 // "clang::objc_boxable"
+          return ParsedAttr::AT_ObjCBoxable;	 // "clang::objc_boxable"
         case 'v':	 // 1 string to match.
           if (memcmp(Name.data()+9, "erloadable", 10) != 0)
             break;
-          return AttributeList::AT_Overloadable;	 // "clang::overloadable"
+          return ParsedAttr::AT_Overloadable;	 // "clang::overloadable"
         }
         break;
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
           break;
-        return AttributeList::AT_PreserveAll;	 // "clang::preserve_all"
+        return ParsedAttr::AT_PreserveAll;	 // "clang::preserve_all"
       }
       break;
     case 'g':	 // 2 strings to match.
@@ -2276,23 +2329,23 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+6, "ssume_aligned", 13) != 0)
           break;
-        return AttributeList::AT_AssumeAligned;	 // "gnu::assume_aligned"
+        return ParsedAttr::AT_AssumeAligned;	 // "gnu::assume_aligned"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+6, "o_split_stack", 13) != 0)
           break;
-        return AttributeList::AT_NoSplitStack;	 // "gnu::no_split_stack"
+        return ParsedAttr::AT_NoSplitStack;	 // "gnu::no_split_stack"
       }
       break;
     }
     break;
-  case 20:	 // 8 strings to match.
+  case 20:	 // 9 strings to match.
     switch (Name[0]) {
     default: break;
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":carries_dependency", 19) != 0)
         break;
-      return AttributeList::AT_CarriesDependency;	 // "::carries_dependency"
-    case 'c':	 // 6 strings to match.
+      return ParsedAttr::AT_CarriesDependency;	 // "::carries_dependency"
+    case 'c':	 // 7 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
       switch (Name[7]) {
@@ -2300,38 +2353,42 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
           break;
-        return AttributeList::AT_AddressSpace;	 // "clang::address_space"
+        return ParsedAttr::AT_AddressSpace;	 // "clang::address_space"
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+8, "allable_when", 12) != 0)
           break;
-        return AttributeList::AT_CallableWhen;	 // "clang::callable_when"
+        return ParsedAttr::AT_CallableWhen;	 // "clang::callable_when"
+      case 'l':	 // 1 string to match.
+        if (memcmp(Name.data()+8, "ifetimebound", 12) != 0)
+          break;
+        return ParsedAttr::AT_LifetimeBound;	 // "clang::lifetimebound"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
           break;
-        return AttributeList::AT_PreserveMost;	 // "clang::preserve_most"
+        return ParsedAttr::AT_PreserveMost;	 // "clang::preserve_most"
       case 's':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'e':	 // 1 string to match.
           if (memcmp(Name.data()+9, "t_typestate", 11) != 0)
             break;
-          return AttributeList::AT_SetTypestate;	 // "clang::set_typestate"
+          return ParsedAttr::AT_SetTypestate;	 // "clang::set_typestate"
         case 'w':	 // 1 string to match.
           if (memcmp(Name.data()+9, "ift_context", 11) != 0)
             break;
-          return AttributeList::AT_SwiftContext;	 // "clang::swift_context"
+          return ParsedAttr::AT_SwiftContext;	 // "clang::swift_context"
         }
         break;
       case 'x':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
           break;
-        return AttributeList::AT_XRayLogArgs;	 // "clang::xray_log_args"
+        return ParsedAttr::AT_XRayLogArgs;	 // "clang::xray_log_args"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::returns_nonnull", 19) != 0)
         break;
-      return AttributeList::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
+      return ParsedAttr::AT_ReturnsNonNull;	 // "gnu::returns_nonnull"
     }
     break;
   case 21:	 // 5 strings to match.
@@ -2342,7 +2399,7 @@
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ntel_ocl_bicc", 13) != 0)
         break;
-      return AttributeList::AT_IntelOclBicc;	 // "clang::intel_ocl_bicc"
+      return ParsedAttr::AT_IntelOclBicc;	 // "clang::intel_ocl_bicc"
     case 'o':	 // 2 strings to match.
       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
         break;
@@ -2351,21 +2408,21 @@
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+13, "xception", 8) != 0)
           break;
-        return AttributeList::AT_ObjCException;	 // "clang::objc_exception"
+        return ParsedAttr::AT_ObjCException;	 // "clang::objc_exception"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+13, "wnership", 8) != 0)
           break;
-        return AttributeList::AT_ObjCOwnership;	 // "clang::objc_ownership"
+        return ParsedAttr::AT_ObjCOwnership;	 // "clang::objc_ownership"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+8, "t_guarded_var", 13) != 0)
         break;
-      return AttributeList::AT_PtGuardedVar;	 // "clang::pt_guarded_var"
+      return ParsedAttr::AT_PtGuardedVar;	 // "clang::pt_guarded_var"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+8, "est_typestate", 13) != 0)
         break;
-      return AttributeList::AT_TestTypestate;	 // "clang::test_typestate"
+      return ParsedAttr::AT_TestTypestate;	 // "clang::test_typestate"
     }
     break;
   case 22:	 // 11 strings to match.
@@ -2384,24 +2441,24 @@
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+19, "gpr", 3) != 0)
             break;
-          return AttributeList::AT_AMDGPUNumSGPR;	 // "clang::amdgpu_num_sgpr"
+          return ParsedAttr::AT_AMDGPUNumSGPR;	 // "clang::amdgpu_num_sgpr"
         case 'v':	 // 1 string to match.
           if (memcmp(Name.data()+19, "gpr", 3) != 0)
             break;
-          return AttributeList::AT_AMDGPUNumVGPR;	 // "clang::amdgpu_num_vgpr"
+          return ParsedAttr::AT_AMDGPUNumVGPR;	 // "clang::amdgpu_num_vgpr"
         }
         break;
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
           break;
-        return AttributeList::AT_NotTailCalled;	 // "clang::not_tail_called"
+        return ParsedAttr::AT_NotTailCalled;	 // "clang::not_tail_called"
       case 'o':	 // 3 strings to match.
         switch (Name[8]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
             break;
-          return AttributeList::AT_ObjCRootClass;	 // "clang::objc_root_class"
+          return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
         case 'w':	 // 2 strings to match.
           if (memcmp(Name.data()+9, "nership_", 8) != 0)
             break;
@@ -2410,11 +2467,11 @@
           case 'h':	 // 1 string to match.
             if (memcmp(Name.data()+18, "olds", 4) != 0)
               break;
-            return AttributeList::AT_Ownership;	 // "clang::ownership_holds"
+            return ParsedAttr::AT_Ownership;	 // "clang::ownership_holds"
           case 't':	 // 1 string to match.
             if (memcmp(Name.data()+18, "akes", 4) != 0)
               break;
-            return AttributeList::AT_Ownership;	 // "clang::ownership_takes"
+            return ParsedAttr::AT_Ownership;	 // "clang::ownership_takes"
           }
           break;
         }
@@ -2422,31 +2479,31 @@
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "aram_typestate", 14) != 0)
           break;
-        return AttributeList::AT_ParamTypestate;	 // "clang::param_typestate"
+        return ParsedAttr::AT_ParamTypestate;	 // "clang::param_typestate"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+8, "coped_lockable", 14) != 0)
           break;
-        return AttributeList::AT_ScopedLockable;	 // "clang::scoped_lockable"
+        return ParsedAttr::AT_ScopedLockable;	 // "clang::scoped_lockable"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
           break;
-        return AttributeList::AT_TypeVisibility;	 // "clang::type_visibility"
+        return ParsedAttr::AT_TypeVisibility;	 // "clang::type_visibility"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+8, "nlock_function", 14) != 0)
           break;
-        return AttributeList::AT_ReleaseCapability;	 // "clang::unlock_function"
+        return ParsedAttr::AT_ReleaseCapability;	 // "clang::unlock_function"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::transparent_union", 21) != 0)
         break;
-      return AttributeList::AT_TransparentUnion;	 // "gnu::transparent_union"
+      return ParsedAttr::AT_TransparentUnion;	 // "gnu::transparent_union"
     }
     break;
-  case 23:	 // 7 strings to match.
+  case 23:	 // 8 strings to match.
     switch (Name[0]) {
     default: break;
-    case 'c':	 // 5 strings to match.
+    case 'c':	 // 6 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
       switch (Name[7]) {
@@ -2454,28 +2511,32 @@
       case 'i':	 // 1 string to match.
         if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
           break;
-        return AttributeList::AT_InternalLinkage;	 // "clang::internal_linkage"
+        return ParsedAttr::AT_InternalLinkage;	 // "clang::internal_linkage"
+      case 'm':	 // 1 string to match.
+        if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
+          break;
+        return ParsedAttr::AT_MinVectorWidth;	 // "clang::min_vector_width"
       case 'n':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'e':	 // 1 string to match.
           if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
             break;
-          return AttributeList::AT_NeonVectorType;	 // "clang::neon_vector_type"
+          return ParsedAttr::AT_NeonVectorType;	 // "clang::neon_vector_type"
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
             break;
-          return AttributeList::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
+          return ParsedAttr::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
         }
         break;
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
           break;
-        return AttributeList::AT_PassObjectSize;	 // "clang::pass_object_size"
+        return ParsedAttr::AT_PassObjectSize;	 // "clang::pass_object_size"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+8, "eturn_typestate", 15) != 0)
           break;
-        return AttributeList::AT_ReturnTypestate;	 // "clang::return_typestate"
+        return ParsedAttr::AT_ReturnTypestate;	 // "clang::return_typestate"
       }
       break;
     case 'g':	 // 2 strings to match.
@@ -2486,11 +2547,11 @@
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+6, "o_sanitize_thread", 17) != 0)
           break;
-        return AttributeList::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
+        return ParsedAttr::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_thread"
       case 'w':	 // 1 string to match.
         if (memcmp(Name.data()+6, "arn_unused_result", 17) != 0)
           break;
-        return AttributeList::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
+        return ParsedAttr::AT_WarnUnusedResult;	 // "gnu::warn_unused_result"
       }
       break;
     }
@@ -2506,33 +2567,33 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ssert_capability", 16) != 0)
           break;
-        return AttributeList::AT_AssertCapability;	 // "clang::assert_capability"
+        return ParsedAttr::AT_AssertCapability;	 // "clang::assert_capability"
       case 'o':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
             break;
-          return AttributeList::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
+          return ParsedAttr::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
         case 'w':	 // 1 string to match.
           if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
             break;
-          return AttributeList::AT_Ownership;	 // "clang::ownership_returns"
+          return ParsedAttr::AT_Ownership;	 // "clang::ownership_returns"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+8, "hared_capability", 16) != 0)
           break;
-        return AttributeList::AT_Capability;	 // "clang::shared_capability"
+        return ParsedAttr::AT_Capability;	 // "clang::shared_capability"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::no_sanitize_address", 23) != 0)
         break;
-      return AttributeList::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
+      return ParsedAttr::AT_NoSanitizeSpecific;	 // "gnu::no_sanitize_address"
     }
     break;
-  case 25:	 // 9 strings to match.
+  case 25:	 // 10 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -2540,39 +2601,50 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "cquire_capability", 17) != 0)
         break;
-      return AttributeList::AT_AcquireCapability;	 // "clang::acquire_capability"
+      return ParsedAttr::AT_AcquireCapability;	 // "clang::acquire_capability"
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
         break;
-      return AttributeList::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
+      return ParsedAttr::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
         break;
-      return AttributeList::AT_EnumExtensibility;	 // "clang::enum_extensibility"
+      return ParsedAttr::AT_EnumExtensibility;	 // "clang::enum_extensibility"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
         break;
-      return AttributeList::AT_IBOutletCollection;	 // "clang::iboutletcollection"
-    case 'n':	 // 1 string to match.
-      if (memcmp(Name.data()+8, "o_sanitize_memory", 17) != 0)
+      return ParsedAttr::AT_IBOutletCollection;	 // "clang::iboutletcollection"
+    case 'n':	 // 2 strings to match.
+      if (memcmp(Name.data()+8, "o_s", 3) != 0)
         break;
-      return AttributeList::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
+      switch (Name[11]) {
+      default: break;
+      case 'a':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
+          break;
+        return ParsedAttr::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
+      case 't':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
+          break;
+        return ParsedAttr::AT_NoStackProtector;	 // "clang::no_stack_protector"
+      }
+      break;
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
         break;
-      return AttributeList::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
+      return ParsedAttr::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+8, "elease_capability", 17) != 0)
         break;
-      return AttributeList::AT_ReleaseCapability;	 // "clang::release_capability"
+      return ParsedAttr::AT_ReleaseCapability;	 // "clang::release_capability"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
         break;
-      return AttributeList::AT_SwiftErrorResult;	 // "clang::swift_error_result"
+      return ParsedAttr::AT_SwiftErrorResult;	 // "clang::swift_error_result"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+8, "arn_unused_result", 17) != 0)
         break;
-      return AttributeList::AT_WarnUnusedResult;	 // "clang::warn_unused_result"
+      return ParsedAttr::AT_WarnUnusedResult;	 // "clang::warn_unused_result"
     }
     break;
   case 26:	 // 9 strings to match.
@@ -2583,7 +2655,7 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "mdgpu_waves_per_eu", 18) != 0)
         break;
-      return AttributeList::AT_AMDGPUWavesPerEU;	 // "clang::amdgpu_waves_per_eu"
+      return ParsedAttr::AT_AMDGPUWavesPerEU;	 // "clang::amdgpu_waves_per_eu"
     case 'c':	 // 3 strings to match.
       if (memcmp(Name.data()+8, "f_", 2) != 0)
         break;
@@ -2592,21 +2664,21 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
+        return ParsedAttr::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
           break;
-        return AttributeList::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
+        return ParsedAttr::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
+        return ParsedAttr::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
       }
       break;
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
         break;
-      return AttributeList::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
+      return ParsedAttr::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
     case 'o':	 // 3 strings to match.
       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
         break;
@@ -2620,23 +2692,23 @@
         case 'm':	 // 1 string to match.
           if (memcmp(Name.data()+20, "utable", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
+          return ParsedAttr::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
         case 'r':	 // 1 string to match.
           if (memcmp(Name.data()+20, "elated", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
+          return ParsedAttr::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
         }
         break;
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
           break;
-        return AttributeList::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
+        return ParsedAttr::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+8, "equires_capability", 18) != 0)
         break;
-      return AttributeList::AT_RequiresCapability;	 // "clang::requires_capability"
+      return ParsedAttr::AT_RequiresCapability;	 // "clang::requires_capability"
     }
     break;
   case 27:	 // 3 strings to match.
@@ -2650,17 +2722,17 @@
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
           break;
-        return AttributeList::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
+        return ParsedAttr::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
           break;
-        return AttributeList::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
+        return ParsedAttr::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::no_instrument_function", 26) != 0)
         break;
-      return AttributeList::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
+      return ParsedAttr::AT_NoInstrumentFunction;	 // "gnu::no_instrument_function"
     }
     break;
   case 28:	 // 8 strings to match.
@@ -2674,42 +2746,42 @@
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
           break;
-        return AttributeList::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
+        return ParsedAttr::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
           break;
-        return AttributeList::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
+        return ParsedAttr::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
           break;
-        return AttributeList::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
+        return ParsedAttr::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
       case 's':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'h':	 // 1 string to match.
           if (memcmp(Name.data()+9, "ared_locks_required", 19) != 0)
             break;
-          return AttributeList::AT_RequiresCapability;	 // "clang::shared_locks_required"
+          return ParsedAttr::AT_RequiresCapability;	 // "clang::shared_locks_required"
         case 'w':	 // 1 string to match.
           if (memcmp(Name.data()+9, "ift_indirect_result", 19) != 0)
             break;
-          return AttributeList::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
+          return ParsedAttr::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
         }
         break;
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
           break;
-        return AttributeList::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
+        return ParsedAttr::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
       case 'x':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
           break;
-        return AttributeList::AT_XRayInstrument;	 // "clang::xray_never_instrument"
+        return ParsedAttr::AT_XRayInstrument;	 // "clang::xray_never_instrument"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::force_align_arg_pointer", 27) != 0)
         break;
-      return AttributeList::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
+      return ParsedAttr::AT_X86ForceAlignArgPointer;	 // "gnu::force_align_arg_pointer"
     }
     break;
   case 29:	 // 5 strings to match.
@@ -2720,23 +2792,23 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
         break;
-      return AttributeList::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
+      return ParsedAttr::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
         break;
-      return AttributeList::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
+      return ParsedAttr::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
         break;
-      return AttributeList::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
+      return ParsedAttr::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ry_acquire_capability", 21) != 0)
         break;
-      return AttributeList::AT_TryAcquireCapability;	 // "clang::try_acquire_capability"
+      return ParsedAttr::AT_TryAcquireCapability;	 // "clang::try_acquire_capability"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
         break;
-      return AttributeList::AT_XRayInstrument;	 // "clang::xray_always_instrument"
+      return ParsedAttr::AT_XRayInstrument;	 // "clang::xray_always_instrument"
     }
     break;
   case 30:	 // 4 strings to match.
@@ -2750,7 +2822,7 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
           break;
-        return AttributeList::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
+        return ParsedAttr::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
       case 'n':	 // 2 strings to match.
         if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
           break;
@@ -2759,11 +2831,11 @@
         case 'a':	 // 1 string to match.
           if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
             break;
-          return AttributeList::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
+          return ParsedAttr::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
         case 'n':	 // 1 string to match.
           if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
             break;
-          return AttributeList::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
+          return ParsedAttr::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
         }
         break;
       }
@@ -2771,7 +2843,7 @@
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::no_caller_saved_registers", 29) != 0)
         break;
-      return AttributeList::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
+      return ParsedAttr::AT_AnyX86NoCallerSavedRegisters;	 // "gnu::no_caller_saved_registers"
     }
     break;
   case 31:	 // 3 strings to match.
@@ -2785,17 +2857,17 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ssert_shared_capability", 23) != 0)
           break;
-        return AttributeList::AT_AssertCapability;	 // "clang::assert_shared_capability"
+        return ParsedAttr::AT_AssertCapability;	 // "clang::assert_shared_capability"
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+8, "xclusive_locks_required", 23) != 0)
           break;
-        return AttributeList::AT_RequiresCapability;	 // "clang::exclusive_locks_required"
+        return ParsedAttr::AT_RequiresCapability;	 // "clang::exclusive_locks_required"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "nu::no_address_safety_analysis", 30) != 0)
         break;
-      return AttributeList::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
+      return ParsedAttr::AT_NoSanitizeSpecific;	 // "gnu::no_address_safety_analysis"
     }
     break;
   case 32:	 // 3 strings to match.
@@ -2806,15 +2878,15 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "cquire_shared_capability", 24) != 0)
         break;
-      return AttributeList::AT_AcquireCapability;	 // "clang::acquire_shared_capability"
+      return ParsedAttr::AT_AcquireCapability;	 // "clang::acquire_shared_capability"
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "o_thread_safety_analysis", 24) != 0)
         break;
-      return AttributeList::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
+      return ParsedAttr::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+8, "elease_shared_capability", 24) != 0)
         break;
-      return AttributeList::AT_ReleaseCapability;	 // "clang::release_shared_capability"
+      return ParsedAttr::AT_ReleaseCapability;	 // "clang::release_shared_capability"
     }
     break;
   case 33:	 // 4 strings to match.
@@ -2825,11 +2897,11 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+8, "onsumable_auto_cast_state", 25) != 0)
         break;
-      return AttributeList::AT_ConsumableAutoCast;	 // "clang::consumable_auto_cast_state"
+      return ParsedAttr::AT_ConsumableAutoCast;	 // "clang::consumable_auto_cast_state"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_returns_inner_pointer", 25) != 0)
         break;
-      return AttributeList::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
+      return ParsedAttr::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
     case 'r':	 // 2 strings to match.
       if (Name[8] != 'e')
         break;
@@ -2838,11 +2910,11 @@
       case 'l':	 // 1 string to match.
         if (memcmp(Name.data()+10, "ease_generic_capability", 23) != 0)
           break;
-        return AttributeList::AT_ReleaseCapability;	 // "clang::release_generic_capability"
+        return ParsedAttr::AT_ReleaseCapability;	 // "clang::release_generic_capability"
       case 'q':	 // 1 string to match.
         if (memcmp(Name.data()+10, "uires_shared_capability", 23) != 0)
           break;
-        return AttributeList::AT_RequiresCapability;	 // "clang::requires_shared_capability"
+        return ParsedAttr::AT_RequiresCapability;	 // "clang::requires_shared_capability"
       }
       break;
     }
@@ -2855,7 +2927,7 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "mdgpu_flat_work_group_size", 26) != 0)
         break;
-      return AttributeList::AT_AMDGPUFlatWorkGroupSize;	 // "clang::amdgpu_flat_work_group_size"
+      return ParsedAttr::AT_AMDGPUFlatWorkGroupSize;	 // "clang::amdgpu_flat_work_group_size"
     case 'o':	 // 2 strings to match.
       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
         break;
@@ -2864,11 +2936,11 @@
       case 'd':	 // 1 string to match.
         if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
           break;
-        return AttributeList::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
+        return ParsedAttr::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
           break;
-        return AttributeList::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
+        return ParsedAttr::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
       }
       break;
     }
@@ -2876,46 +2948,46 @@
   case 35:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::consumable_set_state_on_read", 35) != 0)
       break;
-    return AttributeList::AT_ConsumableSetOnRead;	 // "clang::consumable_set_state_on_read"
+    return ParsedAttr::AT_ConsumableSetOnRead;	 // "clang::consumable_set_state_on_read"
   case 36:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::try_acquire_shared_capability", 36) != 0)
       break;
-    return AttributeList::AT_TryAcquireCapability;	 // "clang::try_acquire_shared_capability"
+    return ParsedAttr::AT_TryAcquireCapability;	 // "clang::try_acquire_shared_capability"
   case 38:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::require_constant_initialization", 38) != 0)
       break;
-    return AttributeList::AT_RequireConstantInit;	 // "clang::require_constant_initialization"
+    return ParsedAttr::AT_RequireConstantInit;	 // "clang::require_constant_initialization"
   case 41:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
       break;
-    return AttributeList::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
+    return ParsedAttr::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
   case 42:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
       break;
-    return AttributeList::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
+    return ParsedAttr::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
   case 53:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
       break;
-    return AttributeList::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
+    return ParsedAttr::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
   }
-  } else if (AttributeList::AS_C2x == Syntax) {
+  } else if (ParsedAttr::AS_C2x == Syntax) {
   switch (Name.size()) {
   default: break;
   case 11:	 // 1 string to match.
     if (memcmp(Name.data()+0, "::nodiscard", 11) != 0)
       break;
-    return AttributeList::AT_WarnUnusedResult;	 // "::nodiscard"
+    return ParsedAttr::AT_WarnUnusedResult;	 // "::nodiscard"
   case 12:	 // 1 string to match.
     if (memcmp(Name.data()+0, "::deprecated", 12) != 0)
       break;
-    return AttributeList::AT_Deprecated;	 // "::deprecated"
+    return ParsedAttr::AT_Deprecated;	 // "::deprecated"
   case 13:	 // 3 strings to match.
     switch (Name[0]) {
     default: break;
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":fallthrough", 12) != 0)
         break;
-      return AttributeList::AT_FallThrough;	 // "::fallthrough"
+      return ParsedAttr::AT_FallThrough;	 // "::fallthrough"
     case 'c':	 // 2 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
@@ -2924,11 +2996,11 @@
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+8, "locks", 5) != 0)
           break;
-        return AttributeList::AT_Blocks;	 // "clang::blocks"
+        return ParsedAttr::AT_Blocks;	 // "clang::blocks"
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+8, "ascal", 5) != 0)
           break;
-        return AttributeList::AT_Pascal;	 // "clang::pascal"
+        return ParsedAttr::AT_Pascal;	 // "clang::pascal"
       }
       break;
     }
@@ -2939,7 +3011,7 @@
     case ':':	 // 1 string to match.
       if (memcmp(Name.data()+1, ":maybe_unused", 13) != 0)
         break;
-      return AttributeList::AT_Unused;	 // "::maybe_unused"
+      return ParsedAttr::AT_Unused;	 // "::maybe_unused"
     case 'c':	 // 3 strings to match.
       if (memcmp(Name.data()+1, "lang::", 6) != 0)
         break;
@@ -2948,18 +3020,18 @@
       case 'm':	 // 1 string to match.
         if (memcmp(Name.data()+8, "insize", 6) != 0)
           break;
-        return AttributeList::AT_MinSize;	 // "clang::minsize"
+        return ParsedAttr::AT_MinSize;	 // "clang::minsize"
       case 'o':	 // 2 strings to match.
         switch (Name[8]) {
         default: break;
         case 'b':	 // 1 string to match.
           if (memcmp(Name.data()+9, "jc_gc", 5) != 0)
             break;
-          return AttributeList::AT_ObjCGC;	 // "clang::objc_gc"
+          return ParsedAttr::AT_ObjCGC;	 // "clang::objc_gc"
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+9, "tnone", 5) != 0)
             break;
-          return AttributeList::AT_OptimizeNone;	 // "clang::optnone"
+          return ParsedAttr::AT_OptimizeNone;	 // "clang::optnone"
         }
         break;
       }
@@ -2974,11 +3046,11 @@
     case 'N':	 // 1 string to match.
       if (memcmp(Name.data()+8, "SObject", 7) != 0)
         break;
-      return AttributeList::AT_ObjCNSObject;	 // "clang::NSObject"
+      return ParsedAttr::AT_ObjCNSObject;	 // "clang::NSObject"
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "nnotate", 7) != 0)
         break;
-      return AttributeList::AT_Annotate;	 // "clang::annotate"
+      return ParsedAttr::AT_Annotate;	 // "clang::annotate"
     case 'i':	 // 2 strings to match.
       if (Name[8] != 'b')
         break;
@@ -2987,17 +3059,17 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+10, "ction", 5) != 0)
           break;
-        return AttributeList::AT_IBAction;	 // "clang::ibaction"
+        return ParsedAttr::AT_IBAction;	 // "clang::ibaction"
       case 'o':	 // 1 string to match.
         if (memcmp(Name.data()+10, "utlet", 5) != 0)
           break;
-        return AttributeList::AT_IBOutlet;	 // "clang::iboutlet"
+        return ParsedAttr::AT_IBOutlet;	 // "clang::iboutlet"
       }
       break;
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "oescape", 7) != 0)
         break;
-      return AttributeList::AT_NoEscape;	 // "clang::noescape"
+      return ParsedAttr::AT_NoEscape;	 // "clang::noescape"
     }
     break;
   case 16:	 // 2 strings to match.
@@ -3008,11 +3080,11 @@
     case 'f':	 // 1 string to match.
       if (memcmp(Name.data()+8, "lag_enum", 8) != 0)
         break;
-      return AttributeList::AT_FlagEnum;	 // "clang::flag_enum"
+      return ParsedAttr::AT_FlagEnum;	 // "clang::flag_enum"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+8, "wiftcall", 8) != 0)
         break;
-      return AttributeList::AT_SwiftCall;	 // "clang::swiftcall"
+      return ParsedAttr::AT_SwiftCall;	 // "clang::swiftcall"
     }
     break;
   case 17:	 // 2 strings to match.
@@ -3023,11 +3095,11 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+8, "onvergent", 9) != 0)
         break;
-      return AttributeList::AT_Convergent;	 // "clang::convergent"
+      return ParsedAttr::AT_Convergent;	 // "clang::convergent"
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ectorcall", 9) != 0)
         break;
-      return AttributeList::AT_VectorCall;	 // "clang::vectorcall"
+      return ParsedAttr::AT_VectorCall;	 // "clang::vectorcall"
     }
     break;
   case 18:	 // 7 strings to match.
@@ -3038,7 +3110,7 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+8, "f_consumed", 10) != 0)
         break;
-      return AttributeList::AT_CFConsumed;	 // "clang::cf_consumed"
+      return ParsedAttr::AT_CFConsumed;	 // "clang::cf_consumed"
     case 'n':	 // 3 strings to match.
       switch (Name[8]) {
       default: break;
@@ -3048,34 +3120,34 @@
         case '_':	 // 1 string to match.
           if (memcmp(Name.data()+10, "sanitize", 8) != 0)
             break;
-          return AttributeList::AT_NoSanitize;	 // "clang::no_sanitize"
+          return ParsedAttr::AT_NoSanitize;	 // "clang::no_sanitize"
         case 'd':	 // 1 string to match.
           if (memcmp(Name.data()+10, "uplicate", 8) != 0)
             break;
-          return AttributeList::AT_NoDuplicate;	 // "clang::noduplicate"
+          return ParsedAttr::AT_NoDuplicate;	 // "clang::noduplicate"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+9, "_consumed", 9) != 0)
           break;
-        return AttributeList::AT_NSConsumed;	 // "clang::ns_consumed"
+        return ParsedAttr::AT_NSConsumed;	 // "clang::ns_consumed"
       }
       break;
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_bridge", 10) != 0)
         break;
-      return AttributeList::AT_ObjCBridge;	 // "clang::objc_bridge"
+      return ParsedAttr::AT_ObjCBridge;	 // "clang::objc_bridge"
     case 'u':	 // 1 string to match.
       if (memcmp(Name.data()+8, "navailable", 10) != 0)
         break;
-      return AttributeList::AT_Unavailable;	 // "clang::unavailable"
+      return ParsedAttr::AT_Unavailable;	 // "clang::unavailable"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+8, "eak_import", 10) != 0)
         break;
-      return AttributeList::AT_WeakImport;	 // "clang::weak_import"
+      return ParsedAttr::AT_WeakImport;	 // "clang::weak_import"
     }
     break;
-  case 19:	 // 4 strings to match.
+  case 19:	 // 6 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -3083,24 +3155,39 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "vailability", 11) != 0)
         break;
-      return AttributeList::AT_Availability;	 // "clang::availability"
+      return ParsedAttr::AT_Availability;	 // "clang::availability"
+    case 'c':	 // 2 strings to match.
+      if (memcmp(Name.data()+8, "pu_", 3) != 0)
+        break;
+      switch (Name[11]) {
+      default: break;
+      case 'd':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "ispatch", 7) != 0)
+          break;
+        return ParsedAttr::AT_CPUDispatch;	 // "clang::cpu_dispatch"
+      case 's':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "pecific", 7) != 0)
+          break;
+        return ParsedAttr::AT_CPUSpecific;	 // "clang::cpu_specific"
+      }
+      break;
     case 'o':	 // 2 strings to match.
       switch (Name[8]) {
       default: break;
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+9, "jc_boxable", 10) != 0)
           break;
-        return AttributeList::AT_ObjCBoxable;	 // "clang::objc_boxable"
+        return ParsedAttr::AT_ObjCBoxable;	 // "clang::objc_boxable"
       case 'v':	 // 1 string to match.
         if (memcmp(Name.data()+9, "erloadable", 10) != 0)
           break;
-        return AttributeList::AT_Overloadable;	 // "clang::overloadable"
+        return ParsedAttr::AT_Overloadable;	 // "clang::overloadable"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+8, "reserve_all", 11) != 0)
         break;
-      return AttributeList::AT_PreserveAll;	 // "clang::preserve_all"
+      return ParsedAttr::AT_PreserveAll;	 // "clang::preserve_all"
     }
     break;
   case 20:	 // 4 strings to match.
@@ -3111,19 +3198,19 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ddress_space", 12) != 0)
         break;
-      return AttributeList::AT_AddressSpace;	 // "clang::address_space"
+      return ParsedAttr::AT_AddressSpace;	 // "clang::address_space"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+8, "reserve_most", 12) != 0)
         break;
-      return AttributeList::AT_PreserveMost;	 // "clang::preserve_most"
+      return ParsedAttr::AT_PreserveMost;	 // "clang::preserve_most"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+8, "wift_context", 12) != 0)
         break;
-      return AttributeList::AT_SwiftContext;	 // "clang::swift_context"
+      return ParsedAttr::AT_SwiftContext;	 // "clang::swift_context"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ray_log_args", 12) != 0)
         break;
-      return AttributeList::AT_XRayLogArgs;	 // "clang::xray_log_args"
+      return ParsedAttr::AT_XRayLogArgs;	 // "clang::xray_log_args"
     }
     break;
   case 21:	 // 2 strings to match.
@@ -3134,11 +3221,11 @@
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+13, "xception", 8) != 0)
         break;
-      return AttributeList::AT_ObjCException;	 // "clang::objc_exception"
+      return ParsedAttr::AT_ObjCException;	 // "clang::objc_exception"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+13, "wnership", 8) != 0)
         break;
-      return AttributeList::AT_ObjCOwnership;	 // "clang::objc_ownership"
+      return ParsedAttr::AT_ObjCOwnership;	 // "clang::objc_ownership"
     }
     break;
   case 22:	 // 5 strings to match.
@@ -3149,14 +3236,14 @@
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ot_tail_called", 14) != 0)
         break;
-      return AttributeList::AT_NotTailCalled;	 // "clang::not_tail_called"
+      return ParsedAttr::AT_NotTailCalled;	 // "clang::not_tail_called"
     case 'o':	 // 3 strings to match.
       switch (Name[8]) {
       default: break;
       case 'b':	 // 1 string to match.
         if (memcmp(Name.data()+9, "jc_root_class", 13) != 0)
           break;
-        return AttributeList::AT_ObjCRootClass;	 // "clang::objc_root_class"
+        return ParsedAttr::AT_ObjCRootClass;	 // "clang::objc_root_class"
       case 'w':	 // 2 strings to match.
         if (memcmp(Name.data()+9, "nership_", 8) != 0)
           break;
@@ -3165,11 +3252,11 @@
         case 'h':	 // 1 string to match.
           if (memcmp(Name.data()+18, "olds", 4) != 0)
             break;
-          return AttributeList::AT_Ownership;	 // "clang::ownership_holds"
+          return ParsedAttr::AT_Ownership;	 // "clang::ownership_holds"
         case 't':	 // 1 string to match.
           if (memcmp(Name.data()+18, "akes", 4) != 0)
             break;
-          return AttributeList::AT_Ownership;	 // "clang::ownership_takes"
+          return ParsedAttr::AT_Ownership;	 // "clang::ownership_takes"
         }
         break;
       }
@@ -3177,10 +3264,10 @@
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ype_visibility", 14) != 0)
         break;
-      return AttributeList::AT_TypeVisibility;	 // "clang::type_visibility"
+      return ParsedAttr::AT_TypeVisibility;	 // "clang::type_visibility"
     }
     break;
-  case 23:	 // 4 strings to match.
+  case 23:	 // 5 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -3188,24 +3275,28 @@
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+8, "nternal_linkage", 15) != 0)
         break;
-      return AttributeList::AT_InternalLinkage;	 // "clang::internal_linkage"
+      return ParsedAttr::AT_InternalLinkage;	 // "clang::internal_linkage"
+    case 'm':	 // 1 string to match.
+      if (memcmp(Name.data()+8, "in_vector_width", 15) != 0)
+        break;
+      return ParsedAttr::AT_MinVectorWidth;	 // "clang::min_vector_width"
     case 'n':	 // 2 strings to match.
       switch (Name[8]) {
       default: break;
       case 'e':	 // 1 string to match.
         if (memcmp(Name.data()+9, "on_vector_type", 14) != 0)
           break;
-        return AttributeList::AT_NeonVectorType;	 // "clang::neon_vector_type"
+        return ParsedAttr::AT_NeonVectorType;	 // "clang::neon_vector_type"
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+9, "_consumes_self", 14) != 0)
           break;
-        return AttributeList::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
+        return ParsedAttr::AT_NSConsumesSelf;	 // "clang::ns_consumes_self"
       }
       break;
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ass_object_size", 15) != 0)
         break;
-      return AttributeList::AT_PassObjectSize;	 // "clang::pass_object_size"
+      return ParsedAttr::AT_PassObjectSize;	 // "clang::pass_object_size"
     }
     break;
   case 24:	 // 2 strings to match.
@@ -3216,14 +3307,14 @@
     case 'b':	 // 1 string to match.
       if (memcmp(Name.data()+9, "jc_runtime_name", 15) != 0)
         break;
-      return AttributeList::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
+      return ParsedAttr::AT_ObjCRuntimeName;	 // "clang::objc_runtime_name"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+9, "nership_returns", 15) != 0)
         break;
-      return AttributeList::AT_Ownership;	 // "clang::ownership_returns"
+      return ParsedAttr::AT_Ownership;	 // "clang::ownership_returns"
     }
     break;
-  case 25:	 // 6 strings to match.
+  case 25:	 // 7 strings to match.
     if (memcmp(Name.data()+0, "clang::", 7) != 0)
       break;
     switch (Name[7]) {
@@ -3231,27 +3322,38 @@
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+8, "isable_tail_calls", 17) != 0)
         break;
-      return AttributeList::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
+      return ParsedAttr::AT_DisableTailCalls;	 // "clang::disable_tail_calls"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+8, "num_extensibility", 17) != 0)
         break;
-      return AttributeList::AT_EnumExtensibility;	 // "clang::enum_extensibility"
+      return ParsedAttr::AT_EnumExtensibility;	 // "clang::enum_extensibility"
     case 'i':	 // 1 string to match.
       if (memcmp(Name.data()+8, "boutletcollection", 17) != 0)
         break;
-      return AttributeList::AT_IBOutletCollection;	 // "clang::iboutletcollection"
-    case 'n':	 // 1 string to match.
-      if (memcmp(Name.data()+8, "o_sanitize_memory", 17) != 0)
+      return ParsedAttr::AT_IBOutletCollection;	 // "clang::iboutletcollection"
+    case 'n':	 // 2 strings to match.
+      if (memcmp(Name.data()+8, "o_s", 3) != 0)
         break;
-      return AttributeList::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
+      switch (Name[11]) {
+      default: break;
+      case 'a':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "nitize_memory", 13) != 0)
+          break;
+        return ParsedAttr::AT_NoSanitizeSpecific;	 // "clang::no_sanitize_memory"
+      case 't':	 // 1 string to match.
+        if (memcmp(Name.data()+12, "ack_protector", 13) != 0)
+          break;
+        return ParsedAttr::AT_NoStackProtector;	 // "clang::no_stack_protector"
+      }
+      break;
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_method_family", 17) != 0)
         break;
-      return AttributeList::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
+      return ParsedAttr::AT_ObjCMethodFamily;	 // "clang::objc_method_family"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+8, "wift_error_result", 17) != 0)
         break;
-      return AttributeList::AT_SwiftErrorResult;	 // "clang::swift_error_result"
+      return ParsedAttr::AT_SwiftErrorResult;	 // "clang::swift_error_result"
     }
     break;
   case 26:	 // 7 strings to match.
@@ -3267,21 +3369,21 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+11, "udited_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
+        return ParsedAttr::AT_CFAuditedTransfer;	 // "clang::cf_audited_transfer"
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+11, "eturns_retained", 15) != 0)
           break;
-        return AttributeList::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
+        return ParsedAttr::AT_CFReturnsRetained;	 // "clang::cf_returns_retained"
       case 'u':	 // 1 string to match.
         if (memcmp(Name.data()+11, "nknown_transfer", 15) != 0)
           break;
-        return AttributeList::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
+        return ParsedAttr::AT_CFUnknownTransfer;	 // "clang::cf_unknown_transfer"
       }
       break;
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "s_returns_retained", 18) != 0)
         break;
-      return AttributeList::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
+      return ParsedAttr::AT_NSReturnsRetained;	 // "clang::ns_returns_retained"
     case 'o':	 // 3 strings to match.
       if (memcmp(Name.data()+8, "bjc_", 4) != 0)
         break;
@@ -3295,17 +3397,17 @@
         case 'm':	 // 1 string to match.
           if (memcmp(Name.data()+20, "utable", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
+          return ParsedAttr::AT_ObjCBridgeMutable;	 // "clang::objc_bridge_mutable"
         case 'r':	 // 1 string to match.
           if (memcmp(Name.data()+20, "elated", 6) != 0)
             break;
-          return AttributeList::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
+          return ParsedAttr::AT_ObjCBridgeRelated;	 // "clang::objc_bridge_related"
         }
         break;
       case 'r':	 // 1 string to match.
         if (memcmp(Name.data()+13, "equires_super", 13) != 0)
           break;
-        return AttributeList::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
+        return ParsedAttr::AT_ObjCRequiresSuper;	 // "clang::objc_requires_super"
       }
       break;
     }
@@ -3318,11 +3420,11 @@
     case 'n':	 // 1 string to match.
       if (memcmp(Name.data()+8, "eon_polyvector_type", 19) != 0)
         break;
-      return AttributeList::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
+      return ParsedAttr::AT_NeonPolyVectorType;	 // "clang::neon_polyvector_type"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_runtime_visible", 19) != 0)
         break;
-      return AttributeList::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
+      return ParsedAttr::AT_ObjCRuntimeVisible;	 // "clang::objc_runtime_visible"
     }
     break;
   case 28:	 // 6 strings to match.
@@ -3333,27 +3435,27 @@
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+8, "to_visibility_public", 20) != 0)
         break;
-      return AttributeList::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
+      return ParsedAttr::AT_LTOVisibilityPublic;	 // "clang::lto_visibility_public"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_precise_lifetime", 20) != 0)
         break;
-      return AttributeList::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
+      return ParsedAttr::AT_ObjCPreciseLifetime;	 // "clang::objc_precise_lifetime"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ointer_with_type_tag", 20) != 0)
         break;
-      return AttributeList::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
+      return ParsedAttr::AT_ArgumentWithTypeTag;	 // "clang::pointer_with_type_tag"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+8, "wift_indirect_result", 20) != 0)
         break;
-      return AttributeList::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
+      return ParsedAttr::AT_SwiftIndirectResult;	 // "clang::swift_indirect_result"
     case 't':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ype_tag_for_datatype", 20) != 0)
         break;
-      return AttributeList::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
+      return ParsedAttr::AT_TypeTagForDatatype;	 // "clang::type_tag_for_datatype"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ray_never_instrument", 20) != 0)
         break;
-      return AttributeList::AT_XRayInstrument;	 // "clang::xray_never_instrument"
+      return ParsedAttr::AT_XRayInstrument;	 // "clang::xray_never_instrument"
     }
     break;
   case 29:	 // 4 strings to match.
@@ -3364,19 +3466,19 @@
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+8, "rgument_with_type_tag", 21) != 0)
         break;
-      return AttributeList::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
+      return ParsedAttr::AT_ArgumentWithTypeTag;	 // "clang::argument_with_type_tag"
     case 'e':	 // 1 string to match.
       if (memcmp(Name.data()+8, "xternal_source_symbol", 21) != 0)
         break;
-      return AttributeList::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
+      return ParsedAttr::AT_ExternalSourceSymbol;	 // "clang::external_source_symbol"
     case 'o':	 // 1 string to match.
       if (memcmp(Name.data()+8, "bjc_independent_class", 21) != 0)
         break;
-      return AttributeList::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
+      return ParsedAttr::AT_ObjCIndependentClass;	 // "clang::objc_independent_class"
     case 'x':	 // 1 string to match.
       if (memcmp(Name.data()+8, "ray_always_instrument", 21) != 0)
         break;
-      return AttributeList::AT_XRayInstrument;	 // "clang::xray_always_instrument"
+      return ParsedAttr::AT_XRayInstrument;	 // "clang::xray_always_instrument"
     }
     break;
   case 30:	 // 3 strings to match.
@@ -3387,7 +3489,7 @@
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+8, "f_returns_not_retained", 22) != 0)
         break;
-      return AttributeList::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
+      return ParsedAttr::AT_CFReturnsNotRetained;	 // "clang::cf_returns_not_retained"
     case 'n':	 // 2 strings to match.
       if (memcmp(Name.data()+8, "s_returns_", 10) != 0)
         break;
@@ -3396,11 +3498,11 @@
       case 'a':	 // 1 string to match.
         if (memcmp(Name.data()+19, "utoreleased", 11) != 0)
           break;
-        return AttributeList::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
+        return ParsedAttr::AT_NSReturnsAutoreleased;	 // "clang::ns_returns_autoreleased"
       case 'n':	 // 1 string to match.
         if (memcmp(Name.data()+19, "ot_retained", 11) != 0)
           break;
-        return AttributeList::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
+        return ParsedAttr::AT_NSReturnsNotRetained;	 // "clang::ns_returns_not_retained"
       }
       break;
     }
@@ -3408,11 +3510,11 @@
   case 32:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::no_thread_safety_analysis", 32) != 0)
       break;
-    return AttributeList::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
+    return ParsedAttr::AT_NoThreadSafetyAnalysis;	 // "clang::no_thread_safety_analysis"
   case 33:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_returns_inner_pointer", 33) != 0)
       break;
-    return AttributeList::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
+    return ParsedAttr::AT_ObjCReturnsInnerPointer;	 // "clang::objc_returns_inner_pointer"
   case 34:	 // 2 strings to match.
     if (memcmp(Name.data()+0, "clang::objc_", 12) != 0)
       break;
@@ -3421,27 +3523,27 @@
     case 'd':	 // 1 string to match.
       if (memcmp(Name.data()+13, "esignated_initializer", 21) != 0)
         break;
-      return AttributeList::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
+      return ParsedAttr::AT_ObjCDesignatedInitializer;	 // "clang::objc_designated_initializer"
     case 's':	 // 1 string to match.
       if (memcmp(Name.data()+13, "ubclassing_restricted", 21) != 0)
         break;
-      return AttributeList::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
+      return ParsedAttr::AT_ObjCSubclassingRestricted;	 // "clang::objc_subclassing_restricted"
     }
     break;
   case 41:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_requires_property_definitions", 41) != 0)
       break;
-    return AttributeList::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
+    return ParsedAttr::AT_ObjCRequiresPropertyDefs;	 // "clang::objc_requires_property_definitions"
   case 42:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_arc_weak_reference_unavailable", 42) != 0)
       break;
-    return AttributeList::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
+    return ParsedAttr::AT_ArcWeakrefUnavailable;	 // "clang::objc_arc_weak_reference_unavailable"
   case 53:	 // 1 string to match.
     if (memcmp(Name.data()+0, "clang::objc_protocol_requires_explicit_implementation", 53) != 0)
       break;
-    return AttributeList::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
+    return ParsedAttr::AT_ObjCExplicitProtocolImpl;	 // "clang::objc_protocol_requires_explicit_implementation"
   }
-  } else if (AttributeList::AS_Keyword == Syntax || AttributeList::AS_ContextSensitiveKeyword == Syntax) {
+  } else if (ParsedAttr::AS_Keyword == Syntax || ParsedAttr::AS_ContextSensitiveKeyword == Syntax) {
   switch (Name.size()) {
   default: break;
   case 5:	 // 2 strings to match.
@@ -3450,11 +3552,11 @@
     case '_':	 // 1 string to match.
       if (memcmp(Name.data()+1, "_w64", 4) != 0)
         break;
-      return AttributeList::IgnoredAttribute;	 // "__w64"
+      return ParsedAttr::IgnoredAttribute;	 // "__w64"
     case 'l':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ocal", 4) != 0)
         break;
-      return AttributeList::AT_OpenCLLocalAddressSpace;	 // "local"
+      return ParsedAttr::AT_OpenCLLocalAddressSpace;	 // "local"
     }
     break;
   case 6:	 // 5 strings to match.
@@ -3469,27 +3571,27 @@
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+3, "ptr", 3) != 0)
             break;
-          return AttributeList::AT_SPtr;	 // "__sptr"
+          return ParsedAttr::AT_SPtr;	 // "__sptr"
         case 'u':	 // 1 string to match.
           if (memcmp(Name.data()+3, "ptr", 3) != 0)
             break;
-          return AttributeList::AT_UPtr;	 // "__uptr"
+          return ParsedAttr::AT_UPtr;	 // "__uptr"
         }
         break;
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+2, "decl", 4) != 0)
           break;
-        return AttributeList::AT_CDecl;	 // "_cdecl"
+        return ParsedAttr::AT_CDecl;	 // "_cdecl"
       }
       break;
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lobal", 5) != 0)
         break;
-      return AttributeList::AT_OpenCLGlobalAddressSpace;	 // "global"
+      return ParsedAttr::AT_OpenCLGlobalAddressSpace;	 // "global"
     case 'k':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ernel", 5) != 0)
         break;
-      return AttributeList::AT_OpenCLKernel;	 // "kernel"
+      return ParsedAttr::AT_OpenCLKernel;	 // "kernel"
     }
     break;
   case 7:	 // 8 strings to match.
@@ -3504,11 +3606,11 @@
         case 'c':	 // 1 string to match.
           if (memcmp(Name.data()+3, "decl", 4) != 0)
             break;
-          return AttributeList::AT_CDecl;	 // "__cdecl"
+          return ParsedAttr::AT_CDecl;	 // "__cdecl"
         case 'l':	 // 1 string to match.
           if (memcmp(Name.data()+3, "ocal", 4) != 0)
             break;
-          return AttributeList::AT_OpenCLLocalAddressSpace;	 // "__local"
+          return ParsedAttr::AT_OpenCLLocalAddressSpace;	 // "__local"
         case 'p':	 // 2 strings to match.
           if (memcmp(Name.data()+3, "tr", 2) != 0)
             break;
@@ -3517,11 +3619,11 @@
           case '3':	 // 1 string to match.
             if (Name[6] != '2')
               break;
-            return AttributeList::AT_Ptr32;	 // "__ptr32"
+            return ParsedAttr::AT_Ptr32;	 // "__ptr32"
           case '6':	 // 1 string to match.
             if (Name[6] != '4')
               break;
-            return AttributeList::AT_Ptr64;	 // "__ptr64"
+            return ParsedAttr::AT_Ptr64;	 // "__ptr64"
           }
           break;
         }
@@ -3529,21 +3631,21 @@
       case 'p':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ascal", 5) != 0)
           break;
-        return AttributeList::AT_Pascal;	 // "_pascal"
+        return ParsedAttr::AT_Pascal;	 // "_pascal"
       }
       break;
     case 'a':	 // 1 string to match.
       if (memcmp(Name.data()+1, "lignas", 6) != 0)
         break;
-      return AttributeList::AT_Aligned;	 // "alignas"
+      return ParsedAttr::AT_Aligned;	 // "alignas"
     case 'g':	 // 1 string to match.
       if (memcmp(Name.data()+1, "eneric", 6) != 0)
         break;
-      return AttributeList::AT_OpenCLGenericAddressSpace;	 // "generic"
+      return ParsedAttr::AT_OpenCLGenericAddressSpace;	 // "generic"
     case 'p':	 // 1 string to match.
       if (memcmp(Name.data()+1, "rivate", 6) != 0)
         break;
-      return AttributeList::AT_OpenCLPrivateAddressSpace;	 // "private"
+      return ParsedAttr::AT_OpenCLPrivateAddressSpace;	 // "private"
     }
     break;
   case 8:	 // 8 strings to match.
@@ -3555,47 +3657,47 @@
       case 'A':	 // 1 string to match.
         if (memcmp(Name.data()+2, "lignas", 6) != 0)
           break;
-        return AttributeList::AT_Aligned;	 // "_Alignas"
+        return ParsedAttr::AT_Aligned;	 // "_Alignas"
       case 'N':	 // 1 string to match.
         if (memcmp(Name.data()+2, "onnull", 6) != 0)
           break;
-        return AttributeList::AT_TypeNonNull;	 // "_Nonnull"
+        return ParsedAttr::AT_TypeNonNull;	 // "_Nonnull"
       case '_':	 // 4 strings to match.
         switch (Name[2]) {
         default: break;
         case 'g':	 // 1 string to match.
           if (memcmp(Name.data()+3, "lobal", 5) != 0)
             break;
-          return AttributeList::AT_OpenCLGlobalAddressSpace;	 // "__global"
+          return ParsedAttr::AT_OpenCLGlobalAddressSpace;	 // "__global"
         case 'k':	 // 2 strings to match.
           switch (Name[3]) {
           default: break;
           case 'e':	 // 1 string to match.
             if (memcmp(Name.data()+4, "rnel", 4) != 0)
               break;
-            return AttributeList::AT_OpenCLKernel;	 // "__kernel"
+            return ParsedAttr::AT_OpenCLKernel;	 // "__kernel"
           case 'i':	 // 1 string to match.
             if (memcmp(Name.data()+4, "ndof", 4) != 0)
               break;
-            return AttributeList::AT_ObjCKindOf;	 // "__kindof"
+            return ParsedAttr::AT_ObjCKindOf;	 // "__kindof"
           }
           break;
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+3, "ascal", 5) != 0)
             break;
-          return AttributeList::AT_Pascal;	 // "__pascal"
+          return ParsedAttr::AT_Pascal;	 // "__pascal"
         }
         break;
       case 's':	 // 1 string to match.
         if (memcmp(Name.data()+2, "tdcall", 6) != 0)
           break;
-        return AttributeList::AT_StdCall;	 // "_stdcall"
+        return ParsedAttr::AT_StdCall;	 // "_stdcall"
       }
       break;
     case 'c':	 // 1 string to match.
       if (memcmp(Name.data()+1, "onstant", 7) != 0)
         break;
-      return AttributeList::AT_OpenCLConstantAddressSpace;	 // "constant"
+      return ParsedAttr::AT_OpenCLConstantAddressSpace;	 // "constant"
     }
     break;
   case 9:	 // 8 strings to match.
@@ -3607,42 +3709,42 @@
       case 'N':	 // 1 string to match.
         if (memcmp(Name.data()+2, "ullable", 7) != 0)
           break;
-        return AttributeList::AT_TypeNullable;	 // "_Nullable"
+        return ParsedAttr::AT_TypeNullable;	 // "_Nullable"
       case '_':	 // 4 strings to match.
         switch (Name[2]) {
         default: break;
         case 'g':	 // 1 string to match.
           if (memcmp(Name.data()+3, "eneric", 6) != 0)
             break;
-          return AttributeList::AT_OpenCLGenericAddressSpace;	 // "__generic"
+          return ParsedAttr::AT_OpenCLGenericAddressSpace;	 // "__generic"
         case 'p':	 // 1 string to match.
           if (memcmp(Name.data()+3, "rivate", 6) != 0)
             break;
-          return AttributeList::AT_OpenCLPrivateAddressSpace;	 // "__private"
+          return ParsedAttr::AT_OpenCLPrivateAddressSpace;	 // "__private"
         case 'r':	 // 1 string to match.
           if (memcmp(Name.data()+3, "egcall", 6) != 0)
             break;
-          return AttributeList::AT_RegCall;	 // "__regcall"
+          return ParsedAttr::AT_RegCall;	 // "__regcall"
         case 's':	 // 1 string to match.
           if (memcmp(Name.data()+3, "tdcall", 6) != 0)
             break;
-          return AttributeList::AT_StdCall;	 // "__stdcall"
+          return ParsedAttr::AT_StdCall;	 // "__stdcall"
         }
         break;
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+2, "astcall", 7) != 0)
           break;
-        return AttributeList::AT_FastCall;	 // "_fastcall"
+        return ParsedAttr::AT_FastCall;	 // "_fastcall"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+2, "hiscall", 7) != 0)
           break;
-        return AttributeList::AT_ThisCall;	 // "_thiscall"
+        return ParsedAttr::AT_ThisCall;	 // "_thiscall"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ead_only", 8) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "read_only"
+      return ParsedAttr::AT_OpenCLAccess;	 // "read_only"
     }
     break;
   case 10:	 // 5 strings to match.
@@ -3656,25 +3758,25 @@
       case 'c':	 // 1 string to match.
         if (memcmp(Name.data()+3, "onstant", 7) != 0)
           break;
-        return AttributeList::AT_OpenCLConstantAddressSpace;	 // "__constant"
+        return ParsedAttr::AT_OpenCLConstantAddressSpace;	 // "__constant"
       case 'f':	 // 1 string to match.
         if (memcmp(Name.data()+3, "astcall", 7) != 0)
           break;
-        return AttributeList::AT_FastCall;	 // "__fastcall"
+        return ParsedAttr::AT_FastCall;	 // "__fastcall"
       case 't':	 // 1 string to match.
         if (memcmp(Name.data()+3, "hiscall", 7) != 0)
           break;
-        return AttributeList::AT_ThisCall;	 // "__thiscall"
+        return ParsedAttr::AT_ThisCall;	 // "__thiscall"
       }
       break;
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+1, "ead_write", 9) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "read_write"
+      return ParsedAttr::AT_OpenCLAccess;	 // "read_write"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+1, "rite_only", 9) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "write_only"
+      return ParsedAttr::AT_OpenCLAccess;	 // "write_only"
     }
     break;
   case 11:	 // 2 strings to match.
@@ -3685,11 +3787,11 @@
     case '_':	 // 1 string to match.
       if (memcmp(Name.data()+2, "read_only", 9) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "__read_only"
+      return ParsedAttr::AT_OpenCLAccess;	 // "__read_only"
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+2, "ectorcall", 9) != 0)
         break;
-      return AttributeList::AT_VectorCall;	 // "_vectorcall"
+      return ParsedAttr::AT_VectorCall;	 // "_vectorcall"
     }
     break;
   case 12:	 // 3 strings to match.
@@ -3700,58 +3802,66 @@
     case 'r':	 // 1 string to match.
       if (memcmp(Name.data()+3, "ead_write", 9) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "__read_write"
+      return ParsedAttr::AT_OpenCLAccess;	 // "__read_write"
     case 'v':	 // 1 string to match.
       if (memcmp(Name.data()+3, "ectorcall", 9) != 0)
         break;
-      return AttributeList::AT_VectorCall;	 // "__vectorcall"
+      return ParsedAttr::AT_VectorCall;	 // "__vectorcall"
     case 'w':	 // 1 string to match.
       if (memcmp(Name.data()+3, "rite_only", 9) != 0)
         break;
-      return AttributeList::AT_OpenCLAccess;	 // "__write_only"
+      return ParsedAttr::AT_OpenCLAccess;	 // "__write_only"
     }
     break;
   case 13:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__forceinline", 13) != 0)
       break;
-    return AttributeList::AT_AlwaysInline;	 // "__forceinline"
+    return ParsedAttr::AT_AlwaysInline;	 // "__forceinline"
   case 17:	 // 1 string to match.
     if (memcmp(Name.data()+0, "_Null_unspecified", 17) != 0)
       break;
-    return AttributeList::AT_TypeNullUnspecified;	 // "_Null_unspecified"
+    return ParsedAttr::AT_TypeNullUnspecified;	 // "_Null_unspecified"
   case 20:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__single_inheritance", 20) != 0)
       break;
-    return AttributeList::AT_MSInheritance;	 // "__single_inheritance"
+    return ParsedAttr::AT_MSInheritance;	 // "__single_inheritance"
   case 21:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__virtual_inheritance", 21) != 0)
       break;
-    return AttributeList::AT_MSInheritance;	 // "__virtual_inheritance"
+    return ParsedAttr::AT_MSInheritance;	 // "__virtual_inheritance"
   case 22:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__multiple_inheritance", 22) != 0)
       break;
-    return AttributeList::AT_MSInheritance;	 // "__multiple_inheritance"
+    return ParsedAttr::AT_MSInheritance;	 // "__multiple_inheritance"
   case 25:	 // 1 string to match.
     if (memcmp(Name.data()+0, "__unspecified_inheritance", 25) != 0)
       break;
-    return AttributeList::AT_MSInheritance;	 // "__unspecified_inheritance"
+    return ParsedAttr::AT_MSInheritance;	 // "__unspecified_inheritance"
   }
-  } else if (AttributeList::AS_Pragma == Syntax) {
+  } else if (ParsedAttr::AS_Pragma == Syntax) {
   switch (Name.size()) {
   default: break;
   case 4:	 // 1 string to match.
     if (memcmp(Name.data()+0, "loop", 4) != 0)
       break;
-    return AttributeList::AT_LoopHint;	 // "loop"
+    return ParsedAttr::AT_LoopHint;	 // "loop"
   case 6:	 // 1 string to match.
     if (memcmp(Name.data()+0, "unroll", 6) != 0)
       break;
-    return AttributeList::AT_LoopHint;	 // "unroll"
+    return ParsedAttr::AT_LoopHint;	 // "unroll"
   case 8:	 // 1 string to match.
     if (memcmp(Name.data()+0, "nounroll", 8) != 0)
       break;
-    return AttributeList::AT_LoopHint;	 // "nounroll"
+    return ParsedAttr::AT_LoopHint;	 // "nounroll"
+  case 14:	 // 1 string to match.
+    if (memcmp(Name.data()+0, "unroll_and_jam", 14) != 0)
+      break;
+    return ParsedAttr::AT_LoopHint;	 // "unroll_and_jam"
+  case 16:	 // 1 string to match.
+    if (memcmp(Name.data()+0, "nounroll_and_jam", 16) != 0)
+      break;
+    return ParsedAttr::AT_LoopHint;	 // "nounroll_and_jam"
   }
   }
-  return AttributeList::UnknownAttribute;
+  return ParsedAttr::UnknownAttribute;
 }
diff --git a/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc b/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
index adb66e8..7b90b1c 100644
--- a/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrParsedAttrList.inc
@@ -46,6 +46,8 @@
 PARSED_ATTR(CFReturnsNotRetained)
 PARSED_ATTR(CFReturnsRetained)
 PARSED_ATTR(CFUnknownTransfer)
+PARSED_ATTR(CPUDispatch)
+PARSED_ATTR(CPUSpecific)
 PARSED_ATTR(CUDAConstant)
 PARSED_ATTR(CUDADevice)
 PARSED_ATTR(CUDAGlobal)
@@ -58,6 +60,7 @@
 PARSED_ATTR(Capability)
 PARSED_ATTR(CarriesDependency)
 PARSED_ATTR(Cleanup)
+PARSED_ATTR(CodeSeg)
 PARSED_ATTR(Cold)
 PARSED_ATTR(Common)
 PARSED_ATTR(Const)
@@ -97,6 +100,7 @@
 PARSED_ATTR(InternalLinkage)
 PARSED_ATTR(LTOVisibilityPublic)
 PARSED_ATTR(LayoutVersion)
+PARSED_ATTR(LifetimeBound)
 PARSED_ATTR(LockReturned)
 PARSED_ATTR(Lockable)
 PARSED_ATTR(LocksExcluded)
@@ -108,6 +112,7 @@
 PARSED_ATTR(MayAlias)
 PARSED_ATTR(MicroMips)
 PARSED_ATTR(MinSize)
+PARSED_ATTR(MinVectorWidth)
 PARSED_ATTR(Mips16)
 PARSED_ATTR(MipsLongCall)
 PARSED_ATTR(MipsShortCall)
@@ -133,6 +138,7 @@
 PARSED_ATTR(NoSanitize)
 PARSED_ATTR(NoSanitizeSpecific)
 PARSED_ATTR(NoSplitStack)
+PARSED_ATTR(NoStackProtector)
 PARSED_ATTR(NoThreadSafetyAnalysis)
 PARSED_ATTR(NoThrow)
 PARSED_ATTR(NonNull)
diff --git a/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc b/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
index 19c28f3..5fe85eb 100644
--- a/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrSpellingListIndex.inc
@@ -299,6 +299,24 @@
         return 2;
     break;
   }
+  case AT_CPUDispatch: {
+    if (Name == "cpu_dispatch" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "cpu_dispatch" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "cpu_dispatch" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
+  case AT_CPUSpecific: {
+    if (Name == "cpu_specific" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "cpu_specific" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "cpu_specific" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
   case AT_CUDAConstant: {
     if (Name == "constant" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -381,6 +399,11 @@
         return 1;
     break;
   }
+  case AT_CodeSeg: {
+    if (Name == "code_seg" && SyntaxUsed == 3 && Scope == "")
+        return 0;
+    break;
+  }
   case AT_Cold: {
     if (Name == "cold" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -680,6 +703,13 @@
         return 0;
     break;
   }
+  case AT_LifetimeBound: {
+    if (Name == "lifetimebound" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "lifetimebound" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    break;
+  }
   case AT_LockReturned: {
     if (Name == "lock_returned" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -702,6 +732,10 @@
         return 1;
     if (Name == "nounroll" && SyntaxUsed == 6 && Scope == "")
         return 2;
+    if (Name == "unroll_and_jam" && SyntaxUsed == 6 && Scope == "")
+        return 3;
+    if (Name == "nounroll_and_jam" && SyntaxUsed == 6 && Scope == "")
+        return 4;
     break;
   }
   case AT_MSABI: {
@@ -757,6 +791,15 @@
         return 2;
     break;
   }
+  case AT_MinVectorWidth: {
+    if (Name == "min_vector_width" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "min_vector_width" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "min_vector_width" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
   case AT_Mips16: {
     if (Name == "mips16" && SyntaxUsed == 0 && Scope == "")
         return 0;
@@ -978,6 +1021,15 @@
         return 1;
     break;
   }
+  case AT_NoStackProtector: {
+    if (Name == "no_stack_protector" && SyntaxUsed == 0 && Scope == "")
+        return 0;
+    if (Name == "no_stack_protector" && SyntaxUsed == 1 && Scope == "clang")
+        return 1;
+    if (Name == "no_stack_protector" && SyntaxUsed == 2 && Scope == "clang")
+        return 2;
+    break;
+  }
   case AT_NoThreadSafetyAnalysis: {
     if (Name == "no_thread_safety_analysis" && SyntaxUsed == 0 && Scope == "")
         return 0;
diff --git a/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc b/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
index 4dd02c8..04e66df 100644
--- a/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
+++ b/linux-x64/clang/include/clang/Sema/AttrTemplateInstantiate.inc
@@ -238,6 +238,14 @@
       const auto *A = cast<CFUnknownTransferAttr>(At);
       return A->clone(C);
     }
+    case attr::CPUDispatch: {
+      const auto *A = cast<CPUDispatchAttr>(At);
+      return A->clone(C);
+    }
+    case attr::CPUSpecific: {
+      const auto *A = cast<CPUSpecificAttr>(At);
+      return A->clone(C);
+    }
     case attr::CUDAConstant: {
       const auto *A = cast<CUDAConstantAttr>(At);
       return A->clone(C);
@@ -290,6 +298,10 @@
       const auto *A = cast<CleanupAttr>(At);
       return A->clone(C);
     }
+    case attr::CodeSeg: {
+      const auto *A = cast<CodeSegAttr>(At);
+      return A->clone(C);
+    }
     case attr::Cold: {
       const auto *A = cast<ColdAttr>(At);
       return A->clone(C);
@@ -485,6 +497,10 @@
       const auto *A = cast<LayoutVersionAttr>(At);
       return A->clone(C);
     }
+    case attr::LifetimeBound: {
+      const auto *A = cast<LifetimeBoundAttr>(At);
+      return A->clone(C);
+    }
     case attr::LockReturned: {
       const auto *A = cast<LockReturnedAttr>(At);
       Expr * tempInstArg;
@@ -554,6 +570,10 @@
       const auto *A = cast<MinSizeAttr>(At);
       return A->clone(C);
     }
+    case attr::MinVectorWidth: {
+      const auto *A = cast<MinVectorWidthAttr>(At);
+      return A->clone(C);
+    }
     case attr::Mips16: {
       const auto *A = cast<Mips16Attr>(At);
       return A->clone(C);
@@ -646,6 +666,10 @@
       const auto *A = cast<NoSplitStackAttr>(At);
       return A->clone(C);
     }
+    case attr::NoStackProtector: {
+      const auto *A = cast<NoStackProtectorAttr>(At);
+      return A->clone(C);
+    }
     case attr::NoThreadSafetyAnalysis: {
       const auto *A = cast<NoThreadSafetyAnalysisAttr>(At);
       return A->clone(C);
@@ -852,6 +876,10 @@
       const auto *A = cast<PureAttr>(At);
       return A->clone(C);
     }
+    case attr::RISCVInterrupt: {
+      const auto *A = cast<RISCVInterruptAttr>(At);
+      return A->clone(C);
+    }
     case attr::RegCall: {
       const auto *A = cast<RegCallAttr>(At);
       return A->clone(C);
@@ -1236,6 +1264,12 @@
     case attr::CFUnknownTransfer: {
       return nullptr;
     }
+    case attr::CPUDispatch: {
+      return nullptr;
+    }
+    case attr::CPUSpecific: {
+      return nullptr;
+    }
     case attr::CUDAConstant: {
       return nullptr;
     }
@@ -1275,6 +1309,9 @@
     case attr::Cleanup: {
       return nullptr;
     }
+    case attr::CodeSeg: {
+      return nullptr;
+    }
     case attr::Cold: {
       return nullptr;
     }
@@ -1396,6 +1433,9 @@
     case attr::LayoutVersion: {
       return nullptr;
     }
+    case attr::LifetimeBound: {
+      return nullptr;
+    }
     case attr::LockReturned: {
       return nullptr;
     }
@@ -1435,6 +1475,9 @@
     case attr::MinSize: {
       return nullptr;
     }
+    case attr::MinVectorWidth: {
+      return nullptr;
+    }
     case attr::Mips16: {
       return nullptr;
     }
@@ -1504,6 +1547,9 @@
     case attr::NoSplitStack: {
       return nullptr;
     }
+    case attr::NoStackProtector: {
+      return nullptr;
+    }
     case attr::NoThreadSafetyAnalysis: {
       return nullptr;
     }
@@ -1654,6 +1700,9 @@
     case attr::Pure: {
       return nullptr;
     }
+    case attr::RISCVInterrupt: {
+      return nullptr;
+    }
     case attr::RegCall: {
       return nullptr;
     }
diff --git a/linux-x64/clang/include/clang/Sema/AttributeList.h b/linux-x64/clang/include/clang/Sema/AttributeList.h
deleted file mode 100644
index 6b5bb1f..0000000
--- a/linux-x64/clang/include/clang/Sema/AttributeList.h
+++ /dev/null
@@ -1,936 +0,0 @@
-//===- AttributeList.h - Parsed attribute sets ------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines the AttributeList class, which is used to collect
-// parsed attributes.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_CLANG_SEMA_ATTRIBUTELIST_H
-#define LLVM_CLANG_SEMA_ATTRIBUTELIST_H
-
-#include "clang/Basic/AttrSubjectMatchRules.h"
-#include "clang/Basic/SourceLocation.h"
-#include "clang/Basic/TargetInfo.h"
-#include "clang/Basic/VersionTuple.h"
-#include "clang/Sema/Ownership.h"
-#include "llvm/ADT/PointerUnion.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/Support/Allocator.h"
-#include <cassert>
-#include <cstddef>
-#include <cstring>
-#include <utility>
-
-namespace clang {
-
-class ASTContext;
-class Decl;
-class Expr;
-class IdentifierInfo;
-class LangOptions;
-
-/// \brief Represents information about a change in availability for
-/// an entity, which is part of the encoding of the 'availability'
-/// attribute.
-struct AvailabilityChange {
-  /// \brief The location of the keyword indicating the kind of change.
-  SourceLocation KeywordLoc;
-
-  /// \brief The version number at which the change occurred.
-  VersionTuple Version;
-
-  /// \brief The source range covering the version number.
-  SourceRange VersionRange;
-
-  /// \brief Determine whether this availability change is valid.
-  bool isValid() const { return !Version.empty(); }
-};
-
-namespace {
-
-enum AvailabilitySlot {
-  IntroducedSlot, DeprecatedSlot, ObsoletedSlot, NumAvailabilitySlots
-};
-
-/// Describes the trailing object for Availability attribute in AttributeList.
-struct AvailabilityData {
-  AvailabilityChange Changes[NumAvailabilitySlots];
-  SourceLocation StrictLoc;
-  const Expr *Replacement;
-
-  AvailabilityData(const AvailabilityChange &Introduced,
-                   const AvailabilityChange &Deprecated,
-                   const AvailabilityChange &Obsoleted,
-                   SourceLocation Strict, const Expr *ReplaceExpr)
-    : StrictLoc(Strict), Replacement(ReplaceExpr) {
-    Changes[IntroducedSlot] = Introduced;
-    Changes[DeprecatedSlot] = Deprecated;
-    Changes[ObsoletedSlot] = Obsoleted;
-  }
-};
-
-} // namespace
-
-/// \brief Wraps an identifier and optional source location for the identifier.
-struct IdentifierLoc {
-  SourceLocation Loc;
-  IdentifierInfo *Ident;
-
-  static IdentifierLoc *create(ASTContext &Ctx, SourceLocation Loc,
-                               IdentifierInfo *Ident);
-};
-
-/// \brief A union of the various pointer types that can be passed to an
-/// AttributeList as an argument.
-using ArgsUnion = llvm::PointerUnion<Expr *, IdentifierLoc *>;
-using ArgsVector = llvm::SmallVector<ArgsUnion, 12U>;
-
-/// AttributeList - Represents a syntactic attribute.
-///
-/// For a GNU attribute, there are four forms of this construct:
-///
-/// 1: __attribute__(( const )). ParmName/Args/NumArgs will all be unused.
-/// 2: __attribute__(( mode(byte) )). ParmName used, Args/NumArgs unused.
-/// 3: __attribute__(( format(printf, 1, 2) )). ParmName/Args/NumArgs all used.
-/// 4: __attribute__(( aligned(16) )). ParmName is unused, Args/Num used.
-///
-class AttributeList { // TODO: This should really be called ParsedAttribute
-public:
-  /// The style used to specify an attribute.
-  enum Syntax {
-    /// __attribute__((...))
-    AS_GNU,
-
-    /// [[...]]
-    AS_CXX11,
-
-    /// [[...]]
-    AS_C2x,
-
-    /// __declspec(...)
-    AS_Declspec,
-
-    /// [uuid("...")] class Foo
-    AS_Microsoft,
-
-    /// __ptr16, alignas(...), etc.
-    AS_Keyword,
-
-    /// #pragma ...
-    AS_Pragma,
-
-    // Note TableGen depends on the order above.  Do not add or change the order
-    // without adding related code to TableGen/ClangAttrEmitter.cpp.
-    /// Context-sensitive version of a keyword attribute.
-    AS_ContextSensitiveKeyword,
-  };
-
-private:
-  IdentifierInfo *AttrName;
-  IdentifierInfo *ScopeName;
-  SourceRange AttrRange;
-  SourceLocation ScopeLoc;
-  SourceLocation EllipsisLoc;
-
-  unsigned AttrKind : 16;
-
-  /// The number of expression arguments this attribute has.
-  /// The expressions themselves are stored after the object.
-  unsigned NumArgs : 16;
-
-  /// Corresponds to the Syntax enum.
-  unsigned SyntaxUsed : 3;
-
-  /// True if already diagnosed as invalid.
-  mutable unsigned Invalid : 1;
-
-  /// True if this attribute was used as a type attribute.
-  mutable unsigned UsedAsTypeAttr : 1;
-
-  /// True if this has the extra information associated with an
-  /// availability attribute.
-  unsigned IsAvailability : 1;
-
-  /// True if this has extra information associated with a
-  /// type_tag_for_datatype attribute.
-  unsigned IsTypeTagForDatatype : 1;
-
-  /// True if this has extra information associated with a
-  /// Microsoft __delcspec(property) attribute.
-  unsigned IsProperty : 1;
-
-  /// True if this has a ParsedType
-  unsigned HasParsedType : 1;
-
-  /// True if the processing cache is valid.
-  mutable unsigned HasProcessingCache : 1;
-
-  /// A cached value.
-  mutable unsigned ProcessingCache : 8;
-
-  /// \brief The location of the 'unavailable' keyword in an
-  /// availability attribute.
-  SourceLocation UnavailableLoc;
-  
-  const Expr *MessageExpr;
-
-  /// The next attribute in the current position.
-  AttributeList *NextInPosition = nullptr;
-
-  /// The next attribute allocated in the current Pool.
-  AttributeList *NextInPool = nullptr;
-
-  /// Arguments, if any, are stored immediately following the object.
-  ArgsUnion *getArgsBuffer() { return reinterpret_cast<ArgsUnion *>(this + 1); }
-  ArgsUnion const *getArgsBuffer() const {
-    return reinterpret_cast<ArgsUnion const *>(this + 1);
-  }
-
-  /// Availability information is stored immediately following the arguments,
-  /// if any, at the end of the object.
-  AvailabilityData *getAvailabilityData() {
-    return reinterpret_cast<AvailabilityData*>(getArgsBuffer() + NumArgs);
-  }
-  const AvailabilityData *getAvailabilityData() const {
-    return reinterpret_cast<const AvailabilityData*>(getArgsBuffer() + NumArgs);
-  }
-
-public:
-  struct TypeTagForDatatypeData {
-    ParsedType *MatchingCType;
-    unsigned LayoutCompatible : 1;
-    unsigned MustBeNull : 1;
-  };
-  struct PropertyData {
-    IdentifierInfo *GetterId, *SetterId;
-
-    PropertyData(IdentifierInfo *getterId, IdentifierInfo *setterId)
-        : GetterId(getterId), SetterId(setterId) {}
-  };
-
-private:
-  friend class AttributeFactory;
-  friend class AttributePool;
-
-  /// Constructor for attributes with expression arguments.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                ArgsUnion *args, unsigned numArgs,
-                Syntax syntaxUsed, SourceLocation ellipsisLoc)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), EllipsisLoc(ellipsisLoc), NumArgs(numArgs),
-        SyntaxUsed(syntaxUsed), Invalid(false), UsedAsTypeAttr(false),
-        IsAvailability(false), IsTypeTagForDatatype(false), IsProperty(false),
-        HasParsedType(false), HasProcessingCache(false) {
-    if (numArgs) memcpy(getArgsBuffer(), args, numArgs * sizeof(ArgsUnion));
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-
-  /// Constructor for availability attributes.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                IdentifierLoc *Parm, const AvailabilityChange &introduced,
-                const AvailabilityChange &deprecated,
-                const AvailabilityChange &obsoleted,
-                SourceLocation unavailable, 
-                const Expr *messageExpr,
-                Syntax syntaxUsed, SourceLocation strict,
-                const Expr *replacementExpr)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), NumArgs(1), SyntaxUsed(syntaxUsed), Invalid(false),
-        UsedAsTypeAttr(false), IsAvailability(true),
-        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(false),
-        HasProcessingCache(false), UnavailableLoc(unavailable),
-        MessageExpr(messageExpr) {
-    ArgsUnion PVal(Parm);
-    memcpy(getArgsBuffer(), &PVal, sizeof(ArgsUnion));
-    new (getAvailabilityData()) AvailabilityData(
-        introduced, deprecated, obsoleted, strict, replacementExpr);
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-
-  /// Constructor for objc_bridge_related attributes.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                IdentifierLoc *Parm1,
-                IdentifierLoc *Parm2,
-                IdentifierLoc *Parm3,
-                Syntax syntaxUsed)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), NumArgs(3), SyntaxUsed(syntaxUsed), Invalid(false),
-        UsedAsTypeAttr(false), IsAvailability(false),
-        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(false),
-        HasProcessingCache(false) {
-    ArgsUnion *Args = getArgsBuffer();
-    Args[0] = Parm1;
-    Args[1] = Parm2;
-    Args[2] = Parm3;
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-  
-  /// Constructor for type_tag_for_datatype attribute.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                IdentifierLoc *ArgKind, ParsedType matchingCType,
-                bool layoutCompatible, bool mustBeNull, Syntax syntaxUsed)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), NumArgs(1), SyntaxUsed(syntaxUsed), Invalid(false),
-        UsedAsTypeAttr(false), IsAvailability(false),
-        IsTypeTagForDatatype(true), IsProperty(false), HasParsedType(false),
-        HasProcessingCache(false) {
-    ArgsUnion PVal(ArgKind);
-    memcpy(getArgsBuffer(), &PVal, sizeof(ArgsUnion));
-    TypeTagForDatatypeData &ExtraData = getTypeTagForDatatypeDataSlot();
-    new (&ExtraData.MatchingCType) ParsedType(matchingCType);
-    ExtraData.LayoutCompatible = layoutCompatible;
-    ExtraData.MustBeNull = mustBeNull;
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-
-  /// Constructor for attributes with a single type argument.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                ParsedType typeArg, Syntax syntaxUsed)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), NumArgs(0), SyntaxUsed(syntaxUsed), Invalid(false),
-        UsedAsTypeAttr(false), IsAvailability(false),
-        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(true),
-        HasProcessingCache(false) {
-    new (&getTypeBuffer()) ParsedType(typeArg);
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-
-  /// Constructor for microsoft __declspec(property) attribute.
-  AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
-                IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                IdentifierInfo *getterId, IdentifierInfo *setterId,
-                Syntax syntaxUsed)
-      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
-        ScopeLoc(scopeLoc), NumArgs(0), SyntaxUsed(syntaxUsed),
-        Invalid(false), UsedAsTypeAttr(false), IsAvailability(false),
-        IsTypeTagForDatatype(false), IsProperty(true), HasParsedType(false),
-        HasProcessingCache(false) {
-    new (&getPropertyDataBuffer()) PropertyData(getterId, setterId);
-    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
-  }
-
-  /// Type tag information is stored immediately following the arguments, if
-  /// any, at the end of the object.  They are mutually exlusive with
-  /// availability slots.
-  TypeTagForDatatypeData &getTypeTagForDatatypeDataSlot() {
-    return *reinterpret_cast<TypeTagForDatatypeData*>(getArgsBuffer()+NumArgs);
-  }
-  const TypeTagForDatatypeData &getTypeTagForDatatypeDataSlot() const {
-    return *reinterpret_cast<const TypeTagForDatatypeData*>(getArgsBuffer()
-                                                            + NumArgs);
-  }
-
-  /// The type buffer immediately follows the object and are mutually exclusive
-  /// with arguments.
-  ParsedType &getTypeBuffer() {
-    return *reinterpret_cast<ParsedType *>(this + 1);
-  }
-  const ParsedType &getTypeBuffer() const {
-    return *reinterpret_cast<const ParsedType *>(this + 1);
-  }
-
-  /// The property data immediately follows the object is is mutually exclusive
-  /// with arguments.
-  PropertyData &getPropertyDataBuffer() {
-    assert(IsProperty);
-    return *reinterpret_cast<PropertyData*>(this + 1);
-  }
-  const PropertyData &getPropertyDataBuffer() const {
-    assert(IsProperty);
-    return *reinterpret_cast<const PropertyData*>(this + 1);
-  }
-
-  size_t allocated_size() const;
-
-public:
-  AttributeList(const AttributeList &) = delete;
-  AttributeList &operator=(const AttributeList &) = delete;
-  ~AttributeList() = delete;
-
-  void operator delete(void *) = delete;
-
-  enum Kind {           
-    #define PARSED_ATTR(NAME) AT_##NAME,
-    #include "clang/Sema/AttrParsedAttrList.inc"
-    #undef PARSED_ATTR
-    IgnoredAttribute,
-    UnknownAttribute
-  };
-
-  IdentifierInfo *getName() const { return AttrName; }
-  SourceLocation getLoc() const { return AttrRange.getBegin(); }
-  SourceRange getRange() const { return AttrRange; }
-  
-  bool hasScope() const { return ScopeName; }
-  IdentifierInfo *getScopeName() const { return ScopeName; }
-  SourceLocation getScopeLoc() const { return ScopeLoc; }
-  
-  bool hasParsedType() const { return HasParsedType; }
-
-  /// Is this the Microsoft __declspec(property) attribute?
-  bool isDeclspecPropertyAttribute() const  {
-    return IsProperty;
-  }
-
-  bool isAlignasAttribute() const {
-    // FIXME: Use a better mechanism to determine this.
-    return getKind() == AT_Aligned && isKeywordAttribute();
-  }
-
-  bool isDeclspecAttribute() const { return SyntaxUsed == AS_Declspec; }
-  bool isMicrosoftAttribute() const { return SyntaxUsed == AS_Microsoft; }
-
-  bool isCXX11Attribute() const {
-    return SyntaxUsed == AS_CXX11 || isAlignasAttribute();
-  }
-
-  bool isC2xAttribute() const {
-    return SyntaxUsed == AS_C2x;
-  }
-
-  bool isKeywordAttribute() const {
-    return SyntaxUsed == AS_Keyword || SyntaxUsed == AS_ContextSensitiveKeyword;
-  }
-
-  bool isContextSensitiveKeywordAttribute() const {
-    return SyntaxUsed == AS_ContextSensitiveKeyword;
-  }
-
-  bool isInvalid() const { return Invalid; }
-  void setInvalid(bool b = true) const { Invalid = b; }
-
-  bool hasProcessingCache() const { return HasProcessingCache; }
-
-  unsigned getProcessingCache() const {
-    assert(hasProcessingCache());
-    return ProcessingCache;
-  }
-
-  void setProcessingCache(unsigned value) const {
-    ProcessingCache = value;
-    HasProcessingCache = true;
-  }
-
-  bool isUsedAsTypeAttr() const { return UsedAsTypeAttr; }
-  void setUsedAsTypeAttr() { UsedAsTypeAttr = true; }
-
-  bool isPackExpansion() const { return EllipsisLoc.isValid(); }
-  SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
-
-  Kind getKind() const { return Kind(AttrKind); }
-  static Kind getKind(const IdentifierInfo *Name, const IdentifierInfo *Scope,
-                      Syntax SyntaxUsed);
-
-  AttributeList *getNext() const { return NextInPosition; }
-  void setNext(AttributeList *N) { NextInPosition = N; }
-
-  /// getNumArgs - Return the number of actual arguments to this attribute.
-  unsigned getNumArgs() const { return NumArgs; }
-
-  /// getArg - Return the specified argument.
-  ArgsUnion getArg(unsigned Arg) const {
-    assert(Arg < NumArgs && "Arg access out of range!");
-    return getArgsBuffer()[Arg];
-  }
-
-  bool isArgExpr(unsigned Arg) const {
-    return Arg < NumArgs && getArg(Arg).is<Expr*>();
-  }
-
-  Expr *getArgAsExpr(unsigned Arg) const {
-    return getArg(Arg).get<Expr*>();
-  }
-
-  bool isArgIdent(unsigned Arg) const {
-    return Arg < NumArgs && getArg(Arg).is<IdentifierLoc*>();
-  }
-
-  IdentifierLoc *getArgAsIdent(unsigned Arg) const {
-    return getArg(Arg).get<IdentifierLoc*>();
-  }
-
-  const AvailabilityChange &getAvailabilityIntroduced() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return getAvailabilityData()->Changes[IntroducedSlot];
-  }
-
-  const AvailabilityChange &getAvailabilityDeprecated() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return getAvailabilityData()->Changes[DeprecatedSlot];
-  }
-
-  const AvailabilityChange &getAvailabilityObsoleted() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return getAvailabilityData()->Changes[ObsoletedSlot];
-  }
-
-  SourceLocation getStrictLoc() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return getAvailabilityData()->StrictLoc;
-  }
-
-  SourceLocation getUnavailableLoc() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return UnavailableLoc;
-  }
-  
-  const Expr * getMessageExpr() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return MessageExpr;
-  }
-
-  const Expr *getReplacementExpr() const {
-    assert(getKind() == AT_Availability && "Not an availability attribute");
-    return getAvailabilityData()->Replacement;
-  }
-
-  const ParsedType &getMatchingCType() const {
-    assert(getKind() == AT_TypeTagForDatatype &&
-           "Not a type_tag_for_datatype attribute");
-    return *getTypeTagForDatatypeDataSlot().MatchingCType;
-  }
-
-  bool getLayoutCompatible() const {
-    assert(getKind() == AT_TypeTagForDatatype &&
-           "Not a type_tag_for_datatype attribute");
-    return getTypeTagForDatatypeDataSlot().LayoutCompatible;
-  }
-
-  bool getMustBeNull() const {
-    assert(getKind() == AT_TypeTagForDatatype &&
-           "Not a type_tag_for_datatype attribute");
-    return getTypeTagForDatatypeDataSlot().MustBeNull;
-  }
-
-  const ParsedType &getTypeArg() const {
-    assert(HasParsedType && "Not a type attribute");
-    return getTypeBuffer();
-  }
-
-  const PropertyData &getPropertyData() const {
-    assert(isDeclspecPropertyAttribute() && "Not a __delcspec(property) attribute");
-    return getPropertyDataBuffer();
-  }
-
-  /// \brief Get an index into the attribute spelling list
-  /// defined in Attr.td. This index is used by an attribute
-  /// to pretty print itself.
-  unsigned getAttributeSpellingListIndex() const;
-
-  bool isTargetSpecificAttr() const;
-  bool isTypeAttr() const;
-  bool isStmtAttr() const;
-
-  bool hasCustomParsing() const;
-  unsigned getMinArgs() const;
-  unsigned getMaxArgs() const;
-  bool hasVariadicArg() const;
-  bool diagnoseAppertainsTo(class Sema &S, const Decl *D) const;
-  bool appliesToDecl(const Decl *D, attr::SubjectMatchRule MatchRule) const;
-  void getMatchRules(const LangOptions &LangOpts,
-                     SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>>
-                         &MatchRules) const;
-  bool diagnoseLangOpts(class Sema &S) const;
-  bool existsInTarget(const TargetInfo &Target) const;
-  bool isKnownToGCC() const;
-  bool isSupportedByPragmaAttribute() const;
-
-  /// \brief If the parsed attribute has a semantic equivalent, and it would
-  /// have a semantic Spelling enumeration (due to having semantically-distinct
-  /// spelling variations), return the value of that semantic spelling. If the
-  /// parsed attribute does not have a semantic equivalent, or would not have
-  /// a Spelling enumeration, the value UINT_MAX is returned.
-  unsigned getSemanticSpelling() const;
-};
-
-/// A factory, from which one makes pools, from which one creates
-/// individual attributes which are deallocated with the pool.
-///
-/// Note that it's tolerably cheap to create and destroy one of
-/// these as long as you don't actually allocate anything in it.
-class AttributeFactory {
-public:
-  enum {
-    /// The required allocation size of an availability attribute,
-    /// which we want to ensure is a multiple of sizeof(void*).
-    AvailabilityAllocSize =
-      sizeof(AttributeList)
-      + ((sizeof(AvailabilityData) + sizeof(void*) + sizeof(ArgsUnion) - 1)
-         / sizeof(void*) * sizeof(void*)),
-    TypeTagForDatatypeAllocSize =
-      sizeof(AttributeList)
-      + (sizeof(AttributeList::TypeTagForDatatypeData) + sizeof(void *) +
-         sizeof(ArgsUnion) - 1)
-        / sizeof(void*) * sizeof(void*),
-    PropertyAllocSize =
-      sizeof(AttributeList)
-      + (sizeof(AttributeList::PropertyData) + sizeof(void *) - 1)
-        / sizeof(void*) * sizeof(void*)
-  };
-
-private:
-  enum {
-    /// The number of free lists we want to be sure to support
-    /// inline.  This is just enough that availability attributes
-    /// don't surpass it.  It's actually very unlikely we'll see an
-    /// attribute that needs more than that; on x86-64 you'd need 10
-    /// expression arguments, and on i386 you'd need 19.
-    InlineFreeListsCapacity =
-      1 + (AvailabilityAllocSize - sizeof(AttributeList)) / sizeof(void*)
-  };
-
-  llvm::BumpPtrAllocator Alloc;
-
-  /// Free lists.  The index is determined by the following formula:
-  ///   (size - sizeof(AttributeList)) / sizeof(void*)
-  SmallVector<AttributeList*, InlineFreeListsCapacity> FreeLists;
-
-  // The following are the private interface used by AttributePool.
-  friend class AttributePool;
-
-  /// Allocate an attribute of the given size.
-  void *allocate(size_t size);
-
-  /// Reclaim all the attributes in the given pool chain, which is
-  /// non-empty.  Note that the current implementation is safe
-  /// against reclaiming things which were not actually allocated
-  /// with the allocator, although of course it's important to make
-  /// sure that their allocator lives at least as long as this one.
-  void reclaimPool(AttributeList *head);
-
-public:
-  AttributeFactory();
-  ~AttributeFactory();
-};
-
-class AttributePool {
-  AttributeFactory &Factory;
-  AttributeList *Head = nullptr;
-
-  void *allocate(size_t size) {
-    return Factory.allocate(size);
-  }
-
-  AttributeList *add(AttributeList *attr) {
-    // We don't care about the order of the pool.
-    attr->NextInPool = Head;
-    Head = attr;
-    return attr;
-  }
-
-  void takePool(AttributeList *pool);
-
-public:
-  /// Create a new pool for a factory.
-  AttributePool(AttributeFactory &factory) : Factory(factory) {}
-
-  AttributePool(const AttributePool &) = delete;
-
-  ~AttributePool() {
-    if (Head) Factory.reclaimPool(Head);
-  }
-
-  /// Move the given pool's allocations to this pool.
-  AttributePool(AttributePool &&pool) : Factory(pool.Factory), Head(pool.Head) {
-    pool.Head = nullptr;
-  }
-
-  AttributeFactory &getFactory() const { return Factory; }
-
-  void clear() {
-    if (Head) {
-      Factory.reclaimPool(Head);
-      Head = nullptr;
-    }
-  }
-
-  /// Take the given pool's allocations and add them to this pool.
-  void takeAllFrom(AttributePool &pool) {
-    if (pool.Head) {
-      takePool(pool.Head);
-      pool.Head = nullptr;
-    }
-  }
-
-  AttributeList *create(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        ArgsUnion *args, unsigned numArgs,
-                        AttributeList::Syntax syntax,
-                        SourceLocation ellipsisLoc = SourceLocation()) {
-    void *memory = allocate(sizeof(AttributeList)
-                            + numArgs * sizeof(ArgsUnion));
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          args, numArgs, syntax,
-                                          ellipsisLoc));
-  }
-
-  AttributeList *create(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        IdentifierLoc *Param,
-                        const AvailabilityChange &introduced,
-                        const AvailabilityChange &deprecated,
-                        const AvailabilityChange &obsoleted,
-                        SourceLocation unavailable,
-                        const Expr *MessageExpr,
-                        AttributeList::Syntax syntax,
-                        SourceLocation strict, const Expr *ReplacementExpr) {
-    void *memory = allocate(AttributeFactory::AvailabilityAllocSize);
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          Param, introduced, deprecated,
-                                          obsoleted, unavailable, MessageExpr,
-                                          syntax, strict, ReplacementExpr));
-  }
-
-  AttributeList *create(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        IdentifierLoc *Param1,
-                        IdentifierLoc *Param2,
-                        IdentifierLoc *Param3,
-                        AttributeList::Syntax syntax) {
-    size_t size = sizeof(AttributeList) + 3 * sizeof(ArgsUnion);
-    void *memory = allocate(size);
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          Param1, Param2, Param3,
-                                          syntax));
-  }
-
-  AttributeList *createTypeTagForDatatype(
-                    IdentifierInfo *attrName, SourceRange attrRange,
-                    IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                    IdentifierLoc *argumentKind, ParsedType matchingCType,
-                    bool layoutCompatible, bool mustBeNull,
-                    AttributeList::Syntax syntax) {
-    void *memory = allocate(AttributeFactory::TypeTagForDatatypeAllocSize);
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          argumentKind, matchingCType,
-                                          layoutCompatible, mustBeNull,
-                                          syntax));
-  }
-
-  AttributeList *createTypeAttribute(
-                    IdentifierInfo *attrName, SourceRange attrRange,
-                    IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                    ParsedType typeArg, AttributeList::Syntax syntaxUsed) {
-    void *memory = allocate(sizeof(AttributeList) + sizeof(void *));
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          typeArg, syntaxUsed));
-  }
-
-  AttributeList *createPropertyAttribute(
-                    IdentifierInfo *attrName, SourceRange attrRange,
-                    IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                    IdentifierInfo *getterId, IdentifierInfo *setterId,
-                    AttributeList::Syntax syntaxUsed) {
-    void *memory = allocate(AttributeFactory::PropertyAllocSize);
-    return add(new (memory) AttributeList(attrName, attrRange,
-                                          scopeName, scopeLoc,
-                                          getterId, setterId,
-                                          syntaxUsed));
-  }
-};
-
-/// ParsedAttributes - A collection of parsed attributes.  Currently
-/// we don't differentiate between the various attribute syntaxes,
-/// which is basically silly.
-///
-/// Right now this is a very lightweight container, but the expectation
-/// is that this will become significantly more serious.
-class ParsedAttributes {
-public:
-  ParsedAttributes(AttributeFactory &factory) : pool(factory) {}
-  ParsedAttributes(const ParsedAttributes &) = delete;
-
-  AttributePool &getPool() const { return pool; }
-
-  bool empty() const { return list == nullptr; }
-
-  void add(AttributeList *newAttr) {
-    assert(newAttr);
-    assert(newAttr->getNext() == nullptr);
-    newAttr->setNext(list);
-    list = newAttr;
-  }
-
-  void addAll(AttributeList *newList) {
-    if (!newList) return;
-
-    AttributeList *lastInNewList = newList;
-    while (AttributeList *next = lastInNewList->getNext())
-      lastInNewList = next;
-
-    lastInNewList->setNext(list);
-    list = newList;
-  }
-
-  void addAllAtEnd(AttributeList *newList) {
-    if (!list) {
-      list = newList;
-      return;
-    }
-
-    AttributeList *lastInList = list;
-    while (AttributeList *next = lastInList->getNext())
-      lastInList = next;
-
-    lastInList->setNext(newList);
-  }
-
-  void set(AttributeList *newList) {
-    list = newList;
-  }
-
-  void takeAllFrom(ParsedAttributes &attrs) {
-    addAll(attrs.list);
-    attrs.list = nullptr;
-    pool.takeAllFrom(attrs.pool);
-  }
-
-  void clear() { list = nullptr; pool.clear(); }
-  AttributeList *getList() const { return list; }
-
-  void clearListOnly() { list = nullptr; }
-
-  /// Returns a reference to the attribute list.  Try not to introduce
-  /// dependencies on this method, it may not be long-lived.
-  AttributeList *&getListRef() { return list; }
-
-  /// Add attribute with expression arguments.
-  AttributeList *addNew(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        ArgsUnion *args, unsigned numArgs,
-                        AttributeList::Syntax syntax,
-                        SourceLocation ellipsisLoc = SourceLocation()) {
-    AttributeList *attr =
-      pool.create(attrName, attrRange, scopeName, scopeLoc, args, numArgs,
-                  syntax, ellipsisLoc);
-    add(attr);
-    return attr;
-  }
-
-  /// Add availability attribute.
-  AttributeList *addNew(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        IdentifierLoc *Param,
-                        const AvailabilityChange &introduced,
-                        const AvailabilityChange &deprecated,
-                        const AvailabilityChange &obsoleted,
-                        SourceLocation unavailable,
-                        const Expr *MessageExpr,
-                        AttributeList::Syntax syntax,
-                        SourceLocation strict, const Expr *ReplacementExpr) {
-    AttributeList *attr =
-      pool.create(attrName, attrRange, scopeName, scopeLoc, Param, introduced,
-                  deprecated, obsoleted, unavailable, MessageExpr, syntax,
-                  strict, ReplacementExpr);
-    add(attr);
-    return attr;
-  }
-
-  /// Add objc_bridge_related attribute.
-  AttributeList *addNew(IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        IdentifierLoc *Param1,
-                        IdentifierLoc *Param2,
-                        IdentifierLoc *Param3,
-                        AttributeList::Syntax syntax) {
-    AttributeList *attr =
-      pool.create(attrName, attrRange, scopeName, scopeLoc,
-                  Param1, Param2, Param3, syntax);
-    add(attr);
-    return attr;
-  }
-
-  /// Add type_tag_for_datatype attribute.
-  AttributeList *addNewTypeTagForDatatype(
-                        IdentifierInfo *attrName, SourceRange attrRange,
-                        IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                        IdentifierLoc *argumentKind, ParsedType matchingCType,
-                        bool layoutCompatible, bool mustBeNull,
-                        AttributeList::Syntax syntax) {
-    AttributeList *attr =
-      pool.createTypeTagForDatatype(attrName, attrRange,
-                                    scopeName, scopeLoc,
-                                    argumentKind, matchingCType,
-                                    layoutCompatible, mustBeNull, syntax);
-    add(attr);
-    return attr;
-  }
-
-  /// Add an attribute with a single type argument.
-  AttributeList *
-  addNewTypeAttr(IdentifierInfo *attrName, SourceRange attrRange,
-                 IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                 ParsedType typeArg, AttributeList::Syntax syntaxUsed) {
-    AttributeList *attr =
-        pool.createTypeAttribute(attrName, attrRange, scopeName, scopeLoc,
-                                 typeArg, syntaxUsed);
-    add(attr);
-    return attr;
-  }
-
-  /// Add microsoft __delspec(property) attribute.
-  AttributeList *
-  addNewPropertyAttr(IdentifierInfo *attrName, SourceRange attrRange,
-                 IdentifierInfo *scopeName, SourceLocation scopeLoc,
-                 IdentifierInfo *getterId, IdentifierInfo *setterId,
-                 AttributeList::Syntax syntaxUsed) {
-    AttributeList *attr =
-        pool.createPropertyAttribute(attrName, attrRange, scopeName, scopeLoc,
-                                     getterId, setterId, syntaxUsed);
-    add(attr);
-    return attr;
-  }
-
-private:
-  mutable AttributePool pool;
-  AttributeList *list = nullptr;
-};
-
-/// These constants match the enumerated choices of
-/// err_attribute_argument_n_type and err_attribute_argument_type.
-enum AttributeArgumentNType {
-  AANT_ArgumentIntOrBool,
-  AANT_ArgumentIntegerConstant,
-  AANT_ArgumentString,
-  AANT_ArgumentIdentifier
-};
-
-/// These constants match the enumerated choices of
-/// warn_attribute_wrong_decl_type and err_attribute_wrong_decl_type.
-enum AttributeDeclKind {
-  ExpectedFunction,
-  ExpectedUnion,
-  ExpectedVariableOrFunction,
-  ExpectedFunctionOrMethod,
-  ExpectedFunctionMethodOrBlock,
-  ExpectedFunctionMethodOrParameter,
-  ExpectedVariable,
-  ExpectedVariableOrField,
-  ExpectedVariableFieldOrTag,
-  ExpectedTypeOrNamespace,
-  ExpectedFunctionVariableOrClass,
-  ExpectedKernelFunction,
-  ExpectedFunctionWithProtoType,
-  ExpectedForMaybeUnused,
-};
-
-} // namespace clang
-
-#endif // LLVM_CLANG_SEMA_ATTRIBUTELIST_H
diff --git a/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h b/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
index 48e8129..ede3ddf 100644
--- a/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
+++ b/linux-x64/clang/include/clang/Sema/CodeCompleteConsumer.h
@@ -45,104 +45,106 @@
 class NamedDecl;
 class NestedNameSpecifier;
 class Preprocessor;
+class RawComment;
 class Sema;
+class UsingShadowDecl;
 
-/// \brief Default priority values for code-completion results based
+/// Default priority values for code-completion results based
 /// on their kind.
 enum {
-  /// \brief Priority for the next initialization in a constructor initializer
+  /// Priority for the next initialization in a constructor initializer
   /// list.
   CCP_NextInitializer = 7,
 
-  /// \brief Priority for an enumeration constant inside a switch whose
+  /// Priority for an enumeration constant inside a switch whose
   /// condition is of the enumeration type.
   CCP_EnumInCase = 7,
 
-  /// \brief Priority for a send-to-super completion.
+  /// Priority for a send-to-super completion.
   CCP_SuperCompletion = 20,
 
-  /// \brief Priority for a declaration that is in the local scope.
+  /// Priority for a declaration that is in the local scope.
   CCP_LocalDeclaration = 34,
 
-  /// \brief Priority for a member declaration found from the current
+  /// Priority for a member declaration found from the current
   /// method or member function.
   CCP_MemberDeclaration = 35,
 
-  /// \brief Priority for a language keyword (that isn't any of the other
+  /// Priority for a language keyword (that isn't any of the other
   /// categories).
   CCP_Keyword = 40,
 
-  /// \brief Priority for a code pattern.
+  /// Priority for a code pattern.
   CCP_CodePattern = 40,
 
-  /// \brief Priority for a non-type declaration.
+  /// Priority for a non-type declaration.
   CCP_Declaration = 50,
 
-  /// \brief Priority for a type.
+  /// Priority for a type.
   CCP_Type = CCP_Declaration,
 
-  /// \brief Priority for a constant value (e.g., enumerator).
+  /// Priority for a constant value (e.g., enumerator).
   CCP_Constant = 65,
 
-  /// \brief Priority for a preprocessor macro.
+  /// Priority for a preprocessor macro.
   CCP_Macro = 70,
 
-  /// \brief Priority for a nested-name-specifier.
+  /// Priority for a nested-name-specifier.
   CCP_NestedNameSpecifier = 75,
 
-  /// \brief Priority for a result that isn't likely to be what the user wants,
+  /// Priority for a result that isn't likely to be what the user wants,
   /// but is included for completeness.
   CCP_Unlikely = 80,
 
-  /// \brief Priority for the Objective-C "_cmd" implicit parameter.
+  /// Priority for the Objective-C "_cmd" implicit parameter.
   CCP_ObjC_cmd = CCP_Unlikely
 };
 
-/// \brief Priority value deltas that are added to code-completion results
+/// Priority value deltas that are added to code-completion results
 /// based on the context of the result.
 enum {
-  /// \brief The result is in a base class.
+  /// The result is in a base class.
   CCD_InBaseClass = 2,
 
-  /// \brief The result is a C++ non-static member function whose qualifiers
+  /// The result is a C++ non-static member function whose qualifiers
   /// exactly match the object type on which the member function can be called.
   CCD_ObjectQualifierMatch = -1,
 
-  /// \brief The selector of the given message exactly matches the selector
+  /// The selector of the given message exactly matches the selector
   /// of the current method, which might imply that some kind of delegation
   /// is occurring.
   CCD_SelectorMatch = -3,
 
-  /// \brief Adjustment to the "bool" type in Objective-C, where the typedef
+  /// Adjustment to the "bool" type in Objective-C, where the typedef
   /// "BOOL" is preferred.
   CCD_bool_in_ObjC = 1,
 
-  /// \brief Adjustment for KVC code pattern priorities when it doesn't look
+  /// Adjustment for KVC code pattern priorities when it doesn't look
   /// like the
   CCD_ProbablyNotObjCCollection = 15,
 
-  /// \brief An Objective-C method being used as a property.
+  /// An Objective-C method being used as a property.
   CCD_MethodAsProperty = 2,
 
-  /// \brief An Objective-C block property completed as a setter with a
+  /// An Objective-C block property completed as a setter with a
   /// block placeholder.
   CCD_BlockPropertySetter = 3
 };
 
-/// \brief Priority value factors by which we will divide or multiply the
+/// Priority value factors by which we will divide or multiply the
 /// priority of a code-completion result.
 enum {
-  /// \brief Divide by this factor when a code-completion result's type exactly
+  /// Divide by this factor when a code-completion result's type exactly
   /// matches the type we expect.
   CCF_ExactTypeMatch = 4,
 
-  /// \brief Divide by this factor when a code-completion result's type is
+  /// Divide by this factor when a code-completion result's type is
   /// similar to the type we expect (e.g., both arithmetic types, both
   /// Objective-C object pointer types).
   CCF_SimilarTypeMatch = 2
 };
 
-/// \brief A simplified classification of types used when determining
+/// A simplified classification of types used when determining
 /// "similar" types for code completion.
 enum SimplifiedTypeClass {
   STC_Arithmetic,
@@ -156,14 +158,14 @@
   STC_Void
 };
 
-/// \brief Determine the simplified type class of the given canonical type.
+/// Determine the simplified type class of the given canonical type.
 SimplifiedTypeClass getSimplifiedTypeClass(CanQualType T);
 
-/// \brief Determine the type that this declaration will have if it is used
+/// Determine the type that this declaration will have if it is used
 /// as a type or in an expression.
 QualType getDeclUsageType(ASTContext &C, const NamedDecl *ND);
 
-/// \brief Determine the priority to be given to a macro code completion result
+/// Determine the priority to be given to a macro code completion result
 /// with the given name.
 ///
 /// \param MacroName The name of the macro.
@@ -176,53 +178,53 @@
                                const LangOptions &LangOpts,
                                bool PreferredTypeIsPointer = false);
 
-/// \brief Determine the libclang cursor kind associated with the given
+/// Determine the libclang cursor kind associated with the given
 /// declaration.
 CXCursorKind getCursorKindForDecl(const Decl *D);
 
-/// \brief The context in which code completion occurred, so that the
+/// The context in which code completion occurred, so that the
 /// code-completion consumer can process the results accordingly.
 class CodeCompletionContext {
 public:
   enum Kind {
-    /// \brief An unspecified code-completion context.
+    /// An unspecified code-completion context.
     CCC_Other,
 
-    /// \brief An unspecified code-completion context where we should also add
+    /// An unspecified code-completion context where we should also add
     /// macro completions.
     CCC_OtherWithMacros,
 
-    /// \brief Code completion occurred within a "top-level" completion context,
+    /// Code completion occurred within a "top-level" completion context,
     /// e.g., at namespace or global scope.
     CCC_TopLevel,
 
-    /// \brief Code completion occurred within an Objective-C interface,
+    /// Code completion occurred within an Objective-C interface,
     /// protocol, or category interface.
     CCC_ObjCInterface,
 
-    /// \brief Code completion occurred within an Objective-C implementation
+    /// Code completion occurred within an Objective-C implementation
     /// or category implementation.
     CCC_ObjCImplementation,
 
-    /// \brief Code completion occurred within the instance variable list of
+    /// Code completion occurred within the instance variable list of
     /// an Objective-C interface, implementation, or category implementation.
     CCC_ObjCIvarList,
 
-    /// \brief Code completion occurred within a class, struct, or union.
+    /// Code completion occurred within a class, struct, or union.
     CCC_ClassStructUnion,
 
-    /// \brief Code completion occurred where a statement (or declaration) is
+    /// Code completion occurred where a statement (or declaration) is
     /// expected in a function, method, or block.
     CCC_Statement,
 
-    /// \brief Code completion occurred where an expression is expected.
+    /// Code completion occurred where an expression is expected.
     CCC_Expression,
 
-    /// \brief Code completion occurred where an Objective-C message receiver
+    /// Code completion occurred where an Objective-C message receiver
     /// is expected.
     CCC_ObjCMessageReceiver,
 
-    /// \brief Code completion occurred on the right-hand side of a member
+    /// Code completion occurred on the right-hand side of a member
     /// access expression using the dot operator.
     ///
     /// The results of this completion are the members of the type being
@@ -230,7 +232,7 @@
     /// \c CodeCompletionContext::getType().
     CCC_DotMemberAccess,
 
-    /// \brief Code completion occurred on the right-hand side of a member
+    /// Code completion occurred on the right-hand side of a member
     /// access expression using the arrow operator.
     ///
     /// The results of this completion are the members of the type being
@@ -238,7 +240,7 @@
     /// \c CodeCompletionContext::getType().
     CCC_ArrowMemberAccess,
 
-    /// \brief Code completion occurred on the right-hand side of an Objective-C
+    /// Code completion occurred on the right-hand side of an Objective-C
     /// property access expression.
     ///
     /// The results of this completion are the members of the type being
@@ -246,81 +248,81 @@
     /// \c CodeCompletionContext::getType().
     CCC_ObjCPropertyAccess,
 
-    /// \brief Code completion occurred after the "enum" keyword, to indicate
+    /// Code completion occurred after the "enum" keyword, to indicate
     /// an enumeration name.
     CCC_EnumTag,
 
-    /// \brief Code completion occurred after the "union" keyword, to indicate
+    /// Code completion occurred after the "union" keyword, to indicate
     /// a union name.
     CCC_UnionTag,
 
-    /// \brief Code completion occurred after the "struct" or "class" keyword,
+    /// Code completion occurred after the "struct" or "class" keyword,
     /// to indicate a struct or class name.
     CCC_ClassOrStructTag,
 
-    /// \brief Code completion occurred where a protocol name is expected.
+    /// Code completion occurred where a protocol name is expected.
     CCC_ObjCProtocolName,
 
-    /// \brief Code completion occurred where a namespace or namespace alias
+    /// Code completion occurred where a namespace or namespace alias
     /// is expected.
     CCC_Namespace,
 
-    /// \brief Code completion occurred where a type name is expected.
+    /// Code completion occurred where a type name is expected.
     CCC_Type,
 
-    /// \brief Code completion occurred where a new name is expected.
+    /// Code completion occurred where a new name is expected.
     CCC_Name,
 
-    /// \brief Code completion occurred where a new name is expected and a
+    /// Code completion occurred where a new name is expected and a
     /// qualified name is permissible.
     CCC_PotentiallyQualifiedName,
 
-    /// \brief Code completion occurred where an macro is being defined.
+    /// Code completion occurred where an macro is being defined.
     CCC_MacroName,
 
-    /// \brief Code completion occurred where a macro name is expected
+    /// Code completion occurred where a macro name is expected
     /// (without any arguments, in the case of a function-like macro).
     CCC_MacroNameUse,
 
-    /// \brief Code completion occurred within a preprocessor expression.
+    /// Code completion occurred within a preprocessor expression.
     CCC_PreprocessorExpression,
 
-    /// \brief Code completion occurred where a preprocessor directive is
+    /// Code completion occurred where a preprocessor directive is
     /// expected.
     CCC_PreprocessorDirective,
 
-    /// \brief Code completion occurred in a context where natural language is
+    /// Code completion occurred in a context where natural language is
     /// expected, e.g., a comment or string literal.
     ///
     /// This context usually implies that no completions should be added,
     /// unless they come from an appropriate natural-language dictionary.
     CCC_NaturalLanguage,
 
-    /// \brief Code completion for a selector, as in an \@selector expression.
+    /// Code completion for a selector, as in an \@selector expression.
     CCC_SelectorName,
 
-    /// \brief Code completion within a type-qualifier list.
+    /// Code completion within a type-qualifier list.
     CCC_TypeQualifiers,
 
-    /// \brief Code completion in a parenthesized expression, which means that
+    /// Code completion in a parenthesized expression, which means that
     /// we may also have types here in C and Objective-C (as well as in C++).
     CCC_ParenthesizedExpression,
 
-    /// \brief Code completion where an Objective-C instance message is
+    /// Code completion where an Objective-C instance message is
     /// expected.
     CCC_ObjCInstanceMessage,
 
-    /// \brief Code completion where an Objective-C class message is expected.
+    /// Code completion where an Objective-C class message is expected.
     CCC_ObjCClassMessage,
 
-    /// \brief Code completion where the name of an Objective-C class is
+    /// Code completion where the name of an Objective-C class is
     /// expected.
     CCC_ObjCInterfaceName,
 
-    /// \brief Code completion where an Objective-C category name is expected.
+    /// Code completion where an Objective-C category name is expected.
     CCC_ObjCCategoryName,
 
-    /// \brief An unknown context, in which we are recovering from a parsing
+    /// An unknown context, in which we are recovering from a parsing
     /// error and don't know which completions we should give.
     CCC_Recovery
   };
@@ -330,29 +332,29 @@
 private:
   Kind CCKind;
 
-  /// \brief The type that would prefer to see at this point (e.g., the type
+  /// The type that would prefer to see at this point (e.g., the type
   /// of an initializer or function parameter).
   QualType PreferredType;
 
-  /// \brief The type of the base object in a member access expression.
+  /// The type of the base object in a member access expression.
   QualType BaseType;
 
-  /// \brief The identifiers for Objective-C selector parts.
+  /// The identifiers for Objective-C selector parts.
   ArrayRef<IdentifierInfo *> SelIdents;
 
-  /// \brief The scope specifier that comes before the completion token e.g.
+  /// The scope specifier that comes before the completion token e.g.
   /// "a::b::"
   llvm::Optional<CXXScopeSpec> ScopeSpecifier;
 
-  /// \brief A set of declaration contexts visited by Sema when doing lookup for
+  /// A set of declaration contexts visited by Sema when doing lookup for
   /// code completion.
   VisitedContextSet VisitedContexts;
 
 public:
-  /// \brief Construct a new code-completion context of the given kind.
+  /// Construct a new code-completion context of the given kind.
   CodeCompletionContext(Kind CCKind) : CCKind(CCKind), SelIdents(None) {}
 
-  /// \brief Construct a new code-completion context of the given kind.
+  /// Construct a new code-completion context of the given kind.
   CodeCompletionContext(Kind CCKind, QualType T,
                         ArrayRef<IdentifierInfo *> SelIdents = None)
       : CCKind(CCKind), SelIdents(SelIdents) {
@@ -364,38 +366,38 @@
       PreferredType = T;
   }
 
-  /// \brief Retrieve the kind of code-completion context.
+  /// Retrieve the kind of code-completion context.
   Kind getKind() const { return CCKind; }
 
-  /// \brief Retrieve the type that this expression would prefer to have, e.g.,
+  /// Retrieve the type that this expression would prefer to have, e.g.,
   /// if the expression is a variable initializer or a function argument, the
   /// type of the corresponding variable or function parameter.
   QualType getPreferredType() const { return PreferredType; }
 
-  /// \brief Retrieve the type of the base object in a member-access
+  /// Retrieve the type of the base object in a member-access
   /// expression.
   QualType getBaseType() const { return BaseType; }
 
-  /// \brief Retrieve the Objective-C selector identifiers.
+  /// Retrieve the Objective-C selector identifiers.
   ArrayRef<IdentifierInfo *> getSelIdents() const { return SelIdents; }
 
-  /// \brief Determines whether we want C++ constructors as results within this
+  /// Determines whether we want C++ constructors as results within this
   /// context.
   bool wantConstructorResults() const;
 
-  /// \brief Sets the scope specifier that comes before the completion token.
+  /// Sets the scope specifier that comes before the completion token.
   /// This is expected to be set in code completions on qualfied specifiers
   /// (e.g. "a::b::").
   void setCXXScopeSpecifier(CXXScopeSpec SS) {
     this->ScopeSpecifier = std::move(SS);
   }
 
-  /// \brief Adds a visited context.
+  /// Adds a visited context.
   void addVisitedContext(DeclContext *Ctx) {
     VisitedContexts.insert(Ctx);
   }
 
-  /// \brief Retrieves all visited contexts.
+  /// Retrieves all visited contexts.
   const VisitedContextSet &getVisitedContexts() const {
     return VisitedContexts;
   }
@@ -407,10 +409,10 @@
   }
 };
 
-/// \brief Get string representation of \p Kind, useful for for debugging.
+/// Get string representation of \p Kind, useful for for debugging.
 llvm::StringRef getCompletionKindString(CodeCompletionContext::Kind Kind);
 
-/// \brief A "string" used to describe how code completion can
+/// A "string" used to describe how code completion can
 /// be performed for an entity.
 ///
 /// A code completion string typically shows how a particular entity can be
@@ -419,97 +421,97 @@
 /// arguments, etc.
 class CodeCompletionString {
 public:
-  /// \brief The different kinds of "chunks" that can occur within a code
+  /// The different kinds of "chunks" that can occur within a code
   /// completion string.
   enum ChunkKind {
-    /// \brief The piece of text that the user is expected to type to
+    /// The piece of text that the user is expected to type to
     /// match the code-completion string, typically a keyword or the name of a
     /// declarator or macro.
     CK_TypedText,
 
-    /// \brief A piece of text that should be placed in the buffer, e.g.,
+    /// A piece of text that should be placed in the buffer, e.g.,
     /// parentheses or a comma in a function call.
     CK_Text,
 
-    /// \brief A code completion string that is entirely optional. For example,
+    /// A code completion string that is entirely optional. For example,
     /// an optional code completion string that describes the default arguments
     /// in a function call.
     CK_Optional,
 
-    /// \brief A string that acts as a placeholder for, e.g., a function
+    /// A string that acts as a placeholder for, e.g., a function
     /// call argument.
     CK_Placeholder,
 
-    /// \brief A piece of text that describes something about the result but
+    /// A piece of text that describes something about the result but
     /// should not be inserted into the buffer.
     CK_Informative,
-    /// \brief A piece of text that describes the type of an entity or, for
+    /// A piece of text that describes the type of an entity or, for
     /// functions and methods, the return type.
     CK_ResultType,
 
-    /// \brief A piece of text that describes the parameter that corresponds
+    /// A piece of text that describes the parameter that corresponds
     /// to the code-completion location within a function call, message send,
     /// macro invocation, etc.
     CK_CurrentParameter,
 
-    /// \brief A left parenthesis ('(').
+    /// A left parenthesis ('(').
     CK_LeftParen,
 
-    /// \brief A right parenthesis (')').
+    /// A right parenthesis (')').
     CK_RightParen,
 
-    /// \brief A left bracket ('[').
+    /// A left bracket ('[').
     CK_LeftBracket,
 
-    /// \brief A right bracket (']').
+    /// A right bracket (']').
     CK_RightBracket,
 
-    /// \brief A left brace ('{').
+    /// A left brace ('{').
     CK_LeftBrace,
 
-    /// \brief A right brace ('}').
+    /// A right brace ('}').
     CK_RightBrace,
 
-    /// \brief A left angle bracket ('<').
+    /// A left angle bracket ('<').
     CK_LeftAngle,
 
-    /// \brief A right angle bracket ('>').
+    /// A right angle bracket ('>').
     CK_RightAngle,
 
-    /// \brief A comma separator (',').
+    /// A comma separator (',').
     CK_Comma,
 
-    /// \brief A colon (':').
+    /// A colon (':').
     CK_Colon,
 
-    /// \brief A semicolon (';').
+    /// A semicolon (';').
     CK_SemiColon,
 
-    /// \brief An '=' sign.
+    /// An '=' sign.
     CK_Equal,
 
-    /// \brief Horizontal whitespace (' ').
+    /// Horizontal whitespace (' ').
     CK_HorizontalSpace,
 
-    /// \brief Vertical whitespace ('\\n' or '\\r\\n', depending on the
+    /// Vertical whitespace ('\\n' or '\\r\\n', depending on the
     /// platform).
     CK_VerticalSpace
   };
 
-  /// \brief One piece of the code completion string.
+  /// One piece of the code completion string.
   struct Chunk {
-    /// \brief The kind of data stored in this piece of the code completion
+    /// The kind of data stored in this piece of the code completion
     /// string.
     ChunkKind Kind = CK_Text;
 
     union {
-      /// \brief The text string associated with a CK_Text, CK_Placeholder,
+      /// The text string associated with a CK_Text, CK_Placeholder,
       /// CK_Informative, or CK_Comma chunk.
       /// The string is owned by the chunk and will be deallocated
       /// (with delete[]) when the chunk is destroyed.
       const char *Text;
 
-      /// \brief The code completion string associated with a CK_Optional chunk.
+      /// The code completion string associated with a CK_Optional chunk.
       /// The optional code completion string is owned by the chunk, and will
       /// be deallocated (with delete) when the chunk is destroyed.
       CodeCompletionString *Optional;
@@ -519,22 +521,22 @@
 
     explicit Chunk(ChunkKind Kind, const char *Text = "");
 
-    /// \brief Create a new text chunk.
+    /// Create a new text chunk.
     static Chunk CreateText(const char *Text);
 
-    /// \brief Create a new optional chunk.
+    /// Create a new optional chunk.
     static Chunk CreateOptional(CodeCompletionString *Optional);
 
-    /// \brief Create a new placeholder chunk.
+    /// Create a new placeholder chunk.
     static Chunk CreatePlaceholder(const char *Placeholder);
 
-    /// \brief Create a new informative chunk.
+    /// Create a new informative chunk.
     static Chunk CreateInformative(const char *Informative);
 
-    /// \brief Create a new result type chunk.
+    /// Create a new result type chunk.
     static Chunk CreateResultType(const char *ResultType);
 
-    /// \brief Create a new current-parameter chunk.
+    /// Create a new current-parameter chunk.
     static Chunk CreateCurrentParameter(const char *CurrentParameter);
   };
 
@@ -542,25 +544,25 @@
   friend class CodeCompletionBuilder;
   friend class CodeCompletionResult;
 
-  /// \brief The number of chunks stored in this string.
+  /// The number of chunks stored in this string.
   unsigned NumChunks : 16;
 
-  /// \brief The number of annotations for this code-completion result.
+  /// The number of annotations for this code-completion result.
   unsigned NumAnnotations : 16;
 
-  /// \brief The priority of this code-completion string.
+  /// The priority of this code-completion string.
   unsigned Priority : 16;
 
-  /// \brief The availability of this code-completion result.
+  /// The availability of this code-completion result.
   unsigned Availability : 2;
-  
-  /// \brief The name of the parent context.
+
+  /// The name of the parent context.
   StringRef ParentName;
 
-  /// \brief A brief documentation comment attached to the declaration of
+  /// A brief documentation comment attached to the declaration of
   /// entity being completed by this result.
   const char *BriefComment;
-  
+
   CodeCompletionString(const Chunk *Chunks, unsigned NumChunks,
                        unsigned Priority, CXAvailabilityKind Availability,
                        const char **Annotations, unsigned NumAnnotations,
@@ -584,22 +586,22 @@
     return begin()[I];
   }
 
-  /// \brief Returns the text in the TypedText chunk.
+  /// Returns the text in the TypedText chunk.
   const char *getTypedText() const;
 
-  /// \brief Retrieve the priority of this code completion result.
+  /// Retrieve the priority of this code completion result.
   unsigned getPriority() const { return Priority; }
 
-  /// \brief Retrieve the availability of this code completion result.
+  /// Retrieve the availability of this code completion result.
   unsigned getAvailability() const { return Availability; }
 
-  /// \brief Retrieve the number of annotations for this code completion result.
+  /// Retrieve the number of annotations for this code completion result.
   unsigned getAnnotationCount() const;
 
-  /// \brief Retrieve the annotation string specified by \c AnnotationNr.
+  /// Retrieve the annotation string specified by \c AnnotationNr.
   const char *getAnnotation(unsigned AnnotationNr) const;
-  
-  /// \brief Retrieve the name of the parent context.
+
+  /// Retrieve the name of the parent context.
   StringRef getParentContextName() const {
     return ParentName;
   }
@@ -607,20 +609,20 @@
   const char *getBriefComment() const {
     return BriefComment;
   }
-  
-  /// \brief Retrieve a string representation of the code completion string,
+
+  /// Retrieve a string representation of the code completion string,
   /// which is mainly useful for debugging.
   std::string getAsString() const;
 };
 
-/// \brief An allocator used specifically for the purpose of code completion.
+/// An allocator used specifically for the purpose of code completion.
 class CodeCompletionAllocator : public llvm::BumpPtrAllocator {
 public:
-  /// \brief Copy the given string into this allocator.
+  /// Copy the given string into this allocator.
   const char *CopyString(const Twine &String);
 };
 
-/// \brief Allocator for a cached set of global code completions.
+/// Allocator for a cached set of global code completions.
 class GlobalCodeCompletionAllocator : public CodeCompletionAllocator {};
 
 class CodeCompletionTUInfo {
@@ -656,7 +658,7 @@
 
 namespace clang {
 
-/// \brief A builder class used to construct new code-completion strings.
+/// A builder class used to construct new code-completion strings.
 class CodeCompletionBuilder {
 public:
   using Chunk = CodeCompletionString::Chunk;
@@ -668,8 +670,8 @@
   CXAvailabilityKind Availability = CXAvailability_Available;
   StringRef ParentName;
   const char *BriefComment = nullptr;
-  
-  /// \brief The chunks stored in this string.
+
+  /// The chunks stored in this string.
   SmallVector<Chunk, 4> Chunks;
 
   SmallVector<const char *, 2> Annotations;
@@ -685,56 +687,56 @@
       : Allocator(Allocator), CCTUInfo(CCTUInfo), Priority(Priority),
         Availability(Availability) {}
 
-  /// \brief Retrieve the allocator into which the code completion
+  /// Retrieve the allocator into which the code completion
   /// strings should be allocated.
   CodeCompletionAllocator &getAllocator() const { return Allocator; }
 
   CodeCompletionTUInfo &getCodeCompletionTUInfo() const { return CCTUInfo; }
 
-  /// \brief Take the resulting completion string.
+  /// Take the resulting completion string.
   ///
   /// This operation can only be performed once.
   CodeCompletionString *TakeString();
 
-  /// \brief Add a new typed-text chunk.
+  /// Add a new typed-text chunk.
   void AddTypedTextChunk(const char *Text);
 
-  /// \brief Add a new text chunk.
+  /// Add a new text chunk.
   void AddTextChunk(const char *Text);
 
-  /// \brief Add a new optional chunk.
+  /// Add a new optional chunk.
   void AddOptionalChunk(CodeCompletionString *Optional);
 
-  /// \brief Add a new placeholder chunk.
+  /// Add a new placeholder chunk.
   void AddPlaceholderChunk(const char *Placeholder);
 
-  /// \brief Add a new informative chunk.
+  /// Add a new informative chunk.
   void AddInformativeChunk(const char *Text);
 
-  /// \brief Add a new result-type chunk.
+  /// Add a new result-type chunk.
   void AddResultTypeChunk(const char *ResultType);
 
-  /// \brief Add a new current-parameter chunk.
+  /// Add a new current-parameter chunk.
   void AddCurrentParameterChunk(const char *CurrentParameter);
 
-  /// \brief Add a new chunk.
+  /// Add a new chunk.
   void AddChunk(CodeCompletionString::ChunkKind CK, const char *Text = "");
 
   void AddAnnotation(const char *A) { Annotations.push_back(A); }
 
-  /// \brief Add the parent context information to this code completion.
+  /// Add the parent context information to this code completion.
   void addParentContext(const DeclContext *DC);
 
   const char *getBriefComment() const { return BriefComment; }
   void addBriefComment(StringRef Comment);
-  
+
   StringRef getParentName() const { return ParentName; }
 };
 
-/// \brief Captures a result of code completion.
+/// Captures a result of code completion.
 class CodeCompletionResult {
 public:
-  /// \brief Describes the kind of result generated.
+  /// Describes the kind of result generated.
   enum ResultKind {
     /// Refers to a declaration.
     RK_Declaration = 0,
@@ -749,83 +751,121 @@
     RK_Pattern
   };
 
-  /// \brief When Kind == RK_Declaration or RK_Pattern, the declaration we are
+  /// When Kind == RK_Declaration or RK_Pattern, the declaration we are
   /// referring to. In the latter case, the declaration might be NULL.
   const NamedDecl *Declaration = nullptr;
 
   union {
-    /// \brief When Kind == RK_Keyword, the string representing the keyword
+    /// When Kind == RK_Keyword, the string representing the keyword
     /// or symbol's spelling.
     const char *Keyword;
 
-    /// \brief When Kind == RK_Pattern, the code-completion string that
+    /// When Kind == RK_Pattern, the code-completion string that
     /// describes the completion text to insert.
     CodeCompletionString *Pattern;
 
-    /// \brief When Kind == RK_Macro, the identifier that refers to a macro.
+    /// When Kind == RK_Macro, the identifier that refers to a macro.
     const IdentifierInfo *Macro;
   };
 
-  /// \brief The priority of this particular code-completion result.
+  /// The priority of this particular code-completion result.
   unsigned Priority;
 
-  /// \brief Specifies which parameter (of a function, Objective-C method,
+  /// Specifies which parameter (of a function, Objective-C method,
   /// macro, etc.) we should start with when formatting the result.
   unsigned StartParameter = 0;
 
-  /// \brief The kind of result stored here.
+  /// The kind of result stored here.
   ResultKind Kind;
 
-  /// \brief The cursor kind that describes this result.
+  /// The cursor kind that describes this result.
   CXCursorKind CursorKind;
 
-  /// \brief The availability of this result.
+  /// The availability of this result.
   CXAvailabilityKind Availability = CXAvailability_Available;
 
-  /// \brief Whether this result is hidden by another name.
+  /// Fix-its that *must* be applied before inserting the text for the
+  /// corresponding completion.
+  ///
+  /// By default, CodeCompletionBuilder only returns completions with empty
+  /// fix-its. Extra completions with non-empty fix-its should be explicitly
+  /// requested by setting CompletionOptions::IncludeFixIts.
+  ///
+  /// For the clients to be able to compute position of the cursor after
+  /// applying fix-its, the following conditions are guaranteed to hold for
+  /// RemoveRange of the stored fix-its:
+  ///  - Ranges in the fix-its are guaranteed to never contain the completion
+  ///  point (or identifier under completion point, if any) inside them, except
+  ///  at the start or at the end of the range.
+  ///  - If a fix-it range starts or ends with completion point (or starts or
+  ///  ends after the identifier under completion point), it will contain at
+  ///  least one character. It allows to unambiguously recompute completion
+  ///  point after applying the fix-it.
+  ///
+  /// The intuition is that provided fix-its change code around the identifier
+  /// we complete, but are not allowed to touch the identifier itself or the
+  /// completion point. One example of completions with corrections are the ones
+  /// replacing '.' with '->' and vice versa:
+  ///
+  /// std::unique_ptr<std::vector<int>> vec_ptr;
+  /// In 'vec_ptr.^', one of the completions is 'push_back', it requires
+  /// replacing '.' with '->'.
+  /// In 'vec_ptr->^', one of the completions is 'release', it requires
+  /// replacing '->' with '.'.
+  std::vector<FixItHint> FixIts;
+
+  /// Whether this result is hidden by another name.
   bool Hidden : 1;
 
-  /// \brief Whether this result was found via lookup into a base class.
+  /// Whether this result was found via lookup into a base class.
   bool QualifierIsInformative : 1;
 
-  /// \brief Whether this declaration is the beginning of a
+  /// Whether this declaration is the beginning of a
   /// nested-name-specifier and, therefore, should be followed by '::'.
   bool StartsNestedNameSpecifier : 1;
 
-  /// \brief Whether all parameters (of a function, Objective-C
+  /// Whether all parameters (of a function, Objective-C
   /// method, etc.) should be considered "informative".
   bool AllParametersAreInformative : 1;
 
-  /// \brief Whether we're completing a declaration of the given entity,
+  /// Whether we're completing a declaration of the given entity,
   /// rather than a use of that entity.
   bool DeclaringEntity : 1;
 
-  /// \brief If the result should have a nested-name-specifier, this is it.
+  /// If the result should have a nested-name-specifier, this is it.
   /// When \c QualifierIsInformative, the nested-name-specifier is
   /// informative rather than required.
   NestedNameSpecifier *Qualifier = nullptr;
 
-  /// \brief Build a result that refers to a declaration.
-  CodeCompletionResult(const NamedDecl *Declaration,
-                       unsigned Priority,
+  /// If this Decl was unshadowed by using declaration, this can store a
+  /// pointer to the UsingShadowDecl which was used in the unshadowing process.
+  /// This information can be used to uprank CodeCompletionResults / which have
+  /// corresponding `using decl::qualified::name;` nearby.
+  const UsingShadowDecl *ShadowDecl = nullptr;
+
+  /// Build a result that refers to a declaration.
+  CodeCompletionResult(const NamedDecl *Declaration, unsigned Priority,
                        NestedNameSpecifier *Qualifier = nullptr,
                        bool QualifierIsInformative = false,
-                       bool Accessible = true)
+                       bool Accessible = true,
+                       std::vector<FixItHint> FixIts = std::vector<FixItHint>())
       : Declaration(Declaration), Priority(Priority), Kind(RK_Declaration),
-        Hidden(false), QualifierIsInformative(QualifierIsInformative),
+        FixIts(std::move(FixIts)), Hidden(false),
+        QualifierIsInformative(QualifierIsInformative),
         StartsNestedNameSpecifier(false), AllParametersAreInformative(false),
         DeclaringEntity(false), Qualifier(Qualifier) {
+    // FIXME: Add assert to check FixIts range requirements.
     computeCursorKindAndAvailability(Accessible);
   }
 
-  /// \brief Build a result that refers to a keyword or symbol.
+  /// Build a result that refers to a keyword or symbol.
   CodeCompletionResult(const char *Keyword, unsigned Priority = CCP_Keyword)
       : Keyword(Keyword), Priority(Priority), Kind(RK_Keyword),
         CursorKind(CXCursor_NotImplemented), Hidden(false),
         QualifierIsInformative(false), StartsNestedNameSpecifier(false),
         AllParametersAreInformative(false), DeclaringEntity(false) {}
 
-  /// \brief Build a result that refers to a macro.
+  /// Build a result that refers to a macro.
   CodeCompletionResult(const IdentifierInfo *Macro,
                        unsigned Priority = CCP_Macro)
       : Macro(Macro), Priority(Priority), Kind(RK_Macro),
@@ -833,7 +873,7 @@
         QualifierIsInformative(false), StartsNestedNameSpecifier(false),
         AllParametersAreInformative(false), DeclaringEntity(false) {}
 
-  /// \brief Build a result that refers to a pattern.
+  /// Build a result that refers to a pattern.
   CodeCompletionResult(CodeCompletionString *Pattern,
                        unsigned Priority = CCP_CodePattern,
                        CXCursorKind CursorKind = CXCursor_NotImplemented,
@@ -844,7 +884,7 @@
         QualifierIsInformative(false), StartsNestedNameSpecifier(false),
         AllParametersAreInformative(false), DeclaringEntity(false) {}
 
-  /// \brief Build a result that refers to a pattern with an associated
+  /// Build a result that refers to a pattern with an associated
   /// declaration.
   CodeCompletionResult(CodeCompletionString *Pattern, const NamedDecl *D,
                        unsigned Priority)
@@ -853,21 +893,23 @@
         StartsNestedNameSpecifier(false), AllParametersAreInformative(false),
         DeclaringEntity(false) {
     computeCursorKindAndAvailability();
-  }  
-  
-  /// \brief Retrieve the declaration stored in this result.
+  }
+
+  /// Retrieve the declaration stored in this result. This might be nullptr if
+  /// Kind is RK_Pattern.
   const NamedDecl *getDeclaration() const {
-    assert(Kind == RK_Declaration && "Not a declaration result");
+    assert(((Kind == RK_Declaration) || (Kind == RK_Pattern)) &&
+           "Not a declaration or pattern result");
     return Declaration;
   }
 
-  /// \brief Retrieve the keyword stored in this result.
+  /// Retrieve the keyword stored in this result.
   const char *getKeyword() const {
     assert(Kind == RK_Keyword && "Not a keyword result");
     return Keyword;
   }
 
-  /// \brief Create a new code-completion string that describes how to insert
+  /// Create a new code-completion string that describes how to insert
   /// this result into a program.
   ///
   /// \param S The semantic analysis that created the result.
@@ -885,8 +927,15 @@
                                            CodeCompletionAllocator &Allocator,
                                            CodeCompletionTUInfo &CCTUInfo,
                                            bool IncludeBriefComments);
+  /// Creates a new code-completion string for the macro result. Similar to the
+  /// above overloads, except this only requires preprocessor information.
+  /// The result kind must be `RK_Macro`.
+  CodeCompletionString *
+  CreateCodeCompletionStringForMacro(Preprocessor &PP,
+                                     CodeCompletionAllocator &Allocator,
+                                     CodeCompletionTUInfo &CCTUInfo);
 
-  /// \brief Retrieve the name that should be used to order a result.
+  /// Retrieve the name that should be used to order a result.
   ///
   /// If the name needs to be constructed as a string, that string will be
   /// saved into Saved and the returned StringRef will refer to it.
@@ -916,46 +965,46 @@
 raw_ostream &operator<<(raw_ostream &OS,
                               const CodeCompletionString &CCS);
 
-/// \brief Abstract interface for a consumer of code-completion
+/// Abstract interface for a consumer of code-completion
 /// information.
 class CodeCompleteConsumer {
 protected:
   const CodeCompleteOptions CodeCompleteOpts;
 
-  /// \brief Whether the output format for the code-completion consumer is
+  /// Whether the output format for the code-completion consumer is
   /// binary.
   bool OutputIsBinary;
 
 public:
   class OverloadCandidate {
   public:
-    /// \brief Describes the type of overload candidate.
+    /// Describes the type of overload candidate.
     enum CandidateKind {
-      /// \brief The candidate is a function declaration.
+      /// The candidate is a function declaration.
       CK_Function,
 
-      /// \brief The candidate is a function template.
+      /// The candidate is a function template.
       CK_FunctionTemplate,
 
-      /// \brief The "candidate" is actually a variable, expression, or block
+      /// The "candidate" is actually a variable, expression, or block
       /// for which we only have a function prototype.
       CK_FunctionType
     };
 
   private:
-    /// \brief The kind of overload candidate.
+    /// The kind of overload candidate.
     CandidateKind Kind;
 
     union {
-      /// \brief The function overload candidate, available when
+      /// The function overload candidate, available when
       /// Kind == CK_Function.
       FunctionDecl *Function;
 
-      /// \brief The function template overload candidate, available when
+      /// The function template overload candidate, available when
       /// Kind == CK_FunctionTemplate.
       FunctionTemplateDecl *FunctionTemplate;
 
-      /// \brief The function type that describes the entity being called,
+      /// The function type that describes the entity being called,
       /// when Kind == CK_FunctionType.
       const FunctionType *Type;
     };
@@ -970,24 +1019,24 @@
     OverloadCandidate(const FunctionType *Type)
         : Kind(CK_FunctionType), Type(Type) {}
 
-    /// \brief Determine the kind of overload candidate.
+    /// Determine the kind of overload candidate.
     CandidateKind getKind() const { return Kind; }
 
-    /// \brief Retrieve the function overload candidate or the templated
+    /// Retrieve the function overload candidate or the templated
     /// function declaration for a function template.
     FunctionDecl *getFunction() const;
 
-    /// \brief Retrieve the function template overload candidate.
+    /// Retrieve the function template overload candidate.
     FunctionTemplateDecl *getFunctionTemplate() const {
       assert(getKind() == CK_FunctionTemplate && "Not a function template");
       return FunctionTemplate;
     }
 
-    /// \brief Retrieve the function type of the entity, regardless of how the
+    /// Retrieve the function type of the entity, regardless of how the
     /// function is stored.
     const FunctionType *getFunctionType() const;
 
-    /// \brief Create a new code-completion string that describes the function
+    /// Create a new code-completion string that describes the function
     /// signature of this overload candidate.
     CodeCompletionString *CreateSignatureString(unsigned CurrentArg,
                                                 Sema &S,
@@ -1000,46 +1049,50 @@
                        bool OutputIsBinary)
       : CodeCompleteOpts(CodeCompleteOpts), OutputIsBinary(OutputIsBinary) {}
 
-  /// \brief Whether the code-completion consumer wants to see macros.
+  /// Whether the code-completion consumer wants to see macros.
   bool includeMacros() const {
     return CodeCompleteOpts.IncludeMacros;
   }
 
-  /// \brief Whether the code-completion consumer wants to see code patterns.
+  /// Whether the code-completion consumer wants to see code patterns.
   bool includeCodePatterns() const {
     return CodeCompleteOpts.IncludeCodePatterns;
   }
 
-  /// \brief Whether to include global (top-level) declaration results.
+  /// Whether to include global (top-level) declaration results.
   bool includeGlobals() const { return CodeCompleteOpts.IncludeGlobals; }
 
-  /// \brief Whether to include declarations in namespace contexts (including
+  /// Whether to include declarations in namespace contexts (including
   /// the global namespace). If this is false, `includeGlobals()` will be
   /// ignored.
   bool includeNamespaceLevelDecls() const {
     return CodeCompleteOpts.IncludeNamespaceLevelDecls;
   }
 
-  /// \brief Whether to include brief documentation comments within the set of
+  /// Whether to include brief documentation comments within the set of
   /// code completions returned.
   bool includeBriefComments() const {
     return CodeCompleteOpts.IncludeBriefComments;
   }
 
-  /// \brief Hint whether to load data from the external AST in order to provide
+  /// Whether to include completion items with small fix-its, e.g. change
+  /// '.' to '->' on member access, etc.
+  bool includeFixIts() const { return CodeCompleteOpts.IncludeFixIts; }
+
+  /// Hint whether to load data from the external AST in order to provide
   /// full results. If false, declarations from the preamble may be omitted.
   bool loadExternal() const {
     return CodeCompleteOpts.LoadExternal;
   }
 
-  /// \brief Determine whether the output of this consumer is binary.
+  /// Determine whether the output of this consumer is binary.
   bool isOutputBinary() const { return OutputIsBinary; }
 
-  /// \brief Deregisters and destroys this code-completion consumer.
+  /// Deregisters and destroys this code-completion consumer.
   virtual ~CodeCompleteConsumer();
 
   /// \name Code-completion filtering
-  /// \brief Check if the result should be filtered out.
+  /// Check if the result should be filtered out.
   virtual bool isResultFilteredOut(StringRef Filter,
                                    CodeCompletionResult Results) {
     return false;
@@ -1047,7 +1100,7 @@
 
   /// \name Code-completion callbacks
   //@{
-  /// \brief Process the finalized code-completion results.
+  /// Process the finalized code-completion results.
   virtual void ProcessCodeCompleteResults(Sema &S,
                                           CodeCompletionContext Context,
                                           CodeCompletionResult *Results,
@@ -1066,30 +1119,47 @@
                                          unsigned NumCandidates) {}
   //@}
 
-  /// \brief Retrieve the allocator that will be used to allocate
+  /// Retrieve the allocator that will be used to allocate
   /// code completion strings.
   virtual CodeCompletionAllocator &getAllocator() = 0;
 
   virtual CodeCompletionTUInfo &getCodeCompletionTUInfo() = 0;
 };
 
-/// \brief A simple code-completion consumer that prints the results it
+/// Get the documentation comment used to produce
+/// CodeCompletionString::BriefComment for RK_Declaration.
+const RawComment *getCompletionComment(const ASTContext &Ctx,
+                                       const NamedDecl *Decl);
+
+/// Get the documentation comment used to produce
+/// CodeCompletionString::BriefComment for RK_Pattern.
+const RawComment *getPatternCompletionComment(const ASTContext &Ctx,
+                                              const NamedDecl *Decl);
+
+/// Get the documentation comment used to produce
+/// CodeCompletionString::BriefComment for OverloadCandidate.
+const RawComment *
+getParameterComment(const ASTContext &Ctx,
+                    const CodeCompleteConsumer::OverloadCandidate &Result,
+                    unsigned ArgIndex);
+
+/// A simple code-completion consumer that prints the results it
 /// receives in a simple format.
 class PrintingCodeCompleteConsumer : public CodeCompleteConsumer {
-  /// \brief The raw output stream.
+  /// The raw output stream.
   raw_ostream &OS;
 
   CodeCompletionTUInfo CCTUInfo;
 
 public:
-  /// \brief Create a new printing code-completion consumer that prints its
+  /// Create a new printing code-completion consumer that prints its
   /// results to the given raw output stream.
   PrintingCodeCompleteConsumer(const CodeCompleteOptions &CodeCompleteOpts,
                                raw_ostream &OS)
       : CodeCompleteConsumer(CodeCompleteOpts, false), OS(OS),
         CCTUInfo(std::make_shared<GlobalCodeCompletionAllocator>()) {}
 
-  /// \brief Prints the finalized code-completion results.
+  /// Prints the finalized code-completion results.
   void ProcessCodeCompleteResults(Sema &S, CodeCompletionContext Context,
                                   CodeCompletionResult *Results,
                                   unsigned NumResults) override;
diff --git a/linux-x64/clang/include/clang/Sema/CodeCompleteOptions.h b/linux-x64/clang/include/clang/Sema/CodeCompleteOptions.h
index bdd4732..1d3bbb4 100644
--- a/linux-x64/clang/include/clang/Sema/CodeCompleteOptions.h
+++ b/linux-x64/clang/include/clang/Sema/CodeCompleteOptions.h
@@ -39,10 +39,14 @@
   /// If false, namespace-level declarations from the preamble may be omitted.
   unsigned LoadExternal : 1;
 
+  /// Include results after corrections (small fix-its), e.g. change '.' to '->'
+  /// on member access, etc.
+  unsigned IncludeFixIts : 1;
+
   CodeCompleteOptions()
       : IncludeMacros(0), IncludeCodePatterns(0), IncludeGlobals(1),
         IncludeNamespaceLevelDecls(1), IncludeBriefComments(0),
-        LoadExternal(1) {}
+        LoadExternal(1), IncludeFixIts(0) {}
 };
 
 } // namespace clang
diff --git a/linux-x64/clang/include/clang/Sema/DeclSpec.h b/linux-x64/clang/include/clang/Sema/DeclSpec.h
index e9b116f..ea1650a 100644
--- a/linux-x64/clang/include/clang/Sema/DeclSpec.h
+++ b/linux-x64/clang/include/clang/Sema/DeclSpec.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines the classes used to store parsed information about
+/// This file defines the classes used to store parsed information about
 /// declaration-specifiers and declarators.
 ///
 /// \verbatim
@@ -29,8 +29,8 @@
 #include "clang/Basic/OperatorKinds.h"
 #include "clang/Basic/Specifiers.h"
 #include "clang/Lex/Token.h"
-#include "clang/Sema/AttributeList.h"
 #include "clang/Sema/Ownership.h"
+#include "clang/Sema/ParsedAttr.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -48,7 +48,7 @@
   class Declarator;
   struct TemplateIdAnnotation;
 
-/// \brief Represents a C++ nested-name-specifier or a global scope specifier.
+/// Represents a C++ nested-name-specifier or a global scope specifier.
 ///
 /// These can be in 3 states:
 ///   1) Not present, identified by isEmpty()
@@ -61,7 +61,7 @@
 ///
 /// The actual scope is described by getScopeRep().
 class CXXScopeSpec {
-  SourceRange Range;  
+  SourceRange Range;
   NestedNameSpecifierLocBuilder Builder;
 
 public:
@@ -72,12 +72,12 @@
   SourceLocation getBeginLoc() const { return Range.getBegin(); }
   SourceLocation getEndLoc() const { return Range.getEnd(); }
 
-  /// \brief Retrieve the representation of the nested-name-specifier.
-  NestedNameSpecifier *getScopeRep() const { 
-    return Builder.getRepresentation(); 
+  /// Retrieve the representation of the nested-name-specifier.
+  NestedNameSpecifier *getScopeRep() const {
+    return Builder.getRepresentation();
   }
 
-  /// \brief Extend the current nested-name-specifier by another
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'type::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -91,7 +91,7 @@
   void Extend(ASTContext &Context, SourceLocation TemplateKWLoc, TypeLoc TL,
               SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another 
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'identifier::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -105,7 +105,7 @@
   void Extend(ASTContext &Context, IdentifierInfo *Identifier,
               SourceLocation IdentifierLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another 
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'namespace::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -119,7 +119,7 @@
   void Extend(ASTContext &Context, NamespaceDecl *Namespace,
               SourceLocation NamespaceLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Extend the current nested-name-specifier by another 
+  /// Extend the current nested-name-specifier by another
   /// nested-name-specifier component of the form 'namespace-alias::'.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -127,18 +127,18 @@
   ///
   /// \param Alias The namespace alias.
   ///
-  /// \param AliasLoc The location of the namespace alias 
+  /// \param AliasLoc The location of the namespace alias
   /// name.
   ///
   /// \param ColonColonLoc The location of the trailing '::'.
   void Extend(ASTContext &Context, NamespaceAliasDecl *Alias,
               SourceLocation AliasLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Turn this (empty) nested-name-specifier into the global
+  /// Turn this (empty) nested-name-specifier into the global
   /// nested-name-specifier '::'.
   void MakeGlobal(ASTContext &Context, SourceLocation ColonColonLoc);
-  
-  /// \brief Turns this (empty) nested-name-specifier into '__super'
+
+  /// Turns this (empty) nested-name-specifier into '__super'
   /// nested-name-specifier.
   ///
   /// \param Context The AST context in which this nested-name-specifier
@@ -154,27 +154,27 @@
   void MakeSuper(ASTContext &Context, CXXRecordDecl *RD,
                  SourceLocation SuperLoc, SourceLocation ColonColonLoc);
 
-  /// \brief Make a new nested-name-specifier from incomplete source-location
+  /// Make a new nested-name-specifier from incomplete source-location
   /// information.
   ///
   /// FIXME: This routine should be used very, very rarely, in cases where we
   /// need to synthesize a nested-name-specifier. Most code should instead use
   /// \c Adopt() with a proper \c NestedNameSpecifierLoc.
-  void MakeTrivial(ASTContext &Context, NestedNameSpecifier *Qualifier, 
+  void MakeTrivial(ASTContext &Context, NestedNameSpecifier *Qualifier,
                    SourceRange R);
-  
-  /// \brief Adopt an existing nested-name-specifier (with source-range 
+
+  /// Adopt an existing nested-name-specifier (with source-range
   /// information).
   void Adopt(NestedNameSpecifierLoc Other);
-  
-  /// \brief Retrieve a nested-name-specifier with location information, copied
+
+  /// Retrieve a nested-name-specifier with location information, copied
   /// into the given AST context.
   ///
   /// \param Context The context into which this nested-name-specifier will be
   /// copied.
   NestedNameSpecifierLoc getWithLocInContext(ASTContext &Context) const;
 
-  /// \brief Retrieve the location of the name in the last qualifier
+  /// Retrieve the location of the name in the last qualifier
   /// in this nested name specifier.
   ///
   /// For example, the location of \c bar
@@ -195,15 +195,15 @@
   /// A scope specifier is present, and it refers to a real scope.
   bool isValid() const { return isNotEmpty() && getScopeRep() != nullptr; }
 
-  /// \brief Indicate that this nested-name-specifier is invalid.
-  void SetInvalid(SourceRange R) { 
+  /// Indicate that this nested-name-specifier is invalid.
+  void SetInvalid(SourceRange R) {
     assert(R.isValid() && "Must have a valid source range");
     if (Range.getBegin().isInvalid())
       Range.setBegin(R.getBegin());
     Range.setEnd(R.getEnd());
     Builder.Clear();
   }
-  
+
   /// Deprecated.  Some call sites intend isNotEmpty() while others intend
   /// isValid().
   bool isSet() const { return getScopeRep() != nullptr; }
@@ -213,21 +213,21 @@
     Builder.Clear();
   }
 
-  /// \brief Retrieve the data associated with the source-location information.
+  /// Retrieve the data associated with the source-location information.
   char *location_data() const { return Builder.getBuffer().first; }
-  
-  /// \brief Retrieve the size of the data associated with source-location 
+
+  /// Retrieve the size of the data associated with source-location
   /// information.
   unsigned location_size() const { return Builder.getBuffer().second; }
 };
 
-/// \brief Captures information about "declaration specifiers".
+/// Captures information about "declaration specifiers".
 ///
 /// "Declaration specifiers" encompasses storage-class-specifiers,
 /// type-specifiers, type-qualifiers, and function-specifiers.
 class DeclSpec {
 public:
-  /// \brief storage-class-specifier
+  /// storage-class-specifier
   /// \note The order of these enumerators is important for diagnostics.
   enum SCS {
     SCS_unspecified = 0,
@@ -254,7 +254,7 @@
   static const TSW TSW_short = clang::TSW_short;
   static const TSW TSW_long = clang::TSW_long;
   static const TSW TSW_longlong = clang::TSW_longlong;
-  
+
   enum TSC {
     TSC_unspecified,
     TSC_imaginary,
@@ -273,6 +273,7 @@
   static const TST TST_void = clang::TST_void;
   static const TST TST_char = clang::TST_char;
   static const TST TST_wchar = clang::TST_wchar;
+  static const TST TST_char8 = clang::TST_char8;
   static const TST TST_char16 = clang::TST_char16;
   static const TST TST_char32 = clang::TST_char32;
   static const TST TST_int = clang::TST_int;
@@ -281,6 +282,8 @@
   static const TST TST_float = clang::TST_float;
   static const TST TST_double = clang::TST_double;
   static const TST TST_float16 = clang::TST_Float16;
+  static const TST TST_accum = clang::TST_Accum;
+  static const TST TST_fract = clang::TST_Fract;
   static const TST TST_float128 = clang::TST_float128;
   static const TST TST_bool = clang::TST_bool;
   static const TST TST_decimal32 = clang::TST_decimal32;
@@ -345,6 +348,7 @@
   unsigned TypeAltiVecBool : 1;
   unsigned TypeSpecOwned : 1;
   unsigned TypeSpecPipe : 1;
+  unsigned TypeSpecSat : 1;
 
   // type-qualifiers
   unsigned TypeQualifiers : 5;  // Bitwise OR of TQ.
@@ -380,7 +384,7 @@
 
   SourceLocation StorageClassSpecLoc, ThreadStorageClassSpecLoc;
   SourceRange TSWRange;
-  SourceLocation TSCLoc, TSSLoc, TSTLoc, AltiVecLoc;
+  SourceLocation TSCLoc, TSSLoc, TSTLoc, AltiVecLoc, TSSatLoc;
   /// TSTNameLoc - If TypeSpecType is any of class, enum, struct, union,
   /// typename, then this is the location of the named type (if present);
   /// otherwise, it is the same as TSTLoc. Hence, the pair TSTLoc and
@@ -429,6 +433,7 @@
       TypeAltiVecBool(false),
       TypeSpecOwned(false),
       TypeSpecPipe(false),
+      TypeSpecSat(false),
       TypeQualifiers(TQ_unspecified),
       FS_inline_specified(false),
       FS_forceinline_specified(false),
@@ -482,6 +487,7 @@
   bool isTypeSpecOwned() const { return TypeSpecOwned; }
   bool isTypeRep() const { return isTypeRep((TST) TypeSpecType); }
   bool isTypeSpecPipe() const { return TypeSpecPipe; }
+  bool isTypeSpecSat() const { return TypeSpecSat; }
 
   ParsedType getRepAsType() const {
     assert(isTypeRep((TST) TypeSpecType) && "DeclSpec does not store a type");
@@ -499,8 +505,16 @@
   const CXXScopeSpec &getTypeSpecScope() const { return TypeScope; }
 
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
   SourceLocation getTypeSpecWidthLoc() const { return TSWRange.getBegin(); }
   SourceRange getTypeSpecWidthRange() const { return TSWRange; }
@@ -508,6 +522,7 @@
   SourceLocation getTypeSpecSignLoc() const { return TSSLoc; }
   SourceLocation getTypeSpecTypeLoc() const { return TSTLoc; }
   SourceLocation getAltiVecLoc() const { return AltiVecLoc; }
+  SourceLocation getTypeSpecSatLoc() const { return TSSatLoc; }
 
   SourceLocation getTypeSpecTypeNameLoc() const {
     assert(isDeclRep((TST) TypeSpecType) || TypeSpecType == TST_typename);
@@ -524,7 +539,7 @@
 
   bool hasTagDefinition() const;
 
-  /// \brief Turn a type-specifier-type into a string like "_Bool" or "union".
+  /// Turn a type-specifier-type into a string like "_Bool" or "union".
   static const char *getSpecifierName(DeclSpec::TST T,
                                       const PrintingPolicy &Policy);
   static const char *getSpecifierName(DeclSpec::TQ Q);
@@ -545,7 +560,7 @@
   SourceLocation getUnalignedSpecLoc() const { return TQ_unalignedLoc; }
   SourceLocation getPipeLoc() const { return TQ_pipeLoc; }
 
-  /// \brief Clear out all of the type qualifiers.
+  /// Clear out all of the type qualifiers.
   void ClearTypeQualifiers() {
     TypeQualifiers = 0;
     TQ_constLoc = SourceLocation();
@@ -586,7 +601,7 @@
     FS_noreturnLoc = SourceLocation();
   }
 
-  /// \brief Return true if any type-specifier has been found.
+  /// Return true if any type-specifier has been found.
   bool hasTypeSpecifier() const {
     return getTypeSpecType() != DeclSpec::TST_unspecified ||
            getTypeSpecWidth() != DeclSpec::TSW_unspecified ||
@@ -594,7 +609,7 @@
            getTypeSpecSign() != DeclSpec::TSS_unspecified;
   }
 
-  /// \brief Return a bitmask of which flavors of specifiers this
+  /// Return a bitmask of which flavors of specifiers this
   /// DeclSpec includes.
   unsigned getParsedSpecifiers() const;
 
@@ -660,6 +675,8 @@
   bool SetTypePipe(bool isPipe, SourceLocation Loc,
                        const char *&PrevSpec, unsigned &DiagID,
                        const PrintingPolicy &Policy);
+  bool SetTypeSpecSat(SourceLocation Loc, const char *&PrevSpec,
+                      unsigned &DiagID);
   bool SetTypeSpecError();
   void UpdateDeclRep(Decl *Rep) {
     assert(isDeclRep((TST) TypeSpecType));
@@ -700,7 +717,7 @@
 
   bool isModulePrivateSpecified() const { return ModulePrivateLoc.isValid(); }
   SourceLocation getModulePrivateSpecLoc() const { return ModulePrivateLoc; }
-  
+
   bool isConstexprSpecified() const { return Constexpr_specified; }
   SourceLocation getConstexprSpecLoc() const { return ConstexprLoc; }
 
@@ -713,7 +730,7 @@
     return Attrs.getPool();
   }
 
-  /// \brief Concatenates two attribute lists.
+  /// Concatenates two attribute lists.
   ///
   /// The GCC attribute syntax allows for the following:
   ///
@@ -730,8 +747,8 @@
   /// int __attribute__((may_alias)) __attribute__((aligned(16))) var;
   /// \endcode
   ///
-  void addAttributes(AttributeList *AL) {
-    Attrs.addAll(AL);
+  void addAttributes(ParsedAttributesView &AL) {
+    Attrs.addAll(AL.begin(), AL.end());
   }
 
   bool hasAttributes() const { return !Attrs.empty(); }
@@ -755,13 +772,13 @@
   ObjCDeclSpec *getObjCQualifiers() const { return ObjCQualifiers; }
   void setObjCQualifiers(ObjCDeclSpec *quals) { ObjCQualifiers = quals; }
 
-  /// \brief Checks if this DeclSpec can stand alone, without a Declarator.
+  /// Checks if this DeclSpec can stand alone, without a Declarator.
   ///
   /// Only tag declspecs can stand alone.
   bool isMissingDeclaratorOk();
 };
 
-/// \brief Captures information about "declaration specifiers" specific to
+/// Captures information about "declaration specifiers" specific to
 /// Objective-C.
 class ObjCDeclSpec {
 public:
@@ -883,47 +900,47 @@
 
 };
 
-/// \brief Describes the kind of unqualified-id parsed.
+/// Describes the kind of unqualified-id parsed.
 enum class UnqualifiedIdKind {
-  /// \brief An identifier.
+  /// An identifier.
   IK_Identifier,
-  /// \brief An overloaded operator name, e.g., operator+.
+  /// An overloaded operator name, e.g., operator+.
   IK_OperatorFunctionId,
-  /// \brief A conversion function name, e.g., operator int.
+  /// A conversion function name, e.g., operator int.
   IK_ConversionFunctionId,
-  /// \brief A user-defined literal name, e.g., operator "" _i.
+  /// A user-defined literal name, e.g., operator "" _i.
   IK_LiteralOperatorId,
-  /// \brief A constructor name.
+  /// A constructor name.
   IK_ConstructorName,
-  /// \brief A constructor named via a template-id.
+  /// A constructor named via a template-id.
   IK_ConstructorTemplateId,
-  /// \brief A destructor name.
+  /// A destructor name.
   IK_DestructorName,
-  /// \brief A template-id, e.g., f<int>.
+  /// A template-id, e.g., f<int>.
   IK_TemplateId,
-  /// \brief An implicit 'self' parameter
+  /// An implicit 'self' parameter
   IK_ImplicitSelfParam,
-  /// \brief A deduction-guide name (a template-name)
+  /// A deduction-guide name (a template-name)
   IK_DeductionGuideName
 };
 
-/// \brief Represents a C++ unqualified-id that has been parsed. 
+/// Represents a C++ unqualified-id that has been parsed.
 class UnqualifiedId {
 private:
   UnqualifiedId(const UnqualifiedId &Other) = delete;
   const UnqualifiedId &operator=(const UnqualifiedId &) = delete;
 
 public:
-  /// \brief Describes the kind of unqualified-id parsed.
+  /// Describes the kind of unqualified-id parsed.
   UnqualifiedIdKind Kind;
 
   struct OFI {
-    /// \brief The kind of overloaded operator.
+    /// The kind of overloaded operator.
     OverloadedOperatorKind Operator;
 
-    /// \brief The source locations of the individual tokens that name
-    /// the operator, e.g., the "new", "[", and "]" tokens in 
-    /// operator new []. 
+    /// The source locations of the individual tokens that name
+    /// the operator, e.g., the "new", "[", and "]" tokens in
+    /// operator new [].
     ///
     /// Different operators have different numbers of tokens in their name,
     /// up to three. Any remaining source locations in this array will be
@@ -931,50 +948,50 @@
     unsigned SymbolLocations[3];
   };
 
-  /// \brief Anonymous union that holds extra data associated with the
+  /// Anonymous union that holds extra data associated with the
   /// parsed unqualified-id.
   union {
-    /// \brief When Kind == IK_Identifier, the parsed identifier, or when
+    /// When Kind == IK_Identifier, the parsed identifier, or when
     /// Kind == IK_UserLiteralId, the identifier suffix.
     IdentifierInfo *Identifier;
-    
-    /// \brief When Kind == IK_OperatorFunctionId, the overloaded operator
+
+    /// When Kind == IK_OperatorFunctionId, the overloaded operator
     /// that we parsed.
     struct OFI OperatorFunctionId;
-    
-    /// \brief When Kind == IK_ConversionFunctionId, the type that the 
+
+    /// When Kind == IK_ConversionFunctionId, the type that the
     /// conversion function names.
     UnionParsedType ConversionFunctionId;
 
-    /// \brief When Kind == IK_ConstructorName, the class-name of the type
+    /// When Kind == IK_ConstructorName, the class-name of the type
     /// whose constructor is being referenced.
     UnionParsedType ConstructorName;
-    
-    /// \brief When Kind == IK_DestructorName, the type referred to by the
+
+    /// When Kind == IK_DestructorName, the type referred to by the
     /// class-name.
     UnionParsedType DestructorName;
 
-    /// \brief When Kind == IK_DeductionGuideName, the parsed template-name.
+    /// When Kind == IK_DeductionGuideName, the parsed template-name.
     UnionParsedTemplateTy TemplateName;
-    
-    /// \brief When Kind == IK_TemplateId or IK_ConstructorTemplateId,
+
+    /// When Kind == IK_TemplateId or IK_ConstructorTemplateId,
     /// the template-id annotation that contains the template name and
     /// template arguments.
     TemplateIdAnnotation *TemplateId;
   };
-  
-  /// \brief The location of the first token that describes this unqualified-id,
+
+  /// The location of the first token that describes this unqualified-id,
   /// which will be the location of the identifier, "operator" keyword,
   /// tilde (for a destructor), or the template name of a template-id.
   SourceLocation StartLocation;
-  
-  /// \brief The location of the last token that describes this unqualified-id.
+
+  /// The location of the last token that describes this unqualified-id.
   SourceLocation EndLocation;
 
   UnqualifiedId()
       : Kind(UnqualifiedIdKind::IK_Identifier), Identifier(nullptr) {}
 
-  /// \brief Clear out this unqualified-id, setting it to default (invalid) 
+  /// Clear out this unqualified-id, setting it to default (invalid)
   /// state.
   void clear() {
     Kind = UnqualifiedIdKind::IK_Identifier;
@@ -982,18 +999,18 @@
     StartLocation = SourceLocation();
     EndLocation = SourceLocation();
   }
-  
-  /// \brief Determine whether this unqualified-id refers to a valid name.
+
+  /// Determine whether this unqualified-id refers to a valid name.
   bool isValid() const { return StartLocation.isValid(); }
 
-  /// \brief Determine whether this unqualified-id refers to an invalid name.
+  /// Determine whether this unqualified-id refers to an invalid name.
   bool isInvalid() const { return !isValid(); }
-  
-  /// \brief Determine what kind of name we have.
+
+  /// Determine what kind of name we have.
   UnqualifiedIdKind getKind() const { return Kind; }
-  void setKind(UnqualifiedIdKind kind) { Kind = kind; } 
-  
-  /// \brief Specify that this unqualified-id was parsed as an identifier.
+  void setKind(UnqualifiedIdKind kind) { Kind = kind; }
+
+  /// Specify that this unqualified-id was parsed as an identifier.
   ///
   /// \param Id the parsed identifier.
   /// \param IdLoc the location of the parsed identifier.
@@ -1002,8 +1019,8 @@
     Identifier = const_cast<IdentifierInfo *>(Id);
     StartLocation = EndLocation = IdLoc;
   }
-  
-  /// \brief Specify that this unqualified-id was parsed as an 
+
+  /// Specify that this unqualified-id was parsed as an
   /// operator-function-id.
   ///
   /// \param OperatorLoc the location of the 'operator' keyword.
@@ -1012,11 +1029,11 @@
   ///
   /// \param SymbolLocations the locations of the individual operator symbols
   /// in the operator.
-  void setOperatorFunctionId(SourceLocation OperatorLoc, 
+  void setOperatorFunctionId(SourceLocation OperatorLoc,
                              OverloadedOperatorKind Op,
                              SourceLocation SymbolLocations[3]);
-  
-  /// \brief Specify that this unqualified-id was parsed as a 
+
+  /// Specify that this unqualified-id was parsed as a
   /// conversion-function-id.
   ///
   /// \param OperatorLoc the location of the 'operator' keyword.
@@ -1024,7 +1041,7 @@
   /// \param Ty the type to which this conversion function is converting.
   ///
   /// \param EndLoc the location of the last token that makes up the type name.
-  void setConversionFunctionId(SourceLocation OperatorLoc, 
+  void setConversionFunctionId(SourceLocation OperatorLoc,
                                ParsedType Ty,
                                SourceLocation EndLoc) {
     Kind = UnqualifiedIdKind::IK_ConversionFunctionId;
@@ -1033,7 +1050,7 @@
     ConversionFunctionId = Ty;
   }
 
-  /// \brief Specific that this unqualified-id was parsed as a
+  /// Specific that this unqualified-id was parsed as a
   /// literal-operator-id.
   ///
   /// \param Id the parsed identifier.
@@ -1048,15 +1065,15 @@
     StartLocation = OpLoc;
     EndLocation = IdLoc;
   }
-  
-  /// \brief Specify that this unqualified-id was parsed as a constructor name.
+
+  /// Specify that this unqualified-id was parsed as a constructor name.
   ///
   /// \param ClassType the class type referred to by the constructor name.
   ///
   /// \param ClassNameLoc the location of the class name.
   ///
   /// \param EndLoc the location of the last token that makes up the type name.
-  void setConstructorName(ParsedType ClassType, 
+  void setConstructorName(ParsedType ClassType,
                           SourceLocation ClassNameLoc,
                           SourceLocation EndLoc) {
     Kind = UnqualifiedIdKind::IK_ConstructorName;
@@ -1065,7 +1082,7 @@
     ConstructorName = ClassType;
   }
 
-  /// \brief Specify that this unqualified-id was parsed as a
+  /// Specify that this unqualified-id was parsed as a
   /// template-id that names a constructor.
   ///
   /// \param TemplateId the template-id annotation that describes the parsed
@@ -1073,7 +1090,7 @@
   /// \p TemplateId and will free it on destruction.
   void setConstructorTemplateId(TemplateIdAnnotation *TemplateId);
 
-  /// \brief Specify that this unqualified-id was parsed as a destructor name.
+  /// Specify that this unqualified-id was parsed as a destructor name.
   ///
   /// \param TildeLoc the location of the '~' that introduces the destructor
   /// name.
@@ -1087,15 +1104,15 @@
     EndLocation = EndLoc;
     DestructorName = ClassType;
   }
-  
-  /// \brief Specify that this unqualified-id was parsed as a template-id.
+
+  /// Specify that this unqualified-id was parsed as a template-id.
   ///
   /// \param TemplateId the template-id annotation that describes the parsed
   /// template-id. This UnqualifiedId instance will take ownership of the
   /// \p TemplateId and will free it on destruction.
   void setTemplateId(TemplateIdAnnotation *TemplateId);
 
-  /// \brief Specify that this unqualified-id was parsed as a template-name for
+  /// Specify that this unqualified-id was parsed as a template-name for
   /// a deduction-guide.
   ///
   /// \param Template The parsed template-name.
@@ -1106,19 +1123,27 @@
     TemplateName = Template;
     StartLocation = EndLocation = TemplateLoc;
   }
-  
-  /// \brief Return the source range that covers this unqualified-id.
-  SourceRange getSourceRange() const LLVM_READONLY { 
-    return SourceRange(StartLocation, EndLocation); 
+
+  /// Return the source range that covers this unqualified-id.
+  SourceRange getSourceRange() const LLVM_READONLY {
+    return SourceRange(StartLocation, EndLocation);
   }
-  SourceLocation getLocStart() const LLVM_READONLY { return StartLocation; }
-  SourceLocation getLocEnd() const LLVM_READONLY { return EndLocation; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return StartLocation; }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return EndLocation; }
 };
 
-/// \brief A set of tokens that has been cached for later parsing.
+/// A set of tokens that has been cached for later parsing.
 typedef SmallVector<Token, 4> CachedTokens;
 
-/// \brief One instance of this struct is used for each type in a
+/// One instance of this struct is used for each type in a
 /// declarator that is parsed.
 ///
 /// This is intended to be a small value object.
@@ -1138,11 +1163,9 @@
     return SourceRange(Loc, EndLoc);
   }
 
-  struct TypeInfoCommon {
-    AttributeList *AttrList;
-  };
+  ParsedAttributesView AttrList;
 
-  struct PointerTypeInfo : TypeInfoCommon {
+  struct PointerTypeInfo {
     /// The type qualifiers: const/volatile/restrict/unaligned/atomic.
     unsigned TypeQuals : 5;
 
@@ -1165,7 +1188,7 @@
     }
   };
 
-  struct ReferenceTypeInfo : TypeInfoCommon {
+  struct ReferenceTypeInfo {
     /// The type qualifier: restrict. [GNU] C++ extension
     bool HasRestrict : 1;
     /// True if this is an lvalue reference, false if it's an rvalue reference.
@@ -1174,7 +1197,7 @@
     }
   };
 
-  struct ArrayTypeInfo : TypeInfoCommon {
+  struct ArrayTypeInfo {
     /// The type qualifiers for the array:
     /// const/volatile/restrict/__unaligned/_Atomic.
     unsigned TypeQuals : 5;
@@ -1225,7 +1248,7 @@
     SourceRange Range;
   };
 
-  struct FunctionTypeInfo : TypeInfoCommon {
+  struct FunctionTypeInfo {
     /// hasPrototype - This is true if the function had at least one typed
     /// parameter.  If the function is () or (a,b,c), then it has no prototype,
     /// and is treated as a K&R-style function.
@@ -1239,7 +1262,7 @@
     /// Can this declaration be a constructor-style initializer?
     unsigned isAmbiguous : 1;
 
-    /// \brief Whether the ref-qualifier (if any) is an lvalue reference.
+    /// Whether the ref-qualifier (if any) is an lvalue reference.
     /// Otherwise, it's an rvalue reference.
     unsigned RefQualifierIsLValueRef : 1;
 
@@ -1275,34 +1298,34 @@
     /// number of declarations in the function prototype.
     unsigned NumExceptionsOrDecls;
 
-    /// \brief The location of the ref-qualifier, if any.
+    /// The location of the ref-qualifier, if any.
     ///
     /// If this is an invalid location, there is no ref-qualifier.
     unsigned RefQualifierLoc;
 
-    /// \brief The location of the const-qualifier, if any.
+    /// The location of the const-qualifier, if any.
     ///
     /// If this is an invalid location, there is no const-qualifier.
     unsigned ConstQualifierLoc;
 
-    /// \brief The location of the volatile-qualifier, if any.
+    /// The location of the volatile-qualifier, if any.
     ///
     /// If this is an invalid location, there is no volatile-qualifier.
     unsigned VolatileQualifierLoc;
 
-    /// \brief The location of the restrict-qualifier, if any.
+    /// The location of the restrict-qualifier, if any.
     ///
     /// If this is an invalid location, there is no restrict-qualifier.
     unsigned RestrictQualifierLoc;
 
-    /// \brief The location of the 'mutable' qualifer in a lambda-declarator, if
+    /// The location of the 'mutable' qualifer in a lambda-declarator, if
     /// any.
     unsigned MutableLoc;
 
-    /// \brief The beginning location of the exception specification, if any.
+    /// The beginning location of the exception specification, if any.
     unsigned ExceptionSpecLocBeg;
 
-    /// \brief The end location of the exception specification, if any.
+    /// The end location of the exception specification, if any.
     unsigned ExceptionSpecLocEnd;
 
     /// Params - This is a pointer to a new[]'d array of ParamInfo objects that
@@ -1311,16 +1334,16 @@
     ParamInfo *Params;
 
     union {
-      /// \brief Pointer to a new[]'d array of TypeAndRange objects that
+      /// Pointer to a new[]'d array of TypeAndRange objects that
       /// contain the types in the function's dynamic exception specification
       /// and their locations, if there is one.
       TypeAndRange *Exceptions;
 
-      /// \brief Pointer to the expression in the noexcept-specifier of this
+      /// Pointer to the expression in the noexcept-specifier of this
       /// function, if it has one.
       Expr *NoexceptExpr;
-  
-      /// \brief Pointer to the cached tokens for an exception-specification
+
+      /// Pointer to the cached tokens for an exception-specification
       /// that has not yet been parsed.
       CachedTokens *ExceptionSpecTokens;
 
@@ -1330,11 +1353,11 @@
       NamedDecl **DeclsInPrototype;
     };
 
-    /// \brief If HasTrailingReturnType is true, this is the trailing return
+    /// If HasTrailingReturnType is true, this is the trailing return
     /// type specified.
     UnionParsedType TrailingReturnType;
 
-    /// \brief Reset the parameter list to having zero parameters.
+    /// Reset the parameter list to having zero parameters.
     ///
     /// This is used in various places for error recovery.
     void freeParams() {
@@ -1348,8 +1371,7 @@
     }
 
     void destroy() {
-      if (DeleteParams)
-        delete[] Params;
+      freeParams();
       switch (getExceptionSpecType()) {
       default:
         break;
@@ -1395,66 +1417,66 @@
       return SourceRange(getExceptionSpecLocBeg(), getExceptionSpecLocEnd());
     }
 
-    /// \brief Retrieve the location of the ref-qualifier, if any.
+    /// Retrieve the location of the ref-qualifier, if any.
     SourceLocation getRefQualifierLoc() const {
       return SourceLocation::getFromRawEncoding(RefQualifierLoc);
     }
 
-    /// \brief Retrieve the location of the 'const' qualifier, if any.
+    /// Retrieve the location of the 'const' qualifier, if any.
     SourceLocation getConstQualifierLoc() const {
       return SourceLocation::getFromRawEncoding(ConstQualifierLoc);
     }
 
-    /// \brief Retrieve the location of the 'volatile' qualifier, if any.
+    /// Retrieve the location of the 'volatile' qualifier, if any.
     SourceLocation getVolatileQualifierLoc() const {
       return SourceLocation::getFromRawEncoding(VolatileQualifierLoc);
     }
 
-    /// \brief Retrieve the location of the 'restrict' qualifier, if any.
+    /// Retrieve the location of the 'restrict' qualifier, if any.
     SourceLocation getRestrictQualifierLoc() const {
       return SourceLocation::getFromRawEncoding(RestrictQualifierLoc);
     }
 
-    /// \brief Retrieve the location of the 'mutable' qualifier, if any.
+    /// Retrieve the location of the 'mutable' qualifier, if any.
     SourceLocation getMutableLoc() const {
       return SourceLocation::getFromRawEncoding(MutableLoc);
     }
 
-    /// \brief Determine whether this function declaration contains a 
+    /// Determine whether this function declaration contains a
     /// ref-qualifier.
     bool hasRefQualifier() const { return getRefQualifierLoc().isValid(); }
 
-    /// \brief Determine whether this lambda-declarator contains a 'mutable'
+    /// Determine whether this lambda-declarator contains a 'mutable'
     /// qualifier.
     bool hasMutableQualifier() const { return getMutableLoc().isValid(); }
 
-    /// \brief Get the type of exception specification this function has.
+    /// Get the type of exception specification this function has.
     ExceptionSpecificationType getExceptionSpecType() const {
       return static_cast<ExceptionSpecificationType>(ExceptionSpecType);
     }
 
-    /// \brief Get the number of dynamic exception specifications.
+    /// Get the number of dynamic exception specifications.
     unsigned getNumExceptions() const {
       assert(ExceptionSpecType != EST_None);
       return NumExceptionsOrDecls;
     }
 
-    /// \brief Get the non-parameter decls defined within this function
+    /// Get the non-parameter decls defined within this function
     /// prototype. Typically these are tag declarations.
     ArrayRef<NamedDecl *> getDeclsInPrototype() const {
       assert(ExceptionSpecType == EST_None);
       return llvm::makeArrayRef(DeclsInPrototype, NumExceptionsOrDecls);
     }
 
-    /// \brief Determine whether this function declarator had a
+    /// Determine whether this function declarator had a
     /// trailing-return-type.
     bool hasTrailingReturnType() const { return HasTrailingReturnType; }
 
-    /// \brief Get the trailing-return-type for this function declarator.
+    /// Get the trailing-return-type for this function declarator.
     ParsedType getTrailingReturnType() const { return TrailingReturnType; }
   };
 
-  struct BlockPointerTypeInfo : TypeInfoCommon {
+  struct BlockPointerTypeInfo {
     /// For now, sema will catch these as invalid.
     /// The type qualifiers: const/volatile/restrict/__unaligned/_Atomic.
     unsigned TypeQuals : 5;
@@ -1463,7 +1485,7 @@
     }
   };
 
-  struct MemberPointerTypeInfo : TypeInfoCommon {
+  struct MemberPointerTypeInfo {
     /// The type qualifiers: const/volatile/restrict/__unaligned/_Atomic.
     unsigned TypeQuals : 5;
     // CXXScopeSpec has a constructor, so it can't be a direct member.
@@ -1480,15 +1502,14 @@
     }
   };
 
-  struct PipeTypeInfo : TypeInfoCommon {
-  /// The access writes.
-  unsigned AccessWrites : 3;
+  struct PipeTypeInfo {
+    /// The access writes.
+    unsigned AccessWrites : 3;
 
-  void destroy() {}
+    void destroy() {}
   };
 
   union {
-    TypeInfoCommon        Common;
     PointerTypeInfo       Ptr;
     ReferenceTypeInfo     Ref;
     ArrayTypeInfo         Arr;
@@ -1511,17 +1532,12 @@
     }
   }
 
-  /// \brief If there are attributes applied to this declaratorchunk, return
+  /// If there are attributes applied to this declaratorchunk, return
   /// them.
-  const AttributeList *getAttrs() const {
-    return Common.AttrList;
-  }
+  const ParsedAttributesView &getAttrs() const { return AttrList; }
+  ParsedAttributesView &getAttrs() { return AttrList; }
 
-  AttributeList *&getAttrListRef() {
-    return Common.AttrList;
-  }
-
-  /// \brief Return a DeclaratorChunk for a pointer.
+  /// Return a DeclaratorChunk for a pointer.
   static DeclaratorChunk getPointer(unsigned TypeQuals, SourceLocation Loc,
                                     SourceLocation ConstQualLoc,
                                     SourceLocation VolatileQualLoc,
@@ -1537,11 +1553,10 @@
     I.Ptr.RestrictQualLoc = RestrictQualLoc.getRawEncoding();
     I.Ptr.AtomicQualLoc   = AtomicQualLoc.getRawEncoding();
     I.Ptr.UnalignedQualLoc = UnalignedQualLoc.getRawEncoding();
-    I.Ptr.AttrList        = nullptr;
     return I;
   }
 
-  /// \brief Return a DeclaratorChunk for a reference.
+  /// Return a DeclaratorChunk for a reference.
   static DeclaratorChunk getReference(unsigned TypeQuals, SourceLocation Loc,
                                       bool lvalue) {
     DeclaratorChunk I;
@@ -1549,11 +1564,10 @@
     I.Loc             = Loc;
     I.Ref.HasRestrict = (TypeQuals & DeclSpec::TQ_restrict) != 0;
     I.Ref.LValueRef   = lvalue;
-    I.Ref.AttrList    = nullptr;
     return I;
   }
 
-  /// \brief Return a DeclaratorChunk for an array.
+  /// Return a DeclaratorChunk for an array.
   static DeclaratorChunk getArray(unsigned TypeQuals,
                                   bool isStatic, bool isStar, Expr *NumElts,
                                   SourceLocation LBLoc, SourceLocation RBLoc) {
@@ -1561,7 +1575,6 @@
     I.Kind          = Array;
     I.Loc           = LBLoc;
     I.EndLoc        = RBLoc;
-    I.Arr.AttrList  = nullptr;
     I.Arr.TypeQuals = TypeQuals;
     I.Arr.hasStatic = isStatic;
     I.Arr.isStar    = isStar;
@@ -1598,25 +1611,23 @@
                                      TypeResult TrailingReturnType =
                                                     TypeResult());
 
-  /// \brief Return a DeclaratorChunk for a block.
+  /// Return a DeclaratorChunk for a block.
   static DeclaratorChunk getBlockPointer(unsigned TypeQuals,
                                          SourceLocation Loc) {
     DeclaratorChunk I;
     I.Kind          = BlockPointer;
     I.Loc           = Loc;
     I.Cls.TypeQuals = TypeQuals;
-    I.Cls.AttrList  = nullptr;
     return I;
   }
 
-  /// \brief Return a DeclaratorChunk for a block.
+  /// Return a DeclaratorChunk for a block.
   static DeclaratorChunk getPipe(unsigned TypeQuals,
                                  SourceLocation Loc) {
     DeclaratorChunk I;
     I.Kind          = Pipe;
     I.Loc           = Loc;
     I.Cls.TypeQuals = TypeQuals;
-    I.Cls.AttrList  = nullptr;
     return I;
   }
 
@@ -1628,19 +1639,17 @@
     I.Loc           = SS.getBeginLoc();
     I.EndLoc        = Loc;
     I.Mem.TypeQuals = TypeQuals;
-    I.Mem.AttrList  = nullptr;
     new (I.Mem.ScopeMem) CXXScopeSpec(SS);
     return I;
   }
 
-  /// \brief Return a DeclaratorChunk for a paren.
+  /// Return a DeclaratorChunk for a paren.
   static DeclaratorChunk getParen(SourceLocation LParenLoc,
                                   SourceLocation RParenLoc) {
     DeclaratorChunk I;
     I.Kind          = Paren;
     I.Loc           = LParenLoc;
     I.EndLoc        = RParenLoc;
-    I.Common.AttrList = nullptr;
     return I;
   }
 
@@ -1701,7 +1710,7 @@
   }
 };
 
-/// \brief Described the kind of function definition (if any) provided for
+/// Described the kind of function definition (if any) provided for
 /// a function.
 enum FunctionDefinitionKind {
   FDK_Declaration,
@@ -1740,7 +1749,7 @@
 };
 
 
-/// \brief Information about one declarator, including the parsed type
+/// Information about one declarator, including the parsed type
 /// information and the identifier.
 ///
 /// When the declarator is fully formed, this is turned into the appropriate
@@ -1753,14 +1762,14 @@
 /// Instances of this class should be a transient object that lives on the
 /// stack, not objects that are allocated in large quantities on the heap.
 class Declarator {
-  
+
 private:
   const DeclSpec &DS;
   CXXScopeSpec SS;
   UnqualifiedId Name;
   SourceRange Range;
 
-  /// \brief Where we are parsing this declarator.
+  /// Where we are parsing this declarator.
   DeclaratorContext Context;
 
   /// The C++17 structured binding, if any. This is an alternative to a Name.
@@ -1778,21 +1787,21 @@
   /// GroupingParens - Set by Parser::ParseParenDeclarator().
   unsigned GroupingParens : 1;
 
-  /// FunctionDefinition - Is this Declarator for a function or member 
+  /// FunctionDefinition - Is this Declarator for a function or member
   /// definition and, if so, what kind?
   ///
   /// Actually a FunctionDefinitionKind.
   unsigned FunctionDefinition : 2;
 
-  /// \brief Is this Declarator a redeclaration?
+  /// Is this Declarator a redeclaration?
   unsigned Redeclaration : 1;
 
-  /// \brief true if the declaration is preceded by \c __extension__.
+  /// true if the declaration is preceded by \c __extension__.
   unsigned Extension : 1;
 
   /// Indicates whether this is an Objective-C instance variable.
   unsigned ObjCIvar : 1;
-    
+
   /// Indicates whether this is an Objective-C 'weak' property.
   unsigned ObjCWeakProperty : 1;
 
@@ -1802,7 +1811,7 @@
   /// Attrs - Attributes.
   ParsedAttributes Attrs;
 
-  /// \brief The asm label, if specified.
+  /// The asm label, if specified.
   Expr *AsmLabel;
 
 #ifndef _MSC_VER
@@ -1817,14 +1826,14 @@
   };
 #endif
 
-  /// \brief If this is the second or subsequent declarator in this declaration,
+  /// If this is the second or subsequent declarator in this declaration,
   /// the location of the comma before this declarator.
   SourceLocation CommaLoc;
 
-  /// \brief If provided, the source location of the ellipsis used to describe
+  /// If provided, the source location of the ellipsis used to describe
   /// this declarator as a parameter pack.
   SourceLocation EllipsisLoc;
-  
+
   friend struct DeclaratorChunk;
 
 public:
@@ -1859,13 +1868,13 @@
   const CXXScopeSpec &getCXXScopeSpec() const { return SS; }
   CXXScopeSpec &getCXXScopeSpec() { return SS; }
 
-  /// \brief Retrieve the name specified by this declarator.
+  /// Retrieve the name specified by this declarator.
   UnqualifiedId &getName() { return Name; }
 
   const DecompositionDeclarator &getDecompositionDeclarator() const {
     return BindingGroup;
   }
-  
+
   DeclaratorContext getContext() const { return Context; }
 
   bool isPrototypeContext() const {
@@ -1875,10 +1884,18 @@
             Context == DeclaratorContext::LambdaExprParameterContext);
   }
 
-  /// \brief Get the source range that spans this declarator.
+  /// Get the source range that spans this declarator.
   SourceRange getSourceRange() const LLVM_READONLY { return Range; }
-  SourceLocation getLocStart() const LLVM_READONLY { return Range.getBegin(); }
-  SourceLocation getLocEnd() const LLVM_READONLY { return Range.getEnd(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocStart() const LLVM_READONLY,
+                            "Use getBeginLoc instead") {
+    return getBeginLoc();
+  }
+  SourceLocation getBeginLoc() const LLVM_READONLY { return Range.getBegin(); }
+  LLVM_ATTRIBUTE_DEPRECATED(SourceLocation getLocEnd() const LLVM_READONLY,
+                            "Use getEndLoc instead") {
+    return getEndLoc();
+  }
+  SourceLocation getEndLoc() const LLVM_READONLY { return Range.getEnd(); }
 
   void SetSourceRange(SourceRange R) { Range = R; }
   /// SetRangeBegin - Set the start of the source range to Loc, unless it's
@@ -1903,7 +1920,7 @@
       Range.setEnd(SR.getEnd());
   }
 
-  /// \brief Reset the contents of this Declarator.
+  /// Reset the contents of this Declarator.
   void clear() {
     SS.clear();
     Name.clear();
@@ -2114,15 +2131,15 @@
     return BindingGroup.isSet();
   }
 
-  IdentifierInfo *getIdentifier() const { 
+  IdentifierInfo *getIdentifier() const {
     if (Name.getKind() == UnqualifiedIdKind::IK_Identifier)
       return Name.Identifier;
-    
+
     return nullptr;
   }
   SourceLocation getIdentifierLoc() const { return Name.StartLocation; }
 
-  /// \brief Set the name of this declarator to be the given identifier.
+  /// Set the name of this declarator to be the given identifier.
   void SetIdentifier(IdentifierInfo *Id, SourceLocation IdLoc) {
     Name.setIdentifier(Id, IdLoc);
   }
@@ -2135,23 +2152,33 @@
 
   /// AddTypeInfo - Add a chunk to this declarator. Also extend the range to
   /// EndLoc, which should be the last token of the chunk.
-  void AddTypeInfo(const DeclaratorChunk &TI,
-                   ParsedAttributes &attrs,
+  /// This function takes attrs by R-Value reference because it takes ownership
+  /// of those attributes from the parameter.
+  void AddTypeInfo(const DeclaratorChunk &TI, ParsedAttributes &&attrs,
                    SourceLocation EndLoc) {
     DeclTypeInfo.push_back(TI);
-    DeclTypeInfo.back().getAttrListRef() = attrs.getList();
+    DeclTypeInfo.back().getAttrs().addAll(attrs.begin(), attrs.end());
     getAttributePool().takeAllFrom(attrs.getPool());
 
     if (!EndLoc.isInvalid())
       SetRangeEnd(EndLoc);
   }
 
-  /// \brief Add a new innermost chunk to this declarator.
+  /// AddTypeInfo - Add a chunk to this declarator. Also extend the range to
+  /// EndLoc, which should be the last token of the chunk.
+  void AddTypeInfo(const DeclaratorChunk &TI, SourceLocation EndLoc) {
+    DeclTypeInfo.push_back(TI);
+
+    if (!EndLoc.isInvalid())
+      SetRangeEnd(EndLoc);
+  }
+
+  /// Add a new innermost chunk to this declarator.
   void AddInnermostTypeInfo(const DeclaratorChunk &TI) {
     DeclTypeInfo.insert(DeclTypeInfo.begin(), TI);
   }
 
-  /// \brief Return the number of types applied to this declarator.
+  /// Return the number of types applied to this declarator.
   unsigned getNumTypeObjects() const { return DeclTypeInfo.size(); }
 
   /// Return the specified TypeInfo from this declarator.  TypeInfo #0 is
@@ -2258,15 +2285,15 @@
     return const_cast<Declarator*>(this)->getFunctionTypeInfo();
   }
 
-  /// \brief Determine whether the declaration that will be produced from 
+  /// Determine whether the declaration that will be produced from
   /// this declaration will be a function.
-  /// 
+  ///
   /// A declaration can declare a function even if the declarator itself
   /// isn't a function declarator, if the type specifier refers to a function
   /// type. This routine checks for both cases.
   bool isDeclarationOfFunction() const;
 
-  /// \brief Return true if this declaration appears in a context where a
+  /// Return true if this declaration appears in a context where a
   /// function declarator would be a function declaration.
   bool isFunctionDeclarationContext() const {
     if (getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
@@ -2315,8 +2342,8 @@
     case DeclaratorContext::MemberContext:
 
     // FIXME: sizeof(...) permits an expression.
-    case DeclaratorContext::TypeNameContext: 
-    
+    case DeclaratorContext::TypeNameContext:
+
     case DeclaratorContext::FunctionalCastContext:
     case DeclaratorContext::AliasDeclContext:
     case DeclaratorContext::AliasTemplateContext:
@@ -2346,8 +2373,8 @@
 
     llvm_unreachable("unknown context kind!");
   }
-  
-  /// \brief Return true if a function declarator at this position would be a
+
+  /// Return true if a function declarator at this position would be a
   /// function declaration.
   bool isFunctionDeclaratorAFunctionDeclaration() const {
     if (!isFunctionDeclarationContext())
@@ -2360,7 +2387,7 @@
     return true;
   }
 
-  /// \brief Determine whether a trailing return type was written (at any
+  /// Determine whether a trailing return type was written (at any
   /// level) within this declarator.
   bool hasTrailingReturnType() const {
     for (const auto &Chunk : type_objects())
@@ -2386,29 +2413,25 @@
       SetRangeEnd(lastLoc);
   }
 
-  const AttributeList *getAttributes() const { return Attrs.getList(); }
-  AttributeList *getAttributes() { return Attrs.getList(); }
-
-  AttributeList *&getAttrListRef() { return Attrs.getListRef(); }
+  const ParsedAttributes &getAttributes() const { return Attrs; }
+  ParsedAttributes &getAttributes() { return Attrs; }
 
   /// hasAttributes - do we contain any attributes?
   bool hasAttributes() const {
-    if (getAttributes() || getDeclSpec().hasAttributes()) return true;
+    if (!getAttributes().empty() || getDeclSpec().hasAttributes())
+      return true;
     for (unsigned i = 0, e = getNumTypeObjects(); i != e; ++i)
-      if (getTypeObject(i).getAttrs())
+      if (!getTypeObject(i).getAttrs().empty())
         return true;
     return false;
   }
 
-  /// \brief Return a source range list of C++11 attributes associated
+  /// Return a source range list of C++11 attributes associated
   /// with the declarator.
   void getCXX11AttributeRanges(SmallVectorImpl<SourceRange> &Ranges) {
-    AttributeList *AttrList = Attrs.getList();
-    while (AttrList) {
-      if (AttrList->isCXX11Attribute())
-        Ranges.push_back(AttrList->getRange());
-      AttrList = AttrList->getNext();
-    }
+    for (const ParsedAttr &AL : Attrs)
+      if (AL.isCXX11Attribute())
+        Ranges.push_back(AL.getRange());
   }
 
   void setAsmLabel(Expr *E) { AsmLabel = E; }
@@ -2419,7 +2442,7 @@
 
   void setObjCIvar(bool Val = true) { ObjCIvar = Val; }
   bool isObjCIvar() const { return ObjCIvar; }
-    
+
   void setObjCWeakProperty(bool Val = true) { ObjCWeakProperty = Val; }
   bool isObjCWeakProperty() const { return ObjCWeakProperty; }
 
@@ -2439,16 +2462,16 @@
   SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
   void setEllipsisLoc(SourceLocation EL) { EllipsisLoc = EL; }
 
-  void setFunctionDefinitionKind(FunctionDefinitionKind Val) { 
-    FunctionDefinition = Val; 
+  void setFunctionDefinitionKind(FunctionDefinitionKind Val) {
+    FunctionDefinition = Val;
   }
-  
+
   bool isFunctionDefinition() const {
     return getFunctionDefinitionKind() != FDK_Declaration;
   }
-  
-  FunctionDefinitionKind getFunctionDefinitionKind() const { 
-    return (FunctionDefinitionKind)FunctionDefinition; 
+
+  FunctionDefinitionKind getFunctionDefinitionKind() const {
+    return (FunctionDefinitionKind)FunctionDefinition;
   }
 
   /// Returns true if this declares a real member and not a friend.
@@ -2469,7 +2492,7 @@
   bool isRedeclaration() const { return Redeclaration; }
 };
 
-/// \brief This little struct is used to capture information about
+/// This little struct is used to capture information about
 /// structure field declarators, which is basically just a bitfield size.
 struct FieldDeclarator {
   Declarator D;
@@ -2479,7 +2502,7 @@
         BitfieldSize(nullptr) {}
 };
 
-/// \brief Represents a C++11 virt-specifier-seq.
+/// Represents a C++11 virt-specifier-seq.
 class VirtSpecifiers {
 public:
   enum Specifier {
@@ -2512,7 +2535,7 @@
   SourceLocation getFirstLocation() const { return FirstLocation; }
   SourceLocation getLastLocation() const { return LastLocation; }
   Specifier getLastSpecifier() const { return LastSpecifier; }
-  
+
 private:
   unsigned Specifiers;
   Specifier LastSpecifier;
@@ -2529,9 +2552,9 @@
   ListInit    //!< [a{b}]
 };
 
-/// \brief Represents a complete lambda introducer.
+/// Represents a complete lambda introducer.
 struct LambdaIntroducer {
-  /// \brief An individual capture in a lambda introducer.
+  /// An individual capture in a lambda introducer.
   struct LambdaCapture {
     LambdaCaptureKind Kind;
     SourceLocation Loc;
@@ -2540,12 +2563,16 @@
     LambdaCaptureInitKind InitKind;
     ExprResult Init;
     ParsedType InitCaptureType;
+    SourceRange ExplicitRange;
+
     LambdaCapture(LambdaCaptureKind Kind, SourceLocation Loc,
                   IdentifierInfo *Id, SourceLocation EllipsisLoc,
                   LambdaCaptureInitKind InitKind, ExprResult Init,
-                  ParsedType InitCaptureType)
+                  ParsedType InitCaptureType,
+                  SourceRange ExplicitRange)
         : Kind(Kind), Loc(Loc), Id(Id), EllipsisLoc(EllipsisLoc),
-          InitKind(InitKind), Init(Init), InitCaptureType(InitCaptureType) {}
+          InitKind(InitKind), Init(Init), InitCaptureType(InitCaptureType),
+          ExplicitRange(ExplicitRange) {}
   };
 
   SourceRange Range;
@@ -2556,16 +2583,17 @@
   LambdaIntroducer()
     : Default(LCD_None) {}
 
-  /// \brief Append a capture in a lambda introducer.
+  /// Append a capture in a lambda introducer.
   void addCapture(LambdaCaptureKind Kind,
                   SourceLocation Loc,
                   IdentifierInfo* Id,
                   SourceLocation EllipsisLoc,
                   LambdaCaptureInitKind InitKind,
-                  ExprResult Init, 
-                  ParsedType InitCaptureType) {
+                  ExprResult Init,
+                  ParsedType InitCaptureType,
+                  SourceRange ExplicitRange) {
     Captures.push_back(LambdaCapture(Kind, Loc, Id, EllipsisLoc, InitKind, Init,
-                                     InitCaptureType));
+                                     InitCaptureType, ExplicitRange));
   }
 };
 
diff --git a/linux-x64/clang/include/clang/Sema/DelayedDiagnostic.h b/linux-x64/clang/include/clang/Sema/DelayedDiagnostic.h
index ce2a950..a26b6ff 100644
--- a/linux-x64/clang/include/clang/Sema/DelayedDiagnostic.h
+++ b/linux-x64/clang/include/clang/Sema/DelayedDiagnostic.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief Defines the classes clang::DelayedDiagnostic and 
+/// Defines the classes clang::DelayedDiagnostic and
 /// clang::AccessedEntity.
 ///
 /// DelayedDiangostic is used to record diagnostics that are being
@@ -265,7 +265,7 @@
   };
 };
 
-/// \brief A collection of diagnostics which were delayed.
+/// A collection of diagnostics which were delayed.
 class DelayedDiagnosticPool {
   const DelayedDiagnosticPool *Parent;
   SmallVector<DelayedDiagnostic, 4> Diagnostics;
diff --git a/linux-x64/clang/include/clang/Sema/ExternalSemaSource.h b/linux-x64/clang/include/clang/Sema/ExternalSemaSource.h
index c5cb7b1..00f80e2 100644
--- a/linux-x64/clang/include/clang/Sema/ExternalSemaSource.h
+++ b/linux-x64/clang/include/clang/Sema/ExternalSemaSource.h
@@ -39,15 +39,15 @@
 class VarDecl;
 struct LateParsedTemplate;
 
-/// \brief A simple structure that captures a vtable use for the purposes of
+/// A simple structure that captures a vtable use for the purposes of
 /// the \c ExternalSemaSource.
 struct ExternalVTableUse {
   CXXRecordDecl *Record;
   SourceLocation Location;
   bool DefinitionRequired;
 };
-  
-/// \brief An abstract interface that should be implemented by
+
+/// An abstract interface that should be implemented by
 /// external AST sources that also provide information for semantic
 /// analysis.
 class ExternalSemaSource : public ExternalASTSource {
@@ -58,15 +58,15 @@
 
   ~ExternalSemaSource() override;
 
-  /// \brief Initialize the semantic source with the Sema instance
+  /// Initialize the semantic source with the Sema instance
   /// being used to perform semantic analysis on the abstract syntax
   /// tree.
   virtual void InitializeSema(Sema &S) {}
 
-  /// \brief Inform the semantic consumer that Sema is no longer available.
+  /// Inform the semantic consumer that Sema is no longer available.
   virtual void ForgetSema() {}
 
-  /// \brief Load the contents of the global method pool for a given
+  /// Load the contents of the global method pool for a given
   /// selector.
   virtual void ReadMethodPool(Selector Sel);
 
@@ -74,12 +74,12 @@
   /// selector if necessary.
   virtual void updateOutOfDateSelector(Selector Sel);
 
-  /// \brief Load the set of namespaces that are known to the external source,
+  /// Load the set of namespaces that are known to the external source,
   /// which will be used during typo correction.
   virtual void ReadKnownNamespaces(
                            SmallVectorImpl<NamespaceDecl *> &Namespaces);
 
-  /// \brief Load the set of used but not defined functions or variables with
+  /// Load the set of used but not defined functions or variables with
   /// internal linkage, or used but not defined internal functions.
   virtual void
   ReadUndefinedButUsed(llvm::MapVector<NamedDecl *, SourceLocation> &Undefined);
@@ -87,7 +87,7 @@
   virtual void ReadMismatchingDeleteExpressions(llvm::MapVector<
       FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &);
 
-  /// \brief Do last resort, unqualified lookup on a LookupResult that
+  /// Do last resort, unqualified lookup on a LookupResult that
   /// Sema cannot find.
   ///
   /// \param R a LookupResult that is being recovered.
@@ -97,7 +97,7 @@
   /// \return true to tell Sema to recover using the LookupResult.
   virtual bool LookupUnqualified(LookupResult &R, Scope *S) { return false; }
 
-  /// \brief Read the set of tentative definitions known to the external Sema
+  /// Read the set of tentative definitions known to the external Sema
   /// source.
   ///
   /// The external source should append its own tentative definitions to the
@@ -106,8 +106,8 @@
   /// introduce the same declarations repeatedly.
   virtual void ReadTentativeDefinitions(
                                   SmallVectorImpl<VarDecl *> &TentativeDefs) {}
-  
-  /// \brief Read the set of unused file-scope declarations known to the
+
+  /// Read the set of unused file-scope declarations known to the
   /// external Sema source.
   ///
   /// The external source should append its own unused, filed-scope to the
@@ -116,8 +116,8 @@
   /// introduce the same declarations repeatedly.
   virtual void ReadUnusedFileScopedDecls(
                  SmallVectorImpl<const DeclaratorDecl *> &Decls) {}
-  
-  /// \brief Read the set of delegating constructors known to the
+
+  /// Read the set of delegating constructors known to the
   /// external Sema source.
   ///
   /// The external source should append its own delegating constructors to the
@@ -127,7 +127,7 @@
   virtual void ReadDelegatingConstructors(
                  SmallVectorImpl<CXXConstructorDecl *> &Decls) {}
 
-  /// \brief Read the set of ext_vector type declarations known to the
+  /// Read the set of ext_vector type declarations known to the
   /// external Sema source.
   ///
   /// The external source should append its own ext_vector type declarations to
@@ -136,7 +136,7 @@
   /// introduce the same declarations repeatedly.
   virtual void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl *> &Decls) {}
 
-  /// \brief Read the set of potentially unused typedefs known to the source.
+  /// Read the set of potentially unused typedefs known to the source.
   ///
   /// The external source should append its own potentially unused local
   /// typedefs to the given vector of declarations. Note that this routine may
@@ -145,34 +145,34 @@
   virtual void ReadUnusedLocalTypedefNameCandidates(
       llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) {}
 
-  /// \brief Read the set of referenced selectors known to the
+  /// Read the set of referenced selectors known to the
   /// external Sema source.
   ///
-  /// The external source should append its own referenced selectors to the 
-  /// given vector of selectors. Note that this routine 
-  /// may be invoked multiple times; the external source should take care not 
+  /// The external source should append its own referenced selectors to the
+  /// given vector of selectors. Note that this routine
+  /// may be invoked multiple times; the external source should take care not
   /// to introduce the same selectors repeatedly.
   virtual void ReadReferencedSelectors(
                  SmallVectorImpl<std::pair<Selector, SourceLocation> > &Sels) {}
 
-  /// \brief Read the set of weak, undeclared identifiers known to the
+  /// Read the set of weak, undeclared identifiers known to the
   /// external Sema source.
   ///
   /// The external source should append its own weak, undeclared identifiers to
-  /// the given vector. Note that this routine may be invoked multiple times; 
+  /// the given vector. Note that this routine may be invoked multiple times;
   /// the external source should take care not to introduce the same identifiers
   /// repeatedly.
   virtual void ReadWeakUndeclaredIdentifiers(
                  SmallVectorImpl<std::pair<IdentifierInfo *, WeakInfo> > &WI) {}
 
-  /// \brief Read the set of used vtables known to the external Sema source.
+  /// Read the set of used vtables known to the external Sema source.
   ///
   /// The external source should append its own used vtables to the given
   /// vector. Note that this routine may be invoked multiple times; the external
   /// source should take care not to introduce the same vtables repeatedly.
   virtual void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) {}
 
-  /// \brief Read the set of pending instantiations known to the external
+  /// Read the set of pending instantiations known to the external
   /// Sema source.
   ///
   /// The external source should append its own pending instantiations to the
@@ -180,10 +180,10 @@
   /// external source should take care not to introduce the same instantiations
   /// repeatedly.
   virtual void ReadPendingInstantiations(
-                 SmallVectorImpl<std::pair<ValueDecl *, 
+                 SmallVectorImpl<std::pair<ValueDecl *,
                                            SourceLocation> > &Pending) {}
 
-  /// \brief Read the set of late parsed template functions for this source.
+  /// Read the set of late parsed template functions for this source.
   ///
   /// The external source should insert its own late parsed template functions
   /// into the map. Note that this routine may be invoked multiple times; the
@@ -209,7 +209,7 @@
     return TypoCorrection();
   }
 
-  /// \brief Produces a diagnostic note if the external source contains a
+  /// Produces a diagnostic note if the external source contains a
   /// complete definition for \p T.
   ///
   /// \param Loc the location at which a complete type was required but not
@@ -227,7 +227,7 @@
   static bool classof(const ExternalASTSource *Source) {
     return Source->SemaSource;
   }
-}; 
+};
 
 } // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/Sema/IdentifierResolver.h b/linux-x64/clang/include/clang/Sema/IdentifierResolver.h
index 2647766..1c46e1d 100644
--- a/linux-x64/clang/include/clang/Sema/IdentifierResolver.h
+++ b/linux-x64/clang/include/clang/Sema/IdentifierResolver.h
@@ -32,7 +32,7 @@
 class NamedDecl;
 class Preprocessor;
 class Scope;
-  
+
 /// IdentifierResolver - Keeps track of shadowed decls on enclosing
 /// scopes.  It manages the shadowing chains of declaration names and
 /// implements efficient decl lookup based on a declaration name.
@@ -54,11 +54,11 @@
     /// The decl must already be part of the decl chain.
     void RemoveDecl(NamedDecl *D);
 
-    /// \brief Insert the given declaration at the given position in the list.
+    /// Insert the given declaration at the given position in the list.
     void InsertDecl(DeclsTy::iterator Pos, NamedDecl *D) {
       Decls.insert(Pos, D);
     }
-                    
+
   private:
     DeclsTy Decls;
   };
@@ -163,11 +163,11 @@
   /// The decl must already be part of the decl chain.
   void RemoveDecl(NamedDecl *D);
 
-  /// \brief Insert the given declaration after the given iterator
+  /// Insert the given declaration after the given iterator
   /// position.
   void InsertDeclAfter(iterator Pos, NamedDecl *D);
 
-  /// \brief Try to add the given declaration to the top level scope, if it
+  /// Try to add the given declaration to the top level scope, if it
   /// (or a redeclaration of it) hasn't already been added.
   ///
   /// \param D The externally-produced declaration to add.
@@ -176,17 +176,17 @@
   ///
   /// \returns true if the declaration was added, false otherwise.
   bool tryAddTopLevelDecl(NamedDecl *D, DeclarationName Name);
-  
+
 private:
   const LangOptions &LangOpt;
   Preprocessor &PP;
-  
+
   class IdDeclInfoMap;
   IdDeclInfoMap *IdDeclInfos;
 
   void updatingIdentifier(IdentifierInfo &II);
   void readingIdentifier(IdentifierInfo &II);
-  
+
   /// FETokenInfo contains a Decl pointer if lower bit == 0.
   static inline bool isDeclPtr(void *Ptr) {
     return (reinterpret_cast<uintptr_t>(Ptr) & 0x1) == 0;
diff --git a/linux-x64/clang/include/clang/Sema/Initialization.h b/linux-x64/clang/include/clang/Sema/Initialization.h
index d11c1ee..fb42e52 100644
--- a/linux-x64/clang/include/clang/Sema/Initialization.h
+++ b/linux-x64/clang/include/clang/Sema/Initialization.h
@@ -45,49 +45,52 @@
 class ObjCMethodDecl;
 class Sema;
 
-/// \brief Describes an entity that is being initialized.
-class InitializedEntity {
+/// Describes an entity that is being initialized.
+class alignas(8) InitializedEntity {
 public:
-  /// \brief Specifies the kind of entity being initialized.
+  /// Specifies the kind of entity being initialized.
   enum EntityKind {
-    /// \brief The entity being initialized is a variable.
+    /// The entity being initialized is a variable.
     EK_Variable,
 
-    /// \brief The entity being initialized is a function parameter.
+    /// The entity being initialized is a function parameter.
     EK_Parameter,
 
-    /// \brief The entity being initialized is the result of a function call.
+    /// The entity being initialized is the result of a function call.
     EK_Result,
 
-    /// \brief The entity being initialized is an exception object that
+    /// The entity being initialized is the result of a statement expression.
+    EK_StmtExprResult,
+
+    /// The entity being initialized is an exception object that
     /// is being thrown.
     EK_Exception,
 
-    /// \brief The entity being initialized is a non-static data member 
+    /// The entity being initialized is a non-static data member
     /// subobject.
     EK_Member,
 
-    /// \brief The entity being initialized is an element of an array.
+    /// The entity being initialized is an element of an array.
     EK_ArrayElement,
 
-    /// \brief The entity being initialized is an object (or array of
+    /// The entity being initialized is an object (or array of
     /// objects) allocated via new.
     EK_New,
 
-    /// \brief The entity being initialized is a temporary object.
+    /// The entity being initialized is a temporary object.
     EK_Temporary,
 
-    /// \brief The entity being initialized is a base member subobject.
+    /// The entity being initialized is a base member subobject.
     EK_Base,
 
-    /// \brief The initialization is being done by a delegating constructor.
+    /// The initialization is being done by a delegating constructor.
     EK_Delegating,
 
-    /// \brief The entity being initialized is an element of a vector.
+    /// The entity being initialized is an element of a vector.
     /// or vector.
     EK_VectorElement,
 
-    /// \brief The entity being initialized is a field of block descriptor for
+    /// The entity being initialized is a field of block descriptor for
     /// the copied-in c++ object.
     EK_BlockElement,
 
@@ -95,27 +98,27 @@
     /// copied-in lambda object that's used in the lambda to block conversion.
     EK_LambdaToBlockConversionBlockElement,
 
-    /// \brief The entity being initialized is the real or imaginary part of a
+    /// The entity being initialized is the real or imaginary part of a
     /// complex number.
     EK_ComplexElement,
 
-    /// \brief The entity being initialized is the field that captures a 
+    /// The entity being initialized is the field that captures a
     /// variable in a lambda.
     EK_LambdaCapture,
 
-    /// \brief The entity being initialized is the initializer for a compound
+    /// The entity being initialized is the initializer for a compound
     /// literal.
     EK_CompoundLiteralInit,
 
-    /// \brief The entity being implicitly initialized back to the formal
+    /// The entity being implicitly initialized back to the formal
     /// result type.
     EK_RelatedResult,
 
-    /// \brief The entity being initialized is a function parameter; function
+    /// The entity being initialized is a function parameter; function
     /// is member of group of audited CF APIs.
     EK_Parameter_CF_Audited,
 
-    /// \brief The entity being initialized is a structured binding of a
+    /// The entity being initialized is a structured binding of a
     /// decomposition declaration.
     EK_Binding,
 
@@ -123,77 +126,81 @@
     // enum as an index for its first %select.  When modifying this list,
     // that diagnostic text needs to be updated as well.
   };
-  
+
 private:
-  /// \brief The kind of entity being initialized.
+  /// The kind of entity being initialized.
   EntityKind Kind;
 
-  /// \brief If non-NULL, the parent entity in which this
+  /// If non-NULL, the parent entity in which this
   /// initialization occurs.
   const InitializedEntity *Parent = nullptr;
 
-  /// \brief The type of the object or reference being initialized.
+  /// The type of the object or reference being initialized.
   QualType Type;
 
-  /// \brief The mangling number for the next reference temporary to be created.
+  /// The mangling number for the next reference temporary to be created.
   mutable unsigned ManglingNumber = 0;
 
   struct LN {
-    /// \brief When Kind == EK_Result, EK_Exception, EK_New, the
+    /// When Kind == EK_Result, EK_Exception, EK_New, the
     /// location of the 'return', 'throw', or 'new' keyword,
     /// respectively. When Kind == EK_Temporary, the location where
     /// the temporary is being created.
     unsigned Location;
 
-    /// \brief Whether the entity being initialized may end up using the
+    /// Whether the entity being initialized may end up using the
     /// named return value optimization (NRVO).
     bool NRVO;
   };
 
   struct VD {
-    /// \brief The VarDecl, FieldDecl, or BindingDecl being initialized.
+    /// The VarDecl, FieldDecl, or BindingDecl being initialized.
     ValueDecl *VariableOrMember;
 
-    /// \brief When Kind == EK_Member, whether this is an implicit member
+    /// When Kind == EK_Member, whether this is an implicit member
     /// initialization in a copy or move constructor. These can perform array
     /// copies.
     bool IsImplicitFieldInit;
+
+    /// When Kind == EK_Member, whether this is the initial initialization
+    /// check for a default member initializer.
+    bool IsDefaultMemberInit;
   };
 
   struct C {
-    /// \brief The name of the variable being captured by an EK_LambdaCapture.
+    /// The name of the variable being captured by an EK_LambdaCapture.
     IdentifierInfo *VarID;
 
-    /// \brief The source location at which the capture occurs.
+    /// The source location at which the capture occurs.
     unsigned Location;
   };
 
   union {
-    /// \brief When Kind == EK_Variable, EK_Member or EK_Binding, the variable.
+    /// When Kind == EK_Variable, EK_Member or EK_Binding, the variable.
     VD Variable;
-    
-    /// \brief When Kind == EK_RelatedResult, the ObjectiveC method where
+
+    /// When Kind == EK_RelatedResult, the ObjectiveC method where
     /// result type was implicitly changed to accommodate ARC semantics.
     ObjCMethodDecl *MethodDecl;
 
-    /// \brief When Kind == EK_Parameter, the ParmVarDecl, with the
+    /// When Kind == EK_Parameter, the ParmVarDecl, with the
     /// low bit indicating whether the parameter is "consumed".
     uintptr_t Parameter;
-    
-    /// \brief When Kind == EK_Temporary or EK_CompoundLiteralInit, the type
+
+    /// When Kind == EK_Temporary or EK_CompoundLiteralInit, the type
     /// source information for the temporary.
     TypeSourceInfo *TypeInfo;
 
     struct LN LocAndNRVO;
-    
-    /// \brief When Kind == EK_Base, the base specifier that provides the 
+
+    /// When Kind == EK_Base, the base specifier that provides the
     /// base class. The lower bit specifies whether the base is an inherited
     /// virtual base.
     uintptr_t Base;
 
-    /// \brief When Kind == EK_ArrayElement, EK_VectorElement, or
+    /// When Kind == EK_ArrayElement, EK_VectorElement, or
     /// EK_ComplexElement, the index of the array or vector element being
-    /// initialized. 
+    /// initialized.
     unsigned Index;
 
     struct C Capture;
@@ -201,11 +208,11 @@
 
   InitializedEntity() = default;
 
-  /// \brief Create the initialization entity for a variable.
+  /// Create the initialization entity for a variable.
   InitializedEntity(VarDecl *Var, EntityKind EK = EK_Variable)
-      : Kind(EK), Type(Var->getType()), Variable{Var, false} {}
-  
-  /// \brief Create the initialization entity for the result of a
+      : Kind(EK), Type(Var->getType()), Variable{Var, false, false} {}
+
+  /// Create the initialization entity for the result of a
   /// function, throwing an object, performing an explicit cast, or
   /// initializing a parameter for which there is no declaration.
   InitializedEntity(EntityKind Kind, SourceLocation Loc, QualType Type,
@@ -214,37 +221,37 @@
     LocAndNRVO.Location = Loc.getRawEncoding();
     LocAndNRVO.NRVO = NRVO;
   }
-  
-  /// \brief Create the initialization entity for a member subobject.
+
+  /// Create the initialization entity for a member subobject.
   InitializedEntity(FieldDecl *Member, const InitializedEntity *Parent,
-                    bool Implicit) 
+                    bool Implicit, bool DefaultMemberInit)
       : Kind(EK_Member), Parent(Parent), Type(Member->getType()),
-        Variable{Member, Implicit} {}
-  
-  /// \brief Create the initialization entity for an array element.
-  InitializedEntity(ASTContext &Context, unsigned Index, 
+        Variable{Member, Implicit, DefaultMemberInit} {}
+
+  /// Create the initialization entity for an array element.
+  InitializedEntity(ASTContext &Context, unsigned Index,
                     const InitializedEntity &Parent);
 
-  /// \brief Create the initialization entity for a lambda capture.
+  /// Create the initialization entity for a lambda capture.
   InitializedEntity(IdentifierInfo *VarID, QualType FieldType, SourceLocation Loc)
       : Kind(EK_LambdaCapture), Type(FieldType) {
     Capture.VarID = VarID;
     Capture.Location = Loc.getRawEncoding();
   }
-  
+
 public:
-  /// \brief Create the initialization entity for a variable.
+  /// Create the initialization entity for a variable.
   static InitializedEntity InitializeVariable(VarDecl *Var) {
     return InitializedEntity(Var);
   }
 
-  /// \brief Create the initialization entity for a parameter.
+  /// Create the initialization entity for a parameter.
   static InitializedEntity InitializeParameter(ASTContext &Context,
                                                const ParmVarDecl *Parm) {
     return InitializeParameter(Context, Parm, Parm->getType());
   }
 
-  /// \brief Create the initialization entity for a parameter, but use
+  /// Create the initialization entity for a parameter, but use
   /// another type.
   static InitializedEntity InitializeParameter(ASTContext &Context,
                                                const ParmVarDecl *Parm,
@@ -262,7 +269,7 @@
     return Entity;
   }
 
-  /// \brief Create the initialization entity for a parameter that is
+  /// Create the initialization entity for a parameter that is
   /// only known by its type.
   static InitializedEntity InitializeParameter(ASTContext &Context,
                                                QualType Type,
@@ -275,12 +282,17 @@
     return Entity;
   }
 
-  /// \brief Create the initialization entity for the result of a function.
+  /// Create the initialization entity for the result of a function.
   static InitializedEntity InitializeResult(SourceLocation ReturnLoc,
                                             QualType Type, bool NRVO) {
     return InitializedEntity(EK_Result, ReturnLoc, Type, NRVO);
   }
 
+  static InitializedEntity InitializeStmtExprResult(SourceLocation ReturnLoc,
+                                            QualType Type) {
+    return InitializedEntity(EK_StmtExprResult, ReturnLoc, Type);
+  }
+
   static InitializedEntity InitializeBlock(SourceLocation BlockVarLoc,
                                            QualType Type, bool NRVO) {
     return InitializedEntity(EK_BlockElement, BlockVarLoc, Type, NRVO);
@@ -292,36 +304,36 @@
                              BlockVarLoc, Type, NRVO);
   }
 
-  /// \brief Create the initialization entity for an exception object.
+  /// Create the initialization entity for an exception object.
   static InitializedEntity InitializeException(SourceLocation ThrowLoc,
                                                QualType Type, bool NRVO) {
     return InitializedEntity(EK_Exception, ThrowLoc, Type, NRVO);
   }
 
-  /// \brief Create the initialization entity for an object allocated via new.
+  /// Create the initialization entity for an object allocated via new.
   static InitializedEntity InitializeNew(SourceLocation NewLoc, QualType Type) {
     return InitializedEntity(EK_New, NewLoc, Type);
   }
-  
-  /// \brief Create the initialization entity for a temporary.
+
+  /// Create the initialization entity for a temporary.
   static InitializedEntity InitializeTemporary(QualType Type) {
     return InitializeTemporary(nullptr, Type);
   }
 
-  /// \brief Create the initialization entity for a temporary.
+  /// Create the initialization entity for a temporary.
   static InitializedEntity InitializeTemporary(TypeSourceInfo *TypeInfo) {
     return InitializeTemporary(TypeInfo, TypeInfo->getType());
   }
-  
-  /// \brief Create the initialization entity for a temporary.
+
+  /// Create the initialization entity for a temporary.
   static InitializedEntity InitializeTemporary(TypeSourceInfo *TypeInfo,
                                                QualType Type) {
     InitializedEntity Result(EK_Temporary, SourceLocation(), Type);
     Result.TypeInfo = TypeInfo;
     return Result;
   }
-  
-  /// \brief Create the initialization entity for a related result.
+
+  /// Create the initialization entity for a related result.
   static InitializedEntity InitializeRelatedResult(ObjCMethodDecl *MD,
                                                    QualType Type) {
     InitializedEntity Result(EK_RelatedResult, SourceLocation(), Type);
@@ -329,53 +341,59 @@
     return Result;
   }
 
-  /// \brief Create the initialization entity for a base class subobject.
+  /// Create the initialization entity for a base class subobject.
   static InitializedEntity
   InitializeBase(ASTContext &Context, const CXXBaseSpecifier *Base,
                  bool IsInheritedVirtualBase,
                  const InitializedEntity *Parent = nullptr);
 
-  /// \brief Create the initialization entity for a delegated constructor.
+  /// Create the initialization entity for a delegated constructor.
   static InitializedEntity InitializeDelegation(QualType Type) {
     return InitializedEntity(EK_Delegating, SourceLocation(), Type);
   }
-  
-  /// \brief Create the initialization entity for a member subobject.
+
+  /// Create the initialization entity for a member subobject.
   static InitializedEntity
   InitializeMember(FieldDecl *Member,
                    const InitializedEntity *Parent = nullptr,
                    bool Implicit = false) {
-    return InitializedEntity(Member, Parent, Implicit);
+    return InitializedEntity(Member, Parent, Implicit, false);
   }
-  
-  /// \brief Create the initialization entity for a member subobject.
+
+  /// Create the initialization entity for a member subobject.
   static InitializedEntity
   InitializeMember(IndirectFieldDecl *Member,
                    const InitializedEntity *Parent = nullptr,
                    bool Implicit = false) {
-    return InitializedEntity(Member->getAnonField(), Parent, Implicit);
+    return InitializedEntity(Member->getAnonField(), Parent, Implicit, false);
   }
 
-  /// \brief Create the initialization entity for an array element.
-  static InitializedEntity InitializeElement(ASTContext &Context, 
-                                             unsigned Index, 
+  /// Create the initialization entity for a default member initializer.
+  static InitializedEntity
+  InitializeMemberFromDefaultMemberInitializer(FieldDecl *Member) {
+    return InitializedEntity(Member, nullptr, false, true);
+  }
+
+  /// Create the initialization entity for an array element.
+  static InitializedEntity InitializeElement(ASTContext &Context,
+                                             unsigned Index,
                                              const InitializedEntity &Parent) {
     return InitializedEntity(Context, Index, Parent);
   }
 
-  /// \brief Create the initialization entity for a structured binding.
+  /// Create the initialization entity for a structured binding.
   static InitializedEntity InitializeBinding(VarDecl *Binding) {
     return InitializedEntity(Binding, EK_Binding);
   }
 
-  /// \brief Create the initialization entity for a lambda capture.
+  /// Create the initialization entity for a lambda capture.
   static InitializedEntity InitializeLambdaCapture(IdentifierInfo *VarID,
                                                    QualType FieldType,
                                                    SourceLocation Loc) {
     return InitializedEntity(VarID, FieldType, Loc);
   }
 
-  /// \brief Create the entity for a compound literal initializer.
+  /// Create the entity for a compound literal initializer.
   static InitializedEntity InitializeCompoundLiteralInit(TypeSourceInfo *TSI) {
     InitializedEntity Result(EK_CompoundLiteralInit, SourceLocation(),
                              TSI->getType());
@@ -383,37 +401,37 @@
     return Result;
   }
 
-  /// \brief Determine the kind of initialization.
+  /// Determine the kind of initialization.
   EntityKind getKind() const { return Kind; }
-  
-  /// \brief Retrieve the parent of the entity being initialized, when
+
+  /// Retrieve the parent of the entity being initialized, when
   /// the initialization itself is occurring within the context of a
   /// larger initialization.
   const InitializedEntity *getParent() const { return Parent; }
 
-  /// \brief Retrieve type being initialized.
+  /// Retrieve type being initialized.
   QualType getType() const { return Type; }
-  
-  /// \brief Retrieve complete type-source information for the object being 
+
+  /// Retrieve complete type-source information for the object being
   /// constructed, if known.
   TypeSourceInfo *getTypeSourceInfo() const {
     if (Kind == EK_Temporary || Kind == EK_CompoundLiteralInit)
       return TypeInfo;
-    
+
     return nullptr;
   }
-  
-  /// \brief Retrieve the name of the entity being initialized.
+
+  /// Retrieve the name of the entity being initialized.
   DeclarationName getName() const;
 
-  /// \brief Retrieve the variable, parameter, or field being
+  /// Retrieve the variable, parameter, or field being
   /// initialized.
   ValueDecl *getDecl() const;
-  
-  /// \brief Retrieve the ObjectiveC method being initialized.
+
+  /// Retrieve the ObjectiveC method being initialized.
   ObjCMethodDecl *getMethodDecl() const { return MethodDecl; }
 
-  /// \brief Determine whether this initialization allows the named return 
+  /// Determine whether this initialization allows the named return
   /// value optimization, which also applies to thrown objects.
   bool allowsNRVO() const;
 
@@ -422,52 +440,58 @@
             getKind() == EK_Parameter_CF_Audited);
   }
 
-  /// \brief Determine whether this initialization consumes the
+  /// Determine whether this initialization consumes the
   /// parameter.
   bool isParameterConsumed() const {
     assert(isParameterKind() && "Not a parameter");
     return (Parameter & 1);
   }
-                                  
-  /// \brief Retrieve the base specifier.
+
+  /// Retrieve the base specifier.
   const CXXBaseSpecifier *getBaseSpecifier() const {
     assert(getKind() == EK_Base && "Not a base specifier");
     return reinterpret_cast<const CXXBaseSpecifier *>(Base & ~0x1);
   }
 
-  /// \brief Return whether the base is an inherited virtual base.
+  /// Return whether the base is an inherited virtual base.
   bool isInheritedVirtualBase() const {
     assert(getKind() == EK_Base && "Not a base specifier");
     return Base & 0x1;
   }
 
-  /// \brief Determine whether this is an array new with an unknown bound.
+  /// Determine whether this is an array new with an unknown bound.
   bool isVariableLengthArrayNew() const {
     return getKind() == EK_New && dyn_cast_or_null<IncompleteArrayType>(
                                       getType()->getAsArrayTypeUnsafe());
   }
 
-  /// \brief Is this the implicit initialization of a member of a class from
+  /// Is this the implicit initialization of a member of a class from
   /// a defaulted constructor?
   bool isImplicitMemberInitializer() const {
     return getKind() == EK_Member && Variable.IsImplicitFieldInit;
   }
 
-  /// \brief Determine the location of the 'return' keyword when initializing
+  /// Is this the default member initializer of a member (specified inside
+  /// the class definition)?
+  bool isDefaultMemberInitializer() const {
+    return getKind() == EK_Member && Variable.IsDefaultMemberInit;
+  }
+
+  /// Determine the location of the 'return' keyword when initializing
   /// the result of a function call.
   SourceLocation getReturnLoc() const {
     assert(getKind() == EK_Result && "No 'return' location!");
     return SourceLocation::getFromRawEncoding(LocAndNRVO.Location);
   }
 
-  /// \brief Determine the location of the 'throw' keyword when initializing
+  /// Determine the location of the 'throw' keyword when initializing
   /// an exception object.
   SourceLocation getThrowLoc() const {
     assert(getKind() == EK_Exception && "No 'throw' location!");
     return SourceLocation::getFromRawEncoding(LocAndNRVO.Location);
   }
 
-  /// \brief If this is an array, vector, or complex number element, get the
+  /// If this is an array, vector, or complex number element, get the
   /// element's index.
   unsigned getElementIndex() const {
     assert(getKind() == EK_ArrayElement || getKind() == EK_VectorElement ||
@@ -475,7 +499,7 @@
     return Index;
   }
 
-  /// \brief If this is already the initializer for an array or vector
+  /// If this is already the initializer for an array or vector
   /// element, sets the element index.
   void setElementIndex(unsigned Index) {
     assert(getKind() == EK_ArrayElement || getKind() == EK_VectorElement ||
@@ -483,19 +507,19 @@
     this->Index = Index;
   }
 
-  /// \brief For a lambda capture, return the capture's name.
+  /// For a lambda capture, return the capture's name.
   StringRef getCapturedVarName() const {
     assert(getKind() == EK_LambdaCapture && "Not a lambda capture!");
     return Capture.VarID->getName();
   }
 
-  /// \brief Determine the location of the capture when initializing
+  /// Determine the location of the capture when initializing
   /// field from a captured variable in a lambda.
   SourceLocation getCaptureLoc() const {
     assert(getKind() == EK_LambdaCapture && "Not a lambda capture!");
     return SourceLocation::getFromRawEncoding(Capture.Location);
   }
-  
+
   void setParameterCFAudited() {
     Kind = EK_Parameter_CF_Audited;
   }
@@ -509,13 +533,13 @@
 private:
   unsigned dumpImpl(raw_ostream &OS) const;
 };
-  
-/// \brief Describes the kind of initialization being performed, along with 
+
+/// Describes the kind of initialization being performed, along with
 /// location information for tokens related to the initialization (equal sign,
 /// parentheses).
 class InitializationKind {
 public:
-  /// \brief The kind of initialization being performed.
+  /// The kind of initialization being performed.
   enum InitKind {
     /// Direct initialization
     IK_Direct,
@@ -532,9 +556,9 @@
     /// Value initialization
     IK_Value
   };
-  
+
 private:
-  /// \brief The context of the initialization.
+  /// The context of the initialization.
   enum InitContext {
     /// Normal context
     IC_Normal,
@@ -554,26 +578,26 @@
     /// Functional cast context
     IC_FunctionalCast
   };
-  
-  /// \brief The kind of initialization being performed.
+
+  /// The kind of initialization being performed.
   InitKind Kind : 8;
 
-  /// \brief The context of the initialization.
+  /// The context of the initialization.
   InitContext Context : 8;
-  
-  /// \brief The source locations involved in the initialization.
+
+  /// The source locations involved in the initialization.
   SourceLocation Locations[3];
-  
-  InitializationKind(InitKind Kind, InitContext Context, SourceLocation Loc1, 
+
+  InitializationKind(InitKind Kind, InitContext Context, SourceLocation Loc1,
                      SourceLocation Loc2, SourceLocation Loc3)
       : Kind(Kind), Context(Context) {
     Locations[0] = Loc1;
     Locations[1] = Loc2;
     Locations[2] = Loc3;
   }
-  
+
 public:
-  /// \brief Create a direct initialization.
+  /// Create a direct initialization.
   static InitializationKind CreateDirect(SourceLocation InitLoc,
                                          SourceLocation LParenLoc,
                                          SourceLocation RParenLoc) {
@@ -593,14 +617,14 @@
                               RBraceLoc);
   }
 
-  /// \brief Create a direct initialization due to a cast that isn't a C-style 
+  /// Create a direct initialization due to a cast that isn't a C-style
   /// or functional cast.
   static InitializationKind CreateCast(SourceRange TypeRange) {
     return InitializationKind(IK_Direct, IC_StaticCast, TypeRange.getBegin(),
                               TypeRange.getBegin(), TypeRange.getEnd());
   }
-  
-  /// \brief Create a direct initialization for a C-style cast.
+
+  /// Create a direct initialization for a C-style cast.
   static InitializationKind CreateCStyleCast(SourceLocation StartLoc,
                                              SourceRange TypeRange,
                                              bool InitList) {
@@ -611,7 +635,7 @@
                               TypeRange.getEnd());
   }
 
-  /// \brief Create a direct initialization for a functional cast.
+  /// Create a direct initialization for a functional cast.
   static InitializationKind CreateFunctionalCast(SourceRange TypeRange,
                                                  bool InitList) {
     return InitializationKind(InitList ? IK_DirectList : IK_Direct,
@@ -619,21 +643,21 @@
                               TypeRange.getBegin(), TypeRange.getEnd());
   }
 
-  /// \brief Create a copy initialization.
+  /// Create a copy initialization.
   static InitializationKind CreateCopy(SourceLocation InitLoc,
                                        SourceLocation EqualLoc,
                                        bool AllowExplicitConvs = false) {
-    return InitializationKind(IK_Copy, 
+    return InitializationKind(IK_Copy,
                               AllowExplicitConvs? IC_ExplicitConvs : IC_Normal,
                               InitLoc, EqualLoc, EqualLoc);
   }
-  
-  /// \brief Create a default initialization.
+
+  /// Create a default initialization.
   static InitializationKind CreateDefault(SourceLocation InitLoc) {
     return InitializationKind(IK_Default, IC_Normal, InitLoc, InitLoc, InitLoc);
   }
-  
-  /// \brief Create a value initialization.
+
+  /// Create a value initialization.
   static InitializationKind CreateValue(SourceLocation InitLoc,
                                         SourceLocation LParenLoc,
                                         SourceLocation RParenLoc,
@@ -642,56 +666,57 @@
                               InitLoc, LParenLoc, RParenLoc);
   }
 
-  /// \brief Create an initialization from an initializer (which, for direct
+  /// Create an initialization from an initializer (which, for direct
   /// initialization from a parenthesized list, will be a ParenListExpr).
   static InitializationKind CreateForInit(SourceLocation Loc, bool DirectInit,
                                           Expr *Init) {
     if (!Init) return CreateDefault(Loc);
-    if (!DirectInit) return CreateCopy(Loc, Init->getLocStart());
+    if (!DirectInit)
+      return CreateCopy(Loc, Init->getBeginLoc());
     if (isa<InitListExpr>(Init))
-      return CreateDirectList(Loc, Init->getLocStart(), Init->getLocEnd());
-    return CreateDirect(Loc, Init->getLocStart(), Init->getLocEnd());
+      return CreateDirectList(Loc, Init->getBeginLoc(), Init->getEndLoc());
+    return CreateDirect(Loc, Init->getBeginLoc(), Init->getEndLoc());
   }
-  
-  /// \brief Determine the initialization kind.
+
+  /// Determine the initialization kind.
   InitKind getKind() const {
     return Kind;
   }
-  
-  /// \brief Determine whether this initialization is an explicit cast.
+
+  /// Determine whether this initialization is an explicit cast.
   bool isExplicitCast() const {
     return Context >= IC_StaticCast;
   }
-  
-  /// \brief Determine whether this initialization is a C-style cast.
-  bool isCStyleOrFunctionalCast() const { 
-    return Context >= IC_CStyleCast; 
+
+  /// Determine whether this initialization is a C-style cast.
+  bool isCStyleOrFunctionalCast() const {
+    return Context >= IC_CStyleCast;
   }
 
-  /// \brief Determine whether this is a C-style cast.
+  /// Determine whether this is a C-style cast.
   bool isCStyleCast() const {
     return Context == IC_CStyleCast;
   }
 
-  /// \brief Determine whether this is a functional-style cast.
+  /// Determine whether this is a functional-style cast.
   bool isFunctionalCast() const {
     return Context == IC_FunctionalCast;
   }
 
-  /// \brief Determine whether this initialization is an implicit
+  /// Determine whether this initialization is an implicit
   /// value-initialization, e.g., as occurs during aggregate
   /// initialization.
   bool isImplicitValueInit() const { return Context == IC_Implicit; }
 
-  /// \brief Retrieve the location at which initialization is occurring.
+  /// Retrieve the location at which initialization is occurring.
   SourceLocation getLocation() const { return Locations[0]; }
-  
-  /// \brief Retrieve the source range that covers the initialization.
-  SourceRange getRange() const { 
+
+  /// Retrieve the source range that covers the initialization.
+  SourceRange getRange() const {
     return SourceRange(Locations[0], Locations[2]);
   }
-  
-  /// \brief Retrieve the location of the equal sign for copy initialization
+
+  /// Retrieve the location of the equal sign for copy initialization
   /// (if present).
   SourceLocation getEqualLoc() const {
     assert(Kind == IK_Copy && "Only copy initialization has an '='");
@@ -700,11 +725,11 @@
 
   bool isCopyInit() const { return Kind == IK_Copy; }
 
-  /// \brief Retrieve whether this initialization allows the use of explicit
+  /// Retrieve whether this initialization allows the use of explicit
   ///        constructors.
   bool AllowExplicit() const { return !isCopyInit(); }
 
-  /// \brief Retrieve whether this initialization allows the use of explicit
+  /// Retrieve whether this initialization allows the use of explicit
   /// conversion functions when binding a reference. If the reference is the
   /// first parameter in a copy or move constructor, such conversions are
   /// permitted even though we are performing copy-initialization.
@@ -717,8 +742,8 @@
   bool hasParenOrBraceRange() const {
     return Kind == IK_Direct || Kind == IK_Value || Kind == IK_DirectList;
   }
-  
-  /// \brief Retrieve the source range containing the locations of the open
+
+  /// Retrieve the source range containing the locations of the open
   /// and closing parentheses or braces for value, direct, and direct list
   /// initializations.
   SourceRange getParenOrBraceRange() const {
@@ -729,159 +754,159 @@
   }
 };
 
-/// \brief Describes the sequence of initializations required to initialize
+/// Describes the sequence of initializations required to initialize
 /// a given object or reference with a set of arguments.
 class InitializationSequence {
 public:
-  /// \brief Describes the kind of initialization sequence computed.
+  /// Describes the kind of initialization sequence computed.
   enum SequenceKind {
-    /// \brief A failed initialization sequence. The failure kind tells what
+    /// A failed initialization sequence. The failure kind tells what
     /// happened.
     FailedSequence = 0,
 
-    /// \brief A dependent initialization, which could not be
+    /// A dependent initialization, which could not be
     /// type-checked due to the presence of dependent types or
     /// dependently-typed expressions.
     DependentSequence,
 
-    /// \brief A normal sequence.
+    /// A normal sequence.
     NormalSequence
   };
-  
-  /// \brief Describes the kind of a particular step in an initialization
+
+  /// Describes the kind of a particular step in an initialization
   /// sequence.
   enum StepKind {
-    /// \brief Resolve the address of an overloaded function to a specific
+    /// Resolve the address of an overloaded function to a specific
     /// function declaration.
     SK_ResolveAddressOfOverloadedFunction,
 
-    /// \brief Perform a derived-to-base cast, producing an rvalue.
+    /// Perform a derived-to-base cast, producing an rvalue.
     SK_CastDerivedToBaseRValue,
 
-    /// \brief Perform a derived-to-base cast, producing an xvalue.
+    /// Perform a derived-to-base cast, producing an xvalue.
     SK_CastDerivedToBaseXValue,
 
-    /// \brief Perform a derived-to-base cast, producing an lvalue.
+    /// Perform a derived-to-base cast, producing an lvalue.
     SK_CastDerivedToBaseLValue,
 
-    /// \brief Reference binding to an lvalue.
+    /// Reference binding to an lvalue.
     SK_BindReference,
 
-    /// \brief Reference binding to a temporary.
+    /// Reference binding to a temporary.
     SK_BindReferenceToTemporary,
 
-    /// \brief An optional copy of a temporary object to another
+    /// An optional copy of a temporary object to another
     /// temporary object, which is permitted (but not required) by
     /// C++98/03 but not C++0x.
     SK_ExtraneousCopyToTemporary,
 
-    /// \brief Direct-initialization from a reference-related object in the
+    /// Direct-initialization from a reference-related object in the
     /// final stage of class copy-initialization.
     SK_FinalCopy,
 
-    /// \brief Perform a user-defined conversion, either via a conversion
+    /// Perform a user-defined conversion, either via a conversion
     /// function or via a constructor.
     SK_UserConversion,
 
-    /// \brief Perform a qualification conversion, producing an rvalue.
+    /// Perform a qualification conversion, producing an rvalue.
     SK_QualificationConversionRValue,
 
-    /// \brief Perform a qualification conversion, producing an xvalue.
+    /// Perform a qualification conversion, producing an xvalue.
     SK_QualificationConversionXValue,
 
-    /// \brief Perform a qualification conversion, producing an lvalue.
+    /// Perform a qualification conversion, producing an lvalue.
     SK_QualificationConversionLValue,
 
-    /// \brief Perform a conversion adding _Atomic to a type.
+    /// Perform a conversion adding _Atomic to a type.
     SK_AtomicConversion,
 
-    /// \brief Perform a load from a glvalue, producing an rvalue.
+    /// Perform a load from a glvalue, producing an rvalue.
     SK_LValueToRValue,
 
-    /// \brief Perform an implicit conversion sequence.
+    /// Perform an implicit conversion sequence.
     SK_ConversionSequence,
 
-    /// \brief Perform an implicit conversion sequence without narrowing.
+    /// Perform an implicit conversion sequence without narrowing.
     SK_ConversionSequenceNoNarrowing,
 
-    /// \brief Perform list-initialization without a constructor.
+    /// Perform list-initialization without a constructor.
     SK_ListInitialization,
 
-    /// \brief Unwrap the single-element initializer list for a reference.
+    /// Unwrap the single-element initializer list for a reference.
     SK_UnwrapInitList,
 
-    /// \brief Rewrap the single-element initializer list for a reference.
+    /// Rewrap the single-element initializer list for a reference.
     SK_RewrapInitList,
 
-    /// \brief Perform initialization via a constructor.
+    /// Perform initialization via a constructor.
     SK_ConstructorInitialization,
 
-    /// \brief Perform initialization via a constructor, taking arguments from
+    /// Perform initialization via a constructor, taking arguments from
     /// a single InitListExpr.
     SK_ConstructorInitializationFromList,
 
-    /// \brief Zero-initialize the object
+    /// Zero-initialize the object
     SK_ZeroInitialization,
 
-    /// \brief C assignment
+    /// C assignment
     SK_CAssignment,
 
-    /// \brief Initialization by string
+    /// Initialization by string
     SK_StringInit,
 
-    /// \brief An initialization that "converts" an Objective-C object
+    /// An initialization that "converts" an Objective-C object
     /// (not a point to an object) to another Objective-C object type.
     SK_ObjCObjectConversion,
 
-    /// \brief Array indexing for initialization by elementwise copy.
+    /// Array indexing for initialization by elementwise copy.
     SK_ArrayLoopIndex,
 
-    /// \brief Array initialization by elementwise copy.
+    /// Array initialization by elementwise copy.
     SK_ArrayLoopInit,
 
-    /// \brief Array initialization (from an array rvalue).
+    /// Array initialization (from an array rvalue).
     SK_ArrayInit,
 
-    /// \brief Array initialization (from an array rvalue) as a GNU extension.
+    /// Array initialization (from an array rvalue) as a GNU extension.
     SK_GNUArrayInit,
 
-    /// \brief Array initialization from a parenthesized initializer list.
+    /// Array initialization from a parenthesized initializer list.
     /// This is a GNU C++ extension.
     SK_ParenthesizedArrayInit,
 
-    /// \brief Pass an object by indirect copy-and-restore.
+    /// Pass an object by indirect copy-and-restore.
     SK_PassByIndirectCopyRestore,
 
-    /// \brief Pass an object by indirect restore.
+    /// Pass an object by indirect restore.
     SK_PassByIndirectRestore,
 
-    /// \brief Produce an Objective-C object pointer.
+    /// Produce an Objective-C object pointer.
     SK_ProduceObjCObject,
 
-    /// \brief Construct a std::initializer_list from an initializer list.
+    /// Construct a std::initializer_list from an initializer list.
     SK_StdInitializerList,
 
-    /// \brief Perform initialization via a constructor taking a single
+    /// Perform initialization via a constructor taking a single
     /// std::initializer_list argument.
     SK_StdInitializerListConstructorCall,
 
-    /// \brief Initialize an OpenCL sampler from an integer.
+    /// Initialize an OpenCL sampler from an integer.
     SK_OCLSamplerInit,
 
-    /// \brief Initialize queue_t from 0.
+    /// Initialize queue_t from 0.
     SK_OCLZeroQueue,
 
-    /// \brief Passing zero to a function where OpenCL event_t is expected.
+    /// Passing zero to a function where OpenCL event_t is expected.
     SK_OCLZeroEvent
   };
-  
-  /// \brief A single step in the initialization sequence.
+
+  /// A single step in the initialization sequence.
   class Step {
   public:
-    /// \brief The kind of conversion or initialization step we are taking.
+    /// The kind of conversion or initialization step we are taking.
     StepKind Kind;
-    
-    // \brief The type that results from this initialization.
+
+    // The type that results from this initialization.
     QualType Type;
 
     struct F {
@@ -891,8 +916,8 @@
     };
 
     union {
-      /// \brief When Kind == SK_ResolvedOverloadedFunction or Kind ==
-      /// SK_UserConversion, the function that the expression should be 
+      /// When Kind == SK_ResolvedOverloadedFunction or Kind ==
+      /// SK_UserConversion, the function that the expression should be
       /// resolved to or the conversion function to call, respectively.
       /// When Kind == SK_ConstructorInitialization or SK_ListConstruction,
       /// the constructor to be called.
@@ -903,161 +928,167 @@
       /// For construct decls, the naming class is the target type.
       struct F Function;
 
-      /// \brief When Kind = SK_ConversionSequence, the implicit conversion
+      /// When Kind = SK_ConversionSequence, the implicit conversion
       /// sequence.
       ImplicitConversionSequence *ICS;
 
-      /// \brief When Kind = SK_RewrapInitList, the syntactic form of the
+      /// When Kind = SK_RewrapInitList, the syntactic form of the
       /// wrapping list.
       InitListExpr *WrappingSyntacticList;
     };
 
     void Destroy();
   };
-  
+
 private:
-  /// \brief The kind of initialization sequence computed.
+  /// The kind of initialization sequence computed.
   enum SequenceKind SequenceKind;
-  
-  /// \brief Steps taken by this initialization.
+
+  /// Steps taken by this initialization.
   SmallVector<Step, 4> Steps;
-  
+
 public:
-  /// \brief Describes why initialization failed.
+  /// Describes why initialization failed.
   enum FailureKind {
-    /// \brief Too many initializers provided for a reference.
+    /// Too many initializers provided for a reference.
     FK_TooManyInitsForReference,
 
-    /// \brief Reference initialized from a parenthesized initializer list.
+    /// Reference initialized from a parenthesized initializer list.
     FK_ParenthesizedListInitForReference,
 
-    /// \brief Array must be initialized with an initializer list.
+    /// Array must be initialized with an initializer list.
     FK_ArrayNeedsInitList,
 
-    /// \brief Array must be initialized with an initializer list or a 
+    /// Array must be initialized with an initializer list or a
     /// string literal.
     FK_ArrayNeedsInitListOrStringLiteral,
 
-    /// \brief Array must be initialized with an initializer list or a
+    /// Array must be initialized with an initializer list or a
     /// wide string literal.
     FK_ArrayNeedsInitListOrWideStringLiteral,
 
-    /// \brief Initializing a wide char array with narrow string literal.
+    /// Initializing a wide char array with narrow string literal.
     FK_NarrowStringIntoWideCharArray,
 
-    /// \brief Initializing char array with wide string literal.
+    /// Initializing char array with wide string literal.
     FK_WideStringIntoCharArray,
 
-    /// \brief Initializing wide char array with incompatible wide string
+    /// Initializing wide char array with incompatible wide string
     /// literal.
     FK_IncompatWideStringIntoWideChar,
 
-    /// \brief Array type mismatch.
+    /// Initializing char8_t array with plain string literal.
+    FK_PlainStringIntoUTF8Char,
+
+    /// Initializing char array with UTF-8 string literal.
+    FK_UTF8StringIntoPlainChar,
+
+    /// Array type mismatch.
     FK_ArrayTypeMismatch,
 
-    /// \brief Non-constant array initializer
+    /// Non-constant array initializer
     FK_NonConstantArrayInit,
 
-    /// \brief Cannot resolve the address of an overloaded function.
+    /// Cannot resolve the address of an overloaded function.
     FK_AddressOfOverloadFailed,
 
-    /// \brief Overloading due to reference initialization failed.
+    /// Overloading due to reference initialization failed.
     FK_ReferenceInitOverloadFailed,
 
-    /// \brief Non-const lvalue reference binding to a temporary.
+    /// Non-const lvalue reference binding to a temporary.
     FK_NonConstLValueReferenceBindingToTemporary,
 
-    /// \brief Non-const lvalue reference binding to a bit-field.
+    /// Non-const lvalue reference binding to a bit-field.
     FK_NonConstLValueReferenceBindingToBitfield,
 
-    /// \brief Non-const lvalue reference binding to a vector element.
+    /// Non-const lvalue reference binding to a vector element.
     FK_NonConstLValueReferenceBindingToVectorElement,
 
-    /// \brief Non-const lvalue reference binding to an lvalue of unrelated
+    /// Non-const lvalue reference binding to an lvalue of unrelated
     /// type.
     FK_NonConstLValueReferenceBindingToUnrelated,
 
-    /// \brief Rvalue reference binding to an lvalue.
+    /// Rvalue reference binding to an lvalue.
     FK_RValueReferenceBindingToLValue,
 
-    /// \brief Reference binding drops qualifiers.
+    /// Reference binding drops qualifiers.
     FK_ReferenceInitDropsQualifiers,
 
-    /// \brief Reference binding failed.
+    /// Reference binding failed.
     FK_ReferenceInitFailed,
 
-    /// \brief Implicit conversion failed.
+    /// Implicit conversion failed.
     FK_ConversionFailed,
 
-    /// \brief Implicit conversion failed.
+    /// Implicit conversion failed.
     FK_ConversionFromPropertyFailed,
 
-    /// \brief Too many initializers for scalar
+    /// Too many initializers for scalar
     FK_TooManyInitsForScalar,
 
-    /// \brief Scalar initialized from a parenthesized initializer list.
+    /// Scalar initialized from a parenthesized initializer list.
     FK_ParenthesizedListInitForScalar,
 
-    /// \brief Reference initialization from an initializer list
+    /// Reference initialization from an initializer list
     FK_ReferenceBindingToInitList,
 
-    /// \brief Initialization of some unused destination type with an
+    /// Initialization of some unused destination type with an
     /// initializer list.
     FK_InitListBadDestinationType,
 
-    /// \brief Overloading for a user-defined conversion failed.
+    /// Overloading for a user-defined conversion failed.
     FK_UserConversionOverloadFailed,
 
-    /// \brief Overloading for initialization by constructor failed.
+    /// Overloading for initialization by constructor failed.
     FK_ConstructorOverloadFailed,
 
-    /// \brief Overloading for list-initialization by constructor failed.
+    /// Overloading for list-initialization by constructor failed.
     FK_ListConstructorOverloadFailed,
 
-    /// \brief Default-initialization of a 'const' object.
+    /// Default-initialization of a 'const' object.
     FK_DefaultInitOfConst,
 
-    /// \brief Initialization of an incomplete type.
+    /// Initialization of an incomplete type.
     FK_Incomplete,
 
-    /// \brief Variable-length array must not have an initializer.
+    /// Variable-length array must not have an initializer.
     FK_VariableLengthArrayHasInitializer,
 
-    /// \brief List initialization failed at some point.
+    /// List initialization failed at some point.
     FK_ListInitializationFailed,
 
-    /// \brief Initializer has a placeholder type which cannot be
+    /// Initializer has a placeholder type which cannot be
     /// resolved by initialization.
     FK_PlaceholderType,
 
-    /// \brief Trying to take the address of a function that doesn't support
+    /// Trying to take the address of a function that doesn't support
     /// having its address taken.
     FK_AddressOfUnaddressableFunction,
 
-    /// \brief List-copy-initialization chose an explicit constructor.
+    /// List-copy-initialization chose an explicit constructor.
     FK_ExplicitConstructor,
   };
-  
+
 private:
-  /// \brief The reason why initialization failed.
+  /// The reason why initialization failed.
   FailureKind Failure;
 
-  /// \brief The failed result of overload resolution.
+  /// The failed result of overload resolution.
   OverloadingResult FailedOverloadResult;
-  
-  /// \brief The candidate set created when initialization failed.
+
+  /// The candidate set created when initialization failed.
   OverloadCandidateSet FailedCandidateSet;
 
-  /// \brief The incomplete type that caused a failure.
+  /// The incomplete type that caused a failure.
   QualType FailedIncompleteType;
 
-  /// \brief The fixit that needs to be applied to make this initialization
+  /// The fixit that needs to be applied to make this initialization
   /// succeed.
   std::string ZeroInitializationFixit;
   SourceLocation ZeroInitializationFixitLoc;
 
 public:
-  /// \brief Call for initializations are invalid but that would be valid
+  /// Call for initializations are invalid but that would be valid
   /// zero initialzations if Fixit was applied.
   void SetZeroInitializationFixit(const std::string& Fixit, SourceLocation L) {
     ZeroInitializationFixit = Fixit;
@@ -1065,16 +1096,16 @@
   }
 
 private:
-  /// \brief Prints a follow-up note that highlights the location of
+  /// Prints a follow-up note that highlights the location of
   /// the initialized entity, if it's remote.
   void PrintInitLocationNote(Sema &S, const InitializedEntity &Entity);
 
 public:
-  /// \brief Try to perform initialization of the given entity, creating a 
+  /// Try to perform initialization of the given entity, creating a
   /// record of the steps required to perform the initialization.
   ///
   /// The generated initialization sequence will either contain enough
-  /// information to diagnose 
+  /// information to diagnose
   ///
   /// \param S the semantic analysis object.
   ///
@@ -1089,7 +1120,7 @@
   ///        narrowing conversions in C++11 onwards.
   /// \param TreatUnavailableAsInvalid true if we want to treat unavailable
   ///        as invalid.
-  InitializationSequence(Sema &S, 
+  InitializationSequence(Sema &S,
                          const InitializedEntity &Entity,
                          const InitializationKind &Kind,
                          MultiExprArg Args,
@@ -1100,8 +1131,8 @@
                       bool TopLevelOfInitList, bool TreatUnavailableAsInvalid);
 
   ~InitializationSequence();
-  
-  /// \brief Perform the actual initialization of the given entity based on
+
+  /// Perform the actual initialization of the given entity based on
   /// the computed initialization sequence.
   ///
   /// \param S the semantic analysis object.
@@ -1127,26 +1158,26 @@
                      const InitializationKind &Kind,
                      MultiExprArg Args,
                      QualType *ResultType = nullptr);
-  
-  /// \brief Diagnose an potentially-invalid initialization sequence.
+
+  /// Diagnose an potentially-invalid initialization sequence.
   ///
-  /// \returns true if the initialization sequence was ill-formed, 
+  /// \returns true if the initialization sequence was ill-formed,
   /// false otherwise.
-  bool Diagnose(Sema &S, 
+  bool Diagnose(Sema &S,
                 const InitializedEntity &Entity,
                 const InitializationKind &Kind,
                 ArrayRef<Expr *> Args);
-  
-  /// \brief Determine the kind of initialization sequence computed.
+
+  /// Determine the kind of initialization sequence computed.
   enum SequenceKind getKind() const { return SequenceKind; }
-  
-  /// \brief Set the kind of sequence computed.
+
+  /// Set the kind of sequence computed.
   void setSequenceKind(enum SequenceKind SK) { SequenceKind = SK; }
-  
-  /// \brief Determine whether the initialization sequence is valid.
+
+  /// Determine whether the initialization sequence is valid.
   explicit operator bool() const { return !Failed(); }
 
-  /// \brief Determine whether the initialization sequence is invalid.
+  /// Determine whether the initialization sequence is invalid.
   bool Failed() const { return SequenceKind == FailedSequence; }
 
   using step_iterator = SmallVectorImpl<Step>::const_iterator;
@@ -1158,18 +1189,18 @@
 
   step_range steps() const { return {step_begin(), step_end()}; }
 
-  /// \brief Determine whether this initialization is a direct reference 
+  /// Determine whether this initialization is a direct reference
   /// binding (C++ [dcl.init.ref]).
   bool isDirectReferenceBinding() const;
-  
-  /// \brief Determine whether this initialization failed due to an ambiguity.
+
+  /// Determine whether this initialization failed due to an ambiguity.
   bool isAmbiguous() const;
-  
-  /// \brief Determine whether this initialization is direct call to a 
+
+  /// Determine whether this initialization is direct call to a
   /// constructor.
   bool isConstructorInitialization() const;
 
-  /// \brief Returns whether the last step in this initialization sequence is a
+  /// Returns whether the last step in this initialization sequence is a
   /// narrowing conversion, defined by C++0x [dcl.init.list]p7.
   ///
   /// If this function returns true, *isInitializerConstant will be set to
@@ -1180,7 +1211,7 @@
                          bool *isInitializerConstant,
                          APValue *ConstantValue) const;
 
-  /// \brief Add a new step in the initialization that resolves the address
+  /// Add a new step in the initialization that resolves the address
   /// of an overloaded function to a specific function declaration.
   ///
   /// \param Function the function to which the overloaded function reference
@@ -1189,7 +1220,7 @@
                                         DeclAccessPair Found,
                                         bool HadMultipleCandidates);
 
-  /// \brief Add a new step in the initialization that performs a derived-to-
+  /// Add a new step in the initialization that performs a derived-to-
   /// base cast.
   ///
   /// \param BaseType the base type to which we will be casting.
@@ -1198,15 +1229,15 @@
   /// rvalue, an xvalue, or an lvalue.
   void AddDerivedToBaseCastStep(QualType BaseType,
                                 ExprValueKind Category);
-     
-  /// \brief Add a new step binding a reference to an object.
+
+  /// Add a new step binding a reference to an object.
   ///
   /// \param BindingTemporary True if we are binding a reference to a temporary
   /// object (thereby extending its lifetime); false if we are binding to an
   /// lvalue or an lvalue treated as an rvalue.
   void AddReferenceBindingStep(QualType T, bool BindingTemporary);
 
-  /// \brief Add a new step that makes an extraneous copy of the input
+  /// Add a new step that makes an extraneous copy of the input
   /// to a temporary of the same class type.
   ///
   /// This extraneous copy only occurs during reference binding in
@@ -1218,40 +1249,40 @@
   /// \param T The type of the temporary being created.
   void AddExtraneousCopyToTemporary(QualType T);
 
-  /// \brief Add a new step that makes a copy of the input to an object of
+  /// Add a new step that makes a copy of the input to an object of
   /// the given type, as the final step in class copy-initialization.
   void AddFinalCopy(QualType T);
 
-  /// \brief Add a new step invoking a conversion function, which is either
+  /// Add a new step invoking a conversion function, which is either
   /// a constructor or a conversion function.
   void AddUserConversionStep(FunctionDecl *Function,
                              DeclAccessPair FoundDecl,
                              QualType T,
                              bool HadMultipleCandidates);
 
-  /// \brief Add a new step that performs a qualification conversion to the
+  /// Add a new step that performs a qualification conversion to the
   /// given type.
   void AddQualificationConversionStep(QualType Ty,
                                      ExprValueKind Category);
 
-  /// \brief Add a new step that performs conversion from non-atomic to atomic
+  /// Add a new step that performs conversion from non-atomic to atomic
   /// type.
   void AddAtomicConversionStep(QualType Ty);
 
-  /// \brief Add a new step that performs a load of the given type.
+  /// Add a new step that performs a load of the given type.
   ///
   /// Although the term "LValueToRValue" is conventional, this applies to both
   /// lvalues and xvalues.
   void AddLValueToRValueStep(QualType Ty);
 
-  /// \brief Add a new step that applies an implicit conversion sequence.
+  /// Add a new step that applies an implicit conversion sequence.
   void AddConversionSequenceStep(const ImplicitConversionSequence &ICS,
                                  QualType T, bool TopLevelOfInitList = false);
 
-  /// \brief Add a list-initialization step.
+  /// Add a list-initialization step.
   void AddListInitializationStep(QualType T);
 
-  /// \brief Add a constructor-initialization step.
+  /// Add a constructor-initialization step.
   ///
   /// \param FromInitList The constructor call is syntactically an initializer
   /// list.
@@ -1262,104 +1293,104 @@
                                         bool HadMultipleCandidates,
                                         bool FromInitList, bool AsInitList);
 
-  /// \brief Add a zero-initialization step.
+  /// Add a zero-initialization step.
   void AddZeroInitializationStep(QualType T);
 
-  /// \brief Add a C assignment step.
+  /// Add a C assignment step.
   //
   // FIXME: It isn't clear whether this should ever be needed;
   // ideally, we would handle everything needed in C in the common
   // path. However, that isn't the case yet.
   void AddCAssignmentStep(QualType T);
 
-  /// \brief Add a string init step.
+  /// Add a string init step.
   void AddStringInitStep(QualType T);
 
-  /// \brief Add an Objective-C object conversion step, which is
+  /// Add an Objective-C object conversion step, which is
   /// always a no-op.
   void AddObjCObjectConversionStep(QualType T);
 
-  /// \brief Add an array initialization loop step.
+  /// Add an array initialization loop step.
   void AddArrayInitLoopStep(QualType T, QualType EltTy);
 
-  /// \brief Add an array initialization step.
+  /// Add an array initialization step.
   void AddArrayInitStep(QualType T, bool IsGNUExtension);
 
-  /// \brief Add a parenthesized array initialization step.
+  /// Add a parenthesized array initialization step.
   void AddParenthesizedArrayInitStep(QualType T);
 
-  /// \brief Add a step to pass an object by indirect copy-restore.
+  /// Add a step to pass an object by indirect copy-restore.
   void AddPassByIndirectCopyRestoreStep(QualType T, bool shouldCopy);
 
-  /// \brief Add a step to "produce" an Objective-C object (by
+  /// Add a step to "produce" an Objective-C object (by
   /// retaining it).
   void AddProduceObjCObjectStep(QualType T);
 
-  /// \brief Add a step to construct a std::initializer_list object from an
+  /// Add a step to construct a std::initializer_list object from an
   /// initializer list.
   void AddStdInitializerListConstructionStep(QualType T);
 
-  /// \brief Add a step to initialize an OpenCL sampler from an integer
+  /// Add a step to initialize an OpenCL sampler from an integer
   /// constant.
   void AddOCLSamplerInitStep(QualType T);
 
-  /// \brief Add a step to initialize an OpenCL event_t from a NULL
+  /// Add a step to initialize an OpenCL event_t from a NULL
   /// constant.
   void AddOCLZeroEventStep(QualType T);
 
-  /// \brief Add a step to initialize an OpenCL queue_t from 0.
+  /// Add a step to initialize an OpenCL queue_t from 0.
   void AddOCLZeroQueueStep(QualType T);
 
-  /// \brief Add steps to unwrap a initializer list for a reference around a
+  /// Add steps to unwrap a initializer list for a reference around a
   /// single element and rewrap it at the end.
   void RewrapReferenceInitList(QualType T, InitListExpr *Syntactic);
 
-  /// \brief Note that this initialization sequence failed.
+  /// Note that this initialization sequence failed.
   void SetFailed(FailureKind Failure) {
     SequenceKind = FailedSequence;
     this->Failure = Failure;
     assert((Failure != FK_Incomplete || !FailedIncompleteType.isNull()) &&
            "Incomplete type failure requires a type!");
   }
-  
-  /// \brief Note that this initialization sequence failed due to failed
+
+  /// Note that this initialization sequence failed due to failed
   /// overload resolution.
   void SetOverloadFailure(FailureKind Failure, OverloadingResult Result);
-  
-  /// \brief Retrieve a reference to the candidate set when overload
+
+  /// Retrieve a reference to the candidate set when overload
   /// resolution fails.
   OverloadCandidateSet &getFailedCandidateSet() {
     return FailedCandidateSet;
   }
 
-  /// \brief Get the overloading result, for when the initialization
+  /// Get the overloading result, for when the initialization
   /// sequence failed due to a bad overload.
   OverloadingResult getFailedOverloadResult() const {
     return FailedOverloadResult;
   }
 
-  /// \brief Note that this initialization sequence failed due to an
+  /// Note that this initialization sequence failed due to an
   /// incomplete type.
   void setIncompleteTypeFailure(QualType IncompleteType) {
     FailedIncompleteType = IncompleteType;
     SetFailed(FK_Incomplete);
   }
 
-  /// \brief Determine why initialization failed.
+  /// Determine why initialization failed.
   FailureKind getFailureKind() const {
     assert(Failed() && "Not an initialization failure!");
     return Failure;
   }
 
-  /// \brief Dump a representation of this initialization sequence to 
+  /// Dump a representation of this initialization sequence to
   /// the given stream, for debugging purposes.
   void dump(raw_ostream &OS) const;
-  
-  /// \brief Dump a representation of this initialization sequence to 
+
+  /// Dump a representation of this initialization sequence to
   /// standard error, for debugging purposes.
   void dump() const;
 };
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_SEMA_INITIALIZATION_H
diff --git a/linux-x64/clang/include/clang/Sema/Lookup.h b/linux-x64/clang/include/clang/Sema/Lookup.h
index a151bda..e28b847 100644
--- a/linux-x64/clang/include/clang/Sema/Lookup.h
+++ b/linux-x64/clang/include/clang/Sema/Lookup.h
@@ -37,7 +37,7 @@
 
 class CXXBasePaths;
 
-/// @brief Represents the results of name lookup.
+/// Represents the results of name lookup.
 ///
 /// An instance of the LookupResult class captures the results of a
 /// single name lookup, which can return no result (nothing found),
@@ -47,28 +47,28 @@
 class LookupResult {
 public:
   enum LookupResultKind {
-    /// @brief No entity found met the criteria.
+    /// No entity found met the criteria.
     NotFound = 0,
 
-    /// @brief No entity found met the criteria within the current 
-    /// instantiation,, but there were dependent base classes of the 
+    /// No entity found met the criteria within the current
+    /// instantiation,, but there were dependent base classes of the
     /// current instantiation that could not be searched.
     NotFoundInCurrentInstantiation,
-    
-    /// @brief Name lookup found a single declaration that met the
+
+    /// Name lookup found a single declaration that met the
     /// criteria.  getFoundDecl() will return this declaration.
     Found,
 
-    /// @brief Name lookup found a set of overloaded functions that
+    /// Name lookup found a set of overloaded functions that
     /// met the criteria.
     FoundOverloaded,
 
-    /// @brief Name lookup found an unresolvable value declaration
+    /// Name lookup found an unresolvable value declaration
     /// and cannot yet complete.  This only happens in C++ dependent
     /// contexts with dependent using declarations.
     FoundUnresolvedValue,
 
-    /// @brief Name lookup results in an ambiguity; use
+    /// Name lookup results in an ambiguity; use
     /// getAmbiguityKind to figure out what kind of ambiguity
     /// we have.
     Ambiguous
@@ -232,7 +232,7 @@
     return NameInfo;
   }
 
-  /// \brief Sets the name info to look up.
+  /// Sets the name info to look up.
   void setLookupNameInfo(const DeclarationNameInfo &NameInfo) {
     this->NameInfo = NameInfo;
   }
@@ -242,7 +242,7 @@
     return NameInfo.getName();
   }
 
-  /// \brief Sets the name to look up.
+  /// Sets the name to look up.
   void setLookupName(DeclarationName Name) {
     NameInfo.setName(Name);
   }
@@ -268,13 +268,13 @@
            Redecl ? Sema::ForVisibleRedeclaration : Sema::NotForRedeclaration;
   }
 
-  /// \brief Specify whether hidden declarations are visible, e.g.,
+  /// Specify whether hidden declarations are visible, e.g.,
   /// for recovery reasons.
   void setAllowHidden(bool AH) {
     AllowHidden = AH;
   }
 
-  /// \brief Determine whether this lookup is permitted to see hidden
+  /// Determine whether this lookup is permitted to see hidden
   /// declarations, such as those in modules that have not yet been imported.
   bool isHiddenDeclarationVisible(NamedDecl *ND) const {
     return AllowHidden ||
@@ -324,16 +324,16 @@
   iterator begin() const { return iterator(Decls.begin()); }
   iterator end() const { return iterator(Decls.end()); }
 
-  /// \brief Return true if no decls were found
+  /// Return true if no decls were found
   bool empty() const { return Decls.empty(); }
 
-  /// \brief Return the base paths structure that's associated with
+  /// Return the base paths structure that's associated with
   /// these results, or null if none is.
   CXXBasePaths *getBasePaths() const {
     return Paths;
   }
 
-  /// \brief Determine whether the given declaration is visible to the
+  /// Determine whether the given declaration is visible to the
   /// program.
   static bool isVisible(Sema &SemaRef, NamedDecl *D) {
     // If this declaration is not hidden, it's visible.
@@ -345,7 +345,7 @@
     return isVisibleSlow(SemaRef, D);
   }
 
-  /// \brief Retrieve the accepted (re)declaration of the given declaration,
+  /// Retrieve the accepted (re)declaration of the given declaration,
   /// if there is one.
   NamedDecl *getAcceptableDecl(NamedDecl *D) const {
     if (!D->isInIdentifierNamespace(IDNS))
@@ -362,18 +362,18 @@
   NamedDecl *getAcceptableDeclSlow(NamedDecl *D) const;
 
 public:
-  /// \brief Returns the identifier namespace mask for this lookup.
+  /// Returns the identifier namespace mask for this lookup.
   unsigned getIdentifierNamespace() const {
     return IDNS;
   }
 
-  /// \brief Returns whether these results arose from performing a
+  /// Returns whether these results arose from performing a
   /// lookup into a class.
   bool isClassLookup() const {
     return NamingClass != nullptr;
   }
 
-  /// \brief Returns the 'naming class' for this lookup, i.e. the
+  /// Returns the 'naming class' for this lookup, i.e. the
   /// class which was looked into to find these results.
   ///
   /// C++0x [class.access.base]p5:
@@ -393,72 +393,72 @@
     return NamingClass;
   }
 
-  /// \brief Sets the 'naming class' for this lookup.
+  /// Sets the 'naming class' for this lookup.
   void setNamingClass(CXXRecordDecl *Record) {
     NamingClass = Record;
   }
 
-  /// \brief Returns the base object type associated with this lookup;
+  /// Returns the base object type associated with this lookup;
   /// important for [class.protected].  Most lookups do not have an
   /// associated base object.
   QualType getBaseObjectType() const {
     return BaseObjectType;
   }
 
-  /// \brief Sets the base object type for this lookup.
+  /// Sets the base object type for this lookup.
   void setBaseObjectType(QualType T) {
     BaseObjectType = T;
   }
 
-  /// \brief Add a declaration to these results with its natural access.
+  /// Add a declaration to these results with its natural access.
   /// Does not test the acceptance criteria.
   void addDecl(NamedDecl *D) {
     addDecl(D, D->getAccess());
   }
 
-  /// \brief Add a declaration to these results with the given access.
+  /// Add a declaration to these results with the given access.
   /// Does not test the acceptance criteria.
   void addDecl(NamedDecl *D, AccessSpecifier AS) {
     Decls.addDecl(D, AS);
     ResultKind = Found;
   }
 
-  /// \brief Add all the declarations from another set of lookup
+  /// Add all the declarations from another set of lookup
   /// results.
   void addAllDecls(const LookupResult &Other) {
     Decls.append(Other.Decls.begin(), Other.Decls.end());
     ResultKind = Found;
   }
 
-  /// \brief Determine whether no result was found because we could not
+  /// Determine whether no result was found because we could not
   /// search into dependent base classes of the current instantiation.
   bool wasNotFoundInCurrentInstantiation() const {
     return ResultKind == NotFoundInCurrentInstantiation;
   }
-  
-  /// \brief Note that while no result was found in the current instantiation,
+
+  /// Note that while no result was found in the current instantiation,
   /// there were dependent base classes that could not be searched.
   void setNotFoundInCurrentInstantiation() {
     assert(ResultKind == NotFound && Decls.empty());
     ResultKind = NotFoundInCurrentInstantiation;
   }
 
-  /// \brief Determine whether the lookup result was shadowed by some other
+  /// Determine whether the lookup result was shadowed by some other
   /// declaration that lookup ignored.
   bool isShadowed() const { return Shadowed; }
 
-  /// \brief Note that we found and ignored a declaration while performing
+  /// Note that we found and ignored a declaration while performing
   /// lookup.
   void setShadowed() { Shadowed = true; }
 
-  /// \brief Resolves the result kind of the lookup, possibly hiding
+  /// Resolves the result kind of the lookup, possibly hiding
   /// decls.
   ///
   /// This should be called in any environment where lookup might
   /// generate multiple lookup results.
   void resolveKind();
 
-  /// \brief Re-resolves the result kind of the lookup after a set of
+  /// Re-resolves the result kind of the lookup after a set of
   /// removals has been performed.
   void resolveKindAfterFilter() {
     if (Decls.empty()) {
@@ -498,7 +498,7 @@
     return dyn_cast<DeclClass>(getFoundDecl());
   }
 
-  /// \brief Fetch the unique decl found by this lookup.  Asserts
+  /// Fetch the unique decl found by this lookup.  Asserts
   /// that one was found.
   ///
   /// This is intended for users who have examined the result kind
@@ -515,31 +515,31 @@
     return *begin();
   }
 
-  /// \brief Asks if the result is a single tag decl.
+  /// Asks if the result is a single tag decl.
   bool isSingleTagDecl() const {
     return getResultKind() == Found && isa<TagDecl>(getFoundDecl());
   }
 
-  /// \brief Make these results show that the name was found in
+  /// Make these results show that the name was found in
   /// base classes of different types.
   ///
   /// The given paths object is copied and invalidated.
   void setAmbiguousBaseSubobjectTypes(CXXBasePaths &P);
 
-  /// \brief Make these results show that the name was found in
+  /// Make these results show that the name was found in
   /// distinct base classes of the same type.
   ///
   /// The given paths object is copied and invalidated.
   void setAmbiguousBaseSubobjects(CXXBasePaths &P);
 
-  /// \brief Make these results show that the name was found in
+  /// Make these results show that the name was found in
   /// different contexts and a tag decl was hidden by an ordinary
   /// decl in a different context.
   void setAmbiguousQualifiedTagHiding() {
     setAmbiguous(AmbiguousTagHiding);
   }
 
-  /// \brief Clears out any current state.
+  /// Clears out any current state.
   void clear() {
     ResultKind = NotFound;
     Decls.clear();
@@ -549,7 +549,7 @@
     Shadowed = false;
   }
 
-  /// \brief Clears out any current state and re-initializes for a
+  /// Clears out any current state and re-initializes for a
   /// different kind of lookup.
   void clear(Sema::LookupNameKind Kind) {
     clear();
@@ -557,7 +557,7 @@
     configure();
   }
 
-  /// \brief Change this lookup's redeclaration kind.
+  /// Change this lookup's redeclaration kind.
   void setRedeclarationKind(Sema::RedeclarationKind RK) {
     Redecl = (RK != Sema::NotForRedeclaration);
     ExternalRedecl = (RK == Sema::ForExternalRedeclaration);
@@ -596,7 +596,7 @@
     return NameInfo.getLoc();
   }
 
-  /// \brief Get the Sema object that this lookup result is searching
+  /// Get the Sema object that this lookup result is searching
   /// with.
   Sema &getSema() const { return *SemaPtr; }
 
@@ -610,7 +610,7 @@
     LookupResult::iterator I;
     bool Changed = false;
     bool CalledDone = false;
-    
+
     Filter(LookupResult &Results) : Results(Results), I(Results.begin()) {}
 
   public:
@@ -725,22 +725,22 @@
   bool Redecl;
   bool ExternalRedecl;
 
-  /// \brief True if tag declarations should be hidden if non-tags
+  /// True if tag declarations should be hidden if non-tags
   ///   are present
   bool HideTags = true;
 
   bool Diagnose = false;
 
-  /// \brief True if we should allow hidden declarations to be 'visible'.
+  /// True if we should allow hidden declarations to be 'visible'.
   bool AllowHidden = false;
 
-  /// \brief True if the found declarations were shadowed by some other
+  /// True if the found declarations were shadowed by some other
   /// declaration that we skipped. This only happens when \c LookupKind
   /// is \c LookupRedeclarationWithLinkage.
   bool Shadowed = false;
 };
 
-/// \brief Consumes visible declarations found when searching for
+/// Consumes visible declarations found when searching for
 /// all visible names within a given scope or context.
 ///
 /// This abstract class is meant to be subclassed by clients of \c
@@ -748,15 +748,15 @@
 /// FoundDecl() function to process declarations as they are found.
 class VisibleDeclConsumer {
 public:
-  /// \brief Destroys the visible declaration consumer.
+  /// Destroys the visible declaration consumer.
   virtual ~VisibleDeclConsumer();
 
-  /// \brief Determine whether hidden declarations (from unimported
+  /// Determine whether hidden declarations (from unimported
   /// modules) should be given to this consumer. By default, they
   /// are not included.
   virtual bool includeHiddenDecls() const;
 
-  /// \brief Invoked each time \p Sema::LookupVisibleDecls() finds a
+  /// Invoked each time \p Sema::LookupVisibleDecls() finds a
   /// declaration visible from the current scope or context.
   ///
   /// \param ND the declaration found.
@@ -771,14 +771,14 @@
   virtual void FoundDecl(NamedDecl *ND, NamedDecl *Hiding, DeclContext *Ctx,
                          bool InBaseClass) = 0;
 
-  /// \brief Callback to inform the client that Sema entered into a new context
+  /// Callback to inform the client that Sema entered into a new context
   /// to find a visible declaration.
   //
   /// \param Ctx the context which Sema entered.
   virtual void EnteredContext(DeclContext *Ctx) {}
 };
 
-/// \brief A class for storing results from argument-dependent lookup.
+/// A class for storing results from argument-dependent lookup.
 class ADLResult {
 private:
   /// A map from canonical decls to the 'most recent' decl.
diff --git a/linux-x64/clang/include/clang/Sema/LoopHint.h b/linux-x64/clang/include/clang/Sema/LoopHint.h
index c8b2ee8..171435e 100644
--- a/linux-x64/clang/include/clang/Sema/LoopHint.h
+++ b/linux-x64/clang/include/clang/Sema/LoopHint.h
@@ -12,12 +12,12 @@
 
 #include "clang/Basic/IdentifierTable.h"
 #include "clang/Basic/SourceLocation.h"
-#include "clang/Sema/AttributeList.h"
 #include "clang/Sema/Ownership.h"
+#include "clang/Sema/ParsedAttr.h"
 
 namespace clang {
 
-/// \brief Loop optimization hint for loop and unroll pragmas.
+/// Loop optimization hint for loop and unroll pragmas.
 struct LoopHint {
   // Source range of the directive.
   SourceRange Range;
diff --git a/linux-x64/clang/include/clang/Sema/MultiplexExternalSemaSource.h b/linux-x64/clang/include/clang/Sema/MultiplexExternalSemaSource.h
index 4de36af..86bddeb 100644
--- a/linux-x64/clang/include/clang/Sema/MultiplexExternalSemaSource.h
+++ b/linux-x64/clang/include/clang/Sema/MultiplexExternalSemaSource.h
@@ -33,7 +33,7 @@
   class VarDecl;
 
 
-/// \brief An abstract interface that should be implemented by
+/// An abstract interface that should be implemented by
 /// external AST sources that also provide information for semantic
 /// analysis.
 class MultiplexExternalSemaSource : public ExternalSemaSource {
@@ -42,8 +42,8 @@
   SmallVector<ExternalSemaSource *, 2> Sources; // doesn't own them.
 
 public:
-  
-  ///\brief Constructs a new multiplexing external sema source and appends the
+
+  ///Constructs a new multiplexing external sema source and appends the
   /// given element to it.
   ///
   ///\param[in] s1 - A non-null (old) ExternalSemaSource.
@@ -53,7 +53,7 @@
 
   ~MultiplexExternalSemaSource() override;
 
-  ///\brief Appends new source to the source list.
+  ///Appends new source to the source list.
   ///
   ///\param[in] source - An ExternalSemaSource.
   ///
@@ -63,45 +63,45 @@
   // ExternalASTSource.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Resolve a declaration ID into a declaration, potentially
+  /// Resolve a declaration ID into a declaration, potentially
   /// building a new declaration.
   Decl *GetExternalDecl(uint32_t ID) override;
 
-  /// \brief Complete the redeclaration chain if it's been extended since the
+  /// Complete the redeclaration chain if it's been extended since the
   /// previous generation of the AST source.
   void CompleteRedeclChain(const Decl *D) override;
 
-  /// \brief Resolve a selector ID into a selector.
+  /// Resolve a selector ID into a selector.
   Selector GetExternalSelector(uint32_t ID) override;
 
-  /// \brief Returns the number of selectors known to the external AST
+  /// Returns the number of selectors known to the external AST
   /// source.
   uint32_t GetNumExternalSelectors() override;
 
-  /// \brief Resolve the offset of a statement in the decl stream into
+  /// Resolve the offset of a statement in the decl stream into
   /// a statement.
   Stmt *GetExternalDeclStmt(uint64_t Offset) override;
 
-  /// \brief Resolve the offset of a set of C++ base specifiers in the decl
+  /// Resolve the offset of a set of C++ base specifiers in the decl
   /// stream into an array of specifiers.
   CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
 
-  /// \brief Resolve a handle to a list of ctor initializers into the list of
+  /// Resolve a handle to a list of ctor initializers into the list of
   /// initializers themselves.
   CXXCtorInitializer **GetExternalCXXCtorInitializers(uint64_t Offset) override;
 
   ExtKind hasExternalDefinitions(const Decl *D) override;
 
-  /// \brief Find all declarations with the given name in the
+  /// Find all declarations with the given name in the
   /// given context.
   bool FindExternalVisibleDeclsByName(const DeclContext *DC,
                                       DeclarationName Name) override;
 
-  /// \brief Ensures that the table of all visible declarations inside this
+  /// Ensures that the table of all visible declarations inside this
   /// context is up to date.
   void completeVisibleDeclsMap(const DeclContext *DC) override;
 
-  /// \brief Finds all declarations lexically contained within the given
+  /// Finds all declarations lexically contained within the given
   /// DeclContext, after applying an optional filter predicate.
   ///
   /// \param IsKindWeWant a predicate function that returns true if the passed
@@ -111,50 +111,52 @@
                            llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
                            SmallVectorImpl<Decl *> &Result) override;
 
-  /// \brief Get the decls that are contained in a file in the Offset/Length
+  /// Get the decls that are contained in a file in the Offset/Length
   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
-  /// a range. 
+  /// a range.
   void FindFileRegionDecls(FileID File, unsigned Offset,unsigned Length,
                            SmallVectorImpl<Decl *> &Decls) override;
 
-  /// \brief Gives the external AST source an opportunity to complete
+  /// Gives the external AST source an opportunity to complete
   /// an incomplete type.
   void CompleteType(TagDecl *Tag) override;
 
-  /// \brief Gives the external AST source an opportunity to complete an
+  /// Gives the external AST source an opportunity to complete an
   /// incomplete Objective-C class.
   ///
   /// This routine will only be invoked if the "externally completed" bit is
-  /// set on the ObjCInterfaceDecl via the function 
+  /// set on the ObjCInterfaceDecl via the function
   /// \c ObjCInterfaceDecl::setExternallyCompleted().
   void CompleteType(ObjCInterfaceDecl *Class) override;
 
-  /// \brief Loads comment ranges.
+  /// Loads comment ranges.
   void ReadComments() override;
 
-  /// \brief Notify ExternalASTSource that we started deserialization of
+  /// Notify ExternalASTSource that we started deserialization of
   /// a decl or type so until FinishedDeserializing is called there may be
   /// decls that are initializing. Must be paired with FinishedDeserializing.
   void StartedDeserializing() override;
 
-  /// \brief Notify ExternalASTSource that we finished the deserialization of
+  /// Notify ExternalASTSource that we finished the deserialization of
   /// a decl or type. Must be paired with StartedDeserializing.
   void FinishedDeserializing() override;
 
-  /// \brief Function that will be invoked when we begin parsing a new
+  /// Function that will be invoked when we begin parsing a new
   /// translation unit involving this external AST source.
   void StartTranslationUnit(ASTConsumer *Consumer) override;
 
-  /// \brief Print any statistics that have been gathered regarding
+  /// Print any statistics that have been gathered regarding
   /// the external AST source.
   void PrintStats() override;
 
-  /// \brief Retrieve the module that corresponds to the given module ID.
+  /// Retrieve the module that corresponds to the given module ID.
   Module *getModule(unsigned ID) override;
 
-  /// \brief Perform layout on the given record.
+  bool DeclIsFromPCHWithObjectFile(const Decl *D) override;
+
+  /// Perform layout on the given record.
   ///
-  /// This routine allows the external AST source to provide an specific 
+  /// This routine allows the external AST source to provide an specific
   /// layout for a record, overriding the layout that would normally be
   /// constructed. It is intended for clients who receive specific layout
   /// details rather than source code (such as LLDB). The client is expected
@@ -171,13 +173,13 @@
   /// expressed in bits. All of the fields must be provided with offsets.
   ///
   /// \param BaseOffsets The offset of each of the direct, non-virtual base
-  /// classes. If any bases are not given offsets, the bases will be laid 
+  /// classes. If any bases are not given offsets, the bases will be laid
   /// out according to the ABI.
   ///
   /// \param VirtualBaseOffsets The offset of each of the virtual base classes
-  /// (either direct or not). If any bases are not given offsets, the bases will 
+  /// (either direct or not). If any bases are not given offsets, the bases will
   /// be laid out according to the ABI.
-  /// 
+  ///
   /// \returns true if the record layout was provided, false otherwise.
   bool
   layoutRecordType(const RecordDecl *Record,
@@ -195,15 +197,15 @@
   // ExternalSemaSource.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Initialize the semantic source with the Sema instance
+  /// Initialize the semantic source with the Sema instance
   /// being used to perform semantic analysis on the abstract syntax
   /// tree.
   void InitializeSema(Sema &S) override;
 
-  /// \brief Inform the semantic consumer that Sema is no longer available.
+  /// Inform the semantic consumer that Sema is no longer available.
   void ForgetSema() override;
 
-  /// \brief Load the contents of the global method pool for a given
+  /// Load the contents of the global method pool for a given
   /// selector.
   void ReadMethodPool(Selector Sel) override;
 
@@ -211,12 +213,12 @@
   /// selector if necessary.
   void updateOutOfDateSelector(Selector Sel) override;
 
-  /// \brief Load the set of namespaces that are known to the external source,
+  /// Load the set of namespaces that are known to the external source,
   /// which will be used during typo correction.
   void
   ReadKnownNamespaces(SmallVectorImpl<NamespaceDecl*> &Namespaces) override;
 
-  /// \brief Load the set of used but not defined functions or variables with
+  /// Load the set of used but not defined functions or variables with
   /// internal linkage, or used but not defined inline functions.
   void ReadUndefinedButUsed(
       llvm::MapVector<NamedDecl *, SourceLocation> &Undefined) override;
@@ -225,7 +227,7 @@
       FieldDecl *, llvm::SmallVector<std::pair<SourceLocation, bool>, 4>> &
                                             Exprs) override;
 
-  /// \brief Do last resort, unqualified lookup on a LookupResult that
+  /// Do last resort, unqualified lookup on a LookupResult that
   /// Sema cannot find.
   ///
   /// \param R a LookupResult that is being recovered.
@@ -235,7 +237,7 @@
   /// \return true to tell Sema to recover using the LookupResult.
   bool LookupUnqualified(LookupResult &R, Scope *S) override;
 
-  /// \brief Read the set of tentative definitions known to the external Sema
+  /// Read the set of tentative definitions known to the external Sema
   /// source.
   ///
   /// The external source should append its own tentative definitions to the
@@ -244,7 +246,7 @@
   /// introduce the same declarations repeatedly.
   void ReadTentativeDefinitions(SmallVectorImpl<VarDecl*> &Defs) override;
 
-  /// \brief Read the set of unused file-scope declarations known to the
+  /// Read the set of unused file-scope declarations known to the
   /// external Sema source.
   ///
   /// The external source should append its own unused, filed-scope to the
@@ -254,7 +256,7 @@
   void ReadUnusedFileScopedDecls(
                         SmallVectorImpl<const DeclaratorDecl*> &Decls) override;
 
-  /// \brief Read the set of delegating constructors known to the
+  /// Read the set of delegating constructors known to the
   /// external Sema source.
   ///
   /// The external source should append its own delegating constructors to the
@@ -264,7 +266,7 @@
   void ReadDelegatingConstructors(
                           SmallVectorImpl<CXXConstructorDecl*> &Decls) override;
 
-  /// \brief Read the set of ext_vector type declarations known to the
+  /// Read the set of ext_vector type declarations known to the
   /// external Sema source.
   ///
   /// The external source should append its own ext_vector type declarations to
@@ -273,7 +275,7 @@
   /// introduce the same declarations repeatedly.
   void ReadExtVectorDecls(SmallVectorImpl<TypedefNameDecl*> &Decls) override;
 
-  /// \brief Read the set of potentially unused typedefs known to the source.
+  /// Read the set of potentially unused typedefs known to the source.
   ///
   /// The external source should append its own potentially unused local
   /// typedefs to the given vector of declarations. Note that this routine may
@@ -282,34 +284,34 @@
   void ReadUnusedLocalTypedefNameCandidates(
       llvm::SmallSetVector<const TypedefNameDecl *, 4> &Decls) override;
 
-  /// \brief Read the set of referenced selectors known to the
+  /// Read the set of referenced selectors known to the
   /// external Sema source.
   ///
-  /// The external source should append its own referenced selectors to the 
-  /// given vector of selectors. Note that this routine 
-  /// may be invoked multiple times; the external source should take care not 
+  /// The external source should append its own referenced selectors to the
+  /// given vector of selectors. Note that this routine
+  /// may be invoked multiple times; the external source should take care not
   /// to introduce the same selectors repeatedly.
   void ReadReferencedSelectors(SmallVectorImpl<std::pair<Selector,
                                               SourceLocation> > &Sels) override;
 
-  /// \brief Read the set of weak, undeclared identifiers known to the
+  /// Read the set of weak, undeclared identifiers known to the
   /// external Sema source.
   ///
   /// The external source should append its own weak, undeclared identifiers to
-  /// the given vector. Note that this routine may be invoked multiple times; 
+  /// the given vector. Note that this routine may be invoked multiple times;
   /// the external source should take care not to introduce the same identifiers
   /// repeatedly.
   void ReadWeakUndeclaredIdentifiers(
            SmallVectorImpl<std::pair<IdentifierInfo*, WeakInfo> > &WI) override;
 
-  /// \brief Read the set of used vtables known to the external Sema source.
+  /// Read the set of used vtables known to the external Sema source.
   ///
   /// The external source should append its own used vtables to the given
   /// vector. Note that this routine may be invoked multiple times; the external
   /// source should take care not to introduce the same vtables repeatedly.
   void ReadUsedVTables(SmallVectorImpl<ExternalVTableUse> &VTables) override;
 
-  /// \brief Read the set of pending instantiations known to the external
+  /// Read the set of pending instantiations known to the external
   /// Sema source.
   ///
   /// The external source should append its own pending instantiations to the
@@ -319,7 +321,7 @@
   void ReadPendingInstantiations(
      SmallVectorImpl<std::pair<ValueDecl*, SourceLocation> >& Pending) override;
 
-  /// \brief Read the set of late parsed template functions for this source.
+  /// Read the set of late parsed template functions for this source.
   ///
   /// The external source should insert its own late parsed template functions
   /// into the map. Note that this routine may be invoked multiple times; the
@@ -338,7 +340,7 @@
                              bool EnteringContext,
                              const ObjCObjectPointerType *OPT) override;
 
-  /// \brief Produces a diagnostic note if one of the attached sources
+  /// Produces a diagnostic note if one of the attached sources
   /// contains a complete definition for \p T. Queries the sources in list
   /// order until the first one claims that a diagnostic was produced.
   ///
@@ -354,7 +356,7 @@
   // isa/cast/dyn_cast support
   static bool classof(const MultiplexExternalSemaSource*) { return true; }
   //static bool classof(const ExternalSemaSource*) { return true; }
-}; 
+};
 
 } // end namespace clang
 
diff --git a/linux-x64/clang/include/clang/Sema/ObjCMethodList.h b/linux-x64/clang/include/clang/Sema/ObjCMethodList.h
index 80ccd36..d0af4d1 100644
--- a/linux-x64/clang/include/clang/Sema/ObjCMethodList.h
+++ b/linux-x64/clang/include/clang/Sema/ObjCMethodList.h
@@ -21,13 +21,13 @@
 
 class ObjCMethodDecl;
 
-/// \brief a linked list of methods with the same selector name but different
+/// a linked list of methods with the same selector name but different
 /// signatures.
 struct ObjCMethodList {
   // NOTE: If you add any members to this struct, make sure to serialize them.
-  /// \brief If there is more than one decl with this signature.
+  /// If there is more than one decl with this signature.
   llvm::PointerIntPair<ObjCMethodDecl *, 1> MethodAndHasMoreThanOneDecl;
-  /// \brief The next list object and 2 bits for extra info.
+  /// The next list object and 2 bits for extra info.
   llvm::PointerIntPair<ObjCMethodList *, 2> NextAndExtraBits;
 
   ObjCMethodList() { }
diff --git a/linux-x64/clang/include/clang/Sema/Overload.h b/linux-x64/clang/include/clang/Sema/Overload.h
index 5a49881..6ded010 100644
--- a/linux-x64/clang/include/clang/Sema/Overload.h
+++ b/linux-x64/clang/include/clang/Sema/Overload.h
@@ -62,7 +62,7 @@
     /// Succeeded, but refers to a deleted function.
     OR_Deleted
   };
-  
+
   enum OverloadCandidateDisplayKind {
     /// Requests that all candidates be shown.  Viable candidates will
     /// be printed first.
@@ -107,7 +107,7 @@
     /// Integral conversions (C++ [conv.integral])
     ICK_Integral_Conversion,
 
-    /// Floating point conversions (C++ [conv.double] 
+    /// Floating point conversions (C++ [conv.double]
     ICK_Floating_Conversion,
 
     /// Complex conversions (C99 6.3.1.6)
@@ -244,15 +244,15 @@
     /// or a function conversion.
     ImplicitConversionKind Third : 8;
 
-    /// \brief Whether this is the deprecated conversion of a
+    /// Whether this is the deprecated conversion of a
     /// string literal to a pointer to non-const character data
     /// (C++ 4.2p2).
     unsigned DeprecatedStringLiteralToCharPtr : 1;
 
-    /// \brief Whether the qualification conversion involves a change in the
+    /// Whether the qualification conversion involves a change in the
     /// Objective-C lifetime (for automatic reference counting).
     unsigned QualificationIncludesObjCLifetime : 1;
-    
+
     /// IncompatibleObjC - Whether this is an Objective-C conversion
     /// that we should warn about (if we actually use it).
     unsigned IncompatibleObjC : 1;
@@ -265,24 +265,24 @@
     /// direct binding (C++ [dcl.init.ref]).
     unsigned DirectBinding : 1;
 
-    /// \brief Whether this is an lvalue reference binding (otherwise, it's
+    /// Whether this is an lvalue reference binding (otherwise, it's
     /// an rvalue reference binding).
     unsigned IsLvalueReference : 1;
-    
-    /// \brief Whether we're binding to a function lvalue.
+
+    /// Whether we're binding to a function lvalue.
     unsigned BindsToFunctionLvalue : 1;
-    
-    /// \brief Whether we're binding to an rvalue.
+
+    /// Whether we're binding to an rvalue.
     unsigned BindsToRvalue : 1;
-    
-    /// \brief Whether this binds an implicit object argument to a 
+
+    /// Whether this binds an implicit object argument to a
     /// non-static member function without a ref-qualifier.
     unsigned BindsImplicitObjectArgumentWithoutRefQualifier : 1;
-    
-    /// \brief Whether this binds a reference to an object with a different
+
+    /// Whether this binds a reference to an object with a different
     /// Objective-C lifetime qualifier.
     unsigned ObjCLifetimeConversionBinding : 1;
-    
+
     /// FromType - The type that this conversion is converting
     /// from. This is an opaque pointer that can be translated into a
     /// QualType.
@@ -303,13 +303,13 @@
 
     void setFromType(QualType T) { FromTypePtr = T.getAsOpaquePtr(); }
 
-    void setToType(unsigned Idx, QualType T) { 
+    void setToType(unsigned Idx, QualType T) {
       assert(Idx < 3 && "To type index is out of range");
-      ToTypePtrs[Idx] = T.getAsOpaquePtr(); 
+      ToTypePtrs[Idx] = T.getAsOpaquePtr();
     }
 
     void setAllToTypes(QualType T) {
-      ToTypePtrs[0] = T.getAsOpaquePtr(); 
+      ToTypePtrs[0] = T.getAsOpaquePtr();
       ToTypePtrs[1] = ToTypePtrs[0];
       ToTypePtrs[2] = ToTypePtrs[0];
     }
@@ -324,15 +324,16 @@
     }
 
     void setAsIdentityConversion();
-    
+
     bool isIdentityConversion() const {
       return Second == ICK_Identity && Third == ICK_Identity;
     }
-    
+
     ImplicitConversionRank getRank() const;
-    NarrowingKind getNarrowingKind(ASTContext &Context, const Expr *Converted,
-                                   APValue &ConstantValue,
-                                   QualType &ConstantType) const;
+    NarrowingKind
+    getNarrowingKind(ASTContext &Context, const Expr *Converted,
+                     APValue &ConstantValue, QualType &ConstantType,
+                     bool IgnoreFloatToIntegralConversion = false) const;
     bool isPointerConversionToBool() const;
     bool isPointerConversionToVoidPointer(ASTContext& Context) const;
     void dump() const;
@@ -341,7 +342,7 @@
   /// UserDefinedConversionSequence - Represents a user-defined
   /// conversion sequence (C++ 13.3.3.1.2).
   struct UserDefinedConversionSequence {
-    /// \brief Represents the standard conversion that occurs before
+    /// Represents the standard conversion that occurs before
     /// the actual user-defined conversion.
     ///
     /// C++11 13.3.3.1.2p1:
@@ -376,7 +377,7 @@
     /// aggregate initialization from an initializer list.
     FunctionDecl* ConversionFunction;
 
-    /// \brief The declaration that we found via name lookup, which might be
+    /// The declaration that we found via name lookup, which might be
     /// the same as \c ConversionFunction or it might be a using declaration
     /// that refers to \c ConversionFunction.
     DeclAccessPair FoundConversionFunction;
@@ -505,7 +506,7 @@
     /// ConversionKind - The kind of implicit conversion sequence.
     unsigned ConversionKind : 30;
 
-    /// \brief Whether the target is really a std::initializer_list, and the
+    /// Whether the target is really a std::initializer_list, and the
     /// sequence only represents the worst element conversion.
     unsigned StdInitializerListElement : 1;
 
@@ -561,7 +562,7 @@
       new (this) ImplicitConversionSequence(Other);
       return *this;
     }
-    
+
     ~ImplicitConversionSequence() {
       destruct();
     }
@@ -570,8 +571,8 @@
       assert(isInitialized() && "querying uninitialized conversion");
       return Kind(ConversionKind);
     }
-    
-    /// \brief Return a ranking of the implicit conversion sequence
+
+    /// Return a ranking of the implicit conversion sequence
     /// kind, where smaller ranks represent better conversion
     /// sequences.
     ///
@@ -580,11 +581,11 @@
     /// per C++ [over.best.ics]p10.
     unsigned getKindRank() const {
       switch (getKind()) {
-      case StandardConversion: 
+      case StandardConversion:
         return 0;
 
       case UserDefinedConversion:
-      case AmbiguousConversion: 
+      case AmbiguousConversion:
         return 1;
 
       case EllipsisConversion:
@@ -640,7 +641,7 @@
       Standard.setAllToTypes(T);
     }
 
-    /// \brief Whether the target is really a std::initializer_list, and the
+    /// Whether the target is really a std::initializer_list, and the
     /// sequence only represents the worst element conversion.
     bool isStdInitializerListElement() const {
       return StdInitializerListElement;
@@ -774,13 +775,13 @@
     /// Actually an OverloadFailureKind.
     unsigned char FailureKind;
 
-    /// \brief The number of call arguments that were explicitly provided,
+    /// The number of call arguments that were explicitly provided,
     /// to be used while performing partial ordering of function templates.
     unsigned ExplicitCallArguments;
 
     union {
       DeductionFailureInfo DeductionFailure;
-      
+
       /// FinalConversion - For a conversion function (where Function is
       /// a CXXConversionDecl), the standard conversion that occurs
       /// after the call to the overload candidate to convert the result
@@ -904,13 +905,13 @@
     SourceLocation getLocation() const { return Loc; }
     CandidateSetKind getKind() const { return Kind; }
 
-    /// \brief Determine when this overload candidate will be new to the
+    /// Determine when this overload candidate will be new to the
     /// overload set.
     bool isNewCandidate(Decl *F) {
       return Functions.insert(F->getCanonicalDecl()).second;
     }
 
-    /// \brief Clear out all of the candidates.
+    /// Clear out all of the candidates.
     void clear(CandidateSetKind CSK);
 
     using iterator = SmallVectorImpl<OverloadCandidate>::iterator;
@@ -921,7 +922,7 @@
     size_t size() const { return Candidates.size(); }
     bool empty() const { return Candidates.empty(); }
 
-    /// \brief Allocate storage for conversion sequences for NumConversions
+    /// Allocate storage for conversion sequences for NumConversions
     /// conversions.
     ConversionSequenceList
     allocateConversionSequences(unsigned NumConversions) {
@@ -935,7 +936,7 @@
       return ConversionSequenceList(Conversions, NumConversions);
     }
 
-    /// \brief Add a new candidate with NumConversions conversion sequence slots
+    /// Add a new candidate with NumConversions conversion sequence slots
     /// to the overload set.
     OverloadCandidate &addCandidate(unsigned NumConversions = 0,
                                     ConversionSequenceList Conversions = None) {
diff --git a/linux-x64/clang/include/clang/Sema/Ownership.h b/linux-x64/clang/include/clang/Sema/Ownership.h
index 11382c3..ae2f178 100644
--- a/linux-x64/clang/include/clang/Sema/Ownership.h
+++ b/linux-x64/clang/include/clang/Sema/Ownership.h
@@ -39,7 +39,7 @@
 class TemplateName;
 class TemplateParameterList;
 
-  /// \brief Wrapper for void* pointer.
+  /// Wrapper for void* pointer.
   /// \tparam PtrTy Either a pointer type like 'T*' or a type that behaves like
   ///               a pointer.
   ///
@@ -60,7 +60,7 @@
 
     static OpaquePtr make(PtrTy P) { OpaquePtr OP; OP.set(P); return OP; }
 
-    /// \brief Returns plain pointer to the entity pointed by this wrapper.
+    /// Returns plain pointer to the entity pointed by this wrapper.
     /// \tparam PointeeT Type of pointed entity.
     ///
     /// It is identical to getPtrAs<PointeeT*>.
@@ -68,7 +68,7 @@
       return get();
     }
 
-    /// \brief Returns pointer converted to the specified type.
+    /// Returns pointer converted to the specified type.
     /// \tparam PtrT Result pointer type.  There must be implicit conversion
     ///              from PtrTy to PtrT.
     ///
diff --git a/linux-x64/clang/include/clang/Sema/ParsedAttr.h b/linux-x64/clang/include/clang/Sema/ParsedAttr.h
new file mode 100644
index 0000000..9037027
--- /dev/null
+++ b/linux-x64/clang/include/clang/Sema/ParsedAttr.h
@@ -0,0 +1,1006 @@
+//======- ParsedAttr.h - Parsed attribute sets ------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the ParsedAttr class, which is used to collect
+// parsed attributes.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_SEMA_ATTRIBUTELIST_H
+#define LLVM_CLANG_SEMA_ATTRIBUTELIST_H
+
+#include "clang/Basic/AttrSubjectMatchRules.h"
+#include "clang/Basic/Diagnostic.h"
+#include "clang/Basic/SourceLocation.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/Sema/Ownership.h"
+#include "llvm/ADT/PointerUnion.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/TinyPtrVector.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/VersionTuple.h"
+#include <cassert>
+#include <cstddef>
+#include <cstring>
+#include <utility>
+
+namespace clang {
+
+class ASTContext;
+class Decl;
+class Expr;
+class IdentifierInfo;
+class LangOptions;
+
+/// Represents information about a change in availability for
+/// an entity, which is part of the encoding of the 'availability'
+/// attribute.
+struct AvailabilityChange {
+  /// The location of the keyword indicating the kind of change.
+  SourceLocation KeywordLoc;
+
+  /// The version number at which the change occurred.
+  VersionTuple Version;
+
+  /// The source range covering the version number.
+  SourceRange VersionRange;
+
+  /// Determine whether this availability change is valid.
+  bool isValid() const { return !Version.empty(); }
+};
+
+namespace detail {
+enum AvailabilitySlot {
+  IntroducedSlot, DeprecatedSlot, ObsoletedSlot, NumAvailabilitySlots
+};
+
+/// Describes the trailing object for Availability attribute in ParsedAttr.
+struct AvailabilityData {
+  AvailabilityChange Changes[NumAvailabilitySlots];
+  SourceLocation StrictLoc;
+  const Expr *Replacement;
+
+  AvailabilityData(const AvailabilityChange &Introduced,
+                   const AvailabilityChange &Deprecated,
+                   const AvailabilityChange &Obsoleted,
+                   SourceLocation Strict, const Expr *ReplaceExpr)
+    : StrictLoc(Strict), Replacement(ReplaceExpr) {
+    Changes[IntroducedSlot] = Introduced;
+    Changes[DeprecatedSlot] = Deprecated;
+    Changes[ObsoletedSlot] = Obsoleted;
+  }
+};
+
+struct TypeTagForDatatypeData {
+  ParsedType *MatchingCType;
+  unsigned LayoutCompatible : 1;
+  unsigned MustBeNull : 1;
+};
+struct PropertyData {
+  IdentifierInfo *GetterId, *SetterId;
+
+  PropertyData(IdentifierInfo *getterId, IdentifierInfo *setterId)
+      : GetterId(getterId), SetterId(setterId) {}
+};
+
+} // namespace
+
+/// Wraps an identifier and optional source location for the identifier.
+struct IdentifierLoc {
+  SourceLocation Loc;
+  IdentifierInfo *Ident;
+
+  static IdentifierLoc *create(ASTContext &Ctx, SourceLocation Loc,
+                               IdentifierInfo *Ident);
+};
+
+/// A union of the various pointer types that can be passed to an
+/// ParsedAttr as an argument.
+using ArgsUnion = llvm::PointerUnion<Expr *, IdentifierLoc *>;
+using ArgsVector = llvm::SmallVector<ArgsUnion, 12U>;
+
+/// ParsedAttr - Represents a syntactic attribute.
+///
+/// For a GNU attribute, there are four forms of this construct:
+///
+/// 1: __attribute__(( const )). ParmName/Args/NumArgs will all be unused.
+/// 2: __attribute__(( mode(byte) )). ParmName used, Args/NumArgs unused.
+/// 3: __attribute__(( format(printf, 1, 2) )). ParmName/Args/NumArgs all used.
+/// 4: __attribute__(( aligned(16) )). ParmName is unused, Args/Num used.
+///
+class ParsedAttr final
+    : private llvm::TrailingObjects<
+          ParsedAttr, ArgsUnion, detail::AvailabilityData,
+          detail::TypeTagForDatatypeData, ParsedType, detail::PropertyData> {
+  friend TrailingObjects;
+
+  size_t numTrailingObjects(OverloadToken<ArgsUnion>) const { return NumArgs; }
+  size_t numTrailingObjects(OverloadToken<detail::AvailabilityData>) const {
+    return IsAvailability;
+  }
+  size_t
+      numTrailingObjects(OverloadToken<detail::TypeTagForDatatypeData>) const {
+    return IsTypeTagForDatatype;
+  }
+  size_t numTrailingObjects(OverloadToken<ParsedType>) const {
+    return HasParsedType;
+  }
+  size_t numTrailingObjects(OverloadToken<detail::PropertyData>) const {
+    return IsProperty;
+  }
+
+public:
+  /// The style used to specify an attribute.
+  enum Syntax {
+    /// __attribute__((...))
+    AS_GNU,
+
+    /// [[...]]
+    AS_CXX11,
+
+    /// [[...]]
+    AS_C2x,
+
+    /// __declspec(...)
+    AS_Declspec,
+
+    /// [uuid("...")] class Foo
+    AS_Microsoft,
+
+    /// __ptr16, alignas(...), etc.
+    AS_Keyword,
+
+    /// #pragma ...
+    AS_Pragma,
+
+    // Note TableGen depends on the order above.  Do not add or change the order
+    // without adding related code to TableGen/ClangAttrEmitter.cpp.
+    /// Context-sensitive version of a keyword attribute.
+    AS_ContextSensitiveKeyword,
+  };
+
+private:
+  IdentifierInfo *AttrName;
+  IdentifierInfo *ScopeName;
+  SourceRange AttrRange;
+  SourceLocation ScopeLoc;
+  SourceLocation EllipsisLoc;
+
+  unsigned AttrKind : 16;
+
+  /// The number of expression arguments this attribute has.
+  /// The expressions themselves are stored after the object.
+  unsigned NumArgs : 16;
+
+  /// Corresponds to the Syntax enum.
+  unsigned SyntaxUsed : 3;
+
+  /// True if already diagnosed as invalid.
+  mutable unsigned Invalid : 1;
+
+  /// True if this attribute was used as a type attribute.
+  mutable unsigned UsedAsTypeAttr : 1;
+
+  /// True if this has the extra information associated with an
+  /// availability attribute.
+  unsigned IsAvailability : 1;
+
+  /// True if this has extra information associated with a
+  /// type_tag_for_datatype attribute.
+  unsigned IsTypeTagForDatatype : 1;
+
+  /// True if this has extra information associated with a
+  /// Microsoft __delcspec(property) attribute.
+  unsigned IsProperty : 1;
+
+  /// True if this has a ParsedType
+  unsigned HasParsedType : 1;
+
+  /// True if the processing cache is valid.
+  mutable unsigned HasProcessingCache : 1;
+
+  /// A cached value.
+  mutable unsigned ProcessingCache : 8;
+
+  /// The location of the 'unavailable' keyword in an
+  /// availability attribute.
+  SourceLocation UnavailableLoc;
+
+  const Expr *MessageExpr;
+
+  ArgsUnion *getArgsBuffer() { return getTrailingObjects<ArgsUnion>(); }
+  ArgsUnion const *getArgsBuffer() const {
+    return getTrailingObjects<ArgsUnion>();
+  }
+
+  detail::AvailabilityData *getAvailabilityData() {
+    return getTrailingObjects<detail::AvailabilityData>();
+  }
+  const detail::AvailabilityData *getAvailabilityData() const {
+    return getTrailingObjects<detail::AvailabilityData>();
+  }
+
+private:
+  friend class AttributeFactory;
+  friend class AttributePool;
+
+  /// Constructor for attributes with expression arguments.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             ArgsUnion *args, unsigned numArgs, Syntax syntaxUsed,
+             SourceLocation ellipsisLoc)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), EllipsisLoc(ellipsisLoc), NumArgs(numArgs),
+        SyntaxUsed(syntaxUsed), Invalid(false), UsedAsTypeAttr(false),
+        IsAvailability(false), IsTypeTagForDatatype(false), IsProperty(false),
+        HasParsedType(false), HasProcessingCache(false) {
+    if (numArgs) memcpy(getArgsBuffer(), args, numArgs * sizeof(ArgsUnion));
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Constructor for availability attributes.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             IdentifierLoc *Parm, const AvailabilityChange &introduced,
+             const AvailabilityChange &deprecated,
+             const AvailabilityChange &obsoleted, SourceLocation unavailable,
+             const Expr *messageExpr, Syntax syntaxUsed, SourceLocation strict,
+             const Expr *replacementExpr)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), NumArgs(1), SyntaxUsed(syntaxUsed), Invalid(false),
+        UsedAsTypeAttr(false), IsAvailability(true),
+        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(false),
+        HasProcessingCache(false), UnavailableLoc(unavailable),
+        MessageExpr(messageExpr) {
+    ArgsUnion PVal(Parm);
+    memcpy(getArgsBuffer(), &PVal, sizeof(ArgsUnion));
+    new (getAvailabilityData()) detail::AvailabilityData(
+        introduced, deprecated, obsoleted, strict, replacementExpr);
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Constructor for objc_bridge_related attributes.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             IdentifierLoc *Parm1, IdentifierLoc *Parm2, IdentifierLoc *Parm3,
+             Syntax syntaxUsed)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), NumArgs(3), SyntaxUsed(syntaxUsed), Invalid(false),
+        UsedAsTypeAttr(false), IsAvailability(false),
+        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(false),
+        HasProcessingCache(false) {
+    ArgsUnion *Args = getArgsBuffer();
+    Args[0] = Parm1;
+    Args[1] = Parm2;
+    Args[2] = Parm3;
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Constructor for type_tag_for_datatype attribute.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             IdentifierLoc *ArgKind, ParsedType matchingCType,
+             bool layoutCompatible, bool mustBeNull, Syntax syntaxUsed)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), NumArgs(1), SyntaxUsed(syntaxUsed), Invalid(false),
+        UsedAsTypeAttr(false), IsAvailability(false),
+        IsTypeTagForDatatype(true), IsProperty(false), HasParsedType(false),
+        HasProcessingCache(false) {
+    ArgsUnion PVal(ArgKind);
+    memcpy(getArgsBuffer(), &PVal, sizeof(ArgsUnion));
+    detail::TypeTagForDatatypeData &ExtraData = getTypeTagForDatatypeDataSlot();
+    new (&ExtraData.MatchingCType) ParsedType(matchingCType);
+    ExtraData.LayoutCompatible = layoutCompatible;
+    ExtraData.MustBeNull = mustBeNull;
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Constructor for attributes with a single type argument.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             ParsedType typeArg, Syntax syntaxUsed)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), NumArgs(0), SyntaxUsed(syntaxUsed), Invalid(false),
+        UsedAsTypeAttr(false), IsAvailability(false),
+        IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(true),
+        HasProcessingCache(false) {
+    new (&getTypeBuffer()) ParsedType(typeArg);
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Constructor for microsoft __declspec(property) attribute.
+  ParsedAttr(IdentifierInfo *attrName, SourceRange attrRange,
+             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+             IdentifierInfo *getterId, IdentifierInfo *setterId,
+             Syntax syntaxUsed)
+      : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+        ScopeLoc(scopeLoc), NumArgs(0), SyntaxUsed(syntaxUsed), Invalid(false),
+        UsedAsTypeAttr(false), IsAvailability(false),
+        IsTypeTagForDatatype(false), IsProperty(true), HasParsedType(false),
+        HasProcessingCache(false) {
+    new (&getPropertyDataBuffer()) detail::PropertyData(getterId, setterId);
+    AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+  }
+
+  /// Type tag information is stored immediately following the arguments, if
+  /// any, at the end of the object.  They are mutually exclusive with
+  /// availability slots.
+  detail::TypeTagForDatatypeData &getTypeTagForDatatypeDataSlot() {
+    return *getTrailingObjects<detail::TypeTagForDatatypeData>();
+  }
+  const detail::TypeTagForDatatypeData &getTypeTagForDatatypeDataSlot() const {
+    return *getTrailingObjects<detail::TypeTagForDatatypeData>();
+  }
+
+  /// The type buffer immediately follows the object and are mutually exclusive
+  /// with arguments.
+  ParsedType &getTypeBuffer() { return *getTrailingObjects<ParsedType>(); }
+  const ParsedType &getTypeBuffer() const {
+    return *getTrailingObjects<ParsedType>();
+  }
+
+  /// The property data immediately follows the object is is mutually exclusive
+  /// with arguments.
+  detail::PropertyData &getPropertyDataBuffer() {
+    assert(IsProperty);
+    return *getTrailingObjects<detail::PropertyData>();
+  }
+  const detail::PropertyData &getPropertyDataBuffer() const {
+    assert(IsProperty);
+    return *getTrailingObjects<detail::PropertyData>();
+  }
+
+  size_t allocated_size() const;
+
+public:
+  ParsedAttr(const ParsedAttr &) = delete;
+  ParsedAttr(ParsedAttr &&) = delete;
+  ParsedAttr &operator=(const ParsedAttr &) = delete;
+  ParsedAttr &operator=(ParsedAttr &&) = delete;
+  ~ParsedAttr() = delete;
+
+  void operator delete(void *) = delete;
+
+  enum Kind {
+    #define PARSED_ATTR(NAME) AT_##NAME,
+    #include "clang/Sema/AttrParsedAttrList.inc"
+    #undef PARSED_ATTR
+    IgnoredAttribute,
+    UnknownAttribute
+  };
+
+  IdentifierInfo *getName() const { return AttrName; }
+  SourceLocation getLoc() const { return AttrRange.getBegin(); }
+  SourceRange getRange() const { return AttrRange; }
+
+  bool hasScope() const { return ScopeName; }
+  IdentifierInfo *getScopeName() const { return ScopeName; }
+  SourceLocation getScopeLoc() const { return ScopeLoc; }
+
+  bool hasParsedType() const { return HasParsedType; }
+
+  /// Is this the Microsoft __declspec(property) attribute?
+  bool isDeclspecPropertyAttribute() const  {
+    return IsProperty;
+  }
+
+  bool isAlignasAttribute() const {
+    // FIXME: Use a better mechanism to determine this.
+    return getKind() == AT_Aligned && isKeywordAttribute();
+  }
+
+  bool isDeclspecAttribute() const { return SyntaxUsed == AS_Declspec; }
+  bool isMicrosoftAttribute() const { return SyntaxUsed == AS_Microsoft; }
+
+  bool isCXX11Attribute() const {
+    return SyntaxUsed == AS_CXX11 || isAlignasAttribute();
+  }
+
+  bool isC2xAttribute() const {
+    return SyntaxUsed == AS_C2x;
+  }
+
+  bool isKeywordAttribute() const {
+    return SyntaxUsed == AS_Keyword || SyntaxUsed == AS_ContextSensitiveKeyword;
+  }
+
+  bool isContextSensitiveKeywordAttribute() const {
+    return SyntaxUsed == AS_ContextSensitiveKeyword;
+  }
+
+  bool isInvalid() const { return Invalid; }
+  void setInvalid(bool b = true) const { Invalid = b; }
+
+  bool hasProcessingCache() const { return HasProcessingCache; }
+
+  unsigned getProcessingCache() const {
+    assert(hasProcessingCache());
+    return ProcessingCache;
+  }
+
+  void setProcessingCache(unsigned value) const {
+    ProcessingCache = value;
+    HasProcessingCache = true;
+  }
+
+  bool isUsedAsTypeAttr() const { return UsedAsTypeAttr; }
+  void setUsedAsTypeAttr() { UsedAsTypeAttr = true; }
+
+  bool isPackExpansion() const { return EllipsisLoc.isValid(); }
+  SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
+
+  Kind getKind() const { return Kind(AttrKind); }
+  static Kind getKind(const IdentifierInfo *Name, const IdentifierInfo *Scope,
+                      Syntax SyntaxUsed);
+
+  /// getNumArgs - Return the number of actual arguments to this attribute.
+  unsigned getNumArgs() const { return NumArgs; }
+
+  /// getArg - Return the specified argument.
+  ArgsUnion getArg(unsigned Arg) const {
+    assert(Arg < NumArgs && "Arg access out of range!");
+    return getArgsBuffer()[Arg];
+  }
+
+  bool isArgExpr(unsigned Arg) const {
+    return Arg < NumArgs && getArg(Arg).is<Expr*>();
+  }
+
+  Expr *getArgAsExpr(unsigned Arg) const {
+    return getArg(Arg).get<Expr*>();
+  }
+
+  bool isArgIdent(unsigned Arg) const {
+    return Arg < NumArgs && getArg(Arg).is<IdentifierLoc*>();
+  }
+
+  IdentifierLoc *getArgAsIdent(unsigned Arg) const {
+    return getArg(Arg).get<IdentifierLoc*>();
+  }
+
+  const AvailabilityChange &getAvailabilityIntroduced() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return getAvailabilityData()->Changes[detail::IntroducedSlot];
+  }
+
+  const AvailabilityChange &getAvailabilityDeprecated() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return getAvailabilityData()->Changes[detail::DeprecatedSlot];
+  }
+
+  const AvailabilityChange &getAvailabilityObsoleted() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return getAvailabilityData()->Changes[detail::ObsoletedSlot];
+  }
+
+  SourceLocation getStrictLoc() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return getAvailabilityData()->StrictLoc;
+  }
+
+  SourceLocation getUnavailableLoc() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return UnavailableLoc;
+  }
+
+  const Expr * getMessageExpr() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return MessageExpr;
+  }
+
+  const Expr *getReplacementExpr() const {
+    assert(getKind() == AT_Availability && "Not an availability attribute");
+    return getAvailabilityData()->Replacement;
+  }
+
+  const ParsedType &getMatchingCType() const {
+    assert(getKind() == AT_TypeTagForDatatype &&
+           "Not a type_tag_for_datatype attribute");
+    return *getTypeTagForDatatypeDataSlot().MatchingCType;
+  }
+
+  bool getLayoutCompatible() const {
+    assert(getKind() == AT_TypeTagForDatatype &&
+           "Not a type_tag_for_datatype attribute");
+    return getTypeTagForDatatypeDataSlot().LayoutCompatible;
+  }
+
+  bool getMustBeNull() const {
+    assert(getKind() == AT_TypeTagForDatatype &&
+           "Not a type_tag_for_datatype attribute");
+    return getTypeTagForDatatypeDataSlot().MustBeNull;
+  }
+
+  const ParsedType &getTypeArg() const {
+    assert(HasParsedType && "Not a type attribute");
+    return getTypeBuffer();
+  }
+
+  IdentifierInfo *getPropertyDataGetter() const {
+    assert(isDeclspecPropertyAttribute() &&
+           "Not a __delcspec(property) attribute");
+    return getPropertyDataBuffer().GetterId;
+  }
+
+  IdentifierInfo *getPropertyDataSetter() const {
+    assert(isDeclspecPropertyAttribute() &&
+           "Not a __delcspec(property) attribute");
+    return getPropertyDataBuffer().SetterId;
+  }
+
+  /// Get an index into the attribute spelling list
+  /// defined in Attr.td. This index is used by an attribute
+  /// to pretty print itself.
+  unsigned getAttributeSpellingListIndex() const;
+
+  bool isTargetSpecificAttr() const;
+  bool isTypeAttr() const;
+  bool isStmtAttr() const;
+
+  bool hasCustomParsing() const;
+  unsigned getMinArgs() const;
+  unsigned getMaxArgs() const;
+  bool hasVariadicArg() const;
+  bool diagnoseAppertainsTo(class Sema &S, const Decl *D) const;
+  bool appliesToDecl(const Decl *D, attr::SubjectMatchRule MatchRule) const;
+  void getMatchRules(const LangOptions &LangOpts,
+                     SmallVectorImpl<std::pair<attr::SubjectMatchRule, bool>>
+                         &MatchRules) const;
+  bool diagnoseLangOpts(class Sema &S) const;
+  bool existsInTarget(const TargetInfo &Target) const;
+  bool isKnownToGCC() const;
+  bool isSupportedByPragmaAttribute() const;
+
+  /// If the parsed attribute has a semantic equivalent, and it would
+  /// have a semantic Spelling enumeration (due to having semantically-distinct
+  /// spelling variations), return the value of that semantic spelling. If the
+  /// parsed attribute does not have a semantic equivalent, or would not have
+  /// a Spelling enumeration, the value UINT_MAX is returned.
+  unsigned getSemanticSpelling() const;
+};
+
+class AttributePool;
+/// A factory, from which one makes pools, from which one creates
+/// individual attributes which are deallocated with the pool.
+///
+/// Note that it's tolerably cheap to create and destroy one of
+/// these as long as you don't actually allocate anything in it.
+class AttributeFactory {
+public:
+  enum {
+    AvailabilityAllocSize =
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(1, 1, 0, 0, 0),
+    TypeTagForDatatypeAllocSize =
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(1, 0, 1, 0, 0),
+    PropertyAllocSize =
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(0, 0, 0, 0, 1),
+  };
+
+private:
+  enum {
+    /// The number of free lists we want to be sure to support
+    /// inline.  This is just enough that availability attributes
+    /// don't surpass it.  It's actually very unlikely we'll see an
+    /// attribute that needs more than that; on x86-64 you'd need 10
+    /// expression arguments, and on i386 you'd need 19.
+    InlineFreeListsCapacity =
+        1 + (AvailabilityAllocSize - sizeof(ParsedAttr)) / sizeof(void *)
+  };
+
+  llvm::BumpPtrAllocator Alloc;
+
+  /// Free lists.  The index is determined by the following formula:
+  ///   (size - sizeof(ParsedAttr)) / sizeof(void*)
+  SmallVector<SmallVector<ParsedAttr *, 8>, InlineFreeListsCapacity> FreeLists;
+
+  // The following are the private interface used by AttributePool.
+  friend class AttributePool;
+
+  /// Allocate an attribute of the given size.
+  void *allocate(size_t size);
+
+  void deallocate(ParsedAttr *AL);
+
+  /// Reclaim all the attributes in the given pool chain, which is
+  /// non-empty.  Note that the current implementation is safe
+  /// against reclaiming things which were not actually allocated
+  /// with the allocator, although of course it's important to make
+  /// sure that their allocator lives at least as long as this one.
+  void reclaimPool(AttributePool &head);
+
+public:
+  AttributeFactory();
+  ~AttributeFactory();
+};
+
+class AttributePool {
+  friend class AttributeFactory;
+  AttributeFactory &Factory;
+  llvm::TinyPtrVector<ParsedAttr *> Attrs;
+
+  void *allocate(size_t size) {
+    return Factory.allocate(size);
+  }
+
+  ParsedAttr *add(ParsedAttr *attr) {
+    Attrs.push_back(attr);
+    return attr;
+  }
+
+  void remove(ParsedAttr *attr) {
+    assert(llvm::is_contained(Attrs, attr) &&
+           "Can't take attribute from a pool that doesn't own it!");
+    Attrs.erase(llvm::find(Attrs, attr));
+  }
+
+  void takePool(AttributePool &pool);
+
+public:
+  /// Create a new pool for a factory.
+  AttributePool(AttributeFactory &factory) : Factory(factory) {}
+
+  AttributePool(const AttributePool &) = delete;
+
+  ~AttributePool() { Factory.reclaimPool(*this); }
+
+  /// Move the given pool's allocations to this pool.
+  AttributePool(AttributePool &&pool) = default;
+
+  AttributeFactory &getFactory() const { return Factory; }
+
+  void clear() {
+    Factory.reclaimPool(*this);
+    Attrs.clear();
+  }
+
+  /// Take the given pool's allocations and add them to this pool.
+  void takeAllFrom(AttributePool &pool) {
+    takePool(pool);
+    pool.Attrs.clear();
+  }
+
+  ParsedAttr *create(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     ArgsUnion *args, unsigned numArgs,
+                     ParsedAttr::Syntax syntax,
+                     SourceLocation ellipsisLoc = SourceLocation()) {
+    size_t temp =
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(numArgs, 0, 0, 0, 0);
+    (void)temp;
+    void *memory = allocate(
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(numArgs, 0, 0, 0,
+                                                           0));
+    return add(new (memory) ParsedAttr(attrName, attrRange, scopeName, scopeLoc,
+                                       args, numArgs, syntax, ellipsisLoc));
+  }
+
+  ParsedAttr *create(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     IdentifierLoc *Param, const AvailabilityChange &introduced,
+                     const AvailabilityChange &deprecated,
+                     const AvailabilityChange &obsoleted,
+                     SourceLocation unavailable, const Expr *MessageExpr,
+                     ParsedAttr::Syntax syntax, SourceLocation strict,
+                     const Expr *ReplacementExpr) {
+    void *memory = allocate(AttributeFactory::AvailabilityAllocSize);
+    return add(new (memory) ParsedAttr(
+        attrName, attrRange, scopeName, scopeLoc, Param, introduced, deprecated,
+        obsoleted, unavailable, MessageExpr, syntax, strict, ReplacementExpr));
+  }
+
+  ParsedAttr *create(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     IdentifierLoc *Param1, IdentifierLoc *Param2,
+                     IdentifierLoc *Param3, ParsedAttr::Syntax syntax) {
+    void *memory = allocate(
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(3, 0, 0, 0, 0));
+    return add(new (memory) ParsedAttr(attrName, attrRange, scopeName, scopeLoc,
+                                       Param1, Param2, Param3, syntax));
+  }
+
+  ParsedAttr *
+  createTypeTagForDatatype(IdentifierInfo *attrName, SourceRange attrRange,
+                           IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                           IdentifierLoc *argumentKind,
+                           ParsedType matchingCType, bool layoutCompatible,
+                           bool mustBeNull, ParsedAttr::Syntax syntax) {
+    void *memory = allocate(AttributeFactory::TypeTagForDatatypeAllocSize);
+    return add(new (memory) ParsedAttr(attrName, attrRange, scopeName, scopeLoc,
+                                       argumentKind, matchingCType,
+                                       layoutCompatible, mustBeNull, syntax));
+  }
+
+  ParsedAttr *createTypeAttribute(IdentifierInfo *attrName,
+                                  SourceRange attrRange,
+                                  IdentifierInfo *scopeName,
+                                  SourceLocation scopeLoc, ParsedType typeArg,
+                                  ParsedAttr::Syntax syntaxUsed) {
+    void *memory = allocate(
+        ParsedAttr::totalSizeToAlloc<ArgsUnion, detail::AvailabilityData,
+                                     detail::TypeTagForDatatypeData, ParsedType,
+                                     detail::PropertyData>(0, 0, 0, 1, 0));
+    return add(new (memory) ParsedAttr(attrName, attrRange, scopeName, scopeLoc,
+                                       typeArg, syntaxUsed));
+  }
+
+  ParsedAttr *
+  createPropertyAttribute(IdentifierInfo *attrName, SourceRange attrRange,
+                          IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                          IdentifierInfo *getterId, IdentifierInfo *setterId,
+                          ParsedAttr::Syntax syntaxUsed) {
+    void *memory = allocate(AttributeFactory::PropertyAllocSize);
+    return add(new (memory) ParsedAttr(attrName, attrRange, scopeName, scopeLoc,
+                                       getterId, setterId, syntaxUsed));
+  }
+};
+
+class ParsedAttributesView {
+  using VecTy = llvm::TinyPtrVector<ParsedAttr *>;
+  using SizeType = decltype(std::declval<VecTy>().size());
+
+public:
+  bool empty() const { return AttrList.empty(); }
+  SizeType size() const { return AttrList.size(); }
+  ParsedAttr &operator[](SizeType pos) { return *AttrList[pos]; }
+  const ParsedAttr &operator[](SizeType pos) const { return *AttrList[pos]; }
+
+  void addAtEnd(ParsedAttr *newAttr) {
+    assert(newAttr);
+    AttrList.push_back(newAttr);
+  }
+
+  void remove(ParsedAttr *ToBeRemoved) {
+    assert(is_contained(AttrList, ToBeRemoved) &&
+           "Cannot remove attribute that isn't in the list");
+    AttrList.erase(llvm::find(AttrList, ToBeRemoved));
+  }
+
+  void clearListOnly() { AttrList.clear(); }
+
+  struct iterator : llvm::iterator_adaptor_base<iterator, VecTy::iterator,
+                                                std::random_access_iterator_tag,
+                                                ParsedAttr> {
+    iterator() : iterator_adaptor_base(nullptr) {}
+    iterator(VecTy::iterator I) : iterator_adaptor_base(I) {}
+    reference operator*() { return **I; }
+    friend class ParsedAttributesView;
+  };
+  struct const_iterator
+      : llvm::iterator_adaptor_base<const_iterator, VecTy::const_iterator,
+                                    std::random_access_iterator_tag,
+                                    ParsedAttr> {
+    const_iterator() : iterator_adaptor_base(nullptr) {}
+    const_iterator(VecTy::const_iterator I) : iterator_adaptor_base(I) {}
+
+    reference operator*() const { return **I; }
+    friend class ParsedAttributesView;
+  };
+
+  void addAll(iterator B, iterator E) {
+    AttrList.insert(AttrList.begin(), B.I, E.I);
+  }
+
+  void addAll(const_iterator B, const_iterator E) {
+    AttrList.insert(AttrList.begin(), B.I, E.I);
+  }
+
+  void addAllAtEnd(iterator B, iterator E) {
+    AttrList.insert(AttrList.end(), B.I, E.I);
+  }
+
+  void addAllAtEnd(const_iterator B, const_iterator E) {
+    AttrList.insert(AttrList.end(), B.I, E.I);
+  }
+
+  iterator begin() { return iterator(AttrList.begin()); }
+  const_iterator begin() const { return const_iterator(AttrList.begin()); }
+  iterator end() { return iterator(AttrList.end()); }
+  const_iterator end() const { return const_iterator(AttrList.end()); }
+
+  ParsedAttr &front() {
+    assert(!empty());
+    return *AttrList.front();
+  }
+  const ParsedAttr &front() const {
+    assert(!empty());
+    return *AttrList.front();
+  }
+  ParsedAttr &back() {
+    assert(!empty());
+    return *AttrList.back();
+  }
+  const ParsedAttr &back() const {
+    assert(!empty());
+    return *AttrList.back();
+  }
+
+  bool hasAttribute(ParsedAttr::Kind K) const {
+    return llvm::any_of(
+        AttrList, [K](const ParsedAttr *AL) { return AL->getKind() == K; });
+  }
+
+private:
+  VecTy AttrList;
+};
+
+/// ParsedAttributes - A collection of parsed attributes.  Currently
+/// we don't differentiate between the various attribute syntaxes,
+/// which is basically silly.
+///
+/// Right now this is a very lightweight container, but the expectation
+/// is that this will become significantly more serious.
+class ParsedAttributes : public ParsedAttributesView {
+public:
+  ParsedAttributes(AttributeFactory &factory) : pool(factory) {}
+  ParsedAttributes(const ParsedAttributes &) = delete;
+
+  AttributePool &getPool() const { return pool; }
+
+  void takeAllFrom(ParsedAttributes &attrs) {
+    addAll(attrs.begin(), attrs.end());
+    attrs.clearListOnly();
+    pool.takeAllFrom(attrs.pool);
+  }
+
+  void clear() {
+    clearListOnly();
+    pool.clear();
+  }
+
+  /// Add attribute with expression arguments.
+  ParsedAttr *addNew(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     ArgsUnion *args, unsigned numArgs,
+                     ParsedAttr::Syntax syntax,
+                     SourceLocation ellipsisLoc = SourceLocation()) {
+    ParsedAttr *attr = pool.create(attrName, attrRange, scopeName, scopeLoc,
+                                   args, numArgs, syntax, ellipsisLoc);
+    addAtEnd(attr);
+    return attr;
+  }
+
+  /// Add availability attribute.
+  ParsedAttr *addNew(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     IdentifierLoc *Param, const AvailabilityChange &introduced,
+                     const AvailabilityChange &deprecated,
+                     const AvailabilityChange &obsoleted,
+                     SourceLocation unavailable, const Expr *MessageExpr,
+                     ParsedAttr::Syntax syntax, SourceLocation strict,
+                     const Expr *ReplacementExpr) {
+    ParsedAttr *attr = pool.create(
+        attrName, attrRange, scopeName, scopeLoc, Param, introduced, deprecated,
+        obsoleted, unavailable, MessageExpr, syntax, strict, ReplacementExpr);
+    addAtEnd(attr);
+    return attr;
+  }
+
+  /// Add objc_bridge_related attribute.
+  ParsedAttr *addNew(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     IdentifierLoc *Param1, IdentifierLoc *Param2,
+                     IdentifierLoc *Param3, ParsedAttr::Syntax syntax) {
+    ParsedAttr *attr = pool.create(attrName, attrRange, scopeName, scopeLoc,
+                                   Param1, Param2, Param3, syntax);
+    addAtEnd(attr);
+    return attr;
+  }
+
+  /// Add type_tag_for_datatype attribute.
+  ParsedAttr *
+  addNewTypeTagForDatatype(IdentifierInfo *attrName, SourceRange attrRange,
+                           IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                           IdentifierLoc *argumentKind,
+                           ParsedType matchingCType, bool layoutCompatible,
+                           bool mustBeNull, ParsedAttr::Syntax syntax) {
+    ParsedAttr *attr = pool.createTypeTagForDatatype(
+        attrName, attrRange, scopeName, scopeLoc, argumentKind, matchingCType,
+        layoutCompatible, mustBeNull, syntax);
+    addAtEnd(attr);
+    return attr;
+  }
+
+  /// Add an attribute with a single type argument.
+  ParsedAttr *addNewTypeAttr(IdentifierInfo *attrName, SourceRange attrRange,
+                             IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                             ParsedType typeArg,
+                             ParsedAttr::Syntax syntaxUsed) {
+    ParsedAttr *attr = pool.createTypeAttribute(attrName, attrRange, scopeName,
+                                                scopeLoc, typeArg, syntaxUsed);
+    addAtEnd(attr);
+    return attr;
+  }
+
+  /// Add microsoft __delspec(property) attribute.
+  ParsedAttr *
+  addNewPropertyAttr(IdentifierInfo *attrName, SourceRange attrRange,
+                     IdentifierInfo *scopeName, SourceLocation scopeLoc,
+                     IdentifierInfo *getterId, IdentifierInfo *setterId,
+                     ParsedAttr::Syntax syntaxUsed) {
+    ParsedAttr *attr =
+        pool.createPropertyAttribute(attrName, attrRange, scopeName, scopeLoc,
+                                     getterId, setterId, syntaxUsed);
+    addAtEnd(attr);
+    return attr;
+  }
+
+private:
+  mutable AttributePool pool;
+};
+
+/// These constants match the enumerated choices of
+/// err_attribute_argument_n_type and err_attribute_argument_type.
+enum AttributeArgumentNType {
+  AANT_ArgumentIntOrBool,
+  AANT_ArgumentIntegerConstant,
+  AANT_ArgumentString,
+  AANT_ArgumentIdentifier
+};
+
+/// These constants match the enumerated choices of
+/// warn_attribute_wrong_decl_type and err_attribute_wrong_decl_type.
+enum AttributeDeclKind {
+  ExpectedFunction,
+  ExpectedUnion,
+  ExpectedVariableOrFunction,
+  ExpectedFunctionOrMethod,
+  ExpectedFunctionMethodOrBlock,
+  ExpectedFunctionMethodOrParameter,
+  ExpectedVariable,
+  ExpectedVariableOrField,
+  ExpectedVariableFieldOrTag,
+  ExpectedTypeOrNamespace,
+  ExpectedFunctionVariableOrClass,
+  ExpectedKernelFunction,
+  ExpectedFunctionWithProtoType,
+};
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+                                           const ParsedAttr &At) {
+  DB.AddTaggedVal(reinterpret_cast<intptr_t>(At.getName()),
+                  DiagnosticsEngine::ak_identifierinfo);
+  return DB;
+}
+
+inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+                                           const ParsedAttr &At) {
+  PD.AddTaggedVal(reinterpret_cast<intptr_t>(At.getName()),
+                  DiagnosticsEngine::ak_identifierinfo);
+  return PD;
+}
+
+inline const DiagnosticBuilder &operator<<(const DiagnosticBuilder &DB,
+                                           const ParsedAttr *At) {
+  DB.AddTaggedVal(reinterpret_cast<intptr_t>(At->getName()),
+                  DiagnosticsEngine::ak_identifierinfo);
+  return DB;
+}
+
+inline const PartialDiagnostic &operator<<(const PartialDiagnostic &PD,
+                                           const ParsedAttr *At) {
+  PD.AddTaggedVal(reinterpret_cast<intptr_t>(At->getName()),
+                  DiagnosticsEngine::ak_identifierinfo);
+  return PD;
+}
+
+} // namespace clang
+
+#endif // LLVM_CLANG_SEMA_ATTRIBUTELIST_H
diff --git a/linux-x64/clang/include/clang/Sema/ParsedTemplate.h b/linux-x64/clang/include/clang/Sema/ParsedTemplate.h
index e980e4d..258b229 100644
--- a/linux-x64/clang/include/clang/Sema/ParsedTemplate.h
+++ b/linux-x64/clang/include/clang/Sema/ParsedTemplate.h
@@ -25,131 +25,131 @@
 #include <cstdlib>
 #include <new>
 
-namespace clang {  
-  /// \brief Represents the parsed form of a C++ template argument.
+namespace clang {
+  /// Represents the parsed form of a C++ template argument.
   class ParsedTemplateArgument {
   public:
-    /// \brief Describes the kind of template argument that was parsed.
+    /// Describes the kind of template argument that was parsed.
     enum KindType {
-      /// \brief A template type parameter, stored as a type.
+      /// A template type parameter, stored as a type.
       Type,
-      /// \brief A non-type template parameter, stored as an expression.
+      /// A non-type template parameter, stored as an expression.
       NonType,
-      /// \brief A template template argument, stored as a template name.
+      /// A template template argument, stored as a template name.
       Template
     };
 
-    /// \brief Build an empty template argument. 
+    /// Build an empty template argument.
     ///
     /// This template argument is invalid.
     ParsedTemplateArgument() : Kind(Type), Arg(nullptr) { }
-    
-    /// \brief Create a template type argument or non-type template argument.
+
+    /// Create a template type argument or non-type template argument.
     ///
     /// \param Arg the template type argument or non-type template argument.
     /// \param Loc the location of the type.
     ParsedTemplateArgument(KindType Kind, void *Arg, SourceLocation Loc)
       : Kind(Kind), Arg(Arg), Loc(Loc) { }
-    
-    /// \brief Create a template template argument.
+
+    /// Create a template template argument.
     ///
     /// \param SS the C++ scope specifier that precedes the template name, if
     /// any.
     ///
-    /// \param Template the template to which this template template 
+    /// \param Template the template to which this template template
     /// argument refers.
     ///
     /// \param TemplateLoc the location of the template name.
     ParsedTemplateArgument(const CXXScopeSpec &SS,
-                           ParsedTemplateTy Template, 
-                           SourceLocation TemplateLoc) 
+                           ParsedTemplateTy Template,
+                           SourceLocation TemplateLoc)
       : Kind(ParsedTemplateArgument::Template),
-        Arg(Template.getAsOpaquePtr()), 
+        Arg(Template.getAsOpaquePtr()),
         SS(SS), Loc(TemplateLoc), EllipsisLoc() { }
-    
-    /// \brief Determine whether the given template argument is invalid.
+
+    /// Determine whether the given template argument is invalid.
     bool isInvalid() const { return Arg == nullptr; }
-    
-    /// \brief Determine what kind of template argument we have.
+
+    /// Determine what kind of template argument we have.
     KindType getKind() const { return Kind; }
-    
-    /// \brief Retrieve the template type argument's type.
+
+    /// Retrieve the template type argument's type.
     ParsedType getAsType() const {
       assert(Kind == Type && "Not a template type argument");
       return ParsedType::getFromOpaquePtr(Arg);
     }
-    
-    /// \brief Retrieve the non-type template argument's expression.
+
+    /// Retrieve the non-type template argument's expression.
     Expr *getAsExpr() const {
       assert(Kind == NonType && "Not a non-type template argument");
       return static_cast<Expr*>(Arg);
     }
-    
-    /// \brief Retrieve the template template argument's template name.
+
+    /// Retrieve the template template argument's template name.
     ParsedTemplateTy getAsTemplate() const {
       assert(Kind == Template && "Not a template template argument");
       return ParsedTemplateTy::getFromOpaquePtr(Arg);
     }
-    
-    /// \brief Retrieve the location of the template argument.
+
+    /// Retrieve the location of the template argument.
     SourceLocation getLocation() const { return Loc; }
-    
-    /// \brief Retrieve the nested-name-specifier that precedes the template
+
+    /// Retrieve the nested-name-specifier that precedes the template
     /// name in a template template argument.
     const CXXScopeSpec &getScopeSpec() const {
-      assert(Kind == Template && 
+      assert(Kind == Template &&
              "Only template template arguments can have a scope specifier");
       return SS;
     }
-    
-    /// \brief Retrieve the location of the ellipsis that makes a template
+
+    /// Retrieve the location of the ellipsis that makes a template
     /// template argument into a pack expansion.
     SourceLocation getEllipsisLoc() const {
-      assert(Kind == Template && 
+      assert(Kind == Template &&
              "Only template template arguments can have an ellipsis");
       return EllipsisLoc;
     }
-    
-    /// \brief Retrieve a pack expansion of the given template template
+
+    /// Retrieve a pack expansion of the given template template
     /// argument.
     ///
     /// \param EllipsisLoc The location of the ellipsis.
     ParsedTemplateArgument getTemplatePackExpansion(
                                               SourceLocation EllipsisLoc) const;
-    
+
   private:
     KindType Kind;
-    
-    /// \brief The actual template argument representation, which may be
+
+    /// The actual template argument representation, which may be
     /// an \c Sema::TypeTy* (for a type), an Expr* (for an
     /// expression), or an Sema::TemplateTy (for a template).
     void *Arg;
 
-    /// \brief The nested-name-specifier that can accompany a template template
+    /// The nested-name-specifier that can accompany a template template
     /// argument.
     CXXScopeSpec SS;
 
-    /// \brief the location of the template argument.
+    /// the location of the template argument.
     SourceLocation Loc;
 
-    /// \brief The ellipsis location that can accompany a template template
+    /// The ellipsis location that can accompany a template template
     /// argument (turning it into a template template argument expansion).
     SourceLocation EllipsisLoc;
   };
-  
-  /// \brief Information about a template-id annotation
+
+  /// Information about a template-id annotation
   /// token.
   ///
-  /// A template-id annotation token contains the template declaration, 
-  /// template arguments, whether those template arguments were types, 
-  /// expressions, or template names, and the source locations for important 
-  /// tokens. All of the information about template arguments is allocated 
+  /// A template-id annotation token contains the template declaration,
+  /// template arguments, whether those template arguments were types,
+  /// expressions, or template names, and the source locations for important
+  /// tokens. All of the information about template arguments is allocated
   /// directly after this structure.
   struct TemplateIdAnnotation final
       : private llvm::TrailingObjects<TemplateIdAnnotation,
                                       ParsedTemplateArgument> {
     friend TrailingObjects;
-    /// \brief The nested-name-specifier that precedes the template name.
+    /// The nested-name-specifier that precedes the template name.
     CXXScopeSpec SS;
 
     /// TemplateKWLoc - The location of the template keyword.
@@ -159,37 +159,37 @@
     /// TemplateNameLoc - The location of the template name within the
     /// source.
     SourceLocation TemplateNameLoc;
-    
+
     /// FIXME: Temporarily stores the name of a specialization
     IdentifierInfo *Name;
-    
+
     /// FIXME: Temporarily stores the overloaded operator kind.
     OverloadedOperatorKind Operator;
-    
+
     /// The declaration of the template corresponding to the
     /// template-name.
     ParsedTemplateTy Template;
-    
+
     /// The kind of template that Template refers to.
     TemplateNameKind Kind;
-    
+
     /// The location of the '<' before the template argument
     /// list.
     SourceLocation LAngleLoc;
-    
+
     /// The location of the '>' after the template argument
     /// list.
     SourceLocation RAngleLoc;
-    
+
     /// NumArgs - The number of template arguments.
     unsigned NumArgs;
-    
-    /// \brief Retrieves a pointer to the template arguments
-    ParsedTemplateArgument *getTemplateArgs() { 
-      return getTrailingObjects<ParsedTemplateArgument>(); 
+
+    /// Retrieves a pointer to the template arguments
+    ParsedTemplateArgument *getTemplateArgs() {
+      return getTrailingObjects<ParsedTemplateArgument>();
     }
 
-    /// \brief Creates a new TemplateIdAnnotation with NumArgs arguments and
+    /// Creates a new TemplateIdAnnotation with NumArgs arguments and
     /// appends it to List.
     static TemplateIdAnnotation *
     Create(CXXScopeSpec SS, SourceLocation TemplateKWLoc,
@@ -213,7 +213,7 @@
           getTemplateArgs(), getTemplateArgs() + NumArgs,
           [](ParsedTemplateArgument &A) { A.~ParsedTemplateArgument(); });
       this->~TemplateIdAnnotation();
-      free(this); 
+      free(this);
     }
   private:
     TemplateIdAnnotation(const TemplateIdAnnotation &) = delete;
@@ -239,7 +239,7 @@
 
   /// Retrieves the range of the given template parameter lists.
   SourceRange getTemplateParamsRange(TemplateParameterList const *const *Params,
-                                     unsigned NumParams);  
+                                     unsigned NumParams);
 } // end namespace clang
 
 #endif // LLVM_CLANG_SEMA_PARSEDTEMPLATE_H
diff --git a/linux-x64/clang/include/clang/Sema/Scope.h b/linux-x64/clang/include/clang/Sema/Scope.h
index ba32784..11fa036 100644
--- a/linux-x64/clang/include/clang/Sema/Scope.h
+++ b/linux-x64/clang/include/clang/Sema/Scope.h
@@ -42,74 +42,74 @@
   /// ScopeFlags - These are bitfields that are or'd together when creating a
   /// scope, which defines the sorts of things the scope contains.
   enum ScopeFlags {
-    /// \brief This indicates that the scope corresponds to a function, which
+    /// This indicates that the scope corresponds to a function, which
     /// means that labels are set here.
     FnScope       = 0x01,
 
-    /// \brief This is a while, do, switch, for, etc that can have break
+    /// This is a while, do, switch, for, etc that can have break
     /// statements embedded into it.
     BreakScope    = 0x02,
 
-    /// \brief This is a while, do, for, which can have continue statements
+    /// This is a while, do, for, which can have continue statements
     /// embedded into it.
     ContinueScope = 0x04,
 
-    /// \brief This is a scope that can contain a declaration.  Some scopes
+    /// This is a scope that can contain a declaration.  Some scopes
     /// just contain loop constructs but don't contain decls.
     DeclScope = 0x08,
 
-    /// \brief The controlling scope in a if/switch/while/for statement.
+    /// The controlling scope in a if/switch/while/for statement.
     ControlScope = 0x10,
 
-    /// \brief The scope of a struct/union/class definition.
+    /// The scope of a struct/union/class definition.
     ClassScope = 0x20,
 
-    /// \brief This is a scope that corresponds to a block/closure object.
+    /// This is a scope that corresponds to a block/closure object.
     /// Blocks serve as top-level scopes for some objects like labels, they
     /// also prevent things like break and continue.  BlockScopes always have
     /// the FnScope and DeclScope flags set as well.
     BlockScope = 0x40,
 
-    /// \brief This is a scope that corresponds to the
+    /// This is a scope that corresponds to the
     /// template parameters of a C++ template. Template parameter
     /// scope starts at the 'template' keyword and ends when the
     /// template declaration ends.
     TemplateParamScope = 0x80,
 
-    /// \brief This is a scope that corresponds to the
+    /// This is a scope that corresponds to the
     /// parameters within a function prototype.
     FunctionPrototypeScope = 0x100,
 
-    /// \brief This is a scope that corresponds to the parameters within
+    /// This is a scope that corresponds to the parameters within
     /// a function prototype for a function declaration (as opposed to any
     /// other kind of function declarator). Always has FunctionPrototypeScope
     /// set as well.
     FunctionDeclarationScope = 0x200,
 
-    /// \brief This is a scope that corresponds to the Objective-C
+    /// This is a scope that corresponds to the Objective-C
     /// \@catch statement.
     AtCatchScope = 0x400,
-    
-    /// \brief This scope corresponds to an Objective-C method body.
+
+    /// This scope corresponds to an Objective-C method body.
     /// It always has FnScope and DeclScope set as well.
     ObjCMethodScope = 0x800,
 
-    /// \brief This is a scope that corresponds to a switch statement.
+    /// This is a scope that corresponds to a switch statement.
     SwitchScope = 0x1000,
 
-    /// \brief This is the scope of a C++ try statement.
+    /// This is the scope of a C++ try statement.
     TryScope = 0x2000,
 
-    /// \brief This is the scope for a function-level C++ try or catch scope.
+    /// This is the scope for a function-level C++ try or catch scope.
     FnTryCatchScope = 0x4000,
 
-    /// \brief This is the scope of OpenMP executable directive.
+    /// This is the scope of OpenMP executable directive.
     OpenMPDirectiveScope = 0x8000,
 
-    /// \brief This is the scope of some OpenMP loop directive.
+    /// This is the scope of some OpenMP loop directive.
     OpenMPLoopDirectiveScope = 0x10000,
 
-    /// \brief This is the scope of some OpenMP simd directive.
+    /// This is the scope of some OpenMP simd directive.
     /// For example, it is used for 'omp simd', 'omp for simd'.
     /// This flag is propagated to children scopes.
     OpenMPSimdDirectiveScope = 0x20000,
@@ -146,7 +146,7 @@
   /// depth 0.
   unsigned short Depth;
 
-  /// \brief Declarations with static linkage are mangled with the number of
+  /// Declarations with static linkage are mangled with the number of
   /// scopes seen as a component.
   unsigned short MSLastManglingNumber;
 
@@ -198,7 +198,7 @@
   using UsingDirectivesTy = SmallVector<UsingDirectiveDecl *, 2>;
   UsingDirectivesTy UsingDirectives;
 
-  /// \brief Used to determine if errors occurred in this scope.
+  /// Used to determine if errors occurred in this scope.
   DiagnosticErrorTrap ErrorTrap;
 
   /// A lattice consisting of undefined, a single NRVO candidate variable in
@@ -347,7 +347,7 @@
     }
     return false;
   }
-  
+
   /// isInObjcMethodScope - Return true if this scope is, or is contained in, an
   /// Objective-C method body.  Note that this method is not constant time.
   bool isInObjcMethodScope() const {
@@ -401,12 +401,12 @@
     return false;
   }
 
-  /// \brief Determines whether this scope is the OpenMP directive scope
+  /// Determines whether this scope is the OpenMP directive scope
   bool isOpenMPDirectiveScope() const {
     return (getFlags() & Scope::OpenMPDirectiveScope);
   }
 
-  /// \brief Determine whether this scope is some OpenMP loop directive scope
+  /// Determine whether this scope is some OpenMP loop directive scope
   /// (for example, 'omp for', 'omp simd').
   bool isOpenMPLoopDirectiveScope() const {
     if (getFlags() & Scope::OpenMPLoopDirectiveScope) {
@@ -417,34 +417,34 @@
     return false;
   }
 
-  /// \brief Determine whether this scope is (or is nested into) some OpenMP
+  /// Determine whether this scope is (or is nested into) some OpenMP
   /// loop simd directive scope (for example, 'omp simd', 'omp for simd').
   bool isOpenMPSimdDirectiveScope() const {
     return getFlags() & Scope::OpenMPSimdDirectiveScope;
   }
 
-  /// \brief Determine whether this scope is a loop having OpenMP loop
+  /// Determine whether this scope is a loop having OpenMP loop
   /// directive attached.
   bool isOpenMPLoopScope() const {
     const Scope *P = getParent();
     return P && P->isOpenMPLoopDirectiveScope();
   }
 
-  /// \brief Determine whether this scope is a C++ 'try' block.
+  /// Determine whether this scope is a C++ 'try' block.
   bool isTryScope() const { return getFlags() & Scope::TryScope; }
 
-  /// \brief Determine whether this scope is a SEH '__try' block.
+  /// Determine whether this scope is a SEH '__try' block.
   bool isSEHTryScope() const { return getFlags() & Scope::SEHTryScope; }
 
-  /// \brief Determine whether this scope is a SEH '__except' block.
+  /// Determine whether this scope is a SEH '__except' block.
   bool isSEHExceptScope() const { return getFlags() & Scope::SEHExceptScope; }
 
-  /// \brief Determine whether this scope is a compound statement scope.
+  /// Determine whether this scope is a compound statement scope.
   bool isCompoundStmtScope() const {
     return getFlags() & Scope::CompoundStmtScope;
   }
 
-  /// \brief Returns if rhs has a higher scope depth than this.
+  /// Returns if rhs has a higher scope depth than this.
   ///
   /// The caller is responsible for calling this only if one of the two scopes
   /// is an ancestor of the other.
@@ -487,7 +487,7 @@
   /// Init - This is used by the parser to implement scope caching.
   void Init(Scope *parent, unsigned flags);
 
-  /// \brief Sets up the specified scope flags and adjusts the scope state
+  /// Sets up the specified scope flags and adjusts the scope state
   /// variables accordingly.
   void AddFlags(unsigned Flags);
 
diff --git a/linux-x64/clang/include/clang/Sema/ScopeInfo.h b/linux-x64/clang/include/clang/Sema/ScopeInfo.h
index 744be7e..5925fd6 100644
--- a/linux-x64/clang/include/clang/Sema/ScopeInfo.h
+++ b/linux-x64/clang/include/clang/Sema/ScopeInfo.h
@@ -61,15 +61,15 @@
 
 namespace sema {
 
-/// \brief Contains information about the compound statement currently being
+/// Contains information about the compound statement currently being
 /// parsed.
 class CompoundScopeInfo {
 public:
-  /// \brief Whether this compound stamement contains `for' or `while' loops
+  /// Whether this compound stamement contains `for' or `while' loops
   /// with empty bodies.
   bool HasEmptyLoopBodies = false;
 
-  /// \brief Whether this compound statement corresponds to a GNU statement
+  /// Whether this compound statement corresponds to a GNU statement
   /// expression.
   bool IsStmtExpr;
 
@@ -85,13 +85,13 @@
   PartialDiagnostic PD;
   SourceLocation Loc;
   const Stmt *stmt;
-  
+
   PossiblyUnreachableDiag(const PartialDiagnostic &PD, SourceLocation Loc,
                           const Stmt *stmt)
       : PD(PD), Loc(Loc), stmt(stmt) {}
 };
-    
-/// \brief Retains information about a function, method, or block that is
+
+/// Retains information about a function, method, or block that is
 /// currently being parsed.
 class FunctionScopeInfo {
 protected:
@@ -101,31 +101,31 @@
     SK_Lambda,
     SK_CapturedRegion
   };
-  
+
 public:
-  /// \brief What kind of scope we are describing.
+  /// What kind of scope we are describing.
   ScopeKind Kind : 3;
 
-  /// \brief Whether this function contains a VLA, \@try, try, C++
+  /// Whether this function contains a VLA, \@try, try, C++
   /// initializer, or anything else that can't be jumped past.
   bool HasBranchProtectedScope : 1;
 
-  /// \brief Whether this function contains any switches or direct gotos.
+  /// Whether this function contains any switches or direct gotos.
   bool HasBranchIntoScope : 1;
 
-  /// \brief Whether this function contains any indirect gotos.
+  /// Whether this function contains any indirect gotos.
   bool HasIndirectGoto : 1;
 
-  /// \brief Whether a statement was dropped because it was invalid.
+  /// Whether a statement was dropped because it was invalid.
   bool HasDroppedStmt : 1;
 
-  /// \brief True if current scope is for OpenMP declare reduction combiner.
+  /// True if current scope is for OpenMP declare reduction combiner.
   bool HasOMPDeclareReductionCombiner : 1;
 
-  /// \brief Whether there is a fallthrough statement in this function.
+  /// Whether there is a fallthrough statement in this function.
   bool HasFallthroughStmt : 1;
 
-  /// \brief Whether we make reference to a declaration that could be
+  /// Whether we make reference to a declaration that could be
   /// unavailable.
   bool HasPotentialAvailabilityViolations : 1;
 
@@ -151,11 +151,11 @@
   /// false if there is an invocation of an initializer on 'self'.
   bool ObjCWarnForNoInitDelegation : 1;
 
-  /// \brief True only when this function has not already built, or attempted
+  /// True only when this function has not already built, or attempted
   /// to build, the initial and final coroutine suspend points
   bool NeedsCoroutineSuspends : 1;
 
-  /// \brief An enumeration represeting the kind of the first coroutine statement
+  /// An enumeration represeting the kind of the first coroutine statement
   /// in the function. One of co_return, co_await, or co_yield.
   unsigned char FirstCoroutineStmtKind : 2;
 
@@ -172,38 +172,42 @@
   /// First SEH '__try' statement in the current function.
   SourceLocation FirstSEHTryLoc;
 
-  /// \brief Used to determine if errors occurred in this function or block.
+  /// Used to determine if errors occurred in this function or block.
   DiagnosticErrorTrap ErrorTrap;
 
+  /// A SwitchStmt, along with a flag indicating if its list of case statements
+  /// is incomplete (because we dropped an invalid one while parsing).
+  using SwitchInfo = llvm::PointerIntPair<SwitchStmt*, 1, bool>;
+
   /// SwitchStack - This is the current set of active switch statements in the
   /// block.
-  SmallVector<SwitchStmt*, 8> SwitchStack;
+  SmallVector<SwitchInfo, 8> SwitchStack;
 
-  /// \brief The list of return statements that occur within the function or
+  /// The list of return statements that occur within the function or
   /// block, if there is any chance of applying the named return value
   /// optimization, or if we need to infer a return type.
   SmallVector<ReturnStmt*, 4> Returns;
 
-  /// \brief The promise object for this coroutine, if any.
+  /// The promise object for this coroutine, if any.
   VarDecl *CoroutinePromise = nullptr;
 
-  /// \brief A mapping between the coroutine function parameters that were moved
+  /// A mapping between the coroutine function parameters that were moved
   /// to the coroutine frame, and their move statements.
   llvm::SmallMapVector<ParmVarDecl *, Stmt *, 4> CoroutineParameterMoves;
 
-  /// \brief The initial and final coroutine suspend points.
+  /// The initial and final coroutine suspend points.
   std::pair<Stmt *, Stmt *> CoroutineSuspends;
 
-  /// \brief The stack of currently active compound stamement scopes in the
+  /// The stack of currently active compound stamement scopes in the
   /// function.
   SmallVector<CompoundScopeInfo, 4> CompoundScopes;
 
-  /// \brief A list of PartialDiagnostics created but delayed within the
+  /// A list of PartialDiagnostics created but delayed within the
   /// current function scope.  These diagnostics are vetted for reachability
   /// prior to being emitted.
   SmallVector<PossiblyUnreachableDiag, 4> PossiblyUnreachableDiags;
-  
-  /// \brief A list of parameters which have the nonnull attribute and are
+
+  /// A list of parameters which have the nonnull attribute and are
   /// modified in the function.
   llvm::SmallPtrSet<const ParmVarDecl *, 8> ModifiedNonNullParams;
 
@@ -464,7 +468,7 @@
     CoroutineSuspends.second = Final;
   }
 
-  /// \brief Clear out the information in this function scope, making it
+  /// Clear out the information in this function scope, making it
   /// suitable for reuse.
   void Clear();
 };
@@ -501,21 +505,21 @@
   /// a non-trivial copy constructor.
   llvm::PointerIntPair<void *, 2, CaptureKind> InitExprAndCaptureKind;
 
-  /// \brief The source location at which the first capture occurred.
+  /// The source location at which the first capture occurred.
   SourceLocation Loc;
 
-  /// \brief The location of the ellipsis that expands a parameter pack.
+  /// The location of the ellipsis that expands a parameter pack.
   SourceLocation EllipsisLoc;
 
-  /// \brief The type as it was captured, which is in effect the type of the
+  /// The type as it was captured, which is in effect the type of the
   /// non-static data member that would hold the capture.
   QualType CaptureType;
 
-  /// \brief Whether an explicit capture has been odr-used in the body of the
+  /// Whether an explicit capture has been odr-used in the body of the
   /// lambda.
   bool ODRUsed = false;
 
-  /// \brief Whether an explicit capture has been non-odr-used in the body of
+  /// Whether an explicit capture has been non-odr-used in the body of
   /// the lambda.
   bool NonODRUsed = false;
 
@@ -574,14 +578,14 @@
     return VarAndNestedAndThis.getPointer();
   }
 
-  /// \brief Retrieve the location at which this variable was captured.
+  /// Retrieve the location at which this variable was captured.
   SourceLocation getLocation() const { return Loc; }
 
-  /// \brief Retrieve the source location of the ellipsis, whose presence
+  /// Retrieve the source location of the ellipsis, whose presence
   /// indicates that the capture is a pack expansion.
   SourceLocation getEllipsisLoc() const { return EllipsisLoc; }
 
-  /// \brief Retrieve the capture type for this capture, which is effectively
+  /// Retrieve the capture type for this capture, which is effectively
   /// the type of the non-static data member in the lambda/block structure
   /// that would store this capture.
   QualType getCaptureType() const {
@@ -620,7 +624,7 @@
   /// Captures - The captures.
   SmallVector<Capture, 4> Captures;
 
-  /// \brief - Whether the target type of return statements in this context
+  /// - Whether the target type of return statements in this context
   /// is deduced (e.g. a lambda or block with omitted return type).
   bool HasImplicitReturnType = false;
 
@@ -629,9 +633,9 @@
   QualType ReturnType;
 
   void addCapture(VarDecl *Var, bool isBlock, bool isByref, bool isNested,
-                  SourceLocation Loc, SourceLocation EllipsisLoc, 
+                  SourceLocation Loc, SourceLocation EllipsisLoc,
                   QualType CaptureType, Expr *Cpy) {
-    Captures.push_back(Capture(Var, isBlock, isByref, isNested, Loc, 
+    Captures.push_back(Capture(Var, isBlock, isByref, isNested, Loc,
                                EllipsisLoc, CaptureType, Cpy));
     CaptureMap[Var] = Captures.size();
   }
@@ -649,24 +653,24 @@
   void addThisCapture(bool isNested, SourceLocation Loc,
                       Expr *Cpy, bool ByCopy);
 
-  /// \brief Determine whether the C++ 'this' is captured.
+  /// Determine whether the C++ 'this' is captured.
   bool isCXXThisCaptured() const { return CXXThisCaptureIndex != 0; }
-  
-  /// \brief Retrieve the capture of C++ 'this', if it has been captured.
+
+  /// Retrieve the capture of C++ 'this', if it has been captured.
   Capture &getCXXThisCapture() {
     assert(isCXXThisCaptured() && "this has not been captured");
     return Captures[CXXThisCaptureIndex - 1];
   }
-  
-  /// \brief Determine whether the given variable has been captured.
+
+  /// Determine whether the given variable has been captured.
   bool isCaptured(VarDecl *Var) const {
     return CaptureMap.count(Var);
   }
 
-  /// \brief Determine whether the given variable-array type has been captured.
+  /// Determine whether the given variable-array type has been captured.
   bool isVLATypeCaptured(const VariableArrayType *VAT) const;
 
-  /// \brief Retrieve the capture of the given variable, if it has been
+  /// Retrieve the capture of the given variable, if it has been
   /// captured already.
   Capture &getCapture(VarDecl *Var) {
     assert(isCaptured(Var) && "Variable has not been captured");
@@ -680,17 +684,17 @@
     return Captures[Known->second - 1];
   }
 
-  static bool classof(const FunctionScopeInfo *FSI) { 
+  static bool classof(const FunctionScopeInfo *FSI) {
     return FSI->Kind == SK_Block || FSI->Kind == SK_Lambda
                                  || FSI->Kind == SK_CapturedRegion;
   }
 };
 
-/// \brief Retains information about a block that is currently being parsed.
+/// Retains information about a block that is currently being parsed.
 class BlockScopeInfo final : public CapturingScopeInfo {
 public:
   BlockDecl *TheDecl;
-  
+
   /// TheScope - This is the scope for the block itself, which contains
   /// arguments etc.
   Scope *TheScope;
@@ -707,27 +711,27 @@
 
   ~BlockScopeInfo() override;
 
-  static bool classof(const FunctionScopeInfo *FSI) { 
-    return FSI->Kind == SK_Block; 
+  static bool classof(const FunctionScopeInfo *FSI) {
+    return FSI->Kind == SK_Block;
   }
 };
 
-/// \brief Retains information about a captured region.
+/// Retains information about a captured region.
 class CapturedRegionScopeInfo final : public CapturingScopeInfo {
 public:
-  /// \brief The CapturedDecl for this statement.
+  /// The CapturedDecl for this statement.
   CapturedDecl *TheCapturedDecl;
 
-  /// \brief The captured record type.
+  /// The captured record type.
   RecordDecl *TheRecordDecl;
 
-  /// \brief This is the enclosing scope of the captured region.
+  /// This is the enclosing scope of the captured region.
   Scope *TheScope;
 
-  /// \brief The implicit parameter for the captured variables.
+  /// The implicit parameter for the captured variables.
   ImplicitParamDecl *ContextParam;
 
-  /// \brief The kind of captured region.
+  /// The kind of captured region.
   unsigned short CapRegionKind;
 
   unsigned short OpenMPLevel;
@@ -743,11 +747,13 @@
 
   ~CapturedRegionScopeInfo() override;
 
-  /// \brief A descriptive name for the kind of captured region this is.
+  /// A descriptive name for the kind of captured region this is.
   StringRef getRegionName() const {
     switch (CapRegionKind) {
     case CR_Default:
       return "default captured statement";
+    case CR_ObjCAtFinally:
+      return "Objective-C @finally statement";
     case CR_OpenMP:
       return "OpenMP region";
     }
@@ -761,41 +767,41 @@
 
 class LambdaScopeInfo final : public CapturingScopeInfo {
 public:
-  /// \brief The class that describes the lambda.
+  /// The class that describes the lambda.
   CXXRecordDecl *Lambda = nullptr;
 
-  /// \brief The lambda's compiler-generated \c operator().
+  /// The lambda's compiler-generated \c operator().
   CXXMethodDecl *CallOperator = nullptr;
 
-  /// \brief Source range covering the lambda introducer [...].
+  /// Source range covering the lambda introducer [...].
   SourceRange IntroducerRange;
 
-  /// \brief Source location of the '&' or '=' specifying the default capture
+  /// Source location of the '&' or '=' specifying the default capture
   /// type, if any.
   SourceLocation CaptureDefaultLoc;
 
-  /// \brief The number of captures in the \c Captures list that are
+  /// The number of captures in the \c Captures list that are
   /// explicit captures.
   unsigned NumExplicitCaptures = 0;
 
-  /// \brief Whether this is a mutable lambda.
+  /// Whether this is a mutable lambda.
   bool Mutable = false;
 
-  /// \brief Whether the (empty) parameter list is explicit.
+  /// Whether the (empty) parameter list is explicit.
   bool ExplicitParams = false;
 
-  /// \brief Whether any of the capture expressions requires cleanups.
+  /// Whether any of the capture expressions requires cleanups.
   CleanupInfo Cleanup;
 
-  /// \brief Whether the lambda contains an unexpanded parameter pack.
+  /// Whether the lambda contains an unexpanded parameter pack.
   bool ContainsUnexpandedParameterPack = false;
 
-  /// \brief If this is a generic lambda, use this as the depth of 
+  /// If this is a generic lambda, use this as the depth of
   /// each 'auto' parameter, during initial AST construction.
   unsigned AutoTemplateParameterDepth = 0;
 
-  /// \brief Store the list of the auto parameters for a generic lambda.
-  /// If this is a generic lambda, store the list of the auto 
+  /// Store the list of the auto parameters for a generic lambda.
+  /// If this is a generic lambda, store the list of the auto
   /// parameters converted into TemplateTypeParmDecls into a vector
   /// that can be used to construct the generic lambda's template
   /// parameter list, during initial AST construction.
@@ -805,28 +811,31 @@
   /// list has been created (from the AutoTemplateParams) then
   /// store a reference to it (cache it to avoid reconstructing it).
   TemplateParameterList *GLTemplateParameterList = nullptr;
-  
-  /// \brief Contains all variable-referring-expressions (i.e. DeclRefExprs
+
+  /// Contains all variable-referring-expressions (i.e. DeclRefExprs
   ///  or MemberExprs) that refer to local variables in a generic lambda
   ///  or a lambda in a potentially-evaluated-if-used context.
-  ///  
-  ///  Potentially capturable variables of a nested lambda that might need 
-  ///   to be captured by the lambda are housed here.  
+  ///
+  ///  Potentially capturable variables of a nested lambda that might need
+  ///   to be captured by the lambda are housed here.
   ///  This is specifically useful for generic lambdas or
   ///  lambdas within a potentially evaluated-if-used context.
   ///  If an enclosing variable is named in an expression of a lambda nested
-  ///  within a generic lambda, we don't always know know whether the variable 
+  ///  within a generic lambda, we don't always know know whether the variable
   ///  will truly be odr-used (i.e. need to be captured) by that nested lambda,
-  ///  until its instantiation. But we still need to capture it in the 
+  ///  until its instantiation. But we still need to capture it in the
   ///  enclosing lambda if all intervening lambdas can capture the variable.
   llvm::SmallVector<Expr*, 4> PotentiallyCapturingExprs;
 
-  /// \brief Contains all variable-referring-expressions that refer
+  /// Contains all variable-referring-expressions that refer
   ///  to local variables that are usable as constant expressions and
   ///  do not involve an odr-use (they may still need to be captured
   ///  if the enclosing full-expression is instantiation dependent).
   llvm::SmallSet<Expr *, 8> NonODRUsedCapturingExprs;
 
+  /// A map of explicit capture indices to their introducer source ranges.
+  llvm::DenseMap<unsigned, SourceRange> ExplicitCaptureRanges;
+
   /// Contains all of the variables defined in this lambda that shadow variables
   /// that were defined in parent contexts. Used to avoid warnings when the
   /// shadowed variables are uncaptured by this lambda.
@@ -843,7 +852,7 @@
     Kind = SK_Lambda;
   }
 
-  /// \brief Note when all explicit captures have been added.
+  /// Note when all explicit captures have been added.
   void finishedExplicitCaptures() {
     NumExplicitCaptures = Captures.size();
   }
@@ -858,10 +867,10 @@
     return !AutoTemplateParams.empty() || GLTemplateParameterList;
   }
 
-  /// \brief Add a variable that might potentially be captured by the 
-  /// lambda and therefore the enclosing lambdas. 
-  /// 
-  /// This is also used by enclosing lambda's to speculatively capture 
+  /// Add a variable that might potentially be captured by the
+  /// lambda and therefore the enclosing lambdas.
+  ///
+  /// This is also used by enclosing lambda's to speculatively capture
   /// variables that nested lambda's - depending on their enclosing
   /// specialization - might need to capture.
   /// Consider:
@@ -870,7 +879,7 @@
   /// void foo() {
   ///   const int x = 10;
   ///   auto L = [=](auto a) { // capture 'x'
-  ///      return [=](auto b) { 
+  ///      return [=](auto b) {
   ///        f(x, a);  // we may or may not need to capture 'x'
   ///      };
   ///   };
@@ -879,46 +888,46 @@
     assert(isa<DeclRefExpr>(VarExpr) || isa<MemberExpr>(VarExpr));
     PotentiallyCapturingExprs.push_back(VarExpr);
   }
-  
+
   void addPotentialThisCapture(SourceLocation Loc) {
     PotentialThisCaptureLocation = Loc;
   }
 
-  bool hasPotentialThisCapture() const { 
-    return PotentialThisCaptureLocation.isValid(); 
+  bool hasPotentialThisCapture() const {
+    return PotentialThisCaptureLocation.isValid();
   }
 
-  /// \brief Mark a variable's reference in a lambda as non-odr using.
+  /// Mark a variable's reference in a lambda as non-odr using.
   ///
-  /// For generic lambdas, if a variable is named in a potentially evaluated 
-  /// expression, where the enclosing full expression is dependent then we 
+  /// For generic lambdas, if a variable is named in a potentially evaluated
+  /// expression, where the enclosing full expression is dependent then we
   /// must capture the variable (given a default capture).
-  /// This is accomplished by recording all references to variables 
-  /// (DeclRefExprs or MemberExprs) within said nested lambda in its array of 
+  /// This is accomplished by recording all references to variables
+  /// (DeclRefExprs or MemberExprs) within said nested lambda in its array of
   /// PotentialCaptures. All such variables have to be captured by that lambda,
   /// except for as described below.
-  /// If that variable is usable as a constant expression and is named in a 
-  /// manner that does not involve its odr-use (e.g. undergoes 
+  /// If that variable is usable as a constant expression and is named in a
+  /// manner that does not involve its odr-use (e.g. undergoes
   /// lvalue-to-rvalue conversion, or discarded) record that it is so. Upon the
   /// act of analyzing the enclosing full expression (ActOnFinishFullExpr)
   /// if we can determine that the full expression is not instantiation-
-  /// dependent, then we can entirely avoid its capture. 
+  /// dependent, then we can entirely avoid its capture.
   ///
   ///   const int n = 0;
   ///   [&] (auto x) {
   ///     (void)+n + x;
   ///   };
-  /// Interestingly, this strategy would involve a capture of n, even though 
-  /// it's obviously not odr-used here, because the full-expression is 
+  /// Interestingly, this strategy would involve a capture of n, even though
+  /// it's obviously not odr-used here, because the full-expression is
   /// instantiation-dependent.  It could be useful to avoid capturing such
   /// variables, even when they are referred to in an instantiation-dependent
   /// expression, if we can unambiguously determine that they shall never be
   /// odr-used.  This would involve removal of the variable-referring-expression
-  /// from the array of PotentialCaptures during the lvalue-to-rvalue 
+  /// from the array of PotentialCaptures during the lvalue-to-rvalue
   /// conversions.  But per the working draft N3797, (post-chicago 2013) we must
-  /// capture such variables. 
+  /// capture such variables.
   /// Before anyone is tempted to implement a strategy for not-capturing 'n',
-  /// consider the insightful warning in: 
+  /// consider the insightful warning in:
   ///    /cfe-commits/Week-of-Mon-20131104/092596.html
   /// "The problem is that the set of captures for a lambda is part of the ABI
   ///  (since lambda layout can be made visible through inline functions and the
@@ -928,32 +937,32 @@
   ///  building such a node. So we need a rule that anyone can implement and get
   ///  exactly the same result".
   void markVariableExprAsNonODRUsed(Expr *CapturingVarExpr) {
-    assert(isa<DeclRefExpr>(CapturingVarExpr) 
+    assert(isa<DeclRefExpr>(CapturingVarExpr)
         || isa<MemberExpr>(CapturingVarExpr));
     NonODRUsedCapturingExprs.insert(CapturingVarExpr);
   }
   bool isVariableExprMarkedAsNonODRUsed(Expr *CapturingVarExpr) const {
-    assert(isa<DeclRefExpr>(CapturingVarExpr) 
+    assert(isa<DeclRefExpr>(CapturingVarExpr)
       || isa<MemberExpr>(CapturingVarExpr));
     return NonODRUsedCapturingExprs.count(CapturingVarExpr);
   }
   void removePotentialCapture(Expr *E) {
     PotentiallyCapturingExprs.erase(
-        std::remove(PotentiallyCapturingExprs.begin(), 
-            PotentiallyCapturingExprs.end(), E), 
+        std::remove(PotentiallyCapturingExprs.begin(),
+            PotentiallyCapturingExprs.end(), E),
         PotentiallyCapturingExprs.end());
   }
   void clearPotentialCaptures() {
     PotentiallyCapturingExprs.clear();
     PotentialThisCaptureLocation = SourceLocation();
   }
-  unsigned getNumPotentialVariableCaptures() const { 
-    return PotentiallyCapturingExprs.size(); 
+  unsigned getNumPotentialVariableCaptures() const {
+    return PotentiallyCapturingExprs.size();
   }
 
-  bool hasPotentialCaptures() const { 
-    return getNumPotentialVariableCaptures() || 
-                                  PotentialThisCaptureLocation.isValid(); 
+  bool hasPotentialCaptures() const {
+    return getNumPotentialVariableCaptures() ||
+                                  PotentialThisCaptureLocation.isValid();
   }
 
   // When passed the index, returns the VarDecl and Expr associated
diff --git a/linux-x64/clang/include/clang/Sema/Sema.h b/linux-x64/clang/include/clang/Sema/Sema.h
index a668253..b3d1c96 100644
--- a/linux-x64/clang/include/clang/Sema/Sema.h
+++ b/linux-x64/clang/include/clang/Sema/Sema.h
@@ -17,9 +17,11 @@
 
 #include "clang/AST/Attr.h"
 #include "clang/AST/Availability.h"
-#include "clang/AST/DeclarationName.h"
+#include "clang/AST/ComparisonCategories.h"
 #include "clang/AST/DeclTemplate.h"
+#include "clang/AST/DeclarationName.h"
 #include "clang/AST/Expr.h"
+#include "clang/AST/ExprCXX.h"
 #include "clang/AST/ExprObjC.h"
 #include "clang/AST/ExternalASTSource.h"
 #include "clang/AST/LocInfoType.h"
@@ -49,6 +51,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SetVector.h"
+#include "llvm/ADT/SmallBitVector.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/TinyPtrVector.h"
@@ -73,7 +76,7 @@
   class ASTReader;
   class ASTWriter;
   class ArrayType;
-  class AttributeList;
+  class ParsedAttr;
   class BindingDecl;
   class BlockDecl;
   class CapturedDecl;
@@ -275,10 +278,10 @@
   Sema(const Sema &) = delete;
   void operator=(const Sema &) = delete;
 
-  ///\brief Source of additional semantic information.
+  ///Source of additional semantic information.
   ExternalSemaSource *ExternalSource;
 
-  ///\brief Whether Sema has generated a multiplexer and has to delete it.
+  ///Whether Sema has generated a multiplexer and has to delete it.
   bool isMultiplexExternalSource;
 
   static bool mightHaveNonExternalLinkage(const DeclaratorDecl *FD);
@@ -318,16 +321,16 @@
   DiagnosticsEngine &Diags;
   SourceManager &SourceMgr;
 
-  /// \brief Flag indicating whether or not to collect detailed statistics.
+  /// Flag indicating whether or not to collect detailed statistics.
   bool CollectStats;
 
-  /// \brief Code-completion consumer.
+  /// Code-completion consumer.
   CodeCompleteConsumer *CodeCompleter;
 
   /// CurContext - This is the current declaration context of parsing.
   DeclContext *CurContext;
 
-  /// \brief Generally null except when we temporarily switch decl contexts,
+  /// Generally null except when we temporarily switch decl contexts,
   /// like in \see ActOnObjCTemporaryExitContainerContext.
   DeclContext *OriginalLexicalContext;
 
@@ -337,17 +340,17 @@
 
   bool MSStructPragmaOn; // True when \#pragma ms_struct on
 
-  /// \brief Controls member pointer representation format under the MS ABI.
+  /// Controls member pointer representation format under the MS ABI.
   LangOptions::PragmaMSPointersToMembersKind
       MSPointerToMemberRepresentationMethod;
 
   /// Stack of active SEH __finally scopes.  Can be empty.
   SmallVector<Scope*, 2> CurrentSEHFinally;
 
-  /// \brief Source location for newly created implicit MSInheritanceAttrs
+  /// Source location for newly created implicit MSInheritanceAttrs
   SourceLocation ImplicitMSInheritanceAttrLoc;
 
-  /// \brief pragma clang section kind
+  /// pragma clang section kind
   enum PragmaClangSectionKind {
     PCSK_Invalid      = 0,
     PCSK_BSS          = 1,
@@ -438,7 +441,7 @@
   // FIXME: We should serialize / deserialize these if they occur in a PCH (but
   // we shouldn't do so if they're in a module).
 
-  /// \brief Whether to insert vtordisps prior to virtual bases in the Microsoft
+  /// Whether to insert vtordisps prior to virtual bases in the Microsoft
   /// C++ ABI.  Possible values are 0, 1, and 2, which mean:
   ///
   /// 0: Suppress all vtordisps
@@ -487,26 +490,26 @@
   /// VisContext - Manages the stack for \#pragma GCC visibility.
   void *VisContext; // Really a "PragmaVisStack*"
 
-  /// \brief This represents the stack of attributes that were pushed by
+  /// This represents the stack of attributes that were pushed by
   /// \#pragma clang attribute.
   struct PragmaAttributeEntry {
     SourceLocation Loc;
-    AttributeList *Attribute;
+    ParsedAttr *Attribute;
     SmallVector<attr::SubjectMatchRule, 4> MatchRules;
     bool IsUsed;
   };
   SmallVector<PragmaAttributeEntry, 2> PragmaAttributeStack;
 
-  /// \brief The declaration that is currently receiving an attribute from the
+  /// The declaration that is currently receiving an attribute from the
   /// #pragma attribute stack.
   const Decl *PragmaAttributeCurrentTargetDecl;
 
-  /// \brief This represents the last location of a "#pragma clang optimize off"
+  /// This represents the last location of a "#pragma clang optimize off"
   /// directive if such a directive has not been closed by an "on" yet. If
   /// optimizations are currently "on", this is set to an invalid location.
   SourceLocation OptimizeOffPragmaLocation;
 
-  /// \brief Flag indicating if Sema is building a recovery call expression.
+  /// Flag indicating if Sema is building a recovery call expression.
   ///
   /// This flag is used to avoid building recovery call expressions
   /// if Sema is already doing so, which would cause infinite recursions.
@@ -520,7 +523,7 @@
   /// element type here is ExprWithCleanups::Object.
   SmallVector<BlockDecl*, 8> ExprCleanupObjects;
 
-  /// \brief Store a list of either DeclRefExprs or MemberExprs
+  /// Store a list of either DeclRefExprs or MemberExprs
   ///  that contain a reference to a variable (constant) that may or may not
   ///  be odr-used in this Expr, and we won't know until all lvalue-to-rvalue
   ///  and discarded value conversions have been applied to all subexpressions
@@ -530,7 +533,7 @@
 
   std::unique_ptr<sema::FunctionScopeInfo> PreallocatedFunctionScope;
 
-  /// \brief Stack containing information about each of the nested
+  /// Stack containing information about each of the nested
   /// function, block, and method scopes that are currently active.
   SmallVector<sema::FunctionScopeInfo *, 4> FunctionScopes;
 
@@ -548,14 +551,14 @@
 
   typedef llvm::SmallSetVector<NamedDecl *, 16> NamedDeclSetType;
 
-  /// \brief Set containing all declared private fields that are not used.
+  /// Set containing all declared private fields that are not used.
   NamedDeclSetType UnusedPrivateFields;
 
-  /// \brief Set containing all typedefs that are likely unused.
+  /// Set containing all typedefs that are likely unused.
   llvm::SmallSetVector<const TypedefNameDecl *, 4>
       UnusedLocalTypedefNameCandidates;
 
-  /// \brief Delete-expressions to be analyzed at the end of translation unit
+  /// Delete-expressions to be analyzed at the end of translation unit
   ///
   /// This list contains class members, and locations of delete-expressions
   /// that could not be proven as to whether they mismatch with new-expression
@@ -575,21 +578,21 @@
   /// we are currently parsing the initializer.
   llvm::SmallPtrSet<const Decl*, 4> ParsingInitForAutoVars;
 
-  /// \brief Look for a locally scoped extern "C" declaration by the given name.
+  /// Look for a locally scoped extern "C" declaration by the given name.
   NamedDecl *findLocallyScopedExternCDecl(DeclarationName Name);
 
   typedef LazyVector<VarDecl *, ExternalSemaSource,
                      &ExternalSemaSource::ReadTentativeDefinitions, 2, 2>
     TentativeDefinitionsType;
 
-  /// \brief All the tentative definitions encountered in the TU.
+  /// All the tentative definitions encountered in the TU.
   TentativeDefinitionsType TentativeDefinitions;
 
   typedef LazyVector<const DeclaratorDecl *, ExternalSemaSource,
                      &ExternalSemaSource::ReadUnusedFileScopedDecls, 2, 2>
     UnusedFileScopedDeclsType;
 
-  /// \brief The set of file scoped decls seen so far that have not been used
+  /// The set of file scoped decls seen so far that have not been used
   /// and must warn if not used. Only contains the first declaration.
   UnusedFileScopedDeclsType UnusedFileScopedDecls;
 
@@ -597,17 +600,17 @@
                      &ExternalSemaSource::ReadDelegatingConstructors, 2, 2>
     DelegatingCtorDeclsType;
 
-  /// \brief All the delegating constructors seen so far in the file, used for
+  /// All the delegating constructors seen so far in the file, used for
   /// cycle detection at the end of the TU.
   DelegatingCtorDeclsType DelegatingCtorDecls;
 
-  /// \brief All the overriding functions seen during a class definition
+  /// All the overriding functions seen during a class definition
   /// that had their exception spec checks delayed, plus the overridden
   /// function.
   SmallVector<std::pair<const CXXMethodDecl*, const CXXMethodDecl*>, 2>
     DelayedExceptionSpecChecks;
 
-  /// \brief All the members seen during a class definition which were both
+  /// All the members seen during a class definition which were both
   /// explicitly defaulted and had explicitly-specified exception
   /// specifications, along with the function type containing their
   /// user-specified exception specification. Those exception specifications
@@ -622,7 +625,7 @@
       LateParsedTemplateMapT;
   LateParsedTemplateMapT LateParsedTemplateMap;
 
-  /// \brief Callback to the parser to parse templated functions when needed.
+  /// Callback to the parser to parse templated functions when needed.
   typedef void LateTemplateParserCB(void *P, LateParsedTemplate &LPT);
   typedef void LateTemplateParserCleanupCB(void *P);
   LateTemplateParserCB *LateTemplateParser;
@@ -649,7 +652,7 @@
   /// A class which encapsulates the logic for delaying diagnostics
   /// during parsing and other processing.
   class DelayedDiagnostics {
-    /// \brief The current pool of diagnostics into which delayed
+    /// The current pool of diagnostics into which delayed
     /// diagnostics should go.
     sema::DelayedDiagnosticPool *CurPool;
 
@@ -732,7 +735,7 @@
     }
   };
 
-  /// \brief RAII object to handle the state changes required to synthesize
+  /// RAII object to handle the state changes required to synthesize
   /// a function body.
   class SynthesizedFunctionScope {
     Sema &S;
@@ -785,7 +788,7 @@
   llvm::DenseMap<IdentifierInfo*,AsmLabelAttr*> ExtnameUndeclaredIdentifiers;
 
 
-  /// \brief Load weak undeclared identifiers from the external source.
+  /// Load weak undeclared identifiers from the external source.
   void LoadExternalWeakUndeclaredIdentifiers();
 
   /// WeakTopLevelDecl - Translation-unit scoped declarations generated by
@@ -802,77 +805,81 @@
   /// For example, user-defined classes, built-in "id" type, etc.
   Scope *TUScope;
 
-  /// \brief The C++ "std" namespace, where the standard library resides.
+  /// The C++ "std" namespace, where the standard library resides.
   LazyDeclPtr StdNamespace;
 
-  /// \brief The C++ "std::bad_alloc" class, which is defined by the C++
+  /// The C++ "std::bad_alloc" class, which is defined by the C++
   /// standard library.
   LazyDeclPtr StdBadAlloc;
 
-  /// \brief The C++ "std::align_val_t" enum class, which is defined by the C++
+  /// The C++ "std::align_val_t" enum class, which is defined by the C++
   /// standard library.
   LazyDeclPtr StdAlignValT;
 
-  /// \brief The C++ "std::experimental" namespace, where the experimental parts
+  /// The C++ "std::experimental" namespace, where the experimental parts
   /// of the standard library resides.
   NamespaceDecl *StdExperimentalNamespaceCache;
 
-  /// \brief The C++ "std::initializer_list" template, which is defined in
+  /// The C++ "std::initializer_list" template, which is defined in
   /// \<initializer_list>.
   ClassTemplateDecl *StdInitializerList;
 
-  /// \brief The C++ "type_info" declaration, which is defined in \<typeinfo>.
+  /// The C++ "std::coroutine_traits" template, which is defined in
+  /// \<coroutine_traits>
+  ClassTemplateDecl *StdCoroutineTraitsCache;
+
+  /// The C++ "type_info" declaration, which is defined in \<typeinfo>.
   RecordDecl *CXXTypeInfoDecl;
 
-  /// \brief The MSVC "_GUID" struct, which is defined in MSVC header files.
+  /// The MSVC "_GUID" struct, which is defined in MSVC header files.
   RecordDecl *MSVCGuidDecl;
 
-  /// \brief Caches identifiers/selectors for NSFoundation APIs.
+  /// Caches identifiers/selectors for NSFoundation APIs.
   std::unique_ptr<NSAPI> NSAPIObj;
 
-  /// \brief The declaration of the Objective-C NSNumber class.
+  /// The declaration of the Objective-C NSNumber class.
   ObjCInterfaceDecl *NSNumberDecl;
 
-  /// \brief The declaration of the Objective-C NSValue class.
+  /// The declaration of the Objective-C NSValue class.
   ObjCInterfaceDecl *NSValueDecl;
 
-  /// \brief Pointer to NSNumber type (NSNumber *).
+  /// Pointer to NSNumber type (NSNumber *).
   QualType NSNumberPointer;
 
-  /// \brief Pointer to NSValue type (NSValue *).
+  /// Pointer to NSValue type (NSValue *).
   QualType NSValuePointer;
 
-  /// \brief The Objective-C NSNumber methods used to create NSNumber literals.
+  /// The Objective-C NSNumber methods used to create NSNumber literals.
   ObjCMethodDecl *NSNumberLiteralMethods[NSAPI::NumNSNumberLiteralMethods];
 
-  /// \brief The declaration of the Objective-C NSString class.
+  /// The declaration of the Objective-C NSString class.
   ObjCInterfaceDecl *NSStringDecl;
 
-  /// \brief Pointer to NSString type (NSString *).
+  /// Pointer to NSString type (NSString *).
   QualType NSStringPointer;
 
-  /// \brief The declaration of the stringWithUTF8String: method.
+  /// The declaration of the stringWithUTF8String: method.
   ObjCMethodDecl *StringWithUTF8StringMethod;
 
-  /// \brief The declaration of the valueWithBytes:objCType: method.
+  /// The declaration of the valueWithBytes:objCType: method.
   ObjCMethodDecl *ValueWithBytesObjCTypeMethod;
 
-  /// \brief The declaration of the Objective-C NSArray class.
+  /// The declaration of the Objective-C NSArray class.
   ObjCInterfaceDecl *NSArrayDecl;
 
-  /// \brief The declaration of the arrayWithObjects:count: method.
+  /// The declaration of the arrayWithObjects:count: method.
   ObjCMethodDecl *ArrayWithObjectsMethod;
 
-  /// \brief The declaration of the Objective-C NSDictionary class.
+  /// The declaration of the Objective-C NSDictionary class.
   ObjCInterfaceDecl *NSDictionaryDecl;
 
-  /// \brief The declaration of the dictionaryWithObjects:forKeys:count: method.
+  /// The declaration of the dictionaryWithObjects:forKeys:count: method.
   ObjCMethodDecl *DictionaryWithObjectsMethod;
 
-  /// \brief id<NSCopying> type.
+  /// id<NSCopying> type.
   QualType QIDNSCopying;
 
-  /// \brief will hold 'respondsToSelector:'
+  /// will hold 'respondsToSelector:'
   Selector RespondsToSelectorSel;
 
   /// A flag to remember whether the implicit forms of operator new and delete
@@ -883,43 +890,43 @@
   /// references to fields.  This is really a
   bool AllowAbstractFieldReference;
 
-  /// \brief Describes how the expressions currently being parsed are
+  /// Describes how the expressions currently being parsed are
   /// evaluated at run-time, if at all.
   enum class ExpressionEvaluationContext {
-    /// \brief The current expression and its subexpressions occur within an
+    /// The current expression and its subexpressions occur within an
     /// unevaluated operand (C++11 [expr]p7), such as the subexpression of
     /// \c sizeof, where the type of the expression may be significant but
     /// no code will be generated to evaluate the value of the expression at
     /// run time.
     Unevaluated,
 
-    /// \brief The current expression occurs within a braced-init-list within
+    /// The current expression occurs within a braced-init-list within
     /// an unevaluated operand. This is mostly like a regular unevaluated
     /// context, except that we still instantiate constexpr functions that are
     /// referenced here so that we can perform narrowing checks correctly.
     UnevaluatedList,
 
-    /// \brief The current expression occurs within a discarded statement.
+    /// The current expression occurs within a discarded statement.
     /// This behaves largely similarly to an unevaluated operand in preventing
     /// definitions from being required, but not in other ways.
     DiscardedStatement,
 
-    /// \brief The current expression occurs within an unevaluated
+    /// The current expression occurs within an unevaluated
     /// operand that unconditionally permits abstract references to
     /// fields, such as a SIZE operator in MS-style inline assembly.
     UnevaluatedAbstract,
 
-    /// \brief The current context is "potentially evaluated" in C++11 terms,
+    /// The current context is "potentially evaluated" in C++11 terms,
     /// but the expression is evaluated at compile-time (like the values of
     /// cases in a switch statement).
     ConstantEvaluated,
 
-    /// \brief The current expression is potentially evaluated at run time,
+    /// The current expression is potentially evaluated at run time,
     /// which means that code may be generated to evaluate the value of the
     /// expression at run time.
     PotentiallyEvaluated,
 
-    /// \brief The current expression is potentially evaluated, but any
+    /// The current expression is potentially evaluated, but any
     /// declarations referenced inside that expression are only used if
     /// in fact the current expression is used.
     ///
@@ -930,63 +937,69 @@
     PotentiallyEvaluatedIfUsed
   };
 
-  /// \brief Data structure used to record current or nested
+  /// Data structure used to record current or nested
   /// expression evaluation contexts.
   struct ExpressionEvaluationContextRecord {
-    /// \brief The expression evaluation context.
+    /// The expression evaluation context.
     ExpressionEvaluationContext Context;
 
-    /// \brief Whether the enclosing context needed a cleanup.
+    /// Whether the enclosing context needed a cleanup.
     CleanupInfo ParentCleanup;
 
-    /// \brief Whether we are in a decltype expression.
+    /// Whether we are in a decltype expression.
     bool IsDecltype;
 
-    /// \brief The number of active cleanup objects when we entered
+    /// The number of active cleanup objects when we entered
     /// this expression evaluation context.
     unsigned NumCleanupObjects;
 
-    /// \brief The number of typos encountered during this expression evaluation
+    /// The number of typos encountered during this expression evaluation
     /// context (i.e. the number of TypoExprs created).
     unsigned NumTypos;
 
     llvm::SmallPtrSet<Expr*, 2> SavedMaybeODRUseExprs;
 
-    /// \brief The lambdas that are present within this context, if it
+    /// The lambdas that are present within this context, if it
     /// is indeed an unevaluated context.
     SmallVector<LambdaExpr *, 2> Lambdas;
 
-    /// \brief The declaration that provides context for lambda expressions
+    /// The declaration that provides context for lambda expressions
     /// and block literals if the normal declaration context does not
     /// suffice, e.g., in a default function argument.
     Decl *ManglingContextDecl;
 
-    /// \brief The context information used to mangle lambda expressions
+    /// The context information used to mangle lambda expressions
     /// and block literals within this context.
     ///
     /// This mangling information is allocated lazily, since most contexts
     /// do not have lambda expressions or block literals.
     std::unique_ptr<MangleNumberingContext> MangleNumbering;
 
-    /// \brief If we are processing a decltype type, a set of call expressions
+    /// If we are processing a decltype type, a set of call expressions
     /// for which we have deferred checking the completeness of the return type.
     SmallVector<CallExpr *, 8> DelayedDecltypeCalls;
 
-    /// \brief If we are processing a decltype type, a set of temporary binding
+    /// If we are processing a decltype type, a set of temporary binding
     /// expressions for which we have deferred checking the destructor.
     SmallVector<CXXBindTemporaryExpr *, 8> DelayedDecltypeBinds;
 
+    /// \brief Describes whether we are in an expression constext which we have
+    /// to handle differently.
+    enum ExpressionKind {
+      EK_Decltype, EK_TemplateArgument, EK_Other
+    } ExprContext;
+
     ExpressionEvaluationContextRecord(ExpressionEvaluationContext Context,
                                       unsigned NumCleanupObjects,
                                       CleanupInfo ParentCleanup,
                                       Decl *ManglingContextDecl,
-                                      bool IsDecltype)
-      : Context(Context), ParentCleanup(ParentCleanup),
-        IsDecltype(IsDecltype), NumCleanupObjects(NumCleanupObjects),
-        NumTypos(0),
-        ManglingContextDecl(ManglingContextDecl), MangleNumbering() { }
+                                      ExpressionKind ExprContext)
+        : Context(Context), ParentCleanup(ParentCleanup),
+          NumCleanupObjects(NumCleanupObjects), NumTypos(0),
+          ManglingContextDecl(ManglingContextDecl), MangleNumbering(),
+          ExprContext(ExprContext) {}
 
-    /// \brief Retrieve the mangling numbering context, used to consistently
+    /// Retrieve the mangling numbering context, used to consistently
     /// number constructs like lambdas for mangling.
     MangleNumberingContext &getMangleNumberingContext(ASTContext &Ctx);
 
@@ -1003,7 +1016,7 @@
   /// A stack of expression evaluation contexts.
   SmallVector<ExpressionEvaluationContextRecord, 8> ExprEvalContexts;
 
-  /// \brief Compute the mangling number context for a lambda expression or
+  /// Compute the mangling number context for a lambda expression or
   /// block literal.
   ///
   /// \param DC - The DeclContext containing the lambda expression or
@@ -1052,15 +1065,15 @@
     {}
   };
 
-  /// \brief A cache of special member function overload resolution results
+  /// A cache of special member function overload resolution results
   /// for C++ records.
   llvm::FoldingSet<SpecialMemberOverloadResultEntry> SpecialMemberCache;
 
-  /// \brief A cache of the flags available in enumerations with the flag_bits
+  /// A cache of the flags available in enumerations with the flag_bits
   /// attribute.
   mutable llvm::DenseMap<const EnumDecl*, llvm::APInt> FlagBitsCache;
 
-  /// \brief The kind of translation unit we are processing.
+  /// The kind of translation unit we are processing.
   ///
   /// When we're processing a complete translation unit, Sema will perform
   /// end-of-translation-unit semantic tasks (such as creating
@@ -1071,13 +1084,13 @@
 
   llvm::BumpPtrAllocator BumpAlloc;
 
-  /// \brief The number of SFINAE diagnostics that have been trapped.
+  /// The number of SFINAE diagnostics that have been trapped.
   unsigned NumSFINAEErrors;
 
   typedef llvm::DenseMap<ParmVarDecl *, llvm::TinyPtrVector<ParmVarDecl *>>
     UnparsedDefaultArgInstantiationsMap;
 
-  /// \brief A mapping from parameters with unparsed default arguments to the
+  /// A mapping from parameters with unparsed default arguments to the
   /// set of instantiations of each parameter.
   ///
   /// This mapping is a temporary data structure used when parsing
@@ -1159,7 +1172,7 @@
   bool isSelfExpr(Expr *RExpr);
   bool isSelfExpr(Expr *RExpr, const ObjCMethodDecl *Method);
 
-  /// \brief Cause the active diagnostic on the DiagosticsEngine to be
+  /// Cause the active diagnostic on the DiagosticsEngine to be
   /// emitted. This is closely coupled to the SemaDiagnosticBuilder class and
   /// should not be used elsewhere.
   void EmitCurrentDiagnostic(unsigned DiagID);
@@ -1184,7 +1197,7 @@
        CodeCompleteConsumer *CompletionConsumer = nullptr);
   ~Sema();
 
-  /// \brief Perform initialization that occurs after the parser has been
+  /// Perform initialization that occurs after the parser has been
   /// initialized but before it parses anything.
   void Initialize();
 
@@ -1200,7 +1213,7 @@
   ASTMutationListener *getASTMutationListener() const;
   ExternalSemaSource* getExternalSource() const { return ExternalSource; }
 
-  ///\brief Registers an external source. If an external source already exists,
+  ///Registers an external source. If an external source already exists,
   /// creates a multiplex external source and appends to it.
   ///
   ///\param[in] E - A non-null external sema source.
@@ -1209,7 +1222,7 @@
 
   void PrintStats() const;
 
-  /// \brief Helper class that creates diagnostics with optional
+  /// Helper class that creates diagnostics with optional
   /// template instantiation stacks.
   ///
   /// This class provides a wrapper around the basic DiagnosticBuilder
@@ -1264,29 +1277,29 @@
     }
   };
 
-  /// \brief Emit a diagnostic.
+  /// Emit a diagnostic.
   SemaDiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) {
     DiagnosticBuilder DB = Diags.Report(Loc, DiagID);
     return SemaDiagnosticBuilder(DB, *this, DiagID);
   }
 
-  /// \brief Emit a partial diagnostic.
+  /// Emit a partial diagnostic.
   SemaDiagnosticBuilder Diag(SourceLocation Loc, const PartialDiagnostic& PD);
 
-  /// \brief Build a partial diagnostic.
+  /// Build a partial diagnostic.
   PartialDiagnostic PDiag(unsigned DiagID = 0); // in SemaInternal.h
 
   bool findMacroSpelling(SourceLocation &loc, StringRef name);
 
-  /// \brief Get a string to suggest for zero-initialization of a type.
+  /// Get a string to suggest for zero-initialization of a type.
   std::string
   getFixItZeroInitializerForType(QualType T, SourceLocation Loc) const;
   std::string getFixItZeroLiteralForType(QualType T, SourceLocation Loc) const;
 
-  /// \brief Calls \c Lexer::getLocForEndOfToken()
+  /// Calls \c Lexer::getLocForEndOfToken()
   SourceLocation getLocForEndOfToken(SourceLocation Loc, unsigned Offset = 0);
 
-  /// \brief Retrieve the module loader associated with the preprocessor.
+  /// Retrieve the module loader associated with the preprocessor.
   ModuleLoader &getModuleLoader() const;
 
   void emitAndClearUnusedLocalTypedefWarnings();
@@ -1302,7 +1315,7 @@
   void PushBlockScope(Scope *BlockScope, BlockDecl *Block);
   sema::LambdaScopeInfo *PushLambdaScope();
 
-  /// \brief This is used to inform Sema what the current TemplateParameterDepth
+  /// This is used to inform Sema what the current TemplateParameterDepth
   /// is during Parsing.  Currently it is used to pass on the depth
   /// when parsing generic lambda 'auto' parameters.
   void RecordParsingTemplateParameterDepth(unsigned Depth);
@@ -1332,7 +1345,7 @@
 
   bool hasAnyUnrecoverableErrorsInThisFunction() const;
 
-  /// \brief Retrieve the current block, if any.
+  /// Retrieve the current block, if any.
   sema::BlockScopeInfo *getCurBlock();
 
   /// Retrieve the current lambda scope info, if any.
@@ -1342,10 +1355,10 @@
   sema::LambdaScopeInfo *
   getCurLambda(bool IgnoreNonLambdaCapturingScope = false);
 
-  /// \brief Retrieve the current generic lambda info, if any.
+  /// Retrieve the current generic lambda info, if any.
   sema::LambdaScopeInfo *getCurGenericLambda();
 
-  /// \brief Retrieve the current captured region, if any.
+  /// Retrieve the current captured region, if any.
   sema::CapturedRegionScopeInfo *getCurCapturedRegion();
 
   /// WeakTopLevelDeclDecls - access to \#pragma weak-generated Decls
@@ -1368,6 +1381,7 @@
   QualType BuildArrayType(QualType T, ArrayType::ArraySizeModifier ASM,
                           Expr *ArraySize, unsigned Quals,
                           SourceRange Brackets, DeclarationName Entity);
+  QualType BuildVectorType(QualType T, Expr *VecSize, SourceLocation AttrLoc);
   QualType BuildExtVectorType(QualType T, Expr *ArraySize,
                               SourceLocation AttrLoc);
   QualType BuildAddressSpaceAttr(QualType &T, Expr *AddrSpace,
@@ -1375,7 +1389,7 @@
 
   bool CheckFunctionReturnType(QualType T, SourceLocation Loc);
 
-  /// \brief Build a function type.
+  /// Build a function type.
   ///
   /// This routine checks the function type according to C++ rules and
   /// under the assumption that the result type and parameter types have
@@ -1424,7 +1438,7 @@
   TypeSourceInfo *GetTypeSourceInfoForDeclarator(Declarator &D, QualType T,
                                                TypeSourceInfo *ReturnTypeInfo);
 
-  /// \brief Package the given type and TSI into a ParsedType.
+  /// Package the given type and TSI into a ParsedType.
   ParsedType CreateParsedType(QualType T, TypeSourceInfo *TInfo);
   DeclarationNameInfo GetNameForDeclarator(Declarator &D);
   DeclarationNameInfo GetNameFromUnqualifiedId(const UnqualifiedId &Name);
@@ -1462,11 +1476,11 @@
 
   TypeResult ActOnTypeName(Scope *S, Declarator &D);
 
-  /// \brief The parser has parsed the context-sensitive type 'instancetype'
+  /// The parser has parsed the context-sensitive type 'instancetype'
   /// in an Objective-C message declaration. Return the appropriate type.
   ParsedType ActOnObjCInstanceType(SourceLocation Loc);
 
-  /// \brief Abstract class used to diagnose incomplete types.
+  /// Abstract class used to diagnose incomplete types.
   struct TypeDiagnoser {
     TypeDiagnoser() {}
 
@@ -1535,10 +1549,10 @@
   VisibleModuleSet VisibleModules;
 
 public:
-  /// \brief Get the module owning an entity.
+  /// Get the module owning an entity.
   Module *getOwningModule(Decl *Entity) { return Entity->getOwningModule(); }
 
-  /// \brief Make a merged definition of an existing hidden definition \p ND
+  /// Make a merged definition of an existing hidden definition \p ND
   /// visible at the specified location.
   void makeMergedDefinitionVisible(NamedDecl *ND);
 
@@ -1636,7 +1650,8 @@
   }
 
   QualType getElaboratedType(ElaboratedTypeKeyword Keyword,
-                             const CXXScopeSpec &SS, QualType T);
+                             const CXXScopeSpec &SS, QualType T,
+                             TagDecl *OwnedTagDecl = nullptr);
 
   QualType BuildTypeofExprType(Expr *E, SourceLocation Loc);
   /// If AsUnevaluated is false, E is treated as though it were an evaluated
@@ -1692,7 +1707,7 @@
                                       SourceLocation NameLoc,
                                       bool IsTemplateTypeArg);
 
-  /// \brief Describes the result of the name lookup and resolution performed
+  /// Describes the result of the name lookup and resolution performed
   /// by \c ClassifyName().
   enum NameClassificationKind {
     NC_Unknown,
@@ -1783,7 +1798,7 @@
     }
   };
 
-  /// \brief Perform name lookup on the given name, classifying it based on
+  /// Perform name lookup on the given name, classifying it based on
   /// the results of name lookup and the following token.
   ///
   /// This routine is used by the parser to resolve identifiers and help direct
@@ -1827,13 +1842,19 @@
 
   /// Determine whether it's plausible that E was intended to be a
   /// template-name.
-  bool mightBeIntendedToBeTemplateName(ExprResult E) {
+  bool mightBeIntendedToBeTemplateName(ExprResult E, bool &Dependent) {
     if (!getLangOpts().CPlusPlus || E.isInvalid())
       return false;
+    Dependent = false;
     if (auto *DRE = dyn_cast<DeclRefExpr>(E.get()))
       return !DRE->hasExplicitTemplateArgs();
     if (auto *ME = dyn_cast<MemberExpr>(E.get()))
       return !ME->hasExplicitTemplateArgs();
+    Dependent = true;
+    if (auto *DSDRE = dyn_cast<DependentScopeDeclRefExpr>(E.get()))
+      return !DSDRE->hasExplicitTemplateArgs();
+    if (auto *DSME = dyn_cast<CXXDependentScopeMemberExpr>(E.get()))
+      return !DSME->hasExplicitTemplateArgs();
     // Any additional cases recognized here should also be handled by
     // diagnoseExprIntendedAsTemplateName.
     return false;
@@ -1931,6 +1952,7 @@
   bool shouldLinkDependentDeclWithPrevious(Decl *D, Decl *OldDecl);
   void CheckMain(FunctionDecl *FD, const DeclSpec &D);
   void CheckMSVCRTEntryPoint(FunctionDecl *FD);
+  Attr *getImplicitCodeSegOrSectionAttrForFunction(const FunctionDecl *FD, bool IsDefinition);
   Decl *ActOnParamDeclarator(Scope *S, Declarator &D);
   ParmVarDecl *BuildParmVarDeclForTypedef(DeclContext *DC,
                                           SourceLocation Loc,
@@ -1986,7 +2008,7 @@
     return D && isa<ObjCMethodDecl>(D);
   }
 
-  /// \brief Determine whether we can delay parsing the body of a function or
+  /// Determine whether we can delay parsing the body of a function or
   /// function template until it is used, assuming we don't care about emitting
   /// code for that function.
   ///
@@ -1996,7 +2018,7 @@
   /// or has an 'auto' return type in C++14. These cases are essentially bugs.
   bool canDelayFunctionBody(const Declarator &D);
 
-  /// \brief Determine whether we can skip parsing the body of a function
+  /// Determine whether we can skip parsing the body of a function
   /// definition, assuming we don't care about analyzing its body or emitting
   /// code for that function.
   ///
@@ -2015,11 +2037,11 @@
   /// attribute for which parsing is delayed.
   void ActOnFinishDelayedAttribute(Scope *S, Decl *D, ParsedAttributes &Attrs);
 
-  /// \brief Diagnose any unused parameters in the given sequence of
+  /// Diagnose any unused parameters in the given sequence of
   /// ParmVarDecl pointers.
   void DiagnoseUnusedParameters(ArrayRef<ParmVarDecl *> Parameters);
 
-  /// \brief Diagnose whether the size of parameters or return value of a
+  /// Diagnose whether the size of parameters or return value of a
   /// function or obj-c method definition is pass-by-value and larger than a
   /// specified threshold.
   void
@@ -2031,9 +2053,8 @@
                               SourceLocation AsmLoc,
                               SourceLocation RParenLoc);
 
-  /// \brief Handle a C++11 empty-declaration and attribute-declaration.
-  Decl *ActOnEmptyDeclaration(Scope *S,
-                              AttributeList *AttrList,
+  /// Handle a C++11 empty-declaration and attribute-declaration.
+  Decl *ActOnEmptyDeclaration(Scope *S, const ParsedAttributesView &AttrList,
                               SourceLocation SemiLoc);
 
   enum class ModuleDeclKind {
@@ -2048,7 +2069,7 @@
                                  SourceLocation ModuleLoc, ModuleDeclKind MDK,
                                  ModuleIdPath Path);
 
-  /// \brief The parser has processed a module import declaration.
+  /// The parser has processed a module import declaration.
   ///
   /// \param AtLoc The location of the '@' symbol, if any.
   ///
@@ -2058,17 +2079,17 @@
   DeclResult ActOnModuleImport(SourceLocation AtLoc, SourceLocation ImportLoc,
                                ModuleIdPath Path);
 
-  /// \brief The parser has processed a module import translated from a
+  /// The parser has processed a module import translated from a
   /// #include or similar preprocessing directive.
   void ActOnModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
   void BuildModuleInclude(SourceLocation DirectiveLoc, Module *Mod);
 
-  /// \brief The parsed has entered a submodule.
+  /// The parsed has entered a submodule.
   void ActOnModuleBegin(SourceLocation DirectiveLoc, Module *Mod);
-  /// \brief The parser has left a submodule.
+  /// The parser has left a submodule.
   void ActOnModuleEnd(SourceLocation DirectiveLoc, Module *Mod);
 
-  /// \brief Create an implicit import of the given module at the given
+  /// Create an implicit import of the given module at the given
   /// source location, for error recovery, if possible.
   ///
   /// This routine is typically used when an entity found by name lookup
@@ -2087,7 +2108,7 @@
     PartialSpecialization
   };
 
-  /// \brief Diagnose that the specified declaration needs to be visible but
+  /// Diagnose that the specified declaration needs to be visible but
   /// isn't, and suggest a module import that would resolve the problem.
   void diagnoseMissingImport(SourceLocation Loc, NamedDecl *Decl,
                              MissingImportKind MIK, bool Recover = true);
@@ -2100,23 +2121,23 @@
   Decl *ActOnFinishExportDecl(Scope *S, Decl *ExportDecl,
                               SourceLocation RBraceLoc);
 
-  /// \brief We've found a use of a templated declaration that would trigger an
+  /// We've found a use of a templated declaration that would trigger an
   /// implicit instantiation. Check that any relevant explicit specializations
   /// and partial specializations are visible, and diagnose if not.
   void checkSpecializationVisibility(SourceLocation Loc, NamedDecl *Spec);
 
-  /// \brief We've found a use of a template specialization that would select a
+  /// We've found a use of a template specialization that would select a
   /// partial specialization. Check that the partial specialization is visible,
   /// and diagnose if not.
   void checkPartialSpecializationVisibility(SourceLocation Loc,
                                             NamedDecl *Spec);
 
-  /// \brief Retrieve a suitable printing policy.
+  /// Retrieve a suitable printing policy for diagnostics.
   PrintingPolicy getPrintingPolicy() const {
     return getPrintingPolicy(Context, PP);
   }
 
-  /// \brief Retrieve a suitable printing policy.
+  /// Retrieve a suitable printing policy for diagnostics.
   static PrintingPolicy getPrintingPolicy(const ASTContext &Ctx,
                                           const Preprocessor &PP);
 
@@ -2171,7 +2192,7 @@
 
   Decl *ActOnTag(Scope *S, unsigned TagSpec, TagUseKind TUK,
                  SourceLocation KWLoc, CXXScopeSpec &SS, IdentifierInfo *Name,
-                 SourceLocation NameLoc, AttributeList *Attr,
+                 SourceLocation NameLoc, const ParsedAttributesView &Attr,
                  AccessSpecifier AS, SourceLocation ModulePrivateLoc,
                  MultiTemplateParamsArg TemplateParameterLists, bool &OwnedDecl,
                  bool &IsDependent, SourceLocation ScopedEnumKWLoc,
@@ -2181,9 +2202,9 @@
 
   Decl *ActOnTemplatedFriendTag(Scope *S, SourceLocation FriendLoc,
                                 unsigned TagSpec, SourceLocation TagLoc,
-                                CXXScopeSpec &SS,
-                                IdentifierInfo *Name, SourceLocation NameLoc,
-                                AttributeList *Attr,
+                                CXXScopeSpec &SS, IdentifierInfo *Name,
+                                SourceLocation NameLoc,
+                                const ParsedAttributesView &Attr,
                                 MultiTemplateParamsArg TempParamLists);
 
   TypeResult ActOnDependentTag(Scope *S,
@@ -2205,11 +2226,11 @@
                          InClassInitStyle InitStyle,
                          AccessSpecifier AS);
   MSPropertyDecl *HandleMSProperty(Scope *S, RecordDecl *TagD,
-                                   SourceLocation DeclStart,
-                                   Declarator &D, Expr *BitfieldWidth,
+                                   SourceLocation DeclStart, Declarator &D,
+                                   Expr *BitfieldWidth,
                                    InClassInitStyle InitStyle,
                                    AccessSpecifier AS,
-                                   AttributeList *MSPropertyAttr);
+                                   const ParsedAttr &MSPropertyAttr);
 
   FieldDecl *CheckFieldDecl(DeclarationName Name, QualType T,
                             TypeSourceInfo *TInfo,
@@ -2242,10 +2263,9 @@
                   tok::ObjCKeywordKind visibility);
 
   // This is used for both record definitions and ObjC interface declarations.
-  void ActOnFields(Scope* S, SourceLocation RecLoc, Decl *TagDecl,
-                   ArrayRef<Decl *> Fields,
-                   SourceLocation LBrac, SourceLocation RBrac,
-                   AttributeList *AttrList);
+  void ActOnFields(Scope *S, SourceLocation RecLoc, Decl *TagDecl,
+                   ArrayRef<Decl *> Fields, SourceLocation LBrac,
+                   SourceLocation RBrac, const ParsedAttributesView &AttrList);
 
   /// ActOnTagStartDefinition - Invoked when we have entered the
   /// scope of a tag's definition (e.g., for an enumeration, class,
@@ -2260,7 +2280,7 @@
 
   typedef void *SkippedDefinitionContext;
 
-  /// \brief Invoked when we enter a tag definition that we're skipping.
+  /// Invoked when we enter a tag definition that we're skipping.
   SkippedDefinitionContext ActOnTagStartSkippedDefinition(Scope *S, Decl *TD);
 
   Decl *ActOnObjCContainerStartDefinition(Decl *IDecl);
@@ -2282,7 +2302,7 @@
 
   void ActOnObjCContainerFinishDefinition();
 
-  /// \brief Invoked when we must temporarily exit the objective-c container
+  /// Invoked when we must temporarily exit the objective-c container
   /// scope for parsing/looking-up C constructs.
   ///
   /// Must be followed by a call to \see ActOnObjCReenterContainerContext
@@ -2310,12 +2330,11 @@
 
   Decl *ActOnEnumConstant(Scope *S, Decl *EnumDecl, Decl *LastEnumConstant,
                           SourceLocation IdLoc, IdentifierInfo *Id,
-                          AttributeList *Attrs, SourceLocation EqualLoc,
-                          Expr *Val);
+                          const ParsedAttributesView &Attrs,
+                          SourceLocation EqualLoc, Expr *Val);
   void ActOnEnumBody(SourceLocation EnumLoc, SourceRange BraceRange,
-                     Decl *EnumDecl,
-                     ArrayRef<Decl *> Elements,
-                     Scope *S, AttributeList *Attr);
+                     Decl *EnumDecl, ArrayRef<Decl *> Elements, Scope *S,
+                     const ParsedAttributesView &Attr);
 
   DeclContext *getContainingDC(DeclContext *DC);
 
@@ -2352,7 +2371,7 @@
   /// Add this decl to the scope shadowed decl chains.
   void PushOnScopeChains(NamedDecl *D, Scope *S, bool AddToContext = true);
 
-  /// \brief Make the given externally-produced declaration visible at the
+  /// Make the given externally-produced declaration visible at the
   /// top level scope.
   ///
   /// \param D The externally-produced declaration to push.
@@ -2379,18 +2398,18 @@
                                 TypeSourceInfo *TInfo);
   bool isIncompatibleTypedef(TypeDecl *Old, TypedefNameDecl *New);
 
-  /// \brief Describes the kind of merge to perform for availability
+  /// Describes the kind of merge to perform for availability
   /// attributes (including "deprecated", "unavailable", and "availability").
   enum AvailabilityMergeKind {
-    /// \brief Don't merge availability attributes at all.
+    /// Don't merge availability attributes at all.
     AMK_None,
-    /// \brief Merge availability attributes for a redeclaration, which requires
+    /// Merge availability attributes for a redeclaration, which requires
     /// an exact match.
     AMK_Redeclaration,
-    /// \brief Merge availability attributes for an override, which requires
+    /// Merge availability attributes for an override, which requires
     /// an exact match or a weakening of constraints.
     AMK_Override,
-    /// \brief Merge availability attributes for an implementation of
+    /// Merge availability attributes for an implementation of
     /// a protocol requirement.
     AMK_ProtocolImplementation,
   };
@@ -2428,6 +2447,8 @@
                               int FirstArg, unsigned AttrSpellingListIndex);
   SectionAttr *mergeSectionAttr(Decl *D, SourceRange Range, StringRef Name,
                                 unsigned AttrSpellingListIndex);
+  CodeSegAttr *mergeCodeSegAttr(Decl *D, SourceRange Range, StringRef Name,
+                                unsigned AttrSpellingListIndex);
   AlwaysInlineAttr *mergeAlwaysInlineAttr(Decl *D, SourceRange Range,
                                           IdentifierInfo *Ident,
                                           unsigned AttrSpellingListIndex);
@@ -2435,11 +2456,11 @@
                                 unsigned AttrSpellingListIndex);
   OptimizeNoneAttr *mergeOptimizeNoneAttr(Decl *D, SourceRange Range,
                                           unsigned AttrSpellingListIndex);
-  InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, SourceRange Range,
-                                                IdentifierInfo *Ident,
-                                                unsigned AttrSpellingListIndex);
-  CommonAttr *mergeCommonAttr(Decl *D, SourceRange Range, IdentifierInfo *Ident,
-                              unsigned AttrSpellingListIndex);
+  InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D, const ParsedAttr &AL);
+  InternalLinkageAttr *mergeInternalLinkageAttr(Decl *D,
+                                                const InternalLinkageAttr &AL);
+  CommonAttr *mergeCommonAttr(Decl *D, const ParsedAttr &AL);
+  CommonAttr *mergeCommonAttr(Decl *D, const CommonAttr &AL);
 
   void mergeDeclAttributes(NamedDecl *New, Decl *Old,
                            AvailabilityMergeKind AMK = AMK_Redeclaration);
@@ -2492,7 +2513,7 @@
   bool IsOverload(FunctionDecl *New, FunctionDecl *Old, bool IsForUsingDecl,
                   bool ConsiderCudaAttrs = true);
 
-  /// \brief Checks availability of the function depending on the current
+  /// Checks availability of the function depending on the current
   /// function context.Inside an unavailable function,unavailability is ignored.
   ///
   /// \returns true if \p FD is unavailable and current context is inside
@@ -2564,6 +2585,11 @@
                                                  NamedDecl *FoundDecl,
                                                  CXXMethodDecl *Method);
 
+  /// Check that the lifetime of the initializer (and its subobjects) is
+  /// sufficient for initializing the entity, and perform lifetime extension
+  /// (when permitted) if not.
+  void checkInitializerLifetime(const InitializedEntity &Entity, Expr *Init);
+
   ExprResult PerformContextuallyConvertToBool(Expr *From);
   ExprResult PerformContextuallyConvertToObjCPointer(Expr *From);
 
@@ -2580,7 +2606,7 @@
   ExprResult CheckConvertedConstantExpression(Expr *From, QualType T,
                                               APValue &Value, CCEKind CCE);
 
-  /// \brief Abstract base class used to perform a contextual implicit
+  /// Abstract base class used to perform a contextual implicit
   /// conversion from an expression to any type passing a filter.
   class ContextualImplicitConverter {
   public:
@@ -2591,38 +2617,38 @@
                                 bool SuppressConversion = false)
         : Suppress(Suppress), SuppressConversion(SuppressConversion) {}
 
-    /// \brief Determine whether the specified type is a valid destination type
+    /// Determine whether the specified type is a valid destination type
     /// for this conversion.
     virtual bool match(QualType T) = 0;
 
-    /// \brief Emits a diagnostic complaining that the expression does not have
+    /// Emits a diagnostic complaining that the expression does not have
     /// integral or enumeration type.
     virtual SemaDiagnosticBuilder
     diagnoseNoMatch(Sema &S, SourceLocation Loc, QualType T) = 0;
 
-    /// \brief Emits a diagnostic when the expression has incomplete class type.
+    /// Emits a diagnostic when the expression has incomplete class type.
     virtual SemaDiagnosticBuilder
     diagnoseIncomplete(Sema &S, SourceLocation Loc, QualType T) = 0;
 
-    /// \brief Emits a diagnostic when the only matching conversion function
+    /// Emits a diagnostic when the only matching conversion function
     /// is explicit.
     virtual SemaDiagnosticBuilder diagnoseExplicitConv(
         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
 
-    /// \brief Emits a note for the explicit conversion function.
+    /// Emits a note for the explicit conversion function.
     virtual SemaDiagnosticBuilder
     noteExplicitConv(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
 
-    /// \brief Emits a diagnostic when there are multiple possible conversion
+    /// Emits a diagnostic when there are multiple possible conversion
     /// functions.
     virtual SemaDiagnosticBuilder
     diagnoseAmbiguous(Sema &S, SourceLocation Loc, QualType T) = 0;
 
-    /// \brief Emits a note for one of the candidate conversions.
+    /// Emits a note for one of the candidate conversions.
     virtual SemaDiagnosticBuilder
     noteAmbiguous(Sema &S, CXXConversionDecl *Conv, QualType ConvTy) = 0;
 
-    /// \brief Emits a diagnostic when we picked a conversion function
+    /// Emits a diagnostic when we picked a conversion function
     /// (for cases when we are not allowed to pick a conversion function).
     virtual SemaDiagnosticBuilder diagnoseConversion(
         Sema &S, SourceLocation Loc, QualType T, QualType ConvTy) = 0;
@@ -2647,7 +2673,7 @@
       return diagnoseNotInt(S, Loc, T);
     }
 
-    /// \brief Emits a diagnostic complaining that the expression does not have
+    /// Emits a diagnostic complaining that the expression does not have
     /// integral or enumeration type.
     virtual SemaDiagnosticBuilder
     diagnoseNotInt(Sema &S, SourceLocation Loc, QualType T) = 0;
@@ -2982,7 +3008,7 @@
   /// the ability to distinguish among them.
   //@{
 
-  /// @brief Describes the kind of name lookup to perform.
+  /// Describes the kind of name lookup to perform.
   enum LookupNameKind {
     /// Ordinary name lookup, which finds ordinary names (functions,
     /// variables, typedefs, etc.) in C and most kinds of names
@@ -3024,22 +3050,22 @@
     LookupObjCProtocolName,
     /// Look up implicit 'self' parameter of an objective-c method.
     LookupObjCImplicitSelfParam,
-    /// \brief Look up the name of an OpenMP user-defined reduction operation.
+    /// Look up the name of an OpenMP user-defined reduction operation.
     LookupOMPReductionName,
-    /// \brief Look up any declaration with any name.
+    /// Look up any declaration with any name.
     LookupAnyName
   };
 
-  /// \brief Specifies whether (or how) name lookup is being performed for a
+  /// Specifies whether (or how) name lookup is being performed for a
   /// redeclaration (vs. a reference).
   enum RedeclarationKind {
-    /// \brief The lookup is a reference to this name that is not for the
+    /// The lookup is a reference to this name that is not for the
     /// purpose of redeclaring the name.
     NotForRedeclaration = 0,
-    /// \brief The lookup results will be used for redeclaration of a name,
+    /// The lookup results will be used for redeclaration of a name,
     /// if an entity by that name already exists and is visible.
     ForVisibleRedeclaration,
-    /// \brief The lookup results will be used for redeclaration of a name
+    /// The lookup results will be used for redeclaration of a name
     /// with external linkage; non-visible lookup results with external linkage
     /// may also be found.
     ForExternalRedeclaration
@@ -3056,23 +3082,23 @@
     return ForExternalRedeclaration;
   }
 
-  /// \brief The possible outcomes of name lookup for a literal operator.
+  /// The possible outcomes of name lookup for a literal operator.
   enum LiteralOperatorLookupResult {
-    /// \brief The lookup resulted in an error.
+    /// The lookup resulted in an error.
     LOLR_Error,
-    /// \brief The lookup found no match but no diagnostic was issued.
+    /// The lookup found no match but no diagnostic was issued.
     LOLR_ErrorNoDiagnostic,
-    /// \brief The lookup found a single 'cooked' literal operator, which
+    /// The lookup found a single 'cooked' literal operator, which
     /// expects a normal literal to be built and passed to it.
     LOLR_Cooked,
-    /// \brief The lookup found a single 'raw' literal operator, which expects
+    /// The lookup found a single 'raw' literal operator, which expects
     /// a string literal containing the spelling of the literal token.
     LOLR_Raw,
-    /// \brief The lookup found an overload set of literal operator templates,
+    /// The lookup found an overload set of literal operator templates,
     /// which expect the characters of the spelling of the literal token to be
     /// passed as a non-type template argument pack.
     LOLR_Template,
-    /// \brief The lookup found an overload set of literal operator templates,
+    /// The lookup found an overload set of literal operator templates,
     /// which expect the character type and characters of the spelling of the
     /// string literal token to be passed as template arguments.
     LOLR_StringTemplate
@@ -3102,25 +3128,25 @@
     TypoExprState &operator=(TypoExprState &&other) noexcept;
   };
 
-  /// \brief The set of unhandled TypoExprs and their associated state.
+  /// The set of unhandled TypoExprs and their associated state.
   llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;
 
-  /// \brief Creates a new TypoExpr AST node.
+  /// Creates a new TypoExpr AST node.
   TypoExpr *createDelayedTypo(std::unique_ptr<TypoCorrectionConsumer> TCC,
                               TypoDiagnosticGenerator TDG,
                               TypoRecoveryCallback TRC);
 
-  // \brief The set of known/encountered (unique, canonicalized) NamespaceDecls.
+  // The set of known/encountered (unique, canonicalized) NamespaceDecls.
   //
   // The boolean value will be true to indicate that the namespace was loaded
   // from an AST/PCH file, or false otherwise.
   llvm::MapVector<NamespaceDecl*, bool> KnownNamespaces;
 
-  /// \brief Whether we have already loaded known namespaces from an extenal
+  /// Whether we have already loaded known namespaces from an extenal
   /// source.
   bool LoadedExternalKnownNamespaces;
 
-  /// \brief Helper for CorrectTypo and CorrectTypoDelayed used to create and
+  /// Helper for CorrectTypo and CorrectTypoDelayed used to create and
   /// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction
   /// should be skipped entirely.
   std::unique_ptr<TypoCorrectionConsumer>
@@ -3135,10 +3161,10 @@
 public:
   const TypoExprState &getTypoExprState(TypoExpr *TE) const;
 
-  /// \brief Clears the state of the given TypoExpr.
+  /// Clears the state of the given TypoExpr.
   void clearDelayedTypo(TypoExpr *TE);
 
-  /// \brief Look up a name, looking for a single declaration.  Return
+  /// Look up a name, looking for a single declaration.  Return
   /// null if the results were absent, ambiguous, or overloaded.
   ///
   /// It is preferable to use the elaborated form and explicitly handle
@@ -3228,7 +3254,7 @@
                                bool EnteringContext = false,
                                const ObjCObjectPointerType *OPT = nullptr);
 
-  /// \brief Process any TypoExprs in the given Expr and its children,
+  /// Process any TypoExprs in the given Expr and its children,
   /// generating diagnostics as appropriate and returning a new Expr if there
   /// were typos that were all successfully corrected and ExprError if one or
   /// more typos could not be corrected.
@@ -3306,11 +3332,12 @@
   // Decl attributes - this routine is the top level dispatcher.
   void ProcessDeclAttributes(Scope *S, Decl *D, const Declarator &PD);
   // Helper for delayed processing of attributes.
-  void ProcessDeclAttributeDelayed(Decl *D, const AttributeList *AttrList);
-  void ProcessDeclAttributeList(Scope *S, Decl *D, const AttributeList *AL,
-                                bool IncludeCXX11Attributes = true);
+  void ProcessDeclAttributeDelayed(Decl *D,
+                                   const ParsedAttributesView &AttrList);
+  void ProcessDeclAttributeList(Scope *S, Decl *D, const ParsedAttributesView &AL,
+                             bool IncludeCXX11Attributes = true);
   bool ProcessAccessDeclAttributeList(AccessSpecDecl *ASDecl,
-                                      const AttributeList *AttrList);
+                                   const ParsedAttributesView &AttrList);
 
   void checkUnusedDeclAttributes(Declarator &D);
 
@@ -3320,13 +3347,13 @@
   /// type as valid.
   bool isValidPointerAttrType(QualType T, bool RefOkay = false);
 
-  bool CheckRegparmAttr(const AttributeList &attr, unsigned &value);
-  bool CheckCallingConvAttr(const AttributeList &attr, CallingConv &CC,
+  bool CheckRegparmAttr(const ParsedAttr &attr, unsigned &value);
+  bool CheckCallingConvAttr(const ParsedAttr &attr, CallingConv &CC,
                             const FunctionDecl *FD = nullptr);
-  bool CheckAttrTarget(const AttributeList &CurrAttr);
-  bool CheckAttrNoArgs(const AttributeList &CurrAttr);
-  bool checkStringLiteralArgumentAttr(const AttributeList &Attr,
-                                      unsigned ArgNum, StringRef &Str,
+  bool CheckAttrTarget(const ParsedAttr &CurrAttr);
+  bool CheckAttrNoArgs(const ParsedAttr &CurrAttr);
+  bool checkStringLiteralArgumentAttr(const ParsedAttr &Attr, unsigned ArgNum,
+                                      StringRef &Str,
                                       SourceLocation *ArgLocation = nullptr);
   bool checkSectionName(SourceLocation LiteralLoc, StringRef Str);
   bool checkTargetAttr(SourceLocation LiteralLoc, StringRef Str);
@@ -3375,8 +3402,9 @@
                                      bool isContextSensitive,
                                      bool allowArrayTypes);
 
-  /// \brief Stmt attributes - this routine is the top level dispatcher.
-  StmtResult ProcessStmtAttributes(Stmt *Stmt, AttributeList *Attrs,
+  /// Stmt attributes - this routine is the top level dispatcher.
+  StmtResult ProcessStmtAttributes(Stmt *Stmt,
+                                   const ParsedAttributesView &Attrs,
                                    SourceRange Range);
 
   void WarnConflictingTypedMethods(ObjCMethodDecl *Method,
@@ -3518,7 +3546,7 @@
   /// warns each time an exact match is found.
   void CheckCategoryVsClassMethodMatches(ObjCCategoryImplDecl *CatIMP);
 
-  /// \brief Add the given method to the list of globally-known methods.
+  /// Add the given method to the list of globally-known methods.
   void addMethodToGlobalList(ObjCMethodList *List, ObjCMethodDecl *Method);
 
 private:
@@ -3533,7 +3561,7 @@
                                            bool instance);
 
 public:
-  /// \brief - Returns instance or factory methods in global method pool for
+  /// - Returns instance or factory methods in global method pool for
   /// given selector. It checks the desired kind first, if none is found, and
   /// parameter checkTheOther is set, it then checks the other kind. If no such
   /// method or only one method is found, function returns false; otherwise, it
@@ -3555,14 +3583,14 @@
                                      bool receiverIdOrClass);
 
 private:
-  /// \brief - Returns a selector which best matches given argument list or
+  /// - Returns a selector which best matches given argument list or
   /// nullptr if none could be found
   ObjCMethodDecl *SelectBestMethod(Selector Sel, MultiExprArg Args,
                                    bool IsInstance,
                                    SmallVectorImpl<ObjCMethodDecl*>& Methods);
 
 
-  /// \brief Record the typo correction failure and return an empty correction.
+  /// Record the typo correction failure and return an empty correction.
   TypoCorrection FailedCorrection(IdentifierInfo *Typo, SourceLocation TypoLoc,
                                   bool RecordFailure = true) {
     if (RecordFailure)
@@ -3667,7 +3695,7 @@
   StmtResult ActOnCompoundStmt(SourceLocation L, SourceLocation R,
                                ArrayRef<Stmt *> Elts, bool isStmtExpr);
 
-  /// \brief A RAII object to enter scope of a compound statement.
+  /// A RAII object to enter scope of a compound statement.
   class CompoundScopeRAII {
   public:
     CompoundScopeRAII(Sema &S, bool IsStmtExpr = false) : S(S) {
@@ -3699,9 +3727,10 @@
                                    SourceLocation EndLoc);
   void ActOnForEachDeclStmt(DeclGroupPtrTy Decl);
   StmtResult ActOnForEachLValueExpr(Expr *E);
-  StmtResult ActOnCaseStmt(SourceLocation CaseLoc, Expr *LHSVal,
-                                   SourceLocation DotDotDotLoc, Expr *RHSVal,
-                                   SourceLocation ColonLoc);
+  ExprResult ActOnCaseExpr(SourceLocation CaseLoc, ExprResult Val);
+  StmtResult ActOnCaseStmt(SourceLocation CaseLoc, ExprResult LHS,
+                           SourceLocation DotDotDotLoc, ExprResult RHS,
+                           SourceLocation ColonLoc);
   void ActOnCaseStmtBody(Stmt *CaseStmt, Stmt *SubStmt);
 
   StmtResult ActOnDefaultStmt(SourceLocation DefaultLoc,
@@ -3800,7 +3829,11 @@
     CES_Strict = 0,
     CES_AllowParameters = 1,
     CES_AllowDifferentTypes = 2,
+    CES_AllowExceptionVariables = 4,
+    CES_FormerDefault = (CES_AllowParameters),
     CES_Default = (CES_AllowParameters | CES_AllowDifferentTypes),
+    CES_AsIfByStdMove = (CES_AllowParameters | CES_AllowDifferentTypes |
+                         CES_AllowExceptionVariables),
   };
 
   VarDecl *getCopyElisionCandidate(QualType ReturnType, Expr *E,
@@ -3895,7 +3928,7 @@
 
   bool ShouldWarnIfUnusedFileScopedDecl(const DeclaratorDecl *D) const;
 
-  /// \brief If it's a file scoped decl that must warn if not used, keep track
+  /// If it's a file scoped decl that must warn if not used, keep track
   /// of it.
   void MarkUnusedFileScopedDecl(const DeclaratorDecl *D);
 
@@ -3924,7 +3957,7 @@
   void DiagnoseSelfMove(const Expr *LHSExpr, const Expr *RHSExpr,
                         SourceLocation OpLoc);
 
-  /// \brief Warn if we're implicitly casting from a _Nullable pointer type to a
+  /// Warn if we're implicitly casting from a _Nullable pointer type to a
   /// _Nonnull one.
   void diagnoseNullableToNonnullConversion(QualType DstType, QualType SrcType,
                                            SourceLocation Loc);
@@ -3955,7 +3988,7 @@
   bool makeUnavailableInSystemHeader(SourceLocation loc,
                                      UnavailableAttr::ImplicitReason reason);
 
-  /// \brief Issue any -Wunguarded-availability warnings in \c FD
+  /// Issue any -Wunguarded-availability warnings in \c FD
   void DiagnoseUnguardedAvailabilityViolations(Decl *FD);
 
   //===--------------------------------------------------------------------===//
@@ -3975,13 +4008,15 @@
   void DiagnoseSentinelCalls(NamedDecl *D, SourceLocation Loc,
                              ArrayRef<Expr *> Args);
 
-  void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
-                                       Decl *LambdaContextDecl = nullptr,
-                                       bool IsDecltype = false);
+  void PushExpressionEvaluationContext(
+      ExpressionEvaluationContext NewContext, Decl *LambdaContextDecl = nullptr,
+      ExpressionEvaluationContextRecord::ExpressionKind Type =
+          ExpressionEvaluationContextRecord::EK_Other);
   enum ReuseLambdaContextDecl_t { ReuseLambdaContextDecl };
-  void PushExpressionEvaluationContext(ExpressionEvaluationContext NewContext,
-                                       ReuseLambdaContextDecl_t,
-                                       bool IsDecltype = false);
+  void PushExpressionEvaluationContext(
+      ExpressionEvaluationContext NewContext, ReuseLambdaContextDecl_t,
+      ExpressionEvaluationContextRecord::ExpressionKind Type =
+          ExpressionEvaluationContextRecord::EK_Other);
   void PopExpressionEvaluationContext();
 
   void DiscardCleanupsInEvaluationContext();
@@ -4017,7 +4052,7 @@
     TryCapture_Implicit, TryCapture_ExplicitByVal, TryCapture_ExplicitByRef
   };
 
-  /// \brief Try to capture the given variable.
+  /// Try to capture the given variable.
   ///
   /// \param Var The variable to capture.
   ///
@@ -4056,15 +4091,15 @@
                           QualType &DeclRefType,
                           const unsigned *const FunctionScopeIndexToStopAt);
 
-  /// \brief Try to capture the given variable.
+  /// Try to capture the given variable.
   bool tryCaptureVariable(VarDecl *Var, SourceLocation Loc,
                           TryCaptureKind Kind = TryCapture_Implicit,
                           SourceLocation EllipsisLoc = SourceLocation());
 
-  /// \brief Checks if the variable must be captured.
+  /// Checks if the variable must be captured.
   bool NeedToCaptureVariable(VarDecl *Var, SourceLocation Loc);
 
-  /// \brief Given a variable, determine the type that a reference to that
+  /// Given a variable, determine the type that a reference to that
   /// variable will have in the given scope.
   QualType getCapturedDeclRefType(VarDecl *Var, SourceLocation Loc);
 
@@ -4075,18 +4110,18 @@
   void MarkDeclarationsReferencedInExpr(Expr *E,
                                         bool SkipLocalVariables = false);
 
-  /// \brief Try to recover by turning the given expression into a
+  /// Try to recover by turning the given expression into a
   /// call.  Returns true if recovery was attempted or an error was
   /// emitted; this may also leave the ExprResult invalid.
   bool tryToRecoverWithCall(ExprResult &E, const PartialDiagnostic &PD,
                             bool ForceComplain = false,
                             bool (*IsPlausibleResult)(QualType) = nullptr);
 
-  /// \brief Figure out if an expression could be turned into a call.
+  /// Figure out if an expression could be turned into a call.
   bool tryExprAsCall(Expr &E, QualType &ZeroArgCallReturnTy,
                      UnresolvedSetImpl &NonTemplateOverloads);
 
-  /// \brief Conditionally issue a diagnostic based on the current
+  /// Conditionally issue a diagnostic based on the current
   /// evaluation context.
   ///
   /// \param Statement If Statement is non-null, delay reporting the
@@ -4228,6 +4263,7 @@
   ExprResult ActOnUnaryOp(Scope *S, SourceLocation OpLoc,
                           tok::TokenKind Op, Expr *Input);
 
+  bool isQualifiedMemberAccess(Expr *E);
   QualType CheckAddressOfOperand(ExprResult &Operand, SourceLocation OpLoc);
 
   ExprResult CreateUnaryExprOrTypeTraitExpr(TypeSourceInfo *TInfo,
@@ -4360,7 +4396,7 @@
                                  Expr *Op);
   CastKind PrepareScalarCast(ExprResult &src, QualType destType);
 
-  /// \brief Build an altivec or OpenCL literal.
+  /// Build an altivec or OpenCL literal.
   ExprResult BuildVectorLiteral(SourceLocation LParenLoc,
                                 SourceLocation RParenLoc, Expr *E,
                                 TypeSourceInfo *TInfo);
@@ -4452,19 +4488,19 @@
 
   bool CheckCaseExpression(Expr *E);
 
-  /// \brief Describes the result of an "if-exists" condition check.
+  /// Describes the result of an "if-exists" condition check.
   enum IfExistsResult {
-    /// \brief The symbol exists.
+    /// The symbol exists.
     IER_Exists,
 
-    /// \brief The symbol does not exist.
+    /// The symbol does not exist.
     IER_DoesNotExist,
 
-    /// \brief The name is a dependent name, so the results will differ
+    /// The name is a dependent name, so the results will differ
     /// from one instantiation to the next.
     IER_Dependent,
 
-    /// \brief An error occurred.
+    /// An error occurred.
     IER_Error
   };
 
@@ -4526,11 +4562,10 @@
   // Act on C++ namespaces
   Decl *ActOnStartNamespaceDef(Scope *S, SourceLocation InlineLoc,
                                SourceLocation NamespaceLoc,
-                               SourceLocation IdentLoc,
-                               IdentifierInfo *Ident,
+                               SourceLocation IdentLoc, IdentifierInfo *Ident,
                                SourceLocation LBrace,
-                               AttributeList *AttrList,
-                               UsingDirectiveDecl * &UsingDecl);
+                               const ParsedAttributesView &AttrList,
+                               UsingDirectiveDecl *&UsingDecl);
   void ActOnFinishNamespaceDef(Decl *Dcl, SourceLocation RBrace);
 
   NamespaceDecl *getStdNamespace() const;
@@ -4541,27 +4576,41 @@
   CXXRecordDecl *getStdBadAlloc() const;
   EnumDecl *getStdAlignValT() const;
 
-  /// \brief Tests whether Ty is an instance of std::initializer_list and, if
+private:
+  // A cache representing if we've fully checked the various comparison category
+  // types stored in ASTContext. The bit-index corresponds to the integer value
+  // of a ComparisonCategoryType enumerator.
+  llvm::SmallBitVector FullyCheckedComparisonCategories;
+
+public:
+  /// Lookup the specified comparison category types in the standard
+  ///   library, an check the VarDecls possibly returned by the operator<=>
+  ///   builtins for that type.
+  ///
+  /// \return The type of the comparison category type corresponding to the
+  ///   specified Kind, or a null type if an error occurs
+  QualType CheckComparisonCategoryType(ComparisonCategoryType Kind,
+                                       SourceLocation Loc);
+
+  /// Tests whether Ty is an instance of std::initializer_list and, if
   /// it is and Element is not NULL, assigns the element type to Element.
   bool isStdInitializerList(QualType Ty, QualType *Element);
 
-  /// \brief Looks for the std::initializer_list template and instantiates it
+  /// Looks for the std::initializer_list template and instantiates it
   /// with Element, or emits an error if it's not found.
   ///
   /// \returns The instantiated template, or null on error.
   QualType BuildStdInitializerList(QualType Element, SourceLocation Loc);
 
-  /// \brief Determine whether Ctor is an initializer-list constructor, as
+  /// Determine whether Ctor is an initializer-list constructor, as
   /// defined in [dcl.init.list]p2.
   bool isInitListConstructor(const FunctionDecl *Ctor);
 
-  Decl *ActOnUsingDirective(Scope *CurScope,
-                            SourceLocation UsingLoc,
-                            SourceLocation NamespcLoc,
-                            CXXScopeSpec &SS,
+  Decl *ActOnUsingDirective(Scope *CurScope, SourceLocation UsingLoc,
+                            SourceLocation NamespcLoc, CXXScopeSpec &SS,
                             SourceLocation IdentLoc,
                             IdentifierInfo *NamespcName,
-                            AttributeList *AttrList);
+                            const ParsedAttributesView &AttrList);
 
   void PushUsingDirective(Scope *S, UsingDirectiveDecl *UDir);
 
@@ -4592,15 +4641,11 @@
                                const DeclarationNameInfo &NameInfo,
                                SourceLocation NameLoc);
 
-  NamedDecl *BuildUsingDeclaration(Scope *S, AccessSpecifier AS,
-                                   SourceLocation UsingLoc,
-                                   bool HasTypenameKeyword,
-                                   SourceLocation TypenameLoc,
-                                   CXXScopeSpec &SS,
-                                   DeclarationNameInfo NameInfo,
-                                   SourceLocation EllipsisLoc,
-                                   AttributeList *AttrList,
-                                   bool IsInstantiation);
+  NamedDecl *BuildUsingDeclaration(
+      Scope *S, AccessSpecifier AS, SourceLocation UsingLoc,
+      bool HasTypenameKeyword, SourceLocation TypenameLoc, CXXScopeSpec &SS,
+      DeclarationNameInfo NameInfo, SourceLocation EllipsisLoc,
+      const ParsedAttributesView &AttrList, bool IsInstantiation);
   NamedDecl *BuildUsingPackDecl(NamedDecl *InstantiatedFrom,
                                 ArrayRef<NamedDecl *> Expansions);
 
@@ -4613,22 +4658,16 @@
   findInheritingConstructor(SourceLocation Loc, CXXConstructorDecl *BaseCtor,
                             ConstructorUsingShadowDecl *DerivedShadow);
 
-  Decl *ActOnUsingDeclaration(Scope *CurScope,
-                              AccessSpecifier AS,
+  Decl *ActOnUsingDeclaration(Scope *CurScope, AccessSpecifier AS,
                               SourceLocation UsingLoc,
-                              SourceLocation TypenameLoc,
-                              CXXScopeSpec &SS,
-                              UnqualifiedId &Name,
-                              SourceLocation EllipsisLoc,
-                              AttributeList *AttrList);
-  Decl *ActOnAliasDeclaration(Scope *CurScope,
-                              AccessSpecifier AS,
+                              SourceLocation TypenameLoc, CXXScopeSpec &SS,
+                              UnqualifiedId &Name, SourceLocation EllipsisLoc,
+                              const ParsedAttributesView &AttrList);
+  Decl *ActOnAliasDeclaration(Scope *CurScope, AccessSpecifier AS,
                               MultiTemplateParamsArg TemplateParams,
-                              SourceLocation UsingLoc,
-                              UnqualifiedId &Name,
-                              AttributeList *AttrList,
-                              TypeResult Type,
-                              Decl *DeclFromDeclSpec);
+                              SourceLocation UsingLoc, UnqualifiedId &Name,
+                              const ParsedAttributesView &AttrList,
+                              TypeResult Type, Decl *DeclFromDeclSpec);
 
   /// BuildCXXConstructExpr - Creates a complete call to a constructor,
   /// including handling of its default argument expressions.
@@ -4683,7 +4722,7 @@
   /// constructed variable.
   void FinalizeVarWithDestructor(VarDecl *VD, const RecordType *DeclInitType);
 
-  /// \brief Helper class that collects exception specifications for
+  /// Helper class that collects exception specifications for
   /// implicitly-declared special member functions.
   class ImplicitExceptionSpecification {
     // Pointer to allow copying
@@ -4710,26 +4749,26 @@
         ComputedEST = EST_DynamicNone;
     }
 
-    /// \brief Get the computed exception specification type.
+    /// Get the computed exception specification type.
     ExceptionSpecificationType getExceptionSpecType() const {
-      assert(ComputedEST != EST_ComputedNoexcept &&
+      assert(!isComputedNoexcept(ComputedEST) &&
              "noexcept(expr) should not be a possible result");
       return ComputedEST;
     }
 
-    /// \brief The number of exceptions in the exception specification.
+    /// The number of exceptions in the exception specification.
     unsigned size() const { return Exceptions.size(); }
 
-    /// \brief The set of exceptions in the exception specification.
+    /// The set of exceptions in the exception specification.
     const QualType *data() const { return Exceptions.data(); }
 
-    /// \brief Integrate another called method into the collected data.
+    /// Integrate another called method into the collected data.
     void CalledDecl(SourceLocation CallLoc, const CXXMethodDecl *Method);
 
-    /// \brief Integrate an invoked expression into the collected data.
+    /// Integrate an invoked expression into the collected data.
     void CalledExpr(Expr *E);
 
-    /// \brief Overwrite an EPI's exception specification with this
+    /// Overwrite an EPI's exception specification with this
     /// computed exception specification.
     FunctionProtoType::ExceptionSpecInfo getExceptionSpec() const {
       FunctionProtoType::ExceptionSpecInfo ESI;
@@ -4740,7 +4779,7 @@
         /// C++11 [except.spec]p14:
         ///   The exception-specification is noexcept(false) if the set of
         ///   potential exceptions of the special member function contains "any"
-        ESI.Type = EST_ComputedNoexcept;
+        ESI.Type = EST_NoexceptFalse;
         ESI.NoexceptExpr = Self->ActOnCXXBoolLiteral(SourceLocation(),
                                                      tok::kw_false).get();
       }
@@ -4748,50 +4787,55 @@
     }
   };
 
-  /// \brief Determine what sort of exception specification a defaulted
+  /// Determine what sort of exception specification a defaulted
   /// copy constructor of a class will have.
   ImplicitExceptionSpecification
   ComputeDefaultedDefaultCtorExceptionSpec(SourceLocation Loc,
                                            CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification a defaulted
+  /// Determine what sort of exception specification a defaulted
   /// default constructor of a class will have, and whether the parameter
   /// will be const.
   ImplicitExceptionSpecification
   ComputeDefaultedCopyCtorExceptionSpec(CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification a defautled
+  /// Determine what sort of exception specification a defautled
   /// copy assignment operator of a class will have, and whether the
   /// parameter will be const.
   ImplicitExceptionSpecification
   ComputeDefaultedCopyAssignmentExceptionSpec(CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification a defaulted move
+  /// Determine what sort of exception specification a defaulted move
   /// constructor of a class will have.
   ImplicitExceptionSpecification
   ComputeDefaultedMoveCtorExceptionSpec(CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification a defaulted move
+  /// Determine what sort of exception specification a defaulted move
   /// assignment operator of a class will have.
   ImplicitExceptionSpecification
   ComputeDefaultedMoveAssignmentExceptionSpec(CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification a defaulted
+  /// Determine what sort of exception specification a defaulted
   /// destructor of a class will have.
   ImplicitExceptionSpecification
   ComputeDefaultedDtorExceptionSpec(CXXMethodDecl *MD);
 
-  /// \brief Determine what sort of exception specification an inheriting
+  /// Determine what sort of exception specification an inheriting
   /// constructor of a class will have.
   ImplicitExceptionSpecification
   ComputeInheritingCtorExceptionSpec(SourceLocation Loc,
                                      CXXConstructorDecl *CD);
 
-  /// \brief Evaluate the implicit exception specification for a defaulted
+  /// Evaluate the implicit exception specification for a defaulted
   /// special member function.
   void EvaluateImplicitExceptionSpec(SourceLocation Loc, CXXMethodDecl *MD);
 
-  /// \brief Check the given exception-specification and update the
+  /// Check the given noexcept-specifier, convert its expression, and compute
+  /// the appropriate ExceptionSpecificationType.
+  ExprResult ActOnNoexceptSpec(SourceLocation NoexceptLoc, Expr *NoexceptExpr,
+                               ExceptionSpecificationType &EST);
+
+  /// Check the given exception-specification and update the
   /// exception specification information with the results.
   void checkExceptionSpecification(bool IsTopLevel,
                                    ExceptionSpecificationType EST,
@@ -4801,11 +4845,11 @@
                                    SmallVectorImpl<QualType> &Exceptions,
                                    FunctionProtoType::ExceptionSpecInfo &ESI);
 
-  /// \brief Determine if we're in a case where we need to (incorrectly) eagerly
+  /// Determine if we're in a case where we need to (incorrectly) eagerly
   /// parse an exception specification to work around a libstdc++ bug.
   bool isLibstdcxxEagerExceptionSpecHack(const Declarator &D);
 
-  /// \brief Add an exception-specification to the given member function
+  /// Add an exception-specification to the given member function
   /// (or member function template). The exception-specification was parsed
   /// after the method itself was declared.
   void actOnDelayedExceptionSpecification(Decl *Method,
@@ -4817,13 +4861,13 @@
 
   class InheritedConstructorInfo;
 
-  /// \brief Determine if a special member function should have a deleted
+  /// Determine if a special member function should have a deleted
   /// definition when it is defaulted.
   bool ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
                                  InheritedConstructorInfo *ICI = nullptr,
                                  bool Diagnose = false);
 
-  /// \brief Declare the implicit default constructor for the given class.
+  /// Declare the implicit default constructor for the given class.
   ///
   /// \param ClassDecl The class declaration into which the implicit
   /// default constructor will be added.
@@ -4837,7 +4881,7 @@
   void DefineImplicitDefaultConstructor(SourceLocation CurrentLocation,
                                         CXXConstructorDecl *Constructor);
 
-  /// \brief Declare the implicit destructor for the given class.
+  /// Declare the implicit destructor for the given class.
   ///
   /// \param ClassDecl The class declaration into which the implicit
   /// destructor will be added.
@@ -4850,18 +4894,18 @@
   void DefineImplicitDestructor(SourceLocation CurrentLocation,
                                 CXXDestructorDecl *Destructor);
 
-  /// \brief Build an exception spec for destructors that don't have one.
+  /// Build an exception spec for destructors that don't have one.
   ///
   /// C++11 says that user-defined destructors with no exception spec get one
   /// that looks as if the destructor was implicitly declared.
   void AdjustDestructorExceptionSpec(CXXRecordDecl *ClassDecl,
                                      CXXDestructorDecl *Destructor);
 
-  /// \brief Define the specified inheriting constructor.
+  /// Define the specified inheriting constructor.
   void DefineInheritingConstructor(SourceLocation UseLoc,
                                    CXXConstructorDecl *Constructor);
 
-  /// \brief Declare the implicit copy constructor for the given class.
+  /// Declare the implicit copy constructor for the given class.
   ///
   /// \param ClassDecl The class declaration into which the implicit
   /// copy constructor will be added.
@@ -4874,7 +4918,7 @@
   void DefineImplicitCopyConstructor(SourceLocation CurrentLocation,
                                      CXXConstructorDecl *Constructor);
 
-  /// \brief Declare the implicit move constructor for the given class.
+  /// Declare the implicit move constructor for the given class.
   ///
   /// \param ClassDecl The Class declaration into which the implicit
   /// move constructor will be added.
@@ -4888,7 +4932,7 @@
   void DefineImplicitMoveConstructor(SourceLocation CurrentLocation,
                                      CXXConstructorDecl *Constructor);
 
-  /// \brief Declare the implicit copy assignment operator for the given class.
+  /// Declare the implicit copy assignment operator for the given class.
   ///
   /// \param ClassDecl The class declaration into which the implicit
   /// copy assignment operator will be added.
@@ -4896,11 +4940,11 @@
   /// \returns The implicitly-declared copy assignment operator.
   CXXMethodDecl *DeclareImplicitCopyAssignment(CXXRecordDecl *ClassDecl);
 
-  /// \brief Defines an implicitly-declared copy assignment operator.
+  /// Defines an implicitly-declared copy assignment operator.
   void DefineImplicitCopyAssignment(SourceLocation CurrentLocation,
                                     CXXMethodDecl *MethodDecl);
 
-  /// \brief Declare the implicit move assignment operator for the given class.
+  /// Declare the implicit move assignment operator for the given class.
   ///
   /// \param ClassDecl The Class declaration into which the implicit
   /// move assignment operator will be added.
@@ -4909,32 +4953,32 @@
   /// wasn't declared.
   CXXMethodDecl *DeclareImplicitMoveAssignment(CXXRecordDecl *ClassDecl);
 
-  /// \brief Defines an implicitly-declared move assignment operator.
+  /// Defines an implicitly-declared move assignment operator.
   void DefineImplicitMoveAssignment(SourceLocation CurrentLocation,
                                     CXXMethodDecl *MethodDecl);
 
-  /// \brief Force the declaration of any implicitly-declared members of this
+  /// Force the declaration of any implicitly-declared members of this
   /// class.
   void ForceDeclarationOfImplicitMembers(CXXRecordDecl *Class);
 
-  /// \brief Check a completed declaration of an implicit special member.
+  /// Check a completed declaration of an implicit special member.
   void CheckImplicitSpecialMemberDeclaration(Scope *S, FunctionDecl *FD);
 
-  /// \brief Determine whether the given function is an implicitly-deleted
+  /// Determine whether the given function is an implicitly-deleted
   /// special member function.
   bool isImplicitlyDeleted(FunctionDecl *FD);
 
-  /// \brief Check whether 'this' shows up in the type of a static member
+  /// Check whether 'this' shows up in the type of a static member
   /// function after the (naturally empty) cv-qualifier-seq would be.
   ///
   /// \returns true if an error occurred.
   bool checkThisInStaticMemberFunctionType(CXXMethodDecl *Method);
 
-  /// \brief Whether this' shows up in the exception specification of a static
+  /// Whether this' shows up in the exception specification of a static
   /// member function.
   bool checkThisInStaticMemberFunctionExceptionSpec(CXXMethodDecl *Method);
 
-  /// \brief Check whether 'this' shows up in the attributes of the given
+  /// Check whether 'this' shows up in the attributes of the given
   /// static member function.
   ///
   /// \returns true if an error occurred.
@@ -4956,6 +5000,9 @@
                                           SourceLocation NameLoc,
                                           IdentifierInfo &Name);
 
+  ParsedType getConstructorName(IdentifierInfo &II, SourceLocation NameLoc,
+                                Scope *S, CXXScopeSpec &SS,
+                                bool EnteringContext);
   ParsedType getDestructorName(SourceLocation TildeLoc,
                                IdentifierInfo &II, SourceLocation NameLoc,
                                Scope *S, CXXScopeSpec &SS,
@@ -5016,7 +5063,7 @@
                             void *TyOrExpr,
                             SourceLocation RParenLoc);
 
-  /// \brief Handle a C++1z fold-expression: ( expr op ... op expr ).
+  /// Handle a C++1z fold-expression: ( expr op ... op expr ).
   ExprResult ActOnCXXFoldExpr(SourceLocation LParenLoc, Expr *LHS,
                               tok::TokenKind Operator,
                               SourceLocation EllipsisLoc, Expr *RHS,
@@ -5031,17 +5078,17 @@
   //// ActOnCXXThis -  Parse 'this' pointer.
   ExprResult ActOnCXXThis(SourceLocation loc);
 
-  /// \brief Try to retrieve the type of the 'this' pointer.
+  /// Try to retrieve the type of the 'this' pointer.
   ///
   /// \returns The type of 'this', if possible. Otherwise, returns a NULL type.
   QualType getCurrentThisType();
 
-  /// \brief When non-NULL, the C++ 'this' expression is allowed despite the
+  /// When non-NULL, the C++ 'this' expression is allowed despite the
   /// current context not being a non-static member function. In such cases,
   /// this provides the type used for 'this'.
   QualType CXXThisTypeOverride;
 
-  /// \brief RAII object used to temporarily allow the C++ 'this' expression
+  /// RAII object used to temporarily allow the C++ 'this' expression
   /// to be used, with the given qualifiers on the current class type.
   class CXXThisScopeRAII {
     Sema &S;
@@ -5049,7 +5096,7 @@
     bool Enabled;
 
   public:
-    /// \brief Introduce a new scope where 'this' may be allowed (when enabled),
+    /// Introduce a new scope where 'this' may be allowed (when enabled),
     /// using the given declaration (which is either a class template or a
     /// class) along with the given qualifiers.
     /// along with the qualifiers placed on '*this'.
@@ -5059,7 +5106,7 @@
     ~CXXThisScopeRAII();
   };
 
-  /// \brief Make sure the value of 'this' is actually available in the current
+  /// Make sure the value of 'this' is actually available in the current
   /// context, if it is a potentially evaluated context.
   ///
   /// \param Loc The location at which the capture of 'this' occurs.
@@ -5079,7 +5126,7 @@
       const unsigned *const FunctionScopeIndexToStopAt = nullptr,
       bool ByCopy = false);
 
-  /// \brief Determine whether the given type is the type of *this that is used
+  /// Determine whether the given type is the type of *this that is used
   /// outside of the body of a member function for a type that is currently
   /// being defined.
   bool isThisOutsideMemberFunctionBody(QualType BaseType);
@@ -5140,8 +5187,25 @@
 
   bool CheckAllocatedType(QualType AllocType, SourceLocation Loc,
                           SourceRange R);
+
+  /// The scope in which to find allocation functions.
+  enum AllocationFunctionScope {
+    /// Only look for allocation functions in the global scope.
+    AFS_Global,
+    /// Only look for allocation functions in the scope of the
+    /// allocated class.
+    AFS_Class,
+    /// Look for allocation functions in both the global scope
+    /// and in the scope of the allocated class.
+    AFS_Both
+  };
+
+  /// Finds the overloads of operator new and delete that are appropriate
+  /// for the allocation.
   bool FindAllocationFunctions(SourceLocation StartLoc, SourceRange Range,
-                               bool UseGlobal, QualType AllocType, bool IsArray,
+                               AllocationFunctionScope NewScope,
+                               AllocationFunctionScope DeleteScope,
+                               QualType AllocType, bool IsArray,
                                bool &PassAlignment, MultiExprArg PlaceArgs,
                                FunctionDecl *&OperatorNew,
                                FunctionDecl *&OperatorDelete,
@@ -5174,7 +5238,7 @@
   ExprResult BuildCXXNoexceptExpr(SourceLocation KeyLoc, Expr *Operand,
                                   SourceLocation RParen);
 
-  /// \brief Parsed one of the type trait support pseudo-functions.
+  /// Parsed one of the type trait support pseudo-functions.
   ExprResult ActOnTypeTrait(TypeTrait Kind, SourceLocation KWLoc,
                             ArrayRef<ParsedType> Args,
                             SourceLocation RParenLoc);
@@ -5269,7 +5333,7 @@
   bool isDependentScopeSpecifier(const CXXScopeSpec &SS);
   CXXRecordDecl *getCurrentInstantiationOf(NestedNameSpecifier *NNS);
 
-  /// \brief The parser has parsed a global nested-name-specifier '::'.
+  /// The parser has parsed a global nested-name-specifier '::'.
   ///
   /// \param CCLoc The location of the '::'.
   ///
@@ -5279,7 +5343,7 @@
   /// \returns true if an error occurred, false otherwise.
   bool ActOnCXXGlobalScopeSpecifier(SourceLocation CCLoc, CXXScopeSpec &SS);
 
-  /// \brief The parser has parsed a '__super' nested-name-specifier.
+  /// The parser has parsed a '__super' nested-name-specifier.
   ///
   /// \param SuperLoc The location of the '__super' keyword.
   ///
@@ -5296,23 +5360,23 @@
                                        bool *CanCorrect = nullptr);
   NamedDecl *FindFirstQualifierInScope(Scope *S, NestedNameSpecifier *NNS);
 
-  /// \brief Keeps information about an identifier in a nested-name-spec.
+  /// Keeps information about an identifier in a nested-name-spec.
   ///
   struct NestedNameSpecInfo {
-    /// \brief The type of the object, if we're parsing nested-name-specifier in
+    /// The type of the object, if we're parsing nested-name-specifier in
     /// a member access expression.
     ParsedType ObjectType;
 
-    /// \brief The identifier preceding the '::'.
+    /// The identifier preceding the '::'.
     IdentifierInfo *Identifier;
 
-    /// \brief The location of the identifier.
+    /// The location of the identifier.
     SourceLocation IdentifierLoc;
 
-    /// \brief The location of the '::'.
+    /// The location of the '::'.
     SourceLocation CCLoc;
 
-    /// \brief Creates info object for the most typical case.
+    /// Creates info object for the most typical case.
     NestedNameSpecInfo(IdentifierInfo *II, SourceLocation IdLoc,
              SourceLocation ColonColonLoc, ParsedType ObjectType = ParsedType())
       : ObjectType(ObjectType), Identifier(II), IdentifierLoc(IdLoc),
@@ -5338,7 +5402,7 @@
                                    bool *IsCorrectedToColon = nullptr,
                                    bool OnlyNamespace = false);
 
-  /// \brief The parser has parsed a nested-name-specifier 'identifier::'.
+  /// The parser has parsed a nested-name-specifier 'identifier::'.
   ///
   /// \param S The scope in which this nested-name-specifier occurs.
   ///
@@ -5381,7 +5445,7 @@
                                  NestedNameSpecInfo &IdInfo,
                                  bool EnteringContext);
 
-  /// \brief The parser has parsed a nested-name-specifier
+  /// The parser has parsed a nested-name-specifier
   /// 'template[opt] template-name < template-args >::'.
   ///
   /// \param S The scope in which this nested-name-specifier occurs.
@@ -5415,7 +5479,7 @@
                                    SourceLocation CCLoc,
                                    bool EnteringContext);
 
-  /// \brief Given a C++ nested-name-specifier, produce an annotation value
+  /// Given a C++ nested-name-specifier, produce an annotation value
   /// that the parser can use later to reconstruct the given
   /// nested-name-specifier.
   ///
@@ -5425,7 +5489,7 @@
   /// nested-name-specifier \p SS.
   void *SaveNestedNameSpecifierAnnotation(CXXScopeSpec &SS);
 
-  /// \brief Given an annotation pointer for a nested-name-specifier, restore
+  /// Given an annotation pointer for a nested-name-specifier, restore
   /// the nested-name-specifier structure.
   ///
   /// \param Annotation The annotation pointer, produced by
@@ -5467,13 +5531,13 @@
   /// initializer for the declaration 'Dcl'.
   void ActOnCXXExitDeclInitializer(Scope *S, Decl *Dcl);
 
-  /// \brief Create a new lambda closure type.
+  /// Create a new lambda closure type.
   CXXRecordDecl *createLambdaClosureType(SourceRange IntroducerRange,
                                          TypeSourceInfo *Info,
                                          bool KnownDependent,
                                          LambdaCaptureDefault CaptureDefault);
 
-  /// \brief Start the definition of a lambda expression.
+  /// Start the definition of a lambda expression.
   CXXMethodDecl *startLambdaDefinition(CXXRecordDecl *Class,
                                        SourceRange IntroducerRange,
                                        TypeSourceInfo *MethodType,
@@ -5481,7 +5545,7 @@
                                        ArrayRef<ParmVarDecl *> Params,
                                        bool IsConstexprSpecified);
 
-  /// \brief Endow the lambda scope info with the relevant properties.
+  /// Endow the lambda scope info with the relevant properties.
   void buildLambdaScope(sema::LambdaScopeInfo *LSI,
                         CXXMethodDecl *CallOperator,
                         SourceRange IntroducerRange,
@@ -5491,7 +5555,7 @@
                         bool ExplicitResultType,
                         bool Mutable);
 
-  /// \brief Perform initialization analysis of the init-capture and perform
+  /// Perform initialization analysis of the init-capture and perform
   /// any implicit conversions such as an lvalue-to-rvalue conversion if
   /// not being used to initialize a reference.
   ParsedType actOnLambdaInitCaptureInitialization(
@@ -5504,7 +5568,7 @@
                                                 IdentifierInfo *Id,
                                                 bool DirectInit, Expr *&Init);
 
-  /// \brief Create a dummy variable within the declcontext of the lambda's
+  /// Create a dummy variable within the declcontext of the lambda's
   ///  call operator, for name lookup purposes for a lambda init capture.
   ///
   ///  CodeGen handles emission of lambda captures, ignoring these dummy
@@ -5514,17 +5578,17 @@
                                           IdentifierInfo *Id,
                                           unsigned InitStyle, Expr *Init);
 
-  /// \brief Build the implicit field for an init-capture.
+  /// Build the implicit field for an init-capture.
   FieldDecl *buildInitCaptureField(sema::LambdaScopeInfo *LSI, VarDecl *Var);
 
-  /// \brief Note that we have finished the explicit captures for the
+  /// Note that we have finished the explicit captures for the
   /// given lambda.
   void finishLambdaExplicitCaptures(sema::LambdaScopeInfo *LSI);
 
-  /// \brief Introduce the lambda parameters into scope.
+  /// Introduce the lambda parameters into scope.
   void addLambdaParameters(CXXMethodDecl *CallOperator, Scope *CurScope);
 
-  /// \brief Deduce a block or lambda's return type based on the return
+  /// Deduce a block or lambda's return type based on the return
   /// statements present in the body.
   void deduceClosureReturnType(sema::CapturingScopeInfo &CSI);
 
@@ -5545,13 +5609,15 @@
   ExprResult ActOnLambdaExpr(SourceLocation StartLoc, Stmt *Body,
                              Scope *CurScope);
 
-  /// \brief Does copying/destroying the captured variable have side effects?
+  /// Does copying/destroying the captured variable have side effects?
   bool CaptureHasSideEffects(const sema::Capture &From);
 
-  /// \brief Diagnose if an explicit lambda capture is unused.
-  void DiagnoseUnusedLambdaCapture(const sema::Capture &From);
+  /// Diagnose if an explicit lambda capture is unused. Returns true if a
+  /// diagnostic is emitted.
+  bool DiagnoseUnusedLambdaCapture(SourceRange CaptureRange,
+                                   const sema::Capture &From);
 
-  /// \brief Complete a lambda-expression having processed and attached the
+  /// Complete a lambda-expression having processed and attached the
   /// lambda body.
   ExprResult BuildLambdaExpr(SourceLocation StartLoc, SourceLocation EndLoc,
                              sema::LambdaScopeInfo *LSI);
@@ -5561,7 +5627,7 @@
   QualType
   getLambdaConversionFunctionResultType(const FunctionProtoType *CallOpType);
 
-  /// \brief Define the "body" of the conversion from a lambda object to a
+  /// Define the "body" of the conversion from a lambda object to a
   /// function pointer.
   ///
   /// This routine doesn't actually define a sensible body; rather, it fills
@@ -5571,7 +5637,7 @@
   void DefineImplicitLambdaToFunctionPointerConversion(
          SourceLocation CurrentLoc, CXXConversionDecl *Conv);
 
-  /// \brief Define the "body" of the conversion from a lambda object to a
+  /// Define the "body" of the conversion from a lambda object to a
   /// block pointer.
   ///
   /// This routine doesn't actually define a sensible body; rather, it fills
@@ -5659,14 +5725,14 @@
   //===--------------------------------------------------------------------===//
   // C++ Classes
   //
+  CXXRecordDecl *getCurrentClass(Scope *S, const CXXScopeSpec *SS);
   bool isCurrentClassName(const IdentifierInfo &II, Scope *S,
                           const CXXScopeSpec *SS = nullptr);
   bool isCurrentClassNameTypo(IdentifierInfo *&II, const CXXScopeSpec *SS);
 
-  bool ActOnAccessSpecifier(AccessSpecifier Access,
-                            SourceLocation ASLoc,
+  bool ActOnAccessSpecifier(AccessSpecifier Access, SourceLocation ASLoc,
                             SourceLocation ColonLoc,
-                            AttributeList *Attrs = nullptr);
+                            const ParsedAttributesView &Attrs);
 
   NamedDecl *ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS,
                                  Declarator &D,
@@ -5740,30 +5806,30 @@
   void MarkBaseAndMemberDestructorsReferenced(SourceLocation Loc,
                                               CXXRecordDecl *Record);
 
-  /// \brief The list of classes whose vtables have been used within
+  /// The list of classes whose vtables have been used within
   /// this translation unit, and the source locations at which the
   /// first use occurred.
   typedef std::pair<CXXRecordDecl*, SourceLocation> VTableUse;
 
-  /// \brief The list of vtables that are required but have not yet been
+  /// The list of vtables that are required but have not yet been
   /// materialized.
   SmallVector<VTableUse, 16> VTableUses;
 
-  /// \brief The set of classes whose vtables have been used within
+  /// The set of classes whose vtables have been used within
   /// this translation unit, and a bit that will be true if the vtable is
   /// required to be emitted (otherwise, it should be emitted only if needed
   /// by code generation).
   llvm::DenseMap<CXXRecordDecl *, bool> VTablesUsed;
 
-  /// \brief Load any externally-stored vtable uses.
+  /// Load any externally-stored vtable uses.
   void LoadExternalVTableUses();
 
-  /// \brief Note that the vtable for the given class was used at the
+  /// Note that the vtable for the given class was used at the
   /// given location.
   void MarkVTableUsed(SourceLocation Loc, CXXRecordDecl *Class,
                       bool DefinitionRequired = false);
 
-  /// \brief Mark the exception specifications of all virtual member functions
+  /// Mark the exception specifications of all virtual member functions
   /// in the given class as needed.
   void MarkVirtualMemberExceptionSpecsNeeded(SourceLocation Loc,
                                              const CXXRecordDecl *RD);
@@ -5773,7 +5839,7 @@
   void MarkVirtualMembersReferenced(SourceLocation Loc,
                                     const CXXRecordDecl *RD);
 
-  /// \brief Define all of the vtables that have been used in this
+  /// Define all of the vtables that have been used in this
   /// translation unit and reference any virtual members used by those
   /// vtables.
   ///
@@ -5787,10 +5853,11 @@
                             ArrayRef<CXXCtorInitializer*> MemInits,
                             bool AnyErrors);
 
-  /// \brief Check class-level dllimport/dllexport attribute. The caller must
+  /// Check class-level dllimport/dllexport attribute. The caller must
   /// ensure that referenceDLLExportedClassMethods is called some point later
   /// when all outer classes of Class are complete.
   void checkClassLevelDLLAttribute(CXXRecordDecl *Class);
+  void checkClassLevelCodeSegAttribute(CXXRecordDecl *Class);
 
   void referenceDLLExportedClassMethods();
 
@@ -5805,11 +5872,10 @@
   /// conditions that are needed for the attribute to have an effect.
   void checkIllFormedTrivialABIStruct(CXXRecordDecl &RD);
 
-  void ActOnFinishCXXMemberSpecification(Scope* S, SourceLocation RLoc,
-                                         Decl *TagDecl,
-                                         SourceLocation LBrac,
+  void ActOnFinishCXXMemberSpecification(Scope *S, SourceLocation RLoc,
+                                         Decl *TagDecl, SourceLocation LBrac,
                                          SourceLocation RBrac,
-                                         AttributeList *AttrList);
+                                         const ParsedAttributesView &AttrList);
   void ActOnFinishCXXMemberDecls();
   void ActOnFinishCXXNonNestedClass(Decl *D);
 
@@ -6003,7 +6069,7 @@
 
   void HandleDelayedAccessCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);
 
-  /// \brief When true, access checking violations are treated as SFINAE
+  /// When true, access checking violations are treated as SFINAE
   /// failures rather than hard errors.
   bool AccessCheckingSFINAE;
 
@@ -6046,14 +6112,15 @@
   bool hasAnyAcceptableTemplateNames(LookupResult &R,
                                      bool AllowFunctionTemplates = true);
 
-  void LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
+  bool LookupTemplateName(LookupResult &R, Scope *S, CXXScopeSpec &SS,
                           QualType ObjectType, bool EnteringContext,
-                          bool &MemberOfUnknownSpecialization);
+                          bool &MemberOfUnknownSpecialization,
+                          SourceLocation TemplateKWLoc = SourceLocation());
 
   TemplateNameKind isTemplateName(Scope *S,
                                   CXXScopeSpec &SS,
                                   bool hasTemplateKeyword,
-                                  UnqualifiedId &Name,
+                                  const UnqualifiedId &Name,
                                   ParsedType ObjectType,
                                   bool EnteringContext,
                                   TemplateTy &Template,
@@ -6121,7 +6188,7 @@
                              SourceLocation RAngleLoc,
                              Expr *RequiresClause);
 
-  /// \brief The context in which we are checking a template parameter list.
+  /// The context in which we are checking a template parameter list.
   enum TemplateParamListContext {
     TPC_ClassTemplate,
     TPC_VarTemplate,
@@ -6142,17 +6209,14 @@
       ArrayRef<TemplateParameterList *> ParamLists,
       bool IsFriend, bool &IsMemberSpecialization, bool &Invalid);
 
-  DeclResult CheckClassTemplate(Scope *S, unsigned TagSpec, TagUseKind TUK,
-                                SourceLocation KWLoc, CXXScopeSpec &SS,
-                                IdentifierInfo *Name, SourceLocation NameLoc,
-                                AttributeList *Attr,
-                                TemplateParameterList *TemplateParams,
-                                AccessSpecifier AS,
-                                SourceLocation ModulePrivateLoc,
-                                SourceLocation FriendLoc,
-                                unsigned NumOuterTemplateParamLists,
-                            TemplateParameterList **OuterTemplateParamLists,
-                                SkipBodyInfo *SkipBody = nullptr);
+  DeclResult CheckClassTemplate(
+      Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
+      CXXScopeSpec &SS, IdentifierInfo *Name, SourceLocation NameLoc,
+      const ParsedAttributesView &Attr, TemplateParameterList *TemplateParams,
+      AccessSpecifier AS, SourceLocation ModulePrivateLoc,
+      SourceLocation FriendLoc, unsigned NumOuterTemplateParamLists,
+      TemplateParameterList **OuterTemplateParamLists,
+      SkipBodyInfo *SkipBody = nullptr);
 
   TemplateArgumentLoc getTrivialTemplateArgumentLoc(const TemplateArgument &Arg,
                                                     QualType NTTPType,
@@ -6179,7 +6243,7 @@
                       bool IsCtorOrDtorName = false,
                       bool IsClassName = false);
 
-  /// \brief Parsed an elaborated-type-specifier that refers to a template-id,
+  /// Parsed an elaborated-type-specifier that refers to a template-id,
   /// such as \c class T::template apply<U>.
   TypeResult ActOnTagTemplateIdType(TagUseKind TUK,
                                     TypeSpecifierType TagSpec,
@@ -6208,6 +6272,8 @@
                                 SourceLocation TemplateLoc,
                                 const TemplateArgumentListInfo *TemplateArgs);
 
+  void diagnoseMissingTemplateArguments(TemplateName Name, SourceLocation Loc);
+
   ExprResult BuildTemplateIdExpr(const CXXScopeSpec &SS,
                                  SourceLocation TemplateKWLoc,
                                  LookupResult &R,
@@ -6221,17 +6287,15 @@
 
   TemplateNameKind ActOnDependentTemplateName(
       Scope *S, CXXScopeSpec &SS, SourceLocation TemplateKWLoc,
-      UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext,
+      const UnqualifiedId &Name, ParsedType ObjectType, bool EnteringContext,
       TemplateTy &Template, bool AllowInjectedClassName = false);
 
-  DeclResult
-  ActOnClassTemplateSpecialization(Scope *S, unsigned TagSpec, TagUseKind TUK,
-                                   SourceLocation KWLoc,
-                                   SourceLocation ModulePrivateLoc,
-                                   TemplateIdAnnotation &TemplateId,
-                                   AttributeList *Attr,
-                                 MultiTemplateParamsArg TemplateParameterLists,
-                                   SkipBodyInfo *SkipBody = nullptr);
+  DeclResult ActOnClassTemplateSpecialization(
+      Scope *S, unsigned TagSpec, TagUseKind TUK, SourceLocation KWLoc,
+      SourceLocation ModulePrivateLoc, TemplateIdAnnotation &TemplateId,
+      const ParsedAttributesView &Attr,
+      MultiTemplateParamsArg TemplateParameterLists,
+      SkipBodyInfo *SkipBody = nullptr);
 
   bool CheckTemplatePartialSpecializationArgs(SourceLocation Loc,
                                               TemplateDecl *PrimaryTemplate,
@@ -6264,30 +6328,19 @@
   bool CheckMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
   void CompleteMemberSpecialization(NamedDecl *Member, LookupResult &Previous);
 
-  DeclResult
-  ActOnExplicitInstantiation(Scope *S,
-                             SourceLocation ExternLoc,
-                             SourceLocation TemplateLoc,
-                             unsigned TagSpec,
-                             SourceLocation KWLoc,
-                             const CXXScopeSpec &SS,
-                             TemplateTy Template,
-                             SourceLocation TemplateNameLoc,
-                             SourceLocation LAngleLoc,
-                             ASTTemplateArgsPtr TemplateArgs,
-                             SourceLocation RAngleLoc,
-                             AttributeList *Attr);
+  DeclResult ActOnExplicitInstantiation(
+      Scope *S, SourceLocation ExternLoc, SourceLocation TemplateLoc,
+      unsigned TagSpec, SourceLocation KWLoc, const CXXScopeSpec &SS,
+      TemplateTy Template, SourceLocation TemplateNameLoc,
+      SourceLocation LAngleLoc, ASTTemplateArgsPtr TemplateArgs,
+      SourceLocation RAngleLoc, const ParsedAttributesView &Attr);
 
-  DeclResult
-  ActOnExplicitInstantiation(Scope *S,
-                             SourceLocation ExternLoc,
-                             SourceLocation TemplateLoc,
-                             unsigned TagSpec,
-                             SourceLocation KWLoc,
-                             CXXScopeSpec &SS,
-                             IdentifierInfo *Name,
-                             SourceLocation NameLoc,
-                             AttributeList *Attr);
+  DeclResult ActOnExplicitInstantiation(Scope *S, SourceLocation ExternLoc,
+                                        SourceLocation TemplateLoc,
+                                        unsigned TagSpec, SourceLocation KWLoc,
+                                        CXXScopeSpec &SS, IdentifierInfo *Name,
+                                        SourceLocation NameLoc,
+                                        const ParsedAttributesView &Attr);
 
   DeclResult ActOnExplicitInstantiation(Scope *S,
                                         SourceLocation ExternLoc,
@@ -6303,18 +6356,18 @@
                                             &Converted,
                                           bool &HasDefaultArg);
 
-  /// \brief Specifies the context in which a particular template
+  /// Specifies the context in which a particular template
   /// argument is being checked.
   enum CheckTemplateArgumentKind {
-    /// \brief The template argument was specified in the code or was
+    /// The template argument was specified in the code or was
     /// instantiated with some deduced template arguments.
     CTAK_Specified,
 
-    /// \brief The template argument was deduced via template argument
+    /// The template argument was deduced via template argument
     /// deduction.
     CTAK_Deduced,
 
-    /// \brief The template argument was deduced from an array bound
+    /// The template argument was deduced from an array bound
     /// via template argument deduction.
     CTAK_DeducedFromArrayBound
   };
@@ -6328,7 +6381,7 @@
                            SmallVectorImpl<TemplateArgument> &Converted,
                              CheckTemplateArgumentKind CTAK = CTAK_Specified);
 
-  /// \brief Check that the given template arguments can be be provided to
+  /// Check that the given template arguments can be be provided to
   /// the given template, converting the arguments along the way.
   ///
   /// \param Template The template to which the template arguments are being
@@ -6381,10 +6434,10 @@
   BuildExpressionFromIntegralTemplateArgument(const TemplateArgument &Arg,
                                               SourceLocation Loc);
 
-  /// \brief Enumeration describing how template parameter lists are compared
+  /// Enumeration describing how template parameter lists are compared
   /// for equality.
   enum TemplateParameterListEqualKind {
-    /// \brief We are matching the template parameter lists of two templates
+    /// We are matching the template parameter lists of two templates
     /// that might be redeclarations.
     ///
     /// \code
@@ -6393,7 +6446,7 @@
     /// \endcode
     TPL_TemplateMatch,
 
-    /// \brief We are matching the template parameter lists of two template
+    /// We are matching the template parameter lists of two template
     /// template parameters as part of matching the template parameter lists
     /// of two templates that might be redeclarations.
     ///
@@ -6403,7 +6456,7 @@
     /// \endcode
     TPL_TemplateTemplateParmMatch,
 
-    /// \brief We are matching the template parameter lists of a template
+    /// We are matching the template parameter lists of a template
     /// template argument against the template parameter lists of a template
     /// template parameter.
     ///
@@ -6424,7 +6477,7 @@
 
   bool CheckTemplateDeclScope(Scope *S, TemplateParameterList *TemplateParams);
 
-  /// \brief Called when the parser has parsed a C++ typename
+  /// Called when the parser has parsed a C++ typename
   /// specifier, e.g., "typename T::type".
   ///
   /// \param S The scope in which this typename type occurs.
@@ -6437,7 +6490,7 @@
                     const CXXScopeSpec &SS, const IdentifierInfo &II,
                     SourceLocation IdLoc);
 
-  /// \brief Called when the parser has parsed a C++ typename
+  /// Called when the parser has parsed a C++ typename
   /// specifier that ends in a template-id, e.g.,
   /// "typename MetaFun::template apply<T1, T2>".
   ///
@@ -6494,74 +6547,74 @@
   /// location. Useful for error recovery.
   bool isUnexpandedParameterPackPermitted();
 
-  /// \brief The context in which an unexpanded parameter pack is
+  /// The context in which an unexpanded parameter pack is
   /// being diagnosed.
   ///
   /// Note that the values of this enumeration line up with the first
   /// argument to the \c err_unexpanded_parameter_pack diagnostic.
   enum UnexpandedParameterPackContext {
-    /// \brief An arbitrary expression.
+    /// An arbitrary expression.
     UPPC_Expression = 0,
 
-    /// \brief The base type of a class type.
+    /// The base type of a class type.
     UPPC_BaseType,
 
-    /// \brief The type of an arbitrary declaration.
+    /// The type of an arbitrary declaration.
     UPPC_DeclarationType,
 
-    /// \brief The type of a data member.
+    /// The type of a data member.
     UPPC_DataMemberType,
 
-    /// \brief The size of a bit-field.
+    /// The size of a bit-field.
     UPPC_BitFieldWidth,
 
-    /// \brief The expression in a static assertion.
+    /// The expression in a static assertion.
     UPPC_StaticAssertExpression,
 
-    /// \brief The fixed underlying type of an enumeration.
+    /// The fixed underlying type of an enumeration.
     UPPC_FixedUnderlyingType,
 
-    /// \brief The enumerator value.
+    /// The enumerator value.
     UPPC_EnumeratorValue,
 
-    /// \brief A using declaration.
+    /// A using declaration.
     UPPC_UsingDeclaration,
 
-    /// \brief A friend declaration.
+    /// A friend declaration.
     UPPC_FriendDeclaration,
 
-    /// \brief A declaration qualifier.
+    /// A declaration qualifier.
     UPPC_DeclarationQualifier,
 
-    /// \brief An initializer.
+    /// An initializer.
     UPPC_Initializer,
 
-    /// \brief A default argument.
+    /// A default argument.
     UPPC_DefaultArgument,
 
-    /// \brief The type of a non-type template parameter.
+    /// The type of a non-type template parameter.
     UPPC_NonTypeTemplateParameterType,
 
-    /// \brief The type of an exception.
+    /// The type of an exception.
     UPPC_ExceptionType,
 
-    /// \brief Partial specialization.
+    /// Partial specialization.
     UPPC_PartialSpecialization,
 
-    /// \brief Microsoft __if_exists.
+    /// Microsoft __if_exists.
     UPPC_IfExists,
 
-    /// \brief Microsoft __if_not_exists.
+    /// Microsoft __if_not_exists.
     UPPC_IfNotExists,
 
-    /// \brief Lambda expression.
+    /// Lambda expression.
     UPPC_Lambda,
 
-    /// \brief Block expression,
+    /// Block expression,
     UPPC_Block
   };
 
-  /// \brief Diagnose unexpanded parameter packs.
+  /// Diagnose unexpanded parameter packs.
   ///
   /// \param Loc The location at which we should emit the diagnostic.
   ///
@@ -6575,7 +6628,7 @@
                                         UnexpandedParameterPackContext UPPC,
                                   ArrayRef<UnexpandedParameterPack> Unexpanded);
 
-  /// \brief If the given type contains an unexpanded parameter pack,
+  /// If the given type contains an unexpanded parameter pack,
   /// diagnose the error.
   ///
   /// \param Loc The source location where a diagnostc should be emitted.
@@ -6587,7 +6640,7 @@
   bool DiagnoseUnexpandedParameterPack(SourceLocation Loc, TypeSourceInfo *T,
                                        UnexpandedParameterPackContext UPPC);
 
-  /// \brief If the given expression contains an unexpanded parameter
+  /// If the given expression contains an unexpanded parameter
   /// pack, diagnose the error.
   ///
   /// \param E The expression that is being checked for unexpanded
@@ -6597,7 +6650,7 @@
   bool DiagnoseUnexpandedParameterPack(Expr *E,
                        UnexpandedParameterPackContext UPPC = UPPC_Expression);
 
-  /// \brief If the given nested-name-specifier contains an unexpanded
+  /// If the given nested-name-specifier contains an unexpanded
   /// parameter pack, diagnose the error.
   ///
   /// \param SS The nested-name-specifier that is being checked for
@@ -6607,7 +6660,7 @@
   bool DiagnoseUnexpandedParameterPack(const CXXScopeSpec &SS,
                                        UnexpandedParameterPackContext UPPC);
 
-  /// \brief If the given name contains an unexpanded parameter pack,
+  /// If the given name contains an unexpanded parameter pack,
   /// diagnose the error.
   ///
   /// \param NameInfo The name (with source location information) that
@@ -6617,7 +6670,7 @@
   bool DiagnoseUnexpandedParameterPack(const DeclarationNameInfo &NameInfo,
                                        UnexpandedParameterPackContext UPPC);
 
-  /// \brief If the given template name contains an unexpanded parameter pack,
+  /// If the given template name contains an unexpanded parameter pack,
   /// diagnose the error.
   ///
   /// \param Loc The location of the template name.
@@ -6630,7 +6683,7 @@
                                        TemplateName Template,
                                        UnexpandedParameterPackContext UPPC);
 
-  /// \brief If the given template argument contains an unexpanded parameter
+  /// If the given template argument contains an unexpanded parameter
   /// pack, diagnose the error.
   ///
   /// \param Arg The template argument that is being checked for unexpanded
@@ -6640,7 +6693,7 @@
   bool DiagnoseUnexpandedParameterPack(TemplateArgumentLoc Arg,
                                        UnexpandedParameterPackContext UPPC);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// template argument.
   ///
   /// \param Arg The template argument that will be traversed to find
@@ -6648,7 +6701,7 @@
   void collectUnexpandedParameterPacks(TemplateArgument Arg,
                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// template argument.
   ///
   /// \param Arg The template argument that will be traversed to find
@@ -6656,7 +6709,7 @@
   void collectUnexpandedParameterPacks(TemplateArgumentLoc Arg,
                     SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// type.
   ///
   /// \param T The type that will be traversed to find
@@ -6664,7 +6717,7 @@
   void collectUnexpandedParameterPacks(QualType T,
                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// type.
   ///
   /// \param TL The type that will be traversed to find
@@ -6672,7 +6725,7 @@
   void collectUnexpandedParameterPacks(TypeLoc TL,
                    SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// nested-name-specifier.
   ///
   /// \param NNS The nested-name-specifier that will be traversed to find
@@ -6680,7 +6733,7 @@
   void collectUnexpandedParameterPacks(NestedNameSpecifierLoc NNS,
                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Collect the set of unexpanded parameter packs within the given
+  /// Collect the set of unexpanded parameter packs within the given
   /// name.
   ///
   /// \param NameInfo The name that will be traversed to find
@@ -6688,7 +6741,7 @@
   void collectUnexpandedParameterPacks(const DeclarationNameInfo &NameInfo,
                          SmallVectorImpl<UnexpandedParameterPack> &Unexpanded);
 
-  /// \brief Invoked when parsing a template argument followed by an
+  /// Invoked when parsing a template argument followed by an
   /// ellipsis, which creates a pack expansion.
   ///
   /// \param Arg The template argument preceding the ellipsis, which
@@ -6698,7 +6751,7 @@
   ParsedTemplateArgument ActOnPackExpansion(const ParsedTemplateArgument &Arg,
                                             SourceLocation EllipsisLoc);
 
-  /// \brief Invoked when parsing a type followed by an ellipsis, which
+  /// Invoked when parsing a type followed by an ellipsis, which
   /// creates a pack expansion.
   ///
   /// \param Type The type preceding the ellipsis, which will become
@@ -6707,20 +6760,20 @@
   /// \param EllipsisLoc The location of the ellipsis.
   TypeResult ActOnPackExpansion(ParsedType Type, SourceLocation EllipsisLoc);
 
-  /// \brief Construct a pack expansion type from the pattern of the pack
+  /// Construct a pack expansion type from the pattern of the pack
   /// expansion.
   TypeSourceInfo *CheckPackExpansion(TypeSourceInfo *Pattern,
                                      SourceLocation EllipsisLoc,
                                      Optional<unsigned> NumExpansions);
 
-  /// \brief Construct a pack expansion type from the pattern of the pack
+  /// Construct a pack expansion type from the pattern of the pack
   /// expansion.
   QualType CheckPackExpansion(QualType Pattern,
                               SourceRange PatternRange,
                               SourceLocation EllipsisLoc,
                               Optional<unsigned> NumExpansions);
 
-  /// \brief Invoked when parsing an expression followed by an ellipsis, which
+  /// Invoked when parsing an expression followed by an ellipsis, which
   /// creates a pack expansion.
   ///
   /// \param Pattern The expression preceding the ellipsis, which will become
@@ -6729,7 +6782,7 @@
   /// \param EllipsisLoc The location of the ellipsis.
   ExprResult ActOnPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc);
 
-  /// \brief Invoked when parsing an expression followed by an ellipsis, which
+  /// Invoked when parsing an expression followed by an ellipsis, which
   /// creates a pack expansion.
   ///
   /// \param Pattern The expression preceding the ellipsis, which will become
@@ -6739,7 +6792,7 @@
   ExprResult CheckPackExpansion(Expr *Pattern, SourceLocation EllipsisLoc,
                                 Optional<unsigned> NumExpansions);
 
-  /// \brief Determine whether we could expand a pack expansion with the
+  /// Determine whether we could expand a pack expansion with the
   /// given set of parameter packs into separate arguments by repeatedly
   /// transforming the pattern.
   ///
@@ -6781,7 +6834,7 @@
                                        bool &RetainExpansion,
                                        Optional<unsigned> &NumExpansions);
 
-  /// \brief Determine the number of arguments in the given pack expansion
+  /// Determine the number of arguments in the given pack expansion
   /// type.
   ///
   /// This routine assumes that the number of arguments in the expansion is
@@ -6791,7 +6844,7 @@
   Optional<unsigned> getNumArgumentsInExpansion(QualType T,
       const MultiLevelTemplateArgumentList &TemplateArgs);
 
-  /// \brief Determine whether the given declarator contains any unexpanded
+  /// Determine whether the given declarator contains any unexpanded
   /// parameter packs.
   ///
   /// This routine is used by the parser to disambiguate function declarators
@@ -6808,7 +6861,7 @@
   /// false otherwise.
   bool containsUnexpandedParameterPacks(Declarator &D);
 
-  /// \brief Returns the pattern of the pack expansion for a template argument.
+  /// Returns the pattern of the pack expansion for a template argument.
   ///
   /// \param OrigLoc The template argument to expand.
   ///
@@ -6840,7 +6893,7 @@
   QualType adjustCCAndNoReturn(QualType ArgFunctionType, QualType FunctionType,
                                bool AdjustExceptionSpec = false);
 
-  /// \brief Describes the result of template argument deduction.
+  /// Describes the result of template argument deduction.
   ///
   /// The TemplateDeductionResult enumeration describes the result of
   /// template argument deduction, as returned from
@@ -6850,51 +6903,54 @@
   /// list (if successful) or the specific template parameters or
   /// deduced arguments that were involved in the failure.
   enum TemplateDeductionResult {
-    /// \brief Template argument deduction was successful.
+    /// Template argument deduction was successful.
     TDK_Success = 0,
-    /// \brief The declaration was invalid; do nothing.
+    /// The declaration was invalid; do nothing.
     TDK_Invalid,
-    /// \brief Template argument deduction exceeded the maximum template
+    /// Template argument deduction exceeded the maximum template
     /// instantiation depth (which has already been diagnosed).
     TDK_InstantiationDepth,
-    /// \brief Template argument deduction did not deduce a value
+    /// Template argument deduction did not deduce a value
     /// for every template parameter.
     TDK_Incomplete,
-    /// \brief Template argument deduction produced inconsistent
+    /// Template argument deduction did not deduce a value for every
+    /// expansion of an expanded template parameter pack.
+    TDK_IncompletePack,
+    /// Template argument deduction produced inconsistent
     /// deduced values for the given template parameter.
     TDK_Inconsistent,
-    /// \brief Template argument deduction failed due to inconsistent
+    /// Template argument deduction failed due to inconsistent
     /// cv-qualifiers on a template parameter type that would
     /// otherwise be deduced, e.g., we tried to deduce T in "const T"
     /// but were given a non-const "X".
     TDK_Underqualified,
-    /// \brief Substitution of the deduced template argument values
+    /// Substitution of the deduced template argument values
     /// resulted in an error.
     TDK_SubstitutionFailure,
-    /// \brief After substituting deduced template arguments, a dependent
+    /// After substituting deduced template arguments, a dependent
     /// parameter type did not match the corresponding argument.
     TDK_DeducedMismatch,
-    /// \brief After substituting deduced template arguments, an element of
+    /// After substituting deduced template arguments, an element of
     /// a dependent parameter type did not match the corresponding element
     /// of the corresponding argument (when deducing from an initializer list).
     TDK_DeducedMismatchNested,
-    /// \brief A non-depnedent component of the parameter did not match the
+    /// A non-depnedent component of the parameter did not match the
     /// corresponding component of the argument.
     TDK_NonDeducedMismatch,
-    /// \brief When performing template argument deduction for a function
+    /// When performing template argument deduction for a function
     /// template, there were too many call arguments.
     TDK_TooManyArguments,
-    /// \brief When performing template argument deduction for a function
+    /// When performing template argument deduction for a function
     /// template, there were too few call arguments.
     TDK_TooFewArguments,
-    /// \brief The explicitly-specified template arguments were not valid
+    /// The explicitly-specified template arguments were not valid
     /// template arguments for the given template.
     TDK_InvalidExplicitArguments,
-    /// \brief Checking non-dependent argument conversions failed.
+    /// Checking non-dependent argument conversions failed.
     TDK_NonDependentConversionFailure,
-    /// \brief Deduction failed; that's all we know.
+    /// Deduction failed; that's all we know.
     TDK_MiscellaneousDeductionFailure,
-    /// \brief CUDA Target attributes do not match.
+    /// CUDA Target attributes do not match.
     TDK_CUDATargetMismatch
   };
 
@@ -6967,16 +7023,16 @@
                           sema::TemplateDeductionInfo &Info,
                           bool IsAddressOfFunction = false);
 
-  /// \brief Substitute Replacement for \p auto in \p TypeWithAuto
+  /// Substitute Replacement for \p auto in \p TypeWithAuto
   QualType SubstAutoType(QualType TypeWithAuto, QualType Replacement);
-  /// \brief Substitute Replacement for auto in TypeWithAuto
+  /// Substitute Replacement for auto in TypeWithAuto
   TypeSourceInfo* SubstAutoTypeSourceInfo(TypeSourceInfo *TypeWithAuto,
                                           QualType Replacement);
-  /// \brief Completely replace the \c auto in \p TypeWithAuto by
+  /// Completely replace the \c auto in \p TypeWithAuto by
   /// \p Replacement. This does not retain any \c auto type sugar.
   QualType ReplaceAutoType(QualType TypeWithAuto, QualType Replacement);
 
-  /// \brief Result type of DeduceAutoType.
+  /// Result type of DeduceAutoType.
   enum DeduceAutoResult {
     DAR_Succeeded,
     DAR_Failed,
@@ -6993,7 +7049,7 @@
   bool DeduceReturnType(FunctionDecl *FD, SourceLocation Loc,
                         bool Diagnose = true);
 
-  /// \brief Declare implicit deduction guides for a class template if we've
+  /// Declare implicit deduction guides for a class template if we've
   /// not already done so.
   void DeclareImplicitDeductionGuides(TemplateDecl *Template,
                                       SourceLocation Loc);
@@ -7074,7 +7130,7 @@
   /// alone is not sufficient to identify the context). This covers template
   /// instantiation and various forms of implicitly-generated functions.
   struct CodeSynthesisContext {
-    /// \brief The kind of template instantiation we are performing
+    /// The kind of template instantiation we are performing
     enum SynthesisKind {
       /// We are instantiating a template declaration. The entity is
       /// the declaration we're instantiating (e.g., a CXXRecordDecl).
@@ -7130,31 +7186,31 @@
       Memoization
     } Kind;
 
-    /// \brief Was the enclosing context a non-instantiation SFINAE context?
+    /// Was the enclosing context a non-instantiation SFINAE context?
     bool SavedInNonInstantiationSFINAEContext;
 
-    /// \brief The point of instantiation or synthesis within the source code.
+    /// The point of instantiation or synthesis within the source code.
     SourceLocation PointOfInstantiation;
 
-    /// \brief The entity that is being synthesized.
+    /// The entity that is being synthesized.
     Decl *Entity;
 
-    /// \brief The template (or partial specialization) in which we are
+    /// The template (or partial specialization) in which we are
     /// performing the instantiation, for substitutions of prior template
     /// arguments.
     NamedDecl *Template;
 
-    /// \brief The list of template arguments we are substituting, if they
+    /// The list of template arguments we are substituting, if they
     /// are not part of the entity.
     const TemplateArgument *TemplateArgs;
 
     // FIXME: Wrap this union around more members, or perhaps store the
     // kind-specific members in the RAII object owning the context.
     union {
-      /// \brief The number of template arguments in TemplateArgs.
+      /// The number of template arguments in TemplateArgs.
       unsigned NumTemplateArgs;
 
-      /// \brief The special member being declared or defined.
+      /// The special member being declared or defined.
       CXXSpecialMember SpecialMember;
     };
 
@@ -7163,11 +7219,11 @@
       return {TemplateArgs, NumTemplateArgs};
     }
 
-    /// \brief The template deduction info object associated with the
+    /// The template deduction info object associated with the
     /// substitution or checking of explicit or deduced template arguments.
     sema::TemplateDeductionInfo *DeductionInfo;
 
-    /// \brief The source range that covers the construct that cause
+    /// The source range that covers the construct that cause
     /// the instantiation, e.g., the template-id that causes a class
     /// template instantiation.
     SourceRange InstantiationRange;
@@ -7176,12 +7232,12 @@
       : Kind(TemplateInstantiation), Entity(nullptr), Template(nullptr),
         TemplateArgs(nullptr), NumTemplateArgs(0), DeductionInfo(nullptr) {}
 
-    /// \brief Determines whether this template is an actual instantiation
+    /// Determines whether this template is an actual instantiation
     /// that should be counted toward the maximum instantiation depth.
     bool isInstantiationRecord() const;
   };
 
-  /// \brief List of active code synthesis contexts.
+  /// List of active code synthesis contexts.
   ///
   /// This vector is treated as a stack. As synthesis of one entity requires
   /// synthesis of another, additional contexts are pushed onto the stack.
@@ -7194,32 +7250,32 @@
   /// by some template instantiation.
   llvm::DenseSet<QualType> InstantiatedNonDependentTypes;
 
-  /// \brief Extra modules inspected when performing a lookup during a template
+  /// Extra modules inspected when performing a lookup during a template
   /// instantiation. Computed lazily.
   SmallVector<Module*, 16> CodeSynthesisContextLookupModules;
 
-  /// \brief Cache of additional modules that should be used for name lookup
+  /// Cache of additional modules that should be used for name lookup
   /// within the current template instantiation. Computed lazily; use
   /// getLookupModules() to get a complete set.
   llvm::DenseSet<Module*> LookupModulesCache;
 
-  /// \brief Get the set of additional modules that should be checked during
+  /// Get the set of additional modules that should be checked during
   /// name lookup. A module and its imports become visible when instanting a
   /// template defined within it.
   llvm::DenseSet<Module*> &getLookupModules();
 
-  /// \brief Map from the most recent declaration of a namespace to the most
+  /// Map from the most recent declaration of a namespace to the most
   /// recent visible declaration of that namespace.
   llvm::DenseMap<NamedDecl*, NamedDecl*> VisibleNamespaceCache;
 
-  /// \brief Whether we are in a SFINAE context that is not associated with
+  /// Whether we are in a SFINAE context that is not associated with
   /// template instantiation.
   ///
   /// This is used when setting up a SFINAE trap (\c see SFINAETrap) outside
   /// of a template instantiation or template argument deduction.
   bool InNonInstantiationSFINAEContext;
 
-  /// \brief The number of \p CodeSynthesisContexts that are not template
+  /// The number of \p CodeSynthesisContexts that are not template
   /// instantiations and, therefore, should not be counted as part of the
   /// instantiation depth.
   ///
@@ -7228,7 +7284,7 @@
   // FIXME: Should we have a similar limit for other forms of synthesis?
   unsigned NonInstantiationEntries;
 
-  /// \brief The depth of the context stack at the point when the most recent
+  /// The depth of the context stack at the point when the most recent
   /// error or warning was produced.
   ///
   /// This value is used to suppress printing of redundant context stacks
@@ -7236,7 +7292,7 @@
   // FIXME: Does this belong in Sema? It's tough to implement it anywhere else.
   unsigned LastEmittedCodeSynthesisContextDepth = 0;
 
-  /// \brief The template instantiation callbacks to trace or track
+  /// The template instantiation callbacks to trace or track
   /// instantiations (objects can be chained).
   ///
   /// This callbacks is used to print, trace or track template
@@ -7244,7 +7300,7 @@
   std::vector<std::unique_ptr<TemplateInstantiationCallback>>
       TemplateInstCallbacks;
 
-  /// \brief The current index into pack expansion arguments that will be
+  /// The current index into pack expansion arguments that will be
   /// used for substitution of parameter packs.
   ///
   /// The pack expansion index will be -1 to indicate that parameter packs
@@ -7252,7 +7308,7 @@
   /// which argument within the parameter pack will be used for substitution.
   int ArgumentPackSubstitutionIndex;
 
-  /// \brief RAII object used to change the argument pack substitution index
+  /// RAII object used to change the argument pack substitution index
   /// within a \c Sema object.
   ///
   /// See \c ArgumentPackSubstitutionIndex for more information.
@@ -7273,7 +7329,7 @@
 
   friend class ArgumentPackSubstitutionRAII;
 
-  /// \brief For each declaration that involved template argument deduction, the
+  /// For each declaration that involved template argument deduction, the
   /// set of diagnostics that were suppressed during that template argument
   /// deduction.
   ///
@@ -7282,7 +7338,7 @@
     SuppressedDiagnosticsMap;
   SuppressedDiagnosticsMap SuppressedDiagnostics;
 
-  /// \brief A stack object to be created when performing template
+  /// A stack object to be created when performing template
   /// instantiation.
   ///
   /// Construction of an object of type \c InstantiatingTemplate
@@ -7294,7 +7350,7 @@
   /// Destruction of this object will pop the named instantiation off
   /// the stack.
   struct InstantiatingTemplate {
-    /// \brief Note that we are instantiating a class template,
+    /// Note that we are instantiating a class template,
     /// function template, variable template, alias template,
     /// or a member thereof.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
@@ -7302,20 +7358,20 @@
                           SourceRange InstantiationRange = SourceRange());
 
     struct ExceptionSpecification {};
-    /// \brief Note that we are instantiating an exception specification
+    /// Note that we are instantiating an exception specification
     /// of a function template.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           FunctionDecl *Entity, ExceptionSpecification,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are instantiating a default argument in a
+    /// Note that we are instantiating a default argument in a
     /// template-id.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           TemplateParameter Param, TemplateDecl *Template,
                           ArrayRef<TemplateArgument> TemplateArgs,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are substituting either explicitly-specified or
+    /// Note that we are substituting either explicitly-specified or
     /// deduced template arguments during function template argument deduction.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           FunctionTemplateDecl *FunctionTemplate,
@@ -7324,7 +7380,7 @@
                           sema::TemplateDeductionInfo &DeductionInfo,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are instantiating as part of template
+    /// Note that we are instantiating as part of template
     /// argument deduction for a class template declaration.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           TemplateDecl *Template,
@@ -7332,7 +7388,7 @@
                           sema::TemplateDeductionInfo &DeductionInfo,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are instantiating as part of template
+    /// Note that we are instantiating as part of template
     /// argument deduction for a class template partial
     /// specialization.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
@@ -7341,7 +7397,7 @@
                           sema::TemplateDeductionInfo &DeductionInfo,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are instantiating as part of template
+    /// Note that we are instantiating as part of template
     /// argument deduction for a variable template partial
     /// specialization.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
@@ -7350,14 +7406,14 @@
                           sema::TemplateDeductionInfo &DeductionInfo,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are instantiating a default argument for a function
+    /// Note that we are instantiating a default argument for a function
     /// parameter.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           ParmVarDecl *Param,
                           ArrayRef<TemplateArgument> TemplateArgs,
                           SourceRange InstantiationRange = SourceRange());
 
-    /// \brief Note that we are substituting prior template arguments into a
+    /// Note that we are substituting prior template arguments into a
     /// non-type parameter.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           NamedDecl *Template,
@@ -7365,7 +7421,7 @@
                           ArrayRef<TemplateArgument> TemplateArgs,
                           SourceRange InstantiationRange);
 
-    /// \brief Note that we are substituting prior template arguments into a
+    /// Note that we are substituting prior template arguments into a
     /// template template parameter.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           NamedDecl *Template,
@@ -7373,7 +7429,7 @@
                           ArrayRef<TemplateArgument> TemplateArgs,
                           SourceRange InstantiationRange);
 
-    /// \brief Note that we are checking the default template argument
+    /// Note that we are checking the default template argument
     /// against the template parameter for a given template-id.
     InstantiatingTemplate(Sema &SemaRef, SourceLocation PointOfInstantiation,
                           TemplateDecl *Template,
@@ -7382,16 +7438,16 @@
                           SourceRange InstantiationRange);
 
 
-    /// \brief Note that we have finished instantiating this template.
+    /// Note that we have finished instantiating this template.
     void Clear();
 
     ~InstantiatingTemplate() { Clear(); }
 
-    /// \brief Determines whether we have exceeded the maximum
+    /// Determines whether we have exceeded the maximum
     /// recursive template instantiations.
     bool isInvalid() const { return Invalid; }
 
-    /// \brief Determine whether we are already instantiating this
+    /// Determine whether we are already instantiating this
     /// specialization in some surrounding active instantiation.
     bool isAlreadyInstantiating() const { return AlreadyInstantiating; }
 
@@ -7436,7 +7492,7 @@
 
   void PrintPragmaAttributeInstantiationPoint();
 
-  /// \brief Determines whether we are currently in a context where
+  /// Determines whether we are currently in a context where
   /// template argument substitution failures are not considered
   /// errors.
   ///
@@ -7446,7 +7502,7 @@
   /// diagnostics that will be suppressed.
   Optional<sema::TemplateDeductionInfo *> isSFINAEContext() const;
 
-  /// \brief Determines whether we are currently in a context that
+  /// Determines whether we are currently in a context that
   /// is not evaluated as per C++ [expr] p5.
   bool isUnevaluatedContext() const {
     assert(!ExprEvalContexts.empty() &&
@@ -7454,7 +7510,7 @@
     return ExprEvalContexts.back().isUnevaluated();
   }
 
-  /// \brief RAII class used to determine whether SFINAE has
+  /// RAII class used to determine whether SFINAE has
   /// trapped any errors that occur during template argument
   /// deduction.
   class SFINAETrap {
@@ -7487,13 +7543,13 @@
           PrevLastDiagnosticIgnored);
     }
 
-    /// \brief Determine whether any SFINAE errors have been trapped.
+    /// Determine whether any SFINAE errors have been trapped.
     bool hasErrorOccurred() const {
       return SemaRef.NumSFINAEErrors > PrevSFINAEErrors;
     }
   };
 
-  /// \brief RAII class used to indicate that we are performing provisional
+  /// RAII class used to indicate that we are performing provisional
   /// semantic analysis to determine the validity of a construct, so
   /// typo-correction and diagnostics in the immediate context (not within
   /// implicitly-instantiated templates) should be suppressed.
@@ -7513,30 +7569,30 @@
     }
   };
 
-  /// \brief The current instantiation scope used to store local
+  /// The current instantiation scope used to store local
   /// variables.
   LocalInstantiationScope *CurrentInstantiationScope;
 
-  /// \brief Tracks whether we are in a context where typo correction is
+  /// Tracks whether we are in a context where typo correction is
   /// disabled.
   bool DisableTypoCorrection;
 
-  /// \brief The number of typos corrected by CorrectTypo.
+  /// The number of typos corrected by CorrectTypo.
   unsigned TyposCorrected;
 
   typedef llvm::SmallSet<SourceLocation, 2> SrcLocSet;
   typedef llvm::DenseMap<IdentifierInfo *, SrcLocSet> IdentifierSourceLocations;
 
-  /// \brief A cache containing identifiers for which typo correction failed and
+  /// A cache containing identifiers for which typo correction failed and
   /// their locations, so that repeated attempts to correct an identifier in a
   /// given location are ignored if typo correction already failed for it.
   IdentifierSourceLocations TypoCorrectionFailures;
 
-  /// \brief Worker object for performing CFG-based warnings.
+  /// Worker object for performing CFG-based warnings.
   sema::AnalysisBasedWarnings AnalysisWarnings;
   threadSafety::BeforeSet *ThreadSafetyDeclCache;
 
-  /// \brief An entity for which implicit template instantiation is required.
+  /// An entity for which implicit template instantiation is required.
   ///
   /// The source location associated with the declaration is the first place in
   /// the source code where the declaration was "used". It is not necessarily
@@ -7546,7 +7602,7 @@
   /// because users will need to know what code triggered the instantiation.
   typedef std::pair<ValueDecl *, SourceLocation> PendingImplicitInstantiation;
 
-  /// \brief The queue of implicit template instantiations that are required
+  /// The queue of implicit template instantiations that are required
   /// but have not yet been performed.
   std::deque<PendingImplicitInstantiation> PendingInstantiations;
 
@@ -7592,7 +7648,7 @@
     bool Enabled;
   };
 
-  /// \brief The queue of implicit template instantiations that are required
+  /// The queue of implicit template instantiations that are required
   /// and must be performed within the current local scope.
   ///
   /// This queue is only used for member functions of local classes in
@@ -7691,7 +7747,7 @@
   ExprResult SubstExpr(Expr *E,
                        const MultiLevelTemplateArgumentList &TemplateArgs);
 
-  /// \brief Substitute the given template arguments into a list of
+  /// Substitute the given template arguments into a list of
   /// expressions, expanding pack expansions if required.
   ///
   /// \param Exprs The list of expressions to substitute into.
@@ -7872,20 +7928,14 @@
                                             SourceLocation rAngleLoc);
   void popObjCTypeParamList(Scope *S, ObjCTypeParamList *typeParamList);
 
-  Decl *ActOnStartClassInterface(Scope *S,
-                                 SourceLocation AtInterfaceLoc,
-                                 IdentifierInfo *ClassName,
-                                 SourceLocation ClassLoc,
-                                 ObjCTypeParamList *typeParamList,
-                                 IdentifierInfo *SuperName,
-                                 SourceLocation SuperLoc,
-                                 ArrayRef<ParsedType> SuperTypeArgs,
-                                 SourceRange SuperTypeArgsRange,
-                                 Decl * const *ProtoRefs,
-                                 unsigned NumProtoRefs,
-                                 const SourceLocation *ProtoLocs,
-                                 SourceLocation EndProtoLoc,
-                                 AttributeList *AttrList);
+  Decl *ActOnStartClassInterface(
+      Scope *S, SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName,
+      SourceLocation ClassLoc, ObjCTypeParamList *typeParamList,
+      IdentifierInfo *SuperName, SourceLocation SuperLoc,
+      ArrayRef<ParsedType> SuperTypeArgs, SourceRange SuperTypeArgsRange,
+      Decl *const *ProtoRefs, unsigned NumProtoRefs,
+      const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc,
+      const ParsedAttributesView &AttrList);
 
   void ActOnSuperClassOfClassInterface(Scope *S,
                                        SourceLocation AtInterfaceLoc,
@@ -7913,24 +7963,18 @@
     const ObjCList<ObjCProtocolDecl> &PList);
 
   Decl *ActOnStartProtocolInterface(
-                    SourceLocation AtProtoInterfaceLoc,
-                    IdentifierInfo *ProtocolName, SourceLocation ProtocolLoc,
-                    Decl * const *ProtoRefNames, unsigned NumProtoRefs,
-                    const SourceLocation *ProtoLocs,
-                    SourceLocation EndProtoLoc,
-                    AttributeList *AttrList);
+      SourceLocation AtProtoInterfaceLoc, IdentifierInfo *ProtocolName,
+      SourceLocation ProtocolLoc, Decl *const *ProtoRefNames,
+      unsigned NumProtoRefs, const SourceLocation *ProtoLocs,
+      SourceLocation EndProtoLoc, const ParsedAttributesView &AttrList);
 
-  Decl *ActOnStartCategoryInterface(SourceLocation AtInterfaceLoc,
-                                    IdentifierInfo *ClassName,
-                                    SourceLocation ClassLoc,
-                                    ObjCTypeParamList *typeParamList,
-                                    IdentifierInfo *CategoryName,
-                                    SourceLocation CategoryLoc,
-                                    Decl * const *ProtoRefs,
-                                    unsigned NumProtoRefs,
-                                    const SourceLocation *ProtoLocs,
-                                    SourceLocation EndProtoLoc,
-                                    AttributeList *AttrList);
+  Decl *ActOnStartCategoryInterface(
+      SourceLocation AtInterfaceLoc, IdentifierInfo *ClassName,
+      SourceLocation ClassLoc, ObjCTypeParamList *typeParamList,
+      IdentifierInfo *CategoryName, SourceLocation CategoryLoc,
+      Decl *const *ProtoRefs, unsigned NumProtoRefs,
+      const SourceLocation *ProtoLocs, SourceLocation EndProtoLoc,
+      const ParsedAttributesView &AttrList);
 
   Decl *ActOnStartClassImplementation(
                     SourceLocation AtClassImplLoc,
@@ -7953,9 +7997,10 @@
                    ArrayRef<ObjCTypeParamList *> TypeParamLists,
                    unsigned NumElts);
 
-  DeclGroupPtrTy ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc,
-                                        ArrayRef<IdentifierLocPair> IdentList,
-                                        AttributeList *attrList);
+  DeclGroupPtrTy
+  ActOnForwardProtocolDeclaration(SourceLocation AtProtoclLoc,
+                                  ArrayRef<IdentifierLocPair> IdentList,
+                                  const ParsedAttributesView &attrList);
 
   void FindProtocolDeclaration(bool WarnOnDeclarations, bool ForObjCContainer,
                                ArrayRef<IdentifierLocPair> ProtocolId,
@@ -8090,22 +8135,21 @@
     ObjCDeclSpec DeclSpec;
 
     /// ArgAttrs - Attribute list for this argument.
-    AttributeList *ArgAttrs;
+    ParsedAttributesView ArgAttrs;
   };
 
   Decl *ActOnMethodDeclaration(
-    Scope *S,
-    SourceLocation BeginLoc, // location of the + or -.
-    SourceLocation EndLoc,   // location of the ; or {.
-    tok::TokenKind MethodType,
-    ObjCDeclSpec &ReturnQT, ParsedType ReturnType,
-    ArrayRef<SourceLocation> SelectorLocs, Selector Sel,
-    // optional arguments. The number of types/arguments is obtained
-    // from the Sel.getNumArgs().
-    ObjCArgInfo *ArgInfo,
-    DeclaratorChunk::ParamInfo *CParamInfo, unsigned CNumArgs, // c-style args
-    AttributeList *AttrList, tok::ObjCKeywordKind MethodImplKind,
-    bool isVariadic, bool MethodDefinition);
+      Scope *S,
+      SourceLocation BeginLoc, // location of the + or -.
+      SourceLocation EndLoc,   // location of the ; or {.
+      tok::TokenKind MethodType, ObjCDeclSpec &ReturnQT, ParsedType ReturnType,
+      ArrayRef<SourceLocation> SelectorLocs, Selector Sel,
+      // optional arguments. The number of types/arguments is obtained
+      // from the Sel.getNumArgs().
+      ObjCArgInfo *ArgInfo, DeclaratorChunk::ParamInfo *CParamInfo,
+      unsigned CNumArgs, // c-style args
+      const ParsedAttributesView &AttrList, tok::ObjCKeywordKind MethodImplKind,
+      bool isVariadic, bool MethodDefinition);
 
   ObjCMethodDecl *LookupMethodInQualifiedType(Selector Sel,
                                               const ObjCObjectPointerType *OPT,
@@ -8133,14 +8177,14 @@
 
   ObjCMethodDecl *tryCaptureObjCSelf(SourceLocation Loc);
 
-  /// \brief Describes the kind of message expression indicated by a message
+  /// Describes the kind of message expression indicated by a message
   /// send that starts with an identifier.
   enum ObjCMessageKind {
-    /// \brief The message is sent to 'super'.
+    /// The message is sent to 'super'.
     ObjCSuperMessage,
-    /// \brief The message is an instance message.
+    /// The message is an instance message.
     ObjCInstanceMessage,
-    /// \brief The message is a class message, and the identifier is a type
+    /// The message is a class message, and the identifier is a type
     /// name.
     ObjCClassMessage
   };
@@ -8249,12 +8293,12 @@
 
   bool checkInitMethod(ObjCMethodDecl *method, QualType receiverTypeIfCall);
 
-  /// \brief Check whether the given new method is a valid override of the
+  /// Check whether the given new method is a valid override of the
   /// given overridden method, and set any properties that should be inherited.
   void CheckObjCMethodOverride(ObjCMethodDecl *NewMethod,
                                const ObjCMethodDecl *Overridden);
 
-  /// \brief Describes the compatibility of a result type with its method.
+  /// Describes the compatibility of a result type with its method.
   enum ResultTypeCompatibilityKind {
     RTC_Compatible,
     RTC_Incompatible,
@@ -8311,7 +8355,7 @@
       LangOptions::PragmaMSPointersToMembersKind Kind,
       SourceLocation PragmaLoc);
 
-  /// \brief Called on well formed \#pragma vtordisp().
+  /// Called on well formed \#pragma vtordisp().
   void ActOnPragmaMSVtorDisp(PragmaMsStackAction Action,
                              SourceLocation PragmaLoc,
                              MSVtorDispAttr::Mode Value);
@@ -8330,22 +8374,22 @@
                     int SectionFlags,
                     SourceLocation PragmaSectionLocation);
 
-  /// \brief Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
+  /// Called on well formed \#pragma bss_seg/data_seg/const_seg/code_seg.
   void ActOnPragmaMSSeg(SourceLocation PragmaLocation,
                         PragmaMsStackAction Action,
                         llvm::StringRef StackSlotLabel,
                         StringLiteral *SegmentName,
                         llvm::StringRef PragmaName);
 
-  /// \brief Called on well formed \#pragma section().
+  /// Called on well formed \#pragma section().
   void ActOnPragmaMSSection(SourceLocation PragmaLocation,
                             int SectionFlags, StringLiteral *SegmentName);
 
-  /// \brief Called on well-formed \#pragma init_seg().
+  /// Called on well-formed \#pragma init_seg().
   void ActOnPragmaMSInitSeg(SourceLocation PragmaLocation,
                             StringLiteral *SegmentName);
 
-  /// \brief Called on #pragma clang __debug dump II
+  /// Called on #pragma clang __debug dump II
   void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);
 
   /// ActOnPragmaDetectMismatch - Call on well-formed \#pragma detect_mismatch
@@ -8421,35 +8465,34 @@
   /// the appropriate attribute.
   void AddCFAuditedAttribute(Decl *D);
 
-  /// \brief Called on well-formed '\#pragma clang attribute push'.
-  void ActOnPragmaAttributePush(AttributeList &Attribute,
-                                SourceLocation PragmaLoc,
+  /// Called on well-formed '\#pragma clang attribute push'.
+  void ActOnPragmaAttributePush(ParsedAttr &Attribute, SourceLocation PragmaLoc,
                                 attr::ParsedSubjectMatchRuleSet Rules);
 
-  /// \brief Called on well-formed '\#pragma clang attribute pop'.
+  /// Called on well-formed '\#pragma clang attribute pop'.
   void ActOnPragmaAttributePop(SourceLocation PragmaLoc);
 
-  /// \brief Adds the attributes that have been specified using the
+  /// Adds the attributes that have been specified using the
   /// '\#pragma clang attribute push' directives to the given declaration.
   void AddPragmaAttributes(Scope *S, Decl *D);
 
   void DiagnoseUnterminatedPragmaAttribute();
 
-  /// \brief Called on well formed \#pragma clang optimize.
+  /// Called on well formed \#pragma clang optimize.
   void ActOnPragmaOptimize(bool On, SourceLocation PragmaLoc);
 
-  /// \brief Get the location for the currently active "\#pragma clang optimize
+  /// Get the location for the currently active "\#pragma clang optimize
   /// off". If this location is invalid, then the state of the pragma is "on".
   SourceLocation getOptimizeOffPragmaLocation() const {
     return OptimizeOffPragmaLocation;
   }
 
-  /// \brief Only called on function definitions; if there is a pragma in scope
+  /// Only called on function definitions; if there is a pragma in scope
   /// with the effect of a range-based optnone, consider marking the function
   /// with attribute optnone.
   void AddRangeBasedOptnone(FunctionDecl *FD);
 
-  /// \brief Adds the 'optnone' attribute to the function declaration if there
+  /// Adds the 'optnone' attribute to the function declaration if there
   /// are no conflicts; Loc represents the location causing the 'optnone'
   /// attribute to be added (usually because of a pragma).
   void AddOptnoneAttributeIfNoConflicts(FunctionDecl *FD, SourceLocation Loc);
@@ -8513,6 +8556,8 @@
   bool buildCoroutineParameterMoves(SourceLocation Loc);
   VarDecl *buildCoroutinePromise(SourceLocation Loc);
   void CheckCompletedCoroutineBody(FunctionDecl *FD, Stmt *&Body);
+  ClassTemplateDecl *lookupCoroutineTraits(SourceLocation KwLoc,
+                                           SourceLocation FuncLoc);
 
   //===--------------------------------------------------------------------===//
   // OpenCL extensions.
@@ -8531,36 +8576,36 @@
     CurrOpenCLExtension = Ext;
   }
 
-  /// \brief Set OpenCL extensions for a type which can only be used when these
+  /// Set OpenCL extensions for a type which can only be used when these
   /// OpenCL extensions are enabled. If \p Exts is empty, do nothing.
   /// \param Exts A space separated list of OpenCL extensions.
   void setOpenCLExtensionForType(QualType T, llvm::StringRef Exts);
 
-  /// \brief Set OpenCL extensions for a declaration which can only be
+  /// Set OpenCL extensions for a declaration which can only be
   /// used when these OpenCL extensions are enabled. If \p Exts is empty, do
   /// nothing.
   /// \param Exts A space separated list of OpenCL extensions.
   void setOpenCLExtensionForDecl(Decl *FD, llvm::StringRef Exts);
 
-  /// \brief Set current OpenCL extensions for a type which can only be used
+  /// Set current OpenCL extensions for a type which can only be used
   /// when these OpenCL extensions are enabled. If current OpenCL extension is
   /// empty, do nothing.
   void setCurrentOpenCLExtensionForType(QualType T);
 
-  /// \brief Set current OpenCL extensions for a declaration which
+  /// Set current OpenCL extensions for a declaration which
   /// can only be used when these OpenCL extensions are enabled. If current
   /// OpenCL extension is empty, do nothing.
   void setCurrentOpenCLExtensionForDecl(Decl *FD);
 
   bool isOpenCLDisabledDecl(Decl *FD);
 
-  /// \brief Check if type \p T corresponding to declaration specifier \p DS
+  /// Check if type \p T corresponding to declaration specifier \p DS
   /// is disabled due to required OpenCL extensions being disabled. If so,
   /// emit diagnostics.
   /// \return true if type is disabled.
   bool checkOpenCLDisabledTypeDeclSpec(const DeclSpec &DS, QualType T);
 
-  /// \brief Check if declaration \p D used by expression \p E
+  /// Check if declaration \p D used by expression \p E
   /// is disabled due to required OpenCL extensions being disabled. If so,
   /// emit diagnostics.
   /// \return true if type is disabled.
@@ -8573,7 +8618,7 @@
   void *VarDataSharingAttributesStack;
   /// Set to true inside '#pragma omp declare target' region.
   bool IsInOpenMPDeclareTargetContext = false;
-  /// \brief Initialization of data-sharing attributes stack.
+  /// Initialization of data-sharing attributes stack.
   void InitDataSharingAttributesStack();
   void DestroyDataSharingAttributesStack();
   ExprResult
@@ -8608,87 +8653,86 @@
                                      SourceRange SrcRange = SourceRange());
 
 public:
-  /// \brief Return true if the provided declaration \a VD should be captured by
+  /// Return true if the provided declaration \a VD should be captured by
   /// reference.
   /// \param Level Relative level of nested OpenMP construct for that the check
   /// is performed.
-  bool IsOpenMPCapturedByRef(ValueDecl *D, unsigned Level);
+  bool isOpenMPCapturedByRef(const ValueDecl *D, unsigned Level) const;
 
-  /// \brief Check if the specified variable is used in one of the private
+  /// Check if the specified variable is used in one of the private
   /// clauses (private, firstprivate, lastprivate, reduction etc.) in OpenMP
   /// constructs.
-  VarDecl *IsOpenMPCapturedDecl(ValueDecl *D);
+  VarDecl *isOpenMPCapturedDecl(ValueDecl *D);
   ExprResult getOpenMPCapturedExpr(VarDecl *Capture, ExprValueKind VK,
                                    ExprObjectKind OK, SourceLocation Loc);
 
-  /// \brief Check if the specified variable is used in 'private' clause.
+  /// Check if the specified variable is used in 'private' clause.
   /// \param Level Relative level of nested OpenMP construct for that the check
   /// is performed.
-  bool isOpenMPPrivateDecl(ValueDecl *D, unsigned Level);
+  bool isOpenMPPrivateDecl(const ValueDecl *D, unsigned Level) const;
 
   /// Sets OpenMP capture kind (OMPC_private, OMPC_firstprivate, OMPC_map etc.)
   /// for \p FD based on DSA for the provided corresponding captured declaration
   /// \p D.
-  void setOpenMPCaptureKind(FieldDecl *FD, ValueDecl *D, unsigned Level);
+  void setOpenMPCaptureKind(FieldDecl *FD, const ValueDecl *D, unsigned Level);
 
-  /// \brief Check if the specified variable is captured  by 'target' directive.
+  /// Check if the specified variable is captured  by 'target' directive.
   /// \param Level Relative level of nested OpenMP construct for that the check
   /// is performed.
-  bool isOpenMPTargetCapturedDecl(ValueDecl *D, unsigned Level);
+  bool isOpenMPTargetCapturedDecl(const ValueDecl *D, unsigned Level) const;
 
   ExprResult PerformOpenMPImplicitIntegerConversion(SourceLocation OpLoc,
                                                     Expr *Op);
-  /// \brief Called on start of new data sharing attribute block.
+  /// Called on start of new data sharing attribute block.
   void StartOpenMPDSABlock(OpenMPDirectiveKind K,
                            const DeclarationNameInfo &DirName, Scope *CurScope,
                            SourceLocation Loc);
-  /// \brief Start analysis of clauses.
+  /// Start analysis of clauses.
   void StartOpenMPClause(OpenMPClauseKind K);
-  /// \brief End analysis of clauses.
+  /// End analysis of clauses.
   void EndOpenMPClause();
-  /// \brief Called on end of data sharing attribute block.
+  /// Called on end of data sharing attribute block.
   void EndOpenMPDSABlock(Stmt *CurDirective);
 
-  /// \brief Check if the current region is an OpenMP loop region and if it is,
+  /// Check if the current region is an OpenMP loop region and if it is,
   /// mark loop control variable, used in \p Init for loop initialization, as
   /// private by default.
   /// \param Init First part of the for loop.
   void ActOnOpenMPLoopInitialization(SourceLocation ForLoc, Stmt *Init);
 
   // OpenMP directives and clauses.
-  /// \brief Called on correct id-expression from the '#pragma omp
+  /// Called on correct id-expression from the '#pragma omp
   /// threadprivate'.
   ExprResult ActOnOpenMPIdExpression(Scope *CurScope,
                                      CXXScopeSpec &ScopeSpec,
                                      const DeclarationNameInfo &Id);
-  /// \brief Called on well-formed '#pragma omp threadprivate'.
+  /// Called on well-formed '#pragma omp threadprivate'.
   DeclGroupPtrTy ActOnOpenMPThreadprivateDirective(
                                      SourceLocation Loc,
                                      ArrayRef<Expr *> VarList);
-  /// \brief Builds a new OpenMPThreadPrivateDecl and checks its correctness.
-  OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(
-                                     SourceLocation Loc,
-                                     ArrayRef<Expr *> VarList);
-  /// \brief Check if the specified type is allowed to be used in 'omp declare
+  /// Builds a new OpenMPThreadPrivateDecl and checks its correctness.
+  OMPThreadPrivateDecl *CheckOMPThreadPrivateDecl(SourceLocation Loc,
+                                                  ArrayRef<Expr *> VarList);
+  /// Check if the specified type is allowed to be used in 'omp declare
   /// reduction' construct.
   QualType ActOnOpenMPDeclareReductionType(SourceLocation TyLoc,
                                            TypeResult ParsedType);
-  /// \brief Called on start of '#pragma omp declare reduction'.
+  /// Called on start of '#pragma omp declare reduction'.
   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveStart(
       Scope *S, DeclContext *DC, DeclarationName Name,
       ArrayRef<std::pair<QualType, SourceLocation>> ReductionTypes,
       AccessSpecifier AS, Decl *PrevDeclInScope = nullptr);
-  /// \brief Initialize declare reduction construct initializer.
+  /// Initialize declare reduction construct initializer.
   void ActOnOpenMPDeclareReductionCombinerStart(Scope *S, Decl *D);
-  /// \brief Finish current declare reduction construct initializer.
+  /// Finish current declare reduction construct initializer.
   void ActOnOpenMPDeclareReductionCombinerEnd(Decl *D, Expr *Combiner);
-  /// \brief Initialize declare reduction construct initializer.
+  /// Initialize declare reduction construct initializer.
   /// \return omp_priv variable.
   VarDecl *ActOnOpenMPDeclareReductionInitializerStart(Scope *S, Decl *D);
-  /// \brief Finish current declare reduction construct initializer.
+  /// Finish current declare reduction construct initializer.
   void ActOnOpenMPDeclareReductionInitializerEnd(Decl *D, Expr *Initializer,
                                                  VarDecl *OmpPrivParm);
-  /// \brief Called at the end of '#pragma omp declare reduction'.
+  /// Called at the end of '#pragma omp declare reduction'.
   DeclGroupPtrTy ActOnOpenMPDeclareReductionDirectiveEnd(
       Scope *S, DeclGroupPtrTy DeclReductions, bool IsValid);
 
@@ -8702,8 +8746,9 @@
                                     OMPDeclareTargetDeclAttr::MapTypeTy MT,
                                     NamedDeclSetType &SameDirectiveDecls);
   /// Check declaration inside target region.
-  void checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D,
-                                        SourceLocation IdLoc = SourceLocation());
+  void
+  checkDeclIsAllowedInOpenMPTarget(Expr *E, Decl *D,
+                                   SourceLocation IdLoc = SourceLocation());
   /// Return true inside OpenMP declare target region.
   bool isInOpenMPDeclareTargetContext() const {
     return IsInOpenMPDeclareTargetContext;
@@ -8720,9 +8765,9 @@
   /// Return the number of captured regions created for an OpenMP directive.
   static int getOpenMPCaptureLevels(OpenMPDirectiveKind Kind);
 
-  /// \brief Initialization of captured region for OpenMP region.
+  /// Initialization of captured region for OpenMP region.
   void ActOnOpenMPRegionStart(OpenMPDirectiveKind DKind, Scope *CurScope);
-  /// \brief End of OpenMP region.
+  /// End of OpenMP region.
   ///
   /// \param S Statement associated with the current OpenMP region.
   /// \param Clauses List of clauses for the current OpenMP region.
@@ -8733,230 +8778,220 @@
       OpenMPDirectiveKind Kind, const DeclarationNameInfo &DirName,
       OpenMPDirectiveKind CancelRegion, ArrayRef<OMPClause *> Clauses,
       Stmt *AStmt, SourceLocation StartLoc, SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp parallel' after parsing
+  /// Called on well-formed '\#pragma omp parallel' after parsing
   /// of the  associated statement.
   StmtResult ActOnOpenMPParallelDirective(ArrayRef<OMPClause *> Clauses,
                                           Stmt *AStmt,
                                           SourceLocation StartLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp simd' after parsing
+  using VarsWithInheritedDSAType =
+      llvm::SmallDenseMap<const ValueDecl *, const Expr *, 4>;
+  /// Called on well-formed '\#pragma omp simd' after parsing
   /// of the associated statement.
-  StmtResult ActOnOpenMPSimdDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp for' after parsing
+  StmtResult
+  ActOnOpenMPSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                           SourceLocation StartLoc, SourceLocation EndLoc,
+                           VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp for' after parsing
   /// of the associated statement.
-  StmtResult ActOnOpenMPForDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp for simd' after parsing
+  StmtResult
+  ActOnOpenMPForDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                          SourceLocation StartLoc, SourceLocation EndLoc,
+                          VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp for simd' after parsing
   /// of the associated statement.
-  StmtResult ActOnOpenMPForSimdDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp sections' after parsing
+  StmtResult
+  ActOnOpenMPForSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                              SourceLocation StartLoc, SourceLocation EndLoc,
+                              VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp sections' after parsing
   /// of the associated statement.
   StmtResult ActOnOpenMPSectionsDirective(ArrayRef<OMPClause *> Clauses,
                                           Stmt *AStmt, SourceLocation StartLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp section' after parsing of the
+  /// Called on well-formed '\#pragma omp section' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPSectionDirective(Stmt *AStmt, SourceLocation StartLoc,
                                          SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp single' after parsing of the
+  /// Called on well-formed '\#pragma omp single' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPSingleDirective(ArrayRef<OMPClause *> Clauses,
                                         Stmt *AStmt, SourceLocation StartLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp master' after parsing of the
+  /// Called on well-formed '\#pragma omp master' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPMasterDirective(Stmt *AStmt, SourceLocation StartLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp critical' after parsing of the
+  /// Called on well-formed '\#pragma omp critical' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPCriticalDirective(const DeclarationNameInfo &DirName,
                                           ArrayRef<OMPClause *> Clauses,
                                           Stmt *AStmt, SourceLocation StartLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp parallel for' after parsing
+  /// Called on well-formed '\#pragma omp parallel for' after parsing
   /// of the  associated statement.
   StmtResult ActOnOpenMPParallelForDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp parallel for simd' after
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp parallel for simd' after
   /// parsing of the  associated statement.
   StmtResult ActOnOpenMPParallelForSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp parallel sections' after
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp parallel sections' after
   /// parsing of the  associated statement.
   StmtResult ActOnOpenMPParallelSectionsDirective(ArrayRef<OMPClause *> Clauses,
                                                   Stmt *AStmt,
                                                   SourceLocation StartLoc,
                                                   SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp task' after parsing of the
+  /// Called on well-formed '\#pragma omp task' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPTaskDirective(ArrayRef<OMPClause *> Clauses,
                                       Stmt *AStmt, SourceLocation StartLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp taskyield'.
+  /// Called on well-formed '\#pragma omp taskyield'.
   StmtResult ActOnOpenMPTaskyieldDirective(SourceLocation StartLoc,
                                            SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp barrier'.
+  /// Called on well-formed '\#pragma omp barrier'.
   StmtResult ActOnOpenMPBarrierDirective(SourceLocation StartLoc,
                                          SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp taskwait'.
+  /// Called on well-formed '\#pragma omp taskwait'.
   StmtResult ActOnOpenMPTaskwaitDirective(SourceLocation StartLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp taskgroup'.
+  /// Called on well-formed '\#pragma omp taskgroup'.
   StmtResult ActOnOpenMPTaskgroupDirective(ArrayRef<OMPClause *> Clauses,
                                            Stmt *AStmt, SourceLocation StartLoc,
                                            SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp flush'.
+  /// Called on well-formed '\#pragma omp flush'.
   StmtResult ActOnOpenMPFlushDirective(ArrayRef<OMPClause *> Clauses,
                                        SourceLocation StartLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp ordered' after parsing of the
+  /// Called on well-formed '\#pragma omp ordered' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPOrderedDirective(ArrayRef<OMPClause *> Clauses,
                                          Stmt *AStmt, SourceLocation StartLoc,
                                          SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp atomic' after parsing of the
+  /// Called on well-formed '\#pragma omp atomic' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPAtomicDirective(ArrayRef<OMPClause *> Clauses,
                                         Stmt *AStmt, SourceLocation StartLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp target' after parsing of the
+  /// Called on well-formed '\#pragma omp target' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPTargetDirective(ArrayRef<OMPClause *> Clauses,
                                         Stmt *AStmt, SourceLocation StartLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp target data' after parsing of
+  /// Called on well-formed '\#pragma omp target data' after parsing of
   /// the associated statement.
   StmtResult ActOnOpenMPTargetDataDirective(ArrayRef<OMPClause *> Clauses,
                                             Stmt *AStmt, SourceLocation StartLoc,
                                             SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp target enter data' after
+  /// Called on well-formed '\#pragma omp target enter data' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPTargetEnterDataDirective(ArrayRef<OMPClause *> Clauses,
                                                  SourceLocation StartLoc,
                                                  SourceLocation EndLoc,
                                                  Stmt *AStmt);
-  /// \brief Called on well-formed '\#pragma omp target exit data' after
+  /// Called on well-formed '\#pragma omp target exit data' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPTargetExitDataDirective(ArrayRef<OMPClause *> Clauses,
                                                 SourceLocation StartLoc,
                                                 SourceLocation EndLoc,
                                                 Stmt *AStmt);
-  /// \brief Called on well-formed '\#pragma omp target parallel' after
+  /// Called on well-formed '\#pragma omp target parallel' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPTargetParallelDirective(ArrayRef<OMPClause *> Clauses,
                                                 Stmt *AStmt,
                                                 SourceLocation StartLoc,
                                                 SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp target parallel for' after
+  /// Called on well-formed '\#pragma omp target parallel for' after
   /// parsing of the  associated statement.
   StmtResult ActOnOpenMPTargetParallelForDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp teams' after parsing of the
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp teams' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPTeamsDirective(ArrayRef<OMPClause *> Clauses,
                                        Stmt *AStmt, SourceLocation StartLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed '\#pragma omp cancellation point'.
+  /// Called on well-formed '\#pragma omp cancellation point'.
   StmtResult
   ActOnOpenMPCancellationPointDirective(SourceLocation StartLoc,
                                         SourceLocation EndLoc,
                                         OpenMPDirectiveKind CancelRegion);
-  /// \brief Called on well-formed '\#pragma omp cancel'.
+  /// Called on well-formed '\#pragma omp cancel'.
   StmtResult ActOnOpenMPCancelDirective(ArrayRef<OMPClause *> Clauses,
                                         SourceLocation StartLoc,
                                         SourceLocation EndLoc,
                                         OpenMPDirectiveKind CancelRegion);
-  /// \brief Called on well-formed '\#pragma omp taskloop' after parsing of the
+  /// Called on well-formed '\#pragma omp taskloop' after parsing of the
   /// associated statement.
-  StmtResult ActOnOpenMPTaskLoopDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp taskloop simd' after parsing of
+  StmtResult
+  ActOnOpenMPTaskLoopDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                               SourceLocation StartLoc, SourceLocation EndLoc,
+                               VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp taskloop simd' after parsing of
   /// the associated statement.
   StmtResult ActOnOpenMPTaskLoopSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp distribute' after parsing
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp distribute' after parsing
   /// of the associated statement.
-  StmtResult ActOnOpenMPDistributeDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp target update'.
+  StmtResult
+  ActOnOpenMPDistributeDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                                 SourceLocation StartLoc, SourceLocation EndLoc,
+                                 VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp target update'.
   StmtResult ActOnOpenMPTargetUpdateDirective(ArrayRef<OMPClause *> Clauses,
                                               SourceLocation StartLoc,
                                               SourceLocation EndLoc,
                                               Stmt *AStmt);
-  /// \brief Called on well-formed '\#pragma omp distribute parallel for' after
+  /// Called on well-formed '\#pragma omp distribute parallel for' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPDistributeParallelForDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp distribute parallel for simd'
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp distribute parallel for simd'
   /// after parsing of the associated statement.
   StmtResult ActOnOpenMPDistributeParallelForSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp distribute simd' after
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp distribute simd' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPDistributeSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp target parallel for simd' after
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp target parallel for simd' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPTargetParallelForSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
-  /// \brief Called on well-formed '\#pragma omp target simd' after parsing of
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
+  /// Called on well-formed '\#pragma omp target simd' after parsing of
   /// the associated statement.
-  StmtResult ActOnOpenMPTargetSimdDirective(
-      ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+  StmtResult
+  ActOnOpenMPTargetSimdDirective(ArrayRef<OMPClause *> Clauses, Stmt *AStmt,
+                                 SourceLocation StartLoc, SourceLocation EndLoc,
+                                 VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp teams distribute' after parsing of
   /// the associated statement.
   StmtResult ActOnOpenMPTeamsDistributeDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp teams distribute simd' after parsing
   /// of the associated statement.
   StmtResult ActOnOpenMPTeamsDistributeSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp teams distribute parallel for simd'
   /// after parsing of the associated statement.
   StmtResult ActOnOpenMPTeamsDistributeParallelForSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp teams distribute parallel for'
   /// after parsing of the associated statement.
   StmtResult ActOnOpenMPTeamsDistributeParallelForDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp target teams' after parsing of the
   /// associated statement.
   StmtResult ActOnOpenMPTargetTeamsDirective(ArrayRef<OMPClause *> Clauses,
@@ -8967,36 +9002,32 @@
   /// of the associated statement.
   StmtResult ActOnOpenMPTargetTeamsDistributeDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp target teams distribute parallel for'
   /// after parsing of the associated statement.
   StmtResult ActOnOpenMPTargetTeamsDistributeParallelForDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp target teams distribute parallel for
   /// simd' after parsing of the associated statement.
   StmtResult ActOnOpenMPTargetTeamsDistributeParallelForSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
   /// Called on well-formed '\#pragma omp target teams distribute simd' after
   /// parsing of the associated statement.
   StmtResult ActOnOpenMPTargetTeamsDistributeSimdDirective(
       ArrayRef<OMPClause *> Clauses, Stmt *AStmt, SourceLocation StartLoc,
-      SourceLocation EndLoc,
-      llvm::DenseMap<ValueDecl *, Expr *> &VarsWithImplicitDSA);
+      SourceLocation EndLoc, VarsWithInheritedDSAType &VarsWithImplicitDSA);
 
   /// Checks correctness of linear modifiers.
   bool CheckOpenMPLinearModifier(OpenMPLinearClauseKind LinKind,
                                  SourceLocation LinLoc);
   /// Checks that the specified declaration matches requirements for the linear
   /// decls.
-  bool CheckOpenMPLinearDecl(ValueDecl *D, SourceLocation ELoc,
+  bool CheckOpenMPLinearDecl(const ValueDecl *D, SourceLocation ELoc,
                              OpenMPLinearClauseKind LinKind, QualType Type);
 
-  /// \brief Called on well-formed '\#pragma omp declare simd' after parsing of
+  /// Called on well-formed '\#pragma omp declare simd' after parsing of
   /// the associated method/function.
   DeclGroupPtrTy ActOnOpenMPDeclareSimdDirective(
       DeclGroupPtrTy DG, OMPDeclareSimdDeclAttr::BranchStateTy BS,
@@ -9009,50 +9040,50 @@
                                          SourceLocation StartLoc,
                                          SourceLocation LParenLoc,
                                          SourceLocation EndLoc);
-  /// \brief Called on well-formed 'if' clause.
+  /// Called on well-formed 'if' clause.
   OMPClause *ActOnOpenMPIfClause(OpenMPDirectiveKind NameModifier,
                                  Expr *Condition, SourceLocation StartLoc,
                                  SourceLocation LParenLoc,
                                  SourceLocation NameModifierLoc,
                                  SourceLocation ColonLoc,
                                  SourceLocation EndLoc);
-  /// \brief Called on well-formed 'final' clause.
+  /// Called on well-formed 'final' clause.
   OMPClause *ActOnOpenMPFinalClause(Expr *Condition, SourceLocation StartLoc,
                                     SourceLocation LParenLoc,
                                     SourceLocation EndLoc);
-  /// \brief Called on well-formed 'num_threads' clause.
+  /// Called on well-formed 'num_threads' clause.
   OMPClause *ActOnOpenMPNumThreadsClause(Expr *NumThreads,
                                          SourceLocation StartLoc,
                                          SourceLocation LParenLoc,
                                          SourceLocation EndLoc);
-  /// \brief Called on well-formed 'safelen' clause.
+  /// Called on well-formed 'safelen' clause.
   OMPClause *ActOnOpenMPSafelenClause(Expr *Length,
                                       SourceLocation StartLoc,
                                       SourceLocation LParenLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'simdlen' clause.
+  /// Called on well-formed 'simdlen' clause.
   OMPClause *ActOnOpenMPSimdlenClause(Expr *Length, SourceLocation StartLoc,
                                       SourceLocation LParenLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'collapse' clause.
+  /// Called on well-formed 'collapse' clause.
   OMPClause *ActOnOpenMPCollapseClause(Expr *NumForLoops,
                                        SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed 'ordered' clause.
+  /// Called on well-formed 'ordered' clause.
   OMPClause *
   ActOnOpenMPOrderedClause(SourceLocation StartLoc, SourceLocation EndLoc,
                            SourceLocation LParenLoc = SourceLocation(),
                            Expr *NumForLoops = nullptr);
-  /// \brief Called on well-formed 'grainsize' clause.
+  /// Called on well-formed 'grainsize' clause.
   OMPClause *ActOnOpenMPGrainsizeClause(Expr *Size, SourceLocation StartLoc,
                                         SourceLocation LParenLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed 'num_tasks' clause.
+  /// Called on well-formed 'num_tasks' clause.
   OMPClause *ActOnOpenMPNumTasksClause(Expr *NumTasks, SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed 'hint' clause.
+  /// Called on well-formed 'hint' clause.
   OMPClause *ActOnOpenMPHintClause(Expr *Hint, SourceLocation StartLoc,
                                    SourceLocation LParenLoc,
                                    SourceLocation EndLoc);
@@ -9063,13 +9094,13 @@
                                      SourceLocation StartLoc,
                                      SourceLocation LParenLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'default' clause.
+  /// Called on well-formed 'default' clause.
   OMPClause *ActOnOpenMPDefaultClause(OpenMPDefaultClauseKind Kind,
                                       SourceLocation KindLoc,
                                       SourceLocation StartLoc,
                                       SourceLocation LParenLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'proc_bind' clause.
+  /// Called on well-formed 'proc_bind' clause.
   OMPClause *ActOnOpenMPProcBindClause(OpenMPProcBindClauseKind Kind,
                                        SourceLocation KindLoc,
                                        SourceLocation StartLoc,
@@ -9081,7 +9112,7 @@
       SourceLocation StartLoc, SourceLocation LParenLoc,
       ArrayRef<SourceLocation> ArgumentsLoc, SourceLocation DelimLoc,
       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'schedule' clause.
+  /// Called on well-formed 'schedule' clause.
   OMPClause *ActOnOpenMPScheduleClause(
       OpenMPScheduleClauseModifier M1, OpenMPScheduleClauseModifier M2,
       OpenMPScheduleClauseKind Kind, Expr *ChunkSize, SourceLocation StartLoc,
@@ -9090,37 +9121,37 @@
 
   OMPClause *ActOnOpenMPClause(OpenMPClauseKind Kind, SourceLocation StartLoc,
                                SourceLocation EndLoc);
-  /// \brief Called on well-formed 'nowait' clause.
+  /// Called on well-formed 'nowait' clause.
   OMPClause *ActOnOpenMPNowaitClause(SourceLocation StartLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'untied' clause.
+  /// Called on well-formed 'untied' clause.
   OMPClause *ActOnOpenMPUntiedClause(SourceLocation StartLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'mergeable' clause.
+  /// Called on well-formed 'mergeable' clause.
   OMPClause *ActOnOpenMPMergeableClause(SourceLocation StartLoc,
                                         SourceLocation EndLoc);
-  /// \brief Called on well-formed 'read' clause.
+  /// Called on well-formed 'read' clause.
   OMPClause *ActOnOpenMPReadClause(SourceLocation StartLoc,
                                    SourceLocation EndLoc);
-  /// \brief Called on well-formed 'write' clause.
+  /// Called on well-formed 'write' clause.
   OMPClause *ActOnOpenMPWriteClause(SourceLocation StartLoc,
                                     SourceLocation EndLoc);
-  /// \brief Called on well-formed 'update' clause.
+  /// Called on well-formed 'update' clause.
   OMPClause *ActOnOpenMPUpdateClause(SourceLocation StartLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'capture' clause.
+  /// Called on well-formed 'capture' clause.
   OMPClause *ActOnOpenMPCaptureClause(SourceLocation StartLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'seq_cst' clause.
+  /// Called on well-formed 'seq_cst' clause.
   OMPClause *ActOnOpenMPSeqCstClause(SourceLocation StartLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'threads' clause.
+  /// Called on well-formed 'threads' clause.
   OMPClause *ActOnOpenMPThreadsClause(SourceLocation StartLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'simd' clause.
+  /// Called on well-formed 'simd' clause.
   OMPClause *ActOnOpenMPSIMDClause(SourceLocation StartLoc,
                                    SourceLocation EndLoc);
-  /// \brief Called on well-formed 'nogroup' clause.
+  /// Called on well-formed 'nogroup' clause.
   OMPClause *ActOnOpenMPNogroupClause(SourceLocation StartLoc,
                                       SourceLocation EndLoc);
 
@@ -9133,27 +9164,27 @@
       OpenMPLinearClauseKind LinKind, OpenMPMapClauseKind MapTypeModifier,
       OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
       SourceLocation DepLinMapLoc);
-  /// \brief Called on well-formed 'private' clause.
+  /// Called on well-formed 'private' clause.
   OMPClause *ActOnOpenMPPrivateClause(ArrayRef<Expr *> VarList,
                                       SourceLocation StartLoc,
                                       SourceLocation LParenLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'firstprivate' clause.
+  /// Called on well-formed 'firstprivate' clause.
   OMPClause *ActOnOpenMPFirstprivateClause(ArrayRef<Expr *> VarList,
                                            SourceLocation StartLoc,
                                            SourceLocation LParenLoc,
                                            SourceLocation EndLoc);
-  /// \brief Called on well-formed 'lastprivate' clause.
+  /// Called on well-formed 'lastprivate' clause.
   OMPClause *ActOnOpenMPLastprivateClause(ArrayRef<Expr *> VarList,
                                           SourceLocation StartLoc,
                                           SourceLocation LParenLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed 'shared' clause.
+  /// Called on well-formed 'shared' clause.
   OMPClause *ActOnOpenMPSharedClause(ArrayRef<Expr *> VarList,
                                      SourceLocation StartLoc,
                                      SourceLocation LParenLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'reduction' clause.
+  /// Called on well-formed 'reduction' clause.
   OMPClause *ActOnOpenMPReductionClause(
       ArrayRef<Expr *> VarList, SourceLocation StartLoc,
       SourceLocation LParenLoc, SourceLocation ColonLoc, SourceLocation EndLoc,
@@ -9174,80 +9205,80 @@
       CXXScopeSpec &ReductionIdScopeSpec,
       const DeclarationNameInfo &ReductionId,
       ArrayRef<Expr *> UnresolvedReductions = llvm::None);
-  /// \brief Called on well-formed 'linear' clause.
+  /// Called on well-formed 'linear' clause.
   OMPClause *
   ActOnOpenMPLinearClause(ArrayRef<Expr *> VarList, Expr *Step,
                           SourceLocation StartLoc, SourceLocation LParenLoc,
                           OpenMPLinearClauseKind LinKind, SourceLocation LinLoc,
                           SourceLocation ColonLoc, SourceLocation EndLoc);
-  /// \brief Called on well-formed 'aligned' clause.
+  /// Called on well-formed 'aligned' clause.
   OMPClause *ActOnOpenMPAlignedClause(ArrayRef<Expr *> VarList,
                                       Expr *Alignment,
                                       SourceLocation StartLoc,
                                       SourceLocation LParenLoc,
                                       SourceLocation ColonLoc,
                                       SourceLocation EndLoc);
-  /// \brief Called on well-formed 'copyin' clause.
+  /// Called on well-formed 'copyin' clause.
   OMPClause *ActOnOpenMPCopyinClause(ArrayRef<Expr *> VarList,
                                      SourceLocation StartLoc,
                                      SourceLocation LParenLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'copyprivate' clause.
+  /// Called on well-formed 'copyprivate' clause.
   OMPClause *ActOnOpenMPCopyprivateClause(ArrayRef<Expr *> VarList,
                                           SourceLocation StartLoc,
                                           SourceLocation LParenLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed 'flush' pseudo clause.
+  /// Called on well-formed 'flush' pseudo clause.
   OMPClause *ActOnOpenMPFlushClause(ArrayRef<Expr *> VarList,
                                     SourceLocation StartLoc,
                                     SourceLocation LParenLoc,
                                     SourceLocation EndLoc);
-  /// \brief Called on well-formed 'depend' clause.
+  /// Called on well-formed 'depend' clause.
   OMPClause *
   ActOnOpenMPDependClause(OpenMPDependClauseKind DepKind, SourceLocation DepLoc,
                           SourceLocation ColonLoc, ArrayRef<Expr *> VarList,
                           SourceLocation StartLoc, SourceLocation LParenLoc,
                           SourceLocation EndLoc);
-  /// \brief Called on well-formed 'device' clause.
+  /// Called on well-formed 'device' clause.
   OMPClause *ActOnOpenMPDeviceClause(Expr *Device, SourceLocation StartLoc,
                                      SourceLocation LParenLoc,
                                      SourceLocation EndLoc);
-  /// \brief Called on well-formed 'map' clause.
+  /// Called on well-formed 'map' clause.
   OMPClause *
   ActOnOpenMPMapClause(OpenMPMapClauseKind MapTypeModifier,
                        OpenMPMapClauseKind MapType, bool IsMapTypeImplicit,
                        SourceLocation MapLoc, SourceLocation ColonLoc,
                        ArrayRef<Expr *> VarList, SourceLocation StartLoc,
                        SourceLocation LParenLoc, SourceLocation EndLoc);
-  /// \brief Called on well-formed 'num_teams' clause.
+  /// Called on well-formed 'num_teams' clause.
   OMPClause *ActOnOpenMPNumTeamsClause(Expr *NumTeams, SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed 'thread_limit' clause.
+  /// Called on well-formed 'thread_limit' clause.
   OMPClause *ActOnOpenMPThreadLimitClause(Expr *ThreadLimit,
                                           SourceLocation StartLoc,
                                           SourceLocation LParenLoc,
                                           SourceLocation EndLoc);
-  /// \brief Called on well-formed 'priority' clause.
+  /// Called on well-formed 'priority' clause.
   OMPClause *ActOnOpenMPPriorityClause(Expr *Priority, SourceLocation StartLoc,
                                        SourceLocation LParenLoc,
                                        SourceLocation EndLoc);
-  /// \brief Called on well-formed 'dist_schedule' clause.
+  /// Called on well-formed 'dist_schedule' clause.
   OMPClause *ActOnOpenMPDistScheduleClause(
       OpenMPDistScheduleClauseKind Kind, Expr *ChunkSize,
       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation KindLoc,
       SourceLocation CommaLoc, SourceLocation EndLoc);
-  /// \brief Called on well-formed 'defaultmap' clause.
+  /// Called on well-formed 'defaultmap' clause.
   OMPClause *ActOnOpenMPDefaultmapClause(
       OpenMPDefaultmapClauseModifier M, OpenMPDefaultmapClauseKind Kind,
       SourceLocation StartLoc, SourceLocation LParenLoc, SourceLocation MLoc,
       SourceLocation KindLoc, SourceLocation EndLoc);
-  /// \brief Called on well-formed 'to' clause.
+  /// Called on well-formed 'to' clause.
   OMPClause *ActOnOpenMPToClause(ArrayRef<Expr *> VarList,
                                  SourceLocation StartLoc,
                                  SourceLocation LParenLoc,
                                  SourceLocation EndLoc);
-  /// \brief Called on well-formed 'from' clause.
+  /// Called on well-formed 'from' clause.
   OMPClause *ActOnOpenMPFromClause(ArrayRef<Expr *> VarList,
                                    SourceLocation StartLoc,
                                    SourceLocation LParenLoc,
@@ -9263,18 +9294,25 @@
                                           SourceLocation LParenLoc,
                                           SourceLocation EndLoc);
 
-  /// \brief The kind of conversion being performed.
+  /// The kind of conversion being performed.
   enum CheckedConversionKind {
-    /// \brief An implicit conversion.
+    /// An implicit conversion.
     CCK_ImplicitConversion,
-    /// \brief A C-style cast.
+    /// A C-style cast.
     CCK_CStyleCast,
-    /// \brief A functional-style cast.
+    /// A functional-style cast.
     CCK_FunctionalCast,
-    /// \brief A cast other than a C-style cast.
-    CCK_OtherCast
+    /// A cast other than a C-style cast.
+    CCK_OtherCast,
+    /// A conversion for an operand of a builtin overloaded operator.
+    CCK_ForBuiltinOverloadedOp
   };
 
+  static bool isCast(CheckedConversionKind CCK) {
+    return CCK == CCK_CStyleCast || CCK == CCK_FunctionalCast ||
+           CCK == CCK_OtherCast;
+  }
+
   /// ImpCastExprToType - If Expr is not of type 'Type', insert an implicit
   /// cast.  If there is already an implicit cast, merge into the existing one.
   /// If isLvalue, the result of the cast is an lvalue.
@@ -9508,7 +9546,7 @@
       QualType LHSType, ExprResult &RHS, bool Diagnose = true,
       bool DiagnoseCFAudited = false, bool ConvertRHS = true);
 
-  // \brief If the lhs type is a transparent union, check whether we
+  // If the lhs type is a transparent union, check whether we
   // can initialize the transparent union with the given expression.
   AssignConvertType CheckTransparentUnionArgumentConstraints(QualType ArgType,
                                                              ExprResult &RHS);
@@ -9561,8 +9599,8 @@
     ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
     BinaryOperatorKind Opc, bool IsCompAssign = false);
   QualType CheckCompareOperands( // C99 6.5.8/9
-    ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
-    BinaryOperatorKind Opc, bool isRelational);
+      ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
+      BinaryOperatorKind Opc);
   QualType CheckBitwiseOperands( // C99 6.5.[10...12]
       ExprResult &LHS, ExprResult &RHS, SourceLocation Loc,
       BinaryOperatorKind Opc);
@@ -9656,11 +9694,11 @@
                                  Expr *CastExpr, CastKind &CastKind,
                                  ExprValueKind &VK, CXXCastPath &Path);
 
-  /// \brief Force an expression with unknown-type to an expression of the
+  /// Force an expression with unknown-type to an expression of the
   /// given type.
   ExprResult forceUnknownAnyToType(Expr *E, QualType ToType);
 
-  /// \brief Type-check an expression that's being passed to an
+  /// Type-check an expression that's being passed to an
   /// __unknown_anytype parameter.
   ExprResult checkUnknownAnyArg(SourceLocation callLoc,
                                 Expr *result, QualType &paramType);
@@ -9672,7 +9710,7 @@
   bool CheckVectorCast(SourceRange R, QualType VectorTy, QualType Ty,
                        CastKind &Kind);
 
-  /// \brief Prepare `SplattedExpr` for a vector splat operation, adding
+  /// Prepare `SplattedExpr` for a vector splat operation, adding
   /// implicit casts if necessary.
   ExprResult prepareVectorSplat(QualType VectorTy, Expr *SplattedExpr);
 
@@ -9691,7 +9729,7 @@
 
   enum ARCConversionResult { ACR_okay, ACR_unbridged, ACR_error };
 
-  /// \brief Checks for invalid conversions and casts between
+  /// Checks for invalid conversions and casts between
   /// retainable pointers and other pointer kinds for ARC and Weak.
   ARCConversionResult CheckObjCConversion(SourceRange castRange,
                                           QualType castType, Expr *&op,
@@ -9734,18 +9772,18 @@
                                  SourceRange RecRange,
                                  QualType &ReturnType, ExprValueKind &VK);
 
-  /// \brief Determine the result of a message send expression based on
+  /// Determine the result of a message send expression based on
   /// the type of the receiver, the method expected to receive the message,
   /// and the form of the message send.
   QualType getMessageSendResultType(QualType ReceiverType,
                                     ObjCMethodDecl *Method,
                                     bool isClassMessage, bool isSuperMessage);
 
-  /// \brief If the given expression involves a message send to a method
+  /// If the given expression involves a message send to a method
   /// with a related result type, emit a note describing what happened.
   void EmitRelatedResultTypeNote(const Expr *E);
 
-  /// \brief Given that we had incompatible pointer types in a return
+  /// Given that we had incompatible pointer types in a return
   /// statement, check whether we're in a method with a related result
   /// type, and if so, emit a note describing what happened.
   void EmitRelatedResultTypeNoteForReturn(QualType destType);
@@ -9819,7 +9857,7 @@
   /// being used as a boolean condition, warn if it's an assignment.
   void DiagnoseAssignmentAsCondition(Expr *E);
 
-  /// \brief Redundant parentheses over an equality comparison can indicate
+  /// Redundant parentheses over an equality comparison can indicate
   /// that the user intended an assignment used as condition.
   void DiagnoseEqualityWithExtraParens(ParenExpr *ParenE);
 
@@ -9838,7 +9876,7 @@
   /// in the global scope.
   bool CheckObjCDeclScope(Decl *D);
 
-  /// \brief Abstract base class used for diagnosing integer constant
+  /// Abstract base class used for diagnosing integer constant
   /// expression violations.
   class VerifyICEDiagnoser {
   public:
@@ -10034,7 +10072,7 @@
   /// will get it wrong.  Returns CFT_Host if D is null.
   CUDAFunctionTarget IdentifyCUDATarget(const FunctionDecl *D,
                                         bool IgnoreImplicitHDAttr = false);
-  CUDAFunctionTarget IdentifyCUDATarget(const AttributeList *Attr);
+  CUDAFunctionTarget IdentifyCUDATarget(const ParsedAttributesView &Attrs);
 
   /// Gets the CUDA target for the current context.
   CUDAFunctionTarget CurrentCUDATarget() {
@@ -10133,6 +10171,16 @@
   bool isEmptyCudaConstructor(SourceLocation Loc, CXXConstructorDecl *CD);
   bool isEmptyCudaDestructor(SourceLocation Loc, CXXDestructorDecl *CD);
 
+  // \brief Checks that initializers of \p Var satisfy CUDA restrictions. In
+  // case of error emits appropriate diagnostic and invalidates \p Var.
+  //
+  // \details CUDA allows only empty constructors as initializers for global
+  // variables (see E.2.3.1, CUDA 7.5). The same restriction also applies to all
+  // __shared__ variables whether they are local or not (they all are implicitly
+  // static in CUDA). One exception is that CUDA allows constant initializers
+  // for __constant__ and __device__ variables.
+  void checkAllowedCUDAInitializer(VarDecl *VD);
+
   /// Check whether NewFD is a valid overload for CUDA. Emits
   /// diagnostics and invalidates NewFD if not.
   void checkCUDATargetOverload(FunctionDecl *NewFD,
@@ -10142,48 +10190,48 @@
 
   /// \name Code completion
   //@{
-  /// \brief Describes the context in which code completion occurs.
+  /// Describes the context in which code completion occurs.
   enum ParserCompletionContext {
-    /// \brief Code completion occurs at top-level or namespace context.
+    /// Code completion occurs at top-level or namespace context.
     PCC_Namespace,
-    /// \brief Code completion occurs within a class, struct, or union.
+    /// Code completion occurs within a class, struct, or union.
     PCC_Class,
-    /// \brief Code completion occurs within an Objective-C interface, protocol,
+    /// Code completion occurs within an Objective-C interface, protocol,
     /// or category.
     PCC_ObjCInterface,
-    /// \brief Code completion occurs within an Objective-C implementation or
+    /// Code completion occurs within an Objective-C implementation or
     /// category implementation
     PCC_ObjCImplementation,
-    /// \brief Code completion occurs within the list of instance variables
+    /// Code completion occurs within the list of instance variables
     /// in an Objective-C interface, protocol, category, or implementation.
     PCC_ObjCInstanceVariableList,
-    /// \brief Code completion occurs following one or more template
+    /// Code completion occurs following one or more template
     /// headers.
     PCC_Template,
-    /// \brief Code completion occurs following one or more template
+    /// Code completion occurs following one or more template
     /// headers within a class.
     PCC_MemberTemplate,
-    /// \brief Code completion occurs within an expression.
+    /// Code completion occurs within an expression.
     PCC_Expression,
-    /// \brief Code completion occurs within a statement, which may
+    /// Code completion occurs within a statement, which may
     /// also be an expression or a declaration.
     PCC_Statement,
-    /// \brief Code completion occurs at the beginning of the
+    /// Code completion occurs at the beginning of the
     /// initialization statement (or expression) in a for loop.
     PCC_ForInit,
-    /// \brief Code completion occurs within the condition of an if,
+    /// Code completion occurs within the condition of an if,
     /// while, switch, or for statement.
     PCC_Condition,
-    /// \brief Code completion occurs within the body of a function on a
+    /// Code completion occurs within the body of a function on a
     /// recovery path, where we do not have a specific handle on our position
     /// in the grammar.
     PCC_RecoveryInFunction,
-    /// \brief Code completion occurs where only a type is permitted.
+    /// Code completion occurs where only a type is permitted.
     PCC_Type,
-    /// \brief Code completion occurs in a parenthesized expression, which
+    /// Code completion occurs in a parenthesized expression, which
     /// might also be a type cast.
     PCC_ParenthesizedExpression,
-    /// \brief Code completion occurs within a sequence of declaration
+    /// Code completion occurs within a sequence of declaration
     /// specifiers within a function, method, or block.
     PCC_LocalDeclarationSpecifiers
   };
@@ -10198,7 +10246,7 @@
   struct CodeCompleteExpressionData;
   void CodeCompleteExpression(Scope *S,
                               const CodeCompleteExpressionData &Data);
-  void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base,
+  void CodeCompleteMemberReferenceExpr(Scope *S, Expr *Base, Expr *OtherOpBase,
                                        SourceLocation OpLoc, bool IsArrow,
                                        bool IsBaseExprStatement);
   void CodeCompletePostfixExpression(Scope *S, ExprResult LHS);
@@ -10348,6 +10396,9 @@
   bool CheckARMBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
 
   bool CheckAArch64BuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
+  bool CheckHexagonBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
+  bool CheckHexagonBuiltinCpu(unsigned BuiltinID, CallExpr *TheCall);
+  bool CheckHexagonBuiltinArgument(unsigned BuiltinID, CallExpr *TheCall);
   bool CheckMipsBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   bool CheckSystemZBuiltinFunctionCall(unsigned BuiltinID, CallExpr *TheCall);
   bool CheckX86BuiltinRoundingOrSAE(unsigned BuiltinID, CallExpr *TheCall);
@@ -10384,8 +10435,8 @@
                                                     bool IsDelete);
   bool SemaBuiltinConstantArg(CallExpr *TheCall, int ArgNum,
                               llvm::APSInt &Result);
-  bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum,
-                                   int Low, int High);
+  bool SemaBuiltinConstantArgRange(CallExpr *TheCall, int ArgNum, int Low,
+                                   int High, bool RangeIsError = true);
   bool SemaBuiltinConstantArgMultiple(CallExpr *TheCall, int ArgNum,
                                       unsigned Multiple);
   bool SemaBuiltinARMSpecialReg(unsigned BuiltinID, CallExpr *TheCall,
@@ -10454,7 +10505,7 @@
   void CheckForIntOverflow(Expr *E);
   void CheckUnsequencedOperations(Expr *E);
 
-  /// \brief Perform semantic checks on a completed expression. This will either
+  /// Perform semantic checks on a completed expression. This will either
   /// be a full-expression or a default argument expression.
   void CheckCompletedExpr(Expr *E, SourceLocation CheckLoc = SourceLocation(),
                           bool IsConstexpr = false);
@@ -10467,11 +10518,11 @@
                                   DeclarationName FieldName,
                                   const CXXRecordDecl *RD);
 
-  /// \brief Check if the given expression contains 'break' or 'continue'
+  /// Check if the given expression contains 'break' or 'continue'
   /// statement that produces control flow different from GCC.
   void CheckBreakContinueBinding(Expr *E);
 
-  /// \brief Check whether receiver is mutable ObjC container which
+  /// Check whether receiver is mutable ObjC container which
   /// attempts to add itself into the container
   void CheckObjCCircularContainer(ObjCMessageExpr *Message);
 
@@ -10479,7 +10530,7 @@
   void AnalyzeDeleteExprMismatch(FieldDecl *Field, SourceLocation DeleteLoc,
                                  bool DeleteWasArrayForm);
 public:
-  /// \brief Register a magic integral constant to be used as a type tag.
+  /// Register a magic integral constant to be used as a type tag.
   void RegisterTypeTagForDatatype(const IdentifierInfo *ArgumentKind,
                                   uint64_t MagicValue, QualType Type,
                                   bool LayoutCompatible, bool MustBeNull);
@@ -10505,21 +10556,21 @@
   typedef std::pair<const IdentifierInfo *, uint64_t> TypeTagMagicValue;
 
 private:
-  /// \brief A map from magic value to type information.
+  /// A map from magic value to type information.
   std::unique_ptr<llvm::DenseMap<TypeTagMagicValue, TypeTagData>>
       TypeTagForDatatypeMagicValues;
 
-  /// \brief Peform checks on a call of a function with argument_with_type_tag
+  /// Peform checks on a call of a function with argument_with_type_tag
   /// or pointer_with_type_tag attributes.
   void CheckArgumentWithTypeTag(const ArgumentWithTypeTagAttr *Attr,
                                 const ArrayRef<const Expr *> ExprArgs,
                                 SourceLocation CallSiteLoc);
 
-  /// \brief Check if we are taking the address of a packed field
+  /// Check if we are taking the address of a packed field
   /// as this may be a problem if the pointer value is dereferenced.
   void CheckAddressOfPackedMember(Expr *rhs);
 
-  /// \brief The parser's current scope.
+  /// The parser's current scope.
   ///
   /// The parser maintains this state here.
   Scope *CurScope;
@@ -10534,7 +10585,7 @@
 
   IdentifierInfo *Ident_NSError = nullptr;
 
-  /// \brief The handler for the FileChanged preprocessor events.
+  /// The handler for the FileChanged preprocessor events.
   ///
   /// Used for diagnostics that implement custom semantic analysis for #include
   /// directives, like -Wpragma-pack.
@@ -10557,7 +10608,7 @@
   /// Retrieve the identifier "NSError".
   IdentifierInfo *getNSErrorIdent();
 
-  /// \brief Retrieve the parser's current scope.
+  /// Retrieve the parser's current scope.
   ///
   /// This routine must only be used when it is certain that semantic analysis
   /// and the parser are in precisely the same context, which is not the case
@@ -10588,7 +10639,7 @@
     return DC;
   }
 
-  /// \brief To be used for checking whether the arguments being passed to
+  /// To be used for checking whether the arguments being passed to
   /// function exceeds the number of parameters expected for it.
   static bool TooManyArguments(size_t NumParams, size_t NumArgs,
                                bool PartialOverloading = false) {
@@ -10633,7 +10684,7 @@
     }
   };
 
-  /// \brief Helper class that collects misaligned member designations and
+  /// Helper class that collects misaligned member designations and
   /// their location info for delayed diagnostics.
   struct MisalignedMember {
     Expr *E;
@@ -10650,28 +10701,28 @@
 
     bool operator==(const MisalignedMember &m) { return this->E == m.E; }
   };
-  /// \brief Small set of gathered accesses to potentially misaligned members
+  /// Small set of gathered accesses to potentially misaligned members
   /// due to the packed attribute.
   SmallVector<MisalignedMember, 4> MisalignedMembers;
 
-  /// \brief Adds an expression to the set of gathered misaligned members.
+  /// Adds an expression to the set of gathered misaligned members.
   void AddPotentialMisalignedMembers(Expr *E, RecordDecl *RD, ValueDecl *MD,
                                      CharUnits Alignment);
 
 public:
-  /// \brief Diagnoses the current set of gathered accesses. This typically
+  /// Diagnoses the current set of gathered accesses. This typically
   /// happens at full expression level. The set is cleared after emitting the
   /// diagnostics.
   void DiagnoseMisalignedMembers();
 
-  /// \brief This function checks if the expression is in the sef of potentially
+  /// This function checks if the expression is in the sef of potentially
   /// misaligned members and it is converted to some pointer type T with lower
   /// or equal alignment requirements. If so it removes it. This is used when
   /// we do not want to diagnose such misaligned access (e.g. in conversions to
   /// void*).
   void DiscardMisalignedMemberAddress(const Type *T, Expr *E);
 
-  /// \brief This function calls Action when it determines that E designates a
+  /// This function calls Action when it determines that E designates a
   /// misaligned member due to the packed attribute. This is used to emit
   /// local diagnostics like in reference binding.
   void RefersToMemberWithReducedAlignment(
@@ -10680,31 +10731,31 @@
           Action);
 };
 
-/// \brief RAII object that enters a new expression evaluation context.
+/// RAII object that enters a new expression evaluation context.
 class EnterExpressionEvaluationContext {
   Sema &Actions;
   bool Entered = true;
 
 public:
-
-  EnterExpressionEvaluationContext(Sema &Actions,
-                                   Sema::ExpressionEvaluationContext NewContext,
-                                   Decl *LambdaContextDecl = nullptr,
-                                   bool IsDecltype = false,
-                                   bool ShouldEnter = true)
+  EnterExpressionEvaluationContext(
+      Sema &Actions, Sema::ExpressionEvaluationContext NewContext,
+      Decl *LambdaContextDecl = nullptr,
+      Sema::ExpressionEvaluationContextRecord::ExpressionKind ExprContext =
+          Sema::ExpressionEvaluationContextRecord::EK_Other,
+      bool ShouldEnter = true)
       : Actions(Actions), Entered(ShouldEnter) {
     if (Entered)
       Actions.PushExpressionEvaluationContext(NewContext, LambdaContextDecl,
-                                              IsDecltype);
+                                              ExprContext);
   }
-  EnterExpressionEvaluationContext(Sema &Actions,
-                                   Sema::ExpressionEvaluationContext NewContext,
-                                   Sema::ReuseLambdaContextDecl_t,
-                                   bool IsDecltype = false)
-    : Actions(Actions) {
-    Actions.PushExpressionEvaluationContext(NewContext,
-                                            Sema::ReuseLambdaContextDecl,
-                                            IsDecltype);
+  EnterExpressionEvaluationContext(
+      Sema &Actions, Sema::ExpressionEvaluationContext NewContext,
+      Sema::ReuseLambdaContextDecl_t,
+      Sema::ExpressionEvaluationContextRecord::ExpressionKind ExprContext =
+          Sema::ExpressionEvaluationContextRecord::EK_Other)
+      : Actions(Actions) {
+    Actions.PushExpressionEvaluationContext(
+        NewContext, Sema::ReuseLambdaContextDecl, ExprContext);
   }
 
   enum InitListTag { InitList };
@@ -10718,7 +10769,7 @@
     if (ShouldEnter && Actions.isUnevaluatedContext() &&
         Actions.getLangOpts().CPlusPlus11) {
       Actions.PushExpressionEvaluationContext(
-          Sema::ExpressionEvaluationContext::UnevaluatedList, nullptr, false);
+          Sema::ExpressionEvaluationContext::UnevaluatedList);
       Entered = true;
     }
   }
@@ -10733,11 +10784,11 @@
 MakeDeductionFailureInfo(ASTContext &Context, Sema::TemplateDeductionResult TDK,
                          sema::TemplateDeductionInfo &Info);
 
-/// \brief Contains a late templated function.
+/// Contains a late templated function.
 /// Will be parsed at the end of the translation unit, used by Sema & Parser.
 struct LateParsedTemplate {
   CachedTokens Toks;
-  /// \brief The template function declaration to be late parsed.
+  /// The template function declaration to be late parsed.
   Decl *D;
 };
 
diff --git a/linux-x64/clang/include/clang/Sema/SemaConsumer.h b/linux-x64/clang/include/clang/Sema/SemaConsumer.h
index 676646a..a2caf86 100644
--- a/linux-x64/clang/include/clang/Sema/SemaConsumer.h
+++ b/linux-x64/clang/include/clang/Sema/SemaConsumer.h
@@ -20,7 +20,7 @@
 namespace clang {
   class Sema;
 
-  /// \brief An abstract interface that should be implemented by
+  /// An abstract interface that should be implemented by
   /// clients that read ASTs and then require further semantic
   /// analysis of the entities in those ASTs.
   class SemaConsumer : public ASTConsumer {
@@ -30,12 +30,12 @@
       ASTConsumer::SemaConsumer = true;
     }
 
-    /// \brief Initialize the semantic consumer with the Sema instance
+    /// Initialize the semantic consumer with the Sema instance
     /// being used to perform semantic analysis on the abstract syntax
     /// tree.
     virtual void InitializeSema(Sema &S) {}
 
-    /// \brief Inform the semantic consumer that Sema is no longer available.
+    /// Inform the semantic consumer that Sema is no longer available.
     virtual void ForgetSema() {}
 
     // isa/cast/dyn_cast support
diff --git a/linux-x64/clang/include/clang/Sema/SemaFixItUtils.h b/linux-x64/clang/include/clang/Sema/SemaFixItUtils.h
index 343ccfb..84dc587 100644
--- a/linux-x64/clang/include/clang/Sema/SemaFixItUtils.h
+++ b/linux-x64/clang/include/clang/Sema/SemaFixItUtils.h
@@ -1,4 +1,4 @@
-//===--- SemaFixItUtils.h - Sema FixIts -----------------------------------===//
+//===--- SemaFixItUtils.h - Sema FixIts -------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
diff --git a/linux-x64/clang/include/clang/Sema/SemaInternal.h b/linux-x64/clang/include/clang/Sema/SemaInternal.h
index 4dc215b..c55e16a 100644
--- a/linux-x64/clang/include/clang/Sema/SemaInternal.h
+++ b/linux-x64/clang/include/clang/Sema/SemaInternal.h
@@ -45,7 +45,7 @@
   const VarDecl *DefVD = nullptr;
   return !isa<ParmVarDecl>(Var) &&
     Var->isUsableInConstantExpressions(Context) &&
-    Var->getAnyInitializer(DefVD) && DefVD->checkInitIsICE(); 
+    Var->getAnyInitializer(DefVD) && DefVD->checkInitIsICE();
 }
 
 // Helper function to check whether D's attributes match current CUDA mode.
@@ -60,13 +60,13 @@
   return isDeviceSideDecl == LangOpts.CUDAIsDevice;
 }
 
-// Directly mark a variable odr-used. Given a choice, prefer to use 
-// MarkVariableReferenced since it does additional checks and then 
+// Directly mark a variable odr-used. Given a choice, prefer to use
+// MarkVariableReferenced since it does additional checks and then
 // calls MarkVarDeclODRUsed.
 // If the variable must be captured:
 //  - if FunctionScopeIndexToStopAt is null, capture it in the CurContext
-//  - else capture it in the DeclContext that maps to the 
-//    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.  
+//  - else capture it in the DeclContext that maps to the
+//    *FunctionScopeIndexToStopAt on the FunctionScopeInfo stack.
 inline void MarkVarDeclODRUsed(VarDecl *Var,
     SourceLocation Loc, Sema &SemaRef,
     const unsigned *const FunctionScopeIndexToStopAt) {
@@ -81,10 +81,10 @@
       old = Loc;
   }
   QualType CaptureType, DeclRefType;
-  SemaRef.tryCaptureVariable(Var, Loc, Sema::TryCapture_Implicit, 
+  SemaRef.tryCaptureVariable(Var, Loc, Sema::TryCapture_Implicit,
     /*EllipsisLoc*/ SourceLocation(),
-    /*BuildAndDiagnose*/ true, 
-    CaptureType, DeclRefType, 
+    /*BuildAndDiagnose*/ true,
+    CaptureType, DeclRefType,
     FunctionScopeIndexToStopAt);
 
   Var->markUsed(SemaRef.Context);
@@ -101,6 +101,27 @@
   return nullptr;
 }
 
+/// Retrieve the depth and index of a template parameter.
+inline std::pair<unsigned, unsigned> getDepthAndIndex(NamedDecl *ND) {
+  if (const auto *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
+    return std::make_pair(TTP->getDepth(), TTP->getIndex());
+
+  if (const auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
+    return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
+
+  const auto *TTP = cast<TemplateTemplateParmDecl>(ND);
+  return std::make_pair(TTP->getDepth(), TTP->getIndex());
+}
+
+/// Retrieve the depth and index of an unexpanded parameter pack.
+inline std::pair<unsigned, unsigned>
+getDepthAndIndex(UnexpandedParameterPack UPP) {
+  if (const auto *TTP = UPP.first.dyn_cast<const TemplateTypeParmType *>())
+    return std::make_pair(TTP->getDepth(), TTP->getIndex());
+
+  return getDepthAndIndex(UPP.first.get<NamedDecl *>());
+}
+
 class TypoCorrectionConsumer : public VisibleDeclConsumer {
   typedef SmallVector<TypoCorrection, 1> TypoResultList;
   typedef llvm::StringMap<TypoResultList> TypoResultsMap;
@@ -139,13 +160,13 @@
     return CorrectionResults.empty() && ValidatedCorrections.size() == 1;
   }
 
-  /// \brief Return the list of TypoCorrections for the given identifier from
+  /// Return the list of TypoCorrections for the given identifier from
   /// the set of corrections that have the closest edit distance, if any.
   TypoResultList &operator[](StringRef Name) {
     return CorrectionResults.begin()->second[Name];
   }
 
-  /// \brief Return the edit distance of the corrections that have the
+  /// Return the edit distance of the corrections that have the
   /// closest/best edit distance from the original typop.
   unsigned getBestEditDistance(bool Normalized) {
     if (CorrectionResults.empty())
@@ -155,28 +176,28 @@
     return Normalized ? TypoCorrection::NormalizeEditDistance(BestED) : BestED;
   }
 
-  /// \brief Set-up method to add to the consumer the set of namespaces to use
+  /// Set-up method to add to the consumer the set of namespaces to use
   /// in performing corrections to nested name specifiers. This method also
   /// implicitly adds all of the known classes in the current AST context to the
   /// to the consumer for correcting nested name specifiers.
   void
   addNamespaces(const llvm::MapVector<NamespaceDecl *, bool> &KnownNamespaces);
 
-  /// \brief Return the next typo correction that passes all internal filters
+  /// Return the next typo correction that passes all internal filters
   /// and is deemed valid by the consumer's CorrectionCandidateCallback,
   /// starting with the corrections that have the closest edit distance. An
   /// empty TypoCorrection is returned once no more viable corrections remain
   /// in the consumer.
   const TypoCorrection &getNextCorrection();
 
-  /// \brief Get the last correction returned by getNextCorrection().
+  /// Get the last correction returned by getNextCorrection().
   const TypoCorrection &getCurrentCorrection() {
     return CurrentTCIndex < ValidatedCorrections.size()
                ? ValidatedCorrections[CurrentTCIndex]
                : ValidatedCorrections[0];  // The empty correction.
   }
 
-  /// \brief Return the next typo correction like getNextCorrection, but keep
+  /// Return the next typo correction like getNextCorrection, but keep
   /// the internal state pointed to the current correction (i.e. the next time
   /// getNextCorrection is called, it will return the same correction returned
   /// by peekNextcorrection).
@@ -187,27 +208,27 @@
     return TC;
   }
 
-  /// \brief Reset the consumer's position in the stream of viable corrections
+  /// Reset the consumer's position in the stream of viable corrections
   /// (i.e. getNextCorrection() will return each of the previously returned
   /// corrections in order before returning any new corrections).
   void resetCorrectionStream() {
     CurrentTCIndex = 0;
   }
 
-  /// \brief Return whether the end of the stream of corrections has been
+  /// Return whether the end of the stream of corrections has been
   /// reached.
   bool finished() {
     return CorrectionResults.empty() &&
            CurrentTCIndex >= ValidatedCorrections.size();
   }
 
-  /// \brief Save the current position in the correction stream (overwriting any
+  /// Save the current position in the correction stream (overwriting any
   /// previously saved position).
   void saveCurrentPosition() {
     SavedTCIndex = CurrentTCIndex;
   }
 
-  /// \brief Restore the saved position in the correction stream.
+  /// Restore the saved position in the correction stream.
   void restoreSavedPosition() {
     CurrentTCIndex = SavedTCIndex;
   }
@@ -241,7 +262,7 @@
 
     std::map<unsigned, SpecifierInfoList> DistanceMap;
 
-    /// \brief Helper for building the list of DeclContexts between the current
+    /// Helper for building the list of DeclContexts between the current
     /// context and the top of the translation unit
     static DeclContextList buildContextChain(DeclContext *Start);
 
@@ -252,11 +273,11 @@
     NamespaceSpecifierSet(ASTContext &Context, DeclContext *CurContext,
                           CXXScopeSpec *CurScopeSpec);
 
-    /// \brief Add the DeclContext (a namespace or record) to the set, computing
+    /// Add the DeclContext (a namespace or record) to the set, computing
     /// the corresponding NestedNameSpecifier and its distance in the process.
     void addNameSpecifier(DeclContext *Ctx);
 
-    /// \brief Provides flat iteration over specifiers, sorted by distance.
+    /// Provides flat iteration over specifiers, sorted by distance.
     class iterator
         : public llvm::iterator_facade_base<iterator, std::forward_iterator_tag,
                                             SpecifierInfo> {
@@ -295,21 +316,21 @@
   void addName(StringRef Name, NamedDecl *ND,
                NestedNameSpecifier *NNS = nullptr, bool isKeyword = false);
 
-  /// \brief Find any visible decls for the given typo correction candidate.
+  /// Find any visible decls for the given typo correction candidate.
   /// If none are found, it to the set of candidates for which qualified lookups
   /// will be performed to find possible nested name specifier changes.
   bool resolveCorrection(TypoCorrection &Candidate);
 
-  /// \brief Perform qualified lookups on the queued set of typo correction
+  /// Perform qualified lookups on the queued set of typo correction
   /// candidates and add the nested name specifier changes to each candidate if
   /// a lookup succeeds (at which point the candidate will be returned to the
   /// main pool of potential corrections).
   void performQualifiedLookups();
 
-  /// \brief The name written that is a typo in the source.
+  /// The name written that is a typo in the source.
   IdentifierInfo *Typo;
 
-  /// \brief The results found that have the smallest edit distance
+  /// The results found that have the smallest edit distance
   /// found (so far) with the typo name.
   ///
   /// The pointer value being set to the current DeclContext indicates
diff --git a/linux-x64/clang/include/clang/Sema/SemaLambda.h b/linux-x64/clang/include/clang/Sema/SemaLambda.h
index ec16dc8..8edb9b5 100644
--- a/linux-x64/clang/include/clang/Sema/SemaLambda.h
+++ b/linux-x64/clang/include/clang/Sema/SemaLambda.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file provides some common utility functions for processing
+/// This file provides some common utility functions for processing
 /// Lambdas.
 ///
 //===----------------------------------------------------------------------===//
@@ -24,12 +24,12 @@
 }
 class Sema;
 
-/// \brief Examines the FunctionScopeInfo stack to determine the nearest
-/// enclosing lambda (to the current lambda) that is 'capture-capable' for 
+/// Examines the FunctionScopeInfo stack to determine the nearest
+/// enclosing lambda (to the current lambda) that is 'capture-capable' for
 /// the variable referenced in the current lambda (i.e. \p VarToCapture).
 /// If successful, returns the index into Sema's FunctionScopeInfo stack
-/// of the capture-capable lambda's LambdaScopeInfo. 
-/// See Implementation for more detailed comments. 
+/// of the capture-capable lambda's LambdaScopeInfo.
+/// See Implementation for more detailed comments.
 
 Optional<unsigned> getStackIndexOfNearestEnclosingCaptureCapableLambda(
     ArrayRef<const sema::FunctionScopeInfo *> FunctionScopes,
diff --git a/linux-x64/clang/include/clang/Sema/Template.h b/linux-x64/clang/include/clang/Sema/Template.h
index 4dbb947..39b08e9 100644
--- a/linux-x64/clang/include/clang/Sema/Template.h
+++ b/linux-x64/clang/include/clang/Sema/Template.h
@@ -43,10 +43,10 @@
 class TypeSourceInfo;
 class VarDecl;
 
-  /// \brief Data structure that captures multiple levels of template argument
+  /// Data structure that captures multiple levels of template argument
   /// lists for use in template instantiation.
   ///
-  /// Multiple levels of template arguments occur when instantiating the 
+  /// Multiple levels of template arguments occur when instantiating the
   /// definitions of member templates. For example:
   ///
   /// \code
@@ -63,47 +63,47 @@
   /// list will contain a template argument list (int) at depth 0 and a
   /// template argument list (17) at depth 1.
   class MultiLevelTemplateArgumentList {
-    /// \brief The template argument list at a certain template depth 
+    /// The template argument list at a certain template depth
     using ArgList = ArrayRef<TemplateArgument>;
 
-    /// \brief The template argument lists, stored from the innermost template
+    /// The template argument lists, stored from the innermost template
     /// argument list (first) to the outermost template argument list (last).
     SmallVector<ArgList, 4> TemplateArgumentLists;
 
-    /// \brief The number of outer levels of template arguments that are not
+    /// The number of outer levels of template arguments that are not
     /// being substituted.
     unsigned NumRetainedOuterLevels = 0;
-    
+
   public:
-    /// \brief Construct an empty set of template argument lists.
+    /// Construct an empty set of template argument lists.
     MultiLevelTemplateArgumentList() = default;
-    
-    /// \brief Construct a single-level template argument list.
-    explicit 
+
+    /// Construct a single-level template argument list.
+    explicit
     MultiLevelTemplateArgumentList(const TemplateArgumentList &TemplateArgs) {
       addOuterTemplateArguments(&TemplateArgs);
     }
-    
-    /// \brief Determine the number of levels in this template argument
+
+    /// Determine the number of levels in this template argument
     /// list.
     unsigned getNumLevels() const {
       return TemplateArgumentLists.size() + NumRetainedOuterLevels;
     }
 
-    /// \brief Determine the number of substituted levels in this template
+    /// Determine the number of substituted levels in this template
     /// argument list.
     unsigned getNumSubstitutedLevels() const {
       return TemplateArgumentLists.size();
     }
 
-    /// \brief Retrieve the template argument at a given depth and index.
+    /// Retrieve the template argument at a given depth and index.
     const TemplateArgument &operator()(unsigned Depth, unsigned Index) const {
       assert(NumRetainedOuterLevels <= Depth && Depth < getNumLevels());
       assert(Index < TemplateArgumentLists[getNumLevels() - Depth - 1].size());
       return TemplateArgumentLists[getNumLevels() - Depth - 1][Index];
     }
-    
-    /// \brief Determine whether there is a non-NULL template argument at the
+
+    /// Determine whether there is a non-NULL template argument at the
     /// given depth and index.
     ///
     /// There must exist a template argument list at the given depth.
@@ -112,14 +112,14 @@
 
       if (Depth < NumRetainedOuterLevels)
         return false;
-      
+
       if (Index >= TemplateArgumentLists[getNumLevels() - Depth - 1].size())
         return false;
-      
+
       return !(*this)(Depth, Index).isNull();
     }
-    
-    /// \brief Clear out a specific template argument.
+
+    /// Clear out a specific template argument.
     void setArgument(unsigned Depth, unsigned Index,
                      TemplateArgument Arg) {
       assert(NumRetainedOuterLevels <= Depth && Depth < getNumLevels());
@@ -128,15 +128,15 @@
                 TemplateArgumentLists[getNumLevels() - Depth - 1][Index])
         = Arg;
     }
-    
-    /// \brief Add a new outermost level to the multi-level template argument 
+
+    /// Add a new outermost level to the multi-level template argument
     /// list.
     void addOuterTemplateArguments(const TemplateArgumentList *TemplateArgs) {
       addOuterTemplateArguments(ArgList(TemplateArgs->data(),
                                         TemplateArgs->size()));
     }
 
-    /// \brief Add a new outmost level to the multi-level template argument
+    /// Add a new outmost level to the multi-level template argument
     /// list.
     void addOuterTemplateArguments(ArgList Args) {
       assert(!NumRetainedOuterLevels &&
@@ -144,30 +144,30 @@
       TemplateArgumentLists.push_back(Args);
     }
 
-    /// \brief Add an outermost level that we are not substituting. We have no
+    /// Add an outermost level that we are not substituting. We have no
     /// arguments at this level, and do not remove it from the depth of inner
     /// template parameters that we instantiate.
     void addOuterRetainedLevel() {
       ++NumRetainedOuterLevels;
     }
 
-    /// \brief Retrieve the innermost template argument list.
+    /// Retrieve the innermost template argument list.
     const ArgList &getInnermost() const {
-      return TemplateArgumentLists.front(); 
+      return TemplateArgumentLists.front();
     }
   };
-  
-  /// \brief The context in which partial ordering of function templates occurs.
+
+  /// The context in which partial ordering of function templates occurs.
   enum TPOC {
-    /// \brief Partial ordering of function templates for a function call.
+    /// Partial ordering of function templates for a function call.
     TPOC_Call,
 
-    /// \brief Partial ordering of function templates for a call to a 
+    /// Partial ordering of function templates for a call to a
     /// conversion function.
     TPOC_Conversion,
 
-    /// \brief Partial ordering of function templates in other contexts, e.g.,
-    /// taking the address of a function template or matching a function 
+    /// Partial ordering of function templates in other contexts, e.g.,
+    /// taking the address of a function template or matching a function
     /// template specialization to a function template.
     TPOC_Other
   };
@@ -185,10 +185,10 @@
     operator TPOC() const { return Value; }
   };
 
-  /// \brief Captures a template argument whose value has been deduced
+  /// Captures a template argument whose value has been deduced
   /// via c++ template argument deduction.
   class DeducedTemplateArgument : public TemplateArgument {
-    /// \brief For a non-type template argument, whether the value was
+    /// For a non-type template argument, whether the value was
     /// deduced from an array bound.
     bool DeducedFromArrayBound = false;
 
@@ -199,7 +199,7 @@
                             bool DeducedFromArrayBound = false)
         : TemplateArgument(Arg), DeducedFromArrayBound(DeducedFromArrayBound) {}
 
-    /// \brief Construct an integral non-type template argument that
+    /// Construct an integral non-type template argument that
     /// has been deduced, possibly from an array bound.
     DeducedTemplateArgument(ASTContext &Ctx,
                             const llvm::APSInt &Value,
@@ -208,18 +208,18 @@
         : TemplateArgument(Ctx, Value, ValueType),
           DeducedFromArrayBound(DeducedFromArrayBound) {}
 
-    /// \brief For a non-type template argument, determine whether the
+    /// For a non-type template argument, determine whether the
     /// template argument was deduced from an array bound.
     bool wasDeducedFromArrayBound() const { return DeducedFromArrayBound; }
 
-    /// \brief Specify whether the given non-type template argument
+    /// Specify whether the given non-type template argument
     /// was deduced from an array bound.
     void setDeducedFromArrayBound(bool Deduced) {
       DeducedFromArrayBound = Deduced;
     }
   };
 
-  /// \brief A stack-allocated class that identifies which local
+  /// A stack-allocated class that identifies which local
   /// variable declaration instantiations are present in this scope.
   ///
   /// A new instance of this class type will be created whenever we
@@ -227,11 +227,11 @@
   /// set of parameter declarations.
   class LocalInstantiationScope {
   public:
-    /// \brief A set of declarations.
+    /// A set of declarations.
     using DeclArgumentPack = SmallVector<ParmVarDecl *, 4>;
 
   private:
-    /// \brief Reference to the semantic analysis that is performing
+    /// Reference to the semantic analysis that is performing
     /// this template instantiation.
     Sema &SemaRef;
 
@@ -239,7 +239,7 @@
         llvm::SmallDenseMap<const Decl *,
                             llvm::PointerUnion<Decl *, DeclArgumentPack *>, 4>;
 
-    /// \brief A mapping from local declarations that occur
+    /// A mapping from local declarations that occur
     /// within a template to their instantiations.
     ///
     /// This mapping is used during instantiation to keep track of,
@@ -259,31 +259,31 @@
     /// pointer.
     LocalDeclsMap LocalDecls;
 
-    /// \brief The set of argument packs we've allocated.
+    /// The set of argument packs we've allocated.
     SmallVector<DeclArgumentPack *, 1> ArgumentPacks;
-    
-    /// \brief The outer scope, which contains local variable
+
+    /// The outer scope, which contains local variable
     /// definitions from some other instantiation (that may not be
     /// relevant to this particular scope).
     LocalInstantiationScope *Outer;
 
-    /// \brief Whether we have already exited this scope.
+    /// Whether we have already exited this scope.
     bool Exited = false;
 
-    /// \brief Whether to combine this scope with the outer scope, such that
+    /// Whether to combine this scope with the outer scope, such that
     /// lookup will search our outer scope.
     bool CombineWithOuterScope;
-    
-    /// \brief If non-NULL, the template parameter pack that has been
+
+    /// If non-NULL, the template parameter pack that has been
     /// partially substituted per C++0x [temp.arg.explicit]p9.
     NamedDecl *PartiallySubstitutedPack = nullptr;
-    
-    /// \brief If \c PartiallySubstitutedPack is non-null, the set of
+
+    /// If \c PartiallySubstitutedPack is non-null, the set of
     /// explicitly-specified template arguments in that pack.
-    const TemplateArgument *ArgsInPartiallySubstitutedPack;    
-    
-    /// \brief If \c PartiallySubstitutedPack, the number of 
-    /// explicitly-specified template arguments in 
+    const TemplateArgument *ArgsInPartiallySubstitutedPack;
+
+    /// If \c PartiallySubstitutedPack, the number of
+    /// explicitly-specified template arguments in
     /// ArgsInPartiallySubstitutedPack.
     unsigned NumArgsInPartiallySubstitutedPack;
 
@@ -301,22 +301,22 @@
     ~LocalInstantiationScope() {
       Exit();
     }
-    
+
     const Sema &getSema() const { return SemaRef; }
 
-    /// \brief Exit this local instantiation scope early.
+    /// Exit this local instantiation scope early.
     void Exit() {
       if (Exited)
         return;
-      
+
       for (unsigned I = 0, N = ArgumentPacks.size(); I != N; ++I)
         delete ArgumentPacks[I];
-        
+
       SemaRef.CurrentInstantiationScope = Outer;
       Exited = true;
     }
 
-    /// \brief Clone this scope, and all outer scopes, down to the given
+    /// Clone this scope, and all outer scopes, down to the given
     /// outermost scope.
     LocalInstantiationScope *cloneScopes(LocalInstantiationScope *Outermost) {
       if (this == Outermost) return this;
@@ -356,7 +356,7 @@
       return newScope;
     }
 
-    /// \brief deletes the given scope, and all otuer scopes, down to the
+    /// deletes the given scope, and all otuer scopes, down to the
     /// given outermost scope.
     static void deleteScopes(LocalInstantiationScope *Scope,
                              LocalInstantiationScope *Outermost) {
@@ -367,7 +367,7 @@
       }
     }
 
-    /// \brief Find the instantiation of the declaration D within the current
+    /// Find the instantiation of the declaration D within the current
     /// instantiation scope.
     ///
     /// \param D The declaration whose instantiation we are searching for.
@@ -381,9 +381,9 @@
     void InstantiatedLocal(const Decl *D, Decl *Inst);
     void InstantiatedLocalPackArg(const Decl *D, ParmVarDecl *Inst);
     void MakeInstantiatedLocalArgPack(const Decl *D);
-    
-    /// \brief Note that the given parameter pack has been partially substituted
-    /// via explicit specification of template arguments 
+
+    /// Note that the given parameter pack has been partially substituted
+    /// via explicit specification of template arguments
     /// (C++0x [temp.arg.explicit]p9).
     ///
     /// \param Pack The parameter pack, which will always be a template
@@ -394,11 +394,11 @@
     ///
     /// \param NumExplicitArgs The number of explicitly-specified template
     /// arguments provided for this parameter pack.
-    void SetPartiallySubstitutedPack(NamedDecl *Pack, 
+    void SetPartiallySubstitutedPack(NamedDecl *Pack,
                                      const TemplateArgument *ExplicitArgs,
                                      unsigned NumExplicitArgs);
 
-    /// \brief Reset the partially-substituted pack when it is no longer of
+    /// Reset the partially-substituted pack when it is no longer of
     /// interest.
     void ResetPartiallySubstitutedPack() {
       assert(PartiallySubstitutedPack && "No partially-substituted pack");
@@ -407,7 +407,7 @@
       NumArgsInPartiallySubstitutedPack = 0;
     }
 
-    /// \brief Retrieve the partially-substitued template parameter pack.
+    /// Retrieve the partially-substitued template parameter pack.
     ///
     /// If there is no partially-substituted parameter pack, returns NULL.
     NamedDecl *
@@ -416,7 +416,7 @@
   };
 
   class TemplateDeclInstantiator
-    : public DeclVisitor<TemplateDeclInstantiator, Decl *> 
+    : public DeclVisitor<TemplateDeclInstantiator, Decl *>
   {
     Sema &SemaRef;
     Sema::ArgumentPackSubstitutionIndexRAII SubstIndex;
@@ -425,14 +425,14 @@
     Sema::LateInstantiatedAttrVec* LateAttrs = nullptr;
     LocalInstantiationScope *StartingScope = nullptr;
 
-    /// \brief A list of out-of-line class template partial
+    /// A list of out-of-line class template partial
     /// specializations that will need to be instantiated after the
     /// enclosing class's instantiation is complete.
     SmallVector<std::pair<ClassTemplateDecl *,
                                 ClassTemplatePartialSpecializationDecl *>, 4>
       OutOfLinePartialSpecs;
 
-    /// \brief A list of out-of-line variable template partial
+    /// A list of out-of-line variable template partial
     /// specializations that will need to be instantiated after the
     /// enclosing variable's instantiation is complete.
     /// FIXME: Verify that this is needed.
@@ -504,7 +504,7 @@
     using delayed_var_partial_spec_iterator = SmallVectorImpl<std::pair<
         VarTemplateDecl *, VarTemplatePartialSpecializationDecl *>>::iterator;
 
-    /// \brief Return an iterator to the beginning of the set of
+    /// Return an iterator to the beginning of the set of
     /// "delayed" partial specializations, which must be passed to
     /// InstantiateClassTemplatePartialSpecialization once the class
     /// definition has been completed.
@@ -516,7 +516,7 @@
       return OutOfLineVarPartialSpecs.begin();
     }
 
-    /// \brief Return an iterator to the end of the set of
+    /// Return an iterator to the end of the set of
     /// "delayed" partial specializations, which must be passed to
     /// InstantiateClassTemplatePartialSpecialization once the class
     /// definition has been completed.
@@ -562,7 +562,7 @@
     template<typename T>
     Decl *instantiateUnresolvedUsingDecl(T *D,
                                          bool InstantiatingPackElement = false);
-  };  
+  };
 
 } // namespace clang
 
diff --git a/linux-x64/clang/include/clang/Sema/TemplateDeduction.h b/linux-x64/clang/include/clang/Sema/TemplateDeduction.h
index 41e175b..93395b4 100644
--- a/linux-x64/clang/include/clang/Sema/TemplateDeduction.h
+++ b/linux-x64/clang/include/clang/Sema/TemplateDeduction.h
@@ -34,24 +34,28 @@
 
 namespace sema {
 
-/// \brief Provides information about an attempted template argument
+/// Provides information about an attempted template argument
 /// deduction, whose success or failure was described by a
 /// TemplateDeductionResult value.
 class TemplateDeductionInfo {
-  /// \brief The deduced template argument list.
+  /// The deduced template argument list.
   TemplateArgumentList *Deduced = nullptr;
 
-  /// \brief The source location at which template argument
+  /// The source location at which template argument
   /// deduction is occurring.
   SourceLocation Loc;
 
-  /// \brief Have we suppressed an error during deduction?
+  /// Have we suppressed an error during deduction?
   bool HasSFINAEDiagnostic = false;
 
-  /// \brief The template parameter depth for which we're performing deduction.
+  /// The template parameter depth for which we're performing deduction.
   unsigned DeducedDepth;
 
-  /// \brief Warnings (and follow-on notes) that were suppressed due to
+  /// The number of parameters with explicitly-specified template arguments,
+  /// up to and including the partially-specified pack (if any).
+  unsigned ExplicitArgs = 0;
+
+  /// Warnings (and follow-on notes) that were suppressed due to
   /// SFINAE while performing template argument deduction.
   SmallVector<PartialDiagnosticAt, 4> SuppressedDiagnostics;
 
@@ -61,26 +65,31 @@
   TemplateDeductionInfo(const TemplateDeductionInfo &) = delete;
   TemplateDeductionInfo &operator=(const TemplateDeductionInfo &) = delete;
 
-  /// \brief Returns the location at which template argument is
+  /// Returns the location at which template argument is
   /// occurring.
   SourceLocation getLocation() const {
     return Loc;
   }
 
-  /// \brief The depth of template parameters for which deduction is being
+  /// The depth of template parameters for which deduction is being
   /// performed.
   unsigned getDeducedDepth() const {
     return DeducedDepth;
   }
 
-  /// \brief Take ownership of the deduced template argument list.
+  /// Get the number of explicitly-specified arguments.
+  unsigned getNumExplicitArgs() const {
+    return ExplicitArgs;
+  }
+
+  /// Take ownership of the deduced template argument list.
   TemplateArgumentList *take() {
     TemplateArgumentList *Result = Deduced;
     Deduced = nullptr;
     return Result;
   }
 
-  /// \brief Take ownership of the SFINAE diagnostic.
+  /// Take ownership of the SFINAE diagnostic.
   void takeSFINAEDiagnostic(PartialDiagnosticAt &PD) {
     assert(HasSFINAEDiagnostic);
     PD.first = SuppressedDiagnostics.front().first;
@@ -88,7 +97,7 @@
     clearSFINAEDiagnostic();
   }
 
-  /// \brief Discard any SFINAE diagnostics.
+  /// Discard any SFINAE diagnostics.
   void clearSFINAEDiagnostic() {
     SuppressedDiagnostics.clear();
     HasSFINAEDiagnostic = false;
@@ -100,18 +109,25 @@
     return SuppressedDiagnostics.front();
   }
 
-  /// \brief Provide a new template argument list that contains the
+  /// Provide an initial template argument list that contains the
+  /// explicitly-specified arguments.
+  void setExplicitArgs(TemplateArgumentList *NewDeduced) {
+    Deduced = NewDeduced;
+    ExplicitArgs = Deduced->size();
+  }
+
+  /// Provide a new template argument list that contains the
   /// results of template argument deduction.
   void reset(TemplateArgumentList *NewDeduced) {
     Deduced = NewDeduced;
   }
 
-  /// \brief Is a SFINAE diagnostic available?
+  /// Is a SFINAE diagnostic available?
   bool hasSFINAEDiagnostic() const {
     return HasSFINAEDiagnostic;
   }
 
-  /// \brief Set the diagnostic which caused the SFINAE failure.
+  /// Set the diagnostic which caused the SFINAE failure.
   void addSFINAEDiagnostic(SourceLocation Loc, PartialDiagnostic PD) {
     // Only collect the first diagnostic.
     if (HasSFINAEDiagnostic)
@@ -121,7 +137,7 @@
     HasSFINAEDiagnostic = true;
   }
 
-  /// \brief Add a new diagnostic to the set of diagnostics
+  /// Add a new diagnostic to the set of diagnostics
   void addSuppressedDiagnostic(SourceLocation Loc,
                                PartialDiagnostic PD) {
     if (HasSFINAEDiagnostic)
@@ -129,18 +145,18 @@
     SuppressedDiagnostics.emplace_back(Loc, std::move(PD));
   }
 
-  /// \brief Iterator over the set of suppressed diagnostics.
+  /// Iterator over the set of suppressed diagnostics.
   using diag_iterator = SmallVectorImpl<PartialDiagnosticAt>::const_iterator;
 
-  /// \brief Returns an iterator at the beginning of the sequence of suppressed
+  /// Returns an iterator at the beginning of the sequence of suppressed
   /// diagnostics.
   diag_iterator diag_begin() const { return SuppressedDiagnostics.begin(); }
 
-  /// \brief Returns an iterator at the end of the sequence of suppressed
+  /// Returns an iterator at the end of the sequence of suppressed
   /// diagnostics.
   diag_iterator diag_end() const { return SuppressedDiagnostics.end(); }
 
-  /// \brief The template parameter to which a template argument
+  /// The template parameter to which a template argument
   /// deduction failure refers.
   ///
   /// Depending on the result of template argument deduction, this
@@ -149,16 +165,22 @@
   ///   TDK_Incomplete: this is the first template parameter whose
   ///   corresponding template argument was not deduced.
   ///
+  ///   TDK_IncompletePack: this is the expanded parameter pack for
+  ///   which we deduced too few arguments.
+  ///
   ///   TDK_Inconsistent: this is the template parameter for which
   ///   two different template argument values were deduced.
   TemplateParameter Param;
 
-  /// \brief The first template argument to which the template
+  /// The first template argument to which the template
   /// argument deduction failure refers.
   ///
   /// Depending on the result of the template argument deduction,
   /// this template argument may have different meanings:
   ///
+  ///   TDK_IncompletePack: this is the number of arguments we deduced
+  ///   for the pack.
+  ///
   ///   TDK_Inconsistent: this argument is the first value deduced
   ///   for the corresponding template parameter.
   ///
@@ -172,7 +194,7 @@
   ///   of the deduction, directly provided in the source code.
   TemplateArgument FirstArg;
 
-  /// \brief The second template argument to which the template
+  /// The second template argument to which the template
   /// argument deduction failure refers.
   ///
   ///   TDK_Inconsistent: this argument is the second value deduced
@@ -186,14 +208,14 @@
   /// FIXME: Finish documenting this.
   TemplateArgument SecondArg;
 
-  /// \brief The index of the function argument that caused a deduction
+  /// The index of the function argument that caused a deduction
   /// failure.
   ///
   ///   TDK_DeducedMismatch: this is the index of the argument that had a
   ///   different argument type from its substituted parameter type.
   unsigned CallArgIndex = 0;
 
-  /// \brief Information on packs that we're currently expanding.
+  /// Information on packs that we're currently expanding.
   ///
   /// FIXME: This should be kept internal to SemaTemplateDeduction.
   SmallVector<DeducedPack *, 8> PendingDeducedPacks;
@@ -207,41 +229,41 @@
   /// A Sema::TemplateDeductionResult.
   unsigned Result : 8;
 
-  /// \brief Indicates whether a diagnostic is stored in Diagnostic.
+  /// Indicates whether a diagnostic is stored in Diagnostic.
   unsigned HasDiagnostic : 1;
 
-  /// \brief Opaque pointer containing additional data about
+  /// Opaque pointer containing additional data about
   /// this deduction failure.
   void *Data;
 
-  /// \brief A diagnostic indicating why deduction failed.
+  /// A diagnostic indicating why deduction failed.
   alignas(PartialDiagnosticAt) char Diagnostic[sizeof(PartialDiagnosticAt)];
 
-  /// \brief Retrieve the diagnostic which caused this deduction failure,
+  /// Retrieve the diagnostic which caused this deduction failure,
   /// if any.
   PartialDiagnosticAt *getSFINAEDiagnostic();
 
-  /// \brief Retrieve the template parameter this deduction failure
+  /// Retrieve the template parameter this deduction failure
   /// refers to, if any.
   TemplateParameter getTemplateParameter();
 
-  /// \brief Retrieve the template argument list associated with this
+  /// Retrieve the template argument list associated with this
   /// deduction failure, if any.
   TemplateArgumentList *getTemplateArgumentList();
 
-  /// \brief Return the first template argument this deduction failure
+  /// Return the first template argument this deduction failure
   /// refers to, if any.
   const TemplateArgument *getFirstArg();
 
-  /// \brief Return the second template argument this deduction failure
+  /// Return the second template argument this deduction failure
   /// refers to, if any.
   const TemplateArgument *getSecondArg();
 
-  /// \brief Return the index of the call argument that this deduction
+  /// Return the index of the call argument that this deduction
   /// failure refers to, if any.
   llvm::Optional<unsigned> getCallArgIndex();
 
-  /// \brief Free any memory associated with this deduction failure.
+  /// Free any memory associated with this deduction failure.
   void Destroy();
 };
 
@@ -253,7 +275,7 @@
 /// TODO: In the future, we may need to unify/generalize this with
 /// OverloadCandidate.
 struct TemplateSpecCandidate {
-  /// \brief The declaration that was looked up, together with its access.
+  /// The declaration that was looked up, together with its access.
   /// Might be a UsingShadowDecl, but usually a FunctionTemplateDecl.
   DeclAccessPair FoundDecl;
 
@@ -299,7 +321,7 @@
 
   SourceLocation getLocation() const { return Loc; }
 
-  /// \brief Clear out all of the candidates.
+  /// Clear out all of the candidates.
   /// TODO: This may be unnecessary.
   void clear();
 
@@ -311,7 +333,7 @@
   size_t size() const { return Candidates.size(); }
   bool empty() const { return Candidates.empty(); }
 
-  /// \brief Add a new candidate with NumConversions conversion sequence slots
+  /// Add a new candidate with NumConversions conversion sequence slots
   /// to the overload set.
   TemplateSpecCandidate &addCandidate() {
     Candidates.emplace_back();
diff --git a/linux-x64/clang/include/clang/Sema/TemplateInstCallback.h b/linux-x64/clang/include/clang/Sema/TemplateInstCallback.h
index 14a3d0b..dc729d5 100644
--- a/linux-x64/clang/include/clang/Sema/TemplateInstCallback.h
+++ b/linux-x64/clang/include/clang/Sema/TemplateInstCallback.h
@@ -19,23 +19,23 @@
 
 namespace clang {
 
-/// \brief This is a base class for callbacks that will be notified at every
+/// This is a base class for callbacks that will be notified at every
 /// template instantiation.
 class TemplateInstantiationCallback {
 public:
   virtual ~TemplateInstantiationCallback() = default;
 
-  /// \brief Called before doing AST-parsing.
+  /// Called before doing AST-parsing.
   virtual void initialize(const Sema &TheSema) = 0;
 
-  /// \brief Called after AST-parsing is completed.
+  /// Called after AST-parsing is completed.
   virtual void finalize(const Sema &TheSema) = 0;
 
-  /// \brief Called when instantiation of a template just began.
+  /// Called when instantiation of a template just began.
   virtual void atTemplateBegin(const Sema &TheSema,
                                const Sema::CodeSynthesisContext &Inst) = 0;
 
-  /// \brief Called when instantiation of a template is just about to end.
+  /// Called when instantiation of a template is just about to end.
   virtual void atTemplateEnd(const Sema &TheSema,
                              const Sema::CodeSynthesisContext &Inst) = 0;
 };
diff --git a/linux-x64/clang/include/clang/Sema/TypoCorrection.h b/linux-x64/clang/include/clang/Sema/TypoCorrection.h
index a5cd5f9..d8fe827 100644
--- a/linux-x64/clang/include/clang/Sema/TypoCorrection.h
+++ b/linux-x64/clang/include/clang/Sema/TypoCorrection.h
@@ -39,7 +39,7 @@
 class NestedNameSpecifier;
 class Sema;
 
-/// @brief Simple class containing the result of Sema::CorrectTypo
+/// Simple class containing the result of Sema::CorrectTypo
 class TypoCorrection {
 public:
   // "Distance" for unusable corrections
@@ -81,14 +81,14 @@
 
   TypoCorrection() = default;
 
-  /// \brief Gets the DeclarationName of the typo correction
+  /// Gets the DeclarationName of the typo correction
   DeclarationName getCorrection() const { return CorrectionName; }
 
   IdentifierInfo *getCorrectionAsIdentifierInfo() const {
     return CorrectionName.getAsIdentifierInfo();
   }
 
-  /// \brief Gets the NestedNameSpecifier needed to use the typo correction
+  /// Gets the NestedNameSpecifier needed to use the typo correction
   NestedNameSpecifier *getCorrectionSpecifier() const {
     return CorrectionNameSpec;
   }
@@ -123,7 +123,7 @@
     return (ED + CharDistanceWeight / 2) / CharDistanceWeight;
   }
 
-  /// \brief Gets the "edit distance" of the typo correction from the typo.
+  /// Gets the "edit distance" of the typo correction from the typo.
   /// If Normalized is true, scale the distance down by the CharDistanceWeight
   /// to return the edit distance in terms of single-character edits.
   unsigned getEditDistance(bool Normalized = true) const {
@@ -142,13 +142,13 @@
     return Normalized ? NormalizeEditDistance(ED) : ED;
   }
 
-  /// \brief Get the correction declaration found by name lookup (before we
+  /// Get the correction declaration found by name lookup (before we
   /// looked through using shadow declarations and the like).
   NamedDecl *getFoundDecl() const {
     return hasCorrectionDecl() ? *(CorrectionDecls.begin()) : nullptr;
   }
 
-  /// \brief Gets the pointer to the declaration of the typo correction
+  /// Gets the pointer to the declaration of the typo correction
   NamedDecl *getCorrectionDecl() const {
     auto *D = getFoundDecl();
     return D ? D->getUnderlyingDecl() : nullptr;
@@ -158,24 +158,24 @@
     return dyn_cast_or_null<DeclClass>(getCorrectionDecl());
   }
 
-  /// \brief Clears the list of NamedDecls.
+  /// Clears the list of NamedDecls.
   void ClearCorrectionDecls() {
     CorrectionDecls.clear();
   }
 
-  /// \brief Clears the list of NamedDecls before adding the new one.
+  /// Clears the list of NamedDecls before adding the new one.
   void setCorrectionDecl(NamedDecl *CDecl) {
     CorrectionDecls.clear();
     addCorrectionDecl(CDecl);
   }
 
-  /// \brief Clears the list of NamedDecls and adds the given set.
+  /// Clears the list of NamedDecls and adds the given set.
   void setCorrectionDecls(ArrayRef<NamedDecl*> Decls) {
     CorrectionDecls.clear();
     CorrectionDecls.insert(CorrectionDecls.begin(), Decls.begin(), Decls.end());
   }
 
-  /// \brief Add the given NamedDecl to the list of NamedDecls that are the
+  /// Add the given NamedDecl to the list of NamedDecls that are the
   /// declarations associated with the DeclarationName of this TypoCorrection
   void addCorrectionDecl(NamedDecl *CDecl);
 
@@ -185,10 +185,10 @@
     return "'" + getAsString(LO) + "'";
   }
 
-  /// \brief Returns whether this TypoCorrection has a non-empty DeclarationName
+  /// Returns whether this TypoCorrection has a non-empty DeclarationName
   explicit operator bool() const { return bool(CorrectionName); }
 
-  /// \brief Mark this TypoCorrection as being a keyword.
+  /// Mark this TypoCorrection as being a keyword.
   /// Since addCorrectionDeclsand setCorrectionDecl don't allow NULL to be
   /// added to the list of the correction's NamedDecl pointers, NULL is added
   /// as the only element in the list to mark this TypoCorrection as a keyword.
@@ -244,7 +244,7 @@
 
   const_decl_iterator end() const { return CorrectionDecls.end(); }
 
-  /// \brief Returns whether this typo correction is correcting to a
+  /// Returns whether this typo correction is correcting to a
   /// declaration that was declared in a module that has not been imported.
   bool requiresImport() const { return RequiresImport; }
   void setRequiresImport(bool Req) { RequiresImport = Req; }
@@ -277,7 +277,7 @@
   std::vector<PartialDiagnostic> ExtraDiagnostics;
 };
 
-/// @brief Base class for callback objects used by Sema::CorrectTypo to check
+/// Base class for callback objects used by Sema::CorrectTypo to check
 /// the validity of a potential typo correction.
 class CorrectionCandidateCallback {
 public:
@@ -289,11 +289,11 @@
 
   virtual ~CorrectionCandidateCallback() = default;
 
-  /// \brief Simple predicate used by the default RankCandidate to
+  /// Simple predicate used by the default RankCandidate to
   /// determine whether to return an edit distance of 0 or InvalidDistance.
-  /// This can be overrided by validators that only need to determine if a
+  /// This can be overridden by validators that only need to determine if a
   /// candidate is viable, without ranking potentially viable candidates.
-  /// Only ValidateCandidate or RankCandidate need to be overriden by a
+  /// Only ValidateCandidate or RankCandidate need to be overridden by a
   /// callback wishing to check the viability of correction candidates.
   /// The default predicate always returns true if the candidate is not a type
   /// name or keyword, true for types if WantTypeSpecifiers is true, and true
@@ -301,7 +301,7 @@
   /// WantCXXNamedCasts, WantRemainingKeywords, or WantObjCSuper is true.
   virtual bool ValidateCandidate(const TypoCorrection &candidate);
 
-  /// \brief Method used by Sema::CorrectTypo to assign an "edit distance" rank
+  /// Method used by Sema::CorrectTypo to assign an "edit distance" rank
   /// to a candidate (where a lower value represents a better candidate), or
   /// returning InvalidDistance if the candidate is not at all viable. For
   /// validation callbacks that only need to determine if a candidate is viable,
@@ -343,7 +343,7 @@
   NestedNameSpecifier *TypoNNS;
 };
 
-/// @brief Simple template class for restricting typo correction candidates
+/// Simple template class for restricting typo correction candidates
 /// to ones having a single Decl* of the given type.
 template <class C>
 class DeclFilterCCC : public CorrectionCandidateCallback {
@@ -353,7 +353,7 @@
   }
 };
 
-// @brief Callback class to limit the allowed keywords and to only accept typo
+// Callback class to limit the allowed keywords and to only accept typo
 // corrections that are keywords or whose decls refer to functions (or template
 // functions) that accept the given number of arguments.
 class FunctionCallFilterCCC : public CorrectionCandidateCallback {
@@ -371,7 +371,7 @@
   MemberExpr *MemberFn;
 };
 
-// @brief Callback class that effectively disabled typo correction
+// Callback class that effectively disabled typo correction
 class NoTypoCorrectionCCC : public CorrectionCandidateCallback {
 public:
   NoTypoCorrectionCCC() {
diff --git a/linux-x64/clang/include/clang/Sema/Weak.h b/linux-x64/clang/include/clang/Sema/Weak.h
index 9c7212e..115e97b 100644
--- a/linux-x64/clang/include/clang/Sema/Weak.h
+++ b/linux-x64/clang/include/clang/Sema/Weak.h
@@ -21,7 +21,7 @@
 
 class IdentifierInfo;
 
-/// \brief Captures information about a \#pragma weak directive.
+/// Captures information about a \#pragma weak directive.
 class WeakInfo {
   IdentifierInfo *alias;  // alias (optional)
   SourceLocation loc;     // for diagnostics
diff --git a/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h b/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
index 1f4e034..430fc48 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTBitCodes.h
@@ -31,7 +31,7 @@
 namespace clang {
 namespace serialization {
 
-    /// \brief AST file major version number supported by this version of
+    /// AST file major version number supported by this version of
     /// Clang.
     ///
     /// Whenever the AST file format changes in a way that makes it
@@ -42,9 +42,9 @@
     /// Version 4 of AST files also requires that the version control branch and
     /// revision match exactly, since there is no backward compatibility of
     /// AST files at this time.
-    const unsigned VERSION_MAJOR = 6;
+    const unsigned VERSION_MAJOR = 7;
 
-    /// \brief AST file minor version number supported by this version of
+    /// AST file minor version number supported by this version of
     /// Clang.
     ///
     /// Whenever the AST format changes in a way that is still
@@ -54,17 +54,17 @@
     /// should be increased.
     const unsigned VERSION_MINOR = 0;
 
-    /// \brief An ID number that refers to an identifier in an AST file.
-    /// 
+    /// An ID number that refers to an identifier in an AST file.
+    ///
     /// The ID numbers of identifiers are consecutive (in order of discovery)
     /// and start at 1. 0 is reserved for NULL.
     using IdentifierID = uint32_t;
-    
-    /// \brief An ID number that refers to a declaration in an AST file.
+
+    /// An ID number that refers to a declaration in an AST file.
     ///
     /// The ID numbers of declarations are consecutive (in order of
-    /// discovery), with values below NUM_PREDEF_DECL_IDS being reserved. 
-    /// At the start of a chain of precompiled headers, declaration ID 1 is 
+    /// discovery), with values below NUM_PREDEF_DECL_IDS being reserved.
+    /// At the start of a chain of precompiled headers, declaration ID 1 is
     /// used for the translation unit declaration.
     using DeclID = uint32_t;
 
@@ -73,7 +73,7 @@
     using LocalDeclID = DeclID;
     using GlobalDeclID = DeclID;
 
-    /// \brief An ID number that refers to a type in an AST file.
+    /// An ID number that refers to a type in an AST file.
     ///
     /// The ID of a type is partitioned into two parts: the lower
     /// three bits are used to store the const/volatile/restrict
@@ -85,7 +85,7 @@
     /// other types that have serialized representations.
     using TypeID = uint32_t;
 
-    /// \brief A type index; the type ID with the qualifier bits removed.
+    /// A type index; the type ID with the qualifier bits removed.
     class TypeIdx {
       uint32_t Idx = 0;
 
@@ -98,14 +98,14 @@
       TypeID asTypeID(unsigned FastQuals) const {
         if (Idx == uint32_t(-1))
           return TypeID(-1);
-        
+
         return (Idx << Qualifiers::FastWidth) | FastQuals;
       }
 
       static TypeIdx fromTypeID(TypeID ID) {
         if (ID == TypeID(-1))
           return TypeIdx(-1);
-        
+
         return TypeIdx(ID >> Qualifiers::FastWidth);
       }
     };
@@ -124,65 +124,65 @@
       }
 
       static unsigned getHashValue(QualType T) {
-        assert(!T.getLocalFastQualifiers() && 
+        assert(!T.getLocalFastQualifiers() &&
                "hash invalid for types with fast quals");
         uintptr_t v = reinterpret_cast<uintptr_t>(T.getAsOpaquePtr());
         return (unsigned(v) >> 4) ^ (unsigned(v) >> 9);
       }
     };
 
-    /// \brief An ID number that refers to an identifier in an AST file.
+    /// An ID number that refers to an identifier in an AST file.
     using IdentID = uint32_t;
 
-    /// \brief The number of predefined identifier IDs.
+    /// The number of predefined identifier IDs.
     const unsigned int NUM_PREDEF_IDENT_IDS = 1;
 
-    /// \brief An ID number that refers to a macro in an AST file.
+    /// An ID number that refers to a macro in an AST file.
     using MacroID = uint32_t;
 
-    /// \brief A global ID number that refers to a macro in an AST file.
+    /// A global ID number that refers to a macro in an AST file.
     using GlobalMacroID = uint32_t;
 
-    /// \brief A local to a module ID number that refers to a macro in an
+    /// A local to a module ID number that refers to a macro in an
     /// AST file.
     using LocalMacroID = uint32_t;
 
-    /// \brief The number of predefined macro IDs.
+    /// The number of predefined macro IDs.
     const unsigned int NUM_PREDEF_MACRO_IDS = 1;
 
-    /// \brief An ID number that refers to an ObjC selector in an AST file.
+    /// An ID number that refers to an ObjC selector in an AST file.
     using SelectorID = uint32_t;
 
-    /// \brief The number of predefined selector IDs.
+    /// The number of predefined selector IDs.
     const unsigned int NUM_PREDEF_SELECTOR_IDS = 1;
-    
-    /// \brief An ID number that refers to a set of CXXBaseSpecifiers in an 
+
+    /// An ID number that refers to a set of CXXBaseSpecifiers in an
     /// AST file.
     using CXXBaseSpecifiersID = uint32_t;
 
-    /// \brief An ID number that refers to a list of CXXCtorInitializers in an
+    /// An ID number that refers to a list of CXXCtorInitializers in an
     /// AST file.
     using CXXCtorInitializersID = uint32_t;
 
-    /// \brief An ID number that refers to an entity in the detailed
+    /// An ID number that refers to an entity in the detailed
     /// preprocessing record.
     using PreprocessedEntityID = uint32_t;
 
-    /// \brief An ID number that refers to a submodule in a module file.
+    /// An ID number that refers to a submodule in a module file.
     using SubmoduleID = uint32_t;
-    
-    /// \brief The number of predefined submodule IDs.
+
+    /// The number of predefined submodule IDs.
     const unsigned int NUM_PREDEF_SUBMODULE_IDS = 1;
 
-    /// \brief Source range/offset of a preprocessed entity.
+    /// Source range/offset of a preprocessed entity.
     struct PPEntityOffset {
-      /// \brief Raw source location of beginning of range.
+      /// Raw source location of beginning of range.
       unsigned Begin;
 
-      /// \brief Raw source location of end of range.
+      /// Raw source location of end of range.
       unsigned End;
 
-      /// \brief Offset in the AST file.
+      /// Offset in the AST file.
       uint32_t BitOffset;
 
       PPEntityOffset(SourceRange R, uint32_t BitOffset)
@@ -198,11 +198,11 @@
       }
     };
 
-    /// \brief Source range of a skipped preprocessor region
+    /// Source range of a skipped preprocessor region
     struct PPSkippedRange {
-      /// \brief Raw source location of beginning of range.
+      /// Raw source location of beginning of range.
       unsigned Begin;
-      /// \brief Raw source location of end of range.
+      /// Raw source location of end of range.
       unsigned End;
 
       PPSkippedRange(SourceRange R)
@@ -217,12 +217,12 @@
       }
     };
 
-    /// \brief Source range/offset of a preprocessed entity.
+    /// Source range/offset of a preprocessed entity.
     struct DeclOffset {
-      /// \brief Raw source location.
+      /// Raw source location.
       unsigned Loc = 0;
 
-      /// \brief Offset in the AST file.
+      /// Offset in the AST file.
       uint32_t BitOffset = 0;
 
       DeclOffset() = default;
@@ -238,56 +238,56 @@
       }
     };
 
-    /// \brief The number of predefined preprocessed entity IDs.
+    /// The number of predefined preprocessed entity IDs.
     const unsigned int NUM_PREDEF_PP_ENTITY_IDS = 1;
 
-    /// \brief Describes the various kinds of blocks that occur within
+    /// Describes the various kinds of blocks that occur within
     /// an AST file.
     enum BlockIDs {
-      /// \brief The AST block, which acts as a container around the
+      /// The AST block, which acts as a container around the
       /// full AST block.
       AST_BLOCK_ID = llvm::bitc::FIRST_APPLICATION_BLOCKID,
 
-      /// \brief The block containing information about the source
+      /// The block containing information about the source
       /// manager.
       SOURCE_MANAGER_BLOCK_ID,
 
-      /// \brief The block containing information about the
+      /// The block containing information about the
       /// preprocessor.
       PREPROCESSOR_BLOCK_ID,
 
-      /// \brief The block containing the definitions of all of the
+      /// The block containing the definitions of all of the
       /// types and decls used within the AST file.
       DECLTYPES_BLOCK_ID,
 
-      /// \brief The block containing the detailed preprocessing record.
+      /// The block containing the detailed preprocessing record.
       PREPROCESSOR_DETAIL_BLOCK_ID,
 
-      /// \brief The block containing the submodule structure.
+      /// The block containing the submodule structure.
       SUBMODULE_BLOCK_ID,
 
-      /// \brief The block containing comments.
+      /// The block containing comments.
       COMMENTS_BLOCK_ID,
 
-      /// \brief The control block, which contains all of the
+      /// The control block, which contains all of the
       /// information that needs to be validated prior to committing
       /// to loading the AST file.
       CONTROL_BLOCK_ID,
 
-      /// \brief The block of input files, which were used as inputs
+      /// The block of input files, which were used as inputs
       /// to create this AST file.
       ///
       /// This block is part of the control block.
       INPUT_FILES_BLOCK_ID,
 
-      /// \brief The block of configuration options, used to check that
+      /// The block of configuration options, used to check that
       /// a module is being used in a configuration compatible with the
       /// configuration in which it was built.
       ///
       /// This block is part of the control block.
       OPTIONS_BLOCK_ID,
 
-      /// \brief A block containing a module file extension.
+      /// A block containing a module file extension.
       EXTENSION_BLOCK_ID,
 
       /// A block with unhashed content.
@@ -297,47 +297,47 @@
       UNHASHED_CONTROL_BLOCK_ID,
     };
 
-    /// \brief Record types that occur within the control block.
+    /// Record types that occur within the control block.
     enum ControlRecordTypes {
-      /// \brief AST file metadata, including the AST file version number
+      /// AST file metadata, including the AST file version number
       /// and information about the compiler used to build this AST file.
       METADATA = 1,
 
-      /// \brief Record code for the list of other AST files imported by
+      /// Record code for the list of other AST files imported by
       /// this AST file.
       IMPORTS,
 
-      /// \brief Record code for the original file that was used to
+      /// Record code for the original file that was used to
       /// generate the AST file, including both its file ID and its
       /// name.
       ORIGINAL_FILE,
-      
-      /// \brief The directory that the PCH was originally created in.
+
+      /// The directory that the PCH was originally created in.
       ORIGINAL_PCH_DIR,
 
-      /// \brief Record code for file ID of the file or buffer that was used to
+      /// Record code for file ID of the file or buffer that was used to
       /// generate the AST file.
       ORIGINAL_FILE_ID,
 
-      /// \brief Offsets into the input-files block where input files
+      /// Offsets into the input-files block where input files
       /// reside.
       INPUT_FILE_OFFSETS,
 
-      /// \brief Record code for the module name.
+      /// Record code for the module name.
       MODULE_NAME,
 
-      /// \brief Record code for the module map file that was used to build this
+      /// Record code for the module map file that was used to build this
       /// AST file.
       MODULE_MAP_FILE,
 
-      /// \brief Record code for the module build directory.
+      /// Record code for the module build directory.
       MODULE_DIRECTORY,
     };
 
-    /// \brief Record types that occur within the options block inside
+    /// Record types that occur within the options block inside
     /// the control block.
     enum OptionsRecordTypes {
-      /// \brief Record code for the language options table.
+      /// Record code for the language options table.
       ///
       /// The record with this code contains the contents of the
       /// LangOptions structure. We serialize the entire contents of
@@ -345,16 +345,16 @@
       /// actually important to check.
       LANGUAGE_OPTIONS = 1,
 
-      /// \brief Record code for the target options table.
+      /// Record code for the target options table.
       TARGET_OPTIONS,
 
-      /// \brief Record code for the filesystem options table.
+      /// Record code for the filesystem options table.
       FILE_SYSTEM_OPTIONS,
 
-      /// \brief Record code for the headers search options table.
+      /// Record code for the headers search options table.
       HEADER_SEARCH_OPTIONS,
 
-      /// \brief Record code for the preprocessor options table.
+      /// Record code for the preprocessor options table.
       PREPROCESSOR_OPTIONS,
     };
 
@@ -370,7 +370,7 @@
       DIAG_PRAGMA_MAPPINGS,
     };
 
-    /// \brief Record code for extension blocks.
+    /// Record code for extension blocks.
     enum ExtensionBlockRecordTypes {
       /// Metadata describing this particular extension.
       EXTENSION_METADATA = 1,
@@ -379,16 +379,16 @@
       FIRST_EXTENSION_RECORD_ID = 4
     };
 
-    /// \brief Record types that occur within the input-files block
+    /// Record types that occur within the input-files block
     /// inside the control block.
     enum InputFileRecordTypes {
-      /// \brief An input file.
+      /// An input file.
       INPUT_FILE = 1
     };
 
-    /// \brief Record types that occur within the AST block itself.
+    /// Record types that occur within the AST block itself.
     enum ASTRecordTypes {
-      /// \brief Record code for the offsets of each type.
+      /// Record code for the offsets of each type.
       ///
       /// The TYPE_OFFSET constant describes the record that occurs
       /// within the AST block. The record itself is an array of offsets that
@@ -402,7 +402,7 @@
       /// corresponding record within the DECLTYPES_BLOCK_ID block.
       TYPE_OFFSET = 1,
 
-      /// \brief Record code for the offsets of each decl.
+      /// Record code for the offsets of each decl.
       ///
       /// The DECL_OFFSET constant describes the record that occurs
       /// within the block identified by DECL_OFFSETS_BLOCK_ID within
@@ -414,7 +414,7 @@
       /// reserved for the translation unit declaration.
       DECL_OFFSET = 2,
 
-      /// \brief Record code for the table of offsets of each
+      /// Record code for the table of offsets of each
       /// identifier ID.
       ///
       /// The offset table contains offsets into the blob stored in
@@ -422,12 +422,12 @@
       /// NULL-terminated string that corresponds to that identifier.
       IDENTIFIER_OFFSET = 3,
 
-      /// \brief This is so that older clang versions, before the introduction
+      /// This is so that older clang versions, before the introduction
       /// of the control block, can read and reject the newer PCH format.
       /// *DON'T CHANGE THIS NUMBER*.
       METADATA_OLD_FORMAT = 4,
 
-      /// \brief Record code for the identifier table.
+      /// Record code for the identifier table.
       ///
       /// The identifier table is a simple blob that contains
       /// NULL-terminated strings for all of the identifiers
@@ -441,7 +441,7 @@
       /// IDs).
       IDENTIFIER_TABLE = 5,
 
-      /// \brief Record code for the array of eagerly deserialized decls.
+      /// Record code for the array of eagerly deserialized decls.
       ///
       /// The AST file contains a list of all of the declarations that should be
       /// eagerly deserialized present within the parsed headers, stored as an
@@ -451,7 +451,7 @@
       /// program (e.g., for code generation).
       EAGERLY_DESERIALIZED_DECLS = 6,
 
-      /// \brief Record code for the set of non-builtin, special
+      /// Record code for the set of non-builtin, special
       /// types.
       ///
       /// This record contains the type IDs for the various type nodes
@@ -460,31 +460,31 @@
       /// offsets into this record.
       SPECIAL_TYPES = 7,
 
-      /// \brief Record code for the extra statistics we gather while
+      /// Record code for the extra statistics we gather while
       /// generating an AST file.
       STATISTICS = 8,
 
-      /// \brief Record code for the array of tentative definitions.
+      /// Record code for the array of tentative definitions.
       TENTATIVE_DEFINITIONS = 9,
 
       // ID 10 used to be for a list of extern "C" declarations.
 
-      /// \brief Record code for the table of offsets into the
+      /// Record code for the table of offsets into the
       /// Objective-C method pool.
       SELECTOR_OFFSETS = 11,
 
-      /// \brief Record code for the Objective-C method pool,
+      /// Record code for the Objective-C method pool,
       METHOD_POOL = 12,
 
-      /// \brief The value of the next __COUNTER__ to dispense.
+      /// The value of the next __COUNTER__ to dispense.
       /// [PP_COUNTER_VALUE, Val]
       PP_COUNTER_VALUE = 13,
 
-      /// \brief Record code for the table of offsets into the block
+      /// Record code for the table of offsets into the block
       /// of source-location information.
       SOURCE_LOCATION_OFFSETS = 14,
 
-      /// \brief Record code for the set of source location entries
+      /// Record code for the set of source location entries
       /// that need to be preloaded by the AST reader.
       ///
       /// This set contains the source location entry for the
@@ -492,47 +492,47 @@
       /// preloaded.
       SOURCE_LOCATION_PRELOADS = 15,
 
-      /// \brief Record code for the set of ext_vector type names.
+      /// Record code for the set of ext_vector type names.
       EXT_VECTOR_DECLS = 16,
 
-      /// \brief Record code for the array of unused file scoped decls.
+      /// Record code for the array of unused file scoped decls.
       UNUSED_FILESCOPED_DECLS = 17,
 
-      /// \brief Record code for the table of offsets to entries in the
+      /// Record code for the table of offsets to entries in the
       /// preprocessing record.
       PPD_ENTITIES_OFFSETS = 18,
 
-      /// \brief Record code for the array of VTable uses.
+      /// Record code for the array of VTable uses.
       VTABLE_USES = 19,
 
       // ID 20 used to be for a list of dynamic classes.
 
-      /// \brief Record code for referenced selector pool.
+      /// Record code for referenced selector pool.
       REFERENCED_SELECTOR_POOL = 21,
 
-      /// \brief Record code for an update to the TU's lexically contained
+      /// Record code for an update to the TU's lexically contained
       /// declarations.
       TU_UPDATE_LEXICAL = 22,
 
       // ID 23 used to be for a list of local redeclarations.
 
-      /// \brief Record code for declarations that Sema keeps references of.
+      /// Record code for declarations that Sema keeps references of.
       SEMA_DECL_REFS = 24,
 
-      /// \brief Record code for weak undeclared identifiers.
+      /// Record code for weak undeclared identifiers.
       WEAK_UNDECLARED_IDENTIFIERS = 25,
 
-      /// \brief Record code for pending implicit instantiations.
+      /// Record code for pending implicit instantiations.
       PENDING_IMPLICIT_INSTANTIATIONS = 26,
 
       // ID 27 used to be for a list of replacement decls.
 
-      /// \brief Record code for an update to a decl context's lookup table.
+      /// Record code for an update to a decl context's lookup table.
       ///
       /// In practice, this should only be used for the TU and namespaces.
       UPDATE_VISIBLE = 28,
 
-      /// \brief Record for offsets of DECL_UPDATES records for declarations
+      /// Record for offsets of DECL_UPDATES records for declarations
       /// that were modified after being deserialized and need updates.
       DECL_UPDATE_OFFSETS = 29,
 
@@ -543,245 +543,245 @@
 
       // ID 32 used to be the code for \#pragma diagnostic mappings.
 
-      /// \brief Record code for special CUDA declarations.
+      /// Record code for special CUDA declarations.
       CUDA_SPECIAL_DECL_REFS = 33,
 
-      /// \brief Record code for header search information.
+      /// Record code for header search information.
       HEADER_SEARCH_TABLE = 34,
 
-      /// \brief Record code for floating point \#pragma options.
+      /// Record code for floating point \#pragma options.
       FP_PRAGMA_OPTIONS = 35,
 
-      /// \brief Record code for enabled OpenCL extensions.
+      /// Record code for enabled OpenCL extensions.
       OPENCL_EXTENSIONS = 36,
 
-      /// \brief The list of delegating constructor declarations.
+      /// The list of delegating constructor declarations.
       DELEGATING_CTORS = 37,
 
-      /// \brief Record code for the set of known namespaces, which are used
+      /// Record code for the set of known namespaces, which are used
       /// for typo correction.
       KNOWN_NAMESPACES = 38,
 
-      /// \brief Record code for the remapping information used to relate
+      /// Record code for the remapping information used to relate
       /// loaded modules to the various offsets and IDs(e.g., source location
       /// offests, declaration and type IDs) that are used in that module to
       /// refer to other modules.
       MODULE_OFFSET_MAP = 39,
 
-      /// \brief Record code for the source manager line table information,
+      /// Record code for the source manager line table information,
       /// which stores information about \#line directives.
       SOURCE_MANAGER_LINE_TABLE = 40,
 
-      /// \brief Record code for map of Objective-C class definition IDs to the
+      /// Record code for map of Objective-C class definition IDs to the
       /// ObjC categories in a module that are attached to that class.
       OBJC_CATEGORIES_MAP = 41,
 
-      /// \brief Record code for a file sorted array of DeclIDs in a module.
+      /// Record code for a file sorted array of DeclIDs in a module.
       FILE_SORTED_DECLS = 42,
 
-      /// \brief Record code for an array of all of the (sub)modules that were
+      /// Record code for an array of all of the (sub)modules that were
       /// imported by the AST file.
       IMPORTED_MODULES = 43,
 
       // ID 44 used to be a table of merged canonical declarations.
       // ID 45 used to be a list of declaration IDs of local redeclarations.
 
-      /// \brief Record code for the array of Objective-C categories (including
+      /// Record code for the array of Objective-C categories (including
       /// extensions).
       ///
       /// This array can only be interpreted properly using the Objective-C
       /// categories map.
       OBJC_CATEGORIES = 46,
 
-      /// \brief Record code for the table of offsets of each macro ID.
+      /// Record code for the table of offsets of each macro ID.
       ///
       /// The offset table contains offsets into the blob stored in
       /// the preprocessor block. Each offset points to the corresponding
       /// macro definition.
       MACRO_OFFSET = 47,
 
-      /// \brief A list of "interesting" identifiers. Only used in C++ (where we
+      /// A list of "interesting" identifiers. Only used in C++ (where we
       /// don't normally do lookups into the serialized identifier table). These
       /// are eagerly deserialized.
       INTERESTING_IDENTIFIERS = 48,
 
-      /// \brief Record code for undefined but used functions and variables that
+      /// Record code for undefined but used functions and variables that
       /// need a definition in this TU.
       UNDEFINED_BUT_USED = 49,
 
-      /// \brief Record code for late parsed template functions.
+      /// Record code for late parsed template functions.
       LATE_PARSED_TEMPLATE = 50,
 
-      /// \brief Record code for \#pragma optimize options.
+      /// Record code for \#pragma optimize options.
       OPTIMIZE_PRAGMA_OPTIONS = 51,
 
-      /// \brief Record code for potentially unused local typedef names.
+      /// Record code for potentially unused local typedef names.
       UNUSED_LOCAL_TYPEDEF_NAME_CANDIDATES = 52,
 
       // ID 53 used to be a table of constructor initializer records.
 
-      /// \brief Delete expressions that will be analyzed later.
+      /// Delete expressions that will be analyzed later.
       DELETE_EXPRS_TO_ANALYZE = 54,
 
-      /// \brief Record code for \#pragma ms_struct options.
+      /// Record code for \#pragma ms_struct options.
       MSSTRUCT_PRAGMA_OPTIONS = 55,
 
-      /// \brief Record code for \#pragma ms_struct options.
+      /// Record code for \#pragma ms_struct options.
       POINTERS_TO_MEMBERS_PRAGMA_OPTIONS = 56,
 
-      /// \brief Number of unmatched #pragma clang cuda_force_host_device begin
+      /// Number of unmatched #pragma clang cuda_force_host_device begin
       /// directives we've seen.
       CUDA_PRAGMA_FORCE_HOST_DEVICE_DEPTH = 57,
 
-      /// \brief Record code for types associated with OpenCL extensions.
+      /// Record code for types associated with OpenCL extensions.
       OPENCL_EXTENSION_TYPES = 58,
 
-      /// \brief Record code for declarations associated with OpenCL extensions.
+      /// Record code for declarations associated with OpenCL extensions.
       OPENCL_EXTENSION_DECLS = 59,
 
       MODULAR_CODEGEN_DECLS = 60,
 
-      /// \brief Record code for \#pragma pack options.
+      /// Record code for \#pragma pack options.
       PACK_PRAGMA_OPTIONS = 61,
 
-      /// \brief The stack of open #ifs/#ifdefs recorded in a preamble.
+      /// The stack of open #ifs/#ifdefs recorded in a preamble.
       PP_CONDITIONAL_STACK = 62,
 
-      /// \brief A table of skipped ranges within the preprocessing record.
+      /// A table of skipped ranges within the preprocessing record.
       PPD_SKIPPED_RANGES = 63
     };
 
-    /// \brief Record types used within a source manager block.
+    /// Record types used within a source manager block.
     enum SourceManagerRecordTypes {
-      /// \brief Describes a source location entry (SLocEntry) for a
+      /// Describes a source location entry (SLocEntry) for a
       /// file.
       SM_SLOC_FILE_ENTRY = 1,
 
-      /// \brief Describes a source location entry (SLocEntry) for a
+      /// Describes a source location entry (SLocEntry) for a
       /// buffer.
       SM_SLOC_BUFFER_ENTRY = 2,
 
-      /// \brief Describes a blob that contains the data for a buffer
+      /// Describes a blob that contains the data for a buffer
       /// entry. This kind of record always directly follows a
       /// SM_SLOC_BUFFER_ENTRY record or a SM_SLOC_FILE_ENTRY with an
       /// overridden buffer.
       SM_SLOC_BUFFER_BLOB = 3,
 
-      /// \brief Describes a zlib-compressed blob that contains the data for
+      /// Describes a zlib-compressed blob that contains the data for
       /// a buffer entry.
       SM_SLOC_BUFFER_BLOB_COMPRESSED = 4,
 
-      /// \brief Describes a source location entry (SLocEntry) for a
+      /// Describes a source location entry (SLocEntry) for a
       /// macro expansion.
       SM_SLOC_EXPANSION_ENTRY = 5
     };
 
-    /// \brief Record types used within a preprocessor block.
+    /// Record types used within a preprocessor block.
     enum PreprocessorRecordTypes {
       // The macros in the PP section are a PP_MACRO_* instance followed by a
       // list of PP_TOKEN instances for each token in the definition.
 
-      /// \brief An object-like macro definition.
+      /// An object-like macro definition.
       /// [PP_MACRO_OBJECT_LIKE, IdentInfoID, SLoc, IsUsed]
       PP_MACRO_OBJECT_LIKE = 1,
 
-      /// \brief A function-like macro definition.
+      /// A function-like macro definition.
       /// [PP_MACRO_FUNCTION_LIKE, \<ObjectLikeStuff>, IsC99Varargs,
       /// IsGNUVarars, NumArgs, ArgIdentInfoID* ]
       PP_MACRO_FUNCTION_LIKE = 2,
 
-      /// \brief Describes one token.
+      /// Describes one token.
       /// [PP_TOKEN, SLoc, Length, IdentInfoID, Kind, Flags]
       PP_TOKEN = 3,
 
-      /// \brief The macro directives history for a particular identifier.
+      /// The macro directives history for a particular identifier.
       PP_MACRO_DIRECTIVE_HISTORY = 4,
 
-      /// \brief A macro directive exported by a module.
+      /// A macro directive exported by a module.
       /// [PP_MODULE_MACRO, SubmoduleID, MacroID, (Overridden SubmoduleID)*]
       PP_MODULE_MACRO = 5,
     };
 
-    /// \brief Record types used within a preprocessor detail block.
+    /// Record types used within a preprocessor detail block.
     enum PreprocessorDetailRecordTypes {
-      /// \brief Describes a macro expansion within the preprocessing record.
+      /// Describes a macro expansion within the preprocessing record.
       PPD_MACRO_EXPANSION = 0,
-      
-      /// \brief Describes a macro definition within the preprocessing record.
+
+      /// Describes a macro definition within the preprocessing record.
       PPD_MACRO_DEFINITION = 1,
-      
-      /// \brief Describes an inclusion directive within the preprocessing
+
+      /// Describes an inclusion directive within the preprocessing
       /// record.
       PPD_INCLUSION_DIRECTIVE = 2
     };
-    
-    /// \brief Record types used within a submodule description block.
+
+    /// Record types used within a submodule description block.
     enum SubmoduleRecordTypes {
-      /// \brief Metadata for submodules as a whole.
+      /// Metadata for submodules as a whole.
       SUBMODULE_METADATA = 0,
 
-      /// \brief Defines the major attributes of a submodule, including its
+      /// Defines the major attributes of a submodule, including its
       /// name and parent.
       SUBMODULE_DEFINITION = 1,
 
-      /// \brief Specifies the umbrella header used to create this module,
+      /// Specifies the umbrella header used to create this module,
       /// if any.
       SUBMODULE_UMBRELLA_HEADER = 2,
 
-      /// \brief Specifies a header that falls into this (sub)module.
+      /// Specifies a header that falls into this (sub)module.
       SUBMODULE_HEADER = 3,
 
-      /// \brief Specifies a top-level header that falls into this (sub)module.
+      /// Specifies a top-level header that falls into this (sub)module.
       SUBMODULE_TOPHEADER = 4,
 
-      /// \brief Specifies an umbrella directory.
+      /// Specifies an umbrella directory.
       SUBMODULE_UMBRELLA_DIR = 5,
 
-      /// \brief Specifies the submodules that are imported by this 
+      /// Specifies the submodules that are imported by this
       /// submodule.
       SUBMODULE_IMPORTS = 6,
 
-      /// \brief Specifies the submodules that are re-exported from this 
+      /// Specifies the submodules that are re-exported from this
       /// submodule.
       SUBMODULE_EXPORTS = 7,
 
-      /// \brief Specifies a required feature.
+      /// Specifies a required feature.
       SUBMODULE_REQUIRES = 8,
 
-      /// \brief Specifies a header that has been explicitly excluded
+      /// Specifies a header that has been explicitly excluded
       /// from this submodule.
       SUBMODULE_EXCLUDED_HEADER = 9,
 
-      /// \brief Specifies a library or framework to link against.
+      /// Specifies a library or framework to link against.
       SUBMODULE_LINK_LIBRARY = 10,
 
-      /// \brief Specifies a configuration macro for this module.
+      /// Specifies a configuration macro for this module.
       SUBMODULE_CONFIG_MACRO = 11,
 
-      /// \brief Specifies a conflict with another module.
+      /// Specifies a conflict with another module.
       SUBMODULE_CONFLICT = 12,
 
-      /// \brief Specifies a header that is private to this submodule.
+      /// Specifies a header that is private to this submodule.
       SUBMODULE_PRIVATE_HEADER = 13,
 
-      /// \brief Specifies a header that is part of the module but must be
+      /// Specifies a header that is part of the module but must be
       /// textually included.
       SUBMODULE_TEXTUAL_HEADER = 14,
 
-      /// \brief Specifies a header that is private to this submodule but
+      /// Specifies a header that is private to this submodule but
       /// must be textually included.
       SUBMODULE_PRIVATE_TEXTUAL_HEADER = 15,
 
-      /// \brief Specifies some declarations with initializers that must be
+      /// Specifies some declarations with initializers that must be
       /// emitted to initialize the module.
       SUBMODULE_INITIALIZERS = 16,
 
-      /// \brief Specifies the name of the module that will eventually
+      /// Specifies the name of the module that will eventually
       /// re-export the entities in this module.
       SUBMODULE_EXPORT_AS = 17,
     };
 
-    /// \brief Record types used within a comments block.
+    /// Record types used within a comments block.
     enum CommentRecordTypes {
       COMMENTS_RAW_COMMENT = 0
     };
@@ -793,7 +793,7 @@
     ///
     /// @{
 
-    /// \brief Predefined type IDs.
+    /// Predefined type IDs.
     ///
     /// These type IDs correspond to predefined types in the AST
     /// context, such as built-in types (int) and special place-holder
@@ -801,496 +801,574 @@
     /// types are never actually serialized, since they will be built
     /// by the AST context when it is created.
     enum PredefinedTypeIDs {
-      /// \brief The NULL type.
+      /// The NULL type.
       PREDEF_TYPE_NULL_ID       = 0,
 
-      /// \brief The void type.
+      /// The void type.
       PREDEF_TYPE_VOID_ID       = 1,
 
-      /// \brief The 'bool' or '_Bool' type.
+      /// The 'bool' or '_Bool' type.
       PREDEF_TYPE_BOOL_ID       = 2,
 
-      /// \brief The 'char' type, when it is unsigned.
+      /// The 'char' type, when it is unsigned.
       PREDEF_TYPE_CHAR_U_ID     = 3,
 
-      /// \brief The 'unsigned char' type.
+      /// The 'unsigned char' type.
       PREDEF_TYPE_UCHAR_ID      = 4,
 
-      /// \brief The 'unsigned short' type.
+      /// The 'unsigned short' type.
       PREDEF_TYPE_USHORT_ID     = 5,
 
-      /// \brief The 'unsigned int' type.
+      /// The 'unsigned int' type.
       PREDEF_TYPE_UINT_ID       = 6,
 
-      /// \brief The 'unsigned long' type.
+      /// The 'unsigned long' type.
       PREDEF_TYPE_ULONG_ID      = 7,
 
-      /// \brief The 'unsigned long long' type.
+      /// The 'unsigned long long' type.
       PREDEF_TYPE_ULONGLONG_ID  = 8,
 
-      /// \brief The 'char' type, when it is signed.
+      /// The 'char' type, when it is signed.
       PREDEF_TYPE_CHAR_S_ID     = 9,
 
-      /// \brief The 'signed char' type.
+      /// The 'signed char' type.
       PREDEF_TYPE_SCHAR_ID      = 10,
 
-      /// \brief The C++ 'wchar_t' type.
+      /// The C++ 'wchar_t' type.
       PREDEF_TYPE_WCHAR_ID      = 11,
 
-      /// \brief The (signed) 'short' type.
+      /// The (signed) 'short' type.
       PREDEF_TYPE_SHORT_ID      = 12,
 
-      /// \brief The (signed) 'int' type.
+      /// The (signed) 'int' type.
       PREDEF_TYPE_INT_ID        = 13,
 
-      /// \brief The (signed) 'long' type.
+      /// The (signed) 'long' type.
       PREDEF_TYPE_LONG_ID       = 14,
 
-      /// \brief The (signed) 'long long' type.
+      /// The (signed) 'long long' type.
       PREDEF_TYPE_LONGLONG_ID   = 15,
 
-      /// \brief The 'float' type.
+      /// The 'float' type.
       PREDEF_TYPE_FLOAT_ID      = 16,
 
-      /// \brief The 'double' type.
+      /// The 'double' type.
       PREDEF_TYPE_DOUBLE_ID     = 17,
 
-      /// \brief The 'long double' type.
+      /// The 'long double' type.
       PREDEF_TYPE_LONGDOUBLE_ID = 18,
 
-      /// \brief The placeholder type for overloaded function sets.
+      /// The placeholder type for overloaded function sets.
       PREDEF_TYPE_OVERLOAD_ID   = 19,
 
-      /// \brief The placeholder type for dependent types.
+      /// The placeholder type for dependent types.
       PREDEF_TYPE_DEPENDENT_ID  = 20,
 
-      /// \brief The '__uint128_t' type.
+      /// The '__uint128_t' type.
       PREDEF_TYPE_UINT128_ID    = 21,
 
-      /// \brief The '__int128_t' type.
+      /// The '__int128_t' type.
       PREDEF_TYPE_INT128_ID     = 22,
 
-      /// \brief The type of 'nullptr'.
+      /// The type of 'nullptr'.
       PREDEF_TYPE_NULLPTR_ID    = 23,
 
-      /// \brief The C++ 'char16_t' type.
+      /// The C++ 'char16_t' type.
       PREDEF_TYPE_CHAR16_ID     = 24,
 
-      /// \brief The C++ 'char32_t' type.
+      /// The C++ 'char32_t' type.
       PREDEF_TYPE_CHAR32_ID     = 25,
 
-      /// \brief The ObjC 'id' type.
+      /// The ObjC 'id' type.
       PREDEF_TYPE_OBJC_ID       = 26,
 
-      /// \brief The ObjC 'Class' type.
+      /// The ObjC 'Class' type.
       PREDEF_TYPE_OBJC_CLASS    = 27,
 
-      /// \brief The ObjC 'SEL' type.
+      /// The ObjC 'SEL' type.
       PREDEF_TYPE_OBJC_SEL      = 28,
 
-      /// \brief The 'unknown any' placeholder type.
+      /// The 'unknown any' placeholder type.
       PREDEF_TYPE_UNKNOWN_ANY   = 29,
 
-      /// \brief The placeholder type for bound member functions.
+      /// The placeholder type for bound member functions.
       PREDEF_TYPE_BOUND_MEMBER  = 30,
 
-      /// \brief The "auto" deduction type.
+      /// The "auto" deduction type.
       PREDEF_TYPE_AUTO_DEDUCT   = 31,
 
-      /// \brief The "auto &&" deduction type.
+      /// The "auto &&" deduction type.
       PREDEF_TYPE_AUTO_RREF_DEDUCT = 32,
 
-      /// \brief The OpenCL 'half' / ARM NEON __fp16 type.
+      /// The OpenCL 'half' / ARM NEON __fp16 type.
       PREDEF_TYPE_HALF_ID       = 33,
 
-      /// \brief ARC's unbridged-cast placeholder type.
+      /// ARC's unbridged-cast placeholder type.
       PREDEF_TYPE_ARC_UNBRIDGED_CAST = 34,
 
-      /// \brief The pseudo-object placeholder type.
+      /// The pseudo-object placeholder type.
       PREDEF_TYPE_PSEUDO_OBJECT = 35,
 
-      /// \brief The placeholder type for builtin functions.
+      /// The placeholder type for builtin functions.
       PREDEF_TYPE_BUILTIN_FN = 36,
 
-      /// \brief OpenCL event type.
+      /// OpenCL event type.
       PREDEF_TYPE_EVENT_ID      = 37,
 
-      /// \brief OpenCL clk event type.
+      /// OpenCL clk event type.
       PREDEF_TYPE_CLK_EVENT_ID  = 38,
 
-      /// \brief OpenCL sampler type.
+      /// OpenCL sampler type.
       PREDEF_TYPE_SAMPLER_ID    = 39,
 
-      /// \brief OpenCL queue type.
+      /// OpenCL queue type.
       PREDEF_TYPE_QUEUE_ID      = 40,
 
-      /// \brief OpenCL reserve_id type.
+      /// OpenCL reserve_id type.
       PREDEF_TYPE_RESERVE_ID_ID = 41,
 
-      /// \brief The placeholder type for OpenMP array section.
+      /// The placeholder type for OpenMP array section.
       PREDEF_TYPE_OMP_ARRAY_SECTION = 42,
 
-      /// \brief The '__float128' type
+      /// The '__float128' type
       PREDEF_TYPE_FLOAT128_ID = 43,
 
-      /// \brief The '_Float16' type
+      /// The '_Float16' type
       PREDEF_TYPE_FLOAT16_ID = 44,
 
-      /// \brief OpenCL image types with auto numeration
+      /// The C++ 'char8_t' type.
+      PREDEF_TYPE_CHAR8_ID = 45,
+
+      /// \brief The 'short _Accum' type
+      PREDEF_TYPE_SHORT_ACCUM_ID    = 46,
+
+      /// \brief The '_Accum' type
+      PREDEF_TYPE_ACCUM_ID      = 47,
+
+      /// \brief The 'long _Accum' type
+      PREDEF_TYPE_LONG_ACCUM_ID = 48,
+
+      /// \brief The 'unsigned short _Accum' type
+      PREDEF_TYPE_USHORT_ACCUM_ID   = 49,
+
+      /// \brief The 'unsigned _Accum' type
+      PREDEF_TYPE_UACCUM_ID     = 50,
+
+      /// \brief The 'unsigned long _Accum' type
+      PREDEF_TYPE_ULONG_ACCUM_ID    = 51,
+
+      /// \brief The 'short _Fract' type
+      PREDEF_TYPE_SHORT_FRACT_ID = 52,
+
+      /// \brief The '_Fract' type
+      PREDEF_TYPE_FRACT_ID = 53,
+
+      /// \brief The 'long _Fract' type
+      PREDEF_TYPE_LONG_FRACT_ID = 54,
+
+      /// \brief The 'unsigned short _Fract' type
+      PREDEF_TYPE_USHORT_FRACT_ID = 55,
+
+      /// \brief The 'unsigned _Fract' type
+      PREDEF_TYPE_UFRACT_ID = 56,
+
+      /// \brief The 'unsigned long _Fract' type
+      PREDEF_TYPE_ULONG_FRACT_ID = 57,
+
+      /// \brief The '_Sat short _Accum' type
+      PREDEF_TYPE_SAT_SHORT_ACCUM_ID = 58,
+
+      /// \brief The '_Sat _Accum' type
+      PREDEF_TYPE_SAT_ACCUM_ID = 59,
+
+      /// \brief The '_Sat long _Accum' type
+      PREDEF_TYPE_SAT_LONG_ACCUM_ID = 60,
+
+      /// \brief The '_Sat unsigned short _Accum' type
+      PREDEF_TYPE_SAT_USHORT_ACCUM_ID = 61,
+
+      /// \brief The '_Sat unsigned _Accum' type
+      PREDEF_TYPE_SAT_UACCUM_ID = 62,
+
+      /// \brief The '_Sat unsigned long _Accum' type
+      PREDEF_TYPE_SAT_ULONG_ACCUM_ID = 63,
+
+      /// \brief The '_Sat short _Fract' type
+      PREDEF_TYPE_SAT_SHORT_FRACT_ID = 64,
+
+      /// \brief The '_Sat _Fract' type
+      PREDEF_TYPE_SAT_FRACT_ID = 65,
+
+      /// \brief The '_Sat long _Fract' type
+      PREDEF_TYPE_SAT_LONG_FRACT_ID = 66,
+
+      /// \brief The '_Sat unsigned short _Fract' type
+      PREDEF_TYPE_SAT_USHORT_FRACT_ID = 67,
+
+      /// \brief The '_Sat unsigned _Fract' type
+      PREDEF_TYPE_SAT_UFRACT_ID = 68,
+
+      /// \brief The '_Sat unsigned long _Fract' type
+      PREDEF_TYPE_SAT_ULONG_FRACT_ID = 69,
+
+      /// OpenCL image types with auto numeration
 #define IMAGE_TYPE(ImgType, Id, SingletonId, Access, Suffix) \
       PREDEF_TYPE_##Id##_ID,
 #include "clang/Basic/OpenCLImageTypes.def"
     };
 
-    /// \brief The number of predefined type IDs that are reserved for
+    /// The number of predefined type IDs that are reserved for
     /// the PREDEF_TYPE_* constants.
     ///
     /// Type IDs for non-predefined types will start at
     /// NUM_PREDEF_TYPE_IDs.
-    const unsigned NUM_PREDEF_TYPE_IDS = 100;
+    const unsigned NUM_PREDEF_TYPE_IDS = 200;
 
-    /// \brief Record codes for each kind of type.
+    /// Record codes for each kind of type.
     ///
     /// These constants describe the type records that can occur within a
     /// block identified by DECLTYPES_BLOCK_ID in the AST file. Each
     /// constant describes a record for a specific type class in the
     /// AST. Note that DeclCode values share this code space.
     enum TypeCode {
-      /// \brief An ExtQualType record.
-      TYPE_EXT_QUAL                 = 1,
+      /// An ExtQualType record.
+      TYPE_EXT_QUAL = 1,
 
-      /// \brief A ComplexType record.
-      TYPE_COMPLEX                  = 3,
+      /// A ComplexType record.
+      TYPE_COMPLEX = 3,
 
-      /// \brief A PointerType record.
-      TYPE_POINTER                  = 4,
+      /// A PointerType record.
+      TYPE_POINTER = 4,
 
-      /// \brief A BlockPointerType record.
-      TYPE_BLOCK_POINTER            = 5,
+      /// A BlockPointerType record.
+      TYPE_BLOCK_POINTER = 5,
 
-      /// \brief An LValueReferenceType record.
-      TYPE_LVALUE_REFERENCE         = 6,
+      /// An LValueReferenceType record.
+      TYPE_LVALUE_REFERENCE = 6,
 
-      /// \brief An RValueReferenceType record.
-      TYPE_RVALUE_REFERENCE         = 7,
+      /// An RValueReferenceType record.
+      TYPE_RVALUE_REFERENCE = 7,
 
-      /// \brief A MemberPointerType record.
-      TYPE_MEMBER_POINTER           = 8,
+      /// A MemberPointerType record.
+      TYPE_MEMBER_POINTER = 8,
 
-      /// \brief A ConstantArrayType record.
-      TYPE_CONSTANT_ARRAY           = 9,
+      /// A ConstantArrayType record.
+      TYPE_CONSTANT_ARRAY = 9,
 
-      /// \brief An IncompleteArrayType record.
-      TYPE_INCOMPLETE_ARRAY         = 10,
+      /// An IncompleteArrayType record.
+      TYPE_INCOMPLETE_ARRAY = 10,
 
-      /// \brief A VariableArrayType record.
-      TYPE_VARIABLE_ARRAY           = 11,
+      /// A VariableArrayType record.
+      TYPE_VARIABLE_ARRAY = 11,
 
-      /// \brief A VectorType record.
-      TYPE_VECTOR                   = 12,
+      /// A VectorType record.
+      TYPE_VECTOR = 12,
 
-      /// \brief An ExtVectorType record.
-      TYPE_EXT_VECTOR               = 13,
+      /// An ExtVectorType record.
+      TYPE_EXT_VECTOR = 13,
 
-      /// \brief A FunctionNoProtoType record.
-      TYPE_FUNCTION_NO_PROTO        = 14,
+      /// A FunctionNoProtoType record.
+      TYPE_FUNCTION_NO_PROTO = 14,
 
-      /// \brief A FunctionProtoType record.
-      TYPE_FUNCTION_PROTO           = 15,
+      /// A FunctionProtoType record.
+      TYPE_FUNCTION_PROTO = 15,
 
-      /// \brief A TypedefType record.
-      TYPE_TYPEDEF                  = 16,
+      /// A TypedefType record.
+      TYPE_TYPEDEF = 16,
 
-      /// \brief A TypeOfExprType record.
-      TYPE_TYPEOF_EXPR              = 17,
+      /// A TypeOfExprType record.
+      TYPE_TYPEOF_EXPR = 17,
 
-      /// \brief A TypeOfType record.
-      TYPE_TYPEOF                   = 18,
+      /// A TypeOfType record.
+      TYPE_TYPEOF = 18,
 
-      /// \brief A RecordType record.
-      TYPE_RECORD                   = 19,
+      /// A RecordType record.
+      TYPE_RECORD = 19,
 
-      /// \brief An EnumType record.
-      TYPE_ENUM                     = 20,
+      /// An EnumType record.
+      TYPE_ENUM = 20,
 
-      /// \brief An ObjCInterfaceType record.
-      TYPE_OBJC_INTERFACE           = 21,
+      /// An ObjCInterfaceType record.
+      TYPE_OBJC_INTERFACE = 21,
 
-      /// \brief An ObjCObjectPointerType record.
-      TYPE_OBJC_OBJECT_POINTER      = 22,
+      /// An ObjCObjectPointerType record.
+      TYPE_OBJC_OBJECT_POINTER = 22,
 
-      /// \brief a DecltypeType record.
-      TYPE_DECLTYPE                 = 23,
+      /// a DecltypeType record.
+      TYPE_DECLTYPE = 23,
 
-      /// \brief An ElaboratedType record.
-      TYPE_ELABORATED               = 24,
+      /// An ElaboratedType record.
+      TYPE_ELABORATED = 24,
 
-      /// \brief A SubstTemplateTypeParmType record.
+      /// A SubstTemplateTypeParmType record.
       TYPE_SUBST_TEMPLATE_TYPE_PARM = 25,
 
-      /// \brief An UnresolvedUsingType record.
-      TYPE_UNRESOLVED_USING         = 26,
+      /// An UnresolvedUsingType record.
+      TYPE_UNRESOLVED_USING = 26,
 
-      /// \brief An InjectedClassNameType record.
-      TYPE_INJECTED_CLASS_NAME      = 27,
+      /// An InjectedClassNameType record.
+      TYPE_INJECTED_CLASS_NAME = 27,
 
-      /// \brief An ObjCObjectType record.
-      TYPE_OBJC_OBJECT              = 28,
+      /// An ObjCObjectType record.
+      TYPE_OBJC_OBJECT = 28,
 
-      /// \brief An TemplateTypeParmType record.
-      TYPE_TEMPLATE_TYPE_PARM       = 29,
+      /// An TemplateTypeParmType record.
+      TYPE_TEMPLATE_TYPE_PARM = 29,
 
-      /// \brief An TemplateSpecializationType record.
-      TYPE_TEMPLATE_SPECIALIZATION  = 30,
+      /// An TemplateSpecializationType record.
+      TYPE_TEMPLATE_SPECIALIZATION = 30,
 
-      /// \brief A DependentNameType record.
-      TYPE_DEPENDENT_NAME           = 31,
+      /// A DependentNameType record.
+      TYPE_DEPENDENT_NAME = 31,
 
-      /// \brief A DependentTemplateSpecializationType record.
+      /// A DependentTemplateSpecializationType record.
       TYPE_DEPENDENT_TEMPLATE_SPECIALIZATION = 32,
 
-      /// \brief A DependentSizedArrayType record.
-      TYPE_DEPENDENT_SIZED_ARRAY    = 33,
+      /// A DependentSizedArrayType record.
+      TYPE_DEPENDENT_SIZED_ARRAY = 33,
 
-      /// \brief A ParenType record.
-      TYPE_PAREN                    = 34,
+      /// A ParenType record.
+      TYPE_PAREN = 34,
 
-      /// \brief A PackExpansionType record.
-      TYPE_PACK_EXPANSION           = 35,
+      /// A PackExpansionType record.
+      TYPE_PACK_EXPANSION = 35,
 
-      /// \brief An AttributedType record.
-      TYPE_ATTRIBUTED               = 36,
+      /// An AttributedType record.
+      TYPE_ATTRIBUTED = 36,
 
-      /// \brief A SubstTemplateTypeParmPackType record.
+      /// A SubstTemplateTypeParmPackType record.
       TYPE_SUBST_TEMPLATE_TYPE_PARM_PACK = 37,
 
-      /// \brief A AutoType record.
-      TYPE_AUTO                  = 38,
+      /// A AutoType record.
+      TYPE_AUTO = 38,
 
-      /// \brief A UnaryTransformType record.
-      TYPE_UNARY_TRANSFORM       = 39,
+      /// A UnaryTransformType record.
+      TYPE_UNARY_TRANSFORM = 39,
 
-      /// \brief An AtomicType record.
-      TYPE_ATOMIC                = 40,
+      /// An AtomicType record.
+      TYPE_ATOMIC = 40,
 
-      /// \brief A DecayedType record.
-      TYPE_DECAYED               = 41,
+      /// A DecayedType record.
+      TYPE_DECAYED = 41,
 
-      /// \brief An AdjustedType record.
-      TYPE_ADJUSTED              = 42,
+      /// An AdjustedType record.
+      TYPE_ADJUSTED = 42,
 
-      /// \brief A PipeType record.
-      TYPE_PIPE                  = 43,
+      /// A PipeType record.
+      TYPE_PIPE = 43,
 
-      /// \brief An ObjCTypeParamType record.
-      TYPE_OBJC_TYPE_PARAM       = 44,
+      /// An ObjCTypeParamType record.
+      TYPE_OBJC_TYPE_PARAM = 44,
 
-      /// \brief A DeducedTemplateSpecializationType record.
+      /// A DeducedTemplateSpecializationType record.
       TYPE_DEDUCED_TEMPLATE_SPECIALIZATION = 45,
 
-      /// \brief A DependentSizedExtVectorType record.
+      /// A DependentSizedExtVectorType record.
       TYPE_DEPENDENT_SIZED_EXT_VECTOR = 46,
 
-      /// \brief A DependentAddressSpaceType record.
-      TYPE_DEPENDENT_ADDRESS_SPACE = 47
+      /// A DependentAddressSpaceType record.
+      TYPE_DEPENDENT_ADDRESS_SPACE = 47,
+
+      /// A dependentSizedVectorType record.
+      TYPE_DEPENDENT_SIZED_VECTOR = 48
     };
 
-    /// \brief The type IDs for special types constructed by semantic
+    /// The type IDs for special types constructed by semantic
     /// analysis.
     ///
     /// The constants in this enumeration are indices into the
     /// SPECIAL_TYPES record.
     enum SpecialTypeIDs {
-      /// \brief CFConstantString type
+      /// CFConstantString type
       SPECIAL_TYPE_CF_CONSTANT_STRING          = 0,
 
-      /// \brief C FILE typedef type
+      /// C FILE typedef type
       SPECIAL_TYPE_FILE                        = 1,
 
-      /// \brief C jmp_buf typedef type
+      /// C jmp_buf typedef type
       SPECIAL_TYPE_JMP_BUF                     = 2,
 
-      /// \brief C sigjmp_buf typedef type
+      /// C sigjmp_buf typedef type
       SPECIAL_TYPE_SIGJMP_BUF                  = 3,
 
-      /// \brief Objective-C "id" redefinition type
+      /// Objective-C "id" redefinition type
       SPECIAL_TYPE_OBJC_ID_REDEFINITION        = 4,
 
-      /// \brief Objective-C "Class" redefinition type
+      /// Objective-C "Class" redefinition type
       SPECIAL_TYPE_OBJC_CLASS_REDEFINITION     = 5,
 
-      /// \brief Objective-C "SEL" redefinition type
+      /// Objective-C "SEL" redefinition type
       SPECIAL_TYPE_OBJC_SEL_REDEFINITION       = 6,
 
-      /// \brief C ucontext_t typedef type
+      /// C ucontext_t typedef type
       SPECIAL_TYPE_UCONTEXT_T                  = 7
     };
-    
-    /// \brief The number of special type IDs.
+
+    /// The number of special type IDs.
     const unsigned NumSpecialTypeIDs = 8;
 
-    /// \brief Predefined declaration IDs.
+    /// Predefined declaration IDs.
     ///
     /// These declaration IDs correspond to predefined declarations in the AST
     /// context, such as the NULL declaration ID. Such declarations are never
-    /// actually serialized, since they will be built by the AST context when 
+    /// actually serialized, since they will be built by the AST context when
     /// it is created.
     enum PredefinedDeclIDs {
-      /// \brief The NULL declaration.
+      /// The NULL declaration.
       PREDEF_DECL_NULL_ID = 0,
 
-      /// \brief The translation unit.
+      /// The translation unit.
       PREDEF_DECL_TRANSLATION_UNIT_ID = 1,
 
-      /// \brief The Objective-C 'id' type.
+      /// The Objective-C 'id' type.
       PREDEF_DECL_OBJC_ID_ID = 2,
 
-      /// \brief The Objective-C 'SEL' type.
+      /// The Objective-C 'SEL' type.
       PREDEF_DECL_OBJC_SEL_ID = 3,
 
-      /// \brief The Objective-C 'Class' type.
+      /// The Objective-C 'Class' type.
       PREDEF_DECL_OBJC_CLASS_ID = 4,
 
-      /// \brief The Objective-C 'Protocol' type.
+      /// The Objective-C 'Protocol' type.
       PREDEF_DECL_OBJC_PROTOCOL_ID = 5,
 
-      /// \brief The signed 128-bit integer type.
+      /// The signed 128-bit integer type.
       PREDEF_DECL_INT_128_ID = 6,
 
-      /// \brief The unsigned 128-bit integer type.
+      /// The unsigned 128-bit integer type.
       PREDEF_DECL_UNSIGNED_INT_128_ID = 7,
 
-      /// \brief The internal 'instancetype' typedef.
+      /// The internal 'instancetype' typedef.
       PREDEF_DECL_OBJC_INSTANCETYPE_ID = 8,
 
-      /// \brief The internal '__builtin_va_list' typedef.
+      /// The internal '__builtin_va_list' typedef.
       PREDEF_DECL_BUILTIN_VA_LIST_ID = 9,
 
-      /// \brief The internal '__va_list_tag' struct, if any.
+      /// The internal '__va_list_tag' struct, if any.
       PREDEF_DECL_VA_LIST_TAG = 10,
 
-      /// \brief The internal '__builtin_ms_va_list' typedef.
+      /// The internal '__builtin_ms_va_list' typedef.
       PREDEF_DECL_BUILTIN_MS_VA_LIST_ID = 11,
 
-      /// \brief The extern "C" context.
+      /// The extern "C" context.
       PREDEF_DECL_EXTERN_C_CONTEXT_ID = 12,
 
-      /// \brief The internal '__make_integer_seq' template.
+      /// The internal '__make_integer_seq' template.
       PREDEF_DECL_MAKE_INTEGER_SEQ_ID = 13,
 
-      /// \brief The internal '__NSConstantString' typedef.
+      /// The internal '__NSConstantString' typedef.
       PREDEF_DECL_CF_CONSTANT_STRING_ID = 14,
 
-      /// \brief The internal '__NSConstantString' tag type.
+      /// The internal '__NSConstantString' tag type.
       PREDEF_DECL_CF_CONSTANT_STRING_TAG_ID = 15,
 
-      /// \brief The internal '__type_pack_element' template.
+      /// The internal '__type_pack_element' template.
       PREDEF_DECL_TYPE_PACK_ELEMENT_ID = 16,
     };
 
-    /// \brief The number of declaration IDs that are predefined.
+    /// The number of declaration IDs that are predefined.
     ///
     /// For more information about predefined declarations, see the
     /// \c PredefinedDeclIDs type and the PREDEF_DECL_*_ID constants.
     const unsigned int NUM_PREDEF_DECL_IDS = 17;
 
-    /// \brief Record of updates for a declaration that was modified after
+    /// Record of updates for a declaration that was modified after
     /// being deserialized. This can occur within DECLTYPES_BLOCK_ID.
     const unsigned int DECL_UPDATES = 49;
 
-    /// \brief Record code for a list of local redeclarations of a declaration.
+    /// Record code for a list of local redeclarations of a declaration.
     /// This can occur within DECLTYPES_BLOCK_ID.
     const unsigned int LOCAL_REDECLARATIONS = 50;
-    
-    /// \brief Record codes for each kind of declaration.
+
+    /// Record codes for each kind of declaration.
     ///
     /// These constants describe the declaration records that can occur within
     /// a declarations block (identified by DECLTYPES_BLOCK_ID). Each
     /// constant describes a record for a specific declaration class
     /// in the AST. Note that TypeCode values share this code space.
     enum DeclCode {
-      /// \brief A TypedefDecl record.
+      /// A TypedefDecl record.
       DECL_TYPEDEF = 51,
-      /// \brief A TypeAliasDecl record.
+      /// A TypeAliasDecl record.
 
       DECL_TYPEALIAS,
 
-      /// \brief An EnumDecl record.
+      /// An EnumDecl record.
       DECL_ENUM,
 
-      /// \brief A RecordDecl record.
+      /// A RecordDecl record.
       DECL_RECORD,
 
-      /// \brief An EnumConstantDecl record.
+      /// An EnumConstantDecl record.
       DECL_ENUM_CONSTANT,
 
-      /// \brief A FunctionDecl record.
+      /// A FunctionDecl record.
       DECL_FUNCTION,
 
-      /// \brief A ObjCMethodDecl record.
+      /// A ObjCMethodDecl record.
       DECL_OBJC_METHOD,
 
-      /// \brief A ObjCInterfaceDecl record.
+      /// A ObjCInterfaceDecl record.
       DECL_OBJC_INTERFACE,
 
-      /// \brief A ObjCProtocolDecl record.
+      /// A ObjCProtocolDecl record.
       DECL_OBJC_PROTOCOL,
 
-      /// \brief A ObjCIvarDecl record.
+      /// A ObjCIvarDecl record.
       DECL_OBJC_IVAR,
 
-      /// \brief A ObjCAtDefsFieldDecl record.
+      /// A ObjCAtDefsFieldDecl record.
       DECL_OBJC_AT_DEFS_FIELD,
 
-      /// \brief A ObjCCategoryDecl record.
+      /// A ObjCCategoryDecl record.
       DECL_OBJC_CATEGORY,
 
-      /// \brief A ObjCCategoryImplDecl record.
+      /// A ObjCCategoryImplDecl record.
       DECL_OBJC_CATEGORY_IMPL,
 
-      /// \brief A ObjCImplementationDecl record.
+      /// A ObjCImplementationDecl record.
       DECL_OBJC_IMPLEMENTATION,
 
-      /// \brief A ObjCCompatibleAliasDecl record.
+      /// A ObjCCompatibleAliasDecl record.
       DECL_OBJC_COMPATIBLE_ALIAS,
 
-      /// \brief A ObjCPropertyDecl record.
+      /// A ObjCPropertyDecl record.
       DECL_OBJC_PROPERTY,
 
-      /// \brief A ObjCPropertyImplDecl record.
+      /// A ObjCPropertyImplDecl record.
       DECL_OBJC_PROPERTY_IMPL,
 
-      /// \brief A FieldDecl record.
+      /// A FieldDecl record.
       DECL_FIELD,
 
-      /// \brief A MSPropertyDecl record.
+      /// A MSPropertyDecl record.
       DECL_MS_PROPERTY,
 
-      /// \brief A VarDecl record.
+      /// A VarDecl record.
       DECL_VAR,
 
-      /// \brief An ImplicitParamDecl record.
+      /// An ImplicitParamDecl record.
       DECL_IMPLICIT_PARAM,
 
-      /// \brief A ParmVarDecl record.
+      /// A ParmVarDecl record.
       DECL_PARM_VAR,
 
-      /// \brief A DecompositionDecl record.
+      /// A DecompositionDecl record.
       DECL_DECOMPOSITION,
 
-      /// \brief A BindingDecl record.
+      /// A BindingDecl record.
       DECL_BINDING,
 
-      /// \brief A FileScopeAsmDecl record.
+      /// A FileScopeAsmDecl record.
       DECL_FILE_SCOPE_ASM,
 
-      /// \brief A BlockDecl record.
+      /// A BlockDecl record.
       DECL_BLOCK,
 
-      /// \brief A CapturedDecl record.
+      /// A CapturedDecl record.
       DECL_CAPTURED,
 
-      /// \brief A record that stores the set of declarations that are
+      /// A record that stores the set of declarations that are
       /// lexically stored within a given DeclContext.
       ///
       /// The record itself is a blob that is an array of declaration IDs,
@@ -1300,7 +1378,7 @@
       /// DeclContext::decls_begin() and DeclContext::decls_end().
       DECL_CONTEXT_LEXICAL,
 
-      /// \brief A record that stores the set of declarations that are
+      /// A record that stores the set of declarations that are
       /// visible from a given DeclContext.
       ///
       /// The record itself stores a set of mappings, each of which
@@ -1309,466 +1387,466 @@
       /// into a DeclContext via DeclContext::lookup.
       DECL_CONTEXT_VISIBLE,
 
-      /// \brief A LabelDecl record.
+      /// A LabelDecl record.
       DECL_LABEL,
 
-      /// \brief A NamespaceDecl record.
+      /// A NamespaceDecl record.
       DECL_NAMESPACE,
 
-      /// \brief A NamespaceAliasDecl record.
+      /// A NamespaceAliasDecl record.
       DECL_NAMESPACE_ALIAS,
 
-      /// \brief A UsingDecl record.
+      /// A UsingDecl record.
       DECL_USING,
 
-      /// \brief A UsingPackDecl record.
+      /// A UsingPackDecl record.
       DECL_USING_PACK,
 
-      /// \brief A UsingShadowDecl record.
+      /// A UsingShadowDecl record.
       DECL_USING_SHADOW,
 
-      /// \brief A ConstructorUsingShadowDecl record.
+      /// A ConstructorUsingShadowDecl record.
       DECL_CONSTRUCTOR_USING_SHADOW,
 
-      /// \brief A UsingDirecitveDecl record.
+      /// A UsingDirecitveDecl record.
       DECL_USING_DIRECTIVE,
 
-      /// \brief An UnresolvedUsingValueDecl record.
+      /// An UnresolvedUsingValueDecl record.
       DECL_UNRESOLVED_USING_VALUE,
 
-      /// \brief An UnresolvedUsingTypenameDecl record.
+      /// An UnresolvedUsingTypenameDecl record.
       DECL_UNRESOLVED_USING_TYPENAME,
 
-      /// \brief A LinkageSpecDecl record.
+      /// A LinkageSpecDecl record.
       DECL_LINKAGE_SPEC,
 
-      /// \brief An ExportDecl record.
+      /// An ExportDecl record.
       DECL_EXPORT,
 
-      /// \brief A CXXRecordDecl record.
+      /// A CXXRecordDecl record.
       DECL_CXX_RECORD,
 
-      /// \brief A CXXDeductionGuideDecl record.
+      /// A CXXDeductionGuideDecl record.
       DECL_CXX_DEDUCTION_GUIDE,
 
-      /// \brief A CXXMethodDecl record.
+      /// A CXXMethodDecl record.
       DECL_CXX_METHOD,
 
-      /// \brief A CXXConstructorDecl record.
+      /// A CXXConstructorDecl record.
       DECL_CXX_CONSTRUCTOR,
 
-      /// \brief A CXXConstructorDecl record for an inherited constructor.
+      /// A CXXConstructorDecl record for an inherited constructor.
       DECL_CXX_INHERITED_CONSTRUCTOR,
 
-      /// \brief A CXXDestructorDecl record.
+      /// A CXXDestructorDecl record.
       DECL_CXX_DESTRUCTOR,
 
-      /// \brief A CXXConversionDecl record.
+      /// A CXXConversionDecl record.
       DECL_CXX_CONVERSION,
 
-      /// \brief An AccessSpecDecl record.
+      /// An AccessSpecDecl record.
       DECL_ACCESS_SPEC,
 
-      /// \brief A FriendDecl record.
+      /// A FriendDecl record.
       DECL_FRIEND,
 
-      /// \brief A FriendTemplateDecl record.
+      /// A FriendTemplateDecl record.
       DECL_FRIEND_TEMPLATE,
 
-      /// \brief A ClassTemplateDecl record.
+      /// A ClassTemplateDecl record.
       DECL_CLASS_TEMPLATE,
 
-      /// \brief A ClassTemplateSpecializationDecl record.
+      /// A ClassTemplateSpecializationDecl record.
       DECL_CLASS_TEMPLATE_SPECIALIZATION,
 
-      /// \brief A ClassTemplatePartialSpecializationDecl record.
+      /// A ClassTemplatePartialSpecializationDecl record.
       DECL_CLASS_TEMPLATE_PARTIAL_SPECIALIZATION,
 
-      /// \brief A VarTemplateDecl record.
+      /// A VarTemplateDecl record.
       DECL_VAR_TEMPLATE,
 
-      /// \brief A VarTemplateSpecializationDecl record.
+      /// A VarTemplateSpecializationDecl record.
       DECL_VAR_TEMPLATE_SPECIALIZATION,
 
-      /// \brief A VarTemplatePartialSpecializationDecl record.
+      /// A VarTemplatePartialSpecializationDecl record.
       DECL_VAR_TEMPLATE_PARTIAL_SPECIALIZATION,
 
-      /// \brief A FunctionTemplateDecl record.
+      /// A FunctionTemplateDecl record.
       DECL_FUNCTION_TEMPLATE,
 
-      /// \brief A TemplateTypeParmDecl record.
+      /// A TemplateTypeParmDecl record.
       DECL_TEMPLATE_TYPE_PARM,
 
-      /// \brief A NonTypeTemplateParmDecl record.
+      /// A NonTypeTemplateParmDecl record.
       DECL_NON_TYPE_TEMPLATE_PARM,
 
-      /// \brief A TemplateTemplateParmDecl record.
+      /// A TemplateTemplateParmDecl record.
       DECL_TEMPLATE_TEMPLATE_PARM,
 
-      /// \brief A TypeAliasTemplateDecl record.
+      /// A TypeAliasTemplateDecl record.
       DECL_TYPE_ALIAS_TEMPLATE,
 
-      /// \brief A StaticAssertDecl record.
+      /// A StaticAssertDecl record.
       DECL_STATIC_ASSERT,
 
-      /// \brief A record containing CXXBaseSpecifiers.
+      /// A record containing CXXBaseSpecifiers.
       DECL_CXX_BASE_SPECIFIERS,
 
-      /// \brief A record containing CXXCtorInitializers.
+      /// A record containing CXXCtorInitializers.
       DECL_CXX_CTOR_INITIALIZERS,
 
-      /// \brief A IndirectFieldDecl record.
+      /// A IndirectFieldDecl record.
       DECL_INDIRECTFIELD,
 
-      /// \brief A NonTypeTemplateParmDecl record that stores an expanded
+      /// A NonTypeTemplateParmDecl record that stores an expanded
       /// non-type template parameter pack.
       DECL_EXPANDED_NON_TYPE_TEMPLATE_PARM_PACK,
 
-      /// \brief A TemplateTemplateParmDecl record that stores an expanded
+      /// A TemplateTemplateParmDecl record that stores an expanded
       /// template template parameter pack.
       DECL_EXPANDED_TEMPLATE_TEMPLATE_PARM_PACK,
 
-      /// \brief A ClassScopeFunctionSpecializationDecl record a class scope
+      /// A ClassScopeFunctionSpecializationDecl record a class scope
       /// function specialization. (Microsoft extension).
       DECL_CLASS_SCOPE_FUNCTION_SPECIALIZATION,
 
-      /// \brief An ImportDecl recording a module import.
+      /// An ImportDecl recording a module import.
       DECL_IMPORT,
 
-      /// \brief An OMPThreadPrivateDecl record.
+      /// An OMPThreadPrivateDecl record.
       DECL_OMP_THREADPRIVATE,
 
-      /// \brief An EmptyDecl record.
+      /// An EmptyDecl record.
       DECL_EMPTY,
 
-      /// \brief An ObjCTypeParamDecl record.
+      /// An ObjCTypeParamDecl record.
       DECL_OBJC_TYPE_PARAM,
 
-      /// \brief An OMPCapturedExprDecl record.
+      /// An OMPCapturedExprDecl record.
       DECL_OMP_CAPTUREDEXPR,
 
-      /// \brief A PragmaCommentDecl record.
+      /// A PragmaCommentDecl record.
       DECL_PRAGMA_COMMENT,
 
-      /// \brief A PragmaDetectMismatchDecl record.
+      /// A PragmaDetectMismatchDecl record.
       DECL_PRAGMA_DETECT_MISMATCH,
 
-      /// \brief An OMPDeclareReductionDecl record.
+      /// An OMPDeclareReductionDecl record.
       DECL_OMP_DECLARE_REDUCTION,
     };
 
-    /// \brief Record codes for each kind of statement or expression.
+    /// Record codes for each kind of statement or expression.
     ///
     /// These constants describe the records that describe statements
     /// or expressions. These records  occur within type and declarations
-    /// block, so they begin with record values of 128.  Each constant 
+    /// block, so they begin with record values of 128.  Each constant
     /// describes a record for a specific statement or expression class in the
     /// AST.
     enum StmtCode {
-      /// \brief A marker record that indicates that we are at the end
+      /// A marker record that indicates that we are at the end
       /// of an expression.
       STMT_STOP = 128,
 
-      /// \brief A NULL expression.
+      /// A NULL expression.
       STMT_NULL_PTR,
 
-      /// \brief A reference to a previously [de]serialized Stmt record.
+      /// A reference to a previously [de]serialized Stmt record.
       STMT_REF_PTR,
 
-      /// \brief A NullStmt record.
+      /// A NullStmt record.
       STMT_NULL,
 
-      /// \brief A CompoundStmt record.
+      /// A CompoundStmt record.
       STMT_COMPOUND,
 
-      /// \brief A CaseStmt record.
+      /// A CaseStmt record.
       STMT_CASE,
 
-      /// \brief A DefaultStmt record.
+      /// A DefaultStmt record.
       STMT_DEFAULT,
 
-      /// \brief A LabelStmt record.
+      /// A LabelStmt record.
       STMT_LABEL,
 
-      /// \brief An AttributedStmt record.
+      /// An AttributedStmt record.
       STMT_ATTRIBUTED,
 
-      /// \brief An IfStmt record.
+      /// An IfStmt record.
       STMT_IF,
 
-      /// \brief A SwitchStmt record.
+      /// A SwitchStmt record.
       STMT_SWITCH,
 
-      /// \brief A WhileStmt record.
+      /// A WhileStmt record.
       STMT_WHILE,
 
-      /// \brief A DoStmt record.
+      /// A DoStmt record.
       STMT_DO,
 
-      /// \brief A ForStmt record.
+      /// A ForStmt record.
       STMT_FOR,
 
-      /// \brief A GotoStmt record.
+      /// A GotoStmt record.
       STMT_GOTO,
 
-      /// \brief An IndirectGotoStmt record.
+      /// An IndirectGotoStmt record.
       STMT_INDIRECT_GOTO,
 
-      /// \brief A ContinueStmt record.
+      /// A ContinueStmt record.
       STMT_CONTINUE,
 
-      /// \brief A BreakStmt record.
+      /// A BreakStmt record.
       STMT_BREAK,
 
-      /// \brief A ReturnStmt record.
+      /// A ReturnStmt record.
       STMT_RETURN,
 
-      /// \brief A DeclStmt record.
+      /// A DeclStmt record.
       STMT_DECL,
 
-      /// \brief A CapturedStmt record.
+      /// A CapturedStmt record.
       STMT_CAPTURED,
 
-      /// \brief A GCC-style AsmStmt record.
+      /// A GCC-style AsmStmt record.
       STMT_GCCASM,
 
-      /// \brief A MS-style AsmStmt record.
+      /// A MS-style AsmStmt record.
       STMT_MSASM,
 
-      /// \brief A PredefinedExpr record.
+      /// A PredefinedExpr record.
       EXPR_PREDEFINED,
 
-      /// \brief A DeclRefExpr record.
+      /// A DeclRefExpr record.
       EXPR_DECL_REF,
 
-      /// \brief An IntegerLiteral record.
+      /// An IntegerLiteral record.
       EXPR_INTEGER_LITERAL,
 
-      /// \brief A FloatingLiteral record.
+      /// A FloatingLiteral record.
       EXPR_FLOATING_LITERAL,
 
-      /// \brief An ImaginaryLiteral record.
+      /// An ImaginaryLiteral record.
       EXPR_IMAGINARY_LITERAL,
 
-      /// \brief A StringLiteral record.
+      /// A StringLiteral record.
       EXPR_STRING_LITERAL,
 
-      /// \brief A CharacterLiteral record.
+      /// A CharacterLiteral record.
       EXPR_CHARACTER_LITERAL,
 
-      /// \brief A ParenExpr record.
+      /// A ParenExpr record.
       EXPR_PAREN,
 
-      /// \brief A ParenListExpr record.
+      /// A ParenListExpr record.
       EXPR_PAREN_LIST,
 
-      /// \brief A UnaryOperator record.
+      /// A UnaryOperator record.
       EXPR_UNARY_OPERATOR,
 
-      /// \brief An OffsetOfExpr record.
+      /// An OffsetOfExpr record.
       EXPR_OFFSETOF,
 
-      /// \brief A SizefAlignOfExpr record.
+      /// A SizefAlignOfExpr record.
       EXPR_SIZEOF_ALIGN_OF,
 
-      /// \brief An ArraySubscriptExpr record.
+      /// An ArraySubscriptExpr record.
       EXPR_ARRAY_SUBSCRIPT,
 
-      /// \brief A CallExpr record.
+      /// A CallExpr record.
       EXPR_CALL,
 
-      /// \brief A MemberExpr record.
+      /// A MemberExpr record.
       EXPR_MEMBER,
 
-      /// \brief A BinaryOperator record.
+      /// A BinaryOperator record.
       EXPR_BINARY_OPERATOR,
 
-      /// \brief A CompoundAssignOperator record.
+      /// A CompoundAssignOperator record.
       EXPR_COMPOUND_ASSIGN_OPERATOR,
 
-      /// \brief A ConditionOperator record.
+      /// A ConditionOperator record.
       EXPR_CONDITIONAL_OPERATOR,
 
-      /// \brief An ImplicitCastExpr record.
+      /// An ImplicitCastExpr record.
       EXPR_IMPLICIT_CAST,
 
-      /// \brief A CStyleCastExpr record.
+      /// A CStyleCastExpr record.
       EXPR_CSTYLE_CAST,
 
-      /// \brief A CompoundLiteralExpr record.
+      /// A CompoundLiteralExpr record.
       EXPR_COMPOUND_LITERAL,
 
-      /// \brief An ExtVectorElementExpr record.
+      /// An ExtVectorElementExpr record.
       EXPR_EXT_VECTOR_ELEMENT,
 
-      /// \brief An InitListExpr record.
+      /// An InitListExpr record.
       EXPR_INIT_LIST,
 
-      /// \brief A DesignatedInitExpr record.
+      /// A DesignatedInitExpr record.
       EXPR_DESIGNATED_INIT,
 
-      /// \brief A DesignatedInitUpdateExpr record.
+      /// A DesignatedInitUpdateExpr record.
       EXPR_DESIGNATED_INIT_UPDATE,
 
-      /// \brief An NoInitExpr record.
+      /// An NoInitExpr record.
       EXPR_NO_INIT,
 
-      /// \brief An ArrayInitLoopExpr record.
+      /// An ArrayInitLoopExpr record.
       EXPR_ARRAY_INIT_LOOP,
 
-      /// \brief An ArrayInitIndexExpr record.
+      /// An ArrayInitIndexExpr record.
       EXPR_ARRAY_INIT_INDEX,
 
-      /// \brief An ImplicitValueInitExpr record.
+      /// An ImplicitValueInitExpr record.
       EXPR_IMPLICIT_VALUE_INIT,
 
-      /// \brief A VAArgExpr record.
+      /// A VAArgExpr record.
       EXPR_VA_ARG,
 
-      /// \brief An AddrLabelExpr record.
+      /// An AddrLabelExpr record.
       EXPR_ADDR_LABEL,
 
-      /// \brief A StmtExpr record.
+      /// A StmtExpr record.
       EXPR_STMT,
 
-      /// \brief A ChooseExpr record.
+      /// A ChooseExpr record.
       EXPR_CHOOSE,
 
-      /// \brief A GNUNullExpr record.
+      /// A GNUNullExpr record.
       EXPR_GNU_NULL,
 
-      /// \brief A ShuffleVectorExpr record.
+      /// A ShuffleVectorExpr record.
       EXPR_SHUFFLE_VECTOR,
 
-      /// \brief A ConvertVectorExpr record.
+      /// A ConvertVectorExpr record.
       EXPR_CONVERT_VECTOR,
 
-      /// \brief BlockExpr
+      /// BlockExpr
       EXPR_BLOCK,
 
-      /// \brief A GenericSelectionExpr record.
+      /// A GenericSelectionExpr record.
       EXPR_GENERIC_SELECTION,
 
-      /// \brief A PseudoObjectExpr record.
+      /// A PseudoObjectExpr record.
       EXPR_PSEUDO_OBJECT,
 
-      /// \brief An AtomicExpr record.
+      /// An AtomicExpr record.
       EXPR_ATOMIC,
 
       // Objective-C
 
-      /// \brief An ObjCStringLiteral record.
+      /// An ObjCStringLiteral record.
       EXPR_OBJC_STRING_LITERAL,
 
       EXPR_OBJC_BOXED_EXPRESSION,
       EXPR_OBJC_ARRAY_LITERAL,
       EXPR_OBJC_DICTIONARY_LITERAL,
-   
-      /// \brief An ObjCEncodeExpr record.
+
+      /// An ObjCEncodeExpr record.
       EXPR_OBJC_ENCODE,
 
-      /// \brief An ObjCSelectorExpr record.
+      /// An ObjCSelectorExpr record.
       EXPR_OBJC_SELECTOR_EXPR,
 
-      /// \brief An ObjCProtocolExpr record.
+      /// An ObjCProtocolExpr record.
       EXPR_OBJC_PROTOCOL_EXPR,
 
-      /// \brief An ObjCIvarRefExpr record.
+      /// An ObjCIvarRefExpr record.
       EXPR_OBJC_IVAR_REF_EXPR,
 
-      /// \brief An ObjCPropertyRefExpr record.
+      /// An ObjCPropertyRefExpr record.
       EXPR_OBJC_PROPERTY_REF_EXPR,
 
-      /// \brief An ObjCSubscriptRefExpr record.
+      /// An ObjCSubscriptRefExpr record.
       EXPR_OBJC_SUBSCRIPT_REF_EXPR,
 
-      /// \brief UNUSED
+      /// UNUSED
       EXPR_OBJC_KVC_REF_EXPR,
 
-      /// \brief An ObjCMessageExpr record.
+      /// An ObjCMessageExpr record.
       EXPR_OBJC_MESSAGE_EXPR,
 
-      /// \brief An ObjCIsa Expr record.
+      /// An ObjCIsa Expr record.
       EXPR_OBJC_ISA,
 
-      /// \brief An ObjCIndirectCopyRestoreExpr record.
+      /// An ObjCIndirectCopyRestoreExpr record.
       EXPR_OBJC_INDIRECT_COPY_RESTORE,
 
-      /// \brief An ObjCForCollectionStmt record.
+      /// An ObjCForCollectionStmt record.
       STMT_OBJC_FOR_COLLECTION,
 
-      /// \brief An ObjCAtCatchStmt record.
+      /// An ObjCAtCatchStmt record.
       STMT_OBJC_CATCH,
 
-      /// \brief An ObjCAtFinallyStmt record.
+      /// An ObjCAtFinallyStmt record.
       STMT_OBJC_FINALLY,
 
-      /// \brief An ObjCAtTryStmt record.
+      /// An ObjCAtTryStmt record.
       STMT_OBJC_AT_TRY,
 
-      /// \brief An ObjCAtSynchronizedStmt record.
+      /// An ObjCAtSynchronizedStmt record.
       STMT_OBJC_AT_SYNCHRONIZED,
 
-      /// \brief An ObjCAtThrowStmt record.
+      /// An ObjCAtThrowStmt record.
       STMT_OBJC_AT_THROW,
 
-      /// \brief An ObjCAutoreleasePoolStmt record.
+      /// An ObjCAutoreleasePoolStmt record.
       STMT_OBJC_AUTORELEASE_POOL,
 
-      /// \brief An ObjCBoolLiteralExpr record.
+      /// An ObjCBoolLiteralExpr record.
       EXPR_OBJC_BOOL_LITERAL,
 
-      /// \brief An ObjCAvailabilityCheckExpr record.
+      /// An ObjCAvailabilityCheckExpr record.
       EXPR_OBJC_AVAILABILITY_CHECK,
 
       // C++
-      
-      /// \brief A CXXCatchStmt record.
+
+      /// A CXXCatchStmt record.
       STMT_CXX_CATCH,
 
-      /// \brief A CXXTryStmt record.
+      /// A CXXTryStmt record.
       STMT_CXX_TRY,
-      /// \brief A CXXForRangeStmt record.
+      /// A CXXForRangeStmt record.
 
       STMT_CXX_FOR_RANGE,
 
-      /// \brief A CXXOperatorCallExpr record.
+      /// A CXXOperatorCallExpr record.
       EXPR_CXX_OPERATOR_CALL,
 
-      /// \brief A CXXMemberCallExpr record.
+      /// A CXXMemberCallExpr record.
       EXPR_CXX_MEMBER_CALL,
 
-      /// \brief A CXXConstructExpr record.
+      /// A CXXConstructExpr record.
       EXPR_CXX_CONSTRUCT,
 
-      /// \brief A CXXInheritedCtorInitExpr record.
+      /// A CXXInheritedCtorInitExpr record.
       EXPR_CXX_INHERITED_CTOR_INIT,
 
-      /// \brief A CXXTemporaryObjectExpr record.
+      /// A CXXTemporaryObjectExpr record.
       EXPR_CXX_TEMPORARY_OBJECT,
 
-      /// \brief A CXXStaticCastExpr record.
+      /// A CXXStaticCastExpr record.
       EXPR_CXX_STATIC_CAST,
 
-      /// \brief A CXXDynamicCastExpr record.
+      /// A CXXDynamicCastExpr record.
       EXPR_CXX_DYNAMIC_CAST,
 
-      /// \brief A CXXReinterpretCastExpr record.
+      /// A CXXReinterpretCastExpr record.
       EXPR_CXX_REINTERPRET_CAST,
 
-      /// \brief A CXXConstCastExpr record.
+      /// A CXXConstCastExpr record.
       EXPR_CXX_CONST_CAST,
 
-      /// \brief A CXXFunctionalCastExpr record.
+      /// A CXXFunctionalCastExpr record.
       EXPR_CXX_FUNCTIONAL_CAST,
 
-      /// \brief A UserDefinedLiteral record.
+      /// A UserDefinedLiteral record.
       EXPR_USER_DEFINED_LITERAL,
 
-      /// \brief A CXXStdInitializerListExpr record.
+      /// A CXXStdInitializerListExpr record.
       EXPR_CXX_STD_INITIALIZER_LIST,
 
-      /// \brief A CXXBoolLiteralExpr record.
+      /// A CXXBoolLiteralExpr record.
       EXPR_CXX_BOOL_LITERAL,
 
       EXPR_CXX_NULL_PTR_LITERAL,  // CXXNullPtrLiteralExpr
@@ -1784,9 +1862,9 @@
       EXPR_CXX_NEW,               // CXXNewExpr
       EXPR_CXX_DELETE,            // CXXDeleteExpr
       EXPR_CXX_PSEUDO_DESTRUCTOR, // CXXPseudoDestructorExpr
-      
+
       EXPR_EXPR_WITH_CLEANUPS,    // ExprWithCleanups
-      
+
       EXPR_CXX_DEPENDENT_SCOPE_MEMBER,   // CXXDependentScopeMemberExpr
       EXPR_CXX_DEPENDENT_SCOPE_DECL_REF, // DependentScopeDeclRefExpr
       EXPR_CXX_UNRESOLVED_CONSTRUCT,     // CXXUnresolvedConstructExpr
@@ -1800,7 +1878,7 @@
       EXPR_BINARY_CONDITIONAL_OPERATOR,  // BinaryConditionalOperator
       EXPR_TYPE_TRAIT,            // TypeTraitExpr
       EXPR_ARRAY_TYPE_TRAIT,      // ArrayTypeTraitIntExpr
-      
+
       EXPR_PACK_EXPANSION,        // PackExpansionExpr
       EXPR_SIZEOF_PACK,           // SizeOfPackExpr
       EXPR_SUBST_NON_TYPE_TEMPLATE_PARM, // SubstNonTypeTemplateParmExpr
@@ -1810,7 +1888,7 @@
       EXPR_CXX_FOLD,              // CXXFoldExpr
 
       // CUDA
-      EXPR_CUDA_KERNEL_CALL,       // CUDAKernelCallExpr      
+      EXPR_CUDA_KERNEL_CALL,       // CUDAKernelCallExpr
 
       // OpenCL
       EXPR_ASTYPE,                 // AsTypeExpr
@@ -1887,24 +1965,24 @@
       EXPR_DEPENDENT_COAWAIT,
     };
 
-    /// \brief The kinds of designators that can occur in a
+    /// The kinds of designators that can occur in a
     /// DesignatedInitExpr.
     enum DesignatorTypes {
-      /// \brief Field designator where only the field name is known.
+      /// Field designator where only the field name is known.
       DESIG_FIELD_NAME  = 0,
 
-      /// \brief Field designator where the field has been resolved to
+      /// Field designator where the field has been resolved to
       /// a declaration.
       DESIG_FIELD_DECL  = 1,
 
-      /// \brief Array designator.
+      /// Array designator.
       DESIG_ARRAY       = 2,
 
-      /// \brief GNU array range designator.
+      /// GNU array range designator.
       DESIG_ARRAY_RANGE = 3
     };
 
-    /// \brief The different kinds of data that can occur in a
+    /// The different kinds of data that can occur in a
     /// CtorInitializer.
     enum CtorInitializerType {
       CTOR_INITIALIZER_BASE,
@@ -1913,65 +1991,65 @@
       CTOR_INITIALIZER_INDIRECT_MEMBER
     };
 
-    /// \brief Describes the redeclarations of a declaration.
+    /// Describes the redeclarations of a declaration.
     struct LocalRedeclarationsInfo {
       // The ID of the first declaration
       DeclID FirstID;
 
       // Offset into the array of redeclaration chains.
       unsigned Offset;
-      
+
       friend bool operator<(const LocalRedeclarationsInfo &X,
                             const LocalRedeclarationsInfo &Y) {
         return X.FirstID < Y.FirstID;
       }
-      
+
       friend bool operator>(const LocalRedeclarationsInfo &X,
                             const LocalRedeclarationsInfo &Y) {
         return X.FirstID > Y.FirstID;
       }
-      
+
       friend bool operator<=(const LocalRedeclarationsInfo &X,
                              const LocalRedeclarationsInfo &Y) {
         return X.FirstID <= Y.FirstID;
       }
-      
+
       friend bool operator>=(const LocalRedeclarationsInfo &X,
                              const LocalRedeclarationsInfo &Y) {
         return X.FirstID >= Y.FirstID;
       }
     };
 
-    /// \brief Describes the categories of an Objective-C class.
+    /// Describes the categories of an Objective-C class.
     struct ObjCCategoriesInfo {
       // The ID of the definition
       DeclID DefinitionID;
 
       // Offset into the array of category lists.
       unsigned Offset;
-      
+
       friend bool operator<(const ObjCCategoriesInfo &X,
                             const ObjCCategoriesInfo &Y) {
         return X.DefinitionID < Y.DefinitionID;
       }
-      
+
       friend bool operator>(const ObjCCategoriesInfo &X,
                             const ObjCCategoriesInfo &Y) {
         return X.DefinitionID > Y.DefinitionID;
       }
-      
+
       friend bool operator<=(const ObjCCategoriesInfo &X,
                              const ObjCCategoriesInfo &Y) {
         return X.DefinitionID <= Y.DefinitionID;
       }
-      
+
       friend bool operator>=(const ObjCCategoriesInfo &X,
                              const ObjCCategoriesInfo &Y) {
         return X.DefinitionID >= Y.DefinitionID;
       }
     };
 
-    /// \brief A key used when looking up entities by \ref DeclarationName.
+    /// A key used when looking up entities by \ref DeclarationName.
     ///
     /// Different \ref DeclarationNames are mapped to different keys, but the
     /// same key can occasionally represent multiple names (for names that
diff --git a/linux-x64/clang/include/clang/Serialization/ASTDeserializationListener.h b/linux-x64/clang/include/clang/Serialization/ASTDeserializationListener.h
index c26f3e0..c462a90 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTDeserializationListener.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTDeserializationListener.h
@@ -32,28 +32,28 @@
 public:
   virtual ~ASTDeserializationListener();
 
-  /// \brief The ASTReader was initialized.
+  /// The ASTReader was initialized.
   virtual void ReaderInitialized(ASTReader *Reader) { }
 
-  /// \brief An identifier was deserialized from the AST file.
+  /// An identifier was deserialized from the AST file.
   virtual void IdentifierRead(serialization::IdentID ID,
                               IdentifierInfo *II) { }
-  /// \brief A macro was read from the AST file.
+  /// A macro was read from the AST file.
   virtual void MacroRead(serialization::MacroID ID, MacroInfo *MI) { }
-  /// \brief A type was deserialized from the AST file. The ID here has the
+  /// A type was deserialized from the AST file. The ID here has the
   ///        qualifier bits already removed, and T is guaranteed to be locally
   ///        unqualified.
   virtual void TypeRead(serialization::TypeIdx Idx, QualType T) { }
-  /// \brief A decl was deserialized from the AST file.
+  /// A decl was deserialized from the AST file.
   virtual void DeclRead(serialization::DeclID ID, const Decl *D) { }
-  /// \brief A selector was read from the AST file.
+  /// A selector was read from the AST file.
   virtual void SelectorRead(serialization::SelectorID iD, Selector Sel) {}
-  /// \brief A macro definition was read from the AST file.
+  /// A macro definition was read from the AST file.
   virtual void MacroDefinitionRead(serialization::PreprocessedEntityID,
                                    MacroDefinitionRecord *MD) {}
-  /// \brief A module definition was read from the AST file.
+  /// A module definition was read from the AST file.
   virtual void ModuleRead(serialization::SubmoduleID ID, Module *Mod) {}
-  /// \brief A module import was read from the AST file.
+  /// A module import was read from the AST file.
   virtual void ModuleImportRead(serialization::SubmoduleID ID,
                                 SourceLocation ImportLoc) {}
 };
diff --git a/linux-x64/clang/include/clang/Serialization/ASTReader.h b/linux-x64/clang/include/clang/Serialization/ASTReader.h
index 01cd055..b959f59 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTReader.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTReader.h
@@ -28,7 +28,6 @@
 #include "clang/Basic/OpenCLOptions.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/Version.h"
-#include "clang/Basic/VersionTuple.h"
 #include "clang/Lex/ExternalPreprocessorSource.h"
 #include "clang/Lex/HeaderSearch.h"
 #include "clang/Lex/PreprocessingRecord.h"
@@ -62,6 +61,7 @@
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/Timer.h"
+#include "llvm/Support/VersionTuple.h"
 #include <cassert>
 #include <cstddef>
 #include <cstdint>
@@ -117,7 +117,7 @@
 class ValueDecl;
 class VarDecl;
 
-/// \brief Abstract interface for callback invocations by the ASTReader.
+/// Abstract interface for callback invocations by the ASTReader.
 ///
 /// While reading an AST file, the ASTReader will call the methods of the
 /// listener to pass on specific information. Some of the listener methods can
@@ -127,7 +127,7 @@
 public:
   virtual ~ASTReaderListener();
 
-  /// \brief Receives the full Clang version information.
+  /// Receives the full Clang version information.
   ///
   /// \returns true to indicate that the version is invalid. Subclasses should
   /// generally defer to this implementation.
@@ -138,7 +138,7 @@
   virtual void ReadModuleName(StringRef ModuleName) {}
   virtual void ReadModuleMapFile(StringRef ModuleMapPath) {}
 
-  /// \brief Receives the language options.
+  /// Receives the language options.
   ///
   /// \returns true to indicate the options are invalid or false otherwise.
   virtual bool ReadLanguageOptions(const LangOptions &LangOpts,
@@ -147,7 +147,7 @@
     return false;
   }
 
-  /// \brief Receives the target options.
+  /// Receives the target options.
   ///
   /// \returns true to indicate the target options are invalid, or false
   /// otherwise.
@@ -156,7 +156,7 @@
     return false;
   }
 
-  /// \brief Receives the diagnostic options.
+  /// Receives the diagnostic options.
   ///
   /// \returns true to indicate the diagnostic options are invalid, or false
   /// otherwise.
@@ -166,7 +166,7 @@
     return false;
   }
 
-  /// \brief Receives the file system options.
+  /// Receives the file system options.
   ///
   /// \returns true to indicate the file system options are invalid, or false
   /// otherwise.
@@ -175,7 +175,7 @@
     return false;
   }
 
-  /// \brief Receives the header search options.
+  /// Receives the header search options.
   ///
   /// \returns true to indicate the header search options are invalid, or false
   /// otherwise.
@@ -185,7 +185,7 @@
     return false;
   }
 
-  /// \brief Receives the preprocessor options.
+  /// Receives the preprocessor options.
   ///
   /// \param SuggestedPredefines Can be filled in with the set of predefines
   /// that are suggested by the preprocessor options. Typically only used when
@@ -199,7 +199,7 @@
     return false;
   }
 
-  /// \brief Receives __COUNTER__ value.
+  /// Receives __COUNTER__ value.
   virtual void ReadCounter(const serialization::ModuleFile &M,
                            unsigned Value) {}
 
@@ -207,15 +207,15 @@
   virtual void visitModuleFile(StringRef Filename,
                                serialization::ModuleKind Kind) {}
 
-  /// \brief Returns true if this \c ASTReaderListener wants to receive the
+  /// Returns true if this \c ASTReaderListener wants to receive the
   /// input files of the AST file via \c visitInputFile, false otherwise.
   virtual bool needsInputFileVisitation() { return false; }
 
-  /// \brief Returns true if this \c ASTReaderListener wants to receive the
+  /// Returns true if this \c ASTReaderListener wants to receive the
   /// system input files of the AST file via \c visitInputFile, false otherwise.
   virtual bool needsSystemInputFileVisitation() { return false; }
 
-  /// \brief if \c needsInputFileVisitation returns true, this is called for
+  /// if \c needsInputFileVisitation returns true, this is called for
   /// each non-system input file of the AST File. If
   /// \c needsSystemInputFileVisitation is true, then it is called for all
   /// system input files as well.
@@ -226,11 +226,11 @@
     return true;
   }
 
-  /// \brief Returns true if this \c ASTReaderListener wants to receive the
+  /// Returns true if this \c ASTReaderListener wants to receive the
   /// imports of the AST file via \c visitImport, false otherwise.
   virtual bool needsImportVisitation() const { return false; }
 
-  /// \brief If needsImportVisitation returns \c true, this is called for each
+  /// If needsImportVisitation returns \c true, this is called for each
   /// AST file imported by this AST file.
   virtual void visitImport(StringRef Filename) {}
 
@@ -239,7 +239,7 @@
                  const ModuleFileExtensionMetadata &Metadata) {}
 };
 
-/// \brief Simple wrapper class for chaining listeners.
+/// Simple wrapper class for chaining listeners.
 class ChainedASTReaderListener : public ASTReaderListener {
   std::unique_ptr<ASTReaderListener> First;
   std::unique_ptr<ASTReaderListener> Second;
@@ -283,7 +283,7 @@
          const ModuleFileExtensionMetadata &Metadata) override;
 };
 
-/// \brief ASTReaderListener implementation to validate the information of
+/// ASTReaderListener implementation to validate the information of
 /// the PCH file against an initialized Preprocessor.
 class PCHValidator : public ASTReaderListener {
   Preprocessor &PP;
@@ -310,7 +310,7 @@
   void Error(const char *Msg);
 };
 
-/// \brief ASTReaderListenter implementation to set SuggestedPredefines of
+/// ASTReaderListenter implementation to set SuggestedPredefines of
 /// ASTReader which is required to use a pch file. This is the replacement
 /// of PCHValidator or SimplePCHValidator when using a pch file without
 /// validating it.
@@ -332,14 +332,14 @@
 
 class ASTIdentifierLookupTrait;
 
-/// \brief The on-disk hash table(s) used for DeclContext name lookup.
+/// The on-disk hash table(s) used for DeclContext name lookup.
 struct DeclContextLookupTable;
 
 } // namespace reader
 
 } // namespace serialization
 
-/// \brief Reads an AST files chain containing the contents of a translation
+/// Reads an AST files chain containing the contents of a translation
 /// unit.
 ///
 /// The ASTReader class reads bitstreams (produced by the ASTWriter
@@ -360,7 +360,7 @@
     public ExternalSLocEntrySource
 {
 public:
-  /// \brief Types of AST files.
+  /// Types of AST files.
   friend class ASTDeclReader;
   friend class ASTIdentifierIterator;
   friend class ASTRecordReader;
@@ -375,31 +375,31 @@
   using RecordData = SmallVector<uint64_t, 64>;
   using RecordDataImpl = SmallVectorImpl<uint64_t>;
 
-  /// \brief The result of reading the control block of an AST file, which
+  /// The result of reading the control block of an AST file, which
   /// can fail for various reasons.
   enum ASTReadResult {
-    /// \brief The control block was read successfully. Aside from failures,
+    /// The control block was read successfully. Aside from failures,
     /// the AST file is safe to read into the current context.
     Success,
 
-    /// \brief The AST file itself appears corrupted.
+    /// The AST file itself appears corrupted.
     Failure,
 
-    /// \brief The AST file was missing.
+    /// The AST file was missing.
     Missing,
 
-    /// \brief The AST file is out-of-date relative to its input files,
+    /// The AST file is out-of-date relative to its input files,
     /// and needs to be regenerated.
     OutOfDate,
 
-    /// \brief The AST file was written by a different version of Clang.
+    /// The AST file was written by a different version of Clang.
     VersionMismatch,
 
-    /// \brief The AST file was writtten with a different language/target
+    /// The AST file was writtten with a different language/target
     /// configuration.
     ConfigurationMismatch,
 
-    /// \brief The AST file has errors.
+    /// The AST file has errors.
     HadErrors
   };
 
@@ -411,10 +411,10 @@
   using ModuleReverseIterator = ModuleManager::ModuleReverseIterator;
 
 private:
-  /// \brief The receiver of some callbacks invoked by ASTReader.
+  /// The receiver of some callbacks invoked by ASTReader.
   std::unique_ptr<ASTReaderListener> Listener;
 
-  /// \brief The receiver of deserialization events.
+  /// The receiver of deserialization events.
   ASTDeserializationListener *DeserializationListener = nullptr;
 
   bool OwnsDeserializationListener = false;
@@ -424,26 +424,26 @@
   const PCHContainerReader &PCHContainerRdr;
   DiagnosticsEngine &Diags;
 
-  /// \brief The semantic analysis object that will be processing the
+  /// The semantic analysis object that will be processing the
   /// AST files and the translation unit that uses it.
   Sema *SemaObj = nullptr;
 
-  /// \brief The preprocessor that will be loading the source file.
+  /// The preprocessor that will be loading the source file.
   Preprocessor &PP;
 
-  /// \brief The AST context into which we'll read the AST files.
+  /// The AST context into which we'll read the AST files.
   ASTContext *ContextObj = nullptr;
 
-  /// \brief The AST consumer.
+  /// The AST consumer.
   ASTConsumer *Consumer = nullptr;
 
-  /// \brief The module manager which manages modules and their dependencies
+  /// The module manager which manages modules and their dependencies
   ModuleManager ModuleMgr;
 
   /// The cache that manages memory buffers for PCM files.
   MemoryBufferCache &PCMCache;
 
-  /// \brief A dummy identifier resolver used to merge TU-scope declarations in
+  /// A dummy identifier resolver used to merge TU-scope declarations in
   /// C, for the cases where we don't have a Sema object to provide a real
   /// identifier resolver.
   IdentifierResolver DummyIdResolver;
@@ -451,31 +451,31 @@
   /// A mapping from extension block names to module file extensions.
   llvm::StringMap<std::shared_ptr<ModuleFileExtension>> ModuleFileExtensions;
 
-  /// \brief A timer used to track the time spent deserializing.
+  /// A timer used to track the time spent deserializing.
   std::unique_ptr<llvm::Timer> ReadTimer;
 
-  /// \brief The location where the module file will be considered as
+  /// The location where the module file will be considered as
   /// imported from. For non-module AST types it should be invalid.
   SourceLocation CurrentImportLoc;
 
-  /// \brief The global module index, if loaded.
+  /// The global module index, if loaded.
   std::unique_ptr<GlobalModuleIndex> GlobalIndex;
 
-  /// \brief A map of global bit offsets to the module that stores entities
+  /// A map of global bit offsets to the module that stores entities
   /// at those bit offsets.
   ContinuousRangeMap<uint64_t, ModuleFile*, 4> GlobalBitOffsetsMap;
 
-  /// \brief A map of negated SLocEntryIDs to the modules containing them.
+  /// A map of negated SLocEntryIDs to the modules containing them.
   ContinuousRangeMap<unsigned, ModuleFile*, 64> GlobalSLocEntryMap;
 
   using GlobalSLocOffsetMapType =
       ContinuousRangeMap<unsigned, ModuleFile *, 64>;
 
-  /// \brief A map of reversed (SourceManager::MaxLoadedOffset - SLocOffset)
+  /// A map of reversed (SourceManager::MaxLoadedOffset - SLocOffset)
   /// SourceLocation offsets to the modules containing them.
   GlobalSLocOffsetMapType GlobalSLocOffsetMap;
 
-  /// \brief Types that have already been loaded from the chain.
+  /// Types that have already been loaded from the chain.
   ///
   /// When the pointer at index I is non-NULL, the type with
   /// ID = (I + 1) << FastQual::Width has already been loaded
@@ -484,12 +484,12 @@
   using GlobalTypeMapType =
       ContinuousRangeMap<serialization::TypeID, ModuleFile *, 4>;
 
-  /// \brief Mapping from global type IDs to the module in which the
+  /// Mapping from global type IDs to the module in which the
   /// type resides along with the offset that should be added to the
   /// global type ID to produce a local ID.
   GlobalTypeMapType GlobalTypeMap;
 
-  /// \brief Declarations that have already been loaded from the chain.
+  /// Declarations that have already been loaded from the chain.
   ///
   /// When the pointer at index I is non-NULL, the declaration with ID
   /// = I + 1 has already been loaded.
@@ -498,7 +498,7 @@
   using GlobalDeclMapType =
       ContinuousRangeMap<serialization::DeclID, ModuleFile *, 4>;
 
-  /// \brief Mapping from global declaration IDs to the module in which the
+  /// Mapping from global declaration IDs to the module in which the
   /// declaration resides.
   GlobalDeclMapType GlobalDeclMap;
 
@@ -507,7 +507,7 @@
   using DeclUpdateOffsetsMap =
       llvm::DenseMap<serialization::DeclID, FileOffsetsTy>;
 
-  /// \brief Declarations that have modifications residing in a later file
+  /// Declarations that have modifications residing in a later file
   /// in the chain.
   DeclUpdateOffsetsMap DeclUpdateOffsets;
 
@@ -523,30 +523,35 @@
         : D(D), ID(ID), JustLoaded(JustLoaded) {}
   };
 
-  /// \brief Declaration updates for already-loaded declarations that we need
+  /// Declaration updates for already-loaded declarations that we need
   /// to apply once we finish processing an import.
   llvm::SmallVector<PendingUpdateRecord, 16> PendingUpdateRecords;
 
   enum class PendingFakeDefinitionKind { NotFake, Fake, FakeLoaded };
 
-  /// \brief The DefinitionData pointers that we faked up for class definitions
+  /// The DefinitionData pointers that we faked up for class definitions
   /// that we needed but hadn't loaded yet.
   llvm::DenseMap<void *, PendingFakeDefinitionKind> PendingFakeDefinitionData;
 
-  /// \brief Exception specification updates that have been loaded but not yet
+  /// Exception specification updates that have been loaded but not yet
   /// propagated across the relevant redeclaration chain. The map key is the
   /// canonical declaration (used only for deduplication) and the value is a
   /// declaration that has an exception specification.
   llvm::SmallMapVector<Decl *, FunctionDecl *, 4> PendingExceptionSpecUpdates;
 
-  /// \brief Declarations that have been imported and have typedef names for
+  /// Deduced return type updates that have been loaded but not yet propagated
+  /// across the relevant redeclaration chain. The map key is the canonical
+  /// declaration and the value is the deduced return type.
+  llvm::SmallMapVector<FunctionDecl *, QualType, 4> PendingDeducedTypeUpdates;
+
+  /// Declarations that have been imported and have typedef names for
   /// linkage purposes.
   llvm::DenseMap<std::pair<DeclContext *, IdentifierInfo *>, NamedDecl *>
       ImportedTypedefNamesForLinkage;
 
-  /// \brief Mergeable declaration contexts that have anonymous declarations
+  /// Mergeable declaration contexts that have anonymous declarations
   /// within them, and those anonymous declarations.
-  llvm::DenseMap<DeclContext*, llvm::SmallVector<NamedDecl*, 2>>
+  llvm::DenseMap<Decl*, llvm::SmallVector<NamedDecl*, 2>>
     AnonymousDeclarationsForMerging;
 
   struct FileDeclsInfo {
@@ -558,21 +563,21 @@
         : Mod(Mod), Decls(Decls) {}
   };
 
-  /// \brief Map from a FileID to the file-level declarations that it contains.
+  /// Map from a FileID to the file-level declarations that it contains.
   llvm::DenseMap<FileID, FileDeclsInfo> FileDeclIDs;
 
-  /// \brief An array of lexical contents of a declaration context, as a sequence of
+  /// An array of lexical contents of a declaration context, as a sequence of
   /// Decl::Kind, DeclID pairs.
   using LexicalContents = ArrayRef<llvm::support::unaligned_uint32_t>;
 
-  /// \brief Map from a DeclContext to its lexical contents.
+  /// Map from a DeclContext to its lexical contents.
   llvm::DenseMap<const DeclContext*, std::pair<ModuleFile*, LexicalContents>>
       LexicalDecls;
 
-  /// \brief Map from the TU to its lexical contents from each module file.
+  /// Map from the TU to its lexical contents from each module file.
   std::vector<std::pair<ModuleFile*, LexicalContents>> TULexicalDecls;
 
-  /// \brief Map from a DeclContext to its lookup tables.
+  /// Map from a DeclContext to its lookup tables.
   llvm::DenseMap<const DeclContext *,
                  serialization::reader::DeclContextLookupTable> Lookups;
 
@@ -586,12 +591,12 @@
   };
   using DeclContextVisibleUpdates = SmallVector<PendingVisibleUpdate, 1>;
 
-  /// \brief Updates to the visible declarations of declaration contexts that
+  /// Updates to the visible declarations of declaration contexts that
   /// haven't been loaded yet.
   llvm::DenseMap<serialization::DeclID, DeclContextVisibleUpdates>
       PendingVisibleUpdates;
 
-  /// \brief The set of C++ or Objective-C classes that have forward 
+  /// The set of C++ or Objective-C classes that have forward
   /// declarations that have not yet been linked to their definitions.
   llvm::SmallPtrSet<Decl *, 4> PendingDefinitions;
 
@@ -600,24 +605,24 @@
                       llvm::SmallDenseMap<Decl *, unsigned, 4>,
                       SmallVector<std::pair<Decl *, uint64_t>, 4>>;
 
-  /// \brief Functions or methods that have bodies that will be attached.
+  /// Functions or methods that have bodies that will be attached.
   PendingBodiesMap PendingBodies;
 
-  /// \brief Definitions for which we have added merged definitions but not yet
+  /// Definitions for which we have added merged definitions but not yet
   /// performed deduplication.
   llvm::SetVector<NamedDecl *> PendingMergedDefinitionsToDeduplicate;
 
-  /// \brief Read the record that describes the lexical contents of a DC.
+  /// Read the record that describes the lexical contents of a DC.
   bool ReadLexicalDeclContextStorage(ModuleFile &M,
                                      llvm::BitstreamCursor &Cursor,
                                      uint64_t Offset, DeclContext *DC);
 
-  /// \brief Read the record that describes the visible contents of a DC.
+  /// Read the record that describes the visible contents of a DC.
   bool ReadVisibleDeclContextStorage(ModuleFile &M,
                                      llvm::BitstreamCursor &Cursor,
                                      uint64_t Offset, serialization::DeclID ID);
 
-  /// \brief A vector containing identifiers that have already been
+  /// A vector containing identifiers that have already been
   /// loaded.
   ///
   /// If the pointer at index I is non-NULL, then it refers to the
@@ -628,12 +633,12 @@
   using GlobalIdentifierMapType =
       ContinuousRangeMap<serialization::IdentID, ModuleFile *, 4>;
 
-  /// \brief Mapping from global identifier IDs to the module in which the
+  /// Mapping from global identifier IDs to the module in which the
   /// identifier resides along with the offset that should be added to the
   /// global identifier ID to produce a local ID.
   GlobalIdentifierMapType GlobalIdentifierMap;
 
-  /// \brief A vector containing macros that have already been
+  /// A vector containing macros that have already been
   /// loaded.
   ///
   /// If the pointer at index I is non-NULL, then it refers to the
@@ -644,7 +649,7 @@
   using LoadedMacroInfo =
       std::pair<IdentifierInfo *, serialization::SubmoduleID>;
 
-  /// \brief A set of #undef directives that we have loaded; used to
+  /// A set of #undef directives that we have loaded; used to
   /// deduplicate the same #undef information coming from multiple module
   /// files.
   llvm::DenseSet<LoadedMacroInfo> LoadedUndefs;
@@ -652,59 +657,59 @@
   using GlobalMacroMapType =
       ContinuousRangeMap<serialization::MacroID, ModuleFile *, 4>;
 
-  /// \brief Mapping from global macro IDs to the module in which the
+  /// Mapping from global macro IDs to the module in which the
   /// macro resides along with the offset that should be added to the
   /// global macro ID to produce a local ID.
   GlobalMacroMapType GlobalMacroMap;
 
-  /// \brief A vector containing submodules that have already been loaded.
+  /// A vector containing submodules that have already been loaded.
   ///
   /// This vector is indexed by the Submodule ID (-1). NULL submodule entries
   /// indicate that the particular submodule ID has not yet been loaded.
   SmallVector<Module *, 2> SubmodulesLoaded;
-  
+
   using GlobalSubmoduleMapType =
       ContinuousRangeMap<serialization::SubmoduleID, ModuleFile *, 4>;
-  
-  /// \brief Mapping from global submodule IDs to the module file in which the
+
+  /// Mapping from global submodule IDs to the module file in which the
   /// submodule resides along with the offset that should be added to the
   /// global submodule ID to produce a local ID.
   GlobalSubmoduleMapType GlobalSubmoduleMap;
 
-  /// \brief A set of hidden declarations.
+  /// A set of hidden declarations.
   using HiddenNames = SmallVector<Decl *, 2>;
   using HiddenNamesMapType = llvm::DenseMap<Module *, HiddenNames>;
 
-  /// \brief A mapping from each of the hidden submodules to the deserialized
+  /// A mapping from each of the hidden submodules to the deserialized
   /// declarations in that submodule that could be made visible.
   HiddenNamesMapType HiddenNamesMap;
-  
-  /// \brief A module import, export, or conflict that hasn't yet been resolved.
+
+  /// A module import, export, or conflict that hasn't yet been resolved.
   struct UnresolvedModuleRef {
-    /// \brief The file in which this module resides.
+    /// The file in which this module resides.
     ModuleFile *File;
-    
-    /// \brief The module that is importing or exporting.
+
+    /// The module that is importing or exporting.
     Module *Mod;
 
-    /// \brief The kind of module reference.
+    /// The kind of module reference.
     enum { Import, Export, Conflict } Kind;
 
-    /// \brief The local ID of the module that is being exported.
+    /// The local ID of the module that is being exported.
     unsigned ID;
 
-    /// \brief Whether this is a wildcard export.
+    /// Whether this is a wildcard export.
     unsigned IsWildcard : 1;
 
-    /// \brief String data.
+    /// String data.
     StringRef String;
   };
-  
-  /// \brief The set of module imports and exports that still need to be 
+
+  /// The set of module imports and exports that still need to be
   /// resolved.
   SmallVector<UnresolvedModuleRef, 2> UnresolvedModuleRefs;
-  
-  /// \brief A vector containing selectors that have already been loaded.
+
+  /// A vector containing selectors that have already been loaded.
   ///
   /// This vector is indexed by the Selector ID (-1). NULL selector
   /// entries indicate that the particular selector ID has not yet
@@ -714,11 +719,11 @@
   using GlobalSelectorMapType =
       ContinuousRangeMap<serialization::SelectorID, ModuleFile *, 4>;
 
-  /// \brief Mapping from global selector IDs to the module in which the
+  /// Mapping from global selector IDs to the module in which the
   /// global selector ID to produce a local ID.
   GlobalSelectorMapType GlobalSelectorMap;
 
-  /// \brief The generation number of the last time we loaded data from the
+  /// The generation number of the last time we loaded data from the
   /// global method pool for this selector.
   llvm::DenseMap<Selector, unsigned> SelectorGeneration;
 
@@ -737,14 +742,14 @@
   using PendingMacroIDsMap =
       llvm::MapVector<IdentifierInfo *, SmallVector<PendingMacroInfo, 2>>;
 
-  /// \brief Mapping from identifiers that have a macro history to the global
+  /// Mapping from identifiers that have a macro history to the global
   /// IDs have not yet been deserialized to the global IDs of those macros.
   PendingMacroIDsMap PendingMacroIDs;
 
   using GlobalPreprocessedEntityMapType =
       ContinuousRangeMap<unsigned, ModuleFile *, 4>;
 
-  /// \brief Mapping from global preprocessing entity IDs to the module in
+  /// Mapping from global preprocessing entity IDs to the module in
   /// which the preprocessed entity resides along with the offset that should be
   /// added to the global preprocessing entity ID to produce a local ID.
   GlobalPreprocessedEntityMapType GlobalPreprocessedEntityMap;
@@ -752,15 +757,15 @@
   using GlobalSkippedRangeMapType =
       ContinuousRangeMap<unsigned, ModuleFile *, 4>;
 
-  /// \brief Mapping from global skipped range base IDs to the module in which
+  /// Mapping from global skipped range base IDs to the module in which
   /// the skipped ranges reside.
   GlobalSkippedRangeMapType GlobalSkippedRangeMap;
 
   /// \name CodeGen-relevant special data
-  /// \brief Fields containing data that is relevant to CodeGen.
+  /// Fields containing data that is relevant to CodeGen.
   //@{
 
-  /// \brief The IDs of all declarations that fulfill the criteria of
+  /// The IDs of all declarations that fulfill the criteria of
   /// "interesting" decls.
   ///
   /// This contains the data loaded from all EAGERLY_DESERIALIZED_DECLS blocks
@@ -768,21 +773,21 @@
   /// the consumer eagerly.
   SmallVector<uint64_t, 16> EagerlyDeserializedDecls;
 
-  /// \brief The IDs of all tentative definitions stored in the chain.
+  /// The IDs of all tentative definitions stored in the chain.
   ///
   /// Sema keeps track of all tentative definitions in a TU because it has to
   /// complete them and pass them on to CodeGen. Thus, tentative definitions in
   /// the PCH chain must be eagerly deserialized.
   SmallVector<uint64_t, 16> TentativeDefinitions;
 
-  /// \brief The IDs of all CXXRecordDecls stored in the chain whose VTables are
+  /// The IDs of all CXXRecordDecls stored in the chain whose VTables are
   /// used.
   ///
   /// CodeGen has to emit VTables for these records, so they have to be eagerly
   /// deserialized.
   SmallVector<uint64_t, 64> VTableUses;
 
-  /// \brief A snapshot of the pending instantiations in the chain.
+  /// A snapshot of the pending instantiations in the chain.
   ///
   /// This record tracks the instantiations that Sema has to perform at the
   /// end of the TU. It consists of a pair of values for every pending
@@ -793,26 +798,26 @@
   //@}
 
   /// \name DiagnosticsEngine-relevant special data
-  /// \brief Fields containing data that is used for generating diagnostics
+  /// Fields containing data that is used for generating diagnostics
   //@{
 
-  /// \brief A snapshot of Sema's unused file-scoped variable tracking, for
+  /// A snapshot of Sema's unused file-scoped variable tracking, for
   /// generating warnings.
   SmallVector<uint64_t, 16> UnusedFileScopedDecls;
 
-  /// \brief A list of all the delegating constructors we've seen, to diagnose
+  /// A list of all the delegating constructors we've seen, to diagnose
   /// cycles.
   SmallVector<uint64_t, 4> DelegatingCtorDecls;
 
-  /// \brief Method selectors used in a @selector expression. Used for
+  /// Method selectors used in a @selector expression. Used for
   /// implementation of -Wselector.
   SmallVector<uint64_t, 64> ReferencedSelectorsData;
 
-  /// \brief A snapshot of Sema's weak undeclared identifier tracking, for
+  /// A snapshot of Sema's weak undeclared identifier tracking, for
   /// generating warnings.
   SmallVector<uint64_t, 64> WeakUndeclaredIdentifiers;
 
-  /// \brief The IDs of type aliases for ext_vectors that exist in the chain.
+  /// The IDs of type aliases for ext_vectors that exist in the chain.
   ///
   /// Used by Sema for finding sugared names for ext_vectors in diagnostics.
   SmallVector<uint64_t, 4> ExtVectorDecls;
@@ -820,48 +825,48 @@
   //@}
 
   /// \name Sema-relevant special data
-  /// \brief Fields containing data that is used for semantic analysis
+  /// Fields containing data that is used for semantic analysis
   //@{
 
-  /// \brief The IDs of all potentially unused typedef names in the chain.
+  /// The IDs of all potentially unused typedef names in the chain.
   ///
   /// Sema tracks these to emit warnings.
   SmallVector<uint64_t, 16> UnusedLocalTypedefNameCandidates;
 
-  /// \brief Our current depth in #pragma cuda force_host_device begin/end
+  /// Our current depth in #pragma cuda force_host_device begin/end
   /// macros.
   unsigned ForceCUDAHostDeviceDepth = 0;
 
-  /// \brief The IDs of the declarations Sema stores directly.
+  /// The IDs of the declarations Sema stores directly.
   ///
   /// Sema tracks a few important decls, such as namespace std, directly.
   SmallVector<uint64_t, 4> SemaDeclRefs;
 
-  /// \brief The IDs of the types ASTContext stores directly.
+  /// The IDs of the types ASTContext stores directly.
   ///
   /// The AST context tracks a few important types, such as va_list, directly.
   SmallVector<uint64_t, 16> SpecialTypes;
 
-  /// \brief The IDs of CUDA-specific declarations ASTContext stores directly.
+  /// The IDs of CUDA-specific declarations ASTContext stores directly.
   ///
   /// The AST context tracks a few important decls, currently cudaConfigureCall,
   /// directly.
   SmallVector<uint64_t, 2> CUDASpecialDeclRefs;
 
-  /// \brief The floating point pragma option settings.
+  /// The floating point pragma option settings.
   SmallVector<uint64_t, 1> FPPragmaOptions;
 
-  /// \brief The pragma clang optimize location (if the pragma state is "off").
+  /// The pragma clang optimize location (if the pragma state is "off").
   SourceLocation OptimizeOffPragmaLocation;
 
-  /// \brief The PragmaMSStructKind pragma ms_struct state if set, or -1.
+  /// The PragmaMSStructKind pragma ms_struct state if set, or -1.
   int PragmaMSStructState = -1;
 
-  /// \brief The PragmaMSPointersToMembersKind pragma pointers_to_members state.
+  /// The PragmaMSPointersToMembersKind pragma pointers_to_members state.
   int PragmaMSPointersToMembersState = -1;
   SourceLocation PointersToMembersPragmaLocation;
 
-  /// \brief The pragma pack state.
+  /// The pragma pack state.
   Optional<unsigned> PragmaPackCurrentValue;
   SourceLocation PragmaPackCurrentLocation;
   struct PragmaPackStackEntry {
@@ -873,26 +878,26 @@
   llvm::SmallVector<PragmaPackStackEntry, 2> PragmaPackStack;
   llvm::SmallVector<std::string, 2> PragmaPackStrings;
 
-  /// \brief The OpenCL extension settings.
+  /// The OpenCL extension settings.
   OpenCLOptions OpenCLExtensions;
 
-  /// \brief Extensions required by an OpenCL type.
+  /// Extensions required by an OpenCL type.
   llvm::DenseMap<const Type *, std::set<std::string>> OpenCLTypeExtMap;
 
-  /// \brief Extensions required by an OpenCL declaration.
+  /// Extensions required by an OpenCL declaration.
   llvm::DenseMap<const Decl *, std::set<std::string>> OpenCLDeclExtMap;
 
-  /// \brief A list of the namespaces we've seen.
+  /// A list of the namespaces we've seen.
   SmallVector<uint64_t, 4> KnownNamespaces;
 
-  /// \brief A list of undefined decls with internal linkage followed by the
+  /// A list of undefined decls with internal linkage followed by the
   /// SourceLocation of a matching ODR-use.
   SmallVector<uint64_t, 8> UndefinedButUsed;
 
-  /// \brief Delete expressions to analyze at the end of translation unit.
+  /// Delete expressions to analyze at the end of translation unit.
   SmallVector<uint64_t, 8> DelayedDeleteExprs;
 
-  // \brief A list of late parsed template function data.
+  // A list of late parsed template function data.
   SmallVector<uint64_t, 1> LateParsedTemplates;
 
 public:
@@ -905,41 +910,41 @@
   };
 
 private:
-  /// \brief A list of modules that were imported by precompiled headers or
+  /// A list of modules that were imported by precompiled headers or
   /// any other non-module AST file.
   SmallVector<ImportedSubmodule, 2> ImportedModules;
   //@}
 
-  /// \brief The system include root to be used when loading the
+  /// The system include root to be used when loading the
   /// precompiled header.
   std::string isysroot;
 
-  /// \brief Whether to disable the normal validation performed on precompiled
+  /// Whether to disable the normal validation performed on precompiled
   /// headers when they are loaded.
   bool DisableValidation;
 
-  /// \brief Whether to accept an AST file with compiler errors.
+  /// Whether to accept an AST file with compiler errors.
   bool AllowASTWithCompilerErrors;
 
-  /// \brief Whether to accept an AST file that has a different configuration
+  /// Whether to accept an AST file that has a different configuration
   /// from the current compiler instance.
   bool AllowConfigurationMismatch;
 
-  /// \brief Whether validate system input files.
+  /// Whether validate system input files.
   bool ValidateSystemInputs;
 
-  /// \brief Whether we are allowed to use the global module index.
+  /// Whether we are allowed to use the global module index.
   bool UseGlobalIndex;
 
-  /// \brief Whether we have tried loading the global module index yet.
+  /// Whether we have tried loading the global module index yet.
   bool TriedLoadingGlobalIndex = false;
 
-  ///\brief Whether we are currently processing update records.
+  ///Whether we are currently processing update records.
   bool ProcessingUpdateRecords = false;
 
   using SwitchCaseMapTy = llvm::DenseMap<unsigned, SwitchCase *>;
 
-  /// \brief Mapping from switch-case IDs in the chain to switch-case statements
+  /// Mapping from switch-case IDs in the chain to switch-case statements
   ///
   /// Statements usually don't have IDs, but switch cases need them, so that the
   /// switch statement can refer to them.
@@ -947,56 +952,56 @@
 
   SwitchCaseMapTy *CurrSwitchCaseStmts;
 
-  /// \brief The number of source location entries de-serialized from
+  /// The number of source location entries de-serialized from
   /// the PCH file.
   unsigned NumSLocEntriesRead = 0;
 
-  /// \brief The number of source location entries in the chain.
+  /// The number of source location entries in the chain.
   unsigned TotalNumSLocEntries = 0;
 
-  /// \brief The number of statements (and expressions) de-serialized
+  /// The number of statements (and expressions) de-serialized
   /// from the chain.
   unsigned NumStatementsRead = 0;
 
-  /// \brief The total number of statements (and expressions) stored
+  /// The total number of statements (and expressions) stored
   /// in the chain.
   unsigned TotalNumStatements = 0;
 
-  /// \brief The number of macros de-serialized from the chain.
+  /// The number of macros de-serialized from the chain.
   unsigned NumMacrosRead = 0;
 
-  /// \brief The total number of macros stored in the chain.
+  /// The total number of macros stored in the chain.
   unsigned TotalNumMacros = 0;
 
-  /// \brief The number of lookups into identifier tables.
+  /// The number of lookups into identifier tables.
   unsigned NumIdentifierLookups = 0;
 
-  /// \brief The number of lookups into identifier tables that succeed.
+  /// The number of lookups into identifier tables that succeed.
   unsigned NumIdentifierLookupHits = 0;
 
-  /// \brief The number of selectors that have been read.
+  /// The number of selectors that have been read.
   unsigned NumSelectorsRead = 0;
 
-  /// \brief The number of method pool entries that have been read.
+  /// The number of method pool entries that have been read.
   unsigned NumMethodPoolEntriesRead = 0;
 
-  /// \brief The number of times we have looked up a selector in the method
+  /// The number of times we have looked up a selector in the method
   /// pool.
   unsigned NumMethodPoolLookups = 0;
 
-  /// \brief The number of times we have looked up a selector in the method
+  /// The number of times we have looked up a selector in the method
   /// pool and found something.
   unsigned NumMethodPoolHits = 0;
 
-  /// \brief The number of times we have looked up a selector in the method
+  /// The number of times we have looked up a selector in the method
   /// pool within a specific module.
   unsigned NumMethodPoolTableLookups = 0;
 
-  /// \brief The number of times we have looked up a selector in the method
+  /// The number of times we have looked up a selector in the method
   /// pool within a specific module and found something.
   unsigned NumMethodPoolTableHits = 0;
 
-  /// \brief The total number of method pool entries in the selector table.
+  /// The total number of method pool entries in the selector table.
   unsigned TotalNumMethodPoolEntries = 0;
 
   /// Number of lexical decl contexts read/total.
@@ -1008,16 +1013,16 @@
   /// Total size of modules, in bits, currently loaded
   uint64_t TotalModulesSizeInBits = 0;
 
-  /// \brief Number of Decl/types that are currently deserializing.
+  /// Number of Decl/types that are currently deserializing.
   unsigned NumCurrentElementsDeserializing = 0;
 
-  /// \brief Set true while we are in the process of passing deserialized
+  /// Set true while we are in the process of passing deserialized
   /// "interesting" decls to consumer inside FinishedDeserializing().
   /// This is used as a guard to avoid recursively repeating the process of
   /// passing decls to consumer.
   bool PassingDeclsToConsumer = false;
 
-  /// \brief The set of identifiers that were read while the AST reader was
+  /// The set of identifiers that were read while the AST reader was
   /// (recursively) loading declarations.
   ///
   /// The declarations on the identifier chain for these identifiers will be
@@ -1025,12 +1030,12 @@
   llvm::MapVector<IdentifierInfo *, SmallVector<uint32_t, 4>>
     PendingIdentifierInfos;
 
-  /// \brief The set of lookup results that we have faked in order to support
+  /// The set of lookup results that we have faked in order to support
   /// merging of partially deserialized decls but that we have not yet removed.
   llvm::SmallMapVector<IdentifierInfo *, SmallVector<NamedDecl*, 2>, 16>
     PendingFakeLookupResults;
 
-  /// \brief The generation number of each identifier, which keeps track of
+  /// The generation number of each identifier, which keeps track of
   /// the last time we loaded information about this identifier.
   llvm::DenseMap<IdentifierInfo *, unsigned> IdentifierGeneration;
 
@@ -1048,7 +1053,7 @@
     bool hasPendingBody() { return DeclHasPendingBody; }
   };
 
-  /// \brief Contains declarations and definitions that could be
+  /// Contains declarations and definitions that could be
   /// "interesting" to the ASTConsumer, when we get that AST consumer.
   ///
   /// "Interesting" declarations are those that have data that may
@@ -1056,16 +1061,22 @@
   /// Objective-C protocols.
   std::deque<InterestingDecl> PotentiallyInterestingDecls;
 
-  /// \brief The list of redeclaration chains that still need to be 
+  /// The list of deduced function types that we have not yet read, because
+  /// they might contain a deduced return type that refers to a local type
+  /// declared within the function.
+  SmallVector<std::pair<FunctionDecl *, serialization::TypeID>, 16>
+      PendingFunctionTypes;
+
+  /// The list of redeclaration chains that still need to be
   /// reconstructed, and the local offset to the corresponding list
   /// of redeclarations.
   SmallVector<std::pair<Decl *, uint64_t>, 16> PendingDeclChains;
 
-  /// \brief The list of canonical declarations whose redeclaration chains
+  /// The list of canonical declarations whose redeclaration chains
   /// need to be marked as incomplete once we're done deserializing things.
   SmallVector<Decl *, 16> PendingIncompleteDeclChains;
 
-  /// \brief The Decl IDs for the Sema/Lexical DeclContext of a Decl that has
+  /// The Decl IDs for the Sema/Lexical DeclContext of a Decl that has
   /// been loaded but its DeclContext was not set yet.
   struct PendingDeclContextInfo {
     Decl *D;
@@ -1073,14 +1084,14 @@
     serialization::GlobalDeclID LexicalDC;
   };
 
-  /// \brief The set of Decls that have been loaded but their DeclContexts are
+  /// The set of Decls that have been loaded but their DeclContexts are
   /// not set yet.
   ///
   /// The DeclContexts for these Decls will be set once recursive loading has
   /// been completed.
   std::deque<PendingDeclContextInfo> PendingDeclContextInfos;
 
-  /// \brief The set of NamedDecls that have been loaded, but are members of a
+  /// The set of NamedDecls that have been loaded, but are members of a
   /// context that has been merged into another context where the corresponding
   /// declaration is either missing or has not yet been loaded.
   ///
@@ -1091,57 +1102,61 @@
   using DataPointers =
       std::pair<CXXRecordDecl *, struct CXXRecordDecl::DefinitionData *>;
 
-  /// \brief Record definitions in which we found an ODR violation.
+  /// Record definitions in which we found an ODR violation.
   llvm::SmallDenseMap<CXXRecordDecl *, llvm::SmallVector<DataPointers, 2>, 2>
       PendingOdrMergeFailures;
 
-  /// \brief Function definitions in which we found an ODR violation.
+  /// Function definitions in which we found an ODR violation.
   llvm::SmallDenseMap<FunctionDecl *, llvm::SmallVector<FunctionDecl *, 2>, 2>
       PendingFunctionOdrMergeFailures;
 
-  /// \brief DeclContexts in which we have diagnosed an ODR violation.
+  /// Enum definitions in which we found an ODR violation.
+  llvm::SmallDenseMap<EnumDecl *, llvm::SmallVector<EnumDecl *, 2>, 2>
+      PendingEnumOdrMergeFailures;
+
+  /// DeclContexts in which we have diagnosed an ODR violation.
   llvm::SmallPtrSet<DeclContext*, 2> DiagnosedOdrMergeFailures;
 
-  /// \brief The set of Objective-C categories that have been deserialized
+  /// The set of Objective-C categories that have been deserialized
   /// since the last time the declaration chains were linked.
   llvm::SmallPtrSet<ObjCCategoryDecl *, 16> CategoriesDeserialized;
 
-  /// \brief The set of Objective-C class definitions that have already been
+  /// The set of Objective-C class definitions that have already been
   /// loaded, for which we will need to check for categories whenever a new
   /// module is loaded.
   SmallVector<ObjCInterfaceDecl *, 16> ObjCClassesLoaded;
 
   using KeyDeclsMap =
       llvm::DenseMap<Decl *, SmallVector<serialization::DeclID, 2>>;
-    
-  /// \brief A mapping from canonical declarations to the set of global
+
+  /// A mapping from canonical declarations to the set of global
   /// declaration IDs for key declaration that have been merged with that
   /// canonical declaration. A key declaration is a formerly-canonical
   /// declaration whose module did not import any other key declaration for that
   /// entity. These are the IDs that we use as keys when finding redecl chains.
   KeyDeclsMap KeyDecls;
-  
-  /// \brief A mapping from DeclContexts to the semantic DeclContext that we
+
+  /// A mapping from DeclContexts to the semantic DeclContext that we
   /// are treating as the definition of the entity. This is used, for instance,
   /// when merging implicit instantiations of class templates across modules.
   llvm::DenseMap<DeclContext *, DeclContext *> MergedDeclContexts;
 
-  /// \brief A mapping from canonical declarations of enums to their canonical
+  /// A mapping from canonical declarations of enums to their canonical
   /// definitions. Only populated when using modules in C++.
   llvm::DenseMap<EnumDecl *, EnumDecl *> EnumDefinitions;
 
-  /// \brief When reading a Stmt tree, Stmt operands are placed in this stack.
+  /// When reading a Stmt tree, Stmt operands are placed in this stack.
   SmallVector<Stmt *, 16> StmtStack;
 
-  /// \brief What kind of records we are reading.
+  /// What kind of records we are reading.
   enum ReadingKind {
     Read_None, Read_Decl, Read_Type, Read_Stmt
   };
 
-  /// \brief What kind of records we are reading.
+  /// What kind of records we are reading.
   ReadingKind ReadingKind = Read_None;
 
-  /// \brief RAII object to change the reading kind.
+  /// RAII object to change the reading kind.
   class ReadingKindTracker {
     ASTReader &Reader;
     enum ReadingKind PrevKind;
@@ -1157,7 +1172,7 @@
     ~ReadingKindTracker() { Reader.ReadingKind = PrevKind; }
   };
 
-  /// \brief RAII object to mark the start of processing updates.
+  /// RAII object to mark the start of processing updates.
   class ProcessingUpdatesRAIIObj {
     ASTReader &Reader;
     bool PrevState;
@@ -1174,7 +1189,7 @@
     ~ProcessingUpdatesRAIIObj() { Reader.ProcessingUpdateRecords = PrevState; }
   };
 
-  /// \brief Suggested contents of the predefines buffer, after this
+  /// Suggested contents of the predefines buffer, after this
   /// PCH file has been processed.
   ///
   /// In most cases, this string will be empty, because the predefines
@@ -1186,7 +1201,7 @@
 
   llvm::DenseMap<const Decl *, bool> DefinitionSource;
 
-  /// \brief Reads a statement from the specified cursor.
+  /// Reads a statement from the specified cursor.
   Stmt *ReadStmtFromStream(ModuleFile &F);
 
   struct InputFileInfo {
@@ -1198,10 +1213,10 @@
     bool TopLevelModuleMap;
   };
 
-  /// \brief Reads the stored information about an input file.
+  /// Reads the stored information about an input file.
   InputFileInfo readInputFileInfo(ModuleFile &F, unsigned ID);
 
-  /// \brief Retrieve the file entry and 'overridden' bit for an input
+  /// Retrieve the file entry and 'overridden' bit for an input
   /// file in the given module file.
   serialization::InputFile getInputFile(ModuleFile &F, unsigned ID,
                                         bool Complain = true);
@@ -1210,7 +1225,7 @@
   void ResolveImportedPath(ModuleFile &M, std::string &Filename);
   static void ResolveImportedPath(std::string &Filename, StringRef Prefix);
 
-  /// \brief Returns the first key declaration for the given declaration. This
+  /// Returns the first key declaration for the given declaration. This
   /// is one that is formerly-canonical (or still canonical) and whose module
   /// did not import any other key declaration of the entity.
   Decl *getKeyDeclaration(Decl *D) {
@@ -1227,7 +1242,7 @@
     return getKeyDeclaration(const_cast<Decl*>(D));
   }
 
-  /// \brief Run a callback on each imported key declaration of \p D.
+  /// Run a callback on each imported key declaration of \p D.
   template <typename Fn>
   void forEachImportedKeyDecl(const Decl *D, Fn Visit) {
     D = D->getCanonicalDecl();
@@ -1240,7 +1255,7 @@
         Visit(GetExistingDecl(ID));
   }
 
-  /// \brief Get the loaded lookup tables for \p Primary, if any.
+  /// Get the loaded lookup tables for \p Primary, if any.
   const serialization::reader::DeclContextLookupTable *
   getLoadedLookupTables(DeclContext *Primary) const;
 
@@ -1330,7 +1345,7 @@
   Decl *ReadDeclRecord(serialization::DeclID ID);
   void markIncompleteDeclChain(Decl *Canon);
 
-  /// \brief Returns the most recent declaration of a declaration (which must be
+  /// Returns the most recent declaration of a declaration (which must be
   /// of a redeclarable kind) that is either local or has already been loaded
   /// merged into its redecl chain.
   Decl *getMostRecentExistingDecl(Decl *D);
@@ -1345,12 +1360,12 @@
   RecordLocation getLocalBitOffset(uint64_t GlobalOffset);
   uint64_t getGlobalBitOffset(ModuleFile &M, uint32_t LocalOffset);
 
-  /// \brief Returns the first preprocessed entity ID that begins or ends after
+  /// Returns the first preprocessed entity ID that begins or ends after
   /// \arg Loc.
   serialization::PreprocessedEntityID
   findPreprocessedEntity(SourceLocation Loc, bool EndsAfter) const;
 
-  /// \brief Find the next module that contains entities and return the ID
+  /// Find the next module that contains entities and return the ID
   /// of the first entry.
   ///
   /// \param SLocMapI points at a chunk of a module that contains no
@@ -1360,12 +1375,12 @@
     findNextPreprocessedEntity(
                         GlobalSLocOffsetMapType::const_iterator SLocMapI) const;
 
-  /// \brief Returns (ModuleFile, Local index) pair for \p GlobalIndex of a
+  /// Returns (ModuleFile, Local index) pair for \p GlobalIndex of a
   /// preprocessed entity.
   std::pair<ModuleFile *, unsigned>
     getModulePreprocessedEntity(unsigned GlobalIndex);
 
-  /// \brief Returns (begin, end) pair for the preprocessed entities of a
+  /// Returns (begin, end) pair for the preprocessed entities of a
   /// particular module.
   llvm::iterator_range<PreprocessingRecord::iterator>
   getModulePreprocessedEntities(ModuleFile &Mod) const;
@@ -1418,7 +1433,7 @@
     PendingDeclContextInfos.push_back(Info);
   }
 
-  /// \brief Produce an error diagnostic and return true.
+  /// Produce an error diagnostic and return true.
   ///
   /// This routine should only be used for fatal errors that have to
   /// do with non-routine failures (e.g., corrupted AST file).
@@ -1427,7 +1442,7 @@
              StringRef Arg2 = StringRef()) const;
 
 public:
-  /// \brief Load the AST file and validate its contents against the given
+  /// Load the AST file and validate its contents against the given
   /// Preprocessor.
   ///
   /// \param PP the preprocessor associated with the context in which this
@@ -1482,34 +1497,34 @@
   FileManager &getFileManager() const { return FileMgr; }
   DiagnosticsEngine &getDiags() const { return Diags; }
 
-  /// \brief Flags that indicate what kind of AST loading failures the client
+  /// Flags that indicate what kind of AST loading failures the client
   /// of the AST reader can directly handle.
   ///
   /// When a client states that it can handle a particular kind of failure,
   /// the AST reader will not emit errors when producing that kind of failure.
   enum LoadFailureCapabilities {
-    /// \brief The client can't handle any AST loading failures.
+    /// The client can't handle any AST loading failures.
     ARR_None = 0,
 
-    /// \brief The client can handle an AST file that cannot load because it
+    /// The client can handle an AST file that cannot load because it
     /// is missing.
     ARR_Missing = 0x1,
 
-    /// \brief The client can handle an AST file that cannot load because it
+    /// The client can handle an AST file that cannot load because it
     /// is out-of-date relative to its input files.
     ARR_OutOfDate = 0x2,
 
-    /// \brief The client can handle an AST file that cannot load because it
+    /// The client can handle an AST file that cannot load because it
     /// was built with a different version of Clang.
     ARR_VersionMismatch = 0x4,
 
-    /// \brief The client can handle an AST file that cannot load because it's
+    /// The client can handle an AST file that cannot load because it's
     /// compiled configuration doesn't match that of the context it was
     /// loaded into.
     ARR_ConfigurationMismatch = 0x8
   };
 
-  /// \brief Load the AST file designated by the given file name.
+  /// Load the AST file designated by the given file name.
   ///
   /// \param FileName The name of the AST file to load.
   ///
@@ -1530,7 +1545,7 @@
                         unsigned ClientLoadCapabilities,
                         SmallVectorImpl<ImportedSubmodule> *Imported = nullptr);
 
-  /// \brief Make the entities in the given module and any of its (non-explicit)
+  /// Make the entities in the given module and any of its (non-explicit)
   /// submodules visible to name lookup.
   ///
   /// \param Mod The module whose names should be made visible.
@@ -1543,24 +1558,24 @@
                          Module::NameVisibilityKind NameVisibility,
                          SourceLocation ImportLoc);
 
-  /// \brief Make the names within this set of hidden names visible.
+  /// Make the names within this set of hidden names visible.
   void makeNamesVisible(const HiddenNames &Names, Module *Owner);
 
-  /// \brief Note that MergedDef is a redefinition of the canonical definition
+  /// Note that MergedDef is a redefinition of the canonical definition
   /// Def, so Def should be visible whenever MergedDef is.
   void mergeDefinitionVisibility(NamedDecl *Def, NamedDecl *MergedDef);
 
-  /// \brief Take the AST callbacks listener.
+  /// Take the AST callbacks listener.
   std::unique_ptr<ASTReaderListener> takeListener() {
     return std::move(Listener);
   }
 
-  /// \brief Set the AST callbacks listener.
+  /// Set the AST callbacks listener.
   void setListener(std::unique_ptr<ASTReaderListener> Listener) {
     this->Listener = std::move(Listener);
   }
 
-  /// \brief Add an AST callback listener.
+  /// Add an AST callback listener.
   ///
   /// Takes ownership of \p L.
   void addListener(std::unique_ptr<ASTReaderListener> L) {
@@ -1595,67 +1610,72 @@
     }
   };
 
-  /// \brief Set the AST deserialization listener.
+  /// Set the AST deserialization listener.
   void setDeserializationListener(ASTDeserializationListener *Listener,
                                   bool TakeOwnership = false);
 
-  /// \brief Determine whether this AST reader has a global index.
+  /// Get the AST deserialization listener.
+  ASTDeserializationListener *getDeserializationListener() {
+    return DeserializationListener;
+  }
+
+  /// Determine whether this AST reader has a global index.
   bool hasGlobalIndex() const { return (bool)GlobalIndex; }
 
-  /// \brief Return global module index.
+  /// Return global module index.
   GlobalModuleIndex *getGlobalIndex() { return GlobalIndex.get(); }
 
-  /// \brief Reset reader for a reload try.
+  /// Reset reader for a reload try.
   void resetForReload() { TriedLoadingGlobalIndex = false; }
 
-  /// \brief Attempts to load the global index.
+  /// Attempts to load the global index.
   ///
   /// \returns true if loading the global index has failed for any reason.
   bool loadGlobalIndex();
 
-  /// \brief Determine whether we tried to load the global index, but failed,
+  /// Determine whether we tried to load the global index, but failed,
   /// e.g., because it is out-of-date or does not exist.
   bool isGlobalIndexUnavailable() const;
-  
-  /// \brief Initializes the ASTContext
+
+  /// Initializes the ASTContext
   void InitializeContext();
 
-  /// \brief Update the state of Sema after loading some additional modules.
+  /// Update the state of Sema after loading some additional modules.
   void UpdateSema();
 
-  /// \brief Add in-memory (virtual file) buffer.
+  /// Add in-memory (virtual file) buffer.
   void addInMemoryBuffer(StringRef &FileName,
                          std::unique_ptr<llvm::MemoryBuffer> Buffer) {
     ModuleMgr.addInMemoryBuffer(FileName, std::move(Buffer));
   }
 
-  /// \brief Finalizes the AST reader's state before writing an AST file to
+  /// Finalizes the AST reader's state before writing an AST file to
   /// disk.
   ///
   /// This operation may undo temporary state in the AST that should not be
   /// emitted.
   void finalizeForWriting();
 
-  /// \brief Retrieve the module manager.
+  /// Retrieve the module manager.
   ModuleManager &getModuleManager() { return ModuleMgr; }
 
-  /// \brief Retrieve the preprocessor.
+  /// Retrieve the preprocessor.
   Preprocessor &getPreprocessor() const { return PP; }
 
-  /// \brief Retrieve the name of the original source file name for the primary
+  /// Retrieve the name of the original source file name for the primary
   /// module file.
   StringRef getOriginalSourceFile() {
-    return ModuleMgr.getPrimaryModule().OriginalSourceFileName; 
+    return ModuleMgr.getPrimaryModule().OriginalSourceFileName;
   }
 
-  /// \brief Retrieve the name of the original source file name directly from
+  /// Retrieve the name of the original source file name directly from
   /// the AST file, without actually loading the AST file.
   static std::string
   getOriginalSourceFile(const std::string &ASTFileName, FileManager &FileMgr,
                         const PCHContainerReader &PCHContainerRdr,
                         DiagnosticsEngine &Diags);
 
-  /// \brief Read the control block for the named AST file.
+  /// Read the control block for the named AST file.
   ///
   /// \returns true if an error occurred, false otherwise.
   static bool
@@ -1665,7 +1685,7 @@
                           ASTReaderListener &Listener,
                           bool ValidateDiagnosticOptions);
 
-  /// \brief Determine whether the given AST file is acceptable to load into a
+  /// Determine whether the given AST file is acceptable to load into a
   /// translation unit with the given language and target options.
   static bool isAcceptableASTFile(StringRef Filename, FileManager &FileMgr,
                                   const PCHContainerReader &PCHContainerRdr,
@@ -1674,71 +1694,71 @@
                                   const PreprocessorOptions &PPOpts,
                                   StringRef ExistingModuleCachePath);
 
-  /// \brief Returns the suggested contents of the predefines buffer,
+  /// Returns the suggested contents of the predefines buffer,
   /// which contains a (typically-empty) subset of the predefines
   /// build prior to including the precompiled header.
   const std::string &getSuggestedPredefines() { return SuggestedPredefines; }
 
-  /// \brief Read a preallocated preprocessed entity from the external source.
+  /// Read a preallocated preprocessed entity from the external source.
   ///
   /// \returns null if an error occurred that prevented the preprocessed
   /// entity from being loaded.
   PreprocessedEntity *ReadPreprocessedEntity(unsigned Index) override;
 
-  /// \brief Returns a pair of [Begin, End) indices of preallocated
+  /// Returns a pair of [Begin, End) indices of preallocated
   /// preprocessed entities that \p Range encompasses.
   std::pair<unsigned, unsigned>
       findPreprocessedEntitiesInRange(SourceRange Range) override;
 
-  /// \brief Optionally returns true or false if the preallocated preprocessed
+  /// Optionally returns true or false if the preallocated preprocessed
   /// entity with index \p Index came from file \p FID.
   Optional<bool> isPreprocessedEntityInFileID(unsigned Index,
                                               FileID FID) override;
 
-  /// \brief Read a preallocated skipped range from the external source.
+  /// Read a preallocated skipped range from the external source.
   SourceRange ReadSkippedRange(unsigned Index) override;
 
-  /// \brief Read the header file information for the given file entry.
+  /// Read the header file information for the given file entry.
   HeaderFileInfo GetHeaderFileInfo(const FileEntry *FE) override;
 
   void ReadPragmaDiagnosticMappings(DiagnosticsEngine &Diag);
 
-  /// \brief Returns the number of source locations found in the chain.
+  /// Returns the number of source locations found in the chain.
   unsigned getTotalNumSLocs() const {
     return TotalNumSLocEntries;
   }
 
-  /// \brief Returns the number of identifiers found in the chain.
+  /// Returns the number of identifiers found in the chain.
   unsigned getTotalNumIdentifiers() const {
     return static_cast<unsigned>(IdentifiersLoaded.size());
   }
 
-  /// \brief Returns the number of macros found in the chain.
+  /// Returns the number of macros found in the chain.
   unsigned getTotalNumMacros() const {
     return static_cast<unsigned>(MacrosLoaded.size());
   }
 
-  /// \brief Returns the number of types found in the chain.
+  /// Returns the number of types found in the chain.
   unsigned getTotalNumTypes() const {
     return static_cast<unsigned>(TypesLoaded.size());
   }
 
-  /// \brief Returns the number of declarations found in the chain.
+  /// Returns the number of declarations found in the chain.
   unsigned getTotalNumDecls() const {
     return static_cast<unsigned>(DeclsLoaded.size());
   }
 
-  /// \brief Returns the number of submodules known.
+  /// Returns the number of submodules known.
   unsigned getTotalNumSubmodules() const {
     return static_cast<unsigned>(SubmodulesLoaded.size());
   }
-  
-  /// \brief Returns the number of selectors found in the chain.
+
+  /// Returns the number of selectors found in the chain.
   unsigned getTotalNumSelectors() const {
     return static_cast<unsigned>(SelectorsLoaded.size());
   }
 
-  /// \brief Returns the number of preprocessed entities known to the AST
+  /// Returns the number of preprocessed entities known to the AST
   /// reader.
   unsigned getTotalNumPreprocessedEntities() const {
     unsigned Result = 0;
@@ -1747,13 +1767,13 @@
     return Result;
   }
 
-  /// \brief Reads a TemplateArgumentLocInfo appropriate for the
+  /// Reads a TemplateArgumentLocInfo appropriate for the
   /// given TemplateArgument kind.
   TemplateArgumentLocInfo
   GetTemplateArgumentLocInfo(ModuleFile &F, TemplateArgument::ArgKind Kind,
                              const RecordData &Record, unsigned &Idx);
 
-  /// \brief Reads a TemplateArgumentLoc.
+  /// Reads a TemplateArgumentLoc.
   TemplateArgumentLoc
   ReadTemplateArgumentLoc(ModuleFile &F,
                           const RecordData &Record, unsigned &Idx);
@@ -1762,21 +1782,25 @@
   ReadASTTemplateArgumentListInfo(ModuleFile &F,
                                   const RecordData &Record, unsigned &Index);
 
-  /// \brief Reads a declarator info from the given record.
+  /// Reads a declarator info from the given record.
   TypeSourceInfo *GetTypeSourceInfo(ModuleFile &F,
                                     const RecordData &Record, unsigned &Idx);
 
-  /// \brief Resolve a type ID into a type, potentially building a new
+  /// Raad the type locations for the given TInfo.
+  void ReadTypeLoc(ModuleFile &F, const RecordData &Record, unsigned &Idx,
+                   TypeLoc TL);
+
+  /// Resolve a type ID into a type, potentially building a new
   /// type.
   QualType GetType(serialization::TypeID ID);
 
-  /// \brief Resolve a local type ID within a given AST file into a type.
+  /// Resolve a local type ID within a given AST file into a type.
   QualType getLocalType(ModuleFile &F, unsigned LocalID);
 
-  /// \brief Map a local type ID within a given AST file into a global type ID.
+  /// Map a local type ID within a given AST file into a global type ID.
   serialization::TypeID getGlobalTypeID(ModuleFile &F, unsigned LocalID) const;
 
-  /// \brief Read a type from the current position in the given record, which
+  /// Read a type from the current position in the given record, which
   /// was read from the given AST file.
   QualType readType(ModuleFile &F, const RecordData &Record, unsigned &Idx) {
     if (Idx >= Record.size())
@@ -1785,40 +1809,40 @@
     return getLocalType(F, Record[Idx++]);
   }
 
-  /// \brief Map from a local declaration ID within a given module to a
+  /// Map from a local declaration ID within a given module to a
   /// global declaration ID.
   serialization::DeclID getGlobalDeclID(ModuleFile &F,
                                       serialization::LocalDeclID LocalID) const;
 
-  /// \brief Returns true if global DeclID \p ID originated from module \p M.
+  /// Returns true if global DeclID \p ID originated from module \p M.
   bool isDeclIDFromModule(serialization::GlobalDeclID ID, ModuleFile &M) const;
 
-  /// \brief Retrieve the module file that owns the given declaration, or NULL
+  /// Retrieve the module file that owns the given declaration, or NULL
   /// if the declaration is not from a module file.
   ModuleFile *getOwningModuleFile(const Decl *D);
 
-  /// \brief Get the best name we know for the module that owns the given
+  /// Get the best name we know for the module that owns the given
   /// declaration, or an empty string if the declaration is not from a module.
   std::string getOwningModuleNameForDiagnostic(const Decl *D);
 
-  /// \brief Returns the source location for the decl \p ID.
+  /// Returns the source location for the decl \p ID.
   SourceLocation getSourceLocationForDeclID(serialization::GlobalDeclID ID);
 
-  /// \brief Resolve a declaration ID into a declaration, potentially
+  /// Resolve a declaration ID into a declaration, potentially
   /// building a new declaration.
   Decl *GetDecl(serialization::DeclID ID);
   Decl *GetExternalDecl(uint32_t ID) override;
 
-  /// \brief Resolve a declaration ID into a declaration. Return 0 if it's not
+  /// Resolve a declaration ID into a declaration. Return 0 if it's not
   /// been loaded yet.
   Decl *GetExistingDecl(serialization::DeclID ID);
 
-  /// \brief Reads a declaration with the given local ID in the given module.
+  /// Reads a declaration with the given local ID in the given module.
   Decl *GetLocalDecl(ModuleFile &F, uint32_t LocalID) {
     return GetDecl(getGlobalDeclID(F, LocalID));
   }
 
-  /// \brief Reads a declaration with the given local ID in the given module.
+  /// Reads a declaration with the given local ID in the given module.
   ///
   /// \returns The requested declaration, casted to the given return type.
   template<typename T>
@@ -1826,29 +1850,29 @@
     return cast_or_null<T>(GetLocalDecl(F, LocalID));
   }
 
-  /// \brief Map a global declaration ID into the declaration ID used to 
+  /// Map a global declaration ID into the declaration ID used to
   /// refer to this declaration within the given module fule.
   ///
   /// \returns the global ID of the given declaration as known in the given
   /// module file.
-  serialization::DeclID 
+  serialization::DeclID
   mapGlobalIDToModuleFileGlobalID(ModuleFile &M,
                                   serialization::DeclID GlobalID);
-  
-  /// \brief Reads a declaration ID from the given position in a record in the
+
+  /// Reads a declaration ID from the given position in a record in the
   /// given module.
   ///
   /// \returns The declaration ID read from the record, adjusted to a global ID.
   serialization::DeclID ReadDeclID(ModuleFile &F, const RecordData &Record,
                                    unsigned &Idx);
 
-  /// \brief Reads a declaration from the given position in a record in the
+  /// Reads a declaration from the given position in a record in the
   /// given module.
   Decl *ReadDecl(ModuleFile &F, const RecordData &R, unsigned &I) {
     return GetDecl(ReadDeclID(F, R, I));
   }
 
-  /// \brief Reads a declaration from the given position in a record in the
+  /// Reads a declaration from the given position in a record in the
   /// given module.
   ///
   /// \returns The declaration read from this location, casted to the given
@@ -1858,14 +1882,14 @@
     return cast_or_null<T>(GetDecl(ReadDeclID(F, R, I)));
   }
 
-  /// \brief If any redeclarations of \p D have been imported since it was
+  /// If any redeclarations of \p D have been imported since it was
   /// last checked, this digs out those redeclarations and adds them to the
   /// redeclaration chain for \p D.
   void CompleteRedeclChain(const Decl *D) override;
 
   CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
 
-  /// \brief Resolve the offset of a statement into a statement.
+  /// Resolve the offset of a statement into a statement.
   ///
   /// This operation will read a new statement from the external
   /// source each time it is called, and is meant to be used via a
@@ -1877,13 +1901,13 @@
   /// and then leave the cursor pointing into the block.
   static bool ReadBlockAbbrevs(llvm::BitstreamCursor &Cursor, unsigned BlockID);
 
-  /// \brief Finds all the visible declarations with a given name.
+  /// Finds all the visible declarations with a given name.
   /// The current implementation of this method just loads the entire
   /// lookup table as unmaterialized references.
   bool FindExternalVisibleDeclsByName(const DeclContext *DC,
                                       DeclarationName Name) override;
 
-  /// \brief Read all of the declarations lexically stored in a
+  /// Read all of the declarations lexically stored in a
   /// declaration context.
   ///
   /// \param DC The declaration context whose declarations will be
@@ -1901,47 +1925,47 @@
                            llvm::function_ref<bool(Decl::Kind)> IsKindWeWant,
                            SmallVectorImpl<Decl *> &Decls) override;
 
-  /// \brief Get the decls that are contained in a file in the Offset/Length
+  /// Get the decls that are contained in a file in the Offset/Length
   /// range. \p Length can be 0 to indicate a point at \p Offset instead of
   /// a range.
   void FindFileRegionDecls(FileID File, unsigned Offset, unsigned Length,
                            SmallVectorImpl<Decl *> &Decls) override;
 
-  /// \brief Notify ASTReader that we started deserialization of
+  /// Notify ASTReader that we started deserialization of
   /// a decl or type so until FinishedDeserializing is called there may be
   /// decls that are initializing. Must be paired with FinishedDeserializing.
   void StartedDeserializing() override;
 
-  /// \brief Notify ASTReader that we finished the deserialization of
+  /// Notify ASTReader that we finished the deserialization of
   /// a decl or type. Must be paired with StartedDeserializing.
   void FinishedDeserializing() override;
 
-  /// \brief Function that will be invoked when we begin parsing a new
+  /// Function that will be invoked when we begin parsing a new
   /// translation unit involving this external AST source.
   ///
   /// This function will provide all of the external definitions to
   /// the ASTConsumer.
   void StartTranslationUnit(ASTConsumer *Consumer) override;
 
-  /// \brief Print some statistics about AST usage.
+  /// Print some statistics about AST usage.
   void PrintStats() override;
 
-  /// \brief Dump information about the AST reader to standard error.
+  /// Dump information about the AST reader to standard error.
   void dump();
 
   /// Return the amount of memory used by memory buffers, breaking down
   /// by heap-backed versus mmap'ed memory.
   void getMemoryBufferSizes(MemoryBufferSizes &sizes) const override;
 
-  /// \brief Initialize the semantic source with the Sema instance
+  /// Initialize the semantic source with the Sema instance
   /// being used to perform semantic analysis on the abstract syntax
   /// tree.
   void InitializeSema(Sema &S) override;
 
-  /// \brief Inform the semantic consumer that Sema is no longer available.
+  /// Inform the semantic consumer that Sema is no longer available.
   void ForgetSema() override { SemaObj = nullptr; }
 
-  /// \brief Retrieve the IdentifierInfo for the named identifier.
+  /// Retrieve the IdentifierInfo for the named identifier.
   ///
   /// This routine builds a new IdentifierInfo for the given identifier. If any
   /// declarations with this name are visible from translation unit scope, their
@@ -1949,11 +1973,11 @@
   /// chain of the identifier.
   IdentifierInfo *get(StringRef Name) override;
 
-  /// \brief Retrieve an iterator into the set of all identifiers
+  /// Retrieve an iterator into the set of all identifiers
   /// in all loaded AST files.
   IdentifierIterator *getIdentifiers() override;
 
-  /// \brief Load the contents of the global method pool for a given
+  /// Load the contents of the global method pool for a given
   /// selector.
   void ReadMethodPool(Selector Sel) override;
 
@@ -1961,7 +1985,7 @@
   /// selector if necessary.
   void updateOutOfDateSelector(Selector Sel) override;
 
-  /// \brief Load the set of namespaces that are known to the external source,
+  /// Load the set of namespaces that are known to the external source,
   /// which will be used during typo correction.
   void ReadKnownNamespaces(
                          SmallVectorImpl<NamespaceDecl *> &Namespaces) override;
@@ -2003,7 +2027,7 @@
       llvm::MapVector<const FunctionDecl *, std::unique_ptr<LateParsedTemplate>>
           &LPTMap) override;
 
-  /// \brief Load a selector from disk, registering its ID if it exists.
+  /// Load a selector from disk, registering its ID if it exists.
   void LoadSelector(Selector Sel);
 
   void SetIdentifierInfo(unsigned ID, IdentifierInfo *II);
@@ -2011,10 +2035,10 @@
                                const SmallVectorImpl<uint32_t> &DeclIDs,
                                SmallVectorImpl<Decl *> *Decls = nullptr);
 
-  /// \brief Report a diagnostic.
+  /// Report a diagnostic.
   DiagnosticBuilder Diag(unsigned DiagID) const;
 
-  /// \brief Report a diagnostic.
+  /// Report a diagnostic.
   DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID) const;
 
   IdentifierInfo *DecodeIdentifierInfo(serialization::IdentifierID ID);
@@ -2038,47 +2062,49 @@
 
   void resolvePendingMacro(IdentifierInfo *II, const PendingMacroInfo &PMInfo);
 
-  /// \brief Retrieve the macro with the given ID.
+  /// Retrieve the macro with the given ID.
   MacroInfo *getMacro(serialization::MacroID ID);
 
-  /// \brief Retrieve the global macro ID corresponding to the given local
+  /// Retrieve the global macro ID corresponding to the given local
   /// ID within the given module file.
   serialization::MacroID getGlobalMacroID(ModuleFile &M, unsigned LocalID);
 
-  /// \brief Read the source location entry with index ID.
+  /// Read the source location entry with index ID.
   bool ReadSLocEntry(int ID) override;
 
-  /// \brief Retrieve the module import location and module name for the
+  /// Retrieve the module import location and module name for the
   /// given source manager entry ID.
   std::pair<SourceLocation, StringRef> getModuleImportLoc(int ID) override;
 
-  /// \brief Retrieve the global submodule ID given a module and its local ID
+  /// Retrieve the global submodule ID given a module and its local ID
   /// number.
-  serialization::SubmoduleID 
+  serialization::SubmoduleID
   getGlobalSubmoduleID(ModuleFile &M, unsigned LocalID);
 
-  /// \brief Retrieve the submodule that corresponds to a global submodule ID.
+  /// Retrieve the submodule that corresponds to a global submodule ID.
   ///
   Module *getSubmodule(serialization::SubmoduleID GlobalID);
 
-  /// \brief Retrieve the module that corresponds to the given module ID.
+  /// Retrieve the module that corresponds to the given module ID.
   ///
   /// Note: overrides method in ExternalASTSource
   Module *getModule(unsigned ID) override;
 
-  /// \brief Retrieve the module file with a given local ID within the specified
+  bool DeclIsFromPCHWithObjectFile(const Decl *D) override;
+
+  /// Retrieve the module file with a given local ID within the specified
   /// ModuleFile.
   ModuleFile *getLocalModuleFile(ModuleFile &M, unsigned ID);
 
-  /// \brief Get an ID for the given module file.
+  /// Get an ID for the given module file.
   unsigned getModuleFileID(ModuleFile *M);
 
-  /// \brief Return a descriptor for the corresponding module.
+  /// Return a descriptor for the corresponding module.
   llvm::Optional<ASTSourceDescriptor> getSourceDescriptor(unsigned ID) override;
 
   ExtKind hasExternalDefinitions(const Decl *D) override;
 
-  /// \brief Retrieve a selector from the given module with its local ID
+  /// Retrieve a selector from the given module with its local ID
   /// number.
   Selector getLocalSelector(ModuleFile &M, unsigned LocalID);
 
@@ -2091,12 +2117,12 @@
     return getLocalSelector(M, Record[Idx++]);
   }
 
-  /// \brief Retrieve the global selector ID that corresponds to this
+  /// Retrieve the global selector ID that corresponds to this
   /// the local selector ID in a given module.
   serialization::SelectorID getGlobalSelectorID(ModuleFile &F,
                                                 unsigned LocalID) const;
 
-  /// \brief Read a declaration name.
+  /// Read a declaration name.
   DeclarationName ReadDeclarationName(ModuleFile &F,
                                       const RecordData &Record, unsigned &Idx);
   void ReadDeclarationNameLoc(ModuleFile &F,
@@ -2116,54 +2142,54 @@
                                                     const RecordData &Record,
                                                     unsigned &Idx);
 
-  /// \brief Read a template name.
+  /// Read a template name.
   TemplateName ReadTemplateName(ModuleFile &F, const RecordData &Record,
                                 unsigned &Idx);
 
-  /// \brief Read a template argument.
+  /// Read a template argument.
   TemplateArgument ReadTemplateArgument(ModuleFile &F, const RecordData &Record,
                                         unsigned &Idx,
                                         bool Canonicalize = false);
 
-  /// \brief Read a template parameter list.
+  /// Read a template parameter list.
   TemplateParameterList *ReadTemplateParameterList(ModuleFile &F,
                                                    const RecordData &Record,
                                                    unsigned &Idx);
 
-  /// \brief Read a template argument array.
+  /// Read a template argument array.
   void ReadTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
                                 ModuleFile &F, const RecordData &Record,
                                 unsigned &Idx, bool Canonicalize = false);
 
-  /// \brief Read a UnresolvedSet structure.
+  /// Read a UnresolvedSet structure.
   void ReadUnresolvedSet(ModuleFile &F, LazyASTUnresolvedSet &Set,
                          const RecordData &Record, unsigned &Idx);
 
-  /// \brief Read a C++ base specifier.
+  /// Read a C++ base specifier.
   CXXBaseSpecifier ReadCXXBaseSpecifier(ModuleFile &F,
                                         const RecordData &Record,unsigned &Idx);
 
-  /// \brief Read a CXXCtorInitializer array.
+  /// Read a CXXCtorInitializer array.
   CXXCtorInitializer **
   ReadCXXCtorInitializers(ModuleFile &F, const RecordData &Record,
                           unsigned &Idx);
 
-  /// \brief Read the contents of a CXXCtorInitializer array.
+  /// Read the contents of a CXXCtorInitializer array.
   CXXCtorInitializer **GetExternalCXXCtorInitializers(uint64_t Offset) override;
 
-  /// \brief Read a source location from raw form and return it in its
+  /// Read a source location from raw form and return it in its
   /// originating module file's source location space.
   SourceLocation ReadUntranslatedSourceLocation(uint32_t Raw) const {
     return SourceLocation::getFromRawEncoding((Raw >> 1) | (Raw << 31));
   }
 
-  /// \brief Read a source location from raw form.
+  /// Read a source location from raw form.
   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile, uint32_t Raw) const {
     SourceLocation Loc = ReadUntranslatedSourceLocation(Raw);
     return TranslateSourceLocation(ModuleFile, Loc);
   }
 
-  /// \brief Translate a source location from another module file's source
+  /// Translate a source location from another module file's source
   /// location space into ours.
   SourceLocation TranslateSourceLocation(ModuleFile &ModuleFile,
                                          SourceLocation Loc) const {
@@ -2176,59 +2202,59 @@
     return Loc.getLocWithOffset(Remap);
   }
 
-  /// \brief Read a source location.
+  /// Read a source location.
   SourceLocation ReadSourceLocation(ModuleFile &ModuleFile,
                                     const RecordDataImpl &Record,
                                     unsigned &Idx) {
     return ReadSourceLocation(ModuleFile, Record[Idx++]);
   }
 
-  /// \brief Read a source range.
+  /// Read a source range.
   SourceRange ReadSourceRange(ModuleFile &F,
                               const RecordData &Record, unsigned &Idx);
 
-  /// \brief Read an integral value
+  /// Read an integral value
   llvm::APInt ReadAPInt(const RecordData &Record, unsigned &Idx);
 
-  /// \brief Read a signed integral value
+  /// Read a signed integral value
   llvm::APSInt ReadAPSInt(const RecordData &Record, unsigned &Idx);
 
-  /// \brief Read a floating-point value
+  /// Read a floating-point value
   llvm::APFloat ReadAPFloat(const RecordData &Record,
                             const llvm::fltSemantics &Sem, unsigned &Idx);
 
-  // \brief Read a string
+  // Read a string
   static std::string ReadString(const RecordData &Record, unsigned &Idx);
 
-  // \brief Skip a string
+  // Skip a string
   static void SkipString(const RecordData &Record, unsigned &Idx) {
     Idx += Record[Idx] + 1;
   }
 
-  // \brief Read a path
+  // Read a path
   std::string ReadPath(ModuleFile &F, const RecordData &Record, unsigned &Idx);
 
-  // \brief Skip a path
+  // Skip a path
   static void SkipPath(const RecordData &Record, unsigned &Idx) {
     SkipString(Record, Idx);
   }
 
-  /// \brief Read a version tuple.
+  /// Read a version tuple.
   static VersionTuple ReadVersionTuple(const RecordData &Record, unsigned &Idx);
 
   CXXTemporary *ReadCXXTemporary(ModuleFile &F, const RecordData &Record,
                                  unsigned &Idx);
 
-  /// \brief Reads attributes from the current stream position.
+  /// Reads attributes from the current stream position.
   void ReadAttributes(ASTRecordReader &Record, AttrVec &Attrs);
 
-  /// \brief Reads a statement.
+  /// Reads a statement.
   Stmt *ReadStmt(ModuleFile &F);
 
-  /// \brief Reads an expression.
+  /// Reads an expression.
   Expr *ReadExpr(ModuleFile &F);
 
-  /// \brief Reads a sub-statement operand during statement reading.
+  /// Reads a sub-statement operand during statement reading.
   Stmt *ReadSubStmt() {
     assert(ReadingKind == Read_Stmt &&
            "Should be called only during statement reading!");
@@ -2238,21 +2264,21 @@
     return StmtStack.pop_back_val();
   }
 
-  /// \brief Reads a sub-expression operand during statement reading.
+  /// Reads a sub-expression operand during statement reading.
   Expr *ReadSubExpr();
 
-  /// \brief Reads a token out of a record.
+  /// Reads a token out of a record.
   Token ReadToken(ModuleFile &M, const RecordDataImpl &Record, unsigned &Idx);
 
-  /// \brief Reads the macro record located at the given offset.
+  /// Reads the macro record located at the given offset.
   MacroInfo *ReadMacroRecord(ModuleFile &F, uint64_t Offset);
 
-  /// \brief Determine the global preprocessed entity ID that corresponds to
+  /// Determine the global preprocessed entity ID that corresponds to
   /// the given local ID within the given module.
   serialization::PreprocessedEntityID
   getGlobalPreprocessedEntityID(ModuleFile &M, unsigned LocalID) const;
 
-  /// \brief Add a macro to deserialize its macro directive history.
+  /// Add a macro to deserialize its macro directive history.
   ///
   /// \param II The name of the macro.
   /// \param M The module file.
@@ -2261,56 +2287,56 @@
   void addPendingMacro(IdentifierInfo *II, ModuleFile *M,
                        uint64_t MacroDirectivesOffset);
 
-  /// \brief Read the set of macros defined by this external macro source.
+  /// Read the set of macros defined by this external macro source.
   void ReadDefinedMacros() override;
 
-  /// \brief Update an out-of-date identifier.
+  /// Update an out-of-date identifier.
   void updateOutOfDateIdentifier(IdentifierInfo &II) override;
 
-  /// \brief Note that this identifier is up-to-date.
+  /// Note that this identifier is up-to-date.
   void markIdentifierUpToDate(IdentifierInfo *II);
 
-  /// \brief Load all external visible decls in the given DeclContext.
+  /// Load all external visible decls in the given DeclContext.
   void completeVisibleDeclsMap(const DeclContext *DC) override;
 
-  /// \brief Retrieve the AST context that this AST reader supplements.
+  /// Retrieve the AST context that this AST reader supplements.
   ASTContext &getContext() {
     assert(ContextObj && "requested AST context when not loading AST");
     return *ContextObj;
   }
 
-  // \brief Contains the IDs for declarations that were requested before we have
+  // Contains the IDs for declarations that were requested before we have
   // access to a Sema object.
   SmallVector<uint64_t, 16> PreloadedDeclIDs;
 
-  /// \brief Retrieve the semantic analysis object used to analyze the
+  /// Retrieve the semantic analysis object used to analyze the
   /// translation unit in which the precompiled header is being
   /// imported.
   Sema *getSema() { return SemaObj; }
 
-  /// \brief Get the identifier resolver used for name lookup / updates
+  /// Get the identifier resolver used for name lookup / updates
   /// in the translation unit scope. We have one of these even if we don't
   /// have a Sema object.
   IdentifierResolver &getIdResolver();
 
-  /// \brief Retrieve the identifier table associated with the
+  /// Retrieve the identifier table associated with the
   /// preprocessor.
   IdentifierTable &getIdentifierTable();
 
-  /// \brief Record that the given ID maps to the given switch-case
+  /// Record that the given ID maps to the given switch-case
   /// statement.
   void RecordSwitchCaseID(SwitchCase *SC, unsigned ID);
 
-  /// \brief Retrieve the switch-case statement with the given ID.
+  /// Retrieve the switch-case statement with the given ID.
   SwitchCase *getSwitchCaseWithID(unsigned ID);
 
   void ClearSwitchCaseIDs();
 
-  /// \brief Cursors for comments blocks.
+  /// Cursors for comments blocks.
   SmallVector<std::pair<llvm::BitstreamCursor,
                         serialization::ModuleFile *>, 8> CommentsCursors;
 
-  /// \brief Loads comments ranges.
+  /// Loads comments ranges.
   void ReadComments() override;
 
   /// Visit all the input files of the given module file.
@@ -2328,7 +2354,7 @@
   bool isProcessingUpdateRecords() { return ProcessingUpdateRecords; }
 };
 
-/// \brief An object for streaming information from a record.
+/// An object for streaming information from a record.
 class ASTRecordReader {
   using ModuleFile = serialization::ModuleFile;
 
@@ -2344,56 +2370,56 @@
   /// Construct an ASTRecordReader that uses the default encoding scheme.
   ASTRecordReader(ASTReader &Reader, ModuleFile &F) : Reader(&Reader), F(&F) {}
 
-  /// \brief Reads a record with id AbbrevID from Cursor, resetting the
+  /// Reads a record with id AbbrevID from Cursor, resetting the
   /// internal state.
   unsigned readRecord(llvm::BitstreamCursor &Cursor, unsigned AbbrevID);
 
-  /// \brief Is this a module file for a module (rather than a PCH or similar).
+  /// Is this a module file for a module (rather than a PCH or similar).
   bool isModule() const { return F->isModule(); }
 
-  /// \brief Retrieve the AST context that this AST reader supplements.
+  /// Retrieve the AST context that this AST reader supplements.
   ASTContext &getContext() { return Reader->getContext(); }
 
-  /// \brief The current position in this record.
+  /// The current position in this record.
   unsigned getIdx() const { return Idx; }
 
-  /// \brief The length of this record.
+  /// The length of this record.
   size_t size() const { return Record.size(); }
 
-  /// \brief An arbitrary index in this record.
+  /// An arbitrary index in this record.
   const uint64_t &operator[](size_t N) { return Record[N]; }
 
-  /// \brief The last element in this record.
+  /// The last element in this record.
   const uint64_t &back() const { return Record.back(); }
 
-  /// \brief Returns the current value in this record, and advances to the
+  /// Returns the current value in this record, and advances to the
   /// next value.
   const uint64_t &readInt() { return Record[Idx++]; }
 
-  /// \brief Returns the current value in this record, without advancing.
+  /// Returns the current value in this record, without advancing.
   const uint64_t &peekInt() { return Record[Idx]; }
 
-  /// \brief Skips the specified number of values.
+  /// Skips the specified number of values.
   void skipInts(unsigned N) { Idx += N; }
 
-  /// \brief Retrieve the global submodule ID its local ID number.
+  /// Retrieve the global submodule ID its local ID number.
   serialization::SubmoduleID
   getGlobalSubmoduleID(unsigned LocalID) {
     return Reader->getGlobalSubmoduleID(*F, LocalID);
   }
 
-  /// \brief Retrieve the submodule that corresponds to a global submodule ID.
+  /// Retrieve the submodule that corresponds to a global submodule ID.
   Module *getSubmodule(serialization::SubmoduleID GlobalID) {
     return Reader->getSubmodule(GlobalID);
   }
 
-  /// \brief Read the record that describes the lexical contents of a DC.
+  /// Read the record that describes the lexical contents of a DC.
   bool readLexicalDeclContextStorage(uint64_t Offset, DeclContext *DC) {
     return Reader->ReadLexicalDeclContextStorage(*F, F->DeclsCursor, Offset,
                                                  DC);
   }
 
-  /// \brief Read the record that describes the visible contents of a DC.
+  /// Read the record that describes the visible contents of a DC.
   bool readVisibleDeclContextStorage(uint64_t Offset,
                                      serialization::DeclID ID) {
     return Reader->ReadVisibleDeclContextStorage(*F, F->DeclsCursor, Offset,
@@ -2405,24 +2431,24 @@
     return Reader->readExceptionSpec(*F, ExceptionStorage, ESI, Record, Idx);
   }
 
-  /// \brief Get the global offset corresponding to a local offset.
+  /// Get the global offset corresponding to a local offset.
   uint64_t getGlobalBitOffset(uint32_t LocalOffset) {
     return Reader->getGlobalBitOffset(*F, LocalOffset);
   }
 
-  /// \brief Reads a statement.
+  /// Reads a statement.
   Stmt *readStmt() { return Reader->ReadStmt(*F); }
 
-  /// \brief Reads an expression.
+  /// Reads an expression.
   Expr *readExpr() { return Reader->ReadExpr(*F); }
 
-  /// \brief Reads a sub-statement operand during statement reading.
+  /// Reads a sub-statement operand during statement reading.
   Stmt *readSubStmt() { return Reader->ReadSubStmt(); }
 
-  /// \brief Reads a sub-expression operand during statement reading.
+  /// Reads a sub-expression operand during statement reading.
   Expr *readSubExpr() { return Reader->ReadSubExpr(); }
 
-  /// \brief Reads a declaration with the given local ID in the given module.
+  /// Reads a declaration with the given local ID in the given module.
   ///
   /// \returns The requested declaration, casted to the given return type.
   template<typename T>
@@ -2430,14 +2456,14 @@
     return cast_or_null<T>(Reader->GetLocalDecl(*F, LocalID));
   }
 
-  /// \brief Reads a TemplateArgumentLocInfo appropriate for the
+  /// Reads a TemplateArgumentLocInfo appropriate for the
   /// given TemplateArgument kind, advancing Idx.
   TemplateArgumentLocInfo
   getTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind) {
     return Reader->GetTemplateArgumentLocInfo(*F, Kind, Record, Idx);
   }
 
-  /// \brief Reads a TemplateArgumentLoc, advancing Idx.
+  /// Reads a TemplateArgumentLoc, advancing Idx.
   TemplateArgumentLoc
   readTemplateArgumentLoc() {
     return Reader->ReadTemplateArgumentLoc(*F, Record, Idx);
@@ -2448,35 +2474,40 @@
     return Reader->ReadASTTemplateArgumentListInfo(*F, Record, Idx);
   }
 
-  /// \brief Reads a declarator info from the given record, advancing Idx.
+  /// Reads a declarator info from the given record, advancing Idx.
   TypeSourceInfo *getTypeSourceInfo() {
     return Reader->GetTypeSourceInfo(*F, Record, Idx);
   }
 
-  /// \brief Map a local type ID within a given AST file to a global type ID.
+  /// Reads the location information for a type.
+  void readTypeLoc(TypeLoc TL) {
+    return Reader->ReadTypeLoc(*F, Record, Idx, TL);
+  }
+
+  /// Map a local type ID within a given AST file to a global type ID.
   serialization::TypeID getGlobalTypeID(unsigned LocalID) const {
     return Reader->getGlobalTypeID(*F, LocalID);
   }
 
-  /// \brief Read a type from the current position in the record.
+  /// Read a type from the current position in the record.
   QualType readType() {
     return Reader->readType(*F, Record, Idx);
   }
 
-  /// \brief Reads a declaration ID from the given position in this record.
+  /// Reads a declaration ID from the given position in this record.
   ///
   /// \returns The declaration ID read from the record, adjusted to a global ID.
   serialization::DeclID readDeclID() {
     return Reader->ReadDeclID(*F, Record, Idx);
   }
 
-  /// \brief Reads a declaration from the given position in a record in the
+  /// Reads a declaration from the given position in a record in the
   /// given module, advancing Idx.
   Decl *readDecl() {
     return Reader->ReadDecl(*F, Record, Idx);
   }
 
-  /// \brief Reads a declaration from the given position in the record,
+  /// Reads a declaration from the given position in the record,
   /// advancing Idx.
   ///
   /// \returns The declaration read from this location, casted to the given
@@ -2490,12 +2521,12 @@
     return Reader->GetIdentifierInfo(*F, Record, Idx);
   }
 
-  /// \brief Read a selector from the Record, advancing Idx.
+  /// Read a selector from the Record, advancing Idx.
   Selector readSelector() {
     return Reader->ReadSelector(*F, Record, Idx);
   }
 
-  /// \brief Read a declaration name, advancing Idx.
+  /// Read a declaration name, advancing Idx.
   DeclarationName readDeclarationName() {
     return Reader->ReadDeclarationName(*F, Record, Idx);
   }
@@ -2518,39 +2549,39 @@
     return Reader->ReadNestedNameSpecifierLoc(*F, Record, Idx);
   }
 
-  /// \brief Read a template name, advancing Idx.
+  /// Read a template name, advancing Idx.
   TemplateName readTemplateName() {
     return Reader->ReadTemplateName(*F, Record, Idx);
   }
 
-  /// \brief Read a template argument, advancing Idx.
+  /// Read a template argument, advancing Idx.
   TemplateArgument readTemplateArgument(bool Canonicalize = false) {
     return Reader->ReadTemplateArgument(*F, Record, Idx, Canonicalize);
   }
 
-  /// \brief Read a template parameter list, advancing Idx.
+  /// Read a template parameter list, advancing Idx.
   TemplateParameterList *readTemplateParameterList() {
     return Reader->ReadTemplateParameterList(*F, Record, Idx);
   }
 
-  /// \brief Read a template argument array, advancing Idx.
+  /// Read a template argument array, advancing Idx.
   void readTemplateArgumentList(SmallVectorImpl<TemplateArgument> &TemplArgs,
                                 bool Canonicalize = false) {
     return Reader->ReadTemplateArgumentList(TemplArgs, *F, Record, Idx,
                                             Canonicalize);
   }
 
-  /// \brief Read a UnresolvedSet structure, advancing Idx.
+  /// Read a UnresolvedSet structure, advancing Idx.
   void readUnresolvedSet(LazyASTUnresolvedSet &Set) {
     return Reader->ReadUnresolvedSet(*F, Set, Record, Idx);
   }
 
-  /// \brief Read a C++ base specifier, advancing Idx.
+  /// Read a C++ base specifier, advancing Idx.
   CXXBaseSpecifier readCXXBaseSpecifier() {
     return Reader->ReadCXXBaseSpecifier(*F, Record, Idx);
   }
 
-  /// \brief Read a CXXCtorInitializer array, advancing Idx.
+  /// Read a CXXCtorInitializer array, advancing Idx.
   CXXCtorInitializer **readCXXCtorInitializers() {
     return Reader->ReadCXXCtorInitializers(*F, Record, Idx);
   }
@@ -2559,52 +2590,52 @@
     return Reader->ReadCXXTemporary(*F, Record, Idx);
   }
 
-  /// \brief Read a source location, advancing Idx.
+  /// Read a source location, advancing Idx.
   SourceLocation readSourceLocation() {
     return Reader->ReadSourceLocation(*F, Record, Idx);
   }
 
-  /// \brief Read a source range, advancing Idx.
+  /// Read a source range, advancing Idx.
   SourceRange readSourceRange() {
     return Reader->ReadSourceRange(*F, Record, Idx);
   }
 
-  /// \brief Read an integral value, advancing Idx.
+  /// Read an integral value, advancing Idx.
   llvm::APInt readAPInt() {
     return Reader->ReadAPInt(Record, Idx);
   }
 
-  /// \brief Read a signed integral value, advancing Idx.
+  /// Read a signed integral value, advancing Idx.
   llvm::APSInt readAPSInt() {
     return Reader->ReadAPSInt(Record, Idx);
   }
 
-  /// \brief Read a floating-point value, advancing Idx.
+  /// Read a floating-point value, advancing Idx.
   llvm::APFloat readAPFloat(const llvm::fltSemantics &Sem) {
     return Reader->ReadAPFloat(Record, Sem,Idx);
   }
 
-  /// \brief Read a string, advancing Idx.
+  /// Read a string, advancing Idx.
   std::string readString() {
     return Reader->ReadString(Record, Idx);
   }
 
-  /// \brief Read a path, advancing Idx.
+  /// Read a path, advancing Idx.
   std::string readPath() {
     return Reader->ReadPath(*F, Record, Idx);
   }
 
-  /// \brief Read a version tuple, advancing Idx.
+  /// Read a version tuple, advancing Idx.
   VersionTuple readVersionTuple() {
     return ASTReader::ReadVersionTuple(Record, Idx);
   }
 
-  /// \brief Reads attributes from the current stream position, advancing Idx.
+  /// Reads attributes from the current stream position, advancing Idx.
   void readAttributes(AttrVec &Attrs) {
     return Reader->ReadAttributes(*this, Attrs);
   }
 
-  /// \brief Reads a token out of a record, advancing Idx.
+  /// Reads a token out of a record, advancing Idx.
   Token readToken() {
     return Reader->ReadToken(*F, Record, Idx);
   }
@@ -2613,13 +2644,13 @@
     Reader->RecordSwitchCaseID(SC, ID);
   }
 
-  /// \brief Retrieve the switch-case statement with the given ID.
+  /// Retrieve the switch-case statement with the given ID.
   SwitchCase *getSwitchCaseWithID(unsigned ID) {
     return Reader->getSwitchCaseWithID(ID);
   }
 };
 
-/// \brief Helper class that saves the current stream position and
+/// Helper class that saves the current stream position and
 /// then restores it when destroyed.
 struct SavedStreamPosition {
   explicit SavedStreamPosition(llvm::BitstreamCursor &Cursor)
diff --git a/linux-x64/clang/include/clang/Serialization/ASTWriter.h b/linux-x64/clang/include/clang/Serialization/ASTWriter.h
index 9437bf7..7ff5d65 100644
--- a/linux-x64/clang/include/clang/Serialization/ASTWriter.h
+++ b/linux-x64/clang/include/clang/Serialization/ASTWriter.h
@@ -93,9 +93,8 @@
 class TemplateParameterList;
 class Token;
 class TypeSourceInfo;
-class VersionTuple;
 
-/// \brief Writes an AST file containing the contents of a translation unit.
+/// Writes an AST file containing the contents of a translation unit.
 ///
 /// The ASTWriter class produces a bitstream containing the serialized
 /// representation of a given abstract syntax tree and its supporting
@@ -114,7 +113,7 @@
   using RecordDataRef = ArrayRef<uint64_t>;
 
 private:
-  /// \brief Map that provides the ID numbers of each type within the
+  /// Map that provides the ID numbers of each type within the
   /// output stream, plus those deserialized from a chained PCH.
   ///
   /// The ID numbers of types are consecutive (in order of discovery)
@@ -126,52 +125,52 @@
   using TypeIdxMap = llvm::DenseMap<QualType, serialization::TypeIdx,
                                     serialization::UnsafeQualTypeDenseMapInfo>;
 
-  /// \brief The bitstream writer used to emit this precompiled header.
+  /// The bitstream writer used to emit this precompiled header.
   llvm::BitstreamWriter &Stream;
 
   /// The buffer associated with the bitstream.
   const SmallVectorImpl<char> &Buffer;
 
-  /// \brief The PCM manager which manages memory buffers for pcm files.
+  /// The PCM manager which manages memory buffers for pcm files.
   MemoryBufferCache &PCMCache;
 
-  /// \brief The ASTContext we're writing.
+  /// The ASTContext we're writing.
   ASTContext *Context = nullptr;
 
-  /// \brief The preprocessor we're writing.
+  /// The preprocessor we're writing.
   Preprocessor *PP = nullptr;
 
-  /// \brief The reader of existing AST files, if we're chaining.
+  /// The reader of existing AST files, if we're chaining.
   ASTReader *Chain = nullptr;
 
-  /// \brief The module we're currently writing, if any.
+  /// The module we're currently writing, if any.
   Module *WritingModule = nullptr;
 
-  /// \brief The base directory for any relative paths we emit.
+  /// The base directory for any relative paths we emit.
   std::string BaseDirectory;
 
-  /// \brief Indicates whether timestamps should be written to the produced
+  /// Indicates whether timestamps should be written to the produced
   /// module file. This is the case for files implicitly written to the
   /// module cache, where we need the timestamps to determine if the module
   /// file is up to date, but not otherwise.
   bool IncludeTimestamps;
 
-  /// \brief Indicates when the AST writing is actively performing
+  /// Indicates when the AST writing is actively performing
   /// serialization, rather than just queueing updates.
   bool WritingAST = false;
 
-  /// \brief Indicates that we are done serializing the collection of decls
+  /// Indicates that we are done serializing the collection of decls
   /// and types to emit.
   bool DoneWritingDeclsAndTypes = false;
 
-  /// \brief Indicates that the AST contained compiler errors.
+  /// Indicates that the AST contained compiler errors.
   bool ASTHasCompilerErrors = false;
 
-  /// \brief Mapping from input file entries to the index into the
+  /// Mapping from input file entries to the index into the
   /// offset table where information about that input file is stored.
   llvm::DenseMap<const FileEntry *, uint32_t> InputFileIDs;
 
-  /// \brief Stores a declaration or a type to be written to the AST file.
+  /// Stores a declaration or a type to be written to the AST file.
   class DeclOrType {
   public:
     DeclOrType(Decl *D) : Stored(D), IsType(false) {}
@@ -195,16 +194,16 @@
     bool IsType;
   };
 
-  /// \brief The declarations and types to emit.
+  /// The declarations and types to emit.
   std::queue<DeclOrType> DeclTypesToEmit;
 
-  /// \brief The first ID number we can use for our own declarations.
+  /// The first ID number we can use for our own declarations.
   serialization::DeclID FirstDeclID = serialization::NUM_PREDEF_DECL_IDS;
 
-  /// \brief The decl ID that will be assigned to the next new decl.
+  /// The decl ID that will be assigned to the next new decl.
   serialization::DeclID NextDeclID = FirstDeclID;
 
-  /// \brief Map that provides the ID numbers of each declaration within
+  /// Map that provides the ID numbers of each declaration within
   /// the output stream, as well as those deserialized from a chained PCH.
   ///
   /// The ID numbers of declarations are consecutive (in order of
@@ -212,35 +211,35 @@
   /// unit, while 0 is reserved for NULL.
   llvm::DenseMap<const Decl *, serialization::DeclID> DeclIDs;
 
-  /// \brief Offset of each declaration in the bitstream, indexed by
+  /// Offset of each declaration in the bitstream, indexed by
   /// the declaration's ID.
   std::vector<serialization::DeclOffset> DeclOffsets;
 
-  /// \brief Sorted (by file offset) vector of pairs of file offset/DeclID.
+  /// Sorted (by file offset) vector of pairs of file offset/DeclID.
   using LocDeclIDsTy =
       SmallVector<std::pair<unsigned, serialization::DeclID>, 64>;
   struct DeclIDInFileInfo {
     LocDeclIDsTy DeclIDs;
 
-    /// \brief Set when the DeclIDs vectors from all files are joined, this
+    /// Set when the DeclIDs vectors from all files are joined, this
     /// indicates the index that this particular vector has in the global one.
     unsigned FirstDeclIndex;
   };
   using FileDeclIDsTy = llvm::DenseMap<FileID, DeclIDInFileInfo *>;
 
-  /// \brief Map from file SLocEntries to info about the file-level declarations
+  /// Map from file SLocEntries to info about the file-level declarations
   /// that it contains.
   FileDeclIDsTy FileDeclIDs;
 
   void associateDeclWithFile(const Decl *D, serialization::DeclID);
 
-  /// \brief The first ID number we can use for our own types.
+  /// The first ID number we can use for our own types.
   serialization::TypeID FirstTypeID = serialization::NUM_PREDEF_TYPE_IDS;
 
-  /// \brief The type ID that will be assigned to the next new type.
+  /// The type ID that will be assigned to the next new type.
   serialization::TypeID NextTypeID = FirstTypeID;
 
-  /// \brief Map that provides the ID numbers of each type within the
+  /// Map that provides the ID numbers of each type within the
   /// output stream, plus those deserialized from a chained PCH.
   ///
   /// The ID numbers of types are consecutive (in order of discovery)
@@ -251,17 +250,17 @@
   /// Keys in the map never have const/volatile qualifiers.
   TypeIdxMap TypeIdxs;
 
-  /// \brief Offset of each type in the bitstream, indexed by
+  /// Offset of each type in the bitstream, indexed by
   /// the type's ID.
   std::vector<uint32_t> TypeOffsets;
 
-  /// \brief The first ID number we can use for our own identifiers.
+  /// The first ID number we can use for our own identifiers.
   serialization::IdentID FirstIdentID = serialization::NUM_PREDEF_IDENT_IDS;
 
-  /// \brief The identifier ID that will be assigned to the next new identifier.
+  /// The identifier ID that will be assigned to the next new identifier.
   serialization::IdentID NextIdentID = FirstIdentID;
 
-  /// \brief Map that provides the ID numbers of each identifier in
+  /// Map that provides the ID numbers of each identifier in
   /// the output stream.
   ///
   /// The ID numbers for identifiers are consecutive (in order of
@@ -269,13 +268,13 @@
   /// IdentifierInfo.
   llvm::MapVector<const IdentifierInfo *, serialization::IdentID> IdentifierIDs;
 
-  /// \brief The first ID number we can use for our own macros.
+  /// The first ID number we can use for our own macros.
   serialization::MacroID FirstMacroID = serialization::NUM_PREDEF_MACRO_IDS;
 
-  /// \brief The identifier ID that will be assigned to the next new identifier.
+  /// The identifier ID that will be assigned to the next new identifier.
   serialization::MacroID NextMacroID = FirstMacroID;
 
-  /// \brief Map that provides the ID numbers of each macro.
+  /// Map that provides the ID numbers of each macro.
   llvm::DenseMap<MacroInfo *, serialization::MacroID> MacroIDs;
 
   struct MacroInfoToEmitData {
@@ -284,7 +283,7 @@
     serialization::MacroID ID;
   };
 
-  /// \brief The macro infos to emit.
+  /// The macro infos to emit.
   std::vector<MacroInfoToEmitData> MacroInfosToEmit;
 
   llvm::DenseMap<const IdentifierInfo *, uint64_t> IdentMacroDirectivesOffsetMap;
@@ -292,46 +291,46 @@
   /// @name FlushStmt Caches
   /// @{
 
-  /// \brief Set of parent Stmts for the currently serializing sub-stmt.
+  /// Set of parent Stmts for the currently serializing sub-stmt.
   llvm::DenseSet<Stmt *> ParentStmts;
 
-  /// \brief Offsets of sub-stmts already serialized. The offset points
+  /// Offsets of sub-stmts already serialized. The offset points
   /// just after the stmt record.
   llvm::DenseMap<Stmt *, uint64_t> SubStmtEntries;
 
   /// @}
 
-  /// \brief Offsets of each of the identifier IDs into the identifier
+  /// Offsets of each of the identifier IDs into the identifier
   /// table.
   std::vector<uint32_t> IdentifierOffsets;
 
-  /// \brief The first ID number we can use for our own submodules.
+  /// The first ID number we can use for our own submodules.
   serialization::SubmoduleID FirstSubmoduleID =
       serialization::NUM_PREDEF_SUBMODULE_IDS;
 
-  /// \brief The submodule ID that will be assigned to the next new submodule.
+  /// The submodule ID that will be assigned to the next new submodule.
   serialization::SubmoduleID NextSubmoduleID = FirstSubmoduleID;
 
-  /// \brief The first ID number we can use for our own selectors.
+  /// The first ID number we can use for our own selectors.
   serialization::SelectorID FirstSelectorID =
       serialization::NUM_PREDEF_SELECTOR_IDS;
 
-  /// \brief The selector ID that will be assigned to the next new selector.
+  /// The selector ID that will be assigned to the next new selector.
   serialization::SelectorID NextSelectorID = FirstSelectorID;
 
-  /// \brief Map that provides the ID numbers of each Selector.
+  /// Map that provides the ID numbers of each Selector.
   llvm::MapVector<Selector, serialization::SelectorID> SelectorIDs;
 
-  /// \brief Offset of each selector within the method pool/selector
+  /// Offset of each selector within the method pool/selector
   /// table, indexed by the Selector ID (-1).
   std::vector<uint32_t> SelectorOffsets;
 
-  /// \brief Mapping from macro definitions (as they occur in the preprocessing
+  /// Mapping from macro definitions (as they occur in the preprocessing
   /// record) to the macro IDs.
   llvm::DenseMap<const MacroDefinitionRecord *,
                  serialization::PreprocessedEntityID> MacroDefinitions;
 
-  /// \brief Cache of indices of anonymous declarations within their lexical
+  /// Cache of indices of anonymous declarations within their lexical
   /// contexts.
   llvm::DenseMap<const Decl *, unsigned> AnonymousDeclarationNumbers;
 
@@ -376,17 +375,17 @@
   using UpdateRecord = SmallVector<DeclUpdate, 1>;
   using DeclUpdateMap = llvm::MapVector<const Decl *, UpdateRecord>;
 
-  /// \brief Mapping from declarations that came from a chained PCH to the
+  /// Mapping from declarations that came from a chained PCH to the
   /// record containing modifications to them.
   DeclUpdateMap DeclUpdates;
 
   using FirstLatestDeclMap = llvm::DenseMap<Decl *, Decl *>;
 
-  /// \brief Map of first declarations from a chained PCH that point to the
+  /// Map of first declarations from a chained PCH that point to the
   /// most recent declarations in another PCH.
   FirstLatestDeclMap FirstLatestDecls;
 
-  /// \brief Declarations encountered that might be external
+  /// Declarations encountered that might be external
   /// definitions.
   ///
   /// We keep track of external definitions and other 'interesting' declarations
@@ -400,7 +399,7 @@
   SmallVector<uint64_t, 16> EagerlyDeserializedDecls;
   SmallVector<uint64_t, 16> ModularCodegenDecls;
 
-  /// \brief DeclContexts that have received extensions since their serialized
+  /// DeclContexts that have received extensions since their serialized
   /// form.
   ///
   /// For namespaces, when we're chaining and encountering a namespace, we check
@@ -409,52 +408,52 @@
   /// it.
   llvm::SmallSetVector<const DeclContext *, 16> UpdatedDeclContexts;
 
-  /// \brief Keeps track of declarations that we must emit, even though we're
+  /// Keeps track of declarations that we must emit, even though we're
   /// not guaranteed to be able to find them by walking the AST starting at the
   /// translation unit.
   SmallVector<const Decl *, 16> DeclsToEmitEvenIfUnreferenced;
 
-  /// \brief The set of Objective-C class that have categories we
+  /// The set of Objective-C class that have categories we
   /// should serialize.
   llvm::SetVector<ObjCInterfaceDecl *> ObjCClassesWithCategories;
-                    
-  /// \brief The set of declarations that may have redeclaration chains that
+
+  /// The set of declarations that may have redeclaration chains that
   /// need to be serialized.
   llvm::SmallVector<const Decl *, 16> Redeclarations;
 
-  /// \brief A cache of the first local declaration for "interesting"
+  /// A cache of the first local declaration for "interesting"
   /// redeclaration chains.
   llvm::DenseMap<const Decl *, const Decl *> FirstLocalDeclCache;
-                                      
-  /// \brief Mapping from SwitchCase statements to IDs.
+
+  /// Mapping from SwitchCase statements to IDs.
   llvm::DenseMap<SwitchCase *, unsigned> SwitchCaseIDs;
 
-  /// \brief The number of statements written to the AST file.
+  /// The number of statements written to the AST file.
   unsigned NumStatements = 0;
 
-  /// \brief The number of macros written to the AST file.
+  /// The number of macros written to the AST file.
   unsigned NumMacros = 0;
 
-  /// \brief The number of lexical declcontexts written to the AST
+  /// The number of lexical declcontexts written to the AST
   /// file.
   unsigned NumLexicalDeclContexts = 0;
 
-  /// \brief The number of visible declcontexts written to the AST
+  /// The number of visible declcontexts written to the AST
   /// file.
   unsigned NumVisibleDeclContexts = 0;
 
-  /// \brief A mapping from each known submodule to its ID number, which will
+  /// A mapping from each known submodule to its ID number, which will
   /// be a positive integer.
   llvm::DenseMap<Module *, unsigned> SubmoduleIDs;
 
-  /// \brief A list of the module file extension writers.
+  /// A list of the module file extension writers.
   std::vector<std::unique_ptr<ModuleFileExtensionWriter>>
     ModuleFileExtensionWriters;
 
-  /// \brief Retrieve or create a submodule ID for this module.
+  /// Retrieve or create a submodule ID for this module.
   unsigned getSubmoduleID(Module *Mod);
 
-  /// \brief Write the given subexpression to the bitstream.
+  /// Write the given subexpression to the bitstream.
   void WriteSubStmt(Stmt *S);
 
   void WriteBlockInfoBlock();
@@ -476,7 +475,7 @@
   void WriteHeaderSearch(const HeaderSearch &HS);
   void WritePreprocessorDetail(PreprocessingRecord &PPRec);
   void WriteSubmodules(Module *WritingModule);
-                                        
+
   void WritePragmaDiagnosticMappings(const DiagnosticsEngine &Diag,
                                      bool isModule);
 
@@ -540,7 +539,7 @@
                                 Module *WritingModule);
 
 public:
-  /// \brief Create a new precompiled header writer that outputs to
+  /// Create a new precompiled header writer that outputs to
   /// the given bitstream.
   ASTWriter(llvm::BitstreamWriter &Stream, SmallVectorImpl<char> &Buffer,
             MemoryBufferCache &PCMCache,
@@ -550,12 +549,12 @@
 
   const LangOptions &getLangOpts() const;
 
-  /// \brief Get a timestamp for output into the AST file. The actual timestamp
+  /// Get a timestamp for output into the AST file. The actual timestamp
   /// of the specified file may be ignored if we have been instructed to not
   /// include timestamps in the output file.
   time_t getTimestampForOutput(const FileEntry *E) const;
 
-  /// \brief Write a precompiled header for the given semantic analysis.
+  /// Write a precompiled header for the given semantic analysis.
   ///
   /// \param SemaRef a reference to the semantic analysis object that processed
   /// the AST to be written into the precompiled header.
@@ -573,46 +572,46 @@
                             Module *WritingModule, StringRef isysroot,
                             bool hasErrors = false);
 
-  /// \brief Emit a token.
+  /// Emit a token.
   void AddToken(const Token &Tok, RecordDataImpl &Record);
 
-  /// \brief Emit a source location.
+  /// Emit a source location.
   void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record);
 
-  /// \brief Emit a source range.
+  /// Emit a source range.
   void AddSourceRange(SourceRange Range, RecordDataImpl &Record);
 
-  /// \brief Emit a reference to an identifier.
+  /// Emit a reference to an identifier.
   void AddIdentifierRef(const IdentifierInfo *II, RecordDataImpl &Record);
 
-  /// \brief Get the unique number used to refer to the given selector.
+  /// Get the unique number used to refer to the given selector.
   serialization::SelectorID getSelectorRef(Selector Sel);
 
-  /// \brief Get the unique number used to refer to the given identifier.
+  /// Get the unique number used to refer to the given identifier.
   serialization::IdentID getIdentifierRef(const IdentifierInfo *II);
 
-  /// \brief Get the unique number used to refer to the given macro.
+  /// Get the unique number used to refer to the given macro.
   serialization::MacroID getMacroRef(MacroInfo *MI, const IdentifierInfo *Name);
 
-  /// \brief Determine the ID of an already-emitted macro.
+  /// Determine the ID of an already-emitted macro.
   serialization::MacroID getMacroID(MacroInfo *MI);
 
   uint64_t getMacroDirectivesOffset(const IdentifierInfo *Name);
 
-  /// \brief Emit a reference to a type.
+  /// Emit a reference to a type.
   void AddTypeRef(QualType T, RecordDataImpl &Record);
 
-  /// \brief Force a type to be emitted and get its ID.
+  /// Force a type to be emitted and get its ID.
   serialization::TypeID GetOrCreateTypeID(QualType T);
 
-  /// \brief Determine the type ID of an already-emitted type.
+  /// Determine the type ID of an already-emitted type.
   serialization::TypeID getTypeID(QualType T) const;
 
-  /// \brief Find the first local declaration of a given local redeclarable
+  /// Find the first local declaration of a given local redeclarable
   /// decl.
   const Decl *getFirstLocalDecl(const Decl *D);
 
-  /// \brief Is this a local declaration (that is, one that will be written to
+  /// Is this a local declaration (that is, one that will be written to
   /// our AST file)? This is the case for declarations that are neither imported
   /// from another AST file nor predefined.
   bool IsLocalDecl(const Decl *D) {
@@ -623,52 +622,52 @@
             I->second >= serialization::NUM_PREDEF_DECL_IDS);
   };
 
-  /// \brief Emit a reference to a declaration.
+  /// Emit a reference to a declaration.
   void AddDeclRef(const Decl *D, RecordDataImpl &Record);
 
-  /// \brief Force a declaration to be emitted and get its ID.
+  /// Force a declaration to be emitted and get its ID.
   serialization::DeclID GetDeclRef(const Decl *D);
 
-  /// \brief Determine the declaration ID of an already-emitted
+  /// Determine the declaration ID of an already-emitted
   /// declaration.
   serialization::DeclID getDeclID(const Decl *D);
 
   unsigned getAnonymousDeclarationNumber(const NamedDecl *D);
 
-  /// \brief Add a string to the given record.
+  /// Add a string to the given record.
   void AddString(StringRef Str, RecordDataImpl &Record);
 
-  /// \brief Convert a path from this build process into one that is appropriate
+  /// Convert a path from this build process into one that is appropriate
   /// for emission in the module file.
   bool PreparePathForOutput(SmallVectorImpl<char> &Path);
 
-  /// \brief Add a path to the given record.
+  /// Add a path to the given record.
   void AddPath(StringRef Path, RecordDataImpl &Record);
 
-  /// \brief Emit the current record with the given path as a blob.
+  /// Emit the current record with the given path as a blob.
   void EmitRecordWithPath(unsigned Abbrev, RecordDataRef Record,
                           StringRef Path);
 
-  /// \brief Add a version tuple to the given record
+  /// Add a version tuple to the given record
   void AddVersionTuple(const VersionTuple &Version, RecordDataImpl &Record);
 
-  /// \brief Retrieve or create a submodule ID for this module, or return 0 if
+  /// Retrieve or create a submodule ID for this module, or return 0 if
   /// the submodule is neither local (a submodle of the currently-written module)
   /// nor from an imported module.
   unsigned getLocalOrImportedSubmoduleID(Module *Mod);
 
-  /// \brief Note that the identifier II occurs at the given offset
+  /// Note that the identifier II occurs at the given offset
   /// within the identifier table.
   void SetIdentifierOffset(const IdentifierInfo *II, uint32_t Offset);
 
-  /// \brief Note that the selector Sel occurs at the given offset
+  /// Note that the selector Sel occurs at the given offset
   /// within the method pool/selector table.
   void SetSelectorOffset(Selector Sel, uint32_t Offset);
 
-  /// \brief Record an ID for the given switch-case statement.
+  /// Record an ID for the given switch-case statement.
   unsigned RecordSwitchCaseID(SwitchCase *S);
 
-  /// \brief Retrieve the ID for the given switch-case statement.
+  /// Retrieve the ID for the given switch-case statement.
   unsigned getSwitchCaseID(SwitchCase *S);
 
   void ClearSwitchCaseIDs();
@@ -743,21 +742,21 @@
                               const RecordDecl *Record) override;
 };
 
-/// \brief An object for streaming information to a record.
+/// An object for streaming information to a record.
 class ASTRecordWriter {
   ASTWriter *Writer;
   ASTWriter::RecordDataImpl *Record;
 
-  /// \brief Statements that we've encountered while serializing a
+  /// Statements that we've encountered while serializing a
   /// declaration or type.
   SmallVector<Stmt *, 16> StmtsToEmit;
 
-  /// \brief Indices of record elements that describe offsets within the
+  /// Indices of record elements that describe offsets within the
   /// bitcode. These will be converted to offsets relative to the current
   /// record when emitted.
   SmallVector<unsigned, 8> OffsetIndices;
 
-  /// \brief Flush all of the statements and expressions that have
+  /// Flush all of the statements and expressions that have
   /// been added to the queue via AddStmt().
   void FlushStmts();
   void FlushSubStmts();
@@ -787,10 +786,10 @@
   ASTRecordWriter(const ASTRecordWriter &) = delete;
   ASTRecordWriter &operator=(const ASTRecordWriter &) = delete;
 
-  /// \brief Extract the underlying record storage.
+  /// Extract the underlying record storage.
   ASTWriter::RecordDataImpl &getRecordData() const { return *Record; }
 
-  /// \brief Minimal vector-like interface.
+  /// Minimal vector-like interface.
   /// @{
   void push_back(uint64_t N) { Record->push_back(N); }
   template<typename InputIterator>
@@ -802,7 +801,7 @@
   uint64_t &operator[](size_t N) { return (*Record)[N]; }
   /// @}
 
-  /// \brief Emit the record to the stream, followed by its substatements, and
+  /// Emit the record to the stream, followed by its substatements, and
   /// return its offset.
   // FIXME: Allow record producers to suggest Abbrevs.
   uint64_t Emit(unsigned Code, unsigned Abbrev = 0) {
@@ -813,7 +812,7 @@
     return Offset;
   }
 
-  /// \brief Emit the record to the stream, preceded by its substatements.
+  /// Emit the record to the stream, preceded by its substatements.
   uint64_t EmitStmt(unsigned Code, unsigned Abbrev = 0) {
     FlushSubStmts();
     PrepareToEmit(Writer->Stream.GetCurrentBitNo());
@@ -821,14 +820,14 @@
     return Writer->Stream.GetCurrentBitNo();
   }
 
-  /// \brief Add a bit offset into the record. This will be converted into an
+  /// Add a bit offset into the record. This will be converted into an
   /// offset relative to the current record when emitted.
   void AddOffset(uint64_t BitOffset) {
     OffsetIndices.push_back(Record->size());
     Record->push_back(BitOffset);
   }
 
-  /// \brief Add the given statement or expression to the queue of
+  /// Add the given statement or expression to the queue of
   /// statements to emit.
   ///
   /// This routine should be used when emitting types and declarations
@@ -839,74 +838,74 @@
     StmtsToEmit.push_back(S);
   }
 
-  /// \brief Add a definition for the given function to the queue of statements
+  /// Add a definition for the given function to the queue of statements
   /// to emit.
   void AddFunctionDefinition(const FunctionDecl *FD);
 
-  /// \brief Emit a source location.
+  /// Emit a source location.
   void AddSourceLocation(SourceLocation Loc) {
     return Writer->AddSourceLocation(Loc, *Record);
   }
 
-  /// \brief Emit a source range.
+  /// Emit a source range.
   void AddSourceRange(SourceRange Range) {
     return Writer->AddSourceRange(Range, *Record);
   }
 
-  /// \brief Emit an integral value.
+  /// Emit an integral value.
   void AddAPInt(const llvm::APInt &Value);
 
-  /// \brief Emit a signed integral value.
+  /// Emit a signed integral value.
   void AddAPSInt(const llvm::APSInt &Value);
 
-  /// \brief Emit a floating-point value.
+  /// Emit a floating-point value.
   void AddAPFloat(const llvm::APFloat &Value);
 
-  /// \brief Emit a reference to an identifier.
+  /// Emit a reference to an identifier.
   void AddIdentifierRef(const IdentifierInfo *II) {
     return Writer->AddIdentifierRef(II, *Record);
   }
 
-  /// \brief Emit a Selector (which is a smart pointer reference).
+  /// Emit a Selector (which is a smart pointer reference).
   void AddSelectorRef(Selector S);
 
-  /// \brief Emit a CXXTemporary.
+  /// Emit a CXXTemporary.
   void AddCXXTemporary(const CXXTemporary *Temp);
 
-  /// \brief Emit a C++ base specifier.
+  /// Emit a C++ base specifier.
   void AddCXXBaseSpecifier(const CXXBaseSpecifier &Base);
 
-  /// \brief Emit a set of C++ base specifiers.
+  /// Emit a set of C++ base specifiers.
   void AddCXXBaseSpecifiers(ArrayRef<CXXBaseSpecifier> Bases);
 
-  /// \brief Emit a reference to a type.
+  /// Emit a reference to a type.
   void AddTypeRef(QualType T) {
     return Writer->AddTypeRef(T, *Record);
   }
 
-  /// \brief Emits a reference to a declarator info.
+  /// Emits a reference to a declarator info.
   void AddTypeSourceInfo(TypeSourceInfo *TInfo);
 
-  /// \brief Emits a type with source-location information.
+  /// Emits source location information for a type. Does not emit the type.
   void AddTypeLoc(TypeLoc TL);
 
-  /// \brief Emits a template argument location info.
+  /// Emits a template argument location info.
   void AddTemplateArgumentLocInfo(TemplateArgument::ArgKind Kind,
                                   const TemplateArgumentLocInfo &Arg);
 
-  /// \brief Emits a template argument location.
+  /// Emits a template argument location.
   void AddTemplateArgumentLoc(const TemplateArgumentLoc &Arg);
 
-  /// \brief Emits an AST template argument list info.
+  /// Emits an AST template argument list info.
   void AddASTTemplateArgumentListInfo(
       const ASTTemplateArgumentListInfo *ASTTemplArgList);
 
-  /// \brief Emit a reference to a declaration.
+  /// Emit a reference to a declaration.
   void AddDeclRef(const Decl *D) {
     return Writer->AddDeclRef(D, *Record);
   }
 
-  /// \brief Emit a declaration name.
+  /// Emit a declaration name.
   void AddDeclarationName(DeclarationName Name);
 
   void AddDeclarationNameLoc(const DeclarationNameLoc &DNLoc,
@@ -915,52 +914,52 @@
 
   void AddQualifierInfo(const QualifierInfo &Info);
 
-  /// \brief Emit a nested name specifier.
+  /// Emit a nested name specifier.
   void AddNestedNameSpecifier(NestedNameSpecifier *NNS);
 
-  /// \brief Emit a nested name specifier with source-location information.
+  /// Emit a nested name specifier with source-location information.
   void AddNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS);
 
-  /// \brief Emit a template name.
+  /// Emit a template name.
   void AddTemplateName(TemplateName Name);
 
-  /// \brief Emit a template argument.
+  /// Emit a template argument.
   void AddTemplateArgument(const TemplateArgument &Arg);
 
-  /// \brief Emit a template parameter list.
+  /// Emit a template parameter list.
   void AddTemplateParameterList(const TemplateParameterList *TemplateParams);
 
-  /// \brief Emit a template argument list.
+  /// Emit a template argument list.
   void AddTemplateArgumentList(const TemplateArgumentList *TemplateArgs);
 
-  /// \brief Emit a UnresolvedSet structure.
+  /// Emit a UnresolvedSet structure.
   void AddUnresolvedSet(const ASTUnresolvedSet &Set);
 
-  /// \brief Emit a CXXCtorInitializer array.
+  /// Emit a CXXCtorInitializer array.
   void AddCXXCtorInitializers(ArrayRef<CXXCtorInitializer *> CtorInits);
 
   void AddCXXDefinitionData(const CXXRecordDecl *D);
 
-  /// \brief Emit a string.
+  /// Emit a string.
   void AddString(StringRef Str) {
     return Writer->AddString(Str, *Record);
   }
 
-  /// \brief Emit a path.
+  /// Emit a path.
   void AddPath(StringRef Path) {
     return Writer->AddPath(Path, *Record);
   }
 
-  /// \brief Emit a version tuple.
+  /// Emit a version tuple.
   void AddVersionTuple(const VersionTuple &Version) {
     return Writer->AddVersionTuple(Version, *Record);
   }
 
-  /// \brief Emit a list of attributes.
+  /// Emit a list of attributes.
   void AddAttributes(ArrayRef<const Attr*> Attrs);
 };
 
-/// \brief AST and semantic-analysis consumer that generates a
+/// AST and semantic-analysis consumer that generates a
 /// precompiled header from the parsed source code.
 class PCHGenerator : public SemaConsumer {
   const Preprocessor &PP;
diff --git a/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc b/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
index 8c67416..bd616ce 100644
--- a/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
+++ b/linux-x64/clang/include/clang/Serialization/AttrPCHRead.inc
@@ -435,6 +435,34 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::CPUDispatch: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    unsigned cpusSize = Record.readInt();
+    SmallVector<IdentifierInfo *, 4> cpus;
+    cpus.reserve(cpusSize);
+    for (unsigned i = 0; i != cpusSize; ++i)
+      cpus.push_back(Record.getIdentifierInfo());
+    New = new (Context) CPUDispatchAttr(Range, Context, cpus.data(), cpusSize, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
+  case attr::CPUSpecific: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    unsigned cpusSize = Record.readInt();
+    SmallVector<IdentifierInfo *, 4> cpus;
+    cpus.reserve(cpusSize);
+    for (unsigned i = 0; i != cpusSize; ++i)
+      cpus.push_back(Record.getIdentifierInfo());
+    New = new (Context) CPUSpecificAttr(Range, Context, cpus.data(), cpusSize, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::CUDAConstant: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -561,6 +589,16 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::CodeSeg: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    std::string name= Record.readString();
+    New = new (Context) CodeSegAttr(Range, Context, name, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::Cold: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -947,6 +985,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::LifetimeBound: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) LifetimeBoundAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::LockReturned: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1075,6 +1122,16 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::MinVectorWidth: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    unsigned vectorWidth = Record.readInt();
+    New = new (Context) MinVectorWidthAttr(Range, Context, vectorWidth, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::Mips16: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1289,6 +1346,15 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::NoStackProtector: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    New = new (Context) NoStackProtectorAttr(Range, Context, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::NoThreadSafetyAnalysis: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
@@ -1782,6 +1848,16 @@
     New->setImplicit(isImplicit);
     break;
   }
+  case attr::RISCVInterrupt: {
+    bool isInherited = Record.readInt();
+    bool isImplicit = Record.readInt();
+    unsigned Spelling = Record.readInt();
+    RISCVInterruptAttr::InterruptType interrupt(static_cast<RISCVInterruptAttr::InterruptType>(Record.readInt()));
+    New = new (Context) RISCVInterruptAttr(Range, Context, interrupt, Spelling);
+    cast<InheritableAttr>(New)->setInherited(isInherited);
+    New->setImplicit(isImplicit);
+    break;
+  }
   case attr::RegCall: {
     bool isInherited = Record.readInt();
     bool isImplicit = Record.readInt();
diff --git a/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc b/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
index 875e90b..c9b93be 100644
--- a/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
+++ b/linux-x64/clang/include/clang/Serialization/AttrPCHWrite.inc
@@ -339,6 +339,26 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::CPUDispatch: {
+    const auto *SA = cast<CPUDispatchAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    Record.push_back(SA->cpus_size());
+    for (auto &Val : SA->cpus())
+      Record.AddIdentifierRef(Val);
+    break;
+  }
+  case attr::CPUSpecific: {
+    const auto *SA = cast<CPUSpecificAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    Record.push_back(SA->cpus_size());
+    for (auto &Val : SA->cpus())
+      Record.AddIdentifierRef(Val);
+    break;
+  }
   case attr::CUDAConstant: {
     const auto *SA = cast<CUDAConstantAttr>(A);
     Record.push_back(SA->isInherited());
@@ -437,6 +457,14 @@
     Record.AddDeclRef(SA->getFunctionDecl());
     break;
   }
+  case attr::CodeSeg: {
+    const auto *SA = cast<CodeSegAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    Record.AddString(SA->getName());
+    break;
+  }
   case attr::Cold: {
     const auto *SA = cast<ColdAttr>(A);
     Record.push_back(SA->isInherited());
@@ -743,6 +771,13 @@
     Record.push_back(SA->getVersion());
     break;
   }
+  case attr::LifetimeBound: {
+    const auto *SA = cast<LifetimeBoundAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::LockReturned: {
     const auto *SA = cast<LockReturnedAttr>(A);
     Record.push_back(SA->isInherited());
@@ -844,6 +879,14 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::MinVectorWidth: {
+    const auto *SA = cast<MinVectorWidthAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    Record.push_back(SA->getVectorWidth());
+    break;
+  }
   case attr::Mips16: {
     const auto *SA = cast<Mips16Attr>(A);
     Record.push_back(SA->isInherited());
@@ -1007,6 +1050,13 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::NoStackProtector: {
+    const auto *SA = cast<NoStackProtectorAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+    break;
+  }
   case attr::NoThreadSafetyAnalysis: {
     const auto *SA = cast<NoThreadSafetyAnalysisAttr>(A);
     Record.push_back(SA->isInherited());
@@ -1389,6 +1439,14 @@
     Record.push_back(A->getSpellingListIndex());
     break;
   }
+  case attr::RISCVInterrupt: {
+    const auto *SA = cast<RISCVInterruptAttr>(A);
+    Record.push_back(SA->isInherited());
+    Record.push_back(A->isImplicit());
+    Record.push_back(A->getSpellingListIndex());
+Record.push_back(SA->getInterrupt());
+    break;
+  }
   case attr::RegCall: {
     const auto *SA = cast<RegCallAttr>(A);
     Record.push_back(SA->isInherited());
diff --git a/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h b/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
index 5a5093a..73bf2ed 100644
--- a/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
+++ b/linux-x64/clang/include/clang/Serialization/ContinuousRangeMap.h
@@ -16,6 +16,7 @@
 #define LLVM_CLANG_SERIALIZATION_CONTINUOUSRANGEMAP_H
 
 #include "clang/Basic/LLVM.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallVector.h"
 #include <algorithm>
 #include <cassert>
@@ -23,7 +24,7 @@
 
 namespace clang {
 
-/// \brief A map from continuous integer ranges to some value, with a very
+/// A map from continuous integer ranges to some value, with a very
 /// specialized interface.
 ///
 /// CRM maps from integer ranges to values. The ranges are continuous, i.e.
@@ -71,14 +72,14 @@
            "Must insert keys in order.");
     Rep.push_back(Val);
   }
-  
+
   void insertOrReplace(const value_type &Val) {
     iterator I = std::lower_bound(Rep.begin(), Rep.end(), Val, Compare());
     if (I != Rep.end() && I->first == Val.first) {
       I->second = Val.second;
       return;
     }
-    
+
     Rep.insert(I, Val);
   }
 
@@ -105,8 +106,8 @@
 
   reference back() { return Rep.back(); }
   const_reference back() const { return Rep.back(); }
-  
-  /// \brief An object that helps properly build a continuous range map
+
+  /// An object that helps properly build a continuous range map
   /// from a set of values.
   class Builder {
     ContinuousRangeMap &Self;
@@ -115,7 +116,7 @@
     explicit Builder(ContinuousRangeMap &Self) : Self(Self) {}
     Builder(const Builder&) = delete;
     Builder &operator=(const Builder&) = delete;
-    
+
     ~Builder() {
       llvm::sort(Self.Rep.begin(), Self.Rep.end(), Compare());
       std::unique(Self.Rep.begin(), Self.Rep.end(),
@@ -127,7 +128,7 @@
         return A == B;
       });
     }
-    
+
     void insert(const value_type &Val) {
       Self.Rep.push_back(Val);
     }
diff --git a/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h b/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
index 0f14eca..d47fe95 100644
--- a/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
+++ b/linux-x64/clang/include/clang/Serialization/GlobalModuleIndex.h
@@ -47,7 +47,7 @@
 using llvm::StringRef;
 using serialization::ModuleFile;
 
-/// \brief A global index for a set of module files, providing information about
+/// A global index for a set of module files, providing information about
 /// the identifiers within those module files.
 ///
 /// The global index is an aid for name lookup into modules, offering a central
@@ -59,64 +59,64 @@
 /// imported, and can be queried to determine which modules the current
 /// translation could or should load to fix a problem.
 class GlobalModuleIndex {
-  /// \brief Buffer containing the index file, which is lazily accessed so long
+  /// Buffer containing the index file, which is lazily accessed so long
   /// as the global module index is live.
   std::unique_ptr<llvm::MemoryBuffer> Buffer;
 
-  /// \brief The hash table.
+  /// The hash table.
   ///
   /// This pointer actually points to a IdentifierIndexTable object,
   /// but that type is only accessible within the implementation of
   /// GlobalModuleIndex.
   void *IdentifierIndex;
 
-  /// \brief Information about a given module file.
+  /// Information about a given module file.
   struct ModuleInfo {
     ModuleInfo() : File(), Size(), ModTime() { }
 
-    /// \brief The module file, once it has been resolved.
+    /// The module file, once it has been resolved.
     ModuleFile *File;
 
-    /// \brief The module file name.
+    /// The module file name.
     std::string FileName;
 
-    /// \brief Size of the module file at the time the global index was built.
+    /// Size of the module file at the time the global index was built.
     off_t Size;
 
-    /// \brief Modification time of the module file at the time the global
+    /// Modification time of the module file at the time the global
     /// index was built.
     time_t ModTime;
 
-    /// \brief The module IDs on which this module directly depends.
+    /// The module IDs on which this module directly depends.
     /// FIXME: We don't really need a vector here.
     llvm::SmallVector<unsigned, 4> Dependencies;
   };
 
-  /// \brief A mapping from module IDs to information about each module.
+  /// A mapping from module IDs to information about each module.
   ///
   /// This vector may have gaps, if module files have been removed or have
   /// been updated since the index was built. A gap is indicated by an empty
   /// file name.
   llvm::SmallVector<ModuleInfo, 16> Modules;
 
-  /// \brief Lazily-populated mapping from module files to their
+  /// Lazily-populated mapping from module files to their
   /// corresponding index into the \c Modules vector.
   llvm::DenseMap<ModuleFile *, unsigned> ModulesByFile;
 
-  /// \brief The set of modules that have not yet been resolved.
+  /// The set of modules that have not yet been resolved.
   ///
   /// The string is just the name of the module itself, which maps to the
   /// module ID.
   llvm::StringMap<unsigned> UnresolvedModules;
 
-  /// \brief The number of identifier lookups we performed.
+  /// The number of identifier lookups we performed.
   unsigned NumIdentifierLookups;
 
-  /// \brief The number of identifier lookup hits, where we recognize the
+  /// The number of identifier lookup hits, where we recognize the
   /// identifier.
   unsigned NumIdentifierLookupHits;
-  
-  /// \brief Internal constructor. Use \c readIndex() to read an index.
+
+  /// Internal constructor. Use \c readIndex() to read an index.
   explicit GlobalModuleIndex(std::unique_ptr<llvm::MemoryBuffer> Buffer,
                              llvm::BitstreamCursor Cursor);
 
@@ -126,20 +126,20 @@
 public:
   ~GlobalModuleIndex();
 
-  /// \brief An error code returned when trying to read an index.
+  /// An error code returned when trying to read an index.
   enum ErrorCode {
-    /// \brief No error occurred.
+    /// No error occurred.
     EC_None,
-    /// \brief No index was found.
+    /// No index was found.
     EC_NotFound,
-    /// \brief Some other process is currently building the index; it is not
+    /// Some other process is currently building the index; it is not
     /// available yet.
     EC_Building,
-    /// \brief There was an unspecified I/O error reading or writing the index.
+    /// There was an unspecified I/O error reading or writing the index.
     EC_IOError
   };
 
-  /// \brief Read a global index file for the given directory.
+  /// Read a global index file for the given directory.
   ///
   /// \param Path The path to the specific module cache where the module files
   /// for the intended configuration reside.
@@ -149,26 +149,26 @@
   static std::pair<GlobalModuleIndex *, ErrorCode>
   readIndex(StringRef Path);
 
-  /// \brief Returns an iterator for identifiers stored in the index table.
+  /// Returns an iterator for identifiers stored in the index table.
   ///
   /// The caller accepts ownership of the returned object.
   IdentifierIterator *createIdentifierIterator() const;
 
-  /// \brief Retrieve the set of modules that have up-to-date indexes.
+  /// Retrieve the set of modules that have up-to-date indexes.
   ///
   /// \param ModuleFiles Will be populated with the set of module files that
   /// have been indexed.
   void getKnownModules(SmallVectorImpl<ModuleFile *> &ModuleFiles);
 
-  /// \brief Retrieve the set of module files on which the given module file
+  /// Retrieve the set of module files on which the given module file
   /// directly depends.
   void getModuleDependencies(ModuleFile *File,
                              SmallVectorImpl<ModuleFile *> &Dependencies);
 
-  /// \brief A set of module files in which we found a result.
+  /// A set of module files in which we found a result.
   typedef llvm::SmallPtrSet<ModuleFile *, 4> HitSet;
-  
-  /// \brief Look for all of the module files with information about the given
+
+  /// Look for all of the module files with information about the given
   /// identifier, e.g., a global function, variable, or type with that name.
   ///
   /// \param Name The identifier to look for.
@@ -179,19 +179,19 @@
   /// \returns true if the identifier is known to the index, false otherwise.
   bool lookupIdentifier(StringRef Name, HitSet &Hits);
 
-  /// \brief Note that the given module file has been loaded.
+  /// Note that the given module file has been loaded.
   ///
   /// \returns false if the global module index has information about this
   /// module file, and true otherwise.
   bool loadedModuleFile(ModuleFile *File);
 
-  /// \brief Print statistics to standard error.
+  /// Print statistics to standard error.
   void printStats();
 
-  /// \brief Print debugging view to standard error.
+  /// Print debugging view to standard error.
   void dump();
 
-  /// \brief Write a global index into the given
+  /// Write a global index into the given
   ///
   /// \param FileMgr The file manager to use to load module files.
   /// \param PCHContainerRdr - The PCHContainerOperations to use for loading and
diff --git a/linux-x64/clang/include/clang/Serialization/Module.h b/linux-x64/clang/include/clang/Serialization/Module.h
index 26b3bce..d6e78e6 100644
--- a/linux-x64/clang/include/clang/Serialization/Module.h
+++ b/linux-x64/clang/include/clang/Serialization/Module.h
@@ -1,4 +1,4 @@
-//===--- Module.h - Module description --------------------------*- C++ -*-===//
+//===- Module.h - Module description ----------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -15,45 +15,52 @@
 #ifndef LLVM_CLANG_SERIALIZATION_MODULE_H
 #define LLVM_CLANG_SERIALIZATION_MODULE_H
 
-#include "clang/Basic/FileManager.h"
 #include "clang/Basic/Module.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Serialization/ASTBitCodes.h"
 #include "clang/Serialization/ContinuousRangeMap.h"
 #include "clang/Serialization/ModuleFileExtension.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/PointerIntPair.h"
 #include "llvm/ADT/SetVector.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
 #include "llvm/Bitcode/BitstreamReader.h"
 #include "llvm/Support/Endian.h"
+#include <cassert>
+#include <cstdint>
 #include <memory>
 #include <string>
-
-namespace llvm {
-template <typename Info> class OnDiskChainedHashTable;
-template <typename Info> class OnDiskIterableChainedHashTable;
-}
+#include <vector>
 
 namespace clang {
 
-class DeclContext;
-class Module;
+class FileEntry;
 
 namespace serialization {
 
-namespace reader {
-  class ASTDeclContextNameLookupTrait;
-}
-
-/// \brief Specifies the kind of module that has been loaded.
+/// Specifies the kind of module that has been loaded.
 enum ModuleKind {
-  MK_ImplicitModule, ///< File is an implicitly-loaded module.
-  MK_ExplicitModule, ///< File is an explicitly-loaded module.
-  MK_PCH,            ///< File is a PCH file treated as such.
-  MK_Preamble,       ///< File is a PCH file treated as the preamble.
-  MK_MainFile,       ///< File is a PCH file treated as the actual main file.
-  MK_PrebuiltModule  ///< File is from a prebuilt module path.
+  /// File is an implicitly-loaded module.
+  MK_ImplicitModule,
+
+  /// File is an explicitly-loaded module.
+  MK_ExplicitModule,
+
+  /// File is a PCH file treated as such.
+  MK_PCH,
+
+  /// File is a PCH file treated as the preamble.
+  MK_Preamble,
+
+  /// File is a PCH file treated as the actual main file.
+  MK_MainFile,
+
+  /// File is from a prebuilt module path.
+  MK_PrebuiltModule
 };
 
-/// \brief The input file that has been loaded from this AST file, along with
+/// The input file that has been loaded from this AST file, along with
 /// bools indicating whether this was an overridden buffer or if it was
 /// out-of-date or not-found.
 class InputFile {
@@ -65,7 +72,8 @@
   llvm::PointerIntPair<const FileEntry *, 2, unsigned> Val;
 
 public:
-  InputFile() {}
+  InputFile() = default;
+
   InputFile(const FileEntry *File,
             bool isOverridden = false, bool isOutOfDate = false) {
     assert(!(isOverridden && isOutOfDate) &&
@@ -90,7 +98,7 @@
   bool isNotFound() const { return Val.getInt() == NotFound; }
 };
 
-/// \brief Information about a module that has been loaded by the ASTReader.
+/// Information about a module that has been loaded by the ASTReader.
 ///
 /// Each instance of the Module class corresponds to a single AST file, which
 /// may be a precompiled header, precompiled preamble, a module, or an AST file
@@ -105,81 +113,84 @@
 
   // === General information ===
 
-  /// \brief The index of this module in the list of modules.
+  /// The index of this module in the list of modules.
   unsigned Index = 0;
 
-  /// \brief The type of this module.
+  /// The type of this module.
   ModuleKind Kind;
 
-  /// \brief The file name of the module file.
+  /// The file name of the module file.
   std::string FileName;
 
-  /// \brief The name of the module.
+  /// The name of the module.
   std::string ModuleName;
 
-  /// \brief The base directory of the module.
+  /// The base directory of the module.
   std::string BaseDirectory;
 
   std::string getTimestampFilename() const {
     return FileName + ".timestamp";
   }
 
-  /// \brief The original source file name that was used to build the
+  /// The original source file name that was used to build the
   /// primary AST file, which may have been modified for
   /// relocatable-pch support.
   std::string OriginalSourceFileName;
 
-  /// \brief The actual original source file name that was used to
+  /// The actual original source file name that was used to
   /// build this AST file.
   std::string ActualOriginalSourceFileName;
 
-  /// \brief The file ID for the original source file that was used to
+  /// The file ID for the original source file that was used to
   /// build this AST file.
   FileID OriginalSourceFileID;
 
-  /// \brief The directory that the PCH was originally created in. Used to
+  /// The directory that the PCH was originally created in. Used to
   /// allow resolving headers even after headers+PCH was moved to a new path.
   std::string OriginalDir;
 
   std::string ModuleMapPath;
 
-  /// \brief Whether this precompiled header is a relocatable PCH file.
+  /// Whether this precompiled header is a relocatable PCH file.
   bool RelocatablePCH = false;
 
-  /// \brief Whether timestamps are included in this module file.
+  /// Whether timestamps are included in this module file.
   bool HasTimestamps = false;
 
-  /// \brief The file entry for the module file.
+  /// Whether the PCH has a corresponding object file.
+  bool PCHHasObjectFile = false;
+
+  /// The file entry for the module file.
   const FileEntry *File = nullptr;
 
   /// The signature of the module file, which may be used instead of the size
   /// and modification time to identify this particular file.
   ASTFileSignature Signature;
 
-  /// \brief Whether this module has been directly imported by the
+  /// Whether this module has been directly imported by the
   /// user.
   bool DirectlyImported = false;
 
-  /// \brief The generation of which this module file is a part.
+  /// The generation of which this module file is a part.
   unsigned Generation;
-  
+
   /// The memory buffer that stores the data associated with
   /// this AST file, owned by the PCMCache in the ModuleManager.
   llvm::MemoryBuffer *Buffer;
 
-  /// \brief The size of this file, in bits.
+  /// The size of this file, in bits.
   uint64_t SizeInBits = 0;
 
-  /// \brief The global bit offset (or base) of this module
+  /// The global bit offset (or base) of this module
   uint64_t GlobalBitOffset = 0;
 
-  /// \brief The serialized bitstream data for this file.
+  /// The serialized bitstream data for this file.
   StringRef Data;
 
-  /// \brief The main bitstream cursor for the main block.
+  /// The main bitstream cursor for the main block.
   llvm::BitstreamCursor Stream;
 
-  /// \brief The source location where the module was explicitly or implicitly
+  /// The source location where the module was explicitly or implicitly
   /// imported in the local translation unit.
   ///
   /// If module A depends on and imports module B, both modules will have the
@@ -190,10 +201,10 @@
   /// made visible, just when the first submodule of that module was imported.
   SourceLocation DirectImportLoc;
 
-  /// \brief The source location where this module was first imported.
+  /// The source location where this module was first imported.
   SourceLocation ImportLoc;
 
-  /// \brief The first source location in this module.
+  /// The first source location in this module.
   SourceLocation FirstLoc;
 
   /// The list of extension readers that are attached to this module
@@ -205,20 +216,21 @@
   StringRef ModuleOffsetMap;
 
   // === Input Files ===
-  /// \brief The cursor to the start of the input-files block.
+
+  /// The cursor to the start of the input-files block.
   llvm::BitstreamCursor InputFilesCursor;
 
-  /// \brief Offsets for all of the input file entries in the AST file.
+  /// Offsets for all of the input file entries in the AST file.
   const llvm::support::unaligned_uint64_t *InputFileOffsets = nullptr;
 
-  /// \brief The input files that have been loaded from this AST file.
+  /// The input files that have been loaded from this AST file.
   std::vector<InputFile> InputFilesLoaded;
 
   // All user input files reside at the index range [0, NumUserInputFiles), and
   // system input files reside at [NumUserInputFiles, InputFilesLoaded.size()).
   unsigned NumUserInputFiles = 0;
 
-  /// \brief If non-zero, specifies the time when we last validated input
+  /// If non-zero, specifies the time when we last validated input
   /// files.  Zero means we never validated them.
   ///
   /// The time is specified in seconds since the start of the Epoch.
@@ -226,105 +238,105 @@
 
   // === Source Locations ===
 
-  /// \brief Cursor used to read source location entries.
+  /// Cursor used to read source location entries.
   llvm::BitstreamCursor SLocEntryCursor;
 
-  /// \brief The number of source location entries in this AST file.
+  /// The number of source location entries in this AST file.
   unsigned LocalNumSLocEntries = 0;
 
-  /// \brief The base ID in the source manager's view of this module.
+  /// The base ID in the source manager's view of this module.
   int SLocEntryBaseID = 0;
 
-  /// \brief The base offset in the source manager's view of this module.
+  /// The base offset in the source manager's view of this module.
   unsigned SLocEntryBaseOffset = 0;
 
-  /// \brief Offsets for all of the source location entries in the
+  /// Offsets for all of the source location entries in the
   /// AST file.
   const uint32_t *SLocEntryOffsets = nullptr;
 
-  /// \brief SLocEntries that we're going to preload.
+  /// SLocEntries that we're going to preload.
   SmallVector<uint64_t, 4> PreloadSLocEntries;
 
-  /// \brief Remapping table for source locations in this module.
+  /// Remapping table for source locations in this module.
   ContinuousRangeMap<uint32_t, int, 2> SLocRemap;
 
   // === Identifiers ===
 
-  /// \brief The number of identifiers in this AST file.
+  /// The number of identifiers in this AST file.
   unsigned LocalNumIdentifiers = 0;
 
-  /// \brief Offsets into the identifier table data.
+  /// Offsets into the identifier table data.
   ///
   /// This array is indexed by the identifier ID (-1), and provides
   /// the offset into IdentifierTableData where the string data is
   /// stored.
   const uint32_t *IdentifierOffsets = nullptr;
 
-  /// \brief Base identifier ID for identifiers local to this module.
+  /// Base identifier ID for identifiers local to this module.
   serialization::IdentID BaseIdentifierID = 0;
 
-  /// \brief Remapping table for identifier IDs in this module.
+  /// Remapping table for identifier IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> IdentifierRemap;
 
-  /// \brief Actual data for the on-disk hash table of identifiers.
+  /// Actual data for the on-disk hash table of identifiers.
   ///
   /// This pointer points into a memory buffer, where the on-disk hash
   /// table for identifiers actually lives.
   const char *IdentifierTableData = nullptr;
 
-  /// \brief A pointer to an on-disk hash table of opaque type
+  /// A pointer to an on-disk hash table of opaque type
   /// IdentifierHashTable.
   void *IdentifierLookupTable = nullptr;
 
-  /// \brief Offsets of identifiers that we're going to preload within
+  /// Offsets of identifiers that we're going to preload within
   /// IdentifierTableData.
   std::vector<unsigned> PreloadIdentifierOffsets;
 
   // === Macros ===
 
-  /// \brief The cursor to the start of the preprocessor block, which stores
+  /// The cursor to the start of the preprocessor block, which stores
   /// all of the macro definitions.
   llvm::BitstreamCursor MacroCursor;
 
-  /// \brief The number of macros in this AST file.
+  /// The number of macros in this AST file.
   unsigned LocalNumMacros = 0;
 
-  /// \brief Offsets of macros in the preprocessor block.
+  /// Offsets of macros in the preprocessor block.
   ///
   /// This array is indexed by the macro ID (-1), and provides
   /// the offset into the preprocessor block where macro definitions are
   /// stored.
   const uint32_t *MacroOffsets = nullptr;
 
-  /// \brief Base macro ID for macros local to this module.
+  /// Base macro ID for macros local to this module.
   serialization::MacroID BaseMacroID = 0;
 
-  /// \brief Remapping table for macro IDs in this module.
+  /// Remapping table for macro IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> MacroRemap;
 
-  /// \brief The offset of the start of the set of defined macros.
+  /// The offset of the start of the set of defined macros.
   uint64_t MacroStartOffset = 0;
 
   // === Detailed PreprocessingRecord ===
 
-  /// \brief The cursor to the start of the (optional) detailed preprocessing
+  /// The cursor to the start of the (optional) detailed preprocessing
   /// record block.
   llvm::BitstreamCursor PreprocessorDetailCursor;
 
-  /// \brief The offset of the start of the preprocessor detail cursor.
+  /// The offset of the start of the preprocessor detail cursor.
   uint64_t PreprocessorDetailStartOffset = 0;
 
-  /// \brief Base preprocessed entity ID for preprocessed entities local to
+  /// Base preprocessed entity ID for preprocessed entities local to
   /// this module.
   serialization::PreprocessedEntityID BasePreprocessedEntityID = 0;
 
-  /// \brief Remapping table for preprocessed entity IDs in this module.
+  /// Remapping table for preprocessed entity IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> PreprocessedEntityRemap;
 
   const PPEntityOffset *PreprocessedEntityOffsets = nullptr;
   unsigned NumPreprocessedEntities = 0;
 
-  /// \brief Base ID for preprocessed skipped ranges local to this module.
+  /// Base ID for preprocessed skipped ranges local to this module.
   unsigned BasePreprocessedSkippedRangeID = 0;
 
   const PPSkippedRange *PreprocessedSkippedRangeOffsets = nullptr;
@@ -332,53 +344,54 @@
 
   // === Header search information ===
 
-  /// \brief The number of local HeaderFileInfo structures.
+  /// The number of local HeaderFileInfo structures.
   unsigned LocalNumHeaderFileInfos = 0;
 
-  /// \brief Actual data for the on-disk hash table of header file
+  /// Actual data for the on-disk hash table of header file
   /// information.
   ///
   /// This pointer points into a memory buffer, where the on-disk hash
   /// table for header file information actually lives.
   const char *HeaderFileInfoTableData = nullptr;
 
-  /// \brief The on-disk hash table that contains information about each of
+  /// The on-disk hash table that contains information about each of
   /// the header files.
   void *HeaderFileInfoTable = nullptr;
 
-  // === Submodule information ===  
-  /// \brief The number of submodules in this module.
+  // === Submodule information ===
+
+  /// The number of submodules in this module.
   unsigned LocalNumSubmodules = 0;
-  
-  /// \brief Base submodule ID for submodules local to this module.
+
+  /// Base submodule ID for submodules local to this module.
   serialization::SubmoduleID BaseSubmoduleID = 0;
-  
-  /// \brief Remapping table for submodule IDs in this module.
+
+  /// Remapping table for submodule IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> SubmoduleRemap;
-  
+
   // === Selectors ===
 
-  /// \brief The number of selectors new to this file.
+  /// The number of selectors new to this file.
   ///
   /// This is the number of entries in SelectorOffsets.
   unsigned LocalNumSelectors = 0;
 
-  /// \brief Offsets into the selector lookup table's data array
+  /// Offsets into the selector lookup table's data array
   /// where each selector resides.
   const uint32_t *SelectorOffsets = nullptr;
 
-  /// \brief Base selector ID for selectors local to this module.
+  /// Base selector ID for selectors local to this module.
   serialization::SelectorID BaseSelectorID = 0;
 
-  /// \brief Remapping table for selector IDs in this module.
+  /// Remapping table for selector IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> SelectorRemap;
 
-  /// \brief A pointer to the character data that comprises the selector table
+  /// A pointer to the character data that comprises the selector table
   ///
   /// The SelectorOffsets table refers into this memory.
   const unsigned char *SelectorLookupTableData = nullptr;
 
-  /// \brief A pointer to an on-disk hash table of opaque type
+  /// A pointer to an on-disk hash table of opaque type
   /// ASTSelectorLookupTable.
   ///
   /// This hash table provides the IDs of all selectors, and the associated
@@ -392,20 +405,20 @@
   /// jump around with these in context.
   llvm::BitstreamCursor DeclsCursor;
 
-  /// \brief The number of declarations in this AST file.
+  /// The number of declarations in this AST file.
   unsigned LocalNumDecls = 0;
 
-  /// \brief Offset of each declaration within the bitstream, indexed
+  /// Offset of each declaration within the bitstream, indexed
   /// by the declaration ID (-1).
   const DeclOffset *DeclOffsets = nullptr;
 
-  /// \brief Base declaration ID for declarations local to this module.
+  /// Base declaration ID for declarations local to this module.
   serialization::DeclID BaseDeclID = 0;
 
-  /// \brief Remapping table for declaration IDs in this module.
+  /// Remapping table for declaration IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> DeclRemap;
 
-  /// \brief Mapping from the module files that this module file depends on
+  /// Mapping from the module files that this module file depends on
   /// to the base declaration ID for that module as it is understood within this
   /// module.
   ///
@@ -414,64 +427,64 @@
   /// as a local ID (for this module file).
   llvm::DenseMap<ModuleFile *, serialization::DeclID> GlobalToLocalDeclIDs;
 
-  /// \brief Array of file-level DeclIDs sorted by file.
+  /// Array of file-level DeclIDs sorted by file.
   const serialization::DeclID *FileSortedDecls = nullptr;
   unsigned NumFileSortedDecls = 0;
 
-  /// \brief Array of category list location information within this 
+  /// Array of category list location information within this
   /// module file, sorted by the definition ID.
   const serialization::ObjCCategoriesInfo *ObjCCategoriesMap = nullptr;
-  
-  /// \brief The number of redeclaration info entries in ObjCCategoriesMap.
+
+  /// The number of redeclaration info entries in ObjCCategoriesMap.
   unsigned LocalNumObjCCategoriesInMap = 0;
-  
-  /// \brief The Objective-C category lists for categories known to this
+
+  /// The Objective-C category lists for categories known to this
   /// module.
   SmallVector<uint64_t, 1> ObjCCategories;
 
   // === Types ===
 
-  /// \brief The number of types in this AST file.
+  /// The number of types in this AST file.
   unsigned LocalNumTypes = 0;
 
-  /// \brief Offset of each type within the bitstream, indexed by the
+  /// Offset of each type within the bitstream, indexed by the
   /// type ID, or the representation of a Type*.
   const uint32_t *TypeOffsets = nullptr;
 
-  /// \brief Base type ID for types local to this module as represented in
+  /// Base type ID for types local to this module as represented in
   /// the global type ID space.
   serialization::TypeID BaseTypeIndex = 0;
 
-  /// \brief Remapping table for type IDs in this module.
+  /// Remapping table for type IDs in this module.
   ContinuousRangeMap<uint32_t, int, 2> TypeRemap;
 
   // === Miscellaneous ===
 
-  /// \brief Diagnostic IDs and their mappings that the user changed.
+  /// Diagnostic IDs and their mappings that the user changed.
   SmallVector<uint64_t, 8> PragmaDiagMappings;
 
-  /// \brief List of modules which depend on this module
+  /// List of modules which depend on this module
   llvm::SetVector<ModuleFile *> ImportedBy;
 
-  /// \brief List of modules which this module depends on
+  /// List of modules which this module depends on
   llvm::SetVector<ModuleFile *> Imports;
 
-  /// \brief Determine whether this module was directly imported at
+  /// Determine whether this module was directly imported at
   /// any point during translation.
   bool isDirectlyImported() const { return DirectlyImported; }
 
-  /// \brief Is this a module file for a module (rather than a PCH or similar).
+  /// Is this a module file for a module (rather than a PCH or similar).
   bool isModule() const {
     return Kind == MK_ImplicitModule || Kind == MK_ExplicitModule ||
            Kind == MK_PrebuiltModule;
   }
 
-  /// \brief Dump debugging output for this module.
+  /// Dump debugging output for this module.
   void dump();
 };
 
-} // end namespace serialization
+} // namespace serialization
 
-} // end namespace clang
+} // namespace clang
 
-#endif
+#endif // LLVM_CLANG_SERIALIZATION_MODULE_H
diff --git a/linux-x64/clang/include/clang/Serialization/ModuleFileExtension.h b/linux-x64/clang/include/clang/Serialization/ModuleFileExtension.h
index f7bdcec..f70218e 100644
--- a/linux-x64/clang/include/clang/Serialization/ModuleFileExtension.h
+++ b/linux-x64/clang/include/clang/Serialization/ModuleFileExtension.h
@@ -26,7 +26,7 @@
 class ASTReader;
 class ASTWriter;
 class Sema;
-  
+
 namespace serialization {
   class ModuleFile;
 } // end namespace serialization
@@ -128,7 +128,7 @@
 /// Abstract base class that reads a module file extension block from
 /// a module file.
 ///
-/// Subclasses 
+/// Subclasses
 class ModuleFileExtensionReader {
   ModuleFileExtension *Extension;
 
diff --git a/linux-x64/clang/include/clang/Serialization/ModuleManager.h b/linux-x64/clang/include/clang/Serialization/ModuleManager.h
index 147a691..cfc9a2e 100644
--- a/linux-x64/clang/include/clang/Serialization/ModuleManager.h
+++ b/linux-x64/clang/include/clang/Serialization/ModuleManager.h
@@ -45,45 +45,45 @@
 
 namespace serialization {
 
-/// \brief Manages the set of modules loaded by an AST reader.
+/// Manages the set of modules loaded by an AST reader.
 class ModuleManager {
-  /// \brief The chain of AST files, in the order in which we started to load
+  /// The chain of AST files, in the order in which we started to load
   /// them (this order isn't really useful for anything).
   SmallVector<std::unique_ptr<ModuleFile>, 2> Chain;
 
-  /// \brief The chain of non-module PCH files. The first entry is the one named
+  /// The chain of non-module PCH files. The first entry is the one named
   /// by the user, the last one is the one that doesn't depend on anything
   /// further.
   SmallVector<ModuleFile *, 2> PCHChain;
 
-  // \brief The roots of the dependency DAG of AST files. This is used
+  // The roots of the dependency DAG of AST files. This is used
   // to implement short-circuiting logic when running DFS over the dependencies.
   SmallVector<ModuleFile *, 2> Roots;
 
-  /// \brief All loaded modules, indexed by name.
+  /// All loaded modules, indexed by name.
   llvm::DenseMap<const FileEntry *, ModuleFile *> Modules;
 
-  /// \brief FileManager that handles translating between filenames and
+  /// FileManager that handles translating between filenames and
   /// FileEntry *.
   FileManager &FileMgr;
 
   /// Cache of PCM files.
   IntrusiveRefCntPtr<MemoryBufferCache> PCMCache;
 
-  /// \brief Knows how to unwrap module containers.
+  /// Knows how to unwrap module containers.
   const PCHContainerReader &PCHContainerRdr;
 
-  /// \brief Preprocessor's HeaderSearchInfo containing the module map.
+  /// Preprocessor's HeaderSearchInfo containing the module map.
   const HeaderSearch &HeaderSearchInfo;
 
-  /// \brief A lookup of in-memory (virtual file) buffers
+  /// A lookup of in-memory (virtual file) buffers
   llvm::DenseMap<const FileEntry *, std::unique_ptr<llvm::MemoryBuffer>>
       InMemoryBuffers;
 
-  /// \brief The visitation order.
+  /// The visitation order.
   SmallVector<ModuleFile *, 4> VisitOrder;
-      
-  /// \brief The list of module files that both we and the global module index
+
+  /// The list of module files that both we and the global module index
   /// know about.
   ///
   /// Either the global index or the module manager may have modules that the
@@ -93,13 +93,13 @@
   /// known to the global index.
   SmallVector<ModuleFile *, 4> ModulesInCommonWithGlobalIndex;
 
-  /// \brief The global module index, if one is attached.
+  /// The global module index, if one is attached.
   ///
   /// The global module index will actually be owned by the ASTReader; this is
   /// just an non-owning pointer.
   GlobalModuleIndex *GlobalIndex = nullptr;
 
-  /// \brief State used by the "visit" operation to avoid malloc traffic in
+  /// State used by the "visit" operation to avoid malloc traffic in
   /// calls to visit().
   struct VisitState {
     explicit VisitState(unsigned N) : VisitNumber(N, 0) {
@@ -110,22 +110,22 @@
       delete NextState;
     }
 
-    /// \brief The stack used when marking the imports of a particular module
+    /// The stack used when marking the imports of a particular module
     /// as not-to-be-visited.
     SmallVector<ModuleFile *, 4> Stack;
 
-    /// \brief The visit number of each module file, which indicates when
+    /// The visit number of each module file, which indicates when
     /// this module file was last visited.
     SmallVector<unsigned, 4> VisitNumber;
 
-    /// \brief The next visit number to use to mark visited module files.
+    /// The next visit number to use to mark visited module files.
     unsigned NextVisitNumber = 1;
 
-    /// \brief The next visit state.
+    /// The next visit state.
     VisitState *NextState = nullptr;
   };
 
-  /// \brief The first visit() state in the chain.
+  /// The first visit() state in the chain.
   VisitState *FirstVisitState = nullptr;
 
   VisitState *allocateVisitState();
@@ -145,74 +145,74 @@
                          const HeaderSearch &HeaderSearchInfo);
   ~ModuleManager();
 
-  /// \brief Forward iterator to traverse all loaded modules.
+  /// Forward iterator to traverse all loaded modules.
   ModuleIterator begin() { return Chain.begin(); }
 
-  /// \brief Forward iterator end-point to traverse all loaded modules
+  /// Forward iterator end-point to traverse all loaded modules
   ModuleIterator end() { return Chain.end(); }
-  
-  /// \brief Const forward iterator to traverse all loaded modules.
+
+  /// Const forward iterator to traverse all loaded modules.
   ModuleConstIterator begin() const { return Chain.begin(); }
 
-  /// \brief Const forward iterator end-point to traverse all loaded modules
+  /// Const forward iterator end-point to traverse all loaded modules
   ModuleConstIterator end() const { return Chain.end(); }
-  
-  /// \brief Reverse iterator to traverse all loaded modules.
+
+  /// Reverse iterator to traverse all loaded modules.
   ModuleReverseIterator rbegin() { return Chain.rbegin(); }
 
-  /// \brief Reverse iterator end-point to traverse all loaded modules.
+  /// Reverse iterator end-point to traverse all loaded modules.
   ModuleReverseIterator rend() { return Chain.rend(); }
 
-  /// \brief A range covering the PCH and preamble module files loaded.
+  /// A range covering the PCH and preamble module files loaded.
   llvm::iterator_range<SmallVectorImpl<ModuleFile *>::const_iterator>
   pch_modules() const {
     return llvm::make_range(PCHChain.begin(), PCHChain.end());
   }
 
-  /// \brief Returns the primary module associated with the manager, that is,
+  /// Returns the primary module associated with the manager, that is,
   /// the first module loaded
   ModuleFile &getPrimaryModule() { return *Chain[0]; }
-  
-  /// \brief Returns the primary module associated with the manager, that is,
+
+  /// Returns the primary module associated with the manager, that is,
   /// the first module loaded.
   ModuleFile &getPrimaryModule() const { return *Chain[0]; }
-  
-  /// \brief Returns the module associated with the given index
+
+  /// Returns the module associated with the given index
   ModuleFile &operator[](unsigned Index) const { return *Chain[Index]; }
-  
-  /// \brief Returns the module associated with the given file name.
+
+  /// Returns the module associated with the given file name.
   ModuleFile *lookupByFileName(StringRef FileName) const;
 
-  /// \brief Returns the module associated with the given module name.
+  /// Returns the module associated with the given module name.
   ModuleFile *lookupByModuleName(StringRef ModName) const;
 
-  /// \brief Returns the module associated with the given module file.
+  /// Returns the module associated with the given module file.
   ModuleFile *lookup(const FileEntry *File) const;
 
-  /// \brief Returns the in-memory (virtual file) buffer with the given name
+  /// Returns the in-memory (virtual file) buffer with the given name
   std::unique_ptr<llvm::MemoryBuffer> lookupBuffer(StringRef Name);
-  
-  /// \brief Number of modules loaded
+
+  /// Number of modules loaded
   unsigned size() const { return Chain.size(); }
 
-  /// \brief The result of attempting to add a new module.
+  /// The result of attempting to add a new module.
   enum AddModuleResult {
-    /// \brief The module file had already been loaded.
+    /// The module file had already been loaded.
     AlreadyLoaded,
 
-    /// \brief The module file was just loaded in response to this call.
+    /// The module file was just loaded in response to this call.
     NewlyLoaded,
 
-    /// \brief The module file is missing.
+    /// The module file is missing.
     Missing,
 
-    /// \brief The module file is out-of-date.
+    /// The module file is out-of-date.
     OutOfDate
   };
 
   using ASTFileSignatureReader = ASTFileSignature (*)(StringRef);
 
-  /// \brief Attempts to create a new module and add it to the list of known
+  /// Attempts to create a new module and add it to the list of known
   /// modules.
   ///
   /// \param FileName The file name of the module to be loaded.
@@ -255,23 +255,23 @@
                             ModuleFile *&Module,
                             std::string &ErrorStr);
 
-  /// \brief Remove the modules starting from First (to the end).
+  /// Remove the modules starting from First (to the end).
   void removeModules(ModuleIterator First,
                      llvm::SmallPtrSetImpl<ModuleFile *> &LoadedSuccessfully,
                      ModuleMap *modMap);
 
-  /// \brief Add an in-memory buffer the list of known buffers
+  /// Add an in-memory buffer the list of known buffers
   void addInMemoryBuffer(StringRef FileName,
                          std::unique_ptr<llvm::MemoryBuffer> Buffer);
 
-  /// \brief Set the global module index.
+  /// Set the global module index.
   void setGlobalIndex(GlobalModuleIndex *Index);
 
-  /// \brief Notification from the AST reader that the given module file
+  /// Notification from the AST reader that the given module file
   /// has been "accepted", and will not (can not) be unloaded.
   void moduleFileAccepted(ModuleFile *MF);
 
-  /// \brief Visit each of the modules.
+  /// Visit each of the modules.
   ///
   /// This routine visits each of the modules, starting with the
   /// "root" modules that no other loaded modules depend on, and
@@ -293,7 +293,7 @@
   void visit(llvm::function_ref<bool(ModuleFile &M)> Visitor,
              llvm::SmallPtrSetImpl<ModuleFile *> *ModuleFilesHit = nullptr);
 
-  /// \brief Attempt to resolve the given module file name to a file entry.
+  /// Attempt to resolve the given module file name to a file entry.
   ///
   /// \param FileName The name of the module file.
   ///
@@ -315,7 +315,7 @@
                         time_t ExpectedModTime,
                         const FileEntry *&File);
 
-  /// \brief View the graphviz representation of the module graph.
+  /// View the graphviz representation of the module graph.
   void viewGraph();
 
   MemoryBufferCache &getPCMCache() const { return *PCMCache; }
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
index 74ba65a..71ccfe7 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/Checkers.inc
@@ -97,6 +97,7 @@
 CHECKER("apiModeling.google.GTest", GTestChecker, GTestChecker.cpp, "Model gtest assertion APIs", -1, true)
 CHECKER("alpha.security.taint.TaintPropagation", GenericTaintChecker, GenericTaintChecker.cpp, "Generate taint information used by other checkers", -1, true)
 CHECKER("alpha.core.IdenticalExpr", IdenticalExprChecker, IdenticalExprChecker.cpp, "Warn about unintended use of identical expressions in operators", -1, true)
+CHECKER("cplusplus.InnerPointer", InnerPointerChecker, InnerPointerChecker.cpp, "Check for inner pointers of C++ containers used after re/deallocation", -1, false)
 CHECKER("alpha.osx.cocoa.InstanceVariableInvalidation", InstanceVariableInvalidation, IvarInvalidationChecker.cpp, "Check that the invalidatable instance variables are invalidated in the methods annotated with objc_instance_variable_invalidator", -1, true)
 CHECKER("alpha.cplusplus.IteratorRange", IteratorRangeChecker, IteratorChecker.cpp, "Check for iterators used outside their valid ranges", -1, true)
 CHECKER("llvm.Conventions", LLVMConventionsChecker, LLVMConventionsChecker.cpp, "Check code for LLVM codebase conventions", -1, false)
@@ -147,6 +148,7 @@
 CHECKER("osx.cocoa.RetainCount", RetainCountChecker, RetainCountChecker.cpp, "Check for leaks and improper reference count management", -1, false)
 CHECKER("alpha.security.ReturnPtrRange", ReturnPointerRangeChecker, ReturnPointerRangeChecker.cpp, "Check for an out-of-bound pointer being returned to callers", -1, true)
 CHECKER("core.uninitialized.UndefReturn", ReturnUndefChecker, ReturnUndefChecker.cpp, "Check for uninitialized values being returned to the caller", -1, false)
+CHECKER("osx.cocoa.RunLoopAutoreleaseLeak", RunLoopAutoreleaseLeakChecker, RunLoopAutoreleaseLeakChecker.cpp, "Check for leaked memory in autorelease pools that will never be drained", -1, false)
 CHECKER("alpha.unix.SimpleStream", SimpleStreamChecker, SimpleStreamChecker.cpp, "Check for misuses of stream APIs", -1, true)
 CHECKER("alpha.core.SizeofPtr", SizeofPointerChecker, CheckSizeofPointer.cpp, "Warn about unintended use of sizeof() on pointer expressions", -1, true)
 CHECKER("alpha.core.StackAddressAsyncEscape", StackAddrAsyncEscapeChecker, StackAddrEscapeChecker.cpp, "Check that addresses to stack memory do not escape the function", -1, true)
@@ -164,6 +166,7 @@
 CHECKER("core.uninitialized.ArraySubscript", UndefinedArraySubscriptChecker, UndefinedArraySubscriptChecker.cpp, "Check for uninitialized values used as array subscripts", -1, false)
 CHECKER("core.uninitialized.Assign", UndefinedAssignmentChecker, UndefinedAssignmentChecker.cpp, "Check for assigning uninitialized values", -1, false)
 CHECKER("valist.Uninitialized", UninitializedChecker, ValistChecker.cpp, "Check for usages of uninitialized (or already released) va_lists.", -1, false)
+CHECKER("alpha.cplusplus.UninitializedObject", UninitializedObjectChecker, UninitializedObjectChecker.cpp, "Reports uninitialized fields after object construction", -1, true)
 CHECKER("unix.API", UnixAPIMisuseChecker, UnixAPIChecker.cpp, "Check calls to various UNIX/Posix functions", -1, false)
 CHECKER("optin.portability.UnixAPI", UnixAPIPortabilityChecker, UnixAPIChecker.cpp, "Finds implementation-defined behavior in UNIX/Posix functions", -1, false)
 CHECKER("alpha.deadcode.UnreachableCode", UnreachableCodeChecker, UnreachableCodeChecker.cpp, "Check unreachable code", -1, true)
@@ -172,6 +175,9 @@
 CHECKER("osx.cocoa.VariadicMethodTypes", VariadicMethodTypeChecker, BasicObjCFoundationChecks.cpp, "Check for passing non-Objective-C types to variadic collection initialization methods that expect only Objective-C types", -1, false)
 CHECKER("unix.Vfork", VforkChecker, VforkChecker.cpp, "Check for proper usage of vfork", -1, false)
 CHECKER("optin.cplusplus.VirtualCall", VirtualCallChecker, VirtualCallChecker.cpp, "Check virtual function calls during construction or destruction", -1, false)
+CHECKER("security.insecureAPI.bcmp", bcmp, CheckSecuritySyntaxOnly.cpp, "Warn on uses of the 'bcmp' function", -1, false)
+CHECKER("security.insecureAPI.bcopy", bcopy, CheckSecuritySyntaxOnly.cpp, "Warn on uses of the 'bcopy' function", -1, false)
+CHECKER("security.insecureAPI.bzero", bzero, CheckSecuritySyntaxOnly.cpp, "Warn on uses of the 'bzero' function", -1, false)
 CHECKER("security.insecureAPI.getpw", getpw, CheckSecuritySyntaxOnly.cpp, "Warn on uses of the 'getpw' function", -1, false)
 CHECKER("security.insecureAPI.gets", gets, CheckSecuritySyntaxOnly.cpp, "Warn on uses of the 'gets' function", -1, false)
 CHECKER("security.insecureAPI.mkstemp", mkstemp, CheckSecuritySyntaxOnly.cpp, "Warn when 'mkstemp' is passed fewer than 6 X's in the format string", -1, false)
@@ -183,7 +189,7 @@
 
 
 #ifdef GET_MEMBER_ARRAYS
-static const short SubPackageArray0[] = { 3, 17, 21, 31, 39, 23, 1, -1 };
+static const short SubPackageArray0[] = { 3, 17, 22, 32, 40, 24, 1, -1 };
 static const short SubPackageArray1[] = { 2, -1 };
 static const short CheckerArray2[] = { 28, -1 };
 static const short SubPackageArray3[] = { 4, 6, 7, 8, 11, 10, 12, 13, 14, 5, 16, 9, 15, -1 };
@@ -195,165 +201,171 @@
 static const short CheckerArray9[] = { 39, -1 };
 static const short CheckerArray10[] = { 44, -1 };
 static const short CheckerArray11[] = { 49, -1 };
-static const short CheckerArray12[] = { 94, -1 };
-static const short CheckerArray13[] = { 95, -1 };
-static const short CheckerArray14[] = { 101, -1 };
-static const short CheckerArray15[] = { 102, -1 };
-static const short CheckerArray16[] = { 107, -1 };
-static const short SubPackageArray17[] = { 18, 19, 20, -1 };
+static const short CheckerArray12[] = { 95, -1 };
+static const short CheckerArray13[] = { 96, -1 };
+static const short CheckerArray14[] = { 103, -1 };
+static const short CheckerArray15[] = { 104, -1 };
+static const short CheckerArray16[] = { 109, -1 };
+static const short SubPackageArray17[] = { 18, 19, 20, 21, -1 };
 static const short CheckerArray18[] = { 33, -1 };
-static const short CheckerArray19[] = { 51, -1 };
-static const short CheckerArray20[] = { 62, -1 };
-static const short SubPackageArray21[] = { 22, -1 };
-static const short CheckerArray22[] = { 119, -1 };
-static const short SubPackageArray23[] = { 24, -1 };
-static const short SubPackageArray24[] = { 29, 27, 28, 25, 26, -1 };
-static const short CheckerArray25[] = { 35, -1 };
-static const short CheckerArray26[] = { 36, -1 };
-static const short CheckerArray27[] = { 50, -1 };
-static const short CheckerArray28[] = { 61, -1 };
-static const short SubPackageArray29[] = { 30, -1 };
-static const short CheckerArray30[] = { 93, -1 };
-static const short SubPackageArray31[] = { 37, 32, 33, 36, 34, 35, -1 };
-static const short CheckerArray32[] = { 2, -1 };
-static const short CheckerArray33[] = { 3, -1 };
-static const short CheckerArray34[] = { 58, -1 };
-static const short CheckerArray35[] = { 63, -1 };
-static const short CheckerArray36[] = { 98, -1 };
-static const short SubPackageArray37[] = { 38, -1 };
-static const short CheckerArray38[] = { 48, -1 };
-static const short SubPackageArray39[] = { 45, 41, 42, 44, 43, 40, -1 };
-static const short CheckerArray40[] = { 5, -1 };
-static const short CheckerArray41[] = { 26, -1 };
-static const short CheckerArray42[] = { 96, -1 };
-static const short CheckerArray43[] = { 100, -1 };
-static const short CheckerArray44[] = { 105, -1 };
-static const short SubPackageArray45[] = { 48, 46, 47, -1 };
-static const short CheckerArray46[] = { 13, -1 };
-static const short CheckerArray47[] = { 14, -1 };
-static const short CheckerArray48[] = { 16, -1 };
-static const short SubPackageArray49[] = { 51, 50, -1 };
-static const short CheckerArray50[] = { 109, -1 };
-static const short SubPackageArray51[] = { 52, -1 };
-static const short CheckerArray52[] = { 47, -1 };
-static const short SubPackageArray53[] = { 63, 66, 59, 54, 57, 62, 55, 61, 60, 56, 58, -1 };
-static const short CheckerArray54[] = { 19, -1 };
-static const short CheckerArray55[] = { 37, -1 };
-static const short CheckerArray56[] = { 40, -1 };
-static const short CheckerArray57[] = { 71, -1 };
+static const short CheckerArray19[] = { 52, -1 };
+static const short CheckerArray20[] = { 63, -1 };
+static const short CheckerArray21[] = { 119, -1 };
+static const short SubPackageArray22[] = { 23, -1 };
+static const short CheckerArray23[] = { 122, -1 };
+static const short SubPackageArray24[] = { 25, -1 };
+static const short SubPackageArray25[] = { 30, 28, 29, 26, 27, -1 };
+static const short CheckerArray26[] = { 35, -1 };
+static const short CheckerArray27[] = { 36, -1 };
+static const short CheckerArray28[] = { 51, -1 };
+static const short CheckerArray29[] = { 62, -1 };
+static const short SubPackageArray30[] = { 31, -1 };
+static const short CheckerArray31[] = { 94, -1 };
+static const short SubPackageArray32[] = { 38, 33, 34, 37, 35, 36, -1 };
+static const short CheckerArray33[] = { 2, -1 };
+static const short CheckerArray34[] = { 3, -1 };
+static const short CheckerArray35[] = { 59, -1 };
+static const short CheckerArray36[] = { 64, -1 };
+static const short CheckerArray37[] = { 99, -1 };
+static const short SubPackageArray38[] = { 39, -1 };
+static const short CheckerArray39[] = { 48, -1 };
+static const short SubPackageArray40[] = { 46, 42, 43, 45, 44, 41, -1 };
+static const short CheckerArray41[] = { 5, -1 };
+static const short CheckerArray42[] = { 26, -1 };
+static const short CheckerArray43[] = { 97, -1 };
+static const short CheckerArray44[] = { 102, -1 };
+static const short CheckerArray45[] = { 107, -1 };
+static const short SubPackageArray46[] = { 49, 47, 48, -1 };
+static const short CheckerArray47[] = { 13, -1 };
+static const short CheckerArray48[] = { 14, -1 };
+static const short CheckerArray49[] = { 16, -1 };
+static const short SubPackageArray50[] = { 52, 51, -1 };
+static const short CheckerArray51[] = { 111, -1 };
+static const short SubPackageArray52[] = { 53, -1 };
+static const short CheckerArray53[] = { 47, -1 };
+static const short SubPackageArray54[] = { 64, 67, 60, 55, 58, 63, 56, 62, 61, 57, 59, -1 };
+static const short CheckerArray55[] = { 19, -1 };
+static const short CheckerArray56[] = { 37, -1 };
+static const short CheckerArray57[] = { 40, -1 };
 static const short CheckerArray58[] = { 72, -1 };
-static const short CheckerArray59[] = { 34, -1 };
-static const short CheckerArray60[] = { 103, -1 };
-static const short CheckerArray61[] = { 113, -1 };
-static const short CheckerArray62[] = { 121, -1 };
-static const short SubPackageArray63[] = { 65, 64, -1 };
-static const short CheckerArray64[] = { 7, -1 };
-static const short CheckerArray65[] = { 69, -1 };
-static const short SubPackageArray66[] = { 67, 68, 69, 70, 71, -1 };
-static const short CheckerArray67[] = { 114, -1 };
-static const short CheckerArray68[] = { 115, -1 };
-static const short CheckerArray69[] = { 111, -1 };
-static const short CheckerArray70[] = { 112, -1 };
-static const short CheckerArray71[] = { 99, -1 };
-static const short SubPackageArray72[] = { 73, 74, 75, -1 };
-static const short CheckerArray73[] = { 66, -1 };
-static const short CheckerArray74[] = { 67, -1 };
-static const short CheckerArray75[] = { 18, -1 };
-static const short SubPackageArray76[] = { 77, -1 };
-static const short CheckerArray77[] = { 32, -1 };
-static const short SubPackageArray78[] = { 79, 84, 85, 90, 81, 91, 82, 80, 86, 83, 88, 89, 87, 92, -1 };
-static const short CheckerArray79[] = { 0, -1 };
-static const short CheckerArray80[] = { 29, -1 };
-static const short CheckerArray81[] = { 9, -1 };
-static const short CheckerArray82[] = { 22, -1 };
-static const short CheckerArray83[] = { 21, -1 };
-static const short CheckerArray84[] = { 38, -1 };
-static const short CheckerArray85[] = { 53, -1 };
-static const short CheckerArray86[] = { 108, -1 };
-static const short CheckerArray87[] = { 43, -1 };
-static const short CheckerArray88[] = { 1, -1 };
-static const short CheckerArray89[] = { 106, -1 };
-static const short CheckerArray90[] = { 10, -1 };
-static const short CheckerArray91[] = { 23, -1 };
-static const short CheckerArray92[] = { 42, -1 };
-static const short SubPackageArray93[] = { 94, -1 };
-static const short CheckerArray94[] = { 52, -1 };
-static const short SubPackageArray95[] = { 96, 97, 98, 99, 100, -1 };
-static const short CheckerArray96[] = { 73, -1 };
-static const short CheckerArray97[] = { 74, -1 };
-static const short CheckerArray98[] = { 75, -1 };
-static const short CheckerArray99[] = { 76, -1 };
-static const short CheckerArray100[] = { 77, -1 };
-static const short SubPackageArray101[] = { 114, 102, 111, 106, 104, -1 };
-static const short SubPackageArray102[] = { 103, -1 };
-static const short CheckerArray103[] = { 124, -1 };
+static const short CheckerArray59[] = { 73, -1 };
+static const short CheckerArray60[] = { 34, -1 };
+static const short CheckerArray61[] = { 105, -1 };
+static const short CheckerArray62[] = { 115, -1 };
+static const short CheckerArray63[] = { 124, -1 };
+static const short SubPackageArray64[] = { 66, 65, -1 };
+static const short CheckerArray65[] = { 7, -1 };
+static const short CheckerArray66[] = { 70, -1 };
+static const short SubPackageArray67[] = { 68, 69, 70, 71, 72, -1 };
+static const short CheckerArray68[] = { 116, -1 };
+static const short CheckerArray69[] = { 117, -1 };
+static const short CheckerArray70[] = { 113, -1 };
+static const short CheckerArray71[] = { 114, -1 };
+static const short CheckerArray72[] = { 100, -1 };
+static const short SubPackageArray73[] = { 74, 75, 76, 77, -1 };
+static const short CheckerArray74[] = { 50, -1 };
+static const short CheckerArray75[] = { 67, -1 };
+static const short CheckerArray76[] = { 68, -1 };
+static const short CheckerArray77[] = { 18, -1 };
+static const short SubPackageArray78[] = { 79, -1 };
+static const short CheckerArray79[] = { 32, -1 };
+static const short SubPackageArray80[] = { 81, 86, 87, 92, 83, 93, 84, 82, 88, 85, 90, 91, 89, 94, -1 };
+static const short CheckerArray81[] = { 0, -1 };
+static const short CheckerArray82[] = { 29, -1 };
+static const short CheckerArray83[] = { 9, -1 };
+static const short CheckerArray84[] = { 22, -1 };
+static const short CheckerArray85[] = { 21, -1 };
+static const short CheckerArray86[] = { 38, -1 };
+static const short CheckerArray87[] = { 54, -1 };
+static const short CheckerArray88[] = { 110, -1 };
+static const short CheckerArray89[] = { 43, -1 };
+static const short CheckerArray90[] = { 1, -1 };
+static const short CheckerArray91[] = { 108, -1 };
+static const short CheckerArray92[] = { 10, -1 };
+static const short CheckerArray93[] = { 23, -1 };
+static const short CheckerArray94[] = { 42, -1 };
+static const short SubPackageArray95[] = { 96, -1 };
+static const short CheckerArray96[] = { 53, -1 };
+static const short SubPackageArray97[] = { 98, 99, 100, 101, 102, -1 };
+static const short CheckerArray98[] = { 74, -1 };
+static const short CheckerArray99[] = { 75, -1 };
+static const short CheckerArray100[] = { 76, -1 };
+static const short CheckerArray101[] = { 77, -1 };
+static const short CheckerArray102[] = { 78, -1 };
+static const short SubPackageArray103[] = { 116, 104, 113, 108, 106, -1 };
 static const short SubPackageArray104[] = { 105, -1 };
-static const short CheckerArray105[] = { 54, -1 };
+static const short CheckerArray105[] = { 127, -1 };
 static const short SubPackageArray106[] = { 107, -1 };
-static const short SubPackageArray107[] = { 108, -1 };
-static const short SubPackageArray108[] = { 110, 109, -1 };
-static const short CheckerArray109[] = { 41, -1 };
-static const short CheckerArray110[] = { 70, -1 };
-static const short SubPackageArray111[] = { 113, 112, -1 };
-static const short CheckerArray112[] = { 46, -1 };
-static const short CheckerArray113[] = { 92, -1 };
-static const short SubPackageArray114[] = { 115, -1 };
-static const short CheckerArray115[] = { 118, -1 };
-static const short SubPackageArray116[] = { 121, 139, 118, 117, 120, 119, -1 };
-static const short CheckerArray117[] = { 56, -1 };
-static const short CheckerArray118[] = { 78, -1 };
-static const short CheckerArray119[] = { 87, -1 };
-static const short CheckerArray120[] = { 55, -1 };
-static const short SubPackageArray121[] = { 122, 131, 124, 138, 129, 126, 137, 135, 127, 132, 128, 130, 134, 133, 125, 136, 123, -1 };
-static const short CheckerArray122[] = { 79, -1 };
-static const short CheckerArray123[] = { 4, -1 };
-static const short CheckerArray124[] = { 27, -1 };
-static const short CheckerArray125[] = { 82, -1 };
-static const short CheckerArray126[] = { 85, -1 };
-static const short CheckerArray127[] = { 84, -1 };
-static const short CheckerArray128[] = { 89, -1 };
-static const short CheckerArray129[] = { 64, -1 };
-static const short CheckerArray130[] = { 65, -1 };
-static const short CheckerArray131[] = { 68, -1 };
-static const short CheckerArray132[] = { 86, -1 };
-static const short CheckerArray133[] = { 83, -1 };
-static const short CheckerArray134[] = { 97, -1 };
-static const short CheckerArray135[] = { 88, -1 };
-static const short CheckerArray136[] = { 90, -1 };
-static const short CheckerArray137[] = { 91, -1 };
-static const short CheckerArray138[] = { 122, -1 };
-static const short SubPackageArray139[] = { 143, 141, 142, 140, -1 };
-static const short CheckerArray140[] = { 8, -1 };
-static const short CheckerArray141[] = { 11, -1 };
-static const short CheckerArray142[] = { 12, -1 };
-static const short SubPackageArray143[] = { 145, 144, -1 };
-static const short CheckerArray144[] = { 81, -1 };
-static const short CheckerArray145[] = { 80, -1 };
+static const short CheckerArray107[] = { 55, -1 };
+static const short SubPackageArray108[] = { 109, -1 };
+static const short SubPackageArray109[] = { 110, -1 };
+static const short SubPackageArray110[] = { 112, 111, -1 };
+static const short CheckerArray111[] = { 41, -1 };
+static const short CheckerArray112[] = { 71, -1 };
+static const short SubPackageArray113[] = { 115, 114, -1 };
+static const short CheckerArray114[] = { 46, -1 };
+static const short CheckerArray115[] = { 93, -1 };
+static const short SubPackageArray116[] = { 117, -1 };
+static const short CheckerArray117[] = { 121, -1 };
+static const short SubPackageArray118[] = { 123, 142, 120, 119, 122, 121, -1 };
+static const short CheckerArray119[] = { 57, -1 };
+static const short CheckerArray120[] = { 79, -1 };
+static const short CheckerArray121[] = { 88, -1 };
+static const short CheckerArray122[] = { 56, -1 };
+static const short SubPackageArray123[] = { 137, 124, 133, 126, 141, 131, 128, 140, 138, 129, 134, 130, 132, 136, 135, 127, 139, 125, -1 };
+static const short CheckerArray124[] = { 80, -1 };
+static const short CheckerArray125[] = { 4, -1 };
+static const short CheckerArray126[] = { 27, -1 };
+static const short CheckerArray127[] = { 83, -1 };
+static const short CheckerArray128[] = { 86, -1 };
+static const short CheckerArray129[] = { 85, -1 };
+static const short CheckerArray130[] = { 90, -1 };
+static const short CheckerArray131[] = { 65, -1 };
+static const short CheckerArray132[] = { 66, -1 };
+static const short CheckerArray133[] = { 69, -1 };
+static const short CheckerArray134[] = { 87, -1 };
+static const short CheckerArray135[] = { 84, -1 };
+static const short CheckerArray136[] = { 98, -1 };
+static const short CheckerArray137[] = { 101, -1 };
+static const short CheckerArray138[] = { 89, -1 };
+static const short CheckerArray139[] = { 91, -1 };
+static const short CheckerArray140[] = { 92, -1 };
+static const short CheckerArray141[] = { 125, -1 };
+static const short SubPackageArray142[] = { 146, 144, 145, 143, -1 };
+static const short CheckerArray143[] = { 8, -1 };
+static const short CheckerArray144[] = { 11, -1 };
+static const short CheckerArray145[] = { 12, -1 };
 static const short SubPackageArray146[] = { 148, 147, -1 };
-static const short CheckerArray147[] = { 45, -1 };
-static const short SubPackageArray148[] = { 151, 150, 153, 152, 154, 155, 156, 149, -1 };
-static const short CheckerArray149[] = { 110, -1 };
-static const short CheckerArray150[] = { 125, -1 };
-static const short CheckerArray151[] = { 126, -1 };
-static const short CheckerArray152[] = { 127, -1 };
+static const short CheckerArray147[] = { 82, -1 };
+static const short CheckerArray148[] = { 81, -1 };
+static const short SubPackageArray149[] = { 151, 150, -1 };
+static const short CheckerArray150[] = { 45, -1 };
+static const short SubPackageArray151[] = { 153, 154, 155, 157, 156, 159, 158, 160, 161, 162, 152, -1 };
+static const short CheckerArray152[] = { 112, -1 };
 static const short CheckerArray153[] = { 128, -1 };
 static const short CheckerArray154[] = { 129, -1 };
 static const short CheckerArray155[] = { 130, -1 };
 static const short CheckerArray156[] = { 131, -1 };
-static const short SubPackageArray157[] = { 164, 158, 159, 160, 161, 163, 162, -1 };
-static const short CheckerArray158[] = { 117, -1 };
-static const short CheckerArray159[] = { 57, -1 };
-static const short CheckerArray160[] = { 59, -1 };
-static const short CheckerArray161[] = { 60, -1 };
-static const short CheckerArray162[] = { 104, -1 };
-static const short CheckerArray163[] = { 123, -1 };
-static const short SubPackageArray164[] = { 166, 165, -1 };
-static const short CheckerArray165[] = { 17, -1 };
-static const short CheckerArray166[] = { 15, -1 };
-static const short SubPackageArray167[] = { 169, 170, 168, -1 };
-static const short CheckerArray168[] = { 31, -1 };
-static const short CheckerArray169[] = { 116, -1 };
-static const short CheckerArray170[] = { 120, -1 };
+static const short CheckerArray157[] = { 132, -1 };
+static const short CheckerArray158[] = { 133, -1 };
+static const short CheckerArray159[] = { 134, -1 };
+static const short CheckerArray160[] = { 135, -1 };
+static const short CheckerArray161[] = { 136, -1 };
+static const short CheckerArray162[] = { 137, -1 };
+static const short SubPackageArray163[] = { 170, 164, 165, 166, 167, 169, 168, -1 };
+static const short CheckerArray164[] = { 120, -1 };
+static const short CheckerArray165[] = { 58, -1 };
+static const short CheckerArray166[] = { 60, -1 };
+static const short CheckerArray167[] = { 61, -1 };
+static const short CheckerArray168[] = { 106, -1 };
+static const short CheckerArray169[] = { 126, -1 };
+static const short SubPackageArray170[] = { 172, 171, -1 };
+static const short CheckerArray171[] = { 17, -1 };
+static const short CheckerArray172[] = { 15, -1 };
+static const short SubPackageArray173[] = { 175, 176, 174, -1 };
+static const short CheckerArray174[] = { 31, -1 };
+static const short CheckerArray175[] = { 118, -1 };
+static const short CheckerArray176[] = { 123, -1 };
 #endif // GET_MEMBER_ARRAYS
 
 
@@ -379,155 +391,161 @@
   { "alpha.cplusplus.DeleteWithNonVirtualDtor",                       CheckerArray18, 0, false },
   { "alpha.cplusplus.IteratorRange",                                  CheckerArray19, 0, false },
   { "alpha.cplusplus.MisusedMovedObject",                             CheckerArray20, 0, false },
-  { "alpha.deadcode",                                                 0, SubPackageArray21, true },
-  { "alpha.deadcode.UnreachableCode",                                 CheckerArray22, 0, false },
-  { "alpha.osx",                                                      0, SubPackageArray23, true },
-  { "alpha.osx.cocoa",                                                0, SubPackageArray24, true },
-  { "alpha.osx.cocoa.DirectIvarAssignment",                           CheckerArray25, 0, false },
-  { "alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions",      CheckerArray26, 0, false },
-  { "alpha.osx.cocoa.InstanceVariableInvalidation",                   CheckerArray27, 0, false },
-  { "alpha.osx.cocoa.MissingInvalidationMethod",                      CheckerArray28, 0, false },
-  { "alpha.osx.cocoa.localizability",                                 0, SubPackageArray29, true },
-  { "alpha.osx.cocoa.localizability.PluralMisuseChecker",             CheckerArray30, 0, false },
-  { "alpha.security",                                                 0, SubPackageArray31, true },
-  { "alpha.security.ArrayBound",                                      CheckerArray32, 0, false },
-  { "alpha.security.ArrayBoundV2",                                    CheckerArray33, 0, false },
-  { "alpha.security.MallocOverflow",                                  CheckerArray34, 0, false },
-  { "alpha.security.MmapWriteExec",                                   CheckerArray35, 0, false },
-  { "alpha.security.ReturnPtrRange",                                  CheckerArray36, 0, false },
-  { "alpha.security.taint",                                           0, SubPackageArray37, true },
-  { "alpha.security.taint.TaintPropagation",                          CheckerArray38, 0, false },
-  { "alpha.unix",                                                     0, SubPackageArray39, true },
-  { "alpha.unix.BlockInCriticalSection",                              CheckerArray40, 0, false },
-  { "alpha.unix.Chroot",                                              CheckerArray41, 0, false },
-  { "alpha.unix.PthreadLock",                                         CheckerArray42, 0, false },
-  { "alpha.unix.SimpleStream",                                        CheckerArray43, 0, false },
-  { "alpha.unix.Stream",                                              CheckerArray44, 0, false },
-  { "alpha.unix.cstring",                                             0, SubPackageArray45, true },
-  { "alpha.unix.cstring.BufferOverlap",                               CheckerArray46, 0, false },
-  { "alpha.unix.cstring.NotNullTerminated",                           CheckerArray47, 0, false },
-  { "alpha.unix.cstring.OutOfBounds",                                 CheckerArray48, 0, false },
-  { "apiModeling",                                                    0, SubPackageArray49, true },
-  { "apiModeling.TrustNonnull",                                       CheckerArray50, 0, false },
-  { "apiModeling.google",                                             0, SubPackageArray51, true },
-  { "apiModeling.google.GTest",                                       CheckerArray52, 0, false },
-  { "core",                                                           0, SubPackageArray53, false },
-  { "core.CallAndMessage",                                            CheckerArray54, 0, false },
-  { "core.DivideZero",                                                CheckerArray55, 0, false },
-  { "core.DynamicTypePropagation",                                    CheckerArray56, 0, false },
-  { "core.NonNullParamChecker",                                       CheckerArray57, 0, false },
-  { "core.NonnilStringConstants",                                     CheckerArray58, 0, false },
-  { "core.NullDereference",                                           CheckerArray59, 0, false },
-  { "core.StackAddressEscape",                                        CheckerArray60, 0, false },
-  { "core.UndefinedBinaryOperatorResult",                             CheckerArray61, 0, false },
-  { "core.VLASize",                                                   CheckerArray62, 0, false },
-  { "core.builtin",                                                   0, SubPackageArray63, false },
-  { "core.builtin.BuiltinFunctions",                                  CheckerArray64, 0, false },
-  { "core.builtin.NoReturnFunctions",                                 CheckerArray65, 0, false },
-  { "core.uninitialized",                                             0, SubPackageArray66, false },
-  { "core.uninitialized.ArraySubscript",                              CheckerArray67, 0, false },
-  { "core.uninitialized.Assign",                                      CheckerArray68, 0, false },
-  { "core.uninitialized.Branch",                                      CheckerArray69, 0, false },
-  { "core.uninitialized.CapturedBlockVariable",                       CheckerArray70, 0, false },
-  { "core.uninitialized.UndefReturn",                                 CheckerArray71, 0, false },
-  { "cplusplus",                                                      0, SubPackageArray72, false },
-  { "cplusplus.NewDelete",                                            CheckerArray73, 0, false },
-  { "cplusplus.NewDeleteLeaks",                                       CheckerArray74, 0, false },
-  { "cplusplus.SelfAssignment",                                       CheckerArray75, 0, false },
-  { "deadcode",                                                       0, SubPackageArray76, false },
-  { "deadcode.DeadStores",                                            CheckerArray77, 0, false },
-  { "debug",                                                          0, SubPackageArray78, false },
-  { "debug.AnalysisOrder",                                            CheckerArray79, 0, false },
-  { "debug.ConfigDumper",                                             CheckerArray80, 0, false },
-  { "debug.DumpCFG",                                                  CheckerArray81, 0, false },
-  { "debug.DumpCallGraph",                                            CheckerArray82, 0, false },
-  { "debug.DumpCalls",                                                CheckerArray83, 0, false },
-  { "debug.DumpDominators",                                           CheckerArray84, 0, false },
-  { "debug.DumpLiveVars",                                             CheckerArray85, 0, false },
-  { "debug.DumpTraversal",                                            CheckerArray86, 0, false },
-  { "debug.ExprInspection",                                           CheckerArray87, 0, false },
-  { "debug.Stats",                                                    CheckerArray88, 0, false },
-  { "debug.TaintTest",                                                CheckerArray89, 0, false },
-  { "debug.ViewCFG",                                                  CheckerArray90, 0, false },
-  { "debug.ViewCallGraph",                                            CheckerArray91, 0, false },
-  { "debug.ViewExplodedGraph",                                        CheckerArray92, 0, false },
-  { "llvm",                                                           0, SubPackageArray93, false },
-  { "llvm.Conventions",                                               CheckerArray94, 0, false },
-  { "nullability",                                                    0, SubPackageArray95, false },
-  { "nullability.NullPassedToNonnull",                                CheckerArray96, 0, false },
-  { "nullability.NullReturnedFromNonnull",                            CheckerArray97, 0, false },
-  { "nullability.NullableDereferenced",                               CheckerArray98, 0, false },
-  { "nullability.NullablePassedToNonnull",                            CheckerArray99, 0, false },
-  { "nullability.NullableReturnedFromNonnull",                        CheckerArray100, 0, false },
-  { "optin",                                                          0, SubPackageArray101, false },
-  { "optin.cplusplus",                                                0, SubPackageArray102, false },
-  { "optin.cplusplus.VirtualCall",                                    CheckerArray103, 0, false },
-  { "optin.mpi",                                                      0, SubPackageArray104, false },
-  { "optin.mpi.MPI-Checker",                                          CheckerArray105, 0, false },
-  { "optin.osx",                                                      0, SubPackageArray106, false },
-  { "optin.osx.cocoa",                                                0, SubPackageArray107, false },
-  { "optin.osx.cocoa.localizability",                                 0, SubPackageArray108, false },
-  { "optin.osx.cocoa.localizability.EmptyLocalizationContextChecker", CheckerArray109, 0, false },
-  { "optin.osx.cocoa.localizability.NonLocalizedStringChecker",       CheckerArray110, 0, false },
-  { "optin.performance",                                              0, SubPackageArray111, false },
-  { "optin.performance.GCDAntipattern",                               CheckerArray112, 0, false },
-  { "optin.performance.Padding",                                      CheckerArray113, 0, false },
-  { "optin.portability",                                              0, SubPackageArray114, false },
-  { "optin.portability.UnixAPI",                                      CheckerArray115, 0, false },
-  { "osx",                                                            0, SubPackageArray116, false },
-  { "osx.API",                                                        CheckerArray117, 0, false },
-  { "osx.NumberObjectConversion",                                     CheckerArray118, 0, false },
-  { "osx.ObjCProperty",                                               CheckerArray119, 0, false },
-  { "osx.SecKeychainAPI",                                             CheckerArray120, 0, false },
-  { "osx.cocoa",                                                      0, SubPackageArray121, false },
-  { "osx.cocoa.AtSync",                                               CheckerArray122, 0, false },
-  { "osx.cocoa.AutoreleaseWrite",                                     CheckerArray123, 0, false },
-  { "osx.cocoa.ClassRelease",                                         CheckerArray124, 0, false },
-  { "osx.cocoa.Dealloc",                                              CheckerArray125, 0, false },
-  { "osx.cocoa.IncompatibleMethodTypes",                              CheckerArray126, 0, false },
-  { "osx.cocoa.Loops",                                                CheckerArray127, 0, false },
-  { "osx.cocoa.MissingSuperCall",                                     CheckerArray128, 0, false },
-  { "osx.cocoa.NSAutoreleasePool",                                    CheckerArray129, 0, false },
-  { "osx.cocoa.NSError",                                              CheckerArray130, 0, false },
-  { "osx.cocoa.NilArg",                                               CheckerArray131, 0, false },
-  { "osx.cocoa.NonNilReturnValue",                                    CheckerArray132, 0, false },
-  { "osx.cocoa.ObjCGenerics",                                         CheckerArray133, 0, false },
-  { "osx.cocoa.RetainCount",                                          CheckerArray134, 0, false },
-  { "osx.cocoa.SelfInit",                                             CheckerArray135, 0, false },
-  { "osx.cocoa.SuperDealloc",                                         CheckerArray136, 0, false },
-  { "osx.cocoa.UnusedIvars",                                          CheckerArray137, 0, false },
-  { "osx.cocoa.VariadicMethodTypes",                                  CheckerArray138, 0, false },
-  { "osx.coreFoundation",                                             0, SubPackageArray139, false },
-  { "osx.coreFoundation.CFError",                                     CheckerArray140, 0, false },
-  { "osx.coreFoundation.CFNumber",                                    CheckerArray141, 0, false },
-  { "osx.coreFoundation.CFRetainRelease",                             CheckerArray142, 0, false },
-  { "osx.coreFoundation.containers",                                  0, SubPackageArray143, false },
-  { "osx.coreFoundation.containers.OutOfBounds",                      CheckerArray144, 0, false },
-  { "osx.coreFoundation.containers.PointerSizedValues",               CheckerArray145, 0, false },
-  { "security",                                                       0, SubPackageArray146, false },
-  { "security.FloatLoopCounter",                                      CheckerArray147, 0, false },
-  { "security.insecureAPI",                                           0, SubPackageArray148, false },
-  { "security.insecureAPI.UncheckedReturn",                           CheckerArray149, 0, false },
-  { "security.insecureAPI.getpw",                                     CheckerArray150, 0, false },
-  { "security.insecureAPI.gets",                                      CheckerArray151, 0, false },
-  { "security.insecureAPI.mkstemp",                                   CheckerArray152, 0, false },
-  { "security.insecureAPI.mktemp",                                    CheckerArray153, 0, false },
-  { "security.insecureAPI.rand",                                      CheckerArray154, 0, false },
-  { "security.insecureAPI.strcpy",                                    CheckerArray155, 0, false },
-  { "security.insecureAPI.vfork",                                     CheckerArray156, 0, false },
-  { "unix",                                                           0, SubPackageArray157, false },
-  { "unix.API",                                                       CheckerArray158, 0, false },
-  { "unix.Malloc",                                                    CheckerArray159, 0, false },
-  { "unix.MallocSizeof",                                              CheckerArray160, 0, false },
-  { "unix.MismatchedDeallocator",                                     CheckerArray161, 0, false },
-  { "unix.StdCLibraryFunctions",                                      CheckerArray162, 0, false },
-  { "unix.Vfork",                                                     CheckerArray163, 0, false },
-  { "unix.cstring",                                                   0, SubPackageArray164, true },
-  { "unix.cstring.BadSizeArg",                                        CheckerArray165, 0, false },
-  { "unix.cstring.NullArg",                                           CheckerArray166, 0, false },
-  { "valist",                                                         0, SubPackageArray167, false },
-  { "valist.CopyToSelf",                                              CheckerArray168, 0, false },
-  { "valist.Uninitialized",                                           CheckerArray169, 0, false },
-  { "valist.Unterminated",                                            CheckerArray170, 0, false },
+  { "alpha.cplusplus.UninitializedObject",                            CheckerArray21, 0, false },
+  { "alpha.deadcode",                                                 0, SubPackageArray22, true },
+  { "alpha.deadcode.UnreachableCode",                                 CheckerArray23, 0, false },
+  { "alpha.osx",                                                      0, SubPackageArray24, true },
+  { "alpha.osx.cocoa",                                                0, SubPackageArray25, true },
+  { "alpha.osx.cocoa.DirectIvarAssignment",                           CheckerArray26, 0, false },
+  { "alpha.osx.cocoa.DirectIvarAssignmentForAnnotatedFunctions",      CheckerArray27, 0, false },
+  { "alpha.osx.cocoa.InstanceVariableInvalidation",                   CheckerArray28, 0, false },
+  { "alpha.osx.cocoa.MissingInvalidationMethod",                      CheckerArray29, 0, false },
+  { "alpha.osx.cocoa.localizability",                                 0, SubPackageArray30, true },
+  { "alpha.osx.cocoa.localizability.PluralMisuseChecker",             CheckerArray31, 0, false },
+  { "alpha.security",                                                 0, SubPackageArray32, true },
+  { "alpha.security.ArrayBound",                                      CheckerArray33, 0, false },
+  { "alpha.security.ArrayBoundV2",                                    CheckerArray34, 0, false },
+  { "alpha.security.MallocOverflow",                                  CheckerArray35, 0, false },
+  { "alpha.security.MmapWriteExec",                                   CheckerArray36, 0, false },
+  { "alpha.security.ReturnPtrRange",                                  CheckerArray37, 0, false },
+  { "alpha.security.taint",                                           0, SubPackageArray38, true },
+  { "alpha.security.taint.TaintPropagation",                          CheckerArray39, 0, false },
+  { "alpha.unix",                                                     0, SubPackageArray40, true },
+  { "alpha.unix.BlockInCriticalSection",                              CheckerArray41, 0, false },
+  { "alpha.unix.Chroot",                                              CheckerArray42, 0, false },
+  { "alpha.unix.PthreadLock",                                         CheckerArray43, 0, false },
+  { "alpha.unix.SimpleStream",                                        CheckerArray44, 0, false },
+  { "alpha.unix.Stream",                                              CheckerArray45, 0, false },
+  { "alpha.unix.cstring",                                             0, SubPackageArray46, true },
+  { "alpha.unix.cstring.BufferOverlap",                               CheckerArray47, 0, false },
+  { "alpha.unix.cstring.NotNullTerminated",                           CheckerArray48, 0, false },
+  { "alpha.unix.cstring.OutOfBounds",                                 CheckerArray49, 0, false },
+  { "apiModeling",                                                    0, SubPackageArray50, true },
+  { "apiModeling.TrustNonnull",                                       CheckerArray51, 0, false },
+  { "apiModeling.google",                                             0, SubPackageArray52, true },
+  { "apiModeling.google.GTest",                                       CheckerArray53, 0, false },
+  { "core",                                                           0, SubPackageArray54, false },
+  { "core.CallAndMessage",                                            CheckerArray55, 0, false },
+  { "core.DivideZero",                                                CheckerArray56, 0, false },
+  { "core.DynamicTypePropagation",                                    CheckerArray57, 0, false },
+  { "core.NonNullParamChecker",                                       CheckerArray58, 0, false },
+  { "core.NonnilStringConstants",                                     CheckerArray59, 0, false },
+  { "core.NullDereference",                                           CheckerArray60, 0, false },
+  { "core.StackAddressEscape",                                        CheckerArray61, 0, false },
+  { "core.UndefinedBinaryOperatorResult",                             CheckerArray62, 0, false },
+  { "core.VLASize",                                                   CheckerArray63, 0, false },
+  { "core.builtin",                                                   0, SubPackageArray64, false },
+  { "core.builtin.BuiltinFunctions",                                  CheckerArray65, 0, false },
+  { "core.builtin.NoReturnFunctions",                                 CheckerArray66, 0, false },
+  { "core.uninitialized",                                             0, SubPackageArray67, false },
+  { "core.uninitialized.ArraySubscript",                              CheckerArray68, 0, false },
+  { "core.uninitialized.Assign",                                      CheckerArray69, 0, false },
+  { "core.uninitialized.Branch",                                      CheckerArray70, 0, false },
+  { "core.uninitialized.CapturedBlockVariable",                       CheckerArray71, 0, false },
+  { "core.uninitialized.UndefReturn",                                 CheckerArray72, 0, false },
+  { "cplusplus",                                                      0, SubPackageArray73, false },
+  { "cplusplus.InnerPointer",                                         CheckerArray74, 0, false },
+  { "cplusplus.NewDelete",                                            CheckerArray75, 0, false },
+  { "cplusplus.NewDeleteLeaks",                                       CheckerArray76, 0, false },
+  { "cplusplus.SelfAssignment",                                       CheckerArray77, 0, false },
+  { "deadcode",                                                       0, SubPackageArray78, false },
+  { "deadcode.DeadStores",                                            CheckerArray79, 0, false },
+  { "debug",                                                          0, SubPackageArray80, false },
+  { "debug.AnalysisOrder",                                            CheckerArray81, 0, false },
+  { "debug.ConfigDumper",                                             CheckerArray82, 0, false },
+  { "debug.DumpCFG",                                                  CheckerArray83, 0, false },
+  { "debug.DumpCallGraph",                                            CheckerArray84, 0, false },
+  { "debug.DumpCalls",                                                CheckerArray85, 0, false },
+  { "debug.DumpDominators",                                           CheckerArray86, 0, false },
+  { "debug.DumpLiveVars",                                             CheckerArray87, 0, false },
+  { "debug.DumpTraversal",                                            CheckerArray88, 0, false },
+  { "debug.ExprInspection",                                           CheckerArray89, 0, false },
+  { "debug.Stats",                                                    CheckerArray90, 0, false },
+  { "debug.TaintTest",                                                CheckerArray91, 0, false },
+  { "debug.ViewCFG",                                                  CheckerArray92, 0, false },
+  { "debug.ViewCallGraph",                                            CheckerArray93, 0, false },
+  { "debug.ViewExplodedGraph",                                        CheckerArray94, 0, false },
+  { "llvm",                                                           0, SubPackageArray95, false },
+  { "llvm.Conventions",                                               CheckerArray96, 0, false },
+  { "nullability",                                                    0, SubPackageArray97, false },
+  { "nullability.NullPassedToNonnull",                                CheckerArray98, 0, false },
+  { "nullability.NullReturnedFromNonnull",                            CheckerArray99, 0, false },
+  { "nullability.NullableDereferenced",                               CheckerArray100, 0, false },
+  { "nullability.NullablePassedToNonnull",                            CheckerArray101, 0, false },
+  { "nullability.NullableReturnedFromNonnull",                        CheckerArray102, 0, false },
+  { "optin",                                                          0, SubPackageArray103, false },
+  { "optin.cplusplus",                                                0, SubPackageArray104, false },
+  { "optin.cplusplus.VirtualCall",                                    CheckerArray105, 0, false },
+  { "optin.mpi",                                                      0, SubPackageArray106, false },
+  { "optin.mpi.MPI-Checker",                                          CheckerArray107, 0, false },
+  { "optin.osx",                                                      0, SubPackageArray108, false },
+  { "optin.osx.cocoa",                                                0, SubPackageArray109, false },
+  { "optin.osx.cocoa.localizability",                                 0, SubPackageArray110, false },
+  { "optin.osx.cocoa.localizability.EmptyLocalizationContextChecker", CheckerArray111, 0, false },
+  { "optin.osx.cocoa.localizability.NonLocalizedStringChecker",       CheckerArray112, 0, false },
+  { "optin.performance",                                              0, SubPackageArray113, false },
+  { "optin.performance.GCDAntipattern",                               CheckerArray114, 0, false },
+  { "optin.performance.Padding",                                      CheckerArray115, 0, false },
+  { "optin.portability",                                              0, SubPackageArray116, false },
+  { "optin.portability.UnixAPI",                                      CheckerArray117, 0, false },
+  { "osx",                                                            0, SubPackageArray118, false },
+  { "osx.API",                                                        CheckerArray119, 0, false },
+  { "osx.NumberObjectConversion",                                     CheckerArray120, 0, false },
+  { "osx.ObjCProperty",                                               CheckerArray121, 0, false },
+  { "osx.SecKeychainAPI",                                             CheckerArray122, 0, false },
+  { "osx.cocoa",                                                      0, SubPackageArray123, false },
+  { "osx.cocoa.AtSync",                                               CheckerArray124, 0, false },
+  { "osx.cocoa.AutoreleaseWrite",                                     CheckerArray125, 0, false },
+  { "osx.cocoa.ClassRelease",                                         CheckerArray126, 0, false },
+  { "osx.cocoa.Dealloc",                                              CheckerArray127, 0, false },
+  { "osx.cocoa.IncompatibleMethodTypes",                              CheckerArray128, 0, false },
+  { "osx.cocoa.Loops",                                                CheckerArray129, 0, false },
+  { "osx.cocoa.MissingSuperCall",                                     CheckerArray130, 0, false },
+  { "osx.cocoa.NSAutoreleasePool",                                    CheckerArray131, 0, false },
+  { "osx.cocoa.NSError",                                              CheckerArray132, 0, false },
+  { "osx.cocoa.NilArg",                                               CheckerArray133, 0, false },
+  { "osx.cocoa.NonNilReturnValue",                                    CheckerArray134, 0, false },
+  { "osx.cocoa.ObjCGenerics",                                         CheckerArray135, 0, false },
+  { "osx.cocoa.RetainCount",                                          CheckerArray136, 0, false },
+  { "osx.cocoa.RunLoopAutoreleaseLeak",                               CheckerArray137, 0, false },
+  { "osx.cocoa.SelfInit",                                             CheckerArray138, 0, false },
+  { "osx.cocoa.SuperDealloc",                                         CheckerArray139, 0, false },
+  { "osx.cocoa.UnusedIvars",                                          CheckerArray140, 0, false },
+  { "osx.cocoa.VariadicMethodTypes",                                  CheckerArray141, 0, false },
+  { "osx.coreFoundation",                                             0, SubPackageArray142, false },
+  { "osx.coreFoundation.CFError",                                     CheckerArray143, 0, false },
+  { "osx.coreFoundation.CFNumber",                                    CheckerArray144, 0, false },
+  { "osx.coreFoundation.CFRetainRelease",                             CheckerArray145, 0, false },
+  { "osx.coreFoundation.containers",                                  0, SubPackageArray146, false },
+  { "osx.coreFoundation.containers.OutOfBounds",                      CheckerArray147, 0, false },
+  { "osx.coreFoundation.containers.PointerSizedValues",               CheckerArray148, 0, false },
+  { "security",                                                       0, SubPackageArray149, false },
+  { "security.FloatLoopCounter",                                      CheckerArray150, 0, false },
+  { "security.insecureAPI",                                           0, SubPackageArray151, false },
+  { "security.insecureAPI.UncheckedReturn",                           CheckerArray152, 0, false },
+  { "security.insecureAPI.bcmp",                                      CheckerArray153, 0, false },
+  { "security.insecureAPI.bcopy",                                     CheckerArray154, 0, false },
+  { "security.insecureAPI.bzero",                                     CheckerArray155, 0, false },
+  { "security.insecureAPI.getpw",                                     CheckerArray156, 0, false },
+  { "security.insecureAPI.gets",                                      CheckerArray157, 0, false },
+  { "security.insecureAPI.mkstemp",                                   CheckerArray158, 0, false },
+  { "security.insecureAPI.mktemp",                                    CheckerArray159, 0, false },
+  { "security.insecureAPI.rand",                                      CheckerArray160, 0, false },
+  { "security.insecureAPI.strcpy",                                    CheckerArray161, 0, false },
+  { "security.insecureAPI.vfork",                                     CheckerArray162, 0, false },
+  { "unix",                                                           0, SubPackageArray163, false },
+  { "unix.API",                                                       CheckerArray164, 0, false },
+  { "unix.Malloc",                                                    CheckerArray165, 0, false },
+  { "unix.MallocSizeof",                                              CheckerArray166, 0, false },
+  { "unix.MismatchedDeallocator",                                     CheckerArray167, 0, false },
+  { "unix.StdCLibraryFunctions",                                      CheckerArray168, 0, false },
+  { "unix.Vfork",                                                     CheckerArray169, 0, false },
+  { "unix.cstring",                                                   0, SubPackageArray170, true },
+  { "unix.cstring.BadSizeArg",                                        CheckerArray171, 0, false },
+  { "unix.cstring.NullArg",                                           CheckerArray172, 0, false },
+  { "valist",                                                         0, SubPackageArray173, false },
+  { "valist.CopyToSelf",                                              CheckerArray174, 0, false },
+  { "valist.Uninitialized",                                           CheckerArray175, 0, false },
+  { "valist.Unterminated",                                            CheckerArray176, 0, false },
 #endif // GET_CHECKNAME_TABLE
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h
index e5e857e..f5a0639 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Checkers/ObjCRetainCount.h
@@ -136,7 +136,7 @@
     // by inlining the function
     NoRetHard
   };
-  
+
   /// Determines the object kind of a tracked object.
   enum ObjKind {
     /// Indicates that the tracked object is a CF object.  This is
@@ -153,30 +153,30 @@
 private:
   Kind K;
   ObjKind O;
-  
+
   RetEffect(Kind k, ObjKind o = AnyObj) : K(k), O(o) {}
-  
+
 public:
   Kind getKind() const { return K; }
-  
+
   ObjKind getObjKind() const { return O; }
-  
+
   bool isOwned() const {
     return K == OwnedSymbol || K == OwnedWhenTrackedReceiver;
   }
-  
+
   bool notOwned() const {
     return K == NotOwnedSymbol;
   }
-  
+
   bool operator==(const RetEffect &Other) const {
     return K == Other.K && O == Other.O;
   }
-  
+
   static RetEffect MakeOwnedWhenTrackedReceiver() {
     return RetEffect(OwnedWhenTrackedReceiver, ObjC);
   }
-  
+
   static RetEffect MakeOwned(ObjKind o) {
     return RetEffect(OwnedSymbol, o);
   }
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
index e8a918e..7586f7e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/AnalyzerOptions.h
@@ -76,7 +76,7 @@
 NumInliningModes
 };
 
-/// \brief Describes the different kinds of C++ member functions which can be
+/// Describes the different kinds of C++ member functions which can be
 /// considered for inlining by the analyzer.
 ///
 /// These options are cumulative; enabling one kind of member function will
@@ -100,7 +100,7 @@
   CIMK_Destructors
 };
 
-/// \brief Describes the different modes of inter-procedural analysis.
+/// Describes the different modes of inter-procedural analysis.
 enum IPAKind {
   IPAK_NotSet = 0,
 
@@ -128,26 +128,26 @@
   static std::vector<StringRef>
   getRegisteredCheckers(bool IncludeExperimental = false);
 
-  /// \brief Pair of checker name and enable/disable.
+  /// Pair of checker name and enable/disable.
   std::vector<std::pair<std::string, bool>> CheckersControlList;
-  
-  /// \brief A key-value table of use-specified configuration values.
+
+  /// A key-value table of use-specified configuration values.
   ConfigTable Config;
   AnalysisStores AnalysisStoreOpt = RegionStoreModel;
   AnalysisConstraints AnalysisConstraintsOpt = RangeConstraintsModel;
   AnalysisDiagClients AnalysisDiagOpt = PD_HTML;
   AnalysisPurgeMode AnalysisPurgeOpt = PurgeStmt;
-  
+
   std::string AnalyzeSpecificFunction;
 
   /// Store full compiler invocation for reproducible instructions in the
   /// generated report.
   std::string FullCompilerInvocation;
-  
-  /// \brief The maximum number of times the analyzer visits a block.
+
+  /// The maximum number of times the analyzer visits a block.
   unsigned maxBlockVisitOnPath;
-  
-  /// \brief Disable all analyzer checks.
+
+  /// Disable all analyzer checks.
   ///
   /// This flag allows one to disable analyzer checks on the code processed by
   /// the given analysis consumer. Note, the code will get parsed and the
@@ -160,7 +160,7 @@
   unsigned AnalyzerDisplayProgress : 1;
   unsigned AnalyzeNestedBlocks : 1;
 
-  /// \brief The flag regulates if we should eagerly assume evaluations of
+  /// The flag regulates if we should eagerly assume evaluations of
   /// conditionals, thus, bifurcating the path.
   ///
   /// This flag indicates how the engine should handle expressions such as: 'x =
@@ -170,22 +170,22 @@
   /// precision until we have a better way to lazily evaluate such logic.  The
   /// downside is that it eagerly bifurcates paths.
   unsigned eagerlyAssumeBinOpBifurcation : 1;
-  
+
   unsigned TrimGraph : 1;
   unsigned visualizeExplodedGraphWithGraphViz : 1;
   unsigned visualizeExplodedGraphWithUbiGraph : 1;
   unsigned UnoptimizedCFG : 1;
   unsigned PrintStats : 1;
-  
-  /// \brief Do not re-analyze paths leading to exhausted nodes with a different
+
+  /// Do not re-analyze paths leading to exhausted nodes with a different
   /// strategy. We get better code coverage when retry is enabled.
   unsigned NoRetryExhausted : 1;
-  
-  /// \brief The inlining stack depth limit.
+
+  /// The inlining stack depth limit.
   // Cap the stack depth at 4 calls (5 stack frames, base + 4 calls).
   unsigned InlineMaxStackDepth = 5;
-  
-  /// \brief The mode of function selection used during inlining.
+
+  /// The mode of function selection used during inlining.
   AnalysisInliningMode InliningMode = NoRedundancy;
 
   enum class ExplorationStrategyKind {
@@ -200,7 +200,7 @@
 private:
   ExplorationStrategyKind ExplorationStrategy = ExplorationStrategyKind::NotSet;
 
-  /// \brief Describes the kinds for high-level analyzer mode.
+  /// Describes the kinds for high-level analyzer mode.
   enum UserModeKind {
     UMK_NotSet = 0,
 
@@ -211,7 +211,7 @@
     UMK_Deep = 2
   };
 
-  /// Controls the high-level analyzer mode, which influences the default 
+  /// Controls the high-level analyzer mode, which influences the default
   /// settings for some of the lower-level config options (such as IPAMode).
   /// \sa getUserMode
   UserModeKind UserMode = UMK_NotSet;
@@ -221,7 +221,7 @@
 
   /// Controls which C++ member functions will be considered for inlining.
   CXXInlineableMemberKind CXXMemberInliningMode;
-  
+
   /// \sa includeImplicitDtorsInCFG
   Optional<bool> IncludeImplicitDtorsInCFG;
 
@@ -239,7 +239,7 @@
 
   /// \sa mayInlineCXXStandardLibrary
   Optional<bool> InlineCXXStandardLibrary;
-  
+
   /// \sa includeScopesInCFG
   Optional<bool> IncludeScopesInCFG;
 
@@ -280,6 +280,9 @@
   /// \sa shouldSuppressFromCXXStandardLibrary
   Optional<bool> SuppressFromCXXStandardLibrary;
 
+  /// \sa shouldCrosscheckWithZ3
+  Optional<bool> CrosscheckWithZ3;
+
   /// \sa reportIssuesInMainSourceFile
   Optional<bool> ReportIssuesInMainSourceFile;
 
@@ -291,6 +294,9 @@
   /// \sa getGraphTrimInterval
   Optional<unsigned> GraphTrimInterval;
 
+  /// \sa getMaxSymbolComplexity
+  Optional<unsigned> MaxSymbolComplexity;
+
   /// \sa getMaxTimesInlineLarge
   Optional<unsigned> MaxTimesInlineLarge;
 
@@ -312,6 +318,9 @@
   /// \sa shouldDisplayNotesAsEvents
   Optional<bool> DisplayNotesAsEvents;
 
+  /// \sa shouldAggressivelySimplifyBinaryOperation
+  Optional<bool> AggressiveBinaryOperationSimplification;
+
   /// \sa getCTUDir
   Optional<StringRef> CTUDir;
 
@@ -321,6 +330,9 @@
   /// \sa naiveCTUEnabled
   Optional<bool> NaiveCTU;
 
+  /// \sa shouldElideConstructors
+  Optional<bool> ElideConstructors;
+
 
   /// A helper function that retrieves option for a given full-qualified
   /// checker name.
@@ -367,7 +379,7 @@
   /// specified.
   /// @param [in] C The optional checker parameter that can be used to restrict
   /// the search to the options of this particular checker (and its parents
-  /// dependening on search mode).
+  /// depending on search mode).
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
@@ -385,7 +397,7 @@
   /// specified.
   /// @param [in] C The optional checker parameter that can be used to restrict
   /// the search to the options of this particular checker (and its parents
-  /// dependening on search mode).
+  /// depending on search mode).
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
@@ -402,7 +414,7 @@
   /// specified.
   /// @param [in] C The optional checker parameter that can be used to restrict
   /// the search to the options of this particular checker (and its parents
-  /// dependening on search mode).
+  /// depending on search mode).
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
@@ -419,7 +431,7 @@
   /// specified.
   /// @param [in] C The optional checker parameter that can be used to restrict
   /// the search to the options of this particular checker (and its parents
-  /// dependening on search mode).
+  /// depending on search mode).
   /// @param [in] SearchInParents If set to true and the searched option was not
   /// specified for the given checker the options for the parent packages will
   /// be searched as well. The inner packages take precedence over the outer
@@ -428,14 +440,14 @@
                               const ento::CheckerBase *C = nullptr,
                               bool SearchInParents = false);
 
-  /// \brief Retrieves and sets the UserMode. This is a high-level option,
+  /// Retrieves and sets the UserMode. This is a high-level option,
   /// which is used to set other low-level options. It is not accessible
   /// outside of AnalyzerOptions.
   UserModeKind getUserMode();
 
   ExplorationStrategyKind getExplorationStrategy();
 
-  /// \brief Returns the inter-procedural analysis mode.
+  /// Returns the inter-procedural analysis mode.
   IPAKind getIPAMode();
 
   /// Returns the option controlling which C++ member functions will be
@@ -572,6 +584,13 @@
   /// which accepts the values "true" and "false".
   bool shouldSuppressFromCXXStandardLibrary();
 
+  /// Returns whether bug reports should be crosschecked with the Z3
+  /// constraint manager backend.
+  ///
+  /// This is controlled by the 'crosscheck-with-z3' config option,
+  /// which accepts the values "true" and "false".
+  bool shouldCrosscheckWithZ3();
+
   /// Returns whether or not the diagnostic report should be always reported
   /// in the main source file and not the headers.
   ///
@@ -627,6 +646,11 @@
   /// node reclamation, set the option to "0".
   unsigned getGraphTrimInterval();
 
+  /// Returns the maximum complexity of symbolic constraint (50 by default).
+  ///
+  /// This is controlled by "-analyzer-config max-symbol-complexity" option.
+  unsigned getMaxSymbolComplexity();
+
   /// Returns the maximum times a large function could be inlined.
   ///
   /// This is controlled by the 'max-times-inline-large' config option.
@@ -666,6 +690,20 @@
   /// to false when unset.
   bool shouldDisplayNotesAsEvents();
 
+  /// Returns true if SValBuilder should rearrange comparisons and additive
+  /// operations of symbolic expressions which consist of a sum of a symbol and
+  /// a concrete integer into the format where symbols are on the left-hand
+  /// side and the integer is on the right. This is only done if both symbols
+  /// and both concrete integers are signed, greater than or equal to the
+  /// quarter of the minimum value of the type and less than or equal to the
+  /// quarter of the maximum value of that type.
+  ///
+  /// A + n <OP> B + m becomes A - B <OP> m - n, where A and B symbolic,
+  /// n and m are integers. <OP> is any of '==', '!=', '<', '<=', '>', '>=',
+  /// '+' or '-'. The rearrangement also happens with '-' instead of '+' on
+  // either or both side and also if any or both integers are missing.
+  bool shouldAggressivelySimplifyBinaryOperation();
+
   /// Returns the directory containing the CTU related files.
   StringRef getCTUDir();
 
@@ -676,10 +714,17 @@
   /// This is an experimental feature to inline functions from another
   /// translation units.
   bool naiveCTUEnabled();
+
+  /// Returns true if elidable C++ copy-constructors and move-constructors
+  /// should be actually elided during analysis. Both behaviors are allowed
+  /// by the C++ standard, and the analyzer, like CodeGen, defaults to eliding.
+  /// Starting with C++17 some elisions become mandatory, and in these cases
+  /// the option will be ignored.
+  bool shouldElideConstructors();
 };
-  
+
 using AnalyzerOptionsRef = IntrusiveRefCntPtr<AnalyzerOptions>;
-  
+
 } // namespace clang
 
 #endif // LLVM_CLANG_STATICANALYZER_CORE_ANALYZEROPTIONS_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
index 73a88d2..9041f4c 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
@@ -23,6 +23,7 @@
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h"
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/FoldingSet.h"
@@ -65,10 +66,15 @@
 // Interface for individual bug reports.
 //===----------------------------------------------------------------------===//
 
+/// A mapping from diagnostic consumers to the diagnostics they should
+/// consume.
+using DiagnosticForConsumerMapTy =
+    llvm::DenseMap<PathDiagnosticConsumer *, std::unique_ptr<PathDiagnostic>>;
+
 /// This class provides an interface through which checkers can create
 /// individual bug reports.
 class BugReport : public llvm::ilist_node<BugReport> {
-public:  
+public:
   class NodeResolver {
     virtual void anchor();
 
@@ -96,7 +102,7 @@
   PathDiagnosticLocation Location;
   PathDiagnosticLocation UniqueingLocation;
   const Decl *UniqueingDecl;
-  
+
   const ExplodedNode *ErrorNode = nullptr;
   SmallVector<SourceRange, 4> Ranges;
   ExtraTextList ExtraText;
@@ -130,10 +136,6 @@
   /// Used for ensuring the visitors are only added once.
   llvm::FoldingSet<BugReporterVisitor> CallbacksSet;
 
-  /// Used for clients to tell if the report's configuration has changed
-  /// since the last time they checked.
-  unsigned ConfigurationChangeToken = 0;
-  
   /// When set, this flag disables all callstack pruning from a diagnostic
   /// path.  This is useful for some reports that want maximum fidelty
   /// when reporting an issue.
@@ -173,7 +175,7 @@
   BugReport(BugType &bt, StringRef desc, PathDiagnosticLocation l)
       : BT(bt), Description(desc), Location(l) {}
 
-  /// \brief Create a BugReport with a custom uniqueing location.
+  /// Create a BugReport with a custom uniqueing location.
   ///
   /// The reports that have the same report location, description, bug type, and
   /// ranges are uniqued - only one of the equivalent reports will be presented
@@ -190,7 +192,7 @@
   const BugType& getBugType() const { return BT; }
   BugType& getBugType() { return BT; }
 
-  /// \brief True when the report has an execution path associated with it.
+  /// True when the report has an execution path associated with it.
   ///
   /// A report is said to be path-sensitive if it was thrown against a
   /// particular exploded node in the path-sensitive analysis graph.
@@ -218,21 +220,17 @@
 
   /// Disable all path pruning when generating a PathDiagnostic.
   void disablePathPruning() { DoNotPrunePath = true; }
-  
+
   void markInteresting(SymbolRef sym);
   void markInteresting(const MemRegion *R);
   void markInteresting(SVal V);
   void markInteresting(const LocationContext *LC);
-  
+
   bool isInteresting(SymbolRef sym);
   bool isInteresting(const MemRegion *R);
   bool isInteresting(SVal V);
   bool isInteresting(const LocationContext *LC);
 
-  unsigned getConfigurationChangeToken() const {
-    return ConfigurationChangeToken;
-  }
-
   /// Returns whether or not this report should be considered valid.
   ///
   /// Invalid reports are those that have been classified as likely false
@@ -254,17 +252,10 @@
     Invalidations.insert(std::make_pair(Tag, Data));
   }
 
-  /// Reverses the effects of a previous invalidation.
-  ///
-  /// \sa markInvalid
-  void removeInvalidation(const void *Tag, const void *Data) {
-    Invalidations.erase(std::make_pair(Tag, Data));
-  }
-  
   /// Return the canonical declaration, be it a method or class, where
   /// this issue semantically occurred.
   const Decl *getDeclWithIssue() const;
-  
+
   /// Specifically set the Decl where an issue occurred.  This isn't necessary
   /// for BugReports that cover a path as it will be automatically inferred.
   void setDeclWithIssue(const Decl *declWithIssue) {
@@ -297,9 +288,9 @@
     return Notes;
   }
 
-  /// \brief This allows for addition of meta data to the diagnostic.
+  /// This allows for addition of meta data to the diagnostic.
   ///
-  /// Currently, only the HTMLDiagnosticClient knows how to display it. 
+  /// Currently, only the HTMLDiagnosticClient knows how to display it.
   void addExtraText(StringRef S) {
     ExtraText.push_back(S);
   }
@@ -308,26 +299,26 @@
     return ExtraText;
   }
 
-  /// \brief Return the "definitive" location of the reported bug.
+  /// Return the "definitive" location of the reported bug.
   ///
   ///  While a bug can span an entire path, usually there is a specific
   ///  location that can be used to identify where the key issue occurred.
   ///  This location is used by clients rendering diagnostics.
   virtual PathDiagnosticLocation getLocation(const SourceManager &SM) const;
 
-  /// \brief Get the location on which the report should be uniqued.
+  /// Get the location on which the report should be uniqued.
   PathDiagnosticLocation getUniqueingLocation() const {
     return UniqueingLocation;
   }
-  
-  /// \brief Get the declaration containing the uniqueing location.
+
+  /// Get the declaration containing the uniqueing location.
   const Decl *getUniqueingDecl() const {
     return UniqueingDecl;
   }
 
   const Stmt *getStmt() const;
 
-  /// \brief Add a range to a bug report.
+  /// Add a range to a bug report.
   ///
   /// Ranges are used to highlight regions of interest in the source code.
   /// They should be at the same source code line as the BugReport location.
@@ -340,10 +331,10 @@
     Ranges.push_back(R);
   }
 
-  /// \brief Get the SourceRanges associated with the report.
+  /// Get the SourceRanges associated with the report.
   virtual llvm::iterator_range<ranges_iterator> getRanges();
 
-  /// \brief Add custom or predefined bug report visitors to this report.
+  /// Add custom or predefined bug report visitors to this report.
   ///
   /// The visitors should be used when the default trace is not sufficient.
   /// For example, they allow constructing a more elaborate trace.
@@ -352,6 +343,9 @@
   /// registerVarDeclsLastStore().
   void addVisitor(std::unique_ptr<BugReporterVisitor> visitor);
 
+  /// Remove all visitors attached to this bug report.
+  void clearVisitors();
+
   /// Iterators through the custom diagnostic visitors.
   visitor_iterator visitor_begin() { return Callbacks.begin(); }
   visitor_iterator visitor_end() { return Callbacks.end(); }
@@ -413,6 +407,8 @@
 /// BugReporter is a utility class for generating PathDiagnostics for analysis.
 /// It collects the BugReports and BugTypes and knows how to generate
 /// and flush the corresponding diagnostics.
+///
+/// The base class is used for generating path-insensitive
 class BugReporter {
 public:
   enum Kind { BaseBRKind, GRBugReporterKind };
@@ -429,11 +425,11 @@
   /// Generate and flush the diagnostics for the given bug report.
   void FlushReport(BugReportEquivClass& EQ);
 
-  /// Generate and flush the diagnostics for the given bug report
-  /// and PathDiagnosticConsumer.
-  void FlushReport(BugReport *exampleReport,
-                   PathDiagnosticConsumer &PD,
-                   ArrayRef<BugReport*> BugReports);
+  /// Generate the diagnostics for the given bug report.
+  std::unique_ptr<DiagnosticForConsumerMapTy>
+  generateDiagnosticForConsumerMap(BugReport *exampleReport,
+                                   ArrayRef<PathDiagnosticConsumer *> consumers,
+                                   ArrayRef<BugReport *> bugReports);
 
   /// The set of bug reports tracked by the BugReporter.
   llvm::FoldingSet<BugReportEquivClass> EQClasses;
@@ -450,7 +446,7 @@
       : BugTypes(F.getEmptySet()), kind(BaseBRKind), D(d) {}
   virtual ~BugReporter();
 
-  /// \brief Generate and flush diagnostics for all bug reports.
+  /// Generate and flush diagnostics for all bug reports.
   void FlushReports();
 
   Kind getKind() const { return kind; }
@@ -463,12 +459,12 @@
     return D.getPathDiagnosticConsumers();
   }
 
-  /// \brief Iterator over the set of BugTypes tracked by the BugReporter.
+  /// Iterator over the set of BugTypes tracked by the BugReporter.
   using iterator = BugTypesTy::iterator;
   iterator begin() { return BugTypes.begin(); }
   iterator end() { return BugTypes.end(); }
 
-  /// \brief Iterator over the set of BugReports tracked by the BugReporter.
+  /// Iterator over the set of BugReports tracked by the BugReporter.
   using EQClasses_iterator = llvm::FoldingSet<BugReportEquivClass>::iterator;
   EQClasses_iterator EQClasses_begin() { return EQClasses.begin(); }
   EQClasses_iterator EQClasses_end() { return EQClasses.end(); }
@@ -479,15 +475,15 @@
 
   AnalyzerOptions &getAnalyzerOptions() { return D.getAnalyzerOptions(); }
 
-  virtual bool generatePathDiagnostic(PathDiagnostic& pathDiagnostic,
-                                      PathDiagnosticConsumer &PC,
-                                      ArrayRef<BugReport *> &bugReports) {
-    return true;
+  virtual std::unique_ptr<DiagnosticForConsumerMapTy>
+  generatePathDiagnostics(ArrayRef<PathDiagnosticConsumer *> consumers,
+                          ArrayRef<BugReport *> &bugReports) {
+    return {};
   }
 
   void Register(BugType *BT);
 
-  /// \brief Add the given report to the set of reports tracked by BugReporter.
+  /// Add the given report to the set of reports tracked by BugReporter.
   ///
   /// The reports are usually generated by the checkers. Further, they are
   /// folded based on the profile value, which is done to coalesce similar
@@ -507,13 +503,13 @@
 private:
   llvm::StringMap<BugType *> StrBugTypes;
 
-  /// \brief Returns a BugType that is associated with the given name and
+  /// Returns a BugType that is associated with the given name and
   /// category.
   BugType *getBugTypeForName(CheckName CheckName, StringRef name,
                              StringRef category);
 };
 
-// FIXME: Get rid of GRBugReporter.  It's the wrong abstraction.
+/// GRBugReporter is used for generating path-sensitive reports.
 class GRBugReporter : public BugReporter {
   ExprEngine& Eng;
 
@@ -523,10 +519,6 @@
 
   ~GRBugReporter() override;
 
-  /// getEngine - Return the analysis engine used to analyze a given
-  ///  function or method.
-  ExprEngine &getEngine() { return Eng; }
-
   /// getGraph - Get the exploded graph created by the analysis engine
   ///  for the analyzed method or function.
   ExplodedGraph &getGraph();
@@ -535,16 +527,14 @@
   ///  engine.
   ProgramStateManager &getStateManager();
 
-  /// Generates a path corresponding to one of the given bug reports.
+  /// \p bugReports A set of bug reports within a *single* equivalence class
   ///
-  /// Which report is used for path generation is not specified. The
-  /// bug reporter will try to pick the shortest path, but this is not
-  /// guaranteed.
-  ///
-  /// \return True if the report was valid and a path was generated,
-  ///         false if the reports should be considered invalid.
-  bool generatePathDiagnostic(PathDiagnostic &PD, PathDiagnosticConsumer &PC,
-                              ArrayRef<BugReport*> &bugReports) override;
+  /// \return A mapping from consumers to the corresponding diagnostics.
+  /// Iterates through the bug reports within a single equivalence class,
+  /// stops at a first non-invalidated report.
+  std::unique_ptr<DiagnosticForConsumerMapTy>
+  generatePathDiagnostics(ArrayRef<PathDiagnosticConsumer *> consumers,
+                          ArrayRef<BugReport *> &bugReports) override;
 
   /// classof - Used by isa<>, cast<>, and dyn_cast<>.
   static bool classof(const BugReporter* R) {
@@ -552,13 +542,27 @@
   }
 };
 
+
+class NodeMapClosure : public BugReport::NodeResolver {
+  InterExplodedGraphMap &M;
+
+public:
+  NodeMapClosure(InterExplodedGraphMap &m) : M(m) {}
+
+  const ExplodedNode *getOriginalNode(const ExplodedNode *N) override {
+    return M.lookup(N);
+  }
+};
+
 class BugReporterContext {
   GRBugReporter &BR;
+  NodeMapClosure NMC;
 
   virtual void anchor();
 
 public:
-  BugReporterContext(GRBugReporter& br) : BR(br) {}
+  BugReporterContext(GRBugReporter &br, InterExplodedGraphMap &Backmap)
+      : BR(br), NMC(Backmap) {}
 
   virtual ~BugReporterContext() = default;
 
@@ -582,7 +586,11 @@
     return BR.getSourceManager();
   }
 
-  virtual BugReport::NodeResolver& getNodeResolver() = 0;
+  AnalyzerOptions &getAnalyzerOptions() {
+    return BR.getAnalyzerOptions();
+  }
+
+  NodeMapClosure& getNodeResolver() { return NMC; }
 };
 
 } // namespace ento
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
index cb70c32..da019f8 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
@@ -16,6 +16,7 @@
 #define LLVM_CLANG_STATICANALYZER_CORE_BUGREPORTER_BUGREPORTERVISITORS_H
 
 #include "clang/Basic/LLVM.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
 #include "llvm/ADT/FoldingSet.h"
 #include "llvm/ADT/STLExtras.h"
@@ -38,13 +39,7 @@
 class MemRegion;
 class PathDiagnosticPiece;
 
-/// \brief BugReporterVisitors are used to add custom diagnostics along a path.
-///
-/// Custom visitors should subclass the BugReporterVisitorImpl class for a
-/// default implementation of the clone() method.
-/// (Warning: if you have a deep subclass of BugReporterVisitorImpl, the
-/// default implementation of clone() will NOT do the right thing, and you
-/// will have to provide your own implementation.)
+/// BugReporterVisitors are used to add custom diagnostics along a path.
 class BugReporterVisitor : public llvm::FoldingSetNode {
 public:
   BugReporterVisitor() = default;
@@ -52,19 +47,13 @@
   BugReporterVisitor(BugReporterVisitor &&) {}
   virtual ~BugReporterVisitor();
 
-  /// \brief Returns a copy of this BugReporter.
-  ///
-  /// Custom BugReporterVisitors should not override this method directly.
-  /// Instead, they should inherit from BugReporterVisitorImpl and provide
-  /// a protected or public copy constructor.
-  ///
-  /// (Warning: if you have a deep subclass of BugReporterVisitorImpl, the
-  /// default implementation of clone() will NOT do the right thing, and you
-  /// will have to provide your own implementation.)
-  virtual std::unique_ptr<BugReporterVisitor> clone() const = 0;
-
-  /// \brief Return a diagnostic piece which should be associated with the
+  /// Return a diagnostic piece which should be associated with the
   /// given node.
+  /// Note that this function does *not* get run on the very last node
+  /// of the report, as the PathDiagnosticPiece associated with the
+  /// last node should be unique.
+  /// Use {@code getEndPath} to customize the note associated with the report
+  /// end instead.
   ///
   /// The last parameter can be used to register a new visitor with the given
   /// BugReport while processing a node.
@@ -72,40 +61,29 @@
   VisitNode(const ExplodedNode *Succ, const ExplodedNode *Pred,
             BugReporterContext &BRC, BugReport &BR) = 0;
 
-  /// \brief Provide custom definition for the final diagnostic piece on the
+  /// Last function called on the visitor, no further calls to VisitNode
+  /// would follow.
+  virtual void finalizeVisitor(BugReporterContext &BRC,
+                               const ExplodedNode *EndPathNode,
+                               BugReport &BR);
+
+  /// Provide custom definition for the final diagnostic piece on the
   /// path - the piece, which is displayed before the path is expanded.
   ///
-  /// If returns NULL the default implementation will be used.
-  /// Also note that at most one visitor of a BugReport should generate a
-  /// non-NULL end of path diagnostic piece.
-  virtual std::unique_ptr<PathDiagnosticPiece>
+  /// NOTE that this function can be implemented on at most one used visitor,
+  /// and otherwise it crahes at runtime.
+  virtual std::shared_ptr<PathDiagnosticPiece>
   getEndPath(BugReporterContext &BRC, const ExplodedNode *N, BugReport &BR);
 
   virtual void Profile(llvm::FoldingSetNodeID &ID) const = 0;
 
-  /// \brief Generates the default final diagnostic piece.
-  static std::unique_ptr<PathDiagnosticPiece>
+  /// Generates the default final diagnostic piece.
+  static std::shared_ptr<PathDiagnosticPiece>
   getDefaultEndPath(BugReporterContext &BRC, const ExplodedNode *N,
                     BugReport &BR);
 };
 
-/// This class provides a convenience implementation for clone() using the
-/// Curiously-Recurring Template Pattern. If you are implementing a custom
-/// BugReporterVisitor, subclass BugReporterVisitorImpl and provide a public
-/// or protected copy constructor.
-///
-/// (Warning: if you have a deep subclass of BugReporterVisitorImpl, the
-/// default implementation of clone() will NOT do the right thing, and you
-/// will have to provide your own implementation.)
-template <class DERIVED>
-class BugReporterVisitorImpl : public BugReporterVisitor {
-  std::unique_ptr<BugReporterVisitor> clone() const override {
-    return llvm::make_unique<DERIVED>(*static_cast<const DERIVED *>(this));
-  }
-};
-
-class FindLastStoreBRVisitor final
-    : public BugReporterVisitorImpl<FindLastStoreBRVisitor> {
+class FindLastStoreBRVisitor final : public BugReporterVisitor {
   const MemRegion *R;
   SVal V;
   bool Satisfied = false;
@@ -132,8 +110,7 @@
                                                  BugReport &BR) override;
 };
 
-class TrackConstraintBRVisitor final
-    : public BugReporterVisitorImpl<TrackConstraintBRVisitor> {
+class TrackConstraintBRVisitor final : public BugReporterVisitor {
   DefinedSVal Constraint;
   bool Assumption;
   bool IsSatisfied = false;
@@ -165,9 +142,8 @@
 };
 
 /// \class NilReceiverBRVisitor
-/// \brief Prints path notes when a message is sent to a nil receiver.
-class NilReceiverBRVisitor final
-    : public BugReporterVisitorImpl<NilReceiverBRVisitor> {
+/// Prints path notes when a message is sent to a nil receiver.
+class NilReceiverBRVisitor final : public BugReporterVisitor {
 public:
   void Profile(llvm::FoldingSetNodeID &ID) const override {
     static int x = 0;
@@ -185,8 +161,7 @@
 };
 
 /// Visitor that tries to report interesting diagnostics from conditions.
-class ConditionBRVisitor final
-    : public BugReporterVisitorImpl<ConditionBRVisitor> {
+class ConditionBRVisitor final : public BugReporterVisitor {
   // FIXME: constexpr initialization isn't supported by MSVC2013.
   static const char *const GenericTrueMessage;
   static const char *const GenericFalseMessage;
@@ -245,11 +220,11 @@
   static bool isPieceMessageGeneric(const PathDiagnosticPiece *Piece);
 };
 
-/// \brief Suppress reports that might lead to known false positives.
+/// Suppress reports that might lead to known false positives.
 ///
 /// Currently this suppresses reports based on locations of bugs.
 class LikelyFalsePositiveSuppressionBRVisitor final
-    : public BugReporterVisitorImpl<LikelyFalsePositiveSuppressionBRVisitor> {
+    : public BugReporterVisitor {
 public:
   static void *getTag() {
     static int Tag = 0;
@@ -267,18 +242,16 @@
     return nullptr;
   }
 
-  std::unique_ptr<PathDiagnosticPiece> getEndPath(BugReporterContext &BRC,
-                                                  const ExplodedNode *N,
-                                                  BugReport &BR) override;
+  void finalizeVisitor(BugReporterContext &BRC, const ExplodedNode *N,
+                       BugReport &BR) override;
 };
 
-/// \brief When a region containing undefined value or '0' value is passed 
+/// When a region containing undefined value or '0' value is passed
 /// as an argument in a call, marks the call as interesting.
 ///
 /// As a result, BugReporter will not prune the path through the function even
 /// if the region's contents are not modified/accessed by the call.
-class UndefOrNullArgVisitor final
-    : public BugReporterVisitorImpl<UndefOrNullArgVisitor> {
+class UndefOrNullArgVisitor final : public BugReporterVisitor {
   /// The interesting memory region this visitor is tracking.
   const MemRegion *R;
 
@@ -297,8 +270,7 @@
                                                  BugReport &BR) override;
 };
 
-class SuppressInlineDefensiveChecksVisitor final
-    : public BugReporterVisitorImpl<SuppressInlineDefensiveChecksVisitor> {
+class SuppressInlineDefensiveChecksVisitor final : public BugReporterVisitor {
   /// The symbolic value for which we are tracking constraints.
   /// This value is constrained to null in the end of path.
   DefinedSVal V;
@@ -328,8 +300,7 @@
                                                  BugReport &BR) override;
 };
 
-class CXXSelfAssignmentBRVisitor final
-    : public BugReporterVisitorImpl<CXXSelfAssignmentBRVisitor> {
+class CXXSelfAssignmentBRVisitor final : public BugReporterVisitor {
   bool Satisfied = false;
 
 public:
@@ -343,6 +314,44 @@
                                                  BugReport &BR) override;
 };
 
+/// The bug visitor prints a diagnostic message at the location where a given
+/// variable was tainted.
+class TaintBugVisitor final : public BugReporterVisitor {
+private:
+  const SVal V;
+
+public:
+  TaintBugVisitor(const SVal V) : V(V) {}
+  void Profile(llvm::FoldingSetNodeID &ID) const override { ID.Add(V); }
+
+  std::shared_ptr<PathDiagnosticPiece> VisitNode(const ExplodedNode *N,
+                                                 const ExplodedNode *PrevN,
+                                                 BugReporterContext &BRC,
+                                                 BugReport &BR) override;
+};
+
+/// The bug visitor will walk all the nodes in a path and collect all the
+/// constraints. When it reaches the root node, will create a refutation
+/// manager and check if the constraints are satisfiable
+class FalsePositiveRefutationBRVisitor final : public BugReporterVisitor {
+private:
+  /// Holds the constraints in a given path
+  ConstraintRangeTy Constraints;
+
+public:
+  FalsePositiveRefutationBRVisitor();
+
+  void Profile(llvm::FoldingSetNodeID &ID) const override;
+
+  std::shared_ptr<PathDiagnosticPiece> VisitNode(const ExplodedNode *N,
+                                                 const ExplodedNode *PrevN,
+                                                 BugReporterContext &BRC,
+                                                 BugReport &BR) override;
+
+  void finalizeVisitor(BugReporterContext &BRC, const ExplodedNode *EndPathNode,
+                       BugReport &BR) override;
+};
+
 namespace bugreporter {
 
 /// Attempts to add visitors to trace a null or undefined value back to its
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
index d3163ef..3c1f8f7 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugType.h
@@ -1,4 +1,4 @@
-//===---  BugType.h - Bug Information Desciption ----------------*- C++ -*-===//
+//===---  BugType.h - Bug Information Description ---------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -52,7 +52,7 @@
     // FIXME: This is a workaround to ensure that the correct check name is used
     // The check names are set after the constructors are run.
     // In case the BugType object is initialized in the checker's ctor
-    // the Check field will be empty. To circumvent this problem we use 
+    // the Check field will be empty. To circumvent this problem we use
     // CheckerBase whenever it is possible.
     StringRef CheckName =
         Checker ? Checker->getCheckName().getName() : Check.getName();
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
index 421369e..3dc57f1 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h
@@ -71,17 +71,17 @@
     PDFileEntry(llvm::FoldingSetNodeID &NodeID) : NodeID(NodeID) {}
 
     using ConsumerFiles = std::vector<std::pair<StringRef, StringRef>>;
-    
-    /// \brief A vector of <consumer,file> pairs.
+
+    /// A vector of <consumer,file> pairs.
     ConsumerFiles files;
-    
-    /// \brief A precomputed hash tag used for uniquing PDFileEntry objects.
+
+    /// A precomputed hash tag used for uniquing PDFileEntry objects.
     const llvm::FoldingSetNodeID NodeID;
 
-    /// \brief Used for profiling in the FoldingSet.
+    /// Used for profiling in the FoldingSet.
     void Profile(llvm::FoldingSetNodeID &ID) { ID = NodeID; }
   };
-  
+
   class FilesMade {
     llvm::BumpPtrAllocator Alloc;
     llvm::FoldingSet<PDFileEntry> Set;
@@ -94,7 +94,7 @@
     void addDiagnostic(const PathDiagnostic &PD,
                        StringRef ConsumerName,
                        StringRef fileName);
-    
+
     PDFileEntry::ConsumerFiles *getFiles(const PathDiagnostic &PD);
   };
 
@@ -114,11 +114,20 @@
 
   void HandlePathDiagnostic(std::unique_ptr<PathDiagnostic> D);
 
-  enum PathGenerationScheme { None, Minimal, Extensive, AlternateExtensive };
+  enum PathGenerationScheme {
+    /// Only runs visitors, no output generated.
+    None,
+
+    /// Used for HTML and text output.
+    Minimal,
+
+    /// Used for plist output, used for "arrows" generation.
+    Extensive,
+  };
 
   virtual PathGenerationScheme getGenerationScheme() const { return Minimal; }
   virtual bool supportsLogicalOpControlFlow() const { return false; }
-  
+
   /// Return true if the PathDiagnosticConsumer supports individual
   /// PathDiagnostics that span multiple files.
   virtual bool supportsCrossFileDiagnostics() const { return false; }
@@ -169,10 +178,9 @@
   PathDiagnosticLocation() = default;
 
   /// Create a location corresponding to the given statement.
-  PathDiagnosticLocation(const Stmt *s,
-                         const SourceManager &sm,
+  PathDiagnosticLocation(const Stmt *s, const SourceManager &sm,
                          LocationOrAnalysisDeclContext lac)
-      : K(s->getLocStart().isValid() ? StmtK : SingleLocK),
+      : K(s->getBeginLoc().isValid() ? StmtK : SingleLocK),
         S(K == StmtK ? s : nullptr), SM(&sm),
         Loc(genLocation(SourceLocation(), lac)), Range(genRange(lac)) {
     assert(K == SingleLocK || S);
@@ -207,6 +215,15 @@
   static PathDiagnosticLocation createBegin(const Decl *D,
                                             const SourceManager &SM);
 
+  /// Create a location for the beginning of the declaration.
+  /// The third argument is ignored, useful for generic treatment
+  /// of statements and declarations.
+  static PathDiagnosticLocation
+  createBegin(const Decl *D, const SourceManager &SM,
+              const LocationOrAnalysisDeclContext LAC) {
+    return createBegin(D, SM);
+  }
+
   /// Create a location for the beginning of the statement.
   static PathDiagnosticLocation createBegin(const Stmt *S,
                                             const SourceManager &SM,
@@ -287,6 +304,12 @@
   }
 
   const Stmt *asStmt() const { assert(isValid()); return S; }
+  const Stmt *getStmtOrNull() const {
+    if (!isValid())
+      return nullptr;
+    return asStmt();
+  }
+
   const Decl *asDecl() const { assert(isValid()); return D; }
 
   bool hasRange() const { return K == StmtK || K == RangeK || K == DeclK; }
@@ -298,16 +321,16 @@
   void flatten();
 
   const SourceManager& getManager() const { assert(isValid()); return *SM; }
-  
+
   void Profile(llvm::FoldingSetNodeID &ID) const;
 
   void dump() const;
 
-  /// \brief Given an exploded node, retrieve the statement that should be used 
+  /// Given an exploded node, retrieve the statement that should be used
   /// for the diagnostic location.
   static const Stmt *getStmt(const ExplodedNode *N);
 
-  /// \brief Retrieve the statement corresponding to the successor node.
+  /// Retrieve the statement corresponding to the successor node.
   static const Stmt *getNextStmt(const ExplodedNode *N);
 };
 
@@ -330,7 +353,7 @@
     Start.flatten();
     End.flatten();
   }
-  
+
   void Profile(llvm::FoldingSetNodeID &ID) const {
     Start.Profile(ID);
     End.Profile(ID);
@@ -351,10 +374,10 @@
   const Kind kind;
   const DisplayHint Hint;
 
-  /// \brief In the containing bug report, this piece is the last piece from
+  /// In the containing bug report, this piece is the last piece from
   /// the main source file.
   bool LastInMainSourceFile = false;
-  
+
   /// A constant string that can be used to tag the PathDiagnosticPiece,
   /// typically with the identification of the creator.  The actual pointer
   /// value is meant to be an identifier; the string itself is useful for
@@ -377,14 +400,14 @@
 
   /// Tag this PathDiagnosticPiece with the given C-string.
   void setTag(const char *tag) { Tag = tag; }
-  
+
   /// Return the opaque tag (if any) on the PathDiagnosticPiece.
   const void *getTag() const { return Tag.data(); }
-  
+
   /// Return the string representation of the tag.  This is useful
   /// for debugging.
   StringRef getTagStr() const { return Tag; }
-  
+
   /// getDisplayHint - Return a hint indicating where the diagnostic should
   ///  be displayed by the PathDiagnosticConsumer.
   DisplayHint getDisplayHint() const { return Hint; }
@@ -462,19 +485,19 @@
   }
 };
 
-/// \brief Interface for classes constructing Stack hints.
+/// Interface for classes constructing Stack hints.
 ///
-/// If a PathDiagnosticEvent occurs in a different frame than the final 
+/// If a PathDiagnosticEvent occurs in a different frame than the final
 /// diagnostic the hints can be used to summarize the effect of the call.
 class StackHintGenerator {
 public:
   virtual ~StackHintGenerator() = 0;
 
-  /// \brief Construct the Diagnostic message for the given ExplodedNode.
+  /// Construct the Diagnostic message for the given ExplodedNode.
   virtual std::string getMessage(const ExplodedNode *N) = 0;
 };
 
-/// \brief Constructs a Stack hint for the given symbol.
+/// Constructs a Stack hint for the given symbol.
 ///
 /// The class knows how to construct the stack hint message based on
 /// traversing the CallExpr associated with the call and checking if the given
@@ -489,7 +512,7 @@
   StackHintGeneratorForSymbol(SymbolRef S, StringRef M) : Sym(S), Msg(M) {}
   ~StackHintGeneratorForSymbol() override = default;
 
-  /// \brief Search the call expression for the symbol Sym and dispatch the
+  /// Search the call expression for the symbol Sym and dispatch the
   /// 'getMessageForX()' methods to construct a specific message.
   std::string getMessage(const ExplodedNode *N) override;
 
@@ -539,12 +562,12 @@
 
   bool hasCallStackHint() { return (bool)CallStackHint; }
 
-  /// Produce the hint for the given node. The node contains 
+  /// Produce the hint for the given node. The node contains
   /// information about the call for which the diagnostic can be generated.
   std::string getCallStackMessage(const ExplodedNode *N) {
     if (CallStackHint)
       return CallStackHint->getMessage(N);
-    return {};  
+    return {};
   }
 
   void dump() const override;
@@ -581,16 +604,16 @@
 public:
   PathDiagnosticLocation callEnter;
   PathDiagnosticLocation callEnterWithin;
-  PathDiagnosticLocation callReturn;  
+  PathDiagnosticLocation callReturn;
   PathPieces path;
 
   ~PathDiagnosticCallPiece() override;
 
   const Decl *getCaller() const { return Caller; }
-  
+
   const Decl *getCallee() const { return Callee; }
   void setCallee(const CallEnter &CE, const SourceManager &SM);
-  
+
   bool hasCallStackMessage() { return !CallStackMessage.empty(); }
   void setCallStackMessage(StringRef st) { CallStackMessage = st; }
 
@@ -701,7 +724,7 @@
   ~PathDiagnosticMacroPiece() override;
 
   PathPieces subPieces;
-  
+
   bool containsEvent() const;
 
   void flattenLocations() override {
@@ -750,13 +773,13 @@
   std::string Category;
   std::deque<std::string> OtherDesc;
 
-  /// \brief Loc The location of the path diagnostic report.
+  /// Loc The location of the path diagnostic report.
   PathDiagnosticLocation Loc;
 
   PathPieces pathImpl;
   SmallVector<PathPieces *, 3> pathStack;
-  
-  /// \brief Important bug uniqueing location.
+
+  /// Important bug uniqueing location.
   /// The location info is useful to differentiate between bugs.
   PathDiagnosticLocation UniqueingLoc;
   const Decl *UniqueingDecl;
@@ -772,22 +795,22 @@
                  const Decl *DeclToUnique,
                  std::unique_ptr<FilesToLineNumsMap> ExecutedLines);
   ~PathDiagnostic();
-  
+
   const PathPieces &path;
 
-  /// Return the path currently used by builders for constructing the 
+  /// Return the path currently used by builders for constructing the
   /// PathDiagnostic.
   PathPieces &getActivePath() {
     if (pathStack.empty())
       return pathImpl;
     return *pathStack.back();
   }
-  
+
   /// Return a mutable version of 'path'.
   PathPieces &getMutablePieces() {
     return pathImpl;
   }
-    
+
   /// Return the unrolled size of the path.
   unsigned full_size();
 
@@ -796,7 +819,7 @@
 
   bool isWithinCall() const { return !pathStack.empty(); }
 
-  void setEndOfPath(std::unique_ptr<PathDiagnosticPiece> EndPiece) {
+  void setEndOfPath(std::shared_ptr<PathDiagnosticPiece> EndPiece) {
     assert(!Loc.isValid() && "End location already set!");
     Loc = EndPiece->getLocation();
     assert(Loc.isValid() && "Invalid location for end-of-path piece");
@@ -809,13 +832,7 @@
     VerboseDesc += S;
   }
 
-  void resetPath() {
-    pathStack.clear();
-    pathImpl.clear();
-    Loc = PathDiagnosticLocation();
-  }
-
-  /// \brief If the last piece of the report point to the header file, resets
+  /// If the last piece of the report point to the header file, resets
   /// the location of the report to be the last location in the main source
   /// file.
   void resetDiagnosticLocationToMainFile();
@@ -850,16 +867,15 @@
   filesmap_iterator executedLines_end() const { return ExecutedLines->end(); }
 
   PathDiagnosticLocation getLocation() const {
-    assert(Loc.isValid() && "No report location set yet!");
     return Loc;
   }
 
-  /// \brief Get the location on which the report should be uniqued.
+  /// Get the location on which the report should be uniqued.
   PathDiagnosticLocation getUniqueingLoc() const {
     return UniqueingLoc;
   }
 
-  /// \brief Get the declaration containing the uniqueing location.
+  /// Get the declaration containing the uniqueing location.
   const Decl *getUniqueingDecl() const {
     return UniqueingDecl;
   }
@@ -881,7 +897,7 @@
   /// Two diagnostics with the same issue along different paths will generate
   /// different profiles.
   void FullProfile(llvm::FoldingSetNodeID &ID) const;
-};  
+};
 
 } // namespace ento
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
index 305abea..8484cfe 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/Checker.h
@@ -63,7 +63,7 @@
 class EndOfTranslationUnit {
   template <typename CHECKER>
   static void _checkEndOfTranslationUnit(void *checker,
-                                         const TranslationUnitDecl *TU, 
+                                         const TranslationUnitDecl *TU,
                                          AnalysisManager& mgr,
                                          BugReporter &BR) {
     ((const CHECKER *)checker)->checkEndOfTranslationUnit(TU, mgr, BR);
@@ -254,9 +254,9 @@
 
 class EndFunction {
   template <typename CHECKER>
-  static void _checkEndFunction(void *checker,
+  static void _checkEndFunction(void *checker, const ReturnStmt *RS,
                                 CheckerContext &C) {
-    ((const CHECKER *)checker)->checkEndFunction(C);
+    ((const CHECKER *)checker)->checkEndFunction(RS, C);
   }
 
 public:
@@ -331,7 +331,7 @@
 
 class RegionChanges {
   template <typename CHECKER>
-  static ProgramStateRef 
+  static ProgramStateRef
   _checkRegionChanges(void *checker,
                       ProgramStateRef state,
                       const InvalidatedSymbols *invalidated,
@@ -370,7 +370,7 @@
                                                             Kind);
 
     InvalidatedSymbols RegularEscape;
-    for (InvalidatedSymbols::const_iterator I = Escaped.begin(), 
+    for (InvalidatedSymbols::const_iterator I = Escaped.begin(),
                                             E = Escaped.end(); I != E; ++I)
       if (!ETraits->hasTrait(*I,
               RegionAndSymbolInvalidationTraits::TK_PreserveContents) &&
@@ -410,7 +410,7 @@
       return State;
 
     InvalidatedSymbols ConstEscape;
-    for (InvalidatedSymbols::const_iterator I = Escaped.begin(), 
+    for (InvalidatedSymbols::const_iterator I = Escaped.begin(),
                                             E = Escaped.end(); I != E; ++I)
       if (ETraits->hasTrait(*I,
               RegionAndSymbolInvalidationTraits::TK_PreserveContents) &&
@@ -436,7 +436,7 @@
   }
 };
 
-  
+
 template <typename EVENT>
 class Event {
   template <typename CHECKER>
@@ -504,7 +504,7 @@
 /// Dump checker name to stream.
 raw_ostream& operator<<(raw_ostream &Out, const CheckerBase &Checker);
 
-/// Tag that can use a checker name as a message provider 
+/// Tag that can use a checker name as a message provider
 /// (see SimpleProgramPointTag).
 class CheckerProgramPointTag : public SimpleProgramPointTag {
 public:
@@ -548,7 +548,7 @@
   }
 };
 
-/// \brief We dereferenced a location that may be null.
+/// We dereferenced a location that may be null.
 struct ImplicitNullDerefEvent {
   SVal Location;
   bool IsLoad;
@@ -560,7 +560,7 @@
   bool IsDirectDereference;
 };
 
-/// \brief A helper class which wraps a boolean value set to false by default.
+/// A helper class which wraps a boolean value set to false by default.
 ///
 /// This class should behave exactly like 'bool' except that it doesn't need to
 /// be explicitly initialized.
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
index 081718e..463c842 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerManager.h
@@ -71,7 +71,7 @@
   }
 };
 
-/// \brief Describes the different reasons a pointer escapes
+/// Describes the different reasons a pointer escapes
 /// during analysis.
 enum PointerEscapeKind {
   /// A pointer escapes due to binding its value to a location
@@ -86,7 +86,7 @@
   /// argument to a function.
   PSK_IndirectEscapeOnCall,
 
-  /// The reason for pointer escape is unknown. For example, 
+  /// The reason for pointer escape is unknown. For example,
   /// a region containing this pointer is invalidated.
   PSK_EscapeOther
 };
@@ -115,13 +115,14 @@
 };
 
 class CheckerManager {
+  ASTContext &Context;
   const LangOptions LangOpts;
   AnalyzerOptions &AOptions;
   CheckName CurrentCheckName;
 
 public:
-  CheckerManager(const LangOptions &langOpts, AnalyzerOptions &AOptions)
-      : LangOpts(langOpts), AOptions(AOptions) {}
+  CheckerManager(ASTContext &Context, AnalyzerOptions &AOptions)
+      : Context(Context), LangOpts(Context.getLangOpts()), AOptions(AOptions) {}
 
   ~CheckerManager();
 
@@ -134,6 +135,7 @@
 
   const LangOptions &getLangOpts() const { return LangOpts; }
   AnalyzerOptions &getAnalyzerOptions() { return AOptions; }
+  ASTContext &getASTContext() { return Context; }
 
   using CheckerRef = CheckerBase *;
   using CheckerTag = const void *;
@@ -143,32 +145,19 @@
 // registerChecker
 //===----------------------------------------------------------------------===//
 
-  /// \brief Used to register checkers.
+  /// Used to register checkers.
+  /// All arguments are automatically passed through to the checker
+  /// constructor.
   ///
   /// \returns a pointer to the checker object.
-  template <typename CHECKER>
-  CHECKER *registerChecker() {
+  template <typename CHECKER, typename... AT>
+  CHECKER *registerChecker(AT &&... Args) {
     CheckerTag tag = getTag<CHECKER>();
     CheckerRef &ref = CheckerTags[tag];
     if (ref)
       return static_cast<CHECKER *>(ref); // already registered.
 
-    CHECKER *checker = new CHECKER();
-    checker->Name = CurrentCheckName;
-    CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
-    CHECKER::_register(checker, *this);
-    ref = checker;
-    return checker;
-  }
-
-  template <typename CHECKER>
-  CHECKER *registerChecker(AnalyzerOptions &AOpts) {
-    CheckerTag tag = getTag<CHECKER>();
-    CheckerRef &ref = CheckerTags[tag];
-    if (ref)
-      return static_cast<CHECKER *>(ref); // already registered.
-
-    CHECKER *checker = new CHECKER(AOpts);
+    CHECKER *checker = new CHECKER(std::forward<AT>(Args)...);
     checker->Name = CurrentCheckName;
     CheckerDtors.push_back(CheckerDtor(checker, destruct<CHECKER>));
     CHECKER::_register(checker, *this);
@@ -180,11 +169,11 @@
 // Functions for running checkers for AST traversing..
 //===----------------------------------------------------------------------===//
 
-  /// \brief Run checkers handling Decls.
+  /// Run checkers handling Decls.
   void runCheckersOnASTDecl(const Decl *D, AnalysisManager& mgr,
                             BugReporter &BR);
 
-  /// \brief Run checkers handling Decls containing a Stmt body.
+  /// Run checkers handling Decls containing a Stmt body.
   void runCheckersOnASTBody(const Decl *D, AnalysisManager& mgr,
                             BugReporter &BR);
 
@@ -192,7 +181,7 @@
 // Functions for running checkers for path-sensitive checking.
 //===----------------------------------------------------------------------===//
 
-  /// \brief Run checkers for pre-visiting Stmts.
+  /// Run checkers for pre-visiting Stmts.
   ///
   /// The notification is performed for every explored CFGElement, which does
   /// not include the control flow statements such as IfStmt.
@@ -205,7 +194,7 @@
     runCheckersForStmt(/*isPreVisit=*/true, Dst, Src, S, Eng);
   }
 
-  /// \brief Run checkers for post-visiting Stmts.
+  /// Run checkers for post-visiting Stmts.
   ///
   /// The notification is performed for every explored CFGElement, which does
   /// not include the control flow statements such as IfStmt.
@@ -219,13 +208,13 @@
     runCheckersForStmt(/*isPreVisit=*/false, Dst, Src, S, Eng, wasInlined);
   }
 
-  /// \brief Run checkers for visiting Stmts.
+  /// Run checkers for visiting Stmts.
   void runCheckersForStmt(bool isPreVisit,
                           ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
                           const Stmt *S, ExprEngine &Eng,
                           bool wasInlined = false);
 
-  /// \brief Run checkers for pre-visiting obj-c messages.
+  /// Run checkers for pre-visiting obj-c messages.
   void runCheckersForPreObjCMessage(ExplodedNodeSet &Dst,
                                     const ExplodedNodeSet &Src,
                                     const ObjCMethodCall &msg,
@@ -233,7 +222,7 @@
     runCheckersForObjCMessage(ObjCMessageVisitKind::Pre, Dst, Src, msg, Eng);
   }
 
-  /// \brief Run checkers for post-visiting obj-c messages.
+  /// Run checkers for post-visiting obj-c messages.
   void runCheckersForPostObjCMessage(ExplodedNodeSet &Dst,
                                      const ExplodedNodeSet &Src,
                                      const ObjCMethodCall &msg,
@@ -243,7 +232,7 @@
                               wasInlined);
   }
 
-  /// \brief Run checkers for visiting an obj-c message to nil.
+  /// Run checkers for visiting an obj-c message to nil.
   void runCheckersForObjCMessageNil(ExplodedNodeSet &Dst,
                                     const ExplodedNodeSet &Src,
                                     const ObjCMethodCall &msg,
@@ -252,20 +241,20 @@
                               Eng);
   }
 
-  /// \brief Run checkers for visiting obj-c messages.
+  /// Run checkers for visiting obj-c messages.
   void runCheckersForObjCMessage(ObjCMessageVisitKind visitKind,
                                  ExplodedNodeSet &Dst,
                                  const ExplodedNodeSet &Src,
                                  const ObjCMethodCall &msg, ExprEngine &Eng,
                                  bool wasInlined = false);
 
-  /// \brief Run checkers for pre-visiting obj-c messages.
+  /// Run checkers for pre-visiting obj-c messages.
   void runCheckersForPreCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
                              const CallEvent &Call, ExprEngine &Eng) {
     runCheckersForCallEvent(/*isPreVisit=*/true, Dst, Src, Call, Eng);
   }
 
-  /// \brief Run checkers for post-visiting obj-c messages.
+  /// Run checkers for post-visiting obj-c messages.
   void runCheckersForPostCall(ExplodedNodeSet &Dst, const ExplodedNodeSet &Src,
                               const CallEvent &Call, ExprEngine &Eng,
                               bool wasInlined = false) {
@@ -273,13 +262,13 @@
                             wasInlined);
   }
 
-  /// \brief Run checkers for visiting obj-c messages.
+  /// Run checkers for visiting obj-c messages.
   void runCheckersForCallEvent(bool isPreVisit, ExplodedNodeSet &Dst,
                                const ExplodedNodeSet &Src,
                                const CallEvent &Call, ExprEngine &Eng,
                                bool wasInlined = false);
 
-  /// \brief Run checkers for load/store of a location.
+  /// Run checkers for load/store of a location.
   void runCheckersForLocation(ExplodedNodeSet &Dst,
                               const ExplodedNodeSet &Src,
                               SVal location,
@@ -288,42 +277,43 @@
                               const Stmt *BoundEx,
                               ExprEngine &Eng);
 
-  /// \brief Run checkers for binding of a value to a location.
+  /// Run checkers for binding of a value to a location.
   void runCheckersForBind(ExplodedNodeSet &Dst,
                           const ExplodedNodeSet &Src,
                           SVal location, SVal val,
                           const Stmt *S, ExprEngine &Eng,
                           const ProgramPoint &PP);
 
-  /// \brief Run checkers for end of analysis.
+  /// Run checkers for end of analysis.
   void runCheckersForEndAnalysis(ExplodedGraph &G, BugReporter &BR,
                                  ExprEngine &Eng);
 
-  /// \brief Run checkers on beginning of function.
+  /// Run checkers on beginning of function.
   void runCheckersForBeginFunction(ExplodedNodeSet &Dst,
                                    const BlockEdge &L,
                                    ExplodedNode *Pred,
                                    ExprEngine &Eng);
 
-  /// \brief Run checkers on end of function.
+  /// Run checkers on end of function.
   void runCheckersForEndFunction(NodeBuilderContext &BC,
                                  ExplodedNodeSet &Dst,
                                  ExplodedNode *Pred,
-                                 ExprEngine &Eng);
+                                 ExprEngine &Eng,
+                                 const ReturnStmt *RS);
 
-  /// \brief Run checkers for branch condition.
+  /// Run checkers for branch condition.
   void runCheckersForBranchCondition(const Stmt *condition,
                                      ExplodedNodeSet &Dst, ExplodedNode *Pred,
                                      ExprEngine &Eng);
 
-  /// \brief Run checkers between C++ operator new and constructor calls.
+  /// Run checkers between C++ operator new and constructor calls.
   void runCheckersForNewAllocator(const CXXNewExpr *NE, SVal Target,
                                   ExplodedNodeSet &Dst,
                                   ExplodedNode *Pred,
                                   ExprEngine &Eng,
                                   bool wasInlined = false);
 
-  /// \brief Run checkers for live symbols.
+  /// Run checkers for live symbols.
   ///
   /// Allows modifying SymbolReaper object. For example, checkers can explicitly
   /// register symbols of interest as live. These symbols will not be marked
@@ -331,7 +321,7 @@
   void runCheckersForLiveSymbols(ProgramStateRef state,
                                  SymbolReaper &SymReaper);
 
-  /// \brief Run checkers for dead symbols.
+  /// Run checkers for dead symbols.
   ///
   /// Notifies checkers when symbols become dead. For example, this allows
   /// checkers to aggressively clean up/reduce the checker state and produce
@@ -342,7 +332,7 @@
                                  ExprEngine &Eng,
                                  ProgramPoint::Kind K);
 
-  /// \brief Run checkers for region changes.
+  /// Run checkers for region changes.
   ///
   /// This corresponds to the check::RegionChanges callback.
   /// \param state The current program state.
@@ -361,45 +351,45 @@
                               const LocationContext *LCtx,
                               const CallEvent *Call);
 
-  /// \brief Run checkers when pointers escape.
+  /// Run checkers when pointers escape.
   ///
   /// This notifies the checkers about pointer escape, which occurs whenever
   /// the analyzer cannot track the symbol any more. For example, as a
-  /// result of assigning a pointer into a global or when it's passed to a 
+  /// result of assigning a pointer into a global or when it's passed to a
   /// function call the analyzer cannot model.
-  /// 
+  ///
   /// \param State The state at the point of escape.
   /// \param Escaped The list of escaped symbols.
-  /// \param Call The corresponding CallEvent, if the symbols escape as 
+  /// \param Call The corresponding CallEvent, if the symbols escape as
   ///        parameters to the given call.
   /// \param Kind The reason of pointer escape.
-  /// \param ITraits Information about invalidation for a particular 
+  /// \param ITraits Information about invalidation for a particular
   ///        region/symbol.
   /// \returns Checkers can modify the state by returning a new one.
-  ProgramStateRef 
+  ProgramStateRef
   runCheckersForPointerEscape(ProgramStateRef State,
                               const InvalidatedSymbols &Escaped,
                               const CallEvent *Call,
                               PointerEscapeKind Kind,
                               RegionAndSymbolInvalidationTraits *ITraits);
 
-  /// \brief Run checkers for handling assumptions on symbolic values.
+  /// Run checkers for handling assumptions on symbolic values.
   ProgramStateRef runCheckersForEvalAssume(ProgramStateRef state,
                                            SVal Cond, bool Assumption);
 
-  /// \brief Run checkers for evaluating a call.
+  /// Run checkers for evaluating a call.
   ///
   /// Warning: Currently, the CallEvent MUST come from a CallExpr!
   void runCheckersForEvalCall(ExplodedNodeSet &Dst,
                               const ExplodedNodeSet &Src,
                               const CallEvent &CE, ExprEngine &Eng);
-  
-  /// \brief Run checkers for the entire Translation Unit.
+
+  /// Run checkers for the entire Translation Unit.
   void runCheckersOnEndOfTranslationUnit(const TranslationUnitDecl *TU,
                                          AnalysisManager &mgr,
                                          BugReporter &BR);
 
-  /// \brief Run checkers for debug-printing a ProgramState.
+  /// Run checkers for debug-printing a ProgramState.
   ///
   /// Unlike most other callbacks, any checker can simply implement the virtual
   /// method CheckerBase::printState if it has custom data to print.
@@ -431,39 +421,40 @@
 //===----------------------------------------------------------------------===//
 
   using CheckStmtFunc = CheckerFn<void (const Stmt *, CheckerContext &)>;
-  
+
   using CheckObjCMessageFunc =
       CheckerFn<void (const ObjCMethodCall &, CheckerContext &)>;
 
   using CheckCallFunc =
       CheckerFn<void (const CallEvent &, CheckerContext &)>;
-  
+
   using CheckLocationFunc =
       CheckerFn<void (const SVal &location, bool isLoad, const Stmt *S,
                       CheckerContext &)>;
-  
+
   using CheckBindFunc =
       CheckerFn<void (const SVal &location, const SVal &val, const Stmt *S,
                       CheckerContext &)>;
-  
+
   using CheckEndAnalysisFunc =
       CheckerFn<void (ExplodedGraph &, BugReporter &, ExprEngine &)>;
 
   using CheckBeginFunctionFunc = CheckerFn<void (CheckerContext &)>;
 
-  using CheckEndFunctionFunc = CheckerFn<void (CheckerContext &)>;
-  
+  using CheckEndFunctionFunc =
+      CheckerFn<void (const ReturnStmt *, CheckerContext &)>;
+
   using CheckBranchConditionFunc =
       CheckerFn<void (const Stmt *, CheckerContext &)>;
 
   using CheckNewAllocatorFunc =
       CheckerFn<void (const CXXNewExpr *, SVal, CheckerContext &)>;
-  
+
   using CheckDeadSymbolsFunc =
       CheckerFn<void (SymbolReaper &, CheckerContext &)>;
-  
+
   using CheckLiveSymbolsFunc = CheckerFn<void (ProgramStateRef,SymbolReaper &)>;
-  
+
   using CheckRegionChangesFunc =
       CheckerFn<ProgramStateRef (ProgramStateRef,
                                  const InvalidatedSymbols *symbols,
@@ -471,17 +462,17 @@
                                  ArrayRef<const MemRegion *> Regions,
                                  const LocationContext *LCtx,
                                  const CallEvent *Call)>;
-  
+
   using CheckPointerEscapeFunc =
       CheckerFn<ProgramStateRef (ProgramStateRef,
                                  const InvalidatedSymbols &Escaped,
                                  const CallEvent *Call, PointerEscapeKind Kind,
                                  RegionAndSymbolInvalidationTraits *ITraits)>;
-  
+
   using EvalAssumeFunc =
       CheckerFn<ProgramStateRef (ProgramStateRef, const SVal &cond,
                                  bool assumption)>;
-  
+
   using EvalCallFunc = CheckerFn<bool (const CallExpr *, CheckerContext &)>;
 
   using CheckEndOfTranslationUnit =
@@ -509,7 +500,7 @@
 
   void _registerForEndAnalysis(CheckEndAnalysisFunc checkfn);
 
-  void _registerForBeginFunction(CheckEndFunctionFunc checkfn);
+  void _registerForBeginFunction(CheckBeginFunctionFunc checkfn);
   void _registerForEndFunction(CheckEndFunctionFunc checkfn);
 
   void _registerForBranchCondition(CheckBranchConditionFunc checkfn);
@@ -542,7 +533,7 @@
   template <typename EVENT>
   void _registerListenerForEvent(CheckEventFunc checkfn) {
     EventInfo &info = Events[getTag<EVENT>()];
-    info.Checkers.push_back(checkfn);    
+    info.Checkers.push_back(checkfn);
   }
 
   template <typename EVENT>
@@ -647,7 +638,7 @@
 
     EventInfo() = default;
   };
-  
+
   using EventsTy = llvm::DenseMap<EventTag, EventInfo>;
   EventsTy Events;
 };
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h
index e981871..2d13bf3 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerOptInfo.h
@@ -28,7 +28,7 @@
 public:
   CheckerOptInfo(StringRef name, bool enable)
     : Name(name), Enable(enable), Claimed(false) { }
-  
+
   StringRef getName() const { return Name; }
   bool isEnabled() const { return Enable; }
   bool isDisabled() const { return !isEnabled(); }
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerRegistry.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
index 3b26ed3..d580dda 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/CheckerRegistry.h
@@ -1,4 +1,4 @@
-//===--- CheckerRegistry.h - Maintains all available checkers ---*- C++ -*-===//
+//===- CheckerRegistry.h - Maintains all available checkers -----*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -12,6 +12,9 @@
 
 #include "clang/Basic/LLVM.h"
 #include "clang/StaticAnalyzer/Core/CheckerManager.h"
+#include "llvm/ADT/StringMap.h"
+#include "llvm/ADT/StringRef.h"
+#include <cstddef>
 #include <vector>
 
 // FIXME: move this information to an HTML file in docs/.
@@ -44,7 +47,7 @@
 // The clang_registerCheckers function may add any number of checkers to the
 // registry. If any checkers require additional initialization, use the three-
 // argument form of CheckerRegistry::addChecker.
-// 
+//
 // To load a checker plugin, specify the full path to the dynamic library as
 // the argument to the -load option in the cc1 frontend. You can then enable
 // your custom checker using the -analyzer-checker:
@@ -64,8 +67,9 @@
 #endif
 
 namespace clang {
-class DiagnosticsEngine;
+
 class AnalyzerOptions;
+class DiagnosticsEngine;
 
 namespace ento {
 
@@ -81,17 +85,18 @@
 public:
   /// Initialization functions perform any necessary setup for a checker.
   /// They should include a call to CheckerManager::registerChecker.
-  typedef void (*InitializationFunction)(CheckerManager &);
+  using InitializationFunction = void (*)(CheckerManager &);
+
   struct CheckerInfo {
     InitializationFunction Initialize;
     StringRef FullName;
     StringRef Desc;
 
     CheckerInfo(InitializationFunction fn, StringRef name, StringRef desc)
-    : Initialize(fn), FullName(name), Desc(desc) {}
+        : Initialize(fn), FullName(name), Desc(desc) {}
   };
 
-  typedef std::vector<CheckerInfo> CheckerInfoList;
+  using CheckerInfoList = std::vector<CheckerInfo>;
 
 private:
   template <typename T>
@@ -136,7 +141,8 @@
   mutable llvm::StringMap<size_t> Packages;
 };
 
-} // end namespace ento
-} // end namespace clang
+} // namespace ento
 
-#endif
+} // namespace clang
+
+#endif // LLVM_CLANG_STATICANALYZER_CORE_CHECKERREGISTRY_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/IssueHash.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/IssueHash.h
index b3c4f14..03997aa 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/IssueHash.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/IssueHash.h
@@ -17,7 +17,7 @@
 class FullSourceLoc;
 class LangOptions;
 
-/// \brief Get an MD5 hash to help identify bugs.
+/// Get an MD5 hash to help identify bugs.
 ///
 /// This function returns a hash that helps identify bugs within a source file.
 /// This identification can be utilized to diff diagnostic results on different
@@ -29,7 +29,7 @@
 /// location. The bugtype and the name of the checker is also part of the hash.
 /// The last component is the string representation of the enclosing declaration
 /// of the associated location.
-/// 
+///
 /// In case a new hash is introduced, the old one should still be maintained for
 /// a while. One should not introduce a new hash for every change, it is
 /// possible to introduce experimental hashes that may change in the future.
@@ -41,7 +41,7 @@
                                    llvm::StringRef BugType, const Decl *D,
                                    const LangOptions &LangOpts);
 
-/// \brief Get the string representation of issue hash. See GetIssueHash() for
+/// Get the string representation of issue hash. See GetIssueHash() for
 /// more information.
 std::string GetIssueString(const SourceManager &SM, FullSourceLoc &IssueLoc,
                            llvm::StringRef CheckerName, llvm::StringRef BugType,
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
index ce512fd..2e81aa3 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathDiagnosticConsumers.h
@@ -1,4 +1,4 @@
-//===--- PathDiagnosticClients.h - Path Diagnostic Clients ------*- C++ -*-===//
+//===--- PathDiagnosticConsumers.h - Path Diagnostic Clients ------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h
index cc8a9b8..243795e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h
@@ -16,7 +16,7 @@
 namespace clang {
 namespace ento {
 
-/// \brief A record of the "type" of an APSInt, used for conversions.
+/// A record of the "type" of an APSInt, used for conversions.
 class APSIntType {
   uint32_t BitWidth;
   bool IsUnsigned;
@@ -31,7 +31,7 @@
   uint32_t getBitWidth() const { return BitWidth; }
   bool isUnsigned() const { return IsUnsigned; }
 
-  /// \brief Convert a given APSInt, in place, to match this type.
+  /// Convert a given APSInt, in place, to match this type.
   ///
   /// This behaves like a C cast: converting 255u8 (0xFF) to s16 gives
   /// 255 (0x00FF), and converting -1s8 (0xFF) to u16 gives 65535 (0xFFFF).
@@ -88,12 +88,12 @@
   ///                       for 'unsigned char' (u8).
   RangeTestResultKind testInRange(const llvm::APSInt &Val,
                                   bool AllowMixedSign) const LLVM_READONLY;
-  
+
   bool operator==(const APSIntType &Other) const {
     return BitWidth == Other.BitWidth && IsUnsigned == Other.IsUnsigned;
   }
 
-  /// \brief Provide an ordering for finding a common conversion type.
+  /// Provide an ordering for finding a common conversion type.
   ///
   /// Unsigned integers are considered to be better conversion types than
   /// signed integers of the same width.
@@ -102,7 +102,7 @@
            std::tie(Other.BitWidth, Other.IsUnsigned);
   }
 };
-    
+
 } // end ento namespace
 } // end clang namespace
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
index 15b930b..eb91f4b 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h
@@ -45,22 +45,20 @@
 
 public:
   AnalyzerOptions &options;
-  
-  AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags,
-                  const LangOptions &lang,
+
+  AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
                   const PathDiagnosticConsumers &Consumers,
                   StoreManagerCreator storemgr,
-                  ConstraintManagerCreator constraintmgr, 
-                  CheckerManager *checkerMgr,
-                  AnalyzerOptions &Options,
-                  CodeInjector* injector = nullptr);
+                  ConstraintManagerCreator constraintmgr,
+                  CheckerManager *checkerMgr, AnalyzerOptions &Options,
+                  CodeInjector *injector = nullptr);
 
   ~AnalysisManager() override;
 
   void ClearContexts() {
     AnaCtxMgr.clear();
   }
-  
+
   AnalysisDeclContextManager& getAnalysisDeclContextManager() {
     return AnaCtxMgr;
   }
@@ -126,6 +124,36 @@
   AnalysisDeclContext *getAnalysisDeclContext(const Decl *D) {
     return AnaCtxMgr.getContext(D);
   }
+
+  static bool isInCodeFile(SourceLocation SL, const SourceManager &SM) {
+    if (SM.isInMainFile(SL))
+      return true;
+
+    // Support the "unified sources" compilation method (eg. WebKit) that
+    // involves producing non-header files that include other non-header files.
+    // We should be included directly from a UnifiedSource* file
+    // and we shouldn't be a header - which is a very safe defensive check.
+    SourceLocation IL = SM.getIncludeLoc(SM.getFileID(SL));
+    if (!IL.isValid() || !SM.isInMainFile(IL))
+      return false;
+    // Should rather be "file name starts with", but the current .getFilename
+    // includes the full path.
+    if (SM.getFilename(IL).contains("UnifiedSource")) {
+      // It might be great to reuse FrontendOptions::getInputKindForExtension()
+      // but for now it doesn't discriminate between code and header files.
+      return llvm::StringSwitch<bool>(SM.getFilename(SL).rsplit('.').second)
+          .Cases("c", "m", "mm", "C", "cc", "cp", true)
+          .Cases("cpp", "CPP", "c++", "cxx", "cppm", true)
+          .Default(false);
+    }
+
+    return false;
+  }
+
+  bool isInCodeFile(SourceLocation SL) {
+    const SourceManager &SM = getASTContext().getSourceManager();
+    return isInCodeFile(SL, SM);
+  }
 };
 
 } // enAnaCtxMgrspace
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h
index 0bbc650..1c5d4eb 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BasicValueFactory.h
@@ -155,12 +155,12 @@
 
     return getValue(TargetType.convert(From));
   }
-  
+
   const llvm::APSInt &Convert(QualType T, const llvm::APSInt &From) {
     APSIntType TargetType = getAPSIntType(T);
     if (TargetType == APSIntType(From))
       return From;
-    
+
     return getValue(TargetType.convert(From));
   }
 
@@ -211,7 +211,8 @@
   }
 
   const llvm::APSInt &getTruthValue(bool b, QualType T) {
-    return getValue(b ? 1 : 0, Ctx.getIntWidth(T), true);
+    return getValue(b ? 1 : 0, Ctx.getIntWidth(T),
+                    T->isUnsignedIntegerOrEnumerationType());
   }
 
   const llvm::APSInt &getTruthValue(bool b) {
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h
index 1d779e6..5e83109 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/BlockCounter.h
@@ -25,7 +25,7 @@
 namespace ento {
 
 /// \class BlockCounter
-/// \brief An abstract data type used to count the number of times a given
+/// An abstract data type used to count the number of times a given
 /// block has been visited along a path analyzed by CoreEngine.
 class BlockCounter {
   void *Data;
@@ -35,7 +35,7 @@
 public:
   BlockCounter() : Data(nullptr) {}
 
-  unsigned getNumVisited(const StackFrameContext *CallSite, 
+  unsigned getNumVisited(const StackFrameContext *CallSite,
                          unsigned BlockID) const;
 
   class Factory {
@@ -45,7 +45,7 @@
     ~Factory();
 
     BlockCounter GetEmptyCounter();
-    BlockCounter IncrementCount(BlockCounter BC, 
+    BlockCounter IncrementCount(BlockCounter BC,
                                   const StackFrameContext *CallSite,
                                   unsigned BlockID);
   };
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
index 5e7b3ef..5e319c7 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CallEvent.h
@@ -29,6 +29,7 @@
 #include "clang/Basic/LLVM.h"
 #include "clang/Basic/SourceLocation.h"
 #include "clang/Basic/SourceManager.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState_Fwd.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
@@ -85,17 +86,17 @@
 public:
   const static unsigned NoArgRequirement = std::numeric_limits<unsigned>::max();
 
-  /// \brief Constructs a CallDescription object.
+  /// Constructs a CallDescription object.
   ///
   /// @param FuncName The name of the function that will be matched.
   ///
   /// @param RequiredArgs The number of arguments that is expected to match a
-  /// call. Omit this parameter to match every occurance of call with a given
+  /// call. Omit this parameter to match every occurrence of call with a given
   /// name regardless the number of arguments.
   CallDescription(StringRef FuncName, unsigned RequiredArgs = NoArgRequirement)
       : FuncName(FuncName), RequiredArgs(RequiredArgs) {}
 
-  /// \brief Get the name of the function that this object matches.
+  /// Get the name of the function that this object matches.
   StringRef getFunctionName() const { return FuncName; }
 };
 
@@ -117,12 +118,12 @@
   }
 };
 
-/// \class RuntimeDefinition 
-/// \brief Defines the runtime definition of the called function.
-/// 
-/// Encapsulates the information we have about which Decl will be used 
+/// \class RuntimeDefinition
+/// Defines the runtime definition of the called function.
+///
+/// Encapsulates the information we have about which Decl will be used
 /// when the call is executed on the given path. When dealing with dynamic
-/// dispatch, the information is based on DynamicTypeInfo and might not be 
+/// dispatch, the information is based on DynamicTypeInfo and might not be
 /// precise.
 class RuntimeDefinition {
   /// The Declaration of the function which could be called at runtime.
@@ -141,18 +142,18 @@
   RuntimeDefinition(const Decl *InD, const MemRegion *InR): D(InD), R(InR) {}
 
   const Decl *getDecl() { return D; }
-    
-  /// \brief Check if the definition we have is precise. 
-  /// If not, it is possible that the call dispatches to another definition at 
+
+  /// Check if the definition we have is precise.
+  /// If not, it is possible that the call dispatches to another definition at
   /// execution time.
   bool mayHaveOtherDefinitions() { return R != nullptr; }
-  
-  /// When other definitions are possible, returns the region whose runtime type 
+
+  /// When other definitions are possible, returns the region whose runtime type
   /// determines the method definition.
   const MemRegion *getDispatchRegion() { return R; }
 };
 
-/// \brief Represents an abstract call to a function or method along a
+/// Represents an abstract call to a function or method along a
 /// particular path.
 ///
 /// CallEvents are created through the factory methods of CallEventManager.
@@ -204,14 +205,14 @@
   /// Copies this CallEvent, with vtable intact, into a new block of memory.
   virtual void cloneTo(void *Dest) const = 0;
 
-  /// \brief Get the value of arbitrary expressions at this point in the path.
+  /// Get the value of arbitrary expressions at this point in the path.
   SVal getSVal(const Stmt *S) const {
     return getState()->getSVal(S, getLocationContext());
   }
 
   using ValueList = SmallVectorImpl<SVal>;
 
-  /// \brief Used to specify non-argument regions that will be invalidated as a
+  /// Used to specify non-argument regions that will be invalidated as a
   /// result of this call.
   virtual void getExtraInvalidatedValues(ValueList &Values,
                  RegionAndSymbolInvalidationTraits *ETraits) const {}
@@ -220,43 +221,43 @@
   CallEvent &operator=(const CallEvent &) = delete;
   virtual ~CallEvent() = default;
 
-  /// \brief Returns the kind of call this is.
+  /// Returns the kind of call this is.
   virtual Kind getKind() const = 0;
 
-  /// \brief Returns the declaration of the function or method that will be
+  /// Returns the declaration of the function or method that will be
   /// called. May be null.
   virtual const Decl *getDecl() const {
     return Origin.dyn_cast<const Decl *>();
   }
 
-  /// \brief The state in which the call is being evaluated.
+  /// The state in which the call is being evaluated.
   const ProgramStateRef &getState() const {
     return State;
   }
 
-  /// \brief The context in which the call is being evaluated.
+  /// The context in which the call is being evaluated.
   const LocationContext *getLocationContext() const {
     return LCtx;
   }
 
-  /// \brief Returns the definition of the function or method that will be
+  /// Returns the definition of the function or method that will be
   /// called.
   virtual RuntimeDefinition getRuntimeDefinition() const = 0;
 
-  /// \brief Returns the expression whose value will be the result of this call.
+  /// Returns the expression whose value will be the result of this call.
   /// May be null.
   const Expr *getOriginExpr() const {
     return Origin.dyn_cast<const Expr *>();
   }
 
-  /// \brief Returns the number of arguments (explicit and implicit).
+  /// Returns the number of arguments (explicit and implicit).
   ///
   /// Note that this may be greater than the number of parameters in the
   /// callee's declaration, and that it may include arguments not written in
   /// the source.
   virtual unsigned getNumArgs() const = 0;
 
-  /// \brief Returns true if the callee is known to be from a system header.
+  /// Returns true if the callee is known to be from a system header.
   bool isInSystemHeader() const {
     const Decl *D = getDecl();
     if (!D)
@@ -277,51 +278,51 @@
     return false;
   }
 
-  /// \brief Returns true if the CallEvent is a call to a function that matches
+  /// Returns true if the CallEvent is a call to a function that matches
   /// the CallDescription.
   ///
   /// Note that this function is not intended to be used to match Obj-C method
   /// calls.
   bool isCalled(const CallDescription &CD) const;
 
-  /// \brief Returns a source range for the entire call, suitable for
+  /// Returns a source range for the entire call, suitable for
   /// outputting in diagnostics.
   virtual SourceRange getSourceRange() const {
     return getOriginExpr()->getSourceRange();
   }
 
-  /// \brief Returns the value of a given argument at the time of the call.
+  /// Returns the value of a given argument at the time of the call.
   virtual SVal getArgSVal(unsigned Index) const;
 
-  /// \brief Returns the expression associated with a given argument.
+  /// Returns the expression associated with a given argument.
   /// May be null if this expression does not appear in the source.
   virtual const Expr *getArgExpr(unsigned Index) const { return nullptr; }
 
-  /// \brief Returns the source range for errors associated with this argument.
+  /// Returns the source range for errors associated with this argument.
   ///
   /// May be invalid if the argument is not written in the source.
   virtual SourceRange getArgSourceRange(unsigned Index) const;
 
-  /// \brief Returns the result type, adjusted for references.
+  /// Returns the result type, adjusted for references.
   QualType getResultType() const;
 
-  /// \brief Returns the return value of the call.
+  /// Returns the return value of the call.
   ///
   /// This should only be called if the CallEvent was created using a state in
   /// which the return value has already been bound to the origin expression.
   SVal getReturnValue() const;
 
-  /// \brief Returns true if the type of any of the non-null arguments satisfies
+  /// Returns true if the type of any of the non-null arguments satisfies
   /// the condition.
   bool hasNonNullArgumentsWithType(bool (*Condition)(QualType)) const;
 
-  /// \brief Returns true if any of the arguments appear to represent callbacks.
+  /// Returns true if any of the arguments appear to represent callbacks.
   bool hasNonZeroCallbackArg() const;
 
-  /// \brief Returns true if any of the arguments is void*.
+  /// Returns true if any of the arguments is void*.
   bool hasVoidPointerToNonConstArg() const;
 
-  /// \brief Returns true if any of the arguments are known to escape to long-
+  /// Returns true if any of the arguments are known to escape to long-
   /// term storage, even if this method will not modify them.
   // NOTE: The exact semantics of this are still being defined!
   // We don't really want a list of hardcoded exceptions in the long run,
@@ -330,7 +331,7 @@
     return hasNonZeroCallbackArg();
   }
 
-  /// \brief Returns true if the callee is an externally-visible function in the
+  /// Returns true if the callee is an externally-visible function in the
   /// top-level namespace, such as \c malloc.
   ///
   /// You can use this call to determine that a particular function really is
@@ -348,7 +349,7 @@
   // precise callbacks.
   bool isGlobalCFunction(StringRef SpecificName = StringRef()) const;
 
-  /// \brief Returns the name of the callee, if its name is a simple identifier.
+  /// Returns the name of the callee, if its name is a simple identifier.
   ///
   /// Note that this will fail for Objective-C methods, blocks, and C++
   /// overloaded operators. The former is named by a Selector rather than a
@@ -362,11 +363,11 @@
     return ND->getIdentifier();
   }
 
-  /// \brief Returns an appropriate ProgramPoint for this call.
+  /// Returns an appropriate ProgramPoint for this call.
   ProgramPoint getProgramPoint(bool IsPreVisit = false,
                                const ProgramPointTag *Tag = nullptr) const;
 
-  /// \brief Returns a new state with all argument regions invalidated.
+  /// Returns a new state with all argument regions invalidated.
   ///
   /// This accepts an alternate state in case some processing has already
   /// occurred.
@@ -390,20 +391,60 @@
     return cloneWithState<CallEvent>(NewState);
   }
 
-  /// \brief Returns true if this is a statement is a function or method call
+  /// Returns true if this is a statement is a function or method call
   /// of some kind.
   static bool isCallStmt(const Stmt *S);
 
-  /// \brief Returns the result type of a function or method declaration.
+  /// Returns the result type of a function or method declaration.
   ///
   /// This will return a null QualType if the result type cannot be determined.
   static QualType getDeclaredResultType(const Decl *D);
 
-  /// \brief Returns true if the given decl is known to be variadic.
+  /// Returns true if the given decl is known to be variadic.
   ///
   /// \p D must not be null.
   static bool isVariadic(const Decl *D);
 
+  /// Returns AnalysisDeclContext for the callee stack frame.
+  /// Currently may fail; returns null on failure.
+  AnalysisDeclContext *getCalleeAnalysisDeclContext() const;
+
+  /// Returns the callee stack frame. That stack frame will only be entered
+  /// during analysis if the call is inlined, but it may still be useful
+  /// in intermediate calculations even if the call isn't inlined.
+  /// May fail; returns null on failure.
+  const StackFrameContext *getCalleeStackFrame() const;
+
+  /// Returns memory location for a parameter variable within the callee stack
+  /// frame. May fail; returns null on failure.
+  const VarRegion *getParameterLocation(unsigned Index) const;
+
+  /// Returns true if on the current path, the argument was constructed by
+  /// calling a C++ constructor over it. This is an internal detail of the
+  /// analysis which doesn't necessarily represent the program semantics:
+  /// if we are supposed to construct an argument directly, we may still
+  /// not do that because we don't know how (i.e., construction context is
+  /// unavailable in the CFG or not supported by the analyzer).
+  bool isArgumentConstructedDirectly(unsigned Index) const {
+    // This assumes that the object was not yet removed from the state.
+    return ExprEngine::getObjectUnderConstruction(
+        getState(), {getOriginExpr(), Index}, getCalleeStackFrame()).hasValue();
+  }
+
+  /// Some calls have parameter numbering mismatched from argument numbering.
+  /// This function converts an argument index to the corresponding
+  /// parameter index. Returns None is the argument doesn't correspond
+  /// to any parameter variable.
+  Optional<unsigned> getAdjustedParameterIndex(unsigned ArgumentIndex) const {
+    if (dyn_cast_or_null<CXXOperatorCallExpr>(getOriginExpr()) &&
+        dyn_cast_or_null<CXXMethodDecl>(getDecl())) {
+      // For member operator calls argument 0 on the expression corresponds
+      // to implicit this-parameter on the declaration.
+      return (ArgumentIndex > 0) ? Optional<unsigned>(ArgumentIndex - 1) : None;
+    }
+    return ArgumentIndex;
+  }
+
   // Iterator access to formal parameters and their types.
 private:
   struct GetTypeFn {
@@ -439,7 +480,7 @@
   void dump() const;
 };
 
-/// \brief Represents a call to any sort of function that might have a
+/// Represents a call to any sort of function that might have a
 /// FunctionDecl.
 class AnyFunctionCall : public CallEvent {
 protected:
@@ -473,7 +514,7 @@
   }
 };
 
-/// \brief Represents a C function or static C++ member function call.
+/// Represents a C function or static C++ member function call.
 ///
 /// Example: \c fun()
 class SimpleFunctionCall : public AnyFunctionCall {
@@ -509,7 +550,7 @@
   }
 };
 
-/// \brief Represents a call to a block.
+/// Represents a call to a block.
 ///
 /// Example: <tt>^{ /* ... */ }()</tt>
 class BlockCall : public CallEvent {
@@ -537,7 +578,7 @@
     return getOriginExpr()->getArg(Index);
   }
 
-  /// \brief Returns the region associated with this instance of the block.
+  /// Returns the region associated with this instance of the block.
   ///
   /// This may be NULL if the block's origin is unknown.
   const BlockDataRegion *getBlockRegion() const;
@@ -557,7 +598,7 @@
     return BD->isConversionFromLambda();
   }
 
-  /// \brief For a block converted from a C++ lambda, returns the block
+  /// For a block converted from a C++ lambda, returns the block
   /// VarRegion for the variable holding the captured C++ lambda record.
   const VarRegion *getRegionStoringCapturedLambda() const {
     assert(isConversionFromLambda());
@@ -616,7 +657,7 @@
   }
 };
 
-/// \brief Represents a non-static C++ member function call, no matter how
+/// Represents a non-static C++ member function call, no matter how
 /// it is written.
 class CXXInstanceCall : public AnyFunctionCall {
 protected:
@@ -628,14 +669,14 @@
       : AnyFunctionCall(D, St, LCtx) {}
   CXXInstanceCall(const CXXInstanceCall &Other) = default;
 
-  void getExtraInvalidatedValues(ValueList &Values, 
+  void getExtraInvalidatedValues(ValueList &Values,
          RegionAndSymbolInvalidationTraits *ETraits) const override;
 
 public:
-  /// \brief Returns the expression representing the implicit 'this' object.
+  /// Returns the expression representing the implicit 'this' object.
   virtual const Expr *getCXXThisExpr() const { return nullptr; }
 
-  /// \brief Returns the value of the implicit 'this' object.
+  /// Returns the value of the implicit 'this' object.
   virtual SVal getCXXThisVal() const;
 
   const FunctionDecl *getDecl() const override;
@@ -651,7 +692,7 @@
   }
 };
 
-/// \brief Represents a non-static C++ member function call.
+/// Represents a non-static C++ member function call.
 ///
 /// Example: \c obj.fun()
 class CXXMemberCall : public CXXInstanceCall {
@@ -691,7 +732,7 @@
   }
 };
 
-/// \brief Represents a C++ overloaded operator call where the operator is
+/// Represents a C++ overloaded operator call where the operator is
 /// implemented as a non-static member function.
 ///
 /// Example: <tt>iter + 1</tt>
@@ -730,7 +771,7 @@
   }
 };
 
-/// \brief Represents an implicit call to a C++ destructor.
+/// Represents an implicit call to a C++ destructor.
 ///
 /// This can occur at the end of a scope (for automatic objects), at the end
 /// of a full-expression (for temporaries), or as part of a delete.
@@ -752,7 +793,7 @@
                     ProgramStateRef St, const LocationContext *LCtx)
       : CXXInstanceCall(DD, St, LCtx) {
     Data = DtorDataTy(Target, IsBaseDestructor).getOpaqueValue();
-    Location = Trigger->getLocEnd();
+    Location = Trigger->getEndLoc();
   }
 
   CXXDestructorCall(const CXXDestructorCall &Other) = default;
@@ -765,7 +806,7 @@
 
   RuntimeDefinition getRuntimeDefinition() const override;
 
-  /// \brief Returns the value of the implicit 'this' object.
+  /// Returns the value of the implicit 'this' object.
   SVal getCXXThisVal() const override;
 
   /// Returns true if this is a call to a base class destructor.
@@ -780,7 +821,7 @@
   }
 };
 
-/// \brief Represents a call to a C++ constructor.
+/// Represents a call to a C++ constructor.
 ///
 /// Example: \c T(1)
 class CXXConstructorCall : public AnyFunctionCall {
@@ -822,7 +863,7 @@
     return getOriginExpr()->getArg(Index);
   }
 
-  /// \brief Returns the value of the implicit 'this' object.
+  /// Returns the value of the implicit 'this' object.
   SVal getCXXThisVal() const;
 
   void getInitialStackFrameContents(const StackFrameContext *CalleeCtx,
@@ -835,7 +876,7 @@
   }
 };
 
-/// \brief Represents the memory allocation call in a C++ new-expression.
+/// Represents the memory allocation call in a C++ new-expression.
 ///
 /// This is a call to "operator new".
 class CXXAllocatorCall : public AnyFunctionCall {
@@ -876,7 +917,7 @@
   }
 };
 
-/// \brief Represents the ways an Objective-C message send can occur.
+/// Represents the ways an Objective-C message send can occur.
 //
 // Note to maintainers: OCM_Message should always be last, since it does not
 // need to fit in the Data field's low bits.
@@ -886,7 +927,7 @@
   OCM_Message
 };
 
-/// \brief Represents any expression that calls an Objective-C method.
+/// Represents any expression that calls an Objective-C method.
 ///
 /// This includes all of the kinds listed in ObjCMessageKind.
 class ObjCMethodCall : public CallEvent {
@@ -943,13 +984,13 @@
 
   SourceRange getSourceRange() const override;
 
-  /// \brief Returns the value of the receiver at the time of this call.
+  /// Returns the value of the receiver at the time of this call.
   SVal getReceiverSVal() const;
 
-  /// \brief Return the value of 'self' if available.
+  /// Return the value of 'self' if available.
   SVal getSelfSVal() const;
 
-  /// \brief Get the interface for the receiver.
+  /// Get the interface for the receiver.
   ///
   /// This works whether this is an instance message or a class message.
   /// However, it currently just uses the static type of the receiver.
@@ -957,7 +998,7 @@
     return getOriginExpr()->getReceiverInterface();
   }
 
-  /// \brief Checks if the receiver refers to 'self' or 'super'.
+  /// Checks if the receiver refers to 'self' or 'super'.
   bool isReceiverSelfOrSuper() const;
 
   /// Returns how the message was written in the source (property access,
@@ -999,7 +1040,7 @@
   }
 };
 
-/// \brief Manages the lifetime of CallEvent objects.
+/// Manages the lifetime of CallEvent objects.
 ///
 /// CallEventManager provides a way to create arbitrary CallEvents "on the
 /// stack" as if they were value objects by keeping a cache of CallEvent-sized
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
index 2ca564d..ce2b711 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
@@ -51,7 +51,7 @@
   /// be accessible from more than one translation unit.
   #define REGISTER_SET_WITH_PROGRAMSTATE(Name, Elem) \
     REGISTER_TRAIT_WITH_PROGRAMSTATE(Name, llvm::ImmutableSet<Elem>)
-  
+
   /// Declares an immutable list of type \p NameTy, suitable for placement into
   /// the ProgramState. This is implementing using llvm::ImmutableList.
   ///
@@ -83,7 +83,7 @@
   /// If we are post visiting a call, this flag will be set if the
   /// call was inlined.  In all other cases it will be false.
   const bool wasInlined;
-  
+
   CheckerContext(NodeBuilder &builder,
                  ExprEngine &eng,
                  ExplodedNode *pred,
@@ -110,18 +110,18 @@
   StoreManager &getStoreManager() {
     return Eng.getStoreManager();
   }
-  
-  /// \brief Returns the previous node in the exploded graph, which includes
+
+  /// Returns the previous node in the exploded graph, which includes
   /// the state of the program before the checker ran. Note, checkers should
   /// not retain the node in their state since the nodes might get invalidated.
   ExplodedNode *getPredecessor() { return Pred; }
   const ProgramStateRef &getState() const { return Pred->getState(); }
 
-  /// \brief Check if the checker changed the state of the execution; ex: added
+  /// Check if the checker changed the state of the execution; ex: added
   /// a new transition or a bug report.
   bool isDifferent() { return Changed; }
 
-  /// \brief Returns the number of times the current block has been visited
+  /// Returns the number of times the current block has been visited
   /// along the analyzed path.
   unsigned blockCount() const {
     return NB.getContext().blockCount();
@@ -149,7 +149,7 @@
   BugReporter &getBugReporter() {
     return Eng.getBugReporter();
   }
-  
+
   SourceManager &getSourceManager() {
     return getBugReporter().getSourceManager();
   }
@@ -174,12 +174,12 @@
     return Pred->getLocationContext()->getAnalysisDeclContext();
   }
 
-  /// \brief Get the blockID.
+  /// Get the blockID.
   unsigned getBlockID() const {
     return NB.getContext().getBlock()->getBlockID();
   }
 
-  /// \brief If the given node corresponds to a PostStore program point,
+  /// If the given node corresponds to a PostStore program point,
   /// retrieve the location region as it was uttered in the code.
   ///
   /// This utility can be useful for generating extensive diagnostics, for
@@ -191,19 +191,19 @@
     return nullptr;
   }
 
-  /// \brief Get the value of arbitrary expressions at this point in the path.
+  /// Get the value of arbitrary expressions at this point in the path.
   SVal getSVal(const Stmt *S) const {
     return Pred->getSVal(S);
   }
 
-  /// \brief Returns true if the value of \p E is greater than or equal to \p
+  /// Returns true if the value of \p E is greater than or equal to \p
   /// Val under unsigned comparison
   bool isGreaterOrEqual(const Expr *E, unsigned long long Val);
 
   /// Returns true if the value of \p E is negative.
   bool isNegative(const Expr *E);
 
-  /// \brief Generates a new transition in the program state graph
+  /// Generates a new transition in the program state graph
   /// (ExplodedGraph). Uses the default CheckerContext predecessor node.
   ///
   /// @param State The state of the generated node. If not specified, the state
@@ -217,7 +217,7 @@
     return addTransitionImpl(State ? State : getState(), false, nullptr, Tag);
   }
 
-  /// \brief Generates a new transition with the given predecessor.
+  /// Generates a new transition with the given predecessor.
   /// Allows checkers to generate a chain of nodes.
   ///
   /// @param State The state of the generated node.
@@ -230,7 +230,7 @@
     return addTransitionImpl(State, false, Pred, Tag);
   }
 
-  /// \brief Generate a sink node. Generating a sink stops exploration of the
+  /// Generate a sink node. Generating a sink stops exploration of the
   /// given path. To create a sink node for the purpose of reporting an error,
   /// checkers should use generateErrorNode() instead.
   ExplodedNode *generateSink(ProgramStateRef State, ExplodedNode *Pred,
@@ -238,7 +238,7 @@
     return addTransitionImpl(State ? State : getState(), true, Pred, Tag);
   }
 
-  /// \brief Generate a transition to a node that will be used to report
+  /// Generate a transition to a node that will be used to report
   /// an error. This node will be a sink. That is, it will stop exploration of
   /// the given path.
   ///
@@ -251,7 +251,7 @@
                        (Tag ? Tag : Location.getTag()));
   }
 
-  /// \brief Generate a transition to a node that will be used to report
+  /// Generate a transition to a node that will be used to report
   /// an error. This node will not be a sink. That is, exploration will
   /// continue along this path.
   ///
@@ -264,23 +264,23 @@
     return addTransition(State, (Tag ? Tag : Location.getTag()));
   }
 
-  /// \brief Emit the diagnostics report.
+  /// Emit the diagnostics report.
   void emitReport(std::unique_ptr<BugReport> R) {
     Changed = true;
     Eng.getBugReporter().emitReport(std::move(R));
   }
 
-  /// \brief Returns the word that should be used to refer to the declaration
+  /// Returns the word that should be used to refer to the declaration
   /// in the report.
   StringRef getDeclDescription(const Decl *D);
 
-  /// \brief Get the declaration of the called function (path-sensitive).
+  /// Get the declaration of the called function (path-sensitive).
   const FunctionDecl *getCalleeDecl(const CallExpr *CE) const;
 
-  /// \brief Get the name of the called function (path-sensitive).
+  /// Get the name of the called function (path-sensitive).
   StringRef getCalleeName(const FunctionDecl *FunDecl) const;
 
-  /// \brief Get the identifier of the called function (path-sensitive).
+  /// Get the identifier of the called function (path-sensitive).
   const IdentifierInfo *getCalleeIdentifier(const CallExpr *CE) const {
     const FunctionDecl *FunDecl = getCalleeDecl(CE);
     if (FunDecl)
@@ -289,13 +289,13 @@
       return nullptr;
   }
 
-  /// \brief Get the name of the called function (path-sensitive).
+  /// Get the name of the called function (path-sensitive).
   StringRef getCalleeName(const CallExpr *CE) const {
     const FunctionDecl *FunDecl = getCalleeDecl(CE);
     return getCalleeName(FunDecl);
   }
 
-  /// \brief Returns true if the callee is an externally-visible function in the
+  /// Returns true if the callee is an externally-visible function in the
   /// top-level namespace, such as \c malloc.
   ///
   /// If a name is provided, the function must additionally match the given
@@ -308,7 +308,7 @@
   static bool isCLibraryFunction(const FunctionDecl *FD,
                                  StringRef Name = StringRef());
 
-  /// \brief Depending on wither the location corresponds to a macro, return 
+  /// Depending on wither the location corresponds to a macro, return
   /// either the macro name or the token spelling.
   ///
   /// This could be useful when checkers' logic depends on whether a function
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
index e21be43..d4f8fba 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h
@@ -145,7 +145,7 @@
     return ProgramStatePair(StInRange, StOutOfRange);
   }
 
-  /// \brief If a symbol is perfectly constrained to a constant, attempt
+  /// If a symbol is perfectly constrained to a constant, attempt
   /// to return the concrete value.
   ///
   /// Note that a ConstraintManager is not obligated to return a concretized
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
index 6d479d6..17369a8 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CoreEngine.h
@@ -64,7 +64,7 @@
 public:
   using BlocksExhausted =
       std::vector<std::pair<BlockEdge, const ExplodedNode *>>;
-  
+
   using BlocksAborted =
       std::vector<std::pair<const CFGBlock *, const ExplodedNode *>>;
 
@@ -87,7 +87,7 @@
   /// The locations where we stopped doing work because we visited a location
   ///  too many times.
   BlocksExhausted blocksExhausted;
-  
+
   /// The locations where we stopped because the engine aborted analysis,
   /// usually because it could not reason about something.
   BlocksAborted blocksAborted;
@@ -141,7 +141,7 @@
   /// Returns true if there is still simulation state on the worklist.
   bool ExecuteWorkListWithInitialState(const LocationContext *L,
                                        unsigned Steps,
-                                       ProgramStateRef InitState, 
+                                       ProgramStateRef InitState,
                                        ExplodedNodeSet &Dst);
 
   /// Dispatch the work list item based on the given location information.
@@ -152,8 +152,8 @@
   // Functions for external checking of whether we have unfinished work
   bool wasBlockAborted() const { return !blocksAborted.empty(); }
   bool wasBlocksExhausted() const { return !blocksExhausted.empty(); }
-  bool hasWorkRemaining() const { return wasBlocksExhausted() || 
-                                         WList->hasWork() || 
+  bool hasWorkRemaining() const { return wasBlocksExhausted() ||
+                                         WList->hasWork() ||
                                          wasBlockAborted(); }
 
   /// Inform the CoreEngine that a basic block was aborted because
@@ -161,7 +161,7 @@
   void addAbortedBlock(const ExplodedNode *node, const CFGBlock *block) {
     blocksAborted.push_back(std::make_pair(block, node));
   }
-  
+
   WorkList *getWorkList() const { return WList.get(); }
 
   BlocksExhausted::const_iterator blocks_exhausted_begin() const {
@@ -180,18 +180,18 @@
     return blocksAborted.end();
   }
 
-  /// \brief Enqueue the given set of nodes onto the work list.
+  /// Enqueue the given set of nodes onto the work list.
   void enqueue(ExplodedNodeSet &Set);
 
-  /// \brief Enqueue nodes that were created as a result of processing
+  /// Enqueue nodes that were created as a result of processing
   /// a statement onto the work list.
   void enqueue(ExplodedNodeSet &Set, const CFGBlock *Block, unsigned Idx);
 
-  /// \brief enqueue the nodes corresponding to the end of function onto the
+  /// enqueue the nodes corresponding to the end of function onto the
   /// end of path / work list.
   void enqueueEndOfFunction(ExplodedNodeSet &Set, const ReturnStmt *RS);
 
-  /// \brief Enqueue a single node created as a result of statement processing.
+  /// Enqueue a single node created as a result of statement processing.
   void enqueueStmtNode(ExplodedNode *N, const CFGBlock *Block, unsigned Idx);
 };
 
@@ -204,20 +204,20 @@
   NodeBuilderContext(const CoreEngine &E, const CFGBlock *B, ExplodedNode *N)
       : Eng(E), Block(B), LC(N->getLocationContext()) { assert(B); }
 
-  /// \brief Return the CFGBlock associated with this builder.
+  /// Return the CFGBlock associated with this builder.
   const CFGBlock *getBlock() const { return Block; }
 
-  /// \brief Returns the number of times the current basic block has been
+  /// Returns the number of times the current basic block has been
   /// visited on the exploded graph path.
   unsigned blockCount() const {
     return Eng.WList->getBlockCounter().getNumVisited(
-                    LC->getCurrentStackFrame(),
+                    LC->getStackFrame(),
                     Block->getBlockID());
   }
 };
 
 /// \class NodeBuilder
-/// \brief This is the simplest builder which generates nodes in the
+/// This is the simplest builder which generates nodes in the
 /// ExplodedGraph.
 ///
 /// The main benefit of the builder is that it automatically tracks the
@@ -237,11 +237,11 @@
 
   bool HasGeneratedNodes = false;
 
-  /// \brief The frontier set - a set of nodes which need to be propagated after
+  /// The frontier set - a set of nodes which need to be propagated after
   /// the builder dies.
   ExplodedNodeSet &Frontier;
 
-  /// Checkes if the results are ready.
+  /// Checks if the results are ready.
   virtual bool checkResults() {
     return Finalized;
   }
@@ -255,7 +255,7 @@
 
   /// Allow subclasses to finalize results before result_begin() is executed.
   virtual void finalizeResults() {}
-  
+
   ExplodedNode *generateNodeImpl(const ProgramPoint &PP,
                                  ProgramStateRef State,
                                  ExplodedNode *Pred,
@@ -277,14 +277,14 @@
 
   virtual ~NodeBuilder() = default;
 
-  /// \brief Generates a node in the ExplodedGraph.
+  /// Generates a node in the ExplodedGraph.
   ExplodedNode *generateNode(const ProgramPoint &PP,
                              ProgramStateRef State,
                              ExplodedNode *Pred) {
     return generateNodeImpl(PP, State, Pred, false);
   }
 
-  /// \brief Generates a sink in the ExplodedGraph.
+  /// Generates a sink in the ExplodedGraph.
   ///
   /// When a node is marked as sink, the exploration from the node is stopped -
   /// the node becomes the last node on the path and certain kinds of bugs are
@@ -303,7 +303,7 @@
 
   using iterator = ExplodedNodeSet::iterator;
 
-  /// \brief Iterators through the results frontier.
+  /// Iterators through the results frontier.
   iterator begin() {
     finalizeResults();
     assert(checkResults());
@@ -329,7 +329,7 @@
 };
 
 /// \class NodeBuilderWithSinks
-/// \brief This node builder keeps track of the generated sink nodes.
+/// This node builder keeps track of the generated sink nodes.
 class NodeBuilderWithSinks: public NodeBuilder {
   void anchor() override;
 
@@ -364,14 +364,14 @@
 };
 
 /// \class StmtNodeBuilder
-/// \brief This builder class is useful for generating nodes that resulted from
+/// This builder class is useful for generating nodes that resulted from
 /// visiting a statement. The main difference from its parent NodeBuilder is
 /// that it creates a statement specific ProgramPoint.
 class StmtNodeBuilder: public NodeBuilder {
   NodeBuilder *EnclosingBldr;
 
 public:
-  /// \brief Constructs a StmtNodeBuilder. If the builder is going to process
+  /// Constructs a StmtNodeBuilder. If the builder is going to process
   /// nodes currently owned by another builder(with larger scope), use
   /// Enclosing builder to transfer ownership.
   StmtNodeBuilder(ExplodedNode *SrcNode, ExplodedNodeSet &DstSet,
@@ -417,7 +417,7 @@
   }
 };
 
-/// \brief BranchNodeBuilder is responsible for constructing the nodes
+/// BranchNodeBuilder is responsible for constructing the nodes
 /// corresponding to the two branches of the if statement - true and false.
 class BranchNodeBuilder: public NodeBuilder {
   const CFGBlock *DstT;
@@ -474,7 +474,7 @@
   ExplodedNode *Pred;
 
 public:
-  IndirectGotoNodeBuilder(ExplodedNode *pred, const CFGBlock *src, 
+  IndirectGotoNodeBuilder(ExplodedNode *pred, const CFGBlock *src,
                     const Expr *e, const CFGBlock *dispatch, CoreEngine* eng)
       : Eng(*eng), Src(src), DispatchBlock(*dispatch), E(e), Pred(pred) {}
 
@@ -508,7 +508,7 @@
   const Expr *getTarget() const { return E; }
 
   ProgramStateRef getState() const { return Pred->State; }
-  
+
   const LocationContext *getLocationContext() const {
     return Pred->getLocationContext();
   }
@@ -562,7 +562,7 @@
   const Expr *getCondition() const { return Condition; }
 
   ProgramStateRef getState() const { return Pred->State; }
-  
+
   const LocationContext *getLocationContext() const {
     return Pred->getLocationContext();
   }
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h
index e13c641..092e23c 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeInfo.h
@@ -14,7 +14,7 @@
 namespace clang {
 namespace ento {
 
-/// \brief Stores the currently inferred strictest bound on the runtime type
+/// Stores the currently inferred strictest bound on the runtime type
 /// of a region in a given state along the analysis path.
 class DynamicTypeInfo {
 private:
@@ -27,13 +27,13 @@
   DynamicTypeInfo(QualType WithType, bool CanBeSub = true)
     : T(WithType), CanBeASubClass(CanBeSub) {}
 
-  /// \brief Return false if no dynamic type info is available.
+  /// Return false if no dynamic type info is available.
   bool isValid() const { return !T.isNull(); }
 
-  /// \brief Returns the currently inferred upper bound on the runtime type.
+  /// Returns the currently inferred upper bound on the runtime type.
   QualType getType() const { return T; }
 
-  /// \brief Returns false if the type information is precise (the type T is
+  /// Returns false if the type information is precise (the type T is
   /// the only type in the lattice), true otherwise.
   bool canBeASubClass() const { return CanBeASubClass; }
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
index 0dc4ef1..2f8ead0 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/DynamicTypeMap.h
@@ -42,15 +42,15 @@
   }
 };
 
-/// \brief Get dynamic type information for a region.
+/// Get dynamic type information for a region.
 DynamicTypeInfo getDynamicTypeInfo(ProgramStateRef State,
                                    const MemRegion *Reg);
 
-/// \brief Set dynamic type information of the region; return the new state.
+/// Set dynamic type information of the region; return the new state.
 ProgramStateRef setDynamicTypeInfo(ProgramStateRef State, const MemRegion *Reg,
                                    DynamicTypeInfo NewTy);
 
-/// \brief Set dynamic type information of the region; return the new state.
+/// Set dynamic type information of the region; return the new state.
 inline ProgramStateRef setDynamicTypeInfo(ProgramStateRef State,
                                           const MemRegion *Reg, QualType NewTy,
                                           bool CanBeSubClassed = true) {
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
index d49aa81..77e3539 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Environment.h
@@ -40,14 +40,14 @@
 
   const Stmt *getStmt() const { return first; }
   const LocationContext *getLocationContext() const { return second; }
-  
+
   /// Profile an EnvironmentEntry for inclusion in a FoldingSet.
   static void Profile(llvm::FoldingSetNodeID &ID,
                       const EnvironmentEntry &E) {
     ID.AddPointer(E.getStmt());
     ID.AddPointer(E.getLocationContext());
   }
-  
+
   void Profile(llvm::FoldingSetNodeID &ID) const {
     Profile(ID, *this);
   }
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
index a55c43d..4e0c02e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExplodedGraph.h
@@ -87,7 +87,7 @@
     // for the nodes in the group.
     // This is not a PointerIntPair in order to keep the storage type opaque.
     uintptr_t P;
-    
+
   public:
     NodeGroup(bool Flag = false) : P(Flag) {
       assert(getFlag() == Flag);
@@ -147,7 +147,7 @@
   }
 
   const StackFrameContext *getStackFrame() const {
-    return getLocationContext()->getCurrentStackFrame();
+    return getLocation().getStackFrame();
   }
 
   const Decl &getCodeDecl() const { return *getLocationContext()->getDecl(); }
@@ -251,7 +251,7 @@
   };
 
   static void SetAuditor(Auditor* A);
-  
+
 private:
   void replaceSuccessor(ExplodedNode *node) { Succs.replaceNode(node); }
   void replacePredecessor(ExplodedNode *node) { Preds.replaceNode(node); }
@@ -286,18 +286,18 @@
 
   /// NumNodes - The number of nodes in the graph.
   unsigned NumNodes = 0;
-  
+
   /// A list of recently allocated nodes that can potentially be recycled.
   NodeVector ChangedNodes;
-  
+
   /// A list of nodes that can be reused.
   NodeVector FreeNodes;
-  
+
   /// Determines how often nodes are reclaimed.
   ///
   /// If this is 0, nodes will never be reclaimed.
   unsigned ReclaimNodeInterval = 0;
-  
+
   /// Counter to determine when to reclaim nodes.
   unsigned ReclaimCounter;
 
@@ -305,7 +305,7 @@
   ExplodedGraph();
   ~ExplodedGraph();
 
-  /// \brief Retrieve the node associated with a (Location,State) pair,
+  /// Retrieve the node associated with a (Location,State) pair,
   ///  where the 'Location' is a ProgramPoint in the CFG.  If no node for
   ///  this pair exists, it is created. IsNew is set to true if
   ///  the node was freshly created.
@@ -313,7 +313,7 @@
                         bool IsSink = false,
                         bool* IsNew = nullptr);
 
-  /// \brief Create a node for a (Location, State) pair,
+  /// Create a node for a (Location, State) pair,
   ///  but don't store it for deduplication later.  This
   ///  is useful when copying an already completed
   ///  ExplodedGraph for further processing.
@@ -409,7 +409,7 @@
   /// was called.
   void reclaimRecentlyAllocatedNodes();
 
-  /// \brief Returns true if nodes for the given expression kind are always
+  /// Returns true if nodes for the given expression kind are always
   ///        kept around.
   static bool isInterestingLValueExpr(const Expr *Ex);
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
index 73b5fb6..06a90fa 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
@@ -69,7 +69,7 @@
 class CrossTranslationUnitContext;
 
 } // namespace cross_tu
-  
+
 namespace ento {
 
 class BasicValueFactory;
@@ -106,11 +106,6 @@
     bool IsTemporaryCtorOrDtor = false;
 
     /// This call is a constructor for a temporary that is lifetime-extended
-    /// by binding a smaller object within it to a reference, for example
-    /// 'const int &x = C().x;'.
-    bool IsTemporaryLifetimeExtendedViaSubobject = false;
-
-    /// This call is a constructor for a temporary that is lifetime-extended
     /// by binding it to a reference-type field within an aggregate,
     /// for example 'A { const C &c; }; A a = { C() };'
     bool IsTemporaryLifetimeExtendedViaAggregate = false;
@@ -122,7 +117,7 @@
   cross_tu::CrossTranslationUnitContext &CTU;
 
   AnalysisManager &AMgr;
-  
+
   AnalysisDeclContextManager &AnalysisDeclContexts;
 
   CoreEngine Engine;
@@ -141,11 +136,11 @@
 
   unsigned int currStmtIdx = 0;
   const NodeBuilderContext *currBldrCtx = nullptr;
-  
+
   /// Helper object to determine if an Objective-C message expression
   /// implicitly never returns.
   ObjCNoReturn ObjCNoRet;
-  
+
   /// Whether or not GC is enabled in this analysis.
   bool ObjCGCEnabled;
 
@@ -178,7 +173,7 @@
   /// state of the function call. Returns true if there is still simulation
   /// state on the worklist.
   bool ExecuteWorkListWithInitialState(const LocationContext *L, unsigned Steps,
-                                       ProgramStateRef InitState, 
+                                       ProgramStateRef InitState,
                                        ExplodedNodeSet &Dst) {
     return Engine.ExecuteWorkListWithInitialState(L, Steps, InitState, Dst);
   }
@@ -228,7 +223,7 @@
   ExplodedGraph &getGraph() { return G; }
   const ExplodedGraph &getGraph() const { return G; }
 
-  /// \brief Run the analyzer's garbage collection - remove dead symbols and
+  /// Run the analyzer's garbage collection - remove dead symbols and
   /// bindings from the state.
   ///
   /// Checkers can participate in this process with two callbacks:
@@ -281,17 +276,17 @@
                        ExplodedNode *Pred, ExplodedNodeSet &Dst);
   void ProcessMemberDtor(const CFGMemberDtor D,
                          ExplodedNode *Pred, ExplodedNodeSet &Dst);
-  void ProcessTemporaryDtor(const CFGTemporaryDtor D, 
+  void ProcessTemporaryDtor(const CFGTemporaryDtor D,
                             ExplodedNode *Pred, ExplodedNodeSet &Dst);
 
   /// Called by CoreEngine when processing the entrance of a CFGBlock.
   void processCFGBlockEntrance(const BlockEdge &L,
                                NodeBuilderWithSinks &nodeBuilder,
                                ExplodedNode *Pred) override;
- 
+
   /// ProcessBranch - Called by CoreEngine.  Used to generate successor
   ///  nodes by processing the 'effects' of a branch condition.
-  void processBranch(const Stmt *Condition, const Stmt *Term, 
+  void processBranch(const Stmt *Condition, const Stmt *Term,
                      NodeBuilderContext& BuilderCtx,
                      ExplodedNode *Pred,
                      ExplodedNodeSet &Dst,
@@ -359,7 +354,7 @@
 
   /// processRegionChanges - Called by ProgramStateManager whenever a change is made
   ///  to the store. Used to update checkers that track region values.
-  ProgramStateRef 
+  ProgramStateRef
   processRegionChanges(ProgramStateRef state,
                        const InvalidatedSymbols *invalidated,
                        ArrayRef<const MemRegion *> ExplicitRegions,
@@ -415,15 +410,15 @@
                       ExplodedNodeSet &Dst);
 
   /// VisitBlockExpr - Transfer function logic for BlockExprs.
-  void VisitBlockExpr(const BlockExpr *BE, ExplodedNode *Pred, 
+  void VisitBlockExpr(const BlockExpr *BE, ExplodedNode *Pred,
                       ExplodedNodeSet &Dst);
 
   /// VisitLambdaExpr - Transfer function logic for LambdaExprs.
-  void VisitLambdaExpr(const LambdaExpr *LE, ExplodedNode *Pred, 
+  void VisitLambdaExpr(const LambdaExpr *LE, ExplodedNode *Pred,
                        ExplodedNodeSet &Dst);
 
   /// VisitBinaryOperator - Transfer function logic for binary operators.
-  void VisitBinaryOperator(const BinaryOperator* B, ExplodedNode *Pred, 
+  void VisitBinaryOperator(const BinaryOperator* B, ExplodedNode *Pred,
                            ExplodedNodeSet &Dst);
 
 
@@ -436,21 +431,21 @@
                  ExplodedNodeSet &Dst);
 
   /// VisitCompoundLiteralExpr - Transfer function logic for compound literals.
-  void VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL, 
+  void VisitCompoundLiteralExpr(const CompoundLiteralExpr *CL,
                                 ExplodedNode *Pred, ExplodedNodeSet &Dst);
 
   /// Transfer function logic for DeclRefExprs and BlockDeclRefExprs.
   void VisitCommonDeclRefExpr(const Expr *DR, const NamedDecl *D,
                               ExplodedNode *Pred, ExplodedNodeSet &Dst);
-  
+
   /// VisitDeclStmt - Transfer function logic for DeclStmts.
-  void VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred, 
+  void VisitDeclStmt(const DeclStmt *DS, ExplodedNode *Pred,
                      ExplodedNodeSet &Dst);
 
   /// VisitGuardedExpr - Transfer function logic for ?, __builtin_choose
-  void VisitGuardedExpr(const Expr *Ex, const Expr *L, const Expr *R, 
+  void VisitGuardedExpr(const Expr *Ex, const Expr *L, const Expr *R,
                         ExplodedNode *Pred, ExplodedNodeSet &Dst);
-  
+
   void VisitInitListExpr(const InitListExpr *E, ExplodedNode *Pred,
                          ExplodedNodeSet &Dst);
 
@@ -459,7 +454,7 @@
                         ExplodedNodeSet &Dst);
 
   /// VisitMemberExpr - Transfer function for member expressions.
-  void VisitMemberExpr(const MemberExpr *M, ExplodedNode *Pred, 
+  void VisitMemberExpr(const MemberExpr *M, ExplodedNode *Pred,
                        ExplodedNodeSet &Dst);
 
   /// VisitAtomicExpr - Transfer function for builtin atomic expressions
@@ -476,16 +471,16 @@
 
   /// VisitObjCForCollectionStmt - Transfer function logic for
   ///  ObjCForCollectionStmt.
-  void VisitObjCForCollectionStmt(const ObjCForCollectionStmt *S, 
+  void VisitObjCForCollectionStmt(const ObjCForCollectionStmt *S,
                                   ExplodedNode *Pred, ExplodedNodeSet &Dst);
 
   void VisitObjCMessage(const ObjCMessageExpr *ME, ExplodedNode *Pred,
                         ExplodedNodeSet &Dst);
 
   /// VisitReturnStmt - Transfer function logic for return statements.
-  void VisitReturnStmt(const ReturnStmt *R, ExplodedNode *Pred, 
+  void VisitReturnStmt(const ReturnStmt *R, ExplodedNode *Pred,
                        ExplodedNodeSet &Dst);
-  
+
   /// VisitOffsetOfExpr - Transfer function for offsetof.
   void VisitOffsetOfExpr(const OffsetOfExpr *Ex, ExplodedNode *Pred,
                          ExplodedNodeSet &Dst);
@@ -495,7 +490,7 @@
                                      ExplodedNode *Pred, ExplodedNodeSet &Dst);
 
   /// VisitUnaryOperator - Transfer function logic for unary operators.
-  void VisitUnaryOperator(const UnaryOperator* B, ExplodedNode *Pred, 
+  void VisitUnaryOperator(const UnaryOperator* B, ExplodedNode *Pred,
                           ExplodedNodeSet &Dst);
 
   /// Handle ++ and -- (both pre- and post-increment).
@@ -510,7 +505,7 @@
   void VisitCXXCatchStmt(const CXXCatchStmt *CS, ExplodedNode *Pred,
                          ExplodedNodeSet &Dst);
 
-  void VisitCXXThisExpr(const CXXThisExpr *TE, ExplodedNode *Pred, 
+  void VisitCXXThisExpr(const CXXThisExpr *TE, ExplodedNode *Pred,
                         ExplodedNodeSet & Dst);
 
   void VisitCXXConstructExpr(const CXXConstructExpr *E, ExplodedNode *Pred,
@@ -533,16 +528,16 @@
 
   /// Create a C++ temporary object for an rvalue.
   void CreateCXXTemporaryObject(const MaterializeTemporaryExpr *ME,
-                                ExplodedNode *Pred, 
+                                ExplodedNode *Pred,
                                 ExplodedNodeSet &Dst);
-  
+
   /// evalEagerlyAssumeBinOpBifurcation - Given the nodes in 'Src', eagerly assume symbolic
   ///  expressions of the form 'x != 0' and generate new nodes (stored in Dst)
   ///  with those assumptions.
-  void evalEagerlyAssumeBinOpBifurcation(ExplodedNodeSet &Dst, ExplodedNodeSet &Src, 
+  void evalEagerlyAssumeBinOpBifurcation(ExplodedNodeSet &Dst, ExplodedNodeSet &Src,
                          const Expr *Ex);
-  
-  std::pair<const ProgramPointTag *, const ProgramPointTag *>
+
+  static std::pair<const ProgramPointTag *, const ProgramPointTag *>
     geteagerlyAssumeBinOpBifurcationTags();
 
   SVal evalMinus(SVal X) {
@@ -585,7 +580,15 @@
                  SVal LHS, SVal RHS, QualType T) {
     return svalBuilder.evalBinOp(ST, Op, LHS, RHS, T);
   }
-  
+
+  /// By looking at a certain item that may be potentially part of an object's
+  /// ConstructionContext, retrieve such object's location. A particular
+  /// statement can be transparently passed as \p Item in most cases.
+  static Optional<SVal>
+  getObjectUnderConstruction(ProgramStateRef State,
+                             const ConstructionContextItem &Item,
+                             const LocationContext *LC);
+
 protected:
   /// evalBind - Handle the semantics of binding a value to a specific location.
   ///  This method is used by evalStore, VisitDeclStmt, and others.
@@ -609,6 +612,11 @@
                            const CallEvent *Call,
                            RegionAndSymbolInvalidationTraits &ITraits) override;
 
+  /// A simple wrapper when you only need to notify checkers of pointer-escape
+  /// of a single value.
+  ProgramStateRef escapeValue(ProgramStateRef State, SVal V,
+                              PointerEscapeKind K) const;
+
 public:
   // FIXME: 'tag' should be removed, and a LocationContext should be used
   // instead.
@@ -637,7 +645,7 @@
     return (*currBldrCtx->getBlock())[currStmtIdx];
   }
 
-  /// \brief Create a new state in which the call return value is binded to the
+  /// Create a new state in which the call return value is binded to the
   /// call origin expression.
   ProgramStateRef bindReturnValue(const CallEvent &Call,
                                   const LocationContext *LCtx,
@@ -648,7 +656,7 @@
   void evalCall(ExplodedNodeSet &Dst, ExplodedNode *Pred,
                 const CallEvent &Call);
 
-  /// \brief Default implementation of call evaluation.
+  /// Default implementation of call evaluation.
   void defaultEvalCall(NodeBuilder &B, ExplodedNode *Pred,
                        const CallEvent &Call,
                        const EvalCallOptions &CallOpts = {});
@@ -682,7 +690,7 @@
     CIP_DisallowedAlways
   };
 
-  /// \brief See if a particular call should be inlined, by only looking
+  /// See if a particular call should be inlined, by only looking
   /// at the call event and the current state of analysis.
   CallInlinePolicy mayInlineCallKind(const CallEvent &Call,
                                      const ExplodedNode *Pred,
@@ -697,12 +705,12 @@
   bool inlineCall(const CallEvent &Call, const Decl *D, NodeBuilder &Bldr,
                   ExplodedNode *Pred, ProgramStateRef State);
 
-  /// \brief Conservatively evaluate call by invalidating regions and binding
+  /// Conservatively evaluate call by invalidating regions and binding
   /// a conjured return value.
   void conservativeEvalCall(const CallEvent &Call, NodeBuilder &Bldr,
                             ExplodedNode *Pred, ProgramStateRef State);
 
-  /// \brief Either inline or process the call conservatively (or both), based
+  /// Either inline or process the call conservatively (or both), based
   /// on DynamicDispatchBifurcation data.
   void BifurcateCall(const MemRegion *BifurReg,
                      const CallEvent &Call, const Decl *D, NodeBuilder &Bldr,
@@ -744,70 +752,60 @@
   /// constructing into an existing region.
   const CXXConstructExpr *findDirectConstructorForCurrentCFGElement();
 
-  /// For a given constructor, look forward in the current CFG block to
-  /// determine the region into which an object will be constructed by \p CE.
-  /// When the lookahead fails, a temporary region is returned, and the
+  /// Update the program state with all the path-sensitive information
+  /// that's necessary to perform construction of an object with a given
+  /// syntactic construction context. If the construction context is unavailable
+  /// or unusable for any reason, a dummy temporary region is returned, and the
   /// IsConstructorWithImproperlyModeledTargetRegion flag is set in \p CallOpts.
-  const MemRegion *getRegionForConstructedObject(const CXXConstructExpr *CE,
-                                                 ExplodedNode *Pred,
-                                                 const ConstructionContext *CC,
-                                                 EvalCallOptions &CallOpts);
+  /// Returns the updated program state and the new object's this-region.
+  std::pair<ProgramStateRef, SVal> prepareForObjectConstruction(
+      const Expr *E, ProgramStateRef State, const LocationContext *LCtx,
+      const ConstructionContext *CC, EvalCallOptions &CallOpts);
 
-  /// Store the region of a C++ temporary object corresponding to a
-  /// CXXBindTemporaryExpr for later destruction.
-  static ProgramStateRef addInitializedTemporary(
-      ProgramStateRef State, const CXXBindTemporaryExpr *BTE,
-      const LocationContext *LC, const CXXTempObjectRegion *R);
-
-  /// Check if all initialized temporary regions are clear for the given
-  /// context range (including FromLC, not including ToLC).
-  /// This is useful for assertions.
-  static bool areInitializedTemporariesClear(ProgramStateRef State,
-                                             const LocationContext *FromLC,
-                                             const LocationContext *ToLC);
-
-  /// Store the region of a C++ temporary object corresponding to a
-  /// CXXBindTemporaryExpr for later destruction.
-  static ProgramStateRef addTemporaryMaterialization(
-      ProgramStateRef State, const MaterializeTemporaryExpr *MTE,
-      const LocationContext *LC, const CXXTempObjectRegion *R);
-
-  /// Check if all temporary materialization regions are clear for the given
-  /// context range (including FromLC, not including ToLC).
-  /// This is useful for assertions.
-  static bool areTemporaryMaterializationsClear(ProgramStateRef State,
-                                                const LocationContext *FromLC,
-                                                const LocationContext *ToLC);
-
-  /// Adds an initialized temporary and/or a materialization, whichever is
-  /// necessary, by looking at the whole construction context. Handles
-  /// function return values, which need the construction context of the parent
-  /// stack frame, automagically.
-  ProgramStateRef addAllNecessaryTemporaryInfo(
-      ProgramStateRef State, const ConstructionContext *CC,
-      const LocationContext *LC, const MemRegion *R);
-
-  /// Store the region returned by operator new() so that the constructor
-  /// that follows it knew what location to initialize. The value should be
-  /// cleared once the respective CXXNewExpr CFGStmt element is processed.
+  /// Store the location of a C++ object corresponding to a statement
+  /// until the statement is actually encountered. For example, if a DeclStmt
+  /// has CXXConstructExpr as its initializer, the object would be considered
+  /// to be "under construction" between CXXConstructExpr and DeclStmt.
+  /// This allows, among other things, to keep bindings to variable's fields
+  /// made within the constructor alive until its declaration actually
+  /// goes into scope.
   static ProgramStateRef
-  setCXXNewAllocatorValue(ProgramStateRef State, const CXXNewExpr *CNE,
-                          const LocationContext *CallerLC, SVal V);
+  addObjectUnderConstruction(ProgramStateRef State,
+                             const ConstructionContextItem &Item,
+                             const LocationContext *LC, SVal V);
 
-  /// Retrieve the location returned by the current operator new().
-  static SVal
-  getCXXNewAllocatorValue(ProgramStateRef State, const CXXNewExpr *CNE,
-                          const LocationContext *CallerLC);
-
-  /// Clear the location returned by the respective operator new(). This needs
-  /// to be done as soon as CXXNewExpr CFG block is evaluated.
+  /// Mark the object sa fully constructed, cleaning up the state trait
+  /// that tracks objects under construction.
   static ProgramStateRef
-  clearCXXNewAllocatorValue(ProgramStateRef State, const CXXNewExpr *CNE,
-                            const LocationContext *CallerLC);
+  finishObjectConstruction(ProgramStateRef State,
+                           const ConstructionContextItem &Item,
+                           const LocationContext *LC);
 
-  /// Check if all allocator values are clear for the given context range
-  /// (including FromLC, not including ToLC). This is useful for assertions.
-  static bool areCXXNewAllocatorValuesClear(ProgramStateRef State,
+  /// If the given expression corresponds to a temporary that was used for
+  /// passing into an elidable copy/move constructor and that constructor
+  /// was actually elided, track that we also need to elide the destructor.
+  static ProgramStateRef elideDestructor(ProgramStateRef State,
+                                         const CXXBindTemporaryExpr *BTE,
+                                         const LocationContext *LC);
+
+  /// Stop tracking the destructor that corresponds to an elided constructor.
+  static ProgramStateRef
+  cleanupElidedDestructor(ProgramStateRef State,
+                          const CXXBindTemporaryExpr *BTE,
+                          const LocationContext *LC);
+
+  /// Returns true if the given expression corresponds to a temporary that
+  /// was constructed for passing into an elidable copy/move constructor
+  /// and that constructor was actually elided.
+  static bool isDestructorElided(ProgramStateRef State,
+                                 const CXXBindTemporaryExpr *BTE,
+                                 const LocationContext *LC);
+
+  /// Check if all objects under construction have been fully constructed
+  /// for the given context range (including FromLC, not including ToLC).
+  /// This is useful for assertions. Also checks if elided destructors
+  /// were cleaned up.
+  static bool areAllObjectsFullyConstructed(ProgramStateRef State,
                                             const LocationContext *FromLC,
                                             const LocationContext *ToLC);
 };
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h
index 3168733..f494c5d 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/LoopWidening.h
@@ -22,7 +22,7 @@
 namespace clang {
 namespace ento {
 
-/// \brief Get the states that result from widening the loop.
+/// Get the states that result from widening the loop.
 ///
 /// Widen the loop by invalidating anything that might be modified
 /// by the loop body in any iteration.
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
index 14909e3..3a93aae 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/MemRegion.h
@@ -1,4 +1,4 @@
-//== MemRegion.h - Abstract memory regions for static analysis --*- C++ -*--==//
+//==- MemRegion.h - Abstract memory regions for static analysis -*- C++ -*--==//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -19,24 +19,39 @@
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/CharUnits.h"
 #include "clang/AST/Decl.h"
-#include "clang/AST/DeclCXX.h"
+#include "clang/AST/DeclObjC.h"
+#include "clang/AST/DeclarationName.h"
+#include "clang/AST/Expr.h"
 #include "clang/AST/ExprObjC.h"
-#include "clang/Analysis/AnalysisDeclContext.h"
+#include "clang/AST/Type.h"
 #include "clang/Basic/LLVM.h"
+#include "clang/Basic/SourceLocation.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/SVals.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h"
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/FoldingSet.h"
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/PointerIntPair.h"
 #include "llvm/Support/Allocator.h"
-#include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/Casting.h"
+#include <cassert>
+#include <cstdint>
+#include <limits>
 #include <string>
+#include <utility>
 
 namespace clang {
 
+class AnalysisDeclContext;
+class CXXRecordDecl;
+class Decl;
 class LocationContext;
 class StackFrameContext;
 
 namespace ento {
 
 class CodeTextRegion;
+class MemRegion;
 class MemRegionManager;
 class MemSpaceRegion;
 class SValBuilder;
@@ -46,7 +61,7 @@
 /// Represent a region's offset within the top level base region.
 class RegionOffset {
   /// The base region.
-  const MemRegion *R;
+  const MemRegion *R = nullptr;
 
   /// The bit offset within the base region. Can be negative.
   int64_t Offset;
@@ -54,9 +69,9 @@
 public:
   // We're using a const instead of an enumeration due to the size required;
   // Visual Studio will only create enumerations of size int, not long long.
-  static const int64_t Symbolic = INT64_MAX;
+  static const int64_t Symbolic = std::numeric_limits<int64_t>::max();
 
-  RegionOffset() : R(nullptr) {}
+  RegionOffset() = default;
   RegionOffset(const MemRegion *r, int64_t off) : R(r), Offset(off) {}
 
   const MemRegion *getRegion() const { return R; }
@@ -86,6 +101,7 @@
 
 private:
   const Kind kind;
+  mutable Optional<RegionOffset> cachedOffset;
 
 protected:
   MemRegion(Kind k) : kind(k) {}
@@ -108,39 +124,39 @@
 
   const MemRegion *StripCasts(bool StripBaseCasts = true) const;
 
-  /// \brief If this is a symbolic region, returns the region. Otherwise,
+  /// If this is a symbolic region, returns the region. Otherwise,
   /// goes up the base chain looking for the first symbolic base region.
   const SymbolicRegion *getSymbolicBase() const;
 
   bool hasGlobalsOrParametersStorage() const;
 
   bool hasStackStorage() const;
-  
+
   bool hasStackNonParametersStorage() const;
-  
+
   bool hasStackParametersStorage() const;
 
   /// Compute the offset within the top level memory object.
   RegionOffset getAsOffset() const;
 
-  /// \brief Get a string representation of a region for debug use.
+  /// Get a string representation of a region for debug use.
   std::string getString() const;
 
   virtual void dumpToStream(raw_ostream &os) const;
 
   void dump() const;
 
-  /// \brief Returns true if this region can be printed in a user-friendly way.
+  /// Returns true if this region can be printed in a user-friendly way.
   virtual bool canPrintPretty() const;
 
-  /// \brief Print the region for use in diagnostics.
+  /// Print the region for use in diagnostics.
   virtual void printPretty(raw_ostream &os) const;
 
-  /// \brief Returns true if this region's textual representation can be used
+  /// Returns true if this region's textual representation can be used
   /// as part of a larger expression.
   virtual bool canPrintPrettyAsExpr() const;
 
-  /// \brief Print the region as expression.
+  /// Print the region as expression.
   ///
   /// When this region represents a subexpression, the method is for printing
   /// an expression containing it.
@@ -152,7 +168,6 @@
 
   virtual bool isBoundable() const { return false; }
 
-
   /// Get descriptive name for memory region. The name is obtained from
   /// the variable/field declaration retrieved from the memory region.
   /// Regions that point to an element of an array are returned as: "arr[0]".
@@ -163,7 +178,6 @@
   /// \returns variable name for memory region
   std::string getDescriptiveName(bool UseQuotes = true) const;
 
-
   /// Retrieve source range from memory region. The range retrieval
   /// is based on the decl obtained from the memory region.
   /// For a VarRegion the range of the base region is returned.
@@ -172,7 +186,7 @@
   /// The client is responsible for checking if the returned range is valid.
   ///
   /// \returns source range for declaration retrieved from memory region
-  clang::SourceRange sourceRange() const;
+  SourceRange sourceRange() const;
 };
 
 /// MemSpaceRegion - A memory region that represents a "memory space";
@@ -230,7 +244,7 @@
   }
 };
 
-/// \brief The region of the static variables within the current CodeTextRegion
+/// The region of the static variables within the current CodeTextRegion
 /// scope.
 ///
 /// Currently, only the static locals are placed there, so we know that these
@@ -239,9 +253,9 @@
   friend class MemRegionManager;
 
   const CodeTextRegion *CR;
-  
+
   StaticGlobalSpaceRegion(MemRegionManager *mgr, const CodeTextRegion *cr)
-    : GlobalsSpaceRegion(mgr, StaticGlobalSpaceRegionKind), CR(cr) {
+      : GlobalsSpaceRegion(mgr, StaticGlobalSpaceRegionKind), CR(cr) {
     assert(cr);
   }
 
@@ -257,14 +271,14 @@
   }
 };
 
-/// \brief The region for all the non-static global variables.
+/// The region for all the non-static global variables.
 ///
 /// This class is further split into subclasses for efficient implementation of
 /// invalidating a set of related global values as is done in
 /// RegionStoreManager::invalidateRegions (instead of finding all the dependent
 /// globals, we invalidate the whole parent region).
 class NonStaticGlobalSpaceRegion : public GlobalsSpaceRegion {
-  virtual void anchor() override;
+  void anchor() override;
 
 protected:
   NonStaticGlobalSpaceRegion(MemRegionManager *mgr, Kind k)
@@ -273,7 +287,6 @@
   }
 
 public:
-
   static bool classof(const MemRegion *R) {
     Kind k = R->getKind();
     return k >= BEGIN_NON_STATIC_GLOBAL_MEMSPACES &&
@@ -281,16 +294,15 @@
   }
 };
 
-/// \brief The region containing globals which are defined in system/external
+/// The region containing globals which are defined in system/external
 /// headers and are considered modifiable by system calls (ex: errno).
 class GlobalSystemSpaceRegion : public NonStaticGlobalSpaceRegion {
   friend class MemRegionManager;
 
   GlobalSystemSpaceRegion(MemRegionManager *mgr)
-    : NonStaticGlobalSpaceRegion(mgr, GlobalSystemSpaceRegionKind) {}
+      : NonStaticGlobalSpaceRegion(mgr, GlobalSystemSpaceRegionKind) {}
 
 public:
-
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -298,7 +310,7 @@
   }
 };
 
-/// \brief The region containing globals which are considered not to be modified
+/// The region containing globals which are considered not to be modified
 /// or point to data which could be modified as a result of a function call
 /// (system or internal). Ex: Const global scalars would be modeled as part of
 /// this region. This region also includes most system globals since they have
@@ -307,10 +319,9 @@
   friend class MemRegionManager;
 
   GlobalImmutableSpaceRegion(MemRegionManager *mgr)
-    : NonStaticGlobalSpaceRegion(mgr, GlobalImmutableSpaceRegionKind) {}
+      : NonStaticGlobalSpaceRegion(mgr, GlobalImmutableSpaceRegionKind) {}
 
 public:
-
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -318,17 +329,16 @@
   }
 };
 
-/// \brief The region containing globals which can be modified by calls to
+/// The region containing globals which can be modified by calls to
 /// "internally" defined functions - (for now just) functions other then system
 /// calls.
 class GlobalInternalSpaceRegion : public NonStaticGlobalSpaceRegion {
   friend class MemRegionManager;
 
   GlobalInternalSpaceRegion(MemRegionManager *mgr)
-    : NonStaticGlobalSpaceRegion(mgr, GlobalInternalSpaceRegionKind) {}
+      : NonStaticGlobalSpaceRegion(mgr, GlobalInternalSpaceRegionKind) {}
 
 public:
-
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -338,25 +348,25 @@
 
 class HeapSpaceRegion : public MemSpaceRegion {
   friend class MemRegionManager;
-  
-  HeapSpaceRegion(MemRegionManager *mgr)
-    : MemSpaceRegion(mgr, HeapSpaceRegionKind) {}
-public:
 
+  HeapSpaceRegion(MemRegionManager *mgr)
+      : MemSpaceRegion(mgr, HeapSpaceRegionKind) {}
+
+public:
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
     return R->getKind() == HeapSpaceRegionKind;
   }
 };
-  
+
 class UnknownSpaceRegion : public MemSpaceRegion {
   friend class MemRegionManager;
+
   UnknownSpaceRegion(MemRegionManager *mgr)
       : MemSpaceRegion(mgr, UnknownSpaceRegionKind) {}
 
 public:
-
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -371,7 +381,7 @@
 
 protected:
   StackSpaceRegion(MemRegionManager *mgr, Kind k, const StackFrameContext *sfc)
-    : MemSpaceRegion(mgr, k), SFC(sfc) {
+      : MemSpaceRegion(mgr, k), SFC(sfc) {
     assert(classof(this));
     assert(sfc);
   }
@@ -389,10 +399,11 @@
 
 class StackLocalsSpaceRegion : public StackSpaceRegion {
   friend class MemRegionManager;
-  StackLocalsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
-    : StackSpaceRegion(mgr, StackLocalsSpaceRegionKind, sfc) {}
-public:
 
+  StackLocalsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
+      : StackSpaceRegion(mgr, StackLocalsSpaceRegionKind, sfc) {}
+
+public:
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -403,10 +414,11 @@
 class StackArgumentsSpaceRegion : public StackSpaceRegion {
 private:
   friend class MemRegionManager;
-  StackArgumentsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
-    : StackSpaceRegion(mgr, StackArgumentsSpaceRegionKind, sfc) {}
-public:
 
+  StackArgumentsSpaceRegion(MemRegionManager *mgr, const StackFrameContext *sfc)
+      : StackSpaceRegion(mgr, StackArgumentsSpaceRegionKind, sfc) {}
+
+public:
   void dumpToStream(raw_ostream &os) const override;
 
   static bool classof(const MemRegion *R) {
@@ -414,7 +426,6 @@
   }
 };
 
-
 /// SubRegion - A region that subsets another larger region.  Most regions
 ///  are subclasses of SubRegion.
 class SubRegion : public MemRegion {
@@ -422,6 +433,7 @@
 
 protected:
   const MemRegion* superRegion;
+
   SubRegion(const MemRegion *sReg, Kind k) : MemRegion(k), superRegion(sReg) {
     assert(classof(this));
     assert(sReg);
@@ -455,8 +467,10 @@
 class AllocaRegion : public SubRegion {
   friend class MemRegionManager;
 
-  unsigned Cnt; // Block counter.  Used to distinguish different pieces of
-                // memory allocated by alloca at the same call site.
+  // Block counter. Used to distinguish different pieces of memory allocated by
+  // alloca at the same call site.
+  unsigned Cnt;
+
   const Expr *Ex;
 
   AllocaRegion(const Expr *ex, unsigned cnt, const MemSpaceRegion *superRegion)
@@ -468,7 +482,6 @@
                             unsigned Cnt, const MemRegion *superRegion);
 
 public:
-
   const Expr *getExpr() const { return Ex; }
 
   bool isBoundable() const override { return true; }
@@ -486,7 +499,7 @@
 
 /// TypedRegion - An abstract class representing regions that are typed.
 class TypedRegion : public SubRegion {
-  virtual void anchor() override;
+  void anchor() override;
 
 protected:
   TypedRegion(const MemRegion *sReg, Kind k) : SubRegion(sReg, k) {
@@ -510,7 +523,7 @@
 
 /// TypedValueRegion - An abstract class representing regions having a typed value.
 class TypedValueRegion : public TypedRegion {
-  virtual void anchor() override;
+  void anchor() override;
 
 protected:
   TypedValueRegion(const MemRegion* sReg, Kind k) : TypedRegion(sReg, k) {
@@ -542,9 +555,8 @@
   }
 };
 
-
 class CodeTextRegion : public TypedRegion {
-  virtual void anchor() override;
+  void anchor() override;
 
 protected:
   CodeTextRegion(const MemSpaceRegion *sreg, Kind k) : TypedRegion(sreg, k) {
@@ -567,7 +579,7 @@
   const NamedDecl *FD;
 
   FunctionCodeRegion(const NamedDecl *fd, const CodeSpaceRegion* sreg)
-    : CodeTextRegion(sreg, FunctionCodeRegionKind), FD(fd) {
+      : CodeTextRegion(sreg, FunctionCodeRegionKind), FD(fd) {
     assert(isa<ObjCMethodDecl>(fd) || isa<FunctionDecl>(fd));
   }
 
@@ -577,7 +589,7 @@
 public:
   QualType getLocationType() const override {
     const ASTContext &Ctx = getContext();
-    if (const FunctionDecl *D = dyn_cast<FunctionDecl>(FD)) {
+    if (const auto *D = dyn_cast<FunctionDecl>(FD)) {
       return Ctx.getPointerType(D->getType());
     }
 
@@ -586,7 +598,7 @@
 
     // TODO: We might want to return a different type here (ex: id (*ty)(...))
     //       depending on how it is used.
-    return QualType();
+    return {};
   }
 
   const NamedDecl *getDecl() const {
@@ -601,8 +613,7 @@
     return R->getKind() == FunctionCodeRegionKind;
   }
 };
-  
-  
+
 /// BlockCodeRegion - A region that represents code texts of blocks (closures).
 ///  Blocks are represented with two kinds of regions.  BlockCodeRegions
 ///  represent the "code", while BlockDataRegions represent instances of blocks,
@@ -632,7 +643,7 @@
   QualType getLocationType() const override {
     return locTy;
   }
-  
+
   const BlockDecl *getDecl() const {
     return BD;
   }
@@ -647,7 +658,7 @@
     return R->getKind() == BlockCodeRegionKind;
   }
 };
-  
+
 /// BlockDataRegion - A region that represents a block instance.
 ///  Blocks are represented with two kinds of regions.  BlockCodeRegions
 ///  represent the "code", while BlockDataRegions represent instances of blocks,
@@ -658,15 +669,15 @@
   friend class MemRegionManager;
 
   const BlockCodeRegion *BC;
-  const LocationContext *LC; // Can be null */
+  const LocationContext *LC; // Can be null
   unsigned BlockCount;
-  void *ReferencedVars;
-  void *OriginalVars;
+  void *ReferencedVars = nullptr;
+  void *OriginalVars = nullptr;
 
   BlockDataRegion(const BlockCodeRegion *bc, const LocationContext *lc,
                   unsigned count, const MemSpaceRegion *sreg)
       : TypedRegion(sreg, BlockDataRegionKind), BC(bc), LC(lc),
-        BlockCount(count), ReferencedVars(nullptr), OriginalVars(nullptr) {
+        BlockCount(count) {
     assert(bc);
     assert(lc);
     assert(isa<GlobalImmutableSpaceRegion>(sreg) ||
@@ -680,7 +691,7 @@
 
 public:
   const BlockCodeRegion *getCodeRegion() const { return BC; }
-  
+
   const BlockDecl *getDecl() const { return BC->getDecl(); }
 
   QualType getLocationType() const override { return BC->getLocationType(); }
@@ -688,14 +699,16 @@
   class referenced_vars_iterator {
     const MemRegion * const *R;
     const MemRegion * const *OriginalR;
+
   public:
     explicit referenced_vars_iterator(const MemRegion * const *r,
                                       const MemRegion * const *originalR)
-      : R(r), OriginalR(originalR) {}
+        : R(r), OriginalR(originalR) {}
 
     const VarRegion *getCapturedRegion() const {
       return cast<VarRegion>(*R);
     }
+
     const VarRegion *getOriginalRegion() const {
       return cast<VarRegion>(*OriginalR);
     }
@@ -704,10 +717,12 @@
       assert((R == nullptr) == (I.R == nullptr));
       return I.R == R;
     }
+
     bool operator!=(const referenced_vars_iterator &I) const {
       assert((R == nullptr) == (I.R == nullptr));
       return I.R != R;
     }
+
     referenced_vars_iterator &operator++() {
       ++R;
       ++OriginalR;
@@ -718,9 +733,9 @@
   /// Return the original region for a captured region, if
   /// one exists.
   const VarRegion *getOriginalRegion(const VarRegion *VR) const;
-      
+
   referenced_vars_iterator referenced_vars_begin() const;
-  referenced_vars_iterator referenced_vars_end() const;  
+  referenced_vars_iterator referenced_vars_end() const;
 
   void dumpToStream(raw_ostream &os) const override;
 
@@ -729,6 +744,7 @@
   static bool classof(const MemRegion* R) {
     return R->getKind() == BlockDataRegionKind;
   }
+
 private:
   void LazyInitializeReferencedVars();
   std::pair<const VarRegion *, const VarRegion *>
@@ -755,9 +771,7 @@
   }
 
 public:
-  SymbolRef getSymbol() const {
-    return sym;
-  }
+  SymbolRef getSymbol() const { return sym; }
 
   bool isBoundable() const override { return true; }
 
@@ -780,24 +794,21 @@
 class StringRegion : public TypedValueRegion {
   friend class MemRegionManager;
 
-  const StringLiteral* Str;
+  const StringLiteral *Str;
 
   StringRegion(const StringLiteral *str, const GlobalInternalSpaceRegion *sreg)
       : TypedValueRegion(sreg, StringRegionKind), Str(str) {
     assert(str);
   }
 
-  static void ProfileRegion(llvm::FoldingSetNodeID& ID,
-                            const StringLiteral* Str,
-                            const MemRegion* superRegion);
+  static void ProfileRegion(llvm::FoldingSetNodeID &ID,
+                            const StringLiteral *Str,
+                            const MemRegion *superRegion);
 
 public:
+  const StringLiteral *getStringLiteral() const { return Str; }
 
-  const StringLiteral* getStringLiteral() const { return Str; }
-
-  QualType getValueType() const override {
-    return Str->getType();
-  }
+  QualType getValueType() const override { return Str->getType(); }
 
   DefinedOrUnknownSVal getExtent(SValBuilder &svalBuilder) const override;
 
@@ -813,12 +824,12 @@
     return R->getKind() == StringRegionKind;
   }
 };
-  
+
 /// The region associated with an ObjCStringLiteral.
 class ObjCStringRegion : public TypedValueRegion {
   friend class MemRegionManager;
 
-  const ObjCStringLiteral* Str;
+  const ObjCStringLiteral *Str;
 
   ObjCStringRegion(const ObjCStringLiteral *str,
                    const GlobalInternalSpaceRegion *sreg)
@@ -826,17 +837,14 @@
     assert(str);
   }
 
-  static void ProfileRegion(llvm::FoldingSetNodeID& ID,
-                            const ObjCStringLiteral* Str,
-                            const MemRegion* superRegion);
-  
-public:
-  
-  const ObjCStringLiteral* getObjCStringLiteral() const { return Str; }
+  static void ProfileRegion(llvm::FoldingSetNodeID &ID,
+                            const ObjCStringLiteral *Str,
+                            const MemRegion *superRegion);
 
-  QualType getValueType() const override {
-    return Str->getType();
-  }
+public:
+  const ObjCStringLiteral *getObjCStringLiteral() const { return Str; }
+
+  QualType getValueType() const override { return Str->getType(); }
 
   bool isBoundable() const override { return false; }
 
@@ -870,10 +878,9 @@
   static void ProfileRegion(llvm::FoldingSetNodeID& ID,
                             const CompoundLiteralExpr *CL,
                             const MemRegion* superRegion);
+
 public:
-  QualType getValueType() const override {
-    return CL->getType();
-  }
+  QualType getValueType() const override { return CL->getType(); }
 
   bool isBoundable() const override { return !CL->isFileScope(); }
 
@@ -890,9 +897,9 @@
 
 class DeclRegion : public TypedValueRegion {
 protected:
-  const Decl *D;
+  const ValueDecl *D;
 
-  DeclRegion(const Decl *d, const MemRegion *sReg, Kind k)
+  DeclRegion(const ValueDecl *d, const MemRegion *sReg, Kind k)
       : TypedValueRegion(sReg, k), D(d) {
     assert(classof(this));
     assert(d);
@@ -902,7 +909,7 @@
                       const MemRegion* superRegion, Kind k);
 
 public:
-  const Decl *getDecl() const { return D; }
+  const ValueDecl *getDecl() const { return D; }
   void Profile(llvm::FoldingSetNodeID& ID) const override;
 
   static bool classof(const MemRegion* R) {
@@ -944,15 +951,15 @@
 
   void dumpToStream(raw_ostream &os) const override;
 
-  static bool classof(const MemRegion* R) {
-    return R->getKind() == VarRegionKind;
-  }
-
   bool canPrintPrettyAsExpr() const override;
 
   void printPrettyAsExpr(raw_ostream &os) const override;
+
+  static bool classof(const MemRegion* R) {
+    return R->getKind() == VarRegionKind;
+  }
 };
-  
+
 /// CXXThisRegion - Represents the region for the implicit 'this' parameter
 ///  in a call to a C++ method.  This region doesn't represent the object
 ///  referred to by 'this', but rather 'this' itself.
@@ -992,7 +999,7 @@
   friend class MemRegionManager;
 
   FieldRegion(const FieldDecl *fd, const SubRegion* sReg)
-    : DeclRegion(fd, sReg, FieldRegionKind) {}
+      : DeclRegion(fd, sReg, FieldRegionKind) {}
 
   static void ProfileRegion(llvm::FoldingSetNodeID& ID, const FieldDecl *FD,
                             const MemRegion* superRegion) {
@@ -1009,16 +1016,16 @@
 
   DefinedOrUnknownSVal getExtent(SValBuilder &svalBuilder) const override;
 
-  static bool classof(const MemRegion* R) {
-    return R->getKind() == FieldRegionKind;
-  }
-
   void dumpToStream(raw_ostream &os) const override;
 
   bool canPrintPretty() const override;
   void printPretty(raw_ostream &os) const override;
   bool canPrintPrettyAsExpr() const override;
   void printPrettyAsExpr(raw_ostream &os) const override;
+
+  static bool classof(const MemRegion* R) {
+    return R->getKind() == FieldRegionKind;
+  }
 };
 
 class ObjCIvarRegion : public DeclRegion {
@@ -1042,12 +1049,11 @@
     return R->getKind() == ObjCIvarRegionKind;
   }
 };
+
 //===----------------------------------------------------------------------===//
 // Auxiliary data classes for use with MemRegions.
 //===----------------------------------------------------------------------===//
 
-class ElementRegion;
-
 class RegionRawOffset {
   friend class ElementRegion;
 
@@ -1055,7 +1061,7 @@
   CharUnits Offset;
 
   RegionRawOffset(const MemRegion* reg, CharUnits offset = CharUnits::Zero())
-    : Region(reg), Offset(offset) {}
+      : Region(reg), Offset(offset) {}
 
 public:
   // FIXME: Eventually support symbolic offsets.
@@ -1066,7 +1072,7 @@
   void dump() const;
 };
 
-/// \brief ElementRegin is used to represent both array elements and casts.
+/// ElementRegin is used to represent both array elements and casts.
 class ElementRegion : public TypedValueRegion {
   friend class MemRegionManager;
 
@@ -1074,8 +1080,8 @@
   NonLoc Index;
 
   ElementRegion(QualType elementType, NonLoc Idx, const SubRegion *sReg)
-      : TypedValueRegion(sReg, ElementRegionKind),
-        ElementType(elementType), Index(Idx) {
+      : TypedValueRegion(sReg, ElementRegionKind), ElementType(elementType),
+        Index(Idx) {
     assert((!Idx.getAs<nonloc::ConcreteInt>() ||
             Idx.castAs<nonloc::ConcreteInt>().getValue().isSigned()) &&
            "The index must be signed");
@@ -1087,16 +1093,12 @@
                             SVal Idx, const MemRegion* superRegion);
 
 public:
-
   NonLoc getIndex() const { return Index; }
 
-  QualType getValueType() const override {
-    return ElementType;
-  }
+  QualType getValueType() const override { return ElementType; }
 
-  QualType getElementType() const {
-    return ElementType;
-  }
+  QualType getElementType() const { return ElementType; }
+
   /// Compute the offset within the array. The array might also be a subobject.
   RegionRawOffset getAsArrayOffset() const;
 
@@ -1128,9 +1130,7 @@
 public:
   const Expr *getExpr() const { return Ex; }
 
-  QualType getValueType() const override {
-    return Ex->getType();
-  }
+  QualType getValueType() const override { return Ex->getType(); }
 
   void dumpToStream(raw_ostream &os) const override;
 
@@ -1141,7 +1141,7 @@
   }
 };
 
-// CXXBaseObjectRegion represents a base object within a C++ object. It is 
+// CXXBaseObjectRegion represents a base object within a C++ object. It is
 // identified by the base class declaration and the region of its parent object.
 class CXXBaseObjectRegion : public TypedValueRegion {
   friend class MemRegionManager;
@@ -1167,18 +1167,18 @@
 
   void Profile(llvm::FoldingSetNodeID &ID) const override;
 
-  static bool classof(const MemRegion *region) {
-    return region->getKind() == CXXBaseObjectRegionKind;
-  }
-
   bool canPrintPrettyAsExpr() const override;
 
   void printPrettyAsExpr(raw_ostream &os) const override;
+
+  static bool classof(const MemRegion *region) {
+    return region->getKind() == CXXBaseObjectRegionKind;
+  }
 };
 
 template<typename RegionTy>
 const RegionTy* MemRegion::getAs() const {
-  if (const RegionTy* RT = dyn_cast<RegionTy>(this))
+  if (const auto *RT = dyn_cast<RegionTy>(this))
     return RT;
 
   return nullptr;
@@ -1193,32 +1193,27 @@
   llvm::BumpPtrAllocator& A;
   llvm::FoldingSet<MemRegion> Regions;
 
-  GlobalInternalSpaceRegion *InternalGlobals;
-  GlobalSystemSpaceRegion *SystemGlobals;
-  GlobalImmutableSpaceRegion *ImmutableGlobals;
+  GlobalInternalSpaceRegion *InternalGlobals = nullptr;
+  GlobalSystemSpaceRegion *SystemGlobals = nullptr;
+  GlobalImmutableSpaceRegion *ImmutableGlobals = nullptr;
 
-  
-  llvm::DenseMap<const StackFrameContext *, StackLocalsSpaceRegion *> 
+  llvm::DenseMap<const StackFrameContext *, StackLocalsSpaceRegion *>
     StackLocalsSpaceRegions;
   llvm::DenseMap<const StackFrameContext *, StackArgumentsSpaceRegion *>
     StackArgumentsSpaceRegions;
   llvm::DenseMap<const CodeTextRegion *, StaticGlobalSpaceRegion *>
     StaticsGlobalSpaceRegions;
 
-  HeapSpaceRegion *heap;
-  UnknownSpaceRegion *unknown;
-  CodeSpaceRegion *code;
+  HeapSpaceRegion *heap = nullptr;
+  UnknownSpaceRegion *unknown = nullptr;
+  CodeSpaceRegion *code = nullptr;
 
 public:
-  MemRegionManager(ASTContext &c, llvm::BumpPtrAllocator &a)
-    : C(c), A(a), InternalGlobals(nullptr), SystemGlobals(nullptr),
-      ImmutableGlobals(nullptr), heap(nullptr), unknown(nullptr),
-      code(nullptr) {}
-
+  MemRegionManager(ASTContext &c, llvm::BumpPtrAllocator &a) : C(c), A(a) {}
   ~MemRegionManager();
 
   ASTContext &getContext() { return C; }
-  
+
   llvm::BumpPtrAllocator &getAllocator() { return A; }
 
   /// getStackLocalsRegion - Retrieve the memory region associated with the
@@ -1256,19 +1251,19 @@
   const CompoundLiteralRegion*
   getCompoundLiteralRegion(const CompoundLiteralExpr *CL,
                            const LocationContext *LC);
-  
+
   /// getCXXThisRegion - Retrieve the [artificial] region associated with the
   ///  parameter 'this'.
   const CXXThisRegion *getCXXThisRegion(QualType thisPointerTy,
                                         const LocationContext *LC);
 
-  /// \brief Retrieve or create a "symbolic" memory region.
+  /// Retrieve or create a "symbolic" memory region.
   const SymbolicRegion* getSymbolicRegion(SymbolRef Sym);
 
-  /// \brief Return a unique symbolic region belonging to heap memory space.
+  /// Return a unique symbolic region belonging to heap memory space.
   const SymbolicRegion *getSymbolicHeapRegion(SymbolRef sym);
 
-  const StringRegion *getStringRegion(const StringLiteral* Str);
+  const StringRegion *getStringRegion(const StringLiteral *Str);
 
   const ObjCStringRegion *getObjCStringRegion(const ObjCStringLiteral *Str);
 
@@ -1325,7 +1320,7 @@
   /// Create a CXXBaseObjectRegion with the same CXXRecordDecl but a different
   /// super region.
   const CXXBaseObjectRegion *
-  getCXXBaseObjectRegionWithSuper(const CXXBaseObjectRegion *baseReg, 
+  getCXXBaseObjectRegionWithSuper(const CXXBaseObjectRegion *baseReg,
                                   const SubRegion *superRegion) {
     return getCXXBaseObjectRegion(baseReg->getDecl(), superRegion,
                                   baseReg->isVirtual());
@@ -1335,7 +1330,7 @@
   const BlockCodeRegion *getBlockCodeRegion(const BlockDecl *BD,
                                             CanQualType locTy,
                                             AnalysisDeclContext *AC);
-  
+
   /// getBlockDataRegion - Get the memory region associated with an instance
   ///  of a block.  Unlike many other MemRegions, the LocationContext*
   ///  argument is allowed to be NULL for cases where we have no known
@@ -1368,7 +1363,7 @@
 
   template <typename REG>
   const REG* LazyAllocate(REG*& region);
-  
+
   template <typename REG, typename ARG>
   const REG* LazyAllocate(REG*& region, ARG a);
 };
@@ -1387,29 +1382,33 @@
 
 /// Information about invalidation for a particular region/symbol.
 class RegionAndSymbolInvalidationTraits {
-  typedef unsigned char StorageTypeForKinds;
+  using StorageTypeForKinds = unsigned char;
+
   llvm::DenseMap<const MemRegion *, StorageTypeForKinds> MRTraitsMap;
   llvm::DenseMap<SymbolRef, StorageTypeForKinds> SymTraitsMap;
 
-  typedef llvm::DenseMap<const MemRegion *, StorageTypeForKinds>::const_iterator
-      const_region_iterator;
-  typedef llvm::DenseMap<SymbolRef, StorageTypeForKinds>::const_iterator
-      const_symbol_iterator;
+  using const_region_iterator =
+      llvm::DenseMap<const MemRegion *, StorageTypeForKinds>::const_iterator;
+  using const_symbol_iterator =
+      llvm::DenseMap<SymbolRef, StorageTypeForKinds>::const_iterator;
 
 public:
-  /// \brief Describes different invalidation traits.
+  /// Describes different invalidation traits.
   enum InvalidationKinds {
     /// Tells that a region's contents is not changed.
     TK_PreserveContents = 0x1,
+
     /// Suppress pointer-escaping of a region.
     TK_SuppressEscape = 0x2,
+
     // Do not invalidate super region.
     TK_DoNotInvalidateSuperRegion = 0x4,
+
     /// When applied to a MemSpaceRegion, indicates the entire memory space
     /// should be invalidated.
     TK_EntireMemSpace = 0x8
 
-    // Do not forget to extend StorageTypeForKinds if number of traits exceed 
+    // Do not forget to extend StorageTypeForKinds if number of traits exceed
     // the number of bits StorageTypeForKinds can store.
   };
 
@@ -1422,8 +1421,7 @@
 //===----------------------------------------------------------------------===//
 // Pretty-printing regions.
 //===----------------------------------------------------------------------===//
-inline raw_ostream &operator<<(raw_ostream &os,
-                               const clang::ento::MemRegion *R) {
+inline raw_ostream &operator<<(raw_ostream &os, const MemRegion *R) {
   R->dumpToStream(os);
   return os;
 }
@@ -1432,4 +1430,4 @@
 
 } // namespace clang
 
-#endif
+#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_MEMREGION_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
index ef40634..b86301a 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
@@ -36,6 +36,7 @@
 
 namespace ento {
 
+class AnalysisManager;
 class CallEvent;
 class CallEventManager;
 
@@ -111,6 +112,8 @@
     return *stateMgr;
   }
 
+  AnalysisManager &getAnalysisManager() const;
+
   /// Return the ConstraintManager.
   ConstraintManager &getConstraintManager() const;
 
@@ -177,20 +180,20 @@
   ///
   /// This returns a new state with the added constraint on \p cond.
   /// If no new state is feasible, NULL is returned.
-  ProgramStateRef assume(DefinedOrUnknownSVal cond, bool assumption) const;
+  LLVM_NODISCARD ProgramStateRef assume(DefinedOrUnknownSVal cond,
+                                        bool assumption) const;
 
   /// Assumes both "true" and "false" for \p cond, and returns both
   /// corresponding states (respectively).
   ///
   /// This is more efficient than calling assume() twice. Note that one (but not
   /// both) of the returned states may be NULL.
-  std::pair<ProgramStateRef, ProgramStateRef>
+  LLVM_NODISCARD std::pair<ProgramStateRef, ProgramStateRef>
   assume(DefinedOrUnknownSVal cond) const;
 
-  ProgramStateRef assumeInBound(DefinedOrUnknownSVal idx,
-                               DefinedOrUnknownSVal upperBound,
-                               bool assumption,
-                               QualType IndexType = QualType()) const;
+  LLVM_NODISCARD ProgramStateRef
+  assumeInBound(DefinedOrUnknownSVal idx, DefinedOrUnknownSVal upperBound,
+                bool assumption, QualType IndexType = QualType()) const;
 
   /// Assumes that the value of \p Val is bounded with [\p From; \p To]
   /// (if \p assumption is "true") or it is fully out of this range
@@ -198,25 +201,25 @@
   ///
   /// This returns a new state with the added constraint on \p cond.
   /// If no new state is feasible, NULL is returned.
-  ProgramStateRef assumeInclusiveRange(DefinedOrUnknownSVal Val,
-                                       const llvm::APSInt &From,
-                                       const llvm::APSInt &To,
-                                       bool assumption) const;
+  LLVM_NODISCARD ProgramStateRef assumeInclusiveRange(DefinedOrUnknownSVal Val,
+                                                      const llvm::APSInt &From,
+                                                      const llvm::APSInt &To,
+                                                      bool assumption) const;
 
   /// Assumes given range both "true" and "false" for \p Val, and returns both
   /// corresponding states (respectively).
   ///
   /// This is more efficient than calling assume() twice. Note that one (but not
   /// both) of the returned states may be NULL.
-  std::pair<ProgramStateRef, ProgramStateRef>
+  LLVM_NODISCARD std::pair<ProgramStateRef, ProgramStateRef>
   assumeInclusiveRange(DefinedOrUnknownSVal Val, const llvm::APSInt &From,
                        const llvm::APSInt &To) const;
 
-  /// \brief Check if the given SVal is not constrained to zero and is not
+  /// Check if the given SVal is not constrained to zero and is not
   ///        a zero constant.
   ConditionTruthVal isNonNull(SVal V) const;
 
-  /// \brief Check if the given SVal is constrained to zero or is a zero
+  /// Check if the given SVal is constrained to zero or is a zero
   ///        constant.
   ConditionTruthVal isNull(SVal V) const;
 
@@ -232,21 +235,34 @@
 
   /// Create a new state by binding the value 'V' to the statement 'S' in the
   /// state's environment.
-  ProgramStateRef BindExpr(const Stmt *S, const LocationContext *LCtx,
-                               SVal V, bool Invalidate = true) const;
+  LLVM_NODISCARD ProgramStateRef BindExpr(const Stmt *S,
+                                          const LocationContext *LCtx, SVal V,
+                                          bool Invalidate = true) const;
 
-  ProgramStateRef bindLoc(Loc location,
-                          SVal V,
-                          const LocationContext *LCtx,
-                          bool notifyChanges = true) const;
+  LLVM_NODISCARD ProgramStateRef bindLoc(Loc location, SVal V,
+                                         const LocationContext *LCtx,
+                                         bool notifyChanges = true) const;
 
-  ProgramStateRef bindLoc(SVal location, SVal V, const LocationContext *LCtx) const;
+  LLVM_NODISCARD ProgramStateRef bindLoc(SVal location, SVal V,
+                                         const LocationContext *LCtx) const;
 
-  ProgramStateRef bindDefault(SVal loc, SVal V, const LocationContext *LCtx) const;
+  /// Initializes the region of memory represented by \p loc with an initial
+  /// value. Once initialized, all values loaded from any sub-regions of that
+  /// region will be equal to \p V, unless overwritten later by the program.
+  /// This method should not be used on regions that are already initialized.
+  /// If you need to indicate that memory contents have suddenly become unknown
+  /// within a certain region of memory, consider invalidateRegions().
+  LLVM_NODISCARD ProgramStateRef
+  bindDefaultInitial(SVal loc, SVal V, const LocationContext *LCtx) const;
 
-  ProgramStateRef killBinding(Loc LV) const;
+  /// Performs C++ zero-initialization procedure on the region of memory
+  /// represented by \p loc.
+  LLVM_NODISCARD ProgramStateRef
+  bindDefaultZero(SVal loc, const LocationContext *LCtx) const;
 
-  /// \brief Returns the state with bindings for the given regions
+  LLVM_NODISCARD ProgramStateRef killBinding(Loc LV) const;
+
+  /// Returns the state with bindings for the given regions
   ///  cleared from the store.
   ///
   /// Optionally invalidates global regions as well.
@@ -264,14 +280,14 @@
   ///        the call and should be considered directly invalidated.
   /// \param ITraits information about special handling for a particular
   ///        region/symbol.
-  ProgramStateRef
+  LLVM_NODISCARD ProgramStateRef
   invalidateRegions(ArrayRef<const MemRegion *> Regions, const Expr *E,
                     unsigned BlockCount, const LocationContext *LCtx,
                     bool CausesPointerEscape, InvalidatedSymbols *IS = nullptr,
                     const CallEvent *Call = nullptr,
                     RegionAndSymbolInvalidationTraits *ITraits = nullptr) const;
 
-  ProgramStateRef
+  LLVM_NODISCARD ProgramStateRef
   invalidateRegions(ArrayRef<SVal> Regions, const Expr *E,
                     unsigned BlockCount, const LocationContext *LCtx,
                     bool CausesPointerEscape, InvalidatedSymbols *IS = nullptr,
@@ -280,8 +296,15 @@
 
   /// enterStackFrame - Returns the state for entry to the given stack frame,
   ///  preserving the current state.
-  ProgramStateRef enterStackFrame(const CallEvent &Call,
-                                  const StackFrameContext *CalleeCtx) const;
+  LLVM_NODISCARD ProgramStateRef enterStackFrame(
+      const CallEvent &Call, const StackFrameContext *CalleeCtx) const;
+
+  /// Get the lvalue for a base class object reference.
+  Loc getLValue(const CXXBaseSpecifier &BaseSpec, const SubRegion *Super) const;
+
+  /// Get the lvalue for a base class object reference.
+  Loc getLValue(const CXXRecordDecl *BaseClass, const SubRegion *Super,
+                bool IsVirtual) const;
 
   /// Get the lvalue for a variable reference.
   Loc getLValue(const VarDecl *D, const LocationContext *LC) const;
@@ -306,24 +329,24 @@
 
   SVal getSValAsScalarOrLoc(const Stmt *Ex, const LocationContext *LCtx) const;
 
-  /// \brief Return the value bound to the specified location.
+  /// Return the value bound to the specified location.
   /// Returns UnknownVal() if none found.
   SVal getSVal(Loc LV, QualType T = QualType()) const;
 
   /// Returns the "raw" SVal bound to LV before any value simplfication.
   SVal getRawSVal(Loc LV, QualType T= QualType()) const;
 
-  /// \brief Return the value bound to the specified location.
+  /// Return the value bound to the specified location.
   /// Returns UnknownVal() if none found.
   SVal getSVal(const MemRegion* R, QualType T = QualType()) const;
 
-  /// \brief Return the value bound to the specified location, assuming
+  /// Return the value bound to the specified location, assuming
   /// that the value is a scalar integer or an enumeration or a pointer.
   /// Returns UnknownVal() if none found or the region is not known to hold
   /// a value of such type.
   SVal getSValAsScalarOrLoc(const MemRegion *R) const;
 
-  /// \brief Visits the symbols reachable from the given SVal using the provided
+  /// Visits the symbols reachable from the given SVal using the provided
   /// SymbolVisitor.
   ///
   /// This is a convenience API. Consider using ScanReachableSymbols class
@@ -332,12 +355,12 @@
   /// \sa ScanReachableSymbols
   bool scanReachableSymbols(SVal val, SymbolVisitor& visitor) const;
 
-  /// \brief Visits the symbols reachable from the SVals in the given range
+  /// Visits the symbols reachable from the SVals in the given range
   /// using the provided SymbolVisitor.
   bool scanReachableSymbols(const SVal *I, const SVal *E,
                             SymbolVisitor &visitor) const;
 
-  /// \brief Visits the symbols reachable from the regions in the given
+  /// Visits the symbols reachable from the regions in the given
   /// MemRegions range using the provided SymbolVisitor.
   bool scanReachableSymbols(const MemRegion * const *I,
                             const MemRegion * const *E,
@@ -352,27 +375,29 @@
                        const MemRegion * const *end) const;
 
   /// Create a new state in which the statement is marked as tainted.
-  ProgramStateRef addTaint(const Stmt *S, const LocationContext *LCtx,
-                               TaintTagType Kind = TaintTagGeneric) const;
+  LLVM_NODISCARD ProgramStateRef
+  addTaint(const Stmt *S, const LocationContext *LCtx,
+           TaintTagType Kind = TaintTagGeneric) const;
 
   /// Create a new state in which the value is marked as tainted.
-  ProgramStateRef addTaint(SVal V, TaintTagType Kind = TaintTagGeneric) const;
+  LLVM_NODISCARD ProgramStateRef
+  addTaint(SVal V, TaintTagType Kind = TaintTagGeneric) const;
 
   /// Create a new state in which the symbol is marked as tainted.
-  ProgramStateRef addTaint(SymbolRef S,
+  LLVM_NODISCARD ProgramStateRef addTaint(SymbolRef S,
                                TaintTagType Kind = TaintTagGeneric) const;
 
   /// Create a new state in which the region symbol is marked as tainted.
-  ProgramStateRef addTaint(const MemRegion *R,
-                               TaintTagType Kind = TaintTagGeneric) const;
+  LLVM_NODISCARD ProgramStateRef
+  addTaint(const MemRegion *R, TaintTagType Kind = TaintTagGeneric) const;
 
   /// Create a new state in a which a sub-region of a given symbol is tainted.
   /// This might be necessary when referring to regions that can not have an
   /// individual symbol, e.g. if they are represented by the default binding of
   /// a LazyCompoundVal.
-  ProgramStateRef addPartialTaint(SymbolRef ParentSym,
-                                  const SubRegion *SubRegion,
-                                  TaintTagType Kind = TaintTagGeneric) const;
+  LLVM_NODISCARD ProgramStateRef
+  addPartialTaint(SymbolRef ParentSym, const SubRegion *SubRegion,
+                  TaintTagType Kind = TaintTagGeneric) const;
 
   /// Check if the statement is tainted in the current state.
   bool isTainted(const Stmt *S, const LocationContext *LCtx,
@@ -387,8 +412,9 @@
 
   void *const* FindGDM(void *K) const;
 
-  template<typename T>
-  ProgramStateRef add(typename ProgramStateTrait<T>::key_type K) const;
+  template <typename T>
+  LLVM_NODISCARD ProgramStateRef
+  add(typename ProgramStateTrait<T>::key_type K) const;
 
   template <typename T>
   typename ProgramStateTrait<T>::data_type
@@ -406,27 +432,31 @@
   template <typename T>
   typename ProgramStateTrait<T>::context_type get_context() const;
 
-
-  template<typename T>
-  ProgramStateRef remove(typename ProgramStateTrait<T>::key_type K) const;
-
-  template<typename T>
-  ProgramStateRef remove(typename ProgramStateTrait<T>::key_type K,
-                        typename ProgramStateTrait<T>::context_type C) const;
   template <typename T>
-  ProgramStateRef remove() const;
+  LLVM_NODISCARD ProgramStateRef
+  remove(typename ProgramStateTrait<T>::key_type K) const;
 
-  template<typename T>
-  ProgramStateRef set(typename ProgramStateTrait<T>::data_type D) const;
+  template <typename T>
+  LLVM_NODISCARD ProgramStateRef
+  remove(typename ProgramStateTrait<T>::key_type K,
+         typename ProgramStateTrait<T>::context_type C) const;
 
-  template<typename T>
-  ProgramStateRef set(typename ProgramStateTrait<T>::key_type K,
-                     typename ProgramStateTrait<T>::value_type E) const;
+  template <typename T> LLVM_NODISCARD ProgramStateRef remove() const;
 
-  template<typename T>
-  ProgramStateRef set(typename ProgramStateTrait<T>::key_type K,
-                     typename ProgramStateTrait<T>::value_type E,
-                     typename ProgramStateTrait<T>::context_type C) const;
+  template <typename T>
+  LLVM_NODISCARD ProgramStateRef
+  set(typename ProgramStateTrait<T>::data_type D) const;
+
+  template <typename T>
+  LLVM_NODISCARD ProgramStateRef
+  set(typename ProgramStateTrait<T>::key_type K,
+      typename ProgramStateTrait<T>::value_type E) const;
+
+  template <typename T>
+  LLVM_NODISCARD ProgramStateRef
+  set(typename ProgramStateTrait<T>::key_type K,
+      typename ProgramStateTrait<T>::value_type E,
+      typename ProgramStateTrait<T>::context_type C) const;
 
   template<typename T>
   bool contains(typename ProgramStateTrait<T>::key_type key) const {
@@ -713,6 +743,22 @@
   return this;
 }
 
+inline Loc ProgramState::getLValue(const CXXBaseSpecifier &BaseSpec,
+                                   const SubRegion *Super) const {
+  const auto *Base = BaseSpec.getType()->getAsCXXRecordDecl();
+  return loc::MemRegionVal(
+           getStateManager().getRegionManager().getCXXBaseObjectRegion(
+                                            Base, Super, BaseSpec.isVirtual()));
+}
+
+inline Loc ProgramState::getLValue(const CXXRecordDecl *BaseClass,
+                                   const SubRegion *Super,
+                                   bool IsVirtual) const {
+  return loc::MemRegionVal(
+           getStateManager().getRegionManager().getCXXBaseObjectRegion(
+                                                  BaseClass, Super, IsVirtual));
+}
+
 inline Loc ProgramState::getLValue(const VarDecl *VD,
                                const LocationContext *LC) const {
   return getStateManager().StoreMgr->getLValueVar(VD, LC);
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h
new file mode 100644
index 0000000..d2ba1f7
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h
@@ -0,0 +1,216 @@
+//== RangedConstraintManager.h ----------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  Ranged constraint manager, built on SimpleConstraintManager.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_LIB_STATICANALYZER_CORE_RANGEDCONSTRAINTMANAGER_H
+#define LLVM_CLANG_LIB_STATICANALYZER_CORE_RANGEDCONSTRAINTMANAGER_H
+
+#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h"
+
+namespace clang {
+
+namespace ento {
+
+/// A Range represents the closed range [from, to].  The caller must
+/// guarantee that from <= to.  Note that Range is immutable, so as not
+/// to subvert RangeSet's immutability.
+class Range : public std::pair<const llvm::APSInt *, const llvm::APSInt *> {
+public:
+  Range(const llvm::APSInt &from, const llvm::APSInt &to)
+      : std::pair<const llvm::APSInt *, const llvm::APSInt *>(&from, &to) {
+    assert(from <= to);
+  }
+  bool Includes(const llvm::APSInt &v) const {
+    return *first <= v && v <= *second;
+  }
+  const llvm::APSInt &From() const { return *first; }
+  const llvm::APSInt &To() const { return *second; }
+  const llvm::APSInt *getConcreteValue() const {
+    return &From() == &To() ? &From() : nullptr;
+  }
+
+  void Profile(llvm::FoldingSetNodeID &ID) const {
+    ID.AddPointer(&From());
+    ID.AddPointer(&To());
+  }
+};
+
+class RangeTrait : public llvm::ImutContainerInfo<Range> {
+public:
+  // When comparing if one Range is less than another, we should compare
+  // the actual APSInt values instead of their pointers.  This keeps the order
+  // consistent (instead of comparing by pointer values) and can potentially
+  // be used to speed up some of the operations in RangeSet.
+  static inline bool isLess(key_type_ref lhs, key_type_ref rhs) {
+    return *lhs.first < *rhs.first ||
+           (!(*rhs.first < *lhs.first) && *lhs.second < *rhs.second);
+  }
+};
+
+/// RangeSet contains a set of ranges. If the set is empty, then
+///  there the value of a symbol is overly constrained and there are no
+///  possible values for that symbol.
+class RangeSet {
+  typedef llvm::ImmutableSet<Range, RangeTrait> PrimRangeSet;
+  PrimRangeSet ranges; // no need to make const, since it is an
+                       // ImmutableSet - this allows default operator=
+                       // to work.
+public:
+  typedef PrimRangeSet::Factory Factory;
+  typedef PrimRangeSet::iterator iterator;
+
+  RangeSet(PrimRangeSet RS) : ranges(RS) {}
+
+  /// Create a new set with all ranges of this set and RS.
+  /// Possible intersections are not checked here.
+  RangeSet addRange(Factory &F, const RangeSet &RS) {
+    PrimRangeSet Ranges(RS.ranges);
+    for (const auto &range : ranges)
+      Ranges = F.add(Ranges, range);
+    return RangeSet(Ranges);
+  }
+
+  iterator begin() const { return ranges.begin(); }
+  iterator end() const { return ranges.end(); }
+
+  bool isEmpty() const { return ranges.isEmpty(); }
+
+  /// Construct a new RangeSet representing '{ [from, to] }'.
+  RangeSet(Factory &F, const llvm::APSInt &from, const llvm::APSInt &to)
+      : ranges(F.add(F.getEmptySet(), Range(from, to))) {}
+
+  /// Profile - Generates a hash profile of this RangeSet for use
+  ///  by FoldingSet.
+  void Profile(llvm::FoldingSetNodeID &ID) const { ranges.Profile(ID); }
+
+  /// getConcreteValue - If a symbol is contrained to equal a specific integer
+  ///  constant then this method returns that value.  Otherwise, it returns
+  ///  NULL.
+  const llvm::APSInt *getConcreteValue() const {
+    return ranges.isSingleton() ? ranges.begin()->getConcreteValue() : nullptr;
+  }
+
+private:
+  void IntersectInRange(BasicValueFactory &BV, Factory &F,
+                        const llvm::APSInt &Lower, const llvm::APSInt &Upper,
+                        PrimRangeSet &newRanges, PrimRangeSet::iterator &i,
+                        PrimRangeSet::iterator &e) const;
+
+  const llvm::APSInt &getMinValue() const;
+
+  bool pin(llvm::APSInt &Lower, llvm::APSInt &Upper) const;
+
+public:
+  RangeSet Intersect(BasicValueFactory &BV, Factory &F, llvm::APSInt Lower,
+                     llvm::APSInt Upper) const;
+
+  RangeSet Negate(BasicValueFactory &BV, Factory &F) const;
+
+  void print(raw_ostream &os) const;
+
+  bool operator==(const RangeSet &other) const {
+    return ranges == other.ranges;
+  }
+};
+
+
+class ConstraintRange {};
+using ConstraintRangeTy = llvm::ImmutableMap<SymbolRef, RangeSet>;
+
+template <>
+struct ProgramStateTrait<ConstraintRange>
+  : public ProgramStatePartialTrait<ConstraintRangeTy> {
+  static void *GDMIndex() { static int Index; return &Index; }
+};
+
+
+class RangedConstraintManager : public SimpleConstraintManager {
+public:
+  RangedConstraintManager(SubEngine *SE, SValBuilder &SB)
+      : SimpleConstraintManager(SE, SB) {}
+
+  ~RangedConstraintManager() override;
+
+  //===------------------------------------------------------------------===//
+  // Implementation for interface from SimpleConstraintManager.
+  //===------------------------------------------------------------------===//
+
+  ProgramStateRef assumeSym(ProgramStateRef State, SymbolRef Sym,
+                            bool Assumption) override;
+
+  ProgramStateRef assumeSymInclusiveRange(ProgramStateRef State, SymbolRef Sym,
+                                          const llvm::APSInt &From,
+                                          const llvm::APSInt &To,
+                                          bool InRange) override;
+
+  ProgramStateRef assumeSymUnsupported(ProgramStateRef State, SymbolRef Sym,
+                                       bool Assumption) override;
+
+protected:
+  /// Assume a constraint between a symbolic expression and a concrete integer.
+  virtual ProgramStateRef assumeSymRel(ProgramStateRef State, SymbolRef Sym,
+                               BinaryOperator::Opcode op,
+                               const llvm::APSInt &Int);
+
+  //===------------------------------------------------------------------===//
+  // Interface that subclasses must implement.
+  //===------------------------------------------------------------------===//
+
+  // Each of these is of the form "$Sym+Adj <> V", where "<>" is the comparison
+  // operation for the method being invoked.
+
+  virtual ProgramStateRef assumeSymNE(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymEQ(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymLT(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymGT(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymLE(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymGE(ProgramStateRef State, SymbolRef Sym,
+                                      const llvm::APSInt &V,
+                                      const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymWithinInclusiveRange(
+      ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From,
+      const llvm::APSInt &To, const llvm::APSInt &Adjustment) = 0;
+
+  virtual ProgramStateRef assumeSymOutsideInclusiveRange(
+      ProgramStateRef State, SymbolRef Sym, const llvm::APSInt &From,
+      const llvm::APSInt &To, const llvm::APSInt &Adjustment) = 0;
+
+  //===------------------------------------------------------------------===//
+  // Internal implementation.
+  //===------------------------------------------------------------------===//
+private:
+  static void computeAdjustment(SymbolRef &Sym, llvm::APSInt &Adjustment);
+};
+
+} // end GR namespace
+
+} // end clang namespace
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h
new file mode 100644
index 0000000..19d3d59
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTConstraintManager.h
@@ -0,0 +1,77 @@
+//== SMTConstraintManager.h -------------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic API, which will be the base class for
+//  every SMT solver specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONSTRAINTMANAGER_H
+#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONSTRAINTMANAGER_H
+
+#include "clang/StaticAnalyzer/Core/PathSensitive/RangedConstraintManager.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SMTSolver.h"
+
+namespace clang {
+namespace ento {
+
+class SMTConstraintManager : public clang::ento::SimpleConstraintManager {
+  SMTSolverRef &Solver;
+
+public:
+  SMTConstraintManager(clang::ento::SubEngine *SE, clang::ento::SValBuilder &SB,
+                       SMTSolverRef &S)
+      : SimpleConstraintManager(SE, SB), Solver(S) {}
+  virtual ~SMTConstraintManager() = default;
+
+  //===------------------------------------------------------------------===//
+  // Implementation for interface from SimpleConstraintManager.
+  //===------------------------------------------------------------------===//
+
+  ProgramStateRef assumeSym(ProgramStateRef state, SymbolRef Sym,
+                            bool Assumption) override;
+
+  ProgramStateRef assumeSymInclusiveRange(ProgramStateRef State, SymbolRef Sym,
+                                          const llvm::APSInt &From,
+                                          const llvm::APSInt &To,
+                                          bool InRange) override;
+
+  ProgramStateRef assumeSymUnsupported(ProgramStateRef State, SymbolRef Sym,
+                                       bool Assumption) override;
+
+  //===------------------------------------------------------------------===//
+  // Implementation for interface from ConstraintManager.
+  //===------------------------------------------------------------------===//
+
+  ConditionTruthVal checkNull(ProgramStateRef State, SymbolRef Sym) override;
+
+  const llvm::APSInt *getSymVal(ProgramStateRef State,
+                                SymbolRef Sym) const override;
+
+  /// Dumps SMT formula
+  LLVM_DUMP_METHOD void dump() const { Solver->dump(); }
+
+protected:
+  // Check whether a new model is satisfiable, and update the program state.
+  virtual ProgramStateRef assumeExpr(ProgramStateRef State, SymbolRef Sym,
+                                     const SMTExprRef &Exp) = 0;
+
+  /// Given a program state, construct the logical conjunction and add it to
+  /// the solver
+  virtual void addStateConstraints(ProgramStateRef State) const = 0;
+
+  // Generate and check a Z3 model, using the given constraint.
+  ConditionTruthVal checkModel(ProgramStateRef State,
+                               const SMTExprRef &Exp) const;
+}; // end class SMTConstraintManager
+
+} // namespace ento
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTContext.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTContext.h
new file mode 100644
index 0000000..45c9df4
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTContext.h
@@ -0,0 +1,31 @@
+//== SMTContext.h -----------------------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic Context API, which will be the base class
+//  for every SMT solver context specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONTEXT_H
+#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTCONTEXT_H
+
+namespace clang {
+namespace ento {
+
+/// Generic base class for SMT contexts
+class SMTContext {
+public:
+  SMTContext() = default;
+  virtual ~SMTContext() = default;
+};
+
+} // namespace ento
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTExpr.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTExpr.h
new file mode 100644
index 0000000..9dedf96
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTExpr.h
@@ -0,0 +1,62 @@
+//== SMTExpr.h --------------------------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic Expr API, which will be the base class
+//  for every SMT solver expr specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTEXPR_H
+#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTEXPR_H
+
+#include "clang/Basic/TargetInfo.h"
+#include "llvm/ADT/FoldingSet.h"
+
+namespace clang {
+namespace ento {
+
+/// Generic base class for SMT exprs
+class SMTExpr {
+public:
+  SMTExpr() = default;
+  virtual ~SMTExpr() = default;
+
+  bool operator<(const SMTExpr &Other) const {
+    llvm::FoldingSetNodeID ID1, ID2;
+    Profile(ID1);
+    Other.Profile(ID2);
+    return ID1 < ID2;
+  }
+
+  virtual void Profile(llvm::FoldingSetNodeID &ID) const {
+    static int Tag = 0;
+    ID.AddPointer(&Tag);
+  }
+
+  friend bool operator==(SMTExpr const &LHS, SMTExpr const &RHS) {
+    return LHS.equal_to(RHS);
+  }
+
+  virtual void print(raw_ostream &OS) const = 0;
+
+  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
+
+protected:
+  /// Query the SMT solver and returns true if two sorts are equal (same kind
+  /// and bit width). This does not check if the two sorts are the same objects.
+  virtual bool equal_to(SMTExpr const &other) const = 0;
+};
+
+/// Shared pointer for SMTExprs, used by SMTSolver API.
+using SMTExprRef = std::shared_ptr<SMTExpr>;
+
+} // namespace ento
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSolver.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSolver.h
new file mode 100644
index 0000000..a43ca48
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSolver.h
@@ -0,0 +1,996 @@
+//== SMTSolver.h ------------------------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic Solver API, which will be the base class
+//  for every SMT solver specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSOLVER_H
+#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSOLVER_H
+
+#include "clang/AST/Expr.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/APSIntType.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/ConstraintManager.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SMTExpr.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SMTSort.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h"
+
+namespace clang {
+namespace ento {
+
+/// Generic base class for SMT Solvers
+///
+/// This class is responsible for wrapping all sorts and expression generation,
+/// through the mk* methods. It also provides methods to create SMT expressions
+/// straight from clang's AST, through the from* methods.
+class SMTSolver {
+public:
+  SMTSolver() = default;
+  virtual ~SMTSolver() = default;
+
+  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
+
+  // Returns an appropriate floating-point sort for the given bitwidth.
+  SMTSortRef getFloatSort(unsigned BitWidth) {
+    switch (BitWidth) {
+    case 16:
+      return getFloat16Sort();
+    case 32:
+      return getFloat32Sort();
+    case 64:
+      return getFloat64Sort();
+    case 128:
+      return getFloat128Sort();
+    default:;
+    }
+    llvm_unreachable("Unsupported floating-point bitwidth!");
+  }
+
+  // Returns an appropriate sort, given a QualType and it's bit width.
+  SMTSortRef mkSort(const QualType &Ty, unsigned BitWidth) {
+    if (Ty->isBooleanType())
+      return getBoolSort();
+
+    if (Ty->isRealFloatingType())
+      return getFloatSort(BitWidth);
+
+    return getBitvectorSort(BitWidth);
+  }
+
+  /// Constructs an SMTExprRef from an unary operator.
+  SMTExprRef fromUnOp(const UnaryOperator::Opcode Op, const SMTExprRef &Exp) {
+    switch (Op) {
+    case UO_Minus:
+      return mkBVNeg(Exp);
+
+    case UO_Not:
+      return mkBVNot(Exp);
+
+    case UO_LNot:
+      return mkNot(Exp);
+
+    default:;
+    }
+    llvm_unreachable("Unimplemented opcode");
+  }
+
+  /// Constructs an SMTExprRef from a floating-point unary operator.
+  SMTExprRef fromFloatUnOp(const UnaryOperator::Opcode Op,
+                           const SMTExprRef &Exp) {
+    switch (Op) {
+    case UO_Minus:
+      return mkFPNeg(Exp);
+
+    case UO_LNot:
+      return fromUnOp(Op, Exp);
+
+    default:;
+    }
+    llvm_unreachable("Unimplemented opcode");
+  }
+
+  /// Construct an SMTExprRef from a n-ary binary operator.
+  SMTExprRef fromNBinOp(const BinaryOperator::Opcode Op,
+                        const std::vector<SMTExprRef> &ASTs) {
+    assert(!ASTs.empty());
+
+    if (Op != BO_LAnd && Op != BO_LOr)
+      llvm_unreachable("Unimplemented opcode");
+
+    SMTExprRef res = ASTs.front();
+    for (std::size_t i = 1; i < ASTs.size(); ++i)
+      res = (Op == BO_LAnd) ? mkAnd(res, ASTs[i]) : mkOr(res, ASTs[i]);
+    return res;
+  }
+
+  /// Construct an SMTExprRef from a binary operator.
+  SMTExprRef fromBinOp(const SMTExprRef &LHS, const BinaryOperator::Opcode Op,
+                       const SMTExprRef &RHS, bool isSigned) {
+    assert(*getSort(LHS) == *getSort(RHS) && "AST's must have the same sort!");
+
+    switch (Op) {
+    // Multiplicative operators
+    case BO_Mul:
+      return mkBVMul(LHS, RHS);
+
+    case BO_Div:
+      return isSigned ? mkBVSDiv(LHS, RHS) : mkBVUDiv(LHS, RHS);
+
+    case BO_Rem:
+      return isSigned ? mkBVSRem(LHS, RHS) : mkBVURem(LHS, RHS);
+
+    // Additive operators
+    case BO_Add:
+      return mkBVAdd(LHS, RHS);
+
+    case BO_Sub:
+      return mkBVSub(LHS, RHS);
+
+    // Bitwise shift operators
+    case BO_Shl:
+      return mkBVShl(LHS, RHS);
+
+    case BO_Shr:
+      return isSigned ? mkBVAshr(LHS, RHS) : mkBVLshr(LHS, RHS);
+
+    // Relational operators
+    case BO_LT:
+      return isSigned ? mkBVSlt(LHS, RHS) : mkBVUlt(LHS, RHS);
+
+    case BO_GT:
+      return isSigned ? mkBVSgt(LHS, RHS) : mkBVUgt(LHS, RHS);
+
+    case BO_LE:
+      return isSigned ? mkBVSle(LHS, RHS) : mkBVUle(LHS, RHS);
+
+    case BO_GE:
+      return isSigned ? mkBVSge(LHS, RHS) : mkBVUge(LHS, RHS);
+
+    // Equality operators
+    case BO_EQ:
+      return mkEqual(LHS, RHS);
+
+    case BO_NE:
+      return fromUnOp(UO_LNot, fromBinOp(LHS, BO_EQ, RHS, isSigned));
+
+    // Bitwise operators
+    case BO_And:
+      return mkBVAnd(LHS, RHS);
+
+    case BO_Xor:
+      return mkBVXor(LHS, RHS);
+
+    case BO_Or:
+      return mkBVOr(LHS, RHS);
+
+    // Logical operators
+    case BO_LAnd:
+      return mkAnd(LHS, RHS);
+
+    case BO_LOr:
+      return mkOr(LHS, RHS);
+
+    default:;
+    }
+    llvm_unreachable("Unimplemented opcode");
+  }
+
+  /// Construct an SMTExprRef from a special floating-point binary operator.
+  SMTExprRef fromFloatSpecialBinOp(const SMTExprRef &LHS,
+                                   const BinaryOperator::Opcode Op,
+                                   const llvm::APFloat::fltCategory &RHS) {
+    switch (Op) {
+    // Equality operators
+    case BO_EQ:
+      switch (RHS) {
+      case llvm::APFloat::fcInfinity:
+        return mkFPIsInfinite(LHS);
+
+      case llvm::APFloat::fcNaN:
+        return mkFPIsNaN(LHS);
+
+      case llvm::APFloat::fcNormal:
+        return mkFPIsNormal(LHS);
+
+      case llvm::APFloat::fcZero:
+        return mkFPIsZero(LHS);
+      }
+      break;
+
+    case BO_NE:
+      return fromFloatUnOp(UO_LNot, fromFloatSpecialBinOp(LHS, BO_EQ, RHS));
+
+    default:;
+    }
+
+    llvm_unreachable("Unimplemented opcode");
+  }
+
+  /// Construct an SMTExprRef from a floating-point binary operator.
+  SMTExprRef fromFloatBinOp(const SMTExprRef &LHS,
+                            const BinaryOperator::Opcode Op,
+                            const SMTExprRef &RHS) {
+    assert(*getSort(LHS) == *getSort(RHS) && "AST's must have the same sort!");
+
+    switch (Op) {
+    // Multiplicative operators
+    case BO_Mul:
+      return mkFPMul(LHS, RHS);
+
+    case BO_Div:
+      return mkFPDiv(LHS, RHS);
+
+    case BO_Rem:
+      return mkFPRem(LHS, RHS);
+
+      // Additive operators
+    case BO_Add:
+      return mkFPAdd(LHS, RHS);
+
+    case BO_Sub:
+      return mkFPSub(LHS, RHS);
+
+      // Relational operators
+    case BO_LT:
+      return mkFPLt(LHS, RHS);
+
+    case BO_GT:
+      return mkFPGt(LHS, RHS);
+
+    case BO_LE:
+      return mkFPLe(LHS, RHS);
+
+    case BO_GE:
+      return mkFPGe(LHS, RHS);
+
+      // Equality operators
+    case BO_EQ:
+      return mkFPEqual(LHS, RHS);
+
+    case BO_NE:
+      return fromFloatUnOp(UO_LNot, fromFloatBinOp(LHS, BO_EQ, RHS));
+
+      // Logical operators
+    case BO_LAnd:
+    case BO_LOr:
+      return fromBinOp(LHS, Op, RHS, false);
+
+    default:;
+    }
+
+    llvm_unreachable("Unimplemented opcode");
+  }
+
+  /// Construct an SMTExprRef from a QualType FromTy to a QualType ToTy, and
+  /// their bit widths.
+  SMTExprRef fromCast(const SMTExprRef &Exp, QualType ToTy, uint64_t ToBitWidth,
+                      QualType FromTy, uint64_t FromBitWidth) {
+    if ((FromTy->isIntegralOrEnumerationType() &&
+         ToTy->isIntegralOrEnumerationType()) ||
+        (FromTy->isAnyPointerType() ^ ToTy->isAnyPointerType()) ||
+        (FromTy->isBlockPointerType() ^ ToTy->isBlockPointerType()) ||
+        (FromTy->isReferenceType() ^ ToTy->isReferenceType())) {
+
+      if (FromTy->isBooleanType()) {
+        assert(ToBitWidth > 0 && "BitWidth must be positive!");
+        return mkIte(Exp, mkBitvector(llvm::APSInt("1"), ToBitWidth),
+                     mkBitvector(llvm::APSInt("0"), ToBitWidth));
+      }
+
+      if (ToBitWidth > FromBitWidth)
+        return FromTy->isSignedIntegerOrEnumerationType()
+                   ? mkBVSignExt(ToBitWidth - FromBitWidth, Exp)
+                   : mkBVZeroExt(ToBitWidth - FromBitWidth, Exp);
+
+      if (ToBitWidth < FromBitWidth)
+        return mkBVExtract(ToBitWidth - 1, 0, Exp);
+
+      // Both are bitvectors with the same width, ignore the type cast
+      return Exp;
+    }
+
+    if (FromTy->isRealFloatingType() && ToTy->isRealFloatingType()) {
+      if (ToBitWidth != FromBitWidth)
+        return mkFPtoFP(Exp, getFloatSort(ToBitWidth));
+
+      return Exp;
+    }
+
+    if (FromTy->isIntegralOrEnumerationType() && ToTy->isRealFloatingType()) {
+      SMTSortRef Sort = getFloatSort(ToBitWidth);
+      return FromTy->isSignedIntegerOrEnumerationType() ? mkFPtoSBV(Exp, Sort)
+                                                        : mkFPtoUBV(Exp, Sort);
+    }
+
+    if (FromTy->isRealFloatingType() && ToTy->isIntegralOrEnumerationType())
+      return ToTy->isSignedIntegerOrEnumerationType()
+                 ? mkSBVtoFP(Exp, ToBitWidth)
+                 : mkUBVtoFP(Exp, ToBitWidth);
+
+    llvm_unreachable("Unsupported explicit type cast!");
+  }
+
+  // Callback function for doCast parameter on APSInt type.
+  llvm::APSInt castAPSInt(const llvm::APSInt &V, QualType ToTy,
+                          uint64_t ToWidth, QualType FromTy,
+                          uint64_t FromWidth) {
+    APSIntType TargetType(ToWidth, !ToTy->isSignedIntegerOrEnumerationType());
+    return TargetType.convert(V);
+  }
+
+  // Generate an SMTExprRef that represents the given symbolic expression.
+  // Sets the hasComparison parameter if the expression has a comparison
+  // operator.
+  // Sets the RetTy parameter to the final return type after promotions and
+  // casts.
+  SMTExprRef getExpr(ASTContext &Ctx, SymbolRef Sym, QualType *RetTy = nullptr,
+                     bool *hasComparison = nullptr) {
+    if (hasComparison) {
+      *hasComparison = false;
+    }
+
+    return getSymExpr(Ctx, Sym, RetTy, hasComparison);
+  }
+
+  // Generate an SMTExprRef that compares the expression to zero.
+  SMTExprRef getZeroExpr(ASTContext &Ctx, const SMTExprRef &Exp, QualType Ty,
+                         bool Assumption) {
+
+    if (Ty->isRealFloatingType()) {
+      llvm::APFloat Zero =
+          llvm::APFloat::getZero(Ctx.getFloatTypeSemantics(Ty));
+      return fromFloatBinOp(Exp, Assumption ? BO_EQ : BO_NE, fromAPFloat(Zero));
+    }
+
+    if (Ty->isIntegralOrEnumerationType() || Ty->isAnyPointerType() ||
+        Ty->isBlockPointerType() || Ty->isReferenceType()) {
+
+      // Skip explicit comparison for boolean types
+      bool isSigned = Ty->isSignedIntegerOrEnumerationType();
+      if (Ty->isBooleanType())
+        return Assumption ? fromUnOp(UO_LNot, Exp) : Exp;
+
+      return fromBinOp(Exp, Assumption ? BO_EQ : BO_NE,
+                       fromInt("0", Ctx.getTypeSize(Ty)), isSigned);
+    }
+
+    llvm_unreachable("Unsupported type for zero value!");
+  }
+
+  // Recursive implementation to unpack and generate symbolic expression.
+  // Sets the hasComparison and RetTy parameters. See getExpr().
+  SMTExprRef getSymExpr(ASTContext &Ctx, SymbolRef Sym, QualType *RetTy,
+                        bool *hasComparison) {
+    if (const SymbolData *SD = dyn_cast<SymbolData>(Sym)) {
+      if (RetTy)
+        *RetTy = Sym->getType();
+
+      return fromData(SD->getSymbolID(), Sym->getType(),
+                      Ctx.getTypeSize(Sym->getType()));
+    }
+
+    if (const SymbolCast *SC = dyn_cast<SymbolCast>(Sym)) {
+      if (RetTy)
+        *RetTy = Sym->getType();
+
+      QualType FromTy;
+      SMTExprRef Exp =
+          getSymExpr(Ctx, SC->getOperand(), &FromTy, hasComparison);
+      // Casting an expression with a comparison invalidates it. Note that this
+      // must occur after the recursive call above.
+      // e.g. (signed char) (x > 0)
+      if (hasComparison)
+        *hasComparison = false;
+      return getCastExpr(Ctx, Exp, FromTy, Sym->getType());
+    }
+
+    if (const BinarySymExpr *BSE = dyn_cast<BinarySymExpr>(Sym)) {
+      SMTExprRef Exp = getSymBinExpr(Ctx, BSE, hasComparison, RetTy);
+      // Set the hasComparison parameter, in post-order traversal order.
+      if (hasComparison)
+        *hasComparison = BinaryOperator::isComparisonOp(BSE->getOpcode());
+      return Exp;
+    }
+
+    llvm_unreachable("Unsupported SymbolRef type!");
+  }
+
+  // Wrapper to generate SMTExprRef from SymbolCast data.
+  SMTExprRef getCastExpr(ASTContext &Ctx, const SMTExprRef &Exp,
+                         QualType FromTy, QualType ToTy) {
+    return fromCast(Exp, ToTy, Ctx.getTypeSize(ToTy), FromTy,
+                    Ctx.getTypeSize(FromTy));
+  }
+
+  // Wrapper to generate SMTExprRef from BinarySymExpr.
+  // Sets the hasComparison and RetTy parameters. See getSMTExprRef().
+  SMTExprRef getSymBinExpr(ASTContext &Ctx, const BinarySymExpr *BSE,
+                           bool *hasComparison, QualType *RetTy) {
+    QualType LTy, RTy;
+    BinaryOperator::Opcode Op = BSE->getOpcode();
+
+    if (const SymIntExpr *SIE = dyn_cast<SymIntExpr>(BSE)) {
+      SMTExprRef LHS = getSymExpr(Ctx, SIE->getLHS(), &LTy, hasComparison);
+      llvm::APSInt NewRInt;
+      std::tie(NewRInt, RTy) = fixAPSInt(Ctx, SIE->getRHS());
+      SMTExprRef RHS = fromAPSInt(NewRInt);
+      return getBinExpr(Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
+    }
+
+    if (const IntSymExpr *ISE = dyn_cast<IntSymExpr>(BSE)) {
+      llvm::APSInt NewLInt;
+      std::tie(NewLInt, LTy) = fixAPSInt(Ctx, ISE->getLHS());
+      SMTExprRef LHS = fromAPSInt(NewLInt);
+      SMTExprRef RHS = getSymExpr(Ctx, ISE->getRHS(), &RTy, hasComparison);
+      return getBinExpr(Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
+    }
+
+    if (const SymSymExpr *SSM = dyn_cast<SymSymExpr>(BSE)) {
+      SMTExprRef LHS = getSymExpr(Ctx, SSM->getLHS(), &LTy, hasComparison);
+      SMTExprRef RHS = getSymExpr(Ctx, SSM->getRHS(), &RTy, hasComparison);
+      return getBinExpr(Ctx, LHS, LTy, Op, RHS, RTy, RetTy);
+    }
+
+    llvm_unreachable("Unsupported BinarySymExpr type!");
+  }
+
+  // Wrapper to generate SMTExprRef from unpacked binary symbolic expression.
+  // Sets the RetTy parameter. See getSMTExprRef().
+  SMTExprRef getBinExpr(ASTContext &Ctx, const SMTExprRef &LHS, QualType LTy,
+                        BinaryOperator::Opcode Op, const SMTExprRef &RHS,
+                        QualType RTy, QualType *RetTy) {
+    SMTExprRef NewLHS = LHS;
+    SMTExprRef NewRHS = RHS;
+    doTypeConversion(Ctx, NewLHS, NewRHS, LTy, RTy);
+
+    // Update the return type parameter if the output type has changed.
+    if (RetTy) {
+      // A boolean result can be represented as an integer type in C/C++, but at
+      // this point we only care about the SMT sorts. Set it as a boolean type
+      // to avoid subsequent SMT errors.
+      if (BinaryOperator::isComparisonOp(Op) ||
+          BinaryOperator::isLogicalOp(Op)) {
+        *RetTy = Ctx.BoolTy;
+      } else {
+        *RetTy = LTy;
+      }
+
+      // If the two operands are pointers and the operation is a subtraction,
+      // the result is of type ptrdiff_t, which is signed
+      if (LTy->isAnyPointerType() && RTy->isAnyPointerType() && Op == BO_Sub) {
+        *RetTy = Ctx.getPointerDiffType();
+      }
+    }
+
+    return LTy->isRealFloatingType()
+               ? fromFloatBinOp(NewLHS, Op, NewRHS)
+               : fromBinOp(NewLHS, Op, NewRHS,
+                           LTy->isSignedIntegerOrEnumerationType());
+  }
+
+  // Wrapper to generate SMTExprRef from a range. If From == To, an equality
+  // will be created instead.
+  SMTExprRef getRangeExpr(ASTContext &Ctx, SymbolRef Sym,
+                          const llvm::APSInt &From, const llvm::APSInt &To,
+                          bool InRange) {
+    // Convert lower bound
+    QualType FromTy;
+    llvm::APSInt NewFromInt;
+    std::tie(NewFromInt, FromTy) = fixAPSInt(Ctx, From);
+    SMTExprRef FromExp = fromAPSInt(NewFromInt);
+
+    // Convert symbol
+    QualType SymTy;
+    SMTExprRef Exp = getExpr(Ctx, Sym, &SymTy);
+
+    // Construct single (in)equality
+    if (From == To)
+      return getBinExpr(Ctx, Exp, SymTy, InRange ? BO_EQ : BO_NE, FromExp,
+                        FromTy, /*RetTy=*/nullptr);
+
+    QualType ToTy;
+    llvm::APSInt NewToInt;
+    std::tie(NewToInt, ToTy) = fixAPSInt(Ctx, To);
+    SMTExprRef ToExp = fromAPSInt(NewToInt);
+    assert(FromTy == ToTy && "Range values have different types!");
+
+    // Construct two (in)equalities, and a logical and/or
+    SMTExprRef LHS = getBinExpr(Ctx, Exp, SymTy, InRange ? BO_GE : BO_LT,
+                                FromExp, FromTy, /*RetTy=*/nullptr);
+    SMTExprRef RHS =
+        getBinExpr(Ctx, Exp, SymTy, InRange ? BO_LE : BO_GT, ToExp, ToTy,
+                   /*RetTy=*/nullptr);
+
+    return fromBinOp(LHS, InRange ? BO_LAnd : BO_LOr, RHS,
+                     SymTy->isSignedIntegerOrEnumerationType());
+  }
+
+  // Recover the QualType of an APSInt.
+  // TODO: Refactor to put elsewhere
+  QualType getAPSIntType(ASTContext &Ctx, const llvm::APSInt &Int) {
+    return Ctx.getIntTypeForBitwidth(Int.getBitWidth(), Int.isSigned());
+  }
+
+  // Get the QualTy for the input APSInt, and fix it if it has a bitwidth of 1.
+  std::pair<llvm::APSInt, QualType> fixAPSInt(ASTContext &Ctx,
+                                              const llvm::APSInt &Int) {
+    llvm::APSInt NewInt;
+
+    // FIXME: This should be a cast from a 1-bit integer type to a boolean type,
+    // but the former is not available in Clang. Instead, extend the APSInt
+    // directly.
+    if (Int.getBitWidth() == 1 && getAPSIntType(Ctx, Int).isNull()) {
+      NewInt = Int.extend(Ctx.getTypeSize(Ctx.BoolTy));
+    } else
+      NewInt = Int;
+
+    return std::make_pair(NewInt, getAPSIntType(Ctx, NewInt));
+  }
+
+  // Perform implicit type conversion on binary symbolic expressions.
+  // May modify all input parameters.
+  // TODO: Refactor to use built-in conversion functions
+  void doTypeConversion(ASTContext &Ctx, SMTExprRef &LHS, SMTExprRef &RHS,
+                        QualType &LTy, QualType &RTy) {
+    assert(!LTy.isNull() && !RTy.isNull() && "Input type is null!");
+
+    // Perform type conversion
+    if ((LTy->isIntegralOrEnumerationType() &&
+         RTy->isIntegralOrEnumerationType()) &&
+        (LTy->isArithmeticType() && RTy->isArithmeticType())) {
+      doIntTypeConversion<SMTExprRef, &SMTSolver::fromCast>(Ctx, LHS, LTy, RHS,
+                                                            RTy);
+      return;
+    }
+
+    if (LTy->isRealFloatingType() || RTy->isRealFloatingType()) {
+      doFloatTypeConversion<SMTExprRef, &SMTSolver::fromCast>(Ctx, LHS, LTy,
+                                                              RHS, RTy);
+      return;
+    }
+
+    if ((LTy->isAnyPointerType() || RTy->isAnyPointerType()) ||
+        (LTy->isBlockPointerType() || RTy->isBlockPointerType()) ||
+        (LTy->isReferenceType() || RTy->isReferenceType())) {
+      // TODO: Refactor to Sema::FindCompositePointerType(), and
+      // Sema::CheckCompareOperands().
+
+      uint64_t LBitWidth = Ctx.getTypeSize(LTy);
+      uint64_t RBitWidth = Ctx.getTypeSize(RTy);
+
+      // Cast the non-pointer type to the pointer type.
+      // TODO: Be more strict about this.
+      if ((LTy->isAnyPointerType() ^ RTy->isAnyPointerType()) ||
+          (LTy->isBlockPointerType() ^ RTy->isBlockPointerType()) ||
+          (LTy->isReferenceType() ^ RTy->isReferenceType())) {
+        if (LTy->isNullPtrType() || LTy->isBlockPointerType() ||
+            LTy->isReferenceType()) {
+          LHS = fromCast(LHS, RTy, RBitWidth, LTy, LBitWidth);
+          LTy = RTy;
+        } else {
+          RHS = fromCast(RHS, LTy, LBitWidth, RTy, RBitWidth);
+          RTy = LTy;
+        }
+      }
+
+      // Cast the void pointer type to the non-void pointer type.
+      // For void types, this assumes that the casted value is equal to the
+      // value of the original pointer, and does not account for alignment
+      // requirements.
+      if (LTy->isVoidPointerType() ^ RTy->isVoidPointerType()) {
+        assert((Ctx.getTypeSize(LTy) == Ctx.getTypeSize(RTy)) &&
+               "Pointer types have different bitwidths!");
+        if (RTy->isVoidPointerType())
+          RTy = LTy;
+        else
+          LTy = RTy;
+      }
+
+      if (LTy == RTy)
+        return;
+    }
+
+    // Fallback: for the solver, assume that these types don't really matter
+    if ((LTy.getCanonicalType() == RTy.getCanonicalType()) ||
+        (LTy->isObjCObjectPointerType() && RTy->isObjCObjectPointerType())) {
+      LTy = RTy;
+      return;
+    }
+
+    // TODO: Refine behavior for invalid type casts
+  }
+
+  // Perform implicit integer type conversion.
+  // May modify all input parameters.
+  // TODO: Refactor to use Sema::handleIntegerConversion()
+  template <typename T, T (SMTSolver::*doCast)(const T &, QualType, uint64_t,
+                                               QualType, uint64_t)>
+  void doIntTypeConversion(ASTContext &Ctx, T &LHS, QualType &LTy, T &RHS,
+                           QualType &RTy) {
+
+    uint64_t LBitWidth = Ctx.getTypeSize(LTy);
+    uint64_t RBitWidth = Ctx.getTypeSize(RTy);
+
+    assert(!LTy.isNull() && !RTy.isNull() && "Input type is null!");
+    // Always perform integer promotion before checking type equality.
+    // Otherwise, e.g. (bool) a + (bool) b could trigger a backend assertion
+    if (LTy->isPromotableIntegerType()) {
+      QualType NewTy = Ctx.getPromotedIntegerType(LTy);
+      uint64_t NewBitWidth = Ctx.getTypeSize(NewTy);
+      LHS = (this->*doCast)(LHS, NewTy, NewBitWidth, LTy, LBitWidth);
+      LTy = NewTy;
+      LBitWidth = NewBitWidth;
+    }
+    if (RTy->isPromotableIntegerType()) {
+      QualType NewTy = Ctx.getPromotedIntegerType(RTy);
+      uint64_t NewBitWidth = Ctx.getTypeSize(NewTy);
+      RHS = (this->*doCast)(RHS, NewTy, NewBitWidth, RTy, RBitWidth);
+      RTy = NewTy;
+      RBitWidth = NewBitWidth;
+    }
+
+    if (LTy == RTy)
+      return;
+
+    // Perform integer type conversion
+    // Note: Safe to skip updating bitwidth because this must terminate
+    bool isLSignedTy = LTy->isSignedIntegerOrEnumerationType();
+    bool isRSignedTy = RTy->isSignedIntegerOrEnumerationType();
+
+    int order = Ctx.getIntegerTypeOrder(LTy, RTy);
+    if (isLSignedTy == isRSignedTy) {
+      // Same signedness; use the higher-ranked type
+      if (order == 1) {
+        RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+        RTy = LTy;
+      } else {
+        LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+        LTy = RTy;
+      }
+    } else if (order != (isLSignedTy ? 1 : -1)) {
+      // The unsigned type has greater than or equal rank to the
+      // signed type, so use the unsigned type
+      if (isRSignedTy) {
+        RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+        RTy = LTy;
+      } else {
+        LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+        LTy = RTy;
+      }
+    } else if (LBitWidth != RBitWidth) {
+      // The two types are different widths; if we are here, that
+      // means the signed type is larger than the unsigned type, so
+      // use the signed type.
+      if (isLSignedTy) {
+        RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+        RTy = LTy;
+      } else {
+        LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+        LTy = RTy;
+      }
+    } else {
+      // The signed type is higher-ranked than the unsigned type,
+      // but isn't actually any bigger (like unsigned int and long
+      // on most 32-bit systems).  Use the unsigned type corresponding
+      // to the signed type.
+      QualType NewTy =
+          Ctx.getCorrespondingUnsignedType(isLSignedTy ? LTy : RTy);
+      RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+      RTy = NewTy;
+      LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+      LTy = NewTy;
+    }
+  }
+
+  // Perform implicit floating-point type conversion.
+  // May modify all input parameters.
+  // TODO: Refactor to use Sema::handleFloatConversion()
+  template <typename T, T (SMTSolver::*doCast)(const T &, QualType, uint64_t,
+                                               QualType, uint64_t)>
+  void doFloatTypeConversion(ASTContext &Ctx, T &LHS, QualType &LTy, T &RHS,
+                             QualType &RTy) {
+
+    uint64_t LBitWidth = Ctx.getTypeSize(LTy);
+    uint64_t RBitWidth = Ctx.getTypeSize(RTy);
+
+    // Perform float-point type promotion
+    if (!LTy->isRealFloatingType()) {
+      LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+      LTy = RTy;
+      LBitWidth = RBitWidth;
+    }
+    if (!RTy->isRealFloatingType()) {
+      RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+      RTy = LTy;
+      RBitWidth = LBitWidth;
+    }
+
+    if (LTy == RTy)
+      return;
+
+    // If we have two real floating types, convert the smaller operand to the
+    // bigger result
+    // Note: Safe to skip updating bitwidth because this must terminate
+    int order = Ctx.getFloatingTypeOrder(LTy, RTy);
+    if (order > 0) {
+      RHS = (this->*doCast)(RHS, LTy, LBitWidth, RTy, RBitWidth);
+      RTy = LTy;
+    } else if (order == 0) {
+      LHS = (this->*doCast)(LHS, RTy, RBitWidth, LTy, LBitWidth);
+      LTy = RTy;
+    } else {
+      llvm_unreachable("Unsupported floating-point type cast!");
+    }
+  }
+
+  // Returns a boolean sort.
+  virtual SMTSortRef getBoolSort() = 0;
+
+  // Returns an appropriate bitvector sort for the given bitwidth.
+  virtual SMTSortRef getBitvectorSort(const unsigned BitWidth) = 0;
+
+  // Returns a floating-point sort of width 16
+  virtual SMTSortRef getFloat16Sort() = 0;
+
+  // Returns a floating-point sort of width 32
+  virtual SMTSortRef getFloat32Sort() = 0;
+
+  // Returns a floating-point sort of width 64
+  virtual SMTSortRef getFloat64Sort() = 0;
+
+  // Returns a floating-point sort of width 128
+  virtual SMTSortRef getFloat128Sort() = 0;
+
+  // Returns an appropriate sort for the given AST.
+  virtual SMTSortRef getSort(const SMTExprRef &AST) = 0;
+
+  // Returns a new SMTExprRef from an SMTExpr
+  virtual SMTExprRef newExprRef(const SMTExpr &E) const = 0;
+
+  /// Given a constraint, adds it to the solver
+  virtual void addConstraint(const SMTExprRef &Exp) const = 0;
+
+  /// Creates a bitvector addition operation
+  virtual SMTExprRef mkBVAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector subtraction operation
+  virtual SMTExprRef mkBVSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector multiplication operation
+  virtual SMTExprRef mkBVMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed modulus operation
+  virtual SMTExprRef mkBVSRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned modulus operation
+  virtual SMTExprRef mkBVURem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed division operation
+  virtual SMTExprRef mkBVSDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned division operation
+  virtual SMTExprRef mkBVUDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector logical shift left operation
+  virtual SMTExprRef mkBVShl(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector arithmetic shift right operation
+  virtual SMTExprRef mkBVAshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector logical shift right operation
+  virtual SMTExprRef mkBVLshr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector negation operation
+  virtual SMTExprRef mkBVNeg(const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector not operation
+  virtual SMTExprRef mkBVNot(const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector xor operation
+  virtual SMTExprRef mkBVXor(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector or operation
+  virtual SMTExprRef mkBVOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector and operation
+  virtual SMTExprRef mkBVAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned less-than operation
+  virtual SMTExprRef mkBVUlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed less-than operation
+  virtual SMTExprRef mkBVSlt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned greater-than operation
+  virtual SMTExprRef mkBVUgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed greater-than operation
+  virtual SMTExprRef mkBVSgt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned less-equal-than operation
+  virtual SMTExprRef mkBVUle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed less-equal-than operation
+  virtual SMTExprRef mkBVSle(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector unsigned greater-equal-than operation
+  virtual SMTExprRef mkBVUge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a bitvector signed greater-equal-than operation
+  virtual SMTExprRef mkBVSge(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean not operation
+  virtual SMTExprRef mkNot(const SMTExprRef &Exp) = 0;
+
+  /// Creates a boolean equality operation
+  virtual SMTExprRef mkEqual(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean and operation
+  virtual SMTExprRef mkAnd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean or operation
+  virtual SMTExprRef mkOr(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a boolean ite operation
+  virtual SMTExprRef mkIte(const SMTExprRef &Cond, const SMTExprRef &T,
+                           const SMTExprRef &F) = 0;
+
+  /// Creates a bitvector sign extension operation
+  virtual SMTExprRef mkBVSignExt(unsigned i, const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector zero extension operation
+  virtual SMTExprRef mkBVZeroExt(unsigned i, const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector extract operation
+  virtual SMTExprRef mkBVExtract(unsigned High, unsigned Low,
+                                 const SMTExprRef &Exp) = 0;
+
+  /// Creates a bitvector concat operation
+  virtual SMTExprRef mkBVConcat(const SMTExprRef &LHS,
+                                const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point negation operation
+  virtual SMTExprRef mkFPNeg(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isInfinite operation
+  virtual SMTExprRef mkFPIsInfinite(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isNaN operation
+  virtual SMTExprRef mkFPIsNaN(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isNormal operation
+  virtual SMTExprRef mkFPIsNormal(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point isZero operation
+  virtual SMTExprRef mkFPIsZero(const SMTExprRef &Exp) = 0;
+
+  /// Creates a floating-point multiplication operation
+  virtual SMTExprRef mkFPMul(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point division operation
+  virtual SMTExprRef mkFPDiv(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point remainder operation
+  virtual SMTExprRef mkFPRem(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point addition operation
+  virtual SMTExprRef mkFPAdd(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point subtraction operation
+  virtual SMTExprRef mkFPSub(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point less-than operation
+  virtual SMTExprRef mkFPLt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point greater-than operation
+  virtual SMTExprRef mkFPGt(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point less-than-or-equal operation
+  virtual SMTExprRef mkFPLe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point greater-than-or-equal operation
+  virtual SMTExprRef mkFPGe(const SMTExprRef &LHS, const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point equality operation
+  virtual SMTExprRef mkFPEqual(const SMTExprRef &LHS,
+                               const SMTExprRef &RHS) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to floating-point
+  /// operation
+  virtual SMTExprRef mkFPtoFP(const SMTExprRef &From, const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to signed
+  /// bitvector operation
+  virtual SMTExprRef mkFPtoSBV(const SMTExprRef &From,
+                               const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from floatint-point to unsigned
+  /// bitvector operation
+  virtual SMTExprRef mkFPtoUBV(const SMTExprRef &From,
+                               const SMTSortRef &To) = 0;
+
+  /// Creates a floating-point conversion from signed bitvector to
+  /// floatint-point operation
+  virtual SMTExprRef mkSBVtoFP(const SMTExprRef &From, unsigned ToWidth) = 0;
+
+  /// Creates a floating-point conversion from unsigned bitvector to
+  /// floatint-point operation
+  virtual SMTExprRef mkUBVtoFP(const SMTExprRef &From, unsigned ToWidth) = 0;
+
+  /// Creates a new symbol, given a name and a sort
+  virtual SMTExprRef mkSymbol(const char *Name, SMTSortRef Sort) = 0;
+
+  // Returns an appropriate floating-point rounding mode.
+  virtual SMTExprRef getFloatRoundingMode() = 0;
+
+  // If the a model is available, returns the value of a given bitvector symbol
+  virtual llvm::APSInt getBitvector(const SMTExprRef &Exp, unsigned BitWidth,
+                                    bool isUnsigned) = 0;
+
+  // If the a model is available, returns the value of a given boolean symbol
+  virtual bool getBoolean(const SMTExprRef &Exp) = 0;
+
+  /// Constructs an SMTExprRef from a boolean.
+  virtual SMTExprRef mkBoolean(const bool b) = 0;
+
+  /// Constructs an SMTExprRef from a finite APFloat.
+  virtual SMTExprRef mkFloat(const llvm::APFloat Float) = 0;
+
+  /// Constructs an SMTExprRef from an APSInt and its bit width
+  virtual SMTExprRef mkBitvector(const llvm::APSInt Int, unsigned BitWidth) = 0;
+
+  /// Given an expression, extract the value of this operand in the model.
+  virtual bool getInterpretation(const SMTExprRef &Exp, llvm::APSInt &Int) = 0;
+
+  /// Given an expression extract the value of this operand in the model.
+  virtual bool getInterpretation(const SMTExprRef &Exp,
+                                 llvm::APFloat &Float) = 0;
+
+  /// Construct an SMTExprRef value from a boolean.
+  virtual SMTExprRef fromBoolean(const bool Bool) = 0;
+
+  /// Construct an SMTExprRef value from a finite APFloat.
+  virtual SMTExprRef fromAPFloat(const llvm::APFloat &Float) = 0;
+
+  /// Construct an SMTExprRef value from an APSInt.
+  virtual SMTExprRef fromAPSInt(const llvm::APSInt &Int) = 0;
+
+  /// Construct an SMTExprRef value from an integer.
+  virtual SMTExprRef fromInt(const char *Int, uint64_t BitWidth) = 0;
+
+  /// Construct an SMTExprRef from a SymbolData.
+  virtual SMTExprRef fromData(const SymbolID ID, const QualType &Ty,
+                              uint64_t BitWidth) = 0;
+
+  /// Check if the constraints are satisfiable
+  virtual ConditionTruthVal check() const = 0;
+
+  /// Push the current solver state
+  virtual void push() = 0;
+
+  /// Pop the previous solver state
+  virtual void pop(unsigned NumStates = 1) = 0;
+
+  /// Reset the solver and remove all constraints.
+  virtual void reset() const = 0;
+
+  virtual void print(raw_ostream &OS) const = 0;
+};
+
+/// Shared pointer for SMTSolvers.
+using SMTSolverRef = std::shared_ptr<SMTSolver>;
+
+/// Convenience method to create and Z3Solver object
+std::unique_ptr<SMTSolver> CreateZ3Solver();
+
+} // namespace ento
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSort.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSort.h
new file mode 100644
index 0000000..41ef573
--- /dev/null
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SMTSort.h
@@ -0,0 +1,91 @@
+//== SMTSort.h --------------------------------------------------*- C++ -*--==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file defines a SMT generic Sort API, which will be the base class
+//  for every SMT solver sort specific class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSORT_H
+#define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_SMTSORT_H
+
+#include "clang/Basic/TargetInfo.h"
+
+namespace clang {
+namespace ento {
+
+/// Generic base class for SMT sorts
+class SMTSort {
+public:
+  SMTSort() = default;
+  virtual ~SMTSort() = default;
+
+  /// Returns true if the sort is a bitvector, calls isBitvectorSortImpl().
+  virtual bool isBitvectorSort() const { return isBitvectorSortImpl(); }
+
+  /// Returns true if the sort is a floating-point, calls isFloatSortImpl().
+  virtual bool isFloatSort() const { return isFloatSortImpl(); }
+
+  /// Returns true if the sort is a boolean, calls isBooleanSortImpl().
+  virtual bool isBooleanSort() const { return isBooleanSortImpl(); }
+
+  /// Returns the bitvector size, fails if the sort is not a bitvector
+  /// Calls getBitvectorSortSizeImpl().
+  virtual unsigned getBitvectorSortSize() const {
+    assert(isBitvectorSort() && "Not a bitvector sort!");
+    unsigned Size = getBitvectorSortSizeImpl();
+    assert(Size && "Size is zero!");
+    return Size;
+  };
+
+  /// Returns the floating-point size, fails if the sort is not a floating-point
+  /// Calls getFloatSortSizeImpl().
+  virtual unsigned getFloatSortSize() const {
+    assert(isFloatSort() && "Not a floating-point sort!");
+    unsigned Size = getFloatSortSizeImpl();
+    assert(Size && "Size is zero!");
+    return Size;
+  };
+
+  friend bool operator==(SMTSort const &LHS, SMTSort const &RHS) {
+    return LHS.equal_to(RHS);
+  }
+
+  virtual void print(raw_ostream &OS) const = 0;
+
+  LLVM_DUMP_METHOD void dump() const { print(llvm::errs()); }
+
+protected:
+  /// Query the SMT solver and returns true if two sorts are equal (same kind
+  /// and bit width). This does not check if the two sorts are the same objects.
+  virtual bool equal_to(SMTSort const &other) const = 0;
+
+  /// Query the SMT solver and checks if a sort is bitvector.
+  virtual bool isBitvectorSortImpl() const = 0;
+
+  /// Query the SMT solver and checks if a sort is floating-point.
+  virtual bool isFloatSortImpl() const = 0;
+
+  /// Query the SMT solver and checks if a sort is boolean.
+  virtual bool isBooleanSortImpl() const = 0;
+
+  /// Query the SMT solver and returns the sort bit width.
+  virtual unsigned getBitvectorSortSizeImpl() const = 0;
+
+  /// Query the SMT solver and returns the sort bit width.
+  virtual unsigned getFloatSortSizeImpl() const = 0;
+};
+
+/// Shared pointer for SMTSorts, used by SMTSolver API.
+using SMTSortRef = std::shared_ptr<SMTSort>;
+
+} // namespace ento
+} // namespace clang
+
+#endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
index 92acf73..865014b 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SValBuilder.h
@@ -55,7 +55,7 @@
 
 protected:
   ASTContext &Context;
-  
+
   /// Manager of APSInt values.
   BasicValueFactory BasicVals;
 
@@ -69,7 +69,7 @@
 
   /// The scalar type to use for array indices.
   const QualType ArrayIndexTy;
-  
+
   /// The width of the scalar type used for array indices.
   const unsigned ArrayIndexWidth;
 
@@ -137,7 +137,7 @@
   /// that represents the same value, but is hopefully easier to work with
   /// than the original SVal.
   virtual SVal simplifySVal(ProgramStateRef State, SVal Val) = 0;
-  
+
   /// Constructs a symbolic expression for two non-location values.
   SVal makeSymExprValNN(ProgramStateRef state, BinaryOperator::Opcode op,
                       NonLoc lhs, NonLoc rhs, QualType resultTy);
@@ -157,11 +157,11 @@
   const ASTContext &getContext() const { return Context; }
 
   ProgramStateManager &getStateManager() { return StateMgr; }
-  
+
   QualType getConditionType() const {
     return Context.getLangOpts().CPlusPlus ? Context.BoolTy : Context.IntTy;
   }
-  
+
   QualType getArrayIndexType() const {
     return ArrayIndexTy;
   }
@@ -198,7 +198,7 @@
   /// Make a unique symbol for value of region.
   DefinedOrUnknownSVal getRegionValueSymbolVal(const TypedValueRegion *region);
 
-  /// \brief Create a new symbol with a unique 'name'.
+  /// Create a new symbol with a unique 'name'.
   ///
   /// We resort to conjured symbols when we cannot construct a derived symbol.
   /// The advantage of symbols derived/built from other symbols is that we
@@ -218,7 +218,7 @@
                                         QualType type,
                                         unsigned visitCount);
 
-  /// \brief Conjure a symbol representing heap allocated memory region.
+  /// Conjure a symbol representing heap allocated memory region.
   ///
   /// Note, the expression should represent a location.
   DefinedOrUnknownSVal getConjuredHeapSymbolVal(const Expr *E,
@@ -237,7 +237,7 @@
   DefinedSVal getMemberPointer(const DeclaratorDecl *DD);
 
   DefinedSVal getFunctionPointer(const FunctionDecl *func);
-  
+
   DefinedSVal getBlockPointer(const BlockDecl *block, CanQualType locTy,
                               const LocationContext *locContext,
                               unsigned blockCount);
@@ -252,7 +252,7 @@
     return nonloc::CompoundVal(BasicVals.getCompoundValData(type, vals));
   }
 
-  NonLoc makeLazyCompoundVal(const StoreRef &store, 
+  NonLoc makeLazyCompoundVal(const StoreRef &store,
                              const TypedValueRegion *region) {
     return nonloc::LazyCompoundVal(
         BasicVals.getLazyCompoundValData(store, region));
@@ -329,7 +329,7 @@
   NonLoc makeNonLoc(const SymExpr *lhs, BinaryOperator::Opcode op,
                     const SymExpr *rhs, QualType type);
 
-  /// \brief Create a NonLoc value for cast.
+  /// Create a NonLoc value for cast.
   NonLoc makeNonLoc(const SymExpr *operand, QualType fromTy, QualType toTy);
 
   nonloc::ConcreteInt makeTruthVal(bool b, QualType type) {
@@ -367,6 +367,15 @@
     return loc::ConcreteInt(BasicVals.getValue(integer));
   }
 
+  /// Make an SVal that represents the given symbol. This follows the convention
+  /// of representing Loc-type symbols (symbolic pointers and references)
+  /// as Loc values wrapping the symbol rather than as plain symbol values.
+  SVal makeSymbolVal(SymbolRef Sym) {
+    if (Loc::isLocType(Sym->getType()))
+      return makeLoc(Sym);
+    return nonloc::SymbolVal(Sym);
+  }
+
   /// Return a memory region for the 'this' object reference.
   loc::MemRegionVal getCXXThis(const CXXMethodDecl *D,
                                const StackFrameContext *SFC);
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
index 0f507fd..1b79bfc 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SVals.h
@@ -98,7 +98,7 @@
 public:
   explicit SVal() = default;
 
-  /// \brief Convert to the specified SVal type, asserting that this SVal is of
+  /// Convert to the specified SVal type, asserting that this SVal is of
   /// the desired type.
   template<typename T>
   T castAs() const {
@@ -106,7 +106,7 @@
     return *static_cast<const T *>(this);
   }
 
-  /// \brief Convert to the specified SVal type, returning None if this SVal is
+  /// Convert to the specified SVal type, returning None if this SVal is
   /// not of the desired type.
   template<typename T>
   Optional<T> getAs() const {
@@ -164,7 +164,7 @@
   /// Otherwise return 0.
   const FunctionDecl *getAsFunctionDecl() const;
 
-  /// \brief If this SVal is a location and wraps a symbol, return that
+  /// If this SVal is a location and wraps a symbol, return that
   ///  SymbolRef. Otherwise return 0.
   ///
   /// Casts are ignored during lookup.
@@ -175,7 +175,7 @@
   /// Get the symbol in the SVal or its base region.
   SymbolRef getLocSymbolInBase() const;
 
-  /// \brief If this SVal wraps a symbol return that SymbolRef.
+  /// If this SVal wraps a symbol return that SymbolRef.
   /// Otherwise, return 0.
   ///
   /// Casts are ignored during lookup.
@@ -202,7 +202,7 @@
       return SymExpr::symbol_iterator();
   }
 
-  SymExpr::symbol_iterator symbol_end() const { 
+  SymExpr::symbol_iterator symbol_end() const {
     return SymExpr::symbol_end();
   }
 };
@@ -230,13 +230,13 @@
   // tautologically false.
   bool isUndef() const = delete;
   bool isValid() const = delete;
-  
+
 protected:
   DefinedOrUnknownSVal() = default;
   explicit DefinedOrUnknownSVal(const void *d, bool isLoc, unsigned ValKind)
       : SVal(d, isLoc, ValKind) {}
   explicit DefinedOrUnknownSVal(BaseKind k, void *D = nullptr) : SVal(k, D) {}
-  
+
 private:
   friend class SVal;
 
@@ -244,11 +244,11 @@
     return !V.isUndef();
   }
 };
-  
+
 class UnknownVal : public DefinedOrUnknownSVal {
 public:
   explicit UnknownVal() : DefinedOrUnknownSVal(UnknownValKind) {}
-  
+
 private:
   friend class SVal;
 
@@ -278,7 +278,7 @@
   }
 };
 
-/// \brief Represents an SVal that is guaranteed to not be UnknownVal.
+/// Represents an SVal that is guaranteed to not be UnknownVal.
 class KnownSVal : public SVal {
   friend class SVal;
 
@@ -325,7 +325,7 @@
   void dumpToStream(raw_ostream &Out) const;
 
   static bool isLocType(QualType T) {
-    return T->isAnyPointerType() || T->isBlockPointerType() || 
+    return T->isAnyPointerType() || T->isBlockPointerType() ||
            T->isReferenceType() || T->isNullPtrType();
   }
 
@@ -343,11 +343,14 @@
 
 namespace nonloc {
 
-/// \brief Represents symbolic expression.
+/// Represents symbolic expression that isn't a location.
 class SymbolVal : public NonLoc {
 public:
   SymbolVal() = delete;
-  SymbolVal(SymbolRef sym) : NonLoc(SymbolValKind, sym) { assert(sym); }
+  SymbolVal(SymbolRef sym) : NonLoc(SymbolValKind, sym) {
+    assert(sym);
+    assert(!Loc::isLocType(sym->getType()));
+  }
 
   SymbolRef getSymbol() const {
     return (const SymExpr *) Data;
@@ -370,7 +373,7 @@
   }
 };
 
-/// \brief Value representing integer constant.
+/// Value representing integer constant.
 class ConcreteInt : public NonLoc {
 public:
   explicit ConcreteInt(const llvm::APSInt& V) : NonLoc(ConcreteIntKind, &V) {}
@@ -507,10 +510,10 @@
   }
 };
 
-/// \brief Value representing pointer-to-member.
+/// Value representing pointer-to-member.
 ///
 /// This value is qualified as NonLoc because neither loading nor storing
-/// operations are aplied to it. Instead, the analyzer uses the L-value coming
+/// operations are applied to it. Instead, the analyzer uses the L-value coming
 /// from pointer-to-member applied to an object.
 /// This SVal is represented by a DeclaratorDecl which can be a member function
 /// pointer or a member data pointer and a list of CXXBaseSpecifiers. This list
@@ -598,12 +601,12 @@
     assert(r);
   }
 
-  /// \brief Get the underlining region.
+  /// Get the underlining region.
   const MemRegion *getRegion() const {
     return static_cast<const MemRegion *>(Data);
   }
 
-  /// \brief Get the underlining region and strip casts.
+  /// Get the underlining region and strip casts.
   const MemRegion* stripCasts(bool StripBaseCasts = true) const;
 
   template <typename REGION>
@@ -661,7 +664,7 @@
   }
 };
 
-} // namespace loc 
+} // namespace loc
 
 } // namespace ento
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h
index 2c9802b..d64b90e 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SimpleConstraintManager.h
@@ -75,6 +75,7 @@
   // Internal implementation.
   //===------------------------------------------------------------------===//
 
+  SValBuilder &getSValBuilder() const { return SVB; }
   BasicValueFactory &getBasicVals() const { return SVB.getBasicValueFactory(); }
   SymbolManager &getSymbolManager() const { return SVB.getSymbolManager(); }
 
@@ -85,8 +86,8 @@
                             bool Assumption);
 };
 
-} // end GR namespace
+} // end namespace ento
 
-} // end clang namespace
+} // end namespace clang
 
 #endif
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
index 84afb08..fc072a3 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/Store.h
@@ -107,9 +107,17 @@
   ///   by \c val bound to the location given for \c loc.
   virtual StoreRef Bind(Store store, Loc loc, SVal val) = 0;
 
-  virtual StoreRef BindDefault(Store store, const MemRegion *R, SVal V);
+  /// Return a store with the specified value bound to all sub-regions of the
+  /// region. The region must not have previous bindings. If you need to
+  /// invalidate existing bindings, consider invalidateRegions().
+  virtual StoreRef BindDefaultInitial(Store store, const MemRegion *R,
+                                      SVal V) = 0;
 
-  /// \brief Create a new store with the specified binding removed.
+  /// Return a store with in which all values within the given region are
+  /// reset to zero. This method is allowed to overwrite previous bindings.
+  virtual StoreRef BindDefaultZero(Store store, const MemRegion *R) = 0;
+
+  /// Create a new store with the specified binding removed.
   /// \param ST the original store, that is the basis for the new store.
   /// \param L the location whose binding should be removed.
   virtual StoreRef killBinding(Store ST, Loc L) = 0;
@@ -141,7 +149,7 @@
 
   // FIXME: This should soon be eliminated altogether; clients should deal with
   // region extents directly.
-  virtual DefinedOrUnknownSVal getSizeInElements(ProgramStateRef state, 
+  virtual DefinedOrUnknownSVal getSizeInElements(ProgramStateRef state,
                                                  const MemRegion *region,
                                                  QualType EleTy) {
     return UnknownVal();
@@ -162,14 +170,14 @@
   SVal evalDerivedToBase(SVal Derived, QualType DerivedPtrType,
                          bool IsVirtual);
 
-  /// \brief Attempts to do a down cast. Used to model BaseToDerived and C++
+  /// Attempts to do a down cast. Used to model BaseToDerived and C++
   ///        dynamic_cast.
   /// The callback may result in the following 3 scenarios:
   ///  - Successful cast (ex: derived is subclass of base).
   ///  - Failed cast (ex: derived is definitely not a subclass of base).
   ///    The distinction of this case from the next one is necessary to model
-  ///    dynamic_cast. 
-  ///  - We don't know (base is a symbolic region and we don't have 
+  ///    dynamic_cast.
+  ///  - We don't know (base is a symbolic region and we don't have
   ///    enough info to determine if the cast will succeed at run time).
   /// The function returns an SVal representing the derived class; it's
   /// valid only if Failed flag is set to false.
@@ -187,7 +195,7 @@
 
   virtual bool includedInBindings(Store store,
                                   const MemRegion *region) const = 0;
-  
+
   /// If the StoreManager supports it, increment the reference count of
   /// the specified Store object.
   virtual void incrementReferenceCount(Store store) {}
@@ -213,7 +221,7 @@
   ///   globals should get invalidated.
   /// \param[in,out] IS A set to fill with any symbols that are no longer
   ///   accessible. Pass \c NULL if this information will not be used.
-  /// \param[in] ITraits Information about invalidation for a particular 
+  /// \param[in] ITraits Information about invalidation for a particular
   ///   region/symbol.
   /// \param[in,out] InvalidatedTopLevel A vector to fill with regions
   ////  explicitly being invalidated. Pass \c NULL if this
@@ -282,8 +290,8 @@
   /// CastRetrievedVal - Used by subclasses of StoreManager to implement
   ///  implicit casts that arise from loads from regions that are reinterpreted
   ///  as another region.
-  SVal CastRetrievedVal(SVal val, const TypedValueRegion *region, 
-                        QualType castTy, bool performTestOnly = true);
+  SVal CastRetrievedVal(SVal val, const TypedValueRegion *region,
+                        QualType castTy);
 
 private:
   SVal getLValueFieldOrIvar(const Decl *decl, SVal base);
@@ -297,16 +305,16 @@
 
 inline StoreRef::StoreRef(const StoreRef &sr)
     : store(sr.store), mgr(sr.mgr)
-{ 
+{
   if (store)
     mgr.incrementReferenceCount(store);
 }
-  
+
 inline StoreRef::~StoreRef() {
   if (store)
     mgr.decrementReferenceCount(store);
 }
-  
+
 inline StoreRef &StoreRef::operator=(StoreRef const &newStore) {
   assert(&newStore.mgr == &mgr);
   if (store != newStore.store) {
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h
index c5b4e50..22259a2 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/StoreRef.h
@@ -18,15 +18,15 @@
 
 namespace clang {
 namespace ento {
-  
+
 class StoreManager;
-  
+
 /// Store - This opaque type encapsulates an immutable mapping from
 ///  locations to values.  At a high-level, it represents the symbolic
 ///  memory model.  Different subclasses of StoreManager may choose
 ///  different types to represent the locations and values.
 using Store = const void *;
-  
+
 class StoreRef {
   Store store;
   StoreManager &mgr;
@@ -36,14 +36,14 @@
   StoreRef(const StoreRef &sr);
   StoreRef &operator=(StoreRef const &newStore);
   ~StoreRef();
-  
+
   bool operator==(const StoreRef &x) const {
     assert(&mgr == &x.mgr);
     return x.store == store;
   }
 
   bool operator!=(const StoreRef &x) const { return !operator==(x); }
-  
+
   Store getStore() const { return store; }
   const StoreManager &getStoreManager() const { return mgr; }
 };
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
index e574ffd..d6aa4fe 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SubEngine.h
@@ -29,7 +29,7 @@
 }
 
 namespace ento {
-  
+
 struct NodeBuilderContext;
 class AnalysisManager;
 class ExplodedNodeSet;
@@ -133,7 +133,7 @@
 
   /// processRegionChanges - Called by ProgramStateManager whenever a change is
   /// made to the store. Used to update checkers that track region values.
-  virtual ProgramStateRef 
+  virtual ProgramStateRef
   processRegionChanges(ProgramStateRef state,
                        const InvalidatedSymbols *invalidated,
                        ArrayRef<const MemRegion *> ExplicitRegions,
@@ -142,7 +142,7 @@
                        const CallEvent *Call) = 0;
 
 
-  inline ProgramStateRef 
+  inline ProgramStateRef
   processRegionChange(ProgramStateRef state,
                       const MemRegion* MR,
                       const LocationContext *LCtx) {
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SummaryManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SummaryManager.h
index 52d78b6..0a75eeb 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SummaryManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SummaryManager.h
@@ -21,9 +21,9 @@
 
 namespace summMgr {
 
-  
+
 /* Key kinds:
- 
+
  - C functions
  - C++ functions (name + parameter types)
  - ObjC methods:
@@ -34,21 +34,21 @@
  - C++ methods
   - Class, function name + parameter types + const
  */
-  
+
 class SummaryKey {
-  
+
 };
 
 } // end namespace clang::summMgr
-  
+
 class SummaryManagerImpl {
-  
+
 };
 
-  
+
 template <typename T>
 class SummaryManager : SummaryManagerImpl {
-  
+
 };
 
 } // end GR namespace
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h
index 85551f9..69b9858 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h
@@ -25,7 +25,7 @@
 
 class MemRegion;
 
-/// \brief Symbolic value. These values used to capture symbolic execution of
+/// Symbolic value. These values used to capture symbolic execution of
 /// the program.
 class SymExpr : public llvm::FoldingSetNode {
   virtual void anchor();
@@ -49,6 +49,8 @@
     return !T.isNull() && !T->isVoidType();
   }
 
+  mutable unsigned Complexity = 0;
+
 public:
   virtual ~SymExpr() = default;
 
@@ -61,7 +63,7 @@
   virtual QualType getType() const = 0;
   virtual void Profile(llvm::FoldingSetNodeID &profile) = 0;
 
-  /// \brief Iterator over symbols that the current symbol depends on.
+  /// Iterator over symbols that the current symbol depends on.
   ///
   /// For SymbolData, it's the symbol itself; for expressions, it's the
   /// expression symbol and all the operands in it. Note, SymbolDerived is
@@ -85,9 +87,9 @@
   symbol_iterator symbol_begin() const { return symbol_iterator(this); }
   static symbol_iterator symbol_end() { return symbol_iterator(); }
 
-  unsigned computeComplexity() const;
+  virtual unsigned computeComplexity() const = 0;
 
-  /// \brief Find the region from which this symbol originates.
+  /// Find the region from which this symbol originates.
   ///
   /// Whenever the symbol was constructed to denote an unknown value of
   /// a certain memory region, return this region. This method
@@ -110,7 +112,7 @@
 using SymbolRefSmallVectorTy = SmallVector<SymbolRef, 2>;
 using SymbolID = unsigned;
 
-/// \brief A symbol representing data which can be stored in a memory location
+/// A symbol representing data which can be stored in a memory location
 /// (region).
 class SymbolData : public SymExpr {
   const SymbolID Sym;
@@ -127,6 +129,10 @@
 
   SymbolID getSymbolID() const { return Sym; }
 
+  unsigned computeComplexity() const override {
+    return 1;
+  };
+
   // Implement isa<T> support.
   static inline bool classof(const SymExpr *SE) {
     Kind k = SE->getKind();
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
index f222e83..0745519 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/SymbolManager.h
@@ -38,7 +38,7 @@
 class BasicValueFactory;
 class StoreManager;
 
-///\brief A symbol representing the value stored at a MemRegion.
+///A symbol representing the value stored at a MemRegion.
 class SymbolRegionValue : public SymbolData {
   const TypedValueRegion *R;
 
@@ -167,7 +167,7 @@
 ///  SubRegion::getExtent instead -- the value returned may not be a symbol.
 class SymbolExtent : public SymbolData {
   const SubRegion *R;
-  
+
 public:
   SymbolExtent(SymbolID sym, const SubRegion *r)
       : SymbolData(SymbolExtentKind, sym), R(r) {
@@ -251,7 +251,7 @@
   }
 };
 
-/// \brief Represents a cast expression.
+/// Represents a cast expression.
 class SymbolCast : public SymExpr {
   const SymExpr *Operand;
 
@@ -270,6 +270,12 @@
     // Otherwise, 'To' should also be a valid type.
   }
 
+  unsigned computeComplexity() const override {
+    if (Complexity == 0)
+      Complexity = 1 + Operand->computeComplexity();
+    return Complexity;
+  }
+
   QualType getType() const override { return ToTy; }
 
   const SymExpr *getOperand() const { return Operand; }
@@ -294,7 +300,7 @@
   }
 };
 
-/// \brief Represents a symbolic expression involving a binary operator 
+/// Represents a symbolic expression involving a binary operator
 class BinarySymExpr : public SymExpr {
   BinaryOperator::Opcode Op;
   QualType T;
@@ -320,7 +326,7 @@
   }
 };
 
-/// \brief Represents a symbolic expression like 'x' + 3.
+/// Represents a symbolic expression like 'x' + 3.
 class SymIntExpr : public BinarySymExpr {
   const SymExpr *LHS;
   const llvm::APSInt& RHS;
@@ -337,6 +343,12 @@
   const SymExpr *getLHS() const { return LHS; }
   const llvm::APSInt &getRHS() const { return RHS; }
 
+  unsigned computeComplexity() const override {
+    if (Complexity == 0)
+      Complexity = 1 + LHS->computeComplexity();
+    return Complexity;
+  }
+
   static void Profile(llvm::FoldingSetNodeID& ID, const SymExpr *lhs,
                       BinaryOperator::Opcode op, const llvm::APSInt& rhs,
                       QualType t) {
@@ -357,7 +369,7 @@
   }
 };
 
-/// \brief Represents a symbolic expression like 3 - 'x'.
+/// Represents a symbolic expression like 3 - 'x'.
 class IntSymExpr : public BinarySymExpr {
   const llvm::APSInt& LHS;
   const SymExpr *RHS;
@@ -374,6 +386,12 @@
   const SymExpr *getRHS() const { return RHS; }
   const llvm::APSInt &getLHS() const { return LHS; }
 
+  unsigned computeComplexity() const override {
+    if (Complexity == 0)
+      Complexity = 1 + RHS->computeComplexity();
+    return Complexity;
+  }
+
   static void Profile(llvm::FoldingSetNodeID& ID, const llvm::APSInt& lhs,
                       BinaryOperator::Opcode op, const SymExpr *rhs,
                       QualType t) {
@@ -394,7 +412,7 @@
   }
 };
 
-/// \brief Represents a symbolic expression like 'x' + 'y'.
+/// Represents a symbolic expression like 'x' + 'y'.
 class SymSymExpr : public BinarySymExpr {
   const SymExpr *LHS;
   const SymExpr *RHS;
@@ -412,6 +430,12 @@
 
   void dumpToStream(raw_ostream &os) const override;
 
+  unsigned computeComplexity() const override {
+    if (Complexity == 0)
+      Complexity = RHS->computeComplexity() + LHS->computeComplexity();
+    return Complexity;
+  }
+
   static void Profile(llvm::FoldingSetNodeID& ID, const SymExpr *lhs,
                     BinaryOperator::Opcode op, const SymExpr *rhs, QualType t) {
     ID.AddInteger((unsigned) SymSymExprKind);
@@ -454,7 +478,7 @@
 
   static bool canSymbolicate(QualType T);
 
-  /// \brief Make a unique symbol for MemRegion R according to its kind.
+  /// Make a unique symbol for MemRegion R according to its kind.
   const SymbolRegionValue* getRegionValueSymbol(const TypedValueRegion* R);
 
   const SymbolConjured* conjureSymbol(const Stmt *E,
@@ -475,7 +499,7 @@
 
   const SymbolExtent *getExtentSymbol(const SubRegion *R);
 
-  /// \brief Creates a metadata symbol associated with a specific region.
+  /// Creates a metadata symbol associated with a specific region.
   ///
   /// VisitCount can be used to differentiate regions corresponding to
   /// different loop iterations, thus, making the symbol path-dependent.
@@ -507,7 +531,7 @@
     return SE->getType();
   }
 
-  /// \brief Add artificial symbol dependency.
+  /// Add artificial symbol dependency.
   ///
   /// The dependent symbol should stay alive as long as the primary is alive.
   void addSymbolDependency(const SymbolRef Primary, const SymbolRef Dependent);
@@ -518,7 +542,7 @@
   BasicValueFactory &getBasicVals() { return BV; }
 };
 
-/// \brief A class responsible for cleaning up unused symbols.
+/// A class responsible for cleaning up unused symbols.
 class SymbolReaper {
   enum SymbolStatus {
     NotProcessed,
@@ -534,7 +558,7 @@
   SymbolSetTy TheDead;
 
   RegionSetTy RegionRoots;
-  
+
   const StackFrameContext *LCtx;
   const Stmt *Loc;
   SymbolManager& SymMgr;
@@ -542,7 +566,7 @@
   llvm::DenseMap<const MemRegion *, unsigned> includedRegionCache;
 
 public:
-  /// \brief Construct a reaper object, which removes everything which is not
+  /// Construct a reaper object, which removes everything which is not
   /// live before we execute statement s in the given location context.
   ///
   /// If the statement is NULL, everything is this and parent contexts is
@@ -560,14 +584,14 @@
   bool isLive(const Stmt *ExprVal, const LocationContext *LCtx) const;
   bool isLive(const VarRegion *VR, bool includeStoreBindings = false) const;
 
-  /// \brief Unconditionally marks a symbol as live.
+  /// Unconditionally marks a symbol as live.
   ///
   /// This should never be
   /// used by checkers, only by the state infrastructure such as the store and
   /// environment. Checkers should instead use metadata symbols and markInUse.
   void markLive(SymbolRef sym);
 
-  /// \brief Marks a symbol as important to a checker.
+  /// Marks a symbol as important to a checker.
   ///
   /// For metadata symbols,
   /// this will keep the symbol alive as long as its associated region is also
@@ -576,7 +600,7 @@
   /// symbol marking has occurred, i.e. in the MarkLiveSymbols callback.
   void markInUse(SymbolRef sym);
 
-  /// \brief If a symbol is known to be live, marks the symbol as live.
+  /// If a symbol is known to be live, marks the symbol as live.
   ///
   ///  Otherwise, if the symbol cannot be proven live, it is marked as dead.
   ///  Returns true if the symbol is dead, false if live.
@@ -590,24 +614,24 @@
   bool hasDeadSymbols() const {
     return !TheDead.empty();
   }
-  
+
   using region_iterator = RegionSetTy::const_iterator;
 
   region_iterator region_begin() const { return RegionRoots.begin(); }
   region_iterator region_end() const { return RegionRoots.end(); }
 
-  /// \brief Returns whether or not a symbol has been confirmed dead.
+  /// Returns whether or not a symbol has been confirmed dead.
   ///
   /// This should only be called once all marking of dead symbols has completed.
   /// (For checkers, this means only in the evalDeadSymbols callback.)
   bool isDead(SymbolRef sym) const {
     return TheDead.count(sym);
   }
-  
+
   void markLive(const MemRegion *region);
   void markElementIndicesLive(const MemRegion *region);
-  
-  /// \brief Set to the value of the symbolic store after
+
+  /// Set to the value of the symbolic store after
   /// StoreManager::removeDeadBindings has been called.
   void setReapedStore(StoreRef st) { reapedStore = st; }
 
@@ -625,7 +649,7 @@
   SymbolVisitor(const SymbolVisitor &) = default;
   SymbolVisitor(SymbolVisitor &&) {}
 
-  /// \brief A visitor method invoked by ProgramStateManager::scanReachableSymbols.
+  /// A visitor method invoked by ProgramStateManager::scanReachableSymbols.
   ///
   /// The method returns \c true if symbols should continue be scanned and \c
   /// false otherwise.
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
index 7b76263..ce19b71 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintManager.h
@@ -1,4 +1,4 @@
-//== TaintManager.h - Managing taint --------------------------- -*- C++ -*--=//
+//===- TaintManager.h - Managing taint --------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -14,9 +14,9 @@
 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
 
-#include "clang/StaticAnalyzer/Core/BugReporter/PathDiagnostic.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/ProgramStateTrait.h"
+#include "clang/StaticAnalyzer/Core/PathSensitive/SymExpr.h"
 #include "clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h"
 #include "llvm/ADT/ImmutableMap.h"
 
@@ -29,28 +29,37 @@
 // FIXME: This does not use the nice trait macros because it must be accessible
 // from multiple translation units.
 struct TaintMap {};
-typedef llvm::ImmutableMap<SymbolRef, TaintTagType> TaintMapImpl;
+
+using TaintMapImpl = llvm::ImmutableMap<SymbolRef, TaintTagType>;
+
 template<> struct ProgramStateTrait<TaintMap>
     :  public ProgramStatePartialTrait<TaintMapImpl> {
-  static void *GDMIndex() { static int index = 0; return &index; }
+  static void *GDMIndex() {
+    static int index = 0;
+    return &index;
+  }
 };
 
 /// The GDM component mapping derived symbols' parent symbols to their
 /// underlying regions. This is used to efficiently check whether a symbol is
 /// tainted when it represents a sub-region of a tainted symbol.
 struct DerivedSymTaint {};
-typedef llvm::ImmutableMap<SymbolRef, TaintedSubRegions> DerivedSymTaintImpl;
+
+using DerivedSymTaintImpl = llvm::ImmutableMap<SymbolRef, TaintedSubRegions>;
+
 template<> struct ProgramStateTrait<DerivedSymTaint>
     :  public ProgramStatePartialTrait<DerivedSymTaintImpl> {
-  static void *GDMIndex() { static int index; return &index; }
+  static void *GDMIndex() {
+    static int index;
+    return &index;
+  }
 };
 
 class TaintManager {
-
-  TaintManager() {}
+  TaintManager() = default;
 };
 
-}
-}
+} // namespace ento
+} // namespace clang
 
-#endif
+#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTMANAGER_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
index 0c56e7d..50c4b81 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/TaintTag.h
@@ -1,4 +1,4 @@
-//== TaintTag.h - Path-sensitive "State" for tracking values -*- C++ -*--=//
+//===- TaintTag.h - Path-sensitive "State" for tracking values --*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -11,6 +11,7 @@
 // of taint.
 //
 //===----------------------------------------------------------------------===//
+
 #ifndef LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
 #define LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
 
@@ -19,9 +20,11 @@
 
 /// The type of taint, which helps to differentiate between different types of
 /// taint.
-typedef unsigned TaintTagType;
+using TaintTagType = unsigned;
+
 static const TaintTagType TaintTagGeneric = 0;
 
-}}
+} // namespace ento
+} // namespace clang
 
-#endif
+#endif // LLVM_CLANG_STATICANALYZER_CORE_PATHSENSITIVE_TAINTTAG_H
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/WorkList.h b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/WorkList.h
index 7df8f37..07edd35 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/WorkList.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Core/PathSensitive/WorkList.h
@@ -20,7 +20,7 @@
 #include <cassert>
 
 namespace clang {
-  
+
 class CFGBlock;
 
 namespace ento {
@@ -47,13 +47,13 @@
 
   /// Returns the node associated with the worklist unit.
   ExplodedNode *getNode() const { return node; }
-  
+
   /// Returns the block counter map associated with the worklist unit.
   BlockCounter getBlockCounter() const { return counter; }
 
   /// Returns the CFGblock associated with the worklist unit.
   const CFGBlock *getBlock() const { return block; }
-  
+
   /// Return the index within the CFGBlock for the worklist unit.
   unsigned getIndex() const { return blockIdx; }
 };
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
index a9dad6c..59fbbc3 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/AnalysisConsumer.h
@@ -17,6 +17,7 @@
 
 #include "clang/AST/ASTConsumer.h"
 #include "clang/Basic/LLVM.h"
+#include <functional>
 #include <memory>
 
 namespace clang {
@@ -29,10 +30,24 @@
 namespace ento {
 class PathDiagnosticConsumer;
 class CheckerManager;
+class CheckerRegistry;
 
 class AnalysisASTConsumer : public ASTConsumer {
 public:
   virtual void AddDiagnosticConsumer(PathDiagnosticConsumer *Consumer) = 0;
+
+  /// This method allows registering statically linked custom checkers that are
+  /// not a part of the Clang tree. It employs the same mechanism that is used
+  /// by plugins.
+  ///
+  /// Example:
+  ///
+  ///   Consumer->AddCheckerRegistrationFn([] (CheckerRegistry& Registry) {
+  ///     Registry.addChecker<MyCustomChecker>("example.MyCustomChecker",
+  ///                                          "Description");
+  ///   });
+  virtual void
+  AddCheckerRegistrationFn(std::function<void(CheckerRegistry &)> Fn) = 0;
 };
 
 /// CreateAnalysisConsumer - Creates an ASTConsumer to run various code
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h
index 2985b7c..6170954 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h
@@ -10,7 +10,9 @@
 #ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H
 #define LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H
 
+#include "clang/AST/ASTContext.h"
 #include "clang/Basic/LLVM.h"
+#include <functional>
 #include <memory>
 #include <string>
 
@@ -21,10 +23,14 @@
 
 namespace ento {
   class CheckerManager;
+  class CheckerRegistry;
 
-  std::unique_ptr<CheckerManager>
-  createCheckerManager(AnalyzerOptions &opts, const LangOptions &langOpts,
-                       ArrayRef<std::string> plugins, DiagnosticsEngine &diags);
+  std::unique_ptr<CheckerManager> createCheckerManager(
+      ASTContext &context,
+      AnalyzerOptions &opts,
+      ArrayRef<std::string> plugins,
+      ArrayRef<std::function<void(CheckerRegistry &)>> checkerRegistrationFns,
+      DiagnosticsEngine &diags);
 
 } // end ento namespace
 
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
index e66d48b..ba37b7f 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/FrontendActions.h
@@ -31,7 +31,7 @@
                                                  StringRef InFile) override;
 };
 
-/// \brief Frontend action to parse model files.
+/// Frontend action to parse model files.
 ///
 /// This frontend action is responsible for parsing model files. Model files can
 /// not be parsed on their own, they rely on type information that is available
diff --git a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/ModelConsumer.h b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/ModelConsumer.h
index 24f8042..fa00ffd 100644
--- a/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/ModelConsumer.h
+++ b/linux-x64/clang/include/clang/StaticAnalyzer/Frontend/ModelConsumer.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file implements clang::ento::ModelConsumer which is an
+/// This file implements clang::ento::ModelConsumer which is an
 /// ASTConsumer for model files.
 ///
 //===----------------------------------------------------------------------===//
@@ -25,7 +25,7 @@
 
 namespace ento {
 
-/// \brief ASTConsumer to consume model files' AST.
+/// ASTConsumer to consume model files' AST.
 ///
 /// This consumer collects the bodies of function definitions into a StringMap
 /// from a model file.
diff --git a/linux-x64/clang/include/clang/Tooling/AllTUsExecution.h b/linux-x64/clang/include/clang/Tooling/AllTUsExecution.h
index 0417aea..f199365 100644
--- a/linux-x64/clang/include/clang/Tooling/AllTUsExecution.h
+++ b/linux-x64/clang/include/clang/Tooling/AllTUsExecution.h
@@ -21,13 +21,13 @@
 namespace clang {
 namespace tooling {
 
-/// \brief Executes given frontend actions on all files/TUs in the compilation
+/// Executes given frontend actions on all files/TUs in the compilation
 /// database.
 class AllTUsToolExecutor : public ToolExecutor {
 public:
   static const char *ExecutorName;
 
-  /// \brief Init with \p CompilationDatabase.
+  /// Init with \p CompilationDatabase.
   /// This uses \p ThreadCount threads to exececute the actions on all files in
   /// parallel. If \p ThreadCount is 0, this uses `llvm::hardware_concurrency`.
   AllTUsToolExecutor(const CompilationDatabase &Compilations,
@@ -35,7 +35,7 @@
                      std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                          std::make_shared<PCHContainerOperations>());
 
-  /// \brief Init with \p CommonOptionsParser. This is expected to be used by
+  /// Init with \p CommonOptionsParser. This is expected to be used by
   /// `createExecutorFromCommandLineArgs` based on commandline options.
   ///
   /// The executor takes ownership of \p Options.
diff --git a/linux-x64/clang/include/clang/Tooling/ArgumentsAdjusters.h b/linux-x64/clang/include/clang/Tooling/ArgumentsAdjusters.h
index a288f87..94ccf1f 100644
--- a/linux-x64/clang/include/clang/Tooling/ArgumentsAdjusters.h
+++ b/linux-x64/clang/include/clang/Tooling/ArgumentsAdjusters.h
@@ -26,42 +26,42 @@
 namespace clang {
 namespace tooling {
 
-/// \brief A sequence of command line arguments.
+/// A sequence of command line arguments.
 using CommandLineArguments = std::vector<std::string>;
 
-/// \brief A prototype of a command line adjuster.
+/// A prototype of a command line adjuster.
 ///
 /// Command line argument adjuster is responsible for command line arguments
 /// modification before the arguments are used to run a frontend action.
 using ArgumentsAdjuster = std::function<CommandLineArguments(
     const CommandLineArguments &, StringRef Filename)>;
 
-/// \brief Gets an argument adjuster that converts input command line arguments
+/// Gets an argument adjuster that converts input command line arguments
 /// to the "syntax check only" variant.
 ArgumentsAdjuster getClangSyntaxOnlyAdjuster();
 
-/// \brief Gets an argument adjuster which removes output-related command line
+/// Gets an argument adjuster which removes output-related command line
 /// arguments.
 ArgumentsAdjuster getClangStripOutputAdjuster();
 
-/// \brief Gets an argument adjuster which removes dependency-file
+/// Gets an argument adjuster which removes dependency-file
 /// related command line arguments.
 ArgumentsAdjuster getClangStripDependencyFileAdjuster();
 
 enum class ArgumentInsertPosition { BEGIN, END };
 
-/// \brief Gets an argument adjuster which inserts \p Extra arguments in the
+/// Gets an argument adjuster which inserts \p Extra arguments in the
 /// specified position.
 ArgumentsAdjuster getInsertArgumentAdjuster(const CommandLineArguments &Extra,
                                             ArgumentInsertPosition Pos);
 
-/// \brief Gets an argument adjuster which inserts an \p Extra argument in the
+/// Gets an argument adjuster which inserts an \p Extra argument in the
 /// specified position.
 ArgumentsAdjuster getInsertArgumentAdjuster(
     const char *Extra,
     ArgumentInsertPosition Pos = ArgumentInsertPosition::END);
 
-/// \brief Gets an argument adjuster which adjusts the arguments in sequence
+/// Gets an argument adjuster which adjusts the arguments in sequence
 /// with the \p First adjuster and then with the \p Second one.
 ArgumentsAdjuster combineAdjusters(ArgumentsAdjuster First,
                                    ArgumentsAdjuster Second);
diff --git a/linux-x64/clang/include/clang/Tooling/CommonOptionsParser.h b/linux-x64/clang/include/clang/Tooling/CommonOptionsParser.h
index 15e8161..7aaa712 100644
--- a/linux-x64/clang/include/clang/Tooling/CommonOptionsParser.h
+++ b/linux-x64/clang/include/clang/Tooling/CommonOptionsParser.h
@@ -34,7 +34,7 @@
 
 namespace clang {
 namespace tooling {
-/// \brief A parser for options common to all command-line Clang tools.
+/// A parser for options common to all command-line Clang tools.
 ///
 /// Parses a common subset of command-line arguments, locates and loads a
 /// compilation commands database and runs a tool with user-specified action. It
@@ -52,7 +52,7 @@
 ///
 /// static cl::OptionCategory MyToolCategory("My tool options");
 /// static cl::extrahelp CommonHelp(CommonOptionsParser::HelpMessage);
-/// static cl::extrahelp MoreHelp("\nMore help text...");
+/// static cl::extrahelp MoreHelp("\nMore help text...\n");
 /// static cl::opt<bool> YourOwnOption(...);
 /// ...
 ///
@@ -65,7 +65,7 @@
 /// \endcode
 class CommonOptionsParser {
 public:
-  /// \brief Parses command-line, initializes a compilation database.
+  /// Parses command-line, initializes a compilation database.
   ///
   /// This constructor can change argc and argv contents, e.g. consume
   /// command-line options used for creating FixedCompilationDatabase.
@@ -79,7 +79,7 @@
       : CommonOptionsParser(argc, argv, Category, llvm::cl::OneOrMore,
                             Overview) {}
 
-  /// \brief Parses command-line, initializes a compilation database.
+  /// Parses command-line, initializes a compilation database.
   ///
   /// This constructor can change argc and argv contents, e.g. consume
   /// command-line options used for creating FixedCompilationDatabase.
@@ -92,7 +92,7 @@
                       llvm::cl::NumOccurrencesFlag OccurrencesFlag,
                       const char *Overview = nullptr);
 
-  /// \brief A factory method that is similar to the above constructor, except
+  /// A factory method that is similar to the above constructor, except
   /// this returns an error instead exiting the program on error.
   static llvm::Expected<CommonOptionsParser>
   create(int &argc, const char **argv, llvm::cl::OptionCategory &Category,
diff --git a/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h b/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
index 55e1131..37e515f 100644
--- a/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
+++ b/linux-x64/clang/include/clang/Tooling/CompilationDatabase.h
@@ -40,7 +40,7 @@
 namespace clang {
 namespace tooling {
 
-/// \brief Specifies the working directory and command of a compilation.
+/// Specifies the working directory and command of a compilation.
 struct CompileCommand {
   CompileCommand() = default;
   CompileCommand(Twine Directory, Twine Filename,
@@ -48,20 +48,29 @@
       : Directory(Directory.str()), Filename(Filename.str()),
         CommandLine(std::move(CommandLine)), Output(Output.str()){}
 
-  /// \brief The working directory the command was executed from.
+  /// The working directory the command was executed from.
   std::string Directory;
 
   /// The source file associated with the command.
   std::string Filename;
 
-  /// \brief The command line that was executed.
+  /// The command line that was executed.
   std::vector<std::string> CommandLine;
 
   /// The output file associated with the command.
   std::string Output;
+
+  friend bool operator==(const CompileCommand &LHS, const CompileCommand &RHS) {
+    return LHS.Directory == RHS.Directory && LHS.Filename == RHS.Filename &&
+           LHS.CommandLine == RHS.CommandLine && LHS.Output == RHS.Output;
+  }
+
+  friend bool operator!=(const CompileCommand &LHS, const CompileCommand &RHS) {
+    return !(LHS == RHS);
+  }
 };
 
-/// \brief Interface for compilation databases.
+/// Interface for compilation databases.
 ///
 /// A compilation database allows the user to retrieve compile command lines
 /// for the files in a project.
@@ -73,7 +82,7 @@
 public:
   virtual ~CompilationDatabase();
 
-  /// \brief Loads a compilation database from a build directory.
+  /// Loads a compilation database from a build directory.
   ///
   /// Looks at the specified 'BuildDirectory' and creates a compilation database
   /// that allows to query compile commands for source files in the
@@ -88,21 +97,21 @@
   static std::unique_ptr<CompilationDatabase>
   loadFromDirectory(StringRef BuildDirectory, std::string &ErrorMessage);
 
-  /// \brief Tries to detect a compilation database location and load it.
+  /// Tries to detect a compilation database location and load it.
   ///
   /// Looks for a compilation database in all parent paths of file 'SourceFile'
   /// by calling loadFromDirectory.
   static std::unique_ptr<CompilationDatabase>
   autoDetectFromSource(StringRef SourceFile, std::string &ErrorMessage);
 
-  /// \brief Tries to detect a compilation database location and load it.
+  /// Tries to detect a compilation database location and load it.
   ///
   /// Looks for a compilation database in directory 'SourceDir' and all
   /// its parent paths by calling loadFromDirectory.
   static std::unique_ptr<CompilationDatabase>
   autoDetectFromDirectory(StringRef SourceDir, std::string &ErrorMessage);
 
-  /// \brief Returns all compile commands in which the specified file was
+  /// Returns all compile commands in which the specified file was
   /// compiled.
   ///
   /// This includes compile commands that span multiple source files.
@@ -114,13 +123,13 @@
   virtual std::vector<CompileCommand> getCompileCommands(
       StringRef FilePath) const = 0;
 
-  /// \brief Returns the list of all files available in the compilation database.
+  /// Returns the list of all files available in the compilation database.
   ///
   /// By default, returns nothing. Implementations should override this if they
   /// can enumerate their source files.
   virtual std::vector<std::string> getAllFiles() const { return {}; }
 
-  /// \brief Returns all compile commands for all the files in the compilation
+  /// Returns all compile commands for all the files in the compilation
   /// database.
   ///
   /// FIXME: Add a layer in Tooling that provides an interface to run a tool
@@ -132,7 +141,7 @@
   virtual std::vector<CompileCommand> getAllCompileCommands() const;
 };
 
-/// \brief Interface for compilation database plugins.
+/// Interface for compilation database plugins.
 ///
 /// A compilation database plugin allows the user to register custom compilation
 /// databases that are picked up as compilation database if the corresponding
@@ -146,20 +155,20 @@
 public:
   virtual ~CompilationDatabasePlugin();
 
-  /// \brief Loads a compilation database from a build directory.
+  /// Loads a compilation database from a build directory.
   ///
   /// \see CompilationDatabase::loadFromDirectory().
   virtual std::unique_ptr<CompilationDatabase>
   loadFromDirectory(StringRef Directory, std::string &ErrorMessage) = 0;
 };
 
-/// \brief A compilation database that returns a single compile command line.
+/// A compilation database that returns a single compile command line.
 ///
 /// Useful when we want a tool to behave more like a compiler invocation.
 /// This compilation database is not enumerable: getAllFiles() returns {}.
 class FixedCompilationDatabase : public CompilationDatabase {
 public:
-  /// \brief Creates a FixedCompilationDatabase from the arguments after "--".
+  /// Creates a FixedCompilationDatabase from the arguments after "--".
   ///
   /// Parses the given command line for "--". If "--" is found, the rest of
   /// the arguments will make up the command line in the returned
@@ -195,11 +204,11 @@
   static std::unique_ptr<FixedCompilationDatabase>
   loadFromFile(StringRef Path, std::string &ErrorMsg);
 
-  /// \brief Constructs a compilation data base from a specified directory
+  /// Constructs a compilation data base from a specified directory
   /// and command line.
   FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine);
 
-  /// \brief Returns the given compile command.
+  /// Returns the given compile command.
   ///
   /// Will always return a vector with one entry that contains the directory
   /// and command line specified at construction with "clang-tool" as argv[0]
@@ -213,6 +222,13 @@
   std::vector<CompileCommand> CompileCommands;
 };
 
+/// Returns a wrapped CompilationDatabase that defers to the provided one,
+/// but getCompileCommands() will infer commands for unknown files.
+/// The return value of getAllFiles() or getAllCompileCommands() is unchanged.
+/// See InterpolatingCompilationDatabase.cpp for details on heuristics.
+std::unique_ptr<CompilationDatabase>
+    inferMissingCompileCommands(std::unique_ptr<CompilationDatabase>);
+
 } // namespace tooling
 } // namespace clang
 
diff --git a/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h b/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
index c8307c8..ddb4010 100644
--- a/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
+++ b/linux-x64/clang/include/clang/Tooling/Core/Diagnostic.h
@@ -27,12 +27,12 @@
 namespace clang {
 namespace tooling {
 
-/// \brief Represents the diagnostic message with the error message associated
+/// Represents the diagnostic message with the error message associated
 /// and the information on the location of the problem.
 struct DiagnosticMessage {
   DiagnosticMessage(llvm::StringRef Message = "");
 
-  /// \brief Constructs a diagnostic message with anoffset to the diagnostic
+  /// Constructs a diagnostic message with anoffset to the diagnostic
   /// within the file where the problem occurred.
   ///
   /// \param Loc Should be a file location, it is not meaningful for a macro
@@ -45,7 +45,7 @@
   unsigned FileOffset;
 };
 
-/// \brief Represents the diagnostic with the level of severity and possible
+/// Represents the diagnostic with the level of severity and possible
 /// fixes to be applied.
 struct Diagnostic {
   enum Level {
@@ -63,22 +63,22 @@
              const SmallVector<DiagnosticMessage, 1> &Notes, Level DiagLevel,
              llvm::StringRef BuildDirectory);
 
-  /// \brief Name identifying the Diagnostic.
+  /// Name identifying the Diagnostic.
   std::string DiagnosticName;
 
-  /// \brief Message associated to the diagnostic.
+  /// Message associated to the diagnostic.
   DiagnosticMessage Message;
 
-  /// \brief Fixes to apply, grouped by file path.
+  /// Fixes to apply, grouped by file path.
   llvm::StringMap<Replacements> Fix;
 
-  /// \brief Potential notes about the diagnostic.
+  /// Potential notes about the diagnostic.
   SmallVector<DiagnosticMessage, 1> Notes;
 
-  /// \brief Diagnostic level. Can indicate either an error or a warning.
+  /// Diagnostic level. Can indicate either an error or a warning.
   Level DiagLevel;
 
-  /// \brief A build directory of the diagnostic source file.
+  /// A build directory of the diagnostic source file.
   ///
   /// It's an absolute path which is `directory` field of the source file in
   /// compilation database. If users don't specify the compilation database
@@ -88,7 +88,7 @@
   std::string BuildDirectory;
 };
 
-/// \brief Collection of Diagnostics generated from a single translation unit.
+/// Collection of Diagnostics generated from a single translation unit.
 struct TranslationUnitDiagnostics {
   /// Name of the main source for the translation unit.
   std::string MainSourceFile;
diff --git a/linux-x64/clang/include/clang/Tooling/Core/Replacement.h b/linux-x64/clang/include/clang/Tooling/Core/Replacement.h
index 146d6aa..ba11ca4 100644
--- a/linux-x64/clang/include/clang/Tooling/Core/Replacement.h
+++ b/linux-x64/clang/include/clang/Tooling/Core/Replacement.h
@@ -41,13 +41,13 @@
 
 namespace tooling {
 
-/// \brief A source range independent of the \c SourceManager.
+/// A source range independent of the \c SourceManager.
 class Range {
 public:
   Range() = default;
   Range(unsigned Offset, unsigned Length) : Offset(Offset), Length(Length) {}
 
-  /// \brief Accessors.
+  /// Accessors.
   /// @{
   unsigned getOffset() const { return Offset; }
   unsigned getLength() const { return Length; }
@@ -55,18 +55,18 @@
 
   /// \name Range Predicates
   /// @{
-  /// \brief Whether this range overlaps with \p RHS or not.
+  /// Whether this range overlaps with \p RHS or not.
   bool overlapsWith(Range RHS) const {
     return Offset + Length > RHS.Offset && Offset < RHS.Offset + RHS.Length;
   }
 
-  /// \brief Whether this range contains \p RHS or not.
+  /// Whether this range contains \p RHS or not.
   bool contains(Range RHS) const {
     return RHS.Offset >= Offset &&
            (RHS.Offset + RHS.Length) <= (Offset + Length);
   }
 
-  /// \brief Whether this range equals to \p RHS or not.
+  /// Whether this range equals to \p RHS or not.
   bool operator==(const Range &RHS) const {
     return Offset == RHS.getOffset() && Length == RHS.getLength();
   }
@@ -77,16 +77,16 @@
   unsigned Length = 0;
 };
 
-/// \brief A text replacement.
+/// A text replacement.
 ///
 /// Represents a SourceManager independent replacement of a range of text in a
 /// specific file.
 class Replacement {
 public:
-  /// \brief Creates an invalid (not applicable) replacement.
+  /// Creates an invalid (not applicable) replacement.
   Replacement();
 
-  /// \brief Creates a replacement of the range [Offset, Offset+Length) in
+  /// Creates a replacement of the range [Offset, Offset+Length) in
   /// FilePath with ReplacementText.
   ///
   /// \param FilePath A source file accessible via a SourceManager.
@@ -95,28 +95,28 @@
   Replacement(StringRef FilePath, unsigned Offset, unsigned Length,
               StringRef ReplacementText);
 
-  /// \brief Creates a Replacement of the range [Start, Start+Length) with
+  /// Creates a Replacement of the range [Start, Start+Length) with
   /// ReplacementText.
   Replacement(const SourceManager &Sources, SourceLocation Start,
               unsigned Length, StringRef ReplacementText);
 
-  /// \brief Creates a Replacement of the given range with ReplacementText.
+  /// Creates a Replacement of the given range with ReplacementText.
   Replacement(const SourceManager &Sources, const CharSourceRange &Range,
               StringRef ReplacementText,
               const LangOptions &LangOpts = LangOptions());
 
-  /// \brief Creates a Replacement of the node with ReplacementText.
+  /// Creates a Replacement of the node with ReplacementText.
   template <typename Node>
   Replacement(const SourceManager &Sources, const Node &NodeToReplace,
               StringRef ReplacementText,
               const LangOptions &LangOpts = LangOptions());
 
-  /// \brief Returns whether this replacement can be applied to a file.
+  /// Returns whether this replacement can be applied to a file.
   ///
   /// Only replacements that are in a valid file can be applied.
   bool isApplicable() const;
 
-  /// \brief Accessors.
+  /// Accessors.
   /// @{
   StringRef getFilePath() const { return FilePath; }
   unsigned getOffset() const { return ReplacementRange.getOffset(); }
@@ -124,10 +124,10 @@
   StringRef getReplacementText() const { return ReplacementText; }
   /// @}
 
-  /// \brief Applies the replacement on the Rewriter.
+  /// Applies the replacement on the Rewriter.
   bool apply(Rewriter &Rewrite) const;
 
-  /// \brief Returns a human readable string representation.
+  /// Returns a human readable string representation.
   std::string toString() const;
 
 private:
@@ -150,17 +150,17 @@
   insert_conflict,
 };
 
-/// \brief Carries extra error information in replacement-related llvm::Error,
+/// Carries extra error information in replacement-related llvm::Error,
 /// e.g. fail applying replacements and replacements conflict.
 class ReplacementError : public llvm::ErrorInfo<ReplacementError> {
 public:
   ReplacementError(replacement_error Err) : Err(Err) {}
 
-  /// \brief Constructs an error related to an existing replacement.
+  /// Constructs an error related to an existing replacement.
   ReplacementError(replacement_error Err, Replacement Existing)
       : Err(Err), ExistingReplacement(std::move(Existing)) {}
 
-  /// \brief Constructs an error related to a new replacement and an existing
+  /// Constructs an error related to a new replacement and an existing
   /// replacement in a set of replacements.
   ReplacementError(replacement_error Err, Replacement New, Replacement Existing)
       : Err(Err), NewReplacement(std::move(New)),
@@ -198,13 +198,13 @@
   llvm::Optional<Replacement> ExistingReplacement;
 };
 
-/// \brief Less-than operator between two Replacements.
+/// Less-than operator between two Replacements.
 bool operator<(const Replacement &LHS, const Replacement &RHS);
 
-/// \brief Equal-to operator between two Replacements.
+/// Equal-to operator between two Replacements.
 bool operator==(const Replacement &LHS, const Replacement &RHS);
 
-/// \brief Maintains a set of replacements that are conflict-free.
+/// Maintains a set of replacements that are conflict-free.
 /// Two replacements are considered conflicts if they overlap or have the same
 /// offset (i.e. order-dependent).
 class Replacements {
@@ -219,7 +219,7 @@
 
   explicit Replacements(const Replacement &R) { Replaces.insert(R); }
 
-  /// \brief Adds a new replacement \p R to the current set of replacements.
+  /// Adds a new replacement \p R to the current set of replacements.
   /// \p R must have the same file path as all existing replacements.
   /// Returns `success` if the replacement is successfully inserted; otherwise,
   /// it returns an llvm::Error, i.e. there is a conflict between R and the
@@ -258,7 +258,7 @@
   /// category of replacements.
   llvm::Error add(const Replacement &R);
 
-  /// \brief Merges \p Replaces into the current replacements. \p Replaces
+  /// Merges \p Replaces into the current replacements. \p Replaces
   /// refers to code after applying the current replacements.
   LLVM_NODISCARD Replacements merge(const Replacements &Replaces) const;
 
@@ -311,7 +311,7 @@
   ReplacementsImpl Replaces;
 };
 
-/// \brief Apply all replacements in \p Replaces to the Rewriter \p Rewrite.
+/// Apply all replacements in \p Replaces to the Rewriter \p Rewrite.
 ///
 /// Replacement applications happen independently of the success of
 /// other applications.
@@ -319,7 +319,7 @@
 /// \returns true if all replacements apply. false otherwise.
 bool applyAllReplacements(const Replacements &Replaces, Rewriter &Rewrite);
 
-/// \brief Applies all replacements in \p Replaces to \p Code.
+/// Applies all replacements in \p Replaces to \p Code.
 ///
 /// This completely ignores the path stored in each replacement. If all
 /// replacements are applied successfully, this returns the code with
@@ -329,7 +329,7 @@
 llvm::Expected<std::string> applyAllReplacements(StringRef Code,
                                                  const Replacements &Replaces);
 
-/// \brief Collection of Replacements generated from a single translation unit.
+/// Collection of Replacements generated from a single translation unit.
 struct TranslationUnitReplacements {
   /// Name of the main source for the translation unit.
   std::string MainSourceFile;
@@ -337,7 +337,7 @@
   std::vector<Replacement> Replacements;
 };
 
-/// \brief Calculates the new ranges after \p Replaces are applied. These
+/// Calculates the new ranges after \p Replaces are applied. These
 /// include both the original \p Ranges and the affected ranges of \p Replaces
 /// in the new code.
 ///
@@ -349,7 +349,7 @@
 calculateRangesAfterReplacements(const Replacements &Replaces,
                                  const std::vector<Range> &Ranges);
 
-/// \brief If there are multiple <File, Replacements> pairs with the same file
+/// If there are multiple <File, Replacements> pairs with the same file
 /// entry, we only keep one pair and discard the rest.
 /// If a file does not exist, its corresponding replacements will be ignored.
 std::map<std::string, Replacements> groupReplacementsByFile(
diff --git a/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h b/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
index 4d6ff06..bf0732b 100644
--- a/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
+++ b/linux-x64/clang/include/clang/Tooling/DiagnosticsYaml.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines the structure of a YAML document for serializing
+/// This file defines the structure of a YAML document for serializing
 /// diagnostics.
 ///
 //===----------------------------------------------------------------------===//
@@ -27,7 +27,7 @@
 namespace yaml {
 
 template <> struct MappingTraits<clang::tooling::Diagnostic> {
-  /// \brief Helper to (de)serialize a Diagnostic since we don't have direct
+  /// Helper to (de)serialize a Diagnostic since we don't have direct
   /// access to its data members.
   class NormalizedDiagnostic {
   public:
@@ -80,7 +80,7 @@
   }
 };
 
-/// \brief Specialized MappingTraits to describe how a
+/// Specialized MappingTraits to describe how a
 /// TranslationUnitDiagnostics is (de)serialized.
 template <> struct MappingTraits<clang::tooling::TranslationUnitDiagnostics> {
   static void mapping(IO &Io, clang::tooling::TranslationUnitDiagnostics &Doc) {
diff --git a/linux-x64/clang/include/clang/Tooling/Execution.h b/linux-x64/clang/include/clang/Tooling/Execution.h
index 1a44c47..68aef53 100644
--- a/linux-x64/clang/include/clang/Tooling/Execution.h
+++ b/linux-x64/clang/include/clang/Tooling/Execution.h
@@ -32,11 +32,12 @@
 #include "clang/Tooling/Tooling.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/Registry.h"
+#include "llvm/Support/StringSaver.h"
 
 namespace clang {
 namespace tooling {
 
-/// \brief An abstraction for the result of a tool execution. For example, the
+/// An abstraction for the result of a tool execution. For example, the
 /// underlying result can be in-memory or on-disk.
 ///
 /// Results should be string key-value pairs. For example, a refactoring tool
@@ -45,32 +46,41 @@
 public:
   virtual ~ToolResults() = default;
   virtual void addResult(StringRef Key, StringRef Value) = 0;
-  virtual std::vector<std::pair<std::string, std::string>> AllKVResults() = 0;
+  virtual std::vector<std::pair<llvm::StringRef, llvm::StringRef>>
+  AllKVResults() = 0;
   virtual void forEachResult(
       llvm::function_ref<void(StringRef Key, StringRef Value)> Callback) = 0;
 };
 
+/// Stores the key-value results in memory. It maintains the lifetime of
+/// the result. Clang tools using this class are expected to generate a small
+/// set of different results, or a large set of duplicated results.
 class InMemoryToolResults : public ToolResults {
 public:
+  InMemoryToolResults() : Strings(Arena) {}
   void addResult(StringRef Key, StringRef Value) override;
-  std::vector<std::pair<std::string, std::string>> AllKVResults() override;
+  std::vector<std::pair<llvm::StringRef, llvm::StringRef>>
+  AllKVResults() override;
   void forEachResult(llvm::function_ref<void(StringRef Key, StringRef Value)>
                          Callback) override;
 
 private:
-  std::vector<std::pair<std::string, std::string>> KVResults;
+  llvm::BumpPtrAllocator Arena;
+  llvm::UniqueStringSaver Strings;
+
+  std::vector<std::pair<llvm::StringRef, llvm::StringRef>> KVResults;
 };
 
-/// \brief The context of an execution, including the information about
+/// The context of an execution, including the information about
 /// compilation and results.
 class ExecutionContext {
 public:
   virtual ~ExecutionContext() {}
 
-  /// \brief Initializes a context. This does not take ownership of `Results`.
+  /// Initializes a context. This does not take ownership of `Results`.
   explicit ExecutionContext(ToolResults *Results) : Results(Results) {}
 
-  /// \brief Adds a KV pair to the result container of this execution.
+  /// Adds a KV pair to the result container of this execution.
   void reportResult(StringRef Key, StringRef Value);
 
   // Returns the source control system's revision number if applicable.
@@ -88,7 +98,7 @@
   ToolResults *Results;
 };
 
-/// \brief Interface for executing clang frontend actions.
+/// Interface for executing clang frontend actions.
 ///
 /// This can be extended to support running tool actions in different
 /// execution mode, e.g. on a specific set of TUs or many TUs in parallel.
@@ -101,54 +111,54 @@
 public:
   virtual ~ToolExecutor() {}
 
-  /// \brief Returns the name of a specific executor.
+  /// Returns the name of a specific executor.
   virtual StringRef getExecutorName() const = 0;
 
-  /// \brief Executes each action with a corresponding arguments adjuster.
+  /// Executes each action with a corresponding arguments adjuster.
   virtual llvm::Error
   execute(llvm::ArrayRef<
           std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
               Actions) = 0;
 
-  /// \brief Convenient functions for the above `execute`.
+  /// Convenient functions for the above `execute`.
   llvm::Error execute(std::unique_ptr<FrontendActionFactory> Action);
   /// Executes an action with an argument adjuster.
   llvm::Error execute(std::unique_ptr<FrontendActionFactory> Action,
                       ArgumentsAdjuster Adjuster);
 
-  /// \brief Returns a reference to the execution context.
+  /// Returns a reference to the execution context.
   ///
   /// This should be passed to tool callbacks, and tool callbacks should report
   /// results via the returned context.
   virtual ExecutionContext *getExecutionContext() = 0;
 
-  /// \brief Returns a reference to the result container.
+  /// Returns a reference to the result container.
   ///
   /// NOTE: This should only be used after the execution finishes. Tool
   /// callbacks should report results via `ExecutionContext` instead.
   virtual ToolResults *getToolResults() = 0;
 
-  /// \brief Map a virtual file to be used while running the tool.
+  /// Map a virtual file to be used while running the tool.
   ///
   /// \param FilePath The path at which the content will be mapped.
   /// \param Content A buffer of the file's content.
   virtual void mapVirtualFile(StringRef FilePath, StringRef Content) = 0;
 };
 
-/// \brief Interface for factories that create specific executors. This is also
+/// Interface for factories that create specific executors. This is also
 /// used as a plugin to be registered into ToolExecutorPluginRegistry.
 class ToolExecutorPlugin {
 public:
   virtual ~ToolExecutorPlugin() {}
 
-  /// \brief Create an `ToolExecutor`.
+  /// Create an `ToolExecutor`.
   ///
   /// `OptionsParser` can be consumed (e.g. moved) if the creation succeeds.
   virtual llvm::Expected<std::unique_ptr<ToolExecutor>>
   create(CommonOptionsParser &OptionsParser) = 0;
 };
 
-/// \brief This creates a ToolExecutor that is in the global registry based on
+/// This creates a ToolExecutor that is in the global registry based on
 /// commandline arguments.
 ///
 /// This picks the right executor based on the `--executor` option. This parses
diff --git a/linux-x64/clang/include/clang/Tooling/FileMatchTrie.h b/linux-x64/clang/include/clang/Tooling/FileMatchTrie.h
index 74f30d9..11d12f3 100644
--- a/linux-x64/clang/include/clang/Tooling/FileMatchTrie.h
+++ b/linux-x64/clang/include/clang/Tooling/FileMatchTrie.h
@@ -30,7 +30,7 @@
   virtual bool equivalent(StringRef FileA, StringRef FileB) const = 0;
 };
 
-/// \brief A trie to efficiently match against the entries of the compilation
+/// A trie to efficiently match against the entries of the compilation
 /// database in order of matching suffix length.
 ///
 /// When a clang tool is supposed to operate on a specific file, we have to
@@ -58,21 +58,21 @@
 public:
   FileMatchTrie();
 
-  /// \brief Construct a new \c FileMatchTrie with the given \c PathComparator.
+  /// Construct a new \c FileMatchTrie with the given \c PathComparator.
   ///
   /// The \c FileMatchTrie takes ownership of 'Comparator'. Used for testing.
   FileMatchTrie(PathComparator* Comparator);
 
   ~FileMatchTrie();
 
-  /// \brief Insert a new absolute path. Relative paths are ignored.
+  /// Insert a new absolute path. Relative paths are ignored.
   void insert(StringRef NewPath);
 
-  /// \brief Finds the corresponding file in this trie.
+  /// Finds the corresponding file in this trie.
   ///
   /// Returns file name stored in this trie that is equivalent to 'FileName'
   /// according to 'Comparator', if it can be uniquely identified. If there
-  /// are no matches an empty \c StringRef is returned. If there are ambigious
+  /// are no matches an empty \c StringRef is returned. If there are ambiguous
   /// matches, an empty \c StringRef is returned and a corresponding message
   /// written to 'Error'.
   StringRef findEquivalent(StringRef FileName,
diff --git a/linux-x64/clang/include/clang/Tooling/FixIt.h b/linux-x64/clang/include/clang/Tooling/FixIt.h
index c1e5088..b36f378 100644
--- a/linux-x64/clang/include/clang/Tooling/FixIt.h
+++ b/linux-x64/clang/include/clang/Tooling/FixIt.h
@@ -29,35 +29,35 @@
 namespace internal {
 StringRef getText(SourceRange Range, const ASTContext &Context);
 
-/// \brief Returns the SourceRange of a SourceRange. This identity function is
+/// Returns the SourceRange of a SourceRange. This identity function is
 ///        used by the following template abstractions.
 inline SourceRange getSourceRange(const SourceRange &Range) { return Range; }
 
-/// \brief Returns the SourceRange of the token at Location \p Loc.
+/// Returns the SourceRange of the token at Location \p Loc.
 inline SourceRange getSourceRange(const SourceLocation &Loc) {
   return SourceRange(Loc);
 }
 
-/// \brief Returns the SourceRange of an given Node. \p Node is typically a
+/// Returns the SourceRange of an given Node. \p Node is typically a
 ///        'Stmt', 'Expr' or a 'Decl'.
 template <typename T> SourceRange getSourceRange(const T &Node) {
   return Node.getSourceRange();
 }
 } // end namespace internal
 
-// \brief Returns a textual representation of \p Node.
+// Returns a textual representation of \p Node.
 template <typename T>
 StringRef getText(const T &Node, const ASTContext &Context) {
   return internal::getText(internal::getSourceRange(Node), Context);
 }
 
-// \brief Returns a FixItHint to remove \p Node.
+// Returns a FixItHint to remove \p Node.
 // TODO: Add support for related syntactical elements (i.e. comments, ...).
 template <typename T> FixItHint createRemoval(const T &Node) {
   return FixItHint::CreateRemoval(internal::getSourceRange(Node));
 }
 
-// \brief Returns a FixItHint to replace \p Destination by \p Source.
+// Returns a FixItHint to replace \p Destination by \p Source.
 template <typename D, typename S>
 FixItHint createReplacement(const D &Destination, const S &Source,
                                    const ASTContext &Context) {
@@ -65,7 +65,7 @@
                                       getText(Source, Context));
 }
 
-// \brief Returns a FixItHint to replace \p Destination by \p Source.
+// Returns a FixItHint to replace \p Destination by \p Source.
 template <typename D>
 FixItHint createReplacement(const D &Destination, StringRef Source) {
   return FixItHint::CreateReplacement(internal::getSourceRange(Destination),
diff --git a/linux-x64/clang/include/clang/Tooling/Inclusions/HeaderIncludes.h b/linux-x64/clang/include/clang/Tooling/Inclusions/HeaderIncludes.h
new file mode 100644
index 0000000..d99a328
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Inclusions/HeaderIncludes.h
@@ -0,0 +1,137 @@
+//===--- HeaderIncludes.h - Insert/Delete #includes for C++ code--*- C++-*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
+#define LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
+
+#include "clang/Basic/SourceManager.h"
+#include "clang/Tooling/Core/Replacement.h"
+#include "clang/Tooling/Inclusions/IncludeStyle.h"
+#include "llvm/Support/Path.h"
+#include "llvm/Support/Regex.h"
+#include <unordered_map>
+
+namespace clang {
+namespace tooling {
+
+/// This class manages priorities of C++ #include categories and calculates
+/// priorities for headers.
+/// FIXME(ioeric): move this class into implementation file when clang-format's
+/// include sorting functions are also moved here.
+class IncludeCategoryManager {
+public:
+  IncludeCategoryManager(const IncludeStyle &Style, StringRef FileName);
+
+  /// Returns the priority of the category which \p IncludeName belongs to.
+  /// If \p CheckMainHeader is true and \p IncludeName is a main header, returns
+  /// 0. Otherwise, returns the priority of the matching category or INT_MAX.
+  /// NOTE: this API is not thread-safe!
+  int getIncludePriority(StringRef IncludeName, bool CheckMainHeader) const;
+
+private:
+  bool isMainHeader(StringRef IncludeName) const;
+
+  const IncludeStyle Style;
+  bool IsMainFile;
+  std::string FileName;
+  // This refers to a substring in FileName.
+  StringRef FileStem;
+  // Regex is not thread-safe.
+  mutable SmallVector<llvm::Regex, 4> CategoryRegexs;
+};
+
+/// Generates replacements for inserting or deleting #include directives in a
+/// file.
+class HeaderIncludes {
+public:
+  HeaderIncludes(llvm::StringRef FileName, llvm::StringRef Code,
+                 const IncludeStyle &Style);
+
+  /// Inserts an #include directive of \p Header into the code. If \p IsAngled
+  /// is true, \p Header will be quoted with <> in the directive; otherwise, it
+  /// will be quoted with "".
+  ///
+  /// When searching for points to insert new header, this ignores #include's
+  /// after the #include block(s) in the beginning of a file to avoid inserting
+  /// headers into code sections where new #include's should not be added by
+  /// default. These code sections include:
+  ///   - raw string literals (containing #include).
+  ///   - #if blocks.
+  ///   - Special #include's among declarations (e.g. functions).
+  ///
+  /// Returns a replacement that inserts the new header into a suitable #include
+  /// block of the same category. This respects the order of the existing
+  /// #includes in the block; if the existing #includes are not already sorted,
+  /// this will simply insert the #include in front of the first #include of the
+  /// same category in the code that should be sorted after \p IncludeName. If
+  /// \p IncludeName already exists (with exactly the same spelling), this
+  /// returns None.
+  llvm::Optional<tooling::Replacement> insert(llvm::StringRef Header,
+                                              bool IsAngled) const;
+
+  /// Removes all existing #includes of \p Header quoted with <> if \p IsAngled
+  /// is true or "" if \p IsAngled is false.
+  /// This doesn't resolve the header file path; it only deletes #includes with
+  /// exactly the same spelling.
+  tooling::Replacements remove(llvm::StringRef Header, bool IsAngled) const;
+
+private:
+  struct Include {
+    Include(StringRef Name, tooling::Range R) : Name(Name), R(R) {}
+
+    // An include header quoted with either <> or "".
+    std::string Name;
+    // The range of the whole line of include directive including any eading
+    // whitespaces and trailing comment.
+    tooling::Range R;
+  };
+
+  void addExistingInclude(Include IncludeToAdd, unsigned NextLineOffset);
+
+  std::string FileName;
+  std::string Code;
+
+  // Map from include name (quotation trimmed) to a list of existing includes
+  // (in case there are more than one) with the name in the current file. <x>
+  // and "x" will be treated as the same header when deleting #includes.
+  llvm::StringMap<llvm::SmallVector<Include, 1>> ExistingIncludes;
+
+  /// Map from priorities of #include categories to all #includes in the same
+  /// category. This is used to find #includes of the same category when
+  /// inserting new #includes. #includes in the same categories are sorted in
+  /// in the order they appear in the source file.
+  /// See comment for "FormatStyle::IncludeCategories" for details about include
+  /// priorities.
+  std::unordered_map<int, llvm::SmallVector<const Include *, 8>>
+      IncludesByPriority;
+
+  int FirstIncludeOffset;
+  // All new headers should be inserted after this offset (e.g. after header
+  // guards, file comment).
+  unsigned MinInsertOffset;
+  // Max insertion offset in the original code. For example, we want to avoid
+  // inserting new #includes into the actual code section (e.g. after a
+  // declaration).
+  unsigned MaxInsertOffset;
+  IncludeCategoryManager Categories;
+  // Record the offset of the end of the last include in each category.
+  std::unordered_map<int, int> CategoryEndOffsets;
+
+  // All possible priorities.
+  std::set<int> Priorities;
+
+  // Matches a whole #include directive.
+  llvm::Regex IncludeRegex;
+};
+
+
+} // namespace tooling
+} // namespace clang
+
+#endif // LLVM_CLANG_TOOLING_INCLUSIONS_HEADERINCLUDES_H
diff --git a/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h b/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h
new file mode 100644
index 0000000..a093dff
--- /dev/null
+++ b/linux-x64/clang/include/clang/Tooling/Inclusions/IncludeStyle.h
@@ -0,0 +1,139 @@
+//===--- IncludeStyle.h - Style of C++ #include directives -------*- C++-*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
+#define LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
+
+#include "llvm/Support/YAMLTraits.h"
+#include <string>
+#include <vector>
+
+namespace clang {
+namespace tooling {
+
+/// Style for sorting and grouping C++ #include directives.
+struct IncludeStyle {
+  /// Styles for sorting multiple ``#include`` blocks.
+  enum IncludeBlocksStyle {
+    /// Sort each ``#include`` block separately.
+    /// \code
+    ///    #include "b.h"               into      #include "b.h"
+    ///
+    ///    #include <lib/main.h>                  #include "a.h"
+    ///    #include "a.h"                         #include <lib/main.h>
+    /// \endcode
+    IBS_Preserve,
+    /// Merge multiple ``#include`` blocks together and sort as one.
+    /// \code
+    ///    #include "b.h"               into      #include "a.h"
+    ///                                           #include "b.h"
+    ///    #include <lib/main.h>                  #include <lib/main.h>
+    ///    #include "a.h"
+    /// \endcode
+    IBS_Merge,
+    /// Merge multiple ``#include`` blocks together and sort as one.
+    /// Then split into groups based on category priority. See
+    /// ``IncludeCategories``.
+    /// \code
+    ///    #include "b.h"               into      #include "a.h"
+    ///                                           #include "b.h"
+    ///    #include <lib/main.h>
+    ///    #include "a.h"                         #include <lib/main.h>
+    /// \endcode
+    IBS_Regroup,
+  };
+
+  /// Dependent on the value, multiple ``#include`` blocks can be sorted
+  /// as one and divided based on category.
+  IncludeBlocksStyle IncludeBlocks;
+
+  /// See documentation of ``IncludeCategories``.
+  struct IncludeCategory {
+    /// The regular expression that this category matches.
+    std::string Regex;
+    /// The priority to assign to this category.
+    int Priority;
+    bool operator==(const IncludeCategory &Other) const {
+      return Regex == Other.Regex && Priority == Other.Priority;
+    }
+  };
+
+  /// Regular expressions denoting the different ``#include`` categories
+  /// used for ordering ``#includes``.
+  ///
+  /// `POSIX extended
+  /// <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html>`_
+  /// regular expressions are supported.
+  ///
+  /// These regular expressions are matched against the filename of an include
+  /// (including the <> or "") in order. The value belonging to the first
+  /// matching regular expression is assigned and ``#includes`` are sorted first
+  /// according to increasing category number and then alphabetically within
+  /// each category.
+  ///
+  /// If none of the regular expressions match, INT_MAX is assigned as
+  /// category. The main header for a source file automatically gets category 0.
+  /// so that it is generally kept at the beginning of the ``#includes``
+  /// (http://llvm.org/docs/CodingStandards.html#include-style). However, you
+  /// can also assign negative priorities if you have certain headers that
+  /// always need to be first.
+  ///
+  /// To configure this in the .clang-format file, use:
+  /// \code{.yaml}
+  ///   IncludeCategories:
+  ///     - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
+  ///       Priority:        2
+  ///     - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
+  ///       Priority:        3
+  ///     - Regex:           '<[[:alnum:].]+>'
+  ///       Priority:        4
+  ///     - Regex:           '.*'
+  ///       Priority:        1
+  /// \endcode
+  std::vector<IncludeCategory> IncludeCategories;
+
+  /// Specify a regular expression of suffixes that are allowed in the
+  /// file-to-main-include mapping.
+  ///
+  /// When guessing whether a #include is the "main" include (to assign
+  /// category 0, see above), use this regex of allowed suffixes to the header
+  /// stem. A partial match is done, so that:
+  /// - "" means "arbitrary suffix"
+  /// - "$" means "no suffix"
+  ///
+  /// For example, if configured to "(_test)?$", then a header a.h would be seen
+  /// as the "main" include in both a.cc and a_test.cc.
+  std::string IncludeIsMainRegex;
+};
+
+} // namespace tooling
+} // namespace clang
+
+LLVM_YAML_IS_SEQUENCE_VECTOR(clang::tooling::IncludeStyle::IncludeCategory)
+
+namespace llvm {
+namespace yaml {
+
+template <>
+struct MappingTraits<clang::tooling::IncludeStyle::IncludeCategory> {
+  static void mapping(IO &IO,
+                      clang::tooling::IncludeStyle::IncludeCategory &Category);
+};
+
+template <>
+struct ScalarEnumerationTraits<
+    clang::tooling::IncludeStyle::IncludeBlocksStyle> {
+  static void
+  enumeration(IO &IO, clang::tooling::IncludeStyle::IncludeBlocksStyle &Value);
+};
+
+} // namespace yaml
+} // namespace llvm
+
+#endif // LLVM_CLANG_TOOLING_INCLUSIONS_INCLUDESTYLE_H
diff --git a/linux-x64/clang/include/clang/Tooling/JSONCompilationDatabase.h b/linux-x64/clang/include/clang/Tooling/JSONCompilationDatabase.h
index bc4748f..882afc6 100644
--- a/linux-x64/clang/include/clang/Tooling/JSONCompilationDatabase.h
+++ b/linux-x64/clang/include/clang/Tooling/JSONCompilationDatabase.h
@@ -33,7 +33,7 @@
 namespace clang {
 namespace tooling {
 
-/// \brief A JSON based compilation database.
+/// A JSON based compilation database.
 ///
 /// JSON compilation database files must contain a list of JSON objects which
 /// provide the command lines in the attributes 'directory', 'command',
@@ -61,7 +61,7 @@
 enum class JSONCommandLineSyntax { Windows, Gnu, AutoDetect };
 class JSONCompilationDatabase : public CompilationDatabase {
 public:
-  /// \brief Loads a JSON compilation database from the specified file.
+  /// Loads a JSON compilation database from the specified file.
   ///
   /// Returns NULL and sets ErrorMessage if the database could not be
   /// loaded from the given file.
@@ -69,14 +69,14 @@
   loadFromFile(StringRef FilePath, std::string &ErrorMessage,
                JSONCommandLineSyntax Syntax);
 
-  /// \brief Loads a JSON compilation database from a data buffer.
+  /// Loads a JSON compilation database from a data buffer.
   ///
   /// Returns NULL and sets ErrorMessage if the database could not be loaded.
   static std::unique_ptr<JSONCompilationDatabase>
   loadFromBuffer(StringRef DatabaseString, std::string &ErrorMessage,
                  JSONCommandLineSyntax Syntax);
 
-  /// \brief Returns all compile commands in which the specified file was
+  /// Returns all compile commands in which the specified file was
   /// compiled.
   ///
   /// FIXME: Currently FilePath must be an absolute path inside the
@@ -84,23 +84,23 @@
   std::vector<CompileCommand>
   getCompileCommands(StringRef FilePath) const override;
 
-  /// \brief Returns the list of all files available in the compilation database.
+  /// Returns the list of all files available in the compilation database.
   ///
   /// These are the 'file' entries of the JSON objects.
   std::vector<std::string> getAllFiles() const override;
 
-  /// \brief Returns all compile commands for all the files in the compilation
+  /// Returns all compile commands for all the files in the compilation
   /// database.
   std::vector<CompileCommand> getAllCompileCommands() const override;
 
 private:
-  /// \brief Constructs a JSON compilation database on a memory buffer.
+  /// Constructs a JSON compilation database on a memory buffer.
   JSONCompilationDatabase(std::unique_ptr<llvm::MemoryBuffer> Database,
                           JSONCommandLineSyntax Syntax)
       : Database(std::move(Database)), Syntax(Syntax),
         YAMLStream(this->Database->getBuffer(), SM) {}
 
-  /// \brief Parses the database file and creates the index.
+  /// Parses the database file and creates the index.
   ///
   /// Returns whether parsing succeeded. Sets ErrorMessage if parsing
   /// failed.
@@ -118,7 +118,7 @@
                  std::vector<llvm::yaml::ScalarNode *>,
                  llvm::yaml::ScalarNode *>;
 
-  /// \brief Converts the given array of CompileCommandRefs to CompileCommands.
+  /// Converts the given array of CompileCommandRefs to CompileCommands.
   void getCommands(ArrayRef<CompileCommandRef> CommandsRef,
                    std::vector<CompileCommand> &Commands) const;
 
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring.h b/linux-x64/clang/include/clang/Tooling/Refactoring.h
index bc95c3b..64b018e 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring.h
@@ -30,7 +30,7 @@
 
 namespace tooling {
 
-/// \brief A tool to run refactorings.
+/// A tool to run refactorings.
 ///
 /// This is a refactoring specific version of \see ClangTool. FrontendActions
 /// passed to run() and runAndSave() should add replacements to
@@ -43,17 +43,17 @@
                   std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                       std::make_shared<PCHContainerOperations>());
 
-  /// \brief Returns the file path to replacements map to which replacements
+  /// Returns the file path to replacements map to which replacements
   /// should be added during the run of the tool.
   std::map<std::string, Replacements> &getReplacements();
 
-  /// \brief Call run(), apply all generated replacements, and immediately save
+  /// Call run(), apply all generated replacements, and immediately save
   /// the results to disk.
   ///
   /// \returns 0 upon success. Non-zero upon failure.
   int runAndSave(FrontendActionFactory *ActionFactory);
 
-  /// \brief Apply all stored replacements to the given Rewriter.
+  /// Apply all stored replacements to the given Rewriter.
   ///
   /// FileToReplaces will be deduplicated with `groupReplacementsByFile` before
   /// application.
@@ -65,14 +65,14 @@
   bool applyAllReplacements(Rewriter &Rewrite);
 
 private:
-  /// \brief Write all refactored files to disk.
+  /// Write all refactored files to disk.
   int saveRewrittenFiles(Rewriter &Rewrite);
 
 private:
   std::map<std::string, Replacements> FileToReplaces;
 };
 
-/// \brief Groups \p Replaces by the file path and applies each group of
+/// Groups \p Replaces by the file path and applies each group of
 /// Replacements on the related file in \p Rewriter. In addition to applying
 /// given Replacements, this function also formats the changed code.
 ///
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/AtomicChange.h b/linux-x64/clang/include/clang/Tooling/Refactoring/AtomicChange.h
index 8a468a6..bfe042f 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/AtomicChange.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/AtomicChange.h
@@ -24,7 +24,7 @@
 namespace clang {
 namespace tooling {
 
-/// \brief An atomic change is used to create and group a set of source edits,
+/// An atomic change is used to create and group a set of source edits,
 /// e.g. replacements or header insertions. Edits in an AtomicChange should be
 /// related, e.g. replacements for the same type reference and the corresponding
 /// header insertion/deletion.
@@ -36,13 +36,13 @@
 /// bad, i.e. none of its source edits will be applied.
 class AtomicChange {
 public:
-  /// \brief Creates an atomic change around \p KeyPosition with the key being a
+  /// Creates an atomic change around \p KeyPosition with the key being a
   /// concatenation of the file name and the offset of \p KeyPosition.
   /// \p KeyPosition should be the location of the key syntactical element that
   /// is being changed, e.g. the call to a refactored method.
   AtomicChange(const SourceManager &SM, SourceLocation KeyPosition);
 
-  /// \brief Creates an atomic change for \p FilePath with a customized key.
+  /// Creates an atomic change for \p FilePath with a customized key.
   AtomicChange(llvm::StringRef FilePath, llvm::StringRef Key)
       : Key(Key), FilePath(FilePath) {}
 
@@ -54,44 +54,44 @@
 
   bool operator==(const AtomicChange &Other) const;
 
-  /// \brief Returns the atomic change as a YAML string.
+  /// Returns the atomic change as a YAML string.
   std::string toYAMLString();
 
-  /// \brief Converts a YAML-encoded automic change to AtomicChange.
+  /// Converts a YAML-encoded automic change to AtomicChange.
   static AtomicChange convertFromYAML(llvm::StringRef YAMLContent);
 
-  /// \brief Returns the key of this change, which is a concatenation of the
+  /// Returns the key of this change, which is a concatenation of the
   /// file name and offset of the key position.
   const std::string &getKey() const { return Key; }
 
-  /// \brief Returns the path of the file containing this atomic change.
+  /// Returns the path of the file containing this atomic change.
   const std::string &getFilePath() const { return FilePath; }
 
-  /// \brief If this change could not be created successfully, e.g. because of
+  /// If this change could not be created successfully, e.g. because of
   /// conflicts among replacements, use this to set an error description.
   /// Thereby, places that cannot be fixed automatically can be gathered when
   /// applying changes.
   void setError(llvm::StringRef Error) { this->Error = Error; }
 
-  /// \brief Returns whether an error has been set on this list.
+  /// Returns whether an error has been set on this list.
   bool hasError() const { return !Error.empty(); }
 
-  /// \brief Returns the error message or an empty string if it does not exist.
+  /// Returns the error message or an empty string if it does not exist.
   const std::string &getError() const { return Error; }
 
-  /// \brief Adds a replacement that replaces the given Range with
+  /// Adds a replacement that replaces the given Range with
   /// ReplacementText.
   /// \returns An llvm::Error carrying ReplacementError on error.
   llvm::Error replace(const SourceManager &SM, const CharSourceRange &Range,
                       llvm::StringRef ReplacementText);
 
-  /// \brief Adds a replacement that replaces range [Loc, Loc+Length) with
+  /// Adds a replacement that replaces range [Loc, Loc+Length) with
   /// \p Text.
   /// \returns An llvm::Error carrying ReplacementError on error.
   llvm::Error replace(const SourceManager &SM, SourceLocation Loc,
                       unsigned Length, llvm::StringRef Text);
 
-  /// \brief Adds a replacement that inserts \p Text at \p Loc. If this
+  /// Adds a replacement that inserts \p Text at \p Loc. If this
   /// insertion conflicts with an existing insertion (at the same position),
   /// this will be inserted before/after the existing insertion depending on
   /// \p InsertAfter. Users should use `replace` with `Length=0` instead if they
@@ -102,15 +102,15 @@
   llvm::Error insert(const SourceManager &SM, SourceLocation Loc,
                      llvm::StringRef Text, bool InsertAfter = true);
 
-  /// \brief Adds a header into the file that contains the key position.
+  /// Adds a header into the file that contains the key position.
   /// Header can be in angle brackets or double quotation marks. By default
   /// (header is not quoted), header will be surrounded with double quotes.
   void addHeader(llvm::StringRef Header);
 
-  /// \brief Removes a header from the file that contains the key position.
+  /// Removes a header from the file that contains the key position.
   void removeHeader(llvm::StringRef Header);
 
-  /// \brief Returns a const reference to existing replacements.
+  /// Returns a const reference to existing replacements.
   const Replacements &getReplacements() const { return Replaces; }
 
   llvm::ArrayRef<std::string> getInsertedHeaders() const {
@@ -158,7 +158,7 @@
   FormatOption Format = kNone;
 };
 
-/// \brief Applies all AtomicChanges in \p Changes to the \p Code.
+/// Applies all AtomicChanges in \p Changes to the \p Code.
 ///
 /// This completely ignores the file path in each change and replaces them with
 /// \p FilePath, i.e. callers are responsible for ensuring all changes are for
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h b/linux-x64/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
index d96ad78..bd314f0 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/RecursiveSymbolVisitor.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief A wrapper class around \c RecursiveASTVisitor that visits each
+/// A wrapper class around \c RecursiveASTVisitor that visits each
 /// occurrences of a named symbol.
 ///
 //===----------------------------------------------------------------------===//
@@ -74,7 +74,7 @@
     for (unsigned I = 0, E = S->getNumComponents(); I != E; ++I) {
       const OffsetOfNode &Component = S->getComponent(I);
       if (Component.getKind() == OffsetOfNode::Field) {
-        if (!visit(Component.getField(), Component.getLocEnd()))
+        if (!visit(Component.getField(), Component.getEndLoc()))
           return false;
       }
       // FIXME: Try to resolve dependent field references.
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringActionRule.h b/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringActionRule.h
index 4130e29..ce4a91c 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringActionRule.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringActionRule.h
@@ -56,7 +56,7 @@
 class RefactoringActionRule : public RefactoringActionRuleBase {
 public:
   /// Returns true when the rule has a source selection requirement that has
-  /// to be fullfilled before refactoring can be performed.
+  /// to be fulfilled before refactoring can be performed.
   virtual bool hasSelectionRequirement() = 0;
 
   /// Traverses each refactoring option used by the rule and invokes the
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h b/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h
index fe7738e..005eb87 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/RefactoringResultConsumer.h
@@ -26,8 +26,8 @@
 public:
   virtual ~RefactoringResultConsumer() {}
 
-  /// Handles an initation or an invication error. An initiation error typically
-  /// has a \c DiagnosticError payload that describes why initation failed.
+  /// Handles an initiation or an invication error. An initiation error typically
+  /// has a \c DiagnosticError payload that describes why initiation failed.
   virtual void handleError(llvm::Error Err) = 0;
 
   /// Handles the source replacements that are produced by a refactoring action.
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
index d32ed64..5771a1c 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/RenamingAction.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provides an action to rename every symbol at a point.
+/// Provides an action to rename every symbol at a point.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -82,7 +82,7 @@
   Expected<AtomicChanges>
   createSourceReplacements(RefactoringRuleContext &Context) override;
 
-  // A NamedDecl which indentifies the symbol being renamed.
+  // A NamedDecl which identifies the symbol being renamed.
   const NamedDecl *ND;
   // The new qualified name to change the symbol to.
   std::string NewQualifiedName;
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/SymbolName.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/SymbolName.h
index e69d290..42e0a5c 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/SymbolName.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/SymbolName.h
@@ -21,7 +21,7 @@
 /// A name of a symbol.
 ///
 /// Symbol's name can be composed of multiple strings. For example, Objective-C
-/// methods can contain multiple argument lables:
+/// methods can contain multiple argument labels:
 ///
 /// \code
 /// - (void) myMethodNamePiece: (int)x anotherNamePieces:(int)y;
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFinder.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFinder.h
index b74a5d7..3622bd0 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFinder.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFinder.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Methods for determining the USR of a symbol at a location in source
+/// Methods for determining the USR of a symbol at a location in source
 /// code.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFindingAction.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFindingAction.h
index f1c5ae6..ebc9790 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFindingAction.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRFindingAction.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provides an action to find all relevant USRs at a point.
+/// Provides an action to find all relevant USRs at a point.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRLocFinder.h b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRLocFinder.h
index 801a8ad..e1228e9 100644
--- a/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRLocFinder.h
+++ b/linux-x64/clang/include/clang/Tooling/Refactoring/Rename/USRLocFinder.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provides functionality for finding all instances of a USR in a given
+/// Provides functionality for finding all instances of a USR in a given
 /// AST.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/clang/Tooling/RefactoringCallbacks.h b/linux-x64/clang/include/clang/Tooling/RefactoringCallbacks.h
index 9862951..2137e00 100644
--- a/linux-x64/clang/include/clang/Tooling/RefactoringCallbacks.h
+++ b/linux-x64/clang/include/clang/Tooling/RefactoringCallbacks.h
@@ -35,7 +35,7 @@
 namespace clang {
 namespace tooling {
 
-/// \brief Base class for RefactoringCallbacks.
+/// Base class for RefactoringCallbacks.
 ///
 /// Collects \c tooling::Replacements while running.
 class RefactoringCallback : public ast_matchers::MatchFinder::MatchCallback {
@@ -47,7 +47,7 @@
   Replacements Replace;
 };
 
-/// \brief Adaptor between \c ast_matchers::MatchFinder and \c
+/// Adaptor between \c ast_matchers::MatchFinder and \c
 /// tooling::RefactoringTool.
 ///
 /// Runs AST matchers and stores the \c tooling::Replacements in a map.
@@ -74,7 +74,7 @@
   std::map<std::string, Replacements> &FileToReplaces;
 };
 
-/// \brief Replace the text of the statement bound to \c FromId with the text in
+/// Replace the text of the statement bound to \c FromId with the text in
 /// \c ToText.
 class ReplaceStmtWithText : public RefactoringCallback {
 public:
@@ -86,7 +86,7 @@
   std::string ToText;
 };
 
-/// \brief Replace the text of an AST node bound to \c FromId with the result of
+/// Replace the text of an AST node bound to \c FromId with the result of
 /// evaluating the template in \c ToTemplate.
 ///
 /// Expressions of the form ${NodeName} in \c ToTemplate will be
@@ -109,7 +109,7 @@
   std::vector<TemplateElement> Template;
 };
 
-/// \brief Replace the text of the statement bound to \c FromId with the text of
+/// Replace the text of the statement bound to \c FromId with the text of
 /// the statement bound to \c ToId.
 class ReplaceStmtWithStmt : public RefactoringCallback {
 public:
@@ -121,7 +121,7 @@
   std::string ToId;
 };
 
-/// \brief Replace an if-statement bound to \c Id with the outdented text of its
+/// Replace an if-statement bound to \c Id with the outdented text of its
 /// body, choosing the consequent or the alternative based on whether
 /// \c PickTrueBranch is true.
 class ReplaceIfStmtWithItsBody : public RefactoringCallback {
diff --git a/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h b/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
index 0b1dc4c..8e41525 100644
--- a/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
+++ b/linux-x64/clang/include/clang/Tooling/ReplacementsYaml.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines the structure of a YAML document for serializing
+/// This file defines the structure of a YAML document for serializing
 /// replacements.
 ///
 //===----------------------------------------------------------------------===//
@@ -25,10 +25,10 @@
 namespace llvm {
 namespace yaml {
 
-/// \brief Specialized MappingTraits to describe how a Replacement is
+/// Specialized MappingTraits to describe how a Replacement is
 /// (de)serialized.
 template <> struct MappingTraits<clang::tooling::Replacement> {
-  /// \brief Helper to (de)serialize a Replacement since we don't have direct
+  /// Helper to (de)serialize a Replacement since we don't have direct
   /// access to its data members.
   struct NormalizedReplacement {
     NormalizedReplacement(const IO &)
@@ -59,7 +59,7 @@
   }
 };
 
-/// \brief Specialized MappingTraits to describe how a
+/// Specialized MappingTraits to describe how a
 /// TranslationUnitReplacements is (de)serialized.
 template <> struct MappingTraits<clang::tooling::TranslationUnitReplacements> {
   static void mapping(IO &Io,
diff --git a/linux-x64/clang/include/clang/Tooling/StandaloneExecution.h b/linux-x64/clang/include/clang/Tooling/StandaloneExecution.h
index f5f32d7..572330e 100644
--- a/linux-x64/clang/include/clang/Tooling/StandaloneExecution.h
+++ b/linux-x64/clang/include/clang/Tooling/StandaloneExecution.h
@@ -20,7 +20,7 @@
 namespace clang {
 namespace tooling {
 
-/// \brief A standalone executor that runs FrontendActions on a given set of
+/// A standalone executor that runs FrontendActions on a given set of
 /// TUs in sequence.
 ///
 /// By default, this executor uses the following arguments adjusters (as defined
@@ -32,15 +32,16 @@
 public:
   static const char *ExecutorName;
 
-  /// \brief Init with \p CompilationDatabase and the paths of all files to be
+  /// Init with \p CompilationDatabase and the paths of all files to be
   /// proccessed.
   StandaloneToolExecutor(
       const CompilationDatabase &Compilations,
       llvm::ArrayRef<std::string> SourcePaths,
+      IntrusiveRefCntPtr<vfs::FileSystem> BaseFS = vfs::getRealFileSystem(),
       std::shared_ptr<PCHContainerOperations> PCHContainerOps =
           std::make_shared<PCHContainerOperations>());
 
-  /// \brief Init with \p CommonOptionsParser. This is expected to be used by
+  /// Init with \p CommonOptionsParser. This is expected to be used by
   /// `createExecutorFromCommandLineArgs` based on commandline options.
   ///
   /// The executor takes ownership of \p Options.
@@ -58,7 +59,7 @@
           std::pair<std::unique_ptr<FrontendActionFactory>, ArgumentsAdjuster>>
               Actions) override;
 
-  /// \brief Set a \c DiagnosticConsumer to use during parsing.
+  /// Set a \c DiagnosticConsumer to use during parsing.
   void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) {
     Tool.setDiagnosticConsumer(DiagConsumer);
   }
@@ -75,7 +76,7 @@
     Tool.mapVirtualFile(FilePath, Content);
   }
 
-  /// \brief Returns the file manager used in the tool.
+  /// Returns the file manager used in the tool.
   ///
   /// The file manager is shared between all translation units.
   FileManager &getFiles() { return Tool.getFiles(); }
diff --git a/linux-x64/clang/include/clang/Tooling/Tooling.h b/linux-x64/clang/include/clang/Tooling/Tooling.h
index 24b4a2e..c056894 100644
--- a/linux-x64/clang/include/clang/Tooling/Tooling.h
+++ b/linux-x64/clang/include/clang/Tooling/Tooling.h
@@ -67,7 +67,7 @@
 
 class CompilationDatabase;
 
-/// \brief Interface to process a clang::CompilerInvocation.
+/// Interface to process a clang::CompilerInvocation.
 ///
 /// If your tool is based on FrontendAction, you should be deriving from
 /// FrontendActionFactory instead.
@@ -75,7 +75,7 @@
 public:
   virtual ~ToolAction();
 
-  /// \brief Perform an action for an invocation.
+  /// Perform an action for an invocation.
   virtual bool
   runInvocation(std::shared_ptr<CompilerInvocation> Invocation,
                 FileManager *Files,
@@ -83,7 +83,7 @@
                 DiagnosticConsumer *DiagConsumer) = 0;
 };
 
-/// \brief Interface to generate clang::FrontendActions.
+/// Interface to generate clang::FrontendActions.
 ///
 /// Having a factory interface allows, for example, a new FrontendAction to be
 /// created for each translation unit processed by ClangTool.  This class is
@@ -93,19 +93,19 @@
 public:
   ~FrontendActionFactory() override;
 
-  /// \brief Invokes the compiler with a FrontendAction created by create().
+  /// Invokes the compiler with a FrontendAction created by create().
   bool runInvocation(std::shared_ptr<CompilerInvocation> Invocation,
                      FileManager *Files,
                      std::shared_ptr<PCHContainerOperations> PCHContainerOps,
                      DiagnosticConsumer *DiagConsumer) override;
 
-  /// \brief Returns a new clang::FrontendAction.
+  /// Returns a new clang::FrontendAction.
   ///
   /// The caller takes ownership of the returned action.
   virtual FrontendAction *create() = 0;
 };
 
-/// \brief Returns a new FrontendActionFactory for a given type.
+/// Returns a new FrontendActionFactory for a given type.
 ///
 /// T must derive from clang::FrontendAction.
 ///
@@ -115,25 +115,25 @@
 template <typename T>
 std::unique_ptr<FrontendActionFactory> newFrontendActionFactory();
 
-/// \brief Callbacks called before and after each source file processed by a
+/// Callbacks called before and after each source file processed by a
 /// FrontendAction created by the FrontedActionFactory returned by \c
 /// newFrontendActionFactory.
 class SourceFileCallbacks {
 public:
   virtual ~SourceFileCallbacks() = default;
 
-  /// \brief Called before a source file is processed by a FrontEndAction.
+  /// Called before a source file is processed by a FrontEndAction.
   /// \see clang::FrontendAction::BeginSourceFileAction
   virtual bool handleBeginSource(CompilerInstance &CI) {
     return true;
   }
 
-  /// \brief Called after a source file is processed by a FrontendAction.
+  /// Called after a source file is processed by a FrontendAction.
   /// \see clang::FrontendAction::EndSourceFileAction
   virtual void handleEndSource() {}
 };
 
-/// \brief Returns a new FrontendActionFactory for any type that provides an
+/// Returns a new FrontendActionFactory for any type that provides an
 /// implementation of newASTConsumer().
 ///
 /// FactoryT must implement: ASTConsumer *newASTConsumer().
@@ -148,7 +148,7 @@
 inline std::unique_ptr<FrontendActionFactory> newFrontendActionFactory(
     FactoryT *ConsumerFactory, SourceFileCallbacks *Callbacks = nullptr);
 
-/// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag.
+/// Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag.
 ///
 /// \param ToolAction The action to run over the code.
 /// \param Code C++ code.
@@ -166,7 +166,7 @@
 /// file-content.
 using FileContentMappings = std::vector<std::pair<std::string, std::string>>;
 
-/// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag and
+/// Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag and
 ///        with additional other flags.
 ///
 /// \param ToolAction The action to run over the code.
@@ -187,7 +187,16 @@
         std::make_shared<PCHContainerOperations>(),
     const FileContentMappings &VirtualMappedFiles = FileContentMappings());
 
-/// \brief Builds an AST for 'Code'.
+// Similar to the overload except this takes a VFS.
+bool runToolOnCodeWithArgs(
+    FrontendAction *ToolAction, const Twine &Code,
+    llvm::IntrusiveRefCntPtr<vfs::FileSystem> VFS,
+    const std::vector<std::string> &Args, const Twine &FileName = "input.cc",
+    const Twine &ToolName = "clang-tool",
+    std::shared_ptr<PCHContainerOperations> PCHContainerOps =
+        std::make_shared<PCHContainerOperations>());
+
+/// Builds an AST for 'Code'.
 ///
 /// \param Code C++ code.
 /// \param FileName The file name which 'Code' will be mapped as.
@@ -200,7 +209,7 @@
                  std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                      std::make_shared<PCHContainerOperations>());
 
-/// \brief Builds an AST for 'Code' with additional flags.
+/// Builds an AST for 'Code' with additional flags.
 ///
 /// \param Code C++ code.
 /// \param Args Additional flags to pass on.
@@ -220,10 +229,10 @@
       std::make_shared<PCHContainerOperations>(),
     ArgumentsAdjuster Adjuster = getClangStripDependencyFileAdjuster());
 
-/// \brief Utility to run a FrontendAction in a single clang invocation.
+/// Utility to run a FrontendAction in a single clang invocation.
 class ToolInvocation {
 public:
-  /// \brief Create a tool invocation.
+  /// Create a tool invocation.
   ///
   /// \param CommandLine The command line arguments to clang. Note that clang
   /// uses its binary name (CommandLine[0]) to locate its builtin headers.
@@ -239,7 +248,7 @@
                  std::shared_ptr<PCHContainerOperations> PCHContainerOps =
                      std::make_shared<PCHContainerOperations>());
 
-  /// \brief Create a tool invocation.
+  /// Create a tool invocation.
   ///
   /// \param CommandLine The command line arguments to clang.
   /// \param Action The action to be executed.
@@ -252,19 +261,19 @@
 
   ~ToolInvocation();
 
-  /// \brief Set a \c DiagnosticConsumer to use during parsing.
+  /// Set a \c DiagnosticConsumer to use during parsing.
   void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) {
     this->DiagConsumer = DiagConsumer;
   }
 
-  /// \brief Map a virtual file to be used while running the tool.
+  /// Map a virtual file to be used while running the tool.
   ///
   /// \param FilePath The path at which the content will be mapped.
   /// \param Content A null terminated buffer of the file's content.
   // FIXME: remove this when all users have migrated!
   void mapVirtualFile(StringRef FilePath, StringRef Content);
 
-  /// \brief Run the clang invocation.
+  /// Run the clang invocation.
   ///
   /// \returns True if there were no errors during execution.
   bool run();
@@ -287,7 +296,7 @@
   DiagnosticConsumer *DiagConsumer = nullptr;
 };
 
-/// \brief Utility to run a FrontendAction over a set of files.
+/// Utility to run a FrontendAction over a set of files.
 ///
 /// This class is written to be usable for command line utilities.
 /// By default the class uses ClangSyntaxOnlyAdjuster to modify
@@ -296,7 +305,7 @@
 /// arguments adjuster by calling the appendArgumentsAdjuster() method.
 class ClangTool {
 public:
-  /// \brief Constructs a clang tool to run over a list of files.
+  /// Constructs a clang tool to run over a list of files.
   ///
   /// \param Compilations The CompilationDatabase which contains the compile
   ///        command lines for the given source paths.
@@ -315,39 +324,39 @@
 
   ~ClangTool();
 
-  /// \brief Set a \c DiagnosticConsumer to use during parsing.
+  /// Set a \c DiagnosticConsumer to use during parsing.
   void setDiagnosticConsumer(DiagnosticConsumer *DiagConsumer) {
     this->DiagConsumer = DiagConsumer;
   }
 
-  /// \brief Map a virtual file to be used while running the tool.
+  /// Map a virtual file to be used while running the tool.
   ///
   /// \param FilePath The path at which the content will be mapped.
   /// \param Content A null terminated buffer of the file's content.
   void mapVirtualFile(StringRef FilePath, StringRef Content);
 
-  /// \brief Append a command line arguments adjuster to the adjuster chain.
+  /// Append a command line arguments adjuster to the adjuster chain.
   ///
   /// \param Adjuster An argument adjuster, which will be run on the output of
   ///        previous argument adjusters.
   void appendArgumentsAdjuster(ArgumentsAdjuster Adjuster);
 
-  /// \brief Clear the command line arguments adjuster chain.
+  /// Clear the command line arguments adjuster chain.
   void clearArgumentsAdjusters();
 
   /// Runs an action over all files specified in the command line.
   ///
   /// \param Action Tool action.
   ///
-  /// \returns 0 on success; 1 if any error occured; 2 if there is no error but
+  /// \returns 0 on success; 1 if any error occurred; 2 if there is no error but
   /// some files are skipped due to missing compile commands.
   int run(ToolAction *Action);
 
-  /// \brief Create an AST for each file specified in the command line and
+  /// Create an AST for each file specified in the command line and
   /// append them to ASTs.
   int buildASTs(std::vector<std::unique_ptr<ASTUnit>> &ASTs);
 
-  /// \brief Returns the file manager used in the tool.
+  /// Returns the file manager used in the tool.
   ///
   /// The file manager is shared between all translation units.
   FileManager &getFiles() { return *Files; }
@@ -436,7 +445,7 @@
       new FrontendActionFactoryAdapter(ConsumerFactory, Callbacks));
 }
 
-/// \brief Returns the absolute path of \c File, by prepending it with
+/// Returns the absolute path of \c File, by prepending it with
 /// the current directory if \c File is not absolute.
 ///
 /// Otherwise returns \c File.
@@ -450,7 +459,7 @@
 /// \param File Either an absolute or relative path.
 std::string getAbsolutePath(StringRef File);
 
-/// \brief Changes CommandLine to contain implicit flags that would have been
+/// Changes CommandLine to contain implicit flags that would have been
 /// defined had the compiler driver been invoked through the path InvokedAs.
 ///
 /// For example, when called with \c InvokedAs set to `i686-linux-android-g++`,
@@ -473,7 +482,7 @@
 void addTargetAndModeForProgramName(std::vector<std::string> &CommandLine,
                                     StringRef InvokedAs);
 
-/// \brief Creates a \c CompilerInvocation.
+/// Creates a \c CompilerInvocation.
 CompilerInvocation *newInvocation(DiagnosticsEngine *Diagnostics,
                                   const llvm::opt::ArgStringList &CC1Args);
 
diff --git a/linux-x64/clang/include/lld/Common/Driver.h b/linux-x64/clang/include/lld/Common/Driver.h
index 15ec3cd..f6d9293 100644
--- a/linux-x64/clang/include/lld/Common/Driver.h
+++ b/linux-x64/clang/include/lld/Common/Driver.h
@@ -30,7 +30,7 @@
 }
 
 namespace mach_o {
-bool link(llvm::ArrayRef<const char *> Args,
+bool link(llvm::ArrayRef<const char *> Args, bool CanExitEarly,
           llvm::raw_ostream &Diag = llvm::errs());
 }
 
diff --git a/linux-x64/clang/include/lld/Common/ErrorHandler.h b/linux-x64/clang/include/lld/Common/ErrorHandler.h
index 8ae6f46..f17f7cc 100644
--- a/linux-x64/clang/include/lld/Common/ErrorHandler.h
+++ b/linux-x64/clang/include/lld/Common/ErrorHandler.h
@@ -7,21 +7,62 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// In LLD, we have three levels of errors: fatal, error or warn.
+// We designed lld's error handlers with the following goals in mind:
 //
-// Fatal makes the program exit immediately with an error message.
-// You shouldn't use it except for reporting a corrupted input file.
+//  - Errors can occur at any place where we handle user input, but we don't
+//    want them to affect the normal execution path too much. Ideally,
+//    handling errors should be as simple as reporting them and exit (but
+//    without actually doing exit).
 //
-// Error prints out an error message and increment a global variable
-// ErrorCount to record the fact that we met an error condition. It does
-// not exit, so it is safe for a lld-as-a-library use case. It is generally
-// useful because it can report more than one error in a single run.
+//    In particular, the design to wrap all functions that could fail with
+//    ErrorOr<T> is rejected because otherwise we would have to wrap a large
+//    number of functions in lld with ErrorOr. With that approach, if some
+//    function F can fail, not only F but all functions that transitively call
+//    F have to be wrapped with ErrorOr. That seemed too much.
 //
-// Warn doesn't do anything but printing out a given message.
+//  - Finding only one error at a time is not sufficient. We want to find as
+//    many errors as possible with one execution of the linker. That means the
+//    linker needs to keep running after a first error and give up at some
+//    checkpoint (beyond which it would find cascading, false errors caused by
+//    the previous errors).
 //
-// It is not recommended to use llvm::outs() or llvm::errs() directly
-// in LLD because they are not thread-safe. The functions declared in
-// this file are mutually excluded, so you want to use them instead.
+//  - We want a simple interface to report errors. Unlike Clang, the data we
+//    handle is compiled binary, so we don't need an error reporting mechanism
+//    that's as sophisticated as the one that Clang has.
+//
+// The current lld's error handling mechanism is simple:
+//
+//  - When you find an error, report it using error() and continue as far as
+//    you can. An internal error counter is incremented by one every time you
+//    call error().
+//
+//    A common idiom to handle an error is calling error() and then returning
+//    a reasonable default value. For example, if your function handles a
+//    user-supplied alignment value, and if you find an invalid alignment
+//    (e.g. 17 which is not 2^n), you may report it using error() and continue
+//    as if it were alignment 1 (which is the simplest reasonable value).
+//
+//    Note that you should not continue with an invalid value; that breaks the
+//    internal consistency. You need to maintain all variables have some sane
+//    value even after an error occurred. So, when you have to continue with
+//    some value, always use a dummy value.
+//
+//  - Find a reasonable checkpoint at where you want to stop the linker, and
+//    add code to return from the function if errorCount() > 0. In most cases,
+//    a checkpoint already exists, so you don't need to do anything for this.
+//
+// This interface satisfies all the goals that we mentioned above.
+//
+// You should never call fatal() except for reporting a corrupted input file.
+// fatal() immediately terminates the linker, so the function is not desirable
+// if you are using lld as a subroutine in other program, and with that you
+// can find only one error at a time.
+//
+// warn() doesn't do anything but printing out a given message.
+//
+// It is not recommended to use llvm::outs() or llvm::errs() directly in lld
+// because they are not thread-safe. The functions declared in this file are
+// thread-safe.
 //
 //===----------------------------------------------------------------------===//
 
@@ -34,6 +75,10 @@
 #include "llvm/Support/Error.h"
 #include "llvm/Support/FileOutputBuffer.h"
 
+namespace llvm {
+class DiagnosticInfo;
+}
+
 namespace lld {
 
 class ErrorHandler {
@@ -74,6 +119,9 @@
 
 LLVM_ATTRIBUTE_NORETURN void exitLld(int Val);
 
+void diagnosticHandler(const llvm::DiagnosticInfo &DI);
+void checkError(Error E);
+
 // check functions are convenient functions to strip errors
 // from error-or-value objects.
 template <class T> T check(ErrorOr<T> E) {
diff --git a/linux-x64/clang/include/lld/Common/Strings.h b/linux-x64/clang/include/lld/Common/Strings.h
index 3be5eb9..e17b257 100644
--- a/linux-x64/clang/include/lld/Common/Strings.h
+++ b/linux-x64/clang/include/lld/Common/Strings.h
@@ -26,35 +26,8 @@
 std::vector<uint8_t> parseHex(llvm::StringRef S);
 bool isValidCIdentifier(llvm::StringRef S);
 
-// This is a lazy version of StringRef. String size is computed lazily
-// when it is needed. It is more efficient than StringRef to instantiate
-// if you have a string whose size is unknown.
-//
-// COFF and ELF string tables contain a lot of null-terminated strings.
-// Most of them are not necessary for the linker because they are names
-// of local symbols and the linker doesn't use local symbol names for
-// name resolution. So, we use this class to represents strings read
-// from string tables.
-class StringRefZ {
-public:
-  StringRefZ() : Start(nullptr), Size(0) {}
-  StringRefZ(const char *S, size_t Size) : Start(S), Size(Size) {}
-
-  /*implicit*/ StringRefZ(const char *S) : Start(S), Size(-1) {}
-
-  /*implicit*/ StringRefZ(llvm::StringRef S)
-      : Start(S.data()), Size(S.size()) {}
-
-  operator llvm::StringRef() const {
-    if (Size == (size_t)-1)
-      Size = strlen(Start);
-    return {Start, Size};
-  }
-
-private:
-  const char *Start;
-  mutable size_t Size;
-};
+// Write the contents of the a buffer to a file
+void saveBuffer(llvm::StringRef Buffer, const llvm::Twine &Path);
 
 // This class represents multiple glob patterns.
 class StringMatcher {
@@ -71,6 +44,6 @@
 inline llvm::ArrayRef<uint8_t> toArrayRef(llvm::StringRef S) {
   return {reinterpret_cast<const uint8_t *>(S.data()), S.size()};
 }
-}
+} // namespace lld
 
 #endif
diff --git a/linux-x64/clang/include/lld/Common/Version.h b/linux-x64/clang/include/lld/Common/Version.h
index 93de77d..23a10ed 100644
--- a/linux-x64/clang/include/lld/Common/Version.h
+++ b/linux-x64/clang/include/lld/Common/Version.h
@@ -18,7 +18,7 @@
 #include "llvm/ADT/StringRef.h"
 
 namespace lld {
-/// \brief Retrieves a string representing the complete lld version.
+/// Retrieves a string representing the complete lld version.
 std::string getLLDVersion();
 }
 
diff --git a/linux-x64/clang/include/lld/Core/DefinedAtom.h b/linux-x64/clang/include/lld/Core/DefinedAtom.h
index 6229d67..ba10b45 100644
--- a/linux-x64/clang/include/lld/Core/DefinedAtom.h
+++ b/linux-x64/clang/include/lld/Core/DefinedAtom.h
@@ -18,7 +18,7 @@
 namespace lld {
 class File;
 
-/// \brief The fundamental unit of linking.
+/// The fundamental unit of linking.
 ///
 /// A C function or global variable is an atom.  An atom has content and
 /// attributes. The content of a function atom is the instructions that
@@ -179,10 +179,10 @@
   };
 
   enum DynamicExport {
-    /// \brief The linker may or may not export this atom dynamically depending
+    /// The linker may or may not export this atom dynamically depending
     ///   on the output type and other context of the link.
     dynamicExportNormal,
-    /// \brief The linker will always export this atom dynamically.
+    /// The linker will always export this atom dynamically.
     dynamicExportAlways,
   };
 
@@ -212,26 +212,26 @@
     }
   };
 
-  /// \brief returns a value for the order of this Atom within its file.
+  /// returns a value for the order of this Atom within its file.
   ///
   /// This is used by the linker to order the layout of Atoms so that the
   /// resulting image is stable and reproducible.
   virtual uint64_t ordinal() const = 0;
 
-  /// \brief the number of bytes of space this atom's content will occupy in the
+  /// the number of bytes of space this atom's content will occupy in the
   /// final linked image.
   ///
   /// For a function atom, it is the number of bytes of code in the function.
   virtual uint64_t size() const = 0;
 
-  /// \brief The size of the section from which the atom is instantiated.
+  /// The size of the section from which the atom is instantiated.
   ///
   /// Merge::mergeByLargestSection is defined in terms of section size
   /// and not in terms of atom size, so we need this function separate
   /// from size().
   virtual uint64_t sectionSize() const { return 0; }
 
-  /// \brief The visibility of this atom to other atoms.
+  /// The visibility of this atom to other atoms.
   ///
   /// C static functions have scope scopeTranslationUnit.  Regular C functions
   /// have scope scopeGlobal.  Functions compiled with visibility=hidden have
@@ -239,48 +239,48 @@
   /// not by the OS loader.
   virtual Scope scope() const = 0;
 
-  /// \brief Whether the linker should use direct or indirect access to this
+  /// Whether the linker should use direct or indirect access to this
   /// atom.
   virtual Interposable interposable() const = 0;
 
-  /// \brief how the linker should handle if multiple atoms have the same name.
+  /// how the linker should handle if multiple atoms have the same name.
   virtual Merge merge() const = 0;
 
-  /// \brief The type of this atom, such as code or data.
+  /// The type of this atom, such as code or data.
   virtual ContentType contentType() const = 0;
 
-  /// \brief The alignment constraints on how this atom must be laid out in the
+  /// The alignment constraints on how this atom must be laid out in the
   /// final linked image (e.g. 16-byte aligned).
   virtual Alignment alignment() const = 0;
 
-  /// \brief Whether this atom must be in a specially named section in the final
+  /// Whether this atom must be in a specially named section in the final
   /// linked image, or if the linker can infer the section based on the
   /// contentType().
   virtual SectionChoice sectionChoice() const = 0;
 
-  /// \brief If sectionChoice() != sectionBasedOnContent, then this return the
+  /// If sectionChoice() != sectionBasedOnContent, then this return the
   /// name of the section the atom should be placed into.
   virtual StringRef customSectionName() const = 0;
 
-  /// \brief constraints on whether the linker may dead strip away this atom.
+  /// constraints on whether the linker may dead strip away this atom.
   virtual DeadStripKind deadStrip() const = 0;
 
-  /// \brief Under which conditions should this atom be dynamically exported.
+  /// Under which conditions should this atom be dynamically exported.
   virtual DynamicExport dynamicExport() const {
     return dynamicExportNormal;
   }
 
-  /// \brief Code model used by the atom.
+  /// Code model used by the atom.
   virtual CodeModel codeModel() const { return codeNA; }
 
-  /// \brief Returns the OS memory protections required for this atom's content
+  /// Returns the OS memory protections required for this atom's content
   /// at runtime.
   ///
   /// A function atom is R_X, a global variable is RW_, and a read-only constant
   /// is R__.
   virtual ContentPermissions permissions() const;
 
-  /// \brief returns a reference to the raw (unrelocated) bytes of this Atom's
+  /// returns a reference to the raw (unrelocated) bytes of this Atom's
   /// content.
   virtual ArrayRef<uint8_t> rawContent() const = 0;
 
@@ -317,10 +317,10 @@
     const void *_it;
   };
 
-  /// \brief Returns an iterator to the beginning of this Atom's References.
+  /// Returns an iterator to the beginning of this Atom's References.
   virtual reference_iterator begin() const = 0;
 
-  /// \brief Returns an iterator to the end of this Atom's References.
+  /// Returns an iterator to the end of this Atom's References.
   virtual reference_iterator end() const = 0;
 
   /// Adds a reference to this atom.
@@ -361,11 +361,11 @@
 
   ~DefinedAtom() override = default;
 
-  /// \brief Returns a pointer to the Reference object that the abstract
+  /// Returns a pointer to the Reference object that the abstract
   /// iterator "points" to.
   virtual const Reference *derefIterator(const void *iter) const = 0;
 
-  /// \brief Adjusts the abstract iterator to "point" to the next Reference
+  /// Adjusts the abstract iterator to "point" to the next Reference
   /// object for this Atom.
   virtual void incrementIterator(const void *&iter) const = 0;
 };
diff --git a/linux-x64/clang/include/lld/Core/File.h b/linux-x64/clang/include/lld/Core/File.h
index 2041868..54f5335 100644
--- a/linux-x64/clang/include/lld/Core/File.h
+++ b/linux-x64/clang/include/lld/Core/File.h
@@ -43,7 +43,7 @@
 public:
   virtual ~File();
 
-  /// \brief Kinds of files that are supported.
+  /// Kinds of files that are supported.
   enum Kind {
     kindErrorObject,          ///< a error object file (.o)
     kindNormalizedObject,     ///< a normalized file (.o)
@@ -59,7 +59,7 @@
     kindArchiveLibrary        ///< archive (.a)
   };
 
-  /// \brief Returns file kind.  Need for dyn_cast<> on File objects.
+  /// Returns file kind.  Need for dyn_cast<> on File objects.
   Kind kind() const {
     return _kind;
   }
@@ -114,10 +114,8 @@
     AtomRange(AtomVector<T> &v) : _v(v) {}
     AtomRange(const AtomVector<T> &v) : _v(const_cast<AtomVector<T> &>(v)) {}
 
-    typedef std::pointer_to_unary_function<const OwningAtomPtr<T>&,
-                                           const T*> ConstDerefFn;
-
-    typedef std::pointer_to_unary_function<OwningAtomPtr<T>&, T*> DerefFn;
+    using ConstDerefFn = const T* (*)(const OwningAtomPtr<T>&);
+    using DerefFn = T* (*)(OwningAtomPtr<T>&);
 
     typedef llvm::mapped_iterator<typename AtomVector<T>::const_iterator,
                                   ConstDerefFn> ConstItTy;
@@ -174,19 +172,19 @@
     AtomVector<T> &_v;
   };
 
-  /// \brief Must be implemented to return the AtomVector object for
+  /// Must be implemented to return the AtomVector object for
   /// all DefinedAtoms in this File.
   virtual const AtomRange<DefinedAtom> defined() const = 0;
 
-  /// \brief Must be implemented to return the AtomVector object for
+  /// Must be implemented to return the AtomVector object for
   /// all UndefinedAtomw in this File.
   virtual const AtomRange<UndefinedAtom> undefined() const = 0;
 
-  /// \brief Must be implemented to return the AtomVector object for
+  /// Must be implemented to return the AtomVector object for
   /// all SharedLibraryAtoms in this File.
   virtual const AtomRange<SharedLibraryAtom> sharedLibrary() const = 0;
 
-  /// \brief Must be implemented to return the AtomVector object for
+  /// Must be implemented to return the AtomVector object for
   /// all AbsoluteAtoms in this File.
   virtual const AtomRange<AbsoluteAtom> absolute() const = 0;
 
@@ -196,7 +194,7 @@
   /// of a different file.  We need to destruct all atoms before any files.
   virtual void clearAtoms() = 0;
 
-  /// \brief If a file is parsed using a different method than doParse(),
+  /// If a file is parsed using a different method than doParse(),
   /// one must use this method to set the last error status, so that
   /// doParse will not be called twice. Only YAML reader uses this
   /// (because YAML reader does not read blobs but structured data).
@@ -214,12 +212,12 @@
   }
 
 protected:
-  /// \brief only subclasses of File can be instantiated
+  /// only subclasses of File can be instantiated
   File(StringRef p, Kind kind)
     : _path(p), _kind(kind), _ordinal(UINT64_MAX),
       _nextAtomOrdinal(0) {}
 
-  /// \brief Subclasses should override this method to parse the
+  /// Subclasses should override this method to parse the
   /// memory buffer passed to this file's constructor.
   virtual std::error_code doParse() { return std::error_code(); }
 
diff --git a/linux-x64/clang/include/lld/Core/Instrumentation.h b/linux-x64/clang/include/lld/Core/Instrumentation.h
index 1623759..939d645 100644
--- a/linux-x64/clang/include/lld/Core/Instrumentation.h
+++ b/linux-x64/clang/include/lld/Core/Instrumentation.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provide an Instrumentation API that optionally uses VTune interfaces.
+/// Provide an Instrumentation API that optionally uses VTune interfaces.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -24,7 +24,7 @@
 
 namespace lld {
 #ifdef LLD_HAS_VTUNE
-/// \brief A unique global scope for instrumentation data.
+/// A unique global scope for instrumentation data.
 ///
 /// Domains last for the lifetime of the application and cannot be destroyed.
 /// Multiple Domains created with the same name represent the same domain.
@@ -38,7 +38,7 @@
   __itt_domain *operator->() const { return _domain; }
 };
 
-/// \brief A global reference to a string constant.
+/// A global reference to a string constant.
 ///
 /// These are uniqued by the ITT runtime and cannot be deleted. They are not
 /// specific to a domain.
@@ -54,7 +54,7 @@
   operator __itt_string_handle *() const { return _handle; }
 };
 
-/// \brief A task on a single thread. Nests within other tasks.
+/// A task on a single thread. Nests within other tasks.
 ///
 /// Each thread has its own task stack and tasks nest recursively on that stack.
 /// A task cannot transfer threads.
@@ -68,7 +68,7 @@
   ScopedTask &operator=(const ScopedTask &) = delete;
 
 public:
-  /// \brief Create a task in Domain \p d named \p s.
+  /// Create a task in Domain \p d named \p s.
   ScopedTask(const Domain &d, const StringHandle &s) : _domain(d) {
     __itt_task_begin(d, __itt_null, __itt_null, s);
   }
@@ -83,7 +83,7 @@
     return *this;
   }
 
-  /// \brief Prematurely end this task.
+  /// Prematurely end this task.
   void end() {
     if (_domain)
       __itt_task_end(_domain);
@@ -93,7 +93,7 @@
   ~ScopedTask() { end(); }
 };
 
-/// \brief A specific point in time. Allows metadata to be associated.
+/// A specific point in time. Allows metadata to be associated.
 class Marker {
 public:
   Marker(const Domain &d, const StringHandle &s) {
diff --git a/linux-x64/clang/include/lld/Core/LinkingContext.h b/linux-x64/clang/include/lld/Core/LinkingContext.h
index eb9510c..52ab1a2 100644
--- a/linux-x64/clang/include/lld/Core/LinkingContext.h
+++ b/linux-x64/clang/include/lld/Core/LinkingContext.h
@@ -16,7 +16,6 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Error.h"
-#include "llvm/Support/raw_ostream.h"
 #include <cassert>
 #include <cstdint>
 #include <memory>
@@ -31,7 +30,7 @@
 class Node;
 class SharedLibraryFile;
 
-/// \brief The LinkingContext class encapsulates "what and how" to link.
+/// The LinkingContext class encapsulates "what and how" to link.
 ///
 /// The base class LinkingContext contains the options needed by core linking.
 /// Subclasses of LinkingContext have additional options needed by specific
@@ -167,10 +166,10 @@
   /// After all set* methods are called, the Driver calls this method
   /// to validate that there are no missing options or invalid combinations
   /// of options.  If there is a problem, a description of the problem
-  /// is written to the supplied stream.
+  /// is written to the global error handler.
   ///
   /// \returns true if there is an error with the current settings.
-  bool validate(raw_ostream &diagnostics);
+  bool validate();
 
   /// Formats symbol name for use in error messages.
   virtual std::string demangle(StringRef symbolName) const = 0;
@@ -250,7 +249,7 @@
 
 private:
   /// Validate the subclass bits. Only called by validate.
-  virtual bool validateImpl(raw_ostream &diagnostics) = 0;
+  virtual bool validateImpl() = 0;
 };
 
 } // end namespace lld
diff --git a/linux-x64/clang/include/lld/Core/PassManager.h b/linux-x64/clang/include/lld/Core/PassManager.h
index 2ea65ae..f2ef10f 100644
--- a/linux-x64/clang/include/lld/Core/PassManager.h
+++ b/linux-x64/clang/include/lld/Core/PassManager.h
@@ -20,7 +20,7 @@
 class SimpleFile;
 class Pass;
 
-/// \brief Owns and runs a collection of passes.
+/// Owns and runs a collection of passes.
 ///
 /// This class is currently just a container for passes and a way to run them.
 ///
@@ -40,7 +40,7 @@
   }
 
 private:
-  /// \brief Passes in the order they should run.
+  /// Passes in the order they should run.
   std::vector<std::unique_ptr<Pass>> _passes;
 };
 } // end namespace lld
diff --git a/linux-x64/clang/include/lld/Core/Reader.h b/linux-x64/clang/include/lld/Core/Reader.h
index c7baf86..6cf6282 100644
--- a/linux-x64/clang/include/lld/Core/Reader.h
+++ b/linux-x64/clang/include/lld/Core/Reader.h
@@ -32,7 +32,7 @@
 class LinkingContext;
 class MachOLinkingContext;
 
-/// \brief An abstract class for reading object files, library files, and
+/// An abstract class for reading object files, library files, and
 /// executable files.
 ///
 /// Each file format (e.g. mach-o, etc) has a concrete subclass of Reader.
@@ -46,14 +46,14 @@
   /// 2) the whole file content buffer if the above is not enough.
   virtual bool canParse(llvm::file_magic magic, MemoryBufferRef mb) const = 0;
 
-  /// \brief Parse a supplied buffer (already filled with the contents of a
+  /// Parse a supplied buffer (already filled with the contents of a
   /// file) and create a File object.
   /// The resulting File object takes ownership of the MemoryBuffer.
   virtual ErrorOr<std::unique_ptr<File>>
   loadFile(std::unique_ptr<MemoryBuffer> mb, const class Registry &) const = 0;
 };
 
-/// \brief An abstract class for handling alternate yaml representations
+/// An abstract class for handling alternate yaml representations
 /// of object files.
 ///
 /// The YAML syntax allows "tags" which are used to specify the type of
diff --git a/linux-x64/clang/include/lld/Core/Resolver.h b/linux-x64/clang/include/lld/Core/Resolver.h
index fb62a77..5157c9f 100644
--- a/linux-x64/clang/include/lld/Core/Resolver.h
+++ b/linux-x64/clang/include/lld/Core/Resolver.h
@@ -28,7 +28,7 @@
 class Atom;
 class LinkingContext;
 
-/// \brief The Resolver is responsible for merging all input object files
+/// The Resolver is responsible for merging all input object files
 /// and producing a merged graph.
 class Resolver {
 public:
@@ -50,7 +50,7 @@
   // Handle a shared library file.
   llvm::Error handleSharedLibrary(File &);
 
-  /// @brief do work of merging and resolving and return list
+  /// do work of merging and resolving and return list
   bool resolve();
 
   std::unique_ptr<SimpleFile> resultFile() { return std::move(_result); }
@@ -61,7 +61,7 @@
   bool undefinesAdded(int begin, int end);
   File *getFile(int &index);
 
-  /// \brief The main function that iterates over the files to resolve
+  /// The main function that iterates over the files to resolve
   bool resolveUndefines();
   void updateReferences();
   void deadStripOptimize();
diff --git a/linux-x64/clang/include/lld/Core/Simple.h b/linux-x64/clang/include/lld/Core/Simple.h
index 3aa7abf..feeed6a 100644
--- a/linux-x64/clang/include/lld/Core/Simple.h
+++ b/linux-x64/clang/include/lld/Core/Simple.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Provide simple implementations for Atoms and File.
+/// Provide simple implementations for Atoms and File.
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/lld/Core/SymbolTable.h b/linux-x64/clang/include/lld/Core/SymbolTable.h
index 603f497..156c56e 100644
--- a/linux-x64/clang/include/lld/Core/SymbolTable.h
+++ b/linux-x64/clang/include/lld/Core/SymbolTable.h
@@ -27,35 +27,35 @@
 class SharedLibraryAtom;
 class UndefinedAtom;
 
-/// \brief The SymbolTable class is responsible for coalescing atoms.
+/// The SymbolTable class is responsible for coalescing atoms.
 ///
 /// All atoms coalescable by-name or by-content should be added.
 /// The method replacement() can be used to find the replacement atom
 /// if an atom has been coalesced away.
 class SymbolTable {
 public:
-  /// @brief add atom to symbol table
+  /// add atom to symbol table
   bool add(const DefinedAtom &);
 
-  /// @brief add atom to symbol table
+  /// add atom to symbol table
   bool add(const UndefinedAtom &);
 
-  /// @brief add atom to symbol table
+  /// add atom to symbol table
   bool add(const SharedLibraryAtom &);
 
-  /// @brief add atom to symbol table
+  /// add atom to symbol table
   bool add(const AbsoluteAtom &);
 
-  /// @brief returns atom in symbol table for specified name (or nullptr)
+  /// returns atom in symbol table for specified name (or nullptr)
   const Atom *findByName(StringRef sym);
 
-  /// @brief returns vector of remaining UndefinedAtoms
+  /// returns vector of remaining UndefinedAtoms
   std::vector<const UndefinedAtom *> undefines();
 
-  /// @brief if atom has been coalesced away, return replacement, else return atom
+  /// if atom has been coalesced away, return replacement, else return atom
   const Atom *replacement(const Atom *);
 
-  /// @brief if atom has been coalesced away, return true
+  /// if atom has been coalesced away, return true
   bool isCoalescedAway(const Atom *);
 
 private:
diff --git a/linux-x64/clang/include/lld/Core/Writer.h b/linux-x64/clang/include/lld/Core/Writer.h
index 1f0ca4c..1cdfabe 100644
--- a/linux-x64/clang/include/lld/Core/Writer.h
+++ b/linux-x64/clang/include/lld/Core/Writer.h
@@ -20,17 +20,17 @@
 class LinkingContext;
 class MachOLinkingContext;
 
-/// \brief The Writer is an abstract class for writing object files, shared
+/// The Writer is an abstract class for writing object files, shared
 /// library files, and executable files.  Each file format (e.g. mach-o, etc)
 /// has a concrete subclass of Writer.
 class Writer {
 public:
   virtual ~Writer();
 
-  /// \brief Write a file from the supplied File object
+  /// Write a file from the supplied File object
   virtual llvm::Error writeFile(const File &linkedFile, StringRef path) = 0;
 
-  /// \brief This method is called by Core Linking to give the Writer a chance
+  /// This method is called by Core Linking to give the Writer a chance
   /// to add file format specific "files" to set of files to be linked. This is
   /// how file format specific atoms can be added to the link.
   virtual void createImplicitFiles(std::vector<std::unique_ptr<File>> &) {}
diff --git a/linux-x64/clang/include/lld/ReaderWriter/MachOLinkingContext.h b/linux-x64/clang/include/lld/ReaderWriter/MachOLinkingContext.h
index 9eefa8c..fde6588 100644
--- a/linux-x64/clang/include/lld/ReaderWriter/MachOLinkingContext.h
+++ b/linux-x64/clang/include/lld/ReaderWriter/MachOLinkingContext.h
@@ -89,7 +89,7 @@
                  bool exportDynamicSymbols);
 
   void addPasses(PassManager &pm) override;
-  bool validateImpl(raw_ostream &diagnostics) override;
+  bool validateImpl() override;
   std::string demangle(StringRef symbolName) const override;
 
   void createImplicitFiles(std::vector<std::unique_ptr<File>> &) override;
@@ -201,7 +201,7 @@
 
   uint32_t swiftVersion() const { return _swiftVersion; }
 
-  /// \brief Checks whether a given path on the filesystem exists.
+  /// Checks whether a given path on the filesystem exists.
   ///
   /// When running in -test_file_usage mode, this method consults an
   /// internally maintained list of files that exist (provided by -path_exists)
@@ -211,7 +211,7 @@
   /// Like pathExists() but only used on files - not directories.
   bool fileExists(StringRef path) const;
 
-  /// \brief Adds any library search paths derived from the given base, possibly
+  /// Adds any library search paths derived from the given base, possibly
   /// modified by -syslibroots.
   ///
   /// The set of paths added consists of approximately all syslibroot-prepended
@@ -219,7 +219,7 @@
   /// for whatever reason. With various edge-cases for compatibility.
   void addModifiedSearchDir(StringRef libPath, bool isSystemPath = false);
 
-  /// \brief Determine whether -lFoo can be resolve within the given path, and
+  /// Determine whether -lFoo can be resolve within the given path, and
   /// return the filename if so.
   ///
   /// The -lFoo option is documented to search for libFoo.dylib and libFoo.a in
@@ -228,7 +228,7 @@
   llvm::Optional<StringRef> searchDirForLibrary(StringRef path,
                                                 StringRef libName) const;
 
-  /// \brief Iterates through all search path entries looking for libName (as
+  /// Iterates through all search path entries looking for libName (as
   /// specified by -lFoo).
   llvm::Optional<StringRef> searchLibrary(StringRef libName) const;
 
@@ -236,11 +236,11 @@
   /// the path with syslibroot.
   void addFrameworkSearchDir(StringRef fwPath, bool isSystemPath = false);
 
-  /// \brief Iterates through all framework directories looking for
+  /// Iterates through all framework directories looking for
   /// Foo.framework/Foo (when fwName = "Foo").
   llvm::Optional<StringRef> findPathForFramework(StringRef fwName) const;
 
-  /// \brief The dylib's binary compatibility version, in the raw uint32 format.
+  /// The dylib's binary compatibility version, in the raw uint32 format.
   ///
   /// When building a dynamic library, this is the compatibility version that
   /// gets embedded into the result. Other Mach-O binaries that link against
@@ -249,28 +249,28 @@
   /// installed dynamic library.
   uint32_t compatibilityVersion() const { return _compatibilityVersion; }
 
-  /// \brief The dylib's current version, in the the raw uint32 format.
+  /// The dylib's current version, in the the raw uint32 format.
   ///
   /// When building a dynamic library, this is the current version that gets
   /// embedded into the result. Other Mach-O binaries that link against
   /// this library will store the compatibility version in its load command.
   uint32_t currentVersion() const { return _currentVersion; }
 
-  /// \brief The dylib's install name.
+  /// The dylib's install name.
   ///
   /// Binaries that link against the dylib will embed this path into the dylib
   /// load command. When loading the binaries at runtime, this is the location
   /// on disk that the loader will look for the dylib.
   StringRef installName() const { return _installName; }
 
-  /// \brief Whether or not the dylib has side effects during initialization.
+  /// Whether or not the dylib has side effects during initialization.
   ///
   /// Dylibs marked as being dead strippable provide the guarantee that loading
   /// the dylib has no side effects, allowing the linker to strip out the dylib
   /// when linking a binary that does not use any of its symbols.
   bool deadStrippableDylib() const { return _deadStrippableDylib; }
 
-  /// \brief Whether or not to use flat namespace.
+  /// Whether or not to use flat namespace.
   ///
   /// MachO usually uses a two-level namespace, where each external symbol
   /// referenced by the target is associated with the dylib that will provide
@@ -282,7 +282,7 @@
   /// loaded flat_namespace dylibs must be resolvable at build time.
   bool useFlatNamespace() const { return _flatNamespace; }
 
-  /// \brief How to handle undefined symbols.
+  /// How to handle undefined symbols.
   ///
   /// Options are:
   ///  * error: Report an error and terminate linking.
@@ -294,7 +294,7 @@
   ///    runtime.
   UndefinedMode undefinedMode() const { return _undefinedMode; }
 
-  /// \brief The path to the executable that will load the bundle at runtime.
+  /// The path to the executable that will load the bundle at runtime.
   ///
   /// When building a Mach-O bundle, this executable will be examined if there
   /// are undefined symbols after the main link phase. It is expected that this
@@ -331,7 +331,7 @@
   /// Add section alignment constraint on final layout.
   void addSectionAlignment(StringRef seg, StringRef sect, uint16_t align);
 
-  /// \brief Add a section based on a command-line sectcreate option.
+  /// Add a section based on a command-line sectcreate option.
   void addSectCreateSection(StringRef seg, StringRef sect,
                             std::unique_ptr<MemoryBuffer> content);
 
diff --git a/linux-x64/clang/include/llvm-c/Core.h b/linux-x64/clang/include/llvm-c/Core.h
index ddc7fe7..b5dec3a 100644
--- a/linux-x64/clang/include/llvm-c/Core.h
+++ b/linux-x64/clang/include/llvm-c/Core.h
@@ -199,13 +199,48 @@
 } LLVMDLLStorageClass;
 
 typedef enum {
-  LLVMCCallConv           = 0,
-  LLVMFastCallConv        = 8,
-  LLVMColdCallConv        = 9,
-  LLVMWebKitJSCallConv    = 12,
-  LLVMAnyRegCallConv      = 13,
-  LLVMX86StdcallCallConv  = 64,
-  LLVMX86FastcallCallConv = 65
+  LLVMCCallConv             = 0,
+  LLVMFastCallConv          = 8,
+  LLVMColdCallConv          = 9,
+  LLVMGHCCallConv           = 10,
+  LLVMHiPECallConv          = 11,
+  LLVMWebKitJSCallConv      = 12,
+  LLVMAnyRegCallConv        = 13,
+  LLVMPreserveMostCallConv  = 14,
+  LLVMPreserveAllCallConv   = 15,
+  LLVMSwiftCallConv         = 16,
+  LLVMCXXFASTTLSCallConv    = 17,
+  LLVMX86StdcallCallConv    = 64,
+  LLVMX86FastcallCallConv   = 65,
+  LLVMARMAPCSCallConv       = 66,
+  LLVMARMAAPCSCallConv      = 67,
+  LLVMARMAAPCSVFPCallConv   = 68,
+  LLVMMSP430INTRCallConv    = 69,
+  LLVMX86ThisCallCallConv   = 70,
+  LLVMPTXKernelCallConv     = 71,
+  LLVMPTXDeviceCallConv     = 72,
+  LLVMSPIRFUNCCallConv      = 75,
+  LLVMSPIRKERNELCallConv    = 76,
+  LLVMIntelOCLBICallConv    = 77,
+  LLVMX8664SysVCallConv     = 78,
+  LLVMWin64CallConv         = 79,
+  LLVMX86VectorCallCallConv = 80,
+  LLVMHHVMCallConv          = 81,
+  LLVMHHVMCCallConv         = 82,
+  LLVMX86INTRCallConv       = 83,
+  LLVMAVRINTRCallConv       = 84,
+  LLVMAVRSIGNALCallConv     = 85,
+  LLVMAVRBUILTINCallConv    = 86,
+  LLVMAMDGPUVSCallConv      = 87,
+  LLVMAMDGPUGSCallConv      = 88,
+  LLVMAMDGPUPSCallConv      = 89,
+  LLVMAMDGPUCSCallConv      = 90,
+  LLVMAMDGPUKERNELCallConv  = 91,
+  LLVMX86RegCallCallConv    = 92,
+  LLVMAMDGPUHSCallConv      = 93,
+  LLVMMSP430BUILTINCallConv = 94,
+  LLVMAMDGPULSCallConv      = 95,
+  LLVMAMDGPUESCallConv      = 96
 } LLVMCallConv;
 
 typedef enum {
@@ -341,6 +376,62 @@
     LLVMDSNote
 } LLVMDiagnosticSeverity;
 
+typedef enum {
+  LLVMInlineAsmDialectATT,
+  LLVMInlineAsmDialectIntel
+} LLVMInlineAsmDialect;
+
+typedef enum {
+  /**
+   * Emits an error if two values disagree, otherwise the resulting value is
+   * that of the operands.
+   *
+   * @see Module::ModFlagBehavior::Error
+   */
+  LLVMModuleFlagBehaviorError,
+  /**
+   * Emits a warning if two values disagree. The result value will be the
+   * operand for the flag from the first module being linked.
+   *
+   * @see Module::ModFlagBehavior::Warning
+   */
+  LLVMModuleFlagBehaviorWarning,
+  /**
+   * Adds a requirement that another module flag be present and have a
+   * specified value after linking is performed. The value must be a metadata
+   * pair, where the first element of the pair is the ID of the module flag
+   * to be restricted, and the second element of the pair is the value the
+   * module flag should be restricted to. This behavior can be used to
+   * restrict the allowable results (via triggering of an error) of linking
+   * IDs with the **Override** behavior.
+   *
+   * @see Module::ModFlagBehavior::Require
+   */
+  LLVMModuleFlagBehaviorRequire,
+  /**
+   * Uses the specified value, regardless of the behavior or value of the
+   * other module. If both modules specify **Override**, but the values
+   * differ, an error will be emitted.
+   *
+   * @see Module::ModFlagBehavior::Override
+   */
+  LLVMModuleFlagBehaviorOverride,
+  /**
+   * Appends the two values, which are required to be metadata nodes.
+   *
+   * @see Module::ModFlagBehavior::Append
+   */
+  LLVMModuleFlagBehaviorAppend,
+  /**
+   * Appends the two values, which are required to be metadata
+   * nodes. However, duplicate entries in the second list are dropped
+   * during the append operation.
+   *
+   * @see Module::ModFlagBehavior::AppendUnique
+   */
+  LLVMModuleFlagBehaviorAppendUnique,
+} LLVMModuleFlagBehavior;
+
 /**
  * Attribute index are either LLVMAttributeReturnIndex,
  * LLVMAttributeFunctionIndex or a parameter number from 1 to N.
@@ -626,6 +717,64 @@
 void LLVMSetTarget(LLVMModuleRef M, const char *Triple);
 
 /**
+ * Returns the module flags as an array of flag-key-value triples.  The caller
+ * is responsible for freeing this array by calling
+ * \c LLVMDisposeModuleFlagsMetadata.
+ *
+ * @see Module::getModuleFlagsMetadata()
+ */
+LLVMModuleFlagEntry *LLVMCopyModuleFlagsMetadata(LLVMModuleRef M, size_t *Len);
+
+/**
+ * Destroys module flags metadata entries.
+ */
+void LLVMDisposeModuleFlagsMetadata(LLVMModuleFlagEntry *Entries);
+
+/**
+ * Returns the flag behavior for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Behavior
+ */
+LLVMModuleFlagBehavior
+LLVMModuleFlagEntriesGetFlagBehavior(LLVMModuleFlagEntry *Entries,
+                                     unsigned Index);
+
+/**
+ * Returns the key for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Key
+ */
+const char *LLVMModuleFlagEntriesGetKey(LLVMModuleFlagEntry *Entries,
+                                        unsigned Index, size_t *Len);
+
+/**
+ * Returns the metadata for a module flag entry at a specific index.
+ *
+ * @see Module::ModuleFlagEntry::Val
+ */
+LLVMMetadataRef LLVMModuleFlagEntriesGetMetadata(LLVMModuleFlagEntry *Entries,
+                                                 unsigned Index);
+
+/**
+ * Add a module-level flag to the module-level flags metadata if it doesn't
+ * already exist.
+ *
+ * @see Module::getModuleFlag()
+ */
+LLVMMetadataRef LLVMGetModuleFlag(LLVMModuleRef M,
+                                  const char *Key, size_t KeyLen);
+
+/**
+ * Add a module-level flag to the module-level flags metadata if it doesn't
+ * already exist.
+ *
+ * @see Module::addModuleFlag()
+ */
+void LLVMAddModuleFlag(LLVMModuleRef M, LLVMModuleFlagBehavior Behavior,
+                       const char *Key, size_t KeyLen,
+                       LLVMMetadataRef Val);
+
+/**
  * Dump a representation of a module to stderr.
  *
  * @see Module::dump()
@@ -650,11 +799,36 @@
 char *LLVMPrintModuleToString(LLVMModuleRef M);
 
 /**
+ * Get inline assembly for a module.
+ *
+ * @see Module::getModuleInlineAsm()
+ */
+const char *LLVMGetModuleInlineAsm(LLVMModuleRef M, size_t *Len);
+
+/**
  * Set inline assembly for a module.
  *
  * @see Module::setModuleInlineAsm()
  */
-void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
+void LLVMSetModuleInlineAsm2(LLVMModuleRef M, const char *Asm, size_t Len);
+
+/**
+ * Append inline assembly to a module.
+ *
+ * @see Module::appendModuleInlineAsm()
+ */
+void LLVMAppendModuleInlineAsm(LLVMModuleRef M, const char *Asm, size_t Len);
+
+/**
+ * Create the specified uniqued inline asm string.
+ *
+ * @see InlineAsm::get()
+ */
+LLVMValueRef LLVMGetInlineAsm(LLVMTypeRef Ty,
+                              char *AsmString, size_t AsmStringSize,
+                              char *Constraints, size_t ConstraintsSize,
+                              LLVMBool HasSideEffects, LLVMBool IsAlignStack,
+                              LLVMInlineAsmDialect Dialect);
 
 /**
  * Obtain the context to which this module is associated.
@@ -745,6 +919,9 @@
  */
 LLVMValueRef LLVMGetPreviousFunction(LLVMValueRef Fn);
 
+/** Deprecated: Use LLVMSetModuleInlineAsm2 instead. */
+void LLVMSetModuleInlineAsm(LLVMModuleRef M, const char *Asm);
+
 /**
  * @}
  */
@@ -1240,7 +1417,9 @@
       macro(CallInst)                       \
         macro(IntrinsicInst)                \
           macro(DbgInfoIntrinsic)           \
-            macro(DbgDeclareInst)           \
+            macro(DbgVariableIntrinsic)     \
+              macro(DbgDeclareInst)         \
+            macro(DbgLabelInst)             \
           macro(MemIntrinsic)               \
             macro(MemCpyInst)               \
             macro(MemMoveInst)              \
@@ -1319,14 +1498,14 @@
  *
  * @see llvm::Value::getName()
  */
-const char *LLVMGetValueName(LLVMValueRef Val);
+const char *LLVMGetValueName2(LLVMValueRef Val, size_t *Length);
 
 /**
  * Set the string name of a value.
  *
  * @see llvm::Value::setName()
  */
-void LLVMSetValueName(LLVMValueRef Val, const char *Name);
+void LLVMSetValueName2(LLVMValueRef Val, const char *Name, size_t NameLen);
 
 /**
  * Dump a representation of a value to stderr.
@@ -1378,6 +1557,11 @@
 LLVMValueRef LLVMIsAMDNode(LLVMValueRef Val);
 LLVMValueRef LLVMIsAMDString(LLVMValueRef Val);
 
+/** Deprecated: Use LLVMGetValueName2 instead. */
+const char *LLVMGetValueName(LLVMValueRef Val);
+/** Deprecated: Use LLVMSetValueName2 instead. */
+void LLVMSetValueName(LLVMValueRef Val, const char *Name);
+
 /**
  * @}
  */
@@ -1820,10 +2004,12 @@
 LLVMValueRef LLVMConstInsertValue(LLVMValueRef AggConstant,
                                   LLVMValueRef ElementValueConstant,
                                   unsigned *IdxList, unsigned NumIdx);
+LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
+
+/** Deprecated: Use LLVMGetInlineAsm instead. */
 LLVMValueRef LLVMConstInlineAsm(LLVMTypeRef Ty,
                                 const char *AsmString, const char *Constraints,
                                 LLVMBool HasSideEffects, LLVMBool IsAlignStack);
-LLVMValueRef LLVMBlockAddress(LLVMValueRef F, LLVMBasicBlockRef BB);
 
 /**
  * @}
@@ -1934,6 +2120,56 @@
                           const char *Name);
 
 /**
+ * Obtain a GlobalAlias value from a Module by its name.
+ *
+ * The returned value corresponds to a llvm::GlobalAlias value.
+ *
+ * @see llvm::Module::getNamedAlias()
+ */
+LLVMValueRef LLVMGetNamedGlobalAlias(LLVMModuleRef M,
+                                     const char *Name, size_t NameLen);
+
+/**
+ * Obtain an iterator to the first GlobalAlias in a Module.
+ *
+ * @see llvm::Module::alias_begin()
+ */
+LLVMValueRef LLVMGetFirstGlobalAlias(LLVMModuleRef M);
+
+/**
+ * Obtain an iterator to the last GlobalAlias in a Module.
+ *
+ * @see llvm::Module::alias_end()
+ */
+LLVMValueRef LLVMGetLastGlobalAlias(LLVMModuleRef M);
+
+/**
+ * Advance a GlobalAlias iterator to the next GlobalAlias.
+ *
+ * Returns NULL if the iterator was already at the end and there are no more
+ * global aliases.
+ */
+LLVMValueRef LLVMGetNextGlobalAlias(LLVMValueRef GA);
+
+/**
+ * Decrement a GlobalAlias iterator to the previous GlobalAlias.
+ *
+ * Returns NULL if the iterator was already at the beginning and there are
+ * no previous global aliases.
+ */
+LLVMValueRef LLVMGetPreviousGlobalAlias(LLVMValueRef GA);
+
+/**
+ * Retrieve the target value of an alias.
+ */
+LLVMValueRef LLVMAliasGetAliasee(LLVMValueRef Alias);
+
+/**
+ * Set the target value of an alias.
+ */
+void LLVMAliasSetAliasee(LLVMValueRef Alias, LLVMValueRef Aliasee);
+
+/**
  * @}
  */
 
diff --git a/linux-x64/clang/include/llvm-c/DataTypes.h b/linux-x64/clang/include/llvm-c/DataTypes.h
index 56d3b26..7081c83 100644
--- a/linux-x64/clang/include/llvm-c/DataTypes.h
+++ b/linux-x64/clang/include/llvm-c/DataTypes.h
@@ -24,34 +24,14 @@
 #ifndef LLVM_C_DATATYPES_H
 #define LLVM_C_DATATYPES_H
 
-#define HAVE_INTTYPES_H 1
-#define HAVE_STDINT_H 1
-#define HAVE_UINT64_T 1
-#define HAVE_U_INT64_T 1
-
 #ifdef __cplusplus
 #include <cmath>
 #else
 #include <math.h>
 #endif
 
-#ifdef __cplusplus
-#include <cinttypes>
-#else
-#ifdef HAVE_INTTYPES_H
 #include <inttypes.h>
-#endif
-#endif
-
-#ifdef __cplusplus
-#include <cstdint>
-#else
-#ifdef HAVE_STDINT_H
 #include <stdint.h>
-#else
-#error "Compiler must provide an implementation of stdint.h"
-#endif
-#endif
 
 #ifndef _MSC_VER
 
@@ -74,15 +54,6 @@
 #undef INT64_MIN
 #endif
 
-/* Handle incorrect definition of uint64_t as u_int64_t */
-#ifndef HAVE_UINT64_T
-#ifdef HAVE_U_INT64_T
-typedef u_int64_t uint64_t;
-#else
-# error "Don't have a definition for uint64_t on this platform"
-#endif
-#endif
-
 #else /* _MSC_VER */
 #ifdef __cplusplus
 #include <cstddef>
@@ -99,22 +70,6 @@
 typedef signed int ssize_t;
 #endif /* _WIN64 */
 
-#ifndef HAVE_INTTYPES_H
-#define PRId64 "I64d"
-#define PRIi64 "I64i"
-#define PRIo64 "I64o"
-#define PRIu64 "I64u"
-#define PRIx64 "I64x"
-#define PRIX64 "I64X"
-
-#define PRId32 "d"
-#define PRIi32 "i"
-#define PRIo32 "o"
-#define PRIu32 "u"
-#define PRIx32 "x"
-#define PRIX32 "X"
-#endif /* HAVE_INTTYPES_H */
-
 #endif /* _MSC_VER */
 
 /* Set defaults for constants which we cannot find. */
diff --git a/linux-x64/clang/include/llvm-c/DebugInfo.h b/linux-x64/clang/include/llvm-c/DebugInfo.h
index a5e5653..cee6755 100644
--- a/linux-x64/clang/include/llvm-c/DebugInfo.h
+++ b/linux-x64/clang/include/llvm-c/DebugInfo.h
@@ -54,6 +54,9 @@
   LLVMDIFlagMainSubprogram = 1 << 21,
   LLVMDIFlagTypePassByValue = 1 << 22,
   LLVMDIFlagTypePassByReference = 1 << 23,
+  LLVMDIFlagFixedEnum = 1 << 24,
+  LLVMDIFlagThunk = 1 << 25,
+  LLVMDIFlagTrivial = 1 << 26,
   LLVMDIFlagIndirectVirtualBase = (1 << 2) | (1 << 5),
   LLVMDIFlagAccessibility = LLVMDIFlagPrivate | LLVMDIFlagProtected |
                             LLVMDIFlagPublic,
@@ -122,6 +125,11 @@
 } LLVMDWARFEmissionKind;
 
 /**
+ * An LLVM DWARF type encoding.
+ */
+typedef unsigned LLVMDWARFTypeEncoding;
+
+/**
  * The current debug metadata version number.
  */
 unsigned LLVMDebugMetadataVersion(void);
@@ -213,6 +221,158 @@
                         size_t DirectoryLen);
 
 /**
+ * Creates a new descriptor for a module with the specified parent scope.
+ * \param Builder         The \c DIBuilder.
+ * \param ParentScope     The parent scope containing this module declaration.
+ * \param Name            Module name.
+ * \param NameLen         The length of the C string passed to \c Name.
+ * \param ConfigMacros    A space-separated shell-quoted list of -D macro
+                          definitions as they would appear on a command line.
+ * \param ConfigMacrosLen The length of the C string passed to \c ConfigMacros.
+ * \param IncludePath     The path to the module map file.
+ * \param IncludePathLen  The length of the C string passed to \c IncludePath.
+ * \param ISysRoot        The Clang system root (value of -isysroot).
+ * \param ISysRootLen     The length of the C string passed to \c ISysRoot.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateModule(LLVMDIBuilderRef Builder, LLVMMetadataRef ParentScope,
+                          const char *Name, size_t NameLen,
+                          const char *ConfigMacros, size_t ConfigMacrosLen,
+                          const char *IncludePath, size_t IncludePathLen,
+                          const char *ISysRoot, size_t ISysRootLen);
+
+/**
+ * Creates a new descriptor for a namespace with the specified parent scope.
+ * \param Builder          The \c DIBuilder.
+ * \param ParentScope      The parent scope containing this module declaration.
+ * \param Name             NameSpace name.
+ * \param NameLen          The length of the C string passed to \c Name.
+ * \param ExportSymbols    Whether or not the namespace exports symbols, e.g.
+ *                         this is true of C++ inline namespaces.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateNameSpace(LLVMDIBuilderRef Builder,
+                             LLVMMetadataRef ParentScope,
+                             const char *Name, size_t NameLen,
+                             LLVMBool ExportSymbols);
+
+/**
+ * Create a new descriptor for the specified subprogram.
+ * \param Builder         The \c DIBuilder.
+ * \param Scope           Function scope.
+ * \param Name            Function name.
+ * \param NameLen         Length of enumeration name.
+ * \param LinkageName     Mangled function name.
+ * \param LinkageNameLen  Length of linkage name.
+ * \param File            File where this variable is defined.
+ * \param LineNo          Line number.
+ * \param Ty              Function type.
+ * \param IsLocalToUnit   True if this function is not externally visible.
+ * \param IsDefinition    True if this is a function definition.
+ * \param ScopeLine       Set to the beginning of the scope this starts
+ * \param Flags           E.g.: \c LLVMDIFlagLValueReference. These flags are
+ *                        used to emit dwarf attributes.
+ * \param IsOptimized     True if optimization is ON.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateFunction(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, const char *LinkageName, size_t LinkageNameLen,
+    LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
+    LLVMBool IsLocalToUnit, LLVMBool IsDefinition,
+    unsigned ScopeLine, LLVMDIFlags Flags, LLVMBool IsOptimized);
+
+/**
+ * Create a descriptor for a lexical block with the specified parent context.
+ * \param Builder      The \c DIBuilder.
+ * \param Scope        Parent lexical block.
+ * \param File         Source file.
+ * \param Line         The line in the source file.
+ * \param Column       The column in the source file.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateLexicalBlock(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope,
+    LLVMMetadataRef File, unsigned Line, unsigned Column);
+
+/**
+ * Create a descriptor for a lexical block with a new file attached.
+ * \param Builder        The \c DIBuilder.
+ * \param Scope          Lexical block.
+ * \param File           Source file.
+ * \param Discriminator  DWARF path discriminator value.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateLexicalBlockFile(LLVMDIBuilderRef Builder,
+                                    LLVMMetadataRef Scope,
+                                    LLVMMetadataRef File,
+                                    unsigned Discriminator);
+
+/**
+ * Create a descriptor for an imported namespace. Suitable for e.g. C++
+ * using declarations.
+ * \param Builder    The \c DIBuilder.
+ * \param Scope      The scope this module is imported into
+ * \param File       File where the declaration is located.
+ * \param Line       Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromNamespace(LLVMDIBuilderRef Builder,
+                                               LLVMMetadataRef Scope,
+                                               LLVMMetadataRef NS,
+                                               LLVMMetadataRef File,
+                                               unsigned Line);
+
+/**
+ * Create a descriptor for an imported module that aliases another
+ * imported entity descriptor.
+ * \param Builder        The \c DIBuilder.
+ * \param Scope          The scope this module is imported into
+ * \param ImportedEntity Previous imported entity to alias.
+ * \param File           File where the declaration is located.
+ * \param Line           Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromAlias(LLVMDIBuilderRef Builder,
+                                           LLVMMetadataRef Scope,
+                                           LLVMMetadataRef ImportedEntity,
+                                           LLVMMetadataRef File,
+                                           unsigned Line);
+
+/**
+ * Create a descriptor for an imported module.
+ * \param Builder    The \c DIBuilder.
+ * \param Scope      The scope this module is imported into
+ * \param M          The module being imported here
+ * \param File       File where the declaration is located.
+ * \param Line       Line number of the declaration.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedModuleFromModule(LLVMDIBuilderRef Builder,
+                                            LLVMMetadataRef Scope,
+                                            LLVMMetadataRef M,
+                                            LLVMMetadataRef File,
+                                            unsigned Line);
+
+/**
+ * Create a descriptor for an imported function, type, or variable.  Suitable
+ * for e.g. FORTRAN-style USE declarations.
+ * \param Builder    The DIBuilder.
+ * \param Scope      The scope this module is imported into.
+ * \param Decl       The declaration (or definition) of a function, type,
+                     or variable.
+ * \param File       File where the declaration is located.
+ * \param Line       Line number of the declaration.
+ * \param Name       A name that uniquely identifies this imported declaration.
+ * \param NameLen    The length of the C string passed to \c Name.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateImportedDeclaration(LLVMDIBuilderRef Builder,
+                                       LLVMMetadataRef Scope,
+                                       LLVMMetadataRef Decl,
+                                       LLVMMetadataRef File,
+                                       unsigned Line,
+                                       const char *Name, size_t NameLen);
+
+/**
  * Creates a new DebugLocation that describes a source location.
  * \param Line The line in the source file.
  * \param Column The column in the source file.
@@ -227,6 +387,768 @@
                                  unsigned Column, LLVMMetadataRef Scope,
                                  LLVMMetadataRef InlinedAt);
 
+/**
+ * Get the line number of this debug location.
+ * \param Location     The debug location.
+ *
+ * @see DILocation::getLine()
+ */
+unsigned LLVMDILocationGetLine(LLVMMetadataRef Location);
+
+/**
+ * Get the column number of this debug location.
+ * \param Location     The debug location.
+ *
+ * @see DILocation::getColumn()
+ */
+unsigned LLVMDILocationGetColumn(LLVMMetadataRef Location);
+
+/**
+ * Get the local scope associated with this debug location.
+ * \param Location     The debug location.
+ *
+ * @see DILocation::getScope()
+ */
+LLVMMetadataRef LLVMDILocationGetScope(LLVMMetadataRef Location);
+
+/**
+ * Create a type array.
+ * \param Builder        The DIBuilder.
+ * \param Data           The type elements.
+ * \param NumElements    Number of type elements.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateTypeArray(LLVMDIBuilderRef Builder,
+                                                  LLVMMetadataRef *Data,
+                                                  size_t NumElements);
+
+/**
+ * Create subroutine type.
+ * \param Builder        The DIBuilder.
+ * \param File            The file in which the subroutine resides.
+ * \param ParameterTypes  An array of subroutine parameter types. This
+ *                        includes return type at 0th index.
+ * \param NumParameterTypes The number of parameter types in \c ParameterTypes
+ * \param Flags           E.g.: \c LLVMDIFlagLValueReference.
+ *                        These flags are used to emit dwarf attributes.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateSubroutineType(LLVMDIBuilderRef Builder,
+                                  LLVMMetadataRef File,
+                                  LLVMMetadataRef *ParameterTypes,
+                                  unsigned NumParameterTypes,
+                                  LLVMDIFlags Flags);
+
+/**
+ * Create debugging information entry for an enumeration.
+ * \param Builder        The DIBuilder.
+ * \param Scope          Scope in which this enumeration is defined.
+ * \param Name           Enumeration name.
+ * \param NameLen        Length of enumeration name.
+ * \param File           File where this member is defined.
+ * \param LineNumber     Line number.
+ * \param SizeInBits     Member size.
+ * \param AlignInBits    Member alignment.
+ * \param Elements       Enumeration elements.
+ * \param NumElements    Number of enumeration elements.
+ * \param ClassTy        Underlying type of a C++11/ObjC fixed enum.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateEnumerationType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+    uint64_t SizeInBits, uint32_t AlignInBits, LLVMMetadataRef *Elements,
+    unsigned NumElements, LLVMMetadataRef ClassTy);
+
+/**
+ * Create debugging information entry for a union.
+ * \param Builder      The DIBuilder.
+ * \param Scope        Scope in which this union is defined.
+ * \param Name         Union name.
+ * \param NameLen      Length of union name.
+ * \param File         File where this member is defined.
+ * \param LineNumber   Line number.
+ * \param SizeInBits   Member size.
+ * \param AlignInBits  Member alignment.
+ * \param Flags        Flags to encode member attribute, e.g. private
+ * \param Elements     Union elements.
+ * \param NumElements  Number of union elements.
+ * \param RunTimeLang  Optional parameter, Objective-C runtime version.
+ * \param UniqueId     A unique identifier for the union.
+ * \param UniqueIdLen  Length of unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateUnionType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+    uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
+    LLVMMetadataRef *Elements, unsigned NumElements, unsigned RunTimeLang,
+    const char *UniqueId, size_t UniqueIdLen);
+
+
+/**
+ * Create debugging information entry for an array.
+ * \param Builder      The DIBuilder.
+ * \param Size         Array size.
+ * \param AlignInBits  Alignment.
+ * \param Ty           Element type.
+ * \param Subscripts   Subscripts.
+ * \param NumSubscripts Number of subscripts.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateArrayType(LLVMDIBuilderRef Builder, uint64_t Size,
+                             uint32_t AlignInBits, LLVMMetadataRef Ty,
+                             LLVMMetadataRef *Subscripts,
+                             unsigned NumSubscripts);
+
+/**
+ * Create debugging information entry for a vector type.
+ * \param Builder      The DIBuilder.
+ * \param Size         Vector size.
+ * \param AlignInBits  Alignment.
+ * \param Ty           Element type.
+ * \param Subscripts   Subscripts.
+ * \param NumSubscripts Number of subscripts.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateVectorType(LLVMDIBuilderRef Builder, uint64_t Size,
+                              uint32_t AlignInBits, LLVMMetadataRef Ty,
+                              LLVMMetadataRef *Subscripts,
+                              unsigned NumSubscripts);
+
+/**
+ * Create a DWARF unspecified type.
+ * \param Builder   The DIBuilder.
+ * \param Name      The unspecified type's name.
+ * \param NameLen   Length of type name.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateUnspecifiedType(LLVMDIBuilderRef Builder, const char *Name,
+                                   size_t NameLen);
+
+/**
+ * Create debugging information entry for a basic
+ * type.
+ * \param Builder     The DIBuilder.
+ * \param Name        Type name.
+ * \param NameLen     Length of type name.
+ * \param SizeInBits  Size of the type.
+ * \param Encoding    DWARF encoding code, e.g. \c LLVMDWARFTypeEncoding_float.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateBasicType(LLVMDIBuilderRef Builder, const char *Name,
+                             size_t NameLen, uint64_t SizeInBits,
+                             LLVMDWARFTypeEncoding Encoding);
+
+/**
+ * Create debugging information entry for a pointer.
+ * \param Builder     The DIBuilder.
+ * \param PointeeTy         Type pointed by this pointer.
+ * \param SizeInBits        Size.
+ * \param AlignInBits       Alignment. (optional, pass 0 to ignore)
+ * \param AddressSpace      DWARF address space. (optional, pass 0 to ignore)
+ * \param Name              Pointer type name. (optional)
+ * \param NameLen           Length of pointer type name. (optional)
+ */
+LLVMMetadataRef LLVMDIBuilderCreatePointerType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef PointeeTy,
+    uint64_t SizeInBits, uint32_t AlignInBits, unsigned AddressSpace,
+    const char *Name, size_t NameLen);
+
+/**
+ * Create debugging information entry for a struct.
+ * \param Builder     The DIBuilder.
+ * \param Scope        Scope in which this struct is defined.
+ * \param Name         Struct name.
+ * \param NameLen      Struct name length.
+ * \param File         File where this member is defined.
+ * \param LineNumber   Line number.
+ * \param SizeInBits   Member size.
+ * \param AlignInBits  Member alignment.
+ * \param Flags        Flags to encode member attribute, e.g. private
+ * \param Elements     Struct elements.
+ * \param NumElements  Number of struct elements.
+ * \param RunTimeLang  Optional parameter, Objective-C runtime version.
+ * \param VTableHolder The object containing the vtable for the struct.
+ * \param UniqueId     A unique identifier for the struct.
+ * \param UniqueIdLen  Length of the unique identifier for the struct.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateStructType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+    uint64_t SizeInBits, uint32_t AlignInBits, LLVMDIFlags Flags,
+    LLVMMetadataRef DerivedFrom, LLVMMetadataRef *Elements,
+    unsigned NumElements, unsigned RunTimeLang, LLVMMetadataRef VTableHolder,
+    const char *UniqueId, size_t UniqueIdLen);
+
+/**
+ * Create debugging information entry for a member.
+ * \param Builder      The DIBuilder.
+ * \param Scope        Member scope.
+ * \param Name         Member name.
+ * \param NameLen      Length of member name.
+ * \param File         File where this member is defined.
+ * \param LineNo       Line number.
+ * \param SizeInBits   Member size.
+ * \param AlignInBits  Member alignment.
+ * \param OffsetInBits Member offset.
+ * \param Flags        Flags to encode member attribute, e.g. private
+ * \param Ty           Parent type.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateMemberType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNo,
+    uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
+    LLVMDIFlags Flags, LLVMMetadataRef Ty);
+
+/**
+ * Create debugging information entry for a
+ * C++ static data member.
+ * \param Builder      The DIBuilder.
+ * \param Scope        Member scope.
+ * \param Name         Member name.
+ * \param NameLen      Length of member name.
+ * \param File         File where this member is declared.
+ * \param LineNumber   Line number.
+ * \param Type         Type of the static member.
+ * \param Flags        Flags to encode member attribute, e.g. private.
+ * \param ConstantVal  Const initializer of the member.
+ * \param AlignInBits  Member alignment.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateStaticMemberType(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNumber,
+    LLVMMetadataRef Type, LLVMDIFlags Flags, LLVMValueRef ConstantVal,
+    uint32_t AlignInBits);
+
+/**
+ * Create debugging information entry for a pointer to member.
+ * \param Builder      The DIBuilder.
+ * \param PointeeType  Type pointed to by this pointer.
+ * \param ClassType    Type for which this pointer points to members of.
+ * \param SizeInBits   Size.
+ * \param AlignInBits  Alignment.
+ * \param Flags        Flags.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateMemberPointerType(LLVMDIBuilderRef Builder,
+                                     LLVMMetadataRef PointeeType,
+                                     LLVMMetadataRef ClassType,
+                                     uint64_t SizeInBits,
+                                     uint32_t AlignInBits,
+                                     LLVMDIFlags Flags);
+/**
+ * Create debugging information entry for Objective-C instance variable.
+ * \param Builder      The DIBuilder.
+ * \param Name         Member name.
+ * \param NameLen      The length of the C string passed to \c Name.
+ * \param File         File where this member is defined.
+ * \param LineNo       Line number.
+ * \param SizeInBits   Member size.
+ * \param AlignInBits  Member alignment.
+ * \param OffsetInBits Member offset.
+ * \param Flags        Flags to encode member attribute, e.g. private
+ * \param Ty           Parent type.
+ * \param PropertyNode Property associated with this ivar.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjCIVar(LLVMDIBuilderRef Builder,
+                            const char *Name, size_t NameLen,
+                            LLVMMetadataRef File, unsigned LineNo,
+                            uint64_t SizeInBits, uint32_t AlignInBits,
+                            uint64_t OffsetInBits, LLVMDIFlags Flags,
+                            LLVMMetadataRef Ty, LLVMMetadataRef PropertyNode);
+
+/**
+ * Create debugging information entry for Objective-C property.
+ * \param Builder            The DIBuilder.
+ * \param Name               Property name.
+ * \param NameLen            The length of the C string passed to \c Name.
+ * \param File               File where this property is defined.
+ * \param LineNo             Line number.
+ * \param GetterName         Name of the Objective C property getter selector.
+ * \param GetterNameLen      The length of the C string passed to \c GetterName.
+ * \param SetterName         Name of the Objective C property setter selector.
+ * \param SetterNameLen      The length of the C string passed to \c SetterName.
+ * \param PropertyAttributes Objective C property attributes.
+ * \param Ty                 Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjCProperty(LLVMDIBuilderRef Builder,
+                                const char *Name, size_t NameLen,
+                                LLVMMetadataRef File, unsigned LineNo,
+                                const char *GetterName, size_t GetterNameLen,
+                                const char *SetterName, size_t SetterNameLen,
+                                unsigned PropertyAttributes,
+                                LLVMMetadataRef Ty);
+
+/**
+ * Create a uniqued DIType* clone with FlagObjectPointer and FlagArtificial set.
+ * \param Builder   The DIBuilder.
+ * \param Type      The underlying type to which this pointer points.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateObjectPointerType(LLVMDIBuilderRef Builder,
+                                     LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a qualified
+ * type, e.g. 'const int'.
+ * \param Builder     The DIBuilder.
+ * \param Tag         Tag identifying type,
+ *                    e.g. LLVMDWARFTypeQualifier_volatile_type
+ * \param Type        Base Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateQualifiedType(LLVMDIBuilderRef Builder, unsigned Tag,
+                                 LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a c++
+ * style reference or rvalue reference type.
+ * \param Builder   The DIBuilder.
+ * \param Tag       Tag identifying type,
+ * \param Type      Base Type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateReferenceType(LLVMDIBuilderRef Builder, unsigned Tag,
+                                 LLVMMetadataRef Type);
+
+/**
+ * Create C++11 nullptr type.
+ * \param Builder   The DIBuilder.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateNullPtrType(LLVMDIBuilderRef Builder);
+
+/**
+ * Create debugging information entry for a typedef.
+ * \param Builder    The DIBuilder.
+ * \param Type       Original type.
+ * \param Name       Typedef name.
+ * \param File       File where this type is defined.
+ * \param LineNo     Line number.
+ * \param Scope      The surrounding context for the typedef.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
+                           const char *Name, size_t NameLen,
+                           LLVMMetadataRef File, unsigned LineNo,
+                           LLVMMetadataRef Scope);
+
+/**
+ * Create debugging information entry to establish inheritance relationship
+ * between two types.
+ * \param Builder       The DIBuilder.
+ * \param Ty            Original type.
+ * \param BaseTy        Base type. Ty is inherits from base.
+ * \param BaseOffset    Base offset.
+ * \param VBPtrOffset  Virtual base pointer offset.
+ * \param Flags         Flags to describe inheritance attribute, e.g. private
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateInheritance(LLVMDIBuilderRef Builder,
+                               LLVMMetadataRef Ty, LLVMMetadataRef BaseTy,
+                               uint64_t BaseOffset, uint32_t VBPtrOffset,
+                               LLVMDIFlags Flags);
+
+/**
+ * Create a permanent forward-declared type.
+ * \param Builder             The DIBuilder.
+ * \param Tag                 A unique tag for this type.
+ * \param Name                Type name.
+ * \param NameLen             Length of type name.
+ * \param Scope               Type scope.
+ * \param File                File where this type is defined.
+ * \param Line                Line number where this type is defined.
+ * \param RuntimeLang         Indicates runtime version for languages like
+ *                            Objective-C.
+ * \param SizeInBits          Member size.
+ * \param AlignInBits         Member alignment.
+ * \param UniqueIdentifier    A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateForwardDecl(
+    LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
+    size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
+    unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
+    const char *UniqueIdentifier, size_t UniqueIdentifierLen);
+
+/**
+ * Create a temporary forward-declared type.
+ * \param Builder             The DIBuilder.
+ * \param Tag                 A unique tag for this type.
+ * \param Name                Type name.
+ * \param NameLen             Length of type name.
+ * \param Scope               Type scope.
+ * \param File                File where this type is defined.
+ * \param Line                Line number where this type is defined.
+ * \param RuntimeLang         Indicates runtime version for languages like
+ *                            Objective-C.
+ * \param SizeInBits          Member size.
+ * \param AlignInBits         Member alignment.
+ * \param Flags               Flags.
+ * \param UniqueIdentifier    A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateReplaceableCompositeType(
+    LLVMDIBuilderRef Builder, unsigned Tag, const char *Name,
+    size_t NameLen, LLVMMetadataRef Scope, LLVMMetadataRef File, unsigned Line,
+    unsigned RuntimeLang, uint64_t SizeInBits, uint32_t AlignInBits,
+    LLVMDIFlags Flags, const char *UniqueIdentifier,
+    size_t UniqueIdentifierLen);
+
+/**
+ * Create debugging information entry for a bit field member.
+ * \param Builder             The DIBuilder.
+ * \param Scope               Member scope.
+ * \param Name                Member name.
+ * \param NameLen             Length of member name.
+ * \param File                File where this member is defined.
+ * \param LineNumber          Line number.
+ * \param SizeInBits          Member size.
+ * \param OffsetInBits        Member offset.
+ * \param StorageOffsetInBits Member storage offset.
+ * \param Flags               Flags to encode member attribute.
+ * \param Type                Parent type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateBitFieldMemberType(LLVMDIBuilderRef Builder,
+                                      LLVMMetadataRef Scope,
+                                      const char *Name, size_t NameLen,
+                                      LLVMMetadataRef File, unsigned LineNumber,
+                                      uint64_t SizeInBits,
+                                      uint64_t OffsetInBits,
+                                      uint64_t StorageOffsetInBits,
+                                      LLVMDIFlags Flags, LLVMMetadataRef Type);
+
+/**
+ * Create debugging information entry for a class.
+ * \param Scope               Scope in which this class is defined.
+ * \param Name                Class name.
+ * \param NameLen             The length of the C string passed to \c Name.
+ * \param File                File where this member is defined.
+ * \param LineNumber          Line number.
+ * \param SizeInBits          Member size.
+ * \param AlignInBits         Member alignment.
+ * \param OffsetInBits        Member offset.
+ * \param Flags               Flags to encode member attribute, e.g. private.
+ * \param DerivedFrom         Debug info of the base class of this type.
+ * \param Elements            Class members.
+ * \param NumElements         Number of class elements.
+ * \param VTableHolder        Debug info of the base class that contains vtable
+ *                            for this type. This is used in
+ *                            DW_AT_containing_type. See DWARF documentation
+ *                            for more info.
+ * \param TemplateParamsNode  Template type parameters.
+ * \param UniqueIdentifier    A unique identifier for the type.
+ * \param UniqueIdentifierLen Length of the unique identifier.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateClassType(LLVMDIBuilderRef Builder,
+    LLVMMetadataRef Scope, const char *Name, size_t NameLen,
+    LLVMMetadataRef File, unsigned LineNumber, uint64_t SizeInBits,
+    uint32_t AlignInBits, uint64_t OffsetInBits, LLVMDIFlags Flags,
+    LLVMMetadataRef DerivedFrom,
+    LLVMMetadataRef *Elements, unsigned NumElements,
+    LLVMMetadataRef VTableHolder, LLVMMetadataRef TemplateParamsNode,
+    const char *UniqueIdentifier, size_t UniqueIdentifierLen);
+
+/**
+ * Create a uniqued DIType* clone with FlagArtificial set.
+ * \param Builder     The DIBuilder.
+ * \param Type        The underlying type.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateArtificialType(LLVMDIBuilderRef Builder,
+                                  LLVMMetadataRef Type);
+
+/**
+ * Get the name of this DIType.
+ * \param DType     The DIType.
+ * \param Length    The length of the returned string.
+ *
+ * @see DIType::getName()
+ */
+const char *LLVMDITypeGetName(LLVMMetadataRef DType, size_t *Length);
+
+/**
+ * Get the size of this DIType in bits.
+ * \param DType     The DIType.
+ *
+ * @see DIType::getSizeInBits()
+ */
+uint64_t LLVMDITypeGetSizeInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the offset of this DIType in bits.
+ * \param DType     The DIType.
+ *
+ * @see DIType::getOffsetInBits()
+ */
+uint64_t LLVMDITypeGetOffsetInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the alignment of this DIType in bits.
+ * \param DType     The DIType.
+ *
+ * @see DIType::getAlignInBits()
+ */
+uint32_t LLVMDITypeGetAlignInBits(LLVMMetadataRef DType);
+
+/**
+ * Get the source line where this DIType is declared.
+ * \param DType     The DIType.
+ *
+ * @see DIType::getLine()
+ */
+unsigned LLVMDITypeGetLine(LLVMMetadataRef DType);
+
+/**
+ * Get the flags associated with this DIType.
+ * \param DType     The DIType.
+ *
+ * @see DIType::getFlags()
+ */
+LLVMDIFlags LLVMDITypeGetFlags(LLVMMetadataRef DType);
+
+/**
+ * Create a descriptor for a value range.
+ * \param Builder    The DIBuilder.
+ * \param LowerBound Lower bound of the subrange, e.g. 0 for C, 1 for Fortran.
+ * \param Count      Count of elements in the subrange.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateSubrange(LLVMDIBuilderRef Builder,
+                                                 int64_t LowerBound,
+                                                 int64_t Count);
+
+/**
+ * Create an array of DI Nodes.
+ * \param Builder        The DIBuilder.
+ * \param Data           The DI Node elements.
+ * \param NumElements    Number of DI Node elements.
+ */
+LLVMMetadataRef LLVMDIBuilderGetOrCreateArray(LLVMDIBuilderRef Builder,
+                                              LLVMMetadataRef *Data,
+                                              size_t NumElements);
+
+/**
+ * Create a new descriptor for the specified variable which has a complex
+ * address expression for its address.
+ * \param Builder     The DIBuilder.
+ * \param Addr        An array of complex address operations.
+ * \param Length      Length of the address operation array.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateExpression(LLVMDIBuilderRef Builder,
+                                              int64_t *Addr, size_t Length);
+
+/**
+ * Create a new descriptor for the specified variable that does not have an
+ * address, but does have a constant value.
+ * \param Builder     The DIBuilder.
+ * \param Value       The constant value.
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateConstantValueExpression(LLVMDIBuilderRef Builder,
+                                           int64_t Value);
+
+/**
+ * Create a new descriptor for the specified variable.
+ * \param Scope       Variable scope.
+ * \param Name        Name of the variable.
+ * \param NameLen     The length of the C string passed to \c Name.
+ * \param Linkage     Mangled  name of the variable.
+ * \param LinkLen     The length of the C string passed to \c Linkage.
+ * \param File        File where this variable is defined.
+ * \param LineNo      Line number.
+ * \param Ty          Variable Type.
+ * \param LocalToUnit Boolean flag indicate whether this variable is
+ *                    externally visible or not.
+ * \param Expr        The location of the global relative to the attached
+ *                    GlobalVariable.
+ * \param Decl        Reference to the corresponding declaration.
+ * \param AlignInBits Variable alignment(or 0 if no alignment attr was
+ *                    specified)
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateGlobalVariableExpression(LLVMDIBuilderRef Builder,
+                                            LLVMMetadataRef Scope,
+                                            const char *Name, size_t NameLen,
+                                            const char *Linkage, size_t LinkLen,
+                                            LLVMMetadataRef File,
+                                            unsigned LineNo,
+                                            LLVMMetadataRef Ty,
+                                            LLVMBool LocalToUnit,
+                                            LLVMMetadataRef Expr,
+                                            LLVMMetadataRef Decl,
+                                            uint32_t AlignInBits);
+/**
+ * Create a new temporary \c MDNode.  Suitable for use in constructing cyclic
+ * \c MDNode structures. A temporary \c MDNode is not uniqued, may be RAUW'd,
+ * and must be manually deleted with \c LLVMDisposeTemporaryMDNode.
+ * \param Ctx            The context in which to construct the temporary node.
+ * \param Data           The metadata elements.
+ * \param NumElements    Number of metadata elements.
+ */
+LLVMMetadataRef LLVMTemporaryMDNode(LLVMContextRef Ctx, LLVMMetadataRef *Data,
+                                    size_t NumElements);
+
+/**
+ * Deallocate a temporary node.
+ *
+ * Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
+ * references will be reset.
+ * \param TempNode    The temporary metadata node.
+ */
+void LLVMDisposeTemporaryMDNode(LLVMMetadataRef TempNode);
+
+/**
+ * Replace all uses of temporary metadata.
+ * \param TempTargetMetadata    The temporary metadata node.
+ * \param Replacement           The replacement metadata node.
+ */
+void LLVMMetadataReplaceAllUsesWith(LLVMMetadataRef TempTargetMetadata,
+                                    LLVMMetadataRef Replacement);
+
+/**
+ * Create a new descriptor for the specified global variable that is temporary
+ * and meant to be RAUWed.
+ * \param Scope       Variable scope.
+ * \param Name        Name of the variable.
+ * \param NameLen     The length of the C string passed to \c Name.
+ * \param Linkage     Mangled  name of the variable.
+ * \param LnkLen      The length of the C string passed to \c Linkage.
+ * \param File        File where this variable is defined.
+ * \param LineNo      Line number.
+ * \param Ty          Variable Type.
+ * \param LocalToUnit Boolean flag indicate whether this variable is
+ *                    externally visible or not.
+ * \param Decl        Reference to the corresponding declaration.
+ * \param AlignInBits Variable alignment(or 0 if no alignment attr was
+ *                    specified)
+ */
+LLVMMetadataRef
+LLVMDIBuilderCreateTempGlobalVariableFwdDecl(LLVMDIBuilderRef Builder,
+                                             LLVMMetadataRef Scope,
+                                             const char *Name, size_t NameLen,
+                                             const char *Linkage, size_t LnkLen,
+                                             LLVMMetadataRef File,
+                                             unsigned LineNo,
+                                             LLVMMetadataRef Ty,
+                                             LLVMBool LocalToUnit,
+                                             LLVMMetadataRef Decl,
+                                             uint32_t AlignInBits);
+
+/**
+ * Insert a new llvm.dbg.declare intrinsic call before the given instruction.
+ * \param Builder     The DIBuilder.
+ * \param Storage     The storage of the variable to declare.
+ * \param VarInfo     The variable's debug info descriptor.
+ * \param Expr        A complex location expression for the variable.
+ * \param DebugLoc    Debug info location.
+ * \param Instr       Instruction acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDeclareBefore(
+  LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
+  LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMValueRef Instr);
+
+/**
+ * Insert a new llvm.dbg.declare intrinsic call at the end of the given basic
+ * block. If the basic block has a terminator instruction, the intrinsic is
+ * inserted before that terminator instruction.
+ * \param Builder     The DIBuilder.
+ * \param Storage     The storage of the variable to declare.
+ * \param VarInfo     The variable's debug info descriptor.
+ * \param Expr        A complex location expression for the variable.
+ * \param DebugLoc    Debug info location.
+ * \param Block       Basic block acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDeclareAtEnd(
+    LLVMDIBuilderRef Builder, LLVMValueRef Storage, LLVMMetadataRef VarInfo,
+    LLVMMetadataRef Expr, LLVMMetadataRef DebugLoc, LLVMBasicBlockRef Block);
+
+/**
+ * Insert a new llvm.dbg.value intrinsic call before the given instruction.
+ * \param Builder     The DIBuilder.
+ * \param Val         The value of the variable.
+ * \param VarInfo     The variable's debug info descriptor.
+ * \param Expr        A complex location expression for the variable.
+ * \param DebugLoc    Debug info location.
+ * \param Instr       Instruction acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDbgValueBefore(LLVMDIBuilderRef Builder,
+                                               LLVMValueRef Val,
+                                               LLVMMetadataRef VarInfo,
+                                               LLVMMetadataRef Expr,
+                                               LLVMMetadataRef DebugLoc,
+                                               LLVMValueRef Instr);
+
+/**
+ * Insert a new llvm.dbg.value intrinsic call at the end of the given basic
+ * block. If the basic block has a terminator instruction, the intrinsic is
+ * inserted before that terminator instruction.
+ * \param Builder     The DIBuilder.
+ * \param Val         The value of the variable.
+ * \param VarInfo     The variable's debug info descriptor.
+ * \param Expr        A complex location expression for the variable.
+ * \param DebugLoc    Debug info location.
+ * \param Block       Basic block acting as a location for the new intrinsic.
+ */
+LLVMValueRef LLVMDIBuilderInsertDbgValueAtEnd(LLVMDIBuilderRef Builder,
+                                              LLVMValueRef Val,
+                                              LLVMMetadataRef VarInfo,
+                                              LLVMMetadataRef Expr,
+                                              LLVMMetadataRef DebugLoc,
+                                              LLVMBasicBlockRef Block);
+
+/**
+ * Create a new descriptor for a local auto variable.
+ * \param Builder         The DIBuilder.
+ * \param Scope           The local scope the variable is declared in.
+ * \param Name            Variable name.
+ * \param NameLen         Length of variable name.
+ * \param File            File where this variable is defined.
+ * \param LineNo          Line number.
+ * \param Ty              Metadata describing the type of the variable.
+ * \param AlwaysPreserve  If true, this descriptor will survive optimizations.
+ * \param Flags           Flags.
+ * \param AlignInBits     Variable alignment.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateAutoVariable(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, LLVMMetadataRef File, unsigned LineNo, LLVMMetadataRef Ty,
+    LLVMBool AlwaysPreserve, LLVMDIFlags Flags, uint32_t AlignInBits);
+
+/**
+ * Create a new descriptor for a function parameter variable.
+ * \param Builder         The DIBuilder.
+ * \param Scope           The local scope the variable is declared in.
+ * \param Name            Variable name.
+ * \param NameLen         Length of variable name.
+ * \param ArgNo           Unique argument number for this variable; starts at 1.
+ * \param File            File where this variable is defined.
+ * \param LineNo          Line number.
+ * \param Ty              Metadata describing the type of the variable.
+ * \param AlwaysPreserve  If true, this descriptor will survive optimizations.
+ * \param Flags           Flags.
+ */
+LLVMMetadataRef LLVMDIBuilderCreateParameterVariable(
+    LLVMDIBuilderRef Builder, LLVMMetadataRef Scope, const char *Name,
+    size_t NameLen, unsigned ArgNo, LLVMMetadataRef File, unsigned LineNo,
+    LLVMMetadataRef Ty, LLVMBool AlwaysPreserve, LLVMDIFlags Flags);
+
+/**
+ * Get the metadata of the subprogram attached to a function.
+ *
+ * @see llvm::Function::getSubprogram()
+ */
+LLVMMetadataRef LLVMGetSubprogram(LLVMValueRef Func);
+
+/**
+ * Set the subprogram attached to a function.
+ *
+ * @see llvm::Function::setSubprogram()
+ */
+void LLVMSetSubprogram(LLVMValueRef Func, LLVMMetadataRef SP);
+
 #ifdef __cplusplus
 } /* end extern "C" */
 #endif
diff --git a/linux-x64/clang/include/llvm-c/ExecutionEngine.h b/linux-x64/clang/include/llvm-c/ExecutionEngine.h
index 51830fe..49ae6fe 100644
--- a/linux-x64/clang/include/llvm-c/ExecutionEngine.h
+++ b/linux-x64/clang/include/llvm-c/ExecutionEngine.h
@@ -182,6 +182,13 @@
 
 void LLVMDisposeMCJITMemoryManager(LLVMMCJITMemoryManagerRef MM);
 
+/*===-- JIT Event Listener functions -------------------------------------===*/
+
+LLVMJITEventListenerRef LLVMCreateGDBRegistrationListener(void);
+LLVMJITEventListenerRef LLVMCreateIntelJITEventListener(void);
+LLVMJITEventListenerRef LLVMCreateOprofileJITEventListener(void);
+LLVMJITEventListenerRef LLVMCreatePerfJITEventListener(void);
+
 /**
  * @}
  */
diff --git a/linux-x64/clang/include/llvm-c/Initialization.h b/linux-x64/clang/include/llvm-c/Initialization.h
index 90c8396..e45eafb 100644
--- a/linux-x64/clang/include/llvm-c/Initialization.h
+++ b/linux-x64/clang/include/llvm-c/Initialization.h
@@ -37,6 +37,7 @@
 void LLVMInitializeObjCARCOpts(LLVMPassRegistryRef R);
 void LLVMInitializeVectorization(LLVMPassRegistryRef R);
 void LLVMInitializeInstCombine(LLVMPassRegistryRef R);
+void LLVMInitializeAggressiveInstCombiner(LLVMPassRegistryRef R);
 void LLVMInitializeIPO(LLVMPassRegistryRef R);
 void LLVMInitializeInstrumentation(LLVMPassRegistryRef R);
 void LLVMInitializeAnalysis(LLVMPassRegistryRef R);
diff --git a/linux-x64/clang/include/llvm-c/OrcBindings.h b/linux-x64/clang/include/llvm-c/OrcBindings.h
index d2e2e7d..9497f0d 100644
--- a/linux-x64/clang/include/llvm-c/OrcBindings.h
+++ b/linux-x64/clang/include/llvm-c/OrcBindings.h
@@ -141,10 +141,33 @@
                                          const char *SymbolName);
 
 /**
+ * Get symbol address from JIT instance, searching only the specified
+ * handle.
+ */
+LLVMOrcErrorCode LLVMOrcGetSymbolAddressIn(LLVMOrcJITStackRef JITStack,
+                                           LLVMOrcTargetAddress *RetAddr,
+                                           LLVMOrcModuleHandle H,
+                                           const char *SymbolName);
+
+/**
  * Dispose of an ORC JIT stack.
  */
 LLVMOrcErrorCode LLVMOrcDisposeInstance(LLVMOrcJITStackRef JITStack);
 
+/**
+ * Register a JIT Event Listener.
+ *
+ * A NULL listener is ignored.
+ */
+void LLVMOrcRegisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L);
+
+/**
+ * Unegister a JIT Event Listener.
+ *
+ * A NULL listener is ignored.
+ */
+void LLVMOrcUnregisterJITEventListener(LLVMOrcJITStackRef JITStack, LLVMJITEventListenerRef L);
+
 #ifdef __cplusplus
 }
 #endif /* extern "C" */
diff --git a/linux-x64/clang/include/llvm-c/TargetMachine.h b/linux-x64/clang/include/llvm-c/TargetMachine.h
index f4f7f76..7f672b5 100644
--- a/linux-x64/clang/include/llvm-c/TargetMachine.h
+++ b/linux-x64/clang/include/llvm-c/TargetMachine.h
@@ -137,6 +137,18 @@
   disposed with LLVMDisposeMessage. */
 char* LLVMGetDefaultTargetTriple(void);
 
+/** Normalize a target triple. The result needs to be disposed with
+  LLVMDisposeMessage. */
+char* LLVMNormalizeTargetTriple(const char* triple);
+
+/** Get the host CPU as a string. The result needs to be disposed with
+  LLVMDisposeMessage. */
+char* LLVMGetHostCPUName(void);
+
+/** Get the host CPU's features as a string. The result needs to be disposed
+  with LLVMDisposeMessage. */
+char* LLVMGetHostCPUFeatures(void);
+
 /** Adds the target-specific analysis passes to the pass manager. */
 void LLVMAddAnalysisPasses(LLVMTargetMachineRef T, LLVMPassManagerRef PM);
 
diff --git a/linux-x64/clang/include/llvm-c/Transforms/InstCombine.h b/linux-x64/clang/include/llvm-c/Transforms/InstCombine.h
new file mode 100644
index 0000000..e1c1572
--- /dev/null
+++ b/linux-x64/clang/include/llvm-c/Transforms/InstCombine.h
@@ -0,0 +1,43 @@
+/*===-- Scalar.h - Scalar Transformation Library C Interface ----*- C++ -*-===*\
+|*                                                                            *|
+|*                     The LLVM Compiler Infrastructure                       *|
+|*                                                                            *|
+|* This file is distributed under the University of Illinois Open Source      *|
+|* License. See LICENSE.TXT for details.                                      *|
+|*                                                                            *|
+|*===----------------------------------------------------------------------===*|
+|*                                                                            *|
+|* This header declares the C interface to libLLVMInstCombine.a, which        *|
+|* combines instructions to form fewer, simple IR instructions.               *|
+|*                                                                            *|
+\*===----------------------------------------------------------------------===*/
+
+#ifndef LLVM_C_TRANSFORMS_INSTCOMBINE_H
+#define LLVM_C_TRANSFORMS_INSTCOMBINE_H
+
+#include "llvm-c/Types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @defgroup LLVMCTransformsInstCombine Instruction Combining transformations
+ * @ingroup LLVMCTransforms
+ *
+ * @{
+ */
+
+/** See llvm::createInstructionCombiningPass function. */
+void LLVMAddInstructionCombiningPass(LLVMPassManagerRef PM);
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif /* defined(__cplusplus) */
+
+#endif
+
diff --git a/linux-x64/clang/include/llvm-c/Transforms/Scalar.h b/linux-x64/clang/include/llvm-c/Transforms/Scalar.h
index c828813..f55cdce 100644
--- a/linux-x64/clang/include/llvm-c/Transforms/Scalar.h
+++ b/linux-x64/clang/include/llvm-c/Transforms/Scalar.h
@@ -35,6 +35,9 @@
 /** See llvm::createAggressiveDCEPass function. */
 void LLVMAddAggressiveDCEPass(LLVMPassManagerRef PM);
 
+/** See llvm::createAggressiveInstCombinerPass function. */
+void LLVMAddAggressiveInstCombinerPass(LLVMPassManagerRef PM);
+
 /** See llvm::createBitTrackingDCEPass function. */
 void LLVMAddBitTrackingDCEPass(LLVMPassManagerRef PM);
 
@@ -86,6 +89,9 @@
 /** See llvm::createLoopUnrollPass function. */
 void LLVMAddLoopUnrollPass(LLVMPassManagerRef PM);
 
+/** See llvm::createLoopUnrollAndJamPass function. */
+void LLVMAddLoopUnrollAndJamPass(LLVMPassManagerRef PM);
+
 /** See llvm::createLoopUnswitchPass function. */
 void LLVMAddLoopUnswitchPass(LLVMPassManagerRef PM);
 
diff --git a/linux-x64/clang/include/llvm-c/Transforms/Vectorize.h b/linux-x64/clang/include/llvm-c/Transforms/Vectorize.h
index cf8306a..e3f9961 100644
--- a/linux-x64/clang/include/llvm-c/Transforms/Vectorize.h
+++ b/linux-x64/clang/include/llvm-c/Transforms/Vectorize.h
@@ -33,9 +33,6 @@
  * @{
  */
 
-/** DEPRECATED - Use LLVMAddSLPVectorizePass */
-void LLVMAddBBVectorizePass(LLVMPassManagerRef PM);
-
 /** See llvm::createLoopVectorizePass function. */
 void LLVMAddLoopVectorizePass(LLVMPassManagerRef PM);
 
diff --git a/linux-x64/clang/include/llvm-c/Types.h b/linux-x64/clang/include/llvm-c/Types.h
index 1793400..4a33542 100644
--- a/linux-x64/clang/include/llvm-c/Types.h
+++ b/linux-x64/clang/include/llvm-c/Types.h
@@ -140,6 +140,16 @@
 typedef struct LLVMComdat *LLVMComdatRef;
 
 /**
+ * @see llvm::Module::ModuleFlagEntry
+ */
+typedef struct LLVMOpaqueModuleFlagEntry LLVMModuleFlagEntry;
+
+/**
+ * @see llvm::JITEventListener
+ */
+typedef struct LLVMOpaqueJITEventListener *LLVMJITEventListenerRef;
+
+/**
  * @}
  */
 
diff --git a/linux-x64/clang/include/llvm-c/lto.h b/linux-x64/clang/include/llvm-c/lto.h
index 65d172d..1acd610 100644
--- a/linux-x64/clang/include/llvm-c/lto.h
+++ b/linux-x64/clang/include/llvm-c/lto.h
@@ -190,7 +190,7 @@
                                         const char *path);
 
 /**
- * \brief Loads an object file in its own context.
+ * Loads an object file in its own context.
  *
  * Loads an object file in its own LLVMContext.  This function call is
  * thread-safe.  However, modules created this way should not be merged into an
@@ -205,7 +205,7 @@
                                    const char *path);
 
 /**
- * \brief Loads an object file in the codegen context.
+ * Loads an object file in the codegen context.
  *
  * Loads an object file into the same context as \c cg.  The module is safe to
  * add using \a lto_codegen_add_module().
@@ -345,7 +345,7 @@
 lto_codegen_create(void);
 
 /**
- * \brief Instantiate a code generator in its own context.
+ * Instantiate a code generator in its own context.
  *
  * Instantiates a code generator in its own context.  Modules added via \a
  * lto_codegen_add_module() must have all been created in the same context,
@@ -539,7 +539,7 @@
                                    lto_bool_t ShouldInternalize);
 
 /**
- * \brief Set whether to embed uselists in bitcode.
+ * Set whether to embed uselists in bitcode.
  *
  * Sets whether \a lto_codegen_write_merged_modules() should embed uselists in
  * output bitcode.  This should be turned on for all -save-temps output.
diff --git a/linux-x64/clang/include/llvm/ADT/APFloat.h b/linux-x64/clang/include/llvm/ADT/APFloat.h
index 6c0b6ae..5c59af4 100644
--- a/linux-x64/clang/include/llvm/ADT/APFloat.h
+++ b/linux-x64/clang/include/llvm/ADT/APFloat.h
@@ -1215,7 +1215,7 @@
   return X;
 }
 
-/// \brief Returns the negated value of the argument.
+/// Returns the negated value of the argument.
 inline APFloat neg(APFloat X) {
   X.changeSign();
   return X;
diff --git a/linux-x64/clang/include/llvm/ADT/APInt.h b/linux-x64/clang/include/llvm/ADT/APInt.h
index 118c62e..684a257 100644
--- a/linux-x64/clang/include/llvm/ADT/APInt.h
+++ b/linux-x64/clang/include/llvm/ADT/APInt.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file implements a class to represent arbitrary precision
+/// This file implements a class to represent arbitrary precision
 /// integral constant values and operations on them.
 ///
 //===----------------------------------------------------------------------===//
@@ -31,6 +31,7 @@
 
 template <typename T> class SmallVectorImpl;
 template <typename T> class ArrayRef;
+template <typename T> class Optional;
 
 class APInt;
 
@@ -40,7 +41,7 @@
 //                              APInt Class
 //===----------------------------------------------------------------------===//
 
-/// \brief Class for arbitrary precision integers.
+/// Class for arbitrary precision integers.
 ///
 /// APInt is a functional replacement for common case unsigned integer type like
 /// "unsigned", "unsigned long" or "uint64_t", but also allows non-byte-width
@@ -78,6 +79,12 @@
     APINT_BITS_PER_WORD = APINT_WORD_SIZE * CHAR_BIT
   };
 
+  enum class Rounding {
+    DOWN,
+    TOWARD_ZERO,
+    UP,
+  };
+
   static const WordType WORD_MAX = ~WordType(0);
 
 private:
@@ -94,7 +101,7 @@
 
   friend class APSInt;
 
-  /// \brief Fast internal constructor
+  /// Fast internal constructor
   ///
   /// This constructor is used only internally for speed of construction of
   /// temporaries. It is unsafe for general use so it is not public.
@@ -102,19 +109,19 @@
     U.pVal = val;
   }
 
-  /// \brief Determine if this APInt just has one word to store value.
+  /// Determine if this APInt just has one word to store value.
   ///
   /// \returns true if the number of bits <= 64, false otherwise.
   bool isSingleWord() const { return BitWidth <= APINT_BITS_PER_WORD; }
 
-  /// \brief Determine which word a bit is in.
+  /// Determine which word a bit is in.
   ///
   /// \returns the word position for the specified bit position.
   static unsigned whichWord(unsigned bitPosition) {
     return bitPosition / APINT_BITS_PER_WORD;
   }
 
-  /// \brief Determine which bit in a word a bit is in.
+  /// Determine which bit in a word a bit is in.
   ///
   /// \returns the bit position in a word for the specified bit position
   /// in the APInt.
@@ -122,7 +129,7 @@
     return bitPosition % APINT_BITS_PER_WORD;
   }
 
-  /// \brief Get a single bit mask.
+  /// Get a single bit mask.
   ///
   /// \returns a uint64_t with only bit at "whichBit(bitPosition)" set
   /// This method generates and returns a uint64_t (word) mask for a single
@@ -132,7 +139,7 @@
     return 1ULL << whichBit(bitPosition);
   }
 
-  /// \brief Clear unused high order bits
+  /// Clear unused high order bits
   ///
   /// This method is used internally to clear the top "N" bits in the high order
   /// word that are not used by the APInt. This is needed after the most
@@ -151,7 +158,7 @@
     return *this;
   }
 
-  /// \brief Get the word corresponding to a bit position
+  /// Get the word corresponding to a bit position
   /// \returns the corresponding word for the specified bit position.
   uint64_t getWord(unsigned bitPosition) const {
     return isSingleWord() ? U.VAL : U.pVal[whichWord(bitPosition)];
@@ -162,7 +169,7 @@
   /// value of any bits upon return. Caller should populate the bits after.
   void reallocate(unsigned NewBitWidth);
 
-  /// \brief Convert a char array into an APInt
+  /// Convert a char array into an APInt
   ///
   /// \param radix 2, 8, 10, 16, or 36
   /// Converts a string into a number.  The string must be non-empty
@@ -176,7 +183,7 @@
   /// result to hold the input.
   void fromString(unsigned numBits, StringRef str, uint8_t radix);
 
-  /// \brief An internal division function for dividing APInts.
+  /// An internal division function for dividing APInts.
   ///
   /// This is used by the toString method to divide by the radix. It simply
   /// provides a more convenient form of divide for internal use since KnuthDiv
@@ -258,7 +265,7 @@
   /// \name Constructors
   /// @{
 
-  /// \brief Create a new APInt of numBits width, initialized as val.
+  /// Create a new APInt of numBits width, initialized as val.
   ///
   /// If isSigned is true then val is treated as if it were a signed value
   /// (i.e. as an int64_t) and the appropriate sign extension to the bit width
@@ -279,7 +286,7 @@
     }
   }
 
-  /// \brief Construct an APInt of numBits width, initialized as bigVal[].
+  /// Construct an APInt of numBits width, initialized as bigVal[].
   ///
   /// Note that bigVal.size() can be smaller or larger than the corresponding
   /// bit width but any extraneous bits will be dropped.
@@ -297,7 +304,7 @@
   /// constructor.
   APInt(unsigned numBits, unsigned numWords, const uint64_t bigVal[]);
 
-  /// \brief Construct an APInt from a string representation.
+  /// Construct an APInt from a string representation.
   ///
   /// This constructor interprets the string \p str in the given radix. The
   /// interpretation stops when the first character that is not suitable for the
@@ -311,7 +318,7 @@
   APInt(unsigned numBits, StringRef str, uint8_t radix);
 
   /// Simply makes *this a copy of that.
-  /// @brief Copy Constructor.
+  /// Copy Constructor.
   APInt(const APInt &that) : BitWidth(that.BitWidth) {
     if (isSingleWord())
       U.VAL = that.U.VAL;
@@ -319,26 +326,26 @@
       initSlowCase(that);
   }
 
-  /// \brief Move Constructor.
+  /// Move Constructor.
   APInt(APInt &&that) : BitWidth(that.BitWidth) {
     memcpy(&U, &that.U, sizeof(U));
     that.BitWidth = 0;
   }
 
-  /// \brief Destructor.
+  /// Destructor.
   ~APInt() {
     if (needsCleanup())
       delete[] U.pVal;
   }
 
-  /// \brief Default constructor that creates an uninteresting APInt
+  /// Default constructor that creates an uninteresting APInt
   /// representing a 1-bit zero value.
   ///
   /// This is useful for object deserialization (pair this with the static
   ///  method Read).
   explicit APInt() : BitWidth(1) { U.VAL = 0; }
 
-  /// \brief Returns whether this instance allocated memory.
+  /// Returns whether this instance allocated memory.
   bool needsCleanup() const { return !isSingleWord(); }
 
   /// Used to insert APInt objects, or objects that contain APInt objects, into
@@ -349,33 +356,33 @@
   /// \name Value Tests
   /// @{
 
-  /// \brief Determine sign of this APInt.
+  /// Determine sign of this APInt.
   ///
   /// This tests the high bit of this APInt to determine if it is set.
   ///
   /// \returns true if this APInt is negative, false otherwise
   bool isNegative() const { return (*this)[BitWidth - 1]; }
 
-  /// \brief Determine if this APInt Value is non-negative (>= 0)
+  /// Determine if this APInt Value is non-negative (>= 0)
   ///
   /// This tests the high bit of the APInt to determine if it is unset.
   bool isNonNegative() const { return !isNegative(); }
 
-  /// \brief Determine if sign bit of this APInt is set.
+  /// Determine if sign bit of this APInt is set.
   ///
   /// This tests the high bit of this APInt to determine if it is set.
   ///
   /// \returns true if this APInt has its sign bit set, false otherwise.
   bool isSignBitSet() const { return (*this)[BitWidth-1]; }
 
-  /// \brief Determine if sign bit of this APInt is clear.
+  /// Determine if sign bit of this APInt is clear.
   ///
   /// This tests the high bit of this APInt to determine if it is clear.
   ///
   /// \returns true if this APInt has its sign bit clear, false otherwise.
   bool isSignBitClear() const { return !isSignBitSet(); }
 
-  /// \brief Determine if this APInt Value is positive.
+  /// Determine if this APInt Value is positive.
   ///
   /// This tests if the value of this APInt is positive (> 0). Note
   /// that 0 is not a positive value.
@@ -383,7 +390,7 @@
   /// \returns true if this APInt is positive.
   bool isStrictlyPositive() const { return isNonNegative() && !isNullValue(); }
 
-  /// \brief Determine if all bits are set
+  /// Determine if all bits are set
   ///
   /// This checks to see if the value has all bits of the APInt are set or not.
   bool isAllOnesValue() const {
@@ -392,13 +399,13 @@
     return countTrailingOnesSlowCase() == BitWidth;
   }
 
-  /// \brief Determine if all bits are clear
+  /// Determine if all bits are clear
   ///
   /// This checks to see if the value has all bits of the APInt are clear or
   /// not.
   bool isNullValue() const { return !*this; }
 
-  /// \brief Determine if this is a value of 1.
+  /// Determine if this is a value of 1.
   ///
   /// This checks to see if the value of this APInt is one.
   bool isOneValue() const {
@@ -407,13 +414,13 @@
     return countLeadingZerosSlowCase() == BitWidth - 1;
   }
 
-  /// \brief Determine if this is the largest unsigned value.
+  /// Determine if this is the largest unsigned value.
   ///
   /// This checks to see if the value of this APInt is the maximum unsigned
   /// value for the APInt's bit width.
   bool isMaxValue() const { return isAllOnesValue(); }
 
-  /// \brief Determine if this is the largest signed value.
+  /// Determine if this is the largest signed value.
   ///
   /// This checks to see if the value of this APInt is the maximum signed
   /// value for the APInt's bit width.
@@ -423,13 +430,13 @@
     return !isNegative() && countTrailingOnesSlowCase() == BitWidth - 1;
   }
 
-  /// \brief Determine if this is the smallest unsigned value.
+  /// Determine if this is the smallest unsigned value.
   ///
   /// This checks to see if the value of this APInt is the minimum unsigned
   /// value for the APInt's bit width.
   bool isMinValue() const { return isNullValue(); }
 
-  /// \brief Determine if this is the smallest signed value.
+  /// Determine if this is the smallest signed value.
   ///
   /// This checks to see if the value of this APInt is the minimum signed
   /// value for the APInt's bit width.
@@ -439,19 +446,19 @@
     return isNegative() && countTrailingZerosSlowCase() == BitWidth - 1;
   }
 
-  /// \brief Check if this APInt has an N-bits unsigned integer value.
+  /// Check if this APInt has an N-bits unsigned integer value.
   bool isIntN(unsigned N) const {
     assert(N && "N == 0 ???");
     return getActiveBits() <= N;
   }
 
-  /// \brief Check if this APInt has an N-bits signed integer value.
+  /// Check if this APInt has an N-bits signed integer value.
   bool isSignedIntN(unsigned N) const {
     assert(N && "N == 0 ???");
     return getMinSignedBits() <= N;
   }
 
-  /// \brief Check if this APInt's value is a power of two greater than zero.
+  /// Check if this APInt's value is a power of two greater than zero.
   ///
   /// \returns true if the argument APInt value is a power of two > 0.
   bool isPowerOf2() const {
@@ -460,12 +467,12 @@
     return countPopulationSlowCase() == 1;
   }
 
-  /// \brief Check if the APInt's value is returned by getSignMask.
+  /// Check if the APInt's value is returned by getSignMask.
   ///
   /// \returns true if this is the value returned by getSignMask.
   bool isSignMask() const { return isMinSignedValue(); }
 
-  /// \brief Convert APInt to a boolean value.
+  /// Convert APInt to a boolean value.
   ///
   /// This converts the APInt to a boolean value as a test against zero.
   bool getBoolValue() const { return !!*this; }
@@ -476,7 +483,7 @@
     return ugt(Limit) ? Limit : getZExtValue();
   }
 
-  /// \brief Check if the APInt consists of a repeated bit pattern.
+  /// Check if the APInt consists of a repeated bit pattern.
   ///
   /// e.g. 0x01010101 satisfies isSplat(8).
   /// \param SplatSizeInBits The size of the pattern in bits. Must divide bit
@@ -505,7 +512,7 @@
     return (Ones > 0) && ((Ones + countLeadingZerosSlowCase()) == BitWidth);
   }
 
-  /// \brief Return true if this APInt value contains a sequence of ones with
+  /// Return true if this APInt value contains a sequence of ones with
   /// the remainder zero.
   bool isShiftedMask() const {
     if (isSingleWord())
@@ -519,29 +526,29 @@
   /// \name Value Generators
   /// @{
 
-  /// \brief Gets maximum unsigned value of APInt for specific bit width.
+  /// Gets maximum unsigned value of APInt for specific bit width.
   static APInt getMaxValue(unsigned numBits) {
     return getAllOnesValue(numBits);
   }
 
-  /// \brief Gets maximum signed value of APInt for a specific bit width.
+  /// Gets maximum signed value of APInt for a specific bit width.
   static APInt getSignedMaxValue(unsigned numBits) {
     APInt API = getAllOnesValue(numBits);
     API.clearBit(numBits - 1);
     return API;
   }
 
-  /// \brief Gets minimum unsigned value of APInt for a specific bit width.
+  /// Gets minimum unsigned value of APInt for a specific bit width.
   static APInt getMinValue(unsigned numBits) { return APInt(numBits, 0); }
 
-  /// \brief Gets minimum signed value of APInt for a specific bit width.
+  /// Gets minimum signed value of APInt for a specific bit width.
   static APInt getSignedMinValue(unsigned numBits) {
     APInt API(numBits, 0);
     API.setBit(numBits - 1);
     return API;
   }
 
-  /// \brief Get the SignMask for a specific bit width.
+  /// Get the SignMask for a specific bit width.
   ///
   /// This is just a wrapper function of getSignedMinValue(), and it helps code
   /// readability when we want to get a SignMask.
@@ -549,19 +556,19 @@
     return getSignedMinValue(BitWidth);
   }
 
-  /// \brief Get the all-ones value.
+  /// Get the all-ones value.
   ///
   /// \returns the all-ones value for an APInt of the specified bit-width.
   static APInt getAllOnesValue(unsigned numBits) {
     return APInt(numBits, WORD_MAX, true);
   }
 
-  /// \brief Get the '0' value.
+  /// Get the '0' value.
   ///
   /// \returns the '0' value for an APInt of the specified bit-width.
   static APInt getNullValue(unsigned numBits) { return APInt(numBits, 0); }
 
-  /// \brief Compute an APInt containing numBits highbits from this APInt.
+  /// Compute an APInt containing numBits highbits from this APInt.
   ///
   /// Get an APInt with the same BitWidth as this APInt, just zero mask
   /// the low bits and right shift to the least significant bit.
@@ -569,7 +576,7 @@
   /// \returns the high "numBits" bits of this APInt.
   APInt getHiBits(unsigned numBits) const;
 
-  /// \brief Compute an APInt containing numBits lowbits from this APInt.
+  /// Compute an APInt containing numBits lowbits from this APInt.
   ///
   /// Get an APInt with the same BitWidth as this APInt, just zero mask
   /// the high bits.
@@ -577,14 +584,14 @@
   /// \returns the low "numBits" bits of this APInt.
   APInt getLoBits(unsigned numBits) const;
 
-  /// \brief Return an APInt with exactly one bit set in the result.
+  /// Return an APInt with exactly one bit set in the result.
   static APInt getOneBitSet(unsigned numBits, unsigned BitNo) {
     APInt Res(numBits, 0);
     Res.setBit(BitNo);
     return Res;
   }
 
-  /// \brief Get a value with a block of bits set.
+  /// Get a value with a block of bits set.
   ///
   /// Constructs an APInt value that has a contiguous range of bits set. The
   /// bits from loBit (inclusive) to hiBit (exclusive) will be set. All other
@@ -603,7 +610,7 @@
     return Res;
   }
 
-  /// \brief Get a value with upper bits starting at loBit set.
+  /// Get a value with upper bits starting at loBit set.
   ///
   /// Constructs an APInt value that has a contiguous range of bits set. The
   /// bits from loBit (inclusive) to numBits (exclusive) will be set. All other
@@ -620,7 +627,7 @@
     return Res;
   }
 
-  /// \brief Get a value with high bits set
+  /// Get a value with high bits set
   ///
   /// Constructs an APInt value that has the top hiBitsSet bits set.
   ///
@@ -632,7 +639,7 @@
     return Res;
   }
 
-  /// \brief Get a value with low bits set
+  /// Get a value with low bits set
   ///
   /// Constructs an APInt value that has the bottom loBitsSet bits set.
   ///
@@ -644,10 +651,10 @@
     return Res;
   }
 
-  /// \brief Return a value containing V broadcasted over NewLen bits.
+  /// Return a value containing V broadcasted over NewLen bits.
   static APInt getSplat(unsigned NewLen, const APInt &V);
 
-  /// \brief Determine if two APInts have the same value, after zero-extending
+  /// Determine if two APInts have the same value, after zero-extending
   /// one of them (if needed!) to ensure that the bit-widths match.
   static bool isSameValue(const APInt &I1, const APInt &I2) {
     if (I1.getBitWidth() == I2.getBitWidth())
@@ -659,7 +666,7 @@
     return I1.zext(I2.getBitWidth()) == I2;
   }
 
-  /// \brief Overload to compute a hash_code for an APInt value.
+  /// Overload to compute a hash_code for an APInt value.
   friend hash_code hash_value(const APInt &Arg);
 
   /// This function returns a pointer to the internal storage of the APInt.
@@ -675,7 +682,7 @@
   /// \name Unary Operators
   /// @{
 
-  /// \brief Postfix increment operator.
+  /// Postfix increment operator.
   ///
   /// Increments *this by 1.
   ///
@@ -686,12 +693,12 @@
     return API;
   }
 
-  /// \brief Prefix increment operator.
+  /// Prefix increment operator.
   ///
   /// \returns *this incremented by one
   APInt &operator++();
 
-  /// \brief Postfix decrement operator.
+  /// Postfix decrement operator.
   ///
   /// Decrements *this by 1.
   ///
@@ -702,12 +709,12 @@
     return API;
   }
 
-  /// \brief Prefix decrement operator.
+  /// Prefix decrement operator.
   ///
   /// \returns *this decremented by one.
   APInt &operator--();
 
-  /// \brief Logical negation operator.
+  /// Logical negation operator.
   ///
   /// Performs logical negation operation on this APInt.
   ///
@@ -722,7 +729,7 @@
   /// \name Assignment Operators
   /// @{
 
-  /// \brief Copy assignment operator.
+  /// Copy assignment operator.
   ///
   /// \returns *this after assignment of RHS.
   APInt &operator=(const APInt &RHS) {
@@ -737,8 +744,13 @@
     return *this;
   }
 
-  /// @brief Move assignment operator.
+  /// Move assignment operator.
   APInt &operator=(APInt &&that) {
+#ifdef _MSC_VER
+    // The MSVC std::shuffle implementation still does self-assignment.
+    if (this == &that)
+      return *this;
+#endif
     assert(this != &that && "Self-move not supported");
     if (!isSingleWord())
       delete[] U.pVal;
@@ -753,7 +765,7 @@
     return *this;
   }
 
-  /// \brief Assignment operator.
+  /// Assignment operator.
   ///
   /// The RHS value is assigned to *this. If the significant bits in RHS exceed
   /// the bit width, the excess bits are truncated. If the bit width is larger
@@ -771,7 +783,7 @@
     return *this;
   }
 
-  /// \brief Bitwise AND assignment operator.
+  /// Bitwise AND assignment operator.
   ///
   /// Performs a bitwise AND operation on this APInt and RHS. The result is
   /// assigned to *this.
@@ -786,7 +798,7 @@
     return *this;
   }
 
-  /// \brief Bitwise AND assignment operator.
+  /// Bitwise AND assignment operator.
   ///
   /// Performs a bitwise AND operation on this APInt and RHS. RHS is
   /// logically zero-extended or truncated to match the bit-width of
@@ -801,7 +813,7 @@
     return *this;
   }
 
-  /// \brief Bitwise OR assignment operator.
+  /// Bitwise OR assignment operator.
   ///
   /// Performs a bitwise OR operation on this APInt and RHS. The result is
   /// assigned *this;
@@ -816,7 +828,7 @@
     return *this;
   }
 
-  /// \brief Bitwise OR assignment operator.
+  /// Bitwise OR assignment operator.
   ///
   /// Performs a bitwise OR operation on this APInt and RHS. RHS is
   /// logically zero-extended or truncated to match the bit-width of
@@ -831,7 +843,7 @@
     return *this;
   }
 
-  /// \brief Bitwise XOR assignment operator.
+  /// Bitwise XOR assignment operator.
   ///
   /// Performs a bitwise XOR operation on this APInt and RHS. The result is
   /// assigned to *this.
@@ -846,7 +858,7 @@
     return *this;
   }
 
-  /// \brief Bitwise XOR assignment operator.
+  /// Bitwise XOR assignment operator.
   ///
   /// Performs a bitwise XOR operation on this APInt and RHS. RHS is
   /// logically zero-extended or truncated to match the bit-width of
@@ -861,7 +873,7 @@
     return *this;
   }
 
-  /// \brief Multiplication assignment operator.
+  /// Multiplication assignment operator.
   ///
   /// Multiplies this APInt by RHS and assigns the result to *this.
   ///
@@ -869,7 +881,7 @@
   APInt &operator*=(const APInt &RHS);
   APInt &operator*=(uint64_t RHS);
 
-  /// \brief Addition assignment operator.
+  /// Addition assignment operator.
   ///
   /// Adds RHS to *this and assigns the result to *this.
   ///
@@ -877,7 +889,7 @@
   APInt &operator+=(const APInt &RHS);
   APInt &operator+=(uint64_t RHS);
 
-  /// \brief Subtraction assignment operator.
+  /// Subtraction assignment operator.
   ///
   /// Subtracts RHS from *this and assigns the result to *this.
   ///
@@ -885,7 +897,7 @@
   APInt &operator-=(const APInt &RHS);
   APInt &operator-=(uint64_t RHS);
 
-  /// \brief Left-shift assignment function.
+  /// Left-shift assignment function.
   ///
   /// Shifts *this left by shiftAmt and assigns the result to *this.
   ///
@@ -903,7 +915,7 @@
     return *this;
   }
 
-  /// \brief Left-shift assignment function.
+  /// Left-shift assignment function.
   ///
   /// Shifts *this left by shiftAmt and assigns the result to *this.
   ///
@@ -914,22 +926,22 @@
   /// \name Binary Operators
   /// @{
 
-  /// \brief Multiplication operator.
+  /// Multiplication operator.
   ///
   /// Multiplies this APInt by RHS and returns the result.
   APInt operator*(const APInt &RHS) const;
 
-  /// \brief Left logical shift operator.
+  /// Left logical shift operator.
   ///
   /// Shifts this APInt left by \p Bits and returns the result.
   APInt operator<<(unsigned Bits) const { return shl(Bits); }
 
-  /// \brief Left logical shift operator.
+  /// Left logical shift operator.
   ///
   /// Shifts this APInt left by \p Bits and returns the result.
   APInt operator<<(const APInt &Bits) const { return shl(Bits); }
 
-  /// \brief Arithmetic right-shift function.
+  /// Arithmetic right-shift function.
   ///
   /// Arithmetic right-shift this APInt by shiftAmt.
   APInt ashr(unsigned ShiftAmt) const {
@@ -953,7 +965,7 @@
     ashrSlowCase(ShiftAmt);
   }
 
-  /// \brief Logical right-shift function.
+  /// Logical right-shift function.
   ///
   /// Logical right-shift this APInt by shiftAmt.
   APInt lshr(unsigned shiftAmt) const {
@@ -975,7 +987,7 @@
     lshrSlowCase(ShiftAmt);
   }
 
-  /// \brief Left-shift function.
+  /// Left-shift function.
   ///
   /// Left-shift this APInt by shiftAmt.
   APInt shl(unsigned shiftAmt) const {
@@ -984,13 +996,13 @@
     return R;
   }
 
-  /// \brief Rotate left by rotateAmt.
+  /// Rotate left by rotateAmt.
   APInt rotl(unsigned rotateAmt) const;
 
-  /// \brief Rotate right by rotateAmt.
+  /// Rotate right by rotateAmt.
   APInt rotr(unsigned rotateAmt) const;
 
-  /// \brief Arithmetic right-shift function.
+  /// Arithmetic right-shift function.
   ///
   /// Arithmetic right-shift this APInt by shiftAmt.
   APInt ashr(const APInt &ShiftAmt) const {
@@ -1002,7 +1014,7 @@
   /// Arithmetic right-shift this APInt by shiftAmt in place.
   void ashrInPlace(const APInt &shiftAmt);
 
-  /// \brief Logical right-shift function.
+  /// Logical right-shift function.
   ///
   /// Logical right-shift this APInt by shiftAmt.
   APInt lshr(const APInt &ShiftAmt) const {
@@ -1014,7 +1026,7 @@
   /// Logical right-shift this APInt by ShiftAmt in place.
   void lshrInPlace(const APInt &ShiftAmt);
 
-  /// \brief Left-shift function.
+  /// Left-shift function.
   ///
   /// Left-shift this APInt by shiftAmt.
   APInt shl(const APInt &ShiftAmt) const {
@@ -1023,28 +1035,31 @@
     return R;
   }
 
-  /// \brief Rotate left by rotateAmt.
+  /// Rotate left by rotateAmt.
   APInt rotl(const APInt &rotateAmt) const;
 
-  /// \brief Rotate right by rotateAmt.
+  /// Rotate right by rotateAmt.
   APInt rotr(const APInt &rotateAmt) const;
 
-  /// \brief Unsigned division operation.
+  /// Unsigned division operation.
   ///
   /// Perform an unsigned divide operation on this APInt by RHS. Both this and
   /// RHS are treated as unsigned quantities for purposes of this division.
   ///
-  /// \returns a new APInt value containing the division result
+  /// \returns a new APInt value containing the division result, rounded towards
+  /// zero.
   APInt udiv(const APInt &RHS) const;
   APInt udiv(uint64_t RHS) const;
 
-  /// \brief Signed division function for APInt.
+  /// Signed division function for APInt.
   ///
   /// Signed divide this APInt by APInt RHS.
+  ///
+  /// The result is rounded towards zero.
   APInt sdiv(const APInt &RHS) const;
   APInt sdiv(int64_t RHS) const;
 
-  /// \brief Unsigned remainder operation.
+  /// Unsigned remainder operation.
   ///
   /// Perform an unsigned remainder operation on this APInt with RHS being the
   /// divisor. Both this and RHS are treated as unsigned quantities for purposes
@@ -1056,13 +1071,13 @@
   APInt urem(const APInt &RHS) const;
   uint64_t urem(uint64_t RHS) const;
 
-  /// \brief Function for signed remainder operation.
+  /// Function for signed remainder operation.
   ///
   /// Signed remainder operation on APInt.
   APInt srem(const APInt &RHS) const;
   int64_t srem(int64_t RHS) const;
 
-  /// \brief Dual division/remainder interface.
+  /// Dual division/remainder interface.
   ///
   /// Sometimes it is convenient to divide two APInt values and obtain both the
   /// quotient and remainder. This function does both operations in the same
@@ -1090,7 +1105,7 @@
   APInt sshl_ov(const APInt &Amt, bool &Overflow) const;
   APInt ushl_ov(const APInt &Amt, bool &Overflow) const;
 
-  /// \brief Array-indexing support.
+  /// Array-indexing support.
   ///
   /// \returns the bit value at bitPosition
   bool operator[](unsigned bitPosition) const {
@@ -1102,7 +1117,7 @@
   /// \name Comparison Operators
   /// @{
 
-  /// \brief Equality operator.
+  /// Equality operator.
   ///
   /// Compares this APInt with RHS for the validity of the equality
   /// relationship.
@@ -1113,7 +1128,7 @@
     return EqualSlowCase(RHS);
   }
 
-  /// \brief Equality operator.
+  /// Equality operator.
   ///
   /// Compares this APInt with a uint64_t for the validity of the equality
   /// relationship.
@@ -1123,7 +1138,7 @@
     return (isSingleWord() || getActiveBits() <= 64) && getZExtValue() == Val;
   }
 
-  /// \brief Equality comparison.
+  /// Equality comparison.
   ///
   /// Compares this APInt with RHS for the validity of the equality
   /// relationship.
@@ -1131,7 +1146,7 @@
   /// \returns true if *this == Val
   bool eq(const APInt &RHS) const { return (*this) == RHS; }
 
-  /// \brief Inequality operator.
+  /// Inequality operator.
   ///
   /// Compares this APInt with RHS for the validity of the inequality
   /// relationship.
@@ -1139,7 +1154,7 @@
   /// \returns true if *this != Val
   bool operator!=(const APInt &RHS) const { return !((*this) == RHS); }
 
-  /// \brief Inequality operator.
+  /// Inequality operator.
   ///
   /// Compares this APInt with a uint64_t for the validity of the inequality
   /// relationship.
@@ -1147,7 +1162,7 @@
   /// \returns true if *this != Val
   bool operator!=(uint64_t Val) const { return !((*this) == Val); }
 
-  /// \brief Inequality comparison
+  /// Inequality comparison
   ///
   /// Compares this APInt with RHS for the validity of the inequality
   /// relationship.
@@ -1155,7 +1170,7 @@
   /// \returns true if *this != Val
   bool ne(const APInt &RHS) const { return !((*this) == RHS); }
 
-  /// \brief Unsigned less than comparison
+  /// Unsigned less than comparison
   ///
   /// Regards both *this and RHS as unsigned quantities and compares them for
   /// the validity of the less-than relationship.
@@ -1163,7 +1178,7 @@
   /// \returns true if *this < RHS when both are considered unsigned.
   bool ult(const APInt &RHS) const { return compare(RHS) < 0; }
 
-  /// \brief Unsigned less than comparison
+  /// Unsigned less than comparison
   ///
   /// Regards both *this as an unsigned quantity and compares it with RHS for
   /// the validity of the less-than relationship.
@@ -1174,7 +1189,7 @@
     return (isSingleWord() || getActiveBits() <= 64) && getZExtValue() < RHS;
   }
 
-  /// \brief Signed less than comparison
+  /// Signed less than comparison
   ///
   /// Regards both *this and RHS as signed quantities and compares them for
   /// validity of the less-than relationship.
@@ -1182,7 +1197,7 @@
   /// \returns true if *this < RHS when both are considered signed.
   bool slt(const APInt &RHS) const { return compareSigned(RHS) < 0; }
 
-  /// \brief Signed less than comparison
+  /// Signed less than comparison
   ///
   /// Regards both *this as a signed quantity and compares it with RHS for
   /// the validity of the less-than relationship.
@@ -1193,7 +1208,7 @@
                                                         : getSExtValue() < RHS;
   }
 
-  /// \brief Unsigned less or equal comparison
+  /// Unsigned less or equal comparison
   ///
   /// Regards both *this and RHS as unsigned quantities and compares them for
   /// validity of the less-or-equal relationship.
@@ -1201,7 +1216,7 @@
   /// \returns true if *this <= RHS when both are considered unsigned.
   bool ule(const APInt &RHS) const { return compare(RHS) <= 0; }
 
-  /// \brief Unsigned less or equal comparison
+  /// Unsigned less or equal comparison
   ///
   /// Regards both *this as an unsigned quantity and compares it with RHS for
   /// the validity of the less-or-equal relationship.
@@ -1209,7 +1224,7 @@
   /// \returns true if *this <= RHS when considered unsigned.
   bool ule(uint64_t RHS) const { return !ugt(RHS); }
 
-  /// \brief Signed less or equal comparison
+  /// Signed less or equal comparison
   ///
   /// Regards both *this and RHS as signed quantities and compares them for
   /// validity of the less-or-equal relationship.
@@ -1217,7 +1232,7 @@
   /// \returns true if *this <= RHS when both are considered signed.
   bool sle(const APInt &RHS) const { return compareSigned(RHS) <= 0; }
 
-  /// \brief Signed less or equal comparison
+  /// Signed less or equal comparison
   ///
   /// Regards both *this as a signed quantity and compares it with RHS for the
   /// validity of the less-or-equal relationship.
@@ -1225,7 +1240,7 @@
   /// \returns true if *this <= RHS when considered signed.
   bool sle(uint64_t RHS) const { return !sgt(RHS); }
 
-  /// \brief Unsigned greather than comparison
+  /// Unsigned greather than comparison
   ///
   /// Regards both *this and RHS as unsigned quantities and compares them for
   /// the validity of the greater-than relationship.
@@ -1233,7 +1248,7 @@
   /// \returns true if *this > RHS when both are considered unsigned.
   bool ugt(const APInt &RHS) const { return !ule(RHS); }
 
-  /// \brief Unsigned greater than comparison
+  /// Unsigned greater than comparison
   ///
   /// Regards both *this as an unsigned quantity and compares it with RHS for
   /// the validity of the greater-than relationship.
@@ -1244,7 +1259,7 @@
     return (!isSingleWord() && getActiveBits() > 64) || getZExtValue() > RHS;
   }
 
-  /// \brief Signed greather than comparison
+  /// Signed greather than comparison
   ///
   /// Regards both *this and RHS as signed quantities and compares them for the
   /// validity of the greater-than relationship.
@@ -1252,7 +1267,7 @@
   /// \returns true if *this > RHS when both are considered signed.
   bool sgt(const APInt &RHS) const { return !sle(RHS); }
 
-  /// \brief Signed greater than comparison
+  /// Signed greater than comparison
   ///
   /// Regards both *this as a signed quantity and compares it with RHS for
   /// the validity of the greater-than relationship.
@@ -1263,7 +1278,7 @@
                                                         : getSExtValue() > RHS;
   }
 
-  /// \brief Unsigned greater or equal comparison
+  /// Unsigned greater or equal comparison
   ///
   /// Regards both *this and RHS as unsigned quantities and compares them for
   /// validity of the greater-or-equal relationship.
@@ -1271,7 +1286,7 @@
   /// \returns true if *this >= RHS when both are considered unsigned.
   bool uge(const APInt &RHS) const { return !ult(RHS); }
 
-  /// \brief Unsigned greater or equal comparison
+  /// Unsigned greater or equal comparison
   ///
   /// Regards both *this as an unsigned quantity and compares it with RHS for
   /// the validity of the greater-or-equal relationship.
@@ -1279,7 +1294,7 @@
   /// \returns true if *this >= RHS when considered unsigned.
   bool uge(uint64_t RHS) const { return !ult(RHS); }
 
-  /// \brief Signed greater or equal comparison
+  /// Signed greater or equal comparison
   ///
   /// Regards both *this and RHS as signed quantities and compares them for
   /// validity of the greater-or-equal relationship.
@@ -1287,7 +1302,7 @@
   /// \returns true if *this >= RHS when both are considered signed.
   bool sge(const APInt &RHS) const { return !slt(RHS); }
 
-  /// \brief Signed greater or equal comparison
+  /// Signed greater or equal comparison
   ///
   /// Regards both *this as a signed quantity and compares it with RHS for
   /// the validity of the greater-or-equal relationship.
@@ -1316,13 +1331,13 @@
   /// \name Resizing Operators
   /// @{
 
-  /// \brief Truncate to new width.
+  /// Truncate to new width.
   ///
   /// Truncate the APInt to a specified width. It is an error to specify a width
   /// that is greater than or equal to the current width.
   APInt trunc(unsigned width) const;
 
-  /// \brief Sign extend to a new width.
+  /// Sign extend to a new width.
   ///
   /// This operation sign extends the APInt to a new width. If the high order
   /// bit is set, the fill on the left will be done with 1 bits, otherwise zero.
@@ -1330,32 +1345,32 @@
   /// current width.
   APInt sext(unsigned width) const;
 
-  /// \brief Zero extend to a new width.
+  /// Zero extend to a new width.
   ///
   /// This operation zero extends the APInt to a new width. The high order bits
   /// are filled with 0 bits.  It is an error to specify a width that is less
   /// than or equal to the current width.
   APInt zext(unsigned width) const;
 
-  /// \brief Sign extend or truncate to width
+  /// Sign extend or truncate to width
   ///
   /// Make this APInt have the bit width given by \p width. The value is sign
   /// extended, truncated, or left alone to make it that width.
   APInt sextOrTrunc(unsigned width) const;
 
-  /// \brief Zero extend or truncate to width
+  /// Zero extend or truncate to width
   ///
   /// Make this APInt have the bit width given by \p width. The value is zero
   /// extended, truncated, or left alone to make it that width.
   APInt zextOrTrunc(unsigned width) const;
 
-  /// \brief Sign extend or truncate to width
+  /// Sign extend or truncate to width
   ///
   /// Make this APInt have the bit width given by \p width. The value is sign
   /// extended, or left alone to make it that width.
   APInt sextOrSelf(unsigned width) const;
 
-  /// \brief Zero extend or truncate to width
+  /// Zero extend or truncate to width
   ///
   /// Make this APInt have the bit width given by \p width. The value is zero
   /// extended, or left alone to make it that width.
@@ -1365,7 +1380,7 @@
   /// \name Bit Manipulation Operators
   /// @{
 
-  /// \brief Set every bit to 1.
+  /// Set every bit to 1.
   void setAllBits() {
     if (isSingleWord())
       U.VAL = WORD_MAX;
@@ -1376,7 +1391,7 @@
     clearUnusedBits();
   }
 
-  /// \brief Set a given bit to 1.
+  /// Set a given bit to 1.
   ///
   /// Set the given bit to 1 whose position is given as "bitPosition".
   void setBit(unsigned BitPosition) {
@@ -1427,7 +1442,7 @@
     return setBits(BitWidth - hiBits, BitWidth);
   }
 
-  /// \brief Set every bit to 0.
+  /// Set every bit to 0.
   void clearAllBits() {
     if (isSingleWord())
       U.VAL = 0;
@@ -1435,7 +1450,7 @@
       memset(U.pVal, 0, getNumWords() * APINT_WORD_SIZE);
   }
 
-  /// \brief Set a given bit to 0.
+  /// Set a given bit to 0.
   ///
   /// Set the given bit to 0 whose position is given as "bitPosition".
   void clearBit(unsigned BitPosition) {
@@ -1452,7 +1467,7 @@
     clearBit(BitWidth - 1);
   }
 
-  /// \brief Toggle every bit to its opposite value.
+  /// Toggle every bit to its opposite value.
   void flipAllBits() {
     if (isSingleWord()) {
       U.VAL ^= WORD_MAX;
@@ -1462,7 +1477,7 @@
     }
   }
 
-  /// \brief Toggles a given bit to its opposite value.
+  /// Toggles a given bit to its opposite value.
   ///
   /// Toggle a given bit to its opposite value whose position is given
   /// as "bitPosition".
@@ -1484,17 +1499,17 @@
   /// \name Value Characterization Functions
   /// @{
 
-  /// \brief Return the number of bits in the APInt.
+  /// Return the number of bits in the APInt.
   unsigned getBitWidth() const { return BitWidth; }
 
-  /// \brief Get the number of words.
+  /// Get the number of words.
   ///
   /// Here one word's bitwidth equals to that of uint64_t.
   ///
   /// \returns the number of words to hold the integer value of this APInt.
   unsigned getNumWords() const { return getNumWords(BitWidth); }
 
-  /// \brief Get the number of words.
+  /// Get the number of words.
   ///
   /// *NOTE* Here one word's bitwidth equals to that of uint64_t.
   ///
@@ -1504,14 +1519,14 @@
     return ((uint64_t)BitWidth + APINT_BITS_PER_WORD - 1) / APINT_BITS_PER_WORD;
   }
 
-  /// \brief Compute the number of active bits in the value
+  /// Compute the number of active bits in the value
   ///
   /// This function returns the number of active bits which is defined as the
   /// bit width minus the number of leading zeros. This is used in several
   /// computations to see how "wide" the value is.
   unsigned getActiveBits() const { return BitWidth - countLeadingZeros(); }
 
-  /// \brief Compute the number of active words in the value of this APInt.
+  /// Compute the number of active words in the value of this APInt.
   ///
   /// This is used in conjunction with getActiveData to extract the raw value of
   /// the APInt.
@@ -1520,7 +1535,7 @@
     return numActiveBits ? whichWord(numActiveBits - 1) + 1 : 1;
   }
 
-  /// \brief Get the minimum bit size for this signed APInt
+  /// Get the minimum bit size for this signed APInt
   ///
   /// Computes the minimum bit width for this APInt while considering it to be a
   /// signed (and probably negative) value. If the value is not negative, this
@@ -1534,7 +1549,7 @@
     return getActiveBits() + 1;
   }
 
-  /// \brief Get zero extended value
+  /// Get zero extended value
   ///
   /// This method attempts to return the value of this APInt as a zero extended
   /// uint64_t. The bitwidth must be <= 64 or the value must fit within a
@@ -1546,7 +1561,7 @@
     return U.pVal[0];
   }
 
-  /// \brief Get sign extended value
+  /// Get sign extended value
   ///
   /// This method attempts to return the value of this APInt as a sign extended
   /// int64_t. The bit width must be <= 64 or the value must fit within an
@@ -1558,13 +1573,13 @@
     return int64_t(U.pVal[0]);
   }
 
-  /// \brief Get bits required for string value.
+  /// Get bits required for string value.
   ///
   /// This method determines how many bits are required to hold the APInt
   /// equivalent of the string given by \p str.
   static unsigned getBitsNeeded(StringRef str, uint8_t radix);
 
-  /// \brief The APInt version of the countLeadingZeros functions in
+  /// The APInt version of the countLeadingZeros functions in
   ///   MathExtras.h.
   ///
   /// It counts the number of zeros from the most significant bit to the first
@@ -1580,7 +1595,7 @@
     return countLeadingZerosSlowCase();
   }
 
-  /// \brief Count the number of leading one bits.
+  /// Count the number of leading one bits.
   ///
   /// This function is an APInt version of the countLeadingOnes
   /// functions in MathExtras.h. It counts the number of ones from the most
@@ -1600,7 +1615,7 @@
     return isNegative() ? countLeadingOnes() : countLeadingZeros();
   }
 
-  /// \brief Count the number of trailing zero bits.
+  /// Count the number of trailing zero bits.
   ///
   /// This function is an APInt version of the countTrailingZeros
   /// functions in MathExtras.h. It counts the number of zeros from the least
@@ -1614,7 +1629,7 @@
     return countTrailingZerosSlowCase();
   }
 
-  /// \brief Count the number of trailing one bits.
+  /// Count the number of trailing one bits.
   ///
   /// This function is an APInt version of the countTrailingOnes
   /// functions in MathExtras.h. It counts the number of ones from the least
@@ -1628,7 +1643,7 @@
     return countTrailingOnesSlowCase();
   }
 
-  /// \brief Count the number of bits set.
+  /// Count the number of bits set.
   ///
   /// This function is an APInt version of the countPopulation functions
   /// in MathExtras.h. It counts the number of 1 bits in the APInt value.
@@ -1662,7 +1677,7 @@
     toString(Str, Radix, true, false);
   }
 
-  /// \brief Return the APInt as a std::string.
+  /// Return the APInt as a std::string.
   ///
   /// Note that this is an inefficient method.  It is better to pass in a
   /// SmallVector/SmallString to the methods above to avoid thrashing the heap
@@ -1676,16 +1691,16 @@
   /// Value.
   APInt reverseBits() const;
 
-  /// \brief Converts this APInt to a double value.
+  /// Converts this APInt to a double value.
   double roundToDouble(bool isSigned) const;
 
-  /// \brief Converts this unsigned APInt to a double value.
+  /// Converts this unsigned APInt to a double value.
   double roundToDouble() const { return roundToDouble(false); }
 
-  /// \brief Converts this signed APInt to a double value.
+  /// Converts this signed APInt to a double value.
   double signedRoundToDouble() const { return roundToDouble(true); }
 
-  /// \brief Converts APInt bits to a double
+  /// Converts APInt bits to a double
   ///
   /// The conversion does not do a translation from integer to double, it just
   /// re-interprets the bits as a double. Note that it is valid to do this on
@@ -1694,7 +1709,7 @@
     return BitsToDouble(getWord(0));
   }
 
-  /// \brief Converts APInt bits to a double
+  /// Converts APInt bits to a double
   ///
   /// The conversion does not do a translation from integer to float, it just
   /// re-interprets the bits as a float. Note that it is valid to do this on
@@ -1703,7 +1718,7 @@
     return BitsToFloat(getWord(0));
   }
 
-  /// \brief Converts a double to APInt bits.
+  /// Converts a double to APInt bits.
   ///
   /// The conversion does not do a translation from double to integer, it just
   /// re-interprets the bits of the double.
@@ -1711,7 +1726,7 @@
     return APInt(sizeof(double) * CHAR_BIT, DoubleToBits(V));
   }
 
-  /// \brief Converts a float to APInt bits.
+  /// Converts a float to APInt bits.
   ///
   /// The conversion does not do a translation from float to integer, it just
   /// re-interprets the bits of the float.
@@ -1770,10 +1785,10 @@
     return logBase2();
   }
 
-  /// \brief Compute the square root
+  /// Compute the square root
   APInt sqrt() const;
 
-  /// \brief Get the absolute value;
+  /// Get the absolute value;
   ///
   /// If *this is < 0 then return -(*this), otherwise *this;
   APInt abs() const {
@@ -1924,7 +1939,7 @@
   /// Set the least significant BITS and clear the rest.
   static void tcSetLeastSignificantBits(WordType *, unsigned, unsigned bits);
 
-  /// \brief debug method
+  /// debug method
   void dump() const;
 
   /// @}
@@ -1947,7 +1962,7 @@
 
 inline bool operator!=(uint64_t V1, const APInt &V2) { return V2 != V1; }
 
-/// \brief Unary bitwise complement operator.
+/// Unary bitwise complement operator.
 ///
 /// \returns an APInt that is the bitwise complement of \p v.
 inline APInt operator~(APInt v) {
@@ -2080,27 +2095,27 @@
 
 namespace APIntOps {
 
-/// \brief Determine the smaller of two APInts considered to be signed.
+/// Determine the smaller of two APInts considered to be signed.
 inline const APInt &smin(const APInt &A, const APInt &B) {
   return A.slt(B) ? A : B;
 }
 
-/// \brief Determine the larger of two APInts considered to be signed.
+/// Determine the larger of two APInts considered to be signed.
 inline const APInt &smax(const APInt &A, const APInt &B) {
   return A.sgt(B) ? A : B;
 }
 
-/// \brief Determine the smaller of two APInts considered to be signed.
+/// Determine the smaller of two APInts considered to be signed.
 inline const APInt &umin(const APInt &A, const APInt &B) {
   return A.ult(B) ? A : B;
 }
 
-/// \brief Determine the larger of two APInts considered to be unsigned.
+/// Determine the larger of two APInts considered to be unsigned.
 inline const APInt &umax(const APInt &A, const APInt &B) {
   return A.ugt(B) ? A : B;
 }
 
-/// \brief Compute GCD of two unsigned APInt values.
+/// Compute GCD of two unsigned APInt values.
 ///
 /// This function returns the greatest common divisor of the two APInt values
 /// using Stein's algorithm.
@@ -2108,44 +2123,85 @@
 /// \returns the greatest common divisor of A and B.
 APInt GreatestCommonDivisor(APInt A, APInt B);
 
-/// \brief Converts the given APInt to a double value.
+/// Converts the given APInt to a double value.
 ///
 /// Treats the APInt as an unsigned value for conversion purposes.
 inline double RoundAPIntToDouble(const APInt &APIVal) {
   return APIVal.roundToDouble();
 }
 
-/// \brief Converts the given APInt to a double value.
+/// Converts the given APInt to a double value.
 ///
 /// Treats the APInt as a signed value for conversion purposes.
 inline double RoundSignedAPIntToDouble(const APInt &APIVal) {
   return APIVal.signedRoundToDouble();
 }
 
-/// \brief Converts the given APInt to a float vlalue.
+/// Converts the given APInt to a float vlalue.
 inline float RoundAPIntToFloat(const APInt &APIVal) {
   return float(RoundAPIntToDouble(APIVal));
 }
 
-/// \brief Converts the given APInt to a float value.
+/// Converts the given APInt to a float value.
 ///
 /// Treast the APInt as a signed value for conversion purposes.
 inline float RoundSignedAPIntToFloat(const APInt &APIVal) {
   return float(APIVal.signedRoundToDouble());
 }
 
-/// \brief Converts the given double value into a APInt.
+/// Converts the given double value into a APInt.
 ///
 /// This function convert a double value to an APInt value.
 APInt RoundDoubleToAPInt(double Double, unsigned width);
 
-/// \brief Converts a float value into a APInt.
+/// Converts a float value into a APInt.
 ///
 /// Converts a float value into an APInt value.
 inline APInt RoundFloatToAPInt(float Float, unsigned width) {
   return RoundDoubleToAPInt(double(Float), width);
 }
 
+/// Return A unsign-divided by B, rounded by the given rounding mode.
+APInt RoundingUDiv(const APInt &A, const APInt &B, APInt::Rounding RM);
+
+/// Return A sign-divided by B, rounded by the given rounding mode.
+APInt RoundingSDiv(const APInt &A, const APInt &B, APInt::Rounding RM);
+
+/// Let q(n) = An^2 + Bn + C, and BW = bit width of the value range
+/// (e.g. 32 for i32).
+/// This function finds the smallest number n, such that
+/// (a) n >= 0 and q(n) = 0, or
+/// (b) n >= 1 and q(n-1) and q(n), when evaluated in the set of all
+///     integers, belong to two different intervals [Rk, Rk+R),
+///     where R = 2^BW, and k is an integer.
+/// The idea here is to find when q(n) "overflows" 2^BW, while at the
+/// same time "allowing" subtraction. In unsigned modulo arithmetic a
+/// subtraction (treated as addition of negated numbers) would always
+/// count as an overflow, but here we want to allow values to decrease
+/// and increase as long as they are within the same interval.
+/// Specifically, adding of two negative numbers should not cause an
+/// overflow (as long as the magnitude does not exceed the bith width).
+/// On the other hand, given a positive number, adding a negative
+/// number to it can give a negative result, which would cause the
+/// value to go from [-2^BW, 0) to [0, 2^BW). In that sense, zero is
+/// treated as a special case of an overflow.
+///
+/// This function returns None if after finding k that minimizes the
+/// positive solution to q(n) = kR, both solutions are contained between
+/// two consecutive integers.
+///
+/// There are cases where q(n) > T, and q(n+1) < T (assuming evaluation
+/// in arithmetic modulo 2^BW, and treating the values as signed) by the
+/// virtue of *signed* overflow. This function will *not* find such an n,
+/// however it may find a value of n satisfying the inequalities due to
+/// an *unsigned* overflow (if the values are treated as unsigned).
+/// To find a solution for a signed overflow, treat it as a problem of
+/// finding an unsigned overflow with a range with of BW-1.
+///
+/// The returned value may have a different bit width from the input
+/// coefficients.
+Optional<APInt> SolveQuadraticEquationWrap(APInt A, APInt B, APInt C,
+                                           unsigned RangeWidth);
 } // End of APIntOps namespace
 
 // See friend declaration above. This additional declaration is required in
diff --git a/linux-x64/clang/include/llvm/ADT/APSInt.h b/linux-x64/clang/include/llvm/ADT/APSInt.h
index dabbf33..7ee2c4c 100644
--- a/linux-x64/clang/include/llvm/ADT/APSInt.h
+++ b/linux-x64/clang/include/llvm/ADT/APSInt.h
@@ -72,7 +72,7 @@
   }
   using APInt::toString;
 
-  /// \brief Get the correctly-extended \c int64_t value.
+  /// Get the correctly-extended \c int64_t value.
   int64_t getExtValue() const {
     assert(getMinSignedBits() <= 64 && "Too many bits for int64_t");
     return isSigned() ? getSExtValue() : getZExtValue();
@@ -279,13 +279,13 @@
                            : APInt::getSignedMinValue(numBits), Unsigned);
   }
 
-  /// \brief Determine if two APSInts have the same value, zero- or
+  /// Determine if two APSInts have the same value, zero- or
   /// sign-extending as needed.
   static bool isSameValue(const APSInt &I1, const APSInt &I2) {
     return !compareValues(I1, I2);
   }
 
-  /// \brief Compare underlying values of two numbers.
+  /// Compare underlying values of two numbers.
   static int compareValues(const APSInt &I1, const APSInt &I2) {
     if (I1.getBitWidth() == I2.getBitWidth() && I1.isSigned() == I2.isSigned())
       return I1.IsUnsigned ? I1.compare(I2) : I1.compareSigned(I2);
diff --git a/linux-x64/clang/include/llvm/ADT/Any.h b/linux-x64/clang/include/llvm/ADT/Any.h
new file mode 100644
index 0000000..c64c399
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ADT/Any.h
@@ -0,0 +1,150 @@
+//===- Any.h - Generic type erased holder of any type -----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+//  This file provides Any, a non-template class modeled in the spirit of
+//  std::any.  The idea is to provide a type-safe replacement for C's void*.
+//  It can hold a value of any copy-constructible copy-assignable type
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ADT_ANY_H
+#define LLVM_ADT_ANY_H
+
+#include "llvm/ADT/STLExtras.h"
+
+#include <cassert>
+#include <memory>
+#include <type_traits>
+
+namespace llvm {
+
+class Any {
+  template <typename T> struct TypeId { static const char Id; };
+
+  struct StorageBase {
+    virtual ~StorageBase() = default;
+    virtual std::unique_ptr<StorageBase> clone() const = 0;
+    virtual const void *id() const = 0;
+  };
+
+  template <typename T> struct StorageImpl : public StorageBase {
+    explicit StorageImpl(const T &Value) : Value(Value) {}
+
+    explicit StorageImpl(T &&Value) : Value(std::move(Value)) {}
+
+    std::unique_ptr<StorageBase> clone() const override {
+      return llvm::make_unique<StorageImpl<T>>(Value);
+    }
+
+    const void *id() const override { return &TypeId<T>::Id; }
+
+    T Value;
+
+  private:
+    StorageImpl &operator=(const StorageImpl &Other) = delete;
+    StorageImpl(const StorageImpl &Other) = delete;
+  };
+
+public:
+  Any() = default;
+
+  Any(const Any &Other)
+      : Storage(Other.Storage ? Other.Storage->clone() : nullptr) {}
+
+  // When T is Any or T is not copy-constructible we need to explicitly disable
+  // the forwarding constructor so that the copy constructor gets selected
+  // instead.
+  template <
+      typename T,
+      typename std::enable_if<
+          llvm::conjunction<
+              llvm::negation<std::is_same<typename std::decay<T>::type, Any>>,
+              std::is_copy_constructible<typename std::decay<T>::type>>::value,
+          int>::type = 0>
+  Any(T &&Value) {
+    using U = typename std::decay<T>::type;
+    Storage = llvm::make_unique<StorageImpl<U>>(std::forward<T>(Value));
+  }
+
+  Any(Any &&Other) : Storage(std::move(Other.Storage)) {}
+
+  Any &swap(Any &Other) {
+    std::swap(Storage, Other.Storage);
+    return *this;
+  }
+
+  Any &operator=(Any Other) {
+    Storage = std::move(Other.Storage);
+    return *this;
+  }
+
+  bool hasValue() const { return !!Storage; }
+
+  void reset() { Storage.reset(); }
+
+private:
+  template <class T> friend T any_cast(const Any &Value);
+  template <class T> friend T any_cast(Any &Value);
+  template <class T> friend T any_cast(Any &&Value);
+  template <class T> friend const T *any_cast(const Any *Value);
+  template <class T> friend T *any_cast(Any *Value);
+  template <typename T> friend bool any_isa(const Any &Value);
+
+  std::unique_ptr<StorageBase> Storage;
+};
+
+template <typename T> const char Any::TypeId<T>::Id = 0;
+
+
+template <typename T> bool any_isa(const Any &Value) {
+  if (!Value.Storage)
+    return false;
+  using U =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+  return Value.Storage->id() == &Any::TypeId<U>::Id;
+}
+
+template <class T> T any_cast(const Any &Value) {
+  using U =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+  return static_cast<T>(*any_cast<U>(&Value));
+}
+
+template <class T> T any_cast(Any &Value) {
+  using U =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+  return static_cast<T>(*any_cast<U>(&Value));
+}
+
+template <class T> T any_cast(Any &&Value) {
+  using U =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+  return static_cast<T>(std::move(*any_cast<U>(&Value)));
+}
+
+template <class T> const T *any_cast(const Any *Value) {
+  using U =
+      typename std::remove_cv<typename std::remove_reference<T>::type>::type;
+  assert(Value && any_isa<T>(*Value) && "Bad any cast!");
+  if (!Value || !any_isa<U>(*Value))
+    return nullptr;
+  return &static_cast<Any::StorageImpl<U> &>(*Value->Storage).Value;
+}
+
+template <class T> T *any_cast(Any *Value) {
+  using U = typename std::decay<T>::type;
+  assert(Value && any_isa<U>(*Value) && "Bad any cast!");
+  if (!Value || !any_isa<U>(*Value))
+    return nullptr;
+  return &static_cast<Any::StorageImpl<U> &>(*Value->Storage).Value;
+}
+
+} // end namespace llvm
+
+#endif // LLVM_ADT_ANY_H
diff --git a/linux-x64/clang/include/llvm/ADT/ArrayRef.h b/linux-x64/clang/include/llvm/ADT/ArrayRef.h
index 5f7a769..9cb25b0 100644
--- a/linux-x64/clang/include/llvm/ADT/ArrayRef.h
+++ b/linux-x64/clang/include/llvm/ADT/ArrayRef.h
@@ -184,51 +184,51 @@
     /// slice(n) - Chop off the first N elements of the array.
     ArrayRef<T> slice(size_t N) const { return slice(N, size() - N); }
 
-    /// \brief Drop the first \p N elements of the array.
+    /// Drop the first \p N elements of the array.
     ArrayRef<T> drop_front(size_t N = 1) const {
       assert(size() >= N && "Dropping more elements than exist");
       return slice(N, size() - N);
     }
 
-    /// \brief Drop the last \p N elements of the array.
+    /// Drop the last \p N elements of the array.
     ArrayRef<T> drop_back(size_t N = 1) const {
       assert(size() >= N && "Dropping more elements than exist");
       return slice(0, size() - N);
     }
 
-    /// \brief Return a copy of *this with the first N elements satisfying the
+    /// Return a copy of *this with the first N elements satisfying the
     /// given predicate removed.
     template <class PredicateT> ArrayRef<T> drop_while(PredicateT Pred) const {
       return ArrayRef<T>(find_if_not(*this, Pred), end());
     }
 
-    /// \brief Return a copy of *this with the first N elements not satisfying
+    /// Return a copy of *this with the first N elements not satisfying
     /// the given predicate removed.
     template <class PredicateT> ArrayRef<T> drop_until(PredicateT Pred) const {
       return ArrayRef<T>(find_if(*this, Pred), end());
     }
 
-    /// \brief Return a copy of *this with only the first \p N elements.
+    /// Return a copy of *this with only the first \p N elements.
     ArrayRef<T> take_front(size_t N = 1) const {
       if (N >= size())
         return *this;
       return drop_back(size() - N);
     }
 
-    /// \brief Return a copy of *this with only the last \p N elements.
+    /// Return a copy of *this with only the last \p N elements.
     ArrayRef<T> take_back(size_t N = 1) const {
       if (N >= size())
         return *this;
       return drop_front(size() - N);
     }
 
-    /// \brief Return the first N elements of this Array that satisfy the given
+    /// Return the first N elements of this Array that satisfy the given
     /// predicate.
     template <class PredicateT> ArrayRef<T> take_while(PredicateT Pred) const {
       return ArrayRef<T>(begin(), find_if_not(*this, Pred));
     }
 
-    /// \brief Return the first N elements of this Array that don't satisfy the
+    /// Return the first N elements of this Array that don't satisfy the
     /// given predicate.
     template <class PredicateT> ArrayRef<T> take_until(PredicateT Pred) const {
       return ArrayRef<T>(begin(), find_if(*this, Pred));
@@ -358,7 +358,7 @@
       return slice(N, this->size() - N);
     }
 
-    /// \brief Drop the first \p N elements of the array.
+    /// Drop the first \p N elements of the array.
     MutableArrayRef<T> drop_front(size_t N = 1) const {
       assert(this->size() >= N && "Dropping more elements than exist");
       return slice(N, this->size() - N);
@@ -369,42 +369,42 @@
       return slice(0, this->size() - N);
     }
 
-    /// \brief Return a copy of *this with the first N elements satisfying the
+    /// Return a copy of *this with the first N elements satisfying the
     /// given predicate removed.
     template <class PredicateT>
     MutableArrayRef<T> drop_while(PredicateT Pred) const {
       return MutableArrayRef<T>(find_if_not(*this, Pred), end());
     }
 
-    /// \brief Return a copy of *this with the first N elements not satisfying
+    /// Return a copy of *this with the first N elements not satisfying
     /// the given predicate removed.
     template <class PredicateT>
     MutableArrayRef<T> drop_until(PredicateT Pred) const {
       return MutableArrayRef<T>(find_if(*this, Pred), end());
     }
 
-    /// \brief Return a copy of *this with only the first \p N elements.
+    /// Return a copy of *this with only the first \p N elements.
     MutableArrayRef<T> take_front(size_t N = 1) const {
       if (N >= this->size())
         return *this;
       return drop_back(this->size() - N);
     }
 
-    /// \brief Return a copy of *this with only the last \p N elements.
+    /// Return a copy of *this with only the last \p N elements.
     MutableArrayRef<T> take_back(size_t N = 1) const {
       if (N >= this->size())
         return *this;
       return drop_front(this->size() - N);
     }
 
-    /// \brief Return the first N elements of this Array that satisfy the given
+    /// Return the first N elements of this Array that satisfy the given
     /// predicate.
     template <class PredicateT>
     MutableArrayRef<T> take_while(PredicateT Pred) const {
       return MutableArrayRef<T>(begin(), find_if_not(*this, Pred));
     }
 
-    /// \brief Return the first N elements of this Array that don't satisfy the
+    /// Return the first N elements of this Array that don't satisfy the
     /// given predicate.
     template <class PredicateT>
     MutableArrayRef<T> take_until(PredicateT Pred) const {
diff --git a/linux-x64/clang/include/llvm/ADT/BitVector.h b/linux-x64/clang/include/llvm/ADT/BitVector.h
index 124c2a8..438c7d8 100644
--- a/linux-x64/clang/include/llvm/ADT/BitVector.h
+++ b/linux-x64/clang/include/llvm/ADT/BitVector.h
@@ -779,7 +779,7 @@
   }
 
 private:
-  /// \brief Perform a logical left shift of \p Count words by moving everything
+  /// Perform a logical left shift of \p Count words by moving everything
   /// \p Count words to the right in memory.
   ///
   /// While confusing, words are stored from least significant at Bits[0] to
@@ -810,7 +810,7 @@
     clear_unused_bits();
   }
 
-  /// \brief Perform a logical right shift of \p Count words by moving those
+  /// Perform a logical right shift of \p Count words by moving those
   /// words to the left in memory.  See wordShl for more information.
   ///
   void wordShr(uint32_t Count) {
diff --git a/linux-x64/clang/include/llvm/ADT/CachedHashString.h b/linux-x64/clang/include/llvm/ADT/CachedHashString.h
index a56a621..d8f0e7a 100644
--- a/linux-x64/clang/include/llvm/ADT/CachedHashString.h
+++ b/linux-x64/clang/include/llvm/ADT/CachedHashString.h
@@ -43,6 +43,7 @@
   }
 
   StringRef val() const { return StringRef(P, Size); }
+  const char *data() const { return P; }
   uint32_t size() const { return Size; }
   uint32_t hash() const { return Hash; }
 };
diff --git a/linux-x64/clang/include/llvm/ADT/DenseMap.h b/linux-x64/clang/include/llvm/ADT/DenseMap.h
index ba60b79..380f1db 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseMap.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseMap.h
@@ -393,7 +393,7 @@
     setNumTombstones(other.getNumTombstones());
 
     if (isPodLike<KeyT>::value && isPodLike<ValueT>::value)
-      memcpy(getBuckets(), other.getBuckets(),
+      memcpy(reinterpret_cast<void *>(getBuckets()), other.getBuckets(),
              getNumBuckets() * sizeof(BucketT));
     else
       for (size_t i = 0; i < getNumBuckets(); ++i) {
diff --git a/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h b/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
index a96904c..5d12b42 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseMapInfo.h
@@ -262,6 +262,13 @@
   }
 };
 
+template <> struct DenseMapInfo<hash_code> {
+  static inline hash_code getEmptyKey() { return hash_code(-1); }
+  static inline hash_code getTombstoneKey() { return hash_code(-2); }
+  static unsigned getHashValue(hash_code val) { return val; }
+  static bool isEqual(hash_code LHS, hash_code RHS) { return LHS == RHS; }
+};
+
 } // end namespace llvm
 
 #endif // LLVM_ADT_DENSEMAPINFO_H
diff --git a/linux-x64/clang/include/llvm/ADT/DenseSet.h b/linux-x64/clang/include/llvm/ADT/DenseSet.h
index 7e5171c..b495e25 100644
--- a/linux-x64/clang/include/llvm/ADT/DenseSet.h
+++ b/linux-x64/clang/include/llvm/ADT/DenseSet.h
@@ -17,7 +17,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseMapInfo.h"
 #include "llvm/Support/type_traits.h"
-#include <algorithm> 
+#include <algorithm>
 #include <cstddef>
 #include <initializer_list>
 #include <iterator>
diff --git a/linux-x64/clang/include/llvm/ADT/DepthFirstIterator.h b/linux-x64/clang/include/llvm/ADT/DepthFirstIterator.h
index e964d7f..1f3766d 100644
--- a/linux-x64/clang/include/llvm/ADT/DepthFirstIterator.h
+++ b/linux-x64/clang/include/llvm/ADT/DepthFirstIterator.h
@@ -177,7 +177,7 @@
     return *this;
   }
 
-  /// \brief Skips all children of the current node and traverses to next node
+  /// Skips all children of the current node and traverses to next node
   ///
   /// Note: This function takes care of incrementing the iterator. If you
   /// always increment and call this function, you risk walking off the end.
diff --git a/linux-x64/clang/include/llvm/ADT/EpochTracker.h b/linux-x64/clang/include/llvm/ADT/EpochTracker.h
index db39ba4..49ef192 100644
--- a/linux-x64/clang/include/llvm/ADT/EpochTracker.h
+++ b/linux-x64/clang/include/llvm/ADT/EpochTracker.h
@@ -17,7 +17,6 @@
 #define LLVM_ADT_EPOCH_TRACKER_H
 
 #include "llvm/Config/abi-breaking.h"
-#include "llvm/Config/llvm-config.h"
 
 #include <cstdint>
 
@@ -25,7 +24,7 @@
 
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
 
-/// \brief A base class for data structure classes wishing to make iterators
+/// A base class for data structure classes wishing to make iterators
 /// ("handles") pointing into themselves fail-fast.  When building without
 /// asserts, this class is empty and does nothing.
 ///
@@ -40,15 +39,15 @@
 public:
   DebugEpochBase() : Epoch(0) {}
 
-  /// \brief Calling incrementEpoch invalidates all handles pointing into the
+  /// Calling incrementEpoch invalidates all handles pointing into the
   /// calling instance.
   void incrementEpoch() { ++Epoch; }
 
-  /// \brief The destructor calls incrementEpoch to make use-after-free bugs
+  /// The destructor calls incrementEpoch to make use-after-free bugs
   /// more likely to crash deterministically.
   ~DebugEpochBase() { incrementEpoch(); }
 
-  /// \brief A base class for iterator classes ("handles") that wish to poll for
+  /// A base class for iterator classes ("handles") that wish to poll for
   /// iterator invalidating modifications in the underlying data structure.
   /// When LLVM is built without asserts, this class is empty and does nothing.
   ///
@@ -66,12 +65,12 @@
     explicit HandleBase(const DebugEpochBase *Parent)
         : EpochAddress(&Parent->Epoch), EpochAtCreation(Parent->Epoch) {}
 
-    /// \brief Returns true if the DebugEpochBase this Handle is linked to has
+    /// Returns true if the DebugEpochBase this Handle is linked to has
     /// not called incrementEpoch on itself since the creation of this
     /// HandleBase instance.
     bool isHandleInSync() const { return *EpochAddress == EpochAtCreation; }
 
-    /// \brief Returns a pointer to the epoch word stored in the data structure
+    /// Returns a pointer to the epoch word stored in the data structure
     /// this handle points into.  Can be used to check if two iterators point
     /// into the same data structure.
     const void *getEpochAddress() const { return EpochAddress; }
diff --git a/linux-x64/clang/include/llvm/ADT/FunctionExtras.h b/linux-x64/clang/include/llvm/ADT/FunctionExtras.h
new file mode 100644
index 0000000..2b75dc6
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ADT/FunctionExtras.h
@@ -0,0 +1,293 @@
+//===- FunctionExtras.h - Function type erasure utilities -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file provides a collection of function (or more generally, callable)
+/// type erasure utilities supplementing those provided by the standard library
+/// in `<function>`.
+///
+/// It provides `unique_function`, which works like `std::function` but supports
+/// move-only callable objects.
+///
+/// Future plans:
+/// - Add a `function` that provides const, volatile, and ref-qualified support,
+///   which doesn't work with `std::function`.
+/// - Provide support for specifying multiple signatures to type erase callable
+///   objects with an overload set, such as those produced by generic lambdas.
+/// - Expand to include a copyable utility that directly replaces std::function
+///   but brings the above improvements.
+///
+/// Note that LLVM's utilities are greatly simplified by not supporting
+/// allocators.
+///
+/// If the standard library ever begins to provide comparable facilities we can
+/// consider switching to those.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ADT_FUNCTION_EXTRAS_H
+#define LLVM_ADT_FUNCTION_EXTRAS_H
+
+#include "llvm/ADT/PointerIntPair.h"
+#include "llvm/ADT/PointerUnion.h"
+#include "llvm/Support/type_traits.h"
+#include <memory>
+
+namespace llvm {
+
+template <typename FunctionT> class unique_function;
+
+template <typename ReturnT, typename... ParamTs>
+class unique_function<ReturnT(ParamTs...)> {
+  static constexpr size_t InlineStorageSize = sizeof(void *) * 3;
+
+  // MSVC has a bug and ICEs if we give it a particular dependent value
+  // expression as part of the `std::conditional` below. To work around this,
+  // we build that into a template struct's constexpr bool.
+  template <typename T> struct IsSizeLessThanThresholdT {
+    static constexpr bool value = sizeof(T) <= (2 * sizeof(void *));
+  };
+
+  // Provide a type function to map parameters that won't observe extra copies
+  // or moves and which are small enough to likely pass in register to values
+  // and all other types to l-value reference types. We use this to compute the
+  // types used in our erased call utility to minimize copies and moves unless
+  // doing so would force things unnecessarily into memory.
+  //
+  // The heuristic used is related to common ABI register passing conventions.
+  // It doesn't have to be exact though, and in one way it is more strict
+  // because we want to still be able to observe either moves *or* copies.
+  template <typename T>
+  using AdjustedParamT = typename std::conditional<
+      !std::is_reference<T>::value &&
+          llvm::is_trivially_copy_constructible<T>::value &&
+          llvm::is_trivially_move_constructible<T>::value &&
+          IsSizeLessThanThresholdT<T>::value,
+      T, T &>::type;
+
+  // The type of the erased function pointer we use as a callback to dispatch to
+  // the stored callable when it is trivial to move and destroy.
+  using CallPtrT = ReturnT (*)(void *CallableAddr,
+                               AdjustedParamT<ParamTs>... Params);
+  using MovePtrT = void (*)(void *LHSCallableAddr, void *RHSCallableAddr);
+  using DestroyPtrT = void (*)(void *CallableAddr);
+
+  /// A struct to hold a single trivial callback with sufficient alignment for
+  /// our bitpacking.
+  struct alignas(8) TrivialCallback {
+    CallPtrT CallPtr;
+  };
+
+  /// A struct we use to aggregate three callbacks when we need full set of
+  /// operations.
+  struct alignas(8) NonTrivialCallbacks {
+    CallPtrT CallPtr;
+    MovePtrT MovePtr;
+    DestroyPtrT DestroyPtr;
+  };
+
+  // Create a pointer union between either a pointer to a static trivial call
+  // pointer in a struct or a pointer to a static struct of the call, move, and
+  // destroy pointers.
+  using CallbackPointerUnionT =
+      PointerUnion<TrivialCallback *, NonTrivialCallbacks *>;
+
+  // The main storage buffer. This will either have a pointer to out-of-line
+  // storage or an inline buffer storing the callable.
+  union StorageUnionT {
+    // For out-of-line storage we keep a pointer to the underlying storage and
+    // the size. This is enough to deallocate the memory.
+    struct OutOfLineStorageT {
+      void *StoragePtr;
+      size_t Size;
+      size_t Alignment;
+    } OutOfLineStorage;
+    static_assert(
+        sizeof(OutOfLineStorageT) <= InlineStorageSize,
+        "Should always use all of the out-of-line storage for inline storage!");
+
+    // For in-line storage, we just provide an aligned character buffer. We
+    // provide three pointers worth of storage here.
+    typename std::aligned_storage<InlineStorageSize, alignof(void *)>::type
+        InlineStorage;
+  } StorageUnion;
+
+  // A compressed pointer to either our dispatching callback or our table of
+  // dispatching callbacks and the flag for whether the callable itself is
+  // stored inline or not.
+  PointerIntPair<CallbackPointerUnionT, 1, bool> CallbackAndInlineFlag;
+
+  bool isInlineStorage() const { return CallbackAndInlineFlag.getInt(); }
+
+  bool isTrivialCallback() const {
+    return CallbackAndInlineFlag.getPointer().template is<TrivialCallback *>();
+  }
+
+  CallPtrT getTrivialCallback() const {
+    return CallbackAndInlineFlag.getPointer().template get<TrivialCallback *>()->CallPtr;
+  }
+
+  NonTrivialCallbacks *getNonTrivialCallbacks() const {
+    return CallbackAndInlineFlag.getPointer()
+        .template get<NonTrivialCallbacks *>();
+  }
+
+  void *getInlineStorage() { return &StorageUnion.InlineStorage; }
+
+  void *getOutOfLineStorage() {
+    return StorageUnion.OutOfLineStorage.StoragePtr;
+  }
+  size_t getOutOfLineStorageSize() const {
+    return StorageUnion.OutOfLineStorage.Size;
+  }
+  size_t getOutOfLineStorageAlignment() const {
+    return StorageUnion.OutOfLineStorage.Alignment;
+  }
+
+  void setOutOfLineStorage(void *Ptr, size_t Size, size_t Alignment) {
+    StorageUnion.OutOfLineStorage = {Ptr, Size, Alignment};
+  }
+
+  template <typename CallableT>
+  static ReturnT CallImpl(void *CallableAddr, AdjustedParamT<ParamTs>... Params) {
+    return (*reinterpret_cast<CallableT *>(CallableAddr))(
+        std::forward<ParamTs>(Params)...);
+  }
+
+  template <typename CallableT>
+  static void MoveImpl(void *LHSCallableAddr, void *RHSCallableAddr) noexcept {
+    new (LHSCallableAddr)
+        CallableT(std::move(*reinterpret_cast<CallableT *>(RHSCallableAddr)));
+  }
+
+  template <typename CallableT>
+  static void DestroyImpl(void *CallableAddr) noexcept {
+    reinterpret_cast<CallableT *>(CallableAddr)->~CallableT();
+  }
+
+public:
+  unique_function() = default;
+  unique_function(std::nullptr_t /*null_callable*/) {}
+
+  ~unique_function() {
+    if (!CallbackAndInlineFlag.getPointer())
+      return;
+
+    // Cache this value so we don't re-check it after type-erased operations.
+    bool IsInlineStorage = isInlineStorage();
+
+    if (!isTrivialCallback())
+      getNonTrivialCallbacks()->DestroyPtr(
+          IsInlineStorage ? getInlineStorage() : getOutOfLineStorage());
+
+    if (!IsInlineStorage)
+      deallocate_buffer(getOutOfLineStorage(), getOutOfLineStorageSize(),
+                        getOutOfLineStorageAlignment());
+  }
+
+  unique_function(unique_function &&RHS) noexcept {
+    // Copy the callback and inline flag.
+    CallbackAndInlineFlag = RHS.CallbackAndInlineFlag;
+
+    // If the RHS is empty, just copying the above is sufficient.
+    if (!RHS)
+      return;
+
+    if (!isInlineStorage()) {
+      // The out-of-line case is easiest to move.
+      StorageUnion.OutOfLineStorage = RHS.StorageUnion.OutOfLineStorage;
+    } else if (isTrivialCallback()) {
+      // Move is trivial, just memcpy the bytes across.
+      memcpy(getInlineStorage(), RHS.getInlineStorage(), InlineStorageSize);
+    } else {
+      // Non-trivial move, so dispatch to a type-erased implementation.
+      getNonTrivialCallbacks()->MovePtr(getInlineStorage(),
+                                        RHS.getInlineStorage());
+    }
+
+    // Clear the old callback and inline flag to get back to as-if-null.
+    RHS.CallbackAndInlineFlag = {};
+
+#ifndef NDEBUG
+    // In debug builds, we also scribble across the rest of the storage.
+    memset(RHS.getInlineStorage(), 0xAD, InlineStorageSize);
+#endif
+  }
+
+  unique_function &operator=(unique_function &&RHS) noexcept {
+    if (this == &RHS)
+      return *this;
+
+    // Because we don't try to provide any exception safety guarantees we can
+    // implement move assignment very simply by first destroying the current
+    // object and then move-constructing over top of it.
+    this->~unique_function();
+    new (this) unique_function(std::move(RHS));
+    return *this;
+  }
+
+  template <typename CallableT> unique_function(CallableT Callable) {
+    bool IsInlineStorage = true;
+    void *CallableAddr = getInlineStorage();
+    if (sizeof(CallableT) > InlineStorageSize ||
+        alignof(CallableT) > alignof(decltype(StorageUnion.InlineStorage))) {
+      IsInlineStorage = false;
+      // Allocate out-of-line storage. FIXME: Use an explicit alignment
+      // parameter in C++17 mode.
+      auto Size = sizeof(CallableT);
+      auto Alignment = alignof(CallableT);
+      CallableAddr = allocate_buffer(Size, Alignment);
+      setOutOfLineStorage(CallableAddr, Size, Alignment);
+    }
+
+    // Now move into the storage.
+    new (CallableAddr) CallableT(std::move(Callable));
+
+    // See if we can create a trivial callback. We need the callable to be
+    // trivially moved and trivially destroyed so that we don't have to store
+    // type erased callbacks for those operations.
+    //
+    // FIXME: We should use constexpr if here and below to avoid instantiating
+    // the non-trivial static objects when unnecessary. While the linker should
+    // remove them, it is still wasteful.
+    if (llvm::is_trivially_move_constructible<CallableT>::value &&
+        std::is_trivially_destructible<CallableT>::value) {
+      // We need to create a nicely aligned object. We use a static variable
+      // for this because it is a trivial struct.
+      static TrivialCallback Callback = { &CallImpl<CallableT> };
+
+      CallbackAndInlineFlag = {&Callback, IsInlineStorage};
+      return;
+    }
+
+    // Otherwise, we need to point at an object that contains all the different
+    // type erased behaviors needed. Create a static instance of the struct type
+    // here and then use a pointer to that.
+    static NonTrivialCallbacks Callbacks = {
+        &CallImpl<CallableT>, &MoveImpl<CallableT>, &DestroyImpl<CallableT>};
+
+    CallbackAndInlineFlag = {&Callbacks, IsInlineStorage};
+  }
+
+  ReturnT operator()(ParamTs... Params) {
+    void *CallableAddr =
+        isInlineStorage() ? getInlineStorage() : getOutOfLineStorage();
+
+    return (isTrivialCallback()
+                ? getTrivialCallback()
+                : getNonTrivialCallbacks()->CallPtr)(CallableAddr, Params...);
+  }
+
+  explicit operator bool() const {
+    return (bool)CallbackAndInlineFlag.getPointer();
+  }
+};
+
+} // end namespace llvm
+
+#endif // LLVM_ADT_FUNCTION_H
diff --git a/linux-x64/clang/include/llvm/ADT/GraphTraits.h b/linux-x64/clang/include/llvm/ADT/GraphTraits.h
index 27c647f..d39b50f 100644
--- a/linux-x64/clang/include/llvm/ADT/GraphTraits.h
+++ b/linux-x64/clang/include/llvm/ADT/GraphTraits.h
@@ -25,6 +25,13 @@
 // GraphTraits - This class should be specialized by different graph types...
 // which is why the default version is empty.
 //
+// This template evolved from supporting `BasicBlock` to also later supporting
+// more complex types (e.g. CFG and DomTree).
+//
+// GraphTraits can be used to create a view over a graph interpreting it
+// differently without requiring a copy of the original graph. This could
+// be achieved by carrying more data in NodeRef. See LoopBodyTraits for one
+// example.
 template<class GraphType>
 struct GraphTraits {
   // Elements to provide:
diff --git a/linux-x64/clang/include/llvm/ADT/Hashing.h b/linux-x64/clang/include/llvm/ADT/Hashing.h
index c3b5741..9f830ba 100644
--- a/linux-x64/clang/include/llvm/ADT/Hashing.h
+++ b/linux-x64/clang/include/llvm/ADT/Hashing.h
@@ -57,7 +57,7 @@
 
 namespace llvm {
 
-/// \brief An opaque object representing a hash code.
+/// An opaque object representing a hash code.
 ///
 /// This object represents the result of hashing some entity. It is intended to
 /// be used to implement hashtables or other hashing-based data structures.
@@ -73,14 +73,14 @@
   size_t value;
 
 public:
-  /// \brief Default construct a hash_code.
+  /// Default construct a hash_code.
   /// Note that this leaves the value uninitialized.
   hash_code() = default;
 
-  /// \brief Form a hash code directly from a numerical value.
+  /// Form a hash code directly from a numerical value.
   hash_code(size_t value) : value(value) {}
 
-  /// \brief Convert the hash code to its numerical value for use.
+  /// Convert the hash code to its numerical value for use.
   /*explicit*/ operator size_t() const { return value; }
 
   friend bool operator==(const hash_code &lhs, const hash_code &rhs) {
@@ -90,11 +90,11 @@
     return lhs.value != rhs.value;
   }
 
-  /// \brief Allow a hash_code to be directly run through hash_value.
+  /// Allow a hash_code to be directly run through hash_value.
   friend size_t hash_value(const hash_code &code) { return code.value; }
 };
 
-/// \brief Compute a hash_code for any integer value.
+/// Compute a hash_code for any integer value.
 ///
 /// Note that this function is intended to compute the same hash_code for
 /// a particular value without regard to the pre-promotion type. This is in
@@ -105,21 +105,21 @@
 typename std::enable_if<is_integral_or_enum<T>::value, hash_code>::type
 hash_value(T value);
 
-/// \brief Compute a hash_code for a pointer's address.
+/// Compute a hash_code for a pointer's address.
 ///
 /// N.B.: This hashes the *address*. Not the value and not the type.
 template <typename T> hash_code hash_value(const T *ptr);
 
-/// \brief Compute a hash_code for a pair of objects.
+/// Compute a hash_code for a pair of objects.
 template <typename T, typename U>
 hash_code hash_value(const std::pair<T, U> &arg);
 
-/// \brief Compute a hash_code for a standard string.
+/// Compute a hash_code for a standard string.
 template <typename T>
 hash_code hash_value(const std::basic_string<T> &arg);
 
 
-/// \brief Override the execution seed with a fixed value.
+/// Override the execution seed with a fixed value.
 ///
 /// This hashing library uses a per-execution seed designed to change on each
 /// run with high probability in order to ensure that the hash codes are not
@@ -164,7 +164,7 @@
 static const uint64_t k2 = 0x9ae16a3b2f90404fULL;
 static const uint64_t k3 = 0xc949d7c7509e6557ULL;
 
-/// \brief Bitwise right rotate.
+/// Bitwise right rotate.
 /// Normally this will compile to a single instruction, especially if the
 /// shift is a manifest constant.
 inline uint64_t rotate(uint64_t val, size_t shift) {
@@ -254,13 +254,13 @@
   return k2 ^ seed;
 }
 
-/// \brief The intermediate state used during hashing.
+/// The intermediate state used during hashing.
 /// Currently, the algorithm for computing hash codes is based on CityHash and
 /// keeps 56 bytes of arbitrary state.
 struct hash_state {
   uint64_t h0, h1, h2, h3, h4, h5, h6;
 
-  /// \brief Create a new hash_state structure and initialize it based on the
+  /// Create a new hash_state structure and initialize it based on the
   /// seed and the first 64-byte chunk.
   /// This effectively performs the initial mix.
   static hash_state create(const char *s, uint64_t seed) {
@@ -272,7 +272,7 @@
     return state;
   }
 
-  /// \brief Mix 32-bytes from the input sequence into the 16-bytes of 'a'
+  /// Mix 32-bytes from the input sequence into the 16-bytes of 'a'
   /// and 'b', including whatever is already in 'a' and 'b'.
   static void mix_32_bytes(const char *s, uint64_t &a, uint64_t &b) {
     a += fetch64(s);
@@ -284,7 +284,7 @@
     a += c;
   }
 
-  /// \brief Mix in a 64-byte buffer of data.
+  /// Mix in a 64-byte buffer of data.
   /// We mix all 64 bytes even when the chunk length is smaller, but we
   /// record the actual length.
   void mix(const char *s) {
@@ -302,7 +302,7 @@
     std::swap(h2, h0);
   }
 
-  /// \brief Compute the final 64-bit hash code value based on the current
+  /// Compute the final 64-bit hash code value based on the current
   /// state and the length of bytes hashed.
   uint64_t finalize(size_t length) {
     return hash_16_bytes(hash_16_bytes(h3, h5) + shift_mix(h1) * k1 + h2,
@@ -311,7 +311,7 @@
 };
 
 
-/// \brief A global, fixed seed-override variable.
+/// A global, fixed seed-override variable.
 ///
 /// This variable can be set using the \see llvm::set_fixed_execution_seed
 /// function. See that function for details. Do not, under any circumstances,
@@ -332,7 +332,7 @@
 }
 
 
-/// \brief Trait to indicate whether a type's bits can be hashed directly.
+/// Trait to indicate whether a type's bits can be hashed directly.
 ///
 /// A type trait which is true if we want to combine values for hashing by
 /// reading the underlying data. It is false if values of this type must
@@ -359,14 +359,14 @@
                                   (sizeof(T) + sizeof(U)) ==
                                    sizeof(std::pair<T, U>))> {};
 
-/// \brief Helper to get the hashable data representation for a type.
+/// Helper to get the hashable data representation for a type.
 /// This variant is enabled when the type itself can be used.
 template <typename T>
 typename std::enable_if<is_hashable_data<T>::value, T>::type
 get_hashable_data(const T &value) {
   return value;
 }
-/// \brief Helper to get the hashable data representation for a type.
+/// Helper to get the hashable data representation for a type.
 /// This variant is enabled when we must first call hash_value and use the
 /// result as our data.
 template <typename T>
@@ -376,7 +376,7 @@
   return hash_value(value);
 }
 
-/// \brief Helper to store data from a value into a buffer and advance the
+/// Helper to store data from a value into a buffer and advance the
 /// pointer into that buffer.
 ///
 /// This routine first checks whether there is enough space in the provided
@@ -395,7 +395,7 @@
   return true;
 }
 
-/// \brief Implement the combining of integral values into a hash_code.
+/// Implement the combining of integral values into a hash_code.
 ///
 /// This overload is selected when the value type of the iterator is
 /// integral. Rather than computing a hash_code for each object and then
@@ -435,7 +435,7 @@
   return state.finalize(length);
 }
 
-/// \brief Implement the combining of integral values into a hash_code.
+/// Implement the combining of integral values into a hash_code.
 ///
 /// This overload is selected when the value type of the iterator is integral
 /// and when the input iterator is actually a pointer. Rather than computing
@@ -470,7 +470,7 @@
 } // namespace hashing
 
 
-/// \brief Compute a hash_code for a sequence of values.
+/// Compute a hash_code for a sequence of values.
 ///
 /// This hashes a sequence of values. It produces the same hash_code as
 /// 'hash_combine(a, b, c, ...)', but can run over arbitrary sized sequences
@@ -486,7 +486,7 @@
 namespace hashing {
 namespace detail {
 
-/// \brief Helper class to manage the recursive combining of hash_combine
+/// Helper class to manage the recursive combining of hash_combine
 /// arguments.
 ///
 /// This class exists to manage the state and various calls involved in the
@@ -499,14 +499,14 @@
   const size_t seed;
 
 public:
-  /// \brief Construct a recursive hash combining helper.
+  /// Construct a recursive hash combining helper.
   ///
   /// This sets up the state for a recursive hash combine, including getting
   /// the seed and buffer setup.
   hash_combine_recursive_helper()
     : seed(get_execution_seed()) {}
 
-  /// \brief Combine one chunk of data into the current in-flight hash.
+  /// Combine one chunk of data into the current in-flight hash.
   ///
   /// This merges one chunk of data into the hash. First it tries to buffer
   /// the data. If the buffer is full, it hashes the buffer into its
@@ -547,7 +547,7 @@
     return buffer_ptr;
   }
 
-  /// \brief Recursive, variadic combining method.
+  /// Recursive, variadic combining method.
   ///
   /// This function recurses through each argument, combining that argument
   /// into a single hash.
@@ -560,7 +560,7 @@
     return combine(length, buffer_ptr, buffer_end, args...);
   }
 
-  /// \brief Base case for recursive, variadic combining.
+  /// Base case for recursive, variadic combining.
   ///
   /// The base case when combining arguments recursively is reached when all
   /// arguments have been handled. It flushes the remaining buffer and
@@ -588,7 +588,7 @@
 } // namespace detail
 } // namespace hashing
 
-/// \brief Combine values into a single hash_code.
+/// Combine values into a single hash_code.
 ///
 /// This routine accepts a varying number of arguments of any type. It will
 /// attempt to combine them into a single hash_code. For user-defined types it
@@ -610,7 +610,7 @@
 namespace hashing {
 namespace detail {
 
-/// \brief Helper to hash the value of a single integer.
+/// Helper to hash the value of a single integer.
 ///
 /// Overloads for smaller integer types are not provided to ensure consistent
 /// behavior in the presence of integral promotions. Essentially,
diff --git a/linux-x64/clang/include/llvm/ADT/ImmutableList.h b/linux-x64/clang/include/llvm/ADT/ImmutableList.h
index 60d63e0..1f5e981 100644
--- a/linux-x64/clang/include/llvm/ADT/ImmutableList.h
+++ b/linux-x64/clang/include/llvm/ADT/ImmutableList.h
@@ -166,7 +166,7 @@
     if (ownsAllocator()) delete &getAllocator();
   }
 
-  ImmutableList<T> concat(const T& Head, ImmutableList<T> Tail) {
+  LLVM_NODISCARD ImmutableList<T> concat(const T &Head, ImmutableList<T> Tail) {
     // Profile the new list to see if it already exists in our cache.
     FoldingSetNodeID ID;
     void* InsertPos;
@@ -188,7 +188,7 @@
     return L;
   }
 
-  ImmutableList<T> add(const T& D, ImmutableList<T> L) {
+  LLVM_NODISCARD ImmutableList<T> add(const T& D, ImmutableList<T> L) {
     return concat(D, L);
   }
 
diff --git a/linux-x64/clang/include/llvm/ADT/ImmutableMap.h b/linux-x64/clang/include/llvm/ADT/ImmutableMap.h
index 10d1e1f..cbc27ff 100644
--- a/linux-x64/clang/include/llvm/ADT/ImmutableMap.h
+++ b/linux-x64/clang/include/llvm/ADT/ImmutableMap.h
@@ -114,12 +114,13 @@
 
     ImmutableMap getEmptyMap() { return ImmutableMap(F.getEmptyTree()); }
 
-    ImmutableMap add(ImmutableMap Old, key_type_ref K, data_type_ref D) {
+    LLVM_NODISCARD ImmutableMap add(ImmutableMap Old, key_type_ref K,
+                                    data_type_ref D) {
       TreeTy *T = F.add(Old.Root, std::pair<key_type,data_type>(K,D));
       return ImmutableMap(Canonicalize ? F.getCanonicalTree(T): T);
     }
 
-    ImmutableMap remove(ImmutableMap Old, key_type_ref K) {
+    LLVM_NODISCARD ImmutableMap remove(ImmutableMap Old, key_type_ref K) {
       TreeTy *T = F.remove(Old.Root,K);
       return ImmutableMap(Canonicalize ? F.getCanonicalTree(T): T);
     }
diff --git a/linux-x64/clang/include/llvm/ADT/ImmutableSet.h b/linux-x64/clang/include/llvm/ADT/ImmutableSet.h
index 9d580c5..b1d5f4a 100644
--- a/linux-x64/clang/include/llvm/ADT/ImmutableSet.h
+++ b/linux-x64/clang/include/llvm/ADT/ImmutableSet.h
@@ -1017,7 +1017,7 @@
     ///  of this operation is logarithmic in the size of the original set.
     ///  The memory allocated to represent the set is released when the
     ///  factory object that created the set is destroyed.
-    ImmutableSet add(ImmutableSet Old, value_type_ref V) {
+    LLVM_NODISCARD ImmutableSet add(ImmutableSet Old, value_type_ref V) {
       TreeTy *NewT = F.add(Old.Root, V);
       return ImmutableSet(Canonicalize ? F.getCanonicalTree(NewT) : NewT);
     }
@@ -1029,7 +1029,7 @@
     ///  of this operation is logarithmic in the size of the original set.
     ///  The memory allocated to represent the set is released when the
     ///  factory object that created the set is destroyed.
-    ImmutableSet remove(ImmutableSet Old, value_type_ref V) {
+    LLVM_NODISCARD ImmutableSet remove(ImmutableSet Old, value_type_ref V) {
       TreeTy *NewT = F.remove(Old.Root, V);
       return ImmutableSet(Canonicalize ? F.getCanonicalTree(NewT) : NewT);
     }
diff --git a/linux-x64/clang/include/llvm/ADT/MapVector.h b/linux-x64/clang/include/llvm/ADT/MapVector.h
index f69f8fd..47b4987 100644
--- a/linux-x64/clang/include/llvm/ADT/MapVector.h
+++ b/linux-x64/clang/include/llvm/ADT/MapVector.h
@@ -39,6 +39,10 @@
   MapType Map;
   VectorType Vector;
 
+  static_assert(
+      std::is_integral<typename MapType::mapped_type>::value,
+      "The mapped_type of the specified Map must be an integral type");
+
 public:
   using value_type = typename VectorType::value_type;
   using size_type = typename VectorType::size_type;
@@ -93,9 +97,9 @@
   }
 
   ValueT &operator[](const KeyT &Key) {
-    std::pair<KeyT, unsigned> Pair = std::make_pair(Key, 0);
+    std::pair<KeyT, typename MapType::mapped_type> Pair = std::make_pair(Key, 0);
     std::pair<typename MapType::iterator, bool> Result = Map.insert(Pair);
-    unsigned &I = Result.first->second;
+    auto &I = Result.first->second;
     if (Result.second) {
       Vector.push_back(std::make_pair(Key, ValueT()));
       I = Vector.size() - 1;
@@ -112,9 +116,9 @@
   }
 
   std::pair<iterator, bool> insert(const std::pair<KeyT, ValueT> &KV) {
-    std::pair<KeyT, unsigned> Pair = std::make_pair(KV.first, 0);
+    std::pair<KeyT, typename MapType::mapped_type> Pair = std::make_pair(KV.first, 0);
     std::pair<typename MapType::iterator, bool> Result = Map.insert(Pair);
-    unsigned &I = Result.first->second;
+    auto &I = Result.first->second;
     if (Result.second) {
       Vector.push_back(std::make_pair(KV.first, KV.second));
       I = Vector.size() - 1;
@@ -125,9 +129,9 @@
 
   std::pair<iterator, bool> insert(std::pair<KeyT, ValueT> &&KV) {
     // Copy KV.first into the map, then move it into the vector.
-    std::pair<KeyT, unsigned> Pair = std::make_pair(KV.first, 0);
+    std::pair<KeyT, typename MapType::mapped_type> Pair = std::make_pair(KV.first, 0);
     std::pair<typename MapType::iterator, bool> Result = Map.insert(Pair);
-    unsigned &I = Result.first->second;
+    auto &I = Result.first->second;
     if (Result.second) {
       Vector.push_back(std::move(KV));
       I = Vector.size() - 1;
@@ -153,14 +157,14 @@
                             (Vector.begin() + Pos->second);
   }
 
-  /// \brief Remove the last element from the vector.
+  /// Remove the last element from the vector.
   void pop_back() {
     typename MapType::iterator Pos = Map.find(Vector.back().first);
     Map.erase(Pos);
     Vector.pop_back();
   }
 
-  /// \brief Remove the element given by Iterator.
+  /// Remove the element given by Iterator.
   ///
   /// Returns an iterator to the element following the one which was removed,
   /// which may be end().
@@ -183,7 +187,7 @@
     return Next;
   }
 
-  /// \brief Remove all elements with the key value Key.
+  /// Remove all elements with the key value Key.
   ///
   /// Returns the number of elements removed.
   size_type erase(const KeyT &Key) {
@@ -194,7 +198,7 @@
     return 1;
   }
 
-  /// \brief Remove the elements that match the predicate.
+  /// Remove the elements that match the predicate.
   ///
   /// Erase all elements that match \c Pred in a single pass.  Takes linear
   /// time.
@@ -223,7 +227,7 @@
   Vector.erase(O, Vector.end());
 }
 
-/// \brief A MapVector that performs no allocations if smaller than a certain
+/// A MapVector that performs no allocations if smaller than a certain
 /// size.
 template <typename KeyT, typename ValueT, unsigned N>
 struct SmallMapVector
diff --git a/linux-x64/clang/include/llvm/ADT/None.h b/linux-x64/clang/include/llvm/ADT/None.h
index c7a99c6..4b6bc1e 100644
--- a/linux-x64/clang/include/llvm/ADT/None.h
+++ b/linux-x64/clang/include/llvm/ADT/None.h
@@ -17,7 +17,7 @@
 #define LLVM_ADT_NONE_H
 
 namespace llvm {
-/// \brief A simple null object to allow implicit construction of Optional<T>
+/// A simple null object to allow implicit construction of Optional<T>
 /// and similar types without having to spell out the specialization's name.
 // (constant value 1 in an attempt to workaround MSVC build issue... )
 enum class NoneType { None = 1 };
diff --git a/linux-x64/clang/include/llvm/ADT/PackedVector.h b/linux-x64/clang/include/llvm/ADT/PackedVector.h
index 95adc29..3d53c49 100644
--- a/linux-x64/clang/include/llvm/ADT/PackedVector.h
+++ b/linux-x64/clang/include/llvm/ADT/PackedVector.h
@@ -65,7 +65,7 @@
   }
 };
 
-/// \brief Store a vector of values using a specific number of bits for each
+/// Store a vector of values using a specific number of bits for each
 /// value. Both signed and unsigned types can be used, e.g
 /// @code
 ///   PackedVector<signed, 2> vec;
diff --git a/linux-x64/clang/include/llvm/ADT/SCCIterator.h b/linux-x64/clang/include/llvm/ADT/SCCIterator.h
index 784a58d..ab1dc46 100644
--- a/linux-x64/clang/include/llvm/ADT/SCCIterator.h
+++ b/linux-x64/clang/include/llvm/ADT/SCCIterator.h
@@ -33,7 +33,7 @@
 
 namespace llvm {
 
-/// \brief Enumerate the SCCs of a directed graph in reverse topological order
+/// Enumerate the SCCs of a directed graph in reverse topological order
 /// of the SCC DAG.
 ///
 /// This is implemented using Tarjan's DFS algorithm using an internal stack to
@@ -104,7 +104,7 @@
   }
   static scc_iterator end(const GraphT &) { return scc_iterator(); }
 
-  /// \brief Direct loop termination test which is more efficient than
+  /// Direct loop termination test which is more efficient than
   /// comparison with \c end().
   bool isAtEnd() const {
     assert(!CurrentSCC.empty() || VisitStack.empty());
@@ -125,7 +125,7 @@
     return CurrentSCC;
   }
 
-  /// \brief Test if the current SCC has a loop.
+  /// Test if the current SCC has a loop.
   ///
   /// If the SCC has more than one node, this is trivially true.  If not, it may
   /// still contain a loop if the node has an edge back to itself.
@@ -222,12 +222,12 @@
     return false;
   }
 
-/// \brief Construct the begin iterator for a deduced graph type T.
+/// Construct the begin iterator for a deduced graph type T.
 template <class T> scc_iterator<T> scc_begin(const T &G) {
   return scc_iterator<T>::begin(G);
 }
 
-/// \brief Construct the end iterator for a deduced graph type T.
+/// Construct the end iterator for a deduced graph type T.
 template <class T> scc_iterator<T> scc_end(const T &G) {
   return scc_iterator<T>::end(G);
 }
diff --git a/linux-x64/clang/include/llvm/ADT/STLExtras.h b/linux-x64/clang/include/llvm/ADT/STLExtras.h
index 051b900..03109a0 100644
--- a/linux-x64/clang/include/llvm/ADT/STLExtras.h
+++ b/linux-x64/clang/include/llvm/ADT/STLExtras.h
@@ -21,6 +21,7 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/iterator.h"
 #include "llvm/ADT/iterator_range.h"
+#include "llvm/Config/abi-breaking.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <algorithm>
 #include <cassert>
@@ -58,6 +59,19 @@
 } // end namespace detail
 
 //===----------------------------------------------------------------------===//
+//     Extra additions to <type_traits>
+//===----------------------------------------------------------------------===//
+
+template <typename T>
+struct negation : std::integral_constant<bool, !bool(T::value)> {};
+
+template <typename...> struct conjunction : std::true_type {};
+template <typename B1> struct conjunction<B1> : B1 {};
+template <typename B1, typename... Bn>
+struct conjunction<B1, Bn...>
+    : std::conditional<bool(B1::value), conjunction<Bn...>, B1>::type {};
+
+//===----------------------------------------------------------------------===//
 //     Extra additions to <functional>
 //===----------------------------------------------------------------------===//
 
@@ -271,60 +285,121 @@
 ///   auto R = make_filter_range(A, [](int N) { return N % 2 == 1; });
 ///   // R contains { 1, 3 }.
 /// \endcode
-template <typename WrappedIteratorT, typename PredicateT>
-class filter_iterator
+///
+/// Note: filter_iterator_base implements support for forward iteration.
+/// filter_iterator_impl exists to provide support for bidirectional iteration,
+/// conditional on whether the wrapped iterator supports it.
+template <typename WrappedIteratorT, typename PredicateT, typename IterTag>
+class filter_iterator_base
     : public iterator_adaptor_base<
-          filter_iterator<WrappedIteratorT, PredicateT>, WrappedIteratorT,
+          filter_iterator_base<WrappedIteratorT, PredicateT, IterTag>,
+          WrappedIteratorT,
           typename std::common_type<
-              std::forward_iterator_tag,
-              typename std::iterator_traits<
-                  WrappedIteratorT>::iterator_category>::type> {
+              IterTag, typename std::iterator_traits<
+                           WrappedIteratorT>::iterator_category>::type> {
   using BaseT = iterator_adaptor_base<
-      filter_iterator<WrappedIteratorT, PredicateT>, WrappedIteratorT,
+      filter_iterator_base<WrappedIteratorT, PredicateT, IterTag>,
+      WrappedIteratorT,
       typename std::common_type<
-          std::forward_iterator_tag,
-          typename std::iterator_traits<WrappedIteratorT>::iterator_category>::
-          type>;
+          IterTag, typename std::iterator_traits<
+                       WrappedIteratorT>::iterator_category>::type>;
 
-  struct PayloadType {
-    WrappedIteratorT End;
-    PredicateT Pred;
-  };
-
-  Optional<PayloadType> Payload;
+protected:
+  WrappedIteratorT End;
+  PredicateT Pred;
 
   void findNextValid() {
-    assert(Payload && "Payload should be engaged when findNextValid is called");
-    while (this->I != Payload->End && !Payload->Pred(*this->I))
+    while (this->I != End && !Pred(*this->I))
       BaseT::operator++();
   }
 
-  // Construct the begin iterator. The begin iterator requires to know where end
-  // is, so that it can properly stop when it hits end.
-  filter_iterator(WrappedIteratorT Begin, WrappedIteratorT End, PredicateT Pred)
-      : BaseT(std::move(Begin)),
-        Payload(PayloadType{std::move(End), std::move(Pred)}) {
+  // Construct the iterator. The begin iterator needs to know where the end
+  // is, so that it can properly stop when it gets there. The end iterator only
+  // needs the predicate to support bidirectional iteration.
+  filter_iterator_base(WrappedIteratorT Begin, WrappedIteratorT End,
+                       PredicateT Pred)
+      : BaseT(Begin), End(End), Pred(Pred) {
     findNextValid();
   }
 
-  // Construct the end iterator. It's not incrementable, so Payload doesn't
-  // have to be engaged.
-  filter_iterator(WrappedIteratorT End) : BaseT(End) {}
-
 public:
   using BaseT::operator++;
 
-  filter_iterator &operator++() {
+  filter_iterator_base &operator++() {
     BaseT::operator++();
     findNextValid();
     return *this;
   }
-
-  template <typename RT, typename PT>
-  friend iterator_range<filter_iterator<detail::IterOfRange<RT>, PT>>
-  make_filter_range(RT &&, PT);
 };
 
+/// Specialization of filter_iterator_base for forward iteration only.
+template <typename WrappedIteratorT, typename PredicateT,
+          typename IterTag = std::forward_iterator_tag>
+class filter_iterator_impl
+    : public filter_iterator_base<WrappedIteratorT, PredicateT, IterTag> {
+  using BaseT = filter_iterator_base<WrappedIteratorT, PredicateT, IterTag>;
+
+public:
+  filter_iterator_impl(WrappedIteratorT Begin, WrappedIteratorT End,
+                       PredicateT Pred)
+      : BaseT(Begin, End, Pred) {}
+};
+
+/// Specialization of filter_iterator_base for bidirectional iteration.
+template <typename WrappedIteratorT, typename PredicateT>
+class filter_iterator_impl<WrappedIteratorT, PredicateT,
+                           std::bidirectional_iterator_tag>
+    : public filter_iterator_base<WrappedIteratorT, PredicateT,
+                                  std::bidirectional_iterator_tag> {
+  using BaseT = filter_iterator_base<WrappedIteratorT, PredicateT,
+                                     std::bidirectional_iterator_tag>;
+  void findPrevValid() {
+    while (!this->Pred(*this->I))
+      BaseT::operator--();
+  }
+
+public:
+  using BaseT::operator--;
+
+  filter_iterator_impl(WrappedIteratorT Begin, WrappedIteratorT End,
+                       PredicateT Pred)
+      : BaseT(Begin, End, Pred) {}
+
+  filter_iterator_impl &operator--() {
+    BaseT::operator--();
+    findPrevValid();
+    return *this;
+  }
+};
+
+namespace detail {
+
+template <bool is_bidirectional> struct fwd_or_bidi_tag_impl {
+  using type = std::forward_iterator_tag;
+};
+
+template <> struct fwd_or_bidi_tag_impl<true> {
+  using type = std::bidirectional_iterator_tag;
+};
+
+/// Helper which sets its type member to forward_iterator_tag if the category
+/// of \p IterT does not derive from bidirectional_iterator_tag, and to
+/// bidirectional_iterator_tag otherwise.
+template <typename IterT> struct fwd_or_bidi_tag {
+  using type = typename fwd_or_bidi_tag_impl<std::is_base_of<
+      std::bidirectional_iterator_tag,
+      typename std::iterator_traits<IterT>::iterator_category>::value>::type;
+};
+
+} // namespace detail
+
+/// Defines filter_iterator to a suitable specialization of
+/// filter_iterator_impl, based on the underlying iterator's category.
+template <typename WrappedIteratorT, typename PredicateT>
+using filter_iterator = filter_iterator_impl<
+    WrappedIteratorT, PredicateT,
+    typename detail::fwd_or_bidi_tag<WrappedIteratorT>::type>;
+
 /// Convenience function that takes a range of elements and a predicate,
 /// and return a new filter_iterator range.
 ///
@@ -337,10 +412,94 @@
 make_filter_range(RangeT &&Range, PredicateT Pred) {
   using FilterIteratorT =
       filter_iterator<detail::IterOfRange<RangeT>, PredicateT>;
-  return make_range(FilterIteratorT(std::begin(std::forward<RangeT>(Range)),
-                                    std::end(std::forward<RangeT>(Range)),
-                                    std::move(Pred)),
-                    FilterIteratorT(std::end(std::forward<RangeT>(Range))));
+  return make_range(
+      FilterIteratorT(std::begin(std::forward<RangeT>(Range)),
+                      std::end(std::forward<RangeT>(Range)), Pred),
+      FilterIteratorT(std::end(std::forward<RangeT>(Range)),
+                      std::end(std::forward<RangeT>(Range)), Pred));
+}
+
+/// A pseudo-iterator adaptor that is designed to implement "early increment"
+/// style loops.
+///
+/// This is *not a normal iterator* and should almost never be used directly. It
+/// is intended primarily to be used with range based for loops and some range
+/// algorithms.
+///
+/// The iterator isn't quite an `OutputIterator` or an `InputIterator` but
+/// somewhere between them. The constraints of these iterators are:
+///
+/// - On construction or after being incremented, it is comparable and
+///   dereferencable. It is *not* incrementable.
+/// - After being dereferenced, it is neither comparable nor dereferencable, it
+///   is only incrementable.
+///
+/// This means you can only dereference the iterator once, and you can only
+/// increment it once between dereferences.
+template <typename WrappedIteratorT>
+class early_inc_iterator_impl
+    : public iterator_adaptor_base<early_inc_iterator_impl<WrappedIteratorT>,
+                                   WrappedIteratorT, std::input_iterator_tag> {
+  using BaseT =
+      iterator_adaptor_base<early_inc_iterator_impl<WrappedIteratorT>,
+                            WrappedIteratorT, std::input_iterator_tag>;
+
+  using PointerT = typename std::iterator_traits<WrappedIteratorT>::pointer;
+
+protected:
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
+  bool IsEarlyIncremented = false;
+#endif
+
+public:
+  early_inc_iterator_impl(WrappedIteratorT I) : BaseT(I) {}
+
+  using BaseT::operator*;
+  typename BaseT::reference operator*() {
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
+    assert(!IsEarlyIncremented && "Cannot dereference twice!");
+    IsEarlyIncremented = true;
+#endif
+    return *(this->I)++;
+  }
+
+  using BaseT::operator++;
+  early_inc_iterator_impl &operator++() {
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
+    assert(IsEarlyIncremented && "Cannot increment before dereferencing!");
+    IsEarlyIncremented = false;
+#endif
+    return *this;
+  }
+
+  using BaseT::operator==;
+  bool operator==(const early_inc_iterator_impl &RHS) const {
+#if LLVM_ENABLE_ABI_BREAKING_CHECKS
+    assert(!IsEarlyIncremented && "Cannot compare after dereferencing!");
+#endif
+    return BaseT::operator==(RHS);
+  }
+};
+
+/// Make a range that does early increment to allow mutation of the underlying
+/// range without disrupting iteration.
+///
+/// The underlying iterator will be incremented immediately after it is
+/// dereferenced, allowing deletion of the current node or insertion of nodes to
+/// not disrupt iteration provided they do not invalidate the *next* iterator --
+/// the current iterator can be invalidated.
+///
+/// This requires a very exact pattern of use that is only really suitable to
+/// range based for loops and other range algorithms that explicitly guarantee
+/// to dereference exactly once each element, and to increment exactly once each
+/// element.
+template <typename RangeT>
+iterator_range<early_inc_iterator_impl<detail::IterOfRange<RangeT>>>
+make_early_inc_range(RangeT &&Range) {
+  using EarlyIncIteratorT =
+      early_inc_iterator_impl<detail::IterOfRange<RangeT>>;
+  return make_range(EarlyIncIteratorT(std::begin(std::forward<RangeT>(Range))),
+                    EarlyIncIteratorT(std::end(std::forward<RangeT>(Range))));
 }
 
 // forward declarations required by zip_shortest/zip_first
@@ -649,7 +808,7 @@
 //     Extra additions to <utility>
 //===----------------------------------------------------------------------===//
 
-/// \brief Function object to check whether the first component of a std::pair
+/// Function object to check whether the first component of a std::pair
 /// compares less than the first component of another std::pair.
 struct less_first {
   template <typename T> bool operator()(const T &lhs, const T &rhs) const {
@@ -657,7 +816,7 @@
   }
 };
 
-/// \brief Function object to check whether the second component of a std::pair
+/// Function object to check whether the second component of a std::pair
 /// compares less than the second component of another std::pair.
 struct less_second {
   template <typename T> bool operator()(const T &lhs, const T &rhs) const {
@@ -665,16 +824,29 @@
   }
 };
 
+/// \brief Function object to apply a binary function to the first component of
+/// a std::pair.
+template<typename FuncTy>
+struct on_first {
+  FuncTy func;
+
+  template <typename T>
+  auto operator()(const T &lhs, const T &rhs) const
+      -> decltype(func(lhs.first, rhs.first)) {
+    return func(lhs.first, rhs.first);
+  }
+};
+
 // A subset of N3658. More stuff can be added as-needed.
 
-/// \brief Represents a compile-time sequence of integers.
+/// Represents a compile-time sequence of integers.
 template <class T, T... I> struct integer_sequence {
   using value_type = T;
 
   static constexpr size_t size() { return sizeof...(I); }
 };
 
-/// \brief Alias for the common case of a sequence of size_ts.
+/// Alias for the common case of a sequence of size_ts.
 template <size_t... I>
 struct index_sequence : integer_sequence<std::size_t, I...> {};
 
@@ -683,7 +855,7 @@
 template <std::size_t... I>
 struct build_index_impl<0, I...> : index_sequence<I...> {};
 
-/// \brief Creates a compile-time integer sequence for a parameter pack.
+/// Creates a compile-time integer sequence for a parameter pack.
 template <class... Ts>
 struct index_sequence_for : build_index_impl<sizeof...(Ts)> {};
 
@@ -692,7 +864,7 @@
 template <int N> struct rank : rank<N - 1> {};
 template <> struct rank<0> {};
 
-/// \brief traits class for checking whether type T is one of any of the given
+/// traits class for checking whether type T is one of any of the given
 /// types in the variadic list.
 template <typename T, typename... Ts> struct is_one_of {
   static const bool value = false;
@@ -704,7 +876,7 @@
       std::is_same<T, U>::value || is_one_of<T, Ts...>::value;
 };
 
-/// \brief traits class for checking whether type T is a base class for all
+/// traits class for checking whether type T is a base class for all
 ///  the given types in the variadic list.
 template <typename T, typename... Ts> struct are_base_of {
   static const bool value = true;
@@ -943,7 +1115,7 @@
   return std::lower_bound(adl_begin(Range), adl_end(Range), I);
 }
 
-/// \brief Given a range of type R, iterate the entire range and return a
+/// Given a range of type R, iterate the entire range and return a
 /// SmallVector with elements of the vector.  This is useful, for example,
 /// when you want to iterate a range and then sort the results.
 template <unsigned Size, typename R>
@@ -964,13 +1136,25 @@
   C.erase(remove_if(C, P), C.end());
 }
 
+/// Get the size of a range. This is a wrapper function around std::distance
+/// which is only enabled when the operation is O(1).
+template <typename R>
+auto size(R &&Range, typename std::enable_if<
+                         std::is_same<typename std::iterator_traits<decltype(
+                                          Range.begin())>::iterator_category,
+                                      std::random_access_iterator_tag>::value,
+                         void>::type * = nullptr)
+    -> decltype(std::distance(Range.begin(), Range.end())) {
+  return std::distance(Range.begin(), Range.end());
+}
+
 //===----------------------------------------------------------------------===//
 //     Extra additions to <memory>
 //===----------------------------------------------------------------------===//
 
 // Implement make_unique according to N3656.
 
-/// \brief Constructs a `new T()` with the given args and returns a
+/// Constructs a `new T()` with the given args and returns a
 ///        `unique_ptr<T>` which owns the object.
 ///
 /// Example:
@@ -983,7 +1167,7 @@
   return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
 }
 
-/// \brief Constructs a `new T[n]` with the given args and returns a
+/// Constructs a `new T[n]` with the given args and returns a
 ///        `unique_ptr<T[]>` which owns the object.
 ///
 /// \param n size of the new array.
diff --git a/linux-x64/clang/include/llvm/ADT/SetVector.h b/linux-x64/clang/include/llvm/ADT/SetVector.h
index 04ed52f..3d67810 100644
--- a/linux-x64/clang/include/llvm/ADT/SetVector.h
+++ b/linux-x64/clang/include/llvm/ADT/SetVector.h
@@ -31,7 +31,7 @@
 
 namespace llvm {
 
-/// \brief A vector that has set insertion semantics.
+/// A vector that has set insertion semantics.
 ///
 /// This adapter class provides a way to keep a set of things that also has the
 /// property of a deterministic iteration order. The order of iteration is the
@@ -52,10 +52,10 @@
   using const_reverse_iterator = typename vector_type::const_reverse_iterator;
   using size_type = typename vector_type::size_type;
 
-  /// \brief Construct an empty SetVector
+  /// Construct an empty SetVector
   SetVector() = default;
 
-  /// \brief Initialize a SetVector with a range of elements
+  /// Initialize a SetVector with a range of elements
   template<typename It>
   SetVector(It Start, It End) {
     insert(Start, End);
@@ -69,75 +69,75 @@
     return std::move(vector_);
   }
 
-  /// \brief Determine if the SetVector is empty or not.
+  /// Determine if the SetVector is empty or not.
   bool empty() const {
     return vector_.empty();
   }
 
-  /// \brief Determine the number of elements in the SetVector.
+  /// Determine the number of elements in the SetVector.
   size_type size() const {
     return vector_.size();
   }
 
-  /// \brief Get an iterator to the beginning of the SetVector.
+  /// Get an iterator to the beginning of the SetVector.
   iterator begin() {
     return vector_.begin();
   }
 
-  /// \brief Get a const_iterator to the beginning of the SetVector.
+  /// Get a const_iterator to the beginning of the SetVector.
   const_iterator begin() const {
     return vector_.begin();
   }
 
-  /// \brief Get an iterator to the end of the SetVector.
+  /// Get an iterator to the end of the SetVector.
   iterator end() {
     return vector_.end();
   }
 
-  /// \brief Get a const_iterator to the end of the SetVector.
+  /// Get a const_iterator to the end of the SetVector.
   const_iterator end() const {
     return vector_.end();
   }
 
-  /// \brief Get an reverse_iterator to the end of the SetVector.
+  /// Get an reverse_iterator to the end of the SetVector.
   reverse_iterator rbegin() {
     return vector_.rbegin();
   }
 
-  /// \brief Get a const_reverse_iterator to the end of the SetVector.
+  /// Get a const_reverse_iterator to the end of the SetVector.
   const_reverse_iterator rbegin() const {
     return vector_.rbegin();
   }
 
-  /// \brief Get a reverse_iterator to the beginning of the SetVector.
+  /// Get a reverse_iterator to the beginning of the SetVector.
   reverse_iterator rend() {
     return vector_.rend();
   }
 
-  /// \brief Get a const_reverse_iterator to the beginning of the SetVector.
+  /// Get a const_reverse_iterator to the beginning of the SetVector.
   const_reverse_iterator rend() const {
     return vector_.rend();
   }
 
-  /// \brief Return the first element of the SetVector.
+  /// Return the first element of the SetVector.
   const T &front() const {
     assert(!empty() && "Cannot call front() on empty SetVector!");
     return vector_.front();
   }
 
-  /// \brief Return the last element of the SetVector.
+  /// Return the last element of the SetVector.
   const T &back() const {
     assert(!empty() && "Cannot call back() on empty SetVector!");
     return vector_.back();
   }
 
-  /// \brief Index into the SetVector.
+  /// Index into the SetVector.
   const_reference operator[](size_type n) const {
     assert(n < vector_.size() && "SetVector access out of range!");
     return vector_[n];
   }
 
-  /// \brief Insert a new element into the SetVector.
+  /// Insert a new element into the SetVector.
   /// \returns true if the element was inserted into the SetVector.
   bool insert(const value_type &X) {
     bool result = set_.insert(X).second;
@@ -146,7 +146,7 @@
     return result;
   }
 
-  /// \brief Insert a range of elements into the SetVector.
+  /// Insert a range of elements into the SetVector.
   template<typename It>
   void insert(It Start, It End) {
     for (; Start != End; ++Start)
@@ -154,7 +154,7 @@
         vector_.push_back(*Start);
   }
 
-  /// \brief Remove an item from the set vector.
+  /// Remove an item from the set vector.
   bool remove(const value_type& X) {
     if (set_.erase(X)) {
       typename vector_type::iterator I = find(vector_, X);
@@ -183,7 +183,7 @@
     return vector_.erase(NI);
   }
 
-  /// \brief Remove items from the set vector based on a predicate function.
+  /// Remove items from the set vector based on a predicate function.
   ///
   /// This is intended to be equivalent to the following code, if we could
   /// write it:
@@ -206,19 +206,19 @@
     return true;
   }
 
-  /// \brief Count the number of elements of a given key in the SetVector.
+  /// Count the number of elements of a given key in the SetVector.
   /// \returns 0 if the element is not in the SetVector, 1 if it is.
   size_type count(const key_type &key) const {
     return set_.count(key);
   }
 
-  /// \brief Completely clear the SetVector
+  /// Completely clear the SetVector
   void clear() {
     set_.clear();
     vector_.clear();
   }
 
-  /// \brief Remove the last element of the SetVector.
+  /// Remove the last element of the SetVector.
   void pop_back() {
     assert(!empty() && "Cannot remove an element from an empty SetVector!");
     set_.erase(back());
@@ -239,7 +239,7 @@
     return vector_ != that.vector_;
   }
 
-  /// \brief Compute This := This u S, return whether 'This' changed.
+  /// Compute This := This u S, return whether 'This' changed.
   /// TODO: We should be able to use set_union from SetOperations.h, but
   ///       SetVector interface is inconsistent with DenseSet.
   template <class STy>
@@ -254,7 +254,7 @@
     return Changed;
   }
 
-  /// \brief Compute This := This - B
+  /// Compute This := This - B
   /// TODO: We should be able to use set_subtract from SetOperations.h, but
   ///       SetVector interface is inconsistent with DenseSet.
   template <class STy>
@@ -265,7 +265,7 @@
   }
 
 private:
-  /// \brief A wrapper predicate designed for use with std::remove_if.
+  /// A wrapper predicate designed for use with std::remove_if.
   ///
   /// This predicate wraps a predicate suitable for use with std::remove_if to
   /// call set_.erase(x) on each element which is slated for removal.
@@ -292,7 +292,7 @@
   vector_type vector_;   ///< The vector.
 };
 
-/// \brief A SetVector that performs no allocations if smaller than
+/// A SetVector that performs no allocations if smaller than
 /// a certain size.
 template <typename T, unsigned N>
 class SmallSetVector
@@ -300,7 +300,7 @@
 public:
   SmallSetVector() = default;
 
-  /// \brief Initialize a SmallSetVector with a range of elements
+  /// Initialize a SmallSetVector with a range of elements
   template<typename It>
   SmallSetVector(It Start, It End) {
     this->insert(Start, End);
diff --git a/linux-x64/clang/include/llvm/ADT/SmallPtrSet.h b/linux-x64/clang/include/llvm/ADT/SmallPtrSet.h
index 78ea613..db08e40 100644
--- a/linux-x64/clang/include/llvm/ADT/SmallPtrSet.h
+++ b/linux-x64/clang/include/llvm/ADT/SmallPtrSet.h
@@ -335,7 +335,7 @@
   enum { Val = RoundUpToPowerOfTwoH<N, (N&(N-1)) == 0>::Val };
 };
 
-/// \brief A templated base class for \c SmallPtrSet which provides the
+/// A templated base class for \c SmallPtrSet which provides the
 /// typesafe interface that is common across all small sizes.
 ///
 /// This is particularly useful for passing around between interface boundaries
diff --git a/linux-x64/clang/include/llvm/ADT/SmallSet.h b/linux-x64/clang/include/llvm/ADT/SmallSet.h
index d52d0f0..5d84627 100644
--- a/linux-x64/clang/include/llvm/ADT/SmallSet.h
+++ b/linux-x64/clang/include/llvm/ADT/SmallSet.h
@@ -17,21 +17,120 @@
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/iterator.h"
 #include "llvm/Support/Compiler.h"
+#include "llvm/Support/type_traits.h"
 #include <cstddef>
 #include <functional>
 #include <set>
+#include <type_traits>
 #include <utility>
 
 namespace llvm {
 
+/// SmallSetIterator - This class implements a const_iterator for SmallSet by
+/// delegating to the underlying SmallVector or Set iterators.
+template <typename T, unsigned N, typename C>
+class SmallSetIterator
+    : public iterator_facade_base<SmallSetIterator<T, N, C>,
+                                  std::forward_iterator_tag, T> {
+private:
+  using SetIterTy = typename std::set<T, C>::const_iterator;
+  using VecIterTy = typename SmallVector<T, N>::const_iterator;
+  using SelfTy = SmallSetIterator<T, N, C>;
+
+  /// Iterators to the parts of the SmallSet containing the data. They are set
+  /// depending on isSmall.
+  union {
+    SetIterTy SetIter;
+    VecIterTy VecIter;
+  };
+
+  bool isSmall;
+
+public:
+  SmallSetIterator(SetIterTy SetIter) : SetIter(SetIter), isSmall(false) {}
+
+  SmallSetIterator(VecIterTy VecIter) : VecIter(VecIter), isSmall(true) {}
+
+  // Spell out destructor, copy/move constructor and assignment operators for
+  // MSVC STL, where set<T>::const_iterator is not trivially copy constructible.
+  ~SmallSetIterator() {
+    if (isSmall)
+      VecIter.~VecIterTy();
+    else
+      SetIter.~SetIterTy();
+  }
+
+  SmallSetIterator(const SmallSetIterator &Other) : isSmall(Other.isSmall) {
+    if (isSmall)
+      VecIter = Other.VecIter;
+    else
+      // Use placement new, to make sure SetIter is properly constructed, even
+      // if it is not trivially copy-able (e.g. in MSVC).
+      new (&SetIter) SetIterTy(Other.SetIter);
+  }
+
+  SmallSetIterator(SmallSetIterator &&Other) : isSmall(Other.isSmall) {
+    if (isSmall)
+      VecIter = std::move(Other.VecIter);
+    else
+      // Use placement new, to make sure SetIter is properly constructed, even
+      // if it is not trivially copy-able (e.g. in MSVC).
+      new (&SetIter) SetIterTy(std::move(Other.SetIter));
+  }
+
+  SmallSetIterator& operator=(const SmallSetIterator& Other) {
+    // Call destructor for SetIter, so it gets properly destroyed if it is
+    // not trivially destructible in case we are setting VecIter.
+    if (!isSmall)
+      SetIter.~SetIterTy();
+
+    isSmall = Other.isSmall;
+    if (isSmall)
+      VecIter = Other.VecIter;
+    else
+      new (&SetIter) SetIterTy(Other.SetIter);
+    return *this;
+  }
+
+  SmallSetIterator& operator=(SmallSetIterator&& Other) {
+    // Call destructor for SetIter, so it gets properly destroyed if it is
+    // not trivially destructible in case we are setting VecIter.
+    if (!isSmall)
+      SetIter.~SetIterTy();
+
+    isSmall = Other.isSmall;
+    if (isSmall)
+      VecIter = std::move(Other.VecIter);
+    else
+      new (&SetIter) SetIterTy(std::move(Other.SetIter));
+    return *this;
+  }
+
+  bool operator==(const SmallSetIterator &RHS) const {
+    if (isSmall != RHS.isSmall)
+      return false;
+    if (isSmall)
+      return VecIter == RHS.VecIter;
+    return SetIter == RHS.SetIter;
+  }
+
+  SmallSetIterator &operator++() { // Preincrement
+    if (isSmall)
+      VecIter++;
+    else
+      SetIter++;
+    return *this;
+  }
+
+  const T &operator*() const { return isSmall ? *VecIter : *SetIter; }
+};
+
 /// SmallSet - This maintains a set of unique values, optimizing for the case
 /// when the set is small (less than N).  In this case, the set can be
 /// maintained with no mallocs.  If the set gets large, we expand to using an
 /// std::set to maintain reasonable lookup times.
-///
-/// Note that this set does not provide a way to iterate over members in the
-/// set.
 template <typename T, unsigned N, typename C = std::less<T>>
 class SmallSet {
   /// Use a SmallVector to hold the elements here (even though it will never
@@ -50,6 +149,7 @@
 
 public:
   using size_type = size_t;
+  using const_iterator = SmallSetIterator<T, N, C>;
 
   SmallSet() = default;
 
@@ -121,6 +221,18 @@
     Set.clear();
   }
 
+  const_iterator begin() const {
+    if (isSmall())
+      return {Vector.begin()};
+    return {Set.begin()};
+  }
+
+  const_iterator end() const {
+    if (isSmall())
+      return {Vector.end()};
+    return {Set.end()};
+  }
+
 private:
   bool isSmall() const { return Set.empty(); }
 
diff --git a/linux-x64/clang/include/llvm/ADT/SmallVector.h b/linux-x64/clang/include/llvm/ADT/SmallVector.h
index 3d17e70..e4ddd12 100644
--- a/linux-x64/clang/include/llvm/ADT/SmallVector.h
+++ b/linux-x64/clang/include/llvm/ADT/SmallVector.h
@@ -18,6 +18,7 @@
 #include "llvm/Support/AlignOf.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/MathExtras.h"
+#include "llvm/Support/MemAlloc.h"
 #include "llvm/Support/type_traits.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <algorithm>
@@ -37,28 +38,42 @@
 /// This is all the non-templated stuff common to all SmallVectors.
 class SmallVectorBase {
 protected:
-  void *BeginX, *EndX, *CapacityX;
+  void *BeginX;
+  unsigned Size = 0, Capacity;
 
-protected:
-  SmallVectorBase(void *FirstEl, size_t Size)
-    : BeginX(FirstEl), EndX(FirstEl), CapacityX((char*)FirstEl+Size) {}
+  SmallVectorBase() = delete;
+  SmallVectorBase(void *FirstEl, size_t Capacity)
+      : BeginX(FirstEl), Capacity(Capacity) {}
 
   /// This is an implementation of the grow() method which only works
   /// on POD-like data types and is out of line to reduce code duplication.
-  void grow_pod(void *FirstEl, size_t MinSizeInBytes, size_t TSize);
+  void grow_pod(void *FirstEl, size_t MinCapacity, size_t TSize);
 
 public:
-  /// This returns size()*sizeof(T).
-  size_t size_in_bytes() const {
-    return size_t((char*)EndX - (char*)BeginX);
-  }
+  size_t size() const { return Size; }
+  size_t capacity() const { return Capacity; }
 
-  /// capacity_in_bytes - This returns capacity()*sizeof(T).
-  size_t capacity_in_bytes() const {
-    return size_t((char*)CapacityX - (char*)BeginX);
-  }
+  LLVM_NODISCARD bool empty() const { return !Size; }
 
-  LLVM_NODISCARD bool empty() const { return BeginX == EndX; }
+  /// Set the array size to \p N, which the current array must have enough
+  /// capacity for.
+  ///
+  /// This does not construct or destroy any elements in the vector.
+  ///
+  /// Clients can use this in conjunction with capacity() to write past the end
+  /// of the buffer when they know that more elements are available, and only
+  /// update the size later. This avoids the cost of value initializing elements
+  /// which will only be overwritten.
+  void set_size(size_t Size) {
+    assert(Size <= capacity());
+    this->Size = Size;
+  }
+};
+
+/// Figure out the offset of the first element.
+template <class T, typename = void> struct SmallVectorAlignmentAndSize {
+  AlignedCharArrayUnion<SmallVectorBase> Base;
+  AlignedCharArrayUnion<T> FirstEl;
 };
 
 /// This is the part of SmallVectorTemplateBase which does not depend on whether
@@ -66,36 +81,34 @@
 /// to avoid unnecessarily requiring T to be complete.
 template <typename T, typename = void>
 class SmallVectorTemplateCommon : public SmallVectorBase {
-private:
-  template <typename, unsigned> friend struct SmallVectorStorage;
-
-  // Allocate raw space for N elements of type T.  If T has a ctor or dtor, we
-  // don't want it to be automatically run, so we need to represent the space as
-  // something else.  Use an array of char of sufficient alignment.
-  using U = AlignedCharArrayUnion<T>;
-  U FirstEl;
+  /// Find the address of the first element.  For this pointer math to be valid
+  /// with small-size of 0 for T with lots of alignment, it's important that
+  /// SmallVectorStorage is properly-aligned even for small-size of 0.
+  void *getFirstEl() const {
+    return const_cast<void *>(reinterpret_cast<const void *>(
+        reinterpret_cast<const char *>(this) +
+        offsetof(SmallVectorAlignmentAndSize<T>, FirstEl)));
+  }
   // Space after 'FirstEl' is clobbered, do not add any instance vars after it.
 
 protected:
-  SmallVectorTemplateCommon(size_t Size) : SmallVectorBase(&FirstEl, Size) {}
+  SmallVectorTemplateCommon(size_t Size)
+      : SmallVectorBase(getFirstEl(), Size) {}
 
-  void grow_pod(size_t MinSizeInBytes, size_t TSize) {
-    SmallVectorBase::grow_pod(&FirstEl, MinSizeInBytes, TSize);
+  void grow_pod(size_t MinCapacity, size_t TSize) {
+    SmallVectorBase::grow_pod(getFirstEl(), MinCapacity, TSize);
   }
 
   /// Return true if this is a smallvector which has not had dynamic
   /// memory allocated for it.
-  bool isSmall() const {
-    return BeginX == static_cast<const void*>(&FirstEl);
-  }
+  bool isSmall() const { return BeginX == getFirstEl(); }
 
   /// Put this vector in a state of being small.
   void resetToSmall() {
-    BeginX = EndX = CapacityX = &FirstEl;
+    BeginX = getFirstEl();
+    Size = Capacity = 0; // FIXME: Setting Capacity to 0 is suspect.
   }
 
-  void setEnd(T *P) { this->EndX = P; }
-
 public:
   using size_type = size_t;
   using difference_type = ptrdiff_t;
@@ -117,27 +130,20 @@
   LLVM_ATTRIBUTE_ALWAYS_INLINE
   const_iterator begin() const { return (const_iterator)this->BeginX; }
   LLVM_ATTRIBUTE_ALWAYS_INLINE
-  iterator end() { return (iterator)this->EndX; }
+  iterator end() { return begin() + size(); }
   LLVM_ATTRIBUTE_ALWAYS_INLINE
-  const_iterator end() const { return (const_iterator)this->EndX; }
+  const_iterator end() const { return begin() + size(); }
 
-protected:
-  iterator capacity_ptr() { return (iterator)this->CapacityX; }
-  const_iterator capacity_ptr() const { return (const_iterator)this->CapacityX;}
-
-public:
   // reverse iterator creation methods.
   reverse_iterator rbegin()            { return reverse_iterator(end()); }
   const_reverse_iterator rbegin() const{ return const_reverse_iterator(end()); }
   reverse_iterator rend()              { return reverse_iterator(begin()); }
   const_reverse_iterator rend() const { return const_reverse_iterator(begin());}
 
-  LLVM_ATTRIBUTE_ALWAYS_INLINE
-  size_type size() const { return end()-begin(); }
+  size_type size_in_bytes() const { return size() * sizeof(T); }
   size_type max_size() const { return size_type(-1) / sizeof(T); }
 
-  /// Return the total number of elements in the currently allocated buffer.
-  size_t capacity() const { return capacity_ptr() - begin(); }
+  size_t capacity_in_bytes() const { return capacity() * sizeof(T); }
 
   /// Return a pointer to the vector's buffer, even if empty().
   pointer data() { return pointer(begin()); }
@@ -210,21 +216,21 @@
 
 public:
   void push_back(const T &Elt) {
-    if (LLVM_UNLIKELY(this->EndX >= this->CapacityX))
+    if (LLVM_UNLIKELY(this->size() >= this->capacity()))
       this->grow();
     ::new ((void*) this->end()) T(Elt);
-    this->setEnd(this->end()+1);
+    this->set_size(this->size() + 1);
   }
 
   void push_back(T &&Elt) {
-    if (LLVM_UNLIKELY(this->EndX >= this->CapacityX))
+    if (LLVM_UNLIKELY(this->size() >= this->capacity()))
       this->grow();
     ::new ((void*) this->end()) T(::std::move(Elt));
-    this->setEnd(this->end()+1);
+    this->set_size(this->size() + 1);
   }
 
   void pop_back() {
-    this->setEnd(this->end()-1);
+    this->set_size(this->size() - 1);
     this->end()->~T();
   }
 };
@@ -232,15 +238,13 @@
 // Define this out-of-line to dissuade the C++ compiler from inlining it.
 template <typename T, bool isPodLike>
 void SmallVectorTemplateBase<T, isPodLike>::grow(size_t MinSize) {
-  size_t CurCapacity = this->capacity();
-  size_t CurSize = this->size();
+  if (MinSize > UINT32_MAX)
+    report_bad_alloc_error("SmallVector capacity overflow during allocation");
+
   // Always grow, even from zero.
-  size_t NewCapacity = size_t(NextPowerOf2(CurCapacity+2));
-  if (NewCapacity < MinSize)
-    NewCapacity = MinSize;
-  T *NewElts = static_cast<T*>(malloc(NewCapacity*sizeof(T)));
-  if (NewElts == nullptr)
-    report_bad_alloc_error("Allocation of SmallVector element failed.");
+  size_t NewCapacity = size_t(NextPowerOf2(this->capacity() + 2));
+  NewCapacity = std::min(std::max(NewCapacity, MinSize), size_t(UINT32_MAX));
+  T *NewElts = static_cast<T*>(llvm::safe_malloc(NewCapacity*sizeof(T)));
 
   // Move the elements over.
   this->uninitialized_move(this->begin(), this->end(), NewElts);
@@ -252,9 +256,8 @@
   if (!this->isSmall())
     free(this->begin());
 
-  this->setEnd(NewElts+CurSize);
   this->BeginX = NewElts;
-  this->CapacityX = this->begin()+NewCapacity;
+  this->Capacity = NewCapacity;
 }
 
 
@@ -296,26 +299,22 @@
     // use memcpy here. Note that I and E are iterators and thus might be
     // invalid for memcpy if they are equal.
     if (I != E)
-      memcpy(Dest, I, (E - I) * sizeof(T));
+      memcpy(reinterpret_cast<void *>(Dest), I, (E - I) * sizeof(T));
   }
 
   /// Double the size of the allocated memory, guaranteeing space for at
   /// least one more element or MinSize if specified.
-  void grow(size_t MinSize = 0) {
-    this->grow_pod(MinSize*sizeof(T), sizeof(T));
-  }
+  void grow(size_t MinSize = 0) { this->grow_pod(MinSize, sizeof(T)); }
 
 public:
   void push_back(const T &Elt) {
-    if (LLVM_UNLIKELY(this->EndX >= this->CapacityX))
+    if (LLVM_UNLIKELY(this->size() >= this->capacity()))
       this->grow();
-    memcpy(this->end(), &Elt, sizeof(T));
-    this->setEnd(this->end()+1);
+    memcpy(reinterpret_cast<void *>(this->end()), &Elt, sizeof(T));
+    this->set_size(this->size() + 1);
   }
 
-  void pop_back() {
-    this->setEnd(this->end()-1);
-  }
+  void pop_back() { this->set_size(this->size() - 1); }
 };
 
 /// This class consists of common code factored out of the SmallVector class to
@@ -332,8 +331,7 @@
 protected:
   // Default ctor - Initialize to empty.
   explicit SmallVectorImpl(unsigned N)
-    : SmallVectorTemplateBase<T, isPodLike<T>::value>(N*sizeof(T)) {
-  }
+      : SmallVectorTemplateBase<T, isPodLike<T>::value>(N) {}
 
 public:
   SmallVectorImpl(const SmallVectorImpl &) = delete;
@@ -347,31 +345,31 @@
 
   void clear() {
     this->destroy_range(this->begin(), this->end());
-    this->EndX = this->BeginX;
+    this->Size = 0;
   }
 
   void resize(size_type N) {
     if (N < this->size()) {
       this->destroy_range(this->begin()+N, this->end());
-      this->setEnd(this->begin()+N);
+      this->set_size(N);
     } else if (N > this->size()) {
       if (this->capacity() < N)
         this->grow(N);
       for (auto I = this->end(), E = this->begin() + N; I != E; ++I)
         new (&*I) T();
-      this->setEnd(this->begin()+N);
+      this->set_size(N);
     }
   }
 
   void resize(size_type N, const T &NV) {
     if (N < this->size()) {
       this->destroy_range(this->begin()+N, this->end());
-      this->setEnd(this->begin()+N);
+      this->set_size(N);
     } else if (N > this->size()) {
       if (this->capacity() < N)
         this->grow(N);
       std::uninitialized_fill(this->end(), this->begin()+N, NV);
-      this->setEnd(this->begin()+N);
+      this->set_size(N);
     }
   }
 
@@ -396,23 +394,23 @@
   void append(in_iter in_start, in_iter in_end) {
     size_type NumInputs = std::distance(in_start, in_end);
     // Grow allocated space if needed.
-    if (NumInputs > size_type(this->capacity_ptr()-this->end()))
+    if (NumInputs > this->capacity() - this->size())
       this->grow(this->size()+NumInputs);
 
     // Copy the new elements over.
     this->uninitialized_copy(in_start, in_end, this->end());
-    this->setEnd(this->end() + NumInputs);
+    this->set_size(this->size() + NumInputs);
   }
 
   /// Add the specified range to the end of the SmallVector.
   void append(size_type NumInputs, const T &Elt) {
     // Grow allocated space if needed.
-    if (NumInputs > size_type(this->capacity_ptr()-this->end()))
+    if (NumInputs > this->capacity() - this->size())
       this->grow(this->size()+NumInputs);
 
     // Copy the new elements over.
     std::uninitialized_fill_n(this->end(), NumInputs, Elt);
-    this->setEnd(this->end() + NumInputs);
+    this->set_size(this->size() + NumInputs);
   }
 
   void append(std::initializer_list<T> IL) {
@@ -426,7 +424,7 @@
     clear();
     if (this->capacity() < NumElts)
       this->grow(NumElts);
-    this->setEnd(this->begin()+NumElts);
+    this->set_size(NumElts);
     std::uninitialized_fill(this->begin(), this->end(), Elt);
   }
 
@@ -473,7 +471,7 @@
     iterator I = std::move(E, this->end(), S);
     // Drop the last elts.
     this->destroy_range(I, this->end());
-    this->setEnd(I);
+    this->set_size(I - this->begin());
     return(N);
   }
 
@@ -486,7 +484,7 @@
     assert(I >= this->begin() && "Insertion iterator is out of bounds.");
     assert(I <= this->end() && "Inserting past the end of the vector.");
 
-    if (this->EndX >= this->CapacityX) {
+    if (this->size() >= this->capacity()) {
       size_t EltNo = I-this->begin();
       this->grow();
       I = this->begin()+EltNo;
@@ -495,12 +493,12 @@
     ::new ((void*) this->end()) T(::std::move(this->back()));
     // Push everything else over.
     std::move_backward(I, this->end()-1, this->end());
-    this->setEnd(this->end()+1);
+    this->set_size(this->size() + 1);
 
     // If we just moved the element we're inserting, be sure to update
     // the reference.
     T *EltPtr = &Elt;
-    if (I <= EltPtr && EltPtr < this->EndX)
+    if (I <= EltPtr && EltPtr < this->end())
       ++EltPtr;
 
     *I = ::std::move(*EltPtr);
@@ -516,7 +514,7 @@
     assert(I >= this->begin() && "Insertion iterator is out of bounds.");
     assert(I <= this->end() && "Inserting past the end of the vector.");
 
-    if (this->EndX >= this->CapacityX) {
+    if (this->size() >= this->capacity()) {
       size_t EltNo = I-this->begin();
       this->grow();
       I = this->begin()+EltNo;
@@ -524,12 +522,12 @@
     ::new ((void*) this->end()) T(std::move(this->back()));
     // Push everything else over.
     std::move_backward(I, this->end()-1, this->end());
-    this->setEnd(this->end()+1);
+    this->set_size(this->size() + 1);
 
     // If we just moved the element we're inserting, be sure to update
     // the reference.
     const T *EltPtr = &Elt;
-    if (I <= EltPtr && EltPtr < this->EndX)
+    if (I <= EltPtr && EltPtr < this->end())
       ++EltPtr;
 
     *I = *EltPtr;
@@ -575,7 +573,7 @@
 
     // Move over the elements that we're about to overwrite.
     T *OldEnd = this->end();
-    this->setEnd(this->end() + NumToInsert);
+    this->set_size(this->size() + NumToInsert);
     size_t NumOverwritten = OldEnd-I;
     this->uninitialized_move(I, OldEnd, this->end()-NumOverwritten);
 
@@ -632,7 +630,7 @@
 
     // Move over the elements that we're about to overwrite.
     T *OldEnd = this->end();
-    this->setEnd(this->end() + NumToInsert);
+    this->set_size(this->size() + NumToInsert);
     size_t NumOverwritten = OldEnd-I;
     this->uninitialized_move(I, OldEnd, this->end()-NumOverwritten);
 
@@ -652,10 +650,10 @@
   }
 
   template <typename... ArgTypes> void emplace_back(ArgTypes &&... Args) {
-    if (LLVM_UNLIKELY(this->EndX >= this->CapacityX))
+    if (LLVM_UNLIKELY(this->size() >= this->capacity()))
       this->grow();
     ::new ((void *)this->end()) T(std::forward<ArgTypes>(Args)...);
-    this->setEnd(this->end() + 1);
+    this->set_size(this->size() + 1);
   }
 
   SmallVectorImpl &operator=(const SmallVectorImpl &RHS);
@@ -674,20 +672,6 @@
     return std::lexicographical_compare(this->begin(), this->end(),
                                         RHS.begin(), RHS.end());
   }
-
-  /// Set the array size to \p N, which the current array must have enough
-  /// capacity for.
-  ///
-  /// This does not construct or destroy any elements in the vector.
-  ///
-  /// Clients can use this in conjunction with capacity() to write past the end
-  /// of the buffer when they know that more elements are available, and only
-  /// update the size later. This avoids the cost of value initializing elements
-  /// which will only be overwritten.
-  void set_size(size_type N) {
-    assert(N <= this->capacity());
-    this->setEnd(this->begin() + N);
-  }
 };
 
 template <typename T>
@@ -697,8 +681,8 @@
   // We can only avoid copying elements if neither vector is small.
   if (!this->isSmall() && !RHS.isSmall()) {
     std::swap(this->BeginX, RHS.BeginX);
-    std::swap(this->EndX, RHS.EndX);
-    std::swap(this->CapacityX, RHS.CapacityX);
+    std::swap(this->Size, RHS.Size);
+    std::swap(this->Capacity, RHS.Capacity);
     return;
   }
   if (RHS.size() > this->capacity())
@@ -716,15 +700,15 @@
   if (this->size() > RHS.size()) {
     size_t EltDiff = this->size() - RHS.size();
     this->uninitialized_copy(this->begin()+NumShared, this->end(), RHS.end());
-    RHS.setEnd(RHS.end()+EltDiff);
+    RHS.set_size(RHS.size() + EltDiff);
     this->destroy_range(this->begin()+NumShared, this->end());
-    this->setEnd(this->begin()+NumShared);
+    this->set_size(NumShared);
   } else if (RHS.size() > this->size()) {
     size_t EltDiff = RHS.size() - this->size();
     this->uninitialized_copy(RHS.begin()+NumShared, RHS.end(), this->end());
-    this->setEnd(this->end() + EltDiff);
+    this->set_size(this->size() + EltDiff);
     this->destroy_range(RHS.begin()+NumShared, RHS.end());
-    RHS.setEnd(RHS.begin()+NumShared);
+    RHS.set_size(NumShared);
   }
 }
 
@@ -750,7 +734,7 @@
     this->destroy_range(NewEnd, this->end());
 
     // Trim.
-    this->setEnd(NewEnd);
+    this->set_size(RHSSize);
     return *this;
   }
 
@@ -760,7 +744,7 @@
   if (this->capacity() < RHSSize) {
     // Destroy current elements.
     this->destroy_range(this->begin(), this->end());
-    this->setEnd(this->begin());
+    this->set_size(0);
     CurSize = 0;
     this->grow(RHSSize);
   } else if (CurSize) {
@@ -773,7 +757,7 @@
                            this->begin()+CurSize);
 
   // Set end.
-  this->setEnd(this->begin()+RHSSize);
+  this->set_size(RHSSize);
   return *this;
 }
 
@@ -787,8 +771,8 @@
     this->destroy_range(this->begin(), this->end());
     if (!this->isSmall()) free(this->begin());
     this->BeginX = RHS.BeginX;
-    this->EndX = RHS.EndX;
-    this->CapacityX = RHS.CapacityX;
+    this->Size = RHS.Size;
+    this->Capacity = RHS.Capacity;
     RHS.resetToSmall();
     return *this;
   }
@@ -805,7 +789,7 @@
 
     // Destroy excess elements and trim the bounds.
     this->destroy_range(NewEnd, this->end());
-    this->setEnd(NewEnd);
+    this->set_size(RHSSize);
 
     // Clear the RHS.
     RHS.clear();
@@ -820,7 +804,7 @@
   if (this->capacity() < RHSSize) {
     // Destroy current elements.
     this->destroy_range(this->begin(), this->end());
-    this->setEnd(this->begin());
+    this->set_size(0);
     CurSize = 0;
     this->grow(RHSSize);
   } else if (CurSize) {
@@ -833,22 +817,23 @@
                            this->begin()+CurSize);
 
   // Set end.
-  this->setEnd(this->begin()+RHSSize);
+  this->set_size(RHSSize);
 
   RHS.clear();
   return *this;
 }
 
-/// Storage for the SmallVector elements which aren't contained in
-/// SmallVectorTemplateCommon. There are 'N-1' elements here. The remaining '1'
-/// element is in the base class. This is specialized for the N=1 and N=0 cases
+/// Storage for the SmallVector elements.  This is specialized for the N=0 case
 /// to avoid allocating unnecessary storage.
 template <typename T, unsigned N>
 struct SmallVectorStorage {
-  typename SmallVectorTemplateCommon<T>::U InlineElts[N - 1];
+  AlignedCharArrayUnion<T> InlineElts[N];
 };
-template <typename T> struct SmallVectorStorage<T, 1> {};
-template <typename T> struct SmallVectorStorage<T, 0> {};
+
+/// We need the storage to be properly aligned even for small-size of 0 so that
+/// the pointer math in \a SmallVectorTemplateCommon::getFirstEl() is
+/// well-defined.
+template <typename T> struct alignas(alignof(T)) SmallVectorStorage<T, 0> {};
 
 /// This is a 'vector' (really, a variable-sized array), optimized
 /// for the case when the array is small.  It contains some number of elements
@@ -859,10 +844,7 @@
 /// Note that this does not attempt to be exception safe.
 ///
 template <typename T, unsigned N>
-class SmallVector : public SmallVectorImpl<T> {
-  /// Inline space for elements which aren't stored in the base class.
-  SmallVectorStorage<T, N> Storage;
-
+class SmallVector : public SmallVectorImpl<T>, SmallVectorStorage<T, N> {
 public:
   SmallVector() : SmallVectorImpl<T>(N) {}
 
diff --git a/linux-x64/clang/include/llvm/ADT/Statistic.h b/linux-x64/clang/include/llvm/ADT/Statistic.h
index 3a08997..90c2eef 100644
--- a/linux-x64/clang/include/llvm/ADT/Statistic.h
+++ b/linux-x64/clang/include/llvm/ADT/Statistic.h
@@ -169,19 +169,19 @@
 #define STATISTIC(VARNAME, DESC)                                               \
   static llvm::Statistic VARNAME = {DEBUG_TYPE, #VARNAME, DESC, {0}, {false}}
 
-/// \brief Enable the collection and printing of statistics.
+/// Enable the collection and printing of statistics.
 void EnableStatistics(bool PrintOnExit = true);
 
-/// \brief Check if statistics are enabled.
+/// Check if statistics are enabled.
 bool AreStatisticsEnabled();
 
-/// \brief Return a file stream to print our output on.
+/// Return a file stream to print our output on.
 std::unique_ptr<raw_fd_ostream> CreateInfoOutputFile();
 
-/// \brief Print statistics to the file returned by CreateInfoOutputFile().
+/// Print statistics to the file returned by CreateInfoOutputFile().
 void PrintStatistics();
 
-/// \brief Print statistics to the given output stream.
+/// Print statistics to the given output stream.
 void PrintStatistics(raw_ostream &OS);
 
 /// Print statistics in JSON format. This does include all global timers (\see
@@ -190,7 +190,7 @@
 /// PrintStatisticsJSON().
 void PrintStatisticsJSON(raw_ostream &OS);
 
-/// \brief Get the statistics. This can be used to look up the value of
+/// Get the statistics. This can be used to look up the value of
 /// statistics without needing to parse JSON.
 ///
 /// This function does not prevent statistics being updated by other threads
@@ -199,7 +199,7 @@
 /// completes.
 const std::vector<std::pair<StringRef, unsigned>> GetStatistics();
 
-/// \brief Reset the statistics. This can be used to zero and de-register the
+/// Reset the statistics. This can be used to zero and de-register the
 /// statistics in order to measure a compilation.
 ///
 /// When this function begins to call destructors prior to returning, all
diff --git a/linux-x64/clang/include/llvm/ADT/StringExtras.h b/linux-x64/clang/include/llvm/ADT/StringExtras.h
index 45f6677..71b0e75 100644
--- a/linux-x64/clang/include/llvm/ADT/StringExtras.h
+++ b/linux-x64/clang/include/llvm/ADT/StringExtras.h
@@ -39,6 +39,16 @@
   return X < 10 ? '0' + X : HexChar + X - 10;
 }
 
+/// Given an array of c-style strings terminated by a null pointer, construct
+/// a vector of StringRefs representing the same strings without the terminating
+/// null string.
+inline std::vector<StringRef> toStringRefArray(const char *const *Strings) {
+  std::vector<StringRef> Result;
+  while (*Strings)
+    Result.push_back(*Strings++);
+  return Result;
+}
+
 /// Construct a string ref from a boolean.
 inline StringRef toStringRef(bool B) { return StringRef(B ? "true" : "false"); }
 
@@ -78,6 +88,26 @@
 /// lowercase letter as classified by "C" locale.
 inline bool isAlnum(char C) { return isAlpha(C) || isDigit(C); }
 
+/// Checks whether character \p C is valid ASCII (high bit is zero).
+inline bool isASCII(char C) { return static_cast<unsigned char>(C) <= 127; }
+
+/// Checks whether all characters in S are ASCII.
+inline bool isASCII(llvm::StringRef S) {
+  for (char C : S)
+    if (LLVM_UNLIKELY(!isASCII(C)))
+      return false;
+  return true;
+}
+
+/// Checks whether character \p C is printable.
+///
+/// Locale-independent version of the C standard library isprint whose results
+/// may differ on different platforms.
+inline bool isPrint(char C) {
+  unsigned char UC = static_cast<unsigned char>(C);
+  return (0x20 <= UC) && (UC <= 0x7E);
+}
+
 /// Returns the corresponding lowercase character if \p x is uppercase.
 inline char toLower(char x) {
   if (x >= 'A' && x <= 'Z')
@@ -157,7 +187,7 @@
   return Output;
 }
 
-/// \brief Convert the string \p S to an integer of the specified type using
+/// Convert the string \p S to an integer of the specified type using
 /// the radix \p Base.  If \p Base is 0, auto-detects the radix.
 /// Returns true if the number was successfully converted, false otherwise.
 template <typename N> bool to_integer(StringRef S, N &Num, unsigned Base = 0) {
@@ -251,9 +281,13 @@
   }
 }
 
-/// PrintEscapedString - Print each character of the specified string, escaping
-/// it if it is not printable or if it is an escape char.
-void PrintEscapedString(StringRef Name, raw_ostream &Out);
+/// Print each character of the specified string, escaping it if it is not
+/// printable or if it is an escape char.
+void printEscapedString(StringRef Name, raw_ostream &Out);
+
+/// Print each character of the specified string, escaping HTML special
+/// characters.
+void printHTMLEscaped(StringRef String, raw_ostream &Out);
 
 /// printLowerCase - Print each character as lowercase if it is uppercase.
 void printLowerCase(StringRef String, raw_ostream &Out);
diff --git a/linux-x64/clang/include/llvm/ADT/StringMap.h b/linux-x64/clang/include/llvm/ADT/StringMap.h
index d34d5ed..a9f83d3 100644
--- a/linux-x64/clang/include/llvm/ADT/StringMap.h
+++ b/linux-x64/clang/include/llvm/ADT/StringMap.h
@@ -164,9 +164,7 @@
 
     StringMapEntry *NewItem =
       static_cast<StringMapEntry*>(Allocator.Allocate(AllocSize,Alignment));
-
-    if (NewItem == nullptr)
-      report_bad_alloc_error("Allocation of StringMap entry failed.");
+    assert(NewItem && "Unhandled out-of-memory");
 
     // Construct the value.
     new (NewItem) StringMapEntry(KeyLength, std::forward<InitTy>(InitVals)...);
diff --git a/linux-x64/clang/include/llvm/ADT/StringRef.h b/linux-x64/clang/include/llvm/ADT/StringRef.h
index 3d2417a..a5ba5b5 100644
--- a/linux-x64/clang/include/llvm/ADT/StringRef.h
+++ b/linux-x64/clang/include/llvm/ADT/StringRef.h
@@ -201,7 +201,7 @@
     LLVM_NODISCARD
     int compare_numeric(StringRef RHS) const;
 
-    /// \brief Determine the edit distance between this string and another
+    /// Determine the edit distance between this string and another
     /// string.
     ///
     /// \param Other the string to compare this string against.
@@ -725,10 +725,7 @@
     /// \returns The split substrings.
     LLVM_NODISCARD
     std::pair<StringRef, StringRef> split(char Separator) const {
-      size_t Idx = find(Separator);
-      if (Idx == npos)
-        return std::make_pair(*this, StringRef());
-      return std::make_pair(slice(0, Idx), slice(Idx+1, npos));
+      return split(StringRef(&Separator, 1));
     }
 
     /// Split into two substrings around the first occurrence of a separator
@@ -749,6 +746,24 @@
       return std::make_pair(slice(0, Idx), slice(Idx + Separator.size(), npos));
     }
 
+    /// Split into two substrings around the last occurrence of a separator
+    /// string.
+    ///
+    /// If \p Separator is in the string, then the result is a pair (LHS, RHS)
+    /// such that (*this == LHS + Separator + RHS) is true and RHS is
+    /// minimal. If \p Separator is not in the string, then the result is a
+    /// pair (LHS, RHS) where (*this == LHS) and (RHS == "").
+    ///
+    /// \param Separator - The string to split on.
+    /// \return - The split substrings.
+    LLVM_NODISCARD
+    std::pair<StringRef, StringRef> rsplit(StringRef Separator) const {
+      size_t Idx = rfind(Separator);
+      if (Idx == npos)
+        return std::make_pair(*this, StringRef());
+      return std::make_pair(slice(0, Idx), slice(Idx + Separator.size(), npos));
+    }
+
     /// Split into substrings around the occurrences of a separator string.
     ///
     /// Each substring is stored in \p A. If \p MaxSplit is >= 0, at most
@@ -796,10 +811,7 @@
     /// \return - The split substrings.
     LLVM_NODISCARD
     std::pair<StringRef, StringRef> rsplit(char Separator) const {
-      size_t Idx = rfind(Separator);
-      if (Idx == npos)
-        return std::make_pair(*this, StringRef());
-      return std::make_pair(slice(0, Idx), slice(Idx+1, npos));
+      return rsplit(StringRef(&Separator, 1));
     }
 
     /// Return string with consecutive \p Char characters starting from the
@@ -912,7 +924,7 @@
 
   /// @}
 
-  /// \brief Compute a hash_code for a StringRef.
+  /// Compute a hash_code for a StringRef.
   LLVM_NODISCARD
   hash_code hash_value(StringRef S);
 
diff --git a/linux-x64/clang/include/llvm/ADT/StringSwitch.h b/linux-x64/clang/include/llvm/ADT/StringSwitch.h
index 9e07303..b7860b9 100644
--- a/linux-x64/clang/include/llvm/ADT/StringSwitch.h
+++ b/linux-x64/clang/include/llvm/ADT/StringSwitch.h
@@ -20,7 +20,7 @@
 
 namespace llvm {
 
-/// \brief A switch()-like statement whose cases are string literals.
+/// A switch()-like statement whose cases are string literals.
 ///
 /// The StringSwitch class is a simple form of a switch() statement that
 /// determines whether the given string matches one of the given string
@@ -41,10 +41,10 @@
 /// \endcode
 template<typename T, typename R = T>
 class StringSwitch {
-  /// \brief The string we are matching.
+  /// The string we are matching.
   const StringRef Str;
 
-  /// \brief The pointer to the result of this switch statement, once known,
+  /// The pointer to the result of this switch statement, once known,
   /// null before that.
   Optional<T> Result;
 
diff --git a/linux-x64/clang/include/llvm/ADT/TinyPtrVector.h b/linux-x64/clang/include/llvm/ADT/TinyPtrVector.h
index 73573d6..1b8e9aa 100644
--- a/linux-x64/clang/include/llvm/ADT/TinyPtrVector.h
+++ b/linux-x64/clang/include/llvm/ADT/TinyPtrVector.h
@@ -108,6 +108,12 @@
     return *this;
   }
 
+  TinyPtrVector(std::initializer_list<EltTy> IL)
+      : Val(IL.size() == 0
+                ? PtrUnion()
+                : IL.size() == 1 ? PtrUnion(*IL.begin())
+                                 : PtrUnion(new VecTy(IL.begin(), IL.end()))) {}
+
   /// Constructor from an ArrayRef.
   ///
   /// This also is a constructor for individual array elements due to the single
diff --git a/linux-x64/clang/include/llvm/ADT/Triple.h b/linux-x64/clang/include/llvm/ADT/Triple.h
index 8ba50d9..c95b16d 100644
--- a/linux-x64/clang/include/llvm/ADT/Triple.h
+++ b/linux-x64/clang/include/llvm/ADT/Triple.h
@@ -101,6 +101,7 @@
   enum SubArchType {
     NoSubArch,
 
+    ARMSubArch_v8_4a,
     ARMSubArch_v8_3a,
     ARMSubArch_v8_2a,
     ARMSubArch_v8_1a,
@@ -144,7 +145,8 @@
     AMD,
     Mesa,
     SUSE,
-    LastVendorType = SUSE
+    OpenEmbedded,
+    LastVendorType = OpenEmbedded
   };
   enum OSType {
     UnknownOS,
@@ -658,6 +660,21 @@
     return getArch() == Triple::aarch64 || getArch() == Triple::aarch64_be;
   }
 
+  /// Tests whether the target is MIPS 32-bit (little and big endian).
+  bool isMIPS32() const {
+    return getArch() == Triple::mips || getArch() == Triple::mipsel;
+  }
+
+  /// Tests whether the target is MIPS 64-bit (little and big endian).
+  bool isMIPS64() const {
+    return getArch() == Triple::mips64 || getArch() == Triple::mips64el;
+  }
+
+  /// Tests whether the target is MIPS (little and big endian, 32- or 64-bit).
+  bool isMIPS() const {
+    return isMIPS32() || isMIPS64();
+  }
+
   /// Tests whether the target supports comdat
   bool supportsCOMDAT() const {
     return !isOSBinFormatMachO();
diff --git a/linux-x64/clang/include/llvm/ADT/UniqueVector.h b/linux-x64/clang/include/llvm/ADT/UniqueVector.h
index b17fb23..c86bedd 100644
--- a/linux-x64/clang/include/llvm/ADT/UniqueVector.h
+++ b/linux-x64/clang/include/llvm/ADT/UniqueVector.h
@@ -72,16 +72,16 @@
     return Vector[ID - 1];
   }
 
-  /// \brief Return an iterator to the start of the vector.
+  /// Return an iterator to the start of the vector.
   iterator begin() { return Vector.begin(); }
 
-  /// \brief Return an iterator to the start of the vector.
+  /// Return an iterator to the start of the vector.
   const_iterator begin() const { return Vector.begin(); }
 
-  /// \brief Return an iterator to the end of the vector.
+  /// Return an iterator to the end of the vector.
   iterator end() { return Vector.end(); }
 
-  /// \brief Return an iterator to the end of the vector.
+  /// Return an iterator to the end of the vector.
   const_iterator end() const { return Vector.end(); }
 
   /// size - Returns the number of entries in the vector.
diff --git a/linux-x64/clang/include/llvm/ADT/VariadicFunction.h b/linux-x64/clang/include/llvm/ADT/VariadicFunction.h
index 403130c..9028abe 100644
--- a/linux-x64/clang/include/llvm/ADT/VariadicFunction.h
+++ b/linux-x64/clang/include/llvm/ADT/VariadicFunction.h
@@ -53,7 +53,7 @@
 #define LLVM_COMMA_JOIN31(x) LLVM_COMMA_JOIN30(x), x ## 30
 #define LLVM_COMMA_JOIN32(x) LLVM_COMMA_JOIN31(x), x ## 31
 
-/// \brief Class which can simulate a type-safe variadic function.
+/// Class which can simulate a type-safe variadic function.
 ///
 /// The VariadicFunction class template makes it easy to define
 /// type-safe variadic functions where all arguments have the same
diff --git a/linux-x64/clang/include/llvm/ADT/edit_distance.h b/linux-x64/clang/include/llvm/ADT/edit_distance.h
index 06a01b1..b2e8ec5 100644
--- a/linux-x64/clang/include/llvm/ADT/edit_distance.h
+++ b/linux-x64/clang/include/llvm/ADT/edit_distance.h
@@ -22,7 +22,7 @@
 
 namespace llvm {
 
-/// \brief Determine the edit distance between two sequences.
+/// Determine the edit distance between two sequences.
 ///
 /// \param FromArray the first sequence to compare.
 ///
diff --git a/linux-x64/clang/include/llvm/ADT/ilist.h b/linux-x64/clang/include/llvm/ADT/ilist.h
index a788f81..00bb6d5 100644
--- a/linux-x64/clang/include/llvm/ADT/ilist.h
+++ b/linux-x64/clang/include/llvm/ADT/ilist.h
@@ -84,21 +84,11 @@
 struct ilist_node_traits : ilist_alloc_traits<NodeTy>,
                            ilist_callback_traits<NodeTy> {};
 
-/// Default template traits for intrusive list.
-///
-/// By inheriting from this, you can easily use default implementations for all
-/// common operations.
-///
-/// TODO: Remove this customization point.  Specializing ilist_traits is
-/// already fully general.
-template <typename NodeTy>
-struct ilist_default_traits : public ilist_node_traits<NodeTy> {};
-
 /// Template traits for intrusive list.
 ///
 /// Customize callbacks and allocation semantics.
 template <typename NodeTy>
-struct ilist_traits : public ilist_default_traits<NodeTy> {};
+struct ilist_traits : public ilist_node_traits<NodeTy> {};
 
 /// Const traits should never be instantiated.
 template <typename Ty> struct ilist_traits<const Ty> {};
@@ -178,9 +168,6 @@
 class iplist_impl : public TraitsT, IntrusiveListT {
   typedef IntrusiveListT base_list_type;
 
-protected:
-  typedef iplist_impl iplist_impl_type;
-
 public:
   typedef typename base_list_type::pointer pointer;
   typedef typename base_list_type::const_pointer const_pointer;
@@ -369,26 +356,26 @@
 
   using base_list_type::sort;
 
-  /// \brief Get the previous node, or \c nullptr for the list head.
+  /// Get the previous node, or \c nullptr for the list head.
   pointer getPrevNode(reference N) const {
     auto I = N.getIterator();
     if (I == begin())
       return nullptr;
     return &*std::prev(I);
   }
-  /// \brief Get the previous node, or \c nullptr for the list head.
+  /// Get the previous node, or \c nullptr for the list head.
   const_pointer getPrevNode(const_reference N) const {
     return getPrevNode(const_cast<reference >(N));
   }
 
-  /// \brief Get the next node, or \c nullptr for the list tail.
+  /// Get the next node, or \c nullptr for the list tail.
   pointer getNextNode(reference N) const {
     auto Next = std::next(N.getIterator());
     if (Next == end())
       return nullptr;
     return &*Next;
   }
-  /// \brief Get the next node, or \c nullptr for the list tail.
+  /// Get the next node, or \c nullptr for the list tail.
   const_pointer getNextNode(const_reference N) const {
     return getNextNode(const_cast<reference >(N));
   }
@@ -402,7 +389,7 @@
 template <class T, class... Options>
 class iplist
     : public iplist_impl<simple_ilist<T, Options...>, ilist_traits<T>> {
-  typedef typename iplist::iplist_impl_type iplist_impl_type;
+  using iplist_impl_type = typename iplist::iplist_impl;
 
 public:
   iplist() = default;
diff --git a/linux-x64/clang/include/llvm/ADT/ilist_node.h b/linux-x64/clang/include/llvm/ADT/ilist_node.h
index 3362611..dd0e6b4 100644
--- a/linux-x64/clang/include/llvm/ADT/ilist_node.h
+++ b/linux-x64/clang/include/llvm/ADT/ilist_node.h
@@ -271,7 +271,7 @@
 public:
   /// @name Adjacent Node Accessors
   /// @{
-  /// \brief Get the previous node, or \c nullptr for the list head.
+  /// Get the previous node, or \c nullptr for the list head.
   NodeTy *getPrevNode() {
     // Should be separated to a reused function, but then we couldn't use auto
     // (and would need the type of the list).
@@ -280,12 +280,12 @@
     return List.getPrevNode(*static_cast<NodeTy *>(this));
   }
 
-  /// \brief Get the previous node, or \c nullptr for the list head.
+  /// Get the previous node, or \c nullptr for the list head.
   const NodeTy *getPrevNode() const {
     return const_cast<ilist_node_with_parent *>(this)->getPrevNode();
   }
 
-  /// \brief Get the next node, or \c nullptr for the list tail.
+  /// Get the next node, or \c nullptr for the list tail.
   NodeTy *getNextNode() {
     // Should be separated to a reused function, but then we couldn't use auto
     // (and would need the type of the list).
@@ -294,7 +294,7 @@
     return List.getNextNode(*static_cast<NodeTy *>(this));
   }
 
-  /// \brief Get the next node, or \c nullptr for the list tail.
+  /// Get the next node, or \c nullptr for the list tail.
   const NodeTy *getNextNode() const {
     return const_cast<ilist_node_with_parent *>(this)->getNextNode();
   }
diff --git a/linux-x64/clang/include/llvm/ADT/ilist_node_options.h b/linux-x64/clang/include/llvm/ADT/ilist_node_options.h
index c33df1e..7ff4005 100644
--- a/linux-x64/clang/include/llvm/ADT/ilist_node_options.h
+++ b/linux-x64/clang/include/llvm/ADT/ilist_node_options.h
@@ -11,7 +11,6 @@
 #define LLVM_ADT_ILIST_NODE_OPTIONS_H
 
 #include "llvm/Config/abi-breaking.h"
-#include "llvm/Config/llvm-config.h"
 
 #include <type_traits>
 
diff --git a/linux-x64/clang/include/llvm/ADT/iterator.h b/linux-x64/clang/include/llvm/ADT/iterator.h
index 711f8f2..549c522 100644
--- a/linux-x64/clang/include/llvm/ADT/iterator.h
+++ b/linux-x64/clang/include/llvm/ADT/iterator.h
@@ -19,7 +19,7 @@
 
 namespace llvm {
 
-/// \brief CRTP base class which implements the entire standard iterator facade
+/// CRTP base class which implements the entire standard iterator facade
 /// in terms of a minimal subset of the interface.
 ///
 /// Use this when it is reasonable to implement most of the iterator
@@ -183,7 +183,7 @@
   }
 };
 
-/// \brief CRTP base class for adapting an iterator to a different type.
+/// CRTP base class for adapting an iterator to a different type.
 ///
 /// This class can be used through CRTP to adapt one iterator into another.
 /// Typically this is done through providing in the derived class a custom \c
@@ -274,7 +274,7 @@
   ReferenceT operator*() const { return *I; }
 };
 
-/// \brief An iterator type that allows iterating over the pointees via some
+/// An iterator type that allows iterating over the pointees via some
 /// other iterator.
 ///
 /// The typical usage of this is to expose a type that iterates over Ts, but
@@ -288,7 +288,7 @@
               decltype(**std::declval<WrappedIteratorT>())>::type>
 struct pointee_iterator
     : iterator_adaptor_base<
-          pointee_iterator<WrappedIteratorT>, WrappedIteratorT,
+          pointee_iterator<WrappedIteratorT, T>, WrappedIteratorT,
           typename std::iterator_traits<WrappedIteratorT>::iterator_category,
           T> {
   pointee_iterator() = default;
@@ -311,7 +311,7 @@
 template <typename WrappedIteratorT,
           typename T = decltype(&*std::declval<WrappedIteratorT>())>
 class pointer_iterator
-    : public iterator_adaptor_base<pointer_iterator<WrappedIteratorT>,
+    : public iterator_adaptor_base<pointer_iterator<WrappedIteratorT, T>,
                                    WrappedIteratorT, T> {
   mutable T Ptr;
 
diff --git a/linux-x64/clang/include/llvm/ADT/iterator_range.h b/linux-x64/clang/include/llvm/ADT/iterator_range.h
index 3cbf619..2ba1286 100644
--- a/linux-x64/clang/include/llvm/ADT/iterator_range.h
+++ b/linux-x64/clang/include/llvm/ADT/iterator_range.h
@@ -24,7 +24,7 @@
 
 namespace llvm {
 
-/// \brief A range adaptor for a pair of iterators.
+/// A range adaptor for a pair of iterators.
 ///
 /// This just wraps two iterators into a range-compatible interface. Nothing
 /// fancy at all.
@@ -47,7 +47,7 @@
   IteratorT end() const { return end_iterator; }
 };
 
-/// \brief Convenience function for iterating over sub-ranges.
+/// Convenience function for iterating over sub-ranges.
 ///
 /// This provides a bit of syntactic sugar to make using sub-ranges
 /// in for loops a bit easier. Analogous to std::make_pair().
@@ -59,9 +59,10 @@
   return iterator_range<T>(std::move(p.first), std::move(p.second));
 }
 
-template<typename T>
-iterator_range<decltype(begin(std::declval<T>()))> drop_begin(T &&t, int n) {
-  return make_range(std::next(begin(t), n), end(t));
+template <typename T>
+iterator_range<decltype(adl_begin(std::declval<T>()))> drop_begin(T &&t,
+                                                                  int n) {
+  return make_range(std::next(adl_begin(t), n), adl_end(t));
 }
 }
 
diff --git a/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
index ec4a90c..be3496b 100644
--- a/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/AliasAnalysis.h
@@ -91,6 +91,9 @@
   MustAlias,
 };
 
+/// << operator for AliasResult.
+raw_ostream &operator<<(raw_ostream &OS, AliasResult AR);
+
 /// Flags indicating whether a memory access modifies or references memory.
 ///
 /// This is no access at all, a modification, a reference, or both
@@ -325,8 +328,8 @@
   AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
 
   /// A convenience wrapper around the primary \c alias interface.
-  AliasResult alias(const Value *V1, uint64_t V1Size, const Value *V2,
-                    uint64_t V2Size) {
+  AliasResult alias(const Value *V1, LocationSize V1Size, const Value *V2,
+                    LocationSize V2Size) {
     return alias(MemoryLocation(V1, V1Size), MemoryLocation(V2, V2Size));
   }
 
@@ -343,8 +346,8 @@
   }
 
   /// A convenience wrapper around the \c isNoAlias helper interface.
-  bool isNoAlias(const Value *V1, uint64_t V1Size, const Value *V2,
-                 uint64_t V2Size) {
+  bool isNoAlias(const Value *V1, LocationSize V1Size, const Value *V2,
+                 LocationSize V2Size) {
     return isNoAlias(MemoryLocation(V1, V1Size), MemoryLocation(V2, V2Size));
   }
 
@@ -501,7 +504,7 @@
 
   /// getModRefInfo (for call sites) - A convenience wrapper.
   ModRefInfo getModRefInfo(ImmutableCallSite CS, const Value *P,
-                           uint64_t Size) {
+                           LocationSize Size) {
     return getModRefInfo(CS, MemoryLocation(P, Size));
   }
 
@@ -512,7 +515,8 @@
   }
 
   /// getModRefInfo (for calls) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const CallInst *C, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const CallInst *C, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(C, MemoryLocation(P, Size));
   }
 
@@ -523,7 +527,8 @@
   }
 
   /// getModRefInfo (for invokes) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const InvokeInst *I, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const InvokeInst *I, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(I, MemoryLocation(P, Size));
   }
 
@@ -532,7 +537,8 @@
   ModRefInfo getModRefInfo(const LoadInst *L, const MemoryLocation &Loc);
 
   /// getModRefInfo (for loads) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const LoadInst *L, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const LoadInst *L, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(L, MemoryLocation(P, Size));
   }
 
@@ -541,7 +547,8 @@
   ModRefInfo getModRefInfo(const StoreInst *S, const MemoryLocation &Loc);
 
   /// getModRefInfo (for stores) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const StoreInst *S, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const StoreInst *S, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(S, MemoryLocation(P, Size));
   }
 
@@ -550,7 +557,8 @@
   ModRefInfo getModRefInfo(const FenceInst *S, const MemoryLocation &Loc);
 
   /// getModRefInfo (for fences) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const FenceInst *S, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const FenceInst *S, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(S, MemoryLocation(P, Size));
   }
 
@@ -580,7 +588,8 @@
   ModRefInfo getModRefInfo(const VAArgInst *I, const MemoryLocation &Loc);
 
   /// getModRefInfo (for va_args) - A convenience wrapper.
-  ModRefInfo getModRefInfo(const VAArgInst *I, const Value *P, uint64_t Size) {
+  ModRefInfo getModRefInfo(const VAArgInst *I, const Value *P,
+                           LocationSize Size) {
     return getModRefInfo(I, MemoryLocation(P, Size));
   }
 
@@ -590,7 +599,7 @@
 
   /// getModRefInfo (for catchpads) - A convenience wrapper.
   ModRefInfo getModRefInfo(const CatchPadInst *I, const Value *P,
-                           uint64_t Size) {
+                           LocationSize Size) {
     return getModRefInfo(I, MemoryLocation(P, Size));
   }
 
@@ -600,7 +609,7 @@
 
   /// getModRefInfo (for catchrets) - A convenience wrapper.
   ModRefInfo getModRefInfo(const CatchReturnInst *I, const Value *P,
-                           uint64_t Size) {
+                           LocationSize Size) {
     return getModRefInfo(I, MemoryLocation(P, Size));
   }
 
@@ -646,7 +655,7 @@
 
   /// A convenience wrapper for constructing the memory location.
   ModRefInfo getModRefInfo(const Instruction *I, const Value *P,
-                           uint64_t Size) {
+                           LocationSize Size) {
     return getModRefInfo(I, MemoryLocation(P, Size));
   }
 
@@ -659,7 +668,7 @@
   ///   http://llvm.org/docs/AliasAnalysis.html#ModRefInfo
   ModRefInfo getModRefInfo(ImmutableCallSite CS1, ImmutableCallSite CS2);
 
-  /// \brief Return information about whether a particular call site modifies
+  /// Return information about whether a particular call site modifies
   /// or reads the specified memory location \p MemLoc before instruction \p I
   /// in a BasicBlock. An ordered basic block \p OBB can be used to speed up
   /// instruction ordering queries inside the BasicBlock containing \p I.
@@ -669,9 +678,9 @@
                                 const MemoryLocation &MemLoc, DominatorTree *DT,
                                 OrderedBasicBlock *OBB = nullptr);
 
-  /// \brief A convenience wrapper to synthesize a memory location.
+  /// A convenience wrapper to synthesize a memory location.
   ModRefInfo callCapturesBefore(const Instruction *I, const Value *P,
-                                uint64_t Size, DominatorTree *DT,
+                                LocationSize Size, DominatorTree *DT,
                                 OrderedBasicBlock *OBB = nullptr) {
     return callCapturesBefore(I, MemoryLocation(P, Size), DT, OBB);
   }
@@ -687,7 +696,7 @@
 
   /// A convenience wrapper synthesizing a memory location.
   bool canBasicBlockModify(const BasicBlock &BB, const Value *P,
-                           uint64_t Size) {
+                           LocationSize Size) {
     return canBasicBlockModify(BB, MemoryLocation(P, Size));
   }
 
@@ -702,7 +711,7 @@
 
   /// A convenience wrapper synthesizing a memory location.
   bool canInstructionRangeModRef(const Instruction &I1, const Instruction &I2,
-                                 const Value *Ptr, uint64_t Size,
+                                 const Value *Ptr, LocationSize Size,
                                  const ModRefInfo Mode) {
     return canInstructionRangeModRef(I1, I2, MemoryLocation(Ptr, Size), Mode);
   }
diff --git a/linux-x64/clang/include/llvm/Analysis/AliasAnalysisEvaluator.h b/linux-x64/clang/include/llvm/Analysis/AliasAnalysisEvaluator.h
index cd2f631..0941814 100644
--- a/linux-x64/clang/include/llvm/Analysis/AliasAnalysisEvaluator.h
+++ b/linux-x64/clang/include/llvm/Analysis/AliasAnalysisEvaluator.h
@@ -56,7 +56,7 @@
   }
   ~AAEvaluator();
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 
 private:
diff --git a/linux-x64/clang/include/llvm/Analysis/AliasSetTracker.h b/linux-x64/clang/include/llvm/Analysis/AliasSetTracker.h
index 7da3eba..0e6d229 100644
--- a/linux-x64/clang/include/llvm/Analysis/AliasSetTracker.h
+++ b/linux-x64/clang/include/llvm/Analysis/AliasSetTracker.h
@@ -37,8 +37,8 @@
 class AliasSetTracker;
 class BasicBlock;
 class LoadInst;
-class MemSetInst;
-class MemTransferInst;
+class AnyMemSetInst;
+class AnyMemTransferInst;
 class raw_ostream;
 class StoreInst;
 class VAArgInst;
@@ -52,7 +52,7 @@
     PointerRec **PrevInList = nullptr;
     PointerRec *NextInList = nullptr;
     AliasSet *AS = nullptr;
-    uint64_t Size = 0;
+    LocationSize Size = 0;
     AAMDNodes AAInfo;
 
   public:
@@ -69,7 +69,7 @@
       return &NextInList;
     }
 
-    bool updateSizeAndAAInfo(uint64_t NewSize, const AAMDNodes &NewAAInfo) {
+    bool updateSizeAndAAInfo(LocationSize NewSize, const AAMDNodes &NewAAInfo) {
       bool SizeChanged = false;
       if (NewSize > Size) {
         Size = NewSize;
@@ -91,7 +91,7 @@
       return SizeChanged;
     }
 
-    uint64_t getSize() const { return Size; }
+    LocationSize getSize() const { return Size; }
 
     /// Return the AAInfo, or null if there is no information or conflicting
     /// information.
@@ -224,6 +224,20 @@
   // track of the list's exact size.
   unsigned size() { return SetSize; }
 
+  /// If this alias set is known to contain a single instruction and *only* a
+  /// single unique instruction, return it.  Otherwise, return nullptr.
+  Instruction* getUniqueInstruction() {
+    if (size() != 0)
+      // Can't track source of pointer, might be many instruction
+      return nullptr;
+    if (AliasAny)
+      // May have collapses alias set
+      return nullptr;
+    if (1 != UnknownInsts.size())
+      return nullptr;
+    return cast<Instruction>(UnknownInsts[0]);
+  }
+
   void print(raw_ostream &OS) const;
   void dump() const;
 
@@ -247,7 +261,7 @@
     value_type *operator->() const { return &operator*(); }
 
     Value *getPointer() const { return CurNode->getValue(); }
-    uint64_t getSize() const { return CurNode->getSize(); }
+    LocationSize getSize() const { return CurNode->getSize(); }
     AAMDNodes getAAInfo() const { return CurNode->getAAInfo(); }
 
     iterator& operator++() {                // Preincrement
@@ -287,9 +301,8 @@
 
   void removeFromTracker(AliasSetTracker &AST);
 
-  void addPointer(AliasSetTracker &AST, PointerRec &Entry, uint64_t Size,
-                  const AAMDNodes &AAInfo,
-                  bool KnownMustAlias = false);
+  void addPointer(AliasSetTracker &AST, PointerRec &Entry, LocationSize Size,
+                  const AAMDNodes &AAInfo, bool KnownMustAlias = false);
   void addUnknownInst(Instruction *I, AliasAnalysis &AA);
 
   void removeUnknownInst(AliasSetTracker &AST, Instruction *I) {
@@ -309,8 +322,8 @@
 public:
   /// Return true if the specified pointer "may" (or must) alias one of the
   /// members in the set.
-  bool aliasesPointer(const Value *Ptr, uint64_t Size, const AAMDNodes &AAInfo,
-                      AliasAnalysis &AA) const;
+  bool aliasesPointer(const Value *Ptr, LocationSize Size,
+                      const AAMDNodes &AAInfo, AliasAnalysis &AA) const;
   bool aliasesUnknownInst(const Instruction *Inst, AliasAnalysis &AA) const;
 };
 
@@ -364,12 +377,12 @@
   /// These methods return true if inserting the instruction resulted in the
   /// addition of a new alias set (i.e., the pointer did not alias anything).
   ///
-  void add(Value *Ptr, uint64_t Size, const AAMDNodes &AAInfo); // Add a loc.
+  void add(Value *Ptr, LocationSize Size, const AAMDNodes &AAInfo); // Add a loc
   void add(LoadInst *LI);
   void add(StoreInst *SI);
   void add(VAArgInst *VAAI);
-  void add(MemSetInst *MSI);
-  void add(MemTransferInst *MTI);
+  void add(AnyMemSetInst *MSI);
+  void add(AnyMemTransferInst *MTI);
   void add(Instruction *I);       // Dispatch to one of the other add methods...
   void add(BasicBlock &BB);       // Add all instructions in basic block
   void add(const AliasSetTracker &AST); // Add alias relations from another AST
@@ -384,12 +397,12 @@
   /// argument is non-null, this method sets the value to true if a new alias
   /// set is created to contain the pointer (because the pointer didn't alias
   /// anything).
-  AliasSet &getAliasSetForPointer(Value *P, uint64_t Size,
+  AliasSet &getAliasSetForPointer(Value *P, LocationSize Size,
                                   const AAMDNodes &AAInfo);
 
   /// Return the alias set containing the location specified if one exists,
   /// otherwise return null.
-  AliasSet *getAliasSetForPointerIfExists(const Value *P, uint64_t Size,
+  AliasSet *getAliasSetForPointerIfExists(const Value *P, LocationSize Size,
                                           const AAMDNodes &AAInfo) {
     return mergeAliasSetsForPointer(P, Size, AAInfo);
   }
@@ -446,9 +459,9 @@
     return *Entry;
   }
 
-  AliasSet &addPointer(Value *P, uint64_t Size, const AAMDNodes &AAInfo,
+  AliasSet &addPointer(Value *P, LocationSize Size, const AAMDNodes &AAInfo,
                        AliasSet::AccessLattice E);
-  AliasSet *mergeAliasSetsForPointer(const Value *Ptr, uint64_t Size,
+  AliasSet *mergeAliasSetsForPointer(const Value *Ptr, LocationSize Size,
                                      const AAMDNodes &AAInfo);
 
   /// Merge all alias sets into a single set that is considered to alias any
diff --git a/linux-x64/clang/include/llvm/Analysis/AssumptionCache.h b/linux-x64/clang/include/llvm/Analysis/AssumptionCache.h
index c965e62..46538b1 100644
--- a/linux-x64/clang/include/llvm/Analysis/AssumptionCache.h
+++ b/linux-x64/clang/include/llvm/Analysis/AssumptionCache.h
@@ -32,20 +32,20 @@
 class raw_ostream;
 class Value;
 
-/// \brief A cache of @llvm.assume calls within a function.
+/// A cache of \@llvm.assume calls within a function.
 ///
 /// This cache provides fast lookup of assumptions within a function by caching
 /// them and amortizing the cost of scanning for them across all queries. Passes
 /// that create new assumptions are required to call registerAssumption() to
-/// register any new @llvm.assume calls that they create. Deletions of
-/// @llvm.assume calls do not require special handling.
+/// register any new \@llvm.assume calls that they create. Deletions of
+/// \@llvm.assume calls do not require special handling.
 class AssumptionCache {
-  /// \brief The function for which this cache is handling assumptions.
+  /// The function for which this cache is handling assumptions.
   ///
   /// We track this to lazily populate our assumptions.
   Function &F;
 
-  /// \brief Vector of weak value handles to calls of the @llvm.assume
+  /// Vector of weak value handles to calls of the \@llvm.assume
   /// intrinsic.
   SmallVector<WeakTrackingVH, 4> AssumeHandles;
 
@@ -64,7 +64,7 @@
 
   friend AffectedValueCallbackVH;
 
-  /// \brief A map of values about which an assumption might be providing
+  /// A map of values about which an assumption might be providing
   /// information to the relevant set of assumptions.
   using AffectedValuesMap =
       DenseMap<AffectedValueCallbackVH, SmallVector<WeakTrackingVH, 1>,
@@ -77,17 +77,17 @@
   /// Copy affected values in the cache for OV to be affected values for NV.
   void copyAffectedValuesInCache(Value *OV, Value *NV);
 
-  /// \brief Flag tracking whether we have scanned the function yet.
+  /// Flag tracking whether we have scanned the function yet.
   ///
   /// We want to be as lazy about this as possible, and so we scan the function
   /// at the last moment.
   bool Scanned = false;
 
-  /// \brief Scan the function for assumptions and add them to the cache.
+  /// Scan the function for assumptions and add them to the cache.
   void scanFunction();
 
 public:
-  /// \brief Construct an AssumptionCache from a function by scanning all of
+  /// Construct an AssumptionCache from a function by scanning all of
   /// its instructions.
   AssumptionCache(Function &F) : F(F) {}
 
@@ -98,17 +98,17 @@
     return false;
   }
 
-  /// \brief Add an @llvm.assume intrinsic to this function's cache.
+  /// Add an \@llvm.assume intrinsic to this function's cache.
   ///
   /// The call passed in must be an instruction within this function and must
   /// not already be in the cache.
   void registerAssumption(CallInst *CI);
 
-  /// \brief Update the cache of values being affected by this assumption (i.e.
+  /// Update the cache of values being affected by this assumption (i.e.
   /// the values about which this assumption provides information).
   void updateAffectedValues(CallInst *CI);
 
-  /// \brief Clear the cache of @llvm.assume intrinsics for a function.
+  /// Clear the cache of \@llvm.assume intrinsics for a function.
   ///
   /// It will be re-scanned the next time it is requested.
   void clear() {
@@ -117,7 +117,7 @@
     Scanned = false;
   }
 
-  /// \brief Access the list of assumption handles currently tracked for this
+  /// Access the list of assumption handles currently tracked for this
   /// function.
   ///
   /// Note that these produce weak handles that may be null. The caller must
@@ -131,7 +131,7 @@
     return AssumeHandles;
   }
 
-  /// \brief Access the list of assumptions which affect this value.
+  /// Access the list of assumptions which affect this value.
   MutableArrayRef<WeakTrackingVH> assumptionsFor(const Value *V) {
     if (!Scanned)
       scanFunction();
@@ -144,7 +144,7 @@
   }
 };
 
-/// \brief A function analysis which provides an \c AssumptionCache.
+/// A function analysis which provides an \c AssumptionCache.
 ///
 /// This analysis is intended for use with the new pass manager and will vend
 /// assumption caches for a given function.
@@ -161,7 +161,7 @@
   }
 };
 
-/// \brief Printer pass for the \c AssumptionAnalysis results.
+/// Printer pass for the \c AssumptionAnalysis results.
 class AssumptionPrinterPass : public PassInfoMixin<AssumptionPrinterPass> {
   raw_ostream &OS;
 
@@ -171,7 +171,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief An immutable pass that tracks lazily created \c AssumptionCache
+/// An immutable pass that tracks lazily created \c AssumptionCache
 /// objects.
 ///
 /// This is essentially a workaround for the legacy pass manager's weaknesses
@@ -203,7 +203,7 @@
   FunctionCallsMap AssumptionCaches;
 
 public:
-  /// \brief Get the cached assumptions for a function.
+  /// Get the cached assumptions for a function.
   ///
   /// If no assumptions are cached, this will scan the function. Otherwise, the
   /// existing cache will be returned.
diff --git a/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
index 42e5e97..6344e84 100644
--- a/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/BasicAliasAnalysis.h
@@ -43,6 +43,7 @@
 class PHINode;
 class SelectInst;
 class TargetLibraryInfo;
+class PhiValues;
 class Value;
 
 /// This is the AA result object for the basic, local, and stateless alias
@@ -55,26 +56,30 @@
   friend AAResultBase<BasicAAResult>;
 
   const DataLayout &DL;
+  const Function &F;
   const TargetLibraryInfo &TLI;
   AssumptionCache &AC;
   DominatorTree *DT;
   LoopInfo *LI;
+  PhiValues *PV;
 
 public:
-  BasicAAResult(const DataLayout &DL, const TargetLibraryInfo &TLI,
-                AssumptionCache &AC, DominatorTree *DT = nullptr,
-                LoopInfo *LI = nullptr)
-      : AAResultBase(), DL(DL), TLI(TLI), AC(AC), DT(DT), LI(LI) {}
+  BasicAAResult(const DataLayout &DL, const Function &F,
+                const TargetLibraryInfo &TLI, AssumptionCache &AC,
+                DominatorTree *DT = nullptr, LoopInfo *LI = nullptr,
+                PhiValues *PV = nullptr)
+      : AAResultBase(), DL(DL), F(F), TLI(TLI), AC(AC), DT(DT), LI(LI), PV(PV)
+        {}
 
   BasicAAResult(const BasicAAResult &Arg)
-      : AAResultBase(Arg), DL(Arg.DL), TLI(Arg.TLI), AC(Arg.AC), DT(Arg.DT),
-        LI(Arg.LI) {}
+      : AAResultBase(Arg), DL(Arg.DL), F(Arg.F), TLI(Arg.TLI), AC(Arg.AC),
+        DT(Arg.DT),  LI(Arg.LI), PV(Arg.PV) {}
   BasicAAResult(BasicAAResult &&Arg)
-      : AAResultBase(std::move(Arg)), DL(Arg.DL), TLI(Arg.TLI), AC(Arg.AC),
-        DT(Arg.DT), LI(Arg.LI) {}
+      : AAResultBase(std::move(Arg)), DL(Arg.DL), F(Arg.F), TLI(Arg.TLI),
+        AC(Arg.AC), DT(Arg.DT), LI(Arg.LI), PV(Arg.PV) {}
 
   /// Handle invalidation events in the new pass manager.
-  bool invalidate(Function &F, const PreservedAnalyses &PA,
+  bool invalidate(Function &Fn, const PreservedAnalyses &PA,
                   FunctionAnalysisManager::Invalidator &Inv);
 
   AliasResult alias(const MemoryLocation &LocA, const MemoryLocation &LocB);
@@ -94,7 +99,7 @@
 
   /// Returns the behavior when calling the given function. For use when the
   /// call site is not known.
-  FunctionModRefBehavior getModRefBehavior(const Function *F);
+  FunctionModRefBehavior getModRefBehavior(const Function *Fn);
 
 private:
   // A linear transformation of a Value; this class represents ZExt(SExt(V,
@@ -171,9 +176,9 @@
 
   static bool isGEPBaseAtNegativeOffset(const GEPOperator *GEPOp,
       const DecomposedGEP &DecompGEP, const DecomposedGEP &DecompObject,
-      uint64_t ObjectAccessSize);
+      LocationSize ObjectAccessSize);
 
-  /// \brief A Heuristic for aliasGEP that searches for a constant offset
+  /// A Heuristic for aliasGEP that searches for a constant offset
   /// between the variables.
   ///
   /// GetLinearExpression has some limitations, as generally zext(%x + 1)
@@ -183,31 +188,33 @@
   /// the addition overflows.
   bool
   constantOffsetHeuristic(const SmallVectorImpl<VariableGEPIndex> &VarIndices,
-                          uint64_t V1Size, uint64_t V2Size, int64_t BaseOffset,
-                          AssumptionCache *AC, DominatorTree *DT);
+                          LocationSize V1Size, LocationSize V2Size,
+                          int64_t BaseOffset, AssumptionCache *AC,
+                          DominatorTree *DT);
 
   bool isValueEqualInPotentialCycles(const Value *V1, const Value *V2);
 
   void GetIndexDifference(SmallVectorImpl<VariableGEPIndex> &Dest,
                           const SmallVectorImpl<VariableGEPIndex> &Src);
 
-  AliasResult aliasGEP(const GEPOperator *V1, uint64_t V1Size,
+  AliasResult aliasGEP(const GEPOperator *V1, LocationSize V1Size,
                        const AAMDNodes &V1AAInfo, const Value *V2,
-                       uint64_t V2Size, const AAMDNodes &V2AAInfo,
+                       LocationSize V2Size, const AAMDNodes &V2AAInfo,
                        const Value *UnderlyingV1, const Value *UnderlyingV2);
 
-  AliasResult aliasPHI(const PHINode *PN, uint64_t PNSize,
+  AliasResult aliasPHI(const PHINode *PN, LocationSize PNSize,
                        const AAMDNodes &PNAAInfo, const Value *V2,
-                       uint64_t V2Size, const AAMDNodes &V2AAInfo,
+                       LocationSize V2Size, const AAMDNodes &V2AAInfo,
                        const Value *UnderV2);
 
-  AliasResult aliasSelect(const SelectInst *SI, uint64_t SISize,
+  AliasResult aliasSelect(const SelectInst *SI, LocationSize SISize,
                           const AAMDNodes &SIAAInfo, const Value *V2,
-                          uint64_t V2Size, const AAMDNodes &V2AAInfo,
+                          LocationSize V2Size, const AAMDNodes &V2AAInfo,
                           const Value *UnderV2);
 
-  AliasResult aliasCheck(const Value *V1, uint64_t V1Size, AAMDNodes V1AATag,
-                         const Value *V2, uint64_t V2Size, AAMDNodes V2AATag,
+  AliasResult aliasCheck(const Value *V1, LocationSize V1Size,
+                         AAMDNodes V1AATag, const Value *V2,
+                         LocationSize V2Size, AAMDNodes V2AATag,
                          const Value *O1 = nullptr, const Value *O2 = nullptr);
 };
 
diff --git a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
index 89370cb..ca12db6 100644
--- a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfo.h
@@ -65,17 +65,17 @@
   /// floating points.
   BlockFrequency getBlockFreq(const BasicBlock *BB) const;
 
-  /// \brief Returns the estimated profile count of \p BB.
+  /// Returns the estimated profile count of \p BB.
   /// This computes the relative block frequency of \p BB and multiplies it by
   /// the enclosing function's count (if available) and returns the value.
   Optional<uint64_t> getBlockProfileCount(const BasicBlock *BB) const;
 
-  /// \brief Returns the estimated profile count of \p Freq.
+  /// Returns the estimated profile count of \p Freq.
   /// This uses the frequency \p Freq and multiplies it by
   /// the enclosing function's count (if available) and returns the value.
   Optional<uint64_t> getProfileCountFromFreq(uint64_t Freq) const;
 
-  /// \brief Returns true if \p BB is an irreducible loop header
+  /// Returns true if \p BB is an irreducible loop header
   /// block. Otherwise false.
   bool isIrrLoopHeader(const BasicBlock *BB);
 
@@ -105,7 +105,7 @@
   void print(raw_ostream &OS) const;
 };
 
-/// \brief Analysis pass which computes \c BlockFrequencyInfo.
+/// Analysis pass which computes \c BlockFrequencyInfo.
 class BlockFrequencyAnalysis
     : public AnalysisInfoMixin<BlockFrequencyAnalysis> {
   friend AnalysisInfoMixin<BlockFrequencyAnalysis>;
@@ -113,14 +113,14 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result type for this analysis pass.
+  /// Provide the result type for this analysis pass.
   using Result = BlockFrequencyInfo;
 
-  /// \brief Run the analysis pass over a function and produce BFI.
+  /// Run the analysis pass over a function and produce BFI.
   Result run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for the \c BlockFrequencyInfo results.
+/// Printer pass for the \c BlockFrequencyInfo results.
 class BlockFrequencyPrinterPass
     : public PassInfoMixin<BlockFrequencyPrinterPass> {
   raw_ostream &OS;
@@ -131,7 +131,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Legacy analysis pass which computes \c BlockFrequencyInfo.
+/// Legacy analysis pass which computes \c BlockFrequencyInfo.
 class BlockFrequencyInfoWrapperPass : public FunctionPass {
   BlockFrequencyInfo BFI;
 
diff --git a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
index 40c40b8..25b2efd 100644
--- a/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/BlockFrequencyInfoImpl.h
@@ -66,7 +66,7 @@
 // This is part of a workaround for a GCC 4.7 crash on lambdas.
 template <class BT> struct BlockEdgesAdder;
 
-/// \brief Mass of a block.
+/// Mass of a block.
 ///
 /// This class implements a sort of fixed-point fraction always between 0.0 and
 /// 1.0.  getMass() == std::numeric_limits<uint64_t>::max() indicates a value of
@@ -100,7 +100,7 @@
 
   bool operator!() const { return isEmpty(); }
 
-  /// \brief Add another mass.
+  /// Add another mass.
   ///
   /// Adds another mass, saturating at \a isFull() rather than overflowing.
   BlockMass &operator+=(BlockMass X) {
@@ -109,7 +109,7 @@
     return *this;
   }
 
-  /// \brief Subtract another mass.
+  /// Subtract another mass.
   ///
   /// Subtracts another mass, saturating at \a isEmpty() rather than
   /// undeflowing.
@@ -131,7 +131,7 @@
   bool operator<(BlockMass X) const { return Mass < X.Mass; }
   bool operator>(BlockMass X) const { return Mass > X.Mass; }
 
-  /// \brief Convert to scaled number.
+  /// Convert to scaled number.
   ///
   /// Convert to \a ScaledNumber.  \a isFull() gives 1.0, while \a isEmpty()
   /// gives slightly above 0.0.
@@ -164,7 +164,7 @@
   static const bool value = true;
 };
 
-/// \brief Base class for BlockFrequencyInfoImpl
+/// Base class for BlockFrequencyInfoImpl
 ///
 /// BlockFrequencyInfoImplBase has supporting data structures and some
 /// algorithms for BlockFrequencyInfoImplBase.  Only algorithms that depend on
@@ -177,7 +177,7 @@
   using Scaled64 = ScaledNumber<uint64_t>;
   using BlockMass = bfi_detail::BlockMass;
 
-  /// \brief Representative of a block.
+  /// Representative of a block.
   ///
   /// This is a simple wrapper around an index into the reverse-post-order
   /// traversal of the blocks.
@@ -206,13 +206,13 @@
     }
   };
 
-  /// \brief Stats about a block itself.
+  /// Stats about a block itself.
   struct FrequencyData {
     Scaled64 Scaled;
     uint64_t Integer;
   };
 
-  /// \brief Data about a loop.
+  /// Data about a loop.
   ///
   /// Contains the data necessary to represent a loop as a pseudo-node once it's
   /// packaged.
@@ -270,7 +270,7 @@
     }
   };
 
-  /// \brief Index of loop information.
+  /// Index of loop information.
   struct WorkingData {
     BlockNode Node;           ///< This node.
     LoopData *Loop = nullptr; ///< The loop this block is inside.
@@ -293,7 +293,7 @@
       return Loop->Parent->Parent;
     }
 
-    /// \brief Resolve a node to its representative.
+    /// Resolve a node to its representative.
     ///
     /// Get the node currently representing Node, which could be a containing
     /// loop.
@@ -320,7 +320,7 @@
       return L;
     }
 
-    /// \brief Get the appropriate mass for a node.
+    /// Get the appropriate mass for a node.
     ///
     /// Get appropriate mass for Node.  If Node is a loop-header (whose loop
     /// has been packaged), returns the mass of its pseudo-node.  If it's a
@@ -333,19 +333,19 @@
       return Loop->Parent->Mass;
     }
 
-    /// \brief Has ContainingLoop been packaged up?
+    /// Has ContainingLoop been packaged up?
     bool isPackaged() const { return getResolvedNode() != Node; }
 
-    /// \brief Has Loop been packaged up?
+    /// Has Loop been packaged up?
     bool isAPackage() const { return isLoopHeader() && Loop->IsPackaged; }
 
-    /// \brief Has Loop been packaged up twice?
+    /// Has Loop been packaged up twice?
     bool isADoublePackage() const {
       return isDoubleLoopHeader() && Loop->Parent->IsPackaged;
     }
   };
 
-  /// \brief Unscaled probability weight.
+  /// Unscaled probability weight.
   ///
   /// Probability weight for an edge in the graph (including the
   /// successor/target node).
@@ -369,7 +369,7 @@
         : Type(Type), TargetNode(TargetNode), Amount(Amount) {}
   };
 
-  /// \brief Distribution of unscaled probability weight.
+  /// Distribution of unscaled probability weight.
   ///
   /// Distribution of unscaled probability weight to a set of successors.
   ///
@@ -398,7 +398,7 @@
       add(Node, Amount, Weight::Backedge);
     }
 
-    /// \brief Normalize the distribution.
+    /// Normalize the distribution.
     ///
     /// Combines multiple edges to the same \a Weight::TargetNode and scales
     /// down so that \a Total fits into 32-bits.
@@ -413,26 +413,26 @@
     void add(const BlockNode &Node, uint64_t Amount, Weight::DistType Type);
   };
 
-  /// \brief Data about each block.  This is used downstream.
+  /// Data about each block.  This is used downstream.
   std::vector<FrequencyData> Freqs;
 
-  /// \brief Whether each block is an irreducible loop header.
+  /// Whether each block is an irreducible loop header.
   /// This is used downstream.
   SparseBitVector<> IsIrrLoopHeader;
 
-  /// \brief Loop data: see initializeLoops().
+  /// Loop data: see initializeLoops().
   std::vector<WorkingData> Working;
 
-  /// \brief Indexed information about loops.
+  /// Indexed information about loops.
   std::list<LoopData> Loops;
 
-  /// \brief Virtual destructor.
+  /// Virtual destructor.
   ///
   /// Need a virtual destructor to mask the compiler warning about
   /// getBlockName().
   virtual ~BlockFrequencyInfoImplBase() = default;
 
-  /// \brief Add all edges out of a packaged loop to the distribution.
+  /// Add all edges out of a packaged loop to the distribution.
   ///
   /// Adds all edges from LocalLoopHead to Dist.  Calls addToDist() to add each
   /// successor edge.
@@ -441,7 +441,7 @@
   bool addLoopSuccessorsToDist(const LoopData *OuterLoop, LoopData &Loop,
                                Distribution &Dist);
 
-  /// \brief Add an edge to the distribution.
+  /// Add an edge to the distribution.
   ///
   /// Adds an edge to Succ to Dist.  If \c LoopHead.isValid(), then whether the
   /// edge is local/exit/backedge is in the context of LoopHead.  Otherwise,
@@ -457,7 +457,7 @@
     return *Working[Head.Index].Loop;
   }
 
-  /// \brief Analyze irreducible SCCs.
+  /// Analyze irreducible SCCs.
   ///
   /// Separate irreducible SCCs from \c G, which is an explict graph of \c
   /// OuterLoop (or the top-level function, if \c OuterLoop is \c nullptr).
@@ -468,7 +468,7 @@
   analyzeIrreducible(const bfi_detail::IrreducibleGraph &G, LoopData *OuterLoop,
                      std::list<LoopData>::iterator Insert);
 
-  /// \brief Update a loop after packaging irreducible SCCs inside of it.
+  /// Update a loop after packaging irreducible SCCs inside of it.
   ///
   /// Update \c OuterLoop.  Before finding irreducible control flow, it was
   /// partway through \a computeMassInLoop(), so \a LoopData::Exits and \a
@@ -476,7 +476,7 @@
   /// up need to be removed from \a OuterLoop::Nodes.
   void updateLoopWithIrreducible(LoopData &OuterLoop);
 
-  /// \brief Distribute mass according to a distribution.
+  /// Distribute mass according to a distribution.
   ///
   /// Distributes the mass in Source according to Dist.  If LoopHead.isValid(),
   /// backedges and exits are stored in its entry in Loops.
@@ -485,7 +485,7 @@
   void distributeMass(const BlockNode &Source, LoopData *OuterLoop,
                       Distribution &Dist);
 
-  /// \brief Compute the loop scale for a loop.
+  /// Compute the loop scale for a loop.
   void computeLoopScale(LoopData &Loop);
 
   /// Adjust the mass of all headers in an irreducible loop.
@@ -500,19 +500,19 @@
 
   void distributeIrrLoopHeaderMass(Distribution &Dist);
 
-  /// \brief Package up a loop.
+  /// Package up a loop.
   void packageLoop(LoopData &Loop);
 
-  /// \brief Unwrap loops.
+  /// Unwrap loops.
   void unwrapLoops();
 
-  /// \brief Finalize frequency metrics.
+  /// Finalize frequency metrics.
   ///
   /// Calculates final frequencies and cleans up no-longer-needed data
   /// structures.
   void finalizeMetrics();
 
-  /// \brief Clear all memory.
+  /// Clear all memory.
   void clear();
 
   virtual std::string getBlockName(const BlockNode &Node) const;
@@ -560,7 +560,7 @@
   using LoopInfoT = MachineLoopInfo;
 };
 
-/// \brief Get the name of a MachineBasicBlock.
+/// Get the name of a MachineBasicBlock.
 ///
 /// Get the name of a MachineBasicBlock.  It's templated so that including from
 /// CodeGen is unnecessary (that would be a layering issue).
@@ -574,13 +574,13 @@
     return (MachineName + "[" + BB->getName() + "]").str();
   return MachineName.str();
 }
-/// \brief Get the name of a BasicBlock.
+/// Get the name of a BasicBlock.
 template <> inline std::string getBlockName(const BasicBlock *BB) {
   assert(BB && "Unexpected nullptr");
   return BB->getName().str();
 }
 
-/// \brief Graph of irreducible control flow.
+/// Graph of irreducible control flow.
 ///
 /// This graph is used for determining the SCCs in a loop (or top-level
 /// function) that has irreducible control flow.
@@ -619,7 +619,7 @@
   std::vector<IrrNode> Nodes;
   SmallDenseMap<uint32_t, IrrNode *, 4> Lookup;
 
-  /// \brief Construct an explicit graph containing irreducible control flow.
+  /// Construct an explicit graph containing irreducible control flow.
   ///
   /// Construct an explicit graph of the control flow in \c OuterLoop (or the
   /// top-level function, if \c OuterLoop is \c nullptr).  Uses \c
@@ -687,7 +687,7 @@
 
 } // end namespace bfi_detail
 
-/// \brief Shared implementation for block frequency analysis.
+/// Shared implementation for block frequency analysis.
 ///
 /// This is a shared implementation of BlockFrequencyInfo and
 /// MachineBlockFrequencyInfo, and calculates the relative frequencies of
@@ -878,12 +878,12 @@
     return RPOT[Node.Index];
   }
 
-  /// \brief Run (and save) a post-order traversal.
+  /// Run (and save) a post-order traversal.
   ///
   /// Saves a reverse post-order traversal of all the nodes in \a F.
   void initializeRPOT();
 
-  /// \brief Initialize loop data.
+  /// Initialize loop data.
   ///
   /// Build up \a Loops using \a LoopInfo.  \a LoopInfo gives us a mapping from
   /// each block to the deepest loop it's in, but we need the inverse.  For each
@@ -892,7 +892,7 @@
   /// the loop that are not in sub-loops.
   void initializeLoops();
 
-  /// \brief Propagate to a block's successors.
+  /// Propagate to a block's successors.
   ///
   /// In the context of distributing mass through \c OuterLoop, divide the mass
   /// currently assigned to \c Node between its successors.
@@ -900,7 +900,7 @@
   /// \return \c true unless there's an irreducible backedge.
   bool propagateMassToSuccessors(LoopData *OuterLoop, const BlockNode &Node);
 
-  /// \brief Compute mass in a particular loop.
+  /// Compute mass in a particular loop.
   ///
   /// Assign mass to \c Loop's header, and then for each block in \c Loop in
   /// reverse post-order, distribute mass to its successors.  Only visits nodes
@@ -910,7 +910,7 @@
   /// \return \c true unless there's an irreducible backedge.
   bool computeMassInLoop(LoopData &Loop);
 
-  /// \brief Try to compute mass in the top-level function.
+  /// Try to compute mass in the top-level function.
   ///
   /// Assign mass to the entry block, and then for each block in reverse
   /// post-order, distribute mass to its successors.  Skips nodes that have
@@ -920,7 +920,7 @@
   /// \return \c true unless there's an irreducible backedge.
   bool tryToComputeMassInFunction();
 
-  /// \brief Compute mass in (and package up) irreducible SCCs.
+  /// Compute mass in (and package up) irreducible SCCs.
   ///
   /// Find the irreducible SCCs in \c OuterLoop, add them to \a Loops (in front
   /// of \c Insert), and call \a computeMassInLoop() on each of them.
@@ -935,7 +935,7 @@
   void computeIrreducibleMass(LoopData *OuterLoop,
                               std::list<LoopData>::iterator Insert);
 
-  /// \brief Compute mass in all loops.
+  /// Compute mass in all loops.
   ///
   /// For each loop bottom-up, call \a computeMassInLoop().
   ///
@@ -946,7 +946,7 @@
   /// \post \a computeMassInLoop() has returned \c true for every loop.
   void computeMassInLoops();
 
-  /// \brief Compute mass in the top-level function.
+  /// Compute mass in the top-level function.
   ///
   /// Uses \a tryToComputeMassInFunction() and \a computeIrreducibleMass() to
   /// compute mass in the top-level function.
@@ -994,7 +994,7 @@
 
   const BranchProbabilityInfoT &getBPI() const { return *BPI; }
 
-  /// \brief Print the frequencies for the current function.
+  /// Print the frequencies for the current function.
   ///
   /// Prints the frequencies for the blocks in the current function.
   ///
@@ -1030,8 +1030,9 @@
   Nodes.clear();
 
   // Initialize.
-  DEBUG(dbgs() << "\nblock-frequency: " << F.getName() << "\n================="
-               << std::string(F.getName().size(), '=') << "\n");
+  LLVM_DEBUG(dbgs() << "\nblock-frequency: " << F.getName()
+                    << "\n================="
+                    << std::string(F.getName().size(), '=') << "\n");
   initializeRPOT();
   initializeLoops();
 
@@ -1067,10 +1068,11 @@
   assert(RPOT.size() - 1 <= BlockNode::getMaxIndex() &&
          "More nodes in function than Block Frequency Info supports");
 
-  DEBUG(dbgs() << "reverse-post-order-traversal\n");
+  LLVM_DEBUG(dbgs() << "reverse-post-order-traversal\n");
   for (rpot_iterator I = rpot_begin(), E = rpot_end(); I != E; ++I) {
     BlockNode Node = getNode(I);
-    DEBUG(dbgs() << " - " << getIndex(I) << ": " << getBlockName(Node) << "\n");
+    LLVM_DEBUG(dbgs() << " - " << getIndex(I) << ": " << getBlockName(Node)
+                      << "\n");
     Nodes[*I] = Node;
   }
 
@@ -1081,7 +1083,7 @@
 }
 
 template <class BT> void BlockFrequencyInfoImpl<BT>::initializeLoops() {
-  DEBUG(dbgs() << "loop-detection\n");
+  LLVM_DEBUG(dbgs() << "loop-detection\n");
   if (LI->empty())
     return;
 
@@ -1099,7 +1101,7 @@
 
     Loops.emplace_back(Parent, Header);
     Working[Header.Index].Loop = &Loops.back();
-    DEBUG(dbgs() << " - loop = " << getBlockName(Header) << "\n");
+    LLVM_DEBUG(dbgs() << " - loop = " << getBlockName(Header) << "\n");
 
     for (const LoopT *L : *Loop)
       Q.emplace_back(L, &Loops.back());
@@ -1128,8 +1130,8 @@
 
     Working[Index].Loop = HeaderData.Loop;
     HeaderData.Loop->Nodes.push_back(Index);
-    DEBUG(dbgs() << " - loop = " << getBlockName(Header)
-                 << ": member = " << getBlockName(Index) << "\n");
+    LLVM_DEBUG(dbgs() << " - loop = " << getBlockName(Header)
+                      << ": member = " << getBlockName(Index) << "\n");
   }
 }
 
@@ -1150,10 +1152,10 @@
 template <class BT>
 bool BlockFrequencyInfoImpl<BT>::computeMassInLoop(LoopData &Loop) {
   // Compute mass in loop.
-  DEBUG(dbgs() << "compute-mass-in-loop: " << getLoopName(Loop) << "\n");
+  LLVM_DEBUG(dbgs() << "compute-mass-in-loop: " << getLoopName(Loop) << "\n");
 
   if (Loop.isIrreducible()) {
-    DEBUG(dbgs() << "isIrreducible = true\n");
+    LLVM_DEBUG(dbgs() << "isIrreducible = true\n");
     Distribution Dist;
     unsigned NumHeadersWithWeight = 0;
     Optional<uint64_t> MinHeaderWeight;
@@ -1165,14 +1167,14 @@
       IsIrrLoopHeader.set(Loop.Nodes[H].Index);
       Optional<uint64_t> HeaderWeight = Block->getIrrLoopHeaderWeight();
       if (!HeaderWeight) {
-        DEBUG(dbgs() << "Missing irr loop header metadata on "
-              << getBlockName(HeaderNode) << "\n");
+        LLVM_DEBUG(dbgs() << "Missing irr loop header metadata on "
+                          << getBlockName(HeaderNode) << "\n");
         HeadersWithoutWeight.insert(H);
         continue;
       }
-      DEBUG(dbgs() << getBlockName(HeaderNode)
-            << " has irr loop header weight " << HeaderWeight.getValue()
-            << "\n");
+      LLVM_DEBUG(dbgs() << getBlockName(HeaderNode)
+                        << " has irr loop header weight "
+                        << HeaderWeight.getValue() << "\n");
       NumHeadersWithWeight++;
       uint64_t HeaderWeightValue = HeaderWeight.getValue();
       if (!MinHeaderWeight || HeaderWeightValue < MinHeaderWeight)
@@ -1194,8 +1196,8 @@
       assert(!getBlock(HeaderNode)->getIrrLoopHeaderWeight() &&
              "Shouldn't have a weight metadata");
       uint64_t MinWeight = MinHeaderWeight.getValue();
-      DEBUG(dbgs() << "Giving weight " << MinWeight
-            << " to " << getBlockName(HeaderNode) << "\n");
+      LLVM_DEBUG(dbgs() << "Giving weight " << MinWeight << " to "
+                        << getBlockName(HeaderNode) << "\n");
       if (MinWeight)
         Dist.addLocal(HeaderNode, MinWeight);
     }
@@ -1224,7 +1226,7 @@
 template <class BT>
 bool BlockFrequencyInfoImpl<BT>::tryToComputeMassInFunction() {
   // Compute mass in function.
-  DEBUG(dbgs() << "compute-mass-in-function\n");
+  LLVM_DEBUG(dbgs() << "compute-mass-in-function\n");
   assert(!Working.empty() && "no blocks in function");
   assert(!Working[0].isLoopHeader() && "entry block is a loop header");
 
@@ -1276,9 +1278,10 @@
 template <class BT>
 void BlockFrequencyInfoImpl<BT>::computeIrreducibleMass(
     LoopData *OuterLoop, std::list<LoopData>::iterator Insert) {
-  DEBUG(dbgs() << "analyze-irreducible-in-";
-        if (OuterLoop) dbgs() << "loop: " << getLoopName(*OuterLoop) << "\n";
-        else dbgs() << "function\n");
+  LLVM_DEBUG(dbgs() << "analyze-irreducible-in-";
+             if (OuterLoop) dbgs()
+             << "loop: " << getLoopName(*OuterLoop) << "\n";
+             else dbgs() << "function\n");
 
   using namespace bfi_detail;
 
@@ -1304,7 +1307,7 @@
 bool
 BlockFrequencyInfoImpl<BT>::propagateMassToSuccessors(LoopData *OuterLoop,
                                                       const BlockNode &Node) {
-  DEBUG(dbgs() << " - node: " << getBlockName(Node) << "\n");
+  LLVM_DEBUG(dbgs() << " - node: " << getBlockName(Node) << "\n");
   // Calculate probability for successors.
   Distribution Dist;
   if (auto *Loop = Working[Node.Index].getPackagedLoop()) {
diff --git a/linux-x64/clang/include/llvm/Analysis/BranchProbabilityInfo.h b/linux-x64/clang/include/llvm/Analysis/BranchProbabilityInfo.h
index 417b649..45277db 100644
--- a/linux-x64/clang/include/llvm/Analysis/BranchProbabilityInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/BranchProbabilityInfo.h
@@ -38,7 +38,7 @@
 class TargetLibraryInfo;
 class Value;
 
-/// \brief Analysis providing branch probability information.
+/// Analysis providing branch probability information.
 ///
 /// This is a function analysis which provides information on the relative
 /// probabilities of each "edge" in the function's CFG where such an edge is
@@ -79,7 +79,7 @@
 
   void print(raw_ostream &OS) const;
 
-  /// \brief Get an edge's probability, relative to other out-edges of the Src.
+  /// Get an edge's probability, relative to other out-edges of the Src.
   ///
   /// This routine provides access to the fractional probability between zero
   /// (0%) and one (100%) of this edge executing, relative to other edges
@@ -88,7 +88,7 @@
   BranchProbability getEdgeProbability(const BasicBlock *Src,
                                        unsigned IndexInSuccessors) const;
 
-  /// \brief Get the probability of going from Src to Dst.
+  /// Get the probability of going from Src to Dst.
   ///
   /// It returns the sum of all probabilities for edges from Src to Dst.
   BranchProbability getEdgeProbability(const BasicBlock *Src,
@@ -97,19 +97,19 @@
   BranchProbability getEdgeProbability(const BasicBlock *Src,
                                        succ_const_iterator Dst) const;
 
-  /// \brief Test if an edge is hot relative to other out-edges of the Src.
+  /// Test if an edge is hot relative to other out-edges of the Src.
   ///
   /// Check whether this edge out of the source block is 'hot'. We define hot
   /// as having a relative probability >= 80%.
   bool isEdgeHot(const BasicBlock *Src, const BasicBlock *Dst) const;
 
-  /// \brief Retrieve the hot successor of a block if one exists.
+  /// Retrieve the hot successor of a block if one exists.
   ///
   /// Given a basic block, look through its successors and if one exists for
   /// which \see isEdgeHot would return true, return that successor block.
   const BasicBlock *getHotSucc(const BasicBlock *BB) const;
 
-  /// \brief Print an edge's probability.
+  /// Print an edge's probability.
   ///
   /// Retrieves an edge's probability similarly to \see getEdgeProbability, but
   /// then prints that probability to the provided stream. That stream is then
@@ -117,7 +117,7 @@
   raw_ostream &printEdgeProbability(raw_ostream &OS, const BasicBlock *Src,
                                     const BasicBlock *Dst) const;
 
-  /// \brief Set the raw edge probability for the given edge.
+  /// Set the raw edge probability for the given edge.
   ///
   /// This allows a pass to explicitly set the edge probability for an edge. It
   /// can be used when updating the CFG to update and preserve the branch
@@ -179,13 +179,13 @@
 
   DenseMap<Edge, BranchProbability> Probs;
 
-  /// \brief Track the last function we run over for printing.
+  /// Track the last function we run over for printing.
   const Function *LastF;
 
-  /// \brief Track the set of blocks directly succeeded by a returning block.
+  /// Track the set of blocks directly succeeded by a returning block.
   SmallPtrSet<const BasicBlock *, 16> PostDominatedByUnreachable;
 
-  /// \brief Track the set of blocks that always lead to a cold call.
+  /// Track the set of blocks that always lead to a cold call.
   SmallPtrSet<const BasicBlock *, 16> PostDominatedByColdCall;
 
   void updatePostDominatedByUnreachable(const BasicBlock *BB);
@@ -201,7 +201,7 @@
   bool calcInvokeHeuristics(const BasicBlock *BB);
 };
 
-/// \brief Analysis pass which computes \c BranchProbabilityInfo.
+/// Analysis pass which computes \c BranchProbabilityInfo.
 class BranchProbabilityAnalysis
     : public AnalysisInfoMixin<BranchProbabilityAnalysis> {
   friend AnalysisInfoMixin<BranchProbabilityAnalysis>;
@@ -209,14 +209,14 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result type for this analysis pass.
+  /// Provide the result type for this analysis pass.
   using Result = BranchProbabilityInfo;
 
-  /// \brief Run the analysis pass over a function and produce BPI.
+  /// Run the analysis pass over a function and produce BPI.
   BranchProbabilityInfo run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for the \c BranchProbabilityAnalysis results.
+/// Printer pass for the \c BranchProbabilityAnalysis results.
 class BranchProbabilityPrinterPass
     : public PassInfoMixin<BranchProbabilityPrinterPass> {
   raw_ostream &OS;
@@ -227,7 +227,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Legacy analysis pass which computes \c BranchProbabilityInfo.
+/// Legacy analysis pass which computes \c BranchProbabilityInfo.
 class BranchProbabilityInfoWrapperPass : public FunctionPass {
   BranchProbabilityInfo BPI;
 
diff --git a/linux-x64/clang/include/llvm/Analysis/CFG.h b/linux-x64/clang/include/llvm/Analysis/CFG.h
index d569464..cccdd16 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFG.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFG.h
@@ -49,7 +49,7 @@
 bool isCriticalEdge(const TerminatorInst *TI, unsigned SuccNum,
                     bool AllowIdenticalEdges = false);
 
-/// \brief Determine whether instruction 'To' is reachable from 'From',
+/// Determine whether instruction 'To' is reachable from 'From',
 /// returning true if uncertain.
 ///
 /// Determine whether there is a path from From to To within a single function.
@@ -68,7 +68,7 @@
                             const DominatorTree *DT = nullptr,
                             const LoopInfo *LI = nullptr);
 
-/// \brief Determine whether block 'To' is reachable from 'From', returning
+/// Determine whether block 'To' is reachable from 'From', returning
 /// true if uncertain.
 ///
 /// Determine whether there is a path from From to To within a single function.
@@ -78,7 +78,7 @@
                             const DominatorTree *DT = nullptr,
                             const LoopInfo *LI = nullptr);
 
-/// \brief Determine whether there is at least one path from a block in
+/// Determine whether there is at least one path from a block in
 /// 'Worklist' to 'StopBB', returning true if uncertain.
 ///
 /// Determine whether there is a path from at least one block in Worklist to
@@ -90,7 +90,7 @@
                                     const DominatorTree *DT = nullptr,
                                     const LoopInfo *LI = nullptr);
 
-/// \brief Return true if the control flow in \p RPOTraversal is irreducible.
+/// Return true if the control flow in \p RPOTraversal is irreducible.
 ///
 /// This is a generic implementation to detect CFG irreducibility based on loop
 /// info analysis. It can be used for any kind of CFG (Loop, MachineLoop,
diff --git a/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
index 6239d53..8ae7255 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFLAndersAliasAnalysis.h
@@ -56,7 +56,7 @@
   /// Evict the given function from cache
   void evict(const Function *Fn);
 
-  /// \brief Get the alias summary for the given function
+  /// Get the alias summary for the given function
   /// Return nullptr if the summary is not found or not available
   const cflaa::AliasSummary *getAliasSummary(const Function &);
 
@@ -64,19 +64,19 @@
   AliasResult alias(const MemoryLocation &, const MemoryLocation &);
 
 private:
-  /// \brief Ensures that the given function is available in the cache.
+  /// Ensures that the given function is available in the cache.
   /// Returns the appropriate entry from the cache.
   const Optional<FunctionInfo> &ensureCached(const Function &);
 
-  /// \brief Inserts the given Function into the cache.
+  /// Inserts the given Function into the cache.
   void scan(const Function &);
 
-  /// \brief Build summary for a given function
+  /// Build summary for a given function
   FunctionInfo buildInfoFrom(const Function &);
 
   const TargetLibraryInfo &TLI;
 
-  /// \brief Cached mapping of Functions to their StratifiedSets.
+  /// Cached mapping of Functions to their StratifiedSets.
   /// If a function's sets are currently being built, it is marked
   /// in the cache as an Optional without a value. This way, if we
   /// have any kind of recursion, it is discernable from a function
diff --git a/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
index ee9e290..09e366f 100644
--- a/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/CFLSteensAliasAnalysis.h
@@ -55,16 +55,16 @@
     return false;
   }
 
-  /// \brief Inserts the given Function into the cache.
+  /// Inserts the given Function into the cache.
   void scan(Function *Fn);
 
   void evict(Function *Fn);
 
-  /// \brief Ensures that the given function is available in the cache.
+  /// Ensures that the given function is available in the cache.
   /// Returns the appropriate entry from the cache.
   const Optional<FunctionInfo> &ensureCached(Function *Fn);
 
-  /// \brief Get the alias summary for the given function
+  /// Get the alias summary for the given function
   /// Return nullptr if the summary is not found or not available
   const cflaa::AliasSummary *getAliasSummary(Function &Fn);
 
@@ -92,7 +92,7 @@
 private:
   const TargetLibraryInfo &TLI;
 
-  /// \brief Cached mapping of Functions to their StratifiedSets.
+  /// Cached mapping of Functions to their StratifiedSets.
   /// If a function's sets are currently being built, it is marked
   /// in the cache as an Optional without a value. This way, if we
   /// have any kind of recursion, it is discernable from a function
diff --git a/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h b/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
index 457d5a0..5e83ea2 100644
--- a/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
+++ b/linux-x64/clang/include/llvm/Analysis/CGSCCPassManager.h
@@ -119,7 +119,7 @@
 
 extern template class AnalysisManager<LazyCallGraph::SCC, LazyCallGraph &>;
 
-/// \brief The CGSCC analysis manager.
+/// The CGSCC analysis manager.
 ///
 /// See the documentation for the AnalysisManager template for detail
 /// documentation. This type serves as a convenient way to refer to this
@@ -140,7 +140,7 @@
 extern template class PassManager<LazyCallGraph::SCC, CGSCCAnalysisManager,
                                   LazyCallGraph &, CGSCCUpdateResult &>;
 
-/// \brief The CGSCC pass manager.
+/// The CGSCC pass manager.
 ///
 /// See the documentation for the PassManager template for details. It runs
 /// a sequence of SCC passes over each SCC that the manager is run over. This
@@ -175,10 +175,10 @@
   explicit Result(CGSCCAnalysisManager &InnerAM, LazyCallGraph &G)
       : InnerAM(&InnerAM), G(&G) {}
 
-  /// \brief Accessor for the analysis manager.
+  /// Accessor for the analysis manager.
   CGSCCAnalysisManager &getManager() { return *InnerAM; }
 
-  /// \brief Handler for invalidation of the Module.
+  /// Handler for invalidation of the Module.
   ///
   /// If the proxy analysis itself is preserved, then we assume that the set of
   /// SCCs in the Module hasn't changed. Thus any pointers to SCCs in the
@@ -302,7 +302,7 @@
       &InlinedInternalEdges;
 };
 
-/// \brief The core module pass which does a post-order walk of the SCCs and
+/// The core module pass which does a post-order walk of the SCCs and
 /// runs a CGSCC pass over each one.
 ///
 /// Designed to allow composition of a CGSCCPass(Manager) and
@@ -338,7 +338,7 @@
     return *this;
   }
 
-  /// \brief Runs the CGSCC pass across every SCC in the module.
+  /// Runs the CGSCC pass across every SCC in the module.
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) {
     // Setup the CGSCC analysis manager from its proxy.
     CGSCCAnalysisManager &CGAM =
@@ -387,15 +387,15 @@
       do {
         LazyCallGraph::RefSCC *RC = RCWorklist.pop_back_val();
         if (InvalidRefSCCSet.count(RC)) {
-          DEBUG(dbgs() << "Skipping an invalid RefSCC...\n");
+          LLVM_DEBUG(dbgs() << "Skipping an invalid RefSCC...\n");
           continue;
         }
 
         assert(CWorklist.empty() &&
                "Should always start with an empty SCC worklist");
 
-        DEBUG(dbgs() << "Running an SCC pass across the RefSCC: " << *RC
-                     << "\n");
+        LLVM_DEBUG(dbgs() << "Running an SCC pass across the RefSCC: " << *RC
+                          << "\n");
 
         // Push the initial SCCs in reverse post-order as we'll pop off the
         // back and so see this in post-order.
@@ -409,12 +409,13 @@
           // other RefSCCs should be queued above, so we just need to skip both
           // scenarios here.
           if (InvalidSCCSet.count(C)) {
-            DEBUG(dbgs() << "Skipping an invalid SCC...\n");
+            LLVM_DEBUG(dbgs() << "Skipping an invalid SCC...\n");
             continue;
           }
           if (&C->getOuterRefSCC() != RC) {
-            DEBUG(dbgs() << "Skipping an SCC that is now part of some other "
-                            "RefSCC...\n");
+            LLVM_DEBUG(dbgs()
+                       << "Skipping an SCC that is now part of some other "
+                          "RefSCC...\n");
             continue;
           }
 
@@ -436,7 +437,8 @@
             // If the CGSCC pass wasn't able to provide a valid updated SCC,
             // the current SCC may simply need to be skipped if invalid.
             if (UR.InvalidatedSCCs.count(C)) {
-              DEBUG(dbgs() << "Skipping invalidated root or island SCC!\n");
+              LLVM_DEBUG(dbgs()
+                         << "Skipping invalidated root or island SCC!\n");
               break;
             }
             // Check that we didn't miss any update scenario.
@@ -464,9 +466,10 @@
             // FIXME: If we ever start having RefSCC passes, we'll want to
             // iterate there too.
             if (UR.UpdatedC)
-              DEBUG(dbgs() << "Re-running SCC passes after a refinement of the "
-                              "current SCC: "
-                           << *UR.UpdatedC << "\n");
+              LLVM_DEBUG(dbgs()
+                         << "Re-running SCC passes after a refinement of the "
+                            "current SCC: "
+                         << *UR.UpdatedC << "\n");
 
             // Note that both `C` and `RC` may at this point refer to deleted,
             // invalid SCC and RefSCCs respectively. But we will short circuit
@@ -494,7 +497,7 @@
   CGSCCPassT Pass;
 };
 
-/// \brief A function to deduce a function pass type and wrap it in the
+/// A function to deduce a function pass type and wrap it in the
 /// templated adaptor.
 template <typename CGSCCPassT>
 ModuleToPostOrderCGSCCPassAdaptor<CGSCCPassT>
@@ -517,7 +520,7 @@
   public:
     explicit Result(FunctionAnalysisManager &FAM) : FAM(&FAM) {}
 
-    /// \brief Accessor for the analysis manager.
+    /// Accessor for the analysis manager.
     FunctionAnalysisManager &getManager() { return *FAM; }
 
     bool invalidate(LazyCallGraph::SCC &C, const PreservedAnalyses &PA,
@@ -552,7 +555,7 @@
     LazyCallGraph &G, LazyCallGraph::SCC &C, LazyCallGraph::Node &N,
     CGSCCAnalysisManager &AM, CGSCCUpdateResult &UR);
 
-/// \brief Adaptor that maps from a SCC to its functions.
+/// Adaptor that maps from a SCC to its functions.
 ///
 /// Designed to allow composition of a FunctionPass(Manager) and
 /// a CGSCCPassManager. Note that if this pass is constructed with a pointer
@@ -585,7 +588,7 @@
     return *this;
   }
 
-  /// \brief Runs the function pass across every function in the module.
+  /// Runs the function pass across every function in the module.
   PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
                         LazyCallGraph &CG, CGSCCUpdateResult &UR) {
     // Setup the function analysis manager from its proxy.
@@ -601,7 +604,8 @@
     // a pointer we can overwrite.
     LazyCallGraph::SCC *CurrentC = &C;
 
-    DEBUG(dbgs() << "Running function passes across an SCC: " << C << "\n");
+    LLVM_DEBUG(dbgs() << "Running function passes across an SCC: " << C
+                      << "\n");
 
     PreservedAnalyses PA = PreservedAnalyses::all();
     for (LazyCallGraph::Node *N : Nodes) {
@@ -652,7 +656,7 @@
   FunctionPassT Pass;
 };
 
-/// \brief A function to deduce a function pass type and wrap it in the
+/// A function to deduce a function pass type and wrap it in the
 /// templated adaptor.
 template <typename FunctionPassT>
 CGSCCToFunctionPassAdaptor<FunctionPassT>
@@ -757,9 +761,9 @@
         if (!F)
           return false;
 
-        DEBUG(dbgs() << "Found devirutalized call from "
-                     << CS.getParent()->getParent()->getName() << " to "
-                     << F->getName() << "\n");
+        LLVM_DEBUG(dbgs() << "Found devirutalized call from "
+                          << CS.getParent()->getParent()->getName() << " to "
+                          << F->getName() << "\n");
 
         // We now have a direct call where previously we had an indirect call,
         // so iterate to process this devirtualization site.
@@ -793,16 +797,18 @@
 
       // Otherwise, if we've already hit our max, we're done.
       if (Iteration >= MaxIterations) {
-        DEBUG(dbgs() << "Found another devirtualization after hitting the max "
-                        "number of repetitions ("
-                     << MaxIterations << ") on SCC: " << *C << "\n");
+        LLVM_DEBUG(
+            dbgs() << "Found another devirtualization after hitting the max "
+                      "number of repetitions ("
+                   << MaxIterations << ") on SCC: " << *C << "\n");
         PA.intersect(std::move(PassPA));
         break;
       }
 
-      DEBUG(dbgs()
-            << "Repeating an SCC pass after finding a devirtualization in: "
-            << *C << "\n");
+      LLVM_DEBUG(
+          dbgs()
+          << "Repeating an SCC pass after finding a devirtualization in: " << *C
+          << "\n");
 
       // Move over the new call counts in preparation for iterating.
       CallCounts = std::move(NewCallCounts);
@@ -824,7 +830,7 @@
   int MaxIterations;
 };
 
-/// \brief A function to deduce a function pass type and wrap it in the
+/// A function to deduce a function pass type and wrap it in the
 /// templated adaptor.
 template <typename PassT>
 DevirtSCCRepeatedPass<PassT> createDevirtSCCRepeatedPass(PassT Pass,
diff --git a/linux-x64/clang/include/llvm/Analysis/CallGraph.h b/linux-x64/clang/include/llvm/Analysis/CallGraph.h
index 8efc85f..f109cf2 100644
--- a/linux-x64/clang/include/llvm/Analysis/CallGraph.h
+++ b/linux-x64/clang/include/llvm/Analysis/CallGraph.h
@@ -66,7 +66,7 @@
 class Module;
 class raw_ostream;
 
-/// \brief The basic data container for the call graph of a \c Module of IR.
+/// The basic data container for the call graph of a \c Module of IR.
 ///
 /// This class exposes both the interface to the call graph for a module of IR.
 ///
@@ -77,25 +77,25 @@
   using FunctionMapTy =
       std::map<const Function *, std::unique_ptr<CallGraphNode>>;
 
-  /// \brief A map from \c Function* to \c CallGraphNode*.
+  /// A map from \c Function* to \c CallGraphNode*.
   FunctionMapTy FunctionMap;
 
-  /// \brief This node has edges to all external functions and those internal
+  /// This node has edges to all external functions and those internal
   /// functions that have their address taken.
   CallGraphNode *ExternalCallingNode;
 
-  /// \brief This node has edges to it from all functions making indirect calls
+  /// This node has edges to it from all functions making indirect calls
   /// or calling an external function.
   std::unique_ptr<CallGraphNode> CallsExternalNode;
 
-  /// \brief Replace the function represented by this node by another.
+  /// Replace the function represented by this node by another.
   ///
   /// This does not rescan the body of the function, so it is suitable when
   /// splicing the body of one function to another while also updating all
   /// callers from the old function to the new.
   void spliceFunction(const Function *From, const Function *To);
 
-  /// \brief Add a function to the call graph, and link the node to all of the
+  /// Add a function to the call graph, and link the node to all of the
   /// functions that it calls.
   void addToCallGraph(Function *F);
 
@@ -110,7 +110,7 @@
   using iterator = FunctionMapTy::iterator;
   using const_iterator = FunctionMapTy::const_iterator;
 
-  /// \brief Returns the module the call graph corresponds to.
+  /// Returns the module the call graph corresponds to.
   Module &getModule() const { return M; }
 
   inline iterator begin() { return FunctionMap.begin(); }
@@ -118,21 +118,21 @@
   inline const_iterator begin() const { return FunctionMap.begin(); }
   inline const_iterator end() const { return FunctionMap.end(); }
 
-  /// \brief Returns the call graph node for the provided function.
+  /// Returns the call graph node for the provided function.
   inline const CallGraphNode *operator[](const Function *F) const {
     const_iterator I = FunctionMap.find(F);
     assert(I != FunctionMap.end() && "Function not in callgraph!");
     return I->second.get();
   }
 
-  /// \brief Returns the call graph node for the provided function.
+  /// Returns the call graph node for the provided function.
   inline CallGraphNode *operator[](const Function *F) {
     const_iterator I = FunctionMap.find(F);
     assert(I != FunctionMap.end() && "Function not in callgraph!");
     return I->second.get();
   }
 
-  /// \brief Returns the \c CallGraphNode which is used to represent
+  /// Returns the \c CallGraphNode which is used to represent
   /// undetermined calls into the callgraph.
   CallGraphNode *getExternalCallingNode() const { return ExternalCallingNode; }
 
@@ -145,7 +145,7 @@
   // modified.
   //
 
-  /// \brief Unlink the function from this module, returning it.
+  /// Unlink the function from this module, returning it.
   ///
   /// Because this removes the function from the module, the call graph node is
   /// destroyed.  This is only valid if the function does not call any other
@@ -153,25 +153,25 @@
   /// this is to dropAllReferences before calling this.
   Function *removeFunctionFromModule(CallGraphNode *CGN);
 
-  /// \brief Similar to operator[], but this will insert a new CallGraphNode for
+  /// Similar to operator[], but this will insert a new CallGraphNode for
   /// \c F if one does not already exist.
   CallGraphNode *getOrInsertFunction(const Function *F);
 };
 
-/// \brief A node in the call graph for a module.
+/// A node in the call graph for a module.
 ///
 /// Typically represents a function in the call graph. There are also special
 /// "null" nodes used to represent theoretical entries in the call graph.
 class CallGraphNode {
 public:
-  /// \brief A pair of the calling instruction (a call or invoke)
+  /// A pair of the calling instruction (a call or invoke)
   /// and the call graph node being called.
   using CallRecord = std::pair<WeakTrackingVH, CallGraphNode *>;
 
 public:
   using CalledFunctionsVector = std::vector<CallRecord>;
 
-  /// \brief Creates a node for the specified function.
+  /// Creates a node for the specified function.
   inline CallGraphNode(Function *F) : F(F) {}
 
   CallGraphNode(const CallGraphNode &) = delete;
@@ -184,7 +184,7 @@
   using iterator = std::vector<CallRecord>::iterator;
   using const_iterator = std::vector<CallRecord>::const_iterator;
 
-  /// \brief Returns the function that this call graph node represents.
+  /// Returns the function that this call graph node represents.
   Function *getFunction() const { return F; }
 
   inline iterator begin() { return CalledFunctions.begin(); }
@@ -194,17 +194,17 @@
   inline bool empty() const { return CalledFunctions.empty(); }
   inline unsigned size() const { return (unsigned)CalledFunctions.size(); }
 
-  /// \brief Returns the number of other CallGraphNodes in this CallGraph that
+  /// Returns the number of other CallGraphNodes in this CallGraph that
   /// reference this node in their callee list.
   unsigned getNumReferences() const { return NumReferences; }
 
-  /// \brief Returns the i'th called function.
+  /// Returns the i'th called function.
   CallGraphNode *operator[](unsigned i) const {
     assert(i < CalledFunctions.size() && "Invalid index");
     return CalledFunctions[i].second;
   }
 
-  /// \brief Print out this call graph node.
+  /// Print out this call graph node.
   void dump() const;
   void print(raw_ostream &OS) const;
 
@@ -213,7 +213,7 @@
   // modified
   //
 
-  /// \brief Removes all edges from this CallGraphNode to any functions it
+  /// Removes all edges from this CallGraphNode to any functions it
   /// calls.
   void removeAllCalledFunctions() {
     while (!CalledFunctions.empty()) {
@@ -222,14 +222,14 @@
     }
   }
 
-  /// \brief Moves all the callee information from N to this node.
+  /// Moves all the callee information from N to this node.
   void stealCalledFunctionsFrom(CallGraphNode *N) {
     assert(CalledFunctions.empty() &&
            "Cannot steal callsite information if I already have some");
     std::swap(CalledFunctions, N->CalledFunctions);
   }
 
-  /// \brief Adds a function to the list of functions called by this one.
+  /// Adds a function to the list of functions called by this one.
   void addCalledFunction(CallSite CS, CallGraphNode *M) {
     assert(!CS.getInstruction() || !CS.getCalledFunction() ||
            !CS.getCalledFunction()->isIntrinsic() ||
@@ -244,23 +244,23 @@
     CalledFunctions.pop_back();
   }
 
-  /// \brief Removes the edge in the node for the specified call site.
+  /// Removes the edge in the node for the specified call site.
   ///
   /// Note that this method takes linear time, so it should be used sparingly.
   void removeCallEdgeFor(CallSite CS);
 
-  /// \brief Removes all call edges from this node to the specified callee
+  /// Removes all call edges from this node to the specified callee
   /// function.
   ///
   /// This takes more time to execute than removeCallEdgeTo, so it should not
   /// be used unless necessary.
   void removeAnyCallEdgeTo(CallGraphNode *Callee);
 
-  /// \brief Removes one edge associated with a null callsite from this node to
+  /// Removes one edge associated with a null callsite from this node to
   /// the specified callee function.
   void removeOneAbstractEdgeTo(CallGraphNode *Callee);
 
-  /// \brief Replaces the edge in the node for the specified call site with a
+  /// Replaces the edge in the node for the specified call site with a
   /// new one.
   ///
   /// Note that this method takes linear time, so it should be used sparingly.
@@ -273,18 +273,18 @@
 
   std::vector<CallRecord> CalledFunctions;
 
-  /// \brief The number of times that this CallGraphNode occurs in the
+  /// The number of times that this CallGraphNode occurs in the
   /// CalledFunctions array of this or other CallGraphNodes.
   unsigned NumReferences = 0;
 
   void DropRef() { --NumReferences; }
   void AddRef() { ++NumReferences; }
 
-  /// \brief A special function that should only be used by the CallGraph class.
+  /// A special function that should only be used by the CallGraph class.
   void allReferencesDropped() { NumReferences = 0; }
 };
 
-/// \brief An analysis pass to compute the \c CallGraph for a \c Module.
+/// An analysis pass to compute the \c CallGraph for a \c Module.
 ///
 /// This class implements the concept of an analysis pass used by the \c
 /// ModuleAnalysisManager to run an analysis over a module and cache the
@@ -295,16 +295,16 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief A formulaic type to inform clients of the result type.
+  /// A formulaic type to inform clients of the result type.
   using Result = CallGraph;
 
-  /// \brief Compute the \c CallGraph for the module \c M.
+  /// Compute the \c CallGraph for the module \c M.
   ///
   /// The real work here is done in the \c CallGraph constructor.
   CallGraph run(Module &M, ModuleAnalysisManager &) { return CallGraph(M); }
 };
 
-/// \brief Printer pass for the \c CallGraphAnalysis results.
+/// Printer pass for the \c CallGraphAnalysis results.
 class CallGraphPrinterPass : public PassInfoMixin<CallGraphPrinterPass> {
   raw_ostream &OS;
 
@@ -314,7 +314,7 @@
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
 };
 
-/// \brief The \c ModulePass which wraps up a \c CallGraph and the logic to
+/// The \c ModulePass which wraps up a \c CallGraph and the logic to
 /// build it.
 ///
 /// This class exposes both the interface to the call graph container and the
@@ -330,7 +330,7 @@
   CallGraphWrapperPass();
   ~CallGraphWrapperPass() override;
 
-  /// \brief The internal \c CallGraph around which the rest of this interface
+  /// The internal \c CallGraph around which the rest of this interface
   /// is wrapped.
   const CallGraph &getCallGraph() const { return *G; }
   CallGraph &getCallGraph() { return *G; }
@@ -338,7 +338,7 @@
   using iterator = CallGraph::iterator;
   using const_iterator = CallGraph::const_iterator;
 
-  /// \brief Returns the module the call graph corresponds to.
+  /// Returns the module the call graph corresponds to.
   Module &getModule() const { return G->getModule(); }
 
   inline iterator begin() { return G->begin(); }
@@ -346,15 +346,15 @@
   inline const_iterator begin() const { return G->begin(); }
   inline const_iterator end() const { return G->end(); }
 
-  /// \brief Returns the call graph node for the provided function.
+  /// Returns the call graph node for the provided function.
   inline const CallGraphNode *operator[](const Function *F) const {
     return (*G)[F];
   }
 
-  /// \brief Returns the call graph node for the provided function.
+  /// Returns the call graph node for the provided function.
   inline CallGraphNode *operator[](const Function *F) { return (*G)[F]; }
 
-  /// \brief Returns the \c CallGraphNode which is used to represent
+  /// Returns the \c CallGraphNode which is used to represent
   /// undetermined calls into the callgraph.
   CallGraphNode *getExternalCallingNode() const {
     return G->getExternalCallingNode();
@@ -369,7 +369,7 @@
   // modified.
   //
 
-  /// \brief Unlink the function from this module, returning it.
+  /// Unlink the function from this module, returning it.
   ///
   /// Because this removes the function from the module, the call graph node is
   /// destroyed.  This is only valid if the function does not call any other
@@ -379,7 +379,7 @@
     return G->removeFunctionFromModule(CGN);
   }
 
-  /// \brief Similar to operator[], but this will insert a new CallGraphNode for
+  /// Similar to operator[], but this will insert a new CallGraphNode for
   /// \c F if one does not already exist.
   CallGraphNode *getOrInsertFunction(const Function *F) {
     return G->getOrInsertFunction(F);
diff --git a/linux-x64/clang/include/llvm/Analysis/CaptureTracking.h b/linux-x64/clang/include/llvm/Analysis/CaptureTracking.h
index 8d2c095..7a869a5 100644
--- a/linux-x64/clang/include/llvm/Analysis/CaptureTracking.h
+++ b/linux-x64/clang/include/llvm/Analysis/CaptureTracking.h
@@ -46,7 +46,7 @@
   /// to speed up capture-tracker queries.
   bool PointerMayBeCapturedBefore(const Value *V, bool ReturnCaptures,
                                   bool StoreCaptures, const Instruction *I,
-                                  DominatorTree *DT, bool IncludeI = false,
+                                  const DominatorTree *DT, bool IncludeI = false,
                                   OrderedBasicBlock *OBB = nullptr);
 
   /// This callback is used in conjunction with PointerMayBeCaptured. In
diff --git a/linux-x64/clang/include/llvm/Analysis/CodeMetrics.h b/linux-x64/clang/include/llvm/Analysis/CodeMetrics.h
index 9e861ac..7529022 100644
--- a/linux-x64/clang/include/llvm/Analysis/CodeMetrics.h
+++ b/linux-x64/clang/include/llvm/Analysis/CodeMetrics.h
@@ -29,7 +29,7 @@
 class TargetTransformInfo;
 class Value;
 
-/// \brief Check whether a call will lower to something small.
+/// Check whether a call will lower to something small.
 ///
 /// This tests checks whether this callsite will lower to something
 /// significantly cheaper than a traditional call, often a single
@@ -37,64 +37,64 @@
 /// return true, so will this function.
 bool callIsSmall(ImmutableCallSite CS);
 
-/// \brief Utility to calculate the size and a few similar metrics for a set
+/// Utility to calculate the size and a few similar metrics for a set
 /// of basic blocks.
 struct CodeMetrics {
-  /// \brief True if this function contains a call to setjmp or other functions
+  /// True if this function contains a call to setjmp or other functions
   /// with attribute "returns twice" without having the attribute itself.
   bool exposesReturnsTwice = false;
 
-  /// \brief True if this function calls itself.
+  /// True if this function calls itself.
   bool isRecursive = false;
 
-  /// \brief True if this function cannot be duplicated.
+  /// True if this function cannot be duplicated.
   ///
   /// True if this function contains one or more indirect branches, or it contains
   /// one or more 'noduplicate' instructions.
   bool notDuplicatable = false;
 
-  /// \brief True if this function contains a call to a convergent function.
+  /// True if this function contains a call to a convergent function.
   bool convergent = false;
 
-  /// \brief True if this function calls alloca (in the C sense).
+  /// True if this function calls alloca (in the C sense).
   bool usesDynamicAlloca = false;
 
-  /// \brief Number of instructions in the analyzed blocks.
+  /// Number of instructions in the analyzed blocks.
   unsigned NumInsts = false;
 
-  /// \brief Number of analyzed blocks.
+  /// Number of analyzed blocks.
   unsigned NumBlocks = false;
 
-  /// \brief Keeps track of basic block code size estimates.
+  /// Keeps track of basic block code size estimates.
   DenseMap<const BasicBlock *, unsigned> NumBBInsts;
 
-  /// \brief Keep track of the number of calls to 'big' functions.
+  /// Keep track of the number of calls to 'big' functions.
   unsigned NumCalls = false;
 
-  /// \brief The number of calls to internal functions with a single caller.
+  /// The number of calls to internal functions with a single caller.
   ///
   /// These are likely targets for future inlining, likely exposed by
   /// interleaved devirtualization.
   unsigned NumInlineCandidates = 0;
 
-  /// \brief How many instructions produce vector values.
+  /// How many instructions produce vector values.
   ///
   /// The inliner is more aggressive with inlining vector kernels.
   unsigned NumVectorInsts = 0;
 
-  /// \brief How many 'ret' instructions the blocks contain.
+  /// How many 'ret' instructions the blocks contain.
   unsigned NumRets = 0;
 
-  /// \brief Add information about a block to the current state.
+  /// Add information about a block to the current state.
   void analyzeBasicBlock(const BasicBlock *BB, const TargetTransformInfo &TTI,
                          const SmallPtrSetImpl<const Value*> &EphValues);
 
-  /// \brief Collect a loop's ephemeral values (those used only by an assume
+  /// Collect a loop's ephemeral values (those used only by an assume
   /// or similar intrinsics in the loop).
   static void collectEphemeralValues(const Loop *L, AssumptionCache *AC,
                                      SmallPtrSetImpl<const Value *> &EphValues);
 
-  /// \brief Collect a functions's ephemeral values (those used only by an
+  /// Collect a functions's ephemeral values (those used only by an
   /// assume or similar intrinsics in the function).
   static void collectEphemeralValues(const Function *L, AssumptionCache *AC,
                                      SmallPtrSetImpl<const Value *> &EphValues);
diff --git a/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h b/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
index 354b557..192c1ab 100644
--- a/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
+++ b/linux-x64/clang/include/llvm/Analysis/ConstantFolding.h
@@ -73,19 +73,19 @@
                                 Constant *RHS, const DataLayout &DL,
                                 const TargetLibraryInfo *TLI = nullptr);
 
-/// \brief Attempt to constant fold a binary operation with the specified
+/// Attempt to constant fold a binary operation with the specified
 /// operands.  If it fails, it returns a constant expression of the specified
 /// operands.
 Constant *ConstantFoldBinaryOpOperands(unsigned Opcode, Constant *LHS,
                                        Constant *RHS, const DataLayout &DL);
 
-/// \brief Attempt to constant fold a select instruction with the specified
+/// Attempt to constant fold a select instruction with the specified
 /// operands. The constant result is returned if successful; if not, null is
 /// returned.
 Constant *ConstantFoldSelectInstruction(Constant *Cond, Constant *V1,
                                         Constant *V2);
 
-/// \brief Attempt to constant fold a cast with the specified operand.  If it
+/// Attempt to constant fold a cast with the specified operand.  If it
 /// fails, it returns a constant expression of the specified operand.
 Constant *ConstantFoldCastOperand(unsigned Opcode, Constant *C, Type *DestTy,
                                   const DataLayout &DL);
@@ -96,25 +96,25 @@
 Constant *ConstantFoldInsertValueInstruction(Constant *Agg, Constant *Val,
                                              ArrayRef<unsigned> Idxs);
 
-/// \brief Attempt to constant fold an extractvalue instruction with the
+/// Attempt to constant fold an extractvalue instruction with the
 /// specified operands and indices.  The constant result is returned if
 /// successful; if not, null is returned.
 Constant *ConstantFoldExtractValueInstruction(Constant *Agg,
                                               ArrayRef<unsigned> Idxs);
 
-/// \brief Attempt to constant fold an insertelement instruction with the
+/// Attempt to constant fold an insertelement instruction with the
 /// specified operands and indices.  The constant result is returned if
 /// successful; if not, null is returned.
 Constant *ConstantFoldInsertElementInstruction(Constant *Val,
                                                Constant *Elt,
                                                Constant *Idx);
 
-/// \brief Attempt to constant fold an extractelement instruction with the
+/// Attempt to constant fold an extractelement instruction with the
 /// specified operands and indices.  The constant result is returned if
 /// successful; if not, null is returned.
 Constant *ConstantFoldExtractElementInstruction(Constant *Val, Constant *Idx);
 
-/// \brief Attempt to constant fold a shufflevector instruction with the
+/// Attempt to constant fold a shufflevector instruction with the
 /// specified operands and indices.  The constant result is returned if
 /// successful; if not, null is returned.
 Constant *ConstantFoldShuffleVectorInstruction(Constant *V1, Constant *V2,
@@ -153,7 +153,7 @@
 Constant *ConstantFoldLoadThroughBitcast(Constant *C, Type *DestTy,
                                          const DataLayout &DL);
 
-/// \brief Check whether the given call has no side-effects.
+/// Check whether the given call has no side-effects.
 /// Specifically checks for math routimes which sometimes set errno.
 bool isMathLibCallNoop(CallSite CS, const TargetLibraryInfo *TLI);
 }
diff --git a/linux-x64/clang/include/llvm/Analysis/DOTGraphTraitsPass.h b/linux-x64/clang/include/llvm/Analysis/DOTGraphTraitsPass.h
index 39f9c39..b7447a0 100644
--- a/linux-x64/clang/include/llvm/Analysis/DOTGraphTraitsPass.h
+++ b/linux-x64/clang/include/llvm/Analysis/DOTGraphTraitsPass.h
@@ -20,7 +20,7 @@
 
 namespace llvm {
 
-/// \brief Default traits class for extracting a graph from an analysis pass.
+/// Default traits class for extracting a graph from an analysis pass.
 ///
 /// This assumes that 'GraphT' is 'AnalysisT *' and so just passes it through.
 template <typename AnalysisT, typename GraphT = AnalysisT *>
@@ -36,7 +36,7 @@
   DOTGraphTraitsViewer(StringRef GraphName, char &ID)
       : FunctionPass(ID), Name(GraphName) {}
 
-  /// @brief Return true if this function should be processed.
+  /// Return true if this function should be processed.
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be viewed.
@@ -78,7 +78,7 @@
   DOTGraphTraitsPrinter(StringRef GraphName, char &ID)
       : FunctionPass(ID), Name(GraphName) {}
 
-  /// @brief Return true if this function should be processed.
+  /// Return true if this function should be processed.
   ///
   /// An implementation of this class my override this function to indicate that
   /// only certain functions should be printed.
diff --git a/linux-x64/clang/include/llvm/Analysis/DemandedBits.h b/linux-x64/clang/include/llvm/Analysis/DemandedBits.h
index ab86682..d438460 100644
--- a/linux-x64/clang/include/llvm/Analysis/DemandedBits.h
+++ b/linux-x64/clang/include/llvm/Analysis/DemandedBits.h
@@ -96,15 +96,15 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result type for this analysis pass.
+  /// Provide the result type for this analysis pass.
   using Result = DemandedBits;
 
-  /// \brief Run the analysis pass over a function and produce demanded bits
+  /// Run the analysis pass over a function and produce demanded bits
   /// information.
   DemandedBits run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for DemandedBits
+/// Printer pass for DemandedBits
 class DemandedBitsPrinterPass : public PassInfoMixin<DemandedBitsPrinterPass> {
   raw_ostream &OS;
 
diff --git a/linux-x64/clang/include/llvm/Analysis/DependenceAnalysis.h b/linux-x64/clang/include/llvm/Analysis/DependenceAnalysis.h
index 90f33b8..c8ec737 100644
--- a/linux-x64/clang/include/llvm/Analysis/DependenceAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/DependenceAnalysis.h
@@ -557,6 +557,17 @@
                           const SCEV *X,
                           const SCEV *Y) const;
 
+    /// isKnownLessThan - Compare to see if S is less than Size
+    /// Another wrapper for isKnownNegative(S - max(Size, 1)) with some extra
+    /// checking if S is an AddRec and we can prove lessthan using the loop
+    /// bounds.
+    bool isKnownLessThan(const SCEV *S, const SCEV *Size) const;
+
+    /// isKnownNonNegative - Compare to see if S is known not to be negative
+    /// Uses the fact that S comes from Ptr, which may be an inbound GEP,
+    /// Proving there is no wrapping going on.
+    bool isKnownNonNegative(const SCEV *S, const Value *Ptr) const;
+
     /// collectUpperBound - All subscripts are the same type (on my machine,
     /// an i64). The loop bound may be a smaller type. collectUpperBound
     /// find the bound, if available, and zero extends it to the Type T.
@@ -914,7 +925,7 @@
                         SmallVectorImpl<Subscript> &Pair);
   }; // class DependenceInfo
 
-  /// \brief AnalysisPass to compute dependence information in a function
+  /// AnalysisPass to compute dependence information in a function
   class DependenceAnalysis : public AnalysisInfoMixin<DependenceAnalysis> {
   public:
     typedef DependenceInfo Result;
@@ -925,7 +936,7 @@
     friend struct AnalysisInfoMixin<DependenceAnalysis>;
   }; // class DependenceAnalysis
 
-  /// \brief Legacy pass manager pass to access dependence information
+  /// Legacy pass manager pass to access dependence information
   class DependenceAnalysisWrapperPass : public FunctionPass {
   public:
     static char ID; // Class identification, replacement for typeinfo
diff --git a/linux-x64/clang/include/llvm/Analysis/DivergenceAnalysis.h b/linux-x64/clang/include/llvm/Analysis/DivergenceAnalysis.h
index dd3c68e..328c864 100644
--- a/linux-x64/clang/include/llvm/Analysis/DivergenceAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/DivergenceAnalysis.h
@@ -37,12 +37,21 @@
   // Print all divergent branches in the function.
   void print(raw_ostream &OS, const Module *) const override;
 
-  // Returns true if V is divergent.
+  // Returns true if V is divergent at its definition.
+  //
+  // Even if this function returns false, V may still be divergent when used
+  // in a different basic block.
   bool isDivergent(const Value *V) const { return DivergentValues.count(V); }
 
   // Returns true if V is uniform/non-divergent.
+  //
+  // Even if this function returns true, V may still be divergent when used
+  // in a different basic block.
   bool isUniform(const Value *V) const { return !isDivergent(V); }
 
+  // Keep the analysis results uptodate by removing an erased value.
+  void removeValue(const Value *V) { DivergentValues.erase(V); }
+
 private:
   // Stores all divergent values.
   DenseSet<const Value *> DivergentValues;
diff --git a/linux-x64/clang/include/llvm/Analysis/DominanceFrontier.h b/linux-x64/clang/include/llvm/Analysis/DominanceFrontier.h
index a304dff..d94c420 100644
--- a/linux-x64/clang/include/llvm/Analysis/DominanceFrontier.h
+++ b/linux-x64/clang/include/llvm/Analysis/DominanceFrontier.h
@@ -19,6 +19,7 @@
 #define LLVM_ANALYSIS_DOMINANCEFRONTIER_H
 
 #include "llvm/ADT/GraphTraits.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/Pass.h"
 #include "llvm/Support/GenericDomTree.h"
@@ -179,7 +180,7 @@
 extern template class DominanceFrontierBase<BasicBlock, true>;
 extern template class ForwardDominanceFrontierBase<BasicBlock>;
 
-/// \brief Analysis pass which computes a \c DominanceFrontier.
+/// Analysis pass which computes a \c DominanceFrontier.
 class DominanceFrontierAnalysis
     : public AnalysisInfoMixin<DominanceFrontierAnalysis> {
   friend AnalysisInfoMixin<DominanceFrontierAnalysis>;
@@ -187,14 +188,14 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result type for this analysis pass.
+  /// Provide the result type for this analysis pass.
   using Result = DominanceFrontier;
 
-  /// \brief Run the analysis pass over a function and produce a dominator tree.
+  /// Run the analysis pass over a function and produce a dominator tree.
   DominanceFrontier run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for the \c DominanceFrontier.
+/// Printer pass for the \c DominanceFrontier.
 class DominanceFrontierPrinterPass
     : public PassInfoMixin<DominanceFrontierPrinterPass> {
   raw_ostream &OS;
diff --git a/linux-x64/clang/include/llvm/Analysis/DominanceFrontierImpl.h b/linux-x64/clang/include/llvm/Analysis/DominanceFrontierImpl.h
index dffb2e0..99224c0 100644
--- a/linux-x64/clang/include/llvm/Analysis/DominanceFrontierImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/DominanceFrontierImpl.h
@@ -21,6 +21,7 @@
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/Analysis/DominanceFrontier.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/GenericDomTree.h"
 #include "llvm/Support/raw_ostream.h"
diff --git a/linux-x64/clang/include/llvm/Analysis/EHPersonalities.h b/linux-x64/clang/include/llvm/Analysis/EHPersonalities.h
index 2c45ab4..fe0e65b 100644
--- a/linux-x64/clang/include/llvm/Analysis/EHPersonalities.h
+++ b/linux-x64/clang/include/llvm/Analysis/EHPersonalities.h
@@ -32,10 +32,11 @@
   MSVC_Win64SEH,
   MSVC_CXX,
   CoreCLR,
-  Rust
+  Rust,
+  Wasm_CXX
 };
 
-/// \brief See if the given exception handling personality function is one
+/// See if the given exception handling personality function is one
 /// that we understand.  If so, return a description of it; otherwise return
 /// Unknown.
 EHPersonality classifyEHPersonality(const Value *Pers);
@@ -44,7 +45,7 @@
 
 EHPersonality getDefaultEHPersonality(const Triple &T);
 
-/// \brief Returns true if this personality function catches asynchronous
+/// Returns true if this personality function catches asynchronous
 /// exceptions.
 inline bool isAsynchronousEHPersonality(EHPersonality Pers) {
   // The two SEH personality functions can catch asynch exceptions. We assume
@@ -59,7 +60,7 @@
   llvm_unreachable("invalid enum");
 }
 
-/// \brief Returns true if this is a personality function that invokes
+/// Returns true if this is a personality function that invokes
 /// handler funclets (which must return to it).
 inline bool isFuncletEHPersonality(EHPersonality Pers) {
   switch (Pers) {
@@ -74,7 +75,23 @@
   llvm_unreachable("invalid enum");
 }
 
-/// \brief Return true if this personality may be safely removed if there
+/// Returns true if this personality uses scope-style EH IR instructions:
+/// catchswitch, catchpad/ret, and cleanuppad/ret.
+inline bool isScopedEHPersonality(EHPersonality Pers) {
+  switch (Pers) {
+  case EHPersonality::MSVC_CXX:
+  case EHPersonality::MSVC_X86SEH:
+  case EHPersonality::MSVC_Win64SEH:
+  case EHPersonality::CoreCLR:
+  case EHPersonality::Wasm_CXX:
+    return true;
+  default:
+    return false;
+  }
+  llvm_unreachable("invalid enum");
+}
+
+/// Return true if this personality may be safely removed if there
 /// are no invoke instructions remaining in the current function.
 inline bool isNoOpWithoutInvoke(EHPersonality Pers) {
   switch (Pers) {
@@ -91,7 +108,7 @@
 
 typedef TinyPtrVector<BasicBlock *> ColorVector;
 
-/// \brief If an EH funclet personality is in use (see isFuncletEHPersonality),
+/// If an EH funclet personality is in use (see isFuncletEHPersonality),
 /// this will recompute which blocks are in which funclet. It is possible that
 /// some blocks are in multiple funclets. Consider this analysis to be
 /// expensive.
diff --git a/linux-x64/clang/include/llvm/Analysis/IndirectCallPromotionAnalysis.h b/linux-x64/clang/include/llvm/Analysis/IndirectCallPromotionAnalysis.h
index 8b1c101..be3a284 100644
--- a/linux-x64/clang/include/llvm/Analysis/IndirectCallPromotionAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/IndirectCallPromotionAnalysis.h
@@ -48,7 +48,7 @@
 public:
   ICallPromotionAnalysis();
 
-  /// \brief Returns reference to array of InstrProfValueData for the given
+  /// Returns reference to array of InstrProfValueData for the given
   /// instruction \p I.
   ///
   /// The \p NumVals, \p TotalCount and \p NumCandidates
diff --git a/linux-x64/clang/include/llvm/Analysis/InlineCost.h b/linux-x64/clang/include/llvm/Analysis/InlineCost.h
index 138d3ac..529fb75 100644
--- a/linux-x64/clang/include/llvm/Analysis/InlineCost.h
+++ b/linux-x64/clang/include/llvm/Analysis/InlineCost.h
@@ -52,7 +52,7 @@
 const unsigned TotalAllocaSizeRecursiveCaller = 1024;
 }
 
-/// \brief Represents the cost of inlining a function.
+/// Represents the cost of inlining a function.
 ///
 /// This supports special values for functions which should "always" or
 /// "never" be inlined. Otherwise, the cost represents a unitless amount;
@@ -68,14 +68,21 @@
     NeverInlineCost = INT_MAX
   };
 
-  /// \brief The estimated cost of inlining this callsite.
+  /// The estimated cost of inlining this callsite.
   const int Cost;
 
-  /// \brief The adjusted threshold against which this cost was computed.
+  /// The adjusted threshold against which this cost was computed.
   const int Threshold;
 
+  /// Must be set for Always and Never instances.
+  const char *Reason = nullptr;
+
   // Trivial constructor, interesting logic in the factory functions below.
-  InlineCost(int Cost, int Threshold) : Cost(Cost), Threshold(Threshold) {}
+  InlineCost(int Cost, int Threshold, const char *Reason = nullptr)
+      : Cost(Cost), Threshold(Threshold), Reason(Reason) {
+    assert((isVariable() || Reason) &&
+           "Reason must be provided for Never or Always");
+  }
 
 public:
   static InlineCost get(int Cost, int Threshold) {
@@ -83,14 +90,14 @@
     assert(Cost < NeverInlineCost && "Cost crosses sentinel value");
     return InlineCost(Cost, Threshold);
   }
-  static InlineCost getAlways() {
-    return InlineCost(AlwaysInlineCost, 0);
+  static InlineCost getAlways(const char *Reason) {
+    return InlineCost(AlwaysInlineCost, 0, Reason);
   }
-  static InlineCost getNever() {
-    return InlineCost(NeverInlineCost, 0);
+  static InlineCost getNever(const char *Reason) {
+    return InlineCost(NeverInlineCost, 0, Reason);
   }
 
-  /// \brief Test whether the inline cost is low enough for inlining.
+  /// Test whether the inline cost is low enough for inlining.
   explicit operator bool() const {
     return Cost < Threshold;
   }
@@ -99,25 +106,43 @@
   bool isNever() const { return Cost == NeverInlineCost; }
   bool isVariable() const { return !isAlways() && !isNever(); }
 
-  /// \brief Get the inline cost estimate.
+  /// Get the inline cost estimate.
   /// It is an error to call this on an "always" or "never" InlineCost.
   int getCost() const {
     assert(isVariable() && "Invalid access of InlineCost");
     return Cost;
   }
 
-  /// \brief Get the threshold against which the cost was computed
+  /// Get the threshold against which the cost was computed
   int getThreshold() const {
     assert(isVariable() && "Invalid access of InlineCost");
     return Threshold;
   }
 
-  /// \brief Get the cost delta from the threshold for inlining.
+  /// Get the reason of Always or Never.
+  const char *getReason() const {
+    assert((Reason || isVariable()) &&
+           "InlineCost reason must be set for Always or Never");
+    return Reason;
+  }
+
+  /// Get the cost delta from the threshold for inlining.
   /// Only valid if the cost is of the variable kind. Returns a negative
   /// value if the cost is too high to inline.
   int getCostDelta() const { return Threshold - getCost(); }
 };
 
+/// InlineResult is basically true or false. For false results the message
+/// describes a reason why it is decided not to inline.
+struct InlineResult {
+  const char *message = nullptr;
+  InlineResult(bool result, const char *message = nullptr)
+      : message(result ? nullptr : (message ? message : "cost > threshold")) {}
+  InlineResult(const char *message = nullptr) : message(message) {}
+  operator bool() const { return !message; }
+  operator const char *() const { return message; }
+};
+
 /// Thresholds to tune inline cost analysis. The inline cost analysis decides
 /// the condition to apply a threshold and applies it. Otherwise,
 /// DefaultThreshold is used. If a threshold is Optional, it is applied only
@@ -178,7 +203,7 @@
 /// and the call/return instruction.
 int getCallsiteCost(CallSite CS, const DataLayout &DL);
 
-/// \brief Get an InlineCost object representing the cost of inlining this
+/// Get an InlineCost object representing the cost of inlining this
 /// callsite.
 ///
 /// Note that a default threshold is passed into this function. This threshold
@@ -195,7 +220,7 @@
     Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
     ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE = nullptr);
 
-/// \brief Get an InlineCost with the callee explicitly specified.
+/// Get an InlineCost with the callee explicitly specified.
 /// This allows you to calculate the cost of inlining a function via a
 /// pointer. This behaves exactly as the version with no explicit callee
 /// parameter in all other respects.
@@ -207,7 +232,7 @@
               Optional<function_ref<BlockFrequencyInfo &(Function &)>> GetBFI,
               ProfileSummaryInfo *PSI, OptimizationRemarkEmitter *ORE);
 
-/// \brief Minimal filter to detect invalid constructs for inlining.
+/// Minimal filter to detect invalid constructs for inlining.
 bool isInlineViable(Function &Callee);
 }
 
diff --git a/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h b/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
index edaf4e9..6b19507 100644
--- a/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
+++ b/linux-x64/clang/include/llvm/Analysis/IteratedDominanceFrontier.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 //
-/// \brief Compute iterated dominance frontiers using a linear time algorithm.
+/// Compute iterated dominance frontiers using a linear time algorithm.
 ///
 /// The algorithm used here is based on:
 ///
@@ -32,7 +32,7 @@
 
 namespace llvm {
 
-/// \brief Determine the iterated dominance frontier, given a set of defining
+/// Determine the iterated dominance frontier, given a set of defining
 /// blocks, and optionally, a set of live-in blocks.
 ///
 /// In turn, the results can be used to place phi nodes.
@@ -48,7 +48,7 @@
   IDFCalculator(DominatorTreeBase<BasicBlock, IsPostDom> &DT)
       : DT(DT), useLiveIn(false) {}
 
-  /// \brief Give the IDF calculator the set of blocks in which the value is
+  /// Give the IDF calculator the set of blocks in which the value is
   /// defined.  This is equivalent to the set of starting blocks it should be
   /// calculating the IDF for (though later gets pruned based on liveness).
   ///
@@ -57,7 +57,7 @@
     DefBlocks = &Blocks;
   }
 
-  /// \brief Give the IDF calculator the set of blocks in which the value is
+  /// Give the IDF calculator the set of blocks in which the value is
   /// live on entry to the block.   This is used to prune the IDF calculation to
   /// not include blocks where any phi insertion would be dead.
   ///
@@ -68,14 +68,14 @@
     useLiveIn = true;
   }
 
-  /// \brief Reset the live-in block set to be empty, and tell the IDF
+  /// Reset the live-in block set to be empty, and tell the IDF
   /// calculator to not use liveness anymore.
   void resetLiveInBlocks() {
     LiveInBlocks = nullptr;
     useLiveIn = false;
   }
 
-  /// \brief Calculate iterated dominance frontiers
+  /// Calculate iterated dominance frontiers
   ///
   /// This uses the linear-time phi algorithm based on DJ-graphs mentioned in
   /// the file-level comment.  It performs DF->IDF pruning using the live-in
diff --git a/linux-x64/clang/include/llvm/Analysis/LazyBlockFrequencyInfo.h b/linux-x64/clang/include/llvm/Analysis/LazyBlockFrequencyInfo.h
index 71ce084..d1afb63 100644
--- a/linux-x64/clang/include/llvm/Analysis/LazyBlockFrequencyInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/LazyBlockFrequencyInfo.h
@@ -75,7 +75,7 @@
   const LoopInfoT *LI;
 };
 
-/// \brief This is an alternative analysis pass to
+/// This is an alternative analysis pass to
 /// BlockFrequencyInfoWrapperPass.  The difference is that with this pass the
 /// block frequencies are not computed when the analysis pass is executed but
 /// rather when the BFI result is explicitly requested by the analysis client.
@@ -109,10 +109,10 @@
 
   LazyBlockFrequencyInfoPass();
 
-  /// \brief Compute and return the block frequencies.
+  /// Compute and return the block frequencies.
   BlockFrequencyInfo &getBFI() { return LBFI.getCalculated(); }
 
-  /// \brief Compute and return the block frequencies.
+  /// Compute and return the block frequencies.
   const BlockFrequencyInfo &getBFI() const { return LBFI.getCalculated(); }
 
   void getAnalysisUsage(AnalysisUsage &AU) const override;
@@ -126,7 +126,7 @@
   void print(raw_ostream &OS, const Module *M) const override;
 };
 
-/// \brief Helper for client passes to initialize dependent passes for LBFI.
+/// Helper for client passes to initialize dependent passes for LBFI.
 void initializeLazyBFIPassPass(PassRegistry &Registry);
 }
 #endif
diff --git a/linux-x64/clang/include/llvm/Analysis/LazyBranchProbabilityInfo.h b/linux-x64/clang/include/llvm/Analysis/LazyBranchProbabilityInfo.h
index e1d404b..9e6bcfe 100644
--- a/linux-x64/clang/include/llvm/Analysis/LazyBranchProbabilityInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/LazyBranchProbabilityInfo.h
@@ -26,7 +26,7 @@
 class LoopInfo;
 class TargetLibraryInfo;
 
-/// \brief This is an alternative analysis pass to
+/// This is an alternative analysis pass to
 /// BranchProbabilityInfoWrapperPass.  The difference is that with this pass the
 /// branch probabilities are not computed when the analysis pass is executed but
 /// rather when the BPI results is explicitly requested by the analysis client.
@@ -89,10 +89,10 @@
 
   LazyBranchProbabilityInfoPass();
 
-  /// \brief Compute and return the branch probabilities.
+  /// Compute and return the branch probabilities.
   BranchProbabilityInfo &getBPI() { return LBPI->getCalculated(); }
 
-  /// \brief Compute and return the branch probabilities.
+  /// Compute and return the branch probabilities.
   const BranchProbabilityInfo &getBPI() const { return LBPI->getCalculated(); }
 
   void getAnalysisUsage(AnalysisUsage &AU) const override;
@@ -106,10 +106,10 @@
   void print(raw_ostream &OS, const Module *M) const override;
 };
 
-/// \brief Helper for client passes to initialize dependent passes for LBPI.
+/// Helper for client passes to initialize dependent passes for LBPI.
 void initializeLazyBPIPassPass(PassRegistry &Registry);
 
-/// \brief Simple trait class that provides a mapping between BPI passes and the
+/// Simple trait class that provides a mapping between BPI passes and the
 /// corresponding BPInfo.
 template <typename PassT> struct BPIPassTrait {
   static PassT &getBPI(PassT *P) { return *P; }
diff --git a/linux-x64/clang/include/llvm/Analysis/LazyValueInfo.h b/linux-x64/clang/include/llvm/Analysis/LazyValueInfo.h
index cea5bf0..1a4fdb5 100644
--- a/linux-x64/clang/include/llvm/Analysis/LazyValueInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/LazyValueInfo.h
@@ -128,7 +128,7 @@
                   FunctionAnalysisManager::Invalidator &Inv);
 };
 
-/// \brief Analysis to compute lazy value information.
+/// Analysis to compute lazy value information.
 class LazyValueAnalysis : public AnalysisInfoMixin<LazyValueAnalysis> {
 public:
   typedef LazyValueInfo Result;
diff --git a/linux-x64/clang/include/llvm/Analysis/Lint.h b/linux-x64/clang/include/llvm/Analysis/Lint.h
index 7c88b13..db5919f 100644
--- a/linux-x64/clang/include/llvm/Analysis/Lint.h
+++ b/linux-x64/clang/include/llvm/Analysis/Lint.h
@@ -26,12 +26,12 @@
 class Module;
 class Function;
 
-/// @brief Create a lint pass.
+/// Create a lint pass.
 ///
 /// Check a module or function.
 FunctionPass *createLintPass();
 
-/// @brief Check a module.
+/// Check a module.
 ///
 /// This should only be used for debugging, because it plays games with
 /// PassManagers and stuff.
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h b/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
index 28154c8..d27b3e4 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopAccessAnalysis.h
@@ -38,25 +38,25 @@
 class LoopAccessInfo;
 class OptimizationRemarkEmitter;
 
-/// \brief Collection of parameters shared beetween the Loop Vectorizer and the
+/// Collection of parameters shared beetween the Loop Vectorizer and the
 /// Loop Access Analysis.
 struct VectorizerParams {
-  /// \brief Maximum SIMD width.
+  /// Maximum SIMD width.
   static const unsigned MaxVectorWidth;
 
-  /// \brief VF as overridden by the user.
+  /// VF as overridden by the user.
   static unsigned VectorizationFactor;
-  /// \brief Interleave factor as overridden by the user.
+  /// Interleave factor as overridden by the user.
   static unsigned VectorizationInterleave;
-  /// \brief True if force-vector-interleave was specified by the user.
+  /// True if force-vector-interleave was specified by the user.
   static bool isInterleaveForced();
 
-  /// \\brief When performing memory disambiguation checks at runtime do not
+  /// \When performing memory disambiguation checks at runtime do not
   /// make more than this number of comparisons.
   static unsigned RuntimeMemoryCheckThreshold;
 };
 
-/// \brief Checks memory dependences among accesses to the same underlying
+/// Checks memory dependences among accesses to the same underlying
 /// object to determine whether there vectorization is legal or not (and at
 /// which vectorization factor).
 ///
@@ -94,12 +94,12 @@
 public:
   typedef PointerIntPair<Value *, 1, bool> MemAccessInfo;
   typedef SmallVector<MemAccessInfo, 8> MemAccessInfoList;
-  /// \brief Set of potential dependent memory accesses.
+  /// Set of potential dependent memory accesses.
   typedef EquivalenceClasses<MemAccessInfo> DepCandidates;
 
-  /// \brief Dependece between memory access instructions.
+  /// Dependece between memory access instructions.
   struct Dependence {
-    /// \brief The type of the dependence.
+    /// The type of the dependence.
     enum DepType {
       // No dependence.
       NoDep,
@@ -127,36 +127,36 @@
       BackwardVectorizableButPreventsForwarding
     };
 
-    /// \brief String version of the types.
+    /// String version of the types.
     static const char *DepName[];
 
-    /// \brief Index of the source of the dependence in the InstMap vector.
+    /// Index of the source of the dependence in the InstMap vector.
     unsigned Source;
-    /// \brief Index of the destination of the dependence in the InstMap vector.
+    /// Index of the destination of the dependence in the InstMap vector.
     unsigned Destination;
-    /// \brief The type of the dependence.
+    /// The type of the dependence.
     DepType Type;
 
     Dependence(unsigned Source, unsigned Destination, DepType Type)
         : Source(Source), Destination(Destination), Type(Type) {}
 
-    /// \brief Return the source instruction of the dependence.
+    /// Return the source instruction of the dependence.
     Instruction *getSource(const LoopAccessInfo &LAI) const;
-    /// \brief Return the destination instruction of the dependence.
+    /// Return the destination instruction of the dependence.
     Instruction *getDestination(const LoopAccessInfo &LAI) const;
 
-    /// \brief Dependence types that don't prevent vectorization.
+    /// Dependence types that don't prevent vectorization.
     static bool isSafeForVectorization(DepType Type);
 
-    /// \brief Lexically forward dependence.
+    /// Lexically forward dependence.
     bool isForward() const;
-    /// \brief Lexically backward dependence.
+    /// Lexically backward dependence.
     bool isBackward() const;
 
-    /// \brief May be a lexically backward dependence type (includes Unknown).
+    /// May be a lexically backward dependence type (includes Unknown).
     bool isPossiblyBackward() const;
 
-    /// \brief Print the dependence.  \p Instr is used to map the instruction
+    /// Print the dependence.  \p Instr is used to map the instruction
     /// indices to instructions.
     void print(raw_ostream &OS, unsigned Depth,
                const SmallVectorImpl<Instruction *> &Instrs) const;
@@ -167,7 +167,7 @@
         ShouldRetryWithRuntimeCheck(false), SafeForVectorization(true),
         RecordDependences(true) {}
 
-  /// \brief Register the location (instructions are given increasing numbers)
+  /// Register the location (instructions are given increasing numbers)
   /// of a write access.
   void addAccess(StoreInst *SI) {
     Value *Ptr = SI->getPointerOperand();
@@ -176,7 +176,7 @@
     ++AccessIdx;
   }
 
-  /// \brief Register the location (instructions are given increasing numbers)
+  /// Register the location (instructions are given increasing numbers)
   /// of a write access.
   void addAccess(LoadInst *LI) {
     Value *Ptr = LI->getPointerOperand();
@@ -185,29 +185,29 @@
     ++AccessIdx;
   }
 
-  /// \brief Check whether the dependencies between the accesses are safe.
+  /// Check whether the dependencies between the accesses are safe.
   ///
   /// Only checks sets with elements in \p CheckDeps.
   bool areDepsSafe(DepCandidates &AccessSets, MemAccessInfoList &CheckDeps,
                    const ValueToValueMap &Strides);
 
-  /// \brief No memory dependence was encountered that would inhibit
+  /// No memory dependence was encountered that would inhibit
   /// vectorization.
   bool isSafeForVectorization() const { return SafeForVectorization; }
 
-  /// \brief The maximum number of bytes of a vector register we can vectorize
+  /// The maximum number of bytes of a vector register we can vectorize
   /// the accesses safely with.
   uint64_t getMaxSafeDepDistBytes() { return MaxSafeDepDistBytes; }
 
-  /// \brief Return the number of elements that are safe to operate on
+  /// Return the number of elements that are safe to operate on
   /// simultaneously, multiplied by the size of the element in bits.
   uint64_t getMaxSafeRegisterWidth() const { return MaxSafeRegisterWidth; }
 
-  /// \brief In same cases when the dependency check fails we can still
+  /// In same cases when the dependency check fails we can still
   /// vectorize the loop with a dynamic array access check.
   bool shouldRetryWithRuntimeCheck() { return ShouldRetryWithRuntimeCheck; }
 
-  /// \brief Returns the memory dependences.  If null is returned we exceeded
+  /// Returns the memory dependences.  If null is returned we exceeded
   /// the MaxDependences threshold and this information is not
   /// available.
   const SmallVectorImpl<Dependence> *getDependences() const {
@@ -216,13 +216,13 @@
 
   void clearDependences() { Dependences.clear(); }
 
-  /// \brief The vector of memory access instructions.  The indices are used as
+  /// The vector of memory access instructions.  The indices are used as
   /// instruction identifiers in the Dependence class.
   const SmallVectorImpl<Instruction *> &getMemoryInstructions() const {
     return InstMap;
   }
 
-  /// \brief Generate a mapping between the memory instructions and their
+  /// Generate a mapping between the memory instructions and their
   /// indices according to program order.
   DenseMap<Instruction *, unsigned> generateInstructionOrderMap() const {
     DenseMap<Instruction *, unsigned> OrderMap;
@@ -233,7 +233,7 @@
     return OrderMap;
   }
 
-  /// \brief Find the set of instructions that read or write via \p Ptr.
+  /// Find the set of instructions that read or write via \p Ptr.
   SmallVector<Instruction *, 4> getInstructionsForAccess(Value *Ptr,
                                                          bool isWrite) const;
 
@@ -247,42 +247,42 @@
   PredicatedScalarEvolution &PSE;
   const Loop *InnermostLoop;
 
-  /// \brief Maps access locations (ptr, read/write) to program order.
+  /// Maps access locations (ptr, read/write) to program order.
   DenseMap<MemAccessInfo, std::vector<unsigned> > Accesses;
 
-  /// \brief Memory access instructions in program order.
+  /// Memory access instructions in program order.
   SmallVector<Instruction *, 16> InstMap;
 
-  /// \brief The program order index to be used for the next instruction.
+  /// The program order index to be used for the next instruction.
   unsigned AccessIdx;
 
   // We can access this many bytes in parallel safely.
   uint64_t MaxSafeDepDistBytes;
 
-  /// \brief Number of elements (from consecutive iterations) that are safe to
+  /// Number of elements (from consecutive iterations) that are safe to
   /// operate on simultaneously, multiplied by the size of the element in bits.
   /// The size of the element is taken from the memory access that is most
   /// restrictive.
   uint64_t MaxSafeRegisterWidth;
 
-  /// \brief If we see a non-constant dependence distance we can still try to
+  /// If we see a non-constant dependence distance we can still try to
   /// vectorize this loop with runtime checks.
   bool ShouldRetryWithRuntimeCheck;
 
-  /// \brief No memory dependence was encountered that would inhibit
+  /// No memory dependence was encountered that would inhibit
   /// vectorization.
   bool SafeForVectorization;
 
-  //// \brief True if Dependences reflects the dependences in the
+  //// True if Dependences reflects the dependences in the
   //// loop.  If false we exceeded MaxDependences and
   //// Dependences is invalid.
   bool RecordDependences;
 
-  /// \brief Memory dependences collected during the analysis.  Only valid if
+  /// Memory dependences collected during the analysis.  Only valid if
   /// RecordDependences is true.
   SmallVector<Dependence, 8> Dependences;
 
-  /// \brief Check whether there is a plausible dependence between the two
+  /// Check whether there is a plausible dependence between the two
   /// accesses.
   ///
   /// Access \p A must happen before \p B in program order. The two indices
@@ -298,7 +298,7 @@
                                   const MemAccessInfo &B, unsigned BIdx,
                                   const ValueToValueMap &Strides);
 
-  /// \brief Check whether the data dependence could prevent store-load
+  /// Check whether the data dependence could prevent store-load
   /// forwarding.
   ///
   /// \return false if we shouldn't vectorize at all or avoid larger
@@ -306,7 +306,7 @@
   bool couldPreventStoreLoadForward(uint64_t Distance, uint64_t TypeByteSize);
 };
 
-/// \brief Holds information about the memory runtime legality checks to verify
+/// Holds information about the memory runtime legality checks to verify
 /// that a group of pointers do not overlap.
 class RuntimePointerChecking {
 public:
@@ -355,13 +355,13 @@
               unsigned ASId, const ValueToValueMap &Strides,
               PredicatedScalarEvolution &PSE);
 
-  /// \brief No run-time memory checking is necessary.
+  /// No run-time memory checking is necessary.
   bool empty() const { return Pointers.empty(); }
 
   /// A grouping of pointers. A single memcheck is required between
   /// two groups.
   struct CheckingPtrGroup {
-    /// \brief Create a new pointer checking group containing a single
+    /// Create a new pointer checking group containing a single
     /// pointer, with index \p Index in RtCheck.
     CheckingPtrGroup(unsigned Index, RuntimePointerChecking &RtCheck)
         : RtCheck(RtCheck), High(RtCheck.Pointers[Index].End),
@@ -369,7 +369,7 @@
       Members.push_back(Index);
     }
 
-    /// \brief Tries to add the pointer recorded in RtCheck at index
+    /// Tries to add the pointer recorded in RtCheck at index
     /// \p Index to this pointer checking group. We can only add a pointer
     /// to a checking group if we will still be able to get
     /// the upper and lower bounds of the check. Returns true in case
@@ -390,7 +390,7 @@
     SmallVector<unsigned, 2> Members;
   };
 
-  /// \brief A memcheck which made up of a pair of grouped pointers.
+  /// A memcheck which made up of a pair of grouped pointers.
   ///
   /// These *have* to be const for now, since checks are generated from
   /// CheckingPtrGroups in LAI::addRuntimeChecks which is a const member
@@ -399,24 +399,24 @@
   typedef std::pair<const CheckingPtrGroup *, const CheckingPtrGroup *>
       PointerCheck;
 
-  /// \brief Generate the checks and store it.  This also performs the grouping
+  /// Generate the checks and store it.  This also performs the grouping
   /// of pointers to reduce the number of memchecks necessary.
   void generateChecks(MemoryDepChecker::DepCandidates &DepCands,
                       bool UseDependencies);
 
-  /// \brief Returns the checks that generateChecks created.
+  /// Returns the checks that generateChecks created.
   const SmallVector<PointerCheck, 4> &getChecks() const { return Checks; }
 
-  /// \brief Decide if we need to add a check between two groups of pointers,
+  /// Decide if we need to add a check between two groups of pointers,
   /// according to needsChecking.
   bool needsChecking(const CheckingPtrGroup &M,
                      const CheckingPtrGroup &N) const;
 
-  /// \brief Returns the number of run-time checks required according to
+  /// Returns the number of run-time checks required according to
   /// needsChecking.
   unsigned getNumberOfChecks() const { return Checks.size(); }
 
-  /// \brief Print the list run-time memory checks necessary.
+  /// Print the list run-time memory checks necessary.
   void print(raw_ostream &OS, unsigned Depth = 0) const;
 
   /// Print \p Checks.
@@ -432,7 +432,7 @@
   /// Holds a partitioning of pointers into "check groups".
   SmallVector<CheckingPtrGroup, 2> CheckingGroups;
 
-  /// \brief Check if pointers are in the same partition
+  /// Check if pointers are in the same partition
   ///
   /// \p PtrToPartition contains the partition number for pointers (-1 if the
   /// pointer belongs to multiple partitions).
@@ -440,17 +440,17 @@
   arePointersInSamePartition(const SmallVectorImpl<int> &PtrToPartition,
                              unsigned PtrIdx1, unsigned PtrIdx2);
 
-  /// \brief Decide whether we need to issue a run-time check for pointer at
+  /// Decide whether we need to issue a run-time check for pointer at
   /// index \p I and \p J to prove their independence.
   bool needsChecking(unsigned I, unsigned J) const;
 
-  /// \brief Return PointerInfo for pointer at index \p PtrIdx.
+  /// Return PointerInfo for pointer at index \p PtrIdx.
   const PointerInfo &getPointerInfo(unsigned PtrIdx) const {
     return Pointers[PtrIdx];
   }
 
 private:
-  /// \brief Groups pointers such that a single memcheck is required
+  /// Groups pointers such that a single memcheck is required
   /// between two different groups. This will clear the CheckingGroups vector
   /// and re-compute it. We will only group dependecies if \p UseDependencies
   /// is true, otherwise we will create a separate group for each pointer.
@@ -464,12 +464,12 @@
   /// Holds a pointer to the ScalarEvolution analysis.
   ScalarEvolution *SE;
 
-  /// \brief Set of run-time checks required to establish independence of
+  /// Set of run-time checks required to establish independence of
   /// otherwise may-aliasing pointers in the loop.
   SmallVector<PointerCheck, 4> Checks;
 };
 
-/// \brief Drive the analysis of memory accesses in the loop
+/// Drive the analysis of memory accesses in the loop
 ///
 /// This class is responsible for analyzing the memory accesses of a loop.  It
 /// collects the accesses and then its main helper the AccessAnalysis class
@@ -503,7 +503,7 @@
     return PtrRtChecking.get();
   }
 
-  /// \brief Number of memchecks required to prove independence of otherwise
+  /// Number of memchecks required to prove independence of otherwise
   /// may-alias pointers.
   unsigned getNumRuntimePointerChecks() const {
     return PtrRtChecking->getNumberOfChecks();
@@ -521,7 +521,7 @@
   unsigned getNumStores() const { return NumStores; }
   unsigned getNumLoads() const { return NumLoads;}
 
-  /// \brief Add code that checks at runtime if the accessed arrays overlap.
+  /// Add code that checks at runtime if the accessed arrays overlap.
   ///
   /// Returns a pair of instructions where the first element is the first
   /// instruction generated in possibly a sequence of instructions and the
@@ -529,7 +529,7 @@
   std::pair<Instruction *, Instruction *>
   addRuntimeChecks(Instruction *Loc) const;
 
-  /// \brief Generete the instructions for the checks in \p PointerChecks.
+  /// Generete the instructions for the checks in \p PointerChecks.
   ///
   /// Returns a pair of instructions where the first element is the first
   /// instruction generated in possibly a sequence of instructions and the
@@ -539,32 +539,32 @@
                    const SmallVectorImpl<RuntimePointerChecking::PointerCheck>
                        &PointerChecks) const;
 
-  /// \brief The diagnostics report generated for the analysis.  E.g. why we
+  /// The diagnostics report generated for the analysis.  E.g. why we
   /// couldn't analyze the loop.
   const OptimizationRemarkAnalysis *getReport() const { return Report.get(); }
 
-  /// \brief the Memory Dependence Checker which can determine the
+  /// the Memory Dependence Checker which can determine the
   /// loop-independent and loop-carried dependences between memory accesses.
   const MemoryDepChecker &getDepChecker() const { return *DepChecker; }
 
-  /// \brief Return the list of instructions that use \p Ptr to read or write
+  /// Return the list of instructions that use \p Ptr to read or write
   /// memory.
   SmallVector<Instruction *, 4> getInstructionsForAccess(Value *Ptr,
                                                          bool isWrite) const {
     return DepChecker->getInstructionsForAccess(Ptr, isWrite);
   }
 
-  /// \brief If an access has a symbolic strides, this maps the pointer value to
+  /// If an access has a symbolic strides, this maps the pointer value to
   /// the stride symbol.
   const ValueToValueMap &getSymbolicStrides() const { return SymbolicStrides; }
 
-  /// \brief Pointer has a symbolic stride.
+  /// Pointer has a symbolic stride.
   bool hasStride(Value *V) const { return StrideSet.count(V); }
 
-  /// \brief Print the information about the memory accesses in the loop.
+  /// Print the information about the memory accesses in the loop.
   void print(raw_ostream &OS, unsigned Depth = 0) const;
 
-  /// \brief Checks existence of store to invariant address inside loop.
+  /// Checks existence of store to invariant address inside loop.
   /// If the loop has any store to invariant address, then it returns true,
   /// else returns false.
   bool hasStoreToLoopInvariantAddress() const {
@@ -579,15 +579,15 @@
   const PredicatedScalarEvolution &getPSE() const { return *PSE; }
 
 private:
-  /// \brief Analyze the loop.
+  /// Analyze the loop.
   void analyzeLoop(AliasAnalysis *AA, LoopInfo *LI,
                    const TargetLibraryInfo *TLI, DominatorTree *DT);
 
-  /// \brief Check if the structure of the loop allows it to be analyzed by this
+  /// Check if the structure of the loop allows it to be analyzed by this
   /// pass.
   bool canAnalyzeLoop();
 
-  /// \brief Save the analysis remark.
+  /// Save the analysis remark.
   ///
   /// LAA does not directly emits the remarks.  Instead it stores it which the
   /// client can retrieve and presents as its own analysis
@@ -595,7 +595,7 @@
   OptimizationRemarkAnalysis &recordAnalysis(StringRef RemarkName,
                                              Instruction *Instr = nullptr);
 
-  /// \brief Collect memory access with loop invariant strides.
+  /// Collect memory access with loop invariant strides.
   ///
   /// Looks for accesses like "a[i * StrideA]" where "StrideA" is loop
   /// invariant.
@@ -607,7 +607,7 @@
   /// at runtime. Using std::unique_ptr to make using move ctor simpler.
   std::unique_ptr<RuntimePointerChecking> PtrRtChecking;
 
-  /// \brief the Memory Dependence Checker which can determine the
+  /// the Memory Dependence Checker which can determine the
   /// loop-independent and loop-carried dependences between memory accesses.
   std::unique_ptr<MemoryDepChecker> DepChecker;
 
@@ -618,28 +618,28 @@
 
   uint64_t MaxSafeDepDistBytes;
 
-  /// \brief Cache the result of analyzeLoop.
+  /// Cache the result of analyzeLoop.
   bool CanVecMem;
 
-  /// \brief Indicator for storing to uniform addresses.
+  /// Indicator for storing to uniform addresses.
   /// If a loop has write to a loop invariant address then it should be true.
   bool StoreToLoopInvariantAddress;
 
-  /// \brief The diagnostics report generated for the analysis.  E.g. why we
+  /// The diagnostics report generated for the analysis.  E.g. why we
   /// couldn't analyze the loop.
   std::unique_ptr<OptimizationRemarkAnalysis> Report;
 
-  /// \brief If an access has a symbolic strides, this maps the pointer value to
+  /// If an access has a symbolic strides, this maps the pointer value to
   /// the stride symbol.
   ValueToValueMap SymbolicStrides;
 
-  /// \brief Set of symbolic strides values.
+  /// Set of symbolic strides values.
   SmallPtrSet<Value *, 8> StrideSet;
 };
 
 Value *stripIntegerCast(Value *V);
 
-/// \brief Return the SCEV corresponding to a pointer with the symbolic stride
+/// Return the SCEV corresponding to a pointer with the symbolic stride
 /// replaced with constant one, assuming the SCEV predicate associated with
 /// \p PSE is true.
 ///
@@ -653,7 +653,7 @@
                                       const ValueToValueMap &PtrToStride,
                                       Value *Ptr, Value *OrigPtr = nullptr);
 
-/// \brief If the pointer has a constant stride return it in units of its
+/// If the pointer has a constant stride return it in units of its
 /// element size.  Otherwise return zero.
 ///
 /// Ensure that it does not wrap in the address space, assuming the predicate
@@ -667,12 +667,26 @@
                      const ValueToValueMap &StridesMap = ValueToValueMap(),
                      bool Assume = false, bool ShouldCheckWrap = true);
 
-/// \brief Returns true if the memory operations \p A and \p B are consecutive.
-/// This is a simple API that does not depend on the analysis pass. 
+/// Attempt to sort the pointers in \p VL and return the sorted indices
+/// in \p SortedIndices, if reordering is required.
+///
+/// Returns 'true' if sorting is legal, otherwise returns 'false'.
+///
+/// For example, for a given \p VL of memory accesses in program order, a[i+4],
+/// a[i+0], a[i+1] and a[i+7], this function will sort the \p VL and save the
+/// sorted indices in \p SortedIndices as a[i+0], a[i+1], a[i+4], a[i+7] and
+/// saves the mask for actual memory accesses in program order in
+/// \p SortedIndices as <1,2,0,3>
+bool sortPtrAccesses(ArrayRef<Value *> VL, const DataLayout &DL,
+                     ScalarEvolution &SE,
+                     SmallVectorImpl<unsigned> &SortedIndices);
+
+/// Returns true if the memory operations \p A and \p B are consecutive.
+/// This is a simple API that does not depend on the analysis pass.
 bool isConsecutiveAccess(Value *A, Value *B, const DataLayout &DL,
                          ScalarEvolution &SE, bool CheckType = true);
 
-/// \brief This analysis provides dependence information for the memory accesses
+/// This analysis provides dependence information for the memory accesses
 /// of a loop.
 ///
 /// It runs the analysis for a loop on demand.  This can be initiated by
@@ -691,7 +705,7 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override;
 
-  /// \brief Query the result of the loop access information for the loop \p L.
+  /// Query the result of the loop access information for the loop \p L.
   ///
   /// If there is no cached result available run the analysis.
   const LoopAccessInfo &getInfo(Loop *L);
@@ -701,11 +715,11 @@
     LoopAccessInfoMap.clear();
   }
 
-  /// \brief Print the result of the analysis when invoked with -analyze.
+  /// Print the result of the analysis when invoked with -analyze.
   void print(raw_ostream &OS, const Module *M = nullptr) const override;
 
 private:
-  /// \brief The cache.
+  /// The cache.
   DenseMap<Loop *, std::unique_ptr<LoopAccessInfo>> LoopAccessInfoMap;
 
   // The used analysis passes.
@@ -716,11 +730,11 @@
   LoopInfo *LI;
 };
 
-/// \brief This analysis provides dependence information for the memory
+/// This analysis provides dependence information for the memory
 /// accesses of a loop.
 ///
 /// It runs the analysis for a loop on demand.  This can be initiated by
-/// querying the loop access info via AM.getResult<LoopAccessAnalysis>. 
+/// querying the loop access info via AM.getResult<LoopAccessAnalysis>.
 /// getResult return a LoopAccessInfo object.  See this class for the
 /// specifics of what information is provided.
 class LoopAccessAnalysis
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h b/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
index 417ee97..00e562c 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopAnalysisManager.h
@@ -69,7 +69,7 @@
 extern template class AllAnalysesOn<Loop>;
 
 extern template class AnalysisManager<Loop, LoopStandardAnalysisResults &>;
-/// \brief The loop analysis manager.
+/// The loop analysis manager.
 ///
 /// See the documentation for the AnalysisManager template for detail
 /// documentation. This typedef serves as a convenient way to refer to this
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopInfo.h b/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
index 28afc39..30b29d6 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopInfo.h
@@ -178,6 +178,12 @@
     return DenseBlockSet;
   }
 
+  /// Return a direct, immutable handle to the blocks set.
+  const SmallPtrSetImpl<const BlockT *> &getBlocksSet() const {
+    assert(!isInvalid() && "Loop not in a valid state!");
+    return DenseBlockSet;
+  }
+
   /// Return true if this loop is no longer valid.  The only valid use of this
   /// helper is "assert(L.isInvalid())" or equivalent, since IsInvalid is set to
   /// true by the destructor.  In other words, if this accessor returns true,
@@ -255,6 +261,20 @@
   /// Otherwise return null.
   BlockT *getExitBlock() const;
 
+  /// Return true if no exit block for the loop has a predecessor that is
+  /// outside the loop.
+  bool hasDedicatedExits() const;
+
+  /// Return all unique successor blocks of this loop.
+  /// These are the blocks _outside of the current loop_ which are branched to.
+  /// This assumes that loop exits are in canonical form, i.e. all exits are
+  /// dedicated exits.
+  void getUniqueExitBlocks(SmallVectorImpl<BlockT *> &ExitBlocks) const;
+
+  /// If getUniqueExitBlocks would return exactly one block, return that block.
+  /// Otherwise return null.
+  BlockT *getUniqueExitBlock() const;
+
   /// Edge type.
   typedef std::pair<const BlockT *, const BlockT *> Edge;
 
@@ -438,7 +458,7 @@
 /// in the CFG are necessarily loops.
 class Loop : public LoopBase<BasicBlock, Loop> {
 public:
-  /// \brief A range representing the start and end location of a loop.
+  /// A range representing the start and end location of a loop.
   class LocRange {
     DebugLoc Start;
     DebugLoc End;
@@ -452,7 +472,7 @@
     const DebugLoc &getStart() const { return Start; }
     const DebugLoc &getEnd() const { return End; }
 
-    /// \brief Check for null.
+    /// Check for null.
     ///
     explicit operator bool() const { return Start && End; }
   };
@@ -527,7 +547,7 @@
   ///
   /// If this loop contains the same llvm.loop metadata on each branch to the
   /// header then the node is returned. If any latch instruction does not
-  /// contain llvm.loop or or if multiple latches contain different nodes then
+  /// contain llvm.loop or if multiple latches contain different nodes then
   /// 0 is returned.
   MDNode *getLoopID() const;
   /// Set the llvm.loop loop id metadata for this loop.
@@ -547,20 +567,6 @@
   /// unrolling pass is run more than once (which it generally is).
   void setLoopAlreadyUnrolled();
 
-  /// Return true if no exit block for the loop has a predecessor that is
-  /// outside the loop.
-  bool hasDedicatedExits() const;
-
-  /// Return all unique successor blocks of this loop.
-  /// These are the blocks _outside of the current loop_ which are branched to.
-  /// This assumes that loop exits are in canonical form, i.e. all exits are
-  /// dedicated exits.
-  void getUniqueExitBlocks(SmallVectorImpl<BasicBlock *> &ExitBlocks) const;
-
-  /// If getUniqueExitBlocks would return exactly one block, return that block.
-  /// Otherwise return null.
-  BasicBlock *getUniqueExitBlock() const;
-
   void dump() const;
   void dumpVerbose() const;
 
@@ -929,7 +935,7 @@
   static ChildIteratorType child_end(NodeRef N) { return N->end(); }
 };
 
-/// \brief Analysis pass that exposes the \c LoopInfo for a function.
+/// Analysis pass that exposes the \c LoopInfo for a function.
 class LoopAnalysis : public AnalysisInfoMixin<LoopAnalysis> {
   friend AnalysisInfoMixin<LoopAnalysis>;
   static AnalysisKey Key;
@@ -940,7 +946,7 @@
   LoopInfo run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for the \c LoopAnalysis results.
+/// Printer pass for the \c LoopAnalysis results.
 class LoopPrinterPass : public PassInfoMixin<LoopPrinterPass> {
   raw_ostream &OS;
 
@@ -949,12 +955,12 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Verifier pass for the \c LoopAnalysis results.
+/// Verifier pass for the \c LoopAnalysis results.
 struct LoopVerifierPass : public PassInfoMixin<LoopVerifierPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief The legacy pass manager's analysis pass to compute loop information.
+/// The legacy pass manager's analysis pass to compute loop information.
 class LoopInfoWrapperPass : public FunctionPass {
   LoopInfo LI;
 
@@ -968,7 +974,7 @@
   LoopInfo &getLoopInfo() { return LI; }
   const LoopInfo &getLoopInfo() const { return LI; }
 
-  /// \brief Calculate the natural loop information for a given function.
+  /// Calculate the natural loop information for a given function.
   bool runOnFunction(Function &F) override;
 
   void verifyAnalysis() const override;
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
index b3a16b5..9413898 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopInfoImpl.h
@@ -82,6 +82,74 @@
   return nullptr;
 }
 
+template <class BlockT, class LoopT>
+bool LoopBase<BlockT, LoopT>::hasDedicatedExits() const {
+  // Each predecessor of each exit block of a normal loop is contained
+  // within the loop.
+  SmallVector<BlockT *, 4> ExitBlocks;
+  getExitBlocks(ExitBlocks);
+  for (BlockT *EB : ExitBlocks)
+    for (BlockT *Predecessor : children<Inverse<BlockT *>>(EB))
+      if (!contains(Predecessor))
+        return false;
+  // All the requirements are met.
+  return true;
+}
+
+template <class BlockT, class LoopT>
+void LoopBase<BlockT, LoopT>::getUniqueExitBlocks(
+    SmallVectorImpl<BlockT *> &ExitBlocks) const {
+  typedef GraphTraits<BlockT *> BlockTraits;
+  typedef GraphTraits<Inverse<BlockT *>> InvBlockTraits;
+
+  assert(hasDedicatedExits() &&
+         "getUniqueExitBlocks assumes the loop has canonical form exits!");
+
+  SmallVector<BlockT *, 32> SwitchExitBlocks;
+  for (BlockT *Block : this->blocks()) {
+    SwitchExitBlocks.clear();
+    for (BlockT *Successor : children<BlockT *>(Block)) {
+      // If block is inside the loop then it is not an exit block.
+      if (contains(Successor))
+        continue;
+
+      BlockT *FirstPred = *InvBlockTraits::child_begin(Successor);
+
+      // If current basic block is this exit block's first predecessor then only
+      // insert exit block in to the output ExitBlocks vector. This ensures that
+      // same exit block is not inserted twice into ExitBlocks vector.
+      if (Block != FirstPred)
+        continue;
+
+      // If a terminator has more then two successors, for example SwitchInst,
+      // then it is possible that there are multiple edges from current block to
+      // one exit block.
+      if (std::distance(BlockTraits::child_begin(Block),
+                        BlockTraits::child_end(Block)) <= 2) {
+        ExitBlocks.push_back(Successor);
+        continue;
+      }
+
+      // In case of multiple edges from current block to exit block, collect
+      // only one edge in ExitBlocks. Use switchExitBlocks to keep track of
+      // duplicate edges.
+      if (!is_contained(SwitchExitBlocks, Successor)) {
+        SwitchExitBlocks.push_back(Successor);
+        ExitBlocks.push_back(Successor);
+      }
+    }
+  }
+}
+
+template <class BlockT, class LoopT>
+BlockT *LoopBase<BlockT, LoopT>::getUniqueExitBlock() const {
+  SmallVector<BlockT *, 8> UniqueExitBlocks;
+  getUniqueExitBlocks(UniqueExitBlocks);
+  if (UniqueExitBlocks.size() == 1)
+    return UniqueExitBlocks[0];
+  return nullptr;
+}
+
 /// getExitEdges - Return all pairs of (_inside_block_,_outside_block_).
 template <class BlockT, class LoopT>
 void LoopBase<BlockT, LoopT>::getExitEdges(
@@ -572,8 +640,8 @@
 
 template <typename T>
 bool compareVectors(std::vector<T> &BB1, std::vector<T> &BB2) {
-  std::sort(BB1.begin(), BB1.end());
-  std::sort(BB2.begin(), BB2.end());
+  llvm::sort(BB1.begin(), BB1.end());
+  llvm::sort(BB2.begin(), BB2.end());
   return BB1 == BB2;
 }
 
@@ -617,6 +685,15 @@
   std::vector<BlockT *> OtherBBs = OtherL->getBlocks();
   assert(compareVectors(BBs, OtherBBs) &&
          "Mismatched basic blocks in the loops!");
+
+  const SmallPtrSetImpl<const BlockT *> &BlocksSet = L->getBlocksSet();
+  const SmallPtrSetImpl<const BlockT *> &OtherBlocksSet = L->getBlocksSet();
+  assert(BlocksSet.size() == OtherBlocksSet.size() &&
+         std::all_of(BlocksSet.begin(), BlocksSet.end(),
+                     [&OtherBlocksSet](const BlockT *BB) {
+                       return OtherBlocksSet.count(BB);
+                     }) &&
+         "Mismatched basic blocks in BlocksSets!");
 }
 #endif
 
@@ -636,6 +713,9 @@
     LoopT *L = Entry.second;
     assert(Loops.count(L) && "orphaned loop");
     assert(L->contains(BB) && "orphaned block");
+    for (LoopT *ChildLoop : *L)
+      assert(!ChildLoop->contains(BB) &&
+             "BBMap should point to the innermost loop containing BB");
   }
 
   // Recompute LoopInfo to verify loops structure.
diff --git a/linux-x64/clang/include/llvm/Analysis/LoopUnrollAnalyzer.h b/linux-x64/clang/include/llvm/Analysis/LoopUnrollAnalyzer.h
index 80f3e5f..f45bf0b 100644
--- a/linux-x64/clang/include/llvm/Analysis/LoopUnrollAnalyzer.h
+++ b/linux-x64/clang/include/llvm/Analysis/LoopUnrollAnalyzer.h
@@ -57,7 +57,7 @@
   using Base::visit;
 
 private:
-  /// \brief A cache of pointer bases and constant-folded offsets corresponding
+  /// A cache of pointer bases and constant-folded offsets corresponding
   /// to GEP (or derived from GEP) instructions.
   ///
   /// In order to find the base pointer one needs to perform non-trivial
@@ -65,11 +65,11 @@
   /// results saved.
   DenseMap<Value *, SimplifiedAddress> SimplifiedAddresses;
 
-  /// \brief SCEV expression corresponding to number of currently simulated
+  /// SCEV expression corresponding to number of currently simulated
   /// iteration.
   const SCEV *IterationNumber;
 
-  /// \brief A Value->Constant map for keeping values that we managed to
+  /// A Value->Constant map for keeping values that we managed to
   /// constant-fold on the given iteration.
   ///
   /// While we walk the loop instructions, we build up and maintain a mapping
diff --git a/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h b/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
index 7d53e34..5418128 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemoryBuiltins.h
@@ -53,33 +53,33 @@
 class UndefValue;
 class Value;
 
-/// \brief Tests if a value is a call or invoke to a library function that
+/// Tests if a value is a call or invoke to a library function that
 /// allocates or reallocates memory (either malloc, calloc, realloc, or strdup
 /// like).
 bool isAllocationFn(const Value *V, const TargetLibraryInfo *TLI,
                     bool LookThroughBitCast = false);
 
-/// \brief Tests if a value is a call or invoke to a function that returns a
+/// Tests if a value is a call or invoke to a function that returns a
 /// NoAlias pointer (including malloc/calloc/realloc/strdup-like functions).
 bool isNoAliasFn(const Value *V, const TargetLibraryInfo *TLI,
                  bool LookThroughBitCast = false);
 
-/// \brief Tests if a value is a call or invoke to a library function that
+/// Tests if a value is a call or invoke to a library function that
 /// allocates uninitialized memory (such as malloc).
 bool isMallocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
                     bool LookThroughBitCast = false);
 
-/// \brief Tests if a value is a call or invoke to a library function that
+/// Tests if a value is a call or invoke to a library function that
 /// allocates zero-filled memory (such as calloc).
 bool isCallocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
                     bool LookThroughBitCast = false);
 
-/// \brief Tests if a value is a call or invoke to a library function that
+/// Tests if a value is a call or invoke to a library function that
 /// allocates memory similar to malloc or calloc.
 bool isMallocOrCallocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
                             bool LookThroughBitCast = false);
 
-/// \brief Tests if a value is a call or invoke to a library function that
+/// Tests if a value is a call or invoke to a library function that
 /// allocates memory (either malloc, calloc, or strdup like).
 bool isAllocLikeFn(const Value *V, const TargetLibraryInfo *TLI,
                    bool LookThroughBitCast = false);
@@ -170,14 +170,14 @@
   bool NullIsUnknownSize = false;
 };
 
-/// \brief Compute the size of the object pointed by Ptr. Returns true and the
+/// Compute the size of the object pointed by Ptr. Returns true and the
 /// object size in Size if successful, and false otherwise. In this context, by
 /// object we mean the region of memory starting at Ptr to the end of the
 /// underlying object pointed to by Ptr.
 bool getObjectSize(const Value *Ptr, uint64_t &Size, const DataLayout &DL,
                    const TargetLibraryInfo *TLI, ObjectSizeOpts Opts = {});
 
-/// Try to turn a call to @llvm.objectsize into an integer value of the given
+/// Try to turn a call to \@llvm.objectsize into an integer value of the given
 /// Type. Returns null on failure.
 /// If MustSucceed is true, this function will not return null, and may return
 /// conservative values governed by the second argument of the call to
@@ -189,7 +189,7 @@
 
 using SizeOffsetType = std::pair<APInt, APInt>;
 
-/// \brief Evaluate the size and offset of an object pointed to by a Value*
+/// Evaluate the size and offset of an object pointed to by a Value*
 /// statically. Fails if size or offset are not known at compile time.
 class ObjectSizeOffsetVisitor
   : public InstVisitor<ObjectSizeOffsetVisitor, SizeOffsetType> {
@@ -248,7 +248,7 @@
 
 using SizeOffsetEvalType = std::pair<Value *, Value *>;
 
-/// \brief Evaluate the size and offset of an object pointed to by a Value*.
+/// Evaluate the size and offset of an object pointed to by a Value*.
 /// May create code to compute the result at run-time.
 class ObjectSizeOffsetEvaluator
   : public InstVisitor<ObjectSizeOffsetEvaluator, SizeOffsetEvalType> {
diff --git a/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h b/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
index c297452..1c40cff 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemoryDependenceAnalysis.h
@@ -26,6 +26,7 @@
 #include "llvm/IR/Metadata.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/PredIteratorCache.h"
+#include "llvm/IR/ValueHandle.h"
 #include "llvm/Pass.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cassert>
@@ -43,6 +44,7 @@
 class LoadInst;
 class PHITransAddr;
 class TargetLibraryInfo;
+class PhiValues;
 class Value;
 
 /// A memory dependence query can return one of three different answers.
@@ -302,7 +304,7 @@
     /// The maximum size of the dereferences of the pointer.
     ///
     /// May be UnknownSize if the sizes are unknown.
-    uint64_t Size = MemoryLocation::UnknownSize;
+    LocationSize Size = MemoryLocation::UnknownSize;
     /// The AA tags associated with dereferences of the pointer.
     ///
     /// The members may be null if there are no tags or conflicting tags.
@@ -314,7 +316,10 @@
   /// Cache storing single nonlocal def for the instruction.
   /// It is set when nonlocal def would be found in function returning only
   /// local dependencies.
-  DenseMap<Instruction *, NonLocalDepResult> NonLocalDefsCache;
+  DenseMap<AssertingVH<const Value>, NonLocalDepResult> NonLocalDefsCache;
+  using ReverseNonLocalDefsCacheTy =
+    DenseMap<Instruction *, SmallPtrSet<const Value*, 4>>;
+  ReverseNonLocalDefsCacheTy ReverseNonLocalDefsCache;
 
   /// This map stores the cached results of doing a pointer lookup at the
   /// bottom of a block.
@@ -356,13 +361,14 @@
   AssumptionCache &AC;
   const TargetLibraryInfo &TLI;
   DominatorTree &DT;
+  PhiValues &PV;
   PredIteratorCache PredCache;
 
 public:
   MemoryDependenceResults(AliasAnalysis &AA, AssumptionCache &AC,
                           const TargetLibraryInfo &TLI,
-                          DominatorTree &DT)
-      : AA(AA), AC(AC), TLI(TLI), DT(DT) {}
+                          DominatorTree &DT, PhiValues &PV)
+      : AA(AA), AC(AC), TLI(TLI), DT(DT), PV(PV) {}
 
   /// Handle invalidation in the new PM.
   bool invalidate(Function &F, const PreservedAnalyses &PA,
diff --git a/linux-x64/clang/include/llvm/Analysis/MemoryLocation.h b/linux-x64/clang/include/llvm/Analysis/MemoryLocation.h
index c108074..6b68000 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemoryLocation.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemoryLocation.h
@@ -27,8 +27,16 @@
 class StoreInst;
 class MemTransferInst;
 class MemIntrinsic;
+class AtomicMemTransferInst;
+class AtomicMemIntrinsic;
+class AnyMemTransferInst;
+class AnyMemIntrinsic;
 class TargetLibraryInfo;
 
+// Represents the size of a MemoryLocation. Logically, it's an
+// Optional<uint64_t>, with a special UnknownSize value from `MemoryLocation`.
+using LocationSize = uint64_t;
+
 /// Representation for a specific memory location.
 ///
 /// This abstraction can be used to represent a specific location in memory.
@@ -55,7 +63,7 @@
   /// virtual address space, because there are restrictions on stepping out of
   /// one object and into another. See
   /// http://llvm.org/docs/LangRef.html#pointeraliasing
-  uint64_t Size;
+  LocationSize Size;
 
   /// The metadata nodes which describes the aliasing of the location (each
   /// member is null if that kind of information is unavailable).
@@ -90,17 +98,21 @@
 
   /// Return a location representing the source of a memory transfer.
   static MemoryLocation getForSource(const MemTransferInst *MTI);
+  static MemoryLocation getForSource(const AtomicMemTransferInst *MTI);
+  static MemoryLocation getForSource(const AnyMemTransferInst *MTI);
 
   /// Return a location representing the destination of a memory set or
   /// transfer.
   static MemoryLocation getForDest(const MemIntrinsic *MI);
+  static MemoryLocation getForDest(const AtomicMemIntrinsic *MI);
+  static MemoryLocation getForDest(const AnyMemIntrinsic *MI);
 
   /// Return a location representing a particular argument of a call.
   static MemoryLocation getForArgument(ImmutableCallSite CS, unsigned ArgIdx,
                                        const TargetLibraryInfo &TLI);
 
   explicit MemoryLocation(const Value *Ptr = nullptr,
-                          uint64_t Size = UnknownSize,
+                          LocationSize Size = UnknownSize,
                           const AAMDNodes &AATags = AAMDNodes())
       : Ptr(Ptr), Size(Size), AATags(AATags) {}
 
@@ -110,7 +122,7 @@
     return Copy;
   }
 
-  MemoryLocation getWithNewSize(uint64_t NewSize) const {
+  MemoryLocation getWithNewSize(LocationSize NewSize) const {
     MemoryLocation Copy(*this);
     Copy.Size = NewSize;
     return Copy;
@@ -137,7 +149,7 @@
   }
   static unsigned getHashValue(const MemoryLocation &Val) {
     return DenseMapInfo<const Value *>::getHashValue(Val.Ptr) ^
-           DenseMapInfo<uint64_t>::getHashValue(Val.Size) ^
+           DenseMapInfo<LocationSize>::getHashValue(Val.Size) ^
            DenseMapInfo<AAMDNodes>::getHashValue(Val.AATags);
   }
   static bool isEqual(const MemoryLocation &LHS, const MemoryLocation &RHS) {
diff --git a/linux-x64/clang/include/llvm/Analysis/MemorySSA.h b/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
index 2899890..d445e44 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemorySSA.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file exposes an interface to building/using memory SSA to
+/// This file exposes an interface to building/using memory SSA to
 /// walk memory instructions using a use/def graph.
 ///
 /// Memory SSA class builds an SSA form that links together memory access
@@ -130,7 +130,7 @@
 using const_memoryaccess_def_iterator =
     memoryaccess_def_iterator_base<const MemoryAccess>;
 
-// \brief The base for all memory accesses. All memory accesses in a block are
+// The base for all memory accesses. All memory accesses in a block are
 // linked together using an intrusive list.
 class MemoryAccess
     : public DerivedUser,
@@ -159,11 +159,11 @@
   void print(raw_ostream &OS) const;
   void dump() const;
 
-  /// \brief The user iterators for a memory access
+  /// The user iterators for a memory access
   using iterator = user_iterator;
   using const_iterator = const_user_iterator;
 
-  /// \brief This iterator walks over all of the defs in a given
+  /// This iterator walks over all of the defs in a given
   /// MemoryAccess. For MemoryPhi nodes, this walks arguments. For
   /// MemoryUse/MemoryDef, this walks the defining access.
   memoryaccess_def_iterator defs_begin();
@@ -171,7 +171,7 @@
   memoryaccess_def_iterator defs_end();
   const_memoryaccess_def_iterator defs_end() const;
 
-  /// \brief Get the iterators for the all access list and the defs only list
+  /// Get the iterators for the all access list and the defs only list
   /// We default to the all access list.
   AllAccessType::self_iterator getIterator() {
     return this->AllAccessType::getIterator();
@@ -205,11 +205,11 @@
   friend class MemoryUse;
   friend class MemoryUseOrDef;
 
-  /// \brief Used by MemorySSA to change the block of a MemoryAccess when it is
+  /// Used by MemorySSA to change the block of a MemoryAccess when it is
   /// moved.
   void setBlock(BasicBlock *BB) { Block = BB; }
 
-  /// \brief Used for debugging and tracking things about MemoryAccesses.
+  /// Used for debugging and tracking things about MemoryAccesses.
   /// Guaranteed unique among MemoryAccesses, no guarantees otherwise.
   inline unsigned getID() const;
 
@@ -235,7 +235,7 @@
   return OS;
 }
 
-/// \brief Class that has the common methods + fields of memory uses/defs. It's
+/// Class that has the common methods + fields of memory uses/defs. It's
 /// a little awkward to have, but there are many cases where we want either a
 /// use or def, and there are many cases where uses are needed (defs aren't
 /// acceptable), and vice-versa.
@@ -248,10 +248,10 @@
 
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(MemoryAccess);
 
-  /// \brief Get the instruction that this MemoryUse represents.
+  /// Get the instruction that this MemoryUse represents.
   Instruction *getMemoryInst() const { return MemoryInstruction; }
 
-  /// \brief Get the access that produces the memory state used by this Use.
+  /// Get the access that produces the memory state used by this Use.
   MemoryAccess *getDefiningAccess() const { return getOperand(0); }
 
   static bool classof(const Value *MA) {
@@ -270,7 +270,7 @@
     return OptimizedAccessAlias;
   }
 
-  /// \brief Reset the ID of what this MemoryUse was optimized to, causing it to
+  /// Reset the ID of what this MemoryUse was optimized to, causing it to
   /// be rewalked by the walker if necessary.
   /// This really should only be called by tests.
   inline void resetOptimized();
@@ -313,7 +313,7 @@
     : public FixedNumOperandTraits<MemoryUseOrDef, 1> {};
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUseOrDef, MemoryAccess)
 
-/// \brief Represents read-only accesses to memory
+/// Represents read-only accesses to memory
 ///
 /// In particular, the set of Instructions that will be represented by
 /// MemoryUse's is exactly the set of Instructions for which
@@ -364,7 +364,7 @@
 struct OperandTraits<MemoryUse> : public FixedNumOperandTraits<MemoryUse, 1> {};
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryUse, MemoryAccess)
 
-/// \brief Represents a read-write access to memory, whether it is a must-alias,
+/// Represents a read-write access to memory, whether it is a must-alias,
 /// or a may-alias.
 ///
 /// In particular, the set of Instructions that will be represented by
@@ -424,7 +424,7 @@
 struct OperandTraits<MemoryDef> : public FixedNumOperandTraits<MemoryDef, 1> {};
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryDef, MemoryAccess)
 
-/// \brief Represents phi nodes for memory accesses.
+/// Represents phi nodes for memory accesses.
 ///
 /// These have the same semantic as regular phi nodes, with the exception that
 /// only one phi will ever exist in a given basic block.
@@ -504,10 +504,10 @@
 
   const_op_range incoming_values() const { return operands(); }
 
-  /// \brief Return the number of incoming edges
+  /// Return the number of incoming edges
   unsigned getNumIncomingValues() const { return getNumOperands(); }
 
-  /// \brief Return incoming value number x
+  /// Return incoming value number x
   MemoryAccess *getIncomingValue(unsigned I) const { return getOperand(I); }
   void setIncomingValue(unsigned I, MemoryAccess *V) {
     assert(V && "PHI node got a null value!");
@@ -517,17 +517,17 @@
   static unsigned getOperandNumForIncomingValue(unsigned I) { return I; }
   static unsigned getIncomingValueNumForOperand(unsigned I) { return I; }
 
-  /// \brief Return incoming basic block number @p i.
+  /// Return incoming basic block number @p i.
   BasicBlock *getIncomingBlock(unsigned I) const { return block_begin()[I]; }
 
-  /// \brief Return incoming basic block corresponding
+  /// Return incoming basic block corresponding
   /// to an operand of the PHI.
   BasicBlock *getIncomingBlock(const Use &U) const {
     assert(this == U.getUser() && "Iterator doesn't point to PHI's Uses?");
     return getIncomingBlock(unsigned(&U - op_begin()));
   }
 
-  /// \brief Return incoming basic block corresponding
+  /// Return incoming basic block corresponding
   /// to value use iterator.
   BasicBlock *getIncomingBlock(MemoryAccess::const_user_iterator I) const {
     return getIncomingBlock(I.getUse());
@@ -538,7 +538,7 @@
     block_begin()[I] = BB;
   }
 
-  /// \brief Add an incoming value to the end of the PHI list
+  /// Add an incoming value to the end of the PHI list
   void addIncoming(MemoryAccess *V, BasicBlock *BB) {
     if (getNumOperands() == ReservedSpace)
       growOperands(); // Get more space!
@@ -548,7 +548,7 @@
     setIncomingBlock(getNumOperands() - 1, BB);
   }
 
-  /// \brief Return the first index of the specified basic
+  /// Return the first index of the specified basic
   /// block in the value list for this PHI.  Returns -1 if no instance.
   int getBasicBlockIndex(const BasicBlock *BB) const {
     for (unsigned I = 0, E = getNumOperands(); I != E; ++I)
@@ -557,12 +557,53 @@
     return -1;
   }
 
-  Value *getIncomingValueForBlock(const BasicBlock *BB) const {
+  MemoryAccess *getIncomingValueForBlock(const BasicBlock *BB) const {
     int Idx = getBasicBlockIndex(BB);
     assert(Idx >= 0 && "Invalid basic block argument!");
     return getIncomingValue(Idx);
   }
 
+  // After deleting incoming position I, the order of incoming may be changed.
+  void unorderedDeleteIncoming(unsigned I) {
+    unsigned E = getNumOperands();
+    assert(I < E && "Cannot remove out of bounds Phi entry.");
+    // MemoryPhi must have at least two incoming values, otherwise the MemoryPhi
+    // itself should be deleted.
+    assert(E >= 2 && "Cannot only remove incoming values in MemoryPhis with "
+                     "at least 2 values.");
+    setIncomingValue(I, getIncomingValue(E - 1));
+    setIncomingBlock(I, block_begin()[E - 1]);
+    setOperand(E - 1, nullptr);
+    block_begin()[E - 1] = nullptr;
+    setNumHungOffUseOperands(getNumOperands() - 1);
+  }
+
+  // After deleting entries that satisfy Pred, remaining entries may have
+  // changed order.
+  template <typename Fn> void unorderedDeleteIncomingIf(Fn &&Pred) {
+    for (unsigned I = 0, E = getNumOperands(); I != E; ++I)
+      if (Pred(getIncomingValue(I), getIncomingBlock(I))) {
+        unorderedDeleteIncoming(I);
+        E = getNumOperands();
+        --I;
+      }
+    assert(getNumOperands() >= 1 &&
+           "Cannot remove all incoming blocks in a MemoryPhi.");
+  }
+
+  // After deleting incoming block BB, the incoming blocks order may be changed.
+  void unorderedDeleteIncomingBlock(const BasicBlock *BB) {
+    unorderedDeleteIncomingIf(
+        [&](const MemoryAccess *, const BasicBlock *B) { return BB == B; });
+  }
+
+  // After deleting incoming memory access MA, the incoming accesses order may
+  // be changed.
+  void unorderedDeleteIncomingValue(const MemoryAccess *MA) {
+    unorderedDeleteIncomingIf(
+        [&](const MemoryAccess *M, const BasicBlock *) { return MA == M; });
+  }
+
   static bool classof(const Value *V) {
     return V->getValueID() == MemoryPhiVal;
   }
@@ -574,7 +615,7 @@
 protected:
   friend class MemorySSA;
 
-  /// \brief this is more complicated than the generic
+  /// this is more complicated than the generic
   /// User::allocHungoffUses, because we have to allocate Uses for the incoming
   /// values and pointers to the incoming blocks, all in one allocation.
   void allocHungoffUses(unsigned N) {
@@ -586,7 +627,7 @@
   const unsigned ID;
   unsigned ReservedSpace;
 
-  /// \brief This grows the operand list in response to a push_back style of
+  /// This grows the operand list in response to a push_back style of
   /// operation.  This grows the number of ops by 1.5 times.
   void growOperands() {
     unsigned E = getNumOperands();
@@ -635,7 +676,7 @@
 template <> struct OperandTraits<MemoryPhi> : public HungoffOperandTraits<2> {};
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(MemoryPhi, MemoryAccess)
 
-/// \brief Encapsulates MemorySSA, including all data associated with memory
+/// Encapsulates MemorySSA, including all data associated with memory
 /// accesses.
 class MemorySSA {
 public:
@@ -644,7 +685,7 @@
 
   MemorySSAWalker *getWalker();
 
-  /// \brief Given a memory Mod/Ref'ing instruction, get the MemorySSA
+  /// Given a memory Mod/Ref'ing instruction, get the MemorySSA
   /// access associated with it. If passed a basic block gets the memory phi
   /// node that exists for that block, if there is one. Otherwise, this will get
   /// a MemoryUseOrDef.
@@ -654,7 +695,7 @@
   void dump() const;
   void print(raw_ostream &) const;
 
-  /// \brief Return true if \p MA represents the live on entry value
+  /// Return true if \p MA represents the live on entry value
   ///
   /// Loads and stores from pointer arguments and other global values may be
   /// defined by memory operations that do not occur in the current function, so
@@ -678,14 +719,14 @@
   using DefsList =
       simple_ilist<MemoryAccess, ilist_tag<MSSAHelpers::DefsOnlyTag>>;
 
-  /// \brief Return the list of MemoryAccess's for a given basic block.
+  /// Return the list of MemoryAccess's for a given basic block.
   ///
   /// This list is not modifiable by the user.
   const AccessList *getBlockAccesses(const BasicBlock *BB) const {
     return getWritableBlockAccesses(BB);
   }
 
-  /// \brief Return the list of MemoryDef's and MemoryPhi's for a given basic
+  /// Return the list of MemoryDef's and MemoryPhi's for a given basic
   /// block.
   ///
   /// This list is not modifiable by the user.
@@ -693,19 +734,19 @@
     return getWritableBlockDefs(BB);
   }
 
-  /// \brief Given two memory accesses in the same basic block, determine
+  /// Given two memory accesses in the same basic block, determine
   /// whether MemoryAccess \p A dominates MemoryAccess \p B.
   bool locallyDominates(const MemoryAccess *A, const MemoryAccess *B) const;
 
-  /// \brief Given two memory accesses in potentially different blocks,
+  /// Given two memory accesses in potentially different blocks,
   /// determine whether MemoryAccess \p A dominates MemoryAccess \p B.
   bool dominates(const MemoryAccess *A, const MemoryAccess *B) const;
 
-  /// \brief Given a MemoryAccess and a Use, determine whether MemoryAccess \p A
+  /// Given a MemoryAccess and a Use, determine whether MemoryAccess \p A
   /// dominates Use \p B.
   bool dominates(const MemoryAccess *A, const Use &B) const;
 
-  /// \brief Verify that MemorySSA is self consistent (IE definitions dominate
+  /// Verify that MemorySSA is self consistent (IE definitions dominate
   /// all uses, uses appear in the right places).  This is used by unit tests.
   void verifyMemorySSA() const;
 
@@ -722,6 +763,7 @@
   void verifyDefUses(Function &F) const;
   void verifyDomination(Function &F) const;
   void verifyOrdering(Function &F) const;
+  void verifyDominationNumbers(const Function &F) const;
 
   // This is used by the use optimizer and updater.
   AccessList *getWritableBlockAccesses(const BasicBlock *BB) const {
@@ -740,7 +782,7 @@
   // relies on the updater to fixup what it breaks, so it is not public.
 
   void moveTo(MemoryUseOrDef *What, BasicBlock *BB, AccessList::iterator Where);
-  void moveTo(MemoryUseOrDef *What, BasicBlock *BB, InsertionPlace Point);
+  void moveTo(MemoryAccess *What, BasicBlock *BB, InsertionPlace Point);
 
   // Rename the dominator tree branch rooted at BB.
   void renamePass(BasicBlock *BB, MemoryAccess *IncomingVal,
@@ -776,8 +818,7 @@
   MemoryPhi *createMemoryPhi(BasicBlock *BB);
   MemoryUseOrDef *createNewAccess(Instruction *);
   MemoryAccess *findDominatingDef(BasicBlock *, enum InsertionPlace);
-  void placePHINodes(const SmallPtrSetImpl<BasicBlock *> &,
-                     const DenseMap<const BasicBlock *, unsigned int> &);
+  void placePHINodes(const SmallPtrSetImpl<BasicBlock *> &);
   MemoryAccess *renameBlock(BasicBlock *, MemoryAccess *, bool);
   void renameSuccessorPhis(BasicBlock *, MemoryAccess *, bool);
   void renamePass(DomTreeNode *, MemoryAccess *IncomingVal,
@@ -859,7 +900,7 @@
   Result run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for \c MemorySSA.
+/// Printer pass for \c MemorySSA.
 class MemorySSAPrinterPass : public PassInfoMixin<MemorySSAPrinterPass> {
   raw_ostream &OS;
 
@@ -869,12 +910,12 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Verifier pass for \c MemorySSA.
+/// Verifier pass for \c MemorySSA.
 struct MemorySSAVerifierPass : PassInfoMixin<MemorySSAVerifierPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Legacy analysis pass which computes \c MemorySSA.
+/// Legacy analysis pass which computes \c MemorySSA.
 class MemorySSAWrapperPass : public FunctionPass {
 public:
   MemorySSAWrapperPass();
@@ -895,7 +936,7 @@
   std::unique_ptr<MemorySSA> MSSA;
 };
 
-/// \brief This is the generic walker interface for walkers of MemorySSA.
+/// This is the generic walker interface for walkers of MemorySSA.
 /// Walkers are used to be able to further disambiguate the def-use chains
 /// MemorySSA gives you, or otherwise produce better info than MemorySSA gives
 /// you.
@@ -913,7 +954,7 @@
 
   using MemoryAccessSet = SmallVector<MemoryAccess *, 8>;
 
-  /// \brief Given a memory Mod/Ref/ModRef'ing instruction, calling this
+  /// Given a memory Mod/Ref/ModRef'ing instruction, calling this
   /// will give you the nearest dominating MemoryAccess that Mod's the location
   /// the instruction accesses (by skipping any def which AA can prove does not
   /// alias the location(s) accessed by the instruction given).
@@ -945,7 +986,7 @@
   /// but takes a MemoryAccess instead of an Instruction.
   virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *) = 0;
 
-  /// \brief Given a potentially clobbering memory access and a new location,
+  /// Given a potentially clobbering memory access and a new location,
   /// calling this will give you the nearest dominating clobbering MemoryAccess
   /// (by skipping non-aliasing def links).
   ///
@@ -959,7 +1000,7 @@
   virtual MemoryAccess *getClobberingMemoryAccess(MemoryAccess *,
                                                   const MemoryLocation &) = 0;
 
-  /// \brief Given a memory access, invalidate anything this walker knows about
+  /// Given a memory access, invalidate anything this walker knows about
   /// that access.
   /// This API is used by walkers that store information to perform basic cache
   /// invalidation.  This will be called by MemorySSA at appropriate times for
@@ -974,7 +1015,7 @@
   MemorySSA *MSSA;
 };
 
-/// \brief A MemorySSAWalker that does no alias queries, or anything else. It
+/// A MemorySSAWalker that does no alias queries, or anything else. It
 /// simply returns the links as they were constructed by the builder.
 class DoNothingMemorySSAWalker final : public MemorySSAWalker {
 public:
@@ -990,7 +1031,7 @@
 using MemoryAccessPair = std::pair<MemoryAccess *, MemoryLocation>;
 using ConstMemoryAccessPair = std::pair<const MemoryAccess *, MemoryLocation>;
 
-/// \brief Iterator base class used to implement const and non-const iterators
+/// Iterator base class used to implement const and non-const iterators
 /// over the defining accesses of a MemoryAccess.
 template <class T>
 class memoryaccess_def_iterator_base
@@ -1063,7 +1104,7 @@
   return const_memoryaccess_def_iterator();
 }
 
-/// \brief GraphTraits for a MemoryAccess, which walks defs in the normal case,
+/// GraphTraits for a MemoryAccess, which walks defs in the normal case,
 /// and uses in the inverse case.
 template <> struct GraphTraits<MemoryAccess *> {
   using NodeRef = MemoryAccess *;
@@ -1083,7 +1124,7 @@
   static ChildIteratorType child_end(NodeRef N) { return N->user_end(); }
 };
 
-/// \brief Provide an iterator that walks defs, giving both the memory access,
+/// Provide an iterator that walks defs, giving both the memory access,
 /// and the current pointer location, updating the pointer location as it
 /// changes due to phi node translation.
 ///
diff --git a/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h b/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
index 3f4ef06..38f08c1 100644
--- a/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
+++ b/linux-x64/clang/include/llvm/Analysis/MemorySSAUpdater.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 // \file
-// \brief An automatic updater for MemorySSA that handles arbitrary insertion,
+// An automatic updater for MemorySSA that handles arbitrary insertion,
 // deletion, and moves.  It performs phi insertion where necessary, and
 // automatically updates the MemorySSA IR to be correct.
 // While updating loads or removing instructions is often easy enough to not
@@ -33,6 +33,7 @@
 #define LLVM_ANALYSIS_MEMORYSSAUPDATER_H
 
 #include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Analysis/MemorySSA.h"
 #include "llvm/IR/BasicBlock.h"
@@ -59,8 +60,13 @@
 class MemorySSAUpdater {
 private:
   MemorySSA *MSSA;
-  SmallVector<MemoryPhi *, 8> InsertedPHIs;
+
+  /// We use WeakVH rather than a costly deletion to deal with dangling pointers.
+  /// MemoryPhis are created eagerly and sometimes get zapped shortly afterwards.
+  SmallVector<WeakVH, 16> InsertedPHIs;
+
   SmallPtrSet<BasicBlock *, 8> VisitedBlocks;
+  SmallSet<AssertingVH<MemoryPhi>, 8> NonOptPhis;
 
 public:
   MemorySSAUpdater(MemorySSA *MSSA) : MSSA(MSSA) {}
@@ -87,6 +93,45 @@
   void moveAfter(MemoryUseOrDef *What, MemoryUseOrDef *Where);
   void moveToPlace(MemoryUseOrDef *What, BasicBlock *BB,
                    MemorySSA::InsertionPlace Where);
+  /// `From` block was spliced into `From` and `To`.
+  /// Move all accesses from `From` to `To` starting at instruction `Start`.
+  /// `To` is newly created BB, so empty of MemorySSA::MemoryAccesses.
+  /// Edges are already updated, so successors of `To` with MPhi nodes need to
+  /// update incoming block.
+  /// |------|        |------|
+  /// | From |        | From |
+  /// |      |        |------|
+  /// |      |           ||
+  /// |      |   =>      \/
+  /// |      |        |------|  <- Start
+  /// |      |        |  To  |
+  /// |------|        |------|
+  void moveAllAfterSpliceBlocks(BasicBlock *From, BasicBlock *To,
+                                Instruction *Start);
+  /// `From` block was merged into `To`. All instructions were moved and
+  /// `From` is an empty block with successor edges; `From` is about to be
+  /// deleted. Move all accesses from `From` to `To` starting at instruction
+  /// `Start`. `To` may have multiple successors, `From` has a single
+  /// predecessor. `From` may have successors with MPhi nodes, replace their
+  /// incoming block with `To`.
+  /// |------|        |------|
+  /// |  To  |        |  To  |
+  /// |------|        |      |
+  ///    ||      =>   |      |
+  ///    \/           |      |
+  /// |------|        |      |  <- Start
+  /// | From |        |      |
+  /// |------|        |------|
+  void moveAllAfterMergeBlocks(BasicBlock *From, BasicBlock *To,
+                               Instruction *Start);
+  /// BasicBlock Old had New, an empty BasicBlock, added directly before it,
+  /// and the predecessors in Preds that used to point to Old, now point to
+  /// New. If New is the only predecessor, move Old's Phi, if present, to New.
+  /// Otherwise, add a new Phi in New with appropriate incoming values, and
+  /// update the incoming values in Old's Phi node too, if present.
+  void
+  wireOldPredecessorsToNewImmediatePredecessor(BasicBlock *Old, BasicBlock *New,
+                                               ArrayRef<BasicBlock *> Preds);
 
   // The below are utility functions. Other than creation of accesses to pass
   // to insertDef, and removeAccess to remove accesses, you should generally
@@ -94,7 +139,7 @@
   // the edge cases right, and the above calls already operate in near-optimal
   // time bounds.
 
-  /// \brief Create a MemoryAccess in MemorySSA at a specified point in a block,
+  /// Create a MemoryAccess in MemorySSA at a specified point in a block,
   /// with a specified clobbering definition.
   ///
   /// Returns the new MemoryAccess.
@@ -111,7 +156,7 @@
                                        const BasicBlock *BB,
                                        MemorySSA::InsertionPlace Point);
 
-  /// \brief Create a MemoryAccess in MemorySSA before or after an existing
+  /// Create a MemoryAccess in MemorySSA before or after an existing
   /// MemoryAccess.
   ///
   /// Returns the new MemoryAccess.
@@ -128,7 +173,7 @@
                                           MemoryAccess *Definition,
                                           MemoryAccess *InsertPt);
 
-  /// \brief Remove a MemoryAccess from MemorySSA, including updating all
+  /// Remove a MemoryAccess from MemorySSA, including updating all
   /// definitions and uses.
   /// This should be called when a memory instruction that has a MemoryAccess
   /// associated with it is erased from the program.  For example, if a store or
@@ -136,10 +181,33 @@
   /// on the MemoryAccess for that store/load.
   void removeMemoryAccess(MemoryAccess *);
 
+  /// Remove MemoryAccess for a given instruction, if a MemoryAccess exists.
+  /// This should be called when an instruction (load/store) is deleted from
+  /// the program.
+  void removeMemoryAccess(const Instruction *I) {
+    if (MemoryAccess *MA = MSSA->getMemoryAccess(I))
+      removeMemoryAccess(MA);
+  }
+
+  /// Remove all MemoryAcceses in a set of BasicBlocks about to be deleted.
+  /// Assumption we make here: all uses of deleted defs and phi must either
+  /// occur in blocks about to be deleted (thus will be deleted as well), or
+  /// they occur in phis that will simply lose an incoming value.
+  /// Deleted blocks still have successor info, but their predecessor edges and
+  /// Phi nodes may already be updated. Instructions in DeadBlocks should be
+  /// deleted after this call.
+  void removeBlocks(const SmallPtrSetImpl<BasicBlock *> &DeadBlocks);
+
+  /// Get handle on MemorySSA.
+  MemorySSA* getMemorySSA() const { return MSSA; }
+
 private:
   // Move What before Where in the MemorySSA IR.
   template <class WhereType>
   void moveTo(MemoryUseOrDef *What, BasicBlock *BB, WhereType Where);
+  // Move all memory accesses from `From` to `To` starting at `Start`.
+  // Restrictions apply, see public wrappers of this method.
+  void moveAllAccesses(BasicBlock *From, BasicBlock *To, Instruction *Start);
   MemoryAccess *getPreviousDef(MemoryAccess *);
   MemoryAccess *getPreviousDefInBlock(MemoryAccess *);
   MemoryAccess *
@@ -151,7 +219,7 @@
   MemoryAccess *recursePhi(MemoryAccess *Phi);
   template <class RangeType>
   MemoryAccess *tryRemoveTrivialPhi(MemoryPhi *Phi, RangeType &Operands);
-  void fixupDefs(const SmallVectorImpl<MemoryAccess *> &);
+  void fixupDefs(const SmallVectorImpl<WeakVH> &);
 };
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Analysis/MustExecute.h b/linux-x64/clang/include/llvm/Analysis/MustExecute.h
index fb48bb6..97ad76d 100644
--- a/linux-x64/clang/include/llvm/Analysis/MustExecute.h
+++ b/linux-x64/clang/include/llvm/Analysis/MustExecute.h
@@ -10,7 +10,7 @@
 /// Contains a collection of routines for determining if a given instruction is
 /// guaranteed to execute if a given point in control flow is reached.  The most
 /// common example is an instruction within a loop being provably executed if we
-/// branch to the header of it's containing loop.  
+/// branch to the header of it's containing loop.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -30,7 +30,7 @@
 class DominatorTree;
 class Loop;
 
-/// \brief Captures loop safety information.
+/// Captures loop safety information.
 /// It keep information for loop & its header may throw exception or otherwise
 /// exit abnormaly on any iteration of the loop which might actually execute
 /// at runtime.  The primary way to consume this infromation is via
@@ -46,7 +46,7 @@
   LoopSafetyInfo() = default;
 };
 
-/// \brief Computes safety information for a loop checks loop body & header for
+/// Computes safety information for a loop checks loop body & header for
 /// the possibility of may throw exception, it takes LoopSafetyInfo and loop as
 /// argument. Updates safety information in LoopSafetyInfo argument.
 /// Note: This is defined to clear and reinitialize an already initialized
@@ -58,7 +58,7 @@
 bool isGuaranteedToExecute(const Instruction &Inst, const DominatorTree *DT,
                            const Loop *CurLoop,
                            const LoopSafetyInfo *SafetyInfo);
-  
+
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h b/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
index db524ff..559c77c 100644
--- a/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
+++ b/linux-x64/clang/include/llvm/Analysis/ObjCARCAliasAnalysis.h
@@ -29,7 +29,7 @@
 namespace llvm {
 namespace objcarc {
 
-/// \brief This is a simple alias analysis implementation that uses knowledge
+/// This is a simple alias analysis implementation that uses knowledge
 /// of ARC constructs to answer queries.
 ///
 /// TODO: This class could be generalized to know about other ObjC-specific
diff --git a/linux-x64/clang/include/llvm/Analysis/ObjCARCAnalysisUtils.h b/linux-x64/clang/include/llvm/Analysis/ObjCARCAnalysisUtils.h
index 096573f..07beb0b 100644
--- a/linux-x64/clang/include/llvm/Analysis/ObjCARCAnalysisUtils.h
+++ b/linux-x64/clang/include/llvm/Analysis/ObjCARCAnalysisUtils.h
@@ -34,6 +34,7 @@
 #include "llvm/IR/InstIterator.h"
 #include "llvm/IR/LLVMContext.h"
 #include "llvm/IR/Module.h"
+#include "llvm/IR/ValueHandle.h"
 #include "llvm/Pass.h"
 
 namespace llvm {
@@ -43,10 +44,10 @@
 namespace llvm {
 namespace objcarc {
 
-/// \brief A handy option to enable/disable all ARC Optimizations.
+/// A handy option to enable/disable all ARC Optimizations.
 extern bool EnableARCOpts;
 
-/// \brief Test if the given module looks interesting to run ARC optimization
+/// Test if the given module looks interesting to run ARC optimization
 /// on.
 inline bool ModuleHasARC(const Module &M) {
   return
@@ -71,7 +72,7 @@
     M.getNamedValue("clang.arc.use");
 }
 
-/// \brief This is a wrapper around getUnderlyingObject which also knows how to
+/// This is a wrapper around getUnderlyingObject which also knows how to
 /// look through objc_retain and objc_autorelease calls, which we know to return
 /// their argument verbatim.
 inline const Value *GetUnderlyingObjCPtr(const Value *V,
@@ -89,11 +90,13 @@
 /// A wrapper for GetUnderlyingObjCPtr used for results memoization.
 inline const Value *
 GetUnderlyingObjCPtrCached(const Value *V, const DataLayout &DL,
-                           DenseMap<const Value *, const Value *> &Cache) {
+                           DenseMap<const Value *, WeakTrackingVH> &Cache) {
   if (auto InCache = Cache.lookup(V))
     return InCache;
 
-  return Cache[V] = GetUnderlyingObjCPtr(V, DL);
+  const Value *Computed = GetUnderlyingObjCPtr(V, DL);
+  Cache[V] = const_cast<Value *>(Computed);
+  return Computed;
 }
 
 /// The RCIdentity root of a value \p V is a dominating value U for which
@@ -129,7 +132,7 @@
   return const_cast<Value *>(GetRCIdentityRoot((const Value *)V));
 }
 
-/// \brief Assuming the given instruction is one of the special calls such as
+/// Assuming the given instruction is one of the special calls such as
 /// objc_retain or objc_release, return the RCIdentity root of the argument of
 /// the call.
 inline Value *GetArgRCIdentityRoot(Value *Inst) {
@@ -146,7 +149,7 @@
      cast<GetElementPtrInst>(I)->hasAllZeroIndices());
 }
 
-/// \brief Test whether the given value is possible a retainable object pointer.
+/// Test whether the given value is possible a retainable object pointer.
 inline bool IsPotentialRetainableObjPtr(const Value *Op) {
   // Pointers to static or stack storage are not valid retainable object
   // pointers.
@@ -191,7 +194,7 @@
   return true;
 }
 
-/// \brief Helper for GetARCInstKind. Determines what kind of construct CS
+/// Helper for GetARCInstKind. Determines what kind of construct CS
 /// is.
 inline ARCInstKind GetCallSiteClass(ImmutableCallSite CS) {
   for (ImmutableCallSite::arg_iterator I = CS.arg_begin(), E = CS.arg_end();
@@ -202,7 +205,7 @@
   return CS.onlyReadsMemory() ? ARCInstKind::None : ARCInstKind::Call;
 }
 
-/// \brief Return true if this value refers to a distinct and identifiable
+/// Return true if this value refers to a distinct and identifiable
 /// object.
 ///
 /// This is similar to AliasAnalysis's isIdentifiedObject, except that it uses
diff --git a/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h b/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
index 02ff035..0b92d8b 100644
--- a/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
+++ b/linux-x64/clang/include/llvm/Analysis/ObjCARCInstKind.h
@@ -18,7 +18,7 @@
 
 /// \enum ARCInstKind
 ///
-/// \brief Equivalence classes of instructions in the ARC Model.
+/// Equivalence classes of instructions in the ARC Model.
 ///
 /// Since we do not have "instructions" to represent ARC concepts in LLVM IR,
 /// we instead operate on equivalence classes of instructions.
@@ -57,32 +57,32 @@
 
 raw_ostream &operator<<(raw_ostream &OS, const ARCInstKind Class);
 
-/// \brief Test if the given class is a kind of user.
+/// Test if the given class is a kind of user.
 bool IsUser(ARCInstKind Class);
 
-/// \brief Test if the given class is objc_retain or equivalent.
+/// Test if the given class is objc_retain or equivalent.
 bool IsRetain(ARCInstKind Class);
 
-/// \brief Test if the given class is objc_autorelease or equivalent.
+/// Test if the given class is objc_autorelease or equivalent.
 bool IsAutorelease(ARCInstKind Class);
 
-/// \brief Test if the given class represents instructions which return their
+/// Test if the given class represents instructions which return their
 /// argument verbatim.
 bool IsForwarding(ARCInstKind Class);
 
-/// \brief Test if the given class represents instructions which do nothing if
+/// Test if the given class represents instructions which do nothing if
 /// passed a null pointer.
 bool IsNoopOnNull(ARCInstKind Class);
 
-/// \brief Test if the given class represents instructions which are always safe
+/// Test if the given class represents instructions which are always safe
 /// to mark with the "tail" keyword.
 bool IsAlwaysTail(ARCInstKind Class);
 
-/// \brief Test if the given class represents instructions which are never safe
+/// Test if the given class represents instructions which are never safe
 /// to mark with the "tail" keyword.
 bool IsNeverTail(ARCInstKind Class);
 
-/// \brief Test if the given class represents instructions which are always safe
+/// Test if the given class represents instructions which are always safe
 /// to mark with the nounwind attribute.
 bool IsNoThrow(ARCInstKind Class);
 
@@ -90,11 +90,11 @@
 /// autoreleasepool pop.
 bool CanInterruptRV(ARCInstKind Class);
 
-/// \brief Determine if F is one of the special known Functions.  If it isn't,
+/// Determine if F is one of the special known Functions.  If it isn't,
 /// return ARCInstKind::CallOrUser.
 ARCInstKind GetFunctionClass(const Function *F);
 
-/// \brief Determine which objc runtime call instruction class V belongs to.
+/// Determine which objc runtime call instruction class V belongs to.
 ///
 /// This is similar to GetARCInstKind except that it only detects objc
 /// runtime calls. This allows it to be faster.
diff --git a/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h b/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
index 26f32ac..fa83869 100644
--- a/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
+++ b/linux-x64/clang/include/llvm/Analysis/OptimizationRemarkEmitter.h
@@ -40,7 +40,7 @@
   OptimizationRemarkEmitter(const Function *F, BlockFrequencyInfo *BFI)
       : F(F), BFI(BFI) {}
 
-  /// \brief This variant can be used to generate ORE on demand (without the
+  /// This variant can be used to generate ORE on demand (without the
   /// analysis pass).
   ///
   /// Note that this ctor has a very different cost depending on whether
@@ -66,11 +66,11 @@
   bool invalidate(Function &F, const PreservedAnalyses &PA,
                   FunctionAnalysisManager::Invalidator &Inv);
 
-  /// \brief Output the remark via the diagnostic handler and to the
+  /// Output the remark via the diagnostic handler and to the
   /// optimization record file.
   void emit(DiagnosticInfoOptimizationBase &OptDiag);
 
-  /// \brief Take a lambda that returns a remark which will be emitted.  Second
+  /// Take a lambda that returns a remark which will be emitted.  Second
   /// argument is only used to restrict this to functions.
   template <typename T>
   void emit(T RemarkBuilder, decltype(RemarkBuilder()) * = nullptr) {
@@ -85,7 +85,7 @@
     }
   }
 
-  /// \brief Whether we allow for extra compile-time budget to perform more
+  /// Whether we allow for extra compile-time budget to perform more
   /// analysis to produce fewer false positives.
   ///
   /// This is useful when reporting missed optimizations.  In this case we can
@@ -112,7 +112,7 @@
   /// Similar but use value from \p OptDiag and update hotness there.
   void computeHotness(DiagnosticInfoIROptimization &OptDiag);
 
-  /// \brief Only allow verbose messages if we know we're filtering by hotness
+  /// Only allow verbose messages if we know we're filtering by hotness
   /// (BFI is only set in this case).
   bool shouldEmitVerbose() { return BFI != nullptr; }
 
@@ -120,7 +120,7 @@
   void operator=(const OptimizationRemarkEmitter &) = delete;
 };
 
-/// \brief Add a small namespace to avoid name clashes with the classes used in
+/// Add a small namespace to avoid name clashes with the classes used in
 /// the streaming interface.  We want these to be short for better
 /// write/readability.
 namespace ore {
@@ -158,10 +158,10 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result typedef for this analysis pass.
+  /// Provide the result typedef for this analysis pass.
   typedef OptimizationRemarkEmitter Result;
 
-  /// \brief Run the analysis pass over a function and produce BFI.
+  /// Run the analysis pass over a function and produce BFI.
   Result run(Function &F, FunctionAnalysisManager &AM);
 };
 }
diff --git a/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h b/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
index 2e716af..0776aa6 100644
--- a/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
+++ b/linux-x64/clang/include/llvm/Analysis/OrderedBasicBlock.h
@@ -33,28 +33,28 @@
 
 class OrderedBasicBlock {
 private:
-  /// \brief Map a instruction to its position in a BasicBlock.
+  /// Map a instruction to its position in a BasicBlock.
   SmallDenseMap<const Instruction *, unsigned, 32> NumberedInsts;
 
-  /// \brief Keep track of last instruction inserted into \p NumberedInsts.
+  /// Keep track of last instruction inserted into \p NumberedInsts.
   /// It speeds up queries for uncached instructions by providing a start point
   /// for new queries in OrderedBasicBlock::comesBefore.
   BasicBlock::const_iterator LastInstFound;
 
-  /// \brief The position/number to tag the next instruction to be found.
+  /// The position/number to tag the next instruction to be found.
   unsigned NextInstPos;
 
-  /// \brief The source BasicBlock to map.
+  /// The source BasicBlock to map.
   const BasicBlock *BB;
 
-  /// \brief Given no cached results, find if \p A comes before \p B in \p BB.
+  /// Given no cached results, find if \p A comes before \p B in \p BB.
   /// Cache and number out instruction while walking \p BB.
   bool comesBefore(const Instruction *A, const Instruction *B);
 
 public:
   OrderedBasicBlock(const BasicBlock *BasicB);
 
-  /// \brief Find out whether \p A dominates \p B, meaning whether \p A
+  /// Find out whether \p A dominates \p B, meaning whether \p A
   /// comes before \p B in \p BB. This is a simplification that considers
   /// cached instruction positions and ignores other basic blocks, being
   /// only relevant to compare relative instructions positions inside \p BB.
diff --git a/linux-x64/clang/include/llvm/Analysis/PHITransAddr.h b/linux-x64/clang/include/llvm/Analysis/PHITransAddr.h
index f0f34f3..0a335b6 100644
--- a/linux-x64/clang/include/llvm/Analysis/PHITransAddr.h
+++ b/linux-x64/clang/include/llvm/Analysis/PHITransAddr.h
@@ -43,7 +43,7 @@
   /// TLI - The target library info if known, otherwise null.
   const TargetLibraryInfo *TLI;
 
-  /// A cache of @llvm.assume calls used by SimplifyInstruction.
+  /// A cache of \@llvm.assume calls used by SimplifyInstruction.
   AssumptionCache *AC;
 
   /// InstInputs - The inputs for our symbolic address.
diff --git a/linux-x64/clang/include/llvm/Analysis/PhiValues.h b/linux-x64/clang/include/llvm/Analysis/PhiValues.h
new file mode 100644
index 0000000..6607b32
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Analysis/PhiValues.h
@@ -0,0 +1,143 @@
+//===- PhiValues.h - Phi Value Analysis -------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the PhiValues class, and associated passes, which can be
+// used to find the underlying values of the phis in a function, i.e. the
+// non-phi values that can be found by traversing the phi graph.
+//
+// This information is computed lazily and cached. If new phis are added to the
+// function they are handled correctly, but if an existing phi has its operands
+// modified PhiValues has to be notified by calling invalidateValue.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_ANALYSIS_PHIVALUES_H
+#define LLVM_ANALYSIS_PHIVALUES_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/IR/PassManager.h"
+#include "llvm/IR/ValueHandle.h"
+#include "llvm/Pass.h"
+
+namespace llvm {
+
+class Use;
+class Value;
+class PHINode;
+class Function;
+
+/// Class for calculating and caching the underlying values of phis in a
+/// function.
+///
+/// Initially the PhiValues is empty, and gets incrementally populated whenever
+/// it is queried.
+class PhiValues {
+public:
+  using ValueSet = SmallPtrSet<Value *, 4>;
+
+  /// Construct an empty PhiValues.
+  PhiValues(const Function &F) : F(F) {}
+
+  /// Get the underlying values of a phi.
+  ///
+  /// This returns the cached value if PN has previously been processed,
+  /// otherwise it processes it first.
+  const ValueSet &getValuesForPhi(const PHINode *PN);
+
+  /// Notify PhiValues that the cached information using V is no longer valid
+  ///
+  /// Whenever a phi has its operands modified the cached values for that phi
+  /// (and the phis that use that phi) become invalid. A user of PhiValues has
+  /// to notify it of this by calling invalidateValue on either the operand or
+  /// the phi, which will then clear the relevant cached information.
+  void invalidateValue(const Value *V);
+
+  /// Free the memory used by this class.
+  void releaseMemory();
+
+  /// Print out the values currently in the cache.
+  void print(raw_ostream &OS) const;
+
+  /// Handle invalidation events in the new pass manager.
+  bool invalidate(Function &, const PreservedAnalyses &,
+                  FunctionAnalysisManager::Invalidator &);
+
+private:
+  using PhiSet = SmallPtrSet<const PHINode *, 4>;
+  using ConstValueSet = SmallPtrSet<const Value *, 4>;
+
+  /// The next depth number to be used by processPhi.
+  unsigned int NextDepthNumber = 1;
+
+  /// Depth numbers of phis. Phis with the same depth number are part of the
+  /// same strongly connected component.
+  DenseMap<const PHINode *, unsigned int> DepthMap;
+
+  /// Non-phi values reachable from each component.
+  DenseMap<unsigned int, ValueSet> NonPhiReachableMap;
+
+  /// All values reachable from each component.
+  DenseMap<unsigned int, ConstValueSet> ReachableMap;
+
+  /// The function that the PhiValues is for.
+  const Function &F;
+
+  /// Process a phi so that its entries in the depth and reachable maps are
+  /// fully populated.
+  void processPhi(const PHINode *PN, SmallVector<const PHINode *, 8> &Stack);
+};
+
+/// The analysis pass which yields a PhiValues
+///
+/// The analysis does nothing by itself, and just returns an empty PhiValues
+/// which will get filled in as it's used.
+class PhiValuesAnalysis : public AnalysisInfoMixin<PhiValuesAnalysis> {
+  friend AnalysisInfoMixin<PhiValuesAnalysis>;
+  static AnalysisKey Key;
+
+public:
+  using Result = PhiValues;
+  PhiValues run(Function &F, FunctionAnalysisManager &);
+};
+
+/// A pass for printing the PhiValues for a function.
+///
+/// This pass doesn't print whatever information the PhiValues happens to hold,
+/// but instead first uses the PhiValues to analyze all the phis in the function
+/// so the complete information is printed.
+class PhiValuesPrinterPass : public PassInfoMixin<PhiValuesPrinterPass> {
+  raw_ostream &OS;
+
+public:
+  explicit PhiValuesPrinterPass(raw_ostream &OS) : OS(OS) {}
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
+/// Wrapper pass for the legacy pass manager
+class PhiValuesWrapperPass : public FunctionPass {
+  std::unique_ptr<PhiValues> Result;
+
+public:
+  static char ID;
+  PhiValuesWrapperPass();
+
+  PhiValues &getResult() { return *Result; }
+  const PhiValues &getResult() const { return *Result; }
+
+  bool runOnFunction(Function &F) override;
+  void releaseMemory() override;
+  void getAnalysisUsage(AnalysisUsage &AU) const override;
+};
+
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Analysis/PostDominators.h b/linux-x64/clang/include/llvm/Analysis/PostDominators.h
index 9a8c4d7..f2dc8d1 100644
--- a/linux-x64/clang/include/llvm/Analysis/PostDominators.h
+++ b/linux-x64/clang/include/llvm/Analysis/PostDominators.h
@@ -30,12 +30,14 @@
 public:
   using Base = PostDomTreeBase<BasicBlock>;
 
+  PostDominatorTree() = default;
+  explicit PostDominatorTree(Function &F) { recalculate(F); }
   /// Handle invalidation explicitly.
   bool invalidate(Function &F, const PreservedAnalyses &PA,
                   FunctionAnalysisManager::Invalidator &);
 };
 
-/// \brief Analysis pass which computes a \c PostDominatorTree.
+/// Analysis pass which computes a \c PostDominatorTree.
 class PostDominatorTreeAnalysis
     : public AnalysisInfoMixin<PostDominatorTreeAnalysis> {
   friend AnalysisInfoMixin<PostDominatorTreeAnalysis>;
@@ -43,15 +45,15 @@
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result type for this analysis pass.
+  /// Provide the result type for this analysis pass.
   using Result = PostDominatorTree;
 
-  /// \brief Run the analysis pass over a function and produce a post dominator
+  /// Run the analysis pass over a function and produce a post dominator
   ///        tree.
   PostDominatorTree run(Function &F, FunctionAnalysisManager &);
 };
 
-/// \brief Printer pass for the \c PostDominatorTree.
+/// Printer pass for the \c PostDominatorTree.
 class PostDominatorTreePrinterPass
     : public PassInfoMixin<PostDominatorTreePrinterPass> {
   raw_ostream &OS;
diff --git a/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h b/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
index 2930334..58b67e7 100644
--- a/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/ProfileSummaryInfo.h
@@ -31,7 +31,7 @@
 class BlockFrequencyInfo;
 class CallSite;
 class ProfileSummary;
-/// \brief Analysis providing profile information.
+/// Analysis providing profile information.
 ///
 /// This is an immutable analysis pass that provides ability to query global
 /// (program-level) profile information. The main APIs are isHotCount and
@@ -59,16 +59,16 @@
   ProfileSummaryInfo(ProfileSummaryInfo &&Arg)
       : M(Arg.M), Summary(std::move(Arg.Summary)) {}
 
-  /// \brief Returns true if profile summary is available.
+  /// Returns true if profile summary is available.
   bool hasProfileSummary() { return computeSummary(); }
 
-  /// \brief Returns true if module \c M has sample profile.
+  /// Returns true if module \c M has sample profile.
   bool hasSampleProfile() {
     return hasProfileSummary() &&
            Summary->getKind() == ProfileSummary::PSK_Sample;
   }
 
-  /// \brief Returns true if module \c M has instrumentation profile.
+  /// Returns true if module \c M has instrumentation profile.
   bool hasInstrumentationProfile() {
     return hasProfileSummary() &&
            Summary->getKind() == ProfileSummary::PSK_Instr;
@@ -90,31 +90,37 @@
                                      BlockFrequencyInfo *BFI);
   /// Returns true if the working set size of the code is considered huge.
   bool hasHugeWorkingSetSize();
-  /// \brief Returns true if \p F has hot function entry.
+  /// Returns true if \p F has hot function entry.
   bool isFunctionEntryHot(const Function *F);
   /// Returns true if \p F contains hot code.
   bool isFunctionHotInCallGraph(const Function *F, BlockFrequencyInfo &BFI);
-  /// \brief Returns true if \p F has cold function entry.
+  /// Returns true if \p F has cold function entry.
   bool isFunctionEntryCold(const Function *F);
   /// Returns true if \p F contains only cold code.
   bool isFunctionColdInCallGraph(const Function *F, BlockFrequencyInfo &BFI);
-  /// \brief Returns true if \p F is a hot function.
+  /// Returns true if \p F is a hot function.
   bool isHotCount(uint64_t C);
-  /// \brief Returns true if count \p C is considered cold.
+  /// Returns true if count \p C is considered cold.
   bool isColdCount(uint64_t C);
-  /// \brief Returns true if BasicBlock \p B is considered hot.
+  /// Returns true if BasicBlock \p B is considered hot.
   bool isHotBB(const BasicBlock *B, BlockFrequencyInfo *BFI);
-  /// \brief Returns true if BasicBlock \p B is considered cold.
+  /// Returns true if BasicBlock \p B is considered cold.
   bool isColdBB(const BasicBlock *B, BlockFrequencyInfo *BFI);
-  /// \brief Returns true if CallSite \p CS is considered hot.
+  /// Returns true if CallSite \p CS is considered hot.
   bool isHotCallSite(const CallSite &CS, BlockFrequencyInfo *BFI);
-  /// \brief Returns true if Callsite \p CS is considered cold.
+  /// Returns true if Callsite \p CS is considered cold.
   bool isColdCallSite(const CallSite &CS, BlockFrequencyInfo *BFI);
-  /// \brief Returns HotCountThreshold if set.
+  /// Returns HotCountThreshold if set. Recompute HotCountThreshold
+  /// if not set.
+  uint64_t getOrCompHotCountThreshold();
+  /// Returns ColdCountThreshold if set. Recompute HotCountThreshold
+  /// if not set.
+  uint64_t getOrCompColdCountThreshold();
+  /// Returns HotCountThreshold if set.
   uint64_t getHotCountThreshold() {
     return HotCountThreshold ? HotCountThreshold.getValue() : 0;
   }
-  /// \brief Returns ColdCountThreshold if set.
+  /// Returns ColdCountThreshold if set.
   uint64_t getColdCountThreshold() {
     return ColdCountThreshold ? ColdCountThreshold.getValue() : 0;
   }
@@ -152,7 +158,7 @@
   static AnalysisKey Key;
 };
 
-/// \brief Printer pass that uses \c ProfileSummaryAnalysis.
+/// Printer pass that uses \c ProfileSummaryAnalysis.
 class ProfileSummaryPrinterPass
     : public PassInfoMixin<ProfileSummaryPrinterPass> {
   raw_ostream &OS;
diff --git a/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h b/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
index f934aa6..b34b25c 100644
--- a/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
+++ b/linux-x64/clang/include/llvm/Analysis/PtrUseVisitor.h
@@ -47,7 +47,7 @@
 
 namespace detail {
 
-/// \brief Implementation of non-dependent functionality for \c PtrUseVisitor.
+/// Implementation of non-dependent functionality for \c PtrUseVisitor.
 ///
 /// See \c PtrUseVisitor for the public interface and detailed comments about
 /// usage. This class is just a helper base class which is not templated and
@@ -55,7 +55,7 @@
 /// PtrUseVisitor.
 class PtrUseVisitorBase {
 public:
-  /// \brief This class provides information about the result of a visit.
+  /// This class provides information about the result of a visit.
   ///
   /// After walking all the users (recursively) of a pointer, the basic
   /// infrastructure records some commonly useful information such as escape
@@ -64,7 +64,7 @@
   public:
     PtrInfo() : AbortedInfo(nullptr, false), EscapedInfo(nullptr, false) {}
 
-    /// \brief Reset the pointer info, clearing all state.
+    /// Reset the pointer info, clearing all state.
     void reset() {
       AbortedInfo.setPointer(nullptr);
       AbortedInfo.setInt(false);
@@ -72,37 +72,37 @@
       EscapedInfo.setInt(false);
     }
 
-    /// \brief Did we abort the visit early?
+    /// Did we abort the visit early?
     bool isAborted() const { return AbortedInfo.getInt(); }
 
-    /// \brief Is the pointer escaped at some point?
+    /// Is the pointer escaped at some point?
     bool isEscaped() const { return EscapedInfo.getInt(); }
 
-    /// \brief Get the instruction causing the visit to abort.
+    /// Get the instruction causing the visit to abort.
     /// \returns a pointer to the instruction causing the abort if one is
     /// available; otherwise returns null.
     Instruction *getAbortingInst() const { return AbortedInfo.getPointer(); }
 
-    /// \brief Get the instruction causing the pointer to escape.
+    /// Get the instruction causing the pointer to escape.
     /// \returns a pointer to the instruction which escapes the pointer if one
     /// is available; otherwise returns null.
     Instruction *getEscapingInst() const { return EscapedInfo.getPointer(); }
 
-    /// \brief Mark the visit as aborted. Intended for use in a void return.
+    /// Mark the visit as aborted. Intended for use in a void return.
     /// \param I The instruction which caused the visit to abort, if available.
     void setAborted(Instruction *I = nullptr) {
       AbortedInfo.setInt(true);
       AbortedInfo.setPointer(I);
     }
 
-    /// \brief Mark the pointer as escaped. Intended for use in a void return.
+    /// Mark the pointer as escaped. Intended for use in a void return.
     /// \param I The instruction which escapes the pointer, if available.
     void setEscaped(Instruction *I = nullptr) {
       EscapedInfo.setInt(true);
       EscapedInfo.setPointer(I);
     }
 
-    /// \brief Mark the pointer as escaped, and the visit as aborted. Intended
+    /// Mark the pointer as escaped, and the visit as aborted. Intended
     /// for use in a void return.
     /// \param I The instruction which both escapes the pointer and aborts the
     /// visit, if available.
@@ -121,10 +121,10 @@
   /// \name Visitation infrastructure
   /// @{
 
-  /// \brief The info collected about the pointer being visited thus far.
+  /// The info collected about the pointer being visited thus far.
   PtrInfo PI;
 
-  /// \brief A struct of the data needed to visit a particular use.
+  /// A struct of the data needed to visit a particular use.
   ///
   /// This is used to maintain a worklist fo to-visit uses. This is used to
   /// make the visit be iterative rather than recursive.
@@ -135,10 +135,10 @@
     APInt Offset;
   };
 
-  /// \brief The worklist of to-visit uses.
+  /// The worklist of to-visit uses.
   SmallVector<UseToVisit, 8> Worklist;
 
-  /// \brief A set of visited uses to break cycles in unreachable code.
+  /// A set of visited uses to break cycles in unreachable code.
   SmallPtrSet<Use *, 8> VisitedUses;
 
   /// @}
@@ -147,14 +147,14 @@
   /// This state is reset for each instruction visited.
   /// @{
 
-  /// \brief The use currently being visited.
+  /// The use currently being visited.
   Use *U;
 
-  /// \brief True if we have a known constant offset for the use currently
+  /// True if we have a known constant offset for the use currently
   /// being visited.
   bool IsOffsetKnown;
 
-  /// \brief The constant offset of the use if that is known.
+  /// The constant offset of the use if that is known.
   APInt Offset;
 
   /// @}
@@ -163,13 +163,13 @@
   /// class, we can't create instances directly of this class.
   PtrUseVisitorBase(const DataLayout &DL) : DL(DL) {}
 
-  /// \brief Enqueue the users of this instruction in the visit worklist.
+  /// Enqueue the users of this instruction in the visit worklist.
   ///
   /// This will visit the users with the same offset of the current visit
   /// (including an unknown offset if that is the current state).
   void enqueueUsers(Instruction &I);
 
-  /// \brief Walk the operands of a GEP and adjust the offset as appropriate.
+  /// Walk the operands of a GEP and adjust the offset as appropriate.
   ///
   /// This routine does the heavy lifting of the pointer walk by computing
   /// offsets and looking through GEPs.
@@ -178,7 +178,7 @@
 
 } // end namespace detail
 
-/// \brief A base class for visitors over the uses of a pointer value.
+/// A base class for visitors over the uses of a pointer value.
 ///
 /// Once constructed, a user can call \c visit on a pointer value, and this
 /// will walk its uses and visit each instruction using an InstVisitor. It also
@@ -216,7 +216,7 @@
                   "Must pass the derived type to this template!");
   }
 
-  /// \brief Recursively visit the uses of the given pointer.
+  /// Recursively visit the uses of the given pointer.
   /// \returns An info struct about the pointer. See \c PtrInfo for details.
   PtrInfo visitPtr(Instruction &I) {
     // This must be a pointer type. Get an integer type suitable to hold
diff --git a/linux-x64/clang/include/llvm/Analysis/RegionInfo.h b/linux-x64/clang/include/llvm/Analysis/RegionInfo.h
index 4bf64d1..27f6cc1 100644
--- a/linux-x64/clang/include/llvm/Analysis/RegionInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/RegionInfo.h
@@ -42,6 +42,7 @@
 #include "llvm/ADT/GraphTraits.h"
 #include "llvm/ADT/PointerIntPair.h"
 #include "llvm/ADT/iterator_range.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/Dominators.h"
 #include "llvm/IR/PassManager.h"
@@ -102,7 +103,7 @@
   }
 };
 
-/// @brief Marker class to iterate over the elements of a Region in flat mode.
+/// Marker class to iterate over the elements of a Region in flat mode.
 ///
 /// The class is used to either iterate in Flat mode or by not using it to not
 /// iterate in Flat mode.  During a Flat mode iteration all Regions are entered
@@ -112,7 +113,7 @@
 template <class GraphType>
 class FlatIt {};
 
-/// @brief A RegionNode represents a subregion or a BasicBlock that is part of a
+/// A RegionNode represents a subregion or a BasicBlock that is part of a
 /// Region.
 template <class Tr>
 class RegionNodeBase {
@@ -135,12 +136,12 @@
   /// RegionNode.
   PointerIntPair<BlockT *, 1, bool> entry;
 
-  /// @brief The parent Region of this RegionNode.
+  /// The parent Region of this RegionNode.
   /// @see getParent()
   RegionT *parent;
 
 protected:
-  /// @brief Create a RegionNode.
+  /// Create a RegionNode.
   ///
   /// @param Parent      The parent of this RegionNode.
   /// @param Entry       The entry BasicBlock of the RegionNode.  If this
@@ -156,7 +157,7 @@
   RegionNodeBase(const RegionNodeBase &) = delete;
   RegionNodeBase &operator=(const RegionNodeBase &) = delete;
 
-  /// @brief Get the parent Region of this RegionNode.
+  /// Get the parent Region of this RegionNode.
   ///
   /// The parent Region is the Region this RegionNode belongs to. If for
   /// example a BasicBlock is element of two Regions, there exist two
@@ -166,7 +167,7 @@
   /// @return Get the parent Region of this RegionNode.
   inline RegionT *getParent() const { return parent; }
 
-  /// @brief Get the entry BasicBlock of this RegionNode.
+  /// Get the entry BasicBlock of this RegionNode.
   ///
   /// If this RegionNode represents a BasicBlock this is just the BasicBlock
   /// itself, otherwise we return the entry BasicBlock of the Subregion
@@ -174,7 +175,7 @@
   /// @return The entry BasicBlock of this RegionNode.
   inline BlockT *getEntry() const { return entry.getPointer(); }
 
-  /// @brief Get the content of this RegionNode.
+  /// Get the content of this RegionNode.
   ///
   /// This can be either a BasicBlock or a subregion. Before calling getNodeAs()
   /// check the type of the content with the isSubRegion() function call.
@@ -182,7 +183,7 @@
   /// @return The content of this RegionNode.
   template <class T> inline T *getNodeAs() const;
 
-  /// @brief Is this RegionNode a subregion?
+  /// Is this RegionNode a subregion?
   ///
   /// @return True if it contains a subregion. False if it contains a
   ///         BasicBlock.
@@ -190,7 +191,7 @@
 };
 
 //===----------------------------------------------------------------------===//
-/// @brief A single entry single exit Region.
+/// A single entry single exit Region.
 ///
 /// A Region is a connected subgraph of a control flow graph that has exactly
 /// two connections to the remaining graph. It can be used to analyze or
@@ -301,7 +302,7 @@
   void verifyRegionNest() const;
 
 public:
-  /// @brief Create a new region.
+  /// Create a new region.
   ///
   /// @param Entry  The entry basic block of the region.
   /// @param Exit   The exit basic block of the region.
@@ -318,25 +319,25 @@
   /// Delete the Region and all its subregions.
   ~RegionBase();
 
-  /// @brief Get the entry BasicBlock of the Region.
+  /// Get the entry BasicBlock of the Region.
   /// @return The entry BasicBlock of the region.
   BlockT *getEntry() const {
     return RegionNodeBase<Tr>::getEntry();
   }
 
-  /// @brief Replace the entry basic block of the region with the new basic
+  /// Replace the entry basic block of the region with the new basic
   ///        block.
   ///
   /// @param BB  The new entry basic block of the region.
   void replaceEntry(BlockT *BB);
 
-  /// @brief Replace the exit basic block of the region with the new basic
+  /// Replace the exit basic block of the region with the new basic
   ///        block.
   ///
   /// @param BB  The new exit basic block of the region.
   void replaceExit(BlockT *BB);
 
-  /// @brief Recursively replace the entry basic block of the region.
+  /// Recursively replace the entry basic block of the region.
   ///
   /// This function replaces the entry basic block with a new basic block. It
   /// also updates all child regions that have the same entry basic block as
@@ -345,7 +346,7 @@
   /// @param NewEntry The new entry basic block.
   void replaceEntryRecursive(BlockT *NewEntry);
 
-  /// @brief Recursively replace the exit basic block of the region.
+  /// Recursively replace the exit basic block of the region.
   ///
   /// This function replaces the exit basic block with a new basic block. It
   /// also updates all child regions that have the same exit basic block as
@@ -354,38 +355,38 @@
   /// @param NewExit The new exit basic block.
   void replaceExitRecursive(BlockT *NewExit);
 
-  /// @brief Get the exit BasicBlock of the Region.
+  /// Get the exit BasicBlock of the Region.
   /// @return The exit BasicBlock of the Region, NULL if this is the TopLevel
   ///         Region.
   BlockT *getExit() const { return exit; }
 
-  /// @brief Get the parent of the Region.
+  /// Get the parent of the Region.
   /// @return The parent of the Region or NULL if this is a top level
   ///         Region.
   RegionT *getParent() const {
     return RegionNodeBase<Tr>::getParent();
   }
 
-  /// @brief Get the RegionNode representing the current Region.
+  /// Get the RegionNode representing the current Region.
   /// @return The RegionNode representing the current Region.
   RegionNodeT *getNode() const {
     return const_cast<RegionNodeT *>(
         reinterpret_cast<const RegionNodeT *>(this));
   }
 
-  /// @brief Get the nesting level of this Region.
+  /// Get the nesting level of this Region.
   ///
   /// An toplevel Region has depth 0.
   ///
   /// @return The depth of the region.
   unsigned getDepth() const;
 
-  /// @brief Check if a Region is the TopLevel region.
+  /// Check if a Region is the TopLevel region.
   ///
   /// The toplevel region represents the whole function.
   bool isTopLevelRegion() const { return exit == nullptr; }
 
-  /// @brief Return a new (non-canonical) region, that is obtained by joining
+  /// Return a new (non-canonical) region, that is obtained by joining
   ///        this region with its predecessors.
   ///
   /// @return A region also starting at getEntry(), but reaching to the next
@@ -393,43 +394,43 @@
   ///         NULL if such a basic block does not exist.
   RegionT *getExpandedRegion() const;
 
-  /// @brief Return the first block of this region's single entry edge,
+  /// Return the first block of this region's single entry edge,
   ///        if existing.
   ///
   /// @return The BasicBlock starting this region's single entry edge,
   ///         else NULL.
   BlockT *getEnteringBlock() const;
 
-  /// @brief Return the first block of this region's single exit edge,
+  /// Return the first block of this region's single exit edge,
   ///        if existing.
   ///
   /// @return The BasicBlock starting this region's single exit edge,
   ///         else NULL.
   BlockT *getExitingBlock() const;
 
-  /// @brief Collect all blocks of this region's single exit edge, if existing.
+  /// Collect all blocks of this region's single exit edge, if existing.
   ///
   /// @return True if this region contains all the predecessors of the exit.
   bool getExitingBlocks(SmallVectorImpl<BlockT *> &Exitings) const;
 
-  /// @brief Is this a simple region?
+  /// Is this a simple region?
   ///
   /// A region is simple if it has exactly one exit and one entry edge.
   ///
   /// @return True if the Region is simple.
   bool isSimple() const;
 
-  /// @brief Returns the name of the Region.
+  /// Returns the name of the Region.
   /// @return The Name of the Region.
   std::string getNameStr() const;
 
-  /// @brief Return the RegionInfo object, that belongs to this Region.
+  /// Return the RegionInfo object, that belongs to this Region.
   RegionInfoT *getRegionInfo() const { return RI; }
 
   /// PrintStyle - Print region in difference ways.
   enum PrintStyle { PrintNone, PrintBB, PrintRN };
 
-  /// @brief Print the region.
+  /// Print the region.
   ///
   /// @param OS The output stream the Region is printed to.
   /// @param printTree Print also the tree of subregions.
@@ -438,17 +439,17 @@
              PrintStyle Style = PrintNone) const;
 
 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
-  /// @brief Print the region to stderr.
+  /// Print the region to stderr.
   void dump() const;
 #endif
 
-  /// @brief Check if the region contains a BasicBlock.
+  /// Check if the region contains a BasicBlock.
   ///
   /// @param BB The BasicBlock that might be contained in this Region.
   /// @return True if the block is contained in the region otherwise false.
   bool contains(const BlockT *BB) const;
 
-  /// @brief Check if the region contains another region.
+  /// Check if the region contains another region.
   ///
   /// @param SubRegion The region that might be contained in this Region.
   /// @return True if SubRegion is contained in the region otherwise false.
@@ -462,14 +463,14 @@
             SubRegion->getExit() == getExit());
   }
 
-  /// @brief Check if the region contains an Instruction.
+  /// Check if the region contains an Instruction.
   ///
   /// @param Inst The Instruction that might be contained in this region.
   /// @return True if the Instruction is contained in the region otherwise
   /// false.
   bool contains(const InstT *Inst) const { return contains(Inst->getParent()); }
 
-  /// @brief Check if the region contains a loop.
+  /// Check if the region contains a loop.
   ///
   /// @param L The loop that might be contained in this region.
   /// @return True if the loop is contained in the region otherwise false.
@@ -478,7 +479,7 @@
   ///         In that case true is returned.
   bool contains(const LoopT *L) const;
 
-  /// @brief Get the outermost loop in the region that contains a loop.
+  /// Get the outermost loop in the region that contains a loop.
   ///
   /// Find for a Loop L the outermost loop OuterL that is a parent loop of L
   /// and is itself contained in the region.
@@ -488,7 +489,7 @@
   ///         exist or if the region describes the whole function.
   LoopT *outermostLoopInRegion(LoopT *L) const;
 
-  /// @brief Get the outermost loop in the region that contains a basic block.
+  /// Get the outermost loop in the region that contains a basic block.
   ///
   /// Find for a basic block BB the outermost loop L that contains BB and is
   /// itself contained in the region.
@@ -499,13 +500,13 @@
   ///         exist or if the region describes the whole function.
   LoopT *outermostLoopInRegion(LoopInfoT *LI, BlockT *BB) const;
 
-  /// @brief Get the subregion that starts at a BasicBlock
+  /// Get the subregion that starts at a BasicBlock
   ///
   /// @param BB The BasicBlock the subregion should start.
   /// @return The Subregion if available, otherwise NULL.
   RegionT *getSubRegionNode(BlockT *BB) const;
 
-  /// @brief Get the RegionNode for a BasicBlock
+  /// Get the RegionNode for a BasicBlock
   ///
   /// @param BB The BasicBlock at which the RegionNode should start.
   /// @return If available, the RegionNode that represents the subregion
@@ -513,38 +514,38 @@
   ///         representing BB.
   RegionNodeT *getNode(BlockT *BB) const;
 
-  /// @brief Get the BasicBlock RegionNode for a BasicBlock
+  /// Get the BasicBlock RegionNode for a BasicBlock
   ///
   /// @param BB The BasicBlock for which the RegionNode is requested.
   /// @return The RegionNode representing the BB.
   RegionNodeT *getBBNode(BlockT *BB) const;
 
-  /// @brief Add a new subregion to this Region.
+  /// Add a new subregion to this Region.
   ///
   /// @param SubRegion The new subregion that will be added.
   /// @param moveChildren Move the children of this region, that are also
   ///                     contained in SubRegion into SubRegion.
   void addSubRegion(RegionT *SubRegion, bool moveChildren = false);
 
-  /// @brief Remove a subregion from this Region.
+  /// Remove a subregion from this Region.
   ///
   /// The subregion is not deleted, as it will probably be inserted into another
   /// region.
   /// @param SubRegion The SubRegion that will be removed.
   RegionT *removeSubRegion(RegionT *SubRegion);
 
-  /// @brief Move all direct child nodes of this Region to another Region.
+  /// Move all direct child nodes of this Region to another Region.
   ///
   /// @param To The Region the child nodes will be transferred to.
   void transferChildrenTo(RegionT *To);
 
-  /// @brief Verify if the region is a correct region.
+  /// Verify if the region is a correct region.
   ///
   /// Check if this is a correctly build Region. This is an expensive check, as
   /// the complete CFG of the Region will be walked.
   void verifyRegion() const;
 
-  /// @brief Clear the cache for BB RegionNodes.
+  /// Clear the cache for BB RegionNodes.
   ///
   /// After calling this function the BasicBlock RegionNodes will be stored at
   /// different memory locations. RegionNodes obtained before this function is
@@ -620,12 +621,12 @@
   using block_range = iterator_range<block_iterator>;
   using const_block_range = iterator_range<const_block_iterator>;
 
-  /// @brief Returns a range view of the basic blocks in the region.
+  /// Returns a range view of the basic blocks in the region.
   inline block_range blocks() {
     return block_range(block_begin(), block_end());
   }
 
-  /// @brief Returns a range view of the basic blocks in the region.
+  /// Returns a range view of the basic blocks in the region.
   ///
   /// This is the 'const' version of the range view.
   inline const_block_range blocks() const {
@@ -667,7 +668,7 @@
 inline raw_ostream &operator<<(raw_ostream &OS, const RegionNodeBase<Tr> &Node);
 
 //===----------------------------------------------------------------------===//
-/// @brief Analysis that detects all canonical Regions.
+/// Analysis that detects all canonical Regions.
 ///
 /// The RegionInfo pass detects all canonical regions in a function. The Regions
 /// are connected using the parent relation. This builds a Program Structure
@@ -725,7 +726,7 @@
   BBtoRegionMap BBtoRegion;
 
 protected:
-  /// \brief Update refences to a RegionInfoT held by the RegionT managed here
+  /// Update refences to a RegionInfoT held by the RegionT managed here
   ///
   /// This is a post-move helper. Regions hold references to the owning
   /// RegionInfo object. After a move these need to be fixed.
@@ -739,7 +740,7 @@
   }
 
 private:
-  /// \brief Wipe this region tree's state without releasing any resources.
+  /// Wipe this region tree's state without releasing any resources.
   ///
   /// This is essentially a post-move helper only. It leaves the object in an
   /// assignable and destroyable state, but otherwise invalid.
@@ -811,40 +812,40 @@
 
   void releaseMemory();
 
-  /// @brief Get the smallest region that contains a BasicBlock.
+  /// Get the smallest region that contains a BasicBlock.
   ///
   /// @param BB The basic block.
   /// @return The smallest region, that contains BB or NULL, if there is no
   /// region containing BB.
   RegionT *getRegionFor(BlockT *BB) const;
 
-  /// @brief  Set the smallest region that surrounds a basic block.
+  ///  Set the smallest region that surrounds a basic block.
   ///
   /// @param BB The basic block surrounded by a region.
   /// @param R The smallest region that surrounds BB.
   void setRegionFor(BlockT *BB, RegionT *R);
 
-  /// @brief A shortcut for getRegionFor().
+  /// A shortcut for getRegionFor().
   ///
   /// @param BB The basic block.
   /// @return The smallest region, that contains BB or NULL, if there is no
   /// region containing BB.
   RegionT *operator[](BlockT *BB) const;
 
-  /// @brief Return the exit of the maximal refined region, that starts at a
+  /// Return the exit of the maximal refined region, that starts at a
   /// BasicBlock.
   ///
   /// @param BB The BasicBlock the refined region starts.
   BlockT *getMaxRegionExit(BlockT *BB) const;
 
-  /// @brief Find the smallest region that contains two regions.
+  /// Find the smallest region that contains two regions.
   ///
   /// @param A The first region.
   /// @param B The second region.
   /// @return The smallest region containing A and B.
   RegionT *getCommonRegion(RegionT *A, RegionT *B) const;
 
-  /// @brief Find the smallest region that contains two basic blocks.
+  /// Find the smallest region that contains two basic blocks.
   ///
   /// @param A The first basic block.
   /// @param B The second basic block.
@@ -853,13 +854,13 @@
     return getCommonRegion(getRegionFor(A), getRegionFor(B));
   }
 
-  /// @brief Find the smallest region that contains a set of regions.
+  /// Find the smallest region that contains a set of regions.
   ///
   /// @param Regions A vector of regions.
   /// @return The smallest region that contains all regions in Regions.
   RegionT *getCommonRegion(SmallVectorImpl<RegionT *> &Regions) const;
 
-  /// @brief Find the smallest region that contains a set of basic blocks.
+  /// Find the smallest region that contains a set of basic blocks.
   ///
   /// @param BBs A vector of basic blocks.
   /// @return The smallest region that contains all basic blocks in BBS.
@@ -867,7 +868,7 @@
 
   RegionT *getTopLevelRegion() const { return TopLevelRegion; }
 
-  /// @brief Clear the Node Cache for all Regions.
+  /// Clear the Node Cache for all Regions.
   ///
   /// @see Region::clearNodeCache()
   void clearNodeCache() {
@@ -930,12 +931,12 @@
                    DominanceFrontier *DF);
 
 #ifndef NDEBUG
-  /// @brief Opens a viewer to show the GraphViz visualization of the regions.
+  /// Opens a viewer to show the GraphViz visualization of the regions.
   ///
   /// Useful during debugging as an alternative to dump().
   void view();
 
-  /// @brief Opens a viewer to show the GraphViz visualization of this region
+  /// Opens a viewer to show the GraphViz visualization of this region
   /// without instructions in the BasicBlocks.
   ///
   /// Useful during debugging as an alternative to dump().
@@ -967,7 +968,7 @@
   //@}
 };
 
-/// \brief Analysis pass that exposes the \c RegionInfo for a function.
+/// Analysis pass that exposes the \c RegionInfo for a function.
 class RegionInfoAnalysis : public AnalysisInfoMixin<RegionInfoAnalysis> {
   friend AnalysisInfoMixin<RegionInfoAnalysis>;
 
@@ -979,7 +980,7 @@
   RegionInfo run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Printer pass for the \c RegionInfo.
+/// Printer pass for the \c RegionInfo.
 class RegionInfoPrinterPass : public PassInfoMixin<RegionInfoPrinterPass> {
   raw_ostream &OS;
 
@@ -989,7 +990,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Verifier pass for the \c RegionInfo.
+/// Verifier pass for the \c RegionInfo.
 struct RegionInfoVerifierPass : PassInfoMixin<RegionInfoVerifierPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
diff --git a/linux-x64/clang/include/llvm/Analysis/RegionInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/RegionInfoImpl.h
index eb6baac..5904214 100644
--- a/linux-x64/clang/include/llvm/Analysis/RegionInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/RegionInfoImpl.h
@@ -22,6 +22,7 @@
 #include "llvm/Analysis/PostDominators.h"
 #include "llvm/Analysis/RegionInfo.h"
 #include "llvm/Analysis/RegionIterator.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/raw_ostream.h"
@@ -674,7 +675,7 @@
 #ifdef EXPENSIVE_CHECKS
   region->verifyRegion();
 #else
-  DEBUG(region->verifyRegion());
+  LLVM_DEBUG(region->verifyRegion());
 #endif
 
   updateStatistics(region);
diff --git a/linux-x64/clang/include/llvm/Analysis/RegionIterator.h b/linux-x64/clang/include/llvm/Analysis/RegionIterator.h
index 4f823cc..4fd92fc 100644
--- a/linux-x64/clang/include/llvm/Analysis/RegionIterator.h
+++ b/linux-x64/clang/include/llvm/Analysis/RegionIterator.h
@@ -26,7 +26,7 @@
 class BasicBlock;
 
 //===----------------------------------------------------------------------===//
-/// @brief Hierarchical RegionNode successor iterator.
+/// Hierarchical RegionNode successor iterator.
 ///
 /// This iterator iterates over all successors of a RegionNode.
 ///
@@ -102,7 +102,7 @@
   using Self = RNSuccIterator<NodeRef, BlockT, RegionT>;
   using value_type = typename super::value_type;
 
-  /// @brief Create begin iterator of a RegionNode.
+  /// Create begin iterator of a RegionNode.
   inline RNSuccIterator(NodeRef node)
       : Node(node, node->isSubRegion() ? ItRgBegin : ItBB),
         BItor(BlockTraits::child_begin(node->getEntry())) {
@@ -115,7 +115,7 @@
       advanceRegionSucc();
   }
 
-  /// @brief Create an end iterator.
+  /// Create an end iterator.
   inline RNSuccIterator(NodeRef node, bool)
       : Node(node, node->isSubRegion() ? ItRgEnd : ItBB),
         BItor(BlockTraits::child_end(node->getEntry())) {}
@@ -158,7 +158,7 @@
 };
 
 //===----------------------------------------------------------------------===//
-/// @brief Flat RegionNode iterator.
+/// Flat RegionNode iterator.
 ///
 /// The Flat Region iterator will iterate over all BasicBlock RegionNodes that
 /// are contained in the Region and its subregions. This is close to a virtual
@@ -177,7 +177,7 @@
   using Self = RNSuccIterator<FlatIt<NodeRef>, BlockT, RegionT>;
   using value_type = typename super::value_type;
 
-  /// @brief Create the iterator from a RegionNode.
+  /// Create the iterator from a RegionNode.
   ///
   /// Note that the incoming node must be a bb node, otherwise it will trigger
   /// an assertion when we try to get a BasicBlock.
@@ -193,7 +193,7 @@
       ++Itor;
   }
 
-  /// @brief Create an end iterator
+  /// Create an end iterator
   inline RNSuccIterator(NodeRef node, bool)
       : Node(node), Itor(BlockTraits::child_end(node->getEntry())) {
     assert(!Node->isSubRegion() &&
diff --git a/linux-x64/clang/include/llvm/Analysis/RegionPass.h b/linux-x64/clang/include/llvm/Analysis/RegionPass.h
index 515b362..b3da91c 100644
--- a/linux-x64/clang/include/llvm/Analysis/RegionPass.h
+++ b/linux-x64/clang/include/llvm/Analysis/RegionPass.h
@@ -28,7 +28,7 @@
 class Function;
 
 //===----------------------------------------------------------------------===//
-/// @brief A pass that runs on each Region in a function.
+/// A pass that runs on each Region in a function.
 ///
 /// RegionPass is managed by RGPassManager.
 class RegionPass : public Pass {
@@ -39,7 +39,7 @@
   /// @name To be implemented by every RegionPass
   ///
   //@{
-  /// @brief Run the pass on a specific Region
+  /// Run the pass on a specific Region
   ///
   /// Accessing regions not contained in the current region is not allowed.
   ///
@@ -49,7 +49,7 @@
   /// @return True if the pass modifies this Region.
   virtual bool runOnRegion(Region *R, RGPassManager &RGM) = 0;
 
-  /// @brief Get a pass to print the LLVM IR in the region.
+  /// Get a pass to print the LLVM IR in the region.
   ///
   /// @param O      The output stream to print the Region.
   /// @param Banner The banner to separate different printed passes.
@@ -85,7 +85,7 @@
   bool skipRegion(Region &R) const;
 };
 
-/// @brief The pass manager to schedule RegionPasses.
+/// The pass manager to schedule RegionPasses.
 class RGPassManager : public FunctionPass, public PMDataManager {
   std::deque<Region*> RQ;
   bool skipThisRegion;
@@ -97,7 +97,7 @@
   static char ID;
   explicit RGPassManager();
 
-  /// @brief Execute all of the passes scheduled for execution.
+  /// Execute all of the passes scheduled for execution.
   ///
   /// @return True if any of the passes modifies the function.
   bool runOnFunction(Function &F) override;
@@ -111,10 +111,10 @@
   PMDataManager *getAsPMDataManager() override { return this; }
   Pass *getAsPass() override { return this; }
 
-  /// @brief Print passes managed by this manager.
+  /// Print passes managed by this manager.
   void dumpPassStructure(unsigned Offset) override;
 
-  /// @brief Get passes contained by this manager.
+  /// Get passes contained by this manager.
   Pass *getContainedPass(unsigned N) {
     assert(N < PassVector.size() && "Pass number out of range!");
     Pass *FP = static_cast<Pass *>(PassVector[N]);
diff --git a/linux-x64/clang/include/llvm/Analysis/RegionPrinter.h b/linux-x64/clang/include/llvm/Analysis/RegionPrinter.h
index 8f0035c..e132eae 100644
--- a/linux-x64/clang/include/llvm/Analysis/RegionPrinter.h
+++ b/linux-x64/clang/include/llvm/Analysis/RegionPrinter.h
@@ -26,7 +26,7 @@
   FunctionPass *createRegionOnlyPrinterPass();
 
 #ifndef NDEBUG
-  /// @brief Open a viewer to display the GraphViz vizualization of the analysis
+  /// Open a viewer to display the GraphViz vizualization of the analysis
   /// result.
   ///
   /// Practical to call in the debugger.
@@ -35,7 +35,7 @@
   /// @param RI The analysis to display.
   void viewRegion(llvm::RegionInfo *RI);
 
-  /// @brief Analyze the regions of a function and open its GraphViz
+  /// Analyze the regions of a function and open its GraphViz
   /// visualization in a viewer.
   ///
   /// Useful to call in the debugger.
@@ -46,7 +46,7 @@
   /// @param F Function to analyze.
   void viewRegion(const llvm::Function *F);
 
-  /// @brief Open a viewer to display the GraphViz vizualization of the analysis
+  /// Open a viewer to display the GraphViz vizualization of the analysis
   /// result.
   ///
   /// Useful to call in the debugger.
@@ -55,7 +55,7 @@
   /// @param RI The analysis to display.
   void viewRegionOnly(llvm::RegionInfo *RI);
 
-  /// @brief Analyze the regions of a function and open its GraphViz
+  /// Analyze the regions of a function and open its GraphViz
   /// visualization in a viewer.
   ///
   /// Useful to call in the debugger.
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
index 7a43b81..89918e3 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolution.h
@@ -587,7 +587,9 @@
   const SCEV *getUMaxExpr(const SCEV *LHS, const SCEV *RHS);
   const SCEV *getUMaxExpr(SmallVectorImpl<const SCEV *> &Operands);
   const SCEV *getSMinExpr(const SCEV *LHS, const SCEV *RHS);
+  const SCEV *getSMinExpr(SmallVectorImpl<const SCEV *> &Operands);
   const SCEV *getUMinExpr(const SCEV *LHS, const SCEV *RHS);
+  const SCEV *getUMinExpr(SmallVectorImpl<const SCEV *> &Operands);
   const SCEV *getUnknown(Value *V);
   const SCEV *getCouldNotCompute();
 
@@ -650,6 +652,10 @@
   /// then perform a umin operation with them.
   const SCEV *getUMinFromMismatchedTypes(const SCEV *LHS, const SCEV *RHS);
 
+  /// Promote the operands to the wider of the types using zero-extension, and
+  /// then perform a umin operation with them. N-ary function.
+  const SCEV *getUMinFromMismatchedTypes(SmallVectorImpl<const SCEV *> &Ops);
+
   /// Transitively follow the chain of pointer-type operands until reaching a
   /// SCEV that does not have a single pointer operand. This returns a
   /// SCEVUnknown pointer for well-formed pointer-type expressions, but corner
@@ -764,6 +770,12 @@
   /// loop bodies.
   void forgetLoop(const Loop *L);
 
+  // This method invokes forgetLoop for the outermost loop of the given loop
+  // \p L, making ScalarEvolution forget about all this subtree. This needs to
+  // be done whenever we make a transform that may affect the parameters of the
+  // outer loop, such as exit counts for branches.
+  void forgetTopmostLoop(const Loop *L);
+
   /// This method should be called by the client when it has changed a value
   /// in a way that may effect its value, or which may disconnect it from a
   /// def-use chain linking it to a loop.
@@ -1085,7 +1097,7 @@
   /// The target library information for the target we are targeting.
   TargetLibraryInfo &TLI;
 
-  /// The tracker for @llvm.assume intrinsics in this function.
+  /// The tracker for \@llvm.assume intrinsics in this function.
   AssumptionCache &AC;
 
   /// The dominator tree.
@@ -1142,6 +1154,9 @@
   /// Mark SCEVUnknown Phis currently being processed by getRangeRef.
   SmallPtrSet<const PHINode *, 6> PendingPhiRanges;
 
+  // Mark SCEVUnknown Phis currently being processed by isImpliedViaMerge.
+  SmallPtrSet<const PHINode *, 6> PendingMerges;
+
   /// Set to true by isLoopBackedgeGuardedByCond when we're walking the set of
   /// conditions dominating the backedge of a loop.
   bool WalkingBEDominatingConds = false;
@@ -1667,6 +1682,18 @@
                                           const SCEV *FoundLHS,
                                           const SCEV *FoundRHS);
 
+  /// Test whether the condition described by Pred, LHS, and RHS is true
+  /// whenever the condition described by Pred, FoundLHS, and FoundRHS is
+  /// true.
+  ///
+  /// This routine tries to figure out predicate for Phis which are SCEVUnknown
+  /// if it is true for every possible incoming value from their respective
+  /// basic blocks.
+  bool isImpliedViaMerge(ICmpInst::Predicate Pred,
+                         const SCEV *LHS, const SCEV *RHS,
+                         const SCEV *FoundLHS, const SCEV *FoundRHS,
+                         unsigned Depth);
+
   /// If we know that the specified Phi is in the header of its containing
   /// loop, we know the loop executes a constant number of times, and the PHI
   /// node is just a recurrence involving constants, fold it.
@@ -1806,6 +1833,9 @@
   const SCEV *getOrCreateMulExpr(SmallVectorImpl<const SCEV *> &Ops,
                                  SCEV::NoWrapFlags Flags);
 
+  /// Return x if \p Val is f(x) where f is a 1-1 function.
+  const SCEV *stripInjectiveFunctions(const SCEV *Val) const;
+
   /// Find all of the loops transitively used in \p S, and fill \p LoopsUsed.
   /// A loop is considered "used" by an expression if it contains
   /// an add rec on said loop.
@@ -1815,6 +1845,10 @@
   /// accordingly.
   void addToLoopUseLists(const SCEV *S);
 
+  /// Try to match the pattern generated by getURemExpr(A, B). If successful,
+  /// Assign A and B to LHS and RHS, respectively.
+  bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS);
+
   FoldingSet<SCEV> UniqueSCEVs;
   FoldingSet<SCEVPredicate> UniquePreds;
   BumpPtrAllocator SCEVAllocator;
diff --git a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
index 3df04e9..58d4268 100644
--- a/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
+++ b/linux-x64/clang/include/llvm/Analysis/ScalarEvolutionExpander.h
@@ -321,7 +321,7 @@
 
     /// Arrange for there to be a cast of V to Ty at IP, reusing an existing
     /// cast if a suitable one exists, moving an existing cast if a suitable one
-    /// exists but isn't in the right place, or or creating a new one.
+    /// exists but isn't in the right place, or creating a new one.
     Value *ReuseOrCreateCast(Value *V, Type *Ty,
                              Instruction::CastOps Op,
                              BasicBlock::iterator IP);
@@ -335,6 +335,7 @@
     Value *expandAddToGEP(const SCEV *const *op_begin,
                           const SCEV *const *op_end,
                           PointerType *PTy, Type *Ty, Value *V);
+    Value *expandAddToGEP(const SCEV *Op, PointerType *PTy, Type *Ty, Value *V);
 
     /// Find a previous Value in ExprValueMap for expand.
     ScalarEvolution::ValueOffsetPair
diff --git a/linux-x64/clang/include/llvm/Analysis/SparsePropagation.h b/linux-x64/clang/include/llvm/Analysis/SparsePropagation.h
index 1b8df03..defcf96 100644
--- a/linux-x64/clang/include/llvm/Analysis/SparsePropagation.h
+++ b/linux-x64/clang/include/llvm/Analysis/SparsePropagation.h
@@ -238,7 +238,7 @@
   // If this value is untracked, don't add it to the map.
   if (LV == LatticeFunc->getUntrackedVal())
     return LV;
-  return ValueState[Key] = LV;
+  return ValueState[Key] = std::move(LV);
 }
 
 template <class LatticeKey, class LatticeVal, class KeyInfo>
@@ -250,7 +250,7 @@
 
   // Update the state of the given LatticeKey and add its corresponding LLVM
   // value to the work list.
-  ValueState[Key] = LV;
+  ValueState[Key] = std::move(LV);
   if (Value *V = KeyInfo::getValueFromLatticeKey(Key))
     ValueWorkList.push_back(V);
 }
@@ -260,7 +260,7 @@
     BasicBlock *BB) {
   if (!BBExecutable.insert(BB).second)
     return;
-  DEBUG(dbgs() << "Marking Block Executable: " << BB->getName() << "\n");
+  LLVM_DEBUG(dbgs() << "Marking Block Executable: " << BB->getName() << "\n");
   BBWorkList.push_back(BB); // Add the block to the work list!
 }
 
@@ -270,8 +270,8 @@
   if (!KnownFeasibleEdges.insert(Edge(Source, Dest)).second)
     return; // This edge is already known to be executable!
 
-  DEBUG(dbgs() << "Marking Edge Executable: " << Source->getName() << " -> "
-               << Dest->getName() << "\n");
+  LLVM_DEBUG(dbgs() << "Marking Edge Executable: " << Source->getName()
+                    << " -> " << Dest->getName() << "\n");
 
   if (BBExecutable.count(Dest)) {
     // The destination is already executable, but we just made an edge
@@ -318,7 +318,7 @@
 
     Constant *C =
         dyn_cast_or_null<Constant>(LatticeFunc->GetValueFromLatticeVal(
-            BCValue, BI->getCondition()->getType()));
+            std::move(BCValue), BI->getCondition()->getType()));
     if (!C || !isa<ConstantInt>(C)) {
       // Non-constant values can go either way.
       Succs[0] = Succs[1] = true;
@@ -360,7 +360,7 @@
     return;
 
   Constant *C = dyn_cast_or_null<Constant>(LatticeFunc->GetValueFromLatticeVal(
-      SCValue, SI.getCondition()->getType()));
+      std::move(SCValue), SI.getCondition()->getType()));
   if (!C || !isa<ConstantInt>(C)) {
     // All destinations are executable!
     Succs.assign(TI.getNumSuccessors(), true);
@@ -408,7 +408,8 @@
     LatticeFunc->ComputeInstructionState(PN, ChangedValues, *this);
     for (auto &ChangedValue : ChangedValues)
       if (ChangedValue.second != LatticeFunc->getUntrackedVal())
-        UpdateState(ChangedValue.first, ChangedValue.second);
+        UpdateState(std::move(ChangedValue.first),
+                    std::move(ChangedValue.second));
     return;
   }
 
@@ -477,7 +478,7 @@
       Value *V = ValueWorkList.back();
       ValueWorkList.pop_back();
 
-      DEBUG(dbgs() << "\nPopped off V-WL: " << *V << "\n");
+      LLVM_DEBUG(dbgs() << "\nPopped off V-WL: " << *V << "\n");
 
       // "V" got into the work list because it made a transition. See if any
       // users are both live and in need of updating.
@@ -492,7 +493,7 @@
       BasicBlock *BB = BBWorkList.back();
       BBWorkList.pop_back();
 
-      DEBUG(dbgs() << "\nPopped off BBWL: " << *BB);
+      LLVM_DEBUG(dbgs() << "\nPopped off BBWL: " << *BB);
 
       // Notify all instructions in this basic block that they are newly
       // executable.
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
index a461ed8..f94debb 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
+++ b/linux-x64/clang/include/llvm/Analysis/TargetLibraryInfo.def
@@ -119,6 +119,12 @@
 /// void operator delete[](void*, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZdaPvRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZdaPvRKSt9nothrow_t")
+/// void operator delete[](void*, align_val_t);
+TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_t")
+/// void operator delete[](void*, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZdaPvSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZdaPvSt11align_val_tRKSt9nothrow_t")
 /// void operator delete[](void*, unsigned int);
 TLI_DEFINE_ENUM_INTERNAL(ZdaPvj)
 TLI_DEFINE_STRING_INTERNAL("_ZdaPvj")
@@ -131,6 +137,12 @@
 /// void operator delete(void*, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZdlPvRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZdlPvRKSt9nothrow_t")
+/// void operator delete(void*, align_val_t)
+TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_t")
+/// void operator delete(void*, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZdlPvSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZdlPvSt11align_val_tRKSt9nothrow_t")
 /// void operator delete(void*, unsigned int);
 TLI_DEFINE_ENUM_INTERNAL(ZdlPvj)
 TLI_DEFINE_STRING_INTERNAL("_ZdlPvj")
@@ -143,24 +155,48 @@
 /// void *new[](unsigned int, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZnajRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZnajRKSt9nothrow_t")
+/// void *new[](unsigned int, align_val_t)
+TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_t")
+/// void *new[](unsigned int, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZnajSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnajSt11align_val_tRKSt9nothrow_t")
 /// void *new[](unsigned long);
 TLI_DEFINE_ENUM_INTERNAL(Znam)
 TLI_DEFINE_STRING_INTERNAL("_Znam")
 /// void *new[](unsigned long, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZnamRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZnamRKSt9nothrow_t")
+/// void *new[](unsigned long, align_val_t)
+TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_t")
+/// void *new[](unsigned long, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZnamSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnamSt11align_val_tRKSt9nothrow_t")
 /// void *new(unsigned int);
 TLI_DEFINE_ENUM_INTERNAL(Znwj)
 TLI_DEFINE_STRING_INTERNAL("_Znwj")
 /// void *new(unsigned int, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZnwjRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZnwjRKSt9nothrow_t")
+/// void *new(unsigned int, align_val_t)
+TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_t")
+/// void *new(unsigned int, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZnwjSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnwjSt11align_val_tRKSt9nothrow_t")
 /// void *new(unsigned long);
 TLI_DEFINE_ENUM_INTERNAL(Znwm)
 TLI_DEFINE_STRING_INTERNAL("_Znwm")
 /// void *new(unsigned long, nothrow);
 TLI_DEFINE_ENUM_INTERNAL(ZnwmRKSt9nothrow_t)
 TLI_DEFINE_STRING_INTERNAL("_ZnwmRKSt9nothrow_t")
+/// void *new(unsigned long, align_val_t)
+TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_t")
+/// void *new(unsigned long, align_val_t, nothrow)
+TLI_DEFINE_ENUM_INTERNAL(ZnwmSt11align_val_tRKSt9nothrow_t)
+TLI_DEFINE_STRING_INTERNAL("_ZnwmSt11align_val_tRKSt9nothrow_t")
 /// double __acos_finite(double x);
 TLI_DEFINE_ENUM_INTERNAL(acos_finite)
 TLI_DEFINE_STRING_INTERNAL("__acos_finite")
@@ -601,12 +637,18 @@
 /// int fgetc(FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fgetc)
 TLI_DEFINE_STRING_INTERNAL("fgetc")
+/// int fgetc_unlocked(FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fgetc_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fgetc_unlocked")
 /// int fgetpos(FILE *stream, fpos_t *pos);
 TLI_DEFINE_ENUM_INTERNAL(fgetpos)
 TLI_DEFINE_STRING_INTERNAL("fgetpos")
 /// char *fgets(char *s, int n, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fgets)
 TLI_DEFINE_STRING_INTERNAL("fgets")
+/// char *fgets_unlocked(char *s, int n, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fgets_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fgets_unlocked")
 /// int fileno(FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fileno)
 TLI_DEFINE_STRING_INTERNAL("fileno")
@@ -673,12 +715,21 @@
 /// int fputc(int c, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fputc)
 TLI_DEFINE_STRING_INTERNAL("fputc")
+/// int fputc_unlocked(int c, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fputc_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fputc_unlocked")
 /// int fputs(const char *s, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fputs)
 TLI_DEFINE_STRING_INTERNAL("fputs")
+/// int fputs_unlocked(const char *s, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fputs_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fputs_unlocked")
 /// size_t fread(void *ptr, size_t size, size_t nitems, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fread)
 TLI_DEFINE_STRING_INTERNAL("fread")
+/// size_t fread_unlocked(void *ptr, size_t size, size_t nitems, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fread_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fread_unlocked")
 /// void free(void *ptr);
 TLI_DEFINE_ENUM_INTERNAL(free)
 TLI_DEFINE_STRING_INTERNAL("free")
@@ -736,6 +787,9 @@
 /// size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(fwrite)
 TLI_DEFINE_STRING_INTERNAL("fwrite")
+/// size_t fwrite_unlocked(const void *ptr, size_t size, size_t nitems, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(fwrite_unlocked)
+TLI_DEFINE_STRING_INTERNAL("fwrite_unlocked")
 /// int getc(FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(getc)
 TLI_DEFINE_STRING_INTERNAL("getc")
@@ -745,6 +799,9 @@
 /// int getchar(void);
 TLI_DEFINE_ENUM_INTERNAL(getchar)
 TLI_DEFINE_STRING_INTERNAL("getchar")
+/// int getchar_unlocked(void);
+TLI_DEFINE_ENUM_INTERNAL(getchar_unlocked)
+TLI_DEFINE_STRING_INTERNAL("getchar_unlocked")
 /// char *getenv(const char *name);
 TLI_DEFINE_ENUM_INTERNAL(getenv)
 TLI_DEFINE_STRING_INTERNAL("getenv")
@@ -950,9 +1007,15 @@
 /// int putc(int c, FILE *stream);
 TLI_DEFINE_ENUM_INTERNAL(putc)
 TLI_DEFINE_STRING_INTERNAL("putc")
+/// int putc_unlocked(int c, FILE *stream);
+TLI_DEFINE_ENUM_INTERNAL(putc_unlocked)
+TLI_DEFINE_STRING_INTERNAL("putc_unlocked")
 /// int putchar(int c);
 TLI_DEFINE_ENUM_INTERNAL(putchar)
 TLI_DEFINE_STRING_INTERNAL("putchar")
+/// int putchar_unlocked(int c);
+TLI_DEFINE_ENUM_INTERNAL(putchar_unlocked)
+TLI_DEFINE_STRING_INTERNAL("putchar_unlocked")
 /// int puts(const char *s);
 TLI_DEFINE_ENUM_INTERNAL(puts)
 TLI_DEFINE_STRING_INTERNAL("puts")
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
index 9e9c661..59657cc 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfo.h
@@ -49,7 +49,7 @@
 class User;
 class Value;
 
-/// \brief Information about a load/store intrinsic defined by the target.
+/// Information about a load/store intrinsic defined by the target.
 struct MemIntrinsicInfo {
   /// This is the pointer that the intrinsic is loading from or storing to.
   /// If this is non-null, then analysis/optimization passes can assume that
@@ -73,18 +73,18 @@
   }
 };
 
-/// \brief This pass provides access to the codegen interfaces that are needed
+/// This pass provides access to the codegen interfaces that are needed
 /// for IR-level transformations.
 class TargetTransformInfo {
 public:
-  /// \brief Construct a TTI object using a type implementing the \c Concept
+  /// Construct a TTI object using a type implementing the \c Concept
   /// API below.
   ///
   /// This is used by targets to construct a TTI wrapping their target-specific
   /// implementaion that encodes appropriate costs for their target.
   template <typename T> TargetTransformInfo(T Impl);
 
-  /// \brief Construct a baseline TTI object using a minimal implementation of
+  /// Construct a baseline TTI object using a minimal implementation of
   /// the \c Concept API below.
   ///
   /// The TTI implementation will reflect the information in the DataLayout
@@ -99,7 +99,7 @@
   // out-of-line.
   ~TargetTransformInfo();
 
-  /// \brief Handle the invalidation of this information.
+  /// Handle the invalidation of this information.
   ///
   /// When used as a result of \c TargetIRAnalysis this method will be called
   /// when the function this was computed for changes. When it returns false,
@@ -114,7 +114,7 @@
   /// \name Generic Target Information
   /// @{
 
-  /// \brief The kind of cost model.
+  /// The kind of cost model.
   ///
   /// There are several different cost models that can be customized by the
   /// target. The normalization of each cost model may be target specific.
@@ -124,7 +124,7 @@
     TCK_CodeSize         ///< Instruction code size.
   };
 
-  /// \brief Query the cost of a specified instruction.
+  /// Query the cost of a specified instruction.
   ///
   /// Clients should use this interface to query the cost of an existing
   /// instruction. The instruction must have a valid parent (basic block).
@@ -145,7 +145,7 @@
     llvm_unreachable("Unknown instruction cost kind");
   }
 
-  /// \brief Underlying constants for 'cost' values in this interface.
+  /// Underlying constants for 'cost' values in this interface.
   ///
   /// Many APIs in this interface return a cost. This enum defines the
   /// fundamental values that should be used to interpret (and produce) those
@@ -169,7 +169,7 @@
     TCC_Expensive = 4 ///< The cost of a 'div' instruction on x86.
   };
 
-  /// \brief Estimate the cost of a specific operation when lowered.
+  /// Estimate the cost of a specific operation when lowered.
   ///
   /// Note that this is designed to work on an arbitrary synthetic opcode, and
   /// thus work for hypothetical queries before an instruction has even been
@@ -185,7 +185,7 @@
   /// comments for a detailed explanation of the cost values.
   int getOperationCost(unsigned Opcode, Type *Ty, Type *OpTy = nullptr) const;
 
-  /// \brief Estimate the cost of a GEP operation when lowered.
+  /// Estimate the cost of a GEP operation when lowered.
   ///
   /// The contract for this function is the same as \c getOperationCost except
   /// that it supports an interface that provides extra information specific to
@@ -193,14 +193,14 @@
   int getGEPCost(Type *PointeeType, const Value *Ptr,
                  ArrayRef<const Value *> Operands) const;
 
-  /// \brief Estimate the cost of a EXT operation when lowered.
+  /// Estimate the cost of a EXT operation when lowered.
   ///
   /// The contract for this function is the same as \c getOperationCost except
   /// that it supports an interface that provides extra information specific to
   /// the EXT operation.
   int getExtCost(const Instruction *I, const Value *Src) const;
 
-  /// \brief Estimate the cost of a function call when lowered.
+  /// Estimate the cost of a function call when lowered.
   ///
   /// The contract for this is the same as \c getOperationCost except that it
   /// supports an interface that provides extra information specific to call
@@ -211,13 +211,13 @@
   /// The latter is only interesting for varargs function types.
   int getCallCost(FunctionType *FTy, int NumArgs = -1) const;
 
-  /// \brief Estimate the cost of calling a specific function when lowered.
+  /// Estimate the cost of calling a specific function when lowered.
   ///
   /// This overload adds the ability to reason about the particular function
   /// being called in the event it is a library call with special lowering.
   int getCallCost(const Function *F, int NumArgs = -1) const;
 
-  /// \brief Estimate the cost of calling a specific function when lowered.
+  /// Estimate the cost of calling a specific function when lowered.
   ///
   /// This overload allows specifying a set of candidate argument values.
   int getCallCost(const Function *F, ArrayRef<const Value *> Arguments) const;
@@ -230,13 +230,13 @@
   /// individual classes of instructions would be better.
   unsigned getInliningThresholdMultiplier() const;
 
-  /// \brief Estimate the cost of an intrinsic when lowered.
+  /// Estimate the cost of an intrinsic when lowered.
   ///
   /// Mirrors the \c getCallCost method but uses an intrinsic identifier.
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
                        ArrayRef<Type *> ParamTys) const;
 
-  /// \brief Estimate the cost of an intrinsic when lowered.
+  /// Estimate the cost of an intrinsic when lowered.
   ///
   /// Mirrors the \c getCallCost method but uses an intrinsic identifier.
   int getIntrinsicCost(Intrinsic::ID IID, Type *RetTy,
@@ -248,7 +248,7 @@
   unsigned getEstimatedNumberOfCaseClusters(const SwitchInst &SI,
                                             unsigned &JTSize) const;
 
-  /// \brief Estimate the cost of a given IR user when lowered.
+  /// Estimate the cost of a given IR user when lowered.
   ///
   /// This can estimate the cost of either a ConstantExpr or Instruction when
   /// lowered. It has two primary advantages over the \c getOperationCost and
@@ -271,7 +271,7 @@
   /// comments for a detailed explanation of the cost values.
   int getUserCost(const User *U, ArrayRef<const Value *> Operands) const;
 
-  /// \brief This is a helper function which calls the two-argument getUserCost
+  /// This is a helper function which calls the two-argument getUserCost
   /// with \p Operands which are the current operands U has.
   int getUserCost(const User *U) const {
     SmallVector<const Value *, 4> Operands(U->value_op_begin(),
@@ -279,14 +279,14 @@
     return getUserCost(U, Operands);
   }
 
-  /// \brief Return true if branch divergence exists.
+  /// Return true if branch divergence exists.
   ///
   /// Branch divergence has a significantly negative impact on GPU performance
   /// when threads in the same wavefront take different paths due to conditional
   /// branches.
   bool hasBranchDivergence() const;
 
-  /// \brief Returns whether V is a source of divergence.
+  /// Returns whether V is a source of divergence.
   ///
   /// This function provides the target-dependent information for
   /// the target-independent DivergenceAnalysis. DivergenceAnalysis first
@@ -294,7 +294,7 @@
   /// starting with the sources of divergence.
   bool isSourceOfDivergence(const Value *V) const;
 
-  // \brief Returns true for the target specific
+  // Returns true for the target specific
   // set of operations which produce uniform result
   // even taking non-unform arguments
   bool isAlwaysUniform(const Value *V) const;
@@ -317,7 +317,7 @@
   /// optimize away.
   unsigned getFlatAddressSpace() const;
 
-  /// \brief Test whether calls to a function lower to actual program function
+  /// Test whether calls to a function lower to actual program function
   /// calls.
   ///
   /// The idea is to test whether the program is likely to require a 'call'
@@ -422,9 +422,16 @@
     bool AllowPeeling;
     /// Allow unrolling of all the iterations of the runtime loop remainder.
     bool UnrollRemainder;
+    /// Allow unroll and jam. Used to enable unroll and jam for the target.
+    bool UnrollAndJam;
+    /// Threshold for unroll and jam, for inner loop size. The 'Threshold'
+    /// value above is used during unroll and jam for the outer loop size.
+    /// This value is used in the same manner to limit the size of the inner
+    /// loop.
+    unsigned UnrollAndJamInnerLoopThreshold;
   };
 
-  /// \brief Get target-customized preferences for the generic loop unrolling
+  /// Get target-customized preferences for the generic loop unrolling
   /// transformation. The caller will initialize UP with the current
   /// target-independent defaults.
   void getUnrollingPreferences(Loop *L, ScalarEvolution &,
@@ -435,7 +442,7 @@
   /// \name Scalar Target Information
   /// @{
 
-  /// \brief Flags indicating the kind of support for population count.
+  /// Flags indicating the kind of support for population count.
   ///
   /// Compared to the SW implementation, HW support is supposed to
   /// significantly boost the performance when the population is dense, and it
@@ -445,18 +452,18 @@
   /// considered as "Slow".
   enum PopcntSupportKind { PSK_Software, PSK_SlowHardware, PSK_FastHardware };
 
-  /// \brief Return true if the specified immediate is legal add immediate, that
+  /// Return true if the specified immediate is legal add immediate, that
   /// is the target has add instructions which can add a register with the
   /// immediate without having to materialize the immediate into a register.
   bool isLegalAddImmediate(int64_t Imm) const;
 
-  /// \brief Return true if the specified immediate is legal icmp immediate,
+  /// Return true if the specified immediate is legal icmp immediate,
   /// that is the target has icmp instructions which can compare a register
   /// against the immediate without having to materialize the immediate into a
   /// register.
   bool isLegalICmpImmediate(int64_t Imm) const;
 
-  /// \brief Return true if the addressing mode represented by AM is legal for
+  /// Return true if the addressing mode represented by AM is legal for
   /// this target, for a load/store of the specified type.
   /// The type may be VoidTy, in which case only return true if the addressing
   /// mode is legal for a load/store of any legal type.
@@ -467,7 +474,7 @@
                              unsigned AddrSpace = 0,
                              Instruction *I = nullptr) const;
 
-  /// \brief Return true if LSR cost of C1 is lower than C1.
+  /// Return true if LSR cost of C1 is lower than C1.
   bool isLSRCostLess(TargetTransformInfo::LSRCost &C1,
                      TargetTransformInfo::LSRCost &C2) const;
 
@@ -480,12 +487,12 @@
   /// addressing mode expressions.
   bool shouldFavorPostInc() const;
 
-  /// \brief Return true if the target supports masked load/store
+  /// Return true if the target supports masked load/store
   /// AVX2 and AVX-512 targets allow masks for consecutive load and store
   bool isLegalMaskedStore(Type *DataType) const;
   bool isLegalMaskedLoad(Type *DataType) const;
 
-  /// \brief Return true if the target supports masked gather/scatter
+  /// Return true if the target supports masked gather/scatter
   /// AVX-512 fully supports gather and scatter for vectors with 32 and 64
   /// bits scalar type.
   bool isLegalMaskedScatter(Type *DataType) const;
@@ -508,7 +515,7 @@
   /// Return true if target doesn't mind addresses in vectors.
   bool prefersVectorizedAddressing() const;
 
-  /// \brief Return the cost of the scaling factor used in the addressing
+  /// Return the cost of the scaling factor used in the addressing
   /// mode represented by AM for this target, for a load/store
   /// of the specified type.
   /// If the AM is supported, the return value must be >= 0.
@@ -518,41 +525,41 @@
                            bool HasBaseReg, int64_t Scale,
                            unsigned AddrSpace = 0) const;
 
-  /// \brief Return true if the loop strength reduce pass should make
+  /// Return true if the loop strength reduce pass should make
   /// Instruction* based TTI queries to isLegalAddressingMode(). This is
   /// needed on SystemZ, where e.g. a memcpy can only have a 12 bit unsigned
   /// immediate offset and no index register.
   bool LSRWithInstrQueries() const;
 
-  /// \brief Return true if it's free to truncate a value of type Ty1 to type
+  /// Return true if it's free to truncate a value of type Ty1 to type
   /// Ty2. e.g. On x86 it's free to truncate a i32 value in register EAX to i16
   /// by referencing its sub-register AX.
   bool isTruncateFree(Type *Ty1, Type *Ty2) const;
 
-  /// \brief Return true if it is profitable to hoist instruction in the
+  /// Return true if it is profitable to hoist instruction in the
   /// then/else to before if.
   bool isProfitableToHoist(Instruction *I) const;
 
   bool useAA() const;
 
-  /// \brief Return true if this type is legal.
+  /// Return true if this type is legal.
   bool isTypeLegal(Type *Ty) const;
 
-  /// \brief Returns the target's jmp_buf alignment in bytes.
+  /// Returns the target's jmp_buf alignment in bytes.
   unsigned getJumpBufAlignment() const;
 
-  /// \brief Returns the target's jmp_buf size in bytes.
+  /// Returns the target's jmp_buf size in bytes.
   unsigned getJumpBufSize() const;
 
-  /// \brief Return true if switches should be turned into lookup tables for the
+  /// Return true if switches should be turned into lookup tables for the
   /// target.
   bool shouldBuildLookupTables() const;
 
-  /// \brief Return true if switches should be turned into lookup tables
+  /// Return true if switches should be turned into lookup tables
   /// containing this constant value for the target.
   bool shouldBuildLookupTablesForConstant(Constant *C) const;
 
-  /// \brief Return true if the input function which is cold at all call sites,
+  /// Return true if the input function which is cold at all call sites,
   ///  should use coldcc calling convention.
   bool useColdCCForColdCall(Function &F) const;
 
@@ -566,10 +573,10 @@
   /// the scalarization cost of a load/store.
   bool supportsEfficientVectorElementLoadStore() const;
 
-  /// \brief Don't restrict interleaved unrolling to small loops.
+  /// Don't restrict interleaved unrolling to small loops.
   bool enableAggressiveInterleaving(bool LoopHasReductions) const;
 
-  /// \brief If not nullptr, enable inline expansion of memcmp. IsZeroCmp is
+  /// If not nullptr, enable inline expansion of memcmp. IsZeroCmp is
   /// true if this is the expansion of memcmp(p1, p2, s) == 0.
   struct MemCmpExpansionOptions {
     // The list of available load sizes (in bytes), sorted in decreasing order.
@@ -577,10 +584,10 @@
   };
   const MemCmpExpansionOptions *enableMemCmpExpansion(bool IsZeroCmp) const;
 
-  /// \brief Enable matching of interleaved access groups.
+  /// Enable matching of interleaved access groups.
   bool enableInterleavedAccessVectorization() const;
 
-  /// \brief Indicate that it is potentially unsafe to automatically vectorize
+  /// Indicate that it is potentially unsafe to automatically vectorize
   /// floating-point operations because the semantics of vector and scalar
   /// floating-point semantics may differ. For example, ARM NEON v7 SIMD math
   /// does not support IEEE-754 denormal numbers, while depending on the
@@ -589,16 +596,16 @@
   /// operations, shuffles, or casts.
   bool isFPVectorizationPotentiallyUnsafe() const;
 
-  /// \brief Determine if the target supports unaligned memory accesses.
+  /// Determine if the target supports unaligned memory accesses.
   bool allowsMisalignedMemoryAccesses(LLVMContext &Context,
                                       unsigned BitWidth, unsigned AddressSpace = 0,
                                       unsigned Alignment = 1,
                                       bool *Fast = nullptr) const;
 
-  /// \brief Return hardware support for population count.
+  /// Return hardware support for population count.
   PopcntSupportKind getPopcntSupport(unsigned IntTyWidthInBit) const;
 
-  /// \brief Return true if the hardware has a fast square-root instruction.
+  /// Return true if the hardware has a fast square-root instruction.
   bool haveFastSqrt(Type *Ty) const;
 
   /// Return true if it is faster to check if a floating-point value is NaN
@@ -607,15 +614,15 @@
   /// generally as cheap as checking for ordered/unordered.
   bool isFCmpOrdCheaperThanFCmpZero(Type *Ty) const;
 
-  /// \brief Return the expected cost of supporting the floating point operation
+  /// Return the expected cost of supporting the floating point operation
   /// of the specified type.
   int getFPOpCost(Type *Ty) const;
 
-  /// \brief Return the expected cost of materializing for the given integer
+  /// Return the expected cost of materializing for the given integer
   /// immediate of the specified type.
   int getIntImmCost(const APInt &Imm, Type *Ty) const;
 
-  /// \brief Return the expected cost of materialization for the given integer
+  /// Return the expected cost of materialization for the given integer
   /// immediate of the specified type for a given instruction. The cost can be
   /// zero if the immediate can be folded into the specified instruction.
   int getIntImmCost(unsigned Opc, unsigned Idx, const APInt &Imm,
@@ -623,7 +630,7 @@
   int getIntImmCost(Intrinsic::ID IID, unsigned Idx, const APInt &Imm,
                     Type *Ty) const;
 
-  /// \brief Return the expected cost for the given integer when optimising
+  /// Return the expected cost for the given integer when optimising
   /// for size. This is different than the other integer immediate cost
   /// functions in that it is subtarget agnostic. This is useful when you e.g.
   /// target one ISA such as Aarch32 but smaller encodings could be possible
@@ -637,11 +644,14 @@
   /// \name Vector Target Information
   /// @{
 
-  /// \brief The various kinds of shuffle patterns for vector queries.
+  /// The various kinds of shuffle patterns for vector queries.
   enum ShuffleKind {
     SK_Broadcast,       ///< Broadcast element 0 to all other elements.
     SK_Reverse,         ///< Reverse the order of the vector.
-    SK_Alternate,       ///< Choose alternate elements from vector.
+    SK_Select,          ///< Selects elements from the corresponding lane of
+                        ///< either source operand. This is equivalent to a
+                        ///< vector select with a constant condition operand.
+    SK_Transpose,       ///< Transpose two vectors.
     SK_InsertSubvector, ///< InsertSubvector. Index indicates start offset.
     SK_ExtractSubvector,///< ExtractSubvector Index indicates start offset.
     SK_PermuteTwoSrc,   ///< Merge elements from two source vectors into one
@@ -650,7 +660,7 @@
                         ///< shuffle mask.
   };
 
-  /// \brief Additional information about an operand's possible values.
+  /// Additional information about an operand's possible values.
   enum OperandValueKind {
     OK_AnyValue,               // Operand can have any value.
     OK_UniformValue,           // Operand is uniform (splat of a value).
@@ -658,7 +668,7 @@
     OK_NonUniformConstantValue // Operand is a non uniform constant value.
   };
 
-  /// \brief Additional properties of an operand's values.
+  /// Additional properties of an operand's values.
   enum OperandValueProperties { OP_None = 0, OP_PowerOf2 = 1 };
 
   /// \return The number of scalar or vector registers that the target has.
@@ -680,6 +690,11 @@
   /// size of the widest element type.
   bool shouldMaximizeVectorBandwidth(bool OptSize) const;
 
+  /// \return The minimum vectorization factor for types of given element
+  /// bit width, or 0 if there is no mimimum VF. The returned value only
+  /// applies when shouldMaximizeVectorBandwidth returns true.
+  unsigned getMinimumVF(unsigned ElemWidth) const;
+
   /// \return True if it should be considered for address type promotion.
   /// \p AllowPromotionWithoutCommonHeader Set true if promoting \p I is
   /// profitable without finding other extensions fed by the same input.
@@ -806,7 +821,7 @@
                                  ArrayRef<unsigned> Indices, unsigned Alignment,
                                  unsigned AddressSpace) const;
 
-  /// \brief Calculate the cost of performing a vector reduction.
+  /// Calculate the cost of performing a vector reduction.
   ///
   /// This is the cost of reducing the vector value of type \p Ty to a scalar
   /// value using the operation denoted by \p Opcode. The form of the reduction
@@ -900,7 +915,7 @@
   bool areInlineCompatible(const Function *Caller,
                            const Function *Callee) const;
 
-  /// \brief The type of load/store indexing.
+  /// The type of load/store indexing.
   enum MemIndexedMode {
     MIM_Unindexed,  ///< No indexing.
     MIM_PreInc,     ///< Pre-incrementing.
@@ -966,19 +981,19 @@
   /// @}
 
 private:
-  /// \brief Estimate the latency of specified instruction.
+  /// Estimate the latency of specified instruction.
   /// Returns 1 as the default value.
   int getInstructionLatency(const Instruction *I) const;
 
-  /// \brief Returns the expected throughput cost of the instruction.
+  /// Returns the expected throughput cost of the instruction.
   /// Returns -1 if the cost is unknown.
   int getInstructionThroughput(const Instruction *I) const;
 
-  /// \brief The abstract base class used to type erase specific TTI
+  /// The abstract base class used to type erase specific TTI
   /// implementations.
   class Concept;
 
-  /// \brief The template model for the base class which wraps a concrete
+  /// The template model for the base class which wraps a concrete
   /// implementation in a type erased interface.
   template <typename T> class Model;
 
@@ -1074,6 +1089,7 @@
   virtual unsigned getRegisterBitWidth(bool Vector) const = 0;
   virtual unsigned getMinVectorRegisterBitWidth() = 0;
   virtual bool shouldMaximizeVectorBandwidth(bool OptSize) const = 0;
+  virtual unsigned getMinimumVF(unsigned ElemWidth) const = 0;
   virtual bool shouldConsiderAddressTypePromotion(
       const Instruction &I, bool &AllowPromotionWithoutCommonHeader) = 0;
   virtual unsigned getCacheLineSize() = 0;
@@ -1373,6 +1389,9 @@
   bool shouldMaximizeVectorBandwidth(bool OptSize) const override {
     return Impl.shouldMaximizeVectorBandwidth(OptSize);
   }
+  unsigned getMinimumVF(unsigned ElemWidth) const override {
+    return Impl.getMinimumVF(ElemWidth);
+  }
   bool shouldConsiderAddressTypePromotion(
       const Instruction &I, bool &AllowPromotionWithoutCommonHeader) override {
     return Impl.shouldConsiderAddressTypePromotion(
@@ -1564,7 +1583,7 @@
 TargetTransformInfo::TargetTransformInfo(T Impl)
     : TTIImpl(new Model<T>(Impl)) {}
 
-/// \brief Analysis pass providing the \c TargetTransformInfo.
+/// Analysis pass providing the \c TargetTransformInfo.
 ///
 /// The core idea of the TargetIRAnalysis is to expose an interface through
 /// which LLVM targets can analyze and provide information about the middle
@@ -1579,13 +1598,13 @@
 public:
   typedef TargetTransformInfo Result;
 
-  /// \brief Default construct a target IR analysis.
+  /// Default construct a target IR analysis.
   ///
   /// This will use the module's datalayout to construct a baseline
   /// conservative TTI result.
   TargetIRAnalysis();
 
-  /// \brief Construct an IR analysis pass around a target-provide callback.
+  /// Construct an IR analysis pass around a target-provide callback.
   ///
   /// The callback will be called with a particular function for which the TTI
   /// is needed and must return a TTI object for that function.
@@ -1611,7 +1630,7 @@
   friend AnalysisInfoMixin<TargetIRAnalysis>;
   static AnalysisKey Key;
 
-  /// \brief The callback used to produce a result.
+  /// The callback used to produce a result.
   ///
   /// We use a completely opaque callback so that targets can provide whatever
   /// mechanism they desire for constructing the TTI for a given function.
@@ -1623,11 +1642,11 @@
   /// the external TargetMachine, and that reference needs to never dangle.
   std::function<Result(const Function &)> TTICallback;
 
-  /// \brief Helper function used as the callback in the default constructor.
+  /// Helper function used as the callback in the default constructor.
   static Result getDefaultTTI(const Function &F);
 };
 
-/// \brief Wrapper pass for TargetTransformInfo.
+/// Wrapper pass for TargetTransformInfo.
 ///
 /// This pass can be constructed from a TTI object which it stores internally
 /// and is queried by passes.
@@ -1640,7 +1659,7 @@
 public:
   static char ID;
 
-  /// \brief We must provide a default constructor for the pass but it should
+  /// We must provide a default constructor for the pass but it should
   /// never be used.
   ///
   /// Use the constructor below or call one of the creation routines.
@@ -1651,7 +1670,7 @@
   TargetTransformInfo &getTTI(const Function &F);
 };
 
-/// \brief Create an analysis pass wrapper around a TTI object.
+/// Create an analysis pass wrapper around a TTI object.
 ///
 /// This analysis pass just holds the TTI instance and makes it available to
 /// clients.
diff --git a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
index df4f853..d80ae1d 100644
--- a/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
+++ b/linux-x64/clang/include/llvm/Analysis/TargetTransformInfoImpl.h
@@ -27,7 +27,7 @@
 
 namespace llvm {
 
-/// \brief Base class for use as a mix-in that aids implementing
+/// Base class for use as a mix-in that aids implementing
 /// a TargetTransformInfo-compatible class.
 class TargetTransformInfoImplBase {
 protected:
@@ -155,6 +155,7 @@
     case Intrinsic::sideeffect:
     case Intrinsic::dbg_declare:
     case Intrinsic::dbg_value:
+    case Intrinsic::dbg_label:
     case Intrinsic::invariant_start:
     case Intrinsic::invariant_end:
     case Intrinsic::lifetime_start:
@@ -325,7 +326,7 @@
   bool haveFastSqrt(Type *Ty) { return false; }
 
   bool isFCmpOrdCheaperThanFCmpZero(Type *Ty) { return true; }
-  
+
   unsigned getFPOpCost(Type *Ty) { return TargetTransformInfo::TCC_Basic; }
 
   int getIntImmCodeSizeCost(unsigned Opcode, unsigned Idx, const APInt &Imm,
@@ -353,6 +354,8 @@
 
   bool shouldMaximizeVectorBandwidth(bool OptSize) const { return false; }
 
+  unsigned getMinimumVF(unsigned ElemWidth) const { return 0; }
+
   bool
   shouldConsiderAddressTypePromotion(const Instruction &I,
                                      bool &AllowPromotionWithoutCommonHeader) {
@@ -649,7 +652,7 @@
   }
 };
 
-/// \brief CRTP base class for use as a mix-in that aids implementing
+/// CRTP base class for use as a mix-in that aids implementing
 /// a TargetTransformInfo-compatible class.
 template <typename T>
 class TargetTransformInfoImplCRTPBase : public TargetTransformInfoImplBase {
diff --git a/linux-x64/clang/include/llvm/Analysis/TypeMetadataUtils.h b/linux-x64/clang/include/llvm/Analysis/TypeMetadataUtils.h
index 422e153..6764563 100644
--- a/linux-x64/clang/include/llvm/Analysis/TypeMetadataUtils.h
+++ b/linux-x64/clang/include/llvm/Analysis/TypeMetadataUtils.h
@@ -35,13 +35,13 @@
   CallSite CS;
 };
 
-/// Given a call to the intrinsic @llvm.type.test, find all devirtualizable
+/// Given a call to the intrinsic \@llvm.type.test, find all devirtualizable
 /// call sites based on the call and return them in DevirtCalls.
 void findDevirtualizableCallsForTypeTest(
     SmallVectorImpl<DevirtCallSite> &DevirtCalls,
     SmallVectorImpl<CallInst *> &Assumes, const CallInst *CI);
 
-/// Given a call to the intrinsic @llvm.type.checked.load, find all
+/// Given a call to the intrinsic \@llvm.type.checked.load, find all
 /// devirtualizable call sites based on the call and return them in DevirtCalls.
 void findDevirtualizableCallsForTypeCheckedLoad(
     SmallVectorImpl<DevirtCallSite> &DevirtCalls,
diff --git a/linux-x64/clang/include/llvm/Analysis/Utils/Local.h b/linux-x64/clang/include/llvm/Analysis/Utils/Local.h
index 42a654d..b4141bb 100644
--- a/linux-x64/clang/include/llvm/Analysis/Utils/Local.h
+++ b/linux-x64/clang/include/llvm/Analysis/Utils/Local.h
@@ -15,241 +15,11 @@
 #ifndef LLVM_ANALYSIS_UTILS_LOCAL_H
 #define LLVM_ANALYSIS_UTILS_LOCAL_H
 
-#include "llvm/ADT/ArrayRef.h"
-#include "llvm/ADT/SmallPtrSet.h"
-#include "llvm/ADT/SmallVector.h"
-#include "llvm/ADT/TinyPtrVector.h"
-#include "llvm/Analysis/AliasAnalysis.h"
-#include "llvm/IR/CallSite.h"
-#include "llvm/IR/Constant.h"
-#include "llvm/IR/Constants.h"
 #include "llvm/IR/DataLayout.h"
-#include "llvm/IR/Dominators.h"
 #include "llvm/IR/GetElementPtrTypeIterator.h"
-#include "llvm/IR/Operator.h"
-#include "llvm/IR/Type.h"
-#include "llvm/IR/User.h"
-#include "llvm/IR/Value.h"
-#include "llvm/Support/Casting.h"
-#include <cstdint>
-#include <limits>
 
 namespace llvm {
 
-class AllocaInst;
-class AssumptionCache;
-class BasicBlock;
-class BranchInst;
-class CallInst;
-class DbgInfoIntrinsic;
-class DbgValueInst;
-class DIBuilder;
-class Function;
-class Instruction;
-class LazyValueInfo;
-class LoadInst;
-class MDNode;
-class PHINode;
-class StoreInst;
-class TargetLibraryInfo;
-class TargetTransformInfo;
-
-/// A set of parameters used to control the transforms in the SimplifyCFG pass.
-/// Options may change depending on the position in the optimization pipeline.
-/// For example, canonical form that includes switches and branches may later be
-/// replaced by lookup tables and selects.
-struct SimplifyCFGOptions {
-  int BonusInstThreshold;
-  bool ForwardSwitchCondToPhi;
-  bool ConvertSwitchToLookupTable;
-  bool NeedCanonicalLoop;
-  bool SinkCommonInsts;
-  AssumptionCache *AC;
-
-  SimplifyCFGOptions(unsigned BonusThreshold = 1,
-                     bool ForwardSwitchCond = false,
-                     bool SwitchToLookup = false, bool CanonicalLoops = true,
-                     bool SinkCommon = false,
-                     AssumptionCache *AssumpCache = nullptr)
-      : BonusInstThreshold(BonusThreshold),
-        ForwardSwitchCondToPhi(ForwardSwitchCond),
-        ConvertSwitchToLookupTable(SwitchToLookup),
-        NeedCanonicalLoop(CanonicalLoops),
-        SinkCommonInsts(SinkCommon),
-        AC(AssumpCache) {}
-
-  // Support 'builder' pattern to set members by name at construction time.
-  SimplifyCFGOptions &bonusInstThreshold(int I) {
-    BonusInstThreshold = I;
-    return *this;
-  }
-  SimplifyCFGOptions &forwardSwitchCondToPhi(bool B) {
-    ForwardSwitchCondToPhi = B;
-    return *this;
-  }
-  SimplifyCFGOptions &convertSwitchToLookupTable(bool B) {
-    ConvertSwitchToLookupTable = B;
-    return *this;
-  }
-  SimplifyCFGOptions &needCanonicalLoops(bool B) {
-    NeedCanonicalLoop = B;
-    return *this;
-  }
-  SimplifyCFGOptions &sinkCommonInsts(bool B) {
-    SinkCommonInsts = B;
-    return *this;
-  }
-  SimplifyCFGOptions &setAssumptionCache(AssumptionCache *Cache) {
-    AC = Cache;
-    return *this;
-  }
-};
-
-//===----------------------------------------------------------------------===//
-//  Local constant propagation.
-//
-
-/// If a terminator instruction is predicated on a constant value, convert it
-/// into an unconditional branch to the constant destination.
-/// This is a nontrivial operation because the successors of this basic block
-/// must have their PHI nodes updated.
-/// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch
-/// conditions and indirectbr addresses this might make dead if
-/// DeleteDeadConditions is true.
-bool ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions = false,
-                            const TargetLibraryInfo *TLI = nullptr,
-                            DeferredDominance *DDT = nullptr);
-
-//===----------------------------------------------------------------------===//
-//  Local dead code elimination.
-//
-
-/// Return true if the result produced by the instruction is not used, and the
-/// instruction has no side effects.
-bool isInstructionTriviallyDead(Instruction *I,
-                                const TargetLibraryInfo *TLI = nullptr);
-
-/// Return true if the result produced by the instruction would have no side
-/// effects if it was not used. This is equivalent to checking whether
-/// isInstructionTriviallyDead would be true if the use count was 0.
-bool wouldInstructionBeTriviallyDead(Instruction *I,
-                                     const TargetLibraryInfo *TLI = nullptr);
-
-/// If the specified value is a trivially dead instruction, delete it.
-/// If that makes any of its operands trivially dead, delete them too,
-/// recursively. Return true if any instructions were deleted.
-bool RecursivelyDeleteTriviallyDeadInstructions(Value *V,
-                                        const TargetLibraryInfo *TLI = nullptr);
-
-/// If the specified value is an effectively dead PHI node, due to being a
-/// def-use chain of single-use nodes that either forms a cycle or is terminated
-/// by a trivially dead instruction, delete it. If that makes any of its
-/// operands trivially dead, delete them too, recursively. Return true if a
-/// change was made.
-bool RecursivelyDeleteDeadPHINode(PHINode *PN,
-                                  const TargetLibraryInfo *TLI = nullptr);
-
-/// Scan the specified basic block and try to simplify any instructions in it
-/// and recursively delete dead instructions.
-///
-/// This returns true if it changed the code, note that it can delete
-/// instructions in other blocks as well in this block.
-bool SimplifyInstructionsInBlock(BasicBlock *BB,
-                                 const TargetLibraryInfo *TLI = nullptr);
-
-//===----------------------------------------------------------------------===//
-//  Control Flow Graph Restructuring.
-//
-
-/// Like BasicBlock::removePredecessor, this method is called when we're about
-/// to delete Pred as a predecessor of BB. If BB contains any PHI nodes, this
-/// drops the entries in the PHI nodes for Pred.
-///
-/// Unlike the removePredecessor method, this attempts to simplify uses of PHI
-/// nodes that collapse into identity values.  For example, if we have:
-///   x = phi(1, 0, 0, 0)
-///   y = and x, z
-///
-/// .. and delete the predecessor corresponding to the '1', this will attempt to
-/// recursively fold the 'and' to 0.
-void RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
-                                  DeferredDominance *DDT = nullptr);
-
-/// BB is a block with one predecessor and its predecessor is known to have one
-/// successor (BB!). Eliminate the edge between them, moving the instructions in
-/// the predecessor into BB. This deletes the predecessor block.
-void MergeBasicBlockIntoOnlyPred(BasicBlock *BB, DominatorTree *DT = nullptr,
-                                 DeferredDominance *DDT = nullptr);
-
-/// BB is known to contain an unconditional branch, and contains no instructions
-/// other than PHI nodes, potential debug intrinsics and the branch. If
-/// possible, eliminate BB by rewriting all the predecessors to branch to the
-/// successor block and return true. If we can't transform, return false.
-bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
-                                             DeferredDominance *DDT = nullptr);
-
-/// Check for and eliminate duplicate PHI nodes in this block. This doesn't try
-/// to be clever about PHI nodes which differ only in the order of the incoming
-/// values, but instcombine orders them so it usually won't matter.
-bool EliminateDuplicatePHINodes(BasicBlock *BB);
-
-/// This function is used to do simplification of a CFG.  For example, it
-/// adjusts branches to branches to eliminate the extra hop, it eliminates
-/// unreachable basic blocks, and does other peephole optimization of the CFG.
-/// It returns true if a modification was made, possibly deleting the basic
-/// block that was pointed to. LoopHeaders is an optional input parameter
-/// providing the set of loop headers that SimplifyCFG should not eliminate.
-bool simplifyCFG(BasicBlock *BB, const TargetTransformInfo &TTI,
-                 const SimplifyCFGOptions &Options = {},
-                 SmallPtrSetImpl<BasicBlock *> *LoopHeaders = nullptr);
-
-/// This function is used to flatten a CFG. For example, it uses parallel-and
-/// and parallel-or mode to collapse if-conditions and merge if-regions with
-/// identical statements.
-bool FlattenCFG(BasicBlock *BB, AliasAnalysis *AA = nullptr);
-
-/// If this basic block is ONLY a setcc and a branch, and if a predecessor
-/// branches to us and one of our successors, fold the setcc into the
-/// predecessor and use logical operations to pick the right destination.
-bool FoldBranchToCommonDest(BranchInst *BI, unsigned BonusInstThreshold = 1);
-
-/// This function takes a virtual register computed by an Instruction and
-/// replaces it with a slot in the stack frame, allocated via alloca.
-/// This allows the CFG to be changed around without fear of invalidating the
-/// SSA information for the value. It returns the pointer to the alloca inserted
-/// to create a stack slot for X.
-AllocaInst *DemoteRegToStack(Instruction &X,
-                             bool VolatileLoads = false,
-                             Instruction *AllocaPoint = nullptr);
-
-/// This function takes a virtual register computed by a phi node and replaces
-/// it with a slot in the stack frame, allocated via alloca. The phi node is
-/// deleted and it returns the pointer to the alloca inserted.
-AllocaInst *DemotePHIToStack(PHINode *P, Instruction *AllocaPoint = nullptr);
-
-/// Try to ensure that the alignment of \p V is at least \p PrefAlign bytes. If
-/// the owning object can be modified and has an alignment less than \p
-/// PrefAlign, it will be increased and \p PrefAlign returned. If the alignment
-/// cannot be increased, the known alignment of the value is returned.
-///
-/// It is not always possible to modify the alignment of the underlying object,
-/// so if alignment is important, a more reliable approach is to simply align
-/// all global variables and allocation instructions to their preferred
-/// alignment from the beginning.
-unsigned getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign,
-                                    const DataLayout &DL,
-                                    const Instruction *CxtI = nullptr,
-                                    AssumptionCache *AC = nullptr,
-                                    const DominatorTree *DT = nullptr);
-
-/// Try to infer an alignment for the specified pointer.
-inline unsigned getKnownAlignment(Value *V, const DataLayout &DL,
-                                  const Instruction *CxtI = nullptr,
-                                  AssumptionCache *AC = nullptr,
-                                  const DominatorTree *DT = nullptr) {
-  return getOrEnforceKnownAlignment(V, 0, DL, CxtI, AC, DT);
-}
-
 /// Given a getelementptr instruction/constantexpr, emit the code necessary to
 /// compute the offset from the base pointer (without adding in the base
 /// pointer). Return the result as a signed integer of intptr size.
@@ -316,192 +86,6 @@
   return Result;
 }
 
-///===---------------------------------------------------------------------===//
-///  Dbg Intrinsic utilities
-///
-
-/// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
-void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
-                                     StoreInst *SI, DIBuilder &Builder);
-
-/// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value
-/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
-void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
-                                     LoadInst *LI, DIBuilder &Builder);
-
-/// Inserts a llvm.dbg.value intrinsic after a phi that has an associated
-/// llvm.dbg.declare or llvm.dbg.addr intrinsic.
-void ConvertDebugDeclareToDebugValue(DbgInfoIntrinsic *DII,
-                                     PHINode *LI, DIBuilder &Builder);
-
-/// Lowers llvm.dbg.declare intrinsics into appropriate set of
-/// llvm.dbg.value intrinsics.
-bool LowerDbgDeclare(Function &F);
-
-/// Propagate dbg.value intrinsics through the newly inserted PHIs.
-void insertDebugValuesForPHIs(BasicBlock *BB,
-                              SmallVectorImpl<PHINode *> &InsertedPHIs);
-
-/// Finds all intrinsics declaring local variables as living in the memory that
-/// 'V' points to. This may include a mix of dbg.declare and
-/// dbg.addr intrinsics.
-TinyPtrVector<DbgInfoIntrinsic *> FindDbgAddrUses(Value *V);
-
-/// Finds the llvm.dbg.value intrinsics describing a value.
-void findDbgValues(SmallVectorImpl<DbgValueInst *> &DbgValues, Value *V);
-
-/// Finds the debug info intrinsics describing a value.
-void findDbgUsers(SmallVectorImpl<DbgInfoIntrinsic *> &DbgInsts, Value *V);
-
-/// Replaces llvm.dbg.declare instruction when the address it
-/// describes is replaced with a new value. If Deref is true, an
-/// additional DW_OP_deref is prepended to the expression. If Offset
-/// is non-zero, a constant displacement is added to the expression
-/// (between the optional Deref operations). Offset can be negative.
-bool replaceDbgDeclare(Value *Address, Value *NewAddress,
-                       Instruction *InsertBefore, DIBuilder &Builder,
-                       bool DerefBefore, int Offset, bool DerefAfter);
-
-/// Replaces llvm.dbg.declare instruction when the alloca it describes
-/// is replaced with a new value. If Deref is true, an additional
-/// DW_OP_deref is prepended to the expression. If Offset is non-zero,
-/// a constant displacement is added to the expression (between the
-/// optional Deref operations). Offset can be negative. The new
-/// llvm.dbg.declare is inserted immediately before AI.
-bool replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
-                                DIBuilder &Builder, bool DerefBefore,
-                                int Offset, bool DerefAfter);
-
-/// Replaces multiple llvm.dbg.value instructions when the alloca it describes
-/// is replaced with a new value. If Offset is non-zero, a constant displacement
-/// is added to the expression (after the mandatory Deref). Offset can be
-/// negative. New llvm.dbg.value instructions are inserted at the locations of
-/// the instructions they replace.
-void replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
-                              DIBuilder &Builder, int Offset = 0);
-
-/// Assuming the instruction \p I is going to be deleted, attempt to salvage any
-/// dbg.value intrinsics referring to \p I by rewriting its effect into a
-/// DIExpression.
-void salvageDebugInfo(Instruction &I);
-
-/// Remove all instructions from a basic block other than it's terminator
-/// and any present EH pad instructions.
-unsigned removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB);
-
-/// Insert an unreachable instruction before the specified
-/// instruction, making it and the rest of the code in the block dead.
-unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap,
-                             bool PreserveLCSSA = false,
-                             DeferredDominance *DDT = nullptr);
-
-/// Convert the CallInst to InvokeInst with the specified unwind edge basic
-/// block.  This also splits the basic block where CI is located, because
-/// InvokeInst is a terminator instruction.  Returns the newly split basic
-/// block.
-BasicBlock *changeToInvokeAndSplitBasicBlock(CallInst *CI,
-                                             BasicBlock *UnwindEdge);
-
-/// Replace 'BB's terminator with one that does not have an unwind successor
-/// block. Rewrites `invoke` to `call`, etc. Updates any PHIs in unwind
-/// successor.
-///
-/// \param BB  Block whose terminator will be replaced.  Its terminator must
-///            have an unwind successor.
-void removeUnwindEdge(BasicBlock *BB, DeferredDominance *DDT = nullptr);
-
-/// Remove all blocks that can not be reached from the function's entry.
-///
-/// Returns true if any basic block was removed.
-bool removeUnreachableBlocks(Function &F, LazyValueInfo *LVI = nullptr,
-                             DeferredDominance *DDT = nullptr);
-
-/// Combine the metadata of two instructions so that K can replace J
-///
-/// Metadata not listed as known via KnownIDs is removed
-void combineMetadata(Instruction *K, const Instruction *J, ArrayRef<unsigned> KnownIDs);
-
-/// Combine the metadata of two instructions so that K can replace J. This
-/// specifically handles the case of CSE-like transformations.
-///
-/// Unknown metadata is removed.
-void combineMetadataForCSE(Instruction *K, const Instruction *J);
-
-// Replace each use of 'From' with 'To', if that use does not belong to basic
-// block where 'From' is defined. Returns the number of replacements made.
-unsigned replaceNonLocalUsesWith(Instruction *From, Value *To);
-
-/// Replace each use of 'From' with 'To' if that use is dominated by
-/// the given edge.  Returns the number of replacements made.
-unsigned replaceDominatedUsesWith(Value *From, Value *To, DominatorTree &DT,
-                                  const BasicBlockEdge &Edge);
-/// Replace each use of 'From' with 'To' if that use is dominated by
-/// the end of the given BasicBlock. Returns the number of replacements made.
-unsigned replaceDominatedUsesWith(Value *From, Value *To, DominatorTree &DT,
-                                  const BasicBlock *BB);
-
-/// Return true if the CallSite CS calls a gc leaf function.
-///
-/// A leaf function is a function that does not safepoint the thread during its
-/// execution.  During a call or invoke to such a function, the callers stack
-/// does not have to be made parseable.
-///
-/// Most passes can and should ignore this information, and it is only used
-/// during lowering by the GC infrastructure.
-bool callsGCLeafFunction(ImmutableCallSite CS, const TargetLibraryInfo &TLI);
-
-/// Copy a nonnull metadata node to a new load instruction.
-///
-/// This handles mapping it to range metadata if the new load is an integer
-/// load instead of a pointer load.
-void copyNonnullMetadata(const LoadInst &OldLI, MDNode *N, LoadInst &NewLI);
-
-/// Copy a range metadata node to a new load instruction.
-///
-/// This handles mapping it to nonnull metadata if the new load is a pointer
-/// load instead of an integer load and the range doesn't cover null.
-void copyRangeMetadata(const DataLayout &DL, const LoadInst &OldLI, MDNode *N,
-                       LoadInst &NewLI);
-
-//===----------------------------------------------------------------------===//
-//  Intrinsic pattern matching
-//
-
-/// Try to match a bswap or bitreverse idiom.
-///
-/// If an idiom is matched, an intrinsic call is inserted before \c I. Any added
-/// instructions are returned in \c InsertedInsts. They will all have been added
-/// to a basic block.
-///
-/// A bitreverse idiom normally requires around 2*BW nodes to be searched (where
-/// BW is the bitwidth of the integer type). A bswap idiom requires anywhere up
-/// to BW / 4 nodes to be searched, so is significantly faster.
-///
-/// This function returns true on a successful match or false otherwise.
-bool recognizeBSwapOrBitReverseIdiom(
-    Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
-    SmallVectorImpl<Instruction *> &InsertedInsts);
-
-//===----------------------------------------------------------------------===//
-//  Sanitizer utilities
-//
-
-/// Given a CallInst, check if it calls a string function known to CodeGen,
-/// and mark it with NoBuiltin if so.  To be used by sanitizers that intend
-/// to intercept string functions and want to avoid converting them to target
-/// specific instructions.
-void maybeMarkSanitizerLibraryCallNoBuiltin(CallInst *CI,
-                                            const TargetLibraryInfo *TLI);
-
-//===----------------------------------------------------------------------===//
-//  Transform predicates
-//
-
-/// Given an instruction, is it legal to set operand OpIdx to a non-constant
-/// value?
-bool canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx);
-
-} // end namespace llvm
+}
 
 #endif // LLVM_TRANSFORMS_UTILS_LOCAL_H
diff --git a/linux-x64/clang/include/llvm/Analysis/ValueLattice.h b/linux-x64/clang/include/llvm/Analysis/ValueLattice.h
index c943fd1..0744ca6 100644
--- a/linux-x64/clang/include/llvm/Analysis/ValueLattice.h
+++ b/linux-x64/clang/include/llvm/Analysis/ValueLattice.h
@@ -275,6 +275,8 @@
     ConstantRange NewR = getConstantRange().unionWith(RHS.getConstantRange());
     if (NewR.isFullSet())
       markOverdefined();
+    else if (NewR == getConstantRange())
+      return false;
     else
       markConstantRange(std::move(NewR));
     return true;
diff --git a/linux-x64/clang/include/llvm/Analysis/ValueTracking.h b/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
index ced95df..99b47fb 100644
--- a/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
+++ b/linux-x64/clang/include/llvm/Analysis/ValueTracking.h
@@ -101,6 +101,12 @@
                       const Instruction *CxtI = nullptr,
                       const DominatorTree *DT = nullptr);
 
+  /// Return true if the two given values are negation.
+  /// Currently can recoginze Value pair:
+  /// 1: <X, Y> if X = sub (0, Y) or Y = sub (0, X)
+  /// 2: <X, Y> if X = sub (A, B) and Y = sub (B, A)
+  bool isKnownNegation(const Value *X, const Value *Y, bool NeedNSW = false);
+
   /// Returns true if the give value is known to be non-negative.
   bool isKnownNonNegative(const Value *V, const DataLayout &DL,
                           unsigned Depth = 0,
@@ -188,7 +194,8 @@
   /// Return true if the floating-point scalar value is not a NaN or if the
   /// floating-point vector value has no NaN elements. Return false if a value
   /// could ever be NaN.
-  bool isKnownNeverNaN(const Value *V);
+  bool isKnownNeverNaN(const Value *V, const TargetLibraryInfo *TLI,
+                       unsigned Depth = 0);
 
   /// Return true if we can prove that the specified FP value's sign bit is 0.
   ///
@@ -276,6 +283,22 @@
   /// pointer, return 'len+1'.  If we can't, return 0.
   uint64_t GetStringLength(const Value *V, unsigned CharSize = 8);
 
+  /// This function returns call pointer argument that is considered the same by
+  /// aliasing rules. You CAN'T use it to replace one value with another.
+  const Value *getArgumentAliasingToReturnedPointer(ImmutableCallSite CS);
+  inline Value *getArgumentAliasingToReturnedPointer(CallSite CS) {
+    return const_cast<Value *>(
+        getArgumentAliasingToReturnedPointer(ImmutableCallSite(CS)));
+  }
+
+  // {launder,strip}.invariant.group returns pointer that aliases its argument,
+  // and it only captures pointer by returning it.
+  // These intrinsics are not marked as nocapture, because returning is
+  // considered as capture. The arguments are not marked as returned neither,
+  // because it would make it useless.
+  bool isIntrinsicReturningPointerAliasingArgumentWithoutCapturing(
+      ImmutableCallSite CS);
+
   /// This method strips off any GEP address adjustments and pointer casts from
   /// the specified value, returning the original object being addressed. Note
   /// that the returned value has pointer type if the specified value does. If
@@ -288,7 +311,7 @@
     return GetUnderlyingObject(const_cast<Value *>(V), DL, MaxLookup);
   }
 
-  /// \brief This method is similar to GetUnderlyingObject except that it can
+  /// This method is similar to GetUnderlyingObject except that it can
   /// look through phi and select instructions and return multiple objects.
   ///
   /// If LoopInfo is passed, loop phis are further analyzed.  If a pointer
@@ -384,6 +407,11 @@
                                                AssumptionCache *AC,
                                                const Instruction *CxtI,
                                                const DominatorTree *DT);
+  OverflowResult computeOverflowForSignedMul(const Value *LHS, const Value *RHS,
+                                             const DataLayout &DL,
+                                             AssumptionCache *AC,
+                                             const Instruction *CxtI,
+                                             const DominatorTree *DT);
   OverflowResult computeOverflowForUnsignedAdd(const Value *LHS,
                                                const Value *RHS,
                                                const DataLayout &DL,
@@ -401,6 +429,16 @@
                                              AssumptionCache *AC = nullptr,
                                              const Instruction *CxtI = nullptr,
                                              const DominatorTree *DT = nullptr);
+  OverflowResult computeOverflowForUnsignedSub(const Value *LHS, const Value *RHS,
+                                               const DataLayout &DL,
+                                               AssumptionCache *AC,
+                                               const Instruction *CxtI,
+                                               const DominatorTree *DT);
+  OverflowResult computeOverflowForSignedSub(const Value *LHS, const Value *RHS,
+                                             const DataLayout &DL,
+                                             AssumptionCache *AC,
+                                             const Instruction *CxtI,
+                                             const DominatorTree *DT);
 
   /// Returns true if the arithmetic part of the \p II 's result is
   /// used only along the paths control dependent on the computation
@@ -427,7 +465,7 @@
   /// This is equivelent to saying that all instructions within the basic block
   /// are guaranteed to transfer execution to their successor within the basic
   /// block. This has the same assumptions w.r.t. undefined behavior as the
-  /// instruction variant of this function. 
+  /// instruction variant of this function.
   bool isGuaranteedToTransferExecutionToSuccessor(const BasicBlock *BB);
 
   /// Return true if this function can prove that the instruction I
@@ -461,7 +499,7 @@
   /// the parent of I.
   bool programUndefinedIfFullPoison(const Instruction *PoisonI);
 
-  /// \brief Specific patterns of select instructions we can match.
+  /// Specific patterns of select instructions we can match.
   enum SelectPatternFlavor {
     SPF_UNKNOWN = 0,
     SPF_SMIN,                   /// Signed minimum
@@ -474,7 +512,7 @@
     SPF_NABS                    /// Negated absolute value
   };
 
-  /// \brief Behavior when a floating point min/max is given one NaN and one
+  /// Behavior when a floating point min/max is given one NaN and one
   /// non-NaN as input.
   enum SelectPatternNaNBehavior {
     SPNB_NA = 0,                /// NaN behavior not applicable.
@@ -502,6 +540,9 @@
   /// Pattern match integer [SU]MIN, [SU]MAX and ABS idioms, returning the kind
   /// and providing the out parameter results if we successfully match.
   ///
+  /// For ABS/NABS, LHS will be set to the input to the abs idiom. RHS will be
+  /// the negation instruction from the idiom.
+  ///
   /// If CastOp is not nullptr, also match MIN/MAX idioms where the type does
   /// not match that of the original select. If this is the case, the cast
   /// operation (one of Trunc,SExt,Zext) that must be done to transform the
diff --git a/linux-x64/clang/include/llvm/Analysis/VectorUtils.h b/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
index 6315e84..9fde36d 100644
--- a/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
+++ b/linux-x64/clang/include/llvm/Analysis/VectorUtils.h
@@ -33,50 +33,50 @@
 enum ID : unsigned;
 }
 
-/// \brief Identify if the intrinsic is trivially vectorizable.
+/// Identify if the intrinsic is trivially vectorizable.
 /// This method returns true if the intrinsic's argument types are all
 /// scalars for the scalar form of the intrinsic and all vectors for
 /// the vector form of the intrinsic.
 bool isTriviallyVectorizable(Intrinsic::ID ID);
 
-/// \brief Identifies if the intrinsic has a scalar operand. It checks for
+/// Identifies if the intrinsic has a scalar operand. It checks for
 /// ctlz,cttz and powi special intrinsics whose argument is scalar.
 bool hasVectorInstrinsicScalarOpd(Intrinsic::ID ID, unsigned ScalarOpdIdx);
 
-/// \brief Returns intrinsic ID for call.
+/// Returns intrinsic ID for call.
 /// For the input call instruction it finds mapping intrinsic and returns
 /// its intrinsic ID, in case it does not found it return not_intrinsic.
 Intrinsic::ID getVectorIntrinsicIDForCall(const CallInst *CI,
                                           const TargetLibraryInfo *TLI);
 
-/// \brief Find the operand of the GEP that should be checked for consecutive
+/// Find the operand of the GEP that should be checked for consecutive
 /// stores. This ignores trailing indices that have no effect on the final
 /// pointer.
 unsigned getGEPInductionOperand(const GetElementPtrInst *Gep);
 
-/// \brief If the argument is a GEP, then returns the operand identified by
+/// If the argument is a GEP, then returns the operand identified by
 /// getGEPInductionOperand. However, if there is some other non-loop-invariant
 /// operand, it returns that instead.
 Value *stripGetElementPtr(Value *Ptr, ScalarEvolution *SE, Loop *Lp);
 
-/// \brief If a value has only one user that is a CastInst, return it.
+/// If a value has only one user that is a CastInst, return it.
 Value *getUniqueCastUse(Value *Ptr, Loop *Lp, Type *Ty);
 
-/// \brief Get the stride of a pointer access in a loop. Looks for symbolic
+/// Get the stride of a pointer access in a loop. Looks for symbolic
 /// strides "a[i*stride]". Returns the symbolic stride, or null otherwise.
 Value *getStrideFromPointer(Value *Ptr, ScalarEvolution *SE, Loop *Lp);
 
-/// \brief Given a vector and an element number, see if the scalar value is
+/// Given a vector and an element number, see if the scalar value is
 /// already around as a register, for example if it were inserted then extracted
 /// from the vector.
 Value *findScalarElement(Value *V, unsigned EltNo);
 
-/// \brief Get splat value if the input is a splat vector or return nullptr.
+/// Get splat value if the input is a splat vector or return nullptr.
 /// The value may be extracted from a splat constants vector or from
 /// a sequence of instructions that broadcast a single value into a vector.
 const Value *getSplatValue(const Value *V);
 
-/// \brief Compute a map of integer instructions to their minimum legal type
+/// Compute a map of integer instructions to their minimum legal type
 /// size.
 ///
 /// C semantics force sub-int-sized values (e.g. i8, i16) to be promoted to int
@@ -124,7 +124,7 @@
 /// This function always sets a (possibly null) value for each K in Kinds.
 Instruction *propagateMetadata(Instruction *I, ArrayRef<Value *> VL);
 
-/// \brief Create an interleave shuffle mask.
+/// Create an interleave shuffle mask.
 ///
 /// This function creates a shuffle mask for interleaving \p NumVecs vectors of
 /// vectorization factor \p VF into a single wide vector. The mask is of the
@@ -138,7 +138,7 @@
 Constant *createInterleaveMask(IRBuilder<> &Builder, unsigned VF,
                                unsigned NumVecs);
 
-/// \brief Create a stride shuffle mask.
+/// Create a stride shuffle mask.
 ///
 /// This function creates a shuffle mask whose elements begin at \p Start and
 /// are incremented by \p Stride. The mask can be used to deinterleave an
@@ -153,7 +153,7 @@
 Constant *createStrideMask(IRBuilder<> &Builder, unsigned Start,
                            unsigned Stride, unsigned VF);
 
-/// \brief Create a sequential shuffle mask.
+/// Create a sequential shuffle mask.
 ///
 /// This function creates shuffle mask whose elements are sequential and begin
 /// at \p Start.  The mask contains \p NumInts integers and is padded with \p
@@ -167,7 +167,7 @@
 Constant *createSequentialMask(IRBuilder<> &Builder, unsigned Start,
                                unsigned NumInts, unsigned NumUndefs);
 
-/// \brief Concatenate a list of vectors.
+/// Concatenate a list of vectors.
 ///
 /// This function generates code that concatenate the vectors in \p Vecs into a
 /// single large vector. The number of vectors should be greater than one, and
diff --git a/linux-x64/clang/include/llvm/AsmParser/Parser.h b/linux-x64/clang/include/llvm/AsmParser/Parser.h
index 4e22101..285a7c0 100644
--- a/linux-x64/clang/include/llvm/AsmParser/Parser.h
+++ b/linux-x64/clang/include/llvm/AsmParser/Parser.h
@@ -21,18 +21,19 @@
 class Constant;
 class LLVMContext;
 class Module;
+class ModuleSummaryIndex;
 struct SlotMapping;
 class SMDiagnostic;
 class Type;
 
-/// This function is the main interface to the LLVM Assembly Parser. It parses
+/// This function is a main interface to the LLVM Assembly Parser. It parses
 /// an ASCII file that (presumably) contains LLVM Assembly code. It returns a
 /// Module (intermediate representation) with the corresponding features. Note
 /// that this does not verify that the generated Module is valid, so you should
 /// run the verifier after parsing the file to check that it is okay.
-/// \brief Parse LLVM Assembly from a file
+/// Parse LLVM Assembly from a file
 /// \param Filename The name of the file to parse
-/// \param Error Error result info.
+/// \param Err Error result info.
 /// \param Context Context in which to allocate globals info.
 /// \param Slots The optional slot mapping that will be initialized during
 ///              parsing.
@@ -41,7 +42,7 @@
 ///                         for use inside the LLVM testuite!
 /// \param DataLayoutString Override datalayout in the llvm assembly.
 std::unique_ptr<Module>
-parseAssemblyFile(StringRef Filename, SMDiagnostic &Error, LLVMContext &Context,
+parseAssemblyFile(StringRef Filename, SMDiagnostic &Err, LLVMContext &Context,
                   SlotMapping *Slots = nullptr, bool UpgradeDebugInfo = true,
                   StringRef DataLayoutString = "");
 
@@ -50,9 +51,9 @@
 /// Module (intermediate representation) with the corresponding features. Note
 /// that this does not verify that the generated Module is valid, so you should
 /// run the verifier after parsing the file to check that it is okay.
-/// \brief Parse LLVM Assembly from a string
+/// Parse LLVM Assembly from a string
 /// \param AsmString The string containing assembly
-/// \param Error Error result info.
+/// \param Err Error result info.
 /// \param Context Context in which to allocate globals info.
 /// \param Slots The optional slot mapping that will be initialized during
 ///              parsing.
@@ -61,14 +62,54 @@
 ///                         for use inside the LLVM testuite!
 /// \param DataLayoutString Override datalayout in the llvm assembly.
 std::unique_ptr<Module> parseAssemblyString(StringRef AsmString,
-                                            SMDiagnostic &Error,
+                                            SMDiagnostic &Err,
                                             LLVMContext &Context,
                                             SlotMapping *Slots = nullptr,
                                             bool UpgradeDebugInfo = true,
                                             StringRef DataLayoutString = "");
 
+/// Holds the Module and ModuleSummaryIndex returned by the interfaces
+/// that parse both.
+struct ParsedModuleAndIndex {
+  std::unique_ptr<Module> Mod;
+  std::unique_ptr<ModuleSummaryIndex> Index;
+};
+
+/// This function is a main interface to the LLVM Assembly Parser. It parses
+/// an ASCII file that (presumably) contains LLVM Assembly code, including
+/// a module summary. It returns a Module (intermediate representation) and
+/// a ModuleSummaryIndex with the corresponding features. Note that this does
+/// not verify that the generated Module or Index are valid, so you should
+/// run the verifier after parsing the file to check that they are okay.
+/// Parse LLVM Assembly from a file
+/// \param Filename The name of the file to parse
+/// \param Err Error result info.
+/// \param Context Context in which to allocate globals info.
+/// \param Slots The optional slot mapping that will be initialized during
+///              parsing.
+/// \param UpgradeDebugInfo Run UpgradeDebugInfo, which runs the Verifier.
+///                         This option should only be set to false by llvm-as
+///                         for use inside the LLVM testuite!
+/// \param DataLayoutString Override datalayout in the llvm assembly.
+ParsedModuleAndIndex
+parseAssemblyFileWithIndex(StringRef Filename, SMDiagnostic &Err,
+                           LLVMContext &Context, SlotMapping *Slots = nullptr,
+                           bool UpgradeDebugInfo = true,
+                           StringRef DataLayoutString = "");
+
+/// This function is a main interface to the LLVM Assembly Parser. It parses
+/// an ASCII file that (presumably) contains LLVM Assembly code for a module
+/// summary. It returns a a ModuleSummaryIndex with the corresponding features.
+/// Note that this does not verify that the generated Index is valid, so you
+/// should run the verifier after parsing the file to check that it is okay.
+/// Parse LLVM Assembly Index from a file
+/// \param Filename The name of the file to parse
+/// \param Err Error result info.
+std::unique_ptr<ModuleSummaryIndex>
+parseSummaryIndexAssemblyFile(StringRef Filename, SMDiagnostic &Err);
+
 /// parseAssemblyFile and parseAssemblyString are wrappers around this function.
-/// \brief Parse LLVM Assembly from a MemoryBuffer.
+/// Parse LLVM Assembly from a MemoryBuffer.
 /// \param F The MemoryBuffer containing assembly
 /// \param Err Error result info.
 /// \param Slots The optional slot mapping that will be initialized during
@@ -83,6 +124,34 @@
                                       bool UpgradeDebugInfo = true,
                                       StringRef DataLayoutString = "");
 
+/// Parse LLVM Assembly including the summary index from a MemoryBuffer.
+///
+/// \param F The MemoryBuffer containing assembly with summary
+/// \param Err Error result info.
+/// \param Slots The optional slot mapping that will be initialized during
+///              parsing.
+/// \param UpgradeDebugInfo Run UpgradeDebugInfo, which runs the Verifier.
+///                         This option should only be set to false by llvm-as
+///                         for use inside the LLVM testuite!
+/// \param DataLayoutString Override datalayout in the llvm assembly.
+///
+/// parseAssemblyFileWithIndex is a wrapper around this function.
+ParsedModuleAndIndex parseAssemblyWithIndex(MemoryBufferRef F,
+                                            SMDiagnostic &Err,
+                                            LLVMContext &Context,
+                                            SlotMapping *Slots = nullptr,
+                                            bool UpgradeDebugInfo = true,
+                                            StringRef DataLayoutString = "");
+
+/// Parse LLVM Assembly for summary index from a MemoryBuffer.
+///
+/// \param F The MemoryBuffer containing assembly with summary
+/// \param Err Error result info.
+///
+/// parseSummaryIndexAssemblyFile is a wrapper around this function.
+std::unique_ptr<ModuleSummaryIndex>
+parseSummaryIndexAssembly(MemoryBufferRef F, SMDiagnostic &Err);
+
 /// This function is the low-level interface to the LLVM Assembly Parser.
 /// This is kept as an independent function instead of being inlined into
 /// parseAssembly for the convenience of interactive users that want to add
@@ -90,6 +159,7 @@
 ///
 /// \param F The MemoryBuffer containing assembly
 /// \param M The module to add data to.
+/// \param Index The index to add data to.
 /// \param Err Error result info.
 /// \param Slots The optional slot mapping that will be initialized during
 ///              parsing.
@@ -98,8 +168,8 @@
 ///                         This option should only be set to false by llvm-as
 ///                         for use inside the LLVM testuite!
 /// \param DataLayoutString Override datalayout in the llvm assembly.
-bool parseAssemblyInto(MemoryBufferRef F, Module &M, SMDiagnostic &Err,
-                       SlotMapping *Slots = nullptr,
+bool parseAssemblyInto(MemoryBufferRef F, Module *M, ModuleSummaryIndex *Index,
+                       SMDiagnostic &Err, SlotMapping *Slots = nullptr,
                        bool UpgradeDebugInfo = true,
                        StringRef DataLayoutString = "");
 
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/COFF.h b/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
index 4d726aa..7b973c0 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/COFF.h
@@ -463,7 +463,7 @@
   AuxiliarySectionDefinition SectionDefinition;
 };
 
-/// @brief The Import Directory Table.
+/// The Import Directory Table.
 ///
 /// There is a single array of these and one entry per imported DLL.
 struct ImportDirectoryTableEntry {
@@ -474,7 +474,7 @@
   uint32_t ImportAddressTableRVA;
 };
 
-/// @brief The PE32 Import Lookup Table.
+/// The PE32 Import Lookup Table.
 ///
 /// There is an array of these for each imported DLL. It represents either
 /// the ordinal to import from the target DLL, or a name to lookup and import
@@ -485,32 +485,32 @@
 struct ImportLookupTableEntry32 {
   uint32_t data;
 
-  /// @brief Is this entry specified by ordinal, or name?
+  /// Is this entry specified by ordinal, or name?
   bool isOrdinal() const { return data & 0x80000000; }
 
-  /// @brief Get the ordinal value of this entry. isOrdinal must be true.
+  /// Get the ordinal value of this entry. isOrdinal must be true.
   uint16_t getOrdinal() const {
     assert(isOrdinal() && "ILT entry is not an ordinal!");
     return data & 0xFFFF;
   }
 
-  /// @brief Set the ordinal value and set isOrdinal to true.
+  /// Set the ordinal value and set isOrdinal to true.
   void setOrdinal(uint16_t o) {
     data = o;
     data |= 0x80000000;
   }
 
-  /// @brief Get the Hint/Name entry RVA. isOrdinal must be false.
+  /// Get the Hint/Name entry RVA. isOrdinal must be false.
   uint32_t getHintNameRVA() const {
     assert(!isOrdinal() && "ILT entry is not a Hint/Name RVA!");
     return data;
   }
 
-  /// @brief Set the Hint/Name entry RVA and set isOrdinal to false.
+  /// Set the Hint/Name entry RVA and set isOrdinal to false.
   void setHintNameRVA(uint32_t rva) { data = rva; }
 };
 
-/// @brief The DOS compatible header at the front of all PEs.
+/// The DOS compatible header at the front of all PEs.
 struct DOSHeader {
   uint16_t Magic;
   uint16_t UsedBytesInTheLastPage;
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
index 57e2596..944c5dd 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.def
@@ -856,6 +856,7 @@
 // TODO: Add Mach-O and COFF names.
 // Official DWARF sections.
 HANDLE_DWARF_SECTION(DebugAbbrev, ".debug_abbrev", "debug-abbrev")
+HANDLE_DWARF_SECTION(DebugAddr, ".debug_addr", "debug-addr")
 HANDLE_DWARF_SECTION(DebugAranges, ".debug_aranges", "debug-aranges")
 HANDLE_DWARF_SECTION(DebugInfo, ".debug_info", "debug-info")
 HANDLE_DWARF_SECTION(DebugTypes, ".debug_types", "debug-types")
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
index 15724a9..9036f40 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Dwarf.h
@@ -540,6 +540,10 @@
 /// for attribute Attr.
 StringRef AttributeValueString(uint16_t Attr, unsigned Val);
 
+/// Returns the symbolic string representing Val when used as a value
+/// for atom Atom.
+StringRef AtomValueString(uint16_t Atom, unsigned Val);
+
 /// Describes an entry of the various gnu_pub* debug sections.
 ///
 /// The gnu_pub* kind looks like:
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def b/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
index c39f38a..2e15cc3 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/DynamicTags.def
@@ -16,6 +16,11 @@
 #define MIPS_DYNAMIC_TAG_DEFINED
 #endif
 
+#ifndef PPC64_DYNAMIC_TAG
+#define PPC64_DYNAMIC_TAG(name, value) DYNAMIC_TAG(name, value)
+#define PPC64_DYNAMIC_TAG_DEFINED
+#endif
+
 #ifndef DYNAMIC_TAG_MARKER
 #define DYNAMIC_TAG_MARKER(name, value) DYNAMIC_TAG(name, value)
 #define DYNAMIC_TAG_MARKER_DEFINED
@@ -58,6 +63,14 @@
 DYNAMIC_TAG(PREINIT_ARRAY, 32)   // Pointer to array of preinit functions.
 DYNAMIC_TAG(PREINIT_ARRAYSZ, 33) // Size of the DT_PREINIT_ARRAY array.
 
+DYNAMIC_TAG(SYMTAB_SHNDX, 34) // Address of the SHT_SYMTAB_SHNDX section.
+
+// Experimental support for SHT_RELR sections. For details, see proposal
+// at https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg
+DYNAMIC_TAG(RELRSZ, 35)  // Size of Relr relocation table.
+DYNAMIC_TAG(RELR, 36)    // Address of relocation table (Relr entries).
+DYNAMIC_TAG(RELRENT, 37) // Size of a Relr relocation entry.
+
 DYNAMIC_TAG_MARKER(LOOS, 0x60000000)   // Start of environment specific tags.
 DYNAMIC_TAG_MARKER(HIOS, 0x6FFFFFFF)   // End of environment specific tags.
 DYNAMIC_TAG_MARKER(LOPROC, 0x70000000) // Start of processor specific tags.
@@ -70,6 +83,12 @@
 DYNAMIC_TAG(ANDROID_RELA, 0x60000011)
 DYNAMIC_TAG(ANDROID_RELASZ, 0x60000012)
 
+// Android's experimental support for SHT_RELR sections.
+// https://android.googlesource.com/platform/bionic/+/b7feec74547f84559a1467aca02708ff61346d2a/libc/include/elf.h#253
+DYNAMIC_TAG(ANDROID_RELR, 0x6FFFE000)      // Address of relocation table (Relr entries).
+DYNAMIC_TAG(ANDROID_RELRSZ, 0x6FFFE001)    // Size of Relr relocation table.
+DYNAMIC_TAG(ANDROID_RELRENT, 0x6FFFE003)   // Size of a Relr relocation entry.
+
 DYNAMIC_TAG(GNU_HASH, 0x6FFFFEF5)    // Reference to the GNU hash table.
 DYNAMIC_TAG(TLSDESC_PLT, 0x6FFFFEF6) // Location of PLT entry for TLS
                                      // descriptor resolver calls.
@@ -171,6 +190,10 @@
 MIPS_DYNAMIC_TAG(MIPS_RLD_MAP_REL, 0x70000035)  // Relative offset of run time loader
                                                 // map, used for debugging.
 
+// PPC64 specific dynamic table entries.
+PPC64_DYNAMIC_TAG(PPC64_GLINK, 0x70000000) // Address of 32 bytes before the
+                                           // first glink lazy resolver stub.
+
 // Sun machine-independent extensions.
 DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
 DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Shared object to get values from
@@ -181,7 +204,13 @@
 #endif
 #ifdef MIPS_DYNAMIC_TAG_DEFINED
 #undef MIPS_DYNAMIC_TAG
+#undef MIPS_DYNAMIC_TAG_DEFINED
 #endif
 #ifdef HEXAGON_DYNAMIC_TAG_DEFINED
 #undef HEXAGON_DYNAMIC_TAG
+#undef HEXAGON_DYNAMIC_TAG_DEFINED
+#endif
+#ifdef PPC64_DYNAMIC_TAG_DEFINED
+#undef PPC64_DYNAMIC_TAG
+#undef PPC64_DYNAMIC_TAG_DEFINED
 #endif
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELF.h b/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
index 4651e51..2e77877 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/ELF.h
@@ -312,11 +312,6 @@
   EM_RISCV = 243,         // RISC-V
   EM_LANAI = 244,         // Lanai 32-bit processor
   EM_BPF = 247,           // Linux kernel bpf virtual machine
-
-  // A request has been made to the maintainer of the official registry for
-  // such numbers for an official value for WebAssembly. As soon as one is
-  // allocated, this enum will be updated to use it.
-  EM_WEBASSEMBLY = 0x4157, // WebAssembly architecture
 };
 
 // Object file classes.
@@ -418,8 +413,10 @@
 
 // ARM Specific e_flags
 enum : unsigned {
-  EF_ARM_SOFT_FLOAT = 0x00000200U,
-  EF_ARM_VFP_FLOAT = 0x00000400U,
+  EF_ARM_SOFT_FLOAT = 0x00000200U,     // Legacy pre EABI_VER5
+  EF_ARM_ABI_FLOAT_SOFT = 0x00000200U, // EABI_VER5
+  EF_ARM_VFP_FLOAT = 0x00000400U,      // Legacy pre EABI_VER5
+  EF_ARM_ABI_FLOAT_HARD = 0x00000400U, // EABI_VER5
   EF_ARM_EABI_UNKNOWN = 0x00000000U,
   EF_ARM_EABI_VER1 = 0x01000000U,
   EF_ARM_EABI_VER2 = 0x02000000U,
@@ -644,11 +641,6 @@
 #include "ELFRelocs/Sparc.def"
 };
 
-// ELF Relocation types for WebAssembly
-enum {
-#include "ELFRelocs/WebAssembly.def"
-};
-
 // AMDGPU specific e_flags.
 enum : unsigned {
   // Processor selection mask for EF_AMDGPU_MACH_* values.
@@ -658,8 +650,7 @@
   EF_AMDGPU_MACH_NONE = 0x000,
 
   // R600-based processors.
-  EF_AMDGPU_MACH_R600_FIRST = 0x001,
-  EF_AMDGPU_MACH_R600_LAST = 0x010,
+
   // Radeon HD 2000/3000 Series (R600).
   EF_AMDGPU_MACH_R600_R600 = 0x001,
   EF_AMDGPU_MACH_R600_R630 = 0x002,
@@ -685,9 +676,12 @@
   EF_AMDGPU_MACH_R600_RESERVED_FIRST = 0x011,
   EF_AMDGPU_MACH_R600_RESERVED_LAST = 0x01f,
 
+  // First/last R600-based processors.
+  EF_AMDGPU_MACH_R600_FIRST = EF_AMDGPU_MACH_R600_R600,
+  EF_AMDGPU_MACH_R600_LAST = EF_AMDGPU_MACH_R600_TURKS,
+
   // AMDGCN-based processors.
-  EF_AMDGPU_MACH_AMDGCN_FIRST = 0x020,
-  EF_AMDGPU_MACH_AMDGCN_LAST = 0x02d,
+
   // AMDGCN GFX6.
   EF_AMDGPU_MACH_AMDGCN_GFX600 = 0x020,
   EF_AMDGPU_MACH_AMDGCN_GFX601 = 0x021,
@@ -705,12 +699,16 @@
   // AMDGCN GFX9.
   EF_AMDGPU_MACH_AMDGCN_GFX900 = 0x02c,
   EF_AMDGPU_MACH_AMDGCN_GFX902 = 0x02d,
+  EF_AMDGPU_MACH_AMDGCN_GFX904 = 0x02e,
+  EF_AMDGPU_MACH_AMDGCN_GFX906 = 0x02f,
 
   // Reserved for AMDGCN-based processors.
   EF_AMDGPU_MACH_AMDGCN_RESERVED0 = 0x027,
-  EF_AMDGPU_MACH_AMDGCN_RESERVED1 = 0x02e,
-  EF_AMDGPU_MACH_AMDGCN_RESERVED2 = 0x02f,
-  EF_AMDGPU_MACH_AMDGCN_RESERVED3 = 0x030,
+  EF_AMDGPU_MACH_AMDGCN_RESERVED1 = 0x030,
+
+  // First/last AMDGCN-based processors.
+  EF_AMDGPU_MACH_AMDGCN_FIRST = EF_AMDGPU_MACH_AMDGCN_GFX600,
+  EF_AMDGPU_MACH_AMDGCN_LAST = EF_AMDGPU_MACH_AMDGCN_GFX906,
 
   // Indicates if the xnack target feature is enabled for all code contained in
   // the object.
@@ -790,6 +788,9 @@
   SHT_PREINIT_ARRAY = 16,               // Pointers to pre-init functions.
   SHT_GROUP = 17,                       // Section group.
   SHT_SYMTAB_SHNDX = 18,                // Indices for SHN_XINDEX entries.
+  // Experimental support for SHT_RELR sections. For details, see proposal
+  // at https://groups.google.com/forum/#!topic/generic-abi/bX460iggiKg
+  SHT_RELR = 19,                        // Relocation entries; only offsets.
   SHT_LOOS = 0x60000000,                // Lowest operating system-specific type.
   // Android packed relocation section types.
   // https://android.googlesource.com/platform/bionic/+/6f12bfece5dcc01325e0abba56a46b1bcf991c69/tools/relocation_packer/src/elf_file.cc#37
@@ -797,6 +798,12 @@
   SHT_ANDROID_RELA = 0x60000002,
   SHT_LLVM_ODRTAB = 0x6fff4c00,         // LLVM ODR table.
   SHT_LLVM_LINKER_OPTIONS = 0x6fff4c01, // LLVM Linker Options.
+  SHT_LLVM_CALL_GRAPH_PROFILE = 0x6fff4c02, // LLVM Call Graph Profile.
+  SHT_LLVM_ADDRSIG = 0x6fff4c03,        // List of address-significant symbols
+                                        // for safe ICF.
+  // Android's experimental support for SHT_RELR sections.
+  // https://android.googlesource.com/platform/bionic/+/b7feec74547f84559a1467aca02708ff61346d2a/libc/include/elf.h#512
+  SHT_ANDROID_RELR = 0x6fffff00,        // Relocation entries; only offsets.
   SHT_GNU_ATTRIBUTES = 0x6ffffff5,      // Object attributes.
   SHT_GNU_HASH = 0x6ffffff6,            // GNU-style hash table.
   SHT_GNU_verdef = 0x6ffffffd,          // GNU version definitions.
@@ -1060,6 +1067,9 @@
   }
 };
 
+// Relocation entry without explicit addend or info (relative relocations only).
+typedef Elf32_Word Elf32_Relr; // offset/bitmap for relative relocations
+
 // Relocation entry, without explicit addend.
 struct Elf64_Rel {
   Elf64_Addr r_offset; // Location (file byte offset, or program virtual addr).
@@ -1093,6 +1103,9 @@
   }
 };
 
+// Relocation entry without explicit addend or info (relative relocations only).
+typedef Elf64_Xword Elf64_Relr; // offset/bitmap for relative relocations
+
 // Program header for ELF32.
 struct Elf32_Phdr {
   Elf32_Word p_type;   // Type of segment
@@ -1156,9 +1169,6 @@
   PT_MIPS_RTPROC = 0x70000001,   // Runtime procedure table.
   PT_MIPS_OPTIONS = 0x70000002,  // Options segment.
   PT_MIPS_ABIFLAGS = 0x70000003, // Abiflags segment.
-
-  // WebAssembly program header types.
-  PT_WEBASSEMBLY_FUNCTIONS = PT_LOPROC + 0, // Function definitions.
 };
 
 // Segment flag bits.
@@ -1299,9 +1309,16 @@
 };
 
 // Property types used in GNU_PROPERTY_TYPE_0 notes.
-enum {
+enum : unsigned {
   GNU_PROPERTY_STACK_SIZE = 1,
   GNU_PROPERTY_NO_COPY_ON_PROTECTED = 2,
+  GNU_PROPERTY_X86_FEATURE_1_AND = 0xc0000002
+};
+
+// CET properties
+enum {
+  GNU_PROPERTY_X86_FEATURE_1_IBT = 1 << 0,
+  GNU_PROPERTY_X86_FEATURE_1_SHSTK = 1 << 1
 };
 
 // AMDGPU specific notes.
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC64.def b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC64.def
index 3a47c5a..8c5b482 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC64.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/PowerPC64.def
@@ -89,6 +89,13 @@
 #undef R_PPC64_DTPREL16_HIGHESTA
 #undef R_PPC64_TLSGD
 #undef R_PPC64_TLSLD
+#undef R_PPC64_ADDR16_HIGH
+#undef R_PPC64_ADDR16_HIGHA
+#undef R_PPC64_TPREL16_HIGH
+#undef R_PPC64_TPREL16_HIGHA
+#undef R_PPC64_DTPREL16_HIGH
+#undef R_PPC64_DTPREL16_HIGHA
+#undef R_PPC64_IRELATIVE
 #undef R_PPC64_REL16
 #undef R_PPC64_REL16_LO
 #undef R_PPC64_REL16_HI
@@ -175,6 +182,13 @@
 ELF_RELOC(R_PPC64_DTPREL16_HIGHESTA,    106)
 ELF_RELOC(R_PPC64_TLSGD,                107)
 ELF_RELOC(R_PPC64_TLSLD,                108)
+ELF_RELOC(R_PPC64_ADDR16_HIGH,          110)
+ELF_RELOC(R_PPC64_ADDR16_HIGHA,         111)
+ELF_RELOC(R_PPC64_TPREL16_HIGH,         112)
+ELF_RELOC(R_PPC64_TPREL16_HIGHA,        113)
+ELF_RELOC(R_PPC64_DTPREL16_HIGH,        114)
+ELF_RELOC(R_PPC64_DTPREL16_HIGHA,       115)
+ELF_RELOC(R_PPC64_IRELATIVE,            248)
 ELF_RELOC(R_PPC64_REL16,                249)
 ELF_RELOC(R_PPC64_REL16_LO,             250)
 ELF_RELOC(R_PPC64_REL16_HI,             251)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/WebAssembly.def b/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/WebAssembly.def
deleted file mode 100644
index 9a34349..0000000
--- a/linux-x64/clang/include/llvm/BinaryFormat/ELFRelocs/WebAssembly.def
+++ /dev/null
@@ -1,8 +0,0 @@
-
-#ifndef ELF_RELOC
-#error "ELF_RELOC must be defined"
-#endif
-
-ELF_RELOC(R_WEBASSEMBLY_NONE,          0)
-ELF_RELOC(R_WEBASSEMBLY_DATA,          1)
-ELF_RELOC(R_WEBASSEMBLY_FUNCTION,      2)
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/MachO.h b/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
index 060fbe1..c5294c7 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/MachO.h
@@ -1973,9 +1973,11 @@
 // Define a union of all load command structs
 #define LOAD_COMMAND_STRUCT(LCStruct) LCStruct LCStruct##_data;
 
-union macho_load_command {
+LLVM_PACKED_START
+union alignas(4) macho_load_command {
 #include "llvm/BinaryFormat/MachO.def"
 };
+LLVM_PACKED_END
 
 } // end namespace MachO
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Magic.h b/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
index 4ac826e..04801f8 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Magic.h
@@ -59,10 +59,10 @@
   Impl V = unknown;
 };
 
-/// @brief Identify the type of a binary file based on how magical it is.
+/// Identify the type of a binary file based on how magical it is.
 file_magic identify_magic(StringRef magic);
 
-/// @brief Get and identify \a path's type based on its content.
+/// Get and identify \a path's type based on its content.
 ///
 /// @param path Input path.
 /// @param result Set to the type of file, or file_magic::unknown.
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h b/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
index 91b217f..fa5448d 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
+++ b/linux-x64/clang/include/llvm/BinaryFormat/Wasm.h
@@ -24,6 +24,8 @@
 const char WasmMagic[] = {'\0', 'a', 's', 'm'};
 // Wasm binary format version
 const uint32_t WasmVersion = 0x1;
+// Wasm linking metadata version
+const uint32_t WasmMetadataVersion = 0x1;
 // Wasm uses a 64k page size
 const uint32_t WasmPageSize = 65536;
 
@@ -74,7 +76,7 @@
   uint32_t Index;
   WasmGlobalType Type;
   WasmInitExpr InitExpr;
-  StringRef Name; // from the "linking" or "names" section
+  StringRef SymbolName; // from the "linking" section
 };
 
 struct WasmImport {
@@ -100,7 +102,9 @@
   ArrayRef<uint8_t> Body;
   uint32_t CodeSectionOffset;
   uint32_t Size;
-  StringRef Name; // from the "linking" or "names" section
+  uint32_t CodeOffset;  // start of Locals and Body
+  StringRef SymbolName; // from the "linking" section
+  StringRef DebugName; // from the "name" section
   uint32_t Comdat; // from the "comdat info" section
 };
 
@@ -108,7 +112,7 @@
   uint32_t MemoryIndex;
   WasmInitExpr Offset;
   ArrayRef<uint8_t> Content;
-  StringRef Name;
+  StringRef Name; // from the "segment info" section
   uint32_t Alignment;
   uint32_t Flags;
   uint32_t Comdat; // from the "comdat info" section
@@ -144,8 +148,9 @@
   StringRef Name;
   uint8_t Kind;
   uint32_t Flags;
+  StringRef Module; // For undefined symbols the module name of the import
   union {
-    // For function or global symbols, the index in function of global index
+    // For function or global symbols, the index in function or global index
     // space.
     uint32_t ElementIndex;
     // For a data symbols, the address of the data relative to segment.
@@ -159,6 +164,7 @@
 };
 
 struct WasmLinkingData {
+  uint32_t Version;
   std::vector<WasmInitFunc> InitFunctions;
   std::vector<StringRef> Comdats;
   std::vector<WasmSymbolInfo> SymbolTable;
@@ -245,8 +251,9 @@
 // Kind codes used in the custom "linking" section in the WASM_SYMBOL_TABLE
 enum WasmSymbolType : unsigned {
   WASM_SYMBOL_TYPE_FUNCTION = 0x0,
-  WASM_SYMBOL_TYPE_DATA     = 0x1,
-  WASM_SYMBOL_TYPE_GLOBAL   = 0x2,
+  WASM_SYMBOL_TYPE_DATA = 0x1,
+  WASM_SYMBOL_TYPE_GLOBAL = 0x2,
+  WASM_SYMBOL_TYPE_SECTION = 0x3,
 };
 
 const unsigned WASM_SYMBOL_BINDING_MASK       = 0x3;
@@ -284,6 +291,9 @@
   return !(LHS == RHS);
 }
 
+std::string toString(wasm::WasmSymbolType type);
+std::string relocTypetoString(uint32_t type);
+
 } // end namespace wasm
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def b/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
index d6f0e42..8ffd51e 100644
--- a/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
+++ b/linux-x64/clang/include/llvm/BinaryFormat/WasmRelocs.def
@@ -11,3 +11,5 @@
 WASM_RELOC(R_WEBASSEMBLY_MEMORY_ADDR_I32,      5)
 WASM_RELOC(R_WEBASSEMBLY_TYPE_INDEX_LEB,       6)
 WASM_RELOC(R_WEBASSEMBLY_GLOBAL_INDEX_LEB,     7)
+WASM_RELOC(R_WEBASSEMBLY_FUNCTION_OFFSET_I32,  8)
+WASM_RELOC(R_WEBASSEMBLY_SECTION_OFFSET_I32,   9)
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitcodeWriter.h b/linux-x64/clang/include/llvm/Bitcode/BitcodeWriter.h
index fa32295..0010cf6 100644
--- a/linux-x64/clang/include/llvm/Bitcode/BitcodeWriter.h
+++ b/linux-x64/clang/include/llvm/Bitcode/BitcodeWriter.h
@@ -105,7 +105,7 @@
         const std::map<std::string, GVSummaryMapTy> *ModuleToSummariesForIndex);
   };
 
-  /// \brief Write the specified module to the specified raw output stream.
+  /// Write the specified module to the specified raw output stream.
   ///
   /// For streams where it matters, the given stream should be in "binary"
   /// mode.
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitcodeWriterPass.h b/linux-x64/clang/include/llvm/Bitcode/BitcodeWriterPass.h
index 9ac6fba..05044c9 100644
--- a/linux-x64/clang/include/llvm/Bitcode/BitcodeWriterPass.h
+++ b/linux-x64/clang/include/llvm/Bitcode/BitcodeWriterPass.h
@@ -21,9 +21,10 @@
 namespace llvm {
 class Module;
 class ModulePass;
+class Pass;
 class raw_ostream;
 
-/// \brief Create and return a pass that writes the module to the specified
+/// Create and return a pass that writes the module to the specified
 /// ostream. Note that this pass is designed for use with the legacy pass
 /// manager.
 ///
@@ -40,7 +41,10 @@
                                     bool EmitSummaryIndex = false,
                                     bool EmitModuleHash = false);
 
-/// \brief Pass for writing a module of IR out to a bitcode file.
+/// Check whether a pass is a BitcodeWriterPass.
+bool isBitcodeWriterPass(Pass *P);
+
+/// Pass for writing a module of IR out to a bitcode file.
 ///
 /// Note that this is intended for use with the new pass manager. To construct
 /// a pass for the legacy pass manager, use the function above.
@@ -51,7 +55,7 @@
   bool EmitModuleHash;
 
 public:
-  /// \brief Construct a bitcode writer pass around a particular output stream.
+  /// Construct a bitcode writer pass around a particular output stream.
   ///
   /// If \c ShouldPreserveUseListOrder, encode use-list order so it can be
   /// reproduced when deserialized.
@@ -65,7 +69,7 @@
       : OS(OS), ShouldPreserveUseListOrder(ShouldPreserveUseListOrder),
   EmitSummaryIndex(EmitSummaryIndex), EmitModuleHash(EmitModuleHash) {}
 
-  /// \brief Run the bitcode writer pass, and output the module to the selected
+  /// Run the bitcode writer pass, and output the module to the selected
   /// output stream.
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
 };
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h b/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h
index b484fa2..72e7619 100644
--- a/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h
+++ b/linux-x64/clang/include/llvm/Bitcode/BitstreamReader.h
@@ -429,7 +429,7 @@
     // don't care what code widths are used inside of it.
     ReadVBR(bitc::CodeLenWidth);
     SkipToFourByteBoundary();
-    unsigned NumFourBytes = Read(bitc::BlockSizeWidth);
+    size_t NumFourBytes = Read(bitc::BlockSizeWidth);
 
     // Check that the block wasn't partially defined, and that the offset isn't
     // bogus.
diff --git a/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h b/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h
index e276db5..c854769 100644
--- a/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h
+++ b/linux-x64/clang/include/llvm/Bitcode/BitstreamWriter.h
@@ -90,10 +90,10 @@
     assert(BlockScope.empty() && CurAbbrevs.empty() && "Block imbalance");
   }
 
-  /// \brief Retrieve the current position in the stream, in bits.
+  /// Retrieve the current position in the stream, in bits.
   uint64_t GetCurrentBitNo() const { return GetBufferOffset() * 8 + CurBit; }
 
-  /// \brief Retrieve the number of bits currently used to encode an abbrev ID.
+  /// Retrieve the number of bits currently used to encode an abbrev ID.
   unsigned GetAbbrevIDWidth() const { return CurCodeSize; }
 
   //===--------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h b/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
index f3500e1..6723cf4 100644
--- a/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
+++ b/linux-x64/clang/include/llvm/Bitcode/LLVMBitCodes.h
@@ -310,6 +310,7 @@
   METADATA_GLOBAL_VAR_EXPR = 37,        // [distinct, var, expr]
   METADATA_INDEX_OFFSET = 38,           // [offset]
   METADATA_INDEX = 39,                  // [bitpos]
+  METADATA_LABEL = 40,                  // [distinct, scope, name, file, line]
 };
 
 // The constants block (CONSTANTS_BLOCK_ID) describes emission for each
@@ -589,6 +590,7 @@
   ATTR_KIND_SANITIZE_HWADDRESS = 55,
   ATTR_KIND_NOCF_CHECK = 56,
   ATTR_KIND_OPT_FOR_FUZZING = 57,
+  ATTR_KIND_SHADOWCALLSTACK = 58,
 };
 
 enum ComdatSelectionKindCodes {
diff --git a/linux-x64/clang/include/llvm/CodeGen/AccelTable.h b/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
index ec850a8..1392858 100644
--- a/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
+++ b/linux-x64/clang/include/llvm/CodeGen/AccelTable.h
@@ -108,6 +108,8 @@
 namespace llvm {
 
 class AsmPrinter;
+class DwarfCompileUnit;
+class DwarfDebug;
 
 /// Interface which the different types of accelerator table data have to
 /// conform. It serves as a base class for different values of the template
@@ -120,8 +122,8 @@
     return order() < Other.order();
   }
 
-  // Subclasses should implement:
-  // static uint32_t hash(StringRef Name);
+    // Subclasses should implement:
+    // static uint32_t hash(StringRef Name);
 
 #ifndef NDEBUG
   virtual void print(raw_ostream &OS) const = 0;
@@ -244,6 +246,54 @@
   static uint32_t hash(StringRef Buffer) { return djbHash(Buffer); }
 };
 
+/// The Data class implementation for DWARF v5 accelerator table. Unlike the
+/// Apple Data classes, this class is just a DIE wrapper, and does not know to
+/// serialize itself. The complete serialization logic is in the
+/// emitDWARF5AccelTable function.
+class DWARF5AccelTableData : public AccelTableData {
+public:
+  static uint32_t hash(StringRef Name) { return caseFoldingDjbHash(Name); }
+
+  DWARF5AccelTableData(const DIE &Die) : Die(Die) {}
+
+#ifndef NDEBUG
+  void print(raw_ostream &OS) const override;
+#endif
+
+  const DIE &getDie() const { return Die; }
+  uint64_t getDieOffset() const { return Die.getOffset(); }
+  unsigned getDieTag() const { return Die.getTag(); }
+
+protected:
+  const DIE &Die;
+
+  uint64_t order() const override { return Die.getOffset(); }
+};
+
+class DWARF5AccelTableStaticData : public AccelTableData {
+public:
+  static uint32_t hash(StringRef Name) { return caseFoldingDjbHash(Name); }
+
+  DWARF5AccelTableStaticData(uint64_t DieOffset, unsigned DieTag,
+                             unsigned CUIndex)
+      : DieOffset(DieOffset), DieTag(DieTag), CUIndex(CUIndex) {}
+
+#ifndef NDEBUG
+  void print(raw_ostream &OS) const override;
+#endif
+
+  uint64_t getDieOffset() const { return DieOffset; }
+  unsigned getDieTag() const { return DieTag; }
+  unsigned getCUIndex() const { return CUIndex; }
+
+protected:
+  uint64_t DieOffset;
+  unsigned DieTag;
+  unsigned CUIndex;
+
+  uint64_t order() const override { return DieOffset; }
+};
+
 void emitAppleAccelTableImpl(AsmPrinter *Asm, AccelTableBase &Contents,
                              StringRef Prefix, const MCSymbol *SecBegin,
                              ArrayRef<AppleAccelTableData::Atom> Atoms);
@@ -258,11 +308,22 @@
   emitAppleAccelTableImpl(Asm, Contents, Prefix, SecBegin, DataT::Atoms);
 }
 
+void emitDWARF5AccelTable(AsmPrinter *Asm,
+                          AccelTable<DWARF5AccelTableData> &Contents,
+                          const DwarfDebug &DD,
+                          ArrayRef<std::unique_ptr<DwarfCompileUnit>> CUs);
+
+void emitDWARF5AccelTable(
+    AsmPrinter *Asm, AccelTable<DWARF5AccelTableStaticData> &Contents,
+    ArrayRef<MCSymbol *> CUs,
+    llvm::function_ref<unsigned(const DWARF5AccelTableStaticData &)>
+        getCUIndexForEntry);
+
 /// Accelerator table data implementation for simple Apple accelerator tables
 /// with just a DIE reference.
 class AppleAccelTableOffsetData : public AppleAccelTableData {
 public:
-  AppleAccelTableOffsetData(const DIE *D) : Die(D) {}
+  AppleAccelTableOffsetData(const DIE &D) : Die(D) {}
 
   void emit(AsmPrinter *Asm) const override;
 
@@ -279,15 +340,15 @@
   void print(raw_ostream &OS) const override;
 #endif
 protected:
-  uint64_t order() const override { return Die->getOffset(); }
+  uint64_t order() const override { return Die.getOffset(); }
 
-  const DIE *Die;
+  const DIE &Die;
 };
 
 /// Accelerator table data implementation for Apple type accelerator tables.
 class AppleAccelTableTypeData : public AppleAccelTableOffsetData {
 public:
-  AppleAccelTableTypeData(const DIE *D) : AppleAccelTableOffsetData(D) {}
+  AppleAccelTableTypeData(const DIE &D) : AppleAccelTableOffsetData(D) {}
 
   void emit(AsmPrinter *Asm) const override;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/Analysis.h b/linux-x64/clang/include/llvm/CodeGen/Analysis.h
index ba88f1f..d77aee6 100644
--- a/linux-x64/clang/include/llvm/CodeGen/Analysis.h
+++ b/linux-x64/clang/include/llvm/CodeGen/Analysis.h
@@ -36,7 +36,7 @@
 class SelectionDAG;
 struct EVT;
 
-/// \brief Compute the linearized index of a member in a nested
+/// Compute the linearized index of a member in a nested
 /// aggregate/struct/array.
 ///
 /// Given an LLVM IR aggregate type and a sequence of insertvalue or
@@ -124,7 +124,7 @@
                                      const TargetLoweringBase &TLI);
 
 DenseMap<const MachineBasicBlock *, int>
-getFuncletMembership(const MachineFunction &MF);
+getEHScopeMembership(const MachineFunction &MF);
 
 } // End llvm namespace
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h b/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
index 3d3bd3a..b605638 100644
--- a/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/AsmPrinter.h
@@ -50,6 +50,7 @@
 class GlobalVariable;
 class MachineBasicBlock;
 class MachineConstantPoolValue;
+class MachineDominatorTree;
 class MachineFunction;
 class MachineInstr;
 class MachineJumpTableInfo;
@@ -92,11 +93,17 @@
   std::unique_ptr<MCStreamer> OutStreamer;
 
   /// The current machine function.
-  const MachineFunction *MF = nullptr;
+  MachineFunction *MF = nullptr;
 
   /// This is a pointer to the current MachineModuleInfo.
   MachineModuleInfo *MMI = nullptr;
 
+  /// This is a pointer to the current MachineLoopInfo.
+  MachineDominatorTree *MDT = nullptr;
+
+  /// This is a pointer to the current MachineLoopInfo.
+  MachineLoopInfo *MLI = nullptr;
+
   /// Optimization remark emitter.
   MachineOptimizationRemarkEmitter *ORE;
 
@@ -130,9 +137,6 @@
 
   static char ID;
 
-  /// If VerboseAsm is set, a pointer to the loop info for this function.
-  MachineLoopInfo *LI = nullptr;
-
   struct HandlerInfo {
     AsmPrinterHandler *Handler;
     const char *TimerName;
@@ -161,6 +165,12 @@
   };
 
 private:
+  /// If generated on the fly this own the instance.
+  std::unique_ptr<MachineDominatorTree> OwnedMDT;
+
+  /// If generated on the fly this own the instance.
+  std::unique_ptr<MachineLoopInfo> OwnedMLI;
+
   /// Structure for generating diagnostics for inline assembly. Only initialised
   /// when necessary.
   mutable std::unique_ptr<SrcMgrDiagInfo> DiagInfo;
@@ -191,6 +201,10 @@
   /// Return a unique ID for the current function.
   unsigned getFunctionNumber() const;
 
+  /// Return symbol for the function pseudo stack if the stack frame is not a
+  /// register based.
+  virtual const MCSymbol *getFunctionFrameSymbol() const { return nullptr; }
+
   MCSymbol *getFunctionBegin() const { return CurrentFnBegin; }
   MCSymbol *getFunctionEnd() const { return CurrentFnEnd; }
   MCSymbol *getCurExceptionSym();
@@ -228,6 +242,7 @@
     TAIL_CALL = 2,
     LOG_ARGS_ENTER = 3,
     CUSTOM_EVENT = 4,
+    TYPED_EVENT = 5,
   };
 
   // The table will contain these structs that point to the sled, the function
@@ -327,15 +342,15 @@
   /// global value is specified, and if that global has an explicit alignment
   /// requested, it will override the alignment request if required for
   /// correctness.
-  void EmitAlignment(unsigned NumBits, const GlobalObject *GO = nullptr) const;
+  void EmitAlignment(unsigned NumBits, const GlobalObject *GV = nullptr) const;
 
   /// Lower the specified LLVM Constant to an MCExpr.
   virtual const MCExpr *lowerConstant(const Constant *CV);
 
-  /// \brief Print a general LLVM constant to the .s file.
+  /// Print a general LLVM constant to the .s file.
   void EmitGlobalConstant(const DataLayout &DL, const Constant *CV);
 
-  /// \brief Unnamed constant global variables solely contaning a pointer to
+  /// Unnamed constant global variables solely contaning a pointer to
   /// another globals variable act like a global variable "proxy", or GOT
   /// equivalents, i.e., it's only used to hold the address of the latter. One
   /// optimization is to replace accesses to these proxies by using the GOT
@@ -345,7 +360,7 @@
   /// accesses to GOT entries.
   void computeGlobalGOTEquivs(Module &M);
 
-  /// \brief Constant expressions using GOT equivalent globals may not be
+  /// Constant expressions using GOT equivalent globals may not be
   /// eligible for PC relative GOT entry conversion, in such cases we need to
   /// emit the proxies we previously omitted in EmitGlobalVariable.
   void emitGlobalGOTEquivs();
@@ -452,6 +467,9 @@
   /// Emit a long directive and value.
   void emitInt32(int Value) const;
 
+  /// Emit a long long directive and value.
+  void emitInt64(uint64_t Value) const;
+
   /// Emit something like ".long Hi-Lo" where the size in bytes of the directive
   /// is specified by Size and Hi/Lo specify the labels.  This implicitly uses
   /// .set if it is available.
@@ -530,10 +548,10 @@
   // Dwarf Lowering Routines
   //===------------------------------------------------------------------===//
 
-  /// \brief Emit frame instruction to describe the layout of the frame.
+  /// Emit frame instruction to describe the layout of the frame.
   void emitCFIInstruction(const MCCFIInstruction &Inst) const;
 
-  /// \brief Emit Dwarf abbreviation table.
+  /// Emit Dwarf abbreviation table.
   template <typename T> void emitDwarfAbbrevs(const T &Abbrevs) const {
     // For each abbreviation.
     for (const auto &Abbrev : Abbrevs)
@@ -545,7 +563,7 @@
 
   void emitDwarfAbbrev(const DIEAbbrev &Abbrev) const;
 
-  /// \brief Recursively emit Dwarf DIE tree.
+  /// Recursively emit Dwarf DIE tree.
   void emitDwarfDIE(const DIE &Die) const;
 
   //===------------------------------------------------------------------===//
@@ -632,10 +650,9 @@
   void EmitXXStructorList(const DataLayout &DL, const Constant *List,
                           bool isCtor);
 
-  GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy &C);
+  GCMetadataPrinter *GetOrCreateGCPrinter(GCStrategy &S);
   /// Emit GlobalAlias or GlobalIFunc.
-  void emitGlobalIndirectSymbol(Module &M,
-                                const GlobalIndirectSymbol& GIS);
+  void emitGlobalIndirectSymbol(Module &M, const GlobalIndirectSymbol &GIS);
   void setupCodePaddingContext(const MachineBasicBlock &MBB,
                                MCCodePaddingContext &Context) const;
 };
diff --git a/linux-x64/clang/include/llvm/CodeGen/AtomicExpandUtils.h b/linux-x64/clang/include/llvm/CodeGen/AtomicExpandUtils.h
index 1f9c96b..b1adf66 100644
--- a/linux-x64/clang/include/llvm/CodeGen/AtomicExpandUtils.h
+++ b/linux-x64/clang/include/llvm/CodeGen/AtomicExpandUtils.h
@@ -26,7 +26,7 @@
     function_ref<void(IRBuilder<> &, Value *, Value *, Value *, AtomicOrdering,
                       Value *&, Value *&)>;
 
-/// \brief Expand an atomic RMW instruction into a loop utilizing
+/// Expand an atomic RMW instruction into a loop utilizing
 /// cmpxchg. You'll want to make sure your target machine likes cmpxchg
 /// instructions in the first place and that there isn't another, better,
 /// transformation available (for example AArch32/AArch64 have linked loads).
@@ -58,7 +58,7 @@
 ///     [...]
 ///
 /// Returns true if the containing function was modified.
-bool expandAtomicRMWToCmpXchg(AtomicRMWInst *AI, CreateCmpXchgInstFun Factory);
+bool expandAtomicRMWToCmpXchg(AtomicRMWInst *AI, CreateCmpXchgInstFun CreateCmpXchg);
 
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h b/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
index 9096263..f76a242 100644
--- a/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
+++ b/linux-x64/clang/include/llvm/CodeGen/BasicTTIImpl.h
@@ -65,7 +65,7 @@
 
 extern cl::opt<unsigned> PartialUnrollingThreshold;
 
-/// \brief Base class which can be used to help build a TTI implementation.
+/// Base class which can be used to help build a TTI implementation.
 ///
 /// This class provides as much implementation of the TTI interface as is
 /// possible using the target independent parts of the code generator.
@@ -101,12 +101,12 @@
     return Cost;
   }
 
-  /// \brief Local query method delegates up to T which *must* implement this!
+  /// Local query method delegates up to T which *must* implement this!
   const TargetSubtargetInfo *getST() const {
     return static_cast<const T *>(this)->getST();
   }
 
-  /// \brief Local query method delegates up to T which *must* implement this!
+  /// Local query method delegates up to T which *must* implement this!
   const TargetLoweringBase *getTLI() const {
     return static_cast<const T *>(this)->getTLI();
   }
@@ -553,11 +553,15 @@
 
   unsigned getShuffleCost(TTI::ShuffleKind Kind, Type *Tp, int Index,
                           Type *SubTp) {
-    if (Kind == TTI::SK_Alternate || Kind == TTI::SK_PermuteTwoSrc ||
-        Kind == TTI::SK_PermuteSingleSrc) {
+    switch (Kind) {
+    case TTI::SK_Select:
+    case TTI::SK_Transpose:
+    case TTI::SK_PermuteSingleSrc:
+    case TTI::SK_PermuteTwoSrc:
       return getPermuteShuffleOverhead(Tp);
+    default:
+      return 1;
     }
-    return 1;
   }
 
   unsigned getCastInstrCost(unsigned Opcode, Type *Dst, Type *Src,
@@ -1200,7 +1204,7 @@
     return SingleCallCost;
   }
 
-  /// \brief Compute a cost of the given call instruction.
+  /// Compute a cost of the given call instruction.
   ///
   /// Compute the cost of calling function F with return type RetTy and
   /// argument types Tys. F might be nullptr, in this case the cost of an
@@ -1361,7 +1365,7 @@
   /// @}
 };
 
-/// \brief Concrete BasicTTIImpl that can be used if no further customization
+/// Concrete BasicTTIImpl that can be used if no further customization
 /// is needed.
 class BasicTTIImpl : public BasicTTIImplBase<BasicTTIImpl> {
   using BaseT = BasicTTIImplBase<BasicTTIImpl>;
@@ -1375,7 +1379,7 @@
   const TargetLoweringBase *getTLI() const { return TLI; }
 
 public:
-  explicit BasicTTIImpl(const TargetMachine *ST, const Function &F);
+  explicit BasicTTIImpl(const TargetMachine *TM, const Function &F);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/CalcSpillWeights.h b/linux-x64/clang/include/llvm/CodeGen/CalcSpillWeights.h
index d9e8206..f85767f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CalcSpillWeights.h
+++ b/linux-x64/clang/include/llvm/CodeGen/CalcSpillWeights.h
@@ -22,7 +22,7 @@
 class MachineLoopInfo;
 class VirtRegMap;
 
-  /// \brief Normalize the spill weight of a live interval
+  /// Normalize the spill weight of a live interval
   ///
   /// The spill weight of a live interval is computed as:
   ///
@@ -42,7 +42,7 @@
     return UseDefFreq / (Size + 25*SlotIndex::InstrDist);
   }
 
-  /// \brief Calculate auxiliary information for a virtual register such as its
+  /// Calculate auxiliary information for a virtual register such as its
   /// spill weight and allocation hint.
   class VirtRegAuxInfo {
   public:
@@ -64,10 +64,10 @@
                    NormalizingFn norm = normalizeSpillWeight)
         : MF(mf), LIS(lis), VRM(vrm), Loops(loops), MBFI(mbfi), normalize(norm) {}
 
-    /// \brief (re)compute li's spill weight and allocation hint.
+    /// (re)compute li's spill weight and allocation hint.
     void calculateSpillWeightAndHint(LiveInterval &li);
 
-    /// \brief Compute future expected spill weight of a split artifact of li
+    /// Compute future expected spill weight of a split artifact of li
     /// that will span between start and end slot indexes.
     /// \param li     The live interval to be split.
     /// \param start  The expected begining of the split artifact. Instructions
@@ -78,7 +78,7 @@
     /// negative weight for unspillable li.
     float futureWeight(LiveInterval &li, SlotIndex start, SlotIndex end);
 
-    /// \brief Helper function for weight calculations.
+    /// Helper function for weight calculations.
     /// (Re)compute li's spill weight and allocation hint, or, for non null
     /// start and end - compute future expected spill weight of a split
     /// artifact of li that will span between start and end slot indexes.
@@ -94,7 +94,7 @@
                            SlotIndex *end = nullptr);
   };
 
-  /// \brief Compute spill weights and allocation hints for all virtual register
+  /// Compute spill weights and allocation hints for all virtual register
   /// live intervals.
   void calculateSpillWeightsAndHints(LiveIntervals &LIS, MachineFunction &MF,
                                      VirtRegMap *VRM,
diff --git a/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h b/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
index d30a273..efcf80b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
+++ b/linux-x64/clang/include/llvm/CodeGen/CallingConvLower.h
@@ -304,7 +304,7 @@
   /// CheckReturn - Analyze the return values of a function, returning
   /// true if the return can be performed without sret-demotion, and
   /// false otherwise.
-  bool CheckReturn(const SmallVectorImpl<ISD::OutputArg> &ArgsFlags,
+  bool CheckReturn(const SmallVectorImpl<ISD::OutputArg> &Outs,
                    CCAssignFn Fn);
 
   /// AnalyzeCallOperands - Analyze the outgoing arguments to a call,
diff --git a/linux-x64/clang/include/llvm/CodeGen/CommandFlags.def b/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
similarity index 97%
rename from linux-x64/clang/include/llvm/CodeGen/CommandFlags.def
rename to linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
index 3708c04..7d2d167 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CommandFlags.def
+++ b/linux-x64/clang/include/llvm/CodeGen/CommandFlags.inc
@@ -17,7 +17,7 @@
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/Intrinsics.h"
 #include "llvm/IR/Module.h"
-#include "llvm/MC/MCTargetOptionsCommandFlags.def"
+#include "llvm/MC/MCTargetOptionsCommandFlags.inc"
 #include "llvm/MC/SubtargetFeature.h"
 #include "llvm/Support/CodeGen.h"
 #include "llvm/Support/CommandLine.h"
@@ -261,6 +261,10 @@
     "stack-size-section",
     cl::desc("Emit a section containing stack size metadata"), cl::init(false));
 
+static cl::opt<bool>
+    EnableAddrsig("addrsig", cl::desc("Emit an address-significance table"),
+                  cl::init(false));
+
 // Common utility function tightly tied to the options listed here. Initializes
 // a TargetOptions object with CodeGen flags and returns it.
 static TargetOptions InitTargetOptionsFromCodeGenFlags() {
@@ -289,6 +293,7 @@
   Options.ExplicitEmulatedTLS = EmulatedTLS.getNumOccurrences() > 0;
   Options.ExceptionModel = ExceptionModel;
   Options.EmitStackSizeSection = EnableStackSizeSection;
+  Options.EmitAddrsig = EnableAddrsig;
 
   Options.MCOptions = InitMCTargetOptionsFromFlags();
 
@@ -349,7 +354,7 @@
   return Features.getFeatures();
 }
 
-/// \brief Set function attributes of functions in Module M based on CPU,
+/// Set function attributes of functions in Module M based on CPU,
 /// Features, and command line flags.
 LLVM_ATTRIBUTE_UNUSED static void
 setFunctionAttributes(StringRef CPU, StringRef Features, Module &M) {
diff --git a/linux-x64/clang/include/llvm/CodeGen/CostTable.h b/linux-x64/clang/include/llvm/CodeGen/CostTable.h
index 0fc16d3..48ad769 100644
--- a/linux-x64/clang/include/llvm/CodeGen/CostTable.h
+++ b/linux-x64/clang/include/llvm/CodeGen/CostTable.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Cost tables and simple lookup functions
+/// Cost tables and simple lookup functions
 ///
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/DIE.h b/linux-x64/clang/include/llvm/CodeGen/DIE.h
index f809fc9..7d486b1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DIE.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DIE.h
@@ -136,7 +136,7 @@
   /// The bump allocator to use when creating DIEAbbrev objects in the uniqued
   /// storage container.
   BumpPtrAllocator &Alloc;
-  /// \brief FoldingSet that uniques the abbreviations.
+  /// FoldingSet that uniques the abbreviations.
   FoldingSet<DIEAbbrev> AbbreviationsSet;
   /// A list of all the unique abbreviations in use.
   std::vector<DIEAbbrev *> Abbreviations;
@@ -190,7 +190,7 @@
   uint64_t getValue() const { return Integer; }
   void setValue(uint64_t Val) { Integer = Val; }
 
-  void EmitValue(const AsmPrinter *AP, dwarf::Form Form) const;
+  void EmitValue(const AsmPrinter *Asm, dwarf::Form Form) const;
   unsigned SizeOf(const AsmPrinter *AP, dwarf::Form Form) const;
 
   void print(raw_ostream &O) const;
@@ -868,7 +868,7 @@
     return dwarf::DW_FORM_block;
   }
 
-  void EmitValue(const AsmPrinter *AP, dwarf::Form Form) const;
+  void EmitValue(const AsmPrinter *Asm, dwarf::Form Form) const;
   unsigned SizeOf(const AsmPrinter *AP, dwarf::Form Form) const;
 
   void print(raw_ostream &O) const;
@@ -899,7 +899,7 @@
     return dwarf::DW_FORM_block;
   }
 
-  void EmitValue(const AsmPrinter *AP, dwarf::Form Form) const;
+  void EmitValue(const AsmPrinter *Asm, dwarf::Form Form) const;
   unsigned SizeOf(const AsmPrinter *AP, dwarf::Form Form) const;
 
   void print(raw_ostream &O) const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h b/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
index e6c0483..8b1a7af 100644
--- a/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
+++ b/linux-x64/clang/include/llvm/CodeGen/DwarfStringPoolEntry.h
@@ -10,6 +10,7 @@
 #ifndef LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
 #define LLVM_CODEGEN_DWARFSTRINGPOOLENTRY_H
 
+#include "llvm/ADT/PointerIntPair.h"
 #include "llvm/ADT/StringMap.h"
 
 namespace llvm {
@@ -18,34 +19,52 @@
 
 /// Data for a string pool entry.
 struct DwarfStringPoolEntry {
+  static constexpr unsigned NotIndexed = -1;
+
   MCSymbol *Symbol;
   unsigned Offset;
   unsigned Index;
+
+  bool isIndexed() const { return Index != NotIndexed; }
 };
 
 /// String pool entry reference.
-struct DwarfStringPoolEntryRef {
-  const StringMapEntry<DwarfStringPoolEntry> *I = nullptr;
+class DwarfStringPoolEntryRef {
+  PointerIntPair<const StringMapEntry<DwarfStringPoolEntry> *, 1, bool>
+      MapEntryAndIndexed;
+
+  const StringMapEntry<DwarfStringPoolEntry> *getMapEntry() const {
+    return MapEntryAndIndexed.getPointer();
+  }
 
 public:
   DwarfStringPoolEntryRef() = default;
-  explicit DwarfStringPoolEntryRef(
-      const StringMapEntry<DwarfStringPoolEntry> &I)
-      : I(&I) {}
+  DwarfStringPoolEntryRef(const StringMapEntry<DwarfStringPoolEntry> &Entry,
+                          bool Indexed)
+      : MapEntryAndIndexed(&Entry, Indexed) {}
 
-  explicit operator bool() const { return I; }
+  explicit operator bool() const { return getMapEntry(); }
   MCSymbol *getSymbol() const {
-    assert(I->second.Symbol && "No symbol available!");
-    return I->second.Symbol;
+    assert(getMapEntry()->second.Symbol && "No symbol available!");
+    return getMapEntry()->second.Symbol;
   }
-  unsigned getOffset() const { return I->second.Offset; }
-  unsigned getIndex() const { return I->second.Index; }
-  StringRef getString() const { return I->first(); }
+  unsigned getOffset() const { return getMapEntry()->second.Offset; }
+  bool isIndexed() const { return MapEntryAndIndexed.getInt(); }
+  unsigned getIndex() const {
+    assert(isIndexed());
+    assert(getMapEntry()->getValue().isIndexed());
+    return getMapEntry()->second.Index;
+  }
+  StringRef getString() const { return getMapEntry()->first(); }
   /// Return the entire string pool entry for convenience.
-  DwarfStringPoolEntry getEntry() const { return I->getValue(); }
+  DwarfStringPoolEntry getEntry() const { return getMapEntry()->getValue(); }
 
-  bool operator==(const DwarfStringPoolEntryRef &X) const { return I == X.I; }
-  bool operator!=(const DwarfStringPoolEntryRef &X) const { return I != X.I; }
+  bool operator==(const DwarfStringPoolEntryRef &X) const {
+    return getMapEntry() == X.getMapEntry();
+  }
+  bool operator!=(const DwarfStringPoolEntryRef &X) const {
+    return getMapEntry() != X.getMapEntry();
+  }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/FastISel.h b/linux-x64/clang/include/llvm/CodeGen/FastISel.h
index 772bd6c..865d8a8 100644
--- a/linux-x64/clang/include/llvm/CodeGen/FastISel.h
+++ b/linux-x64/clang/include/llvm/CodeGen/FastISel.h
@@ -61,7 +61,7 @@
 class User;
 class Value;
 
-/// \brief This is a fast-path instruction selection class that generates poor
+/// This is a fast-path instruction selection class that generates poor
 /// code and doesn't support illegal types or non-trivial lowering, but runs
 /// quickly.
 class FastISel {
@@ -78,7 +78,7 @@
     bool IsReturnValueUsed : 1;
     bool IsPatchPoint : 1;
 
-    // \brief IsTailCall Should be modified by implementations of FastLowerCall
+    // IsTailCall Should be modified by implementations of FastLowerCall
     // that perform tail call conversions.
     bool IsTailCall = false;
 
@@ -215,70 +215,74 @@
   const TargetLibraryInfo *LibInfo;
   bool SkipTargetIndependentISel;
 
-  /// \brief The position of the last instruction for materializing constants
+  /// The position of the last instruction for materializing constants
   /// for use in the current block. It resets to EmitStartPt when it makes sense
   /// (for example, it's usually profitable to avoid function calls between the
   /// definition and the use)
   MachineInstr *LastLocalValue;
 
-  /// \brief The top most instruction in the current block that is allowed for
+  /// The top most instruction in the current block that is allowed for
   /// emitting local variables. LastLocalValue resets to EmitStartPt when it
   /// makes sense (for example, on function calls)
   MachineInstr *EmitStartPt;
 
+  /// Last local value flush point. On a subsequent flush, no local value will
+  /// sink past this point.
+  MachineBasicBlock::iterator LastFlushPoint;
+
 public:
   virtual ~FastISel();
 
-  /// \brief Return the position of the last instruction emitted for
+  /// Return the position of the last instruction emitted for
   /// materializing constants for use in the current block.
   MachineInstr *getLastLocalValue() { return LastLocalValue; }
 
-  /// \brief Update the position of the last instruction emitted for
+  /// Update the position of the last instruction emitted for
   /// materializing constants for use in the current block.
   void setLastLocalValue(MachineInstr *I) {
     EmitStartPt = I;
     LastLocalValue = I;
   }
 
-  /// \brief Set the current block to which generated machine instructions will
+  /// Set the current block to which generated machine instructions will
   /// be appended.
   void startNewBlock();
 
   /// Flush the local value map and sink local values if possible.
   void finishBasicBlock();
 
-  /// \brief Return current debug location information.
+  /// Return current debug location information.
   DebugLoc getCurDebugLoc() const { return DbgLoc; }
 
-  /// \brief Do "fast" instruction selection for function arguments and append
+  /// Do "fast" instruction selection for function arguments and append
   /// the machine instructions to the current block. Returns true when
   /// successful.
   bool lowerArguments();
 
-  /// \brief Do "fast" instruction selection for the given LLVM IR instruction
+  /// Do "fast" instruction selection for the given LLVM IR instruction
   /// and append the generated machine instructions to the current block.
   /// Returns true if selection was successful.
   bool selectInstruction(const Instruction *I);
 
-  /// \brief Do "fast" instruction selection for the given LLVM IR operator
+  /// Do "fast" instruction selection for the given LLVM IR operator
   /// (Instruction or ConstantExpr), and append generated machine instructions
   /// to the current block. Return true if selection was successful.
   bool selectOperator(const User *I, unsigned Opcode);
 
-  /// \brief Create a virtual register and arrange for it to be assigned the
+  /// Create a virtual register and arrange for it to be assigned the
   /// value for the given LLVM value.
   unsigned getRegForValue(const Value *V);
 
-  /// \brief Look up the value to see if its value is already cached in a
+  /// Look up the value to see if its value is already cached in a
   /// register. It may be defined by instructions across blocks or defined
   /// locally.
   unsigned lookUpRegForValue(const Value *V);
 
-  /// \brief This is a wrapper around getRegForValue that also takes care of
+  /// This is a wrapper around getRegForValue that also takes care of
   /// truncating or sign-extending the given getelementptr index value.
-  std::pair<unsigned, bool> getRegForGEPIndex(const Value *V);
+  std::pair<unsigned, bool> getRegForGEPIndex(const Value *Idx);
 
-  /// \brief We're checking to see if we can fold \p LI into \p FoldInst. Note
+  /// We're checking to see if we can fold \p LI into \p FoldInst. Note
   /// that we could have a sequence where multiple LLVM IR instructions are
   /// folded into the same machineinstr.  For example we could have:
   ///
@@ -292,7 +296,7 @@
   /// If we succeed folding, return true.
   bool tryToFoldLoad(const LoadInst *LI, const Instruction *FoldInst);
 
-  /// \brief The specified machine instr operand is a vreg, and that vreg is
+  /// The specified machine instr operand is a vreg, and that vreg is
   /// being provided by the specified load instruction.  If possible, try to
   /// fold the load as an operand to the instruction, returning true if
   /// possible.
@@ -303,11 +307,11 @@
     return false;
   }
 
-  /// \brief Reset InsertPt to prepare for inserting instructions into the
+  /// Reset InsertPt to prepare for inserting instructions into the
   /// current block.
   void recomputeInsertPt();
 
-  /// \brief Remove all dead instructions between the I and E.
+  /// Remove all dead instructions between the I and E.
   void removeDeadCode(MachineBasicBlock::iterator I,
                       MachineBasicBlock::iterator E);
 
@@ -316,11 +320,11 @@
     DebugLoc DL;
   };
 
-  /// \brief Prepare InsertPt to begin inserting instructions into the local
+  /// Prepare InsertPt to begin inserting instructions into the local
   /// value area and return the old insert position.
   SavePoint enterLocalValueArea();
 
-  /// \brief Reset InsertPt to the given old insert position.
+  /// Reset InsertPt to the given old insert position.
   void leaveLocalValueArea(SavePoint Old);
 
 protected:
@@ -328,45 +332,45 @@
                     const TargetLibraryInfo *LibInfo,
                     bool SkipTargetIndependentISel = false);
 
-  /// \brief This method is called by target-independent code when the normal
+  /// This method is called by target-independent code when the normal
   /// FastISel process fails to select an instruction. This gives targets a
   /// chance to emit code for anything that doesn't fit into FastISel's
   /// framework. It returns true if it was successful.
   virtual bool fastSelectInstruction(const Instruction *I) = 0;
 
-  /// \brief This method is called by target-independent code to do target-
+  /// This method is called by target-independent code to do target-
   /// specific argument lowering. It returns true if it was successful.
   virtual bool fastLowerArguments();
 
-  /// \brief This method is called by target-independent code to do target-
+  /// This method is called by target-independent code to do target-
   /// specific call lowering. It returns true if it was successful.
   virtual bool fastLowerCall(CallLoweringInfo &CLI);
 
-  /// \brief This method is called by target-independent code to do target-
+  /// This method is called by target-independent code to do target-
   /// specific intrinsic lowering. It returns true if it was successful.
   virtual bool fastLowerIntrinsicCall(const IntrinsicInst *II);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type and opcode be emitted.
   virtual unsigned fastEmit_(MVT VT, MVT RetVT, unsigned Opcode);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type, opcode, and register operand be emitted.
   virtual unsigned fastEmit_r(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0,
                               bool Op0IsKill);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type, opcode, and register operands be emitted.
   virtual unsigned fastEmit_rr(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0,
                                bool Op0IsKill, unsigned Op1, bool Op1IsKill);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type, opcode, and register and immediate
   /// operands be emitted.
   virtual unsigned fastEmit_ri(MVT VT, MVT RetVT, unsigned Opcode, unsigned Op0,
                                bool Op0IsKill, uint64_t Imm);
 
-  /// \brief This method is a wrapper of fastEmit_ri.
+  /// This method is a wrapper of fastEmit_ri.
   ///
   /// It first tries to emit an instruction with an immediate operand using
   /// fastEmit_ri.  If that fails, it materializes the immediate into a register
@@ -374,89 +378,89 @@
   unsigned fastEmit_ri_(MVT VT, unsigned Opcode, unsigned Op0, bool Op0IsKill,
                         uint64_t Imm, MVT ImmType);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type, opcode, and immediate operand be emitted.
   virtual unsigned fastEmit_i(MVT VT, MVT RetVT, unsigned Opcode, uint64_t Imm);
 
-  /// \brief This method is called by target-independent code to request that an
+  /// This method is called by target-independent code to request that an
   /// instruction with the given type, opcode, and floating-point immediate
   /// operand be emitted.
   virtual unsigned fastEmit_f(MVT VT, MVT RetVT, unsigned Opcode,
                               const ConstantFP *FPImm);
 
-  /// \brief Emit a MachineInstr with no operands and a result register in the
+  /// Emit a MachineInstr with no operands and a result register in the
   /// given register class.
   unsigned fastEmitInst_(unsigned MachineInstOpcode,
                          const TargetRegisterClass *RC);
 
-  /// \brief Emit a MachineInstr with one register operand and a result register
+  /// Emit a MachineInstr with one register operand and a result register
   /// in the given register class.
   unsigned fastEmitInst_r(unsigned MachineInstOpcode,
                           const TargetRegisterClass *RC, unsigned Op0,
                           bool Op0IsKill);
 
-  /// \brief Emit a MachineInstr with two register operands and a result
+  /// Emit a MachineInstr with two register operands and a result
   /// register in the given register class.
   unsigned fastEmitInst_rr(unsigned MachineInstOpcode,
                            const TargetRegisterClass *RC, unsigned Op0,
                            bool Op0IsKill, unsigned Op1, bool Op1IsKill);
 
-  /// \brief Emit a MachineInstr with three register operands and a result
+  /// Emit a MachineInstr with three register operands and a result
   /// register in the given register class.
   unsigned fastEmitInst_rrr(unsigned MachineInstOpcode,
                             const TargetRegisterClass *RC, unsigned Op0,
                             bool Op0IsKill, unsigned Op1, bool Op1IsKill,
                             unsigned Op2, bool Op2IsKill);
 
-  /// \brief Emit a MachineInstr with a register operand, an immediate, and a
+  /// Emit a MachineInstr with a register operand, an immediate, and a
   /// result register in the given register class.
   unsigned fastEmitInst_ri(unsigned MachineInstOpcode,
                            const TargetRegisterClass *RC, unsigned Op0,
                            bool Op0IsKill, uint64_t Imm);
 
-  /// \brief Emit a MachineInstr with one register operand and two immediate
+  /// Emit a MachineInstr with one register operand and two immediate
   /// operands.
   unsigned fastEmitInst_rii(unsigned MachineInstOpcode,
                             const TargetRegisterClass *RC, unsigned Op0,
                             bool Op0IsKill, uint64_t Imm1, uint64_t Imm2);
 
-  /// \brief Emit a MachineInstr with a floating point immediate, and a result
+  /// Emit a MachineInstr with a floating point immediate, and a result
   /// register in the given register class.
   unsigned fastEmitInst_f(unsigned MachineInstOpcode,
                           const TargetRegisterClass *RC,
                           const ConstantFP *FPImm);
 
-  /// \brief Emit a MachineInstr with two register operands, an immediate, and a
+  /// Emit a MachineInstr with two register operands, an immediate, and a
   /// result register in the given register class.
   unsigned fastEmitInst_rri(unsigned MachineInstOpcode,
                             const TargetRegisterClass *RC, unsigned Op0,
                             bool Op0IsKill, unsigned Op1, bool Op1IsKill,
                             uint64_t Imm);
 
-  /// \brief Emit a MachineInstr with a single immediate operand, and a result
+  /// Emit a MachineInstr with a single immediate operand, and a result
   /// register in the given register class.
-  unsigned fastEmitInst_i(unsigned MachineInstrOpcode,
+  unsigned fastEmitInst_i(unsigned MachineInstOpcode,
                           const TargetRegisterClass *RC, uint64_t Imm);
 
-  /// \brief Emit a MachineInstr for an extract_subreg from a specified index of
+  /// Emit a MachineInstr for an extract_subreg from a specified index of
   /// a superregister to a specified type.
   unsigned fastEmitInst_extractsubreg(MVT RetVT, unsigned Op0, bool Op0IsKill,
                                       uint32_t Idx);
 
-  /// \brief Emit MachineInstrs to compute the value of Op with all but the
+  /// Emit MachineInstrs to compute the value of Op with all but the
   /// least significant bit set to zero.
   unsigned fastEmitZExtFromI1(MVT VT, unsigned Op0, bool Op0IsKill);
 
-  /// \brief Emit an unconditional branch to the given block, unless it is the
+  /// Emit an unconditional branch to the given block, unless it is the
   /// immediate (fall-through) successor, and update the CFG.
-  void fastEmitBranch(MachineBasicBlock *MBB, const DebugLoc &DL);
+  void fastEmitBranch(MachineBasicBlock *MSucc, const DebugLoc &DbgLoc);
 
   /// Emit an unconditional branch to \p FalseMBB, obtains the branch weight
   /// and adds TrueMBB and FalseMBB to the successor list.
   void finishCondBranch(const BasicBlock *BranchBB, MachineBasicBlock *TrueMBB,
                         MachineBasicBlock *FalseMBB);
 
-  /// \brief Update the value map to include the new mapping for this
+  /// Update the value map to include the new mapping for this
   /// instruction, or insert an extra copy to get the result in a previous
   /// determined register.
   ///
@@ -467,26 +471,26 @@
 
   unsigned createResultReg(const TargetRegisterClass *RC);
 
-  /// \brief Try to constrain Op so that it is usable by argument OpNum of the
+  /// Try to constrain Op so that it is usable by argument OpNum of the
   /// provided MCInstrDesc. If this fails, create a new virtual register in the
   /// correct class and COPY the value there.
   unsigned constrainOperandRegClass(const MCInstrDesc &II, unsigned Op,
                                     unsigned OpNum);
 
-  /// \brief Emit a constant in a register using target-specific logic, such as
+  /// Emit a constant in a register using target-specific logic, such as
   /// constant pool loads.
   virtual unsigned fastMaterializeConstant(const Constant *C) { return 0; }
 
-  /// \brief Emit an alloca address in a register using target-specific logic.
+  /// Emit an alloca address in a register using target-specific logic.
   virtual unsigned fastMaterializeAlloca(const AllocaInst *C) { return 0; }
 
-  /// \brief Emit the floating-point constant +0.0 in a register using target-
+  /// Emit the floating-point constant +0.0 in a register using target-
   /// specific logic.
   virtual unsigned fastMaterializeFloatZero(const ConstantFP *CF) {
     return 0;
   }
 
-  /// \brief Check if \c Add is an add that can be safely folded into \c GEP.
+  /// Check if \c Add is an add that can be safely folded into \c GEP.
   ///
   /// \c Add can be folded into \c GEP if:
   /// - \c Add is an add,
@@ -495,16 +499,16 @@
   /// - \c Add has a constant operand.
   bool canFoldAddIntoGEP(const User *GEP, const Value *Add);
 
-  /// \brief Test whether the given value has exactly one use.
+  /// Test whether the given value has exactly one use.
   bool hasTrivialKill(const Value *V);
 
-  /// \brief Create a machine mem operand from the given instruction.
+  /// Create a machine mem operand from the given instruction.
   MachineMemOperand *createMachineMemOperandFor(const Instruction *I) const;
 
   CmpInst::Predicate optimizeCmpPredicate(const CmpInst *CI) const;
 
   bool lowerCallTo(const CallInst *CI, MCSymbol *Symbol, unsigned NumArgs);
-  bool lowerCallTo(const CallInst *CI, const char *SymbolName,
+  bool lowerCallTo(const CallInst *CI, const char *SymName,
                    unsigned NumArgs);
   bool lowerCallTo(CallLoweringInfo &CLI);
 
@@ -521,23 +525,24 @@
   }
 
   bool lowerCall(const CallInst *I);
-  /// \brief Select and emit code for a binary operator instruction, which has
+  /// Select and emit code for a binary operator instruction, which has
   /// an opcode which directly corresponds to the given ISD opcode.
   bool selectBinaryOp(const User *I, unsigned ISDOpcode);
   bool selectFNeg(const User *I);
   bool selectGetElementPtr(const User *I);
   bool selectStackmap(const CallInst *I);
   bool selectPatchpoint(const CallInst *I);
-  bool selectCall(const User *Call);
+  bool selectCall(const User *I);
   bool selectIntrinsicCall(const IntrinsicInst *II);
   bool selectBitCast(const User *I);
   bool selectCast(const User *I, unsigned Opcode);
-  bool selectExtractValue(const User *I);
+  bool selectExtractValue(const User *U);
   bool selectInsertValue(const User *I);
   bool selectXRayCustomEvent(const CallInst *II);
+  bool selectXRayTypedEvent(const CallInst *II);
 
 private:
-  /// \brief Handle PHI nodes in successor blocks.
+  /// Handle PHI nodes in successor blocks.
   ///
   /// Emit code to ensure constants are copied into registers when needed.
   /// Remember the virtual registers that need to be added to the Machine PHI
@@ -546,21 +551,21 @@
   /// correspond to a different MBB than the end.
   bool handlePHINodesInSuccessorBlocks(const BasicBlock *LLVMBB);
 
-  /// \brief Helper for materializeRegForValue to materialize a constant in a
+  /// Helper for materializeRegForValue to materialize a constant in a
   /// target-independent way.
   unsigned materializeConstant(const Value *V, MVT VT);
 
-  /// \brief Helper for getRegForVale. This function is called when the value
+  /// Helper for getRegForVale. This function is called when the value
   /// isn't already available in a register and must be materialized with new
   /// instructions.
   unsigned materializeRegForValue(const Value *V, MVT VT);
 
-  /// \brief Clears LocalValueMap and moves the area for the new local variables
+  /// Clears LocalValueMap and moves the area for the new local variables
   /// to the beginning of the block. It helps to avoid spilling cached variables
   /// across heavy instructions like calls.
   void flushLocalValueMap();
 
-  /// \brief Removes dead local value instructions after SavedLastLocalvalue.
+  /// Removes dead local value instructions after SavedLastLocalvalue.
   void removeDeadLocalValueCode(MachineInstr *SavedLastLocalValue);
 
   struct InstOrderMap {
@@ -568,7 +573,8 @@
     MachineInstr *FirstTerminator = nullptr;
     unsigned FirstTerminatorOrder = std::numeric_limits<unsigned>::max();
 
-    void initialize(MachineBasicBlock *MBB);
+    void initialize(MachineBasicBlock *MBB,
+                    MachineBasicBlock::iterator LastFlushPoint);
   };
 
   /// Sinks the local value materialization instruction LocalMI to its first use
@@ -576,10 +582,10 @@
   void sinkLocalValueMaterialization(MachineInstr &LocalMI, unsigned DefReg,
                                      InstOrderMap &OrderMap);
 
-  /// \brief Insertion point before trying to select the current instruction.
+  /// Insertion point before trying to select the current instruction.
   MachineBasicBlock::iterator SavedInsertPt;
 
-  /// \brief Add a stackmap or patchpoint intrinsic call's live variable
+  /// Add a stackmap or patchpoint intrinsic call's live variable
   /// operands to a stackmap or patchpoint machine instruction.
   bool addStackMapLiveVars(SmallVectorImpl<MachineOperand> &Ops,
                            const CallInst *CI, unsigned StartIdx);
diff --git a/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h b/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
index 2da00b7..5fe4f89 100644
--- a/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/FunctionLoweringInfo.h
@@ -1,4 +1,4 @@
-//===- FunctionLoweringInfo.h - Lower functions from LLVM IR to CodeGen ---===//
+//===- FunctionLoweringInfo.h - Lower functions from LLVM IR ---*- C++ -*--===//
 //
 //                     The LLVM Compiler Infrastructure
 //
diff --git a/linux-x64/clang/include/llvm/CodeGen/GCStrategy.h b/linux-x64/clang/include/llvm/CodeGen/GCStrategy.h
index 16168e7..f835bac 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GCStrategy.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GCStrategy.h
@@ -104,13 +104,13 @@
   const std::string &getName() const { return Name; }
 
   /// By default, write barriers are replaced with simple store
-  /// instructions. If true, you must provide a custom pass to lower 
-  /// calls to @llvm.gcwrite.
+  /// instructions. If true, you must provide a custom pass to lower
+  /// calls to \@llvm.gcwrite.
   bool customWriteBarrier() const { return CustomWriteBarriers; }
 
   /// By default, read barriers are replaced with simple load
-  /// instructions. If true, you must provide a custom pass to lower 
-  /// calls to @llvm.gcread.
+  /// instructions. If true, you must provide a custom pass to lower
+  /// calls to \@llvm.gcread.
   bool customReadBarrier() const { return CustomReadBarriers; }
 
   /// Returns true if this strategy is expecting the use of gc.statepoints,
@@ -146,8 +146,8 @@
   }
 
   /// By default, roots are left for the code generator so it can generate a
-  /// stack map. If true, you must provide a custom pass to lower 
-  /// calls to @llvm.gcroot.
+  /// stack map. If true, you must provide a custom pass to lower
+  /// calls to \@llvm.gcroot.
   bool customRoots() const { return CustomRoots; }
 
   /// If set, gcroot intrinsics should initialize their allocas to null
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
index 8d91cc4..32980ce 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/CallLowering.h
@@ -123,7 +123,7 @@
   }
 
   template <typename FuncInfoTy>
-  void setArgFlags(ArgInfo &Arg, unsigned OpNum, const DataLayout &DL,
+  void setArgFlags(ArgInfo &Arg, unsigned OpIdx, const DataLayout &DL,
                    const FuncInfoTy &FuncInfo) const;
 
   /// Invoke Handler::assignArg on each of the given \p Args and then use
@@ -131,19 +131,19 @@
   ///
   /// \return True if everything has succeeded, false otherwise.
   bool handleAssignments(MachineIRBuilder &MIRBuilder, ArrayRef<ArgInfo> Args,
-                         ValueHandler &Callback) const;
+                         ValueHandler &Handler) const;
 
 public:
   CallLowering(const TargetLowering *TLI) : TLI(TLI) {}
   virtual ~CallLowering() = default;
 
   /// This hook must be implemented to lower outgoing return values, described
-  /// by \p Val, into the specified virtual register \p VReg.
+  /// by \p Val, into the specified virtual registers \p VRegs.
   /// This hook is used by GlobalISel.
   ///
   /// \return True if the lowering succeeds, false otherwise.
-  virtual bool lowerReturn(MachineIRBuilder &MIRBuilder,
-                           const Value *Val, unsigned VReg) const {
+  virtual bool lowerReturn(MachineIRBuilder &MIRBuilder, const Value *Val,
+                           ArrayRef<unsigned> VRegs) const {
     return false;
   }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h
new file mode 100644
index 0000000..8d61f9a
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h
@@ -0,0 +1,134 @@
+//===-- llvm/CodeGen/GlobalISel/ConstantFoldingMIRBuilder.h  --*- C++ -*-==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file implements a version of MachineIRBuilder which does trivial
+/// constant folding.
+//===----------------------------------------------------------------------===//
+#include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
+#include "llvm/CodeGen/GlobalISel/Utils.h"
+
+namespace llvm {
+
+static Optional<APInt> ConstantFoldBinOp(unsigned Opcode, const unsigned Op1,
+                                         const unsigned Op2,
+                                         const MachineRegisterInfo &MRI) {
+  auto MaybeOp1Cst = getConstantVRegVal(Op1, MRI);
+  auto MaybeOp2Cst = getConstantVRegVal(Op2, MRI);
+  if (MaybeOp1Cst && MaybeOp2Cst) {
+    LLT Ty = MRI.getType(Op1);
+    APInt C1(Ty.getSizeInBits(), *MaybeOp1Cst, true);
+    APInt C2(Ty.getSizeInBits(), *MaybeOp2Cst, true);
+    switch (Opcode) {
+    default:
+      break;
+    case TargetOpcode::G_ADD:
+      return C1 + C2;
+    case TargetOpcode::G_AND:
+      return C1 & C2;
+    case TargetOpcode::G_ASHR:
+      return C1.ashr(C2);
+    case TargetOpcode::G_LSHR:
+      return C1.lshr(C2);
+    case TargetOpcode::G_MUL:
+      return C1 * C2;
+    case TargetOpcode::G_OR:
+      return C1 | C2;
+    case TargetOpcode::G_SHL:
+      return C1 << C2;
+    case TargetOpcode::G_SUB:
+      return C1 - C2;
+    case TargetOpcode::G_XOR:
+      return C1 ^ C2;
+    case TargetOpcode::G_UDIV:
+      if (!C2.getBoolValue())
+        break;
+      return C1.udiv(C2);
+    case TargetOpcode::G_SDIV:
+      if (!C2.getBoolValue())
+        break;
+      return C1.sdiv(C2);
+    case TargetOpcode::G_UREM:
+      if (!C2.getBoolValue())
+        break;
+      return C1.urem(C2);
+    case TargetOpcode::G_SREM:
+      if (!C2.getBoolValue())
+        break;
+      return C1.srem(C2);
+    }
+  }
+  return None;
+}
+
+/// An MIRBuilder which does trivial constant folding of binary ops.
+/// Calls to buildInstr will also try to constant fold binary ops.
+class ConstantFoldingMIRBuilder
+    : public FoldableInstructionsBuilder<ConstantFoldingMIRBuilder> {
+public:
+  // Pull in base class constructors.
+  using FoldableInstructionsBuilder<
+      ConstantFoldingMIRBuilder>::FoldableInstructionsBuilder;
+  // Unhide buildInstr
+  using FoldableInstructionsBuilder<ConstantFoldingMIRBuilder>::buildInstr;
+
+  // Implement buildBinaryOp required by FoldableInstructionsBuilder which
+  // tries to constant fold.
+  MachineInstrBuilder buildBinaryOp(unsigned Opcode, unsigned Dst,
+                                    unsigned Src0, unsigned Src1) {
+    validateBinaryOp(Dst, Src0, Src1);
+    auto MaybeCst = ConstantFoldBinOp(Opcode, Src0, Src1, getMF().getRegInfo());
+    if (MaybeCst)
+      return buildConstant(Dst, MaybeCst->getSExtValue());
+    return buildInstr(Opcode).addDef(Dst).addUse(Src0).addUse(Src1);
+  }
+
+  template <typename DstTy, typename UseArg1Ty, typename UseArg2Ty>
+  MachineInstrBuilder buildInstr(unsigned Opc, DstTy &&Ty, UseArg1Ty &&Arg1,
+                                 UseArg2Ty &&Arg2) {
+    unsigned Dst = getDestFromArg(Ty);
+    return buildInstr(Opc, Dst, getRegFromArg(std::forward<UseArg1Ty>(Arg1)),
+                      getRegFromArg(std::forward<UseArg2Ty>(Arg2)));
+  }
+
+  // Try to provide an overload for buildInstr for binary ops in order to
+  // constant fold.
+  MachineInstrBuilder buildInstr(unsigned Opc, unsigned Dst, unsigned Src0,
+                                 unsigned Src1) {
+    switch (Opc) {
+    default:
+      break;
+    case TargetOpcode::G_ADD:
+    case TargetOpcode::G_AND:
+    case TargetOpcode::G_ASHR:
+    case TargetOpcode::G_LSHR:
+    case TargetOpcode::G_MUL:
+    case TargetOpcode::G_OR:
+    case TargetOpcode::G_SHL:
+    case TargetOpcode::G_SUB:
+    case TargetOpcode::G_XOR:
+    case TargetOpcode::G_UDIV:
+    case TargetOpcode::G_SDIV:
+    case TargetOpcode::G_UREM:
+    case TargetOpcode::G_SREM: {
+      return buildBinaryOp(Opc, Dst, Src0, Src1);
+    }
+    }
+    return buildInstr(Opc).addDef(Dst).addUse(Src0).addUse(Src1);
+  }
+
+  // Fallback implementation of buildInstr.
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildInstr(unsigned Opc, DstTy &&Ty,
+                                 UseArgsTy &&... Args) {
+    auto MIB = buildInstr(Opc).addDef(getDestFromArg(Ty));
+    addUsesFromArgs(MIB, std::forward<UseArgsTy>(Args)...);
+    return MIB;
+  }
+};
+} // namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
index 7061c01..f355396 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/IRTranslator.h
@@ -24,6 +24,7 @@
 #include "llvm/CodeGen/GlobalISel/MachineIRBuilder.h"
 #include "llvm/CodeGen/GlobalISel/Types.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
+#include "llvm/Support/Allocator.h"
 #include "llvm/IR/Intrinsics.h"
 #include <memory>
 #include <utility>
@@ -63,9 +64,83 @@
   /// Interface used to lower the everything related to calls.
   const CallLowering *CLI;
 
-  /// Mapping of the values of the current LLVM IR function
-  /// to the related virtual registers.
-  ValueToVReg ValToVReg;
+  /// This class contains the mapping between the Values to vreg related data.
+  class ValueToVRegInfo {
+  public:
+    ValueToVRegInfo() = default;
+
+    using VRegListT = SmallVector<unsigned, 1>;
+    using OffsetListT = SmallVector<uint64_t, 1>;
+
+    using const_vreg_iterator =
+        DenseMap<const Value *, VRegListT *>::const_iterator;
+    using const_offset_iterator =
+        DenseMap<const Value *, OffsetListT *>::const_iterator;
+
+    inline const_vreg_iterator vregs_end() const { return ValToVRegs.end(); }
+
+    VRegListT *getVRegs(const Value &V) {
+      auto It = ValToVRegs.find(&V);
+      if (It != ValToVRegs.end())
+        return It->second;
+
+      return insertVRegs(V);
+    }
+
+    OffsetListT *getOffsets(const Value &V) {
+      auto It = TypeToOffsets.find(V.getType());
+      if (It != TypeToOffsets.end())
+        return It->second;
+
+      return insertOffsets(V);
+    }
+
+    const_vreg_iterator findVRegs(const Value &V) const {
+      return ValToVRegs.find(&V);
+    }
+
+    bool contains(const Value &V) const {
+      return ValToVRegs.find(&V) != ValToVRegs.end();
+    }
+
+    void reset() {
+      ValToVRegs.clear();
+      TypeToOffsets.clear();
+      VRegAlloc.DestroyAll();
+      OffsetAlloc.DestroyAll();
+    }
+
+  private:
+    VRegListT *insertVRegs(const Value &V) {
+      assert(ValToVRegs.find(&V) == ValToVRegs.end() && "Value already exists");
+
+      // We placement new using our fast allocator since we never try to free
+      // the vectors until translation is finished.
+      auto *VRegList = new (VRegAlloc.Allocate()) VRegListT();
+      ValToVRegs[&V] = VRegList;
+      return VRegList;
+    }
+
+    OffsetListT *insertOffsets(const Value &V) {
+      assert(TypeToOffsets.find(V.getType()) == TypeToOffsets.end() &&
+             "Type already exists");
+
+      auto *OffsetList = new (OffsetAlloc.Allocate()) OffsetListT();
+      TypeToOffsets[V.getType()] = OffsetList;
+      return OffsetList;
+    }
+    SpecificBumpPtrAllocator<VRegListT> VRegAlloc;
+    SpecificBumpPtrAllocator<OffsetListT> OffsetAlloc;
+
+    // We store pointers to vectors here since references may be invalidated
+    // while we hold them if we stored the vectors directly.
+    DenseMap<const Value *, VRegListT*> ValToVRegs;
+    DenseMap<const Type *, OffsetListT*> TypeToOffsets;
+  };
+
+  /// Mapping of the values of the current LLVM IR function to the related
+  /// virtual registers and offsets.
+  ValueToVRegInfo VMap;
 
   // N.b. it's not completely obvious that this will be sufficient for every
   // LLVM IR construct (with "invoke" being the obvious candidate to mess up our
@@ -82,7 +157,8 @@
 
   // List of stubbed PHI instructions, for values and basic blocks to be filled
   // in once all MachineBasicBlocks have been created.
-  SmallVector<std::pair<const PHINode *, MachineInstr *>, 4> PendingPHIs;
+  SmallVector<std::pair<const PHINode *, SmallVector<MachineInstr *, 1>>, 4>
+      PendingPHIs;
 
   /// Record of what frame index has been allocated to specified allocas for
   /// this function.
@@ -99,7 +175,7 @@
   /// The general algorithm is:
   /// 1. Look for a virtual register for each operand or
   ///    create one.
-  /// 2 Update the ValToVReg accordingly.
+  /// 2 Update the VMap accordingly.
   /// 2.alt. For constant arguments, if they are compile time constants,
   ///   produce an immediate in the right operand and do not touch
   ///   ValToReg. Actually we will go with a virtual register for each
@@ -134,7 +210,7 @@
 
   /// Translate an LLVM string intrinsic (memcpy, memset, ...).
   bool translateMemfunc(const CallInst &CI, MachineIRBuilder &MIRBuilder,
-                        unsigned Intrinsic);
+                        unsigned ID);
 
   void getStackGuard(unsigned DstReg, MachineIRBuilder &MIRBuilder);
 
@@ -146,6 +222,19 @@
 
   bool translateInlineAsm(const CallInst &CI, MachineIRBuilder &MIRBuilder);
 
+  // FIXME: temporary function to expose previous interface to call lowering
+  // until it is refactored.
+  /// Combines all component registers of \p V into a single scalar with size
+  /// "max(Offsets) + last size".
+  unsigned packRegs(const Value &V, MachineIRBuilder &MIRBuilder);
+
+  void unpackRegs(const Value &V, unsigned Src, MachineIRBuilder &MIRBuilder);
+
+  /// Returns true if the value should be split into multiple LLTs.
+  /// If \p Offsets is given then the split type's offsets will be stored in it.
+  bool valueIsSplit(const Value &V,
+                    SmallVectorImpl<uint64_t> *Offsets = nullptr);
+
   /// Translate call instruction.
   /// \pre \p U is a call instruction.
   bool translateCall(const User &U, MachineIRBuilder &MIRBuilder);
@@ -310,6 +399,9 @@
 
   bool translateShuffleVector(const User &U, MachineIRBuilder &MIRBuilder);
 
+  bool translateAtomicCmpXchg(const User &U, MachineIRBuilder &MIRBuilder);
+  bool translateAtomicRMW(const User &U, MachineIRBuilder &MIRBuilder);
+
   // Stubs to keep the compiler happy while we implement the rest of the
   // translation.
   bool translateResume(const User &U, MachineIRBuilder &MIRBuilder) {
@@ -327,14 +419,8 @@
   bool translateFence(const User &U, MachineIRBuilder &MIRBuilder) {
     return false;
   }
-  bool translateAtomicCmpXchg(const User &U, MachineIRBuilder &MIRBuilder) {
-    return false;
-  }
-  bool translateAtomicRMW(const User &U, MachineIRBuilder &MIRBuilder) {
-    return false;
-  }
   bool translateAddrSpaceCast(const User &U, MachineIRBuilder &MIRBuilder) {
-    return false;
+    return translateCast(TargetOpcode::G_ADDRSPACE_CAST, U, MIRBuilder);
   }
   bool translateCleanupPad(const User &U, MachineIRBuilder &MIRBuilder) {
     return false;
@@ -381,9 +467,24 @@
   // * Clear the different maps.
   void finalizeFunction();
 
-  /// Get the VReg that represents \p Val.
-  /// If such VReg does not exist, it is created.
-  unsigned getOrCreateVReg(const Value &Val);
+  /// Get the VRegs that represent \p Val.
+  /// Non-aggregate types have just one corresponding VReg and the list can be
+  /// used as a single "unsigned". Aggregates get flattened. If such VRegs do
+  /// not exist, they are created.
+  ArrayRef<unsigned> getOrCreateVRegs(const Value &Val);
+
+  unsigned getOrCreateVReg(const Value &Val) {
+    auto Regs = getOrCreateVRegs(Val);
+    if (Regs.empty())
+      return 0;
+    assert(Regs.size() == 1 &&
+           "attempt to get single VReg for aggregate or void");
+    return Regs[0];
+  }
+
+  /// Allocate some vregs and offsets in the VMap. Then populate just the
+  /// offsets while leaving the vregs empty.
+  ValueToVRegInfo::VRegListT &allocateVRegs(const Value &Val);
 
   /// Get the frame index that represents \p Val.
   /// If such VReg does not exist, it is created.
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelector.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelector.h
index eacd135..471def7 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelector.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelector.h
@@ -20,6 +20,7 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/CodeGenCoverage.h"
+#include "llvm/Support/LowLevelTypeImpl.h"
 #include <bitset>
 #include <cstddef>
 #include <cstdint>
@@ -31,7 +32,6 @@
 
 class APInt;
 class APFloat;
-class LLT;
 class MachineInstr;
 class MachineInstrBuilder;
 class MachineFunction;
@@ -81,6 +81,23 @@
   ///        failed match.
   GIM_Try,
 
+  /// Switch over the opcode on the specified instruction
+  /// - InsnID - Instruction ID
+  /// - LowerBound - numerically minimum opcode supported
+  /// - UpperBound - numerically maximum + 1 opcode supported
+  /// - Default - failure jump target
+  /// - JumpTable... - (UpperBound - LowerBound) (at least 2) jump targets
+  GIM_SwitchOpcode,
+
+  /// Switch over the LLT on the specified instruction operand
+  /// - InsnID - Instruction ID
+  /// - OpIdx - Operand index
+  /// - LowerBound - numerically minimum Type ID supported
+  /// - UpperBound - numerically maximum + 1 Type ID supported
+  /// - Default - failure jump target
+  /// - JumpTable... - (UpperBound - LowerBound) (at least 2) jump targets
+  GIM_SwitchType,
+
   /// Record the specified instruction
   /// - NewInsnID - Instruction ID to define
   /// - InsnID - Instruction ID
@@ -117,6 +134,23 @@
   GIM_CheckAtomicOrdering,
   GIM_CheckAtomicOrderingOrStrongerThan,
   GIM_CheckAtomicOrderingWeakerThan,
+  /// Check the size of the memory access for the given machine memory operand.
+  /// - InsnID - Instruction ID
+  /// - MMOIdx - MMO index
+  /// - Size - The size in bytes of the memory access
+  GIM_CheckMemorySizeEqualTo,
+  /// Check the size of the memory access for the given machine memory operand
+  /// against the size of an operand.
+  /// - InsnID - Instruction ID
+  /// - MMOIdx - MMO index
+  /// - OpIdx - The operand index to compare the MMO against
+  GIM_CheckMemorySizeEqualToLLT,
+  GIM_CheckMemorySizeLessThanLLT,
+  GIM_CheckMemorySizeGreaterThanLLT,
+  /// Check a generic C++ instruction predicate
+  /// - InsnID - Instruction ID
+  /// - PredicateID - The ID of the predicate function to call
+  GIM_CheckCxxInsnPredicate,
 
   /// Check the type for the specified operand
   /// - InsnID - Instruction ID
@@ -133,12 +167,14 @@
   /// - OpIdx - Operand index
   /// - Expected register bank (specified as a register class)
   GIM_CheckRegBankForClass,
+
   /// Check the operand matches a complex predicate
   /// - InsnID - Instruction ID
   /// - OpIdx - Operand index
   /// - RendererID - The renderer to hold the result
   /// - Complex predicate ID
   GIM_CheckComplexPattern,
+
   /// Check the operand is a specific integer
   /// - InsnID - Instruction ID
   /// - OpIdx - Operand index
@@ -155,6 +191,7 @@
   /// - OpIdx - Operand index
   /// - Expected Intrinsic ID
   GIM_CheckIntrinsicID,
+
   /// Check the specified operand is an MBB
   /// - InsnID - Instruction ID
   /// - OpIdx - Operand index
@@ -183,6 +220,7 @@
   /// - OldInsnID - Instruction ID to mutate
   /// - NewOpcode - The new opcode to use
   GIR_MutateOpcode,
+
   /// Build a new instruction
   /// - InsnID - Instruction ID to define
   /// - Opcode - The new opcode to use
@@ -193,6 +231,7 @@
   /// - OldInsnID - Instruction ID to copy from
   /// - OpIdx - The operand to copy
   GIR_Copy,
+
   /// Copy an operand to the specified instruction or add a zero register if the
   /// operand is a zero immediate.
   /// - NewInsnID - Instruction ID to modify
@@ -206,6 +245,7 @@
   /// - OpIdx - The operand to copy
   /// - SubRegIdx - The subregister to copy
   GIR_CopySubReg,
+
   /// Add an implicit register def to the specified instruction
   /// - InsnID - Instruction ID to modify
   /// - RegNum - The register to add
@@ -218,10 +258,13 @@
   /// - InsnID - Instruction ID to modify
   /// - RegNum - The register to add
   GIR_AddRegister,
+
   /// Add a temporary register to the specified instruction
   /// - InsnID - Instruction ID to modify
   /// - TempRegID - The temporary register ID to add
+  /// - TempRegFlags - The register flags to set
   GIR_AddTempRegister,
+
   /// Add an immediate to the specified instruction
   /// - InsnID - Instruction ID to modify
   /// - Imm - The immediate to add
@@ -230,6 +273,7 @@
   /// - InsnID - Instruction ID to modify
   /// - RendererID - The renderer to call
   GIR_ComplexRenderer,
+
   /// Render sub-operands of complex operands to the specified instruction
   /// - InsnID - Instruction ID to modify
   /// - RendererID - The renderer to call
@@ -247,24 +291,34 @@
   /// The operand index is implicitly 1.
   GIR_CopyConstantAsSImm,
 
+  /// Render a G_FCONSTANT operator as a sign-extended immediate.
+  /// - NewInsnID - Instruction ID to modify
+  /// - OldInsnID - Instruction ID to copy from
+  /// The operand index is implicitly 1.
+  GIR_CopyFConstantAsFPImm,
+
   /// Constrain an instruction operand to a register class.
   /// - InsnID - Instruction ID to modify
   /// - OpIdx - Operand index
   /// - RCEnum - Register class enumeration value
   GIR_ConstrainOperandRC,
+
   /// Constrain an instructions operands according to the instruction
   /// description.
   /// - InsnID - Instruction ID to modify
   GIR_ConstrainSelectedInstOperands,
+
   /// Merge all memory operands into instruction.
   /// - InsnID - Instruction ID to modify
   /// - MergeInsnID... - One or more Instruction ID to merge into the result.
   /// - GIU_MergeMemOperands_EndOfList - Terminates the list of instructions to
   ///                                    merge.
   GIR_MergeMemOperands,
+
   /// Erase from parent.
   /// - InsnID - Instruction ID to erase
   GIR_EraseFromParent,
+
   /// Create a new temporary register that's not constrained.
   /// - TempRegID - The temporary register ID to initialize.
   /// - Expected type
@@ -276,6 +330,9 @@
   /// Increment the rule coverage counter.
   /// - RuleID - The ID of the rule that was covered.
   GIR_Coverage,
+
+  /// Keeping track of the number of the GI opcodes. Must be the last entry.
+  GIU_NumOpcodes,
 };
 
 enum {
@@ -319,10 +376,24 @@
   template <class PredicateBitset, class ComplexMatcherMemFn,
             class CustomRendererFn>
   struct ISelInfoTy {
+    ISelInfoTy(const LLT *TypeObjects, size_t NumTypeObjects,
+               const PredicateBitset *FeatureBitsets,
+               const ComplexMatcherMemFn *ComplexPredicates,
+               const CustomRendererFn *CustomRenderers)
+        : TypeObjects(TypeObjects),
+          FeatureBitsets(FeatureBitsets),
+          ComplexPredicates(ComplexPredicates),
+          CustomRenderers(CustomRenderers) {
+
+      for (size_t I = 0; I < NumTypeObjects; ++I)
+        TypeIDMap[TypeObjects[I]] = I;
+    }
     const LLT *TypeObjects;
     const PredicateBitset *FeatureBitsets;
     const ComplexMatcherMemFn *ComplexPredicates;
     const CustomRendererFn *CustomRenderers;
+
+    SmallDenseMap<LLT, unsigned, 64> TypeIDMap;
   };
 
 protected:
@@ -341,14 +412,25 @@
       const RegisterBankInfo &RBI, const PredicateBitset &AvailableFeatures,
       CodeGenCoverage &CoverageInfo) const;
 
+  virtual const int64_t *getMatchTable() const {
+    llvm_unreachable("Should have been overridden by tablegen if used");
+  }
+
   virtual bool testImmPredicate_I64(unsigned, int64_t) const {
-    llvm_unreachable("Subclasses must override this to use tablegen");
+    llvm_unreachable(
+        "Subclasses must override this with a tablegen-erated function");
   }
   virtual bool testImmPredicate_APInt(unsigned, const APInt &) const {
-    llvm_unreachable("Subclasses must override this to use tablegen");
+    llvm_unreachable(
+        "Subclasses must override this with a tablegen-erated function");
   }
   virtual bool testImmPredicate_APFloat(unsigned, const APFloat &) const {
-    llvm_unreachable("Subclasses must override this to use tablegen");
+    llvm_unreachable(
+        "Subclasses must override this with a tablegen-erated function");
+  }
+  virtual bool testMIPredicate_MI(unsigned, const MachineInstr &) const {
+    llvm_unreachable(
+        "Subclasses must override this with a tablegen-erated function");
   }
 
   /// Constrain a register operand of an instruction \p I to a specified
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
index f7593ba..2003a79 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/InstructionSelectorImpl.h
@@ -41,6 +41,7 @@
   GIPFP_I64_Invalid = 0,
   GIPFP_APInt_Invalid = 0,
   GIPFP_APFloat_Invalid = 0,
+  GIPFP_MI_Invalid = 0,
 };
 
 template <class TgtInstructionSelector, class PredicateBitset,
@@ -53,8 +54,9 @@
     MachineRegisterInfo &MRI, const TargetRegisterInfo &TRI,
     const RegisterBankInfo &RBI, const PredicateBitset &AvailableFeatures,
     CodeGenCoverage &CoverageInfo) const {
+
   uint64_t CurrentIdx = 0;
-  SmallVector<uint64_t, 8> OnFailResumeAt;
+  SmallVector<uint64_t, 4> OnFailResumeAt;
 
   enum RejectAction { RejectAndGiveUp, RejectAndResume };
   auto handleReject = [&]() -> RejectAction {
@@ -62,8 +64,7 @@
                     dbgs() << CurrentIdx << ": Rejected\n");
     if (OnFailResumeAt.empty())
       return RejectAndGiveUp;
-    CurrentIdx = OnFailResumeAt.back();
-    OnFailResumeAt.pop_back();
+    CurrentIdx = OnFailResumeAt.pop_back_val();
     DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
                     dbgs() << CurrentIdx << ": Resume at " << CurrentIdx << " ("
                            << OnFailResumeAt.size() << " try-blocks remain)\n");
@@ -72,7 +73,8 @@
 
   while (true) {
     assert(CurrentIdx != ~0u && "Invalid MatchTable index");
-    switch (MatchTable[CurrentIdx++]) {
+    int64_t MatcherOpcode = MatchTable[CurrentIdx++];
+    switch (MatcherOpcode) {
     case GIM_Try: {
       DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
                       dbgs() << CurrentIdx << ": Begin try-block\n");
@@ -138,12 +140,13 @@
       int64_t InsnID = MatchTable[CurrentIdx++];
       int64_t Expected = MatchTable[CurrentIdx++];
 
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
       unsigned Opcode = State.MIs[InsnID]->getOpcode();
+
       DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
                       dbgs() << CurrentIdx << ": GIM_CheckOpcode(MIs[" << InsnID
                              << "], ExpectedOpcode=" << Expected
                              << ") // Got=" << Opcode << "\n");
-      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
       if (Opcode != Expected) {
         if (handleReject() == RejectAndGiveUp)
           return false;
@@ -151,6 +154,77 @@
       break;
     }
 
+    case GIM_SwitchOpcode: {
+      int64_t InsnID = MatchTable[CurrentIdx++];
+      int64_t LowerBound = MatchTable[CurrentIdx++];
+      int64_t UpperBound = MatchTable[CurrentIdx++];
+      int64_t Default = MatchTable[CurrentIdx++];
+
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+      const int64_t Opcode = State.MIs[InsnID]->getOpcode();
+
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(), {
+        dbgs() << CurrentIdx << ": GIM_SwitchOpcode(MIs[" << InsnID << "], ["
+               << LowerBound << ", " << UpperBound << "), Default=" << Default
+               << ", JumpTable...) // Got=" << Opcode << "\n";
+      });
+      if (Opcode < LowerBound || UpperBound <= Opcode) {
+        CurrentIdx = Default;
+        break;
+      }
+      CurrentIdx = MatchTable[CurrentIdx + (Opcode - LowerBound)];
+      if (!CurrentIdx) {
+        CurrentIdx = Default;
+	break;
+      }
+      OnFailResumeAt.push_back(Default);
+      break;
+    }
+
+    case GIM_SwitchType: {
+      int64_t InsnID = MatchTable[CurrentIdx++];
+      int64_t OpIdx = MatchTable[CurrentIdx++];
+      int64_t LowerBound = MatchTable[CurrentIdx++];
+      int64_t UpperBound = MatchTable[CurrentIdx++];
+      int64_t Default = MatchTable[CurrentIdx++];
+
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+      MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
+
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(), {
+        dbgs() << CurrentIdx << ": GIM_SwitchType(MIs[" << InsnID
+               << "]->getOperand(" << OpIdx << "), [" << LowerBound << ", "
+               << UpperBound << "), Default=" << Default
+               << ", JumpTable...) // Got=";
+        if (!MO.isReg())
+          dbgs() << "Not a VReg\n";
+        else
+          dbgs() << MRI.getType(MO.getReg()) << "\n";
+      });
+      if (!MO.isReg()) {
+        CurrentIdx = Default;
+        break;
+      }
+      const LLT Ty = MRI.getType(MO.getReg());
+      const auto TyI = ISelInfo.TypeIDMap.find(Ty);
+      if (TyI == ISelInfo.TypeIDMap.end()) {
+        CurrentIdx = Default;
+        break;
+      }
+      const int64_t TypeID = TyI->second;
+      if (TypeID < LowerBound || UpperBound <= TypeID) {
+        CurrentIdx = Default;
+        break;
+      }
+      CurrentIdx = MatchTable[CurrentIdx + (TypeID - LowerBound)];
+      if (!CurrentIdx) {
+        CurrentIdx = Default;
+        break;
+      }
+      OnFailResumeAt.push_back(Default);
+      break;
+    }
+
     case GIM_CheckNumOperands: {
       int64_t InsnID = MatchTable[CurrentIdx++];
       int64_t Expected = MatchTable[CurrentIdx++];
@@ -196,7 +270,8 @@
                           << CurrentIdx << ": GIM_CheckAPIntImmPredicate(MIs["
                           << InsnID << "], Predicate=" << Predicate << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-      assert(State.MIs[InsnID]->getOpcode() && "Expected G_CONSTANT");
+      assert(State.MIs[InsnID]->getOpcode() == TargetOpcode::G_CONSTANT &&
+             "Expected G_CONSTANT");
       assert(Predicate > GIPFP_APInt_Invalid && "Expected a valid predicate");
       APInt Value;
       if (State.MIs[InsnID]->getOperand(1).isCImm())
@@ -228,6 +303,21 @@
           return false;
       break;
     }
+    case GIM_CheckCxxInsnPredicate: {
+      int64_t InsnID = MatchTable[CurrentIdx++];
+      int64_t Predicate = MatchTable[CurrentIdx++];
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
+                      dbgs()
+                          << CurrentIdx << ": GIM_CheckCxxPredicate(MIs["
+                          << InsnID << "], Predicate=" << Predicate << ")\n");
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+      assert(Predicate > GIPFP_MI_Invalid && "Expected a valid predicate");
+
+      if (!testMIPredicate_MI(Predicate, *State.MIs[InsnID]))
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+      break;
+    }
     case GIM_CheckAtomicOrdering: {
       int64_t InsnID = MatchTable[CurrentIdx++];
       AtomicOrdering Ordering = (AtomicOrdering)MatchTable[CurrentIdx++];
@@ -235,7 +325,6 @@
                       dbgs() << CurrentIdx << ": GIM_CheckAtomicOrdering(MIs["
                              << InsnID << "], " << (uint64_t)Ordering << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       if (!State.MIs[InsnID]->hasOneMemOperand())
         if (handleReject() == RejectAndGiveUp)
           return false;
@@ -254,7 +343,6 @@
                              << ": GIM_CheckAtomicOrderingOrStrongerThan(MIs["
                              << InsnID << "], " << (uint64_t)Ordering << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       if (!State.MIs[InsnID]->hasOneMemOperand())
         if (handleReject() == RejectAndGiveUp)
           return false;
@@ -273,7 +361,6 @@
                              << ": GIM_CheckAtomicOrderingWeakerThan(MIs["
                              << InsnID << "], " << (uint64_t)Ordering << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       if (!State.MIs[InsnID]->hasOneMemOperand())
         if (handleReject() == RejectAndGiveUp)
           return false;
@@ -284,6 +371,87 @@
             return false;
       break;
     }
+    case GIM_CheckMemorySizeEqualTo: {
+      int64_t InsnID = MatchTable[CurrentIdx++];
+      int64_t MMOIdx = MatchTable[CurrentIdx++];
+      uint64_t Size = MatchTable[CurrentIdx++];
+
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
+                      dbgs() << CurrentIdx
+                             << ": GIM_CheckMemorySizeEqual(MIs[" << InsnID
+                             << "]->memoperands() + " << MMOIdx
+                             << ", Size=" << Size << ")\n");
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+
+      if (State.MIs[InsnID]->getNumMemOperands() <= MMOIdx) {
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+        break;
+      }
+
+      MachineMemOperand *MMO = *(State.MIs[InsnID]->memoperands_begin() + MMOIdx);
+
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
+                      dbgs() << MMO->getSize() << " bytes vs " << Size
+                             << " bytes\n");
+      if (MMO->getSize() != Size)
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+
+      break;
+    }
+    case GIM_CheckMemorySizeEqualToLLT:
+    case GIM_CheckMemorySizeLessThanLLT:
+    case GIM_CheckMemorySizeGreaterThanLLT: {
+      int64_t InsnID = MatchTable[CurrentIdx++];
+      int64_t MMOIdx = MatchTable[CurrentIdx++];
+      int64_t OpIdx = MatchTable[CurrentIdx++];
+
+      DEBUG_WITH_TYPE(
+          TgtInstructionSelector::getName(),
+          dbgs() << CurrentIdx << ": GIM_CheckMemorySize"
+                 << (MatcherOpcode == GIM_CheckMemorySizeEqualToLLT
+                         ? "EqualTo"
+                         : MatcherOpcode == GIM_CheckMemorySizeGreaterThanLLT
+                               ? "GreaterThan"
+                               : "LessThan")
+                 << "LLT(MIs[" << InsnID << "]->memoperands() + " << MMOIdx
+                 << ", OpIdx=" << OpIdx << ")\n");
+      assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
+
+      MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
+      if (!MO.isReg()) {
+        DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
+                        dbgs() << CurrentIdx << ": Not a register\n");
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+        break;
+      }
+
+      if (State.MIs[InsnID]->getNumMemOperands() <= MMOIdx) {
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+        break;
+      }
+
+      MachineMemOperand *MMO = *(State.MIs[InsnID]->memoperands_begin() + MMOIdx);
+
+      unsigned Size = MRI.getType(MO.getReg()).getSizeInBits();
+      if (MatcherOpcode == GIM_CheckMemorySizeEqualToLLT &&
+          MMO->getSize() * 8 != Size) {
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+      } else if (MatcherOpcode == GIM_CheckMemorySizeLessThanLLT &&
+                 MMO->getSize() * 8 >= Size) {
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+      } else if (MatcherOpcode == GIM_CheckMemorySizeGreaterThanLLT &&
+                 MMO->getSize() * 8 <= Size)
+        if (handleReject() == RejectAndGiveUp)
+          return false;
+
+      break;
+    }
     case GIM_CheckType: {
       int64_t InsnID = MatchTable[CurrentIdx++];
       int64_t OpIdx = MatchTable[CurrentIdx++];
@@ -293,7 +461,6 @@
                              << "]->getOperand(" << OpIdx
                              << "), TypeID=" << TypeID << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
       if (!MO.isReg() ||
           MRI.getType(MO.getReg()) != ISelInfo.TypeObjects[TypeID]) {
@@ -312,7 +479,6 @@
                              << InsnID << "]->getOperand(" << OpIdx
                              << "), SizeInBits=" << SizeInBits << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       // iPTR must be looked up in the target.
       if (SizeInBits == 0) {
         MachineFunction *MF = State.MIs[InsnID]->getParent()->getParent();
@@ -384,7 +550,6 @@
                              << InsnID << "]->getOperand(" << OpIdx
                              << "), Value=" << Value << ")\n");
       assert(State.MIs[InsnID] != nullptr && "Used insn before defined");
-
       MachineOperand &MO = State.MIs[InsnID]->getOperand(OpIdx);
       if (MO.isReg()) {
         // isOperandImmEqual() will sign-extend to 64-bits, so should we.
@@ -480,7 +645,7 @@
     }
     case GIM_Reject:
       DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
-                      dbgs() << CurrentIdx << ": GIM_Reject");
+                      dbgs() << CurrentIdx << ": GIM_Reject\n");
       if (handleReject() == RejectAndGiveUp)
         return false;
       break;
@@ -662,6 +827,23 @@
       break;
     }
 
+    // TODO: Needs a test case once we have a pattern that uses this.
+    case GIR_CopyFConstantAsFPImm: {
+      int64_t NewInsnID = MatchTable[CurrentIdx++];
+      int64_t OldInsnID = MatchTable[CurrentIdx++];
+      assert(OutMIs[NewInsnID] && "Attempted to add to undefined instruction");
+      assert(State.MIs[OldInsnID]->getOpcode() == TargetOpcode::G_FCONSTANT && "Expected G_FCONSTANT");
+      if (State.MIs[OldInsnID]->getOperand(1).isFPImm())
+        OutMIs[NewInsnID].addFPImm(
+            State.MIs[OldInsnID]->getOperand(1).getFPImm());
+      else
+        llvm_unreachable("Expected FPImm operand");
+      DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
+                      dbgs() << CurrentIdx << ": GIR_CopyFPConstantAsFPImm(OutMIs["
+                             << NewInsnID << "], MIs[" << OldInsnID << "])\n");
+      break;
+    }
+
     case GIR_CustomRenderer: {
       int64_t InsnID = MatchTable[CurrentIdx++];
       int64_t OldInsnID = MatchTable[CurrentIdx++];
@@ -755,7 +937,7 @@
 
     case GIR_Done:
       DEBUG_WITH_TYPE(TgtInstructionSelector::getName(),
-                      dbgs() << CurrentIdx << ": GIR_Done");
+                      dbgs() << CurrentIdx << ": GIR_Done\n");
       return true;
 
     default:
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
index a1f564b..8735876 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h
@@ -38,7 +38,7 @@
       return false;
     if (MachineInstr *DefMI = getOpcodeDef(TargetOpcode::G_TRUNC,
                                            MI.getOperand(1).getReg(), MRI)) {
-      DEBUG(dbgs() << ".. Combine MI: " << MI;);
+      LLVM_DEBUG(dbgs() << ".. Combine MI: " << MI;);
       unsigned DstReg = MI.getOperand(0).getReg();
       unsigned SrcReg = DefMI->getOperand(1).getReg();
       Builder.setInstr(MI);
@@ -62,7 +62,7 @@
       if (isInstUnsupported({TargetOpcode::G_AND, {DstTy}}) ||
           isInstUnsupported({TargetOpcode::G_CONSTANT, {DstTy}}))
         return false;
-      DEBUG(dbgs() << ".. Combine MI: " << MI;);
+      LLVM_DEBUG(dbgs() << ".. Combine MI: " << MI;);
       Builder.setInstr(MI);
       unsigned ZExtSrc = MI.getOperand(1).getReg();
       LLT ZExtSrcTy = MRI.getType(ZExtSrc);
@@ -91,7 +91,7 @@
           isInstUnsupported({TargetOpcode::G_ASHR, {DstTy}}) ||
           isInstUnsupported({TargetOpcode::G_CONSTANT, {DstTy}}))
         return false;
-      DEBUG(dbgs() << ".. Combine MI: " << MI;);
+      LLVM_DEBUG(dbgs() << ".. Combine MI: " << MI;);
       Builder.setInstr(MI);
       unsigned SExtSrc = MI.getOperand(1).getReg();
       LLT SExtSrcTy = MRI.getType(SExtSrc);
@@ -123,7 +123,7 @@
       LLT DstTy = MRI.getType(DstReg);
       if (isInstUnsupported({TargetOpcode::G_IMPLICIT_DEF, {DstTy}}))
         return false;
-      DEBUG(dbgs() << ".. Combine EXT(IMPLICIT_DEF) " << MI;);
+      LLVM_DEBUG(dbgs() << ".. Combine EXT(IMPLICIT_DEF) " << MI;);
       Builder.setInstr(MI);
       Builder.buildInstr(TargetOpcode::G_IMPLICIT_DEF, DstReg);
       markInstAndDefDead(MI, *DefMI, DeadInsts);
@@ -139,9 +139,9 @@
       return false;
 
     unsigned NumDefs = MI.getNumOperands() - 1;
-    unsigned SrcReg = MI.getOperand(NumDefs).getReg();
-    MachineInstr *MergeI = MRI.getVRegDef(SrcReg);
-    if (!MergeI || (MergeI->getOpcode() != TargetOpcode::G_MERGE_VALUES))
+    MachineInstr *MergeI = getOpcodeDef(TargetOpcode::G_MERGE_VALUES,
+                                        MI.getOperand(NumDefs).getReg(), MRI);
+    if (!MergeI)
       return false;
 
     const unsigned NumMergeRegs = MergeI->getNumOperands() - 1;
@@ -253,11 +253,8 @@
     // and as a result, %3, %2, %1 are dead.
     MachineInstr *PrevMI = &MI;
     while (PrevMI != &DefMI) {
-      // If we're dealing with G_UNMERGE_VALUES, tryCombineMerges doesn't really try
-      // to fold copies in between and we can ignore them here.
-      if (PrevMI->getOpcode() == TargetOpcode::G_UNMERGE_VALUES)
-        break;
-      unsigned PrevRegSrc = PrevMI->getOperand(1).getReg();
+      unsigned PrevRegSrc =
+          PrevMI->getOperand(PrevMI->getNumOperands() - 1).getReg();
       MachineInstr *TmpDef = MRI.getVRegDef(PrevRegSrc);
       if (MRI.hasOneUse(PrevRegSrc)) {
         if (TmpDef != &DefMI) {
@@ -269,9 +266,7 @@
         break;
       PrevMI = TmpDef;
     }
-    if ((PrevMI == &DefMI ||
-         DefMI.getOpcode() == TargetOpcode::G_MERGE_VALUES) &&
-        MRI.hasOneUse(DefMI.getOperand(0).getReg()))
+    if (PrevMI == &DefMI && MRI.hasOneUse(DefMI.getOperand(0).getReg()))
       DeadInsts.push_back(&DefMI);
   }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
index 8bd8a9d..d122e67 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerHelper.h
@@ -93,12 +93,24 @@
   const LegalizerInfo &getLegalizerInfo() const { return LI; }
 
 private:
+  /// Legalize a single operand \p OpIdx of the machine instruction \p MI as a
+  /// Use by extending the operand's type to \p WideTy using the specified \p
+  /// ExtOpcode for the extension instruction, and replacing the vreg of the
+  /// operand in place.
+  void widenScalarSrc(MachineInstr &MI, LLT WideTy, unsigned OpIdx,
+                      unsigned ExtOpcode);
+
+  /// Legalize a single operand \p OpIdx of the machine instruction \p MI as a
+  /// Def by extending the operand's type to \p WideTy and truncating it back
+  /// with the \p TruncOpcode, and replacing the vreg of the operand in place.
+  void widenScalarDst(MachineInstr &MI, LLT WideTy, unsigned OpIdx = 0,
+                      unsigned TruncOpcode = TargetOpcode::G_TRUNC);
 
   /// Helper function to split a wide generic register into bitwise blocks with
   /// the given Type (which implies the number of blocks needed). The generic
   /// registers created are appended to Ops, starting at bit 0 of Reg.
   void extractParts(unsigned Reg, LLT Ty, int NumParts,
-                    SmallVectorImpl<unsigned> &Ops);
+                    SmallVectorImpl<unsigned> &VRegs);
 
   MachineRegisterInfo &MRI;
   const LegalizerInfo &LI;
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
index 117c791..a8c2608 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
@@ -19,6 +19,7 @@
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallBitVector.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/TargetOpcodes.h"
@@ -37,6 +38,7 @@
 class MachineInstr;
 class MachineIRBuilder;
 class MachineRegisterInfo;
+class MCInstrInfo;
 
 namespace LegalizeActions {
 enum LegalizeAction : std::uint8_t {
@@ -118,6 +120,21 @@
   unsigned Opcode;
   ArrayRef<LLT> Types;
 
+  struct MemDesc {
+    uint64_t Size;
+    AtomicOrdering Ordering;
+  };
+
+  /// Operations which require memory can use this to place requirements on the
+  /// memory type for each MMO.
+  ArrayRef<MemDesc> MMODescrs;
+
+  constexpr LegalityQuery(unsigned Opcode, const ArrayRef<LLT> Types,
+                          const ArrayRef<MemDesc> MMODescrs)
+      : Opcode(Opcode), Types(Types), MMODescrs(MMODescrs) {}
+  constexpr LegalityQuery(unsigned Opcode, const ArrayRef<LLT> Types)
+      : LegalityQuery(Opcode, Types, {}) {}
+
   raw_ostream &print(raw_ostream &OS) const;
 };
 
@@ -147,8 +164,31 @@
     std::function<std::pair<unsigned, LLT>(const LegalityQuery &)>;
 
 namespace LegalityPredicates {
+struct TypePairAndMemSize {
+  LLT Type0;
+  LLT Type1;
+  uint64_t MemSize;
+
+  bool operator==(const TypePairAndMemSize &Other) const {
+    return Type0 == Other.Type0 && Type1 == Other.Type1 &&
+           MemSize == Other.MemSize;
+  }
+};
+
 /// True iff P0 and P1 are true.
-LegalityPredicate all(LegalityPredicate P0, LegalityPredicate P1);
+template<typename Predicate>
+Predicate all(Predicate P0, Predicate P1) {
+  return [=](const LegalityQuery &Query) {
+    return P0(Query) && P1(Query);
+  };
+}
+/// True iff all given predicates are true.
+template<typename Predicate, typename... Args>
+Predicate all(Predicate P0, Predicate P1, Args... args) {
+  return all(all(P0, P1), args...);
+}
+/// True iff the given type index is the specified types.
+LegalityPredicate typeIs(unsigned TypeIdx, LLT TypesInit);
 /// True iff the given type index is one of the specified types.
 LegalityPredicate typeInSet(unsigned TypeIdx,
                             std::initializer_list<LLT> TypesInit);
@@ -157,6 +197,11 @@
 LegalityPredicate
 typePairInSet(unsigned TypeIdx0, unsigned TypeIdx1,
               std::initializer_list<std::pair<LLT, LLT>> TypesInit);
+/// True iff the given types for the given pair of type indexes is one of the
+/// specified type pairs.
+LegalityPredicate typePairAndMemSizeInSet(
+    unsigned TypeIdx0, unsigned TypeIdx1, unsigned MMOIdx,
+    std::initializer_list<TypePairAndMemSize> TypesAndMemSizeInit);
 /// True iff the specified type index is a scalar.
 LegalityPredicate isScalar(unsigned TypeIdx);
 /// True iff the specified type index is a scalar that's narrower than the given
@@ -168,14 +213,22 @@
 /// True iff the specified type index is a scalar whose size is not a power of
 /// 2.
 LegalityPredicate sizeNotPow2(unsigned TypeIdx);
+/// True iff the specified MMO index has a size that is not a power of 2
+LegalityPredicate memSizeInBytesNotPow2(unsigned MMOIdx);
 /// True iff the specified type index is a vector whose element count is not a
 /// power of 2.
 LegalityPredicate numElementsNotPow2(unsigned TypeIdx);
+/// True iff the specified MMO index has at an atomic ordering of at Ordering or
+/// stronger.
+LegalityPredicate atomicOrderingAtLeastOrStrongerThan(unsigned MMOIdx,
+                                                      AtomicOrdering Ordering);
 } // end namespace LegalityPredicates
 
 namespace LegalizeMutations {
 /// Select this specific type for the given type index.
 LegalizeMutation changeTo(unsigned TypeIdx, LLT Ty);
+/// Keep the same type as the given type index.
+LegalizeMutation changeTo(unsigned TypeIdx, unsigned FromTypeIdx);
 /// Widen the type for the given type index to the next power of 2.
 LegalizeMutation widenScalarToNextPow2(unsigned TypeIdx, unsigned Min = 0);
 /// Add more elements to the type for the given type index to the next power of
@@ -219,6 +272,33 @@
   bool IsAliasedByAnother;
   SmallVector<LegalizeRule, 2> Rules;
 
+#ifndef NDEBUG
+  /// If bit I is set, this rule set contains a rule that may handle (predicate
+  /// or perform an action upon (or both)) the type index I. The uncertainty
+  /// comes from free-form rules executing user-provided lambda functions. We
+  /// conservatively assume such rules do the right thing and cover all type
+  /// indices. The bitset is intentionally 1 bit wider than it absolutely needs
+  /// to be to distinguish such cases from the cases where all type indices are
+  /// individually handled.
+  SmallBitVector TypeIdxsCovered{MCOI::OPERAND_LAST_GENERIC -
+                                 MCOI::OPERAND_FIRST_GENERIC + 2};
+#endif
+
+  unsigned typeIdx(unsigned TypeIdx) {
+    assert(TypeIdx <=
+               (MCOI::OPERAND_LAST_GENERIC - MCOI::OPERAND_FIRST_GENERIC) &&
+           "Type Index is out of bounds");
+#ifndef NDEBUG
+    TypeIdxsCovered.set(TypeIdx);
+#endif
+    return TypeIdx;
+  }
+  void markAllTypeIdxsAsCovered() {
+#ifndef NDEBUG
+    TypeIdxsCovered.set();
+#endif
+  }
+
   void add(const LegalizeRule &Rule) {
     assert(AliasOf == 0 &&
            "RuleSet is aliased, change the representative opcode instead");
@@ -235,7 +315,7 @@
     return *this;
   }
   /// Use the given action when the predicate is true.
-  /// Action should not be an action that requires mutation.
+  /// Action should be an action that requires mutation.
   LegalizeRuleSet &actionIf(LegalizeAction Action, LegalityPredicate Predicate,
                             LegalizeMutation Mutation) {
     add({Predicate, Action, Mutation});
@@ -246,16 +326,33 @@
   LegalizeRuleSet &actionFor(LegalizeAction Action,
                              std::initializer_list<LLT> Types) {
     using namespace LegalityPredicates;
-    return actionIf(Action, typeInSet(0, Types));
+    return actionIf(Action, typeInSet(typeIdx(0), Types));
+  }
+  /// Use the given action when type index 0 is any type in the given list.
+  /// Action should be an action that requires mutation.
+  LegalizeRuleSet &actionFor(LegalizeAction Action,
+                             std::initializer_list<LLT> Types,
+                             LegalizeMutation Mutation) {
+    using namespace LegalityPredicates;
+    return actionIf(Action, typeInSet(typeIdx(0), Types), Mutation);
   }
   /// Use the given action when type indexes 0 and 1 is any type pair in the
   /// given list.
   /// Action should not be an action that requires mutation.
-  LegalizeRuleSet &
-  actionFor(LegalizeAction Action,
-            std::initializer_list<std::pair<LLT, LLT>> Types) {
+  LegalizeRuleSet &actionFor(LegalizeAction Action,
+                             std::initializer_list<std::pair<LLT, LLT>> Types) {
     using namespace LegalityPredicates;
-    return actionIf(Action, typePairInSet(0, 1, Types));
+    return actionIf(Action, typePairInSet(typeIdx(0), typeIdx(1), Types));
+  }
+  /// Use the given action when type indexes 0 and 1 is any type pair in the
+  /// given list.
+  /// Action should be an action that requires mutation.
+  LegalizeRuleSet &actionFor(LegalizeAction Action,
+                             std::initializer_list<std::pair<LLT, LLT>> Types,
+                             LegalizeMutation Mutation) {
+    using namespace LegalityPredicates;
+    return actionIf(Action, typePairInSet(typeIdx(0), typeIdx(1), Types),
+                    Mutation);
   }
   /// Use the given action when type indexes 0 and 1 are both in the given list.
   /// That is, the type pair is in the cartesian product of the list.
@@ -263,10 +360,11 @@
   LegalizeRuleSet &actionForCartesianProduct(LegalizeAction Action,
                                              std::initializer_list<LLT> Types) {
     using namespace LegalityPredicates;
-    return actionIf(Action, all(typeInSet(0, Types), typeInSet(1, Types)));
+    return actionIf(Action, all(typeInSet(typeIdx(0), Types),
+                                typeInSet(typeIdx(1), Types)));
   }
-  /// Use the given action when type indexes 0 and 1 are both their respective
-  /// lists.
+  /// Use the given action when type indexes 0 and 1 are both in their
+  /// respective lists.
   /// That is, the type pair is in the cartesian product of the lists
   /// Action should not be an action that requires mutation.
   LegalizeRuleSet &
@@ -274,7 +372,20 @@
                             std::initializer_list<LLT> Types0,
                             std::initializer_list<LLT> Types1) {
     using namespace LegalityPredicates;
-    return actionIf(Action, all(typeInSet(0, Types0), typeInSet(1, Types1)));
+    return actionIf(Action, all(typeInSet(typeIdx(0), Types0),
+                                typeInSet(typeIdx(1), Types1)));
+  }
+  /// Use the given action when type indexes 0, 1, and 2 are all in their
+  /// respective lists.
+  /// That is, the type triple is in the cartesian product of the lists
+  /// Action should not be an action that requires mutation.
+  LegalizeRuleSet &actionForCartesianProduct(
+      LegalizeAction Action, std::initializer_list<LLT> Types0,
+      std::initializer_list<LLT> Types1, std::initializer_list<LLT> Types2) {
+    using namespace LegalityPredicates;
+    return actionIf(Action, all(typeInSet(typeIdx(0), Types0),
+                                all(typeInSet(typeIdx(1), Types1),
+                                    typeInSet(typeIdx(2), Types2))));
   }
 
 public:
@@ -292,6 +403,9 @@
 
   /// The instruction is legal if predicate is true.
   LegalizeRuleSet &legalIf(LegalityPredicate Predicate) {
+    // We have no choice but conservatively assume that the free-form
+    // user-provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::Legal, Predicate);
   }
   /// The instruction is legal when type index 0 is any type in the given list.
@@ -303,6 +417,15 @@
   LegalizeRuleSet &legalFor(std::initializer_list<std::pair<LLT, LLT>> Types) {
     return actionFor(LegalizeAction::Legal, Types);
   }
+  /// The instruction is legal when type indexes 0 and 1 along with the memory
+  /// size is any type and size tuple in the given list.
+  LegalizeRuleSet &legalForTypesWithMemSize(
+      std::initializer_list<LegalityPredicates::TypePairAndMemSize>
+          TypesAndMemSize) {
+    return actionIf(LegalizeAction::Legal,
+                    LegalityPredicates::typePairAndMemSizeInSet(
+                        typeIdx(0), typeIdx(1), /*MMOIdx*/ 0, TypesAndMemSize));
+  }
   /// The instruction is legal when type indexes 0 and 1 are both in the given
   /// list. That is, the type pair is in the cartesian product of the list.
   LegalizeRuleSet &legalForCartesianProduct(std::initializer_list<LLT> Types) {
@@ -315,8 +438,77 @@
     return actionForCartesianProduct(LegalizeAction::Legal, Types0, Types1);
   }
 
+  /// The instruction is lowered.
+  LegalizeRuleSet &lower() {
+    using namespace LegalizeMutations;
+    // We have no choice but conservatively assume that predicate-less lowering
+    // properly handles all type indices by design:
+    markAllTypeIdxsAsCovered();
+    return actionIf(LegalizeAction::Lower, always);
+  }
+  /// The instruction is lowered if predicate is true. Keep type index 0 as the
+  /// same type.
+  LegalizeRuleSet &lowerIf(LegalityPredicate Predicate) {
+    using namespace LegalizeMutations;
+    // We have no choice but conservatively assume that lowering with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
+    return actionIf(LegalizeAction::Lower, Predicate);
+  }
+  /// The instruction is lowered if predicate is true.
+  LegalizeRuleSet &lowerIf(LegalityPredicate Predicate,
+                           LegalizeMutation Mutation) {
+    // We have no choice but conservatively assume that lowering with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
+    return actionIf(LegalizeAction::Lower, Predicate, Mutation);
+  }
+  /// The instruction is lowered when type index 0 is any type in the given
+  /// list. Keep type index 0 as the same type.
+  LegalizeRuleSet &lowerFor(std::initializer_list<LLT> Types) {
+    return actionFor(LegalizeAction::Lower, Types,
+                     LegalizeMutations::changeTo(0, 0));
+  }
+  /// The instruction is lowered when type index 0 is any type in the given
+  /// list.
+  LegalizeRuleSet &lowerFor(std::initializer_list<LLT> Types,
+                            LegalizeMutation Mutation) {
+    return actionFor(LegalizeAction::Lower, Types, Mutation);
+  }
+  /// The instruction is lowered when type indexes 0 and 1 is any type pair in
+  /// the given list. Keep type index 0 as the same type.
+  LegalizeRuleSet &lowerFor(std::initializer_list<std::pair<LLT, LLT>> Types) {
+    return actionFor(LegalizeAction::Lower, Types,
+                     LegalizeMutations::changeTo(0, 0));
+  }
+  /// The instruction is lowered when type indexes 0 and 1 is any type pair in
+  /// the given list.
+  LegalizeRuleSet &lowerFor(std::initializer_list<std::pair<LLT, LLT>> Types,
+                            LegalizeMutation Mutation) {
+    return actionFor(LegalizeAction::Lower, Types, Mutation);
+  }
+  /// The instruction is lowered when type indexes 0 and 1 are both in their
+  /// respective lists.
+  LegalizeRuleSet &lowerForCartesianProduct(std::initializer_list<LLT> Types0,
+                                            std::initializer_list<LLT> Types1) {
+    using namespace LegalityPredicates;
+    return actionForCartesianProduct(LegalizeAction::Lower, Types0, Types1);
+  }
+  /// The instruction is lowered when when type indexes 0, 1, and 2 are all in
+  /// their respective lists.
+  LegalizeRuleSet &lowerForCartesianProduct(std::initializer_list<LLT> Types0,
+                                            std::initializer_list<LLT> Types1,
+                                            std::initializer_list<LLT> Types2) {
+    using namespace LegalityPredicates;
+    return actionForCartesianProduct(LegalizeAction::Lower, Types0, Types1,
+                                     Types2);
+  }
+
   /// Like legalIf, but for the Libcall action.
   LegalizeRuleSet &libcallIf(LegalityPredicate Predicate) {
+    // We have no choice but conservatively assume that a libcall with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::Libcall, Predicate);
   }
   LegalizeRuleSet &libcallFor(std::initializer_list<LLT> Types) {
@@ -340,12 +532,18 @@
   /// true.
   LegalizeRuleSet &widenScalarIf(LegalityPredicate Predicate,
                                  LegalizeMutation Mutation) {
+    // We have no choice but conservatively assume that an action with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::WidenScalar, Predicate, Mutation);
   }
   /// Narrow the scalar to the one selected by the mutation if the predicate is
   /// true.
   LegalizeRuleSet &narrowScalarIf(LegalityPredicate Predicate,
                                   LegalizeMutation Mutation) {
+    // We have no choice but conservatively assume that an action with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::NarrowScalar, Predicate, Mutation);
   }
 
@@ -353,12 +551,18 @@
   /// predicate is true.
   LegalizeRuleSet &moreElementsIf(LegalityPredicate Predicate,
                                   LegalizeMutation Mutation) {
+    // We have no choice but conservatively assume that an action with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::MoreElements, Predicate, Mutation);
   }
   /// Remove elements to reach the type selected by the mutation if the
   /// predicate is true.
   LegalizeRuleSet &fewerElementsIf(LegalityPredicate Predicate,
                                    LegalizeMutation Mutation) {
+    // We have no choice but conservatively assume that an action with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::FewerElements, Predicate, Mutation);
   }
 
@@ -369,8 +573,15 @@
   LegalizeRuleSet &unsupportedIf(LegalityPredicate Predicate) {
     return actionIf(LegalizeAction::Unsupported, Predicate);
   }
+  LegalizeRuleSet &unsupportedIfMemSizeNotPow2() {
+    return actionIf(LegalizeAction::Unsupported,
+                    LegalityPredicates::memSizeInBytesNotPow2(0));
+  }
 
   LegalizeRuleSet &customIf(LegalityPredicate Predicate) {
+    // We have no choice but conservatively assume that a custom action with a
+    // free-form user provided Predicate properly handles all type indices:
+    markAllTypeIdxsAsCovered();
     return actionIf(LegalizeAction::Custom, Predicate);
   }
   LegalizeRuleSet &customFor(std::initializer_list<LLT> Types) {
@@ -387,54 +598,57 @@
 
   /// Widen the scalar to the next power of two that is at least MinSize.
   /// No effect if the type is not a scalar or is a power of two.
-  LegalizeRuleSet &widenScalarToNextPow2(unsigned TypeIdx, unsigned MinSize = 0) {
+  LegalizeRuleSet &widenScalarToNextPow2(unsigned TypeIdx,
+                                         unsigned MinSize = 0) {
     using namespace LegalityPredicates;
-    return widenScalarIf(
-        sizeNotPow2(TypeIdx),
-        LegalizeMutations::widenScalarToNextPow2(TypeIdx, MinSize));
+    return actionIf(LegalizeAction::WidenScalar, sizeNotPow2(typeIdx(TypeIdx)),
+                    LegalizeMutations::widenScalarToNextPow2(TypeIdx, MinSize));
   }
 
   LegalizeRuleSet &narrowScalar(unsigned TypeIdx, LegalizeMutation Mutation) {
     using namespace LegalityPredicates;
-    return narrowScalarIf(isScalar(TypeIdx), Mutation);
+    return actionIf(LegalizeAction::NarrowScalar, isScalar(typeIdx(TypeIdx)),
+                    Mutation);
   }
 
   /// Ensure the scalar is at least as wide as Ty.
   LegalizeRuleSet &minScalar(unsigned TypeIdx, const LLT &Ty) {
     using namespace LegalityPredicates;
     using namespace LegalizeMutations;
-    return widenScalarIf(narrowerThan(TypeIdx, Ty.getSizeInBits()),
-                         changeTo(TypeIdx, Ty));
+    return actionIf(LegalizeAction::WidenScalar,
+                    narrowerThan(TypeIdx, Ty.getSizeInBits()),
+                    changeTo(typeIdx(TypeIdx), Ty));
   }
 
   /// Ensure the scalar is at most as wide as Ty.
   LegalizeRuleSet &maxScalar(unsigned TypeIdx, const LLT &Ty) {
     using namespace LegalityPredicates;
     using namespace LegalizeMutations;
-    return narrowScalarIf(widerThan(TypeIdx, Ty.getSizeInBits()),
-                          changeTo(TypeIdx, Ty));
+    return actionIf(LegalizeAction::NarrowScalar,
+                    widerThan(TypeIdx, Ty.getSizeInBits()),
+                    changeTo(typeIdx(TypeIdx), Ty));
   }
 
   /// Conditionally limit the maximum size of the scalar.
   /// For example, when the maximum size of one type depends on the size of
   /// another such as extracting N bits from an M bit container.
-  LegalizeRuleSet &maxScalarIf(LegalityPredicate Predicate, unsigned TypeIdx, const LLT &Ty) {
+  LegalizeRuleSet &maxScalarIf(LegalityPredicate Predicate, unsigned TypeIdx,
+                               const LLT &Ty) {
     using namespace LegalityPredicates;
     using namespace LegalizeMutations;
-    return narrowScalarIf(
-        [=](const LegalityQuery &Query) {
-          return widerThan(TypeIdx, Ty.getSizeInBits()) &&
-                 Predicate(Query);
-        },
-        changeTo(TypeIdx, Ty));
+    return actionIf(LegalizeAction::NarrowScalar,
+                    [=](const LegalityQuery &Query) {
+                      return widerThan(TypeIdx, Ty.getSizeInBits()) &&
+                             Predicate(Query);
+                    },
+                    changeTo(typeIdx(TypeIdx), Ty));
   }
 
   /// Limit the range of scalar sizes to MinTy and MaxTy.
-  LegalizeRuleSet &clampScalar(unsigned TypeIdx, const LLT &MinTy, const LLT &MaxTy) {
+  LegalizeRuleSet &clampScalar(unsigned TypeIdx, const LLT &MinTy,
+                               const LLT &MaxTy) {
     assert(MinTy.isScalar() && MaxTy.isScalar() && "Expected scalar types");
-
-    return minScalar(TypeIdx, MinTy)
-        .maxScalar(TypeIdx, MaxTy);
+    return minScalar(TypeIdx, MinTy).maxScalar(TypeIdx, MaxTy);
   }
 
   /// Add more elements to the vector to reach the next power of two.
@@ -442,17 +656,21 @@
   /// two.
   LegalizeRuleSet &moreElementsToNextPow2(unsigned TypeIdx) {
     using namespace LegalityPredicates;
-    return moreElementsIf(numElementsNotPow2(TypeIdx),
-                          LegalizeMutations::moreElementsToNextPow2(TypeIdx));
+    return actionIf(LegalizeAction::MoreElements,
+                    numElementsNotPow2(typeIdx(TypeIdx)),
+                    LegalizeMutations::moreElementsToNextPow2(TypeIdx));
   }
 
   /// Limit the number of elements in EltTy vectors to at least MinElements.
   LegalizeRuleSet &clampMinNumElements(unsigned TypeIdx, const LLT &EltTy,
                                        unsigned MinElements) {
-    return moreElementsIf(
+    // Mark the type index as covered:
+    typeIdx(TypeIdx);
+    return actionIf(
+        LegalizeAction::MoreElements,
         [=](const LegalityQuery &Query) {
           LLT VecTy = Query.Types[TypeIdx];
-          return VecTy.getElementType() == EltTy &&
+          return VecTy.isVector() && VecTy.getElementType() == EltTy &&
                  VecTy.getNumElements() < MinElements;
         },
         [=](const LegalityQuery &Query) {
@@ -464,10 +682,13 @@
   /// Limit the number of elements in EltTy vectors to at most MaxElements.
   LegalizeRuleSet &clampMaxNumElements(unsigned TypeIdx, const LLT &EltTy,
                                        unsigned MaxElements) {
-    return fewerElementsIf(
+    // Mark the type index as covered:
+    typeIdx(TypeIdx);
+    return actionIf(
+        LegalizeAction::FewerElements,
         [=](const LegalityQuery &Query) {
           LLT VecTy = Query.Types[TypeIdx];
-          return VecTy.getElementType() == EltTy &&
+          return VecTy.isVector() && VecTy.getElementType() == EltTy &&
                  VecTy.getNumElements() > MaxElements;
         },
         [=](const LegalityQuery &Query) {
@@ -499,6 +720,11 @@
     return *this;
   }
 
+  /// Check if there is no type index which is obviously not handled by the
+  /// LegalizeRuleSet in any way at all.
+  /// \pre Type indices of the opcode form a dense [0, \p NumTypeIdxs) set.
+  bool verifyTypeIdxsCoverage(unsigned NumTypeIdxs) const;
+
   /// Apply the ruleset to the given LegalityQuery.
   LegalizeActionStep apply(const LegalityQuery &Query) const;
 };
@@ -516,6 +742,10 @@
   /// before any query is made or incorrect results may be returned.
   void computeTables();
 
+  /// Perform simple self-diagnostic and assert if there is anything obviously
+  /// wrong with the actions set up.
+  void verify(const MCInstrInfo &MII) const;
+
   static bool needsLegalizingToDifferentSize(const LegalizeAction Action) {
     using namespace LegalizeActions;
     switch (Action) {
@@ -556,7 +786,7 @@
   /// setAction ({G_ADD, 0, LLT::scalar(32)}, Legal);
   /// setLegalizeScalarToDifferentSizeStrategy(
   ///   G_ADD, 0, widenToLargerTypesAndNarrowToLargest);
-  /// will end up defining getAction({G_ADD, 0, T}) to return the following 
+  /// will end up defining getAction({G_ADD, 0, T}) to return the following
   /// actions for different scalar types T:
   ///  LLT::scalar(1)..LLT::scalar(31): {WidenScalar, 0, LLT::scalar(32)}
   ///  LLT::scalar(32):                 {Legal, 0, LLT::scalar(32)}
@@ -584,7 +814,7 @@
     VectorElementSizeChangeStrategies[OpcodeIdx][TypeIdx] = S;
   }
 
-  /// A SizeChangeStrategy for the common case where legalization for a 
+  /// A SizeChangeStrategy for the common case where legalization for a
   /// particular operation consists of only supporting a specific set of type
   /// sizes. E.g.
   ///   setAction ({G_DIV, 0, LLT::scalar(32)}, Legal);
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
index 0a46eb9..1e2d476 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Localizer.h
@@ -70,6 +70,8 @@
         .set(MachineFunctionProperties::Property::RegBankSelected);
   }
 
+  void getAnalysisUsage(AnalysisUsage &AU) const override;
+
   bool runOnMachineFunction(MachineFunction &MF) override;
 };
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
index 797f5e5..f77f9a8 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MIPatternMatch.h
@@ -222,6 +222,12 @@
 }
 
 template <typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>
+m_GFSub(const LHS &L, const RHS &R) {
+  return BinaryOp_match<LHS, RHS, TargetOpcode::G_FSUB, false>(L, R);
+}
+
+template <typename LHS, typename RHS>
 inline BinaryOp_match<LHS, RHS, TargetOpcode::G_AND, true>
 m_GAnd(const LHS &L, const RHS &R) {
   return BinaryOp_match<LHS, RHS, TargetOpcode::G_AND, true>(L, R);
@@ -305,6 +311,11 @@
 }
 
 template <typename SrcTy>
+inline UnaryOp_match<SrcTy, TargetOpcode::G_FNEG> m_GFNeg(const SrcTy &Src) {
+  return UnaryOp_match<SrcTy, TargetOpcode::G_FNEG>(Src);
+}
+
+template <typename SrcTy>
 inline UnaryOp_match<SrcTy, TargetOpcode::COPY> m_Copy(SrcTy &&Src) {
   return UnaryOp_match<SrcTy, TargetOpcode::COPY>(std::forward<SrcTy>(Src));
 }
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
index ef4e0ad..ac1673d 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/MachineIRBuilder.h
@@ -31,11 +31,10 @@
 class MachineInstr;
 class TargetInstrInfo;
 
-/// Helper class to build MachineInstr.
-/// It keeps internally the insertion point and debug location for all
-/// the new instructions we want to create.
-/// This information can be modify via the related setters.
-class MachineIRBuilder {
+/// Class which stores all the state required in a MachineIRBuilder.
+/// Since MachineIRBuilders will only store state in this object, it allows
+/// to transfer BuilderState between different kinds of MachineIRBuilders.
+struct MachineIRBuilderState {
   /// MachineFunction under construction.
   MachineFunction *MF;
   /// Information used to access the description of the opcodes.
@@ -52,15 +51,23 @@
   /// @}
 
   std::function<void(MachineInstr *)> InsertedInstr;
+};
 
+/// Helper class to build MachineInstr.
+/// It keeps internally the insertion point and debug location for all
+/// the new instructions we want to create.
+/// This information can be modify via the related setters.
+class MachineIRBuilderBase {
+
+  MachineIRBuilderState State;
   const TargetInstrInfo &getTII() {
-    assert(TII && "TargetInstrInfo is not set");
-    return *TII;
+    assert(State.TII && "TargetInstrInfo is not set");
+    return *State.TII;
   }
 
   void validateTruncExt(unsigned Dst, unsigned Src, bool IsExtend);
-  MachineInstrBuilder buildBinaryOp(unsigned Opcode, unsigned Res, unsigned Op0, unsigned Op1);
 
+protected:
   unsigned getDestFromArg(unsigned Reg) { return Reg; }
   unsigned getDestFromArg(LLT Ty) {
     return getMF().getRegInfo().createGenericVirtualRegister(Ty);
@@ -88,30 +95,41 @@
     return MIB->getOperand(0).getReg();
   }
 
+  void validateBinaryOp(unsigned Res, unsigned Op0, unsigned Op1);
+
 public:
   /// Some constructors for easy use.
-  MachineIRBuilder() = default;
-  MachineIRBuilder(MachineFunction &MF) { setMF(MF); }
-  MachineIRBuilder(MachineInstr &MI) : MachineIRBuilder(*MI.getMF()) {
+  MachineIRBuilderBase() = default;
+  MachineIRBuilderBase(MachineFunction &MF) { setMF(MF); }
+  MachineIRBuilderBase(MachineInstr &MI) : MachineIRBuilderBase(*MI.getMF()) {
     setInstr(MI);
   }
 
+  MachineIRBuilderBase(const MachineIRBuilderState &BState) : State(BState) {}
+
   /// Getter for the function we currently build.
   MachineFunction &getMF() {
-    assert(MF && "MachineFunction is not set");
-    return *MF;
+    assert(State.MF && "MachineFunction is not set");
+    return *State.MF;
   }
 
+  /// Getter for DebugLoc
+  const DebugLoc &getDL() { return State.DL; }
+
+  /// Getter for MRI
+  MachineRegisterInfo *getMRI() { return State.MRI; }
+
+  /// Getter for the State
+  MachineIRBuilderState &getState() { return State; }
+
   /// Getter for the basic block we currently build.
   MachineBasicBlock &getMBB() {
-    assert(MBB && "MachineBasicBlock is not set");
-    return *MBB;
+    assert(State.MBB && "MachineBasicBlock is not set");
+    return *State.MBB;
   }
 
   /// Current insertion point for new instructions.
-  MachineBasicBlock::iterator getInsertPt() {
-    return II;
-  }
+  MachineBasicBlock::iterator getInsertPt() { return State.II; }
 
   /// Set the insertion point before the specified position.
   /// \pre MBB must be in getMF().
@@ -136,15 +154,16 @@
   /// \name Control where instructions we create are recorded (typically for
   /// visiting again later during legalization).
   /// @{
+  void recordInsertion(MachineInstr *InsertedInstr) const;
   void recordInsertions(std::function<void(MachineInstr *)> InsertedInstr);
   void stopRecordingInsertions();
   /// @}
 
   /// Set the debug location to \p DL for all the next build instructions.
-  void setDebugLoc(const DebugLoc &DL) { this->DL = DL; }
+  void setDebugLoc(const DebugLoc &DL) { this->State.DL = DL; }
 
   /// Get the current instruction's debug location.
-  DebugLoc getDebugLoc() { return DL; }
+  DebugLoc getDebugLoc() { return State.DL; }
 
   /// Build and insert <empty> = \p Opcode <empty>.
   /// The insertion point is the one set by the last call of either
@@ -155,20 +174,6 @@
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildInstr(unsigned Opcode);
 
-  /// DAG like Generic method for building arbitrary instructions as above.
-  /// \Opc opcode for the instruction.
-  /// \Ty Either LLT/TargetRegisterClass/unsigned types for Dst
-  /// \Args Variadic list of uses of types(unsigned/MachineInstrBuilder)
-  /// Uses of type MachineInstrBuilder will perform
-  /// getOperand(0).getReg() to convert to register.
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildInstr(unsigned Opc, DstTy &&Ty,
-                                 UseArgsTy &&... Args) {
-    auto MIB = buildInstr(Opc).addDef(getDestFromArg(Ty));
-    addUsesFromArgs(MIB, std::forward<UseArgsTy>(Args)...);
-    return MIB;
-  }
-
   /// Build but don't insert <empty> = \p Opcode <empty>.
   ///
   /// \pre setMF, setBasicBlock or setMI  must have been called.
@@ -226,59 +231,6 @@
   /// \return a MachineInstrBuilder for the newly created instruction.
   MachineInstrBuilder buildGlobalValue(unsigned Res, const GlobalValue *GV);
 
-  /// Build and insert \p Res = G_ADD \p Op0, \p Op1
-  ///
-  /// G_ADD sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
-  /// truncated to their width.
-  ///
-  /// \pre setBasicBlock or setMI must have been called.
-  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
-  ///      with the same (scalar or vector) type).
-  ///
-  /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildAdd(unsigned Res, unsigned Op0,
-                               unsigned Op1);
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildAdd(DstTy &&Ty, UseArgsTy &&... UseArgs) {
-    unsigned Res = getDestFromArg(Ty);
-    return buildAdd(Res, (getRegFromArg(UseArgs))...);
-  }
-
-  /// Build and insert \p Res = G_SUB \p Op0, \p Op1
-  ///
-  /// G_SUB sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
-  /// truncated to their width.
-  ///
-  /// \pre setBasicBlock or setMI must have been called.
-  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
-  ///      with the same (scalar or vector) type).
-  ///
-  /// \return a MachineInstrBuilder for the newly created instruction.
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildSub(DstTy &&Ty, UseArgsTy &&... UseArgs) {
-    unsigned Res = getDestFromArg(Ty);
-    return buildSub(Res, (getRegFromArg(UseArgs))...);
-  }
-  MachineInstrBuilder buildSub(unsigned Res, unsigned Op0,
-                               unsigned Op1);
-
-  /// Build and insert \p Res = G_MUL \p Op0, \p Op1
-  ///
-  /// G_MUL sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
-  /// truncated to their width.
-  ///
-  /// \pre setBasicBlock or setMI must have been called.
-  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
-  ///      with the same (scalar or vector) type).
-  ///
-  /// \return a MachineInstrBuilder for the newly created instruction.
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildMul(DstTy &&Ty, UseArgsTy &&... UseArgs) {
-    unsigned Res = getDestFromArg(Ty);
-    return buildMul(Res, (getRegFromArg(UseArgs))...);
-  }
-  MachineInstrBuilder buildMul(unsigned Res, unsigned Op0,
-                               unsigned Op1);
 
   /// Build and insert \p Res = G_GEP \p Op0, \p Op1
   ///
@@ -347,38 +299,6 @@
   MachineInstrBuilder buildUAdde(unsigned Res, unsigned CarryOut, unsigned Op0,
                                  unsigned Op1, unsigned CarryIn);
 
-  /// Build and insert \p Res = G_AND \p Op0, \p Op1
-  ///
-  /// G_AND sets \p Res to the bitwise and of integer parameters \p Op0 and \p
-  /// Op1.
-  ///
-  /// \pre setBasicBlock or setMI must have been called.
-  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
-  ///      with the same (scalar or vector) type).
-  ///
-  /// \return a MachineInstrBuilder for the newly created instruction.
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildAnd(DstTy &&Dst, UseArgsTy &&... UseArgs) {
-    return buildAnd(getDestFromArg(Dst), getRegFromArg(UseArgs)...);
-  }
-  MachineInstrBuilder buildAnd(unsigned Res, unsigned Op0,
-                               unsigned Op1);
-
-  /// Build and insert \p Res = G_OR \p Op0, \p Op1
-  ///
-  /// G_OR sets \p Res to the bitwise or of integer parameters \p Op0 and \p
-  /// Op1.
-  ///
-  /// \pre setBasicBlock or setMI must have been called.
-  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
-  ///      with the same (scalar or vector) type).
-  ///
-  /// \return a MachineInstrBuilder for the newly created instruction.
-  template <typename DstTy, typename... UseArgsTy>
-  MachineInstrBuilder buildOr(DstTy &&Dst, UseArgsTy &&... UseArgs) {
-    return buildOr(getDestFromArg(Dst), getRegFromArg(UseArgs)...);
-  }
-  MachineInstrBuilder buildOr(unsigned Res, unsigned Op0, unsigned Op1);
 
   /// Build and insert \p Res = G_ANYEXT \p Op0
   ///
@@ -504,7 +424,7 @@
   /// \pre setBasicBlock or setMI must have been called.
   ///
   /// \return a MachineInstrBuilder for the newly created instruction.
-  MachineInstrBuilder buildBr(MachineBasicBlock &BB);
+  MachineInstrBuilder buildBr(MachineBasicBlock &Dest);
 
   /// Build and insert G_BRCOND \p Tst, \p Dest
   ///
@@ -518,7 +438,7 @@
   ///      depend on bit 0 (for now).
   ///
   /// \return The newly created instruction.
-  MachineInstrBuilder buildBrCond(unsigned Tst, MachineBasicBlock &BB);
+  MachineInstrBuilder buildBrCond(unsigned Tst, MachineBasicBlock &Dest);
 
   /// Build and insert G_BRINDIRECT \p Tgt
   ///
@@ -602,6 +522,18 @@
   MachineInstrBuilder buildLoad(unsigned Res, unsigned Addr,
                                 MachineMemOperand &MMO);
 
+  /// Build and insert `Res = <opcode> Addr, MMO`.
+  ///
+  /// Loads the value stored at \p Addr. Puts the result in \p Res.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildLoadInstr(unsigned Opcode, unsigned Res,
+                                     unsigned Addr, MachineMemOperand &MMO);
+
   /// Build and insert `G_STORE Val, Addr, MMO`.
   ///
   /// Stores the value \p Val to \p Addr.
@@ -626,7 +558,7 @@
   template <typename DstType> MachineInstrBuilder buildUndef(DstType &&Res) {
     return buildUndef(getDestFromArg(Res));
   }
-  MachineInstrBuilder buildUndef(unsigned Dst);
+  MachineInstrBuilder buildUndef(unsigned Res);
 
   /// Build and insert instructions to put \p Ops together at the specified p
   /// Indices to form a larger register.
@@ -785,7 +717,28 @@
   MachineInstrBuilder buildExtractVectorElement(unsigned Res, unsigned Val,
                                                 unsigned Idx);
 
-  /// Build and insert `OldValRes = G_ATOMIC_CMPXCHG Addr, CmpVal, NewVal,
+  /// Build and insert `OldValRes<def>, SuccessRes<def> =
+  /// G_ATOMIC_CMPXCHG_WITH_SUCCESS Addr, CmpVal, NewVal, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with \p NewVal if it is currently
+  /// \p CmpVal otherwise leaves it unchanged. Puts the original value from \p
+  /// Addr in \p Res, along with an s1 indicating whether it was replaced.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register of scalar type.
+  /// \pre \p SuccessRes must be a generic virtual register of scalar type. It
+  ///      will be assigned 0 on failure and 1 on success.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, \p CmpVal, and \p NewVal must be generic virtual
+  ///      registers of the same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder
+  buildAtomicCmpXchgWithSuccess(unsigned OldValRes, unsigned SuccessRes,
+                                unsigned Addr, unsigned CmpVal, unsigned NewVal,
+                                MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMIC_CMPXCHG Addr, CmpVal, NewVal,
   /// MMO`.
   ///
   /// Atomically replace the value at \p Addr with \p NewVal if it is currently
@@ -802,6 +755,338 @@
   MachineInstrBuilder buildAtomicCmpXchg(unsigned OldValRes, unsigned Addr,
                                          unsigned CmpVal, unsigned NewVal,
                                          MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_<Opcode> Addr, Val, MMO`.
+  ///
+  /// Atomically read-modify-update the value at \p Addr with \p Val. Puts the
+  /// original value from \p Addr in \p OldValRes. The modification is
+  /// determined by the opcode.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMW(unsigned Opcode, unsigned OldValRes,
+                                     unsigned Addr, unsigned Val,
+                                     MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_XCHG Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with \p Val. Puts the original
+  /// value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWXchg(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_ADD Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the addition of \p Val and
+  /// the original value. Puts the original value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWAdd(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_SUB Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the subtraction of \p Val and
+  /// the original value. Puts the original value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWSub(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_AND Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the bitwise and of \p Val and
+  /// the original value. Puts the original value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWAnd(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_NAND Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the bitwise nand of \p Val
+  /// and the original value. Puts the original value from \p Addr in \p
+  /// OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWNand(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_OR Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the bitwise or of \p Val and
+  /// the original value. Puts the original value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWOr(unsigned OldValRes, unsigned Addr,
+                                       unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_XOR Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the bitwise xor of \p Val and
+  /// the original value. Puts the original value from \p Addr in \p OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWXor(unsigned OldValRes, unsigned Addr,
+                                        unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_MAX Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the signed maximum of \p
+  /// Val and the original value. Puts the original value from \p Addr in \p
+  /// OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWMax(unsigned OldValRes, unsigned Addr,
+                                        unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_MIN Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the signed minimum of \p
+  /// Val and the original value. Puts the original value from \p Addr in \p
+  /// OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWMin(unsigned OldValRes, unsigned Addr,
+                                        unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_UMAX Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the unsigned maximum of \p
+  /// Val and the original value. Puts the original value from \p Addr in \p
+  /// OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWUmax(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert `OldValRes<def> = G_ATOMICRMW_UMIN Addr, Val, MMO`.
+  ///
+  /// Atomically replace the value at \p Addr with the unsigned minimum of \p
+  /// Val and the original value. Puts the original value from \p Addr in \p
+  /// OldValRes.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p OldValRes must be a generic virtual register.
+  /// \pre \p Addr must be a generic virtual register with pointer type.
+  /// \pre \p OldValRes, and \p Val must be generic virtual registers of the
+  ///      same type.
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildAtomicRMWUmin(unsigned OldValRes, unsigned Addr,
+                                         unsigned Val, MachineMemOperand &MMO);
+
+  /// Build and insert \p Res = G_BLOCK_ADDR \p BA
+  ///
+  /// G_BLOCK_ADDR computes the address of a basic block.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res must be a generic virtual register of a pointer type.
+  ///
+  /// \return The newly created instruction.
+  MachineInstrBuilder buildBlockAddress(unsigned Res, const BlockAddress *BA);
+};
+
+/// A CRTP class that contains methods for building instructions that can
+/// be constant folded. MachineIRBuilders that want to inherit from this will
+/// need to implement buildBinaryOp (for constant folding binary ops).
+/// Alternatively, they can implement buildInstr(Opc, Dst, Uses...) to perform
+/// additional folding for Opc.
+template <typename Base>
+class FoldableInstructionsBuilder : public MachineIRBuilderBase {
+  Base &base() { return static_cast<Base &>(*this); }
+
+public:
+  using MachineIRBuilderBase::MachineIRBuilderBase;
+  /// Build and insert \p Res = G_ADD \p Op0, \p Op1
+  ///
+  /// G_ADD sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
+  /// truncated to their width.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
+  ///      with the same (scalar or vector) type).
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+
+  MachineInstrBuilder buildAdd(unsigned Dst, unsigned Src0, unsigned Src1) {
+    return base().buildBinaryOp(TargetOpcode::G_ADD, Dst, Src0, Src1);
+  }
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildAdd(DstTy &&Ty, UseArgsTy &&... UseArgs) {
+    unsigned Res = base().getDestFromArg(Ty);
+    return base().buildAdd(Res, (base().getRegFromArg(UseArgs))...);
+  }
+
+  /// Build and insert \p Res = G_SUB \p Op0, \p Op1
+  ///
+  /// G_SUB sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
+  /// truncated to their width.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
+  ///      with the same (scalar or vector) type).
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+
+  MachineInstrBuilder buildSub(unsigned Dst, unsigned Src0, unsigned Src1) {
+    return base().buildBinaryOp(TargetOpcode::G_SUB, Dst, Src0, Src1);
+  }
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildSub(DstTy &&Ty, UseArgsTy &&... UseArgs) {
+    unsigned Res = base().getDestFromArg(Ty);
+    return base().buildSub(Res, (base().getRegFromArg(UseArgs))...);
+  }
+
+  /// Build and insert \p Res = G_MUL \p Op0, \p Op1
+  ///
+  /// G_MUL sets \p Res to the sum of integer parameters \p Op0 and \p Op1,
+  /// truncated to their width.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
+  ///      with the same (scalar or vector) type).
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildMul(unsigned Dst, unsigned Src0, unsigned Src1) {
+    return base().buildBinaryOp(TargetOpcode::G_MUL, Dst, Src0, Src1);
+  }
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildMul(DstTy &&Ty, UseArgsTy &&... UseArgs) {
+    unsigned Res = base().getDestFromArg(Ty);
+    return base().buildMul(Res, (base().getRegFromArg(UseArgs))...);
+  }
+
+  /// Build and insert \p Res = G_AND \p Op0, \p Op1
+  ///
+  /// G_AND sets \p Res to the bitwise and of integer parameters \p Op0 and \p
+  /// Op1.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
+  ///      with the same (scalar or vector) type).
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+
+  MachineInstrBuilder buildAnd(unsigned Dst, unsigned Src0, unsigned Src1) {
+    return base().buildBinaryOp(TargetOpcode::G_AND, Dst, Src0, Src1);
+  }
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildAnd(DstTy &&Ty, UseArgsTy &&... UseArgs) {
+    unsigned Res = base().getDestFromArg(Ty);
+    return base().buildAnd(Res, (base().getRegFromArg(UseArgs))...);
+  }
+
+  /// Build and insert \p Res = G_OR \p Op0, \p Op1
+  ///
+  /// G_OR sets \p Res to the bitwise or of integer parameters \p Op0 and \p
+  /// Op1.
+  ///
+  /// \pre setBasicBlock or setMI must have been called.
+  /// \pre \p Res, \p Op0 and \p Op1 must be generic virtual registers
+  ///      with the same (scalar or vector) type).
+  ///
+  /// \return a MachineInstrBuilder for the newly created instruction.
+  MachineInstrBuilder buildOr(unsigned Dst, unsigned Src0, unsigned Src1) {
+    return base().buildBinaryOp(TargetOpcode::G_OR, Dst, Src0, Src1);
+  }
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildOr(DstTy &&Ty, UseArgsTy &&... UseArgs) {
+    unsigned Res = base().getDestFromArg(Ty);
+    return base().buildOr(Res, (base().getRegFromArg(UseArgs))...);
+  }
+};
+
+class MachineIRBuilder : public FoldableInstructionsBuilder<MachineIRBuilder> {
+public:
+  using FoldableInstructionsBuilder<
+      MachineIRBuilder>::FoldableInstructionsBuilder;
+  MachineInstrBuilder buildBinaryOp(unsigned Opcode, unsigned Dst,
+                                    unsigned Src0, unsigned Src1) {
+    validateBinaryOp(Dst, Src0, Src1);
+    return buildInstr(Opcode).addDef(Dst).addUse(Src0).addUse(Src1);
+  }
+  using FoldableInstructionsBuilder<MachineIRBuilder>::buildInstr;
+  /// DAG like Generic method for building arbitrary instructions as above.
+  /// \Opc opcode for the instruction.
+  /// \Ty Either LLT/TargetRegisterClass/unsigned types for Dst
+  /// \Args Variadic list of uses of types(unsigned/MachineInstrBuilder)
+  /// Uses of type MachineInstrBuilder will perform
+  /// getOperand(0).getReg() to convert to register.
+  template <typename DstTy, typename... UseArgsTy>
+  MachineInstrBuilder buildInstr(unsigned Opc, DstTy &&Ty,
+                                 UseArgsTy &&... Args) {
+    auto MIB = buildInstr(Opc).addDef(getDestFromArg(Ty));
+    addUsesFromArgs(MIB, std::forward<UseArgsTy>(Args)...);
+    return MIB;
+  }
 };
 
 } // End namespace llvm.
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBank.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBank.h
index 5d75842..d5612e1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBank.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/RegisterBank.h
@@ -42,7 +42,7 @@
 
 public:
   RegisterBank(unsigned ID, const char *Name, unsigned Size,
-               const uint32_t *ContainedRegClasses, unsigned NumRegClasses);
+               const uint32_t *CoveredClasses, unsigned NumRegClasses);
 
   /// Get the identifier of this register bank.
   unsigned getID() const { return ID; }
diff --git a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
index 837035f..51e3a27 100644
--- a/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
+++ b/linux-x64/clang/include/llvm/CodeGen/GlobalISel/Utils.h
@@ -19,6 +19,7 @@
 
 namespace llvm {
 
+class AnalysisUsage;
 class MachineFunction;
 class MachineInstr;
 class MachineOperand;
@@ -102,5 +103,10 @@
 
 /// Returns an APFloat from Val converted to the appropriate size.
 APFloat getAPFloatFromSize(double Val, unsigned Size);
+
+/// Modify analysis usage so it preserves passes required for the SelectionDAG
+/// fallback.
+void getSelectionDAGFallbackAnalysisUsage(AnalysisUsage &AU);
+
 } // End namespace llvm.
 #endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h b/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
index ea94871..80bd796 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ISDOpcodes.h
@@ -377,6 +377,8 @@
     /// When the 1st operand is a vector, the shift amount must be in the same
     /// type. (TLI.getShiftAmountTy() will return the same type when the input
     /// type is a vector.)
+    /// For rotates, the shift amount is treated as an unsigned amount modulo
+    /// the element size of the first operand.
     SHL, SRA, SRL, ROTL, ROTR,
 
     /// Byte Swap and Counting operators.
@@ -412,19 +414,11 @@
     /// then the result type must also be a vector type.
     SETCC,
 
-    /// Like SetCC, ops #0 and #1 are the LHS and RHS operands to compare, and
-    /// op #2 is a *carry value*. This operator checks the result of
-    /// "LHS - RHS - Carry", and can be used to compare two wide integers:
-    /// (setcce lhshi rhshi (subc lhslo rhslo) cc). Only valid for integers.
-    /// FIXME: This node is deprecated in favor of SETCCCARRY.
-    /// It is kept around for now to provide a smooth transition path
-    /// toward the use of SETCCCARRY and will eventually be removed.
-    SETCCE,
-
     /// Like SetCC, ops #0 and #1 are the LHS and RHS operands to compare, but
     /// op #2 is a boolean indicating if there is an incoming carry. This
     /// operator checks the result of "LHS - RHS - Carry", and can be used to
-    /// compare two wide integers: (setcce lhshi rhshi (subc lhslo rhslo) cc).
+    /// compare two wide integers:
+    /// (setcccarry lhshi rhshi (subcarry lhslo rhslo) cc).
     /// Only valid for integers.
     SETCCCARRY,
 
@@ -495,7 +489,8 @@
     ZERO_EXTEND_VECTOR_INREG,
 
     /// FP_TO_[US]INT - Convert a floating point value to a signed or unsigned
-    /// integer.
+    /// integer. These have the same semantics as fptosi and fptoui in IR. If
+    /// the FP value cannot fit in the integer type, the results are undefined.
     FP_TO_SINT,
     FP_TO_UINT,
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/LatencyPriorityQueue.h b/linux-x64/clang/include/llvm/CodeGen/LatencyPriorityQueue.h
index 988e6d6..9b8d83c 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LatencyPriorityQueue.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LatencyPriorityQueue.h
@@ -17,6 +17,7 @@
 #define LLVM_CODEGEN_LATENCYPRIORITYQUEUE_H
 
 #include "llvm/CodeGen/ScheduleDAG.h"
+#include "llvm/Config/llvm-config.h"
 
 namespace llvm {
   class LatencyPriorityQueue;
@@ -26,7 +27,7 @@
     LatencyPriorityQueue *PQ;
     explicit latency_sort(LatencyPriorityQueue *pq) : PQ(pq) {}
 
-    bool operator()(const SUnit* left, const SUnit* right) const;
+    bool operator()(const SUnit* LHS, const SUnit* RHS) const;
   };
 
   class LatencyPriorityQueue : public SchedulingPriorityQueue {
@@ -83,11 +84,15 @@
 
     void remove(SUnit *SU) override;
 
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
+    LLVM_DUMP_METHOD void dump(ScheduleDAG *DAG) const override;
+#endif
+
     // scheduledNode - As nodes are scheduled, we look to see if there are any
     // successor nodes that have a single unscheduled predecessor.  If so, that
     // single predecessor has a higher priority, since scheduling it will make
     // the node available.
-    void scheduledNode(SUnit *Node) override;
+    void scheduledNode(SUnit *SU) override;
 
 private:
     void AdjustPriorityOfUnscheduledPreds(SUnit *SU);
diff --git a/linux-x64/clang/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h b/linux-x64/clang/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h
index 848ee1d..221f16a 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LazyMachineBlockFrequencyInfo.h
@@ -23,7 +23,7 @@
 #include "llvm/CodeGen/MachineLoopInfo.h"
 
 namespace llvm {
-/// \brief This is an alternative analysis pass to MachineBlockFrequencyInfo.
+/// This is an alternative analysis pass to MachineBlockFrequencyInfo.
 /// The difference is that with this pass, the block frequencies are not
 /// computed when the analysis pass is executed but rather when the BFI result
 /// is explicitly requested by the analysis client.
@@ -49,7 +49,7 @@
   /// The function.
   MachineFunction *MF = nullptr;
 
-  /// \brief Calculate MBFI and all other analyses that's not available and
+  /// Calculate MBFI and all other analyses that's not available and
   /// required by BFI.
   MachineBlockFrequencyInfo &calculateIfNotAvailable() const;
 
@@ -58,10 +58,10 @@
 
   LazyMachineBlockFrequencyInfoPass();
 
-  /// \brief Compute and return the block frequencies.
+  /// Compute and return the block frequencies.
   MachineBlockFrequencyInfo &getBFI() { return calculateIfNotAvailable(); }
 
-  /// \brief Compute and return the block frequencies.
+  /// Compute and return the block frequencies.
   const MachineBlockFrequencyInfo &getBFI() const {
     return calculateIfNotAvailable();
   }
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h b/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
index f4fa872..cdf9ad2 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveInterval.h
@@ -326,7 +326,7 @@
     /// createDeadDef - Make sure the range has a value defined at Def.
     /// If one already exists, return it. Otherwise allocate a new value and
     /// add liveness for a dead def.
-    VNInfo *createDeadDef(SlotIndex Def, VNInfo::Allocator &VNInfoAllocator);
+    VNInfo *createDeadDef(SlotIndex Def, VNInfo::Allocator &VNIAlloc);
 
     /// Create a def of value @p VNI. Return @p VNI. If there already exists
     /// a definition at VNI->def, the value defined there must be @p VNI.
@@ -454,7 +454,7 @@
     /// overlapsFrom - Return true if the intersection of the two live ranges
     /// is not empty.  The specified iterator is a hint that we can begin
     /// scanning the Other range starting at I.
-    bool overlapsFrom(const LiveRange &Other, const_iterator I) const;
+    bool overlapsFrom(const LiveRange &Other, const_iterator StartPos) const;
 
     /// Returns true if all segments of the @p Other live range are completely
     /// covered by this live range.
@@ -482,7 +482,7 @@
     /// @p Use, return {nullptr, false}. If there is an "undef" before @p Use,
     /// return {nullptr, true}.
     std::pair<VNInfo*,bool> extendInBlock(ArrayRef<SlotIndex> Undefs,
-        SlotIndex StartIdx, SlotIndex Use);
+        SlotIndex StartIdx, SlotIndex Kill);
 
     /// Simplified version of the above "extendInBlock", which assumes that
     /// no register lanes are undefined by <def,read-undef> operands.
@@ -609,7 +609,7 @@
     void print(raw_ostream &OS) const;
     void dump() const;
 
-    /// \brief Walk the range and assert if any invariants fail to hold.
+    /// Walk the range and assert if any invariants fail to hold.
     ///
     /// Note that this is a no-op when asserts are disabled.
 #ifdef NDEBUG
@@ -791,7 +791,7 @@
     ///    L00E0 and L0010 and the L000F lane into L0007 and L0008. The Mod
     ///    function will be applied to the L0010 and L0008 subranges.
     void refineSubRanges(BumpPtrAllocator &Allocator, LaneBitmask LaneMask,
-                         std::function<void(LiveInterval::SubRange&)> Mod);
+                         std::function<void(LiveInterval::SubRange&)> Apply);
 
     bool operator<(const LiveInterval& other) const {
       const SlotIndex &thisIndex = beginIndex();
@@ -802,7 +802,7 @@
     void print(raw_ostream &OS) const;
     void dump() const;
 
-    /// \brief Walks the interval and assert if any invariants fail to hold.
+    /// Walks the interval and assert if any invariants fail to hold.
     ///
     /// Note that this is a no-op when asserts are disabled.
 #ifdef NDEBUG
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveIntervalUnion.h b/linux-x64/clang/include/llvm/CodeGen/LiveIntervalUnion.h
index b922e54..9e2799b 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveIntervalUnion.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveIntervalUnion.h
@@ -154,7 +154,7 @@
         unsigned MaxInterferingRegs = std::numeric_limits<unsigned>::max());
 
     // Was this virtual register visited during collectInterferingVRegs?
-    bool isSeenInterference(LiveInterval *VReg) const;
+    bool isSeenInterference(LiveInterval *VirtReg) const;
 
     // Did collectInterferingVRegs collect all interferences?
     bool seenAllInterferences() const { return SeenAllInterferences; }
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h b/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
index 1150f3c..291a07a 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveIntervals.h
@@ -105,7 +105,7 @@
     /// Calculate the spill weight to assign to a single instruction.
     static float getSpillWeight(bool isDef, bool isUse,
                                 const MachineBlockFrequencyInfo *MBFI,
-                                const MachineInstr &Instr);
+                                const MachineInstr &MI);
 
     /// Calculate the spill weight to assign to a single instruction.
     static float getSpillWeight(bool isDef, bool isUse,
@@ -462,6 +462,10 @@
     void computeRegUnitRange(LiveRange&, unsigned Unit);
     void computeVirtRegInterval(LiveInterval&);
 
+    using ShrinkToUsesWorkList = SmallVector<std::pair<SlotIndex, VNInfo*>, 16>;
+    void extendSegmentsToUses(LiveRange &Segments,
+                              ShrinkToUsesWorkList &WorkList, unsigned Reg,
+                              LaneBitmask LaneMask);
 
     /// Helper function for repairIntervalsInRange(), walks backwards and
     /// creates/modifies live segments in \p LR to match the operands found.
diff --git a/linux-x64/clang/include/llvm/CodeGen/LivePhysRegs.h b/linux-x64/clang/include/llvm/CodeGen/LivePhysRegs.h
index f9aab0d..301a450 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LivePhysRegs.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LivePhysRegs.h
@@ -44,7 +44,7 @@
 class MachineRegisterInfo;
 class raw_ostream;
 
-/// \brief A set of physical registers with utility functions to track liveness
+/// A set of physical registers with utility functions to track liveness
 /// when walking backward/forward through a basic block.
 class LivePhysRegs {
   const TargetRegisterInfo *TRI = nullptr;
@@ -84,7 +84,7 @@
       LiveRegs.insert(*SubRegs);
   }
 
-  /// \brief Removes a physical register, all its sub-registers, and all its
+  /// Removes a physical register, all its sub-registers, and all its
   /// super-registers from the set.
   void removeReg(unsigned Reg) {
     assert(TRI && "LivePhysRegs is not initialized.");
@@ -98,7 +98,7 @@
         SmallVectorImpl<std::pair<unsigned, const MachineOperand*>> *Clobbers =
         nullptr);
 
-  /// \brief Returns true if register \p Reg is contained in the set. This also
+  /// Returns true if register \p Reg is contained in the set. This also
   /// works if only the super register of \p Reg has been defined, because
   /// addReg() always adds all sub-registers to the set as well.
   /// Note: Returns false if just some sub registers are live, use available()
@@ -155,7 +155,7 @@
   void dump() const;
 
 private:
-  /// \brief Adds live-in registers from basic block \p MBB, taking associated
+  /// Adds live-in registers from basic block \p MBB, taking associated
   /// lane masks into consideration.
   void addBlockLiveIns(const MachineBasicBlock &MBB);
 
@@ -169,7 +169,7 @@
   return OS;
 }
 
-/// \brief Computes registers live-in to \p MBB assuming all of its successors
+/// Computes registers live-in to \p MBB assuming all of its successors
 /// live-in lists are up-to-date. Puts the result into the given LivePhysReg
 /// instance \p LiveRegs.
 void computeLiveIns(LivePhysRegs &LiveRegs, const MachineBasicBlock &MBB);
@@ -185,6 +185,13 @@
 void computeAndAddLiveIns(LivePhysRegs &LiveRegs,
                           MachineBasicBlock &MBB);
 
+/// Convenience function for recomputing live-in's for \p MBB.
+static inline void recomputeLiveIns(MachineBasicBlock &MBB) {
+  LivePhysRegs LPR;
+  MBB.clearLiveIns();
+  computeAndAddLiveIns(LPR, MBB);
+}
+
 } // end namespace llvm
 
 #endif // LLVM_CODEGEN_LIVEPHYSREGS_H
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveRangeEdit.h b/linux-x64/clang/include/llvm/CodeGen/LiveRangeEdit.h
index 82b1f0b..5383029 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveRangeEdit.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveRangeEdit.h
@@ -117,7 +117,7 @@
   /// registers are created.
   void MRI_NoteNewVirtualRegister(unsigned VReg) override;
 
-  /// \brief Check if MachineOperand \p MO is a last use/kill either in the
+  /// Check if MachineOperand \p MO is a last use/kill either in the
   /// main live range of \p LI or in one of the matching subregister ranges.
   bool useIsKill(const LiveInterval &LI, const MachineOperand &MO) const;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/LiveRegUnits.h b/linux-x64/clang/include/llvm/CodeGen/LiveRegUnits.h
index dc4956d..2495459 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LiveRegUnits.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LiveRegUnits.h
@@ -16,6 +16,7 @@
 #define LLVM_CODEGEN_LIVEREGUNITS_H
 
 #include "llvm/ADT/BitVector.h"
+#include "llvm/CodeGen/MachineRegisterInfo.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
 #include "llvm/MC/LaneBitmask.h"
 #include "llvm/MC/MCRegisterInfo.h"
@@ -40,6 +41,36 @@
     init(TRI);
   }
 
+  /// For a machine instruction \p MI, adds all register units used in
+  /// \p UsedRegUnits and defined or clobbered in \p ModifiedRegUnits. This is
+  /// useful when walking over a range of instructions to track registers
+  /// used or defined seperately.
+  static void accumulateUsedDefed(const MachineInstr &MI,
+                                  LiveRegUnits &ModifiedRegUnits,
+                                  LiveRegUnits &UsedRegUnits,
+                                  const TargetRegisterInfo *TRI) {
+    for (ConstMIBundleOperands O(MI); O.isValid(); ++O) {
+      if (O->isRegMask())
+        ModifiedRegUnits.addRegsInMask(O->getRegMask());
+      if (!O->isReg())
+        continue;
+      unsigned Reg = O->getReg();
+      if (!TargetRegisterInfo::isPhysicalRegister(Reg))
+        continue;
+      if (O->isDef()) {
+        // Some architectures (e.g. AArch64 XZR/WZR) have registers that are
+        // constant and may be used as destinations to indicate the generated
+        // value is discarded. No need to track such case as a def.
+        if (!TRI->isConstantPhysReg(Reg))
+          ModifiedRegUnits.addReg(Reg);
+      } else {
+        assert(O->isUse() && "Reg operand not a def and not a use");
+        UsedRegUnits.addReg(Reg);
+      }
+    }
+    return;
+  }
+
   /// Initialize and clear the set.
   void init(const TargetRegisterInfo &TRI) {
     this->TRI = &TRI;
@@ -59,7 +90,7 @@
       Units.set(*Unit);
   }
 
-  /// \brief Adds register units covered by physical register \p Reg that are
+  /// Adds register units covered by physical register \p Reg that are
   /// part of the lanemask \p Mask.
   void addRegMasked(unsigned Reg, LaneBitmask Mask) {
     for (MCRegUnitMaskIterator Unit(Reg, TRI); Unit.isValid(); ++Unit) {
diff --git a/linux-x64/clang/include/llvm/CodeGen/LoopTraversal.h b/linux-x64/clang/include/llvm/CodeGen/LoopTraversal.h
index a816f6d..750da01 100644
--- a/linux-x64/clang/include/llvm/CodeGen/LoopTraversal.h
+++ b/linux-x64/clang/include/llvm/CodeGen/LoopTraversal.h
@@ -101,7 +101,7 @@
   };
   LoopTraversal() {}
 
-  /// \brief Identifies basic blocks that are part of loops and should to be
+  /// Identifies basic blocks that are part of loops and should to be
   ///  visited twice and returns efficient traversal order for all the blocks.
   typedef SmallVector<TraversedMBBInfo, 4> TraversalOrder;
   TraversalOrder traverse(MachineFunction &MF);
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIRParser.h b/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIRParser.h
index b631a8c..e199a1f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIRParser.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRParser/MIRParser.h
@@ -45,7 +45,7 @@
   /// \returns nullptr if a parsing error occurred.
   std::unique_ptr<Module> parseIRModule();
 
-  /// \brief Parses MachineFunctions in the MIR file and add them to the given
+  /// Parses MachineFunctions in the MIR file and add them to the given
   /// MachineModuleInfo \p MMI.
   ///
   /// \returns true if an error occurred.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h b/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
index c73adc3..078c4b2 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRPrinter.h
@@ -38,7 +38,7 @@
 /// this funciton and the parser will use this function to construct a list if
 /// it is missing.
 void guessSuccessors(const MachineBasicBlock &MBB,
-                     SmallVectorImpl<MachineBasicBlock*> &Successors,
+                     SmallVectorImpl<MachineBasicBlock*> &Result,
                      bool &IsFallthrough);
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h b/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
index b75f9c8..7f46406 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MIRYamlMapping.h
@@ -258,11 +258,11 @@
     YamlIO.mapOptional("callee-saved-restored", Object.CalleeSavedRestored,
                        true);
     YamlIO.mapOptional("local-offset", Object.LocalOffset, Optional<int64_t>());
-    YamlIO.mapOptional("di-variable", Object.DebugVar,
+    YamlIO.mapOptional("debug-info-variable", Object.DebugVar,
                        StringValue()); // Don't print it out when it's empty.
-    YamlIO.mapOptional("di-expression", Object.DebugExpr,
+    YamlIO.mapOptional("debug-info-expression", Object.DebugExpr,
                        StringValue()); // Don't print it out when it's empty.
-    YamlIO.mapOptional("di-location", Object.DebugLoc,
+    YamlIO.mapOptional("debug-info-location", Object.DebugLoc,
                        StringValue()); // Don't print it out when it's empty.
   }
 
@@ -283,6 +283,9 @@
   bool IsAliased = false;
   StringValue CalleeSavedRegister;
   bool CalleeSavedRestored = true;
+  StringValue DebugVar;
+  StringValue DebugExpr;
+  StringValue DebugLoc;
 
   bool operator==(const FixedMachineStackObject &Other) const {
     return ID == Other.ID && Type == Other.Type && Offset == Other.Offset &&
@@ -290,7 +293,9 @@
            StackID == Other.StackID &&
            IsImmutable == Other.IsImmutable && IsAliased == Other.IsAliased &&
            CalleeSavedRegister == Other.CalleeSavedRegister &&
-           CalleeSavedRestored == Other.CalleeSavedRestored;
+           CalleeSavedRestored == Other.CalleeSavedRestored &&
+           DebugVar == Other.DebugVar && DebugExpr == Other.DebugExpr
+           && DebugLoc == Other.DebugLoc;
   }
 };
 
@@ -321,6 +326,12 @@
                        StringValue()); // Don't print it out when it's empty.
     YamlIO.mapOptional("callee-saved-restored", Object.CalleeSavedRestored,
                      true);
+    YamlIO.mapOptional("debug-info-variable", Object.DebugVar,
+                       StringValue()); // Don't print it out when it's empty.
+    YamlIO.mapOptional("debug-info-expression", Object.DebugExpr,
+                       StringValue()); // Don't print it out when it's empty.
+    YamlIO.mapOptional("debug-info-location", Object.DebugLoc,
+                       StringValue()); // Don't print it out when it's empty.
   }
 
   static const bool flow = true;
@@ -417,6 +428,7 @@
   bool HasOpaqueSPAdjustment = false;
   bool HasVAStart = false;
   bool HasMustTailInVarArgFunc = false;
+  unsigned LocalFrameSize = 0;
   StringValue SavePoint;
   StringValue RestorePoint;
 
@@ -434,6 +446,7 @@
            HasOpaqueSPAdjustment == Other.HasOpaqueSPAdjustment &&
            HasVAStart == Other.HasVAStart &&
            HasMustTailInVarArgFunc == Other.HasMustTailInVarArgFunc &&
+           LocalFrameSize == Other.LocalFrameSize &&
            SavePoint == Other.SavePoint && RestorePoint == Other.RestorePoint;
   }
 };
@@ -457,6 +470,7 @@
     YamlIO.mapOptional("hasVAStart", MFI.HasVAStart, false);
     YamlIO.mapOptional("hasMustTailInVarArgFunc", MFI.HasMustTailInVarArgFunc,
                        false);
+    YamlIO.mapOptional("localFrameSize", MFI.LocalFrameSize, (unsigned)0);
     YamlIO.mapOptional("savePoint", MFI.SavePoint,
                        StringValue()); // Don't print it out when it's empty.
     YamlIO.mapOptional("restorePoint", MFI.RestorePoint,
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachORelocation.h b/linux-x64/clang/include/llvm/CodeGen/MachORelocation.h
index 8c9b7a8..cbb4969 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachORelocation.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachORelocation.h
@@ -27,15 +27,15 @@
     uint32_t r_symbolnum; // symbol index if r_extern == 1 else section index
     bool     r_pcrel;     // was relocated pc-relative already
     uint8_t  r_length;    // length = 2 ^ r_length
-    bool     r_extern;    // 
+    bool     r_extern;    //
     uint8_t  r_type;      // if not 0, machine-specific relocation type.
     bool     r_scattered; // 1 = scattered, 0 = non-scattered
     int32_t  r_value;     // the value the item to be relocated is referring
                           // to.
-  public:      
+  public:
     uint32_t getPackedFields() const {
       if (r_scattered)
-        return (1 << 31) | (r_pcrel << 30) | ((r_length & 3) << 28) | 
+        return (1 << 31) | (r_pcrel << 30) | ((r_length & 3) << 28) |
           ((r_type & 15) << 24) | (r_address & 0x00FFFFFF);
       else
         return (r_symbolnum << 8) | (r_pcrel << 7) | ((r_length & 3) << 5) |
@@ -45,8 +45,8 @@
     uint32_t getRawAddress() const { return r_address; }
 
     MachORelocation(uint32_t addr, uint32_t index, bool pcrel, uint8_t len,
-                    bool ext, uint8_t type, bool scattered = false, 
-                    int32_t value = 0) : 
+                    bool ext, uint8_t type, bool scattered = false,
+                    int32_t value = 0) :
       r_address(addr), r_symbolnum(index), r_pcrel(pcrel), r_length(len),
       r_extern(ext), r_type(type), r_scattered(scattered), r_value(value) {}
   };
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h b/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
index f3130b6..ace33ef 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineBasicBlock.h
@@ -58,7 +58,7 @@
 public:
   void addNodeToList(MachineInstr *N);
   void removeNodeFromList(MachineInstr *N);
-  void transferNodesFromList(ilist_traits &OldList, instr_iterator First,
+  void transferNodesFromList(ilist_traits &FromList, instr_iterator First,
                              instr_iterator Last);
   void deleteNode(MachineInstr *MI);
 };
@@ -115,13 +115,18 @@
   /// branch.
   bool AddressTaken = false;
 
+  /// Indicate that this basic block is the entry block of an EH scope, i.e.,
+  /// the block that used to have a catchpad or cleanuppad instruction in the
+  /// LLVM IR.
+  bool IsEHScopeEntry = false;
+
   /// Indicate that this basic block is the entry block of an EH funclet.
   bool IsEHFuncletEntry = false;
 
   /// Indicate that this basic block is the entry block of a cleanup funclet.
   bool IsCleanupFuncletEntry = false;
 
-  /// \brief since getSymbol is a relatively heavy-weight operation, the symbol
+  /// since getSymbol is a relatively heavy-weight operation, the symbol
   /// is only computed once and is cached.
   mutable MCSymbol *CachedMCSymbol = nullptr;
 
@@ -375,6 +380,14 @@
 
   bool hasEHPadSuccessor() const;
 
+  /// Returns true if this is the entry block of an EH scope, i.e., the block
+  /// that used to have a catchpad or cleanuppad instruction in the LLVM IR.
+  bool isEHScopeEntry() const { return IsEHScopeEntry; }
+
+  /// Indicates if this is the entry block of an EH scope, i.e., the block that
+  /// that used to have a catchpad or cleanuppad instruction in the LLVM IR.
+  void setIsEHScopeEntry(bool V = true) { IsEHScopeEntry = V; }
+
   /// Returns true if this is the entry block of an EH funclet.
   bool isEHFuncletEntry() const { return IsEHFuncletEntry; }
 
@@ -464,6 +477,11 @@
   /// probabilities may need to be normalized.
   void copySuccessor(MachineBasicBlock *Orig, succ_iterator I);
 
+  /// Split the old successor into old plus new and updates the probability
+  /// info.
+  void splitSuccessor(MachineBasicBlock *Old, MachineBasicBlock *New,
+                      bool NormalizeSuccProbs = false);
+
   /// Transfers all the successors from MBB to this machine basic block (i.e.,
   /// copies all the successors FromMBB and remove all the successors from
   /// FromMBB).
@@ -700,7 +718,7 @@
                             bool IsCond);
 
   /// Find the next valid DebugLoc starting at MBBI, skipping any DBG_VALUE
-  /// instructions.  Return UnknownLoc if there is none.
+  /// and DBG_LABEL instructions.  Return UnknownLoc if there is none.
   DebugLoc findDebugLoc(instr_iterator MBBI);
   DebugLoc findDebugLoc(iterator MBBI) {
     return findDebugLoc(MBBI.getInstrIterator());
@@ -897,7 +915,7 @@
 /// const_instr_iterator} and the respective reverse iterators.
 template<typename IterT>
 inline IterT skipDebugInstructionsForward(IterT It, IterT End) {
-  while (It != End && It->isDebugValue())
+  while (It != End && It->isDebugInstr())
     It++;
   return It;
 }
@@ -908,7 +926,7 @@
 /// const_instr_iterator} and the respective reverse iterators.
 template<class IterT>
 inline IterT skipDebugInstructionsBackward(IterT It, IterT Begin) {
-  while (It != Begin && It->isDebugValue())
+  while (It != Begin && It->isDebugInstr())
     It--;
   return It;
 }
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineConstantPool.h b/linux-x64/clang/include/llvm/CodeGen/MachineConstantPool.h
index 1705a0f..b0b5420 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineConstantPool.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineConstantPool.h
@@ -63,7 +63,7 @@
 /// This class is a data container for one entry in a MachineConstantPool.
 /// It contains a pointer to the value and an offset from the start of
 /// the constant pool.
-/// @brief An entry in a MachineConstantPool
+/// An entry in a MachineConstantPool
 class MachineConstantPoolEntry {
 public:
   /// The constant itself.
@@ -117,7 +117,7 @@
 /// the use of MO_ConstantPoolIndex values.  When emitting assembly or machine
 /// code, these virtual address references are converted to refer to the
 /// address of the function constant pool values.
-/// @brief The machine constant pool.
+/// The machine constant pool.
 class MachineConstantPool {
   unsigned PoolAlignment;       ///< The alignment for the pool.
   std::vector<MachineConstantPoolEntry> Constants; ///< The pool of constants.
@@ -128,7 +128,7 @@
   const DataLayout &getDataLayout() const { return DL; }
 
 public:
-  /// @brief The only constructor.
+  /// The only constructor.
   explicit MachineConstantPool(const DataLayout &DL)
       : PoolAlignment(1), DL(DL) {}
   ~MachineConstantPool();
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineDominanceFrontier.h b/linux-x64/clang/include/llvm/CodeGen/MachineDominanceFrontier.h
index ffbcc62..75d75bc 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineDominanceFrontier.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineDominanceFrontier.h
@@ -37,9 +37,9 @@
 
  MachineDominanceFrontier();
 
- DominanceFrontierBase<MachineBasicBlock, false> &getBase() { return Base; }
+ ForwardDominanceFrontierBase<MachineBasicBlock> &getBase() { return Base; }
 
-  const SmallVectorImpl<MachineBasicBlock *> &getRoots() const {
+ const SmallVectorImpl<MachineBasicBlock *> &getRoots() const {
    return Base.getRoots();
   }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineDominators.h b/linux-x64/clang/include/llvm/CodeGen/MachineDominators.h
index af642d9..e3d3d16 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineDominators.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineDominators.h
@@ -45,7 +45,7 @@
 /// compute a normal dominator tree.
 ///
 class MachineDominatorTree : public MachineFunctionPass {
-  /// \brief Helper structure used to hold all the basic blocks
+  /// Helper structure used to hold all the basic blocks
   /// involved in the split of a critical edge.
   struct CriticalEdge {
     MachineBasicBlock *FromBB;
@@ -53,12 +53,12 @@
     MachineBasicBlock *NewBB;
   };
 
-  /// \brief Pile up all the critical edges to be split.
+  /// Pile up all the critical edges to be split.
   /// The splitting of a critical edge is local and thus, it is possible
   /// to apply several of those changes at the same time.
   mutable SmallVector<CriticalEdge, 32> CriticalEdgesToSplit;
 
-  /// \brief Remember all the basic blocks that are inserted during
+  /// Remember all the basic blocks that are inserted during
   /// edge splitting.
   /// Invariant: NewBBs == all the basic blocks contained in the NewBB
   /// field of all the elements of CriticalEdgesToSplit.
@@ -69,7 +69,7 @@
   /// The DominatorTreeBase that is used to compute a normal dominator tree
   std::unique_ptr<DomTreeBase<MachineBasicBlock>> DT;
 
-  /// \brief Apply all the recorded critical edges to the DT.
+  /// Apply all the recorded critical edges to the DT.
   /// This updates the underlying DT information in a way that uses
   /// the fast query path of DT as much as possible.
   ///
@@ -228,7 +228,7 @@
 
   void print(raw_ostream &OS, const Module*) const override;
 
-  /// \brief Record that the critical edge (FromBB, ToBB) has been
+  /// Record that the critical edge (FromBB, ToBB) has been
   /// split with NewBB.
   /// This is best to use this method instead of directly update the
   /// underlying information, because this helps mitigating the
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
index f887517..2d6081f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineFrameInfo.h
@@ -85,9 +85,23 @@
 /// stack offsets of the object, eliminating all MO_FrameIndex operands from
 /// the program.
 ///
-/// @brief Abstract Stack Frame Information
+/// Abstract Stack Frame Information
 class MachineFrameInfo {
+public:
+  /// Stack Smashing Protection (SSP) rules require that vulnerable stack
+  /// allocations are located close the stack protector.
+  enum SSPLayoutKind {
+    SSPLK_None,       ///< Did not trigger a stack protector.  No effect on data
+                      ///< layout.
+    SSPLK_LargeArray, ///< Array or nested array >= SSP-buffer-size.  Closest
+                      ///< to the stack protector.
+    SSPLK_SmallArray, ///< Array or nested array < SSP-buffer-size. 2nd closest
+                      ///< to the stack protector.
+    SSPLK_AddrOf      ///< The address of this allocation is exposed and
+                      ///< triggered protection.  3rd closest to the protector.
+  };
 
+private:
   // Represent a single object allocated on the stack.
   struct StackObject {
     // The offset of this object from the stack pointer on entry to
@@ -123,6 +137,9 @@
     /// necessarily reside in the same contiguous memory block as other stack
     /// objects. Objects with differing stack IDs should not be merged or
     /// replaced substituted for each other.
+    //
+    /// It is assumed a target uses consecutive, increasing stack IDs starting
+    /// from 1.
     uint8_t StackID;
 
     /// If this stack object is originated from an Alloca instruction
@@ -145,12 +162,15 @@
     /// If true, the object has been zero-extended.
     bool isSExt = false;
 
+    uint8_t SSPLayout;
+
     StackObject(uint64_t Size, unsigned Alignment, int64_t SPOffset,
                 bool IsImmutable, bool IsSpillSlot, const AllocaInst *Alloca,
                 bool IsAliased, uint8_t StackID = 0)
       : SPOffset(SPOffset), Size(Size), Alignment(Alignment),
         isImmutable(IsImmutable), isSpillSlot(IsSpillSlot),
-        StackID(StackID), Alloca(Alloca), isAliased(IsAliased) {}
+        StackID(StackID), Alloca(Alloca), isAliased(IsAliased),
+        SSPLayout(SSPLK_None) {}
   };
 
   /// The alignment of the stack.
@@ -485,6 +505,20 @@
     Objects[ObjectIdx+NumFixedObjects].SPOffset = SPOffset;
   }
 
+  SSPLayoutKind getObjectSSPLayout(int ObjectIdx) const {
+    assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
+           "Invalid Object Idx!");
+    return (SSPLayoutKind)Objects[ObjectIdx+NumFixedObjects].SSPLayout;
+  }
+
+  void setObjectSSPLayout(int ObjectIdx, SSPLayoutKind Kind) {
+    assert(unsigned(ObjectIdx+NumFixedObjects) < Objects.size() &&
+           "Invalid Object Idx!");
+    assert(!isDeadObjectIndex(ObjectIdx) &&
+           "Setting SSP layout for a dead object?");
+    Objects[ObjectIdx+NumFixedObjects].SSPLayout = Kind;
+  }
+
   /// Return the number of bytes that must be allocated to hold
   /// all of the fixed size frame objects.  This is only valid after
   /// Prolog/Epilog code insertion has finalized the stack frame layout.
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h b/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
index 7d8b7eb..e8a4d52 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineFunction.h
@@ -73,6 +73,7 @@
 class TargetMachine;
 class TargetRegisterClass;
 class TargetSubtargetInfo;
+struct WasmEHFuncInfo;
 struct WinEHFuncInfo;
 
 template <> struct ilist_alloc_traits<MachineBasicBlock> {
@@ -80,8 +81,8 @@
 };
 
 template <> struct ilist_callback_traits<MachineBasicBlock> {
-  void addNodeToList(MachineBasicBlock* MBB);
-  void removeNodeFromList(MachineBasicBlock* MBB);
+  void addNodeToList(MachineBasicBlock* N);
+  void removeNodeFromList(MachineBasicBlock* N);
 
   template <class Iterator>
   void transferNodesFromList(ilist_callback_traits &OldList, Iterator, Iterator) {
@@ -96,7 +97,7 @@
 struct MachineFunctionInfo {
   virtual ~MachineFunctionInfo();
 
-  /// \brief Factory function: default behavior is to call new using the
+  /// Factory function: default behavior is to call new using the
   /// supplied allocator.
   ///
   /// This function can be overridden in a derive class.
@@ -245,6 +246,10 @@
   // Keep track of jump tables for switch instructions
   MachineJumpTableInfo *JumpTableInfo;
 
+  // Keeps track of Wasm exception handling related data. This will be null for
+  // functions that aren't using a wasm EH personality.
+  WasmEHFuncInfo *WasmEHInfo = nullptr;
+
   // Keeps track of Windows exception handling related data. This will be null
   // for functions that aren't using a funclet-based EH personality.
   WinEHFuncInfo *WinEHInfo = nullptr;
@@ -319,6 +324,7 @@
 
   bool CallsEHReturn = false;
   bool CallsUnwindInit = false;
+  bool HasEHScopes = false;
   bool HasEHFunclets = false;
 
   /// List of C++ TypeInfo used.
@@ -349,17 +355,18 @@
   struct VariableDbgInfo {
     const DILocalVariable *Var;
     const DIExpression *Expr;
-    unsigned Slot;
+    // The Slot can be negative for fixed stack objects.
+    int Slot;
     const DILocation *Loc;
 
     VariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr,
-                    unsigned Slot, const DILocation *Loc)
+                    int Slot, const DILocation *Loc)
         : Var(Var), Expr(Expr), Slot(Slot), Loc(Loc) {}
   };
   using VariableDbgInfoMapTy = SmallVector<VariableDbgInfo, 4>;
   VariableDbgInfoMapTy VariableDbgInfos;
 
-  MachineFunction(const Function &F, const TargetMachine &TM,
+  MachineFunction(const Function &F, const TargetMachine &Target,
                   const TargetSubtargetInfo &STI, unsigned FunctionNum,
                   MachineModuleInfo &MMI);
   MachineFunction(const MachineFunction &) = delete;
@@ -430,6 +437,12 @@
   MachineConstantPool *getConstantPool() { return ConstantPool; }
   const MachineConstantPool *getConstantPool() const { return ConstantPool; }
 
+  /// getWasmEHFuncInfo - Return information about how the current function uses
+  /// Wasm exception handling. Returns null for functions that don't use wasm
+  /// exception handling.
+  const WasmEHFuncInfo *getWasmEHFuncInfo() const { return WasmEHInfo; }
+  WasmEHFuncInfo *getWasmEHFuncInfo() { return WasmEHInfo; }
+
   /// getWinEHFuncInfo - Return information about how the current function uses
   /// Windows exception handling. Returns null for functions that don't use
   /// funclets for exception handling.
@@ -609,7 +622,7 @@
   //===--------------------------------------------------------------------===//
   // Internal functions used to automatically number MachineBasicBlocks
 
-  /// \brief Adds the MBB to the internal numbering. Returns the unique number
+  /// Adds the MBB to the internal numbering. Returns the unique number
   /// assigned to the MBB.
   unsigned addToMBBNumbering(MachineBasicBlock *MBB) {
     MBBNumbering.push_back(MBB);
@@ -695,14 +708,8 @@
     OperandRecycler.deallocate(Cap, Array);
   }
 
-  /// \brief Allocate and initialize a register mask with @p NumRegister bits.
-  uint32_t *allocateRegisterMask(unsigned NumRegister) {
-    unsigned Size = (NumRegister + 31) / 32;
-    uint32_t *Mask = Allocator.Allocate<uint32_t>(Size);
-    for (unsigned i = 0; i != Size; ++i)
-      Mask[i] = 0;
-    return Mask;
-  }
+  /// Allocate and initialize a register mask with @p NumRegister bits.
+  uint32_t *allocateRegMask();
 
   /// allocateMemRefsArray - Allocate an array to hold MachineMemOperand
   /// pointers.  This array is owned by the MachineFunction.
@@ -759,6 +766,9 @@
   bool callsUnwindInit() const { return CallsUnwindInit; }
   void setCallsUnwindInit(bool b) { CallsUnwindInit = b; }
 
+  bool hasEHScopes() const { return HasEHScopes; }
+  void setHasEHScopes(bool V) { HasEHScopes = V; }
+
   bool hasEHFunclets() const { return HasEHFunclets; }
   void setHasEHFunclets(bool V) { HasEHFunclets = V; }
 
@@ -793,7 +803,7 @@
   void addCleanup(MachineBasicBlock *LandingPad);
 
   void addSEHCatchHandler(MachineBasicBlock *LandingPad, const Function *Filter,
-                          const BlockAddress *RecoverLabel);
+                          const BlockAddress *RecoverBA);
 
   void addSEHCleanupHandler(MachineBasicBlock *LandingPad,
                             const Function *Cleanup);
@@ -860,7 +870,7 @@
 
   /// Collect information used to emit debugging information of a variable.
   void setVariableDbgInfo(const DILocalVariable *Var, const DIExpression *Expr,
-                          unsigned Slot, const DILocation *Loc) {
+                          int Slot, const DILocation *Loc) {
     VariableDbgInfos.emplace_back(Var, Expr, Slot, Loc);
   }
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h b/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
index ea94be0..88e13cd 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineInstr.h
@@ -80,7 +80,21 @@
     FrameDestroy = 1 << 1,              // Instruction is used as a part of
                                         // function frame destruction code.
     BundledPred  = 1 << 2,              // Instruction has bundled predecessors.
-    BundledSucc  = 1 << 3               // Instruction has bundled successors.
+    BundledSucc  = 1 << 3,              // Instruction has bundled successors.
+    FmNoNans     = 1 << 4,              // Instruction does not support Fast
+                                        // math nan values.
+    FmNoInfs     = 1 << 5,              // Instruction does not support Fast
+                                        // math infinity values.
+    FmNsz        = 1 << 6,              // Instruction is not required to retain
+                                        // signed zero values.
+    FmArcp       = 1 << 7,              // Instruction supports Fast math
+                                        // reciprocal approximations.
+    FmContract   = 1 << 8,              // Instruction supports Fast math
+                                        // contraction operations like fma.
+    FmAfn        = 1 << 9,              // Instruction may map to Fast math
+                                        // instrinsic approximation.
+    FmReassoc    = 1 << 10              // Instruction supports Fast math
+                                        // reassociation of operand order.
   };
 
 private:
@@ -93,7 +107,7 @@
   using OperandCapacity = ArrayRecycler<MachineOperand>::Capacity;
   OperandCapacity CapOperands;          // Capacity of the Operands array.
 
-  uint8_t Flags = 0;                    // Various bits of additional
+  uint16_t Flags = 0;                   // Various bits of additional
                                         // information about machine
                                         // instruction.
 
@@ -127,7 +141,7 @@
   /// This constructor create a MachineInstr and add the implicit operands.
   /// It reserves space for number of operands specified by
   /// MCInstrDesc.  An explicit DebugLoc is supplied.
-  MachineInstr(MachineFunction &, const MCInstrDesc &MCID, DebugLoc dl,
+  MachineInstr(MachineFunction &, const MCInstrDesc &tid, DebugLoc dl,
                bool NoImp = false);
 
   // MachineInstrs are pool-allocated and owned by MachineFunction.
@@ -175,7 +189,7 @@
   }
 
   /// Return the MI flags bitvector.
-  uint8_t getFlags() const {
+  uint16_t getFlags() const {
     return Flags;
   }
 
@@ -186,7 +200,7 @@
 
   /// Set a MI flag.
   void setFlag(MIFlag Flag) {
-    Flags |= (uint8_t)Flag;
+    Flags |= (uint16_t)Flag;
   }
 
   void setFlags(unsigned flags) {
@@ -197,7 +211,7 @@
 
   /// clearFlag - Clear a MI flag.
   void clearFlag(MIFlag Flag) {
-    Flags &= ~((uint8_t)Flag);
+    Flags &= ~((uint16_t)Flag);
   }
 
   /// Return true if MI is in a bundle (but not the first MI in a bundle).
@@ -278,6 +292,10 @@
   /// this DBG_VALUE instruction.
   const DIExpression *getDebugExpression() const;
 
+  /// Return the debug label referenced by
+  /// this DBG_LABEL instruction.
+  const DILabel *getDebugLabel() const;
+
   /// Emit an error referring to the source location of this instruction.
   /// This should only be used for inline assembly that is somehow
   /// impossible to compile. Other errors should have been handled much
@@ -304,6 +322,11 @@
     return Operands[i];
   }
 
+  /// Returns the total number of definitions.
+  unsigned getNumDefs() const {
+    return getNumExplicitDefs() + MCID->getNumImplicitDefs();
+  }
+
   /// Return true if operand \p OpIdx is a subregister index.
   bool isOperandSubregIdx(unsigned OpIdx) const {
     assert(getOperand(OpIdx).getType() == MachineOperand::MO_Immediate &&
@@ -322,6 +345,9 @@
   /// Returns the number of non-implicit operands.
   unsigned getNumExplicitOperands() const;
 
+  /// Returns the number of non-implicit definitions.
+  unsigned getNumExplicitDefs() const;
+
   /// iterator/begin/end - Iterate over all operands of a machine instruction.
   using mop_iterator = MachineOperand *;
   using const_mop_iterator = const MachineOperand *;
@@ -356,31 +382,29 @@
   /// Implicit definition are not included!
   iterator_range<mop_iterator> defs() {
     return make_range(operands_begin(),
-                      operands_begin() + getDesc().getNumDefs());
+                      operands_begin() + getNumExplicitDefs());
   }
   /// \copydoc defs()
   iterator_range<const_mop_iterator> defs() const {
     return make_range(operands_begin(),
-                      operands_begin() + getDesc().getNumDefs());
+                      operands_begin() + getNumExplicitDefs());
   }
   /// Returns a range that includes all operands that are register uses.
   /// This may include unrelated operands which are not register uses.
   iterator_range<mop_iterator> uses() {
-    return make_range(operands_begin() + getDesc().getNumDefs(),
-                      operands_end());
+    return make_range(operands_begin() + getNumExplicitDefs(), operands_end());
   }
   /// \copydoc uses()
   iterator_range<const_mop_iterator> uses() const {
-    return make_range(operands_begin() + getDesc().getNumDefs(),
-                      operands_end());
+    return make_range(operands_begin() + getNumExplicitDefs(), operands_end());
   }
   iterator_range<mop_iterator> explicit_uses() {
-    return make_range(operands_begin() + getDesc().getNumDefs(),
-                      operands_begin() + getNumExplicitOperands() );
+    return make_range(operands_begin() + getNumExplicitDefs(),
+                      operands_begin() + getNumExplicitOperands());
   }
   iterator_range<const_mop_iterator> explicit_uses() const {
-    return make_range(operands_begin() + getDesc().getNumDefs(),
-                      operands_begin() + getNumExplicitOperands() );
+    return make_range(operands_begin() + getNumExplicitDefs(),
+                      operands_begin() + getNumExplicitOperands());
   }
 
   /// Returns the number of the operand iterator \p I points to.
@@ -529,6 +553,12 @@
     return hasProperty(MCID::MoveImm, Type);
   }
 
+  /// Return true if this instruction is a register move.
+  /// (including moving values from subreg to reg)
+  bool isMoveReg(QueryType Type = IgnoreBundle) const {
+    return hasProperty(MCID::MoveReg, Type);
+  }
+
   /// Return true if this instruction is a bitcast instruction.
   bool isBitcast(QueryType Type = IgnoreBundle) const {
     return hasProperty(MCID::Bitcast, Type);
@@ -576,7 +606,7 @@
     return hasProperty(MCID::FoldableAsLoad, Type);
   }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic REG_SEQUENCE instructions.
   /// E.g., on ARM,
   /// dX VMOVDRR rY, rZ
@@ -590,7 +620,7 @@
     return hasProperty(MCID::RegSequence, Type);
   }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic EXTRACT_SUBREG instructions.
   /// E.g., on ARM,
   /// rX, rY VMOVRRD dZ
@@ -605,7 +635,7 @@
     return hasProperty(MCID::ExtractSubreg, Type);
   }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic INSERT_SUBREG instructions.
   /// E.g., on ARM,
   /// dX = VSETLNi32 dY, rZ, Imm
@@ -817,6 +847,8 @@
   bool isPosition() const { return isLabel() || isCFIInstruction(); }
 
   bool isDebugValue() const { return getOpcode() == TargetOpcode::DBG_VALUE; }
+  bool isDebugLabel() const { return getOpcode() == TargetOpcode::DBG_LABEL; }
+  bool isDebugInstr() const { return isDebugValue() || isDebugLabel(); }
 
   /// A DBG_VALUE is indirect iff the first operand is a register and
   /// the second operand is an immediate.
@@ -893,6 +925,7 @@
     case TargetOpcode::EH_LABEL:
     case TargetOpcode::GC_LABEL:
     case TargetOpcode::DBG_VALUE:
+    case TargetOpcode::DBG_LABEL:
     case TargetOpcode::LIFETIME_START:
     case TargetOpcode::LIFETIME_END:
       return true;
@@ -1049,7 +1082,7 @@
                         const TargetInstrInfo *TII,
                         const TargetRegisterInfo *TRI) const;
 
-  /// \brief Applies the constraints (def/use) implied by this MI on \p Reg to
+  /// Applies the constraints (def/use) implied by this MI on \p Reg to
   /// the given \p CurRC.
   /// If \p ExploreBundle is set and MI is part of a bundle, all the
   /// instructions inside the bundle will be taken into account. In other words,
@@ -1066,7 +1099,7 @@
       const TargetInstrInfo *TII, const TargetRegisterInfo *TRI,
       bool ExploreBundle = false) const;
 
-  /// \brief Applies the constraints (def/use) implied by the \p OpIdx operand
+  /// Applies the constraints (def/use) implied by the \p OpIdx operand
   /// to the given \p CurRC.
   ///
   /// Returns the register class that satisfies both \p CurRC and the
@@ -1244,10 +1277,11 @@
   /// \p TII is used to print the opcode name.  If it's not present, but the
   /// MI is in a function, the opcode will be printed using the function's TII.
   void print(raw_ostream &OS, bool IsStandalone = true, bool SkipOpers = false,
-             bool SkipDebugLoc = false,
+             bool SkipDebugLoc = false, bool AddNewLine = true,
              const TargetInstrInfo *TII = nullptr) const;
   void print(raw_ostream &OS, ModuleSlotTracker &MST, bool IsStandalone = true,
              bool SkipOpers = false, bool SkipDebugLoc = false,
+             bool AddNewLine = true,
              const TargetInstrInfo *TII = nullptr) const;
   void dump() const;
   /// @}
@@ -1287,7 +1321,7 @@
 
   /// Erase an operand from an instruction, leaving it with one
   /// fewer operand than it started with.
-  void RemoveOperand(unsigned i);
+  void RemoveOperand(unsigned OpNo);
 
   /// Add a MachineMemOperand to the machine instruction.
   /// This function should be used only occasionally. The setMemRefs function
@@ -1320,7 +1354,7 @@
   /// Return the MIFlags which represent both MachineInstrs. This
   /// should be used when merging two MachineInstrs into one. This routine does
   /// not modify the MIFlags of this MachineInstr.
-  uint8_t mergeFlagsWith(const MachineInstr& Other) const;
+  uint16_t mergeFlagsWith(const MachineInstr& Other) const;
 
   /// Clear this MachineInstr's memory reference descriptor list.  This resets
   /// the memrefs to their most conservative state.  This should be used only
@@ -1362,7 +1396,7 @@
   /// Slow path for hasProperty when we're dealing with a bundle.
   bool hasPropertyInBundle(unsigned Mask, QueryType Type) const;
 
-  /// \brief Implements the logic of getRegClassConstraintEffectForVReg for the
+  /// Implements the logic of getRegClassConstraintEffectForVReg for the
   /// this MI and the given operand index \p OpIdx.
   /// If the related operand does not constrained Reg, this returns CurRC.
   const TargetRegisterClass *getRegClassConstraintEffectForVRegImpl(
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
index 2df89b1..6656087 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineInstrBuilder.h
@@ -220,6 +220,9 @@
     assert((MI->isDebugValue() ? static_cast<bool>(MI->getDebugVariable())
                                : true) &&
            "first MDNode argument of a DBG_VALUE not a variable");
+    assert((MI->isDebugLabel() ? static_cast<bool>(MI->getDebugLabel())
+                               : true) &&
+           "first MDNode argument of a DBG_LABEL not a label");
     return *this;
   }
 
@@ -415,6 +418,13 @@
                             const MDNode *Expr);
 
 /// This version of the builder builds a DBG_VALUE intrinsic
+/// for a MachineOperand.
+MachineInstrBuilder BuildMI(MachineFunction &MF, const DebugLoc &DL,
+                            const MCInstrDesc &MCID, bool IsIndirect,
+                            MachineOperand &MO, const MDNode *Variable,
+                            const MDNode *Expr);
+
+/// This version of the builder builds a DBG_VALUE intrinsic
 /// for either a value in a register or a register-indirect
 /// address and inserts it at position I.
 MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
@@ -423,6 +433,14 @@
                             unsigned Reg, const MDNode *Variable,
                             const MDNode *Expr);
 
+/// This version of the builder builds a DBG_VALUE intrinsic
+/// for a machine operand and inserts it at position I.
+MachineInstrBuilder BuildMI(MachineBasicBlock &BB,
+                            MachineBasicBlock::iterator I, const DebugLoc &DL,
+                            const MCInstrDesc &MCID, bool IsIndirect,
+                            MachineOperand &MO, const MDNode *Variable,
+                            const MDNode *Expr);
+
 /// Clone a DBG_VALUE whose value has been spilled to FrameIndex.
 MachineInstr *buildDbgValueForSpill(MachineBasicBlock &BB,
                                     MachineBasicBlock::iterator I,
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineLoopInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineLoopInfo.h
index 104655e..917fb90 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineLoopInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineLoopInfo.h
@@ -54,7 +54,7 @@
   /// that contains the header.
   MachineBasicBlock *getBottomBlock();
 
-  /// \brief Find the block that contains the loop control variable and the
+  /// Find the block that contains the loop control variable and the
   /// loop test. This will return the latch block if it's one of the exiting
   /// blocks. Otherwise, return the exiting block. Return 'null' when
   /// multiple exiting blocks are present.
@@ -97,7 +97,7 @@
 
   LoopInfoBase<MachineBasicBlock, MachineLoop>& getBase() { return LI; }
 
-  /// \brief Find the block that either is the loop preheader, or could
+  /// Find the block that either is the loop preheader, or could
   /// speculatively be used as the preheader. This is e.g. useful to place
   /// loop setup code. Code that cannot be speculated should not be placed
   /// here. SpeculativePreheader is controlling whether it also tries to
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h b/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
index dea0d80..078ef7c 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineMemOperand.h
@@ -184,7 +184,7 @@
   /// atomic operations the atomic ordering requirements when store does not
   /// occur must also be specified.
   MachineMemOperand(MachinePointerInfo PtrInfo, Flags flags, uint64_t s,
-                    unsigned base_alignment,
+                    uint64_t a,
                     const AAMDNodes &AAInfo = AAMDNodes(),
                     const MDNode *Ranges = nullptr,
                     SyncScope::ID SSID = SyncScope::System,
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
index 6be304f..554e890 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineModuleInfo.h
@@ -105,7 +105,7 @@
   /// basic block's address of label.
   MMIAddrLabelMap *AddrLabelSymbols;
 
-  // TODO: Ideally, what we'd like is to have a switch that allows emitting 
+  // TODO: Ideally, what we'd like is to have a switch that allows emitting
   // synchronous (precise at call-sites only) CFA into .eh_frame. However,
   // even under this switch, we'd like .debug_frame to be precise when using
   // -g. At this moment, there's no way to specify that some CFI directives
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h b/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
index 4f0db1c..53e8889 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineOperand.h
@@ -295,6 +295,12 @@
              unsigned TiedOperandIdx, const TargetRegisterInfo *TRI,
              const TargetIntrinsicInfo *IntrinsicInfo) const;
 
+  /// Same as print(os, TRI, IntrinsicInfo), but allows to specify the low-level
+  /// type to be printed the same way the full version of print(...) does it.
+  void print(raw_ostream &os, LLT TypeToPrint,
+             const TargetRegisterInfo *TRI = nullptr,
+             const TargetIntrinsicInfo *IntrinsicInfo = nullptr) const;
+
   void dump() const;
 
   //===--------------------------------------------------------------------===//
@@ -610,6 +616,11 @@
     return Contents.RegMask;
   }
 
+  /// Returns number of elements needed for a regmask array.
+  static unsigned getRegMaskSize(unsigned NumRegs) {
+    return (NumRegs + 31) / 32;
+  }
+
   /// getRegLiveOut - Returns a bit mask of live-out registers.
   const uint32_t *getRegLiveOut() const {
     assert(isRegLiveOut() && "Wrong MachineOperand accessor");
@@ -630,6 +641,11 @@
     Contents.ImmVal = immVal;
   }
 
+  void setCImm(const ConstantInt *CI) {
+    assert(isCImm() && "Wrong MachineOperand mutator");
+    Contents.CI = CI;
+  }
+
   void setFPImm(const ConstantFP *CFP) {
     assert(isFPImm() && "Wrong MachineOperand mutator");
     Contents.CFP = CFP;
@@ -677,7 +693,7 @@
   /// should stay in sync with the hash_value overload below.
   bool isIdenticalTo(const MachineOperand &Other) const;
 
-  /// \brief MachineOperand hash_value overload.
+  /// MachineOperand hash_value overload.
   ///
   /// Note that this includes the same information in the hash that
   /// isIdenticalTo uses for comparison. It is thus suited for use in hash
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h b/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
index 2fdefbe..a7ce870 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineOptimizationRemarkEmitter.h
@@ -24,7 +24,7 @@
 class MachineBlockFrequencyInfo;
 class MachineInstr;
 
-/// \brief Common features for diagnostics dealing with optimization remarks
+/// Common features for diagnostics dealing with optimization remarks
 /// that are used by machine passes.
 class DiagnosticInfoMIROptimization : public DiagnosticInfoOptimizationBase {
 public:
@@ -151,7 +151,7 @@
   /// Emit an optimization remark.
   void emit(DiagnosticInfoOptimizationBase &OptDiag);
 
-  /// \brief Whether we allow for extra compile-time budget to perform more
+  /// Whether we allow for extra compile-time budget to perform more
   /// analysis to be more informative.
   ///
   /// This is useful to enable additional missed optimizations to be reported
@@ -164,7 +164,7 @@
             .getDiagHandlerPtr()->isAnyRemarkEnabled(PassName));
   }
 
-  /// \brief Take a lambda that returns a remark which will be emitted.  Second
+  /// Take a lambda that returns a remark which will be emitted.  Second
   /// argument is only used to restrict this to functions.
   template <typename T>
   void emit(T RemarkBuilder, decltype(RemarkBuilder()) * = nullptr) {
@@ -192,7 +192,7 @@
   /// Similar but use value from \p OptDiag and update hotness there.
   void computeHotness(DiagnosticInfoMIROptimization &Remark);
 
-  /// \brief Only allow verbose messages if we know we're filtering by hotness
+  /// Only allow verbose messages if we know we're filtering by hotness
   /// (BFI is only set in this case).
   bool shouldEmitVerbose() { return MBFI != nullptr; }
 };
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineOutliner.h b/linux-x64/clang/include/llvm/CodeGen/MachineOutliner.h
new file mode 100644
index 0000000..95bfc24
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineOutliner.h
@@ -0,0 +1,240 @@
+//===---- MachineOutliner.h - Outliner data structures ------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Contains all data structures shared between the outliner implemented in
+/// MachineOutliner.cpp and target implementations of the outliner.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_MACHINEOUTLINER_H
+#define LLVM_MACHINEOUTLINER_H
+
+#include "llvm/CodeGen/LiveRegUnits.h"
+#include "llvm/CodeGen/MachineFunction.h"
+#include "llvm/CodeGen/TargetRegisterInfo.h"
+#include "llvm/CodeGen/LivePhysRegs.h"
+
+namespace llvm {
+namespace outliner {
+
+/// Represents how an instruction should be mapped by the outliner.
+/// \p Legal instructions are those which are safe to outline.
+/// \p LegalTerminator instructions are safe to outline, but only as the
+/// last instruction in a sequence.
+/// \p Illegal instructions are those which cannot be outlined.
+/// \p Invisible instructions are instructions which can be outlined, but
+/// shouldn't actually impact the outlining result.
+enum InstrType { Legal, LegalTerminator, Illegal, Invisible };
+
+/// An individual sequence of instructions to be replaced with a call to
+/// an outlined function.
+struct Candidate {
+private:
+  /// The start index of this \p Candidate in the instruction list.
+  unsigned StartIdx;
+
+  /// The number of instructions in this \p Candidate.
+  unsigned Len;
+
+  // The first instruction in this \p Candidate.
+  MachineBasicBlock::iterator FirstInst;
+
+  // The last instruction in this \p Candidate.
+  MachineBasicBlock::iterator LastInst;
+
+  // The basic block that contains this Candidate.
+  MachineBasicBlock *MBB;
+
+  /// Cost of calling an outlined function from this point as defined by the
+  /// target.
+  unsigned CallOverhead;
+
+public:
+  /// The index of this \p Candidate's \p OutlinedFunction in the list of
+  /// \p OutlinedFunctions.
+  unsigned FunctionIdx;
+
+  /// Set to false if the candidate overlapped with another candidate.
+  bool InCandidateList = true;
+
+  /// Identifier denoting the instructions to emit to call an outlined function
+  /// from this point. Defined by the target.
+  unsigned CallConstructionID;
+
+  /// Contains physical register liveness information for the MBB containing
+  /// this \p Candidate.
+  ///
+  /// This is optionally used by the target to calculate more fine-grained
+  /// cost model information.
+  LiveRegUnits LRU;
+
+  /// Contains the accumulated register liveness information for the
+  /// instructions in this \p Candidate.
+  ///
+  /// This is optionally used by the target to determine which registers have
+  /// been used across the sequence.
+  LiveRegUnits UsedInSequence;
+
+  /// Return the number of instructions in this Candidate.
+  unsigned getLength() const { return Len; }
+
+  /// Return the start index of this candidate.
+  unsigned getStartIdx() const { return StartIdx; }
+
+  /// Return the end index of this candidate.
+  unsigned getEndIdx() const { return StartIdx + Len - 1; }
+
+  /// Set the CallConstructionID and CallOverhead of this candidate to CID and
+  /// CO respectively.
+  void setCallInfo(unsigned CID, unsigned CO) {
+    CallConstructionID = CID;
+    CallOverhead = CO;
+  }
+
+  /// Returns the call overhead of this candidate if it is in the list.
+  unsigned getCallOverhead() const {
+    return InCandidateList ? CallOverhead : 0;
+  }
+
+  MachineBasicBlock::iterator &front() { return FirstInst; }
+  MachineBasicBlock::iterator &back() { return LastInst; }
+  MachineFunction *getMF() const { return MBB->getParent(); }
+  MachineBasicBlock *getMBB() const { return MBB; }
+
+  /// The number of instructions that would be saved by outlining every
+  /// candidate of this type.
+  ///
+  /// This is a fixed value which is not updated during the candidate pruning
+  /// process. It is only used for deciding which candidate to keep if two
+  /// candidates overlap. The true benefit is stored in the OutlinedFunction
+  /// for some given candidate.
+  unsigned Benefit = 0;
+
+  Candidate(unsigned StartIdx, unsigned Len,
+            MachineBasicBlock::iterator &FirstInst,
+            MachineBasicBlock::iterator &LastInst, MachineBasicBlock *MBB,
+            unsigned FunctionIdx)
+      : StartIdx(StartIdx), Len(Len), FirstInst(FirstInst), LastInst(LastInst),
+        MBB(MBB), FunctionIdx(FunctionIdx) {}
+  Candidate() {}
+
+  /// Used to ensure that \p Candidates are outlined in an order that
+  /// preserves the start and end indices of other \p Candidates.
+  bool operator<(const Candidate &RHS) const {
+    return getStartIdx() > RHS.getStartIdx();
+  }
+
+  /// Compute the registers that are live across this Candidate.
+  /// Used by targets that need this information for cost model calculation.
+  /// If a target does not need this information, then this should not be
+  /// called.
+  void initLRU(const TargetRegisterInfo &TRI) {
+    assert(MBB->getParent()->getRegInfo().tracksLiveness() &&
+           "Candidate's Machine Function must track liveness");
+    LRU.init(TRI);
+    LRU.addLiveOuts(*MBB);
+
+    // Compute liveness from the end of the block up to the beginning of the
+    // outlining candidate.
+    std::for_each(MBB->rbegin(), (MachineBasicBlock::reverse_iterator)front(),
+                  [this](MachineInstr &MI) { LRU.stepBackward(MI); });
+
+    // Walk over the sequence itself and figure out which registers were used
+    // in the sequence.
+    UsedInSequence.init(TRI);
+    std::for_each(front(), std::next(back()),
+                  [this](MachineInstr &MI) { UsedInSequence.accumulate(MI); });
+  }
+};
+
+/// The information necessary to create an outlined function for some
+/// class of candidate.
+struct OutlinedFunction {
+
+private:
+  /// The number of candidates for this \p OutlinedFunction.
+  unsigned OccurrenceCount = 0;
+
+public:
+  std::vector<std::shared_ptr<Candidate>> Candidates;
+
+  /// The actual outlined function created.
+  /// This is initialized after we go through and create the actual function.
+  MachineFunction *MF = nullptr;
+
+  /// A number assigned to this function which appears at the end of its name.
+  unsigned Name;
+
+  /// The sequence of integers corresponding to the instructions in this
+  /// function.
+  std::vector<unsigned> Sequence;
+
+  /// Represents the size of a sequence in bytes. (Some instructions vary
+  /// widely in size, so just counting the instructions isn't very useful.)
+  unsigned SequenceSize;
+
+  /// Target-defined overhead of constructing a frame for this function.
+  unsigned FrameOverhead;
+
+  /// Target-defined identifier for constructing a frame for this function.
+  unsigned FrameConstructionID;
+
+  /// Return the number of candidates for this \p OutlinedFunction.
+  unsigned getOccurrenceCount() { return OccurrenceCount; }
+
+  /// Decrement the occurrence count of this OutlinedFunction and return the
+  /// new count.
+  unsigned decrement() {
+    assert(OccurrenceCount > 0 && "Can't decrement an empty function!");
+    OccurrenceCount--;
+    return getOccurrenceCount();
+  }
+
+  /// Return the number of bytes it would take to outline this
+  /// function.
+  unsigned getOutliningCost() {
+    unsigned CallOverhead = 0;
+    for (std::shared_ptr<Candidate> &C : Candidates)
+      CallOverhead += C->getCallOverhead();
+    return CallOverhead + SequenceSize + FrameOverhead;
+  }
+
+  /// Return the size in bytes of the unoutlined sequences.
+  unsigned getNotOutlinedCost() { return OccurrenceCount * SequenceSize; }
+
+  /// Return the number of instructions that would be saved by outlining
+  /// this function.
+  unsigned getBenefit() {
+    unsigned NotOutlinedCost = getNotOutlinedCost();
+    unsigned OutlinedCost = getOutliningCost();
+    return (NotOutlinedCost < OutlinedCost) ? 0
+                                            : NotOutlinedCost - OutlinedCost;
+  }
+
+  OutlinedFunction(std::vector<Candidate> &Cands,
+                   unsigned SequenceSize, unsigned FrameOverhead,
+                   unsigned FrameConstructionID)
+      : SequenceSize(SequenceSize), FrameOverhead(FrameOverhead),
+        FrameConstructionID(FrameConstructionID) {
+    OccurrenceCount = Cands.size();
+    for (Candidate &C : Cands)
+      Candidates.push_back(std::make_shared<outliner::Candidate>(C));
+
+    unsigned B = getBenefit();
+    for (std::shared_ptr<Candidate> &C : Candidates)
+      C->Benefit = B;
+  }
+
+  OutlinedFunction() {}
+};
+} // namespace outliner
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h b/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
index b0dfd02..5bf4a49 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -136,9 +136,9 @@
   /// started.
   BitVector ReservedRegs;
 
-  using VRegToTypeMap = DenseMap<unsigned, LLT>;
-  /// Map generic virtual registers to their actual size.
-  mutable std::unique_ptr<VRegToTypeMap> VRegToType;
+  using VRegToTypeMap = IndexedMap<LLT, VirtReg2IndexFunctor>;
+  /// Map generic virtual registers to their low-level type.
+  VRegToTypeMap VRegToType;
 
   /// Keep track of the physical registers that are live in to the function.
   /// Live in values are typically arguments in registers.  LiveIn values are
@@ -714,26 +714,23 @@
 
   /// createVirtualRegister - Create and return a new virtual register in the
   /// function with the specified register class.
-  unsigned createVirtualRegister(const TargetRegisterClass *RegClass);
+  unsigned createVirtualRegister(const TargetRegisterClass *RegClass,
+                                 StringRef Name = "");
 
-  /// Accessor for VRegToType. This accessor should only be used
-  /// by global-isel related work.
-  VRegToTypeMap &getVRegToType() const {
-    if (!VRegToType)
-      VRegToType.reset(new VRegToTypeMap);
-    return *VRegToType.get();
-  }
-
-  /// Get the low-level type of \p VReg or LLT{} if VReg is not a generic
+  /// Get the low-level type of \p Reg or LLT{} if Reg is not a generic
   /// (target independent) virtual register.
-  LLT getType(unsigned VReg) const;
+  LLT getType(unsigned Reg) const {
+    if (TargetRegisterInfo::isVirtualRegister(Reg) && VRegToType.inBounds(Reg))
+      return VRegToType[Reg];
+    return LLT{};
+  }
 
   /// Set the low-level type of \p VReg to \p Ty.
   void setType(unsigned VReg, LLT Ty);
 
   /// Create and return a new generic virtual register with low-level
   /// type \p Ty.
-  unsigned createGenericVirtualRegister(LLT Ty);
+  unsigned createGenericVirtualRegister(LLT Ty, StringRef Name = "");
 
   /// Remove all types associated to virtual registers (after instruction
   /// selection and constraining of all generic virtual registers).
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineSSAUpdater.h b/linux-x64/clang/include/llvm/CodeGen/MachineSSAUpdater.h
index b5ea208..5e91246 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineSSAUpdater.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineSSAUpdater.h
@@ -56,7 +56,7 @@
   /// MachineSSAUpdater constructor.  If InsertedPHIs is specified, it will be
   /// filled in with all PHI Nodes created by rewriting.
   explicit MachineSSAUpdater(MachineFunction &MF,
-                        SmallVectorImpl<MachineInstr*> *InsertedPHIs = nullptr);
+                        SmallVectorImpl<MachineInstr*> *NewPHI = nullptr);
   MachineSSAUpdater(const MachineSSAUpdater &) = delete;
   MachineSSAUpdater &operator=(const MachineSSAUpdater &) = delete;
   ~MachineSSAUpdater();
diff --git a/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h b/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
index e327881..85ffa4e 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MachineScheduler.h
@@ -237,7 +237,7 @@
   /// be scheduled at the bottom.
   virtual SUnit *pickNode(bool &IsTopNode) = 0;
 
-  /// \brief Scheduler callback to notify that a new subtree is scheduled.
+  /// Scheduler callback to notify that a new subtree is scheduled.
   virtual void scheduleTree(unsigned SubtreeID) {}
 
   /// Notify MachineSchedStrategy that ScheduleDAGMI has scheduled an
@@ -318,11 +318,11 @@
       Mutations.push_back(std::move(Mutation));
   }
 
-  /// \brief True if an edge can be added from PredSU to SuccSU without creating
+  /// True if an edge can be added from PredSU to SuccSU without creating
   /// a cycle.
   bool canAddEdge(SUnit *SuccSU, SUnit *PredSU);
 
-  /// \brief Add a DAG edge to the given SU with the given predecessor
+  /// Add a DAG edge to the given SU with the given predecessor
   /// dependence data.
   ///
   /// \returns true if the edge may be added without creating a cycle OR if an
@@ -374,7 +374,7 @@
   /// Reinsert debug_values recorded in ScheduleDAGInstrs::DbgValues.
   void placeDebugValues();
 
-  /// \brief dump the scheduled Sequence.
+  /// dump the scheduled Sequence.
   void dumpSchedule() const;
 
   // Lesser helpers...
@@ -445,7 +445,7 @@
   /// Return true if this DAG supports VReg liveness and RegPressure.
   bool hasVRegLiveness() const override { return true; }
 
-  /// \brief Return true if register pressure tracking is enabled.
+  /// Return true if register pressure tracking is enabled.
   bool isTrackingPressure() const { return ShouldTrackPressure; }
 
   /// Get current register pressure for the top scheduled instructions.
@@ -897,6 +897,28 @@
 #endif
 };
 
+// Utility functions used by heuristics in tryCandidate().
+bool tryLess(int TryVal, int CandVal,
+             GenericSchedulerBase::SchedCandidate &TryCand,
+             GenericSchedulerBase::SchedCandidate &Cand,
+             GenericSchedulerBase::CandReason Reason);
+bool tryGreater(int TryVal, int CandVal,
+                GenericSchedulerBase::SchedCandidate &TryCand,
+                GenericSchedulerBase::SchedCandidate &Cand,
+                GenericSchedulerBase::CandReason Reason);
+bool tryLatency(GenericSchedulerBase::SchedCandidate &TryCand,
+                GenericSchedulerBase::SchedCandidate &Cand,
+                SchedBoundary &Zone);
+bool tryPressure(const PressureChange &TryP,
+                 const PressureChange &CandP,
+                 GenericSchedulerBase::SchedCandidate &TryCand,
+                 GenericSchedulerBase::SchedCandidate &Cand,
+                 GenericSchedulerBase::CandReason Reason,
+                 const TargetRegisterInfo *TRI,
+                 const MachineFunction &MF);
+unsigned getWeakLeft(const SUnit *SU, bool isTop);
+int biasPhysRegCopy(const SUnit *SU, bool isTop);
+
 /// GenericScheduler shrinks the unscheduled zone using heuristics to balance
 /// the schedule.
 class GenericScheduler : public GenericSchedulerBase {
@@ -963,9 +985,8 @@
                      const RegPressureTracker &RPTracker,
                      RegPressureTracker &TempTracker);
 
-  void tryCandidate(SchedCandidate &Cand,
-                    SchedCandidate &TryCand,
-                    SchedBoundary *Zone);
+  virtual void tryCandidate(SchedCandidate &Cand, SchedCandidate &TryCand,
+                            SchedBoundary *Zone) const;
 
   SUnit *pickNodeBidirectional(bool &IsTopNode);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/MacroFusion.h b/linux-x64/clang/include/llvm/CodeGen/MacroFusion.h
index dc105fd..a77226d 100644
--- a/linux-x64/clang/include/llvm/CodeGen/MacroFusion.h
+++ b/linux-x64/clang/include/llvm/CodeGen/MacroFusion.h
@@ -25,7 +25,7 @@
 class TargetInstrInfo;
 class TargetSubtargetInfo;
 
-/// \brief Check if the instr pair, FirstMI and SecondMI, should be fused
+/// Check if the instr pair, FirstMI and SecondMI, should be fused
 /// together. Given SecondMI, when FirstMI is unspecified, then check if
 /// SecondMI may be part of a fused pair at all.
 using ShouldSchedulePredTy = std::function<bool(const TargetInstrInfo &TII,
@@ -33,13 +33,13 @@
                                                 const MachineInstr *FirstMI,
                                                 const MachineInstr &SecondMI)>;
 
-/// \brief Create a DAG scheduling mutation to pair instructions back to back
+/// Create a DAG scheduling mutation to pair instructions back to back
 /// for instructions that benefit according to the target-specific
 /// shouldScheduleAdjacent predicate function.
 std::unique_ptr<ScheduleDAGMutation>
 createMacroFusionDAGMutation(ShouldSchedulePredTy shouldScheduleAdjacent);
 
-/// \brief Create a DAG scheduling mutation to pair branch instructions with one
+/// Create a DAG scheduling mutation to pair branch instructions with one
 /// of their predecessors back to back for instructions that benefit according
 /// to the target-specific shouldScheduleAdjacent predicate function.
 std::unique_ptr<ScheduleDAGMutation>
diff --git a/linux-x64/clang/include/llvm/CodeGen/PBQP/Graph.h b/linux-x64/clang/include/llvm/CodeGen/PBQP/Graph.h
index e94878c..a6d88b0 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PBQP/Graph.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PBQP/Graph.h
@@ -29,12 +29,12 @@
     using NodeId = unsigned;
     using EdgeId = unsigned;
 
-    /// @brief Returns a value representing an invalid (non-existent) node.
+    /// Returns a value representing an invalid (non-existent) node.
     static NodeId invalidNodeId() {
       return std::numeric_limits<NodeId>::max();
     }
 
-    /// @brief Returns a value representing an invalid (non-existent) edge.
+    /// Returns a value representing an invalid (non-existent) edge.
     static EdgeId invalidEdgeId() {
       return std::numeric_limits<EdgeId>::max();
     }
@@ -338,19 +338,19 @@
       const NodeEntry &NE;
     };
 
-    /// @brief Construct an empty PBQP graph.
+    /// Construct an empty PBQP graph.
     Graph() = default;
 
-    /// @brief Construct an empty PBQP graph with the given graph metadata.
+    /// Construct an empty PBQP graph with the given graph metadata.
     Graph(GraphMetadata Metadata) : Metadata(std::move(Metadata)) {}
 
-    /// @brief Get a reference to the graph metadata.
+    /// Get a reference to the graph metadata.
     GraphMetadata& getMetadata() { return Metadata; }
 
-    /// @brief Get a const-reference to the graph metadata.
+    /// Get a const-reference to the graph metadata.
     const GraphMetadata& getMetadata() const { return Metadata; }
 
-    /// @brief Lock this graph to the given solver instance in preparation
+    /// Lock this graph to the given solver instance in preparation
     /// for running the solver. This method will call solver.handleAddNode for
     /// each node in the graph, and handleAddEdge for each edge, to give the
     /// solver an opportunity to set up any requried metadata.
@@ -363,13 +363,13 @@
         Solver->handleAddEdge(EId);
     }
 
-    /// @brief Release from solver instance.
+    /// Release from solver instance.
     void unsetSolver() {
       assert(Solver && "Solver not set.");
       Solver = nullptr;
     }
 
-    /// @brief Add a node with the given costs.
+    /// Add a node with the given costs.
     /// @param Costs Cost vector for the new node.
     /// @return Node iterator for the added node.
     template <typename OtherVectorT>
@@ -382,7 +382,7 @@
       return NId;
     }
 
-    /// @brief Add a node bypassing the cost allocator.
+    /// Add a node bypassing the cost allocator.
     /// @param Costs Cost vector ptr for the new node (must be convertible to
     ///        VectorPtr).
     /// @return Node iterator for the added node.
@@ -401,7 +401,7 @@
       return NId;
     }
 
-    /// @brief Add an edge between the given nodes with the given costs.
+    /// Add an edge between the given nodes with the given costs.
     /// @param N1Id First node.
     /// @param N2Id Second node.
     /// @param Costs Cost matrix for new edge.
@@ -419,7 +419,7 @@
       return EId;
     }
 
-    /// @brief Add an edge bypassing the cost allocator.
+    /// Add an edge bypassing the cost allocator.
     /// @param N1Id First node.
     /// @param N2Id Second node.
     /// @param Costs Cost matrix for new edge.
@@ -444,7 +444,7 @@
       return EId;
     }
 
-    /// @brief Returns true if the graph is empty.
+    /// Returns true if the graph is empty.
     bool empty() const { return NodeIdSet(*this).empty(); }
 
     NodeIdSet nodeIds() const { return NodeIdSet(*this); }
@@ -452,15 +452,15 @@
 
     AdjEdgeIdSet adjEdgeIds(NodeId NId) { return AdjEdgeIdSet(getNode(NId)); }
 
-    /// @brief Get the number of nodes in the graph.
+    /// Get the number of nodes in the graph.
     /// @return Number of nodes in the graph.
     unsigned getNumNodes() const { return NodeIdSet(*this).size(); }
 
-    /// @brief Get the number of edges in the graph.
+    /// Get the number of edges in the graph.
     /// @return Number of edges in the graph.
     unsigned getNumEdges() const { return EdgeIdSet(*this).size(); }
 
-    /// @brief Set a node's cost vector.
+    /// Set a node's cost vector.
     /// @param NId Node to update.
     /// @param Costs New costs to set.
     template <typename OtherVectorT>
@@ -471,7 +471,7 @@
       getNode(NId).Costs = AllocatedCosts;
     }
 
-    /// @brief Get a VectorPtr to a node's cost vector. Rarely useful - use
+    /// Get a VectorPtr to a node's cost vector. Rarely useful - use
     ///        getNodeCosts where possible.
     /// @param NId Node id.
     /// @return VectorPtr to node cost vector.
@@ -483,7 +483,7 @@
       return getNode(NId).Costs;
     }
 
-    /// @brief Get a node's cost vector.
+    /// Get a node's cost vector.
     /// @param NId Node id.
     /// @return Node cost vector.
     const Vector& getNodeCosts(NodeId NId) const {
@@ -502,7 +502,7 @@
       return getNode(NId).getAdjEdgeIds().size();
     }
 
-    /// @brief Update an edge's cost matrix.
+    /// Update an edge's cost matrix.
     /// @param EId Edge id.
     /// @param Costs New cost matrix.
     template <typename OtherMatrixT>
@@ -513,7 +513,7 @@
       getEdge(EId).Costs = AllocatedCosts;
     }
 
-    /// @brief Get a MatrixPtr to a node's cost matrix. Rarely useful - use
+    /// Get a MatrixPtr to a node's cost matrix. Rarely useful - use
     ///        getEdgeCosts where possible.
     /// @param EId Edge id.
     /// @return MatrixPtr to edge cost matrix.
@@ -525,7 +525,7 @@
       return getEdge(EId).Costs;
     }
 
-    /// @brief Get an edge's cost matrix.
+    /// Get an edge's cost matrix.
     /// @param EId Edge id.
     /// @return Edge cost matrix.
     const Matrix& getEdgeCosts(EdgeId EId) const {
@@ -540,21 +540,21 @@
       return getEdge(EId).Metadata;
     }
 
-    /// @brief Get the first node connected to this edge.
+    /// Get the first node connected to this edge.
     /// @param EId Edge id.
     /// @return The first node connected to the given edge.
     NodeId getEdgeNode1Id(EdgeId EId) const {
       return getEdge(EId).getN1Id();
     }
 
-    /// @brief Get the second node connected to this edge.
+    /// Get the second node connected to this edge.
     /// @param EId Edge id.
     /// @return The second node connected to the given edge.
     NodeId getEdgeNode2Id(EdgeId EId) const {
       return getEdge(EId).getN2Id();
     }
 
-    /// @brief Get the "other" node connected to this edge.
+    /// Get the "other" node connected to this edge.
     /// @param EId Edge id.
     /// @param NId Node id for the "given" node.
     /// @return The iterator for the "other" node connected to this edge.
@@ -566,7 +566,7 @@
       return E.getN1Id();
     }
 
-    /// @brief Get the edge connecting two nodes.
+    /// Get the edge connecting two nodes.
     /// @param N1Id First node id.
     /// @param N2Id Second node id.
     /// @return An id for edge (N1Id, N2Id) if such an edge exists,
@@ -581,7 +581,7 @@
       return invalidEdgeId();
     }
 
-    /// @brief Remove a node from the graph.
+    /// Remove a node from the graph.
     /// @param NId Node id.
     void removeNode(NodeId NId) {
       if (Solver)
@@ -598,7 +598,7 @@
       FreeNodeIds.push_back(NId);
     }
 
-    /// @brief Disconnect an edge from the given node.
+    /// Disconnect an edge from the given node.
     ///
     /// Removes the given edge from the adjacency list of the given node.
     /// This operation leaves the edge in an 'asymmetric' state: It will no
@@ -631,14 +631,14 @@
       E.disconnectFrom(*this, NId);
     }
 
-    /// @brief Convenience method to disconnect all neighbours from the given
+    /// Convenience method to disconnect all neighbours from the given
     ///        node.
     void disconnectAllNeighborsFromNode(NodeId NId) {
       for (auto AEId : adjEdgeIds(NId))
         disconnectEdge(AEId, getEdgeOtherNodeId(AEId, NId));
     }
 
-    /// @brief Re-attach an edge to its nodes.
+    /// Re-attach an edge to its nodes.
     ///
     /// Adds an edge that had been previously disconnected back into the
     /// adjacency set of the nodes that the edge connects.
@@ -649,7 +649,7 @@
         Solver->handleReconnectEdge(EId, NId);
     }
 
-    /// @brief Remove an edge from the graph.
+    /// Remove an edge from the graph.
     /// @param EId Edge id.
     void removeEdge(EdgeId EId) {
       if (Solver)
@@ -660,7 +660,7 @@
       Edges[EId].invalidate();
     }
 
-    /// @brief Remove all nodes and edges from the graph.
+    /// Remove all nodes and edges from the graph.
     void clear() {
       Nodes.clear();
       FreeNodeIds.clear();
diff --git a/linux-x64/clang/include/llvm/CodeGen/PBQP/Math.h b/linux-x64/clang/include/llvm/CodeGen/PBQP/Math.h
index ba405e8..d1432a3 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PBQP/Math.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PBQP/Math.h
@@ -22,34 +22,34 @@
 
 using PBQPNum = float;
 
-/// \brief PBQP Vector class.
+/// PBQP Vector class.
 class Vector {
   friend hash_code hash_value(const Vector &);
 
 public:
-  /// \brief Construct a PBQP vector of the given size.
+  /// Construct a PBQP vector of the given size.
   explicit Vector(unsigned Length)
     : Length(Length), Data(llvm::make_unique<PBQPNum []>(Length)) {}
 
-  /// \brief Construct a PBQP vector with initializer.
+  /// Construct a PBQP vector with initializer.
   Vector(unsigned Length, PBQPNum InitVal)
     : Length(Length), Data(llvm::make_unique<PBQPNum []>(Length)) {
     std::fill(Data.get(), Data.get() + Length, InitVal);
   }
 
-  /// \brief Copy construct a PBQP vector.
+  /// Copy construct a PBQP vector.
   Vector(const Vector &V)
     : Length(V.Length), Data(llvm::make_unique<PBQPNum []>(Length)) {
     std::copy(V.Data.get(), V.Data.get() + Length, Data.get());
   }
 
-  /// \brief Move construct a PBQP vector.
+  /// Move construct a PBQP vector.
   Vector(Vector &&V)
     : Length(V.Length), Data(std::move(V.Data)) {
     V.Length = 0;
   }
 
-  /// \brief Comparison operator.
+  /// Comparison operator.
   bool operator==(const Vector &V) const {
     assert(Length != 0 && Data && "Invalid vector");
     if (Length != V.Length)
@@ -57,27 +57,27 @@
     return std::equal(Data.get(), Data.get() + Length, V.Data.get());
   }
 
-  /// \brief Return the length of the vector
+  /// Return the length of the vector
   unsigned getLength() const {
     assert(Length != 0 && Data && "Invalid vector");
     return Length;
   }
 
-  /// \brief Element access.
+  /// Element access.
   PBQPNum& operator[](unsigned Index) {
     assert(Length != 0 && Data && "Invalid vector");
     assert(Index < Length && "Vector element access out of bounds.");
     return Data[Index];
   }
 
-  /// \brief Const element access.
+  /// Const element access.
   const PBQPNum& operator[](unsigned Index) const {
     assert(Length != 0 && Data && "Invalid vector");
     assert(Index < Length && "Vector element access out of bounds.");
     return Data[Index];
   }
 
-  /// \brief Add another vector to this one.
+  /// Add another vector to this one.
   Vector& operator+=(const Vector &V) {
     assert(Length != 0 && Data && "Invalid vector");
     assert(Length == V.Length && "Vector length mismatch.");
@@ -86,7 +86,7 @@
     return *this;
   }
 
-  /// \brief Returns the index of the minimum value in this vector
+  /// Returns the index of the minimum value in this vector
   unsigned minIndex() const {
     assert(Length != 0 && Data && "Invalid vector");
     return std::min_element(Data.get(), Data.get() + Length) - Data.get();
@@ -97,14 +97,14 @@
   std::unique_ptr<PBQPNum []> Data;
 };
 
-/// \brief Return a hash_value for the given vector.
+/// Return a hash_value for the given vector.
 inline hash_code hash_value(const Vector &V) {
   unsigned *VBegin = reinterpret_cast<unsigned*>(V.Data.get());
   unsigned *VEnd = reinterpret_cast<unsigned*>(V.Data.get() + V.Length);
   return hash_combine(V.Length, hash_combine_range(VBegin, VEnd));
 }
 
-/// \brief Output a textual representation of the given vector on the given
+/// Output a textual representation of the given vector on the given
 ///        output stream.
 template <typename OStream>
 OStream& operator<<(OStream &OS, const Vector &V) {
@@ -118,18 +118,18 @@
   return OS;
 }
 
-/// \brief PBQP Matrix class
+/// PBQP Matrix class
 class Matrix {
 private:
   friend hash_code hash_value(const Matrix &);
 
 public:
-  /// \brief Construct a PBQP Matrix with the given dimensions.
+  /// Construct a PBQP Matrix with the given dimensions.
   Matrix(unsigned Rows, unsigned Cols) :
     Rows(Rows), Cols(Cols), Data(llvm::make_unique<PBQPNum []>(Rows * Cols)) {
   }
 
-  /// \brief Construct a PBQP Matrix with the given dimensions and initial
+  /// Construct a PBQP Matrix with the given dimensions and initial
   /// value.
   Matrix(unsigned Rows, unsigned Cols, PBQPNum InitVal)
     : Rows(Rows), Cols(Cols),
@@ -137,20 +137,20 @@
     std::fill(Data.get(), Data.get() + (Rows * Cols), InitVal);
   }
 
-  /// \brief Copy construct a PBQP matrix.
+  /// Copy construct a PBQP matrix.
   Matrix(const Matrix &M)
     : Rows(M.Rows), Cols(M.Cols),
       Data(llvm::make_unique<PBQPNum []>(Rows * Cols)) {
     std::copy(M.Data.get(), M.Data.get() + (Rows * Cols), Data.get());
   }
 
-  /// \brief Move construct a PBQP matrix.
+  /// Move construct a PBQP matrix.
   Matrix(Matrix &&M)
     : Rows(M.Rows), Cols(M.Cols), Data(std::move(M.Data)) {
     M.Rows = M.Cols = 0;
   }
 
-  /// \brief Comparison operator.
+  /// Comparison operator.
   bool operator==(const Matrix &M) const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     if (Rows != M.Rows || Cols != M.Cols)
@@ -158,33 +158,33 @@
     return std::equal(Data.get(), Data.get() + (Rows * Cols), M.Data.get());
   }
 
-  /// \brief Return the number of rows in this matrix.
+  /// Return the number of rows in this matrix.
   unsigned getRows() const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     return Rows;
   }
 
-  /// \brief Return the number of cols in this matrix.
+  /// Return the number of cols in this matrix.
   unsigned getCols() const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     return Cols;
   }
 
-  /// \brief Matrix element access.
+  /// Matrix element access.
   PBQPNum* operator[](unsigned R) {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     assert(R < Rows && "Row out of bounds.");
     return Data.get() + (R * Cols);
   }
 
-  /// \brief Matrix element access.
+  /// Matrix element access.
   const PBQPNum* operator[](unsigned R) const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     assert(R < Rows && "Row out of bounds.");
     return Data.get() + (R * Cols);
   }
 
-  /// \brief Returns the given row as a vector.
+  /// Returns the given row as a vector.
   Vector getRowAsVector(unsigned R) const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     Vector V(Cols);
@@ -193,7 +193,7 @@
     return V;
   }
 
-  /// \brief Returns the given column as a vector.
+  /// Returns the given column as a vector.
   Vector getColAsVector(unsigned C) const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     Vector V(Rows);
@@ -202,7 +202,7 @@
     return V;
   }
 
-  /// \brief Matrix transpose.
+  /// Matrix transpose.
   Matrix transpose() const {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     Matrix M(Cols, Rows);
@@ -212,7 +212,7 @@
     return M;
   }
 
-  /// \brief Add the given matrix to this one.
+  /// Add the given matrix to this one.
   Matrix& operator+=(const Matrix &M) {
     assert(Rows != 0 && Cols != 0 && Data && "Invalid matrix");
     assert(Rows == M.Rows && Cols == M.Cols &&
@@ -234,7 +234,7 @@
   std::unique_ptr<PBQPNum []> Data;
 };
 
-/// \brief Return a hash_code for the given matrix.
+/// Return a hash_code for the given matrix.
 inline hash_code hash_value(const Matrix &M) {
   unsigned *MBegin = reinterpret_cast<unsigned*>(M.Data.get());
   unsigned *MEnd =
@@ -242,7 +242,7 @@
   return hash_combine(M.Rows, M.Cols, hash_combine_range(MBegin, MEnd));
 }
 
-/// \brief Output a textual representation of the given matrix on the given
+/// Output a textual representation of the given matrix on the given
 ///        output stream.
 template <typename OStream>
 OStream& operator<<(OStream &OS, const Matrix &M) {
diff --git a/linux-x64/clang/include/llvm/CodeGen/PBQP/ReductionRules.h b/linux-x64/clang/include/llvm/CodeGen/PBQP/ReductionRules.h
index 8aeb519..21b9902 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PBQP/ReductionRules.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PBQP/ReductionRules.h
@@ -23,7 +23,7 @@
 namespace llvm {
 namespace PBQP {
 
-  /// \brief Reduce a node of degree one.
+  /// Reduce a node of degree one.
   ///
   /// Propagate costs from the given node, which must be of degree one, to its
   /// neighbor. Notify the problem domain.
@@ -166,7 +166,7 @@
   }
 #endif
 
-  // \brief Find a solution to a fully reduced graph by backpropagation.
+  // Find a solution to a fully reduced graph by backpropagation.
   //
   // Given a graph and a reduction order, pop each node from the reduction
   // order and greedily compute a minimum solution based on the node costs, and
diff --git a/linux-x64/clang/include/llvm/CodeGen/PBQP/Solution.h b/linux-x64/clang/include/llvm/CodeGen/PBQP/Solution.h
index 6a24727..4d4379f 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PBQP/Solution.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PBQP/Solution.h
@@ -21,7 +21,7 @@
 namespace llvm {
 namespace PBQP {
 
-  /// \brief Represents a solution to a PBQP problem.
+  /// Represents a solution to a PBQP problem.
   ///
   /// To get the selection for each node in the problem use the getSelection method.
   class Solution {
@@ -30,17 +30,17 @@
     SelectionsMap selections;
 
   public:
-    /// \brief Initialise an empty solution.
+    /// Initialise an empty solution.
     Solution() = default;
 
-    /// \brief Set the selection for a given node.
+    /// Set the selection for a given node.
     /// @param nodeId Node id.
     /// @param selection Selection for nodeId.
     void setSelection(GraphBase::NodeId nodeId, unsigned selection) {
       selections[nodeId] = selection;
     }
 
-    /// \brief Get a node's selection.
+    /// Get a node's selection.
     /// @param nodeId Node id.
     /// @return The selection for nodeId;
     unsigned getSelection(GraphBase::NodeId nodeId) const {
diff --git a/linux-x64/clang/include/llvm/CodeGen/PBQPRAConstraint.h b/linux-x64/clang/include/llvm/CodeGen/PBQPRAConstraint.h
index 269b7a7..995467d 100644
--- a/linux-x64/clang/include/llvm/CodeGen/PBQPRAConstraint.h
+++ b/linux-x64/clang/include/llvm/CodeGen/PBQPRAConstraint.h
@@ -33,7 +33,7 @@
 
 using PBQPRAGraph = PBQP::RegAlloc::PBQPRAGraph;
 
-/// @brief Abstract base for classes implementing PBQP register allocation
+/// Abstract base for classes implementing PBQP register allocation
 ///        constraints (e.g. Spill-costs, interference, coalescing).
 class PBQPRAConstraint {
 public:
@@ -44,7 +44,7 @@
   virtual void anchor();
 };
 
-/// @brief PBQP register allocation constraint composer.
+/// PBQP register allocation constraint composer.
 ///
 ///   Constraints added to this list will be applied, in the order that they are
 /// added, to the PBQP graph.
diff --git a/linux-x64/clang/include/llvm/CodeGen/ParallelCG.h b/linux-x64/clang/include/llvm/CodeGen/ParallelCG.h
index 14ef0ec..dbf09ea 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ParallelCG.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ParallelCG.h
@@ -40,7 +40,7 @@
 splitCodeGen(std::unique_ptr<Module> M, ArrayRef<raw_pwrite_stream *> OSs,
              ArrayRef<llvm::raw_pwrite_stream *> BCOSs,
              const std::function<std::unique_ptr<TargetMachine>()> &TMFactory,
-             TargetMachine::CodeGenFileType FT = TargetMachine::CGFT_ObjectFile,
+             TargetMachine::CodeGenFileType FileType = TargetMachine::CGFT_ObjectFile,
              bool PreserveLocals = false);
 
 } // namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/Passes.h b/linux-x64/clang/include/llvm/CodeGen/Passes.h
index 68fd04b..cb12b14 100644
--- a/linux-x64/clang/include/llvm/CodeGen/Passes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/Passes.h
@@ -301,7 +301,7 @@
   /// StackSlotColoring - This pass performs stack slot coloring.
   extern char &StackSlotColoringID;
 
-  /// \brief This pass lays out funclets contiguously.
+  /// This pass lays out funclets contiguously.
   extern char &FuncletLayoutID;
 
   /// This pass inserts the XRay instrumentation sleds if they are supported by
@@ -311,7 +311,7 @@
   /// This pass inserts FEntry calls
   extern char &FEntryInserterID;
 
-  /// \brief This pass implements the "patchable-function" attribute.
+  /// This pass implements the "patchable-function" attribute.
   extern char &PatchableFunctionID;
 
   /// createStackProtectorPass - This pass adds stack protectors to functions.
@@ -329,13 +329,17 @@
 
   /// createWinEHPass - Prepares personality functions used by MSVC on Windows,
   /// in addition to the Itanium LSDA based personalities.
-  FunctionPass *createWinEHPass();
+  FunctionPass *createWinEHPass(bool DemoteCatchSwitchPHIOnly = false);
 
   /// createSjLjEHPreparePass - This pass adapts exception handling code to use
   /// the GCC-style builtin setjmp/longjmp (sjlj) to handling EH control flow.
   ///
   FunctionPass *createSjLjEHPreparePass();
 
+  /// createWasmEHPass - This pass adapts exception handling code to use
+  /// WebAssembly's exception handling scheme.
+  FunctionPass *createWasmEHPass();
+
   /// LocalStackSlotAllocation - This pass assigns local frame indices to stack
   /// slots relative to one another and allocates base registers to access them
   /// when it is estimated by the target to be out of range of normal frame
@@ -380,7 +384,7 @@
   ///
   ModulePass *createLowerEmuTLSPass();
 
-  /// This pass lowers the @llvm.load.relative intrinsic to instructions.
+  /// This pass lowers the \@llvm.load.relative intrinsic to instructions.
   /// This is unsafe to do earlier because a pass may combine the constant
   /// initializer into the load, which may result in an overflowing evaluation.
   ModulePass *createPreISelIntrinsicLoweringPass();
@@ -419,7 +423,7 @@
 
   /// This pass performs outlining on machine instructions directly before
   /// printing assembly.
-  ModulePass *createMachineOutlinerPass(bool OutlineFromLinkOnceODRs = false);
+  ModulePass *createMachineOutlinerPass(bool RunOnAllFunctions = true);
 
   /// This pass expands the experimental reduction intrinsics into sequences of
   /// shuffles.
@@ -434,6 +438,9 @@
   // This pass expands indirectbr instructions.
   FunctionPass *createIndirectBrExpandPass();
 
+  /// Creates CFI Instruction Inserter pass. \see CFIInstrInserter.cpp
+  FunctionPass *createCFIInstrInserter();
+
 } // End llvm namespace
 
 #endif
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegAllocPBQP.h b/linux-x64/clang/include/llvm/CodeGen/RegAllocPBQP.h
index 5b34286..ba97630 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegAllocPBQP.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegAllocPBQP.h
@@ -43,10 +43,10 @@
 namespace PBQP {
 namespace RegAlloc {
 
-/// @brief Spill option index.
+/// Spill option index.
 inline unsigned getSpillOptionIdx() { return 0; }
 
-/// \brief Metadata to speed allocatability test.
+/// Metadata to speed allocatability test.
 ///
 /// Keeps track of the number of infinities in each row and column.
 class MatrixMetadata {
@@ -89,7 +89,7 @@
   std::unique_ptr<bool[]> UnsafeCols;
 };
 
-/// \brief Holds a vector of the allowed physical regs for a vreg.
+/// Holds a vector of the allowed physical regs for a vreg.
 class AllowedRegVector {
   friend hash_code hash_value(const AllowedRegVector &);
 
@@ -127,7 +127,7 @@
                       hash_combine_range(OStart, OEnd));
 }
 
-/// \brief Holds graph-level metadata relevant to PBQP RA problems.
+/// Holds graph-level metadata relevant to PBQP RA problems.
 class GraphMetadata {
 private:
   using AllowedRegVecPool = ValuePool<AllowedRegVector>;
@@ -164,7 +164,7 @@
   AllowedRegVecPool AllowedRegVecs;
 };
 
-/// \brief Holds solver state and other metadata relevant to each PBQP RA node.
+/// Holds solver state and other metadata relevant to each PBQP RA node.
 class NodeMetadata {
 public:
   using AllowedRegVector = RegAlloc::AllowedRegVector;
@@ -505,14 +505,14 @@
 public:
   PBQPRAGraph(GraphMetadata Metadata) : BaseT(std::move(Metadata)) {}
 
-  /// @brief Dump this graph to dbgs().
+  /// Dump this graph to dbgs().
   void dump() const;
 
-  /// @brief Dump this graph to an output stream.
+  /// Dump this graph to an output stream.
   /// @param OS Output stream to print on.
   void dump(raw_ostream &OS) const;
 
-  /// @brief Print a representation of this graph in DOT format.
+  /// Print a representation of this graph in DOT format.
   /// @param OS Output stream to print on.
   void printDot(raw_ostream &OS) const;
 };
@@ -527,7 +527,7 @@
 } // end namespace RegAlloc
 } // end namespace PBQP
 
-/// @brief Create a PBQP register allocator instance.
+/// Create a PBQP register allocator instance.
 FunctionPass *
 createPBQPRegisterAllocator(char *customPassID = nullptr);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegisterPressure.h b/linux-x64/clang/include/llvm/CodeGen/RegisterPressure.h
index 2b14b78..79054b9 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegisterPressure.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegisterPressure.h
@@ -171,10 +171,10 @@
 public:
   /// List of virtual registers and register units read by the instruction.
   SmallVector<RegisterMaskPair, 8> Uses;
-  /// \brief List of virtual registers and register units defined by the
+  /// List of virtual registers and register units defined by the
   /// instruction which are not dead.
   SmallVector<RegisterMaskPair, 8> Defs;
-  /// \brief List of virtual registers and register units defined by the
+  /// List of virtual registers and register units defined by the
   /// instruction but dead.
   SmallVector<RegisterMaskPair, 8> DeadDefs;
 
@@ -219,7 +219,7 @@
     return const_cast<PressureDiffs*>(this)->operator[](Idx);
   }
 
-  /// \brief Record pressure difference induced by the given operand list to
+  /// Record pressure difference induced by the given operand list to
   /// node with index \p Idx.
   void addInstruction(unsigned Idx, const RegisterOperands &RegOpers,
                       const MachineRegisterInfo &MRI);
@@ -546,7 +546,7 @@
   /// Add Reg to the live in set and increase max pressure.
   void discoverLiveIn(RegisterMaskPair Pair);
 
-  /// \brief Get the SlotIndex for the first nondebug instruction including or
+  /// Get the SlotIndex for the first nondebug instruction including or
   /// after the current position.
   SlotIndex getCurrSlot() const;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h b/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
index 489c72b..b6bd028 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegisterScavenging.h
@@ -127,7 +127,7 @@
 
   /// Find an unused register of the specified register class.
   /// Return 0 if none is found.
-  unsigned FindUnusedReg(const TargetRegisterClass *RegClass) const;
+  unsigned FindUnusedReg(const TargetRegisterClass *RC) const;
 
   /// Add a scavenging frame index.
   void addScavengingFrameIndex(int FI) {
@@ -158,7 +158,7 @@
   /// Returns the scavenged register.
   /// This is deprecated as it depends on the quality of the kill flags being
   /// present; Use scavengeRegisterBackwards() instead!
-  unsigned scavengeRegister(const TargetRegisterClass *RegClass,
+  unsigned scavengeRegister(const TargetRegisterClass *RC,
                             MachineBasicBlock::iterator I, int SPAdj);
   unsigned scavengeRegister(const TargetRegisterClass *RegClass, int SPAdj) {
     return scavengeRegister(RegClass, MBBI, SPAdj);
@@ -218,7 +218,7 @@
   /// Spill a register after position \p After and reload it before position
   /// \p UseMI.
   ScavengedInfo &spill(unsigned Reg, const TargetRegisterClass &RC, int SPAdj,
-                       MachineBasicBlock::iterator After,
+                       MachineBasicBlock::iterator Before,
                        MachineBasicBlock::iterator &UseMI);
 };
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/RegisterUsageInfo.h b/linux-x64/clang/include/llvm/CodeGen/RegisterUsageInfo.h
index eabadd8..efd175e 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RegisterUsageInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RegisterUsageInfo.h
@@ -19,6 +19,7 @@
 #ifndef LLVM_CODEGEN_PHYSICALREGISTERUSAGEINFO_H
 #define LLVM_CODEGEN_PHYSICALREGISTERUSAGEINFO_H
 
+#include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/Pass.h"
@@ -31,8 +32,6 @@
 class TargetMachine;
 
 class PhysicalRegisterUsageInfo : public ImmutablePass {
-  virtual void anchor();
-
 public:
   static char ID;
 
@@ -41,25 +40,20 @@
     initializePhysicalRegisterUsageInfoPass(Registry);
   }
 
-  void getAnalysisUsage(AnalysisUsage &AU) const override {
-    AU.setPreservesAll();
-  }
-
-  /// To set TargetMachine *, which is used to print
-  /// analysis when command line option -print-regusage is used.
-  void setTargetMachine(const TargetMachine *TM_) { TM = TM_; }
+  /// Set TargetMachine which is used to print analysis.
+  void setTargetMachine(const TargetMachine &TM);
 
   bool doInitialization(Module &M) override;
 
   bool doFinalization(Module &M) override;
 
   /// To store RegMask for given Function *.
-  void storeUpdateRegUsageInfo(const Function *FP,
-                               std::vector<uint32_t> RegMask);
+  void storeUpdateRegUsageInfo(const Function &FP,
+                               ArrayRef<uint32_t> RegMask);
 
-  /// To query stored RegMask for given Function *, it will return nullptr if
-  /// function is not known.
-  const std::vector<uint32_t> *getRegUsageInfo(const Function *FP);
+  /// To query stored RegMask for given Function *, it will returns ane empty
+  /// array if function is not known.
+  ArrayRef<uint32_t> getRegUsageInfo(const Function &FP);
 
   void print(raw_ostream &OS, const Module *M = nullptr) const override;
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/ResourcePriorityQueue.h b/linux-x64/clang/include/llvm/CodeGen/ResourcePriorityQueue.h
index 03166cc..8d582ee 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ResourcePriorityQueue.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ResourcePriorityQueue.h
@@ -32,7 +32,7 @@
     ResourcePriorityQueue *PQ;
     explicit resource_sort(ResourcePriorityQueue *pq) : PQ(pq) {}
 
-    bool operator()(const SUnit* left, const SUnit* right) const;
+    bool operator()(const SUnit* LHS, const SUnit* RHS) const;
   };
 
   class ResourcePriorityQueue : public SchedulingPriorityQueue {
@@ -121,7 +121,7 @@
     void remove(SUnit *SU) override;
 
     /// scheduledNode - Main resource tracking point.
-    void scheduledNode(SUnit *Node) override;
+    void scheduledNode(SUnit *SU) override;
     bool isResourceAvailable(SUnit *SU);
     void reserveResources(SUnit *SU);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.h b/linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.h
index 016bef1..28567a1 100644
--- a/linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.h
+++ b/linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.h
@@ -29,7 +29,7 @@
   ///
   enum Libcall {
 #define HANDLE_LIBCALL(code, name) code,
-    #include "RuntimeLibcalls.def"
+    #include "llvm/IR/RuntimeLibcalls.def"
 #undef HANDLE_LIBCALL
   };
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
index f3f2f05..56adc2e 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAG.h
@@ -76,7 +76,7 @@
     };
 
   private:
-    /// \brief A pointer to the depending/depended-on SUnit, and an enum
+    /// A pointer to the depending/depended-on SUnit, and an enum
     /// indicating the kind of the dependency.
     PointerIntPair<SUnit *, 2, Kind> Dep;
 
@@ -137,7 +137,7 @@
       return !operator==(Other);
     }
 
-    /// \brief Returns the latency value for this edge, which roughly means the
+    /// Returns the latency value for this edge, which roughly means the
     /// minimum number of cycles that must elapse between the predecessor and
     /// the successor, given that they have this edge between them.
     unsigned getLatency() const {
@@ -163,7 +163,7 @@
       return getKind() != Data;
     }
 
-    /// \brief Tests if this is an Order dependence between two memory accesses
+    /// Tests if this is an Order dependence between two memory accesses
     /// where both sides of the dependence access memory in non-volatile and
     /// fully modeled ways.
     bool isNormalMemory() const {
@@ -181,7 +181,7 @@
       return (isNormalMemory() || isBarrier());
     }
 
-    /// \brief Tests if this is an Order dependence that is marked as
+    /// Tests if this is an Order dependence that is marked as
     /// "must alias", meaning that the SUnits at either end of the edge have a
     /// memory dependence on a known memory location.
     bool isMustAlias() const {
@@ -196,13 +196,13 @@
       return getKind() == Order && Contents.OrdKind >= Weak;
     }
 
-    /// \brief Tests if this is an Order dependence that is marked as
+    /// Tests if this is an Order dependence that is marked as
     /// "artificial", meaning it isn't necessary for correctness.
     bool isArtificial() const {
       return getKind() == Order && Contents.OrdKind == Artificial;
     }
 
-    /// \brief Tests if this is an Order dependence that is marked as "cluster",
+    /// Tests if this is an Order dependence that is marked as "cluster",
     /// meaning it is artificial and wants to be adjacent.
     bool isCluster() const {
       return getKind() == Order && Contents.OrdKind == Cluster;
@@ -252,7 +252,7 @@
     MachineInstr *Instr = nullptr; ///< Alternatively, a MachineInstr.
 
   public:
-    SUnit *OrigNode = nullptr; ///< If not this, the node from which this node 
+    SUnit *OrigNode = nullptr; ///< If not this, the node from which this node
                                /// was cloned. (SD scheduling only)
 
     const MCSchedClassDesc *SchedClass =
@@ -308,7 +308,7 @@
         nullptr; ///< Is a special copy node if != nullptr.
     const TargetRegisterClass *CopySrcRC = nullptr;
 
-    /// \brief Constructs an SUnit for pre-regalloc scheduling to represent an
+    /// Constructs an SUnit for pre-regalloc scheduling to represent an
     /// SDNode and any nodes flagged to it.
     SUnit(SDNode *node, unsigned nodenum)
       : Node(node), NodeNum(nodenum), isVRegCycle(false), isCall(false),
@@ -319,7 +319,7 @@
         isUnbuffered(false), hasReservedResource(false), isDepthCurrent(false),
         isHeightCurrent(false) {}
 
-    /// \brief Constructs an SUnit for post-regalloc scheduling to represent a
+    /// Constructs an SUnit for post-regalloc scheduling to represent a
     /// MachineInstr.
     SUnit(MachineInstr *instr, unsigned nodenum)
       : Instr(instr), NodeNum(nodenum), isVRegCycle(false), isCall(false),
@@ -330,7 +330,7 @@
         isUnbuffered(false), hasReservedResource(false), isDepthCurrent(false),
         isHeightCurrent(false) {}
 
-    /// \brief Constructs a placeholder SUnit.
+    /// Constructs a placeholder SUnit.
     SUnit()
       : isVRegCycle(false), isCall(false), isCallOp(false), isTwoAddress(false),
         isCommutable(false), hasPhysRegUses(false), hasPhysRegDefs(false),
@@ -339,7 +339,7 @@
         isCloned(false), isUnbuffered(false), hasReservedResource(false),
         isDepthCurrent(false), isHeightCurrent(false) {}
 
-    /// \brief Boundary nodes are placeholders for the boundary of the
+    /// Boundary nodes are placeholders for the boundary of the
     /// scheduling region.
     ///
     /// BoundaryNodes can have DAG edges, including Data edges, but they do not
@@ -362,7 +362,7 @@
       return Node;
     }
 
-    /// \brief Returns true if this SUnit refers to a machine instruction as
+    /// Returns true if this SUnit refers to a machine instruction as
     /// opposed to an SDNode.
     bool isInstr() const { return Instr; }
 
@@ -384,7 +384,7 @@
     /// It also adds the current node as a successor of the specified node.
     bool addPred(const SDep &D, bool Required = true);
 
-    /// \brief Adds a barrier edge to SU by calling addPred(), with latency 0
+    /// Adds a barrier edge to SU by calling addPred(), with latency 0
     /// generally or latency 1 for a store followed by a load.
     bool addPredBarrier(SUnit *SU) {
       SDep Dep(SU, SDep::Barrier);
@@ -406,7 +406,7 @@
       return Depth;
     }
 
-    /// \brief Returns the height of this node, which is the length of the
+    /// Returns the height of this node, which is the length of the
     /// maximum path down to any node which has no successors.
     unsigned getHeight() const {
       if (!isHeightCurrent)
@@ -414,21 +414,21 @@
       return Height;
     }
 
-    /// \brief If NewDepth is greater than this node's depth value, sets it to
+    /// If NewDepth is greater than this node's depth value, sets it to
     /// be the new depth value. This also recursively marks successor nodes
     /// dirty.
     void setDepthToAtLeast(unsigned NewDepth);
 
-    /// \brief If NewDepth is greater than this node's depth value, set it to be
+    /// If NewDepth is greater than this node's depth value, set it to be
     /// the new height value. This also recursively marks predecessor nodes
     /// dirty.
     void setHeightToAtLeast(unsigned NewHeight);
 
-    /// \brief Sets a flag in this node to indicate that its stored Depth value
+    /// Sets a flag in this node to indicate that its stored Depth value
     /// will require recomputation the next time getDepth() is called.
     void setDepthDirty();
 
-    /// \brief Sets a flag in this node to indicate that its stored Height value
+    /// Sets a flag in this node to indicate that its stored Height value
     /// will require recomputation the next time getHeight() is called.
     void setHeightDirty();
 
@@ -455,15 +455,15 @@
       return NumSuccsLeft == 0;
     }
 
-    /// \brief Orders this node's predecessor edges such that the critical path
+    /// Orders this node's predecessor edges such that the critical path
     /// edge occurs first.
     void biasCriticalPath();
 
     void dump(const ScheduleDAG *G) const;
     void dumpAll(const ScheduleDAG *G) const;
     raw_ostream &print(raw_ostream &O,
-                       const SUnit *N = nullptr,
-                       const SUnit *X = nullptr) const;
+                       const SUnit *Entry = nullptr,
+                       const SUnit *Exit = nullptr) const;
     raw_ostream &print(raw_ostream &O, const ScheduleDAG *G) const;
 
   private:
@@ -497,7 +497,7 @@
 
   //===--------------------------------------------------------------------===//
 
-  /// \brief This interface is used to plug different priorities computation
+  /// This interface is used to plug different priorities computation
   /// algorithms into the list scheduler. It implements the interface of a
   /// standard priority queue, where nodes are inserted in arbitrary order and
   /// returned in priority order.  The computation of the priority and the
@@ -609,7 +609,7 @@
     virtual void addCustomGraphFeatures(GraphWriter<ScheduleDAG*> &) const {}
 
 #ifndef NDEBUG
-    /// \brief Verifies that all SUnits were scheduled and that their state is
+    /// Verifies that all SUnits were scheduled and that their state is
     /// consistent. Returns the number of scheduled SUnits.
     unsigned VerifyScheduledDAG(bool isBottomUp);
 #endif
@@ -708,7 +708,7 @@
     /// method.
     void DFS(const SUnit *SU, int UpperBound, bool& HasLoop);
 
-    /// \brief Reassigns topological indexes for the nodes in the DAG to
+    /// Reassigns topological indexes for the nodes in the DAG to
     /// preserve the topological ordering.
     void Shift(BitVector& Visited, int LowerBound, int UpperBound);
 
@@ -735,11 +735,11 @@
     /// Returns true if addPred(TargetSU, SU) creates a cycle.
     bool WillCreateCycle(SUnit *TargetSU, SUnit *SU);
 
-    /// \brief Updates the topological ordering to accommodate an edge to be
+    /// Updates the topological ordering to accommodate an edge to be
     /// added from SUnit \p X to SUnit \p Y.
     void AddPred(SUnit *Y, SUnit *X);
 
-    /// \brief Updates the topological ordering to accommodate an an edge to be
+    /// Updates the topological ordering to accommodate an an edge to be
     /// removed from the specified node \p N from the predecessors of the
     /// current node \p M.
     void RemovePred(SUnit *M, SUnit *N);
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
index 1488220..520a238 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScheduleDAGInstrs.h
@@ -190,7 +190,7 @@
     using SUList = std::list<SUnit *>;
 
   protected:
-    /// \brief A map from ValueType to SUList, used during DAG construction, as
+    /// A map from ValueType to SUList, used during DAG construction, as
     /// a means of remembering which SUs depend on which memory locations.
     class Value2SUsMap;
 
@@ -201,7 +201,7 @@
     void reduceHugeMemNodeMaps(Value2SUsMap &stores,
                                Value2SUsMap &loads, unsigned N);
 
-    /// \brief Adds a chain edge between SUa and SUb, but only if both
+    /// Adds a chain edge between SUa and SUb, but only if both
     /// AliasAnalysis and Target fail to deny the dependency.
     void addChainDependency(SUnit *SUa, SUnit *SUb,
                             unsigned Latency = 0);
@@ -286,7 +286,7 @@
     /// Cleans up after scheduling in the given block.
     virtual void finishBlock();
 
-    /// \brief Initialize the DAG and common scheduler state for a new
+    /// Initialize the DAG and common scheduler state for a new
     /// scheduling region. This does not actually create the DAG, only clears
     /// it. The scheduling driver may call BuildSchedGraph multiple times per
     /// scheduling region.
@@ -308,7 +308,7 @@
                          LiveIntervals *LIS = nullptr,
                          bool TrackLaneMasks = false);
 
-    /// \brief Adds dependencies from instructions in the current list of
+    /// Adds dependencies from instructions in the current list of
     /// instructions being scheduled to scheduling barrier. We want to make sure
     /// instructions which define registers that are either used by the
     /// terminator or are live-out are properly scheduled. This is especially
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScheduleDFS.h b/linux-x64/clang/include/llvm/CodeGen/ScheduleDFS.h
index d6a8c79..3ecc033 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScheduleDFS.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScheduleDFS.h
@@ -25,7 +25,7 @@
 
 class raw_ostream;
 
-/// \brief Represent the ILP of the subDAG rooted at a DAG node.
+/// Represent the ILP of the subDAG rooted at a DAG node.
 ///
 /// ILPValues summarize the DAG subtree rooted at each node. ILPValues are
 /// valid for all nodes regardless of their subtree membership.
@@ -62,13 +62,13 @@
   void dump() const;
 };
 
-/// \brief Compute the values of each DAG node for various metrics during DFS.
+/// Compute the values of each DAG node for various metrics during DFS.
 class SchedDFSResult {
   friend class SchedDFSImpl;
 
   static const unsigned InvalidSubtreeID = ~0u;
 
-  /// \brief Per-SUnit data computed during DFS for various metrics.
+  /// Per-SUnit data computed during DFS for various metrics.
   ///
   /// A node's SubtreeID is set to itself when it is visited to indicate that it
   /// is the root of a subtree. Later it is set to its parent to indicate an
@@ -81,7 +81,7 @@
     NodeData() = default;
   };
 
-  /// \brief Per-Subtree data computed during DFS.
+  /// Per-Subtree data computed during DFS.
   struct TreeData {
     unsigned ParentTreeID = InvalidSubtreeID;
     unsigned SubInstrCount = 0;
@@ -89,7 +89,7 @@
     TreeData() = default;
   };
 
-  /// \brief Record a connection between subtrees and the connection level.
+  /// Record a connection between subtrees and the connection level.
   struct Connection {
     unsigned TreeID;
     unsigned Level;
@@ -117,15 +117,15 @@
   SchedDFSResult(bool IsBU, unsigned lim)
     : IsBottomUp(IsBU), SubtreeLimit(lim) {}
 
-  /// \brief Get the node cutoff before subtrees are considered significant.
+  /// Get the node cutoff before subtrees are considered significant.
   unsigned getSubtreeLimit() const { return SubtreeLimit; }
 
-  /// \brief Return true if this DFSResult is uninitialized.
+  /// Return true if this DFSResult is uninitialized.
   ///
   /// resize() initializes DFSResult, while compute() populates it.
   bool empty() const { return DFSNodeData.empty(); }
 
-  /// \brief Clear the results.
+  /// Clear the results.
   void clear() {
     DFSNodeData.clear();
     DFSTreeData.clear();
@@ -133,37 +133,37 @@
     SubtreeConnectLevels.clear();
   }
 
-  /// \brief Initialize the result data with the size of the DAG.
+  /// Initialize the result data with the size of the DAG.
   void resize(unsigned NumSUnits) {
     DFSNodeData.resize(NumSUnits);
   }
 
-  /// \brief Compute various metrics for the DAG with given roots.
+  /// Compute various metrics for the DAG with given roots.
   void compute(ArrayRef<SUnit> SUnits);
 
-  /// \brief Get the number of instructions in the given subtree and its
+  /// Get the number of instructions in the given subtree and its
   /// children.
   unsigned getNumInstrs(const SUnit *SU) const {
     return DFSNodeData[SU->NodeNum].InstrCount;
   }
 
-  /// \brief Get the number of instructions in the given subtree not including
+  /// Get the number of instructions in the given subtree not including
   /// children.
   unsigned getNumSubInstrs(unsigned SubtreeID) const {
     return DFSTreeData[SubtreeID].SubInstrCount;
   }
 
-  /// \brief Get the ILP value for a DAG node.
+  /// Get the ILP value for a DAG node.
   ///
   /// A leaf node has an ILP of 1/1.
   ILPValue getILP(const SUnit *SU) const {
     return ILPValue(DFSNodeData[SU->NodeNum].InstrCount, 1 + SU->getDepth());
   }
 
-  /// \brief The number of subtrees detected in this DAG.
+  /// The number of subtrees detected in this DAG.
   unsigned getNumSubtrees() const { return SubtreeConnectLevels.size(); }
 
-  /// \brief Get the ID of the subtree the given DAG node belongs to.
+  /// Get the ID of the subtree the given DAG node belongs to.
   ///
   /// For convenience, if DFSResults have not been computed yet, give everything
   /// tree ID 0.
@@ -174,7 +174,7 @@
     return DFSNodeData[SU->NodeNum].SubtreeID;
   }
 
-  /// \brief Get the connection level of a subtree.
+  /// Get the connection level of a subtree.
   ///
   /// For bottom-up trees, the connection level is the latency depth (in cycles)
   /// of the deepest connection to another subtree.
@@ -182,7 +182,7 @@
     return SubtreeConnectLevels[SubtreeID];
   }
 
-  /// \brief Scheduler callback to update SubtreeConnectLevels when a tree is
+  /// Scheduler callback to update SubtreeConnectLevels when a tree is
   /// initially scheduled.
   void scheduleTree(unsigned SubtreeID);
 };
diff --git a/linux-x64/clang/include/llvm/CodeGen/ScoreboardHazardRecognizer.h b/linux-x64/clang/include/llvm/CodeGen/ScoreboardHazardRecognizer.h
index 466ab53..3f75d10 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ScoreboardHazardRecognizer.h
+++ b/linux-x64/clang/include/llvm/CodeGen/ScoreboardHazardRecognizer.h
@@ -106,7 +106,7 @@
   Scoreboard RequiredScoreboard;
 
 public:
-  ScoreboardHazardRecognizer(const InstrItineraryData *ItinData,
+  ScoreboardHazardRecognizer(const InstrItineraryData *II,
                              const ScheduleDAG *DAG,
                              const char *ParentDebugType = "");
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
index af43c9b..c691d44 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAG.h
@@ -73,6 +73,7 @@
 class MCSymbol;
 class OptimizationRemarkEmitter;
 class SDDbgValue;
+class SDDbgLabel;
 class SelectionDAG;
 class SelectionDAGTargetInfo;
 class TargetLibraryInfo;
@@ -148,6 +149,7 @@
   BumpPtrAllocator Alloc;
   SmallVector<SDDbgValue*, 32> DbgValues;
   SmallVector<SDDbgValue*, 32> ByvalParmDbgValues;
+  SmallVector<SDDbgLabel*, 4> DbgLabels;
   using DbgValMapType = DenseMap<const SDNode *, SmallVector<SDDbgValue *, 2>>;
   DbgValMapType DbgValMap;
 
@@ -164,7 +166,11 @@
       DbgValMap[Node].push_back(V);
   }
 
-  /// \brief Invalidate all DbgValues attached to the node and remove
+  void add(SDDbgLabel *L) {
+    DbgLabels.push_back(L);
+  }
+
+  /// Invalidate all DbgValues attached to the node and remove
   /// it from the Node-to-DbgValues map.
   void erase(const SDNode *Node);
 
@@ -172,13 +178,14 @@
     DbgValMap.clear();
     DbgValues.clear();
     ByvalParmDbgValues.clear();
+    DbgLabels.clear();
     Alloc.Reset();
   }
 
   BumpPtrAllocator &getAlloc() { return Alloc; }
 
   bool empty() const {
-    return DbgValues.empty() && ByvalParmDbgValues.empty();
+    return DbgValues.empty() && ByvalParmDbgValues.empty() && DbgLabels.empty();
   }
 
   ArrayRef<SDDbgValue*> getSDDbgValues(const SDNode *Node) {
@@ -189,11 +196,14 @@
   }
 
   using DbgIterator = SmallVectorImpl<SDDbgValue*>::iterator;
+  using DbgLabelIterator = SmallVectorImpl<SDDbgLabel*>::iterator;
 
   DbgIterator DbgBegin() { return DbgValues.begin(); }
   DbgIterator DbgEnd()   { return DbgValues.end(); }
   DbgIterator ByvalParmDbgBegin() { return ByvalParmDbgValues.begin(); }
   DbgIterator ByvalParmDbgEnd()   { return ByvalParmDbgValues.end(); }
+  DbgLabelIterator DbgLabelBegin() { return DbgLabels.begin(); }
+  DbgLabelIterator DbgLabelEnd()   { return DbgLabels.end(); }
 };
 
 void checkForCycles(const SelectionDAG *DAG, bool force = false);
@@ -255,7 +265,7 @@
   /// Pool allocation for misc. objects that are created once per SelectionDAG.
   BumpPtrAllocator Allocator;
 
-  /// Tracks dbg_value information through SDISel.
+  /// Tracks dbg_value and dbg_label information through SDISel.
   SDDbgInfo *DbgInfo;
 
   uint16_t NextPersistentId = 0;
@@ -372,7 +382,7 @@
   /// Prepare this SelectionDAG to process code in the given MachineFunction.
   void init(MachineFunction &NewMF, OptimizationRemarkEmitter &NewORE,
             Pass *PassPtr, const TargetLibraryInfo *LibraryInfo,
-            DivergenceAnalysis * DA);
+            DivergenceAnalysis * Divergence);
 
   void setFunctionLoweringInfo(FunctionLoweringInfo * FuncInfo) {
     FLI = FuncInfo;
@@ -486,7 +496,7 @@
   /// the graph.
   void Legalize();
 
-  /// \brief Transforms a SelectionDAG node and any operands to it into a node
+  /// Transforms a SelectionDAG node and any operands to it into a node
   /// that is compatible with the target instruction selector, as indicated by
   /// the TargetLowering object.
   ///
@@ -537,7 +547,7 @@
   //===--------------------------------------------------------------------===//
   // Node creation methods.
 
-  /// \brief Create a ConstantSDNode wrapping a constant value.
+  /// Create a ConstantSDNode wrapping a constant value.
   /// If VT is a vector type, the constant is splatted into a BUILD_VECTOR.
   ///
   /// If only legal types can be produced, this does the necessary
@@ -571,12 +581,12 @@
     return getConstant(Val, DL, VT, true, isOpaque);
   }
 
-  /// \brief Create a true or false constant of type \p VT using the target's
+  /// Create a true or false constant of type \p VT using the target's
   /// BooleanContent for type \p OpVT.
   SDValue getBoolConstant(bool V, const SDLoc &DL, EVT VT, EVT OpVT);
   /// @}
 
-  /// \brief Create a ConstantFPSDNode wrapping a constant value.
+  /// Create a ConstantFPSDNode wrapping a constant value.
   /// If VT is a vector type, the constant is splatted into a BUILD_VECTOR.
   ///
   /// If only legal types can be produced, this does the necessary
@@ -588,7 +598,7 @@
                         bool isTarget = false);
   SDValue getConstantFP(const APFloat &Val, const SDLoc &DL, EVT VT,
                         bool isTarget = false);
-  SDValue getConstantFP(const ConstantFP &CF, const SDLoc &DL, EVT VT,
+  SDValue getConstantFP(const ConstantFP &V, const SDLoc &DL, EVT VT,
                         bool isTarget = false);
   SDValue getTargetConstantFP(double Val, const SDLoc &DL, EVT VT) {
     return getConstantFP(Val, DL, VT, true);
@@ -748,7 +758,7 @@
     return getNode(ISD::BUILD_VECTOR, DL, VT, Ops);
   }
 
-  /// \brief Returns an ISD::VECTOR_SHUFFLE node semantically equivalent to
+  /// Returns an ISD::VECTOR_SHUFFLE node semantically equivalent to
   /// the shuffle node in input but with swapped operands.
   ///
   /// Example: shuffle A, B, <0,5,2,7> -> shuffle B, A, <4,1,6,3>
@@ -772,7 +782,7 @@
 
   /// Return the expression required to zero extend the Op
   /// value assuming it was the smaller SrcTy value.
-  SDValue getZeroExtendInReg(SDValue Op, const SDLoc &DL, EVT SrcTy);
+  SDValue getZeroExtendInReg(SDValue Op, const SDLoc &DL, EVT VT);
 
   /// Return an operation which will any-extend the low lanes of the operand
   /// into the specified vector type. For example,
@@ -800,10 +810,10 @@
   /// Create a bitwise NOT operation as (XOR Val, -1).
   SDValue getNOT(const SDLoc &DL, SDValue Val, EVT VT);
 
-  /// \brief Create a logical NOT operation as (XOR Val, BooleanOne).
+  /// Create a logical NOT operation as (XOR Val, BooleanOne).
   SDValue getLogicalNOT(const SDLoc &DL, SDValue Val, EVT VT);
 
-  /// \brief Create an add instruction with appropriate flags when used for
+  /// Create an add instruction with appropriate flags when used for
   /// addressing some offset of an object. i.e. if a load is split into multiple
   /// components, create an add nuw from the base pointer to the offset.
   SDValue getObjectPtrOffset(const SDLoc &SL, SDValue Op, int64_t Offset) {
@@ -869,17 +879,18 @@
                   ArrayRef<SDValue> Ops, const SDNodeFlags Flags = SDNodeFlags());
   SDValue getNode(unsigned Opcode, const SDLoc &DL, ArrayRef<EVT> ResultTys,
                   ArrayRef<SDValue> Ops);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList,
                   ArrayRef<SDValue> Ops);
 
   // Specialize based on number of operands.
   SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue N,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue Operand,
                   const SDNodeFlags Flags = SDNodeFlags());
   SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue N1,
                   SDValue N2, const SDNodeFlags Flags = SDNodeFlags());
   SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue N1,
-                  SDValue N2, SDValue N3);
+                  SDValue N2, SDValue N3,
+                  const SDNodeFlags Flags = SDNodeFlags());
   SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue N1,
                   SDValue N2, SDValue N3, SDValue N4);
   SDValue getNode(unsigned Opcode, const SDLoc &DL, EVT VT, SDValue N1,
@@ -887,15 +898,15 @@
 
   // Specialize again based on number of operands for nodes with a VTList
   // rather than a single VT.
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs, SDValue N);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs, SDValue N1,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList);
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList, SDValue N);
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList, SDValue N1,
                   SDValue N2);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs, SDValue N1,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList, SDValue N1,
                   SDValue N2, SDValue N3);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs, SDValue N1,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList, SDValue N1,
                   SDValue N2, SDValue N3, SDValue N4);
-  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTs, SDValue N1,
+  SDValue getNode(unsigned Opcode, const SDLoc &DL, SDVTList VTList, SDValue N1,
                   SDValue N2, SDValue N3, SDValue N4, SDValue N5);
 
   /// Compute a TokenFactor to force all the incoming stack arguments to be
@@ -917,6 +928,23 @@
                     SDValue Size, unsigned Align, bool isVol, bool isTailCall,
                     MachinePointerInfo DstPtrInfo);
 
+  SDValue getAtomicMemcpy(SDValue Chain, const SDLoc &dl, SDValue Dst,
+                          unsigned DstAlign, SDValue Src, unsigned SrcAlign,
+                          SDValue Size, Type *SizeTy, unsigned ElemSz,
+                          bool isTailCall, MachinePointerInfo DstPtrInfo,
+                          MachinePointerInfo SrcPtrInfo);
+
+  SDValue getAtomicMemmove(SDValue Chain, const SDLoc &dl, SDValue Dst,
+                           unsigned DstAlign, SDValue Src, unsigned SrcAlign,
+                           SDValue Size, Type *SizeTy, unsigned ElemSz,
+                           bool isTailCall, MachinePointerInfo DstPtrInfo,
+                           MachinePointerInfo SrcPtrInfo);
+
+  SDValue getAtomicMemset(SDValue Chain, const SDLoc &dl, SDValue Dst,
+                          unsigned DstAlign, SDValue Value, SDValue Size,
+                          Type *SizeTy, unsigned ElemSz, bool isTailCall,
+                          MachinePointerInfo DstPtrInfo);
+
   /// Helper function to make it easier to build SetCC's if you just
   /// have an ISD::CondCode instead of an SDValue.
   ///
@@ -1057,12 +1085,12 @@
                    MachineMemOperand *MMO);
   SDValue
   getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val, SDValue Ptr,
-                MachinePointerInfo PtrInfo, EVT TVT, unsigned Alignment = 0,
+                MachinePointerInfo PtrInfo, EVT SVT, unsigned Alignment = 0,
                 MachineMemOperand::Flags MMOFlags = MachineMemOperand::MONone,
                 const AAMDNodes &AAInfo = AAMDNodes());
   SDValue getTruncStore(SDValue Chain, const SDLoc &dl, SDValue Val,
-                        SDValue Ptr, EVT TVT, MachineMemOperand *MMO);
-  SDValue getIndexedStore(SDValue OrigStoe, const SDLoc &dl, SDValue Base,
+                        SDValue Ptr, EVT SVT, MachineMemOperand *MMO);
+  SDValue getIndexedStore(SDValue OrigStore, const SDLoc &dl, SDValue Base,
                           SDValue Offset, ISD::MemIndexedMode AM);
 
   /// Returns sum of the base pointer and offset.
@@ -1135,24 +1163,24 @@
   /// specified node to have the specified return type, Target opcode, and
   /// operands.  Note that target opcodes are stored as
   /// ~TargetOpcode in the node opcode field.  The resultant node is returned.
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT, SDValue Op1);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT);
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT, SDValue Op1);
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT,
                        SDValue Op1, SDValue Op2);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT,
                        SDValue Op1, SDValue Op2, SDValue Op3);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT,
                        ArrayRef<SDValue> Ops);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT1, EVT VT2);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT1,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT1, EVT VT2);
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT1,
                        EVT VT2, ArrayRef<SDValue> Ops);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT1,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT1,
                        EVT VT2, EVT VT3, ArrayRef<SDValue> Ops);
   SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT1,
                        EVT VT2, SDValue Op1);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, EVT VT1,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, EVT VT1,
                        EVT VT2, SDValue Op1, SDValue Op2);
-  SDNode *SelectNodeTo(SDNode *N, unsigned TargetOpc, SDVTList VTs,
+  SDNode *SelectNodeTo(SDNode *N, unsigned MachineOpc, SDVTList VTs,
                        ArrayRef<SDValue> Ops);
 
   /// This *mutates* the specified node to have the specified
@@ -1207,7 +1235,7 @@
                                 SDValue Operand, SDValue Subreg);
 
   /// Get the specified node if it's already available, or else return NULL.
-  SDNode *getNodeIfExists(unsigned Opcode, SDVTList VTs, ArrayRef<SDValue> Ops,
+  SDNode *getNodeIfExists(unsigned Opcode, SDVTList VTList, ArrayRef<SDValue> Ops,
                           const SDNodeFlags Flags = SDNodeFlags());
 
   /// Creates a SDDbgValue node.
@@ -1222,8 +1250,16 @@
 
   /// Creates a FrameIndex SDDbgValue node.
   SDDbgValue *getFrameIndexDbgValue(DIVariable *Var, DIExpression *Expr,
-                                    unsigned FI, const DebugLoc &DL,
-                                    unsigned O);
+                                    unsigned FI, bool IsIndirect,
+                                    const DebugLoc &DL, unsigned O);
+
+  /// Creates a VReg SDDbgValue node.
+  SDDbgValue *getVRegDbgValue(DIVariable *Var, DIExpression *Expr,
+                              unsigned VReg, bool IsIndirect,
+                              const DebugLoc &DL, unsigned O);
+
+  /// Creates a SDDbgLabel node.
+  SDDbgLabel *getDbgLabel(DILabel *Label, const DebugLoc &DL, unsigned O);
 
   /// Transfer debug values from one node to another, while optionally
   /// generating fragment expressions for split-up values. If \p InvalidateDbg
@@ -1255,7 +1291,7 @@
   /// to be given new uses. These new uses of From are left in place, and
   /// not automatically transferred to To.
   ///
-  void ReplaceAllUsesWith(SDValue From, SDValue Op);
+  void ReplaceAllUsesWith(SDValue From, SDValue To);
   void ReplaceAllUsesWith(SDNode *From, SDNode *To);
   void ReplaceAllUsesWith(SDNode *From, const SDValue *To);
 
@@ -1306,6 +1342,9 @@
   /// value is produced by SD.
   void AddDbgValue(SDDbgValue *DB, SDNode *SD, bool isParameter);
 
+  /// Add a dbg_label SDNode.
+  void AddDbgLabel(SDDbgLabel *DB);
+
   /// Get the debug values which reference the given SDNode.
   ArrayRef<SDDbgValue*> GetDbgValues(const SDNode* SD) {
     return DbgInfo->getSDDbgValues(SD);
@@ -1327,6 +1366,13 @@
     return DbgInfo->ByvalParmDbgEnd();
   }
 
+  SDDbgInfo::DbgLabelIterator DbgLabelBegin() {
+    return DbgInfo->DbgLabelBegin();
+  }
+  SDDbgInfo::DbgLabelIterator DbgLabelEnd() {
+    return DbgInfo->DbgLabelEnd();
+  }
+
   /// To be invoked on an SDNode that is slated to be erased. This
   /// function mirrors \c llvm::salvageDebugInfo.
   void salvageDebugInfo(SDNode &N);
@@ -1438,11 +1484,21 @@
   ///     X|Cst == X+Cst iff X&Cst = 0.
   bool isBaseWithConstantOffset(SDValue Op) const;
 
-  /// Test whether the given SDValue is known to never be NaN.
-  bool isKnownNeverNaN(SDValue Op) const;
+  /// Test whether the given SDValue is known to never be NaN. If \p SNaN is
+  /// true, returns if \p Op is known to never be a signaling NaN (it may still
+  /// be a qNaN).
+  bool isKnownNeverNaN(SDValue Op, bool SNaN = false, unsigned Depth = 0) const;
 
-  /// Test whether the given SDValue is known to never be positive or negative
-  /// zero.
+  /// \returns true if \p Op is known to never be a signaling NaN.
+  bool isKnownNeverSNaN(SDValue Op, unsigned Depth = 0) const {
+    return isKnownNeverNaN(Op, true, Depth);
+  }
+
+  /// Test whether the given floating point SDValue is known to never be
+  /// positive or negative zero.
+  bool isKnownNeverZeroFloat(SDValue Op) const;
+
+  /// Test whether the given SDValue is known to contain non-zero value(s).
   bool isKnownNeverZero(SDValue Op) const;
 
   /// Test whether two SDValues are known to compare equal. This
@@ -1454,6 +1510,15 @@
   /// allow an 'add' to be transformed into an 'or'.
   bool haveNoCommonBitsSet(SDValue A, SDValue B) const;
 
+  /// Match a binop + shuffle pyramid that represents a horizontal reduction
+  /// over the elements of a vector starting from the EXTRACT_VECTOR_ELT node /p
+  /// Extract. The reduction must use one of the opcodes listed in /p
+  /// CandidateBinOps and on success /p BinOp will contain the matching opcode.
+  /// Returns the vector that is being reduced on, or SDValue() if a reduction
+  /// was not matched.
+  SDValue matchBinOpReduction(SDNode *Extract, ISD::NodeType &BinOp,
+                              ArrayRef<ISD::NodeType> CandidateBinOps);
+
   /// Utility function used by legalize and lowering to
   /// "unroll" a vector operation by splitting out the scalars and operating
   /// on each element individually.  If the ResNE is 0, fully unroll the vector
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
index e56eafc..86df0af 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGISel.h
@@ -280,7 +280,7 @@
   void SelectCodeCommon(SDNode *NodeToMatch, const unsigned char *MatcherTable,
                         unsigned TableSize);
 
-  /// \brief Return true if complex patterns for this target can mutate the
+  /// Return true if complex patterns for this target can mutate the
   /// DAG.
   virtual bool ComplexPatternFuncMutatesDAG() const {
     return false;
@@ -292,14 +292,14 @@
 
   // Calls to these functions are generated by tblgen.
   void Select_INLINEASM(SDNode *N);
-  void Select_READ_REGISTER(SDNode *N);
-  void Select_WRITE_REGISTER(SDNode *N);
+  void Select_READ_REGISTER(SDNode *Op);
+  void Select_WRITE_REGISTER(SDNode *Op);
   void Select_UNDEF(SDNode *N);
   void CannotYetSelect(SDNode *N);
 
 private:
   void DoInstructionSelection();
-  SDNode *MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTs,
+  SDNode *MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,
                     ArrayRef<SDValue> Ops, unsigned EmitNodeInfo);
 
   SDNode *MutateStrictFPToFP(SDNode *Node, unsigned NewOpc);
@@ -309,10 +309,10 @@
   /// instruction selected, false if no code should be emitted for it.
   bool PrepareEHLandingPad();
 
-  /// \brief Perform instruction selection on all basic blocks in the function.
+  /// Perform instruction selection on all basic blocks in the function.
   void SelectAllBasicBlocks(const Function &Fn);
 
-  /// \brief Perform instruction selection on a single basic block, for
+  /// Perform instruction selection on a single basic block, for
   /// instructions between \p Begin and \p End.  \p HadTailCall will be set
   /// to true if a call in the block was translated as a tail call.
   void SelectBasicBlock(BasicBlock::const_iterator Begin,
@@ -322,7 +322,7 @@
 
   void CodeGenAndEmitDAG();
 
-  /// \brief Generate instructions for lowering the incoming arguments of the
+  /// Generate instructions for lowering the incoming arguments of the
   /// given function.
   void LowerArguments(const Function &F);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
index ffb5c00..a6d7e76 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SelectionDAGNodes.h
@@ -37,6 +37,7 @@
 #include "llvm/IR/Instruction.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/Metadata.h"
+#include "llvm/IR/Operator.h"
 #include "llvm/Support/AlignOf.h"
 #include "llvm/Support/AtomicOrdering.h"
 #include "llvm/Support/Casting.h"
@@ -359,21 +360,34 @@
   bool NoUnsignedWrap : 1;
   bool NoSignedWrap : 1;
   bool Exact : 1;
-  bool UnsafeAlgebra : 1;
   bool NoNaNs : 1;
   bool NoInfs : 1;
   bool NoSignedZeros : 1;
   bool AllowReciprocal : 1;
   bool VectorReduction : 1;
   bool AllowContract : 1;
+  bool ApproximateFuncs : 1;
+  bool AllowReassociation : 1;
 
 public:
   /// Default constructor turns off all optimization flags.
   SDNodeFlags()
       : AnyDefined(false), NoUnsignedWrap(false), NoSignedWrap(false),
-        Exact(false), UnsafeAlgebra(false), NoNaNs(false), NoInfs(false),
+        Exact(false), NoNaNs(false), NoInfs(false),
         NoSignedZeros(false), AllowReciprocal(false), VectorReduction(false),
-        AllowContract(false) {}
+        AllowContract(false), ApproximateFuncs(false),
+        AllowReassociation(false) {}
+
+  /// Propagate the fast-math-flags from an IR FPMathOperator.
+  void copyFMF(const FPMathOperator &FPMO) {
+    setNoNaNs(FPMO.hasNoNaNs());
+    setNoInfs(FPMO.hasNoInfs());
+    setNoSignedZeros(FPMO.hasNoSignedZeros());
+    setAllowReciprocal(FPMO.hasAllowReciprocal());
+    setAllowContract(FPMO.hasAllowContract());
+    setApproximateFuncs(FPMO.hasApproxFunc());
+    setAllowReassociation(FPMO.hasAllowReassoc());
+  }
 
   /// Sets the state of the flags to the defined state.
   void setDefined() { AnyDefined = true; }
@@ -393,10 +407,6 @@
     setDefined();
     Exact = b;
   }
-  void setUnsafeAlgebra(bool b) {
-    setDefined();
-    UnsafeAlgebra = b;
-  }
   void setNoNaNs(bool b) {
     setDefined();
     NoNaNs = b;
@@ -421,18 +431,32 @@
     setDefined();
     AllowContract = b;
   }
+  void setApproximateFuncs(bool b) {
+    setDefined();
+    ApproximateFuncs = b;
+  }
+  void setAllowReassociation(bool b) {
+    setDefined();
+    AllowReassociation = b;
+  }
 
   // These are accessors for each flag.
   bool hasNoUnsignedWrap() const { return NoUnsignedWrap; }
   bool hasNoSignedWrap() const { return NoSignedWrap; }
   bool hasExact() const { return Exact; }
-  bool hasUnsafeAlgebra() const { return UnsafeAlgebra; }
   bool hasNoNaNs() const { return NoNaNs; }
   bool hasNoInfs() const { return NoInfs; }
   bool hasNoSignedZeros() const { return NoSignedZeros; }
   bool hasAllowReciprocal() const { return AllowReciprocal; }
   bool hasVectorReduction() const { return VectorReduction; }
   bool hasAllowContract() const { return AllowContract; }
+  bool hasApproximateFuncs() const { return ApproximateFuncs; }
+  bool hasAllowReassociation() const { return AllowReassociation; }
+
+  bool isFast() const {
+    return NoSignedZeros && AllowReciprocal && NoNaNs && NoInfs &&
+           AllowContract && ApproximateFuncs && AllowReassociation;
+  }
 
   /// Clear any flags in this flag set that aren't also set in Flags.
   /// If the given Flags are undefined then don't do anything.
@@ -442,13 +466,14 @@
     NoUnsignedWrap &= Flags.NoUnsignedWrap;
     NoSignedWrap &= Flags.NoSignedWrap;
     Exact &= Flags.Exact;
-    UnsafeAlgebra &= Flags.UnsafeAlgebra;
     NoNaNs &= Flags.NoNaNs;
     NoInfs &= Flags.NoInfs;
     NoSignedZeros &= Flags.NoSignedZeros;
     AllowReciprocal &= Flags.AllowReciprocal;
     VectorReduction &= Flags.VectorReduction;
     AllowContract &= Flags.AllowContract;
+    ApproximateFuncs &= Flags.ApproximateFuncs;
+    AllowReassociation &= Flags.AllowReassociation;
   }
 };
 
@@ -544,7 +569,7 @@
   static_assert(sizeof(ConstantSDNodeBitfields) <= 2, "field too wide");
   static_assert(sizeof(MemSDNodeBitfields) <= 2, "field too wide");
   static_assert(sizeof(LSBaseSDNodeBitfields) <= 2, "field too wide");
-  static_assert(sizeof(LoadSDNodeBitfields) <= 4, "field too wide");
+  static_assert(sizeof(LoadSDNodeBitfields) <= 2, "field too wide");
   static_assert(sizeof(StoreSDNodeBitfields) <= 2, "field too wide");
 
 private:
@@ -923,6 +948,7 @@
 
   const SDNodeFlags getFlags() const { return Flags; }
   void setFlags(SDNodeFlags NewFlags) { Flags = NewFlags; }
+  bool isFast() { return Flags.isFast(); }
 
   /// Clear any flags in this node that aren't also set in Flags.
   /// If Flags is not in a defined state then this has no effect.
@@ -1220,7 +1246,7 @@
 
 public:
   MemSDNode(unsigned Opc, unsigned Order, const DebugLoc &dl, SDVTList VTs,
-            EVT MemoryVT, MachineMemOperand *MMO);
+            EVT memvt, MachineMemOperand *MMO);
 
   bool readMem() const { return MMO->isLoad(); }
   bool writeMem() const { return MMO->isStore(); }
@@ -1472,9 +1498,8 @@
 
   const ConstantInt *Value;
 
-  ConstantSDNode(bool isTarget, bool isOpaque, const ConstantInt *val,
-                 const DebugLoc &DL, EVT VT)
-      : SDNode(isTarget ? ISD::TargetConstant : ISD::Constant, 0, DL,
+  ConstantSDNode(bool isTarget, bool isOpaque, const ConstantInt *val, EVT VT)
+      : SDNode(isTarget ? ISD::TargetConstant : ISD::Constant, 0, DebugLoc(),
                getSDVTList(VT)),
         Value(val) {
     ConstantSDNodeBits.IsOpaque = isOpaque;
@@ -1510,10 +1535,9 @@
 
   const ConstantFP *Value;
 
-  ConstantFPSDNode(bool isTarget, const ConstantFP *val, const DebugLoc &DL,
-                   EVT VT)
-      : SDNode(isTarget ? ISD::TargetConstantFP : ISD::ConstantFP, 0, DL,
-               getSDVTList(VT)),
+  ConstantFPSDNode(bool isTarget, const ConstantFP *val, EVT VT)
+      : SDNode(isTarget ? ISD::TargetConstantFP : ISD::ConstantFP, 0,
+               DebugLoc(), getSDVTList(VT)),
         Value(val) {}
 
 public:
@@ -1570,10 +1594,10 @@
 bool isBitwiseNot(SDValue V);
 
 /// Returns the SDNode if it is a constant splat BuildVector or constant int.
-ConstantSDNode *isConstOrConstSplat(SDValue V);
+ConstantSDNode *isConstOrConstSplat(SDValue N);
 
 /// Returns the SDNode if it is a constant splat BuildVector or constant float.
-ConstantFPSDNode *isConstOrConstSplatFP(SDValue V);
+ConstantFPSDNode *isConstOrConstSplatFP(SDValue N);
 
 class GlobalAddressSDNode : public SDNode {
   friend class SelectionDAG;
@@ -1584,7 +1608,7 @@
 
   GlobalAddressSDNode(unsigned Opc, unsigned Order, const DebugLoc &DL,
                       const GlobalValue *GA, EVT VT, int64_t o,
-                      unsigned char TargetFlags);
+                      unsigned char TF);
 
 public:
   const GlobalValue *getGlobal() const { return TheGlobal; }
@@ -1765,13 +1789,13 @@
                        unsigned MinSplatBits = 0,
                        bool isBigEndian = false) const;
 
-  /// \brief Returns the splatted value or a null value if this is not a splat.
+  /// Returns the splatted value or a null value if this is not a splat.
   ///
   /// If passed a non-null UndefElements bitvector, it will resize it to match
   /// the vector width and set the bits where elements are undef.
   SDValue getSplatValue(BitVector *UndefElements = nullptr) const;
 
-  /// \brief Returns the splatted constant or null if this is not a constant
+  /// Returns the splatted constant or null if this is not a constant
   /// splat.
   ///
   /// If passed a non-null UndefElements bitvector, it will resize it to match
@@ -1779,7 +1803,7 @@
   ConstantSDNode *
   getConstantSplatNode(BitVector *UndefElements = nullptr) const;
 
-  /// \brief Returns the splatted constant FP or null if this is not a constant
+  /// Returns the splatted constant FP or null if this is not a constant
   /// FP splat.
   ///
   /// If passed a non-null UndefElements bitvector, it will resize it to match
@@ -1787,7 +1811,7 @@
   ConstantFPSDNode *
   getConstantFPSplatNode(BitVector *UndefElements = nullptr) const;
 
-  /// \brief If this is a constant FP splat and the splatted constant FP is an
+  /// If this is a constant FP splat and the splatted constant FP is an
   /// exact power or 2, return the log base 2 integer value.  Otherwise,
   /// return -1.
   ///
@@ -2119,7 +2143,7 @@
     return static_cast<ISD::LoadExtType>(LoadSDNodeBits.ExtTy);
   }
 
-  const SDValue &getSrc0() const { return getOperand(3); }
+  const SDValue &getPassThru() const { return getOperand(3); }
   static bool classof(const SDNode *N) {
     return N->getOpcode() == ISD::MLOAD;
   }
@@ -2177,7 +2201,6 @@
   const SDValue &getBasePtr() const { return getOperand(3); }
   const SDValue &getIndex()   const { return getOperand(4); }
   const SDValue &getMask()    const { return getOperand(2); }
-  const SDValue &getValue()   const { return getOperand(1); }
   const SDValue &getScale()   const { return getOperand(5); }
 
   static bool classof(const SDNode *N) {
@@ -2196,6 +2219,8 @@
                      EVT MemVT, MachineMemOperand *MMO)
       : MaskedGatherScatterSDNode(ISD::MGATHER, Order, dl, VTs, MemVT, MMO) {}
 
+  const SDValue &getPassThru() const { return getOperand(1); }
+
   static bool classof(const SDNode *N) {
     return N->getOpcode() == ISD::MGATHER;
   }
@@ -2211,6 +2236,8 @@
                       EVT MemVT, MachineMemOperand *MMO)
       : MaskedGatherScatterSDNode(ISD::MSCATTER, Order, dl, VTs, MemVT, MMO) {}
 
+  const SDValue &getValue() const { return getOperand(1); }
+
   static bool classof(const SDNode *N) {
     return N->getOpcode() == ISD::MSCATTER;
   }
diff --git a/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h b/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
index 3a91e36..334267d 100644
--- a/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
+++ b/linux-x64/clang/include/llvm/CodeGen/SlotIndexes.h
@@ -578,9 +578,9 @@
       assert(!MI.isInsideBundle() &&
              "Instructions inside bundles should use bundle start's slot.");
       assert(mi2iMap.find(&MI) == mi2iMap.end() && "Instr already indexed.");
-      // Numbering DBG_VALUE instructions could cause code generation to be
+      // Numbering debug instructions could cause code generation to be
       // affected by debug information.
-      assert(!MI.isDebugValue() && "Cannot number DBG_VALUE instructions.");
+      assert(!MI.isDebugInstr() && "Cannot number debug instructions.");
 
       assert(MI.getParent() != nullptr && "Instr must be added to function.");
 
@@ -674,10 +674,10 @@
       idx2MBBMap.push_back(IdxMBBPair(startIdx, mbb));
 
       renumberIndexes(newItr);
-      std::sort(idx2MBBMap.begin(), idx2MBBMap.end(), Idx2MBBCompare());
+      llvm::sort(idx2MBBMap.begin(), idx2MBBMap.end(), Idx2MBBCompare());
     }
 
-    /// \brief Free the resources that were required to maintain a SlotIndex.
+    /// Free the resources that were required to maintain a SlotIndex.
     ///
     /// Once an index is no longer needed (for instance because the instruction
     /// at that index has been moved), the resources required to maintain the
diff --git a/linux-x64/clang/include/llvm/CodeGen/StackMaps.h b/linux-x64/clang/include/llvm/CodeGen/StackMaps.h
index 4407114..e584a41 100644
--- a/linux-x64/clang/include/llvm/CodeGen/StackMaps.h
+++ b/linux-x64/clang/include/llvm/CodeGen/StackMaps.h
@@ -29,7 +29,7 @@
 class raw_ostream;
 class TargetRegisterInfo;
 
-/// \brief MI-level stackmap operands.
+/// MI-level stackmap operands.
 ///
 /// MI stackmap operations take the form:
 /// <id>, <numBytes>, live args...
@@ -60,7 +60,7 @@
   }
 };
 
-/// \brief MI-level patchpoint operands.
+/// MI-level patchpoint operands.
 ///
 /// MI patchpoint operations take the form:
 /// [<def>], <id>, <numBytes>, <target>, <numArgs>, <cc>, ...
@@ -137,7 +137,7 @@
     return getVarIdx();
   }
 
-  /// \brief Get the next scratch register operand index.
+  /// Get the next scratch register operand index.
   unsigned getNextScratchIdx(unsigned StartIdx = 0) const;
 };
 
@@ -156,7 +156,7 @@
   // TODO:: we should change the STATEPOINT representation so that CC and
   // Flags should be part of meta operands, with args and deopt operands, and
   // gc operands all prefixed by their length and a type code. This would be
-  // much more consistent. 
+  // much more consistent.
 public:
   // These values are aboolute offsets into the operands of the statepoint
   // instruction.
@@ -236,15 +236,15 @@
     FnInfos.clear();
   }
 
-  /// \brief Generate a stackmap record for a stackmap instruction.
+  /// Generate a stackmap record for a stackmap instruction.
   ///
   /// MI must be a raw STACKMAP, not a PATCHPOINT.
   void recordStackMap(const MachineInstr &MI);
 
-  /// \brief Generate a stackmap record for a patchpoint instruction.
+  /// Generate a stackmap record for a patchpoint instruction.
   void recordPatchPoint(const MachineInstr &MI);
 
-  /// \brief Generate a stackmap record for a statepoint instruction.
+  /// Generate a stackmap record for a statepoint instruction.
   void recordStatepoint(const MachineInstr &MI);
 
   /// If there is any stack map data, create a stack map section and serialize
@@ -293,11 +293,11 @@
                MachineInstr::const_mop_iterator MOE, LocationVec &Locs,
                LiveOutVec &LiveOuts) const;
 
-  /// \brief Create a live-out register record for the given register @p Reg.
+  /// Create a live-out register record for the given register @p Reg.
   LiveOutReg createLiveOutReg(unsigned Reg,
                               const TargetRegisterInfo *TRI) const;
 
-  /// \brief Parse the register live-out mask and return a vector of live-out
+  /// Parse the register live-out mask and return a vector of live-out
   /// registers that need to be recorded in the stackmap.
   LiveOutVec parseRegisterLiveOutMask(const uint32_t *Mask) const;
 
@@ -311,16 +311,16 @@
                            MachineInstr::const_mop_iterator MOE,
                            bool recordResult = false);
 
-  /// \brief Emit the stackmap header.
+  /// Emit the stackmap header.
   void emitStackmapHeader(MCStreamer &OS);
 
-  /// \brief Emit the function frame record for each function.
+  /// Emit the function frame record for each function.
   void emitFunctionFrameRecords(MCStreamer &OS);
 
-  /// \brief Emit the constant pool.
+  /// Emit the constant pool.
   void emitConstantPoolEntries(MCStreamer &OS);
 
-  /// \brief Emit the callsite info for each stackmap/patchpoint intrinsic call.
+  /// Emit the callsite info for each stackmap/patchpoint intrinsic call.
   void emitCallsiteEntries(MCStreamer &OS);
 
   void print(raw_ostream &OS);
diff --git a/linux-x64/clang/include/llvm/CodeGen/StackProtector.h b/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
index 72de212..a506ac6 100644
--- a/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
+++ b/linux-x64/clang/include/llvm/CodeGen/StackProtector.h
@@ -19,6 +19,7 @@
 
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/Triple.h"
+#include "llvm/CodeGen/MachineFrameInfo.h"
 #include "llvm/IR/Instructions.h"
 #include "llvm/IR/ValueMap.h"
 #include "llvm/Pass.h"
@@ -35,24 +36,11 @@
 class Type;
 
 class StackProtector : public FunctionPass {
-public:
-  /// SSPLayoutKind.  Stack Smashing Protection (SSP) rules require that
-  /// vulnerable stack allocations are located close the stack protector.
-  enum SSPLayoutKind {
-    SSPLK_None,       ///< Did not trigger a stack protector.  No effect on data
-                      ///< layout.
-    SSPLK_LargeArray, ///< Array or nested array >= SSP-buffer-size.  Closest
-                      ///< to the stack protector.
-    SSPLK_SmallArray, ///< Array or nested array < SSP-buffer-size. 2nd closest
-                      ///< to the stack protector.
-    SSPLK_AddrOf      ///< The address of this allocation is exposed and
-                      ///< triggered protection.  3rd closest to the protector.
-  };
-
-  /// A mapping of AllocaInsts to their required SSP layout.
-  using SSPLayoutMap = ValueMap<const AllocaInst *, SSPLayoutKind>;
-
 private:
+  /// A mapping of AllocaInsts to their required SSP layout.
+  using SSPLayoutMap = DenseMap<const AllocaInst *,
+                                MachineFrameInfo::SSPLayoutKind>;
+
   const TargetMachine *TM = nullptr;
 
   /// TLI - Keep a pointer of a TargetLowering to consult for determining
@@ -70,7 +58,7 @@
   /// AllocaInst triggers a stack protector.
   SSPLayoutMap Layout;
 
-  /// \brief The minimum size of buffers that will receive stack smashing
+  /// The minimum size of buffers that will receive stack smashing
   /// protection when -fstack-protection is used.
   unsigned SSPBufferSize = 0;
 
@@ -107,7 +95,7 @@
   bool ContainsProtectableArray(Type *Ty, bool &IsLarge, bool Strong = false,
                                 bool InStruct = false) const;
 
-  /// \brief Check whether a stack allocation has its address taken.
+  /// Check whether a stack allocation has its address taken.
   bool HasAddressTaken(const Instruction *AI);
 
   /// RequiresStackProtector - Check whether or not this function needs a
@@ -123,14 +111,12 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override;
 
-  SSPLayoutKind getSSPLayout(const AllocaInst *AI) const;
-
   // Return true if StackProtector is supposed to be handled by SelectionDAG.
   bool shouldEmitSDCheck(const BasicBlock &BB) const;
 
-  void adjustForColoring(const AllocaInst *From, const AllocaInst *To);
-
   bool runOnFunction(Function &Fn) override;
+
+  void copyToMachineFrameInfo(MachineFrameInfo &MFI) const;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h b/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
index 61f1cf0..f8effee 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetFrameLowering.h
@@ -158,6 +158,10 @@
     return false;
   }
 
+  /// Returns true if the target can safely skip saving callee-saved registers
+  /// for noreturn nounwind functions.
+  virtual bool enableCalleeSaveSkip(const MachineFunction &MF) const;
+
   /// emitProlog/emitEpilog - These methods insert prolog and epilog code into
   /// the function.
   virtual void emitPrologue(MachineFunction &MF,
@@ -341,6 +345,14 @@
           return false;
     return true;
   }
+
+  /// Return initial CFA offset value i.e. the one valid at the beginning of the
+  /// function (before any stack operations).
+  virtual int getInitialCFAOffset(const MachineFunction &MF) const;
+
+  /// Return initial CFA register value i.e. the one valid at the beginning of
+  /// the function (before any stack operations).
+  virtual unsigned getInitialCFARegister(const MachineFunction &MF) const;
 };
 
 } // End llvm namespace
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
index 5c2a530..b5bc561 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetInstrInfo.h
@@ -18,12 +18,14 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseMapInfo.h"
 #include "llvm/ADT/None.h"
+#include "llvm/CodeGen/LiveRegUnits.h"
 #include "llvm/CodeGen/MachineBasicBlock.h"
 #include "llvm/CodeGen/MachineCombinerPattern.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/CodeGen/MachineLoopInfo.h"
 #include "llvm/CodeGen/MachineOperand.h"
+#include "llvm/CodeGen/MachineOutliner.h"
 #include "llvm/CodeGen/PseudoSourceValue.h"
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/Support/BranchProbability.h"
@@ -79,7 +81,7 @@
 
   /// Given a machine instruction descriptor, returns the register
   /// class constraint for OpNum, or NULL.
-  const TargetRegisterClass *getRegClass(const MCInstrDesc &TID, unsigned OpNum,
+  const TargetRegisterClass *getRegClass(const MCInstrDesc &MCID, unsigned OpNum,
                                          const TargetRegisterInfo *TRI,
                                          const MachineFunction &MF) const;
 
@@ -225,6 +227,17 @@
     return 0;
   }
 
+  /// Optional extension of isLoadFromStackSlot that returns the number of
+  /// bytes loaded from the stack. This must be implemented if a backend
+  /// supports partial stack slot spills/loads to further disambiguate
+  /// what the load does.
+  virtual unsigned isLoadFromStackSlot(const MachineInstr &MI,
+                                       int &FrameIndex,
+                                       unsigned &MemBytes) const {
+    MemBytes = 0;
+    return isLoadFromStackSlot(MI, FrameIndex);
+  }
+
   /// Check for post-frame ptr elimination stack locations as well.
   /// This uses a heuristic so it isn't reliable for correctness.
   virtual unsigned isLoadFromStackSlotPostFE(const MachineInstr &MI,
@@ -252,6 +265,17 @@
     return 0;
   }
 
+  /// Optional extension of isStoreToStackSlot that returns the number of
+  /// bytes stored to the stack. This must be implemented if a backend
+  /// supports partial stack slot spills/loads to further disambiguate
+  /// what the store does.
+  virtual unsigned isStoreToStackSlot(const MachineInstr &MI,
+                                      int &FrameIndex,
+                                      unsigned &MemBytes) const {
+    MemBytes = 0;
+    return isStoreToStackSlot(MI, FrameIndex);
+  }
+
   /// Check for post-frame ptr elimination stack locations as well.
   /// This uses a heuristic, so it isn't reliable for correctness.
   virtual unsigned isStoreToStackSlotPostFE(const MachineInstr &MI,
@@ -325,7 +349,7 @@
                              unsigned SubIdx, const MachineInstr &Orig,
                              const TargetRegisterInfo &TRI) const;
 
-  /// \brief Clones instruction or the whole instruction bundle \p Orig and
+  /// Clones instruction or the whole instruction bundle \p Orig and
   /// insert into \p MBB before \p InsertBefore. The target may update operands
   /// that are required to be unique.
   ///
@@ -822,6 +846,15 @@
     llvm_unreachable("Target didn't implement TargetInstrInfo::copyPhysReg!");
   }
 
+  /// If the specific machine instruction is a instruction that moves/copies
+  /// value from one register to another register return true along with
+  /// @Source machine operand and @Destination machine operand.
+  virtual bool isCopyInstr(const MachineInstr &MI,
+                           const MachineOperand *&SourceOpNum,
+                           const MachineOperand *&Destination) const {
+    return false;
+  }
+
   /// Store the specified register of the given register class to the specified
   /// stack frame index. The store instruction is to be added to the given
   /// machine basic block before the specified machine instruction. If isKill
@@ -876,7 +909,7 @@
   /// The new instruction is inserted before MI, and the client is responsible
   /// for removing the old instruction.
   MachineInstr *foldMemoryOperand(MachineInstr &MI, ArrayRef<unsigned> Ops,
-                                  int FrameIndex,
+                                  int FI,
                                   LiveIntervals *LIS = nullptr) const;
 
   /// Same as the previous version except it allows folding of any load and
@@ -928,13 +961,13 @@
   /// \param InsInstrs - Vector of new instructions that implement P
   /// \param DelInstrs - Old instructions, including Root, that could be
   /// replaced by InsInstr
-  /// \param InstrIdxForVirtReg - map of virtual register to instruction in
+  /// \param InstIdxForVirtReg - map of virtual register to instruction in
   /// InsInstr that defines it
   virtual void genAlternativeCodeSequence(
       MachineInstr &Root, MachineCombinerPattern Pattern,
       SmallVectorImpl<MachineInstr *> &InsInstrs,
       SmallVectorImpl<MachineInstr *> &DelInstrs,
-      DenseMap<unsigned, unsigned> &InstrIdxForVirtReg) const;
+      DenseMap<unsigned, unsigned> &InstIdxForVirtReg) const;
 
   /// Attempt to reassociate \P Root and \P Prev according to \P Pattern to
   /// reduce critical path length.
@@ -957,11 +990,6 @@
   /// even if it has glue.
   virtual bool canCopyGluedNodeDuringSchedule(SDNode *N) const { return false; }
 
-  /// Remember what registers the specified instruction uses and modifies.
-  virtual void trackRegDefsUses(const MachineInstr &MI, BitVector &ModifiedRegs,
-                                BitVector &UsedRegs,
-                                const TargetRegisterInfo *TRI) const;
-
 protected:
   /// Target-dependent implementation for foldMemoryOperand.
   /// Target-independent code in foldMemoryOperand will
@@ -988,7 +1016,7 @@
     return nullptr;
   }
 
-  /// \brief Target-dependent implementation of getRegSequenceInputs.
+  /// Target-dependent implementation of getRegSequenceInputs.
   ///
   /// \returns true if it is possible to build the equivalent
   /// REG_SEQUENCE inputs with the pair \p MI, \p DefIdx. False otherwise.
@@ -1002,7 +1030,7 @@
     return false;
   }
 
-  /// \brief Target-dependent implementation of getExtractSubregInputs.
+  /// Target-dependent implementation of getExtractSubregInputs.
   ///
   /// \returns true if it is possible to build the equivalent
   /// EXTRACT_SUBREG inputs with the pair \p MI, \p DefIdx. False otherwise.
@@ -1016,7 +1044,7 @@
     return false;
   }
 
-  /// \brief Target-dependent implementation of getInsertSubregInputs.
+  /// Target-dependent implementation of getInsertSubregInputs.
   ///
   /// \returns true if it is possible to build the equivalent
   /// INSERT_SUBREG inputs with the pair \p MI, \p DefIdx. False otherwise.
@@ -1438,7 +1466,7 @@
     return 0;
   }
 
-  /// \brief Return the minimum clearance before an instruction that reads an
+  /// Return the minimum clearance before an instruction that reads an
   /// unused register.
   ///
   /// For example, AVX instructions may copy part of a register operand into
@@ -1505,7 +1533,7 @@
     return false;
   }
 
-  /// \brief Return the value to use for the MachineCSE's LookAheadLimit,
+  /// Return the value to use for the MachineCSE's LookAheadLimit,
   /// which is a heuristic used for CSE'ing phys reg defs.
   virtual unsigned getMachineCSELookAheadLimit() const {
     // The default lookahead is small to prevent unprofitable quadratic
@@ -1574,71 +1602,32 @@
     return false;
   }
 
-  /// \brief Describes the number of instructions that it will take to call and
-  /// construct a frame for a given outlining candidate.
-  struct MachineOutlinerInfo {
-    /// Number of instructions to call an outlined function for this candidate.
-    unsigned CallOverhead;
-
-    /// \brief Number of instructions to construct an outlined function frame
-    /// for this candidate.
-    unsigned FrameOverhead;
-
-    /// \brief Represents the specific instructions that must be emitted to
-    /// construct a call to this candidate.
-    unsigned CallConstructionID;
-
-    /// \brief Represents the specific instructions that must be emitted to
-    /// construct a frame for this candidate's outlined function.
-    unsigned FrameConstructionID;
-
-    MachineOutlinerInfo() {}
-    MachineOutlinerInfo(unsigned CallOverhead, unsigned FrameOverhead,
-                        unsigned CallConstructionID,
-                        unsigned FrameConstructionID)
-        : CallOverhead(CallOverhead), FrameOverhead(FrameOverhead),
-          CallConstructionID(CallConstructionID),
-          FrameConstructionID(FrameConstructionID) {}
-  };
-
-  /// \brief Returns a \p MachineOutlinerInfo struct containing target-specific
+  /// Returns a \p outliner::OutlinedFunction struct containing target-specific
   /// information for a set of outlining candidates.
-  virtual MachineOutlinerInfo getOutlininingCandidateInfo(
-      std::vector<
-          std::pair<MachineBasicBlock::iterator, MachineBasicBlock::iterator>>
-          &RepeatedSequenceLocs) const {
+  virtual outliner::OutlinedFunction getOutliningCandidateInfo(
+      std::vector<outliner::Candidate> &RepeatedSequenceLocs) const {
     llvm_unreachable(
-        "Target didn't implement TargetInstrInfo::getOutliningOverhead!");
+        "Target didn't implement TargetInstrInfo::getOutliningCandidateInfo!");
   }
 
-  /// Represents how an instruction should be mapped by the outliner.
-  /// \p Legal instructions are those which are safe to outline.
-  /// \p Illegal instructions are those which cannot be outlined.
-  /// \p Invisible instructions are instructions which can be outlined, but
-  /// shouldn't actually impact the outlining result.
-  enum MachineOutlinerInstrType { Legal, Illegal, Invisible };
-
   /// Returns how or if \p MI should be outlined.
-  virtual MachineOutlinerInstrType
+  virtual outliner::InstrType
   getOutliningType(MachineBasicBlock::iterator &MIT, unsigned Flags) const {
     llvm_unreachable(
         "Target didn't implement TargetInstrInfo::getOutliningType!");
   }
 
-  /// \brief Returns target-defined flags defining properties of the MBB for
+  /// Returns target-defined flags defining properties of the MBB for
   /// the outliner.
   virtual unsigned getMachineOutlinerMBBFlags(MachineBasicBlock &MBB) const {
     return 0x0;
   }
 
-  /// Insert a custom epilogue for outlined functions.
-  /// This may be empty, in which case no epilogue or return statement will be
-  /// emitted.
-  virtual void insertOutlinerEpilogue(MachineBasicBlock &MBB,
-                                      MachineFunction &MF,
-                                      const MachineOutlinerInfo &MInfo) const {
+  /// Insert a custom frame for outlined functions.
+  virtual void buildOutlinedFrame(MachineBasicBlock &MBB, MachineFunction &MF,
+                                  const outliner::OutlinedFunction &OF) const {
     llvm_unreachable(
-        "Target didn't implement TargetInstrInfo::insertOutlinerEpilogue!");
+        "Target didn't implement TargetInstrInfo::buildOutlinedFrame!");
   }
 
   /// Insert a call to an outlined function into the program.
@@ -1647,20 +1636,11 @@
   virtual MachineBasicBlock::iterator
   insertOutlinedCall(Module &M, MachineBasicBlock &MBB,
                      MachineBasicBlock::iterator &It, MachineFunction &MF,
-                     const MachineOutlinerInfo &MInfo) const {
+                     const outliner::Candidate &C) const {
     llvm_unreachable(
         "Target didn't implement TargetInstrInfo::insertOutlinedCall!");
   }
 
-  /// Insert a custom prologue for outlined functions.
-  /// This may be empty, in which case no prologue will be emitted.
-  virtual void insertOutlinerPrologue(MachineBasicBlock &MBB,
-                                      MachineFunction &MF,
-                                      const MachineOutlinerInfo &MInfo) const {
-    llvm_unreachable(
-        "Target didn't implement TargetInstrInfo::insertOutlinerPrologue!");
-  }
-
   /// Return true if the function can safely be outlined from.
   /// A function \p MF is considered safe for outlining if an outlined function
   /// produced from instructions in F will produce a program which produces the
@@ -1671,13 +1651,18 @@
                      "TargetInstrInfo::isFunctionSafeToOutlineFrom!");
   }
 
+  /// Return true if the function should be outlined from by default.
+  virtual bool shouldOutlineFromFunctionByDefault(MachineFunction &MF) const {
+    return false;
+  }
+
 private:
   unsigned CallFrameSetupOpcode, CallFrameDestroyOpcode;
   unsigned CatchRetOpcode;
   unsigned ReturnOpcode;
 };
 
-/// \brief Provide DenseMapInfo for TargetInstrInfo::RegSubRegPair.
+/// Provide DenseMapInfo for TargetInstrInfo::RegSubRegPair.
 template <> struct DenseMapInfo<TargetInstrInfo::RegSubRegPair> {
   using RegInfo = DenseMapInfo<unsigned>;
 
@@ -1691,7 +1676,7 @@
                                           RegInfo::getTombstoneKey());
   }
 
-  /// \brief Reuse getHashValue implementation from
+  /// Reuse getHashValue implementation from
   /// std::pair<unsigned, unsigned>.
   static unsigned getHashValue(const TargetInstrInfo::RegSubRegPair &Val) {
     std::pair<unsigned, unsigned> PairVal = std::make_pair(Val.Reg, Val.SubReg);
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h b/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
index 483223a..dce4168 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetLowering.h
@@ -223,7 +223,7 @@
   virtual ~TargetLoweringBase() = default;
 
 protected:
-  /// \brief Initialize all of the actions to default values.
+  /// Initialize all of the actions to default values.
   void initActions();
 
 public:
@@ -423,17 +423,17 @@
     return true;
   }
 
-  /// \brief Return true if it is cheap to speculate a call to intrinsic cttz.
+  /// Return true if it is cheap to speculate a call to intrinsic cttz.
   virtual bool isCheapToSpeculateCttz() const {
     return false;
   }
 
-  /// \brief Return true if it is cheap to speculate a call to intrinsic ctlz.
+  /// Return true if it is cheap to speculate a call to intrinsic ctlz.
   virtual bool isCheapToSpeculateCtlz() const {
     return false;
   }
 
-  /// \brief Return true if ctlz instruction is fast.
+  /// Return true if ctlz instruction is fast.
   virtual bool isCtlzFast() const {
     return false;
   }
@@ -446,13 +446,13 @@
     return false;
   }
 
-  /// \brief Return true if it is cheaper to split the store of a merged int val
+  /// Return true if it is cheaper to split the store of a merged int val
   /// from a pair of smaller values into multiple stores.
   virtual bool isMultiStoresCheaperThanBitsMerge(EVT LTy, EVT HTy) const {
     return false;
   }
 
-  /// \brief Return if the target supports combining a
+  /// Return if the target supports combining a
   /// chain like:
   /// \code
   ///   %andResult = and %val1, #mask
@@ -509,7 +509,30 @@
     return hasAndNotCompare(X);
   }
 
-  /// \brief Return true if the target wants to use the optimization that
+  /// There are two ways to clear extreme bits (either low or high):
+  /// Mask:    x &  (-1 << y)  (the instcombine canonical form)
+  /// Shifts:  x >> y << y
+  /// Return true if the variant with 2 shifts is preferred.
+  /// Return false if there is no preference.
+  virtual bool preferShiftsToClearExtremeBits(SDValue X) const {
+    // By default, let's assume that no one prefers shifts.
+    return false;
+  }
+
+  /// Should we tranform the IR-optimal check for whether given truncation
+  /// down into KeptBits would be truncating or not:
+  ///   (add %x, (1 << (KeptBits-1))) srccond (1 << KeptBits)
+  /// Into it's more traditional form:
+  ///   ((%x << C) a>> C) dstcond %x
+  /// Return true if we should transform.
+  /// Return false if there is no preference.
+  virtual bool shouldTransformSignedTruncationCheck(EVT XVT,
+                                                    unsigned KeptBits) const {
+    // By default, let's assume that no one prefers shifts.
+    return false;
+  }
+
+  /// Return true if the target wants to use the optimization that
   /// turns ext(promotableInst1(...(promotableInstN(load)))) into
   /// promotedInst1(...(promotedInstN(ext(load)))).
   bool enableExtLdPromotion() const { return EnableExtLdPromotion; }
@@ -695,7 +718,7 @@
   /// always broken down into scalars in some contexts. This occurs even if the
   /// vector type is legal.
   virtual unsigned getVectorTypeBreakdownForCallingConv(
-      LLVMContext &Context, EVT VT, EVT &IntermediateVT,
+      LLVMContext &Context, CallingConv::ID CC, EVT VT, EVT &IntermediateVT,
       unsigned &NumIntermediates, MVT &RegisterVT) const {
     return getVectorTypeBreakdown(Context, VT, IntermediateVT, NumIntermediates,
                                   RegisterVT);
@@ -748,10 +771,10 @@
   /// operations don't trap except for integer divide and remainder.
   virtual bool canOpTrap(unsigned Op, EVT VT) const;
 
-  /// Similar to isShuffleMaskLegal. This is used by Targets can use this to
-  /// indicate if there is a suitable VECTOR_SHUFFLE that can be used to replace
-  /// a VAND with a constant pool entry.
-  virtual bool isVectorClearMaskLegal(const SmallVectorImpl<int> &/*Mask*/,
+  /// Similar to isShuffleMaskLegal. Targets can use this to indicate if there
+  /// is a suitable VECTOR_SHUFFLE that can be used to replace a VAND with a
+  /// constant pool entry.
+  virtual bool isVectorClearMaskLegal(ArrayRef<int> /*Mask*/,
                                       EVT /*VT*/) const {
     return false;
   }
@@ -767,6 +790,39 @@
     return OpActions[(unsigned)VT.getSimpleVT().SimpleTy][Op];
   }
 
+  LegalizeAction getStrictFPOperationAction(unsigned Op, EVT VT) const {
+    unsigned EqOpc;
+    switch (Op) {
+      default: llvm_unreachable("Unexpected FP pseudo-opcode");
+      case ISD::STRICT_FADD: EqOpc = ISD::FADD; break;
+      case ISD::STRICT_FSUB: EqOpc = ISD::FSUB; break;
+      case ISD::STRICT_FMUL: EqOpc = ISD::FMUL; break;
+      case ISD::STRICT_FDIV: EqOpc = ISD::FDIV; break;
+      case ISD::STRICT_FSQRT: EqOpc = ISD::FSQRT; break;
+      case ISD::STRICT_FPOW: EqOpc = ISD::FPOW; break;
+      case ISD::STRICT_FPOWI: EqOpc = ISD::FPOWI; break;
+      case ISD::STRICT_FMA: EqOpc = ISD::FMA; break;
+      case ISD::STRICT_FSIN: EqOpc = ISD::FSIN; break;
+      case ISD::STRICT_FCOS: EqOpc = ISD::FCOS; break;
+      case ISD::STRICT_FEXP: EqOpc = ISD::FEXP; break;
+      case ISD::STRICT_FEXP2: EqOpc = ISD::FEXP2; break;
+      case ISD::STRICT_FLOG: EqOpc = ISD::FLOG; break;
+      case ISD::STRICT_FLOG10: EqOpc = ISD::FLOG10; break;
+      case ISD::STRICT_FLOG2: EqOpc = ISD::FLOG2; break;
+      case ISD::STRICT_FRINT: EqOpc = ISD::FRINT; break;
+      case ISD::STRICT_FNEARBYINT: EqOpc = ISD::FNEARBYINT; break;
+    }
+
+    auto Action = getOperationAction(EqOpc, VT);
+
+    // We don't currently handle Custom or Promote for strict FP pseudo-ops.
+    // For now, we just expand for those cases.
+    if (Action != Legal)
+      Action = Expand;
+
+    return Action;
+  }
+
   /// Return true if the specified operation is legal on this target or can be
   /// made legal with custom lowering. This is used to help guide high-level
   /// lowering decisions.
@@ -1117,12 +1173,8 @@
   /// Certain combinations of ABIs, Targets and features require that types
   /// are legal for some operations and not for other operations.
   /// For MIPS all vector types must be passed through the integer register set.
-  virtual MVT getRegisterTypeForCallingConv(MVT VT) const {
-    return getRegisterType(VT);
-  }
-
   virtual MVT getRegisterTypeForCallingConv(LLVMContext &Context,
-                                            EVT VT) const {
+                                            CallingConv::ID CC, EVT VT) const {
     return getRegisterType(Context, VT);
   }
 
@@ -1130,6 +1182,7 @@
   /// this occurs when a vector type is used, as vector are passed through the
   /// integer register set.
   virtual unsigned getNumRegistersForCallingConv(LLVMContext &Context,
+                                                 CallingConv::ID CC,
                                                  EVT VT) const {
     return getNumRegisters(Context, VT);
   }
@@ -1179,7 +1232,7 @@
     return getPointerTy(DL).getSizeInBits();
   }
 
-  /// \brief Get maximum # of store operations permitted for llvm.memset
+  /// Get maximum # of store operations permitted for llvm.memset
   ///
   /// This function returns the maximum number of store operations permitted
   /// to replace a call to llvm.memset. The value is set by the target at the
@@ -1189,7 +1242,7 @@
     return OptSize ? MaxStoresPerMemsetOptSize : MaxStoresPerMemset;
   }
 
-  /// \brief Get maximum # of store operations permitted for llvm.memcpy
+  /// Get maximum # of store operations permitted for llvm.memcpy
   ///
   /// This function returns the maximum number of store operations permitted
   /// to replace a call to llvm.memcpy. The value is set by the target at the
@@ -1199,6 +1252,15 @@
     return OptSize ? MaxStoresPerMemcpyOptSize : MaxStoresPerMemcpy;
   }
 
+  /// \brief Get maximum # of store operations to be glued together
+  ///
+  /// This function returns the maximum number of store operations permitted
+  /// to glue together during lowering of llvm.memcpy. The value is set by
+  //  the target at the performance threshold for such a replacement.
+  virtual unsigned getMaxGluedStoresPerMemcpy() const {
+    return MaxGluedStoresPerMemcpy;
+  }
+
   /// Get maximum # of load operations permitted for memcmp
   ///
   /// This function returns the maximum number of load operations permitted
@@ -1221,7 +1283,7 @@
     return 1;
   }
 
-  /// \brief Get maximum # of store operations permitted for llvm.memmove
+  /// Get maximum # of store operations permitted for llvm.memmove
   ///
   /// This function returns the maximum number of store operations permitted
   /// to replace a call to llvm.memmove. The value is set by the target at the
@@ -1231,7 +1293,7 @@
     return OptSize ? MaxStoresPerMemmoveOptSize : MaxStoresPerMemmove;
   }
 
-  /// \brief Determine if the target supports unaligned memory accesses.
+  /// Determine if the target supports unaligned memory accesses.
   ///
   /// This function returns true if the target allows unaligned memory accesses
   /// of the specified type in the given address space. If true, it also returns
@@ -1369,7 +1431,7 @@
   /// If the target has a standard location for the stack protector guard,
   /// returns the address of that location. Otherwise, returns nullptr.
   /// DEPRECATED: please override useLoadStackGuardNode and customize
-  ///             LOAD_STACK_GUARD, or customize @llvm.stackguard().
+  ///             LOAD_STACK_GUARD, or customize \@llvm.stackguard().
   virtual Value *getIRStackGuard(IRBuilder<> &IRB) const;
 
   /// Inserts necessary declarations for SSP (stack protection) purpose.
@@ -1924,7 +1986,7 @@
                                      Type *Ty, unsigned AddrSpace,
                                      Instruction *I = nullptr) const;
 
-  /// \brief Return the cost of the scaling factor used in the addressing mode
+  /// Return the cost of the scaling factor used in the addressing mode
   /// represented by AM for this target, for a load/store of the specified type.
   ///
   /// If the AM is supported, the return value must be >= 0.
@@ -2120,11 +2182,11 @@
   /// Return true if the target has a vector blend instruction.
   virtual bool hasVectorBlend() const { return false; }
 
-  /// \brief Get the maximum supported factor for interleaved memory accesses.
+  /// Get the maximum supported factor for interleaved memory accesses.
   /// Default to be the minimum interleave factor: 2.
   virtual unsigned getMaxSupportedInterleaveFactor() const { return 2; }
 
-  /// \brief Lower an interleaved load to target specific intrinsics. Return
+  /// Lower an interleaved load to target specific intrinsics. Return
   /// true on success.
   ///
   /// \p LI is the vector load instruction.
@@ -2138,7 +2200,7 @@
     return false;
   }
 
-  /// \brief Lower an interleaved store to target specific intrinsics. Return
+  /// Lower an interleaved store to target specific intrinsics. Return
   /// true on success.
   ///
   /// \p SI is the vector store instruction.
@@ -2211,7 +2273,7 @@
     return false;
   }
 
-  /// \brief Return true if it is beneficial to convert a load of a constant to
+  /// Return true if it is beneficial to convert a load of a constant to
   /// just the constant itself.
   /// On some targets it might be more efficient to use a combination of
   /// arithmetic instructions to materialize the constant instead of loading it
@@ -2236,6 +2298,11 @@
     return false;
   }
 
+  // Return true if CodeGenPrepare should consider splitting large offset of a
+  // GEP to make the GEP fit into the addressing mode and can be sunk into the
+  // same blocks of its users.
+  virtual bool shouldConsiderGEPOffsetSplit() const { return false; }
+
   //===--------------------------------------------------------------------===//
   // Runtime Library hooks
   //
@@ -2475,7 +2542,7 @@
   /// expected to be merged.
   unsigned GatherAllAliasesMaxDepth;
 
-  /// \brief Specify maximum number of store instructions per memset call.
+  /// Specify maximum number of store instructions per memset call.
   ///
   /// When lowering \@llvm.memset this field specifies the maximum number of
   /// store operations that may be substituted for the call to memset. Targets
@@ -2491,7 +2558,7 @@
   /// to memset, used for functions with OptSize attribute.
   unsigned MaxStoresPerMemsetOptSize;
 
-  /// \brief Specify maximum bytes of store instructions per memcpy call.
+  /// Specify maximum bytes of store instructions per memcpy call.
   ///
   /// When lowering \@llvm.memcpy this field specifies the maximum number of
   /// store operations that may be substituted for a call to memcpy. Targets
@@ -2504,13 +2571,21 @@
   /// constant size.
   unsigned MaxStoresPerMemcpy;
 
+
+  /// \brief Specify max number of store instructions to glue in inlined memcpy.
+  ///
+  /// When memcpy is inlined based on MaxStoresPerMemcpy, specify maximum number
+  /// of store instructions to keep together. This helps in pairing and
+  //  vectorization later on.
+  unsigned MaxGluedStoresPerMemcpy = 0;
+
   /// Maximum number of store operations that may be substituted for a call to
   /// memcpy, used for functions with OptSize attribute.
   unsigned MaxStoresPerMemcpyOptSize;
   unsigned MaxLoadsPerMemcmp;
   unsigned MaxLoadsPerMemcmpOptSize;
 
-  /// \brief Specify maximum bytes of store instructions per memmove call.
+  /// Specify maximum bytes of store instructions per memmove call.
   ///
   /// When lowering \@llvm.memmove this field specifies the maximum number of
   /// store instructions that may be substituted for a call to memmove. Targets
@@ -2547,6 +2622,11 @@
   /// details.
   MachineBasicBlock *emitXRayCustomEvent(MachineInstr &MI,
                                          MachineBasicBlock *MBB) const;
+
+  /// Replace/modify the XRay typed event operands with target-dependent
+  /// details.
+  MachineBasicBlock *emitXRayTypedEvent(MachineInstr &MI,
+                                        MachineBasicBlock *MBB) const;
 };
 
 /// This class defines information used to lower LLVM code to legal SelectionDAG
@@ -2741,7 +2821,7 @@
   ///    results of this function, because simply replacing replacing TLO.Old
   ///    with TLO.New will be incorrect when this parameter is true and TLO.Old
   ///    has multiple uses.
-  bool SimplifyDemandedVectorElts(SDValue Op, const APInt &DemandedElts,
+  bool SimplifyDemandedVectorElts(SDValue Op, const APInt &DemandedEltMask,
                                   APInt &KnownUndef, APInt &KnownZero,
                                   TargetLoweringOpt &TLO, unsigned Depth = 0,
                                   bool AssumeSingleUse = false) const;
@@ -2788,6 +2868,13 @@
       SDValue Op, const APInt &DemandedElts, APInt &KnownUndef,
       APInt &KnownZero, TargetLoweringOpt &TLO, unsigned Depth = 0) const;
 
+  /// If \p SNaN is false, \returns true if \p Op is known to never be any
+  /// NaN. If \p sNaN is true, returns if \p Op is known to never be a signaling
+  /// NaN.
+  virtual bool isKnownNeverNaNForTargetNode(SDValue Op,
+                                            const SelectionDAG &DAG,
+                                            bool SNaN = false,
+                                            unsigned Depth = 0) const;
   struct DAGCombinerInfo {
     void *DC;  // The DAG Combiner object.
     CombineLevel Level;
@@ -2824,7 +2911,7 @@
   bool isConstFalseVal(const SDNode *N) const;
 
   /// Return if \p N is a True value when extended to \p VT.
-  bool isExtendedTrueVal(const ConstantSDNode *N, EVT VT, bool Signed) const;
+  bool isExtendedTrueVal(const ConstantSDNode *N, EVT VT, bool SExt) const;
 
   /// Try to simplify a setcc built with the specified operands and cc. If it is
   /// unable to simplify it, return a null SDValue.
@@ -3408,12 +3495,10 @@
   //===--------------------------------------------------------------------===//
   // Div utility functions
   //
-  SDValue BuildSDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
-                    bool IsAfterLegalization,
-                    std::vector<SDNode *> *Created) const;
-  SDValue BuildUDIV(SDNode *N, const APInt &Divisor, SelectionDAG &DAG,
-                    bool IsAfterLegalization,
-                    std::vector<SDNode *> *Created) const;
+  SDValue BuildSDIV(SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization,
+                    SmallVectorImpl<SDNode *> &Created) const;
+  SDValue BuildUDIV(SDNode *N, SelectionDAG &DAG, bool IsAfterLegalization,
+                    SmallVectorImpl<SDNode *> &Created) const;
 
   /// Targets may override this function to provide custom SDIV lowering for
   /// power-of-2 denominators.  If the target returns an empty SDValue, LLVM
@@ -3421,7 +3506,7 @@
   /// operations.
   virtual SDValue BuildSDIVPow2(SDNode *N, const APInt &Divisor,
                                 SelectionDAG &DAG,
-                                std::vector<SDNode *> *Created) const;
+                                SmallVectorImpl<SDNode *> &Created) const;
 
   /// Indicate whether this target prefers to combine FDIVs with the same
   /// divisor. If the transform should never be done, return zero. If the
@@ -3545,7 +3630,7 @@
   /// bounds the returned pointer is unspecified, but will be within the vector
   /// bounds.
   SDValue getVectorElementPointer(SelectionDAG &DAG, SDValue VecPtr, EVT VecVT,
-                                  SDValue Idx) const;
+                                  SDValue Index) const;
 
   //===--------------------------------------------------------------------===//
   // Instruction Emitting Hooks
@@ -3601,12 +3686,17 @@
   SDValue simplifySetCCWithAnd(EVT VT, SDValue N0, SDValue N1,
                                ISD::CondCode Cond, DAGCombinerInfo &DCI,
                                const SDLoc &DL) const;
+
+  SDValue optimizeSetCCOfSignedTruncationCheck(EVT SCCVT, SDValue N0,
+                                               SDValue N1, ISD::CondCode Cond,
+                                               DAGCombinerInfo &DCI,
+                                               const SDLoc &DL) const;
 };
 
 /// Given an LLVM IR type and return type attributes, compute the return value
 /// EVTs and flags, and optionally also the offsets, if the return value is
 /// being lowered to memory.
-void GetReturnInfo(Type *ReturnType, AttributeList attr,
+void GetReturnInfo(CallingConv::ID CC, Type *ReturnType, AttributeList attr,
                    SmallVectorImpl<ISD::OutputArg> &Outs,
                    const TargetLowering &TLI, const DataLayout &DL);
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h b/linux-x64/clang/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
index 78da77f..f5c7fc8 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
@@ -36,16 +36,18 @@
 protected:
   MCSymbolRefExpr::VariantKind PLTRelativeVariantKind =
       MCSymbolRefExpr::VK_None;
+  const TargetMachine *TM;
 
 public:
   TargetLoweringObjectFileELF() = default;
   ~TargetLoweringObjectFileELF() override = default;
 
-  /// Emit Obj-C garbage collection and linker options.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M,
-                          const TargetMachine &TM) const override;
+  void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
 
-  void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &TM,
+  /// Emit Obj-C garbage collection and linker options.
+  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
+
+  void emitPersonalityValue(MCStreamer &Streamer, const DataLayout &DL,
                             const MCSymbol *Sym) const override;
 
   /// Given a constant with the SectionKind, return a section that it should be
@@ -98,8 +100,7 @@
   void Initialize(MCContext &Ctx, const TargetMachine &TM) override;
 
   /// Emit the module flags that specify the garbage collection information.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M,
-                          const TargetMachine &TM) const override;
+  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
 
   MCSection *SelectSectionForGlobal(const GlobalObject *GO, SectionKind Kind,
                                     const TargetMachine &TM) const override;
@@ -153,8 +154,7 @@
                                     const TargetMachine &TM) const override;
 
   /// Emit Obj-C garbage collection and linker options.
-  void emitModuleMetadata(MCStreamer &Streamer, Module &M,
-                          const TargetMachine &TM) const override;
+  void emitModuleMetadata(MCStreamer &Streamer, Module &M) const override;
 
   MCSection *getStaticCtorSection(unsigned Priority,
                                   const MCSymbol *KeySym) const override;
@@ -166,6 +166,16 @@
 
   void emitLinkerFlagsForUsed(raw_ostream &OS,
                               const GlobalValue *GV) const override;
+
+  const MCExpr *lowerRelativeReference(const GlobalValue *LHS,
+                                       const GlobalValue *RHS,
+                                       const TargetMachine &TM) const override;
+
+  /// Given a mergeable constant with the specified size and relocation
+  /// information, return a section that it should be placed in.
+  MCSection *getSectionForConstant(const DataLayout &DL, SectionKind Kind,
+                                   const Constant *C,
+                                   unsigned &Align) const override;
 };
 
 class TargetLoweringObjectFileWasm : public TargetLoweringObjectFile {
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h b/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
index 5918c52..8f5c9cb 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetPassConfig.h
@@ -16,7 +16,7 @@
 
 #include "llvm/Pass.h"
 #include "llvm/Support/CodeGen.h"
-#include <cassert> 
+#include <cassert>
 #include <string>
 
 namespace llvm {
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
index ea47a24..55a8ba6 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetRegisterInfo.h
@@ -238,12 +238,12 @@
 
 protected:
   TargetRegisterInfo(const TargetRegisterInfoDesc *ID,
-                     regclass_iterator RegClassBegin,
-                     regclass_iterator RegClassEnd,
+                     regclass_iterator RCB,
+                     regclass_iterator RCE,
                      const char *const *SRINames,
                      const LaneBitmask *SRILaneMasks,
                      LaneBitmask CoveringLanes,
-                     const RegClassInfo *const RSI,
+                     const RegClassInfo *const RCIs,
                      unsigned Mode = 0);
   virtual ~TargetRegisterInfo();
 
@@ -456,7 +456,7 @@
   /// stack frame offset. The first register is closest to the incoming stack
   /// pointer if stack grows down, and vice versa.
   /// Notice: This function does not take into account disabled CSRs.
-  ///         In most cases you will want to use instead the function 
+  ///         In most cases you will want to use instead the function
   ///         getCalleeSavedRegs that is implemented in MachineRegisterInfo.
   virtual const MCPhysReg*
   getCalleeSavedRegs(const MachineFunction *MF) const = 0;
@@ -518,7 +518,7 @@
   /// guaranteed to be restored before any uses. This is useful for targets that
   /// have call sequences where a GOT register may be updated by the caller
   /// prior to a call and is guaranteed to be restored (also by the caller)
-  /// after the call. 
+  /// after the call.
   virtual bool isCallerPreservedPhysReg(unsigned PhysReg,
                                         const MachineFunction &MF) const {
     return false;
@@ -971,7 +971,7 @@
   //===--------------------------------------------------------------------===//
   /// Subtarget Hooks
 
-  /// \brief SrcRC and DstRC will be morphed into NewRC if this returns true.
+  /// SrcRC and DstRC will be morphed into NewRC if this returns true.
   virtual bool shouldCoalesce(MachineInstr *MI,
                               const TargetRegisterClass *SrcRC,
                               unsigned SubReg,
@@ -995,6 +995,12 @@
   /// of the set as well.
   bool checkAllSuperRegsMarked(const BitVector &RegisterSet,
       ArrayRef<MCPhysReg> Exceptions = ArrayRef<MCPhysReg>()) const;
+
+  virtual const TargetRegisterClass *
+  getConstrainedRegClassForOperand(const MachineOperand &MO,
+                                   const MachineRegisterInfo &MRI) const {
+    return nullptr;
+  }
 };
 
 //===----------------------------------------------------------------------===//
@@ -1161,7 +1167,7 @@
 ///
 /// Usage: OS << printReg(Reg, TRI, SubRegIdx) << '\n';
 Printable printReg(unsigned Reg, const TargetRegisterInfo *TRI = nullptr,
-                   unsigned SubRegIdx = 0,
+                   unsigned SubIdx = 0,
                    const MachineRegisterInfo *MRI = nullptr);
 
 /// Create Printable object to print register units on a \ref raw_ostream.
@@ -1174,11 +1180,11 @@
 /// Usage: OS << printRegUnit(Unit, TRI) << '\n';
 Printable printRegUnit(unsigned Unit, const TargetRegisterInfo *TRI);
 
-/// \brief Create Printable object to print virtual registers and physical
+/// Create Printable object to print virtual registers and physical
 /// registers on a \ref raw_ostream.
 Printable printVRegOrUnit(unsigned VRegOrUnit, const TargetRegisterInfo *TRI);
 
-/// \brief Create Printable object to print register classes or register banks
+/// Create Printable object to print register classes or register banks
 /// on a \ref raw_ostream.
 Printable printRegClassOrBank(unsigned Reg, const MachineRegisterInfo &RegInfo,
                               const TargetRegisterInfo *TRI);
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetSchedule.h b/linux-x64/clang/include/llvm/CodeGen/TargetSchedule.h
index 1044f0b..6173925 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetSchedule.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetSchedule.h
@@ -19,6 +19,7 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/CodeGen/TargetSubtargetInfo.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/MC/MCInstrItineraries.h"
 #include "llvm/MC/MCSchedule.h"
 
@@ -45,24 +46,23 @@
 public:
   TargetSchedModel() : SchedModel(MCSchedModel::GetDefaultSchedModel()) {}
 
-  /// \brief Initialize the machine model for instruction scheduling.
+  /// Initialize the machine model for instruction scheduling.
   ///
   /// The machine model API keeps a copy of the top-level MCSchedModel table
   /// indices and may query TargetSubtargetInfo and TargetInstrInfo to resolve
   /// dynamic properties.
-  void init(const MCSchedModel &sm, const TargetSubtargetInfo *sti,
-            const TargetInstrInfo *tii);
+  void init(const TargetSubtargetInfo *TSInfo);
 
   /// Return the MCSchedClassDesc for this instruction.
   const MCSchedClassDesc *resolveSchedClass(const MachineInstr *MI) const;
 
-  /// \brief TargetSubtargetInfo getter.
+  /// TargetSubtargetInfo getter.
   const TargetSubtargetInfo *getSubtargetInfo() const { return STI; }
 
-  /// \brief TargetInstrInfo getter.
+  /// TargetInstrInfo getter.
   const TargetInstrInfo *getInstrInfo() const { return TII; }
 
-  /// \brief Return true if this machine model includes an instruction-level
+  /// Return true if this machine model includes an instruction-level
   /// scheduling model.
   ///
   /// This is more detailed than the course grain IssueWidth and default
@@ -71,7 +71,7 @@
 
   const MCSchedModel *getMCSchedModel() const { return &SchedModel; }
 
-  /// \brief Return true if this machine model includes cycle-to-cycle itinerary
+  /// Return true if this machine model includes cycle-to-cycle itinerary
   /// data.
   ///
   /// This models scheduling at each stage in the processor pipeline.
@@ -83,35 +83,35 @@
     return nullptr;
   }
 
-  /// \brief Return true if this machine model includes an instruction-level
+  /// Return true if this machine model includes an instruction-level
   /// scheduling model or cycle-to-cycle itinerary data.
   bool hasInstrSchedModelOrItineraries() const {
     return hasInstrSchedModel() || hasInstrItineraries();
   }
 
-  /// \brief Identify the processor corresponding to the current subtarget.
+  /// Identify the processor corresponding to the current subtarget.
   unsigned getProcessorID() const { return SchedModel.getProcessorID(); }
 
-  /// \brief Maximum number of micro-ops that may be scheduled per cycle.
+  /// Maximum number of micro-ops that may be scheduled per cycle.
   unsigned getIssueWidth() const { return SchedModel.IssueWidth; }
 
-  /// \brief Return true if new group must begin.
+  /// Return true if new group must begin.
   bool mustBeginGroup(const MachineInstr *MI,
                           const MCSchedClassDesc *SC = nullptr) const;
-  /// \brief Return true if current group must end.
+  /// Return true if current group must end.
   bool mustEndGroup(const MachineInstr *MI,
                           const MCSchedClassDesc *SC = nullptr) const;
 
-  /// \brief Return the number of issue slots required for this MI.
+  /// Return the number of issue slots required for this MI.
   unsigned getNumMicroOps(const MachineInstr *MI,
                           const MCSchedClassDesc *SC = nullptr) const;
 
-  /// \brief Get the number of kinds of resources for this target.
+  /// Get the number of kinds of resources for this target.
   unsigned getNumProcResourceKinds() const {
     return SchedModel.getNumProcResourceKinds();
   }
 
-  /// \brief Get a processor resource by ID for convenience.
+  /// Get a processor resource by ID for convenience.
   const MCProcResourceDesc *getProcResource(unsigned PIdx) const {
     return SchedModel.getProcResource(PIdx);
   }
@@ -126,7 +126,7 @@
 
   using ProcResIter = const MCWriteProcResEntry *;
 
-  // \brief Get an iterator into the processor resources consumed by this
+  // Get an iterator into the processor resources consumed by this
   // scheduling class.
   ProcResIter getWriteProcResBegin(const MCSchedClassDesc *SC) const {
     // The subtarget holds a single resource table for all processors.
@@ -136,34 +136,34 @@
     return STI->getWriteProcResEnd(SC);
   }
 
-  /// \brief Multiply the number of units consumed for a resource by this factor
+  /// Multiply the number of units consumed for a resource by this factor
   /// to normalize it relative to other resources.
   unsigned getResourceFactor(unsigned ResIdx) const {
     return ResourceFactors[ResIdx];
   }
 
-  /// \brief Multiply number of micro-ops by this factor to normalize it
+  /// Multiply number of micro-ops by this factor to normalize it
   /// relative to other resources.
   unsigned getMicroOpFactor() const {
     return MicroOpFactor;
   }
 
-  /// \brief Multiply cycle count by this factor to normalize it relative to
+  /// Multiply cycle count by this factor to normalize it relative to
   /// other resources. This is the number of resource units per cycle.
   unsigned getLatencyFactor() const {
     return ResourceLCM;
   }
 
-  /// \brief Number of micro-ops that may be buffered for OOO execution.
+  /// Number of micro-ops that may be buffered for OOO execution.
   unsigned getMicroOpBufferSize() const { return SchedModel.MicroOpBufferSize; }
 
-  /// \brief Number of resource units that may be buffered for OOO execution.
+  /// Number of resource units that may be buffered for OOO execution.
   /// \return The buffer size in resource units or -1 for unlimited.
   int getResourceBufferSize(unsigned PIdx) const {
     return SchedModel.getProcResource(PIdx)->BufferSize;
   }
 
-  /// \brief Compute operand latency based on the available machine model.
+  /// Compute operand latency based on the available machine model.
   ///
   /// Compute and return the latency of the given data dependent def and use
   /// when the operand indices are already known. UseMI may be NULL for an
@@ -172,7 +172,7 @@
                                  const MachineInstr *UseMI, unsigned UseOperIdx)
     const;
 
-  /// \brief Compute the instruction latency based on the available machine
+  /// Compute the instruction latency based on the available machine
   /// model.
   ///
   /// Compute and return the expected latency of this instruction independent of
@@ -185,18 +185,20 @@
   /// if converter after moving it to TargetSchedModel).
   unsigned computeInstrLatency(const MachineInstr *MI,
                                bool UseDefaultDefLatency = true) const;
+  unsigned computeInstrLatency(const MCInst &Inst) const;
   unsigned computeInstrLatency(unsigned Opcode) const;
 
 
-  /// \brief Output dependency latency of a pair of defs of the same register.
+  /// Output dependency latency of a pair of defs of the same register.
   ///
   /// This is typically one cycle.
-  unsigned computeOutputLatency(const MachineInstr *DefMI, unsigned DefIdx,
+  unsigned computeOutputLatency(const MachineInstr *DefMI, unsigned DefOperIdx,
                                 const MachineInstr *DepMI) const;
 
-  /// \brief Compute the reciprocal throughput of the given instruction.
-  Optional<double> computeInstrRThroughput(const MachineInstr *MI) const;
-  Optional<double> computeInstrRThroughput(unsigned Opcode) const;
+  /// Compute the reciprocal throughput of the given instruction.
+  double computeReciprocalThroughput(const MachineInstr *MI) const;
+  double computeReciprocalThroughput(const MCInst &MI) const;
+  double computeReciprocalThroughput(unsigned Opcode) const;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h b/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
index 5e5faac..227e591 100644
--- a/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
+++ b/linux-x64/clang/include/llvm/CodeGen/TargetSubtargetInfo.h
@@ -144,7 +144,7 @@
     return 0;
   }
 
-  /// \brief True if the subtarget should run MachineScheduler after aggressive
+  /// True if the subtarget should run MachineScheduler after aggressive
   /// coalescing.
   ///
   /// This currently replaces the SelectionDAG scheduler with the "source" order
@@ -152,14 +152,14 @@
   /// TargetLowering preference). It does not yet disable the postRA scheduler.
   virtual bool enableMachineScheduler() const;
 
-  /// \brief Support printing of [latency:throughput] comment in output .S file.
+  /// Support printing of [latency:throughput] comment in output .S file.
   virtual bool supportPrintSchedInfo() const { return false; }
 
-  /// \brief True if the machine scheduler should disable the TLI preference
+  /// True if the machine scheduler should disable the TLI preference
   /// for preRA scheduling with the source level scheduler.
   virtual bool enableMachineSchedDefaultSched() const { return true; }
 
-  /// \brief True if the subtarget should enable joining global copies.
+  /// True if the subtarget should enable joining global copies.
   ///
   /// By default this is enabled if the machine scheduler is enabled, but
   /// can be overridden.
@@ -171,13 +171,13 @@
   /// which is the preferred way to influence this.
   virtual bool enablePostRAScheduler() const;
 
-  /// \brief True if the subtarget should run the atomic expansion pass.
+  /// True if the subtarget should run the atomic expansion pass.
   virtual bool enableAtomicExpand() const;
 
   /// True if the subtarget should run the indirectbr expansion pass.
   virtual bool enableIndirectBrExpand() const;
 
-  /// \brief Override generic scheduling policy within a region.
+  /// Override generic scheduling policy within a region.
   ///
   /// This is a convenient way for targets that don't provide any custom
   /// scheduling heuristics (no custom MachineSchedStrategy) to make
@@ -185,7 +185,7 @@
   virtual void overrideSchedPolicy(MachineSchedPolicy &Policy,
                                    unsigned NumRegionInstrs) const {}
 
-  // \brief Perform target specific adjustments to the latency of a schedule
+  // Perform target specific adjustments to the latency of a schedule
   // dependency.
   virtual void adjustSchedDependency(SUnit *def, SUnit *use, SDep &dep) const {}
 
@@ -200,13 +200,13 @@
     return CriticalPathRCs.clear();
   }
 
-  // \brief Provide an ordered list of schedule DAG mutations for the post-RA
+  // Provide an ordered list of schedule DAG mutations for the post-RA
   // scheduler.
   virtual void getPostRAMutations(
       std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations) const {
   }
 
-  // \brief Provide an ordered list of schedule DAG mutations for the machine
+  // Provide an ordered list of schedule DAG mutations for the machine
   // pipeliner.
   virtual void getSMSMutations(
       std::vector<std::unique_ptr<ScheduleDAGMutation>> &Mutations) const {
@@ -218,25 +218,25 @@
     return CodeGenOpt::Default;
   }
 
-  /// \brief True if the subtarget should run the local reassignment
+  /// True if the subtarget should run the local reassignment
   /// heuristic of the register allocator.
   /// This heuristic may be compile time intensive, \p OptLevel provides
   /// a finer grain to tune the register allocator.
   virtual bool enableRALocalReassignment(CodeGenOpt::Level OptLevel) const;
 
-  /// \brief True if the subtarget should consider the cost of local intervals
+  /// True if the subtarget should consider the cost of local intervals
   /// created by a split candidate when choosing the best split candidate. This
   /// heuristic may be compile time intensive.
   virtual bool enableAdvancedRASplitCost() const;
 
-  /// \brief Enable use of alias analysis during code generation (during MI
+  /// Enable use of alias analysis during code generation (during MI
   /// scheduling, DAGCombine, etc.).
   virtual bool useAA() const;
 
-  /// \brief Enable the use of the early if conversion pass.
+  /// Enable the use of the early if conversion pass.
   virtual bool enableEarlyIfConversion() const { return false; }
 
-  /// \brief Return PBQPConstraint(s) for the target.
+  /// Return PBQPConstraint(s) for the target.
   ///
   /// Override to provide custom PBQP constraints.
   virtual std::unique_ptr<PBQPRAConstraint> getCustomPBQPConstraints() const {
@@ -249,7 +249,7 @@
   virtual bool enableSubRegLiveness() const { return false; }
 
   /// Returns string representation of scheduler comment
-  std::string getSchedInfoStr(const MachineInstr &MI) const override;
+  std::string getSchedInfoStr(const MachineInstr &MI) const;
   std::string getSchedInfoStr(MCInst const &MCI) const override;
 
   /// This is called after a .mir file was loaded.
diff --git a/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td b/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
index 673eec9..0abb4ec 100644
--- a/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
+++ b/linux-x64/clang/include/llvm/CodeGen/ValueTypes.td
@@ -8,8 +8,8 @@
 //===----------------------------------------------------------------------===//
 //
 // Value types - These values correspond to the register types defined in the
-// ValueTypes.h file.  If you update anything here, you must update it there as
-// well!
+// MachineValueTypes.h file.  If you update anything here, you must update it
+// there as well!
 //
 //===----------------------------------------------------------------------===//
 
diff --git a/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h b/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
index 3b06f03..6a8e50a 100644
--- a/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
+++ b/linux-x64/clang/include/llvm/CodeGen/VirtRegMap.h
@@ -90,24 +90,24 @@
 
     void grow();
 
-    /// @brief returns true if the specified virtual register is
+    /// returns true if the specified virtual register is
     /// mapped to a physical register
     bool hasPhys(unsigned virtReg) const {
       return getPhys(virtReg) != NO_PHYS_REG;
     }
 
-    /// @brief returns the physical register mapped to the specified
+    /// returns the physical register mapped to the specified
     /// virtual register
     unsigned getPhys(unsigned virtReg) const {
       assert(TargetRegisterInfo::isVirtualRegister(virtReg));
       return Virt2PhysMap[virtReg];
     }
 
-    /// @brief creates a mapping for the specified virtual register to
+    /// creates a mapping for the specified virtual register to
     /// the specified physical register
     void assignVirt2Phys(unsigned virtReg, MCPhysReg physReg);
 
-    /// @brief clears the specified virtual register's, physical
+    /// clears the specified virtual register's, physical
     /// register mapping
     void clearVirt(unsigned virtReg) {
       assert(TargetRegisterInfo::isVirtualRegister(virtReg));
@@ -116,26 +116,26 @@
       Virt2PhysMap[virtReg] = NO_PHYS_REG;
     }
 
-    /// @brief clears all virtual to physical register mappings
+    /// clears all virtual to physical register mappings
     void clearAllVirt() {
       Virt2PhysMap.clear();
       grow();
     }
 
-    /// @brief returns true if VirtReg is assigned to its preferred physreg.
+    /// returns true if VirtReg is assigned to its preferred physreg.
     bool hasPreferredPhys(unsigned VirtReg);
 
-    /// @brief returns true if VirtReg has a known preferred register.
+    /// returns true if VirtReg has a known preferred register.
     /// This returns false if VirtReg has a preference that is a virtual
     /// register that hasn't been assigned yet.
     bool hasKnownPreference(unsigned VirtReg);
 
-    /// @brief records virtReg is a split live interval from SReg.
+    /// records virtReg is a split live interval from SReg.
     void setIsSplitFromReg(unsigned virtReg, unsigned SReg) {
       Virt2SplitMap[virtReg] = SReg;
     }
 
-    /// @brief returns the live interval virtReg is split from.
+    /// returns the live interval virtReg is split from.
     unsigned getPreSplitReg(unsigned virtReg) const {
       return Virt2SplitMap[virtReg];
     }
@@ -149,7 +149,7 @@
       return Orig ? Orig : VirtReg;
     }
 
-    /// @brief returns true if the specified virtual register is not
+    /// returns true if the specified virtual register is not
     /// mapped to a stack slot or rematerialized.
     bool isAssignedReg(unsigned virtReg) const {
       if (getStackSlot(virtReg) == NO_STACK_SLOT)
@@ -159,20 +159,20 @@
       return (Virt2SplitMap[virtReg] && Virt2PhysMap[virtReg] != NO_PHYS_REG);
     }
 
-    /// @brief returns the stack slot mapped to the specified virtual
+    /// returns the stack slot mapped to the specified virtual
     /// register
     int getStackSlot(unsigned virtReg) const {
       assert(TargetRegisterInfo::isVirtualRegister(virtReg));
       return Virt2StackSlotMap[virtReg];
     }
 
-    /// @brief create a mapping for the specifed virtual register to
+    /// create a mapping for the specifed virtual register to
     /// the next available stack slot
     int assignVirt2StackSlot(unsigned virtReg);
 
-    /// @brief create a mapping for the specified virtual register to
+    /// create a mapping for the specified virtual register to
     /// the specified stack slot
-    void assignVirt2StackSlot(unsigned virtReg, int frameIndex);
+    void assignVirt2StackSlot(unsigned virtReg, int SS);
 
     void print(raw_ostream &OS, const Module* M = nullptr) const override;
     void dump() const;
diff --git a/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h b/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h
new file mode 100644
index 0000000..3ad6760
--- /dev/null
+++ b/linux-x64/clang/include/llvm/CodeGen/WasmEHFuncInfo.h
@@ -0,0 +1,80 @@
+//===--- llvm/CodeGen/WasmEHFuncInfo.h --------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Data structures for Wasm exception handling schemes.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_CODEGEN_WASMEHFUNCINFO_H
+#define LLVM_CODEGEN_WASMEHFUNCINFO_H
+
+#include "llvm/ADT/PointerUnion.h"
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/CodeGen/MachineBasicBlock.h"
+#include "llvm/IR/BasicBlock.h"
+
+namespace llvm {
+
+using BBOrMBB = PointerUnion<const BasicBlock *, MachineBasicBlock *>;
+
+struct WasmEHFuncInfo {
+  // When there is an entry <A, B>, if an exception is not caught by A, it
+  // should next unwind to the EH pad B.
+  DenseMap<BBOrMBB, BBOrMBB> EHPadUnwindMap;
+  // For entry <A, B>, A is a BB with an instruction that may throw
+  // (invoke/cleanupret in LLVM IR, call/rethrow in the backend) and B is an EH
+  // pad that A unwinds to.
+  DenseMap<BBOrMBB, BBOrMBB> ThrowUnwindMap;
+
+  // Helper functions
+  const BasicBlock *getEHPadUnwindDest(const BasicBlock *BB) const {
+    return EHPadUnwindMap.lookup(BB).get<const BasicBlock *>();
+  }
+  void setEHPadUnwindDest(const BasicBlock *BB, const BasicBlock *Dest) {
+    EHPadUnwindMap[BB] = Dest;
+  }
+  const BasicBlock *getThrowUnwindDest(BasicBlock *BB) const {
+    return ThrowUnwindMap.lookup(BB).get<const BasicBlock *>();
+  }
+  void setThrowUnwindDest(const BasicBlock *BB, const BasicBlock *Dest) {
+    ThrowUnwindMap[BB] = Dest;
+  }
+  bool hasEHPadUnwindDest(const BasicBlock *BB) const {
+    return EHPadUnwindMap.count(BB);
+  }
+  bool hasThrowUnwindDest(const BasicBlock *BB) const {
+    return ThrowUnwindMap.count(BB);
+  }
+
+  MachineBasicBlock *getEHPadUnwindDest(MachineBasicBlock *MBB) const {
+    return EHPadUnwindMap.lookup(MBB).get<MachineBasicBlock *>();
+  }
+  void setEHPadUnwindDest(MachineBasicBlock *MBB, MachineBasicBlock *Dest) {
+    EHPadUnwindMap[MBB] = Dest;
+  }
+  MachineBasicBlock *getThrowUnwindDest(MachineBasicBlock *MBB) const {
+    return ThrowUnwindMap.lookup(MBB).get<MachineBasicBlock *>();
+  }
+  void setThrowUnwindDest(MachineBasicBlock *MBB, MachineBasicBlock *Dest) {
+    ThrowUnwindMap[MBB] = Dest;
+  }
+  bool hasEHPadUnwindDest(MachineBasicBlock *MBB) const {
+    return EHPadUnwindMap.count(MBB);
+  }
+  bool hasThrowUnwindDest(MachineBasicBlock *MBB) const {
+    return ThrowUnwindMap.count(MBB);
+  }
+};
+
+// Analyze the IR in the given function to build WasmEHFuncInfo.
+void calculateWasmEHInfo(const Function *F, WasmEHFuncInfo &EHInfo);
+
+} // namespace llvm
+
+#endif // LLVM_CODEGEN_WASMEHFUNCINFO_H
diff --git a/linux-x64/clang/include/llvm/Config/llvm-config.h b/linux-x64/clang/include/llvm/Config/llvm-config.h
index 07fa1c8..5e0844c 100644
--- a/linux-x64/clang/include/llvm/Config/llvm-config.h
+++ b/linux-x64/clang/include/llvm/Config/llvm-config.h
@@ -56,26 +56,26 @@
 /* Define if this is Unixish platform */
 #define LLVM_ON_UNIX 1
 
-/* Define if this is Win32ish platform */
-/* #undef LLVM_ON_WIN32 */
-
 /* Define if we have the Intel JIT API runtime support library */
 #define LLVM_USE_INTEL_JITEVENTS 0
 
 /* Define if we have the oprofile JIT-support library */
 #define LLVM_USE_OPROFILE 0
 
+/* Define if we have the perf JIT-support library */
+#define LLVM_USE_PERF 0
+
 /* Major version of the LLVM API */
-#define LLVM_VERSION_MAJOR 7
+#define LLVM_VERSION_MAJOR 8
 
 /* Minor version of the LLVM API */
 #define LLVM_VERSION_MINOR 0
 
 /* Patch version of the LLVM API */
-#define LLVM_VERSION_PATCH 2
+#define LLVM_VERSION_PATCH 1
 
 /* LLVM version string */
-#define LLVM_VERSION_STRING "7.0.2svn"
+#define LLVM_VERSION_STRING "8.0.1svn"
 
 /* Whether LLVM records statistics for use with GetStatistics(),
  * PrintStatistics() or PrintStatisticsJSON()
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
index 301e4f6..4ce9f68 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeView.h
@@ -22,8 +22,8 @@
 namespace llvm {
 namespace codeview {
 
-/// Distinguishes individual records in .debug$T section or PDB type stream. The
-/// documentation and headers talk about this as the "leaf" type.
+/// Distinguishes individual records in .debug$T or .debug$P section or PDB type
+/// stream. The documentation and headers talk about this as the "leaf" type.
 enum class TypeRecordKind : uint16_t {
 #define TYPE_RECORD(lf_ename, value, name) name = value,
 #include "CodeViewTypes.def"
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
index 3f06602..6da8893 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewRegisters.def
@@ -15,254 +15,254 @@
 #define CV_REGISTER(name, value)
 #endif
 
-// This currently only contains the "register subset shraed by all processor
+// This currently only contains the "register subset shared by all processor
 // types" (ERR etc.) and the x86 registers.
 
-CV_REGISTER(ERR, 30000)
-CV_REGISTER(TEB, 30001)
-CV_REGISTER(TIMER, 30002)
-CV_REGISTER(EFAD1, 30003)
-CV_REGISTER(EFAD2, 30004)
-CV_REGISTER(EFAD3, 30005)
-CV_REGISTER(VFRAME, 30006)
-CV_REGISTER(HANDLE, 30007)
-CV_REGISTER(PARAMS, 30008)
-CV_REGISTER(LOCALS, 30009)
-CV_REGISTER(TID, 30010)
-CV_REGISTER(ENV, 30011)
-CV_REGISTER(CMDLN, 30012)
+CV_REGISTER(CVRegERR, 30000)
+CV_REGISTER(CVRegTEB, 30001)
+CV_REGISTER(CVRegTIMER, 30002)
+CV_REGISTER(CVRegEFAD1, 30003)
+CV_REGISTER(CVRegEFAD2, 30004)
+CV_REGISTER(CVRegEFAD3, 30005)
+CV_REGISTER(CVRegVFRAME, 30006)
+CV_REGISTER(CVRegHANDLE, 30007)
+CV_REGISTER(CVRegPARAMS, 30008)
+CV_REGISTER(CVRegLOCALS, 30009)
+CV_REGISTER(CVRegTID, 30010)
+CV_REGISTER(CVRegENV, 30011)
+CV_REGISTER(CVRegCMDLN, 30012)
 
-CV_REGISTER(NONE, 0)
-CV_REGISTER(AL, 1)
-CV_REGISTER(CL, 2)
-CV_REGISTER(DL, 3)
-CV_REGISTER(BL, 4)
-CV_REGISTER(AH, 5)
-CV_REGISTER(CH, 6)
-CV_REGISTER(DH, 7)
-CV_REGISTER(BH, 8)
-CV_REGISTER(AX, 9)
-CV_REGISTER(CX, 10)
-CV_REGISTER(DX, 11)
-CV_REGISTER(BX, 12)
-CV_REGISTER(SP, 13)
-CV_REGISTER(BP, 14)
-CV_REGISTER(SI, 15)
-CV_REGISTER(DI, 16)
-CV_REGISTER(EAX, 17)
-CV_REGISTER(ECX, 18)
-CV_REGISTER(EDX, 19)
-CV_REGISTER(EBX, 20)
-CV_REGISTER(ESP, 21)
-CV_REGISTER(EBP, 22)
-CV_REGISTER(ESI, 23)
-CV_REGISTER(EDI, 24)
-CV_REGISTER(ES, 25)
-CV_REGISTER(CS, 26)
-CV_REGISTER(SS, 27)
-CV_REGISTER(DS, 28)
-CV_REGISTER(FS, 29)
-CV_REGISTER(GS, 30)
-CV_REGISTER(IP, 31)
-CV_REGISTER(FLAGS, 32)
-CV_REGISTER(EIP, 33)
-CV_REGISTER(EFLAGS, 34)
-CV_REGISTER(TEMP, 40)
-CV_REGISTER(TEMPH, 41)
-CV_REGISTER(QUOTE, 42)
-CV_REGISTER(PCDR3, 43)
-CV_REGISTER(PCDR4, 44)
-CV_REGISTER(PCDR5, 45)
-CV_REGISTER(PCDR6, 46)
-CV_REGISTER(PCDR7, 47)
-CV_REGISTER(CR0, 80)
-CV_REGISTER(CR1, 81)
-CV_REGISTER(CR2, 82)
-CV_REGISTER(CR3, 83)
-CV_REGISTER(CR4, 84)
-CV_REGISTER(DR0, 90)
-CV_REGISTER(DR1, 91)
-CV_REGISTER(DR2, 92)
-CV_REGISTER(DR3, 93)
-CV_REGISTER(DR4, 94)
-CV_REGISTER(DR5, 95)
-CV_REGISTER(DR6, 96)
-CV_REGISTER(DR7, 97)
-CV_REGISTER(GDTR, 110)
-CV_REGISTER(GDTL, 111)
-CV_REGISTER(IDTR, 112)
-CV_REGISTER(IDTL, 113)
-CV_REGISTER(LDTR, 114)
-CV_REGISTER(TR, 115)
+CV_REGISTER(CVRegNONE, 0)
+CV_REGISTER(CVRegAL, 1)
+CV_REGISTER(CVRegCL, 2)
+CV_REGISTER(CVRegDL, 3)
+CV_REGISTER(CVRegBL, 4)
+CV_REGISTER(CVRegAH, 5)
+CV_REGISTER(CVRegCH, 6)
+CV_REGISTER(CVRegDH, 7)
+CV_REGISTER(CVRegBH, 8)
+CV_REGISTER(CVRegAX, 9)
+CV_REGISTER(CVRegCX, 10)
+CV_REGISTER(CVRegDX, 11)
+CV_REGISTER(CVRegBX, 12)
+CV_REGISTER(CVRegSP, 13)
+CV_REGISTER(CVRegBP, 14)
+CV_REGISTER(CVRegSI, 15)
+CV_REGISTER(CVRegDI, 16)
+CV_REGISTER(CVRegEAX, 17)
+CV_REGISTER(CVRegECX, 18)
+CV_REGISTER(CVRegEDX, 19)
+CV_REGISTER(CVRegEBX, 20)
+CV_REGISTER(CVRegESP, 21)
+CV_REGISTER(CVRegEBP, 22)
+CV_REGISTER(CVRegESI, 23)
+CV_REGISTER(CVRegEDI, 24)
+CV_REGISTER(CVRegES, 25)
+CV_REGISTER(CVRegCS, 26)
+CV_REGISTER(CVRegSS, 27)
+CV_REGISTER(CVRegDS, 28)
+CV_REGISTER(CVRegFS, 29)
+CV_REGISTER(CVRegGS, 30)
+CV_REGISTER(CVRegIP, 31)
+CV_REGISTER(CVRegFLAGS, 32)
+CV_REGISTER(CVRegEIP, 33)
+CV_REGISTER(CVRegEFLAGS, 34)
+CV_REGISTER(CVRegTEMP, 40)
+CV_REGISTER(CVRegTEMPH, 41)
+CV_REGISTER(CVRegQUOTE, 42)
+CV_REGISTER(CVRegPCDR3, 43)
+CV_REGISTER(CVRegPCDR4, 44)
+CV_REGISTER(CVRegPCDR5, 45)
+CV_REGISTER(CVRegPCDR6, 46)
+CV_REGISTER(CVRegPCDR7, 47)
+CV_REGISTER(CVRegCR0, 80)
+CV_REGISTER(CVRegCR1, 81)
+CV_REGISTER(CVRegCR2, 82)
+CV_REGISTER(CVRegCR3, 83)
+CV_REGISTER(CVRegCR4, 84)
+CV_REGISTER(CVRegDR0, 90)
+CV_REGISTER(CVRegDR1, 91)
+CV_REGISTER(CVRegDR2, 92)
+CV_REGISTER(CVRegDR3, 93)
+CV_REGISTER(CVRegDR4, 94)
+CV_REGISTER(CVRegDR5, 95)
+CV_REGISTER(CVRegDR6, 96)
+CV_REGISTER(CVRegDR7, 97)
+CV_REGISTER(CVRegGDTR, 110)
+CV_REGISTER(CVRegGDTL, 111)
+CV_REGISTER(CVRegIDTR, 112)
+CV_REGISTER(CVRegIDTL, 113)
+CV_REGISTER(CVRegLDTR, 114)
+CV_REGISTER(CVRegTR, 115)
 
-CV_REGISTER(PSEUDO1, 116)
-CV_REGISTER(PSEUDO2, 117)
-CV_REGISTER(PSEUDO3, 118)
-CV_REGISTER(PSEUDO4, 119)
-CV_REGISTER(PSEUDO5, 120)
-CV_REGISTER(PSEUDO6, 121)
-CV_REGISTER(PSEUDO7, 122)
-CV_REGISTER(PSEUDO8, 123)
-CV_REGISTER(PSEUDO9, 124)
+CV_REGISTER(CVRegPSEUDO1, 116)
+CV_REGISTER(CVRegPSEUDO2, 117)
+CV_REGISTER(CVRegPSEUDO3, 118)
+CV_REGISTER(CVRegPSEUDO4, 119)
+CV_REGISTER(CVRegPSEUDO5, 120)
+CV_REGISTER(CVRegPSEUDO6, 121)
+CV_REGISTER(CVRegPSEUDO7, 122)
+CV_REGISTER(CVRegPSEUDO8, 123)
+CV_REGISTER(CVRegPSEUDO9, 124)
 
-CV_REGISTER(ST0, 128)
-CV_REGISTER(ST1, 129)
-CV_REGISTER(ST2, 130)
-CV_REGISTER(ST3, 131)
-CV_REGISTER(ST4, 132)
-CV_REGISTER(ST5, 133)
-CV_REGISTER(ST6, 134)
-CV_REGISTER(ST7, 135)
-CV_REGISTER(CTRL, 136)
-CV_REGISTER(STAT, 137)
-CV_REGISTER(TAG, 138)
-CV_REGISTER(FPIP, 139)
-CV_REGISTER(FPCS, 140)
-CV_REGISTER(FPDO, 141)
-CV_REGISTER(FPDS, 142)
-CV_REGISTER(ISEM, 143)
-CV_REGISTER(FPEIP, 144)
-CV_REGISTER(FPEDO, 145)
+CV_REGISTER(CVRegST0, 128)
+CV_REGISTER(CVRegST1, 129)
+CV_REGISTER(CVRegST2, 130)
+CV_REGISTER(CVRegST3, 131)
+CV_REGISTER(CVRegST4, 132)
+CV_REGISTER(CVRegST5, 133)
+CV_REGISTER(CVRegST6, 134)
+CV_REGISTER(CVRegST7, 135)
+CV_REGISTER(CVRegCTRL, 136)
+CV_REGISTER(CVRegSTAT, 137)
+CV_REGISTER(CVRegTAG, 138)
+CV_REGISTER(CVRegFPIP, 139)
+CV_REGISTER(CVRegFPCS, 140)
+CV_REGISTER(CVRegFPDO, 141)
+CV_REGISTER(CVRegFPDS, 142)
+CV_REGISTER(CVRegISEM, 143)
+CV_REGISTER(CVRegFPEIP, 144)
+CV_REGISTER(CVRegFPEDO, 145)
 
-CV_REGISTER(MM0, 146)
-CV_REGISTER(MM1, 147)
-CV_REGISTER(MM2, 148)
-CV_REGISTER(MM3, 149)
-CV_REGISTER(MM4, 150)
-CV_REGISTER(MM5, 151)
-CV_REGISTER(MM6, 152)
-CV_REGISTER(MM7, 153)
+CV_REGISTER(CVRegMM0, 146)
+CV_REGISTER(CVRegMM1, 147)
+CV_REGISTER(CVRegMM2, 148)
+CV_REGISTER(CVRegMM3, 149)
+CV_REGISTER(CVRegMM4, 150)
+CV_REGISTER(CVRegMM5, 151)
+CV_REGISTER(CVRegMM6, 152)
+CV_REGISTER(CVRegMM7, 153)
 
-CV_REGISTER(XMM0, 154)
-CV_REGISTER(XMM1, 155)
-CV_REGISTER(XMM2, 156)
-CV_REGISTER(XMM3, 157)
-CV_REGISTER(XMM4, 158)
-CV_REGISTER(XMM5, 159)
-CV_REGISTER(XMM6, 160)
-CV_REGISTER(XMM7, 161)
+CV_REGISTER(CVRegXMM0, 154)
+CV_REGISTER(CVRegXMM1, 155)
+CV_REGISTER(CVRegXMM2, 156)
+CV_REGISTER(CVRegXMM3, 157)
+CV_REGISTER(CVRegXMM4, 158)
+CV_REGISTER(CVRegXMM5, 159)
+CV_REGISTER(CVRegXMM6, 160)
+CV_REGISTER(CVRegXMM7, 161)
 
-CV_REGISTER(MXCSR, 211)
+CV_REGISTER(CVRegMXCSR, 211)
 
-CV_REGISTER(EDXEAX, 212)
+CV_REGISTER(CVRegEDXEAX, 212)
 
-CV_REGISTER(EMM0L, 220)
-CV_REGISTER(EMM1L, 221)
-CV_REGISTER(EMM2L, 222)
-CV_REGISTER(EMM3L, 223)
-CV_REGISTER(EMM4L, 224)
-CV_REGISTER(EMM5L, 225)
-CV_REGISTER(EMM6L, 226)
-CV_REGISTER(EMM7L, 227)
+CV_REGISTER(CVRegEMM0L, 220)
+CV_REGISTER(CVRegEMM1L, 221)
+CV_REGISTER(CVRegEMM2L, 222)
+CV_REGISTER(CVRegEMM3L, 223)
+CV_REGISTER(CVRegEMM4L, 224)
+CV_REGISTER(CVRegEMM5L, 225)
+CV_REGISTER(CVRegEMM6L, 226)
+CV_REGISTER(CVRegEMM7L, 227)
 
-CV_REGISTER(EMM0H, 228)
-CV_REGISTER(EMM1H, 229)
-CV_REGISTER(EMM2H, 230)
-CV_REGISTER(EMM3H, 231)
-CV_REGISTER(EMM4H, 232)
-CV_REGISTER(EMM5H, 233)
-CV_REGISTER(EMM6H, 234)
-CV_REGISTER(EMM7H, 235)
+CV_REGISTER(CVRegEMM0H, 228)
+CV_REGISTER(CVRegEMM1H, 229)
+CV_REGISTER(CVRegEMM2H, 230)
+CV_REGISTER(CVRegEMM3H, 231)
+CV_REGISTER(CVRegEMM4H, 232)
+CV_REGISTER(CVRegEMM5H, 233)
+CV_REGISTER(CVRegEMM6H, 234)
+CV_REGISTER(CVRegEMM7H, 235)
 
-CV_REGISTER(MM00, 236)
-CV_REGISTER(MM01, 237)
-CV_REGISTER(MM10, 238)
-CV_REGISTER(MM11, 239)
-CV_REGISTER(MM20, 240)
-CV_REGISTER(MM21, 241)
-CV_REGISTER(MM30, 242)
-CV_REGISTER(MM31, 243)
-CV_REGISTER(MM40, 244)
-CV_REGISTER(MM41, 245)
-CV_REGISTER(MM50, 246)
-CV_REGISTER(MM51, 247)
-CV_REGISTER(MM60, 248)
-CV_REGISTER(MM61, 249)
-CV_REGISTER(MM70, 250)
-CV_REGISTER(MM71, 251)
+CV_REGISTER(CVRegMM00, 236)
+CV_REGISTER(CVRegMM01, 237)
+CV_REGISTER(CVRegMM10, 238)
+CV_REGISTER(CVRegMM11, 239)
+CV_REGISTER(CVRegMM20, 240)
+CV_REGISTER(CVRegMM21, 241)
+CV_REGISTER(CVRegMM30, 242)
+CV_REGISTER(CVRegMM31, 243)
+CV_REGISTER(CVRegMM40, 244)
+CV_REGISTER(CVRegMM41, 245)
+CV_REGISTER(CVRegMM50, 246)
+CV_REGISTER(CVRegMM51, 247)
+CV_REGISTER(CVRegMM60, 248)
+CV_REGISTER(CVRegMM61, 249)
+CV_REGISTER(CVRegMM70, 250)
+CV_REGISTER(CVRegMM71, 251)
 
-CV_REGISTER(BND0, 396)
-CV_REGISTER(BND1, 397)
-CV_REGISTER(BND2, 398)
+CV_REGISTER(CVRegBND0, 396)
+CV_REGISTER(CVRegBND1, 397)
+CV_REGISTER(CVRegBND2, 398)
 
 
-CV_REGISTER(XMM8, 252)
-CV_REGISTER(XMM9, 253)
-CV_REGISTER(XMM10, 254)
-CV_REGISTER(XMM11, 255)
-CV_REGISTER(XMM12, 256)
-CV_REGISTER(XMM13, 257)
-CV_REGISTER(XMM14, 258)
-CV_REGISTER(XMM15, 259)
+CV_REGISTER(CVRegXMM8, 252)
+CV_REGISTER(CVRegXMM9, 253)
+CV_REGISTER(CVRegXMM10, 254)
+CV_REGISTER(CVRegXMM11, 255)
+CV_REGISTER(CVRegXMM12, 256)
+CV_REGISTER(CVRegXMM13, 257)
+CV_REGISTER(CVRegXMM14, 258)
+CV_REGISTER(CVRegXMM15, 259)
 
 
-CV_REGISTER(SIL, 324)
-CV_REGISTER(DIL, 325)
-CV_REGISTER(BPL, 326)
-CV_REGISTER(SPL, 327)
+CV_REGISTER(CVRegSIL, 324)
+CV_REGISTER(CVRegDIL, 325)
+CV_REGISTER(CVRegBPL, 326)
+CV_REGISTER(CVRegSPL, 327)
 
-CV_REGISTER(RAX, 328)
-CV_REGISTER(RBX, 329)
-CV_REGISTER(RCX, 330)
-CV_REGISTER(RDX, 331)
-CV_REGISTER(RSI, 332)
-CV_REGISTER(RDI, 333)
-CV_REGISTER(RBP, 334)
-CV_REGISTER(RSP, 335)
+CV_REGISTER(CVRegRAX, 328)
+CV_REGISTER(CVRegRBX, 329)
+CV_REGISTER(CVRegRCX, 330)
+CV_REGISTER(CVRegRDX, 331)
+CV_REGISTER(CVRegRSI, 332)
+CV_REGISTER(CVRegRDI, 333)
+CV_REGISTER(CVRegRBP, 334)
+CV_REGISTER(CVRegRSP, 335)
 
-CV_REGISTER(R8, 336)
-CV_REGISTER(R9, 337)
-CV_REGISTER(R10, 338)
-CV_REGISTER(R11, 339)
-CV_REGISTER(R12, 340)
-CV_REGISTER(R13, 341)
-CV_REGISTER(R14, 342)
-CV_REGISTER(R15, 343)
+CV_REGISTER(CVRegR8, 336)
+CV_REGISTER(CVRegR9, 337)
+CV_REGISTER(CVRegR10, 338)
+CV_REGISTER(CVRegR11, 339)
+CV_REGISTER(CVRegR12, 340)
+CV_REGISTER(CVRegR13, 341)
+CV_REGISTER(CVRegR14, 342)
+CV_REGISTER(CVRegR15, 343)
 
-CV_REGISTER(R8B, 344)
-CV_REGISTER(R9B, 345)
-CV_REGISTER(R10B, 346)
-CV_REGISTER(R11B, 347)
-CV_REGISTER(R12B, 348)
-CV_REGISTER(R13B, 349)
-CV_REGISTER(R14B, 350)
-CV_REGISTER(R15B, 351)
+CV_REGISTER(CVRegR8B, 344)
+CV_REGISTER(CVRegR9B, 345)
+CV_REGISTER(CVRegR10B, 346)
+CV_REGISTER(CVRegR11B, 347)
+CV_REGISTER(CVRegR12B, 348)
+CV_REGISTER(CVRegR13B, 349)
+CV_REGISTER(CVRegR14B, 350)
+CV_REGISTER(CVRegR15B, 351)
 
-CV_REGISTER(R8W, 352)
-CV_REGISTER(R9W, 353)
-CV_REGISTER(R10W, 354)
-CV_REGISTER(R11W, 355)
-CV_REGISTER(R12W, 356)
-CV_REGISTER(R13W, 357)
-CV_REGISTER(R14W, 358)
-CV_REGISTER(R15W, 359)
+CV_REGISTER(CVRegR8W, 352)
+CV_REGISTER(CVRegR9W, 353)
+CV_REGISTER(CVRegR10W, 354)
+CV_REGISTER(CVRegR11W, 355)
+CV_REGISTER(CVRegR12W, 356)
+CV_REGISTER(CVRegR13W, 357)
+CV_REGISTER(CVRegR14W, 358)
+CV_REGISTER(CVRegR15W, 359)
 
-CV_REGISTER(R8D, 360)
-CV_REGISTER(R9D, 361)
-CV_REGISTER(R10D, 362)
-CV_REGISTER(R11D, 363)
-CV_REGISTER(R12D, 364)
-CV_REGISTER(R13D, 365)
-CV_REGISTER(R14D, 366)
-CV_REGISTER(R15D, 367)
+CV_REGISTER(CVRegR8D, 360)
+CV_REGISTER(CVRegR9D, 361)
+CV_REGISTER(CVRegR10D, 362)
+CV_REGISTER(CVRegR11D, 363)
+CV_REGISTER(CVRegR12D, 364)
+CV_REGISTER(CVRegR13D, 365)
+CV_REGISTER(CVRegR14D, 366)
+CV_REGISTER(CVRegR15D, 367)
 
 
 // cvconst.h defines both CV_REG_YMM0 (252) and CV_AMD64_YMM0 (368). Keep the
 // original prefix to distinguish them.
 
-CV_REGISTER(AMD64_YMM0, 368)
-CV_REGISTER(AMD64_YMM1, 369)
-CV_REGISTER(AMD64_YMM2, 370)
-CV_REGISTER(AMD64_YMM3, 371)
-CV_REGISTER(AMD64_YMM4, 372)
-CV_REGISTER(AMD64_YMM5, 373)
-CV_REGISTER(AMD64_YMM6, 374)
-CV_REGISTER(AMD64_YMM7, 375)
-CV_REGISTER(AMD64_YMM8, 376)
-CV_REGISTER(AMD64_YMM9, 377)
-CV_REGISTER(AMD64_YMM10, 378)
-CV_REGISTER(AMD64_YMM11, 379)
-CV_REGISTER(AMD64_YMM12, 380)
-CV_REGISTER(AMD64_YMM13, 381)
-CV_REGISTER(AMD64_YMM14, 382)
-CV_REGISTER(AMD64_YMM15, 383)
+CV_REGISTER(CVRegAMD64_YMM0, 368)
+CV_REGISTER(CVRegAMD64_YMM1, 369)
+CV_REGISTER(CVRegAMD64_YMM2, 370)
+CV_REGISTER(CVRegAMD64_YMM3, 371)
+CV_REGISTER(CVRegAMD64_YMM4, 372)
+CV_REGISTER(CVRegAMD64_YMM5, 373)
+CV_REGISTER(CVRegAMD64_YMM6, 374)
+CV_REGISTER(CVRegAMD64_YMM7, 375)
+CV_REGISTER(CVRegAMD64_YMM8, 376)
+CV_REGISTER(CVRegAMD64_YMM9, 377)
+CV_REGISTER(CVRegAMD64_YMM10, 378)
+CV_REGISTER(CVRegAMD64_YMM11, 379)
+CV_REGISTER(CVRegAMD64_YMM12, 380)
+CV_REGISTER(CVRegAMD64_YMM13, 381)
+CV_REGISTER(CVRegAMD64_YMM14, 382)
+CV_REGISTER(CVRegAMD64_YMM15, 383)
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
index 41c5380..b5f1cc0 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
@@ -143,7 +143,6 @@
 CV_SYMBOL(S_MANMANYREG    , 0x1121)
 CV_SYMBOL(S_MANREGREL     , 0x1122)
 CV_SYMBOL(S_MANMANYREG2   , 0x1123)
-CV_SYMBOL(S_UNAMESPACE    , 0x1124)
 CV_SYMBOL(S_DATAREF       , 0x1126)
 CV_SYMBOL(S_ANNOTATIONREF , 0x1128)
 CV_SYMBOL(S_TOKENREF      , 0x1129)
@@ -255,6 +254,7 @@
 SYMBOL_RECORD(S_LTHREAD32     , 0x1112, ThreadLocalDataSym)
 SYMBOL_RECORD_ALIAS(S_GTHREAD32     , 0x1113, GlobalTLS, ThreadLocalDataSym)
 
+SYMBOL_RECORD(S_UNAMESPACE    , 0x1124, UsingNamespaceSym)
 
 #undef CV_SYMBOL
 #undef SYMBOL_RECORD
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewTypes.def b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewTypes.def
index 69ce960..e9a479d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewTypes.def
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/CodeViewTypes.def
@@ -87,6 +87,8 @@
 
 TYPE_RECORD(LF_METHODLIST, 0x1206, MethodOverloadList)
 
+TYPE_RECORD(LF_PRECOMP, 0x1509, Precomp)
+TYPE_RECORD(LF_ENDPRECOMP, 0x0014, EndPrecomp)
 
 // 16 bit type records.
 CV_TYPE(LF_MODIFIER_16t, 0x0001)
@@ -106,7 +108,6 @@
 CV_TYPE(LF_DIMARRAY_16t, 0x0011)
 CV_TYPE(LF_VFTPATH_16t, 0x0012)
 CV_TYPE(LF_PRECOMP_16t, 0x0013)
-CV_TYPE(LF_ENDPRECOMP, 0x0014)
 CV_TYPE(LF_OEM_16t, 0x0015)
 CV_TYPE(LF_TYPESERVER_ST, 0x0016)
 
@@ -181,7 +182,6 @@
 CV_TYPE(LF_ST_MAX, 0x1500)
 CV_TYPE(LF_TYPESERVER, 0x1501)
 CV_TYPE(LF_DIMARRAY, 0x1508)
-CV_TYPE(LF_PRECOMP, 0x1509)
 CV_TYPE(LF_ALIAS, 0x150a)
 CV_TYPE(LF_DEFARG, 0x150b)
 CV_TYPE(LF_FRIENDFCN, 0x150c)
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h
index 16d7869..383f7dd 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h
@@ -26,7 +26,7 @@
 namespace llvm {
 namespace codeview {
 
-/// \brief Provides amortized O(1) random access to a CodeView type stream.
+/// Provides amortized O(1) random access to a CodeView type stream.
 /// Normally to access a type from a type stream, you must know its byte
 /// offset into the type stream, because type records are variable-lengthed.
 /// However, this is not the way we prefer to access them.  For example, given
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
index cf267f2..9330682 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/SymbolRecord.h
@@ -942,6 +942,19 @@
   uint32_t RecordOffset;
 };
 
+// S_UNAMESPACE
+class UsingNamespaceSym : public SymbolRecord {
+public:
+  explicit UsingNamespaceSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
+  explicit UsingNamespaceSym(uint32_t RecordOffset)
+      : SymbolRecord(SymbolRecordKind::RegRelativeSym),
+        RecordOffset(RecordOffset) {}
+
+  StringRef Name;
+
+  uint32_t RecordOffset;
+};
+
 // S_ANNOTATION
 
 using CVSymbol = CVRecord<SymbolKind>;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
index 7413375..1f732d2 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeHashing.h
@@ -58,7 +58,10 @@
   }
 };
 
-enum class GlobalTypeHashAlg : uint16_t { SHA1 = 0 };
+enum class GlobalTypeHashAlg : uint16_t {
+  SHA1 = 0, // standard 20-byte SHA1 hash
+  SHA1_8    // last 8-bytes of standard SHA1 hash
+};
 
 /// A globally hashed type represents a hash value that is sufficient to
 /// uniquely identify a record across multiple type streams or type sequences.
@@ -77,10 +80,10 @@
   GloballyHashedType(StringRef H)
       : GloballyHashedType(ArrayRef<uint8_t>(H.bytes_begin(), H.bytes_end())) {}
   GloballyHashedType(ArrayRef<uint8_t> H) {
-    assert(H.size() == 20);
-    ::memcpy(Hash.data(), H.data(), 20);
+    assert(H.size() == 8);
+    ::memcpy(Hash.data(), H.data(), 8);
   }
-  std::array<uint8_t, 20> Hash;
+  std::array<uint8_t, 8> Hash;
 
   /// Given a sequence of bytes representing a record, compute a global hash for
   /// this record.  Due to the nature of global hashes incorporating the hashes
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecord.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecord.h
index 55f2822..61ebdf8 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecord.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeRecord.h
@@ -896,6 +896,33 @@
   TypeIndex ContinuationIndex;
 };
 
+// LF_PRECOMP
+class PrecompRecord : public TypeRecord {
+public:
+  PrecompRecord() = default;
+  explicit PrecompRecord(TypeRecordKind Kind) : TypeRecord(Kind) {}
+
+  uint32_t getStartTypeIndex() const { return StartTypeIndex; }
+  uint32_t getTypesCount() const { return TypesCount; }
+  uint32_t getSignature() const { return Signature; }
+  StringRef getPrecompFilePath() const { return PrecompFilePath; }
+
+  uint32_t StartTypeIndex;
+  uint32_t TypesCount;
+  uint32_t Signature;
+  StringRef PrecompFilePath;
+};
+
+// LF_ENDPRECOMP
+class EndPrecompRecord : public TypeRecord {
+public:
+  EndPrecompRecord() = default;
+  explicit EndPrecompRecord(TypeRecordKind Kind) : TypeRecord(Kind) {}
+
+  uint32_t getSignature() const { return Signature; }
+
+  uint32_t Signature;
+};
 } // end namespace codeview
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
index 59e216a..583740d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/CodeView/TypeStreamMerger.h
@@ -23,7 +23,7 @@
 class GlobalTypeTableBuilder;
 class MergingTypeTableBuilder;
 
-/// \brief Merge one set of type records into another.  This method assumes
+/// Merge one set of type records into another.  This method assumes
 /// that all records are type records, and there are no Id records present.
 ///
 /// \param Dest The table to store the re-written type records into.
@@ -40,7 +40,7 @@
                        SmallVectorImpl<TypeIndex> &SourceToDest,
                        const CVTypeArray &Types);
 
-/// \brief Merge one set of id records into another.  This method assumes
+/// Merge one set of id records into another.  This method assumes
 /// that all records are id records, and there are no Type records present.
 /// However, since Id records can refer back to Type records, this method
 /// assumes that the referenced type records have also been merged into
@@ -65,7 +65,7 @@
                      SmallVectorImpl<TypeIndex> &SourceToDest,
                      const CVTypeArray &Ids);
 
-/// \brief Merge a unified set of type and id records, splitting them into
+/// Merge a unified set of type and id records, splitting them into
 /// separate output streams.
 ///
 /// \param DestIds The table to store the re-written id records into.
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DIContext.h b/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
index f89eb34..bbdd5e0 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DIContext.h
@@ -154,6 +154,8 @@
 struct DIDumpOptions {
   unsigned DumpType = DIDT_All;
   unsigned RecurseDepth = -1U;
+  uint16_t Version = 0; // DWARF version to assume when extracting.
+  uint8_t AddrSize = 4; // Address byte size to assume when extracting.
   bool ShowAddresses = true;
   bool ShowChildren = false;
   bool ShowParents = false;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
index 27f11ca..1d44872 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h
@@ -56,12 +56,6 @@
     /// in this Accelerator Entry.
     virtual Optional<uint64_t> getCUOffset() const = 0;
 
-    /// Returns the Section Offset of the Debug Info Entry associated with this
-    /// Accelerator Entry or None if the DIE offset is not recorded in this
-    /// Accelerator Entry. The returned offset is relative to the start of the
-    /// Section containing the DIE.
-    virtual Optional<uint64_t> getDIESectionOffset() const = 0;
-
     /// Returns the Tag of the Debug Info Entry associated with this
     /// Accelerator Entry or None if the Tag is not recorded in this
     /// Accelerator Entry.
@@ -130,7 +124,13 @@
 
   public:
     Optional<uint64_t> getCUOffset() const override;
-    Optional<uint64_t> getDIESectionOffset() const override;
+
+    /// Returns the Section Offset of the Debug Info Entry associated with this
+    /// Accelerator Entry or None if the DIE offset is not recorded in this
+    /// Accelerator Entry. The returned offset is relative to the start of the
+    /// Section containing the DIE.
+    Optional<uint64_t> getDIESectionOffset() const;
+
     Optional<dwarf::Tag> getTag() const override;
 
     /// Returns the value of the Atom in this Accelerator Entry, if the Entry
@@ -239,6 +239,7 @@
 
 public:
   class NameIndex;
+  class NameIterator;
   class ValueIterator;
 
   /// Dwarf 5 Name Index header.
@@ -283,6 +284,10 @@
 
     Entry(const NameIndex &NameIdx, const Abbrev &Abbr);
 
+  public:
+    Optional<uint64_t> getCUOffset() const override;
+    Optional<dwarf::Tag> getTag() const override { return tag(); }
+
     /// Returns the Index into the Compilation Unit list of the owning Name
     /// Index or None if this Accelerator Entry does not have an associated
     /// Compilation Unit. It is up to the user to verify that the returned Index
@@ -293,11 +298,6 @@
     /// DW_IDX_compile_unit attribute.
     Optional<uint64_t> getCUIndex() const;
 
-  public:
-    Optional<uint64_t> getCUOffset() const override;
-    Optional<uint64_t> getDIESectionOffset() const override;
-    Optional<dwarf::Tag> getTag() const override { return tag(); }
-
     /// .debug_names-specific getter, which always succeeds (DWARF v5 index
     /// entries always have a tag).
     dwarf::Tag tag() const { return Abbr->Tag; }
@@ -319,7 +319,6 @@
     friend class ValueIterator;
   };
 
-private:
   /// Error returned by NameIndex::getEntry to report it has reached the end of
   /// the entry list.
   class SentinelError : public ErrorInfo<SentinelError> {
@@ -330,6 +329,7 @@
     std::error_code convertToErrorCode() const override;
   };
 
+private:
   /// DenseMapInfo for struct Abbrev.
   struct AbbrevMapInfo {
     static Abbrev getEmptyKey();
@@ -351,9 +351,34 @@
 public:
   /// A single entry in the Name Table (Dwarf 5 sect. 6.1.1.4.6) of the Name
   /// Index.
-  struct NameTableEntry {
-    uint32_t StringOffset; ///< Offset of the name of the described entities.
-    uint32_t EntryOffset;  ///< Offset of the first Entry in the list.
+  class NameTableEntry {
+    DataExtractor StrData;
+
+    uint32_t Index;
+    uint32_t StringOffset;
+    uint32_t EntryOffset;
+
+  public:
+    NameTableEntry(const DataExtractor &StrData, uint32_t Index,
+                   uint32_t StringOffset, uint32_t EntryOffset)
+        : StrData(StrData), Index(Index), StringOffset(StringOffset),
+          EntryOffset(EntryOffset) {}
+
+    /// Return the index of this name in the parent Name Index.
+    uint32_t getIndex() const { return Index; }
+
+    /// Returns the offset of the name of the described entities.
+    uint32_t getStringOffset() const { return StringOffset; }
+
+    /// Return the string referenced by this name table entry or nullptr if the
+    /// string offset is not valid.
+    const char *getString() const {
+      uint32_t Off = StringOffset;
+      return StrData.getCStr(&Off);
+    }
+
+    /// Returns the offset of the first Entry in the list.
+    uint32_t getEntryOffset() const { return EntryOffset; }
   };
 
   /// Represents a single accelerator table within the Dwarf 5 .debug_names
@@ -373,14 +398,12 @@
     uint32_t EntryOffsetsBase;
     uint32_t EntriesBase;
 
-    Expected<Entry> getEntry(uint32_t *Offset) const;
-
     void dumpCUs(ScopedPrinter &W) const;
     void dumpLocalTUs(ScopedPrinter &W) const;
     void dumpForeignTUs(ScopedPrinter &W) const;
     void dumpAbbreviations(ScopedPrinter &W) const;
     bool dumpEntry(ScopedPrinter &W, uint32_t *Offset) const;
-    void dumpName(ScopedPrinter &W, uint32_t Index,
+    void dumpName(ScopedPrinter &W, const NameTableEntry &NTE,
                   Optional<uint32_t> Hash) const;
     void dumpBucket(ScopedPrinter &W, uint32_t Bucket) const;
 
@@ -429,6 +452,14 @@
       return Abbrevs;
     }
 
+    Expected<Entry> getEntry(uint32_t *Offset) const;
+
+    /// Look up all entries in this Name Index matching \c Key.
+    iterator_range<ValueIterator> equal_range(StringRef Key) const;
+
+    NameIterator begin() const { return NameIterator(this, 1); }
+    NameIterator end() const { return NameIterator(this, getNameCount() + 1); }
+
     llvm::Error extract();
     uint32_t getUnitOffset() const { return Base; }
     uint32_t getNextUnitOffset() const { return Base + 4 + Hdr.UnitLength; }
@@ -444,6 +475,10 @@
     /// "NameIndices" vector in the Accelerator section.
     const NameIndex *CurrentIndex = nullptr;
 
+    /// Whether this is a local iterator (searches in CurrentIndex only) or not
+    /// (searches all name indices).
+    bool IsLocal;
+
     Optional<Entry> CurrentEntry;
     unsigned DataOffset = 0; ///< Offset into the section.
     std::string Key;         ///< The Key we are searching for.
@@ -464,6 +499,10 @@
     /// Indexes in the section in sequence.
     ValueIterator(const DWARFDebugNames &AccelTable, StringRef Key);
 
+    /// Create a "begin" iterator for looping over all entries in a specific
+    /// Name Index. Other indices in the section will not be visited.
+    ValueIterator(const NameIndex &NI, StringRef Key);
+
     /// End marker.
     ValueIterator() = default;
 
@@ -486,8 +525,55 @@
     }
   };
 
+  class NameIterator {
+
+    /// The Name Index we are iterating through.
+    const NameIndex *CurrentIndex;
+
+    /// The current name in the Name Index.
+    uint32_t CurrentName;
+
+    void next() {
+      assert(CurrentName <= CurrentIndex->getNameCount());
+      ++CurrentName;
+    }
+
+  public:
+    using iterator_category = std::input_iterator_tag;
+    using value_type = NameTableEntry;
+    using difference_type = uint32_t;
+    using pointer = NameTableEntry *;
+    using reference = NameTableEntry; // We return entries by value.
+
+    /// Creates an iterator whose initial position is name CurrentName in
+    /// CurrentIndex.
+    NameIterator(const NameIndex *CurrentIndex, uint32_t CurrentName)
+        : CurrentIndex(CurrentIndex), CurrentName(CurrentName) {}
+
+    NameTableEntry operator*() const {
+      return CurrentIndex->getNameTableEntry(CurrentName);
+    }
+    NameIterator &operator++() {
+      next();
+      return *this;
+    }
+    NameIterator operator++(int) {
+      NameIterator I = *this;
+      next();
+      return I;
+    }
+
+    friend bool operator==(const NameIterator &A, const NameIterator &B) {
+      return A.CurrentIndex == B.CurrentIndex && A.CurrentName == B.CurrentName;
+    }
+    friend bool operator!=(const NameIterator &A, const NameIterator &B) {
+      return !(A == B);
+    }
+  };
+
 private:
   SmallVector<NameIndex, 0> NameIndices;
+  DenseMap<uint32_t, const NameIndex *> CUToNameIndex;
 
 public:
   DWARFDebugNames(const DWARFDataExtractor &AccelSection,
@@ -503,6 +589,10 @@
   using const_iterator = SmallVector<NameIndex, 0>::const_iterator;
   const_iterator begin() const { return NameIndices.begin(); }
   const_iterator end() const { return NameIndices.end(); }
+
+  /// Return the Name Index covering the compile unit at CUOffset, or nullptr if
+  /// there is no Name Index covering that unit.
+  const NameIndex *getCUNameIndex(uint32_t CUOffset);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h
index a18adf8..27d56d7 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFCompileUnit.h
@@ -18,20 +18,20 @@
 class DWARFCompileUnit : public DWARFUnit {
 public:
   DWARFCompileUnit(DWARFContext &Context, const DWARFSection &Section,
+                   const DWARFUnitHeader &Header,
                    const DWARFDebugAbbrev *DA, const DWARFSection *RS,
                    StringRef SS, const DWARFSection &SOS,
                    const DWARFSection *AOS, const DWARFSection &LS, bool LE,
-                   bool IsDWO, const DWARFUnitSectionBase &UnitSection,
-                   const DWARFUnitIndex::Entry *Entry)
-      : DWARFUnit(Context, Section, DA, RS, SS, SOS, AOS, LS, LE, IsDWO,
-                  UnitSection, Entry) {}
+                   bool IsDWO, const DWARFUnitVector &UnitVector)
+      : DWARFUnit(Context, Section, Header, DA, RS, SS, SOS, AOS, LS, LE, IsDWO,
+                  UnitVector) {}
 
-  // VTable anchor.
+  /// VTable anchor.
   ~DWARFCompileUnit() override;
-
-  void dump(raw_ostream &OS, DIDumpOptions DumpOpts);
-
-  static const DWARFSectionKind Section = DW_SECT_INFO;
+  /// Dump this compile unit to \p OS.
+  void dump(raw_ostream &OS, DIDumpOptions DumpOpts) override;
+  /// Enable LLVM-style RTTI.
+  static bool classof(const DWARFUnit *U) { return !U->isTypeUnit(); }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
index e842cf2..fc398bd 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFContext.h
@@ -57,8 +57,7 @@
 /// This data structure is the top level entity that deals with dwarf debug
 /// information parsing. The actual data is supplied through DWARFObj.
 class DWARFContext : public DIContext {
-  DWARFUnitSection<DWARFCompileUnit> CUs;
-  std::deque<DWARFUnitSection<DWARFTypeUnit>> TUs;
+  DWARFUnitVector NormalUnits;
   std::unique_ptr<DWARFUnitIndex> CUIndex;
   std::unique_ptr<DWARFGdbIndex> GdbIndex;
   std::unique_ptr<DWARFUnitIndex> TUIndex;
@@ -75,8 +74,7 @@
   std::unique_ptr<AppleAcceleratorTable> AppleNamespaces;
   std::unique_ptr<AppleAcceleratorTable> AppleObjC;
 
-  DWARFUnitSection<DWARFCompileUnit> DWOCUs;
-  std::deque<DWARFUnitSection<DWARFTypeUnit>> DWOTUs;
+  DWARFUnitVector DWOUnits;
   std::unique_ptr<DWARFDebugAbbrev> AbbrevDWO;
   std::unique_ptr<DWARFDebugLocDWO> LocDWO;
 
@@ -95,22 +93,17 @@
   std::unique_ptr<MCRegisterInfo> RegInfo;
 
   /// Read compile units from the debug_info section (if necessary)
-  /// and store them in CUs.
-  void parseCompileUnits();
-
-  /// Read type units from the debug_types sections (if necessary)
-  /// and store them in TUs.
-  void parseTypeUnits();
+  /// and type units from the debug_types sections (if necessary)
+  /// and store them in NormalUnits.
+  void parseNormalUnits();
 
   /// Read compile units from the debug_info.dwo section (if necessary)
-  /// and store them in DWOCUs.
-  void parseDWOCompileUnits();
+  /// and type units from the debug_types.dwo section (if necessary)
+  /// and store them in DWOUnits.
+  /// If \p Lazy is true, set up to parse but don't actually parse them.
+  enum { EagerParse = false, LazyParse = true };
+  void parseDWOUnits(bool Lazy = false);
 
-  /// Read type units from the debug_types.dwo section (if necessary)
-  /// and store them in DWOTUs.
-  void parseDWOTypeUnits();
-
-protected:
   std::unique_ptr<const DWARFObject> DObj;
 
 public:
@@ -139,72 +132,102 @@
 
   bool verify(raw_ostream &OS, DIDumpOptions DumpOpts = {}) override;
 
-  using cu_iterator_range = DWARFUnitSection<DWARFCompileUnit>::iterator_range;
-  using tu_iterator_range = DWARFUnitSection<DWARFTypeUnit>::iterator_range;
-  using tu_section_iterator_range = iterator_range<decltype(TUs)::iterator>;
+  using unit_iterator_range = DWARFUnitVector::iterator_range;
 
-  /// Get compile units in this context.
-  cu_iterator_range compile_units() {
-    parseCompileUnits();
-    return cu_iterator_range(CUs.begin(), CUs.end());
+  /// Get units from .debug_info in this context.
+  unit_iterator_range info_section_units() {
+    parseNormalUnits();
+    return unit_iterator_range(NormalUnits.begin(),
+                               NormalUnits.begin() +
+                                   NormalUnits.getNumInfoUnits());
   }
 
+  /// Get units from .debug_types in this context.
+  unit_iterator_range types_section_units() {
+    parseNormalUnits();
+    return unit_iterator_range(
+        NormalUnits.begin() + NormalUnits.getNumInfoUnits(), NormalUnits.end());
+  }
+
+  /// Get compile units in this context.
+  unit_iterator_range compile_units() { return info_section_units(); }
+
   /// Get type units in this context.
-  tu_section_iterator_range type_unit_sections() {
-    parseTypeUnits();
-    return tu_section_iterator_range(TUs.begin(), TUs.end());
+  unit_iterator_range type_units() { return types_section_units(); }
+
+  /// Get all normal compile/type units in this context.
+  unit_iterator_range normal_units() {
+    parseNormalUnits();
+    return unit_iterator_range(NormalUnits.begin(), NormalUnits.end());
+  }
+
+  /// Get units from .debug_info..dwo in the DWO context.
+  unit_iterator_range dwo_info_section_units() {
+    parseDWOUnits();
+    return unit_iterator_range(DWOUnits.begin(),
+                               DWOUnits.begin() + DWOUnits.getNumInfoUnits());
+  }
+
+  /// Get units from .debug_types.dwo in the DWO context.
+  unit_iterator_range dwo_types_section_units() {
+    parseDWOUnits();
+    return unit_iterator_range(DWOUnits.begin() + DWOUnits.getNumInfoUnits(),
+                               DWOUnits.end());
   }
 
   /// Get compile units in the DWO context.
-  cu_iterator_range dwo_compile_units() {
-    parseDWOCompileUnits();
-    return cu_iterator_range(DWOCUs.begin(), DWOCUs.end());
-  }
+  unit_iterator_range dwo_compile_units() { return dwo_info_section_units(); }
 
   /// Get type units in the DWO context.
-  tu_section_iterator_range dwo_type_unit_sections() {
-    parseDWOTypeUnits();
-    return tu_section_iterator_range(DWOTUs.begin(), DWOTUs.end());
+  unit_iterator_range dwo_type_units() { return dwo_types_section_units(); }
+
+  /// Get all units in the DWO context.
+  unit_iterator_range dwo_units() {
+    parseDWOUnits();
+    return unit_iterator_range(DWOUnits.begin(), DWOUnits.end());
   }
 
   /// Get the number of compile units in this context.
   unsigned getNumCompileUnits() {
-    parseCompileUnits();
-    return CUs.size();
+    parseNormalUnits();
+    return NormalUnits.getNumInfoUnits();
   }
 
-  /// Get the number of compile units in this context.
+  /// Get the number of type units in this context.
   unsigned getNumTypeUnits() {
-    parseTypeUnits();
-    return TUs.size();
+    parseNormalUnits();
+    return NormalUnits.getNumTypesUnits();
   }
 
   /// Get the number of compile units in the DWO context.
   unsigned getNumDWOCompileUnits() {
-    parseDWOCompileUnits();
-    return DWOCUs.size();
+    parseDWOUnits();
+    return DWOUnits.getNumInfoUnits();
   }
 
-  /// Get the number of compile units in the DWO context.
+  /// Get the number of type units in the DWO context.
   unsigned getNumDWOTypeUnits() {
-    parseDWOTypeUnits();
-    return DWOTUs.size();
+    parseDWOUnits();
+    return DWOUnits.getNumTypesUnits();
   }
 
-  /// Get the compile unit at the specified index for this compile unit.
-  DWARFCompileUnit *getCompileUnitAtIndex(unsigned index) {
-    parseCompileUnits();
-    return CUs[index].get();
+  /// Get the unit at the specified index.
+  DWARFUnit *getUnitAtIndex(unsigned index) {
+    parseNormalUnits();
+    return NormalUnits[index].get();
   }
 
-  /// Get the compile unit at the specified index for the DWO compile units.
-  DWARFCompileUnit *getDWOCompileUnitAtIndex(unsigned index) {
-    parseDWOCompileUnits();
-    return DWOCUs[index].get();
+  /// Get the unit at the specified index for the DWO units.
+  DWARFUnit *getDWOUnitAtIndex(unsigned index) {
+    parseDWOUnits();
+    return DWOUnits[index].get();
   }
 
   DWARFCompileUnit *getDWOCompileUnitForHash(uint64_t Hash);
 
+  /// Return the compile unit that includes an offset (relative to .debug_info).
+  DWARFCompileUnit *getCompileUnitForOffset(uint32_t Offset);
+
   /// Get a DIE given an exact offset.
   DWARFDie getDIEForOffset(uint32_t Offset);
 
@@ -259,7 +282,14 @@
   const AppleAcceleratorTable &getAppleObjC();
 
   /// Get a pointer to a parsed line table corresponding to a compile unit.
-  const DWARFDebugLine::LineTable *getLineTableForUnit(DWARFUnit *cu);
+  /// Report any parsing issues as warnings on stderr.
+  const DWARFDebugLine::LineTable *getLineTableForUnit(DWARFUnit *U);
+
+  /// Get a pointer to a parsed line table corresponding to a compile unit.
+  /// Report any recoverable parsing problems using the callback.
+  Expected<const DWARFDebugLine::LineTable *>
+  getLineTableForUnit(DWARFUnit *U,
+                      std::function<void(Error)> RecoverableErrorCallback);
 
   DataExtractor getStringExtractor() const {
     return DataExtractor(DObj->getStringSection(), false, 0);
@@ -313,10 +343,11 @@
   /// have initialized the relevant target descriptions.
   Error loadRegisterInfo(const object::ObjectFile &Obj);
 
-private:
-  /// Return the compile unit that includes an offset (relative to .debug_info).
-  DWARFCompileUnit *getCompileUnitForOffset(uint32_t Offset);
+  /// Get address size from CUs.
+  /// TODO: refactor compile_units() to make this const.
+  uint8_t getCUAddrSize();
 
+private:
   /// Return the compile unit which contains instruction with provided
   /// address.
   DWARFCompileUnit *getCompileUnitForAddress(uint64_t Address);
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h
index 10e146b..1ed0875 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDataExtractor.h
@@ -51,6 +51,8 @@
   /// reflect the absolute address of this pointer.
   Optional<uint64_t> getEncodedPointer(uint32_t *Offset, uint8_t Encoding,
                                        uint64_t AbsPosOffset = 0) const;
+
+  size_t size() const { return Section == nullptr ? 0 : Section->Data.size(); }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAddr.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAddr.h
new file mode 100644
index 0000000..ffbd1b0
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugAddr.h
@@ -0,0 +1,98 @@
+//===- DWARFDebugAddr.h -------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_DWARFDEBUGADDR_H
+#define LLVM_DEBUGINFO_DWARFDEBUGADDR_H
+
+#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/DebugInfo/DIContext.h"
+#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
+#include "llvm/Support/Errc.h"
+#include "llvm/Support/Error.h"
+#include <cstdint>
+#include <map>
+#include <vector>
+
+namespace llvm {
+
+class Error;
+class raw_ostream;
+
+/// A class representing an address table as specified in DWARF v5.
+/// The table consists of a header followed by an array of address values from
+/// .debug_addr section.
+class DWARFDebugAddrTable {
+public:
+  struct Header {
+    /// The total length of the entries for this table, not including the length
+    /// field itself.
+    uint32_t Length = 0;
+    /// The DWARF version number.
+    uint16_t Version = 5;
+    /// The size in bytes of an address on the target architecture. For
+    /// segmented addressing, this is the size of the offset portion of the
+    /// address.
+    uint8_t AddrSize;
+    /// The size in bytes of a segment selector on the target architecture.
+    /// If the target system uses a flat address space, this value is 0.
+    uint8_t SegSize = 0;
+  };
+
+private:
+  dwarf::DwarfFormat Format;
+  uint32_t HeaderOffset;
+  Header HeaderData;
+  uint32_t DataSize = 0;
+  std::vector<uint64_t> Addrs;
+
+public:
+  void clear();
+
+  /// Extract an entire table, including all addresses.
+  Error extract(DWARFDataExtractor Data, uint32_t *OffsetPtr,
+                uint16_t Version, uint8_t AddrSize,
+                std::function<void(Error)> WarnCallback);
+
+  uint32_t getHeaderOffset() const { return HeaderOffset; }
+  uint8_t getAddrSize() const { return HeaderData.AddrSize; }
+  void dump(raw_ostream &OS, DIDumpOptions DumpOpts = {}) const;
+
+  /// Return the address based on a given index.
+  Expected<uint64_t> getAddrEntry(uint32_t Index) const;
+
+  /// Return the size of the table header including the length
+  /// but not including the addresses.
+  uint8_t getHeaderSize() const {
+    switch (Format) {
+    case dwarf::DwarfFormat::DWARF32:
+      return 8; // 4 + 2 + 1 + 1
+    case dwarf::DwarfFormat::DWARF64:
+      return 16; // 12 + 2 + 1 + 1
+    }
+    llvm_unreachable("Invalid DWARF format (expected DWARF32 or DWARF64)");
+  }
+
+  /// Returns the length of this table, including the length field, or 0 if the
+  /// length has not been determined (e.g. because the table has not yet been
+  /// parsed, or there was a problem in parsing).
+  uint32_t getLength() const;
+
+  /// Verify that the given length is valid for this table.
+  bool hasValidLength() const { return getLength() != 0; }
+
+  /// Invalidate Length field to stop further processing.
+  void invalidateLength() { HeaderData.Length = 0; }
+
+  /// Returns the length of the array of addresses.
+  uint32_t getDataSize() const;
+};
+
+} // end namespace llvm
+
+#endif // LLVM_DEBUGINFO_DWARFDEBUGADDR_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
index c24364a..8f6ed39 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
@@ -13,9 +13,11 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/DebugInfo/DIContext.h"
+#include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h"
 #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
 #include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
 #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
+#include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h"
 #include "llvm/Support/MD5.h"
 #include <cstdint>
 #include <map>
@@ -103,6 +105,8 @@
 
     uint32_t sizeofPrologueLength() const { return isDWARF64() ? 8 : 4; }
 
+    bool totalLengthIsValid() const;
+
     /// Length of the prologue in bytes.
     uint32_t getLength() const {
       return PrologueLength + sizeofTotalLength() + sizeof(getVersion()) +
@@ -120,8 +124,8 @@
 
     void clear();
     void dump(raw_ostream &OS, DIDumpOptions DumpOptions) const;
-    bool parse(const DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
-               const DWARFContext &Ctx, const DWARFUnit *U = nullptr);
+    Error parse(const DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
+                const DWARFContext &Ctx, const DWARFUnit *U = nullptr);
   };
 
   /// Standard .debug_line state machine structure.
@@ -243,9 +247,10 @@
     void clear();
 
     /// Parse prologue and all rows.
-    bool parse(DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
-               const DWARFContext &Ctx, const DWARFUnit *U,
-               raw_ostream *OS = nullptr);
+    Error parse(DWARFDataExtractor &DebugLineData, uint32_t *OffsetPtr,
+                const DWARFContext &Ctx, const DWARFUnit *U,
+                std::function<void(Error)> RecoverableErrorCallback = warn,
+                raw_ostream *OS = nullptr);
 
     using RowVector = std::vector<Row>;
     using RowIter = RowVector::const_iterator;
@@ -259,14 +264,74 @@
   private:
     uint32_t findRowInSeq(const DWARFDebugLine::Sequence &Seq,
                           uint64_t Address) const;
-    Optional<StringRef> getSourceByIndex(uint64_t FileIndex,
-                                         DILineInfoSpecifier::FileLineInfoKind Kind) const;
+    Optional<StringRef>
+    getSourceByIndex(uint64_t FileIndex,
+                     DILineInfoSpecifier::FileLineInfoKind Kind) const;
   };
 
   const LineTable *getLineTable(uint32_t Offset) const;
-  const LineTable *getOrParseLineTable(DWARFDataExtractor &DebugLineData,
-                                       uint32_t Offset, const DWARFContext &C,
-                                       const DWARFUnit *U);
+  Expected<const LineTable *> getOrParseLineTable(
+      DWARFDataExtractor &DebugLineData, uint32_t Offset,
+      const DWARFContext &Ctx, const DWARFUnit *U,
+      std::function<void(Error)> RecoverableErrorCallback = warn);
+
+  /// Helper to allow for parsing of an entire .debug_line section in sequence.
+  class SectionParser {
+  public:
+    using cu_range = DWARFUnitVector::iterator_range;
+    using tu_range = DWARFUnitVector::iterator_range;
+    using LineToUnitMap = std::map<uint64_t, DWARFUnit *>;
+
+    SectionParser(DWARFDataExtractor &Data, const DWARFContext &C, cu_range CUs,
+                  tu_range TUs);
+
+    /// Get the next line table from the section. Report any issues via the
+    /// callbacks.
+    ///
+    /// \param RecoverableErrorCallback - any issues that don't prevent further
+    /// parsing of the table will be reported through this callback.
+    /// \param UnrecoverableErrorCallback - any issues that prevent further
+    /// parsing of the table will be reported through this callback.
+    /// \param OS - if not null, the parser will print information about the
+    /// table as it parses it.
+    LineTable
+    parseNext(function_ref<void(Error)> RecoverableErrorCallback = warn,
+              function_ref<void(Error)> UnrecoverableErrorCallback = warn,
+              raw_ostream *OS = nullptr);
+
+    /// Skip the current line table and go to the following line table (if
+    /// present) immediately.
+    ///
+    /// \param ErrorCallback - report any prologue parsing issues via this
+    /// callback.
+    void skip(function_ref<void(Error)> ErrorCallback = warn);
+
+    /// Indicates if the parser has parsed as much as possible.
+    ///
+    /// \note Certain problems with the line table structure might mean that
+    /// parsing stops before the end of the section is reached.
+    bool done() const { return Done; }
+
+    /// Get the offset the parser has reached.
+    uint32_t getOffset() const { return Offset; }
+
+  private:
+    DWARFUnit *prepareToParse(uint32_t Offset);
+    void moveToNextTable(uint32_t OldOffset, const Prologue &P);
+
+    LineToUnitMap LineToUnit;
+
+    DWARFDataExtractor &DebugLineData;
+    const DWARFContext &Context;
+    uint32_t Offset = 0;
+    bool Done = false;
+  };
+
+  /// Helper function for DWARFDebugLine parse functions, to report issues
+  /// identified during parsing.
+  ///
+  /// \param Err The Error to report.
+  static void warn(Error Err);
 
 private:
   struct ParsingState {
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
index a6d319a..9a73745 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
@@ -42,7 +42,8 @@
     SmallVector<Entry, 2> Entries;
     /// Dump this list on OS.
     void dump(raw_ostream &OS, bool IsLittleEndian, unsigned AddressSize,
-              const MCRegisterInfo *MRI, unsigned Indent) const;
+              const MCRegisterInfo *MRI, uint64_t BaseAddress,
+              unsigned Indent) const;
   };
 
 private:
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h
index 761871d..cae4804 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugPubTable.h
@@ -32,7 +32,7 @@
 
     /// The name of the object as given by the DW_AT_name attribute of the
     /// referenced DIE.
-    const char *Name;
+    StringRef Name;
   };
 
   /// Each table consists of sets of variable length entries. Each set describes
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
index 38b7f22..ce7436d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRangeList.h
@@ -71,7 +71,7 @@
 
   void clear();
   void dump(raw_ostream &OS) const;
-  bool extract(const DWARFDataExtractor &data, uint32_t *offset_ptr);
+  Error extract(const DWARFDataExtractor &data, uint32_t *offset_ptr);
   const std::vector<RangeListEntry> &getEntries() { return Entries; }
 
   /// getAbsoluteRanges - Returns absolute address ranges defined by this range
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
index 7579def..e2e8ab5 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDebugRnglists.h
@@ -10,10 +10,13 @@
 #ifndef LLVM_DEBUGINFO_DWARFDEBUGRNGLISTS_H
 #define LLVM_DEBUGINFO_DWARFDEBUGRNGLISTS_H
 
+#include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/DebugInfo/DIContext.h"
 #include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
 #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
+#include "llvm/DebugInfo/DWARF/DWARFListTable.h"
 #include <cstdint>
+#include <map>
 #include <vector>
 
 namespace llvm {
@@ -21,59 +24,35 @@
 class Error;
 class raw_ostream;
 
-class DWARFDebugRnglists {
-private:
-  struct Header {
-    /// The total length of the entries for this table, not including the length
-    /// field itself.
-    uint32_t Length = 0;
-    /// The DWARF version number.
-    uint16_t Version;
-    /// The size in bytes of an address on the target architecture. For
-    /// segmented addressing, this is the size of the offset portion of the
-    /// address.
-    uint8_t AddrSize;
-    /// The size in bytes of a segment selector on the target architecture.
-    /// If the target system uses a flat address space, this value is 0.
-    uint8_t SegSize;
-    /// The number of offsets that follow the header before the range lists.
-    uint32_t OffsetEntryCount;
-  };
+/// A class representing a single range list entry.
+struct RangeListEntry : public DWARFListEntryBase {
+  /// The values making up the range list entry. Most represent a range with
+  /// a start and end address or a start address and a length. Others are
+  /// single value base addresses or end-of-list with no values. The unneeded
+  /// values are semantically undefined, but initialized to 0.
+  uint64_t Value0;
+  uint64_t Value1;
 
+  Error extract(DWARFDataExtractor Data, uint32_t End, uint32_t *OffsetPtr);
+  void dump(raw_ostream &OS, uint8_t AddrSize, uint8_t MaxEncodingStringLength,
+            uint64_t &CurrentBase, DIDumpOptions DumpOpts) const;
+  bool isSentinel() const { return EntryKind == dwarf::DW_RLE_end_of_list; }
+};
+
+/// A class representing a single rangelist.
+class DWARFDebugRnglist : public DWARFListType<RangeListEntry> {
 public:
-  struct RangeListEntry {
-    /// The offset at which the entry is located in the section.
-    const uint32_t Offset;
-    /// The DWARF encoding (DW_RLE_*).
-    const uint8_t EntryKind;
-    /// The values making up the range list entry. Most represent a range with
-    /// a start and end address or a start address and a length. Others are
-    /// single value base addresses or end-of-list with no values. The unneeded
-    /// values are semantically undefined, but initialized to 0.
-    const uint64_t Value0;
-    const uint64_t Value1;
-  };
+  /// Build a DWARFAddressRangesVector from a rangelist.
+  DWARFAddressRangesVector
+  getAbsoluteRanges(llvm::Optional<BaseAddress> BaseAddr) const;
+};
 
-  using DWARFRangeList = std::vector<RangeListEntry>;
-
-private:
-  uint32_t HeaderOffset;
-  Header HeaderData;
-  std::vector<uint32_t> Offsets;
-  std::vector<DWARFRangeList> Ranges;
-  // The length of the longest encoding string we encountered during parsing.
-  uint8_t MaxEncodingStringLength = 0;
-
+class DWARFDebugRnglistTable : public DWARFListTableBase<DWARFDebugRnglist> {
 public:
-  void clear();
-  Error extract(DWARFDataExtractor Data, uint32_t *OffsetPtr);
-  uint32_t getHeaderOffset() const { return HeaderOffset; }
-  void dump(raw_ostream &OS, DIDumpOptions DumpOpts) const;
-
-  /// Returns the length of this table, including the length field, or 0 if the
-  /// length has not been determined (e.g. because the table has not yet been
-  /// parsed, or there was a problem in parsing).
-  uint32_t length() const;
+  DWARFDebugRnglistTable()
+      : DWARFListTableBase(/* SectionName    = */ ".debug_rnglists",
+                           /* HeaderString   = */ "ranges:",
+                           /* ListTypeString = */ "range") {}
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDie.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDie.h
index 39a3dd3..c77034f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDie.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFDie.h
@@ -46,7 +46,7 @@
 
 public:
   DWARFDie() = default;
-  DWARFDie(DWARFUnit *Unit, const DWARFDebugInfoEntry * D) : U(Unit), Die(D) {}
+  DWARFDie(DWARFUnit *Unit, const DWARFDebugInfoEntry *D) : U(Unit), Die(D) {}
 
   bool isValid() const { return U && Die; }
   explicit operator bool() const { return isValid(); }
@@ -82,9 +82,7 @@
   }
 
   /// Returns true for a valid DIE that terminates a sibling chain.
-  bool isNULL() const {
-    return getAbbreviationDeclarationPtr() == nullptr;
-  }
+  bool isNULL() const { return getAbbreviationDeclarationPtr() == nullptr; }
 
   /// Returns true if DIE represents a subprogram (not inlined).
   bool isSubprogramDIE() const;
@@ -104,12 +102,24 @@
   /// invalid DWARFDie instance if it doesn't.
   DWARFDie getSibling() const;
 
+  /// Get the previous sibling of this DIE object.
+  ///
+  /// \returns a valid DWARFDie instance if this object has a sibling or an
+  /// invalid DWARFDie instance if it doesn't.
+  DWARFDie getPreviousSibling() const;
+
   /// Get the first child of this DIE object.
   ///
   /// \returns a valid DWARFDie instance if this object has children or an
   /// invalid DWARFDie instance if it doesn't.
   DWARFDie getFirstChild() const;
 
+  /// Get the last child of this DIE object.
+  ///
+  /// \returns a valid null DWARFDie instance if this object has children or an
+  /// invalid DWARFDie instance if it doesn't.
+  DWARFDie getLastChild() const;
+
   /// Dump the DIE and all of its attributes to the supplied stream.
   ///
   /// \param OS the stream to use for output.
@@ -117,7 +127,6 @@
   void dump(raw_ostream &OS, unsigned indent = 0,
             DIDumpOptions DumpOpts = DIDumpOptions()) const;
 
-
   /// Convenience zero-argument overload for debugging.
   LLVM_DUMP_METHOD void dump() const;
 
@@ -207,7 +216,7 @@
   ///
   /// \returns a address range vector that might be empty if no address range
   /// information is available.
-  DWARFAddressRangesVector getAddressRanges() const;
+  Expected<DWARFAddressRangesVector> getAddressRanges() const;
 
   /// Get all address ranges for any DW_TAG_subprogram DIEs in this DIE or any
   /// of its children.
@@ -263,12 +272,16 @@
 
   iterator begin() const;
   iterator end() const;
+
+  std::reverse_iterator<iterator> rbegin() const;
+  std::reverse_iterator<iterator> rend() const;
+
   iterator_range<iterator> children() const;
 };
 
-class DWARFDie::attribute_iterator :
-    public iterator_facade_base<attribute_iterator, std::forward_iterator_tag,
-                                const DWARFAttribute> {
+class DWARFDie::attribute_iterator
+    : public iterator_facade_base<attribute_iterator, std::forward_iterator_tag,
+                                  const DWARFAttribute> {
   /// The DWARF DIE we are extracting attributes from.
   DWARFDie Die;
   /// The value vended to clients via the operator*() or operator->().
@@ -276,6 +289,9 @@
   /// The attribute index within the abbreviation declaration in Die.
   uint32_t Index;
 
+  friend bool operator==(const attribute_iterator &LHS,
+                         const attribute_iterator &RHS);
+
   /// Update the attribute index and attempt to read the attribute value. If the
   /// attribute is able to be read, update AttrValue and the Index member
   /// variable. If the attribute value is not able to be read, an appropriate
@@ -288,14 +304,24 @@
   explicit attribute_iterator(DWARFDie D, bool End);
 
   attribute_iterator &operator++();
+  attribute_iterator &operator--();
   explicit operator bool() const { return AttrValue.isValid(); }
   const DWARFAttribute &operator*() const { return AttrValue; }
-  bool operator==(const attribute_iterator &X) const { return Index == X.Index; }
 };
 
+inline bool operator==(const DWARFDie::attribute_iterator &LHS,
+                       const DWARFDie::attribute_iterator &RHS) {
+  return LHS.Index == RHS.Index;
+}
+
+inline bool operator!=(const DWARFDie::attribute_iterator &LHS,
+                       const DWARFDie::attribute_iterator &RHS) {
+  return !(LHS == RHS);
+}
+
 inline bool operator==(const DWARFDie &LHS, const DWARFDie &RHS) {
   return LHS.getDebugInfoEntry() == RHS.getDebugInfoEntry() &&
-      LHS.getDwarfUnit() == RHS.getDwarfUnit();
+         LHS.getDwarfUnit() == RHS.getDwarfUnit();
 }
 
 inline bool operator!=(const DWARFDie &LHS, const DWARFDie &RHS) {
@@ -306,34 +332,43 @@
   return LHS.getOffset() < RHS.getOffset();
 }
 
-class DWARFDie::iterator : public iterator_facade_base<iterator,
-                                                      std::forward_iterator_tag,
-                                                      const DWARFDie> {
+class DWARFDie::iterator
+    : public iterator_facade_base<iterator, std::bidirectional_iterator_tag,
+                                  const DWARFDie> {
   DWARFDie Die;
-  void skipNull() {
-    if (Die && Die.isNULL())
-      Die = DWARFDie();
-  }
+
+  friend std::reverse_iterator<llvm::DWARFDie::iterator>;
+  friend bool operator==(const DWARFDie::iterator &LHS,
+                         const DWARFDie::iterator &RHS);
+
 public:
   iterator() = default;
 
-  explicit iterator(DWARFDie D) : Die(D) {
-    // If we start out with only a Null DIE then invalidate.
-    skipNull();
-  }
+  explicit iterator(DWARFDie D) : Die(D) {}
 
   iterator &operator++() {
     Die = Die.getSibling();
-    // Don't include the NULL die when iterating.
-    skipNull();
     return *this;
   }
 
-  explicit operator bool() const { return Die.isValid(); }
+  iterator &operator--() {
+    Die = Die.getPreviousSibling();
+    return *this;
+  }
+
   const DWARFDie &operator*() const { return Die; }
-  bool operator==(const iterator &X) const { return Die == X.Die; }
 };
 
+inline bool operator==(const DWARFDie::iterator &LHS,
+                       const DWARFDie::iterator &RHS) {
+  return LHS.Die == RHS.Die;
+}
+
+inline bool operator!=(const DWARFDie::iterator &LHS,
+                       const DWARFDie::iterator &RHS) {
+  return !(LHS == RHS);
+}
+
 // These inline functions must follow the DWARFDie::iterator definition above
 // as they use functions from that class.
 inline DWARFDie::iterator DWARFDie::begin() const {
@@ -341,7 +376,7 @@
 }
 
 inline DWARFDie::iterator DWARFDie::end() const {
-  return iterator();
+  return iterator(getLastChild());
 }
 
 inline iterator_range<DWARFDie::iterator> DWARFDie::children() const {
@@ -350,4 +385,80 @@
 
 } // end namespace llvm
 
+namespace std {
+
+template <>
+class reverse_iterator<llvm::DWARFDie::iterator>
+    : public llvm::iterator_facade_base<
+          reverse_iterator<llvm::DWARFDie::iterator>,
+          bidirectional_iterator_tag, const llvm::DWARFDie> {
+
+private:
+  llvm::DWARFDie Die;
+  bool AtEnd;
+
+public:
+  reverse_iterator(llvm::DWARFDie::iterator It)
+      : Die(It.Die), AtEnd(!It.Die.getPreviousSibling()) {
+    if (!AtEnd)
+      Die = Die.getPreviousSibling();
+  }
+
+  reverse_iterator<llvm::DWARFDie::iterator> &operator++() {
+    assert(!AtEnd && "Incrementing rend");
+    llvm::DWARFDie D = Die.getPreviousSibling();
+    if (D)
+      Die = D;
+    else
+      AtEnd = true;
+    return *this;
+  }
+
+  reverse_iterator<llvm::DWARFDie::iterator> &operator--() {
+    if (AtEnd) {
+      AtEnd = false;
+      return *this;
+    }
+    Die = Die.getSibling();
+    assert(!Die.isNULL() && "Decrementing rbegin");
+    return *this;
+  }
+
+  const llvm::DWARFDie &operator*() const {
+    assert(Die.isValid());
+    return Die;
+  }
+
+  // FIXME: We should be able to specify the equals operator as a friend, but
+  //        that causes the compiler to think the operator overload is ambiguous
+  //        with the friend declaration and the actual definition as candidates.
+  bool equals(const reverse_iterator<llvm::DWARFDie::iterator> &RHS) const {
+    return Die == RHS.Die && AtEnd == RHS.AtEnd;
+  }
+};
+
+} // namespace std
+
+namespace llvm {
+
+inline bool operator==(const std::reverse_iterator<DWARFDie::iterator> &LHS,
+                       const std::reverse_iterator<DWARFDie::iterator> &RHS) {
+  return LHS.equals(RHS);
+}
+
+inline bool operator!=(const std::reverse_iterator<DWARFDie::iterator> &LHS,
+                       const std::reverse_iterator<DWARFDie::iterator> &RHS) {
+  return !(LHS == RHS);
+}
+
+inline std::reverse_iterator<DWARFDie::iterator> DWARFDie::rbegin() const {
+  return llvm::make_reverse_iterator(end());
+}
+
+inline std::reverse_iterator<DWARFDie::iterator> DWARFDie::rend() const {
+  return llvm::make_reverse_iterator(begin());
+}
+
+} // end namespace llvm
+
 #endif // LLVM_DEBUGINFO_DWARFDIE_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h
new file mode 100644
index 0000000..ab12f3b
--- /dev/null
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFListTable.h
@@ -0,0 +1,278 @@
+//===- DWARFListTable.h -----------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DEBUGINFO_DWARFLISTTABLE_H
+#define LLVM_DEBUGINFO_DWARFLISTTABLE_H
+
+#include "llvm/BinaryFormat/Dwarf.h"
+#include "llvm/DebugInfo/DIContext.h"
+#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/Format.h"
+#include "llvm/Support/raw_ostream.h"
+#include <cstdint>
+#include <map>
+#include <vector>
+
+namespace llvm {
+
+/// A base class for DWARF list entries, such as range or location list
+/// entries.
+struct DWARFListEntryBase {
+  /// The offset at which the entry is located in the section.
+  uint32_t Offset;
+  /// The DWARF encoding (DW_RLE_* or DW_LLE_*).
+  uint8_t EntryKind;
+  /// The index of the section this entry belongs to.
+  uint64_t SectionIndex;
+};
+
+/// A base class for lists of entries that are extracted from a particular
+/// section, such as range lists or location lists.
+template <typename ListEntryType> class DWARFListType {
+  using EntryType = ListEntryType;
+  using ListEntries = std::vector<EntryType>;
+
+protected:
+  ListEntries Entries;
+
+public:
+  // FIXME: We need to consolidate the various verions of "createError"
+  // that are used in the DWARF consumer. Until then, this is a workaround.
+  Error createError(const char *, const char *, uint32_t);
+
+  const ListEntries &getEntries() const { return Entries; }
+  bool empty() const { return Entries.empty(); }
+  void clear() { Entries.clear(); }
+  Error extract(DWARFDataExtractor Data, uint32_t HeaderOffset, uint32_t End,
+                uint32_t *OffsetPtr, StringRef SectionName,
+                StringRef ListStringName);
+};
+
+/// A class representing the header of a list table such as the range list
+/// table in the .debug_rnglists section.
+class DWARFListTableHeader {
+  struct Header {
+    /// The total length of the entries for this table, not including the length
+    /// field itself.
+    uint32_t Length = 0;
+    /// The DWARF version number.
+    uint16_t Version;
+    /// The size in bytes of an address on the target architecture. For
+    /// segmented addressing, this is the size of the offset portion of the
+    /// address.
+    uint8_t AddrSize;
+    /// The size in bytes of a segment selector on the target architecture.
+    /// If the target system uses a flat address space, this value is 0.
+    uint8_t SegSize;
+    /// The number of offsets that follow the header before the range lists.
+    uint32_t OffsetEntryCount;
+  };
+
+  Header HeaderData;
+  /// The offset table, which contains offsets to the individual list entries.
+  /// It is used by forms such as DW_FORM_rnglistx.
+  /// FIXME: Generate the table and use the appropriate forms.
+  std::vector<uint32_t> Offsets;
+  /// The table's format, either DWARF32 or DWARF64.
+  dwarf::DwarfFormat Format;
+  /// The offset at which the header (and hence the table) is located within
+  /// its section.
+  uint32_t HeaderOffset;
+  /// The name of the section the list is located in.
+  StringRef SectionName;
+  /// A characterization of the list for dumping purposes, e.g. "range" or
+  /// "location".
+  StringRef ListTypeString;
+
+public:
+  DWARFListTableHeader(StringRef SectionName, StringRef ListTypeString)
+      : SectionName(SectionName), ListTypeString(ListTypeString) {}
+
+  void clear() {
+    HeaderData = {};
+    Offsets.clear();
+  }
+  uint32_t getHeaderOffset() const { return HeaderOffset; }
+  uint8_t getAddrSize() const { return HeaderData.AddrSize; }
+  uint32_t getLength() const { return HeaderData.Length; }
+  StringRef getSectionName() const { return SectionName; }
+  StringRef getListTypeString() const { return ListTypeString; }
+  dwarf::DwarfFormat getFormat() const { return Format; }
+
+  void dump(raw_ostream &OS, DIDumpOptions DumpOpts = {}) const;
+  Optional<uint32_t> getOffsetEntry(uint32_t Index) const {
+    if (Index < Offsets.size())
+      return Offsets[Index];
+    return None;
+  }
+
+  /// Extract the table header and the array of offsets.
+  Error extract(DWARFDataExtractor Data, uint32_t *OffsetPtr);
+
+  /// Returns the length of the table, including the length field, or 0 if the
+  /// length has not been determined (e.g. because the table has not yet been
+  /// parsed, or there was a problem in parsing).
+  uint32_t length() const;
+};
+
+/// A class representing a table of lists as specified in the DWARF v5
+/// standard for location lists and range lists. The table consists of a header
+/// followed by an array of offsets into a DWARF section, followed by zero or
+/// more list entries. The list entries are kept in a map where the keys are
+/// the lists' section offsets.
+template <typename DWARFListType> class DWARFListTableBase {
+  DWARFListTableHeader Header;
+  /// A mapping between file offsets and lists. It is used to find a particular
+  /// list based on an offset (obtained from DW_AT_ranges, for example).
+  std::map<uint32_t, DWARFListType> ListMap;
+  /// This string is displayed as a heading before the list is dumped
+  /// (e.g. "ranges:").
+  StringRef HeaderString;
+
+protected:
+  DWARFListTableBase(StringRef SectionName, StringRef HeaderString,
+                     StringRef ListTypeString)
+      : Header(SectionName, ListTypeString), HeaderString(HeaderString) {}
+
+public:
+  void clear() {
+    Header.clear();
+    ListMap.clear();
+  }
+  /// Extract the table header and the array of offsets.
+  Error extractHeaderAndOffsets(DWARFDataExtractor Data, uint32_t *OffsetPtr) {
+    return Header.extract(Data, OffsetPtr);
+  }
+  /// Extract an entire table, including all list entries.
+  Error extract(DWARFDataExtractor Data, uint32_t *OffsetPtr);
+  /// Look up a list based on a given offset. Extract it and enter it into the
+  /// list map if necessary.
+  Expected<DWARFListType> findList(DWARFDataExtractor Data, uint32_t Offset);
+
+  uint32_t getHeaderOffset() const { return Header.getHeaderOffset(); }
+  uint8_t getAddrSize() const { return Header.getAddrSize(); }
+
+  void dump(raw_ostream &OS, DIDumpOptions DumpOpts = {}) const;
+
+  /// Return the contents of the offset entry designated by a given index.
+  Optional<uint32_t> getOffsetEntry(uint32_t Index) const {
+    return Header.getOffsetEntry(Index);
+  }
+  /// Return the size of the table header including the length but not including
+  /// the offsets. This is dependent on the table format, which is unambiguously
+  /// derived from parsing the table.
+  uint8_t getHeaderSize() const {
+    switch (Header.getFormat()) {
+    case dwarf::DwarfFormat::DWARF32:
+      return 12;
+    case dwarf::DwarfFormat::DWARF64:
+      return 20;
+    }
+    llvm_unreachable("Invalid DWARF format (expected DWARF32 or DWARF64");
+  }
+
+  uint32_t length() { return Header.length(); }
+};
+
+template <typename DWARFListType>
+Error DWARFListTableBase<DWARFListType>::extract(DWARFDataExtractor Data,
+                                                 uint32_t *OffsetPtr) {
+  clear();
+  if (Error E = extractHeaderAndOffsets(Data, OffsetPtr))
+    return E;
+
+  Data.setAddressSize(Header.getAddrSize());
+  uint32_t End = getHeaderOffset() + Header.length();
+  while (*OffsetPtr < End) {
+    DWARFListType CurrentList;
+    uint32_t Off = *OffsetPtr;
+    if (Error E = CurrentList.extract(Data, getHeaderOffset(), End, OffsetPtr,
+                                      Header.getSectionName(),
+                                      Header.getListTypeString()))
+      return E;
+    ListMap[Off] = CurrentList;
+  }
+
+  assert(*OffsetPtr == End &&
+         "mismatch between expected length of table and length "
+         "of extracted data");
+  return Error::success();
+}
+
+template <typename ListEntryType>
+Error DWARFListType<ListEntryType>::extract(DWARFDataExtractor Data,
+                                            uint32_t HeaderOffset, uint32_t End,
+                                            uint32_t *OffsetPtr,
+                                            StringRef SectionName,
+                                            StringRef ListTypeString) {
+  if (*OffsetPtr < HeaderOffset || *OffsetPtr >= End)
+    return createError("invalid %s list offset 0x%" PRIx32,
+                       ListTypeString.data(), *OffsetPtr);
+  Entries.clear();
+  while (*OffsetPtr < End) {
+    ListEntryType Entry;
+    if (Error E = Entry.extract(Data, End, OffsetPtr))
+      return E;
+    Entries.push_back(Entry);
+    if (Entry.isSentinel())
+      return Error::success();
+  }
+  return createError("no end of list marker detected at end of %s table "
+                     "starting at offset 0x%" PRIx32,
+                     SectionName.data(), HeaderOffset);
+}
+
+template <typename DWARFListType>
+void DWARFListTableBase<DWARFListType>::dump(raw_ostream &OS,
+                                             DIDumpOptions DumpOpts) const {
+  Header.dump(OS, DumpOpts);
+  OS << HeaderString << "\n";
+
+  // Determine the length of the longest encoding string we have in the table,
+  // so we can align the output properly. We only need this in verbose mode.
+  size_t MaxEncodingStringLength = 0;
+  if (DumpOpts.Verbose) {
+    for (const auto &List : ListMap)
+      for (const auto &Entry : List.second.getEntries())
+        MaxEncodingStringLength =
+            std::max(MaxEncodingStringLength,
+                     dwarf::RangeListEncodingString(Entry.EntryKind).size());
+  }
+
+  uint64_t CurrentBase = 0;
+  for (const auto &List : ListMap)
+    for (const auto &Entry : List.second.getEntries())
+      Entry.dump(OS, getAddrSize(), MaxEncodingStringLength, CurrentBase,
+                 DumpOpts);
+}
+
+template <typename DWARFListType>
+Expected<DWARFListType>
+DWARFListTableBase<DWARFListType>::findList(DWARFDataExtractor Data,
+                                            uint32_t Offset) {
+  auto Entry = ListMap.find(Offset);
+  if (Entry != ListMap.end())
+    return Entry->second;
+
+  // Extract the list from the section and enter it into the list map.
+  DWARFListType List;
+  uint32_t End = getHeaderOffset() + Header.length();
+  uint32_t StartingOffset = Offset;
+  if (Error E =
+          List.extract(Data, getHeaderOffset(), End, &Offset,
+                       Header.getSectionName(), Header.getListTypeString()))
+    return std::move(E);
+  ListMap[StartingOffset] = List;
+  return List;
+}
+
+} // end namespace llvm
+
+#endif // LLVM_DEBUGINFO_DWARFLISTTABLE_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFObject.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFObject.h
index 795eddd..6e8f370 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFObject.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFObject.h
@@ -63,6 +63,7 @@
     return Dummy;
   }
   virtual const DWARFSection &getRangeDWOSection() const { return Dummy; }
+  virtual const DWARFSection &getRnglistsDWOSection() const { return Dummy; }
   virtual const DWARFSection &getAddrSection() const { return Dummy; }
   virtual const DWARFSection &getAppleNamesSection() const { return Dummy; }
   virtual const DWARFSection &getAppleTypesSection() const { return Dummy; }
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h
index a659a63..0a5a1aa 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFTypeUnit.h
@@ -24,30 +24,22 @@
 class raw_ostream;
 
 class DWARFTypeUnit : public DWARFUnit {
-private:
-  uint64_t TypeHash;
-  uint32_t TypeOffset;
-
 public:
   DWARFTypeUnit(DWARFContext &Context, const DWARFSection &Section,
+                const DWARFUnitHeader &Header,
                 const DWARFDebugAbbrev *DA, const DWARFSection *RS,
                 StringRef SS, const DWARFSection &SOS, const DWARFSection *AOS,
                 const DWARFSection &LS, bool LE, bool IsDWO,
-                const DWARFUnitSectionBase &UnitSection,
-                const DWARFUnitIndex::Entry *Entry)
-      : DWARFUnit(Context, Section, DA, RS, SS, SOS, AOS, LS, LE, IsDWO,
-                  UnitSection, Entry) {}
+                const DWARFUnitVector &UnitVector)
+      : DWARFUnit(Context, Section, Header, DA, RS, SS, SOS, AOS, LS, LE, IsDWO,
+                  UnitVector) {}
 
-  uint32_t getHeaderSize() const override {
-    return DWARFUnit::getHeaderSize() + 12;
-  }
+  uint64_t getTypeHash() const { return getHeader().getTypeHash(); }
+  uint32_t getTypeOffset() const { return getHeader().getTypeOffset(); }
 
-  void dump(raw_ostream &OS, DIDumpOptions DumpOpts = {});
-  static const DWARFSectionKind Section = DW_SECT_TYPES;
-
-protected:
-  bool extractImpl(const DWARFDataExtractor &debug_info,
-                   uint32_t *offset_ptr) override;
+  void dump(raw_ostream &OS, DIDumpOptions DumpOpts = {}) override;
+  // Enable LLVM-style RTTI.
+  static bool classof(const DWARFUnit *U) { return U->isTypeUnit(); }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
index fe3f573..0908504 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFUnit.h
@@ -18,6 +18,7 @@
 #include "llvm/BinaryFormat/Dwarf.h"
 #include "llvm/DebugInfo/DWARF/DWARFDebugInfoEntry.h"
 #include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
+#include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h"
 #include "llvm/DebugInfo/DWARF/DWARFDie.h"
 #include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
 #include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
@@ -40,124 +41,116 @@
 class DWARFDebugAbbrev;
 class DWARFUnit;
 
-/// Base class for all DWARFUnitSection classes. This provides the
-/// functionality common to all unit types.
-class DWARFUnitSectionBase {
+/// Base class describing the header of any kind of "unit."  Some information
+/// is specific to certain unit types.  We separate this class out so we can
+/// parse the header before deciding what specific kind of unit to construct.
+class DWARFUnitHeader {
+  // Offset within section.
+  uint32_t Offset = 0;
+  // Version, address size, and DWARF format.
+  dwarf::FormParams FormParams;
+  uint32_t Length = 0;
+  uint64_t AbbrOffset = 0;
+
+  // For DWO units only.
+  const DWARFUnitIndex::Entry *IndexEntry = nullptr;
+
+  // For type units only.
+  uint64_t TypeHash = 0;
+  uint32_t TypeOffset = 0;
+
+  // For v5 split or skeleton compile units only.
+  Optional<uint64_t> DWOId;
+
+  // Unit type as parsed, or derived from the section kind.
+  uint8_t UnitType = 0;
+
+  // Size as parsed. uint8_t for compactness.
+  uint8_t Size = 0;
+
 public:
-  /// Returns the Unit that contains the given section offset in the
-  /// same section this Unit originated from.
-  virtual DWARFUnit *getUnitForOffset(uint32_t Offset) const = 0;
-  virtual DWARFUnit *getUnitForIndexEntry(const DWARFUnitIndex::Entry &E) = 0;
-
-  void parse(DWARFContext &C, const DWARFSection &Section);
-  void parseDWO(DWARFContext &C, const DWARFSection &DWOSection,
-                bool Lazy = false);
-
-protected:
-  ~DWARFUnitSectionBase() = default;
-
-  virtual void parseImpl(DWARFContext &Context, const DWARFObject &Obj,
-                         const DWARFSection &Section,
-                         const DWARFDebugAbbrev *DA, const DWARFSection *RS,
-                         StringRef SS, const DWARFSection &SOS,
-                         const DWARFSection *AOS, const DWARFSection &LS,
-                         bool isLittleEndian, bool isDWO, bool Lazy) = 0;
+  /// Parse a unit header from \p debug_info starting at \p offset_ptr.
+  bool extract(DWARFContext &Context, const DWARFDataExtractor &debug_info,
+               uint32_t *offset_ptr, DWARFSectionKind Kind = DW_SECT_INFO,
+               const DWARFUnitIndex *Index = nullptr);
+  uint32_t getOffset() const { return Offset; }
+  const dwarf::FormParams &getFormParams() const { return FormParams; }
+  uint16_t getVersion() const { return FormParams.Version; }
+  dwarf::DwarfFormat getFormat() const { return FormParams.Format; }
+  uint8_t getAddressByteSize() const { return FormParams.AddrSize; }
+  uint8_t getRefAddrByteSize() const { return FormParams.getRefAddrByteSize(); }
+  uint8_t getDwarfOffsetByteSize() const {
+    return FormParams.getDwarfOffsetByteSize();
+  }
+  uint32_t getLength() const { return Length; }
+  uint64_t getAbbrOffset() const { return AbbrOffset; }
+  Optional<uint64_t> getDWOId() const { return DWOId; }
+  void setDWOId(uint64_t Id) {
+    assert((!DWOId || *DWOId == Id) && "setting DWOId to a different value");
+    DWOId = Id;
+  }
+  const DWARFUnitIndex::Entry *getIndexEntry() const { return IndexEntry; }
+  uint64_t getTypeHash() const { return TypeHash; }
+  uint32_t getTypeOffset() const { return TypeOffset; }
+  uint8_t getUnitType() const { return UnitType; }
+  bool isTypeUnit() const {
+    return UnitType == dwarf::DW_UT_type || UnitType == dwarf::DW_UT_split_type;
+  }
+  uint8_t getSize() const { return Size; }
+  // FIXME: Support DWARF64.
+  uint32_t getNextUnitOffset() const { return Offset + Length + 4; }
 };
 
 const DWARFUnitIndex &getDWARFUnitIndex(DWARFContext &Context,
                                         DWARFSectionKind Kind);
 
-/// Concrete instance of DWARFUnitSection, specialized for one Unit type.
-template<typename UnitType>
-class DWARFUnitSection final : public SmallVector<std::unique_ptr<UnitType>, 1>,
-                               public DWARFUnitSectionBase {
-  bool Parsed = false;
-  std::function<std::unique_ptr<UnitType>(uint32_t)> Parser;
+/// Describe a collection of units. Intended to hold all units either from
+/// .debug_info and .debug_types, or from .debug_info.dwo and .debug_types.dwo.
+class DWARFUnitVector final : public SmallVector<std::unique_ptr<DWARFUnit>, 1> {
+  std::function<std::unique_ptr<DWARFUnit>(uint32_t, DWARFSectionKind,
+                                           const DWARFSection *)>
+      Parser;
+  unsigned NumInfoUnits = 0;
 
 public:
-  using UnitVector = SmallVectorImpl<std::unique_ptr<UnitType>>;
+  using UnitVector = SmallVectorImpl<std::unique_ptr<DWARFUnit>>;
   using iterator = typename UnitVector::iterator;
   using iterator_range = llvm::iterator_range<typename UnitVector::iterator>;
 
-  UnitType *getUnitForOffset(uint32_t Offset) const override {
-    auto *CU = std::upper_bound(
-        this->begin(), this->end(), Offset,
-        [](uint32_t LHS, const std::unique_ptr<UnitType> &RHS) {
-          return LHS < RHS->getNextUnitOffset();
-        });
-    if (CU != this->end() && (*CU)->getOffset() <= Offset)
-      return CU->get();
-    return nullptr;
-  }
-  UnitType *getUnitForIndexEntry(const DWARFUnitIndex::Entry &E) override {
-    const auto *CUOff = E.getOffset(DW_SECT_INFO);
-    if (!CUOff)
-      return nullptr;
+  DWARFUnit *getUnitForOffset(uint32_t Offset) const;
+  DWARFUnit *getUnitForIndexEntry(const DWARFUnitIndex::Entry &E);
 
-    auto Offset = CUOff->Offset;
+  /// Read units from a .debug_info or .debug_types section.  Calls made
+  /// before finishedInfoUnits() are assumed to be for .debug_info sections,
+  /// calls after finishedInfoUnits() are for .debug_types sections.  Caller
+  /// must not mix calls to addUnitsForSection and addUnitsForDWOSection.
+  void addUnitsForSection(DWARFContext &C, const DWARFSection &Section,
+                          DWARFSectionKind SectionKind);
+  /// Read units from a .debug_info.dwo or .debug_types.dwo section.  Calls
+  /// made before finishedInfoUnits() are assumed to be for .debug_info.dwo
+  /// sections, calls after finishedInfoUnits() are for .debug_types.dwo
+  /// sections.  Caller must not mix calls to addUnitsForSection and
+  /// addUnitsForDWOSection.
+  void addUnitsForDWOSection(DWARFContext &C, const DWARFSection &DWOSection,
+                             DWARFSectionKind SectionKind, bool Lazy = false);
 
-    auto *CU = std::upper_bound(
-        this->begin(), this->end(), CUOff->Offset,
-        [](uint32_t LHS, const std::unique_ptr<UnitType> &RHS) {
-          return LHS < RHS->getNextUnitOffset();
-        });
-    if (CU != this->end() && (*CU)->getOffset() <= Offset)
-      return CU->get();
-
-    if (!Parser)
-      return nullptr;
-
-    auto U = Parser(Offset);
-    if (!U)
-      U = nullptr;
-
-    auto *NewCU = U.get();
-    this->insert(CU, std::move(U));
-    return NewCU;
-  }
+  /// Returns number of all units held by this instance.
+  unsigned getNumUnits() { return size(); }
+  /// Returns number of units from all .debug_info[.dwo] sections.
+  unsigned getNumInfoUnits() { return NumInfoUnits; }
+  /// Returns number of units from all .debug_types[.dwo] sections.
+  unsigned getNumTypesUnits() { return size() - NumInfoUnits; }
+  /// Indicate that parsing .debug_info[.dwo] is done, and remaining units
+  /// will be from .debug_types[.dwo].
+  void finishedInfoUnits() { NumInfoUnits = size(); }
 
 private:
-  void parseImpl(DWARFContext &Context, const DWARFObject &Obj,
-                 const DWARFSection &Section, const DWARFDebugAbbrev *DA,
-                 const DWARFSection *RS, StringRef SS, const DWARFSection &SOS,
-                 const DWARFSection *AOS, const DWARFSection &LS, bool LE,
-                 bool IsDWO, bool Lazy) override {
-    if (Parsed)
-      return;
-    DWARFDataExtractor Data(Obj, Section, LE, 0);
-    if (!Parser) {
-      const DWARFUnitIndex *Index = nullptr;
-      if (IsDWO)
-        Index = &getDWARFUnitIndex(Context, UnitType::Section);
-      Parser = [=, &Context, &Section, &SOS,
-                &LS](uint32_t Offset) -> std::unique_ptr<UnitType> {
-        if (!Data.isValidOffset(Offset))
-          return nullptr;
-        auto U = llvm::make_unique<UnitType>(
-            Context, Section, DA, RS, SS, SOS, AOS, LS, LE, IsDWO, *this,
-            Index ? Index->getFromOffset(Offset) : nullptr);
-        if (!U->extract(Data, &Offset))
-          return nullptr;
-        return U;
-      };
-    }
-    if (Lazy)
-      return;
-    auto I = this->begin();
-    uint32_t Offset = 0;
-    while (Data.isValidOffset(Offset)) {
-      if (I != this->end() && (*I)->getOffset() == Offset) {
-        ++I;
-        continue;
-      }
-      auto U = Parser(Offset);
-      if (!U)
-        break;
-      Offset = U->getNextUnitOffset();
-      I = std::next(this->insert(I, std::move(U)));
-    }
-    Parsed = true;
-  }
+  void addUnitsImpl(DWARFContext &Context, const DWARFObject &Obj,
+                    const DWARFSection &Section, const DWARFDebugAbbrev *DA,
+                    const DWARFSection *RS, StringRef SS,
+                    const DWARFSection &SOS, const DWARFSection *AOS,
+                    const DWARFSection &LS, bool LE, bool IsDWO, bool Lazy,
+                    DWARFSectionKind SectionKind);
 };
 
 /// Represents base address of the CU.
@@ -169,6 +162,7 @@
 /// Represents a unit's contribution to the string offsets table.
 struct StrOffsetsContributionDescriptor {
   uint64_t Base = 0;
+  /// The contribution size not including the header.
   uint64_t Size = 0;
   /// Format and version.
   dwarf::FormParams FormParams = {0, 0, dwarf::DwarfFormat::DWARF32};
@@ -194,6 +188,7 @@
   /// Section containing this DWARFUnit.
   const DWARFSection &InfoSection;
 
+  DWARFUnitHeader Header;
   const DWARFDebugAbbrev *Abbrev;
   const DWARFSection *RangeSection;
   uint32_t RangeSectionBase;
@@ -204,19 +199,16 @@
   uint32_t AddrOffsetSectionBase = 0;
   bool isLittleEndian;
   bool isDWO;
-  const DWARFUnitSectionBase &UnitSection;
+  const DWARFUnitVector &UnitVector;
 
-  // Version, address size, and DWARF format.
-  dwarf::FormParams FormParams;
   /// Start, length, and DWARF format of the unit's contribution to the string
   /// offsets table (DWARF v5).
   Optional<StrOffsetsContributionDescriptor> StringOffsetsTableContribution;
 
-  uint32_t Offset;
-  uint32_t Length;
+  /// A table of range lists (DWARF v5 and later).
+  Optional<DWARFDebugRnglistTable> RngListTable;
+
   mutable const DWARFAbbreviationDeclarationSet *Abbrevs;
-  uint64_t AbbrOffset;
-  uint8_t UnitType;
   llvm::Optional<BaseAddress> BaseAddr;
   /// The compile unit debug information entry items.
   std::vector<DWARFDebugInfoEntry> DieArray;
@@ -231,8 +223,6 @@
 
   std::shared_ptr<DWARFUnit> DWO;
 
-  const DWARFUnitIndex::Entry *IndexEntry;
-
   uint32_t getDIEIndex(const DWARFDebugInfoEntry *Die) {
     auto First = DieArray.data();
     assert(Die >= First && Die < First + DieArray.size());
@@ -240,11 +230,10 @@
   }
 
 protected:
-  virtual bool extractImpl(const DWARFDataExtractor &debug_info,
-                           uint32_t *offset_ptr);
+  const DWARFUnitHeader &getHeader() const { return Header; }
 
-  /// Size in bytes of the unit header.
-  virtual uint32_t getHeaderSize() const { return getVersion() <= 4 ? 11 : 12; }
+  /// Size in bytes of the parsed unit header.
+  uint32_t getHeaderSize() const { return Header.getSize(); }
 
   /// Find the unit's contribution to the string offsets table and determine its
   /// length and form. The given offset is expected to be derived from the unit
@@ -263,16 +252,30 @@
 
 public:
   DWARFUnit(DWARFContext &Context, const DWARFSection &Section,
+            const DWARFUnitHeader &Header,
             const DWARFDebugAbbrev *DA, const DWARFSection *RS, StringRef SS,
             const DWARFSection &SOS, const DWARFSection *AOS,
             const DWARFSection &LS, bool LE, bool IsDWO,
-            const DWARFUnitSectionBase &UnitSection,
-            const DWARFUnitIndex::Entry *IndexEntry = nullptr);
+            const DWARFUnitVector &UnitVector);
 
   virtual ~DWARFUnit();
 
   DWARFContext& getContext() const { return Context; }
-
+  const DWARFSection &getInfoSection() const { return InfoSection; }
+  uint32_t getOffset() const { return Header.getOffset(); }
+  const dwarf::FormParams &getFormParams() const {
+    return Header.getFormParams();
+  }
+  uint16_t getVersion() const { return Header.getVersion(); }
+  uint8_t getAddressByteSize() const { return Header.getAddressByteSize(); }
+  uint8_t getRefAddrByteSize() const { return Header.getRefAddrByteSize(); }
+  uint8_t getDwarfOffsetByteSize() const {
+    return Header.getDwarfOffsetByteSize();
+  }
+  uint32_t getLength() const { return Header.getLength(); }
+  uint8_t getUnitType() const { return Header.getUnitType(); }
+  bool isTypeUnit() const { return Header.isTypeUnit(); }
+  uint32_t getNextUnitOffset() const { return Header.getNextUnitOffset(); }
   const DWARFSection &getLineSection() const { return LineSection; }
   StringRef getStringSection() const { return StringSection; }
   const DWARFSection &getStringOffsetSection() const {
@@ -301,30 +304,18 @@
     return DataExtractor(StringSection, false, 0);
   }
 
-  bool extract(const DWARFDataExtractor &debug_info, uint32_t *offset_ptr);
-
-  /// extractRangeList - extracts the range list referenced by this compile
-  /// unit from .debug_ranges section. Returns true on success.
-  /// Requires that compile unit is already extracted.
-  bool extractRangeList(uint32_t RangeListOffset,
-                        DWARFDebugRangeList &RangeList) const;
+  /// Extract the range list referenced by this compile unit from the
+  /// .debug_ranges section. If the extraction is unsuccessful, an error
+  /// is returned. Successful extraction requires that the compile unit
+  /// has already been extracted.
+  Error extractRangeList(uint32_t RangeListOffset,
+                         DWARFDebugRangeList &RangeList) const;
   void clear();
-  uint32_t getOffset() const { return Offset; }
-  uint32_t getNextUnitOffset() const { return Offset + Length + 4; }
-  uint32_t getLength() const { return Length; }
 
   const Optional<StrOffsetsContributionDescriptor> &
   getStringOffsetsTableContribution() const {
     return StringOffsetsTableContribution;
   }
-  const dwarf::FormParams &getFormParams() const { return FormParams; }
-  uint16_t getVersion() const { return FormParams.Version; }
-  dwarf::DwarfFormat getFormat() const { return FormParams.Format; }
-  uint8_t getAddressByteSize() const { return FormParams.AddrSize; }
-  uint8_t getRefAddrByteSize() const { return FormParams.getRefAddrByteSize(); }
-  uint8_t getDwarfOffsetByteSize() const {
-    return FormParams.getDwarfOffsetByteSize();
-  }
 
   uint8_t getDwarfStringOffsetsByteSize() const {
     assert(StringOffsetsTableContribution);
@@ -338,8 +329,6 @@
 
   const DWARFAbbreviationDeclarationSet *getAbbreviations() const;
 
-  uint8_t getUnitType() const { return UnitType; }
-
   static bool isMatchingUnitTypeAndTag(uint8_t UnitType, dwarf::Tag Tag) {
     switch (UnitType) {
     case dwarf::DW_UT_compile:
@@ -357,7 +346,7 @@
     return false;
   }
 
-  /// \brief Return the number of bytes for the header of a unit of
+  /// Return the number of bytes for the header of a unit of
   /// UnitType type.
   ///
   /// This function must be called with a valid unit type which in
@@ -377,9 +366,7 @@
     llvm_unreachable("Invalid UnitType.");
   }
 
-  llvm::Optional<BaseAddress> getBaseAddress() const { return BaseAddr; }
-
-  void setBaseAddress(BaseAddress BaseAddr) { this->BaseAddr = BaseAddr; }
+  llvm::Optional<BaseAddress> getBaseAddress();
 
   DWARFDie getUnitDIE(bool ExtractUnitDIEOnly = true) {
     extractDIEsIfNeeded(ExtractUnitDIEOnly);
@@ -389,7 +376,29 @@
   }
 
   const char *getCompilationDir();
-  Optional<uint64_t> getDWOId();
+  Optional<uint64_t> getDWOId() {
+    extractDIEsIfNeeded(/*CUDieOnly*/ true);
+    return getHeader().getDWOId();
+  }
+  void setDWOId(uint64_t NewID) { Header.setDWOId(NewID); }
+
+  /// Return a vector of address ranges resulting from a (possibly encoded)
+  /// range list starting at a given offset in the appropriate ranges section.
+  Expected<DWARFAddressRangesVector> findRnglistFromOffset(uint32_t Offset);
+
+  /// Return a vector of address ranges retrieved from an encoded range
+  /// list whose offset is found via a table lookup given an index (DWARF v5
+  /// and later).
+  Expected<DWARFAddressRangesVector> findRnglistFromIndex(uint32_t Index);
+
+  /// Return a rangelist's offset based on an index. The index designates
+  /// an entry in the rangelist table's offset array and is supplied by
+  /// DW_FORM_rnglistx.
+  Optional<uint32_t> getRnglistOffset(uint32_t Index) {
+    if (RngListTable)
+      return RngListTable->getOffsetEntry(Index);
+    return None;
+  }
 
   void collectAddressRanges(DWARFAddressRangesVector &CURanges);
 
@@ -404,17 +413,17 @@
   void getInlinedChainForAddress(uint64_t Address,
                                  SmallVectorImpl<DWARFDie> &InlinedChain);
 
-  /// getUnitSection - Return the DWARFUnitSection containing this unit.
-  const DWARFUnitSectionBase &getUnitSection() const { return UnitSection; }
+  /// Return the DWARFUnitVector containing this unit.
+  const DWARFUnitVector &getUnitVector() const { return UnitVector; }
 
-  /// \brief Returns the number of DIEs in the unit. Parses the unit
+  /// Returns the number of DIEs in the unit. Parses the unit
   /// if necessary.
   unsigned getNumDIEs() {
     extractDIEsIfNeeded(false);
     return DieArray.size();
   }
 
-  /// \brief Return the index of a DIE inside the unit's DIE vector.
+  /// Return the index of a DIE inside the unit's DIE vector.
   ///
   /// It is illegal to call this method with a DIE that hasn't be
   /// created by this unit. In other word, it's illegal to call this
@@ -424,7 +433,7 @@
     return getDIEIndex(D.getDebugInfoEntry());
   }
 
-  /// \brief Return the DIE object at the given index.
+  /// Return the DIE object at the given index.
   DWARFDie getDIEAtIndex(unsigned Index) {
     assert(Index < DieArray.size());
     return DWARFDie(this, &DieArray[Index]);
@@ -432,9 +441,11 @@
 
   DWARFDie getParent(const DWARFDebugInfoEntry *Die);
   DWARFDie getSibling(const DWARFDebugInfoEntry *Die);
+  DWARFDie getPreviousSibling(const DWARFDebugInfoEntry *Die);
   DWARFDie getFirstChild(const DWARFDebugInfoEntry *Die);
+  DWARFDie getLastChild(const DWARFDebugInfoEntry *Die);
 
-  /// \brief Return the DIE object for a given offset inside the
+  /// Return the DIE object for a given offset inside the
   /// unit's DIE vector.
   ///
   /// The unit needs to have its DIEs extracted for this method to work.
@@ -452,7 +463,7 @@
   }
 
   uint32_t getLineTableOffset() const {
-    if (IndexEntry)
+    if (auto IndexEntry = Header.getIndexEntry())
       if (const auto *Contrib = IndexEntry->getOffset(DW_SECT_LINE))
         return Contrib->Offset;
     return 0;
@@ -463,9 +474,12 @@
     return die_iterator_range(DieArray.begin(), DieArray.end());
   }
 
+  virtual void dump(raw_ostream &OS, DIDumpOptions DumpOpts) = 0;
 private:
   /// Size in bytes of the .debug_info data associated with this compile unit.
-  size_t getDebugInfoSize() const { return Length + 4 - getHeaderSize(); }
+  size_t getDebugInfoSize() const {
+    return Header.getLength() + 4 - getHeaderSize();
+  }
 
   /// extractDIEsIfNeeded - Parses a compile unit and indexes its DIEs if it
   /// hasn't already been done. Returns the number of DIEs parsed at this call.
diff --git a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFVerifier.h b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
index afaa299..5463677 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/DWARF/DWARFVerifier.h
@@ -14,6 +14,7 @@
 #include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h"
 #include "llvm/DebugInfo/DWARF/DWARFAddressRange.h"
 #include "llvm/DebugInfo/DWARF/DWARFDie.h"
+#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
 
 #include <cstdint>
 #include <map>
@@ -25,6 +26,7 @@
 class DWARFContext;
 class DWARFDie;
 class DWARFUnit;
+class DWARFCompileUnit;
 class DWARFDataExtractor;
 class DWARFDebugAbbrev;
 class DataExtractor;
@@ -112,20 +114,20 @@
   /// \returns The number of errors that occurred during verification.
   unsigned verifyAbbrevSection(const DWARFDebugAbbrev *Abbrev);
 
-  /// Verifies the header of a unit in the .debug_info section.
+  /// Verifies the header of a unit in a .debug_info or .debug_types section.
   ///
   /// This function currently checks for:
   /// - Unit is in 32-bit DWARF format. The function can be modified to
   /// support 64-bit format.
   /// - The DWARF version is valid
   /// - The unit type is valid (if unit is in version >=5)
-  /// - The unit doesn't extend beyond .debug_info section
+  /// - The unit doesn't extend beyond the containing section
   /// - The address size is valid
   /// - The offset in the .debug_abbrev section is valid
   ///
-  /// \param DebugInfoData The .debug_info section data
+  /// \param DebugInfoData The section data
   /// \param Offset A reference to the offset start of the unit. The offset will
-  /// be updated to point to the next unit in .debug_info
+  /// be updated to point to the next unit in the section
   /// \param UnitIndex The index of the unit to be verified
   /// \param UnitType A reference to the type of the unit
   /// \param isUnitDWARF64 A reference to a flag that shows whether the unit is
@@ -136,7 +138,7 @@
                         uint32_t *Offset, unsigned UnitIndex, uint8_t &UnitType,
                         bool &isUnitDWARF64);
 
-  /// Verifies the header of a unit in the .debug_info section.
+  /// Verifies the header of a unit in a .debug_info or .debug_types section.
   ///
   /// This function currently verifies:
   ///  - The debug info attributes.
@@ -146,12 +148,22 @@
   ///  - If a unit type is provided, that the unit DIE matches the unit type.
   ///  - The DIE ranges.
   ///
-  /// \param Unit      The DWARF Unit to verifiy.
+  /// \param Unit      The DWARF Unit to verify.
   /// \param UnitType  An optional unit type which will be used to verify the
   ///                  type of the unit DIE.
   ///
-  /// \returns true if the content is verified successfully, false otherwise.
-  bool verifyUnitContents(DWARFUnit Unit, uint8_t UnitType = 0);
+  /// \returns The number of errors that occurred during verification.
+  unsigned verifyUnitContents(DWARFUnit &Unit, uint8_t UnitType = 0);
+
+  /// Verifies the unit headers and contents in a .debug_info or .debug_types
+  /// section.
+  ///
+  /// \param S           The DWARF Section to verify.
+  /// \param SectionKind The object-file section kind that S comes from.
+  ///
+  /// \returns The number of errors that occurred during verification.
+  unsigned verifyUnitSection(const DWARFSection &S,
+                             DWARFSectionKind SectionKind);
 
   /// Verify that all Die ranges are valid.
   ///
@@ -171,7 +183,7 @@
   /// \param AttrValue    The DWARF attribute value to check
   ///
   /// \returns NumErrors The number of errors occurred during verification of
-  /// attributes' values in a .debug_info section unit
+  /// attributes' values in a unit
   unsigned verifyDebugInfoAttribute(const DWARFDie &Die,
                                     DWARFAttribute &AttrValue);
 
@@ -179,14 +191,14 @@
   ///
   /// This function currently checks for:
   /// - All DW_FORM_ref values that are CU relative have valid CU offsets
-  /// - All DW_FORM_ref_addr values have valid .debug_info offsets
+  /// - All DW_FORM_ref_addr values have valid section offsets
   /// - All DW_FORM_strp values have valid .debug_str offsets
   ///
   /// \param Die          The DWARF DIE that owns the attribute value
   /// \param AttrValue    The DWARF attribute value to check
   ///
   /// \returns NumErrors The number of errors occurred during verification of
-  /// attributes' forms in a .debug_info section unit
+  /// attributes' forms in a unit
   unsigned verifyDebugInfoForm(const DWARFDie &Die, DWARFAttribute &AttrValue);
 
   /// Verifies the all valid references that were found when iterating through
@@ -198,7 +210,7 @@
   /// CU relative and absolute references.
   ///
   /// \returns NumErrors The number of errors occurred during verification of
-  /// references for the .debug_info section
+  /// references for the .debug_info and .debug_types sections
   unsigned verifyDebugInfoReferences();
 
   /// Verify the DW_AT_stmt_list encoding and value and ensure that no
@@ -240,6 +252,10 @@
   unsigned verifyNameIndexAttribute(const DWARFDebugNames::NameIndex &NI,
                                     const DWARFDebugNames::Abbrev &Abbr,
                                     DWARFDebugNames::AttributeEncoding AttrEnc);
+  unsigned verifyNameIndexEntries(const DWARFDebugNames::NameIndex &NI,
+                                  const DWARFDebugNames::NameTableEntry &NTE);
+  unsigned verifyNameIndexCompleteness(const DWARFDie &Die,
+                                       const DWARFDebugNames::NameIndex &NI);
 
   /// Verify that the DWARF v5 accelerator table is valid.
   ///
@@ -251,6 +267,8 @@
   /// - The buckets have a valid index, or they are empty.
   /// - All names are reachable via the hash table (they have the correct hash,
   ///   and the hash is in the correct bucket).
+  /// - Information in the index entries is complete (all required entries are
+  ///   present) and consistent with the debug_info section DIEs.
   ///
   /// \param AccelSection section containing the acceleration table
   /// \param StrData string section
@@ -273,12 +291,12 @@
   /// false otherwise.
   bool handleDebugAbbrev();
 
-  /// Verify the information in the .debug_info section.
+  /// Verify the information in the .debug_info and .debug_types sections.
   ///
-  /// Any errors are reported to the stream that was this object was
+  /// Any errors are reported to the stream that this object was
   /// constructed with.
   ///
-  /// \returns true if the .debug_info verifies successfully, false otherwise.
+  /// \returns true if all sections verify successfully, false otherwise.
   bool handleDebugInfo();
 
   /// Verify the information in the .debug_line section.
diff --git a/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFBuilder.h b/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFBuilder.h
index 19e5c31..3de98c4 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFBuilder.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFBuilder.h
@@ -20,11 +20,13 @@
 #include <vector>
 
 namespace llvm {
+class FileBufferByteStream;
+class WritableBinaryStream;
 namespace msf {
 
 class MSFBuilder {
 public:
-  /// \brief Create a new `MSFBuilder`.
+  /// Create a new `MSFBuilder`.
   ///
   /// \param BlockSize The internal block size used by the PDB file.  See
   /// isValidBlockSize() for a list of valid block sizes.
@@ -109,7 +111,10 @@
 
   /// Finalize the layout and build the headers and structures that describe the
   /// MSF layout and can be written directly to the MSF file.
-  Expected<MSFLayout> build();
+  Expected<MSFLayout> generateLayout();
+
+  /// Write the MSF layout to the underlying file.
+  Expected<FileBufferByteStream> commit(StringRef Path, MSFLayout &Layout);
 
   BumpPtrAllocator &getAllocator() { return Allocator; }
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFCommon.h b/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFCommon.h
index dd53264..2db2b71 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFCommon.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/MSF/MSFCommon.h
@@ -69,7 +69,7 @@
   std::vector<ArrayRef<support::ulittle32_t>> StreamMap;
 };
 
-/// \brief Describes the layout of a stream in an MSF layout.  A "stream" here
+/// Describes the layout of a stream in an MSF layout.  A "stream" here
 /// is defined as any logical unit of data which may be arranged inside the MSF
 /// file as a sequence of (possibly discontiguous) blocks.  When we want to read
 /// from a particular MSF Stream, we fill out a stream layout structure and the
@@ -81,7 +81,7 @@
   std::vector<support::ulittle32_t> Blocks;
 };
 
-/// \brief Determine the layout of the FPM stream, given the MSF layout.  An FPM
+/// Determine the layout of the FPM stream, given the MSF layout.  An FPM
 /// stream spans 1 or more blocks, each at equally spaced intervals throughout
 /// the file.
 MSFStreamLayout getFpmStreamLayout(const MSFLayout &Msf,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h
index 5c37d9b..52c9563 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIAEnumSectionContribs.h
@@ -34,7 +34,7 @@
   const DIASession &Session;
   CComPtr<IDiaEnumSectionContribs> Enumerator;
 };
-}
-}
+} // namespace pdb
+} // namespace llvm
 
 #endif // LLVM_DEBUGINFO_PDB_DIA_DIAENUMSECTIONCONTRIBS_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASectionContrib.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASectionContrib.h
index 7bc28e3..4688f1f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASectionContrib.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASectionContrib.h
@@ -49,7 +49,7 @@
   const DIASession &Session;
   CComPtr<IDiaSectionContrib> Section;
 };
-}
-}
+} // namespace pdb
+} // namespace llvm
 
 #endif // LLVM_DEBUGINFO_PDB_DIA_DIASECTIONCONTRIB_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASession.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASession.h
index 4f3d728..a636594 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASession.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASession.h
@@ -41,6 +41,11 @@
 
   std::unique_ptr<PDBSymbol>
   findSymbolByAddress(uint64_t Address, PDB_SymType Type) const override;
+  std::unique_ptr<PDBSymbol> findSymbolByRVA(uint32_t RVA,
+                                             PDB_SymType Type) const override;
+  std::unique_ptr<PDBSymbol>
+  findSymbolBySectOffset(uint32_t Section, uint32_t Offset,
+                         PDB_SymType Type) const override;
 
   std::unique_ptr<IPDBEnumLineNumbers>
   findLineNumbers(const PDBSymbolCompiland &Compiland,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASupport.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASupport.h
index 3b4a348..92ebc04 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASupport.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/DIA/DIASupport.h
@@ -22,14 +22,6 @@
 #define NOMINMAX
 #endif
 
-// llvm/Support/Debug.h unconditionally #defines DEBUG as a macro.
-// DIA headers #define it if it is not already defined, so we have
-// an order of includes problem.  The real fix is to make LLVM use
-// something less generic than DEBUG, such as LLVM_DEBUG(), but it's
-// fairly prevalent.  So for now, we save the definition state and
-// restore it.
-#pragma push_macro("DEBUG")
-
 // atlbase.h has to come before windows.h
 #include <atlbase.h>
 #include <windows.h>
@@ -39,6 +31,4 @@
 #include <dia2.h>
 #include <diacreate.h>
 
-#pragma pop_macro("DEBUG")
-
 #endif // LLVM_DEBUGINFO_PDB_DIA_DIASUPPORT_H
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/IPDBSession.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/IPDBSession.h
index 695d62c..88ec517 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/IPDBSession.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/IPDBSession.h
@@ -44,6 +44,11 @@
 
   virtual std::unique_ptr<PDBSymbol>
   findSymbolByAddress(uint64_t Address, PDB_SymType Type) const = 0;
+  virtual std::unique_ptr<PDBSymbol>
+  findSymbolByRVA(uint32_t RVA, PDB_SymType Type) const = 0;
+  virtual std::unique_ptr<PDBSymbol>
+  findSymbolBySectOffset(uint32_t Sect, uint32_t Offset,
+                         PDB_SymType Type) const = 0;
 
   virtual std::unique_ptr<IPDBEnumLineNumbers>
   findLineNumbers(const PDBSymbolCompiland &Compiland,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h
index 8200f51..9eef404 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h
@@ -47,6 +47,8 @@
 
   uint32_t getRecordLength() const;
 
+  const SectionContrib &getSectionContrib() const;
+
 private:
   StringRef ModuleName;
   StringRef ObjFileName;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h
index c918a5d..ce4d079 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiModuleDescriptorBuilder.h
@@ -49,6 +49,7 @@
 
   void setPdbFilePathNI(uint32_t NI);
   void setObjFileName(StringRef Name);
+  void setFirstSectionContrib(const SectionContrib &SC);
   void addSymbol(codeview::CVSymbol Symbol);
 
   void
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStream.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStream.h
index 760d19a..280615b 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStream.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStream.h
@@ -38,9 +38,9 @@
   friend class DbiStreamBuilder;
 
 public:
-  DbiStream(PDBFile &File, std::unique_ptr<msf::MappedBlockStream> Stream);
+  explicit DbiStream(std::unique_ptr<BinaryStream> Stream);
   ~DbiStream();
-  Error reload();
+  Error reload(PDBFile *Pdb);
 
   PdbRaw_DbiVer getDbiVersion() const;
   uint32_t getAge() const;
@@ -89,12 +89,11 @@
 
 private:
   Error initializeSectionContributionData();
-  Error initializeSectionHeadersData();
+  Error initializeSectionHeadersData(PDBFile *Pdb);
   Error initializeSectionMapData();
-  Error initializeFpoRecords();
+  Error initializeFpoRecords(PDBFile *Pdb);
 
-  PDBFile &Pdb;
-  std::unique_ptr<msf::MappedBlockStream> Stream;
+  std::unique_ptr<BinaryStream> Stream;
 
   PDBStringTable ECNames;
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
index daea062..51befcd 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/DbiStreamBuilder.h
@@ -12,6 +12,7 @@
 
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringSet.h"
+#include "llvm/BinaryFormat/COFF.h"
 #include "llvm/Support/Error.h"
 
 #include "llvm/DebugInfo/PDB/Native/PDBFile.h"
@@ -46,10 +47,12 @@
   void setVersionHeader(PdbRaw_DbiVer V);
   void setAge(uint32_t A);
   void setBuildNumber(uint16_t B);
+  void setBuildNumber(uint8_t Major, uint8_t Minor);
   void setPdbDllVersion(uint16_t V);
   void setPdbDllRbld(uint16_t R);
   void setFlags(uint16_t F);
   void setMachineType(PDB_Machine M);
+  void setMachineType(COFF::MachineTypes M);
   void setSectionMap(ArrayRef<SecMapEntry> SecMap);
 
   // Add given bytes as a new stream.
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/InfoStream.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/InfoStream.h
index caeb423..8c52b04 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/InfoStream.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/InfoStream.h
@@ -30,7 +30,7 @@
   friend class InfoStreamBuilder;
 
 public:
-  InfoStream(std::unique_ptr<msf::MappedBlockStream> Stream);
+  InfoStream(std::unique_ptr<BinaryStream> Stream);
 
   Error reload();
 
@@ -52,11 +52,11 @@
 
   BinarySubstreamRef getNamedStreamsBuffer() const;
 
-  uint32_t getNamedStreamIndex(llvm::StringRef Name) const;
+  Expected<uint32_t> getNamedStreamIndex(llvm::StringRef Name) const;
   StringMap<uint32_t> named_streams() const;
 
 private:
-  std::unique_ptr<msf::MappedBlockStream> Stream;
+  std::unique_ptr<BinaryStream> Stream;
 
   const InfoStreamHeader *Header;
 
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/NativeSession.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/NativeSession.h
index 60a94d9..aff7ef2 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/NativeSession.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/NativeSession.h
@@ -60,6 +60,11 @@
 
   std::unique_ptr<PDBSymbol>
   findSymbolByAddress(uint64_t Address, PDB_SymType Type) const override;
+  std::unique_ptr<PDBSymbol> findSymbolByRVA(uint32_t RVA,
+                                             PDB_SymType Type) const override;
+  std::unique_ptr<PDBSymbol>
+  findSymbolBySectOffset(uint32_t Sect, uint32_t Offset,
+                         PDB_SymType Type) const override;
 
   std::unique_ptr<IPDBEnumLineNumbers>
   findLineNumbers(const PDBSymbolCompiland &Compiland,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h
index 58dda71..7f9c4cf 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/PDBFileBuilder.h
@@ -76,7 +76,7 @@
     std::unique_ptr<MemoryBuffer> Content;
   };
 
-  Expected<msf::MSFLayout> finalizeMsfLayout();
+  Error finalizeMsfLayout();
   Expected<uint32_t> allocateNamedStream(StringRef Name, uint32_t Size);
 
   void commitFpm(WritableBinaryStream &MsfBuffer, const msf::MSFLayout &Layout);
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
index 5cc8821..19f592d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/Native/RawTypes.h
@@ -112,6 +112,8 @@
 
   static const uint16_t BuildMajorMask = 0x7F00;
   static const uint16_t BuildMajorShift = 8;
+
+  static const uint16_t NewVersionFormatMask = 0x8000;
 };
 
 /// The fixed size header that appears at the beginning of the DBI Stream.
@@ -175,18 +177,6 @@
 };
 static_assert(sizeof(DbiStreamHeader) == 64, "Invalid DbiStreamHeader size!");
 
-struct SectionContribEntry {
-  support::ulittle16_t Section;
-  char Padding1[2];
-  support::little32_t Offset;
-  support::little32_t Size;
-  support::ulittle32_t Characteristics;
-  support::ulittle16_t ModuleIndex;
-  char Padding2[2];
-  support::ulittle32_t DataCrc;
-  support::ulittle32_t RelocCrc;
-};
-
 /// The header preceeding the File Info Substream of the DBI stream.
 struct FileInfoSubstreamHeader {
   /// Total # of modules, should match number of records in the ModuleInfo
@@ -228,7 +218,7 @@
   support::ulittle32_t Mod;
 
   /// First section contribution of this module.
-  SectionContribEntry SC;
+  SectionContrib SC;
 
   /// See ModInfoFlags definition.
   support::ulittle16_t Flags;
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
index d6013e2..05d585d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBSymbolFunc.h
@@ -39,7 +39,9 @@
   FORWARD_SYMBOL_METHOD(getAddressSection)
   FORWARD_SYMBOL_ID_METHOD(getClassParent)
   FORWARD_SYMBOL_METHOD(isCompilerGenerated)
+  FORWARD_SYMBOL_METHOD(isConstructorVirtualBase)
   FORWARD_SYMBOL_METHOD(isConstType)
+  FORWARD_SYMBOL_METHOD(isCxxReturnUdt)
   FORWARD_SYMBOL_METHOD(hasCustomCallingConvention)
   FORWARD_SYMBOL_METHOD(hasFarReturn)
   FORWARD_SYMBOL_METHOD(hasAlloca)
diff --git a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
index bc6233a..da6cb1d 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/PDB/PDBTypes.h
@@ -111,7 +111,7 @@
 /// Specifies the hash algorithm that a source file from a PDB was hashed with.
 /// This corresponds to the CV_SourceChksum_t enumeration and are documented
 /// here: https://msdn.microsoft.com/en-us/library/e96az21x.aspx
-enum class PDB_Checksum { None = 0, MD5 = 1, SHA1 = 2 };
+enum class PDB_Checksum { None = 0, MD5 = 1, SHA1 = 2, SHA256 = 3 };
 
 /// These values correspond to the CV_CPU_TYPE_e enumeration, and are documented
 /// here: https://msdn.microsoft.com/en-us/library/b2fc64ek.aspx
@@ -225,6 +225,7 @@
   IlRel,
   MetaData,
   Constant,
+  RegRelAliasIndir,
   Max
 };
 
@@ -234,11 +235,24 @@
 
 /// These values correspond to the StackFrameTypeEnum enumeration, and are
 /// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
-enum class PDB_StackFrameType { FPO, KernelTrap, KernelTSS, EBP, FrameData };
+enum class PDB_StackFrameType : uint16_t {
+  FPO,
+  KernelTrap,
+  KernelTSS,
+  EBP,
+  FrameData,
+  Unknown = 0xffff
+};
 
-/// These values correspond to the StackFrameTypeEnum enumeration, and are
-/// documented here: https://msdn.microsoft.com/en-us/library/bc5207xw.aspx.
-enum class PDB_MemoryType { Code, Data, Stack, HeapCode };
+/// These values correspond to the MemoryTypeEnum enumeration, and are
+/// documented here: https://msdn.microsoft.com/en-us/library/ms165609.aspx.
+enum class PDB_MemoryType : uint16_t {
+  Code,
+  Data,
+  Stack,
+  HeapCode,
+  Any = 0xffff
+};
 
 /// These values correspond to the Basictype enumeration, and are documented
 /// here: https://msdn.microsoft.com/en-us/library/4szdtzc3.aspx
@@ -268,7 +282,7 @@
 /// These values correspond to the flags that can be combined to control the
 /// return of an undecorated name for a C++ decorated name, and are documented
 /// here: https://msdn.microsoft.com/en-us/library/kszfk0fs.aspx
-enum PDB_UndnameFlags: uint32_t {
+enum PDB_UndnameFlags : uint32_t {
   Undname_Complete = 0x0,
   Undname_NoLeadingUnderscores = 0x1,
   Undname_NoMsKeywords = 0x2,
diff --git a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
index 6480aef..289148f 100644
--- a/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/linux-x64/clang/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -90,11 +90,11 @@
                                     const ObjectFile *Obj,
                                     const std::string &ArchName);
 
-  /// \brief Returns pair of pointers to object and debug object.
+  /// Returns pair of pointers to object and debug object.
   Expected<ObjectPair> getOrCreateObjectPair(const std::string &Path,
                                             const std::string &ArchName);
 
-  /// \brief Return a pointer to object file at specified path, for a specified
+  /// Return a pointer to object file at specified path, for a specified
   /// architecture (e.g. if path refers to a Mach-O universal binary, only one
   /// object file from it will be returned).
   Expected<ObjectFile *> getOrCreateObject(const std::string &Path,
@@ -102,14 +102,14 @@
 
   std::map<std::string, std::unique_ptr<SymbolizableModule>> Modules;
 
-  /// \brief Contains cached results of getOrCreateObjectPair().
+  /// Contains cached results of getOrCreateObjectPair().
   std::map<std::pair<std::string, std::string>, ObjectPair>
       ObjectPairForPathArch;
 
-  /// \brief Contains parsed binary for each path, or parsing error.
+  /// Contains parsed binary for each path, or parsing error.
   std::map<std::string, OwningBinary<Binary>> BinaryForPath;
 
-  /// \brief Parsed object file for path/architecture pair, where "path" refers
+  /// Parsed object file for path/architecture pair, where "path" refers
   /// to Mach-O universal binary.
   std::map<std::pair<std::string, std::string>, std::unique_ptr<ObjectFile>>
       ObjectForUBPathAndArch;
diff --git a/linux-x64/clang/include/llvm/Demangle/Compiler.h b/linux-x64/clang/include/llvm/Demangle/Compiler.h
deleted file mode 100644
index c996f9b..0000000
--- a/linux-x64/clang/include/llvm/Demangle/Compiler.h
+++ /dev/null
@@ -1,506 +0,0 @@
-//===-- llvm/Demangle/Compiler.h - Compiler abstraction support -*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines several macros, based on the current compiler.  This allows
-// use of compiler-specific features in a way that remains portable.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_SUPPORT_COMPILER_H
-#define LLVM_SUPPORT_COMPILER_H
-
-#include "llvm/Config/llvm-config.h"
-
-#if defined(_MSC_VER)
-#include <sal.h>
-#endif
-
-#ifndef __has_feature
-# define __has_feature(x) 0
-#endif
-
-#ifndef __has_extension
-# define __has_extension(x) 0
-#endif
-
-#ifndef __has_attribute
-# define __has_attribute(x) 0
-#endif
-
-#ifndef __has_cpp_attribute
-# define __has_cpp_attribute(x) 0
-#endif
-
-#ifndef __has_builtin
-# define __has_builtin(x) 0
-#endif
-
-/// \macro LLVM_GNUC_PREREQ
-/// \brief Extend the default __GNUC_PREREQ even if glibc's features.h isn't
-/// available.
-#ifndef LLVM_GNUC_PREREQ
-# if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
-#  define LLVM_GNUC_PREREQ(maj, min, patch) \
-    ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) + __GNUC_PATCHLEVEL__ >= \
-     ((maj) << 20) + ((min) << 10) + (patch))
-# elif defined(__GNUC__) && defined(__GNUC_MINOR__)
-#  define LLVM_GNUC_PREREQ(maj, min, patch) \
-    ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) >= ((maj) << 20) + ((min) << 10))
-# else
-#  define LLVM_GNUC_PREREQ(maj, min, patch) 0
-# endif
-#endif
-
-/// \macro LLVM_MSC_PREREQ
-/// \brief Is the compiler MSVC of at least the specified version?
-/// The common \param version values to check for are:
-///  * 1900: Microsoft Visual Studio 2015 / 14.0
-#ifdef _MSC_VER
-#define LLVM_MSC_PREREQ(version) (_MSC_VER >= (version))
-
-// We require at least MSVC 2015.
-#if !LLVM_MSC_PREREQ(1900)
-#error LLVM requires at least MSVC 2015.
-#endif
-
-#else
-#define LLVM_MSC_PREREQ(version) 0
-#endif
-
-/// \brief Does the compiler support ref-qualifiers for *this?
-///
-/// Sadly, this is separate from just rvalue reference support because GCC
-/// and MSVC implemented this later than everything else.
-#if __has_feature(cxx_rvalue_references) || LLVM_GNUC_PREREQ(4, 8, 1)
-#define LLVM_HAS_RVALUE_REFERENCE_THIS 1
-#else
-#define LLVM_HAS_RVALUE_REFERENCE_THIS 0
-#endif
-
-/// Expands to '&' if ref-qualifiers for *this are supported.
-///
-/// This can be used to provide lvalue/rvalue overrides of member functions.
-/// The rvalue override should be guarded by LLVM_HAS_RVALUE_REFERENCE_THIS
-#if LLVM_HAS_RVALUE_REFERENCE_THIS
-#define LLVM_LVALUE_FUNCTION &
-#else
-#define LLVM_LVALUE_FUNCTION
-#endif
-
-/// LLVM_LIBRARY_VISIBILITY - If a class marked with this attribute is linked
-/// into a shared library, then the class should be private to the library and
-/// not accessible from outside it.  Can also be used to mark variables and
-/// functions, making them private to any shared library they are linked into.
-/// On PE/COFF targets, library visibility is the default, so this isn't needed.
-#if (__has_attribute(visibility) || LLVM_GNUC_PREREQ(4, 0, 0)) &&              \
-    !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(LLVM_ON_WIN32)
-#define LLVM_LIBRARY_VISIBILITY __attribute__ ((visibility("hidden")))
-#else
-#define LLVM_LIBRARY_VISIBILITY
-#endif
-
-#if defined(__GNUC__)
-#define LLVM_PREFETCH(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
-#else
-#define LLVM_PREFETCH(addr, rw, locality)
-#endif
-
-#if __has_attribute(used) || LLVM_GNUC_PREREQ(3, 1, 0)
-#define LLVM_ATTRIBUTE_USED __attribute__((__used__))
-#else
-#define LLVM_ATTRIBUTE_USED
-#endif
-
-/// LLVM_NODISCARD - Warn if a type or return value is discarded.
-#if __cplusplus > 201402L && __has_cpp_attribute(nodiscard)
-#define LLVM_NODISCARD [[nodiscard]]
-#elif !__cplusplus
-// Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious
-// error when __has_cpp_attribute is given a scoped attribute in C mode.
-#define LLVM_NODISCARD
-#elif __has_cpp_attribute(clang::warn_unused_result)
-#define LLVM_NODISCARD [[clang::warn_unused_result]]
-#else
-#define LLVM_NODISCARD
-#endif
-
-// Some compilers warn about unused functions. When a function is sometimes
-// used or not depending on build settings (e.g. a function only called from
-// within "assert"), this attribute can be used to suppress such warnings.
-//
-// However, it shouldn't be used for unused *variables*, as those have a much
-// more portable solution:
-//   (void)unused_var_name;
-// Prefer cast-to-void wherever it is sufficient.
-#if __has_attribute(unused) || LLVM_GNUC_PREREQ(3, 1, 0)
-#define LLVM_ATTRIBUTE_UNUSED __attribute__((__unused__))
-#else
-#define LLVM_ATTRIBUTE_UNUSED
-#endif
-
-// FIXME: Provide this for PE/COFF targets.
-#if (__has_attribute(weak) || LLVM_GNUC_PREREQ(4, 0, 0)) &&                    \
-    (!defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(LLVM_ON_WIN32))
-#define LLVM_ATTRIBUTE_WEAK __attribute__((__weak__))
-#else
-#define LLVM_ATTRIBUTE_WEAK
-#endif
-
-// Prior to clang 3.2, clang did not accept any spelling of
-// __has_attribute(const), so assume it is supported.
-#if defined(__clang__) || defined(__GNUC__)
-// aka 'CONST' but following LLVM Conventions.
-#define LLVM_READNONE __attribute__((__const__))
-#else
-#define LLVM_READNONE
-#endif
-
-#if __has_attribute(pure) || defined(__GNUC__)
-// aka 'PURE' but following LLVM Conventions.
-#define LLVM_READONLY __attribute__((__pure__))
-#else
-#define LLVM_READONLY
-#endif
-
-#if __has_builtin(__builtin_expect) || LLVM_GNUC_PREREQ(4, 0, 0)
-#define LLVM_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true)
-#define LLVM_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false)
-#else
-#define LLVM_LIKELY(EXPR) (EXPR)
-#define LLVM_UNLIKELY(EXPR) (EXPR)
-#endif
-
-/// LLVM_ATTRIBUTE_NOINLINE - On compilers where we have a directive to do so,
-/// mark a method "not for inlining".
-#if __has_attribute(noinline) || LLVM_GNUC_PREREQ(3, 4, 0)
-#define LLVM_ATTRIBUTE_NOINLINE __attribute__((noinline))
-#elif defined(_MSC_VER)
-#define LLVM_ATTRIBUTE_NOINLINE __declspec(noinline)
-#else
-#define LLVM_ATTRIBUTE_NOINLINE
-#endif
-
-/// LLVM_ATTRIBUTE_ALWAYS_INLINE - On compilers where we have a directive to do
-/// so, mark a method "always inline" because it is performance sensitive. GCC
-/// 3.4 supported this but is buggy in various cases and produces unimplemented
-/// errors, just use it in GCC 4.0 and later.
-#if __has_attribute(always_inline) || LLVM_GNUC_PREREQ(4, 0, 0)
-#define LLVM_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
-#elif defined(_MSC_VER)
-#define LLVM_ATTRIBUTE_ALWAYS_INLINE __forceinline
-#else
-#define LLVM_ATTRIBUTE_ALWAYS_INLINE
-#endif
-
-#ifdef __GNUC__
-#define LLVM_ATTRIBUTE_NORETURN __attribute__((noreturn))
-#elif defined(_MSC_VER)
-#define LLVM_ATTRIBUTE_NORETURN __declspec(noreturn)
-#else
-#define LLVM_ATTRIBUTE_NORETURN
-#endif
-
-#if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0)
-#define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
-#elif defined(_MSC_VER)
-#define LLVM_ATTRIBUTE_RETURNS_NONNULL _Ret_notnull_
-#else
-#define LLVM_ATTRIBUTE_RETURNS_NONNULL
-#endif
-
-/// \macro LLVM_ATTRIBUTE_RETURNS_NOALIAS Used to mark a function as returning a
-/// pointer that does not alias any other valid pointer.
-#ifdef __GNUC__
-#define LLVM_ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))
-#elif defined(_MSC_VER)
-#define LLVM_ATTRIBUTE_RETURNS_NOALIAS __declspec(restrict)
-#else
-#define LLVM_ATTRIBUTE_RETURNS_NOALIAS
-#endif
-
-/// LLVM_FALLTHROUGH - Mark fallthrough cases in switch statements.
-#if __cplusplus > 201402L && __has_cpp_attribute(fallthrough)
-#define LLVM_FALLTHROUGH [[fallthrough]]
-#elif __has_cpp_attribute(gnu::fallthrough)
-#define LLVM_FALLTHROUGH [[gnu::fallthrough]]
-#elif !__cplusplus
-// Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious
-// error when __has_cpp_attribute is given a scoped attribute in C mode.
-#define LLVM_FALLTHROUGH
-#elif __has_cpp_attribute(clang::fallthrough)
-#define LLVM_FALLTHROUGH [[clang::fallthrough]]
-#else
-#define LLVM_FALLTHROUGH
-#endif
-
-/// LLVM_EXTENSION - Support compilers where we have a keyword to suppress
-/// pedantic diagnostics.
-#ifdef __GNUC__
-#define LLVM_EXTENSION __extension__
-#else
-#define LLVM_EXTENSION
-#endif
-
-// LLVM_ATTRIBUTE_DEPRECATED(decl, "message")
-#if __has_feature(attribute_deprecated_with_message)
-# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
-  decl __attribute__((deprecated(message)))
-#elif defined(__GNUC__)
-# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
-  decl __attribute__((deprecated))
-#elif defined(_MSC_VER)
-# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
-  __declspec(deprecated(message)) decl
-#else
-# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
-  decl
-#endif
-
-/// LLVM_BUILTIN_UNREACHABLE - On compilers which support it, expands
-/// to an expression which states that it is undefined behavior for the
-/// compiler to reach this point.  Otherwise is not defined.
-#if __has_builtin(__builtin_unreachable) || LLVM_GNUC_PREREQ(4, 5, 0)
-# define LLVM_BUILTIN_UNREACHABLE __builtin_unreachable()
-#elif defined(_MSC_VER)
-# define LLVM_BUILTIN_UNREACHABLE __assume(false)
-#endif
-
-/// LLVM_BUILTIN_TRAP - On compilers which support it, expands to an expression
-/// which causes the program to exit abnormally.
-#if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0)
-# define LLVM_BUILTIN_TRAP __builtin_trap()
-#elif defined(_MSC_VER)
-// The __debugbreak intrinsic is supported by MSVC, does not require forward
-// declarations involving platform-specific typedefs (unlike RaiseException),
-// results in a call to vectored exception handlers, and encodes to a short
-// instruction that still causes the trapping behavior we want.
-# define LLVM_BUILTIN_TRAP __debugbreak()
-#else
-# define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0
-#endif
-
-/// LLVM_BUILTIN_DEBUGTRAP - On compilers which support it, expands to
-/// an expression which causes the program to break while running
-/// under a debugger.
-#if __has_builtin(__builtin_debugtrap)
-# define LLVM_BUILTIN_DEBUGTRAP __builtin_debugtrap()
-#elif defined(_MSC_VER)
-// The __debugbreak intrinsic is supported by MSVC and breaks while
-// running under the debugger, and also supports invoking a debugger
-// when the OS is configured appropriately.
-# define LLVM_BUILTIN_DEBUGTRAP __debugbreak()
-#else
-// Just continue execution when built with compilers that have no
-// support. This is a debugging aid and not intended to force the
-// program to abort if encountered.
-# define LLVM_BUILTIN_DEBUGTRAP
-#endif
-
-/// \macro LLVM_ASSUME_ALIGNED
-/// \brief Returns a pointer with an assumed alignment.
-#if __has_builtin(__builtin_assume_aligned) || LLVM_GNUC_PREREQ(4, 7, 0)
-# define LLVM_ASSUME_ALIGNED(p, a) __builtin_assume_aligned(p, a)
-#elif defined(LLVM_BUILTIN_UNREACHABLE)
-// As of today, clang does not support __builtin_assume_aligned.
-# define LLVM_ASSUME_ALIGNED(p, a) \
-           (((uintptr_t(p) % (a)) == 0) ? (p) : (LLVM_BUILTIN_UNREACHABLE, (p)))
-#else
-# define LLVM_ASSUME_ALIGNED(p, a) (p)
-#endif
-
-/// \macro LLVM_ALIGNAS
-/// \brief Used to specify a minimum alignment for a structure or variable.
-#if __GNUC__ && !__has_feature(cxx_alignas) && !LLVM_GNUC_PREREQ(4, 8, 1)
-# define LLVM_ALIGNAS(x) __attribute__((aligned(x)))
-#else
-# define LLVM_ALIGNAS(x) alignas(x)
-#endif
-
-/// \macro LLVM_PACKED
-/// \brief Used to specify a packed structure.
-/// LLVM_PACKED(
-///    struct A {
-///      int i;
-///      int j;
-///      int k;
-///      long long l;
-///   });
-///
-/// LLVM_PACKED_START
-/// struct B {
-///   int i;
-///   int j;
-///   int k;
-///   long long l;
-/// };
-/// LLVM_PACKED_END
-#ifdef _MSC_VER
-# define LLVM_PACKED(d) __pragma(pack(push, 1)) d __pragma(pack(pop))
-# define LLVM_PACKED_START __pragma(pack(push, 1))
-# define LLVM_PACKED_END   __pragma(pack(pop))
-#else
-# define LLVM_PACKED(d) d __attribute__((packed))
-# define LLVM_PACKED_START _Pragma("pack(push, 1)")
-# define LLVM_PACKED_END   _Pragma("pack(pop)")
-#endif
-
-/// \macro LLVM_PTR_SIZE
-/// \brief A constant integer equivalent to the value of sizeof(void*).
-/// Generally used in combination with LLVM_ALIGNAS or when doing computation in
-/// the preprocessor.
-#ifdef __SIZEOF_POINTER__
-# define LLVM_PTR_SIZE __SIZEOF_POINTER__
-#elif defined(_WIN64)
-# define LLVM_PTR_SIZE 8
-#elif defined(_WIN32)
-# define LLVM_PTR_SIZE 4
-#elif defined(_MSC_VER)
-# error "could not determine LLVM_PTR_SIZE as a constant int for MSVC"
-#else
-# define LLVM_PTR_SIZE sizeof(void *)
-#endif
-
-/// \macro LLVM_MEMORY_SANITIZER_BUILD
-/// \brief Whether LLVM itself is built with MemorySanitizer instrumentation.
-#if __has_feature(memory_sanitizer)
-# define LLVM_MEMORY_SANITIZER_BUILD 1
-# include <sanitizer/msan_interface.h>
-#else
-# define LLVM_MEMORY_SANITIZER_BUILD 0
-# define __msan_allocated_memory(p, size)
-# define __msan_unpoison(p, size)
-#endif
-
-/// \macro LLVM_ADDRESS_SANITIZER_BUILD
-/// \brief Whether LLVM itself is built with AddressSanitizer instrumentation.
-#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
-# define LLVM_ADDRESS_SANITIZER_BUILD 1
-# include <sanitizer/asan_interface.h>
-#else
-# define LLVM_ADDRESS_SANITIZER_BUILD 0
-# define __asan_poison_memory_region(p, size)
-# define __asan_unpoison_memory_region(p, size)
-#endif
-
-/// \macro LLVM_THREAD_SANITIZER_BUILD
-/// \brief Whether LLVM itself is built with ThreadSanitizer instrumentation.
-#if __has_feature(thread_sanitizer) || defined(__SANITIZE_THREAD__)
-# define LLVM_THREAD_SANITIZER_BUILD 1
-#else
-# define LLVM_THREAD_SANITIZER_BUILD 0
-#endif
-
-#if LLVM_THREAD_SANITIZER_BUILD
-// Thread Sanitizer is a tool that finds races in code.
-// See http://code.google.com/p/data-race-test/wiki/DynamicAnnotations .
-// tsan detects these exact functions by name.
-#ifdef __cplusplus
-extern "C" {
-#endif
-void AnnotateHappensAfter(const char *file, int line, const volatile void *cv);
-void AnnotateHappensBefore(const char *file, int line, const volatile void *cv);
-void AnnotateIgnoreWritesBegin(const char *file, int line);
-void AnnotateIgnoreWritesEnd(const char *file, int line);
-#ifdef __cplusplus
-}
-#endif
-
-// This marker is used to define a happens-before arc. The race detector will
-// infer an arc from the begin to the end when they share the same pointer
-// argument.
-# define TsanHappensBefore(cv) AnnotateHappensBefore(__FILE__, __LINE__, cv)
-
-// This marker defines the destination of a happens-before arc.
-# define TsanHappensAfter(cv) AnnotateHappensAfter(__FILE__, __LINE__, cv)
-
-// Ignore any races on writes between here and the next TsanIgnoreWritesEnd.
-# define TsanIgnoreWritesBegin() AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
-
-// Resume checking for racy writes.
-# define TsanIgnoreWritesEnd() AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
-#else
-# define TsanHappensBefore(cv)
-# define TsanHappensAfter(cv)
-# define TsanIgnoreWritesBegin()
-# define TsanIgnoreWritesEnd()
-#endif
-
-/// \macro LLVM_NO_SANITIZE
-/// \brief Disable a particular sanitizer for a function.
-#if __has_attribute(no_sanitize)
-#define LLVM_NO_SANITIZE(KIND) __attribute__((no_sanitize(KIND)))
-#else
-#define LLVM_NO_SANITIZE(KIND)
-#endif
-
-/// \brief Mark debug helper function definitions like dump() that should not be
-/// stripped from debug builds.
-/// Note that you should also surround dump() functions with
-/// `#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)` so they do always
-/// get stripped in release builds.
-// FIXME: Move this to a private config.h as it's not usable in public headers.
-#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
-#define LLVM_DUMP_METHOD LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED
-#else
-#define LLVM_DUMP_METHOD LLVM_ATTRIBUTE_NOINLINE
-#endif
-
-/// \macro LLVM_PRETTY_FUNCTION
-/// \brief Gets a user-friendly looking function signature for the current scope
-/// using the best available method on each platform.  The exact format of the
-/// resulting string is implementation specific and non-portable, so this should
-/// only be used, for example, for logging or diagnostics.
-#if defined(_MSC_VER)
-#define LLVM_PRETTY_FUNCTION __FUNCSIG__
-#elif defined(__GNUC__) || defined(__clang__)
-#define LLVM_PRETTY_FUNCTION __PRETTY_FUNCTION__
-#else
-#define LLVM_PRETTY_FUNCTION __func__
-#endif
-
-/// \macro LLVM_THREAD_LOCAL
-/// \brief A thread-local storage specifier which can be used with globals,
-/// extern globals, and static globals.
-///
-/// This is essentially an extremely restricted analog to C++11's thread_local
-/// support, and uses that when available. However, it falls back on
-/// platform-specific or vendor-provided extensions when necessary. These
-/// extensions don't support many of the C++11 thread_local's features. You
-/// should only use this for PODs that you can statically initialize to
-/// some constant value. In almost all circumstances this is most appropriate
-/// for use with a pointer, integer, or small aggregation of pointers and
-/// integers.
-#if LLVM_ENABLE_THREADS
-#if __has_feature(cxx_thread_local)
-#define LLVM_THREAD_LOCAL thread_local
-#elif defined(_MSC_VER)
-// MSVC supports this with a __declspec.
-#define LLVM_THREAD_LOCAL __declspec(thread)
-#else
-// Clang, GCC, and other compatible compilers used __thread prior to C++11 and
-// we only need the restricted functionality that provides.
-#define LLVM_THREAD_LOCAL __thread
-#endif
-#else // !LLVM_ENABLE_THREADS
-// If threading is disabled entirely, this compiles to nothing and you get
-// a normal global variable.
-#define LLVM_THREAD_LOCAL
-#endif
-
-/// \macro LLVM_ENABLE_EXCEPTIONS
-/// \brief Whether LLVM is built with exception support.
-#if __has_feature(cxx_exceptions)
-#define LLVM_ENABLE_EXCEPTIONS 1
-#elif defined(__GNUC__) && defined(__EXCEPTIONS)
-#define LLVM_ENABLE_EXCEPTIONS 1
-#elif defined(_MSC_VER) && defined(_CPPUNWIND)
-#define LLVM_ENABLE_EXCEPTIONS 1
-#endif
-
-#endif
diff --git a/linux-x64/clang/include/llvm/Demangle/Demangle.h b/linux-x64/clang/include/llvm/Demangle/Demangle.h
index d2eb56b..b118631 100644
--- a/linux-x64/clang/include/llvm/Demangle/Demangle.h
+++ b/linux-x64/clang/include/llvm/Demangle/Demangle.h
@@ -7,6 +7,9 @@
 //
 //===----------------------------------------------------------------------===//
 
+#ifndef LLVM_DEMANGLE_DEMANGLE_H
+#define LLVM_DEMANGLE_DEMANGLE_H
+
 #include <cstddef>
 
 namespace llvm {
@@ -16,13 +19,77 @@
 /// The mangled_name is demangled into buf and returned. If the buffer is not
 /// large enough, realloc is used to expand it.
 ///
-/// The *status will be set to
-///   unknown_error: -4
-///   invalid_args:  -3
-///   invalid_mangled_name: -2
-///   memory_alloc_failure: -1
-///   success: 0
+/// The *status will be set to a value from the following enumeration
+enum : int {
+  demangle_unknown_error = -4,
+  demangle_invalid_args = -3,
+  demangle_invalid_mangled_name = -2,
+  demangle_memory_alloc_failure = -1,
+  demangle_success = 0,
+};
 
 char *itaniumDemangle(const char *mangled_name, char *buf, size_t *n,
                       int *status);
-}
+
+enum MSDemangleFlags { MSDF_None = 0, MSDF_DumpBackrefs = 1 << 0 };
+char *microsoftDemangle(const char *mangled_name, char *buf, size_t *n,
+                        int *status, MSDemangleFlags Flags = MSDF_None);
+
+/// "Partial" demangler. This supports demangling a string into an AST
+/// (typically an intermediate stage in itaniumDemangle) and querying certain
+/// properties or partially printing the demangled name.
+struct ItaniumPartialDemangler {
+  ItaniumPartialDemangler();
+
+  ItaniumPartialDemangler(ItaniumPartialDemangler &&Other);
+  ItaniumPartialDemangler &operator=(ItaniumPartialDemangler &&Other);
+
+  /// Demangle into an AST. Subsequent calls to the rest of the member functions
+  /// implicitly operate on the AST this produces.
+  /// \return true on error, false otherwise
+  bool partialDemangle(const char *MangledName);
+
+  /// Just print the entire mangled name into Buf. Buf and N behave like the
+  /// second and third parameters to itaniumDemangle.
+  char *finishDemangle(char *Buf, size_t *N) const;
+
+  /// Get the base name of a function. This doesn't include trailing template
+  /// arguments, ie for "a::b<int>" this function returns "b".
+  char *getFunctionBaseName(char *Buf, size_t *N) const;
+
+  /// Get the context name for a function. For "a::b::c", this function returns
+  /// "a::b".
+  char *getFunctionDeclContextName(char *Buf, size_t *N) const;
+
+  /// Get the entire name of this function.
+  char *getFunctionName(char *Buf, size_t *N) const;
+
+  /// Get the parameters for this function.
+  char *getFunctionParameters(char *Buf, size_t *N) const;
+  char *getFunctionReturnType(char *Buf, size_t *N) const;
+
+  /// If this function has any any cv or reference qualifiers. These imply that
+  /// the function is a non-static member function.
+  bool hasFunctionQualifiers() const;
+
+  /// If this symbol describes a constructor or destructor.
+  bool isCtorOrDtor() const;
+
+  /// If this symbol describes a function.
+  bool isFunction() const;
+
+  /// If this symbol describes a variable.
+  bool isData() const;
+
+  /// If this symbol is a <special-name>. These are generally implicitly
+  /// generated by the implementation, such as vtables and typeinfo names.
+  bool isSpecialName() const;
+
+  ~ItaniumPartialDemangler();
+private:
+  void *RootNode;
+  void *Context;
+};
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/ExecutionEngine.h b/linux-x64/clang/include/llvm/ExecutionEngine/ExecutionEngine.h
index 7932688..b61cb24 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/ExecutionEngine.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/ExecutionEngine.h
@@ -60,7 +60,7 @@
 
 } // end namespace object
 
-/// \brief Helper class for helping synchronize access to the global address map
+/// Helper class for helping synchronize access to the global address map
 /// table.  Access to this class should be serialized under a mutex.
 class ExecutionEngineState {
 public:
@@ -86,7 +86,7 @@
     return GlobalAddressReverseMap;
   }
 
-  /// \brief Erase an entry from the mapping table.
+  /// Erase an entry from the mapping table.
   ///
   /// \returns The address that \p ToUnmap was happed to.
   uint64_t RemoveMapping(StringRef Name);
@@ -94,7 +94,7 @@
 
 using FunctionCreator = std::function<void *(const std::string &)>;
 
-/// \brief Abstract interface for implementation execution of LLVM modules,
+/// Abstract interface for implementation execution of LLVM modules,
 /// designed to support both interpreter and just-in-time (JIT) compiler
 /// implementations.
 class ExecutionEngine {
@@ -634,7 +634,7 @@
     return *this;
   }
 
-  // \brief Use OrcMCJITReplacement instead of MCJIT. Off by default.
+  // Use OrcMCJITReplacement instead of MCJIT. Off by default.
   void setUseOrcMCJITReplacement(bool UseOrcMCJITReplacement) {
     this->UseOrcMCJITReplacement = UseOrcMCJITReplacement;
   }
@@ -642,7 +642,7 @@
   void setEmulatedTLS(bool EmulatedTLS) {
     this->EmulatedTLS = EmulatedTLS;
   }
-  
+
   TargetMachine *selectTarget();
 
   /// selectTarget - Pick a target either via -march or by guessing the native
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITEventListener.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITEventListener.h
index ff7840f..1ce772c 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/JITEventListener.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITEventListener.h
@@ -15,9 +15,11 @@
 #ifndef LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H
 #define LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H
 
+#include "llvm-c/ExecutionEngine.h"
 #include "llvm/Config/llvm-config.h"
 #include "llvm/ExecutionEngine/RuntimeDyld.h"
 #include "llvm/IR/DebugLoc.h"
+#include "llvm/Support/CBindingWrapping.h"
 #include <cstdint>
 #include <vector>
 
@@ -115,10 +117,21 @@
   }
 #endif // USE_OPROFILE
 
+#if LLVM_USE_PERF
+  static JITEventListener *createPerfJITEventListener();
+#else
+  static JITEventListener *createPerfJITEventListener()
+  {
+    return nullptr;
+  }
+#endif // USE_PERF
+
 private:
   virtual void anchor();
 };
 
+DEFINE_SIMPLE_CONVERSION_FUNCTIONS(JITEventListener, LLVMJITEventListenerRef)
+
 } // end namespace llvm
 
 #endif // LLVM_EXECUTIONENGINE_JITEVENTLISTENER_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h b/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
index 86ab173..0e33f01 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/JITSymbol.h
@@ -32,14 +32,14 @@
 
 namespace object {
 
-class BasicSymbolRef;
+class SymbolRef;
 
 } // end namespace object
 
-/// @brief Represents an address in the target process's address space.
+/// Represents an address in the target process's address space.
 using JITTargetAddress = uint64_t;
 
-/// @brief Flags for symbols in the JIT.
+/// Flags for symbols in the JIT.
 class JITSymbolFlags {
 public:
   using UnderlyingType = uint8_t;
@@ -52,63 +52,77 @@
     Common = 1U << 2,
     Absolute = 1U << 3,
     Exported = 1U << 4,
-    NotMaterialized = 1U << 5
+    Callable = 1U << 5,
+    Lazy = 1U << 6,
+    Materializing = 1U << 7
   };
 
   static JITSymbolFlags stripTransientFlags(JITSymbolFlags Orig) {
-    return static_cast<FlagNames>(Orig.Flags & ~NotMaterialized);
+    return static_cast<FlagNames>(Orig.Flags & ~Lazy & ~Materializing);
   }
 
-  /// @brief Default-construct a JITSymbolFlags instance.
+  /// Default-construct a JITSymbolFlags instance.
   JITSymbolFlags() = default;
 
-  /// @brief Construct a JITSymbolFlags instance from the given flags.
+  /// Construct a JITSymbolFlags instance from the given flags.
   JITSymbolFlags(FlagNames Flags) : Flags(Flags) {}
 
-  /// @brief Construct a JITSymbolFlags instance from the given flags and target
+  /// Construct a JITSymbolFlags instance from the given flags and target
   ///        flags.
   JITSymbolFlags(FlagNames Flags, TargetFlagsType TargetFlags)
     : Flags(Flags), TargetFlags(TargetFlags) {}
 
-  /// @brief Return true if there was an error retrieving this symbol.
+  /// Return true if there was an error retrieving this symbol.
   bool hasError() const {
     return (Flags & HasError) == HasError;
   }
 
-  /// @brief Returns true if this symbol has been fully materialized (i.e. is
-  ///        callable).
-  bool isMaterialized() const { return !(Flags & NotMaterialized); }
+  /// Returns true if this is a lazy symbol.
+  ///        This flag is used internally by the JIT APIs to track
+  ///        materialization states.
+  bool isLazy() const { return Flags & Lazy; }
 
-  /// @brief Returns true if the Weak flag is set.
+  /// Returns true if this symbol is in the process of being
+  ///        materialized.
+  bool isMaterializing() const { return Flags & Materializing; }
+
+  /// Returns true if this symbol is fully materialized.
+  ///        (i.e. neither lazy, nor materializing).
+  bool isMaterialized() const { return !(Flags & (Lazy | Materializing)); }
+
+  /// Returns true if the Weak flag is set.
   bool isWeak() const {
     return (Flags & Weak) == Weak;
   }
 
-  /// @brief Returns true if the Common flag is set.
+  /// Returns true if the Common flag is set.
   bool isCommon() const {
     return (Flags & Common) == Common;
   }
 
-  /// @brief Returns true if the symbol isn't weak or common.
+  /// Returns true if the symbol isn't weak or common.
   bool isStrong() const {
     return !isWeak() && !isCommon();
   }
 
-  /// @brief Returns true if the Exported flag is set.
+  /// Returns true if the Exported flag is set.
   bool isExported() const {
     return (Flags & Exported) == Exported;
   }
 
-  /// @brief Implicitly convert to the underlying flags type.
+  /// Returns true if the given symbol is known to be callable.
+  bool isCallable() const { return (Flags & Callable) == Callable; }
+
+  /// Implicitly convert to the underlying flags type.
   operator UnderlyingType&() { return Flags; }
 
-  /// @brief Implicitly convert to the underlying flags type.
+  /// Implicitly convert to the underlying flags type.
   operator const UnderlyingType&() const { return Flags; }
 
-  /// @brief Return a reference to the target-specific flags.
+  /// Return a reference to the target-specific flags.
   TargetFlagsType& getTargetFlags() { return TargetFlags; }
 
-  /// @brief Return a reference to the target-specific flags.
+  /// Return a reference to the target-specific flags.
   const TargetFlagsType& getTargetFlags() const { return TargetFlags; }
 
   /// Construct a JITSymbolFlags value based on the flags of the given global
@@ -117,14 +131,15 @@
 
   /// Construct a JITSymbolFlags value based on the flags of the given libobject
   /// symbol.
-  static JITSymbolFlags fromObjectSymbol(const object::BasicSymbolRef &Symbol);
+  static Expected<JITSymbolFlags>
+  fromObjectSymbol(const object::SymbolRef &Symbol);
 
 private:
   UnderlyingType Flags = None;
   TargetFlagsType TargetFlags = 0;
 };
 
-/// @brief ARM-specific JIT symbol flags.
+/// ARM-specific JIT symbol flags.
 /// FIXME: This should be moved into a target-specific header.
 class ARMJITSymbolFlags {
 public:
@@ -137,62 +152,65 @@
 
   operator JITSymbolFlags::TargetFlagsType&() { return Flags; }
 
-  static ARMJITSymbolFlags fromObjectSymbol(
-                                           const object::BasicSymbolRef &Symbol);
+  static ARMJITSymbolFlags fromObjectSymbol(const object::SymbolRef &Symbol);
+
 private:
   JITSymbolFlags::TargetFlagsType Flags = 0;
 };
 
-/// @brief Represents a symbol that has been evaluated to an address already.
+/// Represents a symbol that has been evaluated to an address already.
 class JITEvaluatedSymbol {
 public:
   JITEvaluatedSymbol() = default;
 
-  /// @brief Create a 'null' symbol.
+  /// Create a 'null' symbol.
   JITEvaluatedSymbol(std::nullptr_t) {}
 
-  /// @brief Create a symbol for the given address and flags.
+  /// Create a symbol for the given address and flags.
   JITEvaluatedSymbol(JITTargetAddress Address, JITSymbolFlags Flags)
       : Address(Address), Flags(Flags) {}
 
-  /// @brief An evaluated symbol converts to 'true' if its address is non-zero.
+  /// An evaluated symbol converts to 'true' if its address is non-zero.
   explicit operator bool() const { return Address != 0; }
 
-  /// @brief Return the address of this symbol.
+  /// Return the address of this symbol.
   JITTargetAddress getAddress() const { return Address; }
 
-  /// @brief Return the flags for this symbol.
+  /// Return the flags for this symbol.
   JITSymbolFlags getFlags() const { return Flags; }
 
+  /// Set the flags for this symbol.
+  void setFlags(JITSymbolFlags Flags) { this->Flags = std::move(Flags); }
+
 private:
   JITTargetAddress Address = 0;
   JITSymbolFlags Flags;
 };
 
-/// @brief Represents a symbol in the JIT.
+/// Represents a symbol in the JIT.
 class JITSymbol {
 public:
   using GetAddressFtor = std::function<Expected<JITTargetAddress>()>;
 
-  /// @brief Create a 'null' symbol, used to represent a "symbol not found"
+  /// Create a 'null' symbol, used to represent a "symbol not found"
   ///        result from a successful (non-erroneous) lookup.
   JITSymbol(std::nullptr_t)
       : CachedAddr(0) {}
 
-  /// @brief Create a JITSymbol representing an error in the symbol lookup
+  /// Create a JITSymbol representing an error in the symbol lookup
   ///        process (e.g. a network failure during a remote lookup).
   JITSymbol(Error Err)
     : Err(std::move(Err)), Flags(JITSymbolFlags::HasError) {}
 
-  /// @brief Create a symbol for a definition with a known address.
+  /// Create a symbol for a definition with a known address.
   JITSymbol(JITTargetAddress Addr, JITSymbolFlags Flags)
       : CachedAddr(Addr), Flags(Flags) {}
 
-  /// @brief Construct a JITSymbol from a JITEvaluatedSymbol.
+  /// Construct a JITSymbol from a JITEvaluatedSymbol.
   JITSymbol(JITEvaluatedSymbol Sym)
       : CachedAddr(Sym.getAddress()), Flags(Sym.getFlags()) {}
 
-  /// @brief Create a symbol for a definition that doesn't have a known address
+  /// Create a symbol for a definition that doesn't have a known address
   ///        yet.
   /// @param GetAddress A functor to materialize a definition (fixing the
   ///        address) on demand.
@@ -232,19 +250,19 @@
       CachedAddr.~JITTargetAddress();
   }
 
-  /// @brief Returns true if the symbol exists, false otherwise.
+  /// Returns true if the symbol exists, false otherwise.
   explicit operator bool() const {
     return !Flags.hasError() && (CachedAddr || GetAddress);
   }
 
-  /// @brief Move the error field value out of this JITSymbol.
+  /// Move the error field value out of this JITSymbol.
   Error takeError() {
     if (Flags.hasError())
       return std::move(Err);
     return Error::success();
   }
 
-  /// @brief Get the address of the symbol in the target address space. Returns
+  /// Get the address of the symbol in the target address space. Returns
   ///        '0' if the symbol does not exist.
   Expected<JITTargetAddress> getAddress() {
     assert(!Flags.hasError() && "getAddress called on error value");
@@ -270,7 +288,7 @@
   JITSymbolFlags Flags;
 };
 
-/// @brief Symbol resolution interface.
+/// Symbol resolution interface.
 ///
 /// Allows symbol flags and addresses to be looked up by name.
 /// Symbol queries are done in bulk (i.e. you request resolution of a set of
@@ -284,14 +302,14 @@
 
   virtual ~JITSymbolResolver() = default;
 
-  /// @brief Returns the fully resolved address and flags for each of the given
+  /// Returns the fully resolved address and flags for each of the given
   ///        symbols.
   ///
   /// This method will return an error if any of the given symbols can not be
   /// resolved, or if the resolution process itself triggers an error.
   virtual Expected<LookupResult> lookup(const LookupSet &Symbols) = 0;
 
-  /// @brief Returns the symbol flags for each of the given symbols.
+  /// Returns the symbol flags for each of the given symbols.
   ///
   /// This method does NOT return an error if any of the given symbols is
   /// missing. Instead, that symbol will be left out of the result map.
@@ -301,15 +319,15 @@
   virtual void anchor();
 };
 
-/// \brief Legacy symbol resolution interface.
+/// Legacy symbol resolution interface.
 class LegacyJITSymbolResolver : public JITSymbolResolver {
 public:
-  /// @brief Performs lookup by, for each symbol, first calling
+  /// Performs lookup by, for each symbol, first calling
   ///        findSymbolInLogicalDylib and if that fails calling
   ///        findSymbol.
   Expected<LookupResult> lookup(const LookupSet &Symbols) final;
 
-  /// @brief Performs flags lookup by calling findSymbolInLogicalDylib and
+  /// Performs flags lookup by calling findSymbolInLogicalDylib and
   ///        returning the flags value for that symbol.
   Expected<LookupFlagsResult> lookupFlags(const LookupSet &Symbols) final;
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
index a64a6dd..8bd21a0 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h
@@ -20,9 +20,10 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/ExecutionEngine/Orc/Core.h"
 #include "llvm/ExecutionEngine/Orc/IndirectionUtils.h"
 #include "llvm/ExecutionEngine/Orc/LambdaResolver.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
+#include "llvm/ExecutionEngine/Orc/Legacy.h"
 #include "llvm/ExecutionEngine/Orc/OrcError.h"
 #include "llvm/ExecutionEngine/RuntimeDyld.h"
 #include "llvm/IR/Attributes.h"
@@ -57,7 +58,47 @@
 
 namespace orc {
 
-/// @brief Compile-on-demand layer.
+class ExtractingIRMaterializationUnit;
+
+class CompileOnDemandLayer2 : public IRLayer {
+  friend class ExtractingIRMaterializationUnit;
+
+public:
+  /// Builder for IndirectStubsManagers.
+  using IndirectStubsManagerBuilder =
+      std::function<std::unique_ptr<IndirectStubsManager>()>;
+
+  using GetAvailableContextFunction = std::function<LLVMContext &()>;
+
+  CompileOnDemandLayer2(ExecutionSession &ES, IRLayer &BaseLayer,
+                        JITCompileCallbackManager &CCMgr,
+                        IndirectStubsManagerBuilder BuildIndirectStubsManager,
+                        GetAvailableContextFunction GetAvailableContext);
+
+  Error add(VSO &V, VModuleKey K, std::unique_ptr<Module> M) override;
+
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<Module> M) override;
+
+private:
+  using StubManagersMap =
+      std::map<const VSO *, std::unique_ptr<IndirectStubsManager>>;
+
+  IndirectStubsManager &getStubsManager(const VSO &V);
+
+  void emitExtractedFunctionsModule(MaterializationResponsibility R,
+                                    std::unique_ptr<Module> M);
+
+  mutable std::mutex CODLayerMutex;
+
+  IRLayer &BaseLayer;
+  JITCompileCallbackManager &CCMgr;
+  IndirectStubsManagerBuilder BuildIndirectStubsManager;
+  StubManagersMap StubsMgrs;
+  GetAvailableContextFunction GetAvailableContext;
+};
+
+/// Compile-on-demand layer.
 ///
 ///   When a module is added to this layer a stub is created for each of its
 /// function definitions. The stubs and other global values are immediately
@@ -196,10 +237,10 @@
 
 public:
 
-  /// @brief Module partitioning functor.
+  /// Module partitioning functor.
   using PartitioningFtor = std::function<std::set<Function*>(Function&)>;
 
-  /// @brief Builder for IndirectStubsManagers.
+  /// Builder for IndirectStubsManagers.
   using IndirectStubsManagerBuilderT =
       std::function<std::unique_ptr<IndirectStubsMgrT>()>;
 
@@ -209,7 +250,7 @@
   using SymbolResolverSetter =
       std::function<void(VModuleKey K, std::shared_ptr<SymbolResolver> R)>;
 
-  /// @brief Construct a compile-on-demand layer instance.
+  /// Construct a compile-on-demand layer instance.
   CompileOnDemandLayer(ExecutionSession &ES, BaseLayerT &BaseLayer,
                        SymbolResolverGetter GetSymbolResolver,
                        SymbolResolverSetter SetSymbolResolver,
@@ -230,7 +271,7 @@
       consumeError(removeModule(LogicalDylibs.begin()->first));
   }
 
-  /// @brief Add a module to the compile-on-demand layer.
+  /// Add a module to the compile-on-demand layer.
   Error addModule(VModuleKey K, std::unique_ptr<Module> M) {
 
     assert(!LogicalDylibs.count(K) && "VModuleKey K already in use");
@@ -242,12 +283,12 @@
     return addLogicalModule(I->second, std::move(M));
   }
 
-  /// @brief Add extra modules to an existing logical module.
+  /// Add extra modules to an existing logical module.
   Error addExtraModule(VModuleKey K, std::unique_ptr<Module> M) {
     return addLogicalModule(LogicalDylibs[K], std::move(M));
   }
 
-  /// @brief Remove the module represented by the given key.
+  /// Remove the module represented by the given key.
   ///
   ///   This will remove all modules in the layers below that were derived from
   /// the module represented by K.
@@ -259,7 +300,7 @@
     return Err;
   }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -275,7 +316,7 @@
     return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Get the address of a symbol provided by this layer, or some layer
+  /// Get the address of a symbol provided by this layer, or some layer
   ///        below this one.
   JITSymbol findSymbolIn(VModuleKey K, const std::string &Name,
                          bool ExportedSymbolsOnly) {
@@ -283,7 +324,7 @@
     return LogicalDylibs[K].findSymbol(BaseLayer, Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Update the stub for the given function to point at FnBodyAddr.
+  /// Update the stub for the given function to point at FnBodyAddr.
   /// This can be used to support re-optimization.
   /// @return true if the function exists and the stub is updated, false
   ///         otherwise.
@@ -316,7 +357,7 @@
     // simplifying symbol lookup.
     LD.StaticRenamer.rename(*SrcMPtr);
 
-    // Bump the linkage and rename any anonymous/privote members in SrcM to
+    // Bump the linkage and rename any anonymous/private members in SrcM to
     // ensure that everything will resolve properly after we partition SrcM.
     makeAllSymbolsExternallyAccessible(*SrcMPtr);
 
@@ -349,22 +390,21 @@
         // Create a callback, associate it with the stub for the function,
         // and set the compile action to compile the partition containing the
         // function.
-        if (auto CCInfoOrErr = CompileCallbackMgr.getCompileCallback()) {
-          auto &CCInfo = *CCInfoOrErr;
+        auto CompileAction = [this, &LD, LMId, &F]() -> JITTargetAddress {
+          if (auto FnImplAddrOrErr = this->extractAndCompile(LD, LMId, F))
+            return *FnImplAddrOrErr;
+          else {
+            // FIXME: Report error, return to 'abort' or something similar.
+            consumeError(FnImplAddrOrErr.takeError());
+            return 0;
+          }
+        };
+        if (auto CCAddr =
+                CompileCallbackMgr.getCompileCallback(std::move(CompileAction)))
           StubInits[MangledName] =
-            std::make_pair(CCInfo.getAddress(),
-                           JITSymbolFlags::fromGlobalValue(F));
-          CCInfo.setCompileAction([this, &LD, LMId, &F]() -> JITTargetAddress {
-              if (auto FnImplAddrOrErr = this->extractAndCompile(LD, LMId, F))
-                return *FnImplAddrOrErr;
-              else {
-                // FIXME: Report error, return to 'abort' or something similar.
-                consumeError(FnImplAddrOrErr.takeError());
-                return 0;
-              }
-            });
-        } else
-          return CCInfoOrErr.takeError();
+              std::make_pair(*CCAddr, JITSymbolFlags::fromGlobalValue(F));
+        else
+          return CCAddr.takeError();
       }
 
       if (auto Err = LD.StubsMgr->createStubs(StubInits))
@@ -402,9 +442,8 @@
 
     // Initializers may refer to functions declared (but not defined) in this
     // module. Build a materializer to clone decls on demand.
-    Error MaterializerErrors = Error::success();
     auto Materializer = createLambdaMaterializer(
-      [&LD, &GVsM, &MaterializerErrors](Value *V) -> Value* {
+      [&LD, &GVsM](Value *V) -> Value* {
         if (auto *F = dyn_cast<Function>(V)) {
           // Decls in the original module just get cloned.
           if (F->isDeclaration())
@@ -416,18 +455,8 @@
           const DataLayout &DL = GVsM->getDataLayout();
           std::string FName = mangle(F->getName(), DL);
           unsigned PtrBitWidth = DL.getPointerTypeSizeInBits(F->getType());
-          JITTargetAddress StubAddr = 0;
-
-          // Get the address for the stub. If we encounter an error while
-          // doing so, stash it in the MaterializerErrors variable and use a
-          // null address as a placeholder.
-          if (auto StubSym = LD.StubsMgr->findStub(FName, false)) {
-            if (auto StubAddrOrErr = StubSym.getAddress())
-              StubAddr = *StubAddrOrErr;
-            else
-              MaterializerErrors = joinErrors(std::move(MaterializerErrors),
-                                              StubAddrOrErr.takeError());
-          }
+          JITTargetAddress StubAddr =
+            LD.StubsMgr->findStub(FName, false).getAddress();
 
           ConstantInt *StubAddrCI =
             ConstantInt::get(GVsM->getContext(), APInt(PtrBitWidth, StubAddr));
@@ -456,15 +485,10 @@
       NewA->setAliasee(cast<Constant>(Init));
     }
 
-    if (MaterializerErrors)
-      return MaterializerErrors;
-
     // Build a resolver for the globals module and add it to the base layer.
     auto LegacyLookup = [this, &LD](const std::string &Name) -> JITSymbol {
       if (auto Sym = LD.StubsMgr->findStub(Name, false))
         return Sym;
-      else if (auto Err = Sym.takeError())
-        return std::move(Err);
 
       if (auto Sym = LD.findSymbol(BaseLayer, Name, false))
         return Sym;
@@ -475,25 +499,35 @@
     };
 
     auto GVsResolver = createSymbolResolver(
-        [&LD, LegacyLookup](SymbolFlagsMap &SymbolFlags,
-                            const SymbolNameSet &Symbols) {
-          auto NotFoundViaLegacyLookup =
-              lookupFlagsWithLegacyFn(SymbolFlags, Symbols, LegacyLookup);
+        [&LD, LegacyLookup](const SymbolNameSet &Symbols) {
+          auto SymbolFlags = lookupFlagsWithLegacyFn(Symbols, LegacyLookup);
 
-          if (!NotFoundViaLegacyLookup) {
-            logAllUnhandledErrors(NotFoundViaLegacyLookup.takeError(), errs(),
+          if (!SymbolFlags) {
+            logAllUnhandledErrors(SymbolFlags.takeError(), errs(),
                                   "CODLayer/GVsResolver flags lookup failed: ");
-            SymbolFlags.clear();
-            return SymbolNameSet();
+            return SymbolFlagsMap();
           }
 
-          return LD.BackingResolver->lookupFlags(SymbolFlags,
-                                                 *NotFoundViaLegacyLookup);
+          if (SymbolFlags->size() == Symbols.size())
+            return *SymbolFlags;
+
+          SymbolNameSet NotFoundViaLegacyLookup;
+          for (auto &S : Symbols)
+            if (!SymbolFlags->count(S))
+              NotFoundViaLegacyLookup.insert(S);
+          auto SymbolFlags2 =
+              LD.BackingResolver->lookupFlags(NotFoundViaLegacyLookup);
+
+          for (auto &KV : SymbolFlags2)
+            (*SymbolFlags)[KV.first] = std::move(KV.second);
+
+          return *SymbolFlags;
         },
-        [&LD, LegacyLookup](std::shared_ptr<AsynchronousSymbolQuery> Query,
-                            SymbolNameSet Symbols) {
+        [this, &LD,
+         LegacyLookup](std::shared_ptr<AsynchronousSymbolQuery> Query,
+                       SymbolNameSet Symbols) {
           auto NotFoundViaLegacyLookup =
-              lookupWithLegacyFn(*Query, Symbols, LegacyLookup);
+              lookupWithLegacyFn(ES, *Query, Symbols, LegacyLookup);
           return LD.BackingResolver->lookup(Query, NotFoundViaLegacyLookup);
         });
 
@@ -634,23 +668,34 @@
 
     // Create memory manager and symbol resolver.
     auto Resolver = createSymbolResolver(
-        [&LD, LegacyLookup](SymbolFlagsMap &SymbolFlags,
-                            const SymbolNameSet &Symbols) {
-          auto NotFoundViaLegacyLookup =
-              lookupFlagsWithLegacyFn(SymbolFlags, Symbols, LegacyLookup);
-          if (!NotFoundViaLegacyLookup) {
-            logAllUnhandledErrors(NotFoundViaLegacyLookup.takeError(), errs(),
+        [&LD, LegacyLookup](const SymbolNameSet &Symbols) {
+          auto SymbolFlags = lookupFlagsWithLegacyFn(Symbols, LegacyLookup);
+          if (!SymbolFlags) {
+            logAllUnhandledErrors(SymbolFlags.takeError(), errs(),
                                   "CODLayer/SubResolver flags lookup failed: ");
-            SymbolFlags.clear();
-            return SymbolNameSet();
+            return SymbolFlagsMap();
           }
-          return LD.BackingResolver->lookupFlags(SymbolFlags,
-                                                 *NotFoundViaLegacyLookup);
+
+          if (SymbolFlags->size() == Symbols.size())
+            return *SymbolFlags;
+
+          SymbolNameSet NotFoundViaLegacyLookup;
+          for (auto &S : Symbols)
+            if (!SymbolFlags->count(S))
+              NotFoundViaLegacyLookup.insert(S);
+
+          auto SymbolFlags2 =
+              LD.BackingResolver->lookupFlags(NotFoundViaLegacyLookup);
+
+          for (auto &KV : SymbolFlags2)
+            (*SymbolFlags)[KV.first] = std::move(KV.second);
+
+          return *SymbolFlags;
         },
-        [&LD, LegacyLookup](std::shared_ptr<AsynchronousSymbolQuery> Q,
-                            SymbolNameSet Symbols) {
+        [this, &LD, LegacyLookup](std::shared_ptr<AsynchronousSymbolQuery> Q,
+                                  SymbolNameSet Symbols) {
           auto NotFoundViaLegacyLookup =
-              lookupWithLegacyFn(*Q, Symbols, LegacyLookup);
+              lookupWithLegacyFn(ES, *Q, Symbols, LegacyLookup);
           return LD.BackingResolver->lookup(Q,
                                             std::move(NotFoundViaLegacyLookup));
         });
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
index a8050ff..213a591 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/CompileUtils.h
@@ -16,13 +16,14 @@
 
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ExecutionEngine/ObjectCache.h"
-#include "llvm/ExecutionEngine/ObjectMemoryBuffer.h"
+#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
 #include "llvm/IR/LegacyPassManager.h"
 #include "llvm/Object/Binary.h"
 #include "llvm/Object/ObjectFile.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/SmallVectorMemoryBuffer.h"
 #include "llvm/Support/raw_ostream.h"
 #include "llvm/Target/TargetMachine.h"
 #include <algorithm>
@@ -35,35 +36,21 @@
 
 namespace orc {
 
-/// @brief Simple compile functor: Takes a single IR module and returns an
-///        ObjectFile.
+/// Simple compile functor: Takes a single IR module and returns an ObjectFile.
+/// This compiler supports a single compilation thread and LLVMContext only.
+/// For multithreaded compilation, use MultiThreadedSimpleCompiler below.
 class SimpleCompiler {
-private:
-  class SmallVectorMemoryBuffer : public MemoryBuffer {
-  public:
-    SmallVectorMemoryBuffer(SmallVector<char, 0> Buffer)
-        : Buffer(std::move(Buffer)) {
-      init(this->Buffer.data(), this->Buffer.data() + this->Buffer.size(),
-           false);
-    }
-
-    BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
-
-  private:
-    SmallVector<char, 0> Buffer;
-  };
-
 public:
   using CompileResult = std::unique_ptr<MemoryBuffer>;
 
-  /// @brief Construct a simple compile functor with the given target.
+  /// Construct a simple compile functor with the given target.
   SimpleCompiler(TargetMachine &TM, ObjectCache *ObjCache = nullptr)
     : TM(TM), ObjCache(ObjCache) {}
 
-  /// @brief Set an ObjectCache to query before compiling.
+  /// Set an ObjectCache to query before compiling.
   void setObjectCache(ObjectCache *NewCache) { ObjCache = NewCache; }
 
-  /// @brief Compile a Module to an ObjectFile.
+  /// Compile a Module to an ObjectFile.
   CompileResult operator()(Module &M) {
     CompileResult CachedObject = tryToLoadFromObjectCache(M);
     if (CachedObject)
@@ -114,6 +101,29 @@
   ObjectCache *ObjCache = nullptr;
 };
 
+/// A thread-safe version of SimpleCompiler.
+///
+/// This class creates a new TargetMachine and SimpleCompiler instance for each
+/// compile.
+class MultiThreadedSimpleCompiler {
+public:
+  MultiThreadedSimpleCompiler(JITTargetMachineBuilder JTMB,
+                              ObjectCache *ObjCache = nullptr)
+      : JTMB(std::move(JTMB)), ObjCache(ObjCache) {}
+
+  void setObjectCache(ObjectCache *ObjCache) { this->ObjCache = ObjCache; }
+
+  std::unique_ptr<MemoryBuffer> operator()(Module &M) {
+    auto TM = cantFail(JTMB.createTargetMachine());
+    SimpleCompiler C(*TM, ObjCache);
+    return C(M);
+  }
+
+private:
+  JITTargetMachineBuilder JTMB;
+  ObjectCache *ObjCache = nullptr;
+};
+
 } // end namespace orc
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
index 26fec8b..8456dff 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Core.h
@@ -14,9 +14,12 @@
 #ifndef LLVM_EXECUTIONENGINE_ORC_CORE_H
 #define LLVM_EXECUTIONENGINE_ORC_CORE_H
 
+#include "llvm/ADT/BitmaskEnum.h"
 #include "llvm/ExecutionEngine/JITSymbol.h"
 #include "llvm/ExecutionEngine/Orc/SymbolStringPool.h"
+#include "llvm/IR/Module.h"
 
+#include <list>
 #include <map>
 #include <memory>
 #include <set>
@@ -25,139 +28,173 @@
 namespace llvm {
 namespace orc {
 
+// Forward declare some classes.
+class AsynchronousSymbolQuery;
+class ExecutionSession;
+class MaterializationUnit;
+class MaterializationResponsibility;
+class VSO;
+
 /// VModuleKey provides a unique identifier (allocated and managed by
 /// ExecutionSessions) for a module added to the JIT.
 using VModuleKey = uint64_t;
 
-class VSO;
-
-/// @brief A set of symbol names (represented by SymbolStringPtrs for
+/// A set of symbol names (represented by SymbolStringPtrs for
 //         efficiency).
 using SymbolNameSet = std::set<SymbolStringPtr>;
 
-/// @brief A map from symbol names (as SymbolStringPtrs) to JITSymbols
+/// Render a SymbolNameSet to an ostream.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolNameSet &Symbols);
+
+/// A map from symbol names (as SymbolStringPtrs) to JITSymbols
 ///        (address/flags pairs).
 using SymbolMap = std::map<SymbolStringPtr, JITEvaluatedSymbol>;
 
-/// @brief A map from symbol names (as SymbolStringPtrs) to JITSymbolFlags.
+/// Render a SymbolMap to an ostream.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolMap &Symbols);
+
+/// A map from symbol names (as SymbolStringPtrs) to JITSymbolFlags.
 using SymbolFlagsMap = std::map<SymbolStringPtr, JITSymbolFlags>;
 
-/// @brief A symbol query that returns results via a callback when results are
-///        ready.
+/// Render a SymbolMap to an ostream.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolFlagsMap &Symbols);
+
+/// A base class for materialization failures that allows the failing
+///        symbols to be obtained for logging.
+using SymbolDependenceMap = std::map<VSO *, SymbolNameSet>;
+
+/// Render a SymbolDependendeMap.
+raw_ostream &operator<<(raw_ostream &OS, const SymbolDependenceMap &Deps);
+
+/// A list of VSO pointers.
+using VSOList = std::vector<VSO *>;
+
+/// Render a VSOList.
+raw_ostream &operator<<(raw_ostream &OS, const VSOList &VSOs);
+
+/// Callback to notify client that symbols have been resolved.
+using SymbolsResolvedCallback = std::function<void(Expected<SymbolMap>)>;
+
+/// Callback to notify client that symbols are ready for execution.
+using SymbolsReadyCallback = std::function<void(Error)>;
+
+/// Callback to register the dependencies for a given query.
+using RegisterDependenciesFunction =
+    std::function<void(const SymbolDependenceMap &)>;
+
+/// This can be used as the value for a RegisterDependenciesFunction if there
+/// are no dependants to register with.
+extern RegisterDependenciesFunction NoDependenciesToRegister;
+
+/// Used to notify a VSO that the given set of symbols failed to materialize.
+class FailedToMaterialize : public ErrorInfo<FailedToMaterialize> {
+public:
+  static char ID;
+
+  FailedToMaterialize(SymbolNameSet Symbols);
+  std::error_code convertToErrorCode() const override;
+  void log(raw_ostream &OS) const override;
+  const SymbolNameSet &getSymbols() const { return Symbols; }
+
+private:
+  SymbolNameSet Symbols;
+};
+
+/// Used to notify clients when symbols can not be found during a lookup.
+class SymbolsNotFound : public ErrorInfo<SymbolsNotFound> {
+public:
+  static char ID;
+
+  SymbolsNotFound(SymbolNameSet Symbols);
+  std::error_code convertToErrorCode() const override;
+  void log(raw_ostream &OS) const override;
+  const SymbolNameSet &getSymbols() const { return Symbols; }
+
+private:
+  SymbolNameSet Symbols;
+};
+
+/// Tracks responsibility for materialization, and mediates interactions between
+/// MaterializationUnits and VSOs.
 ///
-/// makes a callback when all symbols are available.
-class AsynchronousSymbolQuery {
+/// An instance of this class is passed to MaterializationUnits when their
+/// materialize method is called. It allows MaterializationUnits to resolve and
+/// finalize symbols, or abandon materialization by notifying any unmaterialized
+/// symbols of an error.
+class MaterializationResponsibility {
+  friend class MaterializationUnit;
 public:
-  /// @brief Callback to notify client that symbols have been resolved.
-  using SymbolsResolvedCallback = std::function<void(Expected<SymbolMap>)>;
+  MaterializationResponsibility(MaterializationResponsibility &&) = default;
+  MaterializationResponsibility &
+  operator=(MaterializationResponsibility &&) = default;
 
-  /// @brief Callback to notify client that symbols are ready for execution.
-  using SymbolsReadyCallback = std::function<void(Error)>;
+  /// Destruct a MaterializationResponsibility instance. In debug mode
+  ///        this asserts that all symbols being tracked have been either
+  ///        finalized or notified of an error.
+  ~MaterializationResponsibility();
 
-  /// @brief Create a query for the given symbols, notify-resolved and
-  ///        notify-ready callbacks.
-  AsynchronousSymbolQuery(const SymbolNameSet &Symbols,
-                          SymbolsResolvedCallback NotifySymbolsResolved,
-                          SymbolsReadyCallback NotifySymbolsReady);
+  /// Returns the target VSO that these symbols are being materialized
+  ///        into.
+  VSO &getTargetVSO() const { return V; }
 
-  /// @brief Notify client that the query failed.
-  ///
-  /// If the notify-resolved callback has not been made yet, then it is called
-  /// with the given error, and the notify-finalized callback is never made.
-  ///
-  /// If the notify-resolved callback has already been made then then the
-  /// notify-finalized callback is called with the given error.
-  ///
-  /// It is illegal to call setFailed after both callbacks have been made.
-  void setFailed(Error Err);
+  /// Returns the symbol flags map for this responsibility instance.
+  SymbolFlagsMap getSymbols() { return SymbolFlags; }
 
-  /// @brief Set the resolved symbol information for the given symbol name.
-  ///
-  /// If this symbol was the last one not resolved, this will trigger a call to
-  /// the notify-finalized callback passing the completed sybol map.
-  void setDefinition(SymbolStringPtr Name, JITEvaluatedSymbol Sym);
+  /// Returns the names of any symbols covered by this
+  /// MaterializationResponsibility object that have queries pending. This
+  /// information can be used to return responsibility for unrequested symbols
+  /// back to the VSO via the delegate method.
+  SymbolNameSet getRequestedSymbols();
 
-  /// @brief Notify the query that a requested symbol is ready for execution.
+  /// Resolves the given symbols. Individual calls to this method may
+  ///        resolve a subset of the symbols, but all symbols must have been
+  ///        resolved prior to calling finalize.
+  void resolve(const SymbolMap &Symbols);
+
+  /// Finalizes all symbols tracked by this instance.
+  void finalize();
+
+  /// Adds new symbols to the VSO and this responsibility instance.
+  ///        VSO entries start out in the materializing state.
   ///
-  /// This decrements the query's internal count of not-yet-ready symbols. If
-  /// this call to notifySymbolFinalized sets the counter to zero, it will call
-  /// the notify-finalized callback with Error::success as the value.
-  void notifySymbolFinalized();
+  ///   This method can be used by materialization units that want to add
+  /// additional symbols at materialization time (e.g. stubs, compile
+  /// callbacks, metadata).
+  Error defineMaterializing(const SymbolFlagsMap &SymbolFlags);
+
+  /// Notify all unfinalized symbols that an error has occurred.
+  /// This will remove all symbols covered by this MaterializationResponsibilty
+  /// from V, and send an error to any queries waiting on these symbols.
+  void failMaterialization();
+
+  /// Transfers responsibility to the given MaterializationUnit for all
+  /// symbols defined by that MaterializationUnit. This allows
+  /// materializers to break up work based on run-time information (e.g.
+  /// by introspecting which symbols have actually been looked up and
+  /// materializing only those).
+  void replace(std::unique_ptr<MaterializationUnit> MU);
+
+  /// Delegates responsibility for the given symbols to the returned
+  /// materialization responsibility. Useful for breaking up work between
+  /// threads, or different kinds of materialization processes.
+  MaterializationResponsibility delegate(const SymbolNameSet &Symbols);
+
+  void addDependencies(const SymbolStringPtr &Name,
+                       const SymbolDependenceMap &Dependencies);
+
+  /// Add dependencies that apply to all symbols covered by this instance.
+  void addDependenciesForAll(const SymbolDependenceMap &Dependencies);
 
 private:
-  SymbolMap Symbols;
-  size_t OutstandingResolutions = 0;
-  size_t OutstandingFinalizations = 0;
-  SymbolsResolvedCallback NotifySymbolsResolved;
-  SymbolsReadyCallback NotifySymbolsReady;
+  /// Create a MaterializationResponsibility for the given VSO and
+  ///        initial symbols.
+  MaterializationResponsibility(VSO &V, SymbolFlagsMap SymbolFlags);
+
+  VSO &V;
+  SymbolFlagsMap SymbolFlags;
 };
 
-/// @brief SymbolResolver is a composable interface for looking up symbol flags
-///        and addresses using the AsynchronousSymbolQuery type. It will
-///        eventually replace the LegacyJITSymbolResolver interface as the
-///        stardard ORC symbol resolver type.
-class SymbolResolver {
-public:
-  virtual ~SymbolResolver() = default;
-
-  /// @brief Returns the flags for each symbol in Symbols that can be found,
-  ///        along with the set of symbol that could not be found.
-  virtual SymbolNameSet lookupFlags(SymbolFlagsMap &Flags,
-                                    const SymbolNameSet &Symbols) = 0;
-
-  /// @brief For each symbol in Symbols that can be found, assigns that symbols
-  ///        value in Query. Returns the set of symbols that could not be found.
-  virtual SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
-                               SymbolNameSet Symbols) = 0;
-
-private:
-  virtual void anchor();
-};
-
-/// @brief Implements SymbolResolver with a pair of supplied function objects
-///        for convenience. See createSymbolResolver.
-template <typename LookupFlagsFn, typename LookupFn>
-class LambdaSymbolResolver final : public SymbolResolver {
-public:
-  template <typename LookupFlagsFnRef, typename LookupFnRef>
-  LambdaSymbolResolver(LookupFlagsFnRef &&LookupFlags, LookupFnRef &&Lookup)
-      : LookupFlags(std::forward<LookupFlagsFnRef>(LookupFlags)),
-        Lookup(std::forward<LookupFnRef>(Lookup)) {}
-
-  SymbolNameSet lookupFlags(SymbolFlagsMap &Flags,
-                            const SymbolNameSet &Symbols) final {
-    return LookupFlags(Flags, Symbols);
-  }
-
-  SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
-                       SymbolNameSet Symbols) final {
-    return Lookup(std::move(Query), std::move(Symbols));
-  }
-
-private:
-  LookupFlagsFn LookupFlags;
-  LookupFn Lookup;
-};
-
-/// @brief Creates a SymbolResolver implementation from the pair of supplied
-///        function objects.
-template <typename LookupFlagsFn, typename LookupFn>
-std::unique_ptr<LambdaSymbolResolver<
-    typename std::remove_cv<
-        typename std::remove_reference<LookupFlagsFn>::type>::type,
-    typename std::remove_cv<
-        typename std::remove_reference<LookupFn>::type>::type>>
-createSymbolResolver(LookupFlagsFn &&LookupFlags, LookupFn &&Lookup) {
-  using LambdaSymbolResolverImpl = LambdaSymbolResolver<
-      typename std::remove_cv<
-          typename std::remove_reference<LookupFlagsFn>::type>::type,
-      typename std::remove_cv<
-          typename std::remove_reference<LookupFn>::type>::type>;
-  return llvm::make_unique<LambdaSymbolResolverImpl>(
-      std::forward<LookupFlagsFn>(LookupFlags), std::forward<LookupFn>(Lookup));
-}
-
-/// @brief A MaterializationUnit represents a set of symbol definitions that can
+/// A MaterializationUnit represents a set of symbol definitions that can
 ///        be materialized as a group, or individually discarded (when
 ///        overriding definitions are encountered).
 ///
@@ -167,226 +204,585 @@
 /// definition is added or already present.
 class MaterializationUnit {
 public:
+  MaterializationUnit(SymbolFlagsMap InitalSymbolFlags)
+      : SymbolFlags(std::move(InitalSymbolFlags)) {}
+
   virtual ~MaterializationUnit() {}
 
-  /// @brief Return the set of symbols that this source provides.
-  virtual SymbolFlagsMap getSymbols() = 0;
+  /// Return the set of symbols that this source provides.
+  const SymbolFlagsMap &getSymbols() const { return SymbolFlags; }
 
-  /// @brief Implementations of this method should materialize all symbols
-  ///        in the materialzation unit, except for those that have been
-  ///        previously discarded.
-  virtual Error materialize(VSO &V) = 0;
+  /// Called by materialization dispatchers (see
+  /// ExecutionSession::DispatchMaterializationFunction) to trigger
+  /// materialization of this MaterializationUnit.
+  void doMaterialize(VSO &V) {
+    materialize(MaterializationResponsibility(V, std::move(SymbolFlags)));
+  }
 
-  /// @brief Implementations of this method should discard the given symbol
-  ///        from the source (e.g. if the source is an LLVM IR Module and the
-  ///        symbol is a function, delete the function body or mark it available
-  ///        externally).
-  virtual void discard(VSO &V, SymbolStringPtr Name) = 0;
+  /// Called by VSOs to notify MaterializationUnits that the given symbol has
+  /// been overridden.
+  void doDiscard(const VSO &V, SymbolStringPtr Name) {
+    SymbolFlags.erase(Name);
+    discard(V, std::move(Name));
+  }
+
+protected:
+  SymbolFlagsMap SymbolFlags;
 
 private:
   virtual void anchor();
+
+  /// Implementations of this method should materialize all symbols
+  ///        in the materialzation unit, except for those that have been
+  ///        previously discarded.
+  virtual void materialize(MaterializationResponsibility R) = 0;
+
+  /// Implementations of this method should discard the given symbol
+  ///        from the source (e.g. if the source is an LLVM IR Module and the
+  ///        symbol is a function, delete the function body or mark it available
+  ///        externally).
+  virtual void discard(const VSO &V, SymbolStringPtr Name) = 0;
 };
 
-/// @brief Represents a dynamic linkage unit in a JIT process.
+using MaterializationUnitList =
+    std::vector<std::unique_ptr<MaterializationUnit>>;
+
+/// A MaterializationUnit implementation for pre-existing absolute symbols.
 ///
-/// VSO acts as a symbol table (symbol definitions can be set and the dylib
-/// queried to find symbol addresses) and as a key for tracking resources
-/// (since a VSO's address is fixed).
-class VSO {
-  friend class ExecutionSession;
+/// All symbols will be resolved and marked ready as soon as the unit is
+/// materialized.
+class AbsoluteSymbolsMaterializationUnit : public MaterializationUnit {
+public:
+  AbsoluteSymbolsMaterializationUnit(SymbolMap Symbols);
+
+private:
+  void materialize(MaterializationResponsibility R) override;
+  void discard(const VSO &V, SymbolStringPtr Name) override;
+  static SymbolFlagsMap extractFlags(const SymbolMap &Symbols);
+
+  SymbolMap Symbols;
+};
+
+/// Create an AbsoluteSymbolsMaterializationUnit with the given symbols.
+/// Useful for inserting absolute symbols into a VSO. E.g.:
+/// \code{.cpp}
+///   VSO &V = ...;
+///   SymbolStringPtr Foo = ...;
+///   JITEvaluatedSymbol FooSym = ...;
+///   if (auto Err = V.define(absoluteSymbols({{Foo, FooSym}})))
+///     return Err;
+/// \endcode
+///
+inline std::unique_ptr<AbsoluteSymbolsMaterializationUnit>
+absoluteSymbols(SymbolMap Symbols) {
+  return llvm::make_unique<AbsoluteSymbolsMaterializationUnit>(
+      std::move(Symbols));
+}
+
+struct SymbolAliasMapEntry {
+  SymbolAliasMapEntry() = default;
+  SymbolAliasMapEntry(SymbolStringPtr Aliasee, JITSymbolFlags AliasFlags)
+      : Aliasee(std::move(Aliasee)), AliasFlags(AliasFlags) {}
+
+  SymbolStringPtr Aliasee;
+  JITSymbolFlags AliasFlags;
+};
+
+/// A map of Symbols to (Symbol, Flags) pairs.
+using SymbolAliasMap = std::map<SymbolStringPtr, SymbolAliasMapEntry>;
+
+/// A materialization unit for symbol aliases. Allows existing symbols to be
+/// aliased with alternate flags.
+class ReExportsMaterializationUnit : public MaterializationUnit {
+public:
+  /// SourceVSO is allowed to be nullptr, in which case the source VSO is
+  /// taken to be whatever VSO these definitions are materialized in. This
+  /// is useful for defining aliases within a VSO.
+  ///
+  /// Note: Care must be taken that no sets of aliases form a cycle, as such
+  ///       a cycle will result in a deadlock when any symbol in the cycle is
+  ///       resolved.
+  ReExportsMaterializationUnit(VSO *SourceVSO, SymbolAliasMap Aliases);
+
+private:
+  void materialize(MaterializationResponsibility R) override;
+  void discard(const VSO &V, SymbolStringPtr Name) override;
+  static SymbolFlagsMap extractFlags(const SymbolAliasMap &Aliases);
+
+  VSO *SourceVSO = nullptr;
+  SymbolAliasMap Aliases;
+};
+
+/// Create a ReExportsMaterializationUnit with the given aliases.
+/// Useful for defining symbol aliases.: E.g., given a VSO V containing symbols
+/// "foo" and "bar", we can define aliases "baz" (for "foo") and "qux" (for
+/// "bar") with:
+/// \code{.cpp}
+///   SymbolStringPtr Baz = ...;
+///   SymbolStringPtr Qux = ...;
+///   if (auto Err = V.define(symbolAliases({
+///       {Baz, { Foo, JITSymbolFlags::Exported }},
+///       {Qux, { Bar, JITSymbolFlags::Weak }}}))
+///     return Err;
+/// \endcode
+inline std::unique_ptr<ReExportsMaterializationUnit>
+symbolAliases(SymbolAliasMap Aliases) {
+  return llvm::make_unique<ReExportsMaterializationUnit>(nullptr,
+                                                         std::move(Aliases));
+}
+
+/// Create a materialization unit for re-exporting symbols from another VSO
+/// with alternative names/flags.
+inline std::unique_ptr<ReExportsMaterializationUnit>
+reexports(VSO &SourceV, SymbolAliasMap Aliases) {
+  return llvm::make_unique<ReExportsMaterializationUnit>(&SourceV,
+                                                         std::move(Aliases));
+}
+
+/// Build a SymbolAliasMap for the common case where you want to re-export
+/// symbols from another VSO with the same linkage/flags.
+Expected<SymbolAliasMap>
+buildSimpleReexportsAliasMap(VSO &SourceV, const SymbolNameSet &Symbols);
+
+class ReexportsFallbackDefinitionGenerator {
+public:
+  using SymbolPredicate = std::function<bool(SymbolStringPtr)>;
+  ReexportsFallbackDefinitionGenerator(VSO &BackingVSO, SymbolPredicate Allow);
+  SymbolNameSet operator()(VSO &V, const SymbolNameSet &Names);
+
+private:
+  VSO &BackingVSO;
+  SymbolPredicate Allow;
+};
+
+/// Base utilities for ExecutionSession.
+class ExecutionSessionBase {
+  // FIXME: Remove this when we remove the old ORC layers.
+  friend class VSO;
 
 public:
-  enum RelativeLinkageStrength {
-    NewDefinitionIsStronger,
-    DuplicateDefinition,
-    ExistingDefinitionIsStronger
-  };
+  /// For reporting errors.
+  using ErrorReporter = std::function<void(Error)>;
 
-  using SetDefinitionsResult =
-      std::map<SymbolStringPtr, RelativeLinkageStrength>;
+  /// For dispatching MaterializationUnit::materialize calls.
+  using DispatchMaterializationFunction =
+      std::function<void(VSO &V, std::unique_ptr<MaterializationUnit> MU)>;
 
-  using MaterializationUnitList =
-      std::vector<std::unique_ptr<MaterializationUnit>>;
+  /// Construct an ExecutionSessionBase.
+  ///
+  /// SymbolStringPools may be shared between ExecutionSessions.
+  ExecutionSessionBase(std::shared_ptr<SymbolStringPool> SSP = nullptr)
+      : SSP(SSP ? std::move(SSP) : std::make_shared<SymbolStringPool>()) {}
 
-  struct LookupResult {
-    MaterializationUnitList MaterializationUnits;
-    SymbolNameSet UnresolvedSymbols;
-  };
+  /// Returns the SymbolStringPool for this ExecutionSession.
+  SymbolStringPool &getSymbolStringPool() const { return *SSP; }
 
-  VSO() = default;
+  /// Run the given lambda with the session mutex locked.
+  template <typename Func> auto runSessionLocked(Func &&F) -> decltype(F()) {
+    std::lock_guard<std::recursive_mutex> Lock(SessionMutex);
+    return F();
+  }
+
+  /// Set the error reporter function.
+  ExecutionSessionBase &setErrorReporter(ErrorReporter ReportError) {
+    this->ReportError = std::move(ReportError);
+    return *this;
+  }
+
+  /// Set the materialization dispatch function.
+  ExecutionSessionBase &setDispatchMaterialization(
+      DispatchMaterializationFunction DispatchMaterialization) {
+    this->DispatchMaterialization = std::move(DispatchMaterialization);
+    return *this;
+  }
+
+  /// Report a error for this execution session.
+  ///
+  /// Unhandled errors can be sent here to log them.
+  void reportError(Error Err) { ReportError(std::move(Err)); }
+
+  /// Allocate a module key for a new module to add to the JIT.
+  VModuleKey allocateVModule() { return ++LastKey; }
+
+  /// Return a module key to the ExecutionSession so that it can be
+  ///        re-used. This should only be done once all resources associated
+  ///        with the original key have been released.
+  void releaseVModule(VModuleKey Key) { /* FIXME: Recycle keys */
+  }
+
+  void legacyFailQuery(AsynchronousSymbolQuery &Q, Error Err);
+
+  using LegacyAsyncLookupFunction = std::function<SymbolNameSet(
+      std::shared_ptr<AsynchronousSymbolQuery> Q, SymbolNameSet Names)>;
+
+  /// A legacy lookup function for JITSymbolResolverAdapter.
+  /// Do not use -- this will be removed soon.
+  Expected<SymbolMap>
+  legacyLookup(ExecutionSessionBase &ES, LegacyAsyncLookupFunction AsyncLookup,
+               SymbolNameSet Names, bool WaiUntilReady,
+               RegisterDependenciesFunction RegisterDependencies);
+
+  /// Search the given VSO list for the given symbols.
+  ///
+  ///
+  /// The OnResolve callback will be called once all requested symbols are
+  /// resolved, or if an error occurs prior to resolution.
+  ///
+  /// The OnReady callback will be called once all requested symbols are ready,
+  /// or if an error occurs after resolution but before all symbols are ready.
+  ///
+  /// If all symbols are found, the RegisterDependencies function will be called
+  /// while the session lock is held. This gives clients a chance to register
+  /// dependencies for on the queried symbols for any symbols they are
+  /// materializing (if a MaterializationResponsibility instance is present,
+  /// this can be implemented by calling
+  /// MaterializationResponsibility::addDependencies). If there are no
+  /// dependenant symbols for this query (e.g. it is being made by a top level
+  /// client to get an address to call) then the value NoDependenciesToRegister
+  /// can be used.
+  void lookup(const VSOList &VSOs, const SymbolNameSet &Symbols,
+              SymbolsResolvedCallback OnResolve, SymbolsReadyCallback OnReady,
+              RegisterDependenciesFunction RegisterDependencies);
+
+  /// Blocking version of lookup above. Returns the resolved symbol map.
+  /// If WaitUntilReady is true (the default), will not return until all
+  /// requested symbols are ready (or an error occurs). If WaitUntilReady is
+  /// false, will return as soon as all requested symbols are resolved,
+  /// or an error occurs. If WaitUntilReady is false and an error occurs
+  /// after resolution, the function will return a success value, but the
+  /// error will be reported via reportErrors.
+  Expected<SymbolMap> lookup(const VSOList &VSOs, const SymbolNameSet &Symbols,
+                             RegisterDependenciesFunction RegisterDependencies,
+                             bool WaitUntilReady = true);
+
+  /// Materialize the given unit.
+  void dispatchMaterialization(VSO &V,
+                               std::unique_ptr<MaterializationUnit> MU) {
+    DispatchMaterialization(V, std::move(MU));
+  }
+
+private:
+  static void logErrorsToStdErr(Error Err) {
+    logAllUnhandledErrors(std::move(Err), errs(), "JIT session error: ");
+  }
+
+  static void
+  materializeOnCurrentThread(VSO &V, std::unique_ptr<MaterializationUnit> MU) {
+    MU->doMaterialize(V);
+  }
+
+  void runOutstandingMUs();
+
+  mutable std::recursive_mutex SessionMutex;
+  std::shared_ptr<SymbolStringPool> SSP;
+  VModuleKey LastKey = 0;
+  ErrorReporter ReportError = logErrorsToStdErr;
+  DispatchMaterializationFunction DispatchMaterialization =
+      materializeOnCurrentThread;
+
+  // FIXME: Remove this (and runOutstandingMUs) once the linking layer works
+  //        with callbacks from asynchronous queries.
+  mutable std::recursive_mutex OutstandingMUsMutex;
+  std::vector<std::pair<VSO *, std::unique_ptr<MaterializationUnit>>>
+      OutstandingMUs;
+};
+
+/// A symbol query that returns results via a callback when results are
+///        ready.
+///
+/// makes a callback when all symbols are available.
+class AsynchronousSymbolQuery {
+  friend class ExecutionSessionBase;
+  friend class VSO;
+
+public:
+
+  /// Create a query for the given symbols, notify-resolved and
+  ///        notify-ready callbacks.
+  AsynchronousSymbolQuery(const SymbolNameSet &Symbols,
+                          SymbolsResolvedCallback NotifySymbolsResolved,
+                          SymbolsReadyCallback NotifySymbolsReady);
+
+  /// Set the resolved symbol information for the given symbol name.
+  void resolve(const SymbolStringPtr &Name, JITEvaluatedSymbol Sym);
+
+  /// Returns true if all symbols covered by this query have been
+  ///        resolved.
+  bool isFullyResolved() const { return NotYetResolvedCount == 0; }
+
+  /// Call the NotifySymbolsResolved callback.
+  ///
+  /// This should only be called if all symbols covered by the query have been
+  /// resolved.
+  void handleFullyResolved();
+
+  /// Notify the query that a requested symbol is ready for execution.
+  void notifySymbolReady();
+
+  /// Returns true if all symbols covered by this query are ready.
+  bool isFullyReady() const { return NotYetReadyCount == 0; }
+
+  /// Calls the NotifySymbolsReady callback.
+  ///
+  /// This should only be called if all symbols covered by this query are ready.
+  void handleFullyReady();
+
+private:
+  void addQueryDependence(VSO &V, SymbolStringPtr Name);
+
+  void removeQueryDependence(VSO &V, const SymbolStringPtr &Name);
+
+  bool canStillFail();
+
+  void handleFailed(Error Err);
+
+  void detach();
+
+  SymbolsResolvedCallback NotifySymbolsResolved;
+  SymbolsReadyCallback NotifySymbolsReady;
+  SymbolDependenceMap QueryRegistrations;
+  SymbolMap ResolvedSymbols;
+  size_t NotYetResolvedCount;
+  size_t NotYetReadyCount;
+};
+
+/// A symbol table that supports asynchoronous symbol queries.
+///
+/// Represents a virtual shared object. Instances can not be copied or moved, so
+/// their addresses may be used as keys for resource management.
+/// VSO state changes must be made via an ExecutionSession to guarantee that
+/// they are synchronized with respect to other VSO operations.
+class VSO {
+  friend class AsynchronousSymbolQuery;
+  friend class ExecutionSession;
+  friend class ExecutionSessionBase;
+  friend class MaterializationResponsibility;
+public:
+  using FallbackDefinitionGeneratorFunction =
+      std::function<SymbolNameSet(VSO &Parent, const SymbolNameSet &Names)>;
+
+  using AsynchronousSymbolQuerySet =
+      std::set<std::shared_ptr<AsynchronousSymbolQuery>>;
 
   VSO(const VSO &) = delete;
   VSO &operator=(const VSO &) = delete;
   VSO(VSO &&) = delete;
   VSO &operator=(VSO &&) = delete;
 
-  /// @brief Compare new linkage with existing linkage.
-  static RelativeLinkageStrength
-  compareLinkage(Optional<JITSymbolFlags> OldFlags, JITSymbolFlags NewFlags);
+  /// Get the name for this VSO.
+  const std::string &getName() const { return VSOName; }
 
-  /// @brief Compare new linkage with an existing symbol's linkage.
-  RelativeLinkageStrength compareLinkage(SymbolStringPtr Name,
-                                         JITSymbolFlags NewFlags) const;
+  /// Get a reference to the ExecutionSession for this VSO.
+  ExecutionSessionBase &getExecutionSession() const { return ES; }
 
-  /// @brief Adds the given symbols to the mapping as resolved, finalized
-  ///        symbols.
+  /// Set a fallback defenition generator. If set, lookup and lookupFlags will
+  /// pass the unresolved symbols set to the fallback definition generator,
+  /// allowing it to add a new definition to the VSO.
+  void setFallbackDefinitionGenerator(
+      FallbackDefinitionGeneratorFunction FallbackDefinitionGenerator) {
+    this->FallbackDefinitionGenerator = std::move(FallbackDefinitionGenerator);
+  }
+
+  /// Set the search order to be used when fixing up definitions in VSO.
+  /// This will replace the previous search order, and apply to any symbol
+  /// resolutions made for definitions in this VSO after the call to
+  /// setSearchOrder (even if the definition itself was added before the
+  /// call).
   ///
-  /// FIXME: We can take this by const-ref once symbol-based laziness is
-  ///        removed.
-  Error define(SymbolMap NewSymbols);
-
-  /// @brief Adds the given symbols to the mapping as lazy symbols.
-  Error defineLazy(std::unique_ptr<MaterializationUnit> Source);
-
-  /// @brief Add the given symbol/address mappings to the dylib, but do not
-  ///        mark the symbols as finalized yet.
-  void resolve(SymbolMap SymbolValues);
-
-  /// @brief Finalize the given symbols.
-  void finalize(SymbolNameSet SymbolsToFinalize);
-
-  /// @brief Look up the flags for the given symbols.
+  /// If SearchThisVSOFirst is set, which by default it is, then this VSO will
+  /// add itself to the beginning of the SearchOrder (Clients should *not*
+  /// put this VSO in the list in this case, to avoid redundant lookups).
   ///
-  /// Returns the flags for the give symbols, together with the set of symbols
-  /// not found.
-  SymbolNameSet lookupFlags(SymbolFlagsMap &Flags, SymbolNameSet Symbols);
+  /// If SearchThisVSOFirst is false then the search order will be used as
+  /// given. The main motivation for this feature is to support deliberate
+  /// shadowing of symbols in this VSO by a facade VSO. For example, the
+  /// facade may resolve function names to stubs, and the stubs may compile
+  /// lazily by looking up symbols in this dylib. Adding the facade dylib
+  /// as the first in the search order (instead of this dylib) ensures that
+  /// definitions within this dylib resolve to the lazy-compiling stubs,
+  /// rather than immediately materializing the definitions in this dylib.
+  void setSearchOrder(VSOList NewSearchOrder, bool SearchThisVSOFirst = true);
 
-  /// @brief Apply the given query to the given symbols in this VSO.
+  /// Add the given VSO to the search order for definitions in this VSO.
+  void addToSearchOrder(VSO &V);
+
+  /// Replace OldV with NewV in the search order if OldV is present. Otherwise
+  /// this operation is a no-op.
+  void replaceInSearchOrder(VSO &OldV, VSO &NewV);
+
+  /// Remove the given VSO from the search order for this VSO if it is
+  /// present. Otherwise this operation is a no-op.
+  void removeFromSearchOrder(VSO &V);
+
+  /// Do something with the search order (run under the session lock).
+  template <typename Func>
+  auto withSearchOrderDo(Func &&F)
+      -> decltype(F(std::declval<const VSOList &>())) {
+    return ES.runSessionLocked([&]() { return F(SearchOrder); });
+  }
+
+  /// Define all symbols provided by the materialization unit to be part
+  ///        of the given VSO.
+  template <typename UniquePtrToMaterializationUnit>
+  typename std::enable_if<
+      std::is_convertible<
+          typename std::decay<UniquePtrToMaterializationUnit>::type,
+          std::unique_ptr<MaterializationUnit>>::value,
+      Error>::type
+  define(UniquePtrToMaterializationUnit &&MU) {
+    return ES.runSessionLocked([&, this]() -> Error {
+      assert(MU && "Can't define with a null MU");
+
+      if (auto Err = defineImpl(*MU))
+        return Err;
+
+      /// defineImpl succeeded.
+      auto UMI = std::make_shared<UnmaterializedInfo>(std::move(MU));
+      for (auto &KV : UMI->MU->getSymbols())
+        UnmaterializedInfos[KV.first] = UMI;
+
+      return Error::success();
+    });
+  }
+
+  /// Search the given VSO for the symbols in Symbols. If found, store
+  ///        the flags for each symbol in Flags. Returns any unresolved symbols.
+  SymbolFlagsMap lookupFlags(const SymbolNameSet &Names);
+
+  /// Dump current VSO state to OS.
+  void dump(raw_ostream &OS);
+
+  /// FIXME: Remove this when we remove the old ORC layers.
+  /// Search the given VSOs in order for the symbols in Symbols. Results
+  ///        (once they become available) will be returned via the given Query.
   ///
-  /// For symbols in this VSO that have already been materialized, their address
-  /// will be set in the query immediately.
-  ///
-  /// For symbols in this VSO that have not been materialized, the query will be
-  /// recorded and the source for those symbols (plus the set of symbols to be
-  /// materialized by that source) will be returned as the MaterializationWork
-  /// field of the LookupResult.
-  ///
-  /// Any symbols not found in this VSO will be returned in the
-  /// UnresolvedSymbols field of the LookupResult.
-  LookupResult lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
-                      SymbolNameSet Symbols);
+  /// If any symbol is not found then the unresolved symbols will be returned,
+  /// and the query will not be applied. The Query is not failed and can be
+  /// re-used in a subsequent lookup once the symbols have been added, or
+  /// manually failed.
+  SymbolNameSet legacyLookup(std::shared_ptr<AsynchronousSymbolQuery> Q,
+                             SymbolNameSet Names);
 
 private:
-  class MaterializationInfo {
-  public:
-    using QueryList = std::vector<std::shared_ptr<AsynchronousSymbolQuery>>;
+  using AsynchronousSymbolQueryList =
+      std::vector<std::shared_ptr<AsynchronousSymbolQuery>>;
 
-    MaterializationInfo(size_t SymbolsRemaining,
-                        std::unique_ptr<MaterializationUnit> MU);
+  struct UnmaterializedInfo {
+    UnmaterializedInfo(std::unique_ptr<MaterializationUnit> MU)
+        : MU(std::move(MU)) {}
 
-    uint64_t SymbolsRemaining;
     std::unique_ptr<MaterializationUnit> MU;
-    SymbolMap Symbols;
-    std::map<SymbolStringPtr, QueryList> PendingResolution;
-    std::map<SymbolStringPtr, QueryList> PendingFinalization;
   };
 
-  using MaterializationInfoSet = std::set<std::unique_ptr<MaterializationInfo>>;
+  using UnmaterializedInfosMap =
+      std::map<SymbolStringPtr, std::shared_ptr<UnmaterializedInfo>>;
 
-  using MaterializationInfoIterator = MaterializationInfoSet::iterator;
-
-  class SymbolTableEntry {
-  public:
-    SymbolTableEntry(JITSymbolFlags SymbolFlags,
-                     MaterializationInfoIterator MaterializationInfoItr);
-    SymbolTableEntry(JITEvaluatedSymbol Sym);
-    SymbolTableEntry(SymbolTableEntry &&Other);
-    ~SymbolTableEntry();
-
-    SymbolTableEntry &operator=(JITEvaluatedSymbol Sym);
-
-    JITSymbolFlags getFlags() const;
-    void replaceWith(VSO &V, SymbolStringPtr Name, JITSymbolFlags Flags,
-                     MaterializationInfoIterator NewMaterializationInfoItr);
-    std::unique_ptr<MaterializationUnit>
-    query(SymbolStringPtr Name, std::shared_ptr<AsynchronousSymbolQuery> Query);
-    void resolve(VSO &V, SymbolStringPtr Name, JITEvaluatedSymbol Sym);
-    void finalize(VSO &V, SymbolStringPtr Name);
-    void discard(VSO &V, SymbolStringPtr Name);
-
-  private:
-    void destroy();
-
-    JITSymbolFlags Flags;
-    MaterializationInfoIterator MII;
-    union {
-      JITTargetAddress Address;
-      MaterializationInfoIterator MaterializationInfoItr;
-    };
+  struct MaterializingInfo {
+    AsynchronousSymbolQueryList PendingQueries;
+    SymbolDependenceMap Dependants;
+    SymbolDependenceMap UnfinalizedDependencies;
+    bool IsFinalized = false;
   };
 
-  std::map<SymbolStringPtr, SymbolTableEntry> Symbols;
-  MaterializationInfoSet MaterializationInfos;
+  using MaterializingInfosMap = std::map<SymbolStringPtr, MaterializingInfo>;
+
+  using LookupImplActionFlags = enum {
+    None = 0,
+    NotifyFullyResolved = 1 << 0U,
+    NotifyFullyReady = 1 << 1U,
+    LLVM_MARK_AS_BITMASK_ENUM(NotifyFullyReady)
+  };
+
+  VSO(ExecutionSessionBase &ES, std::string Name);
+
+  Error defineImpl(MaterializationUnit &MU);
+
+  SymbolNameSet lookupFlagsImpl(SymbolFlagsMap &Flags,
+                                const SymbolNameSet &Names);
+
+  void lodgeQuery(std::shared_ptr<AsynchronousSymbolQuery> &Q,
+                  SymbolNameSet &Unresolved, MaterializationUnitList &MUs);
+
+  void lodgeQueryImpl(std::shared_ptr<AsynchronousSymbolQuery> &Q,
+                      SymbolNameSet &Unresolved, MaterializationUnitList &MUs);
+
+  LookupImplActionFlags
+  lookupImpl(std::shared_ptr<AsynchronousSymbolQuery> &Q,
+             std::vector<std::unique_ptr<MaterializationUnit>> &MUs,
+             SymbolNameSet &Unresolved);
+
+  void detachQueryHelper(AsynchronousSymbolQuery &Q,
+                         const SymbolNameSet &QuerySymbols);
+
+  void transferFinalizedNodeDependencies(MaterializingInfo &DependantMI,
+                                         const SymbolStringPtr &DependantName,
+                                         MaterializingInfo &FinalizedMI);
+
+  Error defineMaterializing(const SymbolFlagsMap &SymbolFlags);
+
+  void replace(std::unique_ptr<MaterializationUnit> MU);
+
+  SymbolNameSet getRequestedSymbols(const SymbolFlagsMap &SymbolFlags);
+
+  void addDependencies(const SymbolStringPtr &Name,
+                       const SymbolDependenceMap &Dependants);
+
+  void resolve(const SymbolMap &Resolved);
+
+  void finalize(const SymbolFlagsMap &Finalized);
+
+  void notifyFailed(const SymbolNameSet &FailedSymbols);
+
+  ExecutionSessionBase &ES;
+  std::string VSOName;
+  SymbolMap Symbols;
+  UnmaterializedInfosMap UnmaterializedInfos;
+  MaterializingInfosMap MaterializingInfos;
+  FallbackDefinitionGeneratorFunction FallbackDefinitionGenerator;
+  VSOList SearchOrder;
 };
 
-/// @brief An ExecutionSession represents a running JIT program.
-class ExecutionSession {
+/// An ExecutionSession represents a running JIT program.
+class ExecutionSession : public ExecutionSessionBase {
 public:
   using ErrorReporter = std::function<void(Error)>;
 
-  /// @brief Construct an ExecutionEngine.
+  using DispatchMaterializationFunction =
+      std::function<void(VSO &V, std::unique_ptr<MaterializationUnit> MU)>;
+
+  /// Construct an ExecutionEngine.
   ///
   /// SymbolStringPools may be shared between ExecutionSessions.
-  ExecutionSession(SymbolStringPool &SSP);
+  ExecutionSession(std::shared_ptr<SymbolStringPool> SSP = nullptr)
+      : ExecutionSessionBase(std::move(SSP)) {}
 
-  /// @brief Returns the SymbolStringPool for this ExecutionSession.
-  SymbolStringPool &getSymbolStringPool() const { return SSP; }
-
-  /// @brief Set the error reporter function.
-  void setErrorReporter(ErrorReporter ReportError) {
-    this->ReportError = std::move(ReportError);
-  }
-
-  /// @brief Report a error for this execution session.
-  ///
-  /// Unhandled errors can be sent here to log them.
-  void reportError(Error Err) { ReportError(std::move(Err)); }
-
-  /// @brief Allocate a module key for a new module to add to the JIT.
-  VModuleKey allocateVModule();
-
-  /// @brief Return a module key to the ExecutionSession so that it can be
-  ///        re-used. This should only be done once all resources associated
-  ////       with the original key have been released.
-  void releaseVModule(VModuleKey Key);
-
-public:
-  static void logErrorsToStdErr(Error Err);
-
-  SymbolStringPool &SSP;
-  VModuleKey LastKey = 0;
-  ErrorReporter ReportError = logErrorsToStdErr;
-};
-
-/// Runs Materializers on the current thread and reports errors to the given
-/// ExecutionSession.
-class MaterializeOnCurrentThread {
-public:
-  MaterializeOnCurrentThread(ExecutionSession &ES) : ES(ES) {}
-
-  void operator()(VSO &V, std::unique_ptr<MaterializationUnit> MU) {
-    if (auto Err = MU->materialize(V))
-      ES.reportError(std::move(Err));
-  }
+  /// Add a new VSO to this ExecutionSession.
+  VSO &createVSO(std::string Name);
 
 private:
-  ExecutionSession &ES;
+  std::vector<std::unique_ptr<VSO>> VSOs;
 };
 
-/// Materialization function object wrapper for the lookup method.
-using MaterializationDispatcher =
-    std::function<void(VSO &V, std::unique_ptr<MaterializationUnit> S)>;
+/// Look up the given names in the given VSOs.
+/// VSOs will be searched in order and no VSO pointer may be null.
+/// All symbols must be found within the given VSOs or an error
+/// will be returned.
+Expected<SymbolMap> lookup(const VSOList &VSOs, SymbolNameSet Names);
 
-/// @brief Look up a set of symbols by searching a list of VSOs.
-///
-/// All VSOs in the list should be non-null.
-Expected<SymbolMap> lookup(const std::vector<VSO *> &VSOs, SymbolNameSet Names,
-                           MaterializationDispatcher DispatchMaterialization);
+/// Look up a symbol by searching a list of VSOs.
+Expected<JITEvaluatedSymbol> lookup(const VSOList &VSOs, SymbolStringPtr Name);
 
-/// @brief Look up a symbol by searching a list of VSOs.
-Expected<JITEvaluatedSymbol>
-lookup(const std::vector<VSO *> VSOs, SymbolStringPtr Name,
-       MaterializationDispatcher DispatchMaterialization);
+/// Mangles symbol names then uniques them in the context of an
+/// ExecutionSession.
+class MangleAndInterner {
+public:
+  MangleAndInterner(ExecutionSessionBase &ES, const DataLayout &DL);
+  SymbolStringPtr operator()(StringRef Name);
+
+private:
+  ExecutionSessionBase &ES;
+  const DataLayout &DL;
+};
 
 } // End namespace orc
 } // End namespace llvm
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
index d466df8..e27f6e1 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ExecutionUtils.h
@@ -20,6 +20,8 @@
 #include "llvm/ExecutionEngine/Orc/Core.h"
 #include "llvm/ExecutionEngine/Orc/OrcError.h"
 #include "llvm/ExecutionEngine/RuntimeDyld.h"
+#include "llvm/Support/DynamicLibrary.h"
+#include "llvm/Target/TargetOptions.h"
 #include <algorithm>
 #include <cstdint>
 #include <string>
@@ -32,18 +34,58 @@
 class GlobalVariable;
 class Function;
 class Module;
+class TargetMachine;
 class Value;
 
 namespace orc {
 
-/// @brief This iterator provides a convenient way to iterate over the elements
+/// A utility class for building TargetMachines for JITs.
+class JITTargetMachineBuilder {
+public:
+  JITTargetMachineBuilder(Triple TT);
+  static Expected<JITTargetMachineBuilder> detectHost();
+  Expected<std::unique_ptr<TargetMachine>> createTargetMachine();
+
+  JITTargetMachineBuilder &setArch(std::string Arch) {
+    this->Arch = std::move(Arch);
+    return *this;
+  }
+  JITTargetMachineBuilder &setCPU(std::string CPU) {
+    this->CPU = std::move(CPU);
+    return *this;
+  }
+  JITTargetMachineBuilder &setRelocationModel(Optional<Reloc::Model> RM) {
+    this->RM = std::move(RM);
+    return *this;
+  }
+  JITTargetMachineBuilder &setCodeModel(Optional<CodeModel::Model> CM) {
+    this->CM = std::move(CM);
+    return *this;
+  }
+  JITTargetMachineBuilder &
+  addFeatures(const std::vector<std::string> &FeatureVec);
+  SubtargetFeatures &getFeatures() { return Features; }
+  TargetOptions &getOptions() { return Options; }
+
+private:
+  Triple TT;
+  std::string Arch;
+  std::string CPU;
+  SubtargetFeatures Features;
+  TargetOptions Options;
+  Optional<Reloc::Model> RM;
+  Optional<CodeModel::Model> CM;
+  CodeGenOpt::Level OptLevel = CodeGenOpt::Default;
+};
+
+/// This iterator provides a convenient way to iterate over the elements
 ///        of an llvm.global_ctors/llvm.global_dtors instance.
 ///
 ///   The easiest way to get hold of instances of this class is to use the
 /// getConstructors/getDestructors functions.
 class CtorDtorIterator {
 public:
-  /// @brief Accessor for an element of the global_ctors/global_dtors array.
+  /// Accessor for an element of the global_ctors/global_dtors array.
   ///
   ///   This class provides a read-only view of the element with any casts on
   /// the function stripped away.
@@ -56,23 +98,23 @@
     Value *Data;
   };
 
-  /// @brief Construct an iterator instance. If End is true then this iterator
+  /// Construct an iterator instance. If End is true then this iterator
   ///        acts as the end of the range, otherwise it is the beginning.
   CtorDtorIterator(const GlobalVariable *GV, bool End);
 
-  /// @brief Test iterators for equality.
+  /// Test iterators for equality.
   bool operator==(const CtorDtorIterator &Other) const;
 
-  /// @brief Test iterators for inequality.
+  /// Test iterators for inequality.
   bool operator!=(const CtorDtorIterator &Other) const;
 
-  /// @brief Pre-increment iterator.
+  /// Pre-increment iterator.
   CtorDtorIterator& operator++();
 
-  /// @brief Post-increment iterator.
+  /// Post-increment iterator.
   CtorDtorIterator operator++(int);
 
-  /// @brief Dereference iterator. The resulting value provides a read-only view
+  /// Dereference iterator. The resulting value provides a read-only view
   ///        of this element of the global_ctors/global_dtors list.
   Element operator*() const;
 
@@ -81,25 +123,25 @@
   unsigned I;
 };
 
-/// @brief Create an iterator range over the entries of the llvm.global_ctors
+/// Create an iterator range over the entries of the llvm.global_ctors
 ///        array.
 iterator_range<CtorDtorIterator> getConstructors(const Module &M);
 
-/// @brief Create an iterator range over the entries of the llvm.global_ctors
+/// Create an iterator range over the entries of the llvm.global_ctors
 ///        array.
 iterator_range<CtorDtorIterator> getDestructors(const Module &M);
 
-/// @brief Convenience class for recording constructor/destructor names for
+/// Convenience class for recording constructor/destructor names for
 ///        later execution.
 template <typename JITLayerT>
 class CtorDtorRunner {
 public:
-  /// @brief Construct a CtorDtorRunner for the given range using the given
+  /// Construct a CtorDtorRunner for the given range using the given
   ///        name mangling function.
   CtorDtorRunner(std::vector<std::string> CtorDtorNames, VModuleKey K)
       : CtorDtorNames(std::move(CtorDtorNames)), K(K) {}
 
-  /// @brief Run the recorded constructors/destructors through the given JIT
+  /// Run the recorded constructors/destructors through the given JIT
   ///        layer.
   Error runViaLayer(JITLayerT &JITLayer) const {
     using CtorDtorTy = void (*)();
@@ -127,7 +169,21 @@
   orc::VModuleKey K;
 };
 
-/// @brief Support class for static dtor execution. For hosted (in-process) JITs
+class CtorDtorRunner2 {
+public:
+  CtorDtorRunner2(VSO &V) : V(V) {}
+  void add(iterator_range<CtorDtorIterator> CtorDtors);
+  Error run();
+
+private:
+  using CtorDtorList = std::vector<SymbolStringPtr>;
+  using CtorDtorPriorityMap = std::map<unsigned, CtorDtorList>;
+
+  VSO &V;
+  CtorDtorPriorityMap CtorDtorsByPriority;
+};
+
+/// Support class for static dtor execution. For hosted (in-process) JITs
 ///        only!
 ///
 ///   If a __cxa_atexit function isn't found C++ programs that use static
@@ -142,7 +198,26 @@
 /// the client determines that destructors should be run (generally at JIT
 /// teardown or after a return from main), the runDestructors method should be
 /// called.
-class LocalCXXRuntimeOverrides {
+class LocalCXXRuntimeOverridesBase {
+public:
+  /// Run any destructors recorded by the overriden __cxa_atexit function
+  /// (CXAAtExitOverride).
+  void runDestructors();
+
+protected:
+  template <typename PtrTy> JITTargetAddress toTargetAddress(PtrTy *P) {
+    return static_cast<JITTargetAddress>(reinterpret_cast<uintptr_t>(P));
+  }
+
+  using DestructorPtr = void (*)(void *);
+  using CXXDestructorDataPair = std::pair<DestructorPtr, void *>;
+  using CXXDestructorDataPairList = std::vector<CXXDestructorDataPair>;
+  CXXDestructorDataPairList DSOHandleOverride;
+  static int CXAAtExitOverride(DestructorPtr Destructor, void *Arg,
+                               void *DSOHandle);
+};
+
+class LocalCXXRuntimeOverrides : public LocalCXXRuntimeOverridesBase {
 public:
   /// Create a runtime-overrides class.
   template <typename MangleFtorT>
@@ -159,32 +234,38 @@
     return nullptr;
   }
 
-  /// Run any destructors recorded by the overriden __cxa_atexit function
-  /// (CXAAtExitOverride).
-  void runDestructors();
-
 private:
-  template <typename PtrTy>
-  JITTargetAddress toTargetAddress(PtrTy* P) {
-    return static_cast<JITTargetAddress>(reinterpret_cast<uintptr_t>(P));
-  }
-
   void addOverride(const std::string &Name, JITTargetAddress Addr) {
     CXXRuntimeOverrides.insert(std::make_pair(Name, Addr));
   }
 
   StringMap<JITTargetAddress> CXXRuntimeOverrides;
+};
 
-  using DestructorPtr = void (*)(void *);
-  using CXXDestructorDataPair = std::pair<DestructorPtr, void *>;
-  using CXXDestructorDataPairList = std::vector<CXXDestructorDataPair>;
-  CXXDestructorDataPairList DSOHandleOverride;
-  static int CXAAtExitOverride(DestructorPtr Destructor, void *Arg,
-                               void *DSOHandle);
+class LocalCXXRuntimeOverrides2 : public LocalCXXRuntimeOverridesBase {
+public:
+  Error enable(VSO &V, MangleAndInterner &Mangler);
+};
+
+/// A utility class to expose symbols found via dlsym to the JIT.
+///
+/// If an instance of this class is attached to a VSO as a fallback definition
+/// generator, then any symbol found in the given DynamicLibrary that passes
+/// the 'Allow' predicate will be added to the VSO.
+class DynamicLibraryFallbackGenerator {
+public:
+  using SymbolPredicate = std::function<bool(SymbolStringPtr)>;
+  DynamicLibraryFallbackGenerator(sys::DynamicLibrary Dylib,
+                                  const DataLayout &DL, SymbolPredicate Allow);
+  SymbolNameSet operator()(VSO &V, const SymbolNameSet &Names);
+
+private:
+  sys::DynamicLibrary Dylib;
+  SymbolPredicate Allow;
+  char GlobalPrefix;
 };
 
 } // end namespace orc
-
 } // end namespace llvm
 
 #endif // LLVM_EXECUTIONENGINE_ORC_EXECUTIONUTILS_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h
index 8a48c36..a8a88d7 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/GlobalMappingLayer.h
@@ -27,7 +27,7 @@
 
 namespace orc {
 
-/// @brief Global mapping layer.
+/// Global mapping layer.
 ///
 ///   This layer overrides the findSymbol method to first search a local symbol
 /// table that the client can define. It can be used to inject new symbol
@@ -38,13 +38,13 @@
 class GlobalMappingLayer {
 public:
 
-  /// @brief Handle to an added module.
+  /// Handle to an added module.
   using ModuleHandleT = typename BaseLayerT::ModuleHandleT;
 
-  /// @brief Construct an GlobalMappingLayer with the given BaseLayer
+  /// Construct an GlobalMappingLayer with the given BaseLayer
   GlobalMappingLayer(BaseLayerT &BaseLayer) : BaseLayer(BaseLayer) {}
 
-  /// @brief Add the given module to the JIT.
+  /// Add the given module to the JIT.
   /// @return A handle for the added modules.
   Expected<ModuleHandleT>
   addModule(std::shared_ptr<Module> M,
@@ -52,20 +52,20 @@
     return BaseLayer.addModule(std::move(M), std::move(Resolver));
   }
 
-  /// @brief Remove the module set associated with the handle H.
+  /// Remove the module set associated with the handle H.
   Error removeModule(ModuleHandleT H) { return BaseLayer.removeModule(H); }
 
-  /// @brief Manually set the address to return for the given symbol.
+  /// Manually set the address to return for the given symbol.
   void setGlobalMapping(const std::string &Name, JITTargetAddress Addr) {
     SymbolTable[Name] = Addr;
   }
 
-  /// @brief Remove the given symbol from the global mapping.
+  /// Remove the given symbol from the global mapping.
   void eraseGlobalMapping(const std::string &Name) {
     SymbolTable.erase(Name);
   }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   ///
   ///          This method will first search the local symbol table, returning
   ///        any symbol found there. If the symbol is not found in the local
@@ -81,7 +81,7 @@
     return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Get the address of the given symbol in the context of the of the
+  /// Get the address of the given symbol in the context of the of the
   ///        module represented by the handle H. This call is forwarded to the
   ///        base layer's implementation.
   /// @param H The handle for the module to search in.
@@ -94,7 +94,7 @@
     return BaseLayer.findSymbolIn(H, Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Immediately emit and finalize the module set represented by the
+  /// Immediately emit and finalize the module set represented by the
   ///        given handle.
   /// @param H Handle for module set to emit/finalize.
   Error emitAndFinalize(ModuleHandleT H) {
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
index a7f9416..ad64815 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRCompileLayer.h
@@ -16,8 +16,9 @@
 
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
 #include "llvm/Support/Error.h"
+#include "llvm/Support/MemoryBuffer.h"
 #include <memory>
 #include <string>
 
@@ -27,7 +28,30 @@
 
 namespace orc {
 
-/// @brief Eager IR compiling layer.
+class IRCompileLayer2 : public IRLayer {
+public:
+  using CompileFunction =
+      std::function<Expected<std::unique_ptr<MemoryBuffer>>(Module &)>;
+
+  using NotifyCompiledFunction =
+      std::function<void(VModuleKey K, std::unique_ptr<Module>)>;
+
+  IRCompileLayer2(ExecutionSession &ES, ObjectLayer &BaseLayer,
+                  CompileFunction Compile);
+
+  void setNotifyCompiled(NotifyCompiledFunction NotifyCompiled);
+
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<Module> M) override;
+
+private:
+  mutable std::mutex IRLayerMutex;
+  ObjectLayer &BaseLayer;
+  CompileFunction Compile;
+  NotifyCompiledFunction NotifyCompiled = NotifyCompiledFunction();
+};
+
+/// Eager IR compiling layer.
 ///
 ///   This layer immediately compiles each IR module added via addModule to an
 /// object file and adds this module file to the layer below, which must
@@ -35,11 +59,11 @@
 template <typename BaseLayerT, typename CompileFtor>
 class IRCompileLayer {
 public:
-  /// @brief Callback type for notifications when modules are compiled.
+  /// Callback type for notifications when modules are compiled.
   using NotifyCompiledCallback =
       std::function<void(VModuleKey K, std::unique_ptr<Module>)>;
 
-  /// @brief Construct an IRCompileLayer with the given BaseLayer, which must
+  /// Construct an IRCompileLayer with the given BaseLayer, which must
   ///        implement the ObjectLayer concept.
   IRCompileLayer(
       BaseLayerT &BaseLayer, CompileFtor Compile,
@@ -47,15 +71,15 @@
       : BaseLayer(BaseLayer), Compile(std::move(Compile)),
         NotifyCompiled(std::move(NotifyCompiled)) {}
 
-  /// @brief Get a reference to the compiler functor.
+  /// Get a reference to the compiler functor.
   CompileFtor& getCompiler() { return Compile; }
 
-  /// @brief (Re)set the NotifyCompiled callback.
+  /// (Re)set the NotifyCompiled callback.
   void setNotifyCompiled(NotifyCompiledCallback NotifyCompiled) {
     this->NotifyCompiled = std::move(NotifyCompiled);
   }
 
-  /// @brief Compile the module, and add the resulting object to the base layer
+  /// Compile the module, and add the resulting object to the base layer
   ///        along with the given memory manager and symbol resolver.
   Error addModule(VModuleKey K, std::unique_ptr<Module> M) {
     if (auto Err = BaseLayer.addObject(std::move(K), Compile(*M)))
@@ -65,10 +89,10 @@
     return Error::success();
   }
 
-  /// @brief Remove the module associated with the VModuleKey K.
+  /// Remove the module associated with the VModuleKey K.
   Error removeModule(VModuleKey K) { return BaseLayer.removeObject(K); }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -76,7 +100,7 @@
     return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Get the address of the given symbol in compiled module represented
+  /// Get the address of the given symbol in compiled module represented
   ///        by the handle H. This call is forwarded to the base layer's
   ///        implementation.
   /// @param K The VModuleKey for the module to search in.
@@ -89,7 +113,7 @@
     return BaseLayer.findSymbolIn(K, Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Immediately emit and finalize the module represented by the given
+  /// Immediately emit and finalize the module represented by the given
   ///        handle.
   /// @param K The VModuleKey for the module to emit/finalize.
   Error emitAndFinalize(VModuleKey K) { return BaseLayer.emitAndFinalize(K); }
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
index 4f1fe7b..266a0f4 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IRTransformLayer.h
@@ -15,7 +15,7 @@
 #define LLVM_EXECUTIONENGINE_ORC_IRTRANSFORMLAYER_H
 
 #include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
 #include <memory>
 #include <string>
 
@@ -23,7 +23,32 @@
 class Module;
 namespace orc {
 
-/// @brief IR mutating layer.
+class IRTransformLayer2 : public IRLayer {
+public:
+
+  using TransformFunction =
+    std::function<Expected<std::unique_ptr<Module>>(std::unique_ptr<Module>)>;
+
+  IRTransformLayer2(ExecutionSession &ES, IRLayer &BaseLayer,
+                    TransformFunction Transform = identityTransform);
+
+  void setTransform(TransformFunction Transform) {
+    this->Transform = std::move(Transform);
+  }
+
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<Module> M) override;
+
+  static std::unique_ptr<Module> identityTransform(std::unique_ptr<Module> M) {
+    return M;
+  }
+
+private:
+  IRLayer &BaseLayer;
+  TransformFunction Transform;
+};
+
+/// IR mutating layer.
 ///
 ///   This layer applies a user supplied transform to each module that is added,
 /// then adds the transformed module to the layer below.
@@ -31,12 +56,12 @@
 class IRTransformLayer {
 public:
 
-  /// @brief Construct an IRTransformLayer with the given BaseLayer
+  /// Construct an IRTransformLayer with the given BaseLayer
   IRTransformLayer(BaseLayerT &BaseLayer,
                    TransformFtor Transform = TransformFtor())
     : BaseLayer(BaseLayer), Transform(std::move(Transform)) {}
 
-  /// @brief Apply the transform functor to the module, then add the module to
+  /// Apply the transform functor to the module, then add the module to
   ///        the layer below, along with the memory manager and symbol resolver.
   ///
   /// @return A handle for the added modules.
@@ -44,10 +69,10 @@
     return BaseLayer.addModule(std::move(K), Transform(std::move(M)));
   }
 
-  /// @brief Remove the module associated with the VModuleKey K.
+  /// Remove the module associated with the VModuleKey K.
   Error removeModule(VModuleKey K) { return BaseLayer.removeModule(K); }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -55,7 +80,7 @@
     return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Get the address of the given symbol in the context of the module
+  /// Get the address of the given symbol in the context of the module
   ///        represented by the VModuleKey K. This call is forwarded to the base
   ///        layer's implementation.
   /// @param K The VModuleKey for the module to search in.
@@ -68,15 +93,15 @@
     return BaseLayer.findSymbolIn(K, Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Immediately emit and finalize the module represented by the given
+  /// Immediately emit and finalize the module represented by the given
   ///        VModuleKey.
   /// @param K The VModuleKey for the module to emit/finalize.
   Error emitAndFinalize(VModuleKey K) { return BaseLayer.emitAndFinalize(K); }
 
-  /// @brief Access the transform functor directly.
+  /// Access the transform functor directly.
   TransformFtor& getTransform() { return Transform; }
 
-  /// @brief Access the mumate functor directly.
+  /// Access the mumate functor directly.
   const TransformFtor& getTransform() const { return Transform; }
 
 private:
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
index 029b86a..8b0b3fd 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/IndirectionUtils.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/ExecutionEngine/JITSymbol.h"
+#include "llvm/ExecutionEngine/Orc/Core.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/Memory.h"
 #include "llvm/Support/Process.h"
@@ -46,98 +47,29 @@
 
 namespace orc {
 
-/// @brief Target-independent base class for compile callback management.
+/// Target-independent base class for compile callback management.
 class JITCompileCallbackManager {
 public:
-  using CompileFtor = std::function<JITTargetAddress()>;
+  using CompileFunction = std::function<JITTargetAddress()>;
 
-  /// @brief Handle to a newly created compile callback. Can be used to get an
-  ///        IR constant representing the address of the trampoline, and to set
-  ///        the compile action for the callback.
-  class CompileCallbackInfo {
-  public:
-    CompileCallbackInfo(JITTargetAddress Addr, CompileFtor &Compile)
-        : Addr(Addr), Compile(Compile) {}
-
-    JITTargetAddress getAddress() const { return Addr; }
-    void setCompileAction(CompileFtor Compile) {
-      this->Compile = std::move(Compile);
-    }
-
-  private:
-    JITTargetAddress Addr;
-    CompileFtor &Compile;
-  };
-
-  /// @brief Construct a JITCompileCallbackManager.
+  /// Construct a JITCompileCallbackManager.
   /// @param ErrorHandlerAddress The address of an error handler in the target
   ///                            process to be used if a compile callback fails.
-  JITCompileCallbackManager(JITTargetAddress ErrorHandlerAddress)
-      : ErrorHandlerAddress(ErrorHandlerAddress) {}
+  JITCompileCallbackManager(ExecutionSession &ES,
+                            JITTargetAddress ErrorHandlerAddress)
+      : ES(ES), CallbacksVSO(ES.createVSO("<Callbacks>")),
+        ErrorHandlerAddress(ErrorHandlerAddress) {}
 
   virtual ~JITCompileCallbackManager() = default;
 
-  /// @brief Execute the callback for the given trampoline id. Called by the JIT
+  /// Reserve a compile callback.
+  Expected<JITTargetAddress> getCompileCallback(CompileFunction Compile);
+
+  /// Execute the callback for the given trampoline id. Called by the JIT
   ///        to compile functions on demand.
-  JITTargetAddress executeCompileCallback(JITTargetAddress TrampolineAddr) {
-    auto I = ActiveTrampolines.find(TrampolineAddr);
-    // FIXME: Also raise an error in the Orc error-handler when we finally have
-    //        one.
-    if (I == ActiveTrampolines.end())
-      return ErrorHandlerAddress;
-
-    // Found a callback handler. Yank this trampoline out of the active list and
-    // put it back in the available trampolines list, then try to run the
-    // handler's compile and update actions.
-    // Moving the trampoline ID back to the available list first means there's
-    // at
-    // least one available trampoline if the compile action triggers a request
-    // for
-    // a new one.
-    auto Compile = std::move(I->second);
-    ActiveTrampolines.erase(I);
-    AvailableTrampolines.push_back(TrampolineAddr);
-
-    if (auto Addr = Compile())
-      return Addr;
-
-    return ErrorHandlerAddress;
-  }
-
-  /// @brief Reserve a compile callback.
-  Expected<CompileCallbackInfo> getCompileCallback() {
-    if (auto TrampolineAddrOrErr = getAvailableTrampolineAddr()) {
-      const auto &TrampolineAddr = *TrampolineAddrOrErr;
-      auto &Compile = this->ActiveTrampolines[TrampolineAddr];
-      return CompileCallbackInfo(TrampolineAddr, Compile);
-    } else
-      return TrampolineAddrOrErr.takeError();
-  }
-
-  /// @brief Get a CompileCallbackInfo for an existing callback.
-  CompileCallbackInfo getCompileCallbackInfo(JITTargetAddress TrampolineAddr) {
-    auto I = ActiveTrampolines.find(TrampolineAddr);
-    assert(I != ActiveTrampolines.end() && "Not an active trampoline.");
-    return CompileCallbackInfo(I->first, I->second);
-  }
-
-  /// @brief Release a compile callback.
-  ///
-  ///   Note: Callbacks are auto-released after they execute. This method should
-  /// only be called to manually release a callback that is not going to
-  /// execute.
-  void releaseCompileCallback(JITTargetAddress TrampolineAddr) {
-    auto I = ActiveTrampolines.find(TrampolineAddr);
-    assert(I != ActiveTrampolines.end() && "Not an active trampoline.");
-    ActiveTrampolines.erase(I);
-    AvailableTrampolines.push_back(TrampolineAddr);
-  }
+  JITTargetAddress executeCompileCallback(JITTargetAddress TrampolineAddr);
 
 protected:
-  JITTargetAddress ErrorHandlerAddress;
-
-  using TrampolineMapT = std::map<JITTargetAddress, CompileFtor>;
-  TrampolineMapT ActiveTrampolines;
   std::vector<JITTargetAddress> AvailableTrampolines;
 
 private:
@@ -156,17 +88,25 @@
   virtual Error grow() = 0;
 
   virtual void anchor();
+
+  std::mutex CCMgrMutex;
+  ExecutionSession &ES;
+  VSO &CallbacksVSO;
+  JITTargetAddress ErrorHandlerAddress;
+  std::map<JITTargetAddress, SymbolStringPtr> AddrToSymbol;
+  size_t NextCallbackId = 0;
 };
 
-/// @brief Manage compile callbacks for in-process JITs.
+/// Manage compile callbacks for in-process JITs.
 template <typename TargetT>
 class LocalJITCompileCallbackManager : public JITCompileCallbackManager {
 public:
-  /// @brief Construct a InProcessJITCompileCallbackManager.
+  /// Construct a InProcessJITCompileCallbackManager.
   /// @param ErrorHandlerAddress The address of an error handler in the target
   ///                            process to be used if a compile callback fails.
-  LocalJITCompileCallbackManager(JITTargetAddress ErrorHandlerAddress)
-      : JITCompileCallbackManager(ErrorHandlerAddress) {
+  LocalJITCompileCallbackManager(ExecutionSession &ES,
+                                 JITTargetAddress ErrorHandlerAddress)
+      : JITCompileCallbackManager(ES, ErrorHandlerAddress) {
     /// Set up the resolver block.
     std::error_code EC;
     ResolverBlock = sys::OwningMemoryBlock(sys::Memory::allocateMappedMemory(
@@ -229,38 +169,38 @@
   std::vector<sys::OwningMemoryBlock> TrampolineBlocks;
 };
 
-/// @brief Base class for managing collections of named indirect stubs.
+/// Base class for managing collections of named indirect stubs.
 class IndirectStubsManager {
 public:
-  /// @brief Map type for initializing the manager. See init.
+  /// Map type for initializing the manager. See init.
   using StubInitsMap = StringMap<std::pair<JITTargetAddress, JITSymbolFlags>>;
 
   virtual ~IndirectStubsManager() = default;
 
-  /// @brief Create a single stub with the given name, target address and flags.
+  /// Create a single stub with the given name, target address and flags.
   virtual Error createStub(StringRef StubName, JITTargetAddress StubAddr,
                            JITSymbolFlags StubFlags) = 0;
 
-  /// @brief Create StubInits.size() stubs with the given names, target
+  /// Create StubInits.size() stubs with the given names, target
   ///        addresses, and flags.
   virtual Error createStubs(const StubInitsMap &StubInits) = 0;
 
-  /// @brief Find the stub with the given name. If ExportedStubsOnly is true,
+  /// Find the stub with the given name. If ExportedStubsOnly is true,
   ///        this will only return a result if the stub's flags indicate that it
   ///        is exported.
-  virtual JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) = 0;
+  virtual JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) = 0;
 
-  /// @brief Find the implementation-pointer for the stub.
-  virtual JITSymbol findPointer(StringRef Name) = 0;
+  /// Find the implementation-pointer for the stub.
+  virtual JITEvaluatedSymbol findPointer(StringRef Name) = 0;
 
-  /// @brief Change the value of the implementation pointer for the stub.
+  /// Change the value of the implementation pointer for the stub.
   virtual Error updatePointer(StringRef Name, JITTargetAddress NewAddr) = 0;
 
 private:
   virtual void anchor();
 };
 
-/// @brief IndirectStubsManager implementation for the host architecture, e.g.
+/// IndirectStubsManager implementation for the host architecture, e.g.
 ///        OrcX86_64. (See OrcArchitectureSupport.h).
 template <typename TargetT>
 class LocalIndirectStubsManager : public IndirectStubsManager {
@@ -286,7 +226,7 @@
     return Error::success();
   }
 
-  JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
+  JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
     auto I = StubIndexes.find(Name);
     if (I == StubIndexes.end())
       return nullptr;
@@ -295,13 +235,13 @@
     assert(StubAddr && "Missing stub address");
     auto StubTargetAddr =
         static_cast<JITTargetAddress>(reinterpret_cast<uintptr_t>(StubAddr));
-    auto StubSymbol = JITSymbol(StubTargetAddr, I->second.second);
+    auto StubSymbol = JITEvaluatedSymbol(StubTargetAddr, I->second.second);
     if (ExportedStubsOnly && !StubSymbol.getFlags().isExported())
       return nullptr;
     return StubSymbol;
   }
 
-  JITSymbol findPointer(StringRef Name) override {
+  JITEvaluatedSymbol findPointer(StringRef Name) override {
     auto I = StubIndexes.find(Name);
     if (I == StubIndexes.end())
       return nullptr;
@@ -310,7 +250,7 @@
     assert(PtrAddr && "Missing pointer address");
     auto PtrTargetAddr =
         static_cast<JITTargetAddress>(reinterpret_cast<uintptr_t>(PtrAddr));
-    return JITSymbol(PtrTargetAddr, I->second.second);
+    return JITEvaluatedSymbol(PtrTargetAddr, I->second.second);
   }
 
   Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
@@ -354,45 +294,45 @@
   StringMap<std::pair<StubKey, JITSymbolFlags>> StubIndexes;
 };
 
-/// @brief Create a local compile callback manager.
+/// Create a local compile callback manager.
 ///
 /// The given target triple will determine the ABI, and the given
 /// ErrorHandlerAddress will be used by the resulting compile callback
 /// manager if a compile callback fails.
 std::unique_ptr<JITCompileCallbackManager>
-createLocalCompileCallbackManager(const Triple &T,
+createLocalCompileCallbackManager(const Triple &T, ExecutionSession &ES,
                                   JITTargetAddress ErrorHandlerAddress);
 
-/// @brief Create a local indriect stubs manager builder.
+/// Create a local indriect stubs manager builder.
 ///
 /// The given target triple will determine the ABI.
 std::function<std::unique_ptr<IndirectStubsManager>()>
 createLocalIndirectStubsManagerBuilder(const Triple &T);
 
-/// @brief Build a function pointer of FunctionType with the given constant
+/// Build a function pointer of FunctionType with the given constant
 ///        address.
 ///
 ///   Usage example: Turn a trampoline address into a function pointer constant
 /// for use in a stub.
 Constant *createIRTypedAddress(FunctionType &FT, JITTargetAddress Addr);
 
-/// @brief Create a function pointer with the given type, name, and initializer
+/// Create a function pointer with the given type, name, and initializer
 ///        in the given Module.
 GlobalVariable *createImplPointer(PointerType &PT, Module &M, const Twine &Name,
                                   Constant *Initializer);
 
-/// @brief Turn a function declaration into a stub function that makes an
+/// Turn a function declaration into a stub function that makes an
 ///        indirect call using the given function pointer.
 void makeStub(Function &F, Value &ImplPointer);
 
-/// @brief Raise linkage types and rename as necessary to ensure that all
+/// Raise linkage types and rename as necessary to ensure that all
 ///        symbols are accessible for other modules.
 ///
 ///   This should be called before partitioning a module to ensure that the
 /// partitions retain access to each other's symbols.
 void makeAllSymbolsExternallyAccessible(Module &M);
 
-/// @brief Clone a function declaration into a new module.
+/// Clone a function declaration into a new module.
 ///
 ///   This function can be used as the first step towards creating a callback
 /// stub (see makeStub), or moving a function body (see moveFunctionBody).
@@ -407,7 +347,7 @@
 Function *cloneFunctionDecl(Module &Dst, const Function &F,
                             ValueToValueMapTy *VMap = nullptr);
 
-/// @brief Move the body of function 'F' to a cloned function declaration in a
+/// Move the body of function 'F' to a cloned function declaration in a
 ///        different module (See related cloneFunctionDecl).
 ///
 ///   If the target function declaration is not supplied via the NewF parameter
@@ -419,11 +359,11 @@
                       ValueMaterializer *Materializer = nullptr,
                       Function *NewF = nullptr);
 
-/// @brief Clone a global variable declaration into a new module.
+/// Clone a global variable declaration into a new module.
 GlobalVariable *cloneGlobalVariableDecl(Module &Dst, const GlobalVariable &GV,
                                         ValueToValueMapTy *VMap = nullptr);
 
-/// @brief Move global variable GV from its parent module to cloned global
+/// Move global variable GV from its parent module to cloned global
 ///        declaration in a different module.
 ///
 ///   If the target global declaration is not supplied via the NewGV parameter
@@ -436,11 +376,11 @@
                                    ValueMaterializer *Materializer = nullptr,
                                    GlobalVariable *NewGV = nullptr);
 
-/// @brief Clone a global alias declaration into a new module.
+/// Clone a global alias declaration into a new module.
 GlobalAlias *cloneGlobalAliasDecl(Module &Dst, const GlobalAlias &OrigA,
                                   ValueToValueMapTy &VMap);
 
-/// @brief Clone module flags metadata into the destination module.
+/// Clone module flags metadata into the destination module.
 void cloneModuleFlagsMetadata(Module &Dst, const Module &Src,
                               ValueToValueMapTy &VMap);
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h
new file mode 100644
index 0000000..df655bd
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LLJIT.h
@@ -0,0 +1,143 @@
+//===----- LLJIT.h -- An ORC-based JIT for compiling LLVM IR ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for 3Bdetails.
+//
+//===----------------------------------------------------------------------===//
+//
+// An ORC-based JIT for compiling LLVM IR.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_ORC_LLJIT_H
+#define LLVM_EXECUTIONENGINE_ORC_LLJIT_H
+
+#include "llvm/ExecutionEngine/Orc/CompileOnDemandLayer.h"
+#include "llvm/ExecutionEngine/Orc/CompileUtils.h"
+#include "llvm/ExecutionEngine/Orc/ExecutionUtils.h"
+#include "llvm/ExecutionEngine/Orc/IRCompileLayer.h"
+#include "llvm/ExecutionEngine/Orc/IRTransformLayer.h"
+#include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h"
+#include "llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h"
+#include "llvm/Target/TargetMachine.h"
+
+namespace llvm {
+namespace orc {
+
+/// A pre-fabricated ORC JIT stack that can serve as an alternative to MCJIT.
+class LLJIT {
+public:
+  /// Create an LLJIT instance.
+  static Expected<std::unique_ptr<LLJIT>>
+  Create(std::unique_ptr<ExecutionSession> ES,
+         std::unique_ptr<TargetMachine> TM, DataLayout DL);
+
+  /// Returns a reference to the ExecutionSession for this JIT instance.
+  ExecutionSession &getExecutionSession() { return *ES; }
+
+  /// Returns a reference to the VSO representing the JIT'd main program.
+  VSO &getMainVSO() { return Main; }
+
+  /// Convenience method for defining an absolute symbol.
+  Error defineAbsolute(StringRef Name, JITEvaluatedSymbol Address);
+
+  /// Adds an IR module to the given VSO.
+  Error addIRModule(VSO &V, std::unique_ptr<Module> M);
+
+  /// Adds an IR module to the Main VSO.
+  Error addIRModule(std::unique_ptr<Module> M) {
+    return addIRModule(Main, std::move(M));
+  }
+
+  /// Look up a symbol in VSO V by the symbol's linker-mangled name (to look up
+  /// symbols based on their IR name use the lookup function instead).
+  Expected<JITEvaluatedSymbol> lookupLinkerMangled(VSO &V, StringRef Name);
+
+  /// Look up a symbol in the main VSO by the symbol's linker-mangled name (to
+  /// look up symbols based on their IR name use the lookup function instead).
+  Expected<JITEvaluatedSymbol> lookupLinkerMangled(StringRef Name) {
+    return lookupLinkerMangled(Main, Name);
+  }
+
+  /// Look up a symbol in VSO V based on its IR symbol name.
+  Expected<JITEvaluatedSymbol> lookup(VSO &V, StringRef UnmangledName) {
+    return lookupLinkerMangled(V, mangle(UnmangledName));
+  }
+
+  /// Look up a symbol in the main VSO based on its IR symbol name.
+  Expected<JITEvaluatedSymbol> lookup(StringRef UnmangledName) {
+    return lookup(Main, UnmangledName);
+  }
+
+  /// Runs all not-yet-run static constructors.
+  Error runConstructors() { return CtorRunner.run(); }
+
+  /// Runs all not-yet-run static destructors.
+  Error runDestructors() { return DtorRunner.run(); }
+
+protected:
+  LLJIT(std::unique_ptr<ExecutionSession> ES, std::unique_ptr<TargetMachine> TM,
+        DataLayout DL);
+
+  std::shared_ptr<RuntimeDyld::MemoryManager> getMemoryManager(VModuleKey K);
+
+  std::string mangle(StringRef UnmangledName);
+
+  Error applyDataLayout(Module &M);
+
+  void recordCtorDtors(Module &M);
+
+  std::unique_ptr<ExecutionSession> ES;
+  VSO &Main;
+
+  std::unique_ptr<TargetMachine> TM;
+  DataLayout DL;
+
+  RTDyldObjectLinkingLayer2 ObjLinkingLayer;
+  IRCompileLayer2 CompileLayer;
+
+  CtorDtorRunner2 CtorRunner, DtorRunner;
+};
+
+/// An extended version of LLJIT that supports lazy function-at-a-time
+/// compilation of LLVM IR.
+class LLLazyJIT : public LLJIT {
+public:
+  /// Create an LLLazyJIT instance.
+  static Expected<std::unique_ptr<LLLazyJIT>>
+  Create(std::unique_ptr<ExecutionSession> ES,
+         std::unique_ptr<TargetMachine> TM, DataLayout DL, LLVMContext &Ctx);
+
+  /// Set an IR transform (e.g. pass manager pipeline) to run on each function
+  /// when it is compiled.
+  void setLazyCompileTransform(IRTransformLayer2::TransformFunction Transform) {
+    TransformLayer.setTransform(std::move(Transform));
+  }
+
+  /// Add a module to be lazily compiled to VSO V.
+  Error addLazyIRModule(VSO &V, std::unique_ptr<Module> M);
+
+  /// Add a module to be lazily compiled to the main VSO.
+  Error addLazyIRModule(std::unique_ptr<Module> M) {
+    return addLazyIRModule(Main, std::move(M));
+  }
+
+private:
+  LLLazyJIT(std::unique_ptr<ExecutionSession> ES,
+            std::unique_ptr<TargetMachine> TM, DataLayout DL, LLVMContext &Ctx,
+            std::unique_ptr<JITCompileCallbackManager> CCMgr,
+            std::function<std::unique_ptr<IndirectStubsManager>()> ISMBuilder);
+
+  std::unique_ptr<JITCompileCallbackManager> CCMgr;
+  std::function<std::unique_ptr<IndirectStubsManager>()> ISMBuilder;
+
+  IRTransformLayer2 TransformLayer;
+  CompileOnDemandLayer2 CODLayer;
+};
+
+} // End namespace orc
+} // End namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_ORC_LLJIT_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Layer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Layer.h
new file mode 100644
index 0000000..da37266
--- /dev/null
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Layer.h
@@ -0,0 +1,136 @@
+//===---------------- Layer.h -- Layer interfaces --------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// Layer interfaces.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_EXECUTIONENGINE_ORC_LAYER_H
+#define LLVM_EXECUTIONENGINE_ORC_LAYER_H
+
+#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/IR/Module.h"
+#include "llvm/Support/MemoryBuffer.h"
+
+namespace llvm {
+namespace orc {
+
+/// Interface for layers that accept LLVM IR.
+class IRLayer {
+public:
+  IRLayer(ExecutionSession &ES);
+  virtual ~IRLayer();
+
+  /// Returns the ExecutionSession for this layer.
+  ExecutionSession &getExecutionSession() { return ES; }
+
+  /// Adds a MaterializationUnit representing the given IR to the given VSO.
+  virtual Error add(VSO &V, VModuleKey K, std::unique_ptr<Module> M);
+
+  /// Emit should materialize the given IR.
+  virtual void emit(MaterializationResponsibility R, VModuleKey K,
+                    std::unique_ptr<Module> M) = 0;
+
+private:
+  ExecutionSession &ES;
+};
+
+/// IRMaterializationUnit is a convenient base class for MaterializationUnits
+/// wrapping LLVM IR. Represents materialization responsibility for all symbols
+/// in the given module. If symbols are overridden by other definitions, then
+/// their linkage is changed to available-externally.
+class IRMaterializationUnit : public MaterializationUnit {
+public:
+  using SymbolNameToDefinitionMap = std::map<SymbolStringPtr, GlobalValue *>;
+
+  /// Create an IRMaterializationLayer. Scans the module to build the
+  /// SymbolFlags and SymbolToDefinition maps.
+  IRMaterializationUnit(ExecutionSession &ES, std::unique_ptr<Module> M);
+
+  /// Create an IRMaterializationLayer from a module, and pre-existing
+  /// SymbolFlags and SymbolToDefinition maps. The maps must provide
+  /// entries for each definition in M.
+  /// This constructor is useful for delegating work from one
+  /// IRMaterializationUnit to another.
+  IRMaterializationUnit(std::unique_ptr<Module> M, SymbolFlagsMap SymbolFlags,
+                        SymbolNameToDefinitionMap SymbolToDefinition);
+
+protected:
+  std::unique_ptr<Module> M;
+  SymbolNameToDefinitionMap SymbolToDefinition;
+
+private:
+  void discard(const VSO &V, SymbolStringPtr Name) override;
+};
+
+/// MaterializationUnit that materializes modules by calling the 'emit' method
+/// on the given IRLayer.
+class BasicIRLayerMaterializationUnit : public IRMaterializationUnit {
+public:
+  BasicIRLayerMaterializationUnit(IRLayer &L, VModuleKey K,
+                                  std::unique_ptr<Module> M);
+private:
+
+  void materialize(MaterializationResponsibility R) override;
+
+  IRLayer &L;
+  VModuleKey K;
+};
+
+/// Interface for Layers that accept object files.
+class ObjectLayer {
+public:
+  ObjectLayer(ExecutionSession &ES);
+  virtual ~ObjectLayer();
+
+  /// Returns the execution session for this layer.
+  ExecutionSession &getExecutionSession() { return ES; }
+
+  /// Adds a MaterializationUnit representing the given IR to the given VSO.
+  virtual Error add(VSO &V, VModuleKey K, std::unique_ptr<MemoryBuffer> O);
+
+  /// Emit should materialize the given IR.
+  virtual void emit(MaterializationResponsibility R, VModuleKey K,
+                    std::unique_ptr<MemoryBuffer> O) = 0;
+
+private:
+  ExecutionSession &ES;
+};
+
+/// Materializes the given object file (represented by a MemoryBuffer
+/// instance) by calling 'emit' on the given ObjectLayer.
+class BasicObjectLayerMaterializationUnit : public MaterializationUnit {
+public:
+  static Expected<std::unique_ptr<BasicObjectLayerMaterializationUnit>>
+  Create(ObjectLayer &L, VModuleKey K, std::unique_ptr<MemoryBuffer> O);
+
+  BasicObjectLayerMaterializationUnit(ObjectLayer &L, VModuleKey K,
+                                      std::unique_ptr<MemoryBuffer> O,
+                                      SymbolFlagsMap SymbolFlags);
+
+private:
+
+  void materialize(MaterializationResponsibility R) override;
+  void discard(const VSO &V, SymbolStringPtr Name) override;
+
+  ObjectLayer &L;
+  VModuleKey K;
+  std::unique_ptr<MemoryBuffer> O;
+};
+
+/// Returns a SymbolFlagsMap for the object file represented by the given
+/// buffer, or an error if the buffer does not contain a valid object file.
+// FIXME: Maybe move to Core.h?
+Expected<SymbolFlagsMap> getObjectSymbolFlags(ExecutionSession &ES,
+                                              MemoryBufferRef ObjBuffer);
+
+} // End namespace orc
+} // End namespace llvm
+
+#endif // LLVM_EXECUTIONENGINE_ORC_LAYER_H
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
index 4117a92..46761b0 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/LazyEmittingLayer.h
@@ -33,7 +33,7 @@
 namespace llvm {
 namespace orc {
 
-/// @brief Lazy-emitting IR layer.
+/// Lazy-emitting IR layer.
 ///
 ///   This layer accepts LLVM IR Modules (via addModule), but does not
 /// immediately emit them the layer below. Instead, emissing to the base layer
@@ -196,10 +196,10 @@
 
 public:
 
-  /// @brief Construct a lazy emitting layer.
+  /// Construct a lazy emitting layer.
   LazyEmittingLayer(BaseLayerT &BaseLayer) : BaseLayer(BaseLayer) {}
 
-  /// @brief Add the given module to the lazy emitting layer.
+  /// Add the given module to the lazy emitting layer.
   Error addModule(VModuleKey K, std::unique_ptr<Module> M) {
     assert(!ModuleMap.count(K) && "VModuleKey K already in use");
     ModuleMap[K] =
@@ -207,7 +207,7 @@
     return Error::success();
   }
 
-  /// @brief Remove the module represented by the given handle.
+  /// Remove the module represented by the given handle.
   ///
   ///   This method will free the memory associated with the given module, both
   /// in this layer, and the base layer.
@@ -219,7 +219,7 @@
     return EDM->removeModuleFromBaseLayer(BaseLayer);
   }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -239,7 +239,7 @@
     return nullptr;
   }
 
-  /// @brief Get the address of the given symbol in the context of the of
+  /// Get the address of the given symbol in the context of the of
   ///        compiled modules represented by the key K.
   JITSymbol findSymbolIn(VModuleKey K, const std::string &Name,
                          bool ExportedSymbolsOnly) {
@@ -247,7 +247,7 @@
     return ModuleMap[K]->find(Name, ExportedSymbolsOnly, BaseLayer);
   }
 
-  /// @brief Immediately emit and finalize the module represented by the given
+  /// Immediately emit and finalize the module represented by the given
   ///        key.
   Error emitAndFinalize(VModuleKey K) {
     assert(ModuleMap.count(K) && "VModuleKey K not valid here");
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
index b2b389a..52c8c16 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/Legacy.h
@@ -20,9 +20,76 @@
 namespace llvm {
 namespace orc {
 
+/// SymbolResolver is a composable interface for looking up symbol flags
+///        and addresses using the AsynchronousSymbolQuery type. It will
+///        eventually replace the LegacyJITSymbolResolver interface as the
+///        stardard ORC symbol resolver type.
+///
+/// FIXME: SymbolResolvers should go away and be replaced with VSOs with
+///        defenition generators.
+class SymbolResolver {
+public:
+  virtual ~SymbolResolver() = default;
+
+  /// Returns the flags for each symbol in Symbols that can be found,
+  ///        along with the set of symbol that could not be found.
+  virtual SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) = 0;
+
+  /// For each symbol in Symbols that can be found, assigns that symbols
+  ///        value in Query. Returns the set of symbols that could not be found.
+  virtual SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
+                               SymbolNameSet Symbols) = 0;
+
+private:
+  virtual void anchor();
+};
+
+/// Implements SymbolResolver with a pair of supplied function objects
+///        for convenience. See createSymbolResolver.
+template <typename LookupFlagsFn, typename LookupFn>
+class LambdaSymbolResolver final : public SymbolResolver {
+public:
+  template <typename LookupFlagsFnRef, typename LookupFnRef>
+  LambdaSymbolResolver(LookupFlagsFnRef &&LookupFlags, LookupFnRef &&Lookup)
+      : LookupFlags(std::forward<LookupFlagsFnRef>(LookupFlags)),
+        Lookup(std::forward<LookupFnRef>(Lookup)) {}
+
+  SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) final {
+    return LookupFlags(Symbols);
+  }
+
+  SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
+                       SymbolNameSet Symbols) final {
+    return Lookup(std::move(Query), std::move(Symbols));
+  }
+
+private:
+  LookupFlagsFn LookupFlags;
+  LookupFn Lookup;
+};
+
+/// Creates a SymbolResolver implementation from the pair of supplied
+///        function objects.
+template <typename LookupFlagsFn, typename LookupFn>
+std::unique_ptr<LambdaSymbolResolver<
+    typename std::remove_cv<
+        typename std::remove_reference<LookupFlagsFn>::type>::type,
+    typename std::remove_cv<
+        typename std::remove_reference<LookupFn>::type>::type>>
+createSymbolResolver(LookupFlagsFn &&LookupFlags, LookupFn &&Lookup) {
+  using LambdaSymbolResolverImpl = LambdaSymbolResolver<
+      typename std::remove_cv<
+          typename std::remove_reference<LookupFlagsFn>::type>::type,
+      typename std::remove_cv<
+          typename std::remove_reference<LookupFn>::type>::type>;
+  return llvm::make_unique<LambdaSymbolResolverImpl>(
+      std::forward<LookupFlagsFn>(LookupFlags), std::forward<LookupFn>(Lookup));
+}
+
 class JITSymbolResolverAdapter : public JITSymbolResolver {
 public:
-  JITSymbolResolverAdapter(ExecutionSession &ES, SymbolResolver &R);
+  JITSymbolResolverAdapter(ExecutionSession &ES, SymbolResolver &R,
+                           MaterializationResponsibility *MR);
   Expected<LookupFlagsResult> lookupFlags(const LookupSet &Symbols) override;
   Expected<LookupResult> lookup(const LookupSet &Symbols) override;
 
@@ -30,9 +97,10 @@
   ExecutionSession &ES;
   std::set<SymbolStringPtr> ResolvedStrings;
   SymbolResolver &R;
+  MaterializationResponsibility *MR;
 };
 
-/// @brief Use the given legacy-style FindSymbol function (i.e. a function that
+/// Use the given legacy-style FindSymbol function (i.e. a function that
 ///        takes a const std::string& or StringRef and returns a JITSymbol) to
 ///        find the flags for each symbol in Symbols and store their flags in
 ///        SymbolFlags. If any JITSymbol returned by FindSymbol is in an error
@@ -41,95 +109,100 @@
 ///
 /// Useful for implementing lookupFlags bodies that query legacy resolvers.
 template <typename FindSymbolFn>
-Expected<SymbolNameSet> lookupFlagsWithLegacyFn(SymbolFlagsMap &SymbolFlags,
-                                                const SymbolNameSet &Symbols,
-                                                FindSymbolFn FindSymbol) {
-  SymbolNameSet SymbolsNotFound;
+Expected<SymbolFlagsMap> lookupFlagsWithLegacyFn(const SymbolNameSet &Symbols,
+                                                 FindSymbolFn FindSymbol) {
+  SymbolFlagsMap SymbolFlags;
 
   for (auto &S : Symbols) {
     if (JITSymbol Sym = FindSymbol(*S))
       SymbolFlags[S] = Sym.getFlags();
     else if (auto Err = Sym.takeError())
       return std::move(Err);
-    else
-      SymbolsNotFound.insert(S);
   }
 
-  return SymbolsNotFound;
+  return SymbolFlags;
 }
 
-/// @brief Use the given legacy-style FindSymbol function (i.e. a function that
+/// Use the given legacy-style FindSymbol function (i.e. a function that
 ///        takes a const std::string& or StringRef and returns a JITSymbol) to
 ///        find the address and flags for each symbol in Symbols and store the
 ///        result in Query. If any JITSymbol returned by FindSymbol is in an
-///        error then Query.setFailed(...) is called with that error and the
+///        error then Query.notifyFailed(...) is called with that error and the
 ///        function returns immediately. On success, returns the set of symbols
 ///        not found.
 ///
 /// Useful for implementing lookup bodies that query legacy resolvers.
 template <typename FindSymbolFn>
-SymbolNameSet lookupWithLegacyFn(AsynchronousSymbolQuery &Query,
-                                 const SymbolNameSet &Symbols,
-                                 FindSymbolFn FindSymbol) {
+SymbolNameSet
+lookupWithLegacyFn(ExecutionSession &ES, AsynchronousSymbolQuery &Query,
+                   const SymbolNameSet &Symbols, FindSymbolFn FindSymbol) {
   SymbolNameSet SymbolsNotFound;
+  bool NewSymbolsResolved = false;
 
   for (auto &S : Symbols) {
     if (JITSymbol Sym = FindSymbol(*S)) {
       if (auto Addr = Sym.getAddress()) {
-        Query.setDefinition(S, JITEvaluatedSymbol(*Addr, Sym.getFlags()));
-        Query.notifySymbolFinalized();
+        Query.resolve(S, JITEvaluatedSymbol(*Addr, Sym.getFlags()));
+        Query.notifySymbolReady();
+        NewSymbolsResolved = true;
       } else {
-        Query.setFailed(Addr.takeError());
+        ES.legacyFailQuery(Query, Addr.takeError());
         return SymbolNameSet();
       }
     } else if (auto Err = Sym.takeError()) {
-      Query.setFailed(std::move(Err));
+      ES.legacyFailQuery(Query, std::move(Err));
       return SymbolNameSet();
     } else
       SymbolsNotFound.insert(S);
   }
 
+  if (NewSymbolsResolved && Query.isFullyResolved())
+    Query.handleFullyResolved();
+
+  if (NewSymbolsResolved && Query.isFullyReady())
+    Query.handleFullyReady();
+
   return SymbolsNotFound;
 }
 
-/// @brief An ORC SymbolResolver implementation that uses a legacy
+/// An ORC SymbolResolver implementation that uses a legacy
 ///        findSymbol-like function to perform lookup;
 template <typename LegacyLookupFn>
 class LegacyLookupFnResolver final : public SymbolResolver {
 public:
   using ErrorReporter = std::function<void(Error)>;
 
-  LegacyLookupFnResolver(LegacyLookupFn LegacyLookup, ErrorReporter ReportError)
-      : LegacyLookup(std::move(LegacyLookup)),
+  LegacyLookupFnResolver(ExecutionSession &ES, LegacyLookupFn LegacyLookup,
+                         ErrorReporter ReportError)
+      : ES(ES), LegacyLookup(std::move(LegacyLookup)),
         ReportError(std::move(ReportError)) {}
 
-  SymbolNameSet lookupFlags(SymbolFlagsMap &Flags,
-                            const SymbolNameSet &Symbols) final {
-    if (auto RemainingSymbols =
-            lookupFlagsWithLegacyFn(Flags, Symbols, LegacyLookup))
-      return std::move(*RemainingSymbols);
+  SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) final {
+    if (auto SymbolFlags = lookupFlagsWithLegacyFn(Symbols, LegacyLookup))
+      return std::move(*SymbolFlags);
     else {
-      ReportError(RemainingSymbols.takeError());
-      return Symbols;
+      ReportError(SymbolFlags.takeError());
+      return SymbolFlagsMap();
     }
   }
 
   SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
                        SymbolNameSet Symbols) final {
-    return lookupWithLegacyFn(*Query, Symbols, LegacyLookup);
+    return lookupWithLegacyFn(ES, *Query, Symbols, LegacyLookup);
   }
 
 private:
+  ExecutionSession &ES;
   LegacyLookupFn LegacyLookup;
   ErrorReporter ReportError;
 };
 
 template <typename LegacyLookupFn>
 std::shared_ptr<LegacyLookupFnResolver<LegacyLookupFn>>
-createLegacyLookupResolver(LegacyLookupFn LegacyLookup,
+createLegacyLookupResolver(ExecutionSession &ES, LegacyLookupFn LegacyLookup,
                            std::function<void(Error)> ErrorReporter) {
   return std::make_shared<LegacyLookupFnResolver<LegacyLookupFn>>(
-      std::move(LegacyLookup), std::move(ErrorReporter));
+      ES, std::move(LegacyLookup), std::move(ErrorReporter));
 }
 
 } // End namespace orc
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/NullResolver.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/NullResolver.h
index eba9b95..3dd3cfe 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/NullResolver.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/NullResolver.h
@@ -15,7 +15,7 @@
 #ifndef LLVM_EXECUTIONENGINE_ORC_NULLRESOLVER_H
 #define LLVM_EXECUTIONENGINE_ORC_NULLRESOLVER_H
 
-#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Legacy.h"
 #include "llvm/ExecutionEngine/RuntimeDyld.h"
 
 namespace llvm {
@@ -23,8 +23,7 @@
 
 class NullResolver : public SymbolResolver {
 public:
-  SymbolNameSet lookupFlags(SymbolFlagsMap &Flags,
-                            const SymbolNameSet &Symbols) override;
+  SymbolFlagsMap lookupFlags(const SymbolNameSet &Symbols) override;
 
   SymbolNameSet lookup(std::shared_ptr<AsynchronousSymbolQuery> Query,
                        SymbolNameSet Symbols) override;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h
index cfc3922..c6b43a9 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/ObjectTransformLayer.h
@@ -15,7 +15,7 @@
 #define LLVM_EXECUTIONENGINE_ORC_OBJECTTRANSFORMLAYER_H
 
 #include "llvm/ExecutionEngine/JITSymbol.h"
-#include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
 #include <algorithm>
 #include <memory>
 #include <string>
@@ -23,7 +23,24 @@
 namespace llvm {
 namespace orc {
 
-/// @brief Object mutating layer.
+class ObjectTransformLayer2 : public ObjectLayer {
+public:
+  using TransformFunction =
+      std::function<Expected<std::unique_ptr<MemoryBuffer>>(
+          std::unique_ptr<MemoryBuffer>)>;
+
+  ObjectTransformLayer2(ExecutionSession &ES, ObjectLayer &BaseLayer,
+                        TransformFunction Transform);
+
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<MemoryBuffer> O) override;
+
+private:
+  ObjectLayer &BaseLayer;
+  TransformFunction Transform;
+};
+
+/// Object mutating layer.
 ///
 ///   This layer accepts sets of ObjectFiles (via addObject). It
 /// immediately applies the user supplied functor to each object, then adds
@@ -31,12 +48,12 @@
 template <typename BaseLayerT, typename TransformFtor>
 class ObjectTransformLayer {
 public:
-  /// @brief Construct an ObjectTransformLayer with the given BaseLayer
+  /// Construct an ObjectTransformLayer with the given BaseLayer
   ObjectTransformLayer(BaseLayerT &BaseLayer,
                        TransformFtor Transform = TransformFtor())
       : BaseLayer(BaseLayer), Transform(std::move(Transform)) {}
 
-  /// @brief Apply the transform functor to each object in the object set, then
+  /// Apply the transform functor to each object in the object set, then
   ///        add the resulting set of objects to the base layer, along with the
   ///        memory manager and symbol resolver.
   ///
@@ -45,10 +62,10 @@
     return BaseLayer.addObject(std::move(K), Transform(std::move(Obj)));
   }
 
-  /// @brief Remove the object set associated with the VModuleKey K.
+  /// Remove the object set associated with the VModuleKey K.
   Error removeObject(VModuleKey K) { return BaseLayer.removeObject(K); }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -56,7 +73,7 @@
     return BaseLayer.findSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Get the address of the given symbol in the context of the set of
+  /// Get the address of the given symbol in the context of the set of
   ///        objects represented by the VModuleKey K. This call is forwarded to
   ///        the base layer's implementation.
   /// @param K The VModuleKey associated with the object set to search in.
@@ -69,21 +86,21 @@
     return BaseLayer.findSymbolIn(K, Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Immediately emit and finalize the object set represented by the
+  /// Immediately emit and finalize the object set represented by the
   ///        given VModuleKey K.
   Error emitAndFinalize(VModuleKey K) { return BaseLayer.emitAndFinalize(K); }
 
-  /// @brief Map section addresses for the objects associated with the
+  /// Map section addresses for the objects associated with the
   /// VModuleKey K.
   void mapSectionAddress(VModuleKey K, const void *LocalAddress,
                          JITTargetAddress TargetAddr) {
     BaseLayer.mapSectionAddress(K, LocalAddress, TargetAddr);
   }
 
-  /// @brief Access the transform functor directly.
+  /// Access the transform functor directly.
   TransformFtor &getTransform() { return Transform; }
 
-  /// @brief Access the mumate functor directly.
+  /// Access the mumate functor directly.
   const TransformFtor &getTransform() const { return Transform; }
 
 private:
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcABISupport.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcABISupport.h
index e1b5564..581c598 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcABISupport.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcABISupport.h
@@ -71,7 +71,7 @@
   }
 };
 
-/// @brief Provide information about stub blocks generated by the
+/// Provide information about stub blocks generated by the
 ///        makeIndirectStubsBlock function.
 template <unsigned StubSizeVal> class GenericIndirectStubsInfo {
 public:
@@ -92,16 +92,16 @@
     return *this;
   }
 
-  /// @brief Number of stubs in this block.
+  /// Number of stubs in this block.
   unsigned getNumStubs() const { return NumStubs; }
 
-  /// @brief Get a pointer to the stub at the given index, which must be in
+  /// Get a pointer to the stub at the given index, which must be in
   ///        the range 0 .. getNumStubs() - 1.
   void *getStub(unsigned Idx) const {
     return static_cast<char *>(StubsMem.base()) + Idx * StubSize;
   }
 
-  /// @brief Get a pointer to the implementation-pointer at the given index,
+  /// Get a pointer to the implementation-pointer at the given index,
   ///        which must be in the range 0 .. getNumStubs() - 1.
   void **getPtr(unsigned Idx) const {
     char *PtrsBase = static_cast<char *>(StubsMem.base()) + NumStubs * StubSize;
@@ -124,18 +124,18 @@
   using JITReentryFn = JITTargetAddress (*)(void *CallbackMgr,
                                             void *TrampolineId);
 
-  /// @brief Write the resolver code into the given memory. The user is be
+  /// Write the resolver code into the given memory. The user is be
   ///        responsible for allocating the memory and setting permissions.
   static void writeResolverCode(uint8_t *ResolveMem, JITReentryFn Reentry,
                                 void *CallbackMgr);
 
-  /// @brief Write the requsted number of trampolines into the given memory,
+  /// Write the requsted number of trampolines into the given memory,
   ///        which must be big enough to hold 1 pointer, plus NumTrampolines
   ///        trampolines.
   static void writeTrampolines(uint8_t *TrampolineMem, void *ResolverAddr,
                                unsigned NumTrampolines);
 
-  /// @brief Emit at least MinStubs worth of indirect call stubs, rounded out to
+  /// Emit at least MinStubs worth of indirect call stubs, rounded out to
   ///        the nearest page size.
   ///
   ///   E.g. Asking for 4 stubs on x86-64, where stubs are 8-bytes, with 4k
@@ -145,7 +145,7 @@
                                       unsigned MinStubs, void *InitialPtrVal);
 };
 
-/// @brief X86_64 code that's common to all ABIs.
+/// X86_64 code that's common to all ABIs.
 ///
 /// X86_64 supports lazy JITing.
 class OrcX86_64_Base {
@@ -155,13 +155,13 @@
 
   using IndirectStubsInfo = GenericIndirectStubsInfo<8>;
 
-  /// @brief Write the requsted number of trampolines into the given memory,
+  /// Write the requsted number of trampolines into the given memory,
   ///        which must be big enough to hold 1 pointer, plus NumTrampolines
   ///        trampolines.
   static void writeTrampolines(uint8_t *TrampolineMem, void *ResolverAddr,
                                unsigned NumTrampolines);
 
-  /// @brief Emit at least MinStubs worth of indirect call stubs, rounded out to
+  /// Emit at least MinStubs worth of indirect call stubs, rounded out to
   ///        the nearest page size.
   ///
   ///   E.g. Asking for 4 stubs on x86-64, where stubs are 8-bytes, with 4k
@@ -171,7 +171,7 @@
                                       unsigned MinStubs, void *InitialPtrVal);
 };
 
-/// @brief X86_64 support for SysV ABI (Linux, MacOSX).
+/// X86_64 support for SysV ABI (Linux, MacOSX).
 ///
 /// X86_64_SysV supports lazy JITing.
 class OrcX86_64_SysV : public OrcX86_64_Base {
@@ -181,13 +181,13 @@
   using JITReentryFn = JITTargetAddress (*)(void *CallbackMgr,
                                             void *TrampolineId);
 
-  /// @brief Write the resolver code into the given memory. The user is be
+  /// Write the resolver code into the given memory. The user is be
   ///        responsible for allocating the memory and setting permissions.
   static void writeResolverCode(uint8_t *ResolveMem, JITReentryFn Reentry,
                                 void *CallbackMgr);
 };
 
-/// @brief X86_64 support for Win32.
+/// X86_64 support for Win32.
 ///
 /// X86_64_Win32 supports lazy JITing.
 class OrcX86_64_Win32 : public OrcX86_64_Base {
@@ -197,13 +197,13 @@
   using JITReentryFn = JITTargetAddress (*)(void *CallbackMgr,
                                             void *TrampolineId);
 
-  /// @brief Write the resolver code into the given memory. The user is be
+  /// Write the resolver code into the given memory. The user is be
   ///        responsible for allocating the memory and setting permissions.
   static void writeResolverCode(uint8_t *ResolveMem, JITReentryFn Reentry,
                                 void *CallbackMgr);
 };
 
-/// @brief I386 support.
+/// I386 support.
 ///
 /// I386 supports lazy JITing.
 class OrcI386 {
@@ -217,18 +217,18 @@
   using JITReentryFn = JITTargetAddress (*)(void *CallbackMgr,
                                             void *TrampolineId);
 
-  /// @brief Write the resolver code into the given memory. The user is be
+  /// Write the resolver code into the given memory. The user is be
   ///        responsible for allocating the memory and setting permissions.
   static void writeResolverCode(uint8_t *ResolveMem, JITReentryFn Reentry,
                                 void *CallbackMgr);
 
-  /// @brief Write the requsted number of trampolines into the given memory,
+  /// Write the requsted number of trampolines into the given memory,
   ///        which must be big enough to hold 1 pointer, plus NumTrampolines
   ///        trampolines.
   static void writeTrampolines(uint8_t *TrampolineMem, void *ResolverAddr,
                                unsigned NumTrampolines);
 
-  /// @brief Emit at least MinStubs worth of indirect call stubs, rounded out to
+  /// Emit at least MinStubs worth of indirect call stubs, rounded out to
   ///        the nearest page size.
   ///
   ///   E.g. Asking for 4 stubs on i386, where stubs are 8-bytes, with 4k
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcError.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcError.h
index c2ff41e..dc60e8d 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcError.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcError.h
@@ -22,7 +22,8 @@
 
 enum class OrcErrorCode : int {
   // RPC Errors
-  DuplicateDefinition = 1,
+  UnknownORCError = 1,
+  DuplicateDefinition,
   JITSymbolNotFound,
   RemoteAllocatorDoesNotExist,
   RemoteAllocatorIdAlreadyInUse,
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h
index 7179e5f..739e5ba 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetClient.h
@@ -63,7 +63,7 @@
   public:
     ~RemoteRTDyldMemoryManager() {
       Client.destroyRemoteAllocator(Id);
-      DEBUG(dbgs() << "Destroyed remote allocator " << Id << "\n");
+      LLVM_DEBUG(dbgs() << "Destroyed remote allocator " << Id << "\n");
     }
 
     RemoteRTDyldMemoryManager(const RemoteRTDyldMemoryManager &) = delete;
@@ -79,9 +79,9 @@
       Unmapped.back().CodeAllocs.emplace_back(Size, Alignment);
       uint8_t *Alloc = reinterpret_cast<uint8_t *>(
           Unmapped.back().CodeAllocs.back().getLocalAddress());
-      DEBUG(dbgs() << "Allocator " << Id << " allocated code for "
-                   << SectionName << ": " << Alloc << " (" << Size
-                   << " bytes, alignment " << Alignment << ")\n");
+      LLVM_DEBUG(dbgs() << "Allocator " << Id << " allocated code for "
+                        << SectionName << ": " << Alloc << " (" << Size
+                        << " bytes, alignment " << Alignment << ")\n");
       return Alloc;
     }
 
@@ -92,18 +92,18 @@
         Unmapped.back().RODataAllocs.emplace_back(Size, Alignment);
         uint8_t *Alloc = reinterpret_cast<uint8_t *>(
             Unmapped.back().RODataAllocs.back().getLocalAddress());
-        DEBUG(dbgs() << "Allocator " << Id << " allocated ro-data for "
-                     << SectionName << ": " << Alloc << " (" << Size
-                     << " bytes, alignment " << Alignment << ")\n");
+        LLVM_DEBUG(dbgs() << "Allocator " << Id << " allocated ro-data for "
+                          << SectionName << ": " << Alloc << " (" << Size
+                          << " bytes, alignment " << Alignment << ")\n");
         return Alloc;
       } // else...
 
       Unmapped.back().RWDataAllocs.emplace_back(Size, Alignment);
       uint8_t *Alloc = reinterpret_cast<uint8_t *>(
           Unmapped.back().RWDataAllocs.back().getLocalAddress());
-      DEBUG(dbgs() << "Allocator " << Id << " allocated rw-data for "
-                   << SectionName << ": " << Alloc << " (" << Size
-                   << " bytes, alignment " << Alignment << ")\n");
+      LLVM_DEBUG(dbgs() << "Allocator " << Id << " allocated rw-data for "
+                        << SectionName << ": " << Alloc << " (" << Size
+                        << " bytes, alignment " << Alignment << ")\n");
       return Alloc;
     }
 
@@ -113,36 +113,36 @@
                                 uint32_t RWDataAlign) override {
       Unmapped.push_back(ObjectAllocs());
 
-      DEBUG(dbgs() << "Allocator " << Id << " reserved:\n");
+      LLVM_DEBUG(dbgs() << "Allocator " << Id << " reserved:\n");
 
       if (CodeSize != 0) {
         Unmapped.back().RemoteCodeAddr =
             Client.reserveMem(Id, CodeSize, CodeAlign);
 
-        DEBUG(dbgs() << "  code: "
-                     << format("0x%016x", Unmapped.back().RemoteCodeAddr)
-                     << " (" << CodeSize << " bytes, alignment " << CodeAlign
-                     << ")\n");
+        LLVM_DEBUG(dbgs() << "  code: "
+                          << format("0x%016x", Unmapped.back().RemoteCodeAddr)
+                          << " (" << CodeSize << " bytes, alignment "
+                          << CodeAlign << ")\n");
       }
 
       if (RODataSize != 0) {
         Unmapped.back().RemoteRODataAddr =
             Client.reserveMem(Id, RODataSize, RODataAlign);
 
-        DEBUG(dbgs() << "  ro-data: "
-                     << format("0x%016x", Unmapped.back().RemoteRODataAddr)
-                     << " (" << RODataSize << " bytes, alignment "
-                     << RODataAlign << ")\n");
+        LLVM_DEBUG(dbgs() << "  ro-data: "
+                          << format("0x%016x", Unmapped.back().RemoteRODataAddr)
+                          << " (" << RODataSize << " bytes, alignment "
+                          << RODataAlign << ")\n");
       }
 
       if (RWDataSize != 0) {
         Unmapped.back().RemoteRWDataAddr =
             Client.reserveMem(Id, RWDataSize, RWDataAlign);
 
-        DEBUG(dbgs() << "  rw-data: "
-                     << format("0x%016x", Unmapped.back().RemoteRWDataAddr)
-                     << " (" << RWDataSize << " bytes, alignment "
-                     << RWDataAlign << ")\n");
+        LLVM_DEBUG(dbgs() << "  rw-data: "
+                          << format("0x%016x", Unmapped.back().RemoteRWDataAddr)
+                          << " (" << RWDataSize << " bytes, alignment "
+                          << RWDataAlign << ")\n");
       }
     }
 
@@ -162,7 +162,7 @@
 
     void notifyObjectLoaded(RuntimeDyld &Dyld,
                             const object::ObjectFile &Obj) override {
-      DEBUG(dbgs() << "Allocator " << Id << " applied mappings:\n");
+      LLVM_DEBUG(dbgs() << "Allocator " << Id << " applied mappings:\n");
       for (auto &ObjAllocs : Unmapped) {
         mapAllocsToRemoteAddrs(Dyld, ObjAllocs.CodeAllocs,
                                ObjAllocs.RemoteCodeAddr);
@@ -176,7 +176,7 @@
     }
 
     bool finalizeMemory(std::string *ErrMsg = nullptr) override {
-      DEBUG(dbgs() << "Allocator " << Id << " finalizing:\n");
+      LLVM_DEBUG(dbgs() << "Allocator " << Id << " finalizing:\n");
 
       for (auto &ObjAllocs : Unfinalized) {
         if (copyAndProtect(ObjAllocs.CodeAllocs, ObjAllocs.RemoteCodeAddr,
@@ -261,7 +261,7 @@
     RemoteRTDyldMemoryManager(OrcRemoteTargetClient &Client,
                               ResourceIdMgr::ResourceId Id)
         : Client(Client), Id(Id) {
-      DEBUG(dbgs() << "Created remote allocator " << Id << "\n");
+      LLVM_DEBUG(dbgs() << "Created remote allocator " << Id << "\n");
     }
 
     // Maps all allocations in Allocs to aligned blocks
@@ -270,8 +270,9 @@
       for (auto &Alloc : Allocs) {
         NextAddr = alignTo(NextAddr, Alloc.getAlign());
         Dyld.mapSectionAddress(Alloc.getLocalAddress(), NextAddr);
-        DEBUG(dbgs() << "     " << static_cast<void *>(Alloc.getLocalAddress())
-                     << " -> " << format("0x%016x", NextAddr) << "\n");
+        LLVM_DEBUG(dbgs() << "     "
+                          << static_cast<void *>(Alloc.getLocalAddress())
+                          << " -> " << format("0x%016x", NextAddr) << "\n");
         Alloc.setRemoteAddress(NextAddr);
 
         // Only advance NextAddr if it was non-null to begin with,
@@ -290,22 +291,23 @@
         assert(!Allocs.empty() && "No sections in allocated segment");
 
         for (auto &Alloc : Allocs) {
-          DEBUG(dbgs() << "  copying section: "
-                       << static_cast<void *>(Alloc.getLocalAddress()) << " -> "
-                       << format("0x%016x", Alloc.getRemoteAddress()) << " ("
-                       << Alloc.getSize() << " bytes)\n";);
+          LLVM_DEBUG(dbgs() << "  copying section: "
+                            << static_cast<void *>(Alloc.getLocalAddress())
+                            << " -> "
+                            << format("0x%016x", Alloc.getRemoteAddress())
+                            << " (" << Alloc.getSize() << " bytes)\n";);
 
           if (Client.writeMem(Alloc.getRemoteAddress(), Alloc.getLocalAddress(),
                               Alloc.getSize()))
             return true;
         }
 
-        DEBUG(dbgs() << "  setting "
-                     << (Permissions & sys::Memory::MF_READ ? 'R' : '-')
-                     << (Permissions & sys::Memory::MF_WRITE ? 'W' : '-')
-                     << (Permissions & sys::Memory::MF_EXEC ? 'X' : '-')
-                     << " permissions on block: "
-                     << format("0x%016x", RemoteSegmentAddr) << "\n");
+        LLVM_DEBUG(dbgs() << "  setting "
+                          << (Permissions & sys::Memory::MF_READ ? 'R' : '-')
+                          << (Permissions & sys::Memory::MF_WRITE ? 'W' : '-')
+                          << (Permissions & sys::Memory::MF_EXEC ? 'X' : '-')
+                          << " permissions on block: "
+                          << format("0x%016x", RemoteSegmentAddr) << "\n");
         if (Client.setProtections(Id, RemoteSegmentAddr, Permissions))
           return true;
       }
@@ -356,25 +358,25 @@
       return Error::success();
     }
 
-    JITSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
+    JITEvaluatedSymbol findStub(StringRef Name, bool ExportedStubsOnly) override {
       auto I = StubIndexes.find(Name);
       if (I == StubIndexes.end())
         return nullptr;
       auto Key = I->second.first;
       auto Flags = I->second.second;
-      auto StubSymbol = JITSymbol(getStubAddr(Key), Flags);
+      auto StubSymbol = JITEvaluatedSymbol(getStubAddr(Key), Flags);
       if (ExportedStubsOnly && !StubSymbol.getFlags().isExported())
         return nullptr;
       return StubSymbol;
     }
 
-    JITSymbol findPointer(StringRef Name) override {
+    JITEvaluatedSymbol findPointer(StringRef Name) override {
       auto I = StubIndexes.find(Name);
       if (I == StubIndexes.end())
         return nullptr;
       auto Key = I->second.first;
       auto Flags = I->second.second;
-      return JITSymbol(getPtrAddr(Key), Flags);
+      return JITEvaluatedSymbol(getPtrAddr(Key), Flags);
     }
 
     Error updatePointer(StringRef Name, JITTargetAddress NewAddr) override {
@@ -449,8 +451,9 @@
   class RemoteCompileCallbackManager : public JITCompileCallbackManager {
   public:
     RemoteCompileCallbackManager(OrcRemoteTargetClient &Client,
+                                 ExecutionSession &ES,
                                  JITTargetAddress ErrorHandlerAddress)
-        : JITCompileCallbackManager(ErrorHandlerAddress), Client(Client) {}
+        : JITCompileCallbackManager(ES, ErrorHandlerAddress), Client(Client) {}
 
   private:
     Error grow() override {
@@ -475,10 +478,10 @@
   /// Channel is the ChannelT instance to communicate on. It is assumed that
   /// the channel is ready to be read from and written to.
   static Expected<std::unique_ptr<OrcRemoteTargetClient>>
-  Create(rpc::RawByteChannel &Channel, std::function<void(Error)> ReportError) {
+  Create(rpc::RawByteChannel &Channel, ExecutionSession &ES) {
     Error Err = Error::success();
     auto Client = std::unique_ptr<OrcRemoteTargetClient>(
-        new OrcRemoteTargetClient(Channel, std::move(ReportError), Err));
+        new OrcRemoteTargetClient(Channel, ES, Err));
     if (Err)
       return std::move(Err);
     return std::move(Client);
@@ -487,7 +490,8 @@
   /// Call the int(void) function at the given address in the target and return
   /// its result.
   Expected<int> callIntVoid(JITTargetAddress Addr) {
-    DEBUG(dbgs() << "Calling int(*)(void) " << format("0x%016x", Addr) << "\n");
+    LLVM_DEBUG(dbgs() << "Calling int(*)(void) " << format("0x%016x", Addr)
+                      << "\n");
     return callB<exec::CallIntVoid>(Addr);
   }
 
@@ -495,16 +499,16 @@
   /// return its result.
   Expected<int> callMain(JITTargetAddress Addr,
                          const std::vector<std::string> &Args) {
-    DEBUG(dbgs() << "Calling int(*)(int, char*[]) " << format("0x%016x", Addr)
-                 << "\n");
+    LLVM_DEBUG(dbgs() << "Calling int(*)(int, char*[]) "
+                      << format("0x%016x", Addr) << "\n");
     return callB<exec::CallMain>(Addr, Args);
   }
 
   /// Call the void() function at the given address in the target and wait for
   /// it to finish.
   Error callVoidVoid(JITTargetAddress Addr) {
-    DEBUG(dbgs() << "Calling void(*)(void) " << format("0x%016x", Addr)
-                 << "\n");
+    LLVM_DEBUG(dbgs() << "Calling void(*)(void) " << format("0x%016x", Addr)
+                      << "\n");
     return callB<exec::CallVoidVoid>(Addr);
   }
 
@@ -531,12 +535,14 @@
 
   Expected<RemoteCompileCallbackManager &>
   enableCompileCallbacks(JITTargetAddress ErrorHandlerAddress) {
+    assert(!CallbackManager && "CallbackManager already obtained");
+
     // Emit the resolver block on the JIT server.
     if (auto Err = callB<stubs::EmitResolverBlock>())
       return std::move(Err);
 
     // Create the callback manager.
-    CallbackManager.emplace(*this, ErrorHandlerAddress);
+    CallbackManager.emplace(*this, ES, ErrorHandlerAddress);
     RemoteCompileCallbackManager &Mgr = *CallbackManager;
     return Mgr;
   }
@@ -554,10 +560,10 @@
   Error terminateSession() { return callB<utils::TerminateSession>(); }
 
 private:
-  OrcRemoteTargetClient(rpc::RawByteChannel &Channel,
-                        std::function<void(Error)> ReportError, Error &Err)
+  OrcRemoteTargetClient(rpc::RawByteChannel &Channel, ExecutionSession &ES,
+                        Error &Err)
       : rpc::SingleThreadedRPCEndpoint<rpc::RawByteChannel>(Channel, true),
-        ReportError(std::move(ReportError)) {
+        ES(ES) {
     ErrorAsOutParameter EAO(&Err);
 
     addHandler<utils::RequestCompile>(
@@ -577,7 +583,7 @@
 
   void deregisterEHFrames(JITTargetAddress Addr, uint32_t Size) {
     if (auto Err = callB<eh::RegisterEHFrames>(Addr, Size))
-      ReportError(std::move(Err));
+      ES.reportError(std::move(Err));
   }
 
   void destroyRemoteAllocator(ResourceIdMgr::ResourceId Id) {
@@ -592,7 +598,7 @@
   void destroyIndirectStubsManager(ResourceIdMgr::ResourceId Id) {
     IndirectStubOwnerIds.release(Id);
     if (auto Err = callB<stubs::DestroyIndirectStubsOwner>(Id))
-      ReportError(std::move(Err));
+      ES.reportError(std::move(Err));
   }
 
   Expected<std::tuple<JITTargetAddress, JITTargetAddress, uint32_t>>
@@ -625,7 +631,7 @@
     if (auto AddrOrErr = callB<mem::ReserveMem>(Id, Size, Align))
       return *AddrOrErr;
     else {
-      ReportError(AddrOrErr.takeError());
+      ES.reportError(AddrOrErr.takeError());
       return 0;
     }
   }
@@ -633,7 +639,7 @@
   bool setProtections(ResourceIdMgr::ResourceId Id,
                       JITTargetAddress RemoteSegAddr, unsigned ProtFlags) {
     if (auto Err = callB<mem::SetProtections>(Id, RemoteSegAddr, ProtFlags)) {
-      ReportError(std::move(Err));
+      ES.reportError(std::move(Err));
       return true;
     } else
       return false;
@@ -641,7 +647,7 @@
 
   bool writeMem(JITTargetAddress Addr, const char *Src, uint64_t Size) {
     if (auto Err = callB<mem::WriteMem>(DirectBufferWriter(Src, Addr, Size))) {
-      ReportError(std::move(Err));
+      ES.reportError(std::move(Err));
       return true;
     } else
       return false;
@@ -653,6 +659,7 @@
 
   static Error doNothing() { return Error::success(); }
 
+  ExecutionSession &ES;
   std::function<void(Error)> ReportError;
   std::string RemoteTargetTriple;
   uint32_t RemotePointerSize = 0;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
index cf419d3..acbc168 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetServer.h
@@ -161,9 +161,9 @@
     IntVoidFnTy Fn =
         reinterpret_cast<IntVoidFnTy>(static_cast<uintptr_t>(Addr));
 
-    DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
+    LLVM_DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
     int Result = Fn();
-    DEBUG(dbgs() << "  Result = " << Result << "\n");
+    LLVM_DEBUG(dbgs() << "  Result = " << Result << "\n");
 
     return Result;
   }
@@ -180,15 +180,13 @@
     for (auto &Arg : Args)
       ArgV[Idx++] = Arg.c_str();
     ArgV[ArgC] = 0;
-    DEBUG(
-      for (int Idx = 0; Idx < ArgC; ++Idx) {
-        llvm::dbgs() << "Arg " << Idx << ": " << ArgV[Idx] << "\n";
-      }
-    );
+    LLVM_DEBUG(for (int Idx = 0; Idx < ArgC; ++Idx) {
+      llvm::dbgs() << "Arg " << Idx << ": " << ArgV[Idx] << "\n";
+    });
 
-    DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
+    LLVM_DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
     int Result = Fn(ArgC, ArgV.get());
-    DEBUG(dbgs() << "  Result = " << Result << "\n");
+    LLVM_DEBUG(dbgs() << "  Result = " << Result << "\n");
 
     return Result;
   }
@@ -199,9 +197,9 @@
     VoidVoidFnTy Fn =
         reinterpret_cast<VoidVoidFnTy>(static_cast<uintptr_t>(Addr));
 
-    DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
+    LLVM_DEBUG(dbgs() << "  Calling " << format("0x%016x", Addr) << "\n");
     Fn();
-    DEBUG(dbgs() << "  Complete.\n");
+    LLVM_DEBUG(dbgs() << "  Complete.\n");
 
     return Error::success();
   }
@@ -211,7 +209,7 @@
     if (I != Allocators.end())
       return errorCodeToError(
                orcError(OrcErrorCode::RemoteAllocatorIdAlreadyInUse));
-    DEBUG(dbgs() << "  Created allocator " << Id << "\n");
+    LLVM_DEBUG(dbgs() << "  Created allocator " << Id << "\n");
     Allocators[Id] = Allocator();
     return Error::success();
   }
@@ -221,15 +219,16 @@
     if (I != IndirectStubsOwners.end())
       return errorCodeToError(
                orcError(OrcErrorCode::RemoteIndirectStubsOwnerIdAlreadyInUse));
-    DEBUG(dbgs() << "  Create indirect stubs owner " << Id << "\n");
+    LLVM_DEBUG(dbgs() << "  Create indirect stubs owner " << Id << "\n");
     IndirectStubsOwners[Id] = ISBlockOwnerList();
     return Error::success();
   }
 
   Error handleDeregisterEHFrames(JITTargetAddress TAddr, uint32_t Size) {
     uint8_t *Addr = reinterpret_cast<uint8_t *>(static_cast<uintptr_t>(TAddr));
-    DEBUG(dbgs() << "  Registering EH frames at " << format("0x%016x", TAddr)
-                 << ", Size = " << Size << " bytes\n");
+    LLVM_DEBUG(dbgs() << "  Registering EH frames at "
+                      << format("0x%016x", TAddr) << ", Size = " << Size
+                      << " bytes\n");
     EHFramesDeregister(Addr, Size);
     return Error::success();
   }
@@ -240,7 +239,7 @@
       return errorCodeToError(
                orcError(OrcErrorCode::RemoteAllocatorDoesNotExist));
     Allocators.erase(I);
-    DEBUG(dbgs() << "  Destroyed allocator " << Id << "\n");
+    LLVM_DEBUG(dbgs() << "  Destroyed allocator " << Id << "\n");
     return Error::success();
   }
 
@@ -256,8 +255,8 @@
   Expected<std::tuple<JITTargetAddress, JITTargetAddress, uint32_t>>
   handleEmitIndirectStubs(ResourceIdMgr::ResourceId Id,
                           uint32_t NumStubsRequired) {
-    DEBUG(dbgs() << "  ISMgr " << Id << " request " << NumStubsRequired
-                 << " stubs.\n");
+    LLVM_DEBUG(dbgs() << "  ISMgr " << Id << " request " << NumStubsRequired
+                      << " stubs.\n");
 
     auto StubOwnerItr = IndirectStubsOwners.find(Id);
     if (StubOwnerItr == IndirectStubsOwners.end())
@@ -328,8 +327,8 @@
 
   Expected<JITTargetAddress> handleGetSymbolAddress(const std::string &Name) {
     JITTargetAddress Addr = SymbolLookup(Name);
-    DEBUG(dbgs() << "  Symbol '" << Name << "' =  " << format("0x%016x", Addr)
-                 << "\n");
+    LLVM_DEBUG(dbgs() << "  Symbol '" << Name
+                      << "' =  " << format("0x%016x", Addr) << "\n");
     return Addr;
   }
 
@@ -340,12 +339,13 @@
     uint32_t PageSize = sys::Process::getPageSize();
     uint32_t TrampolineSize = TargetT::TrampolineSize;
     uint32_t IndirectStubSize = TargetT::IndirectStubsInfo::StubSize;
-    DEBUG(dbgs() << "  Remote info:\n"
-                 << "    triple             = '" << ProcessTriple << "'\n"
-                 << "    pointer size       = " << PointerSize << "\n"
-                 << "    page size          = " << PageSize << "\n"
-                 << "    trampoline size    = " << TrampolineSize << "\n"
-                 << "    indirect stub size = " << IndirectStubSize << "\n");
+    LLVM_DEBUG(dbgs() << "  Remote info:\n"
+                      << "    triple             = '" << ProcessTriple << "'\n"
+                      << "    pointer size       = " << PointerSize << "\n"
+                      << "    page size          = " << PageSize << "\n"
+                      << "    trampoline size    = " << TrampolineSize << "\n"
+                      << "    indirect stub size = " << IndirectStubSize
+                      << "\n");
     return std::make_tuple(ProcessTriple, PointerSize, PageSize, TrampolineSize,
                            IndirectStubSize);
   }
@@ -354,8 +354,8 @@
                                                uint64_t Size) {
     uint8_t *Src = reinterpret_cast<uint8_t *>(static_cast<uintptr_t>(RSrc));
 
-    DEBUG(dbgs() << "  Reading " << Size << " bytes from "
-                 << format("0x%016x", RSrc) << "\n");
+    LLVM_DEBUG(dbgs() << "  Reading " << Size << " bytes from "
+                      << format("0x%016x", RSrc) << "\n");
 
     std::vector<uint8_t> Buffer;
     Buffer.resize(Size);
@@ -367,8 +367,9 @@
 
   Error handleRegisterEHFrames(JITTargetAddress TAddr, uint32_t Size) {
     uint8_t *Addr = reinterpret_cast<uint8_t *>(static_cast<uintptr_t>(TAddr));
-    DEBUG(dbgs() << "  Registering EH frames at " << format("0x%016x", TAddr)
-                 << ", Size = " << Size << " bytes\n");
+    LLVM_DEBUG(dbgs() << "  Registering EH frames at "
+                      << format("0x%016x", TAddr) << ", Size = " << Size
+                      << " bytes\n");
     EHFramesRegister(Addr, Size);
     return Error::success();
   }
@@ -384,8 +385,9 @@
     if (auto Err = Allocator.allocate(LocalAllocAddr, Size, Align))
       return std::move(Err);
 
-    DEBUG(dbgs() << "  Allocator " << Id << " reserved " << LocalAllocAddr
-                 << " (" << Size << " bytes, alignment " << Align << ")\n");
+    LLVM_DEBUG(dbgs() << "  Allocator " << Id << " reserved " << LocalAllocAddr
+                      << " (" << Size << " bytes, alignment " << Align
+                      << ")\n");
 
     JITTargetAddress AllocAddr = static_cast<JITTargetAddress>(
         reinterpret_cast<uintptr_t>(LocalAllocAddr));
@@ -401,10 +403,11 @@
                orcError(OrcErrorCode::RemoteAllocatorDoesNotExist));
     auto &Allocator = I->second;
     void *LocalAddr = reinterpret_cast<void *>(static_cast<uintptr_t>(Addr));
-    DEBUG(dbgs() << "  Allocator " << Id << " set permissions on " << LocalAddr
-                 << " to " << (Flags & sys::Memory::MF_READ ? 'R' : '-')
-                 << (Flags & sys::Memory::MF_WRITE ? 'W' : '-')
-                 << (Flags & sys::Memory::MF_EXEC ? 'X' : '-') << "\n");
+    LLVM_DEBUG(dbgs() << "  Allocator " << Id << " set permissions on "
+                      << LocalAddr << " to "
+                      << (Flags & sys::Memory::MF_READ ? 'R' : '-')
+                      << (Flags & sys::Memory::MF_WRITE ? 'W' : '-')
+                      << (Flags & sys::Memory::MF_EXEC ? 'X' : '-') << "\n");
     return Allocator.setProtections(LocalAddr, Flags);
   }
 
@@ -414,14 +417,14 @@
   }
 
   Error handleWriteMem(DirectBufferWriter DBW) {
-    DEBUG(dbgs() << "  Writing " << DBW.getSize() << " bytes to "
-                 << format("0x%016x", DBW.getDst()) << "\n");
+    LLVM_DEBUG(dbgs() << "  Writing " << DBW.getSize() << " bytes to "
+                      << format("0x%016x", DBW.getDst()) << "\n");
     return Error::success();
   }
 
   Error handleWritePtr(JITTargetAddress Addr, JITTargetAddress PtrVal) {
-    DEBUG(dbgs() << "  Writing pointer *" << format("0x%016x", Addr) << " = "
-                 << format("0x%016x", PtrVal) << "\n");
+    LLVM_DEBUG(dbgs() << "  Writing pointer *" << format("0x%016x", Addr)
+                      << " = " << format("0x%016x", PtrVal) << "\n");
     uintptr_t *Ptr =
         reinterpret_cast<uintptr_t *>(static_cast<uintptr_t>(Addr));
     *Ptr = static_cast<uintptr_t>(PtrVal);
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCSerialization.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
index 569c506..1e5f6ce 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCSerialization.h
@@ -14,7 +14,10 @@
 #include "llvm/Support/thread.h"
 #include <map>
 #include <mutex>
+#include <set>
 #include <sstream>
+#include <string>
+#include <vector>
 
 namespace llvm {
 namespace orc {
@@ -205,6 +208,42 @@
 template <typename T>
 std::string RPCTypeName<std::vector<T>>::Name;
 
+template <typename T> class RPCTypeName<std::set<T>> {
+public:
+  static const char *getName() {
+    std::lock_guard<std::mutex> Lock(NameMutex);
+    if (Name.empty())
+      raw_string_ostream(Name)
+          << "std::set<" << RPCTypeName<T>::getName() << ">";
+    return Name.data();
+  }
+
+private:
+  static std::mutex NameMutex;
+  static std::string Name;
+};
+
+template <typename T> std::mutex RPCTypeName<std::set<T>>::NameMutex;
+template <typename T> std::string RPCTypeName<std::set<T>>::Name;
+
+template <typename K, typename V> class RPCTypeName<std::map<K, V>> {
+public:
+  static const char *getName() {
+    std::lock_guard<std::mutex> Lock(NameMutex);
+    if (Name.empty())
+      raw_string_ostream(Name)
+          << "std::map<" << RPCTypeNameSequence<K, V>() << ">";
+    return Name.data();
+  }
+
+private:
+  static std::mutex NameMutex;
+  static std::string Name;
+};
+
+template <typename K, typename V>
+std::mutex RPCTypeName<std::map<K, V>>::NameMutex;
+template <typename K, typename V> std::string RPCTypeName<std::map<K, V>>::Name;
 
 /// The SerializationTraits<ChannelT, T> class describes how to serialize and
 /// deserialize an instance of type T to/from an abstract channel of type
@@ -527,15 +566,20 @@
 };
 
 /// SerializationTraits default specialization for std::pair.
-template <typename ChannelT, typename T1, typename T2>
-class SerializationTraits<ChannelT, std::pair<T1, T2>> {
+template <typename ChannelT, typename T1, typename T2, typename T3, typename T4>
+class SerializationTraits<ChannelT, std::pair<T1, T2>, std::pair<T3, T4>> {
 public:
-  static Error serialize(ChannelT &C, const std::pair<T1, T2> &V) {
-    return serializeSeq(C, V.first, V.second);
+  static Error serialize(ChannelT &C, const std::pair<T3, T4> &V) {
+    if (auto Err = SerializationTraits<ChannelT, T1, T3>::serialize(C, V.first))
+      return Err;
+    return SerializationTraits<ChannelT, T2, T4>::serialize(C, V.second);
   }
 
-  static Error deserialize(ChannelT &C, std::pair<T1, T2> &V) {
-    return deserializeSeq(C, V.first, V.second);
+  static Error deserialize(ChannelT &C, std::pair<T3, T4> &V) {
+    if (auto Err =
+            SerializationTraits<ChannelT, T1, T3>::deserialize(C, V.first))
+      return Err;
+    return SerializationTraits<ChannelT, T2, T4>::deserialize(C, V.second);
   }
 };
 
@@ -589,6 +633,9 @@
 
   /// Deserialize a std::vector<T> to a std::vector<T>.
   static Error deserialize(ChannelT &C, std::vector<T> &V) {
+    assert(V.empty() &&
+           "Expected default-constructed vector to deserialize into");
+
     uint64_t Count = 0;
     if (auto Err = deserializeSeq(C, Count))
       return Err;
@@ -602,6 +649,92 @@
   }
 };
 
+template <typename ChannelT, typename T, typename T2>
+class SerializationTraits<ChannelT, std::set<T>, std::set<T2>> {
+public:
+  /// Serialize a std::set<T> from std::set<T2>.
+  static Error serialize(ChannelT &C, const std::set<T2> &S) {
+    if (auto Err = serializeSeq(C, static_cast<uint64_t>(S.size())))
+      return Err;
+
+    for (const auto &E : S)
+      if (auto Err = SerializationTraits<ChannelT, T, T2>::serialize(C, E))
+        return Err;
+
+    return Error::success();
+  }
+
+  /// Deserialize a std::set<T> to a std::set<T>.
+  static Error deserialize(ChannelT &C, std::set<T2> &S) {
+    assert(S.empty() && "Expected default-constructed set to deserialize into");
+
+    uint64_t Count = 0;
+    if (auto Err = deserializeSeq(C, Count))
+      return Err;
+
+    while (Count-- != 0) {
+      T2 Val;
+      if (auto Err = SerializationTraits<ChannelT, T, T2>::deserialize(C, Val))
+        return Err;
+
+      auto Added = S.insert(Val).second;
+      if (!Added)
+        return make_error<StringError>("Duplicate element in deserialized set",
+                                       orcError(OrcErrorCode::UnknownORCError));
+    }
+
+    return Error::success();
+  }
+};
+
+template <typename ChannelT, typename K, typename V, typename K2, typename V2>
+class SerializationTraits<ChannelT, std::map<K, V>, std::map<K2, V2>> {
+public:
+  /// Serialize a std::map<K, V> from std::map<K2, V2>.
+  static Error serialize(ChannelT &C, const std::map<K2, V2> &M) {
+    if (auto Err = serializeSeq(C, static_cast<uint64_t>(M.size())))
+      return Err;
+
+    for (const auto &E : M) {
+      if (auto Err =
+              SerializationTraits<ChannelT, K, K2>::serialize(C, E.first))
+        return Err;
+      if (auto Err =
+              SerializationTraits<ChannelT, V, V2>::serialize(C, E.second))
+        return Err;
+    }
+
+    return Error::success();
+  }
+
+  /// Deserialize a std::map<K, V> to a std::map<K, V>.
+  static Error deserialize(ChannelT &C, std::map<K2, V2> &M) {
+    assert(M.empty() && "Expected default-constructed map to deserialize into");
+
+    uint64_t Count = 0;
+    if (auto Err = deserializeSeq(C, Count))
+      return Err;
+
+    while (Count-- != 0) {
+      std::pair<K2, V2> Val;
+      if (auto Err =
+              SerializationTraits<ChannelT, K, K2>::deserialize(C, Val.first))
+        return Err;
+
+      if (auto Err =
+              SerializationTraits<ChannelT, V, V2>::deserialize(C, Val.second))
+        return Err;
+
+      auto Added = M.insert(Val).second;
+      if (!Added)
+        return make_error<StringError>("Duplicate element in deserialized map",
+                                       orcError(OrcErrorCode::UnknownORCError));
+    }
+
+    return Error::success();
+  }
+};
+
 } // end namespace rpc
 } // end namespace orc
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCUtils.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCUtils.h
index c278cb1..47bd90b 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCUtils.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RPCUtils.h
@@ -1631,7 +1631,7 @@
   return RPCAsyncDispatch<RPCEndpointT, Func>(Endpoint);
 }
 
-/// \brief Allows a set of asynchrounous calls to be dispatched, and then
+/// Allows a set of asynchrounous calls to be dispatched, and then
 ///        waited on as a group.
 class ParallelCallGroup {
 public:
@@ -1640,7 +1640,7 @@
   ParallelCallGroup(const ParallelCallGroup &) = delete;
   ParallelCallGroup &operator=(const ParallelCallGroup &) = delete;
 
-  /// \brief Make as asynchronous call.
+  /// Make as asynchronous call.
   template <typename AsyncDispatcher, typename HandlerT, typename... ArgTs>
   Error call(const AsyncDispatcher &AsyncDispatch, HandlerT Handler,
              const ArgTs &... Args) {
@@ -1669,7 +1669,7 @@
     return AsyncDispatch(std::move(WrappedHandler), Args...);
   }
 
-  /// \brief Blocks until all calls have been completed and their return value
+  /// Blocks until all calls have been completed and their return value
   ///        handlers run.
   void wait() {
     std::unique_lock<std::mutex> Lock(M);
@@ -1683,21 +1683,21 @@
   uint32_t NumOutstandingCalls = 0;
 };
 
-/// @brief Convenience class for grouping RPC Functions into APIs that can be
+/// Convenience class for grouping RPC Functions into APIs that can be
 ///        negotiated as a block.
 ///
 template <typename... Funcs>
 class APICalls {
 public:
 
-  /// @brief Test whether this API contains Function F.
+  /// Test whether this API contains Function F.
   template <typename F>
   class Contains {
   public:
     static const bool value = false;
   };
 
-  /// @brief Negotiate all functions in this API.
+  /// Negotiate all functions in this API.
   template <typename RPCEndpoint>
   static Error negotiate(RPCEndpoint &R) {
     return Error::success();
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
index 8f0d9fa..6510976 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h
@@ -19,6 +19,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ExecutionEngine/JITSymbol.h"
 #include "llvm/ExecutionEngine/Orc/Core.h"
+#include "llvm/ExecutionEngine/Orc/Layer.h"
 #include "llvm/ExecutionEngine/Orc/Legacy.h"
 #include "llvm/ExecutionEngine/RuntimeDyld.h"
 #include "llvm/Object/ObjectFile.h"
@@ -35,13 +36,62 @@
 namespace llvm {
 namespace orc {
 
+class RTDyldObjectLinkingLayer2 : public ObjectLayer {
+public:
+  /// Functor for receiving object-loaded notifications.
+  using NotifyLoadedFunction =
+      std::function<void(VModuleKey, const object::ObjectFile &Obj,
+                         const RuntimeDyld::LoadedObjectInfo &)>;
+
+  /// Functor for receiving finalization notifications.
+  using NotifyFinalizedFunction = std::function<void(VModuleKey)>;
+
+  using GetMemoryManagerFunction =
+      std::function<std::shared_ptr<RuntimeDyld::MemoryManager>(VModuleKey)>;
+
+  /// Construct an ObjectLinkingLayer with the given NotifyLoaded,
+  ///        and NotifyFinalized functors.
+  RTDyldObjectLinkingLayer2(
+      ExecutionSession &ES, GetMemoryManagerFunction GetMemoryManager,
+      NotifyLoadedFunction NotifyLoaded = NotifyLoadedFunction(),
+      NotifyFinalizedFunction NotifyFinalized = NotifyFinalizedFunction());
+
+  /// Emit the object.
+  void emit(MaterializationResponsibility R, VModuleKey K,
+            std::unique_ptr<MemoryBuffer> O) override;
+
+  /// Map section addresses for the object associated with the
+  ///        VModuleKey K.
+  void mapSectionAddress(VModuleKey K, const void *LocalAddress,
+                         JITTargetAddress TargetAddr) const;
+
+  /// Set the 'ProcessAllSections' flag.
+  ///
+  /// If set to true, all sections in each object file will be allocated using
+  /// the memory manager, rather than just the sections required for execution.
+  ///
+  /// This is kludgy, and may be removed in the future.
+  void setProcessAllSections(bool ProcessAllSections) {
+    this->ProcessAllSections = ProcessAllSections;
+  }
+
+private:
+  mutable std::mutex RTDyldLayerMutex;
+  GetMemoryManagerFunction GetMemoryManager;
+  NotifyLoadedFunction NotifyLoaded;
+  NotifyFinalizedFunction NotifyFinalized;
+  bool ProcessAllSections;
+  std::map<VModuleKey, RuntimeDyld *> ActiveRTDylds;
+  std::map<VModuleKey, std::shared_ptr<RuntimeDyld::MemoryManager>> MemMgrs;
+};
+
 class RTDyldObjectLinkingLayerBase {
 public:
   using ObjectPtr = std::unique_ptr<MemoryBuffer>;
 
 protected:
 
-  /// @brief Holds an object to be allocated/linked as a unit in the JIT.
+  /// Holds an object to be allocated/linked as a unit in the JIT.
   ///
   /// An instance of this class will be created for each object added
   /// via JITObjectLayer::addObject. Deleting the instance (via
@@ -81,7 +131,7 @@
   };
 };
 
-/// @brief Bare bones object linking layer.
+/// Bare bones object linking layer.
 ///
 ///   This class is intended to be used as the base layer for a JIT. It allows
 /// object files to be loaded into memory, linked, and the addresses of their
@@ -92,13 +142,18 @@
 
   using RTDyldObjectLinkingLayerBase::ObjectPtr;
 
-  /// @brief Functor for receiving object-loaded notifications.
+  /// Functor for receiving object-loaded notifications.
   using NotifyLoadedFtor =
       std::function<void(VModuleKey, const object::ObjectFile &Obj,
                          const RuntimeDyld::LoadedObjectInfo &)>;
 
-  /// @brief Functor for receiving finalization notifications.
-  using NotifyFinalizedFtor = std::function<void(VModuleKey)>;
+  /// Functor for receiving finalization notifications.
+  using NotifyFinalizedFtor =
+      std::function<void(VModuleKey, const object::ObjectFile &Obj,
+                         const RuntimeDyld::LoadedObjectInfo &)>;
+
+  /// Functor for receiving deallocation notifications.
+  using NotifyFreedFtor = std::function<void(VModuleKey, const object::ObjectFile &Obj)>;
 
 private:
   using OwnedObject = object::OwningBinary<object::ObjectFile>;
@@ -110,21 +165,27 @@
                          OwnedObject Obj, MemoryManagerPtrT MemMgr,
                          std::shared_ptr<SymbolResolver> Resolver,
                          bool ProcessAllSections)
-        : MemMgr(std::move(MemMgr)),
+        : K(std::move(K)),
+          Parent(Parent),
+          MemMgr(std::move(MemMgr)),
           PFC(llvm::make_unique<PreFinalizeContents>(
-              Parent, std::move(K), std::move(Obj), std::move(Resolver),
+              std::move(Obj), std::move(Resolver),
               ProcessAllSections)) {
       buildInitialSymbolTable(PFC->Obj);
     }
 
     ~ConcreteLinkedObject() override {
+      if (this->Parent.NotifyFreed)
+        this->Parent.NotifyFreed(K, *ObjForNotify.getBinary());
+
       MemMgr->deregisterEHFrames();
     }
 
     Error finalize() override {
       assert(PFC && "mapSectionAddress called on finalized LinkedObject");
 
-      JITSymbolResolverAdapter ResolverAdapter(PFC->Parent.ES, *PFC->Resolver);
+      JITSymbolResolverAdapter ResolverAdapter(Parent.ES, *PFC->Resolver,
+					       nullptr);
       PFC->RTDyld = llvm::make_unique<RuntimeDyld>(*MemMgr, ResolverAdapter);
       PFC->RTDyld->setProcessAllSections(PFC->ProcessAllSections);
 
@@ -140,8 +201,8 @@
           SymbolTable[KV.first] = KV.second;
       }
 
-      if (PFC->Parent.NotifyLoaded)
-        PFC->Parent.NotifyLoaded(PFC->K, *PFC->Obj.getBinary(), *Info);
+      if (Parent.NotifyLoaded)
+        Parent.NotifyLoaded(K, *PFC->Obj.getBinary(), *Info);
 
       PFC->RTDyld->finalizeWithMemoryManagerLocking();
 
@@ -149,10 +210,12 @@
         return make_error<StringError>(PFC->RTDyld->getErrorString(),
                                        inconvertibleErrorCode());
 
-      if (PFC->Parent.NotifyFinalized)
-        PFC->Parent.NotifyFinalized(PFC->K);
+      if (Parent.NotifyFinalized)
+        Parent.NotifyFinalized(K, *PFC->Obj.getBinary(), *Info);
 
       // Release resources.
+      if (this->Parent.NotifyFreed)
+        ObjForNotify = std::move(PFC->Obj); // needed for callback
       PFC = nullptr;
       return Error::success();
     }
@@ -186,32 +249,37 @@
           consumeError(SymbolName.takeError());
           continue;
         }
+        // FIXME: Raise an error for bad symbols.
         auto Flags = JITSymbolFlags::fromObjectSymbol(Symbol);
+        if (!Flags) {
+          consumeError(Flags.takeError());
+          continue;
+        }
         SymbolTable.insert(
-          std::make_pair(*SymbolName, JITEvaluatedSymbol(0, Flags)));
+            std::make_pair(*SymbolName, JITEvaluatedSymbol(0, *Flags)));
       }
     }
 
     // Contains the information needed prior to finalization: the object files,
     // memory manager, resolver, and flags needed for RuntimeDyld.
     struct PreFinalizeContents {
-      PreFinalizeContents(RTDyldObjectLinkingLayer &Parent, VModuleKey K,
-                          OwnedObject Obj,
+      PreFinalizeContents(OwnedObject Obj,
                           std::shared_ptr<SymbolResolver> Resolver,
                           bool ProcessAllSections)
-          : Parent(Parent), K(std::move(K)), Obj(std::move(Obj)),
+          : Obj(std::move(Obj)),
             Resolver(std::move(Resolver)),
             ProcessAllSections(ProcessAllSections) {}
 
-      RTDyldObjectLinkingLayer &Parent;
-      VModuleKey K;
       OwnedObject Obj;
       std::shared_ptr<SymbolResolver> Resolver;
       bool ProcessAllSections;
       std::unique_ptr<RuntimeDyld> RTDyld;
     };
 
+    VModuleKey K;
+    RTDyldObjectLinkingLayer &Parent;
     MemoryManagerPtrT MemMgr;
+    OwnedObject ObjForNotify;
     std::unique_ptr<PreFinalizeContents> PFC;
   };
 
@@ -235,18 +303,21 @@
 
   using ResourcesGetter = std::function<Resources(VModuleKey)>;
 
-  /// @brief Construct an ObjectLinkingLayer with the given NotifyLoaded,
+  /// Construct an ObjectLinkingLayer with the given NotifyLoaded,
   ///        and NotifyFinalized functors.
   RTDyldObjectLinkingLayer(
       ExecutionSession &ES, ResourcesGetter GetResources,
       NotifyLoadedFtor NotifyLoaded = NotifyLoadedFtor(),
-      NotifyFinalizedFtor NotifyFinalized = NotifyFinalizedFtor())
+      NotifyFinalizedFtor NotifyFinalized = NotifyFinalizedFtor(),
+      NotifyFreedFtor NotifyFreed = NotifyFreedFtor())
       : ES(ES), GetResources(std::move(GetResources)),
         NotifyLoaded(std::move(NotifyLoaded)),
-        NotifyFinalized(std::move(NotifyFinalized)), ProcessAllSections(false) {
+        NotifyFinalized(std::move(NotifyFinalized)),
+        NotifyFreed(std::move(NotifyFreed)),
+        ProcessAllSections(false) {
   }
 
-  /// @brief Set the 'ProcessAllSections' flag.
+  /// Set the 'ProcessAllSections' flag.
   ///
   /// If set to true, all sections in each object file will be allocated using
   /// the memory manager, rather than just the sections required for execution.
@@ -256,7 +327,7 @@
     this->ProcessAllSections = ProcessAllSections;
   }
 
-  /// @brief Add an object to the JIT.
+  /// Add an object to the JIT.
   Error addObject(VModuleKey K, ObjectPtr ObjBuffer) {
 
     auto Obj =
@@ -275,7 +346,7 @@
     return Error::success();
   }
 
-  /// @brief Remove the object associated with VModuleKey K.
+  /// Remove the object associated with VModuleKey K.
   ///
   ///   All memory allocated for the object will be freed, and the sections and
   /// symbols it provided will no longer be available. No attempt is made to
@@ -290,7 +361,7 @@
     return Error::success();
   }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   /// @param Name The name of the symbol to search for.
   /// @param ExportedSymbolsOnly If true, search only for exported symbols.
   /// @return A handle for the given named symbol, if it exists.
@@ -304,7 +375,7 @@
     return nullptr;
   }
 
-  /// @brief Search for the given named symbol in the context of the loaded
+  /// Search for the given named symbol in the context of the loaded
   ///        object represented by the VModuleKey K.
   /// @param K The VModuleKey for the object to search in.
   /// @param Name The name of the symbol to search for.
@@ -317,7 +388,7 @@
     return LinkedObjects[K]->getSymbol(Name, ExportedSymbolsOnly);
   }
 
-  /// @brief Map section addresses for the object associated with the
+  /// Map section addresses for the object associated with the
   ///        VModuleKey K.
   void mapSectionAddress(VModuleKey K, const void *LocalAddress,
                          JITTargetAddress TargetAddr) {
@@ -325,7 +396,7 @@
     LinkedObjects[K]->mapSectionAddress(LocalAddress, TargetAddr);
   }
 
-  /// @brief Immediately emit and finalize the object represented by the given
+  /// Immediately emit and finalize the object represented by the given
   ///        VModuleKey.
   /// @param K VModuleKey for object to emit/finalize.
   Error emitAndFinalize(VModuleKey K) {
@@ -340,6 +411,7 @@
   ResourcesGetter GetResources;
   NotifyLoadedFtor NotifyLoaded;
   NotifyFinalizedFtor NotifyFinalized;
+  NotifyFreedFtor NotifyFreed;
   bool ProcessAllSections = false;
 };
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
index b95faaa..955e776 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/RemoteObjectLayer.h
@@ -322,7 +322,7 @@
             *this, &ThisT::lookupInLogicalDylib);
   }
 
-  /// @brief Add an object to the JIT.
+  /// Add an object to the JIT.
   ///
   /// @return A handle that can be used to refer to the loaded object (for
   ///         symbol searching, finalization, freeing memory, etc.).
@@ -340,26 +340,26 @@
       return HandleOrErr.takeError();
   }
 
-  /// @brief Remove the given object from the JIT.
+  /// Remove the given object from the JIT.
   Error removeObject(ObjHandleT H) {
     return this->Remote.template callB<RemoveObject>(H);
   }
 
-  /// @brief Search for the given named symbol.
+  /// Search for the given named symbol.
   JITSymbol findSymbol(StringRef Name, bool ExportedSymbolsOnly) {
     return remoteToJITSymbol(
              this->Remote.template callB<FindSymbol>(Name,
                                                      ExportedSymbolsOnly));
   }
 
-  /// @brief Search for the given named symbol within the given context.
+  /// Search for the given named symbol within the given context.
   JITSymbol findSymbolIn(ObjHandleT H, StringRef Name, bool ExportedSymbolsOnly) {
     return remoteToJITSymbol(
              this->Remote.template callB<FindSymbolIn>(H, Name,
                                                        ExportedSymbolsOnly));
   }
 
-  /// @brief Immediately emit and finalize the object with the given handle.
+  /// Immediately emit and finalize the object with the given handle.
   Error emitAndFinalize(ObjHandleT H) {
     return this->Remote.template callB<EmitAndFinalize>(H);
   }
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
index da40d1c..4c45cfd 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/Orc/SymbolStringPool.h
@@ -23,17 +23,20 @@
 
 class SymbolStringPtr;
 
-/// @brief String pool for symbol names used by the JIT.
+/// String pool for symbol names used by the JIT.
 class SymbolStringPool {
   friend class SymbolStringPtr;
 public:
-  /// @brief Create a symbol string pointer from the given string.
+  /// Destroy a SymbolStringPool.
+  ~SymbolStringPool();
+
+  /// Create a symbol string pointer from the given string.
   SymbolStringPtr intern(StringRef S);
 
-  /// @brief Remove from the pool any entries that are no longer referenced.
+  /// Remove from the pool any entries that are no longer referenced.
   void clearDeadEntries();
 
-  /// @brief Returns true if the pool is empty.
+  /// Returns true if the pool is empty.
   bool empty() const;
 private:
   using RefCountType = std::atomic<size_t>;
@@ -43,7 +46,7 @@
   PoolMap Pool;
 };
 
-/// @brief Pointer to a pooled string representing a symbol name.
+/// Pointer to a pooled string representing a symbol name.
 class SymbolStringPtr {
   friend class SymbolStringPool;
   friend bool operator==(const SymbolStringPtr &LHS,
@@ -109,6 +112,13 @@
   return LHS.S < RHS.S;
 }
 
+inline SymbolStringPool::~SymbolStringPool() {
+#ifndef NDEBUG
+  clearDeadEntries();
+  assert(Pool.empty() && "Dangling references at pool destruction time");
+#endif // NDEBUG
+}
+
 inline SymbolStringPtr SymbolStringPool::intern(StringRef S) {
   std::lock_guard<std::mutex> Lock(PoolMutex);
   PoolMap::iterator I;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/RTDyldMemoryManager.h b/linux-x64/clang/include/llvm/ExecutionEngine/RTDyldMemoryManager.h
index ee75202..23d651f 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/RTDyldMemoryManager.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/RTDyldMemoryManager.h
@@ -47,6 +47,9 @@
   /// newly loaded object.
   virtual void notifyObjectLoaded(ExecutionEngine *EE,
                                   const object::ObjectFile &) {}
+
+private:
+  void anchor() override;
 };
 
 // RuntimeDyld clients often want to handle the memory management of
@@ -142,6 +145,9 @@
   };
   typedef std::vector<EHFrame> EHFrameInfos;
   EHFrameInfos EHFrames;
+
+private:
+  void anchor() override;
 };
 
 // Create wrappers for C Binding types (see CBindingWrapping.h).
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
index 14da5af..5dd5add 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyld.h
@@ -65,7 +65,7 @@
   void reassignSectionAddress(unsigned SectionID, uint64_t Addr);
 
 public:
-  /// \brief Information about the loaded object.
+  /// Information about the loaded object.
   class LoadedObjectInfo : public llvm::LoadedObjectInfo {
     friend class RuntimeDyldImpl;
 
@@ -88,7 +88,7 @@
     ObjSectionToIDMap ObjSecToIDMap;
   };
 
-  /// \brief Memory Management.
+  /// Memory Management.
   class MemoryManager {
     friend class RuntimeDyld;
 
@@ -170,7 +170,7 @@
     bool FinalizationLocked = false;
   };
 
-  /// \brief Construct a RuntimeDyld instance.
+  /// Construct a RuntimeDyld instance.
   RuntimeDyld(MemoryManager &MemMgr, JITSymbolResolver &Resolver);
   RuntimeDyld(const RuntimeDyld &) = delete;
   RuntimeDyld &operator=(const RuntimeDyld &) = delete;
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
index de89f40..13fc5fd 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/RuntimeDyldChecker.h
@@ -27,7 +27,7 @@
 class RuntimeDyldCheckerImpl;
 class raw_ostream;
 
-/// \brief RuntimeDyld invariant checker for verifying that RuntimeDyld has
+/// RuntimeDyld invariant checker for verifying that RuntimeDyld has
 ///        correctly applied relocations.
 ///
 /// The RuntimeDyldChecker class evaluates expressions against an attached
@@ -74,22 +74,22 @@
                      MCInstPrinter *InstPrinter, raw_ostream &ErrStream);
   ~RuntimeDyldChecker();
 
-  // \brief Get the associated RTDyld instance.
+  // Get the associated RTDyld instance.
   RuntimeDyld& getRTDyld();
 
-  // \brief Get the associated RTDyld instance.
+  // Get the associated RTDyld instance.
   const RuntimeDyld& getRTDyld() const;
 
-  /// \brief Check a single expression against the attached RuntimeDyld
+  /// Check a single expression against the attached RuntimeDyld
   ///        instance.
   bool check(StringRef CheckExpr) const;
 
-  /// \brief Scan the given memory buffer for lines beginning with the string
+  /// Scan the given memory buffer for lines beginning with the string
   ///        in RulePrefix. The remainder of the line is passed to the check
   ///        method to be evaluated as an expression.
   bool checkAllRulesInBuffer(StringRef RulePrefix, MemoryBuffer *MemBuf) const;
 
-  /// \brief Returns the address of the requested section (or an error message
+  /// Returns the address of the requested section (or an error message
   ///        in the second element of the pair if the address cannot be found).
   ///
   /// if 'LocalAddress' is true, this returns the address of the section
@@ -99,7 +99,7 @@
                                                   StringRef SectionName,
                                                   bool LocalAddress);
 
-  /// \brief If there is a section at the given local address, return its load
+  /// If there is a section at the given local address, return its load
   ///        address, otherwise return none.
   Optional<uint64_t> getSectionLoadAddress(void *LocalAddress) const;
 
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/SectionMemoryManager.h b/linux-x64/clang/include/llvm/ExecutionEngine/SectionMemoryManager.h
index d76e371..3cf131c 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/SectionMemoryManager.h
+++ b/linux-x64/clang/include/llvm/ExecutionEngine/SectionMemoryManager.h
@@ -111,7 +111,7 @@
   void operator=(const SectionMemoryManager &) = delete;
   ~SectionMemoryManager() override;
 
-  /// \brief Allocates a memory block of (at least) the given size suitable for
+  /// Allocates a memory block of (at least) the given size suitable for
   /// executable code.
   ///
   /// The value of \p Alignment must be a power of two.  If \p Alignment is zero
@@ -120,7 +120,7 @@
                                unsigned SectionID,
                                StringRef SectionName) override;
 
-  /// \brief Allocates a memory block of (at least) the given size suitable for
+  /// Allocates a memory block of (at least) the given size suitable for
   /// executable code.
   ///
   /// The value of \p Alignment must be a power of two.  If \p Alignment is zero
@@ -129,7 +129,7 @@
                                unsigned SectionID, StringRef SectionName,
                                bool isReadOnly) override;
 
-  /// \brief Update section-specific memory permissions and other attributes.
+  /// Update section-specific memory permissions and other attributes.
   ///
   /// This method is called when object loading is complete and section page
   /// permissions can be applied.  It is up to the memory manager implementation
@@ -142,7 +142,7 @@
   /// \returns true if an error occurred, false otherwise.
   bool finalizeMemory(std::string *ErrMsg = nullptr) override;
 
-  /// \brief Invalidate instruction cache for code sections.
+  /// Invalidate instruction cache for code sections.
   ///
   /// Some platforms with separate data cache and instruction cache require
   /// explicit cache flush, otherwise JIT code manipulations (like resolved
@@ -182,6 +182,8 @@
   std::error_code applyMemoryGroupPermissions(MemoryGroup &MemGroup,
                                               unsigned Permissions);
 
+  void anchor() override;
+
   MemoryGroup CodeMem;
   MemoryGroup RWDataMem;
   MemoryGroup RODataMem;
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.h b/linux-x64/clang/include/llvm/IR/Attributes.h
index 660fc58..5aaaaf3 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.h
+++ b/linux-x64/clang/include/llvm/IR/Attributes.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief This file contains the simple types necessary to represent the
+/// This file contains the simple types necessary to represent the
 /// attributes associated with functions and their calls.
 //
 //===----------------------------------------------------------------------===//
@@ -22,6 +22,7 @@
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/iterator_range.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/PointerLikeTypeTraits.h"
 #include <bitset>
 #include <cassert>
@@ -43,7 +44,7 @@
 
 //===----------------------------------------------------------------------===//
 /// \class
-/// \brief Functions, function parameters, and return types can have attributes
+/// Functions, function parameters, and return types can have attributes
 /// to indicate how they should be treated by optimizations and code
 /// generation. This class represents one of those attributes. It's light-weight
 /// and should be passed around by-value.
@@ -70,7 +71,7 @@
     // IR-Level Attributes
     None,                  ///< No attributes have been set
     #define GET_ATTR_ENUM
-    #include "llvm/IR/Attributes.gen"
+    #include "llvm/IR/Attributes.inc"
     EndAttrKinds           ///< Sentinal value useful for loops
   };
 
@@ -86,12 +87,12 @@
   // Attribute Construction
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return a uniquified Attribute object.
+  /// Return a uniquified Attribute object.
   static Attribute get(LLVMContext &Context, AttrKind Kind, uint64_t Val = 0);
   static Attribute get(LLVMContext &Context, StringRef Kind,
                        StringRef Val = StringRef());
 
-  /// \brief Return a uniquified Attribute object that has the specific
+  /// Return a uniquified Attribute object that has the specific
   /// alignment set.
   static Attribute getWithAlignment(LLVMContext &Context, uint64_t Align);
   static Attribute getWithStackAlignment(LLVMContext &Context, uint64_t Align);
@@ -107,51 +108,51 @@
   // Attribute Accessors
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return true if the attribute is an Attribute::AttrKind type.
+  /// Return true if the attribute is an Attribute::AttrKind type.
   bool isEnumAttribute() const;
 
-  /// \brief Return true if the attribute is an integer attribute.
+  /// Return true if the attribute is an integer attribute.
   bool isIntAttribute() const;
 
-  /// \brief Return true if the attribute is a string (target-dependent)
+  /// Return true if the attribute is a string (target-dependent)
   /// attribute.
   bool isStringAttribute() const;
 
-  /// \brief Return true if the attribute is present.
+  /// Return true if the attribute is present.
   bool hasAttribute(AttrKind Val) const;
 
-  /// \brief Return true if the target-dependent attribute is present.
+  /// Return true if the target-dependent attribute is present.
   bool hasAttribute(StringRef Val) const;
 
-  /// \brief Return the attribute's kind as an enum (Attribute::AttrKind). This
+  /// Return the attribute's kind as an enum (Attribute::AttrKind). This
   /// requires the attribute to be an enum or integer attribute.
   Attribute::AttrKind getKindAsEnum() const;
 
-  /// \brief Return the attribute's value as an integer. This requires that the
+  /// Return the attribute's value as an integer. This requires that the
   /// attribute be an integer attribute.
   uint64_t getValueAsInt() const;
 
-  /// \brief Return the attribute's kind as a string. This requires the
+  /// Return the attribute's kind as a string. This requires the
   /// attribute to be a string attribute.
   StringRef getKindAsString() const;
 
-  /// \brief Return the attribute's value as a string. This requires the
+  /// Return the attribute's value as a string. This requires the
   /// attribute to be a string attribute.
   StringRef getValueAsString() const;
 
-  /// \brief Returns the alignment field of an attribute as a byte alignment
+  /// Returns the alignment field of an attribute as a byte alignment
   /// value.
   unsigned getAlignment() const;
 
-  /// \brief Returns the stack alignment field of an attribute as a byte
+  /// Returns the stack alignment field of an attribute as a byte
   /// alignment value.
   unsigned getStackAlignment() const;
 
-  /// \brief Returns the number of dereferenceable bytes from the
+  /// Returns the number of dereferenceable bytes from the
   /// dereferenceable attribute.
   uint64_t getDereferenceableBytes() const;
 
-  /// \brief Returns the number of dereferenceable_or_null bytes from the
+  /// Returns the number of dereferenceable_or_null bytes from the
   /// dereferenceable_or_null attribute.
   uint64_t getDereferenceableOrNullBytes() const;
 
@@ -159,27 +160,27 @@
   /// if not known).
   std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
 
-  /// \brief The Attribute is converted to a string of equivalent mnemonic. This
+  /// The Attribute is converted to a string of equivalent mnemonic. This
   /// is, presumably, for writing out the mnemonics for the assembly writer.
   std::string getAsString(bool InAttrGrp = false) const;
 
-  /// \brief Equality and non-equality operators.
+  /// Equality and non-equality operators.
   bool operator==(Attribute A) const { return pImpl == A.pImpl; }
   bool operator!=(Attribute A) const { return pImpl != A.pImpl; }
 
-  /// \brief Less-than operator. Useful for sorting the attributes list.
+  /// Less-than operator. Useful for sorting the attributes list.
   bool operator<(Attribute A) const;
 
   void Profile(FoldingSetNodeID &ID) const {
     ID.AddPointer(pImpl);
   }
 
-  /// \brief Return a raw pointer that uniquely identifies this attribute.
+  /// Return a raw pointer that uniquely identifies this attribute.
   void *getRawPointer() const {
     return pImpl;
   }
 
-  /// \brief Get an attribute from a raw pointer created by getRawPointer.
+  /// Get an attribute from a raw pointer created by getRawPointer.
   static Attribute fromRawPointer(void *RawPtr) {
     return Attribute(reinterpret_cast<AttributeImpl*>(RawPtr));
   }
@@ -289,7 +290,7 @@
 
 //===----------------------------------------------------------------------===//
 /// \class
-/// \brief Provide DenseMapInfo for AttributeSet.
+/// Provide DenseMapInfo for AttributeSet.
 template <> struct DenseMapInfo<AttributeSet> {
   static AttributeSet getEmptyKey() {
     auto Val = static_cast<uintptr_t>(-1);
@@ -313,7 +314,7 @@
 
 //===----------------------------------------------------------------------===//
 /// \class
-/// \brief This class holds the attributes for a function, its return value, and
+/// This class holds the attributes for a function, its return value, and
 /// its parameters. You access the attributes for each of them via an index into
 /// the AttributeList object. The function attributes are at index
 /// `AttributeList::FunctionIndex', the return value is at index
@@ -334,18 +335,18 @@
   friend class AttributeSetNode;
   template <typename Ty> friend struct DenseMapInfo;
 
-  /// \brief The attributes that we are managing. This can be null to represent
+  /// The attributes that we are managing. This can be null to represent
   /// the empty attributes list.
   AttributeListImpl *pImpl = nullptr;
 
 public:
-  /// \brief Create an AttributeList with the specified parameters in it.
+  /// Create an AttributeList with the specified parameters in it.
   static AttributeList get(LLVMContext &C,
                            ArrayRef<std::pair<unsigned, Attribute>> Attrs);
   static AttributeList get(LLVMContext &C,
                            ArrayRef<std::pair<unsigned, AttributeSet>> Attrs);
 
-  /// \brief Create an AttributeList from attribute sets for a function, its
+  /// Create an AttributeList from attribute sets for a function, its
   /// return value, and all of its arguments.
   static AttributeList get(LLVMContext &C, AttributeSet FnAttrs,
                            AttributeSet RetAttrs,
@@ -363,7 +364,7 @@
   // AttributeList Construction and Mutation
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return an AttributeList with the specified parameters in it.
+  /// Return an AttributeList with the specified parameters in it.
   static AttributeList get(LLVMContext &C, ArrayRef<AttributeList> Attrs);
   static AttributeList get(LLVMContext &C, unsigned Index,
                            ArrayRef<Attribute::AttrKind> Kinds);
@@ -372,12 +373,12 @@
   static AttributeList get(LLVMContext &C, unsigned Index,
                            const AttrBuilder &B);
 
-  /// \brief Add an attribute to the attribute set at the given index.
+  /// Add an attribute to the attribute set at the given index.
   /// Returns a new list because attribute lists are immutable.
   AttributeList addAttribute(LLVMContext &C, unsigned Index,
                              Attribute::AttrKind Kind) const;
 
-  /// \brief Add an attribute to the attribute set at the given index.
+  /// Add an attribute to the attribute set at the given index.
   /// Returns a new list because attribute lists are immutable.
   AttributeList addAttribute(LLVMContext &C, unsigned Index, StringRef Kind,
                              StringRef Value = StringRef()) const;
@@ -386,7 +387,7 @@
   /// Returns a new list because attribute lists are immutable.
   AttributeList addAttribute(LLVMContext &C, unsigned Index, Attribute A) const;
 
-  /// \brief Add attributes to the attribute set at the given index.
+  /// Add attributes to the attribute set at the given index.
   /// Returns a new list because attribute lists are immutable.
   AttributeList addAttributes(LLVMContext &C, unsigned Index,
                               const AttrBuilder &B) const;
@@ -418,70 +419,70 @@
     return addAttributes(C, ArgNo + FirstArgIndex, B);
   }
 
-  /// \brief Remove the specified attribute at the specified index from this
+  /// Remove the specified attribute at the specified index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeAttribute(LLVMContext &C, unsigned Index,
                                 Attribute::AttrKind Kind) const;
 
-  /// \brief Remove the specified attribute at the specified index from this
+  /// Remove the specified attribute at the specified index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeAttribute(LLVMContext &C, unsigned Index,
                                 StringRef Kind) const;
 
-  /// \brief Remove the specified attributes at the specified index from this
+  /// Remove the specified attributes at the specified index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeAttributes(LLVMContext &C, unsigned Index,
                                  const AttrBuilder &AttrsToRemove) const;
 
-  /// \brief Remove all attributes at the specified index from this
+  /// Remove all attributes at the specified index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeAttributes(LLVMContext &C, unsigned Index) const;
 
-  /// \brief Remove the specified attribute at the specified arg index from this
+  /// Remove the specified attribute at the specified arg index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeParamAttribute(LLVMContext &C, unsigned ArgNo,
                                      Attribute::AttrKind Kind) const {
     return removeAttribute(C, ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Remove the specified attribute at the specified arg index from this
+  /// Remove the specified attribute at the specified arg index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeParamAttribute(LLVMContext &C, unsigned ArgNo,
                                      StringRef Kind) const {
     return removeAttribute(C, ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Remove the specified attribute at the specified arg index from this
+  /// Remove the specified attribute at the specified arg index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeParamAttributes(LLVMContext &C, unsigned ArgNo,
                                       const AttrBuilder &AttrsToRemove) const {
     return removeAttributes(C, ArgNo + FirstArgIndex, AttrsToRemove);
   }
 
-  /// \brief Remove all attributes at the specified arg index from this
+  /// Remove all attributes at the specified arg index from this
   /// attribute list. Returns a new list because attribute lists are immutable.
   AttributeList removeParamAttributes(LLVMContext &C, unsigned ArgNo) const {
     return removeAttributes(C, ArgNo + FirstArgIndex);
   }
 
-  /// \Brief Add the dereferenceable attribute to the attribute set at the given
+  /// \brief Add the dereferenceable attribute to the attribute set at the given
   /// index. Returns a new list because attribute lists are immutable.
   AttributeList addDereferenceableAttr(LLVMContext &C, unsigned Index,
                                        uint64_t Bytes) const;
 
-  /// \Brief Add the dereferenceable attribute to the attribute set at the given
+  /// \brief Add the dereferenceable attribute to the attribute set at the given
   /// arg index. Returns a new list because attribute lists are immutable.
   AttributeList addDereferenceableParamAttr(LLVMContext &C, unsigned ArgNo,
                                             uint64_t Bytes) const {
     return addDereferenceableAttr(C, ArgNo + FirstArgIndex, Bytes);
   }
 
-  /// \brief Add the dereferenceable_or_null attribute to the attribute set at
+  /// Add the dereferenceable_or_null attribute to the attribute set at
   /// the given index. Returns a new list because attribute lists are immutable.
   AttributeList addDereferenceableOrNullAttr(LLVMContext &C, unsigned Index,
                                              uint64_t Bytes) const;
 
-  /// \brief Add the dereferenceable_or_null attribute to the attribute set at
+  /// Add the dereferenceable_or_null attribute to the attribute set at
   /// the given arg index. Returns a new list because attribute lists are
   /// immutable.
   AttributeList addDereferenceableOrNullParamAttr(LLVMContext &C,
@@ -508,102 +509,102 @@
   // AttributeList Accessors
   //===--------------------------------------------------------------------===//
 
-  /// \brief Retrieve the LLVM context.
+  /// Retrieve the LLVM context.
   LLVMContext &getContext() const;
 
-  /// \brief The attributes for the specified index are returned.
+  /// The attributes for the specified index are returned.
   AttributeSet getAttributes(unsigned Index) const;
 
-  /// \brief The attributes for the argument or parameter at the given index are
+  /// The attributes for the argument or parameter at the given index are
   /// returned.
   AttributeSet getParamAttributes(unsigned ArgNo) const;
 
-  /// \brief The attributes for the ret value are returned.
+  /// The attributes for the ret value are returned.
   AttributeSet getRetAttributes() const;
 
-  /// \brief The function attributes are returned.
+  /// The function attributes are returned.
   AttributeSet getFnAttributes() const;
 
-  /// \brief Return true if the attribute exists at the given index.
+  /// Return true if the attribute exists at the given index.
   bool hasAttribute(unsigned Index, Attribute::AttrKind Kind) const;
 
-  /// \brief Return true if the attribute exists at the given index.
+  /// Return true if the attribute exists at the given index.
   bool hasAttribute(unsigned Index, StringRef Kind) const;
 
-  /// \brief Return true if attribute exists at the given index.
+  /// Return true if attribute exists at the given index.
   bool hasAttributes(unsigned Index) const;
 
-  /// \brief Return true if the attribute exists for the given argument
+  /// Return true if the attribute exists for the given argument
   bool hasParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const {
     return hasAttribute(ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Return true if the attribute exists for the given argument
+  /// Return true if the attribute exists for the given argument
   bool hasParamAttr(unsigned ArgNo, StringRef Kind) const {
     return hasAttribute(ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Return true if attributes exists for the given argument
+  /// Return true if attributes exists for the given argument
   bool hasParamAttrs(unsigned ArgNo) const {
     return hasAttributes(ArgNo + FirstArgIndex);
   }
 
-  /// \brief Equivalent to hasAttribute(AttributeList::FunctionIndex, Kind) but
+  /// Equivalent to hasAttribute(AttributeList::FunctionIndex, Kind) but
   /// may be faster.
   bool hasFnAttribute(Attribute::AttrKind Kind) const;
 
-  /// \brief Equivalent to hasAttribute(AttributeList::FunctionIndex, Kind) but
+  /// Equivalent to hasAttribute(AttributeList::FunctionIndex, Kind) but
   /// may be faster.
   bool hasFnAttribute(StringRef Kind) const;
 
-  /// \brief Equivalent to hasAttribute(ArgNo + FirstArgIndex, Kind).
+  /// Equivalent to hasAttribute(ArgNo + FirstArgIndex, Kind).
   bool hasParamAttribute(unsigned ArgNo, Attribute::AttrKind Kind) const;
 
-  /// \brief Return true if the specified attribute is set for at least one
+  /// Return true if the specified attribute is set for at least one
   /// parameter or for the return value. If Index is not nullptr, the index
   /// of a parameter with the specified attribute is provided.
   bool hasAttrSomewhere(Attribute::AttrKind Kind,
                         unsigned *Index = nullptr) const;
 
-  /// \brief Return the attribute object that exists at the given index.
+  /// Return the attribute object that exists at the given index.
   Attribute getAttribute(unsigned Index, Attribute::AttrKind Kind) const;
 
-  /// \brief Return the attribute object that exists at the given index.
+  /// Return the attribute object that exists at the given index.
   Attribute getAttribute(unsigned Index, StringRef Kind) const;
 
-  /// \brief Return the attribute object that exists at the arg index.
+  /// Return the attribute object that exists at the arg index.
   Attribute getParamAttr(unsigned ArgNo, Attribute::AttrKind Kind) const {
     return getAttribute(ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Return the attribute object that exists at the given index.
+  /// Return the attribute object that exists at the given index.
   Attribute getParamAttr(unsigned ArgNo, StringRef Kind) const {
     return getAttribute(ArgNo + FirstArgIndex, Kind);
   }
 
-  /// \brief Return the alignment of the return value.
+  /// Return the alignment of the return value.
   unsigned getRetAlignment() const;
 
-  /// \brief Return the alignment for the specified function parameter.
+  /// Return the alignment for the specified function parameter.
   unsigned getParamAlignment(unsigned ArgNo) const;
 
-  /// \brief Get the stack alignment.
+  /// Get the stack alignment.
   unsigned getStackAlignment(unsigned Index) const;
 
-  /// \brief Get the number of dereferenceable bytes (or zero if unknown).
+  /// Get the number of dereferenceable bytes (or zero if unknown).
   uint64_t getDereferenceableBytes(unsigned Index) const;
 
-  /// \brief Get the number of dereferenceable bytes (or zero if unknown) of an
+  /// Get the number of dereferenceable bytes (or zero if unknown) of an
   /// arg.
   uint64_t getParamDereferenceableBytes(unsigned ArgNo) const {
     return getDereferenceableBytes(ArgNo + FirstArgIndex);
   }
 
-  /// \brief Get the number of dereferenceable_or_null bytes (or zero if
+  /// Get the number of dereferenceable_or_null bytes (or zero if
   /// unknown).
   uint64_t getDereferenceableOrNullBytes(unsigned Index) const;
 
-  /// \brief Get the number of dereferenceable_or_null bytes (or zero if
+  /// Get the number of dereferenceable_or_null bytes (or zero if
   /// unknown) of an arg.
   uint64_t getParamDereferenceableOrNullBytes(unsigned ArgNo) const {
     return getDereferenceableOrNullBytes(ArgNo + FirstArgIndex);
@@ -613,7 +614,7 @@
   std::pair<unsigned, Optional<unsigned>>
   getAllocSizeArgs(unsigned Index) const;
 
-  /// \brief Return the attributes at the index as a string.
+  /// Return the attributes at the index as a string.
   std::string getAsString(unsigned Index, bool InAttrGrp = false) const;
 
   //===--------------------------------------------------------------------===//
@@ -635,12 +636,12 @@
   bool operator==(const AttributeList &RHS) const { return pImpl == RHS.pImpl; }
   bool operator!=(const AttributeList &RHS) const { return pImpl != RHS.pImpl; }
 
-  /// \brief Return a raw pointer that uniquely identifies this attribute list.
+  /// Return a raw pointer that uniquely identifies this attribute list.
   void *getRawPointer() const {
     return pImpl;
   }
 
-  /// \brief Return true if there are no attributes.
+  /// Return true if there are no attributes.
   bool isEmpty() const { return pImpl == nullptr; }
 
   void dump() const;
@@ -648,7 +649,7 @@
 
 //===----------------------------------------------------------------------===//
 /// \class
-/// \brief Provide DenseMapInfo for AttributeList.
+/// Provide DenseMapInfo for AttributeList.
 template <> struct DenseMapInfo<AttributeList> {
   static AttributeList getEmptyKey() {
     auto Val = static_cast<uintptr_t>(-1);
@@ -674,7 +675,7 @@
 
 //===----------------------------------------------------------------------===//
 /// \class
-/// \brief This class is used in conjunction with the Attribute::get method to
+/// This class is used in conjunction with the Attribute::get method to
 /// create an Attribute object. The object itself is uniquified. The Builder's
 /// value, however, is not. So this can be used as a quick way to test for
 /// equality, presence of attributes, etc.
@@ -699,65 +700,65 @@
 
   void clear();
 
-  /// \brief Add an attribute to the builder.
+  /// Add an attribute to the builder.
   AttrBuilder &addAttribute(Attribute::AttrKind Val);
 
-  /// \brief Add the Attribute object to the builder.
+  /// Add the Attribute object to the builder.
   AttrBuilder &addAttribute(Attribute A);
 
-  /// \brief Add the target-dependent attribute to the builder.
+  /// Add the target-dependent attribute to the builder.
   AttrBuilder &addAttribute(StringRef A, StringRef V = StringRef());
 
-  /// \brief Remove an attribute from the builder.
+  /// Remove an attribute from the builder.
   AttrBuilder &removeAttribute(Attribute::AttrKind Val);
 
-  /// \brief Remove the attributes from the builder.
+  /// Remove the attributes from the builder.
   AttrBuilder &removeAttributes(AttributeList A, uint64_t WithoutIndex);
 
-  /// \brief Remove the target-dependent attribute to the builder.
+  /// Remove the target-dependent attribute to the builder.
   AttrBuilder &removeAttribute(StringRef A);
 
-  /// \brief Add the attributes from the builder.
+  /// Add the attributes from the builder.
   AttrBuilder &merge(const AttrBuilder &B);
 
-  /// \brief Remove the attributes from the builder.
+  /// Remove the attributes from the builder.
   AttrBuilder &remove(const AttrBuilder &B);
 
-  /// \brief Return true if the builder has any attribute that's in the
+  /// Return true if the builder has any attribute that's in the
   /// specified builder.
   bool overlaps(const AttrBuilder &B) const;
 
-  /// \brief Return true if the builder has the specified attribute.
+  /// Return true if the builder has the specified attribute.
   bool contains(Attribute::AttrKind A) const {
     assert((unsigned)A < Attribute::EndAttrKinds && "Attribute out of range!");
     return Attrs[A];
   }
 
-  /// \brief Return true if the builder has the specified target-dependent
+  /// Return true if the builder has the specified target-dependent
   /// attribute.
   bool contains(StringRef A) const;
 
-  /// \brief Return true if the builder has IR-level attributes.
+  /// Return true if the builder has IR-level attributes.
   bool hasAttributes() const;
 
-  /// \brief Return true if the builder has any attribute that's in the
+  /// Return true if the builder has any attribute that's in the
   /// specified attribute.
   bool hasAttributes(AttributeList A, uint64_t Index) const;
 
-  /// \brief Return true if the builder has an alignment attribute.
+  /// Return true if the builder has an alignment attribute.
   bool hasAlignmentAttr() const;
 
-  /// \brief Retrieve the alignment attribute, if it exists.
+  /// Retrieve the alignment attribute, if it exists.
   uint64_t getAlignment() const { return Alignment; }
 
-  /// \brief Retrieve the stack alignment attribute, if it exists.
+  /// Retrieve the stack alignment attribute, if it exists.
   uint64_t getStackAlignment() const { return StackAlignment; }
 
-  /// \brief Retrieve the number of dereferenceable bytes, if the
+  /// Retrieve the number of dereferenceable bytes, if the
   /// dereferenceable attribute exists (zero is returned otherwise).
   uint64_t getDereferenceableBytes() const { return DerefBytes; }
 
-  /// \brief Retrieve the number of dereferenceable_or_null bytes, if the
+  /// Retrieve the number of dereferenceable_or_null bytes, if the
   /// dereferenceable_or_null attribute exists (zero is returned otherwise).
   uint64_t getDereferenceableOrNullBytes() const { return DerefOrNullBytes; }
 
@@ -765,19 +766,19 @@
   /// doesn't exist, pair(0, 0) is returned.
   std::pair<unsigned, Optional<unsigned>> getAllocSizeArgs() const;
 
-  /// \brief This turns an int alignment (which must be a power of 2) into the
+  /// This turns an int alignment (which must be a power of 2) into the
   /// form used internally in Attribute.
   AttrBuilder &addAlignmentAttr(unsigned Align);
 
-  /// \brief This turns an int stack alignment (which must be a power of 2) into
+  /// This turns an int stack alignment (which must be a power of 2) into
   /// the form used internally in Attribute.
   AttrBuilder &addStackAlignmentAttr(unsigned Align);
 
-  /// \brief This turns the number of dereferenceable bytes into the form used
+  /// This turns the number of dereferenceable bytes into the form used
   /// internally in Attribute.
   AttrBuilder &addDereferenceableAttr(uint64_t Bytes);
 
-  /// \brief This turns the number of dereferenceable_or_null bytes into the
+  /// This turns the number of dereferenceable_or_null bytes into the
   /// form used internally in Attribute.
   AttrBuilder &addDereferenceableOrNullAttr(uint64_t Bytes);
 
@@ -789,7 +790,7 @@
   /// Attribute.getIntValue().
   AttrBuilder &addAllocSizeAttrFromRawRepr(uint64_t RawAllocSizeRepr);
 
-  /// \brief Return true if the builder contains no target-independent
+  /// Return true if the builder contains no target-independent
   /// attributes.
   bool empty() const { return Attrs.none(); }
 
@@ -822,14 +823,14 @@
 
 namespace AttributeFuncs {
 
-/// \brief Which attributes cannot be applied to a type.
+/// Which attributes cannot be applied to a type.
 AttrBuilder typeIncompatible(Type *Ty);
 
 /// \returns Return true if the two functions have compatible target-independent
 /// attributes for inlining purposes.
 bool areInlineCompatible(const Function &Caller, const Function &Callee);
 
-/// \brief Merge caller's and callee's attributes.
+/// Merge caller's and callee's attributes.
 void mergeAttributesForInlining(Function &Caller, const Function &Callee);
 
 } // end namespace AttributeFuncs
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.gen b/linux-x64/clang/include/llvm/IR/Attributes.inc
similarity index 96%
rename from linux-x64/clang/include/llvm/IR/Attributes.gen
rename to linux-x64/clang/include/llvm/IR/Attributes.inc
index b1fb805..661989a 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.gen
+++ b/linux-x64/clang/include/llvm/IR/Attributes.inc
@@ -45,6 +45,7 @@
 SanitizeHWAddress,
 SanitizeMemory,
 SanitizeThread,
+ShadowCallStack,
 Speculatable,
 StackAlignment,
 StackProtect,
@@ -107,6 +108,7 @@
     .Case("sanitize_hwaddress", Attribute::SanitizeHWAddress)
     .Case("sanitize_memory", Attribute::SanitizeMemory)
     .Case("sanitize_thread", Attribute::SanitizeThread)
+    .Case("shadowcallstack", Attribute::ShadowCallStack)
     .Case("speculatable", Attribute::Speculatable)
     .Case("alignstack", Attribute::StackAlignment)
     .Case("ssp", Attribute::StackProtect)
@@ -379,6 +381,11 @@
     return llvm::Attribute::SanitizeThread;
   }
 };
+struct ShadowCallStackAttr : EnumAttr {
+  static enum Attribute::AttrKind getKind() {
+    return llvm::Attribute::ShadowCallStack;
+  }
+};
 struct SpeculatableAttr : EnumAttr {
   static enum Attribute::AttrKind getKind() {
     return llvm::Attribute::Speculatable;
@@ -481,22 +488,25 @@
   Ret &= isEqual<SanitizeMemoryAttr>(Caller, Callee);
   Ret &= isEqual<SanitizeHWAddressAttr>(Caller, Callee);
   Ret &= isEqual<SafeStackAttr>(Caller, Callee);
+  Ret &= isEqual<ShadowCallStackAttr>(Caller, Callee);
 
   return Ret;
 }
 
 static inline void mergeFnAttrs(Function &Caller,
                                 const Function &Callee) {
+  setOR<NoImplicitFloatAttr>(Caller, Callee);
   setOR<NoJumpTablesAttr>(Caller, Callee);
   setOR<ProfileSampleAccurateAttr>(Caller, Callee);
   adjustCallerSSPLevel(Caller, Callee);
   adjustCallerStackProbes(Caller, Callee);
   adjustCallerStackProbeSize(Caller, Callee);
+  adjustMinLegalVectorWidth(Caller, Callee);
+  adjustNullPointerValidAttr(Caller, Callee);
   setAND<LessPreciseFPMADAttr>(Caller, Callee);
   setAND<NoInfsFPMathAttr>(Caller, Callee);
   setAND<NoNansFPMathAttr>(Caller, Callee);
   setAND<UnsafeFPMathAttr>(Caller, Callee);
-  setOR<NoImplicitFloatAttr>(Caller, Callee);
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/IR/Attributes.td b/linux-x64/clang/include/llvm/IR/Attributes.td
index 554f0df..39978c4 100644
--- a/linux-x64/clang/include/llvm/IR/Attributes.td
+++ b/linux-x64/clang/include/llvm/IR/Attributes.td
@@ -136,6 +136,9 @@
 /// Safe Stack protection.
 def SafeStack : EnumAttr<"safestack">;
 
+/// Shadow Call Stack protection.
+def ShadowCallStack : EnumAttr<"shadowcallstack">;
+
 /// Sign extended before/after call.
 def SExt : EnumAttr<"signext">;
 
@@ -211,6 +214,7 @@
 def : CompatRule<"isEqual<SanitizeMemoryAttr>">;
 def : CompatRule<"isEqual<SanitizeHWAddressAttr>">;
 def : CompatRule<"isEqual<SafeStackAttr>">;
+def : CompatRule<"isEqual<ShadowCallStackAttr>">;
 
 class MergeRule<string F> {
   // The name of the function called to merge the attributes of the caller and
@@ -231,3 +235,5 @@
 def : MergeRule<"adjustCallerSSPLevel">;
 def : MergeRule<"adjustCallerStackProbes">;
 def : MergeRule<"adjustCallerStackProbeSize">;
+def : MergeRule<"adjustMinLegalVectorWidth">;
+def : MergeRule<"adjustNullPointerValidAttr">;
diff --git a/linux-x64/clang/include/llvm/IR/AutoUpgrade.h b/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
index 3f406f0..8cf574c 100644
--- a/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
+++ b/linux-x64/clang/include/llvm/IR/AutoUpgrade.h
@@ -37,6 +37,10 @@
   /// intrinsic function with a call to the specified new function.
   void UpgradeIntrinsicCall(CallInst *CI, Function *NewFn);
 
+  // This upgrades the comment for objc retain release markers in inline asm
+  // calls
+  void UpgradeInlineAsmString(std::string *AsmStr);
+
   /// This is an auto-upgrade hook for any old intrinsic function syntaxes
   /// which need to have both the function updated as well as all calls updated
   /// to the new function. This should only be run in a post-processing fashion
@@ -51,6 +55,10 @@
   /// module is modified.
   bool UpgradeModuleFlags(Module &M);
 
+  /// This checks for objc retain release marker which should be upgraded. It
+  /// returns true if module is modified.
+  bool UpgradeRetainReleaseMarker(Module &M);
+
   void UpgradeSectionAttributes(Module &M);
 
   /// If the given TBAA tag uses the scalar TBAA format, create a new node
diff --git a/linux-x64/clang/include/llvm/IR/BasicBlock.h b/linux-x64/clang/include/llvm/IR/BasicBlock.h
index 77cfc97..1ee1997 100644
--- a/linux-x64/clang/include/llvm/IR/BasicBlock.h
+++ b/linux-x64/clang/include/llvm/IR/BasicBlock.h
@@ -41,7 +41,7 @@
 class TerminatorInst;
 class ValueSymbolTable;
 
-/// \brief LLVM Basic Block Representation
+/// LLVM Basic Block Representation
 ///
 /// This represents a single basic block in LLVM. A basic block is simply a
 /// container of instructions that execute sequentially. Basic blocks are Values
@@ -70,7 +70,7 @@
 
   void setParent(Function *parent);
 
-  /// \brief Constructor.
+  /// Constructor.
   ///
   /// If the function parameter is specified, the basic block is automatically
   /// inserted at either the end of the function (if InsertBefore is null), or
@@ -84,7 +84,7 @@
   BasicBlock &operator=(const BasicBlock &) = delete;
   ~BasicBlock();
 
-  /// \brief Get the context in which this basic block lives.
+  /// Get the context in which this basic block lives.
   LLVMContext &getContext() const;
 
   /// Instruction iterators...
@@ -93,7 +93,7 @@
   using reverse_iterator = InstListType::reverse_iterator;
   using const_reverse_iterator = InstListType::const_reverse_iterator;
 
-  /// \brief Creates a new BasicBlock.
+  /// Creates a new BasicBlock.
   ///
   /// If the Parent parameter is specified, the basic block is automatically
   /// inserted at either the end of the function (if InsertBefore is 0), or
@@ -104,12 +104,12 @@
     return new BasicBlock(Context, Name, Parent, InsertBefore);
   }
 
-  /// \brief Return the enclosing method, or null if none.
+  /// Return the enclosing method, or null if none.
   const Function *getParent() const { return Parent; }
         Function *getParent()       { return Parent; }
 
-  /// \brief Return the module owning the function this basic block belongs to,
-  /// or nullptr it the function does not have a module.
+  /// Return the module owning the function this basic block belongs to, or
+  /// nullptr if the function does not have a module.
   ///
   /// Note: this is undefined behavior if the block does not have a parent.
   const Module *getModule() const;
@@ -118,34 +118,34 @@
                             static_cast<const BasicBlock *>(this)->getModule());
   }
 
-  /// \brief Returns the terminator instruction if the block is well formed or
-  /// null if the block is not well formed.
+  /// Returns the terminator instruction if the block is well formed or null
+  /// if the block is not well formed.
   const TerminatorInst *getTerminator() const LLVM_READONLY;
   TerminatorInst *getTerminator() {
     return const_cast<TerminatorInst *>(
                         static_cast<const BasicBlock *>(this)->getTerminator());
   }
 
-  /// \brief Returns the call instruction calling @llvm.experimental.deoptimize
-  /// prior to the terminating return instruction of this basic block, if such a
-  /// call is present.  Otherwise, returns null.
+  /// Returns the call instruction calling \@llvm.experimental.deoptimize
+  /// prior to the terminating return instruction of this basic block, if such
+  /// a call is present.  Otherwise, returns null.
   const CallInst *getTerminatingDeoptimizeCall() const;
   CallInst *getTerminatingDeoptimizeCall() {
     return const_cast<CallInst *>(
          static_cast<const BasicBlock *>(this)->getTerminatingDeoptimizeCall());
   }
 
-  /// \brief Returns the call instruction marked 'musttail' prior to the
-  /// terminating return instruction of this basic block, if such a call is
-  /// present.  Otherwise, returns null.
+  /// Returns the call instruction marked 'musttail' prior to the terminating
+  /// return instruction of this basic block, if such a call is present.
+  /// Otherwise, returns null.
   const CallInst *getTerminatingMustTailCall() const;
   CallInst *getTerminatingMustTailCall() {
     return const_cast<CallInst *>(
            static_cast<const BasicBlock *>(this)->getTerminatingMustTailCall());
   }
 
-  /// \brief Returns a pointer to the first instruction in this block that is
-  /// not a PHINode instruction.
+  /// Returns a pointer to the first instruction in this block that is not a
+  /// PHINode instruction.
   ///
   /// When adding instructions to the beginning of the basic block, they should
   /// be added before the returned value, not before the first instruction,
@@ -156,23 +156,23 @@
                        static_cast<const BasicBlock *>(this)->getFirstNonPHI());
   }
 
-  /// \brief Returns a pointer to the first instruction in this block that is not
-  /// a PHINode or a debug intrinsic.
+  /// Returns a pointer to the first instruction in this block that is not a
+  /// PHINode or a debug intrinsic.
   const Instruction* getFirstNonPHIOrDbg() const;
   Instruction* getFirstNonPHIOrDbg() {
     return const_cast<Instruction *>(
                   static_cast<const BasicBlock *>(this)->getFirstNonPHIOrDbg());
   }
 
-  /// \brief Returns a pointer to the first instruction in this block that is not
-  /// a PHINode, a debug intrinsic, or a lifetime intrinsic.
+  /// Returns a pointer to the first instruction in this block that is not a
+  /// PHINode, a debug intrinsic, or a lifetime intrinsic.
   const Instruction* getFirstNonPHIOrDbgOrLifetime() const;
   Instruction* getFirstNonPHIOrDbgOrLifetime() {
     return const_cast<Instruction *>(
         static_cast<const BasicBlock *>(this)->getFirstNonPHIOrDbgOrLifetime());
   }
 
-  /// \brief Returns an iterator to the first instruction in this block that is
+  /// Returns an iterator to the first instruction in this block that is
   /// suitable for inserting a non-PHI instruction.
   ///
   /// In particular, it skips all PHIs and LandingPad instructions.
@@ -182,23 +182,35 @@
                                           ->getFirstInsertionPt().getNonConst();
   }
 
-  /// \brief Unlink 'this' from the containing function, but do not delete it.
+  /// Return a const iterator range over the instructions in the block, skipping
+  /// any debug instructions.
+  iterator_range<filter_iterator<BasicBlock::const_iterator,
+                                 std::function<bool(const Instruction &)>>>
+  instructionsWithoutDebug() const;
+
+  /// Return an iterator range over the instructions in the block, skipping any
+  /// debug instructions.
+  iterator_range<filter_iterator<BasicBlock::iterator,
+                                 std::function<bool(Instruction &)>>>
+  instructionsWithoutDebug();
+
+  /// Unlink 'this' from the containing function, but do not delete it.
   void removeFromParent();
 
-  /// \brief Unlink 'this' from the containing function and delete it.
+  /// Unlink 'this' from the containing function and delete it.
   ///
   // \returns an iterator pointing to the element after the erased one.
   SymbolTableList<BasicBlock>::iterator eraseFromParent();
 
-  /// \brief Unlink this basic block from its current function and insert it
-  /// into the function that \p MovePos lives in, right before \p MovePos.
+  /// Unlink this basic block from its current function and insert it into
+  /// the function that \p MovePos lives in, right before \p MovePos.
   void moveBefore(BasicBlock *MovePos);
 
-  /// \brief Unlink this basic block from its current function and insert it
+  /// Unlink this basic block from its current function and insert it
   /// right after \p MovePos in the function \p MovePos lives in.
   void moveAfter(BasicBlock *MovePos);
 
-  /// \brief Insert unlinked basic block into a function.
+  /// Insert unlinked basic block into a function.
   ///
   /// Inserts an unlinked basic block into \c Parent.  If \c InsertBefore is
   /// provided, inserts before that basic block, otherwise inserts at the end.
@@ -206,7 +218,7 @@
   /// \pre \a getParent() is \c nullptr.
   void insertInto(Function *Parent, BasicBlock *InsertBefore = nullptr);
 
-  /// \brief Return the predecessor of this block if it has a single predecessor
+  /// Return the predecessor of this block if it has a single predecessor
   /// block. Otherwise return a null pointer.
   const BasicBlock *getSinglePredecessor() const;
   BasicBlock *getSinglePredecessor() {
@@ -214,7 +226,7 @@
                  static_cast<const BasicBlock *>(this)->getSinglePredecessor());
   }
 
-  /// \brief Return the predecessor of this block if it has a unique predecessor
+  /// Return the predecessor of this block if it has a unique predecessor
   /// block. Otherwise return a null pointer.
   ///
   /// Note that unique predecessor doesn't mean single edge, there can be
@@ -226,7 +238,7 @@
                  static_cast<const BasicBlock *>(this)->getUniquePredecessor());
   }
 
-  /// \brief Return the successor of this block if it has a single successor.
+  /// Return the successor of this block if it has a single successor.
   /// Otherwise return a null pointer.
   ///
   /// This method is analogous to getSinglePredecessor above.
@@ -236,7 +248,7 @@
                    static_cast<const BasicBlock *>(this)->getSingleSuccessor());
   }
 
-  /// \brief Return the successor of this block if it has a unique successor.
+  /// Return the successor of this block if it has a unique successor.
   /// Otherwise return a null pointer.
   ///
   /// This method is analogous to getUniquePredecessor above.
@@ -310,28 +322,28 @@
   }
   iterator_range<phi_iterator> phis();
 
-  /// \brief Return the underlying instruction list container.
+  /// Return the underlying instruction list container.
   ///
   /// Currently you need to access the underlying instruction list container
   /// directly if you want to modify it.
   const InstListType &getInstList() const { return InstList; }
         InstListType &getInstList()       { return InstList; }
 
-  /// \brief Returns a pointer to a member of the instruction list.
+  /// Returns a pointer to a member of the instruction list.
   static InstListType BasicBlock::*getSublistAccess(Instruction*) {
     return &BasicBlock::InstList;
   }
 
-  /// \brief Returns a pointer to the symbol table if one exists.
+  /// Returns a pointer to the symbol table if one exists.
   ValueSymbolTable *getValueSymbolTable();
 
-  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast.
+  /// Methods for support type inquiry through isa, cast, and dyn_cast.
   static bool classof(const Value *V) {
     return V->getValueID() == Value::BasicBlockVal;
   }
 
-  /// \brief Cause all subinstructions to "let go" of all the references that
-  /// said subinstructions are maintaining.
+  /// Cause all subinstructions to "let go" of all the references that said
+  /// subinstructions are maintaining.
   ///
   /// This allows one to 'delete' a whole class at a time, even though there may
   /// be circular references... first all references are dropped, and all use
@@ -340,8 +352,8 @@
   /// except operator delete.
   void dropAllReferences();
 
-  /// \brief Notify the BasicBlock that the predecessor \p Pred is no longer
-  /// able to reach it.
+  /// Notify the BasicBlock that the predecessor \p Pred is no longer able to
+  /// reach it.
   ///
   /// This is actually not used to update the Predecessor list, but is actually
   /// used to update the PHI nodes that reside in the block.  Note that this
@@ -350,8 +362,7 @@
 
   bool canSplitPredecessors() const;
 
-  /// \brief Split the basic block into two basic blocks at the specified
-  /// instruction.
+  /// Split the basic block into two basic blocks at the specified instruction.
   ///
   /// Note that all instructions BEFORE the specified iterator stay as part of
   /// the original basic block, an unconditional branch is added to the original
@@ -371,37 +382,37 @@
     return splitBasicBlock(I->getIterator(), BBName);
   }
 
-  /// \brief Returns true if there are any uses of this basic block other than
+  /// Returns true if there are any uses of this basic block other than
   /// direct branches, switches, etc. to it.
   bool hasAddressTaken() const { return getSubclassDataFromValue() != 0; }
 
-  /// \brief Update all phi nodes in this basic block's successors to refer to
-  /// basic block \p New instead of to it.
+  /// Update all phi nodes in this basic block's successors to refer to basic
+  /// block \p New instead of to it.
   void replaceSuccessorsPhiUsesWith(BasicBlock *New);
 
-  /// \brief Return true if this basic block is an exception handling block.
+  /// Return true if this basic block is an exception handling block.
   bool isEHPad() const { return getFirstNonPHI()->isEHPad(); }
 
-  /// \brief Return true if this basic block is a landing pad.
+  /// Return true if this basic block is a landing pad.
   ///
   /// Being a ``landing pad'' means that the basic block is the destination of
   /// the 'unwind' edge of an invoke instruction.
   bool isLandingPad() const;
 
-  /// \brief Return the landingpad instruction associated with the landing pad.
+  /// Return the landingpad instruction associated with the landing pad.
   const LandingPadInst *getLandingPadInst() const;
   LandingPadInst *getLandingPadInst() {
     return const_cast<LandingPadInst *>(
                     static_cast<const BasicBlock *>(this)->getLandingPadInst());
   }
 
-  /// \brief Return true if it is legal to hoist instructions into this block.
+  /// Return true if it is legal to hoist instructions into this block.
   bool isLegalToHoistInto() const;
 
   Optional<uint64_t> getIrrLoopHeaderWeight() const;
 
 private:
-  /// \brief Increment the internal refcount of the number of BlockAddresses
+  /// Increment the internal refcount of the number of BlockAddresses
   /// referencing this BasicBlock by \p Amt.
   ///
   /// This is almost always 0, sometimes one possibly, but almost never 2, and
@@ -412,8 +423,8 @@
            "Refcount wrap-around");
   }
 
-  /// \brief Shadow Value::setValueSubclassData with a private forwarding method
-  /// so that any future subclasses cannot accidentally use it.
+  /// Shadow Value::setValueSubclassData with a private forwarding method so
+  /// that any future subclasses cannot accidentally use it.
   void setValueSubclassData(unsigned short D) {
     Value::setValueSubclassData(D);
   }
@@ -422,6 +433,10 @@
 // Create wrappers for C Binding types (see CBindingWrapping.h).
 DEFINE_SIMPLE_CONVERSION_FUNCTIONS(BasicBlock, LLVMBasicBlockRef)
 
+/// Advance \p It while it points to a debug instruction and return the result.
+/// This assumes that \p It is not at the end of a block.
+BasicBlock::iterator skipDebugIntrinsics(BasicBlock::iterator It);
+
 } // end namespace llvm
 
 #endif // LLVM_IR_BASICBLOCK_H
diff --git a/linux-x64/clang/include/llvm/IR/CFG.h b/linux-x64/clang/include/llvm/IR/CFG.h
index e259e42..f4988e7 100644
--- a/linux-x64/clang/include/llvm/IR/CFG.h
+++ b/linux-x64/clang/include/llvm/IR/CFG.h
@@ -107,6 +107,9 @@
 inline bool pred_empty(const BasicBlock *BB) {
   return pred_begin(BB) == pred_end(BB);
 }
+inline unsigned pred_size(const BasicBlock *BB) {
+  return std::distance(pred_begin(BB), pred_end(BB));
+}
 inline pred_range predecessors(BasicBlock *BB) {
   return pred_range(pred_begin(BB), pred_end(BB));
 }
@@ -140,6 +143,9 @@
 inline bool succ_empty(const BasicBlock *BB) {
   return succ_begin(BB) == succ_end(BB);
 }
+inline unsigned succ_size(const BasicBlock *BB) {
+  return std::distance(succ_begin(BB), succ_end(BB));
+}
 inline succ_range successors(BasicBlock *BB) {
   return succ_range(succ_begin(BB), succ_end(BB));
 }
diff --git a/linux-x64/clang/include/llvm/IR/CallSite.h b/linux-x64/clang/include/llvm/IR/CallSite.h
index 5b10da8..2162ccb 100644
--- a/linux-x64/clang/include/llvm/IR/CallSite.h
+++ b/linux-x64/clang/include/llvm/IR/CallSite.h
@@ -637,7 +637,8 @@
     if (hasRetAttr(Attribute::NonNull))
       return true;
     else if (getDereferenceableBytes(AttributeList::ReturnIndex) > 0 &&
-             getType()->getPointerAddressSpace() == 0)
+             !NullPointerIsDefined(getCaller(),
+                                   getType()->getPointerAddressSpace()))
       return true;
 
     return false;
diff --git a/linux-x64/clang/include/llvm/IR/CallingConv.h b/linux-x64/clang/include/llvm/IR/CallingConv.h
index 84fe836..b9c02d7 100644
--- a/linux-x64/clang/include/llvm/IR/CallingConv.h
+++ b/linux-x64/clang/include/llvm/IR/CallingConv.h
@@ -26,7 +26,7 @@
 
   /// A set of enums which specify the assigned numeric values for known llvm
   /// calling conventions.
-  /// @brief LLVM Calling Convention Representation
+  /// LLVM Calling Convention Representation
   enum {
     /// C - The default llvm calling convention, compatible with C.  This
     /// convention is the only calling convention that supports varargs calls.
@@ -139,11 +139,11 @@
     /// Intel_OCL_BI - Calling conventions for Intel OpenCL built-ins
     Intel_OCL_BI = 77,
 
-    /// \brief The C convention as specified in the x86-64 supplement to the
+    /// The C convention as specified in the x86-64 supplement to the
     /// System V ABI, used on most non-Windows systems.
     X86_64_SysV = 78,
 
-    /// \brief The C convention as implemented on Windows/x86-64 and
+    /// The C convention as implemented on Windows/x86-64 and
     /// AArch64. This convention differs from the more common
     /// \c X86_64_SysV convention in a number of ways, most notably in
     /// that XMM registers used to pass arguments are shadowed by GPRs,
@@ -153,17 +153,17 @@
     /// registers to variadic functions.
     Win64 = 79,
 
-    /// \brief MSVC calling convention that passes vectors and vector aggregates
+    /// MSVC calling convention that passes vectors and vector aggregates
     /// in SSE registers.
     X86_VectorCall = 80,
 
-    /// \brief Calling convention used by HipHop Virtual Machine (HHVM) to
+    /// Calling convention used by HipHop Virtual Machine (HHVM) to
     /// perform calls to and from translation cache, and for calling PHP
     /// functions.
     /// HHVM calling convention supports tail/sibling call elimination.
     HHVM = 81,
 
-    /// \brief HHVM calling convention for invoking C/C++ helpers.
+    /// HHVM calling convention for invoking C/C++ helpers.
     HHVM_C = 82,
 
     /// X86_INTR - x86 hardware interrupt context. Callee may take one or two
diff --git a/linux-x64/clang/include/llvm/IR/Constant.h b/linux-x64/clang/include/llvm/IR/Constant.h
index 6048160..5fdf0ea 100644
--- a/linux-x64/clang/include/llvm/IR/Constant.h
+++ b/linux-x64/clang/include/llvm/IR/Constant.h
@@ -38,7 +38,7 @@
 /// structurally equivalent constants will always have the same address.
 /// Constants are created on demand as needed and never deleted: thus clients
 /// don't have to worry about the lifetime of the objects.
-/// @brief LLVM Constant Representation
+/// LLVM Constant Representation
 class Constant : public User {
 protected:
   Constant(Type *ty, ValueTy vty, Use *Ops, unsigned NumOps)
@@ -87,6 +87,10 @@
   /// floating-point constant with all NaN elements.
   bool isNaN() const;
 
+  /// Return true if this is a vector constant that includes any undefined
+  /// elements.
+  bool containsUndefElement() const;
+
   /// Return true if evaluation of this constant could trap. This is true for
   /// things like constant expressions that could divide by zero.
   bool canTrap() const;
@@ -153,7 +157,7 @@
 
   /// @returns the value for an integer or vector of integer constant of the
   /// given type that has all its bits set to true.
-  /// @brief Get the all ones value
+  /// Get the all ones value
   static Constant *getAllOnesValue(Type* Ty);
 
   /// Return the value for an integer or pointer constant, or a vector thereof,
diff --git a/linux-x64/clang/include/llvm/IR/ConstantRange.h b/linux-x64/clang/include/llvm/IR/ConstantRange.h
index 6889e26..1adda32 100644
--- a/linux-x64/clang/include/llvm/IR/ConstantRange.h
+++ b/linux-x64/clang/include/llvm/IR/ConstantRange.h
@@ -54,7 +54,7 @@
   /// Initialize a range to hold the single specified value.
   ConstantRange(APInt Value);
 
-  /// @brief Initialize a range of values explicitly. This will assert out if
+  /// Initialize a range of values explicitly. This will assert out if
   /// Lower==Upper and Lower != Min or Max value for its type. It will also
   /// assert out if the two APInt's are not the same bit width.
   ConstantRange(APInt Lower, APInt Upper);
diff --git a/linux-x64/clang/include/llvm/IR/Constants.h b/linux-x64/clang/include/llvm/IR/Constants.h
index 1a7596d..f9d5ebc 100644
--- a/linux-x64/clang/include/llvm/IR/Constants.h
+++ b/linux-x64/clang/include/llvm/IR/Constants.h
@@ -80,7 +80,7 @@
 //===----------------------------------------------------------------------===//
 /// This is the shared class of boolean and integer constants. This class
 /// represents both boolean and integral constants.
-/// @brief Class for constant integers.
+/// Class for constant integers.
 class ConstantInt final : public ConstantData {
   friend class Constant;
 
@@ -107,7 +107,7 @@
   /// to fit the type, unless isSigned is true, in which case the value will
   /// be interpreted as a 64-bit signed integer and sign-extended to fit
   /// the type.
-  /// @brief Get a ConstantInt for a specific value.
+  /// Get a ConstantInt for a specific value.
   static ConstantInt *get(IntegerType *Ty, uint64_t V,
                           bool isSigned = false);
 
@@ -115,7 +115,7 @@
   /// value V will be canonicalized to a an unsigned APInt. Accessing it with
   /// either getSExtValue() or getZExtValue() will yield a correctly sized and
   /// signed value for the type Ty.
-  /// @brief Get a ConstantInt for a specific signed value.
+  /// Get a ConstantInt for a specific signed value.
   static ConstantInt *getSigned(IntegerType *Ty, int64_t V);
   static Constant *getSigned(Type *Ty, int64_t V);
 
@@ -134,7 +134,7 @@
 
   /// Return the constant as an APInt value reference. This allows clients to
   /// obtain a full-precision copy of the value.
-  /// @brief Return the constant's value.
+  /// Return the constant's value.
   inline const APInt &getValue() const {
     return Val;
   }
@@ -145,7 +145,7 @@
   /// Return the constant as a 64-bit unsigned integer value after it
   /// has been zero extended as appropriate for the type of this constant. Note
   /// that this method can assert if the value does not fit in 64 bits.
-  /// @brief Return the zero extended value.
+  /// Return the zero extended value.
   inline uint64_t getZExtValue() const {
     return Val.getZExtValue();
   }
@@ -153,7 +153,7 @@
   /// Return the constant as a 64-bit integer value after it has been sign
   /// extended as appropriate for the type of this constant. Note that
   /// this method can assert if the value does not fit in 64 bits.
-  /// @brief Return the sign extended value.
+  /// Return the sign extended value.
   inline int64_t getSExtValue() const {
     return Val.getSExtValue();
   }
@@ -161,7 +161,7 @@
   /// A helper method that can be used to determine if the constant contained
   /// within is equal to a constant.  This only works for very small values,
   /// because this is all that can be represented with all types.
-  /// @brief Determine if this constant's value is same as an unsigned char.
+  /// Determine if this constant's value is same as an unsigned char.
   bool equalsInt(uint64_t V) const {
     return Val == V;
   }
@@ -181,7 +181,7 @@
   /// the signed version avoids callers having to convert a signed quantity
   /// to the appropriate unsigned type before calling the method.
   /// @returns true if V is a valid value for type Ty
-  /// @brief Determine if the value is in range for the given type.
+  /// Determine if the value is in range for the given type.
   static bool isValueValidForType(Type *Ty, uint64_t V);
   static bool isValueValidForType(Type *Ty, int64_t V);
 
@@ -197,7 +197,7 @@
   /// This is just a convenience method to make client code smaller for a
   /// common case. It also correctly performs the comparison without the
   /// potential for an assertion from getZExtValue().
-  /// @brief Determine if the value is one.
+  /// Determine if the value is one.
   bool isOne() const {
     return Val.isOneValue();
   }
@@ -205,7 +205,7 @@
   /// This function will return true iff every bit in this constant is set
   /// to true.
   /// @returns true iff this constant's bits are all set to true.
-  /// @brief Determine if the value is all ones.
+  /// Determine if the value is all ones.
   bool isMinusOne() const {
     return Val.isAllOnesValue();
   }
@@ -214,7 +214,7 @@
   /// value that may be represented by the constant's type.
   /// @returns true iff this is the largest value that may be represented
   /// by this type.
-  /// @brief Determine if the value is maximal.
+  /// Determine if the value is maximal.
   bool isMaxValue(bool isSigned) const {
     if (isSigned)
       return Val.isMaxSignedValue();
@@ -226,7 +226,7 @@
   /// value that may be represented by this constant's type.
   /// @returns true if this is the smallest value that may be represented by
   /// this type.
-  /// @brief Determine if the value is minimal.
+  /// Determine if the value is minimal.
   bool isMinValue(bool isSigned) const {
     if (isSigned)
       return Val.isMinSignedValue();
@@ -238,7 +238,7 @@
   /// active bits bigger than 64 bits or a value greater than the given uint64_t
   /// value.
   /// @returns true iff this constant is greater or equal to the given number.
-  /// @brief Determine if the value is greater or equal to the given number.
+  /// Determine if the value is greater or equal to the given number.
   bool uge(uint64_t Num) const {
     return Val.uge(Num);
   }
@@ -247,12 +247,12 @@
   /// return it, otherwise return the limit value.  This causes the value
   /// to saturate to the limit.
   /// @returns the min of the value of the constant and the specified value
-  /// @brief Get the constant's value with a saturation limit
+  /// Get the constant's value with a saturation limit
   uint64_t getLimitedValue(uint64_t Limit = ~0ULL) const {
     return Val.getLimitedValue(Limit);
   }
 
-  /// @brief Methods to support type inquiry through isa, cast, and dyn_cast.
+  /// Methods to support type inquiry through isa, cast, and dyn_cast.
   static bool classof(const Value *V) {
     return V->getValueID() == ConstantIntVal;
   }
@@ -698,9 +698,8 @@
   template <typename ElementTy>
   static Constant *get(LLVMContext &Context, ArrayRef<ElementTy> Elts) {
     const char *Data = reinterpret_cast<const char *>(Elts.data());
-    Type *Ty =
-        ArrayType::get(Type::getScalarTy<ElementTy>(Context), Elts.size());
-    return getImpl(StringRef(Data, Elts.size() * sizeof(ElementTy)), Ty);
+    return getRaw(StringRef(Data, Elts.size() * sizeof(ElementTy)), Elts.size(),
+                  Type::getScalarTy<ElementTy>(Context));
   }
 
   /// get() constructor - ArrayTy needs to be compatible with
@@ -710,6 +709,17 @@
     return ConstantDataArray::get(Context, makeArrayRef(Elts));
   }
 
+  /// get() constructor - Return a constant with array type with an element
+  /// count and element type matching the NumElements and ElementTy parameters
+  /// passed in. Note that this can return a ConstantAggregateZero object.
+  /// ElementTy needs to be one of i8/i16/i32/i64/float/double. Data is the
+  /// buffer containing the elements. Be careful to make sure Data uses the
+  /// right endianness, the buffer will be used as-is.
+  static Constant *getRaw(StringRef Data, uint64_t NumElements, Type *ElementTy) {
+    Type *Ty = ArrayType::get(ElementTy, NumElements);
+    return getImpl(Data, Ty);
+  }
+
   /// getFP() constructors - Return a constant with array type with an element
   /// count and element type of float with precision matching the number of
   /// bits in the ArrayRef passed in. (i.e. half for 16bits, float for 32bits,
@@ -815,7 +825,7 @@
   /// Return the ConstantTokenNone.
   static ConstantTokenNone *get(LLVMContext &Context);
 
-  /// @brief Methods to support type inquiry through isa, cast, and dyn_cast.
+  /// Methods to support type inquiry through isa, cast, and dyn_cast.
   static bool classof(const Value *V) {
     return V->getValueID() == ConstantTokenNoneVal;
   }
@@ -1008,10 +1018,15 @@
     return getLShr(C1, C2, true);
   }
 
-  /// Return the identity for the given binary operation,
-  /// i.e. a constant C such that X op C = X and C op X = X for every X.  It
-  /// returns null if the operator doesn't have an identity.
-  static Constant *getBinOpIdentity(unsigned Opcode, Type *Ty);
+  /// Return the identity constant for a binary opcode.
+  /// The identity constant C is defined as X op C = X and C op X = X for every
+  /// X when the binary operation is commutative. If the binop is not
+  /// commutative, callers can acquire the operand 1 identity constant by
+  /// setting AllowRHSConstant to true. For example, any shift has a zero
+  /// identity constant for operand 1: X shift 0 = X.
+  /// Return nullptr if the operator does not have an identity constant.
+  static Constant *getBinOpIdentity(unsigned Opcode, Type *Ty,
+                                    bool AllowRHSConstant = false);
 
   /// Return the absorbing element for the given binary
   /// operation, i.e. a constant C such that X op C = C and C op X = C for
@@ -1022,7 +1037,7 @@
   /// Transparently provide more efficient getOperand methods.
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Constant);
 
-  /// \brief Convenience function for getting a Cast operation.
+  /// Convenience function for getting a Cast operation.
   ///
   /// \param ops The opcode for the conversion
   /// \param C  The constant to be converted
@@ -1031,62 +1046,62 @@
   static Constant *getCast(unsigned ops, Constant *C, Type *Ty,
                            bool OnlyIfReduced = false);
 
-  // @brief Create a ZExt or BitCast cast constant expression
+  // Create a ZExt or BitCast cast constant expression
   static Constant *getZExtOrBitCast(
     Constant *C,   ///< The constant to zext or bitcast
     Type *Ty ///< The type to zext or bitcast C to
   );
 
-  // @brief Create a SExt or BitCast cast constant expression
+  // Create a SExt or BitCast cast constant expression
   static Constant *getSExtOrBitCast(
     Constant *C,   ///< The constant to sext or bitcast
     Type *Ty ///< The type to sext or bitcast C to
   );
 
-  // @brief Create a Trunc or BitCast cast constant expression
+  // Create a Trunc or BitCast cast constant expression
   static Constant *getTruncOrBitCast(
     Constant *C,   ///< The constant to trunc or bitcast
     Type *Ty ///< The type to trunc or bitcast C to
   );
 
-  /// @brief Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant
+  /// Create a BitCast, AddrSpaceCast, or a PtrToInt cast constant
   /// expression.
   static Constant *getPointerCast(
     Constant *C,   ///< The pointer value to be casted (operand 0)
     Type *Ty ///< The type to which cast should be made
   );
 
-  /// @brief Create a BitCast or AddrSpaceCast for a pointer type depending on
+  /// Create a BitCast or AddrSpaceCast for a pointer type depending on
   /// the address space.
   static Constant *getPointerBitCastOrAddrSpaceCast(
     Constant *C,   ///< The constant to addrspacecast or bitcast
     Type *Ty ///< The type to bitcast or addrspacecast C to
   );
 
-  /// @brief Create a ZExt, Bitcast or Trunc for integer -> integer casts
+  /// Create a ZExt, Bitcast or Trunc for integer -> integer casts
   static Constant *getIntegerCast(
     Constant *C,    ///< The integer constant to be casted
     Type *Ty, ///< The integer type to cast to
     bool isSigned   ///< Whether C should be treated as signed or not
   );
 
-  /// @brief Create a FPExt, Bitcast or FPTrunc for fp -> fp casts
+  /// Create a FPExt, Bitcast or FPTrunc for fp -> fp casts
   static Constant *getFPCast(
     Constant *C,    ///< The integer constant to be casted
     Type *Ty ///< The integer type to cast to
   );
 
-  /// @brief Return true if this is a convert constant expression
+  /// Return true if this is a convert constant expression
   bool isCast() const;
 
-  /// @brief Return true if this is a compare constant expression
+  /// Return true if this is a compare constant expression
   bool isCompare() const;
 
-  /// @brief Return true if this is an insertvalue or extractvalue expression,
+  /// Return true if this is an insertvalue or extractvalue expression,
   /// and the getIndices() method may be used.
   bool hasIndices() const;
 
-  /// @brief Return true if this is a getelementptr expression and all
+  /// Return true if this is a getelementptr expression and all
   /// the index operands are compile-time known integers within the
   /// corresponding notional static array extents. Note that this is
   /// not equivalant to, a subset of, or a superset of the "inbounds"
@@ -1106,7 +1121,7 @@
   static Constant *get(unsigned Opcode, Constant *C1, Constant *C2,
                        unsigned Flags = 0, Type *OnlyIfReducedTy = nullptr);
 
-  /// \brief Return an ICmp or FCmp comparison operator constant expression.
+  /// Return an ICmp or FCmp comparison operator constant expression.
   ///
   /// \param OnlyIfReduced see \a getWithOperands() docs.
   static Constant *getCompare(unsigned short pred, Constant *C1, Constant *C2,
diff --git a/linux-x64/clang/include/llvm/IR/DIBuilder.h b/linux-x64/clang/include/llvm/IR/DIBuilder.h
index aa8a8ec..06c9421 100644
--- a/linux-x64/clang/include/llvm/IR/DIBuilder.h
+++ b/linux-x64/clang/include/llvm/IR/DIBuilder.h
@@ -46,6 +46,7 @@
     DICompileUnit *CUNode;   ///< The one compile unit created by this DIBuiler.
     Function *DeclareFn;     ///< llvm.dbg.declare
     Function *ValueFn;       ///< llvm.dbg.value
+    Function *LabelFn;       ///< llvm.dbg.label
 
     SmallVector<Metadata *, 4> AllEnumTypes;
     /// Track the RetainTypes, since they can be updated later on.
@@ -69,6 +70,9 @@
     /// copy.
     DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>> PreservedVariables;
 
+    /// Each subprogram's preserved labels.
+    DenseMap<MDNode *, SmallVector<TrackingMDNodeRef, 1>> PreservedLabels;
+
     /// Create a temporary.
     ///
     /// Create an \a temporary node and track it in \a UnresolvedNodes.
@@ -79,6 +83,10 @@
                                DIExpression *Expr, const DILocation *DL,
                                BasicBlock *InsertBB, Instruction *InsertBefore);
 
+    /// Internal helper for insertLabel.
+    Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
+                             BasicBlock *InsertBB, Instruction *InsertBefore);
+
     /// Internal helper for insertDbgValueIntrinsic.
     Instruction *
     insertDbgValueIntrinsic(llvm::Value *Val, DILocalVariable *VarInfo,
@@ -237,10 +245,11 @@
     /// \param Ty           Original type.
     /// \param BaseTy       Base type. Ty is inherits from base.
     /// \param BaseOffset   Base offset.
+    /// \param VBPtrOffset  Virtual base pointer offset.
     /// \param Flags        Flags to describe inheritance attribute,
     ///                     e.g. private
     DIDerivedType *createInheritance(DIType *Ty, DIType *BaseTy,
-                                     uint64_t BaseOffset,
+                                     uint64_t BaseOffset, uint32_t VBPtrOffset,
                                      DINode::DIFlags Flags);
 
     /// Create debugging information entry for a member.
@@ -506,12 +515,15 @@
                          DINode::DIFlags Flags = DINode::FlagZero,
                          unsigned CC = 0);
 
-    /// Create a new DIType* with "artificial" flag set.
-    DIType *createArtificialType(DIType *Ty);
+    /// Create a distinct clone of \p SP with FlagArtificial set.
+    static DISubprogram *createArtificialSubprogram(DISubprogram *SP);
 
-    /// Create a new DIType* with the "object pointer"
-    /// flag set.
-    DIType *createObjectPointerType(DIType *Ty);
+    /// Create a uniqued clone of \p Ty with FlagArtificial set.
+    static DIType *createArtificialType(DIType *Ty);
+
+    /// Create a uniqued clone of \p Ty with FlagObjectPointer and
+    /// FlagArtificial set.
+    static DIType *createObjectPointerType(DIType *Ty);
 
     /// Create a permanent forward-declared type.
     DICompositeType *createForwardDecl(unsigned Tag, StringRef Name,
@@ -591,6 +603,14 @@
                        DINode::DIFlags Flags = DINode::FlagZero,
                        uint32_t AlignInBits = 0);
 
+    /// Create a new descriptor for an label.
+    ///
+    /// \c Scope must be a \a DILocalScope, and thus its scope chain eventually
+    /// leads to a \a DISubprogram.
+    DILabel *
+    createLabel(DIScope *Scope, StringRef Name, DIFile *File, unsigned LineNo,
+                bool AlwaysPreserve = false);
+
     /// Create a new descriptor for a parameter variable.
     ///
     /// \c Scope must be a \a DILocalScope, and thus its scope chain eventually
@@ -782,6 +802,20 @@
                                DIExpression *Expr, const DILocation *DL,
                                Instruction *InsertBefore);
 
+    /// Insert a new llvm.dbg.label intrinsic call.
+    /// \param LabelInfo    Label's debug info descriptor.
+    /// \param DL           Debug info location.
+    /// \param InsertBefore Location for the new intrinsic.
+    Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
+                             Instruction *InsertBefore);
+
+    /// Insert a new llvm.dbg.label intrinsic call.
+    /// \param LabelInfo    Label's debug info descriptor.
+    /// \param DL           Debug info location.
+    /// \param InsertAtEnd Location for the new intrinsic.
+    Instruction *insertLabel(DILabel *LabelInfo, const DILocation *DL,
+                             BasicBlock *InsertAtEnd);
+
     /// Insert a new llvm.dbg.value intrinsic call.
     /// \param Val          llvm::Value of the variable
     /// \param VarInfo      Variable's debug info descriptor.
diff --git a/linux-x64/clang/include/llvm/IR/DataLayout.h b/linux-x64/clang/include/llvm/IR/DataLayout.h
index c48e140..d796a65 100644
--- a/linux-x64/clang/include/llvm/IR/DataLayout.h
+++ b/linux-x64/clang/include/llvm/IR/DataLayout.h
@@ -61,7 +61,7 @@
 // sunk down to an FTTI element that is queried rather than a global
 // preference.
 
-/// \brief Layout alignment element.
+/// Layout alignment element.
 ///
 /// Stores the alignment data associated with a given alignment type (integer,
 /// vector, float) and type bit width.
@@ -69,7 +69,7 @@
 /// \note The unusual order of elements in the structure attempts to reduce
 /// padding and make the structure slightly more cache friendly.
 struct LayoutAlignElem {
-  /// \brief Alignment type from \c AlignTypeEnum
+  /// Alignment type from \c AlignTypeEnum
   unsigned AlignType : 8;
   unsigned TypeBitWidth : 24;
   unsigned ABIAlign : 16;
@@ -81,7 +81,7 @@
   bool operator==(const LayoutAlignElem &rhs) const;
 };
 
-/// \brief Layout pointer alignment element.
+/// Layout pointer alignment element.
 ///
 /// Stores the alignment data associated with a given pointer and address space.
 ///
@@ -102,7 +102,7 @@
   bool operator==(const PointerAlignElem &rhs) const;
 };
 
-/// \brief A parsed version of the target data layout string in and methods for
+/// A parsed version of the target data layout string in and methods for
 /// querying it.
 ///
 /// The target data layout string is specified *by the target* - a frontend
@@ -129,7 +129,7 @@
 
   SmallVector<unsigned char, 8> LegalIntWidths;
 
-  /// \brief Primitive type alignment data. This is sorted by type and bit
+  /// Primitive type alignment data. This is sorted by type and bit
   /// width during construction.
   using AlignmentsTy = SmallVector<LayoutAlignElem, 16>;
   AlignmentsTy Alignments;
@@ -143,7 +143,7 @@
   AlignmentsTy::iterator
   findAlignmentLowerBound(AlignTypeEnum AlignType, uint32_t BitWidth);
 
-  /// \brief The string representation used to create this DataLayout
+  /// The string representation used to create this DataLayout
   std::string StringRepresentation;
 
   using PointersTy = SmallVector<PointerAlignElem, 8>;
@@ -221,7 +221,7 @@
   bool isLittleEndian() const { return !BigEndian; }
   bool isBigEndian() const { return BigEndian; }
 
-  /// \brief Returns the string representation of the DataLayout.
+  /// Returns the string representation of the DataLayout.
   ///
   /// This representation is in the same format accepted by the string
   /// constructor above. This should not be used to compare two DataLayout as
@@ -230,10 +230,10 @@
     return StringRepresentation;
   }
 
-  /// \brief Test if the DataLayout was constructed from an empty string.
+  /// Test if the DataLayout was constructed from an empty string.
   bool isDefault() const { return StringRepresentation.empty(); }
 
-  /// \brief Returns true if the specified type is known to be a native integer
+  /// Returns true if the specified type is known to be a native integer
   /// type supported by the CPU.
   ///
   /// For example, i64 is not native on most 32-bit CPUs and i37 is not native
@@ -309,7 +309,7 @@
 
   static const char *getManglingComponent(const Triple &T);
 
-  /// \brief Returns true if the specified type fits in a native integer type
+  /// Returns true if the specified type fits in a native integer type
   /// supported by the CPU.
   ///
   /// For example, if the CPU only supports i32 as a native integer type, then
@@ -398,13 +398,13 @@
   /// [*] The alloc size depends on the alignment, and thus on the target.
   ///     These values are for x86-32 linux.
 
-  /// \brief Returns the number of bits necessary to hold the specified type.
+  /// Returns the number of bits necessary to hold the specified type.
   ///
   /// For example, returns 36 for i36 and 80 for x86_fp80. The type passed must
   /// have a size (Type::isSized() must return true).
   uint64_t getTypeSizeInBits(Type *Ty) const;
 
-  /// \brief Returns the maximum number of bytes that may be overwritten by
+  /// Returns the maximum number of bytes that may be overwritten by
   /// storing the specified type.
   ///
   /// For example, returns 5 for i36 and 10 for x86_fp80.
@@ -412,7 +412,7 @@
     return (getTypeSizeInBits(Ty) + 7) / 8;
   }
 
-  /// \brief Returns the maximum number of bits that may be overwritten by
+  /// Returns the maximum number of bits that may be overwritten by
   /// storing the specified type; always a multiple of 8.
   ///
   /// For example, returns 40 for i36 and 80 for x86_fp80.
@@ -420,7 +420,7 @@
     return 8 * getTypeStoreSize(Ty);
   }
 
-  /// \brief Returns the offset in bytes between successive objects of the
+  /// Returns the offset in bytes between successive objects of the
   /// specified type, including alignment padding.
   ///
   /// This is the amount that alloca reserves for this type. For example,
@@ -430,7 +430,7 @@
     return alignTo(getTypeStoreSize(Ty), getABITypeAlignment(Ty));
   }
 
-  /// \brief Returns the offset in bits between successive objects of the
+  /// Returns the offset in bits between successive objects of the
   /// specified type, including alignment padding; always a multiple of 8.
   ///
   /// This is the amount that alloca reserves for this type. For example,
@@ -439,69 +439,69 @@
     return 8 * getTypeAllocSize(Ty);
   }
 
-  /// \brief Returns the minimum ABI-required alignment for the specified type.
+  /// Returns the minimum ABI-required alignment for the specified type.
   unsigned getABITypeAlignment(Type *Ty) const;
 
-  /// \brief Returns the minimum ABI-required alignment for an integer type of
+  /// Returns the minimum ABI-required alignment for an integer type of
   /// the specified bitwidth.
   unsigned getABIIntegerTypeAlignment(unsigned BitWidth) const;
 
-  /// \brief Returns the preferred stack/global alignment for the specified
+  /// Returns the preferred stack/global alignment for the specified
   /// type.
   ///
   /// This is always at least as good as the ABI alignment.
   unsigned getPrefTypeAlignment(Type *Ty) const;
 
-  /// \brief Returns the preferred alignment for the specified type, returned as
+  /// Returns the preferred alignment for the specified type, returned as
   /// log2 of the value (a shift amount).
   unsigned getPreferredTypeAlignmentShift(Type *Ty) const;
 
-  /// \brief Returns an integer type with size at least as big as that of a
+  /// Returns an integer type with size at least as big as that of a
   /// pointer in the given address space.
   IntegerType *getIntPtrType(LLVMContext &C, unsigned AddressSpace = 0) const;
 
-  /// \brief Returns an integer (vector of integer) type with size at least as
+  /// Returns an integer (vector of integer) type with size at least as
   /// big as that of a pointer of the given pointer (vector of pointer) type.
   Type *getIntPtrType(Type *) const;
 
-  /// \brief Returns the smallest integer type with size at least as big as
+  /// Returns the smallest integer type with size at least as big as
   /// Width bits.
   Type *getSmallestLegalIntType(LLVMContext &C, unsigned Width = 0) const;
 
-  /// \brief Returns the largest legal integer type, or null if none are set.
+  /// Returns the largest legal integer type, or null if none are set.
   Type *getLargestLegalIntType(LLVMContext &C) const {
     unsigned LargestSize = getLargestLegalIntTypeSizeInBits();
     return (LargestSize == 0) ? nullptr : Type::getIntNTy(C, LargestSize);
   }
 
-  /// \brief Returns the size of largest legal integer type size, or 0 if none
+  /// Returns the size of largest legal integer type size, or 0 if none
   /// are set.
   unsigned getLargestLegalIntTypeSizeInBits() const;
 
-  /// \brief Returns the type of a GEP index.
+  /// Returns the type of a GEP index.
   /// If it was not specified explicitly, it will be the integer type of the
   /// pointer width - IntPtrType.
   Type *getIndexType(Type *PtrTy) const;
 
-  /// \brief Returns the offset from the beginning of the type for the specified
+  /// Returns the offset from the beginning of the type for the specified
   /// indices.
   ///
   /// Note that this takes the element type, not the pointer type.
   /// This is used to implement getelementptr.
   int64_t getIndexedOffsetInType(Type *ElemTy, ArrayRef<Value *> Indices) const;
 
-  /// \brief Returns a StructLayout object, indicating the alignment of the
+  /// Returns a StructLayout object, indicating the alignment of the
   /// struct, its size, and the offsets of its fields.
   ///
   /// Note that this information is lazily cached.
   const StructLayout *getStructLayout(StructType *Ty) const;
 
-  /// \brief Returns the preferred alignment of the specified global.
+  /// Returns the preferred alignment of the specified global.
   ///
   /// This includes an explicitly requested alignment (if the global has one).
   unsigned getPreferredAlignment(const GlobalVariable *GV) const;
 
-  /// \brief Returns the preferred alignment of the specified global, returned
+  /// Returns the preferred alignment of the specified global, returned
   /// in log form.
   ///
   /// This includes an explicitly requested alignment (if the global has one).
@@ -536,7 +536,7 @@
   /// NB: Padding in nested element is not taken into account.
   bool hasPadding() const { return IsPadded; }
 
-  /// \brief Given a valid byte offset into the structure, returns the structure
+  /// Given a valid byte offset into the structure, returns the structure
   /// index that contains it.
   unsigned getElementContainingOffset(uint64_t Offset) const;
 
diff --git a/linux-x64/clang/include/llvm/IR/DebugInfo.h b/linux-x64/clang/include/llvm/IR/DebugInfo.h
index 1d8e7e2..01178af 100644
--- a/linux-x64/clang/include/llvm/IR/DebugInfo.h
+++ b/linux-x64/clang/include/llvm/IR/DebugInfo.h
@@ -28,10 +28,10 @@
 class DbgValueInst;
 class Module;
 
-/// \brief Find subprogram that is enclosing this scope.
+/// Find subprogram that is enclosing this scope.
 DISubprogram *getDISubprogram(const MDNode *Scope);
 
-/// \brief Strip debug info in the module if it exists.
+/// Strip debug info in the module if it exists.
 ///
 /// To do this, we remove all calls to the debugger intrinsics and any named
 /// metadata for debugging. We also remove debug locations for instructions.
@@ -51,10 +51,10 @@
 ///   All debug type metadata nodes are unreachable and garbage collected.
 bool stripNonLineTableDebugInfo(Module &M);
 
-/// \brief Return Debug Info Metadata Version by checking module flags.
+/// Return Debug Info Metadata Version by checking module flags.
 unsigned getDebugMetadataVersionFromModule(const Module &M);
 
-/// \brief Utility to find all debug info in a module.
+/// Utility to find all debug info in a module.
 ///
 /// DebugInfoFinder tries to list all debug info MDNodes used in a module. To
 /// list debug info MDNodes used by an instruction, DebugInfoFinder uses
@@ -64,30 +64,33 @@
 /// used by the CUs.
 class DebugInfoFinder {
 public:
-  /// \brief Process entire module and collect debug info anchors.
+  /// Process entire module and collect debug info anchors.
   void processModule(const Module &M);
+  /// Process a single instruction and collect debug info anchors.
+  void processInstruction(const Module &M, const Instruction &I);
 
-  /// \brief Process DbgDeclareInst.
+  /// Process DbgDeclareInst.
   void processDeclare(const Module &M, const DbgDeclareInst *DDI);
-  /// \brief Process DbgValueInst.
+  /// Process DbgValueInst.
   void processValue(const Module &M, const DbgValueInst *DVI);
-  /// \brief Process debug info location.
+  /// Process debug info location.
   void processLocation(const Module &M, const DILocation *Loc);
 
-  /// \brief Clear all lists.
+  /// Clear all lists.
   void reset();
 
 private:
   void InitializeTypeMap(const Module &M);
 
-  void processType(DIType *DT);
-  void processSubprogram(DISubprogram *SP);
+  void processCompileUnit(DICompileUnit *CU);
   void processScope(DIScope *Scope);
+  void processSubprogram(DISubprogram *SP);
+  void processType(DIType *DT);
   bool addCompileUnit(DICompileUnit *CU);
   bool addGlobalVariable(DIGlobalVariableExpression *DIG);
+  bool addScope(DIScope *Scope);
   bool addSubprogram(DISubprogram *SP);
   bool addType(DIType *DT);
-  bool addScope(DIScope *Scope);
 
 public:
   using compile_unit_iterator =
diff --git a/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def b/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
index 676b978..b1f5fac 100644
--- a/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
+++ b/linux-x64/clang/include/llvm/IR/DebugInfoFlags.def
@@ -46,6 +46,8 @@
 HANDLE_DI_FLAG((1 << 22), TypePassByValue)
 HANDLE_DI_FLAG((1 << 23), TypePassByReference)
 HANDLE_DI_FLAG((1 << 24), FixedEnum)
+HANDLE_DI_FLAG((1 << 25), Thunk)
+HANDLE_DI_FLAG((1 << 26), Trivial)
 
 // To avoid needing a dedicated value for IndirectVirtualBase, we use
 // the bitwise or of Virtual and FwdDecl, which does not otherwise
@@ -55,7 +57,7 @@
 #ifdef DI_FLAG_LARGEST_NEEDED
 // intended to be used with ADT/BitmaskEnum.h
 // NOTE: always must be equal to largest flag, check this when adding new flag
-HANDLE_DI_FLAG((1 << 24), Largest)
+HANDLE_DI_FLAG((1 << 26), Largest)
 #undef DI_FLAG_LARGEST_NEEDED
 #endif
 
diff --git a/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h b/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
index e2210bb..905a7ca 100644
--- a/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
+++ b/linux-x64/clang/include/llvm/IR/DebugInfoMetadata.h
@@ -232,6 +232,7 @@
     case DITemplateValueParameterKind:
     case DIGlobalVariableKind:
     case DILocalVariableKind:
+    case DILabelKind:
     case DIObjCPropertyKind:
     case DIImportedEntityKind:
     case DIModuleKind:
@@ -678,9 +679,11 @@
   Metadata *getRawScope() const { return getOperand(1); }
   MDString *getRawName() const { return getOperandAs<MDString>(2); }
 
-  void setFlags(DIFlags NewFlags) {
-    assert(!isUniqued() && "Cannot set flags on uniqued nodes");
-    Flags = NewFlags;
+  /// Returns a new temporary DIType with updated Flags
+  TempDIType cloneWithFlags(DIFlags NewFlags) const {
+    auto NewTy = clone();
+    NewTy->Flags = NewFlags;
+    return NewTy;
   }
 
   bool isPrivate() const {
@@ -775,6 +778,12 @@
 
   unsigned getEncoding() const { return Encoding; }
 
+  enum class Signedness { Signed, Unsigned };
+
+  /// Return the signedness of this type, or None if this type is neither
+  /// signed nor unsigned.
+  Optional<Signedness> getSignedness() const;
+
   static bool classof(const Metadata *MD) {
     return MD->getMetadataID() == DIBasicTypeKind;
   }
@@ -790,7 +799,7 @@
   friend class LLVMContextImpl;
   friend class MDNode;
 
-  /// \brief The DWARF address space of the memory pointed to or referenced by a
+  /// The DWARF address space of the memory pointed to or referenced by a
   /// pointer or reference type respectively.
   Optional<unsigned> DWARFAddressSpace;
 
@@ -865,7 +874,8 @@
   /// Get extra data associated with this derived type.
   ///
   /// Class type for pointer-to-members, objective-c property node for ivars,
-  /// or global constant wrapper for static members.
+  /// global constant wrapper for static members, or virtual base pointer offset
+  /// for inheritance.
   ///
   /// TODO: Separate out types that need this extra operand: pointer-to-member
   /// types and member fields (static members and ivars).
@@ -883,6 +893,14 @@
     return dyn_cast_or_null<DIObjCProperty>(getExtraData());
   }
 
+  uint32_t getVBPtrOffset() const {
+    assert(getTag() == dwarf::DW_TAG_inheritance);
+    if (auto *CM = cast_or_null<ConstantAsMetadata>(getExtraData()))
+      if (auto *CI = dyn_cast_or_null<ConstantInt>(CM->getValue()))
+        return static_cast<uint32_t>(CI->getZExtValue());
+    return 0;
+  }
+
   Constant *getStorageOffsetInBits() const {
     assert(getTag() == dwarf::DW_TAG_member && isBitField());
     if (auto *C = cast_or_null<ConstantAsMetadata>(getExtraData()))
@@ -1144,11 +1162,12 @@
     NoDebug = 0,
     FullDebug,
     LineTablesOnly,
-    LastEmissionKind = LineTablesOnly
+    DebugDirectivesOnly,
+    LastEmissionKind = DebugDirectivesOnly
   };
 
   static Optional<DebugEmissionKind> getEmissionKind(StringRef Str);
-  static const char *EmissionKindString(DebugEmissionKind EK);
+  static const char *emissionKindString(DebugEmissionKind EK);
 
 private:
   unsigned SourceLanguage;
@@ -1250,6 +1269,9 @@
   DebugEmissionKind getEmissionKind() const {
     return (DebugEmissionKind)EmissionKind;
   }
+  bool isDebugDirectivesOnly() const {
+    return EmissionKind == DebugDirectivesOnly;
+  }
   bool getDebugInfoForProfiling() const { return DebugInfoForProfiling; }
   bool getGnuPubnames() const { return GnuPubnames; }
   StringRef getProducer() const { return getStringOperand(1); }
@@ -1497,26 +1519,25 @@
   /// discriminator.
   inline const DILocation *cloneWithDuplicationFactor(unsigned DF) const;
 
+  enum { NoGeneratedLocation = false, WithGeneratedLocation = true };
+
   /// When two instructions are combined into a single instruction we also
   /// need to combine the original locations into a single location.
   ///
   /// When the locations are the same we can use either location. When they
-  /// differ, we need a third location which is distinct from either. If
-  /// they have the same file/line but have a different discriminator we
-  /// could create a location with a new discriminator. If they are from
-  /// different files/lines the location is ambiguous and can't be
-  /// represented in a single line entry.  In this case, no location
-  /// should be set, unless the merged instruction is a call, which we will
-  /// set the merged debug location as line 0 of the nearest common scope
-  /// where 2 locations are inlined from. This only applies to Instruction;
-  /// for MachineInstruction, as it is post-inline, we will treat the call
-  /// instruction the same way as other instructions.
+  /// differ, we need a third location which is distinct from either. If they
+  /// have the same file/line but have a different discriminator we could
+  /// create a location with a new discriminator. If they are from different
+  /// files/lines the location is ambiguous and can't be represented in a line
+  /// entry. In this case, if \p GenerateLocation is true, we will set the
+  /// merged debug location as line 0 of the nearest common scope where the two
+  /// locations are inlined from.
   ///
-  /// \p ForInst: The Instruction the merged DILocation is for. If the
-  /// Instruction is unavailable or non-existent, use nullptr.
+  /// \p GenerateLocation: Whether the merged location can be generated when
+  /// \p LocA and \p LocB differ.
   static const DILocation *
   getMergedLocation(const DILocation *LocA, const DILocation *LocB,
-                    const Instruction *ForInst = nullptr);
+                    bool GenerateLocation = NoGeneratedLocation);
 
   /// Returns the base discriminator for a given encoded discriminator \p D.
   static unsigned getBaseDiscriminatorFromDiscriminator(unsigned D) {
@@ -1610,13 +1631,13 @@
           unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags,
           bool IsOptimized, DICompileUnit *Unit,
           DITemplateParameterArray TemplateParams, DISubprogram *Declaration,
-          DILocalVariableArray Variables, DITypeArray ThrownTypes,
+          DINodeArray RetainedNodes, DITypeArray ThrownTypes,
           StorageType Storage, bool ShouldCreate = true) {
     return getImpl(Context, Scope, getCanonicalMDString(Context, Name),
                    getCanonicalMDString(Context, LinkageName), File, Line, Type,
                    IsLocalToUnit, IsDefinition, ScopeLine, ContainingType,
                    Virtuality, VirtualIndex, ThisAdjustment, Flags, IsOptimized,
-                   Unit, TemplateParams.get(), Declaration, Variables.get(),
+                   Unit, TemplateParams.get(), Declaration, RetainedNodes.get(),
                    ThrownTypes.get(), Storage, ShouldCreate);
   }
   static DISubprogram *
@@ -1625,7 +1646,7 @@
           bool IsLocalToUnit, bool IsDefinition, unsigned ScopeLine,
           Metadata *ContainingType, unsigned Virtuality, unsigned VirtualIndex,
           int ThisAdjustment, DIFlags Flags, bool IsOptimized, Metadata *Unit,
-          Metadata *TemplateParams, Metadata *Declaration, Metadata *Variables,
+          Metadata *TemplateParams, Metadata *Declaration, Metadata *RetainedNodes,
           Metadata *ThrownTypes, StorageType Storage, bool ShouldCreate = true);
 
   TempDISubprogram cloneImpl() const {
@@ -1634,7 +1655,7 @@
                         isDefinition(), getScopeLine(), getContainingType(),
                         getVirtuality(), getVirtualIndex(), getThisAdjustment(),
                         getFlags(), isOptimized(), getUnit(),
-                        getTemplateParams(), getDeclaration(), getVariables(),
+                        getTemplateParams(), getDeclaration(), getRetainedNodes(),
                         getThrownTypes());
   }
 
@@ -1648,12 +1669,12 @@
                      bool IsOptimized, DICompileUnit *Unit,
                      DITemplateParameterArray TemplateParams = nullptr,
                      DISubprogram *Declaration = nullptr,
-                     DILocalVariableArray Variables = nullptr,
+                     DINodeArray RetainedNodes = nullptr,
                      DITypeArray ThrownTypes = nullptr),
                     (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit,
                      IsDefinition, ScopeLine, ContainingType, Virtuality,
                      VirtualIndex, ThisAdjustment, Flags, IsOptimized, Unit,
-                     TemplateParams, Declaration, Variables, ThrownTypes))
+                     TemplateParams, Declaration, RetainedNodes, ThrownTypes))
   DEFINE_MDNODE_GET(
       DISubprogram,
       (Metadata * Scope, MDString *Name, MDString *LinkageName, Metadata *File,
@@ -1661,15 +1682,22 @@
        unsigned ScopeLine, Metadata *ContainingType, unsigned Virtuality,
        unsigned VirtualIndex, int ThisAdjustment, DIFlags Flags,
        bool IsOptimized, Metadata *Unit, Metadata *TemplateParams = nullptr,
-       Metadata *Declaration = nullptr, Metadata *Variables = nullptr,
+       Metadata *Declaration = nullptr, Metadata *RetainedNodes = nullptr,
        Metadata *ThrownTypes = nullptr),
       (Scope, Name, LinkageName, File, Line, Type, IsLocalToUnit, IsDefinition,
        ScopeLine, ContainingType, Virtuality, VirtualIndex, ThisAdjustment,
-       Flags, IsOptimized, Unit, TemplateParams, Declaration, Variables,
+       Flags, IsOptimized, Unit, TemplateParams, Declaration, RetainedNodes,
        ThrownTypes))
 
   TempDISubprogram clone() const { return cloneImpl(); }
 
+  /// Returns a new temporary DISubprogram with updated Flags
+  TempDISubprogram cloneWithFlags(DIFlags NewFlags) const {
+    auto NewSP = clone();
+    NewSP->Flags = NewFlags;
+    return NewSP;
+  }
+
 public:
   unsigned getLine() const { return Line; }
   unsigned getVirtuality() const { return Virtuality; }
@@ -1712,6 +1740,11 @@
   /// Return true if this subprogram is C++11 noreturn or C11 _Noreturn
   bool isNoReturn() const { return getFlags() & FlagNoReturn; }
 
+  // Check if this routine is a compiler-generated thunk.
+  //
+  // Returns true if this subprogram is a thunk generated by the compiler.
+  bool isThunk() const { return getFlags() & FlagThunk; }
+
   DIScopeRef getScope() const { return DIScopeRef(getRawScope()); }
 
   StringRef getName() const { return getStringOperand(2); }
@@ -1734,8 +1767,8 @@
   DISubprogram *getDeclaration() const {
     return cast_or_null<DISubprogram>(getRawDeclaration());
   }
-  DILocalVariableArray getVariables() const {
-    return cast_or_null<MDTuple>(getRawVariables());
+  DINodeArray getRetainedNodes() const {
+    return cast_or_null<MDTuple>(getRawRetainedNodes());
   }
   DITypeArray getThrownTypes() const {
     return cast_or_null<MDTuple>(getRawThrownTypes());
@@ -1747,7 +1780,7 @@
   Metadata *getRawType() const { return getOperand(4); }
   Metadata *getRawUnit() const { return getOperand(5); }
   Metadata *getRawDeclaration() const { return getOperand(6); }
-  Metadata *getRawVariables() const { return getOperand(7); }
+  Metadata *getRawRetainedNodes() const { return getOperand(7); }
   Metadata *getRawContainingType() const {
     return getNumOperands() > 8 ? getOperandAs<Metadata>(8) : nullptr;
   }
@@ -2183,6 +2216,14 @@
   /// Determines the size of the variable's type.
   Optional<uint64_t> getSizeInBits() const;
 
+  /// Return the signedness of this variable's type, or None if this type is
+  /// neither signed nor unsigned.
+  Optional<DIBasicType::Signedness> getSignedness() const {
+    if (auto *BT = dyn_cast<DIBasicType>(getType().resolve()))
+      return BT->getSignedness();
+    return None;
+  }
+
   StringRef getFilename() const {
     if (auto *F = getFile())
       return F->getFilename();
@@ -2289,6 +2330,11 @@
     ///
     /// Return the number of elements in the operand (1 + args).
     unsigned getSize() const;
+
+    /// Append the elements of this operand to \p V.
+    void appendToVector(SmallVectorImpl<uint64_t> &V) const {
+      V.append(get(), get() + getSize());
+    }
   };
 
   /// An iterator for expression operands.
@@ -2392,15 +2438,28 @@
 
   /// Prepend \p DIExpr with a deref and offset operation and optionally turn it
   /// into a stack value.
-  static DIExpression *prepend(const DIExpression *DIExpr, bool DerefBefore,
+  static DIExpression *prepend(const DIExpression *Expr, bool DerefBefore,
                                int64_t Offset = 0, bool DerefAfter = false,
                                bool StackValue = false);
 
   /// Prepend \p DIExpr with the given opcodes and optionally turn it into a
   /// stack value.
-  static DIExpression *doPrepend(const DIExpression *DIExpr,
-                                 SmallVectorImpl<uint64_t> &Ops,
-                                 bool StackValue = false);
+  static DIExpression *prependOpcodes(const DIExpression *Expr,
+                                      SmallVectorImpl<uint64_t> &Ops,
+                                      bool StackValue = false);
+
+  /// Append the opcodes \p Ops to \p DIExpr. Unlike \ref appendToStack, the
+  /// returned expression is a stack value only if \p DIExpr is a stack value.
+  /// If \p DIExpr describes a fragment, the returned expression will describe
+  /// the same fragment.
+  static DIExpression *append(const DIExpression *Expr, ArrayRef<uint64_t> Ops);
+
+  /// Convert \p DIExpr into a stack value if it isn't one already by appending
+  /// DW_OP_deref if needed, and appending \p Ops to the resulting expression.
+  /// If \p DIExpr describes a fragment, the returned expression will describe
+  /// the same fragment.
+  static DIExpression *appendToStack(const DIExpression *Expr,
+                                     ArrayRef<uint64_t> Ops);
 
   /// Create a DIExpression to describe one part of an aggregate variable that
   /// is fragmented across multiple Values. The DW_OP_LLVM_fragment operation
@@ -2603,6 +2662,76 @@
   }
 };
 
+/// Label.
+///
+class DILabel : public DINode {
+  friend class LLVMContextImpl;
+  friend class MDNode;
+
+  unsigned Line;
+
+  DILabel(LLVMContext &C, StorageType Storage, unsigned Line,
+          ArrayRef<Metadata *> Ops)
+      : DINode(C, DILabelKind, Storage, dwarf::DW_TAG_label, Ops), Line(Line) {}
+  ~DILabel() = default;
+
+  static DILabel *getImpl(LLVMContext &Context, DIScope *Scope,
+                          StringRef Name, DIFile *File, unsigned Line,
+                          StorageType Storage,
+                          bool ShouldCreate = true) {
+    return getImpl(Context, Scope, getCanonicalMDString(Context, Name), File,
+                   Line, Storage, ShouldCreate);
+  }
+  static DILabel *getImpl(LLVMContext &Context, Metadata *Scope,
+                          MDString *Name, Metadata *File, unsigned Line,
+                          StorageType Storage,
+                          bool ShouldCreate = true);
+
+  TempDILabel cloneImpl() const {
+    return getTemporary(getContext(), getScope(), getName(), getFile(),
+                        getLine());
+  }
+
+public:
+  DEFINE_MDNODE_GET(DILabel,
+                    (DILocalScope * Scope, StringRef Name, DIFile *File,
+                     unsigned Line),
+                    (Scope, Name, File, Line))
+  DEFINE_MDNODE_GET(DILabel,
+                    (Metadata * Scope, MDString *Name, Metadata *File,
+                     unsigned Line),
+                    (Scope, Name, File, Line))
+
+  TempDILabel clone() const { return cloneImpl(); }
+
+  /// Get the local scope for this label.
+  ///
+  /// Labels must be defined in a local scope.
+  DILocalScope *getScope() const {
+    return cast_or_null<DILocalScope>(getRawScope());
+  }
+  unsigned getLine() const { return Line; }
+  StringRef getName() const { return getStringOperand(1); }
+  DIFile *getFile() const { return cast_or_null<DIFile>(getRawFile()); }
+
+  Metadata *getRawScope() const { return getOperand(0); }
+  MDString *getRawName() const { return getOperandAs<MDString>(1); }
+  Metadata *getRawFile() const { return getOperand(2); }
+
+  /// Check that a location is valid for this label.
+  ///
+  /// Check that \c DL exists, is in the same subprogram, and has the same
+  /// inlined-at location as \c this.  (Otherwise, it's not a valid attachment
+  /// to a \a DbgInfoIntrinsic.)
+  bool isValidLocationForIntrinsic(const DILocation *DL) const {
+    return DL && getScope()->getSubprogram() == DL->getScope()->getSubprogram();
+  }
+
+  static bool classof(const Metadata *MD) {
+    return MD->getMetadataID() == DILabelKind;
+  }
+};
+
 class DIObjCProperty : public DINode {
   friend class LLVMContextImpl;
   friend class MDNode;
diff --git a/linux-x64/clang/include/llvm/IR/DebugLoc.h b/linux-x64/clang/include/llvm/IR/DebugLoc.h
index eef1212..9f619ff 100644
--- a/linux-x64/clang/include/llvm/IR/DebugLoc.h
+++ b/linux-x64/clang/include/llvm/IR/DebugLoc.h
@@ -24,7 +24,7 @@
   class raw_ostream;
   class DILocation;
 
-  /// \brief A debug info location.
+  /// A debug info location.
   ///
   /// This class is a wrapper around a tracking reference to an \a DILocation
   /// pointer.
@@ -37,10 +37,10 @@
   public:
     DebugLoc() = default;
 
-    /// \brief Construct from an \a DILocation.
+    /// Construct from an \a DILocation.
     DebugLoc(const DILocation *L);
 
-    /// \brief Construct from an \a MDNode.
+    /// Construct from an \a MDNode.
     ///
     /// Note: if \c N is not an \a DILocation, a verifier check will fail, and
     /// accessors will crash.  However, construction from other nodes is
@@ -48,7 +48,7 @@
     /// IR.
     explicit DebugLoc(const MDNode *N);
 
-    /// \brief Get the underlying \a DILocation.
+    /// Get the underlying \a DILocation.
     ///
     /// \pre !*this or \c isa<DILocation>(getAsMDNode()).
     /// @{
@@ -58,7 +58,7 @@
     DILocation &operator*() const { return *get(); }
     /// @}
 
-    /// \brief Check for null.
+    /// Check for null.
     ///
     /// Check for null in a way that is safe with broken debug info.  Unlike
     /// the conversion to \c DILocation, this doesn't require that \c Loc is of
@@ -66,10 +66,10 @@
     /// \a Instruction::hasMetadata().
     explicit operator bool() const { return Loc; }
 
-    /// \brief Check whether this has a trivial destructor.
+    /// Check whether this has a trivial destructor.
     bool hasTrivialDestructor() const { return Loc.hasTrivialDestructor(); }
 
-    /// \brief Create a new DebugLoc.
+    /// Create a new DebugLoc.
     ///
     /// Create a new DebugLoc at the specified line/col and scope/inline.  This
     /// forwards to \a DILocation::get().
@@ -95,12 +95,12 @@
     MDNode *getScope() const;
     DILocation *getInlinedAt() const;
 
-    /// \brief Get the fully inlined-at scope for a DebugLoc.
+    /// Get the fully inlined-at scope for a DebugLoc.
     ///
     /// Gets the inlined-at scope for a DebugLoc.
     MDNode *getInlinedAtScope() const;
 
-    /// \brief Find the debug info location for the start of the function.
+    /// Find the debug info location for the start of the function.
     ///
     /// Walk up the scope chain of given debug loc and find line number info
     /// for the function.
@@ -109,7 +109,7 @@
     /// find the subprogram, and then DILocation::get().
     DebugLoc getFnDebugLoc() const;
 
-    /// \brief Return \c this as a bar \a MDNode.
+    /// Return \c this as a bar \a MDNode.
     MDNode *getAsMDNode() const { return Loc; }
 
     bool operator==(const DebugLoc &DL) const { return Loc == DL.Loc; }
@@ -117,7 +117,7 @@
 
     void dump() const;
 
-    /// \brief prints source location /path/to/file.exe:line:col @[inlined at]
+    /// prints source location /path/to/file.exe:line:col @[inlined at]
     void print(raw_ostream &OS) const;
   };
 
diff --git a/linux-x64/clang/include/llvm/IR/DerivedTypes.h b/linux-x64/clang/include/llvm/IR/DerivedTypes.h
index 6e5e085..9526d62 100644
--- a/linux-x64/clang/include/llvm/IR/DerivedTypes.h
+++ b/linux-x64/clang/include/llvm/IR/DerivedTypes.h
@@ -36,7 +36,7 @@
 /// Class to represent integer types. Note that this class is also used to
 /// represent the built-in integer types: Int1Ty, Int8Ty, Int16Ty, Int32Ty and
 /// Int64Ty.
-/// @brief Integer representation type
+/// Integer representation type
 class IntegerType : public Type {
   friend class LLVMContextImpl;
 
@@ -59,10 +59,10 @@
   /// If an IntegerType with the same NumBits value was previously instantiated,
   /// that instance will be returned. Otherwise a new one will be created. Only
   /// one instance with a given NumBits value is ever created.
-  /// @brief Get or create an IntegerType instance.
+  /// Get or create an IntegerType instance.
   static IntegerType *get(LLVMContext &C, unsigned NumBits);
 
-  /// @brief Get the number of bits in this IntegerType
+  /// Get the number of bits in this IntegerType
   unsigned getBitWidth() const { return getSubclassData(); }
 
   /// Return a bitmask with ones set for all of the bits that can be set by an
@@ -79,13 +79,13 @@
 
   /// For example, this is 0xFF for an 8 bit integer, 0xFFFF for i16, etc.
   /// @returns a bit mask with ones set for all the bits of this type.
-  /// @brief Get a bit mask for this type.
+  /// Get a bit mask for this type.
   APInt getMask() const;
 
   /// This method determines if the width of this IntegerType is a power-of-2
   /// in terms of 8 bit bytes.
   /// @returns true if this is a power-of-2 byte width.
-  /// @brief Is this a power-of-2 byte-width IntegerType ?
+  /// Is this a power-of-2 byte-width IntegerType ?
   bool isPowerOf2ByteWidth() const;
 
   /// Methods for support type inquiry through isa, cast, and dyn_cast.
@@ -193,7 +193,7 @@
 /// StructType::create() forms.
 ///
 /// Independent of what kind of struct you have, the body of a struct type are
-/// laid out in memory consequtively with the elements directly one after the
+/// laid out in memory consecutively with the elements directly one after the
 /// other (if the struct is packed) or (if not packed) with padding between the
 /// elements as defined by DataLayout (which is required to match what the code
 /// generator for a target expects).
diff --git a/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h b/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
index 9256d48..51873be 100644
--- a/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
+++ b/linux-x64/clang/include/llvm/IR/DiagnosticHandler.h
@@ -18,7 +18,7 @@
 namespace llvm {
 class DiagnosticInfo;
 
-/// \brief This is the base class for diagnostic handling in LLVM.
+/// This is the base class for diagnostic handling in LLVM.
 /// The handleDiagnostics method must be overriden by the subclasses to handle
 /// diagnostic. The *RemarkEnabled methods can be overriden to control
 /// which remarks are enabled.
diff --git a/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h b/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
index bfec2be..b8fdae2 100644
--- a/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
+++ b/linux-x64/clang/include/llvm/IR/DiagnosticInfo.h
@@ -39,7 +39,7 @@
 class Module;
 class SMDiagnostic;
 
-/// \brief Defines the different supported severity of a diagnostic.
+/// Defines the different supported severity of a diagnostic.
 enum DiagnosticSeverity : char {
   DS_Error,
   DS_Warning,
@@ -49,7 +49,7 @@
   DS_Note
 };
 
-/// \brief Defines the different supported kind of a diagnostic.
+/// Defines the different supported kind of a diagnostic.
 /// This enum should be extended with a new ID for each added concrete subclass.
 enum DiagnosticKind {
   DK_InlineAsm,
@@ -79,7 +79,7 @@
   DK_FirstPluginKind
 };
 
-/// \brief Get the next available kind ID for a plugin diagnostic.
+/// Get the next available kind ID for a plugin diagnostic.
 /// Each time this function is called, it returns a different number.
 /// Therefore, a plugin that wants to "identify" its own classes
 /// with a dynamic identifier, just have to use this method to get a new ID
@@ -89,7 +89,7 @@
 /// DiagnosticKind values.
 int getNextAvailablePluginDiagnosticKind();
 
-/// \brief This is the base abstract class for diagnostic reporting in
+/// This is the base abstract class for diagnostic reporting in
 /// the backend.
 /// The print method must be overloaded by the subclasses to print a
 /// user-friendly message in the client of the backend (let us call it a
@@ -389,20 +389,20 @@
   DiagnosticLocation Loc;
 };
 
-/// \brief Common features for diagnostics dealing with optimization remarks
+/// Common features for diagnostics dealing with optimization remarks
 /// that are used by both IR and MIR passes.
 class DiagnosticInfoOptimizationBase : public DiagnosticInfoWithLocationBase {
 public:
-  /// \brief Used to set IsVerbose via the stream interface.
+  /// Used to set IsVerbose via the stream interface.
   struct setIsVerbose {};
 
-  /// \brief When an instance of this is inserted into the stream, the arguments
+  /// When an instance of this is inserted into the stream, the arguments
   /// following will not appear in the remark printed in the compiler output
   /// (-Rpass) but only in the optimization record file
   /// (-fsave-optimization-record).
   struct setExtraArgs {};
 
-  /// \brief Used in the streaming interface as the general argument type.  It
+  /// Used in the streaming interface as the general argument type.  It
   /// internally converts everything into a key-value pair.
   struct Argument {
     std::string Key;
@@ -414,6 +414,7 @@
     Argument(StringRef Key, const Value *V);
     Argument(StringRef Key, const Type *T);
     Argument(StringRef Key, StringRef S);
+    Argument(StringRef Key, const char *S) : Argument(Key, StringRef(S)) {};
     Argument(StringRef Key, int N);
     Argument(StringRef Key, float N);
     Argument(StringRef Key, long N);
@@ -504,7 +505,7 @@
   /// The remark is expected to be noisy.
   bool IsVerbose = false;
 
-  /// \brief If positive, the index of the first argument that only appear in
+  /// If positive, the index of the first argument that only appear in
   /// the optimization records and not in the remark printed in the compiler
   /// output.
   int FirstExtraArgIndex = -1;
@@ -587,7 +588,7 @@
   return R;
 }
 
-/// \brief Common features for diagnostics dealing with optimization remarks
+/// Common features for diagnostics dealing with optimization remarks
 /// that are used by IR passes.
 class DiagnosticInfoIROptimization : public DiagnosticInfoOptimizationBase {
 public:
@@ -609,7 +610,7 @@
                                        Loc),
         CodeRegion(CodeRegion) {}
 
-  /// \brief This is ctor variant allows a pass to build an optimization remark
+  /// This is ctor variant allows a pass to build an optimization remark
   /// from an existing remark.
   ///
   /// This is useful when a transformation pass (e.g LV) wants to emit a remark
@@ -712,7 +713,7 @@
                            const DiagnosticLocation &Loc,
                            const Value *CodeRegion);
 
-  /// \brief Same as above but \p Inst is used to derive code region and debug
+  /// Same as above but \p Inst is used to derive code region and debug
   /// location.
   OptimizationRemarkMissed(const char *PassName, StringRef RemarkName,
                            const Instruction *Inst);
@@ -753,7 +754,7 @@
                              const DiagnosticLocation &Loc,
                              const Value *CodeRegion);
 
-  /// \brief This is ctor variant allows a pass to build an optimization remark
+  /// This is ctor variant allows a pass to build an optimization remark
   /// from an existing remark.
   ///
   /// This is useful when a transformation pass (e.g LV) wants to emit a remark
@@ -764,7 +765,7 @@
                              const OptimizationRemarkAnalysis &Orig)
       : DiagnosticInfoIROptimization(PassName, Prepend, Orig) {}
 
-  /// \brief Same as above but \p Inst is used to derive code region and debug
+  /// Same as above but \p Inst is used to derive code region and debug
   /// location.
   OptimizationRemarkAnalysis(const char *PassName, StringRef RemarkName,
                              const Instruction *Inst);
diff --git a/linux-x64/clang/include/llvm/IR/DiagnosticPrinter.h b/linux-x64/clang/include/llvm/IR/DiagnosticPrinter.h
index 59c8329..25c47cd 100644
--- a/linux-x64/clang/include/llvm/IR/DiagnosticPrinter.h
+++ b/linux-x64/clang/include/llvm/IR/DiagnosticPrinter.h
@@ -28,7 +28,7 @@
 class Twine;
 class Value;
 
-/// \brief Interface for custom diagnostic printing.
+/// Interface for custom diagnostic printing.
 class DiagnosticPrinter {
 public:
   virtual ~DiagnosticPrinter() = default;
@@ -58,7 +58,7 @@
   virtual DiagnosticPrinter &operator<<(const SMDiagnostic &Diag) = 0;
 };
 
-/// \brief Basic diagnostic printer that uses an underlying raw_ostream.
+/// Basic diagnostic printer that uses an underlying raw_ostream.
 class DiagnosticPrinterRawOStream : public DiagnosticPrinter {
 protected:
   raw_ostream &Stream;
diff --git a/linux-x64/clang/include/llvm/IR/DomTreeUpdater.h b/linux-x64/clang/include/llvm/IR/DomTreeUpdater.h
new file mode 100644
index 0000000..e5bb092
--- /dev/null
+++ b/linux-x64/clang/include/llvm/IR/DomTreeUpdater.h
@@ -0,0 +1,257 @@
+//===- DomTreeUpdater.h - DomTree/Post DomTree Updater ----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines the DomTreeUpdater class, which provides a uniform way to
+// update dominator tree related data structures.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_DOMTREEUPDATER_H
+#define LLVM_DOMTREEUPDATER_H
+
+#include "llvm/Analysis/PostDominators.h"
+#include "llvm/IR/Dominators.h"
+#include "llvm/IR/Instructions.h"
+#include "llvm/IR/ValueHandle.h"
+#include "llvm/Support/GenericDomTree.h"
+#include <functional>
+#include <vector>
+
+namespace llvm {
+class DomTreeUpdater {
+public:
+  enum class UpdateStrategy : unsigned char { Eager = 0, Lazy = 1 };
+
+  explicit DomTreeUpdater(UpdateStrategy Strategy_) : Strategy(Strategy_) {}
+  DomTreeUpdater(DominatorTree &DT_, UpdateStrategy Strategy_)
+      : DT(&DT_), Strategy(Strategy_) {}
+  DomTreeUpdater(DominatorTree *DT_, UpdateStrategy Strategy_)
+      : DT(DT_), Strategy(Strategy_) {}
+  DomTreeUpdater(PostDominatorTree &PDT_, UpdateStrategy Strategy_)
+      : PDT(&PDT_), Strategy(Strategy_) {}
+  DomTreeUpdater(PostDominatorTree *PDT_, UpdateStrategy Strategy_)
+      : PDT(PDT_), Strategy(Strategy_) {}
+  DomTreeUpdater(DominatorTree &DT_, PostDominatorTree &PDT_,
+                 UpdateStrategy Strategy_)
+      : DT(&DT_), PDT(&PDT_), Strategy(Strategy_) {}
+  DomTreeUpdater(DominatorTree *DT_, PostDominatorTree *PDT_,
+                 UpdateStrategy Strategy_)
+      : DT(DT_), PDT(PDT_), Strategy(Strategy_) {}
+
+  ~DomTreeUpdater() { flush(); }
+
+  /// Returns true if the current strategy is Lazy.
+  bool isLazy() const { return Strategy == UpdateStrategy::Lazy; };
+
+  /// Returns true if the current strategy is Eager.
+  bool isEager() const { return Strategy == UpdateStrategy::Eager; };
+
+  /// Returns true if it holds a DominatorTree.
+  bool hasDomTree() const { return DT != nullptr; }
+
+  /// Returns true if it holds a PostDominatorTree.
+  bool hasPostDomTree() const { return PDT != nullptr; }
+
+  /// Returns true if there is BasicBlock awaiting deletion.
+  /// The deletion will only happen until a flush event and
+  /// all available trees are up-to-date.
+  /// Returns false under Eager UpdateStrategy.
+  bool hasPendingDeletedBB() const { return !DeletedBBs.empty(); }
+
+  /// Returns true if DelBB is awaiting deletion.
+  /// Returns false under Eager UpdateStrategy.
+  bool isBBPendingDeletion(BasicBlock *DelBB) const;
+
+  /// Returns true if either of DT or PDT is valid and the tree has at
+  /// least one update pending. If DT or PDT is nullptr it is treated
+  /// as having no pending updates. This function does not check
+  /// whether there is BasicBlock awaiting deletion.
+  /// Returns false under Eager UpdateStrategy.
+  bool hasPendingUpdates() const;
+
+  /// Returns true if there are DominatorTree updates queued.
+  /// Returns false under Eager UpdateStrategy or DT is nullptr.
+  bool hasPendingDomTreeUpdates() const;
+
+  /// Returns true if there are PostDominatorTree updates queued.
+  /// Returns false under Eager UpdateStrategy or PDT is nullptr.
+  bool hasPendingPostDomTreeUpdates() const;
+
+  /// Apply updates on all available trees. Under Eager UpdateStrategy with
+  /// ForceRemoveDuplicates enabled or under Lazy UpdateStrategy, it will
+  /// discard duplicated updates and self-dominance updates. If both DT and PDT
+  /// are nullptrs, this function discards all updates. The Eager Strategy
+  /// applies the updates immediately while the Lazy Strategy queues the
+  /// updates. It is required for the state of the LLVM IR to be updated
+  /// *before* applying the Updates because the internal update routine will
+  /// analyze the current state of the relationship between a pair of (From, To)
+  /// BasicBlocks to determine whether a single update needs to be discarded.
+  void applyUpdates(ArrayRef<DominatorTree::UpdateType> Updates,
+                    bool ForceRemoveDuplicates = false);
+
+  /// Notify all available trees on an edge insertion. If both DT and PDT are
+  /// nullptrs, this function discards the update. Under either Strategy,
+  /// self-dominance update will be removed. The Eager Strategy applies
+  /// the update immediately while the Lazy Strategy queues the update.
+  /// It is recommended to only use this method when you have exactly one
+  /// insertion (and no deletions). It is recommended to use applyUpdates() in
+  /// all other cases. This function has to be called *after* making the update
+  /// on the actual CFG. An internal functions checks if the edge exists in the
+  /// CFG in DEBUG mode.
+  void insertEdge(BasicBlock *From, BasicBlock *To);
+
+  /// Notify all available trees on an edge insertion.
+  /// Under either Strategy, the following updates will be discard silently
+  /// 1. Invalid - Inserting an edge that does not exist in the CFG.
+  /// 2. Self-dominance update.
+  /// 3. Both DT and PDT are nullptrs.
+  /// The Eager Strategy applies the update immediately while the Lazy Strategy
+  /// queues the update. It is recommended to only use this method when you have
+  /// exactly one insertion (and no deletions) and want to discard an invalid
+  /// update.
+  void insertEdgeRelaxed(BasicBlock *From, BasicBlock *To);
+
+  /// Notify all available trees on an edge deletion. If both DT and PDT are
+  /// nullptrs, this function discards the update. Under either Strategy,
+  /// self-dominance update will be removed. The Eager Strategy applies
+  /// the update immediately while the Lazy Strategy queues the update.
+  /// It is recommended to only use this method when you have exactly one
+  /// deletion (and no insertions). It is recommended to use applyUpdates() in
+  /// all other cases. This function has to be called *after* making the update
+  /// on the actual CFG. An internal functions checks if the edge doesn't exist
+  /// in the CFG in DEBUG mode.
+  void deleteEdge(BasicBlock *From, BasicBlock *To);
+
+  /// Notify all available trees on an edge deletion.
+  /// Under either Strategy, the following updates will be discard silently
+  /// 1. Invalid - Deleting an edge that still exists in the CFG.
+  /// 2. Self-dominance update.
+  /// 3. Both DT and PDT are nullptrs.
+  /// The Eager Strategy applies the update immediately while the Lazy Strategy
+  /// queues the update. It is recommended to only use this method when you have
+  /// exactly one deletion (and no insertions) and want to discard an invalid
+  /// update.
+  void deleteEdgeRelaxed(BasicBlock *From, BasicBlock *To);
+
+  /// Delete DelBB. DelBB will be removed from its Parent and
+  /// erased from available trees if it exists and finally get deleted.
+  /// Under Eager UpdateStrategy, DelBB will be processed immediately.
+  /// Under Lazy UpdateStrategy, DelBB will be queued until a flush event and
+  /// all available trees are up-to-date. Assert if any instruction of DelBB is
+  /// modified while awaiting deletion. When both DT and PDT are nullptrs, DelBB
+  /// will be queued until flush() is called.
+  void deleteBB(BasicBlock *DelBB);
+
+  /// Delete DelBB. DelBB will be removed from its Parent and
+  /// erased from available trees if it exists. Then the callback will
+  /// be called. Finally, DelBB will be deleted.
+  /// Under Eager UpdateStrategy, DelBB will be processed immediately.
+  /// Under Lazy UpdateStrategy, DelBB will be queued until a flush event and
+  /// all available trees are up-to-date. Assert if any instruction of DelBB is
+  /// modified while awaiting deletion. Multiple callbacks can be queued for one
+  /// DelBB under Lazy UpdateStrategy.
+  void callbackDeleteBB(BasicBlock *DelBB,
+                        std::function<void(BasicBlock *)> Callback);
+
+  /// Recalculate all available trees and flush all BasicBlocks
+  /// awaiting deletion immediately.
+  void recalculate(Function &F);
+
+  /// Flush DomTree updates and return DomTree.
+  /// It also flush out of date updates applied by all available trees
+  /// and flush Deleted BBs if both trees are up-to-date.
+  /// It must only be called when it has a DomTree.
+  DominatorTree &getDomTree();
+
+  /// Flush PostDomTree updates and return PostDomTree.
+  /// It also flush out of date updates applied by all available trees
+  /// and flush Deleted BBs if both trees are up-to-date.
+  /// It must only be called when it has a PostDomTree.
+  PostDominatorTree &getPostDomTree();
+
+  /// Apply all pending updates to available trees and flush all BasicBlocks
+  /// awaiting deletion.
+  /// Does nothing under Eager UpdateStrategy.
+  void flush();
+
+  /// Debug method to help view the internal state of this class.
+  LLVM_DUMP_METHOD void dump() const;
+
+private:
+  class CallBackOnDeletion final : public CallbackVH {
+  public:
+    CallBackOnDeletion(BasicBlock *V,
+                       std::function<void(BasicBlock *)> Callback)
+        : CallbackVH(V), DelBB(V), Callback_(Callback) {}
+
+  private:
+    BasicBlock *DelBB = nullptr;
+    std::function<void(BasicBlock *)> Callback_;
+
+    void deleted() override {
+      Callback_(DelBB);
+      CallbackVH::deleted();
+    }
+  };
+
+  SmallVector<DominatorTree::UpdateType, 16> PendUpdates;
+  size_t PendDTUpdateIndex = 0;
+  size_t PendPDTUpdateIndex = 0;
+  DominatorTree *DT = nullptr;
+  PostDominatorTree *PDT = nullptr;
+  const UpdateStrategy Strategy;
+  SmallPtrSet<BasicBlock *, 8> DeletedBBs;
+  std::vector<CallBackOnDeletion> Callbacks;
+  bool IsRecalculatingDomTree = false;
+  bool IsRecalculatingPostDomTree = false;
+
+  /// First remove all the instructions of DelBB and then make sure DelBB has a
+  /// valid terminator instruction which is necessary to have when DelBB still
+  /// has to be inside of its parent Function while awaiting deletion under Lazy
+  /// UpdateStrategy to prevent other routines from asserting the state of the
+  /// IR is inconsistent. Assert if DelBB is nullptr or has predecessors.
+  void validateDeleteBB(BasicBlock *DelBB);
+
+  /// Returns true if at least one BasicBlock is deleted.
+  bool forceFlushDeletedBB();
+
+  /// Deduplicate and remove unnecessary updates (no-ops) when using Lazy
+  /// UpdateStrategy. Returns true if the update is queued for update.
+  bool applyLazyUpdate(DominatorTree::UpdateKind Kind, BasicBlock *From,
+                       BasicBlock *To);
+
+  /// Helper function to apply all pending DomTree updates.
+  void applyDomTreeUpdates();
+
+  /// Helper function to apply all pending PostDomTree updates.
+  void applyPostDomTreeUpdates();
+
+  /// Helper function to flush deleted BasicBlocks if all available
+  /// trees are up-to-date.
+  void tryFlushDeletedBB();
+
+  /// Drop all updates applied by all available trees and delete BasicBlocks if
+  /// all available trees are up-to-date.
+  void dropOutOfDateUpdates();
+
+  /// Erase Basic Block node that has been unlinked from Function
+  /// in the DomTree and PostDomTree.
+  void eraseDelBBNode(BasicBlock *DelBB);
+
+  /// Returns true if the update appears in the LLVM IR.
+  /// It is used to check whether an update is valid in
+  /// insertEdge/deleteEdge or is unnecessary in the batch update.
+  bool isUpdateValid(DominatorTree::UpdateType Update) const;
+
+  /// Returns true if the update is self dominance.
+  bool isSelfDominance(DominatorTree::UpdateType Update) const;
+};
+} // namespace llvm
+
+#endif // LLVM_DOMTREEUPDATER_H
diff --git a/linux-x64/clang/include/llvm/IR/Dominators.h b/linux-x64/clang/include/llvm/IR/Dominators.h
index f6811bc..f9e992b 100644
--- a/linux-x64/clang/include/llvm/IR/Dominators.h
+++ b/linux-x64/clang/include/llvm/IR/Dominators.h
@@ -121,7 +121,7 @@
   }
 };
 
-/// \brief Concrete subclass of DominatorTreeBase that is used to compute a
+/// Concrete subclass of DominatorTreeBase that is used to compute a
 /// normal dominator tree.
 ///
 /// Definition: A block is said to be forward statically reachable if there is
@@ -153,7 +153,7 @@
   // Ensure base-class overloads are visible.
   using Base::dominates;
 
-  /// \brief Return true if Def dominates a use in User.
+  /// Return true if Def dominates a use in User.
   ///
   /// This performs the special checks necessary if Def and User are in the same
   /// basic block. Note that Def doesn't dominate a use in Def itself!
@@ -171,7 +171,7 @@
   // Ensure base class overloads are visible.
   using Base::isReachableFromEntry;
 
-  /// \brief Provide an overload for a Use.
+  /// Provide an overload for a Use.
   bool isReachableFromEntry(const Use &U) const;
 
   // Pop up a GraphViz/gv window with the Dominator Tree rendered using `dot`.
@@ -221,20 +221,20 @@
   }
 };
 
-/// \brief Analysis pass which computes a \c DominatorTree.
+/// Analysis pass which computes a \c DominatorTree.
 class DominatorTreeAnalysis : public AnalysisInfoMixin<DominatorTreeAnalysis> {
   friend AnalysisInfoMixin<DominatorTreeAnalysis>;
   static AnalysisKey Key;
 
 public:
-  /// \brief Provide the result typedef for this analysis pass.
+  /// Provide the result typedef for this analysis pass.
   using Result = DominatorTree;
 
-  /// \brief Run the analysis pass over a function and produce a dominator tree.
+  /// Run the analysis pass over a function and produce a dominator tree.
   DominatorTree run(Function &F, FunctionAnalysisManager &);
 };
 
-/// \brief Printer pass for the \c DominatorTree.
+/// Printer pass for the \c DominatorTree.
 class DominatorTreePrinterPass
     : public PassInfoMixin<DominatorTreePrinterPass> {
   raw_ostream &OS;
@@ -245,12 +245,12 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Verifier pass for the \c DominatorTree.
+/// Verifier pass for the \c DominatorTree.
 struct DominatorTreeVerifierPass : PassInfoMixin<DominatorTreeVerifierPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Legacy analysis pass which computes a \c DominatorTree.
+/// Legacy analysis pass which computes a \c DominatorTree.
 class DominatorTreeWrapperPass : public FunctionPass {
   DominatorTree DT;
 
@@ -278,7 +278,7 @@
 };
 
 //===-------------------------------------
-/// \brief Class to defer updates to a DominatorTree.
+/// Class to defer updates to a DominatorTree.
 ///
 /// Definition: Applying updates to every edge insertion and deletion is
 /// expensive and not necessary. When one needs the DominatorTree for analysis
@@ -308,40 +308,40 @@
 public:
   DeferredDominance(DominatorTree &DT_) : DT(DT_) {}
 
-  /// \brief Queues multiple updates and discards duplicates.
+  /// Queues multiple updates and discards duplicates.
   void applyUpdates(ArrayRef<DominatorTree::UpdateType> Updates);
 
-  /// \brief Helper method for a single edge insertion. It's almost always
+  /// Helper method for a single edge insertion. It's almost always
   /// better to batch updates and call applyUpdates to quickly remove duplicate
   /// edges. This is best used when there is only a single insertion needed to
   /// update Dominators.
   void insertEdge(BasicBlock *From, BasicBlock *To);
 
-  /// \brief Helper method for a single edge deletion. It's almost always better
+  /// Helper method for a single edge deletion. It's almost always better
   /// to batch updates and call applyUpdates to quickly remove duplicate edges.
   /// This is best used when there is only a single deletion needed to update
   /// Dominators.
   void deleteEdge(BasicBlock *From, BasicBlock *To);
 
-  /// \brief Delays the deletion of a basic block until a flush() event.
+  /// Delays the deletion of a basic block until a flush() event.
   void deleteBB(BasicBlock *DelBB);
 
-  /// \brief Returns true if DelBB is awaiting deletion at a flush() event.
+  /// Returns true if DelBB is awaiting deletion at a flush() event.
   bool pendingDeletedBB(BasicBlock *DelBB);
 
-  /// \brief Returns true if pending DT updates are queued for a flush() event.
+  /// Returns true if pending DT updates are queued for a flush() event.
   bool pending();
 
-  /// \brief Flushes all pending updates and block deletions. Returns a
+  /// Flushes all pending updates and block deletions. Returns a
   /// correct DominatorTree reference to be used by the caller for analysis.
   DominatorTree &flush();
 
-  /// \brief Drops all internal state and forces a (slow) recalculation of the
+  /// Drops all internal state and forces a (slow) recalculation of the
   /// DominatorTree based on the current state of the LLVM IR in F. This should
   /// only be used in corner cases such as the Entry block of F being deleted.
   void recalculate(Function &F);
 
-  /// \brief Debug method to help view the state of pending updates.
+  /// Debug method to help view the state of pending updates.
   LLVM_DUMP_METHOD void dump() const;
 
 private:
diff --git a/linux-x64/clang/include/llvm/IR/Function.h b/linux-x64/clang/include/llvm/IR/Function.h
index ec9d370..c8d6b07 100644
--- a/linux-x64/clang/include/llvm/IR/Function.h
+++ b/linux-x64/clang/include/llvm/IR/Function.h
@@ -141,6 +141,11 @@
   // Provide fast operand accessors.
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
 
+  /// Returns the number of non-debug IR instructions in this function.
+  /// This is equivalent to the sum of the sizes of each basic block contained
+  /// within this function.
+  unsigned getInstructionCount();
+
   /// Returns the FunctionType for me.
   FunctionType *getFunctionType() const {
     return cast<FunctionType>(getValueType());
@@ -181,7 +186,7 @@
 
   static Intrinsic::ID lookupIntrinsicID(StringRef Name);
 
-  /// \brief Recalculate the ID for this function if it is an Intrinsic defined
+  /// Recalculate the ID for this function if it is an Intrinsic defined
   /// in llvm/Intrinsics.h.  Sets the intrinsic ID to Intrinsic::not_intrinsic
   /// if the name of this function does not match an intrinsic in that header.
   /// Note, this method does not need to be called directly, as it is called
@@ -201,34 +206,34 @@
     setValueSubclassData((getSubclassDataFromValue() & 0xc00f) | (ID << 4));
   }
 
-  /// @brief Return the attribute list for this Function.
+  /// Return the attribute list for this Function.
   AttributeList getAttributes() const { return AttributeSets; }
 
-  /// @brief Set the attribute list for this Function.
+  /// Set the attribute list for this Function.
   void setAttributes(AttributeList Attrs) { AttributeSets = Attrs; }
 
-  /// @brief Add function attributes to this function.
+  /// Add function attributes to this function.
   void addFnAttr(Attribute::AttrKind Kind) {
     addAttribute(AttributeList::FunctionIndex, Kind);
   }
 
-  /// @brief Add function attributes to this function.
+  /// Add function attributes to this function.
   void addFnAttr(StringRef Kind, StringRef Val = StringRef()) {
     addAttribute(AttributeList::FunctionIndex,
                  Attribute::get(getContext(), Kind, Val));
   }
 
-  /// @brief Add function attributes to this function.
+  /// Add function attributes to this function.
   void addFnAttr(Attribute Attr) {
     addAttribute(AttributeList::FunctionIndex, Attr);
   }
 
-  /// @brief Remove function attributes from this function.
+  /// Remove function attributes from this function.
   void removeFnAttr(Attribute::AttrKind Kind) {
     removeAttribute(AttributeList::FunctionIndex, Kind);
   }
 
-  /// @brief Remove function attribute from this function.
+  /// Remove function attribute from this function.
   void removeFnAttr(StringRef Kind) {
     setAttributes(getAttributes().removeAttribute(
         getContext(), AttributeList::FunctionIndex, Kind));
@@ -263,7 +268,7 @@
     static ProfileCount getInvalid() { return ProfileCount(-1, PCT_Invalid); }
   };
 
-  /// \brief Set the entry count for this function.
+  /// Set the entry count for this function.
   ///
   /// Entry count is the number of times this function was executed based on
   /// pgo data. \p Imports points to a set of GUIDs that needs to
@@ -276,7 +281,7 @@
   void setEntryCount(uint64_t Count, ProfileCountType Type = PCT_Real,
                      const DenseSet<GlobalValue::GUID> *Imports = nullptr);
 
-  /// \brief Get the entry count for this function.
+  /// Get the entry count for this function.
   ///
   /// Entry count is the number of times the function was executed based on
   /// pgo data.
@@ -298,27 +303,27 @@
   /// Get the section prefix for this function.
   Optional<StringRef> getSectionPrefix() const;
 
-  /// @brief Return true if the function has the attribute.
+  /// Return true if the function has the attribute.
   bool hasFnAttribute(Attribute::AttrKind Kind) const {
     return AttributeSets.hasFnAttribute(Kind);
   }
 
-  /// @brief Return true if the function has the attribute.
+  /// Return true if the function has the attribute.
   bool hasFnAttribute(StringRef Kind) const {
     return AttributeSets.hasFnAttribute(Kind);
   }
 
-  /// @brief Return the attribute for the given attribute kind.
+  /// Return the attribute for the given attribute kind.
   Attribute getFnAttribute(Attribute::AttrKind Kind) const {
     return getAttribute(AttributeList::FunctionIndex, Kind);
   }
 
-  /// @brief Return the attribute for the given attribute kind.
+  /// Return the attribute for the given attribute kind.
   Attribute getFnAttribute(StringRef Kind) const {
     return getAttribute(AttributeList::FunctionIndex, Kind);
   }
 
-  /// \brief Return the stack alignment for the function.
+  /// Return the stack alignment for the function.
   unsigned getFnStackAlignment() const {
     if (!hasFnAttribute(Attribute::StackAlignment))
       return 0;
@@ -334,110 +339,110 @@
   void setGC(std::string Str);
   void clearGC();
 
-  /// @brief adds the attribute to the list of attributes.
+  /// adds the attribute to the list of attributes.
   void addAttribute(unsigned i, Attribute::AttrKind Kind);
 
-  /// @brief adds the attribute to the list of attributes.
+  /// adds the attribute to the list of attributes.
   void addAttribute(unsigned i, Attribute Attr);
 
-  /// @brief adds the attributes to the list of attributes.
+  /// adds the attributes to the list of attributes.
   void addAttributes(unsigned i, const AttrBuilder &Attrs);
 
-  /// @brief adds the attribute to the list of attributes for the given arg.
+  /// adds the attribute to the list of attributes for the given arg.
   void addParamAttr(unsigned ArgNo, Attribute::AttrKind Kind);
 
-  /// @brief adds the attribute to the list of attributes for the given arg.
+  /// adds the attribute to the list of attributes for the given arg.
   void addParamAttr(unsigned ArgNo, Attribute Attr);
 
-  /// @brief adds the attributes to the list of attributes for the given arg.
+  /// adds the attributes to the list of attributes for the given arg.
   void addParamAttrs(unsigned ArgNo, const AttrBuilder &Attrs);
 
-  /// @brief removes the attribute from the list of attributes.
+  /// removes the attribute from the list of attributes.
   void removeAttribute(unsigned i, Attribute::AttrKind Kind);
 
-  /// @brief removes the attribute from the list of attributes.
+  /// removes the attribute from the list of attributes.
   void removeAttribute(unsigned i, StringRef Kind);
 
-  /// @brief removes the attributes from the list of attributes.
+  /// removes the attributes from the list of attributes.
   void removeAttributes(unsigned i, const AttrBuilder &Attrs);
 
-  /// @brief removes the attribute from the list of attributes.
+  /// removes the attribute from the list of attributes.
   void removeParamAttr(unsigned ArgNo, Attribute::AttrKind Kind);
 
-  /// @brief removes the attribute from the list of attributes.
+  /// removes the attribute from the list of attributes.
   void removeParamAttr(unsigned ArgNo, StringRef Kind);
 
-  /// @brief removes the attribute from the list of attributes.
+  /// removes the attribute from the list of attributes.
   void removeParamAttrs(unsigned ArgNo, const AttrBuilder &Attrs);
 
-  /// @brief check if an attributes is in the list of attributes.
+  /// check if an attributes is in the list of attributes.
   bool hasAttribute(unsigned i, Attribute::AttrKind Kind) const {
     return getAttributes().hasAttribute(i, Kind);
   }
 
-  /// @brief check if an attributes is in the list of attributes.
+  /// check if an attributes is in the list of attributes.
   bool hasParamAttribute(unsigned ArgNo, Attribute::AttrKind Kind) const {
     return getAttributes().hasParamAttribute(ArgNo, Kind);
   }
 
-  /// @brief gets the attribute from the list of attributes.
+  /// gets the attribute from the list of attributes.
   Attribute getAttribute(unsigned i, Attribute::AttrKind Kind) const {
     return AttributeSets.getAttribute(i, Kind);
   }
 
-  /// @brief gets the attribute from the list of attributes.
+  /// gets the attribute from the list of attributes.
   Attribute getAttribute(unsigned i, StringRef Kind) const {
     return AttributeSets.getAttribute(i, Kind);
   }
 
-  /// @brief adds the dereferenceable attribute to the list of attributes.
+  /// adds the dereferenceable attribute to the list of attributes.
   void addDereferenceableAttr(unsigned i, uint64_t Bytes);
 
-  /// @brief adds the dereferenceable attribute to the list of attributes for
+  /// adds the dereferenceable attribute to the list of attributes for
   /// the given arg.
   void addDereferenceableParamAttr(unsigned ArgNo, uint64_t Bytes);
 
-  /// @brief adds the dereferenceable_or_null attribute to the list of
+  /// adds the dereferenceable_or_null attribute to the list of
   /// attributes.
   void addDereferenceableOrNullAttr(unsigned i, uint64_t Bytes);
 
-  /// @brief adds the dereferenceable_or_null attribute to the list of
+  /// adds the dereferenceable_or_null attribute to the list of
   /// attributes for the given arg.
   void addDereferenceableOrNullParamAttr(unsigned ArgNo, uint64_t Bytes);
 
-  /// @brief Extract the alignment for a call or parameter (0=unknown).
+  /// Extract the alignment for a call or parameter (0=unknown).
   unsigned getParamAlignment(unsigned ArgNo) const {
     return AttributeSets.getParamAlignment(ArgNo);
   }
 
-  /// @brief Extract the number of dereferenceable bytes for a call or
+  /// Extract the number of dereferenceable bytes for a call or
   /// parameter (0=unknown).
   /// @param i AttributeList index, referring to a return value or argument.
   uint64_t getDereferenceableBytes(unsigned i) const {
     return AttributeSets.getDereferenceableBytes(i);
   }
 
-  /// @brief Extract the number of dereferenceable bytes for a parameter.
+  /// Extract the number of dereferenceable bytes for a parameter.
   /// @param ArgNo Index of an argument, with 0 being the first function arg.
   uint64_t getParamDereferenceableBytes(unsigned ArgNo) const {
     return AttributeSets.getParamDereferenceableBytes(ArgNo);
   }
 
-  /// @brief Extract the number of dereferenceable_or_null bytes for a call or
+  /// Extract the number of dereferenceable_or_null bytes for a call or
   /// parameter (0=unknown).
   /// @param i AttributeList index, referring to a return value or argument.
   uint64_t getDereferenceableOrNullBytes(unsigned i) const {
     return AttributeSets.getDereferenceableOrNullBytes(i);
   }
 
-  /// @brief Extract the number of dereferenceable_or_null bytes for a
+  /// Extract the number of dereferenceable_or_null bytes for a
   /// parameter.
   /// @param ArgNo AttributeList ArgNo, referring to an argument.
   uint64_t getParamDereferenceableOrNullBytes(unsigned ArgNo) const {
     return AttributeSets.getParamDereferenceableOrNullBytes(ArgNo);
   }
 
-  /// @brief Determine if the function does not access memory.
+  /// Determine if the function does not access memory.
   bool doesNotAccessMemory() const {
     return hasFnAttribute(Attribute::ReadNone);
   }
@@ -445,7 +450,7 @@
     addFnAttr(Attribute::ReadNone);
   }
 
-  /// @brief Determine if the function does not access or only reads memory.
+  /// Determine if the function does not access or only reads memory.
   bool onlyReadsMemory() const {
     return doesNotAccessMemory() || hasFnAttribute(Attribute::ReadOnly);
   }
@@ -453,7 +458,7 @@
     addFnAttr(Attribute::ReadOnly);
   }
 
-  /// @brief Determine if the function does not access or only writes memory.
+  /// Determine if the function does not access or only writes memory.
   bool doesNotReadMemory() const {
     return doesNotAccessMemory() || hasFnAttribute(Attribute::WriteOnly);
   }
@@ -461,14 +466,14 @@
     addFnAttr(Attribute::WriteOnly);
   }
 
-  /// @brief Determine if the call can access memmory only using pointers based
+  /// Determine if the call can access memmory only using pointers based
   /// on its arguments.
   bool onlyAccessesArgMemory() const {
     return hasFnAttribute(Attribute::ArgMemOnly);
   }
   void setOnlyAccessesArgMemory() { addFnAttr(Attribute::ArgMemOnly); }
 
-  /// @brief Determine if the function may only access memory that is
+  /// Determine if the function may only access memory that is
   ///  inaccessible from the IR.
   bool onlyAccessesInaccessibleMemory() const {
     return hasFnAttribute(Attribute::InaccessibleMemOnly);
@@ -477,7 +482,7 @@
     addFnAttr(Attribute::InaccessibleMemOnly);
   }
 
-  /// @brief Determine if the function may only access memory that is
+  /// Determine if the function may only access memory that is
   ///  either inaccessible from the IR or pointed to by its arguments.
   bool onlyAccessesInaccessibleMemOrArgMem() const {
     return hasFnAttribute(Attribute::InaccessibleMemOrArgMemOnly);
@@ -486,7 +491,7 @@
     addFnAttr(Attribute::InaccessibleMemOrArgMemOnly);
   }
 
-  /// @brief Determine if the function cannot return.
+  /// Determine if the function cannot return.
   bool doesNotReturn() const {
     return hasFnAttribute(Attribute::NoReturn);
   }
@@ -497,7 +502,7 @@
   /// Determine if the function should not perform indirect branch tracking.
   bool doesNoCfCheck() const { return hasFnAttribute(Attribute::NoCfCheck); }
 
-  /// @brief Determine if the function cannot unwind.
+  /// Determine if the function cannot unwind.
   bool doesNotThrow() const {
     return hasFnAttribute(Attribute::NoUnwind);
   }
@@ -505,7 +510,7 @@
     addFnAttr(Attribute::NoUnwind);
   }
 
-  /// @brief Determine if the call cannot be duplicated.
+  /// Determine if the call cannot be duplicated.
   bool cannotDuplicate() const {
     return hasFnAttribute(Attribute::NoDuplicate);
   }
@@ -513,7 +518,7 @@
     addFnAttr(Attribute::NoDuplicate);
   }
 
-  /// @brief Determine if the call is convergent.
+  /// Determine if the call is convergent.
   bool isConvergent() const {
     return hasFnAttribute(Attribute::Convergent);
   }
@@ -524,7 +529,7 @@
     removeFnAttr(Attribute::Convergent);
   }
 
-  /// @brief Determine if the call has sideeffects.
+  /// Determine if the call has sideeffects.
   bool isSpeculatable() const {
     return hasFnAttribute(Attribute::Speculatable);
   }
@@ -541,7 +546,7 @@
     addFnAttr(Attribute::NoRecurse);
   }
 
-  /// @brief True if the ABI mandates (or the user requested) that this
+  /// True if the ABI mandates (or the user requested) that this
   /// function be in a unwind table.
   bool hasUWTable() const {
     return hasFnAttribute(Attribute::UWTable);
@@ -550,19 +555,19 @@
     addFnAttr(Attribute::UWTable);
   }
 
-  /// @brief True if this function needs an unwind table.
+  /// True if this function needs an unwind table.
   bool needsUnwindTableEntry() const {
     return hasUWTable() || !doesNotThrow();
   }
 
-  /// @brief Determine if the function returns a structure through first
+  /// Determine if the function returns a structure through first
   /// or second pointer argument.
   bool hasStructRetAttr() const {
     return AttributeSets.hasParamAttribute(0, Attribute::StructRet) ||
            AttributeSets.hasParamAttribute(1, Attribute::StructRet);
   }
 
-  /// @brief Determine if the parameter or return value is marked with NoAlias
+  /// Determine if the parameter or return value is marked with NoAlias
   /// attribute.
   bool returnDoesNotAlias() const {
     return AttributeSets.hasAttribute(AttributeList::ReturnIndex,
@@ -679,30 +684,30 @@
   size_t arg_size() const { return NumArgs; }
   bool arg_empty() const { return arg_size() == 0; }
 
-  /// \brief Check whether this function has a personality function.
+  /// Check whether this function has a personality function.
   bool hasPersonalityFn() const {
     return getSubclassDataFromValue() & (1<<3);
   }
 
-  /// \brief Get the personality function associated with this function.
+  /// Get the personality function associated with this function.
   Constant *getPersonalityFn() const;
   void setPersonalityFn(Constant *Fn);
 
-  /// \brief Check whether this function has prefix data.
+  /// Check whether this function has prefix data.
   bool hasPrefixData() const {
     return getSubclassDataFromValue() & (1<<1);
   }
 
-  /// \brief Get the prefix data associated with this function.
+  /// Get the prefix data associated with this function.
   Constant *getPrefixData() const;
   void setPrefixData(Constant *PrefixData);
 
-  /// \brief Check whether this function has prologue data.
+  /// Check whether this function has prologue data.
   bool hasPrologueData() const {
     return getSubclassDataFromValue() & (1<<2);
   }
 
-  /// \brief Get the prologue data associated with this function.
+  /// Get the prologue data associated with this function.
   Constant *getPrologueData() const;
   void setPrologueData(Constant *PrologueData);
 
@@ -762,12 +767,12 @@
   /// setjmp or other function that gcc recognizes as "returning twice".
   bool callsFunctionThatReturnsTwice() const;
 
-  /// \brief Set the attached subprogram.
+  /// Set the attached subprogram.
   ///
   /// Calls \a setMetadata() with \a LLVMContext::MD_dbg.
   void setSubprogram(DISubprogram *SP);
 
-  /// \brief Get the attached subprogram.
+  /// Get the attached subprogram.
   ///
   /// Calls \a getMetadata() with \a LLVMContext::MD_dbg and casts the result
   /// to \a DISubprogram.
@@ -776,6 +781,12 @@
   /// Returns true if we should emit debug info for profiling.
   bool isDebugInfoForProfiling() const;
 
+  /// Check if null pointer dereferencing is considered undefined behavior for
+  /// the function.
+  /// Return value: false => null pointer dereference is undefined.
+  /// Return value: true =>  null pointer dereference is not undefined.
+  bool nullPointerIsDefined() const;
+
 private:
   void allocHungoffUselist();
   template<int Idx> void setHungoffOperand(Constant *C);
@@ -788,6 +799,13 @@
   void setValueSubclassDataBit(unsigned Bit, bool On);
 };
 
+/// Check whether null pointer dereferencing is considered undefined behavior
+/// for a given function or an address space.
+/// Null pointer access in non-zero address space is not considered undefined.
+/// Return value: false => null pointer dereference is undefined.
+/// Return value: true =>  null pointer dereference is not undefined.
+bool NullPointerIsDefined(const Function *F, unsigned AS = 0);
+
 template <>
 struct OperandTraits<Function> : public HungoffOperandTraits<3> {};
 
diff --git a/linux-x64/clang/include/llvm/IR/GlobalObject.h b/linux-x64/clang/include/llvm/IR/GlobalObject.h
index 278b193..1fd3568 100644
--- a/linux-x64/clang/include/llvm/IR/GlobalObject.h
+++ b/linux-x64/clang/include/llvm/IR/GlobalObject.h
@@ -105,6 +105,14 @@
   /// Check if this has any metadata.
   bool hasMetadata() const { return hasMetadataHashEntry(); }
 
+  /// Check if this has any metadata of the given kind.
+  bool hasMetadata(unsigned KindID) const {
+    return getMetadata(KindID) != nullptr;
+  }
+  bool hasMetadata(StringRef Kind) const {
+    return getMetadata(Kind) != nullptr;
+  }
+
   /// Get the current metadata attachments for the given kind, if any.
   ///
   /// These functions require that the function have at most a single attachment
@@ -143,7 +151,9 @@
   getAllMetadata(SmallVectorImpl<std::pair<unsigned, MDNode *>> &MDs) const;
 
   /// Erase all metadata attachments with the given kind.
-  void eraseMetadata(unsigned KindID);
+  ///
+  /// \returns true if any metadata was removed.
+  bool eraseMetadata(unsigned KindID);
 
   /// Copy metadata from Src, adjusting offsets by Offset.
   void copyMetadata(const GlobalObject *Src, unsigned Offset);
diff --git a/linux-x64/clang/include/llvm/IR/GlobalValue.h b/linux-x64/clang/include/llvm/IR/GlobalValue.h
index 35b0b69..9d9f4f6 100644
--- a/linux-x64/clang/include/llvm/IR/GlobalValue.h
+++ b/linux-x64/clang/include/llvm/IR/GlobalValue.h
@@ -44,7 +44,7 @@
 
 class GlobalValue : public Constant {
 public:
-  /// @brief An enumeration for the kinds of linkage for global values.
+  /// An enumeration for the kinds of linkage for global values.
   enum LinkageTypes {
     ExternalLinkage = 0,///< Externally visible function
     AvailableExternallyLinkage, ///< Available for inspection, not emission.
@@ -59,14 +59,14 @@
     CommonLinkage       ///< Tentative definitions.
   };
 
-  /// @brief An enumeration for the kinds of visibility of global values.
+  /// An enumeration for the kinds of visibility of global values.
   enum VisibilityTypes {
     DefaultVisibility = 0,  ///< The GV is visible
     HiddenVisibility,       ///< The GV is hidden
     ProtectedVisibility     ///< The GV is protected
   };
 
-  /// @brief Storage classes of global values for PE targets.
+  /// Storage classes of global values for PE targets.
   enum DLLStorageClassTypes {
     DefaultStorageClass   = 0,
     DLLImportStorageClass = 1, ///< Function to be imported from DLL
@@ -110,18 +110,12 @@
   unsigned IsDSOLocal : 1;
 
 private:
-  friend class Constant;
-
-  void maybeSetDsoLocal() {
-    if (hasLocalLinkage() ||
-        (!hasDefaultVisibility() && !hasExternalWeakLinkage()))
-      setDSOLocal(true);
-  }
-
   // Give subclasses access to what otherwise would be wasted padding.
   // (17 + 4 + 2 + 2 + 2 + 3 + 1 + 1) == 32.
   unsigned SubClassData : GlobalValueSubClassDataBits;
 
+  friend class Constant;
+
   void destroyConstantImpl();
   Value *handleOperandChangeImpl(Value *From, Value *To);
 
@@ -149,8 +143,14 @@
     llvm_unreachable("Fully covered switch above!");
   }
 
+  void maybeSetDsoLocal() {
+    if (hasLocalLinkage() ||
+        (!hasDefaultVisibility() && !hasExternalWeakLinkage()))
+      setDSOLocal(true);
+  }
+
 protected:
-  /// \brief The intrinsic ID for this subclass (which must be a Function).
+  /// The intrinsic ID for this subclass (which must be a Function).
   ///
   /// This member is defined by this class, but not used for anything.
   /// Subclasses can use it to store their intrinsic ID, if they have one.
diff --git a/linux-x64/clang/include/llvm/IR/IRBuilder.h b/linux-x64/clang/include/llvm/IR/IRBuilder.h
index e46544a..70641ba 100644
--- a/linux-x64/clang/include/llvm/IR/IRBuilder.h
+++ b/linux-x64/clang/include/llvm/IR/IRBuilder.h
@@ -54,7 +54,7 @@
 class MDNode;
 class Use;
 
-/// \brief This provides the default implementation of the IRBuilder
+/// This provides the default implementation of the IRBuilder
 /// 'InsertHelper' method that is called whenever an instruction is created by
 /// IRBuilder and needs to be inserted.
 ///
@@ -85,7 +85,7 @@
   }
 };
 
-/// \brief Common base class shared among various IRBuilders.
+/// Common base class shared among various IRBuilders.
 class IRBuilderBase {
   DebugLoc CurDbgLocation;
 
@@ -111,7 +111,7 @@
   // Builder configuration methods
   //===--------------------------------------------------------------------===//
 
-  /// \brief Clear the insertion point: created instructions will not be
+  /// Clear the insertion point: created instructions will not be
   /// inserted into a block.
   void ClearInsertionPoint() {
     BB = nullptr;
@@ -122,14 +122,14 @@
   BasicBlock::iterator GetInsertPoint() const { return InsertPt; }
   LLVMContext &getContext() const { return Context; }
 
-  /// \brief This specifies that created instructions should be appended to the
+  /// This specifies that created instructions should be appended to the
   /// end of the specified block.
   void SetInsertPoint(BasicBlock *TheBB) {
     BB = TheBB;
     InsertPt = BB->end();
   }
 
-  /// \brief This specifies that created instructions should be inserted before
+  /// This specifies that created instructions should be inserted before
   /// the specified instruction.
   void SetInsertPoint(Instruction *I) {
     BB = I->getParent();
@@ -138,7 +138,7 @@
     SetCurrentDebugLocation(I->getDebugLoc());
   }
 
-  /// \brief This specifies that created instructions should be inserted at the
+  /// This specifies that created instructions should be inserted at the
   /// specified point.
   void SetInsertPoint(BasicBlock *TheBB, BasicBlock::iterator IP) {
     BB = TheBB;
@@ -147,20 +147,20 @@
       SetCurrentDebugLocation(IP->getDebugLoc());
   }
 
-  /// \brief Set location information used by debugging information.
+  /// Set location information used by debugging information.
   void SetCurrentDebugLocation(DebugLoc L) { CurDbgLocation = std::move(L); }
 
-  /// \brief Get location information used by debugging information.
+  /// Get location information used by debugging information.
   const DebugLoc &getCurrentDebugLocation() const { return CurDbgLocation; }
 
-  /// \brief If this builder has a current debug location, set it on the
+  /// If this builder has a current debug location, set it on the
   /// specified instruction.
   void SetInstDebugLocation(Instruction *I) const {
     if (CurDbgLocation)
       I->setDebugLoc(CurDbgLocation);
   }
 
-  /// \brief Get the return type of the current function that we're emitting
+  /// Get the return type of the current function that we're emitting
   /// into.
   Type *getCurrentFunctionReturnType() const;
 
@@ -170,33 +170,33 @@
     BasicBlock::iterator Point;
 
   public:
-    /// \brief Creates a new insertion point which doesn't point to anything.
+    /// Creates a new insertion point which doesn't point to anything.
     InsertPoint() = default;
 
-    /// \brief Creates a new insertion point at the given location.
+    /// Creates a new insertion point at the given location.
     InsertPoint(BasicBlock *InsertBlock, BasicBlock::iterator InsertPoint)
         : Block(InsertBlock), Point(InsertPoint) {}
 
-    /// \brief Returns true if this insert point is set.
+    /// Returns true if this insert point is set.
     bool isSet() const { return (Block != nullptr); }
 
     BasicBlock *getBlock() const { return Block; }
     BasicBlock::iterator getPoint() const { return Point; }
   };
 
-  /// \brief Returns the current insert point.
+  /// Returns the current insert point.
   InsertPoint saveIP() const {
     return InsertPoint(GetInsertBlock(), GetInsertPoint());
   }
 
-  /// \brief Returns the current insert point, clearing it in the process.
+  /// Returns the current insert point, clearing it in the process.
   InsertPoint saveAndClearIP() {
     InsertPoint IP(GetInsertBlock(), GetInsertPoint());
     ClearInsertionPoint();
     return IP;
   }
 
-  /// \brief Sets the current insert point to a previously-saved location.
+  /// Sets the current insert point to a previously-saved location.
   void restoreIP(InsertPoint IP) {
     if (IP.isSet())
       SetInsertPoint(IP.getBlock(), IP.getPoint());
@@ -204,26 +204,26 @@
       ClearInsertionPoint();
   }
 
-  /// \brief Get the floating point math metadata being used.
+  /// Get the floating point math metadata being used.
   MDNode *getDefaultFPMathTag() const { return DefaultFPMathTag; }
 
-  /// \brief Get the flags to be applied to created floating point ops
+  /// Get the flags to be applied to created floating point ops
   FastMathFlags getFastMathFlags() const { return FMF; }
 
-  /// \brief Clear the fast-math flags.
+  /// Clear the fast-math flags.
   void clearFastMathFlags() { FMF.clear(); }
 
-  /// \brief Set the floating point math metadata to be used.
+  /// Set the floating point math metadata to be used.
   void setDefaultFPMathTag(MDNode *FPMathTag) { DefaultFPMathTag = FPMathTag; }
 
-  /// \brief Set the fast-math flags to be used with generated fp-math operators
+  /// Set the fast-math flags to be used with generated fp-math operators
   void setFastMathFlags(FastMathFlags NewFMF) { FMF = NewFMF; }
 
   //===--------------------------------------------------------------------===//
   // RAII helpers.
   //===--------------------------------------------------------------------===//
 
-  // \brief RAII object that stores the current insertion point and restores it
+  // RAII object that stores the current insertion point and restores it
   // when the object is destroyed. This includes the debug location.
   class InsertPointGuard {
     IRBuilderBase &Builder;
@@ -245,7 +245,7 @@
     }
   };
 
-  // \brief RAII object that stores the current fast math settings and restores
+  // RAII object that stores the current fast math settings and restores
   // them when the object is destroyed.
   class FastMathFlagGuard {
     IRBuilderBase &Builder;
@@ -269,7 +269,7 @@
   // Miscellaneous creation methods.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Make a new global variable with initializer type i8*
+  /// Make a new global variable with initializer type i8*
   ///
   /// Make a new global variable with an initializer that has array of i8 type
   /// filled in with the null terminated string value specified.  The new global
@@ -278,48 +278,48 @@
   GlobalVariable *CreateGlobalString(StringRef Str, const Twine &Name = "",
                                      unsigned AddressSpace = 0);
 
-  /// \brief Get a constant value representing either true or false.
+  /// Get a constant value representing either true or false.
   ConstantInt *getInt1(bool V) {
     return ConstantInt::get(getInt1Ty(), V);
   }
 
-  /// \brief Get the constant value for i1 true.
+  /// Get the constant value for i1 true.
   ConstantInt *getTrue() {
     return ConstantInt::getTrue(Context);
   }
 
-  /// \brief Get the constant value for i1 false.
+  /// Get the constant value for i1 false.
   ConstantInt *getFalse() {
     return ConstantInt::getFalse(Context);
   }
 
-  /// \brief Get a constant 8-bit value.
+  /// Get a constant 8-bit value.
   ConstantInt *getInt8(uint8_t C) {
     return ConstantInt::get(getInt8Ty(), C);
   }
 
-  /// \brief Get a constant 16-bit value.
+  /// Get a constant 16-bit value.
   ConstantInt *getInt16(uint16_t C) {
     return ConstantInt::get(getInt16Ty(), C);
   }
 
-  /// \brief Get a constant 32-bit value.
+  /// Get a constant 32-bit value.
   ConstantInt *getInt32(uint32_t C) {
     return ConstantInt::get(getInt32Ty(), C);
   }
 
-  /// \brief Get a constant 64-bit value.
+  /// Get a constant 64-bit value.
   ConstantInt *getInt64(uint64_t C) {
     return ConstantInt::get(getInt64Ty(), C);
   }
 
-  /// \brief Get a constant N-bit value, zero extended or truncated from
+  /// Get a constant N-bit value, zero extended or truncated from
   /// a 64-bit value.
   ConstantInt *getIntN(unsigned N, uint64_t C) {
     return ConstantInt::get(getIntNTy(N), C);
   }
 
-  /// \brief Get a constant integer value.
+  /// Get a constant integer value.
   ConstantInt *getInt(const APInt &AI) {
     return ConstantInt::get(Context, AI);
   }
@@ -328,65 +328,65 @@
   // Type creation methods
   //===--------------------------------------------------------------------===//
 
-  /// \brief Fetch the type representing a single bit
+  /// Fetch the type representing a single bit
   IntegerType *getInt1Ty() {
     return Type::getInt1Ty(Context);
   }
 
-  /// \brief Fetch the type representing an 8-bit integer.
+  /// Fetch the type representing an 8-bit integer.
   IntegerType *getInt8Ty() {
     return Type::getInt8Ty(Context);
   }
 
-  /// \brief Fetch the type representing a 16-bit integer.
+  /// Fetch the type representing a 16-bit integer.
   IntegerType *getInt16Ty() {
     return Type::getInt16Ty(Context);
   }
 
-  /// \brief Fetch the type representing a 32-bit integer.
+  /// Fetch the type representing a 32-bit integer.
   IntegerType *getInt32Ty() {
     return Type::getInt32Ty(Context);
   }
 
-  /// \brief Fetch the type representing a 64-bit integer.
+  /// Fetch the type representing a 64-bit integer.
   IntegerType *getInt64Ty() {
     return Type::getInt64Ty(Context);
   }
 
-  /// \brief Fetch the type representing a 128-bit integer.
+  /// Fetch the type representing a 128-bit integer.
   IntegerType *getInt128Ty() { return Type::getInt128Ty(Context); }
 
-  /// \brief Fetch the type representing an N-bit integer.
+  /// Fetch the type representing an N-bit integer.
   IntegerType *getIntNTy(unsigned N) {
     return Type::getIntNTy(Context, N);
   }
 
-  /// \brief Fetch the type representing a 16-bit floating point value.
+  /// Fetch the type representing a 16-bit floating point value.
   Type *getHalfTy() {
     return Type::getHalfTy(Context);
   }
 
-  /// \brief Fetch the type representing a 32-bit floating point value.
+  /// Fetch the type representing a 32-bit floating point value.
   Type *getFloatTy() {
     return Type::getFloatTy(Context);
   }
 
-  /// \brief Fetch the type representing a 64-bit floating point value.
+  /// Fetch the type representing a 64-bit floating point value.
   Type *getDoubleTy() {
     return Type::getDoubleTy(Context);
   }
 
-  /// \brief Fetch the type representing void.
+  /// Fetch the type representing void.
   Type *getVoidTy() {
     return Type::getVoidTy(Context);
   }
 
-  /// \brief Fetch the type representing a pointer to an 8-bit integer value.
+  /// Fetch the type representing a pointer to an 8-bit integer value.
   PointerType *getInt8PtrTy(unsigned AddrSpace = 0) {
     return Type::getInt8PtrTy(Context, AddrSpace);
   }
 
-  /// \brief Fetch the type representing a pointer to an integer value.
+  /// Fetch the type representing a pointer to an integer value.
   IntegerType *getIntPtrTy(const DataLayout &DL, unsigned AddrSpace = 0) {
     return DL.getIntPtrType(Context, AddrSpace);
   }
@@ -395,7 +395,7 @@
   // Intrinsic creation methods
   //===--------------------------------------------------------------------===//
 
-  /// \brief Create and insert a memset to the specified pointer and the
+  /// Create and insert a memset to the specified pointer and the
   /// specified value.
   ///
   /// If the pointer isn't an i8*, it will be converted. If a TBAA tag is
@@ -414,7 +414,31 @@
                          MDNode *ScopeTag = nullptr,
                          MDNode *NoAliasTag = nullptr);
 
-  /// \brief Create and insert a memcpy between the specified pointers.
+  /// Create and insert an element unordered-atomic memset of the region of
+  /// memory starting at the given pointer to the given value.
+  ///
+  /// If the pointer isn't an i8*, it will be converted. If a TBAA tag is
+  /// specified, it will be added to the instruction. Likewise with alias.scope
+  /// and noalias tags.
+  CallInst *CreateElementUnorderedAtomicMemSet(Value *Ptr, Value *Val,
+                                               uint64_t Size, unsigned Align,
+                                               uint32_t ElementSize,
+                                               MDNode *TBAATag = nullptr,
+                                               MDNode *ScopeTag = nullptr,
+                                               MDNode *NoAliasTag = nullptr) {
+    return CreateElementUnorderedAtomicMemSet(Ptr, Val, getInt64(Size), Align,
+                                              ElementSize, TBAATag, ScopeTag,
+                                              NoAliasTag);
+  }
+
+  CallInst *CreateElementUnorderedAtomicMemSet(Value *Ptr, Value *Val,
+                                               Value *Size, unsigned Align,
+                                               uint32_t ElementSize,
+                                               MDNode *TBAATag = nullptr,
+                                               MDNode *ScopeTag = nullptr,
+                                               MDNode *NoAliasTag = nullptr);
+
+  /// Create and insert a memcpy between the specified pointers.
   ///
   /// If the pointers aren't i8*, they will be converted.  If a TBAA tag is
   /// specified, it will be added to the instruction. Likewise with alias.scope
@@ -437,7 +461,7 @@
                          MDNode *ScopeTag = nullptr,
                          MDNode *NoAliasTag = nullptr);
 
-  /// \brief Create and insert an element unordered-atomic memcpy between the
+  /// Create and insert an element unordered-atomic memcpy between the
   /// specified pointers.
   ///
   /// DstAlign/SrcAlign are the alignments of the Dst/Src pointers, respectively.
@@ -461,7 +485,7 @@
       MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr,
       MDNode *NoAliasTag = nullptr);
 
-  /// \brief Create and insert a memmove between the specified
+  /// Create and insert a memmove between the specified
   /// pointers.
   ///
   /// If the pointers aren't i8*, they will be converted.  If a TBAA tag is
@@ -480,51 +504,76 @@
                           MDNode *ScopeTag = nullptr,
                           MDNode *NoAliasTag = nullptr);
 
-  /// \brief Create a vector fadd reduction intrinsic of the source vector.
+  /// \brief Create and insert an element unordered-atomic memmove between the
+  /// specified pointers.
+  ///
+  /// DstAlign/SrcAlign are the alignments of the Dst/Src pointers,
+  /// respectively.
+  ///
+  /// If the pointers aren't i8*, they will be converted.  If a TBAA tag is
+  /// specified, it will be added to the instruction. Likewise with alias.scope
+  /// and noalias tags.
+  CallInst *CreateElementUnorderedAtomicMemMove(
+      Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign,
+      uint64_t Size, uint32_t ElementSize, MDNode *TBAATag = nullptr,
+      MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr,
+      MDNode *NoAliasTag = nullptr) {
+    return CreateElementUnorderedAtomicMemMove(
+        Dst, DstAlign, Src, SrcAlign, getInt64(Size), ElementSize, TBAATag,
+        TBAAStructTag, ScopeTag, NoAliasTag);
+  }
+
+  CallInst *CreateElementUnorderedAtomicMemMove(
+      Value *Dst, unsigned DstAlign, Value *Src, unsigned SrcAlign, Value *Size,
+      uint32_t ElementSize, MDNode *TBAATag = nullptr,
+      MDNode *TBAAStructTag = nullptr, MDNode *ScopeTag = nullptr,
+      MDNode *NoAliasTag = nullptr);
+
+  /// Create a vector fadd reduction intrinsic of the source vector.
   /// The first parameter is a scalar accumulator value for ordered reductions.
   CallInst *CreateFAddReduce(Value *Acc, Value *Src);
 
-  /// \brief Create a vector fmul reduction intrinsic of the source vector.
+  /// Create a vector fmul reduction intrinsic of the source vector.
   /// The first parameter is a scalar accumulator value for ordered reductions.
   CallInst *CreateFMulReduce(Value *Acc, Value *Src);
 
-  /// \brief Create a vector int add reduction intrinsic of the source vector.
+  /// Create a vector int add reduction intrinsic of the source vector.
   CallInst *CreateAddReduce(Value *Src);
 
-  /// \brief Create a vector int mul reduction intrinsic of the source vector.
+  /// Create a vector int mul reduction intrinsic of the source vector.
   CallInst *CreateMulReduce(Value *Src);
 
-  /// \brief Create a vector int AND reduction intrinsic of the source vector.
+  /// Create a vector int AND reduction intrinsic of the source vector.
   CallInst *CreateAndReduce(Value *Src);
 
-  /// \brief Create a vector int OR reduction intrinsic of the source vector.
+  /// Create a vector int OR reduction intrinsic of the source vector.
   CallInst *CreateOrReduce(Value *Src);
 
-  /// \brief Create a vector int XOR reduction intrinsic of the source vector.
+  /// Create a vector int XOR reduction intrinsic of the source vector.
   CallInst *CreateXorReduce(Value *Src);
 
-  /// \brief Create a vector integer max reduction intrinsic of the source
+  /// Create a vector integer max reduction intrinsic of the source
   /// vector.
   CallInst *CreateIntMaxReduce(Value *Src, bool IsSigned = false);
 
-  /// \brief Create a vector integer min reduction intrinsic of the source
+  /// Create a vector integer min reduction intrinsic of the source
   /// vector.
   CallInst *CreateIntMinReduce(Value *Src, bool IsSigned = false);
 
-  /// \brief Create a vector float max reduction intrinsic of the source
+  /// Create a vector float max reduction intrinsic of the source
   /// vector.
   CallInst *CreateFPMaxReduce(Value *Src, bool NoNaN = false);
 
-  /// \brief Create a vector float min reduction intrinsic of the source
+  /// Create a vector float min reduction intrinsic of the source
   /// vector.
   CallInst *CreateFPMinReduce(Value *Src, bool NoNaN = false);
 
-  /// \brief Create a lifetime.start intrinsic.
+  /// Create a lifetime.start intrinsic.
   ///
   /// If the pointer isn't i8* it will be converted.
   CallInst *CreateLifetimeStart(Value *Ptr, ConstantInt *Size = nullptr);
 
-  /// \brief Create a lifetime.end intrinsic.
+  /// Create a lifetime.end intrinsic.
   ///
   /// If the pointer isn't i8* it will be converted.
   CallInst *CreateLifetimeEnd(Value *Ptr, ConstantInt *Size = nullptr);
@@ -534,29 +583,29 @@
   /// If the pointer isn't i8* it will be converted.
   CallInst *CreateInvariantStart(Value *Ptr, ConstantInt *Size = nullptr);
 
-  /// \brief Create a call to Masked Load intrinsic
+  /// Create a call to Masked Load intrinsic
   CallInst *CreateMaskedLoad(Value *Ptr, unsigned Align, Value *Mask,
                              Value *PassThru = nullptr, const Twine &Name = "");
 
-  /// \brief Create a call to Masked Store intrinsic
+  /// Create a call to Masked Store intrinsic
   CallInst *CreateMaskedStore(Value *Val, Value *Ptr, unsigned Align,
                               Value *Mask);
 
-  /// \brief Create a call to Masked Gather intrinsic
+  /// Create a call to Masked Gather intrinsic
   CallInst *CreateMaskedGather(Value *Ptrs, unsigned Align,
                                Value *Mask = nullptr,
                                Value *PassThru = nullptr,
                                const Twine& Name = "");
 
-  /// \brief Create a call to Masked Scatter intrinsic
+  /// Create a call to Masked Scatter intrinsic
   CallInst *CreateMaskedScatter(Value *Val, Value *Ptrs, unsigned Align,
                                 Value *Mask = nullptr);
 
-  /// \brief Create an assume intrinsic call that allows the optimizer to
+  /// Create an assume intrinsic call that allows the optimizer to
   /// assume that the provided condition will be true.
   CallInst *CreateAssumption(Value *Cond);
 
-  /// \brief Create a call to the experimental.gc.statepoint intrinsic to
+  /// Create a call to the experimental.gc.statepoint intrinsic to
   /// start a new statepoint sequence.
   CallInst *CreateGCStatepointCall(uint64_t ID, uint32_t NumPatchBytes,
                                    Value *ActualCallee,
@@ -565,7 +614,7 @@
                                    ArrayRef<Value *> GCArgs,
                                    const Twine &Name = "");
 
-  /// \brief Create a call to the experimental.gc.statepoint intrinsic to
+  /// Create a call to the experimental.gc.statepoint intrinsic to
   /// start a new statepoint sequence.
   CallInst *CreateGCStatepointCall(uint64_t ID, uint32_t NumPatchBytes,
                                    Value *ActualCallee, uint32_t Flags,
@@ -575,7 +624,7 @@
                                    ArrayRef<Value *> GCArgs,
                                    const Twine &Name = "");
 
-  /// \brief Conveninence function for the common case when CallArgs are filled
+  /// Conveninence function for the common case when CallArgs are filled
   /// in using makeArrayRef(CS.arg_begin(), CS.arg_end()); Use needs to be
   /// .get()'ed to get the Value pointer.
   CallInst *CreateGCStatepointCall(uint64_t ID, uint32_t NumPatchBytes,
@@ -584,7 +633,7 @@
                                    ArrayRef<Value *> GCArgs,
                                    const Twine &Name = "");
 
-  /// \brief Create an invoke to the experimental.gc.statepoint intrinsic to
+  /// Create an invoke to the experimental.gc.statepoint intrinsic to
   /// start a new statepoint sequence.
   InvokeInst *
   CreateGCStatepointInvoke(uint64_t ID, uint32_t NumPatchBytes,
@@ -593,7 +642,7 @@
                            ArrayRef<Value *> DeoptArgs,
                            ArrayRef<Value *> GCArgs, const Twine &Name = "");
 
-  /// \brief Create an invoke to the experimental.gc.statepoint intrinsic to
+  /// Create an invoke to the experimental.gc.statepoint intrinsic to
   /// start a new statepoint sequence.
   InvokeInst *CreateGCStatepointInvoke(
       uint64_t ID, uint32_t NumPatchBytes, Value *ActualInvokee,
@@ -612,13 +661,13 @@
                            ArrayRef<Value *> DeoptArgs,
                            ArrayRef<Value *> GCArgs, const Twine &Name = "");
 
-  /// \brief Create a call to the experimental.gc.result intrinsic to extract
+  /// Create a call to the experimental.gc.result intrinsic to extract
   /// the result from a call wrapped in a statepoint.
   CallInst *CreateGCResult(Instruction *Statepoint,
                            Type *ResultType,
                            const Twine &Name = "");
 
-  /// \brief Create a call to the experimental.gc.relocate intrinsics to
+  /// Create a call to the experimental.gc.relocate intrinsics to
   /// project the relocated value of one pointer from the statepoint.
   CallInst *CreateGCRelocate(Instruction *Statepoint,
                              int BaseOffset,
@@ -632,6 +681,11 @@
                                   Value *LHS, Value *RHS,
                                   const Twine &Name = "");
 
+  /// Create a call to intrinsic \p ID with no operands.
+  CallInst *CreateIntrinsic(Intrinsic::ID ID,
+                            Instruction *FMFSource = nullptr,
+                            const Twine &Name = "");
+
   /// Create a call to intrinsic \p ID with 1 or more operands assuming the
   /// intrinsic and all operands have the same type. If \p FMFSource is
   /// provided, copy fast-math-flags from that instruction to the intrinsic.
@@ -650,7 +704,7 @@
   }
 
 private:
-  /// \brief Create a call to a masked intrinsic with given Id.
+  /// Create a call to a masked intrinsic with given Id.
   CallInst *CreateMaskedIntrinsic(Intrinsic::ID Id, ArrayRef<Value *> Ops,
                                   ArrayRef<Type *> OverloadedTypes,
                                   const Twine &Name = "");
@@ -658,7 +712,7 @@
   Value *getCastedInt8PtrValue(Value *Ptr);
 };
 
-/// \brief This provides a uniform API for creating instructions and inserting
+/// This provides a uniform API for creating instructions and inserting
 /// them into a basic block: either at the end of a BasicBlock, or at a specific
 /// iterator location in a block.
 ///
@@ -720,10 +774,10 @@
     SetInsertPoint(TheBB, IP);
   }
 
-  /// \brief Get the constant folder being used.
+  /// Get the constant folder being used.
   const T &getFolder() { return Folder; }
 
-  /// \brief Insert and return the specified instruction.
+  /// Insert and return the specified instruction.
   template<typename InstTy>
   InstTy *Insert(InstTy *I, const Twine &Name = "") const {
     this->InsertHelper(I, Name, BB, InsertPt);
@@ -731,7 +785,7 @@
     return I;
   }
 
-  /// \brief No-op overload to handle constants.
+  /// No-op overload to handle constants.
   Constant *Insert(Constant *C, const Twine& = "") const {
     return C;
   }
@@ -741,7 +795,7 @@
   //===--------------------------------------------------------------------===//
 
 private:
-  /// \brief Helper to add branch weight and unpredictable metadata onto an
+  /// Helper to add branch weight and unpredictable metadata onto an
   /// instruction.
   /// \returns The annotated instruction.
   template <typename InstTy>
@@ -754,17 +808,17 @@
   }
 
 public:
-  /// \brief Create a 'ret void' instruction.
+  /// Create a 'ret void' instruction.
   ReturnInst *CreateRetVoid() {
     return Insert(ReturnInst::Create(Context));
   }
 
-  /// \brief Create a 'ret <val>' instruction.
+  /// Create a 'ret <val>' instruction.
   ReturnInst *CreateRet(Value *V) {
     return Insert(ReturnInst::Create(Context, V));
   }
 
-  /// \brief Create a sequence of N insertvalue instructions,
+  /// Create a sequence of N insertvalue instructions,
   /// with one Value from the retVals array each, that build a aggregate
   /// return value one value at a time, and a ret instruction to return
   /// the resulting aggregate value.
@@ -778,12 +832,12 @@
     return Insert(ReturnInst::Create(Context, V));
   }
 
-  /// \brief Create an unconditional 'br label X' instruction.
+  /// Create an unconditional 'br label X' instruction.
   BranchInst *CreateBr(BasicBlock *Dest) {
     return Insert(BranchInst::Create(Dest));
   }
 
-  /// \brief Create a conditional 'br Cond, TrueDest, FalseDest'
+  /// Create a conditional 'br Cond, TrueDest, FalseDest'
   /// instruction.
   BranchInst *CreateCondBr(Value *Cond, BasicBlock *True, BasicBlock *False,
                            MDNode *BranchWeights = nullptr,
@@ -792,7 +846,7 @@
                                     BranchWeights, Unpredictable));
   }
 
-  /// \brief Create a conditional 'br Cond, TrueDest, FalseDest'
+  /// Create a conditional 'br Cond, TrueDest, FalseDest'
   /// instruction. Copy branch meta data if available.
   BranchInst *CreateCondBr(Value *Cond, BasicBlock *True, BasicBlock *False,
                            Instruction *MDSrc) {
@@ -805,7 +859,7 @@
     return Insert(Br);
   }
 
-  /// \brief Create a switch instruction with the specified value, default dest,
+  /// Create a switch instruction with the specified value, default dest,
   /// and with a hint for the number of cases that will be added (for efficient
   /// allocation).
   SwitchInst *CreateSwitch(Value *V, BasicBlock *Dest, unsigned NumCases = 10,
@@ -815,14 +869,14 @@
                                     BranchWeights, Unpredictable));
   }
 
-  /// \brief Create an indirect branch instruction with the specified address
+  /// Create an indirect branch instruction with the specified address
   /// operand, with an optional hint for the number of destinations that will be
   /// added (for efficient allocation).
   IndirectBrInst *CreateIndirectBr(Value *Addr, unsigned NumDests = 10) {
     return Insert(IndirectBrInst::Create(Addr, NumDests));
   }
 
-  /// \brief Create an invoke instruction.
+  /// Create an invoke instruction.
   InvokeInst *CreateInvoke(Value *Callee, BasicBlock *NormalDest,
                            BasicBlock *UnwindDest,
                            ArrayRef<Value *> Args = None,
@@ -1246,7 +1300,7 @@
     return Insert(new AllocaInst(Ty, DL.getAllocaAddrSpace(), ArraySize), Name);
   }
 
-  /// \brief Provided to resolve 'CreateLoad(Ptr, "...")' correctly, instead of
+  /// Provided to resolve 'CreateLoad(Ptr, "...")' correctly, instead of
   /// converting the string to 'bool' for the isVolatile parameter.
   LoadInst *CreateLoad(Value *Ptr, const char *Name) {
     return Insert(new LoadInst(Ptr), Name);
@@ -1268,7 +1322,7 @@
     return Insert(new StoreInst(Val, Ptr, isVolatile));
   }
 
-  /// \brief Provided to resolve 'CreateAlignedLoad(Ptr, Align, "...")'
+  /// Provided to resolve 'CreateAlignedLoad(Ptr, Align, "...")'
   /// correctly, instead of converting the string to 'bool' for the isVolatile
   /// parameter.
   LoadInst *CreateAlignedLoad(Value *Ptr, unsigned Align, const char *Name) {
@@ -1476,14 +1530,19 @@
     return CreateConstInBoundsGEP2_32(Ty, Ptr, 0, Idx, Name);
   }
 
-  /// \brief Same as CreateGlobalString, but return a pointer with "i8*" type
+  Value *CreateStructGEP(Value *Ptr, unsigned Idx, const Twine &Name = "") {
+    return CreateConstInBoundsGEP2_32(nullptr, Ptr, 0, Idx, Name);
+  }
+
+  /// Same as CreateGlobalString, but return a pointer with "i8*" type
   /// instead of a pointer to array of i8.
-  Value *CreateGlobalStringPtr(StringRef Str, const Twine &Name = "",
-                               unsigned AddressSpace = 0) {
-    GlobalVariable *gv = CreateGlobalString(Str, Name, AddressSpace);
-    Value *zero = ConstantInt::get(Type::getInt32Ty(Context), 0);
-    Value *Args[] = { zero, zero };
-    return CreateInBoundsGEP(gv->getValueType(), gv, Args, Name);
+  Constant *CreateGlobalStringPtr(StringRef Str, const Twine &Name = "",
+                                  unsigned AddressSpace = 0) {
+    GlobalVariable *GV = CreateGlobalString(Str, Name, AddressSpace);
+    Constant *Zero = ConstantInt::get(Type::getInt32Ty(Context), 0);
+    Constant *Indices[] = {Zero, Zero};
+    return ConstantExpr::getInBoundsGetElementPtr(GV->getValueType(), GV,
+                                                  Indices);
   }
 
   //===--------------------------------------------------------------------===//
@@ -1502,7 +1561,7 @@
     return CreateCast(Instruction::SExt, V, DestTy, Name);
   }
 
-  /// \brief Create a ZExt or Trunc from the integer value V to DestTy. Return
+  /// Create a ZExt or Trunc from the integer value V to DestTy. Return
   /// the value untouched if the type of V is already DestTy.
   Value *CreateZExtOrTrunc(Value *V, Type *DestTy,
                            const Twine &Name = "") {
@@ -1517,7 +1576,7 @@
     return V;
   }
 
-  /// \brief Create a SExt or Trunc from the integer value V to DestTy. Return
+  /// Create a SExt or Trunc from the integer value V to DestTy. Return
   /// the value untouched if the type of V is already DestTy.
   Value *CreateSExtOrTrunc(Value *V, Type *DestTy,
                            const Twine &Name = "") {
@@ -1665,7 +1724,7 @@
     return Insert(CastInst::CreateFPCast(V, DestTy), Name);
   }
 
-  // \brief Provided to resolve 'CreateIntCast(Ptr, Ptr, "...")', giving a
+  // Provided to resolve 'CreateIntCast(Ptr, Ptr, "...")', giving a
   // compile time error, instead of converting the string to bool for the
   // isSigned parameter.
   Value *CreateIntCast(Value *, Type *, const char *) = delete;
@@ -1927,19 +1986,19 @@
   // Utility creation methods
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return an i1 value testing if \p Arg is null.
+  /// Return an i1 value testing if \p Arg is null.
   Value *CreateIsNull(Value *Arg, const Twine &Name = "") {
     return CreateICmpEQ(Arg, Constant::getNullValue(Arg->getType()),
                         Name);
   }
 
-  /// \brief Return an i1 value testing if \p Arg is not null.
+  /// Return an i1 value testing if \p Arg is not null.
   Value *CreateIsNotNull(Value *Arg, const Twine &Name = "") {
     return CreateICmpNE(Arg, Constant::getNullValue(Arg->getType()),
                         Name);
   }
 
-  /// \brief Return the i64 difference between two pointer values, dividing out
+  /// Return the i64 difference between two pointer values, dividing out
   /// the size of the pointed-to objects.
   ///
   /// This is intended to implement C-style pointer subtraction. As such, the
@@ -1957,35 +2016,62 @@
                            Name);
   }
 
-  /// \brief Create an invariant.group.barrier intrinsic call, that stops
-  /// optimizer to propagate equality using invariant.group metadata.
-  /// If Ptr type is different from pointer to i8, it's casted to pointer to i8
-  /// in the same address space before call and casted back to Ptr type after
-  /// call.
-  Value *CreateInvariantGroupBarrier(Value *Ptr) {
+  /// Create a launder.invariant.group intrinsic call. If Ptr type is
+  /// different from pointer to i8, it's casted to pointer to i8 in the same
+  /// address space before call and casted back to Ptr type after call.
+  Value *CreateLaunderInvariantGroup(Value *Ptr) {
     assert(isa<PointerType>(Ptr->getType()) &&
-           "invariant.group.barrier only applies to pointers.");
+           "launder.invariant.group only applies to pointers.");
+    // FIXME: we could potentially avoid casts to/from i8*.
     auto *PtrType = Ptr->getType();
     auto *Int8PtrTy = getInt8PtrTy(PtrType->getPointerAddressSpace());
     if (PtrType != Int8PtrTy)
       Ptr = CreateBitCast(Ptr, Int8PtrTy);
     Module *M = BB->getParent()->getParent();
-    Function *FnInvariantGroupBarrier = Intrinsic::getDeclaration(
-        M, Intrinsic::invariant_group_barrier, {Int8PtrTy});
+    Function *FnLaunderInvariantGroup = Intrinsic::getDeclaration(
+        M, Intrinsic::launder_invariant_group, {Int8PtrTy});
 
-    assert(FnInvariantGroupBarrier->getReturnType() == Int8PtrTy &&
-           FnInvariantGroupBarrier->getFunctionType()->getParamType(0) ==
+    assert(FnLaunderInvariantGroup->getReturnType() == Int8PtrTy &&
+           FnLaunderInvariantGroup->getFunctionType()->getParamType(0) ==
                Int8PtrTy &&
-           "InvariantGroupBarrier should take and return the same type");
+           "LaunderInvariantGroup should take and return the same type");
 
-    CallInst *Fn = CreateCall(FnInvariantGroupBarrier, {Ptr});
+    CallInst *Fn = CreateCall(FnLaunderInvariantGroup, {Ptr});
 
     if (PtrType != Int8PtrTy)
       return CreateBitCast(Fn, PtrType);
     return Fn;
   }
 
-  /// \brief Return a vector value that contains \arg V broadcasted to \p
+  /// \brief Create a strip.invariant.group intrinsic call. If Ptr type is
+  /// different from pointer to i8, it's casted to pointer to i8 in the same
+  /// address space before call and casted back to Ptr type after call.
+  Value *CreateStripInvariantGroup(Value *Ptr) {
+    assert(isa<PointerType>(Ptr->getType()) &&
+           "strip.invariant.group only applies to pointers.");
+
+    // FIXME: we could potentially avoid casts to/from i8*.
+    auto *PtrType = Ptr->getType();
+    auto *Int8PtrTy = getInt8PtrTy(PtrType->getPointerAddressSpace());
+    if (PtrType != Int8PtrTy)
+      Ptr = CreateBitCast(Ptr, Int8PtrTy);
+    Module *M = BB->getParent()->getParent();
+    Function *FnStripInvariantGroup = Intrinsic::getDeclaration(
+        M, Intrinsic::strip_invariant_group, {Int8PtrTy});
+
+    assert(FnStripInvariantGroup->getReturnType() == Int8PtrTy &&
+           FnStripInvariantGroup->getFunctionType()->getParamType(0) ==
+               Int8PtrTy &&
+           "StripInvariantGroup should take and return the same type");
+
+    CallInst *Fn = CreateCall(FnStripInvariantGroup, {Ptr});
+
+    if (PtrType != Int8PtrTy)
+      return CreateBitCast(Fn, PtrType);
+    return Fn;
+  }
+
+  /// Return a vector value that contains \arg V broadcasted to \p
   /// NumElts elements.
   Value *CreateVectorSplat(unsigned NumElts, Value *V, const Twine &Name = "") {
     assert(NumElts > 0 && "Cannot splat to an empty vector!");
@@ -2001,7 +2087,7 @@
     return CreateShuffleVector(V, Undef, Zeros, Name + ".splat");
   }
 
-  /// \brief Return a value that has been extracted from a larger integer type.
+  /// Return a value that has been extracted from a larger integer type.
   Value *CreateExtractInteger(const DataLayout &DL, Value *From,
                               IntegerType *ExtractedTy, uint64_t Offset,
                               const Twine &Name) {
@@ -2026,7 +2112,7 @@
   }
 
 private:
-  /// \brief Helper function that creates an assume intrinsic call that
+  /// Helper function that creates an assume intrinsic call that
   /// represents an alignment assumption on the provided Ptr, Mask, Type
   /// and Offset.
   CallInst *CreateAlignmentAssumptionHelper(const DataLayout &DL,
@@ -2055,7 +2141,7 @@
   }
 
 public:
-  /// \brief Create an assume intrinsic call that represents an alignment
+  /// Create an assume intrinsic call that represents an alignment
   /// assumption on the provided pointer.
   ///
   /// An optional offset can be provided, and if it is provided, the offset
@@ -2074,7 +2160,7 @@
                                            OffsetValue);
   }
 
-  /// \brief Create an assume intrinsic call that represents an alignment
+  /// Create an assume intrinsic call that represents an alignment
   /// assumption on the provided pointer.
   ///
   /// An optional offset can be provided, and if it is provided, the offset
diff --git a/linux-x64/clang/include/llvm/IR/IRPrintingPasses.h b/linux-x64/clang/include/llvm/IR/IRPrintingPasses.h
index 0825e06..e4ac5d4 100644
--- a/linux-x64/clang/include/llvm/IR/IRPrintingPasses.h
+++ b/linux-x64/clang/include/llvm/IR/IRPrintingPasses.h
@@ -23,6 +23,7 @@
 #include <string>
 
 namespace llvm {
+class Pass;
 class BasicBlockPass;
 class Function;
 class FunctionPass;
@@ -32,18 +33,18 @@
 class raw_ostream;
 template <typename IRUnitT, typename... ExtraArgTs> class AnalysisManager;
 
-/// \brief Create and return a pass that writes the module to the specified
+/// Create and return a pass that writes the module to the specified
 /// \c raw_ostream.
 ModulePass *createPrintModulePass(raw_ostream &OS,
                                   const std::string &Banner = "",
                                   bool ShouldPreserveUseListOrder = false);
 
-/// \brief Create and return a pass that prints functions to the specified
+/// Create and return a pass that prints functions to the specified
 /// \c raw_ostream as they are processed.
 FunctionPass *createPrintFunctionPass(raw_ostream &OS,
                                       const std::string &Banner = "");
 
-/// \brief Create and return a pass that writes the BB to the specified
+/// Create and return a pass that writes the BB to the specified
 /// \c raw_ostream.
 BasicBlockPass *createPrintBasicBlockPass(raw_ostream &OS,
                                           const std::string &Banner = "");
@@ -54,7 +55,10 @@
 /// non-printable characters in it.
 void printLLVMNameWithoutPrefix(raw_ostream &OS, StringRef Name);
 
-/// \brief Pass for printing a Module as LLVM's text IR assembly.
+/// Return true if a pass is for IR printing.
+bool isIRPrintingPass(Pass *P);
+
+/// Pass for printing a Module as LLVM's text IR assembly.
 ///
 /// Note: This pass is for use with the new pass manager. Use the create...Pass
 /// functions above to create passes for use with the legacy pass manager.
@@ -73,7 +77,7 @@
   static StringRef name() { return "PrintModulePass"; }
 };
 
-/// \brief Pass for printing a Function as LLVM's text IR assembly.
+/// Pass for printing a Function as LLVM's text IR assembly.
 ///
 /// Note: This pass is for use with the new pass manager. Use the create...Pass
 /// functions above to create passes for use with the legacy pass manager.
diff --git a/linux-x64/clang/include/llvm/IR/InstVisitor.h b/linux-x64/clang/include/llvm/IR/InstVisitor.h
index 5557981..55536f2 100644
--- a/linux-x64/clang/include/llvm/IR/InstVisitor.h
+++ b/linux-x64/clang/include/llvm/IR/InstVisitor.h
@@ -32,7 +32,7 @@
                visit##CLASS_TO_VISIT(static_cast<CLASS_TO_VISIT&>(I))
 
 
-/// @brief Base class for instruction visitors
+/// Base class for instruction visitors
 ///
 /// Instruction visitors are used when you want to perform different actions
 /// for different kinds of instructions without having to use lots of casts
@@ -211,9 +211,12 @@
   RetTy visitCatchPadInst(CatchPadInst &I)     { DELEGATE(FuncletPadInst); }
 
   // Handle the special instrinsic instruction classes.
-  RetTy visitDbgDeclareInst(DbgDeclareInst &I)    { DELEGATE(DbgInfoIntrinsic);}
-  RetTy visitDbgValueInst(DbgValueInst &I)        { DELEGATE(DbgInfoIntrinsic);}
-  RetTy visitDbgInfoIntrinsic(DbgInfoIntrinsic &I) { DELEGATE(IntrinsicInst); }
+  RetTy visitDbgDeclareInst(DbgDeclareInst &I)    { DELEGATE(DbgVariableIntrinsic);}
+  RetTy visitDbgValueInst(DbgValueInst &I)        { DELEGATE(DbgVariableIntrinsic);}
+  RetTy visitDbgVariableIntrinsic(DbgVariableIntrinsic &I)
+                                                  { DELEGATE(DbgInfoIntrinsic);}
+  RetTy visitDbgLabelInst(DbgLabelInst &I)        { DELEGATE(DbgInfoIntrinsic);}
+  RetTy visitDbgInfoIntrinsic(DbgInfoIntrinsic &I){ DELEGATE(IntrinsicInst); }
   RetTy visitMemSetInst(MemSetInst &I)            { DELEGATE(MemIntrinsic); }
   RetTy visitMemCpyInst(MemCpyInst &I)            { DELEGATE(MemTransferInst); }
   RetTy visitMemMoveInst(MemMoveInst &I)          { DELEGATE(MemTransferInst); }
@@ -272,6 +275,7 @@
       default:                     DELEGATE(IntrinsicInst);
       case Intrinsic::dbg_declare: DELEGATE(DbgDeclareInst);
       case Intrinsic::dbg_value:   DELEGATE(DbgValueInst);
+      case Intrinsic::dbg_label:   DELEGATE(DbgLabelInst);
       case Intrinsic::memcpy:      DELEGATE(MemCpyInst);
       case Intrinsic::memmove:     DELEGATE(MemMoveInst);
       case Intrinsic::memset:      DELEGATE(MemSetInst);
diff --git a/linux-x64/clang/include/llvm/IR/InstrTypes.h b/linux-x64/clang/include/llvm/IR/InstrTypes.h
index 0243c4c..ad00120 100644
--- a/linux-x64/clang/include/llvm/IR/InstrTypes.h
+++ b/linux-x64/clang/include/llvm/IR/InstrTypes.h
@@ -81,7 +81,7 @@
     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   }
 
-  // \brief Returns true if this terminator relates to exception handling.
+  // Returns true if this terminator relates to exception handling.
   bool isExceptional() const {
     switch (getOpcode()) {
     case Instruction::CatchSwitch:
@@ -118,7 +118,7 @@
       return idx < TermInst->getNumSuccessors();
     }
 
-    /// \brief Proxy object to allow write access in operator[]
+    /// Proxy object to allow write access in operator[]
     class SuccessorProxy {
       Self it;
 
@@ -588,16 +588,16 @@
 /// can be performed with code like:
 ///
 /// if (isa<CastInst>(Instr)) { ... }
-/// @brief Base class of casting instructions.
+/// Base class of casting instructions.
 class CastInst : public UnaryInstruction {
 protected:
-  /// @brief Constructor with insert-before-instruction semantics for subclasses
+  /// Constructor with insert-before-instruction semantics for subclasses
   CastInst(Type *Ty, unsigned iType, Value *S,
            const Twine &NameStr = "", Instruction *InsertBefore = nullptr)
     : UnaryInstruction(Ty, iType, S, InsertBefore) {
     setName(NameStr);
   }
-  /// @brief Constructor with insert-at-end-of-block semantics for subclasses
+  /// Constructor with insert-at-end-of-block semantics for subclasses
   CastInst(Type *Ty, unsigned iType, Value *S,
            const Twine &NameStr, BasicBlock *InsertAtEnd)
     : UnaryInstruction(Ty, iType, S, InsertAtEnd) {
@@ -610,7 +610,7 @@
   /// CastOps category (Instruction::isCast(opcode) returns true). This
   /// constructor has insert-before-instruction semantics to automatically
   /// insert the new CastInst before InsertBefore (if it is non-null).
-  /// @brief Construct any of the CastInst subclasses
+  /// Construct any of the CastInst subclasses
   static CastInst *Create(
     Instruction::CastOps,    ///< The opcode of the cast instruction
     Value *S,                ///< The value to be casted (operand 0)
@@ -623,7 +623,7 @@
   /// CastOps category. This constructor has insert-at-end-of-block semantics
   /// to automatically insert the new CastInst at the end of InsertAtEnd (if
   /// its non-null).
-  /// @brief Construct any of the CastInst subclasses
+  /// Construct any of the CastInst subclasses
   static CastInst *Create(
     Instruction::CastOps,    ///< The opcode for the cast instruction
     Value *S,                ///< The value to be casted (operand 0)
@@ -632,7 +632,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a ZExt or BitCast cast instruction
+  /// Create a ZExt or BitCast cast instruction
   static CastInst *CreateZExtOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -640,7 +640,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a ZExt or BitCast cast instruction
+  /// Create a ZExt or BitCast cast instruction
   static CastInst *CreateZExtOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which operand is casted
@@ -648,7 +648,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a SExt or BitCast cast instruction
+  /// Create a SExt or BitCast cast instruction
   static CastInst *CreateSExtOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -656,7 +656,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a SExt or BitCast cast instruction
+  /// Create a SExt or BitCast cast instruction
   static CastInst *CreateSExtOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which operand is casted
@@ -664,7 +664,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a BitCast AddrSpaceCast, or a PtrToInt cast instruction.
+  /// Create a BitCast AddrSpaceCast, or a PtrToInt cast instruction.
   static CastInst *CreatePointerCast(
     Value *S,                ///< The pointer value to be casted (operand 0)
     Type *Ty,          ///< The type to which operand is casted
@@ -672,7 +672,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a BitCast, AddrSpaceCast or a PtrToInt cast instruction.
+  /// Create a BitCast, AddrSpaceCast or a PtrToInt cast instruction.
   static CastInst *CreatePointerCast(
     Value *S,                ///< The pointer value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -680,7 +680,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a BitCast or an AddrSpaceCast cast instruction.
+  /// Create a BitCast or an AddrSpaceCast cast instruction.
   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
     Value *S,                ///< The pointer value to be casted (operand 0)
     Type *Ty,          ///< The type to which operand is casted
@@ -688,7 +688,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a BitCast or an AddrSpaceCast cast instruction.
+  /// Create a BitCast or an AddrSpaceCast cast instruction.
   static CastInst *CreatePointerBitCastOrAddrSpaceCast(
     Value *S,                ///< The pointer value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -696,7 +696,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a BitCast, a PtrToInt, or an IntToPTr cast instruction.
+  /// Create a BitCast, a PtrToInt, or an IntToPTr cast instruction.
   ///
   /// If the value is a pointer type and the destination an integer type,
   /// creates a PtrToInt cast. If the value is an integer type and the
@@ -709,7 +709,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a ZExt, BitCast, or Trunc for int -> int casts.
+  /// Create a ZExt, BitCast, or Trunc for int -> int casts.
   static CastInst *CreateIntegerCast(
     Value *S,                ///< The pointer value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -718,7 +718,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a ZExt, BitCast, or Trunc for int -> int casts.
+  /// Create a ZExt, BitCast, or Trunc for int -> int casts.
   static CastInst *CreateIntegerCast(
     Value *S,                ///< The integer value to be casted (operand 0)
     Type *Ty,          ///< The integer type to which operand is casted
@@ -727,7 +727,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
+  /// Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
   static CastInst *CreateFPCast(
     Value *S,                ///< The floating point value to be casted
     Type *Ty,          ///< The floating point type to cast to
@@ -735,7 +735,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
+  /// Create an FPExt, BitCast, or FPTrunc for fp -> fp casts
   static CastInst *CreateFPCast(
     Value *S,                ///< The floating point value to be casted
     Type *Ty,          ///< The floating point type to cast to
@@ -743,7 +743,7 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Create a Trunc or BitCast cast instruction
+  /// Create a Trunc or BitCast cast instruction
   static CastInst *CreateTruncOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which cast should be made
@@ -751,7 +751,7 @@
     Instruction *InsertBefore = nullptr ///< Place to insert the instruction
   );
 
-  /// @brief Create a Trunc or BitCast cast instruction
+  /// Create a Trunc or BitCast cast instruction
   static CastInst *CreateTruncOrBitCast(
     Value *S,                ///< The value to be casted (operand 0)
     Type *Ty,          ///< The type to which operand is casted
@@ -759,19 +759,19 @@
     BasicBlock *InsertAtEnd  ///< The block to insert the instruction into
   );
 
-  /// @brief Check whether it is valid to call getCastOpcode for these types.
+  /// Check whether it is valid to call getCastOpcode for these types.
   static bool isCastable(
     Type *SrcTy, ///< The Type from which the value should be cast.
     Type *DestTy ///< The Type to which the value should be cast.
   );
 
-  /// @brief Check whether a bitcast between these types is valid
+  /// Check whether a bitcast between these types is valid
   static bool isBitCastable(
     Type *SrcTy, ///< The Type from which the value should be cast.
     Type *DestTy ///< The Type to which the value should be cast.
   );
 
-  /// @brief Check whether a bitcast, inttoptr, or ptrtoint cast between these
+  /// Check whether a bitcast, inttoptr, or ptrtoint cast between these
   /// types is valid and a no-op.
   ///
   /// This ensures that any pointer<->integer cast has enough bits in the
@@ -783,7 +783,7 @@
 
   /// Returns the opcode necessary to cast Val into Ty using usual casting
   /// rules.
-  /// @brief Infer the opcode for cast operand and type
+  /// Infer the opcode for cast operand and type
   static Instruction::CastOps getCastOpcode(
     const Value *Val, ///< The value to cast
     bool SrcIsSigned, ///< Whether to treat the source as signed
@@ -795,14 +795,14 @@
   /// only deals with integer source and destination types. To simplify that
   /// logic, this method is provided.
   /// @returns true iff the cast has only integral typed operand and dest type.
-  /// @brief Determine if this is an integer-only cast.
+  /// Determine if this is an integer-only cast.
   bool isIntegerCast() const;
 
   /// A lossless cast is one that does not alter the basic value. It implies
   /// a no-op cast but is more stringent, preventing things like int->float,
   /// long->double, or int->ptr.
   /// @returns true iff the cast is lossless.
-  /// @brief Determine if this is a lossless cast.
+  /// Determine if this is a lossless cast.
   bool isLosslessCast() const;
 
   /// A no-op cast is one that can be effected without changing any bits.
@@ -811,7 +811,7 @@
   /// involving Integer and Pointer types. They are no-op casts if the integer
   /// is the same size as the pointer. However, pointer size varies with
   /// platform.
-  /// @brief Determine if the described cast is a no-op cast.
+  /// Determine if the described cast is a no-op cast.
   static bool isNoopCast(
     Instruction::CastOps Opcode, ///< Opcode of cast
     Type *SrcTy,         ///< SrcTy of cast
@@ -819,7 +819,7 @@
     const DataLayout &DL ///< DataLayout to get the Int Ptr type from.
   );
 
-  /// @brief Determine if this cast is a no-op cast.
+  /// Determine if this cast is a no-op cast.
   ///
   /// \param DL is the DataLayout to determine pointer size.
   bool isNoopCast(const DataLayout &DL) const;
@@ -829,7 +829,7 @@
   /// @returns 0 if the CastInst pair can't be eliminated, otherwise
   /// returns Instruction::CastOps value for a cast that can replace
   /// the pair, casting SrcTy to DstTy.
-  /// @brief Determine if a cast pair is eliminable
+  /// Determine if a cast pair is eliminable
   static unsigned isEliminableCastPair(
     Instruction::CastOps firstOpcode,  ///< Opcode of first cast
     Instruction::CastOps secondOpcode, ///< Opcode of second cast
@@ -841,23 +841,23 @@
     Type *DstIntPtrTy  ///< Integer type corresponding to Ptr DstTy, or null
   );
 
-  /// @brief Return the opcode of this CastInst
+  /// Return the opcode of this CastInst
   Instruction::CastOps getOpcode() const {
     return Instruction::CastOps(Instruction::getOpcode());
   }
 
-  /// @brief Return the source type, as a convenience
+  /// Return the source type, as a convenience
   Type* getSrcTy() const { return getOperand(0)->getType(); }
-  /// @brief Return the destination type, as a convenience
+  /// Return the destination type, as a convenience
   Type* getDestTy() const { return getType(); }
 
   /// This method can be used to determine if a cast from S to DstTy using
   /// Opcode op is valid or not.
   /// @returns true iff the proposed cast is valid.
-  /// @brief Determine if a cast is valid without creating one.
+  /// Determine if a cast is valid without creating one.
   static bool castIsValid(Instruction::CastOps op, Value *S, Type *DstTy);
 
-  /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static bool classof(const Instruction *I) {
     return I->isCast();
   }
@@ -871,7 +871,7 @@
 //===----------------------------------------------------------------------===//
 
 /// This class is the base class for the comparison instructions.
-/// @brief Abstract base class of comparison instructions.
+/// Abstract base class of comparison instructions.
 class CmpInst : public Instruction {
 public:
   /// This enumeration lists the possible predicates for CmpInst subclasses.
@@ -937,7 +937,7 @@
   /// the two operands.  Optionally (if InstBefore is specified) insert the
   /// instruction into a BasicBlock right before the specified instruction.
   /// The specified Instruction is allowed to be a dereferenced end iterator.
-  /// @brief Create a CmpInst
+  /// Create a CmpInst
   static CmpInst *Create(OtherOps Op,
                          Predicate predicate, Value *S1,
                          Value *S2, const Twine &Name = "",
@@ -946,21 +946,21 @@
   /// Construct a compare instruction, given the opcode, the predicate and the
   /// two operands.  Also automatically insert this instruction to the end of
   /// the BasicBlock specified.
-  /// @brief Create a CmpInst
+  /// Create a CmpInst
   static CmpInst *Create(OtherOps Op, Predicate predicate, Value *S1,
                          Value *S2, const Twine &Name, BasicBlock *InsertAtEnd);
 
-  /// @brief Get the opcode casted to the right type
+  /// Get the opcode casted to the right type
   OtherOps getOpcode() const {
     return static_cast<OtherOps>(Instruction::getOpcode());
   }
 
-  /// @brief Return the predicate for this instruction.
+  /// Return the predicate for this instruction.
   Predicate getPredicate() const {
     return Predicate(getSubclassDataFromInstruction());
   }
 
-  /// @brief Set the predicate for this instruction to the specified value.
+  /// Set the predicate for this instruction to the specified value.
   void setPredicate(Predicate P) { setInstructionSubclassData(P); }
 
   static bool isFPPredicate(Predicate P) {
@@ -979,7 +979,7 @@
   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
   /// @returns the inverse predicate for the instruction's current predicate.
-  /// @brief Return the inverse of the instruction's predicate.
+  /// Return the inverse of the instruction's predicate.
   Predicate getInversePredicate() const {
     return getInversePredicate(getPredicate());
   }
@@ -987,7 +987,7 @@
   /// For example, EQ -> NE, UGT -> ULE, SLT -> SGE,
   ///              OEQ -> UNE, UGT -> OLE, OLT -> UGE, etc.
   /// @returns the inverse predicate for predicate provided in \p pred.
-  /// @brief Return the inverse of a given predicate
+  /// Return the inverse of a given predicate
   static Predicate getInversePredicate(Predicate pred);
 
   /// For example, EQ->EQ, SLE->SGE, ULT->UGT,
@@ -995,14 +995,14 @@
   /// @returns the predicate that would be the result of exchanging the two
   /// operands of the CmpInst instruction without changing the result
   /// produced.
-  /// @brief Return the predicate as if the operands were swapped
+  /// Return the predicate as if the operands were swapped
   Predicate getSwappedPredicate() const {
     return getSwappedPredicate(getPredicate());
   }
 
   /// This is a static version that you can use without an instruction
   /// available.
-  /// @brief Return the predicate as if the operands were swapped.
+  /// Return the predicate as if the operands were swapped.
   static Predicate getSwappedPredicate(Predicate pred);
 
   /// For predicate of kind "is X or equal to 0" returns the predicate "is X".
@@ -1010,18 +1010,18 @@
   /// does not support other kind of predicates.
   /// @returns the predicate that does not contains is equal to zero if
   /// it had and vice versa.
-  /// @brief Return the flipped strictness of predicate
+  /// Return the flipped strictness of predicate
   Predicate getFlippedStrictnessPredicate() const {
     return getFlippedStrictnessPredicate(getPredicate());
   }
 
   /// This is a static version that you can use without an instruction
   /// available.
-  /// @brief Return the flipped strictness of predicate
+  /// Return the flipped strictness of predicate
   static Predicate getFlippedStrictnessPredicate(Predicate pred);
 
   /// For example, SGT -> SGE, SLT -> SLE, ULT -> ULE, UGT -> UGE.
-  /// @brief Returns the non-strict version of strict comparisons.
+  /// Returns the non-strict version of strict comparisons.
   Predicate getNonStrictPredicate() const {
     return getNonStrictPredicate(getPredicate());
   }
@@ -1030,74 +1030,74 @@
   /// available.
   /// @returns the non-strict version of comparison provided in \p pred.
   /// If \p pred is not a strict comparison predicate, returns \p pred.
-  /// @brief Returns the non-strict version of strict comparisons.
+  /// Returns the non-strict version of strict comparisons.
   static Predicate getNonStrictPredicate(Predicate pred);
 
-  /// @brief Provide more efficient getOperand methods.
+  /// Provide more efficient getOperand methods.
   DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value);
 
   /// This is just a convenience that dispatches to the subclasses.
-  /// @brief Swap the operands and adjust predicate accordingly to retain
+  /// Swap the operands and adjust predicate accordingly to retain
   /// the same comparison.
   void swapOperands();
 
   /// This is just a convenience that dispatches to the subclasses.
-  /// @brief Determine if this CmpInst is commutative.
+  /// Determine if this CmpInst is commutative.
   bool isCommutative() const;
 
   /// This is just a convenience that dispatches to the subclasses.
-  /// @brief Determine if this is an equals/not equals predicate.
+  /// Determine if this is an equals/not equals predicate.
   bool isEquality() const;
 
   /// @returns true if the comparison is signed, false otherwise.
-  /// @brief Determine if this instruction is using a signed comparison.
+  /// Determine if this instruction is using a signed comparison.
   bool isSigned() const {
     return isSigned(getPredicate());
   }
 
   /// @returns true if the comparison is unsigned, false otherwise.
-  /// @brief Determine if this instruction is using an unsigned comparison.
+  /// Determine if this instruction is using an unsigned comparison.
   bool isUnsigned() const {
     return isUnsigned(getPredicate());
   }
 
   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
   /// @returns the signed version of the unsigned predicate pred.
-  /// @brief return the signed version of a predicate
+  /// return the signed version of a predicate
   static Predicate getSignedPredicate(Predicate pred);
 
   /// For example, ULT->SLT, ULE->SLE, UGT->SGT, UGE->SGE, SLT->Failed assert
   /// @returns the signed version of the predicate for this instruction (which
   /// has to be an unsigned predicate).
-  /// @brief return the signed version of a predicate
+  /// return the signed version of a predicate
   Predicate getSignedPredicate() {
     return getSignedPredicate(getPredicate());
   }
 
   /// This is just a convenience.
-  /// @brief Determine if this is true when both operands are the same.
+  /// Determine if this is true when both operands are the same.
   bool isTrueWhenEqual() const {
     return isTrueWhenEqual(getPredicate());
   }
 
   /// This is just a convenience.
-  /// @brief Determine if this is false when both operands are the same.
+  /// Determine if this is false when both operands are the same.
   bool isFalseWhenEqual() const {
     return isFalseWhenEqual(getPredicate());
   }
 
   /// @returns true if the predicate is unsigned, false otherwise.
-  /// @brief Determine if the predicate is an unsigned operation.
+  /// Determine if the predicate is an unsigned operation.
   static bool isUnsigned(Predicate predicate);
 
   /// @returns true if the predicate is signed, false otherwise.
-  /// @brief Determine if the predicate is an signed operation.
+  /// Determine if the predicate is an signed operation.
   static bool isSigned(Predicate predicate);
 
-  /// @brief Determine if the predicate is an ordered operation.
+  /// Determine if the predicate is an ordered operation.
   static bool isOrdered(Predicate predicate);
 
-  /// @brief Determine if the predicate is an unordered operation.
+  /// Determine if the predicate is an unordered operation.
   static bool isUnordered(Predicate predicate);
 
   /// Determine if the predicate is true when comparing a value with itself.
@@ -1114,7 +1114,7 @@
   /// operands.
   static bool isImpliedFalseByMatchingCmp(Predicate Pred1, Predicate Pred2);
 
-  /// @brief Methods for support type inquiry through isa, cast, and dyn_cast:
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static bool classof(const Instruction *I) {
     return I->getOpcode() == Instruction::ICmp ||
            I->getOpcode() == Instruction::FCmp;
@@ -1123,7 +1123,7 @@
     return isa<Instruction>(V) && classof(cast<Instruction>(V));
   }
 
-  /// @brief Create a result type for fcmp/icmp
+  /// Create a result type for fcmp/icmp
   static Type* makeCmpResultType(Type* opnd_type) {
     if (VectorType* vt = dyn_cast<VectorType>(opnd_type)) {
       return VectorType::get(Type::getInt1Ty(opnd_type->getContext()),
@@ -1181,7 +1181,7 @@
 
   /// Convenience accessors
 
-  /// \brief Return the outer EH-pad this funclet is nested within.
+  /// Return the outer EH-pad this funclet is nested within.
   ///
   /// Note: This returns the associated CatchSwitchInst if this FuncletPadInst
   /// is a CatchPadInst.
@@ -1217,7 +1217,7 @@
 
 DEFINE_TRANSPARENT_OPERAND_ACCESSORS(FuncletPadInst, Value)
 
-/// \brief A lightweight accessor for an operand bundle meant to be passed
+/// A lightweight accessor for an operand bundle meant to be passed
 /// around by value.
 struct OperandBundleUse {
   ArrayRef<Use> Inputs;
@@ -1226,7 +1226,7 @@
   explicit OperandBundleUse(StringMapEntry<uint32_t> *Tag, ArrayRef<Use> Inputs)
       : Inputs(Inputs), Tag(Tag) {}
 
-  /// \brief Return true if the operand at index \p Idx in this operand bundle
+  /// Return true if the operand at index \p Idx in this operand bundle
   /// has the attribute A.
   bool operandHasAttr(unsigned Idx, Attribute::AttrKind A) const {
     if (isDeoptOperandBundle())
@@ -1237,12 +1237,12 @@
     return false;
   }
 
-  /// \brief Return the tag of this operand bundle as a string.
+  /// Return the tag of this operand bundle as a string.
   StringRef getTagName() const {
     return Tag->getKey();
   }
 
-  /// \brief Return the tag of this operand bundle as an integer.
+  /// Return the tag of this operand bundle as an integer.
   ///
   /// Operand bundle tags are interned by LLVMContextImpl::getOrInsertBundleTag,
   /// and this function returns the unique integer getOrInsertBundleTag
@@ -1251,22 +1251,22 @@
     return Tag->getValue();
   }
 
-  /// \brief Return true if this is a "deopt" operand bundle.
+  /// Return true if this is a "deopt" operand bundle.
   bool isDeoptOperandBundle() const {
     return getTagID() == LLVMContext::OB_deopt;
   }
 
-  /// \brief Return true if this is a "funclet" operand bundle.
+  /// Return true if this is a "funclet" operand bundle.
   bool isFuncletOperandBundle() const {
     return getTagID() == LLVMContext::OB_funclet;
   }
 
 private:
-  /// \brief Pointer to an entry in LLVMContextImpl::getOrInsertBundleTag.
+  /// Pointer to an entry in LLVMContextImpl::getOrInsertBundleTag.
   StringMapEntry<uint32_t> *Tag;
 };
 
-/// \brief A container for an operand bundle being viewed as a set of values
+/// A container for an operand bundle being viewed as a set of values
 /// rather than a set of uses.
 ///
 /// Unlike OperandBundleUse, OperandBundleDefT owns the memory it carries, and
@@ -1301,7 +1301,7 @@
 using OperandBundleDef = OperandBundleDefT<Value *>;
 using ConstOperandBundleDef = OperandBundleDefT<const Value *>;
 
-/// \brief A mixin to add operand bundle functionality to llvm instruction
+/// A mixin to add operand bundle functionality to llvm instruction
 /// classes.
 ///
 /// OperandBundleUser uses the descriptor area co-allocated with the host User
@@ -1349,21 +1349,21 @@
 /// Currently operand bundle users with hung-off operands are not supported.
 template <typename InstrTy, typename OpIteratorTy> class OperandBundleUser {
 public:
-  /// \brief Return the number of operand bundles associated with this User.
+  /// Return the number of operand bundles associated with this User.
   unsigned getNumOperandBundles() const {
     return std::distance(bundle_op_info_begin(), bundle_op_info_end());
   }
 
-  /// \brief Return true if this User has any operand bundles.
+  /// Return true if this User has any operand bundles.
   bool hasOperandBundles() const { return getNumOperandBundles() != 0; }
 
-  /// \brief Return the index of the first bundle operand in the Use array.
+  /// Return the index of the first bundle operand in the Use array.
   unsigned getBundleOperandsStartIndex() const {
     assert(hasOperandBundles() && "Don't call otherwise!");
     return bundle_op_info_begin()->Begin;
   }
 
-  /// \brief Return the index of the last bundle operand in the Use array.
+  /// Return the index of the last bundle operand in the Use array.
   unsigned getBundleOperandsEndIndex() const {
     assert(hasOperandBundles() && "Don't call otherwise!");
     return bundle_op_info_end()[-1].End;
@@ -1375,7 +1375,7 @@
            Idx < getBundleOperandsEndIndex();
   }
 
-  /// \brief Return the total number operands (not operand bundles) used by
+  /// Return the total number operands (not operand bundles) used by
   /// every operand bundle in this OperandBundleUser.
   unsigned getNumTotalBundleOperands() const {
     if (!hasOperandBundles())
@@ -1388,13 +1388,13 @@
     return End - Begin;
   }
 
-  /// \brief Return the operand bundle at a specific index.
+  /// Return the operand bundle at a specific index.
   OperandBundleUse getOperandBundleAt(unsigned Index) const {
     assert(Index < getNumOperandBundles() && "Index out of bounds!");
     return operandBundleFromBundleOpInfo(*(bundle_op_info_begin() + Index));
   }
 
-  /// \brief Return the number of operand bundles with the tag Name attached to
+  /// Return the number of operand bundles with the tag Name attached to
   /// this instruction.
   unsigned countOperandBundlesOfType(StringRef Name) const {
     unsigned Count = 0;
@@ -1405,7 +1405,7 @@
     return Count;
   }
 
-  /// \brief Return the number of operand bundles with the tag ID attached to
+  /// Return the number of operand bundles with the tag ID attached to
   /// this instruction.
   unsigned countOperandBundlesOfType(uint32_t ID) const {
     unsigned Count = 0;
@@ -1416,7 +1416,7 @@
     return Count;
   }
 
-  /// \brief Return an operand bundle by name, if present.
+  /// Return an operand bundle by name, if present.
   ///
   /// It is an error to call this for operand bundle types that may have
   /// multiple instances of them on the same instruction.
@@ -1432,7 +1432,7 @@
     return None;
   }
 
-  /// \brief Return an operand bundle by tag ID, if present.
+  /// Return an operand bundle by tag ID, if present.
   ///
   /// It is an error to call this for operand bundle types that may have
   /// multiple instances of them on the same instruction.
@@ -1448,7 +1448,7 @@
     return None;
   }
 
-  /// \brief Return the list of operand bundles attached to this instruction as
+  /// Return the list of operand bundles attached to this instruction as
   /// a vector of OperandBundleDefs.
   ///
   /// This function copies the OperandBundeUse instances associated with this
@@ -1460,7 +1460,7 @@
       Defs.emplace_back(getOperandBundleAt(i));
   }
 
-  /// \brief Return the operand bundle for the operand at index OpIdx.
+  /// Return the operand bundle for the operand at index OpIdx.
   ///
   /// It is an error to call this with an OpIdx that does not correspond to an
   /// bundle operand.
@@ -1468,7 +1468,7 @@
     return operandBundleFromBundleOpInfo(getBundleOpInfoForOperand(OpIdx));
   }
 
-  /// \brief Return true if this operand bundle user has operand bundles that
+  /// Return true if this operand bundle user has operand bundles that
   /// may read from the heap.
   bool hasReadingOperandBundles() const {
     // Implementation note: this is a conservative implementation of operand
@@ -1477,7 +1477,7 @@
     return hasOperandBundles();
   }
 
-  /// \brief Return true if this operand bundle user has operand bundles that
+  /// Return true if this operand bundle user has operand bundles that
   /// may write to the heap.
   bool hasClobberingOperandBundles() const {
     for (auto &BOI : bundle_op_infos()) {
@@ -1493,7 +1493,7 @@
     return false;
   }
 
-  /// \brief Return true if the bundle operand at index \p OpIdx has the
+  /// Return true if the bundle operand at index \p OpIdx has the
   /// attribute \p A.
   bool bundleOperandHasAttr(unsigned OpIdx,  Attribute::AttrKind A) const {
     auto &BOI = getBundleOpInfoForOperand(OpIdx);
@@ -1501,7 +1501,7 @@
     return OBU.operandHasAttr(OpIdx - BOI.Begin, A);
   }
 
-  /// \brief Return true if \p Other has the same sequence of operand bundle
+  /// Return true if \p Other has the same sequence of operand bundle
   /// tags with the same number of operands on each one of them as this
   /// OperandBundleUser.
   bool hasIdenticalOperandBundleSchema(
@@ -1513,7 +1513,7 @@
                       Other.bundle_op_info_begin());
   }
 
-  /// \brief Return true if this operand bundle user contains operand bundles
+  /// Return true if this operand bundle user contains operand bundles
   /// with tags other than those specified in \p IDs.
   bool hasOperandBundlesOtherThan(ArrayRef<uint32_t> IDs) const {
     for (unsigned i = 0, e = getNumOperandBundles(); i != e; ++i) {
@@ -1525,7 +1525,7 @@
   }
 
 protected:
-  /// \brief Is the function attribute S disallowed by some operand bundle on
+  /// Is the function attribute S disallowed by some operand bundle on
   /// this operand bundle user?
   bool isFnAttrDisallowedByOpBundle(StringRef S) const {
     // Operand bundles only possibly disallow readnone, readonly and argmenonly
@@ -1533,7 +1533,7 @@
     return false;
   }
 
-  /// \brief Is the function attribute A disallowed by some operand bundle on
+  /// Is the function attribute A disallowed by some operand bundle on
   /// this operand bundle user?
   bool isFnAttrDisallowedByOpBundle(Attribute::AttrKind A) const {
     switch (A) {
@@ -1559,18 +1559,18 @@
     llvm_unreachable("switch has a default case!");
   }
 
-  /// \brief Used to keep track of an operand bundle.  See the main comment on
+  /// Used to keep track of an operand bundle.  See the main comment on
   /// OperandBundleUser above.
   struct BundleOpInfo {
-    /// \brief The operand bundle tag, interned by
+    /// The operand bundle tag, interned by
     /// LLVMContextImpl::getOrInsertBundleTag.
     StringMapEntry<uint32_t> *Tag;
 
-    /// \brief The index in the Use& vector where operands for this operand
+    /// The index in the Use& vector where operands for this operand
     /// bundle starts.
     uint32_t Begin;
 
-    /// \brief The index in the Use& vector where operands for this operand
+    /// The index in the Use& vector where operands for this operand
     /// bundle ends.
     uint32_t End;
 
@@ -1579,7 +1579,7 @@
     }
   };
 
-  /// \brief Simple helper function to map a BundleOpInfo to an
+  /// Simple helper function to map a BundleOpInfo to an
   /// OperandBundleUse.
   OperandBundleUse
   operandBundleFromBundleOpInfo(const BundleOpInfo &BOI) const {
@@ -1591,7 +1591,7 @@
   using bundle_op_iterator = BundleOpInfo *;
   using const_bundle_op_iterator = const BundleOpInfo *;
 
-  /// \brief Return the start of the list of BundleOpInfo instances associated
+  /// Return the start of the list of BundleOpInfo instances associated
   /// with this OperandBundleUser.
   bundle_op_iterator bundle_op_info_begin() {
     if (!static_cast<InstrTy *>(this)->hasDescriptor())
@@ -1601,7 +1601,7 @@
     return reinterpret_cast<bundle_op_iterator>(BytesBegin);
   }
 
-  /// \brief Return the start of the list of BundleOpInfo instances associated
+  /// Return the start of the list of BundleOpInfo instances associated
   /// with this OperandBundleUser.
   const_bundle_op_iterator bundle_op_info_begin() const {
     auto *NonConstThis =
@@ -1609,7 +1609,7 @@
     return NonConstThis->bundle_op_info_begin();
   }
 
-  /// \brief Return the end of the list of BundleOpInfo instances associated
+  /// Return the end of the list of BundleOpInfo instances associated
   /// with this OperandBundleUser.
   bundle_op_iterator bundle_op_info_end() {
     if (!static_cast<InstrTy *>(this)->hasDescriptor())
@@ -1619,7 +1619,7 @@
     return reinterpret_cast<bundle_op_iterator>(BytesEnd);
   }
 
-  /// \brief Return the end of the list of BundleOpInfo instances associated
+  /// Return the end of the list of BundleOpInfo instances associated
   /// with this OperandBundleUser.
   const_bundle_op_iterator bundle_op_info_end() const {
     auto *NonConstThis =
@@ -1627,17 +1627,17 @@
     return NonConstThis->bundle_op_info_end();
   }
 
-  /// \brief Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
+  /// Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
   iterator_range<bundle_op_iterator> bundle_op_infos() {
     return make_range(bundle_op_info_begin(), bundle_op_info_end());
   }
 
-  /// \brief Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
+  /// Return the range [\p bundle_op_info_begin, \p bundle_op_info_end).
   iterator_range<const_bundle_op_iterator> bundle_op_infos() const {
     return make_range(bundle_op_info_begin(), bundle_op_info_end());
   }
 
-  /// \brief Populate the BundleOpInfo instances and the Use& vector from \p
+  /// Populate the BundleOpInfo instances and the Use& vector from \p
   /// Bundles.  Return the op_iterator pointing to the Use& one past the last
   /// last bundle operand use.
   ///
@@ -1668,7 +1668,7 @@
     return It;
   }
 
-  /// \brief Return the BundleOpInfo for the operand at index OpIdx.
+  /// Return the BundleOpInfo for the operand at index OpIdx.
   ///
   /// It is an error to call this with an OpIdx that does not correspond to an
   /// bundle operand.
@@ -1680,7 +1680,7 @@
     llvm_unreachable("Did not find operand bundle for operand!");
   }
 
-  /// \brief Return the total number of values used in \p Bundles.
+  /// Return the total number of values used in \p Bundles.
   static unsigned CountBundleInputs(ArrayRef<OperandBundleDef> Bundles) {
     unsigned Total = 0;
     for (auto &B : Bundles)
diff --git a/linux-x64/clang/include/llvm/IR/Instruction.h b/linux-x64/clang/include/llvm/IR/Instruction.h
index 76bc401..643c2a0 100644
--- a/linux-x64/clang/include/llvm/IR/Instruction.h
+++ b/linux-x64/clang/include/llvm/IR/Instruction.h
@@ -128,6 +128,7 @@
   const char *getOpcodeName() const { return getOpcodeName(getOpcode()); }
   bool isTerminator() const { return isTerminator(getOpcode()); }
   bool isBinaryOp() const { return isBinaryOp(getOpcode()); }
+  bool isIntDivRem() const { return isIntDivRem(getOpcode()); }
   bool isShift() { return isShift(getOpcode()); }
   bool isCast() const { return isCast(getOpcode()); }
   bool isFuncletPad() const { return isFuncletPad(getOpcode()); }
@@ -142,6 +143,10 @@
     return Opcode >= BinaryOpsBegin && Opcode < BinaryOpsEnd;
   }
 
+  static inline bool isIntDivRem(unsigned Opcode) {
+    return Opcode == UDiv || Opcode == SDiv || Opcode == URem || Opcode == SRem;
+  }
+
   /// Determine if the Opcode is one of the shift instructions.
   static inline bool isShift(unsigned Opcode) {
     return Opcode >= Shl && Opcode <= AShr;
@@ -284,7 +289,7 @@
   /// Return the debug location for this node as a DebugLoc.
   const DebugLoc &getDebugLoc() const { return DbgLoc; }
 
-  /// Set or clear the nsw flag on this instruction, which must be an operator
+  /// Set or clear the nuw flag on this instruction, which must be an operator
   /// which supports this flag. See LangRef.html for the meaning of this flag.
   void setHasNoUnsignedWrap(bool b = true);
 
@@ -542,7 +547,7 @@
   /// may have side effects cannot be removed without semantically changing the
   /// generated program.
   bool isSafeToRemove() const;
-  
+
   /// Return true if the instruction is a variety of EH-block.
   bool isEHPad() const {
     switch (getOpcode()) {
@@ -556,6 +561,14 @@
     }
   }
 
+  /// Return a pointer to the next non-debug instruction in the same basic
+  /// block as 'this', or nullptr if no such instruction exists.
+  const Instruction *getNextNonDebugInstruction() const;
+  Instruction *getNextNonDebugInstruction() {
+    return const_cast<Instruction *>(
+        static_cast<const Instruction *>(this)->getNextNonDebugInstruction());
+  }
+
   /// Create a copy of 'this' instruction that is identical in all ways except
   /// the following:
   ///   * The instruction has no parent
@@ -590,7 +603,7 @@
   /// be identical.
   /// @returns true if the specified instruction is the same operation as
   /// the current one.
-  /// @brief Determine if one instruction is the same operation as another.
+  /// Determine if one instruction is the same operation as another.
   bool isSameOperationAs(const Instruction *I, unsigned flags = 0) const;
 
   /// Return true if there are any uses of this instruction in blocks other than
diff --git a/linux-x64/clang/include/llvm/IR/Instructions.h b/linux-x64/clang/include/llvm/IR/Instructions.h
index 6c15d5d..9be8bd1 100644
--- a/linux-x64/clang/include/llvm/IR/Instructions.h
+++ b/linux-x64/clang/include/llvm/IR/Instructions.h
@@ -98,6 +98,10 @@
     return cast<PointerType>(Instruction::getType());
   }
 
+  /// Get allocation size in bits. Returns None if size can't be determined,
+  /// e.g. in case of a VLA.
+  Optional<uint64_t> getAllocationSizeInBits(const DataLayout &DL) const;
+
   /// Return the type that is being allocated by the instruction.
   Type *getAllocatedType() const { return AllocatedType; }
   /// for use only in special circumstances that need to generically
@@ -1719,7 +1723,7 @@
     return Attrs.getDereferenceableOrNullBytes(i);
   }
 
-  /// @brief Determine if the return value is marked with NoAlias attribute.
+  /// Determine if the return value is marked with NoAlias attribute.
   bool returnDoesNotAlias() const {
     return Attrs.hasAttribute(AttributeList::ReturnIndex, Attribute::NoAlias);
   }
@@ -1763,7 +1767,7 @@
     addAttribute(AttributeList::FunctionIndex, Attribute::WriteOnly);
   }
 
-  /// @brief Determine if the call can access memmory only using pointers based
+  /// Determine if the call can access memmory only using pointers based
   /// on its arguments.
   bool onlyAccessesArgMemory() const {
     return hasFnAttr(Attribute::ArgMemOnly);
@@ -1772,7 +1776,7 @@
     addAttribute(AttributeList::FunctionIndex, Attribute::ArgMemOnly);
   }
 
-  /// @brief Determine if the function may only access memory that is
+  /// Determine if the function may only access memory that is
   /// inaccessible from the IR.
   bool onlyAccessesInaccessibleMemory() const {
     return hasFnAttr(Attribute::InaccessibleMemOnly);
@@ -1781,7 +1785,7 @@
     addAttribute(AttributeList::FunctionIndex, Attribute::InaccessibleMemOnly);
   }
 
-  /// @brief Determine if the function may only access memory that is
+  /// Determine if the function may only access memory that is
   /// either inaccessible from the IR or pointed to by its arguments.
   bool onlyAccessesInaccessibleMemOrArgMem() const {
     return hasFnAttr(Attribute::InaccessibleMemOrArgMemOnly);
@@ -2426,7 +2430,7 @@
 
   /// Return the shuffle mask value for the specified element of the mask.
   /// Return -1 if the element is undef.
-  static int getMaskValue(Constant *Mask, unsigned Elt);
+  static int getMaskValue(const Constant *Mask, unsigned Elt);
 
   /// Return the shuffle mask value of this instruction for the given element
   /// index. Return -1 if the element is undef.
@@ -2436,7 +2440,8 @@
 
   /// Convert the input shuffle mask operand to a vector of integers. Undefined
   /// elements of the mask are returned as -1.
-  static void getShuffleMask(Constant *Mask, SmallVectorImpl<int> &Result);
+  static void getShuffleMask(const Constant *Mask,
+                             SmallVectorImpl<int> &Result);
 
   /// Return the mask for this instruction as a vector of integers. Undefined
   /// elements of the mask are returned as -1.
@@ -2450,6 +2455,176 @@
     return Mask;
   }
 
+  /// Return true if this shuffle returns a vector with a different number of
+  /// elements than its source elements.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <1,2>
+  bool changesLength() const {
+    unsigned NumSourceElts = Op<0>()->getType()->getVectorNumElements();
+    unsigned NumMaskElts = getMask()->getType()->getVectorNumElements();
+    return NumSourceElts != NumMaskElts;
+  }
+
+  /// Return true if this shuffle mask chooses elements from exactly one source
+  /// vector.
+  /// Example: <7,5,undef,7>
+  /// This assumes that vector operands are the same length as the mask.
+  static bool isSingleSourceMask(ArrayRef<int> Mask);
+  static bool isSingleSourceMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isSingleSourceMask(MaskAsInts);
+  }
+
+  /// Return true if this shuffle chooses elements from exactly one source
+  /// vector without changing the length of that vector.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <3,0,undef,3>
+  /// TODO: Optionally allow length-changing shuffles.
+  bool isSingleSource() const {
+    return !changesLength() && isSingleSourceMask(getMask());
+  }
+
+  /// Return true if this shuffle mask chooses elements from exactly one source
+  /// vector without lane crossings. A shuffle using this mask is not
+  /// necessarily a no-op because it may change the number of elements from its
+  /// input vectors or it may provide demanded bits knowledge via undef lanes.
+  /// Example: <undef,undef,2,3>
+  static bool isIdentityMask(ArrayRef<int> Mask);
+  static bool isIdentityMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isIdentityMask(MaskAsInts);
+  }
+
+  /// Return true if this shuffle mask chooses elements from exactly one source
+  /// vector without lane crossings and does not change the number of elements
+  /// from its input vectors.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <4,undef,6,undef>
+  /// TODO: Optionally allow length-changing shuffles.
+  bool isIdentity() const {
+    return !changesLength() && isIdentityMask(getShuffleMask());
+  }
+
+  /// Return true if this shuffle mask chooses elements from its source vectors
+  /// without lane crossings. A shuffle using this mask would be
+  /// equivalent to a vector select with a constant condition operand.
+  /// Example: <4,1,6,undef>
+  /// This returns false if the mask does not choose from both input vectors.
+  /// In that case, the shuffle is better classified as an identity shuffle.
+  /// This assumes that vector operands are the same length as the mask
+  /// (a length-changing shuffle can never be equivalent to a vector select).
+  static bool isSelectMask(ArrayRef<int> Mask);
+  static bool isSelectMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isSelectMask(MaskAsInts);
+  }
+
+  /// Return true if this shuffle chooses elements from its source vectors
+  /// without lane crossings and all operands have the same number of elements.
+  /// In other words, this shuffle is equivalent to a vector select with a
+  /// constant condition operand.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <undef,1,6,3>
+  /// This returns false if the mask does not choose from both input vectors.
+  /// In that case, the shuffle is better classified as an identity shuffle.
+  /// TODO: Optionally allow length-changing shuffles.
+  bool isSelect() const {
+    return !changesLength() && isSelectMask(getMask());
+  }
+
+  /// Return true if this shuffle mask swaps the order of elements from exactly
+  /// one source vector.
+  /// Example: <7,6,undef,4>
+  /// This assumes that vector operands are the same length as the mask.
+  static bool isReverseMask(ArrayRef<int> Mask);
+  static bool isReverseMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isReverseMask(MaskAsInts);
+  }
+
+  /// Return true if this shuffle swaps the order of elements from exactly
+  /// one source vector.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <3,undef,1,undef>
+  /// TODO: Optionally allow length-changing shuffles.
+  bool isReverse() const {
+    return !changesLength() && isReverseMask(getMask());
+  }
+
+  /// Return true if this shuffle mask chooses all elements with the same value
+  /// as the first element of exactly one source vector.
+  /// Example: <4,undef,undef,4>
+  /// This assumes that vector operands are the same length as the mask.
+  static bool isZeroEltSplatMask(ArrayRef<int> Mask);
+  static bool isZeroEltSplatMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isZeroEltSplatMask(MaskAsInts);
+  }
+
+  /// Return true if all elements of this shuffle are the same value as the
+  /// first element of exactly one source vector without changing the length
+  /// of that vector.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <undef,0,undef,0>
+  /// TODO: Optionally allow length-changing shuffles.
+  /// TODO: Optionally allow splats from other elements.
+  bool isZeroEltSplat() const {
+    return !changesLength() && isZeroEltSplatMask(getMask());
+  }
+
+  /// Return true if this shuffle mask is a transpose mask.
+  /// Transpose vector masks transpose a 2xn matrix. They read corresponding
+  /// even- or odd-numbered vector elements from two n-dimensional source
+  /// vectors and write each result into consecutive elements of an
+  /// n-dimensional destination vector. Two shuffles are necessary to complete
+  /// the transpose, one for the even elements and another for the odd elements.
+  /// This description closely follows how the TRN1 and TRN2 AArch64
+  /// instructions operate.
+  ///
+  /// For example, a simple 2x2 matrix can be transposed with:
+  ///
+  ///   ; Original matrix
+  ///   m0 = < a, b >
+  ///   m1 = < c, d >
+  ///
+  ///   ; Transposed matrix
+  ///   t0 = < a, c > = shufflevector m0, m1, < 0, 2 >
+  ///   t1 = < b, d > = shufflevector m0, m1, < 1, 3 >
+  ///
+  /// For matrices having greater than n columns, the resulting nx2 transposed
+  /// matrix is stored in two result vectors such that one vector contains
+  /// interleaved elements from all the even-numbered rows and the other vector
+  /// contains interleaved elements from all the odd-numbered rows. For example,
+  /// a 2x4 matrix can be transposed with:
+  ///
+  ///   ; Original matrix
+  ///   m0 = < a, b, c, d >
+  ///   m1 = < e, f, g, h >
+  ///
+  ///   ; Transposed matrix
+  ///   t0 = < a, e, c, g > = shufflevector m0, m1 < 0, 4, 2, 6 >
+  ///   t1 = < b, f, d, h > = shufflevector m0, m1 < 1, 5, 3, 7 >
+  static bool isTransposeMask(ArrayRef<int> Mask);
+  static bool isTransposeMask(const Constant *Mask) {
+    assert(Mask->getType()->isVectorTy() && "Shuffle needs vector constant.");
+    SmallVector<int, 16> MaskAsInts;
+    getShuffleMask(Mask, MaskAsInts);
+    return isTransposeMask(MaskAsInts);
+  }
+
+  /// Return true if this shuffle transposes the elements of its inputs without
+  /// changing the length of the vectors. This operation may also be known as a
+  /// merge or interleave. See the description for isTransposeMask() for the
+  /// exact specification.
+  /// Example: shufflevector <4 x n> A, <4 x n> B, <0,4,2,6>
+  bool isTranspose() const {
+    return !changesLength() && isTransposeMask(getMask());
+  }
+
   /// Change values in a shuffle permute mask assuming the two vector operands
   /// of length InVecNumElts have swapped position.
   static void commuteShuffleMask(MutableArrayRef<int> Mask,
@@ -3841,7 +4016,7 @@
   void setDoesNotThrow() {
     addAttribute(AttributeList::FunctionIndex, Attribute::NoUnwind);
   }
-  
+
   /// Return the function called, or null if this is an
   /// indirect function invocation.
   ///
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc b/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc
new file mode 100644
index 0000000..89c9e6a
--- /dev/null
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicEnums.inc
@@ -0,0 +1,6738 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|*                                                                            *|
+|* Intrinsic Function Source Fragment                                         *|
+|*                                                                            *|
+|* Automatically generated file, do not edit!                                 *|
+|*                                                                            *|
+\*===----------------------------------------------------------------------===*/
+
+// VisualStudio defines setjmp as _setjmp
+#if defined(_MSC_VER) && defined(setjmp) && \
+                         !defined(setjmp_undefined_for_msvc)
+#  pragma push_macro("setjmp")
+#  undef setjmp
+#  define setjmp_undefined_for_msvc
+#endif
+
+// Enum values for Intrinsics.h
+#ifdef GET_INTRINSIC_ENUM_VALUES
+    addressofreturnaddress,                    // llvm.addressofreturnaddress
+    adjust_trampoline,                         // llvm.adjust.trampoline
+    annotation,                                // llvm.annotation
+    assume,                                    // llvm.assume
+    bitreverse,                                // llvm.bitreverse
+    bswap,                                     // llvm.bswap
+    canonicalize,                              // llvm.canonicalize
+    ceil,                                      // llvm.ceil
+    clear_cache,                               // llvm.clear_cache
+    codeview_annotation,                       // llvm.codeview.annotation
+    convert_from_fp16,                         // llvm.convert.from.fp16
+    convert_to_fp16,                           // llvm.convert.to.fp16
+    copysign,                                  // llvm.copysign
+    coro_alloc,                                // llvm.coro.alloc
+    coro_begin,                                // llvm.coro.begin
+    coro_destroy,                              // llvm.coro.destroy
+    coro_done,                                 // llvm.coro.done
+    coro_end,                                  // llvm.coro.end
+    coro_frame,                                // llvm.coro.frame
+    coro_free,                                 // llvm.coro.free
+    coro_id,                                   // llvm.coro.id
+    coro_noop,                                 // llvm.coro.noop
+    coro_param,                                // llvm.coro.param
+    coro_promise,                              // llvm.coro.promise
+    coro_resume,                               // llvm.coro.resume
+    coro_save,                                 // llvm.coro.save
+    coro_size,                                 // llvm.coro.size
+    coro_subfn_addr,                           // llvm.coro.subfn.addr
+    coro_suspend,                              // llvm.coro.suspend
+    cos,                                       // llvm.cos
+    ctlz,                                      // llvm.ctlz
+    ctpop,                                     // llvm.ctpop
+    cttz,                                      // llvm.cttz
+    dbg_addr,                                  // llvm.dbg.addr
+    dbg_declare,                               // llvm.dbg.declare
+    dbg_label,                                 // llvm.dbg.label
+    dbg_value,                                 // llvm.dbg.value
+    debugtrap,                                 // llvm.debugtrap
+    donothing,                                 // llvm.donothing
+    eh_dwarf_cfa,                              // llvm.eh.dwarf.cfa
+    eh_exceptioncode,                          // llvm.eh.exceptioncode
+    eh_exceptionpointer,                       // llvm.eh.exceptionpointer
+    eh_return_i32,                             // llvm.eh.return.i32
+    eh_return_i64,                             // llvm.eh.return.i64
+    eh_sjlj_callsite,                          // llvm.eh.sjlj.callsite
+    eh_sjlj_functioncontext,                   // llvm.eh.sjlj.functioncontext
+    eh_sjlj_longjmp,                           // llvm.eh.sjlj.longjmp
+    eh_sjlj_lsda,                              // llvm.eh.sjlj.lsda
+    eh_sjlj_setjmp,                            // llvm.eh.sjlj.setjmp
+    eh_sjlj_setup_dispatch,                    // llvm.eh.sjlj.setup.dispatch
+    eh_typeid_for,                             // llvm.eh.typeid.for
+    eh_unwind_init,                            // llvm.eh.unwind.init
+    exp,                                       // llvm.exp
+    exp2,                                      // llvm.exp2
+    expect,                                    // llvm.expect
+    experimental_constrained_cos,              // llvm.experimental.constrained.cos
+    experimental_constrained_exp,              // llvm.experimental.constrained.exp
+    experimental_constrained_exp2,             // llvm.experimental.constrained.exp2
+    experimental_constrained_fadd,             // llvm.experimental.constrained.fadd
+    experimental_constrained_fdiv,             // llvm.experimental.constrained.fdiv
+    experimental_constrained_fma,              // llvm.experimental.constrained.fma
+    experimental_constrained_fmul,             // llvm.experimental.constrained.fmul
+    experimental_constrained_frem,             // llvm.experimental.constrained.frem
+    experimental_constrained_fsub,             // llvm.experimental.constrained.fsub
+    experimental_constrained_log,              // llvm.experimental.constrained.log
+    experimental_constrained_log10,            // llvm.experimental.constrained.log10
+    experimental_constrained_log2,             // llvm.experimental.constrained.log2
+    experimental_constrained_nearbyint,        // llvm.experimental.constrained.nearbyint
+    experimental_constrained_pow,              // llvm.experimental.constrained.pow
+    experimental_constrained_powi,             // llvm.experimental.constrained.powi
+    experimental_constrained_rint,             // llvm.experimental.constrained.rint
+    experimental_constrained_sin,              // llvm.experimental.constrained.sin
+    experimental_constrained_sqrt,             // llvm.experimental.constrained.sqrt
+    experimental_deoptimize,                   // llvm.experimental.deoptimize
+    experimental_gc_relocate,                  // llvm.experimental.gc.relocate
+    experimental_gc_result,                    // llvm.experimental.gc.result
+    experimental_gc_statepoint,                // llvm.experimental.gc.statepoint
+    experimental_guard,                        // llvm.experimental.guard
+    experimental_patchpoint_i64,               // llvm.experimental.patchpoint.i64
+    experimental_patchpoint_void,              // llvm.experimental.patchpoint.void
+    experimental_stackmap,                     // llvm.experimental.stackmap
+    experimental_vector_reduce_add,            // llvm.experimental.vector.reduce.add
+    experimental_vector_reduce_and,            // llvm.experimental.vector.reduce.and
+    experimental_vector_reduce_fadd,           // llvm.experimental.vector.reduce.fadd
+    experimental_vector_reduce_fmax,           // llvm.experimental.vector.reduce.fmax
+    experimental_vector_reduce_fmin,           // llvm.experimental.vector.reduce.fmin
+    experimental_vector_reduce_fmul,           // llvm.experimental.vector.reduce.fmul
+    experimental_vector_reduce_mul,            // llvm.experimental.vector.reduce.mul
+    experimental_vector_reduce_or,             // llvm.experimental.vector.reduce.or
+    experimental_vector_reduce_smax,           // llvm.experimental.vector.reduce.smax
+    experimental_vector_reduce_smin,           // llvm.experimental.vector.reduce.smin
+    experimental_vector_reduce_umax,           // llvm.experimental.vector.reduce.umax
+    experimental_vector_reduce_umin,           // llvm.experimental.vector.reduce.umin
+    experimental_vector_reduce_xor,            // llvm.experimental.vector.reduce.xor
+    fabs,                                      // llvm.fabs
+    floor,                                     // llvm.floor
+    flt_rounds,                                // llvm.flt.rounds
+    fma,                                       // llvm.fma
+    fmuladd,                                   // llvm.fmuladd
+    frameaddress,                              // llvm.frameaddress
+    fshl,                                      // llvm.fshl
+    fshr,                                      // llvm.fshr
+    gcread,                                    // llvm.gcread
+    gcroot,                                    // llvm.gcroot
+    gcwrite,                                   // llvm.gcwrite
+    get_dynamic_area_offset,                   // llvm.get.dynamic.area.offset
+    icall_branch_funnel,                       // llvm.icall.branch.funnel
+    init_trampoline,                           // llvm.init.trampoline
+    instrprof_increment,                       // llvm.instrprof.increment
+    instrprof_increment_step,                  // llvm.instrprof.increment.step
+    instrprof_value_profile,                   // llvm.instrprof.value.profile
+    invariant_end,                             // llvm.invariant.end
+    invariant_start,                           // llvm.invariant.start
+    launder_invariant_group,                   // llvm.launder.invariant.group
+    lifetime_end,                              // llvm.lifetime.end
+    lifetime_start,                            // llvm.lifetime.start
+    load_relative,                             // llvm.load.relative
+    localaddress,                              // llvm.localaddress
+    localescape,                               // llvm.localescape
+    localrecover,                              // llvm.localrecover
+    log,                                       // llvm.log
+    log10,                                     // llvm.log10
+    log2,                                      // llvm.log2
+    longjmp,                                   // llvm.longjmp
+    masked_compressstore,                      // llvm.masked.compressstore
+    masked_expandload,                         // llvm.masked.expandload
+    masked_gather,                             // llvm.masked.gather
+    masked_load,                               // llvm.masked.load
+    masked_scatter,                            // llvm.masked.scatter
+    masked_store,                              // llvm.masked.store
+    maxnum,                                    // llvm.maxnum
+    memcpy,                                    // llvm.memcpy
+    memcpy_element_unordered_atomic,           // llvm.memcpy.element.unordered.atomic
+    memmove,                                   // llvm.memmove
+    memmove_element_unordered_atomic,          // llvm.memmove.element.unordered.atomic
+    memset,                                    // llvm.memset
+    memset_element_unordered_atomic,           // llvm.memset.element.unordered.atomic
+    minnum,                                    // llvm.minnum
+    nearbyint,                                 // llvm.nearbyint
+    objectsize,                                // llvm.objectsize
+    pcmarker,                                  // llvm.pcmarker
+    pow,                                       // llvm.pow
+    powi,                                      // llvm.powi
+    prefetch,                                  // llvm.prefetch
+    ptr_annotation,                            // llvm.ptr.annotation
+    read_register,                             // llvm.read_register
+    readcyclecounter,                          // llvm.readcyclecounter
+    returnaddress,                             // llvm.returnaddress
+    rint,                                      // llvm.rint
+    round,                                     // llvm.round
+    sadd_with_overflow,                        // llvm.sadd.with.overflow
+    setjmp,                                    // llvm.setjmp
+    sideeffect,                                // llvm.sideeffect
+    siglongjmp,                                // llvm.siglongjmp
+    sigsetjmp,                                 // llvm.sigsetjmp
+    sin,                                       // llvm.sin
+    smul_with_overflow,                        // llvm.smul.with.overflow
+    sqrt,                                      // llvm.sqrt
+    ssa_copy,                                  // llvm.ssa.copy
+    ssub_with_overflow,                        // llvm.ssub.with.overflow
+    stackguard,                                // llvm.stackguard
+    stackprotector,                            // llvm.stackprotector
+    stackrestore,                              // llvm.stackrestore
+    stacksave,                                 // llvm.stacksave
+    strip_invariant_group,                     // llvm.strip.invariant.group
+    thread_pointer,                            // llvm.thread.pointer
+    trap,                                      // llvm.trap
+    trunc,                                     // llvm.trunc
+    type_checked_load,                         // llvm.type.checked.load
+    type_test,                                 // llvm.type.test
+    uadd_with_overflow,                        // llvm.uadd.with.overflow
+    umul_with_overflow,                        // llvm.umul.with.overflow
+    usub_with_overflow,                        // llvm.usub.with.overflow
+    vacopy,                                    // llvm.va_copy
+    vaend,                                     // llvm.va_end
+    vastart,                                   // llvm.va_start
+    var_annotation,                            // llvm.var.annotation
+    write_register,                            // llvm.write_register
+    xray_customevent,                          // llvm.xray.customevent
+    xray_typedevent,                           // llvm.xray.typedevent
+    aarch64_clrex,                             // llvm.aarch64.clrex
+    aarch64_crc32b,                            // llvm.aarch64.crc32b
+    aarch64_crc32cb,                           // llvm.aarch64.crc32cb
+    aarch64_crc32ch,                           // llvm.aarch64.crc32ch
+    aarch64_crc32cw,                           // llvm.aarch64.crc32cw
+    aarch64_crc32cx,                           // llvm.aarch64.crc32cx
+    aarch64_crc32h,                            // llvm.aarch64.crc32h
+    aarch64_crc32w,                            // llvm.aarch64.crc32w
+    aarch64_crc32x,                            // llvm.aarch64.crc32x
+    aarch64_crypto_aesd,                       // llvm.aarch64.crypto.aesd
+    aarch64_crypto_aese,                       // llvm.aarch64.crypto.aese
+    aarch64_crypto_aesimc,                     // llvm.aarch64.crypto.aesimc
+    aarch64_crypto_aesmc,                      // llvm.aarch64.crypto.aesmc
+    aarch64_crypto_sha1c,                      // llvm.aarch64.crypto.sha1c
+    aarch64_crypto_sha1h,                      // llvm.aarch64.crypto.sha1h
+    aarch64_crypto_sha1m,                      // llvm.aarch64.crypto.sha1m
+    aarch64_crypto_sha1p,                      // llvm.aarch64.crypto.sha1p
+    aarch64_crypto_sha1su0,                    // llvm.aarch64.crypto.sha1su0
+    aarch64_crypto_sha1su1,                    // llvm.aarch64.crypto.sha1su1
+    aarch64_crypto_sha256h,                    // llvm.aarch64.crypto.sha256h
+    aarch64_crypto_sha256h2,                   // llvm.aarch64.crypto.sha256h2
+    aarch64_crypto_sha256su0,                  // llvm.aarch64.crypto.sha256su0
+    aarch64_crypto_sha256su1,                  // llvm.aarch64.crypto.sha256su1
+    aarch64_dmb,                               // llvm.aarch64.dmb
+    aarch64_dsb,                               // llvm.aarch64.dsb
+    aarch64_get_fpcr,                          // llvm.aarch64.get.fpcr
+    aarch64_hint,                              // llvm.aarch64.hint
+    aarch64_isb,                               // llvm.aarch64.isb
+    aarch64_ldaxp,                             // llvm.aarch64.ldaxp
+    aarch64_ldaxr,                             // llvm.aarch64.ldaxr
+    aarch64_ldxp,                              // llvm.aarch64.ldxp
+    aarch64_ldxr,                              // llvm.aarch64.ldxr
+    aarch64_neon_abs,                          // llvm.aarch64.neon.abs
+    aarch64_neon_addhn,                        // llvm.aarch64.neon.addhn
+    aarch64_neon_addp,                         // llvm.aarch64.neon.addp
+    aarch64_neon_cls,                          // llvm.aarch64.neon.cls
+    aarch64_neon_fabd,                         // llvm.aarch64.neon.fabd
+    aarch64_neon_facge,                        // llvm.aarch64.neon.facge
+    aarch64_neon_facgt,                        // llvm.aarch64.neon.facgt
+    aarch64_neon_faddv,                        // llvm.aarch64.neon.faddv
+    aarch64_neon_fcvtas,                       // llvm.aarch64.neon.fcvtas
+    aarch64_neon_fcvtau,                       // llvm.aarch64.neon.fcvtau
+    aarch64_neon_fcvtms,                       // llvm.aarch64.neon.fcvtms
+    aarch64_neon_fcvtmu,                       // llvm.aarch64.neon.fcvtmu
+    aarch64_neon_fcvtns,                       // llvm.aarch64.neon.fcvtns
+    aarch64_neon_fcvtnu,                       // llvm.aarch64.neon.fcvtnu
+    aarch64_neon_fcvtps,                       // llvm.aarch64.neon.fcvtps
+    aarch64_neon_fcvtpu,                       // llvm.aarch64.neon.fcvtpu
+    aarch64_neon_fcvtxn,                       // llvm.aarch64.neon.fcvtxn
+    aarch64_neon_fcvtzs,                       // llvm.aarch64.neon.fcvtzs
+    aarch64_neon_fcvtzu,                       // llvm.aarch64.neon.fcvtzu
+    aarch64_neon_fmax,                         // llvm.aarch64.neon.fmax
+    aarch64_neon_fmaxnm,                       // llvm.aarch64.neon.fmaxnm
+    aarch64_neon_fmaxnmp,                      // llvm.aarch64.neon.fmaxnmp
+    aarch64_neon_fmaxnmv,                      // llvm.aarch64.neon.fmaxnmv
+    aarch64_neon_fmaxp,                        // llvm.aarch64.neon.fmaxp
+    aarch64_neon_fmaxv,                        // llvm.aarch64.neon.fmaxv
+    aarch64_neon_fmin,                         // llvm.aarch64.neon.fmin
+    aarch64_neon_fminnm,                       // llvm.aarch64.neon.fminnm
+    aarch64_neon_fminnmp,                      // llvm.aarch64.neon.fminnmp
+    aarch64_neon_fminnmv,                      // llvm.aarch64.neon.fminnmv
+    aarch64_neon_fminp,                        // llvm.aarch64.neon.fminp
+    aarch64_neon_fminv,                        // llvm.aarch64.neon.fminv
+    aarch64_neon_fmulx,                        // llvm.aarch64.neon.fmulx
+    aarch64_neon_frecpe,                       // llvm.aarch64.neon.frecpe
+    aarch64_neon_frecps,                       // llvm.aarch64.neon.frecps
+    aarch64_neon_frecpx,                       // llvm.aarch64.neon.frecpx
+    aarch64_neon_frintn,                       // llvm.aarch64.neon.frintn
+    aarch64_neon_frsqrte,                      // llvm.aarch64.neon.frsqrte
+    aarch64_neon_frsqrts,                      // llvm.aarch64.neon.frsqrts
+    aarch64_neon_ld1x2,                        // llvm.aarch64.neon.ld1x2
+    aarch64_neon_ld1x3,                        // llvm.aarch64.neon.ld1x3
+    aarch64_neon_ld1x4,                        // llvm.aarch64.neon.ld1x4
+    aarch64_neon_ld2,                          // llvm.aarch64.neon.ld2
+    aarch64_neon_ld2lane,                      // llvm.aarch64.neon.ld2lane
+    aarch64_neon_ld2r,                         // llvm.aarch64.neon.ld2r
+    aarch64_neon_ld3,                          // llvm.aarch64.neon.ld3
+    aarch64_neon_ld3lane,                      // llvm.aarch64.neon.ld3lane
+    aarch64_neon_ld3r,                         // llvm.aarch64.neon.ld3r
+    aarch64_neon_ld4,                          // llvm.aarch64.neon.ld4
+    aarch64_neon_ld4lane,                      // llvm.aarch64.neon.ld4lane
+    aarch64_neon_ld4r,                         // llvm.aarch64.neon.ld4r
+    aarch64_neon_pmul,                         // llvm.aarch64.neon.pmul
+    aarch64_neon_pmull,                        // llvm.aarch64.neon.pmull
+    aarch64_neon_pmull64,                      // llvm.aarch64.neon.pmull64
+    aarch64_neon_raddhn,                       // llvm.aarch64.neon.raddhn
+    aarch64_neon_rbit,                         // llvm.aarch64.neon.rbit
+    aarch64_neon_rshrn,                        // llvm.aarch64.neon.rshrn
+    aarch64_neon_rsubhn,                       // llvm.aarch64.neon.rsubhn
+    aarch64_neon_sabd,                         // llvm.aarch64.neon.sabd
+    aarch64_neon_saddlp,                       // llvm.aarch64.neon.saddlp
+    aarch64_neon_saddlv,                       // llvm.aarch64.neon.saddlv
+    aarch64_neon_saddv,                        // llvm.aarch64.neon.saddv
+    aarch64_neon_scalar_sqxtn,                 // llvm.aarch64.neon.scalar.sqxtn
+    aarch64_neon_scalar_sqxtun,                // llvm.aarch64.neon.scalar.sqxtun
+    aarch64_neon_scalar_uqxtn,                 // llvm.aarch64.neon.scalar.uqxtn
+    aarch64_neon_sdot,                         // llvm.aarch64.neon.sdot
+    aarch64_neon_shadd,                        // llvm.aarch64.neon.shadd
+    aarch64_neon_shll,                         // llvm.aarch64.neon.shll
+    aarch64_neon_shsub,                        // llvm.aarch64.neon.shsub
+    aarch64_neon_smax,                         // llvm.aarch64.neon.smax
+    aarch64_neon_smaxp,                        // llvm.aarch64.neon.smaxp
+    aarch64_neon_smaxv,                        // llvm.aarch64.neon.smaxv
+    aarch64_neon_smin,                         // llvm.aarch64.neon.smin
+    aarch64_neon_sminp,                        // llvm.aarch64.neon.sminp
+    aarch64_neon_sminv,                        // llvm.aarch64.neon.sminv
+    aarch64_neon_smull,                        // llvm.aarch64.neon.smull
+    aarch64_neon_sqabs,                        // llvm.aarch64.neon.sqabs
+    aarch64_neon_sqadd,                        // llvm.aarch64.neon.sqadd
+    aarch64_neon_sqdmulh,                      // llvm.aarch64.neon.sqdmulh
+    aarch64_neon_sqdmull,                      // llvm.aarch64.neon.sqdmull
+    aarch64_neon_sqdmulls_scalar,              // llvm.aarch64.neon.sqdmulls.scalar
+    aarch64_neon_sqneg,                        // llvm.aarch64.neon.sqneg
+    aarch64_neon_sqrdmulh,                     // llvm.aarch64.neon.sqrdmulh
+    aarch64_neon_sqrshl,                       // llvm.aarch64.neon.sqrshl
+    aarch64_neon_sqrshrn,                      // llvm.aarch64.neon.sqrshrn
+    aarch64_neon_sqrshrun,                     // llvm.aarch64.neon.sqrshrun
+    aarch64_neon_sqshl,                        // llvm.aarch64.neon.sqshl
+    aarch64_neon_sqshlu,                       // llvm.aarch64.neon.sqshlu
+    aarch64_neon_sqshrn,                       // llvm.aarch64.neon.sqshrn
+    aarch64_neon_sqshrun,                      // llvm.aarch64.neon.sqshrun
+    aarch64_neon_sqsub,                        // llvm.aarch64.neon.sqsub
+    aarch64_neon_sqxtn,                        // llvm.aarch64.neon.sqxtn
+    aarch64_neon_sqxtun,                       // llvm.aarch64.neon.sqxtun
+    aarch64_neon_srhadd,                       // llvm.aarch64.neon.srhadd
+    aarch64_neon_srshl,                        // llvm.aarch64.neon.srshl
+    aarch64_neon_sshl,                         // llvm.aarch64.neon.sshl
+    aarch64_neon_sshll,                        // llvm.aarch64.neon.sshll
+    aarch64_neon_st1x2,                        // llvm.aarch64.neon.st1x2
+    aarch64_neon_st1x3,                        // llvm.aarch64.neon.st1x3
+    aarch64_neon_st1x4,                        // llvm.aarch64.neon.st1x4
+    aarch64_neon_st2,                          // llvm.aarch64.neon.st2
+    aarch64_neon_st2lane,                      // llvm.aarch64.neon.st2lane
+    aarch64_neon_st3,                          // llvm.aarch64.neon.st3
+    aarch64_neon_st3lane,                      // llvm.aarch64.neon.st3lane
+    aarch64_neon_st4,                          // llvm.aarch64.neon.st4
+    aarch64_neon_st4lane,                      // llvm.aarch64.neon.st4lane
+    aarch64_neon_subhn,                        // llvm.aarch64.neon.subhn
+    aarch64_neon_suqadd,                       // llvm.aarch64.neon.suqadd
+    aarch64_neon_tbl1,                         // llvm.aarch64.neon.tbl1
+    aarch64_neon_tbl2,                         // llvm.aarch64.neon.tbl2
+    aarch64_neon_tbl3,                         // llvm.aarch64.neon.tbl3
+    aarch64_neon_tbl4,                         // llvm.aarch64.neon.tbl4
+    aarch64_neon_tbx1,                         // llvm.aarch64.neon.tbx1
+    aarch64_neon_tbx2,                         // llvm.aarch64.neon.tbx2
+    aarch64_neon_tbx3,                         // llvm.aarch64.neon.tbx3
+    aarch64_neon_tbx4,                         // llvm.aarch64.neon.tbx4
+    aarch64_neon_uabd,                         // llvm.aarch64.neon.uabd
+    aarch64_neon_uaddlp,                       // llvm.aarch64.neon.uaddlp
+    aarch64_neon_uaddlv,                       // llvm.aarch64.neon.uaddlv
+    aarch64_neon_uaddv,                        // llvm.aarch64.neon.uaddv
+    aarch64_neon_udot,                         // llvm.aarch64.neon.udot
+    aarch64_neon_uhadd,                        // llvm.aarch64.neon.uhadd
+    aarch64_neon_uhsub,                        // llvm.aarch64.neon.uhsub
+    aarch64_neon_umax,                         // llvm.aarch64.neon.umax
+    aarch64_neon_umaxp,                        // llvm.aarch64.neon.umaxp
+    aarch64_neon_umaxv,                        // llvm.aarch64.neon.umaxv
+    aarch64_neon_umin,                         // llvm.aarch64.neon.umin
+    aarch64_neon_uminp,                        // llvm.aarch64.neon.uminp
+    aarch64_neon_uminv,                        // llvm.aarch64.neon.uminv
+    aarch64_neon_umull,                        // llvm.aarch64.neon.umull
+    aarch64_neon_uqadd,                        // llvm.aarch64.neon.uqadd
+    aarch64_neon_uqrshl,                       // llvm.aarch64.neon.uqrshl
+    aarch64_neon_uqrshrn,                      // llvm.aarch64.neon.uqrshrn
+    aarch64_neon_uqshl,                        // llvm.aarch64.neon.uqshl
+    aarch64_neon_uqshrn,                       // llvm.aarch64.neon.uqshrn
+    aarch64_neon_uqsub,                        // llvm.aarch64.neon.uqsub
+    aarch64_neon_uqxtn,                        // llvm.aarch64.neon.uqxtn
+    aarch64_neon_urecpe,                       // llvm.aarch64.neon.urecpe
+    aarch64_neon_urhadd,                       // llvm.aarch64.neon.urhadd
+    aarch64_neon_urshl,                        // llvm.aarch64.neon.urshl
+    aarch64_neon_ursqrte,                      // llvm.aarch64.neon.ursqrte
+    aarch64_neon_ushl,                         // llvm.aarch64.neon.ushl
+    aarch64_neon_ushll,                        // llvm.aarch64.neon.ushll
+    aarch64_neon_usqadd,                       // llvm.aarch64.neon.usqadd
+    aarch64_neon_vcopy_lane,                   // llvm.aarch64.neon.vcopy.lane
+    aarch64_neon_vcvtfp2fxs,                   // llvm.aarch64.neon.vcvtfp2fxs
+    aarch64_neon_vcvtfp2fxu,                   // llvm.aarch64.neon.vcvtfp2fxu
+    aarch64_neon_vcvtfp2hf,                    // llvm.aarch64.neon.vcvtfp2hf
+    aarch64_neon_vcvtfxs2fp,                   // llvm.aarch64.neon.vcvtfxs2fp
+    aarch64_neon_vcvtfxu2fp,                   // llvm.aarch64.neon.vcvtfxu2fp
+    aarch64_neon_vcvthf2fp,                    // llvm.aarch64.neon.vcvthf2fp
+    aarch64_neon_vsli,                         // llvm.aarch64.neon.vsli
+    aarch64_neon_vsri,                         // llvm.aarch64.neon.vsri
+    aarch64_sdiv,                              // llvm.aarch64.sdiv
+    aarch64_sisd_fabd,                         // llvm.aarch64.sisd.fabd
+    aarch64_sisd_fcvtxn,                       // llvm.aarch64.sisd.fcvtxn
+    aarch64_stlxp,                             // llvm.aarch64.stlxp
+    aarch64_stlxr,                             // llvm.aarch64.stlxr
+    aarch64_stxp,                              // llvm.aarch64.stxp
+    aarch64_stxr,                              // llvm.aarch64.stxr
+    aarch64_udiv,                              // llvm.aarch64.udiv
+    amdgcn_alignbit,                           // llvm.amdgcn.alignbit
+    amdgcn_alignbyte,                          // llvm.amdgcn.alignbyte
+    amdgcn_atomic_dec,                         // llvm.amdgcn.atomic.dec
+    amdgcn_atomic_inc,                         // llvm.amdgcn.atomic.inc
+    amdgcn_break,                              // llvm.amdgcn.break
+    amdgcn_buffer_atomic_add,                  // llvm.amdgcn.buffer.atomic.add
+    amdgcn_buffer_atomic_and,                  // llvm.amdgcn.buffer.atomic.and
+    amdgcn_buffer_atomic_cmpswap,              // llvm.amdgcn.buffer.atomic.cmpswap
+    amdgcn_buffer_atomic_or,                   // llvm.amdgcn.buffer.atomic.or
+    amdgcn_buffer_atomic_smax,                 // llvm.amdgcn.buffer.atomic.smax
+    amdgcn_buffer_atomic_smin,                 // llvm.amdgcn.buffer.atomic.smin
+    amdgcn_buffer_atomic_sub,                  // llvm.amdgcn.buffer.atomic.sub
+    amdgcn_buffer_atomic_swap,                 // llvm.amdgcn.buffer.atomic.swap
+    amdgcn_buffer_atomic_umax,                 // llvm.amdgcn.buffer.atomic.umax
+    amdgcn_buffer_atomic_umin,                 // llvm.amdgcn.buffer.atomic.umin
+    amdgcn_buffer_atomic_xor,                  // llvm.amdgcn.buffer.atomic.xor
+    amdgcn_buffer_load,                        // llvm.amdgcn.buffer.load
+    amdgcn_buffer_load_format,                 // llvm.amdgcn.buffer.load.format
+    amdgcn_buffer_store,                       // llvm.amdgcn.buffer.store
+    amdgcn_buffer_store_format,                // llvm.amdgcn.buffer.store.format
+    amdgcn_buffer_wbinvl1,                     // llvm.amdgcn.buffer.wbinvl1
+    amdgcn_buffer_wbinvl1_sc,                  // llvm.amdgcn.buffer.wbinvl1.sc
+    amdgcn_buffer_wbinvl1_vol,                 // llvm.amdgcn.buffer.wbinvl1.vol
+    amdgcn_class,                              // llvm.amdgcn.class
+    amdgcn_cos,                                // llvm.amdgcn.cos
+    amdgcn_cubeid,                             // llvm.amdgcn.cubeid
+    amdgcn_cubema,                             // llvm.amdgcn.cubema
+    amdgcn_cubesc,                             // llvm.amdgcn.cubesc
+    amdgcn_cubetc,                             // llvm.amdgcn.cubetc
+    amdgcn_cvt_pk_i16,                         // llvm.amdgcn.cvt.pk.i16
+    amdgcn_cvt_pk_u16,                         // llvm.amdgcn.cvt.pk.u16
+    amdgcn_cvt_pk_u8_f32,                      // llvm.amdgcn.cvt.pk.u8.f32
+    amdgcn_cvt_pknorm_i16,                     // llvm.amdgcn.cvt.pknorm.i16
+    amdgcn_cvt_pknorm_u16,                     // llvm.amdgcn.cvt.pknorm.u16
+    amdgcn_cvt_pkrtz,                          // llvm.amdgcn.cvt.pkrtz
+    amdgcn_dispatch_id,                        // llvm.amdgcn.dispatch.id
+    amdgcn_dispatch_ptr,                       // llvm.amdgcn.dispatch.ptr
+    amdgcn_div_fixup,                          // llvm.amdgcn.div.fixup
+    amdgcn_div_fmas,                           // llvm.amdgcn.div.fmas
+    amdgcn_div_scale,                          // llvm.amdgcn.div.scale
+    amdgcn_ds_bpermute,                        // llvm.amdgcn.ds.bpermute
+    amdgcn_ds_fadd,                            // llvm.amdgcn.ds.fadd
+    amdgcn_ds_fmax,                            // llvm.amdgcn.ds.fmax
+    amdgcn_ds_fmin,                            // llvm.amdgcn.ds.fmin
+    amdgcn_ds_permute,                         // llvm.amdgcn.ds.permute
+    amdgcn_ds_swizzle,                         // llvm.amdgcn.ds.swizzle
+    amdgcn_else,                               // llvm.amdgcn.else
+    amdgcn_else_break,                         // llvm.amdgcn.else.break
+    amdgcn_end_cf,                             // llvm.amdgcn.end.cf
+    amdgcn_exp,                                // llvm.amdgcn.exp
+    amdgcn_exp_compr,                          // llvm.amdgcn.exp.compr
+    amdgcn_fcmp,                               // llvm.amdgcn.fcmp
+    amdgcn_fdiv_fast,                          // llvm.amdgcn.fdiv.fast
+    amdgcn_fdot2,                              // llvm.amdgcn.fdot2
+    amdgcn_fmad_ftz,                           // llvm.amdgcn.fmad.ftz
+    amdgcn_fmed3,                              // llvm.amdgcn.fmed3
+    amdgcn_fmul_legacy,                        // llvm.amdgcn.fmul.legacy
+    amdgcn_fract,                              // llvm.amdgcn.fract
+    amdgcn_frexp_exp,                          // llvm.amdgcn.frexp.exp
+    amdgcn_frexp_mant,                         // llvm.amdgcn.frexp.mant
+    amdgcn_groupstaticsize,                    // llvm.amdgcn.groupstaticsize
+    amdgcn_icmp,                               // llvm.amdgcn.icmp
+    amdgcn_if,                                 // llvm.amdgcn.if
+    amdgcn_if_break,                           // llvm.amdgcn.if.break
+    amdgcn_image_atomic_add_1d,                // llvm.amdgcn.image.atomic.add.1d
+    amdgcn_image_atomic_add_1darray,           // llvm.amdgcn.image.atomic.add.1darray
+    amdgcn_image_atomic_add_2d,                // llvm.amdgcn.image.atomic.add.2d
+    amdgcn_image_atomic_add_2darray,           // llvm.amdgcn.image.atomic.add.2darray
+    amdgcn_image_atomic_add_2darraymsaa,       // llvm.amdgcn.image.atomic.add.2darraymsaa
+    amdgcn_image_atomic_add_2dmsaa,            // llvm.amdgcn.image.atomic.add.2dmsaa
+    amdgcn_image_atomic_add_3d,                // llvm.amdgcn.image.atomic.add.3d
+    amdgcn_image_atomic_add_cube,              // llvm.amdgcn.image.atomic.add.cube
+    amdgcn_image_atomic_and_1d,                // llvm.amdgcn.image.atomic.and.1d
+    amdgcn_image_atomic_and_1darray,           // llvm.amdgcn.image.atomic.and.1darray
+    amdgcn_image_atomic_and_2d,                // llvm.amdgcn.image.atomic.and.2d
+    amdgcn_image_atomic_and_2darray,           // llvm.amdgcn.image.atomic.and.2darray
+    amdgcn_image_atomic_and_2darraymsaa,       // llvm.amdgcn.image.atomic.and.2darraymsaa
+    amdgcn_image_atomic_and_2dmsaa,            // llvm.amdgcn.image.atomic.and.2dmsaa
+    amdgcn_image_atomic_and_3d,                // llvm.amdgcn.image.atomic.and.3d
+    amdgcn_image_atomic_and_cube,              // llvm.amdgcn.image.atomic.and.cube
+    amdgcn_image_atomic_cmpswap_1d,            // llvm.amdgcn.image.atomic.cmpswap.1d
+    amdgcn_image_atomic_cmpswap_1darray,       // llvm.amdgcn.image.atomic.cmpswap.1darray
+    amdgcn_image_atomic_cmpswap_2d,            // llvm.amdgcn.image.atomic.cmpswap.2d
+    amdgcn_image_atomic_cmpswap_2darray,       // llvm.amdgcn.image.atomic.cmpswap.2darray
+    amdgcn_image_atomic_cmpswap_2darraymsaa,   // llvm.amdgcn.image.atomic.cmpswap.2darraymsaa
+    amdgcn_image_atomic_cmpswap_2dmsaa,        // llvm.amdgcn.image.atomic.cmpswap.2dmsaa
+    amdgcn_image_atomic_cmpswap_3d,            // llvm.amdgcn.image.atomic.cmpswap.3d
+    amdgcn_image_atomic_cmpswap_cube,          // llvm.amdgcn.image.atomic.cmpswap.cube
+    amdgcn_image_atomic_dec_1d,                // llvm.amdgcn.image.atomic.dec.1d
+    amdgcn_image_atomic_dec_1darray,           // llvm.amdgcn.image.atomic.dec.1darray
+    amdgcn_image_atomic_dec_2d,                // llvm.amdgcn.image.atomic.dec.2d
+    amdgcn_image_atomic_dec_2darray,           // llvm.amdgcn.image.atomic.dec.2darray
+    amdgcn_image_atomic_dec_2darraymsaa,       // llvm.amdgcn.image.atomic.dec.2darraymsaa
+    amdgcn_image_atomic_dec_2dmsaa,            // llvm.amdgcn.image.atomic.dec.2dmsaa
+    amdgcn_image_atomic_dec_3d,                // llvm.amdgcn.image.atomic.dec.3d
+    amdgcn_image_atomic_dec_cube,              // llvm.amdgcn.image.atomic.dec.cube
+    amdgcn_image_atomic_inc_1d,                // llvm.amdgcn.image.atomic.inc.1d
+    amdgcn_image_atomic_inc_1darray,           // llvm.amdgcn.image.atomic.inc.1darray
+    amdgcn_image_atomic_inc_2d,                // llvm.amdgcn.image.atomic.inc.2d
+    amdgcn_image_atomic_inc_2darray,           // llvm.amdgcn.image.atomic.inc.2darray
+    amdgcn_image_atomic_inc_2darraymsaa,       // llvm.amdgcn.image.atomic.inc.2darraymsaa
+    amdgcn_image_atomic_inc_2dmsaa,            // llvm.amdgcn.image.atomic.inc.2dmsaa
+    amdgcn_image_atomic_inc_3d,                // llvm.amdgcn.image.atomic.inc.3d
+    amdgcn_image_atomic_inc_cube,              // llvm.amdgcn.image.atomic.inc.cube
+    amdgcn_image_atomic_or_1d,                 // llvm.amdgcn.image.atomic.or.1d
+    amdgcn_image_atomic_or_1darray,            // llvm.amdgcn.image.atomic.or.1darray
+    amdgcn_image_atomic_or_2d,                 // llvm.amdgcn.image.atomic.or.2d
+    amdgcn_image_atomic_or_2darray,            // llvm.amdgcn.image.atomic.or.2darray
+    amdgcn_image_atomic_or_2darraymsaa,        // llvm.amdgcn.image.atomic.or.2darraymsaa
+    amdgcn_image_atomic_or_2dmsaa,             // llvm.amdgcn.image.atomic.or.2dmsaa
+    amdgcn_image_atomic_or_3d,                 // llvm.amdgcn.image.atomic.or.3d
+    amdgcn_image_atomic_or_cube,               // llvm.amdgcn.image.atomic.or.cube
+    amdgcn_image_atomic_smax_1d,               // llvm.amdgcn.image.atomic.smax.1d
+    amdgcn_image_atomic_smax_1darray,          // llvm.amdgcn.image.atomic.smax.1darray
+    amdgcn_image_atomic_smax_2d,               // llvm.amdgcn.image.atomic.smax.2d
+    amdgcn_image_atomic_smax_2darray,          // llvm.amdgcn.image.atomic.smax.2darray
+    amdgcn_image_atomic_smax_2darraymsaa,      // llvm.amdgcn.image.atomic.smax.2darraymsaa
+    amdgcn_image_atomic_smax_2dmsaa,           // llvm.amdgcn.image.atomic.smax.2dmsaa
+    amdgcn_image_atomic_smax_3d,               // llvm.amdgcn.image.atomic.smax.3d
+    amdgcn_image_atomic_smax_cube,             // llvm.amdgcn.image.atomic.smax.cube
+    amdgcn_image_atomic_smin_1d,               // llvm.amdgcn.image.atomic.smin.1d
+    amdgcn_image_atomic_smin_1darray,          // llvm.amdgcn.image.atomic.smin.1darray
+    amdgcn_image_atomic_smin_2d,               // llvm.amdgcn.image.atomic.smin.2d
+    amdgcn_image_atomic_smin_2darray,          // llvm.amdgcn.image.atomic.smin.2darray
+    amdgcn_image_atomic_smin_2darraymsaa,      // llvm.amdgcn.image.atomic.smin.2darraymsaa
+    amdgcn_image_atomic_smin_2dmsaa,           // llvm.amdgcn.image.atomic.smin.2dmsaa
+    amdgcn_image_atomic_smin_3d,               // llvm.amdgcn.image.atomic.smin.3d
+    amdgcn_image_atomic_smin_cube,             // llvm.amdgcn.image.atomic.smin.cube
+    amdgcn_image_atomic_sub_1d,                // llvm.amdgcn.image.atomic.sub.1d
+    amdgcn_image_atomic_sub_1darray,           // llvm.amdgcn.image.atomic.sub.1darray
+    amdgcn_image_atomic_sub_2d,                // llvm.amdgcn.image.atomic.sub.2d
+    amdgcn_image_atomic_sub_2darray,           // llvm.amdgcn.image.atomic.sub.2darray
+    amdgcn_image_atomic_sub_2darraymsaa,       // llvm.amdgcn.image.atomic.sub.2darraymsaa
+    amdgcn_image_atomic_sub_2dmsaa,            // llvm.amdgcn.image.atomic.sub.2dmsaa
+    amdgcn_image_atomic_sub_3d,                // llvm.amdgcn.image.atomic.sub.3d
+    amdgcn_image_atomic_sub_cube,              // llvm.amdgcn.image.atomic.sub.cube
+    amdgcn_image_atomic_swap_1d,               // llvm.amdgcn.image.atomic.swap.1d
+    amdgcn_image_atomic_swap_1darray,          // llvm.amdgcn.image.atomic.swap.1darray
+    amdgcn_image_atomic_swap_2d,               // llvm.amdgcn.image.atomic.swap.2d
+    amdgcn_image_atomic_swap_2darray,          // llvm.amdgcn.image.atomic.swap.2darray
+    amdgcn_image_atomic_swap_2darraymsaa,      // llvm.amdgcn.image.atomic.swap.2darraymsaa
+    amdgcn_image_atomic_swap_2dmsaa,           // llvm.amdgcn.image.atomic.swap.2dmsaa
+    amdgcn_image_atomic_swap_3d,               // llvm.amdgcn.image.atomic.swap.3d
+    amdgcn_image_atomic_swap_cube,             // llvm.amdgcn.image.atomic.swap.cube
+    amdgcn_image_atomic_umax_1d,               // llvm.amdgcn.image.atomic.umax.1d
+    amdgcn_image_atomic_umax_1darray,          // llvm.amdgcn.image.atomic.umax.1darray
+    amdgcn_image_atomic_umax_2d,               // llvm.amdgcn.image.atomic.umax.2d
+    amdgcn_image_atomic_umax_2darray,          // llvm.amdgcn.image.atomic.umax.2darray
+    amdgcn_image_atomic_umax_2darraymsaa,      // llvm.amdgcn.image.atomic.umax.2darraymsaa
+    amdgcn_image_atomic_umax_2dmsaa,           // llvm.amdgcn.image.atomic.umax.2dmsaa
+    amdgcn_image_atomic_umax_3d,               // llvm.amdgcn.image.atomic.umax.3d
+    amdgcn_image_atomic_umax_cube,             // llvm.amdgcn.image.atomic.umax.cube
+    amdgcn_image_atomic_umin_1d,               // llvm.amdgcn.image.atomic.umin.1d
+    amdgcn_image_atomic_umin_1darray,          // llvm.amdgcn.image.atomic.umin.1darray
+    amdgcn_image_atomic_umin_2d,               // llvm.amdgcn.image.atomic.umin.2d
+    amdgcn_image_atomic_umin_2darray,          // llvm.amdgcn.image.atomic.umin.2darray
+    amdgcn_image_atomic_umin_2darraymsaa,      // llvm.amdgcn.image.atomic.umin.2darraymsaa
+    amdgcn_image_atomic_umin_2dmsaa,           // llvm.amdgcn.image.atomic.umin.2dmsaa
+    amdgcn_image_atomic_umin_3d,               // llvm.amdgcn.image.atomic.umin.3d
+    amdgcn_image_atomic_umin_cube,             // llvm.amdgcn.image.atomic.umin.cube
+    amdgcn_image_atomic_xor_1d,                // llvm.amdgcn.image.atomic.xor.1d
+    amdgcn_image_atomic_xor_1darray,           // llvm.amdgcn.image.atomic.xor.1darray
+    amdgcn_image_atomic_xor_2d,                // llvm.amdgcn.image.atomic.xor.2d
+    amdgcn_image_atomic_xor_2darray,           // llvm.amdgcn.image.atomic.xor.2darray
+    amdgcn_image_atomic_xor_2darraymsaa,       // llvm.amdgcn.image.atomic.xor.2darraymsaa
+    amdgcn_image_atomic_xor_2dmsaa,            // llvm.amdgcn.image.atomic.xor.2dmsaa
+    amdgcn_image_atomic_xor_3d,                // llvm.amdgcn.image.atomic.xor.3d
+    amdgcn_image_atomic_xor_cube,              // llvm.amdgcn.image.atomic.xor.cube
+    amdgcn_image_gather4_2d,                   // llvm.amdgcn.image.gather4.2d
+    amdgcn_image_gather4_2darray,              // llvm.amdgcn.image.gather4.2darray
+    amdgcn_image_gather4_b_2d,                 // llvm.amdgcn.image.gather4.b.2d
+    amdgcn_image_gather4_b_2darray,            // llvm.amdgcn.image.gather4.b.2darray
+    amdgcn_image_gather4_b_cl_2d,              // llvm.amdgcn.image.gather4.b.cl.2d
+    amdgcn_image_gather4_b_cl_2darray,         // llvm.amdgcn.image.gather4.b.cl.2darray
+    amdgcn_image_gather4_b_cl_cube,            // llvm.amdgcn.image.gather4.b.cl.cube
+    amdgcn_image_gather4_b_cl_o_2d,            // llvm.amdgcn.image.gather4.b.cl.o.2d
+    amdgcn_image_gather4_b_cl_o_2darray,       // llvm.amdgcn.image.gather4.b.cl.o.2darray
+    amdgcn_image_gather4_b_cl_o_cube,          // llvm.amdgcn.image.gather4.b.cl.o.cube
+    amdgcn_image_gather4_b_cube,               // llvm.amdgcn.image.gather4.b.cube
+    amdgcn_image_gather4_b_o_2d,               // llvm.amdgcn.image.gather4.b.o.2d
+    amdgcn_image_gather4_b_o_2darray,          // llvm.amdgcn.image.gather4.b.o.2darray
+    amdgcn_image_gather4_b_o_cube,             // llvm.amdgcn.image.gather4.b.o.cube
+    amdgcn_image_gather4_c_2d,                 // llvm.amdgcn.image.gather4.c.2d
+    amdgcn_image_gather4_c_2darray,            // llvm.amdgcn.image.gather4.c.2darray
+    amdgcn_image_gather4_c_b_2d,               // llvm.amdgcn.image.gather4.c.b.2d
+    amdgcn_image_gather4_c_b_2darray,          // llvm.amdgcn.image.gather4.c.b.2darray
+    amdgcn_image_gather4_c_b_cl_2d,            // llvm.amdgcn.image.gather4.c.b.cl.2d
+    amdgcn_image_gather4_c_b_cl_2darray,       // llvm.amdgcn.image.gather4.c.b.cl.2darray
+    amdgcn_image_gather4_c_b_cl_cube,          // llvm.amdgcn.image.gather4.c.b.cl.cube
+    amdgcn_image_gather4_c_b_cl_o_2d,          // llvm.amdgcn.image.gather4.c.b.cl.o.2d
+    amdgcn_image_gather4_c_b_cl_o_2darray,     // llvm.amdgcn.image.gather4.c.b.cl.o.2darray
+    amdgcn_image_gather4_c_b_cl_o_cube,        // llvm.amdgcn.image.gather4.c.b.cl.o.cube
+    amdgcn_image_gather4_c_b_cube,             // llvm.amdgcn.image.gather4.c.b.cube
+    amdgcn_image_gather4_c_b_o_2d,             // llvm.amdgcn.image.gather4.c.b.o.2d
+    amdgcn_image_gather4_c_b_o_2darray,        // llvm.amdgcn.image.gather4.c.b.o.2darray
+    amdgcn_image_gather4_c_b_o_cube,           // llvm.amdgcn.image.gather4.c.b.o.cube
+    amdgcn_image_gather4_c_cl_2d,              // llvm.amdgcn.image.gather4.c.cl.2d
+    amdgcn_image_gather4_c_cl_2darray,         // llvm.amdgcn.image.gather4.c.cl.2darray
+    amdgcn_image_gather4_c_cl_cube,            // llvm.amdgcn.image.gather4.c.cl.cube
+    amdgcn_image_gather4_c_cl_o_2d,            // llvm.amdgcn.image.gather4.c.cl.o.2d
+    amdgcn_image_gather4_c_cl_o_2darray,       // llvm.amdgcn.image.gather4.c.cl.o.2darray
+    amdgcn_image_gather4_c_cl_o_cube,          // llvm.amdgcn.image.gather4.c.cl.o.cube
+    amdgcn_image_gather4_c_cube,               // llvm.amdgcn.image.gather4.c.cube
+    amdgcn_image_gather4_c_l_2d,               // llvm.amdgcn.image.gather4.c.l.2d
+    amdgcn_image_gather4_c_l_2darray,          // llvm.amdgcn.image.gather4.c.l.2darray
+    amdgcn_image_gather4_c_l_cube,             // llvm.amdgcn.image.gather4.c.l.cube
+    amdgcn_image_gather4_c_l_o_2d,             // llvm.amdgcn.image.gather4.c.l.o.2d
+    amdgcn_image_gather4_c_l_o_2darray,        // llvm.amdgcn.image.gather4.c.l.o.2darray
+    amdgcn_image_gather4_c_l_o_cube,           // llvm.amdgcn.image.gather4.c.l.o.cube
+    amdgcn_image_gather4_c_lz_2d,              // llvm.amdgcn.image.gather4.c.lz.2d
+    amdgcn_image_gather4_c_lz_2darray,         // llvm.amdgcn.image.gather4.c.lz.2darray
+    amdgcn_image_gather4_c_lz_cube,            // llvm.amdgcn.image.gather4.c.lz.cube
+    amdgcn_image_gather4_c_lz_o_2d,            // llvm.amdgcn.image.gather4.c.lz.o.2d
+    amdgcn_image_gather4_c_lz_o_2darray,       // llvm.amdgcn.image.gather4.c.lz.o.2darray
+    amdgcn_image_gather4_c_lz_o_cube,          // llvm.amdgcn.image.gather4.c.lz.o.cube
+    amdgcn_image_gather4_c_o_2d,               // llvm.amdgcn.image.gather4.c.o.2d
+    amdgcn_image_gather4_c_o_2darray,          // llvm.amdgcn.image.gather4.c.o.2darray
+    amdgcn_image_gather4_c_o_cube,             // llvm.amdgcn.image.gather4.c.o.cube
+    amdgcn_image_gather4_cl_2d,                // llvm.amdgcn.image.gather4.cl.2d
+    amdgcn_image_gather4_cl_2darray,           // llvm.amdgcn.image.gather4.cl.2darray
+    amdgcn_image_gather4_cl_cube,              // llvm.amdgcn.image.gather4.cl.cube
+    amdgcn_image_gather4_cl_o_2d,              // llvm.amdgcn.image.gather4.cl.o.2d
+    amdgcn_image_gather4_cl_o_2darray,         // llvm.amdgcn.image.gather4.cl.o.2darray
+    amdgcn_image_gather4_cl_o_cube,            // llvm.amdgcn.image.gather4.cl.o.cube
+    amdgcn_image_gather4_cube,                 // llvm.amdgcn.image.gather4.cube
+    amdgcn_image_gather4_l_2d,                 // llvm.amdgcn.image.gather4.l.2d
+    amdgcn_image_gather4_l_2darray,            // llvm.amdgcn.image.gather4.l.2darray
+    amdgcn_image_gather4_l_cube,               // llvm.amdgcn.image.gather4.l.cube
+    amdgcn_image_gather4_l_o_2d,               // llvm.amdgcn.image.gather4.l.o.2d
+    amdgcn_image_gather4_l_o_2darray,          // llvm.amdgcn.image.gather4.l.o.2darray
+    amdgcn_image_gather4_l_o_cube,             // llvm.amdgcn.image.gather4.l.o.cube
+    amdgcn_image_gather4_lz_2d,                // llvm.amdgcn.image.gather4.lz.2d
+    amdgcn_image_gather4_lz_2darray,           // llvm.amdgcn.image.gather4.lz.2darray
+    amdgcn_image_gather4_lz_cube,              // llvm.amdgcn.image.gather4.lz.cube
+    amdgcn_image_gather4_lz_o_2d,              // llvm.amdgcn.image.gather4.lz.o.2d
+    amdgcn_image_gather4_lz_o_2darray,         // llvm.amdgcn.image.gather4.lz.o.2darray
+    amdgcn_image_gather4_lz_o_cube,            // llvm.amdgcn.image.gather4.lz.o.cube
+    amdgcn_image_gather4_o_2d,                 // llvm.amdgcn.image.gather4.o.2d
+    amdgcn_image_gather4_o_2darray,            // llvm.amdgcn.image.gather4.o.2darray
+    amdgcn_image_gather4_o_cube,               // llvm.amdgcn.image.gather4.o.cube
+    amdgcn_image_getlod_1d,                    // llvm.amdgcn.image.getlod.1d
+    amdgcn_image_getlod_1darray,               // llvm.amdgcn.image.getlod.1darray
+    amdgcn_image_getlod_2d,                    // llvm.amdgcn.image.getlod.2d
+    amdgcn_image_getlod_2darray,               // llvm.amdgcn.image.getlod.2darray
+    amdgcn_image_getlod_3d,                    // llvm.amdgcn.image.getlod.3d
+    amdgcn_image_getlod_cube,                  // llvm.amdgcn.image.getlod.cube
+    amdgcn_image_getresinfo_1d,                // llvm.amdgcn.image.getresinfo.1d
+    amdgcn_image_getresinfo_1darray,           // llvm.amdgcn.image.getresinfo.1darray
+    amdgcn_image_getresinfo_2d,                // llvm.amdgcn.image.getresinfo.2d
+    amdgcn_image_getresinfo_2darray,           // llvm.amdgcn.image.getresinfo.2darray
+    amdgcn_image_getresinfo_2darraymsaa,       // llvm.amdgcn.image.getresinfo.2darraymsaa
+    amdgcn_image_getresinfo_2dmsaa,            // llvm.amdgcn.image.getresinfo.2dmsaa
+    amdgcn_image_getresinfo_3d,                // llvm.amdgcn.image.getresinfo.3d
+    amdgcn_image_getresinfo_cube,              // llvm.amdgcn.image.getresinfo.cube
+    amdgcn_image_load_1d,                      // llvm.amdgcn.image.load.1d
+    amdgcn_image_load_1darray,                 // llvm.amdgcn.image.load.1darray
+    amdgcn_image_load_2d,                      // llvm.amdgcn.image.load.2d
+    amdgcn_image_load_2darray,                 // llvm.amdgcn.image.load.2darray
+    amdgcn_image_load_2darraymsaa,             // llvm.amdgcn.image.load.2darraymsaa
+    amdgcn_image_load_2dmsaa,                  // llvm.amdgcn.image.load.2dmsaa
+    amdgcn_image_load_3d,                      // llvm.amdgcn.image.load.3d
+    amdgcn_image_load_cube,                    // llvm.amdgcn.image.load.cube
+    amdgcn_image_load_mip_1d,                  // llvm.amdgcn.image.load.mip.1d
+    amdgcn_image_load_mip_1darray,             // llvm.amdgcn.image.load.mip.1darray
+    amdgcn_image_load_mip_2d,                  // llvm.amdgcn.image.load.mip.2d
+    amdgcn_image_load_mip_2darray,             // llvm.amdgcn.image.load.mip.2darray
+    amdgcn_image_load_mip_3d,                  // llvm.amdgcn.image.load.mip.3d
+    amdgcn_image_load_mip_cube,                // llvm.amdgcn.image.load.mip.cube
+    amdgcn_image_sample_1d,                    // llvm.amdgcn.image.sample.1d
+    amdgcn_image_sample_1darray,               // llvm.amdgcn.image.sample.1darray
+    amdgcn_image_sample_2d,                    // llvm.amdgcn.image.sample.2d
+    amdgcn_image_sample_2darray,               // llvm.amdgcn.image.sample.2darray
+    amdgcn_image_sample_3d,                    // llvm.amdgcn.image.sample.3d
+    amdgcn_image_sample_b_1d,                  // llvm.amdgcn.image.sample.b.1d
+    amdgcn_image_sample_b_1darray,             // llvm.amdgcn.image.sample.b.1darray
+    amdgcn_image_sample_b_2d,                  // llvm.amdgcn.image.sample.b.2d
+    amdgcn_image_sample_b_2darray,             // llvm.amdgcn.image.sample.b.2darray
+    amdgcn_image_sample_b_3d,                  // llvm.amdgcn.image.sample.b.3d
+    amdgcn_image_sample_b_cl_1d,               // llvm.amdgcn.image.sample.b.cl.1d
+    amdgcn_image_sample_b_cl_1darray,          // llvm.amdgcn.image.sample.b.cl.1darray
+    amdgcn_image_sample_b_cl_2d,               // llvm.amdgcn.image.sample.b.cl.2d
+    amdgcn_image_sample_b_cl_2darray,          // llvm.amdgcn.image.sample.b.cl.2darray
+    amdgcn_image_sample_b_cl_3d,               // llvm.amdgcn.image.sample.b.cl.3d
+    amdgcn_image_sample_b_cl_cube,             // llvm.amdgcn.image.sample.b.cl.cube
+    amdgcn_image_sample_b_cl_o_1d,             // llvm.amdgcn.image.sample.b.cl.o.1d
+    amdgcn_image_sample_b_cl_o_1darray,        // llvm.amdgcn.image.sample.b.cl.o.1darray
+    amdgcn_image_sample_b_cl_o_2d,             // llvm.amdgcn.image.sample.b.cl.o.2d
+    amdgcn_image_sample_b_cl_o_2darray,        // llvm.amdgcn.image.sample.b.cl.o.2darray
+    amdgcn_image_sample_b_cl_o_3d,             // llvm.amdgcn.image.sample.b.cl.o.3d
+    amdgcn_image_sample_b_cl_o_cube,           // llvm.amdgcn.image.sample.b.cl.o.cube
+    amdgcn_image_sample_b_cube,                // llvm.amdgcn.image.sample.b.cube
+    amdgcn_image_sample_b_o_1d,                // llvm.amdgcn.image.sample.b.o.1d
+    amdgcn_image_sample_b_o_1darray,           // llvm.amdgcn.image.sample.b.o.1darray
+    amdgcn_image_sample_b_o_2d,                // llvm.amdgcn.image.sample.b.o.2d
+    amdgcn_image_sample_b_o_2darray,           // llvm.amdgcn.image.sample.b.o.2darray
+    amdgcn_image_sample_b_o_3d,                // llvm.amdgcn.image.sample.b.o.3d
+    amdgcn_image_sample_b_o_cube,              // llvm.amdgcn.image.sample.b.o.cube
+    amdgcn_image_sample_c_1d,                  // llvm.amdgcn.image.sample.c.1d
+    amdgcn_image_sample_c_1darray,             // llvm.amdgcn.image.sample.c.1darray
+    amdgcn_image_sample_c_2d,                  // llvm.amdgcn.image.sample.c.2d
+    amdgcn_image_sample_c_2darray,             // llvm.amdgcn.image.sample.c.2darray
+    amdgcn_image_sample_c_3d,                  // llvm.amdgcn.image.sample.c.3d
+    amdgcn_image_sample_c_b_1d,                // llvm.amdgcn.image.sample.c.b.1d
+    amdgcn_image_sample_c_b_1darray,           // llvm.amdgcn.image.sample.c.b.1darray
+    amdgcn_image_sample_c_b_2d,                // llvm.amdgcn.image.sample.c.b.2d
+    amdgcn_image_sample_c_b_2darray,           // llvm.amdgcn.image.sample.c.b.2darray
+    amdgcn_image_sample_c_b_3d,                // llvm.amdgcn.image.sample.c.b.3d
+    amdgcn_image_sample_c_b_cl_1d,             // llvm.amdgcn.image.sample.c.b.cl.1d
+    amdgcn_image_sample_c_b_cl_1darray,        // llvm.amdgcn.image.sample.c.b.cl.1darray
+    amdgcn_image_sample_c_b_cl_2d,             // llvm.amdgcn.image.sample.c.b.cl.2d
+    amdgcn_image_sample_c_b_cl_2darray,        // llvm.amdgcn.image.sample.c.b.cl.2darray
+    amdgcn_image_sample_c_b_cl_3d,             // llvm.amdgcn.image.sample.c.b.cl.3d
+    amdgcn_image_sample_c_b_cl_cube,           // llvm.amdgcn.image.sample.c.b.cl.cube
+    amdgcn_image_sample_c_b_cl_o_1d,           // llvm.amdgcn.image.sample.c.b.cl.o.1d
+    amdgcn_image_sample_c_b_cl_o_1darray,      // llvm.amdgcn.image.sample.c.b.cl.o.1darray
+    amdgcn_image_sample_c_b_cl_o_2d,           // llvm.amdgcn.image.sample.c.b.cl.o.2d
+    amdgcn_image_sample_c_b_cl_o_2darray,      // llvm.amdgcn.image.sample.c.b.cl.o.2darray
+    amdgcn_image_sample_c_b_cl_o_3d,           // llvm.amdgcn.image.sample.c.b.cl.o.3d
+    amdgcn_image_sample_c_b_cl_o_cube,         // llvm.amdgcn.image.sample.c.b.cl.o.cube
+    amdgcn_image_sample_c_b_cube,              // llvm.amdgcn.image.sample.c.b.cube
+    amdgcn_image_sample_c_b_o_1d,              // llvm.amdgcn.image.sample.c.b.o.1d
+    amdgcn_image_sample_c_b_o_1darray,         // llvm.amdgcn.image.sample.c.b.o.1darray
+    amdgcn_image_sample_c_b_o_2d,              // llvm.amdgcn.image.sample.c.b.o.2d
+    amdgcn_image_sample_c_b_o_2darray,         // llvm.amdgcn.image.sample.c.b.o.2darray
+    amdgcn_image_sample_c_b_o_3d,              // llvm.amdgcn.image.sample.c.b.o.3d
+    amdgcn_image_sample_c_b_o_cube,            // llvm.amdgcn.image.sample.c.b.o.cube
+    amdgcn_image_sample_c_cd_1d,               // llvm.amdgcn.image.sample.c.cd.1d
+    amdgcn_image_sample_c_cd_1darray,          // llvm.amdgcn.image.sample.c.cd.1darray
+    amdgcn_image_sample_c_cd_2d,               // llvm.amdgcn.image.sample.c.cd.2d
+    amdgcn_image_sample_c_cd_2darray,          // llvm.amdgcn.image.sample.c.cd.2darray
+    amdgcn_image_sample_c_cd_3d,               // llvm.amdgcn.image.sample.c.cd.3d
+    amdgcn_image_sample_c_cd_cl_1d,            // llvm.amdgcn.image.sample.c.cd.cl.1d
+    amdgcn_image_sample_c_cd_cl_1darray,       // llvm.amdgcn.image.sample.c.cd.cl.1darray
+    amdgcn_image_sample_c_cd_cl_2d,            // llvm.amdgcn.image.sample.c.cd.cl.2d
+    amdgcn_image_sample_c_cd_cl_2darray,       // llvm.amdgcn.image.sample.c.cd.cl.2darray
+    amdgcn_image_sample_c_cd_cl_3d,            // llvm.amdgcn.image.sample.c.cd.cl.3d
+    amdgcn_image_sample_c_cd_cl_cube,          // llvm.amdgcn.image.sample.c.cd.cl.cube
+    amdgcn_image_sample_c_cd_cl_o_1d,          // llvm.amdgcn.image.sample.c.cd.cl.o.1d
+    amdgcn_image_sample_c_cd_cl_o_1darray,     // llvm.amdgcn.image.sample.c.cd.cl.o.1darray
+    amdgcn_image_sample_c_cd_cl_o_2d,          // llvm.amdgcn.image.sample.c.cd.cl.o.2d
+    amdgcn_image_sample_c_cd_cl_o_2darray,     // llvm.amdgcn.image.sample.c.cd.cl.o.2darray
+    amdgcn_image_sample_c_cd_cl_o_3d,          // llvm.amdgcn.image.sample.c.cd.cl.o.3d
+    amdgcn_image_sample_c_cd_cl_o_cube,        // llvm.amdgcn.image.sample.c.cd.cl.o.cube
+    amdgcn_image_sample_c_cd_cube,             // llvm.amdgcn.image.sample.c.cd.cube
+    amdgcn_image_sample_c_cd_o_1d,             // llvm.amdgcn.image.sample.c.cd.o.1d
+    amdgcn_image_sample_c_cd_o_1darray,        // llvm.amdgcn.image.sample.c.cd.o.1darray
+    amdgcn_image_sample_c_cd_o_2d,             // llvm.amdgcn.image.sample.c.cd.o.2d
+    amdgcn_image_sample_c_cd_o_2darray,        // llvm.amdgcn.image.sample.c.cd.o.2darray
+    amdgcn_image_sample_c_cd_o_3d,             // llvm.amdgcn.image.sample.c.cd.o.3d
+    amdgcn_image_sample_c_cd_o_cube,           // llvm.amdgcn.image.sample.c.cd.o.cube
+    amdgcn_image_sample_c_cl_1d,               // llvm.amdgcn.image.sample.c.cl.1d
+    amdgcn_image_sample_c_cl_1darray,          // llvm.amdgcn.image.sample.c.cl.1darray
+    amdgcn_image_sample_c_cl_2d,               // llvm.amdgcn.image.sample.c.cl.2d
+    amdgcn_image_sample_c_cl_2darray,          // llvm.amdgcn.image.sample.c.cl.2darray
+    amdgcn_image_sample_c_cl_3d,               // llvm.amdgcn.image.sample.c.cl.3d
+    amdgcn_image_sample_c_cl_cube,             // llvm.amdgcn.image.sample.c.cl.cube
+    amdgcn_image_sample_c_cl_o_1d,             // llvm.amdgcn.image.sample.c.cl.o.1d
+    amdgcn_image_sample_c_cl_o_1darray,        // llvm.amdgcn.image.sample.c.cl.o.1darray
+    amdgcn_image_sample_c_cl_o_2d,             // llvm.amdgcn.image.sample.c.cl.o.2d
+    amdgcn_image_sample_c_cl_o_2darray,        // llvm.amdgcn.image.sample.c.cl.o.2darray
+    amdgcn_image_sample_c_cl_o_3d,             // llvm.amdgcn.image.sample.c.cl.o.3d
+    amdgcn_image_sample_c_cl_o_cube,           // llvm.amdgcn.image.sample.c.cl.o.cube
+    amdgcn_image_sample_c_cube,                // llvm.amdgcn.image.sample.c.cube
+    amdgcn_image_sample_c_d_1d,                // llvm.amdgcn.image.sample.c.d.1d
+    amdgcn_image_sample_c_d_1darray,           // llvm.amdgcn.image.sample.c.d.1darray
+    amdgcn_image_sample_c_d_2d,                // llvm.amdgcn.image.sample.c.d.2d
+    amdgcn_image_sample_c_d_2darray,           // llvm.amdgcn.image.sample.c.d.2darray
+    amdgcn_image_sample_c_d_3d,                // llvm.amdgcn.image.sample.c.d.3d
+    amdgcn_image_sample_c_d_cl_1d,             // llvm.amdgcn.image.sample.c.d.cl.1d
+    amdgcn_image_sample_c_d_cl_1darray,        // llvm.amdgcn.image.sample.c.d.cl.1darray
+    amdgcn_image_sample_c_d_cl_2d,             // llvm.amdgcn.image.sample.c.d.cl.2d
+    amdgcn_image_sample_c_d_cl_2darray,        // llvm.amdgcn.image.sample.c.d.cl.2darray
+    amdgcn_image_sample_c_d_cl_3d,             // llvm.amdgcn.image.sample.c.d.cl.3d
+    amdgcn_image_sample_c_d_cl_cube,           // llvm.amdgcn.image.sample.c.d.cl.cube
+    amdgcn_image_sample_c_d_cl_o_1d,           // llvm.amdgcn.image.sample.c.d.cl.o.1d
+    amdgcn_image_sample_c_d_cl_o_1darray,      // llvm.amdgcn.image.sample.c.d.cl.o.1darray
+    amdgcn_image_sample_c_d_cl_o_2d,           // llvm.amdgcn.image.sample.c.d.cl.o.2d
+    amdgcn_image_sample_c_d_cl_o_2darray,      // llvm.amdgcn.image.sample.c.d.cl.o.2darray
+    amdgcn_image_sample_c_d_cl_o_3d,           // llvm.amdgcn.image.sample.c.d.cl.o.3d
+    amdgcn_image_sample_c_d_cl_o_cube,         // llvm.amdgcn.image.sample.c.d.cl.o.cube
+    amdgcn_image_sample_c_d_cube,              // llvm.amdgcn.image.sample.c.d.cube
+    amdgcn_image_sample_c_d_o_1d,              // llvm.amdgcn.image.sample.c.d.o.1d
+    amdgcn_image_sample_c_d_o_1darray,         // llvm.amdgcn.image.sample.c.d.o.1darray
+    amdgcn_image_sample_c_d_o_2d,              // llvm.amdgcn.image.sample.c.d.o.2d
+    amdgcn_image_sample_c_d_o_2darray,         // llvm.amdgcn.image.sample.c.d.o.2darray
+    amdgcn_image_sample_c_d_o_3d,              // llvm.amdgcn.image.sample.c.d.o.3d
+    amdgcn_image_sample_c_d_o_cube,            // llvm.amdgcn.image.sample.c.d.o.cube
+    amdgcn_image_sample_c_l_1d,                // llvm.amdgcn.image.sample.c.l.1d
+    amdgcn_image_sample_c_l_1darray,           // llvm.amdgcn.image.sample.c.l.1darray
+    amdgcn_image_sample_c_l_2d,                // llvm.amdgcn.image.sample.c.l.2d
+    amdgcn_image_sample_c_l_2darray,           // llvm.amdgcn.image.sample.c.l.2darray
+    amdgcn_image_sample_c_l_3d,                // llvm.amdgcn.image.sample.c.l.3d
+    amdgcn_image_sample_c_l_cube,              // llvm.amdgcn.image.sample.c.l.cube
+    amdgcn_image_sample_c_l_o_1d,              // llvm.amdgcn.image.sample.c.l.o.1d
+    amdgcn_image_sample_c_l_o_1darray,         // llvm.amdgcn.image.sample.c.l.o.1darray
+    amdgcn_image_sample_c_l_o_2d,              // llvm.amdgcn.image.sample.c.l.o.2d
+    amdgcn_image_sample_c_l_o_2darray,         // llvm.amdgcn.image.sample.c.l.o.2darray
+    amdgcn_image_sample_c_l_o_3d,              // llvm.amdgcn.image.sample.c.l.o.3d
+    amdgcn_image_sample_c_l_o_cube,            // llvm.amdgcn.image.sample.c.l.o.cube
+    amdgcn_image_sample_c_lz_1d,               // llvm.amdgcn.image.sample.c.lz.1d
+    amdgcn_image_sample_c_lz_1darray,          // llvm.amdgcn.image.sample.c.lz.1darray
+    amdgcn_image_sample_c_lz_2d,               // llvm.amdgcn.image.sample.c.lz.2d
+    amdgcn_image_sample_c_lz_2darray,          // llvm.amdgcn.image.sample.c.lz.2darray
+    amdgcn_image_sample_c_lz_3d,               // llvm.amdgcn.image.sample.c.lz.3d
+    amdgcn_image_sample_c_lz_cube,             // llvm.amdgcn.image.sample.c.lz.cube
+    amdgcn_image_sample_c_lz_o_1d,             // llvm.amdgcn.image.sample.c.lz.o.1d
+    amdgcn_image_sample_c_lz_o_1darray,        // llvm.amdgcn.image.sample.c.lz.o.1darray
+    amdgcn_image_sample_c_lz_o_2d,             // llvm.amdgcn.image.sample.c.lz.o.2d
+    amdgcn_image_sample_c_lz_o_2darray,        // llvm.amdgcn.image.sample.c.lz.o.2darray
+    amdgcn_image_sample_c_lz_o_3d,             // llvm.amdgcn.image.sample.c.lz.o.3d
+    amdgcn_image_sample_c_lz_o_cube,           // llvm.amdgcn.image.sample.c.lz.o.cube
+    amdgcn_image_sample_c_o_1d,                // llvm.amdgcn.image.sample.c.o.1d
+    amdgcn_image_sample_c_o_1darray,           // llvm.amdgcn.image.sample.c.o.1darray
+    amdgcn_image_sample_c_o_2d,                // llvm.amdgcn.image.sample.c.o.2d
+    amdgcn_image_sample_c_o_2darray,           // llvm.amdgcn.image.sample.c.o.2darray
+    amdgcn_image_sample_c_o_3d,                // llvm.amdgcn.image.sample.c.o.3d
+    amdgcn_image_sample_c_o_cube,              // llvm.amdgcn.image.sample.c.o.cube
+    amdgcn_image_sample_cd_1d,                 // llvm.amdgcn.image.sample.cd.1d
+    amdgcn_image_sample_cd_1darray,            // llvm.amdgcn.image.sample.cd.1darray
+    amdgcn_image_sample_cd_2d,                 // llvm.amdgcn.image.sample.cd.2d
+    amdgcn_image_sample_cd_2darray,            // llvm.amdgcn.image.sample.cd.2darray
+    amdgcn_image_sample_cd_3d,                 // llvm.amdgcn.image.sample.cd.3d
+    amdgcn_image_sample_cd_cl_1d,              // llvm.amdgcn.image.sample.cd.cl.1d
+    amdgcn_image_sample_cd_cl_1darray,         // llvm.amdgcn.image.sample.cd.cl.1darray
+    amdgcn_image_sample_cd_cl_2d,              // llvm.amdgcn.image.sample.cd.cl.2d
+    amdgcn_image_sample_cd_cl_2darray,         // llvm.amdgcn.image.sample.cd.cl.2darray
+    amdgcn_image_sample_cd_cl_3d,              // llvm.amdgcn.image.sample.cd.cl.3d
+    amdgcn_image_sample_cd_cl_cube,            // llvm.amdgcn.image.sample.cd.cl.cube
+    amdgcn_image_sample_cd_cl_o_1d,            // llvm.amdgcn.image.sample.cd.cl.o.1d
+    amdgcn_image_sample_cd_cl_o_1darray,       // llvm.amdgcn.image.sample.cd.cl.o.1darray
+    amdgcn_image_sample_cd_cl_o_2d,            // llvm.amdgcn.image.sample.cd.cl.o.2d
+    amdgcn_image_sample_cd_cl_o_2darray,       // llvm.amdgcn.image.sample.cd.cl.o.2darray
+    amdgcn_image_sample_cd_cl_o_3d,            // llvm.amdgcn.image.sample.cd.cl.o.3d
+    amdgcn_image_sample_cd_cl_o_cube,          // llvm.amdgcn.image.sample.cd.cl.o.cube
+    amdgcn_image_sample_cd_cube,               // llvm.amdgcn.image.sample.cd.cube
+    amdgcn_image_sample_cd_o_1d,               // llvm.amdgcn.image.sample.cd.o.1d
+    amdgcn_image_sample_cd_o_1darray,          // llvm.amdgcn.image.sample.cd.o.1darray
+    amdgcn_image_sample_cd_o_2d,               // llvm.amdgcn.image.sample.cd.o.2d
+    amdgcn_image_sample_cd_o_2darray,          // llvm.amdgcn.image.sample.cd.o.2darray
+    amdgcn_image_sample_cd_o_3d,               // llvm.amdgcn.image.sample.cd.o.3d
+    amdgcn_image_sample_cd_o_cube,             // llvm.amdgcn.image.sample.cd.o.cube
+    amdgcn_image_sample_cl_1d,                 // llvm.amdgcn.image.sample.cl.1d
+    amdgcn_image_sample_cl_1darray,            // llvm.amdgcn.image.sample.cl.1darray
+    amdgcn_image_sample_cl_2d,                 // llvm.amdgcn.image.sample.cl.2d
+    amdgcn_image_sample_cl_2darray,            // llvm.amdgcn.image.sample.cl.2darray
+    amdgcn_image_sample_cl_3d,                 // llvm.amdgcn.image.sample.cl.3d
+    amdgcn_image_sample_cl_cube,               // llvm.amdgcn.image.sample.cl.cube
+    amdgcn_image_sample_cl_o_1d,               // llvm.amdgcn.image.sample.cl.o.1d
+    amdgcn_image_sample_cl_o_1darray,          // llvm.amdgcn.image.sample.cl.o.1darray
+    amdgcn_image_sample_cl_o_2d,               // llvm.amdgcn.image.sample.cl.o.2d
+    amdgcn_image_sample_cl_o_2darray,          // llvm.amdgcn.image.sample.cl.o.2darray
+    amdgcn_image_sample_cl_o_3d,               // llvm.amdgcn.image.sample.cl.o.3d
+    amdgcn_image_sample_cl_o_cube,             // llvm.amdgcn.image.sample.cl.o.cube
+    amdgcn_image_sample_cube,                  // llvm.amdgcn.image.sample.cube
+    amdgcn_image_sample_d_1d,                  // llvm.amdgcn.image.sample.d.1d
+    amdgcn_image_sample_d_1darray,             // llvm.amdgcn.image.sample.d.1darray
+    amdgcn_image_sample_d_2d,                  // llvm.amdgcn.image.sample.d.2d
+    amdgcn_image_sample_d_2darray,             // llvm.amdgcn.image.sample.d.2darray
+    amdgcn_image_sample_d_3d,                  // llvm.amdgcn.image.sample.d.3d
+    amdgcn_image_sample_d_cl_1d,               // llvm.amdgcn.image.sample.d.cl.1d
+    amdgcn_image_sample_d_cl_1darray,          // llvm.amdgcn.image.sample.d.cl.1darray
+    amdgcn_image_sample_d_cl_2d,               // llvm.amdgcn.image.sample.d.cl.2d
+    amdgcn_image_sample_d_cl_2darray,          // llvm.amdgcn.image.sample.d.cl.2darray
+    amdgcn_image_sample_d_cl_3d,               // llvm.amdgcn.image.sample.d.cl.3d
+    amdgcn_image_sample_d_cl_cube,             // llvm.amdgcn.image.sample.d.cl.cube
+    amdgcn_image_sample_d_cl_o_1d,             // llvm.amdgcn.image.sample.d.cl.o.1d
+    amdgcn_image_sample_d_cl_o_1darray,        // llvm.amdgcn.image.sample.d.cl.o.1darray
+    amdgcn_image_sample_d_cl_o_2d,             // llvm.amdgcn.image.sample.d.cl.o.2d
+    amdgcn_image_sample_d_cl_o_2darray,        // llvm.amdgcn.image.sample.d.cl.o.2darray
+    amdgcn_image_sample_d_cl_o_3d,             // llvm.amdgcn.image.sample.d.cl.o.3d
+    amdgcn_image_sample_d_cl_o_cube,           // llvm.amdgcn.image.sample.d.cl.o.cube
+    amdgcn_image_sample_d_cube,                // llvm.amdgcn.image.sample.d.cube
+    amdgcn_image_sample_d_o_1d,                // llvm.amdgcn.image.sample.d.o.1d
+    amdgcn_image_sample_d_o_1darray,           // llvm.amdgcn.image.sample.d.o.1darray
+    amdgcn_image_sample_d_o_2d,                // llvm.amdgcn.image.sample.d.o.2d
+    amdgcn_image_sample_d_o_2darray,           // llvm.amdgcn.image.sample.d.o.2darray
+    amdgcn_image_sample_d_o_3d,                // llvm.amdgcn.image.sample.d.o.3d
+    amdgcn_image_sample_d_o_cube,              // llvm.amdgcn.image.sample.d.o.cube
+    amdgcn_image_sample_l_1d,                  // llvm.amdgcn.image.sample.l.1d
+    amdgcn_image_sample_l_1darray,             // llvm.amdgcn.image.sample.l.1darray
+    amdgcn_image_sample_l_2d,                  // llvm.amdgcn.image.sample.l.2d
+    amdgcn_image_sample_l_2darray,             // llvm.amdgcn.image.sample.l.2darray
+    amdgcn_image_sample_l_3d,                  // llvm.amdgcn.image.sample.l.3d
+    amdgcn_image_sample_l_cube,                // llvm.amdgcn.image.sample.l.cube
+    amdgcn_image_sample_l_o_1d,                // llvm.amdgcn.image.sample.l.o.1d
+    amdgcn_image_sample_l_o_1darray,           // llvm.amdgcn.image.sample.l.o.1darray
+    amdgcn_image_sample_l_o_2d,                // llvm.amdgcn.image.sample.l.o.2d
+    amdgcn_image_sample_l_o_2darray,           // llvm.amdgcn.image.sample.l.o.2darray
+    amdgcn_image_sample_l_o_3d,                // llvm.amdgcn.image.sample.l.o.3d
+    amdgcn_image_sample_l_o_cube,              // llvm.amdgcn.image.sample.l.o.cube
+    amdgcn_image_sample_lz_1d,                 // llvm.amdgcn.image.sample.lz.1d
+    amdgcn_image_sample_lz_1darray,            // llvm.amdgcn.image.sample.lz.1darray
+    amdgcn_image_sample_lz_2d,                 // llvm.amdgcn.image.sample.lz.2d
+    amdgcn_image_sample_lz_2darray,            // llvm.amdgcn.image.sample.lz.2darray
+    amdgcn_image_sample_lz_3d,                 // llvm.amdgcn.image.sample.lz.3d
+    amdgcn_image_sample_lz_cube,               // llvm.amdgcn.image.sample.lz.cube
+    amdgcn_image_sample_lz_o_1d,               // llvm.amdgcn.image.sample.lz.o.1d
+    amdgcn_image_sample_lz_o_1darray,          // llvm.amdgcn.image.sample.lz.o.1darray
+    amdgcn_image_sample_lz_o_2d,               // llvm.amdgcn.image.sample.lz.o.2d
+    amdgcn_image_sample_lz_o_2darray,          // llvm.amdgcn.image.sample.lz.o.2darray
+    amdgcn_image_sample_lz_o_3d,               // llvm.amdgcn.image.sample.lz.o.3d
+    amdgcn_image_sample_lz_o_cube,             // llvm.amdgcn.image.sample.lz.o.cube
+    amdgcn_image_sample_o_1d,                  // llvm.amdgcn.image.sample.o.1d
+    amdgcn_image_sample_o_1darray,             // llvm.amdgcn.image.sample.o.1darray
+    amdgcn_image_sample_o_2d,                  // llvm.amdgcn.image.sample.o.2d
+    amdgcn_image_sample_o_2darray,             // llvm.amdgcn.image.sample.o.2darray
+    amdgcn_image_sample_o_3d,                  // llvm.amdgcn.image.sample.o.3d
+    amdgcn_image_sample_o_cube,                // llvm.amdgcn.image.sample.o.cube
+    amdgcn_image_store_1d,                     // llvm.amdgcn.image.store.1d
+    amdgcn_image_store_1darray,                // llvm.amdgcn.image.store.1darray
+    amdgcn_image_store_2d,                     // llvm.amdgcn.image.store.2d
+    amdgcn_image_store_2darray,                // llvm.amdgcn.image.store.2darray
+    amdgcn_image_store_2darraymsaa,            // llvm.amdgcn.image.store.2darraymsaa
+    amdgcn_image_store_2dmsaa,                 // llvm.amdgcn.image.store.2dmsaa
+    amdgcn_image_store_3d,                     // llvm.amdgcn.image.store.3d
+    amdgcn_image_store_cube,                   // llvm.amdgcn.image.store.cube
+    amdgcn_image_store_mip_1d,                 // llvm.amdgcn.image.store.mip.1d
+    amdgcn_image_store_mip_1darray,            // llvm.amdgcn.image.store.mip.1darray
+    amdgcn_image_store_mip_2d,                 // llvm.amdgcn.image.store.mip.2d
+    amdgcn_image_store_mip_2darray,            // llvm.amdgcn.image.store.mip.2darray
+    amdgcn_image_store_mip_3d,                 // llvm.amdgcn.image.store.mip.3d
+    amdgcn_image_store_mip_cube,               // llvm.amdgcn.image.store.mip.cube
+    amdgcn_implicit_buffer_ptr,                // llvm.amdgcn.implicit.buffer.ptr
+    amdgcn_implicitarg_ptr,                    // llvm.amdgcn.implicitarg.ptr
+    amdgcn_init_exec,                          // llvm.amdgcn.init.exec
+    amdgcn_init_exec_from_input,               // llvm.amdgcn.init.exec.from.input
+    amdgcn_interp_mov,                         // llvm.amdgcn.interp.mov
+    amdgcn_interp_p1,                          // llvm.amdgcn.interp.p1
+    amdgcn_interp_p2,                          // llvm.amdgcn.interp.p2
+    amdgcn_kernarg_segment_ptr,                // llvm.amdgcn.kernarg.segment.ptr
+    amdgcn_kill,                               // llvm.amdgcn.kill
+    amdgcn_ldexp,                              // llvm.amdgcn.ldexp
+    amdgcn_lerp,                               // llvm.amdgcn.lerp
+    amdgcn_log_clamp,                          // llvm.amdgcn.log.clamp
+    amdgcn_loop,                               // llvm.amdgcn.loop
+    amdgcn_mbcnt_hi,                           // llvm.amdgcn.mbcnt.hi
+    amdgcn_mbcnt_lo,                           // llvm.amdgcn.mbcnt.lo
+    amdgcn_mov_dpp,                            // llvm.amdgcn.mov.dpp
+    amdgcn_mqsad_pk_u16_u8,                    // llvm.amdgcn.mqsad.pk.u16.u8
+    amdgcn_mqsad_u32_u8,                       // llvm.amdgcn.mqsad.u32.u8
+    amdgcn_msad_u8,                            // llvm.amdgcn.msad.u8
+    amdgcn_ps_live,                            // llvm.amdgcn.ps.live
+    amdgcn_qsad_pk_u16_u8,                     // llvm.amdgcn.qsad.pk.u16.u8
+    amdgcn_queue_ptr,                          // llvm.amdgcn.queue.ptr
+    amdgcn_rcp,                                // llvm.amdgcn.rcp
+    amdgcn_rcp_legacy,                         // llvm.amdgcn.rcp.legacy
+    amdgcn_readfirstlane,                      // llvm.amdgcn.readfirstlane
+    amdgcn_readlane,                           // llvm.amdgcn.readlane
+    amdgcn_rsq,                                // llvm.amdgcn.rsq
+    amdgcn_rsq_clamp,                          // llvm.amdgcn.rsq.clamp
+    amdgcn_rsq_legacy,                         // llvm.amdgcn.rsq.legacy
+    amdgcn_s_barrier,                          // llvm.amdgcn.s.barrier
+    amdgcn_s_dcache_inv,                       // llvm.amdgcn.s.dcache.inv
+    amdgcn_s_dcache_inv_vol,                   // llvm.amdgcn.s.dcache.inv.vol
+    amdgcn_s_dcache_wb,                        // llvm.amdgcn.s.dcache.wb
+    amdgcn_s_dcache_wb_vol,                    // llvm.amdgcn.s.dcache.wb.vol
+    amdgcn_s_decperflevel,                     // llvm.amdgcn.s.decperflevel
+    amdgcn_s_getpc,                            // llvm.amdgcn.s.getpc
+    amdgcn_s_getreg,                           // llvm.amdgcn.s.getreg
+    amdgcn_s_incperflevel,                     // llvm.amdgcn.s.incperflevel
+    amdgcn_s_memrealtime,                      // llvm.amdgcn.s.memrealtime
+    amdgcn_s_memtime,                          // llvm.amdgcn.s.memtime
+    amdgcn_s_sendmsg,                          // llvm.amdgcn.s.sendmsg
+    amdgcn_s_sendmsghalt,                      // llvm.amdgcn.s.sendmsghalt
+    amdgcn_s_sleep,                            // llvm.amdgcn.s.sleep
+    amdgcn_s_waitcnt,                          // llvm.amdgcn.s.waitcnt
+    amdgcn_sad_hi_u8,                          // llvm.amdgcn.sad.hi.u8
+    amdgcn_sad_u16,                            // llvm.amdgcn.sad.u16
+    amdgcn_sad_u8,                             // llvm.amdgcn.sad.u8
+    amdgcn_sbfe,                               // llvm.amdgcn.sbfe
+    amdgcn_sdot2,                              // llvm.amdgcn.sdot2
+    amdgcn_sdot4,                              // llvm.amdgcn.sdot4
+    amdgcn_sdot8,                              // llvm.amdgcn.sdot8
+    amdgcn_set_inactive,                       // llvm.amdgcn.set.inactive
+    amdgcn_sffbh,                              // llvm.amdgcn.sffbh
+    amdgcn_sin,                                // llvm.amdgcn.sin
+    amdgcn_tbuffer_load,                       // llvm.amdgcn.tbuffer.load
+    amdgcn_tbuffer_store,                      // llvm.amdgcn.tbuffer.store
+    amdgcn_trig_preop,                         // llvm.amdgcn.trig.preop
+    amdgcn_ubfe,                               // llvm.amdgcn.ubfe
+    amdgcn_udot2,                              // llvm.amdgcn.udot2
+    amdgcn_udot4,                              // llvm.amdgcn.udot4
+    amdgcn_udot8,                              // llvm.amdgcn.udot8
+    amdgcn_unreachable,                        // llvm.amdgcn.unreachable
+    amdgcn_update_dpp,                         // llvm.amdgcn.update.dpp
+    amdgcn_wave_barrier,                       // llvm.amdgcn.wave.barrier
+    amdgcn_workgroup_id_x,                     // llvm.amdgcn.workgroup.id.x
+    amdgcn_workgroup_id_y,                     // llvm.amdgcn.workgroup.id.y
+    amdgcn_workgroup_id_z,                     // llvm.amdgcn.workgroup.id.z
+    amdgcn_workitem_id_x,                      // llvm.amdgcn.workitem.id.x
+    amdgcn_workitem_id_y,                      // llvm.amdgcn.workitem.id.y
+    amdgcn_workitem_id_z,                      // llvm.amdgcn.workitem.id.z
+    amdgcn_wqm,                                // llvm.amdgcn.wqm
+    amdgcn_wqm_vote,                           // llvm.amdgcn.wqm.vote
+    amdgcn_writelane,                          // llvm.amdgcn.writelane
+    amdgcn_wwm,                                // llvm.amdgcn.wwm
+    arm_cdp,                                   // llvm.arm.cdp
+    arm_cdp2,                                  // llvm.arm.cdp2
+    arm_clrex,                                 // llvm.arm.clrex
+    arm_crc32b,                                // llvm.arm.crc32b
+    arm_crc32cb,                               // llvm.arm.crc32cb
+    arm_crc32ch,                               // llvm.arm.crc32ch
+    arm_crc32cw,                               // llvm.arm.crc32cw
+    arm_crc32h,                                // llvm.arm.crc32h
+    arm_crc32w,                                // llvm.arm.crc32w
+    arm_dbg,                                   // llvm.arm.dbg
+    arm_dmb,                                   // llvm.arm.dmb
+    arm_dsb,                                   // llvm.arm.dsb
+    arm_get_fpscr,                             // llvm.arm.get.fpscr
+    arm_hint,                                  // llvm.arm.hint
+    arm_isb,                                   // llvm.arm.isb
+    arm_ldaex,                                 // llvm.arm.ldaex
+    arm_ldaexd,                                // llvm.arm.ldaexd
+    arm_ldc,                                   // llvm.arm.ldc
+    arm_ldc2,                                  // llvm.arm.ldc2
+    arm_ldc2l,                                 // llvm.arm.ldc2l
+    arm_ldcl,                                  // llvm.arm.ldcl
+    arm_ldrex,                                 // llvm.arm.ldrex
+    arm_ldrexd,                                // llvm.arm.ldrexd
+    arm_mcr,                                   // llvm.arm.mcr
+    arm_mcr2,                                  // llvm.arm.mcr2
+    arm_mcrr,                                  // llvm.arm.mcrr
+    arm_mcrr2,                                 // llvm.arm.mcrr2
+    arm_mrc,                                   // llvm.arm.mrc
+    arm_mrc2,                                  // llvm.arm.mrc2
+    arm_mrrc,                                  // llvm.arm.mrrc
+    arm_mrrc2,                                 // llvm.arm.mrrc2
+    arm_neon_aesd,                             // llvm.arm.neon.aesd
+    arm_neon_aese,                             // llvm.arm.neon.aese
+    arm_neon_aesimc,                           // llvm.arm.neon.aesimc
+    arm_neon_aesmc,                            // llvm.arm.neon.aesmc
+    arm_neon_sdot,                             // llvm.arm.neon.sdot
+    arm_neon_sha1c,                            // llvm.arm.neon.sha1c
+    arm_neon_sha1h,                            // llvm.arm.neon.sha1h
+    arm_neon_sha1m,                            // llvm.arm.neon.sha1m
+    arm_neon_sha1p,                            // llvm.arm.neon.sha1p
+    arm_neon_sha1su0,                          // llvm.arm.neon.sha1su0
+    arm_neon_sha1su1,                          // llvm.arm.neon.sha1su1
+    arm_neon_sha256h,                          // llvm.arm.neon.sha256h
+    arm_neon_sha256h2,                         // llvm.arm.neon.sha256h2
+    arm_neon_sha256su0,                        // llvm.arm.neon.sha256su0
+    arm_neon_sha256su1,                        // llvm.arm.neon.sha256su1
+    arm_neon_udot,                             // llvm.arm.neon.udot
+    arm_neon_vabds,                            // llvm.arm.neon.vabds
+    arm_neon_vabdu,                            // llvm.arm.neon.vabdu
+    arm_neon_vabs,                             // llvm.arm.neon.vabs
+    arm_neon_vacge,                            // llvm.arm.neon.vacge
+    arm_neon_vacgt,                            // llvm.arm.neon.vacgt
+    arm_neon_vbsl,                             // llvm.arm.neon.vbsl
+    arm_neon_vcls,                             // llvm.arm.neon.vcls
+    arm_neon_vcvtas,                           // llvm.arm.neon.vcvtas
+    arm_neon_vcvtau,                           // llvm.arm.neon.vcvtau
+    arm_neon_vcvtfp2fxs,                       // llvm.arm.neon.vcvtfp2fxs
+    arm_neon_vcvtfp2fxu,                       // llvm.arm.neon.vcvtfp2fxu
+    arm_neon_vcvtfp2hf,                        // llvm.arm.neon.vcvtfp2hf
+    arm_neon_vcvtfxs2fp,                       // llvm.arm.neon.vcvtfxs2fp
+    arm_neon_vcvtfxu2fp,                       // llvm.arm.neon.vcvtfxu2fp
+    arm_neon_vcvthf2fp,                        // llvm.arm.neon.vcvthf2fp
+    arm_neon_vcvtms,                           // llvm.arm.neon.vcvtms
+    arm_neon_vcvtmu,                           // llvm.arm.neon.vcvtmu
+    arm_neon_vcvtns,                           // llvm.arm.neon.vcvtns
+    arm_neon_vcvtnu,                           // llvm.arm.neon.vcvtnu
+    arm_neon_vcvtps,                           // llvm.arm.neon.vcvtps
+    arm_neon_vcvtpu,                           // llvm.arm.neon.vcvtpu
+    arm_neon_vhadds,                           // llvm.arm.neon.vhadds
+    arm_neon_vhaddu,                           // llvm.arm.neon.vhaddu
+    arm_neon_vhsubs,                           // llvm.arm.neon.vhsubs
+    arm_neon_vhsubu,                           // llvm.arm.neon.vhsubu
+    arm_neon_vld1,                             // llvm.arm.neon.vld1
+    arm_neon_vld1x2,                           // llvm.arm.neon.vld1x2
+    arm_neon_vld1x3,                           // llvm.arm.neon.vld1x3
+    arm_neon_vld1x4,                           // llvm.arm.neon.vld1x4
+    arm_neon_vld2,                             // llvm.arm.neon.vld2
+    arm_neon_vld2dup,                          // llvm.arm.neon.vld2dup
+    arm_neon_vld2lane,                         // llvm.arm.neon.vld2lane
+    arm_neon_vld3,                             // llvm.arm.neon.vld3
+    arm_neon_vld3dup,                          // llvm.arm.neon.vld3dup
+    arm_neon_vld3lane,                         // llvm.arm.neon.vld3lane
+    arm_neon_vld4,                             // llvm.arm.neon.vld4
+    arm_neon_vld4dup,                          // llvm.arm.neon.vld4dup
+    arm_neon_vld4lane,                         // llvm.arm.neon.vld4lane
+    arm_neon_vmaxnm,                           // llvm.arm.neon.vmaxnm
+    arm_neon_vmaxs,                            // llvm.arm.neon.vmaxs
+    arm_neon_vmaxu,                            // llvm.arm.neon.vmaxu
+    arm_neon_vminnm,                           // llvm.arm.neon.vminnm
+    arm_neon_vmins,                            // llvm.arm.neon.vmins
+    arm_neon_vminu,                            // llvm.arm.neon.vminu
+    arm_neon_vmullp,                           // llvm.arm.neon.vmullp
+    arm_neon_vmulls,                           // llvm.arm.neon.vmulls
+    arm_neon_vmullu,                           // llvm.arm.neon.vmullu
+    arm_neon_vmulp,                            // llvm.arm.neon.vmulp
+    arm_neon_vpadals,                          // llvm.arm.neon.vpadals
+    arm_neon_vpadalu,                          // llvm.arm.neon.vpadalu
+    arm_neon_vpadd,                            // llvm.arm.neon.vpadd
+    arm_neon_vpaddls,                          // llvm.arm.neon.vpaddls
+    arm_neon_vpaddlu,                          // llvm.arm.neon.vpaddlu
+    arm_neon_vpmaxs,                           // llvm.arm.neon.vpmaxs
+    arm_neon_vpmaxu,                           // llvm.arm.neon.vpmaxu
+    arm_neon_vpmins,                           // llvm.arm.neon.vpmins
+    arm_neon_vpminu,                           // llvm.arm.neon.vpminu
+    arm_neon_vqabs,                            // llvm.arm.neon.vqabs
+    arm_neon_vqadds,                           // llvm.arm.neon.vqadds
+    arm_neon_vqaddu,                           // llvm.arm.neon.vqaddu
+    arm_neon_vqdmulh,                          // llvm.arm.neon.vqdmulh
+    arm_neon_vqdmull,                          // llvm.arm.neon.vqdmull
+    arm_neon_vqmovns,                          // llvm.arm.neon.vqmovns
+    arm_neon_vqmovnsu,                         // llvm.arm.neon.vqmovnsu
+    arm_neon_vqmovnu,                          // llvm.arm.neon.vqmovnu
+    arm_neon_vqneg,                            // llvm.arm.neon.vqneg
+    arm_neon_vqrdmulh,                         // llvm.arm.neon.vqrdmulh
+    arm_neon_vqrshiftns,                       // llvm.arm.neon.vqrshiftns
+    arm_neon_vqrshiftnsu,                      // llvm.arm.neon.vqrshiftnsu
+    arm_neon_vqrshiftnu,                       // llvm.arm.neon.vqrshiftnu
+    arm_neon_vqrshifts,                        // llvm.arm.neon.vqrshifts
+    arm_neon_vqrshiftu,                        // llvm.arm.neon.vqrshiftu
+    arm_neon_vqshiftns,                        // llvm.arm.neon.vqshiftns
+    arm_neon_vqshiftnsu,                       // llvm.arm.neon.vqshiftnsu
+    arm_neon_vqshiftnu,                        // llvm.arm.neon.vqshiftnu
+    arm_neon_vqshifts,                         // llvm.arm.neon.vqshifts
+    arm_neon_vqshiftsu,                        // llvm.arm.neon.vqshiftsu
+    arm_neon_vqshiftu,                         // llvm.arm.neon.vqshiftu
+    arm_neon_vqsubs,                           // llvm.arm.neon.vqsubs
+    arm_neon_vqsubu,                           // llvm.arm.neon.vqsubu
+    arm_neon_vraddhn,                          // llvm.arm.neon.vraddhn
+    arm_neon_vrecpe,                           // llvm.arm.neon.vrecpe
+    arm_neon_vrecps,                           // llvm.arm.neon.vrecps
+    arm_neon_vrhadds,                          // llvm.arm.neon.vrhadds
+    arm_neon_vrhaddu,                          // llvm.arm.neon.vrhaddu
+    arm_neon_vrinta,                           // llvm.arm.neon.vrinta
+    arm_neon_vrintm,                           // llvm.arm.neon.vrintm
+    arm_neon_vrintn,                           // llvm.arm.neon.vrintn
+    arm_neon_vrintp,                           // llvm.arm.neon.vrintp
+    arm_neon_vrintx,                           // llvm.arm.neon.vrintx
+    arm_neon_vrintz,                           // llvm.arm.neon.vrintz
+    arm_neon_vrshiftn,                         // llvm.arm.neon.vrshiftn
+    arm_neon_vrshifts,                         // llvm.arm.neon.vrshifts
+    arm_neon_vrshiftu,                         // llvm.arm.neon.vrshiftu
+    arm_neon_vrsqrte,                          // llvm.arm.neon.vrsqrte
+    arm_neon_vrsqrts,                          // llvm.arm.neon.vrsqrts
+    arm_neon_vrsubhn,                          // llvm.arm.neon.vrsubhn
+    arm_neon_vshiftins,                        // llvm.arm.neon.vshiftins
+    arm_neon_vshifts,                          // llvm.arm.neon.vshifts
+    arm_neon_vshiftu,                          // llvm.arm.neon.vshiftu
+    arm_neon_vst1,                             // llvm.arm.neon.vst1
+    arm_neon_vst1x2,                           // llvm.arm.neon.vst1x2
+    arm_neon_vst1x3,                           // llvm.arm.neon.vst1x3
+    arm_neon_vst1x4,                           // llvm.arm.neon.vst1x4
+    arm_neon_vst2,                             // llvm.arm.neon.vst2
+    arm_neon_vst2lane,                         // llvm.arm.neon.vst2lane
+    arm_neon_vst3,                             // llvm.arm.neon.vst3
+    arm_neon_vst3lane,                         // llvm.arm.neon.vst3lane
+    arm_neon_vst4,                             // llvm.arm.neon.vst4
+    arm_neon_vst4lane,                         // llvm.arm.neon.vst4lane
+    arm_neon_vtbl1,                            // llvm.arm.neon.vtbl1
+    arm_neon_vtbl2,                            // llvm.arm.neon.vtbl2
+    arm_neon_vtbl3,                            // llvm.arm.neon.vtbl3
+    arm_neon_vtbl4,                            // llvm.arm.neon.vtbl4
+    arm_neon_vtbx1,                            // llvm.arm.neon.vtbx1
+    arm_neon_vtbx2,                            // llvm.arm.neon.vtbx2
+    arm_neon_vtbx3,                            // llvm.arm.neon.vtbx3
+    arm_neon_vtbx4,                            // llvm.arm.neon.vtbx4
+    arm_qadd,                                  // llvm.arm.qadd
+    arm_qadd16,                                // llvm.arm.qadd16
+    arm_qadd8,                                 // llvm.arm.qadd8
+    arm_qasx,                                  // llvm.arm.qasx
+    arm_qsax,                                  // llvm.arm.qsax
+    arm_qsub,                                  // llvm.arm.qsub
+    arm_qsub16,                                // llvm.arm.qsub16
+    arm_qsub8,                                 // llvm.arm.qsub8
+    arm_sadd16,                                // llvm.arm.sadd16
+    arm_sadd8,                                 // llvm.arm.sadd8
+    arm_sasx,                                  // llvm.arm.sasx
+    arm_sel,                                   // llvm.arm.sel
+    arm_set_fpscr,                             // llvm.arm.set.fpscr
+    arm_shadd16,                               // llvm.arm.shadd16
+    arm_shadd8,                                // llvm.arm.shadd8
+    arm_shasx,                                 // llvm.arm.shasx
+    arm_shsax,                                 // llvm.arm.shsax
+    arm_shsub16,                               // llvm.arm.shsub16
+    arm_shsub8,                                // llvm.arm.shsub8
+    arm_smlabb,                                // llvm.arm.smlabb
+    arm_smlabt,                                // llvm.arm.smlabt
+    arm_smlad,                                 // llvm.arm.smlad
+    arm_smladx,                                // llvm.arm.smladx
+    arm_smlald,                                // llvm.arm.smlald
+    arm_smlaldx,                               // llvm.arm.smlaldx
+    arm_smlatb,                                // llvm.arm.smlatb
+    arm_smlatt,                                // llvm.arm.smlatt
+    arm_smlawb,                                // llvm.arm.smlawb
+    arm_smlawt,                                // llvm.arm.smlawt
+    arm_smlsd,                                 // llvm.arm.smlsd
+    arm_smlsdx,                                // llvm.arm.smlsdx
+    arm_smlsld,                                // llvm.arm.smlsld
+    arm_smlsldx,                               // llvm.arm.smlsldx
+    arm_smuad,                                 // llvm.arm.smuad
+    arm_smuadx,                                // llvm.arm.smuadx
+    arm_smulbb,                                // llvm.arm.smulbb
+    arm_smulbt,                                // llvm.arm.smulbt
+    arm_smultb,                                // llvm.arm.smultb
+    arm_smultt,                                // llvm.arm.smultt
+    arm_smulwb,                                // llvm.arm.smulwb
+    arm_smulwt,                                // llvm.arm.smulwt
+    arm_smusd,                                 // llvm.arm.smusd
+    arm_smusdx,                                // llvm.arm.smusdx
+    arm_space,                                 // llvm.arm.space
+    arm_ssat,                                  // llvm.arm.ssat
+    arm_ssat16,                                // llvm.arm.ssat16
+    arm_ssax,                                  // llvm.arm.ssax
+    arm_ssub16,                                // llvm.arm.ssub16
+    arm_ssub8,                                 // llvm.arm.ssub8
+    arm_stc,                                   // llvm.arm.stc
+    arm_stc2,                                  // llvm.arm.stc2
+    arm_stc2l,                                 // llvm.arm.stc2l
+    arm_stcl,                                  // llvm.arm.stcl
+    arm_stlex,                                 // llvm.arm.stlex
+    arm_stlexd,                                // llvm.arm.stlexd
+    arm_strex,                                 // llvm.arm.strex
+    arm_strexd,                                // llvm.arm.strexd
+    arm_sxtab16,                               // llvm.arm.sxtab16
+    arm_sxtb16,                                // llvm.arm.sxtb16
+    arm_uadd16,                                // llvm.arm.uadd16
+    arm_uadd8,                                 // llvm.arm.uadd8
+    arm_uasx,                                  // llvm.arm.uasx
+    arm_uhadd16,                               // llvm.arm.uhadd16
+    arm_uhadd8,                                // llvm.arm.uhadd8
+    arm_uhasx,                                 // llvm.arm.uhasx
+    arm_uhsax,                                 // llvm.arm.uhsax
+    arm_uhsub16,                               // llvm.arm.uhsub16
+    arm_uhsub8,                                // llvm.arm.uhsub8
+    arm_undefined,                             // llvm.arm.undefined
+    arm_uqadd16,                               // llvm.arm.uqadd16
+    arm_uqadd8,                                // llvm.arm.uqadd8
+    arm_uqasx,                                 // llvm.arm.uqasx
+    arm_uqsax,                                 // llvm.arm.uqsax
+    arm_uqsub16,                               // llvm.arm.uqsub16
+    arm_uqsub8,                                // llvm.arm.uqsub8
+    arm_usad8,                                 // llvm.arm.usad8
+    arm_usada8,                                // llvm.arm.usada8
+    arm_usat,                                  // llvm.arm.usat
+    arm_usat16,                                // llvm.arm.usat16
+    arm_usax,                                  // llvm.arm.usax
+    arm_usub16,                                // llvm.arm.usub16
+    arm_usub8,                                 // llvm.arm.usub8
+    arm_uxtab16,                               // llvm.arm.uxtab16
+    arm_uxtb16,                                // llvm.arm.uxtb16
+    arm_vcvtr,                                 // llvm.arm.vcvtr
+    arm_vcvtru,                                // llvm.arm.vcvtru
+    bpf_load_byte,                             // llvm.bpf.load.byte
+    bpf_load_half,                             // llvm.bpf.load.half
+    bpf_load_word,                             // llvm.bpf.load.word
+    bpf_pseudo,                                // llvm.bpf.pseudo
+    hexagon_A2_abs,                            // llvm.hexagon.A2.abs
+    hexagon_A2_absp,                           // llvm.hexagon.A2.absp
+    hexagon_A2_abssat,                         // llvm.hexagon.A2.abssat
+    hexagon_A2_add,                            // llvm.hexagon.A2.add
+    hexagon_A2_addh_h16_hh,                    // llvm.hexagon.A2.addh.h16.hh
+    hexagon_A2_addh_h16_hl,                    // llvm.hexagon.A2.addh.h16.hl
+    hexagon_A2_addh_h16_lh,                    // llvm.hexagon.A2.addh.h16.lh
+    hexagon_A2_addh_h16_ll,                    // llvm.hexagon.A2.addh.h16.ll
+    hexagon_A2_addh_h16_sat_hh,                // llvm.hexagon.A2.addh.h16.sat.hh
+    hexagon_A2_addh_h16_sat_hl,                // llvm.hexagon.A2.addh.h16.sat.hl
+    hexagon_A2_addh_h16_sat_lh,                // llvm.hexagon.A2.addh.h16.sat.lh
+    hexagon_A2_addh_h16_sat_ll,                // llvm.hexagon.A2.addh.h16.sat.ll
+    hexagon_A2_addh_l16_hl,                    // llvm.hexagon.A2.addh.l16.hl
+    hexagon_A2_addh_l16_ll,                    // llvm.hexagon.A2.addh.l16.ll
+    hexagon_A2_addh_l16_sat_hl,                // llvm.hexagon.A2.addh.l16.sat.hl
+    hexagon_A2_addh_l16_sat_ll,                // llvm.hexagon.A2.addh.l16.sat.ll
+    hexagon_A2_addi,                           // llvm.hexagon.A2.addi
+    hexagon_A2_addp,                           // llvm.hexagon.A2.addp
+    hexagon_A2_addpsat,                        // llvm.hexagon.A2.addpsat
+    hexagon_A2_addsat,                         // llvm.hexagon.A2.addsat
+    hexagon_A2_addsp,                          // llvm.hexagon.A2.addsp
+    hexagon_A2_and,                            // llvm.hexagon.A2.and
+    hexagon_A2_andir,                          // llvm.hexagon.A2.andir
+    hexagon_A2_andp,                           // llvm.hexagon.A2.andp
+    hexagon_A2_aslh,                           // llvm.hexagon.A2.aslh
+    hexagon_A2_asrh,                           // llvm.hexagon.A2.asrh
+    hexagon_A2_combine_hh,                     // llvm.hexagon.A2.combine.hh
+    hexagon_A2_combine_hl,                     // llvm.hexagon.A2.combine.hl
+    hexagon_A2_combine_lh,                     // llvm.hexagon.A2.combine.lh
+    hexagon_A2_combine_ll,                     // llvm.hexagon.A2.combine.ll
+    hexagon_A2_combineii,                      // llvm.hexagon.A2.combineii
+    hexagon_A2_combinew,                       // llvm.hexagon.A2.combinew
+    hexagon_A2_max,                            // llvm.hexagon.A2.max
+    hexagon_A2_maxp,                           // llvm.hexagon.A2.maxp
+    hexagon_A2_maxu,                           // llvm.hexagon.A2.maxu
+    hexagon_A2_maxup,                          // llvm.hexagon.A2.maxup
+    hexagon_A2_min,                            // llvm.hexagon.A2.min
+    hexagon_A2_minp,                           // llvm.hexagon.A2.minp
+    hexagon_A2_minu,                           // llvm.hexagon.A2.minu
+    hexagon_A2_minup,                          // llvm.hexagon.A2.minup
+    hexagon_A2_neg,                            // llvm.hexagon.A2.neg
+    hexagon_A2_negp,                           // llvm.hexagon.A2.negp
+    hexagon_A2_negsat,                         // llvm.hexagon.A2.negsat
+    hexagon_A2_not,                            // llvm.hexagon.A2.not
+    hexagon_A2_notp,                           // llvm.hexagon.A2.notp
+    hexagon_A2_or,                             // llvm.hexagon.A2.or
+    hexagon_A2_orir,                           // llvm.hexagon.A2.orir
+    hexagon_A2_orp,                            // llvm.hexagon.A2.orp
+    hexagon_A2_roundsat,                       // llvm.hexagon.A2.roundsat
+    hexagon_A2_sat,                            // llvm.hexagon.A2.sat
+    hexagon_A2_satb,                           // llvm.hexagon.A2.satb
+    hexagon_A2_sath,                           // llvm.hexagon.A2.sath
+    hexagon_A2_satub,                          // llvm.hexagon.A2.satub
+    hexagon_A2_satuh,                          // llvm.hexagon.A2.satuh
+    hexagon_A2_sub,                            // llvm.hexagon.A2.sub
+    hexagon_A2_subh_h16_hh,                    // llvm.hexagon.A2.subh.h16.hh
+    hexagon_A2_subh_h16_hl,                    // llvm.hexagon.A2.subh.h16.hl
+    hexagon_A2_subh_h16_lh,                    // llvm.hexagon.A2.subh.h16.lh
+    hexagon_A2_subh_h16_ll,                    // llvm.hexagon.A2.subh.h16.ll
+    hexagon_A2_subh_h16_sat_hh,                // llvm.hexagon.A2.subh.h16.sat.hh
+    hexagon_A2_subh_h16_sat_hl,                // llvm.hexagon.A2.subh.h16.sat.hl
+    hexagon_A2_subh_h16_sat_lh,                // llvm.hexagon.A2.subh.h16.sat.lh
+    hexagon_A2_subh_h16_sat_ll,                // llvm.hexagon.A2.subh.h16.sat.ll
+    hexagon_A2_subh_l16_hl,                    // llvm.hexagon.A2.subh.l16.hl
+    hexagon_A2_subh_l16_ll,                    // llvm.hexagon.A2.subh.l16.ll
+    hexagon_A2_subh_l16_sat_hl,                // llvm.hexagon.A2.subh.l16.sat.hl
+    hexagon_A2_subh_l16_sat_ll,                // llvm.hexagon.A2.subh.l16.sat.ll
+    hexagon_A2_subp,                           // llvm.hexagon.A2.subp
+    hexagon_A2_subri,                          // llvm.hexagon.A2.subri
+    hexagon_A2_subsat,                         // llvm.hexagon.A2.subsat
+    hexagon_A2_svaddh,                         // llvm.hexagon.A2.svaddh
+    hexagon_A2_svaddhs,                        // llvm.hexagon.A2.svaddhs
+    hexagon_A2_svadduhs,                       // llvm.hexagon.A2.svadduhs
+    hexagon_A2_svavgh,                         // llvm.hexagon.A2.svavgh
+    hexagon_A2_svavghs,                        // llvm.hexagon.A2.svavghs
+    hexagon_A2_svnavgh,                        // llvm.hexagon.A2.svnavgh
+    hexagon_A2_svsubh,                         // llvm.hexagon.A2.svsubh
+    hexagon_A2_svsubhs,                        // llvm.hexagon.A2.svsubhs
+    hexagon_A2_svsubuhs,                       // llvm.hexagon.A2.svsubuhs
+    hexagon_A2_swiz,                           // llvm.hexagon.A2.swiz
+    hexagon_A2_sxtb,                           // llvm.hexagon.A2.sxtb
+    hexagon_A2_sxth,                           // llvm.hexagon.A2.sxth
+    hexagon_A2_sxtw,                           // llvm.hexagon.A2.sxtw
+    hexagon_A2_tfr,                            // llvm.hexagon.A2.tfr
+    hexagon_A2_tfrih,                          // llvm.hexagon.A2.tfrih
+    hexagon_A2_tfril,                          // llvm.hexagon.A2.tfril
+    hexagon_A2_tfrp,                           // llvm.hexagon.A2.tfrp
+    hexagon_A2_tfrpi,                          // llvm.hexagon.A2.tfrpi
+    hexagon_A2_tfrsi,                          // llvm.hexagon.A2.tfrsi
+    hexagon_A2_vabsh,                          // llvm.hexagon.A2.vabsh
+    hexagon_A2_vabshsat,                       // llvm.hexagon.A2.vabshsat
+    hexagon_A2_vabsw,                          // llvm.hexagon.A2.vabsw
+    hexagon_A2_vabswsat,                       // llvm.hexagon.A2.vabswsat
+    hexagon_A2_vaddb_map,                      // llvm.hexagon.A2.vaddb.map
+    hexagon_A2_vaddh,                          // llvm.hexagon.A2.vaddh
+    hexagon_A2_vaddhs,                         // llvm.hexagon.A2.vaddhs
+    hexagon_A2_vaddub,                         // llvm.hexagon.A2.vaddub
+    hexagon_A2_vaddubs,                        // llvm.hexagon.A2.vaddubs
+    hexagon_A2_vadduhs,                        // llvm.hexagon.A2.vadduhs
+    hexagon_A2_vaddw,                          // llvm.hexagon.A2.vaddw
+    hexagon_A2_vaddws,                         // llvm.hexagon.A2.vaddws
+    hexagon_A2_vavgh,                          // llvm.hexagon.A2.vavgh
+    hexagon_A2_vavghcr,                        // llvm.hexagon.A2.vavghcr
+    hexagon_A2_vavghr,                         // llvm.hexagon.A2.vavghr
+    hexagon_A2_vavgub,                         // llvm.hexagon.A2.vavgub
+    hexagon_A2_vavgubr,                        // llvm.hexagon.A2.vavgubr
+    hexagon_A2_vavguh,                         // llvm.hexagon.A2.vavguh
+    hexagon_A2_vavguhr,                        // llvm.hexagon.A2.vavguhr
+    hexagon_A2_vavguw,                         // llvm.hexagon.A2.vavguw
+    hexagon_A2_vavguwr,                        // llvm.hexagon.A2.vavguwr
+    hexagon_A2_vavgw,                          // llvm.hexagon.A2.vavgw
+    hexagon_A2_vavgwcr,                        // llvm.hexagon.A2.vavgwcr
+    hexagon_A2_vavgwr,                         // llvm.hexagon.A2.vavgwr
+    hexagon_A2_vcmpbeq,                        // llvm.hexagon.A2.vcmpbeq
+    hexagon_A2_vcmpbgtu,                       // llvm.hexagon.A2.vcmpbgtu
+    hexagon_A2_vcmpheq,                        // llvm.hexagon.A2.vcmpheq
+    hexagon_A2_vcmphgt,                        // llvm.hexagon.A2.vcmphgt
+    hexagon_A2_vcmphgtu,                       // llvm.hexagon.A2.vcmphgtu
+    hexagon_A2_vcmpweq,                        // llvm.hexagon.A2.vcmpweq
+    hexagon_A2_vcmpwgt,                        // llvm.hexagon.A2.vcmpwgt
+    hexagon_A2_vcmpwgtu,                       // llvm.hexagon.A2.vcmpwgtu
+    hexagon_A2_vconj,                          // llvm.hexagon.A2.vconj
+    hexagon_A2_vmaxb,                          // llvm.hexagon.A2.vmaxb
+    hexagon_A2_vmaxh,                          // llvm.hexagon.A2.vmaxh
+    hexagon_A2_vmaxub,                         // llvm.hexagon.A2.vmaxub
+    hexagon_A2_vmaxuh,                         // llvm.hexagon.A2.vmaxuh
+    hexagon_A2_vmaxuw,                         // llvm.hexagon.A2.vmaxuw
+    hexagon_A2_vmaxw,                          // llvm.hexagon.A2.vmaxw
+    hexagon_A2_vminb,                          // llvm.hexagon.A2.vminb
+    hexagon_A2_vminh,                          // llvm.hexagon.A2.vminh
+    hexagon_A2_vminub,                         // llvm.hexagon.A2.vminub
+    hexagon_A2_vminuh,                         // llvm.hexagon.A2.vminuh
+    hexagon_A2_vminuw,                         // llvm.hexagon.A2.vminuw
+    hexagon_A2_vminw,                          // llvm.hexagon.A2.vminw
+    hexagon_A2_vnavgh,                         // llvm.hexagon.A2.vnavgh
+    hexagon_A2_vnavghcr,                       // llvm.hexagon.A2.vnavghcr
+    hexagon_A2_vnavghr,                        // llvm.hexagon.A2.vnavghr
+    hexagon_A2_vnavgw,                         // llvm.hexagon.A2.vnavgw
+    hexagon_A2_vnavgwcr,                       // llvm.hexagon.A2.vnavgwcr
+    hexagon_A2_vnavgwr,                        // llvm.hexagon.A2.vnavgwr
+    hexagon_A2_vraddub,                        // llvm.hexagon.A2.vraddub
+    hexagon_A2_vraddub_acc,                    // llvm.hexagon.A2.vraddub.acc
+    hexagon_A2_vrsadub,                        // llvm.hexagon.A2.vrsadub
+    hexagon_A2_vrsadub_acc,                    // llvm.hexagon.A2.vrsadub.acc
+    hexagon_A2_vsubb_map,                      // llvm.hexagon.A2.vsubb.map
+    hexagon_A2_vsubh,                          // llvm.hexagon.A2.vsubh
+    hexagon_A2_vsubhs,                         // llvm.hexagon.A2.vsubhs
+    hexagon_A2_vsubub,                         // llvm.hexagon.A2.vsubub
+    hexagon_A2_vsububs,                        // llvm.hexagon.A2.vsububs
+    hexagon_A2_vsubuhs,                        // llvm.hexagon.A2.vsubuhs
+    hexagon_A2_vsubw,                          // llvm.hexagon.A2.vsubw
+    hexagon_A2_vsubws,                         // llvm.hexagon.A2.vsubws
+    hexagon_A2_xor,                            // llvm.hexagon.A2.xor
+    hexagon_A2_xorp,                           // llvm.hexagon.A2.xorp
+    hexagon_A2_zxtb,                           // llvm.hexagon.A2.zxtb
+    hexagon_A2_zxth,                           // llvm.hexagon.A2.zxth
+    hexagon_A4_andn,                           // llvm.hexagon.A4.andn
+    hexagon_A4_andnp,                          // llvm.hexagon.A4.andnp
+    hexagon_A4_bitsplit,                       // llvm.hexagon.A4.bitsplit
+    hexagon_A4_bitspliti,                      // llvm.hexagon.A4.bitspliti
+    hexagon_A4_boundscheck,                    // llvm.hexagon.A4.boundscheck
+    hexagon_A4_cmpbeq,                         // llvm.hexagon.A4.cmpbeq
+    hexagon_A4_cmpbeqi,                        // llvm.hexagon.A4.cmpbeqi
+    hexagon_A4_cmpbgt,                         // llvm.hexagon.A4.cmpbgt
+    hexagon_A4_cmpbgti,                        // llvm.hexagon.A4.cmpbgti
+    hexagon_A4_cmpbgtu,                        // llvm.hexagon.A4.cmpbgtu
+    hexagon_A4_cmpbgtui,                       // llvm.hexagon.A4.cmpbgtui
+    hexagon_A4_cmpheq,                         // llvm.hexagon.A4.cmpheq
+    hexagon_A4_cmpheqi,                        // llvm.hexagon.A4.cmpheqi
+    hexagon_A4_cmphgt,                         // llvm.hexagon.A4.cmphgt
+    hexagon_A4_cmphgti,                        // llvm.hexagon.A4.cmphgti
+    hexagon_A4_cmphgtu,                        // llvm.hexagon.A4.cmphgtu
+    hexagon_A4_cmphgtui,                       // llvm.hexagon.A4.cmphgtui
+    hexagon_A4_combineir,                      // llvm.hexagon.A4.combineir
+    hexagon_A4_combineri,                      // llvm.hexagon.A4.combineri
+    hexagon_A4_cround_ri,                      // llvm.hexagon.A4.cround.ri
+    hexagon_A4_cround_rr,                      // llvm.hexagon.A4.cround.rr
+    hexagon_A4_modwrapu,                       // llvm.hexagon.A4.modwrapu
+    hexagon_A4_orn,                            // llvm.hexagon.A4.orn
+    hexagon_A4_ornp,                           // llvm.hexagon.A4.ornp
+    hexagon_A4_rcmpeq,                         // llvm.hexagon.A4.rcmpeq
+    hexagon_A4_rcmpeqi,                        // llvm.hexagon.A4.rcmpeqi
+    hexagon_A4_rcmpneq,                        // llvm.hexagon.A4.rcmpneq
+    hexagon_A4_rcmpneqi,                       // llvm.hexagon.A4.rcmpneqi
+    hexagon_A4_round_ri,                       // llvm.hexagon.A4.round.ri
+    hexagon_A4_round_ri_sat,                   // llvm.hexagon.A4.round.ri.sat
+    hexagon_A4_round_rr,                       // llvm.hexagon.A4.round.rr
+    hexagon_A4_round_rr_sat,                   // llvm.hexagon.A4.round.rr.sat
+    hexagon_A4_tlbmatch,                       // llvm.hexagon.A4.tlbmatch
+    hexagon_A4_vcmpbeq_any,                    // llvm.hexagon.A4.vcmpbeq.any
+    hexagon_A4_vcmpbeqi,                       // llvm.hexagon.A4.vcmpbeqi
+    hexagon_A4_vcmpbgt,                        // llvm.hexagon.A4.vcmpbgt
+    hexagon_A4_vcmpbgti,                       // llvm.hexagon.A4.vcmpbgti
+    hexagon_A4_vcmpbgtui,                      // llvm.hexagon.A4.vcmpbgtui
+    hexagon_A4_vcmpheqi,                       // llvm.hexagon.A4.vcmpheqi
+    hexagon_A4_vcmphgti,                       // llvm.hexagon.A4.vcmphgti
+    hexagon_A4_vcmphgtui,                      // llvm.hexagon.A4.vcmphgtui
+    hexagon_A4_vcmpweqi,                       // llvm.hexagon.A4.vcmpweqi
+    hexagon_A4_vcmpwgti,                       // llvm.hexagon.A4.vcmpwgti
+    hexagon_A4_vcmpwgtui,                      // llvm.hexagon.A4.vcmpwgtui
+    hexagon_A4_vrmaxh,                         // llvm.hexagon.A4.vrmaxh
+    hexagon_A4_vrmaxuh,                        // llvm.hexagon.A4.vrmaxuh
+    hexagon_A4_vrmaxuw,                        // llvm.hexagon.A4.vrmaxuw
+    hexagon_A4_vrmaxw,                         // llvm.hexagon.A4.vrmaxw
+    hexagon_A4_vrminh,                         // llvm.hexagon.A4.vrminh
+    hexagon_A4_vrminuh,                        // llvm.hexagon.A4.vrminuh
+    hexagon_A4_vrminuw,                        // llvm.hexagon.A4.vrminuw
+    hexagon_A4_vrminw,                         // llvm.hexagon.A4.vrminw
+    hexagon_A5_vaddhubs,                       // llvm.hexagon.A5.vaddhubs
+    hexagon_A6_vcmpbeq_notany,                 // llvm.hexagon.A6.vcmpbeq.notany
+    hexagon_A6_vcmpbeq_notany_128B,            // llvm.hexagon.A6.vcmpbeq.notany.128B
+    hexagon_C2_all8,                           // llvm.hexagon.C2.all8
+    hexagon_C2_and,                            // llvm.hexagon.C2.and
+    hexagon_C2_andn,                           // llvm.hexagon.C2.andn
+    hexagon_C2_any8,                           // llvm.hexagon.C2.any8
+    hexagon_C2_bitsclr,                        // llvm.hexagon.C2.bitsclr
+    hexagon_C2_bitsclri,                       // llvm.hexagon.C2.bitsclri
+    hexagon_C2_bitsset,                        // llvm.hexagon.C2.bitsset
+    hexagon_C2_cmpeq,                          // llvm.hexagon.C2.cmpeq
+    hexagon_C2_cmpeqi,                         // llvm.hexagon.C2.cmpeqi
+    hexagon_C2_cmpeqp,                         // llvm.hexagon.C2.cmpeqp
+    hexagon_C2_cmpgei,                         // llvm.hexagon.C2.cmpgei
+    hexagon_C2_cmpgeui,                        // llvm.hexagon.C2.cmpgeui
+    hexagon_C2_cmpgt,                          // llvm.hexagon.C2.cmpgt
+    hexagon_C2_cmpgti,                         // llvm.hexagon.C2.cmpgti
+    hexagon_C2_cmpgtp,                         // llvm.hexagon.C2.cmpgtp
+    hexagon_C2_cmpgtu,                         // llvm.hexagon.C2.cmpgtu
+    hexagon_C2_cmpgtui,                        // llvm.hexagon.C2.cmpgtui
+    hexagon_C2_cmpgtup,                        // llvm.hexagon.C2.cmpgtup
+    hexagon_C2_cmplt,                          // llvm.hexagon.C2.cmplt
+    hexagon_C2_cmpltu,                         // llvm.hexagon.C2.cmpltu
+    hexagon_C2_mask,                           // llvm.hexagon.C2.mask
+    hexagon_C2_mux,                            // llvm.hexagon.C2.mux
+    hexagon_C2_muxii,                          // llvm.hexagon.C2.muxii
+    hexagon_C2_muxir,                          // llvm.hexagon.C2.muxir
+    hexagon_C2_muxri,                          // llvm.hexagon.C2.muxri
+    hexagon_C2_not,                            // llvm.hexagon.C2.not
+    hexagon_C2_or,                             // llvm.hexagon.C2.or
+    hexagon_C2_orn,                            // llvm.hexagon.C2.orn
+    hexagon_C2_pxfer_map,                      // llvm.hexagon.C2.pxfer.map
+    hexagon_C2_tfrpr,                          // llvm.hexagon.C2.tfrpr
+    hexagon_C2_tfrrp,                          // llvm.hexagon.C2.tfrrp
+    hexagon_C2_vitpack,                        // llvm.hexagon.C2.vitpack
+    hexagon_C2_vmux,                           // llvm.hexagon.C2.vmux
+    hexagon_C2_xor,                            // llvm.hexagon.C2.xor
+    hexagon_C4_and_and,                        // llvm.hexagon.C4.and.and
+    hexagon_C4_and_andn,                       // llvm.hexagon.C4.and.andn
+    hexagon_C4_and_or,                         // llvm.hexagon.C4.and.or
+    hexagon_C4_and_orn,                        // llvm.hexagon.C4.and.orn
+    hexagon_C4_cmplte,                         // llvm.hexagon.C4.cmplte
+    hexagon_C4_cmpltei,                        // llvm.hexagon.C4.cmpltei
+    hexagon_C4_cmplteu,                        // llvm.hexagon.C4.cmplteu
+    hexagon_C4_cmplteui,                       // llvm.hexagon.C4.cmplteui
+    hexagon_C4_cmpneq,                         // llvm.hexagon.C4.cmpneq
+    hexagon_C4_cmpneqi,                        // llvm.hexagon.C4.cmpneqi
+    hexagon_C4_fastcorner9,                    // llvm.hexagon.C4.fastcorner9
+    hexagon_C4_fastcorner9_not,                // llvm.hexagon.C4.fastcorner9.not
+    hexagon_C4_nbitsclr,                       // llvm.hexagon.C4.nbitsclr
+    hexagon_C4_nbitsclri,                      // llvm.hexagon.C4.nbitsclri
+    hexagon_C4_nbitsset,                       // llvm.hexagon.C4.nbitsset
+    hexagon_C4_or_and,                         // llvm.hexagon.C4.or.and
+    hexagon_C4_or_andn,                        // llvm.hexagon.C4.or.andn
+    hexagon_C4_or_or,                          // llvm.hexagon.C4.or.or
+    hexagon_C4_or_orn,                         // llvm.hexagon.C4.or.orn
+    hexagon_F2_conv_d2df,                      // llvm.hexagon.F2.conv.d2df
+    hexagon_F2_conv_d2sf,                      // llvm.hexagon.F2.conv.d2sf
+    hexagon_F2_conv_df2d,                      // llvm.hexagon.F2.conv.df2d
+    hexagon_F2_conv_df2d_chop,                 // llvm.hexagon.F2.conv.df2d.chop
+    hexagon_F2_conv_df2sf,                     // llvm.hexagon.F2.conv.df2sf
+    hexagon_F2_conv_df2ud,                     // llvm.hexagon.F2.conv.df2ud
+    hexagon_F2_conv_df2ud_chop,                // llvm.hexagon.F2.conv.df2ud.chop
+    hexagon_F2_conv_df2uw,                     // llvm.hexagon.F2.conv.df2uw
+    hexagon_F2_conv_df2uw_chop,                // llvm.hexagon.F2.conv.df2uw.chop
+    hexagon_F2_conv_df2w,                      // llvm.hexagon.F2.conv.df2w
+    hexagon_F2_conv_df2w_chop,                 // llvm.hexagon.F2.conv.df2w.chop
+    hexagon_F2_conv_sf2d,                      // llvm.hexagon.F2.conv.sf2d
+    hexagon_F2_conv_sf2d_chop,                 // llvm.hexagon.F2.conv.sf2d.chop
+    hexagon_F2_conv_sf2df,                     // llvm.hexagon.F2.conv.sf2df
+    hexagon_F2_conv_sf2ud,                     // llvm.hexagon.F2.conv.sf2ud
+    hexagon_F2_conv_sf2ud_chop,                // llvm.hexagon.F2.conv.sf2ud.chop
+    hexagon_F2_conv_sf2uw,                     // llvm.hexagon.F2.conv.sf2uw
+    hexagon_F2_conv_sf2uw_chop,                // llvm.hexagon.F2.conv.sf2uw.chop
+    hexagon_F2_conv_sf2w,                      // llvm.hexagon.F2.conv.sf2w
+    hexagon_F2_conv_sf2w_chop,                 // llvm.hexagon.F2.conv.sf2w.chop
+    hexagon_F2_conv_ud2df,                     // llvm.hexagon.F2.conv.ud2df
+    hexagon_F2_conv_ud2sf,                     // llvm.hexagon.F2.conv.ud2sf
+    hexagon_F2_conv_uw2df,                     // llvm.hexagon.F2.conv.uw2df
+    hexagon_F2_conv_uw2sf,                     // llvm.hexagon.F2.conv.uw2sf
+    hexagon_F2_conv_w2df,                      // llvm.hexagon.F2.conv.w2df
+    hexagon_F2_conv_w2sf,                      // llvm.hexagon.F2.conv.w2sf
+    hexagon_F2_dfclass,                        // llvm.hexagon.F2.dfclass
+    hexagon_F2_dfcmpeq,                        // llvm.hexagon.F2.dfcmpeq
+    hexagon_F2_dfcmpge,                        // llvm.hexagon.F2.dfcmpge
+    hexagon_F2_dfcmpgt,                        // llvm.hexagon.F2.dfcmpgt
+    hexagon_F2_dfcmpuo,                        // llvm.hexagon.F2.dfcmpuo
+    hexagon_F2_dfimm_n,                        // llvm.hexagon.F2.dfimm.n
+    hexagon_F2_dfimm_p,                        // llvm.hexagon.F2.dfimm.p
+    hexagon_F2_sfadd,                          // llvm.hexagon.F2.sfadd
+    hexagon_F2_sfclass,                        // llvm.hexagon.F2.sfclass
+    hexagon_F2_sfcmpeq,                        // llvm.hexagon.F2.sfcmpeq
+    hexagon_F2_sfcmpge,                        // llvm.hexagon.F2.sfcmpge
+    hexagon_F2_sfcmpgt,                        // llvm.hexagon.F2.sfcmpgt
+    hexagon_F2_sfcmpuo,                        // llvm.hexagon.F2.sfcmpuo
+    hexagon_F2_sffixupd,                       // llvm.hexagon.F2.sffixupd
+    hexagon_F2_sffixupn,                       // llvm.hexagon.F2.sffixupn
+    hexagon_F2_sffixupr,                       // llvm.hexagon.F2.sffixupr
+    hexagon_F2_sffma,                          // llvm.hexagon.F2.sffma
+    hexagon_F2_sffma_lib,                      // llvm.hexagon.F2.sffma.lib
+    hexagon_F2_sffma_sc,                       // llvm.hexagon.F2.sffma.sc
+    hexagon_F2_sffms,                          // llvm.hexagon.F2.sffms
+    hexagon_F2_sffms_lib,                      // llvm.hexagon.F2.sffms.lib
+    hexagon_F2_sfimm_n,                        // llvm.hexagon.F2.sfimm.n
+    hexagon_F2_sfimm_p,                        // llvm.hexagon.F2.sfimm.p
+    hexagon_F2_sfmax,                          // llvm.hexagon.F2.sfmax
+    hexagon_F2_sfmin,                          // llvm.hexagon.F2.sfmin
+    hexagon_F2_sfmpy,                          // llvm.hexagon.F2.sfmpy
+    hexagon_F2_sfsub,                          // llvm.hexagon.F2.sfsub
+    hexagon_L2_loadrb_pbr,                     // llvm.hexagon.L2.loadrb.pbr
+    hexagon_L2_loadrb_pci,                     // llvm.hexagon.L2.loadrb.pci
+    hexagon_L2_loadrb_pcr,                     // llvm.hexagon.L2.loadrb.pcr
+    hexagon_L2_loadrd_pbr,                     // llvm.hexagon.L2.loadrd.pbr
+    hexagon_L2_loadrd_pci,                     // llvm.hexagon.L2.loadrd.pci
+    hexagon_L2_loadrd_pcr,                     // llvm.hexagon.L2.loadrd.pcr
+    hexagon_L2_loadrh_pbr,                     // llvm.hexagon.L2.loadrh.pbr
+    hexagon_L2_loadrh_pci,                     // llvm.hexagon.L2.loadrh.pci
+    hexagon_L2_loadrh_pcr,                     // llvm.hexagon.L2.loadrh.pcr
+    hexagon_L2_loadri_pbr,                     // llvm.hexagon.L2.loadri.pbr
+    hexagon_L2_loadri_pci,                     // llvm.hexagon.L2.loadri.pci
+    hexagon_L2_loadri_pcr,                     // llvm.hexagon.L2.loadri.pcr
+    hexagon_L2_loadrub_pbr,                    // llvm.hexagon.L2.loadrub.pbr
+    hexagon_L2_loadrub_pci,                    // llvm.hexagon.L2.loadrub.pci
+    hexagon_L2_loadrub_pcr,                    // llvm.hexagon.L2.loadrub.pcr
+    hexagon_L2_loadruh_pbr,                    // llvm.hexagon.L2.loadruh.pbr
+    hexagon_L2_loadruh_pci,                    // llvm.hexagon.L2.loadruh.pci
+    hexagon_L2_loadruh_pcr,                    // llvm.hexagon.L2.loadruh.pcr
+    hexagon_L2_loadw_locked,                   // llvm.hexagon.L2.loadw.locked
+    hexagon_L4_loadd_locked,                   // llvm.hexagon.L4.loadd.locked
+    hexagon_M2_acci,                           // llvm.hexagon.M2.acci
+    hexagon_M2_accii,                          // llvm.hexagon.M2.accii
+    hexagon_M2_cmaci_s0,                       // llvm.hexagon.M2.cmaci.s0
+    hexagon_M2_cmacr_s0,                       // llvm.hexagon.M2.cmacr.s0
+    hexagon_M2_cmacs_s0,                       // llvm.hexagon.M2.cmacs.s0
+    hexagon_M2_cmacs_s1,                       // llvm.hexagon.M2.cmacs.s1
+    hexagon_M2_cmacsc_s0,                      // llvm.hexagon.M2.cmacsc.s0
+    hexagon_M2_cmacsc_s1,                      // llvm.hexagon.M2.cmacsc.s1
+    hexagon_M2_cmpyi_s0,                       // llvm.hexagon.M2.cmpyi.s0
+    hexagon_M2_cmpyr_s0,                       // llvm.hexagon.M2.cmpyr.s0
+    hexagon_M2_cmpyrs_s0,                      // llvm.hexagon.M2.cmpyrs.s0
+    hexagon_M2_cmpyrs_s1,                      // llvm.hexagon.M2.cmpyrs.s1
+    hexagon_M2_cmpyrsc_s0,                     // llvm.hexagon.M2.cmpyrsc.s0
+    hexagon_M2_cmpyrsc_s1,                     // llvm.hexagon.M2.cmpyrsc.s1
+    hexagon_M2_cmpys_s0,                       // llvm.hexagon.M2.cmpys.s0
+    hexagon_M2_cmpys_s1,                       // llvm.hexagon.M2.cmpys.s1
+    hexagon_M2_cmpysc_s0,                      // llvm.hexagon.M2.cmpysc.s0
+    hexagon_M2_cmpysc_s1,                      // llvm.hexagon.M2.cmpysc.s1
+    hexagon_M2_cnacs_s0,                       // llvm.hexagon.M2.cnacs.s0
+    hexagon_M2_cnacs_s1,                       // llvm.hexagon.M2.cnacs.s1
+    hexagon_M2_cnacsc_s0,                      // llvm.hexagon.M2.cnacsc.s0
+    hexagon_M2_cnacsc_s1,                      // llvm.hexagon.M2.cnacsc.s1
+    hexagon_M2_dpmpyss_acc_s0,                 // llvm.hexagon.M2.dpmpyss.acc.s0
+    hexagon_M2_dpmpyss_nac_s0,                 // llvm.hexagon.M2.dpmpyss.nac.s0
+    hexagon_M2_dpmpyss_rnd_s0,                 // llvm.hexagon.M2.dpmpyss.rnd.s0
+    hexagon_M2_dpmpyss_s0,                     // llvm.hexagon.M2.dpmpyss.s0
+    hexagon_M2_dpmpyuu_acc_s0,                 // llvm.hexagon.M2.dpmpyuu.acc.s0
+    hexagon_M2_dpmpyuu_nac_s0,                 // llvm.hexagon.M2.dpmpyuu.nac.s0
+    hexagon_M2_dpmpyuu_s0,                     // llvm.hexagon.M2.dpmpyuu.s0
+    hexagon_M2_hmmpyh_rs1,                     // llvm.hexagon.M2.hmmpyh.rs1
+    hexagon_M2_hmmpyh_s1,                      // llvm.hexagon.M2.hmmpyh.s1
+    hexagon_M2_hmmpyl_rs1,                     // llvm.hexagon.M2.hmmpyl.rs1
+    hexagon_M2_hmmpyl_s1,                      // llvm.hexagon.M2.hmmpyl.s1
+    hexagon_M2_maci,                           // llvm.hexagon.M2.maci
+    hexagon_M2_macsin,                         // llvm.hexagon.M2.macsin
+    hexagon_M2_macsip,                         // llvm.hexagon.M2.macsip
+    hexagon_M2_mmachs_rs0,                     // llvm.hexagon.M2.mmachs.rs0
+    hexagon_M2_mmachs_rs1,                     // llvm.hexagon.M2.mmachs.rs1
+    hexagon_M2_mmachs_s0,                      // llvm.hexagon.M2.mmachs.s0
+    hexagon_M2_mmachs_s1,                      // llvm.hexagon.M2.mmachs.s1
+    hexagon_M2_mmacls_rs0,                     // llvm.hexagon.M2.mmacls.rs0
+    hexagon_M2_mmacls_rs1,                     // llvm.hexagon.M2.mmacls.rs1
+    hexagon_M2_mmacls_s0,                      // llvm.hexagon.M2.mmacls.s0
+    hexagon_M2_mmacls_s1,                      // llvm.hexagon.M2.mmacls.s1
+    hexagon_M2_mmacuhs_rs0,                    // llvm.hexagon.M2.mmacuhs.rs0
+    hexagon_M2_mmacuhs_rs1,                    // llvm.hexagon.M2.mmacuhs.rs1
+    hexagon_M2_mmacuhs_s0,                     // llvm.hexagon.M2.mmacuhs.s0
+    hexagon_M2_mmacuhs_s1,                     // llvm.hexagon.M2.mmacuhs.s1
+    hexagon_M2_mmaculs_rs0,                    // llvm.hexagon.M2.mmaculs.rs0
+    hexagon_M2_mmaculs_rs1,                    // llvm.hexagon.M2.mmaculs.rs1
+    hexagon_M2_mmaculs_s0,                     // llvm.hexagon.M2.mmaculs.s0
+    hexagon_M2_mmaculs_s1,                     // llvm.hexagon.M2.mmaculs.s1
+    hexagon_M2_mmpyh_rs0,                      // llvm.hexagon.M2.mmpyh.rs0
+    hexagon_M2_mmpyh_rs1,                      // llvm.hexagon.M2.mmpyh.rs1
+    hexagon_M2_mmpyh_s0,                       // llvm.hexagon.M2.mmpyh.s0
+    hexagon_M2_mmpyh_s1,                       // llvm.hexagon.M2.mmpyh.s1
+    hexagon_M2_mmpyl_rs0,                      // llvm.hexagon.M2.mmpyl.rs0
+    hexagon_M2_mmpyl_rs1,                      // llvm.hexagon.M2.mmpyl.rs1
+    hexagon_M2_mmpyl_s0,                       // llvm.hexagon.M2.mmpyl.s0
+    hexagon_M2_mmpyl_s1,                       // llvm.hexagon.M2.mmpyl.s1
+    hexagon_M2_mmpyuh_rs0,                     // llvm.hexagon.M2.mmpyuh.rs0
+    hexagon_M2_mmpyuh_rs1,                     // llvm.hexagon.M2.mmpyuh.rs1
+    hexagon_M2_mmpyuh_s0,                      // llvm.hexagon.M2.mmpyuh.s0
+    hexagon_M2_mmpyuh_s1,                      // llvm.hexagon.M2.mmpyuh.s1
+    hexagon_M2_mmpyul_rs0,                     // llvm.hexagon.M2.mmpyul.rs0
+    hexagon_M2_mmpyul_rs1,                     // llvm.hexagon.M2.mmpyul.rs1
+    hexagon_M2_mmpyul_s0,                      // llvm.hexagon.M2.mmpyul.s0
+    hexagon_M2_mmpyul_s1,                      // llvm.hexagon.M2.mmpyul.s1
+    hexagon_M2_mpy_acc_hh_s0,                  // llvm.hexagon.M2.mpy.acc.hh.s0
+    hexagon_M2_mpy_acc_hh_s1,                  // llvm.hexagon.M2.mpy.acc.hh.s1
+    hexagon_M2_mpy_acc_hl_s0,                  // llvm.hexagon.M2.mpy.acc.hl.s0
+    hexagon_M2_mpy_acc_hl_s1,                  // llvm.hexagon.M2.mpy.acc.hl.s1
+    hexagon_M2_mpy_acc_lh_s0,                  // llvm.hexagon.M2.mpy.acc.lh.s0
+    hexagon_M2_mpy_acc_lh_s1,                  // llvm.hexagon.M2.mpy.acc.lh.s1
+    hexagon_M2_mpy_acc_ll_s0,                  // llvm.hexagon.M2.mpy.acc.ll.s0
+    hexagon_M2_mpy_acc_ll_s1,                  // llvm.hexagon.M2.mpy.acc.ll.s1
+    hexagon_M2_mpy_acc_sat_hh_s0,              // llvm.hexagon.M2.mpy.acc.sat.hh.s0
+    hexagon_M2_mpy_acc_sat_hh_s1,              // llvm.hexagon.M2.mpy.acc.sat.hh.s1
+    hexagon_M2_mpy_acc_sat_hl_s0,              // llvm.hexagon.M2.mpy.acc.sat.hl.s0
+    hexagon_M2_mpy_acc_sat_hl_s1,              // llvm.hexagon.M2.mpy.acc.sat.hl.s1
+    hexagon_M2_mpy_acc_sat_lh_s0,              // llvm.hexagon.M2.mpy.acc.sat.lh.s0
+    hexagon_M2_mpy_acc_sat_lh_s1,              // llvm.hexagon.M2.mpy.acc.sat.lh.s1
+    hexagon_M2_mpy_acc_sat_ll_s0,              // llvm.hexagon.M2.mpy.acc.sat.ll.s0
+    hexagon_M2_mpy_acc_sat_ll_s1,              // llvm.hexagon.M2.mpy.acc.sat.ll.s1
+    hexagon_M2_mpy_hh_s0,                      // llvm.hexagon.M2.mpy.hh.s0
+    hexagon_M2_mpy_hh_s1,                      // llvm.hexagon.M2.mpy.hh.s1
+    hexagon_M2_mpy_hl_s0,                      // llvm.hexagon.M2.mpy.hl.s0
+    hexagon_M2_mpy_hl_s1,                      // llvm.hexagon.M2.mpy.hl.s1
+    hexagon_M2_mpy_lh_s0,                      // llvm.hexagon.M2.mpy.lh.s0
+    hexagon_M2_mpy_lh_s1,                      // llvm.hexagon.M2.mpy.lh.s1
+    hexagon_M2_mpy_ll_s0,                      // llvm.hexagon.M2.mpy.ll.s0
+    hexagon_M2_mpy_ll_s1,                      // llvm.hexagon.M2.mpy.ll.s1
+    hexagon_M2_mpy_nac_hh_s0,                  // llvm.hexagon.M2.mpy.nac.hh.s0
+    hexagon_M2_mpy_nac_hh_s1,                  // llvm.hexagon.M2.mpy.nac.hh.s1
+    hexagon_M2_mpy_nac_hl_s0,                  // llvm.hexagon.M2.mpy.nac.hl.s0
+    hexagon_M2_mpy_nac_hl_s1,                  // llvm.hexagon.M2.mpy.nac.hl.s1
+    hexagon_M2_mpy_nac_lh_s0,                  // llvm.hexagon.M2.mpy.nac.lh.s0
+    hexagon_M2_mpy_nac_lh_s1,                  // llvm.hexagon.M2.mpy.nac.lh.s1
+    hexagon_M2_mpy_nac_ll_s0,                  // llvm.hexagon.M2.mpy.nac.ll.s0
+    hexagon_M2_mpy_nac_ll_s1,                  // llvm.hexagon.M2.mpy.nac.ll.s1
+    hexagon_M2_mpy_nac_sat_hh_s0,              // llvm.hexagon.M2.mpy.nac.sat.hh.s0
+    hexagon_M2_mpy_nac_sat_hh_s1,              // llvm.hexagon.M2.mpy.nac.sat.hh.s1
+    hexagon_M2_mpy_nac_sat_hl_s0,              // llvm.hexagon.M2.mpy.nac.sat.hl.s0
+    hexagon_M2_mpy_nac_sat_hl_s1,              // llvm.hexagon.M2.mpy.nac.sat.hl.s1
+    hexagon_M2_mpy_nac_sat_lh_s0,              // llvm.hexagon.M2.mpy.nac.sat.lh.s0
+    hexagon_M2_mpy_nac_sat_lh_s1,              // llvm.hexagon.M2.mpy.nac.sat.lh.s1
+    hexagon_M2_mpy_nac_sat_ll_s0,              // llvm.hexagon.M2.mpy.nac.sat.ll.s0
+    hexagon_M2_mpy_nac_sat_ll_s1,              // llvm.hexagon.M2.mpy.nac.sat.ll.s1
+    hexagon_M2_mpy_rnd_hh_s0,                  // llvm.hexagon.M2.mpy.rnd.hh.s0
+    hexagon_M2_mpy_rnd_hh_s1,                  // llvm.hexagon.M2.mpy.rnd.hh.s1
+    hexagon_M2_mpy_rnd_hl_s0,                  // llvm.hexagon.M2.mpy.rnd.hl.s0
+    hexagon_M2_mpy_rnd_hl_s1,                  // llvm.hexagon.M2.mpy.rnd.hl.s1
+    hexagon_M2_mpy_rnd_lh_s0,                  // llvm.hexagon.M2.mpy.rnd.lh.s0
+    hexagon_M2_mpy_rnd_lh_s1,                  // llvm.hexagon.M2.mpy.rnd.lh.s1
+    hexagon_M2_mpy_rnd_ll_s0,                  // llvm.hexagon.M2.mpy.rnd.ll.s0
+    hexagon_M2_mpy_rnd_ll_s1,                  // llvm.hexagon.M2.mpy.rnd.ll.s1
+    hexagon_M2_mpy_sat_hh_s0,                  // llvm.hexagon.M2.mpy.sat.hh.s0
+    hexagon_M2_mpy_sat_hh_s1,                  // llvm.hexagon.M2.mpy.sat.hh.s1
+    hexagon_M2_mpy_sat_hl_s0,                  // llvm.hexagon.M2.mpy.sat.hl.s0
+    hexagon_M2_mpy_sat_hl_s1,                  // llvm.hexagon.M2.mpy.sat.hl.s1
+    hexagon_M2_mpy_sat_lh_s0,                  // llvm.hexagon.M2.mpy.sat.lh.s0
+    hexagon_M2_mpy_sat_lh_s1,                  // llvm.hexagon.M2.mpy.sat.lh.s1
+    hexagon_M2_mpy_sat_ll_s0,                  // llvm.hexagon.M2.mpy.sat.ll.s0
+    hexagon_M2_mpy_sat_ll_s1,                  // llvm.hexagon.M2.mpy.sat.ll.s1
+    hexagon_M2_mpy_sat_rnd_hh_s0,              // llvm.hexagon.M2.mpy.sat.rnd.hh.s0
+    hexagon_M2_mpy_sat_rnd_hh_s1,              // llvm.hexagon.M2.mpy.sat.rnd.hh.s1
+    hexagon_M2_mpy_sat_rnd_hl_s0,              // llvm.hexagon.M2.mpy.sat.rnd.hl.s0
+    hexagon_M2_mpy_sat_rnd_hl_s1,              // llvm.hexagon.M2.mpy.sat.rnd.hl.s1
+    hexagon_M2_mpy_sat_rnd_lh_s0,              // llvm.hexagon.M2.mpy.sat.rnd.lh.s0
+    hexagon_M2_mpy_sat_rnd_lh_s1,              // llvm.hexagon.M2.mpy.sat.rnd.lh.s1
+    hexagon_M2_mpy_sat_rnd_ll_s0,              // llvm.hexagon.M2.mpy.sat.rnd.ll.s0
+    hexagon_M2_mpy_sat_rnd_ll_s1,              // llvm.hexagon.M2.mpy.sat.rnd.ll.s1
+    hexagon_M2_mpy_up,                         // llvm.hexagon.M2.mpy.up
+    hexagon_M2_mpy_up_s1,                      // llvm.hexagon.M2.mpy.up.s1
+    hexagon_M2_mpy_up_s1_sat,                  // llvm.hexagon.M2.mpy.up.s1.sat
+    hexagon_M2_mpyd_acc_hh_s0,                 // llvm.hexagon.M2.mpyd.acc.hh.s0
+    hexagon_M2_mpyd_acc_hh_s1,                 // llvm.hexagon.M2.mpyd.acc.hh.s1
+    hexagon_M2_mpyd_acc_hl_s0,                 // llvm.hexagon.M2.mpyd.acc.hl.s0
+    hexagon_M2_mpyd_acc_hl_s1,                 // llvm.hexagon.M2.mpyd.acc.hl.s1
+    hexagon_M2_mpyd_acc_lh_s0,                 // llvm.hexagon.M2.mpyd.acc.lh.s0
+    hexagon_M2_mpyd_acc_lh_s1,                 // llvm.hexagon.M2.mpyd.acc.lh.s1
+    hexagon_M2_mpyd_acc_ll_s0,                 // llvm.hexagon.M2.mpyd.acc.ll.s0
+    hexagon_M2_mpyd_acc_ll_s1,                 // llvm.hexagon.M2.mpyd.acc.ll.s1
+    hexagon_M2_mpyd_hh_s0,                     // llvm.hexagon.M2.mpyd.hh.s0
+    hexagon_M2_mpyd_hh_s1,                     // llvm.hexagon.M2.mpyd.hh.s1
+    hexagon_M2_mpyd_hl_s0,                     // llvm.hexagon.M2.mpyd.hl.s0
+    hexagon_M2_mpyd_hl_s1,                     // llvm.hexagon.M2.mpyd.hl.s1
+    hexagon_M2_mpyd_lh_s0,                     // llvm.hexagon.M2.mpyd.lh.s0
+    hexagon_M2_mpyd_lh_s1,                     // llvm.hexagon.M2.mpyd.lh.s1
+    hexagon_M2_mpyd_ll_s0,                     // llvm.hexagon.M2.mpyd.ll.s0
+    hexagon_M2_mpyd_ll_s1,                     // llvm.hexagon.M2.mpyd.ll.s1
+    hexagon_M2_mpyd_nac_hh_s0,                 // llvm.hexagon.M2.mpyd.nac.hh.s0
+    hexagon_M2_mpyd_nac_hh_s1,                 // llvm.hexagon.M2.mpyd.nac.hh.s1
+    hexagon_M2_mpyd_nac_hl_s0,                 // llvm.hexagon.M2.mpyd.nac.hl.s0
+    hexagon_M2_mpyd_nac_hl_s1,                 // llvm.hexagon.M2.mpyd.nac.hl.s1
+    hexagon_M2_mpyd_nac_lh_s0,                 // llvm.hexagon.M2.mpyd.nac.lh.s0
+    hexagon_M2_mpyd_nac_lh_s1,                 // llvm.hexagon.M2.mpyd.nac.lh.s1
+    hexagon_M2_mpyd_nac_ll_s0,                 // llvm.hexagon.M2.mpyd.nac.ll.s0
+    hexagon_M2_mpyd_nac_ll_s1,                 // llvm.hexagon.M2.mpyd.nac.ll.s1
+    hexagon_M2_mpyd_rnd_hh_s0,                 // llvm.hexagon.M2.mpyd.rnd.hh.s0
+    hexagon_M2_mpyd_rnd_hh_s1,                 // llvm.hexagon.M2.mpyd.rnd.hh.s1
+    hexagon_M2_mpyd_rnd_hl_s0,                 // llvm.hexagon.M2.mpyd.rnd.hl.s0
+    hexagon_M2_mpyd_rnd_hl_s1,                 // llvm.hexagon.M2.mpyd.rnd.hl.s1
+    hexagon_M2_mpyd_rnd_lh_s0,                 // llvm.hexagon.M2.mpyd.rnd.lh.s0
+    hexagon_M2_mpyd_rnd_lh_s1,                 // llvm.hexagon.M2.mpyd.rnd.lh.s1
+    hexagon_M2_mpyd_rnd_ll_s0,                 // llvm.hexagon.M2.mpyd.rnd.ll.s0
+    hexagon_M2_mpyd_rnd_ll_s1,                 // llvm.hexagon.M2.mpyd.rnd.ll.s1
+    hexagon_M2_mpyi,                           // llvm.hexagon.M2.mpyi
+    hexagon_M2_mpysmi,                         // llvm.hexagon.M2.mpysmi
+    hexagon_M2_mpysu_up,                       // llvm.hexagon.M2.mpysu.up
+    hexagon_M2_mpyu_acc_hh_s0,                 // llvm.hexagon.M2.mpyu.acc.hh.s0
+    hexagon_M2_mpyu_acc_hh_s1,                 // llvm.hexagon.M2.mpyu.acc.hh.s1
+    hexagon_M2_mpyu_acc_hl_s0,                 // llvm.hexagon.M2.mpyu.acc.hl.s0
+    hexagon_M2_mpyu_acc_hl_s1,                 // llvm.hexagon.M2.mpyu.acc.hl.s1
+    hexagon_M2_mpyu_acc_lh_s0,                 // llvm.hexagon.M2.mpyu.acc.lh.s0
+    hexagon_M2_mpyu_acc_lh_s1,                 // llvm.hexagon.M2.mpyu.acc.lh.s1
+    hexagon_M2_mpyu_acc_ll_s0,                 // llvm.hexagon.M2.mpyu.acc.ll.s0
+    hexagon_M2_mpyu_acc_ll_s1,                 // llvm.hexagon.M2.mpyu.acc.ll.s1
+    hexagon_M2_mpyu_hh_s0,                     // llvm.hexagon.M2.mpyu.hh.s0
+    hexagon_M2_mpyu_hh_s1,                     // llvm.hexagon.M2.mpyu.hh.s1
+    hexagon_M2_mpyu_hl_s0,                     // llvm.hexagon.M2.mpyu.hl.s0
+    hexagon_M2_mpyu_hl_s1,                     // llvm.hexagon.M2.mpyu.hl.s1
+    hexagon_M2_mpyu_lh_s0,                     // llvm.hexagon.M2.mpyu.lh.s0
+    hexagon_M2_mpyu_lh_s1,                     // llvm.hexagon.M2.mpyu.lh.s1
+    hexagon_M2_mpyu_ll_s0,                     // llvm.hexagon.M2.mpyu.ll.s0
+    hexagon_M2_mpyu_ll_s1,                     // llvm.hexagon.M2.mpyu.ll.s1
+    hexagon_M2_mpyu_nac_hh_s0,                 // llvm.hexagon.M2.mpyu.nac.hh.s0
+    hexagon_M2_mpyu_nac_hh_s1,                 // llvm.hexagon.M2.mpyu.nac.hh.s1
+    hexagon_M2_mpyu_nac_hl_s0,                 // llvm.hexagon.M2.mpyu.nac.hl.s0
+    hexagon_M2_mpyu_nac_hl_s1,                 // llvm.hexagon.M2.mpyu.nac.hl.s1
+    hexagon_M2_mpyu_nac_lh_s0,                 // llvm.hexagon.M2.mpyu.nac.lh.s0
+    hexagon_M2_mpyu_nac_lh_s1,                 // llvm.hexagon.M2.mpyu.nac.lh.s1
+    hexagon_M2_mpyu_nac_ll_s0,                 // llvm.hexagon.M2.mpyu.nac.ll.s0
+    hexagon_M2_mpyu_nac_ll_s1,                 // llvm.hexagon.M2.mpyu.nac.ll.s1
+    hexagon_M2_mpyu_up,                        // llvm.hexagon.M2.mpyu.up
+    hexagon_M2_mpyud_acc_hh_s0,                // llvm.hexagon.M2.mpyud.acc.hh.s0
+    hexagon_M2_mpyud_acc_hh_s1,                // llvm.hexagon.M2.mpyud.acc.hh.s1
+    hexagon_M2_mpyud_acc_hl_s0,                // llvm.hexagon.M2.mpyud.acc.hl.s0
+    hexagon_M2_mpyud_acc_hl_s1,                // llvm.hexagon.M2.mpyud.acc.hl.s1
+    hexagon_M2_mpyud_acc_lh_s0,                // llvm.hexagon.M2.mpyud.acc.lh.s0
+    hexagon_M2_mpyud_acc_lh_s1,                // llvm.hexagon.M2.mpyud.acc.lh.s1
+    hexagon_M2_mpyud_acc_ll_s0,                // llvm.hexagon.M2.mpyud.acc.ll.s0
+    hexagon_M2_mpyud_acc_ll_s1,                // llvm.hexagon.M2.mpyud.acc.ll.s1
+    hexagon_M2_mpyud_hh_s0,                    // llvm.hexagon.M2.mpyud.hh.s0
+    hexagon_M2_mpyud_hh_s1,                    // llvm.hexagon.M2.mpyud.hh.s1
+    hexagon_M2_mpyud_hl_s0,                    // llvm.hexagon.M2.mpyud.hl.s0
+    hexagon_M2_mpyud_hl_s1,                    // llvm.hexagon.M2.mpyud.hl.s1
+    hexagon_M2_mpyud_lh_s0,                    // llvm.hexagon.M2.mpyud.lh.s0
+    hexagon_M2_mpyud_lh_s1,                    // llvm.hexagon.M2.mpyud.lh.s1
+    hexagon_M2_mpyud_ll_s0,                    // llvm.hexagon.M2.mpyud.ll.s0
+    hexagon_M2_mpyud_ll_s1,                    // llvm.hexagon.M2.mpyud.ll.s1
+    hexagon_M2_mpyud_nac_hh_s0,                // llvm.hexagon.M2.mpyud.nac.hh.s0
+    hexagon_M2_mpyud_nac_hh_s1,                // llvm.hexagon.M2.mpyud.nac.hh.s1
+    hexagon_M2_mpyud_nac_hl_s0,                // llvm.hexagon.M2.mpyud.nac.hl.s0
+    hexagon_M2_mpyud_nac_hl_s1,                // llvm.hexagon.M2.mpyud.nac.hl.s1
+    hexagon_M2_mpyud_nac_lh_s0,                // llvm.hexagon.M2.mpyud.nac.lh.s0
+    hexagon_M2_mpyud_nac_lh_s1,                // llvm.hexagon.M2.mpyud.nac.lh.s1
+    hexagon_M2_mpyud_nac_ll_s0,                // llvm.hexagon.M2.mpyud.nac.ll.s0
+    hexagon_M2_mpyud_nac_ll_s1,                // llvm.hexagon.M2.mpyud.nac.ll.s1
+    hexagon_M2_mpyui,                          // llvm.hexagon.M2.mpyui
+    hexagon_M2_nacci,                          // llvm.hexagon.M2.nacci
+    hexagon_M2_naccii,                         // llvm.hexagon.M2.naccii
+    hexagon_M2_subacc,                         // llvm.hexagon.M2.subacc
+    hexagon_M2_vabsdiffh,                      // llvm.hexagon.M2.vabsdiffh
+    hexagon_M2_vabsdiffw,                      // llvm.hexagon.M2.vabsdiffw
+    hexagon_M2_vcmac_s0_sat_i,                 // llvm.hexagon.M2.vcmac.s0.sat.i
+    hexagon_M2_vcmac_s0_sat_r,                 // llvm.hexagon.M2.vcmac.s0.sat.r
+    hexagon_M2_vcmpy_s0_sat_i,                 // llvm.hexagon.M2.vcmpy.s0.sat.i
+    hexagon_M2_vcmpy_s0_sat_r,                 // llvm.hexagon.M2.vcmpy.s0.sat.r
+    hexagon_M2_vcmpy_s1_sat_i,                 // llvm.hexagon.M2.vcmpy.s1.sat.i
+    hexagon_M2_vcmpy_s1_sat_r,                 // llvm.hexagon.M2.vcmpy.s1.sat.r
+    hexagon_M2_vdmacs_s0,                      // llvm.hexagon.M2.vdmacs.s0
+    hexagon_M2_vdmacs_s1,                      // llvm.hexagon.M2.vdmacs.s1
+    hexagon_M2_vdmpyrs_s0,                     // llvm.hexagon.M2.vdmpyrs.s0
+    hexagon_M2_vdmpyrs_s1,                     // llvm.hexagon.M2.vdmpyrs.s1
+    hexagon_M2_vdmpys_s0,                      // llvm.hexagon.M2.vdmpys.s0
+    hexagon_M2_vdmpys_s1,                      // llvm.hexagon.M2.vdmpys.s1
+    hexagon_M2_vmac2,                          // llvm.hexagon.M2.vmac2
+    hexagon_M2_vmac2es,                        // llvm.hexagon.M2.vmac2es
+    hexagon_M2_vmac2es_s0,                     // llvm.hexagon.M2.vmac2es.s0
+    hexagon_M2_vmac2es_s1,                     // llvm.hexagon.M2.vmac2es.s1
+    hexagon_M2_vmac2s_s0,                      // llvm.hexagon.M2.vmac2s.s0
+    hexagon_M2_vmac2s_s1,                      // llvm.hexagon.M2.vmac2s.s1
+    hexagon_M2_vmac2su_s0,                     // llvm.hexagon.M2.vmac2su.s0
+    hexagon_M2_vmac2su_s1,                     // llvm.hexagon.M2.vmac2su.s1
+    hexagon_M2_vmpy2es_s0,                     // llvm.hexagon.M2.vmpy2es.s0
+    hexagon_M2_vmpy2es_s1,                     // llvm.hexagon.M2.vmpy2es.s1
+    hexagon_M2_vmpy2s_s0,                      // llvm.hexagon.M2.vmpy2s.s0
+    hexagon_M2_vmpy2s_s0pack,                  // llvm.hexagon.M2.vmpy2s.s0pack
+    hexagon_M2_vmpy2s_s1,                      // llvm.hexagon.M2.vmpy2s.s1
+    hexagon_M2_vmpy2s_s1pack,                  // llvm.hexagon.M2.vmpy2s.s1pack
+    hexagon_M2_vmpy2su_s0,                     // llvm.hexagon.M2.vmpy2su.s0
+    hexagon_M2_vmpy2su_s1,                     // llvm.hexagon.M2.vmpy2su.s1
+    hexagon_M2_vraddh,                         // llvm.hexagon.M2.vraddh
+    hexagon_M2_vradduh,                        // llvm.hexagon.M2.vradduh
+    hexagon_M2_vrcmaci_s0,                     // llvm.hexagon.M2.vrcmaci.s0
+    hexagon_M2_vrcmaci_s0c,                    // llvm.hexagon.M2.vrcmaci.s0c
+    hexagon_M2_vrcmacr_s0,                     // llvm.hexagon.M2.vrcmacr.s0
+    hexagon_M2_vrcmacr_s0c,                    // llvm.hexagon.M2.vrcmacr.s0c
+    hexagon_M2_vrcmpyi_s0,                     // llvm.hexagon.M2.vrcmpyi.s0
+    hexagon_M2_vrcmpyi_s0c,                    // llvm.hexagon.M2.vrcmpyi.s0c
+    hexagon_M2_vrcmpyr_s0,                     // llvm.hexagon.M2.vrcmpyr.s0
+    hexagon_M2_vrcmpyr_s0c,                    // llvm.hexagon.M2.vrcmpyr.s0c
+    hexagon_M2_vrcmpys_acc_s1,                 // llvm.hexagon.M2.vrcmpys.acc.s1
+    hexagon_M2_vrcmpys_s1,                     // llvm.hexagon.M2.vrcmpys.s1
+    hexagon_M2_vrcmpys_s1rp,                   // llvm.hexagon.M2.vrcmpys.s1rp
+    hexagon_M2_vrmac_s0,                       // llvm.hexagon.M2.vrmac.s0
+    hexagon_M2_vrmpy_s0,                       // llvm.hexagon.M2.vrmpy.s0
+    hexagon_M2_xor_xacc,                       // llvm.hexagon.M2.xor.xacc
+    hexagon_M4_and_and,                        // llvm.hexagon.M4.and.and
+    hexagon_M4_and_andn,                       // llvm.hexagon.M4.and.andn
+    hexagon_M4_and_or,                         // llvm.hexagon.M4.and.or
+    hexagon_M4_and_xor,                        // llvm.hexagon.M4.and.xor
+    hexagon_M4_cmpyi_wh,                       // llvm.hexagon.M4.cmpyi.wh
+    hexagon_M4_cmpyi_whc,                      // llvm.hexagon.M4.cmpyi.whc
+    hexagon_M4_cmpyr_wh,                       // llvm.hexagon.M4.cmpyr.wh
+    hexagon_M4_cmpyr_whc,                      // llvm.hexagon.M4.cmpyr.whc
+    hexagon_M4_mac_up_s1_sat,                  // llvm.hexagon.M4.mac.up.s1.sat
+    hexagon_M4_mpyri_addi,                     // llvm.hexagon.M4.mpyri.addi
+    hexagon_M4_mpyri_addr,                     // llvm.hexagon.M4.mpyri.addr
+    hexagon_M4_mpyri_addr_u2,                  // llvm.hexagon.M4.mpyri.addr.u2
+    hexagon_M4_mpyrr_addi,                     // llvm.hexagon.M4.mpyrr.addi
+    hexagon_M4_mpyrr_addr,                     // llvm.hexagon.M4.mpyrr.addr
+    hexagon_M4_nac_up_s1_sat,                  // llvm.hexagon.M4.nac.up.s1.sat
+    hexagon_M4_or_and,                         // llvm.hexagon.M4.or.and
+    hexagon_M4_or_andn,                        // llvm.hexagon.M4.or.andn
+    hexagon_M4_or_or,                          // llvm.hexagon.M4.or.or
+    hexagon_M4_or_xor,                         // llvm.hexagon.M4.or.xor
+    hexagon_M4_pmpyw,                          // llvm.hexagon.M4.pmpyw
+    hexagon_M4_pmpyw_acc,                      // llvm.hexagon.M4.pmpyw.acc
+    hexagon_M4_vpmpyh,                         // llvm.hexagon.M4.vpmpyh
+    hexagon_M4_vpmpyh_acc,                     // llvm.hexagon.M4.vpmpyh.acc
+    hexagon_M4_vrmpyeh_acc_s0,                 // llvm.hexagon.M4.vrmpyeh.acc.s0
+    hexagon_M4_vrmpyeh_acc_s1,                 // llvm.hexagon.M4.vrmpyeh.acc.s1
+    hexagon_M4_vrmpyeh_s0,                     // llvm.hexagon.M4.vrmpyeh.s0
+    hexagon_M4_vrmpyeh_s1,                     // llvm.hexagon.M4.vrmpyeh.s1
+    hexagon_M4_vrmpyoh_acc_s0,                 // llvm.hexagon.M4.vrmpyoh.acc.s0
+    hexagon_M4_vrmpyoh_acc_s1,                 // llvm.hexagon.M4.vrmpyoh.acc.s1
+    hexagon_M4_vrmpyoh_s0,                     // llvm.hexagon.M4.vrmpyoh.s0
+    hexagon_M4_vrmpyoh_s1,                     // llvm.hexagon.M4.vrmpyoh.s1
+    hexagon_M4_xor_and,                        // llvm.hexagon.M4.xor.and
+    hexagon_M4_xor_andn,                       // llvm.hexagon.M4.xor.andn
+    hexagon_M4_xor_or,                         // llvm.hexagon.M4.xor.or
+    hexagon_M4_xor_xacc,                       // llvm.hexagon.M4.xor.xacc
+    hexagon_M5_vdmacbsu,                       // llvm.hexagon.M5.vdmacbsu
+    hexagon_M5_vdmpybsu,                       // llvm.hexagon.M5.vdmpybsu
+    hexagon_M5_vmacbsu,                        // llvm.hexagon.M5.vmacbsu
+    hexagon_M5_vmacbuu,                        // llvm.hexagon.M5.vmacbuu
+    hexagon_M5_vmpybsu,                        // llvm.hexagon.M5.vmpybsu
+    hexagon_M5_vmpybuu,                        // llvm.hexagon.M5.vmpybuu
+    hexagon_M5_vrmacbsu,                       // llvm.hexagon.M5.vrmacbsu
+    hexagon_M5_vrmacbuu,                       // llvm.hexagon.M5.vrmacbuu
+    hexagon_M5_vrmpybsu,                       // llvm.hexagon.M5.vrmpybsu
+    hexagon_M5_vrmpybuu,                       // llvm.hexagon.M5.vrmpybuu
+    hexagon_M6_vabsdiffb,                      // llvm.hexagon.M6.vabsdiffb
+    hexagon_M6_vabsdiffub,                     // llvm.hexagon.M6.vabsdiffub
+    hexagon_S2_addasl_rrri,                    // llvm.hexagon.S2.addasl.rrri
+    hexagon_S2_asl_i_p,                        // llvm.hexagon.S2.asl.i.p
+    hexagon_S2_asl_i_p_acc,                    // llvm.hexagon.S2.asl.i.p.acc
+    hexagon_S2_asl_i_p_and,                    // llvm.hexagon.S2.asl.i.p.and
+    hexagon_S2_asl_i_p_nac,                    // llvm.hexagon.S2.asl.i.p.nac
+    hexagon_S2_asl_i_p_or,                     // llvm.hexagon.S2.asl.i.p.or
+    hexagon_S2_asl_i_p_xacc,                   // llvm.hexagon.S2.asl.i.p.xacc
+    hexagon_S2_asl_i_r,                        // llvm.hexagon.S2.asl.i.r
+    hexagon_S2_asl_i_r_acc,                    // llvm.hexagon.S2.asl.i.r.acc
+    hexagon_S2_asl_i_r_and,                    // llvm.hexagon.S2.asl.i.r.and
+    hexagon_S2_asl_i_r_nac,                    // llvm.hexagon.S2.asl.i.r.nac
+    hexagon_S2_asl_i_r_or,                     // llvm.hexagon.S2.asl.i.r.or
+    hexagon_S2_asl_i_r_sat,                    // llvm.hexagon.S2.asl.i.r.sat
+    hexagon_S2_asl_i_r_xacc,                   // llvm.hexagon.S2.asl.i.r.xacc
+    hexagon_S2_asl_i_vh,                       // llvm.hexagon.S2.asl.i.vh
+    hexagon_S2_asl_i_vw,                       // llvm.hexagon.S2.asl.i.vw
+    hexagon_S2_asl_r_p,                        // llvm.hexagon.S2.asl.r.p
+    hexagon_S2_asl_r_p_acc,                    // llvm.hexagon.S2.asl.r.p.acc
+    hexagon_S2_asl_r_p_and,                    // llvm.hexagon.S2.asl.r.p.and
+    hexagon_S2_asl_r_p_nac,                    // llvm.hexagon.S2.asl.r.p.nac
+    hexagon_S2_asl_r_p_or,                     // llvm.hexagon.S2.asl.r.p.or
+    hexagon_S2_asl_r_p_xor,                    // llvm.hexagon.S2.asl.r.p.xor
+    hexagon_S2_asl_r_r,                        // llvm.hexagon.S2.asl.r.r
+    hexagon_S2_asl_r_r_acc,                    // llvm.hexagon.S2.asl.r.r.acc
+    hexagon_S2_asl_r_r_and,                    // llvm.hexagon.S2.asl.r.r.and
+    hexagon_S2_asl_r_r_nac,                    // llvm.hexagon.S2.asl.r.r.nac
+    hexagon_S2_asl_r_r_or,                     // llvm.hexagon.S2.asl.r.r.or
+    hexagon_S2_asl_r_r_sat,                    // llvm.hexagon.S2.asl.r.r.sat
+    hexagon_S2_asl_r_vh,                       // llvm.hexagon.S2.asl.r.vh
+    hexagon_S2_asl_r_vw,                       // llvm.hexagon.S2.asl.r.vw
+    hexagon_S2_asr_i_p,                        // llvm.hexagon.S2.asr.i.p
+    hexagon_S2_asr_i_p_acc,                    // llvm.hexagon.S2.asr.i.p.acc
+    hexagon_S2_asr_i_p_and,                    // llvm.hexagon.S2.asr.i.p.and
+    hexagon_S2_asr_i_p_nac,                    // llvm.hexagon.S2.asr.i.p.nac
+    hexagon_S2_asr_i_p_or,                     // llvm.hexagon.S2.asr.i.p.or
+    hexagon_S2_asr_i_p_rnd,                    // llvm.hexagon.S2.asr.i.p.rnd
+    hexagon_S2_asr_i_p_rnd_goodsyntax,         // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
+    hexagon_S2_asr_i_r,                        // llvm.hexagon.S2.asr.i.r
+    hexagon_S2_asr_i_r_acc,                    // llvm.hexagon.S2.asr.i.r.acc
+    hexagon_S2_asr_i_r_and,                    // llvm.hexagon.S2.asr.i.r.and
+    hexagon_S2_asr_i_r_nac,                    // llvm.hexagon.S2.asr.i.r.nac
+    hexagon_S2_asr_i_r_or,                     // llvm.hexagon.S2.asr.i.r.or
+    hexagon_S2_asr_i_r_rnd,                    // llvm.hexagon.S2.asr.i.r.rnd
+    hexagon_S2_asr_i_r_rnd_goodsyntax,         // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
+    hexagon_S2_asr_i_svw_trun,                 // llvm.hexagon.S2.asr.i.svw.trun
+    hexagon_S2_asr_i_vh,                       // llvm.hexagon.S2.asr.i.vh
+    hexagon_S2_asr_i_vw,                       // llvm.hexagon.S2.asr.i.vw
+    hexagon_S2_asr_r_p,                        // llvm.hexagon.S2.asr.r.p
+    hexagon_S2_asr_r_p_acc,                    // llvm.hexagon.S2.asr.r.p.acc
+    hexagon_S2_asr_r_p_and,                    // llvm.hexagon.S2.asr.r.p.and
+    hexagon_S2_asr_r_p_nac,                    // llvm.hexagon.S2.asr.r.p.nac
+    hexagon_S2_asr_r_p_or,                     // llvm.hexagon.S2.asr.r.p.or
+    hexagon_S2_asr_r_p_xor,                    // llvm.hexagon.S2.asr.r.p.xor
+    hexagon_S2_asr_r_r,                        // llvm.hexagon.S2.asr.r.r
+    hexagon_S2_asr_r_r_acc,                    // llvm.hexagon.S2.asr.r.r.acc
+    hexagon_S2_asr_r_r_and,                    // llvm.hexagon.S2.asr.r.r.and
+    hexagon_S2_asr_r_r_nac,                    // llvm.hexagon.S2.asr.r.r.nac
+    hexagon_S2_asr_r_r_or,                     // llvm.hexagon.S2.asr.r.r.or
+    hexagon_S2_asr_r_r_sat,                    // llvm.hexagon.S2.asr.r.r.sat
+    hexagon_S2_asr_r_svw_trun,                 // llvm.hexagon.S2.asr.r.svw.trun
+    hexagon_S2_asr_r_vh,                       // llvm.hexagon.S2.asr.r.vh
+    hexagon_S2_asr_r_vw,                       // llvm.hexagon.S2.asr.r.vw
+    hexagon_S2_brev,                           // llvm.hexagon.S2.brev
+    hexagon_S2_brevp,                          // llvm.hexagon.S2.brevp
+    hexagon_S2_cabacencbin,                    // llvm.hexagon.S2.cabacencbin
+    hexagon_S2_cl0,                            // llvm.hexagon.S2.cl0
+    hexagon_S2_cl0p,                           // llvm.hexagon.S2.cl0p
+    hexagon_S2_cl1,                            // llvm.hexagon.S2.cl1
+    hexagon_S2_cl1p,                           // llvm.hexagon.S2.cl1p
+    hexagon_S2_clb,                            // llvm.hexagon.S2.clb
+    hexagon_S2_clbnorm,                        // llvm.hexagon.S2.clbnorm
+    hexagon_S2_clbp,                           // llvm.hexagon.S2.clbp
+    hexagon_S2_clrbit_i,                       // llvm.hexagon.S2.clrbit.i
+    hexagon_S2_clrbit_r,                       // llvm.hexagon.S2.clrbit.r
+    hexagon_S2_ct0,                            // llvm.hexagon.S2.ct0
+    hexagon_S2_ct0p,                           // llvm.hexagon.S2.ct0p
+    hexagon_S2_ct1,                            // llvm.hexagon.S2.ct1
+    hexagon_S2_ct1p,                           // llvm.hexagon.S2.ct1p
+    hexagon_S2_deinterleave,                   // llvm.hexagon.S2.deinterleave
+    hexagon_S2_extractu,                       // llvm.hexagon.S2.extractu
+    hexagon_S2_extractu_rp,                    // llvm.hexagon.S2.extractu.rp
+    hexagon_S2_extractup,                      // llvm.hexagon.S2.extractup
+    hexagon_S2_extractup_rp,                   // llvm.hexagon.S2.extractup.rp
+    hexagon_S2_insert,                         // llvm.hexagon.S2.insert
+    hexagon_S2_insert_rp,                      // llvm.hexagon.S2.insert.rp
+    hexagon_S2_insertp,                        // llvm.hexagon.S2.insertp
+    hexagon_S2_insertp_rp,                     // llvm.hexagon.S2.insertp.rp
+    hexagon_S2_interleave,                     // llvm.hexagon.S2.interleave
+    hexagon_S2_lfsp,                           // llvm.hexagon.S2.lfsp
+    hexagon_S2_lsl_r_p,                        // llvm.hexagon.S2.lsl.r.p
+    hexagon_S2_lsl_r_p_acc,                    // llvm.hexagon.S2.lsl.r.p.acc
+    hexagon_S2_lsl_r_p_and,                    // llvm.hexagon.S2.lsl.r.p.and
+    hexagon_S2_lsl_r_p_nac,                    // llvm.hexagon.S2.lsl.r.p.nac
+    hexagon_S2_lsl_r_p_or,                     // llvm.hexagon.S2.lsl.r.p.or
+    hexagon_S2_lsl_r_p_xor,                    // llvm.hexagon.S2.lsl.r.p.xor
+    hexagon_S2_lsl_r_r,                        // llvm.hexagon.S2.lsl.r.r
+    hexagon_S2_lsl_r_r_acc,                    // llvm.hexagon.S2.lsl.r.r.acc
+    hexagon_S2_lsl_r_r_and,                    // llvm.hexagon.S2.lsl.r.r.and
+    hexagon_S2_lsl_r_r_nac,                    // llvm.hexagon.S2.lsl.r.r.nac
+    hexagon_S2_lsl_r_r_or,                     // llvm.hexagon.S2.lsl.r.r.or
+    hexagon_S2_lsl_r_vh,                       // llvm.hexagon.S2.lsl.r.vh
+    hexagon_S2_lsl_r_vw,                       // llvm.hexagon.S2.lsl.r.vw
+    hexagon_S2_lsr_i_p,                        // llvm.hexagon.S2.lsr.i.p
+    hexagon_S2_lsr_i_p_acc,                    // llvm.hexagon.S2.lsr.i.p.acc
+    hexagon_S2_lsr_i_p_and,                    // llvm.hexagon.S2.lsr.i.p.and
+    hexagon_S2_lsr_i_p_nac,                    // llvm.hexagon.S2.lsr.i.p.nac
+    hexagon_S2_lsr_i_p_or,                     // llvm.hexagon.S2.lsr.i.p.or
+    hexagon_S2_lsr_i_p_xacc,                   // llvm.hexagon.S2.lsr.i.p.xacc
+    hexagon_S2_lsr_i_r,                        // llvm.hexagon.S2.lsr.i.r
+    hexagon_S2_lsr_i_r_acc,                    // llvm.hexagon.S2.lsr.i.r.acc
+    hexagon_S2_lsr_i_r_and,                    // llvm.hexagon.S2.lsr.i.r.and
+    hexagon_S2_lsr_i_r_nac,                    // llvm.hexagon.S2.lsr.i.r.nac
+    hexagon_S2_lsr_i_r_or,                     // llvm.hexagon.S2.lsr.i.r.or
+    hexagon_S2_lsr_i_r_xacc,                   // llvm.hexagon.S2.lsr.i.r.xacc
+    hexagon_S2_lsr_i_vh,                       // llvm.hexagon.S2.lsr.i.vh
+    hexagon_S2_lsr_i_vw,                       // llvm.hexagon.S2.lsr.i.vw
+    hexagon_S2_lsr_r_p,                        // llvm.hexagon.S2.lsr.r.p
+    hexagon_S2_lsr_r_p_acc,                    // llvm.hexagon.S2.lsr.r.p.acc
+    hexagon_S2_lsr_r_p_and,                    // llvm.hexagon.S2.lsr.r.p.and
+    hexagon_S2_lsr_r_p_nac,                    // llvm.hexagon.S2.lsr.r.p.nac
+    hexagon_S2_lsr_r_p_or,                     // llvm.hexagon.S2.lsr.r.p.or
+    hexagon_S2_lsr_r_p_xor,                    // llvm.hexagon.S2.lsr.r.p.xor
+    hexagon_S2_lsr_r_r,                        // llvm.hexagon.S2.lsr.r.r
+    hexagon_S2_lsr_r_r_acc,                    // llvm.hexagon.S2.lsr.r.r.acc
+    hexagon_S2_lsr_r_r_and,                    // llvm.hexagon.S2.lsr.r.r.and
+    hexagon_S2_lsr_r_r_nac,                    // llvm.hexagon.S2.lsr.r.r.nac
+    hexagon_S2_lsr_r_r_or,                     // llvm.hexagon.S2.lsr.r.r.or
+    hexagon_S2_lsr_r_vh,                       // llvm.hexagon.S2.lsr.r.vh
+    hexagon_S2_lsr_r_vw,                       // llvm.hexagon.S2.lsr.r.vw
+    hexagon_S2_packhl,                         // llvm.hexagon.S2.packhl
+    hexagon_S2_parityp,                        // llvm.hexagon.S2.parityp
+    hexagon_S2_setbit_i,                       // llvm.hexagon.S2.setbit.i
+    hexagon_S2_setbit_r,                       // llvm.hexagon.S2.setbit.r
+    hexagon_S2_shuffeb,                        // llvm.hexagon.S2.shuffeb
+    hexagon_S2_shuffeh,                        // llvm.hexagon.S2.shuffeh
+    hexagon_S2_shuffob,                        // llvm.hexagon.S2.shuffob
+    hexagon_S2_shuffoh,                        // llvm.hexagon.S2.shuffoh
+    hexagon_S2_storerb_pbr,                    // llvm.hexagon.S2.storerb.pbr
+    hexagon_S2_storerb_pci,                    // llvm.hexagon.S2.storerb.pci
+    hexagon_S2_storerb_pcr,                    // llvm.hexagon.S2.storerb.pcr
+    hexagon_S2_storerd_pbr,                    // llvm.hexagon.S2.storerd.pbr
+    hexagon_S2_storerd_pci,                    // llvm.hexagon.S2.storerd.pci
+    hexagon_S2_storerd_pcr,                    // llvm.hexagon.S2.storerd.pcr
+    hexagon_S2_storerf_pbr,                    // llvm.hexagon.S2.storerf.pbr
+    hexagon_S2_storerf_pci,                    // llvm.hexagon.S2.storerf.pci
+    hexagon_S2_storerf_pcr,                    // llvm.hexagon.S2.storerf.pcr
+    hexagon_S2_storerh_pbr,                    // llvm.hexagon.S2.storerh.pbr
+    hexagon_S2_storerh_pci,                    // llvm.hexagon.S2.storerh.pci
+    hexagon_S2_storerh_pcr,                    // llvm.hexagon.S2.storerh.pcr
+    hexagon_S2_storeri_pbr,                    // llvm.hexagon.S2.storeri.pbr
+    hexagon_S2_storeri_pci,                    // llvm.hexagon.S2.storeri.pci
+    hexagon_S2_storeri_pcr,                    // llvm.hexagon.S2.storeri.pcr
+    hexagon_S2_storew_locked,                  // llvm.hexagon.S2.storew.locked
+    hexagon_S2_svsathb,                        // llvm.hexagon.S2.svsathb
+    hexagon_S2_svsathub,                       // llvm.hexagon.S2.svsathub
+    hexagon_S2_tableidxb_goodsyntax,           // llvm.hexagon.S2.tableidxb.goodsyntax
+    hexagon_S2_tableidxd_goodsyntax,           // llvm.hexagon.S2.tableidxd.goodsyntax
+    hexagon_S2_tableidxh_goodsyntax,           // llvm.hexagon.S2.tableidxh.goodsyntax
+    hexagon_S2_tableidxw_goodsyntax,           // llvm.hexagon.S2.tableidxw.goodsyntax
+    hexagon_S2_togglebit_i,                    // llvm.hexagon.S2.togglebit.i
+    hexagon_S2_togglebit_r,                    // llvm.hexagon.S2.togglebit.r
+    hexagon_S2_tstbit_i,                       // llvm.hexagon.S2.tstbit.i
+    hexagon_S2_tstbit_r,                       // llvm.hexagon.S2.tstbit.r
+    hexagon_S2_valignib,                       // llvm.hexagon.S2.valignib
+    hexagon_S2_valignrb,                       // llvm.hexagon.S2.valignrb
+    hexagon_S2_vcnegh,                         // llvm.hexagon.S2.vcnegh
+    hexagon_S2_vcrotate,                       // llvm.hexagon.S2.vcrotate
+    hexagon_S2_vrcnegh,                        // llvm.hexagon.S2.vrcnegh
+    hexagon_S2_vrndpackwh,                     // llvm.hexagon.S2.vrndpackwh
+    hexagon_S2_vrndpackwhs,                    // llvm.hexagon.S2.vrndpackwhs
+    hexagon_S2_vsathb,                         // llvm.hexagon.S2.vsathb
+    hexagon_S2_vsathb_nopack,                  // llvm.hexagon.S2.vsathb.nopack
+    hexagon_S2_vsathub,                        // llvm.hexagon.S2.vsathub
+    hexagon_S2_vsathub_nopack,                 // llvm.hexagon.S2.vsathub.nopack
+    hexagon_S2_vsatwh,                         // llvm.hexagon.S2.vsatwh
+    hexagon_S2_vsatwh_nopack,                  // llvm.hexagon.S2.vsatwh.nopack
+    hexagon_S2_vsatwuh,                        // llvm.hexagon.S2.vsatwuh
+    hexagon_S2_vsatwuh_nopack,                 // llvm.hexagon.S2.vsatwuh.nopack
+    hexagon_S2_vsplatrb,                       // llvm.hexagon.S2.vsplatrb
+    hexagon_S2_vsplatrh,                       // llvm.hexagon.S2.vsplatrh
+    hexagon_S2_vspliceib,                      // llvm.hexagon.S2.vspliceib
+    hexagon_S2_vsplicerb,                      // llvm.hexagon.S2.vsplicerb
+    hexagon_S2_vsxtbh,                         // llvm.hexagon.S2.vsxtbh
+    hexagon_S2_vsxthw,                         // llvm.hexagon.S2.vsxthw
+    hexagon_S2_vtrunehb,                       // llvm.hexagon.S2.vtrunehb
+    hexagon_S2_vtrunewh,                       // llvm.hexagon.S2.vtrunewh
+    hexagon_S2_vtrunohb,                       // llvm.hexagon.S2.vtrunohb
+    hexagon_S2_vtrunowh,                       // llvm.hexagon.S2.vtrunowh
+    hexagon_S2_vzxtbh,                         // llvm.hexagon.S2.vzxtbh
+    hexagon_S2_vzxthw,                         // llvm.hexagon.S2.vzxthw
+    hexagon_S4_addaddi,                        // llvm.hexagon.S4.addaddi
+    hexagon_S4_addi_asl_ri,                    // llvm.hexagon.S4.addi.asl.ri
+    hexagon_S4_addi_lsr_ri,                    // llvm.hexagon.S4.addi.lsr.ri
+    hexagon_S4_andi_asl_ri,                    // llvm.hexagon.S4.andi.asl.ri
+    hexagon_S4_andi_lsr_ri,                    // llvm.hexagon.S4.andi.lsr.ri
+    hexagon_S4_clbaddi,                        // llvm.hexagon.S4.clbaddi
+    hexagon_S4_clbpaddi,                       // llvm.hexagon.S4.clbpaddi
+    hexagon_S4_clbpnorm,                       // llvm.hexagon.S4.clbpnorm
+    hexagon_S4_extract,                        // llvm.hexagon.S4.extract
+    hexagon_S4_extract_rp,                     // llvm.hexagon.S4.extract.rp
+    hexagon_S4_extractp,                       // llvm.hexagon.S4.extractp
+    hexagon_S4_extractp_rp,                    // llvm.hexagon.S4.extractp.rp
+    hexagon_S4_lsli,                           // llvm.hexagon.S4.lsli
+    hexagon_S4_ntstbit_i,                      // llvm.hexagon.S4.ntstbit.i
+    hexagon_S4_ntstbit_r,                      // llvm.hexagon.S4.ntstbit.r
+    hexagon_S4_or_andi,                        // llvm.hexagon.S4.or.andi
+    hexagon_S4_or_andix,                       // llvm.hexagon.S4.or.andix
+    hexagon_S4_or_ori,                         // llvm.hexagon.S4.or.ori
+    hexagon_S4_ori_asl_ri,                     // llvm.hexagon.S4.ori.asl.ri
+    hexagon_S4_ori_lsr_ri,                     // llvm.hexagon.S4.ori.lsr.ri
+    hexagon_S4_parity,                         // llvm.hexagon.S4.parity
+    hexagon_S4_stored_locked,                  // llvm.hexagon.S4.stored.locked
+    hexagon_S4_subaddi,                        // llvm.hexagon.S4.subaddi
+    hexagon_S4_subi_asl_ri,                    // llvm.hexagon.S4.subi.asl.ri
+    hexagon_S4_subi_lsr_ri,                    // llvm.hexagon.S4.subi.lsr.ri
+    hexagon_S4_vrcrotate,                      // llvm.hexagon.S4.vrcrotate
+    hexagon_S4_vrcrotate_acc,                  // llvm.hexagon.S4.vrcrotate.acc
+    hexagon_S4_vxaddsubh,                      // llvm.hexagon.S4.vxaddsubh
+    hexagon_S4_vxaddsubhr,                     // llvm.hexagon.S4.vxaddsubhr
+    hexagon_S4_vxaddsubw,                      // llvm.hexagon.S4.vxaddsubw
+    hexagon_S4_vxsubaddh,                      // llvm.hexagon.S4.vxsubaddh
+    hexagon_S4_vxsubaddhr,                     // llvm.hexagon.S4.vxsubaddhr
+    hexagon_S4_vxsubaddw,                      // llvm.hexagon.S4.vxsubaddw
+    hexagon_S5_asrhub_rnd_sat_goodsyntax,      // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
+    hexagon_S5_asrhub_sat,                     // llvm.hexagon.S5.asrhub.sat
+    hexagon_S5_popcountp,                      // llvm.hexagon.S5.popcountp
+    hexagon_S5_vasrhrnd_goodsyntax,            // llvm.hexagon.S5.vasrhrnd.goodsyntax
+    hexagon_S6_rol_i_p,                        // llvm.hexagon.S6.rol.i.p
+    hexagon_S6_rol_i_p_acc,                    // llvm.hexagon.S6.rol.i.p.acc
+    hexagon_S6_rol_i_p_and,                    // llvm.hexagon.S6.rol.i.p.and
+    hexagon_S6_rol_i_p_nac,                    // llvm.hexagon.S6.rol.i.p.nac
+    hexagon_S6_rol_i_p_or,                     // llvm.hexagon.S6.rol.i.p.or
+    hexagon_S6_rol_i_p_xacc,                   // llvm.hexagon.S6.rol.i.p.xacc
+    hexagon_S6_rol_i_r,                        // llvm.hexagon.S6.rol.i.r
+    hexagon_S6_rol_i_r_acc,                    // llvm.hexagon.S6.rol.i.r.acc
+    hexagon_S6_rol_i_r_and,                    // llvm.hexagon.S6.rol.i.r.and
+    hexagon_S6_rol_i_r_nac,                    // llvm.hexagon.S6.rol.i.r.nac
+    hexagon_S6_rol_i_r_or,                     // llvm.hexagon.S6.rol.i.r.or
+    hexagon_S6_rol_i_r_xacc,                   // llvm.hexagon.S6.rol.i.r.xacc
+    hexagon_S6_vsplatrbp,                      // llvm.hexagon.S6.vsplatrbp
+    hexagon_S6_vtrunehb_ppp,                   // llvm.hexagon.S6.vtrunehb.ppp
+    hexagon_S6_vtrunohb_ppp,                   // llvm.hexagon.S6.vtrunohb.ppp
+    hexagon_V6_extractw,                       // llvm.hexagon.V6.extractw
+    hexagon_V6_extractw_128B,                  // llvm.hexagon.V6.extractw.128B
+    hexagon_V6_hi,                             // llvm.hexagon.V6.hi
+    hexagon_V6_hi_128B,                        // llvm.hexagon.V6.hi.128B
+    hexagon_V6_lo,                             // llvm.hexagon.V6.lo
+    hexagon_V6_lo_128B,                        // llvm.hexagon.V6.lo.128B
+    hexagon_V6_lvsplatb,                       // llvm.hexagon.V6.lvsplatb
+    hexagon_V6_lvsplatb_128B,                  // llvm.hexagon.V6.lvsplatb.128B
+    hexagon_V6_lvsplath,                       // llvm.hexagon.V6.lvsplath
+    hexagon_V6_lvsplath_128B,                  // llvm.hexagon.V6.lvsplath.128B
+    hexagon_V6_lvsplatw,                       // llvm.hexagon.V6.lvsplatw
+    hexagon_V6_lvsplatw_128B,                  // llvm.hexagon.V6.lvsplatw.128B
+    hexagon_V6_pred_and,                       // llvm.hexagon.V6.pred.and
+    hexagon_V6_pred_and_128B,                  // llvm.hexagon.V6.pred.and.128B
+    hexagon_V6_pred_and_n,                     // llvm.hexagon.V6.pred.and.n
+    hexagon_V6_pred_and_n_128B,                // llvm.hexagon.V6.pred.and.n.128B
+    hexagon_V6_pred_not,                       // llvm.hexagon.V6.pred.not
+    hexagon_V6_pred_not_128B,                  // llvm.hexagon.V6.pred.not.128B
+    hexagon_V6_pred_or,                        // llvm.hexagon.V6.pred.or
+    hexagon_V6_pred_or_128B,                   // llvm.hexagon.V6.pred.or.128B
+    hexagon_V6_pred_or_n,                      // llvm.hexagon.V6.pred.or.n
+    hexagon_V6_pred_or_n_128B,                 // llvm.hexagon.V6.pred.or.n.128B
+    hexagon_V6_pred_scalar2,                   // llvm.hexagon.V6.pred.scalar2
+    hexagon_V6_pred_scalar2_128B,              // llvm.hexagon.V6.pred.scalar2.128B
+    hexagon_V6_pred_scalar2v2,                 // llvm.hexagon.V6.pred.scalar2v2
+    hexagon_V6_pred_scalar2v2_128B,            // llvm.hexagon.V6.pred.scalar2v2.128B
+    hexagon_V6_pred_xor,                       // llvm.hexagon.V6.pred.xor
+    hexagon_V6_pred_xor_128B,                  // llvm.hexagon.V6.pred.xor.128B
+    hexagon_V6_shuffeqh,                       // llvm.hexagon.V6.shuffeqh
+    hexagon_V6_shuffeqh_128B,                  // llvm.hexagon.V6.shuffeqh.128B
+    hexagon_V6_shuffeqw,                       // llvm.hexagon.V6.shuffeqw
+    hexagon_V6_shuffeqw_128B,                  // llvm.hexagon.V6.shuffeqw.128B
+    hexagon_V6_vS32b_nqpred_ai,                // llvm.hexagon.V6.vS32b.nqpred.ai
+    hexagon_V6_vS32b_nqpred_ai_128B,           // llvm.hexagon.V6.vS32b.nqpred.ai.128B
+    hexagon_V6_vS32b_nt_nqpred_ai,             // llvm.hexagon.V6.vS32b.nt.nqpred.ai
+    hexagon_V6_vS32b_nt_nqpred_ai_128B,        // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
+    hexagon_V6_vS32b_nt_qpred_ai,              // llvm.hexagon.V6.vS32b.nt.qpred.ai
+    hexagon_V6_vS32b_nt_qpred_ai_128B,         // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
+    hexagon_V6_vS32b_qpred_ai,                 // llvm.hexagon.V6.vS32b.qpred.ai
+    hexagon_V6_vS32b_qpred_ai_128B,            // llvm.hexagon.V6.vS32b.qpred.ai.128B
+    hexagon_V6_vabsb,                          // llvm.hexagon.V6.vabsb
+    hexagon_V6_vabsb_128B,                     // llvm.hexagon.V6.vabsb.128B
+    hexagon_V6_vabsb_sat,                      // llvm.hexagon.V6.vabsb.sat
+    hexagon_V6_vabsb_sat_128B,                 // llvm.hexagon.V6.vabsb.sat.128B
+    hexagon_V6_vabsdiffh,                      // llvm.hexagon.V6.vabsdiffh
+    hexagon_V6_vabsdiffh_128B,                 // llvm.hexagon.V6.vabsdiffh.128B
+    hexagon_V6_vabsdiffub,                     // llvm.hexagon.V6.vabsdiffub
+    hexagon_V6_vabsdiffub_128B,                // llvm.hexagon.V6.vabsdiffub.128B
+    hexagon_V6_vabsdiffuh,                     // llvm.hexagon.V6.vabsdiffuh
+    hexagon_V6_vabsdiffuh_128B,                // llvm.hexagon.V6.vabsdiffuh.128B
+    hexagon_V6_vabsdiffw,                      // llvm.hexagon.V6.vabsdiffw
+    hexagon_V6_vabsdiffw_128B,                 // llvm.hexagon.V6.vabsdiffw.128B
+    hexagon_V6_vabsh,                          // llvm.hexagon.V6.vabsh
+    hexagon_V6_vabsh_128B,                     // llvm.hexagon.V6.vabsh.128B
+    hexagon_V6_vabsh_sat,                      // llvm.hexagon.V6.vabsh.sat
+    hexagon_V6_vabsh_sat_128B,                 // llvm.hexagon.V6.vabsh.sat.128B
+    hexagon_V6_vabsw,                          // llvm.hexagon.V6.vabsw
+    hexagon_V6_vabsw_128B,                     // llvm.hexagon.V6.vabsw.128B
+    hexagon_V6_vabsw_sat,                      // llvm.hexagon.V6.vabsw.sat
+    hexagon_V6_vabsw_sat_128B,                 // llvm.hexagon.V6.vabsw.sat.128B
+    hexagon_V6_vaddb,                          // llvm.hexagon.V6.vaddb
+    hexagon_V6_vaddb_128B,                     // llvm.hexagon.V6.vaddb.128B
+    hexagon_V6_vaddb_dv,                       // llvm.hexagon.V6.vaddb.dv
+    hexagon_V6_vaddb_dv_128B,                  // llvm.hexagon.V6.vaddb.dv.128B
+    hexagon_V6_vaddbnq,                        // llvm.hexagon.V6.vaddbnq
+    hexagon_V6_vaddbnq_128B,                   // llvm.hexagon.V6.vaddbnq.128B
+    hexagon_V6_vaddbq,                         // llvm.hexagon.V6.vaddbq
+    hexagon_V6_vaddbq_128B,                    // llvm.hexagon.V6.vaddbq.128B
+    hexagon_V6_vaddbsat,                       // llvm.hexagon.V6.vaddbsat
+    hexagon_V6_vaddbsat_128B,                  // llvm.hexagon.V6.vaddbsat.128B
+    hexagon_V6_vaddbsat_dv,                    // llvm.hexagon.V6.vaddbsat.dv
+    hexagon_V6_vaddbsat_dv_128B,               // llvm.hexagon.V6.vaddbsat.dv.128B
+    hexagon_V6_vaddcarry,                      // llvm.hexagon.V6.vaddcarry
+    hexagon_V6_vaddcarry_128B,                 // llvm.hexagon.V6.vaddcarry.128B
+    hexagon_V6_vaddclbh,                       // llvm.hexagon.V6.vaddclbh
+    hexagon_V6_vaddclbh_128B,                  // llvm.hexagon.V6.vaddclbh.128B
+    hexagon_V6_vaddclbw,                       // llvm.hexagon.V6.vaddclbw
+    hexagon_V6_vaddclbw_128B,                  // llvm.hexagon.V6.vaddclbw.128B
+    hexagon_V6_vaddh,                          // llvm.hexagon.V6.vaddh
+    hexagon_V6_vaddh_128B,                     // llvm.hexagon.V6.vaddh.128B
+    hexagon_V6_vaddh_dv,                       // llvm.hexagon.V6.vaddh.dv
+    hexagon_V6_vaddh_dv_128B,                  // llvm.hexagon.V6.vaddh.dv.128B
+    hexagon_V6_vaddhnq,                        // llvm.hexagon.V6.vaddhnq
+    hexagon_V6_vaddhnq_128B,                   // llvm.hexagon.V6.vaddhnq.128B
+    hexagon_V6_vaddhq,                         // llvm.hexagon.V6.vaddhq
+    hexagon_V6_vaddhq_128B,                    // llvm.hexagon.V6.vaddhq.128B
+    hexagon_V6_vaddhsat,                       // llvm.hexagon.V6.vaddhsat
+    hexagon_V6_vaddhsat_128B,                  // llvm.hexagon.V6.vaddhsat.128B
+    hexagon_V6_vaddhsat_dv,                    // llvm.hexagon.V6.vaddhsat.dv
+    hexagon_V6_vaddhsat_dv_128B,               // llvm.hexagon.V6.vaddhsat.dv.128B
+    hexagon_V6_vaddhw,                         // llvm.hexagon.V6.vaddhw
+    hexagon_V6_vaddhw_128B,                    // llvm.hexagon.V6.vaddhw.128B
+    hexagon_V6_vaddhw_acc,                     // llvm.hexagon.V6.vaddhw.acc
+    hexagon_V6_vaddhw_acc_128B,                // llvm.hexagon.V6.vaddhw.acc.128B
+    hexagon_V6_vaddubh,                        // llvm.hexagon.V6.vaddubh
+    hexagon_V6_vaddubh_128B,                   // llvm.hexagon.V6.vaddubh.128B
+    hexagon_V6_vaddubh_acc,                    // llvm.hexagon.V6.vaddubh.acc
+    hexagon_V6_vaddubh_acc_128B,               // llvm.hexagon.V6.vaddubh.acc.128B
+    hexagon_V6_vaddubsat,                      // llvm.hexagon.V6.vaddubsat
+    hexagon_V6_vaddubsat_128B,                 // llvm.hexagon.V6.vaddubsat.128B
+    hexagon_V6_vaddubsat_dv,                   // llvm.hexagon.V6.vaddubsat.dv
+    hexagon_V6_vaddubsat_dv_128B,              // llvm.hexagon.V6.vaddubsat.dv.128B
+    hexagon_V6_vaddububb_sat,                  // llvm.hexagon.V6.vaddububb.sat
+    hexagon_V6_vaddububb_sat_128B,             // llvm.hexagon.V6.vaddububb.sat.128B
+    hexagon_V6_vadduhsat,                      // llvm.hexagon.V6.vadduhsat
+    hexagon_V6_vadduhsat_128B,                 // llvm.hexagon.V6.vadduhsat.128B
+    hexagon_V6_vadduhsat_dv,                   // llvm.hexagon.V6.vadduhsat.dv
+    hexagon_V6_vadduhsat_dv_128B,              // llvm.hexagon.V6.vadduhsat.dv.128B
+    hexagon_V6_vadduhw,                        // llvm.hexagon.V6.vadduhw
+    hexagon_V6_vadduhw_128B,                   // llvm.hexagon.V6.vadduhw.128B
+    hexagon_V6_vadduhw_acc,                    // llvm.hexagon.V6.vadduhw.acc
+    hexagon_V6_vadduhw_acc_128B,               // llvm.hexagon.V6.vadduhw.acc.128B
+    hexagon_V6_vadduwsat,                      // llvm.hexagon.V6.vadduwsat
+    hexagon_V6_vadduwsat_128B,                 // llvm.hexagon.V6.vadduwsat.128B
+    hexagon_V6_vadduwsat_dv,                   // llvm.hexagon.V6.vadduwsat.dv
+    hexagon_V6_vadduwsat_dv_128B,              // llvm.hexagon.V6.vadduwsat.dv.128B
+    hexagon_V6_vaddw,                          // llvm.hexagon.V6.vaddw
+    hexagon_V6_vaddw_128B,                     // llvm.hexagon.V6.vaddw.128B
+    hexagon_V6_vaddw_dv,                       // llvm.hexagon.V6.vaddw.dv
+    hexagon_V6_vaddw_dv_128B,                  // llvm.hexagon.V6.vaddw.dv.128B
+    hexagon_V6_vaddwnq,                        // llvm.hexagon.V6.vaddwnq
+    hexagon_V6_vaddwnq_128B,                   // llvm.hexagon.V6.vaddwnq.128B
+    hexagon_V6_vaddwq,                         // llvm.hexagon.V6.vaddwq
+    hexagon_V6_vaddwq_128B,                    // llvm.hexagon.V6.vaddwq.128B
+    hexagon_V6_vaddwsat,                       // llvm.hexagon.V6.vaddwsat
+    hexagon_V6_vaddwsat_128B,                  // llvm.hexagon.V6.vaddwsat.128B
+    hexagon_V6_vaddwsat_dv,                    // llvm.hexagon.V6.vaddwsat.dv
+    hexagon_V6_vaddwsat_dv_128B,               // llvm.hexagon.V6.vaddwsat.dv.128B
+    hexagon_V6_valignb,                        // llvm.hexagon.V6.valignb
+    hexagon_V6_valignb_128B,                   // llvm.hexagon.V6.valignb.128B
+    hexagon_V6_valignbi,                       // llvm.hexagon.V6.valignbi
+    hexagon_V6_valignbi_128B,                  // llvm.hexagon.V6.valignbi.128B
+    hexagon_V6_vand,                           // llvm.hexagon.V6.vand
+    hexagon_V6_vand_128B,                      // llvm.hexagon.V6.vand.128B
+    hexagon_V6_vandnqrt,                       // llvm.hexagon.V6.vandnqrt
+    hexagon_V6_vandnqrt_128B,                  // llvm.hexagon.V6.vandnqrt.128B
+    hexagon_V6_vandnqrt_acc,                   // llvm.hexagon.V6.vandnqrt.acc
+    hexagon_V6_vandnqrt_acc_128B,              // llvm.hexagon.V6.vandnqrt.acc.128B
+    hexagon_V6_vandqrt,                        // llvm.hexagon.V6.vandqrt
+    hexagon_V6_vandqrt_128B,                   // llvm.hexagon.V6.vandqrt.128B
+    hexagon_V6_vandqrt_acc,                    // llvm.hexagon.V6.vandqrt.acc
+    hexagon_V6_vandqrt_acc_128B,               // llvm.hexagon.V6.vandqrt.acc.128B
+    hexagon_V6_vandvnqv,                       // llvm.hexagon.V6.vandvnqv
+    hexagon_V6_vandvnqv_128B,                  // llvm.hexagon.V6.vandvnqv.128B
+    hexagon_V6_vandvqv,                        // llvm.hexagon.V6.vandvqv
+    hexagon_V6_vandvqv_128B,                   // llvm.hexagon.V6.vandvqv.128B
+    hexagon_V6_vandvrt,                        // llvm.hexagon.V6.vandvrt
+    hexagon_V6_vandvrt_128B,                   // llvm.hexagon.V6.vandvrt.128B
+    hexagon_V6_vandvrt_acc,                    // llvm.hexagon.V6.vandvrt.acc
+    hexagon_V6_vandvrt_acc_128B,               // llvm.hexagon.V6.vandvrt.acc.128B
+    hexagon_V6_vaslh,                          // llvm.hexagon.V6.vaslh
+    hexagon_V6_vaslh_128B,                     // llvm.hexagon.V6.vaslh.128B
+    hexagon_V6_vaslh_acc,                      // llvm.hexagon.V6.vaslh.acc
+    hexagon_V6_vaslh_acc_128B,                 // llvm.hexagon.V6.vaslh.acc.128B
+    hexagon_V6_vaslhv,                         // llvm.hexagon.V6.vaslhv
+    hexagon_V6_vaslhv_128B,                    // llvm.hexagon.V6.vaslhv.128B
+    hexagon_V6_vaslw,                          // llvm.hexagon.V6.vaslw
+    hexagon_V6_vaslw_128B,                     // llvm.hexagon.V6.vaslw.128B
+    hexagon_V6_vaslw_acc,                      // llvm.hexagon.V6.vaslw.acc
+    hexagon_V6_vaslw_acc_128B,                 // llvm.hexagon.V6.vaslw.acc.128B
+    hexagon_V6_vaslwv,                         // llvm.hexagon.V6.vaslwv
+    hexagon_V6_vaslwv_128B,                    // llvm.hexagon.V6.vaslwv.128B
+    hexagon_V6_vasrh,                          // llvm.hexagon.V6.vasrh
+    hexagon_V6_vasrh_128B,                     // llvm.hexagon.V6.vasrh.128B
+    hexagon_V6_vasrh_acc,                      // llvm.hexagon.V6.vasrh.acc
+    hexagon_V6_vasrh_acc_128B,                 // llvm.hexagon.V6.vasrh.acc.128B
+    hexagon_V6_vasrhbrndsat,                   // llvm.hexagon.V6.vasrhbrndsat
+    hexagon_V6_vasrhbrndsat_128B,              // llvm.hexagon.V6.vasrhbrndsat.128B
+    hexagon_V6_vasrhbsat,                      // llvm.hexagon.V6.vasrhbsat
+    hexagon_V6_vasrhbsat_128B,                 // llvm.hexagon.V6.vasrhbsat.128B
+    hexagon_V6_vasrhubrndsat,                  // llvm.hexagon.V6.vasrhubrndsat
+    hexagon_V6_vasrhubrndsat_128B,             // llvm.hexagon.V6.vasrhubrndsat.128B
+    hexagon_V6_vasrhubsat,                     // llvm.hexagon.V6.vasrhubsat
+    hexagon_V6_vasrhubsat_128B,                // llvm.hexagon.V6.vasrhubsat.128B
+    hexagon_V6_vasrhv,                         // llvm.hexagon.V6.vasrhv
+    hexagon_V6_vasrhv_128B,                    // llvm.hexagon.V6.vasrhv.128B
+    hexagon_V6_vasruhubrndsat,                 // llvm.hexagon.V6.vasruhubrndsat
+    hexagon_V6_vasruhubrndsat_128B,            // llvm.hexagon.V6.vasruhubrndsat.128B
+    hexagon_V6_vasruhubsat,                    // llvm.hexagon.V6.vasruhubsat
+    hexagon_V6_vasruhubsat_128B,               // llvm.hexagon.V6.vasruhubsat.128B
+    hexagon_V6_vasruwuhrndsat,                 // llvm.hexagon.V6.vasruwuhrndsat
+    hexagon_V6_vasruwuhrndsat_128B,            // llvm.hexagon.V6.vasruwuhrndsat.128B
+    hexagon_V6_vasruwuhsat,                    // llvm.hexagon.V6.vasruwuhsat
+    hexagon_V6_vasruwuhsat_128B,               // llvm.hexagon.V6.vasruwuhsat.128B
+    hexagon_V6_vasrw,                          // llvm.hexagon.V6.vasrw
+    hexagon_V6_vasrw_128B,                     // llvm.hexagon.V6.vasrw.128B
+    hexagon_V6_vasrw_acc,                      // llvm.hexagon.V6.vasrw.acc
+    hexagon_V6_vasrw_acc_128B,                 // llvm.hexagon.V6.vasrw.acc.128B
+    hexagon_V6_vasrwh,                         // llvm.hexagon.V6.vasrwh
+    hexagon_V6_vasrwh_128B,                    // llvm.hexagon.V6.vasrwh.128B
+    hexagon_V6_vasrwhrndsat,                   // llvm.hexagon.V6.vasrwhrndsat
+    hexagon_V6_vasrwhrndsat_128B,              // llvm.hexagon.V6.vasrwhrndsat.128B
+    hexagon_V6_vasrwhsat,                      // llvm.hexagon.V6.vasrwhsat
+    hexagon_V6_vasrwhsat_128B,                 // llvm.hexagon.V6.vasrwhsat.128B
+    hexagon_V6_vasrwuhrndsat,                  // llvm.hexagon.V6.vasrwuhrndsat
+    hexagon_V6_vasrwuhrndsat_128B,             // llvm.hexagon.V6.vasrwuhrndsat.128B
+    hexagon_V6_vasrwuhsat,                     // llvm.hexagon.V6.vasrwuhsat
+    hexagon_V6_vasrwuhsat_128B,                // llvm.hexagon.V6.vasrwuhsat.128B
+    hexagon_V6_vasrwv,                         // llvm.hexagon.V6.vasrwv
+    hexagon_V6_vasrwv_128B,                    // llvm.hexagon.V6.vasrwv.128B
+    hexagon_V6_vassign,                        // llvm.hexagon.V6.vassign
+    hexagon_V6_vassign_128B,                   // llvm.hexagon.V6.vassign.128B
+    hexagon_V6_vassignp,                       // llvm.hexagon.V6.vassignp
+    hexagon_V6_vassignp_128B,                  // llvm.hexagon.V6.vassignp.128B
+    hexagon_V6_vavgb,                          // llvm.hexagon.V6.vavgb
+    hexagon_V6_vavgb_128B,                     // llvm.hexagon.V6.vavgb.128B
+    hexagon_V6_vavgbrnd,                       // llvm.hexagon.V6.vavgbrnd
+    hexagon_V6_vavgbrnd_128B,                  // llvm.hexagon.V6.vavgbrnd.128B
+    hexagon_V6_vavgh,                          // llvm.hexagon.V6.vavgh
+    hexagon_V6_vavgh_128B,                     // llvm.hexagon.V6.vavgh.128B
+    hexagon_V6_vavghrnd,                       // llvm.hexagon.V6.vavghrnd
+    hexagon_V6_vavghrnd_128B,                  // llvm.hexagon.V6.vavghrnd.128B
+    hexagon_V6_vavgub,                         // llvm.hexagon.V6.vavgub
+    hexagon_V6_vavgub_128B,                    // llvm.hexagon.V6.vavgub.128B
+    hexagon_V6_vavgubrnd,                      // llvm.hexagon.V6.vavgubrnd
+    hexagon_V6_vavgubrnd_128B,                 // llvm.hexagon.V6.vavgubrnd.128B
+    hexagon_V6_vavguh,                         // llvm.hexagon.V6.vavguh
+    hexagon_V6_vavguh_128B,                    // llvm.hexagon.V6.vavguh.128B
+    hexagon_V6_vavguhrnd,                      // llvm.hexagon.V6.vavguhrnd
+    hexagon_V6_vavguhrnd_128B,                 // llvm.hexagon.V6.vavguhrnd.128B
+    hexagon_V6_vavguw,                         // llvm.hexagon.V6.vavguw
+    hexagon_V6_vavguw_128B,                    // llvm.hexagon.V6.vavguw.128B
+    hexagon_V6_vavguwrnd,                      // llvm.hexagon.V6.vavguwrnd
+    hexagon_V6_vavguwrnd_128B,                 // llvm.hexagon.V6.vavguwrnd.128B
+    hexagon_V6_vavgw,                          // llvm.hexagon.V6.vavgw
+    hexagon_V6_vavgw_128B,                     // llvm.hexagon.V6.vavgw.128B
+    hexagon_V6_vavgwrnd,                       // llvm.hexagon.V6.vavgwrnd
+    hexagon_V6_vavgwrnd_128B,                  // llvm.hexagon.V6.vavgwrnd.128B
+    hexagon_V6_vcl0h,                          // llvm.hexagon.V6.vcl0h
+    hexagon_V6_vcl0h_128B,                     // llvm.hexagon.V6.vcl0h.128B
+    hexagon_V6_vcl0w,                          // llvm.hexagon.V6.vcl0w
+    hexagon_V6_vcl0w_128B,                     // llvm.hexagon.V6.vcl0w.128B
+    hexagon_V6_vcombine,                       // llvm.hexagon.V6.vcombine
+    hexagon_V6_vcombine_128B,                  // llvm.hexagon.V6.vcombine.128B
+    hexagon_V6_vd0,                            // llvm.hexagon.V6.vd0
+    hexagon_V6_vd0_128B,                       // llvm.hexagon.V6.vd0.128B
+    hexagon_V6_vdd0,                           // llvm.hexagon.V6.vdd0
+    hexagon_V6_vdd0_128B,                      // llvm.hexagon.V6.vdd0.128B
+    hexagon_V6_vdealb,                         // llvm.hexagon.V6.vdealb
+    hexagon_V6_vdealb_128B,                    // llvm.hexagon.V6.vdealb.128B
+    hexagon_V6_vdealb4w,                       // llvm.hexagon.V6.vdealb4w
+    hexagon_V6_vdealb4w_128B,                  // llvm.hexagon.V6.vdealb4w.128B
+    hexagon_V6_vdealh,                         // llvm.hexagon.V6.vdealh
+    hexagon_V6_vdealh_128B,                    // llvm.hexagon.V6.vdealh.128B
+    hexagon_V6_vdealvdd,                       // llvm.hexagon.V6.vdealvdd
+    hexagon_V6_vdealvdd_128B,                  // llvm.hexagon.V6.vdealvdd.128B
+    hexagon_V6_vdelta,                         // llvm.hexagon.V6.vdelta
+    hexagon_V6_vdelta_128B,                    // llvm.hexagon.V6.vdelta.128B
+    hexagon_V6_vdmpybus,                       // llvm.hexagon.V6.vdmpybus
+    hexagon_V6_vdmpybus_128B,                  // llvm.hexagon.V6.vdmpybus.128B
+    hexagon_V6_vdmpybus_acc,                   // llvm.hexagon.V6.vdmpybus.acc
+    hexagon_V6_vdmpybus_acc_128B,              // llvm.hexagon.V6.vdmpybus.acc.128B
+    hexagon_V6_vdmpybus_dv,                    // llvm.hexagon.V6.vdmpybus.dv
+    hexagon_V6_vdmpybus_dv_128B,               // llvm.hexagon.V6.vdmpybus.dv.128B
+    hexagon_V6_vdmpybus_dv_acc,                // llvm.hexagon.V6.vdmpybus.dv.acc
+    hexagon_V6_vdmpybus_dv_acc_128B,           // llvm.hexagon.V6.vdmpybus.dv.acc.128B
+    hexagon_V6_vdmpyhb,                        // llvm.hexagon.V6.vdmpyhb
+    hexagon_V6_vdmpyhb_128B,                   // llvm.hexagon.V6.vdmpyhb.128B
+    hexagon_V6_vdmpyhb_acc,                    // llvm.hexagon.V6.vdmpyhb.acc
+    hexagon_V6_vdmpyhb_acc_128B,               // llvm.hexagon.V6.vdmpyhb.acc.128B
+    hexagon_V6_vdmpyhb_dv,                     // llvm.hexagon.V6.vdmpyhb.dv
+    hexagon_V6_vdmpyhb_dv_128B,                // llvm.hexagon.V6.vdmpyhb.dv.128B
+    hexagon_V6_vdmpyhb_dv_acc,                 // llvm.hexagon.V6.vdmpyhb.dv.acc
+    hexagon_V6_vdmpyhb_dv_acc_128B,            // llvm.hexagon.V6.vdmpyhb.dv.acc.128B
+    hexagon_V6_vdmpyhisat,                     // llvm.hexagon.V6.vdmpyhisat
+    hexagon_V6_vdmpyhisat_128B,                // llvm.hexagon.V6.vdmpyhisat.128B
+    hexagon_V6_vdmpyhisat_acc,                 // llvm.hexagon.V6.vdmpyhisat.acc
+    hexagon_V6_vdmpyhisat_acc_128B,            // llvm.hexagon.V6.vdmpyhisat.acc.128B
+    hexagon_V6_vdmpyhsat,                      // llvm.hexagon.V6.vdmpyhsat
+    hexagon_V6_vdmpyhsat_128B,                 // llvm.hexagon.V6.vdmpyhsat.128B
+    hexagon_V6_vdmpyhsat_acc,                  // llvm.hexagon.V6.vdmpyhsat.acc
+    hexagon_V6_vdmpyhsat_acc_128B,             // llvm.hexagon.V6.vdmpyhsat.acc.128B
+    hexagon_V6_vdmpyhsuisat,                   // llvm.hexagon.V6.vdmpyhsuisat
+    hexagon_V6_vdmpyhsuisat_128B,              // llvm.hexagon.V6.vdmpyhsuisat.128B
+    hexagon_V6_vdmpyhsuisat_acc,               // llvm.hexagon.V6.vdmpyhsuisat.acc
+    hexagon_V6_vdmpyhsuisat_acc_128B,          // llvm.hexagon.V6.vdmpyhsuisat.acc.128B
+    hexagon_V6_vdmpyhsusat,                    // llvm.hexagon.V6.vdmpyhsusat
+    hexagon_V6_vdmpyhsusat_128B,               // llvm.hexagon.V6.vdmpyhsusat.128B
+    hexagon_V6_vdmpyhsusat_acc,                // llvm.hexagon.V6.vdmpyhsusat.acc
+    hexagon_V6_vdmpyhsusat_acc_128B,           // llvm.hexagon.V6.vdmpyhsusat.acc.128B
+    hexagon_V6_vdmpyhvsat,                     // llvm.hexagon.V6.vdmpyhvsat
+    hexagon_V6_vdmpyhvsat_128B,                // llvm.hexagon.V6.vdmpyhvsat.128B
+    hexagon_V6_vdmpyhvsat_acc,                 // llvm.hexagon.V6.vdmpyhvsat.acc
+    hexagon_V6_vdmpyhvsat_acc_128B,            // llvm.hexagon.V6.vdmpyhvsat.acc.128B
+    hexagon_V6_vdsaduh,                        // llvm.hexagon.V6.vdsaduh
+    hexagon_V6_vdsaduh_128B,                   // llvm.hexagon.V6.vdsaduh.128B
+    hexagon_V6_vdsaduh_acc,                    // llvm.hexagon.V6.vdsaduh.acc
+    hexagon_V6_vdsaduh_acc_128B,               // llvm.hexagon.V6.vdsaduh.acc.128B
+    hexagon_V6_veqb,                           // llvm.hexagon.V6.veqb
+    hexagon_V6_veqb_128B,                      // llvm.hexagon.V6.veqb.128B
+    hexagon_V6_veqb_and,                       // llvm.hexagon.V6.veqb.and
+    hexagon_V6_veqb_and_128B,                  // llvm.hexagon.V6.veqb.and.128B
+    hexagon_V6_veqb_or,                        // llvm.hexagon.V6.veqb.or
+    hexagon_V6_veqb_or_128B,                   // llvm.hexagon.V6.veqb.or.128B
+    hexagon_V6_veqb_xor,                       // llvm.hexagon.V6.veqb.xor
+    hexagon_V6_veqb_xor_128B,                  // llvm.hexagon.V6.veqb.xor.128B
+    hexagon_V6_veqh,                           // llvm.hexagon.V6.veqh
+    hexagon_V6_veqh_128B,                      // llvm.hexagon.V6.veqh.128B
+    hexagon_V6_veqh_and,                       // llvm.hexagon.V6.veqh.and
+    hexagon_V6_veqh_and_128B,                  // llvm.hexagon.V6.veqh.and.128B
+    hexagon_V6_veqh_or,                        // llvm.hexagon.V6.veqh.or
+    hexagon_V6_veqh_or_128B,                   // llvm.hexagon.V6.veqh.or.128B
+    hexagon_V6_veqh_xor,                       // llvm.hexagon.V6.veqh.xor
+    hexagon_V6_veqh_xor_128B,                  // llvm.hexagon.V6.veqh.xor.128B
+    hexagon_V6_veqw,                           // llvm.hexagon.V6.veqw
+    hexagon_V6_veqw_128B,                      // llvm.hexagon.V6.veqw.128B
+    hexagon_V6_veqw_and,                       // llvm.hexagon.V6.veqw.and
+    hexagon_V6_veqw_and_128B,                  // llvm.hexagon.V6.veqw.and.128B
+    hexagon_V6_veqw_or,                        // llvm.hexagon.V6.veqw.or
+    hexagon_V6_veqw_or_128B,                   // llvm.hexagon.V6.veqw.or.128B
+    hexagon_V6_veqw_xor,                       // llvm.hexagon.V6.veqw.xor
+    hexagon_V6_veqw_xor_128B,                  // llvm.hexagon.V6.veqw.xor.128B
+    hexagon_V6_vgathermh,                      // llvm.hexagon.V6.vgathermh
+    hexagon_V6_vgathermh_128B,                 // llvm.hexagon.V6.vgathermh.128B
+    hexagon_V6_vgathermhq,                     // llvm.hexagon.V6.vgathermhq
+    hexagon_V6_vgathermhq_128B,                // llvm.hexagon.V6.vgathermhq.128B
+    hexagon_V6_vgathermhw,                     // llvm.hexagon.V6.vgathermhw
+    hexagon_V6_vgathermhw_128B,                // llvm.hexagon.V6.vgathermhw.128B
+    hexagon_V6_vgathermhwq,                    // llvm.hexagon.V6.vgathermhwq
+    hexagon_V6_vgathermhwq_128B,               // llvm.hexagon.V6.vgathermhwq.128B
+    hexagon_V6_vgathermw,                      // llvm.hexagon.V6.vgathermw
+    hexagon_V6_vgathermw_128B,                 // llvm.hexagon.V6.vgathermw.128B
+    hexagon_V6_vgathermwq,                     // llvm.hexagon.V6.vgathermwq
+    hexagon_V6_vgathermwq_128B,                // llvm.hexagon.V6.vgathermwq.128B
+    hexagon_V6_vgtb,                           // llvm.hexagon.V6.vgtb
+    hexagon_V6_vgtb_128B,                      // llvm.hexagon.V6.vgtb.128B
+    hexagon_V6_vgtb_and,                       // llvm.hexagon.V6.vgtb.and
+    hexagon_V6_vgtb_and_128B,                  // llvm.hexagon.V6.vgtb.and.128B
+    hexagon_V6_vgtb_or,                        // llvm.hexagon.V6.vgtb.or
+    hexagon_V6_vgtb_or_128B,                   // llvm.hexagon.V6.vgtb.or.128B
+    hexagon_V6_vgtb_xor,                       // llvm.hexagon.V6.vgtb.xor
+    hexagon_V6_vgtb_xor_128B,                  // llvm.hexagon.V6.vgtb.xor.128B
+    hexagon_V6_vgth,                           // llvm.hexagon.V6.vgth
+    hexagon_V6_vgth_128B,                      // llvm.hexagon.V6.vgth.128B
+    hexagon_V6_vgth_and,                       // llvm.hexagon.V6.vgth.and
+    hexagon_V6_vgth_and_128B,                  // llvm.hexagon.V6.vgth.and.128B
+    hexagon_V6_vgth_or,                        // llvm.hexagon.V6.vgth.or
+    hexagon_V6_vgth_or_128B,                   // llvm.hexagon.V6.vgth.or.128B
+    hexagon_V6_vgth_xor,                       // llvm.hexagon.V6.vgth.xor
+    hexagon_V6_vgth_xor_128B,                  // llvm.hexagon.V6.vgth.xor.128B
+    hexagon_V6_vgtub,                          // llvm.hexagon.V6.vgtub
+    hexagon_V6_vgtub_128B,                     // llvm.hexagon.V6.vgtub.128B
+    hexagon_V6_vgtub_and,                      // llvm.hexagon.V6.vgtub.and
+    hexagon_V6_vgtub_and_128B,                 // llvm.hexagon.V6.vgtub.and.128B
+    hexagon_V6_vgtub_or,                       // llvm.hexagon.V6.vgtub.or
+    hexagon_V6_vgtub_or_128B,                  // llvm.hexagon.V6.vgtub.or.128B
+    hexagon_V6_vgtub_xor,                      // llvm.hexagon.V6.vgtub.xor
+    hexagon_V6_vgtub_xor_128B,                 // llvm.hexagon.V6.vgtub.xor.128B
+    hexagon_V6_vgtuh,                          // llvm.hexagon.V6.vgtuh
+    hexagon_V6_vgtuh_128B,                     // llvm.hexagon.V6.vgtuh.128B
+    hexagon_V6_vgtuh_and,                      // llvm.hexagon.V6.vgtuh.and
+    hexagon_V6_vgtuh_and_128B,                 // llvm.hexagon.V6.vgtuh.and.128B
+    hexagon_V6_vgtuh_or,                       // llvm.hexagon.V6.vgtuh.or
+    hexagon_V6_vgtuh_or_128B,                  // llvm.hexagon.V6.vgtuh.or.128B
+    hexagon_V6_vgtuh_xor,                      // llvm.hexagon.V6.vgtuh.xor
+    hexagon_V6_vgtuh_xor_128B,                 // llvm.hexagon.V6.vgtuh.xor.128B
+    hexagon_V6_vgtuw,                          // llvm.hexagon.V6.vgtuw
+    hexagon_V6_vgtuw_128B,                     // llvm.hexagon.V6.vgtuw.128B
+    hexagon_V6_vgtuw_and,                      // llvm.hexagon.V6.vgtuw.and
+    hexagon_V6_vgtuw_and_128B,                 // llvm.hexagon.V6.vgtuw.and.128B
+    hexagon_V6_vgtuw_or,                       // llvm.hexagon.V6.vgtuw.or
+    hexagon_V6_vgtuw_or_128B,                  // llvm.hexagon.V6.vgtuw.or.128B
+    hexagon_V6_vgtuw_xor,                      // llvm.hexagon.V6.vgtuw.xor
+    hexagon_V6_vgtuw_xor_128B,                 // llvm.hexagon.V6.vgtuw.xor.128B
+    hexagon_V6_vgtw,                           // llvm.hexagon.V6.vgtw
+    hexagon_V6_vgtw_128B,                      // llvm.hexagon.V6.vgtw.128B
+    hexagon_V6_vgtw_and,                       // llvm.hexagon.V6.vgtw.and
+    hexagon_V6_vgtw_and_128B,                  // llvm.hexagon.V6.vgtw.and.128B
+    hexagon_V6_vgtw_or,                        // llvm.hexagon.V6.vgtw.or
+    hexagon_V6_vgtw_or_128B,                   // llvm.hexagon.V6.vgtw.or.128B
+    hexagon_V6_vgtw_xor,                       // llvm.hexagon.V6.vgtw.xor
+    hexagon_V6_vgtw_xor_128B,                  // llvm.hexagon.V6.vgtw.xor.128B
+    hexagon_V6_vinsertwr,                      // llvm.hexagon.V6.vinsertwr
+    hexagon_V6_vinsertwr_128B,                 // llvm.hexagon.V6.vinsertwr.128B
+    hexagon_V6_vlalignb,                       // llvm.hexagon.V6.vlalignb
+    hexagon_V6_vlalignb_128B,                  // llvm.hexagon.V6.vlalignb.128B
+    hexagon_V6_vlalignbi,                      // llvm.hexagon.V6.vlalignbi
+    hexagon_V6_vlalignbi_128B,                 // llvm.hexagon.V6.vlalignbi.128B
+    hexagon_V6_vlsrb,                          // llvm.hexagon.V6.vlsrb
+    hexagon_V6_vlsrb_128B,                     // llvm.hexagon.V6.vlsrb.128B
+    hexagon_V6_vlsrh,                          // llvm.hexagon.V6.vlsrh
+    hexagon_V6_vlsrh_128B,                     // llvm.hexagon.V6.vlsrh.128B
+    hexagon_V6_vlsrhv,                         // llvm.hexagon.V6.vlsrhv
+    hexagon_V6_vlsrhv_128B,                    // llvm.hexagon.V6.vlsrhv.128B
+    hexagon_V6_vlsrw,                          // llvm.hexagon.V6.vlsrw
+    hexagon_V6_vlsrw_128B,                     // llvm.hexagon.V6.vlsrw.128B
+    hexagon_V6_vlsrwv,                         // llvm.hexagon.V6.vlsrwv
+    hexagon_V6_vlsrwv_128B,                    // llvm.hexagon.V6.vlsrwv.128B
+    hexagon_V6_vlut4,                          // llvm.hexagon.V6.vlut4
+    hexagon_V6_vlut4_128B,                     // llvm.hexagon.V6.vlut4.128B
+    hexagon_V6_vlutvvb,                        // llvm.hexagon.V6.vlutvvb
+    hexagon_V6_vlutvvb_128B,                   // llvm.hexagon.V6.vlutvvb.128B
+    hexagon_V6_vlutvvb_nm,                     // llvm.hexagon.V6.vlutvvb.nm
+    hexagon_V6_vlutvvb_nm_128B,                // llvm.hexagon.V6.vlutvvb.nm.128B
+    hexagon_V6_vlutvvb_oracc,                  // llvm.hexagon.V6.vlutvvb.oracc
+    hexagon_V6_vlutvvb_oracc_128B,             // llvm.hexagon.V6.vlutvvb.oracc.128B
+    hexagon_V6_vlutvvb_oracci,                 // llvm.hexagon.V6.vlutvvb.oracci
+    hexagon_V6_vlutvvb_oracci_128B,            // llvm.hexagon.V6.vlutvvb.oracci.128B
+    hexagon_V6_vlutvvbi,                       // llvm.hexagon.V6.vlutvvbi
+    hexagon_V6_vlutvvbi_128B,                  // llvm.hexagon.V6.vlutvvbi.128B
+    hexagon_V6_vlutvwh,                        // llvm.hexagon.V6.vlutvwh
+    hexagon_V6_vlutvwh_128B,                   // llvm.hexagon.V6.vlutvwh.128B
+    hexagon_V6_vlutvwh_nm,                     // llvm.hexagon.V6.vlutvwh.nm
+    hexagon_V6_vlutvwh_nm_128B,                // llvm.hexagon.V6.vlutvwh.nm.128B
+    hexagon_V6_vlutvwh_oracc,                  // llvm.hexagon.V6.vlutvwh.oracc
+    hexagon_V6_vlutvwh_oracc_128B,             // llvm.hexagon.V6.vlutvwh.oracc.128B
+    hexagon_V6_vlutvwh_oracci,                 // llvm.hexagon.V6.vlutvwh.oracci
+    hexagon_V6_vlutvwh_oracci_128B,            // llvm.hexagon.V6.vlutvwh.oracci.128B
+    hexagon_V6_vlutvwhi,                       // llvm.hexagon.V6.vlutvwhi
+    hexagon_V6_vlutvwhi_128B,                  // llvm.hexagon.V6.vlutvwhi.128B
+    hexagon_V6_vmaskedstorenq,                 // llvm.hexagon.V6.vmaskedstorenq
+    hexagon_V6_vmaskedstorenq_128B,            // llvm.hexagon.V6.vmaskedstorenq.128B
+    hexagon_V6_vmaskedstorentnq,               // llvm.hexagon.V6.vmaskedstorentnq
+    hexagon_V6_vmaskedstorentnq_128B,          // llvm.hexagon.V6.vmaskedstorentnq.128B
+    hexagon_V6_vmaskedstorentq,                // llvm.hexagon.V6.vmaskedstorentq
+    hexagon_V6_vmaskedstorentq_128B,           // llvm.hexagon.V6.vmaskedstorentq.128B
+    hexagon_V6_vmaskedstoreq,                  // llvm.hexagon.V6.vmaskedstoreq
+    hexagon_V6_vmaskedstoreq_128B,             // llvm.hexagon.V6.vmaskedstoreq.128B
+    hexagon_V6_vmaxb,                          // llvm.hexagon.V6.vmaxb
+    hexagon_V6_vmaxb_128B,                     // llvm.hexagon.V6.vmaxb.128B
+    hexagon_V6_vmaxh,                          // llvm.hexagon.V6.vmaxh
+    hexagon_V6_vmaxh_128B,                     // llvm.hexagon.V6.vmaxh.128B
+    hexagon_V6_vmaxub,                         // llvm.hexagon.V6.vmaxub
+    hexagon_V6_vmaxub_128B,                    // llvm.hexagon.V6.vmaxub.128B
+    hexagon_V6_vmaxuh,                         // llvm.hexagon.V6.vmaxuh
+    hexagon_V6_vmaxuh_128B,                    // llvm.hexagon.V6.vmaxuh.128B
+    hexagon_V6_vmaxw,                          // llvm.hexagon.V6.vmaxw
+    hexagon_V6_vmaxw_128B,                     // llvm.hexagon.V6.vmaxw.128B
+    hexagon_V6_vminb,                          // llvm.hexagon.V6.vminb
+    hexagon_V6_vminb_128B,                     // llvm.hexagon.V6.vminb.128B
+    hexagon_V6_vminh,                          // llvm.hexagon.V6.vminh
+    hexagon_V6_vminh_128B,                     // llvm.hexagon.V6.vminh.128B
+    hexagon_V6_vminub,                         // llvm.hexagon.V6.vminub
+    hexagon_V6_vminub_128B,                    // llvm.hexagon.V6.vminub.128B
+    hexagon_V6_vminuh,                         // llvm.hexagon.V6.vminuh
+    hexagon_V6_vminuh_128B,                    // llvm.hexagon.V6.vminuh.128B
+    hexagon_V6_vminw,                          // llvm.hexagon.V6.vminw
+    hexagon_V6_vminw_128B,                     // llvm.hexagon.V6.vminw.128B
+    hexagon_V6_vmpabus,                        // llvm.hexagon.V6.vmpabus
+    hexagon_V6_vmpabus_128B,                   // llvm.hexagon.V6.vmpabus.128B
+    hexagon_V6_vmpabus_acc,                    // llvm.hexagon.V6.vmpabus.acc
+    hexagon_V6_vmpabus_acc_128B,               // llvm.hexagon.V6.vmpabus.acc.128B
+    hexagon_V6_vmpabusv,                       // llvm.hexagon.V6.vmpabusv
+    hexagon_V6_vmpabusv_128B,                  // llvm.hexagon.V6.vmpabusv.128B
+    hexagon_V6_vmpabuu,                        // llvm.hexagon.V6.vmpabuu
+    hexagon_V6_vmpabuu_128B,                   // llvm.hexagon.V6.vmpabuu.128B
+    hexagon_V6_vmpabuu_acc,                    // llvm.hexagon.V6.vmpabuu.acc
+    hexagon_V6_vmpabuu_acc_128B,               // llvm.hexagon.V6.vmpabuu.acc.128B
+    hexagon_V6_vmpabuuv,                       // llvm.hexagon.V6.vmpabuuv
+    hexagon_V6_vmpabuuv_128B,                  // llvm.hexagon.V6.vmpabuuv.128B
+    hexagon_V6_vmpahb,                         // llvm.hexagon.V6.vmpahb
+    hexagon_V6_vmpahb_128B,                    // llvm.hexagon.V6.vmpahb.128B
+    hexagon_V6_vmpahb_acc,                     // llvm.hexagon.V6.vmpahb.acc
+    hexagon_V6_vmpahb_acc_128B,                // llvm.hexagon.V6.vmpahb.acc.128B
+    hexagon_V6_vmpahhsat,                      // llvm.hexagon.V6.vmpahhsat
+    hexagon_V6_vmpahhsat_128B,                 // llvm.hexagon.V6.vmpahhsat.128B
+    hexagon_V6_vmpauhb,                        // llvm.hexagon.V6.vmpauhb
+    hexagon_V6_vmpauhb_128B,                   // llvm.hexagon.V6.vmpauhb.128B
+    hexagon_V6_vmpauhb_acc,                    // llvm.hexagon.V6.vmpauhb.acc
+    hexagon_V6_vmpauhb_acc_128B,               // llvm.hexagon.V6.vmpauhb.acc.128B
+    hexagon_V6_vmpauhuhsat,                    // llvm.hexagon.V6.vmpauhuhsat
+    hexagon_V6_vmpauhuhsat_128B,               // llvm.hexagon.V6.vmpauhuhsat.128B
+    hexagon_V6_vmpsuhuhsat,                    // llvm.hexagon.V6.vmpsuhuhsat
+    hexagon_V6_vmpsuhuhsat_128B,               // llvm.hexagon.V6.vmpsuhuhsat.128B
+    hexagon_V6_vmpybus,                        // llvm.hexagon.V6.vmpybus
+    hexagon_V6_vmpybus_128B,                   // llvm.hexagon.V6.vmpybus.128B
+    hexagon_V6_vmpybus_acc,                    // llvm.hexagon.V6.vmpybus.acc
+    hexagon_V6_vmpybus_acc_128B,               // llvm.hexagon.V6.vmpybus.acc.128B
+    hexagon_V6_vmpybusv,                       // llvm.hexagon.V6.vmpybusv
+    hexagon_V6_vmpybusv_128B,                  // llvm.hexagon.V6.vmpybusv.128B
+    hexagon_V6_vmpybusv_acc,                   // llvm.hexagon.V6.vmpybusv.acc
+    hexagon_V6_vmpybusv_acc_128B,              // llvm.hexagon.V6.vmpybusv.acc.128B
+    hexagon_V6_vmpybv,                         // llvm.hexagon.V6.vmpybv
+    hexagon_V6_vmpybv_128B,                    // llvm.hexagon.V6.vmpybv.128B
+    hexagon_V6_vmpybv_acc,                     // llvm.hexagon.V6.vmpybv.acc
+    hexagon_V6_vmpybv_acc_128B,                // llvm.hexagon.V6.vmpybv.acc.128B
+    hexagon_V6_vmpyewuh,                       // llvm.hexagon.V6.vmpyewuh
+    hexagon_V6_vmpyewuh_128B,                  // llvm.hexagon.V6.vmpyewuh.128B
+    hexagon_V6_vmpyewuh_64,                    // llvm.hexagon.V6.vmpyewuh.64
+    hexagon_V6_vmpyewuh_64_128B,               // llvm.hexagon.V6.vmpyewuh.64.128B
+    hexagon_V6_vmpyh,                          // llvm.hexagon.V6.vmpyh
+    hexagon_V6_vmpyh_128B,                     // llvm.hexagon.V6.vmpyh.128B
+    hexagon_V6_vmpyh_acc,                      // llvm.hexagon.V6.vmpyh.acc
+    hexagon_V6_vmpyh_acc_128B,                 // llvm.hexagon.V6.vmpyh.acc.128B
+    hexagon_V6_vmpyhsat_acc,                   // llvm.hexagon.V6.vmpyhsat.acc
+    hexagon_V6_vmpyhsat_acc_128B,              // llvm.hexagon.V6.vmpyhsat.acc.128B
+    hexagon_V6_vmpyhsrs,                       // llvm.hexagon.V6.vmpyhsrs
+    hexagon_V6_vmpyhsrs_128B,                  // llvm.hexagon.V6.vmpyhsrs.128B
+    hexagon_V6_vmpyhss,                        // llvm.hexagon.V6.vmpyhss
+    hexagon_V6_vmpyhss_128B,                   // llvm.hexagon.V6.vmpyhss.128B
+    hexagon_V6_vmpyhus,                        // llvm.hexagon.V6.vmpyhus
+    hexagon_V6_vmpyhus_128B,                   // llvm.hexagon.V6.vmpyhus.128B
+    hexagon_V6_vmpyhus_acc,                    // llvm.hexagon.V6.vmpyhus.acc
+    hexagon_V6_vmpyhus_acc_128B,               // llvm.hexagon.V6.vmpyhus.acc.128B
+    hexagon_V6_vmpyhv,                         // llvm.hexagon.V6.vmpyhv
+    hexagon_V6_vmpyhv_128B,                    // llvm.hexagon.V6.vmpyhv.128B
+    hexagon_V6_vmpyhv_acc,                     // llvm.hexagon.V6.vmpyhv.acc
+    hexagon_V6_vmpyhv_acc_128B,                // llvm.hexagon.V6.vmpyhv.acc.128B
+    hexagon_V6_vmpyhvsrs,                      // llvm.hexagon.V6.vmpyhvsrs
+    hexagon_V6_vmpyhvsrs_128B,                 // llvm.hexagon.V6.vmpyhvsrs.128B
+    hexagon_V6_vmpyieoh,                       // llvm.hexagon.V6.vmpyieoh
+    hexagon_V6_vmpyieoh_128B,                  // llvm.hexagon.V6.vmpyieoh.128B
+    hexagon_V6_vmpyiewh_acc,                   // llvm.hexagon.V6.vmpyiewh.acc
+    hexagon_V6_vmpyiewh_acc_128B,              // llvm.hexagon.V6.vmpyiewh.acc.128B
+    hexagon_V6_vmpyiewuh,                      // llvm.hexagon.V6.vmpyiewuh
+    hexagon_V6_vmpyiewuh_128B,                 // llvm.hexagon.V6.vmpyiewuh.128B
+    hexagon_V6_vmpyiewuh_acc,                  // llvm.hexagon.V6.vmpyiewuh.acc
+    hexagon_V6_vmpyiewuh_acc_128B,             // llvm.hexagon.V6.vmpyiewuh.acc.128B
+    hexagon_V6_vmpyih,                         // llvm.hexagon.V6.vmpyih
+    hexagon_V6_vmpyih_128B,                    // llvm.hexagon.V6.vmpyih.128B
+    hexagon_V6_vmpyih_acc,                     // llvm.hexagon.V6.vmpyih.acc
+    hexagon_V6_vmpyih_acc_128B,                // llvm.hexagon.V6.vmpyih.acc.128B
+    hexagon_V6_vmpyihb,                        // llvm.hexagon.V6.vmpyihb
+    hexagon_V6_vmpyihb_128B,                   // llvm.hexagon.V6.vmpyihb.128B
+    hexagon_V6_vmpyihb_acc,                    // llvm.hexagon.V6.vmpyihb.acc
+    hexagon_V6_vmpyihb_acc_128B,               // llvm.hexagon.V6.vmpyihb.acc.128B
+    hexagon_V6_vmpyiowh,                       // llvm.hexagon.V6.vmpyiowh
+    hexagon_V6_vmpyiowh_128B,                  // llvm.hexagon.V6.vmpyiowh.128B
+    hexagon_V6_vmpyiwb,                        // llvm.hexagon.V6.vmpyiwb
+    hexagon_V6_vmpyiwb_128B,                   // llvm.hexagon.V6.vmpyiwb.128B
+    hexagon_V6_vmpyiwb_acc,                    // llvm.hexagon.V6.vmpyiwb.acc
+    hexagon_V6_vmpyiwb_acc_128B,               // llvm.hexagon.V6.vmpyiwb.acc.128B
+    hexagon_V6_vmpyiwh,                        // llvm.hexagon.V6.vmpyiwh
+    hexagon_V6_vmpyiwh_128B,                   // llvm.hexagon.V6.vmpyiwh.128B
+    hexagon_V6_vmpyiwh_acc,                    // llvm.hexagon.V6.vmpyiwh.acc
+    hexagon_V6_vmpyiwh_acc_128B,               // llvm.hexagon.V6.vmpyiwh.acc.128B
+    hexagon_V6_vmpyiwub,                       // llvm.hexagon.V6.vmpyiwub
+    hexagon_V6_vmpyiwub_128B,                  // llvm.hexagon.V6.vmpyiwub.128B
+    hexagon_V6_vmpyiwub_acc,                   // llvm.hexagon.V6.vmpyiwub.acc
+    hexagon_V6_vmpyiwub_acc_128B,              // llvm.hexagon.V6.vmpyiwub.acc.128B
+    hexagon_V6_vmpyowh,                        // llvm.hexagon.V6.vmpyowh
+    hexagon_V6_vmpyowh_128B,                   // llvm.hexagon.V6.vmpyowh.128B
+    hexagon_V6_vmpyowh_64_acc,                 // llvm.hexagon.V6.vmpyowh.64.acc
+    hexagon_V6_vmpyowh_64_acc_128B,            // llvm.hexagon.V6.vmpyowh.64.acc.128B
+    hexagon_V6_vmpyowh_rnd,                    // llvm.hexagon.V6.vmpyowh.rnd
+    hexagon_V6_vmpyowh_rnd_128B,               // llvm.hexagon.V6.vmpyowh.rnd.128B
+    hexagon_V6_vmpyowh_rnd_sacc,               // llvm.hexagon.V6.vmpyowh.rnd.sacc
+    hexagon_V6_vmpyowh_rnd_sacc_128B,          // llvm.hexagon.V6.vmpyowh.rnd.sacc.128B
+    hexagon_V6_vmpyowh_sacc,                   // llvm.hexagon.V6.vmpyowh.sacc
+    hexagon_V6_vmpyowh_sacc_128B,              // llvm.hexagon.V6.vmpyowh.sacc.128B
+    hexagon_V6_vmpyub,                         // llvm.hexagon.V6.vmpyub
+    hexagon_V6_vmpyub_128B,                    // llvm.hexagon.V6.vmpyub.128B
+    hexagon_V6_vmpyub_acc,                     // llvm.hexagon.V6.vmpyub.acc
+    hexagon_V6_vmpyub_acc_128B,                // llvm.hexagon.V6.vmpyub.acc.128B
+    hexagon_V6_vmpyubv,                        // llvm.hexagon.V6.vmpyubv
+    hexagon_V6_vmpyubv_128B,                   // llvm.hexagon.V6.vmpyubv.128B
+    hexagon_V6_vmpyubv_acc,                    // llvm.hexagon.V6.vmpyubv.acc
+    hexagon_V6_vmpyubv_acc_128B,               // llvm.hexagon.V6.vmpyubv.acc.128B
+    hexagon_V6_vmpyuh,                         // llvm.hexagon.V6.vmpyuh
+    hexagon_V6_vmpyuh_128B,                    // llvm.hexagon.V6.vmpyuh.128B
+    hexagon_V6_vmpyuh_acc,                     // llvm.hexagon.V6.vmpyuh.acc
+    hexagon_V6_vmpyuh_acc_128B,                // llvm.hexagon.V6.vmpyuh.acc.128B
+    hexagon_V6_vmpyuhe,                        // llvm.hexagon.V6.vmpyuhe
+    hexagon_V6_vmpyuhe_128B,                   // llvm.hexagon.V6.vmpyuhe.128B
+    hexagon_V6_vmpyuhe_acc,                    // llvm.hexagon.V6.vmpyuhe.acc
+    hexagon_V6_vmpyuhe_acc_128B,               // llvm.hexagon.V6.vmpyuhe.acc.128B
+    hexagon_V6_vmpyuhv,                        // llvm.hexagon.V6.vmpyuhv
+    hexagon_V6_vmpyuhv_128B,                   // llvm.hexagon.V6.vmpyuhv.128B
+    hexagon_V6_vmpyuhv_acc,                    // llvm.hexagon.V6.vmpyuhv.acc
+    hexagon_V6_vmpyuhv_acc_128B,               // llvm.hexagon.V6.vmpyuhv.acc.128B
+    hexagon_V6_vmux,                           // llvm.hexagon.V6.vmux
+    hexagon_V6_vmux_128B,                      // llvm.hexagon.V6.vmux.128B
+    hexagon_V6_vnavgb,                         // llvm.hexagon.V6.vnavgb
+    hexagon_V6_vnavgb_128B,                    // llvm.hexagon.V6.vnavgb.128B
+    hexagon_V6_vnavgh,                         // llvm.hexagon.V6.vnavgh
+    hexagon_V6_vnavgh_128B,                    // llvm.hexagon.V6.vnavgh.128B
+    hexagon_V6_vnavgub,                        // llvm.hexagon.V6.vnavgub
+    hexagon_V6_vnavgub_128B,                   // llvm.hexagon.V6.vnavgub.128B
+    hexagon_V6_vnavgw,                         // llvm.hexagon.V6.vnavgw
+    hexagon_V6_vnavgw_128B,                    // llvm.hexagon.V6.vnavgw.128B
+    hexagon_V6_vnormamth,                      // llvm.hexagon.V6.vnormamth
+    hexagon_V6_vnormamth_128B,                 // llvm.hexagon.V6.vnormamth.128B
+    hexagon_V6_vnormamtw,                      // llvm.hexagon.V6.vnormamtw
+    hexagon_V6_vnormamtw_128B,                 // llvm.hexagon.V6.vnormamtw.128B
+    hexagon_V6_vnot,                           // llvm.hexagon.V6.vnot
+    hexagon_V6_vnot_128B,                      // llvm.hexagon.V6.vnot.128B
+    hexagon_V6_vor,                            // llvm.hexagon.V6.vor
+    hexagon_V6_vor_128B,                       // llvm.hexagon.V6.vor.128B
+    hexagon_V6_vpackeb,                        // llvm.hexagon.V6.vpackeb
+    hexagon_V6_vpackeb_128B,                   // llvm.hexagon.V6.vpackeb.128B
+    hexagon_V6_vpackeh,                        // llvm.hexagon.V6.vpackeh
+    hexagon_V6_vpackeh_128B,                   // llvm.hexagon.V6.vpackeh.128B
+    hexagon_V6_vpackhb_sat,                    // llvm.hexagon.V6.vpackhb.sat
+    hexagon_V6_vpackhb_sat_128B,               // llvm.hexagon.V6.vpackhb.sat.128B
+    hexagon_V6_vpackhub_sat,                   // llvm.hexagon.V6.vpackhub.sat
+    hexagon_V6_vpackhub_sat_128B,              // llvm.hexagon.V6.vpackhub.sat.128B
+    hexagon_V6_vpackob,                        // llvm.hexagon.V6.vpackob
+    hexagon_V6_vpackob_128B,                   // llvm.hexagon.V6.vpackob.128B
+    hexagon_V6_vpackoh,                        // llvm.hexagon.V6.vpackoh
+    hexagon_V6_vpackoh_128B,                   // llvm.hexagon.V6.vpackoh.128B
+    hexagon_V6_vpackwh_sat,                    // llvm.hexagon.V6.vpackwh.sat
+    hexagon_V6_vpackwh_sat_128B,               // llvm.hexagon.V6.vpackwh.sat.128B
+    hexagon_V6_vpackwuh_sat,                   // llvm.hexagon.V6.vpackwuh.sat
+    hexagon_V6_vpackwuh_sat_128B,              // llvm.hexagon.V6.vpackwuh.sat.128B
+    hexagon_V6_vpopcounth,                     // llvm.hexagon.V6.vpopcounth
+    hexagon_V6_vpopcounth_128B,                // llvm.hexagon.V6.vpopcounth.128B
+    hexagon_V6_vprefixqb,                      // llvm.hexagon.V6.vprefixqb
+    hexagon_V6_vprefixqb_128B,                 // llvm.hexagon.V6.vprefixqb.128B
+    hexagon_V6_vprefixqh,                      // llvm.hexagon.V6.vprefixqh
+    hexagon_V6_vprefixqh_128B,                 // llvm.hexagon.V6.vprefixqh.128B
+    hexagon_V6_vprefixqw,                      // llvm.hexagon.V6.vprefixqw
+    hexagon_V6_vprefixqw_128B,                 // llvm.hexagon.V6.vprefixqw.128B
+    hexagon_V6_vrdelta,                        // llvm.hexagon.V6.vrdelta
+    hexagon_V6_vrdelta_128B,                   // llvm.hexagon.V6.vrdelta.128B
+    hexagon_V6_vrmpybub_rtt,                   // llvm.hexagon.V6.vrmpybub.rtt
+    hexagon_V6_vrmpybub_rtt_128B,              // llvm.hexagon.V6.vrmpybub.rtt.128B
+    hexagon_V6_vrmpybub_rtt_acc,               // llvm.hexagon.V6.vrmpybub.rtt.acc
+    hexagon_V6_vrmpybub_rtt_acc_128B,          // llvm.hexagon.V6.vrmpybub.rtt.acc.128B
+    hexagon_V6_vrmpybus,                       // llvm.hexagon.V6.vrmpybus
+    hexagon_V6_vrmpybus_128B,                  // llvm.hexagon.V6.vrmpybus.128B
+    hexagon_V6_vrmpybus_acc,                   // llvm.hexagon.V6.vrmpybus.acc
+    hexagon_V6_vrmpybus_acc_128B,              // llvm.hexagon.V6.vrmpybus.acc.128B
+    hexagon_V6_vrmpybusi,                      // llvm.hexagon.V6.vrmpybusi
+    hexagon_V6_vrmpybusi_128B,                 // llvm.hexagon.V6.vrmpybusi.128B
+    hexagon_V6_vrmpybusi_acc,                  // llvm.hexagon.V6.vrmpybusi.acc
+    hexagon_V6_vrmpybusi_acc_128B,             // llvm.hexagon.V6.vrmpybusi.acc.128B
+    hexagon_V6_vrmpybusv,                      // llvm.hexagon.V6.vrmpybusv
+    hexagon_V6_vrmpybusv_128B,                 // llvm.hexagon.V6.vrmpybusv.128B
+    hexagon_V6_vrmpybusv_acc,                  // llvm.hexagon.V6.vrmpybusv.acc
+    hexagon_V6_vrmpybusv_acc_128B,             // llvm.hexagon.V6.vrmpybusv.acc.128B
+    hexagon_V6_vrmpybv,                        // llvm.hexagon.V6.vrmpybv
+    hexagon_V6_vrmpybv_128B,                   // llvm.hexagon.V6.vrmpybv.128B
+    hexagon_V6_vrmpybv_acc,                    // llvm.hexagon.V6.vrmpybv.acc
+    hexagon_V6_vrmpybv_acc_128B,               // llvm.hexagon.V6.vrmpybv.acc.128B
+    hexagon_V6_vrmpyub,                        // llvm.hexagon.V6.vrmpyub
+    hexagon_V6_vrmpyub_128B,                   // llvm.hexagon.V6.vrmpyub.128B
+    hexagon_V6_vrmpyub_acc,                    // llvm.hexagon.V6.vrmpyub.acc
+    hexagon_V6_vrmpyub_acc_128B,               // llvm.hexagon.V6.vrmpyub.acc.128B
+    hexagon_V6_vrmpyub_rtt,                    // llvm.hexagon.V6.vrmpyub.rtt
+    hexagon_V6_vrmpyub_rtt_128B,               // llvm.hexagon.V6.vrmpyub.rtt.128B
+    hexagon_V6_vrmpyub_rtt_acc,                // llvm.hexagon.V6.vrmpyub.rtt.acc
+    hexagon_V6_vrmpyub_rtt_acc_128B,           // llvm.hexagon.V6.vrmpyub.rtt.acc.128B
+    hexagon_V6_vrmpyubi,                       // llvm.hexagon.V6.vrmpyubi
+    hexagon_V6_vrmpyubi_128B,                  // llvm.hexagon.V6.vrmpyubi.128B
+    hexagon_V6_vrmpyubi_acc,                   // llvm.hexagon.V6.vrmpyubi.acc
+    hexagon_V6_vrmpyubi_acc_128B,              // llvm.hexagon.V6.vrmpyubi.acc.128B
+    hexagon_V6_vrmpyubv,                       // llvm.hexagon.V6.vrmpyubv
+    hexagon_V6_vrmpyubv_128B,                  // llvm.hexagon.V6.vrmpyubv.128B
+    hexagon_V6_vrmpyubv_acc,                   // llvm.hexagon.V6.vrmpyubv.acc
+    hexagon_V6_vrmpyubv_acc_128B,              // llvm.hexagon.V6.vrmpyubv.acc.128B
+    hexagon_V6_vror,                           // llvm.hexagon.V6.vror
+    hexagon_V6_vror_128B,                      // llvm.hexagon.V6.vror.128B
+    hexagon_V6_vroundhb,                       // llvm.hexagon.V6.vroundhb
+    hexagon_V6_vroundhb_128B,                  // llvm.hexagon.V6.vroundhb.128B
+    hexagon_V6_vroundhub,                      // llvm.hexagon.V6.vroundhub
+    hexagon_V6_vroundhub_128B,                 // llvm.hexagon.V6.vroundhub.128B
+    hexagon_V6_vrounduhub,                     // llvm.hexagon.V6.vrounduhub
+    hexagon_V6_vrounduhub_128B,                // llvm.hexagon.V6.vrounduhub.128B
+    hexagon_V6_vrounduwuh,                     // llvm.hexagon.V6.vrounduwuh
+    hexagon_V6_vrounduwuh_128B,                // llvm.hexagon.V6.vrounduwuh.128B
+    hexagon_V6_vroundwh,                       // llvm.hexagon.V6.vroundwh
+    hexagon_V6_vroundwh_128B,                  // llvm.hexagon.V6.vroundwh.128B
+    hexagon_V6_vroundwuh,                      // llvm.hexagon.V6.vroundwuh
+    hexagon_V6_vroundwuh_128B,                 // llvm.hexagon.V6.vroundwuh.128B
+    hexagon_V6_vrsadubi,                       // llvm.hexagon.V6.vrsadubi
+    hexagon_V6_vrsadubi_128B,                  // llvm.hexagon.V6.vrsadubi.128B
+    hexagon_V6_vrsadubi_acc,                   // llvm.hexagon.V6.vrsadubi.acc
+    hexagon_V6_vrsadubi_acc_128B,              // llvm.hexagon.V6.vrsadubi.acc.128B
+    hexagon_V6_vsathub,                        // llvm.hexagon.V6.vsathub
+    hexagon_V6_vsathub_128B,                   // llvm.hexagon.V6.vsathub.128B
+    hexagon_V6_vsatuwuh,                       // llvm.hexagon.V6.vsatuwuh
+    hexagon_V6_vsatuwuh_128B,                  // llvm.hexagon.V6.vsatuwuh.128B
+    hexagon_V6_vsatwh,                         // llvm.hexagon.V6.vsatwh
+    hexagon_V6_vsatwh_128B,                    // llvm.hexagon.V6.vsatwh.128B
+    hexagon_V6_vsb,                            // llvm.hexagon.V6.vsb
+    hexagon_V6_vsb_128B,                       // llvm.hexagon.V6.vsb.128B
+    hexagon_V6_vscattermh,                     // llvm.hexagon.V6.vscattermh
+    hexagon_V6_vscattermh_128B,                // llvm.hexagon.V6.vscattermh.128B
+    hexagon_V6_vscattermh_add,                 // llvm.hexagon.V6.vscattermh.add
+    hexagon_V6_vscattermh_add_128B,            // llvm.hexagon.V6.vscattermh.add.128B
+    hexagon_V6_vscattermhq,                    // llvm.hexagon.V6.vscattermhq
+    hexagon_V6_vscattermhq_128B,               // llvm.hexagon.V6.vscattermhq.128B
+    hexagon_V6_vscattermhw,                    // llvm.hexagon.V6.vscattermhw
+    hexagon_V6_vscattermhw_128B,               // llvm.hexagon.V6.vscattermhw.128B
+    hexagon_V6_vscattermhw_add,                // llvm.hexagon.V6.vscattermhw.add
+    hexagon_V6_vscattermhw_add_128B,           // llvm.hexagon.V6.vscattermhw.add.128B
+    hexagon_V6_vscattermhwq,                   // llvm.hexagon.V6.vscattermhwq
+    hexagon_V6_vscattermhwq_128B,              // llvm.hexagon.V6.vscattermhwq.128B
+    hexagon_V6_vscattermw,                     // llvm.hexagon.V6.vscattermw
+    hexagon_V6_vscattermw_128B,                // llvm.hexagon.V6.vscattermw.128B
+    hexagon_V6_vscattermw_add,                 // llvm.hexagon.V6.vscattermw.add
+    hexagon_V6_vscattermw_add_128B,            // llvm.hexagon.V6.vscattermw.add.128B
+    hexagon_V6_vscattermwq,                    // llvm.hexagon.V6.vscattermwq
+    hexagon_V6_vscattermwq_128B,               // llvm.hexagon.V6.vscattermwq.128B
+    hexagon_V6_vsh,                            // llvm.hexagon.V6.vsh
+    hexagon_V6_vsh_128B,                       // llvm.hexagon.V6.vsh.128B
+    hexagon_V6_vshufeh,                        // llvm.hexagon.V6.vshufeh
+    hexagon_V6_vshufeh_128B,                   // llvm.hexagon.V6.vshufeh.128B
+    hexagon_V6_vshuffb,                        // llvm.hexagon.V6.vshuffb
+    hexagon_V6_vshuffb_128B,                   // llvm.hexagon.V6.vshuffb.128B
+    hexagon_V6_vshuffeb,                       // llvm.hexagon.V6.vshuffeb
+    hexagon_V6_vshuffeb_128B,                  // llvm.hexagon.V6.vshuffeb.128B
+    hexagon_V6_vshuffh,                        // llvm.hexagon.V6.vshuffh
+    hexagon_V6_vshuffh_128B,                   // llvm.hexagon.V6.vshuffh.128B
+    hexagon_V6_vshuffob,                       // llvm.hexagon.V6.vshuffob
+    hexagon_V6_vshuffob_128B,                  // llvm.hexagon.V6.vshuffob.128B
+    hexagon_V6_vshuffvdd,                      // llvm.hexagon.V6.vshuffvdd
+    hexagon_V6_vshuffvdd_128B,                 // llvm.hexagon.V6.vshuffvdd.128B
+    hexagon_V6_vshufoeb,                       // llvm.hexagon.V6.vshufoeb
+    hexagon_V6_vshufoeb_128B,                  // llvm.hexagon.V6.vshufoeb.128B
+    hexagon_V6_vshufoeh,                       // llvm.hexagon.V6.vshufoeh
+    hexagon_V6_vshufoeh_128B,                  // llvm.hexagon.V6.vshufoeh.128B
+    hexagon_V6_vshufoh,                        // llvm.hexagon.V6.vshufoh
+    hexagon_V6_vshufoh_128B,                   // llvm.hexagon.V6.vshufoh.128B
+    hexagon_V6_vsubb,                          // llvm.hexagon.V6.vsubb
+    hexagon_V6_vsubb_128B,                     // llvm.hexagon.V6.vsubb.128B
+    hexagon_V6_vsubb_dv,                       // llvm.hexagon.V6.vsubb.dv
+    hexagon_V6_vsubb_dv_128B,                  // llvm.hexagon.V6.vsubb.dv.128B
+    hexagon_V6_vsubbnq,                        // llvm.hexagon.V6.vsubbnq
+    hexagon_V6_vsubbnq_128B,                   // llvm.hexagon.V6.vsubbnq.128B
+    hexagon_V6_vsubbq,                         // llvm.hexagon.V6.vsubbq
+    hexagon_V6_vsubbq_128B,                    // llvm.hexagon.V6.vsubbq.128B
+    hexagon_V6_vsubbsat,                       // llvm.hexagon.V6.vsubbsat
+    hexagon_V6_vsubbsat_128B,                  // llvm.hexagon.V6.vsubbsat.128B
+    hexagon_V6_vsubbsat_dv,                    // llvm.hexagon.V6.vsubbsat.dv
+    hexagon_V6_vsubbsat_dv_128B,               // llvm.hexagon.V6.vsubbsat.dv.128B
+    hexagon_V6_vsubcarry,                      // llvm.hexagon.V6.vsubcarry
+    hexagon_V6_vsubcarry_128B,                 // llvm.hexagon.V6.vsubcarry.128B
+    hexagon_V6_vsubh,                          // llvm.hexagon.V6.vsubh
+    hexagon_V6_vsubh_128B,                     // llvm.hexagon.V6.vsubh.128B
+    hexagon_V6_vsubh_dv,                       // llvm.hexagon.V6.vsubh.dv
+    hexagon_V6_vsubh_dv_128B,                  // llvm.hexagon.V6.vsubh.dv.128B
+    hexagon_V6_vsubhnq,                        // llvm.hexagon.V6.vsubhnq
+    hexagon_V6_vsubhnq_128B,                   // llvm.hexagon.V6.vsubhnq.128B
+    hexagon_V6_vsubhq,                         // llvm.hexagon.V6.vsubhq
+    hexagon_V6_vsubhq_128B,                    // llvm.hexagon.V6.vsubhq.128B
+    hexagon_V6_vsubhsat,                       // llvm.hexagon.V6.vsubhsat
+    hexagon_V6_vsubhsat_128B,                  // llvm.hexagon.V6.vsubhsat.128B
+    hexagon_V6_vsubhsat_dv,                    // llvm.hexagon.V6.vsubhsat.dv
+    hexagon_V6_vsubhsat_dv_128B,               // llvm.hexagon.V6.vsubhsat.dv.128B
+    hexagon_V6_vsubhw,                         // llvm.hexagon.V6.vsubhw
+    hexagon_V6_vsubhw_128B,                    // llvm.hexagon.V6.vsubhw.128B
+    hexagon_V6_vsububh,                        // llvm.hexagon.V6.vsububh
+    hexagon_V6_vsububh_128B,                   // llvm.hexagon.V6.vsububh.128B
+    hexagon_V6_vsububsat,                      // llvm.hexagon.V6.vsububsat
+    hexagon_V6_vsububsat_128B,                 // llvm.hexagon.V6.vsububsat.128B
+    hexagon_V6_vsububsat_dv,                   // llvm.hexagon.V6.vsububsat.dv
+    hexagon_V6_vsububsat_dv_128B,              // llvm.hexagon.V6.vsububsat.dv.128B
+    hexagon_V6_vsubububb_sat,                  // llvm.hexagon.V6.vsubububb.sat
+    hexagon_V6_vsubububb_sat_128B,             // llvm.hexagon.V6.vsubububb.sat.128B
+    hexagon_V6_vsubuhsat,                      // llvm.hexagon.V6.vsubuhsat
+    hexagon_V6_vsubuhsat_128B,                 // llvm.hexagon.V6.vsubuhsat.128B
+    hexagon_V6_vsubuhsat_dv,                   // llvm.hexagon.V6.vsubuhsat.dv
+    hexagon_V6_vsubuhsat_dv_128B,              // llvm.hexagon.V6.vsubuhsat.dv.128B
+    hexagon_V6_vsubuhw,                        // llvm.hexagon.V6.vsubuhw
+    hexagon_V6_vsubuhw_128B,                   // llvm.hexagon.V6.vsubuhw.128B
+    hexagon_V6_vsubuwsat,                      // llvm.hexagon.V6.vsubuwsat
+    hexagon_V6_vsubuwsat_128B,                 // llvm.hexagon.V6.vsubuwsat.128B
+    hexagon_V6_vsubuwsat_dv,                   // llvm.hexagon.V6.vsubuwsat.dv
+    hexagon_V6_vsubuwsat_dv_128B,              // llvm.hexagon.V6.vsubuwsat.dv.128B
+    hexagon_V6_vsubw,                          // llvm.hexagon.V6.vsubw
+    hexagon_V6_vsubw_128B,                     // llvm.hexagon.V6.vsubw.128B
+    hexagon_V6_vsubw_dv,                       // llvm.hexagon.V6.vsubw.dv
+    hexagon_V6_vsubw_dv_128B,                  // llvm.hexagon.V6.vsubw.dv.128B
+    hexagon_V6_vsubwnq,                        // llvm.hexagon.V6.vsubwnq
+    hexagon_V6_vsubwnq_128B,                   // llvm.hexagon.V6.vsubwnq.128B
+    hexagon_V6_vsubwq,                         // llvm.hexagon.V6.vsubwq
+    hexagon_V6_vsubwq_128B,                    // llvm.hexagon.V6.vsubwq.128B
+    hexagon_V6_vsubwsat,                       // llvm.hexagon.V6.vsubwsat
+    hexagon_V6_vsubwsat_128B,                  // llvm.hexagon.V6.vsubwsat.128B
+    hexagon_V6_vsubwsat_dv,                    // llvm.hexagon.V6.vsubwsat.dv
+    hexagon_V6_vsubwsat_dv_128B,               // llvm.hexagon.V6.vsubwsat.dv.128B
+    hexagon_V6_vswap,                          // llvm.hexagon.V6.vswap
+    hexagon_V6_vswap_128B,                     // llvm.hexagon.V6.vswap.128B
+    hexagon_V6_vtmpyb,                         // llvm.hexagon.V6.vtmpyb
+    hexagon_V6_vtmpyb_128B,                    // llvm.hexagon.V6.vtmpyb.128B
+    hexagon_V6_vtmpyb_acc,                     // llvm.hexagon.V6.vtmpyb.acc
+    hexagon_V6_vtmpyb_acc_128B,                // llvm.hexagon.V6.vtmpyb.acc.128B
+    hexagon_V6_vtmpybus,                       // llvm.hexagon.V6.vtmpybus
+    hexagon_V6_vtmpybus_128B,                  // llvm.hexagon.V6.vtmpybus.128B
+    hexagon_V6_vtmpybus_acc,                   // llvm.hexagon.V6.vtmpybus.acc
+    hexagon_V6_vtmpybus_acc_128B,              // llvm.hexagon.V6.vtmpybus.acc.128B
+    hexagon_V6_vtmpyhb,                        // llvm.hexagon.V6.vtmpyhb
+    hexagon_V6_vtmpyhb_128B,                   // llvm.hexagon.V6.vtmpyhb.128B
+    hexagon_V6_vtmpyhb_acc,                    // llvm.hexagon.V6.vtmpyhb.acc
+    hexagon_V6_vtmpyhb_acc_128B,               // llvm.hexagon.V6.vtmpyhb.acc.128B
+    hexagon_V6_vunpackb,                       // llvm.hexagon.V6.vunpackb
+    hexagon_V6_vunpackb_128B,                  // llvm.hexagon.V6.vunpackb.128B
+    hexagon_V6_vunpackh,                       // llvm.hexagon.V6.vunpackh
+    hexagon_V6_vunpackh_128B,                  // llvm.hexagon.V6.vunpackh.128B
+    hexagon_V6_vunpackob,                      // llvm.hexagon.V6.vunpackob
+    hexagon_V6_vunpackob_128B,                 // llvm.hexagon.V6.vunpackob.128B
+    hexagon_V6_vunpackoh,                      // llvm.hexagon.V6.vunpackoh
+    hexagon_V6_vunpackoh_128B,                 // llvm.hexagon.V6.vunpackoh.128B
+    hexagon_V6_vunpackub,                      // llvm.hexagon.V6.vunpackub
+    hexagon_V6_vunpackub_128B,                 // llvm.hexagon.V6.vunpackub.128B
+    hexagon_V6_vunpackuh,                      // llvm.hexagon.V6.vunpackuh
+    hexagon_V6_vunpackuh_128B,                 // llvm.hexagon.V6.vunpackuh.128B
+    hexagon_V6_vxor,                           // llvm.hexagon.V6.vxor
+    hexagon_V6_vxor_128B,                      // llvm.hexagon.V6.vxor.128B
+    hexagon_V6_vzb,                            // llvm.hexagon.V6.vzb
+    hexagon_V6_vzb_128B,                       // llvm.hexagon.V6.vzb.128B
+    hexagon_V6_vzh,                            // llvm.hexagon.V6.vzh
+    hexagon_V6_vzh_128B,                       // llvm.hexagon.V6.vzh.128B
+    hexagon_Y2_dccleana,                       // llvm.hexagon.Y2.dccleana
+    hexagon_Y2_dccleaninva,                    // llvm.hexagon.Y2.dccleaninva
+    hexagon_Y2_dcinva,                         // llvm.hexagon.Y2.dcinva
+    hexagon_Y2_dczeroa,                        // llvm.hexagon.Y2.dczeroa
+    hexagon_Y4_l2fetch,                        // llvm.hexagon.Y4.l2fetch
+    hexagon_Y5_l2fetch,                        // llvm.hexagon.Y5.l2fetch
+    hexagon_circ_ldb,                          // llvm.hexagon.circ.ldb
+    hexagon_circ_ldd,                          // llvm.hexagon.circ.ldd
+    hexagon_circ_ldh,                          // llvm.hexagon.circ.ldh
+    hexagon_circ_ldub,                         // llvm.hexagon.circ.ldub
+    hexagon_circ_lduh,                         // llvm.hexagon.circ.lduh
+    hexagon_circ_ldw,                          // llvm.hexagon.circ.ldw
+    hexagon_circ_stb,                          // llvm.hexagon.circ.stb
+    hexagon_circ_std,                          // llvm.hexagon.circ.std
+    hexagon_circ_sth,                          // llvm.hexagon.circ.sth
+    hexagon_circ_sthhi,                        // llvm.hexagon.circ.sthhi
+    hexagon_circ_stw,                          // llvm.hexagon.circ.stw
+    hexagon_mm256i_vaddw,                      // llvm.hexagon.mm256i.vaddw
+    hexagon_prefetch,                          // llvm.hexagon.prefetch
+    mips_absq_s_ph,                            // llvm.mips.absq.s.ph
+    mips_absq_s_qb,                            // llvm.mips.absq.s.qb
+    mips_absq_s_w,                             // llvm.mips.absq.s.w
+    mips_add_a_b,                              // llvm.mips.add.a.b
+    mips_add_a_d,                              // llvm.mips.add.a.d
+    mips_add_a_h,                              // llvm.mips.add.a.h
+    mips_add_a_w,                              // llvm.mips.add.a.w
+    mips_addq_ph,                              // llvm.mips.addq.ph
+    mips_addq_s_ph,                            // llvm.mips.addq.s.ph
+    mips_addq_s_w,                             // llvm.mips.addq.s.w
+    mips_addqh_ph,                             // llvm.mips.addqh.ph
+    mips_addqh_r_ph,                           // llvm.mips.addqh.r.ph
+    mips_addqh_r_w,                            // llvm.mips.addqh.r.w
+    mips_addqh_w,                              // llvm.mips.addqh.w
+    mips_adds_a_b,                             // llvm.mips.adds.a.b
+    mips_adds_a_d,                             // llvm.mips.adds.a.d
+    mips_adds_a_h,                             // llvm.mips.adds.a.h
+    mips_adds_a_w,                             // llvm.mips.adds.a.w
+    mips_adds_s_b,                             // llvm.mips.adds.s.b
+    mips_adds_s_d,                             // llvm.mips.adds.s.d
+    mips_adds_s_h,                             // llvm.mips.adds.s.h
+    mips_adds_s_w,                             // llvm.mips.adds.s.w
+    mips_adds_u_b,                             // llvm.mips.adds.u.b
+    mips_adds_u_d,                             // llvm.mips.adds.u.d
+    mips_adds_u_h,                             // llvm.mips.adds.u.h
+    mips_adds_u_w,                             // llvm.mips.adds.u.w
+    mips_addsc,                                // llvm.mips.addsc
+    mips_addu_ph,                              // llvm.mips.addu.ph
+    mips_addu_qb,                              // llvm.mips.addu.qb
+    mips_addu_s_ph,                            // llvm.mips.addu.s.ph
+    mips_addu_s_qb,                            // llvm.mips.addu.s.qb
+    mips_adduh_qb,                             // llvm.mips.adduh.qb
+    mips_adduh_r_qb,                           // llvm.mips.adduh.r.qb
+    mips_addv_b,                               // llvm.mips.addv.b
+    mips_addv_d,                               // llvm.mips.addv.d
+    mips_addv_h,                               // llvm.mips.addv.h
+    mips_addv_w,                               // llvm.mips.addv.w
+    mips_addvi_b,                              // llvm.mips.addvi.b
+    mips_addvi_d,                              // llvm.mips.addvi.d
+    mips_addvi_h,                              // llvm.mips.addvi.h
+    mips_addvi_w,                              // llvm.mips.addvi.w
+    mips_addwc,                                // llvm.mips.addwc
+    mips_and_v,                                // llvm.mips.and.v
+    mips_andi_b,                               // llvm.mips.andi.b
+    mips_append,                               // llvm.mips.append
+    mips_asub_s_b,                             // llvm.mips.asub.s.b
+    mips_asub_s_d,                             // llvm.mips.asub.s.d
+    mips_asub_s_h,                             // llvm.mips.asub.s.h
+    mips_asub_s_w,                             // llvm.mips.asub.s.w
+    mips_asub_u_b,                             // llvm.mips.asub.u.b
+    mips_asub_u_d,                             // llvm.mips.asub.u.d
+    mips_asub_u_h,                             // llvm.mips.asub.u.h
+    mips_asub_u_w,                             // llvm.mips.asub.u.w
+    mips_ave_s_b,                              // llvm.mips.ave.s.b
+    mips_ave_s_d,                              // llvm.mips.ave.s.d
+    mips_ave_s_h,                              // llvm.mips.ave.s.h
+    mips_ave_s_w,                              // llvm.mips.ave.s.w
+    mips_ave_u_b,                              // llvm.mips.ave.u.b
+    mips_ave_u_d,                              // llvm.mips.ave.u.d
+    mips_ave_u_h,                              // llvm.mips.ave.u.h
+    mips_ave_u_w,                              // llvm.mips.ave.u.w
+    mips_aver_s_b,                             // llvm.mips.aver.s.b
+    mips_aver_s_d,                             // llvm.mips.aver.s.d
+    mips_aver_s_h,                             // llvm.mips.aver.s.h
+    mips_aver_s_w,                             // llvm.mips.aver.s.w
+    mips_aver_u_b,                             // llvm.mips.aver.u.b
+    mips_aver_u_d,                             // llvm.mips.aver.u.d
+    mips_aver_u_h,                             // llvm.mips.aver.u.h
+    mips_aver_u_w,                             // llvm.mips.aver.u.w
+    mips_balign,                               // llvm.mips.balign
+    mips_bclr_b,                               // llvm.mips.bclr.b
+    mips_bclr_d,                               // llvm.mips.bclr.d
+    mips_bclr_h,                               // llvm.mips.bclr.h
+    mips_bclr_w,                               // llvm.mips.bclr.w
+    mips_bclri_b,                              // llvm.mips.bclri.b
+    mips_bclri_d,                              // llvm.mips.bclri.d
+    mips_bclri_h,                              // llvm.mips.bclri.h
+    mips_bclri_w,                              // llvm.mips.bclri.w
+    mips_binsl_b,                              // llvm.mips.binsl.b
+    mips_binsl_d,                              // llvm.mips.binsl.d
+    mips_binsl_h,                              // llvm.mips.binsl.h
+    mips_binsl_w,                              // llvm.mips.binsl.w
+    mips_binsli_b,                             // llvm.mips.binsli.b
+    mips_binsli_d,                             // llvm.mips.binsli.d
+    mips_binsli_h,                             // llvm.mips.binsli.h
+    mips_binsli_w,                             // llvm.mips.binsli.w
+    mips_binsr_b,                              // llvm.mips.binsr.b
+    mips_binsr_d,                              // llvm.mips.binsr.d
+    mips_binsr_h,                              // llvm.mips.binsr.h
+    mips_binsr_w,                              // llvm.mips.binsr.w
+    mips_binsri_b,                             // llvm.mips.binsri.b
+    mips_binsri_d,                             // llvm.mips.binsri.d
+    mips_binsri_h,                             // llvm.mips.binsri.h
+    mips_binsri_w,                             // llvm.mips.binsri.w
+    mips_bitrev,                               // llvm.mips.bitrev
+    mips_bmnz_v,                               // llvm.mips.bmnz.v
+    mips_bmnzi_b,                              // llvm.mips.bmnzi.b
+    mips_bmz_v,                                // llvm.mips.bmz.v
+    mips_bmzi_b,                               // llvm.mips.bmzi.b
+    mips_bneg_b,                               // llvm.mips.bneg.b
+    mips_bneg_d,                               // llvm.mips.bneg.d
+    mips_bneg_h,                               // llvm.mips.bneg.h
+    mips_bneg_w,                               // llvm.mips.bneg.w
+    mips_bnegi_b,                              // llvm.mips.bnegi.b
+    mips_bnegi_d,                              // llvm.mips.bnegi.d
+    mips_bnegi_h,                              // llvm.mips.bnegi.h
+    mips_bnegi_w,                              // llvm.mips.bnegi.w
+    mips_bnz_b,                                // llvm.mips.bnz.b
+    mips_bnz_d,                                // llvm.mips.bnz.d
+    mips_bnz_h,                                // llvm.mips.bnz.h
+    mips_bnz_v,                                // llvm.mips.bnz.v
+    mips_bnz_w,                                // llvm.mips.bnz.w
+    mips_bposge32,                             // llvm.mips.bposge32
+    mips_bsel_v,                               // llvm.mips.bsel.v
+    mips_bseli_b,                              // llvm.mips.bseli.b
+    mips_bset_b,                               // llvm.mips.bset.b
+    mips_bset_d,                               // llvm.mips.bset.d
+    mips_bset_h,                               // llvm.mips.bset.h
+    mips_bset_w,                               // llvm.mips.bset.w
+    mips_bseti_b,                              // llvm.mips.bseti.b
+    mips_bseti_d,                              // llvm.mips.bseti.d
+    mips_bseti_h,                              // llvm.mips.bseti.h
+    mips_bseti_w,                              // llvm.mips.bseti.w
+    mips_bz_b,                                 // llvm.mips.bz.b
+    mips_bz_d,                                 // llvm.mips.bz.d
+    mips_bz_h,                                 // llvm.mips.bz.h
+    mips_bz_v,                                 // llvm.mips.bz.v
+    mips_bz_w,                                 // llvm.mips.bz.w
+    mips_ceq_b,                                // llvm.mips.ceq.b
+    mips_ceq_d,                                // llvm.mips.ceq.d
+    mips_ceq_h,                                // llvm.mips.ceq.h
+    mips_ceq_w,                                // llvm.mips.ceq.w
+    mips_ceqi_b,                               // llvm.mips.ceqi.b
+    mips_ceqi_d,                               // llvm.mips.ceqi.d
+    mips_ceqi_h,                               // llvm.mips.ceqi.h
+    mips_ceqi_w,                               // llvm.mips.ceqi.w
+    mips_cfcmsa,                               // llvm.mips.cfcmsa
+    mips_cle_s_b,                              // llvm.mips.cle.s.b
+    mips_cle_s_d,                              // llvm.mips.cle.s.d
+    mips_cle_s_h,                              // llvm.mips.cle.s.h
+    mips_cle_s_w,                              // llvm.mips.cle.s.w
+    mips_cle_u_b,                              // llvm.mips.cle.u.b
+    mips_cle_u_d,                              // llvm.mips.cle.u.d
+    mips_cle_u_h,                              // llvm.mips.cle.u.h
+    mips_cle_u_w,                              // llvm.mips.cle.u.w
+    mips_clei_s_b,                             // llvm.mips.clei.s.b
+    mips_clei_s_d,                             // llvm.mips.clei.s.d
+    mips_clei_s_h,                             // llvm.mips.clei.s.h
+    mips_clei_s_w,                             // llvm.mips.clei.s.w
+    mips_clei_u_b,                             // llvm.mips.clei.u.b
+    mips_clei_u_d,                             // llvm.mips.clei.u.d
+    mips_clei_u_h,                             // llvm.mips.clei.u.h
+    mips_clei_u_w,                             // llvm.mips.clei.u.w
+    mips_clt_s_b,                              // llvm.mips.clt.s.b
+    mips_clt_s_d,                              // llvm.mips.clt.s.d
+    mips_clt_s_h,                              // llvm.mips.clt.s.h
+    mips_clt_s_w,                              // llvm.mips.clt.s.w
+    mips_clt_u_b,                              // llvm.mips.clt.u.b
+    mips_clt_u_d,                              // llvm.mips.clt.u.d
+    mips_clt_u_h,                              // llvm.mips.clt.u.h
+    mips_clt_u_w,                              // llvm.mips.clt.u.w
+    mips_clti_s_b,                             // llvm.mips.clti.s.b
+    mips_clti_s_d,                             // llvm.mips.clti.s.d
+    mips_clti_s_h,                             // llvm.mips.clti.s.h
+    mips_clti_s_w,                             // llvm.mips.clti.s.w
+    mips_clti_u_b,                             // llvm.mips.clti.u.b
+    mips_clti_u_d,                             // llvm.mips.clti.u.d
+    mips_clti_u_h,                             // llvm.mips.clti.u.h
+    mips_clti_u_w,                             // llvm.mips.clti.u.w
+    mips_cmp_eq_ph,                            // llvm.mips.cmp.eq.ph
+    mips_cmp_le_ph,                            // llvm.mips.cmp.le.ph
+    mips_cmp_lt_ph,                            // llvm.mips.cmp.lt.ph
+    mips_cmpgdu_eq_qb,                         // llvm.mips.cmpgdu.eq.qb
+    mips_cmpgdu_le_qb,                         // llvm.mips.cmpgdu.le.qb
+    mips_cmpgdu_lt_qb,                         // llvm.mips.cmpgdu.lt.qb
+    mips_cmpgu_eq_qb,                          // llvm.mips.cmpgu.eq.qb
+    mips_cmpgu_le_qb,                          // llvm.mips.cmpgu.le.qb
+    mips_cmpgu_lt_qb,                          // llvm.mips.cmpgu.lt.qb
+    mips_cmpu_eq_qb,                           // llvm.mips.cmpu.eq.qb
+    mips_cmpu_le_qb,                           // llvm.mips.cmpu.le.qb
+    mips_cmpu_lt_qb,                           // llvm.mips.cmpu.lt.qb
+    mips_copy_s_b,                             // llvm.mips.copy.s.b
+    mips_copy_s_d,                             // llvm.mips.copy.s.d
+    mips_copy_s_h,                             // llvm.mips.copy.s.h
+    mips_copy_s_w,                             // llvm.mips.copy.s.w
+    mips_copy_u_b,                             // llvm.mips.copy.u.b
+    mips_copy_u_d,                             // llvm.mips.copy.u.d
+    mips_copy_u_h,                             // llvm.mips.copy.u.h
+    mips_copy_u_w,                             // llvm.mips.copy.u.w
+    mips_ctcmsa,                               // llvm.mips.ctcmsa
+    mips_div_s_b,                              // llvm.mips.div.s.b
+    mips_div_s_d,                              // llvm.mips.div.s.d
+    mips_div_s_h,                              // llvm.mips.div.s.h
+    mips_div_s_w,                              // llvm.mips.div.s.w
+    mips_div_u_b,                              // llvm.mips.div.u.b
+    mips_div_u_d,                              // llvm.mips.div.u.d
+    mips_div_u_h,                              // llvm.mips.div.u.h
+    mips_div_u_w,                              // llvm.mips.div.u.w
+    mips_dlsa,                                 // llvm.mips.dlsa
+    mips_dotp_s_d,                             // llvm.mips.dotp.s.d
+    mips_dotp_s_h,                             // llvm.mips.dotp.s.h
+    mips_dotp_s_w,                             // llvm.mips.dotp.s.w
+    mips_dotp_u_d,                             // llvm.mips.dotp.u.d
+    mips_dotp_u_h,                             // llvm.mips.dotp.u.h
+    mips_dotp_u_w,                             // llvm.mips.dotp.u.w
+    mips_dpa_w_ph,                             // llvm.mips.dpa.w.ph
+    mips_dpadd_s_d,                            // llvm.mips.dpadd.s.d
+    mips_dpadd_s_h,                            // llvm.mips.dpadd.s.h
+    mips_dpadd_s_w,                            // llvm.mips.dpadd.s.w
+    mips_dpadd_u_d,                            // llvm.mips.dpadd.u.d
+    mips_dpadd_u_h,                            // llvm.mips.dpadd.u.h
+    mips_dpadd_u_w,                            // llvm.mips.dpadd.u.w
+    mips_dpaq_s_w_ph,                          // llvm.mips.dpaq.s.w.ph
+    mips_dpaq_sa_l_w,                          // llvm.mips.dpaq.sa.l.w
+    mips_dpaqx_s_w_ph,                         // llvm.mips.dpaqx.s.w.ph
+    mips_dpaqx_sa_w_ph,                        // llvm.mips.dpaqx.sa.w.ph
+    mips_dpau_h_qbl,                           // llvm.mips.dpau.h.qbl
+    mips_dpau_h_qbr,                           // llvm.mips.dpau.h.qbr
+    mips_dpax_w_ph,                            // llvm.mips.dpax.w.ph
+    mips_dps_w_ph,                             // llvm.mips.dps.w.ph
+    mips_dpsq_s_w_ph,                          // llvm.mips.dpsq.s.w.ph
+    mips_dpsq_sa_l_w,                          // llvm.mips.dpsq.sa.l.w
+    mips_dpsqx_s_w_ph,                         // llvm.mips.dpsqx.s.w.ph
+    mips_dpsqx_sa_w_ph,                        // llvm.mips.dpsqx.sa.w.ph
+    mips_dpsu_h_qbl,                           // llvm.mips.dpsu.h.qbl
+    mips_dpsu_h_qbr,                           // llvm.mips.dpsu.h.qbr
+    mips_dpsub_s_d,                            // llvm.mips.dpsub.s.d
+    mips_dpsub_s_h,                            // llvm.mips.dpsub.s.h
+    mips_dpsub_s_w,                            // llvm.mips.dpsub.s.w
+    mips_dpsub_u_d,                            // llvm.mips.dpsub.u.d
+    mips_dpsub_u_h,                            // llvm.mips.dpsub.u.h
+    mips_dpsub_u_w,                            // llvm.mips.dpsub.u.w
+    mips_dpsx_w_ph,                            // llvm.mips.dpsx.w.ph
+    mips_extp,                                 // llvm.mips.extp
+    mips_extpdp,                               // llvm.mips.extpdp
+    mips_extr_r_w,                             // llvm.mips.extr.r.w
+    mips_extr_rs_w,                            // llvm.mips.extr.rs.w
+    mips_extr_s_h,                             // llvm.mips.extr.s.h
+    mips_extr_w,                               // llvm.mips.extr.w
+    mips_fadd_d,                               // llvm.mips.fadd.d
+    mips_fadd_w,                               // llvm.mips.fadd.w
+    mips_fcaf_d,                               // llvm.mips.fcaf.d
+    mips_fcaf_w,                               // llvm.mips.fcaf.w
+    mips_fceq_d,                               // llvm.mips.fceq.d
+    mips_fceq_w,                               // llvm.mips.fceq.w
+    mips_fclass_d,                             // llvm.mips.fclass.d
+    mips_fclass_w,                             // llvm.mips.fclass.w
+    mips_fcle_d,                               // llvm.mips.fcle.d
+    mips_fcle_w,                               // llvm.mips.fcle.w
+    mips_fclt_d,                               // llvm.mips.fclt.d
+    mips_fclt_w,                               // llvm.mips.fclt.w
+    mips_fcne_d,                               // llvm.mips.fcne.d
+    mips_fcne_w,                               // llvm.mips.fcne.w
+    mips_fcor_d,                               // llvm.mips.fcor.d
+    mips_fcor_w,                               // llvm.mips.fcor.w
+    mips_fcueq_d,                              // llvm.mips.fcueq.d
+    mips_fcueq_w,                              // llvm.mips.fcueq.w
+    mips_fcule_d,                              // llvm.mips.fcule.d
+    mips_fcule_w,                              // llvm.mips.fcule.w
+    mips_fcult_d,                              // llvm.mips.fcult.d
+    mips_fcult_w,                              // llvm.mips.fcult.w
+    mips_fcun_d,                               // llvm.mips.fcun.d
+    mips_fcun_w,                               // llvm.mips.fcun.w
+    mips_fcune_d,                              // llvm.mips.fcune.d
+    mips_fcune_w,                              // llvm.mips.fcune.w
+    mips_fdiv_d,                               // llvm.mips.fdiv.d
+    mips_fdiv_w,                               // llvm.mips.fdiv.w
+    mips_fexdo_h,                              // llvm.mips.fexdo.h
+    mips_fexdo_w,                              // llvm.mips.fexdo.w
+    mips_fexp2_d,                              // llvm.mips.fexp2.d
+    mips_fexp2_w,                              // llvm.mips.fexp2.w
+    mips_fexupl_d,                             // llvm.mips.fexupl.d
+    mips_fexupl_w,                             // llvm.mips.fexupl.w
+    mips_fexupr_d,                             // llvm.mips.fexupr.d
+    mips_fexupr_w,                             // llvm.mips.fexupr.w
+    mips_ffint_s_d,                            // llvm.mips.ffint.s.d
+    mips_ffint_s_w,                            // llvm.mips.ffint.s.w
+    mips_ffint_u_d,                            // llvm.mips.ffint.u.d
+    mips_ffint_u_w,                            // llvm.mips.ffint.u.w
+    mips_ffql_d,                               // llvm.mips.ffql.d
+    mips_ffql_w,                               // llvm.mips.ffql.w
+    mips_ffqr_d,                               // llvm.mips.ffqr.d
+    mips_ffqr_w,                               // llvm.mips.ffqr.w
+    mips_fill_b,                               // llvm.mips.fill.b
+    mips_fill_d,                               // llvm.mips.fill.d
+    mips_fill_h,                               // llvm.mips.fill.h
+    mips_fill_w,                               // llvm.mips.fill.w
+    mips_flog2_d,                              // llvm.mips.flog2.d
+    mips_flog2_w,                              // llvm.mips.flog2.w
+    mips_fmadd_d,                              // llvm.mips.fmadd.d
+    mips_fmadd_w,                              // llvm.mips.fmadd.w
+    mips_fmax_a_d,                             // llvm.mips.fmax.a.d
+    mips_fmax_a_w,                             // llvm.mips.fmax.a.w
+    mips_fmax_d,                               // llvm.mips.fmax.d
+    mips_fmax_w,                               // llvm.mips.fmax.w
+    mips_fmin_a_d,                             // llvm.mips.fmin.a.d
+    mips_fmin_a_w,                             // llvm.mips.fmin.a.w
+    mips_fmin_d,                               // llvm.mips.fmin.d
+    mips_fmin_w,                               // llvm.mips.fmin.w
+    mips_fmsub_d,                              // llvm.mips.fmsub.d
+    mips_fmsub_w,                              // llvm.mips.fmsub.w
+    mips_fmul_d,                               // llvm.mips.fmul.d
+    mips_fmul_w,                               // llvm.mips.fmul.w
+    mips_frcp_d,                               // llvm.mips.frcp.d
+    mips_frcp_w,                               // llvm.mips.frcp.w
+    mips_frint_d,                              // llvm.mips.frint.d
+    mips_frint_w,                              // llvm.mips.frint.w
+    mips_frsqrt_d,                             // llvm.mips.frsqrt.d
+    mips_frsqrt_w,                             // llvm.mips.frsqrt.w
+    mips_fsaf_d,                               // llvm.mips.fsaf.d
+    mips_fsaf_w,                               // llvm.mips.fsaf.w
+    mips_fseq_d,                               // llvm.mips.fseq.d
+    mips_fseq_w,                               // llvm.mips.fseq.w
+    mips_fsle_d,                               // llvm.mips.fsle.d
+    mips_fsle_w,                               // llvm.mips.fsle.w
+    mips_fslt_d,                               // llvm.mips.fslt.d
+    mips_fslt_w,                               // llvm.mips.fslt.w
+    mips_fsne_d,                               // llvm.mips.fsne.d
+    mips_fsne_w,                               // llvm.mips.fsne.w
+    mips_fsor_d,                               // llvm.mips.fsor.d
+    mips_fsor_w,                               // llvm.mips.fsor.w
+    mips_fsqrt_d,                              // llvm.mips.fsqrt.d
+    mips_fsqrt_w,                              // llvm.mips.fsqrt.w
+    mips_fsub_d,                               // llvm.mips.fsub.d
+    mips_fsub_w,                               // llvm.mips.fsub.w
+    mips_fsueq_d,                              // llvm.mips.fsueq.d
+    mips_fsueq_w,                              // llvm.mips.fsueq.w
+    mips_fsule_d,                              // llvm.mips.fsule.d
+    mips_fsule_w,                              // llvm.mips.fsule.w
+    mips_fsult_d,                              // llvm.mips.fsult.d
+    mips_fsult_w,                              // llvm.mips.fsult.w
+    mips_fsun_d,                               // llvm.mips.fsun.d
+    mips_fsun_w,                               // llvm.mips.fsun.w
+    mips_fsune_d,                              // llvm.mips.fsune.d
+    mips_fsune_w,                              // llvm.mips.fsune.w
+    mips_ftint_s_d,                            // llvm.mips.ftint.s.d
+    mips_ftint_s_w,                            // llvm.mips.ftint.s.w
+    mips_ftint_u_d,                            // llvm.mips.ftint.u.d
+    mips_ftint_u_w,                            // llvm.mips.ftint.u.w
+    mips_ftq_h,                                // llvm.mips.ftq.h
+    mips_ftq_w,                                // llvm.mips.ftq.w
+    mips_ftrunc_s_d,                           // llvm.mips.ftrunc.s.d
+    mips_ftrunc_s_w,                           // llvm.mips.ftrunc.s.w
+    mips_ftrunc_u_d,                           // llvm.mips.ftrunc.u.d
+    mips_ftrunc_u_w,                           // llvm.mips.ftrunc.u.w
+    mips_hadd_s_d,                             // llvm.mips.hadd.s.d
+    mips_hadd_s_h,                             // llvm.mips.hadd.s.h
+    mips_hadd_s_w,                             // llvm.mips.hadd.s.w
+    mips_hadd_u_d,                             // llvm.mips.hadd.u.d
+    mips_hadd_u_h,                             // llvm.mips.hadd.u.h
+    mips_hadd_u_w,                             // llvm.mips.hadd.u.w
+    mips_hsub_s_d,                             // llvm.mips.hsub.s.d
+    mips_hsub_s_h,                             // llvm.mips.hsub.s.h
+    mips_hsub_s_w,                             // llvm.mips.hsub.s.w
+    mips_hsub_u_d,                             // llvm.mips.hsub.u.d
+    mips_hsub_u_h,                             // llvm.mips.hsub.u.h
+    mips_hsub_u_w,                             // llvm.mips.hsub.u.w
+    mips_ilvev_b,                              // llvm.mips.ilvev.b
+    mips_ilvev_d,                              // llvm.mips.ilvev.d
+    mips_ilvev_h,                              // llvm.mips.ilvev.h
+    mips_ilvev_w,                              // llvm.mips.ilvev.w
+    mips_ilvl_b,                               // llvm.mips.ilvl.b
+    mips_ilvl_d,                               // llvm.mips.ilvl.d
+    mips_ilvl_h,                               // llvm.mips.ilvl.h
+    mips_ilvl_w,                               // llvm.mips.ilvl.w
+    mips_ilvod_b,                              // llvm.mips.ilvod.b
+    mips_ilvod_d,                              // llvm.mips.ilvod.d
+    mips_ilvod_h,                              // llvm.mips.ilvod.h
+    mips_ilvod_w,                              // llvm.mips.ilvod.w
+    mips_ilvr_b,                               // llvm.mips.ilvr.b
+    mips_ilvr_d,                               // llvm.mips.ilvr.d
+    mips_ilvr_h,                               // llvm.mips.ilvr.h
+    mips_ilvr_w,                               // llvm.mips.ilvr.w
+    mips_insert_b,                             // llvm.mips.insert.b
+    mips_insert_d,                             // llvm.mips.insert.d
+    mips_insert_h,                             // llvm.mips.insert.h
+    mips_insert_w,                             // llvm.mips.insert.w
+    mips_insv,                                 // llvm.mips.insv
+    mips_insve_b,                              // llvm.mips.insve.b
+    mips_insve_d,                              // llvm.mips.insve.d
+    mips_insve_h,                              // llvm.mips.insve.h
+    mips_insve_w,                              // llvm.mips.insve.w
+    mips_lbux,                                 // llvm.mips.lbux
+    mips_ld_b,                                 // llvm.mips.ld.b
+    mips_ld_d,                                 // llvm.mips.ld.d
+    mips_ld_h,                                 // llvm.mips.ld.h
+    mips_ld_w,                                 // llvm.mips.ld.w
+    mips_ldi_b,                                // llvm.mips.ldi.b
+    mips_ldi_d,                                // llvm.mips.ldi.d
+    mips_ldi_h,                                // llvm.mips.ldi.h
+    mips_ldi_w,                                // llvm.mips.ldi.w
+    mips_lhx,                                  // llvm.mips.lhx
+    mips_lsa,                                  // llvm.mips.lsa
+    mips_lwx,                                  // llvm.mips.lwx
+    mips_madd,                                 // llvm.mips.madd
+    mips_madd_q_h,                             // llvm.mips.madd.q.h
+    mips_madd_q_w,                             // llvm.mips.madd.q.w
+    mips_maddr_q_h,                            // llvm.mips.maddr.q.h
+    mips_maddr_q_w,                            // llvm.mips.maddr.q.w
+    mips_maddu,                                // llvm.mips.maddu
+    mips_maddv_b,                              // llvm.mips.maddv.b
+    mips_maddv_d,                              // llvm.mips.maddv.d
+    mips_maddv_h,                              // llvm.mips.maddv.h
+    mips_maddv_w,                              // llvm.mips.maddv.w
+    mips_maq_s_w_phl,                          // llvm.mips.maq.s.w.phl
+    mips_maq_s_w_phr,                          // llvm.mips.maq.s.w.phr
+    mips_maq_sa_w_phl,                         // llvm.mips.maq.sa.w.phl
+    mips_maq_sa_w_phr,                         // llvm.mips.maq.sa.w.phr
+    mips_max_a_b,                              // llvm.mips.max.a.b
+    mips_max_a_d,                              // llvm.mips.max.a.d
+    mips_max_a_h,                              // llvm.mips.max.a.h
+    mips_max_a_w,                              // llvm.mips.max.a.w
+    mips_max_s_b,                              // llvm.mips.max.s.b
+    mips_max_s_d,                              // llvm.mips.max.s.d
+    mips_max_s_h,                              // llvm.mips.max.s.h
+    mips_max_s_w,                              // llvm.mips.max.s.w
+    mips_max_u_b,                              // llvm.mips.max.u.b
+    mips_max_u_d,                              // llvm.mips.max.u.d
+    mips_max_u_h,                              // llvm.mips.max.u.h
+    mips_max_u_w,                              // llvm.mips.max.u.w
+    mips_maxi_s_b,                             // llvm.mips.maxi.s.b
+    mips_maxi_s_d,                             // llvm.mips.maxi.s.d
+    mips_maxi_s_h,                             // llvm.mips.maxi.s.h
+    mips_maxi_s_w,                             // llvm.mips.maxi.s.w
+    mips_maxi_u_b,                             // llvm.mips.maxi.u.b
+    mips_maxi_u_d,                             // llvm.mips.maxi.u.d
+    mips_maxi_u_h,                             // llvm.mips.maxi.u.h
+    mips_maxi_u_w,                             // llvm.mips.maxi.u.w
+    mips_min_a_b,                              // llvm.mips.min.a.b
+    mips_min_a_d,                              // llvm.mips.min.a.d
+    mips_min_a_h,                              // llvm.mips.min.a.h
+    mips_min_a_w,                              // llvm.mips.min.a.w
+    mips_min_s_b,                              // llvm.mips.min.s.b
+    mips_min_s_d,                              // llvm.mips.min.s.d
+    mips_min_s_h,                              // llvm.mips.min.s.h
+    mips_min_s_w,                              // llvm.mips.min.s.w
+    mips_min_u_b,                              // llvm.mips.min.u.b
+    mips_min_u_d,                              // llvm.mips.min.u.d
+    mips_min_u_h,                              // llvm.mips.min.u.h
+    mips_min_u_w,                              // llvm.mips.min.u.w
+    mips_mini_s_b,                             // llvm.mips.mini.s.b
+    mips_mini_s_d,                             // llvm.mips.mini.s.d
+    mips_mini_s_h,                             // llvm.mips.mini.s.h
+    mips_mini_s_w,                             // llvm.mips.mini.s.w
+    mips_mini_u_b,                             // llvm.mips.mini.u.b
+    mips_mini_u_d,                             // llvm.mips.mini.u.d
+    mips_mini_u_h,                             // llvm.mips.mini.u.h
+    mips_mini_u_w,                             // llvm.mips.mini.u.w
+    mips_mod_s_b,                              // llvm.mips.mod.s.b
+    mips_mod_s_d,                              // llvm.mips.mod.s.d
+    mips_mod_s_h,                              // llvm.mips.mod.s.h
+    mips_mod_s_w,                              // llvm.mips.mod.s.w
+    mips_mod_u_b,                              // llvm.mips.mod.u.b
+    mips_mod_u_d,                              // llvm.mips.mod.u.d
+    mips_mod_u_h,                              // llvm.mips.mod.u.h
+    mips_mod_u_w,                              // llvm.mips.mod.u.w
+    mips_modsub,                               // llvm.mips.modsub
+    mips_move_v,                               // llvm.mips.move.v
+    mips_msub,                                 // llvm.mips.msub
+    mips_msub_q_h,                             // llvm.mips.msub.q.h
+    mips_msub_q_w,                             // llvm.mips.msub.q.w
+    mips_msubr_q_h,                            // llvm.mips.msubr.q.h
+    mips_msubr_q_w,                            // llvm.mips.msubr.q.w
+    mips_msubu,                                // llvm.mips.msubu
+    mips_msubv_b,                              // llvm.mips.msubv.b
+    mips_msubv_d,                              // llvm.mips.msubv.d
+    mips_msubv_h,                              // llvm.mips.msubv.h
+    mips_msubv_w,                              // llvm.mips.msubv.w
+    mips_mthlip,                               // llvm.mips.mthlip
+    mips_mul_ph,                               // llvm.mips.mul.ph
+    mips_mul_q_h,                              // llvm.mips.mul.q.h
+    mips_mul_q_w,                              // llvm.mips.mul.q.w
+    mips_mul_s_ph,                             // llvm.mips.mul.s.ph
+    mips_muleq_s_w_phl,                        // llvm.mips.muleq.s.w.phl
+    mips_muleq_s_w_phr,                        // llvm.mips.muleq.s.w.phr
+    mips_muleu_s_ph_qbl,                       // llvm.mips.muleu.s.ph.qbl
+    mips_muleu_s_ph_qbr,                       // llvm.mips.muleu.s.ph.qbr
+    mips_mulq_rs_ph,                           // llvm.mips.mulq.rs.ph
+    mips_mulq_rs_w,                            // llvm.mips.mulq.rs.w
+    mips_mulq_s_ph,                            // llvm.mips.mulq.s.ph
+    mips_mulq_s_w,                             // llvm.mips.mulq.s.w
+    mips_mulr_q_h,                             // llvm.mips.mulr.q.h
+    mips_mulr_q_w,                             // llvm.mips.mulr.q.w
+    mips_mulsa_w_ph,                           // llvm.mips.mulsa.w.ph
+    mips_mulsaq_s_w_ph,                        // llvm.mips.mulsaq.s.w.ph
+    mips_mult,                                 // llvm.mips.mult
+    mips_multu,                                // llvm.mips.multu
+    mips_mulv_b,                               // llvm.mips.mulv.b
+    mips_mulv_d,                               // llvm.mips.mulv.d
+    mips_mulv_h,                               // llvm.mips.mulv.h
+    mips_mulv_w,                               // llvm.mips.mulv.w
+    mips_nloc_b,                               // llvm.mips.nloc.b
+    mips_nloc_d,                               // llvm.mips.nloc.d
+    mips_nloc_h,                               // llvm.mips.nloc.h
+    mips_nloc_w,                               // llvm.mips.nloc.w
+    mips_nlzc_b,                               // llvm.mips.nlzc.b
+    mips_nlzc_d,                               // llvm.mips.nlzc.d
+    mips_nlzc_h,                               // llvm.mips.nlzc.h
+    mips_nlzc_w,                               // llvm.mips.nlzc.w
+    mips_nor_v,                                // llvm.mips.nor.v
+    mips_nori_b,                               // llvm.mips.nori.b
+    mips_or_v,                                 // llvm.mips.or.v
+    mips_ori_b,                                // llvm.mips.ori.b
+    mips_packrl_ph,                            // llvm.mips.packrl.ph
+    mips_pckev_b,                              // llvm.mips.pckev.b
+    mips_pckev_d,                              // llvm.mips.pckev.d
+    mips_pckev_h,                              // llvm.mips.pckev.h
+    mips_pckev_w,                              // llvm.mips.pckev.w
+    mips_pckod_b,                              // llvm.mips.pckod.b
+    mips_pckod_d,                              // llvm.mips.pckod.d
+    mips_pckod_h,                              // llvm.mips.pckod.h
+    mips_pckod_w,                              // llvm.mips.pckod.w
+    mips_pcnt_b,                               // llvm.mips.pcnt.b
+    mips_pcnt_d,                               // llvm.mips.pcnt.d
+    mips_pcnt_h,                               // llvm.mips.pcnt.h
+    mips_pcnt_w,                               // llvm.mips.pcnt.w
+    mips_pick_ph,                              // llvm.mips.pick.ph
+    mips_pick_qb,                              // llvm.mips.pick.qb
+    mips_preceq_w_phl,                         // llvm.mips.preceq.w.phl
+    mips_preceq_w_phr,                         // llvm.mips.preceq.w.phr
+    mips_precequ_ph_qbl,                       // llvm.mips.precequ.ph.qbl
+    mips_precequ_ph_qbla,                      // llvm.mips.precequ.ph.qbla
+    mips_precequ_ph_qbr,                       // llvm.mips.precequ.ph.qbr
+    mips_precequ_ph_qbra,                      // llvm.mips.precequ.ph.qbra
+    mips_preceu_ph_qbl,                        // llvm.mips.preceu.ph.qbl
+    mips_preceu_ph_qbla,                       // llvm.mips.preceu.ph.qbla
+    mips_preceu_ph_qbr,                        // llvm.mips.preceu.ph.qbr
+    mips_preceu_ph_qbra,                       // llvm.mips.preceu.ph.qbra
+    mips_precr_qb_ph,                          // llvm.mips.precr.qb.ph
+    mips_precr_sra_ph_w,                       // llvm.mips.precr.sra.ph.w
+    mips_precr_sra_r_ph_w,                     // llvm.mips.precr.sra.r.ph.w
+    mips_precrq_ph_w,                          // llvm.mips.precrq.ph.w
+    mips_precrq_qb_ph,                         // llvm.mips.precrq.qb.ph
+    mips_precrq_rs_ph_w,                       // llvm.mips.precrq.rs.ph.w
+    mips_precrqu_s_qb_ph,                      // llvm.mips.precrqu.s.qb.ph
+    mips_prepend,                              // llvm.mips.prepend
+    mips_raddu_w_qb,                           // llvm.mips.raddu.w.qb
+    mips_rddsp,                                // llvm.mips.rddsp
+    mips_repl_ph,                              // llvm.mips.repl.ph
+    mips_repl_qb,                              // llvm.mips.repl.qb
+    mips_sat_s_b,                              // llvm.mips.sat.s.b
+    mips_sat_s_d,                              // llvm.mips.sat.s.d
+    mips_sat_s_h,                              // llvm.mips.sat.s.h
+    mips_sat_s_w,                              // llvm.mips.sat.s.w
+    mips_sat_u_b,                              // llvm.mips.sat.u.b
+    mips_sat_u_d,                              // llvm.mips.sat.u.d
+    mips_sat_u_h,                              // llvm.mips.sat.u.h
+    mips_sat_u_w,                              // llvm.mips.sat.u.w
+    mips_shf_b,                                // llvm.mips.shf.b
+    mips_shf_h,                                // llvm.mips.shf.h
+    mips_shf_w,                                // llvm.mips.shf.w
+    mips_shilo,                                // llvm.mips.shilo
+    mips_shll_ph,                              // llvm.mips.shll.ph
+    mips_shll_qb,                              // llvm.mips.shll.qb
+    mips_shll_s_ph,                            // llvm.mips.shll.s.ph
+    mips_shll_s_w,                             // llvm.mips.shll.s.w
+    mips_shra_ph,                              // llvm.mips.shra.ph
+    mips_shra_qb,                              // llvm.mips.shra.qb
+    mips_shra_r_ph,                            // llvm.mips.shra.r.ph
+    mips_shra_r_qb,                            // llvm.mips.shra.r.qb
+    mips_shra_r_w,                             // llvm.mips.shra.r.w
+    mips_shrl_ph,                              // llvm.mips.shrl.ph
+    mips_shrl_qb,                              // llvm.mips.shrl.qb
+    mips_sld_b,                                // llvm.mips.sld.b
+    mips_sld_d,                                // llvm.mips.sld.d
+    mips_sld_h,                                // llvm.mips.sld.h
+    mips_sld_w,                                // llvm.mips.sld.w
+    mips_sldi_b,                               // llvm.mips.sldi.b
+    mips_sldi_d,                               // llvm.mips.sldi.d
+    mips_sldi_h,                               // llvm.mips.sldi.h
+    mips_sldi_w,                               // llvm.mips.sldi.w
+    mips_sll_b,                                // llvm.mips.sll.b
+    mips_sll_d,                                // llvm.mips.sll.d
+    mips_sll_h,                                // llvm.mips.sll.h
+    mips_sll_w,                                // llvm.mips.sll.w
+    mips_slli_b,                               // llvm.mips.slli.b
+    mips_slli_d,                               // llvm.mips.slli.d
+    mips_slli_h,                               // llvm.mips.slli.h
+    mips_slli_w,                               // llvm.mips.slli.w
+    mips_splat_b,                              // llvm.mips.splat.b
+    mips_splat_d,                              // llvm.mips.splat.d
+    mips_splat_h,                              // llvm.mips.splat.h
+    mips_splat_w,                              // llvm.mips.splat.w
+    mips_splati_b,                             // llvm.mips.splati.b
+    mips_splati_d,                             // llvm.mips.splati.d
+    mips_splati_h,                             // llvm.mips.splati.h
+    mips_splati_w,                             // llvm.mips.splati.w
+    mips_sra_b,                                // llvm.mips.sra.b
+    mips_sra_d,                                // llvm.mips.sra.d
+    mips_sra_h,                                // llvm.mips.sra.h
+    mips_sra_w,                                // llvm.mips.sra.w
+    mips_srai_b,                               // llvm.mips.srai.b
+    mips_srai_d,                               // llvm.mips.srai.d
+    mips_srai_h,                               // llvm.mips.srai.h
+    mips_srai_w,                               // llvm.mips.srai.w
+    mips_srar_b,                               // llvm.mips.srar.b
+    mips_srar_d,                               // llvm.mips.srar.d
+    mips_srar_h,                               // llvm.mips.srar.h
+    mips_srar_w,                               // llvm.mips.srar.w
+    mips_srari_b,                              // llvm.mips.srari.b
+    mips_srari_d,                              // llvm.mips.srari.d
+    mips_srari_h,                              // llvm.mips.srari.h
+    mips_srari_w,                              // llvm.mips.srari.w
+    mips_srl_b,                                // llvm.mips.srl.b
+    mips_srl_d,                                // llvm.mips.srl.d
+    mips_srl_h,                                // llvm.mips.srl.h
+    mips_srl_w,                                // llvm.mips.srl.w
+    mips_srli_b,                               // llvm.mips.srli.b
+    mips_srli_d,                               // llvm.mips.srli.d
+    mips_srli_h,                               // llvm.mips.srli.h
+    mips_srli_w,                               // llvm.mips.srli.w
+    mips_srlr_b,                               // llvm.mips.srlr.b
+    mips_srlr_d,                               // llvm.mips.srlr.d
+    mips_srlr_h,                               // llvm.mips.srlr.h
+    mips_srlr_w,                               // llvm.mips.srlr.w
+    mips_srlri_b,                              // llvm.mips.srlri.b
+    mips_srlri_d,                              // llvm.mips.srlri.d
+    mips_srlri_h,                              // llvm.mips.srlri.h
+    mips_srlri_w,                              // llvm.mips.srlri.w
+    mips_st_b,                                 // llvm.mips.st.b
+    mips_st_d,                                 // llvm.mips.st.d
+    mips_st_h,                                 // llvm.mips.st.h
+    mips_st_w,                                 // llvm.mips.st.w
+    mips_subq_ph,                              // llvm.mips.subq.ph
+    mips_subq_s_ph,                            // llvm.mips.subq.s.ph
+    mips_subq_s_w,                             // llvm.mips.subq.s.w
+    mips_subqh_ph,                             // llvm.mips.subqh.ph
+    mips_subqh_r_ph,                           // llvm.mips.subqh.r.ph
+    mips_subqh_r_w,                            // llvm.mips.subqh.r.w
+    mips_subqh_w,                              // llvm.mips.subqh.w
+    mips_subs_s_b,                             // llvm.mips.subs.s.b
+    mips_subs_s_d,                             // llvm.mips.subs.s.d
+    mips_subs_s_h,                             // llvm.mips.subs.s.h
+    mips_subs_s_w,                             // llvm.mips.subs.s.w
+    mips_subs_u_b,                             // llvm.mips.subs.u.b
+    mips_subs_u_d,                             // llvm.mips.subs.u.d
+    mips_subs_u_h,                             // llvm.mips.subs.u.h
+    mips_subs_u_w,                             // llvm.mips.subs.u.w
+    mips_subsus_u_b,                           // llvm.mips.subsus.u.b
+    mips_subsus_u_d,                           // llvm.mips.subsus.u.d
+    mips_subsus_u_h,                           // llvm.mips.subsus.u.h
+    mips_subsus_u_w,                           // llvm.mips.subsus.u.w
+    mips_subsuu_s_b,                           // llvm.mips.subsuu.s.b
+    mips_subsuu_s_d,                           // llvm.mips.subsuu.s.d
+    mips_subsuu_s_h,                           // llvm.mips.subsuu.s.h
+    mips_subsuu_s_w,                           // llvm.mips.subsuu.s.w
+    mips_subu_ph,                              // llvm.mips.subu.ph
+    mips_subu_qb,                              // llvm.mips.subu.qb
+    mips_subu_s_ph,                            // llvm.mips.subu.s.ph
+    mips_subu_s_qb,                            // llvm.mips.subu.s.qb
+    mips_subuh_qb,                             // llvm.mips.subuh.qb
+    mips_subuh_r_qb,                           // llvm.mips.subuh.r.qb
+    mips_subv_b,                               // llvm.mips.subv.b
+    mips_subv_d,                               // llvm.mips.subv.d
+    mips_subv_h,                               // llvm.mips.subv.h
+    mips_subv_w,                               // llvm.mips.subv.w
+    mips_subvi_b,                              // llvm.mips.subvi.b
+    mips_subvi_d,                              // llvm.mips.subvi.d
+    mips_subvi_h,                              // llvm.mips.subvi.h
+    mips_subvi_w,                              // llvm.mips.subvi.w
+    mips_vshf_b,                               // llvm.mips.vshf.b
+    mips_vshf_d,                               // llvm.mips.vshf.d
+    mips_vshf_h,                               // llvm.mips.vshf.h
+    mips_vshf_w,                               // llvm.mips.vshf.w
+    mips_wrdsp,                                // llvm.mips.wrdsp
+    mips_xor_v,                                // llvm.mips.xor.v
+    mips_xori_b,                               // llvm.mips.xori.b
+    nvvm_add_rm_d,                             // llvm.nvvm.add.rm.d
+    nvvm_add_rm_f,                             // llvm.nvvm.add.rm.f
+    nvvm_add_rm_ftz_f,                         // llvm.nvvm.add.rm.ftz.f
+    nvvm_add_rn_d,                             // llvm.nvvm.add.rn.d
+    nvvm_add_rn_f,                             // llvm.nvvm.add.rn.f
+    nvvm_add_rn_ftz_f,                         // llvm.nvvm.add.rn.ftz.f
+    nvvm_add_rp_d,                             // llvm.nvvm.add.rp.d
+    nvvm_add_rp_f,                             // llvm.nvvm.add.rp.f
+    nvvm_add_rp_ftz_f,                         // llvm.nvvm.add.rp.ftz.f
+    nvvm_add_rz_d,                             // llvm.nvvm.add.rz.d
+    nvvm_add_rz_f,                             // llvm.nvvm.add.rz.f
+    nvvm_add_rz_ftz_f,                         // llvm.nvvm.add.rz.ftz.f
+    nvvm_atomic_add_gen_f_cta,                 // llvm.nvvm.atomic.add.gen.f.cta
+    nvvm_atomic_add_gen_f_sys,                 // llvm.nvvm.atomic.add.gen.f.sys
+    nvvm_atomic_add_gen_i_cta,                 // llvm.nvvm.atomic.add.gen.i.cta
+    nvvm_atomic_add_gen_i_sys,                 // llvm.nvvm.atomic.add.gen.i.sys
+    nvvm_atomic_and_gen_i_cta,                 // llvm.nvvm.atomic.and.gen.i.cta
+    nvvm_atomic_and_gen_i_sys,                 // llvm.nvvm.atomic.and.gen.i.sys
+    nvvm_atomic_cas_gen_i_cta,                 // llvm.nvvm.atomic.cas.gen.i.cta
+    nvvm_atomic_cas_gen_i_sys,                 // llvm.nvvm.atomic.cas.gen.i.sys
+    nvvm_atomic_dec_gen_i_cta,                 // llvm.nvvm.atomic.dec.gen.i.cta
+    nvvm_atomic_dec_gen_i_sys,                 // llvm.nvvm.atomic.dec.gen.i.sys
+    nvvm_atomic_exch_gen_i_cta,                // llvm.nvvm.atomic.exch.gen.i.cta
+    nvvm_atomic_exch_gen_i_sys,                // llvm.nvvm.atomic.exch.gen.i.sys
+    nvvm_atomic_inc_gen_i_cta,                 // llvm.nvvm.atomic.inc.gen.i.cta
+    nvvm_atomic_inc_gen_i_sys,                 // llvm.nvvm.atomic.inc.gen.i.sys
+    nvvm_atomic_load_add_f32,                  // llvm.nvvm.atomic.load.add.f32
+    nvvm_atomic_load_add_f64,                  // llvm.nvvm.atomic.load.add.f64
+    nvvm_atomic_load_dec_32,                   // llvm.nvvm.atomic.load.dec.32
+    nvvm_atomic_load_inc_32,                   // llvm.nvvm.atomic.load.inc.32
+    nvvm_atomic_max_gen_i_cta,                 // llvm.nvvm.atomic.max.gen.i.cta
+    nvvm_atomic_max_gen_i_sys,                 // llvm.nvvm.atomic.max.gen.i.sys
+    nvvm_atomic_min_gen_i_cta,                 // llvm.nvvm.atomic.min.gen.i.cta
+    nvvm_atomic_min_gen_i_sys,                 // llvm.nvvm.atomic.min.gen.i.sys
+    nvvm_atomic_or_gen_i_cta,                  // llvm.nvvm.atomic.or.gen.i.cta
+    nvvm_atomic_or_gen_i_sys,                  // llvm.nvvm.atomic.or.gen.i.sys
+    nvvm_atomic_xor_gen_i_cta,                 // llvm.nvvm.atomic.xor.gen.i.cta
+    nvvm_atomic_xor_gen_i_sys,                 // llvm.nvvm.atomic.xor.gen.i.sys
+    nvvm_bar_sync,                             // llvm.nvvm.bar.sync
+    nvvm_bar_warp_sync,                        // llvm.nvvm.bar.warp.sync
+    nvvm_barrier,                              // llvm.nvvm.barrier
+    nvvm_barrier_n,                            // llvm.nvvm.barrier.n
+    nvvm_barrier_sync,                         // llvm.nvvm.barrier.sync
+    nvvm_barrier_sync_cnt,                     // llvm.nvvm.barrier.sync.cnt
+    nvvm_barrier0,                             // llvm.nvvm.barrier0
+    nvvm_barrier0_and,                         // llvm.nvvm.barrier0.and
+    nvvm_barrier0_or,                          // llvm.nvvm.barrier0.or
+    nvvm_barrier0_popc,                        // llvm.nvvm.barrier0.popc
+    nvvm_bitcast_d2ll,                         // llvm.nvvm.bitcast.d2ll
+    nvvm_bitcast_f2i,                          // llvm.nvvm.bitcast.f2i
+    nvvm_bitcast_i2f,                          // llvm.nvvm.bitcast.i2f
+    nvvm_bitcast_ll2d,                         // llvm.nvvm.bitcast.ll2d
+    nvvm_ceil_d,                               // llvm.nvvm.ceil.d
+    nvvm_ceil_f,                               // llvm.nvvm.ceil.f
+    nvvm_ceil_ftz_f,                           // llvm.nvvm.ceil.ftz.f
+    nvvm_compiler_error,                       // llvm.nvvm.compiler.error
+    nvvm_compiler_warn,                        // llvm.nvvm.compiler.warn
+    nvvm_cos_approx_f,                         // llvm.nvvm.cos.approx.f
+    nvvm_cos_approx_ftz_f,                     // llvm.nvvm.cos.approx.ftz.f
+    nvvm_d2f_rm,                               // llvm.nvvm.d2f.rm
+    nvvm_d2f_rm_ftz,                           // llvm.nvvm.d2f.rm.ftz
+    nvvm_d2f_rn,                               // llvm.nvvm.d2f.rn
+    nvvm_d2f_rn_ftz,                           // llvm.nvvm.d2f.rn.ftz
+    nvvm_d2f_rp,                               // llvm.nvvm.d2f.rp
+    nvvm_d2f_rp_ftz,                           // llvm.nvvm.d2f.rp.ftz
+    nvvm_d2f_rz,                               // llvm.nvvm.d2f.rz
+    nvvm_d2f_rz_ftz,                           // llvm.nvvm.d2f.rz.ftz
+    nvvm_d2i_hi,                               // llvm.nvvm.d2i.hi
+    nvvm_d2i_lo,                               // llvm.nvvm.d2i.lo
+    nvvm_d2i_rm,                               // llvm.nvvm.d2i.rm
+    nvvm_d2i_rn,                               // llvm.nvvm.d2i.rn
+    nvvm_d2i_rp,                               // llvm.nvvm.d2i.rp
+    nvvm_d2i_rz,                               // llvm.nvvm.d2i.rz
+    nvvm_d2ll_rm,                              // llvm.nvvm.d2ll.rm
+    nvvm_d2ll_rn,                              // llvm.nvvm.d2ll.rn
+    nvvm_d2ll_rp,                              // llvm.nvvm.d2ll.rp
+    nvvm_d2ll_rz,                              // llvm.nvvm.d2ll.rz
+    nvvm_d2ui_rm,                              // llvm.nvvm.d2ui.rm
+    nvvm_d2ui_rn,                              // llvm.nvvm.d2ui.rn
+    nvvm_d2ui_rp,                              // llvm.nvvm.d2ui.rp
+    nvvm_d2ui_rz,                              // llvm.nvvm.d2ui.rz
+    nvvm_d2ull_rm,                             // llvm.nvvm.d2ull.rm
+    nvvm_d2ull_rn,                             // llvm.nvvm.d2ull.rn
+    nvvm_d2ull_rp,                             // llvm.nvvm.d2ull.rp
+    nvvm_d2ull_rz,                             // llvm.nvvm.d2ull.rz
+    nvvm_div_approx_f,                         // llvm.nvvm.div.approx.f
+    nvvm_div_approx_ftz_f,                     // llvm.nvvm.div.approx.ftz.f
+    nvvm_div_rm_d,                             // llvm.nvvm.div.rm.d
+    nvvm_div_rm_f,                             // llvm.nvvm.div.rm.f
+    nvvm_div_rm_ftz_f,                         // llvm.nvvm.div.rm.ftz.f
+    nvvm_div_rn_d,                             // llvm.nvvm.div.rn.d
+    nvvm_div_rn_f,                             // llvm.nvvm.div.rn.f
+    nvvm_div_rn_ftz_f,                         // llvm.nvvm.div.rn.ftz.f
+    nvvm_div_rp_d,                             // llvm.nvvm.div.rp.d
+    nvvm_div_rp_f,                             // llvm.nvvm.div.rp.f
+    nvvm_div_rp_ftz_f,                         // llvm.nvvm.div.rp.ftz.f
+    nvvm_div_rz_d,                             // llvm.nvvm.div.rz.d
+    nvvm_div_rz_f,                             // llvm.nvvm.div.rz.f
+    nvvm_div_rz_ftz_f,                         // llvm.nvvm.div.rz.ftz.f
+    nvvm_ex2_approx_d,                         // llvm.nvvm.ex2.approx.d
+    nvvm_ex2_approx_f,                         // llvm.nvvm.ex2.approx.f
+    nvvm_ex2_approx_ftz_f,                     // llvm.nvvm.ex2.approx.ftz.f
+    nvvm_f2h_rn,                               // llvm.nvvm.f2h.rn
+    nvvm_f2h_rn_ftz,                           // llvm.nvvm.f2h.rn.ftz
+    nvvm_f2i_rm,                               // llvm.nvvm.f2i.rm
+    nvvm_f2i_rm_ftz,                           // llvm.nvvm.f2i.rm.ftz
+    nvvm_f2i_rn,                               // llvm.nvvm.f2i.rn
+    nvvm_f2i_rn_ftz,                           // llvm.nvvm.f2i.rn.ftz
+    nvvm_f2i_rp,                               // llvm.nvvm.f2i.rp
+    nvvm_f2i_rp_ftz,                           // llvm.nvvm.f2i.rp.ftz
+    nvvm_f2i_rz,                               // llvm.nvvm.f2i.rz
+    nvvm_f2i_rz_ftz,                           // llvm.nvvm.f2i.rz.ftz
+    nvvm_f2ll_rm,                              // llvm.nvvm.f2ll.rm
+    nvvm_f2ll_rm_ftz,                          // llvm.nvvm.f2ll.rm.ftz
+    nvvm_f2ll_rn,                              // llvm.nvvm.f2ll.rn
+    nvvm_f2ll_rn_ftz,                          // llvm.nvvm.f2ll.rn.ftz
+    nvvm_f2ll_rp,                              // llvm.nvvm.f2ll.rp
+    nvvm_f2ll_rp_ftz,                          // llvm.nvvm.f2ll.rp.ftz
+    nvvm_f2ll_rz,                              // llvm.nvvm.f2ll.rz
+    nvvm_f2ll_rz_ftz,                          // llvm.nvvm.f2ll.rz.ftz
+    nvvm_f2ui_rm,                              // llvm.nvvm.f2ui.rm
+    nvvm_f2ui_rm_ftz,                          // llvm.nvvm.f2ui.rm.ftz
+    nvvm_f2ui_rn,                              // llvm.nvvm.f2ui.rn
+    nvvm_f2ui_rn_ftz,                          // llvm.nvvm.f2ui.rn.ftz
+    nvvm_f2ui_rp,                              // llvm.nvvm.f2ui.rp
+    nvvm_f2ui_rp_ftz,                          // llvm.nvvm.f2ui.rp.ftz
+    nvvm_f2ui_rz,                              // llvm.nvvm.f2ui.rz
+    nvvm_f2ui_rz_ftz,                          // llvm.nvvm.f2ui.rz.ftz
+    nvvm_f2ull_rm,                             // llvm.nvvm.f2ull.rm
+    nvvm_f2ull_rm_ftz,                         // llvm.nvvm.f2ull.rm.ftz
+    nvvm_f2ull_rn,                             // llvm.nvvm.f2ull.rn
+    nvvm_f2ull_rn_ftz,                         // llvm.nvvm.f2ull.rn.ftz
+    nvvm_f2ull_rp,                             // llvm.nvvm.f2ull.rp
+    nvvm_f2ull_rp_ftz,                         // llvm.nvvm.f2ull.rp.ftz
+    nvvm_f2ull_rz,                             // llvm.nvvm.f2ull.rz
+    nvvm_f2ull_rz_ftz,                         // llvm.nvvm.f2ull.rz.ftz
+    nvvm_fabs_d,                               // llvm.nvvm.fabs.d
+    nvvm_fabs_f,                               // llvm.nvvm.fabs.f
+    nvvm_fabs_ftz_f,                           // llvm.nvvm.fabs.ftz.f
+    nvvm_floor_d,                              // llvm.nvvm.floor.d
+    nvvm_floor_f,                              // llvm.nvvm.floor.f
+    nvvm_floor_ftz_f,                          // llvm.nvvm.floor.ftz.f
+    nvvm_fma_rm_d,                             // llvm.nvvm.fma.rm.d
+    nvvm_fma_rm_f,                             // llvm.nvvm.fma.rm.f
+    nvvm_fma_rm_ftz_f,                         // llvm.nvvm.fma.rm.ftz.f
+    nvvm_fma_rn_d,                             // llvm.nvvm.fma.rn.d
+    nvvm_fma_rn_f,                             // llvm.nvvm.fma.rn.f
+    nvvm_fma_rn_ftz_f,                         // llvm.nvvm.fma.rn.ftz.f
+    nvvm_fma_rp_d,                             // llvm.nvvm.fma.rp.d
+    nvvm_fma_rp_f,                             // llvm.nvvm.fma.rp.f
+    nvvm_fma_rp_ftz_f,                         // llvm.nvvm.fma.rp.ftz.f
+    nvvm_fma_rz_d,                             // llvm.nvvm.fma.rz.d
+    nvvm_fma_rz_f,                             // llvm.nvvm.fma.rz.f
+    nvvm_fma_rz_ftz_f,                         // llvm.nvvm.fma.rz.ftz.f
+    nvvm_fmax_d,                               // llvm.nvvm.fmax.d
+    nvvm_fmax_f,                               // llvm.nvvm.fmax.f
+    nvvm_fmax_ftz_f,                           // llvm.nvvm.fmax.ftz.f
+    nvvm_fmin_d,                               // llvm.nvvm.fmin.d
+    nvvm_fmin_f,                               // llvm.nvvm.fmin.f
+    nvvm_fmin_ftz_f,                           // llvm.nvvm.fmin.ftz.f
+    nvvm_fns,                                  // llvm.nvvm.fns
+    nvvm_i2d_rm,                               // llvm.nvvm.i2d.rm
+    nvvm_i2d_rn,                               // llvm.nvvm.i2d.rn
+    nvvm_i2d_rp,                               // llvm.nvvm.i2d.rp
+    nvvm_i2d_rz,                               // llvm.nvvm.i2d.rz
+    nvvm_i2f_rm,                               // llvm.nvvm.i2f.rm
+    nvvm_i2f_rn,                               // llvm.nvvm.i2f.rn
+    nvvm_i2f_rp,                               // llvm.nvvm.i2f.rp
+    nvvm_i2f_rz,                               // llvm.nvvm.i2f.rz
+    nvvm_isspacep_const,                       // llvm.nvvm.isspacep.const
+    nvvm_isspacep_global,                      // llvm.nvvm.isspacep.global
+    nvvm_isspacep_local,                       // llvm.nvvm.isspacep.local
+    nvvm_isspacep_shared,                      // llvm.nvvm.isspacep.shared
+    nvvm_istypep_sampler,                      // llvm.nvvm.istypep.sampler
+    nvvm_istypep_surface,                      // llvm.nvvm.istypep.surface
+    nvvm_istypep_texture,                      // llvm.nvvm.istypep.texture
+    nvvm_ldg_global_f,                         // llvm.nvvm.ldg.global.f
+    nvvm_ldg_global_i,                         // llvm.nvvm.ldg.global.i
+    nvvm_ldg_global_p,                         // llvm.nvvm.ldg.global.p
+    nvvm_ldu_global_f,                         // llvm.nvvm.ldu.global.f
+    nvvm_ldu_global_i,                         // llvm.nvvm.ldu.global.i
+    nvvm_ldu_global_p,                         // llvm.nvvm.ldu.global.p
+    nvvm_lg2_approx_d,                         // llvm.nvvm.lg2.approx.d
+    nvvm_lg2_approx_f,                         // llvm.nvvm.lg2.approx.f
+    nvvm_lg2_approx_ftz_f,                     // llvm.nvvm.lg2.approx.ftz.f
+    nvvm_ll2d_rm,                              // llvm.nvvm.ll2d.rm
+    nvvm_ll2d_rn,                              // llvm.nvvm.ll2d.rn
+    nvvm_ll2d_rp,                              // llvm.nvvm.ll2d.rp
+    nvvm_ll2d_rz,                              // llvm.nvvm.ll2d.rz
+    nvvm_ll2f_rm,                              // llvm.nvvm.ll2f.rm
+    nvvm_ll2f_rn,                              // llvm.nvvm.ll2f.rn
+    nvvm_ll2f_rp,                              // llvm.nvvm.ll2f.rp
+    nvvm_ll2f_rz,                              // llvm.nvvm.ll2f.rz
+    nvvm_lohi_i2d,                             // llvm.nvvm.lohi.i2d
+    nvvm_match_all_sync_i32p,                  // llvm.nvvm.match.all.sync.i32p
+    nvvm_match_all_sync_i64p,                  // llvm.nvvm.match.all.sync.i64p
+    nvvm_match_any_sync_i32,                   // llvm.nvvm.match.any.sync.i32
+    nvvm_match_any_sync_i64,                   // llvm.nvvm.match.any.sync.i64
+    nvvm_membar_cta,                           // llvm.nvvm.membar.cta
+    nvvm_membar_gl,                            // llvm.nvvm.membar.gl
+    nvvm_membar_sys,                           // llvm.nvvm.membar.sys
+    nvvm_move_double,                          // llvm.nvvm.move.double
+    nvvm_move_float,                           // llvm.nvvm.move.float
+    nvvm_move_i16,                             // llvm.nvvm.move.i16
+    nvvm_move_i32,                             // llvm.nvvm.move.i32
+    nvvm_move_i64,                             // llvm.nvvm.move.i64
+    nvvm_move_ptr,                             // llvm.nvvm.move.ptr
+    nvvm_mul_rm_d,                             // llvm.nvvm.mul.rm.d
+    nvvm_mul_rm_f,                             // llvm.nvvm.mul.rm.f
+    nvvm_mul_rm_ftz_f,                         // llvm.nvvm.mul.rm.ftz.f
+    nvvm_mul_rn_d,                             // llvm.nvvm.mul.rn.d
+    nvvm_mul_rn_f,                             // llvm.nvvm.mul.rn.f
+    nvvm_mul_rn_ftz_f,                         // llvm.nvvm.mul.rn.ftz.f
+    nvvm_mul_rp_d,                             // llvm.nvvm.mul.rp.d
+    nvvm_mul_rp_f,                             // llvm.nvvm.mul.rp.f
+    nvvm_mul_rp_ftz_f,                         // llvm.nvvm.mul.rp.ftz.f
+    nvvm_mul_rz_d,                             // llvm.nvvm.mul.rz.d
+    nvvm_mul_rz_f,                             // llvm.nvvm.mul.rz.f
+    nvvm_mul_rz_ftz_f,                         // llvm.nvvm.mul.rz.ftz.f
+    nvvm_mul24_i,                              // llvm.nvvm.mul24.i
+    nvvm_mul24_ui,                             // llvm.nvvm.mul24.ui
+    nvvm_mulhi_i,                              // llvm.nvvm.mulhi.i
+    nvvm_mulhi_ll,                             // llvm.nvvm.mulhi.ll
+    nvvm_mulhi_ui,                             // llvm.nvvm.mulhi.ui
+    nvvm_mulhi_ull,                            // llvm.nvvm.mulhi.ull
+    nvvm_prmt,                                 // llvm.nvvm.prmt
+    nvvm_ptr_constant_to_gen,                  // llvm.nvvm.ptr.constant.to.gen
+    nvvm_ptr_gen_to_constant,                  // llvm.nvvm.ptr.gen.to.constant
+    nvvm_ptr_gen_to_global,                    // llvm.nvvm.ptr.gen.to.global
+    nvvm_ptr_gen_to_local,                     // llvm.nvvm.ptr.gen.to.local
+    nvvm_ptr_gen_to_param,                     // llvm.nvvm.ptr.gen.to.param
+    nvvm_ptr_gen_to_shared,                    // llvm.nvvm.ptr.gen.to.shared
+    nvvm_ptr_global_to_gen,                    // llvm.nvvm.ptr.global.to.gen
+    nvvm_ptr_local_to_gen,                     // llvm.nvvm.ptr.local.to.gen
+    nvvm_ptr_shared_to_gen,                    // llvm.nvvm.ptr.shared.to.gen
+    nvvm_rcp_approx_ftz_d,                     // llvm.nvvm.rcp.approx.ftz.d
+    nvvm_rcp_rm_d,                             // llvm.nvvm.rcp.rm.d
+    nvvm_rcp_rm_f,                             // llvm.nvvm.rcp.rm.f
+    nvvm_rcp_rm_ftz_f,                         // llvm.nvvm.rcp.rm.ftz.f
+    nvvm_rcp_rn_d,                             // llvm.nvvm.rcp.rn.d
+    nvvm_rcp_rn_f,                             // llvm.nvvm.rcp.rn.f
+    nvvm_rcp_rn_ftz_f,                         // llvm.nvvm.rcp.rn.ftz.f
+    nvvm_rcp_rp_d,                             // llvm.nvvm.rcp.rp.d
+    nvvm_rcp_rp_f,                             // llvm.nvvm.rcp.rp.f
+    nvvm_rcp_rp_ftz_f,                         // llvm.nvvm.rcp.rp.ftz.f
+    nvvm_rcp_rz_d,                             // llvm.nvvm.rcp.rz.d
+    nvvm_rcp_rz_f,                             // llvm.nvvm.rcp.rz.f
+    nvvm_rcp_rz_ftz_f,                         // llvm.nvvm.rcp.rz.ftz.f
+    nvvm_read_ptx_sreg_clock,                  // llvm.nvvm.read.ptx.sreg.clock
+    nvvm_read_ptx_sreg_clock64,                // llvm.nvvm.read.ptx.sreg.clock64
+    nvvm_read_ptx_sreg_ctaid_w,                // llvm.nvvm.read.ptx.sreg.ctaid.w
+    nvvm_read_ptx_sreg_ctaid_x,                // llvm.nvvm.read.ptx.sreg.ctaid.x
+    nvvm_read_ptx_sreg_ctaid_y,                // llvm.nvvm.read.ptx.sreg.ctaid.y
+    nvvm_read_ptx_sreg_ctaid_z,                // llvm.nvvm.read.ptx.sreg.ctaid.z
+    nvvm_read_ptx_sreg_envreg0,                // llvm.nvvm.read.ptx.sreg.envreg0
+    nvvm_read_ptx_sreg_envreg1,                // llvm.nvvm.read.ptx.sreg.envreg1
+    nvvm_read_ptx_sreg_envreg10,               // llvm.nvvm.read.ptx.sreg.envreg10
+    nvvm_read_ptx_sreg_envreg11,               // llvm.nvvm.read.ptx.sreg.envreg11
+    nvvm_read_ptx_sreg_envreg12,               // llvm.nvvm.read.ptx.sreg.envreg12
+    nvvm_read_ptx_sreg_envreg13,               // llvm.nvvm.read.ptx.sreg.envreg13
+    nvvm_read_ptx_sreg_envreg14,               // llvm.nvvm.read.ptx.sreg.envreg14
+    nvvm_read_ptx_sreg_envreg15,               // llvm.nvvm.read.ptx.sreg.envreg15
+    nvvm_read_ptx_sreg_envreg16,               // llvm.nvvm.read.ptx.sreg.envreg16
+    nvvm_read_ptx_sreg_envreg17,               // llvm.nvvm.read.ptx.sreg.envreg17
+    nvvm_read_ptx_sreg_envreg18,               // llvm.nvvm.read.ptx.sreg.envreg18
+    nvvm_read_ptx_sreg_envreg19,               // llvm.nvvm.read.ptx.sreg.envreg19
+    nvvm_read_ptx_sreg_envreg2,                // llvm.nvvm.read.ptx.sreg.envreg2
+    nvvm_read_ptx_sreg_envreg20,               // llvm.nvvm.read.ptx.sreg.envreg20
+    nvvm_read_ptx_sreg_envreg21,               // llvm.nvvm.read.ptx.sreg.envreg21
+    nvvm_read_ptx_sreg_envreg22,               // llvm.nvvm.read.ptx.sreg.envreg22
+    nvvm_read_ptx_sreg_envreg23,               // llvm.nvvm.read.ptx.sreg.envreg23
+    nvvm_read_ptx_sreg_envreg24,               // llvm.nvvm.read.ptx.sreg.envreg24
+    nvvm_read_ptx_sreg_envreg25,               // llvm.nvvm.read.ptx.sreg.envreg25
+    nvvm_read_ptx_sreg_envreg26,               // llvm.nvvm.read.ptx.sreg.envreg26
+    nvvm_read_ptx_sreg_envreg27,               // llvm.nvvm.read.ptx.sreg.envreg27
+    nvvm_read_ptx_sreg_envreg28,               // llvm.nvvm.read.ptx.sreg.envreg28
+    nvvm_read_ptx_sreg_envreg29,               // llvm.nvvm.read.ptx.sreg.envreg29
+    nvvm_read_ptx_sreg_envreg3,                // llvm.nvvm.read.ptx.sreg.envreg3
+    nvvm_read_ptx_sreg_envreg30,               // llvm.nvvm.read.ptx.sreg.envreg30
+    nvvm_read_ptx_sreg_envreg31,               // llvm.nvvm.read.ptx.sreg.envreg31
+    nvvm_read_ptx_sreg_envreg4,                // llvm.nvvm.read.ptx.sreg.envreg4
+    nvvm_read_ptx_sreg_envreg5,                // llvm.nvvm.read.ptx.sreg.envreg5
+    nvvm_read_ptx_sreg_envreg6,                // llvm.nvvm.read.ptx.sreg.envreg6
+    nvvm_read_ptx_sreg_envreg7,                // llvm.nvvm.read.ptx.sreg.envreg7
+    nvvm_read_ptx_sreg_envreg8,                // llvm.nvvm.read.ptx.sreg.envreg8
+    nvvm_read_ptx_sreg_envreg9,                // llvm.nvvm.read.ptx.sreg.envreg9
+    nvvm_read_ptx_sreg_gridid,                 // llvm.nvvm.read.ptx.sreg.gridid
+    nvvm_read_ptx_sreg_laneid,                 // llvm.nvvm.read.ptx.sreg.laneid
+    nvvm_read_ptx_sreg_lanemask_eq,            // llvm.nvvm.read.ptx.sreg.lanemask.eq
+    nvvm_read_ptx_sreg_lanemask_ge,            // llvm.nvvm.read.ptx.sreg.lanemask.ge
+    nvvm_read_ptx_sreg_lanemask_gt,            // llvm.nvvm.read.ptx.sreg.lanemask.gt
+    nvvm_read_ptx_sreg_lanemask_le,            // llvm.nvvm.read.ptx.sreg.lanemask.le
+    nvvm_read_ptx_sreg_lanemask_lt,            // llvm.nvvm.read.ptx.sreg.lanemask.lt
+    nvvm_read_ptx_sreg_nctaid_w,               // llvm.nvvm.read.ptx.sreg.nctaid.w
+    nvvm_read_ptx_sreg_nctaid_x,               // llvm.nvvm.read.ptx.sreg.nctaid.x
+    nvvm_read_ptx_sreg_nctaid_y,               // llvm.nvvm.read.ptx.sreg.nctaid.y
+    nvvm_read_ptx_sreg_nctaid_z,               // llvm.nvvm.read.ptx.sreg.nctaid.z
+    nvvm_read_ptx_sreg_nsmid,                  // llvm.nvvm.read.ptx.sreg.nsmid
+    nvvm_read_ptx_sreg_ntid_w,                 // llvm.nvvm.read.ptx.sreg.ntid.w
+    nvvm_read_ptx_sreg_ntid_x,                 // llvm.nvvm.read.ptx.sreg.ntid.x
+    nvvm_read_ptx_sreg_ntid_y,                 // llvm.nvvm.read.ptx.sreg.ntid.y
+    nvvm_read_ptx_sreg_ntid_z,                 // llvm.nvvm.read.ptx.sreg.ntid.z
+    nvvm_read_ptx_sreg_nwarpid,                // llvm.nvvm.read.ptx.sreg.nwarpid
+    nvvm_read_ptx_sreg_pm0,                    // llvm.nvvm.read.ptx.sreg.pm0
+    nvvm_read_ptx_sreg_pm1,                    // llvm.nvvm.read.ptx.sreg.pm1
+    nvvm_read_ptx_sreg_pm2,                    // llvm.nvvm.read.ptx.sreg.pm2
+    nvvm_read_ptx_sreg_pm3,                    // llvm.nvvm.read.ptx.sreg.pm3
+    nvvm_read_ptx_sreg_smid,                   // llvm.nvvm.read.ptx.sreg.smid
+    nvvm_read_ptx_sreg_tid_w,                  // llvm.nvvm.read.ptx.sreg.tid.w
+    nvvm_read_ptx_sreg_tid_x,                  // llvm.nvvm.read.ptx.sreg.tid.x
+    nvvm_read_ptx_sreg_tid_y,                  // llvm.nvvm.read.ptx.sreg.tid.y
+    nvvm_read_ptx_sreg_tid_z,                  // llvm.nvvm.read.ptx.sreg.tid.z
+    nvvm_read_ptx_sreg_warpid,                 // llvm.nvvm.read.ptx.sreg.warpid
+    nvvm_read_ptx_sreg_warpsize,               // llvm.nvvm.read.ptx.sreg.warpsize
+    nvvm_reflect,                              // llvm.nvvm.reflect
+    nvvm_rotate_b32,                           // llvm.nvvm.rotate.b32
+    nvvm_rotate_b64,                           // llvm.nvvm.rotate.b64
+    nvvm_rotate_right_b64,                     // llvm.nvvm.rotate.right.b64
+    nvvm_round_d,                              // llvm.nvvm.round.d
+    nvvm_round_f,                              // llvm.nvvm.round.f
+    nvvm_round_ftz_f,                          // llvm.nvvm.round.ftz.f
+    nvvm_rsqrt_approx_d,                       // llvm.nvvm.rsqrt.approx.d
+    nvvm_rsqrt_approx_f,                       // llvm.nvvm.rsqrt.approx.f
+    nvvm_rsqrt_approx_ftz_f,                   // llvm.nvvm.rsqrt.approx.ftz.f
+    nvvm_sad_i,                                // llvm.nvvm.sad.i
+    nvvm_sad_ui,                               // llvm.nvvm.sad.ui
+    nvvm_saturate_d,                           // llvm.nvvm.saturate.d
+    nvvm_saturate_f,                           // llvm.nvvm.saturate.f
+    nvvm_saturate_ftz_f,                       // llvm.nvvm.saturate.ftz.f
+    nvvm_shfl_bfly_f32,                        // llvm.nvvm.shfl.bfly.f32
+    nvvm_shfl_bfly_i32,                        // llvm.nvvm.shfl.bfly.i32
+    nvvm_shfl_down_f32,                        // llvm.nvvm.shfl.down.f32
+    nvvm_shfl_down_i32,                        // llvm.nvvm.shfl.down.i32
+    nvvm_shfl_idx_f32,                         // llvm.nvvm.shfl.idx.f32
+    nvvm_shfl_idx_i32,                         // llvm.nvvm.shfl.idx.i32
+    nvvm_shfl_sync_bfly_f32,                   // llvm.nvvm.shfl.sync.bfly.f32
+    nvvm_shfl_sync_bfly_i32,                   // llvm.nvvm.shfl.sync.bfly.i32
+    nvvm_shfl_sync_down_f32,                   // llvm.nvvm.shfl.sync.down.f32
+    nvvm_shfl_sync_down_i32,                   // llvm.nvvm.shfl.sync.down.i32
+    nvvm_shfl_sync_idx_f32,                    // llvm.nvvm.shfl.sync.idx.f32
+    nvvm_shfl_sync_idx_i32,                    // llvm.nvvm.shfl.sync.idx.i32
+    nvvm_shfl_sync_up_f32,                     // llvm.nvvm.shfl.sync.up.f32
+    nvvm_shfl_sync_up_i32,                     // llvm.nvvm.shfl.sync.up.i32
+    nvvm_shfl_up_f32,                          // llvm.nvvm.shfl.up.f32
+    nvvm_shfl_up_i32,                          // llvm.nvvm.shfl.up.i32
+    nvvm_sin_approx_f,                         // llvm.nvvm.sin.approx.f
+    nvvm_sin_approx_ftz_f,                     // llvm.nvvm.sin.approx.ftz.f
+    nvvm_sqrt_approx_f,                        // llvm.nvvm.sqrt.approx.f
+    nvvm_sqrt_approx_ftz_f,                    // llvm.nvvm.sqrt.approx.ftz.f
+    nvvm_sqrt_f,                               // llvm.nvvm.sqrt.f
+    nvvm_sqrt_rm_d,                            // llvm.nvvm.sqrt.rm.d
+    nvvm_sqrt_rm_f,                            // llvm.nvvm.sqrt.rm.f
+    nvvm_sqrt_rm_ftz_f,                        // llvm.nvvm.sqrt.rm.ftz.f
+    nvvm_sqrt_rn_d,                            // llvm.nvvm.sqrt.rn.d
+    nvvm_sqrt_rn_f,                            // llvm.nvvm.sqrt.rn.f
+    nvvm_sqrt_rn_ftz_f,                        // llvm.nvvm.sqrt.rn.ftz.f
+    nvvm_sqrt_rp_d,                            // llvm.nvvm.sqrt.rp.d
+    nvvm_sqrt_rp_f,                            // llvm.nvvm.sqrt.rp.f
+    nvvm_sqrt_rp_ftz_f,                        // llvm.nvvm.sqrt.rp.ftz.f
+    nvvm_sqrt_rz_d,                            // llvm.nvvm.sqrt.rz.d
+    nvvm_sqrt_rz_f,                            // llvm.nvvm.sqrt.rz.f
+    nvvm_sqrt_rz_ftz_f,                        // llvm.nvvm.sqrt.rz.ftz.f
+    nvvm_suld_1d_array_i16_clamp,              // llvm.nvvm.suld.1d.array.i16.clamp
+    nvvm_suld_1d_array_i16_trap,               // llvm.nvvm.suld.1d.array.i16.trap
+    nvvm_suld_1d_array_i16_zero,               // llvm.nvvm.suld.1d.array.i16.zero
+    nvvm_suld_1d_array_i32_clamp,              // llvm.nvvm.suld.1d.array.i32.clamp
+    nvvm_suld_1d_array_i32_trap,               // llvm.nvvm.suld.1d.array.i32.trap
+    nvvm_suld_1d_array_i32_zero,               // llvm.nvvm.suld.1d.array.i32.zero
+    nvvm_suld_1d_array_i64_clamp,              // llvm.nvvm.suld.1d.array.i64.clamp
+    nvvm_suld_1d_array_i64_trap,               // llvm.nvvm.suld.1d.array.i64.trap
+    nvvm_suld_1d_array_i64_zero,               // llvm.nvvm.suld.1d.array.i64.zero
+    nvvm_suld_1d_array_i8_clamp,               // llvm.nvvm.suld.1d.array.i8.clamp
+    nvvm_suld_1d_array_i8_trap,                // llvm.nvvm.suld.1d.array.i8.trap
+    nvvm_suld_1d_array_i8_zero,                // llvm.nvvm.suld.1d.array.i8.zero
+    nvvm_suld_1d_array_v2i16_clamp,            // llvm.nvvm.suld.1d.array.v2i16.clamp
+    nvvm_suld_1d_array_v2i16_trap,             // llvm.nvvm.suld.1d.array.v2i16.trap
+    nvvm_suld_1d_array_v2i16_zero,             // llvm.nvvm.suld.1d.array.v2i16.zero
+    nvvm_suld_1d_array_v2i32_clamp,            // llvm.nvvm.suld.1d.array.v2i32.clamp
+    nvvm_suld_1d_array_v2i32_trap,             // llvm.nvvm.suld.1d.array.v2i32.trap
+    nvvm_suld_1d_array_v2i32_zero,             // llvm.nvvm.suld.1d.array.v2i32.zero
+    nvvm_suld_1d_array_v2i64_clamp,            // llvm.nvvm.suld.1d.array.v2i64.clamp
+    nvvm_suld_1d_array_v2i64_trap,             // llvm.nvvm.suld.1d.array.v2i64.trap
+    nvvm_suld_1d_array_v2i64_zero,             // llvm.nvvm.suld.1d.array.v2i64.zero
+    nvvm_suld_1d_array_v2i8_clamp,             // llvm.nvvm.suld.1d.array.v2i8.clamp
+    nvvm_suld_1d_array_v2i8_trap,              // llvm.nvvm.suld.1d.array.v2i8.trap
+    nvvm_suld_1d_array_v2i8_zero,              // llvm.nvvm.suld.1d.array.v2i8.zero
+    nvvm_suld_1d_array_v4i16_clamp,            // llvm.nvvm.suld.1d.array.v4i16.clamp
+    nvvm_suld_1d_array_v4i16_trap,             // llvm.nvvm.suld.1d.array.v4i16.trap
+    nvvm_suld_1d_array_v4i16_zero,             // llvm.nvvm.suld.1d.array.v4i16.zero
+    nvvm_suld_1d_array_v4i32_clamp,            // llvm.nvvm.suld.1d.array.v4i32.clamp
+    nvvm_suld_1d_array_v4i32_trap,             // llvm.nvvm.suld.1d.array.v4i32.trap
+    nvvm_suld_1d_array_v4i32_zero,             // llvm.nvvm.suld.1d.array.v4i32.zero
+    nvvm_suld_1d_array_v4i8_clamp,             // llvm.nvvm.suld.1d.array.v4i8.clamp
+    nvvm_suld_1d_array_v4i8_trap,              // llvm.nvvm.suld.1d.array.v4i8.trap
+    nvvm_suld_1d_array_v4i8_zero,              // llvm.nvvm.suld.1d.array.v4i8.zero
+    nvvm_suld_1d_i16_clamp,                    // llvm.nvvm.suld.1d.i16.clamp
+    nvvm_suld_1d_i16_trap,                     // llvm.nvvm.suld.1d.i16.trap
+    nvvm_suld_1d_i16_zero,                     // llvm.nvvm.suld.1d.i16.zero
+    nvvm_suld_1d_i32_clamp,                    // llvm.nvvm.suld.1d.i32.clamp
+    nvvm_suld_1d_i32_trap,                     // llvm.nvvm.suld.1d.i32.trap
+    nvvm_suld_1d_i32_zero,                     // llvm.nvvm.suld.1d.i32.zero
+    nvvm_suld_1d_i64_clamp,                    // llvm.nvvm.suld.1d.i64.clamp
+    nvvm_suld_1d_i64_trap,                     // llvm.nvvm.suld.1d.i64.trap
+    nvvm_suld_1d_i64_zero,                     // llvm.nvvm.suld.1d.i64.zero
+    nvvm_suld_1d_i8_clamp,                     // llvm.nvvm.suld.1d.i8.clamp
+    nvvm_suld_1d_i8_trap,                      // llvm.nvvm.suld.1d.i8.trap
+    nvvm_suld_1d_i8_zero,                      // llvm.nvvm.suld.1d.i8.zero
+    nvvm_suld_1d_v2i16_clamp,                  // llvm.nvvm.suld.1d.v2i16.clamp
+    nvvm_suld_1d_v2i16_trap,                   // llvm.nvvm.suld.1d.v2i16.trap
+    nvvm_suld_1d_v2i16_zero,                   // llvm.nvvm.suld.1d.v2i16.zero
+    nvvm_suld_1d_v2i32_clamp,                  // llvm.nvvm.suld.1d.v2i32.clamp
+    nvvm_suld_1d_v2i32_trap,                   // llvm.nvvm.suld.1d.v2i32.trap
+    nvvm_suld_1d_v2i32_zero,                   // llvm.nvvm.suld.1d.v2i32.zero
+    nvvm_suld_1d_v2i64_clamp,                  // llvm.nvvm.suld.1d.v2i64.clamp
+    nvvm_suld_1d_v2i64_trap,                   // llvm.nvvm.suld.1d.v2i64.trap
+    nvvm_suld_1d_v2i64_zero,                   // llvm.nvvm.suld.1d.v2i64.zero
+    nvvm_suld_1d_v2i8_clamp,                   // llvm.nvvm.suld.1d.v2i8.clamp
+    nvvm_suld_1d_v2i8_trap,                    // llvm.nvvm.suld.1d.v2i8.trap
+    nvvm_suld_1d_v2i8_zero,                    // llvm.nvvm.suld.1d.v2i8.zero
+    nvvm_suld_1d_v4i16_clamp,                  // llvm.nvvm.suld.1d.v4i16.clamp
+    nvvm_suld_1d_v4i16_trap,                   // llvm.nvvm.suld.1d.v4i16.trap
+    nvvm_suld_1d_v4i16_zero,                   // llvm.nvvm.suld.1d.v4i16.zero
+    nvvm_suld_1d_v4i32_clamp,                  // llvm.nvvm.suld.1d.v4i32.clamp
+    nvvm_suld_1d_v4i32_trap,                   // llvm.nvvm.suld.1d.v4i32.trap
+    nvvm_suld_1d_v4i32_zero,                   // llvm.nvvm.suld.1d.v4i32.zero
+    nvvm_suld_1d_v4i8_clamp,                   // llvm.nvvm.suld.1d.v4i8.clamp
+    nvvm_suld_1d_v4i8_trap,                    // llvm.nvvm.suld.1d.v4i8.trap
+    nvvm_suld_1d_v4i8_zero,                    // llvm.nvvm.suld.1d.v4i8.zero
+    nvvm_suld_2d_array_i16_clamp,              // llvm.nvvm.suld.2d.array.i16.clamp
+    nvvm_suld_2d_array_i16_trap,               // llvm.nvvm.suld.2d.array.i16.trap
+    nvvm_suld_2d_array_i16_zero,               // llvm.nvvm.suld.2d.array.i16.zero
+    nvvm_suld_2d_array_i32_clamp,              // llvm.nvvm.suld.2d.array.i32.clamp
+    nvvm_suld_2d_array_i32_trap,               // llvm.nvvm.suld.2d.array.i32.trap
+    nvvm_suld_2d_array_i32_zero,               // llvm.nvvm.suld.2d.array.i32.zero
+    nvvm_suld_2d_array_i64_clamp,              // llvm.nvvm.suld.2d.array.i64.clamp
+    nvvm_suld_2d_array_i64_trap,               // llvm.nvvm.suld.2d.array.i64.trap
+    nvvm_suld_2d_array_i64_zero,               // llvm.nvvm.suld.2d.array.i64.zero
+    nvvm_suld_2d_array_i8_clamp,               // llvm.nvvm.suld.2d.array.i8.clamp
+    nvvm_suld_2d_array_i8_trap,                // llvm.nvvm.suld.2d.array.i8.trap
+    nvvm_suld_2d_array_i8_zero,                // llvm.nvvm.suld.2d.array.i8.zero
+    nvvm_suld_2d_array_v2i16_clamp,            // llvm.nvvm.suld.2d.array.v2i16.clamp
+    nvvm_suld_2d_array_v2i16_trap,             // llvm.nvvm.suld.2d.array.v2i16.trap
+    nvvm_suld_2d_array_v2i16_zero,             // llvm.nvvm.suld.2d.array.v2i16.zero
+    nvvm_suld_2d_array_v2i32_clamp,            // llvm.nvvm.suld.2d.array.v2i32.clamp
+    nvvm_suld_2d_array_v2i32_trap,             // llvm.nvvm.suld.2d.array.v2i32.trap
+    nvvm_suld_2d_array_v2i32_zero,             // llvm.nvvm.suld.2d.array.v2i32.zero
+    nvvm_suld_2d_array_v2i64_clamp,            // llvm.nvvm.suld.2d.array.v2i64.clamp
+    nvvm_suld_2d_array_v2i64_trap,             // llvm.nvvm.suld.2d.array.v2i64.trap
+    nvvm_suld_2d_array_v2i64_zero,             // llvm.nvvm.suld.2d.array.v2i64.zero
+    nvvm_suld_2d_array_v2i8_clamp,             // llvm.nvvm.suld.2d.array.v2i8.clamp
+    nvvm_suld_2d_array_v2i8_trap,              // llvm.nvvm.suld.2d.array.v2i8.trap
+    nvvm_suld_2d_array_v2i8_zero,              // llvm.nvvm.suld.2d.array.v2i8.zero
+    nvvm_suld_2d_array_v4i16_clamp,            // llvm.nvvm.suld.2d.array.v4i16.clamp
+    nvvm_suld_2d_array_v4i16_trap,             // llvm.nvvm.suld.2d.array.v4i16.trap
+    nvvm_suld_2d_array_v4i16_zero,             // llvm.nvvm.suld.2d.array.v4i16.zero
+    nvvm_suld_2d_array_v4i32_clamp,            // llvm.nvvm.suld.2d.array.v4i32.clamp
+    nvvm_suld_2d_array_v4i32_trap,             // llvm.nvvm.suld.2d.array.v4i32.trap
+    nvvm_suld_2d_array_v4i32_zero,             // llvm.nvvm.suld.2d.array.v4i32.zero
+    nvvm_suld_2d_array_v4i8_clamp,             // llvm.nvvm.suld.2d.array.v4i8.clamp
+    nvvm_suld_2d_array_v4i8_trap,              // llvm.nvvm.suld.2d.array.v4i8.trap
+    nvvm_suld_2d_array_v4i8_zero,              // llvm.nvvm.suld.2d.array.v4i8.zero
+    nvvm_suld_2d_i16_clamp,                    // llvm.nvvm.suld.2d.i16.clamp
+    nvvm_suld_2d_i16_trap,                     // llvm.nvvm.suld.2d.i16.trap
+    nvvm_suld_2d_i16_zero,                     // llvm.nvvm.suld.2d.i16.zero
+    nvvm_suld_2d_i32_clamp,                    // llvm.nvvm.suld.2d.i32.clamp
+    nvvm_suld_2d_i32_trap,                     // llvm.nvvm.suld.2d.i32.trap
+    nvvm_suld_2d_i32_zero,                     // llvm.nvvm.suld.2d.i32.zero
+    nvvm_suld_2d_i64_clamp,                    // llvm.nvvm.suld.2d.i64.clamp
+    nvvm_suld_2d_i64_trap,                     // llvm.nvvm.suld.2d.i64.trap
+    nvvm_suld_2d_i64_zero,                     // llvm.nvvm.suld.2d.i64.zero
+    nvvm_suld_2d_i8_clamp,                     // llvm.nvvm.suld.2d.i8.clamp
+    nvvm_suld_2d_i8_trap,                      // llvm.nvvm.suld.2d.i8.trap
+    nvvm_suld_2d_i8_zero,                      // llvm.nvvm.suld.2d.i8.zero
+    nvvm_suld_2d_v2i16_clamp,                  // llvm.nvvm.suld.2d.v2i16.clamp
+    nvvm_suld_2d_v2i16_trap,                   // llvm.nvvm.suld.2d.v2i16.trap
+    nvvm_suld_2d_v2i16_zero,                   // llvm.nvvm.suld.2d.v2i16.zero
+    nvvm_suld_2d_v2i32_clamp,                  // llvm.nvvm.suld.2d.v2i32.clamp
+    nvvm_suld_2d_v2i32_trap,                   // llvm.nvvm.suld.2d.v2i32.trap
+    nvvm_suld_2d_v2i32_zero,                   // llvm.nvvm.suld.2d.v2i32.zero
+    nvvm_suld_2d_v2i64_clamp,                  // llvm.nvvm.suld.2d.v2i64.clamp
+    nvvm_suld_2d_v2i64_trap,                   // llvm.nvvm.suld.2d.v2i64.trap
+    nvvm_suld_2d_v2i64_zero,                   // llvm.nvvm.suld.2d.v2i64.zero
+    nvvm_suld_2d_v2i8_clamp,                   // llvm.nvvm.suld.2d.v2i8.clamp
+    nvvm_suld_2d_v2i8_trap,                    // llvm.nvvm.suld.2d.v2i8.trap
+    nvvm_suld_2d_v2i8_zero,                    // llvm.nvvm.suld.2d.v2i8.zero
+    nvvm_suld_2d_v4i16_clamp,                  // llvm.nvvm.suld.2d.v4i16.clamp
+    nvvm_suld_2d_v4i16_trap,                   // llvm.nvvm.suld.2d.v4i16.trap
+    nvvm_suld_2d_v4i16_zero,                   // llvm.nvvm.suld.2d.v4i16.zero
+    nvvm_suld_2d_v4i32_clamp,                  // llvm.nvvm.suld.2d.v4i32.clamp
+    nvvm_suld_2d_v4i32_trap,                   // llvm.nvvm.suld.2d.v4i32.trap
+    nvvm_suld_2d_v4i32_zero,                   // llvm.nvvm.suld.2d.v4i32.zero
+    nvvm_suld_2d_v4i8_clamp,                   // llvm.nvvm.suld.2d.v4i8.clamp
+    nvvm_suld_2d_v4i8_trap,                    // llvm.nvvm.suld.2d.v4i8.trap
+    nvvm_suld_2d_v4i8_zero,                    // llvm.nvvm.suld.2d.v4i8.zero
+    nvvm_suld_3d_i16_clamp,                    // llvm.nvvm.suld.3d.i16.clamp
+    nvvm_suld_3d_i16_trap,                     // llvm.nvvm.suld.3d.i16.trap
+    nvvm_suld_3d_i16_zero,                     // llvm.nvvm.suld.3d.i16.zero
+    nvvm_suld_3d_i32_clamp,                    // llvm.nvvm.suld.3d.i32.clamp
+    nvvm_suld_3d_i32_trap,                     // llvm.nvvm.suld.3d.i32.trap
+    nvvm_suld_3d_i32_zero,                     // llvm.nvvm.suld.3d.i32.zero
+    nvvm_suld_3d_i64_clamp,                    // llvm.nvvm.suld.3d.i64.clamp
+    nvvm_suld_3d_i64_trap,                     // llvm.nvvm.suld.3d.i64.trap
+    nvvm_suld_3d_i64_zero,                     // llvm.nvvm.suld.3d.i64.zero
+    nvvm_suld_3d_i8_clamp,                     // llvm.nvvm.suld.3d.i8.clamp
+    nvvm_suld_3d_i8_trap,                      // llvm.nvvm.suld.3d.i8.trap
+    nvvm_suld_3d_i8_zero,                      // llvm.nvvm.suld.3d.i8.zero
+    nvvm_suld_3d_v2i16_clamp,                  // llvm.nvvm.suld.3d.v2i16.clamp
+    nvvm_suld_3d_v2i16_trap,                   // llvm.nvvm.suld.3d.v2i16.trap
+    nvvm_suld_3d_v2i16_zero,                   // llvm.nvvm.suld.3d.v2i16.zero
+    nvvm_suld_3d_v2i32_clamp,                  // llvm.nvvm.suld.3d.v2i32.clamp
+    nvvm_suld_3d_v2i32_trap,                   // llvm.nvvm.suld.3d.v2i32.trap
+    nvvm_suld_3d_v2i32_zero,                   // llvm.nvvm.suld.3d.v2i32.zero
+    nvvm_suld_3d_v2i64_clamp,                  // llvm.nvvm.suld.3d.v2i64.clamp
+    nvvm_suld_3d_v2i64_trap,                   // llvm.nvvm.suld.3d.v2i64.trap
+    nvvm_suld_3d_v2i64_zero,                   // llvm.nvvm.suld.3d.v2i64.zero
+    nvvm_suld_3d_v2i8_clamp,                   // llvm.nvvm.suld.3d.v2i8.clamp
+    nvvm_suld_3d_v2i8_trap,                    // llvm.nvvm.suld.3d.v2i8.trap
+    nvvm_suld_3d_v2i8_zero,                    // llvm.nvvm.suld.3d.v2i8.zero
+    nvvm_suld_3d_v4i16_clamp,                  // llvm.nvvm.suld.3d.v4i16.clamp
+    nvvm_suld_3d_v4i16_trap,                   // llvm.nvvm.suld.3d.v4i16.trap
+    nvvm_suld_3d_v4i16_zero,                   // llvm.nvvm.suld.3d.v4i16.zero
+    nvvm_suld_3d_v4i32_clamp,                  // llvm.nvvm.suld.3d.v4i32.clamp
+    nvvm_suld_3d_v4i32_trap,                   // llvm.nvvm.suld.3d.v4i32.trap
+    nvvm_suld_3d_v4i32_zero,                   // llvm.nvvm.suld.3d.v4i32.zero
+    nvvm_suld_3d_v4i8_clamp,                   // llvm.nvvm.suld.3d.v4i8.clamp
+    nvvm_suld_3d_v4i8_trap,                    // llvm.nvvm.suld.3d.v4i8.trap
+    nvvm_suld_3d_v4i8_zero,                    // llvm.nvvm.suld.3d.v4i8.zero
+    nvvm_suq_array_size,                       // llvm.nvvm.suq.array.size
+    nvvm_suq_channel_data_type,                // llvm.nvvm.suq.channel.data.type
+    nvvm_suq_channel_order,                    // llvm.nvvm.suq.channel.order
+    nvvm_suq_depth,                            // llvm.nvvm.suq.depth
+    nvvm_suq_height,                           // llvm.nvvm.suq.height
+    nvvm_suq_width,                            // llvm.nvvm.suq.width
+    nvvm_sust_b_1d_array_i16_clamp,            // llvm.nvvm.sust.b.1d.array.i16.clamp
+    nvvm_sust_b_1d_array_i16_trap,             // llvm.nvvm.sust.b.1d.array.i16.trap
+    nvvm_sust_b_1d_array_i16_zero,             // llvm.nvvm.sust.b.1d.array.i16.zero
+    nvvm_sust_b_1d_array_i32_clamp,            // llvm.nvvm.sust.b.1d.array.i32.clamp
+    nvvm_sust_b_1d_array_i32_trap,             // llvm.nvvm.sust.b.1d.array.i32.trap
+    nvvm_sust_b_1d_array_i32_zero,             // llvm.nvvm.sust.b.1d.array.i32.zero
+    nvvm_sust_b_1d_array_i64_clamp,            // llvm.nvvm.sust.b.1d.array.i64.clamp
+    nvvm_sust_b_1d_array_i64_trap,             // llvm.nvvm.sust.b.1d.array.i64.trap
+    nvvm_sust_b_1d_array_i64_zero,             // llvm.nvvm.sust.b.1d.array.i64.zero
+    nvvm_sust_b_1d_array_i8_clamp,             // llvm.nvvm.sust.b.1d.array.i8.clamp
+    nvvm_sust_b_1d_array_i8_trap,              // llvm.nvvm.sust.b.1d.array.i8.trap
+    nvvm_sust_b_1d_array_i8_zero,              // llvm.nvvm.sust.b.1d.array.i8.zero
+    nvvm_sust_b_1d_array_v2i16_clamp,          // llvm.nvvm.sust.b.1d.array.v2i16.clamp
+    nvvm_sust_b_1d_array_v2i16_trap,           // llvm.nvvm.sust.b.1d.array.v2i16.trap
+    nvvm_sust_b_1d_array_v2i16_zero,           // llvm.nvvm.sust.b.1d.array.v2i16.zero
+    nvvm_sust_b_1d_array_v2i32_clamp,          // llvm.nvvm.sust.b.1d.array.v2i32.clamp
+    nvvm_sust_b_1d_array_v2i32_trap,           // llvm.nvvm.sust.b.1d.array.v2i32.trap
+    nvvm_sust_b_1d_array_v2i32_zero,           // llvm.nvvm.sust.b.1d.array.v2i32.zero
+    nvvm_sust_b_1d_array_v2i64_clamp,          // llvm.nvvm.sust.b.1d.array.v2i64.clamp
+    nvvm_sust_b_1d_array_v2i64_trap,           // llvm.nvvm.sust.b.1d.array.v2i64.trap
+    nvvm_sust_b_1d_array_v2i64_zero,           // llvm.nvvm.sust.b.1d.array.v2i64.zero
+    nvvm_sust_b_1d_array_v2i8_clamp,           // llvm.nvvm.sust.b.1d.array.v2i8.clamp
+    nvvm_sust_b_1d_array_v2i8_trap,            // llvm.nvvm.sust.b.1d.array.v2i8.trap
+    nvvm_sust_b_1d_array_v2i8_zero,            // llvm.nvvm.sust.b.1d.array.v2i8.zero
+    nvvm_sust_b_1d_array_v4i16_clamp,          // llvm.nvvm.sust.b.1d.array.v4i16.clamp
+    nvvm_sust_b_1d_array_v4i16_trap,           // llvm.nvvm.sust.b.1d.array.v4i16.trap
+    nvvm_sust_b_1d_array_v4i16_zero,           // llvm.nvvm.sust.b.1d.array.v4i16.zero
+    nvvm_sust_b_1d_array_v4i32_clamp,          // llvm.nvvm.sust.b.1d.array.v4i32.clamp
+    nvvm_sust_b_1d_array_v4i32_trap,           // llvm.nvvm.sust.b.1d.array.v4i32.trap
+    nvvm_sust_b_1d_array_v4i32_zero,           // llvm.nvvm.sust.b.1d.array.v4i32.zero
+    nvvm_sust_b_1d_array_v4i8_clamp,           // llvm.nvvm.sust.b.1d.array.v4i8.clamp
+    nvvm_sust_b_1d_array_v4i8_trap,            // llvm.nvvm.sust.b.1d.array.v4i8.trap
+    nvvm_sust_b_1d_array_v4i8_zero,            // llvm.nvvm.sust.b.1d.array.v4i8.zero
+    nvvm_sust_b_1d_i16_clamp,                  // llvm.nvvm.sust.b.1d.i16.clamp
+    nvvm_sust_b_1d_i16_trap,                   // llvm.nvvm.sust.b.1d.i16.trap
+    nvvm_sust_b_1d_i16_zero,                   // llvm.nvvm.sust.b.1d.i16.zero
+    nvvm_sust_b_1d_i32_clamp,                  // llvm.nvvm.sust.b.1d.i32.clamp
+    nvvm_sust_b_1d_i32_trap,                   // llvm.nvvm.sust.b.1d.i32.trap
+    nvvm_sust_b_1d_i32_zero,                   // llvm.nvvm.sust.b.1d.i32.zero
+    nvvm_sust_b_1d_i64_clamp,                  // llvm.nvvm.sust.b.1d.i64.clamp
+    nvvm_sust_b_1d_i64_trap,                   // llvm.nvvm.sust.b.1d.i64.trap
+    nvvm_sust_b_1d_i64_zero,                   // llvm.nvvm.sust.b.1d.i64.zero
+    nvvm_sust_b_1d_i8_clamp,                   // llvm.nvvm.sust.b.1d.i8.clamp
+    nvvm_sust_b_1d_i8_trap,                    // llvm.nvvm.sust.b.1d.i8.trap
+    nvvm_sust_b_1d_i8_zero,                    // llvm.nvvm.sust.b.1d.i8.zero
+    nvvm_sust_b_1d_v2i16_clamp,                // llvm.nvvm.sust.b.1d.v2i16.clamp
+    nvvm_sust_b_1d_v2i16_trap,                 // llvm.nvvm.sust.b.1d.v2i16.trap
+    nvvm_sust_b_1d_v2i16_zero,                 // llvm.nvvm.sust.b.1d.v2i16.zero
+    nvvm_sust_b_1d_v2i32_clamp,                // llvm.nvvm.sust.b.1d.v2i32.clamp
+    nvvm_sust_b_1d_v2i32_trap,                 // llvm.nvvm.sust.b.1d.v2i32.trap
+    nvvm_sust_b_1d_v2i32_zero,                 // llvm.nvvm.sust.b.1d.v2i32.zero
+    nvvm_sust_b_1d_v2i64_clamp,                // llvm.nvvm.sust.b.1d.v2i64.clamp
+    nvvm_sust_b_1d_v2i64_trap,                 // llvm.nvvm.sust.b.1d.v2i64.trap
+    nvvm_sust_b_1d_v2i64_zero,                 // llvm.nvvm.sust.b.1d.v2i64.zero
+    nvvm_sust_b_1d_v2i8_clamp,                 // llvm.nvvm.sust.b.1d.v2i8.clamp
+    nvvm_sust_b_1d_v2i8_trap,                  // llvm.nvvm.sust.b.1d.v2i8.trap
+    nvvm_sust_b_1d_v2i8_zero,                  // llvm.nvvm.sust.b.1d.v2i8.zero
+    nvvm_sust_b_1d_v4i16_clamp,                // llvm.nvvm.sust.b.1d.v4i16.clamp
+    nvvm_sust_b_1d_v4i16_trap,                 // llvm.nvvm.sust.b.1d.v4i16.trap
+    nvvm_sust_b_1d_v4i16_zero,                 // llvm.nvvm.sust.b.1d.v4i16.zero
+    nvvm_sust_b_1d_v4i32_clamp,                // llvm.nvvm.sust.b.1d.v4i32.clamp
+    nvvm_sust_b_1d_v4i32_trap,                 // llvm.nvvm.sust.b.1d.v4i32.trap
+    nvvm_sust_b_1d_v4i32_zero,                 // llvm.nvvm.sust.b.1d.v4i32.zero
+    nvvm_sust_b_1d_v4i8_clamp,                 // llvm.nvvm.sust.b.1d.v4i8.clamp
+    nvvm_sust_b_1d_v4i8_trap,                  // llvm.nvvm.sust.b.1d.v4i8.trap
+    nvvm_sust_b_1d_v4i8_zero,                  // llvm.nvvm.sust.b.1d.v4i8.zero
+    nvvm_sust_b_2d_array_i16_clamp,            // llvm.nvvm.sust.b.2d.array.i16.clamp
+    nvvm_sust_b_2d_array_i16_trap,             // llvm.nvvm.sust.b.2d.array.i16.trap
+    nvvm_sust_b_2d_array_i16_zero,             // llvm.nvvm.sust.b.2d.array.i16.zero
+    nvvm_sust_b_2d_array_i32_clamp,            // llvm.nvvm.sust.b.2d.array.i32.clamp
+    nvvm_sust_b_2d_array_i32_trap,             // llvm.nvvm.sust.b.2d.array.i32.trap
+    nvvm_sust_b_2d_array_i32_zero,             // llvm.nvvm.sust.b.2d.array.i32.zero
+    nvvm_sust_b_2d_array_i64_clamp,            // llvm.nvvm.sust.b.2d.array.i64.clamp
+    nvvm_sust_b_2d_array_i64_trap,             // llvm.nvvm.sust.b.2d.array.i64.trap
+    nvvm_sust_b_2d_array_i64_zero,             // llvm.nvvm.sust.b.2d.array.i64.zero
+    nvvm_sust_b_2d_array_i8_clamp,             // llvm.nvvm.sust.b.2d.array.i8.clamp
+    nvvm_sust_b_2d_array_i8_trap,              // llvm.nvvm.sust.b.2d.array.i8.trap
+    nvvm_sust_b_2d_array_i8_zero,              // llvm.nvvm.sust.b.2d.array.i8.zero
+    nvvm_sust_b_2d_array_v2i16_clamp,          // llvm.nvvm.sust.b.2d.array.v2i16.clamp
+    nvvm_sust_b_2d_array_v2i16_trap,           // llvm.nvvm.sust.b.2d.array.v2i16.trap
+    nvvm_sust_b_2d_array_v2i16_zero,           // llvm.nvvm.sust.b.2d.array.v2i16.zero
+    nvvm_sust_b_2d_array_v2i32_clamp,          // llvm.nvvm.sust.b.2d.array.v2i32.clamp
+    nvvm_sust_b_2d_array_v2i32_trap,           // llvm.nvvm.sust.b.2d.array.v2i32.trap
+    nvvm_sust_b_2d_array_v2i32_zero,           // llvm.nvvm.sust.b.2d.array.v2i32.zero
+    nvvm_sust_b_2d_array_v2i64_clamp,          // llvm.nvvm.sust.b.2d.array.v2i64.clamp
+    nvvm_sust_b_2d_array_v2i64_trap,           // llvm.nvvm.sust.b.2d.array.v2i64.trap
+    nvvm_sust_b_2d_array_v2i64_zero,           // llvm.nvvm.sust.b.2d.array.v2i64.zero
+    nvvm_sust_b_2d_array_v2i8_clamp,           // llvm.nvvm.sust.b.2d.array.v2i8.clamp
+    nvvm_sust_b_2d_array_v2i8_trap,            // llvm.nvvm.sust.b.2d.array.v2i8.trap
+    nvvm_sust_b_2d_array_v2i8_zero,            // llvm.nvvm.sust.b.2d.array.v2i8.zero
+    nvvm_sust_b_2d_array_v4i16_clamp,          // llvm.nvvm.sust.b.2d.array.v4i16.clamp
+    nvvm_sust_b_2d_array_v4i16_trap,           // llvm.nvvm.sust.b.2d.array.v4i16.trap
+    nvvm_sust_b_2d_array_v4i16_zero,           // llvm.nvvm.sust.b.2d.array.v4i16.zero
+    nvvm_sust_b_2d_array_v4i32_clamp,          // llvm.nvvm.sust.b.2d.array.v4i32.clamp
+    nvvm_sust_b_2d_array_v4i32_trap,           // llvm.nvvm.sust.b.2d.array.v4i32.trap
+    nvvm_sust_b_2d_array_v4i32_zero,           // llvm.nvvm.sust.b.2d.array.v4i32.zero
+    nvvm_sust_b_2d_array_v4i8_clamp,           // llvm.nvvm.sust.b.2d.array.v4i8.clamp
+    nvvm_sust_b_2d_array_v4i8_trap,            // llvm.nvvm.sust.b.2d.array.v4i8.trap
+    nvvm_sust_b_2d_array_v4i8_zero,            // llvm.nvvm.sust.b.2d.array.v4i8.zero
+    nvvm_sust_b_2d_i16_clamp,                  // llvm.nvvm.sust.b.2d.i16.clamp
+    nvvm_sust_b_2d_i16_trap,                   // llvm.nvvm.sust.b.2d.i16.trap
+    nvvm_sust_b_2d_i16_zero,                   // llvm.nvvm.sust.b.2d.i16.zero
+    nvvm_sust_b_2d_i32_clamp,                  // llvm.nvvm.sust.b.2d.i32.clamp
+    nvvm_sust_b_2d_i32_trap,                   // llvm.nvvm.sust.b.2d.i32.trap
+    nvvm_sust_b_2d_i32_zero,                   // llvm.nvvm.sust.b.2d.i32.zero
+    nvvm_sust_b_2d_i64_clamp,                  // llvm.nvvm.sust.b.2d.i64.clamp
+    nvvm_sust_b_2d_i64_trap,                   // llvm.nvvm.sust.b.2d.i64.trap
+    nvvm_sust_b_2d_i64_zero,                   // llvm.nvvm.sust.b.2d.i64.zero
+    nvvm_sust_b_2d_i8_clamp,                   // llvm.nvvm.sust.b.2d.i8.clamp
+    nvvm_sust_b_2d_i8_trap,                    // llvm.nvvm.sust.b.2d.i8.trap
+    nvvm_sust_b_2d_i8_zero,                    // llvm.nvvm.sust.b.2d.i8.zero
+    nvvm_sust_b_2d_v2i16_clamp,                // llvm.nvvm.sust.b.2d.v2i16.clamp
+    nvvm_sust_b_2d_v2i16_trap,                 // llvm.nvvm.sust.b.2d.v2i16.trap
+    nvvm_sust_b_2d_v2i16_zero,                 // llvm.nvvm.sust.b.2d.v2i16.zero
+    nvvm_sust_b_2d_v2i32_clamp,                // llvm.nvvm.sust.b.2d.v2i32.clamp
+    nvvm_sust_b_2d_v2i32_trap,                 // llvm.nvvm.sust.b.2d.v2i32.trap
+    nvvm_sust_b_2d_v2i32_zero,                 // llvm.nvvm.sust.b.2d.v2i32.zero
+    nvvm_sust_b_2d_v2i64_clamp,                // llvm.nvvm.sust.b.2d.v2i64.clamp
+    nvvm_sust_b_2d_v2i64_trap,                 // llvm.nvvm.sust.b.2d.v2i64.trap
+    nvvm_sust_b_2d_v2i64_zero,                 // llvm.nvvm.sust.b.2d.v2i64.zero
+    nvvm_sust_b_2d_v2i8_clamp,                 // llvm.nvvm.sust.b.2d.v2i8.clamp
+    nvvm_sust_b_2d_v2i8_trap,                  // llvm.nvvm.sust.b.2d.v2i8.trap
+    nvvm_sust_b_2d_v2i8_zero,                  // llvm.nvvm.sust.b.2d.v2i8.zero
+    nvvm_sust_b_2d_v4i16_clamp,                // llvm.nvvm.sust.b.2d.v4i16.clamp
+    nvvm_sust_b_2d_v4i16_trap,                 // llvm.nvvm.sust.b.2d.v4i16.trap
+    nvvm_sust_b_2d_v4i16_zero,                 // llvm.nvvm.sust.b.2d.v4i16.zero
+    nvvm_sust_b_2d_v4i32_clamp,                // llvm.nvvm.sust.b.2d.v4i32.clamp
+    nvvm_sust_b_2d_v4i32_trap,                 // llvm.nvvm.sust.b.2d.v4i32.trap
+    nvvm_sust_b_2d_v4i32_zero,                 // llvm.nvvm.sust.b.2d.v4i32.zero
+    nvvm_sust_b_2d_v4i8_clamp,                 // llvm.nvvm.sust.b.2d.v4i8.clamp
+    nvvm_sust_b_2d_v4i8_trap,                  // llvm.nvvm.sust.b.2d.v4i8.trap
+    nvvm_sust_b_2d_v4i8_zero,                  // llvm.nvvm.sust.b.2d.v4i8.zero
+    nvvm_sust_b_3d_i16_clamp,                  // llvm.nvvm.sust.b.3d.i16.clamp
+    nvvm_sust_b_3d_i16_trap,                   // llvm.nvvm.sust.b.3d.i16.trap
+    nvvm_sust_b_3d_i16_zero,                   // llvm.nvvm.sust.b.3d.i16.zero
+    nvvm_sust_b_3d_i32_clamp,                  // llvm.nvvm.sust.b.3d.i32.clamp
+    nvvm_sust_b_3d_i32_trap,                   // llvm.nvvm.sust.b.3d.i32.trap
+    nvvm_sust_b_3d_i32_zero,                   // llvm.nvvm.sust.b.3d.i32.zero
+    nvvm_sust_b_3d_i64_clamp,                  // llvm.nvvm.sust.b.3d.i64.clamp
+    nvvm_sust_b_3d_i64_trap,                   // llvm.nvvm.sust.b.3d.i64.trap
+    nvvm_sust_b_3d_i64_zero,                   // llvm.nvvm.sust.b.3d.i64.zero
+    nvvm_sust_b_3d_i8_clamp,                   // llvm.nvvm.sust.b.3d.i8.clamp
+    nvvm_sust_b_3d_i8_trap,                    // llvm.nvvm.sust.b.3d.i8.trap
+    nvvm_sust_b_3d_i8_zero,                    // llvm.nvvm.sust.b.3d.i8.zero
+    nvvm_sust_b_3d_v2i16_clamp,                // llvm.nvvm.sust.b.3d.v2i16.clamp
+    nvvm_sust_b_3d_v2i16_trap,                 // llvm.nvvm.sust.b.3d.v2i16.trap
+    nvvm_sust_b_3d_v2i16_zero,                 // llvm.nvvm.sust.b.3d.v2i16.zero
+    nvvm_sust_b_3d_v2i32_clamp,                // llvm.nvvm.sust.b.3d.v2i32.clamp
+    nvvm_sust_b_3d_v2i32_trap,                 // llvm.nvvm.sust.b.3d.v2i32.trap
+    nvvm_sust_b_3d_v2i32_zero,                 // llvm.nvvm.sust.b.3d.v2i32.zero
+    nvvm_sust_b_3d_v2i64_clamp,                // llvm.nvvm.sust.b.3d.v2i64.clamp
+    nvvm_sust_b_3d_v2i64_trap,                 // llvm.nvvm.sust.b.3d.v2i64.trap
+    nvvm_sust_b_3d_v2i64_zero,                 // llvm.nvvm.sust.b.3d.v2i64.zero
+    nvvm_sust_b_3d_v2i8_clamp,                 // llvm.nvvm.sust.b.3d.v2i8.clamp
+    nvvm_sust_b_3d_v2i8_trap,                  // llvm.nvvm.sust.b.3d.v2i8.trap
+    nvvm_sust_b_3d_v2i8_zero,                  // llvm.nvvm.sust.b.3d.v2i8.zero
+    nvvm_sust_b_3d_v4i16_clamp,                // llvm.nvvm.sust.b.3d.v4i16.clamp
+    nvvm_sust_b_3d_v4i16_trap,                 // llvm.nvvm.sust.b.3d.v4i16.trap
+    nvvm_sust_b_3d_v4i16_zero,                 // llvm.nvvm.sust.b.3d.v4i16.zero
+    nvvm_sust_b_3d_v4i32_clamp,                // llvm.nvvm.sust.b.3d.v4i32.clamp
+    nvvm_sust_b_3d_v4i32_trap,                 // llvm.nvvm.sust.b.3d.v4i32.trap
+    nvvm_sust_b_3d_v4i32_zero,                 // llvm.nvvm.sust.b.3d.v4i32.zero
+    nvvm_sust_b_3d_v4i8_clamp,                 // llvm.nvvm.sust.b.3d.v4i8.clamp
+    nvvm_sust_b_3d_v4i8_trap,                  // llvm.nvvm.sust.b.3d.v4i8.trap
+    nvvm_sust_b_3d_v4i8_zero,                  // llvm.nvvm.sust.b.3d.v4i8.zero
+    nvvm_sust_p_1d_array_i16_trap,             // llvm.nvvm.sust.p.1d.array.i16.trap
+    nvvm_sust_p_1d_array_i32_trap,             // llvm.nvvm.sust.p.1d.array.i32.trap
+    nvvm_sust_p_1d_array_i8_trap,              // llvm.nvvm.sust.p.1d.array.i8.trap
+    nvvm_sust_p_1d_array_v2i16_trap,           // llvm.nvvm.sust.p.1d.array.v2i16.trap
+    nvvm_sust_p_1d_array_v2i32_trap,           // llvm.nvvm.sust.p.1d.array.v2i32.trap
+    nvvm_sust_p_1d_array_v2i8_trap,            // llvm.nvvm.sust.p.1d.array.v2i8.trap
+    nvvm_sust_p_1d_array_v4i16_trap,           // llvm.nvvm.sust.p.1d.array.v4i16.trap
+    nvvm_sust_p_1d_array_v4i32_trap,           // llvm.nvvm.sust.p.1d.array.v4i32.trap
+    nvvm_sust_p_1d_array_v4i8_trap,            // llvm.nvvm.sust.p.1d.array.v4i8.trap
+    nvvm_sust_p_1d_i16_trap,                   // llvm.nvvm.sust.p.1d.i16.trap
+    nvvm_sust_p_1d_i32_trap,                   // llvm.nvvm.sust.p.1d.i32.trap
+    nvvm_sust_p_1d_i8_trap,                    // llvm.nvvm.sust.p.1d.i8.trap
+    nvvm_sust_p_1d_v2i16_trap,                 // llvm.nvvm.sust.p.1d.v2i16.trap
+    nvvm_sust_p_1d_v2i32_trap,                 // llvm.nvvm.sust.p.1d.v2i32.trap
+    nvvm_sust_p_1d_v2i8_trap,                  // llvm.nvvm.sust.p.1d.v2i8.trap
+    nvvm_sust_p_1d_v4i16_trap,                 // llvm.nvvm.sust.p.1d.v4i16.trap
+    nvvm_sust_p_1d_v4i32_trap,                 // llvm.nvvm.sust.p.1d.v4i32.trap
+    nvvm_sust_p_1d_v4i8_trap,                  // llvm.nvvm.sust.p.1d.v4i8.trap
+    nvvm_sust_p_2d_array_i16_trap,             // llvm.nvvm.sust.p.2d.array.i16.trap
+    nvvm_sust_p_2d_array_i32_trap,             // llvm.nvvm.sust.p.2d.array.i32.trap
+    nvvm_sust_p_2d_array_i8_trap,              // llvm.nvvm.sust.p.2d.array.i8.trap
+    nvvm_sust_p_2d_array_v2i16_trap,           // llvm.nvvm.sust.p.2d.array.v2i16.trap
+    nvvm_sust_p_2d_array_v2i32_trap,           // llvm.nvvm.sust.p.2d.array.v2i32.trap
+    nvvm_sust_p_2d_array_v2i8_trap,            // llvm.nvvm.sust.p.2d.array.v2i8.trap
+    nvvm_sust_p_2d_array_v4i16_trap,           // llvm.nvvm.sust.p.2d.array.v4i16.trap
+    nvvm_sust_p_2d_array_v4i32_trap,           // llvm.nvvm.sust.p.2d.array.v4i32.trap
+    nvvm_sust_p_2d_array_v4i8_trap,            // llvm.nvvm.sust.p.2d.array.v4i8.trap
+    nvvm_sust_p_2d_i16_trap,                   // llvm.nvvm.sust.p.2d.i16.trap
+    nvvm_sust_p_2d_i32_trap,                   // llvm.nvvm.sust.p.2d.i32.trap
+    nvvm_sust_p_2d_i8_trap,                    // llvm.nvvm.sust.p.2d.i8.trap
+    nvvm_sust_p_2d_v2i16_trap,                 // llvm.nvvm.sust.p.2d.v2i16.trap
+    nvvm_sust_p_2d_v2i32_trap,                 // llvm.nvvm.sust.p.2d.v2i32.trap
+    nvvm_sust_p_2d_v2i8_trap,                  // llvm.nvvm.sust.p.2d.v2i8.trap
+    nvvm_sust_p_2d_v4i16_trap,                 // llvm.nvvm.sust.p.2d.v4i16.trap
+    nvvm_sust_p_2d_v4i32_trap,                 // llvm.nvvm.sust.p.2d.v4i32.trap
+    nvvm_sust_p_2d_v4i8_trap,                  // llvm.nvvm.sust.p.2d.v4i8.trap
+    nvvm_sust_p_3d_i16_trap,                   // llvm.nvvm.sust.p.3d.i16.trap
+    nvvm_sust_p_3d_i32_trap,                   // llvm.nvvm.sust.p.3d.i32.trap
+    nvvm_sust_p_3d_i8_trap,                    // llvm.nvvm.sust.p.3d.i8.trap
+    nvvm_sust_p_3d_v2i16_trap,                 // llvm.nvvm.sust.p.3d.v2i16.trap
+    nvvm_sust_p_3d_v2i32_trap,                 // llvm.nvvm.sust.p.3d.v2i32.trap
+    nvvm_sust_p_3d_v2i8_trap,                  // llvm.nvvm.sust.p.3d.v2i8.trap
+    nvvm_sust_p_3d_v4i16_trap,                 // llvm.nvvm.sust.p.3d.v4i16.trap
+    nvvm_sust_p_3d_v4i32_trap,                 // llvm.nvvm.sust.p.3d.v4i32.trap
+    nvvm_sust_p_3d_v4i8_trap,                  // llvm.nvvm.sust.p.3d.v4i8.trap
+    nvvm_swap_lo_hi_b64,                       // llvm.nvvm.swap.lo.hi.b64
+    nvvm_tex_1d_array_grad_v4f32_f32,          // llvm.nvvm.tex.1d.array.grad.v4f32.f32
+    nvvm_tex_1d_array_grad_v4s32_f32,          // llvm.nvvm.tex.1d.array.grad.v4s32.f32
+    nvvm_tex_1d_array_grad_v4u32_f32,          // llvm.nvvm.tex.1d.array.grad.v4u32.f32
+    nvvm_tex_1d_array_level_v4f32_f32,         // llvm.nvvm.tex.1d.array.level.v4f32.f32
+    nvvm_tex_1d_array_level_v4s32_f32,         // llvm.nvvm.tex.1d.array.level.v4s32.f32
+    nvvm_tex_1d_array_level_v4u32_f32,         // llvm.nvvm.tex.1d.array.level.v4u32.f32
+    nvvm_tex_1d_array_v4f32_f32,               // llvm.nvvm.tex.1d.array.v4f32.f32
+    nvvm_tex_1d_array_v4f32_s32,               // llvm.nvvm.tex.1d.array.v4f32.s32
+    nvvm_tex_1d_array_v4s32_f32,               // llvm.nvvm.tex.1d.array.v4s32.f32
+    nvvm_tex_1d_array_v4s32_s32,               // llvm.nvvm.tex.1d.array.v4s32.s32
+    nvvm_tex_1d_array_v4u32_f32,               // llvm.nvvm.tex.1d.array.v4u32.f32
+    nvvm_tex_1d_array_v4u32_s32,               // llvm.nvvm.tex.1d.array.v4u32.s32
+    nvvm_tex_1d_grad_v4f32_f32,                // llvm.nvvm.tex.1d.grad.v4f32.f32
+    nvvm_tex_1d_grad_v4s32_f32,                // llvm.nvvm.tex.1d.grad.v4s32.f32
+    nvvm_tex_1d_grad_v4u32_f32,                // llvm.nvvm.tex.1d.grad.v4u32.f32
+    nvvm_tex_1d_level_v4f32_f32,               // llvm.nvvm.tex.1d.level.v4f32.f32
+    nvvm_tex_1d_level_v4s32_f32,               // llvm.nvvm.tex.1d.level.v4s32.f32
+    nvvm_tex_1d_level_v4u32_f32,               // llvm.nvvm.tex.1d.level.v4u32.f32
+    nvvm_tex_1d_v4f32_f32,                     // llvm.nvvm.tex.1d.v4f32.f32
+    nvvm_tex_1d_v4f32_s32,                     // llvm.nvvm.tex.1d.v4f32.s32
+    nvvm_tex_1d_v4s32_f32,                     // llvm.nvvm.tex.1d.v4s32.f32
+    nvvm_tex_1d_v4s32_s32,                     // llvm.nvvm.tex.1d.v4s32.s32
+    nvvm_tex_1d_v4u32_f32,                     // llvm.nvvm.tex.1d.v4u32.f32
+    nvvm_tex_1d_v4u32_s32,                     // llvm.nvvm.tex.1d.v4u32.s32
+    nvvm_tex_2d_array_grad_v4f32_f32,          // llvm.nvvm.tex.2d.array.grad.v4f32.f32
+    nvvm_tex_2d_array_grad_v4s32_f32,          // llvm.nvvm.tex.2d.array.grad.v4s32.f32
+    nvvm_tex_2d_array_grad_v4u32_f32,          // llvm.nvvm.tex.2d.array.grad.v4u32.f32
+    nvvm_tex_2d_array_level_v4f32_f32,         // llvm.nvvm.tex.2d.array.level.v4f32.f32
+    nvvm_tex_2d_array_level_v4s32_f32,         // llvm.nvvm.tex.2d.array.level.v4s32.f32
+    nvvm_tex_2d_array_level_v4u32_f32,         // llvm.nvvm.tex.2d.array.level.v4u32.f32
+    nvvm_tex_2d_array_v4f32_f32,               // llvm.nvvm.tex.2d.array.v4f32.f32
+    nvvm_tex_2d_array_v4f32_s32,               // llvm.nvvm.tex.2d.array.v4f32.s32
+    nvvm_tex_2d_array_v4s32_f32,               // llvm.nvvm.tex.2d.array.v4s32.f32
+    nvvm_tex_2d_array_v4s32_s32,               // llvm.nvvm.tex.2d.array.v4s32.s32
+    nvvm_tex_2d_array_v4u32_f32,               // llvm.nvvm.tex.2d.array.v4u32.f32
+    nvvm_tex_2d_array_v4u32_s32,               // llvm.nvvm.tex.2d.array.v4u32.s32
+    nvvm_tex_2d_grad_v4f32_f32,                // llvm.nvvm.tex.2d.grad.v4f32.f32
+    nvvm_tex_2d_grad_v4s32_f32,                // llvm.nvvm.tex.2d.grad.v4s32.f32
+    nvvm_tex_2d_grad_v4u32_f32,                // llvm.nvvm.tex.2d.grad.v4u32.f32
+    nvvm_tex_2d_level_v4f32_f32,               // llvm.nvvm.tex.2d.level.v4f32.f32
+    nvvm_tex_2d_level_v4s32_f32,               // llvm.nvvm.tex.2d.level.v4s32.f32
+    nvvm_tex_2d_level_v4u32_f32,               // llvm.nvvm.tex.2d.level.v4u32.f32
+    nvvm_tex_2d_v4f32_f32,                     // llvm.nvvm.tex.2d.v4f32.f32
+    nvvm_tex_2d_v4f32_s32,                     // llvm.nvvm.tex.2d.v4f32.s32
+    nvvm_tex_2d_v4s32_f32,                     // llvm.nvvm.tex.2d.v4s32.f32
+    nvvm_tex_2d_v4s32_s32,                     // llvm.nvvm.tex.2d.v4s32.s32
+    nvvm_tex_2d_v4u32_f32,                     // llvm.nvvm.tex.2d.v4u32.f32
+    nvvm_tex_2d_v4u32_s32,                     // llvm.nvvm.tex.2d.v4u32.s32
+    nvvm_tex_3d_grad_v4f32_f32,                // llvm.nvvm.tex.3d.grad.v4f32.f32
+    nvvm_tex_3d_grad_v4s32_f32,                // llvm.nvvm.tex.3d.grad.v4s32.f32
+    nvvm_tex_3d_grad_v4u32_f32,                // llvm.nvvm.tex.3d.grad.v4u32.f32
+    nvvm_tex_3d_level_v4f32_f32,               // llvm.nvvm.tex.3d.level.v4f32.f32
+    nvvm_tex_3d_level_v4s32_f32,               // llvm.nvvm.tex.3d.level.v4s32.f32
+    nvvm_tex_3d_level_v4u32_f32,               // llvm.nvvm.tex.3d.level.v4u32.f32
+    nvvm_tex_3d_v4f32_f32,                     // llvm.nvvm.tex.3d.v4f32.f32
+    nvvm_tex_3d_v4f32_s32,                     // llvm.nvvm.tex.3d.v4f32.s32
+    nvvm_tex_3d_v4s32_f32,                     // llvm.nvvm.tex.3d.v4s32.f32
+    nvvm_tex_3d_v4s32_s32,                     // llvm.nvvm.tex.3d.v4s32.s32
+    nvvm_tex_3d_v4u32_f32,                     // llvm.nvvm.tex.3d.v4u32.f32
+    nvvm_tex_3d_v4u32_s32,                     // llvm.nvvm.tex.3d.v4u32.s32
+    nvvm_tex_cube_array_level_v4f32_f32,       // llvm.nvvm.tex.cube.array.level.v4f32.f32
+    nvvm_tex_cube_array_level_v4s32_f32,       // llvm.nvvm.tex.cube.array.level.v4s32.f32
+    nvvm_tex_cube_array_level_v4u32_f32,       // llvm.nvvm.tex.cube.array.level.v4u32.f32
+    nvvm_tex_cube_array_v4f32_f32,             // llvm.nvvm.tex.cube.array.v4f32.f32
+    nvvm_tex_cube_array_v4s32_f32,             // llvm.nvvm.tex.cube.array.v4s32.f32
+    nvvm_tex_cube_array_v4u32_f32,             // llvm.nvvm.tex.cube.array.v4u32.f32
+    nvvm_tex_cube_level_v4f32_f32,             // llvm.nvvm.tex.cube.level.v4f32.f32
+    nvvm_tex_cube_level_v4s32_f32,             // llvm.nvvm.tex.cube.level.v4s32.f32
+    nvvm_tex_cube_level_v4u32_f32,             // llvm.nvvm.tex.cube.level.v4u32.f32
+    nvvm_tex_cube_v4f32_f32,                   // llvm.nvvm.tex.cube.v4f32.f32
+    nvvm_tex_cube_v4s32_f32,                   // llvm.nvvm.tex.cube.v4s32.f32
+    nvvm_tex_cube_v4u32_f32,                   // llvm.nvvm.tex.cube.v4u32.f32
+    nvvm_tex_unified_1d_array_grad_v4f32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32
+    nvvm_tex_unified_1d_array_grad_v4s32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32
+    nvvm_tex_unified_1d_array_grad_v4u32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32
+    nvvm_tex_unified_1d_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4f32.f32
+    nvvm_tex_unified_1d_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4s32.f32
+    nvvm_tex_unified_1d_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4u32.f32
+    nvvm_tex_unified_1d_array_v4f32_f32,       // llvm.nvvm.tex.unified.1d.array.v4f32.f32
+    nvvm_tex_unified_1d_array_v4f32_s32,       // llvm.nvvm.tex.unified.1d.array.v4f32.s32
+    nvvm_tex_unified_1d_array_v4s32_f32,       // llvm.nvvm.tex.unified.1d.array.v4s32.f32
+    nvvm_tex_unified_1d_array_v4s32_s32,       // llvm.nvvm.tex.unified.1d.array.v4s32.s32
+    nvvm_tex_unified_1d_array_v4u32_f32,       // llvm.nvvm.tex.unified.1d.array.v4u32.f32
+    nvvm_tex_unified_1d_array_v4u32_s32,       // llvm.nvvm.tex.unified.1d.array.v4u32.s32
+    nvvm_tex_unified_1d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4f32.f32
+    nvvm_tex_unified_1d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4s32.f32
+    nvvm_tex_unified_1d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4u32.f32
+    nvvm_tex_unified_1d_level_v4f32_f32,       // llvm.nvvm.tex.unified.1d.level.v4f32.f32
+    nvvm_tex_unified_1d_level_v4s32_f32,       // llvm.nvvm.tex.unified.1d.level.v4s32.f32
+    nvvm_tex_unified_1d_level_v4u32_f32,       // llvm.nvvm.tex.unified.1d.level.v4u32.f32
+    nvvm_tex_unified_1d_v4f32_f32,             // llvm.nvvm.tex.unified.1d.v4f32.f32
+    nvvm_tex_unified_1d_v4f32_s32,             // llvm.nvvm.tex.unified.1d.v4f32.s32
+    nvvm_tex_unified_1d_v4s32_f32,             // llvm.nvvm.tex.unified.1d.v4s32.f32
+    nvvm_tex_unified_1d_v4s32_s32,             // llvm.nvvm.tex.unified.1d.v4s32.s32
+    nvvm_tex_unified_1d_v4u32_f32,             // llvm.nvvm.tex.unified.1d.v4u32.f32
+    nvvm_tex_unified_1d_v4u32_s32,             // llvm.nvvm.tex.unified.1d.v4u32.s32
+    nvvm_tex_unified_2d_array_grad_v4f32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32
+    nvvm_tex_unified_2d_array_grad_v4s32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32
+    nvvm_tex_unified_2d_array_grad_v4u32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32
+    nvvm_tex_unified_2d_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4f32.f32
+    nvvm_tex_unified_2d_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4s32.f32
+    nvvm_tex_unified_2d_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4u32.f32
+    nvvm_tex_unified_2d_array_v4f32_f32,       // llvm.nvvm.tex.unified.2d.array.v4f32.f32
+    nvvm_tex_unified_2d_array_v4f32_s32,       // llvm.nvvm.tex.unified.2d.array.v4f32.s32
+    nvvm_tex_unified_2d_array_v4s32_f32,       // llvm.nvvm.tex.unified.2d.array.v4s32.f32
+    nvvm_tex_unified_2d_array_v4s32_s32,       // llvm.nvvm.tex.unified.2d.array.v4s32.s32
+    nvvm_tex_unified_2d_array_v4u32_f32,       // llvm.nvvm.tex.unified.2d.array.v4u32.f32
+    nvvm_tex_unified_2d_array_v4u32_s32,       // llvm.nvvm.tex.unified.2d.array.v4u32.s32
+    nvvm_tex_unified_2d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4f32.f32
+    nvvm_tex_unified_2d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4s32.f32
+    nvvm_tex_unified_2d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4u32.f32
+    nvvm_tex_unified_2d_level_v4f32_f32,       // llvm.nvvm.tex.unified.2d.level.v4f32.f32
+    nvvm_tex_unified_2d_level_v4s32_f32,       // llvm.nvvm.tex.unified.2d.level.v4s32.f32
+    nvvm_tex_unified_2d_level_v4u32_f32,       // llvm.nvvm.tex.unified.2d.level.v4u32.f32
+    nvvm_tex_unified_2d_v4f32_f32,             // llvm.nvvm.tex.unified.2d.v4f32.f32
+    nvvm_tex_unified_2d_v4f32_s32,             // llvm.nvvm.tex.unified.2d.v4f32.s32
+    nvvm_tex_unified_2d_v4s32_f32,             // llvm.nvvm.tex.unified.2d.v4s32.f32
+    nvvm_tex_unified_2d_v4s32_s32,             // llvm.nvvm.tex.unified.2d.v4s32.s32
+    nvvm_tex_unified_2d_v4u32_f32,             // llvm.nvvm.tex.unified.2d.v4u32.f32
+    nvvm_tex_unified_2d_v4u32_s32,             // llvm.nvvm.tex.unified.2d.v4u32.s32
+    nvvm_tex_unified_3d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4f32.f32
+    nvvm_tex_unified_3d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4s32.f32
+    nvvm_tex_unified_3d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4u32.f32
+    nvvm_tex_unified_3d_level_v4f32_f32,       // llvm.nvvm.tex.unified.3d.level.v4f32.f32
+    nvvm_tex_unified_3d_level_v4s32_f32,       // llvm.nvvm.tex.unified.3d.level.v4s32.f32
+    nvvm_tex_unified_3d_level_v4u32_f32,       // llvm.nvvm.tex.unified.3d.level.v4u32.f32
+    nvvm_tex_unified_3d_v4f32_f32,             // llvm.nvvm.tex.unified.3d.v4f32.f32
+    nvvm_tex_unified_3d_v4f32_s32,             // llvm.nvvm.tex.unified.3d.v4f32.s32
+    nvvm_tex_unified_3d_v4s32_f32,             // llvm.nvvm.tex.unified.3d.v4s32.f32
+    nvvm_tex_unified_3d_v4s32_s32,             // llvm.nvvm.tex.unified.3d.v4s32.s32
+    nvvm_tex_unified_3d_v4u32_f32,             // llvm.nvvm.tex.unified.3d.v4u32.f32
+    nvvm_tex_unified_3d_v4u32_s32,             // llvm.nvvm.tex.unified.3d.v4u32.s32
+    nvvm_tex_unified_cube_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4f32.f32
+    nvvm_tex_unified_cube_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4s32.f32
+    nvvm_tex_unified_cube_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4u32.f32
+    nvvm_tex_unified_cube_array_v4f32_f32,     // llvm.nvvm.tex.unified.cube.array.v4f32.f32
+    nvvm_tex_unified_cube_array_v4s32_f32,     // llvm.nvvm.tex.unified.cube.array.v4s32.f32
+    nvvm_tex_unified_cube_array_v4u32_f32,     // llvm.nvvm.tex.unified.cube.array.v4u32.f32
+    nvvm_tex_unified_cube_level_v4f32_f32,     // llvm.nvvm.tex.unified.cube.level.v4f32.f32
+    nvvm_tex_unified_cube_level_v4s32_f32,     // llvm.nvvm.tex.unified.cube.level.v4s32.f32
+    nvvm_tex_unified_cube_level_v4u32_f32,     // llvm.nvvm.tex.unified.cube.level.v4u32.f32
+    nvvm_tex_unified_cube_v4f32_f32,           // llvm.nvvm.tex.unified.cube.v4f32.f32
+    nvvm_tex_unified_cube_v4s32_f32,           // llvm.nvvm.tex.unified.cube.v4s32.f32
+    nvvm_tex_unified_cube_v4u32_f32,           // llvm.nvvm.tex.unified.cube.v4u32.f32
+    nvvm_texsurf_handle,                       // llvm.nvvm.texsurf.handle
+    nvvm_texsurf_handle_internal,              // llvm.nvvm.texsurf.handle.internal
+    nvvm_tld4_a_2d_v4f32_f32,                  // llvm.nvvm.tld4.a.2d.v4f32.f32
+    nvvm_tld4_a_2d_v4s32_f32,                  // llvm.nvvm.tld4.a.2d.v4s32.f32
+    nvvm_tld4_a_2d_v4u32_f32,                  // llvm.nvvm.tld4.a.2d.v4u32.f32
+    nvvm_tld4_b_2d_v4f32_f32,                  // llvm.nvvm.tld4.b.2d.v4f32.f32
+    nvvm_tld4_b_2d_v4s32_f32,                  // llvm.nvvm.tld4.b.2d.v4s32.f32
+    nvvm_tld4_b_2d_v4u32_f32,                  // llvm.nvvm.tld4.b.2d.v4u32.f32
+    nvvm_tld4_g_2d_v4f32_f32,                  // llvm.nvvm.tld4.g.2d.v4f32.f32
+    nvvm_tld4_g_2d_v4s32_f32,                  // llvm.nvvm.tld4.g.2d.v4s32.f32
+    nvvm_tld4_g_2d_v4u32_f32,                  // llvm.nvvm.tld4.g.2d.v4u32.f32
+    nvvm_tld4_r_2d_v4f32_f32,                  // llvm.nvvm.tld4.r.2d.v4f32.f32
+    nvvm_tld4_r_2d_v4s32_f32,                  // llvm.nvvm.tld4.r.2d.v4s32.f32
+    nvvm_tld4_r_2d_v4u32_f32,                  // llvm.nvvm.tld4.r.2d.v4u32.f32
+    nvvm_tld4_unified_a_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4f32.f32
+    nvvm_tld4_unified_a_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4s32.f32
+    nvvm_tld4_unified_a_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4u32.f32
+    nvvm_tld4_unified_b_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4f32.f32
+    nvvm_tld4_unified_b_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4s32.f32
+    nvvm_tld4_unified_b_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4u32.f32
+    nvvm_tld4_unified_g_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4f32.f32
+    nvvm_tld4_unified_g_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4s32.f32
+    nvvm_tld4_unified_g_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4u32.f32
+    nvvm_tld4_unified_r_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4f32.f32
+    nvvm_tld4_unified_r_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4s32.f32
+    nvvm_tld4_unified_r_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4u32.f32
+    nvvm_trunc_d,                              // llvm.nvvm.trunc.d
+    nvvm_trunc_f,                              // llvm.nvvm.trunc.f
+    nvvm_trunc_ftz_f,                          // llvm.nvvm.trunc.ftz.f
+    nvvm_txq_array_size,                       // llvm.nvvm.txq.array.size
+    nvvm_txq_channel_data_type,                // llvm.nvvm.txq.channel.data.type
+    nvvm_txq_channel_order,                    // llvm.nvvm.txq.channel.order
+    nvvm_txq_depth,                            // llvm.nvvm.txq.depth
+    nvvm_txq_height,                           // llvm.nvvm.txq.height
+    nvvm_txq_num_mipmap_levels,                // llvm.nvvm.txq.num.mipmap.levels
+    nvvm_txq_num_samples,                      // llvm.nvvm.txq.num.samples
+    nvvm_txq_width,                            // llvm.nvvm.txq.width
+    nvvm_ui2d_rm,                              // llvm.nvvm.ui2d.rm
+    nvvm_ui2d_rn,                              // llvm.nvvm.ui2d.rn
+    nvvm_ui2d_rp,                              // llvm.nvvm.ui2d.rp
+    nvvm_ui2d_rz,                              // llvm.nvvm.ui2d.rz
+    nvvm_ui2f_rm,                              // llvm.nvvm.ui2f.rm
+    nvvm_ui2f_rn,                              // llvm.nvvm.ui2f.rn
+    nvvm_ui2f_rp,                              // llvm.nvvm.ui2f.rp
+    nvvm_ui2f_rz,                              // llvm.nvvm.ui2f.rz
+    nvvm_ull2d_rm,                             // llvm.nvvm.ull2d.rm
+    nvvm_ull2d_rn,                             // llvm.nvvm.ull2d.rn
+    nvvm_ull2d_rp,                             // llvm.nvvm.ull2d.rp
+    nvvm_ull2d_rz,                             // llvm.nvvm.ull2d.rz
+    nvvm_ull2f_rm,                             // llvm.nvvm.ull2f.rm
+    nvvm_ull2f_rn,                             // llvm.nvvm.ull2f.rn
+    nvvm_ull2f_rp,                             // llvm.nvvm.ull2f.rp
+    nvvm_ull2f_rz,                             // llvm.nvvm.ull2f.rz
+    nvvm_vote_all,                             // llvm.nvvm.vote.all
+    nvvm_vote_all_sync,                        // llvm.nvvm.vote.all.sync
+    nvvm_vote_any,                             // llvm.nvvm.vote.any
+    nvvm_vote_any_sync,                        // llvm.nvvm.vote.any.sync
+    nvvm_vote_ballot,                          // llvm.nvvm.vote.ballot
+    nvvm_vote_ballot_sync,                     // llvm.nvvm.vote.ballot.sync
+    nvvm_vote_uni,                             // llvm.nvvm.vote.uni
+    nvvm_vote_uni_sync,                        // llvm.nvvm.vote.uni.sync
+    nvvm_wmma_m16n16k16_load_a_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
+    nvvm_wmma_m16n16k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
+    nvvm_wmma_m16n16k16_load_a_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
+    nvvm_wmma_m16n16k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
+    nvvm_wmma_m16n16k16_load_b_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
+    nvvm_wmma_m16n16k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
+    nvvm_wmma_m16n16k16_load_b_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
+    nvvm_wmma_m16n16k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
+    nvvm_wmma_m16n16k16_load_c_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
+    nvvm_wmma_m16n16k16_load_c_f32_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
+    nvvm_wmma_m16n16k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
+    nvvm_wmma_m16n16k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
+    nvvm_wmma_m16n16k16_load_c_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
+    nvvm_wmma_m16n16k16_load_c_f32_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
+    nvvm_wmma_m16n16k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
+    nvvm_wmma_m16n16k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
+    nvvm_wmma_m16n16k16_mma_col_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
+    nvvm_wmma_m16n16k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_col_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
+    nvvm_wmma_m16n16k16_mma_col_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_col_col_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16
+    nvvm_wmma_m16n16k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_col_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
+    nvvm_wmma_m16n16k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
+    nvvm_wmma_m16n16k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
+    nvvm_wmma_m16n16k16_mma_col_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16
+    nvvm_wmma_m16n16k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_col_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
+    nvvm_wmma_m16n16k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
+    nvvm_wmma_m16n16k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
+    nvvm_wmma_m16n16k16_mma_row_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16
+    nvvm_wmma_m16n16k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_row_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
+    nvvm_wmma_m16n16k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
+    nvvm_wmma_m16n16k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
+    nvvm_wmma_m16n16k16_mma_row_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16
+    nvvm_wmma_m16n16k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
+    nvvm_wmma_m16n16k16_mma_row_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
+    nvvm_wmma_m16n16k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m16n16k16_store_d_f16_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
+    nvvm_wmma_m16n16k16_store_d_f32_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
+    nvvm_wmma_m16n16k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
+    nvvm_wmma_m16n16k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
+    nvvm_wmma_m16n16k16_store_d_f16_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
+    nvvm_wmma_m16n16k16_store_d_f32_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
+    nvvm_wmma_m16n16k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
+    nvvm_wmma_m16n16k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
+    nvvm_wmma_m32n8k16_load_a_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.a.col.f16
+    nvvm_wmma_m32n8k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16
+    nvvm_wmma_m32n8k16_load_a_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.a.row.f16
+    nvvm_wmma_m32n8k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16
+    nvvm_wmma_m32n8k16_load_b_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.b.col.f16
+    nvvm_wmma_m32n8k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16
+    nvvm_wmma_m32n8k16_load_b_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.b.row.f16
+    nvvm_wmma_m32n8k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16
+    nvvm_wmma_m32n8k16_load_c_f16_col,         // llvm.nvvm.wmma.m32n8k16.load.c.col.f16
+    nvvm_wmma_m32n8k16_load_c_f32_col,         // llvm.nvvm.wmma.m32n8k16.load.c.col.f32
+    nvvm_wmma_m32n8k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16
+    nvvm_wmma_m32n8k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32
+    nvvm_wmma_m32n8k16_load_c_f16_row,         // llvm.nvvm.wmma.m32n8k16.load.c.row.f16
+    nvvm_wmma_m32n8k16_load_c_f32_row,         // llvm.nvvm.wmma.m32n8k16.load.c.row.f32
+    nvvm_wmma_m32n8k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16
+    nvvm_wmma_m32n8k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32
+    nvvm_wmma_m32n8k16_mma_col_col_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16
+    nvvm_wmma_m32n8k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_col_col_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32
+    nvvm_wmma_m32n8k16_mma_col_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_col_col_f32_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16
+    nvvm_wmma_m32n8k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_col_col_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32
+    nvvm_wmma_m32n8k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16
+    nvvm_wmma_m32n8k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32
+    nvvm_wmma_m32n8k16_mma_col_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_f32_f16,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16
+    nvvm_wmma_m32n8k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_col_row_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32
+    nvvm_wmma_m32n8k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16
+    nvvm_wmma_m32n8k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32
+    nvvm_wmma_m32n8k16_mma_row_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_f32_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16
+    nvvm_wmma_m32n8k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_row_col_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32
+    nvvm_wmma_m32n8k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_f16_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16
+    nvvm_wmma_m32n8k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_f16_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32
+    nvvm_wmma_m32n8k16_mma_row_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_f32_f16,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16
+    nvvm_wmma_m32n8k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite
+    nvvm_wmma_m32n8k16_mma_row_row_f32_f32,    // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32
+    nvvm_wmma_m32n8k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m32n8k16_store_d_f16_col,        // llvm.nvvm.wmma.m32n8k16.store.d.col.f16
+    nvvm_wmma_m32n8k16_store_d_f32_col,        // llvm.nvvm.wmma.m32n8k16.store.d.col.f32
+    nvvm_wmma_m32n8k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16
+    nvvm_wmma_m32n8k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32
+    nvvm_wmma_m32n8k16_store_d_f16_row,        // llvm.nvvm.wmma.m32n8k16.store.d.row.f16
+    nvvm_wmma_m32n8k16_store_d_f32_row,        // llvm.nvvm.wmma.m32n8k16.store.d.row.f32
+    nvvm_wmma_m32n8k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16
+    nvvm_wmma_m32n8k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32
+    nvvm_wmma_m8n32k16_load_a_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.a.col.f16
+    nvvm_wmma_m8n32k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16
+    nvvm_wmma_m8n32k16_load_a_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.a.row.f16
+    nvvm_wmma_m8n32k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16
+    nvvm_wmma_m8n32k16_load_b_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.b.col.f16
+    nvvm_wmma_m8n32k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16
+    nvvm_wmma_m8n32k16_load_b_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.b.row.f16
+    nvvm_wmma_m8n32k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16
+    nvvm_wmma_m8n32k16_load_c_f16_col,         // llvm.nvvm.wmma.m8n32k16.load.c.col.f16
+    nvvm_wmma_m8n32k16_load_c_f32_col,         // llvm.nvvm.wmma.m8n32k16.load.c.col.f32
+    nvvm_wmma_m8n32k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16
+    nvvm_wmma_m8n32k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32
+    nvvm_wmma_m8n32k16_load_c_f16_row,         // llvm.nvvm.wmma.m8n32k16.load.c.row.f16
+    nvvm_wmma_m8n32k16_load_c_f32_row,         // llvm.nvvm.wmma.m8n32k16.load.c.row.f32
+    nvvm_wmma_m8n32k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16
+    nvvm_wmma_m8n32k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32
+    nvvm_wmma_m8n32k16_mma_col_col_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16
+    nvvm_wmma_m8n32k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_col_col_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32
+    nvvm_wmma_m8n32k16_mma_col_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_col_col_f32_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16
+    nvvm_wmma_m8n32k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_col_col_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32
+    nvvm_wmma_m8n32k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16
+    nvvm_wmma_m8n32k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32
+    nvvm_wmma_m8n32k16_mma_col_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_f32_f16,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16
+    nvvm_wmma_m8n32k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_col_row_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32
+    nvvm_wmma_m8n32k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16
+    nvvm_wmma_m8n32k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32
+    nvvm_wmma_m8n32k16_mma_row_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_f32_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16
+    nvvm_wmma_m8n32k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_row_col_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32
+    nvvm_wmma_m8n32k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_f16_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16
+    nvvm_wmma_m8n32k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_f16_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32
+    nvvm_wmma_m8n32k16_mma_row_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_f32_f16,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16
+    nvvm_wmma_m8n32k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite
+    nvvm_wmma_m8n32k16_mma_row_row_f32_f32,    // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32
+    nvvm_wmma_m8n32k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite
+    nvvm_wmma_m8n32k16_store_d_f16_col,        // llvm.nvvm.wmma.m8n32k16.store.d.col.f16
+    nvvm_wmma_m8n32k16_store_d_f32_col,        // llvm.nvvm.wmma.m8n32k16.store.d.col.f32
+    nvvm_wmma_m8n32k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16
+    nvvm_wmma_m8n32k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32
+    nvvm_wmma_m8n32k16_store_d_f16_row,        // llvm.nvvm.wmma.m8n32k16.store.d.row.f16
+    nvvm_wmma_m8n32k16_store_d_f32_row,        // llvm.nvvm.wmma.m8n32k16.store.d.row.f32
+    nvvm_wmma_m8n32k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16
+    nvvm_wmma_m8n32k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32
+    ppc_addf128_round_to_odd,                  // llvm.ppc.addf128.round.to.odd
+    ppc_altivec_crypto_vcipher,                // llvm.ppc.altivec.crypto.vcipher
+    ppc_altivec_crypto_vcipherlast,            // llvm.ppc.altivec.crypto.vcipherlast
+    ppc_altivec_crypto_vncipher,               // llvm.ppc.altivec.crypto.vncipher
+    ppc_altivec_crypto_vncipherlast,           // llvm.ppc.altivec.crypto.vncipherlast
+    ppc_altivec_crypto_vpermxor,               // llvm.ppc.altivec.crypto.vpermxor
+    ppc_altivec_crypto_vpmsumb,                // llvm.ppc.altivec.crypto.vpmsumb
+    ppc_altivec_crypto_vpmsumd,                // llvm.ppc.altivec.crypto.vpmsumd
+    ppc_altivec_crypto_vpmsumh,                // llvm.ppc.altivec.crypto.vpmsumh
+    ppc_altivec_crypto_vpmsumw,                // llvm.ppc.altivec.crypto.vpmsumw
+    ppc_altivec_crypto_vsbox,                  // llvm.ppc.altivec.crypto.vsbox
+    ppc_altivec_crypto_vshasigmad,             // llvm.ppc.altivec.crypto.vshasigmad
+    ppc_altivec_crypto_vshasigmaw,             // llvm.ppc.altivec.crypto.vshasigmaw
+    ppc_altivec_dss,                           // llvm.ppc.altivec.dss
+    ppc_altivec_dssall,                        // llvm.ppc.altivec.dssall
+    ppc_altivec_dst,                           // llvm.ppc.altivec.dst
+    ppc_altivec_dstst,                         // llvm.ppc.altivec.dstst
+    ppc_altivec_dststt,                        // llvm.ppc.altivec.dststt
+    ppc_altivec_dstt,                          // llvm.ppc.altivec.dstt
+    ppc_altivec_lvebx,                         // llvm.ppc.altivec.lvebx
+    ppc_altivec_lvehx,                         // llvm.ppc.altivec.lvehx
+    ppc_altivec_lvewx,                         // llvm.ppc.altivec.lvewx
+    ppc_altivec_lvsl,                          // llvm.ppc.altivec.lvsl
+    ppc_altivec_lvsr,                          // llvm.ppc.altivec.lvsr
+    ppc_altivec_lvx,                           // llvm.ppc.altivec.lvx
+    ppc_altivec_lvxl,                          // llvm.ppc.altivec.lvxl
+    ppc_altivec_mfvscr,                        // llvm.ppc.altivec.mfvscr
+    ppc_altivec_mtvscr,                        // llvm.ppc.altivec.mtvscr
+    ppc_altivec_stvebx,                        // llvm.ppc.altivec.stvebx
+    ppc_altivec_stvehx,                        // llvm.ppc.altivec.stvehx
+    ppc_altivec_stvewx,                        // llvm.ppc.altivec.stvewx
+    ppc_altivec_stvx,                          // llvm.ppc.altivec.stvx
+    ppc_altivec_stvxl,                         // llvm.ppc.altivec.stvxl
+    ppc_altivec_vabsdub,                       // llvm.ppc.altivec.vabsdub
+    ppc_altivec_vabsduh,                       // llvm.ppc.altivec.vabsduh
+    ppc_altivec_vabsduw,                       // llvm.ppc.altivec.vabsduw
+    ppc_altivec_vaddcuq,                       // llvm.ppc.altivec.vaddcuq
+    ppc_altivec_vaddcuw,                       // llvm.ppc.altivec.vaddcuw
+    ppc_altivec_vaddecuq,                      // llvm.ppc.altivec.vaddecuq
+    ppc_altivec_vaddeuqm,                      // llvm.ppc.altivec.vaddeuqm
+    ppc_altivec_vaddsbs,                       // llvm.ppc.altivec.vaddsbs
+    ppc_altivec_vaddshs,                       // llvm.ppc.altivec.vaddshs
+    ppc_altivec_vaddsws,                       // llvm.ppc.altivec.vaddsws
+    ppc_altivec_vaddubs,                       // llvm.ppc.altivec.vaddubs
+    ppc_altivec_vadduhs,                       // llvm.ppc.altivec.vadduhs
+    ppc_altivec_vadduws,                       // llvm.ppc.altivec.vadduws
+    ppc_altivec_vavgsb,                        // llvm.ppc.altivec.vavgsb
+    ppc_altivec_vavgsh,                        // llvm.ppc.altivec.vavgsh
+    ppc_altivec_vavgsw,                        // llvm.ppc.altivec.vavgsw
+    ppc_altivec_vavgub,                        // llvm.ppc.altivec.vavgub
+    ppc_altivec_vavguh,                        // llvm.ppc.altivec.vavguh
+    ppc_altivec_vavguw,                        // llvm.ppc.altivec.vavguw
+    ppc_altivec_vbpermq,                       // llvm.ppc.altivec.vbpermq
+    ppc_altivec_vcfsx,                         // llvm.ppc.altivec.vcfsx
+    ppc_altivec_vcfux,                         // llvm.ppc.altivec.vcfux
+    ppc_altivec_vclzlsbb,                      // llvm.ppc.altivec.vclzlsbb
+    ppc_altivec_vcmpbfp,                       // llvm.ppc.altivec.vcmpbfp
+    ppc_altivec_vcmpbfp_p,                     // llvm.ppc.altivec.vcmpbfp.p
+    ppc_altivec_vcmpeqfp,                      // llvm.ppc.altivec.vcmpeqfp
+    ppc_altivec_vcmpeqfp_p,                    // llvm.ppc.altivec.vcmpeqfp.p
+    ppc_altivec_vcmpequb,                      // llvm.ppc.altivec.vcmpequb
+    ppc_altivec_vcmpequb_p,                    // llvm.ppc.altivec.vcmpequb.p
+    ppc_altivec_vcmpequd,                      // llvm.ppc.altivec.vcmpequd
+    ppc_altivec_vcmpequd_p,                    // llvm.ppc.altivec.vcmpequd.p
+    ppc_altivec_vcmpequh,                      // llvm.ppc.altivec.vcmpequh
+    ppc_altivec_vcmpequh_p,                    // llvm.ppc.altivec.vcmpequh.p
+    ppc_altivec_vcmpequw,                      // llvm.ppc.altivec.vcmpequw
+    ppc_altivec_vcmpequw_p,                    // llvm.ppc.altivec.vcmpequw.p
+    ppc_altivec_vcmpgefp,                      // llvm.ppc.altivec.vcmpgefp
+    ppc_altivec_vcmpgefp_p,                    // llvm.ppc.altivec.vcmpgefp.p
+    ppc_altivec_vcmpgtfp,                      // llvm.ppc.altivec.vcmpgtfp
+    ppc_altivec_vcmpgtfp_p,                    // llvm.ppc.altivec.vcmpgtfp.p
+    ppc_altivec_vcmpgtsb,                      // llvm.ppc.altivec.vcmpgtsb
+    ppc_altivec_vcmpgtsb_p,                    // llvm.ppc.altivec.vcmpgtsb.p
+    ppc_altivec_vcmpgtsd,                      // llvm.ppc.altivec.vcmpgtsd
+    ppc_altivec_vcmpgtsd_p,                    // llvm.ppc.altivec.vcmpgtsd.p
+    ppc_altivec_vcmpgtsh,                      // llvm.ppc.altivec.vcmpgtsh
+    ppc_altivec_vcmpgtsh_p,                    // llvm.ppc.altivec.vcmpgtsh.p
+    ppc_altivec_vcmpgtsw,                      // llvm.ppc.altivec.vcmpgtsw
+    ppc_altivec_vcmpgtsw_p,                    // llvm.ppc.altivec.vcmpgtsw.p
+    ppc_altivec_vcmpgtub,                      // llvm.ppc.altivec.vcmpgtub
+    ppc_altivec_vcmpgtub_p,                    // llvm.ppc.altivec.vcmpgtub.p
+    ppc_altivec_vcmpgtud,                      // llvm.ppc.altivec.vcmpgtud
+    ppc_altivec_vcmpgtud_p,                    // llvm.ppc.altivec.vcmpgtud.p
+    ppc_altivec_vcmpgtuh,                      // llvm.ppc.altivec.vcmpgtuh
+    ppc_altivec_vcmpgtuh_p,                    // llvm.ppc.altivec.vcmpgtuh.p
+    ppc_altivec_vcmpgtuw,                      // llvm.ppc.altivec.vcmpgtuw
+    ppc_altivec_vcmpgtuw_p,                    // llvm.ppc.altivec.vcmpgtuw.p
+    ppc_altivec_vcmpneb,                       // llvm.ppc.altivec.vcmpneb
+    ppc_altivec_vcmpneb_p,                     // llvm.ppc.altivec.vcmpneb.p
+    ppc_altivec_vcmpneh,                       // llvm.ppc.altivec.vcmpneh
+    ppc_altivec_vcmpneh_p,                     // llvm.ppc.altivec.vcmpneh.p
+    ppc_altivec_vcmpnew,                       // llvm.ppc.altivec.vcmpnew
+    ppc_altivec_vcmpnew_p,                     // llvm.ppc.altivec.vcmpnew.p
+    ppc_altivec_vcmpnezb,                      // llvm.ppc.altivec.vcmpnezb
+    ppc_altivec_vcmpnezb_p,                    // llvm.ppc.altivec.vcmpnezb.p
+    ppc_altivec_vcmpnezh,                      // llvm.ppc.altivec.vcmpnezh
+    ppc_altivec_vcmpnezh_p,                    // llvm.ppc.altivec.vcmpnezh.p
+    ppc_altivec_vcmpnezw,                      // llvm.ppc.altivec.vcmpnezw
+    ppc_altivec_vcmpnezw_p,                    // llvm.ppc.altivec.vcmpnezw.p
+    ppc_altivec_vctsxs,                        // llvm.ppc.altivec.vctsxs
+    ppc_altivec_vctuxs,                        // llvm.ppc.altivec.vctuxs
+    ppc_altivec_vctzlsbb,                      // llvm.ppc.altivec.vctzlsbb
+    ppc_altivec_vexptefp,                      // llvm.ppc.altivec.vexptefp
+    ppc_altivec_vgbbd,                         // llvm.ppc.altivec.vgbbd
+    ppc_altivec_vlogefp,                       // llvm.ppc.altivec.vlogefp
+    ppc_altivec_vmaddfp,                       // llvm.ppc.altivec.vmaddfp
+    ppc_altivec_vmaxfp,                        // llvm.ppc.altivec.vmaxfp
+    ppc_altivec_vmaxsb,                        // llvm.ppc.altivec.vmaxsb
+    ppc_altivec_vmaxsd,                        // llvm.ppc.altivec.vmaxsd
+    ppc_altivec_vmaxsh,                        // llvm.ppc.altivec.vmaxsh
+    ppc_altivec_vmaxsw,                        // llvm.ppc.altivec.vmaxsw
+    ppc_altivec_vmaxub,                        // llvm.ppc.altivec.vmaxub
+    ppc_altivec_vmaxud,                        // llvm.ppc.altivec.vmaxud
+    ppc_altivec_vmaxuh,                        // llvm.ppc.altivec.vmaxuh
+    ppc_altivec_vmaxuw,                        // llvm.ppc.altivec.vmaxuw
+    ppc_altivec_vmhaddshs,                     // llvm.ppc.altivec.vmhaddshs
+    ppc_altivec_vmhraddshs,                    // llvm.ppc.altivec.vmhraddshs
+    ppc_altivec_vminfp,                        // llvm.ppc.altivec.vminfp
+    ppc_altivec_vminsb,                        // llvm.ppc.altivec.vminsb
+    ppc_altivec_vminsd,                        // llvm.ppc.altivec.vminsd
+    ppc_altivec_vminsh,                        // llvm.ppc.altivec.vminsh
+    ppc_altivec_vminsw,                        // llvm.ppc.altivec.vminsw
+    ppc_altivec_vminub,                        // llvm.ppc.altivec.vminub
+    ppc_altivec_vminud,                        // llvm.ppc.altivec.vminud
+    ppc_altivec_vminuh,                        // llvm.ppc.altivec.vminuh
+    ppc_altivec_vminuw,                        // llvm.ppc.altivec.vminuw
+    ppc_altivec_vmladduhm,                     // llvm.ppc.altivec.vmladduhm
+    ppc_altivec_vmsummbm,                      // llvm.ppc.altivec.vmsummbm
+    ppc_altivec_vmsumshm,                      // llvm.ppc.altivec.vmsumshm
+    ppc_altivec_vmsumshs,                      // llvm.ppc.altivec.vmsumshs
+    ppc_altivec_vmsumubm,                      // llvm.ppc.altivec.vmsumubm
+    ppc_altivec_vmsumuhm,                      // llvm.ppc.altivec.vmsumuhm
+    ppc_altivec_vmsumuhs,                      // llvm.ppc.altivec.vmsumuhs
+    ppc_altivec_vmulesb,                       // llvm.ppc.altivec.vmulesb
+    ppc_altivec_vmulesh,                       // llvm.ppc.altivec.vmulesh
+    ppc_altivec_vmulesw,                       // llvm.ppc.altivec.vmulesw
+    ppc_altivec_vmuleub,                       // llvm.ppc.altivec.vmuleub
+    ppc_altivec_vmuleuh,                       // llvm.ppc.altivec.vmuleuh
+    ppc_altivec_vmuleuw,                       // llvm.ppc.altivec.vmuleuw
+    ppc_altivec_vmulosb,                       // llvm.ppc.altivec.vmulosb
+    ppc_altivec_vmulosh,                       // llvm.ppc.altivec.vmulosh
+    ppc_altivec_vmulosw,                       // llvm.ppc.altivec.vmulosw
+    ppc_altivec_vmuloub,                       // llvm.ppc.altivec.vmuloub
+    ppc_altivec_vmulouh,                       // llvm.ppc.altivec.vmulouh
+    ppc_altivec_vmulouw,                       // llvm.ppc.altivec.vmulouw
+    ppc_altivec_vnmsubfp,                      // llvm.ppc.altivec.vnmsubfp
+    ppc_altivec_vperm,                         // llvm.ppc.altivec.vperm
+    ppc_altivec_vpkpx,                         // llvm.ppc.altivec.vpkpx
+    ppc_altivec_vpksdss,                       // llvm.ppc.altivec.vpksdss
+    ppc_altivec_vpksdus,                       // llvm.ppc.altivec.vpksdus
+    ppc_altivec_vpkshss,                       // llvm.ppc.altivec.vpkshss
+    ppc_altivec_vpkshus,                       // llvm.ppc.altivec.vpkshus
+    ppc_altivec_vpkswss,                       // llvm.ppc.altivec.vpkswss
+    ppc_altivec_vpkswus,                       // llvm.ppc.altivec.vpkswus
+    ppc_altivec_vpkudus,                       // llvm.ppc.altivec.vpkudus
+    ppc_altivec_vpkuhus,                       // llvm.ppc.altivec.vpkuhus
+    ppc_altivec_vpkuwus,                       // llvm.ppc.altivec.vpkuwus
+    ppc_altivec_vprtybd,                       // llvm.ppc.altivec.vprtybd
+    ppc_altivec_vprtybq,                       // llvm.ppc.altivec.vprtybq
+    ppc_altivec_vprtybw,                       // llvm.ppc.altivec.vprtybw
+    ppc_altivec_vrefp,                         // llvm.ppc.altivec.vrefp
+    ppc_altivec_vrfim,                         // llvm.ppc.altivec.vrfim
+    ppc_altivec_vrfin,                         // llvm.ppc.altivec.vrfin
+    ppc_altivec_vrfip,                         // llvm.ppc.altivec.vrfip
+    ppc_altivec_vrfiz,                         // llvm.ppc.altivec.vrfiz
+    ppc_altivec_vrlb,                          // llvm.ppc.altivec.vrlb
+    ppc_altivec_vrld,                          // llvm.ppc.altivec.vrld
+    ppc_altivec_vrldmi,                        // llvm.ppc.altivec.vrldmi
+    ppc_altivec_vrldnm,                        // llvm.ppc.altivec.vrldnm
+    ppc_altivec_vrlh,                          // llvm.ppc.altivec.vrlh
+    ppc_altivec_vrlw,                          // llvm.ppc.altivec.vrlw
+    ppc_altivec_vrlwmi,                        // llvm.ppc.altivec.vrlwmi
+    ppc_altivec_vrlwnm,                        // llvm.ppc.altivec.vrlwnm
+    ppc_altivec_vrsqrtefp,                     // llvm.ppc.altivec.vrsqrtefp
+    ppc_altivec_vsel,                          // llvm.ppc.altivec.vsel
+    ppc_altivec_vsl,                           // llvm.ppc.altivec.vsl
+    ppc_altivec_vslb,                          // llvm.ppc.altivec.vslb
+    ppc_altivec_vslh,                          // llvm.ppc.altivec.vslh
+    ppc_altivec_vslo,                          // llvm.ppc.altivec.vslo
+    ppc_altivec_vslv,                          // llvm.ppc.altivec.vslv
+    ppc_altivec_vslw,                          // llvm.ppc.altivec.vslw
+    ppc_altivec_vsr,                           // llvm.ppc.altivec.vsr
+    ppc_altivec_vsrab,                         // llvm.ppc.altivec.vsrab
+    ppc_altivec_vsrah,                         // llvm.ppc.altivec.vsrah
+    ppc_altivec_vsraw,                         // llvm.ppc.altivec.vsraw
+    ppc_altivec_vsrb,                          // llvm.ppc.altivec.vsrb
+    ppc_altivec_vsrh,                          // llvm.ppc.altivec.vsrh
+    ppc_altivec_vsro,                          // llvm.ppc.altivec.vsro
+    ppc_altivec_vsrv,                          // llvm.ppc.altivec.vsrv
+    ppc_altivec_vsrw,                          // llvm.ppc.altivec.vsrw
+    ppc_altivec_vsubcuq,                       // llvm.ppc.altivec.vsubcuq
+    ppc_altivec_vsubcuw,                       // llvm.ppc.altivec.vsubcuw
+    ppc_altivec_vsubecuq,                      // llvm.ppc.altivec.vsubecuq
+    ppc_altivec_vsubeuqm,                      // llvm.ppc.altivec.vsubeuqm
+    ppc_altivec_vsubsbs,                       // llvm.ppc.altivec.vsubsbs
+    ppc_altivec_vsubshs,                       // llvm.ppc.altivec.vsubshs
+    ppc_altivec_vsubsws,                       // llvm.ppc.altivec.vsubsws
+    ppc_altivec_vsububs,                       // llvm.ppc.altivec.vsububs
+    ppc_altivec_vsubuhs,                       // llvm.ppc.altivec.vsubuhs
+    ppc_altivec_vsubuws,                       // llvm.ppc.altivec.vsubuws
+    ppc_altivec_vsum2sws,                      // llvm.ppc.altivec.vsum2sws
+    ppc_altivec_vsum4sbs,                      // llvm.ppc.altivec.vsum4sbs
+    ppc_altivec_vsum4shs,                      // llvm.ppc.altivec.vsum4shs
+    ppc_altivec_vsum4ubs,                      // llvm.ppc.altivec.vsum4ubs
+    ppc_altivec_vsumsws,                       // llvm.ppc.altivec.vsumsws
+    ppc_altivec_vupkhpx,                       // llvm.ppc.altivec.vupkhpx
+    ppc_altivec_vupkhsb,                       // llvm.ppc.altivec.vupkhsb
+    ppc_altivec_vupkhsh,                       // llvm.ppc.altivec.vupkhsh
+    ppc_altivec_vupkhsw,                       // llvm.ppc.altivec.vupkhsw
+    ppc_altivec_vupklpx,                       // llvm.ppc.altivec.vupklpx
+    ppc_altivec_vupklsb,                       // llvm.ppc.altivec.vupklsb
+    ppc_altivec_vupklsh,                       // llvm.ppc.altivec.vupklsh
+    ppc_altivec_vupklsw,                       // llvm.ppc.altivec.vupklsw
+    ppc_bpermd,                                // llvm.ppc.bpermd
+    ppc_cfence,                                // llvm.ppc.cfence
+    ppc_dcba,                                  // llvm.ppc.dcba
+    ppc_dcbf,                                  // llvm.ppc.dcbf
+    ppc_dcbi,                                  // llvm.ppc.dcbi
+    ppc_dcbst,                                 // llvm.ppc.dcbst
+    ppc_dcbt,                                  // llvm.ppc.dcbt
+    ppc_dcbtst,                                // llvm.ppc.dcbtst
+    ppc_dcbz,                                  // llvm.ppc.dcbz
+    ppc_dcbzl,                                 // llvm.ppc.dcbzl
+    ppc_divde,                                 // llvm.ppc.divde
+    ppc_divdeu,                                // llvm.ppc.divdeu
+    ppc_divf128_round_to_odd,                  // llvm.ppc.divf128.round.to.odd
+    ppc_divwe,                                 // llvm.ppc.divwe
+    ppc_divweu,                                // llvm.ppc.divweu
+    ppc_fmaf128_round_to_odd,                  // llvm.ppc.fmaf128.round.to.odd
+    ppc_get_texasr,                            // llvm.ppc.get.texasr
+    ppc_get_texasru,                           // llvm.ppc.get.texasru
+    ppc_get_tfhar,                             // llvm.ppc.get.tfhar
+    ppc_get_tfiar,                             // llvm.ppc.get.tfiar
+    ppc_is_decremented_ctr_nonzero,            // llvm.ppc.is.decremented.ctr.nonzero
+    ppc_lwsync,                                // llvm.ppc.lwsync
+    ppc_mtctr,                                 // llvm.ppc.mtctr
+    ppc_mulf128_round_to_odd,                  // llvm.ppc.mulf128.round.to.odd
+    ppc_qpx_qvfabs,                            // llvm.ppc.qpx.qvfabs
+    ppc_qpx_qvfadd,                            // llvm.ppc.qpx.qvfadd
+    ppc_qpx_qvfadds,                           // llvm.ppc.qpx.qvfadds
+    ppc_qpx_qvfcfid,                           // llvm.ppc.qpx.qvfcfid
+    ppc_qpx_qvfcfids,                          // llvm.ppc.qpx.qvfcfids
+    ppc_qpx_qvfcfidu,                          // llvm.ppc.qpx.qvfcfidu
+    ppc_qpx_qvfcfidus,                         // llvm.ppc.qpx.qvfcfidus
+    ppc_qpx_qvfcmpeq,                          // llvm.ppc.qpx.qvfcmpeq
+    ppc_qpx_qvfcmpgt,                          // llvm.ppc.qpx.qvfcmpgt
+    ppc_qpx_qvfcmplt,                          // llvm.ppc.qpx.qvfcmplt
+    ppc_qpx_qvfcpsgn,                          // llvm.ppc.qpx.qvfcpsgn
+    ppc_qpx_qvfctid,                           // llvm.ppc.qpx.qvfctid
+    ppc_qpx_qvfctidu,                          // llvm.ppc.qpx.qvfctidu
+    ppc_qpx_qvfctiduz,                         // llvm.ppc.qpx.qvfctiduz
+    ppc_qpx_qvfctidz,                          // llvm.ppc.qpx.qvfctidz
+    ppc_qpx_qvfctiw,                           // llvm.ppc.qpx.qvfctiw
+    ppc_qpx_qvfctiwu,                          // llvm.ppc.qpx.qvfctiwu
+    ppc_qpx_qvfctiwuz,                         // llvm.ppc.qpx.qvfctiwuz
+    ppc_qpx_qvfctiwz,                          // llvm.ppc.qpx.qvfctiwz
+    ppc_qpx_qvflogical,                        // llvm.ppc.qpx.qvflogical
+    ppc_qpx_qvfmadd,                           // llvm.ppc.qpx.qvfmadd
+    ppc_qpx_qvfmadds,                          // llvm.ppc.qpx.qvfmadds
+    ppc_qpx_qvfmsub,                           // llvm.ppc.qpx.qvfmsub
+    ppc_qpx_qvfmsubs,                          // llvm.ppc.qpx.qvfmsubs
+    ppc_qpx_qvfmul,                            // llvm.ppc.qpx.qvfmul
+    ppc_qpx_qvfmuls,                           // llvm.ppc.qpx.qvfmuls
+    ppc_qpx_qvfnabs,                           // llvm.ppc.qpx.qvfnabs
+    ppc_qpx_qvfneg,                            // llvm.ppc.qpx.qvfneg
+    ppc_qpx_qvfnmadd,                          // llvm.ppc.qpx.qvfnmadd
+    ppc_qpx_qvfnmadds,                         // llvm.ppc.qpx.qvfnmadds
+    ppc_qpx_qvfnmsub,                          // llvm.ppc.qpx.qvfnmsub
+    ppc_qpx_qvfnmsubs,                         // llvm.ppc.qpx.qvfnmsubs
+    ppc_qpx_qvfperm,                           // llvm.ppc.qpx.qvfperm
+    ppc_qpx_qvfre,                             // llvm.ppc.qpx.qvfre
+    ppc_qpx_qvfres,                            // llvm.ppc.qpx.qvfres
+    ppc_qpx_qvfrim,                            // llvm.ppc.qpx.qvfrim
+    ppc_qpx_qvfrin,                            // llvm.ppc.qpx.qvfrin
+    ppc_qpx_qvfrip,                            // llvm.ppc.qpx.qvfrip
+    ppc_qpx_qvfriz,                            // llvm.ppc.qpx.qvfriz
+    ppc_qpx_qvfrsp,                            // llvm.ppc.qpx.qvfrsp
+    ppc_qpx_qvfrsqrte,                         // llvm.ppc.qpx.qvfrsqrte
+    ppc_qpx_qvfrsqrtes,                        // llvm.ppc.qpx.qvfrsqrtes
+    ppc_qpx_qvfsel,                            // llvm.ppc.qpx.qvfsel
+    ppc_qpx_qvfsub,                            // llvm.ppc.qpx.qvfsub
+    ppc_qpx_qvfsubs,                           // llvm.ppc.qpx.qvfsubs
+    ppc_qpx_qvftstnan,                         // llvm.ppc.qpx.qvftstnan
+    ppc_qpx_qvfxmadd,                          // llvm.ppc.qpx.qvfxmadd
+    ppc_qpx_qvfxmadds,                         // llvm.ppc.qpx.qvfxmadds
+    ppc_qpx_qvfxmul,                           // llvm.ppc.qpx.qvfxmul
+    ppc_qpx_qvfxmuls,                          // llvm.ppc.qpx.qvfxmuls
+    ppc_qpx_qvfxxcpnmadd,                      // llvm.ppc.qpx.qvfxxcpnmadd
+    ppc_qpx_qvfxxcpnmadds,                     // llvm.ppc.qpx.qvfxxcpnmadds
+    ppc_qpx_qvfxxmadd,                         // llvm.ppc.qpx.qvfxxmadd
+    ppc_qpx_qvfxxmadds,                        // llvm.ppc.qpx.qvfxxmadds
+    ppc_qpx_qvfxxnpmadd,                       // llvm.ppc.qpx.qvfxxnpmadd
+    ppc_qpx_qvfxxnpmadds,                      // llvm.ppc.qpx.qvfxxnpmadds
+    ppc_qpx_qvgpci,                            // llvm.ppc.qpx.qvgpci
+    ppc_qpx_qvlfcd,                            // llvm.ppc.qpx.qvlfcd
+    ppc_qpx_qvlfcda,                           // llvm.ppc.qpx.qvlfcda
+    ppc_qpx_qvlfcs,                            // llvm.ppc.qpx.qvlfcs
+    ppc_qpx_qvlfcsa,                           // llvm.ppc.qpx.qvlfcsa
+    ppc_qpx_qvlfd,                             // llvm.ppc.qpx.qvlfd
+    ppc_qpx_qvlfda,                            // llvm.ppc.qpx.qvlfda
+    ppc_qpx_qvlfiwa,                           // llvm.ppc.qpx.qvlfiwa
+    ppc_qpx_qvlfiwaa,                          // llvm.ppc.qpx.qvlfiwaa
+    ppc_qpx_qvlfiwz,                           // llvm.ppc.qpx.qvlfiwz
+    ppc_qpx_qvlfiwza,                          // llvm.ppc.qpx.qvlfiwza
+    ppc_qpx_qvlfs,                             // llvm.ppc.qpx.qvlfs
+    ppc_qpx_qvlfsa,                            // llvm.ppc.qpx.qvlfsa
+    ppc_qpx_qvlpcld,                           // llvm.ppc.qpx.qvlpcld
+    ppc_qpx_qvlpcls,                           // llvm.ppc.qpx.qvlpcls
+    ppc_qpx_qvlpcrd,                           // llvm.ppc.qpx.qvlpcrd
+    ppc_qpx_qvlpcrs,                           // llvm.ppc.qpx.qvlpcrs
+    ppc_qpx_qvstfcd,                           // llvm.ppc.qpx.qvstfcd
+    ppc_qpx_qvstfcda,                          // llvm.ppc.qpx.qvstfcda
+    ppc_qpx_qvstfcs,                           // llvm.ppc.qpx.qvstfcs
+    ppc_qpx_qvstfcsa,                          // llvm.ppc.qpx.qvstfcsa
+    ppc_qpx_qvstfd,                            // llvm.ppc.qpx.qvstfd
+    ppc_qpx_qvstfda,                           // llvm.ppc.qpx.qvstfda
+    ppc_qpx_qvstfiw,                           // llvm.ppc.qpx.qvstfiw
+    ppc_qpx_qvstfiwa,                          // llvm.ppc.qpx.qvstfiwa
+    ppc_qpx_qvstfs,                            // llvm.ppc.qpx.qvstfs
+    ppc_qpx_qvstfsa,                           // llvm.ppc.qpx.qvstfsa
+    ppc_set_texasr,                            // llvm.ppc.set.texasr
+    ppc_set_texasru,                           // llvm.ppc.set.texasru
+    ppc_set_tfhar,                             // llvm.ppc.set.tfhar
+    ppc_set_tfiar,                             // llvm.ppc.set.tfiar
+    ppc_sqrtf128_round_to_odd,                 // llvm.ppc.sqrtf128.round.to.odd
+    ppc_subf128_round_to_odd,                  // llvm.ppc.subf128.round.to.odd
+    ppc_sync,                                  // llvm.ppc.sync
+    ppc_tabort,                                // llvm.ppc.tabort
+    ppc_tabortdc,                              // llvm.ppc.tabortdc
+    ppc_tabortdci,                             // llvm.ppc.tabortdci
+    ppc_tabortwc,                              // llvm.ppc.tabortwc
+    ppc_tabortwci,                             // llvm.ppc.tabortwci
+    ppc_tbegin,                                // llvm.ppc.tbegin
+    ppc_tcheck,                                // llvm.ppc.tcheck
+    ppc_tend,                                  // llvm.ppc.tend
+    ppc_tendall,                               // llvm.ppc.tendall
+    ppc_trechkpt,                              // llvm.ppc.trechkpt
+    ppc_treclaim,                              // llvm.ppc.treclaim
+    ppc_tresume,                               // llvm.ppc.tresume
+    ppc_truncf128_round_to_odd,                // llvm.ppc.truncf128.round.to.odd
+    ppc_tsr,                                   // llvm.ppc.tsr
+    ppc_tsuspend,                              // llvm.ppc.tsuspend
+    ppc_ttest,                                 // llvm.ppc.ttest
+    ppc_vsx_lxvd2x,                            // llvm.ppc.vsx.lxvd2x
+    ppc_vsx_lxvd2x_be,                         // llvm.ppc.vsx.lxvd2x.be
+    ppc_vsx_lxvl,                              // llvm.ppc.vsx.lxvl
+    ppc_vsx_lxvll,                             // llvm.ppc.vsx.lxvll
+    ppc_vsx_lxvw4x,                            // llvm.ppc.vsx.lxvw4x
+    ppc_vsx_lxvw4x_be,                         // llvm.ppc.vsx.lxvw4x.be
+    ppc_vsx_stxvd2x,                           // llvm.ppc.vsx.stxvd2x
+    ppc_vsx_stxvd2x_be,                        // llvm.ppc.vsx.stxvd2x.be
+    ppc_vsx_stxvl,                             // llvm.ppc.vsx.stxvl
+    ppc_vsx_stxvll,                            // llvm.ppc.vsx.stxvll
+    ppc_vsx_stxvw4x,                           // llvm.ppc.vsx.stxvw4x
+    ppc_vsx_stxvw4x_be,                        // llvm.ppc.vsx.stxvw4x.be
+    ppc_vsx_xsmaxdp,                           // llvm.ppc.vsx.xsmaxdp
+    ppc_vsx_xsmindp,                           // llvm.ppc.vsx.xsmindp
+    ppc_vsx_xvcmpeqdp,                         // llvm.ppc.vsx.xvcmpeqdp
+    ppc_vsx_xvcmpeqdp_p,                       // llvm.ppc.vsx.xvcmpeqdp.p
+    ppc_vsx_xvcmpeqsp,                         // llvm.ppc.vsx.xvcmpeqsp
+    ppc_vsx_xvcmpeqsp_p,                       // llvm.ppc.vsx.xvcmpeqsp.p
+    ppc_vsx_xvcmpgedp,                         // llvm.ppc.vsx.xvcmpgedp
+    ppc_vsx_xvcmpgedp_p,                       // llvm.ppc.vsx.xvcmpgedp.p
+    ppc_vsx_xvcmpgesp,                         // llvm.ppc.vsx.xvcmpgesp
+    ppc_vsx_xvcmpgesp_p,                       // llvm.ppc.vsx.xvcmpgesp.p
+    ppc_vsx_xvcmpgtdp,                         // llvm.ppc.vsx.xvcmpgtdp
+    ppc_vsx_xvcmpgtdp_p,                       // llvm.ppc.vsx.xvcmpgtdp.p
+    ppc_vsx_xvcmpgtsp,                         // llvm.ppc.vsx.xvcmpgtsp
+    ppc_vsx_xvcmpgtsp_p,                       // llvm.ppc.vsx.xvcmpgtsp.p
+    ppc_vsx_xvcvdpsp,                          // llvm.ppc.vsx.xvcvdpsp
+    ppc_vsx_xvcvdpsxws,                        // llvm.ppc.vsx.xvcvdpsxws
+    ppc_vsx_xvcvdpuxws,                        // llvm.ppc.vsx.xvcvdpuxws
+    ppc_vsx_xvcvhpsp,                          // llvm.ppc.vsx.xvcvhpsp
+    ppc_vsx_xvcvspdp,                          // llvm.ppc.vsx.xvcvspdp
+    ppc_vsx_xvcvsphp,                          // llvm.ppc.vsx.xvcvsphp
+    ppc_vsx_xvcvsxdsp,                         // llvm.ppc.vsx.xvcvsxdsp
+    ppc_vsx_xvcvsxwdp,                         // llvm.ppc.vsx.xvcvsxwdp
+    ppc_vsx_xvcvuxdsp,                         // llvm.ppc.vsx.xvcvuxdsp
+    ppc_vsx_xvcvuxwdp,                         // llvm.ppc.vsx.xvcvuxwdp
+    ppc_vsx_xvdivdp,                           // llvm.ppc.vsx.xvdivdp
+    ppc_vsx_xvdivsp,                           // llvm.ppc.vsx.xvdivsp
+    ppc_vsx_xviexpdp,                          // llvm.ppc.vsx.xviexpdp
+    ppc_vsx_xviexpsp,                          // llvm.ppc.vsx.xviexpsp
+    ppc_vsx_xvmaxdp,                           // llvm.ppc.vsx.xvmaxdp
+    ppc_vsx_xvmaxsp,                           // llvm.ppc.vsx.xvmaxsp
+    ppc_vsx_xvmindp,                           // llvm.ppc.vsx.xvmindp
+    ppc_vsx_xvminsp,                           // llvm.ppc.vsx.xvminsp
+    ppc_vsx_xvrdpip,                           // llvm.ppc.vsx.xvrdpip
+    ppc_vsx_xvredp,                            // llvm.ppc.vsx.xvredp
+    ppc_vsx_xvresp,                            // llvm.ppc.vsx.xvresp
+    ppc_vsx_xvrspip,                           // llvm.ppc.vsx.xvrspip
+    ppc_vsx_xvrsqrtedp,                        // llvm.ppc.vsx.xvrsqrtedp
+    ppc_vsx_xvrsqrtesp,                        // llvm.ppc.vsx.xvrsqrtesp
+    ppc_vsx_xvtstdcdp,                         // llvm.ppc.vsx.xvtstdcdp
+    ppc_vsx_xvtstdcsp,                         // llvm.ppc.vsx.xvtstdcsp
+    ppc_vsx_xvxexpdp,                          // llvm.ppc.vsx.xvxexpdp
+    ppc_vsx_xvxexpsp,                          // llvm.ppc.vsx.xvxexpsp
+    ppc_vsx_xvxsigdp,                          // llvm.ppc.vsx.xvxsigdp
+    ppc_vsx_xvxsigsp,                          // llvm.ppc.vsx.xvxsigsp
+    ppc_vsx_xxextractuw,                       // llvm.ppc.vsx.xxextractuw
+    ppc_vsx_xxinsertw,                         // llvm.ppc.vsx.xxinsertw
+    ppc_vsx_xxleqv,                            // llvm.ppc.vsx.xxleqv
+    r600_cube,                                 // llvm.r600.cube
+    r600_ddx,                                  // llvm.r600.ddx
+    r600_ddy,                                  // llvm.r600.ddy
+    r600_dot4,                                 // llvm.r600.dot4
+    r600_group_barrier,                        // llvm.r600.group.barrier
+    r600_implicitarg_ptr,                      // llvm.r600.implicitarg.ptr
+    r600_kill,                                 // llvm.r600.kill
+    r600_rat_store_typed,                      // llvm.r600.rat.store.typed
+    r600_read_global_size_x,                   // llvm.r600.read.global.size.x
+    r600_read_global_size_y,                   // llvm.r600.read.global.size.y
+    r600_read_global_size_z,                   // llvm.r600.read.global.size.z
+    r600_read_local_size_x,                    // llvm.r600.read.local.size.x
+    r600_read_local_size_y,                    // llvm.r600.read.local.size.y
+    r600_read_local_size_z,                    // llvm.r600.read.local.size.z
+    r600_read_ngroups_x,                       // llvm.r600.read.ngroups.x
+    r600_read_ngroups_y,                       // llvm.r600.read.ngroups.y
+    r600_read_ngroups_z,                       // llvm.r600.read.ngroups.z
+    r600_read_tgid_x,                          // llvm.r600.read.tgid.x
+    r600_read_tgid_y,                          // llvm.r600.read.tgid.y
+    r600_read_tgid_z,                          // llvm.r600.read.tgid.z
+    r600_read_tidig_x,                         // llvm.r600.read.tidig.x
+    r600_read_tidig_y,                         // llvm.r600.read.tidig.y
+    r600_read_tidig_z,                         // llvm.r600.read.tidig.z
+    r600_recipsqrt_clamped,                    // llvm.r600.recipsqrt.clamped
+    r600_recipsqrt_ieee,                       // llvm.r600.recipsqrt.ieee
+    r600_store_stream_output,                  // llvm.r600.store.stream.output
+    r600_store_swizzle,                        // llvm.r600.store.swizzle
+    r600_tex,                                  // llvm.r600.tex
+    r600_texc,                                 // llvm.r600.texc
+    r600_txb,                                  // llvm.r600.txb
+    r600_txbc,                                 // llvm.r600.txbc
+    r600_txf,                                  // llvm.r600.txf
+    r600_txl,                                  // llvm.r600.txl
+    r600_txlc,                                 // llvm.r600.txlc
+    r600_txq,                                  // llvm.r600.txq
+    s390_efpc,                                 // llvm.s390.efpc
+    s390_etnd,                                 // llvm.s390.etnd
+    s390_lcbb,                                 // llvm.s390.lcbb
+    s390_ntstg,                                // llvm.s390.ntstg
+    s390_ppa_txassist,                         // llvm.s390.ppa.txassist
+    s390_sfpc,                                 // llvm.s390.sfpc
+    s390_tabort,                               // llvm.s390.tabort
+    s390_tbegin,                               // llvm.s390.tbegin
+    s390_tbegin_nofloat,                       // llvm.s390.tbegin.nofloat
+    s390_tbeginc,                              // llvm.s390.tbeginc
+    s390_tdc,                                  // llvm.s390.tdc
+    s390_tend,                                 // llvm.s390.tend
+    s390_vaccb,                                // llvm.s390.vaccb
+    s390_vacccq,                               // llvm.s390.vacccq
+    s390_vaccf,                                // llvm.s390.vaccf
+    s390_vaccg,                                // llvm.s390.vaccg
+    s390_vacch,                                // llvm.s390.vacch
+    s390_vaccq,                                // llvm.s390.vaccq
+    s390_vacq,                                 // llvm.s390.vacq
+    s390_vaq,                                  // llvm.s390.vaq
+    s390_vavgb,                                // llvm.s390.vavgb
+    s390_vavgf,                                // llvm.s390.vavgf
+    s390_vavgg,                                // llvm.s390.vavgg
+    s390_vavgh,                                // llvm.s390.vavgh
+    s390_vavglb,                               // llvm.s390.vavglb
+    s390_vavglf,                               // llvm.s390.vavglf
+    s390_vavglg,                               // llvm.s390.vavglg
+    s390_vavglh,                               // llvm.s390.vavglh
+    s390_vbperm,                               // llvm.s390.vbperm
+    s390_vceqbs,                               // llvm.s390.vceqbs
+    s390_vceqfs,                               // llvm.s390.vceqfs
+    s390_vceqgs,                               // llvm.s390.vceqgs
+    s390_vceqhs,                               // llvm.s390.vceqhs
+    s390_vchbs,                                // llvm.s390.vchbs
+    s390_vchfs,                                // llvm.s390.vchfs
+    s390_vchgs,                                // llvm.s390.vchgs
+    s390_vchhs,                                // llvm.s390.vchhs
+    s390_vchlbs,                               // llvm.s390.vchlbs
+    s390_vchlfs,                               // llvm.s390.vchlfs
+    s390_vchlgs,                               // llvm.s390.vchlgs
+    s390_vchlhs,                               // llvm.s390.vchlhs
+    s390_vcksm,                                // llvm.s390.vcksm
+    s390_verimb,                               // llvm.s390.verimb
+    s390_verimf,                               // llvm.s390.verimf
+    s390_verimg,                               // llvm.s390.verimg
+    s390_verimh,                               // llvm.s390.verimh
+    s390_verllb,                               // llvm.s390.verllb
+    s390_verllf,                               // llvm.s390.verllf
+    s390_verllg,                               // llvm.s390.verllg
+    s390_verllh,                               // llvm.s390.verllh
+    s390_verllvb,                              // llvm.s390.verllvb
+    s390_verllvf,                              // llvm.s390.verllvf
+    s390_verllvg,                              // llvm.s390.verllvg
+    s390_verllvh,                              // llvm.s390.verllvh
+    s390_vfaeb,                                // llvm.s390.vfaeb
+    s390_vfaebs,                               // llvm.s390.vfaebs
+    s390_vfaef,                                // llvm.s390.vfaef
+    s390_vfaefs,                               // llvm.s390.vfaefs
+    s390_vfaeh,                                // llvm.s390.vfaeh
+    s390_vfaehs,                               // llvm.s390.vfaehs
+    s390_vfaezb,                               // llvm.s390.vfaezb
+    s390_vfaezbs,                              // llvm.s390.vfaezbs
+    s390_vfaezf,                               // llvm.s390.vfaezf
+    s390_vfaezfs,                              // llvm.s390.vfaezfs
+    s390_vfaezh,                               // llvm.s390.vfaezh
+    s390_vfaezhs,                              // llvm.s390.vfaezhs
+    s390_vfcedbs,                              // llvm.s390.vfcedbs
+    s390_vfcesbs,                              // llvm.s390.vfcesbs
+    s390_vfchdbs,                              // llvm.s390.vfchdbs
+    s390_vfchedbs,                             // llvm.s390.vfchedbs
+    s390_vfchesbs,                             // llvm.s390.vfchesbs
+    s390_vfchsbs,                              // llvm.s390.vfchsbs
+    s390_vfeeb,                                // llvm.s390.vfeeb
+    s390_vfeebs,                               // llvm.s390.vfeebs
+    s390_vfeef,                                // llvm.s390.vfeef
+    s390_vfeefs,                               // llvm.s390.vfeefs
+    s390_vfeeh,                                // llvm.s390.vfeeh
+    s390_vfeehs,                               // llvm.s390.vfeehs
+    s390_vfeezb,                               // llvm.s390.vfeezb
+    s390_vfeezbs,                              // llvm.s390.vfeezbs
+    s390_vfeezf,                               // llvm.s390.vfeezf
+    s390_vfeezfs,                              // llvm.s390.vfeezfs
+    s390_vfeezh,                               // llvm.s390.vfeezh
+    s390_vfeezhs,                              // llvm.s390.vfeezhs
+    s390_vfeneb,                               // llvm.s390.vfeneb
+    s390_vfenebs,                              // llvm.s390.vfenebs
+    s390_vfenef,                               // llvm.s390.vfenef
+    s390_vfenefs,                              // llvm.s390.vfenefs
+    s390_vfeneh,                               // llvm.s390.vfeneh
+    s390_vfenehs,                              // llvm.s390.vfenehs
+    s390_vfenezb,                              // llvm.s390.vfenezb
+    s390_vfenezbs,                             // llvm.s390.vfenezbs
+    s390_vfenezf,                              // llvm.s390.vfenezf
+    s390_vfenezfs,                             // llvm.s390.vfenezfs
+    s390_vfenezh,                              // llvm.s390.vfenezh
+    s390_vfenezhs,                             // llvm.s390.vfenezhs
+    s390_vfidb,                                // llvm.s390.vfidb
+    s390_vfisb,                                // llvm.s390.vfisb
+    s390_vfmaxdb,                              // llvm.s390.vfmaxdb
+    s390_vfmaxsb,                              // llvm.s390.vfmaxsb
+    s390_vfmindb,                              // llvm.s390.vfmindb
+    s390_vfminsb,                              // llvm.s390.vfminsb
+    s390_vftcidb,                              // llvm.s390.vftcidb
+    s390_vftcisb,                              // llvm.s390.vftcisb
+    s390_vgfmab,                               // llvm.s390.vgfmab
+    s390_vgfmaf,                               // llvm.s390.vgfmaf
+    s390_vgfmag,                               // llvm.s390.vgfmag
+    s390_vgfmah,                               // llvm.s390.vgfmah
+    s390_vgfmb,                                // llvm.s390.vgfmb
+    s390_vgfmf,                                // llvm.s390.vgfmf
+    s390_vgfmg,                                // llvm.s390.vgfmg
+    s390_vgfmh,                                // llvm.s390.vgfmh
+    s390_vistrb,                               // llvm.s390.vistrb
+    s390_vistrbs,                              // llvm.s390.vistrbs
+    s390_vistrf,                               // llvm.s390.vistrf
+    s390_vistrfs,                              // llvm.s390.vistrfs
+    s390_vistrh,                               // llvm.s390.vistrh
+    s390_vistrhs,                              // llvm.s390.vistrhs
+    s390_vlbb,                                 // llvm.s390.vlbb
+    s390_vll,                                  // llvm.s390.vll
+    s390_vlrl,                                 // llvm.s390.vlrl
+    s390_vmaeb,                                // llvm.s390.vmaeb
+    s390_vmaef,                                // llvm.s390.vmaef
+    s390_vmaeh,                                // llvm.s390.vmaeh
+    s390_vmahb,                                // llvm.s390.vmahb
+    s390_vmahf,                                // llvm.s390.vmahf
+    s390_vmahh,                                // llvm.s390.vmahh
+    s390_vmaleb,                               // llvm.s390.vmaleb
+    s390_vmalef,                               // llvm.s390.vmalef
+    s390_vmaleh,                               // llvm.s390.vmaleh
+    s390_vmalhb,                               // llvm.s390.vmalhb
+    s390_vmalhf,                               // llvm.s390.vmalhf
+    s390_vmalhh,                               // llvm.s390.vmalhh
+    s390_vmalob,                               // llvm.s390.vmalob
+    s390_vmalof,                               // llvm.s390.vmalof
+    s390_vmaloh,                               // llvm.s390.vmaloh
+    s390_vmaob,                                // llvm.s390.vmaob
+    s390_vmaof,                                // llvm.s390.vmaof
+    s390_vmaoh,                                // llvm.s390.vmaoh
+    s390_vmeb,                                 // llvm.s390.vmeb
+    s390_vmef,                                 // llvm.s390.vmef
+    s390_vmeh,                                 // llvm.s390.vmeh
+    s390_vmhb,                                 // llvm.s390.vmhb
+    s390_vmhf,                                 // llvm.s390.vmhf
+    s390_vmhh,                                 // llvm.s390.vmhh
+    s390_vmleb,                                // llvm.s390.vmleb
+    s390_vmlef,                                // llvm.s390.vmlef
+    s390_vmleh,                                // llvm.s390.vmleh
+    s390_vmlhb,                                // llvm.s390.vmlhb
+    s390_vmlhf,                                // llvm.s390.vmlhf
+    s390_vmlhh,                                // llvm.s390.vmlhh
+    s390_vmlob,                                // llvm.s390.vmlob
+    s390_vmlof,                                // llvm.s390.vmlof
+    s390_vmloh,                                // llvm.s390.vmloh
+    s390_vmob,                                 // llvm.s390.vmob
+    s390_vmof,                                 // llvm.s390.vmof
+    s390_vmoh,                                 // llvm.s390.vmoh
+    s390_vmslg,                                // llvm.s390.vmslg
+    s390_vpdi,                                 // llvm.s390.vpdi
+    s390_vperm,                                // llvm.s390.vperm
+    s390_vpklsf,                               // llvm.s390.vpklsf
+    s390_vpklsfs,                              // llvm.s390.vpklsfs
+    s390_vpklsg,                               // llvm.s390.vpklsg
+    s390_vpklsgs,                              // llvm.s390.vpklsgs
+    s390_vpklsh,                               // llvm.s390.vpklsh
+    s390_vpklshs,                              // llvm.s390.vpklshs
+    s390_vpksf,                                // llvm.s390.vpksf
+    s390_vpksfs,                               // llvm.s390.vpksfs
+    s390_vpksg,                                // llvm.s390.vpksg
+    s390_vpksgs,                               // llvm.s390.vpksgs
+    s390_vpksh,                                // llvm.s390.vpksh
+    s390_vpkshs,                               // llvm.s390.vpkshs
+    s390_vsbcbiq,                              // llvm.s390.vsbcbiq
+    s390_vsbiq,                                // llvm.s390.vsbiq
+    s390_vscbib,                               // llvm.s390.vscbib
+    s390_vscbif,                               // llvm.s390.vscbif
+    s390_vscbig,                               // llvm.s390.vscbig
+    s390_vscbih,                               // llvm.s390.vscbih
+    s390_vscbiq,                               // llvm.s390.vscbiq
+    s390_vsl,                                  // llvm.s390.vsl
+    s390_vslb,                                 // llvm.s390.vslb
+    s390_vsldb,                                // llvm.s390.vsldb
+    s390_vsq,                                  // llvm.s390.vsq
+    s390_vsra,                                 // llvm.s390.vsra
+    s390_vsrab,                                // llvm.s390.vsrab
+    s390_vsrl,                                 // llvm.s390.vsrl
+    s390_vsrlb,                                // llvm.s390.vsrlb
+    s390_vstl,                                 // llvm.s390.vstl
+    s390_vstrcb,                               // llvm.s390.vstrcb
+    s390_vstrcbs,                              // llvm.s390.vstrcbs
+    s390_vstrcf,                               // llvm.s390.vstrcf
+    s390_vstrcfs,                              // llvm.s390.vstrcfs
+    s390_vstrch,                               // llvm.s390.vstrch
+    s390_vstrchs,                              // llvm.s390.vstrchs
+    s390_vstrczb,                              // llvm.s390.vstrczb
+    s390_vstrczbs,                             // llvm.s390.vstrczbs
+    s390_vstrczf,                              // llvm.s390.vstrczf
+    s390_vstrczfs,                             // llvm.s390.vstrczfs
+    s390_vstrczh,                              // llvm.s390.vstrczh
+    s390_vstrczhs,                             // llvm.s390.vstrczhs
+    s390_vstrl,                                // llvm.s390.vstrl
+    s390_vsumb,                                // llvm.s390.vsumb
+    s390_vsumgf,                               // llvm.s390.vsumgf
+    s390_vsumgh,                               // llvm.s390.vsumgh
+    s390_vsumh,                                // llvm.s390.vsumh
+    s390_vsumqf,                               // llvm.s390.vsumqf
+    s390_vsumqg,                               // llvm.s390.vsumqg
+    s390_vtm,                                  // llvm.s390.vtm
+    s390_vuphb,                                // llvm.s390.vuphb
+    s390_vuphf,                                // llvm.s390.vuphf
+    s390_vuphh,                                // llvm.s390.vuphh
+    s390_vuplb,                                // llvm.s390.vuplb
+    s390_vuplf,                                // llvm.s390.vuplf
+    s390_vuplhb,                               // llvm.s390.vuplhb
+    s390_vuplhf,                               // llvm.s390.vuplhf
+    s390_vuplhh,                               // llvm.s390.vuplhh
+    s390_vuplhw,                               // llvm.s390.vuplhw
+    s390_vupllb,                               // llvm.s390.vupllb
+    s390_vupllf,                               // llvm.s390.vupllf
+    s390_vupllh,                               // llvm.s390.vupllh
+    wasm_atomic_notify,                        // llvm.wasm.atomic.notify
+    wasm_atomic_wait_i32,                      // llvm.wasm.atomic.wait.i32
+    wasm_atomic_wait_i64,                      // llvm.wasm.atomic.wait.i64
+    wasm_catch,                                // llvm.wasm.catch
+    wasm_current_memory,                       // llvm.wasm.current.memory
+    wasm_get_ehselector,                       // llvm.wasm.get.ehselector
+    wasm_get_exception,                        // llvm.wasm.get.exception
+    wasm_grow_memory,                          // llvm.wasm.grow.memory
+    wasm_landingpad_index,                     // llvm.wasm.landingpad.index
+    wasm_lsda,                                 // llvm.wasm.lsda
+    wasm_mem_grow,                             // llvm.wasm.mem.grow
+    wasm_mem_size,                             // llvm.wasm.mem.size
+    wasm_memory_grow,                          // llvm.wasm.memory.grow
+    wasm_memory_size,                          // llvm.wasm.memory.size
+    wasm_rethrow,                              // llvm.wasm.rethrow
+    wasm_throw,                                // llvm.wasm.throw
+    x86_3dnow_pavgusb,                         // llvm.x86.3dnow.pavgusb
+    x86_3dnow_pf2id,                           // llvm.x86.3dnow.pf2id
+    x86_3dnow_pfacc,                           // llvm.x86.3dnow.pfacc
+    x86_3dnow_pfadd,                           // llvm.x86.3dnow.pfadd
+    x86_3dnow_pfcmpeq,                         // llvm.x86.3dnow.pfcmpeq
+    x86_3dnow_pfcmpge,                         // llvm.x86.3dnow.pfcmpge
+    x86_3dnow_pfcmpgt,                         // llvm.x86.3dnow.pfcmpgt
+    x86_3dnow_pfmax,                           // llvm.x86.3dnow.pfmax
+    x86_3dnow_pfmin,                           // llvm.x86.3dnow.pfmin
+    x86_3dnow_pfmul,                           // llvm.x86.3dnow.pfmul
+    x86_3dnow_pfrcp,                           // llvm.x86.3dnow.pfrcp
+    x86_3dnow_pfrcpit1,                        // llvm.x86.3dnow.pfrcpit1
+    x86_3dnow_pfrcpit2,                        // llvm.x86.3dnow.pfrcpit2
+    x86_3dnow_pfrsqit1,                        // llvm.x86.3dnow.pfrsqit1
+    x86_3dnow_pfrsqrt,                         // llvm.x86.3dnow.pfrsqrt
+    x86_3dnow_pfsub,                           // llvm.x86.3dnow.pfsub
+    x86_3dnow_pfsubr,                          // llvm.x86.3dnow.pfsubr
+    x86_3dnow_pi2fd,                           // llvm.x86.3dnow.pi2fd
+    x86_3dnow_pmulhrw,                         // llvm.x86.3dnow.pmulhrw
+    x86_3dnowa_pf2iw,                          // llvm.x86.3dnowa.pf2iw
+    x86_3dnowa_pfnacc,                         // llvm.x86.3dnowa.pfnacc
+    x86_3dnowa_pfpnacc,                        // llvm.x86.3dnowa.pfpnacc
+    x86_3dnowa_pi2fw,                          // llvm.x86.3dnowa.pi2fw
+    x86_3dnowa_pswapd,                         // llvm.x86.3dnowa.pswapd
+    x86_addcarry_u32,                          // llvm.x86.addcarry.u32
+    x86_addcarry_u64,                          // llvm.x86.addcarry.u64
+    x86_addcarryx_u32,                         // llvm.x86.addcarryx.u32
+    x86_addcarryx_u64,                         // llvm.x86.addcarryx.u64
+    x86_aesni_aesdec,                          // llvm.x86.aesni.aesdec
+    x86_aesni_aesdec_256,                      // llvm.x86.aesni.aesdec.256
+    x86_aesni_aesdec_512,                      // llvm.x86.aesni.aesdec.512
+    x86_aesni_aesdeclast,                      // llvm.x86.aesni.aesdeclast
+    x86_aesni_aesdeclast_256,                  // llvm.x86.aesni.aesdeclast.256
+    x86_aesni_aesdeclast_512,                  // llvm.x86.aesni.aesdeclast.512
+    x86_aesni_aesenc,                          // llvm.x86.aesni.aesenc
+    x86_aesni_aesenc_256,                      // llvm.x86.aesni.aesenc.256
+    x86_aesni_aesenc_512,                      // llvm.x86.aesni.aesenc.512
+    x86_aesni_aesenclast,                      // llvm.x86.aesni.aesenclast
+    x86_aesni_aesenclast_256,                  // llvm.x86.aesni.aesenclast.256
+    x86_aesni_aesenclast_512,                  // llvm.x86.aesni.aesenclast.512
+    x86_aesni_aesimc,                          // llvm.x86.aesni.aesimc
+    x86_aesni_aeskeygenassist,                 // llvm.x86.aesni.aeskeygenassist
+    x86_avx_addsub_pd_256,                     // llvm.x86.avx.addsub.pd.256
+    x86_avx_addsub_ps_256,                     // llvm.x86.avx.addsub.ps.256
+    x86_avx_blendv_pd_256,                     // llvm.x86.avx.blendv.pd.256
+    x86_avx_blendv_ps_256,                     // llvm.x86.avx.blendv.ps.256
+    x86_avx_cmp_pd_256,                        // llvm.x86.avx.cmp.pd.256
+    x86_avx_cmp_ps_256,                        // llvm.x86.avx.cmp.ps.256
+    x86_avx_cvt_pd2_ps_256,                    // llvm.x86.avx.cvt.pd2.ps.256
+    x86_avx_cvt_pd2dq_256,                     // llvm.x86.avx.cvt.pd2dq.256
+    x86_avx_cvt_ps2dq_256,                     // llvm.x86.avx.cvt.ps2dq.256
+    x86_avx_cvtt_pd2dq_256,                    // llvm.x86.avx.cvtt.pd2dq.256
+    x86_avx_cvtt_ps2dq_256,                    // llvm.x86.avx.cvtt.ps2dq.256
+    x86_avx_dp_ps_256,                         // llvm.x86.avx.dp.ps.256
+    x86_avx_hadd_pd_256,                       // llvm.x86.avx.hadd.pd.256
+    x86_avx_hadd_ps_256,                       // llvm.x86.avx.hadd.ps.256
+    x86_avx_hsub_pd_256,                       // llvm.x86.avx.hsub.pd.256
+    x86_avx_hsub_ps_256,                       // llvm.x86.avx.hsub.ps.256
+    x86_avx_ldu_dq_256,                        // llvm.x86.avx.ldu.dq.256
+    x86_avx_maskload_pd,                       // llvm.x86.avx.maskload.pd
+    x86_avx_maskload_pd_256,                   // llvm.x86.avx.maskload.pd.256
+    x86_avx_maskload_ps,                       // llvm.x86.avx.maskload.ps
+    x86_avx_maskload_ps_256,                   // llvm.x86.avx.maskload.ps.256
+    x86_avx_maskstore_pd,                      // llvm.x86.avx.maskstore.pd
+    x86_avx_maskstore_pd_256,                  // llvm.x86.avx.maskstore.pd.256
+    x86_avx_maskstore_ps,                      // llvm.x86.avx.maskstore.ps
+    x86_avx_maskstore_ps_256,                  // llvm.x86.avx.maskstore.ps.256
+    x86_avx_max_pd_256,                        // llvm.x86.avx.max.pd.256
+    x86_avx_max_ps_256,                        // llvm.x86.avx.max.ps.256
+    x86_avx_min_pd_256,                        // llvm.x86.avx.min.pd.256
+    x86_avx_min_ps_256,                        // llvm.x86.avx.min.ps.256
+    x86_avx_movmsk_pd_256,                     // llvm.x86.avx.movmsk.pd.256
+    x86_avx_movmsk_ps_256,                     // llvm.x86.avx.movmsk.ps.256
+    x86_avx_ptestc_256,                        // llvm.x86.avx.ptestc.256
+    x86_avx_ptestnzc_256,                      // llvm.x86.avx.ptestnzc.256
+    x86_avx_ptestz_256,                        // llvm.x86.avx.ptestz.256
+    x86_avx_rcp_ps_256,                        // llvm.x86.avx.rcp.ps.256
+    x86_avx_round_pd_256,                      // llvm.x86.avx.round.pd.256
+    x86_avx_round_ps_256,                      // llvm.x86.avx.round.ps.256
+    x86_avx_rsqrt_ps_256,                      // llvm.x86.avx.rsqrt.ps.256
+    x86_avx_vpermilvar_pd,                     // llvm.x86.avx.vpermilvar.pd
+    x86_avx_vpermilvar_pd_256,                 // llvm.x86.avx.vpermilvar.pd.256
+    x86_avx_vpermilvar_ps,                     // llvm.x86.avx.vpermilvar.ps
+    x86_avx_vpermilvar_ps_256,                 // llvm.x86.avx.vpermilvar.ps.256
+    x86_avx_vtestc_pd,                         // llvm.x86.avx.vtestc.pd
+    x86_avx_vtestc_pd_256,                     // llvm.x86.avx.vtestc.pd.256
+    x86_avx_vtestc_ps,                         // llvm.x86.avx.vtestc.ps
+    x86_avx_vtestc_ps_256,                     // llvm.x86.avx.vtestc.ps.256
+    x86_avx_vtestnzc_pd,                       // llvm.x86.avx.vtestnzc.pd
+    x86_avx_vtestnzc_pd_256,                   // llvm.x86.avx.vtestnzc.pd.256
+    x86_avx_vtestnzc_ps,                       // llvm.x86.avx.vtestnzc.ps
+    x86_avx_vtestnzc_ps_256,                   // llvm.x86.avx.vtestnzc.ps.256
+    x86_avx_vtestz_pd,                         // llvm.x86.avx.vtestz.pd
+    x86_avx_vtestz_pd_256,                     // llvm.x86.avx.vtestz.pd.256
+    x86_avx_vtestz_ps,                         // llvm.x86.avx.vtestz.ps
+    x86_avx_vtestz_ps_256,                     // llvm.x86.avx.vtestz.ps.256
+    x86_avx_vzeroall,                          // llvm.x86.avx.vzeroall
+    x86_avx_vzeroupper,                        // llvm.x86.avx.vzeroupper
+    x86_avx2_gather_d_d,                       // llvm.x86.avx2.gather.d.d
+    x86_avx2_gather_d_d_256,                   // llvm.x86.avx2.gather.d.d.256
+    x86_avx2_gather_d_pd,                      // llvm.x86.avx2.gather.d.pd
+    x86_avx2_gather_d_pd_256,                  // llvm.x86.avx2.gather.d.pd.256
+    x86_avx2_gather_d_ps,                      // llvm.x86.avx2.gather.d.ps
+    x86_avx2_gather_d_ps_256,                  // llvm.x86.avx2.gather.d.ps.256
+    x86_avx2_gather_d_q,                       // llvm.x86.avx2.gather.d.q
+    x86_avx2_gather_d_q_256,                   // llvm.x86.avx2.gather.d.q.256
+    x86_avx2_gather_q_d,                       // llvm.x86.avx2.gather.q.d
+    x86_avx2_gather_q_d_256,                   // llvm.x86.avx2.gather.q.d.256
+    x86_avx2_gather_q_pd,                      // llvm.x86.avx2.gather.q.pd
+    x86_avx2_gather_q_pd_256,                  // llvm.x86.avx2.gather.q.pd.256
+    x86_avx2_gather_q_ps,                      // llvm.x86.avx2.gather.q.ps
+    x86_avx2_gather_q_ps_256,                  // llvm.x86.avx2.gather.q.ps.256
+    x86_avx2_gather_q_q,                       // llvm.x86.avx2.gather.q.q
+    x86_avx2_gather_q_q_256,                   // llvm.x86.avx2.gather.q.q.256
+    x86_avx2_maskload_d,                       // llvm.x86.avx2.maskload.d
+    x86_avx2_maskload_d_256,                   // llvm.x86.avx2.maskload.d.256
+    x86_avx2_maskload_q,                       // llvm.x86.avx2.maskload.q
+    x86_avx2_maskload_q_256,                   // llvm.x86.avx2.maskload.q.256
+    x86_avx2_maskstore_d,                      // llvm.x86.avx2.maskstore.d
+    x86_avx2_maskstore_d_256,                  // llvm.x86.avx2.maskstore.d.256
+    x86_avx2_maskstore_q,                      // llvm.x86.avx2.maskstore.q
+    x86_avx2_maskstore_q_256,                  // llvm.x86.avx2.maskstore.q.256
+    x86_avx2_mpsadbw,                          // llvm.x86.avx2.mpsadbw
+    x86_avx2_packssdw,                         // llvm.x86.avx2.packssdw
+    x86_avx2_packsswb,                         // llvm.x86.avx2.packsswb
+    x86_avx2_packusdw,                         // llvm.x86.avx2.packusdw
+    x86_avx2_packuswb,                         // llvm.x86.avx2.packuswb
+    x86_avx2_padds_b,                          // llvm.x86.avx2.padds.b
+    x86_avx2_padds_w,                          // llvm.x86.avx2.padds.w
+    x86_avx2_paddus_b,                         // llvm.x86.avx2.paddus.b
+    x86_avx2_paddus_w,                         // llvm.x86.avx2.paddus.w
+    x86_avx2_pblendvb,                         // llvm.x86.avx2.pblendvb
+    x86_avx2_permd,                            // llvm.x86.avx2.permd
+    x86_avx2_permps,                           // llvm.x86.avx2.permps
+    x86_avx2_phadd_d,                          // llvm.x86.avx2.phadd.d
+    x86_avx2_phadd_sw,                         // llvm.x86.avx2.phadd.sw
+    x86_avx2_phadd_w,                          // llvm.x86.avx2.phadd.w
+    x86_avx2_phsub_d,                          // llvm.x86.avx2.phsub.d
+    x86_avx2_phsub_sw,                         // llvm.x86.avx2.phsub.sw
+    x86_avx2_phsub_w,                          // llvm.x86.avx2.phsub.w
+    x86_avx2_pmadd_ub_sw,                      // llvm.x86.avx2.pmadd.ub.sw
+    x86_avx2_pmadd_wd,                         // llvm.x86.avx2.pmadd.wd
+    x86_avx2_pmovmskb,                         // llvm.x86.avx2.pmovmskb
+    x86_avx2_pmul_hr_sw,                       // llvm.x86.avx2.pmul.hr.sw
+    x86_avx2_pmulh_w,                          // llvm.x86.avx2.pmulh.w
+    x86_avx2_pmulhu_w,                         // llvm.x86.avx2.pmulhu.w
+    x86_avx2_psad_bw,                          // llvm.x86.avx2.psad.bw
+    x86_avx2_pshuf_b,                          // llvm.x86.avx2.pshuf.b
+    x86_avx2_psign_b,                          // llvm.x86.avx2.psign.b
+    x86_avx2_psign_d,                          // llvm.x86.avx2.psign.d
+    x86_avx2_psign_w,                          // llvm.x86.avx2.psign.w
+    x86_avx2_psll_d,                           // llvm.x86.avx2.psll.d
+    x86_avx2_psll_q,                           // llvm.x86.avx2.psll.q
+    x86_avx2_psll_w,                           // llvm.x86.avx2.psll.w
+    x86_avx2_pslli_d,                          // llvm.x86.avx2.pslli.d
+    x86_avx2_pslli_q,                          // llvm.x86.avx2.pslli.q
+    x86_avx2_pslli_w,                          // llvm.x86.avx2.pslli.w
+    x86_avx2_psllv_d,                          // llvm.x86.avx2.psllv.d
+    x86_avx2_psllv_d_256,                      // llvm.x86.avx2.psllv.d.256
+    x86_avx2_psllv_q,                          // llvm.x86.avx2.psllv.q
+    x86_avx2_psllv_q_256,                      // llvm.x86.avx2.psllv.q.256
+    x86_avx2_psra_d,                           // llvm.x86.avx2.psra.d
+    x86_avx2_psra_w,                           // llvm.x86.avx2.psra.w
+    x86_avx2_psrai_d,                          // llvm.x86.avx2.psrai.d
+    x86_avx2_psrai_w,                          // llvm.x86.avx2.psrai.w
+    x86_avx2_psrav_d,                          // llvm.x86.avx2.psrav.d
+    x86_avx2_psrav_d_256,                      // llvm.x86.avx2.psrav.d.256
+    x86_avx2_psrl_d,                           // llvm.x86.avx2.psrl.d
+    x86_avx2_psrl_q,                           // llvm.x86.avx2.psrl.q
+    x86_avx2_psrl_w,                           // llvm.x86.avx2.psrl.w
+    x86_avx2_psrli_d,                          // llvm.x86.avx2.psrli.d
+    x86_avx2_psrli_q,                          // llvm.x86.avx2.psrli.q
+    x86_avx2_psrli_w,                          // llvm.x86.avx2.psrli.w
+    x86_avx2_psrlv_d,                          // llvm.x86.avx2.psrlv.d
+    x86_avx2_psrlv_d_256,                      // llvm.x86.avx2.psrlv.d.256
+    x86_avx2_psrlv_q,                          // llvm.x86.avx2.psrlv.q
+    x86_avx2_psrlv_q_256,                      // llvm.x86.avx2.psrlv.q.256
+    x86_avx2_psubs_b,                          // llvm.x86.avx2.psubs.b
+    x86_avx2_psubs_w,                          // llvm.x86.avx2.psubs.w
+    x86_avx2_psubus_b,                         // llvm.x86.avx2.psubus.b
+    x86_avx2_psubus_w,                         // llvm.x86.avx2.psubus.w
+    x86_avx512_add_pd_512,                     // llvm.x86.avx512.add.pd.512
+    x86_avx512_add_ps_512,                     // llvm.x86.avx512.add.ps.512
+    x86_avx512_broadcastmb_128,                // llvm.x86.avx512.broadcastmb.128
+    x86_avx512_broadcastmb_256,                // llvm.x86.avx512.broadcastmb.256
+    x86_avx512_broadcastmb_512,                // llvm.x86.avx512.broadcastmb.512
+    x86_avx512_broadcastmw_128,                // llvm.x86.avx512.broadcastmw.128
+    x86_avx512_broadcastmw_256,                // llvm.x86.avx512.broadcastmw.256
+    x86_avx512_broadcastmw_512,                // llvm.x86.avx512.broadcastmw.512
+    x86_avx512_cmp_pd_128,                     // llvm.x86.avx512.cmp.pd.128
+    x86_avx512_cmp_pd_256,                     // llvm.x86.avx512.cmp.pd.256
+    x86_avx512_cmp_pd_512,                     // llvm.x86.avx512.cmp.pd.512
+    x86_avx512_cmp_ps_128,                     // llvm.x86.avx512.cmp.ps.128
+    x86_avx512_cmp_ps_256,                     // llvm.x86.avx512.cmp.ps.256
+    x86_avx512_cmp_ps_512,                     // llvm.x86.avx512.cmp.ps.512
+    x86_avx512_cvtsi2sd64,                     // llvm.x86.avx512.cvtsi2sd64
+    x86_avx512_cvtsi2ss32,                     // llvm.x86.avx512.cvtsi2ss32
+    x86_avx512_cvtsi2ss64,                     // llvm.x86.avx512.cvtsi2ss64
+    x86_avx512_cvttsd2si,                      // llvm.x86.avx512.cvttsd2si
+    x86_avx512_cvttsd2si64,                    // llvm.x86.avx512.cvttsd2si64
+    x86_avx512_cvttsd2usi,                     // llvm.x86.avx512.cvttsd2usi
+    x86_avx512_cvttsd2usi64,                   // llvm.x86.avx512.cvttsd2usi64
+    x86_avx512_cvttss2si,                      // llvm.x86.avx512.cvttss2si
+    x86_avx512_cvttss2si64,                    // llvm.x86.avx512.cvttss2si64
+    x86_avx512_cvttss2usi,                     // llvm.x86.avx512.cvttss2usi
+    x86_avx512_cvttss2usi64,                   // llvm.x86.avx512.cvttss2usi64
+    x86_avx512_cvtusi2ss,                      // llvm.x86.avx512.cvtusi2ss
+    x86_avx512_cvtusi642sd,                    // llvm.x86.avx512.cvtusi642sd
+    x86_avx512_cvtusi642ss,                    // llvm.x86.avx512.cvtusi642ss
+    x86_avx512_dbpsadbw_128,                   // llvm.x86.avx512.dbpsadbw.128
+    x86_avx512_dbpsadbw_256,                   // llvm.x86.avx512.dbpsadbw.256
+    x86_avx512_dbpsadbw_512,                   // llvm.x86.avx512.dbpsadbw.512
+    x86_avx512_div_pd_512,                     // llvm.x86.avx512.div.pd.512
+    x86_avx512_div_ps_512,                     // llvm.x86.avx512.div.ps.512
+    x86_avx512_exp2_pd,                        // llvm.x86.avx512.exp2.pd
+    x86_avx512_exp2_ps,                        // llvm.x86.avx512.exp2.ps
+    x86_avx512_fpclass_pd_128,                 // llvm.x86.avx512.fpclass.pd.128
+    x86_avx512_fpclass_pd_256,                 // llvm.x86.avx512.fpclass.pd.256
+    x86_avx512_fpclass_pd_512,                 // llvm.x86.avx512.fpclass.pd.512
+    x86_avx512_fpclass_ps_128,                 // llvm.x86.avx512.fpclass.ps.128
+    x86_avx512_fpclass_ps_256,                 // llvm.x86.avx512.fpclass.ps.256
+    x86_avx512_fpclass_ps_512,                 // llvm.x86.avx512.fpclass.ps.512
+    x86_avx512_gather_dpd_512,                 // llvm.x86.avx512.gather.dpd.512
+    x86_avx512_gather_dpi_512,                 // llvm.x86.avx512.gather.dpi.512
+    x86_avx512_gather_dpq_512,                 // llvm.x86.avx512.gather.dpq.512
+    x86_avx512_gather_dps_512,                 // llvm.x86.avx512.gather.dps.512
+    x86_avx512_gather_qpd_512,                 // llvm.x86.avx512.gather.qpd.512
+    x86_avx512_gather_qpi_512,                 // llvm.x86.avx512.gather.qpi.512
+    x86_avx512_gather_qpq_512,                 // llvm.x86.avx512.gather.qpq.512
+    x86_avx512_gather_qps_512,                 // llvm.x86.avx512.gather.qps.512
+    x86_avx512_gather3div2_df,                 // llvm.x86.avx512.gather3div2.df
+    x86_avx512_gather3div2_di,                 // llvm.x86.avx512.gather3div2.di
+    x86_avx512_gather3div4_df,                 // llvm.x86.avx512.gather3div4.df
+    x86_avx512_gather3div4_di,                 // llvm.x86.avx512.gather3div4.di
+    x86_avx512_gather3div4_sf,                 // llvm.x86.avx512.gather3div4.sf
+    x86_avx512_gather3div4_si,                 // llvm.x86.avx512.gather3div4.si
+    x86_avx512_gather3div8_sf,                 // llvm.x86.avx512.gather3div8.sf
+    x86_avx512_gather3div8_si,                 // llvm.x86.avx512.gather3div8.si
+    x86_avx512_gather3siv2_df,                 // llvm.x86.avx512.gather3siv2.df
+    x86_avx512_gather3siv2_di,                 // llvm.x86.avx512.gather3siv2.di
+    x86_avx512_gather3siv4_df,                 // llvm.x86.avx512.gather3siv4.df
+    x86_avx512_gather3siv4_di,                 // llvm.x86.avx512.gather3siv4.di
+    x86_avx512_gather3siv4_sf,                 // llvm.x86.avx512.gather3siv4.sf
+    x86_avx512_gather3siv4_si,                 // llvm.x86.avx512.gather3siv4.si
+    x86_avx512_gather3siv8_sf,                 // llvm.x86.avx512.gather3siv8.sf
+    x86_avx512_gather3siv8_si,                 // llvm.x86.avx512.gather3siv8.si
+    x86_avx512_gatherpf_dpd_512,               // llvm.x86.avx512.gatherpf.dpd.512
+    x86_avx512_gatherpf_dps_512,               // llvm.x86.avx512.gatherpf.dps.512
+    x86_avx512_gatherpf_qpd_512,               // llvm.x86.avx512.gatherpf.qpd.512
+    x86_avx512_gatherpf_qps_512,               // llvm.x86.avx512.gatherpf.qps.512
+    x86_avx512_mask_add_sd_round,              // llvm.x86.avx512.mask.add.sd.round
+    x86_avx512_mask_add_ss_round,              // llvm.x86.avx512.mask.add.ss.round
+    x86_avx512_mask_cmp_sd,                    // llvm.x86.avx512.mask.cmp.sd
+    x86_avx512_mask_cmp_ss,                    // llvm.x86.avx512.mask.cmp.ss
+    x86_avx512_mask_compress_b_128,            // llvm.x86.avx512.mask.compress.b.128
+    x86_avx512_mask_compress_b_256,            // llvm.x86.avx512.mask.compress.b.256
+    x86_avx512_mask_compress_b_512,            // llvm.x86.avx512.mask.compress.b.512
+    x86_avx512_mask_compress_d_128,            // llvm.x86.avx512.mask.compress.d.128
+    x86_avx512_mask_compress_d_256,            // llvm.x86.avx512.mask.compress.d.256
+    x86_avx512_mask_compress_d_512,            // llvm.x86.avx512.mask.compress.d.512
+    x86_avx512_mask_compress_pd_128,           // llvm.x86.avx512.mask.compress.pd.128
+    x86_avx512_mask_compress_pd_256,           // llvm.x86.avx512.mask.compress.pd.256
+    x86_avx512_mask_compress_pd_512,           // llvm.x86.avx512.mask.compress.pd.512
+    x86_avx512_mask_compress_ps_128,           // llvm.x86.avx512.mask.compress.ps.128
+    x86_avx512_mask_compress_ps_256,           // llvm.x86.avx512.mask.compress.ps.256
+    x86_avx512_mask_compress_ps_512,           // llvm.x86.avx512.mask.compress.ps.512
+    x86_avx512_mask_compress_q_128,            // llvm.x86.avx512.mask.compress.q.128
+    x86_avx512_mask_compress_q_256,            // llvm.x86.avx512.mask.compress.q.256
+    x86_avx512_mask_compress_q_512,            // llvm.x86.avx512.mask.compress.q.512
+    x86_avx512_mask_compress_w_128,            // llvm.x86.avx512.mask.compress.w.128
+    x86_avx512_mask_compress_w_256,            // llvm.x86.avx512.mask.compress.w.256
+    x86_avx512_mask_compress_w_512,            // llvm.x86.avx512.mask.compress.w.512
+    x86_avx512_mask_conflict_d_128,            // llvm.x86.avx512.mask.conflict.d.128
+    x86_avx512_mask_conflict_d_256,            // llvm.x86.avx512.mask.conflict.d.256
+    x86_avx512_mask_conflict_d_512,            // llvm.x86.avx512.mask.conflict.d.512
+    x86_avx512_mask_conflict_q_128,            // llvm.x86.avx512.mask.conflict.q.128
+    x86_avx512_mask_conflict_q_256,            // llvm.x86.avx512.mask.conflict.q.256
+    x86_avx512_mask_conflict_q_512,            // llvm.x86.avx512.mask.conflict.q.512
+    x86_avx512_mask_cvtdq2ps_512,              // llvm.x86.avx512.mask.cvtdq2ps.512
+    x86_avx512_mask_cvtpd2dq_128,              // llvm.x86.avx512.mask.cvtpd2dq.128
+    x86_avx512_mask_cvtpd2dq_512,              // llvm.x86.avx512.mask.cvtpd2dq.512
+    x86_avx512_mask_cvtpd2ps,                  // llvm.x86.avx512.mask.cvtpd2ps
+    x86_avx512_mask_cvtpd2ps_512,              // llvm.x86.avx512.mask.cvtpd2ps.512
+    x86_avx512_mask_cvtpd2qq_128,              // llvm.x86.avx512.mask.cvtpd2qq.128
+    x86_avx512_mask_cvtpd2qq_256,              // llvm.x86.avx512.mask.cvtpd2qq.256
+    x86_avx512_mask_cvtpd2qq_512,              // llvm.x86.avx512.mask.cvtpd2qq.512
+    x86_avx512_mask_cvtpd2udq_128,             // llvm.x86.avx512.mask.cvtpd2udq.128
+    x86_avx512_mask_cvtpd2udq_256,             // llvm.x86.avx512.mask.cvtpd2udq.256
+    x86_avx512_mask_cvtpd2udq_512,             // llvm.x86.avx512.mask.cvtpd2udq.512
+    x86_avx512_mask_cvtpd2uqq_128,             // llvm.x86.avx512.mask.cvtpd2uqq.128
+    x86_avx512_mask_cvtpd2uqq_256,             // llvm.x86.avx512.mask.cvtpd2uqq.256
+    x86_avx512_mask_cvtpd2uqq_512,             // llvm.x86.avx512.mask.cvtpd2uqq.512
+    x86_avx512_mask_cvtps2dq_128,              // llvm.x86.avx512.mask.cvtps2dq.128
+    x86_avx512_mask_cvtps2dq_256,              // llvm.x86.avx512.mask.cvtps2dq.256
+    x86_avx512_mask_cvtps2dq_512,              // llvm.x86.avx512.mask.cvtps2dq.512
+    x86_avx512_mask_cvtps2pd_512,              // llvm.x86.avx512.mask.cvtps2pd.512
+    x86_avx512_mask_cvtps2qq_128,              // llvm.x86.avx512.mask.cvtps2qq.128
+    x86_avx512_mask_cvtps2qq_256,              // llvm.x86.avx512.mask.cvtps2qq.256
+    x86_avx512_mask_cvtps2qq_512,              // llvm.x86.avx512.mask.cvtps2qq.512
+    x86_avx512_mask_cvtps2udq_128,             // llvm.x86.avx512.mask.cvtps2udq.128
+    x86_avx512_mask_cvtps2udq_256,             // llvm.x86.avx512.mask.cvtps2udq.256
+    x86_avx512_mask_cvtps2udq_512,             // llvm.x86.avx512.mask.cvtps2udq.512
+    x86_avx512_mask_cvtps2uqq_128,             // llvm.x86.avx512.mask.cvtps2uqq.128
+    x86_avx512_mask_cvtps2uqq_256,             // llvm.x86.avx512.mask.cvtps2uqq.256
+    x86_avx512_mask_cvtps2uqq_512,             // llvm.x86.avx512.mask.cvtps2uqq.512
+    x86_avx512_mask_cvtqq2pd_512,              // llvm.x86.avx512.mask.cvtqq2pd.512
+    x86_avx512_mask_cvtqq2ps_128,              // llvm.x86.avx512.mask.cvtqq2ps.128
+    x86_avx512_mask_cvtqq2ps_256,              // llvm.x86.avx512.mask.cvtqq2ps.256
+    x86_avx512_mask_cvtqq2ps_512,              // llvm.x86.avx512.mask.cvtqq2ps.512
+    x86_avx512_mask_cvtsd2ss_round,            // llvm.x86.avx512.mask.cvtsd2ss.round
+    x86_avx512_mask_cvtss2sd_round,            // llvm.x86.avx512.mask.cvtss2sd.round
+    x86_avx512_mask_cvttpd2dq_128,             // llvm.x86.avx512.mask.cvttpd2dq.128
+    x86_avx512_mask_cvttpd2dq_512,             // llvm.x86.avx512.mask.cvttpd2dq.512
+    x86_avx512_mask_cvttpd2qq_128,             // llvm.x86.avx512.mask.cvttpd2qq.128
+    x86_avx512_mask_cvttpd2qq_256,             // llvm.x86.avx512.mask.cvttpd2qq.256
+    x86_avx512_mask_cvttpd2qq_512,             // llvm.x86.avx512.mask.cvttpd2qq.512
+    x86_avx512_mask_cvttpd2udq_128,            // llvm.x86.avx512.mask.cvttpd2udq.128
+    x86_avx512_mask_cvttpd2udq_256,            // llvm.x86.avx512.mask.cvttpd2udq.256
+    x86_avx512_mask_cvttpd2udq_512,            // llvm.x86.avx512.mask.cvttpd2udq.512
+    x86_avx512_mask_cvttpd2uqq_128,            // llvm.x86.avx512.mask.cvttpd2uqq.128
+    x86_avx512_mask_cvttpd2uqq_256,            // llvm.x86.avx512.mask.cvttpd2uqq.256
+    x86_avx512_mask_cvttpd2uqq_512,            // llvm.x86.avx512.mask.cvttpd2uqq.512
+    x86_avx512_mask_cvttps2dq_512,             // llvm.x86.avx512.mask.cvttps2dq.512
+    x86_avx512_mask_cvttps2qq_128,             // llvm.x86.avx512.mask.cvttps2qq.128
+    x86_avx512_mask_cvttps2qq_256,             // llvm.x86.avx512.mask.cvttps2qq.256
+    x86_avx512_mask_cvttps2qq_512,             // llvm.x86.avx512.mask.cvttps2qq.512
+    x86_avx512_mask_cvttps2udq_128,            // llvm.x86.avx512.mask.cvttps2udq.128
+    x86_avx512_mask_cvttps2udq_256,            // llvm.x86.avx512.mask.cvttps2udq.256
+    x86_avx512_mask_cvttps2udq_512,            // llvm.x86.avx512.mask.cvttps2udq.512
+    x86_avx512_mask_cvttps2uqq_128,            // llvm.x86.avx512.mask.cvttps2uqq.128
+    x86_avx512_mask_cvttps2uqq_256,            // llvm.x86.avx512.mask.cvttps2uqq.256
+    x86_avx512_mask_cvttps2uqq_512,            // llvm.x86.avx512.mask.cvttps2uqq.512
+    x86_avx512_mask_cvtudq2ps_512,             // llvm.x86.avx512.mask.cvtudq2ps.512
+    x86_avx512_mask_cvtuqq2pd_512,             // llvm.x86.avx512.mask.cvtuqq2pd.512
+    x86_avx512_mask_cvtuqq2ps_128,             // llvm.x86.avx512.mask.cvtuqq2ps.128
+    x86_avx512_mask_cvtuqq2ps_256,             // llvm.x86.avx512.mask.cvtuqq2ps.256
+    x86_avx512_mask_cvtuqq2ps_512,             // llvm.x86.avx512.mask.cvtuqq2ps.512
+    x86_avx512_mask_div_sd_round,              // llvm.x86.avx512.mask.div.sd.round
+    x86_avx512_mask_div_ss_round,              // llvm.x86.avx512.mask.div.ss.round
+    x86_avx512_mask_expand_b_128,              // llvm.x86.avx512.mask.expand.b.128
+    x86_avx512_mask_expand_b_256,              // llvm.x86.avx512.mask.expand.b.256
+    x86_avx512_mask_expand_b_512,              // llvm.x86.avx512.mask.expand.b.512
+    x86_avx512_mask_expand_d_128,              // llvm.x86.avx512.mask.expand.d.128
+    x86_avx512_mask_expand_d_256,              // llvm.x86.avx512.mask.expand.d.256
+    x86_avx512_mask_expand_d_512,              // llvm.x86.avx512.mask.expand.d.512
+    x86_avx512_mask_expand_pd_128,             // llvm.x86.avx512.mask.expand.pd.128
+    x86_avx512_mask_expand_pd_256,             // llvm.x86.avx512.mask.expand.pd.256
+    x86_avx512_mask_expand_pd_512,             // llvm.x86.avx512.mask.expand.pd.512
+    x86_avx512_mask_expand_ps_128,             // llvm.x86.avx512.mask.expand.ps.128
+    x86_avx512_mask_expand_ps_256,             // llvm.x86.avx512.mask.expand.ps.256
+    x86_avx512_mask_expand_ps_512,             // llvm.x86.avx512.mask.expand.ps.512
+    x86_avx512_mask_expand_q_128,              // llvm.x86.avx512.mask.expand.q.128
+    x86_avx512_mask_expand_q_256,              // llvm.x86.avx512.mask.expand.q.256
+    x86_avx512_mask_expand_q_512,              // llvm.x86.avx512.mask.expand.q.512
+    x86_avx512_mask_expand_w_128,              // llvm.x86.avx512.mask.expand.w.128
+    x86_avx512_mask_expand_w_256,              // llvm.x86.avx512.mask.expand.w.256
+    x86_avx512_mask_expand_w_512,              // llvm.x86.avx512.mask.expand.w.512
+    x86_avx512_mask_fixupimm_pd_128,           // llvm.x86.avx512.mask.fixupimm.pd.128
+    x86_avx512_mask_fixupimm_pd_256,           // llvm.x86.avx512.mask.fixupimm.pd.256
+    x86_avx512_mask_fixupimm_pd_512,           // llvm.x86.avx512.mask.fixupimm.pd.512
+    x86_avx512_mask_fixupimm_ps_128,           // llvm.x86.avx512.mask.fixupimm.ps.128
+    x86_avx512_mask_fixupimm_ps_256,           // llvm.x86.avx512.mask.fixupimm.ps.256
+    x86_avx512_mask_fixupimm_ps_512,           // llvm.x86.avx512.mask.fixupimm.ps.512
+    x86_avx512_mask_fixupimm_sd,               // llvm.x86.avx512.mask.fixupimm.sd
+    x86_avx512_mask_fixupimm_ss,               // llvm.x86.avx512.mask.fixupimm.ss
+    x86_avx512_mask_fpclass_sd,                // llvm.x86.avx512.mask.fpclass.sd
+    x86_avx512_mask_fpclass_ss,                // llvm.x86.avx512.mask.fpclass.ss
+    x86_avx512_mask_getexp_pd_128,             // llvm.x86.avx512.mask.getexp.pd.128
+    x86_avx512_mask_getexp_pd_256,             // llvm.x86.avx512.mask.getexp.pd.256
+    x86_avx512_mask_getexp_pd_512,             // llvm.x86.avx512.mask.getexp.pd.512
+    x86_avx512_mask_getexp_ps_128,             // llvm.x86.avx512.mask.getexp.ps.128
+    x86_avx512_mask_getexp_ps_256,             // llvm.x86.avx512.mask.getexp.ps.256
+    x86_avx512_mask_getexp_ps_512,             // llvm.x86.avx512.mask.getexp.ps.512
+    x86_avx512_mask_getexp_sd,                 // llvm.x86.avx512.mask.getexp.sd
+    x86_avx512_mask_getexp_ss,                 // llvm.x86.avx512.mask.getexp.ss
+    x86_avx512_mask_getmant_pd_128,            // llvm.x86.avx512.mask.getmant.pd.128
+    x86_avx512_mask_getmant_pd_256,            // llvm.x86.avx512.mask.getmant.pd.256
+    x86_avx512_mask_getmant_pd_512,            // llvm.x86.avx512.mask.getmant.pd.512
+    x86_avx512_mask_getmant_ps_128,            // llvm.x86.avx512.mask.getmant.ps.128
+    x86_avx512_mask_getmant_ps_256,            // llvm.x86.avx512.mask.getmant.ps.256
+    x86_avx512_mask_getmant_ps_512,            // llvm.x86.avx512.mask.getmant.ps.512
+    x86_avx512_mask_getmant_sd,                // llvm.x86.avx512.mask.getmant.sd
+    x86_avx512_mask_getmant_ss,                // llvm.x86.avx512.mask.getmant.ss
+    x86_avx512_mask_max_sd_round,              // llvm.x86.avx512.mask.max.sd.round
+    x86_avx512_mask_max_ss_round,              // llvm.x86.avx512.mask.max.ss.round
+    x86_avx512_mask_min_sd_round,              // llvm.x86.avx512.mask.min.sd.round
+    x86_avx512_mask_min_ss_round,              // llvm.x86.avx512.mask.min.ss.round
+    x86_avx512_mask_mul_sd_round,              // llvm.x86.avx512.mask.mul.sd.round
+    x86_avx512_mask_mul_ss_round,              // llvm.x86.avx512.mask.mul.ss.round
+    x86_avx512_mask_padds_b_128,               // llvm.x86.avx512.mask.padds.b.128
+    x86_avx512_mask_padds_b_256,               // llvm.x86.avx512.mask.padds.b.256
+    x86_avx512_mask_padds_b_512,               // llvm.x86.avx512.mask.padds.b.512
+    x86_avx512_mask_padds_w_128,               // llvm.x86.avx512.mask.padds.w.128
+    x86_avx512_mask_padds_w_256,               // llvm.x86.avx512.mask.padds.w.256
+    x86_avx512_mask_padds_w_512,               // llvm.x86.avx512.mask.padds.w.512
+    x86_avx512_mask_paddus_b_128,              // llvm.x86.avx512.mask.paddus.b.128
+    x86_avx512_mask_paddus_b_256,              // llvm.x86.avx512.mask.paddus.b.256
+    x86_avx512_mask_paddus_b_512,              // llvm.x86.avx512.mask.paddus.b.512
+    x86_avx512_mask_paddus_w_128,              // llvm.x86.avx512.mask.paddus.w.128
+    x86_avx512_mask_paddus_w_256,              // llvm.x86.avx512.mask.paddus.w.256
+    x86_avx512_mask_paddus_w_512,              // llvm.x86.avx512.mask.paddus.w.512
+    x86_avx512_mask_pmov_db_128,               // llvm.x86.avx512.mask.pmov.db.128
+    x86_avx512_mask_pmov_db_256,               // llvm.x86.avx512.mask.pmov.db.256
+    x86_avx512_mask_pmov_db_512,               // llvm.x86.avx512.mask.pmov.db.512
+    x86_avx512_mask_pmov_db_mem_128,           // llvm.x86.avx512.mask.pmov.db.mem.128
+    x86_avx512_mask_pmov_db_mem_256,           // llvm.x86.avx512.mask.pmov.db.mem.256
+    x86_avx512_mask_pmov_db_mem_512,           // llvm.x86.avx512.mask.pmov.db.mem.512
+    x86_avx512_mask_pmov_dw_128,               // llvm.x86.avx512.mask.pmov.dw.128
+    x86_avx512_mask_pmov_dw_256,               // llvm.x86.avx512.mask.pmov.dw.256
+    x86_avx512_mask_pmov_dw_512,               // llvm.x86.avx512.mask.pmov.dw.512
+    x86_avx512_mask_pmov_dw_mem_128,           // llvm.x86.avx512.mask.pmov.dw.mem.128
+    x86_avx512_mask_pmov_dw_mem_256,           // llvm.x86.avx512.mask.pmov.dw.mem.256
+    x86_avx512_mask_pmov_dw_mem_512,           // llvm.x86.avx512.mask.pmov.dw.mem.512
+    x86_avx512_mask_pmov_qb_128,               // llvm.x86.avx512.mask.pmov.qb.128
+    x86_avx512_mask_pmov_qb_256,               // llvm.x86.avx512.mask.pmov.qb.256
+    x86_avx512_mask_pmov_qb_512,               // llvm.x86.avx512.mask.pmov.qb.512
+    x86_avx512_mask_pmov_qb_mem_128,           // llvm.x86.avx512.mask.pmov.qb.mem.128
+    x86_avx512_mask_pmov_qb_mem_256,           // llvm.x86.avx512.mask.pmov.qb.mem.256
+    x86_avx512_mask_pmov_qb_mem_512,           // llvm.x86.avx512.mask.pmov.qb.mem.512
+    x86_avx512_mask_pmov_qd_128,               // llvm.x86.avx512.mask.pmov.qd.128
+    x86_avx512_mask_pmov_qd_256,               // llvm.x86.avx512.mask.pmov.qd.256
+    x86_avx512_mask_pmov_qd_512,               // llvm.x86.avx512.mask.pmov.qd.512
+    x86_avx512_mask_pmov_qd_mem_128,           // llvm.x86.avx512.mask.pmov.qd.mem.128
+    x86_avx512_mask_pmov_qd_mem_256,           // llvm.x86.avx512.mask.pmov.qd.mem.256
+    x86_avx512_mask_pmov_qd_mem_512,           // llvm.x86.avx512.mask.pmov.qd.mem.512
+    x86_avx512_mask_pmov_qw_128,               // llvm.x86.avx512.mask.pmov.qw.128
+    x86_avx512_mask_pmov_qw_256,               // llvm.x86.avx512.mask.pmov.qw.256
+    x86_avx512_mask_pmov_qw_512,               // llvm.x86.avx512.mask.pmov.qw.512
+    x86_avx512_mask_pmov_qw_mem_128,           // llvm.x86.avx512.mask.pmov.qw.mem.128
+    x86_avx512_mask_pmov_qw_mem_256,           // llvm.x86.avx512.mask.pmov.qw.mem.256
+    x86_avx512_mask_pmov_qw_mem_512,           // llvm.x86.avx512.mask.pmov.qw.mem.512
+    x86_avx512_mask_pmov_wb_128,               // llvm.x86.avx512.mask.pmov.wb.128
+    x86_avx512_mask_pmov_wb_256,               // llvm.x86.avx512.mask.pmov.wb.256
+    x86_avx512_mask_pmov_wb_512,               // llvm.x86.avx512.mask.pmov.wb.512
+    x86_avx512_mask_pmov_wb_mem_128,           // llvm.x86.avx512.mask.pmov.wb.mem.128
+    x86_avx512_mask_pmov_wb_mem_256,           // llvm.x86.avx512.mask.pmov.wb.mem.256
+    x86_avx512_mask_pmov_wb_mem_512,           // llvm.x86.avx512.mask.pmov.wb.mem.512
+    x86_avx512_mask_pmovs_db_128,              // llvm.x86.avx512.mask.pmovs.db.128
+    x86_avx512_mask_pmovs_db_256,              // llvm.x86.avx512.mask.pmovs.db.256
+    x86_avx512_mask_pmovs_db_512,              // llvm.x86.avx512.mask.pmovs.db.512
+    x86_avx512_mask_pmovs_db_mem_128,          // llvm.x86.avx512.mask.pmovs.db.mem.128
+    x86_avx512_mask_pmovs_db_mem_256,          // llvm.x86.avx512.mask.pmovs.db.mem.256
+    x86_avx512_mask_pmovs_db_mem_512,          // llvm.x86.avx512.mask.pmovs.db.mem.512
+    x86_avx512_mask_pmovs_dw_128,              // llvm.x86.avx512.mask.pmovs.dw.128
+    x86_avx512_mask_pmovs_dw_256,              // llvm.x86.avx512.mask.pmovs.dw.256
+    x86_avx512_mask_pmovs_dw_512,              // llvm.x86.avx512.mask.pmovs.dw.512
+    x86_avx512_mask_pmovs_dw_mem_128,          // llvm.x86.avx512.mask.pmovs.dw.mem.128
+    x86_avx512_mask_pmovs_dw_mem_256,          // llvm.x86.avx512.mask.pmovs.dw.mem.256
+    x86_avx512_mask_pmovs_dw_mem_512,          // llvm.x86.avx512.mask.pmovs.dw.mem.512
+    x86_avx512_mask_pmovs_qb_128,              // llvm.x86.avx512.mask.pmovs.qb.128
+    x86_avx512_mask_pmovs_qb_256,              // llvm.x86.avx512.mask.pmovs.qb.256
+    x86_avx512_mask_pmovs_qb_512,              // llvm.x86.avx512.mask.pmovs.qb.512
+    x86_avx512_mask_pmovs_qb_mem_128,          // llvm.x86.avx512.mask.pmovs.qb.mem.128
+    x86_avx512_mask_pmovs_qb_mem_256,          // llvm.x86.avx512.mask.pmovs.qb.mem.256
+    x86_avx512_mask_pmovs_qb_mem_512,          // llvm.x86.avx512.mask.pmovs.qb.mem.512
+    x86_avx512_mask_pmovs_qd_128,              // llvm.x86.avx512.mask.pmovs.qd.128
+    x86_avx512_mask_pmovs_qd_256,              // llvm.x86.avx512.mask.pmovs.qd.256
+    x86_avx512_mask_pmovs_qd_512,              // llvm.x86.avx512.mask.pmovs.qd.512
+    x86_avx512_mask_pmovs_qd_mem_128,          // llvm.x86.avx512.mask.pmovs.qd.mem.128
+    x86_avx512_mask_pmovs_qd_mem_256,          // llvm.x86.avx512.mask.pmovs.qd.mem.256
+    x86_avx512_mask_pmovs_qd_mem_512,          // llvm.x86.avx512.mask.pmovs.qd.mem.512
+    x86_avx512_mask_pmovs_qw_128,              // llvm.x86.avx512.mask.pmovs.qw.128
+    x86_avx512_mask_pmovs_qw_256,              // llvm.x86.avx512.mask.pmovs.qw.256
+    x86_avx512_mask_pmovs_qw_512,              // llvm.x86.avx512.mask.pmovs.qw.512
+    x86_avx512_mask_pmovs_qw_mem_128,          // llvm.x86.avx512.mask.pmovs.qw.mem.128
+    x86_avx512_mask_pmovs_qw_mem_256,          // llvm.x86.avx512.mask.pmovs.qw.mem.256
+    x86_avx512_mask_pmovs_qw_mem_512,          // llvm.x86.avx512.mask.pmovs.qw.mem.512
+    x86_avx512_mask_pmovs_wb_128,              // llvm.x86.avx512.mask.pmovs.wb.128
+    x86_avx512_mask_pmovs_wb_256,              // llvm.x86.avx512.mask.pmovs.wb.256
+    x86_avx512_mask_pmovs_wb_512,              // llvm.x86.avx512.mask.pmovs.wb.512
+    x86_avx512_mask_pmovs_wb_mem_128,          // llvm.x86.avx512.mask.pmovs.wb.mem.128
+    x86_avx512_mask_pmovs_wb_mem_256,          // llvm.x86.avx512.mask.pmovs.wb.mem.256
+    x86_avx512_mask_pmovs_wb_mem_512,          // llvm.x86.avx512.mask.pmovs.wb.mem.512
+    x86_avx512_mask_pmovus_db_128,             // llvm.x86.avx512.mask.pmovus.db.128
+    x86_avx512_mask_pmovus_db_256,             // llvm.x86.avx512.mask.pmovus.db.256
+    x86_avx512_mask_pmovus_db_512,             // llvm.x86.avx512.mask.pmovus.db.512
+    x86_avx512_mask_pmovus_db_mem_128,         // llvm.x86.avx512.mask.pmovus.db.mem.128
+    x86_avx512_mask_pmovus_db_mem_256,         // llvm.x86.avx512.mask.pmovus.db.mem.256
+    x86_avx512_mask_pmovus_db_mem_512,         // llvm.x86.avx512.mask.pmovus.db.mem.512
+    x86_avx512_mask_pmovus_dw_128,             // llvm.x86.avx512.mask.pmovus.dw.128
+    x86_avx512_mask_pmovus_dw_256,             // llvm.x86.avx512.mask.pmovus.dw.256
+    x86_avx512_mask_pmovus_dw_512,             // llvm.x86.avx512.mask.pmovus.dw.512
+    x86_avx512_mask_pmovus_dw_mem_128,         // llvm.x86.avx512.mask.pmovus.dw.mem.128
+    x86_avx512_mask_pmovus_dw_mem_256,         // llvm.x86.avx512.mask.pmovus.dw.mem.256
+    x86_avx512_mask_pmovus_dw_mem_512,         // llvm.x86.avx512.mask.pmovus.dw.mem.512
+    x86_avx512_mask_pmovus_qb_128,             // llvm.x86.avx512.mask.pmovus.qb.128
+    x86_avx512_mask_pmovus_qb_256,             // llvm.x86.avx512.mask.pmovus.qb.256
+    x86_avx512_mask_pmovus_qb_512,             // llvm.x86.avx512.mask.pmovus.qb.512
+    x86_avx512_mask_pmovus_qb_mem_128,         // llvm.x86.avx512.mask.pmovus.qb.mem.128
+    x86_avx512_mask_pmovus_qb_mem_256,         // llvm.x86.avx512.mask.pmovus.qb.mem.256
+    x86_avx512_mask_pmovus_qb_mem_512,         // llvm.x86.avx512.mask.pmovus.qb.mem.512
+    x86_avx512_mask_pmovus_qd_128,             // llvm.x86.avx512.mask.pmovus.qd.128
+    x86_avx512_mask_pmovus_qd_256,             // llvm.x86.avx512.mask.pmovus.qd.256
+    x86_avx512_mask_pmovus_qd_512,             // llvm.x86.avx512.mask.pmovus.qd.512
+    x86_avx512_mask_pmovus_qd_mem_128,         // llvm.x86.avx512.mask.pmovus.qd.mem.128
+    x86_avx512_mask_pmovus_qd_mem_256,         // llvm.x86.avx512.mask.pmovus.qd.mem.256
+    x86_avx512_mask_pmovus_qd_mem_512,         // llvm.x86.avx512.mask.pmovus.qd.mem.512
+    x86_avx512_mask_pmovus_qw_128,             // llvm.x86.avx512.mask.pmovus.qw.128
+    x86_avx512_mask_pmovus_qw_256,             // llvm.x86.avx512.mask.pmovus.qw.256
+    x86_avx512_mask_pmovus_qw_512,             // llvm.x86.avx512.mask.pmovus.qw.512
+    x86_avx512_mask_pmovus_qw_mem_128,         // llvm.x86.avx512.mask.pmovus.qw.mem.128
+    x86_avx512_mask_pmovus_qw_mem_256,         // llvm.x86.avx512.mask.pmovus.qw.mem.256
+    x86_avx512_mask_pmovus_qw_mem_512,         // llvm.x86.avx512.mask.pmovus.qw.mem.512
+    x86_avx512_mask_pmovus_wb_128,             // llvm.x86.avx512.mask.pmovus.wb.128
+    x86_avx512_mask_pmovus_wb_256,             // llvm.x86.avx512.mask.pmovus.wb.256
+    x86_avx512_mask_pmovus_wb_512,             // llvm.x86.avx512.mask.pmovus.wb.512
+    x86_avx512_mask_pmovus_wb_mem_128,         // llvm.x86.avx512.mask.pmovus.wb.mem.128
+    x86_avx512_mask_pmovus_wb_mem_256,         // llvm.x86.avx512.mask.pmovus.wb.mem.256
+    x86_avx512_mask_pmovus_wb_mem_512,         // llvm.x86.avx512.mask.pmovus.wb.mem.512
+    x86_avx512_mask_pmultishift_qb_128,        // llvm.x86.avx512.mask.pmultishift.qb.128
+    x86_avx512_mask_pmultishift_qb_256,        // llvm.x86.avx512.mask.pmultishift.qb.256
+    x86_avx512_mask_pmultishift_qb_512,        // llvm.x86.avx512.mask.pmultishift.qb.512
+    x86_avx512_mask_psubs_b_128,               // llvm.x86.avx512.mask.psubs.b.128
+    x86_avx512_mask_psubs_b_256,               // llvm.x86.avx512.mask.psubs.b.256
+    x86_avx512_mask_psubs_b_512,               // llvm.x86.avx512.mask.psubs.b.512
+    x86_avx512_mask_psubs_w_128,               // llvm.x86.avx512.mask.psubs.w.128
+    x86_avx512_mask_psubs_w_256,               // llvm.x86.avx512.mask.psubs.w.256
+    x86_avx512_mask_psubs_w_512,               // llvm.x86.avx512.mask.psubs.w.512
+    x86_avx512_mask_psubus_b_128,              // llvm.x86.avx512.mask.psubus.b.128
+    x86_avx512_mask_psubus_b_256,              // llvm.x86.avx512.mask.psubus.b.256
+    x86_avx512_mask_psubus_b_512,              // llvm.x86.avx512.mask.psubus.b.512
+    x86_avx512_mask_psubus_w_128,              // llvm.x86.avx512.mask.psubus.w.128
+    x86_avx512_mask_psubus_w_256,              // llvm.x86.avx512.mask.psubus.w.256
+    x86_avx512_mask_psubus_w_512,              // llvm.x86.avx512.mask.psubus.w.512
+    x86_avx512_mask_range_pd_128,              // llvm.x86.avx512.mask.range.pd.128
+    x86_avx512_mask_range_pd_256,              // llvm.x86.avx512.mask.range.pd.256
+    x86_avx512_mask_range_pd_512,              // llvm.x86.avx512.mask.range.pd.512
+    x86_avx512_mask_range_ps_128,              // llvm.x86.avx512.mask.range.ps.128
+    x86_avx512_mask_range_ps_256,              // llvm.x86.avx512.mask.range.ps.256
+    x86_avx512_mask_range_ps_512,              // llvm.x86.avx512.mask.range.ps.512
+    x86_avx512_mask_range_sd,                  // llvm.x86.avx512.mask.range.sd
+    x86_avx512_mask_range_ss,                  // llvm.x86.avx512.mask.range.ss
+    x86_avx512_mask_reduce_pd_128,             // llvm.x86.avx512.mask.reduce.pd.128
+    x86_avx512_mask_reduce_pd_256,             // llvm.x86.avx512.mask.reduce.pd.256
+    x86_avx512_mask_reduce_pd_512,             // llvm.x86.avx512.mask.reduce.pd.512
+    x86_avx512_mask_reduce_ps_128,             // llvm.x86.avx512.mask.reduce.ps.128
+    x86_avx512_mask_reduce_ps_256,             // llvm.x86.avx512.mask.reduce.ps.256
+    x86_avx512_mask_reduce_ps_512,             // llvm.x86.avx512.mask.reduce.ps.512
+    x86_avx512_mask_reduce_sd,                 // llvm.x86.avx512.mask.reduce.sd
+    x86_avx512_mask_reduce_ss,                 // llvm.x86.avx512.mask.reduce.ss
+    x86_avx512_mask_rndscale_pd_128,           // llvm.x86.avx512.mask.rndscale.pd.128
+    x86_avx512_mask_rndscale_pd_256,           // llvm.x86.avx512.mask.rndscale.pd.256
+    x86_avx512_mask_rndscale_pd_512,           // llvm.x86.avx512.mask.rndscale.pd.512
+    x86_avx512_mask_rndscale_ps_128,           // llvm.x86.avx512.mask.rndscale.ps.128
+    x86_avx512_mask_rndscale_ps_256,           // llvm.x86.avx512.mask.rndscale.ps.256
+    x86_avx512_mask_rndscale_ps_512,           // llvm.x86.avx512.mask.rndscale.ps.512
+    x86_avx512_mask_rndscale_sd,               // llvm.x86.avx512.mask.rndscale.sd
+    x86_avx512_mask_rndscale_ss,               // llvm.x86.avx512.mask.rndscale.ss
+    x86_avx512_mask_scalef_pd_128,             // llvm.x86.avx512.mask.scalef.pd.128
+    x86_avx512_mask_scalef_pd_256,             // llvm.x86.avx512.mask.scalef.pd.256
+    x86_avx512_mask_scalef_pd_512,             // llvm.x86.avx512.mask.scalef.pd.512
+    x86_avx512_mask_scalef_ps_128,             // llvm.x86.avx512.mask.scalef.ps.128
+    x86_avx512_mask_scalef_ps_256,             // llvm.x86.avx512.mask.scalef.ps.256
+    x86_avx512_mask_scalef_ps_512,             // llvm.x86.avx512.mask.scalef.ps.512
+    x86_avx512_mask_scalef_sd,                 // llvm.x86.avx512.mask.scalef.sd
+    x86_avx512_mask_scalef_ss,                 // llvm.x86.avx512.mask.scalef.ss
+    x86_avx512_mask_sqrt_sd,                   // llvm.x86.avx512.mask.sqrt.sd
+    x86_avx512_mask_sqrt_ss,                   // llvm.x86.avx512.mask.sqrt.ss
+    x86_avx512_mask_sub_sd_round,              // llvm.x86.avx512.mask.sub.sd.round
+    x86_avx512_mask_sub_ss_round,              // llvm.x86.avx512.mask.sub.ss.round
+    x86_avx512_mask_vcvtph2ps_128,             // llvm.x86.avx512.mask.vcvtph2ps.128
+    x86_avx512_mask_vcvtph2ps_256,             // llvm.x86.avx512.mask.vcvtph2ps.256
+    x86_avx512_mask_vcvtph2ps_512,             // llvm.x86.avx512.mask.vcvtph2ps.512
+    x86_avx512_mask_vcvtps2ph_128,             // llvm.x86.avx512.mask.vcvtps2ph.128
+    x86_avx512_mask_vcvtps2ph_256,             // llvm.x86.avx512.mask.vcvtps2ph.256
+    x86_avx512_mask_vcvtps2ph_512,             // llvm.x86.avx512.mask.vcvtps2ph.512
+    x86_avx512_mask_vpshldv_d_128,             // llvm.x86.avx512.mask.vpshldv.d.128
+    x86_avx512_mask_vpshldv_d_256,             // llvm.x86.avx512.mask.vpshldv.d.256
+    x86_avx512_mask_vpshldv_d_512,             // llvm.x86.avx512.mask.vpshldv.d.512
+    x86_avx512_mask_vpshldv_q_128,             // llvm.x86.avx512.mask.vpshldv.q.128
+    x86_avx512_mask_vpshldv_q_256,             // llvm.x86.avx512.mask.vpshldv.q.256
+    x86_avx512_mask_vpshldv_q_512,             // llvm.x86.avx512.mask.vpshldv.q.512
+    x86_avx512_mask_vpshldv_w_128,             // llvm.x86.avx512.mask.vpshldv.w.128
+    x86_avx512_mask_vpshldv_w_256,             // llvm.x86.avx512.mask.vpshldv.w.256
+    x86_avx512_mask_vpshldv_w_512,             // llvm.x86.avx512.mask.vpshldv.w.512
+    x86_avx512_mask_vpshrdv_d_128,             // llvm.x86.avx512.mask.vpshrdv.d.128
+    x86_avx512_mask_vpshrdv_d_256,             // llvm.x86.avx512.mask.vpshrdv.d.256
+    x86_avx512_mask_vpshrdv_d_512,             // llvm.x86.avx512.mask.vpshrdv.d.512
+    x86_avx512_mask_vpshrdv_q_128,             // llvm.x86.avx512.mask.vpshrdv.q.128
+    x86_avx512_mask_vpshrdv_q_256,             // llvm.x86.avx512.mask.vpshrdv.q.256
+    x86_avx512_mask_vpshrdv_q_512,             // llvm.x86.avx512.mask.vpshrdv.q.512
+    x86_avx512_mask_vpshrdv_w_128,             // llvm.x86.avx512.mask.vpshrdv.w.128
+    x86_avx512_mask_vpshrdv_w_256,             // llvm.x86.avx512.mask.vpshrdv.w.256
+    x86_avx512_mask_vpshrdv_w_512,             // llvm.x86.avx512.mask.vpshrdv.w.512
+    x86_avx512_mask_vpshufbitqmb_128,          // llvm.x86.avx512.mask.vpshufbitqmb.128
+    x86_avx512_mask_vpshufbitqmb_256,          // llvm.x86.avx512.mask.vpshufbitqmb.256
+    x86_avx512_mask_vpshufbitqmb_512,          // llvm.x86.avx512.mask.vpshufbitqmb.512
+    x86_avx512_maskz_fixupimm_pd_128,          // llvm.x86.avx512.maskz.fixupimm.pd.128
+    x86_avx512_maskz_fixupimm_pd_256,          // llvm.x86.avx512.maskz.fixupimm.pd.256
+    x86_avx512_maskz_fixupimm_pd_512,          // llvm.x86.avx512.maskz.fixupimm.pd.512
+    x86_avx512_maskz_fixupimm_ps_128,          // llvm.x86.avx512.maskz.fixupimm.ps.128
+    x86_avx512_maskz_fixupimm_ps_256,          // llvm.x86.avx512.maskz.fixupimm.ps.256
+    x86_avx512_maskz_fixupimm_ps_512,          // llvm.x86.avx512.maskz.fixupimm.ps.512
+    x86_avx512_maskz_fixupimm_sd,              // llvm.x86.avx512.maskz.fixupimm.sd
+    x86_avx512_maskz_fixupimm_ss,              // llvm.x86.avx512.maskz.fixupimm.ss
+    x86_avx512_maskz_vpshldv_d_128,            // llvm.x86.avx512.maskz.vpshldv.d.128
+    x86_avx512_maskz_vpshldv_d_256,            // llvm.x86.avx512.maskz.vpshldv.d.256
+    x86_avx512_maskz_vpshldv_d_512,            // llvm.x86.avx512.maskz.vpshldv.d.512
+    x86_avx512_maskz_vpshldv_q_128,            // llvm.x86.avx512.maskz.vpshldv.q.128
+    x86_avx512_maskz_vpshldv_q_256,            // llvm.x86.avx512.maskz.vpshldv.q.256
+    x86_avx512_maskz_vpshldv_q_512,            // llvm.x86.avx512.maskz.vpshldv.q.512
+    x86_avx512_maskz_vpshldv_w_128,            // llvm.x86.avx512.maskz.vpshldv.w.128
+    x86_avx512_maskz_vpshldv_w_256,            // llvm.x86.avx512.maskz.vpshldv.w.256
+    x86_avx512_maskz_vpshldv_w_512,            // llvm.x86.avx512.maskz.vpshldv.w.512
+    x86_avx512_maskz_vpshrdv_d_128,            // llvm.x86.avx512.maskz.vpshrdv.d.128
+    x86_avx512_maskz_vpshrdv_d_256,            // llvm.x86.avx512.maskz.vpshrdv.d.256
+    x86_avx512_maskz_vpshrdv_d_512,            // llvm.x86.avx512.maskz.vpshrdv.d.512
+    x86_avx512_maskz_vpshrdv_q_128,            // llvm.x86.avx512.maskz.vpshrdv.q.128
+    x86_avx512_maskz_vpshrdv_q_256,            // llvm.x86.avx512.maskz.vpshrdv.q.256
+    x86_avx512_maskz_vpshrdv_q_512,            // llvm.x86.avx512.maskz.vpshrdv.q.512
+    x86_avx512_maskz_vpshrdv_w_128,            // llvm.x86.avx512.maskz.vpshrdv.w.128
+    x86_avx512_maskz_vpshrdv_w_256,            // llvm.x86.avx512.maskz.vpshrdv.w.256
+    x86_avx512_maskz_vpshrdv_w_512,            // llvm.x86.avx512.maskz.vpshrdv.w.512
+    x86_avx512_max_pd_512,                     // llvm.x86.avx512.max.pd.512
+    x86_avx512_max_ps_512,                     // llvm.x86.avx512.max.ps.512
+    x86_avx512_min_pd_512,                     // llvm.x86.avx512.min.pd.512
+    x86_avx512_min_ps_512,                     // llvm.x86.avx512.min.ps.512
+    x86_avx512_mul_pd_512,                     // llvm.x86.avx512.mul.pd.512
+    x86_avx512_mul_ps_512,                     // llvm.x86.avx512.mul.ps.512
+    x86_avx512_packssdw_512,                   // llvm.x86.avx512.packssdw.512
+    x86_avx512_packsswb_512,                   // llvm.x86.avx512.packsswb.512
+    x86_avx512_packusdw_512,                   // llvm.x86.avx512.packusdw.512
+    x86_avx512_packuswb_512,                   // llvm.x86.avx512.packuswb.512
+    x86_avx512_permvar_df_256,                 // llvm.x86.avx512.permvar.df.256
+    x86_avx512_permvar_df_512,                 // llvm.x86.avx512.permvar.df.512
+    x86_avx512_permvar_di_256,                 // llvm.x86.avx512.permvar.di.256
+    x86_avx512_permvar_di_512,                 // llvm.x86.avx512.permvar.di.512
+    x86_avx512_permvar_hi_128,                 // llvm.x86.avx512.permvar.hi.128
+    x86_avx512_permvar_hi_256,                 // llvm.x86.avx512.permvar.hi.256
+    x86_avx512_permvar_hi_512,                 // llvm.x86.avx512.permvar.hi.512
+    x86_avx512_permvar_qi_128,                 // llvm.x86.avx512.permvar.qi.128
+    x86_avx512_permvar_qi_256,                 // llvm.x86.avx512.permvar.qi.256
+    x86_avx512_permvar_qi_512,                 // llvm.x86.avx512.permvar.qi.512
+    x86_avx512_permvar_sf_512,                 // llvm.x86.avx512.permvar.sf.512
+    x86_avx512_permvar_si_512,                 // llvm.x86.avx512.permvar.si.512
+    x86_avx512_pmaddubs_w_512,                 // llvm.x86.avx512.pmaddubs.w.512
+    x86_avx512_pmaddw_d_512,                   // llvm.x86.avx512.pmaddw.d.512
+    x86_avx512_pmul_hr_sw_512,                 // llvm.x86.avx512.pmul.hr.sw.512
+    x86_avx512_pmulh_w_512,                    // llvm.x86.avx512.pmulh.w.512
+    x86_avx512_pmulhu_w_512,                   // llvm.x86.avx512.pmulhu.w.512
+    x86_avx512_prol_d_128,                     // llvm.x86.avx512.prol.d.128
+    x86_avx512_prol_d_256,                     // llvm.x86.avx512.prol.d.256
+    x86_avx512_prol_d_512,                     // llvm.x86.avx512.prol.d.512
+    x86_avx512_prol_q_128,                     // llvm.x86.avx512.prol.q.128
+    x86_avx512_prol_q_256,                     // llvm.x86.avx512.prol.q.256
+    x86_avx512_prol_q_512,                     // llvm.x86.avx512.prol.q.512
+    x86_avx512_prolv_d_128,                    // llvm.x86.avx512.prolv.d.128
+    x86_avx512_prolv_d_256,                    // llvm.x86.avx512.prolv.d.256
+    x86_avx512_prolv_d_512,                    // llvm.x86.avx512.prolv.d.512
+    x86_avx512_prolv_q_128,                    // llvm.x86.avx512.prolv.q.128
+    x86_avx512_prolv_q_256,                    // llvm.x86.avx512.prolv.q.256
+    x86_avx512_prolv_q_512,                    // llvm.x86.avx512.prolv.q.512
+    x86_avx512_pror_d_128,                     // llvm.x86.avx512.pror.d.128
+    x86_avx512_pror_d_256,                     // llvm.x86.avx512.pror.d.256
+    x86_avx512_pror_d_512,                     // llvm.x86.avx512.pror.d.512
+    x86_avx512_pror_q_128,                     // llvm.x86.avx512.pror.q.128
+    x86_avx512_pror_q_256,                     // llvm.x86.avx512.pror.q.256
+    x86_avx512_pror_q_512,                     // llvm.x86.avx512.pror.q.512
+    x86_avx512_prorv_d_128,                    // llvm.x86.avx512.prorv.d.128
+    x86_avx512_prorv_d_256,                    // llvm.x86.avx512.prorv.d.256
+    x86_avx512_prorv_d_512,                    // llvm.x86.avx512.prorv.d.512
+    x86_avx512_prorv_q_128,                    // llvm.x86.avx512.prorv.q.128
+    x86_avx512_prorv_q_256,                    // llvm.x86.avx512.prorv.q.256
+    x86_avx512_prorv_q_512,                    // llvm.x86.avx512.prorv.q.512
+    x86_avx512_psad_bw_512,                    // llvm.x86.avx512.psad.bw.512
+    x86_avx512_pshuf_b_512,                    // llvm.x86.avx512.pshuf.b.512
+    x86_avx512_psll_d_512,                     // llvm.x86.avx512.psll.d.512
+    x86_avx512_psll_q_512,                     // llvm.x86.avx512.psll.q.512
+    x86_avx512_psll_w_512,                     // llvm.x86.avx512.psll.w.512
+    x86_avx512_pslli_d_512,                    // llvm.x86.avx512.pslli.d.512
+    x86_avx512_pslli_q_512,                    // llvm.x86.avx512.pslli.q.512
+    x86_avx512_pslli_w_512,                    // llvm.x86.avx512.pslli.w.512
+    x86_avx512_psllv_d_512,                    // llvm.x86.avx512.psllv.d.512
+    x86_avx512_psllv_q_512,                    // llvm.x86.avx512.psllv.q.512
+    x86_avx512_psllv_w_128,                    // llvm.x86.avx512.psllv.w.128
+    x86_avx512_psllv_w_256,                    // llvm.x86.avx512.psllv.w.256
+    x86_avx512_psllv_w_512,                    // llvm.x86.avx512.psllv.w.512
+    x86_avx512_psra_d_512,                     // llvm.x86.avx512.psra.d.512
+    x86_avx512_psra_q_128,                     // llvm.x86.avx512.psra.q.128
+    x86_avx512_psra_q_256,                     // llvm.x86.avx512.psra.q.256
+    x86_avx512_psra_q_512,                     // llvm.x86.avx512.psra.q.512
+    x86_avx512_psra_w_512,                     // llvm.x86.avx512.psra.w.512
+    x86_avx512_psrai_d_512,                    // llvm.x86.avx512.psrai.d.512
+    x86_avx512_psrai_q_128,                    // llvm.x86.avx512.psrai.q.128
+    x86_avx512_psrai_q_256,                    // llvm.x86.avx512.psrai.q.256
+    x86_avx512_psrai_q_512,                    // llvm.x86.avx512.psrai.q.512
+    x86_avx512_psrai_w_512,                    // llvm.x86.avx512.psrai.w.512
+    x86_avx512_psrav_d_512,                    // llvm.x86.avx512.psrav.d.512
+    x86_avx512_psrav_q_128,                    // llvm.x86.avx512.psrav.q.128
+    x86_avx512_psrav_q_256,                    // llvm.x86.avx512.psrav.q.256
+    x86_avx512_psrav_q_512,                    // llvm.x86.avx512.psrav.q.512
+    x86_avx512_psrav_w_128,                    // llvm.x86.avx512.psrav.w.128
+    x86_avx512_psrav_w_256,                    // llvm.x86.avx512.psrav.w.256
+    x86_avx512_psrav_w_512,                    // llvm.x86.avx512.psrav.w.512
+    x86_avx512_psrl_d_512,                     // llvm.x86.avx512.psrl.d.512
+    x86_avx512_psrl_q_512,                     // llvm.x86.avx512.psrl.q.512
+    x86_avx512_psrl_w_512,                     // llvm.x86.avx512.psrl.w.512
+    x86_avx512_psrli_d_512,                    // llvm.x86.avx512.psrli.d.512
+    x86_avx512_psrli_q_512,                    // llvm.x86.avx512.psrli.q.512
+    x86_avx512_psrli_w_512,                    // llvm.x86.avx512.psrli.w.512
+    x86_avx512_psrlv_d_512,                    // llvm.x86.avx512.psrlv.d.512
+    x86_avx512_psrlv_q_512,                    // llvm.x86.avx512.psrlv.q.512
+    x86_avx512_psrlv_w_128,                    // llvm.x86.avx512.psrlv.w.128
+    x86_avx512_psrlv_w_256,                    // llvm.x86.avx512.psrlv.w.256
+    x86_avx512_psrlv_w_512,                    // llvm.x86.avx512.psrlv.w.512
+    x86_avx512_pternlog_d_128,                 // llvm.x86.avx512.pternlog.d.128
+    x86_avx512_pternlog_d_256,                 // llvm.x86.avx512.pternlog.d.256
+    x86_avx512_pternlog_d_512,                 // llvm.x86.avx512.pternlog.d.512
+    x86_avx512_pternlog_q_128,                 // llvm.x86.avx512.pternlog.q.128
+    x86_avx512_pternlog_q_256,                 // llvm.x86.avx512.pternlog.q.256
+    x86_avx512_pternlog_q_512,                 // llvm.x86.avx512.pternlog.q.512
+    x86_avx512_rcp14_pd_128,                   // llvm.x86.avx512.rcp14.pd.128
+    x86_avx512_rcp14_pd_256,                   // llvm.x86.avx512.rcp14.pd.256
+    x86_avx512_rcp14_pd_512,                   // llvm.x86.avx512.rcp14.pd.512
+    x86_avx512_rcp14_ps_128,                   // llvm.x86.avx512.rcp14.ps.128
+    x86_avx512_rcp14_ps_256,                   // llvm.x86.avx512.rcp14.ps.256
+    x86_avx512_rcp14_ps_512,                   // llvm.x86.avx512.rcp14.ps.512
+    x86_avx512_rcp14_sd,                       // llvm.x86.avx512.rcp14.sd
+    x86_avx512_rcp14_ss,                       // llvm.x86.avx512.rcp14.ss
+    x86_avx512_rcp28_pd,                       // llvm.x86.avx512.rcp28.pd
+    x86_avx512_rcp28_ps,                       // llvm.x86.avx512.rcp28.ps
+    x86_avx512_rcp28_sd,                       // llvm.x86.avx512.rcp28.sd
+    x86_avx512_rcp28_ss,                       // llvm.x86.avx512.rcp28.ss
+    x86_avx512_rsqrt14_pd_128,                 // llvm.x86.avx512.rsqrt14.pd.128
+    x86_avx512_rsqrt14_pd_256,                 // llvm.x86.avx512.rsqrt14.pd.256
+    x86_avx512_rsqrt14_pd_512,                 // llvm.x86.avx512.rsqrt14.pd.512
+    x86_avx512_rsqrt14_ps_128,                 // llvm.x86.avx512.rsqrt14.ps.128
+    x86_avx512_rsqrt14_ps_256,                 // llvm.x86.avx512.rsqrt14.ps.256
+    x86_avx512_rsqrt14_ps_512,                 // llvm.x86.avx512.rsqrt14.ps.512
+    x86_avx512_rsqrt14_sd,                     // llvm.x86.avx512.rsqrt14.sd
+    x86_avx512_rsqrt14_ss,                     // llvm.x86.avx512.rsqrt14.ss
+    x86_avx512_rsqrt28_pd,                     // llvm.x86.avx512.rsqrt28.pd
+    x86_avx512_rsqrt28_ps,                     // llvm.x86.avx512.rsqrt28.ps
+    x86_avx512_rsqrt28_sd,                     // llvm.x86.avx512.rsqrt28.sd
+    x86_avx512_rsqrt28_ss,                     // llvm.x86.avx512.rsqrt28.ss
+    x86_avx512_scatter_dpd_512,                // llvm.x86.avx512.scatter.dpd.512
+    x86_avx512_scatter_dpi_512,                // llvm.x86.avx512.scatter.dpi.512
+    x86_avx512_scatter_dpq_512,                // llvm.x86.avx512.scatter.dpq.512
+    x86_avx512_scatter_dps_512,                // llvm.x86.avx512.scatter.dps.512
+    x86_avx512_scatter_qpd_512,                // llvm.x86.avx512.scatter.qpd.512
+    x86_avx512_scatter_qpi_512,                // llvm.x86.avx512.scatter.qpi.512
+    x86_avx512_scatter_qpq_512,                // llvm.x86.avx512.scatter.qpq.512
+    x86_avx512_scatter_qps_512,                // llvm.x86.avx512.scatter.qps.512
+    x86_avx512_scatterdiv2_df,                 // llvm.x86.avx512.scatterdiv2.df
+    x86_avx512_scatterdiv2_di,                 // llvm.x86.avx512.scatterdiv2.di
+    x86_avx512_scatterdiv4_df,                 // llvm.x86.avx512.scatterdiv4.df
+    x86_avx512_scatterdiv4_di,                 // llvm.x86.avx512.scatterdiv4.di
+    x86_avx512_scatterdiv4_sf,                 // llvm.x86.avx512.scatterdiv4.sf
+    x86_avx512_scatterdiv4_si,                 // llvm.x86.avx512.scatterdiv4.si
+    x86_avx512_scatterdiv8_sf,                 // llvm.x86.avx512.scatterdiv8.sf
+    x86_avx512_scatterdiv8_si,                 // llvm.x86.avx512.scatterdiv8.si
+    x86_avx512_scatterpf_dpd_512,              // llvm.x86.avx512.scatterpf.dpd.512
+    x86_avx512_scatterpf_dps_512,              // llvm.x86.avx512.scatterpf.dps.512
+    x86_avx512_scatterpf_qpd_512,              // llvm.x86.avx512.scatterpf.qpd.512
+    x86_avx512_scatterpf_qps_512,              // llvm.x86.avx512.scatterpf.qps.512
+    x86_avx512_scattersiv2_df,                 // llvm.x86.avx512.scattersiv2.df
+    x86_avx512_scattersiv2_di,                 // llvm.x86.avx512.scattersiv2.di
+    x86_avx512_scattersiv4_df,                 // llvm.x86.avx512.scattersiv4.df
+    x86_avx512_scattersiv4_di,                 // llvm.x86.avx512.scattersiv4.di
+    x86_avx512_scattersiv4_sf,                 // llvm.x86.avx512.scattersiv4.sf
+    x86_avx512_scattersiv4_si,                 // llvm.x86.avx512.scattersiv4.si
+    x86_avx512_scattersiv8_sf,                 // llvm.x86.avx512.scattersiv8.sf
+    x86_avx512_scattersiv8_si,                 // llvm.x86.avx512.scattersiv8.si
+    x86_avx512_sqrt_pd_512,                    // llvm.x86.avx512.sqrt.pd.512
+    x86_avx512_sqrt_ps_512,                    // llvm.x86.avx512.sqrt.ps.512
+    x86_avx512_sub_pd_512,                     // llvm.x86.avx512.sub.pd.512
+    x86_avx512_sub_ps_512,                     // llvm.x86.avx512.sub.ps.512
+    x86_avx512_vcomi_sd,                       // llvm.x86.avx512.vcomi.sd
+    x86_avx512_vcomi_ss,                       // llvm.x86.avx512.vcomi.ss
+    x86_avx512_vcvtsd2si32,                    // llvm.x86.avx512.vcvtsd2si32
+    x86_avx512_vcvtsd2si64,                    // llvm.x86.avx512.vcvtsd2si64
+    x86_avx512_vcvtsd2usi32,                   // llvm.x86.avx512.vcvtsd2usi32
+    x86_avx512_vcvtsd2usi64,                   // llvm.x86.avx512.vcvtsd2usi64
+    x86_avx512_vcvtss2si32,                    // llvm.x86.avx512.vcvtss2si32
+    x86_avx512_vcvtss2si64,                    // llvm.x86.avx512.vcvtss2si64
+    x86_avx512_vcvtss2usi32,                   // llvm.x86.avx512.vcvtss2usi32
+    x86_avx512_vcvtss2usi64,                   // llvm.x86.avx512.vcvtss2usi64
+    x86_avx512_vfmadd_f32,                     // llvm.x86.avx512.vfmadd.f32
+    x86_avx512_vfmadd_f64,                     // llvm.x86.avx512.vfmadd.f64
+    x86_avx512_vfmadd_pd_512,                  // llvm.x86.avx512.vfmadd.pd.512
+    x86_avx512_vfmadd_ps_512,                  // llvm.x86.avx512.vfmadd.ps.512
+    x86_avx512_vfmaddsub_pd_512,               // llvm.x86.avx512.vfmaddsub.pd.512
+    x86_avx512_vfmaddsub_ps_512,               // llvm.x86.avx512.vfmaddsub.ps.512
+    x86_avx512_vpdpbusd_128,                   // llvm.x86.avx512.vpdpbusd.128
+    x86_avx512_vpdpbusd_256,                   // llvm.x86.avx512.vpdpbusd.256
+    x86_avx512_vpdpbusd_512,                   // llvm.x86.avx512.vpdpbusd.512
+    x86_avx512_vpdpbusds_128,                  // llvm.x86.avx512.vpdpbusds.128
+    x86_avx512_vpdpbusds_256,                  // llvm.x86.avx512.vpdpbusds.256
+    x86_avx512_vpdpbusds_512,                  // llvm.x86.avx512.vpdpbusds.512
+    x86_avx512_vpdpwssd_128,                   // llvm.x86.avx512.vpdpwssd.128
+    x86_avx512_vpdpwssd_256,                   // llvm.x86.avx512.vpdpwssd.256
+    x86_avx512_vpdpwssd_512,                   // llvm.x86.avx512.vpdpwssd.512
+    x86_avx512_vpdpwssds_128,                  // llvm.x86.avx512.vpdpwssds.128
+    x86_avx512_vpdpwssds_256,                  // llvm.x86.avx512.vpdpwssds.256
+    x86_avx512_vpdpwssds_512,                  // llvm.x86.avx512.vpdpwssds.512
+    x86_avx512_vpermi2var_d_128,               // llvm.x86.avx512.vpermi2var.d.128
+    x86_avx512_vpermi2var_d_256,               // llvm.x86.avx512.vpermi2var.d.256
+    x86_avx512_vpermi2var_d_512,               // llvm.x86.avx512.vpermi2var.d.512
+    x86_avx512_vpermi2var_hi_128,              // llvm.x86.avx512.vpermi2var.hi.128
+    x86_avx512_vpermi2var_hi_256,              // llvm.x86.avx512.vpermi2var.hi.256
+    x86_avx512_vpermi2var_hi_512,              // llvm.x86.avx512.vpermi2var.hi.512
+    x86_avx512_vpermi2var_pd_128,              // llvm.x86.avx512.vpermi2var.pd.128
+    x86_avx512_vpermi2var_pd_256,              // llvm.x86.avx512.vpermi2var.pd.256
+    x86_avx512_vpermi2var_pd_512,              // llvm.x86.avx512.vpermi2var.pd.512
+    x86_avx512_vpermi2var_ps_128,              // llvm.x86.avx512.vpermi2var.ps.128
+    x86_avx512_vpermi2var_ps_256,              // llvm.x86.avx512.vpermi2var.ps.256
+    x86_avx512_vpermi2var_ps_512,              // llvm.x86.avx512.vpermi2var.ps.512
+    x86_avx512_vpermi2var_q_128,               // llvm.x86.avx512.vpermi2var.q.128
+    x86_avx512_vpermi2var_q_256,               // llvm.x86.avx512.vpermi2var.q.256
+    x86_avx512_vpermi2var_q_512,               // llvm.x86.avx512.vpermi2var.q.512
+    x86_avx512_vpermi2var_qi_128,              // llvm.x86.avx512.vpermi2var.qi.128
+    x86_avx512_vpermi2var_qi_256,              // llvm.x86.avx512.vpermi2var.qi.256
+    x86_avx512_vpermi2var_qi_512,              // llvm.x86.avx512.vpermi2var.qi.512
+    x86_avx512_vpermilvar_pd_512,              // llvm.x86.avx512.vpermilvar.pd.512
+    x86_avx512_vpermilvar_ps_512,              // llvm.x86.avx512.vpermilvar.ps.512
+    x86_avx512_vpmadd52h_uq_128,               // llvm.x86.avx512.vpmadd52h.uq.128
+    x86_avx512_vpmadd52h_uq_256,               // llvm.x86.avx512.vpmadd52h.uq.256
+    x86_avx512_vpmadd52h_uq_512,               // llvm.x86.avx512.vpmadd52h.uq.512
+    x86_avx512_vpmadd52l_uq_128,               // llvm.x86.avx512.vpmadd52l.uq.128
+    x86_avx512_vpmadd52l_uq_256,               // llvm.x86.avx512.vpmadd52l.uq.256
+    x86_avx512_vpmadd52l_uq_512,               // llvm.x86.avx512.vpmadd52l.uq.512
+    x86_avx512_vpshld_d_128,                   // llvm.x86.avx512.vpshld.d.128
+    x86_avx512_vpshld_d_256,                   // llvm.x86.avx512.vpshld.d.256
+    x86_avx512_vpshld_d_512,                   // llvm.x86.avx512.vpshld.d.512
+    x86_avx512_vpshld_q_128,                   // llvm.x86.avx512.vpshld.q.128
+    x86_avx512_vpshld_q_256,                   // llvm.x86.avx512.vpshld.q.256
+    x86_avx512_vpshld_q_512,                   // llvm.x86.avx512.vpshld.q.512
+    x86_avx512_vpshld_w_128,                   // llvm.x86.avx512.vpshld.w.128
+    x86_avx512_vpshld_w_256,                   // llvm.x86.avx512.vpshld.w.256
+    x86_avx512_vpshld_w_512,                   // llvm.x86.avx512.vpshld.w.512
+    x86_avx512_vpshrd_d_128,                   // llvm.x86.avx512.vpshrd.d.128
+    x86_avx512_vpshrd_d_256,                   // llvm.x86.avx512.vpshrd.d.256
+    x86_avx512_vpshrd_d_512,                   // llvm.x86.avx512.vpshrd.d.512
+    x86_avx512_vpshrd_q_128,                   // llvm.x86.avx512.vpshrd.q.128
+    x86_avx512_vpshrd_q_256,                   // llvm.x86.avx512.vpshrd.q.256
+    x86_avx512_vpshrd_q_512,                   // llvm.x86.avx512.vpshrd.q.512
+    x86_avx512_vpshrd_w_128,                   // llvm.x86.avx512.vpshrd.w.128
+    x86_avx512_vpshrd_w_256,                   // llvm.x86.avx512.vpshrd.w.256
+    x86_avx512_vpshrd_w_512,                   // llvm.x86.avx512.vpshrd.w.512
+    x86_bmi_bextr_32,                          // llvm.x86.bmi.bextr.32
+    x86_bmi_bextr_64,                          // llvm.x86.bmi.bextr.64
+    x86_bmi_bzhi_32,                           // llvm.x86.bmi.bzhi.32
+    x86_bmi_bzhi_64,                           // llvm.x86.bmi.bzhi.64
+    x86_bmi_pdep_32,                           // llvm.x86.bmi.pdep.32
+    x86_bmi_pdep_64,                           // llvm.x86.bmi.pdep.64
+    x86_bmi_pext_32,                           // llvm.x86.bmi.pext.32
+    x86_bmi_pext_64,                           // llvm.x86.bmi.pext.64
+    x86_cldemote,                              // llvm.x86.cldemote
+    x86_clflushopt,                            // llvm.x86.clflushopt
+    x86_clrssbsy,                              // llvm.x86.clrssbsy
+    x86_clwb,                                  // llvm.x86.clwb
+    x86_clzero,                                // llvm.x86.clzero
+    x86_directstore32,                         // llvm.x86.directstore32
+    x86_directstore64,                         // llvm.x86.directstore64
+    x86_flags_read_u32,                        // llvm.x86.flags.read.u32
+    x86_flags_read_u64,                        // llvm.x86.flags.read.u64
+    x86_flags_write_u32,                       // llvm.x86.flags.write.u32
+    x86_flags_write_u64,                       // llvm.x86.flags.write.u64
+    x86_fxrstor,                               // llvm.x86.fxrstor
+    x86_fxrstor64,                             // llvm.x86.fxrstor64
+    x86_fxsave,                                // llvm.x86.fxsave
+    x86_fxsave64,                              // llvm.x86.fxsave64
+    x86_incsspd,                               // llvm.x86.incsspd
+    x86_incsspq,                               // llvm.x86.incsspq
+    x86_int,                                   // llvm.x86.int
+    x86_invpcid,                               // llvm.x86.invpcid
+    x86_llwpcb,                                // llvm.x86.llwpcb
+    x86_lwpins32,                              // llvm.x86.lwpins32
+    x86_lwpins64,                              // llvm.x86.lwpins64
+    x86_lwpval32,                              // llvm.x86.lwpval32
+    x86_lwpval64,                              // llvm.x86.lwpval64
+    x86_mmx_emms,                              // llvm.x86.mmx.emms
+    x86_mmx_femms,                             // llvm.x86.mmx.femms
+    x86_mmx_maskmovq,                          // llvm.x86.mmx.maskmovq
+    x86_mmx_movnt_dq,                          // llvm.x86.mmx.movnt.dq
+    x86_mmx_packssdw,                          // llvm.x86.mmx.packssdw
+    x86_mmx_packsswb,                          // llvm.x86.mmx.packsswb
+    x86_mmx_packuswb,                          // llvm.x86.mmx.packuswb
+    x86_mmx_padd_b,                            // llvm.x86.mmx.padd.b
+    x86_mmx_padd_d,                            // llvm.x86.mmx.padd.d
+    x86_mmx_padd_q,                            // llvm.x86.mmx.padd.q
+    x86_mmx_padd_w,                            // llvm.x86.mmx.padd.w
+    x86_mmx_padds_b,                           // llvm.x86.mmx.padds.b
+    x86_mmx_padds_w,                           // llvm.x86.mmx.padds.w
+    x86_mmx_paddus_b,                          // llvm.x86.mmx.paddus.b
+    x86_mmx_paddus_w,                          // llvm.x86.mmx.paddus.w
+    x86_mmx_palignr_b,                         // llvm.x86.mmx.palignr.b
+    x86_mmx_pand,                              // llvm.x86.mmx.pand
+    x86_mmx_pandn,                             // llvm.x86.mmx.pandn
+    x86_mmx_pavg_b,                            // llvm.x86.mmx.pavg.b
+    x86_mmx_pavg_w,                            // llvm.x86.mmx.pavg.w
+    x86_mmx_pcmpeq_b,                          // llvm.x86.mmx.pcmpeq.b
+    x86_mmx_pcmpeq_d,                          // llvm.x86.mmx.pcmpeq.d
+    x86_mmx_pcmpeq_w,                          // llvm.x86.mmx.pcmpeq.w
+    x86_mmx_pcmpgt_b,                          // llvm.x86.mmx.pcmpgt.b
+    x86_mmx_pcmpgt_d,                          // llvm.x86.mmx.pcmpgt.d
+    x86_mmx_pcmpgt_w,                          // llvm.x86.mmx.pcmpgt.w
+    x86_mmx_pextr_w,                           // llvm.x86.mmx.pextr.w
+    x86_mmx_pinsr_w,                           // llvm.x86.mmx.pinsr.w
+    x86_mmx_pmadd_wd,                          // llvm.x86.mmx.pmadd.wd
+    x86_mmx_pmaxs_w,                           // llvm.x86.mmx.pmaxs.w
+    x86_mmx_pmaxu_b,                           // llvm.x86.mmx.pmaxu.b
+    x86_mmx_pmins_w,                           // llvm.x86.mmx.pmins.w
+    x86_mmx_pminu_b,                           // llvm.x86.mmx.pminu.b
+    x86_mmx_pmovmskb,                          // llvm.x86.mmx.pmovmskb
+    x86_mmx_pmulh_w,                           // llvm.x86.mmx.pmulh.w
+    x86_mmx_pmulhu_w,                          // llvm.x86.mmx.pmulhu.w
+    x86_mmx_pmull_w,                           // llvm.x86.mmx.pmull.w
+    x86_mmx_pmulu_dq,                          // llvm.x86.mmx.pmulu.dq
+    x86_mmx_por,                               // llvm.x86.mmx.por
+    x86_mmx_psad_bw,                           // llvm.x86.mmx.psad.bw
+    x86_mmx_psll_d,                            // llvm.x86.mmx.psll.d
+    x86_mmx_psll_q,                            // llvm.x86.mmx.psll.q
+    x86_mmx_psll_w,                            // llvm.x86.mmx.psll.w
+    x86_mmx_pslli_d,                           // llvm.x86.mmx.pslli.d
+    x86_mmx_pslli_q,                           // llvm.x86.mmx.pslli.q
+    x86_mmx_pslli_w,                           // llvm.x86.mmx.pslli.w
+    x86_mmx_psra_d,                            // llvm.x86.mmx.psra.d
+    x86_mmx_psra_w,                            // llvm.x86.mmx.psra.w
+    x86_mmx_psrai_d,                           // llvm.x86.mmx.psrai.d
+    x86_mmx_psrai_w,                           // llvm.x86.mmx.psrai.w
+    x86_mmx_psrl_d,                            // llvm.x86.mmx.psrl.d
+    x86_mmx_psrl_q,                            // llvm.x86.mmx.psrl.q
+    x86_mmx_psrl_w,                            // llvm.x86.mmx.psrl.w
+    x86_mmx_psrli_d,                           // llvm.x86.mmx.psrli.d
+    x86_mmx_psrli_q,                           // llvm.x86.mmx.psrli.q
+    x86_mmx_psrli_w,                           // llvm.x86.mmx.psrli.w
+    x86_mmx_psub_b,                            // llvm.x86.mmx.psub.b
+    x86_mmx_psub_d,                            // llvm.x86.mmx.psub.d
+    x86_mmx_psub_q,                            // llvm.x86.mmx.psub.q
+    x86_mmx_psub_w,                            // llvm.x86.mmx.psub.w
+    x86_mmx_psubs_b,                           // llvm.x86.mmx.psubs.b
+    x86_mmx_psubs_w,                           // llvm.x86.mmx.psubs.w
+    x86_mmx_psubus_b,                          // llvm.x86.mmx.psubus.b
+    x86_mmx_psubus_w,                          // llvm.x86.mmx.psubus.w
+    x86_mmx_punpckhbw,                         // llvm.x86.mmx.punpckhbw
+    x86_mmx_punpckhdq,                         // llvm.x86.mmx.punpckhdq
+    x86_mmx_punpckhwd,                         // llvm.x86.mmx.punpckhwd
+    x86_mmx_punpcklbw,                         // llvm.x86.mmx.punpcklbw
+    x86_mmx_punpckldq,                         // llvm.x86.mmx.punpckldq
+    x86_mmx_punpcklwd,                         // llvm.x86.mmx.punpcklwd
+    x86_mmx_pxor,                              // llvm.x86.mmx.pxor
+    x86_monitorx,                              // llvm.x86.monitorx
+    x86_movdir64b,                             // llvm.x86.movdir64b
+    x86_mwaitx,                                // llvm.x86.mwaitx
+    x86_pclmulqdq,                             // llvm.x86.pclmulqdq
+    x86_pclmulqdq_256,                         // llvm.x86.pclmulqdq.256
+    x86_pclmulqdq_512,                         // llvm.x86.pclmulqdq.512
+    x86_ptwrite32,                             // llvm.x86.ptwrite32
+    x86_ptwrite64,                             // llvm.x86.ptwrite64
+    x86_rdfsbase_32,                           // llvm.x86.rdfsbase.32
+    x86_rdfsbase_64,                           // llvm.x86.rdfsbase.64
+    x86_rdgsbase_32,                           // llvm.x86.rdgsbase.32
+    x86_rdgsbase_64,                           // llvm.x86.rdgsbase.64
+    x86_rdpid,                                 // llvm.x86.rdpid
+    x86_rdpkru,                                // llvm.x86.rdpkru
+    x86_rdpmc,                                 // llvm.x86.rdpmc
+    x86_rdrand_16,                             // llvm.x86.rdrand.16
+    x86_rdrand_32,                             // llvm.x86.rdrand.32
+    x86_rdrand_64,                             // llvm.x86.rdrand.64
+    x86_rdseed_16,                             // llvm.x86.rdseed.16
+    x86_rdseed_32,                             // llvm.x86.rdseed.32
+    x86_rdseed_64,                             // llvm.x86.rdseed.64
+    x86_rdsspd,                                // llvm.x86.rdsspd
+    x86_rdsspq,                                // llvm.x86.rdsspq
+    x86_rdtsc,                                 // llvm.x86.rdtsc
+    x86_rdtscp,                                // llvm.x86.rdtscp
+    x86_rstorssp,                              // llvm.x86.rstorssp
+    x86_saveprevssp,                           // llvm.x86.saveprevssp
+    x86_seh_ehguard,                           // llvm.x86.seh.ehguard
+    x86_seh_ehregnode,                         // llvm.x86.seh.ehregnode
+    x86_seh_lsda,                              // llvm.x86.seh.lsda
+    x86_seh_recoverfp,                         // llvm.x86.seh.recoverfp
+    x86_setssbsy,                              // llvm.x86.setssbsy
+    x86_sha1msg1,                              // llvm.x86.sha1msg1
+    x86_sha1msg2,                              // llvm.x86.sha1msg2
+    x86_sha1nexte,                             // llvm.x86.sha1nexte
+    x86_sha1rnds4,                             // llvm.x86.sha1rnds4
+    x86_sha256msg1,                            // llvm.x86.sha256msg1
+    x86_sha256msg2,                            // llvm.x86.sha256msg2
+    x86_sha256rnds2,                           // llvm.x86.sha256rnds2
+    x86_slwpcb,                                // llvm.x86.slwpcb
+    x86_sse_cmp_ps,                            // llvm.x86.sse.cmp.ps
+    x86_sse_cmp_ss,                            // llvm.x86.sse.cmp.ss
+    x86_sse_comieq_ss,                         // llvm.x86.sse.comieq.ss
+    x86_sse_comige_ss,                         // llvm.x86.sse.comige.ss
+    x86_sse_comigt_ss,                         // llvm.x86.sse.comigt.ss
+    x86_sse_comile_ss,                         // llvm.x86.sse.comile.ss
+    x86_sse_comilt_ss,                         // llvm.x86.sse.comilt.ss
+    x86_sse_comineq_ss,                        // llvm.x86.sse.comineq.ss
+    x86_sse_cvtpd2pi,                          // llvm.x86.sse.cvtpd2pi
+    x86_sse_cvtpi2pd,                          // llvm.x86.sse.cvtpi2pd
+    x86_sse_cvtpi2ps,                          // llvm.x86.sse.cvtpi2ps
+    x86_sse_cvtps2pi,                          // llvm.x86.sse.cvtps2pi
+    x86_sse_cvtss2si,                          // llvm.x86.sse.cvtss2si
+    x86_sse_cvtss2si64,                        // llvm.x86.sse.cvtss2si64
+    x86_sse_cvttpd2pi,                         // llvm.x86.sse.cvttpd2pi
+    x86_sse_cvttps2pi,                         // llvm.x86.sse.cvttps2pi
+    x86_sse_cvttss2si,                         // llvm.x86.sse.cvttss2si
+    x86_sse_cvttss2si64,                       // llvm.x86.sse.cvttss2si64
+    x86_sse_ldmxcsr,                           // llvm.x86.sse.ldmxcsr
+    x86_sse_max_ps,                            // llvm.x86.sse.max.ps
+    x86_sse_max_ss,                            // llvm.x86.sse.max.ss
+    x86_sse_min_ps,                            // llvm.x86.sse.min.ps
+    x86_sse_min_ss,                            // llvm.x86.sse.min.ss
+    x86_sse_movmsk_ps,                         // llvm.x86.sse.movmsk.ps
+    x86_sse_pshuf_w,                           // llvm.x86.sse.pshuf.w
+    x86_sse_rcp_ps,                            // llvm.x86.sse.rcp.ps
+    x86_sse_rcp_ss,                            // llvm.x86.sse.rcp.ss
+    x86_sse_rsqrt_ps,                          // llvm.x86.sse.rsqrt.ps
+    x86_sse_rsqrt_ss,                          // llvm.x86.sse.rsqrt.ss
+    x86_sse_sfence,                            // llvm.x86.sse.sfence
+    x86_sse_stmxcsr,                           // llvm.x86.sse.stmxcsr
+    x86_sse_ucomieq_ss,                        // llvm.x86.sse.ucomieq.ss
+    x86_sse_ucomige_ss,                        // llvm.x86.sse.ucomige.ss
+    x86_sse_ucomigt_ss,                        // llvm.x86.sse.ucomigt.ss
+    x86_sse_ucomile_ss,                        // llvm.x86.sse.ucomile.ss
+    x86_sse_ucomilt_ss,                        // llvm.x86.sse.ucomilt.ss
+    x86_sse_ucomineq_ss,                       // llvm.x86.sse.ucomineq.ss
+    x86_sse2_clflush,                          // llvm.x86.sse2.clflush
+    x86_sse2_cmp_pd,                           // llvm.x86.sse2.cmp.pd
+    x86_sse2_cmp_sd,                           // llvm.x86.sse2.cmp.sd
+    x86_sse2_comieq_sd,                        // llvm.x86.sse2.comieq.sd
+    x86_sse2_comige_sd,                        // llvm.x86.sse2.comige.sd
+    x86_sse2_comigt_sd,                        // llvm.x86.sse2.comigt.sd
+    x86_sse2_comile_sd,                        // llvm.x86.sse2.comile.sd
+    x86_sse2_comilt_sd,                        // llvm.x86.sse2.comilt.sd
+    x86_sse2_comineq_sd,                       // llvm.x86.sse2.comineq.sd
+    x86_sse2_cvtpd2dq,                         // llvm.x86.sse2.cvtpd2dq
+    x86_sse2_cvtpd2ps,                         // llvm.x86.sse2.cvtpd2ps
+    x86_sse2_cvtps2dq,                         // llvm.x86.sse2.cvtps2dq
+    x86_sse2_cvtsd2si,                         // llvm.x86.sse2.cvtsd2si
+    x86_sse2_cvtsd2si64,                       // llvm.x86.sse2.cvtsd2si64
+    x86_sse2_cvtsd2ss,                         // llvm.x86.sse2.cvtsd2ss
+    x86_sse2_cvttpd2dq,                        // llvm.x86.sse2.cvttpd2dq
+    x86_sse2_cvttps2dq,                        // llvm.x86.sse2.cvttps2dq
+    x86_sse2_cvttsd2si,                        // llvm.x86.sse2.cvttsd2si
+    x86_sse2_cvttsd2si64,                      // llvm.x86.sse2.cvttsd2si64
+    x86_sse2_lfence,                           // llvm.x86.sse2.lfence
+    x86_sse2_maskmov_dqu,                      // llvm.x86.sse2.maskmov.dqu
+    x86_sse2_max_pd,                           // llvm.x86.sse2.max.pd
+    x86_sse2_max_sd,                           // llvm.x86.sse2.max.sd
+    x86_sse2_mfence,                           // llvm.x86.sse2.mfence
+    x86_sse2_min_pd,                           // llvm.x86.sse2.min.pd
+    x86_sse2_min_sd,                           // llvm.x86.sse2.min.sd
+    x86_sse2_movmsk_pd,                        // llvm.x86.sse2.movmsk.pd
+    x86_sse2_packssdw_128,                     // llvm.x86.sse2.packssdw.128
+    x86_sse2_packsswb_128,                     // llvm.x86.sse2.packsswb.128
+    x86_sse2_packuswb_128,                     // llvm.x86.sse2.packuswb.128
+    x86_sse2_padds_b,                          // llvm.x86.sse2.padds.b
+    x86_sse2_padds_w,                          // llvm.x86.sse2.padds.w
+    x86_sse2_paddus_b,                         // llvm.x86.sse2.paddus.b
+    x86_sse2_paddus_w,                         // llvm.x86.sse2.paddus.w
+    x86_sse2_pause,                            // llvm.x86.sse2.pause
+    x86_sse2_pmadd_wd,                         // llvm.x86.sse2.pmadd.wd
+    x86_sse2_pmovmskb_128,                     // llvm.x86.sse2.pmovmskb.128
+    x86_sse2_pmulh_w,                          // llvm.x86.sse2.pmulh.w
+    x86_sse2_pmulhu_w,                         // llvm.x86.sse2.pmulhu.w
+    x86_sse2_psad_bw,                          // llvm.x86.sse2.psad.bw
+    x86_sse2_psll_d,                           // llvm.x86.sse2.psll.d
+    x86_sse2_psll_q,                           // llvm.x86.sse2.psll.q
+    x86_sse2_psll_w,                           // llvm.x86.sse2.psll.w
+    x86_sse2_pslli_d,                          // llvm.x86.sse2.pslli.d
+    x86_sse2_pslli_q,                          // llvm.x86.sse2.pslli.q
+    x86_sse2_pslli_w,                          // llvm.x86.sse2.pslli.w
+    x86_sse2_psra_d,                           // llvm.x86.sse2.psra.d
+    x86_sse2_psra_w,                           // llvm.x86.sse2.psra.w
+    x86_sse2_psrai_d,                          // llvm.x86.sse2.psrai.d
+    x86_sse2_psrai_w,                          // llvm.x86.sse2.psrai.w
+    x86_sse2_psrl_d,                           // llvm.x86.sse2.psrl.d
+    x86_sse2_psrl_q,                           // llvm.x86.sse2.psrl.q
+    x86_sse2_psrl_w,                           // llvm.x86.sse2.psrl.w
+    x86_sse2_psrli_d,                          // llvm.x86.sse2.psrli.d
+    x86_sse2_psrli_q,                          // llvm.x86.sse2.psrli.q
+    x86_sse2_psrli_w,                          // llvm.x86.sse2.psrli.w
+    x86_sse2_psubs_b,                          // llvm.x86.sse2.psubs.b
+    x86_sse2_psubs_w,                          // llvm.x86.sse2.psubs.w
+    x86_sse2_psubus_b,                         // llvm.x86.sse2.psubus.b
+    x86_sse2_psubus_w,                         // llvm.x86.sse2.psubus.w
+    x86_sse2_ucomieq_sd,                       // llvm.x86.sse2.ucomieq.sd
+    x86_sse2_ucomige_sd,                       // llvm.x86.sse2.ucomige.sd
+    x86_sse2_ucomigt_sd,                       // llvm.x86.sse2.ucomigt.sd
+    x86_sse2_ucomile_sd,                       // llvm.x86.sse2.ucomile.sd
+    x86_sse2_ucomilt_sd,                       // llvm.x86.sse2.ucomilt.sd
+    x86_sse2_ucomineq_sd,                      // llvm.x86.sse2.ucomineq.sd
+    x86_sse3_addsub_pd,                        // llvm.x86.sse3.addsub.pd
+    x86_sse3_addsub_ps,                        // llvm.x86.sse3.addsub.ps
+    x86_sse3_hadd_pd,                          // llvm.x86.sse3.hadd.pd
+    x86_sse3_hadd_ps,                          // llvm.x86.sse3.hadd.ps
+    x86_sse3_hsub_pd,                          // llvm.x86.sse3.hsub.pd
+    x86_sse3_hsub_ps,                          // llvm.x86.sse3.hsub.ps
+    x86_sse3_ldu_dq,                           // llvm.x86.sse3.ldu.dq
+    x86_sse3_monitor,                          // llvm.x86.sse3.monitor
+    x86_sse3_mwait,                            // llvm.x86.sse3.mwait
+    x86_sse41_blendvpd,                        // llvm.x86.sse41.blendvpd
+    x86_sse41_blendvps,                        // llvm.x86.sse41.blendvps
+    x86_sse41_dppd,                            // llvm.x86.sse41.dppd
+    x86_sse41_dpps,                            // llvm.x86.sse41.dpps
+    x86_sse41_insertps,                        // llvm.x86.sse41.insertps
+    x86_sse41_mpsadbw,                         // llvm.x86.sse41.mpsadbw
+    x86_sse41_packusdw,                        // llvm.x86.sse41.packusdw
+    x86_sse41_pblendvb,                        // llvm.x86.sse41.pblendvb
+    x86_sse41_phminposuw,                      // llvm.x86.sse41.phminposuw
+    x86_sse41_ptestc,                          // llvm.x86.sse41.ptestc
+    x86_sse41_ptestnzc,                        // llvm.x86.sse41.ptestnzc
+    x86_sse41_ptestz,                          // llvm.x86.sse41.ptestz
+    x86_sse41_round_pd,                        // llvm.x86.sse41.round.pd
+    x86_sse41_round_ps,                        // llvm.x86.sse41.round.ps
+    x86_sse41_round_sd,                        // llvm.x86.sse41.round.sd
+    x86_sse41_round_ss,                        // llvm.x86.sse41.round.ss
+    x86_sse42_crc32_32_16,                     // llvm.x86.sse42.crc32.32.16
+    x86_sse42_crc32_32_32,                     // llvm.x86.sse42.crc32.32.32
+    x86_sse42_crc32_32_8,                      // llvm.x86.sse42.crc32.32.8
+    x86_sse42_crc32_64_64,                     // llvm.x86.sse42.crc32.64.64
+    x86_sse42_pcmpestri128,                    // llvm.x86.sse42.pcmpestri128
+    x86_sse42_pcmpestria128,                   // llvm.x86.sse42.pcmpestria128
+    x86_sse42_pcmpestric128,                   // llvm.x86.sse42.pcmpestric128
+    x86_sse42_pcmpestrio128,                   // llvm.x86.sse42.pcmpestrio128
+    x86_sse42_pcmpestris128,                   // llvm.x86.sse42.pcmpestris128
+    x86_sse42_pcmpestriz128,                   // llvm.x86.sse42.pcmpestriz128
+    x86_sse42_pcmpestrm128,                    // llvm.x86.sse42.pcmpestrm128
+    x86_sse42_pcmpistri128,                    // llvm.x86.sse42.pcmpistri128
+    x86_sse42_pcmpistria128,                   // llvm.x86.sse42.pcmpistria128
+    x86_sse42_pcmpistric128,                   // llvm.x86.sse42.pcmpistric128
+    x86_sse42_pcmpistrio128,                   // llvm.x86.sse42.pcmpistrio128
+    x86_sse42_pcmpistris128,                   // llvm.x86.sse42.pcmpistris128
+    x86_sse42_pcmpistriz128,                   // llvm.x86.sse42.pcmpistriz128
+    x86_sse42_pcmpistrm128,                    // llvm.x86.sse42.pcmpistrm128
+    x86_sse4a_extrq,                           // llvm.x86.sse4a.extrq
+    x86_sse4a_extrqi,                          // llvm.x86.sse4a.extrqi
+    x86_sse4a_insertq,                         // llvm.x86.sse4a.insertq
+    x86_sse4a_insertqi,                        // llvm.x86.sse4a.insertqi
+    x86_ssse3_pabs_b,                          // llvm.x86.ssse3.pabs.b
+    x86_ssse3_pabs_d,                          // llvm.x86.ssse3.pabs.d
+    x86_ssse3_pabs_w,                          // llvm.x86.ssse3.pabs.w
+    x86_ssse3_phadd_d,                         // llvm.x86.ssse3.phadd.d
+    x86_ssse3_phadd_d_128,                     // llvm.x86.ssse3.phadd.d.128
+    x86_ssse3_phadd_sw,                        // llvm.x86.ssse3.phadd.sw
+    x86_ssse3_phadd_sw_128,                    // llvm.x86.ssse3.phadd.sw.128
+    x86_ssse3_phadd_w,                         // llvm.x86.ssse3.phadd.w
+    x86_ssse3_phadd_w_128,                     // llvm.x86.ssse3.phadd.w.128
+    x86_ssse3_phsub_d,                         // llvm.x86.ssse3.phsub.d
+    x86_ssse3_phsub_d_128,                     // llvm.x86.ssse3.phsub.d.128
+    x86_ssse3_phsub_sw,                        // llvm.x86.ssse3.phsub.sw
+    x86_ssse3_phsub_sw_128,                    // llvm.x86.ssse3.phsub.sw.128
+    x86_ssse3_phsub_w,                         // llvm.x86.ssse3.phsub.w
+    x86_ssse3_phsub_w_128,                     // llvm.x86.ssse3.phsub.w.128
+    x86_ssse3_pmadd_ub_sw,                     // llvm.x86.ssse3.pmadd.ub.sw
+    x86_ssse3_pmadd_ub_sw_128,                 // llvm.x86.ssse3.pmadd.ub.sw.128
+    x86_ssse3_pmul_hr_sw,                      // llvm.x86.ssse3.pmul.hr.sw
+    x86_ssse3_pmul_hr_sw_128,                  // llvm.x86.ssse3.pmul.hr.sw.128
+    x86_ssse3_pshuf_b,                         // llvm.x86.ssse3.pshuf.b
+    x86_ssse3_pshuf_b_128,                     // llvm.x86.ssse3.pshuf.b.128
+    x86_ssse3_psign_b,                         // llvm.x86.ssse3.psign.b
+    x86_ssse3_psign_b_128,                     // llvm.x86.ssse3.psign.b.128
+    x86_ssse3_psign_d,                         // llvm.x86.ssse3.psign.d
+    x86_ssse3_psign_d_128,                     // llvm.x86.ssse3.psign.d.128
+    x86_ssse3_psign_w,                         // llvm.x86.ssse3.psign.w
+    x86_ssse3_psign_w_128,                     // llvm.x86.ssse3.psign.w.128
+    x86_subborrow_u32,                         // llvm.x86.subborrow.u32
+    x86_subborrow_u64,                         // llvm.x86.subborrow.u64
+    x86_tbm_bextri_u32,                        // llvm.x86.tbm.bextri.u32
+    x86_tbm_bextri_u64,                        // llvm.x86.tbm.bextri.u64
+    x86_tpause,                                // llvm.x86.tpause
+    x86_umonitor,                              // llvm.x86.umonitor
+    x86_umwait,                                // llvm.x86.umwait
+    x86_vcvtph2ps_128,                         // llvm.x86.vcvtph2ps.128
+    x86_vcvtph2ps_256,                         // llvm.x86.vcvtph2ps.256
+    x86_vcvtps2ph_128,                         // llvm.x86.vcvtps2ph.128
+    x86_vcvtps2ph_256,                         // llvm.x86.vcvtps2ph.256
+    x86_vgf2p8affineinvqb_128,                 // llvm.x86.vgf2p8affineinvqb.128
+    x86_vgf2p8affineinvqb_256,                 // llvm.x86.vgf2p8affineinvqb.256
+    x86_vgf2p8affineinvqb_512,                 // llvm.x86.vgf2p8affineinvqb.512
+    x86_vgf2p8affineqb_128,                    // llvm.x86.vgf2p8affineqb.128
+    x86_vgf2p8affineqb_256,                    // llvm.x86.vgf2p8affineqb.256
+    x86_vgf2p8affineqb_512,                    // llvm.x86.vgf2p8affineqb.512
+    x86_vgf2p8mulb_128,                        // llvm.x86.vgf2p8mulb.128
+    x86_vgf2p8mulb_256,                        // llvm.x86.vgf2p8mulb.256
+    x86_vgf2p8mulb_512,                        // llvm.x86.vgf2p8mulb.512
+    x86_wbinvd,                                // llvm.x86.wbinvd
+    x86_wbnoinvd,                              // llvm.x86.wbnoinvd
+    x86_wrfsbase_32,                           // llvm.x86.wrfsbase.32
+    x86_wrfsbase_64,                           // llvm.x86.wrfsbase.64
+    x86_wrgsbase_32,                           // llvm.x86.wrgsbase.32
+    x86_wrgsbase_64,                           // llvm.x86.wrgsbase.64
+    x86_wrpkru,                                // llvm.x86.wrpkru
+    x86_wrssd,                                 // llvm.x86.wrssd
+    x86_wrssq,                                 // llvm.x86.wrssq
+    x86_wrussd,                                // llvm.x86.wrussd
+    x86_wrussq,                                // llvm.x86.wrussq
+    x86_xabort,                                // llvm.x86.xabort
+    x86_xbegin,                                // llvm.x86.xbegin
+    x86_xend,                                  // llvm.x86.xend
+    x86_xgetbv,                                // llvm.x86.xgetbv
+    x86_xop_vfrcz_pd,                          // llvm.x86.xop.vfrcz.pd
+    x86_xop_vfrcz_pd_256,                      // llvm.x86.xop.vfrcz.pd.256
+    x86_xop_vfrcz_ps,                          // llvm.x86.xop.vfrcz.ps
+    x86_xop_vfrcz_ps_256,                      // llvm.x86.xop.vfrcz.ps.256
+    x86_xop_vfrcz_sd,                          // llvm.x86.xop.vfrcz.sd
+    x86_xop_vfrcz_ss,                          // llvm.x86.xop.vfrcz.ss
+    x86_xop_vpcomb,                            // llvm.x86.xop.vpcomb
+    x86_xop_vpcomd,                            // llvm.x86.xop.vpcomd
+    x86_xop_vpcomq,                            // llvm.x86.xop.vpcomq
+    x86_xop_vpcomub,                           // llvm.x86.xop.vpcomub
+    x86_xop_vpcomud,                           // llvm.x86.xop.vpcomud
+    x86_xop_vpcomuq,                           // llvm.x86.xop.vpcomuq
+    x86_xop_vpcomuw,                           // llvm.x86.xop.vpcomuw
+    x86_xop_vpcomw,                            // llvm.x86.xop.vpcomw
+    x86_xop_vpermil2pd,                        // llvm.x86.xop.vpermil2pd
+    x86_xop_vpermil2pd_256,                    // llvm.x86.xop.vpermil2pd.256
+    x86_xop_vpermil2ps,                        // llvm.x86.xop.vpermil2ps
+    x86_xop_vpermil2ps_256,                    // llvm.x86.xop.vpermil2ps.256
+    x86_xop_vphaddbd,                          // llvm.x86.xop.vphaddbd
+    x86_xop_vphaddbq,                          // llvm.x86.xop.vphaddbq
+    x86_xop_vphaddbw,                          // llvm.x86.xop.vphaddbw
+    x86_xop_vphadddq,                          // llvm.x86.xop.vphadddq
+    x86_xop_vphaddubd,                         // llvm.x86.xop.vphaddubd
+    x86_xop_vphaddubq,                         // llvm.x86.xop.vphaddubq
+    x86_xop_vphaddubw,                         // llvm.x86.xop.vphaddubw
+    x86_xop_vphaddudq,                         // llvm.x86.xop.vphaddudq
+    x86_xop_vphadduwd,                         // llvm.x86.xop.vphadduwd
+    x86_xop_vphadduwq,                         // llvm.x86.xop.vphadduwq
+    x86_xop_vphaddwd,                          // llvm.x86.xop.vphaddwd
+    x86_xop_vphaddwq,                          // llvm.x86.xop.vphaddwq
+    x86_xop_vphsubbw,                          // llvm.x86.xop.vphsubbw
+    x86_xop_vphsubdq,                          // llvm.x86.xop.vphsubdq
+    x86_xop_vphsubwd,                          // llvm.x86.xop.vphsubwd
+    x86_xop_vpmacsdd,                          // llvm.x86.xop.vpmacsdd
+    x86_xop_vpmacsdqh,                         // llvm.x86.xop.vpmacsdqh
+    x86_xop_vpmacsdql,                         // llvm.x86.xop.vpmacsdql
+    x86_xop_vpmacssdd,                         // llvm.x86.xop.vpmacssdd
+    x86_xop_vpmacssdqh,                        // llvm.x86.xop.vpmacssdqh
+    x86_xop_vpmacssdql,                        // llvm.x86.xop.vpmacssdql
+    x86_xop_vpmacsswd,                         // llvm.x86.xop.vpmacsswd
+    x86_xop_vpmacssww,                         // llvm.x86.xop.vpmacssww
+    x86_xop_vpmacswd,                          // llvm.x86.xop.vpmacswd
+    x86_xop_vpmacsww,                          // llvm.x86.xop.vpmacsww
+    x86_xop_vpmadcsswd,                        // llvm.x86.xop.vpmadcsswd
+    x86_xop_vpmadcswd,                         // llvm.x86.xop.vpmadcswd
+    x86_xop_vpperm,                            // llvm.x86.xop.vpperm
+    x86_xop_vprotb,                            // llvm.x86.xop.vprotb
+    x86_xop_vprotbi,                           // llvm.x86.xop.vprotbi
+    x86_xop_vprotd,                            // llvm.x86.xop.vprotd
+    x86_xop_vprotdi,                           // llvm.x86.xop.vprotdi
+    x86_xop_vprotq,                            // llvm.x86.xop.vprotq
+    x86_xop_vprotqi,                           // llvm.x86.xop.vprotqi
+    x86_xop_vprotw,                            // llvm.x86.xop.vprotw
+    x86_xop_vprotwi,                           // llvm.x86.xop.vprotwi
+    x86_xop_vpshab,                            // llvm.x86.xop.vpshab
+    x86_xop_vpshad,                            // llvm.x86.xop.vpshad
+    x86_xop_vpshaq,                            // llvm.x86.xop.vpshaq
+    x86_xop_vpshaw,                            // llvm.x86.xop.vpshaw
+    x86_xop_vpshlb,                            // llvm.x86.xop.vpshlb
+    x86_xop_vpshld,                            // llvm.x86.xop.vpshld
+    x86_xop_vpshlq,                            // llvm.x86.xop.vpshlq
+    x86_xop_vpshlw,                            // llvm.x86.xop.vpshlw
+    x86_xrstor,                                // llvm.x86.xrstor
+    x86_xrstor64,                              // llvm.x86.xrstor64
+    x86_xrstors,                               // llvm.x86.xrstors
+    x86_xrstors64,                             // llvm.x86.xrstors64
+    x86_xsave,                                 // llvm.x86.xsave
+    x86_xsave64,                               // llvm.x86.xsave64
+    x86_xsavec,                                // llvm.x86.xsavec
+    x86_xsavec64,                              // llvm.x86.xsavec64
+    x86_xsaveopt,                              // llvm.x86.xsaveopt
+    x86_xsaveopt64,                            // llvm.x86.xsaveopt64
+    x86_xsaves,                                // llvm.x86.xsaves
+    x86_xsaves64,                              // llvm.x86.xsaves64
+    x86_xsetbv,                                // llvm.x86.xsetbv
+    x86_xtest,                                 // llvm.x86.xtest
+    xcore_bitrev,                              // llvm.xcore.bitrev
+    xcore_checkevent,                          // llvm.xcore.checkevent
+    xcore_chkct,                               // llvm.xcore.chkct
+    xcore_clre,                                // llvm.xcore.clre
+    xcore_clrpt,                               // llvm.xcore.clrpt
+    xcore_clrsr,                               // llvm.xcore.clrsr
+    xcore_crc32,                               // llvm.xcore.crc32
+    xcore_crc8,                                // llvm.xcore.crc8
+    xcore_edu,                                 // llvm.xcore.edu
+    xcore_eeu,                                 // llvm.xcore.eeu
+    xcore_endin,                               // llvm.xcore.endin
+    xcore_freer,                               // llvm.xcore.freer
+    xcore_geted,                               // llvm.xcore.geted
+    xcore_getet,                               // llvm.xcore.getet
+    xcore_getid,                               // llvm.xcore.getid
+    xcore_getps,                               // llvm.xcore.getps
+    xcore_getr,                                // llvm.xcore.getr
+    xcore_getst,                               // llvm.xcore.getst
+    xcore_getts,                               // llvm.xcore.getts
+    xcore_in,                                  // llvm.xcore.in
+    xcore_inct,                                // llvm.xcore.inct
+    xcore_initcp,                              // llvm.xcore.initcp
+    xcore_initdp,                              // llvm.xcore.initdp
+    xcore_initlr,                              // llvm.xcore.initlr
+    xcore_initpc,                              // llvm.xcore.initpc
+    xcore_initsp,                              // llvm.xcore.initsp
+    xcore_inshr,                               // llvm.xcore.inshr
+    xcore_int,                                 // llvm.xcore.int
+    xcore_mjoin,                               // llvm.xcore.mjoin
+    xcore_msync,                               // llvm.xcore.msync
+    xcore_out,                                 // llvm.xcore.out
+    xcore_outct,                               // llvm.xcore.outct
+    xcore_outshr,                              // llvm.xcore.outshr
+    xcore_outt,                                // llvm.xcore.outt
+    xcore_peek,                                // llvm.xcore.peek
+    xcore_setc,                                // llvm.xcore.setc
+    xcore_setclk,                              // llvm.xcore.setclk
+    xcore_setd,                                // llvm.xcore.setd
+    xcore_setev,                               // llvm.xcore.setev
+    xcore_setps,                               // llvm.xcore.setps
+    xcore_setpsc,                              // llvm.xcore.setpsc
+    xcore_setpt,                               // llvm.xcore.setpt
+    xcore_setrdy,                              // llvm.xcore.setrdy
+    xcore_setsr,                               // llvm.xcore.setsr
+    xcore_settw,                               // llvm.xcore.settw
+    xcore_setv,                                // llvm.xcore.setv
+    xcore_sext,                                // llvm.xcore.sext
+    xcore_ssync,                               // llvm.xcore.ssync
+    xcore_syncr,                               // llvm.xcore.syncr
+    xcore_testct,                              // llvm.xcore.testct
+    xcore_testwct,                             // llvm.xcore.testwct
+    xcore_waitevent,                           // llvm.xcore.waitevent
+    xcore_zext                                 // llvm.xcore.zext
+#endif
+
+#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
+// let's return it to _setjmp state
+#  pragma pop_macro("setjmp")
+#  undef setjmp_undefined_for_msvc
+#endif
+
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc b/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc
new file mode 100644
index 0000000..82bd4e9
--- /dev/null
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicImpl.inc
@@ -0,0 +1,29841 @@
+/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
+|*                                                                            *|
+|* Intrinsic Function Source Fragment                                         *|
+|*                                                                            *|
+|* Automatically generated file, do not edit!                                 *|
+|*                                                                            *|
+\*===----------------------------------------------------------------------===*/
+
+// VisualStudio defines setjmp as _setjmp
+#if defined(_MSC_VER) && defined(setjmp) && \
+                         !defined(setjmp_undefined_for_msvc)
+#  pragma push_macro("setjmp")
+#  undef setjmp
+#  define setjmp_undefined_for_msvc
+#endif
+
+// Target mapping
+#ifdef GET_INTRINSIC_TARGET_DATA
+struct IntrinsicTargetInfo {
+  llvm::StringLiteral Name;
+  size_t Offset;
+  size_t Count;
+};
+static constexpr IntrinsicTargetInfo TargetInfos[] = {
+  {llvm::StringLiteral(""), 0, 180},
+  {llvm::StringLiteral("aarch64"), 180, 192},
+  {llvm::StringLiteral("amdgcn"), 372, 596},
+  {llvm::StringLiteral("arm"), 968, 251},
+  {llvm::StringLiteral("bpf"), 1219, 4},
+  {llvm::StringLiteral("hexagon"), 1223, 1708},
+  {llvm::StringLiteral("mips"), 2931, 667},
+  {llvm::StringLiteral("nvvm"), 3598, 1117},
+  {llvm::StringLiteral("ppc"), 4715, 403},
+  {llvm::StringLiteral("r600"), 5118, 35},
+  {llvm::StringLiteral("s390"), 5153, 220},
+  {llvm::StringLiteral("wasm"), 5373, 16},
+  {llvm::StringLiteral("x86"), 5389, 1270},
+  {llvm::StringLiteral("xcore"), 6659, 53},
+};
+#endif
+
+// Intrinsic ID to name table
+#ifdef GET_INTRINSIC_NAME_TABLE
+  // Note that entry #0 is the invalid intrinsic!
+  "llvm.addressofreturnaddress",
+  "llvm.adjust.trampoline",
+  "llvm.annotation",
+  "llvm.assume",
+  "llvm.bitreverse",
+  "llvm.bswap",
+  "llvm.canonicalize",
+  "llvm.ceil",
+  "llvm.clear_cache",
+  "llvm.codeview.annotation",
+  "llvm.convert.from.fp16",
+  "llvm.convert.to.fp16",
+  "llvm.copysign",
+  "llvm.coro.alloc",
+  "llvm.coro.begin",
+  "llvm.coro.destroy",
+  "llvm.coro.done",
+  "llvm.coro.end",
+  "llvm.coro.frame",
+  "llvm.coro.free",
+  "llvm.coro.id",
+  "llvm.coro.noop",
+  "llvm.coro.param",
+  "llvm.coro.promise",
+  "llvm.coro.resume",
+  "llvm.coro.save",
+  "llvm.coro.size",
+  "llvm.coro.subfn.addr",
+  "llvm.coro.suspend",
+  "llvm.cos",
+  "llvm.ctlz",
+  "llvm.ctpop",
+  "llvm.cttz",
+  "llvm.dbg.addr",
+  "llvm.dbg.declare",
+  "llvm.dbg.label",
+  "llvm.dbg.value",
+  "llvm.debugtrap",
+  "llvm.donothing",
+  "llvm.eh.dwarf.cfa",
+  "llvm.eh.exceptioncode",
+  "llvm.eh.exceptionpointer",
+  "llvm.eh.return.i32",
+  "llvm.eh.return.i64",
+  "llvm.eh.sjlj.callsite",
+  "llvm.eh.sjlj.functioncontext",
+  "llvm.eh.sjlj.longjmp",
+  "llvm.eh.sjlj.lsda",
+  "llvm.eh.sjlj.setjmp",
+  "llvm.eh.sjlj.setup.dispatch",
+  "llvm.eh.typeid.for",
+  "llvm.eh.unwind.init",
+  "llvm.exp",
+  "llvm.exp2",
+  "llvm.expect",
+  "llvm.experimental.constrained.cos",
+  "llvm.experimental.constrained.exp",
+  "llvm.experimental.constrained.exp2",
+  "llvm.experimental.constrained.fadd",
+  "llvm.experimental.constrained.fdiv",
+  "llvm.experimental.constrained.fma",
+  "llvm.experimental.constrained.fmul",
+  "llvm.experimental.constrained.frem",
+  "llvm.experimental.constrained.fsub",
+  "llvm.experimental.constrained.log",
+  "llvm.experimental.constrained.log10",
+  "llvm.experimental.constrained.log2",
+  "llvm.experimental.constrained.nearbyint",
+  "llvm.experimental.constrained.pow",
+  "llvm.experimental.constrained.powi",
+  "llvm.experimental.constrained.rint",
+  "llvm.experimental.constrained.sin",
+  "llvm.experimental.constrained.sqrt",
+  "llvm.experimental.deoptimize",
+  "llvm.experimental.gc.relocate",
+  "llvm.experimental.gc.result",
+  "llvm.experimental.gc.statepoint",
+  "llvm.experimental.guard",
+  "llvm.experimental.patchpoint.i64",
+  "llvm.experimental.patchpoint.void",
+  "llvm.experimental.stackmap",
+  "llvm.experimental.vector.reduce.add",
+  "llvm.experimental.vector.reduce.and",
+  "llvm.experimental.vector.reduce.fadd",
+  "llvm.experimental.vector.reduce.fmax",
+  "llvm.experimental.vector.reduce.fmin",
+  "llvm.experimental.vector.reduce.fmul",
+  "llvm.experimental.vector.reduce.mul",
+  "llvm.experimental.vector.reduce.or",
+  "llvm.experimental.vector.reduce.smax",
+  "llvm.experimental.vector.reduce.smin",
+  "llvm.experimental.vector.reduce.umax",
+  "llvm.experimental.vector.reduce.umin",
+  "llvm.experimental.vector.reduce.xor",
+  "llvm.fabs",
+  "llvm.floor",
+  "llvm.flt.rounds",
+  "llvm.fma",
+  "llvm.fmuladd",
+  "llvm.frameaddress",
+  "llvm.fshl",
+  "llvm.fshr",
+  "llvm.gcread",
+  "llvm.gcroot",
+  "llvm.gcwrite",
+  "llvm.get.dynamic.area.offset",
+  "llvm.icall.branch.funnel",
+  "llvm.init.trampoline",
+  "llvm.instrprof.increment",
+  "llvm.instrprof.increment.step",
+  "llvm.instrprof.value.profile",
+  "llvm.invariant.end",
+  "llvm.invariant.start",
+  "llvm.launder.invariant.group",
+  "llvm.lifetime.end",
+  "llvm.lifetime.start",
+  "llvm.load.relative",
+  "llvm.localaddress",
+  "llvm.localescape",
+  "llvm.localrecover",
+  "llvm.log",
+  "llvm.log10",
+  "llvm.log2",
+  "llvm.longjmp",
+  "llvm.masked.compressstore",
+  "llvm.masked.expandload",
+  "llvm.masked.gather",
+  "llvm.masked.load",
+  "llvm.masked.scatter",
+  "llvm.masked.store",
+  "llvm.maxnum",
+  "llvm.memcpy",
+  "llvm.memcpy.element.unordered.atomic",
+  "llvm.memmove",
+  "llvm.memmove.element.unordered.atomic",
+  "llvm.memset",
+  "llvm.memset.element.unordered.atomic",
+  "llvm.minnum",
+  "llvm.nearbyint",
+  "llvm.objectsize",
+  "llvm.pcmarker",
+  "llvm.pow",
+  "llvm.powi",
+  "llvm.prefetch",
+  "llvm.ptr.annotation",
+  "llvm.read_register",
+  "llvm.readcyclecounter",
+  "llvm.returnaddress",
+  "llvm.rint",
+  "llvm.round",
+  "llvm.sadd.with.overflow",
+  "llvm.setjmp",
+  "llvm.sideeffect",
+  "llvm.siglongjmp",
+  "llvm.sigsetjmp",
+  "llvm.sin",
+  "llvm.smul.with.overflow",
+  "llvm.sqrt",
+  "llvm.ssa.copy",
+  "llvm.ssub.with.overflow",
+  "llvm.stackguard",
+  "llvm.stackprotector",
+  "llvm.stackrestore",
+  "llvm.stacksave",
+  "llvm.strip.invariant.group",
+  "llvm.thread.pointer",
+  "llvm.trap",
+  "llvm.trunc",
+  "llvm.type.checked.load",
+  "llvm.type.test",
+  "llvm.uadd.with.overflow",
+  "llvm.umul.with.overflow",
+  "llvm.usub.with.overflow",
+  "llvm.va_copy",
+  "llvm.va_end",
+  "llvm.va_start",
+  "llvm.var.annotation",
+  "llvm.write_register",
+  "llvm.xray.customevent",
+  "llvm.xray.typedevent",
+  "llvm.aarch64.clrex",
+  "llvm.aarch64.crc32b",
+  "llvm.aarch64.crc32cb",
+  "llvm.aarch64.crc32ch",
+  "llvm.aarch64.crc32cw",
+  "llvm.aarch64.crc32cx",
+  "llvm.aarch64.crc32h",
+  "llvm.aarch64.crc32w",
+  "llvm.aarch64.crc32x",
+  "llvm.aarch64.crypto.aesd",
+  "llvm.aarch64.crypto.aese",
+  "llvm.aarch64.crypto.aesimc",
+  "llvm.aarch64.crypto.aesmc",
+  "llvm.aarch64.crypto.sha1c",
+  "llvm.aarch64.crypto.sha1h",
+  "llvm.aarch64.crypto.sha1m",
+  "llvm.aarch64.crypto.sha1p",
+  "llvm.aarch64.crypto.sha1su0",
+  "llvm.aarch64.crypto.sha1su1",
+  "llvm.aarch64.crypto.sha256h",
+  "llvm.aarch64.crypto.sha256h2",
+  "llvm.aarch64.crypto.sha256su0",
+  "llvm.aarch64.crypto.sha256su1",
+  "llvm.aarch64.dmb",
+  "llvm.aarch64.dsb",
+  "llvm.aarch64.get.fpcr",
+  "llvm.aarch64.hint",
+  "llvm.aarch64.isb",
+  "llvm.aarch64.ldaxp",
+  "llvm.aarch64.ldaxr",
+  "llvm.aarch64.ldxp",
+  "llvm.aarch64.ldxr",
+  "llvm.aarch64.neon.abs",
+  "llvm.aarch64.neon.addhn",
+  "llvm.aarch64.neon.addp",
+  "llvm.aarch64.neon.cls",
+  "llvm.aarch64.neon.fabd",
+  "llvm.aarch64.neon.facge",
+  "llvm.aarch64.neon.facgt",
+  "llvm.aarch64.neon.faddv",
+  "llvm.aarch64.neon.fcvtas",
+  "llvm.aarch64.neon.fcvtau",
+  "llvm.aarch64.neon.fcvtms",
+  "llvm.aarch64.neon.fcvtmu",
+  "llvm.aarch64.neon.fcvtns",
+  "llvm.aarch64.neon.fcvtnu",
+  "llvm.aarch64.neon.fcvtps",
+  "llvm.aarch64.neon.fcvtpu",
+  "llvm.aarch64.neon.fcvtxn",
+  "llvm.aarch64.neon.fcvtzs",
+  "llvm.aarch64.neon.fcvtzu",
+  "llvm.aarch64.neon.fmax",
+  "llvm.aarch64.neon.fmaxnm",
+  "llvm.aarch64.neon.fmaxnmp",
+  "llvm.aarch64.neon.fmaxnmv",
+  "llvm.aarch64.neon.fmaxp",
+  "llvm.aarch64.neon.fmaxv",
+  "llvm.aarch64.neon.fmin",
+  "llvm.aarch64.neon.fminnm",
+  "llvm.aarch64.neon.fminnmp",
+  "llvm.aarch64.neon.fminnmv",
+  "llvm.aarch64.neon.fminp",
+  "llvm.aarch64.neon.fminv",
+  "llvm.aarch64.neon.fmulx",
+  "llvm.aarch64.neon.frecpe",
+  "llvm.aarch64.neon.frecps",
+  "llvm.aarch64.neon.frecpx",
+  "llvm.aarch64.neon.frintn",
+  "llvm.aarch64.neon.frsqrte",
+  "llvm.aarch64.neon.frsqrts",
+  "llvm.aarch64.neon.ld1x2",
+  "llvm.aarch64.neon.ld1x3",
+  "llvm.aarch64.neon.ld1x4",
+  "llvm.aarch64.neon.ld2",
+  "llvm.aarch64.neon.ld2lane",
+  "llvm.aarch64.neon.ld2r",
+  "llvm.aarch64.neon.ld3",
+  "llvm.aarch64.neon.ld3lane",
+  "llvm.aarch64.neon.ld3r",
+  "llvm.aarch64.neon.ld4",
+  "llvm.aarch64.neon.ld4lane",
+  "llvm.aarch64.neon.ld4r",
+  "llvm.aarch64.neon.pmul",
+  "llvm.aarch64.neon.pmull",
+  "llvm.aarch64.neon.pmull64",
+  "llvm.aarch64.neon.raddhn",
+  "llvm.aarch64.neon.rbit",
+  "llvm.aarch64.neon.rshrn",
+  "llvm.aarch64.neon.rsubhn",
+  "llvm.aarch64.neon.sabd",
+  "llvm.aarch64.neon.saddlp",
+  "llvm.aarch64.neon.saddlv",
+  "llvm.aarch64.neon.saddv",
+  "llvm.aarch64.neon.scalar.sqxtn",
+  "llvm.aarch64.neon.scalar.sqxtun",
+  "llvm.aarch64.neon.scalar.uqxtn",
+  "llvm.aarch64.neon.sdot",
+  "llvm.aarch64.neon.shadd",
+  "llvm.aarch64.neon.shll",
+  "llvm.aarch64.neon.shsub",
+  "llvm.aarch64.neon.smax",
+  "llvm.aarch64.neon.smaxp",
+  "llvm.aarch64.neon.smaxv",
+  "llvm.aarch64.neon.smin",
+  "llvm.aarch64.neon.sminp",
+  "llvm.aarch64.neon.sminv",
+  "llvm.aarch64.neon.smull",
+  "llvm.aarch64.neon.sqabs",
+  "llvm.aarch64.neon.sqadd",
+  "llvm.aarch64.neon.sqdmulh",
+  "llvm.aarch64.neon.sqdmull",
+  "llvm.aarch64.neon.sqdmulls.scalar",
+  "llvm.aarch64.neon.sqneg",
+  "llvm.aarch64.neon.sqrdmulh",
+  "llvm.aarch64.neon.sqrshl",
+  "llvm.aarch64.neon.sqrshrn",
+  "llvm.aarch64.neon.sqrshrun",
+  "llvm.aarch64.neon.sqshl",
+  "llvm.aarch64.neon.sqshlu",
+  "llvm.aarch64.neon.sqshrn",
+  "llvm.aarch64.neon.sqshrun",
+  "llvm.aarch64.neon.sqsub",
+  "llvm.aarch64.neon.sqxtn",
+  "llvm.aarch64.neon.sqxtun",
+  "llvm.aarch64.neon.srhadd",
+  "llvm.aarch64.neon.srshl",
+  "llvm.aarch64.neon.sshl",
+  "llvm.aarch64.neon.sshll",
+  "llvm.aarch64.neon.st1x2",
+  "llvm.aarch64.neon.st1x3",
+  "llvm.aarch64.neon.st1x4",
+  "llvm.aarch64.neon.st2",
+  "llvm.aarch64.neon.st2lane",
+  "llvm.aarch64.neon.st3",
+  "llvm.aarch64.neon.st3lane",
+  "llvm.aarch64.neon.st4",
+  "llvm.aarch64.neon.st4lane",
+  "llvm.aarch64.neon.subhn",
+  "llvm.aarch64.neon.suqadd",
+  "llvm.aarch64.neon.tbl1",
+  "llvm.aarch64.neon.tbl2",
+  "llvm.aarch64.neon.tbl3",
+  "llvm.aarch64.neon.tbl4",
+  "llvm.aarch64.neon.tbx1",
+  "llvm.aarch64.neon.tbx2",
+  "llvm.aarch64.neon.tbx3",
+  "llvm.aarch64.neon.tbx4",
+  "llvm.aarch64.neon.uabd",
+  "llvm.aarch64.neon.uaddlp",
+  "llvm.aarch64.neon.uaddlv",
+  "llvm.aarch64.neon.uaddv",
+  "llvm.aarch64.neon.udot",
+  "llvm.aarch64.neon.uhadd",
+  "llvm.aarch64.neon.uhsub",
+  "llvm.aarch64.neon.umax",
+  "llvm.aarch64.neon.umaxp",
+  "llvm.aarch64.neon.umaxv",
+  "llvm.aarch64.neon.umin",
+  "llvm.aarch64.neon.uminp",
+  "llvm.aarch64.neon.uminv",
+  "llvm.aarch64.neon.umull",
+  "llvm.aarch64.neon.uqadd",
+  "llvm.aarch64.neon.uqrshl",
+  "llvm.aarch64.neon.uqrshrn",
+  "llvm.aarch64.neon.uqshl",
+  "llvm.aarch64.neon.uqshrn",
+  "llvm.aarch64.neon.uqsub",
+  "llvm.aarch64.neon.uqxtn",
+  "llvm.aarch64.neon.urecpe",
+  "llvm.aarch64.neon.urhadd",
+  "llvm.aarch64.neon.urshl",
+  "llvm.aarch64.neon.ursqrte",
+  "llvm.aarch64.neon.ushl",
+  "llvm.aarch64.neon.ushll",
+  "llvm.aarch64.neon.usqadd",
+  "llvm.aarch64.neon.vcopy.lane",
+  "llvm.aarch64.neon.vcvtfp2fxs",
+  "llvm.aarch64.neon.vcvtfp2fxu",
+  "llvm.aarch64.neon.vcvtfp2hf",
+  "llvm.aarch64.neon.vcvtfxs2fp",
+  "llvm.aarch64.neon.vcvtfxu2fp",
+  "llvm.aarch64.neon.vcvthf2fp",
+  "llvm.aarch64.neon.vsli",
+  "llvm.aarch64.neon.vsri",
+  "llvm.aarch64.sdiv",
+  "llvm.aarch64.sisd.fabd",
+  "llvm.aarch64.sisd.fcvtxn",
+  "llvm.aarch64.stlxp",
+  "llvm.aarch64.stlxr",
+  "llvm.aarch64.stxp",
+  "llvm.aarch64.stxr",
+  "llvm.aarch64.udiv",
+  "llvm.amdgcn.alignbit",
+  "llvm.amdgcn.alignbyte",
+  "llvm.amdgcn.atomic.dec",
+  "llvm.amdgcn.atomic.inc",
+  "llvm.amdgcn.break",
+  "llvm.amdgcn.buffer.atomic.add",
+  "llvm.amdgcn.buffer.atomic.and",
+  "llvm.amdgcn.buffer.atomic.cmpswap",
+  "llvm.amdgcn.buffer.atomic.or",
+  "llvm.amdgcn.buffer.atomic.smax",
+  "llvm.amdgcn.buffer.atomic.smin",
+  "llvm.amdgcn.buffer.atomic.sub",
+  "llvm.amdgcn.buffer.atomic.swap",
+  "llvm.amdgcn.buffer.atomic.umax",
+  "llvm.amdgcn.buffer.atomic.umin",
+  "llvm.amdgcn.buffer.atomic.xor",
+  "llvm.amdgcn.buffer.load",
+  "llvm.amdgcn.buffer.load.format",
+  "llvm.amdgcn.buffer.store",
+  "llvm.amdgcn.buffer.store.format",
+  "llvm.amdgcn.buffer.wbinvl1",
+  "llvm.amdgcn.buffer.wbinvl1.sc",
+  "llvm.amdgcn.buffer.wbinvl1.vol",
+  "llvm.amdgcn.class",
+  "llvm.amdgcn.cos",
+  "llvm.amdgcn.cubeid",
+  "llvm.amdgcn.cubema",
+  "llvm.amdgcn.cubesc",
+  "llvm.amdgcn.cubetc",
+  "llvm.amdgcn.cvt.pk.i16",
+  "llvm.amdgcn.cvt.pk.u16",
+  "llvm.amdgcn.cvt.pk.u8.f32",
+  "llvm.amdgcn.cvt.pknorm.i16",
+  "llvm.amdgcn.cvt.pknorm.u16",
+  "llvm.amdgcn.cvt.pkrtz",
+  "llvm.amdgcn.dispatch.id",
+  "llvm.amdgcn.dispatch.ptr",
+  "llvm.amdgcn.div.fixup",
+  "llvm.amdgcn.div.fmas",
+  "llvm.amdgcn.div.scale",
+  "llvm.amdgcn.ds.bpermute",
+  "llvm.amdgcn.ds.fadd",
+  "llvm.amdgcn.ds.fmax",
+  "llvm.amdgcn.ds.fmin",
+  "llvm.amdgcn.ds.permute",
+  "llvm.amdgcn.ds.swizzle",
+  "llvm.amdgcn.else",
+  "llvm.amdgcn.else.break",
+  "llvm.amdgcn.end.cf",
+  "llvm.amdgcn.exp",
+  "llvm.amdgcn.exp.compr",
+  "llvm.amdgcn.fcmp",
+  "llvm.amdgcn.fdiv.fast",
+  "llvm.amdgcn.fdot2",
+  "llvm.amdgcn.fmad.ftz",
+  "llvm.amdgcn.fmed3",
+  "llvm.amdgcn.fmul.legacy",
+  "llvm.amdgcn.fract",
+  "llvm.amdgcn.frexp.exp",
+  "llvm.amdgcn.frexp.mant",
+  "llvm.amdgcn.groupstaticsize",
+  "llvm.amdgcn.icmp",
+  "llvm.amdgcn.if",
+  "llvm.amdgcn.if.break",
+  "llvm.amdgcn.image.atomic.add.1d",
+  "llvm.amdgcn.image.atomic.add.1darray",
+  "llvm.amdgcn.image.atomic.add.2d",
+  "llvm.amdgcn.image.atomic.add.2darray",
+  "llvm.amdgcn.image.atomic.add.2darraymsaa",
+  "llvm.amdgcn.image.atomic.add.2dmsaa",
+  "llvm.amdgcn.image.atomic.add.3d",
+  "llvm.amdgcn.image.atomic.add.cube",
+  "llvm.amdgcn.image.atomic.and.1d",
+  "llvm.amdgcn.image.atomic.and.1darray",
+  "llvm.amdgcn.image.atomic.and.2d",
+  "llvm.amdgcn.image.atomic.and.2darray",
+  "llvm.amdgcn.image.atomic.and.2darraymsaa",
+  "llvm.amdgcn.image.atomic.and.2dmsaa",
+  "llvm.amdgcn.image.atomic.and.3d",
+  "llvm.amdgcn.image.atomic.and.cube",
+  "llvm.amdgcn.image.atomic.cmpswap.1d",
+  "llvm.amdgcn.image.atomic.cmpswap.1darray",
+  "llvm.amdgcn.image.atomic.cmpswap.2d",
+  "llvm.amdgcn.image.atomic.cmpswap.2darray",
+  "llvm.amdgcn.image.atomic.cmpswap.2darraymsaa",
+  "llvm.amdgcn.image.atomic.cmpswap.2dmsaa",
+  "llvm.amdgcn.image.atomic.cmpswap.3d",
+  "llvm.amdgcn.image.atomic.cmpswap.cube",
+  "llvm.amdgcn.image.atomic.dec.1d",
+  "llvm.amdgcn.image.atomic.dec.1darray",
+  "llvm.amdgcn.image.atomic.dec.2d",
+  "llvm.amdgcn.image.atomic.dec.2darray",
+  "llvm.amdgcn.image.atomic.dec.2darraymsaa",
+  "llvm.amdgcn.image.atomic.dec.2dmsaa",
+  "llvm.amdgcn.image.atomic.dec.3d",
+  "llvm.amdgcn.image.atomic.dec.cube",
+  "llvm.amdgcn.image.atomic.inc.1d",
+  "llvm.amdgcn.image.atomic.inc.1darray",
+  "llvm.amdgcn.image.atomic.inc.2d",
+  "llvm.amdgcn.image.atomic.inc.2darray",
+  "llvm.amdgcn.image.atomic.inc.2darraymsaa",
+  "llvm.amdgcn.image.atomic.inc.2dmsaa",
+  "llvm.amdgcn.image.atomic.inc.3d",
+  "llvm.amdgcn.image.atomic.inc.cube",
+  "llvm.amdgcn.image.atomic.or.1d",
+  "llvm.amdgcn.image.atomic.or.1darray",
+  "llvm.amdgcn.image.atomic.or.2d",
+  "llvm.amdgcn.image.atomic.or.2darray",
+  "llvm.amdgcn.image.atomic.or.2darraymsaa",
+  "llvm.amdgcn.image.atomic.or.2dmsaa",
+  "llvm.amdgcn.image.atomic.or.3d",
+  "llvm.amdgcn.image.atomic.or.cube",
+  "llvm.amdgcn.image.atomic.smax.1d",
+  "llvm.amdgcn.image.atomic.smax.1darray",
+  "llvm.amdgcn.image.atomic.smax.2d",
+  "llvm.amdgcn.image.atomic.smax.2darray",
+  "llvm.amdgcn.image.atomic.smax.2darraymsaa",
+  "llvm.amdgcn.image.atomic.smax.2dmsaa",
+  "llvm.amdgcn.image.atomic.smax.3d",
+  "llvm.amdgcn.image.atomic.smax.cube",
+  "llvm.amdgcn.image.atomic.smin.1d",
+  "llvm.amdgcn.image.atomic.smin.1darray",
+  "llvm.amdgcn.image.atomic.smin.2d",
+  "llvm.amdgcn.image.atomic.smin.2darray",
+  "llvm.amdgcn.image.atomic.smin.2darraymsaa",
+  "llvm.amdgcn.image.atomic.smin.2dmsaa",
+  "llvm.amdgcn.image.atomic.smin.3d",
+  "llvm.amdgcn.image.atomic.smin.cube",
+  "llvm.amdgcn.image.atomic.sub.1d",
+  "llvm.amdgcn.image.atomic.sub.1darray",
+  "llvm.amdgcn.image.atomic.sub.2d",
+  "llvm.amdgcn.image.atomic.sub.2darray",
+  "llvm.amdgcn.image.atomic.sub.2darraymsaa",
+  "llvm.amdgcn.image.atomic.sub.2dmsaa",
+  "llvm.amdgcn.image.atomic.sub.3d",
+  "llvm.amdgcn.image.atomic.sub.cube",
+  "llvm.amdgcn.image.atomic.swap.1d",
+  "llvm.amdgcn.image.atomic.swap.1darray",
+  "llvm.amdgcn.image.atomic.swap.2d",
+  "llvm.amdgcn.image.atomic.swap.2darray",
+  "llvm.amdgcn.image.atomic.swap.2darraymsaa",
+  "llvm.amdgcn.image.atomic.swap.2dmsaa",
+  "llvm.amdgcn.image.atomic.swap.3d",
+  "llvm.amdgcn.image.atomic.swap.cube",
+  "llvm.amdgcn.image.atomic.umax.1d",
+  "llvm.amdgcn.image.atomic.umax.1darray",
+  "llvm.amdgcn.image.atomic.umax.2d",
+  "llvm.amdgcn.image.atomic.umax.2darray",
+  "llvm.amdgcn.image.atomic.umax.2darraymsaa",
+  "llvm.amdgcn.image.atomic.umax.2dmsaa",
+  "llvm.amdgcn.image.atomic.umax.3d",
+  "llvm.amdgcn.image.atomic.umax.cube",
+  "llvm.amdgcn.image.atomic.umin.1d",
+  "llvm.amdgcn.image.atomic.umin.1darray",
+  "llvm.amdgcn.image.atomic.umin.2d",
+  "llvm.amdgcn.image.atomic.umin.2darray",
+  "llvm.amdgcn.image.atomic.umin.2darraymsaa",
+  "llvm.amdgcn.image.atomic.umin.2dmsaa",
+  "llvm.amdgcn.image.atomic.umin.3d",
+  "llvm.amdgcn.image.atomic.umin.cube",
+  "llvm.amdgcn.image.atomic.xor.1d",
+  "llvm.amdgcn.image.atomic.xor.1darray",
+  "llvm.amdgcn.image.atomic.xor.2d",
+  "llvm.amdgcn.image.atomic.xor.2darray",
+  "llvm.amdgcn.image.atomic.xor.2darraymsaa",
+  "llvm.amdgcn.image.atomic.xor.2dmsaa",
+  "llvm.amdgcn.image.atomic.xor.3d",
+  "llvm.amdgcn.image.atomic.xor.cube",
+  "llvm.amdgcn.image.gather4.2d",
+  "llvm.amdgcn.image.gather4.2darray",
+  "llvm.amdgcn.image.gather4.b.2d",
+  "llvm.amdgcn.image.gather4.b.2darray",
+  "llvm.amdgcn.image.gather4.b.cl.2d",
+  "llvm.amdgcn.image.gather4.b.cl.2darray",
+  "llvm.amdgcn.image.gather4.b.cl.cube",
+  "llvm.amdgcn.image.gather4.b.cl.o.2d",
+  "llvm.amdgcn.image.gather4.b.cl.o.2darray",
+  "llvm.amdgcn.image.gather4.b.cl.o.cube",
+  "llvm.amdgcn.image.gather4.b.cube",
+  "llvm.amdgcn.image.gather4.b.o.2d",
+  "llvm.amdgcn.image.gather4.b.o.2darray",
+  "llvm.amdgcn.image.gather4.b.o.cube",
+  "llvm.amdgcn.image.gather4.c.2d",
+  "llvm.amdgcn.image.gather4.c.2darray",
+  "llvm.amdgcn.image.gather4.c.b.2d",
+  "llvm.amdgcn.image.gather4.c.b.2darray",
+  "llvm.amdgcn.image.gather4.c.b.cl.2d",
+  "llvm.amdgcn.image.gather4.c.b.cl.2darray",
+  "llvm.amdgcn.image.gather4.c.b.cl.cube",
+  "llvm.amdgcn.image.gather4.c.b.cl.o.2d",
+  "llvm.amdgcn.image.gather4.c.b.cl.o.2darray",
+  "llvm.amdgcn.image.gather4.c.b.cl.o.cube",
+  "llvm.amdgcn.image.gather4.c.b.cube",
+  "llvm.amdgcn.image.gather4.c.b.o.2d",
+  "llvm.amdgcn.image.gather4.c.b.o.2darray",
+  "llvm.amdgcn.image.gather4.c.b.o.cube",
+  "llvm.amdgcn.image.gather4.c.cl.2d",
+  "llvm.amdgcn.image.gather4.c.cl.2darray",
+  "llvm.amdgcn.image.gather4.c.cl.cube",
+  "llvm.amdgcn.image.gather4.c.cl.o.2d",
+  "llvm.amdgcn.image.gather4.c.cl.o.2darray",
+  "llvm.amdgcn.image.gather4.c.cl.o.cube",
+  "llvm.amdgcn.image.gather4.c.cube",
+  "llvm.amdgcn.image.gather4.c.l.2d",
+  "llvm.amdgcn.image.gather4.c.l.2darray",
+  "llvm.amdgcn.image.gather4.c.l.cube",
+  "llvm.amdgcn.image.gather4.c.l.o.2d",
+  "llvm.amdgcn.image.gather4.c.l.o.2darray",
+  "llvm.amdgcn.image.gather4.c.l.o.cube",
+  "llvm.amdgcn.image.gather4.c.lz.2d",
+  "llvm.amdgcn.image.gather4.c.lz.2darray",
+  "llvm.amdgcn.image.gather4.c.lz.cube",
+  "llvm.amdgcn.image.gather4.c.lz.o.2d",
+  "llvm.amdgcn.image.gather4.c.lz.o.2darray",
+  "llvm.amdgcn.image.gather4.c.lz.o.cube",
+  "llvm.amdgcn.image.gather4.c.o.2d",
+  "llvm.amdgcn.image.gather4.c.o.2darray",
+  "llvm.amdgcn.image.gather4.c.o.cube",
+  "llvm.amdgcn.image.gather4.cl.2d",
+  "llvm.amdgcn.image.gather4.cl.2darray",
+  "llvm.amdgcn.image.gather4.cl.cube",
+  "llvm.amdgcn.image.gather4.cl.o.2d",
+  "llvm.amdgcn.image.gather4.cl.o.2darray",
+  "llvm.amdgcn.image.gather4.cl.o.cube",
+  "llvm.amdgcn.image.gather4.cube",
+  "llvm.amdgcn.image.gather4.l.2d",
+  "llvm.amdgcn.image.gather4.l.2darray",
+  "llvm.amdgcn.image.gather4.l.cube",
+  "llvm.amdgcn.image.gather4.l.o.2d",
+  "llvm.amdgcn.image.gather4.l.o.2darray",
+  "llvm.amdgcn.image.gather4.l.o.cube",
+  "llvm.amdgcn.image.gather4.lz.2d",
+  "llvm.amdgcn.image.gather4.lz.2darray",
+  "llvm.amdgcn.image.gather4.lz.cube",
+  "llvm.amdgcn.image.gather4.lz.o.2d",
+  "llvm.amdgcn.image.gather4.lz.o.2darray",
+  "llvm.amdgcn.image.gather4.lz.o.cube",
+  "llvm.amdgcn.image.gather4.o.2d",
+  "llvm.amdgcn.image.gather4.o.2darray",
+  "llvm.amdgcn.image.gather4.o.cube",
+  "llvm.amdgcn.image.getlod.1d",
+  "llvm.amdgcn.image.getlod.1darray",
+  "llvm.amdgcn.image.getlod.2d",
+  "llvm.amdgcn.image.getlod.2darray",
+  "llvm.amdgcn.image.getlod.3d",
+  "llvm.amdgcn.image.getlod.cube",
+  "llvm.amdgcn.image.getresinfo.1d",
+  "llvm.amdgcn.image.getresinfo.1darray",
+  "llvm.amdgcn.image.getresinfo.2d",
+  "llvm.amdgcn.image.getresinfo.2darray",
+  "llvm.amdgcn.image.getresinfo.2darraymsaa",
+  "llvm.amdgcn.image.getresinfo.2dmsaa",
+  "llvm.amdgcn.image.getresinfo.3d",
+  "llvm.amdgcn.image.getresinfo.cube",
+  "llvm.amdgcn.image.load.1d",
+  "llvm.amdgcn.image.load.1darray",
+  "llvm.amdgcn.image.load.2d",
+  "llvm.amdgcn.image.load.2darray",
+  "llvm.amdgcn.image.load.2darraymsaa",
+  "llvm.amdgcn.image.load.2dmsaa",
+  "llvm.amdgcn.image.load.3d",
+  "llvm.amdgcn.image.load.cube",
+  "llvm.amdgcn.image.load.mip.1d",
+  "llvm.amdgcn.image.load.mip.1darray",
+  "llvm.amdgcn.image.load.mip.2d",
+  "llvm.amdgcn.image.load.mip.2darray",
+  "llvm.amdgcn.image.load.mip.3d",
+  "llvm.amdgcn.image.load.mip.cube",
+  "llvm.amdgcn.image.sample.1d",
+  "llvm.amdgcn.image.sample.1darray",
+  "llvm.amdgcn.image.sample.2d",
+  "llvm.amdgcn.image.sample.2darray",
+  "llvm.amdgcn.image.sample.3d",
+  "llvm.amdgcn.image.sample.b.1d",
+  "llvm.amdgcn.image.sample.b.1darray",
+  "llvm.amdgcn.image.sample.b.2d",
+  "llvm.amdgcn.image.sample.b.2darray",
+  "llvm.amdgcn.image.sample.b.3d",
+  "llvm.amdgcn.image.sample.b.cl.1d",
+  "llvm.amdgcn.image.sample.b.cl.1darray",
+  "llvm.amdgcn.image.sample.b.cl.2d",
+  "llvm.amdgcn.image.sample.b.cl.2darray",
+  "llvm.amdgcn.image.sample.b.cl.3d",
+  "llvm.amdgcn.image.sample.b.cl.cube",
+  "llvm.amdgcn.image.sample.b.cl.o.1d",
+  "llvm.amdgcn.image.sample.b.cl.o.1darray",
+  "llvm.amdgcn.image.sample.b.cl.o.2d",
+  "llvm.amdgcn.image.sample.b.cl.o.2darray",
+  "llvm.amdgcn.image.sample.b.cl.o.3d",
+  "llvm.amdgcn.image.sample.b.cl.o.cube",
+  "llvm.amdgcn.image.sample.b.cube",
+  "llvm.amdgcn.image.sample.b.o.1d",
+  "llvm.amdgcn.image.sample.b.o.1darray",
+  "llvm.amdgcn.image.sample.b.o.2d",
+  "llvm.amdgcn.image.sample.b.o.2darray",
+  "llvm.amdgcn.image.sample.b.o.3d",
+  "llvm.amdgcn.image.sample.b.o.cube",
+  "llvm.amdgcn.image.sample.c.1d",
+  "llvm.amdgcn.image.sample.c.1darray",
+  "llvm.amdgcn.image.sample.c.2d",
+  "llvm.amdgcn.image.sample.c.2darray",
+  "llvm.amdgcn.image.sample.c.3d",
+  "llvm.amdgcn.image.sample.c.b.1d",
+  "llvm.amdgcn.image.sample.c.b.1darray",
+  "llvm.amdgcn.image.sample.c.b.2d",
+  "llvm.amdgcn.image.sample.c.b.2darray",
+  "llvm.amdgcn.image.sample.c.b.3d",
+  "llvm.amdgcn.image.sample.c.b.cl.1d",
+  "llvm.amdgcn.image.sample.c.b.cl.1darray",
+  "llvm.amdgcn.image.sample.c.b.cl.2d",
+  "llvm.amdgcn.image.sample.c.b.cl.2darray",
+  "llvm.amdgcn.image.sample.c.b.cl.3d",
+  "llvm.amdgcn.image.sample.c.b.cl.cube",
+  "llvm.amdgcn.image.sample.c.b.cl.o.1d",
+  "llvm.amdgcn.image.sample.c.b.cl.o.1darray",
+  "llvm.amdgcn.image.sample.c.b.cl.o.2d",
+  "llvm.amdgcn.image.sample.c.b.cl.o.2darray",
+  "llvm.amdgcn.image.sample.c.b.cl.o.3d",
+  "llvm.amdgcn.image.sample.c.b.cl.o.cube",
+  "llvm.amdgcn.image.sample.c.b.cube",
+  "llvm.amdgcn.image.sample.c.b.o.1d",
+  "llvm.amdgcn.image.sample.c.b.o.1darray",
+  "llvm.amdgcn.image.sample.c.b.o.2d",
+  "llvm.amdgcn.image.sample.c.b.o.2darray",
+  "llvm.amdgcn.image.sample.c.b.o.3d",
+  "llvm.amdgcn.image.sample.c.b.o.cube",
+  "llvm.amdgcn.image.sample.c.cd.1d",
+  "llvm.amdgcn.image.sample.c.cd.1darray",
+  "llvm.amdgcn.image.sample.c.cd.2d",
+  "llvm.amdgcn.image.sample.c.cd.2darray",
+  "llvm.amdgcn.image.sample.c.cd.3d",
+  "llvm.amdgcn.image.sample.c.cd.cl.1d",
+  "llvm.amdgcn.image.sample.c.cd.cl.1darray",
+  "llvm.amdgcn.image.sample.c.cd.cl.2d",
+  "llvm.amdgcn.image.sample.c.cd.cl.2darray",
+  "llvm.amdgcn.image.sample.c.cd.cl.3d",
+  "llvm.amdgcn.image.sample.c.cd.cl.cube",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.1d",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.1darray",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.2d",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.2darray",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.3d",
+  "llvm.amdgcn.image.sample.c.cd.cl.o.cube",
+  "llvm.amdgcn.image.sample.c.cd.cube",
+  "llvm.amdgcn.image.sample.c.cd.o.1d",
+  "llvm.amdgcn.image.sample.c.cd.o.1darray",
+  "llvm.amdgcn.image.sample.c.cd.o.2d",
+  "llvm.amdgcn.image.sample.c.cd.o.2darray",
+  "llvm.amdgcn.image.sample.c.cd.o.3d",
+  "llvm.amdgcn.image.sample.c.cd.o.cube",
+  "llvm.amdgcn.image.sample.c.cl.1d",
+  "llvm.amdgcn.image.sample.c.cl.1darray",
+  "llvm.amdgcn.image.sample.c.cl.2d",
+  "llvm.amdgcn.image.sample.c.cl.2darray",
+  "llvm.amdgcn.image.sample.c.cl.3d",
+  "llvm.amdgcn.image.sample.c.cl.cube",
+  "llvm.amdgcn.image.sample.c.cl.o.1d",
+  "llvm.amdgcn.image.sample.c.cl.o.1darray",
+  "llvm.amdgcn.image.sample.c.cl.o.2d",
+  "llvm.amdgcn.image.sample.c.cl.o.2darray",
+  "llvm.amdgcn.image.sample.c.cl.o.3d",
+  "llvm.amdgcn.image.sample.c.cl.o.cube",
+  "llvm.amdgcn.image.sample.c.cube",
+  "llvm.amdgcn.image.sample.c.d.1d",
+  "llvm.amdgcn.image.sample.c.d.1darray",
+  "llvm.amdgcn.image.sample.c.d.2d",
+  "llvm.amdgcn.image.sample.c.d.2darray",
+  "llvm.amdgcn.image.sample.c.d.3d",
+  "llvm.amdgcn.image.sample.c.d.cl.1d",
+  "llvm.amdgcn.image.sample.c.d.cl.1darray",
+  "llvm.amdgcn.image.sample.c.d.cl.2d",
+  "llvm.amdgcn.image.sample.c.d.cl.2darray",
+  "llvm.amdgcn.image.sample.c.d.cl.3d",
+  "llvm.amdgcn.image.sample.c.d.cl.cube",
+  "llvm.amdgcn.image.sample.c.d.cl.o.1d",
+  "llvm.amdgcn.image.sample.c.d.cl.o.1darray",
+  "llvm.amdgcn.image.sample.c.d.cl.o.2d",
+  "llvm.amdgcn.image.sample.c.d.cl.o.2darray",
+  "llvm.amdgcn.image.sample.c.d.cl.o.3d",
+  "llvm.amdgcn.image.sample.c.d.cl.o.cube",
+  "llvm.amdgcn.image.sample.c.d.cube",
+  "llvm.amdgcn.image.sample.c.d.o.1d",
+  "llvm.amdgcn.image.sample.c.d.o.1darray",
+  "llvm.amdgcn.image.sample.c.d.o.2d",
+  "llvm.amdgcn.image.sample.c.d.o.2darray",
+  "llvm.amdgcn.image.sample.c.d.o.3d",
+  "llvm.amdgcn.image.sample.c.d.o.cube",
+  "llvm.amdgcn.image.sample.c.l.1d",
+  "llvm.amdgcn.image.sample.c.l.1darray",
+  "llvm.amdgcn.image.sample.c.l.2d",
+  "llvm.amdgcn.image.sample.c.l.2darray",
+  "llvm.amdgcn.image.sample.c.l.3d",
+  "llvm.amdgcn.image.sample.c.l.cube",
+  "llvm.amdgcn.image.sample.c.l.o.1d",
+  "llvm.amdgcn.image.sample.c.l.o.1darray",
+  "llvm.amdgcn.image.sample.c.l.o.2d",
+  "llvm.amdgcn.image.sample.c.l.o.2darray",
+  "llvm.amdgcn.image.sample.c.l.o.3d",
+  "llvm.amdgcn.image.sample.c.l.o.cube",
+  "llvm.amdgcn.image.sample.c.lz.1d",
+  "llvm.amdgcn.image.sample.c.lz.1darray",
+  "llvm.amdgcn.image.sample.c.lz.2d",
+  "llvm.amdgcn.image.sample.c.lz.2darray",
+  "llvm.amdgcn.image.sample.c.lz.3d",
+  "llvm.amdgcn.image.sample.c.lz.cube",
+  "llvm.amdgcn.image.sample.c.lz.o.1d",
+  "llvm.amdgcn.image.sample.c.lz.o.1darray",
+  "llvm.amdgcn.image.sample.c.lz.o.2d",
+  "llvm.amdgcn.image.sample.c.lz.o.2darray",
+  "llvm.amdgcn.image.sample.c.lz.o.3d",
+  "llvm.amdgcn.image.sample.c.lz.o.cube",
+  "llvm.amdgcn.image.sample.c.o.1d",
+  "llvm.amdgcn.image.sample.c.o.1darray",
+  "llvm.amdgcn.image.sample.c.o.2d",
+  "llvm.amdgcn.image.sample.c.o.2darray",
+  "llvm.amdgcn.image.sample.c.o.3d",
+  "llvm.amdgcn.image.sample.c.o.cube",
+  "llvm.amdgcn.image.sample.cd.1d",
+  "llvm.amdgcn.image.sample.cd.1darray",
+  "llvm.amdgcn.image.sample.cd.2d",
+  "llvm.amdgcn.image.sample.cd.2darray",
+  "llvm.amdgcn.image.sample.cd.3d",
+  "llvm.amdgcn.image.sample.cd.cl.1d",
+  "llvm.amdgcn.image.sample.cd.cl.1darray",
+  "llvm.amdgcn.image.sample.cd.cl.2d",
+  "llvm.amdgcn.image.sample.cd.cl.2darray",
+  "llvm.amdgcn.image.sample.cd.cl.3d",
+  "llvm.amdgcn.image.sample.cd.cl.cube",
+  "llvm.amdgcn.image.sample.cd.cl.o.1d",
+  "llvm.amdgcn.image.sample.cd.cl.o.1darray",
+  "llvm.amdgcn.image.sample.cd.cl.o.2d",
+  "llvm.amdgcn.image.sample.cd.cl.o.2darray",
+  "llvm.amdgcn.image.sample.cd.cl.o.3d",
+  "llvm.amdgcn.image.sample.cd.cl.o.cube",
+  "llvm.amdgcn.image.sample.cd.cube",
+  "llvm.amdgcn.image.sample.cd.o.1d",
+  "llvm.amdgcn.image.sample.cd.o.1darray",
+  "llvm.amdgcn.image.sample.cd.o.2d",
+  "llvm.amdgcn.image.sample.cd.o.2darray",
+  "llvm.amdgcn.image.sample.cd.o.3d",
+  "llvm.amdgcn.image.sample.cd.o.cube",
+  "llvm.amdgcn.image.sample.cl.1d",
+  "llvm.amdgcn.image.sample.cl.1darray",
+  "llvm.amdgcn.image.sample.cl.2d",
+  "llvm.amdgcn.image.sample.cl.2darray",
+  "llvm.amdgcn.image.sample.cl.3d",
+  "llvm.amdgcn.image.sample.cl.cube",
+  "llvm.amdgcn.image.sample.cl.o.1d",
+  "llvm.amdgcn.image.sample.cl.o.1darray",
+  "llvm.amdgcn.image.sample.cl.o.2d",
+  "llvm.amdgcn.image.sample.cl.o.2darray",
+  "llvm.amdgcn.image.sample.cl.o.3d",
+  "llvm.amdgcn.image.sample.cl.o.cube",
+  "llvm.amdgcn.image.sample.cube",
+  "llvm.amdgcn.image.sample.d.1d",
+  "llvm.amdgcn.image.sample.d.1darray",
+  "llvm.amdgcn.image.sample.d.2d",
+  "llvm.amdgcn.image.sample.d.2darray",
+  "llvm.amdgcn.image.sample.d.3d",
+  "llvm.amdgcn.image.sample.d.cl.1d",
+  "llvm.amdgcn.image.sample.d.cl.1darray",
+  "llvm.amdgcn.image.sample.d.cl.2d",
+  "llvm.amdgcn.image.sample.d.cl.2darray",
+  "llvm.amdgcn.image.sample.d.cl.3d",
+  "llvm.amdgcn.image.sample.d.cl.cube",
+  "llvm.amdgcn.image.sample.d.cl.o.1d",
+  "llvm.amdgcn.image.sample.d.cl.o.1darray",
+  "llvm.amdgcn.image.sample.d.cl.o.2d",
+  "llvm.amdgcn.image.sample.d.cl.o.2darray",
+  "llvm.amdgcn.image.sample.d.cl.o.3d",
+  "llvm.amdgcn.image.sample.d.cl.o.cube",
+  "llvm.amdgcn.image.sample.d.cube",
+  "llvm.amdgcn.image.sample.d.o.1d",
+  "llvm.amdgcn.image.sample.d.o.1darray",
+  "llvm.amdgcn.image.sample.d.o.2d",
+  "llvm.amdgcn.image.sample.d.o.2darray",
+  "llvm.amdgcn.image.sample.d.o.3d",
+  "llvm.amdgcn.image.sample.d.o.cube",
+  "llvm.amdgcn.image.sample.l.1d",
+  "llvm.amdgcn.image.sample.l.1darray",
+  "llvm.amdgcn.image.sample.l.2d",
+  "llvm.amdgcn.image.sample.l.2darray",
+  "llvm.amdgcn.image.sample.l.3d",
+  "llvm.amdgcn.image.sample.l.cube",
+  "llvm.amdgcn.image.sample.l.o.1d",
+  "llvm.amdgcn.image.sample.l.o.1darray",
+  "llvm.amdgcn.image.sample.l.o.2d",
+  "llvm.amdgcn.image.sample.l.o.2darray",
+  "llvm.amdgcn.image.sample.l.o.3d",
+  "llvm.amdgcn.image.sample.l.o.cube",
+  "llvm.amdgcn.image.sample.lz.1d",
+  "llvm.amdgcn.image.sample.lz.1darray",
+  "llvm.amdgcn.image.sample.lz.2d",
+  "llvm.amdgcn.image.sample.lz.2darray",
+  "llvm.amdgcn.image.sample.lz.3d",
+  "llvm.amdgcn.image.sample.lz.cube",
+  "llvm.amdgcn.image.sample.lz.o.1d",
+  "llvm.amdgcn.image.sample.lz.o.1darray",
+  "llvm.amdgcn.image.sample.lz.o.2d",
+  "llvm.amdgcn.image.sample.lz.o.2darray",
+  "llvm.amdgcn.image.sample.lz.o.3d",
+  "llvm.amdgcn.image.sample.lz.o.cube",
+  "llvm.amdgcn.image.sample.o.1d",
+  "llvm.amdgcn.image.sample.o.1darray",
+  "llvm.amdgcn.image.sample.o.2d",
+  "llvm.amdgcn.image.sample.o.2darray",
+  "llvm.amdgcn.image.sample.o.3d",
+  "llvm.amdgcn.image.sample.o.cube",
+  "llvm.amdgcn.image.store.1d",
+  "llvm.amdgcn.image.store.1darray",
+  "llvm.amdgcn.image.store.2d",
+  "llvm.amdgcn.image.store.2darray",
+  "llvm.amdgcn.image.store.2darraymsaa",
+  "llvm.amdgcn.image.store.2dmsaa",
+  "llvm.amdgcn.image.store.3d",
+  "llvm.amdgcn.image.store.cube",
+  "llvm.amdgcn.image.store.mip.1d",
+  "llvm.amdgcn.image.store.mip.1darray",
+  "llvm.amdgcn.image.store.mip.2d",
+  "llvm.amdgcn.image.store.mip.2darray",
+  "llvm.amdgcn.image.store.mip.3d",
+  "llvm.amdgcn.image.store.mip.cube",
+  "llvm.amdgcn.implicit.buffer.ptr",
+  "llvm.amdgcn.implicitarg.ptr",
+  "llvm.amdgcn.init.exec",
+  "llvm.amdgcn.init.exec.from.input",
+  "llvm.amdgcn.interp.mov",
+  "llvm.amdgcn.interp.p1",
+  "llvm.amdgcn.interp.p2",
+  "llvm.amdgcn.kernarg.segment.ptr",
+  "llvm.amdgcn.kill",
+  "llvm.amdgcn.ldexp",
+  "llvm.amdgcn.lerp",
+  "llvm.amdgcn.log.clamp",
+  "llvm.amdgcn.loop",
+  "llvm.amdgcn.mbcnt.hi",
+  "llvm.amdgcn.mbcnt.lo",
+  "llvm.amdgcn.mov.dpp",
+  "llvm.amdgcn.mqsad.pk.u16.u8",
+  "llvm.amdgcn.mqsad.u32.u8",
+  "llvm.amdgcn.msad.u8",
+  "llvm.amdgcn.ps.live",
+  "llvm.amdgcn.qsad.pk.u16.u8",
+  "llvm.amdgcn.queue.ptr",
+  "llvm.amdgcn.rcp",
+  "llvm.amdgcn.rcp.legacy",
+  "llvm.amdgcn.readfirstlane",
+  "llvm.amdgcn.readlane",
+  "llvm.amdgcn.rsq",
+  "llvm.amdgcn.rsq.clamp",
+  "llvm.amdgcn.rsq.legacy",
+  "llvm.amdgcn.s.barrier",
+  "llvm.amdgcn.s.dcache.inv",
+  "llvm.amdgcn.s.dcache.inv.vol",
+  "llvm.amdgcn.s.dcache.wb",
+  "llvm.amdgcn.s.dcache.wb.vol",
+  "llvm.amdgcn.s.decperflevel",
+  "llvm.amdgcn.s.getpc",
+  "llvm.amdgcn.s.getreg",
+  "llvm.amdgcn.s.incperflevel",
+  "llvm.amdgcn.s.memrealtime",
+  "llvm.amdgcn.s.memtime",
+  "llvm.amdgcn.s.sendmsg",
+  "llvm.amdgcn.s.sendmsghalt",
+  "llvm.amdgcn.s.sleep",
+  "llvm.amdgcn.s.waitcnt",
+  "llvm.amdgcn.sad.hi.u8",
+  "llvm.amdgcn.sad.u16",
+  "llvm.amdgcn.sad.u8",
+  "llvm.amdgcn.sbfe",
+  "llvm.amdgcn.sdot2",
+  "llvm.amdgcn.sdot4",
+  "llvm.amdgcn.sdot8",
+  "llvm.amdgcn.set.inactive",
+  "llvm.amdgcn.sffbh",
+  "llvm.amdgcn.sin",
+  "llvm.amdgcn.tbuffer.load",
+  "llvm.amdgcn.tbuffer.store",
+  "llvm.amdgcn.trig.preop",
+  "llvm.amdgcn.ubfe",
+  "llvm.amdgcn.udot2",
+  "llvm.amdgcn.udot4",
+  "llvm.amdgcn.udot8",
+  "llvm.amdgcn.unreachable",
+  "llvm.amdgcn.update.dpp",
+  "llvm.amdgcn.wave.barrier",
+  "llvm.amdgcn.workgroup.id.x",
+  "llvm.amdgcn.workgroup.id.y",
+  "llvm.amdgcn.workgroup.id.z",
+  "llvm.amdgcn.workitem.id.x",
+  "llvm.amdgcn.workitem.id.y",
+  "llvm.amdgcn.workitem.id.z",
+  "llvm.amdgcn.wqm",
+  "llvm.amdgcn.wqm.vote",
+  "llvm.amdgcn.writelane",
+  "llvm.amdgcn.wwm",
+  "llvm.arm.cdp",
+  "llvm.arm.cdp2",
+  "llvm.arm.clrex",
+  "llvm.arm.crc32b",
+  "llvm.arm.crc32cb",
+  "llvm.arm.crc32ch",
+  "llvm.arm.crc32cw",
+  "llvm.arm.crc32h",
+  "llvm.arm.crc32w",
+  "llvm.arm.dbg",
+  "llvm.arm.dmb",
+  "llvm.arm.dsb",
+  "llvm.arm.get.fpscr",
+  "llvm.arm.hint",
+  "llvm.arm.isb",
+  "llvm.arm.ldaex",
+  "llvm.arm.ldaexd",
+  "llvm.arm.ldc",
+  "llvm.arm.ldc2",
+  "llvm.arm.ldc2l",
+  "llvm.arm.ldcl",
+  "llvm.arm.ldrex",
+  "llvm.arm.ldrexd",
+  "llvm.arm.mcr",
+  "llvm.arm.mcr2",
+  "llvm.arm.mcrr",
+  "llvm.arm.mcrr2",
+  "llvm.arm.mrc",
+  "llvm.arm.mrc2",
+  "llvm.arm.mrrc",
+  "llvm.arm.mrrc2",
+  "llvm.arm.neon.aesd",
+  "llvm.arm.neon.aese",
+  "llvm.arm.neon.aesimc",
+  "llvm.arm.neon.aesmc",
+  "llvm.arm.neon.sdot",
+  "llvm.arm.neon.sha1c",
+  "llvm.arm.neon.sha1h",
+  "llvm.arm.neon.sha1m",
+  "llvm.arm.neon.sha1p",
+  "llvm.arm.neon.sha1su0",
+  "llvm.arm.neon.sha1su1",
+  "llvm.arm.neon.sha256h",
+  "llvm.arm.neon.sha256h2",
+  "llvm.arm.neon.sha256su0",
+  "llvm.arm.neon.sha256su1",
+  "llvm.arm.neon.udot",
+  "llvm.arm.neon.vabds",
+  "llvm.arm.neon.vabdu",
+  "llvm.arm.neon.vabs",
+  "llvm.arm.neon.vacge",
+  "llvm.arm.neon.vacgt",
+  "llvm.arm.neon.vbsl",
+  "llvm.arm.neon.vcls",
+  "llvm.arm.neon.vcvtas",
+  "llvm.arm.neon.vcvtau",
+  "llvm.arm.neon.vcvtfp2fxs",
+  "llvm.arm.neon.vcvtfp2fxu",
+  "llvm.arm.neon.vcvtfp2hf",
+  "llvm.arm.neon.vcvtfxs2fp",
+  "llvm.arm.neon.vcvtfxu2fp",
+  "llvm.arm.neon.vcvthf2fp",
+  "llvm.arm.neon.vcvtms",
+  "llvm.arm.neon.vcvtmu",
+  "llvm.arm.neon.vcvtns",
+  "llvm.arm.neon.vcvtnu",
+  "llvm.arm.neon.vcvtps",
+  "llvm.arm.neon.vcvtpu",
+  "llvm.arm.neon.vhadds",
+  "llvm.arm.neon.vhaddu",
+  "llvm.arm.neon.vhsubs",
+  "llvm.arm.neon.vhsubu",
+  "llvm.arm.neon.vld1",
+  "llvm.arm.neon.vld1x2",
+  "llvm.arm.neon.vld1x3",
+  "llvm.arm.neon.vld1x4",
+  "llvm.arm.neon.vld2",
+  "llvm.arm.neon.vld2dup",
+  "llvm.arm.neon.vld2lane",
+  "llvm.arm.neon.vld3",
+  "llvm.arm.neon.vld3dup",
+  "llvm.arm.neon.vld3lane",
+  "llvm.arm.neon.vld4",
+  "llvm.arm.neon.vld4dup",
+  "llvm.arm.neon.vld4lane",
+  "llvm.arm.neon.vmaxnm",
+  "llvm.arm.neon.vmaxs",
+  "llvm.arm.neon.vmaxu",
+  "llvm.arm.neon.vminnm",
+  "llvm.arm.neon.vmins",
+  "llvm.arm.neon.vminu",
+  "llvm.arm.neon.vmullp",
+  "llvm.arm.neon.vmulls",
+  "llvm.arm.neon.vmullu",
+  "llvm.arm.neon.vmulp",
+  "llvm.arm.neon.vpadals",
+  "llvm.arm.neon.vpadalu",
+  "llvm.arm.neon.vpadd",
+  "llvm.arm.neon.vpaddls",
+  "llvm.arm.neon.vpaddlu",
+  "llvm.arm.neon.vpmaxs",
+  "llvm.arm.neon.vpmaxu",
+  "llvm.arm.neon.vpmins",
+  "llvm.arm.neon.vpminu",
+  "llvm.arm.neon.vqabs",
+  "llvm.arm.neon.vqadds",
+  "llvm.arm.neon.vqaddu",
+  "llvm.arm.neon.vqdmulh",
+  "llvm.arm.neon.vqdmull",
+  "llvm.arm.neon.vqmovns",
+  "llvm.arm.neon.vqmovnsu",
+  "llvm.arm.neon.vqmovnu",
+  "llvm.arm.neon.vqneg",
+  "llvm.arm.neon.vqrdmulh",
+  "llvm.arm.neon.vqrshiftns",
+  "llvm.arm.neon.vqrshiftnsu",
+  "llvm.arm.neon.vqrshiftnu",
+  "llvm.arm.neon.vqrshifts",
+  "llvm.arm.neon.vqrshiftu",
+  "llvm.arm.neon.vqshiftns",
+  "llvm.arm.neon.vqshiftnsu",
+  "llvm.arm.neon.vqshiftnu",
+  "llvm.arm.neon.vqshifts",
+  "llvm.arm.neon.vqshiftsu",
+  "llvm.arm.neon.vqshiftu",
+  "llvm.arm.neon.vqsubs",
+  "llvm.arm.neon.vqsubu",
+  "llvm.arm.neon.vraddhn",
+  "llvm.arm.neon.vrecpe",
+  "llvm.arm.neon.vrecps",
+  "llvm.arm.neon.vrhadds",
+  "llvm.arm.neon.vrhaddu",
+  "llvm.arm.neon.vrinta",
+  "llvm.arm.neon.vrintm",
+  "llvm.arm.neon.vrintn",
+  "llvm.arm.neon.vrintp",
+  "llvm.arm.neon.vrintx",
+  "llvm.arm.neon.vrintz",
+  "llvm.arm.neon.vrshiftn",
+  "llvm.arm.neon.vrshifts",
+  "llvm.arm.neon.vrshiftu",
+  "llvm.arm.neon.vrsqrte",
+  "llvm.arm.neon.vrsqrts",
+  "llvm.arm.neon.vrsubhn",
+  "llvm.arm.neon.vshiftins",
+  "llvm.arm.neon.vshifts",
+  "llvm.arm.neon.vshiftu",
+  "llvm.arm.neon.vst1",
+  "llvm.arm.neon.vst1x2",
+  "llvm.arm.neon.vst1x3",
+  "llvm.arm.neon.vst1x4",
+  "llvm.arm.neon.vst2",
+  "llvm.arm.neon.vst2lane",
+  "llvm.arm.neon.vst3",
+  "llvm.arm.neon.vst3lane",
+  "llvm.arm.neon.vst4",
+  "llvm.arm.neon.vst4lane",
+  "llvm.arm.neon.vtbl1",
+  "llvm.arm.neon.vtbl2",
+  "llvm.arm.neon.vtbl3",
+  "llvm.arm.neon.vtbl4",
+  "llvm.arm.neon.vtbx1",
+  "llvm.arm.neon.vtbx2",
+  "llvm.arm.neon.vtbx3",
+  "llvm.arm.neon.vtbx4",
+  "llvm.arm.qadd",
+  "llvm.arm.qadd16",
+  "llvm.arm.qadd8",
+  "llvm.arm.qasx",
+  "llvm.arm.qsax",
+  "llvm.arm.qsub",
+  "llvm.arm.qsub16",
+  "llvm.arm.qsub8",
+  "llvm.arm.sadd16",
+  "llvm.arm.sadd8",
+  "llvm.arm.sasx",
+  "llvm.arm.sel",
+  "llvm.arm.set.fpscr",
+  "llvm.arm.shadd16",
+  "llvm.arm.shadd8",
+  "llvm.arm.shasx",
+  "llvm.arm.shsax",
+  "llvm.arm.shsub16",
+  "llvm.arm.shsub8",
+  "llvm.arm.smlabb",
+  "llvm.arm.smlabt",
+  "llvm.arm.smlad",
+  "llvm.arm.smladx",
+  "llvm.arm.smlald",
+  "llvm.arm.smlaldx",
+  "llvm.arm.smlatb",
+  "llvm.arm.smlatt",
+  "llvm.arm.smlawb",
+  "llvm.arm.smlawt",
+  "llvm.arm.smlsd",
+  "llvm.arm.smlsdx",
+  "llvm.arm.smlsld",
+  "llvm.arm.smlsldx",
+  "llvm.arm.smuad",
+  "llvm.arm.smuadx",
+  "llvm.arm.smulbb",
+  "llvm.arm.smulbt",
+  "llvm.arm.smultb",
+  "llvm.arm.smultt",
+  "llvm.arm.smulwb",
+  "llvm.arm.smulwt",
+  "llvm.arm.smusd",
+  "llvm.arm.smusdx",
+  "llvm.arm.space",
+  "llvm.arm.ssat",
+  "llvm.arm.ssat16",
+  "llvm.arm.ssax",
+  "llvm.arm.ssub16",
+  "llvm.arm.ssub8",
+  "llvm.arm.stc",
+  "llvm.arm.stc2",
+  "llvm.arm.stc2l",
+  "llvm.arm.stcl",
+  "llvm.arm.stlex",
+  "llvm.arm.stlexd",
+  "llvm.arm.strex",
+  "llvm.arm.strexd",
+  "llvm.arm.sxtab16",
+  "llvm.arm.sxtb16",
+  "llvm.arm.uadd16",
+  "llvm.arm.uadd8",
+  "llvm.arm.uasx",
+  "llvm.arm.uhadd16",
+  "llvm.arm.uhadd8",
+  "llvm.arm.uhasx",
+  "llvm.arm.uhsax",
+  "llvm.arm.uhsub16",
+  "llvm.arm.uhsub8",
+  "llvm.arm.undefined",
+  "llvm.arm.uqadd16",
+  "llvm.arm.uqadd8",
+  "llvm.arm.uqasx",
+  "llvm.arm.uqsax",
+  "llvm.arm.uqsub16",
+  "llvm.arm.uqsub8",
+  "llvm.arm.usad8",
+  "llvm.arm.usada8",
+  "llvm.arm.usat",
+  "llvm.arm.usat16",
+  "llvm.arm.usax",
+  "llvm.arm.usub16",
+  "llvm.arm.usub8",
+  "llvm.arm.uxtab16",
+  "llvm.arm.uxtb16",
+  "llvm.arm.vcvtr",
+  "llvm.arm.vcvtru",
+  "llvm.bpf.load.byte",
+  "llvm.bpf.load.half",
+  "llvm.bpf.load.word",
+  "llvm.bpf.pseudo",
+  "llvm.hexagon.A2.abs",
+  "llvm.hexagon.A2.absp",
+  "llvm.hexagon.A2.abssat",
+  "llvm.hexagon.A2.add",
+  "llvm.hexagon.A2.addh.h16.hh",
+  "llvm.hexagon.A2.addh.h16.hl",
+  "llvm.hexagon.A2.addh.h16.lh",
+  "llvm.hexagon.A2.addh.h16.ll",
+  "llvm.hexagon.A2.addh.h16.sat.hh",
+  "llvm.hexagon.A2.addh.h16.sat.hl",
+  "llvm.hexagon.A2.addh.h16.sat.lh",
+  "llvm.hexagon.A2.addh.h16.sat.ll",
+  "llvm.hexagon.A2.addh.l16.hl",
+  "llvm.hexagon.A2.addh.l16.ll",
+  "llvm.hexagon.A2.addh.l16.sat.hl",
+  "llvm.hexagon.A2.addh.l16.sat.ll",
+  "llvm.hexagon.A2.addi",
+  "llvm.hexagon.A2.addp",
+  "llvm.hexagon.A2.addpsat",
+  "llvm.hexagon.A2.addsat",
+  "llvm.hexagon.A2.addsp",
+  "llvm.hexagon.A2.and",
+  "llvm.hexagon.A2.andir",
+  "llvm.hexagon.A2.andp",
+  "llvm.hexagon.A2.aslh",
+  "llvm.hexagon.A2.asrh",
+  "llvm.hexagon.A2.combine.hh",
+  "llvm.hexagon.A2.combine.hl",
+  "llvm.hexagon.A2.combine.lh",
+  "llvm.hexagon.A2.combine.ll",
+  "llvm.hexagon.A2.combineii",
+  "llvm.hexagon.A2.combinew",
+  "llvm.hexagon.A2.max",
+  "llvm.hexagon.A2.maxp",
+  "llvm.hexagon.A2.maxu",
+  "llvm.hexagon.A2.maxup",
+  "llvm.hexagon.A2.min",
+  "llvm.hexagon.A2.minp",
+  "llvm.hexagon.A2.minu",
+  "llvm.hexagon.A2.minup",
+  "llvm.hexagon.A2.neg",
+  "llvm.hexagon.A2.negp",
+  "llvm.hexagon.A2.negsat",
+  "llvm.hexagon.A2.not",
+  "llvm.hexagon.A2.notp",
+  "llvm.hexagon.A2.or",
+  "llvm.hexagon.A2.orir",
+  "llvm.hexagon.A2.orp",
+  "llvm.hexagon.A2.roundsat",
+  "llvm.hexagon.A2.sat",
+  "llvm.hexagon.A2.satb",
+  "llvm.hexagon.A2.sath",
+  "llvm.hexagon.A2.satub",
+  "llvm.hexagon.A2.satuh",
+  "llvm.hexagon.A2.sub",
+  "llvm.hexagon.A2.subh.h16.hh",
+  "llvm.hexagon.A2.subh.h16.hl",
+  "llvm.hexagon.A2.subh.h16.lh",
+  "llvm.hexagon.A2.subh.h16.ll",
+  "llvm.hexagon.A2.subh.h16.sat.hh",
+  "llvm.hexagon.A2.subh.h16.sat.hl",
+  "llvm.hexagon.A2.subh.h16.sat.lh",
+  "llvm.hexagon.A2.subh.h16.sat.ll",
+  "llvm.hexagon.A2.subh.l16.hl",
+  "llvm.hexagon.A2.subh.l16.ll",
+  "llvm.hexagon.A2.subh.l16.sat.hl",
+  "llvm.hexagon.A2.subh.l16.sat.ll",
+  "llvm.hexagon.A2.subp",
+  "llvm.hexagon.A2.subri",
+  "llvm.hexagon.A2.subsat",
+  "llvm.hexagon.A2.svaddh",
+  "llvm.hexagon.A2.svaddhs",
+  "llvm.hexagon.A2.svadduhs",
+  "llvm.hexagon.A2.svavgh",
+  "llvm.hexagon.A2.svavghs",
+  "llvm.hexagon.A2.svnavgh",
+  "llvm.hexagon.A2.svsubh",
+  "llvm.hexagon.A2.svsubhs",
+  "llvm.hexagon.A2.svsubuhs",
+  "llvm.hexagon.A2.swiz",
+  "llvm.hexagon.A2.sxtb",
+  "llvm.hexagon.A2.sxth",
+  "llvm.hexagon.A2.sxtw",
+  "llvm.hexagon.A2.tfr",
+  "llvm.hexagon.A2.tfrih",
+  "llvm.hexagon.A2.tfril",
+  "llvm.hexagon.A2.tfrp",
+  "llvm.hexagon.A2.tfrpi",
+  "llvm.hexagon.A2.tfrsi",
+  "llvm.hexagon.A2.vabsh",
+  "llvm.hexagon.A2.vabshsat",
+  "llvm.hexagon.A2.vabsw",
+  "llvm.hexagon.A2.vabswsat",
+  "llvm.hexagon.A2.vaddb.map",
+  "llvm.hexagon.A2.vaddh",
+  "llvm.hexagon.A2.vaddhs",
+  "llvm.hexagon.A2.vaddub",
+  "llvm.hexagon.A2.vaddubs",
+  "llvm.hexagon.A2.vadduhs",
+  "llvm.hexagon.A2.vaddw",
+  "llvm.hexagon.A2.vaddws",
+  "llvm.hexagon.A2.vavgh",
+  "llvm.hexagon.A2.vavghcr",
+  "llvm.hexagon.A2.vavghr",
+  "llvm.hexagon.A2.vavgub",
+  "llvm.hexagon.A2.vavgubr",
+  "llvm.hexagon.A2.vavguh",
+  "llvm.hexagon.A2.vavguhr",
+  "llvm.hexagon.A2.vavguw",
+  "llvm.hexagon.A2.vavguwr",
+  "llvm.hexagon.A2.vavgw",
+  "llvm.hexagon.A2.vavgwcr",
+  "llvm.hexagon.A2.vavgwr",
+  "llvm.hexagon.A2.vcmpbeq",
+  "llvm.hexagon.A2.vcmpbgtu",
+  "llvm.hexagon.A2.vcmpheq",
+  "llvm.hexagon.A2.vcmphgt",
+  "llvm.hexagon.A2.vcmphgtu",
+  "llvm.hexagon.A2.vcmpweq",
+  "llvm.hexagon.A2.vcmpwgt",
+  "llvm.hexagon.A2.vcmpwgtu",
+  "llvm.hexagon.A2.vconj",
+  "llvm.hexagon.A2.vmaxb",
+  "llvm.hexagon.A2.vmaxh",
+  "llvm.hexagon.A2.vmaxub",
+  "llvm.hexagon.A2.vmaxuh",
+  "llvm.hexagon.A2.vmaxuw",
+  "llvm.hexagon.A2.vmaxw",
+  "llvm.hexagon.A2.vminb",
+  "llvm.hexagon.A2.vminh",
+  "llvm.hexagon.A2.vminub",
+  "llvm.hexagon.A2.vminuh",
+  "llvm.hexagon.A2.vminuw",
+  "llvm.hexagon.A2.vminw",
+  "llvm.hexagon.A2.vnavgh",
+  "llvm.hexagon.A2.vnavghcr",
+  "llvm.hexagon.A2.vnavghr",
+  "llvm.hexagon.A2.vnavgw",
+  "llvm.hexagon.A2.vnavgwcr",
+  "llvm.hexagon.A2.vnavgwr",
+  "llvm.hexagon.A2.vraddub",
+  "llvm.hexagon.A2.vraddub.acc",
+  "llvm.hexagon.A2.vrsadub",
+  "llvm.hexagon.A2.vrsadub.acc",
+  "llvm.hexagon.A2.vsubb.map",
+  "llvm.hexagon.A2.vsubh",
+  "llvm.hexagon.A2.vsubhs",
+  "llvm.hexagon.A2.vsubub",
+  "llvm.hexagon.A2.vsububs",
+  "llvm.hexagon.A2.vsubuhs",
+  "llvm.hexagon.A2.vsubw",
+  "llvm.hexagon.A2.vsubws",
+  "llvm.hexagon.A2.xor",
+  "llvm.hexagon.A2.xorp",
+  "llvm.hexagon.A2.zxtb",
+  "llvm.hexagon.A2.zxth",
+  "llvm.hexagon.A4.andn",
+  "llvm.hexagon.A4.andnp",
+  "llvm.hexagon.A4.bitsplit",
+  "llvm.hexagon.A4.bitspliti",
+  "llvm.hexagon.A4.boundscheck",
+  "llvm.hexagon.A4.cmpbeq",
+  "llvm.hexagon.A4.cmpbeqi",
+  "llvm.hexagon.A4.cmpbgt",
+  "llvm.hexagon.A4.cmpbgti",
+  "llvm.hexagon.A4.cmpbgtu",
+  "llvm.hexagon.A4.cmpbgtui",
+  "llvm.hexagon.A4.cmpheq",
+  "llvm.hexagon.A4.cmpheqi",
+  "llvm.hexagon.A4.cmphgt",
+  "llvm.hexagon.A4.cmphgti",
+  "llvm.hexagon.A4.cmphgtu",
+  "llvm.hexagon.A4.cmphgtui",
+  "llvm.hexagon.A4.combineir",
+  "llvm.hexagon.A4.combineri",
+  "llvm.hexagon.A4.cround.ri",
+  "llvm.hexagon.A4.cround.rr",
+  "llvm.hexagon.A4.modwrapu",
+  "llvm.hexagon.A4.orn",
+  "llvm.hexagon.A4.ornp",
+  "llvm.hexagon.A4.rcmpeq",
+  "llvm.hexagon.A4.rcmpeqi",
+  "llvm.hexagon.A4.rcmpneq",
+  "llvm.hexagon.A4.rcmpneqi",
+  "llvm.hexagon.A4.round.ri",
+  "llvm.hexagon.A4.round.ri.sat",
+  "llvm.hexagon.A4.round.rr",
+  "llvm.hexagon.A4.round.rr.sat",
+  "llvm.hexagon.A4.tlbmatch",
+  "llvm.hexagon.A4.vcmpbeq.any",
+  "llvm.hexagon.A4.vcmpbeqi",
+  "llvm.hexagon.A4.vcmpbgt",
+  "llvm.hexagon.A4.vcmpbgti",
+  "llvm.hexagon.A4.vcmpbgtui",
+  "llvm.hexagon.A4.vcmpheqi",
+  "llvm.hexagon.A4.vcmphgti",
+  "llvm.hexagon.A4.vcmphgtui",
+  "llvm.hexagon.A4.vcmpweqi",
+  "llvm.hexagon.A4.vcmpwgti",
+  "llvm.hexagon.A4.vcmpwgtui",
+  "llvm.hexagon.A4.vrmaxh",
+  "llvm.hexagon.A4.vrmaxuh",
+  "llvm.hexagon.A4.vrmaxuw",
+  "llvm.hexagon.A4.vrmaxw",
+  "llvm.hexagon.A4.vrminh",
+  "llvm.hexagon.A4.vrminuh",
+  "llvm.hexagon.A4.vrminuw",
+  "llvm.hexagon.A4.vrminw",
+  "llvm.hexagon.A5.vaddhubs",
+  "llvm.hexagon.A6.vcmpbeq.notany",
+  "llvm.hexagon.A6.vcmpbeq.notany.128B",
+  "llvm.hexagon.C2.all8",
+  "llvm.hexagon.C2.and",
+  "llvm.hexagon.C2.andn",
+  "llvm.hexagon.C2.any8",
+  "llvm.hexagon.C2.bitsclr",
+  "llvm.hexagon.C2.bitsclri",
+  "llvm.hexagon.C2.bitsset",
+  "llvm.hexagon.C2.cmpeq",
+  "llvm.hexagon.C2.cmpeqi",
+  "llvm.hexagon.C2.cmpeqp",
+  "llvm.hexagon.C2.cmpgei",
+  "llvm.hexagon.C2.cmpgeui",
+  "llvm.hexagon.C2.cmpgt",
+  "llvm.hexagon.C2.cmpgti",
+  "llvm.hexagon.C2.cmpgtp",
+  "llvm.hexagon.C2.cmpgtu",
+  "llvm.hexagon.C2.cmpgtui",
+  "llvm.hexagon.C2.cmpgtup",
+  "llvm.hexagon.C2.cmplt",
+  "llvm.hexagon.C2.cmpltu",
+  "llvm.hexagon.C2.mask",
+  "llvm.hexagon.C2.mux",
+  "llvm.hexagon.C2.muxii",
+  "llvm.hexagon.C2.muxir",
+  "llvm.hexagon.C2.muxri",
+  "llvm.hexagon.C2.not",
+  "llvm.hexagon.C2.or",
+  "llvm.hexagon.C2.orn",
+  "llvm.hexagon.C2.pxfer.map",
+  "llvm.hexagon.C2.tfrpr",
+  "llvm.hexagon.C2.tfrrp",
+  "llvm.hexagon.C2.vitpack",
+  "llvm.hexagon.C2.vmux",
+  "llvm.hexagon.C2.xor",
+  "llvm.hexagon.C4.and.and",
+  "llvm.hexagon.C4.and.andn",
+  "llvm.hexagon.C4.and.or",
+  "llvm.hexagon.C4.and.orn",
+  "llvm.hexagon.C4.cmplte",
+  "llvm.hexagon.C4.cmpltei",
+  "llvm.hexagon.C4.cmplteu",
+  "llvm.hexagon.C4.cmplteui",
+  "llvm.hexagon.C4.cmpneq",
+  "llvm.hexagon.C4.cmpneqi",
+  "llvm.hexagon.C4.fastcorner9",
+  "llvm.hexagon.C4.fastcorner9.not",
+  "llvm.hexagon.C4.nbitsclr",
+  "llvm.hexagon.C4.nbitsclri",
+  "llvm.hexagon.C4.nbitsset",
+  "llvm.hexagon.C4.or.and",
+  "llvm.hexagon.C4.or.andn",
+  "llvm.hexagon.C4.or.or",
+  "llvm.hexagon.C4.or.orn",
+  "llvm.hexagon.F2.conv.d2df",
+  "llvm.hexagon.F2.conv.d2sf",
+  "llvm.hexagon.F2.conv.df2d",
+  "llvm.hexagon.F2.conv.df2d.chop",
+  "llvm.hexagon.F2.conv.df2sf",
+  "llvm.hexagon.F2.conv.df2ud",
+  "llvm.hexagon.F2.conv.df2ud.chop",
+  "llvm.hexagon.F2.conv.df2uw",
+  "llvm.hexagon.F2.conv.df2uw.chop",
+  "llvm.hexagon.F2.conv.df2w",
+  "llvm.hexagon.F2.conv.df2w.chop",
+  "llvm.hexagon.F2.conv.sf2d",
+  "llvm.hexagon.F2.conv.sf2d.chop",
+  "llvm.hexagon.F2.conv.sf2df",
+  "llvm.hexagon.F2.conv.sf2ud",
+  "llvm.hexagon.F2.conv.sf2ud.chop",
+  "llvm.hexagon.F2.conv.sf2uw",
+  "llvm.hexagon.F2.conv.sf2uw.chop",
+  "llvm.hexagon.F2.conv.sf2w",
+  "llvm.hexagon.F2.conv.sf2w.chop",
+  "llvm.hexagon.F2.conv.ud2df",
+  "llvm.hexagon.F2.conv.ud2sf",
+  "llvm.hexagon.F2.conv.uw2df",
+  "llvm.hexagon.F2.conv.uw2sf",
+  "llvm.hexagon.F2.conv.w2df",
+  "llvm.hexagon.F2.conv.w2sf",
+  "llvm.hexagon.F2.dfclass",
+  "llvm.hexagon.F2.dfcmpeq",
+  "llvm.hexagon.F2.dfcmpge",
+  "llvm.hexagon.F2.dfcmpgt",
+  "llvm.hexagon.F2.dfcmpuo",
+  "llvm.hexagon.F2.dfimm.n",
+  "llvm.hexagon.F2.dfimm.p",
+  "llvm.hexagon.F2.sfadd",
+  "llvm.hexagon.F2.sfclass",
+  "llvm.hexagon.F2.sfcmpeq",
+  "llvm.hexagon.F2.sfcmpge",
+  "llvm.hexagon.F2.sfcmpgt",
+  "llvm.hexagon.F2.sfcmpuo",
+  "llvm.hexagon.F2.sffixupd",
+  "llvm.hexagon.F2.sffixupn",
+  "llvm.hexagon.F2.sffixupr",
+  "llvm.hexagon.F2.sffma",
+  "llvm.hexagon.F2.sffma.lib",
+  "llvm.hexagon.F2.sffma.sc",
+  "llvm.hexagon.F2.sffms",
+  "llvm.hexagon.F2.sffms.lib",
+  "llvm.hexagon.F2.sfimm.n",
+  "llvm.hexagon.F2.sfimm.p",
+  "llvm.hexagon.F2.sfmax",
+  "llvm.hexagon.F2.sfmin",
+  "llvm.hexagon.F2.sfmpy",
+  "llvm.hexagon.F2.sfsub",
+  "llvm.hexagon.L2.loadrb.pbr",
+  "llvm.hexagon.L2.loadrb.pci",
+  "llvm.hexagon.L2.loadrb.pcr",
+  "llvm.hexagon.L2.loadrd.pbr",
+  "llvm.hexagon.L2.loadrd.pci",
+  "llvm.hexagon.L2.loadrd.pcr",
+  "llvm.hexagon.L2.loadrh.pbr",
+  "llvm.hexagon.L2.loadrh.pci",
+  "llvm.hexagon.L2.loadrh.pcr",
+  "llvm.hexagon.L2.loadri.pbr",
+  "llvm.hexagon.L2.loadri.pci",
+  "llvm.hexagon.L2.loadri.pcr",
+  "llvm.hexagon.L2.loadrub.pbr",
+  "llvm.hexagon.L2.loadrub.pci",
+  "llvm.hexagon.L2.loadrub.pcr",
+  "llvm.hexagon.L2.loadruh.pbr",
+  "llvm.hexagon.L2.loadruh.pci",
+  "llvm.hexagon.L2.loadruh.pcr",
+  "llvm.hexagon.L2.loadw.locked",
+  "llvm.hexagon.L4.loadd.locked",
+  "llvm.hexagon.M2.acci",
+  "llvm.hexagon.M2.accii",
+  "llvm.hexagon.M2.cmaci.s0",
+  "llvm.hexagon.M2.cmacr.s0",
+  "llvm.hexagon.M2.cmacs.s0",
+  "llvm.hexagon.M2.cmacs.s1",
+  "llvm.hexagon.M2.cmacsc.s0",
+  "llvm.hexagon.M2.cmacsc.s1",
+  "llvm.hexagon.M2.cmpyi.s0",
+  "llvm.hexagon.M2.cmpyr.s0",
+  "llvm.hexagon.M2.cmpyrs.s0",
+  "llvm.hexagon.M2.cmpyrs.s1",
+  "llvm.hexagon.M2.cmpyrsc.s0",
+  "llvm.hexagon.M2.cmpyrsc.s1",
+  "llvm.hexagon.M2.cmpys.s0",
+  "llvm.hexagon.M2.cmpys.s1",
+  "llvm.hexagon.M2.cmpysc.s0",
+  "llvm.hexagon.M2.cmpysc.s1",
+  "llvm.hexagon.M2.cnacs.s0",
+  "llvm.hexagon.M2.cnacs.s1",
+  "llvm.hexagon.M2.cnacsc.s0",
+  "llvm.hexagon.M2.cnacsc.s1",
+  "llvm.hexagon.M2.dpmpyss.acc.s0",
+  "llvm.hexagon.M2.dpmpyss.nac.s0",
+  "llvm.hexagon.M2.dpmpyss.rnd.s0",
+  "llvm.hexagon.M2.dpmpyss.s0",
+  "llvm.hexagon.M2.dpmpyuu.acc.s0",
+  "llvm.hexagon.M2.dpmpyuu.nac.s0",
+  "llvm.hexagon.M2.dpmpyuu.s0",
+  "llvm.hexagon.M2.hmmpyh.rs1",
+  "llvm.hexagon.M2.hmmpyh.s1",
+  "llvm.hexagon.M2.hmmpyl.rs1",
+  "llvm.hexagon.M2.hmmpyl.s1",
+  "llvm.hexagon.M2.maci",
+  "llvm.hexagon.M2.macsin",
+  "llvm.hexagon.M2.macsip",
+  "llvm.hexagon.M2.mmachs.rs0",
+  "llvm.hexagon.M2.mmachs.rs1",
+  "llvm.hexagon.M2.mmachs.s0",
+  "llvm.hexagon.M2.mmachs.s1",
+  "llvm.hexagon.M2.mmacls.rs0",
+  "llvm.hexagon.M2.mmacls.rs1",
+  "llvm.hexagon.M2.mmacls.s0",
+  "llvm.hexagon.M2.mmacls.s1",
+  "llvm.hexagon.M2.mmacuhs.rs0",
+  "llvm.hexagon.M2.mmacuhs.rs1",
+  "llvm.hexagon.M2.mmacuhs.s0",
+  "llvm.hexagon.M2.mmacuhs.s1",
+  "llvm.hexagon.M2.mmaculs.rs0",
+  "llvm.hexagon.M2.mmaculs.rs1",
+  "llvm.hexagon.M2.mmaculs.s0",
+  "llvm.hexagon.M2.mmaculs.s1",
+  "llvm.hexagon.M2.mmpyh.rs0",
+  "llvm.hexagon.M2.mmpyh.rs1",
+  "llvm.hexagon.M2.mmpyh.s0",
+  "llvm.hexagon.M2.mmpyh.s1",
+  "llvm.hexagon.M2.mmpyl.rs0",
+  "llvm.hexagon.M2.mmpyl.rs1",
+  "llvm.hexagon.M2.mmpyl.s0",
+  "llvm.hexagon.M2.mmpyl.s1",
+  "llvm.hexagon.M2.mmpyuh.rs0",
+  "llvm.hexagon.M2.mmpyuh.rs1",
+  "llvm.hexagon.M2.mmpyuh.s0",
+  "llvm.hexagon.M2.mmpyuh.s1",
+  "llvm.hexagon.M2.mmpyul.rs0",
+  "llvm.hexagon.M2.mmpyul.rs1",
+  "llvm.hexagon.M2.mmpyul.s0",
+  "llvm.hexagon.M2.mmpyul.s1",
+  "llvm.hexagon.M2.mpy.acc.hh.s0",
+  "llvm.hexagon.M2.mpy.acc.hh.s1",
+  "llvm.hexagon.M2.mpy.acc.hl.s0",
+  "llvm.hexagon.M2.mpy.acc.hl.s1",
+  "llvm.hexagon.M2.mpy.acc.lh.s0",
+  "llvm.hexagon.M2.mpy.acc.lh.s1",
+  "llvm.hexagon.M2.mpy.acc.ll.s0",
+  "llvm.hexagon.M2.mpy.acc.ll.s1",
+  "llvm.hexagon.M2.mpy.acc.sat.hh.s0",
+  "llvm.hexagon.M2.mpy.acc.sat.hh.s1",
+  "llvm.hexagon.M2.mpy.acc.sat.hl.s0",
+  "llvm.hexagon.M2.mpy.acc.sat.hl.s1",
+  "llvm.hexagon.M2.mpy.acc.sat.lh.s0",
+  "llvm.hexagon.M2.mpy.acc.sat.lh.s1",
+  "llvm.hexagon.M2.mpy.acc.sat.ll.s0",
+  "llvm.hexagon.M2.mpy.acc.sat.ll.s1",
+  "llvm.hexagon.M2.mpy.hh.s0",
+  "llvm.hexagon.M2.mpy.hh.s1",
+  "llvm.hexagon.M2.mpy.hl.s0",
+  "llvm.hexagon.M2.mpy.hl.s1",
+  "llvm.hexagon.M2.mpy.lh.s0",
+  "llvm.hexagon.M2.mpy.lh.s1",
+  "llvm.hexagon.M2.mpy.ll.s0",
+  "llvm.hexagon.M2.mpy.ll.s1",
+  "llvm.hexagon.M2.mpy.nac.hh.s0",
+  "llvm.hexagon.M2.mpy.nac.hh.s1",
+  "llvm.hexagon.M2.mpy.nac.hl.s0",
+  "llvm.hexagon.M2.mpy.nac.hl.s1",
+  "llvm.hexagon.M2.mpy.nac.lh.s0",
+  "llvm.hexagon.M2.mpy.nac.lh.s1",
+  "llvm.hexagon.M2.mpy.nac.ll.s0",
+  "llvm.hexagon.M2.mpy.nac.ll.s1",
+  "llvm.hexagon.M2.mpy.nac.sat.hh.s0",
+  "llvm.hexagon.M2.mpy.nac.sat.hh.s1",
+  "llvm.hexagon.M2.mpy.nac.sat.hl.s0",
+  "llvm.hexagon.M2.mpy.nac.sat.hl.s1",
+  "llvm.hexagon.M2.mpy.nac.sat.lh.s0",
+  "llvm.hexagon.M2.mpy.nac.sat.lh.s1",
+  "llvm.hexagon.M2.mpy.nac.sat.ll.s0",
+  "llvm.hexagon.M2.mpy.nac.sat.ll.s1",
+  "llvm.hexagon.M2.mpy.rnd.hh.s0",
+  "llvm.hexagon.M2.mpy.rnd.hh.s1",
+  "llvm.hexagon.M2.mpy.rnd.hl.s0",
+  "llvm.hexagon.M2.mpy.rnd.hl.s1",
+  "llvm.hexagon.M2.mpy.rnd.lh.s0",
+  "llvm.hexagon.M2.mpy.rnd.lh.s1",
+  "llvm.hexagon.M2.mpy.rnd.ll.s0",
+  "llvm.hexagon.M2.mpy.rnd.ll.s1",
+  "llvm.hexagon.M2.mpy.sat.hh.s0",
+  "llvm.hexagon.M2.mpy.sat.hh.s1",
+  "llvm.hexagon.M2.mpy.sat.hl.s0",
+  "llvm.hexagon.M2.mpy.sat.hl.s1",
+  "llvm.hexagon.M2.mpy.sat.lh.s0",
+  "llvm.hexagon.M2.mpy.sat.lh.s1",
+  "llvm.hexagon.M2.mpy.sat.ll.s0",
+  "llvm.hexagon.M2.mpy.sat.ll.s1",
+  "llvm.hexagon.M2.mpy.sat.rnd.hh.s0",
+  "llvm.hexagon.M2.mpy.sat.rnd.hh.s1",
+  "llvm.hexagon.M2.mpy.sat.rnd.hl.s0",
+  "llvm.hexagon.M2.mpy.sat.rnd.hl.s1",
+  "llvm.hexagon.M2.mpy.sat.rnd.lh.s0",
+  "llvm.hexagon.M2.mpy.sat.rnd.lh.s1",
+  "llvm.hexagon.M2.mpy.sat.rnd.ll.s0",
+  "llvm.hexagon.M2.mpy.sat.rnd.ll.s1",
+  "llvm.hexagon.M2.mpy.up",
+  "llvm.hexagon.M2.mpy.up.s1",
+  "llvm.hexagon.M2.mpy.up.s1.sat",
+  "llvm.hexagon.M2.mpyd.acc.hh.s0",
+  "llvm.hexagon.M2.mpyd.acc.hh.s1",
+  "llvm.hexagon.M2.mpyd.acc.hl.s0",
+  "llvm.hexagon.M2.mpyd.acc.hl.s1",
+  "llvm.hexagon.M2.mpyd.acc.lh.s0",
+  "llvm.hexagon.M2.mpyd.acc.lh.s1",
+  "llvm.hexagon.M2.mpyd.acc.ll.s0",
+  "llvm.hexagon.M2.mpyd.acc.ll.s1",
+  "llvm.hexagon.M2.mpyd.hh.s0",
+  "llvm.hexagon.M2.mpyd.hh.s1",
+  "llvm.hexagon.M2.mpyd.hl.s0",
+  "llvm.hexagon.M2.mpyd.hl.s1",
+  "llvm.hexagon.M2.mpyd.lh.s0",
+  "llvm.hexagon.M2.mpyd.lh.s1",
+  "llvm.hexagon.M2.mpyd.ll.s0",
+  "llvm.hexagon.M2.mpyd.ll.s1",
+  "llvm.hexagon.M2.mpyd.nac.hh.s0",
+  "llvm.hexagon.M2.mpyd.nac.hh.s1",
+  "llvm.hexagon.M2.mpyd.nac.hl.s0",
+  "llvm.hexagon.M2.mpyd.nac.hl.s1",
+  "llvm.hexagon.M2.mpyd.nac.lh.s0",
+  "llvm.hexagon.M2.mpyd.nac.lh.s1",
+  "llvm.hexagon.M2.mpyd.nac.ll.s0",
+  "llvm.hexagon.M2.mpyd.nac.ll.s1",
+  "llvm.hexagon.M2.mpyd.rnd.hh.s0",
+  "llvm.hexagon.M2.mpyd.rnd.hh.s1",
+  "llvm.hexagon.M2.mpyd.rnd.hl.s0",
+  "llvm.hexagon.M2.mpyd.rnd.hl.s1",
+  "llvm.hexagon.M2.mpyd.rnd.lh.s0",
+  "llvm.hexagon.M2.mpyd.rnd.lh.s1",
+  "llvm.hexagon.M2.mpyd.rnd.ll.s0",
+  "llvm.hexagon.M2.mpyd.rnd.ll.s1",
+  "llvm.hexagon.M2.mpyi",
+  "llvm.hexagon.M2.mpysmi",
+  "llvm.hexagon.M2.mpysu.up",
+  "llvm.hexagon.M2.mpyu.acc.hh.s0",
+  "llvm.hexagon.M2.mpyu.acc.hh.s1",
+  "llvm.hexagon.M2.mpyu.acc.hl.s0",
+  "llvm.hexagon.M2.mpyu.acc.hl.s1",
+  "llvm.hexagon.M2.mpyu.acc.lh.s0",
+  "llvm.hexagon.M2.mpyu.acc.lh.s1",
+  "llvm.hexagon.M2.mpyu.acc.ll.s0",
+  "llvm.hexagon.M2.mpyu.acc.ll.s1",
+  "llvm.hexagon.M2.mpyu.hh.s0",
+  "llvm.hexagon.M2.mpyu.hh.s1",
+  "llvm.hexagon.M2.mpyu.hl.s0",
+  "llvm.hexagon.M2.mpyu.hl.s1",
+  "llvm.hexagon.M2.mpyu.lh.s0",
+  "llvm.hexagon.M2.mpyu.lh.s1",
+  "llvm.hexagon.M2.mpyu.ll.s0",
+  "llvm.hexagon.M2.mpyu.ll.s1",
+  "llvm.hexagon.M2.mpyu.nac.hh.s0",
+  "llvm.hexagon.M2.mpyu.nac.hh.s1",
+  "llvm.hexagon.M2.mpyu.nac.hl.s0",
+  "llvm.hexagon.M2.mpyu.nac.hl.s1",
+  "llvm.hexagon.M2.mpyu.nac.lh.s0",
+  "llvm.hexagon.M2.mpyu.nac.lh.s1",
+  "llvm.hexagon.M2.mpyu.nac.ll.s0",
+  "llvm.hexagon.M2.mpyu.nac.ll.s1",
+  "llvm.hexagon.M2.mpyu.up",
+  "llvm.hexagon.M2.mpyud.acc.hh.s0",
+  "llvm.hexagon.M2.mpyud.acc.hh.s1",
+  "llvm.hexagon.M2.mpyud.acc.hl.s0",
+  "llvm.hexagon.M2.mpyud.acc.hl.s1",
+  "llvm.hexagon.M2.mpyud.acc.lh.s0",
+  "llvm.hexagon.M2.mpyud.acc.lh.s1",
+  "llvm.hexagon.M2.mpyud.acc.ll.s0",
+  "llvm.hexagon.M2.mpyud.acc.ll.s1",
+  "llvm.hexagon.M2.mpyud.hh.s0",
+  "llvm.hexagon.M2.mpyud.hh.s1",
+  "llvm.hexagon.M2.mpyud.hl.s0",
+  "llvm.hexagon.M2.mpyud.hl.s1",
+  "llvm.hexagon.M2.mpyud.lh.s0",
+  "llvm.hexagon.M2.mpyud.lh.s1",
+  "llvm.hexagon.M2.mpyud.ll.s0",
+  "llvm.hexagon.M2.mpyud.ll.s1",
+  "llvm.hexagon.M2.mpyud.nac.hh.s0",
+  "llvm.hexagon.M2.mpyud.nac.hh.s1",
+  "llvm.hexagon.M2.mpyud.nac.hl.s0",
+  "llvm.hexagon.M2.mpyud.nac.hl.s1",
+  "llvm.hexagon.M2.mpyud.nac.lh.s0",
+  "llvm.hexagon.M2.mpyud.nac.lh.s1",
+  "llvm.hexagon.M2.mpyud.nac.ll.s0",
+  "llvm.hexagon.M2.mpyud.nac.ll.s1",
+  "llvm.hexagon.M2.mpyui",
+  "llvm.hexagon.M2.nacci",
+  "llvm.hexagon.M2.naccii",
+  "llvm.hexagon.M2.subacc",
+  "llvm.hexagon.M2.vabsdiffh",
+  "llvm.hexagon.M2.vabsdiffw",
+  "llvm.hexagon.M2.vcmac.s0.sat.i",
+  "llvm.hexagon.M2.vcmac.s0.sat.r",
+  "llvm.hexagon.M2.vcmpy.s0.sat.i",
+  "llvm.hexagon.M2.vcmpy.s0.sat.r",
+  "llvm.hexagon.M2.vcmpy.s1.sat.i",
+  "llvm.hexagon.M2.vcmpy.s1.sat.r",
+  "llvm.hexagon.M2.vdmacs.s0",
+  "llvm.hexagon.M2.vdmacs.s1",
+  "llvm.hexagon.M2.vdmpyrs.s0",
+  "llvm.hexagon.M2.vdmpyrs.s1",
+  "llvm.hexagon.M2.vdmpys.s0",
+  "llvm.hexagon.M2.vdmpys.s1",
+  "llvm.hexagon.M2.vmac2",
+  "llvm.hexagon.M2.vmac2es",
+  "llvm.hexagon.M2.vmac2es.s0",
+  "llvm.hexagon.M2.vmac2es.s1",
+  "llvm.hexagon.M2.vmac2s.s0",
+  "llvm.hexagon.M2.vmac2s.s1",
+  "llvm.hexagon.M2.vmac2su.s0",
+  "llvm.hexagon.M2.vmac2su.s1",
+  "llvm.hexagon.M2.vmpy2es.s0",
+  "llvm.hexagon.M2.vmpy2es.s1",
+  "llvm.hexagon.M2.vmpy2s.s0",
+  "llvm.hexagon.M2.vmpy2s.s0pack",
+  "llvm.hexagon.M2.vmpy2s.s1",
+  "llvm.hexagon.M2.vmpy2s.s1pack",
+  "llvm.hexagon.M2.vmpy2su.s0",
+  "llvm.hexagon.M2.vmpy2su.s1",
+  "llvm.hexagon.M2.vraddh",
+  "llvm.hexagon.M2.vradduh",
+  "llvm.hexagon.M2.vrcmaci.s0",
+  "llvm.hexagon.M2.vrcmaci.s0c",
+  "llvm.hexagon.M2.vrcmacr.s0",
+  "llvm.hexagon.M2.vrcmacr.s0c",
+  "llvm.hexagon.M2.vrcmpyi.s0",
+  "llvm.hexagon.M2.vrcmpyi.s0c",
+  "llvm.hexagon.M2.vrcmpyr.s0",
+  "llvm.hexagon.M2.vrcmpyr.s0c",
+  "llvm.hexagon.M2.vrcmpys.acc.s1",
+  "llvm.hexagon.M2.vrcmpys.s1",
+  "llvm.hexagon.M2.vrcmpys.s1rp",
+  "llvm.hexagon.M2.vrmac.s0",
+  "llvm.hexagon.M2.vrmpy.s0",
+  "llvm.hexagon.M2.xor.xacc",
+  "llvm.hexagon.M4.and.and",
+  "llvm.hexagon.M4.and.andn",
+  "llvm.hexagon.M4.and.or",
+  "llvm.hexagon.M4.and.xor",
+  "llvm.hexagon.M4.cmpyi.wh",
+  "llvm.hexagon.M4.cmpyi.whc",
+  "llvm.hexagon.M4.cmpyr.wh",
+  "llvm.hexagon.M4.cmpyr.whc",
+  "llvm.hexagon.M4.mac.up.s1.sat",
+  "llvm.hexagon.M4.mpyri.addi",
+  "llvm.hexagon.M4.mpyri.addr",
+  "llvm.hexagon.M4.mpyri.addr.u2",
+  "llvm.hexagon.M4.mpyrr.addi",
+  "llvm.hexagon.M4.mpyrr.addr",
+  "llvm.hexagon.M4.nac.up.s1.sat",
+  "llvm.hexagon.M4.or.and",
+  "llvm.hexagon.M4.or.andn",
+  "llvm.hexagon.M4.or.or",
+  "llvm.hexagon.M4.or.xor",
+  "llvm.hexagon.M4.pmpyw",
+  "llvm.hexagon.M4.pmpyw.acc",
+  "llvm.hexagon.M4.vpmpyh",
+  "llvm.hexagon.M4.vpmpyh.acc",
+  "llvm.hexagon.M4.vrmpyeh.acc.s0",
+  "llvm.hexagon.M4.vrmpyeh.acc.s1",
+  "llvm.hexagon.M4.vrmpyeh.s0",
+  "llvm.hexagon.M4.vrmpyeh.s1",
+  "llvm.hexagon.M4.vrmpyoh.acc.s0",
+  "llvm.hexagon.M4.vrmpyoh.acc.s1",
+  "llvm.hexagon.M4.vrmpyoh.s0",
+  "llvm.hexagon.M4.vrmpyoh.s1",
+  "llvm.hexagon.M4.xor.and",
+  "llvm.hexagon.M4.xor.andn",
+  "llvm.hexagon.M4.xor.or",
+  "llvm.hexagon.M4.xor.xacc",
+  "llvm.hexagon.M5.vdmacbsu",
+  "llvm.hexagon.M5.vdmpybsu",
+  "llvm.hexagon.M5.vmacbsu",
+  "llvm.hexagon.M5.vmacbuu",
+  "llvm.hexagon.M5.vmpybsu",
+  "llvm.hexagon.M5.vmpybuu",
+  "llvm.hexagon.M5.vrmacbsu",
+  "llvm.hexagon.M5.vrmacbuu",
+  "llvm.hexagon.M5.vrmpybsu",
+  "llvm.hexagon.M5.vrmpybuu",
+  "llvm.hexagon.M6.vabsdiffb",
+  "llvm.hexagon.M6.vabsdiffub",
+  "llvm.hexagon.S2.addasl.rrri",
+  "llvm.hexagon.S2.asl.i.p",
+  "llvm.hexagon.S2.asl.i.p.acc",
+  "llvm.hexagon.S2.asl.i.p.and",
+  "llvm.hexagon.S2.asl.i.p.nac",
+  "llvm.hexagon.S2.asl.i.p.or",
+  "llvm.hexagon.S2.asl.i.p.xacc",
+  "llvm.hexagon.S2.asl.i.r",
+  "llvm.hexagon.S2.asl.i.r.acc",
+  "llvm.hexagon.S2.asl.i.r.and",
+  "llvm.hexagon.S2.asl.i.r.nac",
+  "llvm.hexagon.S2.asl.i.r.or",
+  "llvm.hexagon.S2.asl.i.r.sat",
+  "llvm.hexagon.S2.asl.i.r.xacc",
+  "llvm.hexagon.S2.asl.i.vh",
+  "llvm.hexagon.S2.asl.i.vw",
+  "llvm.hexagon.S2.asl.r.p",
+  "llvm.hexagon.S2.asl.r.p.acc",
+  "llvm.hexagon.S2.asl.r.p.and",
+  "llvm.hexagon.S2.asl.r.p.nac",
+  "llvm.hexagon.S2.asl.r.p.or",
+  "llvm.hexagon.S2.asl.r.p.xor",
+  "llvm.hexagon.S2.asl.r.r",
+  "llvm.hexagon.S2.asl.r.r.acc",
+  "llvm.hexagon.S2.asl.r.r.and",
+  "llvm.hexagon.S2.asl.r.r.nac",
+  "llvm.hexagon.S2.asl.r.r.or",
+  "llvm.hexagon.S2.asl.r.r.sat",
+  "llvm.hexagon.S2.asl.r.vh",
+  "llvm.hexagon.S2.asl.r.vw",
+  "llvm.hexagon.S2.asr.i.p",
+  "llvm.hexagon.S2.asr.i.p.acc",
+  "llvm.hexagon.S2.asr.i.p.and",
+  "llvm.hexagon.S2.asr.i.p.nac",
+  "llvm.hexagon.S2.asr.i.p.or",
+  "llvm.hexagon.S2.asr.i.p.rnd",
+  "llvm.hexagon.S2.asr.i.p.rnd.goodsyntax",
+  "llvm.hexagon.S2.asr.i.r",
+  "llvm.hexagon.S2.asr.i.r.acc",
+  "llvm.hexagon.S2.asr.i.r.and",
+  "llvm.hexagon.S2.asr.i.r.nac",
+  "llvm.hexagon.S2.asr.i.r.or",
+  "llvm.hexagon.S2.asr.i.r.rnd",
+  "llvm.hexagon.S2.asr.i.r.rnd.goodsyntax",
+  "llvm.hexagon.S2.asr.i.svw.trun",
+  "llvm.hexagon.S2.asr.i.vh",
+  "llvm.hexagon.S2.asr.i.vw",
+  "llvm.hexagon.S2.asr.r.p",
+  "llvm.hexagon.S2.asr.r.p.acc",
+  "llvm.hexagon.S2.asr.r.p.and",
+  "llvm.hexagon.S2.asr.r.p.nac",
+  "llvm.hexagon.S2.asr.r.p.or",
+  "llvm.hexagon.S2.asr.r.p.xor",
+  "llvm.hexagon.S2.asr.r.r",
+  "llvm.hexagon.S2.asr.r.r.acc",
+  "llvm.hexagon.S2.asr.r.r.and",
+  "llvm.hexagon.S2.asr.r.r.nac",
+  "llvm.hexagon.S2.asr.r.r.or",
+  "llvm.hexagon.S2.asr.r.r.sat",
+  "llvm.hexagon.S2.asr.r.svw.trun",
+  "llvm.hexagon.S2.asr.r.vh",
+  "llvm.hexagon.S2.asr.r.vw",
+  "llvm.hexagon.S2.brev",
+  "llvm.hexagon.S2.brevp",
+  "llvm.hexagon.S2.cabacencbin",
+  "llvm.hexagon.S2.cl0",
+  "llvm.hexagon.S2.cl0p",
+  "llvm.hexagon.S2.cl1",
+  "llvm.hexagon.S2.cl1p",
+  "llvm.hexagon.S2.clb",
+  "llvm.hexagon.S2.clbnorm",
+  "llvm.hexagon.S2.clbp",
+  "llvm.hexagon.S2.clrbit.i",
+  "llvm.hexagon.S2.clrbit.r",
+  "llvm.hexagon.S2.ct0",
+  "llvm.hexagon.S2.ct0p",
+  "llvm.hexagon.S2.ct1",
+  "llvm.hexagon.S2.ct1p",
+  "llvm.hexagon.S2.deinterleave",
+  "llvm.hexagon.S2.extractu",
+  "llvm.hexagon.S2.extractu.rp",
+  "llvm.hexagon.S2.extractup",
+  "llvm.hexagon.S2.extractup.rp",
+  "llvm.hexagon.S2.insert",
+  "llvm.hexagon.S2.insert.rp",
+  "llvm.hexagon.S2.insertp",
+  "llvm.hexagon.S2.insertp.rp",
+  "llvm.hexagon.S2.interleave",
+  "llvm.hexagon.S2.lfsp",
+  "llvm.hexagon.S2.lsl.r.p",
+  "llvm.hexagon.S2.lsl.r.p.acc",
+  "llvm.hexagon.S2.lsl.r.p.and",
+  "llvm.hexagon.S2.lsl.r.p.nac",
+  "llvm.hexagon.S2.lsl.r.p.or",
+  "llvm.hexagon.S2.lsl.r.p.xor",
+  "llvm.hexagon.S2.lsl.r.r",
+  "llvm.hexagon.S2.lsl.r.r.acc",
+  "llvm.hexagon.S2.lsl.r.r.and",
+  "llvm.hexagon.S2.lsl.r.r.nac",
+  "llvm.hexagon.S2.lsl.r.r.or",
+  "llvm.hexagon.S2.lsl.r.vh",
+  "llvm.hexagon.S2.lsl.r.vw",
+  "llvm.hexagon.S2.lsr.i.p",
+  "llvm.hexagon.S2.lsr.i.p.acc",
+  "llvm.hexagon.S2.lsr.i.p.and",
+  "llvm.hexagon.S2.lsr.i.p.nac",
+  "llvm.hexagon.S2.lsr.i.p.or",
+  "llvm.hexagon.S2.lsr.i.p.xacc",
+  "llvm.hexagon.S2.lsr.i.r",
+  "llvm.hexagon.S2.lsr.i.r.acc",
+  "llvm.hexagon.S2.lsr.i.r.and",
+  "llvm.hexagon.S2.lsr.i.r.nac",
+  "llvm.hexagon.S2.lsr.i.r.or",
+  "llvm.hexagon.S2.lsr.i.r.xacc",
+  "llvm.hexagon.S2.lsr.i.vh",
+  "llvm.hexagon.S2.lsr.i.vw",
+  "llvm.hexagon.S2.lsr.r.p",
+  "llvm.hexagon.S2.lsr.r.p.acc",
+  "llvm.hexagon.S2.lsr.r.p.and",
+  "llvm.hexagon.S2.lsr.r.p.nac",
+  "llvm.hexagon.S2.lsr.r.p.or",
+  "llvm.hexagon.S2.lsr.r.p.xor",
+  "llvm.hexagon.S2.lsr.r.r",
+  "llvm.hexagon.S2.lsr.r.r.acc",
+  "llvm.hexagon.S2.lsr.r.r.and",
+  "llvm.hexagon.S2.lsr.r.r.nac",
+  "llvm.hexagon.S2.lsr.r.r.or",
+  "llvm.hexagon.S2.lsr.r.vh",
+  "llvm.hexagon.S2.lsr.r.vw",
+  "llvm.hexagon.S2.packhl",
+  "llvm.hexagon.S2.parityp",
+  "llvm.hexagon.S2.setbit.i",
+  "llvm.hexagon.S2.setbit.r",
+  "llvm.hexagon.S2.shuffeb",
+  "llvm.hexagon.S2.shuffeh",
+  "llvm.hexagon.S2.shuffob",
+  "llvm.hexagon.S2.shuffoh",
+  "llvm.hexagon.S2.storerb.pbr",
+  "llvm.hexagon.S2.storerb.pci",
+  "llvm.hexagon.S2.storerb.pcr",
+  "llvm.hexagon.S2.storerd.pbr",
+  "llvm.hexagon.S2.storerd.pci",
+  "llvm.hexagon.S2.storerd.pcr",
+  "llvm.hexagon.S2.storerf.pbr",
+  "llvm.hexagon.S2.storerf.pci",
+  "llvm.hexagon.S2.storerf.pcr",
+  "llvm.hexagon.S2.storerh.pbr",
+  "llvm.hexagon.S2.storerh.pci",
+  "llvm.hexagon.S2.storerh.pcr",
+  "llvm.hexagon.S2.storeri.pbr",
+  "llvm.hexagon.S2.storeri.pci",
+  "llvm.hexagon.S2.storeri.pcr",
+  "llvm.hexagon.S2.storew.locked",
+  "llvm.hexagon.S2.svsathb",
+  "llvm.hexagon.S2.svsathub",
+  "llvm.hexagon.S2.tableidxb.goodsyntax",
+  "llvm.hexagon.S2.tableidxd.goodsyntax",
+  "llvm.hexagon.S2.tableidxh.goodsyntax",
+  "llvm.hexagon.S2.tableidxw.goodsyntax",
+  "llvm.hexagon.S2.togglebit.i",
+  "llvm.hexagon.S2.togglebit.r",
+  "llvm.hexagon.S2.tstbit.i",
+  "llvm.hexagon.S2.tstbit.r",
+  "llvm.hexagon.S2.valignib",
+  "llvm.hexagon.S2.valignrb",
+  "llvm.hexagon.S2.vcnegh",
+  "llvm.hexagon.S2.vcrotate",
+  "llvm.hexagon.S2.vrcnegh",
+  "llvm.hexagon.S2.vrndpackwh",
+  "llvm.hexagon.S2.vrndpackwhs",
+  "llvm.hexagon.S2.vsathb",
+  "llvm.hexagon.S2.vsathb.nopack",
+  "llvm.hexagon.S2.vsathub",
+  "llvm.hexagon.S2.vsathub.nopack",
+  "llvm.hexagon.S2.vsatwh",
+  "llvm.hexagon.S2.vsatwh.nopack",
+  "llvm.hexagon.S2.vsatwuh",
+  "llvm.hexagon.S2.vsatwuh.nopack",
+  "llvm.hexagon.S2.vsplatrb",
+  "llvm.hexagon.S2.vsplatrh",
+  "llvm.hexagon.S2.vspliceib",
+  "llvm.hexagon.S2.vsplicerb",
+  "llvm.hexagon.S2.vsxtbh",
+  "llvm.hexagon.S2.vsxthw",
+  "llvm.hexagon.S2.vtrunehb",
+  "llvm.hexagon.S2.vtrunewh",
+  "llvm.hexagon.S2.vtrunohb",
+  "llvm.hexagon.S2.vtrunowh",
+  "llvm.hexagon.S2.vzxtbh",
+  "llvm.hexagon.S2.vzxthw",
+  "llvm.hexagon.S4.addaddi",
+  "llvm.hexagon.S4.addi.asl.ri",
+  "llvm.hexagon.S4.addi.lsr.ri",
+  "llvm.hexagon.S4.andi.asl.ri",
+  "llvm.hexagon.S4.andi.lsr.ri",
+  "llvm.hexagon.S4.clbaddi",
+  "llvm.hexagon.S4.clbpaddi",
+  "llvm.hexagon.S4.clbpnorm",
+  "llvm.hexagon.S4.extract",
+  "llvm.hexagon.S4.extract.rp",
+  "llvm.hexagon.S4.extractp",
+  "llvm.hexagon.S4.extractp.rp",
+  "llvm.hexagon.S4.lsli",
+  "llvm.hexagon.S4.ntstbit.i",
+  "llvm.hexagon.S4.ntstbit.r",
+  "llvm.hexagon.S4.or.andi",
+  "llvm.hexagon.S4.or.andix",
+  "llvm.hexagon.S4.or.ori",
+  "llvm.hexagon.S4.ori.asl.ri",
+  "llvm.hexagon.S4.ori.lsr.ri",
+  "llvm.hexagon.S4.parity",
+  "llvm.hexagon.S4.stored.locked",
+  "llvm.hexagon.S4.subaddi",
+  "llvm.hexagon.S4.subi.asl.ri",
+  "llvm.hexagon.S4.subi.lsr.ri",
+  "llvm.hexagon.S4.vrcrotate",
+  "llvm.hexagon.S4.vrcrotate.acc",
+  "llvm.hexagon.S4.vxaddsubh",
+  "llvm.hexagon.S4.vxaddsubhr",
+  "llvm.hexagon.S4.vxaddsubw",
+  "llvm.hexagon.S4.vxsubaddh",
+  "llvm.hexagon.S4.vxsubaddhr",
+  "llvm.hexagon.S4.vxsubaddw",
+  "llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax",
+  "llvm.hexagon.S5.asrhub.sat",
+  "llvm.hexagon.S5.popcountp",
+  "llvm.hexagon.S5.vasrhrnd.goodsyntax",
+  "llvm.hexagon.S6.rol.i.p",
+  "llvm.hexagon.S6.rol.i.p.acc",
+  "llvm.hexagon.S6.rol.i.p.and",
+  "llvm.hexagon.S6.rol.i.p.nac",
+  "llvm.hexagon.S6.rol.i.p.or",
+  "llvm.hexagon.S6.rol.i.p.xacc",
+  "llvm.hexagon.S6.rol.i.r",
+  "llvm.hexagon.S6.rol.i.r.acc",
+  "llvm.hexagon.S6.rol.i.r.and",
+  "llvm.hexagon.S6.rol.i.r.nac",
+  "llvm.hexagon.S6.rol.i.r.or",
+  "llvm.hexagon.S6.rol.i.r.xacc",
+  "llvm.hexagon.S6.vsplatrbp",
+  "llvm.hexagon.S6.vtrunehb.ppp",
+  "llvm.hexagon.S6.vtrunohb.ppp",
+  "llvm.hexagon.V6.extractw",
+  "llvm.hexagon.V6.extractw.128B",
+  "llvm.hexagon.V6.hi",
+  "llvm.hexagon.V6.hi.128B",
+  "llvm.hexagon.V6.lo",
+  "llvm.hexagon.V6.lo.128B",
+  "llvm.hexagon.V6.lvsplatb",
+  "llvm.hexagon.V6.lvsplatb.128B",
+  "llvm.hexagon.V6.lvsplath",
+  "llvm.hexagon.V6.lvsplath.128B",
+  "llvm.hexagon.V6.lvsplatw",
+  "llvm.hexagon.V6.lvsplatw.128B",
+  "llvm.hexagon.V6.pred.and",
+  "llvm.hexagon.V6.pred.and.128B",
+  "llvm.hexagon.V6.pred.and.n",
+  "llvm.hexagon.V6.pred.and.n.128B",
+  "llvm.hexagon.V6.pred.not",
+  "llvm.hexagon.V6.pred.not.128B",
+  "llvm.hexagon.V6.pred.or",
+  "llvm.hexagon.V6.pred.or.128B",
+  "llvm.hexagon.V6.pred.or.n",
+  "llvm.hexagon.V6.pred.or.n.128B",
+  "llvm.hexagon.V6.pred.scalar2",
+  "llvm.hexagon.V6.pred.scalar2.128B",
+  "llvm.hexagon.V6.pred.scalar2v2",
+  "llvm.hexagon.V6.pred.scalar2v2.128B",
+  "llvm.hexagon.V6.pred.xor",
+  "llvm.hexagon.V6.pred.xor.128B",
+  "llvm.hexagon.V6.shuffeqh",
+  "llvm.hexagon.V6.shuffeqh.128B",
+  "llvm.hexagon.V6.shuffeqw",
+  "llvm.hexagon.V6.shuffeqw.128B",
+  "llvm.hexagon.V6.vS32b.nqpred.ai",
+  "llvm.hexagon.V6.vS32b.nqpred.ai.128B",
+  "llvm.hexagon.V6.vS32b.nt.nqpred.ai",
+  "llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B",
+  "llvm.hexagon.V6.vS32b.nt.qpred.ai",
+  "llvm.hexagon.V6.vS32b.nt.qpred.ai.128B",
+  "llvm.hexagon.V6.vS32b.qpred.ai",
+  "llvm.hexagon.V6.vS32b.qpred.ai.128B",
+  "llvm.hexagon.V6.vabsb",
+  "llvm.hexagon.V6.vabsb.128B",
+  "llvm.hexagon.V6.vabsb.sat",
+  "llvm.hexagon.V6.vabsb.sat.128B",
+  "llvm.hexagon.V6.vabsdiffh",
+  "llvm.hexagon.V6.vabsdiffh.128B",
+  "llvm.hexagon.V6.vabsdiffub",
+  "llvm.hexagon.V6.vabsdiffub.128B",
+  "llvm.hexagon.V6.vabsdiffuh",
+  "llvm.hexagon.V6.vabsdiffuh.128B",
+  "llvm.hexagon.V6.vabsdiffw",
+  "llvm.hexagon.V6.vabsdiffw.128B",
+  "llvm.hexagon.V6.vabsh",
+  "llvm.hexagon.V6.vabsh.128B",
+  "llvm.hexagon.V6.vabsh.sat",
+  "llvm.hexagon.V6.vabsh.sat.128B",
+  "llvm.hexagon.V6.vabsw",
+  "llvm.hexagon.V6.vabsw.128B",
+  "llvm.hexagon.V6.vabsw.sat",
+  "llvm.hexagon.V6.vabsw.sat.128B",
+  "llvm.hexagon.V6.vaddb",
+  "llvm.hexagon.V6.vaddb.128B",
+  "llvm.hexagon.V6.vaddb.dv",
+  "llvm.hexagon.V6.vaddb.dv.128B",
+  "llvm.hexagon.V6.vaddbnq",
+  "llvm.hexagon.V6.vaddbnq.128B",
+  "llvm.hexagon.V6.vaddbq",
+  "llvm.hexagon.V6.vaddbq.128B",
+  "llvm.hexagon.V6.vaddbsat",
+  "llvm.hexagon.V6.vaddbsat.128B",
+  "llvm.hexagon.V6.vaddbsat.dv",
+  "llvm.hexagon.V6.vaddbsat.dv.128B",
+  "llvm.hexagon.V6.vaddcarry",
+  "llvm.hexagon.V6.vaddcarry.128B",
+  "llvm.hexagon.V6.vaddclbh",
+  "llvm.hexagon.V6.vaddclbh.128B",
+  "llvm.hexagon.V6.vaddclbw",
+  "llvm.hexagon.V6.vaddclbw.128B",
+  "llvm.hexagon.V6.vaddh",
+  "llvm.hexagon.V6.vaddh.128B",
+  "llvm.hexagon.V6.vaddh.dv",
+  "llvm.hexagon.V6.vaddh.dv.128B",
+  "llvm.hexagon.V6.vaddhnq",
+  "llvm.hexagon.V6.vaddhnq.128B",
+  "llvm.hexagon.V6.vaddhq",
+  "llvm.hexagon.V6.vaddhq.128B",
+  "llvm.hexagon.V6.vaddhsat",
+  "llvm.hexagon.V6.vaddhsat.128B",
+  "llvm.hexagon.V6.vaddhsat.dv",
+  "llvm.hexagon.V6.vaddhsat.dv.128B",
+  "llvm.hexagon.V6.vaddhw",
+  "llvm.hexagon.V6.vaddhw.128B",
+  "llvm.hexagon.V6.vaddhw.acc",
+  "llvm.hexagon.V6.vaddhw.acc.128B",
+  "llvm.hexagon.V6.vaddubh",
+  "llvm.hexagon.V6.vaddubh.128B",
+  "llvm.hexagon.V6.vaddubh.acc",
+  "llvm.hexagon.V6.vaddubh.acc.128B",
+  "llvm.hexagon.V6.vaddubsat",
+  "llvm.hexagon.V6.vaddubsat.128B",
+  "llvm.hexagon.V6.vaddubsat.dv",
+  "llvm.hexagon.V6.vaddubsat.dv.128B",
+  "llvm.hexagon.V6.vaddububb.sat",
+  "llvm.hexagon.V6.vaddububb.sat.128B",
+  "llvm.hexagon.V6.vadduhsat",
+  "llvm.hexagon.V6.vadduhsat.128B",
+  "llvm.hexagon.V6.vadduhsat.dv",
+  "llvm.hexagon.V6.vadduhsat.dv.128B",
+  "llvm.hexagon.V6.vadduhw",
+  "llvm.hexagon.V6.vadduhw.128B",
+  "llvm.hexagon.V6.vadduhw.acc",
+  "llvm.hexagon.V6.vadduhw.acc.128B",
+  "llvm.hexagon.V6.vadduwsat",
+  "llvm.hexagon.V6.vadduwsat.128B",
+  "llvm.hexagon.V6.vadduwsat.dv",
+  "llvm.hexagon.V6.vadduwsat.dv.128B",
+  "llvm.hexagon.V6.vaddw",
+  "llvm.hexagon.V6.vaddw.128B",
+  "llvm.hexagon.V6.vaddw.dv",
+  "llvm.hexagon.V6.vaddw.dv.128B",
+  "llvm.hexagon.V6.vaddwnq",
+  "llvm.hexagon.V6.vaddwnq.128B",
+  "llvm.hexagon.V6.vaddwq",
+  "llvm.hexagon.V6.vaddwq.128B",
+  "llvm.hexagon.V6.vaddwsat",
+  "llvm.hexagon.V6.vaddwsat.128B",
+  "llvm.hexagon.V6.vaddwsat.dv",
+  "llvm.hexagon.V6.vaddwsat.dv.128B",
+  "llvm.hexagon.V6.valignb",
+  "llvm.hexagon.V6.valignb.128B",
+  "llvm.hexagon.V6.valignbi",
+  "llvm.hexagon.V6.valignbi.128B",
+  "llvm.hexagon.V6.vand",
+  "llvm.hexagon.V6.vand.128B",
+  "llvm.hexagon.V6.vandnqrt",
+  "llvm.hexagon.V6.vandnqrt.128B",
+  "llvm.hexagon.V6.vandnqrt.acc",
+  "llvm.hexagon.V6.vandnqrt.acc.128B",
+  "llvm.hexagon.V6.vandqrt",
+  "llvm.hexagon.V6.vandqrt.128B",
+  "llvm.hexagon.V6.vandqrt.acc",
+  "llvm.hexagon.V6.vandqrt.acc.128B",
+  "llvm.hexagon.V6.vandvnqv",
+  "llvm.hexagon.V6.vandvnqv.128B",
+  "llvm.hexagon.V6.vandvqv",
+  "llvm.hexagon.V6.vandvqv.128B",
+  "llvm.hexagon.V6.vandvrt",
+  "llvm.hexagon.V6.vandvrt.128B",
+  "llvm.hexagon.V6.vandvrt.acc",
+  "llvm.hexagon.V6.vandvrt.acc.128B",
+  "llvm.hexagon.V6.vaslh",
+  "llvm.hexagon.V6.vaslh.128B",
+  "llvm.hexagon.V6.vaslh.acc",
+  "llvm.hexagon.V6.vaslh.acc.128B",
+  "llvm.hexagon.V6.vaslhv",
+  "llvm.hexagon.V6.vaslhv.128B",
+  "llvm.hexagon.V6.vaslw",
+  "llvm.hexagon.V6.vaslw.128B",
+  "llvm.hexagon.V6.vaslw.acc",
+  "llvm.hexagon.V6.vaslw.acc.128B",
+  "llvm.hexagon.V6.vaslwv",
+  "llvm.hexagon.V6.vaslwv.128B",
+  "llvm.hexagon.V6.vasrh",
+  "llvm.hexagon.V6.vasrh.128B",
+  "llvm.hexagon.V6.vasrh.acc",
+  "llvm.hexagon.V6.vasrh.acc.128B",
+  "llvm.hexagon.V6.vasrhbrndsat",
+  "llvm.hexagon.V6.vasrhbrndsat.128B",
+  "llvm.hexagon.V6.vasrhbsat",
+  "llvm.hexagon.V6.vasrhbsat.128B",
+  "llvm.hexagon.V6.vasrhubrndsat",
+  "llvm.hexagon.V6.vasrhubrndsat.128B",
+  "llvm.hexagon.V6.vasrhubsat",
+  "llvm.hexagon.V6.vasrhubsat.128B",
+  "llvm.hexagon.V6.vasrhv",
+  "llvm.hexagon.V6.vasrhv.128B",
+  "llvm.hexagon.V6.vasruhubrndsat",
+  "llvm.hexagon.V6.vasruhubrndsat.128B",
+  "llvm.hexagon.V6.vasruhubsat",
+  "llvm.hexagon.V6.vasruhubsat.128B",
+  "llvm.hexagon.V6.vasruwuhrndsat",
+  "llvm.hexagon.V6.vasruwuhrndsat.128B",
+  "llvm.hexagon.V6.vasruwuhsat",
+  "llvm.hexagon.V6.vasruwuhsat.128B",
+  "llvm.hexagon.V6.vasrw",
+  "llvm.hexagon.V6.vasrw.128B",
+  "llvm.hexagon.V6.vasrw.acc",
+  "llvm.hexagon.V6.vasrw.acc.128B",
+  "llvm.hexagon.V6.vasrwh",
+  "llvm.hexagon.V6.vasrwh.128B",
+  "llvm.hexagon.V6.vasrwhrndsat",
+  "llvm.hexagon.V6.vasrwhrndsat.128B",
+  "llvm.hexagon.V6.vasrwhsat",
+  "llvm.hexagon.V6.vasrwhsat.128B",
+  "llvm.hexagon.V6.vasrwuhrndsat",
+  "llvm.hexagon.V6.vasrwuhrndsat.128B",
+  "llvm.hexagon.V6.vasrwuhsat",
+  "llvm.hexagon.V6.vasrwuhsat.128B",
+  "llvm.hexagon.V6.vasrwv",
+  "llvm.hexagon.V6.vasrwv.128B",
+  "llvm.hexagon.V6.vassign",
+  "llvm.hexagon.V6.vassign.128B",
+  "llvm.hexagon.V6.vassignp",
+  "llvm.hexagon.V6.vassignp.128B",
+  "llvm.hexagon.V6.vavgb",
+  "llvm.hexagon.V6.vavgb.128B",
+  "llvm.hexagon.V6.vavgbrnd",
+  "llvm.hexagon.V6.vavgbrnd.128B",
+  "llvm.hexagon.V6.vavgh",
+  "llvm.hexagon.V6.vavgh.128B",
+  "llvm.hexagon.V6.vavghrnd",
+  "llvm.hexagon.V6.vavghrnd.128B",
+  "llvm.hexagon.V6.vavgub",
+  "llvm.hexagon.V6.vavgub.128B",
+  "llvm.hexagon.V6.vavgubrnd",
+  "llvm.hexagon.V6.vavgubrnd.128B",
+  "llvm.hexagon.V6.vavguh",
+  "llvm.hexagon.V6.vavguh.128B",
+  "llvm.hexagon.V6.vavguhrnd",
+  "llvm.hexagon.V6.vavguhrnd.128B",
+  "llvm.hexagon.V6.vavguw",
+  "llvm.hexagon.V6.vavguw.128B",
+  "llvm.hexagon.V6.vavguwrnd",
+  "llvm.hexagon.V6.vavguwrnd.128B",
+  "llvm.hexagon.V6.vavgw",
+  "llvm.hexagon.V6.vavgw.128B",
+  "llvm.hexagon.V6.vavgwrnd",
+  "llvm.hexagon.V6.vavgwrnd.128B",
+  "llvm.hexagon.V6.vcl0h",
+  "llvm.hexagon.V6.vcl0h.128B",
+  "llvm.hexagon.V6.vcl0w",
+  "llvm.hexagon.V6.vcl0w.128B",
+  "llvm.hexagon.V6.vcombine",
+  "llvm.hexagon.V6.vcombine.128B",
+  "llvm.hexagon.V6.vd0",
+  "llvm.hexagon.V6.vd0.128B",
+  "llvm.hexagon.V6.vdd0",
+  "llvm.hexagon.V6.vdd0.128B",
+  "llvm.hexagon.V6.vdealb",
+  "llvm.hexagon.V6.vdealb.128B",
+  "llvm.hexagon.V6.vdealb4w",
+  "llvm.hexagon.V6.vdealb4w.128B",
+  "llvm.hexagon.V6.vdealh",
+  "llvm.hexagon.V6.vdealh.128B",
+  "llvm.hexagon.V6.vdealvdd",
+  "llvm.hexagon.V6.vdealvdd.128B",
+  "llvm.hexagon.V6.vdelta",
+  "llvm.hexagon.V6.vdelta.128B",
+  "llvm.hexagon.V6.vdmpybus",
+  "llvm.hexagon.V6.vdmpybus.128B",
+  "llvm.hexagon.V6.vdmpybus.acc",
+  "llvm.hexagon.V6.vdmpybus.acc.128B",
+  "llvm.hexagon.V6.vdmpybus.dv",
+  "llvm.hexagon.V6.vdmpybus.dv.128B",
+  "llvm.hexagon.V6.vdmpybus.dv.acc",
+  "llvm.hexagon.V6.vdmpybus.dv.acc.128B",
+  "llvm.hexagon.V6.vdmpyhb",
+  "llvm.hexagon.V6.vdmpyhb.128B",
+  "llvm.hexagon.V6.vdmpyhb.acc",
+  "llvm.hexagon.V6.vdmpyhb.acc.128B",
+  "llvm.hexagon.V6.vdmpyhb.dv",
+  "llvm.hexagon.V6.vdmpyhb.dv.128B",
+  "llvm.hexagon.V6.vdmpyhb.dv.acc",
+  "llvm.hexagon.V6.vdmpyhb.dv.acc.128B",
+  "llvm.hexagon.V6.vdmpyhisat",
+  "llvm.hexagon.V6.vdmpyhisat.128B",
+  "llvm.hexagon.V6.vdmpyhisat.acc",
+  "llvm.hexagon.V6.vdmpyhisat.acc.128B",
+  "llvm.hexagon.V6.vdmpyhsat",
+  "llvm.hexagon.V6.vdmpyhsat.128B",
+  "llvm.hexagon.V6.vdmpyhsat.acc",
+  "llvm.hexagon.V6.vdmpyhsat.acc.128B",
+  "llvm.hexagon.V6.vdmpyhsuisat",
+  "llvm.hexagon.V6.vdmpyhsuisat.128B",
+  "llvm.hexagon.V6.vdmpyhsuisat.acc",
+  "llvm.hexagon.V6.vdmpyhsuisat.acc.128B",
+  "llvm.hexagon.V6.vdmpyhsusat",
+  "llvm.hexagon.V6.vdmpyhsusat.128B",
+  "llvm.hexagon.V6.vdmpyhsusat.acc",
+  "llvm.hexagon.V6.vdmpyhsusat.acc.128B",
+  "llvm.hexagon.V6.vdmpyhvsat",
+  "llvm.hexagon.V6.vdmpyhvsat.128B",
+  "llvm.hexagon.V6.vdmpyhvsat.acc",
+  "llvm.hexagon.V6.vdmpyhvsat.acc.128B",
+  "llvm.hexagon.V6.vdsaduh",
+  "llvm.hexagon.V6.vdsaduh.128B",
+  "llvm.hexagon.V6.vdsaduh.acc",
+  "llvm.hexagon.V6.vdsaduh.acc.128B",
+  "llvm.hexagon.V6.veqb",
+  "llvm.hexagon.V6.veqb.128B",
+  "llvm.hexagon.V6.veqb.and",
+  "llvm.hexagon.V6.veqb.and.128B",
+  "llvm.hexagon.V6.veqb.or",
+  "llvm.hexagon.V6.veqb.or.128B",
+  "llvm.hexagon.V6.veqb.xor",
+  "llvm.hexagon.V6.veqb.xor.128B",
+  "llvm.hexagon.V6.veqh",
+  "llvm.hexagon.V6.veqh.128B",
+  "llvm.hexagon.V6.veqh.and",
+  "llvm.hexagon.V6.veqh.and.128B",
+  "llvm.hexagon.V6.veqh.or",
+  "llvm.hexagon.V6.veqh.or.128B",
+  "llvm.hexagon.V6.veqh.xor",
+  "llvm.hexagon.V6.veqh.xor.128B",
+  "llvm.hexagon.V6.veqw",
+  "llvm.hexagon.V6.veqw.128B",
+  "llvm.hexagon.V6.veqw.and",
+  "llvm.hexagon.V6.veqw.and.128B",
+  "llvm.hexagon.V6.veqw.or",
+  "llvm.hexagon.V6.veqw.or.128B",
+  "llvm.hexagon.V6.veqw.xor",
+  "llvm.hexagon.V6.veqw.xor.128B",
+  "llvm.hexagon.V6.vgathermh",
+  "llvm.hexagon.V6.vgathermh.128B",
+  "llvm.hexagon.V6.vgathermhq",
+  "llvm.hexagon.V6.vgathermhq.128B",
+  "llvm.hexagon.V6.vgathermhw",
+  "llvm.hexagon.V6.vgathermhw.128B",
+  "llvm.hexagon.V6.vgathermhwq",
+  "llvm.hexagon.V6.vgathermhwq.128B",
+  "llvm.hexagon.V6.vgathermw",
+  "llvm.hexagon.V6.vgathermw.128B",
+  "llvm.hexagon.V6.vgathermwq",
+  "llvm.hexagon.V6.vgathermwq.128B",
+  "llvm.hexagon.V6.vgtb",
+  "llvm.hexagon.V6.vgtb.128B",
+  "llvm.hexagon.V6.vgtb.and",
+  "llvm.hexagon.V6.vgtb.and.128B",
+  "llvm.hexagon.V6.vgtb.or",
+  "llvm.hexagon.V6.vgtb.or.128B",
+  "llvm.hexagon.V6.vgtb.xor",
+  "llvm.hexagon.V6.vgtb.xor.128B",
+  "llvm.hexagon.V6.vgth",
+  "llvm.hexagon.V6.vgth.128B",
+  "llvm.hexagon.V6.vgth.and",
+  "llvm.hexagon.V6.vgth.and.128B",
+  "llvm.hexagon.V6.vgth.or",
+  "llvm.hexagon.V6.vgth.or.128B",
+  "llvm.hexagon.V6.vgth.xor",
+  "llvm.hexagon.V6.vgth.xor.128B",
+  "llvm.hexagon.V6.vgtub",
+  "llvm.hexagon.V6.vgtub.128B",
+  "llvm.hexagon.V6.vgtub.and",
+  "llvm.hexagon.V6.vgtub.and.128B",
+  "llvm.hexagon.V6.vgtub.or",
+  "llvm.hexagon.V6.vgtub.or.128B",
+  "llvm.hexagon.V6.vgtub.xor",
+  "llvm.hexagon.V6.vgtub.xor.128B",
+  "llvm.hexagon.V6.vgtuh",
+  "llvm.hexagon.V6.vgtuh.128B",
+  "llvm.hexagon.V6.vgtuh.and",
+  "llvm.hexagon.V6.vgtuh.and.128B",
+  "llvm.hexagon.V6.vgtuh.or",
+  "llvm.hexagon.V6.vgtuh.or.128B",
+  "llvm.hexagon.V6.vgtuh.xor",
+  "llvm.hexagon.V6.vgtuh.xor.128B",
+  "llvm.hexagon.V6.vgtuw",
+  "llvm.hexagon.V6.vgtuw.128B",
+  "llvm.hexagon.V6.vgtuw.and",
+  "llvm.hexagon.V6.vgtuw.and.128B",
+  "llvm.hexagon.V6.vgtuw.or",
+  "llvm.hexagon.V6.vgtuw.or.128B",
+  "llvm.hexagon.V6.vgtuw.xor",
+  "llvm.hexagon.V6.vgtuw.xor.128B",
+  "llvm.hexagon.V6.vgtw",
+  "llvm.hexagon.V6.vgtw.128B",
+  "llvm.hexagon.V6.vgtw.and",
+  "llvm.hexagon.V6.vgtw.and.128B",
+  "llvm.hexagon.V6.vgtw.or",
+  "llvm.hexagon.V6.vgtw.or.128B",
+  "llvm.hexagon.V6.vgtw.xor",
+  "llvm.hexagon.V6.vgtw.xor.128B",
+  "llvm.hexagon.V6.vinsertwr",
+  "llvm.hexagon.V6.vinsertwr.128B",
+  "llvm.hexagon.V6.vlalignb",
+  "llvm.hexagon.V6.vlalignb.128B",
+  "llvm.hexagon.V6.vlalignbi",
+  "llvm.hexagon.V6.vlalignbi.128B",
+  "llvm.hexagon.V6.vlsrb",
+  "llvm.hexagon.V6.vlsrb.128B",
+  "llvm.hexagon.V6.vlsrh",
+  "llvm.hexagon.V6.vlsrh.128B",
+  "llvm.hexagon.V6.vlsrhv",
+  "llvm.hexagon.V6.vlsrhv.128B",
+  "llvm.hexagon.V6.vlsrw",
+  "llvm.hexagon.V6.vlsrw.128B",
+  "llvm.hexagon.V6.vlsrwv",
+  "llvm.hexagon.V6.vlsrwv.128B",
+  "llvm.hexagon.V6.vlut4",
+  "llvm.hexagon.V6.vlut4.128B",
+  "llvm.hexagon.V6.vlutvvb",
+  "llvm.hexagon.V6.vlutvvb.128B",
+  "llvm.hexagon.V6.vlutvvb.nm",
+  "llvm.hexagon.V6.vlutvvb.nm.128B",
+  "llvm.hexagon.V6.vlutvvb.oracc",
+  "llvm.hexagon.V6.vlutvvb.oracc.128B",
+  "llvm.hexagon.V6.vlutvvb.oracci",
+  "llvm.hexagon.V6.vlutvvb.oracci.128B",
+  "llvm.hexagon.V6.vlutvvbi",
+  "llvm.hexagon.V6.vlutvvbi.128B",
+  "llvm.hexagon.V6.vlutvwh",
+  "llvm.hexagon.V6.vlutvwh.128B",
+  "llvm.hexagon.V6.vlutvwh.nm",
+  "llvm.hexagon.V6.vlutvwh.nm.128B",
+  "llvm.hexagon.V6.vlutvwh.oracc",
+  "llvm.hexagon.V6.vlutvwh.oracc.128B",
+  "llvm.hexagon.V6.vlutvwh.oracci",
+  "llvm.hexagon.V6.vlutvwh.oracci.128B",
+  "llvm.hexagon.V6.vlutvwhi",
+  "llvm.hexagon.V6.vlutvwhi.128B",
+  "llvm.hexagon.V6.vmaskedstorenq",
+  "llvm.hexagon.V6.vmaskedstorenq.128B",
+  "llvm.hexagon.V6.vmaskedstorentnq",
+  "llvm.hexagon.V6.vmaskedstorentnq.128B",
+  "llvm.hexagon.V6.vmaskedstorentq",
+  "llvm.hexagon.V6.vmaskedstorentq.128B",
+  "llvm.hexagon.V6.vmaskedstoreq",
+  "llvm.hexagon.V6.vmaskedstoreq.128B",
+  "llvm.hexagon.V6.vmaxb",
+  "llvm.hexagon.V6.vmaxb.128B",
+  "llvm.hexagon.V6.vmaxh",
+  "llvm.hexagon.V6.vmaxh.128B",
+  "llvm.hexagon.V6.vmaxub",
+  "llvm.hexagon.V6.vmaxub.128B",
+  "llvm.hexagon.V6.vmaxuh",
+  "llvm.hexagon.V6.vmaxuh.128B",
+  "llvm.hexagon.V6.vmaxw",
+  "llvm.hexagon.V6.vmaxw.128B",
+  "llvm.hexagon.V6.vminb",
+  "llvm.hexagon.V6.vminb.128B",
+  "llvm.hexagon.V6.vminh",
+  "llvm.hexagon.V6.vminh.128B",
+  "llvm.hexagon.V6.vminub",
+  "llvm.hexagon.V6.vminub.128B",
+  "llvm.hexagon.V6.vminuh",
+  "llvm.hexagon.V6.vminuh.128B",
+  "llvm.hexagon.V6.vminw",
+  "llvm.hexagon.V6.vminw.128B",
+  "llvm.hexagon.V6.vmpabus",
+  "llvm.hexagon.V6.vmpabus.128B",
+  "llvm.hexagon.V6.vmpabus.acc",
+  "llvm.hexagon.V6.vmpabus.acc.128B",
+  "llvm.hexagon.V6.vmpabusv",
+  "llvm.hexagon.V6.vmpabusv.128B",
+  "llvm.hexagon.V6.vmpabuu",
+  "llvm.hexagon.V6.vmpabuu.128B",
+  "llvm.hexagon.V6.vmpabuu.acc",
+  "llvm.hexagon.V6.vmpabuu.acc.128B",
+  "llvm.hexagon.V6.vmpabuuv",
+  "llvm.hexagon.V6.vmpabuuv.128B",
+  "llvm.hexagon.V6.vmpahb",
+  "llvm.hexagon.V6.vmpahb.128B",
+  "llvm.hexagon.V6.vmpahb.acc",
+  "llvm.hexagon.V6.vmpahb.acc.128B",
+  "llvm.hexagon.V6.vmpahhsat",
+  "llvm.hexagon.V6.vmpahhsat.128B",
+  "llvm.hexagon.V6.vmpauhb",
+  "llvm.hexagon.V6.vmpauhb.128B",
+  "llvm.hexagon.V6.vmpauhb.acc",
+  "llvm.hexagon.V6.vmpauhb.acc.128B",
+  "llvm.hexagon.V6.vmpauhuhsat",
+  "llvm.hexagon.V6.vmpauhuhsat.128B",
+  "llvm.hexagon.V6.vmpsuhuhsat",
+  "llvm.hexagon.V6.vmpsuhuhsat.128B",
+  "llvm.hexagon.V6.vmpybus",
+  "llvm.hexagon.V6.vmpybus.128B",
+  "llvm.hexagon.V6.vmpybus.acc",
+  "llvm.hexagon.V6.vmpybus.acc.128B",
+  "llvm.hexagon.V6.vmpybusv",
+  "llvm.hexagon.V6.vmpybusv.128B",
+  "llvm.hexagon.V6.vmpybusv.acc",
+  "llvm.hexagon.V6.vmpybusv.acc.128B",
+  "llvm.hexagon.V6.vmpybv",
+  "llvm.hexagon.V6.vmpybv.128B",
+  "llvm.hexagon.V6.vmpybv.acc",
+  "llvm.hexagon.V6.vmpybv.acc.128B",
+  "llvm.hexagon.V6.vmpyewuh",
+  "llvm.hexagon.V6.vmpyewuh.128B",
+  "llvm.hexagon.V6.vmpyewuh.64",
+  "llvm.hexagon.V6.vmpyewuh.64.128B",
+  "llvm.hexagon.V6.vmpyh",
+  "llvm.hexagon.V6.vmpyh.128B",
+  "llvm.hexagon.V6.vmpyh.acc",
+  "llvm.hexagon.V6.vmpyh.acc.128B",
+  "llvm.hexagon.V6.vmpyhsat.acc",
+  "llvm.hexagon.V6.vmpyhsat.acc.128B",
+  "llvm.hexagon.V6.vmpyhsrs",
+  "llvm.hexagon.V6.vmpyhsrs.128B",
+  "llvm.hexagon.V6.vmpyhss",
+  "llvm.hexagon.V6.vmpyhss.128B",
+  "llvm.hexagon.V6.vmpyhus",
+  "llvm.hexagon.V6.vmpyhus.128B",
+  "llvm.hexagon.V6.vmpyhus.acc",
+  "llvm.hexagon.V6.vmpyhus.acc.128B",
+  "llvm.hexagon.V6.vmpyhv",
+  "llvm.hexagon.V6.vmpyhv.128B",
+  "llvm.hexagon.V6.vmpyhv.acc",
+  "llvm.hexagon.V6.vmpyhv.acc.128B",
+  "llvm.hexagon.V6.vmpyhvsrs",
+  "llvm.hexagon.V6.vmpyhvsrs.128B",
+  "llvm.hexagon.V6.vmpyieoh",
+  "llvm.hexagon.V6.vmpyieoh.128B",
+  "llvm.hexagon.V6.vmpyiewh.acc",
+  "llvm.hexagon.V6.vmpyiewh.acc.128B",
+  "llvm.hexagon.V6.vmpyiewuh",
+  "llvm.hexagon.V6.vmpyiewuh.128B",
+  "llvm.hexagon.V6.vmpyiewuh.acc",
+  "llvm.hexagon.V6.vmpyiewuh.acc.128B",
+  "llvm.hexagon.V6.vmpyih",
+  "llvm.hexagon.V6.vmpyih.128B",
+  "llvm.hexagon.V6.vmpyih.acc",
+  "llvm.hexagon.V6.vmpyih.acc.128B",
+  "llvm.hexagon.V6.vmpyihb",
+  "llvm.hexagon.V6.vmpyihb.128B",
+  "llvm.hexagon.V6.vmpyihb.acc",
+  "llvm.hexagon.V6.vmpyihb.acc.128B",
+  "llvm.hexagon.V6.vmpyiowh",
+  "llvm.hexagon.V6.vmpyiowh.128B",
+  "llvm.hexagon.V6.vmpyiwb",
+  "llvm.hexagon.V6.vmpyiwb.128B",
+  "llvm.hexagon.V6.vmpyiwb.acc",
+  "llvm.hexagon.V6.vmpyiwb.acc.128B",
+  "llvm.hexagon.V6.vmpyiwh",
+  "llvm.hexagon.V6.vmpyiwh.128B",
+  "llvm.hexagon.V6.vmpyiwh.acc",
+  "llvm.hexagon.V6.vmpyiwh.acc.128B",
+  "llvm.hexagon.V6.vmpyiwub",
+  "llvm.hexagon.V6.vmpyiwub.128B",
+  "llvm.hexagon.V6.vmpyiwub.acc",
+  "llvm.hexagon.V6.vmpyiwub.acc.128B",
+  "llvm.hexagon.V6.vmpyowh",
+  "llvm.hexagon.V6.vmpyowh.128B",
+  "llvm.hexagon.V6.vmpyowh.64.acc",
+  "llvm.hexagon.V6.vmpyowh.64.acc.128B",
+  "llvm.hexagon.V6.vmpyowh.rnd",
+  "llvm.hexagon.V6.vmpyowh.rnd.128B",
+  "llvm.hexagon.V6.vmpyowh.rnd.sacc",
+  "llvm.hexagon.V6.vmpyowh.rnd.sacc.128B",
+  "llvm.hexagon.V6.vmpyowh.sacc",
+  "llvm.hexagon.V6.vmpyowh.sacc.128B",
+  "llvm.hexagon.V6.vmpyub",
+  "llvm.hexagon.V6.vmpyub.128B",
+  "llvm.hexagon.V6.vmpyub.acc",
+  "llvm.hexagon.V6.vmpyub.acc.128B",
+  "llvm.hexagon.V6.vmpyubv",
+  "llvm.hexagon.V6.vmpyubv.128B",
+  "llvm.hexagon.V6.vmpyubv.acc",
+  "llvm.hexagon.V6.vmpyubv.acc.128B",
+  "llvm.hexagon.V6.vmpyuh",
+  "llvm.hexagon.V6.vmpyuh.128B",
+  "llvm.hexagon.V6.vmpyuh.acc",
+  "llvm.hexagon.V6.vmpyuh.acc.128B",
+  "llvm.hexagon.V6.vmpyuhe",
+  "llvm.hexagon.V6.vmpyuhe.128B",
+  "llvm.hexagon.V6.vmpyuhe.acc",
+  "llvm.hexagon.V6.vmpyuhe.acc.128B",
+  "llvm.hexagon.V6.vmpyuhv",
+  "llvm.hexagon.V6.vmpyuhv.128B",
+  "llvm.hexagon.V6.vmpyuhv.acc",
+  "llvm.hexagon.V6.vmpyuhv.acc.128B",
+  "llvm.hexagon.V6.vmux",
+  "llvm.hexagon.V6.vmux.128B",
+  "llvm.hexagon.V6.vnavgb",
+  "llvm.hexagon.V6.vnavgb.128B",
+  "llvm.hexagon.V6.vnavgh",
+  "llvm.hexagon.V6.vnavgh.128B",
+  "llvm.hexagon.V6.vnavgub",
+  "llvm.hexagon.V6.vnavgub.128B",
+  "llvm.hexagon.V6.vnavgw",
+  "llvm.hexagon.V6.vnavgw.128B",
+  "llvm.hexagon.V6.vnormamth",
+  "llvm.hexagon.V6.vnormamth.128B",
+  "llvm.hexagon.V6.vnormamtw",
+  "llvm.hexagon.V6.vnormamtw.128B",
+  "llvm.hexagon.V6.vnot",
+  "llvm.hexagon.V6.vnot.128B",
+  "llvm.hexagon.V6.vor",
+  "llvm.hexagon.V6.vor.128B",
+  "llvm.hexagon.V6.vpackeb",
+  "llvm.hexagon.V6.vpackeb.128B",
+  "llvm.hexagon.V6.vpackeh",
+  "llvm.hexagon.V6.vpackeh.128B",
+  "llvm.hexagon.V6.vpackhb.sat",
+  "llvm.hexagon.V6.vpackhb.sat.128B",
+  "llvm.hexagon.V6.vpackhub.sat",
+  "llvm.hexagon.V6.vpackhub.sat.128B",
+  "llvm.hexagon.V6.vpackob",
+  "llvm.hexagon.V6.vpackob.128B",
+  "llvm.hexagon.V6.vpackoh",
+  "llvm.hexagon.V6.vpackoh.128B",
+  "llvm.hexagon.V6.vpackwh.sat",
+  "llvm.hexagon.V6.vpackwh.sat.128B",
+  "llvm.hexagon.V6.vpackwuh.sat",
+  "llvm.hexagon.V6.vpackwuh.sat.128B",
+  "llvm.hexagon.V6.vpopcounth",
+  "llvm.hexagon.V6.vpopcounth.128B",
+  "llvm.hexagon.V6.vprefixqb",
+  "llvm.hexagon.V6.vprefixqb.128B",
+  "llvm.hexagon.V6.vprefixqh",
+  "llvm.hexagon.V6.vprefixqh.128B",
+  "llvm.hexagon.V6.vprefixqw",
+  "llvm.hexagon.V6.vprefixqw.128B",
+  "llvm.hexagon.V6.vrdelta",
+  "llvm.hexagon.V6.vrdelta.128B",
+  "llvm.hexagon.V6.vrmpybub.rtt",
+  "llvm.hexagon.V6.vrmpybub.rtt.128B",
+  "llvm.hexagon.V6.vrmpybub.rtt.acc",
+  "llvm.hexagon.V6.vrmpybub.rtt.acc.128B",
+  "llvm.hexagon.V6.vrmpybus",
+  "llvm.hexagon.V6.vrmpybus.128B",
+  "llvm.hexagon.V6.vrmpybus.acc",
+  "llvm.hexagon.V6.vrmpybus.acc.128B",
+  "llvm.hexagon.V6.vrmpybusi",
+  "llvm.hexagon.V6.vrmpybusi.128B",
+  "llvm.hexagon.V6.vrmpybusi.acc",
+  "llvm.hexagon.V6.vrmpybusi.acc.128B",
+  "llvm.hexagon.V6.vrmpybusv",
+  "llvm.hexagon.V6.vrmpybusv.128B",
+  "llvm.hexagon.V6.vrmpybusv.acc",
+  "llvm.hexagon.V6.vrmpybusv.acc.128B",
+  "llvm.hexagon.V6.vrmpybv",
+  "llvm.hexagon.V6.vrmpybv.128B",
+  "llvm.hexagon.V6.vrmpybv.acc",
+  "llvm.hexagon.V6.vrmpybv.acc.128B",
+  "llvm.hexagon.V6.vrmpyub",
+  "llvm.hexagon.V6.vrmpyub.128B",
+  "llvm.hexagon.V6.vrmpyub.acc",
+  "llvm.hexagon.V6.vrmpyub.acc.128B",
+  "llvm.hexagon.V6.vrmpyub.rtt",
+  "llvm.hexagon.V6.vrmpyub.rtt.128B",
+  "llvm.hexagon.V6.vrmpyub.rtt.acc",
+  "llvm.hexagon.V6.vrmpyub.rtt.acc.128B",
+  "llvm.hexagon.V6.vrmpyubi",
+  "llvm.hexagon.V6.vrmpyubi.128B",
+  "llvm.hexagon.V6.vrmpyubi.acc",
+  "llvm.hexagon.V6.vrmpyubi.acc.128B",
+  "llvm.hexagon.V6.vrmpyubv",
+  "llvm.hexagon.V6.vrmpyubv.128B",
+  "llvm.hexagon.V6.vrmpyubv.acc",
+  "llvm.hexagon.V6.vrmpyubv.acc.128B",
+  "llvm.hexagon.V6.vror",
+  "llvm.hexagon.V6.vror.128B",
+  "llvm.hexagon.V6.vroundhb",
+  "llvm.hexagon.V6.vroundhb.128B",
+  "llvm.hexagon.V6.vroundhub",
+  "llvm.hexagon.V6.vroundhub.128B",
+  "llvm.hexagon.V6.vrounduhub",
+  "llvm.hexagon.V6.vrounduhub.128B",
+  "llvm.hexagon.V6.vrounduwuh",
+  "llvm.hexagon.V6.vrounduwuh.128B",
+  "llvm.hexagon.V6.vroundwh",
+  "llvm.hexagon.V6.vroundwh.128B",
+  "llvm.hexagon.V6.vroundwuh",
+  "llvm.hexagon.V6.vroundwuh.128B",
+  "llvm.hexagon.V6.vrsadubi",
+  "llvm.hexagon.V6.vrsadubi.128B",
+  "llvm.hexagon.V6.vrsadubi.acc",
+  "llvm.hexagon.V6.vrsadubi.acc.128B",
+  "llvm.hexagon.V6.vsathub",
+  "llvm.hexagon.V6.vsathub.128B",
+  "llvm.hexagon.V6.vsatuwuh",
+  "llvm.hexagon.V6.vsatuwuh.128B",
+  "llvm.hexagon.V6.vsatwh",
+  "llvm.hexagon.V6.vsatwh.128B",
+  "llvm.hexagon.V6.vsb",
+  "llvm.hexagon.V6.vsb.128B",
+  "llvm.hexagon.V6.vscattermh",
+  "llvm.hexagon.V6.vscattermh.128B",
+  "llvm.hexagon.V6.vscattermh.add",
+  "llvm.hexagon.V6.vscattermh.add.128B",
+  "llvm.hexagon.V6.vscattermhq",
+  "llvm.hexagon.V6.vscattermhq.128B",
+  "llvm.hexagon.V6.vscattermhw",
+  "llvm.hexagon.V6.vscattermhw.128B",
+  "llvm.hexagon.V6.vscattermhw.add",
+  "llvm.hexagon.V6.vscattermhw.add.128B",
+  "llvm.hexagon.V6.vscattermhwq",
+  "llvm.hexagon.V6.vscattermhwq.128B",
+  "llvm.hexagon.V6.vscattermw",
+  "llvm.hexagon.V6.vscattermw.128B",
+  "llvm.hexagon.V6.vscattermw.add",
+  "llvm.hexagon.V6.vscattermw.add.128B",
+  "llvm.hexagon.V6.vscattermwq",
+  "llvm.hexagon.V6.vscattermwq.128B",
+  "llvm.hexagon.V6.vsh",
+  "llvm.hexagon.V6.vsh.128B",
+  "llvm.hexagon.V6.vshufeh",
+  "llvm.hexagon.V6.vshufeh.128B",
+  "llvm.hexagon.V6.vshuffb",
+  "llvm.hexagon.V6.vshuffb.128B",
+  "llvm.hexagon.V6.vshuffeb",
+  "llvm.hexagon.V6.vshuffeb.128B",
+  "llvm.hexagon.V6.vshuffh",
+  "llvm.hexagon.V6.vshuffh.128B",
+  "llvm.hexagon.V6.vshuffob",
+  "llvm.hexagon.V6.vshuffob.128B",
+  "llvm.hexagon.V6.vshuffvdd",
+  "llvm.hexagon.V6.vshuffvdd.128B",
+  "llvm.hexagon.V6.vshufoeb",
+  "llvm.hexagon.V6.vshufoeb.128B",
+  "llvm.hexagon.V6.vshufoeh",
+  "llvm.hexagon.V6.vshufoeh.128B",
+  "llvm.hexagon.V6.vshufoh",
+  "llvm.hexagon.V6.vshufoh.128B",
+  "llvm.hexagon.V6.vsubb",
+  "llvm.hexagon.V6.vsubb.128B",
+  "llvm.hexagon.V6.vsubb.dv",
+  "llvm.hexagon.V6.vsubb.dv.128B",
+  "llvm.hexagon.V6.vsubbnq",
+  "llvm.hexagon.V6.vsubbnq.128B",
+  "llvm.hexagon.V6.vsubbq",
+  "llvm.hexagon.V6.vsubbq.128B",
+  "llvm.hexagon.V6.vsubbsat",
+  "llvm.hexagon.V6.vsubbsat.128B",
+  "llvm.hexagon.V6.vsubbsat.dv",
+  "llvm.hexagon.V6.vsubbsat.dv.128B",
+  "llvm.hexagon.V6.vsubcarry",
+  "llvm.hexagon.V6.vsubcarry.128B",
+  "llvm.hexagon.V6.vsubh",
+  "llvm.hexagon.V6.vsubh.128B",
+  "llvm.hexagon.V6.vsubh.dv",
+  "llvm.hexagon.V6.vsubh.dv.128B",
+  "llvm.hexagon.V6.vsubhnq",
+  "llvm.hexagon.V6.vsubhnq.128B",
+  "llvm.hexagon.V6.vsubhq",
+  "llvm.hexagon.V6.vsubhq.128B",
+  "llvm.hexagon.V6.vsubhsat",
+  "llvm.hexagon.V6.vsubhsat.128B",
+  "llvm.hexagon.V6.vsubhsat.dv",
+  "llvm.hexagon.V6.vsubhsat.dv.128B",
+  "llvm.hexagon.V6.vsubhw",
+  "llvm.hexagon.V6.vsubhw.128B",
+  "llvm.hexagon.V6.vsububh",
+  "llvm.hexagon.V6.vsububh.128B",
+  "llvm.hexagon.V6.vsububsat",
+  "llvm.hexagon.V6.vsububsat.128B",
+  "llvm.hexagon.V6.vsububsat.dv",
+  "llvm.hexagon.V6.vsububsat.dv.128B",
+  "llvm.hexagon.V6.vsubububb.sat",
+  "llvm.hexagon.V6.vsubububb.sat.128B",
+  "llvm.hexagon.V6.vsubuhsat",
+  "llvm.hexagon.V6.vsubuhsat.128B",
+  "llvm.hexagon.V6.vsubuhsat.dv",
+  "llvm.hexagon.V6.vsubuhsat.dv.128B",
+  "llvm.hexagon.V6.vsubuhw",
+  "llvm.hexagon.V6.vsubuhw.128B",
+  "llvm.hexagon.V6.vsubuwsat",
+  "llvm.hexagon.V6.vsubuwsat.128B",
+  "llvm.hexagon.V6.vsubuwsat.dv",
+  "llvm.hexagon.V6.vsubuwsat.dv.128B",
+  "llvm.hexagon.V6.vsubw",
+  "llvm.hexagon.V6.vsubw.128B",
+  "llvm.hexagon.V6.vsubw.dv",
+  "llvm.hexagon.V6.vsubw.dv.128B",
+  "llvm.hexagon.V6.vsubwnq",
+  "llvm.hexagon.V6.vsubwnq.128B",
+  "llvm.hexagon.V6.vsubwq",
+  "llvm.hexagon.V6.vsubwq.128B",
+  "llvm.hexagon.V6.vsubwsat",
+  "llvm.hexagon.V6.vsubwsat.128B",
+  "llvm.hexagon.V6.vsubwsat.dv",
+  "llvm.hexagon.V6.vsubwsat.dv.128B",
+  "llvm.hexagon.V6.vswap",
+  "llvm.hexagon.V6.vswap.128B",
+  "llvm.hexagon.V6.vtmpyb",
+  "llvm.hexagon.V6.vtmpyb.128B",
+  "llvm.hexagon.V6.vtmpyb.acc",
+  "llvm.hexagon.V6.vtmpyb.acc.128B",
+  "llvm.hexagon.V6.vtmpybus",
+  "llvm.hexagon.V6.vtmpybus.128B",
+  "llvm.hexagon.V6.vtmpybus.acc",
+  "llvm.hexagon.V6.vtmpybus.acc.128B",
+  "llvm.hexagon.V6.vtmpyhb",
+  "llvm.hexagon.V6.vtmpyhb.128B",
+  "llvm.hexagon.V6.vtmpyhb.acc",
+  "llvm.hexagon.V6.vtmpyhb.acc.128B",
+  "llvm.hexagon.V6.vunpackb",
+  "llvm.hexagon.V6.vunpackb.128B",
+  "llvm.hexagon.V6.vunpackh",
+  "llvm.hexagon.V6.vunpackh.128B",
+  "llvm.hexagon.V6.vunpackob",
+  "llvm.hexagon.V6.vunpackob.128B",
+  "llvm.hexagon.V6.vunpackoh",
+  "llvm.hexagon.V6.vunpackoh.128B",
+  "llvm.hexagon.V6.vunpackub",
+  "llvm.hexagon.V6.vunpackub.128B",
+  "llvm.hexagon.V6.vunpackuh",
+  "llvm.hexagon.V6.vunpackuh.128B",
+  "llvm.hexagon.V6.vxor",
+  "llvm.hexagon.V6.vxor.128B",
+  "llvm.hexagon.V6.vzb",
+  "llvm.hexagon.V6.vzb.128B",
+  "llvm.hexagon.V6.vzh",
+  "llvm.hexagon.V6.vzh.128B",
+  "llvm.hexagon.Y2.dccleana",
+  "llvm.hexagon.Y2.dccleaninva",
+  "llvm.hexagon.Y2.dcinva",
+  "llvm.hexagon.Y2.dczeroa",
+  "llvm.hexagon.Y4.l2fetch",
+  "llvm.hexagon.Y5.l2fetch",
+  "llvm.hexagon.circ.ldb",
+  "llvm.hexagon.circ.ldd",
+  "llvm.hexagon.circ.ldh",
+  "llvm.hexagon.circ.ldub",
+  "llvm.hexagon.circ.lduh",
+  "llvm.hexagon.circ.ldw",
+  "llvm.hexagon.circ.stb",
+  "llvm.hexagon.circ.std",
+  "llvm.hexagon.circ.sth",
+  "llvm.hexagon.circ.sthhi",
+  "llvm.hexagon.circ.stw",
+  "llvm.hexagon.mm256i.vaddw",
+  "llvm.hexagon.prefetch",
+  "llvm.mips.absq.s.ph",
+  "llvm.mips.absq.s.qb",
+  "llvm.mips.absq.s.w",
+  "llvm.mips.add.a.b",
+  "llvm.mips.add.a.d",
+  "llvm.mips.add.a.h",
+  "llvm.mips.add.a.w",
+  "llvm.mips.addq.ph",
+  "llvm.mips.addq.s.ph",
+  "llvm.mips.addq.s.w",
+  "llvm.mips.addqh.ph",
+  "llvm.mips.addqh.r.ph",
+  "llvm.mips.addqh.r.w",
+  "llvm.mips.addqh.w",
+  "llvm.mips.adds.a.b",
+  "llvm.mips.adds.a.d",
+  "llvm.mips.adds.a.h",
+  "llvm.mips.adds.a.w",
+  "llvm.mips.adds.s.b",
+  "llvm.mips.adds.s.d",
+  "llvm.mips.adds.s.h",
+  "llvm.mips.adds.s.w",
+  "llvm.mips.adds.u.b",
+  "llvm.mips.adds.u.d",
+  "llvm.mips.adds.u.h",
+  "llvm.mips.adds.u.w",
+  "llvm.mips.addsc",
+  "llvm.mips.addu.ph",
+  "llvm.mips.addu.qb",
+  "llvm.mips.addu.s.ph",
+  "llvm.mips.addu.s.qb",
+  "llvm.mips.adduh.qb",
+  "llvm.mips.adduh.r.qb",
+  "llvm.mips.addv.b",
+  "llvm.mips.addv.d",
+  "llvm.mips.addv.h",
+  "llvm.mips.addv.w",
+  "llvm.mips.addvi.b",
+  "llvm.mips.addvi.d",
+  "llvm.mips.addvi.h",
+  "llvm.mips.addvi.w",
+  "llvm.mips.addwc",
+  "llvm.mips.and.v",
+  "llvm.mips.andi.b",
+  "llvm.mips.append",
+  "llvm.mips.asub.s.b",
+  "llvm.mips.asub.s.d",
+  "llvm.mips.asub.s.h",
+  "llvm.mips.asub.s.w",
+  "llvm.mips.asub.u.b",
+  "llvm.mips.asub.u.d",
+  "llvm.mips.asub.u.h",
+  "llvm.mips.asub.u.w",
+  "llvm.mips.ave.s.b",
+  "llvm.mips.ave.s.d",
+  "llvm.mips.ave.s.h",
+  "llvm.mips.ave.s.w",
+  "llvm.mips.ave.u.b",
+  "llvm.mips.ave.u.d",
+  "llvm.mips.ave.u.h",
+  "llvm.mips.ave.u.w",
+  "llvm.mips.aver.s.b",
+  "llvm.mips.aver.s.d",
+  "llvm.mips.aver.s.h",
+  "llvm.mips.aver.s.w",
+  "llvm.mips.aver.u.b",
+  "llvm.mips.aver.u.d",
+  "llvm.mips.aver.u.h",
+  "llvm.mips.aver.u.w",
+  "llvm.mips.balign",
+  "llvm.mips.bclr.b",
+  "llvm.mips.bclr.d",
+  "llvm.mips.bclr.h",
+  "llvm.mips.bclr.w",
+  "llvm.mips.bclri.b",
+  "llvm.mips.bclri.d",
+  "llvm.mips.bclri.h",
+  "llvm.mips.bclri.w",
+  "llvm.mips.binsl.b",
+  "llvm.mips.binsl.d",
+  "llvm.mips.binsl.h",
+  "llvm.mips.binsl.w",
+  "llvm.mips.binsli.b",
+  "llvm.mips.binsli.d",
+  "llvm.mips.binsli.h",
+  "llvm.mips.binsli.w",
+  "llvm.mips.binsr.b",
+  "llvm.mips.binsr.d",
+  "llvm.mips.binsr.h",
+  "llvm.mips.binsr.w",
+  "llvm.mips.binsri.b",
+  "llvm.mips.binsri.d",
+  "llvm.mips.binsri.h",
+  "llvm.mips.binsri.w",
+  "llvm.mips.bitrev",
+  "llvm.mips.bmnz.v",
+  "llvm.mips.bmnzi.b",
+  "llvm.mips.bmz.v",
+  "llvm.mips.bmzi.b",
+  "llvm.mips.bneg.b",
+  "llvm.mips.bneg.d",
+  "llvm.mips.bneg.h",
+  "llvm.mips.bneg.w",
+  "llvm.mips.bnegi.b",
+  "llvm.mips.bnegi.d",
+  "llvm.mips.bnegi.h",
+  "llvm.mips.bnegi.w",
+  "llvm.mips.bnz.b",
+  "llvm.mips.bnz.d",
+  "llvm.mips.bnz.h",
+  "llvm.mips.bnz.v",
+  "llvm.mips.bnz.w",
+  "llvm.mips.bposge32",
+  "llvm.mips.bsel.v",
+  "llvm.mips.bseli.b",
+  "llvm.mips.bset.b",
+  "llvm.mips.bset.d",
+  "llvm.mips.bset.h",
+  "llvm.mips.bset.w",
+  "llvm.mips.bseti.b",
+  "llvm.mips.bseti.d",
+  "llvm.mips.bseti.h",
+  "llvm.mips.bseti.w",
+  "llvm.mips.bz.b",
+  "llvm.mips.bz.d",
+  "llvm.mips.bz.h",
+  "llvm.mips.bz.v",
+  "llvm.mips.bz.w",
+  "llvm.mips.ceq.b",
+  "llvm.mips.ceq.d",
+  "llvm.mips.ceq.h",
+  "llvm.mips.ceq.w",
+  "llvm.mips.ceqi.b",
+  "llvm.mips.ceqi.d",
+  "llvm.mips.ceqi.h",
+  "llvm.mips.ceqi.w",
+  "llvm.mips.cfcmsa",
+  "llvm.mips.cle.s.b",
+  "llvm.mips.cle.s.d",
+  "llvm.mips.cle.s.h",
+  "llvm.mips.cle.s.w",
+  "llvm.mips.cle.u.b",
+  "llvm.mips.cle.u.d",
+  "llvm.mips.cle.u.h",
+  "llvm.mips.cle.u.w",
+  "llvm.mips.clei.s.b",
+  "llvm.mips.clei.s.d",
+  "llvm.mips.clei.s.h",
+  "llvm.mips.clei.s.w",
+  "llvm.mips.clei.u.b",
+  "llvm.mips.clei.u.d",
+  "llvm.mips.clei.u.h",
+  "llvm.mips.clei.u.w",
+  "llvm.mips.clt.s.b",
+  "llvm.mips.clt.s.d",
+  "llvm.mips.clt.s.h",
+  "llvm.mips.clt.s.w",
+  "llvm.mips.clt.u.b",
+  "llvm.mips.clt.u.d",
+  "llvm.mips.clt.u.h",
+  "llvm.mips.clt.u.w",
+  "llvm.mips.clti.s.b",
+  "llvm.mips.clti.s.d",
+  "llvm.mips.clti.s.h",
+  "llvm.mips.clti.s.w",
+  "llvm.mips.clti.u.b",
+  "llvm.mips.clti.u.d",
+  "llvm.mips.clti.u.h",
+  "llvm.mips.clti.u.w",
+  "llvm.mips.cmp.eq.ph",
+  "llvm.mips.cmp.le.ph",
+  "llvm.mips.cmp.lt.ph",
+  "llvm.mips.cmpgdu.eq.qb",
+  "llvm.mips.cmpgdu.le.qb",
+  "llvm.mips.cmpgdu.lt.qb",
+  "llvm.mips.cmpgu.eq.qb",
+  "llvm.mips.cmpgu.le.qb",
+  "llvm.mips.cmpgu.lt.qb",
+  "llvm.mips.cmpu.eq.qb",
+  "llvm.mips.cmpu.le.qb",
+  "llvm.mips.cmpu.lt.qb",
+  "llvm.mips.copy.s.b",
+  "llvm.mips.copy.s.d",
+  "llvm.mips.copy.s.h",
+  "llvm.mips.copy.s.w",
+  "llvm.mips.copy.u.b",
+  "llvm.mips.copy.u.d",
+  "llvm.mips.copy.u.h",
+  "llvm.mips.copy.u.w",
+  "llvm.mips.ctcmsa",
+  "llvm.mips.div.s.b",
+  "llvm.mips.div.s.d",
+  "llvm.mips.div.s.h",
+  "llvm.mips.div.s.w",
+  "llvm.mips.div.u.b",
+  "llvm.mips.div.u.d",
+  "llvm.mips.div.u.h",
+  "llvm.mips.div.u.w",
+  "llvm.mips.dlsa",
+  "llvm.mips.dotp.s.d",
+  "llvm.mips.dotp.s.h",
+  "llvm.mips.dotp.s.w",
+  "llvm.mips.dotp.u.d",
+  "llvm.mips.dotp.u.h",
+  "llvm.mips.dotp.u.w",
+  "llvm.mips.dpa.w.ph",
+  "llvm.mips.dpadd.s.d",
+  "llvm.mips.dpadd.s.h",
+  "llvm.mips.dpadd.s.w",
+  "llvm.mips.dpadd.u.d",
+  "llvm.mips.dpadd.u.h",
+  "llvm.mips.dpadd.u.w",
+  "llvm.mips.dpaq.s.w.ph",
+  "llvm.mips.dpaq.sa.l.w",
+  "llvm.mips.dpaqx.s.w.ph",
+  "llvm.mips.dpaqx.sa.w.ph",
+  "llvm.mips.dpau.h.qbl",
+  "llvm.mips.dpau.h.qbr",
+  "llvm.mips.dpax.w.ph",
+  "llvm.mips.dps.w.ph",
+  "llvm.mips.dpsq.s.w.ph",
+  "llvm.mips.dpsq.sa.l.w",
+  "llvm.mips.dpsqx.s.w.ph",
+  "llvm.mips.dpsqx.sa.w.ph",
+  "llvm.mips.dpsu.h.qbl",
+  "llvm.mips.dpsu.h.qbr",
+  "llvm.mips.dpsub.s.d",
+  "llvm.mips.dpsub.s.h",
+  "llvm.mips.dpsub.s.w",
+  "llvm.mips.dpsub.u.d",
+  "llvm.mips.dpsub.u.h",
+  "llvm.mips.dpsub.u.w",
+  "llvm.mips.dpsx.w.ph",
+  "llvm.mips.extp",
+  "llvm.mips.extpdp",
+  "llvm.mips.extr.r.w",
+  "llvm.mips.extr.rs.w",
+  "llvm.mips.extr.s.h",
+  "llvm.mips.extr.w",
+  "llvm.mips.fadd.d",
+  "llvm.mips.fadd.w",
+  "llvm.mips.fcaf.d",
+  "llvm.mips.fcaf.w",
+  "llvm.mips.fceq.d",
+  "llvm.mips.fceq.w",
+  "llvm.mips.fclass.d",
+  "llvm.mips.fclass.w",
+  "llvm.mips.fcle.d",
+  "llvm.mips.fcle.w",
+  "llvm.mips.fclt.d",
+  "llvm.mips.fclt.w",
+  "llvm.mips.fcne.d",
+  "llvm.mips.fcne.w",
+  "llvm.mips.fcor.d",
+  "llvm.mips.fcor.w",
+  "llvm.mips.fcueq.d",
+  "llvm.mips.fcueq.w",
+  "llvm.mips.fcule.d",
+  "llvm.mips.fcule.w",
+  "llvm.mips.fcult.d",
+  "llvm.mips.fcult.w",
+  "llvm.mips.fcun.d",
+  "llvm.mips.fcun.w",
+  "llvm.mips.fcune.d",
+  "llvm.mips.fcune.w",
+  "llvm.mips.fdiv.d",
+  "llvm.mips.fdiv.w",
+  "llvm.mips.fexdo.h",
+  "llvm.mips.fexdo.w",
+  "llvm.mips.fexp2.d",
+  "llvm.mips.fexp2.w",
+  "llvm.mips.fexupl.d",
+  "llvm.mips.fexupl.w",
+  "llvm.mips.fexupr.d",
+  "llvm.mips.fexupr.w",
+  "llvm.mips.ffint.s.d",
+  "llvm.mips.ffint.s.w",
+  "llvm.mips.ffint.u.d",
+  "llvm.mips.ffint.u.w",
+  "llvm.mips.ffql.d",
+  "llvm.mips.ffql.w",
+  "llvm.mips.ffqr.d",
+  "llvm.mips.ffqr.w",
+  "llvm.mips.fill.b",
+  "llvm.mips.fill.d",
+  "llvm.mips.fill.h",
+  "llvm.mips.fill.w",
+  "llvm.mips.flog2.d",
+  "llvm.mips.flog2.w",
+  "llvm.mips.fmadd.d",
+  "llvm.mips.fmadd.w",
+  "llvm.mips.fmax.a.d",
+  "llvm.mips.fmax.a.w",
+  "llvm.mips.fmax.d",
+  "llvm.mips.fmax.w",
+  "llvm.mips.fmin.a.d",
+  "llvm.mips.fmin.a.w",
+  "llvm.mips.fmin.d",
+  "llvm.mips.fmin.w",
+  "llvm.mips.fmsub.d",
+  "llvm.mips.fmsub.w",
+  "llvm.mips.fmul.d",
+  "llvm.mips.fmul.w",
+  "llvm.mips.frcp.d",
+  "llvm.mips.frcp.w",
+  "llvm.mips.frint.d",
+  "llvm.mips.frint.w",
+  "llvm.mips.frsqrt.d",
+  "llvm.mips.frsqrt.w",
+  "llvm.mips.fsaf.d",
+  "llvm.mips.fsaf.w",
+  "llvm.mips.fseq.d",
+  "llvm.mips.fseq.w",
+  "llvm.mips.fsle.d",
+  "llvm.mips.fsle.w",
+  "llvm.mips.fslt.d",
+  "llvm.mips.fslt.w",
+  "llvm.mips.fsne.d",
+  "llvm.mips.fsne.w",
+  "llvm.mips.fsor.d",
+  "llvm.mips.fsor.w",
+  "llvm.mips.fsqrt.d",
+  "llvm.mips.fsqrt.w",
+  "llvm.mips.fsub.d",
+  "llvm.mips.fsub.w",
+  "llvm.mips.fsueq.d",
+  "llvm.mips.fsueq.w",
+  "llvm.mips.fsule.d",
+  "llvm.mips.fsule.w",
+  "llvm.mips.fsult.d",
+  "llvm.mips.fsult.w",
+  "llvm.mips.fsun.d",
+  "llvm.mips.fsun.w",
+  "llvm.mips.fsune.d",
+  "llvm.mips.fsune.w",
+  "llvm.mips.ftint.s.d",
+  "llvm.mips.ftint.s.w",
+  "llvm.mips.ftint.u.d",
+  "llvm.mips.ftint.u.w",
+  "llvm.mips.ftq.h",
+  "llvm.mips.ftq.w",
+  "llvm.mips.ftrunc.s.d",
+  "llvm.mips.ftrunc.s.w",
+  "llvm.mips.ftrunc.u.d",
+  "llvm.mips.ftrunc.u.w",
+  "llvm.mips.hadd.s.d",
+  "llvm.mips.hadd.s.h",
+  "llvm.mips.hadd.s.w",
+  "llvm.mips.hadd.u.d",
+  "llvm.mips.hadd.u.h",
+  "llvm.mips.hadd.u.w",
+  "llvm.mips.hsub.s.d",
+  "llvm.mips.hsub.s.h",
+  "llvm.mips.hsub.s.w",
+  "llvm.mips.hsub.u.d",
+  "llvm.mips.hsub.u.h",
+  "llvm.mips.hsub.u.w",
+  "llvm.mips.ilvev.b",
+  "llvm.mips.ilvev.d",
+  "llvm.mips.ilvev.h",
+  "llvm.mips.ilvev.w",
+  "llvm.mips.ilvl.b",
+  "llvm.mips.ilvl.d",
+  "llvm.mips.ilvl.h",
+  "llvm.mips.ilvl.w",
+  "llvm.mips.ilvod.b",
+  "llvm.mips.ilvod.d",
+  "llvm.mips.ilvod.h",
+  "llvm.mips.ilvod.w",
+  "llvm.mips.ilvr.b",
+  "llvm.mips.ilvr.d",
+  "llvm.mips.ilvr.h",
+  "llvm.mips.ilvr.w",
+  "llvm.mips.insert.b",
+  "llvm.mips.insert.d",
+  "llvm.mips.insert.h",
+  "llvm.mips.insert.w",
+  "llvm.mips.insv",
+  "llvm.mips.insve.b",
+  "llvm.mips.insve.d",
+  "llvm.mips.insve.h",
+  "llvm.mips.insve.w",
+  "llvm.mips.lbux",
+  "llvm.mips.ld.b",
+  "llvm.mips.ld.d",
+  "llvm.mips.ld.h",
+  "llvm.mips.ld.w",
+  "llvm.mips.ldi.b",
+  "llvm.mips.ldi.d",
+  "llvm.mips.ldi.h",
+  "llvm.mips.ldi.w",
+  "llvm.mips.lhx",
+  "llvm.mips.lsa",
+  "llvm.mips.lwx",
+  "llvm.mips.madd",
+  "llvm.mips.madd.q.h",
+  "llvm.mips.madd.q.w",
+  "llvm.mips.maddr.q.h",
+  "llvm.mips.maddr.q.w",
+  "llvm.mips.maddu",
+  "llvm.mips.maddv.b",
+  "llvm.mips.maddv.d",
+  "llvm.mips.maddv.h",
+  "llvm.mips.maddv.w",
+  "llvm.mips.maq.s.w.phl",
+  "llvm.mips.maq.s.w.phr",
+  "llvm.mips.maq.sa.w.phl",
+  "llvm.mips.maq.sa.w.phr",
+  "llvm.mips.max.a.b",
+  "llvm.mips.max.a.d",
+  "llvm.mips.max.a.h",
+  "llvm.mips.max.a.w",
+  "llvm.mips.max.s.b",
+  "llvm.mips.max.s.d",
+  "llvm.mips.max.s.h",
+  "llvm.mips.max.s.w",
+  "llvm.mips.max.u.b",
+  "llvm.mips.max.u.d",
+  "llvm.mips.max.u.h",
+  "llvm.mips.max.u.w",
+  "llvm.mips.maxi.s.b",
+  "llvm.mips.maxi.s.d",
+  "llvm.mips.maxi.s.h",
+  "llvm.mips.maxi.s.w",
+  "llvm.mips.maxi.u.b",
+  "llvm.mips.maxi.u.d",
+  "llvm.mips.maxi.u.h",
+  "llvm.mips.maxi.u.w",
+  "llvm.mips.min.a.b",
+  "llvm.mips.min.a.d",
+  "llvm.mips.min.a.h",
+  "llvm.mips.min.a.w",
+  "llvm.mips.min.s.b",
+  "llvm.mips.min.s.d",
+  "llvm.mips.min.s.h",
+  "llvm.mips.min.s.w",
+  "llvm.mips.min.u.b",
+  "llvm.mips.min.u.d",
+  "llvm.mips.min.u.h",
+  "llvm.mips.min.u.w",
+  "llvm.mips.mini.s.b",
+  "llvm.mips.mini.s.d",
+  "llvm.mips.mini.s.h",
+  "llvm.mips.mini.s.w",
+  "llvm.mips.mini.u.b",
+  "llvm.mips.mini.u.d",
+  "llvm.mips.mini.u.h",
+  "llvm.mips.mini.u.w",
+  "llvm.mips.mod.s.b",
+  "llvm.mips.mod.s.d",
+  "llvm.mips.mod.s.h",
+  "llvm.mips.mod.s.w",
+  "llvm.mips.mod.u.b",
+  "llvm.mips.mod.u.d",
+  "llvm.mips.mod.u.h",
+  "llvm.mips.mod.u.w",
+  "llvm.mips.modsub",
+  "llvm.mips.move.v",
+  "llvm.mips.msub",
+  "llvm.mips.msub.q.h",
+  "llvm.mips.msub.q.w",
+  "llvm.mips.msubr.q.h",
+  "llvm.mips.msubr.q.w",
+  "llvm.mips.msubu",
+  "llvm.mips.msubv.b",
+  "llvm.mips.msubv.d",
+  "llvm.mips.msubv.h",
+  "llvm.mips.msubv.w",
+  "llvm.mips.mthlip",
+  "llvm.mips.mul.ph",
+  "llvm.mips.mul.q.h",
+  "llvm.mips.mul.q.w",
+  "llvm.mips.mul.s.ph",
+  "llvm.mips.muleq.s.w.phl",
+  "llvm.mips.muleq.s.w.phr",
+  "llvm.mips.muleu.s.ph.qbl",
+  "llvm.mips.muleu.s.ph.qbr",
+  "llvm.mips.mulq.rs.ph",
+  "llvm.mips.mulq.rs.w",
+  "llvm.mips.mulq.s.ph",
+  "llvm.mips.mulq.s.w",
+  "llvm.mips.mulr.q.h",
+  "llvm.mips.mulr.q.w",
+  "llvm.mips.mulsa.w.ph",
+  "llvm.mips.mulsaq.s.w.ph",
+  "llvm.mips.mult",
+  "llvm.mips.multu",
+  "llvm.mips.mulv.b",
+  "llvm.mips.mulv.d",
+  "llvm.mips.mulv.h",
+  "llvm.mips.mulv.w",
+  "llvm.mips.nloc.b",
+  "llvm.mips.nloc.d",
+  "llvm.mips.nloc.h",
+  "llvm.mips.nloc.w",
+  "llvm.mips.nlzc.b",
+  "llvm.mips.nlzc.d",
+  "llvm.mips.nlzc.h",
+  "llvm.mips.nlzc.w",
+  "llvm.mips.nor.v",
+  "llvm.mips.nori.b",
+  "llvm.mips.or.v",
+  "llvm.mips.ori.b",
+  "llvm.mips.packrl.ph",
+  "llvm.mips.pckev.b",
+  "llvm.mips.pckev.d",
+  "llvm.mips.pckev.h",
+  "llvm.mips.pckev.w",
+  "llvm.mips.pckod.b",
+  "llvm.mips.pckod.d",
+  "llvm.mips.pckod.h",
+  "llvm.mips.pckod.w",
+  "llvm.mips.pcnt.b",
+  "llvm.mips.pcnt.d",
+  "llvm.mips.pcnt.h",
+  "llvm.mips.pcnt.w",
+  "llvm.mips.pick.ph",
+  "llvm.mips.pick.qb",
+  "llvm.mips.preceq.w.phl",
+  "llvm.mips.preceq.w.phr",
+  "llvm.mips.precequ.ph.qbl",
+  "llvm.mips.precequ.ph.qbla",
+  "llvm.mips.precequ.ph.qbr",
+  "llvm.mips.precequ.ph.qbra",
+  "llvm.mips.preceu.ph.qbl",
+  "llvm.mips.preceu.ph.qbla",
+  "llvm.mips.preceu.ph.qbr",
+  "llvm.mips.preceu.ph.qbra",
+  "llvm.mips.precr.qb.ph",
+  "llvm.mips.precr.sra.ph.w",
+  "llvm.mips.precr.sra.r.ph.w",
+  "llvm.mips.precrq.ph.w",
+  "llvm.mips.precrq.qb.ph",
+  "llvm.mips.precrq.rs.ph.w",
+  "llvm.mips.precrqu.s.qb.ph",
+  "llvm.mips.prepend",
+  "llvm.mips.raddu.w.qb",
+  "llvm.mips.rddsp",
+  "llvm.mips.repl.ph",
+  "llvm.mips.repl.qb",
+  "llvm.mips.sat.s.b",
+  "llvm.mips.sat.s.d",
+  "llvm.mips.sat.s.h",
+  "llvm.mips.sat.s.w",
+  "llvm.mips.sat.u.b",
+  "llvm.mips.sat.u.d",
+  "llvm.mips.sat.u.h",
+  "llvm.mips.sat.u.w",
+  "llvm.mips.shf.b",
+  "llvm.mips.shf.h",
+  "llvm.mips.shf.w",
+  "llvm.mips.shilo",
+  "llvm.mips.shll.ph",
+  "llvm.mips.shll.qb",
+  "llvm.mips.shll.s.ph",
+  "llvm.mips.shll.s.w",
+  "llvm.mips.shra.ph",
+  "llvm.mips.shra.qb",
+  "llvm.mips.shra.r.ph",
+  "llvm.mips.shra.r.qb",
+  "llvm.mips.shra.r.w",
+  "llvm.mips.shrl.ph",
+  "llvm.mips.shrl.qb",
+  "llvm.mips.sld.b",
+  "llvm.mips.sld.d",
+  "llvm.mips.sld.h",
+  "llvm.mips.sld.w",
+  "llvm.mips.sldi.b",
+  "llvm.mips.sldi.d",
+  "llvm.mips.sldi.h",
+  "llvm.mips.sldi.w",
+  "llvm.mips.sll.b",
+  "llvm.mips.sll.d",
+  "llvm.mips.sll.h",
+  "llvm.mips.sll.w",
+  "llvm.mips.slli.b",
+  "llvm.mips.slli.d",
+  "llvm.mips.slli.h",
+  "llvm.mips.slli.w",
+  "llvm.mips.splat.b",
+  "llvm.mips.splat.d",
+  "llvm.mips.splat.h",
+  "llvm.mips.splat.w",
+  "llvm.mips.splati.b",
+  "llvm.mips.splati.d",
+  "llvm.mips.splati.h",
+  "llvm.mips.splati.w",
+  "llvm.mips.sra.b",
+  "llvm.mips.sra.d",
+  "llvm.mips.sra.h",
+  "llvm.mips.sra.w",
+  "llvm.mips.srai.b",
+  "llvm.mips.srai.d",
+  "llvm.mips.srai.h",
+  "llvm.mips.srai.w",
+  "llvm.mips.srar.b",
+  "llvm.mips.srar.d",
+  "llvm.mips.srar.h",
+  "llvm.mips.srar.w",
+  "llvm.mips.srari.b",
+  "llvm.mips.srari.d",
+  "llvm.mips.srari.h",
+  "llvm.mips.srari.w",
+  "llvm.mips.srl.b",
+  "llvm.mips.srl.d",
+  "llvm.mips.srl.h",
+  "llvm.mips.srl.w",
+  "llvm.mips.srli.b",
+  "llvm.mips.srli.d",
+  "llvm.mips.srli.h",
+  "llvm.mips.srli.w",
+  "llvm.mips.srlr.b",
+  "llvm.mips.srlr.d",
+  "llvm.mips.srlr.h",
+  "llvm.mips.srlr.w",
+  "llvm.mips.srlri.b",
+  "llvm.mips.srlri.d",
+  "llvm.mips.srlri.h",
+  "llvm.mips.srlri.w",
+  "llvm.mips.st.b",
+  "llvm.mips.st.d",
+  "llvm.mips.st.h",
+  "llvm.mips.st.w",
+  "llvm.mips.subq.ph",
+  "llvm.mips.subq.s.ph",
+  "llvm.mips.subq.s.w",
+  "llvm.mips.subqh.ph",
+  "llvm.mips.subqh.r.ph",
+  "llvm.mips.subqh.r.w",
+  "llvm.mips.subqh.w",
+  "llvm.mips.subs.s.b",
+  "llvm.mips.subs.s.d",
+  "llvm.mips.subs.s.h",
+  "llvm.mips.subs.s.w",
+  "llvm.mips.subs.u.b",
+  "llvm.mips.subs.u.d",
+  "llvm.mips.subs.u.h",
+  "llvm.mips.subs.u.w",
+  "llvm.mips.subsus.u.b",
+  "llvm.mips.subsus.u.d",
+  "llvm.mips.subsus.u.h",
+  "llvm.mips.subsus.u.w",
+  "llvm.mips.subsuu.s.b",
+  "llvm.mips.subsuu.s.d",
+  "llvm.mips.subsuu.s.h",
+  "llvm.mips.subsuu.s.w",
+  "llvm.mips.subu.ph",
+  "llvm.mips.subu.qb",
+  "llvm.mips.subu.s.ph",
+  "llvm.mips.subu.s.qb",
+  "llvm.mips.subuh.qb",
+  "llvm.mips.subuh.r.qb",
+  "llvm.mips.subv.b",
+  "llvm.mips.subv.d",
+  "llvm.mips.subv.h",
+  "llvm.mips.subv.w",
+  "llvm.mips.subvi.b",
+  "llvm.mips.subvi.d",
+  "llvm.mips.subvi.h",
+  "llvm.mips.subvi.w",
+  "llvm.mips.vshf.b",
+  "llvm.mips.vshf.d",
+  "llvm.mips.vshf.h",
+  "llvm.mips.vshf.w",
+  "llvm.mips.wrdsp",
+  "llvm.mips.xor.v",
+  "llvm.mips.xori.b",
+  "llvm.nvvm.add.rm.d",
+  "llvm.nvvm.add.rm.f",
+  "llvm.nvvm.add.rm.ftz.f",
+  "llvm.nvvm.add.rn.d",
+  "llvm.nvvm.add.rn.f",
+  "llvm.nvvm.add.rn.ftz.f",
+  "llvm.nvvm.add.rp.d",
+  "llvm.nvvm.add.rp.f",
+  "llvm.nvvm.add.rp.ftz.f",
+  "llvm.nvvm.add.rz.d",
+  "llvm.nvvm.add.rz.f",
+  "llvm.nvvm.add.rz.ftz.f",
+  "llvm.nvvm.atomic.add.gen.f.cta",
+  "llvm.nvvm.atomic.add.gen.f.sys",
+  "llvm.nvvm.atomic.add.gen.i.cta",
+  "llvm.nvvm.atomic.add.gen.i.sys",
+  "llvm.nvvm.atomic.and.gen.i.cta",
+  "llvm.nvvm.atomic.and.gen.i.sys",
+  "llvm.nvvm.atomic.cas.gen.i.cta",
+  "llvm.nvvm.atomic.cas.gen.i.sys",
+  "llvm.nvvm.atomic.dec.gen.i.cta",
+  "llvm.nvvm.atomic.dec.gen.i.sys",
+  "llvm.nvvm.atomic.exch.gen.i.cta",
+  "llvm.nvvm.atomic.exch.gen.i.sys",
+  "llvm.nvvm.atomic.inc.gen.i.cta",
+  "llvm.nvvm.atomic.inc.gen.i.sys",
+  "llvm.nvvm.atomic.load.add.f32",
+  "llvm.nvvm.atomic.load.add.f64",
+  "llvm.nvvm.atomic.load.dec.32",
+  "llvm.nvvm.atomic.load.inc.32",
+  "llvm.nvvm.atomic.max.gen.i.cta",
+  "llvm.nvvm.atomic.max.gen.i.sys",
+  "llvm.nvvm.atomic.min.gen.i.cta",
+  "llvm.nvvm.atomic.min.gen.i.sys",
+  "llvm.nvvm.atomic.or.gen.i.cta",
+  "llvm.nvvm.atomic.or.gen.i.sys",
+  "llvm.nvvm.atomic.xor.gen.i.cta",
+  "llvm.nvvm.atomic.xor.gen.i.sys",
+  "llvm.nvvm.bar.sync",
+  "llvm.nvvm.bar.warp.sync",
+  "llvm.nvvm.barrier",
+  "llvm.nvvm.barrier.n",
+  "llvm.nvvm.barrier.sync",
+  "llvm.nvvm.barrier.sync.cnt",
+  "llvm.nvvm.barrier0",
+  "llvm.nvvm.barrier0.and",
+  "llvm.nvvm.barrier0.or",
+  "llvm.nvvm.barrier0.popc",
+  "llvm.nvvm.bitcast.d2ll",
+  "llvm.nvvm.bitcast.f2i",
+  "llvm.nvvm.bitcast.i2f",
+  "llvm.nvvm.bitcast.ll2d",
+  "llvm.nvvm.ceil.d",
+  "llvm.nvvm.ceil.f",
+  "llvm.nvvm.ceil.ftz.f",
+  "llvm.nvvm.compiler.error",
+  "llvm.nvvm.compiler.warn",
+  "llvm.nvvm.cos.approx.f",
+  "llvm.nvvm.cos.approx.ftz.f",
+  "llvm.nvvm.d2f.rm",
+  "llvm.nvvm.d2f.rm.ftz",
+  "llvm.nvvm.d2f.rn",
+  "llvm.nvvm.d2f.rn.ftz",
+  "llvm.nvvm.d2f.rp",
+  "llvm.nvvm.d2f.rp.ftz",
+  "llvm.nvvm.d2f.rz",
+  "llvm.nvvm.d2f.rz.ftz",
+  "llvm.nvvm.d2i.hi",
+  "llvm.nvvm.d2i.lo",
+  "llvm.nvvm.d2i.rm",
+  "llvm.nvvm.d2i.rn",
+  "llvm.nvvm.d2i.rp",
+  "llvm.nvvm.d2i.rz",
+  "llvm.nvvm.d2ll.rm",
+  "llvm.nvvm.d2ll.rn",
+  "llvm.nvvm.d2ll.rp",
+  "llvm.nvvm.d2ll.rz",
+  "llvm.nvvm.d2ui.rm",
+  "llvm.nvvm.d2ui.rn",
+  "llvm.nvvm.d2ui.rp",
+  "llvm.nvvm.d2ui.rz",
+  "llvm.nvvm.d2ull.rm",
+  "llvm.nvvm.d2ull.rn",
+  "llvm.nvvm.d2ull.rp",
+  "llvm.nvvm.d2ull.rz",
+  "llvm.nvvm.div.approx.f",
+  "llvm.nvvm.div.approx.ftz.f",
+  "llvm.nvvm.div.rm.d",
+  "llvm.nvvm.div.rm.f",
+  "llvm.nvvm.div.rm.ftz.f",
+  "llvm.nvvm.div.rn.d",
+  "llvm.nvvm.div.rn.f",
+  "llvm.nvvm.div.rn.ftz.f",
+  "llvm.nvvm.div.rp.d",
+  "llvm.nvvm.div.rp.f",
+  "llvm.nvvm.div.rp.ftz.f",
+  "llvm.nvvm.div.rz.d",
+  "llvm.nvvm.div.rz.f",
+  "llvm.nvvm.div.rz.ftz.f",
+  "llvm.nvvm.ex2.approx.d",
+  "llvm.nvvm.ex2.approx.f",
+  "llvm.nvvm.ex2.approx.ftz.f",
+  "llvm.nvvm.f2h.rn",
+  "llvm.nvvm.f2h.rn.ftz",
+  "llvm.nvvm.f2i.rm",
+  "llvm.nvvm.f2i.rm.ftz",
+  "llvm.nvvm.f2i.rn",
+  "llvm.nvvm.f2i.rn.ftz",
+  "llvm.nvvm.f2i.rp",
+  "llvm.nvvm.f2i.rp.ftz",
+  "llvm.nvvm.f2i.rz",
+  "llvm.nvvm.f2i.rz.ftz",
+  "llvm.nvvm.f2ll.rm",
+  "llvm.nvvm.f2ll.rm.ftz",
+  "llvm.nvvm.f2ll.rn",
+  "llvm.nvvm.f2ll.rn.ftz",
+  "llvm.nvvm.f2ll.rp",
+  "llvm.nvvm.f2ll.rp.ftz",
+  "llvm.nvvm.f2ll.rz",
+  "llvm.nvvm.f2ll.rz.ftz",
+  "llvm.nvvm.f2ui.rm",
+  "llvm.nvvm.f2ui.rm.ftz",
+  "llvm.nvvm.f2ui.rn",
+  "llvm.nvvm.f2ui.rn.ftz",
+  "llvm.nvvm.f2ui.rp",
+  "llvm.nvvm.f2ui.rp.ftz",
+  "llvm.nvvm.f2ui.rz",
+  "llvm.nvvm.f2ui.rz.ftz",
+  "llvm.nvvm.f2ull.rm",
+  "llvm.nvvm.f2ull.rm.ftz",
+  "llvm.nvvm.f2ull.rn",
+  "llvm.nvvm.f2ull.rn.ftz",
+  "llvm.nvvm.f2ull.rp",
+  "llvm.nvvm.f2ull.rp.ftz",
+  "llvm.nvvm.f2ull.rz",
+  "llvm.nvvm.f2ull.rz.ftz",
+  "llvm.nvvm.fabs.d",
+  "llvm.nvvm.fabs.f",
+  "llvm.nvvm.fabs.ftz.f",
+  "llvm.nvvm.floor.d",
+  "llvm.nvvm.floor.f",
+  "llvm.nvvm.floor.ftz.f",
+  "llvm.nvvm.fma.rm.d",
+  "llvm.nvvm.fma.rm.f",
+  "llvm.nvvm.fma.rm.ftz.f",
+  "llvm.nvvm.fma.rn.d",
+  "llvm.nvvm.fma.rn.f",
+  "llvm.nvvm.fma.rn.ftz.f",
+  "llvm.nvvm.fma.rp.d",
+  "llvm.nvvm.fma.rp.f",
+  "llvm.nvvm.fma.rp.ftz.f",
+  "llvm.nvvm.fma.rz.d",
+  "llvm.nvvm.fma.rz.f",
+  "llvm.nvvm.fma.rz.ftz.f",
+  "llvm.nvvm.fmax.d",
+  "llvm.nvvm.fmax.f",
+  "llvm.nvvm.fmax.ftz.f",
+  "llvm.nvvm.fmin.d",
+  "llvm.nvvm.fmin.f",
+  "llvm.nvvm.fmin.ftz.f",
+  "llvm.nvvm.fns",
+  "llvm.nvvm.i2d.rm",
+  "llvm.nvvm.i2d.rn",
+  "llvm.nvvm.i2d.rp",
+  "llvm.nvvm.i2d.rz",
+  "llvm.nvvm.i2f.rm",
+  "llvm.nvvm.i2f.rn",
+  "llvm.nvvm.i2f.rp",
+  "llvm.nvvm.i2f.rz",
+  "llvm.nvvm.isspacep.const",
+  "llvm.nvvm.isspacep.global",
+  "llvm.nvvm.isspacep.local",
+  "llvm.nvvm.isspacep.shared",
+  "llvm.nvvm.istypep.sampler",
+  "llvm.nvvm.istypep.surface",
+  "llvm.nvvm.istypep.texture",
+  "llvm.nvvm.ldg.global.f",
+  "llvm.nvvm.ldg.global.i",
+  "llvm.nvvm.ldg.global.p",
+  "llvm.nvvm.ldu.global.f",
+  "llvm.nvvm.ldu.global.i",
+  "llvm.nvvm.ldu.global.p",
+  "llvm.nvvm.lg2.approx.d",
+  "llvm.nvvm.lg2.approx.f",
+  "llvm.nvvm.lg2.approx.ftz.f",
+  "llvm.nvvm.ll2d.rm",
+  "llvm.nvvm.ll2d.rn",
+  "llvm.nvvm.ll2d.rp",
+  "llvm.nvvm.ll2d.rz",
+  "llvm.nvvm.ll2f.rm",
+  "llvm.nvvm.ll2f.rn",
+  "llvm.nvvm.ll2f.rp",
+  "llvm.nvvm.ll2f.rz",
+  "llvm.nvvm.lohi.i2d",
+  "llvm.nvvm.match.all.sync.i32p",
+  "llvm.nvvm.match.all.sync.i64p",
+  "llvm.nvvm.match.any.sync.i32",
+  "llvm.nvvm.match.any.sync.i64",
+  "llvm.nvvm.membar.cta",
+  "llvm.nvvm.membar.gl",
+  "llvm.nvvm.membar.sys",
+  "llvm.nvvm.move.double",
+  "llvm.nvvm.move.float",
+  "llvm.nvvm.move.i16",
+  "llvm.nvvm.move.i32",
+  "llvm.nvvm.move.i64",
+  "llvm.nvvm.move.ptr",
+  "llvm.nvvm.mul.rm.d",
+  "llvm.nvvm.mul.rm.f",
+  "llvm.nvvm.mul.rm.ftz.f",
+  "llvm.nvvm.mul.rn.d",
+  "llvm.nvvm.mul.rn.f",
+  "llvm.nvvm.mul.rn.ftz.f",
+  "llvm.nvvm.mul.rp.d",
+  "llvm.nvvm.mul.rp.f",
+  "llvm.nvvm.mul.rp.ftz.f",
+  "llvm.nvvm.mul.rz.d",
+  "llvm.nvvm.mul.rz.f",
+  "llvm.nvvm.mul.rz.ftz.f",
+  "llvm.nvvm.mul24.i",
+  "llvm.nvvm.mul24.ui",
+  "llvm.nvvm.mulhi.i",
+  "llvm.nvvm.mulhi.ll",
+  "llvm.nvvm.mulhi.ui",
+  "llvm.nvvm.mulhi.ull",
+  "llvm.nvvm.prmt",
+  "llvm.nvvm.ptr.constant.to.gen",
+  "llvm.nvvm.ptr.gen.to.constant",
+  "llvm.nvvm.ptr.gen.to.global",
+  "llvm.nvvm.ptr.gen.to.local",
+  "llvm.nvvm.ptr.gen.to.param",
+  "llvm.nvvm.ptr.gen.to.shared",
+  "llvm.nvvm.ptr.global.to.gen",
+  "llvm.nvvm.ptr.local.to.gen",
+  "llvm.nvvm.ptr.shared.to.gen",
+  "llvm.nvvm.rcp.approx.ftz.d",
+  "llvm.nvvm.rcp.rm.d",
+  "llvm.nvvm.rcp.rm.f",
+  "llvm.nvvm.rcp.rm.ftz.f",
+  "llvm.nvvm.rcp.rn.d",
+  "llvm.nvvm.rcp.rn.f",
+  "llvm.nvvm.rcp.rn.ftz.f",
+  "llvm.nvvm.rcp.rp.d",
+  "llvm.nvvm.rcp.rp.f",
+  "llvm.nvvm.rcp.rp.ftz.f",
+  "llvm.nvvm.rcp.rz.d",
+  "llvm.nvvm.rcp.rz.f",
+  "llvm.nvvm.rcp.rz.ftz.f",
+  "llvm.nvvm.read.ptx.sreg.clock",
+  "llvm.nvvm.read.ptx.sreg.clock64",
+  "llvm.nvvm.read.ptx.sreg.ctaid.w",
+  "llvm.nvvm.read.ptx.sreg.ctaid.x",
+  "llvm.nvvm.read.ptx.sreg.ctaid.y",
+  "llvm.nvvm.read.ptx.sreg.ctaid.z",
+  "llvm.nvvm.read.ptx.sreg.envreg0",
+  "llvm.nvvm.read.ptx.sreg.envreg1",
+  "llvm.nvvm.read.ptx.sreg.envreg10",
+  "llvm.nvvm.read.ptx.sreg.envreg11",
+  "llvm.nvvm.read.ptx.sreg.envreg12",
+  "llvm.nvvm.read.ptx.sreg.envreg13",
+  "llvm.nvvm.read.ptx.sreg.envreg14",
+  "llvm.nvvm.read.ptx.sreg.envreg15",
+  "llvm.nvvm.read.ptx.sreg.envreg16",
+  "llvm.nvvm.read.ptx.sreg.envreg17",
+  "llvm.nvvm.read.ptx.sreg.envreg18",
+  "llvm.nvvm.read.ptx.sreg.envreg19",
+  "llvm.nvvm.read.ptx.sreg.envreg2",
+  "llvm.nvvm.read.ptx.sreg.envreg20",
+  "llvm.nvvm.read.ptx.sreg.envreg21",
+  "llvm.nvvm.read.ptx.sreg.envreg22",
+  "llvm.nvvm.read.ptx.sreg.envreg23",
+  "llvm.nvvm.read.ptx.sreg.envreg24",
+  "llvm.nvvm.read.ptx.sreg.envreg25",
+  "llvm.nvvm.read.ptx.sreg.envreg26",
+  "llvm.nvvm.read.ptx.sreg.envreg27",
+  "llvm.nvvm.read.ptx.sreg.envreg28",
+  "llvm.nvvm.read.ptx.sreg.envreg29",
+  "llvm.nvvm.read.ptx.sreg.envreg3",
+  "llvm.nvvm.read.ptx.sreg.envreg30",
+  "llvm.nvvm.read.ptx.sreg.envreg31",
+  "llvm.nvvm.read.ptx.sreg.envreg4",
+  "llvm.nvvm.read.ptx.sreg.envreg5",
+  "llvm.nvvm.read.ptx.sreg.envreg6",
+  "llvm.nvvm.read.ptx.sreg.envreg7",
+  "llvm.nvvm.read.ptx.sreg.envreg8",
+  "llvm.nvvm.read.ptx.sreg.envreg9",
+  "llvm.nvvm.read.ptx.sreg.gridid",
+  "llvm.nvvm.read.ptx.sreg.laneid",
+  "llvm.nvvm.read.ptx.sreg.lanemask.eq",
+  "llvm.nvvm.read.ptx.sreg.lanemask.ge",
+  "llvm.nvvm.read.ptx.sreg.lanemask.gt",
+  "llvm.nvvm.read.ptx.sreg.lanemask.le",
+  "llvm.nvvm.read.ptx.sreg.lanemask.lt",
+  "llvm.nvvm.read.ptx.sreg.nctaid.w",
+  "llvm.nvvm.read.ptx.sreg.nctaid.x",
+  "llvm.nvvm.read.ptx.sreg.nctaid.y",
+  "llvm.nvvm.read.ptx.sreg.nctaid.z",
+  "llvm.nvvm.read.ptx.sreg.nsmid",
+  "llvm.nvvm.read.ptx.sreg.ntid.w",
+  "llvm.nvvm.read.ptx.sreg.ntid.x",
+  "llvm.nvvm.read.ptx.sreg.ntid.y",
+  "llvm.nvvm.read.ptx.sreg.ntid.z",
+  "llvm.nvvm.read.ptx.sreg.nwarpid",
+  "llvm.nvvm.read.ptx.sreg.pm0",
+  "llvm.nvvm.read.ptx.sreg.pm1",
+  "llvm.nvvm.read.ptx.sreg.pm2",
+  "llvm.nvvm.read.ptx.sreg.pm3",
+  "llvm.nvvm.read.ptx.sreg.smid",
+  "llvm.nvvm.read.ptx.sreg.tid.w",
+  "llvm.nvvm.read.ptx.sreg.tid.x",
+  "llvm.nvvm.read.ptx.sreg.tid.y",
+  "llvm.nvvm.read.ptx.sreg.tid.z",
+  "llvm.nvvm.read.ptx.sreg.warpid",
+  "llvm.nvvm.read.ptx.sreg.warpsize",
+  "llvm.nvvm.reflect",
+  "llvm.nvvm.rotate.b32",
+  "llvm.nvvm.rotate.b64",
+  "llvm.nvvm.rotate.right.b64",
+  "llvm.nvvm.round.d",
+  "llvm.nvvm.round.f",
+  "llvm.nvvm.round.ftz.f",
+  "llvm.nvvm.rsqrt.approx.d",
+  "llvm.nvvm.rsqrt.approx.f",
+  "llvm.nvvm.rsqrt.approx.ftz.f",
+  "llvm.nvvm.sad.i",
+  "llvm.nvvm.sad.ui",
+  "llvm.nvvm.saturate.d",
+  "llvm.nvvm.saturate.f",
+  "llvm.nvvm.saturate.ftz.f",
+  "llvm.nvvm.shfl.bfly.f32",
+  "llvm.nvvm.shfl.bfly.i32",
+  "llvm.nvvm.shfl.down.f32",
+  "llvm.nvvm.shfl.down.i32",
+  "llvm.nvvm.shfl.idx.f32",
+  "llvm.nvvm.shfl.idx.i32",
+  "llvm.nvvm.shfl.sync.bfly.f32",
+  "llvm.nvvm.shfl.sync.bfly.i32",
+  "llvm.nvvm.shfl.sync.down.f32",
+  "llvm.nvvm.shfl.sync.down.i32",
+  "llvm.nvvm.shfl.sync.idx.f32",
+  "llvm.nvvm.shfl.sync.idx.i32",
+  "llvm.nvvm.shfl.sync.up.f32",
+  "llvm.nvvm.shfl.sync.up.i32",
+  "llvm.nvvm.shfl.up.f32",
+  "llvm.nvvm.shfl.up.i32",
+  "llvm.nvvm.sin.approx.f",
+  "llvm.nvvm.sin.approx.ftz.f",
+  "llvm.nvvm.sqrt.approx.f",
+  "llvm.nvvm.sqrt.approx.ftz.f",
+  "llvm.nvvm.sqrt.f",
+  "llvm.nvvm.sqrt.rm.d",
+  "llvm.nvvm.sqrt.rm.f",
+  "llvm.nvvm.sqrt.rm.ftz.f",
+  "llvm.nvvm.sqrt.rn.d",
+  "llvm.nvvm.sqrt.rn.f",
+  "llvm.nvvm.sqrt.rn.ftz.f",
+  "llvm.nvvm.sqrt.rp.d",
+  "llvm.nvvm.sqrt.rp.f",
+  "llvm.nvvm.sqrt.rp.ftz.f",
+  "llvm.nvvm.sqrt.rz.d",
+  "llvm.nvvm.sqrt.rz.f",
+  "llvm.nvvm.sqrt.rz.ftz.f",
+  "llvm.nvvm.suld.1d.array.i16.clamp",
+  "llvm.nvvm.suld.1d.array.i16.trap",
+  "llvm.nvvm.suld.1d.array.i16.zero",
+  "llvm.nvvm.suld.1d.array.i32.clamp",
+  "llvm.nvvm.suld.1d.array.i32.trap",
+  "llvm.nvvm.suld.1d.array.i32.zero",
+  "llvm.nvvm.suld.1d.array.i64.clamp",
+  "llvm.nvvm.suld.1d.array.i64.trap",
+  "llvm.nvvm.suld.1d.array.i64.zero",
+  "llvm.nvvm.suld.1d.array.i8.clamp",
+  "llvm.nvvm.suld.1d.array.i8.trap",
+  "llvm.nvvm.suld.1d.array.i8.zero",
+  "llvm.nvvm.suld.1d.array.v2i16.clamp",
+  "llvm.nvvm.suld.1d.array.v2i16.trap",
+  "llvm.nvvm.suld.1d.array.v2i16.zero",
+  "llvm.nvvm.suld.1d.array.v2i32.clamp",
+  "llvm.nvvm.suld.1d.array.v2i32.trap",
+  "llvm.nvvm.suld.1d.array.v2i32.zero",
+  "llvm.nvvm.suld.1d.array.v2i64.clamp",
+  "llvm.nvvm.suld.1d.array.v2i64.trap",
+  "llvm.nvvm.suld.1d.array.v2i64.zero",
+  "llvm.nvvm.suld.1d.array.v2i8.clamp",
+  "llvm.nvvm.suld.1d.array.v2i8.trap",
+  "llvm.nvvm.suld.1d.array.v2i8.zero",
+  "llvm.nvvm.suld.1d.array.v4i16.clamp",
+  "llvm.nvvm.suld.1d.array.v4i16.trap",
+  "llvm.nvvm.suld.1d.array.v4i16.zero",
+  "llvm.nvvm.suld.1d.array.v4i32.clamp",
+  "llvm.nvvm.suld.1d.array.v4i32.trap",
+  "llvm.nvvm.suld.1d.array.v4i32.zero",
+  "llvm.nvvm.suld.1d.array.v4i8.clamp",
+  "llvm.nvvm.suld.1d.array.v4i8.trap",
+  "llvm.nvvm.suld.1d.array.v4i8.zero",
+  "llvm.nvvm.suld.1d.i16.clamp",
+  "llvm.nvvm.suld.1d.i16.trap",
+  "llvm.nvvm.suld.1d.i16.zero",
+  "llvm.nvvm.suld.1d.i32.clamp",
+  "llvm.nvvm.suld.1d.i32.trap",
+  "llvm.nvvm.suld.1d.i32.zero",
+  "llvm.nvvm.suld.1d.i64.clamp",
+  "llvm.nvvm.suld.1d.i64.trap",
+  "llvm.nvvm.suld.1d.i64.zero",
+  "llvm.nvvm.suld.1d.i8.clamp",
+  "llvm.nvvm.suld.1d.i8.trap",
+  "llvm.nvvm.suld.1d.i8.zero",
+  "llvm.nvvm.suld.1d.v2i16.clamp",
+  "llvm.nvvm.suld.1d.v2i16.trap",
+  "llvm.nvvm.suld.1d.v2i16.zero",
+  "llvm.nvvm.suld.1d.v2i32.clamp",
+  "llvm.nvvm.suld.1d.v2i32.trap",
+  "llvm.nvvm.suld.1d.v2i32.zero",
+  "llvm.nvvm.suld.1d.v2i64.clamp",
+  "llvm.nvvm.suld.1d.v2i64.trap",
+  "llvm.nvvm.suld.1d.v2i64.zero",
+  "llvm.nvvm.suld.1d.v2i8.clamp",
+  "llvm.nvvm.suld.1d.v2i8.trap",
+  "llvm.nvvm.suld.1d.v2i8.zero",
+  "llvm.nvvm.suld.1d.v4i16.clamp",
+  "llvm.nvvm.suld.1d.v4i16.trap",
+  "llvm.nvvm.suld.1d.v4i16.zero",
+  "llvm.nvvm.suld.1d.v4i32.clamp",
+  "llvm.nvvm.suld.1d.v4i32.trap",
+  "llvm.nvvm.suld.1d.v4i32.zero",
+  "llvm.nvvm.suld.1d.v4i8.clamp",
+  "llvm.nvvm.suld.1d.v4i8.trap",
+  "llvm.nvvm.suld.1d.v4i8.zero",
+  "llvm.nvvm.suld.2d.array.i16.clamp",
+  "llvm.nvvm.suld.2d.array.i16.trap",
+  "llvm.nvvm.suld.2d.array.i16.zero",
+  "llvm.nvvm.suld.2d.array.i32.clamp",
+  "llvm.nvvm.suld.2d.array.i32.trap",
+  "llvm.nvvm.suld.2d.array.i32.zero",
+  "llvm.nvvm.suld.2d.array.i64.clamp",
+  "llvm.nvvm.suld.2d.array.i64.trap",
+  "llvm.nvvm.suld.2d.array.i64.zero",
+  "llvm.nvvm.suld.2d.array.i8.clamp",
+  "llvm.nvvm.suld.2d.array.i8.trap",
+  "llvm.nvvm.suld.2d.array.i8.zero",
+  "llvm.nvvm.suld.2d.array.v2i16.clamp",
+  "llvm.nvvm.suld.2d.array.v2i16.trap",
+  "llvm.nvvm.suld.2d.array.v2i16.zero",
+  "llvm.nvvm.suld.2d.array.v2i32.clamp",
+  "llvm.nvvm.suld.2d.array.v2i32.trap",
+  "llvm.nvvm.suld.2d.array.v2i32.zero",
+  "llvm.nvvm.suld.2d.array.v2i64.clamp",
+  "llvm.nvvm.suld.2d.array.v2i64.trap",
+  "llvm.nvvm.suld.2d.array.v2i64.zero",
+  "llvm.nvvm.suld.2d.array.v2i8.clamp",
+  "llvm.nvvm.suld.2d.array.v2i8.trap",
+  "llvm.nvvm.suld.2d.array.v2i8.zero",
+  "llvm.nvvm.suld.2d.array.v4i16.clamp",
+  "llvm.nvvm.suld.2d.array.v4i16.trap",
+  "llvm.nvvm.suld.2d.array.v4i16.zero",
+  "llvm.nvvm.suld.2d.array.v4i32.clamp",
+  "llvm.nvvm.suld.2d.array.v4i32.trap",
+  "llvm.nvvm.suld.2d.array.v4i32.zero",
+  "llvm.nvvm.suld.2d.array.v4i8.clamp",
+  "llvm.nvvm.suld.2d.array.v4i8.trap",
+  "llvm.nvvm.suld.2d.array.v4i8.zero",
+  "llvm.nvvm.suld.2d.i16.clamp",
+  "llvm.nvvm.suld.2d.i16.trap",
+  "llvm.nvvm.suld.2d.i16.zero",
+  "llvm.nvvm.suld.2d.i32.clamp",
+  "llvm.nvvm.suld.2d.i32.trap",
+  "llvm.nvvm.suld.2d.i32.zero",
+  "llvm.nvvm.suld.2d.i64.clamp",
+  "llvm.nvvm.suld.2d.i64.trap",
+  "llvm.nvvm.suld.2d.i64.zero",
+  "llvm.nvvm.suld.2d.i8.clamp",
+  "llvm.nvvm.suld.2d.i8.trap",
+  "llvm.nvvm.suld.2d.i8.zero",
+  "llvm.nvvm.suld.2d.v2i16.clamp",
+  "llvm.nvvm.suld.2d.v2i16.trap",
+  "llvm.nvvm.suld.2d.v2i16.zero",
+  "llvm.nvvm.suld.2d.v2i32.clamp",
+  "llvm.nvvm.suld.2d.v2i32.trap",
+  "llvm.nvvm.suld.2d.v2i32.zero",
+  "llvm.nvvm.suld.2d.v2i64.clamp",
+  "llvm.nvvm.suld.2d.v2i64.trap",
+  "llvm.nvvm.suld.2d.v2i64.zero",
+  "llvm.nvvm.suld.2d.v2i8.clamp",
+  "llvm.nvvm.suld.2d.v2i8.trap",
+  "llvm.nvvm.suld.2d.v2i8.zero",
+  "llvm.nvvm.suld.2d.v4i16.clamp",
+  "llvm.nvvm.suld.2d.v4i16.trap",
+  "llvm.nvvm.suld.2d.v4i16.zero",
+  "llvm.nvvm.suld.2d.v4i32.clamp",
+  "llvm.nvvm.suld.2d.v4i32.trap",
+  "llvm.nvvm.suld.2d.v4i32.zero",
+  "llvm.nvvm.suld.2d.v4i8.clamp",
+  "llvm.nvvm.suld.2d.v4i8.trap",
+  "llvm.nvvm.suld.2d.v4i8.zero",
+  "llvm.nvvm.suld.3d.i16.clamp",
+  "llvm.nvvm.suld.3d.i16.trap",
+  "llvm.nvvm.suld.3d.i16.zero",
+  "llvm.nvvm.suld.3d.i32.clamp",
+  "llvm.nvvm.suld.3d.i32.trap",
+  "llvm.nvvm.suld.3d.i32.zero",
+  "llvm.nvvm.suld.3d.i64.clamp",
+  "llvm.nvvm.suld.3d.i64.trap",
+  "llvm.nvvm.suld.3d.i64.zero",
+  "llvm.nvvm.suld.3d.i8.clamp",
+  "llvm.nvvm.suld.3d.i8.trap",
+  "llvm.nvvm.suld.3d.i8.zero",
+  "llvm.nvvm.suld.3d.v2i16.clamp",
+  "llvm.nvvm.suld.3d.v2i16.trap",
+  "llvm.nvvm.suld.3d.v2i16.zero",
+  "llvm.nvvm.suld.3d.v2i32.clamp",
+  "llvm.nvvm.suld.3d.v2i32.trap",
+  "llvm.nvvm.suld.3d.v2i32.zero",
+  "llvm.nvvm.suld.3d.v2i64.clamp",
+  "llvm.nvvm.suld.3d.v2i64.trap",
+  "llvm.nvvm.suld.3d.v2i64.zero",
+  "llvm.nvvm.suld.3d.v2i8.clamp",
+  "llvm.nvvm.suld.3d.v2i8.trap",
+  "llvm.nvvm.suld.3d.v2i8.zero",
+  "llvm.nvvm.suld.3d.v4i16.clamp",
+  "llvm.nvvm.suld.3d.v4i16.trap",
+  "llvm.nvvm.suld.3d.v4i16.zero",
+  "llvm.nvvm.suld.3d.v4i32.clamp",
+  "llvm.nvvm.suld.3d.v4i32.trap",
+  "llvm.nvvm.suld.3d.v4i32.zero",
+  "llvm.nvvm.suld.3d.v4i8.clamp",
+  "llvm.nvvm.suld.3d.v4i8.trap",
+  "llvm.nvvm.suld.3d.v4i8.zero",
+  "llvm.nvvm.suq.array.size",
+  "llvm.nvvm.suq.channel.data.type",
+  "llvm.nvvm.suq.channel.order",
+  "llvm.nvvm.suq.depth",
+  "llvm.nvvm.suq.height",
+  "llvm.nvvm.suq.width",
+  "llvm.nvvm.sust.b.1d.array.i16.clamp",
+  "llvm.nvvm.sust.b.1d.array.i16.trap",
+  "llvm.nvvm.sust.b.1d.array.i16.zero",
+  "llvm.nvvm.sust.b.1d.array.i32.clamp",
+  "llvm.nvvm.sust.b.1d.array.i32.trap",
+  "llvm.nvvm.sust.b.1d.array.i32.zero",
+  "llvm.nvvm.sust.b.1d.array.i64.clamp",
+  "llvm.nvvm.sust.b.1d.array.i64.trap",
+  "llvm.nvvm.sust.b.1d.array.i64.zero",
+  "llvm.nvvm.sust.b.1d.array.i8.clamp",
+  "llvm.nvvm.sust.b.1d.array.i8.trap",
+  "llvm.nvvm.sust.b.1d.array.i8.zero",
+  "llvm.nvvm.sust.b.1d.array.v2i16.clamp",
+  "llvm.nvvm.sust.b.1d.array.v2i16.trap",
+  "llvm.nvvm.sust.b.1d.array.v2i16.zero",
+  "llvm.nvvm.sust.b.1d.array.v2i32.clamp",
+  "llvm.nvvm.sust.b.1d.array.v2i32.trap",
+  "llvm.nvvm.sust.b.1d.array.v2i32.zero",
+  "llvm.nvvm.sust.b.1d.array.v2i64.clamp",
+  "llvm.nvvm.sust.b.1d.array.v2i64.trap",
+  "llvm.nvvm.sust.b.1d.array.v2i64.zero",
+  "llvm.nvvm.sust.b.1d.array.v2i8.clamp",
+  "llvm.nvvm.sust.b.1d.array.v2i8.trap",
+  "llvm.nvvm.sust.b.1d.array.v2i8.zero",
+  "llvm.nvvm.sust.b.1d.array.v4i16.clamp",
+  "llvm.nvvm.sust.b.1d.array.v4i16.trap",
+  "llvm.nvvm.sust.b.1d.array.v4i16.zero",
+  "llvm.nvvm.sust.b.1d.array.v4i32.clamp",
+  "llvm.nvvm.sust.b.1d.array.v4i32.trap",
+  "llvm.nvvm.sust.b.1d.array.v4i32.zero",
+  "llvm.nvvm.sust.b.1d.array.v4i8.clamp",
+  "llvm.nvvm.sust.b.1d.array.v4i8.trap",
+  "llvm.nvvm.sust.b.1d.array.v4i8.zero",
+  "llvm.nvvm.sust.b.1d.i16.clamp",
+  "llvm.nvvm.sust.b.1d.i16.trap",
+  "llvm.nvvm.sust.b.1d.i16.zero",
+  "llvm.nvvm.sust.b.1d.i32.clamp",
+  "llvm.nvvm.sust.b.1d.i32.trap",
+  "llvm.nvvm.sust.b.1d.i32.zero",
+  "llvm.nvvm.sust.b.1d.i64.clamp",
+  "llvm.nvvm.sust.b.1d.i64.trap",
+  "llvm.nvvm.sust.b.1d.i64.zero",
+  "llvm.nvvm.sust.b.1d.i8.clamp",
+  "llvm.nvvm.sust.b.1d.i8.trap",
+  "llvm.nvvm.sust.b.1d.i8.zero",
+  "llvm.nvvm.sust.b.1d.v2i16.clamp",
+  "llvm.nvvm.sust.b.1d.v2i16.trap",
+  "llvm.nvvm.sust.b.1d.v2i16.zero",
+  "llvm.nvvm.sust.b.1d.v2i32.clamp",
+  "llvm.nvvm.sust.b.1d.v2i32.trap",
+  "llvm.nvvm.sust.b.1d.v2i32.zero",
+  "llvm.nvvm.sust.b.1d.v2i64.clamp",
+  "llvm.nvvm.sust.b.1d.v2i64.trap",
+  "llvm.nvvm.sust.b.1d.v2i64.zero",
+  "llvm.nvvm.sust.b.1d.v2i8.clamp",
+  "llvm.nvvm.sust.b.1d.v2i8.trap",
+  "llvm.nvvm.sust.b.1d.v2i8.zero",
+  "llvm.nvvm.sust.b.1d.v4i16.clamp",
+  "llvm.nvvm.sust.b.1d.v4i16.trap",
+  "llvm.nvvm.sust.b.1d.v4i16.zero",
+  "llvm.nvvm.sust.b.1d.v4i32.clamp",
+  "llvm.nvvm.sust.b.1d.v4i32.trap",
+  "llvm.nvvm.sust.b.1d.v4i32.zero",
+  "llvm.nvvm.sust.b.1d.v4i8.clamp",
+  "llvm.nvvm.sust.b.1d.v4i8.trap",
+  "llvm.nvvm.sust.b.1d.v4i8.zero",
+  "llvm.nvvm.sust.b.2d.array.i16.clamp",
+  "llvm.nvvm.sust.b.2d.array.i16.trap",
+  "llvm.nvvm.sust.b.2d.array.i16.zero",
+  "llvm.nvvm.sust.b.2d.array.i32.clamp",
+  "llvm.nvvm.sust.b.2d.array.i32.trap",
+  "llvm.nvvm.sust.b.2d.array.i32.zero",
+  "llvm.nvvm.sust.b.2d.array.i64.clamp",
+  "llvm.nvvm.sust.b.2d.array.i64.trap",
+  "llvm.nvvm.sust.b.2d.array.i64.zero",
+  "llvm.nvvm.sust.b.2d.array.i8.clamp",
+  "llvm.nvvm.sust.b.2d.array.i8.trap",
+  "llvm.nvvm.sust.b.2d.array.i8.zero",
+  "llvm.nvvm.sust.b.2d.array.v2i16.clamp",
+  "llvm.nvvm.sust.b.2d.array.v2i16.trap",
+  "llvm.nvvm.sust.b.2d.array.v2i16.zero",
+  "llvm.nvvm.sust.b.2d.array.v2i32.clamp",
+  "llvm.nvvm.sust.b.2d.array.v2i32.trap",
+  "llvm.nvvm.sust.b.2d.array.v2i32.zero",
+  "llvm.nvvm.sust.b.2d.array.v2i64.clamp",
+  "llvm.nvvm.sust.b.2d.array.v2i64.trap",
+  "llvm.nvvm.sust.b.2d.array.v2i64.zero",
+  "llvm.nvvm.sust.b.2d.array.v2i8.clamp",
+  "llvm.nvvm.sust.b.2d.array.v2i8.trap",
+  "llvm.nvvm.sust.b.2d.array.v2i8.zero",
+  "llvm.nvvm.sust.b.2d.array.v4i16.clamp",
+  "llvm.nvvm.sust.b.2d.array.v4i16.trap",
+  "llvm.nvvm.sust.b.2d.array.v4i16.zero",
+  "llvm.nvvm.sust.b.2d.array.v4i32.clamp",
+  "llvm.nvvm.sust.b.2d.array.v4i32.trap",
+  "llvm.nvvm.sust.b.2d.array.v4i32.zero",
+  "llvm.nvvm.sust.b.2d.array.v4i8.clamp",
+  "llvm.nvvm.sust.b.2d.array.v4i8.trap",
+  "llvm.nvvm.sust.b.2d.array.v4i8.zero",
+  "llvm.nvvm.sust.b.2d.i16.clamp",
+  "llvm.nvvm.sust.b.2d.i16.trap",
+  "llvm.nvvm.sust.b.2d.i16.zero",
+  "llvm.nvvm.sust.b.2d.i32.clamp",
+  "llvm.nvvm.sust.b.2d.i32.trap",
+  "llvm.nvvm.sust.b.2d.i32.zero",
+  "llvm.nvvm.sust.b.2d.i64.clamp",
+  "llvm.nvvm.sust.b.2d.i64.trap",
+  "llvm.nvvm.sust.b.2d.i64.zero",
+  "llvm.nvvm.sust.b.2d.i8.clamp",
+  "llvm.nvvm.sust.b.2d.i8.trap",
+  "llvm.nvvm.sust.b.2d.i8.zero",
+  "llvm.nvvm.sust.b.2d.v2i16.clamp",
+  "llvm.nvvm.sust.b.2d.v2i16.trap",
+  "llvm.nvvm.sust.b.2d.v2i16.zero",
+  "llvm.nvvm.sust.b.2d.v2i32.clamp",
+  "llvm.nvvm.sust.b.2d.v2i32.trap",
+  "llvm.nvvm.sust.b.2d.v2i32.zero",
+  "llvm.nvvm.sust.b.2d.v2i64.clamp",
+  "llvm.nvvm.sust.b.2d.v2i64.trap",
+  "llvm.nvvm.sust.b.2d.v2i64.zero",
+  "llvm.nvvm.sust.b.2d.v2i8.clamp",
+  "llvm.nvvm.sust.b.2d.v2i8.trap",
+  "llvm.nvvm.sust.b.2d.v2i8.zero",
+  "llvm.nvvm.sust.b.2d.v4i16.clamp",
+  "llvm.nvvm.sust.b.2d.v4i16.trap",
+  "llvm.nvvm.sust.b.2d.v4i16.zero",
+  "llvm.nvvm.sust.b.2d.v4i32.clamp",
+  "llvm.nvvm.sust.b.2d.v4i32.trap",
+  "llvm.nvvm.sust.b.2d.v4i32.zero",
+  "llvm.nvvm.sust.b.2d.v4i8.clamp",
+  "llvm.nvvm.sust.b.2d.v4i8.trap",
+  "llvm.nvvm.sust.b.2d.v4i8.zero",
+  "llvm.nvvm.sust.b.3d.i16.clamp",
+  "llvm.nvvm.sust.b.3d.i16.trap",
+  "llvm.nvvm.sust.b.3d.i16.zero",
+  "llvm.nvvm.sust.b.3d.i32.clamp",
+  "llvm.nvvm.sust.b.3d.i32.trap",
+  "llvm.nvvm.sust.b.3d.i32.zero",
+  "llvm.nvvm.sust.b.3d.i64.clamp",
+  "llvm.nvvm.sust.b.3d.i64.trap",
+  "llvm.nvvm.sust.b.3d.i64.zero",
+  "llvm.nvvm.sust.b.3d.i8.clamp",
+  "llvm.nvvm.sust.b.3d.i8.trap",
+  "llvm.nvvm.sust.b.3d.i8.zero",
+  "llvm.nvvm.sust.b.3d.v2i16.clamp",
+  "llvm.nvvm.sust.b.3d.v2i16.trap",
+  "llvm.nvvm.sust.b.3d.v2i16.zero",
+  "llvm.nvvm.sust.b.3d.v2i32.clamp",
+  "llvm.nvvm.sust.b.3d.v2i32.trap",
+  "llvm.nvvm.sust.b.3d.v2i32.zero",
+  "llvm.nvvm.sust.b.3d.v2i64.clamp",
+  "llvm.nvvm.sust.b.3d.v2i64.trap",
+  "llvm.nvvm.sust.b.3d.v2i64.zero",
+  "llvm.nvvm.sust.b.3d.v2i8.clamp",
+  "llvm.nvvm.sust.b.3d.v2i8.trap",
+  "llvm.nvvm.sust.b.3d.v2i8.zero",
+  "llvm.nvvm.sust.b.3d.v4i16.clamp",
+  "llvm.nvvm.sust.b.3d.v4i16.trap",
+  "llvm.nvvm.sust.b.3d.v4i16.zero",
+  "llvm.nvvm.sust.b.3d.v4i32.clamp",
+  "llvm.nvvm.sust.b.3d.v4i32.trap",
+  "llvm.nvvm.sust.b.3d.v4i32.zero",
+  "llvm.nvvm.sust.b.3d.v4i8.clamp",
+  "llvm.nvvm.sust.b.3d.v4i8.trap",
+  "llvm.nvvm.sust.b.3d.v4i8.zero",
+  "llvm.nvvm.sust.p.1d.array.i16.trap",
+  "llvm.nvvm.sust.p.1d.array.i32.trap",
+  "llvm.nvvm.sust.p.1d.array.i8.trap",
+  "llvm.nvvm.sust.p.1d.array.v2i16.trap",
+  "llvm.nvvm.sust.p.1d.array.v2i32.trap",
+  "llvm.nvvm.sust.p.1d.array.v2i8.trap",
+  "llvm.nvvm.sust.p.1d.array.v4i16.trap",
+  "llvm.nvvm.sust.p.1d.array.v4i32.trap",
+  "llvm.nvvm.sust.p.1d.array.v4i8.trap",
+  "llvm.nvvm.sust.p.1d.i16.trap",
+  "llvm.nvvm.sust.p.1d.i32.trap",
+  "llvm.nvvm.sust.p.1d.i8.trap",
+  "llvm.nvvm.sust.p.1d.v2i16.trap",
+  "llvm.nvvm.sust.p.1d.v2i32.trap",
+  "llvm.nvvm.sust.p.1d.v2i8.trap",
+  "llvm.nvvm.sust.p.1d.v4i16.trap",
+  "llvm.nvvm.sust.p.1d.v4i32.trap",
+  "llvm.nvvm.sust.p.1d.v4i8.trap",
+  "llvm.nvvm.sust.p.2d.array.i16.trap",
+  "llvm.nvvm.sust.p.2d.array.i32.trap",
+  "llvm.nvvm.sust.p.2d.array.i8.trap",
+  "llvm.nvvm.sust.p.2d.array.v2i16.trap",
+  "llvm.nvvm.sust.p.2d.array.v2i32.trap",
+  "llvm.nvvm.sust.p.2d.array.v2i8.trap",
+  "llvm.nvvm.sust.p.2d.array.v4i16.trap",
+  "llvm.nvvm.sust.p.2d.array.v4i32.trap",
+  "llvm.nvvm.sust.p.2d.array.v4i8.trap",
+  "llvm.nvvm.sust.p.2d.i16.trap",
+  "llvm.nvvm.sust.p.2d.i32.trap",
+  "llvm.nvvm.sust.p.2d.i8.trap",
+  "llvm.nvvm.sust.p.2d.v2i16.trap",
+  "llvm.nvvm.sust.p.2d.v2i32.trap",
+  "llvm.nvvm.sust.p.2d.v2i8.trap",
+  "llvm.nvvm.sust.p.2d.v4i16.trap",
+  "llvm.nvvm.sust.p.2d.v4i32.trap",
+  "llvm.nvvm.sust.p.2d.v4i8.trap",
+  "llvm.nvvm.sust.p.3d.i16.trap",
+  "llvm.nvvm.sust.p.3d.i32.trap",
+  "llvm.nvvm.sust.p.3d.i8.trap",
+  "llvm.nvvm.sust.p.3d.v2i16.trap",
+  "llvm.nvvm.sust.p.3d.v2i32.trap",
+  "llvm.nvvm.sust.p.3d.v2i8.trap",
+  "llvm.nvvm.sust.p.3d.v4i16.trap",
+  "llvm.nvvm.sust.p.3d.v4i32.trap",
+  "llvm.nvvm.sust.p.3d.v4i8.trap",
+  "llvm.nvvm.swap.lo.hi.b64",
+  "llvm.nvvm.tex.1d.array.grad.v4f32.f32",
+  "llvm.nvvm.tex.1d.array.grad.v4s32.f32",
+  "llvm.nvvm.tex.1d.array.grad.v4u32.f32",
+  "llvm.nvvm.tex.1d.array.level.v4f32.f32",
+  "llvm.nvvm.tex.1d.array.level.v4s32.f32",
+  "llvm.nvvm.tex.1d.array.level.v4u32.f32",
+  "llvm.nvvm.tex.1d.array.v4f32.f32",
+  "llvm.nvvm.tex.1d.array.v4f32.s32",
+  "llvm.nvvm.tex.1d.array.v4s32.f32",
+  "llvm.nvvm.tex.1d.array.v4s32.s32",
+  "llvm.nvvm.tex.1d.array.v4u32.f32",
+  "llvm.nvvm.tex.1d.array.v4u32.s32",
+  "llvm.nvvm.tex.1d.grad.v4f32.f32",
+  "llvm.nvvm.tex.1d.grad.v4s32.f32",
+  "llvm.nvvm.tex.1d.grad.v4u32.f32",
+  "llvm.nvvm.tex.1d.level.v4f32.f32",
+  "llvm.nvvm.tex.1d.level.v4s32.f32",
+  "llvm.nvvm.tex.1d.level.v4u32.f32",
+  "llvm.nvvm.tex.1d.v4f32.f32",
+  "llvm.nvvm.tex.1d.v4f32.s32",
+  "llvm.nvvm.tex.1d.v4s32.f32",
+  "llvm.nvvm.tex.1d.v4s32.s32",
+  "llvm.nvvm.tex.1d.v4u32.f32",
+  "llvm.nvvm.tex.1d.v4u32.s32",
+  "llvm.nvvm.tex.2d.array.grad.v4f32.f32",
+  "llvm.nvvm.tex.2d.array.grad.v4s32.f32",
+  "llvm.nvvm.tex.2d.array.grad.v4u32.f32",
+  "llvm.nvvm.tex.2d.array.level.v4f32.f32",
+  "llvm.nvvm.tex.2d.array.level.v4s32.f32",
+  "llvm.nvvm.tex.2d.array.level.v4u32.f32",
+  "llvm.nvvm.tex.2d.array.v4f32.f32",
+  "llvm.nvvm.tex.2d.array.v4f32.s32",
+  "llvm.nvvm.tex.2d.array.v4s32.f32",
+  "llvm.nvvm.tex.2d.array.v4s32.s32",
+  "llvm.nvvm.tex.2d.array.v4u32.f32",
+  "llvm.nvvm.tex.2d.array.v4u32.s32",
+  "llvm.nvvm.tex.2d.grad.v4f32.f32",
+  "llvm.nvvm.tex.2d.grad.v4s32.f32",
+  "llvm.nvvm.tex.2d.grad.v4u32.f32",
+  "llvm.nvvm.tex.2d.level.v4f32.f32",
+  "llvm.nvvm.tex.2d.level.v4s32.f32",
+  "llvm.nvvm.tex.2d.level.v4u32.f32",
+  "llvm.nvvm.tex.2d.v4f32.f32",
+  "llvm.nvvm.tex.2d.v4f32.s32",
+  "llvm.nvvm.tex.2d.v4s32.f32",
+  "llvm.nvvm.tex.2d.v4s32.s32",
+  "llvm.nvvm.tex.2d.v4u32.f32",
+  "llvm.nvvm.tex.2d.v4u32.s32",
+  "llvm.nvvm.tex.3d.grad.v4f32.f32",
+  "llvm.nvvm.tex.3d.grad.v4s32.f32",
+  "llvm.nvvm.tex.3d.grad.v4u32.f32",
+  "llvm.nvvm.tex.3d.level.v4f32.f32",
+  "llvm.nvvm.tex.3d.level.v4s32.f32",
+  "llvm.nvvm.tex.3d.level.v4u32.f32",
+  "llvm.nvvm.tex.3d.v4f32.f32",
+  "llvm.nvvm.tex.3d.v4f32.s32",
+  "llvm.nvvm.tex.3d.v4s32.f32",
+  "llvm.nvvm.tex.3d.v4s32.s32",
+  "llvm.nvvm.tex.3d.v4u32.f32",
+  "llvm.nvvm.tex.3d.v4u32.s32",
+  "llvm.nvvm.tex.cube.array.level.v4f32.f32",
+  "llvm.nvvm.tex.cube.array.level.v4s32.f32",
+  "llvm.nvvm.tex.cube.array.level.v4u32.f32",
+  "llvm.nvvm.tex.cube.array.v4f32.f32",
+  "llvm.nvvm.tex.cube.array.v4s32.f32",
+  "llvm.nvvm.tex.cube.array.v4u32.f32",
+  "llvm.nvvm.tex.cube.level.v4f32.f32",
+  "llvm.nvvm.tex.cube.level.v4s32.f32",
+  "llvm.nvvm.tex.cube.level.v4u32.f32",
+  "llvm.nvvm.tex.cube.v4f32.f32",
+  "llvm.nvvm.tex.cube.v4s32.f32",
+  "llvm.nvvm.tex.cube.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.array.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.array.v4f32.s32",
+  "llvm.nvvm.tex.unified.1d.array.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.array.v4s32.s32",
+  "llvm.nvvm.tex.unified.1d.array.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.array.v4u32.s32",
+  "llvm.nvvm.tex.unified.1d.grad.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.grad.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.grad.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.v4f32.f32",
+  "llvm.nvvm.tex.unified.1d.v4f32.s32",
+  "llvm.nvvm.tex.unified.1d.v4s32.f32",
+  "llvm.nvvm.tex.unified.1d.v4s32.s32",
+  "llvm.nvvm.tex.unified.1d.v4u32.f32",
+  "llvm.nvvm.tex.unified.1d.v4u32.s32",
+  "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.array.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.array.v4f32.s32",
+  "llvm.nvvm.tex.unified.2d.array.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.array.v4s32.s32",
+  "llvm.nvvm.tex.unified.2d.array.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.array.v4u32.s32",
+  "llvm.nvvm.tex.unified.2d.grad.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.grad.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.grad.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.v4f32.f32",
+  "llvm.nvvm.tex.unified.2d.v4f32.s32",
+  "llvm.nvvm.tex.unified.2d.v4s32.f32",
+  "llvm.nvvm.tex.unified.2d.v4s32.s32",
+  "llvm.nvvm.tex.unified.2d.v4u32.f32",
+  "llvm.nvvm.tex.unified.2d.v4u32.s32",
+  "llvm.nvvm.tex.unified.3d.grad.v4f32.f32",
+  "llvm.nvvm.tex.unified.3d.grad.v4s32.f32",
+  "llvm.nvvm.tex.unified.3d.grad.v4u32.f32",
+  "llvm.nvvm.tex.unified.3d.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.3d.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.3d.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.3d.v4f32.f32",
+  "llvm.nvvm.tex.unified.3d.v4f32.s32",
+  "llvm.nvvm.tex.unified.3d.v4s32.f32",
+  "llvm.nvvm.tex.unified.3d.v4s32.s32",
+  "llvm.nvvm.tex.unified.3d.v4u32.f32",
+  "llvm.nvvm.tex.unified.3d.v4u32.s32",
+  "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.cube.array.v4f32.f32",
+  "llvm.nvvm.tex.unified.cube.array.v4s32.f32",
+  "llvm.nvvm.tex.unified.cube.array.v4u32.f32",
+  "llvm.nvvm.tex.unified.cube.level.v4f32.f32",
+  "llvm.nvvm.tex.unified.cube.level.v4s32.f32",
+  "llvm.nvvm.tex.unified.cube.level.v4u32.f32",
+  "llvm.nvvm.tex.unified.cube.v4f32.f32",
+  "llvm.nvvm.tex.unified.cube.v4s32.f32",
+  "llvm.nvvm.tex.unified.cube.v4u32.f32",
+  "llvm.nvvm.texsurf.handle",
+  "llvm.nvvm.texsurf.handle.internal",
+  "llvm.nvvm.tld4.a.2d.v4f32.f32",
+  "llvm.nvvm.tld4.a.2d.v4s32.f32",
+  "llvm.nvvm.tld4.a.2d.v4u32.f32",
+  "llvm.nvvm.tld4.b.2d.v4f32.f32",
+  "llvm.nvvm.tld4.b.2d.v4s32.f32",
+  "llvm.nvvm.tld4.b.2d.v4u32.f32",
+  "llvm.nvvm.tld4.g.2d.v4f32.f32",
+  "llvm.nvvm.tld4.g.2d.v4s32.f32",
+  "llvm.nvvm.tld4.g.2d.v4u32.f32",
+  "llvm.nvvm.tld4.r.2d.v4f32.f32",
+  "llvm.nvvm.tld4.r.2d.v4s32.f32",
+  "llvm.nvvm.tld4.r.2d.v4u32.f32",
+  "llvm.nvvm.tld4.unified.a.2d.v4f32.f32",
+  "llvm.nvvm.tld4.unified.a.2d.v4s32.f32",
+  "llvm.nvvm.tld4.unified.a.2d.v4u32.f32",
+  "llvm.nvvm.tld4.unified.b.2d.v4f32.f32",
+  "llvm.nvvm.tld4.unified.b.2d.v4s32.f32",
+  "llvm.nvvm.tld4.unified.b.2d.v4u32.f32",
+  "llvm.nvvm.tld4.unified.g.2d.v4f32.f32",
+  "llvm.nvvm.tld4.unified.g.2d.v4s32.f32",
+  "llvm.nvvm.tld4.unified.g.2d.v4u32.f32",
+  "llvm.nvvm.tld4.unified.r.2d.v4f32.f32",
+  "llvm.nvvm.tld4.unified.r.2d.v4s32.f32",
+  "llvm.nvvm.tld4.unified.r.2d.v4u32.f32",
+  "llvm.nvvm.trunc.d",
+  "llvm.nvvm.trunc.f",
+  "llvm.nvvm.trunc.ftz.f",
+  "llvm.nvvm.txq.array.size",
+  "llvm.nvvm.txq.channel.data.type",
+  "llvm.nvvm.txq.channel.order",
+  "llvm.nvvm.txq.depth",
+  "llvm.nvvm.txq.height",
+  "llvm.nvvm.txq.num.mipmap.levels",
+  "llvm.nvvm.txq.num.samples",
+  "llvm.nvvm.txq.width",
+  "llvm.nvvm.ui2d.rm",
+  "llvm.nvvm.ui2d.rn",
+  "llvm.nvvm.ui2d.rp",
+  "llvm.nvvm.ui2d.rz",
+  "llvm.nvvm.ui2f.rm",
+  "llvm.nvvm.ui2f.rn",
+  "llvm.nvvm.ui2f.rp",
+  "llvm.nvvm.ui2f.rz",
+  "llvm.nvvm.ull2d.rm",
+  "llvm.nvvm.ull2d.rn",
+  "llvm.nvvm.ull2d.rp",
+  "llvm.nvvm.ull2d.rz",
+  "llvm.nvvm.ull2f.rm",
+  "llvm.nvvm.ull2f.rn",
+  "llvm.nvvm.ull2f.rp",
+  "llvm.nvvm.ull2f.rz",
+  "llvm.nvvm.vote.all",
+  "llvm.nvvm.vote.all.sync",
+  "llvm.nvvm.vote.any",
+  "llvm.nvvm.vote.any.sync",
+  "llvm.nvvm.vote.ballot",
+  "llvm.nvvm.vote.ballot.sync",
+  "llvm.nvvm.vote.uni",
+  "llvm.nvvm.vote.uni.sync",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32",
+  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.f16",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.f16",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16",
+  "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32",
+  "llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.f16",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.f16",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16",
+  "llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.f32",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32",
+  "llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.f16",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.f16",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.f32",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16",
+  "llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32",
+  "llvm.ppc.addf128.round.to.odd",
+  "llvm.ppc.altivec.crypto.vcipher",
+  "llvm.ppc.altivec.crypto.vcipherlast",
+  "llvm.ppc.altivec.crypto.vncipher",
+  "llvm.ppc.altivec.crypto.vncipherlast",
+  "llvm.ppc.altivec.crypto.vpermxor",
+  "llvm.ppc.altivec.crypto.vpmsumb",
+  "llvm.ppc.altivec.crypto.vpmsumd",
+  "llvm.ppc.altivec.crypto.vpmsumh",
+  "llvm.ppc.altivec.crypto.vpmsumw",
+  "llvm.ppc.altivec.crypto.vsbox",
+  "llvm.ppc.altivec.crypto.vshasigmad",
+  "llvm.ppc.altivec.crypto.vshasigmaw",
+  "llvm.ppc.altivec.dss",
+  "llvm.ppc.altivec.dssall",
+  "llvm.ppc.altivec.dst",
+  "llvm.ppc.altivec.dstst",
+  "llvm.ppc.altivec.dststt",
+  "llvm.ppc.altivec.dstt",
+  "llvm.ppc.altivec.lvebx",
+  "llvm.ppc.altivec.lvehx",
+  "llvm.ppc.altivec.lvewx",
+  "llvm.ppc.altivec.lvsl",
+  "llvm.ppc.altivec.lvsr",
+  "llvm.ppc.altivec.lvx",
+  "llvm.ppc.altivec.lvxl",
+  "llvm.ppc.altivec.mfvscr",
+  "llvm.ppc.altivec.mtvscr",
+  "llvm.ppc.altivec.stvebx",
+  "llvm.ppc.altivec.stvehx",
+  "llvm.ppc.altivec.stvewx",
+  "llvm.ppc.altivec.stvx",
+  "llvm.ppc.altivec.stvxl",
+  "llvm.ppc.altivec.vabsdub",
+  "llvm.ppc.altivec.vabsduh",
+  "llvm.ppc.altivec.vabsduw",
+  "llvm.ppc.altivec.vaddcuq",
+  "llvm.ppc.altivec.vaddcuw",
+  "llvm.ppc.altivec.vaddecuq",
+  "llvm.ppc.altivec.vaddeuqm",
+  "llvm.ppc.altivec.vaddsbs",
+  "llvm.ppc.altivec.vaddshs",
+  "llvm.ppc.altivec.vaddsws",
+  "llvm.ppc.altivec.vaddubs",
+  "llvm.ppc.altivec.vadduhs",
+  "llvm.ppc.altivec.vadduws",
+  "llvm.ppc.altivec.vavgsb",
+  "llvm.ppc.altivec.vavgsh",
+  "llvm.ppc.altivec.vavgsw",
+  "llvm.ppc.altivec.vavgub",
+  "llvm.ppc.altivec.vavguh",
+  "llvm.ppc.altivec.vavguw",
+  "llvm.ppc.altivec.vbpermq",
+  "llvm.ppc.altivec.vcfsx",
+  "llvm.ppc.altivec.vcfux",
+  "llvm.ppc.altivec.vclzlsbb",
+  "llvm.ppc.altivec.vcmpbfp",
+  "llvm.ppc.altivec.vcmpbfp.p",
+  "llvm.ppc.altivec.vcmpeqfp",
+  "llvm.ppc.altivec.vcmpeqfp.p",
+  "llvm.ppc.altivec.vcmpequb",
+  "llvm.ppc.altivec.vcmpequb.p",
+  "llvm.ppc.altivec.vcmpequd",
+  "llvm.ppc.altivec.vcmpequd.p",
+  "llvm.ppc.altivec.vcmpequh",
+  "llvm.ppc.altivec.vcmpequh.p",
+  "llvm.ppc.altivec.vcmpequw",
+  "llvm.ppc.altivec.vcmpequw.p",
+  "llvm.ppc.altivec.vcmpgefp",
+  "llvm.ppc.altivec.vcmpgefp.p",
+  "llvm.ppc.altivec.vcmpgtfp",
+  "llvm.ppc.altivec.vcmpgtfp.p",
+  "llvm.ppc.altivec.vcmpgtsb",
+  "llvm.ppc.altivec.vcmpgtsb.p",
+  "llvm.ppc.altivec.vcmpgtsd",
+  "llvm.ppc.altivec.vcmpgtsd.p",
+  "llvm.ppc.altivec.vcmpgtsh",
+  "llvm.ppc.altivec.vcmpgtsh.p",
+  "llvm.ppc.altivec.vcmpgtsw",
+  "llvm.ppc.altivec.vcmpgtsw.p",
+  "llvm.ppc.altivec.vcmpgtub",
+  "llvm.ppc.altivec.vcmpgtub.p",
+  "llvm.ppc.altivec.vcmpgtud",
+  "llvm.ppc.altivec.vcmpgtud.p",
+  "llvm.ppc.altivec.vcmpgtuh",
+  "llvm.ppc.altivec.vcmpgtuh.p",
+  "llvm.ppc.altivec.vcmpgtuw",
+  "llvm.ppc.altivec.vcmpgtuw.p",
+  "llvm.ppc.altivec.vcmpneb",
+  "llvm.ppc.altivec.vcmpneb.p",
+  "llvm.ppc.altivec.vcmpneh",
+  "llvm.ppc.altivec.vcmpneh.p",
+  "llvm.ppc.altivec.vcmpnew",
+  "llvm.ppc.altivec.vcmpnew.p",
+  "llvm.ppc.altivec.vcmpnezb",
+  "llvm.ppc.altivec.vcmpnezb.p",
+  "llvm.ppc.altivec.vcmpnezh",
+  "llvm.ppc.altivec.vcmpnezh.p",
+  "llvm.ppc.altivec.vcmpnezw",
+  "llvm.ppc.altivec.vcmpnezw.p",
+  "llvm.ppc.altivec.vctsxs",
+  "llvm.ppc.altivec.vctuxs",
+  "llvm.ppc.altivec.vctzlsbb",
+  "llvm.ppc.altivec.vexptefp",
+  "llvm.ppc.altivec.vgbbd",
+  "llvm.ppc.altivec.vlogefp",
+  "llvm.ppc.altivec.vmaddfp",
+  "llvm.ppc.altivec.vmaxfp",
+  "llvm.ppc.altivec.vmaxsb",
+  "llvm.ppc.altivec.vmaxsd",
+  "llvm.ppc.altivec.vmaxsh",
+  "llvm.ppc.altivec.vmaxsw",
+  "llvm.ppc.altivec.vmaxub",
+  "llvm.ppc.altivec.vmaxud",
+  "llvm.ppc.altivec.vmaxuh",
+  "llvm.ppc.altivec.vmaxuw",
+  "llvm.ppc.altivec.vmhaddshs",
+  "llvm.ppc.altivec.vmhraddshs",
+  "llvm.ppc.altivec.vminfp",
+  "llvm.ppc.altivec.vminsb",
+  "llvm.ppc.altivec.vminsd",
+  "llvm.ppc.altivec.vminsh",
+  "llvm.ppc.altivec.vminsw",
+  "llvm.ppc.altivec.vminub",
+  "llvm.ppc.altivec.vminud",
+  "llvm.ppc.altivec.vminuh",
+  "llvm.ppc.altivec.vminuw",
+  "llvm.ppc.altivec.vmladduhm",
+  "llvm.ppc.altivec.vmsummbm",
+  "llvm.ppc.altivec.vmsumshm",
+  "llvm.ppc.altivec.vmsumshs",
+  "llvm.ppc.altivec.vmsumubm",
+  "llvm.ppc.altivec.vmsumuhm",
+  "llvm.ppc.altivec.vmsumuhs",
+  "llvm.ppc.altivec.vmulesb",
+  "llvm.ppc.altivec.vmulesh",
+  "llvm.ppc.altivec.vmulesw",
+  "llvm.ppc.altivec.vmuleub",
+  "llvm.ppc.altivec.vmuleuh",
+  "llvm.ppc.altivec.vmuleuw",
+  "llvm.ppc.altivec.vmulosb",
+  "llvm.ppc.altivec.vmulosh",
+  "llvm.ppc.altivec.vmulosw",
+  "llvm.ppc.altivec.vmuloub",
+  "llvm.ppc.altivec.vmulouh",
+  "llvm.ppc.altivec.vmulouw",
+  "llvm.ppc.altivec.vnmsubfp",
+  "llvm.ppc.altivec.vperm",
+  "llvm.ppc.altivec.vpkpx",
+  "llvm.ppc.altivec.vpksdss",
+  "llvm.ppc.altivec.vpksdus",
+  "llvm.ppc.altivec.vpkshss",
+  "llvm.ppc.altivec.vpkshus",
+  "llvm.ppc.altivec.vpkswss",
+  "llvm.ppc.altivec.vpkswus",
+  "llvm.ppc.altivec.vpkudus",
+  "llvm.ppc.altivec.vpkuhus",
+  "llvm.ppc.altivec.vpkuwus",
+  "llvm.ppc.altivec.vprtybd",
+  "llvm.ppc.altivec.vprtybq",
+  "llvm.ppc.altivec.vprtybw",
+  "llvm.ppc.altivec.vrefp",
+  "llvm.ppc.altivec.vrfim",
+  "llvm.ppc.altivec.vrfin",
+  "llvm.ppc.altivec.vrfip",
+  "llvm.ppc.altivec.vrfiz",
+  "llvm.ppc.altivec.vrlb",
+  "llvm.ppc.altivec.vrld",
+  "llvm.ppc.altivec.vrldmi",
+  "llvm.ppc.altivec.vrldnm",
+  "llvm.ppc.altivec.vrlh",
+  "llvm.ppc.altivec.vrlw",
+  "llvm.ppc.altivec.vrlwmi",
+  "llvm.ppc.altivec.vrlwnm",
+  "llvm.ppc.altivec.vrsqrtefp",
+  "llvm.ppc.altivec.vsel",
+  "llvm.ppc.altivec.vsl",
+  "llvm.ppc.altivec.vslb",
+  "llvm.ppc.altivec.vslh",
+  "llvm.ppc.altivec.vslo",
+  "llvm.ppc.altivec.vslv",
+  "llvm.ppc.altivec.vslw",
+  "llvm.ppc.altivec.vsr",
+  "llvm.ppc.altivec.vsrab",
+  "llvm.ppc.altivec.vsrah",
+  "llvm.ppc.altivec.vsraw",
+  "llvm.ppc.altivec.vsrb",
+  "llvm.ppc.altivec.vsrh",
+  "llvm.ppc.altivec.vsro",
+  "llvm.ppc.altivec.vsrv",
+  "llvm.ppc.altivec.vsrw",
+  "llvm.ppc.altivec.vsubcuq",
+  "llvm.ppc.altivec.vsubcuw",
+  "llvm.ppc.altivec.vsubecuq",
+  "llvm.ppc.altivec.vsubeuqm",
+  "llvm.ppc.altivec.vsubsbs",
+  "llvm.ppc.altivec.vsubshs",
+  "llvm.ppc.altivec.vsubsws",
+  "llvm.ppc.altivec.vsububs",
+  "llvm.ppc.altivec.vsubuhs",
+  "llvm.ppc.altivec.vsubuws",
+  "llvm.ppc.altivec.vsum2sws",
+  "llvm.ppc.altivec.vsum4sbs",
+  "llvm.ppc.altivec.vsum4shs",
+  "llvm.ppc.altivec.vsum4ubs",
+  "llvm.ppc.altivec.vsumsws",
+  "llvm.ppc.altivec.vupkhpx",
+  "llvm.ppc.altivec.vupkhsb",
+  "llvm.ppc.altivec.vupkhsh",
+  "llvm.ppc.altivec.vupkhsw",
+  "llvm.ppc.altivec.vupklpx",
+  "llvm.ppc.altivec.vupklsb",
+  "llvm.ppc.altivec.vupklsh",
+  "llvm.ppc.altivec.vupklsw",
+  "llvm.ppc.bpermd",
+  "llvm.ppc.cfence",
+  "llvm.ppc.dcba",
+  "llvm.ppc.dcbf",
+  "llvm.ppc.dcbi",
+  "llvm.ppc.dcbst",
+  "llvm.ppc.dcbt",
+  "llvm.ppc.dcbtst",
+  "llvm.ppc.dcbz",
+  "llvm.ppc.dcbzl",
+  "llvm.ppc.divde",
+  "llvm.ppc.divdeu",
+  "llvm.ppc.divf128.round.to.odd",
+  "llvm.ppc.divwe",
+  "llvm.ppc.divweu",
+  "llvm.ppc.fmaf128.round.to.odd",
+  "llvm.ppc.get.texasr",
+  "llvm.ppc.get.texasru",
+  "llvm.ppc.get.tfhar",
+  "llvm.ppc.get.tfiar",
+  "llvm.ppc.is.decremented.ctr.nonzero",
+  "llvm.ppc.lwsync",
+  "llvm.ppc.mtctr",
+  "llvm.ppc.mulf128.round.to.odd",
+  "llvm.ppc.qpx.qvfabs",
+  "llvm.ppc.qpx.qvfadd",
+  "llvm.ppc.qpx.qvfadds",
+  "llvm.ppc.qpx.qvfcfid",
+  "llvm.ppc.qpx.qvfcfids",
+  "llvm.ppc.qpx.qvfcfidu",
+  "llvm.ppc.qpx.qvfcfidus",
+  "llvm.ppc.qpx.qvfcmpeq",
+  "llvm.ppc.qpx.qvfcmpgt",
+  "llvm.ppc.qpx.qvfcmplt",
+  "llvm.ppc.qpx.qvfcpsgn",
+  "llvm.ppc.qpx.qvfctid",
+  "llvm.ppc.qpx.qvfctidu",
+  "llvm.ppc.qpx.qvfctiduz",
+  "llvm.ppc.qpx.qvfctidz",
+  "llvm.ppc.qpx.qvfctiw",
+  "llvm.ppc.qpx.qvfctiwu",
+  "llvm.ppc.qpx.qvfctiwuz",
+  "llvm.ppc.qpx.qvfctiwz",
+  "llvm.ppc.qpx.qvflogical",
+  "llvm.ppc.qpx.qvfmadd",
+  "llvm.ppc.qpx.qvfmadds",
+  "llvm.ppc.qpx.qvfmsub",
+  "llvm.ppc.qpx.qvfmsubs",
+  "llvm.ppc.qpx.qvfmul",
+  "llvm.ppc.qpx.qvfmuls",
+  "llvm.ppc.qpx.qvfnabs",
+  "llvm.ppc.qpx.qvfneg",
+  "llvm.ppc.qpx.qvfnmadd",
+  "llvm.ppc.qpx.qvfnmadds",
+  "llvm.ppc.qpx.qvfnmsub",
+  "llvm.ppc.qpx.qvfnmsubs",
+  "llvm.ppc.qpx.qvfperm",
+  "llvm.ppc.qpx.qvfre",
+  "llvm.ppc.qpx.qvfres",
+  "llvm.ppc.qpx.qvfrim",
+  "llvm.ppc.qpx.qvfrin",
+  "llvm.ppc.qpx.qvfrip",
+  "llvm.ppc.qpx.qvfriz",
+  "llvm.ppc.qpx.qvfrsp",
+  "llvm.ppc.qpx.qvfrsqrte",
+  "llvm.ppc.qpx.qvfrsqrtes",
+  "llvm.ppc.qpx.qvfsel",
+  "llvm.ppc.qpx.qvfsub",
+  "llvm.ppc.qpx.qvfsubs",
+  "llvm.ppc.qpx.qvftstnan",
+  "llvm.ppc.qpx.qvfxmadd",
+  "llvm.ppc.qpx.qvfxmadds",
+  "llvm.ppc.qpx.qvfxmul",
+  "llvm.ppc.qpx.qvfxmuls",
+  "llvm.ppc.qpx.qvfxxcpnmadd",
+  "llvm.ppc.qpx.qvfxxcpnmadds",
+  "llvm.ppc.qpx.qvfxxmadd",
+  "llvm.ppc.qpx.qvfxxmadds",
+  "llvm.ppc.qpx.qvfxxnpmadd",
+  "llvm.ppc.qpx.qvfxxnpmadds",
+  "llvm.ppc.qpx.qvgpci",
+  "llvm.ppc.qpx.qvlfcd",
+  "llvm.ppc.qpx.qvlfcda",
+  "llvm.ppc.qpx.qvlfcs",
+  "llvm.ppc.qpx.qvlfcsa",
+  "llvm.ppc.qpx.qvlfd",
+  "llvm.ppc.qpx.qvlfda",
+  "llvm.ppc.qpx.qvlfiwa",
+  "llvm.ppc.qpx.qvlfiwaa",
+  "llvm.ppc.qpx.qvlfiwz",
+  "llvm.ppc.qpx.qvlfiwza",
+  "llvm.ppc.qpx.qvlfs",
+  "llvm.ppc.qpx.qvlfsa",
+  "llvm.ppc.qpx.qvlpcld",
+  "llvm.ppc.qpx.qvlpcls",
+  "llvm.ppc.qpx.qvlpcrd",
+  "llvm.ppc.qpx.qvlpcrs",
+  "llvm.ppc.qpx.qvstfcd",
+  "llvm.ppc.qpx.qvstfcda",
+  "llvm.ppc.qpx.qvstfcs",
+  "llvm.ppc.qpx.qvstfcsa",
+  "llvm.ppc.qpx.qvstfd",
+  "llvm.ppc.qpx.qvstfda",
+  "llvm.ppc.qpx.qvstfiw",
+  "llvm.ppc.qpx.qvstfiwa",
+  "llvm.ppc.qpx.qvstfs",
+  "llvm.ppc.qpx.qvstfsa",
+  "llvm.ppc.set.texasr",
+  "llvm.ppc.set.texasru",
+  "llvm.ppc.set.tfhar",
+  "llvm.ppc.set.tfiar",
+  "llvm.ppc.sqrtf128.round.to.odd",
+  "llvm.ppc.subf128.round.to.odd",
+  "llvm.ppc.sync",
+  "llvm.ppc.tabort",
+  "llvm.ppc.tabortdc",
+  "llvm.ppc.tabortdci",
+  "llvm.ppc.tabortwc",
+  "llvm.ppc.tabortwci",
+  "llvm.ppc.tbegin",
+  "llvm.ppc.tcheck",
+  "llvm.ppc.tend",
+  "llvm.ppc.tendall",
+  "llvm.ppc.trechkpt",
+  "llvm.ppc.treclaim",
+  "llvm.ppc.tresume",
+  "llvm.ppc.truncf128.round.to.odd",
+  "llvm.ppc.tsr",
+  "llvm.ppc.tsuspend",
+  "llvm.ppc.ttest",
+  "llvm.ppc.vsx.lxvd2x",
+  "llvm.ppc.vsx.lxvd2x.be",
+  "llvm.ppc.vsx.lxvl",
+  "llvm.ppc.vsx.lxvll",
+  "llvm.ppc.vsx.lxvw4x",
+  "llvm.ppc.vsx.lxvw4x.be",
+  "llvm.ppc.vsx.stxvd2x",
+  "llvm.ppc.vsx.stxvd2x.be",
+  "llvm.ppc.vsx.stxvl",
+  "llvm.ppc.vsx.stxvll",
+  "llvm.ppc.vsx.stxvw4x",
+  "llvm.ppc.vsx.stxvw4x.be",
+  "llvm.ppc.vsx.xsmaxdp",
+  "llvm.ppc.vsx.xsmindp",
+  "llvm.ppc.vsx.xvcmpeqdp",
+  "llvm.ppc.vsx.xvcmpeqdp.p",
+  "llvm.ppc.vsx.xvcmpeqsp",
+  "llvm.ppc.vsx.xvcmpeqsp.p",
+  "llvm.ppc.vsx.xvcmpgedp",
+  "llvm.ppc.vsx.xvcmpgedp.p",
+  "llvm.ppc.vsx.xvcmpgesp",
+  "llvm.ppc.vsx.xvcmpgesp.p",
+  "llvm.ppc.vsx.xvcmpgtdp",
+  "llvm.ppc.vsx.xvcmpgtdp.p",
+  "llvm.ppc.vsx.xvcmpgtsp",
+  "llvm.ppc.vsx.xvcmpgtsp.p",
+  "llvm.ppc.vsx.xvcvdpsp",
+  "llvm.ppc.vsx.xvcvdpsxws",
+  "llvm.ppc.vsx.xvcvdpuxws",
+  "llvm.ppc.vsx.xvcvhpsp",
+  "llvm.ppc.vsx.xvcvspdp",
+  "llvm.ppc.vsx.xvcvsphp",
+  "llvm.ppc.vsx.xvcvsxdsp",
+  "llvm.ppc.vsx.xvcvsxwdp",
+  "llvm.ppc.vsx.xvcvuxdsp",
+  "llvm.ppc.vsx.xvcvuxwdp",
+  "llvm.ppc.vsx.xvdivdp",
+  "llvm.ppc.vsx.xvdivsp",
+  "llvm.ppc.vsx.xviexpdp",
+  "llvm.ppc.vsx.xviexpsp",
+  "llvm.ppc.vsx.xvmaxdp",
+  "llvm.ppc.vsx.xvmaxsp",
+  "llvm.ppc.vsx.xvmindp",
+  "llvm.ppc.vsx.xvminsp",
+  "llvm.ppc.vsx.xvrdpip",
+  "llvm.ppc.vsx.xvredp",
+  "llvm.ppc.vsx.xvresp",
+  "llvm.ppc.vsx.xvrspip",
+  "llvm.ppc.vsx.xvrsqrtedp",
+  "llvm.ppc.vsx.xvrsqrtesp",
+  "llvm.ppc.vsx.xvtstdcdp",
+  "llvm.ppc.vsx.xvtstdcsp",
+  "llvm.ppc.vsx.xvxexpdp",
+  "llvm.ppc.vsx.xvxexpsp",
+  "llvm.ppc.vsx.xvxsigdp",
+  "llvm.ppc.vsx.xvxsigsp",
+  "llvm.ppc.vsx.xxextractuw",
+  "llvm.ppc.vsx.xxinsertw",
+  "llvm.ppc.vsx.xxleqv",
+  "llvm.r600.cube",
+  "llvm.r600.ddx",
+  "llvm.r600.ddy",
+  "llvm.r600.dot4",
+  "llvm.r600.group.barrier",
+  "llvm.r600.implicitarg.ptr",
+  "llvm.r600.kill",
+  "llvm.r600.rat.store.typed",
+  "llvm.r600.read.global.size.x",
+  "llvm.r600.read.global.size.y",
+  "llvm.r600.read.global.size.z",
+  "llvm.r600.read.local.size.x",
+  "llvm.r600.read.local.size.y",
+  "llvm.r600.read.local.size.z",
+  "llvm.r600.read.ngroups.x",
+  "llvm.r600.read.ngroups.y",
+  "llvm.r600.read.ngroups.z",
+  "llvm.r600.read.tgid.x",
+  "llvm.r600.read.tgid.y",
+  "llvm.r600.read.tgid.z",
+  "llvm.r600.read.tidig.x",
+  "llvm.r600.read.tidig.y",
+  "llvm.r600.read.tidig.z",
+  "llvm.r600.recipsqrt.clamped",
+  "llvm.r600.recipsqrt.ieee",
+  "llvm.r600.store.stream.output",
+  "llvm.r600.store.swizzle",
+  "llvm.r600.tex",
+  "llvm.r600.texc",
+  "llvm.r600.txb",
+  "llvm.r600.txbc",
+  "llvm.r600.txf",
+  "llvm.r600.txl",
+  "llvm.r600.txlc",
+  "llvm.r600.txq",
+  "llvm.s390.efpc",
+  "llvm.s390.etnd",
+  "llvm.s390.lcbb",
+  "llvm.s390.ntstg",
+  "llvm.s390.ppa.txassist",
+  "llvm.s390.sfpc",
+  "llvm.s390.tabort",
+  "llvm.s390.tbegin",
+  "llvm.s390.tbegin.nofloat",
+  "llvm.s390.tbeginc",
+  "llvm.s390.tdc",
+  "llvm.s390.tend",
+  "llvm.s390.vaccb",
+  "llvm.s390.vacccq",
+  "llvm.s390.vaccf",
+  "llvm.s390.vaccg",
+  "llvm.s390.vacch",
+  "llvm.s390.vaccq",
+  "llvm.s390.vacq",
+  "llvm.s390.vaq",
+  "llvm.s390.vavgb",
+  "llvm.s390.vavgf",
+  "llvm.s390.vavgg",
+  "llvm.s390.vavgh",
+  "llvm.s390.vavglb",
+  "llvm.s390.vavglf",
+  "llvm.s390.vavglg",
+  "llvm.s390.vavglh",
+  "llvm.s390.vbperm",
+  "llvm.s390.vceqbs",
+  "llvm.s390.vceqfs",
+  "llvm.s390.vceqgs",
+  "llvm.s390.vceqhs",
+  "llvm.s390.vchbs",
+  "llvm.s390.vchfs",
+  "llvm.s390.vchgs",
+  "llvm.s390.vchhs",
+  "llvm.s390.vchlbs",
+  "llvm.s390.vchlfs",
+  "llvm.s390.vchlgs",
+  "llvm.s390.vchlhs",
+  "llvm.s390.vcksm",
+  "llvm.s390.verimb",
+  "llvm.s390.verimf",
+  "llvm.s390.verimg",
+  "llvm.s390.verimh",
+  "llvm.s390.verllb",
+  "llvm.s390.verllf",
+  "llvm.s390.verllg",
+  "llvm.s390.verllh",
+  "llvm.s390.verllvb",
+  "llvm.s390.verllvf",
+  "llvm.s390.verllvg",
+  "llvm.s390.verllvh",
+  "llvm.s390.vfaeb",
+  "llvm.s390.vfaebs",
+  "llvm.s390.vfaef",
+  "llvm.s390.vfaefs",
+  "llvm.s390.vfaeh",
+  "llvm.s390.vfaehs",
+  "llvm.s390.vfaezb",
+  "llvm.s390.vfaezbs",
+  "llvm.s390.vfaezf",
+  "llvm.s390.vfaezfs",
+  "llvm.s390.vfaezh",
+  "llvm.s390.vfaezhs",
+  "llvm.s390.vfcedbs",
+  "llvm.s390.vfcesbs",
+  "llvm.s390.vfchdbs",
+  "llvm.s390.vfchedbs",
+  "llvm.s390.vfchesbs",
+  "llvm.s390.vfchsbs",
+  "llvm.s390.vfeeb",
+  "llvm.s390.vfeebs",
+  "llvm.s390.vfeef",
+  "llvm.s390.vfeefs",
+  "llvm.s390.vfeeh",
+  "llvm.s390.vfeehs",
+  "llvm.s390.vfeezb",
+  "llvm.s390.vfeezbs",
+  "llvm.s390.vfeezf",
+  "llvm.s390.vfeezfs",
+  "llvm.s390.vfeezh",
+  "llvm.s390.vfeezhs",
+  "llvm.s390.vfeneb",
+  "llvm.s390.vfenebs",
+  "llvm.s390.vfenef",
+  "llvm.s390.vfenefs",
+  "llvm.s390.vfeneh",
+  "llvm.s390.vfenehs",
+  "llvm.s390.vfenezb",
+  "llvm.s390.vfenezbs",
+  "llvm.s390.vfenezf",
+  "llvm.s390.vfenezfs",
+  "llvm.s390.vfenezh",
+  "llvm.s390.vfenezhs",
+  "llvm.s390.vfidb",
+  "llvm.s390.vfisb",
+  "llvm.s390.vfmaxdb",
+  "llvm.s390.vfmaxsb",
+  "llvm.s390.vfmindb",
+  "llvm.s390.vfminsb",
+  "llvm.s390.vftcidb",
+  "llvm.s390.vftcisb",
+  "llvm.s390.vgfmab",
+  "llvm.s390.vgfmaf",
+  "llvm.s390.vgfmag",
+  "llvm.s390.vgfmah",
+  "llvm.s390.vgfmb",
+  "llvm.s390.vgfmf",
+  "llvm.s390.vgfmg",
+  "llvm.s390.vgfmh",
+  "llvm.s390.vistrb",
+  "llvm.s390.vistrbs",
+  "llvm.s390.vistrf",
+  "llvm.s390.vistrfs",
+  "llvm.s390.vistrh",
+  "llvm.s390.vistrhs",
+  "llvm.s390.vlbb",
+  "llvm.s390.vll",
+  "llvm.s390.vlrl",
+  "llvm.s390.vmaeb",
+  "llvm.s390.vmaef",
+  "llvm.s390.vmaeh",
+  "llvm.s390.vmahb",
+  "llvm.s390.vmahf",
+  "llvm.s390.vmahh",
+  "llvm.s390.vmaleb",
+  "llvm.s390.vmalef",
+  "llvm.s390.vmaleh",
+  "llvm.s390.vmalhb",
+  "llvm.s390.vmalhf",
+  "llvm.s390.vmalhh",
+  "llvm.s390.vmalob",
+  "llvm.s390.vmalof",
+  "llvm.s390.vmaloh",
+  "llvm.s390.vmaob",
+  "llvm.s390.vmaof",
+  "llvm.s390.vmaoh",
+  "llvm.s390.vmeb",
+  "llvm.s390.vmef",
+  "llvm.s390.vmeh",
+  "llvm.s390.vmhb",
+  "llvm.s390.vmhf",
+  "llvm.s390.vmhh",
+  "llvm.s390.vmleb",
+  "llvm.s390.vmlef",
+  "llvm.s390.vmleh",
+  "llvm.s390.vmlhb",
+  "llvm.s390.vmlhf",
+  "llvm.s390.vmlhh",
+  "llvm.s390.vmlob",
+  "llvm.s390.vmlof",
+  "llvm.s390.vmloh",
+  "llvm.s390.vmob",
+  "llvm.s390.vmof",
+  "llvm.s390.vmoh",
+  "llvm.s390.vmslg",
+  "llvm.s390.vpdi",
+  "llvm.s390.vperm",
+  "llvm.s390.vpklsf",
+  "llvm.s390.vpklsfs",
+  "llvm.s390.vpklsg",
+  "llvm.s390.vpklsgs",
+  "llvm.s390.vpklsh",
+  "llvm.s390.vpklshs",
+  "llvm.s390.vpksf",
+  "llvm.s390.vpksfs",
+  "llvm.s390.vpksg",
+  "llvm.s390.vpksgs",
+  "llvm.s390.vpksh",
+  "llvm.s390.vpkshs",
+  "llvm.s390.vsbcbiq",
+  "llvm.s390.vsbiq",
+  "llvm.s390.vscbib",
+  "llvm.s390.vscbif",
+  "llvm.s390.vscbig",
+  "llvm.s390.vscbih",
+  "llvm.s390.vscbiq",
+  "llvm.s390.vsl",
+  "llvm.s390.vslb",
+  "llvm.s390.vsldb",
+  "llvm.s390.vsq",
+  "llvm.s390.vsra",
+  "llvm.s390.vsrab",
+  "llvm.s390.vsrl",
+  "llvm.s390.vsrlb",
+  "llvm.s390.vstl",
+  "llvm.s390.vstrcb",
+  "llvm.s390.vstrcbs",
+  "llvm.s390.vstrcf",
+  "llvm.s390.vstrcfs",
+  "llvm.s390.vstrch",
+  "llvm.s390.vstrchs",
+  "llvm.s390.vstrczb",
+  "llvm.s390.vstrczbs",
+  "llvm.s390.vstrczf",
+  "llvm.s390.vstrczfs",
+  "llvm.s390.vstrczh",
+  "llvm.s390.vstrczhs",
+  "llvm.s390.vstrl",
+  "llvm.s390.vsumb",
+  "llvm.s390.vsumgf",
+  "llvm.s390.vsumgh",
+  "llvm.s390.vsumh",
+  "llvm.s390.vsumqf",
+  "llvm.s390.vsumqg",
+  "llvm.s390.vtm",
+  "llvm.s390.vuphb",
+  "llvm.s390.vuphf",
+  "llvm.s390.vuphh",
+  "llvm.s390.vuplb",
+  "llvm.s390.vuplf",
+  "llvm.s390.vuplhb",
+  "llvm.s390.vuplhf",
+  "llvm.s390.vuplhh",
+  "llvm.s390.vuplhw",
+  "llvm.s390.vupllb",
+  "llvm.s390.vupllf",
+  "llvm.s390.vupllh",
+  "llvm.wasm.atomic.notify",
+  "llvm.wasm.atomic.wait.i32",
+  "llvm.wasm.atomic.wait.i64",
+  "llvm.wasm.catch",
+  "llvm.wasm.current.memory",
+  "llvm.wasm.get.ehselector",
+  "llvm.wasm.get.exception",
+  "llvm.wasm.grow.memory",
+  "llvm.wasm.landingpad.index",
+  "llvm.wasm.lsda",
+  "llvm.wasm.mem.grow",
+  "llvm.wasm.mem.size",
+  "llvm.wasm.memory.grow",
+  "llvm.wasm.memory.size",
+  "llvm.wasm.rethrow",
+  "llvm.wasm.throw",
+  "llvm.x86.3dnow.pavgusb",
+  "llvm.x86.3dnow.pf2id",
+  "llvm.x86.3dnow.pfacc",
+  "llvm.x86.3dnow.pfadd",
+  "llvm.x86.3dnow.pfcmpeq",
+  "llvm.x86.3dnow.pfcmpge",
+  "llvm.x86.3dnow.pfcmpgt",
+  "llvm.x86.3dnow.pfmax",
+  "llvm.x86.3dnow.pfmin",
+  "llvm.x86.3dnow.pfmul",
+  "llvm.x86.3dnow.pfrcp",
+  "llvm.x86.3dnow.pfrcpit1",
+  "llvm.x86.3dnow.pfrcpit2",
+  "llvm.x86.3dnow.pfrsqit1",
+  "llvm.x86.3dnow.pfrsqrt",
+  "llvm.x86.3dnow.pfsub",
+  "llvm.x86.3dnow.pfsubr",
+  "llvm.x86.3dnow.pi2fd",
+  "llvm.x86.3dnow.pmulhrw",
+  "llvm.x86.3dnowa.pf2iw",
+  "llvm.x86.3dnowa.pfnacc",
+  "llvm.x86.3dnowa.pfpnacc",
+  "llvm.x86.3dnowa.pi2fw",
+  "llvm.x86.3dnowa.pswapd",
+  "llvm.x86.addcarry.u32",
+  "llvm.x86.addcarry.u64",
+  "llvm.x86.addcarryx.u32",
+  "llvm.x86.addcarryx.u64",
+  "llvm.x86.aesni.aesdec",
+  "llvm.x86.aesni.aesdec.256",
+  "llvm.x86.aesni.aesdec.512",
+  "llvm.x86.aesni.aesdeclast",
+  "llvm.x86.aesni.aesdeclast.256",
+  "llvm.x86.aesni.aesdeclast.512",
+  "llvm.x86.aesni.aesenc",
+  "llvm.x86.aesni.aesenc.256",
+  "llvm.x86.aesni.aesenc.512",
+  "llvm.x86.aesni.aesenclast",
+  "llvm.x86.aesni.aesenclast.256",
+  "llvm.x86.aesni.aesenclast.512",
+  "llvm.x86.aesni.aesimc",
+  "llvm.x86.aesni.aeskeygenassist",
+  "llvm.x86.avx.addsub.pd.256",
+  "llvm.x86.avx.addsub.ps.256",
+  "llvm.x86.avx.blendv.pd.256",
+  "llvm.x86.avx.blendv.ps.256",
+  "llvm.x86.avx.cmp.pd.256",
+  "llvm.x86.avx.cmp.ps.256",
+  "llvm.x86.avx.cvt.pd2.ps.256",
+  "llvm.x86.avx.cvt.pd2dq.256",
+  "llvm.x86.avx.cvt.ps2dq.256",
+  "llvm.x86.avx.cvtt.pd2dq.256",
+  "llvm.x86.avx.cvtt.ps2dq.256",
+  "llvm.x86.avx.dp.ps.256",
+  "llvm.x86.avx.hadd.pd.256",
+  "llvm.x86.avx.hadd.ps.256",
+  "llvm.x86.avx.hsub.pd.256",
+  "llvm.x86.avx.hsub.ps.256",
+  "llvm.x86.avx.ldu.dq.256",
+  "llvm.x86.avx.maskload.pd",
+  "llvm.x86.avx.maskload.pd.256",
+  "llvm.x86.avx.maskload.ps",
+  "llvm.x86.avx.maskload.ps.256",
+  "llvm.x86.avx.maskstore.pd",
+  "llvm.x86.avx.maskstore.pd.256",
+  "llvm.x86.avx.maskstore.ps",
+  "llvm.x86.avx.maskstore.ps.256",
+  "llvm.x86.avx.max.pd.256",
+  "llvm.x86.avx.max.ps.256",
+  "llvm.x86.avx.min.pd.256",
+  "llvm.x86.avx.min.ps.256",
+  "llvm.x86.avx.movmsk.pd.256",
+  "llvm.x86.avx.movmsk.ps.256",
+  "llvm.x86.avx.ptestc.256",
+  "llvm.x86.avx.ptestnzc.256",
+  "llvm.x86.avx.ptestz.256",
+  "llvm.x86.avx.rcp.ps.256",
+  "llvm.x86.avx.round.pd.256",
+  "llvm.x86.avx.round.ps.256",
+  "llvm.x86.avx.rsqrt.ps.256",
+  "llvm.x86.avx.vpermilvar.pd",
+  "llvm.x86.avx.vpermilvar.pd.256",
+  "llvm.x86.avx.vpermilvar.ps",
+  "llvm.x86.avx.vpermilvar.ps.256",
+  "llvm.x86.avx.vtestc.pd",
+  "llvm.x86.avx.vtestc.pd.256",
+  "llvm.x86.avx.vtestc.ps",
+  "llvm.x86.avx.vtestc.ps.256",
+  "llvm.x86.avx.vtestnzc.pd",
+  "llvm.x86.avx.vtestnzc.pd.256",
+  "llvm.x86.avx.vtestnzc.ps",
+  "llvm.x86.avx.vtestnzc.ps.256",
+  "llvm.x86.avx.vtestz.pd",
+  "llvm.x86.avx.vtestz.pd.256",
+  "llvm.x86.avx.vtestz.ps",
+  "llvm.x86.avx.vtestz.ps.256",
+  "llvm.x86.avx.vzeroall",
+  "llvm.x86.avx.vzeroupper",
+  "llvm.x86.avx2.gather.d.d",
+  "llvm.x86.avx2.gather.d.d.256",
+  "llvm.x86.avx2.gather.d.pd",
+  "llvm.x86.avx2.gather.d.pd.256",
+  "llvm.x86.avx2.gather.d.ps",
+  "llvm.x86.avx2.gather.d.ps.256",
+  "llvm.x86.avx2.gather.d.q",
+  "llvm.x86.avx2.gather.d.q.256",
+  "llvm.x86.avx2.gather.q.d",
+  "llvm.x86.avx2.gather.q.d.256",
+  "llvm.x86.avx2.gather.q.pd",
+  "llvm.x86.avx2.gather.q.pd.256",
+  "llvm.x86.avx2.gather.q.ps",
+  "llvm.x86.avx2.gather.q.ps.256",
+  "llvm.x86.avx2.gather.q.q",
+  "llvm.x86.avx2.gather.q.q.256",
+  "llvm.x86.avx2.maskload.d",
+  "llvm.x86.avx2.maskload.d.256",
+  "llvm.x86.avx2.maskload.q",
+  "llvm.x86.avx2.maskload.q.256",
+  "llvm.x86.avx2.maskstore.d",
+  "llvm.x86.avx2.maskstore.d.256",
+  "llvm.x86.avx2.maskstore.q",
+  "llvm.x86.avx2.maskstore.q.256",
+  "llvm.x86.avx2.mpsadbw",
+  "llvm.x86.avx2.packssdw",
+  "llvm.x86.avx2.packsswb",
+  "llvm.x86.avx2.packusdw",
+  "llvm.x86.avx2.packuswb",
+  "llvm.x86.avx2.padds.b",
+  "llvm.x86.avx2.padds.w",
+  "llvm.x86.avx2.paddus.b",
+  "llvm.x86.avx2.paddus.w",
+  "llvm.x86.avx2.pblendvb",
+  "llvm.x86.avx2.permd",
+  "llvm.x86.avx2.permps",
+  "llvm.x86.avx2.phadd.d",
+  "llvm.x86.avx2.phadd.sw",
+  "llvm.x86.avx2.phadd.w",
+  "llvm.x86.avx2.phsub.d",
+  "llvm.x86.avx2.phsub.sw",
+  "llvm.x86.avx2.phsub.w",
+  "llvm.x86.avx2.pmadd.ub.sw",
+  "llvm.x86.avx2.pmadd.wd",
+  "llvm.x86.avx2.pmovmskb",
+  "llvm.x86.avx2.pmul.hr.sw",
+  "llvm.x86.avx2.pmulh.w",
+  "llvm.x86.avx2.pmulhu.w",
+  "llvm.x86.avx2.psad.bw",
+  "llvm.x86.avx2.pshuf.b",
+  "llvm.x86.avx2.psign.b",
+  "llvm.x86.avx2.psign.d",
+  "llvm.x86.avx2.psign.w",
+  "llvm.x86.avx2.psll.d",
+  "llvm.x86.avx2.psll.q",
+  "llvm.x86.avx2.psll.w",
+  "llvm.x86.avx2.pslli.d",
+  "llvm.x86.avx2.pslli.q",
+  "llvm.x86.avx2.pslli.w",
+  "llvm.x86.avx2.psllv.d",
+  "llvm.x86.avx2.psllv.d.256",
+  "llvm.x86.avx2.psllv.q",
+  "llvm.x86.avx2.psllv.q.256",
+  "llvm.x86.avx2.psra.d",
+  "llvm.x86.avx2.psra.w",
+  "llvm.x86.avx2.psrai.d",
+  "llvm.x86.avx2.psrai.w",
+  "llvm.x86.avx2.psrav.d",
+  "llvm.x86.avx2.psrav.d.256",
+  "llvm.x86.avx2.psrl.d",
+  "llvm.x86.avx2.psrl.q",
+  "llvm.x86.avx2.psrl.w",
+  "llvm.x86.avx2.psrli.d",
+  "llvm.x86.avx2.psrli.q",
+  "llvm.x86.avx2.psrli.w",
+  "llvm.x86.avx2.psrlv.d",
+  "llvm.x86.avx2.psrlv.d.256",
+  "llvm.x86.avx2.psrlv.q",
+  "llvm.x86.avx2.psrlv.q.256",
+  "llvm.x86.avx2.psubs.b",
+  "llvm.x86.avx2.psubs.w",
+  "llvm.x86.avx2.psubus.b",
+  "llvm.x86.avx2.psubus.w",
+  "llvm.x86.avx512.add.pd.512",
+  "llvm.x86.avx512.add.ps.512",
+  "llvm.x86.avx512.broadcastmb.128",
+  "llvm.x86.avx512.broadcastmb.256",
+  "llvm.x86.avx512.broadcastmb.512",
+  "llvm.x86.avx512.broadcastmw.128",
+  "llvm.x86.avx512.broadcastmw.256",
+  "llvm.x86.avx512.broadcastmw.512",
+  "llvm.x86.avx512.cmp.pd.128",
+  "llvm.x86.avx512.cmp.pd.256",
+  "llvm.x86.avx512.cmp.pd.512",
+  "llvm.x86.avx512.cmp.ps.128",
+  "llvm.x86.avx512.cmp.ps.256",
+  "llvm.x86.avx512.cmp.ps.512",
+  "llvm.x86.avx512.cvtsi2sd64",
+  "llvm.x86.avx512.cvtsi2ss32",
+  "llvm.x86.avx512.cvtsi2ss64",
+  "llvm.x86.avx512.cvttsd2si",
+  "llvm.x86.avx512.cvttsd2si64",
+  "llvm.x86.avx512.cvttsd2usi",
+  "llvm.x86.avx512.cvttsd2usi64",
+  "llvm.x86.avx512.cvttss2si",
+  "llvm.x86.avx512.cvttss2si64",
+  "llvm.x86.avx512.cvttss2usi",
+  "llvm.x86.avx512.cvttss2usi64",
+  "llvm.x86.avx512.cvtusi2ss",
+  "llvm.x86.avx512.cvtusi642sd",
+  "llvm.x86.avx512.cvtusi642ss",
+  "llvm.x86.avx512.dbpsadbw.128",
+  "llvm.x86.avx512.dbpsadbw.256",
+  "llvm.x86.avx512.dbpsadbw.512",
+  "llvm.x86.avx512.div.pd.512",
+  "llvm.x86.avx512.div.ps.512",
+  "llvm.x86.avx512.exp2.pd",
+  "llvm.x86.avx512.exp2.ps",
+  "llvm.x86.avx512.fpclass.pd.128",
+  "llvm.x86.avx512.fpclass.pd.256",
+  "llvm.x86.avx512.fpclass.pd.512",
+  "llvm.x86.avx512.fpclass.ps.128",
+  "llvm.x86.avx512.fpclass.ps.256",
+  "llvm.x86.avx512.fpclass.ps.512",
+  "llvm.x86.avx512.gather.dpd.512",
+  "llvm.x86.avx512.gather.dpi.512",
+  "llvm.x86.avx512.gather.dpq.512",
+  "llvm.x86.avx512.gather.dps.512",
+  "llvm.x86.avx512.gather.qpd.512",
+  "llvm.x86.avx512.gather.qpi.512",
+  "llvm.x86.avx512.gather.qpq.512",
+  "llvm.x86.avx512.gather.qps.512",
+  "llvm.x86.avx512.gather3div2.df",
+  "llvm.x86.avx512.gather3div2.di",
+  "llvm.x86.avx512.gather3div4.df",
+  "llvm.x86.avx512.gather3div4.di",
+  "llvm.x86.avx512.gather3div4.sf",
+  "llvm.x86.avx512.gather3div4.si",
+  "llvm.x86.avx512.gather3div8.sf",
+  "llvm.x86.avx512.gather3div8.si",
+  "llvm.x86.avx512.gather3siv2.df",
+  "llvm.x86.avx512.gather3siv2.di",
+  "llvm.x86.avx512.gather3siv4.df",
+  "llvm.x86.avx512.gather3siv4.di",
+  "llvm.x86.avx512.gather3siv4.sf",
+  "llvm.x86.avx512.gather3siv4.si",
+  "llvm.x86.avx512.gather3siv8.sf",
+  "llvm.x86.avx512.gather3siv8.si",
+  "llvm.x86.avx512.gatherpf.dpd.512",
+  "llvm.x86.avx512.gatherpf.dps.512",
+  "llvm.x86.avx512.gatherpf.qpd.512",
+  "llvm.x86.avx512.gatherpf.qps.512",
+  "llvm.x86.avx512.mask.add.sd.round",
+  "llvm.x86.avx512.mask.add.ss.round",
+  "llvm.x86.avx512.mask.cmp.sd",
+  "llvm.x86.avx512.mask.cmp.ss",
+  "llvm.x86.avx512.mask.compress.b.128",
+  "llvm.x86.avx512.mask.compress.b.256",
+  "llvm.x86.avx512.mask.compress.b.512",
+  "llvm.x86.avx512.mask.compress.d.128",
+  "llvm.x86.avx512.mask.compress.d.256",
+  "llvm.x86.avx512.mask.compress.d.512",
+  "llvm.x86.avx512.mask.compress.pd.128",
+  "llvm.x86.avx512.mask.compress.pd.256",
+  "llvm.x86.avx512.mask.compress.pd.512",
+  "llvm.x86.avx512.mask.compress.ps.128",
+  "llvm.x86.avx512.mask.compress.ps.256",
+  "llvm.x86.avx512.mask.compress.ps.512",
+  "llvm.x86.avx512.mask.compress.q.128",
+  "llvm.x86.avx512.mask.compress.q.256",
+  "llvm.x86.avx512.mask.compress.q.512",
+  "llvm.x86.avx512.mask.compress.w.128",
+  "llvm.x86.avx512.mask.compress.w.256",
+  "llvm.x86.avx512.mask.compress.w.512",
+  "llvm.x86.avx512.mask.conflict.d.128",
+  "llvm.x86.avx512.mask.conflict.d.256",
+  "llvm.x86.avx512.mask.conflict.d.512",
+  "llvm.x86.avx512.mask.conflict.q.128",
+  "llvm.x86.avx512.mask.conflict.q.256",
+  "llvm.x86.avx512.mask.conflict.q.512",
+  "llvm.x86.avx512.mask.cvtdq2ps.512",
+  "llvm.x86.avx512.mask.cvtpd2dq.128",
+  "llvm.x86.avx512.mask.cvtpd2dq.512",
+  "llvm.x86.avx512.mask.cvtpd2ps",
+  "llvm.x86.avx512.mask.cvtpd2ps.512",
+  "llvm.x86.avx512.mask.cvtpd2qq.128",
+  "llvm.x86.avx512.mask.cvtpd2qq.256",
+  "llvm.x86.avx512.mask.cvtpd2qq.512",
+  "llvm.x86.avx512.mask.cvtpd2udq.128",
+  "llvm.x86.avx512.mask.cvtpd2udq.256",
+  "llvm.x86.avx512.mask.cvtpd2udq.512",
+  "llvm.x86.avx512.mask.cvtpd2uqq.128",
+  "llvm.x86.avx512.mask.cvtpd2uqq.256",
+  "llvm.x86.avx512.mask.cvtpd2uqq.512",
+  "llvm.x86.avx512.mask.cvtps2dq.128",
+  "llvm.x86.avx512.mask.cvtps2dq.256",
+  "llvm.x86.avx512.mask.cvtps2dq.512",
+  "llvm.x86.avx512.mask.cvtps2pd.512",
+  "llvm.x86.avx512.mask.cvtps2qq.128",
+  "llvm.x86.avx512.mask.cvtps2qq.256",
+  "llvm.x86.avx512.mask.cvtps2qq.512",
+  "llvm.x86.avx512.mask.cvtps2udq.128",
+  "llvm.x86.avx512.mask.cvtps2udq.256",
+  "llvm.x86.avx512.mask.cvtps2udq.512",
+  "llvm.x86.avx512.mask.cvtps2uqq.128",
+  "llvm.x86.avx512.mask.cvtps2uqq.256",
+  "llvm.x86.avx512.mask.cvtps2uqq.512",
+  "llvm.x86.avx512.mask.cvtqq2pd.512",
+  "llvm.x86.avx512.mask.cvtqq2ps.128",
+  "llvm.x86.avx512.mask.cvtqq2ps.256",
+  "llvm.x86.avx512.mask.cvtqq2ps.512",
+  "llvm.x86.avx512.mask.cvtsd2ss.round",
+  "llvm.x86.avx512.mask.cvtss2sd.round",
+  "llvm.x86.avx512.mask.cvttpd2dq.128",
+  "llvm.x86.avx512.mask.cvttpd2dq.512",
+  "llvm.x86.avx512.mask.cvttpd2qq.128",
+  "llvm.x86.avx512.mask.cvttpd2qq.256",
+  "llvm.x86.avx512.mask.cvttpd2qq.512",
+  "llvm.x86.avx512.mask.cvttpd2udq.128",
+  "llvm.x86.avx512.mask.cvttpd2udq.256",
+  "llvm.x86.avx512.mask.cvttpd2udq.512",
+  "llvm.x86.avx512.mask.cvttpd2uqq.128",
+  "llvm.x86.avx512.mask.cvttpd2uqq.256",
+  "llvm.x86.avx512.mask.cvttpd2uqq.512",
+  "llvm.x86.avx512.mask.cvttps2dq.512",
+  "llvm.x86.avx512.mask.cvttps2qq.128",
+  "llvm.x86.avx512.mask.cvttps2qq.256",
+  "llvm.x86.avx512.mask.cvttps2qq.512",
+  "llvm.x86.avx512.mask.cvttps2udq.128",
+  "llvm.x86.avx512.mask.cvttps2udq.256",
+  "llvm.x86.avx512.mask.cvttps2udq.512",
+  "llvm.x86.avx512.mask.cvttps2uqq.128",
+  "llvm.x86.avx512.mask.cvttps2uqq.256",
+  "llvm.x86.avx512.mask.cvttps2uqq.512",
+  "llvm.x86.avx512.mask.cvtudq2ps.512",
+  "llvm.x86.avx512.mask.cvtuqq2pd.512",
+  "llvm.x86.avx512.mask.cvtuqq2ps.128",
+  "llvm.x86.avx512.mask.cvtuqq2ps.256",
+  "llvm.x86.avx512.mask.cvtuqq2ps.512",
+  "llvm.x86.avx512.mask.div.sd.round",
+  "llvm.x86.avx512.mask.div.ss.round",
+  "llvm.x86.avx512.mask.expand.b.128",
+  "llvm.x86.avx512.mask.expand.b.256",
+  "llvm.x86.avx512.mask.expand.b.512",
+  "llvm.x86.avx512.mask.expand.d.128",
+  "llvm.x86.avx512.mask.expand.d.256",
+  "llvm.x86.avx512.mask.expand.d.512",
+  "llvm.x86.avx512.mask.expand.pd.128",
+  "llvm.x86.avx512.mask.expand.pd.256",
+  "llvm.x86.avx512.mask.expand.pd.512",
+  "llvm.x86.avx512.mask.expand.ps.128",
+  "llvm.x86.avx512.mask.expand.ps.256",
+  "llvm.x86.avx512.mask.expand.ps.512",
+  "llvm.x86.avx512.mask.expand.q.128",
+  "llvm.x86.avx512.mask.expand.q.256",
+  "llvm.x86.avx512.mask.expand.q.512",
+  "llvm.x86.avx512.mask.expand.w.128",
+  "llvm.x86.avx512.mask.expand.w.256",
+  "llvm.x86.avx512.mask.expand.w.512",
+  "llvm.x86.avx512.mask.fixupimm.pd.128",
+  "llvm.x86.avx512.mask.fixupimm.pd.256",
+  "llvm.x86.avx512.mask.fixupimm.pd.512",
+  "llvm.x86.avx512.mask.fixupimm.ps.128",
+  "llvm.x86.avx512.mask.fixupimm.ps.256",
+  "llvm.x86.avx512.mask.fixupimm.ps.512",
+  "llvm.x86.avx512.mask.fixupimm.sd",
+  "llvm.x86.avx512.mask.fixupimm.ss",
+  "llvm.x86.avx512.mask.fpclass.sd",
+  "llvm.x86.avx512.mask.fpclass.ss",
+  "llvm.x86.avx512.mask.getexp.pd.128",
+  "llvm.x86.avx512.mask.getexp.pd.256",
+  "llvm.x86.avx512.mask.getexp.pd.512",
+  "llvm.x86.avx512.mask.getexp.ps.128",
+  "llvm.x86.avx512.mask.getexp.ps.256",
+  "llvm.x86.avx512.mask.getexp.ps.512",
+  "llvm.x86.avx512.mask.getexp.sd",
+  "llvm.x86.avx512.mask.getexp.ss",
+  "llvm.x86.avx512.mask.getmant.pd.128",
+  "llvm.x86.avx512.mask.getmant.pd.256",
+  "llvm.x86.avx512.mask.getmant.pd.512",
+  "llvm.x86.avx512.mask.getmant.ps.128",
+  "llvm.x86.avx512.mask.getmant.ps.256",
+  "llvm.x86.avx512.mask.getmant.ps.512",
+  "llvm.x86.avx512.mask.getmant.sd",
+  "llvm.x86.avx512.mask.getmant.ss",
+  "llvm.x86.avx512.mask.max.sd.round",
+  "llvm.x86.avx512.mask.max.ss.round",
+  "llvm.x86.avx512.mask.min.sd.round",
+  "llvm.x86.avx512.mask.min.ss.round",
+  "llvm.x86.avx512.mask.mul.sd.round",
+  "llvm.x86.avx512.mask.mul.ss.round",
+  "llvm.x86.avx512.mask.padds.b.128",
+  "llvm.x86.avx512.mask.padds.b.256",
+  "llvm.x86.avx512.mask.padds.b.512",
+  "llvm.x86.avx512.mask.padds.w.128",
+  "llvm.x86.avx512.mask.padds.w.256",
+  "llvm.x86.avx512.mask.padds.w.512",
+  "llvm.x86.avx512.mask.paddus.b.128",
+  "llvm.x86.avx512.mask.paddus.b.256",
+  "llvm.x86.avx512.mask.paddus.b.512",
+  "llvm.x86.avx512.mask.paddus.w.128",
+  "llvm.x86.avx512.mask.paddus.w.256",
+  "llvm.x86.avx512.mask.paddus.w.512",
+  "llvm.x86.avx512.mask.pmov.db.128",
+  "llvm.x86.avx512.mask.pmov.db.256",
+  "llvm.x86.avx512.mask.pmov.db.512",
+  "llvm.x86.avx512.mask.pmov.db.mem.128",
+  "llvm.x86.avx512.mask.pmov.db.mem.256",
+  "llvm.x86.avx512.mask.pmov.db.mem.512",
+  "llvm.x86.avx512.mask.pmov.dw.128",
+  "llvm.x86.avx512.mask.pmov.dw.256",
+  "llvm.x86.avx512.mask.pmov.dw.512",
+  "llvm.x86.avx512.mask.pmov.dw.mem.128",
+  "llvm.x86.avx512.mask.pmov.dw.mem.256",
+  "llvm.x86.avx512.mask.pmov.dw.mem.512",
+  "llvm.x86.avx512.mask.pmov.qb.128",
+  "llvm.x86.avx512.mask.pmov.qb.256",
+  "llvm.x86.avx512.mask.pmov.qb.512",
+  "llvm.x86.avx512.mask.pmov.qb.mem.128",
+  "llvm.x86.avx512.mask.pmov.qb.mem.256",
+  "llvm.x86.avx512.mask.pmov.qb.mem.512",
+  "llvm.x86.avx512.mask.pmov.qd.128",
+  "llvm.x86.avx512.mask.pmov.qd.256",
+  "llvm.x86.avx512.mask.pmov.qd.512",
+  "llvm.x86.avx512.mask.pmov.qd.mem.128",
+  "llvm.x86.avx512.mask.pmov.qd.mem.256",
+  "llvm.x86.avx512.mask.pmov.qd.mem.512",
+  "llvm.x86.avx512.mask.pmov.qw.128",
+  "llvm.x86.avx512.mask.pmov.qw.256",
+  "llvm.x86.avx512.mask.pmov.qw.512",
+  "llvm.x86.avx512.mask.pmov.qw.mem.128",
+  "llvm.x86.avx512.mask.pmov.qw.mem.256",
+  "llvm.x86.avx512.mask.pmov.qw.mem.512",
+  "llvm.x86.avx512.mask.pmov.wb.128",
+  "llvm.x86.avx512.mask.pmov.wb.256",
+  "llvm.x86.avx512.mask.pmov.wb.512",
+  "llvm.x86.avx512.mask.pmov.wb.mem.128",
+  "llvm.x86.avx512.mask.pmov.wb.mem.256",
+  "llvm.x86.avx512.mask.pmov.wb.mem.512",
+  "llvm.x86.avx512.mask.pmovs.db.128",
+  "llvm.x86.avx512.mask.pmovs.db.256",
+  "llvm.x86.avx512.mask.pmovs.db.512",
+  "llvm.x86.avx512.mask.pmovs.db.mem.128",
+  "llvm.x86.avx512.mask.pmovs.db.mem.256",
+  "llvm.x86.avx512.mask.pmovs.db.mem.512",
+  "llvm.x86.avx512.mask.pmovs.dw.128",
+  "llvm.x86.avx512.mask.pmovs.dw.256",
+  "llvm.x86.avx512.mask.pmovs.dw.512",
+  "llvm.x86.avx512.mask.pmovs.dw.mem.128",
+  "llvm.x86.avx512.mask.pmovs.dw.mem.256",
+  "llvm.x86.avx512.mask.pmovs.dw.mem.512",
+  "llvm.x86.avx512.mask.pmovs.qb.128",
+  "llvm.x86.avx512.mask.pmovs.qb.256",
+  "llvm.x86.avx512.mask.pmovs.qb.512",
+  "llvm.x86.avx512.mask.pmovs.qb.mem.128",
+  "llvm.x86.avx512.mask.pmovs.qb.mem.256",
+  "llvm.x86.avx512.mask.pmovs.qb.mem.512",
+  "llvm.x86.avx512.mask.pmovs.qd.128",
+  "llvm.x86.avx512.mask.pmovs.qd.256",
+  "llvm.x86.avx512.mask.pmovs.qd.512",
+  "llvm.x86.avx512.mask.pmovs.qd.mem.128",
+  "llvm.x86.avx512.mask.pmovs.qd.mem.256",
+  "llvm.x86.avx512.mask.pmovs.qd.mem.512",
+  "llvm.x86.avx512.mask.pmovs.qw.128",
+  "llvm.x86.avx512.mask.pmovs.qw.256",
+  "llvm.x86.avx512.mask.pmovs.qw.512",
+  "llvm.x86.avx512.mask.pmovs.qw.mem.128",
+  "llvm.x86.avx512.mask.pmovs.qw.mem.256",
+  "llvm.x86.avx512.mask.pmovs.qw.mem.512",
+  "llvm.x86.avx512.mask.pmovs.wb.128",
+  "llvm.x86.avx512.mask.pmovs.wb.256",
+  "llvm.x86.avx512.mask.pmovs.wb.512",
+  "llvm.x86.avx512.mask.pmovs.wb.mem.128",
+  "llvm.x86.avx512.mask.pmovs.wb.mem.256",
+  "llvm.x86.avx512.mask.pmovs.wb.mem.512",
+  "llvm.x86.avx512.mask.pmovus.db.128",
+  "llvm.x86.avx512.mask.pmovus.db.256",
+  "llvm.x86.avx512.mask.pmovus.db.512",
+  "llvm.x86.avx512.mask.pmovus.db.mem.128",
+  "llvm.x86.avx512.mask.pmovus.db.mem.256",
+  "llvm.x86.avx512.mask.pmovus.db.mem.512",
+  "llvm.x86.avx512.mask.pmovus.dw.128",
+  "llvm.x86.avx512.mask.pmovus.dw.256",
+  "llvm.x86.avx512.mask.pmovus.dw.512",
+  "llvm.x86.avx512.mask.pmovus.dw.mem.128",
+  "llvm.x86.avx512.mask.pmovus.dw.mem.256",
+  "llvm.x86.avx512.mask.pmovus.dw.mem.512",
+  "llvm.x86.avx512.mask.pmovus.qb.128",
+  "llvm.x86.avx512.mask.pmovus.qb.256",
+  "llvm.x86.avx512.mask.pmovus.qb.512",
+  "llvm.x86.avx512.mask.pmovus.qb.mem.128",
+  "llvm.x86.avx512.mask.pmovus.qb.mem.256",
+  "llvm.x86.avx512.mask.pmovus.qb.mem.512",
+  "llvm.x86.avx512.mask.pmovus.qd.128",
+  "llvm.x86.avx512.mask.pmovus.qd.256",
+  "llvm.x86.avx512.mask.pmovus.qd.512",
+  "llvm.x86.avx512.mask.pmovus.qd.mem.128",
+  "llvm.x86.avx512.mask.pmovus.qd.mem.256",
+  "llvm.x86.avx512.mask.pmovus.qd.mem.512",
+  "llvm.x86.avx512.mask.pmovus.qw.128",
+  "llvm.x86.avx512.mask.pmovus.qw.256",
+  "llvm.x86.avx512.mask.pmovus.qw.512",
+  "llvm.x86.avx512.mask.pmovus.qw.mem.128",
+  "llvm.x86.avx512.mask.pmovus.qw.mem.256",
+  "llvm.x86.avx512.mask.pmovus.qw.mem.512",
+  "llvm.x86.avx512.mask.pmovus.wb.128",
+  "llvm.x86.avx512.mask.pmovus.wb.256",
+  "llvm.x86.avx512.mask.pmovus.wb.512",
+  "llvm.x86.avx512.mask.pmovus.wb.mem.128",
+  "llvm.x86.avx512.mask.pmovus.wb.mem.256",
+  "llvm.x86.avx512.mask.pmovus.wb.mem.512",
+  "llvm.x86.avx512.mask.pmultishift.qb.128",
+  "llvm.x86.avx512.mask.pmultishift.qb.256",
+  "llvm.x86.avx512.mask.pmultishift.qb.512",
+  "llvm.x86.avx512.mask.psubs.b.128",
+  "llvm.x86.avx512.mask.psubs.b.256",
+  "llvm.x86.avx512.mask.psubs.b.512",
+  "llvm.x86.avx512.mask.psubs.w.128",
+  "llvm.x86.avx512.mask.psubs.w.256",
+  "llvm.x86.avx512.mask.psubs.w.512",
+  "llvm.x86.avx512.mask.psubus.b.128",
+  "llvm.x86.avx512.mask.psubus.b.256",
+  "llvm.x86.avx512.mask.psubus.b.512",
+  "llvm.x86.avx512.mask.psubus.w.128",
+  "llvm.x86.avx512.mask.psubus.w.256",
+  "llvm.x86.avx512.mask.psubus.w.512",
+  "llvm.x86.avx512.mask.range.pd.128",
+  "llvm.x86.avx512.mask.range.pd.256",
+  "llvm.x86.avx512.mask.range.pd.512",
+  "llvm.x86.avx512.mask.range.ps.128",
+  "llvm.x86.avx512.mask.range.ps.256",
+  "llvm.x86.avx512.mask.range.ps.512",
+  "llvm.x86.avx512.mask.range.sd",
+  "llvm.x86.avx512.mask.range.ss",
+  "llvm.x86.avx512.mask.reduce.pd.128",
+  "llvm.x86.avx512.mask.reduce.pd.256",
+  "llvm.x86.avx512.mask.reduce.pd.512",
+  "llvm.x86.avx512.mask.reduce.ps.128",
+  "llvm.x86.avx512.mask.reduce.ps.256",
+  "llvm.x86.avx512.mask.reduce.ps.512",
+  "llvm.x86.avx512.mask.reduce.sd",
+  "llvm.x86.avx512.mask.reduce.ss",
+  "llvm.x86.avx512.mask.rndscale.pd.128",
+  "llvm.x86.avx512.mask.rndscale.pd.256",
+  "llvm.x86.avx512.mask.rndscale.pd.512",
+  "llvm.x86.avx512.mask.rndscale.ps.128",
+  "llvm.x86.avx512.mask.rndscale.ps.256",
+  "llvm.x86.avx512.mask.rndscale.ps.512",
+  "llvm.x86.avx512.mask.rndscale.sd",
+  "llvm.x86.avx512.mask.rndscale.ss",
+  "llvm.x86.avx512.mask.scalef.pd.128",
+  "llvm.x86.avx512.mask.scalef.pd.256",
+  "llvm.x86.avx512.mask.scalef.pd.512",
+  "llvm.x86.avx512.mask.scalef.ps.128",
+  "llvm.x86.avx512.mask.scalef.ps.256",
+  "llvm.x86.avx512.mask.scalef.ps.512",
+  "llvm.x86.avx512.mask.scalef.sd",
+  "llvm.x86.avx512.mask.scalef.ss",
+  "llvm.x86.avx512.mask.sqrt.sd",
+  "llvm.x86.avx512.mask.sqrt.ss",
+  "llvm.x86.avx512.mask.sub.sd.round",
+  "llvm.x86.avx512.mask.sub.ss.round",
+  "llvm.x86.avx512.mask.vcvtph2ps.128",
+  "llvm.x86.avx512.mask.vcvtph2ps.256",
+  "llvm.x86.avx512.mask.vcvtph2ps.512",
+  "llvm.x86.avx512.mask.vcvtps2ph.128",
+  "llvm.x86.avx512.mask.vcvtps2ph.256",
+  "llvm.x86.avx512.mask.vcvtps2ph.512",
+  "llvm.x86.avx512.mask.vpshldv.d.128",
+  "llvm.x86.avx512.mask.vpshldv.d.256",
+  "llvm.x86.avx512.mask.vpshldv.d.512",
+  "llvm.x86.avx512.mask.vpshldv.q.128",
+  "llvm.x86.avx512.mask.vpshldv.q.256",
+  "llvm.x86.avx512.mask.vpshldv.q.512",
+  "llvm.x86.avx512.mask.vpshldv.w.128",
+  "llvm.x86.avx512.mask.vpshldv.w.256",
+  "llvm.x86.avx512.mask.vpshldv.w.512",
+  "llvm.x86.avx512.mask.vpshrdv.d.128",
+  "llvm.x86.avx512.mask.vpshrdv.d.256",
+  "llvm.x86.avx512.mask.vpshrdv.d.512",
+  "llvm.x86.avx512.mask.vpshrdv.q.128",
+  "llvm.x86.avx512.mask.vpshrdv.q.256",
+  "llvm.x86.avx512.mask.vpshrdv.q.512",
+  "llvm.x86.avx512.mask.vpshrdv.w.128",
+  "llvm.x86.avx512.mask.vpshrdv.w.256",
+  "llvm.x86.avx512.mask.vpshrdv.w.512",
+  "llvm.x86.avx512.mask.vpshufbitqmb.128",
+  "llvm.x86.avx512.mask.vpshufbitqmb.256",
+  "llvm.x86.avx512.mask.vpshufbitqmb.512",
+  "llvm.x86.avx512.maskz.fixupimm.pd.128",
+  "llvm.x86.avx512.maskz.fixupimm.pd.256",
+  "llvm.x86.avx512.maskz.fixupimm.pd.512",
+  "llvm.x86.avx512.maskz.fixupimm.ps.128",
+  "llvm.x86.avx512.maskz.fixupimm.ps.256",
+  "llvm.x86.avx512.maskz.fixupimm.ps.512",
+  "llvm.x86.avx512.maskz.fixupimm.sd",
+  "llvm.x86.avx512.maskz.fixupimm.ss",
+  "llvm.x86.avx512.maskz.vpshldv.d.128",
+  "llvm.x86.avx512.maskz.vpshldv.d.256",
+  "llvm.x86.avx512.maskz.vpshldv.d.512",
+  "llvm.x86.avx512.maskz.vpshldv.q.128",
+  "llvm.x86.avx512.maskz.vpshldv.q.256",
+  "llvm.x86.avx512.maskz.vpshldv.q.512",
+  "llvm.x86.avx512.maskz.vpshldv.w.128",
+  "llvm.x86.avx512.maskz.vpshldv.w.256",
+  "llvm.x86.avx512.maskz.vpshldv.w.512",
+  "llvm.x86.avx512.maskz.vpshrdv.d.128",
+  "llvm.x86.avx512.maskz.vpshrdv.d.256",
+  "llvm.x86.avx512.maskz.vpshrdv.d.512",
+  "llvm.x86.avx512.maskz.vpshrdv.q.128",
+  "llvm.x86.avx512.maskz.vpshrdv.q.256",
+  "llvm.x86.avx512.maskz.vpshrdv.q.512",
+  "llvm.x86.avx512.maskz.vpshrdv.w.128",
+  "llvm.x86.avx512.maskz.vpshrdv.w.256",
+  "llvm.x86.avx512.maskz.vpshrdv.w.512",
+  "llvm.x86.avx512.max.pd.512",
+  "llvm.x86.avx512.max.ps.512",
+  "llvm.x86.avx512.min.pd.512",
+  "llvm.x86.avx512.min.ps.512",
+  "llvm.x86.avx512.mul.pd.512",
+  "llvm.x86.avx512.mul.ps.512",
+  "llvm.x86.avx512.packssdw.512",
+  "llvm.x86.avx512.packsswb.512",
+  "llvm.x86.avx512.packusdw.512",
+  "llvm.x86.avx512.packuswb.512",
+  "llvm.x86.avx512.permvar.df.256",
+  "llvm.x86.avx512.permvar.df.512",
+  "llvm.x86.avx512.permvar.di.256",
+  "llvm.x86.avx512.permvar.di.512",
+  "llvm.x86.avx512.permvar.hi.128",
+  "llvm.x86.avx512.permvar.hi.256",
+  "llvm.x86.avx512.permvar.hi.512",
+  "llvm.x86.avx512.permvar.qi.128",
+  "llvm.x86.avx512.permvar.qi.256",
+  "llvm.x86.avx512.permvar.qi.512",
+  "llvm.x86.avx512.permvar.sf.512",
+  "llvm.x86.avx512.permvar.si.512",
+  "llvm.x86.avx512.pmaddubs.w.512",
+  "llvm.x86.avx512.pmaddw.d.512",
+  "llvm.x86.avx512.pmul.hr.sw.512",
+  "llvm.x86.avx512.pmulh.w.512",
+  "llvm.x86.avx512.pmulhu.w.512",
+  "llvm.x86.avx512.prol.d.128",
+  "llvm.x86.avx512.prol.d.256",
+  "llvm.x86.avx512.prol.d.512",
+  "llvm.x86.avx512.prol.q.128",
+  "llvm.x86.avx512.prol.q.256",
+  "llvm.x86.avx512.prol.q.512",
+  "llvm.x86.avx512.prolv.d.128",
+  "llvm.x86.avx512.prolv.d.256",
+  "llvm.x86.avx512.prolv.d.512",
+  "llvm.x86.avx512.prolv.q.128",
+  "llvm.x86.avx512.prolv.q.256",
+  "llvm.x86.avx512.prolv.q.512",
+  "llvm.x86.avx512.pror.d.128",
+  "llvm.x86.avx512.pror.d.256",
+  "llvm.x86.avx512.pror.d.512",
+  "llvm.x86.avx512.pror.q.128",
+  "llvm.x86.avx512.pror.q.256",
+  "llvm.x86.avx512.pror.q.512",
+  "llvm.x86.avx512.prorv.d.128",
+  "llvm.x86.avx512.prorv.d.256",
+  "llvm.x86.avx512.prorv.d.512",
+  "llvm.x86.avx512.prorv.q.128",
+  "llvm.x86.avx512.prorv.q.256",
+  "llvm.x86.avx512.prorv.q.512",
+  "llvm.x86.avx512.psad.bw.512",
+  "llvm.x86.avx512.pshuf.b.512",
+  "llvm.x86.avx512.psll.d.512",
+  "llvm.x86.avx512.psll.q.512",
+  "llvm.x86.avx512.psll.w.512",
+  "llvm.x86.avx512.pslli.d.512",
+  "llvm.x86.avx512.pslli.q.512",
+  "llvm.x86.avx512.pslli.w.512",
+  "llvm.x86.avx512.psllv.d.512",
+  "llvm.x86.avx512.psllv.q.512",
+  "llvm.x86.avx512.psllv.w.128",
+  "llvm.x86.avx512.psllv.w.256",
+  "llvm.x86.avx512.psllv.w.512",
+  "llvm.x86.avx512.psra.d.512",
+  "llvm.x86.avx512.psra.q.128",
+  "llvm.x86.avx512.psra.q.256",
+  "llvm.x86.avx512.psra.q.512",
+  "llvm.x86.avx512.psra.w.512",
+  "llvm.x86.avx512.psrai.d.512",
+  "llvm.x86.avx512.psrai.q.128",
+  "llvm.x86.avx512.psrai.q.256",
+  "llvm.x86.avx512.psrai.q.512",
+  "llvm.x86.avx512.psrai.w.512",
+  "llvm.x86.avx512.psrav.d.512",
+  "llvm.x86.avx512.psrav.q.128",
+  "llvm.x86.avx512.psrav.q.256",
+  "llvm.x86.avx512.psrav.q.512",
+  "llvm.x86.avx512.psrav.w.128",
+  "llvm.x86.avx512.psrav.w.256",
+  "llvm.x86.avx512.psrav.w.512",
+  "llvm.x86.avx512.psrl.d.512",
+  "llvm.x86.avx512.psrl.q.512",
+  "llvm.x86.avx512.psrl.w.512",
+  "llvm.x86.avx512.psrli.d.512",
+  "llvm.x86.avx512.psrli.q.512",
+  "llvm.x86.avx512.psrli.w.512",
+  "llvm.x86.avx512.psrlv.d.512",
+  "llvm.x86.avx512.psrlv.q.512",
+  "llvm.x86.avx512.psrlv.w.128",
+  "llvm.x86.avx512.psrlv.w.256",
+  "llvm.x86.avx512.psrlv.w.512",
+  "llvm.x86.avx512.pternlog.d.128",
+  "llvm.x86.avx512.pternlog.d.256",
+  "llvm.x86.avx512.pternlog.d.512",
+  "llvm.x86.avx512.pternlog.q.128",
+  "llvm.x86.avx512.pternlog.q.256",
+  "llvm.x86.avx512.pternlog.q.512",
+  "llvm.x86.avx512.rcp14.pd.128",
+  "llvm.x86.avx512.rcp14.pd.256",
+  "llvm.x86.avx512.rcp14.pd.512",
+  "llvm.x86.avx512.rcp14.ps.128",
+  "llvm.x86.avx512.rcp14.ps.256",
+  "llvm.x86.avx512.rcp14.ps.512",
+  "llvm.x86.avx512.rcp14.sd",
+  "llvm.x86.avx512.rcp14.ss",
+  "llvm.x86.avx512.rcp28.pd",
+  "llvm.x86.avx512.rcp28.ps",
+  "llvm.x86.avx512.rcp28.sd",
+  "llvm.x86.avx512.rcp28.ss",
+  "llvm.x86.avx512.rsqrt14.pd.128",
+  "llvm.x86.avx512.rsqrt14.pd.256",
+  "llvm.x86.avx512.rsqrt14.pd.512",
+  "llvm.x86.avx512.rsqrt14.ps.128",
+  "llvm.x86.avx512.rsqrt14.ps.256",
+  "llvm.x86.avx512.rsqrt14.ps.512",
+  "llvm.x86.avx512.rsqrt14.sd",
+  "llvm.x86.avx512.rsqrt14.ss",
+  "llvm.x86.avx512.rsqrt28.pd",
+  "llvm.x86.avx512.rsqrt28.ps",
+  "llvm.x86.avx512.rsqrt28.sd",
+  "llvm.x86.avx512.rsqrt28.ss",
+  "llvm.x86.avx512.scatter.dpd.512",
+  "llvm.x86.avx512.scatter.dpi.512",
+  "llvm.x86.avx512.scatter.dpq.512",
+  "llvm.x86.avx512.scatter.dps.512",
+  "llvm.x86.avx512.scatter.qpd.512",
+  "llvm.x86.avx512.scatter.qpi.512",
+  "llvm.x86.avx512.scatter.qpq.512",
+  "llvm.x86.avx512.scatter.qps.512",
+  "llvm.x86.avx512.scatterdiv2.df",
+  "llvm.x86.avx512.scatterdiv2.di",
+  "llvm.x86.avx512.scatterdiv4.df",
+  "llvm.x86.avx512.scatterdiv4.di",
+  "llvm.x86.avx512.scatterdiv4.sf",
+  "llvm.x86.avx512.scatterdiv4.si",
+  "llvm.x86.avx512.scatterdiv8.sf",
+  "llvm.x86.avx512.scatterdiv8.si",
+  "llvm.x86.avx512.scatterpf.dpd.512",
+  "llvm.x86.avx512.scatterpf.dps.512",
+  "llvm.x86.avx512.scatterpf.qpd.512",
+  "llvm.x86.avx512.scatterpf.qps.512",
+  "llvm.x86.avx512.scattersiv2.df",
+  "llvm.x86.avx512.scattersiv2.di",
+  "llvm.x86.avx512.scattersiv4.df",
+  "llvm.x86.avx512.scattersiv4.di",
+  "llvm.x86.avx512.scattersiv4.sf",
+  "llvm.x86.avx512.scattersiv4.si",
+  "llvm.x86.avx512.scattersiv8.sf",
+  "llvm.x86.avx512.scattersiv8.si",
+  "llvm.x86.avx512.sqrt.pd.512",
+  "llvm.x86.avx512.sqrt.ps.512",
+  "llvm.x86.avx512.sub.pd.512",
+  "llvm.x86.avx512.sub.ps.512",
+  "llvm.x86.avx512.vcomi.sd",
+  "llvm.x86.avx512.vcomi.ss",
+  "llvm.x86.avx512.vcvtsd2si32",
+  "llvm.x86.avx512.vcvtsd2si64",
+  "llvm.x86.avx512.vcvtsd2usi32",
+  "llvm.x86.avx512.vcvtsd2usi64",
+  "llvm.x86.avx512.vcvtss2si32",
+  "llvm.x86.avx512.vcvtss2si64",
+  "llvm.x86.avx512.vcvtss2usi32",
+  "llvm.x86.avx512.vcvtss2usi64",
+  "llvm.x86.avx512.vfmadd.f32",
+  "llvm.x86.avx512.vfmadd.f64",
+  "llvm.x86.avx512.vfmadd.pd.512",
+  "llvm.x86.avx512.vfmadd.ps.512",
+  "llvm.x86.avx512.vfmaddsub.pd.512",
+  "llvm.x86.avx512.vfmaddsub.ps.512",
+  "llvm.x86.avx512.vpdpbusd.128",
+  "llvm.x86.avx512.vpdpbusd.256",
+  "llvm.x86.avx512.vpdpbusd.512",
+  "llvm.x86.avx512.vpdpbusds.128",
+  "llvm.x86.avx512.vpdpbusds.256",
+  "llvm.x86.avx512.vpdpbusds.512",
+  "llvm.x86.avx512.vpdpwssd.128",
+  "llvm.x86.avx512.vpdpwssd.256",
+  "llvm.x86.avx512.vpdpwssd.512",
+  "llvm.x86.avx512.vpdpwssds.128",
+  "llvm.x86.avx512.vpdpwssds.256",
+  "llvm.x86.avx512.vpdpwssds.512",
+  "llvm.x86.avx512.vpermi2var.d.128",
+  "llvm.x86.avx512.vpermi2var.d.256",
+  "llvm.x86.avx512.vpermi2var.d.512",
+  "llvm.x86.avx512.vpermi2var.hi.128",
+  "llvm.x86.avx512.vpermi2var.hi.256",
+  "llvm.x86.avx512.vpermi2var.hi.512",
+  "llvm.x86.avx512.vpermi2var.pd.128",
+  "llvm.x86.avx512.vpermi2var.pd.256",
+  "llvm.x86.avx512.vpermi2var.pd.512",
+  "llvm.x86.avx512.vpermi2var.ps.128",
+  "llvm.x86.avx512.vpermi2var.ps.256",
+  "llvm.x86.avx512.vpermi2var.ps.512",
+  "llvm.x86.avx512.vpermi2var.q.128",
+  "llvm.x86.avx512.vpermi2var.q.256",
+  "llvm.x86.avx512.vpermi2var.q.512",
+  "llvm.x86.avx512.vpermi2var.qi.128",
+  "llvm.x86.avx512.vpermi2var.qi.256",
+  "llvm.x86.avx512.vpermi2var.qi.512",
+  "llvm.x86.avx512.vpermilvar.pd.512",
+  "llvm.x86.avx512.vpermilvar.ps.512",
+  "llvm.x86.avx512.vpmadd52h.uq.128",
+  "llvm.x86.avx512.vpmadd52h.uq.256",
+  "llvm.x86.avx512.vpmadd52h.uq.512",
+  "llvm.x86.avx512.vpmadd52l.uq.128",
+  "llvm.x86.avx512.vpmadd52l.uq.256",
+  "llvm.x86.avx512.vpmadd52l.uq.512",
+  "llvm.x86.avx512.vpshld.d.128",
+  "llvm.x86.avx512.vpshld.d.256",
+  "llvm.x86.avx512.vpshld.d.512",
+  "llvm.x86.avx512.vpshld.q.128",
+  "llvm.x86.avx512.vpshld.q.256",
+  "llvm.x86.avx512.vpshld.q.512",
+  "llvm.x86.avx512.vpshld.w.128",
+  "llvm.x86.avx512.vpshld.w.256",
+  "llvm.x86.avx512.vpshld.w.512",
+  "llvm.x86.avx512.vpshrd.d.128",
+  "llvm.x86.avx512.vpshrd.d.256",
+  "llvm.x86.avx512.vpshrd.d.512",
+  "llvm.x86.avx512.vpshrd.q.128",
+  "llvm.x86.avx512.vpshrd.q.256",
+  "llvm.x86.avx512.vpshrd.q.512",
+  "llvm.x86.avx512.vpshrd.w.128",
+  "llvm.x86.avx512.vpshrd.w.256",
+  "llvm.x86.avx512.vpshrd.w.512",
+  "llvm.x86.bmi.bextr.32",
+  "llvm.x86.bmi.bextr.64",
+  "llvm.x86.bmi.bzhi.32",
+  "llvm.x86.bmi.bzhi.64",
+  "llvm.x86.bmi.pdep.32",
+  "llvm.x86.bmi.pdep.64",
+  "llvm.x86.bmi.pext.32",
+  "llvm.x86.bmi.pext.64",
+  "llvm.x86.cldemote",
+  "llvm.x86.clflushopt",
+  "llvm.x86.clrssbsy",
+  "llvm.x86.clwb",
+  "llvm.x86.clzero",
+  "llvm.x86.directstore32",
+  "llvm.x86.directstore64",
+  "llvm.x86.flags.read.u32",
+  "llvm.x86.flags.read.u64",
+  "llvm.x86.flags.write.u32",
+  "llvm.x86.flags.write.u64",
+  "llvm.x86.fxrstor",
+  "llvm.x86.fxrstor64",
+  "llvm.x86.fxsave",
+  "llvm.x86.fxsave64",
+  "llvm.x86.incsspd",
+  "llvm.x86.incsspq",
+  "llvm.x86.int",
+  "llvm.x86.invpcid",
+  "llvm.x86.llwpcb",
+  "llvm.x86.lwpins32",
+  "llvm.x86.lwpins64",
+  "llvm.x86.lwpval32",
+  "llvm.x86.lwpval64",
+  "llvm.x86.mmx.emms",
+  "llvm.x86.mmx.femms",
+  "llvm.x86.mmx.maskmovq",
+  "llvm.x86.mmx.movnt.dq",
+  "llvm.x86.mmx.packssdw",
+  "llvm.x86.mmx.packsswb",
+  "llvm.x86.mmx.packuswb",
+  "llvm.x86.mmx.padd.b",
+  "llvm.x86.mmx.padd.d",
+  "llvm.x86.mmx.padd.q",
+  "llvm.x86.mmx.padd.w",
+  "llvm.x86.mmx.padds.b",
+  "llvm.x86.mmx.padds.w",
+  "llvm.x86.mmx.paddus.b",
+  "llvm.x86.mmx.paddus.w",
+  "llvm.x86.mmx.palignr.b",
+  "llvm.x86.mmx.pand",
+  "llvm.x86.mmx.pandn",
+  "llvm.x86.mmx.pavg.b",
+  "llvm.x86.mmx.pavg.w",
+  "llvm.x86.mmx.pcmpeq.b",
+  "llvm.x86.mmx.pcmpeq.d",
+  "llvm.x86.mmx.pcmpeq.w",
+  "llvm.x86.mmx.pcmpgt.b",
+  "llvm.x86.mmx.pcmpgt.d",
+  "llvm.x86.mmx.pcmpgt.w",
+  "llvm.x86.mmx.pextr.w",
+  "llvm.x86.mmx.pinsr.w",
+  "llvm.x86.mmx.pmadd.wd",
+  "llvm.x86.mmx.pmaxs.w",
+  "llvm.x86.mmx.pmaxu.b",
+  "llvm.x86.mmx.pmins.w",
+  "llvm.x86.mmx.pminu.b",
+  "llvm.x86.mmx.pmovmskb",
+  "llvm.x86.mmx.pmulh.w",
+  "llvm.x86.mmx.pmulhu.w",
+  "llvm.x86.mmx.pmull.w",
+  "llvm.x86.mmx.pmulu.dq",
+  "llvm.x86.mmx.por",
+  "llvm.x86.mmx.psad.bw",
+  "llvm.x86.mmx.psll.d",
+  "llvm.x86.mmx.psll.q",
+  "llvm.x86.mmx.psll.w",
+  "llvm.x86.mmx.pslli.d",
+  "llvm.x86.mmx.pslli.q",
+  "llvm.x86.mmx.pslli.w",
+  "llvm.x86.mmx.psra.d",
+  "llvm.x86.mmx.psra.w",
+  "llvm.x86.mmx.psrai.d",
+  "llvm.x86.mmx.psrai.w",
+  "llvm.x86.mmx.psrl.d",
+  "llvm.x86.mmx.psrl.q",
+  "llvm.x86.mmx.psrl.w",
+  "llvm.x86.mmx.psrli.d",
+  "llvm.x86.mmx.psrli.q",
+  "llvm.x86.mmx.psrli.w",
+  "llvm.x86.mmx.psub.b",
+  "llvm.x86.mmx.psub.d",
+  "llvm.x86.mmx.psub.q",
+  "llvm.x86.mmx.psub.w",
+  "llvm.x86.mmx.psubs.b",
+  "llvm.x86.mmx.psubs.w",
+  "llvm.x86.mmx.psubus.b",
+  "llvm.x86.mmx.psubus.w",
+  "llvm.x86.mmx.punpckhbw",
+  "llvm.x86.mmx.punpckhdq",
+  "llvm.x86.mmx.punpckhwd",
+  "llvm.x86.mmx.punpcklbw",
+  "llvm.x86.mmx.punpckldq",
+  "llvm.x86.mmx.punpcklwd",
+  "llvm.x86.mmx.pxor",
+  "llvm.x86.monitorx",
+  "llvm.x86.movdir64b",
+  "llvm.x86.mwaitx",
+  "llvm.x86.pclmulqdq",
+  "llvm.x86.pclmulqdq.256",
+  "llvm.x86.pclmulqdq.512",
+  "llvm.x86.ptwrite32",
+  "llvm.x86.ptwrite64",
+  "llvm.x86.rdfsbase.32",
+  "llvm.x86.rdfsbase.64",
+  "llvm.x86.rdgsbase.32",
+  "llvm.x86.rdgsbase.64",
+  "llvm.x86.rdpid",
+  "llvm.x86.rdpkru",
+  "llvm.x86.rdpmc",
+  "llvm.x86.rdrand.16",
+  "llvm.x86.rdrand.32",
+  "llvm.x86.rdrand.64",
+  "llvm.x86.rdseed.16",
+  "llvm.x86.rdseed.32",
+  "llvm.x86.rdseed.64",
+  "llvm.x86.rdsspd",
+  "llvm.x86.rdsspq",
+  "llvm.x86.rdtsc",
+  "llvm.x86.rdtscp",
+  "llvm.x86.rstorssp",
+  "llvm.x86.saveprevssp",
+  "llvm.x86.seh.ehguard",
+  "llvm.x86.seh.ehregnode",
+  "llvm.x86.seh.lsda",
+  "llvm.x86.seh.recoverfp",
+  "llvm.x86.setssbsy",
+  "llvm.x86.sha1msg1",
+  "llvm.x86.sha1msg2",
+  "llvm.x86.sha1nexte",
+  "llvm.x86.sha1rnds4",
+  "llvm.x86.sha256msg1",
+  "llvm.x86.sha256msg2",
+  "llvm.x86.sha256rnds2",
+  "llvm.x86.slwpcb",
+  "llvm.x86.sse.cmp.ps",
+  "llvm.x86.sse.cmp.ss",
+  "llvm.x86.sse.comieq.ss",
+  "llvm.x86.sse.comige.ss",
+  "llvm.x86.sse.comigt.ss",
+  "llvm.x86.sse.comile.ss",
+  "llvm.x86.sse.comilt.ss",
+  "llvm.x86.sse.comineq.ss",
+  "llvm.x86.sse.cvtpd2pi",
+  "llvm.x86.sse.cvtpi2pd",
+  "llvm.x86.sse.cvtpi2ps",
+  "llvm.x86.sse.cvtps2pi",
+  "llvm.x86.sse.cvtss2si",
+  "llvm.x86.sse.cvtss2si64",
+  "llvm.x86.sse.cvttpd2pi",
+  "llvm.x86.sse.cvttps2pi",
+  "llvm.x86.sse.cvttss2si",
+  "llvm.x86.sse.cvttss2si64",
+  "llvm.x86.sse.ldmxcsr",
+  "llvm.x86.sse.max.ps",
+  "llvm.x86.sse.max.ss",
+  "llvm.x86.sse.min.ps",
+  "llvm.x86.sse.min.ss",
+  "llvm.x86.sse.movmsk.ps",
+  "llvm.x86.sse.pshuf.w",
+  "llvm.x86.sse.rcp.ps",
+  "llvm.x86.sse.rcp.ss",
+  "llvm.x86.sse.rsqrt.ps",
+  "llvm.x86.sse.rsqrt.ss",
+  "llvm.x86.sse.sfence",
+  "llvm.x86.sse.stmxcsr",
+  "llvm.x86.sse.ucomieq.ss",
+  "llvm.x86.sse.ucomige.ss",
+  "llvm.x86.sse.ucomigt.ss",
+  "llvm.x86.sse.ucomile.ss",
+  "llvm.x86.sse.ucomilt.ss",
+  "llvm.x86.sse.ucomineq.ss",
+  "llvm.x86.sse2.clflush",
+  "llvm.x86.sse2.cmp.pd",
+  "llvm.x86.sse2.cmp.sd",
+  "llvm.x86.sse2.comieq.sd",
+  "llvm.x86.sse2.comige.sd",
+  "llvm.x86.sse2.comigt.sd",
+  "llvm.x86.sse2.comile.sd",
+  "llvm.x86.sse2.comilt.sd",
+  "llvm.x86.sse2.comineq.sd",
+  "llvm.x86.sse2.cvtpd2dq",
+  "llvm.x86.sse2.cvtpd2ps",
+  "llvm.x86.sse2.cvtps2dq",
+  "llvm.x86.sse2.cvtsd2si",
+  "llvm.x86.sse2.cvtsd2si64",
+  "llvm.x86.sse2.cvtsd2ss",
+  "llvm.x86.sse2.cvttpd2dq",
+  "llvm.x86.sse2.cvttps2dq",
+  "llvm.x86.sse2.cvttsd2si",
+  "llvm.x86.sse2.cvttsd2si64",
+  "llvm.x86.sse2.lfence",
+  "llvm.x86.sse2.maskmov.dqu",
+  "llvm.x86.sse2.max.pd",
+  "llvm.x86.sse2.max.sd",
+  "llvm.x86.sse2.mfence",
+  "llvm.x86.sse2.min.pd",
+  "llvm.x86.sse2.min.sd",
+  "llvm.x86.sse2.movmsk.pd",
+  "llvm.x86.sse2.packssdw.128",
+  "llvm.x86.sse2.packsswb.128",
+  "llvm.x86.sse2.packuswb.128",
+  "llvm.x86.sse2.padds.b",
+  "llvm.x86.sse2.padds.w",
+  "llvm.x86.sse2.paddus.b",
+  "llvm.x86.sse2.paddus.w",
+  "llvm.x86.sse2.pause",
+  "llvm.x86.sse2.pmadd.wd",
+  "llvm.x86.sse2.pmovmskb.128",
+  "llvm.x86.sse2.pmulh.w",
+  "llvm.x86.sse2.pmulhu.w",
+  "llvm.x86.sse2.psad.bw",
+  "llvm.x86.sse2.psll.d",
+  "llvm.x86.sse2.psll.q",
+  "llvm.x86.sse2.psll.w",
+  "llvm.x86.sse2.pslli.d",
+  "llvm.x86.sse2.pslli.q",
+  "llvm.x86.sse2.pslli.w",
+  "llvm.x86.sse2.psra.d",
+  "llvm.x86.sse2.psra.w",
+  "llvm.x86.sse2.psrai.d",
+  "llvm.x86.sse2.psrai.w",
+  "llvm.x86.sse2.psrl.d",
+  "llvm.x86.sse2.psrl.q",
+  "llvm.x86.sse2.psrl.w",
+  "llvm.x86.sse2.psrli.d",
+  "llvm.x86.sse2.psrli.q",
+  "llvm.x86.sse2.psrli.w",
+  "llvm.x86.sse2.psubs.b",
+  "llvm.x86.sse2.psubs.w",
+  "llvm.x86.sse2.psubus.b",
+  "llvm.x86.sse2.psubus.w",
+  "llvm.x86.sse2.ucomieq.sd",
+  "llvm.x86.sse2.ucomige.sd",
+  "llvm.x86.sse2.ucomigt.sd",
+  "llvm.x86.sse2.ucomile.sd",
+  "llvm.x86.sse2.ucomilt.sd",
+  "llvm.x86.sse2.ucomineq.sd",
+  "llvm.x86.sse3.addsub.pd",
+  "llvm.x86.sse3.addsub.ps",
+  "llvm.x86.sse3.hadd.pd",
+  "llvm.x86.sse3.hadd.ps",
+  "llvm.x86.sse3.hsub.pd",
+  "llvm.x86.sse3.hsub.ps",
+  "llvm.x86.sse3.ldu.dq",
+  "llvm.x86.sse3.monitor",
+  "llvm.x86.sse3.mwait",
+  "llvm.x86.sse41.blendvpd",
+  "llvm.x86.sse41.blendvps",
+  "llvm.x86.sse41.dppd",
+  "llvm.x86.sse41.dpps",
+  "llvm.x86.sse41.insertps",
+  "llvm.x86.sse41.mpsadbw",
+  "llvm.x86.sse41.packusdw",
+  "llvm.x86.sse41.pblendvb",
+  "llvm.x86.sse41.phminposuw",
+  "llvm.x86.sse41.ptestc",
+  "llvm.x86.sse41.ptestnzc",
+  "llvm.x86.sse41.ptestz",
+  "llvm.x86.sse41.round.pd",
+  "llvm.x86.sse41.round.ps",
+  "llvm.x86.sse41.round.sd",
+  "llvm.x86.sse41.round.ss",
+  "llvm.x86.sse42.crc32.32.16",
+  "llvm.x86.sse42.crc32.32.32",
+  "llvm.x86.sse42.crc32.32.8",
+  "llvm.x86.sse42.crc32.64.64",
+  "llvm.x86.sse42.pcmpestri128",
+  "llvm.x86.sse42.pcmpestria128",
+  "llvm.x86.sse42.pcmpestric128",
+  "llvm.x86.sse42.pcmpestrio128",
+  "llvm.x86.sse42.pcmpestris128",
+  "llvm.x86.sse42.pcmpestriz128",
+  "llvm.x86.sse42.pcmpestrm128",
+  "llvm.x86.sse42.pcmpistri128",
+  "llvm.x86.sse42.pcmpistria128",
+  "llvm.x86.sse42.pcmpistric128",
+  "llvm.x86.sse42.pcmpistrio128",
+  "llvm.x86.sse42.pcmpistris128",
+  "llvm.x86.sse42.pcmpistriz128",
+  "llvm.x86.sse42.pcmpistrm128",
+  "llvm.x86.sse4a.extrq",
+  "llvm.x86.sse4a.extrqi",
+  "llvm.x86.sse4a.insertq",
+  "llvm.x86.sse4a.insertqi",
+  "llvm.x86.ssse3.pabs.b",
+  "llvm.x86.ssse3.pabs.d",
+  "llvm.x86.ssse3.pabs.w",
+  "llvm.x86.ssse3.phadd.d",
+  "llvm.x86.ssse3.phadd.d.128",
+  "llvm.x86.ssse3.phadd.sw",
+  "llvm.x86.ssse3.phadd.sw.128",
+  "llvm.x86.ssse3.phadd.w",
+  "llvm.x86.ssse3.phadd.w.128",
+  "llvm.x86.ssse3.phsub.d",
+  "llvm.x86.ssse3.phsub.d.128",
+  "llvm.x86.ssse3.phsub.sw",
+  "llvm.x86.ssse3.phsub.sw.128",
+  "llvm.x86.ssse3.phsub.w",
+  "llvm.x86.ssse3.phsub.w.128",
+  "llvm.x86.ssse3.pmadd.ub.sw",
+  "llvm.x86.ssse3.pmadd.ub.sw.128",
+  "llvm.x86.ssse3.pmul.hr.sw",
+  "llvm.x86.ssse3.pmul.hr.sw.128",
+  "llvm.x86.ssse3.pshuf.b",
+  "llvm.x86.ssse3.pshuf.b.128",
+  "llvm.x86.ssse3.psign.b",
+  "llvm.x86.ssse3.psign.b.128",
+  "llvm.x86.ssse3.psign.d",
+  "llvm.x86.ssse3.psign.d.128",
+  "llvm.x86.ssse3.psign.w",
+  "llvm.x86.ssse3.psign.w.128",
+  "llvm.x86.subborrow.u32",
+  "llvm.x86.subborrow.u64",
+  "llvm.x86.tbm.bextri.u32",
+  "llvm.x86.tbm.bextri.u64",
+  "llvm.x86.tpause",
+  "llvm.x86.umonitor",
+  "llvm.x86.umwait",
+  "llvm.x86.vcvtph2ps.128",
+  "llvm.x86.vcvtph2ps.256",
+  "llvm.x86.vcvtps2ph.128",
+  "llvm.x86.vcvtps2ph.256",
+  "llvm.x86.vgf2p8affineinvqb.128",
+  "llvm.x86.vgf2p8affineinvqb.256",
+  "llvm.x86.vgf2p8affineinvqb.512",
+  "llvm.x86.vgf2p8affineqb.128",
+  "llvm.x86.vgf2p8affineqb.256",
+  "llvm.x86.vgf2p8affineqb.512",
+  "llvm.x86.vgf2p8mulb.128",
+  "llvm.x86.vgf2p8mulb.256",
+  "llvm.x86.vgf2p8mulb.512",
+  "llvm.x86.wbinvd",
+  "llvm.x86.wbnoinvd",
+  "llvm.x86.wrfsbase.32",
+  "llvm.x86.wrfsbase.64",
+  "llvm.x86.wrgsbase.32",
+  "llvm.x86.wrgsbase.64",
+  "llvm.x86.wrpkru",
+  "llvm.x86.wrssd",
+  "llvm.x86.wrssq",
+  "llvm.x86.wrussd",
+  "llvm.x86.wrussq",
+  "llvm.x86.xabort",
+  "llvm.x86.xbegin",
+  "llvm.x86.xend",
+  "llvm.x86.xgetbv",
+  "llvm.x86.xop.vfrcz.pd",
+  "llvm.x86.xop.vfrcz.pd.256",
+  "llvm.x86.xop.vfrcz.ps",
+  "llvm.x86.xop.vfrcz.ps.256",
+  "llvm.x86.xop.vfrcz.sd",
+  "llvm.x86.xop.vfrcz.ss",
+  "llvm.x86.xop.vpcomb",
+  "llvm.x86.xop.vpcomd",
+  "llvm.x86.xop.vpcomq",
+  "llvm.x86.xop.vpcomub",
+  "llvm.x86.xop.vpcomud",
+  "llvm.x86.xop.vpcomuq",
+  "llvm.x86.xop.vpcomuw",
+  "llvm.x86.xop.vpcomw",
+  "llvm.x86.xop.vpermil2pd",
+  "llvm.x86.xop.vpermil2pd.256",
+  "llvm.x86.xop.vpermil2ps",
+  "llvm.x86.xop.vpermil2ps.256",
+  "llvm.x86.xop.vphaddbd",
+  "llvm.x86.xop.vphaddbq",
+  "llvm.x86.xop.vphaddbw",
+  "llvm.x86.xop.vphadddq",
+  "llvm.x86.xop.vphaddubd",
+  "llvm.x86.xop.vphaddubq",
+  "llvm.x86.xop.vphaddubw",
+  "llvm.x86.xop.vphaddudq",
+  "llvm.x86.xop.vphadduwd",
+  "llvm.x86.xop.vphadduwq",
+  "llvm.x86.xop.vphaddwd",
+  "llvm.x86.xop.vphaddwq",
+  "llvm.x86.xop.vphsubbw",
+  "llvm.x86.xop.vphsubdq",
+  "llvm.x86.xop.vphsubwd",
+  "llvm.x86.xop.vpmacsdd",
+  "llvm.x86.xop.vpmacsdqh",
+  "llvm.x86.xop.vpmacsdql",
+  "llvm.x86.xop.vpmacssdd",
+  "llvm.x86.xop.vpmacssdqh",
+  "llvm.x86.xop.vpmacssdql",
+  "llvm.x86.xop.vpmacsswd",
+  "llvm.x86.xop.vpmacssww",
+  "llvm.x86.xop.vpmacswd",
+  "llvm.x86.xop.vpmacsww",
+  "llvm.x86.xop.vpmadcsswd",
+  "llvm.x86.xop.vpmadcswd",
+  "llvm.x86.xop.vpperm",
+  "llvm.x86.xop.vprotb",
+  "llvm.x86.xop.vprotbi",
+  "llvm.x86.xop.vprotd",
+  "llvm.x86.xop.vprotdi",
+  "llvm.x86.xop.vprotq",
+  "llvm.x86.xop.vprotqi",
+  "llvm.x86.xop.vprotw",
+  "llvm.x86.xop.vprotwi",
+  "llvm.x86.xop.vpshab",
+  "llvm.x86.xop.vpshad",
+  "llvm.x86.xop.vpshaq",
+  "llvm.x86.xop.vpshaw",
+  "llvm.x86.xop.vpshlb",
+  "llvm.x86.xop.vpshld",
+  "llvm.x86.xop.vpshlq",
+  "llvm.x86.xop.vpshlw",
+  "llvm.x86.xrstor",
+  "llvm.x86.xrstor64",
+  "llvm.x86.xrstors",
+  "llvm.x86.xrstors64",
+  "llvm.x86.xsave",
+  "llvm.x86.xsave64",
+  "llvm.x86.xsavec",
+  "llvm.x86.xsavec64",
+  "llvm.x86.xsaveopt",
+  "llvm.x86.xsaveopt64",
+  "llvm.x86.xsaves",
+  "llvm.x86.xsaves64",
+  "llvm.x86.xsetbv",
+  "llvm.x86.xtest",
+  "llvm.xcore.bitrev",
+  "llvm.xcore.checkevent",
+  "llvm.xcore.chkct",
+  "llvm.xcore.clre",
+  "llvm.xcore.clrpt",
+  "llvm.xcore.clrsr",
+  "llvm.xcore.crc32",
+  "llvm.xcore.crc8",
+  "llvm.xcore.edu",
+  "llvm.xcore.eeu",
+  "llvm.xcore.endin",
+  "llvm.xcore.freer",
+  "llvm.xcore.geted",
+  "llvm.xcore.getet",
+  "llvm.xcore.getid",
+  "llvm.xcore.getps",
+  "llvm.xcore.getr",
+  "llvm.xcore.getst",
+  "llvm.xcore.getts",
+  "llvm.xcore.in",
+  "llvm.xcore.inct",
+  "llvm.xcore.initcp",
+  "llvm.xcore.initdp",
+  "llvm.xcore.initlr",
+  "llvm.xcore.initpc",
+  "llvm.xcore.initsp",
+  "llvm.xcore.inshr",
+  "llvm.xcore.int",
+  "llvm.xcore.mjoin",
+  "llvm.xcore.msync",
+  "llvm.xcore.out",
+  "llvm.xcore.outct",
+  "llvm.xcore.outshr",
+  "llvm.xcore.outt",
+  "llvm.xcore.peek",
+  "llvm.xcore.setc",
+  "llvm.xcore.setclk",
+  "llvm.xcore.setd",
+  "llvm.xcore.setev",
+  "llvm.xcore.setps",
+  "llvm.xcore.setpsc",
+  "llvm.xcore.setpt",
+  "llvm.xcore.setrdy",
+  "llvm.xcore.setsr",
+  "llvm.xcore.settw",
+  "llvm.xcore.setv",
+  "llvm.xcore.sext",
+  "llvm.xcore.ssync",
+  "llvm.xcore.syncr",
+  "llvm.xcore.testct",
+  "llvm.xcore.testwct",
+  "llvm.xcore.waitevent",
+  "llvm.xcore.zext",
+#endif
+
+// Intrinsic ID to overload bitset
+#ifdef GET_INTRINSIC_OVERLOAD_TABLE
+static const uint8_t OTable[] = {
+  0 | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<3) | (1<<4) | (1<<5),
+  0,
+  0 | (1<<3) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1),
+  0 | (1<<2),
+  0 | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5),
+  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<2) | (1<<3) | (1<<5) | (1<<6),
+  0 | (1<<2),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5),
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<6) | (1<<7),
+  0 | (1<<1) | (1<<2) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<5),
+  0 | (1<<0) | (1<<3) | (1<<4) | (1<<5),
+  0 | (1<<2),
+  0,
+  0,
+  0,
+  0 | (1<<2) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<1) | (1<<3) | (1<<4) | (1<<7),
+  0 | (1<<0),
+  0 | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<4) | (1<<5),
+  0,
+  0 | (1<<2) | (1<<3) | (1<<4),
+  0 | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<3) | (1<<4) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<2) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
+  0,
+  0 | (1<<0) | (1<<2) | (1<<6),
+  0 | (1<<5),
+  0 | (1<<1) | (1<<2),
+  0,
+  0 | (1<<6),
+  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<5),
+  0 | (1<<5),
+  0 | (1<<0),
+  0,
+  0 | (1<<0) | (1<<6),
+  0,
+  0 | (1<<4),
+  0 | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<4) | (1<<5) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<3) | (1<<5),
+  0,
+  0,
+  0,
+  0 | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0,
+  0 | (1<<6) | (1<<7),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
+  0,
+  0,
+  0 | (1<<5),
+  0,
+  0,
+  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<1),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<7),
+  0 | (1<<0),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<3),
+  0,
+  0,
+  0 | (1<<0),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<6) | (1<<7),
+  0,
+  0,
+  0 | (1<<4),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<2) | (1<<5),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0,
+  0 | (1<<6),
+  0 | (1<<0) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
+  0 | (1<<0) | (1<<1) | (1<<2) | (1<<4) | (1<<5) | (1<<6),
+  0 | (1<<0) | (1<<1) | (1<<4) | (1<<5) | (1<<6),
+  0
+};
+
+return (OTable[id/8] & (1 << (id%8))) != 0;
+#endif
+
+// Global intrinsic function declaration type table.
+#ifdef GET_INTRINSIC_GENERATOR_GLOBAL
+static const unsigned IIT_Table[] = {
+  0x2e, 0x2e2e, (1U<<31) | 1414, 0x10, 0x1f1f, 0x1f1f, 0x2f2f, 
+  0x2f2f, 0x2e2e0, (1U<<31) | 5391, 0x32f, 0x2f3, 0x2f2f2f, (1U<<31) | 5380, (1U<<31) | 769, 
+  0x2e0, 0x2e1, 0x12e1, 0x2e, (1U<<31) | 769, (1U<<31) | 680, 0x2e, 0x2e2e1, 
+  0x142e2e, 0x2e0, (1U<<31) | 771, 0x1f, 0x22e2e, (1U<<31) | 156, 0x2f2f, 0x11f1f, 
+  0x1f1f, 0x11f1f, (1U<<31) | 5438, (1U<<31) | 5438, (1U<<31) | 5391, (1U<<31) | 5438, 0x0, 0x0, 
+  0x42e, (1U<<31) | 5388, (1U<<31) | 5387, 0x2e40, 0x2e50, 0x40, 0x2e0, 0x2e0, 
+  0x2e, 0x2e4, 0x0, 0x2e4, 0x0, 0x2f2f, 0x2f2f, 0x1f1f1f, 
+  (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5421, (1U<<31) | 5421, (1U<<31) | 5419, (1U<<31) | 5421, (1U<<31) | 5421, 
+  (1U<<31) | 5421, (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5421, (1U<<31) | 5430, (1U<<31) | 5423, 
+  (1U<<31) | 5423, (1U<<31) | 5423, (1U<<31) | 5443, (1U<<31) | 3615, (1U<<31) | 5376, (1U<<31) | 5467, (1U<<31) | 5447, (1U<<31) | 5459, 
+  (1U<<31) | 5451, (1U<<31) | 5476, 0xbf1f, 0xbf1f, (1U<<31) | 5412, 0xbf2f, 0xbf2f, (1U<<31) | 5412, 
+  0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0x2f2f, 
+  0x2f2f, 0x4, 0x2f2f2f2f, 0x2f2f2f2f, 0x42e, 0x1f1f1f1f, 0x1f1f1f1f, 0x2ee2e2e, 
+  0x2e2ee0, 0x2ee2e2e0, 0x1f, (1U<<31) | 5444, 0x2e2e2e0, 0x4452e0, 0x54452e0, 0x44552e0, 
+  (1U<<31) | 4221, (1U<<31) | 4222, 0x4f4f, 0x4f50, 0x4f50, 0x1f2e2e, 0x2e, (1U<<31) | 5444, 
+  0x42e2e2e, 0x2f2f, 0x2f2f, 0x2f2f, 0x42e0, (1U<<31) | 68, (1U<<31) | 875, (1U<<31) | 885, 
+  (1U<<31) | 897, (1U<<31) | 77, (1U<<31) | 88, 0x2f2f2f, (1U<<31) | 147, (1U<<31) | 4311, (1U<<31) | 147, (1U<<31) | 4311, 
+  0x19f24f0, 0x49f24f0, 0x2f2f2f, 0x2f2f, 0x11cf1f, 0x40, 0x2f2f2f, 0x42f2f, 
+  0x4442e0, (1U<<31) | 1424, (1U<<31) | 5394, 0x5, 0x42e, 0x2f2f, 0x2f2f, (1U<<31) | 133, 
+  0x2e4, 0x0, 0x42e0, 0x42e4, 0x2f2f, (1U<<31) | 133, 0x2f2f, 0xf0f, 
+  (1U<<31) | 133, 0x2e, 0x2ee2e0, 0x2e0, 0x2e, 0x4f4f, 0x2e, 0x0, 
+  0x2f2f, (1U<<31) | 5403, (1U<<31) | 5398, (1U<<31) | 133, (1U<<31) | 133, (1U<<31) | 133, 0x2e2e0, 0x2e0, 
+  0x2e0, 0x42e2e2e0, (1U<<31) | 142, 0x42e0, 0x42e30, 0x0, 0x444, 0x444, 
+  0x444, 0x444, 0x544, 0x444, 0x444, 0x544, 0x2c2c2c, 0x2c2c2c, 
+  0x2c2c, 0x2c2c, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 0x4a4a4a4a, 0x4a4a4a, 
+  0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x40, 0x40, 0x5, 0x40, 
+  0x40, (1U<<31) | 757, 0x4f5, (1U<<31) | 757, 0x4f5, 0xf0f, (1U<<31) | 952, 0x3f3f3f, 
+  0x3f3f, 0x3f3f3f, 0xafaf1f, 0xafaf1f, 0xbf2f, 0xaf1f, 0xaf1f, 0xaf1f, 
+  0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xbf3f, 0xaf1f, 0xaf1f, 
+  0x2f2f2f, 0x2f2f2f, 0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, 0x2f2f2f, 0x2f2f2f, 
+  0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, 0x2f2f2f, 0x2f2f, 0x2f2f2f, 0x2f2f, 
+  0x2f2f, 0x2f2f, 0x2f2f2f, (1U<<31) | 5262, (1U<<31) | 5252, (1U<<31) | 5240, (1U<<31) | 5262, (1U<<31) | 5341, 
+  (1U<<31) | 5262, (1U<<31) | 5252, (1U<<31) | 5324, (1U<<31) | 5252, (1U<<31) | 5240, (1U<<31) | 5303, (1U<<31) | 5240, 0x3f3f3f, 
+  (1U<<31) | 964, 0x552c, (1U<<31) | 952, 0x3f3f, (1U<<31) | 971, (1U<<31) | 952, 0x3f3f3f, 0xbf3f, 
+  0xbf1f, 0xbf1f, 0x9f1f, 0x9f1f, 0x9f1f, (1U<<31) | 5187, 0x3f3f3f, (1U<<31) | 959, 
+  0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, (1U<<31) | 964, 
+  0x1f1f, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 964, 0x445, 0x1f1f, 0x1f1f1f, 0x1f1f1f, 
+  (1U<<31) | 971, (1U<<31) | 971, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 971, (1U<<31) | 971, 0x1f1f1f, (1U<<31) | 160, 
+  (1U<<31) | 160, 0x3f3f3f, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1561, 0xcf3f3f0, (1U<<31) | 5218, (1U<<31) | 5228, 
+  0xcf3f3f0, (1U<<31) | 5270, (1U<<31) | 5218, (1U<<31) | 5279, (1U<<31) | 5228, (1U<<31) | 5290, (1U<<31) | 952, 0x1f1f1f, 
+  0x3f2c3f, 0x3f2c2c3f, (1U<<31) | 925, (1U<<31) | 910, 0x3f2c3f3f, (1U<<31) | 936, (1U<<31) | 923, (1U<<31) | 908, 
+  0x3f3f3f, 0xbf3f, 0xbf1f, 0xbf1f, (1U<<31) | 5187, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
+  0x3f3f3f, 0xbf1f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, (1U<<31) | 964, 0x1f1f1f, 0x1f1f1f, 
+  (1U<<31) | 971, 0x1f1f1f, (1U<<31) | 971, 0x1f1f1f, (1U<<31) | 160, 0x3f3f, 0x3f3f3f, 0x1f1f1f, 
+  0x3f3f, 0x1f1f1f, (1U<<31) | 1561, 0x1f1f1f, 0x53f5bf3f, 0x4af1f, 0x4af1f, 0x7a3a, 
+  0x49f2f, 0x49f2f, 0x3a7a, 0x43f3f3f, 0x43f3f3f, 0x1f1f1f, 0x2f2f2f, 0x87, 
+  0x2e554, 0x4f54, 0x2e554, 0x4f54, 0x1f1f1f, 0x4444, 0x4444, (1U<<31) | 98, 
+  (1U<<31) | 98, 0x55, 0x1444a44, 0x1444a44, 0x1444a444, 0x1444a44, 0x1444a44, 0x1444a44, 
+  0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 0x11444a2f, 0x11444a2f, (1U<<31) | 38, 
+  (1U<<31) | 38, 0x0, 0x0, 0x0, 0x42f1, 0x2f2f, 0x7777, 0x7777, 
+  0x7777, 0x7777, 0x4439, 0x4439, 0x4474, 0x7739, 0x7739, 0x7769, 
+  0x5, (1U<<31) | 363, 0x2f2f2f2f, (1U<<31) | 58, (1U<<31) | 48, 0x444, (1U<<31) | 119, (1U<<31) | 119, 
+  (1U<<31) | 119, 0x444, 0x444, (1U<<31) | 4355, 0x555, 0x50, (1U<<31) | 0, (1U<<31) | 14, 
+  0x42f2f5, 0x777, 0x1769697, 0x2f2f2f2f, 0x2f2f2f2f, 0x777, 0x2f2f, 0xaf1f, 
+  0x2f2f, 0x4, 0x41f1f5, (1U<<31) | 128, 0x515, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3148, (1U<<31) | 3172, (1U<<31) | 3172, 
+  (1U<<31) | 3200, (1U<<31) | 3232, (1U<<31) | 3200, (1U<<31) | 3200, (1U<<31) | 3200, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3150, (1U<<31) | 3174, (1U<<31) | 3174, 
+  (1U<<31) | 3202, (1U<<31) | 3234, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 3202, (1U<<31) | 1623, (1U<<31) | 1687, (1U<<31) | 2012, 
+  (1U<<31) | 2264, (1U<<31) | 2264, (1U<<31) | 2660, (1U<<31) | 2660, (1U<<31) | 2283, (1U<<31) | 2681, (1U<<31) | 2681, (1U<<31) | 2264, 
+  (1U<<31) | 2029, (1U<<31) | 2283, (1U<<31) | 2283, (1U<<31) | 1654, (1U<<31) | 1722, (1U<<31) | 1975, (1U<<31) | 2223, (1U<<31) | 2223, 
+  (1U<<31) | 2615, (1U<<31) | 2615, (1U<<31) | 2243, (1U<<31) | 2637, (1U<<31) | 2637, (1U<<31) | 2223, (1U<<31) | 1993, (1U<<31) | 2243, 
+  (1U<<31) | 2243, (1U<<31) | 1722, (1U<<31) | 1798, (1U<<31) | 1798, (1U<<31) | 1740, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1722, 
+  (1U<<31) | 1722, (1U<<31) | 1798, (1U<<31) | 1798, (1U<<31) | 1740, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1654, (1U<<31) | 1722, 
+  (1U<<31) | 1722, (1U<<31) | 1670, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1670, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1687, 
+  (1U<<31) | 1759, (1U<<31) | 1759, (1U<<31) | 1704, (1U<<31) | 1778, (1U<<31) | 1778, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1759, 
+  (1U<<31) | 1759, (1U<<31) | 1704, (1U<<31) | 1778, (1U<<31) | 1778, (1U<<31) | 1623, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1638, 
+  (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1638, (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1567, (1U<<31) | 1623, (1U<<31) | 1623, 
+  (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3162, 
+  (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3162, (1U<<31) | 3188, (1U<<31) | 3188, (1U<<31) | 3218, (1U<<31) | 3252, 
+  (1U<<31) | 3218, (1U<<31) | 3218, (1U<<31) | 3218, (1U<<31) | 3188, (1U<<31) | 3218, (1U<<31) | 3218, (1U<<31) | 3252, (1U<<31) | 3252, 
+  (1U<<31) | 3252, (1U<<31) | 1567, (1U<<31) | 1623, (1U<<31) | 1623, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1872, (1U<<31) | 2012, 
+  (1U<<31) | 2012, (1U<<31) | 2264, (1U<<31) | 2264, (1U<<31) | 2012, (1U<<31) | 2264, (1U<<31) | 2264, (1U<<31) | 2660, (1U<<31) | 2660, 
+  (1U<<31) | 2660, (1U<<31) | 2029, (1U<<31) | 2283, (1U<<31) | 2283, (1U<<31) | 2681, (1U<<31) | 2681, (1U<<31) | 2681, (1U<<31) | 2264, 
+  (1U<<31) | 1887, (1U<<31) | 2029, (1U<<31) | 2029, (1U<<31) | 2283, (1U<<31) | 2283, (1U<<31) | 2283, (1U<<31) | 1594, (1U<<31) | 1654, 
+  (1U<<31) | 1654, (1U<<31) | 1722, (1U<<31) | 1722, (1U<<31) | 1839, (1U<<31) | 1975, (1U<<31) | 1975, (1U<<31) | 2223, (1U<<31) | 2223, 
+  (1U<<31) | 1975, (1U<<31) | 2223, (1U<<31) | 2223, (1U<<31) | 2615, (1U<<31) | 2615, (1U<<31) | 2615, (1U<<31) | 1993, (1U<<31) | 2243, 
+  (1U<<31) | 2243, (1U<<31) | 2637, (1U<<31) | 2637, (1U<<31) | 2637, (1U<<31) | 2223, (1U<<31) | 1855, (1U<<31) | 1993, (1U<<31) | 1993, 
+  (1U<<31) | 2243, (1U<<31) | 2243, (1U<<31) | 2243, (1U<<31) | 1938, (1U<<31) | 2086, (1U<<31) | 2174, (1U<<31) | 2442, (1U<<31) | 2554, 
+  (1U<<31) | 2086, (1U<<31) | 2346, (1U<<31) | 2442, (1U<<31) | 2758, (1U<<31) | 2878, (1U<<31) | 2758, (1U<<31) | 2106, (1U<<31) | 2368, 
+  (1U<<31) | 2468, (1U<<31) | 2786, (1U<<31) | 2910, (1U<<31) | 2786, (1U<<31) | 2442, (1U<<31) | 1956, (1U<<31) | 2106, (1U<<31) | 2198, 
+  (1U<<31) | 2468, (1U<<31) | 2584, (1U<<31) | 2468, (1U<<31) | 1654, (1U<<31) | 1722, (1U<<31) | 1722, (1U<<31) | 1798, (1U<<31) | 1798, 
+  (1U<<31) | 1798, (1U<<31) | 1670, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1722, 
+  (1U<<31) | 1938, (1U<<31) | 2086, (1U<<31) | 2174, (1U<<31) | 2442, (1U<<31) | 2554, (1U<<31) | 2086, (1U<<31) | 2346, (1U<<31) | 2442, 
+  (1U<<31) | 2758, (1U<<31) | 2878, (1U<<31) | 2758, (1U<<31) | 2106, (1U<<31) | 2368, (1U<<31) | 2468, (1U<<31) | 2786, (1U<<31) | 2910, 
+  (1U<<31) | 2786, (1U<<31) | 2442, (1U<<31) | 1956, (1U<<31) | 2106, (1U<<31) | 2198, (1U<<31) | 2468, (1U<<31) | 2584, (1U<<31) | 2468, 
+  (1U<<31) | 1654, (1U<<31) | 1722, (1U<<31) | 1722, (1U<<31) | 1798, (1U<<31) | 1798, (1U<<31) | 1798, (1U<<31) | 1670, (1U<<31) | 1740, 
+  (1U<<31) | 1740, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1818, (1U<<31) | 1594, (1U<<31) | 1654, (1U<<31) | 1654, (1U<<31) | 1722, 
+  (1U<<31) | 1722, (1U<<31) | 1722, (1U<<31) | 1608, (1U<<31) | 1670, (1U<<31) | 1670, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1740, 
+  (1U<<31) | 1608, (1U<<31) | 1670, (1U<<31) | 1670, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1740, (1U<<31) | 1903, (1U<<31) | 2047, 
+  (1U<<31) | 2127, (1U<<31) | 2391, (1U<<31) | 2495, (1U<<31) | 2047, (1U<<31) | 2303, (1U<<31) | 2391, (1U<<31) | 2703, (1U<<31) | 2815, 
+  (1U<<31) | 2703, (1U<<31) | 2066, (1U<<31) | 2324, (1U<<31) | 2416, (1U<<31) | 2730, (1U<<31) | 2846, (1U<<31) | 2730, (1U<<31) | 2391, 
+  (1U<<31) | 1920, (1U<<31) | 2066, (1U<<31) | 2150, (1U<<31) | 2416, (1U<<31) | 2524, (1U<<31) | 2416, (1U<<31) | 1623, (1U<<31) | 1687, 
+  (1U<<31) | 1687, (1U<<31) | 1759, (1U<<31) | 1759, (1U<<31) | 1759, (1U<<31) | 1638, (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1778, 
+  (1U<<31) | 1778, (1U<<31) | 1778, (1U<<31) | 1687, (1U<<31) | 1903, (1U<<31) | 2047, (1U<<31) | 2127, (1U<<31) | 2391, (1U<<31) | 2495, 
+  (1U<<31) | 2047, (1U<<31) | 2303, (1U<<31) | 2391, (1U<<31) | 2703, (1U<<31) | 2815, (1U<<31) | 2703, (1U<<31) | 2066, (1U<<31) | 2324, 
+  (1U<<31) | 2416, (1U<<31) | 2730, (1U<<31) | 2846, (1U<<31) | 2730, (1U<<31) | 2391, (1U<<31) | 1920, (1U<<31) | 2066, (1U<<31) | 2150, 
+  (1U<<31) | 2416, (1U<<31) | 2524, (1U<<31) | 2416, (1U<<31) | 1623, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1759, (1U<<31) | 1759, 
+  (1U<<31) | 1759, (1U<<31) | 1638, (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1778, (1U<<31) | 1778, (1U<<31) | 1778, (1U<<31) | 1567, 
+  (1U<<31) | 1623, (1U<<31) | 1623, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1687, (1U<<31) | 1580, (1U<<31) | 1638, (1U<<31) | 1638, 
+  (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1704, (1U<<31) | 1580, (1U<<31) | 1638, (1U<<31) | 1638, (1U<<31) | 1704, (1U<<31) | 1704, 
+  (1U<<31) | 1704, (1U<<31) | 3161, (1U<<31) | 3187, (1U<<31) | 3187, (1U<<31) | 3217, (1U<<31) | 3251, (1U<<31) | 3217, (1U<<31) | 3217, 
+  (1U<<31) | 3217, (1U<<31) | 3187, (1U<<31) | 3217, (1U<<31) | 3217, (1U<<31) | 3251, (1U<<31) | 3251, (1U<<31) | 3251, (1U<<31) | 363, 
+  (1U<<31) | 363, 0x50, 0x440, 0x44447, 0x44477, 0x444777, (1U<<31) | 363, 0x10, 
+  0x42f2f, 0x4444, 0x2f2f, 0x51, 0x444, 0x444, 0x14441f1f, 0x5455, 
+  0x4a454a, 0x4444, 0x1, 0x5455, (1U<<31) | 363, 0x2f2f, 0x77, 0x44, 
+  0x444, 0x2f2f, 0x2f2f, 0x77, 0x0, 0x0, 0x0, 0x0, 
+  0x0, 0x40, 0x5, 0x44, 0x40, 0x5, 0x5, 0x440, 
+  0x440, 0x40, 0x40, 0x4444, 0x4444, 0x4444, 0x441f1f, 0x1439394, 
+  0x14444, 0x14444, 0x1f1f1f, 0x1f1f, 0x2f2f, (1U<<31) | 25, (1U<<31) | 24, 0x42f2f, 
+  0x441f1f, 0x1439394, 0x14444, 0x14444, 0x0, (1U<<31) | 108, 0x0, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0xf0f, 0x11, 0x4444, 
+  0xf0f, 0x4444440, 0x4444440, 0x0, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x40, 0x40, 0x40, 0x4, 0x40, 0x40, 
+  0x4f4, (1U<<31) | 741, 0x2e440, 0x2e440, 0x2e440, 0x2e440, 0x4f4, (1U<<31) | 741, 
+  0x4444440, 0x4444440, 0x444440, 0x444440, 0x444444, 0x444444, (1U<<31) | 3065, (1U<<31) | 3065, 
+  0x2c2c2c, 0x2c2c2c, 0x2c2c, 0x2c2c, (1U<<31) | 5187, 0x4a44a4a, 0x44, 0x4a44a4a, 
+  0x4a44a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, (1U<<31) | 5187, 
+  0x3f3f3f, 0x3f3f3f, 0x3f3f, 0xbfbf3f, 0xbfbf3f, 0x3f3f3f3f, 0x3f3f, 0xbf3f, 
+  0xbf3f, 0x4af1f, 0x4af1f, 0x7a3a, 0x49f2f, 0x49f2f, 0x3a7a, 0xbf3f, 
+  0xbf3f, 0xbf3f, 0xbf3f, 0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
+  0x3f3f3f, 0x4cf3f, (1U<<31) | 5262, (1U<<31) | 5252, (1U<<31) | 5240, (1U<<31) | 4106, (1U<<31) | 4106, (1U<<31) | 3013, 
+  (1U<<31) | 4095, (1U<<31) | 4095, (1U<<31) | 2995, (1U<<31) | 4082, (1U<<31) | 4082, (1U<<31) | 2973, 0x3f3f3f, 0x3f3f3f, 
+  0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 964, (1U<<31) | 964, (1U<<31) | 964, 0x3f3f3f, 
+  0xbf3f3f, 0xbf3f3f, 0x3f3f3f, 0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
+  0x3f3f3f, 0x3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 964, (1U<<31) | 947, (1U<<31) | 947, 
+  (1U<<31) | 947, 0x3f3f, 0x3f3f3f, (1U<<31) | 952, (1U<<31) | 952, (1U<<31) | 952, 0x3f3f3f, 0x3f3f3f, 
+  (1U<<31) | 952, (1U<<31) | 952, (1U<<31) | 952, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
+  (1U<<31) | 952, 0x3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f, 0x2f2f, 
+  0x3f3f, 0x3f3f, 0x3f3f, (1U<<31) | 952, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f3f, 
+  (1U<<31) | 952, 0x3f3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x4bf4f0, 0xbfbf4f0, (1U<<31) | 5196, (1U<<31) | 5206, 
+  0x4bfbf4f0, (1U<<31) | 3437, (1U<<31) | 3986, (1U<<31) | 3447, (1U<<31) | 3997, (1U<<31) | 3459, 0x2b2b2b, 0x2b2b2b2b, 
+  (1U<<31) | 653, (1U<<31) | 651, 0x2b2b2b2b, (1U<<31) | 653, (1U<<31) | 651, (1U<<31) | 649, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x40, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x5445, 0x5445, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x5445, 0x5445, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x2e440, 
+  0x2e440, 0x2e440, 0x2e440, 0x4f44, 0x2e444, 0x4f44, 0x2e444, 0x444, 
+  0x44, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x40, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x44, 0x2f7, 0x2f7, 0x52e5, 0x52e5, 0x52e5, 0x555, 
+  0x44, 0x55, 0x44, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x555, 0x555, 0x444, 0x545, 0x444, 0x444, 0x555, 
+  0x44, 0x44, 0x444, 0x444, 0x444, 0x444, 0x445, 0x445, 
+  0x444, 0x555, 0x444, 0x555, 0x444, 0x555, 0x444, 0x555, 
+  0x44, 0x55, 0x44, 0x44, 0x55, 0x444, 0x444, 0x555, 
+  0x54, 0x54, 0x44, 0x44, 0x44, 0x44, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x555, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 
+  0x44, 0x44, 0x45, 0x44, 0x444, 0x444, 0x55, 0x45, 
+  0x44, 0x55, 0x55, 0x55, 0x55, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 
+  0x554, 0x55, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x555, 0x5555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x444, 0x555, 0x44, 0x44, 0x444, 0x555, 0x445, 0x445, 
+  0x544, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x445, 0x445, 0x444, 
+  0x444, 0x444, 0x444, 0x555, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x454, 0x554, 0x454, 0x554, 
+  0x454, 0x454, 0x454, 0x454, 0x454, 0x454, 0x454, 0x454, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 
+  0x554, 0x554, 0x554, 0x44, 0x444, 0x444, 0x44, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x554, 0x444, 0x444, 0x444, 
+  0x444, 0x554, 0x444, 0x444, 0x554, 0x444, 0x444, 0x45, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x44, 0x444, 0x444, 0x44, 
+  0x44, 0x44, 0x444, 0x5545, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x58, 0x57, 0x85, 0x85, 0x87, 0x85, 0x85, 0x84, 
+  0x84, 0x84, 0x84, 0x75, 0x75, 0x78, 0x75, 0x75, 
+  0x74, 0x74, 0x74, 0x74, 0x58, 0x57, 0x48, 0x47, 
+  0x48, 0x47, 0x484, 0x884, 0x884, 0x884, 0x884, 0x48, 
+  0x48, 0x777, 0x474, 0x774, 0x774, 0x774, 0x774, 0x777, 
+  0x777, 0x77, 0x7777, 0x7777, 0x47777, 0x7777, 0x7777, 0x47, 
+  0x47, 0x777, 0x777, 0x777, 0x777, (1U<<31) | 1434, (1U<<31) | 709, (1U<<31) | 689, 
+  (1U<<31) | 1442, (1U<<31) | 720, (1U<<31) | 699, (1U<<31) | 1434, (1U<<31) | 709, (1U<<31) | 689, (1U<<31) | 1434, (1U<<31) | 709, 
+  (1U<<31) | 689, (1U<<31) | 1434, (1U<<31) | 709, (1U<<31) | 689, (1U<<31) | 1434, (1U<<31) | 709, (1U<<31) | 689, 0x4e4, 
+  0x5e5, 0x4444, 0x4444, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x445, 0x445, 0x444, 0x444, 0x444, 0x444, 0x445, 
+  0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x444, 0x445, 0x4455, 0x4455, 0x445, 0x444, 0x444, 
+  0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x5555, 0x5555, 0x5555, 
+  0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
+  0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x555, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 
+  0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 
+  0x444, 0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x444, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 0x445, 
+  0x445, 0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 0x4455, 
+  0x4455, 0x4455, 0x4455, 0x4455, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x555, 0x555, 0x5555, 0x5555, 0x555, 0x555, 0x555, 0x555, 
+  0x5555, 0x5555, 0x554, 0x554, 0x555, 0x555, 0x4455, 0x5555, 
+  0x5555, 0x5555, 0x4455, 0x4455, 0x4455, 0x4455, 0x555, 0x555, 
+  0x445, 0x444, 0x445, 0x444, 0x445, 0x445, 0x554, 0x554, 
+  0x5555, 0x5555, 0x5555, 0x5555, 0x555, 0x555, 0x555, 0x555, 
+  0x4555, 0x455, 0x454, 0x5555, 0x555, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x454, 0x454, 0x454, 0x454, 0x4444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x445, 0x4455, 0x445, 0x4455, 0x5555, 0x5555, 0x555, 
+  0x555, 0x5555, 0x5555, 0x555, 0x555, 0x4444, 0x4444, 0x4444, 
+  0x5555, 0x5555, 0x555, 0x4455, 0x4455, 0x445, 0x445, 0x5555, 
+  0x5555, 0x555, 0x555, 0x555, 0x555, 0x4444, 0x455, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x444, 0x4444, 0x455, 0x455, 0x455, 0x4555, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x444, 0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
+  0x455, 0x455, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 
+  0x444, 0x454, 0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 
+  0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 
+  0x454, 0x455, 0x455, 0x44, 0x55, 0x4555, 0x44, 0x54, 
+  0x44, 0x54, 0x44, 0x44, 0x54, 0x444, 0x444, 0x44, 
+  0x54, 0x44, 0x54, 0x55, 0x4444, 0x544, 0x4455, 0x555, 
+  0x44444, 0x5444, 0x44555, 0x5555, 0x55, 0x555, 0x455, 0x4555, 
+  0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
+  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x455, 
+  0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 0x445, 0x554, 
+  0x444, 0x444, 0x555, 0x555, 0x555, 0x555, 0x442e2e, (1U<<31) | 731, 
+  0x2e442e2e, 0x452e2e, (1U<<31) | 747, 0x2e542e2e, 0x442e2e, (1U<<31) | 731, 0x2e442e2e, 0x442e2e, 
+  (1U<<31) | 731, 0x2e442e2e, 0x442e2e, (1U<<31) | 731, 0x2e442e2e, 0x44e4, 0x44, 0x44, 
+  0x44444, 0x44444, 0x44444, 0x44444, 0x444, 0x444, 0x444, 0x444, 
+  0x4555, 0x4555, 0x455, 0x455, 0x4555, 0x54, 0x54, 0x54, 
+  0x55, 0x54, 0x55, 0x54, 0x55, 0x54, 0x55, 0x44, 
+  0x45, 0x4555, 0x4555, 0x45, 0x45, 0x54, 0x555, 0x54, 
+  0x555, 0x45, 0x45, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
+  0x444, 0x454, 0x54, 0x4444, 0x544, 0x4455, 0x555, 0x444, 
+  0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 
+  0x55e4, 0x4444, 0x4444, 0x4444, 0x4455, 0x44555, 0x555, 0x555, 
+  0x555, 0x555, 0x555, 0x555, 0x454, 0x454, 0x54, 0x455, 
+  0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 
+  0x4444, 0x4444, 0x4444, 0x4444, 0x45, 0x555, 0x555, 0x44c4, 
+  0x44d4, 0x4d4c, (1U<<31) | 4295, 0x4d4c, (1U<<31) | 4295, 0x44c, 0x44d, 0x44c, 
+  0x44d, 0x44c, 0x44d, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 167, 
+  (1U<<31) | 186, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 981, (1U<<31) | 989, (1U<<31) | 981, 
+  (1U<<31) | 989, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 165, (1U<<31) | 184, (1U<<31) | 4017, 
+  (1U<<31) | 4122, (1U<<31) | 4017, (1U<<31) | 4122, (1U<<31) | 4017, (1U<<31) | 4122, (1U<<31) | 4017, (1U<<31) | 4122, 0x4c4c, 
+  0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 
+  0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, (1U<<31) | 4044, 
+  (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, (1U<<31) | 172, 
+  (1U<<31) | 191, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, (1U<<31) | 4044, (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, 
+  (1U<<31) | 4187, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4c, 
+  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, (1U<<31) | 4044, 
+  (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, (1U<<31) | 979, (1U<<31) | 987, (1U<<31) | 977, 
+  (1U<<31) | 985, (1U<<31) | 979, (1U<<31) | 987, (1U<<31) | 977, (1U<<31) | 985, (1U<<31) | 4010, (1U<<31) | 4115, (1U<<31) | 4010, 
+  (1U<<31) | 4115, (1U<<31) | 3475, (1U<<31) | 3513, (1U<<31) | 3473, (1U<<31) | 3511, 0x44c4c, 0x44d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 
+  0x4d4d, 0x4d4d, (1U<<31) | 4302, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4d, 
+  (1U<<31) | 4189, 0x4c, 0x4d, 0x4d, (1U<<31) | 4284, 0x4c4c, 0x4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c, 0x4d4d, 0x44c4c4d, (1U<<31) | 3531, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x44d4c, 
+  (1U<<31) | 3596, 0x44d4c4c, (1U<<31) | 3594, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4c, 
+  (1U<<31) | 3596, 0x44d4c4c, (1U<<31) | 3594, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, (1U<<31) | 4037, 
+  (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, 
+  (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, 
+  (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, 0x4c442e0, 
+  0x4d442e0, (1U<<31) | 4025, (1U<<31) | 4140, 0x4d442e0, (1U<<31) | 4287, (1U<<31) | 4130, (1U<<31) | 4277, 0x4c442e0, 
+  0x4d442e0, (1U<<31) | 4025, (1U<<31) | 4140, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4037, (1U<<31) | 4152, (1U<<31) | 4035, (1U<<31) | 4150, (1U<<31) | 4035, 
+  (1U<<31) | 4150, (1U<<31) | 4035, (1U<<31) | 4150, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 
+  0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x54c4c, 0x54d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 
+  0x44d4d4d, (1U<<31) | 3491, (1U<<31) | 3519, (1U<<31) | 3491, (1U<<31) | 3519, 0x44c4c4c, 0x44d4d4d, 0x44c4c4d, 
+  (1U<<31) | 3531, 0x44c4c4d, (1U<<31) | 3531, (1U<<31) | 3501, (1U<<31) | 3529, (1U<<31) | 3501, (1U<<31) | 3529, 0x44c4c4d, 
+  (1U<<31) | 3531, (1U<<31) | 4017, (1U<<31) | 4122, (1U<<31) | 4017, (1U<<31) | 4122, (1U<<31) | 4017, (1U<<31) | 4122, (1U<<31) | 4017, 
+  (1U<<31) | 4122, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, 
+  (1U<<31) | 3602, 0x4d4d4d, (1U<<31) | 4300, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x4d4d4d, 
+  (1U<<31) | 4300, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x54c4c4c, 0x54d4d4d, 0x44d4d, 
+  (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x54c4c4c, 0x54d4d4d, 0x54c4c4c, 0x54d4d4d, 0x44c4d, 
+  (1U<<31) | 3541, 0x44c4d4d, (1U<<31) | 3539, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4d, 
+  (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d, (1U<<31) | 4189, 0x44c4d, 
+  (1U<<31) | 3541, 0x44c4d4d, (1U<<31) | 3539, 0x44c4d4d, (1U<<31) | 3539, 0x44c4c, 0x44d4d, 0x44c4c, 
+  0x44d4d, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, 
+  (1U<<31) | 4187, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 
+  0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4d4d, (1U<<31) | 4187, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 
+  0x4d4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4d, (1U<<31) | 3541, 0x44c4d4d, (1U<<31) | 3539, 0x4c4c4d, 
+  (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, 0x44c4d, (1U<<31) | 3541, 0x44c4d4d, (1U<<31) | 3539, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d4d, (1U<<31) | 4187, (1U<<31) | 4044, 
+  (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c, 0x4d4d, (1U<<31) | 179, (1U<<31) | 198, (1U<<31) | 179, (1U<<31) | 198, (1U<<31) | 179, 
+  (1U<<31) | 198, 0x4c4c4c, 0x4d4d4d, 0x54c4d, (1U<<31) | 4349, 0x54c4d4d, (1U<<31) | 4347, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x444d4d, (1U<<31) | 3270, 0x444d4d4d, (1U<<31) | 3268, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
+  0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x54c4d, (1U<<31) | 4349, 0x54c4d4d, (1U<<31) | 4347, 0x444d4d, 
+  (1U<<31) | 3270, 0x444d4d4d, (1U<<31) | 3268, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 
+  0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x444d4d, (1U<<31) | 3270, 0x444d4d4d, 
+  (1U<<31) | 3268, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4d, 
+  (1U<<31) | 4199, 0x4c4c440, 0x4d4d440, 0x4c4c440, 0x4d4d440, (1U<<31) | 4062, (1U<<31) | 4177, 0x4c4d440, 
+  (1U<<31) | 4196, 0x4c4d440, (1U<<31) | 4196, (1U<<31) | 4072, (1U<<31) | 4204, 0x4c4c440, 0x4d4d440, 0x4c4c440, 
+  0x4d4d440, (1U<<31) | 4062, (1U<<31) | 4177, 0x4c4d, (1U<<31) | 4199, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 
+  0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4d, 
+  (1U<<31) | 3531, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 
+  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, (1U<<31) | 4044, (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 
+  0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, (1U<<31) | 172, (1U<<31) | 191, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, (1U<<31) | 4044, (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4d, (1U<<31) | 4189, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x4c4c4d, 
+  (1U<<31) | 4189, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 4300, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, (1U<<31) | 4044, (1U<<31) | 4159, (1U<<31) | 4044, (1U<<31) | 4159, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, 
+  (1U<<31) | 4300, (1U<<31) | 4053, (1U<<31) | 4168, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x44d4d, 
+  (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x44d4d, (1U<<31) | 3604, 0x44d4d4d, (1U<<31) | 3602, 0x4c4d, 
+  (1U<<31) | 4199, 0x4c4d, (1U<<31) | 4199, 0x4c4d4d, (1U<<31) | 4214, 0x4c4d4d, (1U<<31) | 4214, 0x4c4d, 
+  (1U<<31) | 4199, 0x4c4d, (1U<<31) | 4199, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 4199, 0x4c4d, 
+  (1U<<31) | 4199, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x442e2e2e, 
+  0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x4442e2e, 0x4452e2e, 0x4442e2e, 
+  0x4442e2e, 0x4442e2e, 0x4b4b4b, 0x2e0, 0x3939, 0x2a2a, 0x44, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 
+  0x444, 0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x393939, 
+  0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x444, 0x2c2c2c, 0x42c2c, 
+  0x4444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x4444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 
+  0x43b3b, 0x44a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 
+  0x43b3b3b, 0x44a4a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 
+  0x43b3b3b, 0x44a4a4a, 0x44, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 
+  0x594, 0x3b4, 0x2c4, 0x4a4, 0x4, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 
+  0x594, 0x3b4, 0x2c4, 0x4a4, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x44, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
+  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
+  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x39390, 0x39390, 0x39390, 
+  0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a0, 0x2a2a0, 
+  0x2a2a0, 0x42c4, 0x4595, 0x43b4, 0x44a4, 0x42c4, 0x4595, 0x43b4, 
+  0x44a4, 0x440, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x4555, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
+  0x3b3b4a, 0x393955, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 
+  0x393955, 0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x393955, 0x393955, 
+  0x393955, 0x4455, 0x393955, 0x393955, 0x2a2a55, 0x2a2a55, 0x4a4a5959, 0x2c2c3b3b, 
+  0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x393955, 0x454, 0x454, 0x454, 
+  0x454, 0x454, 0x454, 0x898989, 0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x8959, 0x7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898989, 0x7a7a7a, 0x7a7a6b, 
+  0x89897a, 0x598989, 0x4a7a7a, 0x7a89, 0x6b7a, 0x7a89, 0x6b7a, 0x5989, 
+  0x4a7a, 0x5989, 0x4a7a, 0x4a89, 0x3b7a, 0x4a89, 0x3b7a, 0x42c, 
+  0x559, 0x43b, 0x44a, 0x8989, 0x7a7a, (1U<<31) | 5147, 0x7a7a7a7a, 0x898989, 
+  0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, (1U<<31) | 5147, 
+  0x7a7a7a7a, 0x898989, 0x7a7a7a, 0x8989, 0x7a7a, 0x8989, 0x7a7a, 0x8989, 
+  0x7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x8989, 0x7a7a, 0x898989, 
+  0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 
+  0x7a7a4a, 0x898959, 0x7a7a4a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x7a7a3b, 
+  0x89894a, 0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
+  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
+  0x3b3b4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
+  0x4a4a4a, 0x442c2c, 0x545959, 0x443b3b, 0x444a4a, 0x444, 0x2c42c2c, 0x5945959, 
+  0x3b43b3b, 0x4a44a4a, 0x42e4, 0x42e2c, 0x42e59, 0x42e3b, 0x42e4a, 0x42c, 
+  0x459, 0x43b, 0x44a, 0x42e4, 0x4444, 0x42e4, 0x4455, 0x3b3b3b3b, 
+  0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 
+  0x393955, 0x393955, 0x393955, 0x393955, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x2c2c, 0x4455, 0x3b3b3b3b, 
+  0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 
+  0x455, 0x393939, 0x3b3b3b, 0x4a4a4a, 0x393939, 0x39394, 0x39394, 0x392a39, 
+  0x392a39, 0x393939, 0x444, 0x393939, 0x444, 0x3b3b3b, 0x4a4a4a, 0x393955, 
+  0x393955, 0x445, 0x445, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 
+  0x5959, 0x3b3b, 0x4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x2c2c2c, 
+  0x42c2c, 0x2c2c2c, 0x42c2c, 0x393939, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 
+  0x393939, 0x2a2a2a, 0x394, 0x394, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 
+  0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x39392a, 0x44439, 0x44439, 0x4439, 
+  0x39392a, 0x4439, 0x39392a, 0x4444, 0x2a4, 0x44, 0x439, 0x42a, 
+  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x42c2c, 0x43b3b, 0x44a4a, 0x455, 0x43939, 0x42a2a, 0x43939, 0x444, 
+  0x43939, 0x42a2a, 0x43939, 0x42a2a, 0x444, 0x43939, 0x42a2a, 0x42c2c2c, 
+  0x4595959, 0x43b3b3b, 0x44a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 
+  0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42e2c0, 
+  0x42e590, 0x42e3b0, 0x42e4a0, 0x393939, 0x393939, 0x444, 0x393939, 0x393939, 
+  0x444, 0x444, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
+  0x3b3b3b, 0x4a4a4a, 0x393939, 0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
+  0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x440, 0x2c2c2c, 0x42c2c, 0x888, 
+  0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 
+  0x888, 0x777, 0x777, 0x2fcf2f, 0x2fcf2f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
+  0x1fcf1f, 0x1f1fcf1f, 0x1f1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
+  0x1fcf1f, 0x74f7, 0x84f8, 0x44f4, 0x44f4, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
+  0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x40, 0x40, 0x440, 
+  0x40, 0x40, 0x440, 0x0, 0x44, 0x44, 0x44, 0x85, 
+  0x74, 0x47, 0x58, 0x88, 0x77, 0x77, 0x4f0, 0x4f0, 
+  0x77, 0x77, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 
+  0x87, 0x87, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 
+  0x85, 0x85, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 
+  0x85, 0x85, 0x85, 0x85, 0x777, 0x777, 0x888, 0x777, 
+  0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 
+  0x777, 0x777, 0x88, 0x77, 0x77, 0x73, 0x73, 0x74, 
+  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 
+  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x74, 
+  0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x75, 
+  0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x75, 0x88, 
+  0x77, 0x77, 0x88, 0x77, 0x77, 0x8888, 0x7777, 0x7777, 
+  0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 
+  0x7777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x4444, 
+  0x48, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 0x47, 
+  0x2e1, 0x2e1, 0x2e1, 0x2e1, 0x51, 0x51, 0x51, 0x4cf2f, 
+  0x4cf1f, 0x4cf4f, 0x4cf2f, 0x4cf1f, 0x4cf4f, 0x88, 0x77, 0x77, 
+  0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 0x57, 
+  0x448, (1U<<31) | 2943, (1U<<31) | 4341, 0x444, 0x545, 0x0, 0x0, 0x0, 
+  0x88, 0x77, 0x33, 0x44, 0x55, 0xcf4f, 0x888, 0x777, 
+  0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 
+  0x777, 0x777, 0x444, 0x444, 0x444, 0x555, 0x444, 0x555, 
+  0x4444, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 
+  0xcf4f, 0xcf4f, 0x88, 0x88, 0x77, 0x77, 0x88, 0x77, 
+  0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x4, 
+  0x5, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4f4, 0x444, 0x455, 0x455, 0x88, 0x77, 0x77, 
+  0x88, 0x77, 0x77, 0x4444, 0x4444, 0x88, 0x77, 0x77, 
+  0x4477, 0x4444, 0x4477, 0x4444, 0x4477, 0x4444, 0x44747, 0x44444, 
+  0x44747, 0x44444, 0x44747, 0x44444, 0x44747, 0x44444, 0x4477, 0x4444, 
+  0x77, 0x77, 0x77, 0x77, 0x77, 0x88, 0x77, 0x77, 
+  0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 
+  0x77, 0x4453, 0x4453, 0x4453, 0x4454, 0x4454, 0x4454, 0x4455, 
+  0x4455, 0x4455, 0x4453, 0x4453, 0x4453, (1U<<31) | 3286, (1U<<31) | 3286, (1U<<31) | 3286, 
+  (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3319, (1U<<31) | 3319, (1U<<31) | 3319, (1U<<31) | 3286, (1U<<31) | 3286, 
+  (1U<<31) | 3286, (1U<<31) | 3277, (1U<<31) | 3277, (1U<<31) | 3277, (1U<<31) | 3293, (1U<<31) | 3293, (1U<<31) | 3293, (1U<<31) | 3277, 
+  (1U<<31) | 3277, (1U<<31) | 3277, 0x453, 0x453, 0x453, 0x454, 0x454, 0x454, 
+  0x455, 0x455, 0x455, 0x453, 0x453, 0x453, (1U<<31) | 3633, (1U<<31) | 3633, 
+  (1U<<31) | 3633, (1U<<31) | 3647, (1U<<31) | 3647, (1U<<31) | 3647, (1U<<31) | 3662, (1U<<31) | 3662, (1U<<31) | 3662, (1U<<31) | 3633, 
+  (1U<<31) | 3633, (1U<<31) | 3633, (1U<<31) | 3625, (1U<<31) | 3625, (1U<<31) | 3625, (1U<<31) | 3639, (1U<<31) | 3639, (1U<<31) | 3639, 
+  (1U<<31) | 3625, (1U<<31) | 3625, (1U<<31) | 3625, 0x44453, 0x44453, 0x44453, 0x44454, 0x44454, 
+  0x44454, 0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 0x44453, (1U<<31) | 3082, 
+  (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3100, (1U<<31) | 3100, (1U<<31) | 3100, (1U<<31) | 3119, (1U<<31) | 3119, (1U<<31) | 3119, 
+  (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3072, (1U<<31) | 3072, (1U<<31) | 3072, (1U<<31) | 3090, (1U<<31) | 3090, 
+  (1U<<31) | 3090, (1U<<31) | 3072, (1U<<31) | 3072, (1U<<31) | 3072, 0x4453, 0x4453, 0x4453, 0x4454, 
+  0x4454, 0x4454, 0x4455, 0x4455, 0x4455, 0x4453, 0x4453, 0x4453, 
+  (1U<<31) | 3286, (1U<<31) | 3286, (1U<<31) | 3286, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3302, (1U<<31) | 3319, (1U<<31) | 3319, 
+  (1U<<31) | 3319, (1U<<31) | 3286, (1U<<31) | 3286, (1U<<31) | 3286, (1U<<31) | 3277, (1U<<31) | 3277, (1U<<31) | 3277, (1U<<31) | 3293, 
+  (1U<<31) | 3293, (1U<<31) | 3293, (1U<<31) | 3277, (1U<<31) | 3277, (1U<<31) | 3277, 0x44453, 0x44453, 0x44453, 
+  0x44454, 0x44454, 0x44454, 0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 
+  0x44453, (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3100, (1U<<31) | 3100, (1U<<31) | 3100, (1U<<31) | 3119, 
+  (1U<<31) | 3119, (1U<<31) | 3119, (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3082, (1U<<31) | 3072, (1U<<31) | 3072, (1U<<31) | 3072, 
+  (1U<<31) | 3090, (1U<<31) | 3090, (1U<<31) | 3090, (1U<<31) | 3072, (1U<<31) | 3072, (1U<<31) | 3072, 0x54, 0x54, 
+  0x54, 0x54, 0x54, 0x54, 0x34450, 0x34450, 0x34450, 0x44450, 
+  0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 0x34450, 0x34450, 0x34450, 
+  0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 0x444450, 0x554450, 0x554450, 
+  0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 0x33334450, 0x33334450, 0x44444450, 
+  0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 0x3450, 0x3450, 0x3450, 
+  0x4450, 0x4450, 0x4450, 0x5450, 0x5450, 0x5450, 0x3450, 0x3450, 
+  0x3450, 0x33450, 0x33450, 0x33450, 0x44450, 0x44450, 0x44450, 0x55450, 
+  0x55450, 0x55450, 0x33450, 0x33450, 0x33450, 0x3333450, 0x3333450, 0x3333450, 
+  0x4444450, 0x4444450, 0x4444450, 0x3333450, 0x3333450, 0x3333450, 0x344450, 0x344450, 
+  0x344450, 0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 0x544450, 0x344450, 
+  0x344450, 0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 0x4444450, 0x4444450, 
+  0x5544450, 0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, (1U<<31) | 813, (1U<<31) | 813, 
+  (1U<<31) | 813, (1U<<31) | 3055, (1U<<31) | 3055, (1U<<31) | 3055, (1U<<31) | 813, (1U<<31) | 813, (1U<<31) | 813, 0x34450, 
+  0x34450, 0x34450, 0x44450, 0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 
+  0x34450, 0x34450, 0x34450, 0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 
+  0x444450, 0x554450, 0x554450, 0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 
+  0x33334450, 0x33334450, 0x44444450, 0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 
+  0x344450, 0x344450, 0x344450, 0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 
+  0x544450, 0x344450, 0x344450, 0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 
+  0x4444450, 0x4444450, 0x5544450, 0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, 
+  (1U<<31) | 813, (1U<<31) | 813, (1U<<31) | 813, (1U<<31) | 3055, (1U<<31) | 3055, (1U<<31) | 3055, (1U<<31) | 813, (1U<<31) | 813, 
+  (1U<<31) | 813, 0x34450, 0x44450, 0x34450, 0x334450, 0x444450, 0x334450, 0x33334450, 
+  0x44444450, 0x33334450, 0x3450, 0x4450, 0x3450, 0x33450, 0x44450, 0x33450, 
+  0x3333450, 0x4444450, 0x3333450, 0x344450, 0x444450, 0x344450, 0x3344450, 0x4444450, 
+  0x3344450, (1U<<31) | 813, (1U<<31) | 3055, (1U<<31) | 813, 0x34450, 0x44450, 0x34450, 0x334450, 
+  0x444450, 0x334450, 0x33334450, 0x44444450, 0x33334450, 0x344450, 0x444450, 0x344450, 
+  0x3344450, 0x4444450, 0x3344450, (1U<<31) | 813, (1U<<31) | 3055, (1U<<31) | 813, 0x55, (1U<<31) | 4665, 
+  (1U<<31) | 4653, (1U<<31) | 4653, (1U<<31) | 4583, (1U<<31) | 4572, (1U<<31) | 4572, (1U<<31) | 4509, (1U<<31) | 3326, (1U<<31) | 4499, 
+  (1U<<31) | 3309, (1U<<31) | 4499, (1U<<31) | 3309, (1U<<31) | 4709, (1U<<31) | 4698, (1U<<31) | 4698, (1U<<31) | 4623, (1U<<31) | 4613, 
+  (1U<<31) | 4613, (1U<<31) | 4545, (1U<<31) | 3668, (1U<<31) | 4536, (1U<<31) | 3653, (1U<<31) | 4536, (1U<<31) | 3653, (1U<<31) | 4855, 
+  (1U<<31) | 4840, (1U<<31) | 4840, (1U<<31) | 4665, (1U<<31) | 4653, (1U<<31) | 4653, (1U<<31) | 4583, (1U<<31) | 3127, (1U<<31) | 4572, 
+  (1U<<31) | 3108, (1U<<31) | 4572, (1U<<31) | 3108, (1U<<31) | 4911, (1U<<31) | 4897, (1U<<31) | 4897, (1U<<31) | 4709, (1U<<31) | 4698, 
+  (1U<<31) | 4698, (1U<<31) | 4623, (1U<<31) | 3326, (1U<<31) | 4613, (1U<<31) | 3309, (1U<<31) | 4613, (1U<<31) | 3309, (1U<<31) | 5083, 
+  (1U<<31) | 5066, (1U<<31) | 5066, (1U<<31) | 4803, (1U<<31) | 4791, (1U<<31) | 4791, (1U<<31) | 4709, (1U<<31) | 3127, (1U<<31) | 4698, 
+  (1U<<31) | 3108, (1U<<31) | 4698, (1U<<31) | 3108, (1U<<31) | 4755, (1U<<31) | 4742, (1U<<31) | 4742, (1U<<31) | 4665, (1U<<31) | 4653, 
+  (1U<<31) | 4653, (1U<<31) | 4803, (1U<<31) | 4791, (1U<<31) | 4791, (1U<<31) | 4709, (1U<<31) | 4698, (1U<<31) | 4698, (1U<<31) | 4677, 
+  (1U<<31) | 4642, (1U<<31) | 4642, (1U<<31) | 4594, (1U<<31) | 4562, (1U<<31) | 4562, (1U<<31) | 4519, (1U<<31) | 3336, (1U<<31) | 4490, 
+  (1U<<31) | 3293, (1U<<31) | 4490, (1U<<31) | 3293, (1U<<31) | 4720, (1U<<31) | 4688, (1U<<31) | 4688, (1U<<31) | 4633, (1U<<31) | 4604, 
+  (1U<<31) | 4604, (1U<<31) | 4554, (1U<<31) | 3677, (1U<<31) | 4528, (1U<<31) | 3639, (1U<<31) | 4528, (1U<<31) | 3639, (1U<<31) | 4870, 
+  (1U<<31) | 4826, (1U<<31) | 4826, (1U<<31) | 4677, (1U<<31) | 4642, (1U<<31) | 4642, (1U<<31) | 4594, (1U<<31) | 3138, (1U<<31) | 4562, 
+  (1U<<31) | 3090, (1U<<31) | 4562, (1U<<31) | 3090, (1U<<31) | 4925, (1U<<31) | 4884, (1U<<31) | 4884, (1U<<31) | 4720, (1U<<31) | 4688, 
+  (1U<<31) | 4688, (1U<<31) | 4633, (1U<<31) | 3336, (1U<<31) | 4604, (1U<<31) | 3293, (1U<<31) | 4604, (1U<<31) | 3293, (1U<<31) | 5100, 
+  (1U<<31) | 5050, (1U<<31) | 5050, (1U<<31) | 4815, (1U<<31) | 4780, (1U<<31) | 4780, (1U<<31) | 4720, (1U<<31) | 3138, (1U<<31) | 4688, 
+  (1U<<31) | 3090, (1U<<31) | 4688, (1U<<31) | 3090, (1U<<31) | 4768, (1U<<31) | 4730, (1U<<31) | 4730, (1U<<31) | 4677, (1U<<31) | 4642, 
+  (1U<<31) | 4642, (1U<<31) | 4815, (1U<<31) | 4780, (1U<<31) | 4780, (1U<<31) | 4720, (1U<<31) | 4688, (1U<<31) | 4688, (1U<<31) | 4272, 
+  0x4f5, (1U<<31) | 4623, (1U<<31) | 4613, (1U<<31) | 4613, (1U<<31) | 4623, (1U<<31) | 4613, (1U<<31) | 4613, (1U<<31) | 4623, 
+  (1U<<31) | 4613, (1U<<31) | 4613, (1U<<31) | 4623, (1U<<31) | 4613, (1U<<31) | 4613, (1U<<31) | 4633, (1U<<31) | 4604, (1U<<31) | 4604, 
+  (1U<<31) | 4633, (1U<<31) | 4604, (1U<<31) | 4604, (1U<<31) | 4633, (1U<<31) | 4604, (1U<<31) | 4604, (1U<<31) | 4633, (1U<<31) | 4604, 
+  (1U<<31) | 4604, 0x88, 0x77, 0x77, 0x54, 0x54, 0x54, 0x54, 
+  0x54, 0x54, 0x54, 0x54, 0x48, 0x48, 0x48, 0x48, 
+  0x47, 0x47, 0x47, 0x47, 0x58, 0x58, 0x58, 0x58, 
+  0x57, 0x57, 0x57, 0x57, 0x11, 0x141, 0x11, 0x141, 
+  0x14, 0x144, 0x11, 0x141, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, 
+  (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, 
+  (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, 
+  (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, 
+  (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, 
+  (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, 
+  (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, 
+  (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4228, (1U<<31) | 3547, (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, 
+  (1U<<31) | 4248, (1U<<31) | 4260, (1U<<31) | 3568, (1U<<31) | 3581, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4390, (1U<<31) | 4390, (1U<<31) | 4950, (1U<<31) | 4950, 
+  (1U<<31) | 4440, (1U<<31) | 4440, (1U<<31) | 5000, (1U<<31) | 5000, (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, 
+  (1U<<31) | 4378, (1U<<31) | 4938, (1U<<31) | 3779, (1U<<31) | 3792, (1U<<31) | 5494, 0x595959, 0x595959, 0x595959, 
+  0x595959, 0x2c2c2c2c, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x5959, 0x445959, 
+  0x444a4a, 0x40, 0x0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x2e2c, 
+  0x2e3b, 0x2e4a, 0x2e2c, 0x2e2c, 0x2e4a, 0x2e4a, 0x3b, 0x4a0, 
+  0x2e2c0, 0x2e3b0, 0x2e4a0, 0x2e4a0, 0x2e4a0, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 
+  (1U<<31) | 5483, 0x4a4a4a, (1U<<31) | 5481, (1U<<31) | 5481, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c59, 0x44a7a, 0x44a7a, 0x2c4, 0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 
+  0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 
+  0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 
+  0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 
+  0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x3b3b3b, 0x3b3b44, 
+  0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 
+  0x47a4a, 0x47a4a, 0x2c4, 0x7a7a, 0x2c2c, 0x7a7a, 0x7a7a7a7a, 0x7a7a7a, 
+  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x3b3b3b3b, 0x3b3b3b3b, 0x7a7a7a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
+  0x595959, 0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 0x4a2c2c4a, 
+  0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 
+  0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x7a7a7a7a, 0x2c4a4a4a, 
+  0x4a4a3b, 0x59594a, 0x59594a, 0x3b3b2c, 0x3b3b2c, 0x4a4a3b, 0x4a4a3b, 0x59594a, 
+  0x3b3b2c, 0x4a4a3b, 0x5959, (1U<<31) | 5485, 0x4a4a, 0x7a7a, 0x7a7a, 0x7a7a, 
+  0x7a7a, 0x7a7a, 0x2c2c2c, 0x595959, 0x59595959, 0x595959, 0x3b3b3b, 0x4a4a4a, 
+  0x4a4a4a4a, 0x4a4a4a, 0x7a7a, 0x4a4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 
+  0x2c2c2c, 0x4a4a4a, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
+  0x4a4a4a, 0x2c2c2c, 0x4a4a4a, (1U<<31) | 5483, 0x4a4a4a, (1U<<31) | 5481, (1U<<31) | 5481, 0x2c2c2c, 
+  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x4a4a4a, 0x4a2c4a, 0x4a3b4a, 
+  0x4a2c4a, 0x4a4a4a, 0x3b4a, 0x2c3b, 0x3b4a, 0x4a59, 0x3b4a, 0x2c3b, 
+  0x3b4a, 0x4a59, 0x555, 0x1f0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 
+  0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x555, 0x555, (1U<<31) | 5494, 0x444, 
+  0x444, (1U<<31) | 5493, 0x5, 0x5, 0x5, 0x5, 0x1, 0x0, 
+  0x1f0, (1U<<31) | 5494, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x48a8a8a, (1U<<31) | 5169, (1U<<31) | 5169, 
+  (1U<<31) | 5169, (1U<<31) | 5169, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 5169, (1U<<31) | 5169, 
+  (1U<<31) | 5169, (1U<<31) | 5169, (1U<<31) | 5169, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
+  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 5169, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 
+  (1U<<31) | 5169, (1U<<31) | 5169, 0x8a8a8a, 0x8a8a8a, (1U<<31) | 5169, (1U<<31) | 5169, (1U<<31) | 5169, (1U<<31) | 5169, 
+  (1U<<31) | 5169, (1U<<31) | 5169, 0x48a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
+  0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
+  0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 
+  0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x50, 0x50, 0x50, 
+  0x50, (1U<<31) | 5495, (1U<<31) | 5494, 0x0, 0x44, 0x4444, 0x4444, 0x4444, 
+  0x4444, 0x44, 0x4, 0x44, 0x4, 0x4, 0x44, 0x4, 
+  (1U<<31) | 5490, 0x44, 0x4, 0x5, 0x2e89, 0x2e89, 0x52e4a, 0x52e4a, 
+  0x2e4a, 0x2e4a, 0x2e890, 0x2e890, 0x52e4a0, 0x52e4a0, 0x2e4a0, 0x2e4a0, 
+  0x888, 0x888, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 
+  0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x897a, 0x894a, 
+  0x894a, 0x3b7a, 0x7a89, 0x7a7a, 0x597a, 0x4a89, 0x597a, 0x4a89, 
+  0x898989, 0x7a7a7a, 0x595989, 0x4a4a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 
+  0x8989, 0x8989, 0x7a7a, 0x7a7a, 0x8989, 0x7a7a, 0x48959, 0x47a4a, 
+  0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x45959, 0x4594a4a, 0x4a4a4a, 0x7a7a, 
+  (1U<<31) | 3041, (1U<<31) | 3041, 0x7a7a7, 0x0, (1U<<31) | 555, 0x70, 0x44a4a0, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
+  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x2f2f, 0x2f2f, 
+  0x4447a0, 0x447a0, (1U<<31) | 3041, (1U<<31) | 3041, (1U<<31) | 3041, (1U<<31) | 3041, (1U<<31) | 3027, (1U<<31) | 3041, 
+  (1U<<31) | 3041, (1U<<31) | 3027, 0x4, 0x4, 0x42e4, 0x5e50, 0x40, 0x40, 
+  0x50, 0x42e4, 0x42e4, 0x42e0, 0x52f4, 0x4, 0x2c2c2c, 0x2c2c2c2c, 
+  0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x4a4a4a, 
+  0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c59, (1U<<31) | 664, 
+  (1U<<31) | 3977, (1U<<31) | 4369, (1U<<31) | 852, (1U<<31) | 664, (1U<<31) | 3977, (1U<<31) | 4369, (1U<<31) | 852, (1U<<31) | 664, 
+  (1U<<31) | 3977, (1U<<31) | 4369, (1U<<31) | 852, 0x4a4a4a, (1U<<31) | 1362, (1U<<31) | 3377, (1U<<31) | 3705, (1U<<31) | 1515, 
+  0x42c2c, 0x44a4a, 0x45959, 0x43b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 
+  0x42c2c2c, (1U<<31) | 1384, 0x44a4a4a, (1U<<31) | 3355, 0x43b3b3b, (1U<<31) | 1537, 0x42c2c2c, (1U<<31) | 1384, 
+  0x44a4a4a, (1U<<31) | 3355, 0x43b3b3b, (1U<<31) | 1537, (1U<<31) | 5138, (1U<<31) | 5116, (1U<<31) | 5138, (1U<<31) | 5138, 
+  (1U<<31) | 5116, (1U<<31) | 5116, 0x2c2c2c, (1U<<31) | 664, 0x4a4a4a, (1U<<31) | 3977, 0x3b3b3b, (1U<<31) | 852, 
+  0x2c2c2c, (1U<<31) | 664, 0x4a4a4a, (1U<<31) | 3977, 0x3b3b3b, (1U<<31) | 852, 0x2c2c2c, (1U<<31) | 664, 
+  0x4a4a4a, (1U<<31) | 3977, 0x3b3b3b, (1U<<31) | 852, 0x2c2c2c, (1U<<31) | 664, 0x4a4a4a, (1U<<31) | 3977, 
+  0x3b3b3b, (1U<<31) | 852, 0x448989, 0x447a7a, 0x4898989, 0x47a7a7a, 0x4898989, 0x47a7a7a, 
+  (1U<<31) | 3883, (1U<<31) | 3805, 0x3b2c2c3b, 0x594a4a59, 0x2c59592c, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 
+  0x59592c, 0x3b3b4a, 0x2c2c, (1U<<31) | 673, 0x4a4a, (1U<<31) | 3961, 0x3b3b, (1U<<31) | 861, 
+  0x42e2c, 0x2e42c, 0x2e42c, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 
+  0x3b3b3b3b, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 
+  0x594a4a59, 0x4a3b3b4a, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 
+  0x2c2c2c, 0x4a4a4a, 0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 
+  0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, (1U<<31) | 1394, 
+  0x4595959, 0x2c2c2c2c, 0x4a4a3b, (1U<<31) | 3968, 0x59594a, (1U<<31) | 4360, 0x3b3b2c, (1U<<31) | 843, 
+  0x4a4a3b, (1U<<31) | 3968, 0x59594a, (1U<<31) | 4360, 0x3b3b2c, (1U<<31) | 843, 0x2c2c2c2c, 0x2c2c2c2c, 
+  0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x42c2c2c, 
+  0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2e42c0, (1U<<31) | 1362, (1U<<31) | 1372, 
+  (1U<<31) | 3377, (1U<<31) | 3365, (1U<<31) | 1515, (1U<<31) | 1525, (1U<<31) | 1362, (1U<<31) | 1372, (1U<<31) | 3377, (1U<<31) | 3365, 
+  (1U<<31) | 1515, (1U<<31) | 1525, 0x2e42c0, 0x2c2c4a, 0x4a4a59, 0x3b3b59, 0x3b3b4a, 0x4a4a2c, 
+  0x59592c, 0x2c2c4, 0x2c3b, 0x4a59, 0x3b4a, 0x2c3b, 0x4a59, 0x2c3b, 
+  0x4a59, 0x3b4a, 0x3b4a, 0x2c3b, 0x4a59, 0x3b4a, 0x54e5, 0x544e4, 
+  0x555e4, 0x42e, 0x1f, (1U<<31) | 5388, (1U<<31) | 5383, 0x1f1f, 0x40, 0x2e, 
+  0x1f41f, 0x41f, 0x1f41f, 0x41f, 0x0, 0x2e40, (1U<<31) | 5372, (1U<<31) | 5369, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 5369, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5369, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5369, 
+  (1U<<31) | 5372, (1U<<31) | 5369, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5369, (1U<<31) | 5369, 0x2e4422, 0x2e5522, 
+  0x2e4422, 0x2e5522, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 
+  0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x5959, 0x25959, 
+  0x8a8a8a, 0x7b7b7b, (1U<<31) | 5169, 0x7b7b7b7b, 0x28a8a8a, 0x27b7b7b, 0x8a7a, 0x8a4a, 
+  0x7b4b, 0x8a4a, 0x7b4b, 0x27b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 
+  0x2e2d, 0x592e89, 0x5a2e8a, 0x4a2e7a, 0x4b2e7b, 0x89592e0, 0x8a5a2e0, 0x7a4a2e0, 
+  0x7b4b2e0, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a4, 0x7b4, 0x5a5a4, 
+  0x5a5a4, 0x5a5a4, 0x7b7b, 0x48a8a, 0x47b7b, 0x7b7b, 0x598989, 0x5a8a8a, 
+  0x4a7a7a, 0x4b7b7b, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x89894, 0x8a8a4, 
+  0x7a7a4, 0x7b7b4, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x0, 0x0, 
+  (1U<<31) | 275, (1U<<31) | 331, (1U<<31) | 570, (1U<<31) | 615, (1U<<31) | 476, (1U<<31) | 533, (1U<<31) | 367, (1U<<31) | 411, 
+  (1U<<31) | 297, (1U<<31) | 309, (1U<<31) | 582, (1U<<31) | 627, (1U<<31) | 488, (1U<<31) | 500, (1U<<31) | 379, (1U<<31) | 423, 
+  0x4a2e4a, 0x4b2e4b, 0x592e59, 0x5a2e5a, 0x4a4a2e0, 0x4b4b2e0, 0x59592e0, 0x5a5a2e0, 
+  0x22d2d3c, 0x4b4b3c, 0x3c3c2d, 0x4b4b3c, 0x3c3c2d, 0x2d2d2d, 0x3c3c3c, 0x2d2d2d, 
+  0x3c3c3c, 0x2d2d2d2d, 0x4b4b4b, 0x4b7b7b, 0x4b4b4b, 0x3c3c3c, 0x3c3c3c, 0x4b4b4b, 
+  0x3c3c3c, 0x3c3c3c, 0x2d2d3c, 0x3c3c4b, 0x2d4, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 
+  0x2d2d5a, 0x2d2d2d, 0x2d2d2d, 0x4b4b4b, 0x3c3c3c, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 
+  0x44b4b, 0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x4a4b4b, 
+  0x3b3c3c, 0x44b4b, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 
+  0x44b4b, 0x45a5a, 0x43c3c, 0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x2d2d2d, 
+  0x3c3c3c, 0x2d2d2d, 0x3c3c3c, 0x48b8b8b, 0x47c7c7c, 0x259, 0x25a, 0x25b, 
+  0x34a, 0x34b, 0x34c, 0x4898919, 0x48a8a1a, 0x448b8b1b, 0x47a7a1a, 0x47b7b1b, 
+  0x447c7c1c, 0x458989, 0x447a7a, 0x457a7a, 0x4894, 0x4895, 0x4894, 0x4895, 
+  0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x447a7a, 0x458989, 0x457a7a, 0x42c2c3b, 
+  0x42d2d3c, (1U<<31) | 1450, 0x48b8b8b, 0x47c7c7c, 0x428b8b8b, 0x437c7c7c, 0x48919, 0x48a1a, 
+  0x48b1b, 0x47a1a, 0x47b1b, 0x47c1c, (1U<<31) | 1128, (1U<<31) | 1470, (1U<<31) | 1106, (1U<<31) | 1481, 
+  (1U<<31) | 1260, (1U<<31) | 1227, (1U<<31) | 1238, (1U<<31) | 1249, (1U<<31) | 1172, (1U<<31) | 1150, (1U<<31) | 1216, (1U<<31) | 1194, 
+  (1U<<31) | 1161, (1U<<31) | 1139, (1U<<31) | 1205, (1U<<31) | 1183, (1U<<31) | 1073, (1U<<31) | 1040, (1U<<31) | 1084, (1U<<31) | 1051, 
+  (1U<<31) | 1062, (1U<<31) | 1029, (1U<<31) | 1117, (1U<<31) | 1095, 0x442e4b20, 0x442e4c30, 0x442e5b20, 0x442e5b20, 
+  (1U<<31) | 1328, (1U<<31) | 1283, 0x42489892, 0x4247a7a2, 0x32c2c2c, 0x42d2d2d, (1U<<31) | 4326, 0x24a4a4a, 
+  0x24b4b4b, 0x34c4c4c, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, 
+  0x2595959, 0x25a5a5a, 0x25b5b5b, 0x23b3b3b, 0x33c3c3c, 0x43d3d3d, 0x24a4a4a, 0x24b4b4b, 
+  0x34c4c4c, 0x2595959, 0x25a5a5a, 0x25b5b5b, 0x437c4c7c, 0x24a894a, 0x424b8b4b, 0x27a897a, 
+  0x427b8b7b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 
+  0x25a8a5a, 0x425b8b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x428b7b8b, 0x2597a59, 0x25a7a5a, 
+  0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x428b5b8b, 
+  0x27a597a, 0x27a5a7a, 0x427b5b7b, (1U<<31) | 1294, (1U<<31) | 1317, 0x24a894a, 0x424b8b4b, 0x2598959, 
+  0x25a8a5a, 0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 
+  0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 
+  0x25a7a5a, 0x425b7b5b, 0x437c4c7c, 0x428b5b8b, 0x27a597a, 0x27a5a7a, 0x427b5b7b, (1U<<31) | 1328, 
+  (1U<<31) | 1283, 0x32c2c2c, 0x42d2d2d, (1U<<31) | 4326, 0x24a4a4a, 0x24b4b4b, 0x34c4c4c, 0x2898989, 
+  0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, 0x2595959, 0x25a5a5a, 0x25b5b5b, 
+  0x23b3b3b, 0x33c3c3c, 0x43d3d3d, (1U<<31) | 253, (1U<<31) | 264, (1U<<31) | 1017, (1U<<31) | 231, (1U<<31) | 242, 
+  (1U<<31) | 1458, (1U<<31) | 1005, (1U<<31) | 993, 0x24892, 0x247a2, 0x2898989, 0x28a8a8a, 0x428b8b8b, 
+  0x27a7a7a, 0x27b7b7b, 0x437c7c7c, (1U<<31) | 1328, (1U<<31) | 1283, 0x28948989, 0x28a48a8a, (1U<<31) | 1341, 
+  0x27a47a7a, 0x27b47b7b, (1U<<31) | 1494, (1U<<31) | 1305, (1U<<31) | 1271, (1U<<31) | 1328, (1U<<31) | 1283, (1U<<31) | 1328, 
+  (1U<<31) | 1283, (1U<<31) | 1328, (1U<<31) | 1283, (1U<<31) | 803, (1U<<31) | 1404, (1U<<31) | 4324, (1U<<31) | 211, (1U<<31) | 823, 
+  (1U<<31) | 1547, (1U<<31) | 803, (1U<<31) | 1404, (1U<<31) | 4324, (1U<<31) | 211, (1U<<31) | 823, (1U<<31) | 1547, 0x22c4a2c, 
+  0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 
+  0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 
+  0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 
+  0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 
+  0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 
+  0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 
+  0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 
+  0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 
+  0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 
+  0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 
+  0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 
+  0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 
+  0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 
+  0x23b2e0, 0x33c2e0, 0x43d2e0, (1U<<31) | 803, (1U<<31) | 1404, (1U<<31) | 4324, (1U<<31) | 803, (1U<<31) | 1404, 
+  (1U<<31) | 4324, (1U<<31) | 211, (1U<<31) | 823, (1U<<31) | 1547, (1U<<31) | 803, (1U<<31) | 1404, (1U<<31) | 4324, (1U<<31) | 211, 
+  (1U<<31) | 823, (1U<<31) | 1547, (1U<<31) | 559, (1U<<31) | 604, (1U<<31) | 1339, (1U<<31) | 465, (1U<<31) | 522, (1U<<31) | 1492, 
+  (1U<<31) | 2961, (1U<<31) | 2949, 0x28948989, 0x28a48a8a, (1U<<31) | 1341, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1494, 
+  (1U<<31) | 2961, (1U<<31) | 2949, 0x28948989, 0x28a48a8a, (1U<<31) | 1341, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1494, 
+  (1U<<31) | 2961, (1U<<31) | 2949, (1U<<31) | 594, (1U<<31) | 639, (1U<<31) | 1351, (1U<<31) | 512, (1U<<31) | 545, (1U<<31) | 1504, 
+  (1U<<31) | 1328, (1U<<31) | 1283, (1U<<31) | 1328, (1U<<31) | 1283, (1U<<31) | 1328, (1U<<31) | 1283, 0x27a3b7a, 0x27b3b7b, 
+  0x437c3c7c, 0x23b47a3b, 0x23b47b3b, 0x33c47c3c, (1U<<31) | 287, (1U<<31) | 343, (1U<<31) | 833, (1U<<31) | 391, 
+  (1U<<31) | 435, (1U<<31) | 455, (1U<<31) | 211, (1U<<31) | 823, (1U<<31) | 1547, (1U<<31) | 287, (1U<<31) | 343, (1U<<31) | 833, 
+  (1U<<31) | 391, (1U<<31) | 435, (1U<<31) | 455, (1U<<31) | 211, (1U<<31) | 823, (1U<<31) | 1547, 0x32c2c3, 0x42d2d4, 
+  (1U<<31) | 4334, (1U<<31) | 253, (1U<<31) | 264, (1U<<31) | 1017, (1U<<31) | 231, (1U<<31) | 242, (1U<<31) | 1458, (1U<<31) | 1005, 
+  (1U<<31) | 993, (1U<<31) | 287, (1U<<31) | 343, (1U<<31) | 833, (1U<<31) | 391, (1U<<31) | 435, (1U<<31) | 455, (1U<<31) | 211, 
+  (1U<<31) | 823, (1U<<31) | 1547, (1U<<31) | 287, (1U<<31) | 343, (1U<<31) | 833, (1U<<31) | 391, (1U<<31) | 435, (1U<<31) | 455, 
+  (1U<<31) | 211, (1U<<31) | 823, (1U<<31) | 1547, 0x48b8b8b, 0x47c7c7c, 0x48b8b8b, 0x47c7c7c, 0x48b8b8b, 
+  0x47c7c7c, 0x4c4c3d, (1U<<31) | 868, 0x4c4c3d, (1U<<31) | 868, 0x5a8a8a, 0x5b8b8b, 0x5a5a5a, 
+  0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x2c2c2c, 0x2d2d2d, (1U<<31) | 777, 0x4c7c7c, 
+  0x4c4c4c, (1U<<31) | 784, 0x3d3d4c, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x44a4a, 0x44b4b, 
+  0x44c4c, 0x45959, 0x45a5a, 0x45b5b, 0x4a4a4a, 0x4b4b4b, 0x4c4c4c, 0x595959, 
+  0x5a5a5a, 0x5b5b5b, 0x44a4a, 0x44b4b, 0x44c4c, 0x45959, 0x45a5a, 0x45b5b, 
+  0x4a4a4a, 0x4b4b4b, 0x4c4c4c, 0x595959, 0x5a5a5a, 0x5b5b5b, (1U<<31) | 791, (1U<<31) | 777, 
+  0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 
+  0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x4a4c4c, 0x595959, 0x595a5a, 0x595b5b, 0x3b3d3d, 
+  0x44c4c, 0x45959, 0x45a5a, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x595959, 0x5a5a5a, 
+  0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 
+  0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, (1U<<31) | 3377, 
+  (1U<<31) | 3417, (1U<<31) | 3491, (1U<<31) | 3705, (1U<<31) | 3735, (1U<<31) | 3765, 0x2898989, 0x28a8a8a, 0x28b8b8b, 
+  0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 594, (1U<<31) | 512, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1328, 
+  (1U<<31) | 1283, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 594, 
+  (1U<<31) | 512, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1328, (1U<<31) | 1283, (1U<<31) | 3931, (1U<<31) | 3481, (1U<<31) | 3745, 
+  (1U<<31) | 3863, (1U<<31) | 3941, (1U<<31) | 3427, (1U<<31) | 3755, (1U<<31) | 3853, (1U<<31) | 3901, (1U<<31) | 3695, (1U<<31) | 3921, 
+  (1U<<31) | 3725, (1U<<31) | 3823, (1U<<31) | 3387, (1U<<31) | 3833, (1U<<31) | 3397, 0x442e4b20, 0x442e4c30, 0x442e5b20, 
+  0x442e5b20, (1U<<31) | 3891, (1U<<31) | 3685, (1U<<31) | 3911, (1U<<31) | 3715, (1U<<31) | 3813, (1U<<31) | 3345, (1U<<31) | 3843, 
+  (1U<<31) | 3407, 0x48b8b, 0x47c7c, 0x48b8b8b, 0x47c7c7c, 0x4489894, 0x447a7a4, 0x4894, 
+  0x4895, 0x4894, 0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x47777, 
+  0x48888, (1U<<31) | 3951, (1U<<31) | 3873, (1U<<31) | 3951, (1U<<31) | 3873, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 
+  0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 
+  0x4c4c4c4c, 0x4a4a4a4a, 0x4b4b4b4b, 0x4c4c4c4c, 0x3b3b3b3b, 0x3c3c3c3c, 0x3d3d3d3d, (1U<<31) | 5129, 
+  (1U<<31) | 5160, (1U<<31) | 5178, 0x7a4a7a7a, 0x7b4b7b7b, 0x7c4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 
+  0x2c2c2c2c, 0x2d2d2d2d, (1U<<31) | 775, 0x5b8b8b, 0x4c7c7c, 0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 
+  0x59595959, 0x5a5a5a5a, 0x5b5b5b5b, 0x44a4a4a, 0x44b4b4b, 0x44c4c4c, 0x4595959, 0x45a5a5a, 
+  0x45b5b5b, 0x43b3b3b, 0x43c3c3c, 0x43d3d3d, 0x44a4a4a, 0x44b4b4b, 0x44c4c4c, 0x4595959, 
+  0x45a5a5a, 0x45b5b5b, 0x43b3b3b, 0x43c3c3c, 0x43d3d3d, 0x444, 0x555, 0x444, 
+  0x555, 0x444, 0x555, 0x444, 0x555, 0x2e0, 0x2e0, 0x2e0, 
+  0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x4, 0x5, 0x40, 0x50, 
+  0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x40, 0x50, 0x20, 0x2e40, 
+  0x2e0, 0x4442, 0x4452, 0x4440, 0x4450, 0x0, 0x0, (1U<<31) | 763, 
+  (1U<<31) | 5367, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 798, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 4307, 
+  (1U<<31) | 3610, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5354, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 4320, (1U<<31) | 4320, (1U<<31) | 4320, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 4320, (1U<<31) | 4320, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 4320, (1U<<31) | 4320, (1U<<31) | 4320, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 
+  (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, (1U<<31) | 5372, 0x442e0, 0x2e2e0, 0x4440, 0x2595959, 
+  0x25a5a5a, 0x25b5b5b, 0x40, 0x50, 0x4, 0x5, 0x4, 0x5, 
+  0x4, 0x4, 0x45, (1U<<31) | 1557, (1U<<31) | 3621, (1U<<31) | 3775, (1U<<31) | 1557, (1U<<31) | 3621, 
+  (1U<<31) | 3775, 0x44, 0x55, 0x5, 0x2e5, 0x2e0, 0x0, 0x2e0, 
+  0x2e0, 0x2e2e, 0x2e2e2e, 0x0, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x24a4a4a, 
+  0x4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x2e, 0x27a7a7a, 0x27a7a7a, 0x7a7a4, 0x7a7a4, 
+  0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, (1U<<31) | 5156, (1U<<31) | 5363, (1U<<31) | 5357, (1U<<31) | 5125, 
+  0x7a4, 0x7a5, (1U<<31) | 5156, (1U<<31) | 5125, 0x7a4, 0x7a5, 0x2e0, 0x7a7a7a, 
+  0x7a7a7a, 0x7a7a7a, 0x7a7a7a, 0x7a4, (1U<<31) | 799, 0x7a7a, 0x7a7a, 0x7a7a, 
+  0x7a7a, 0x0, 0x2e0, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 
+  0x7a7a4, 0x2e0, 0x2898989, 0x2898989, 0x89894, 0x89894, 0x89894, 0x89894, 
+  0x89894, 0x89894, 0x894a, 0x897a, 0x7a4a, 0x894, 0x895, 0x897a7a, 
+  0x894a, 0x7a4a, 0x894, 0x895, 0x0, 0x2e2c2c0, 0x898989, 0x898989, 
+  0x0, 0x898989, 0x898989, 0x894, 0x4a4a3b, 0x3b3b2c, 0x3b3b2c, 0x2c2c2c, 
+  0x3b3b3b, 0x2c2c2c, 0x3b3b3b, 0x0, 0x3b3b4a, 0x2c4, 0x3b3b3b, 0x3b3b3b, 
+  0x2c2c59, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x4a4a4a, 
+  0x3b3b3b, 0x44a4a, 0x43b3b, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x44a4a, 0x45959, 
+  0x43b3b, 0x2c2c2c, 0x3b3b3b, 0x2c2c2c, 0x3b3b3b, 0x89894, 0x89894, 0x89894, 
+  0x89894, 0x89894, 0x89894, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 
+  0x7a7a7a, 0x2e2c, 0x442e0, 0x440, (1U<<31) | 5147, 0x7a7a7a7a, 0x2898989, 0x27a7a7a, 
+  0x27a7a7a, 0x22c2c3b, 0x4a4a3b, 0x2c2c2c2c, 0x3b3b, 0x59594, 0x59594, 0x59594, 
+  0x48989, 0x47a7a, 0x4898989, 0x47a7a7a, 0x344, 0x444, 0x244, 0x555, 
+  0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, (1U<<31) | 221, 0x22c2c4, 
+  0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c2c, 0x2c5959, 0x225959, 
+  0x595959, 0x22595959, (1U<<31) | 5369, (1U<<31) | 5369, (1U<<31) | 5369, (1U<<31) | 5372, 0x4a4a4a, (1U<<31) | 5372, 
+  0x3b3b3b, (1U<<31) | 5372, 0x3b3b3b, (1U<<31) | 5372, 0x4a4a4a, (1U<<31) | 5372, 0x3b3b3b, (1U<<31) | 5372, 
+  0x3b3b3b, (1U<<31) | 5372, 0x2c2c3b, (1U<<31) | 5372, 0x3b3b3b, (1U<<31) | 5372, 0x2c2c2c, (1U<<31) | 5372, 
+  0x2c2c2c, (1U<<31) | 5372, 0x4a4a4a, (1U<<31) | 5372, 0x3b3b3b, 0x2e4422, 0x2e5522, 0x444, 
+  0x555, 0x4442, 0x2e0, 0x4442, 0x3b7a, 0x3b7b, 0x47a3b, 0x47b3b, 
+  0x22c2c2c, 0x22d2d2d, (1U<<31) | 203, 0x22c2c2c, 0x22d2d2d, (1U<<31) | 203, 0x2c2c2c, 0x2d2d2d, 
+  (1U<<31) | 777, 0x0, 0x0, 0x40, 0x50, 0x40, 0x50, 0x40, 
+  0x2e40, 0x2e50, 0x2e40, 0x2e50, 0x20, 0x4, 0x0, 0x45, 
+  0x8989, 0x8a8a, 0x7a7a, 0x7b7b, 0x8989, 0x7a7a, 0x22c2c2c, 0x24a4a4a, 
+  0x2595959, 0x22c2c2c, 0x24a4a4a, 0x2595959, 0x23b3b3b, 0x23b3b3b, (1U<<31) | 401, (1U<<31) | 445, 
+  (1U<<31) | 321, (1U<<31) | 353, 0x2c4a, 0x2c59, 0x2c3b, 0x4a59, 0x2c4a, 0x2c59, 
+  0x2c3b, 0x4a59, 0x3b4a, 0x3b59, 0x3b4a, 0x3b59, 0x2c3b, 0x4a59, 
+  0x3b4a, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a3b3b4a, 
+  0x3b3b3b3b, 0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c2c2c, 0x2c2c2c, 0x22c2c, 
+  0x4a4a4a, 0x24a4a, 0x595959, 0x25959, 0x3b3b3b, 0x23b3b, 0x2c2c2c, 0x4a4a4a, 
+  0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x442e0, 0x442e0, 
+  0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 
+  0x442e0, 0x442e0, 0x4440, 0x4, 0x44, 0x2e2e, 0x44f0, 0x0, 
+  0x4f0, 0x40, 0x4444, (1U<<31) | 3065, 0x4f0, 0x4f0, 0x4f4, 0x4f0, 
+  0x4, 0x4, 0x4, 0x44, 0x44f, 0xcf4f, 0x4f4, 0x4f4, 
+  0x4f4, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x2e4f0, 0x44f4, 0x4f4, 
+  0x4f0, 0x4f0, 0x44f0, 0x44f0, 0x44f4, 0x44f0, 0x4f4, 0x44f0, 
+  0xcf4f0, 0x44f0, 0x2e4f0, 0x440, 0x44f0, 0x44f0, 0xcf4f0, 0x40, 
+  0x44f0, 0x2e4f0, 0x444, 0x0, 0x4f0, 0x4f4, 0x4f4, 0x2e, 
+  0x444, 0
+};
+
+static const unsigned char IIT_LongEncodingTable[] = {
+  /* 0 */ 0, 4, 4, 15, 0, 15, 0, 15, 0, 15, 0, 1, 1, 0,
+  /* 14 */ 0, 4, 4, 15, 3, 15, 3, 1, 1, 0,
+  /* 24 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 4, 1, 1, 0,
+  /* 38 */ 0, 15, 2, 10, 4, 4, 4, 1, 1, 0,
+  /* 48 */ 21, 15, 2, 1, 15, 2, 15, 2, 1, 0,
+  /* 58 */ 15, 2, 15, 2, 15, 2, 15, 2, 1, 0,
+  /* 68 */ 0, 15, 3, 33, 3, 31, 3, 1, 0,
+  /* 77 */ 0, 15, 3, 34, 1, 0, 4, 31, 3, 1, 0,
+  /* 88 */ 0, 15, 3, 15, 12, 4, 31, 3, 1, 0,
+  /* 98 */ 15, 1, 15, 12, 15, 1, 4, 4, 1, 0,
+  /* 108 */ 15, 1, 15, 1, 15, 1, 4, 4, 4, 1, 0,
+  /* 119 */ 7, 27, 3, 7, 7, 4, 4, 1, 0,
+  /* 128 */ 21, 1, 5, 1, 0,
+  /* 133 */ 21, 15, 1, 1, 15, 1, 15, 1, 0,
+  /* 142 */ 0, 19, 15, 1, 0,
+  /* 147 */ 0, 15, 4, 15, 12, 15, 17, 1, 0,
+  /* 156 */ 2, 18, 1, 0,
+  /* 160 */ 15, 1, 25, 1, 0,
+  /* 165 */ 36, 1, 36, 1, 36, 1, 0,
+  /* 172 */ 21, 12, 4, 36, 1, 12, 4, 12, 4, 36, 1, 0,
+  /* 184 */ 37, 1, 37, 1, 37, 1, 0,
+  /* 191 */ 21, 13, 4, 37, 1, 13, 4, 13, 4, 37, 1, 0,
+  /* 203 */ 16, 2, 16, 2, 16, 2, 2, 0,
+  /* 211 */ 11, 3, 11, 3, 11, 3, 11, 3, 2, 0,
+  /* 221 */ 12, 2, 12, 2, 4, 12, 2, 4, 2, 0,
+  /* 231 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 0,
+  /* 242 */ 11, 7, 11, 7, 11, 7, 11, 4, 4, 2, 0,
+  /* 253 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 0,
+  /* 264 */ 10, 8, 10, 8, 10, 8, 10, 5, 4, 2, 0,
+  /* 275 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 4, 2, 0,
+  /* 287 */ 10, 4, 10, 4, 10, 4, 10, 4, 2, 0,
+  /* 297 */ 10, 4, 10, 4, 14, 2, 9, 5, 10, 4, 2, 0,
+  /* 309 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 4, 2, 0,
+  /* 321 */ 10, 7, 10, 7, 10, 7, 10, 4, 2, 0,
+  /* 331 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 4, 2, 0,
+  /* 343 */ 11, 4, 11, 4, 11, 4, 11, 4, 2, 0,
+  /* 353 */ 11, 7, 11, 7, 11, 7, 11, 4, 2, 0,
+  /* 363 */ 27, 4, 2, 0,
+  /* 367 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 5, 2, 0,
+  /* 379 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 5, 2, 0,
+  /* 391 */ 9, 5, 9, 5, 9, 5, 9, 5, 2, 0,
+  /* 401 */ 9, 8, 9, 8, 9, 8, 9, 5, 2, 0,
+  /* 411 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 5, 2, 0,
+  /* 423 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 5, 2, 0,
+  /* 435 */ 10, 5, 10, 5, 10, 5, 10, 5, 2, 0,
+  /* 445 */ 10, 8, 10, 8, 10, 8, 10, 5, 2, 0,
+  /* 455 */ 11, 5, 11, 5, 11, 5, 11, 5, 2, 0,
+  /* 465 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 0,
+  /* 476 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 7, 2, 0,
+  /* 488 */ 10, 7, 10, 7, 14, 2, 9, 5, 10, 7, 2, 0,
+  /* 500 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 7, 2, 0,
+  /* 512 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 0,
+  /* 522 */ 11, 7, 11, 7, 11, 7, 4, 11, 7, 2, 0,
+  /* 533 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 7, 2, 0,
+  /* 545 */ 11, 7, 11, 7, 11, 7, 11, 7, 2, 0,
+  /* 555 */ 27, 7, 2, 0,
+  /* 559 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 0,
+  /* 570 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 8, 2, 0,
+  /* 582 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 8, 2, 0,
+  /* 594 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 0,
+  /* 604 */ 10, 8, 10, 8, 10, 8, 4, 10, 8, 2, 0,
+  /* 615 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 8, 2, 0,
+  /* 627 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 8, 2, 0,
+  /* 639 */ 10, 8, 10, 8, 10, 8, 10, 8, 2, 0,
+  /* 649 */ 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 0,
+  /* 664 */ 21, 12, 2, 4, 12, 2, 12, 2, 0,
+  /* 673 */ 21, 12, 2, 4, 12, 2, 0,
+  /* 680 */ 18, 4, 14, 2, 14, 2, 14, 2, 0,
+  /* 689 */ 21, 4, 14, 2, 14, 2, 4, 14, 2, 0,
+  /* 699 */ 21, 5, 14, 2, 14, 2, 4, 14, 2, 0,
+  /* 709 */ 21, 4, 14, 2, 14, 2, 4, 4, 14, 2, 0,
+  /* 720 */ 21, 5, 14, 2, 14, 2, 4, 4, 14, 2, 0,
+  /* 731 */ 14, 2, 14, 2, 4, 4, 4, 14, 2, 0,
+  /* 741 */ 21, 4, 4, 14, 2, 0,
+  /* 747 */ 14, 2, 14, 2, 4, 4, 5, 14, 2, 0,
+  /* 757 */ 21, 5, 5, 14, 2, 0,
+  /* 763 */ 0, 17, 17, 14, 2, 0,
+  /* 769 */ 14, 2, 18, 14, 2, 0,
+  /* 775 */ 16, 2, 16, 2, 16, 2, 16, 2, 0,
+  /* 784 */ 13, 3, 16, 2, 16, 2, 0,
+  /* 791 */ 11, 5, 16, 2, 16, 2, 0,
+  /* 798 */ 17, 17, 17, 2, 0,
+  /* 803 */ 12, 2, 12, 2, 12, 2, 12, 2, 3, 0,
+  /* 813 */ 0, 5, 4, 4, 4, 3, 3, 3, 3, 0,
+  /* 823 */ 12, 3, 12, 3, 12, 3, 12, 3, 3, 0,
+  /* 833 */ 12, 4, 12, 4, 12, 4, 12, 4, 3, 0,
+  /* 843 */ 21, 12, 2, 4, 11, 3, 11, 3, 0,
+  /* 852 */ 21, 11, 3, 4, 11, 3, 11, 3, 0,
+  /* 861 */ 21, 11, 3, 4, 11, 3, 0,
+  /* 868 */ 16, 2, 13, 3, 13, 3, 0,
+  /* 875 */ 15, 3, 33, 3, 31, 3, 1, 15, 3, 0,
+  /* 885 */ 15, 3, 34, 1, 0, 4, 31, 3, 1, 15, 3, 0,
+  /* 897 */ 15, 3, 15, 12, 4, 31, 3, 1, 15, 3, 0,
+  /* 908 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 12, 2, 15, 3, 0,
+  /* 923 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 15, 3, 0,
+  /* 936 */ 15, 3, 15, 3, 12, 2, 12, 2, 15, 3, 0,
+  /* 947 */ 15, 3, 25, 3, 0,
+  /* 952 */ 15, 3, 25, 3, 25, 3, 0,
+  /* 959 */ 15, 3, 26, 3, 0,
+  /* 964 */ 15, 3, 26, 3, 26, 3, 0,
+  /* 971 */ 15, 1, 25, 1, 4, 0,
+  /* 977 */ 12, 4, 12, 4, 36, 1, 4, 0,
+  /* 985 */ 13, 4, 13, 4, 37, 1, 4, 0,
+  /* 993 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 4, 0,
+  /* 1005 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 4, 0,
+  /* 1017 */ 11, 8, 11, 8, 11, 8, 11, 5, 4, 2, 4, 0,
+  /* 1029 */ 10, 4, 10, 4, 14, 2, 10, 4, 2, 4, 0,
+  /* 1040 */ 9, 5, 9, 5, 14, 2, 10, 4, 2, 4, 0,
+  /* 1051 */ 10, 5, 10, 5, 14, 2, 10, 4, 2, 4, 0,
+  /* 1062 */ 10, 7, 10, 7, 14, 2, 10, 4, 2, 4, 0,
+  /* 1073 */ 9, 8, 9, 8, 14, 2, 10, 4, 2, 4, 0,
+  /* 1084 */ 10, 8, 10, 8, 14, 2, 10, 4, 2, 4, 0,
+  /* 1095 */ 11, 4, 11, 4, 14, 2, 11, 4, 2, 4, 0,
+  /* 1106 */ 11, 5, 11, 5, 14, 2, 11, 4, 2, 4, 0,
+  /* 1117 */ 11, 7, 11, 7, 14, 2, 11, 4, 2, 4, 0,
+  /* 1128 */ 11, 8, 11, 8, 14, 2, 11, 4, 2, 4, 0,
+  /* 1139 */ 10, 4, 10, 4, 14, 2, 9, 5, 2, 4, 0,
+  /* 1150 */ 9, 5, 9, 5, 14, 2, 9, 5, 2, 4, 0,
+  /* 1161 */ 10, 7, 10, 7, 14, 2, 9, 5, 2, 4, 0,
+  /* 1172 */ 9, 8, 9, 8, 14, 2, 9, 5, 2, 4, 0,
+  /* 1183 */ 10, 4, 10, 4, 14, 2, 10, 5, 2, 4, 0,
+  /* 1194 */ 10, 5, 10, 5, 14, 2, 10, 5, 2, 4, 0,
+  /* 1205 */ 10, 7, 10, 7, 14, 2, 10, 5, 2, 4, 0,
+  /* 1216 */ 10, 8, 10, 8, 14, 2, 10, 5, 2, 4, 0,
+  /* 1227 */ 11, 4, 11, 4, 14, 2, 11, 5, 2, 4, 0,
+  /* 1238 */ 11, 5, 11, 5, 14, 2, 11, 5, 2, 4, 0,
+  /* 1249 */ 11, 7, 11, 7, 14, 2, 11, 5, 2, 4, 0,
+  /* 1260 */ 11, 8, 11, 8, 14, 2, 11, 5, 2, 4, 0,
+  /* 1271 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 4, 0,
+  /* 1283 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 0,
+  /* 1294 */ 10, 7, 10, 7, 9, 8, 10, 7, 2, 4, 0,
+  /* 1305 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 4, 0,
+  /* 1317 */ 9, 8, 9, 8, 10, 7, 9, 8, 2, 4, 0,
+  /* 1328 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 0,
+  /* 1339 */ 11, 8, 11, 8, 11, 8, 4, 11, 8, 2, 4, 0,
+  /* 1351 */ 11, 8, 11, 8, 11, 8, 11, 8, 2, 4, 0,
+  /* 1362 */ 12, 2, 12, 2, 12, 2, 12, 2, 4, 0,
+  /* 1372 */ 21, 12, 2, 4, 12, 2, 12, 2, 12, 2, 4, 0,
+  /* 1384 */ 21, 12, 2, 4, 12, 2, 12, 2, 4, 0,
+  /* 1394 */ 12, 2, 9, 5, 9, 5, 12, 2, 4, 0,
+  /* 1404 */ 13, 2, 13, 2, 13, 2, 13, 2, 4, 0,
+  /* 1414 */ 15, 1, 15, 1, 14, 2, 14, 2, 4, 0,
+  /* 1424 */ 15, 4, 15, 4, 14, 2, 14, 2, 4, 0,
+  /* 1434 */ 21, 4, 14, 2, 14, 2, 4, 0,
+  /* 1442 */ 21, 5, 14, 2, 14, 2, 4, 0,
+  /* 1450 */ 13, 3, 16, 2, 16, 2, 4, 0,
+  /* 1458 */ 12, 7, 12, 7, 12, 7, 12, 4, 4, 3, 4, 0,
+  /* 1470 */ 12, 4, 12, 4, 14, 2, 12, 4, 3, 4, 0,
+  /* 1481 */ 12, 7, 12, 7, 14, 2, 12, 4, 3, 4, 0,
+  /* 1492 */ 12, 7, 12, 7, 12, 7, 4, 12, 7, 3, 4, 0,
+  /* 1504 */ 12, 7, 12, 7, 12, 7, 12, 7, 3, 4, 0,
+  /* 1515 */ 11, 3, 11, 3, 11, 3, 11, 3, 4, 0,
+  /* 1525 */ 21, 11, 3, 4, 11, 3, 11, 3, 11, 3, 4, 0,
+  /* 1537 */ 21, 11, 3, 4, 11, 3, 11, 3, 4, 0,
+  /* 1547 */ 13, 3, 13, 3, 13, 3, 13, 3, 4, 0,
+  /* 1557 */ 21, 3, 4, 0,
+  /* 1561 */ 15, 3, 26, 3, 4, 0,
+  /* 1567 */ 15, 2, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1580 */ 15, 2, 4, 4, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1594 */ 15, 2, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1608 */ 15, 2, 4, 4, 7, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1623 */ 15, 2, 4, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1638 */ 15, 2, 4, 4, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1654 */ 15, 2, 4, 7, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1670 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1687 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1704 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1722 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1740 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1759 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1778 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1798 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1818 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1839 */ 15, 2, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1855 */ 15, 2, 4, 4, 15, 10, 7, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1872 */ 15, 2, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1887 */ 15, 2, 4, 4, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1903 */ 15, 2, 4, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1920 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1938 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1956 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1975 */ 15, 2, 4, 15, 10, 7, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 1993 */ 15, 2, 4, 4, 15, 10, 7, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2012 */ 15, 2, 4, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2029 */ 15, 2, 4, 4, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2047 */ 15, 2, 4, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2066 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2086 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2106 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2127 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2150 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2174 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2198 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2223 */ 15, 2, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2243 */ 15, 2, 4, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2264 */ 15, 2, 4, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2283 */ 15, 2, 4, 4, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2303 */ 15, 2, 4, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2324 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2346 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2368 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2391 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2416 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2442 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2468 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2495 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2524 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2554 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2584 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2615 */ 15, 2, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2637 */ 15, 2, 4, 4, 15, 10, 7, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2660 */ 15, 2, 4, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2681 */ 15, 2, 4, 4, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2703 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2730 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2758 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2786 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2815 */ 15, 2, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2846 */ 15, 2, 4, 4, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2878 */ 15, 2, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2910 */ 15, 2, 4, 4, 7, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 10, 15, 18, 15, 18, 15, 18, 15, 18, 11, 4, 10, 4, 1, 4, 4, 0,
+  /* 2943 */ 21, 4, 1, 4, 4, 0,
+  /* 2949 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 4, 0,
+  /* 2961 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 4, 0,
+  /* 2973 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 15, 3, 4, 4, 0,
+  /* 2995 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 4, 4, 0,
+  /* 3013 */ 21, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 4, 4, 0,
+  /* 3027 */ 10, 4, 10, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3041 */ 10, 7, 10, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3055 */ 0, 5, 4, 4, 4, 4, 4, 4, 4, 0,
+  /* 3065 */ 21, 4, 4, 4, 4, 4, 0,
+  /* 3072 */ 23, 3, 3, 3, 3, 5, 4, 4, 4, 0,
+  /* 3082 */ 21, 3, 3, 5, 4, 4, 4, 0,
+  /* 3090 */ 23, 4, 4, 4, 4, 5, 4, 4, 4, 0,
+  /* 3100 */ 21, 4, 4, 5, 4, 4, 4, 0,
+  /* 3108 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 4, 0,
+  /* 3119 */ 21, 5, 5, 5, 4, 4, 4, 0,
+  /* 3127 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 4, 0,
+  /* 3138 */ 23, 7, 7, 7, 7, 5, 4, 4, 4, 0,
+  /* 3148 */ 15, 1, 15, 1, 15, 1, 15, 9, 11, 4, 4, 4, 0,
+  /* 3161 */ 0, 15, 2, 4, 15, 9, 11, 4, 4, 4, 0,
+  /* 3172 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3187 */ 0, 15, 2, 4, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3200 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3217 */ 0, 15, 2, 4, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3232 */ 15, 1, 15, 1, 15, 1, 15, 9, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3251 */ 0, 15, 2, 4, 15, 9, 15, 9, 15, 9, 15, 9, 11, 4, 4, 4, 0,
+  /* 3268 */ 16, 4, 16, 4, 16, 4, 4, 4, 0,
+  /* 3277 */ 23, 3, 3, 3, 3, 5, 4, 4, 0,
+  /* 3286 */ 21, 3, 3, 5, 4, 4, 0,
+  /* 3293 */ 23, 4, 4, 4, 4, 5, 4, 4, 0,
+  /* 3302 */ 21, 4, 4, 5, 4, 4, 0,
+  /* 3309 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 0,
+  /* 3319 */ 21, 5, 5, 5, 4, 4, 0,
+  /* 3326 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 0,
+  /* 3336 */ 23, 7, 7, 7, 7, 5, 4, 4, 0,
+  /* 3345 */ 0, 14, 2, 2, 10, 4, 10, 4, 4, 0,
+  /* 3355 */ 21, 10, 4, 4, 10, 4, 10, 4, 4, 0,
+  /* 3365 */ 21, 10, 4, 4, 10, 4, 10, 4, 10, 4, 4, 0,
+  /* 3377 */ 10, 4, 10, 4, 10, 4, 10, 4, 4, 0,
+  /* 3387 */ 0, 14, 2, 2, 9, 5, 10, 4, 4, 0,
+  /* 3397 */ 0, 14, 2, 2, 10, 5, 10, 4, 4, 0,
+  /* 3407 */ 0, 14, 2, 2, 11, 4, 11, 4, 4, 0,
+  /* 3417 */ 11, 4, 11, 4, 11, 4, 11, 4, 4, 0,
+  /* 3427 */ 0, 14, 2, 2, 11, 5, 11, 4, 4, 0,
+  /* 3437 */ 0, 15, 4, 15, 11, 15, 11, 4, 4, 0,
+  /* 3447 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 4, 0,
+  /* 3459 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 4, 0,
+  /* 3473 */ 36, 1, 36, 1, 12, 4, 4, 0,
+  /* 3481 */ 0, 14, 2, 3, 12, 4, 12, 4, 4, 0,
+  /* 3491 */ 12, 4, 12, 4, 12, 4, 12, 4, 4, 0,
+  /* 3501 */ 13, 4, 13, 4, 12, 4, 12, 4, 4, 0,
+  /* 3511 */ 37, 1, 37, 1, 13, 4, 4, 0,
+  /* 3519 */ 13, 4, 13, 4, 13, 4, 13, 4, 4, 0,
+  /* 3529 */ 16, 4, 16, 4, 13, 4, 13, 4, 4, 0,
+  /* 3539 */ 16, 4, 16, 4, 13, 4, 4, 0,
+  /* 3547 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
+  /* 3568 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
+  /* 3581 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 4, 0,
+  /* 3594 */ 13, 4, 13, 4, 16, 4, 4, 0,
+  /* 3602 */ 16, 4, 16, 4, 16, 4, 4, 0,
+  /* 3610 */ 17, 17, 4, 4, 0,
+  /* 3615 */ 15, 0, 18, 4, 4, 0,
+  /* 3621 */ 21, 4, 4, 0,
+  /* 3625 */ 23, 3, 3, 3, 3, 5, 4, 0,
+  /* 3633 */ 21, 3, 3, 5, 4, 0,
+  /* 3639 */ 23, 4, 4, 4, 4, 5, 4, 0,
+  /* 3647 */ 21, 4, 4, 5, 4, 0,
+  /* 3653 */ 23, 4, 4, 4, 4, 5, 5, 4, 0,
+  /* 3662 */ 21, 5, 5, 5, 4, 0,
+  /* 3668 */ 23, 7, 7, 7, 7, 5, 5, 4, 0,
+  /* 3677 */ 23, 7, 7, 7, 7, 5, 4, 0,
+  /* 3685 */ 0, 14, 2, 2, 10, 4, 9, 5, 4, 0,
+  /* 3695 */ 0, 14, 2, 2, 9, 5, 9, 5, 4, 0,
+  /* 3705 */ 9, 5, 9, 5, 9, 5, 9, 5, 4, 0,
+  /* 3715 */ 0, 14, 2, 2, 10, 4, 10, 5, 4, 0,
+  /* 3725 */ 0, 14, 2, 2, 10, 5, 10, 5, 4, 0,
+  /* 3735 */ 10, 5, 10, 5, 10, 5, 10, 5, 4, 0,
+  /* 3745 */ 0, 14, 2, 2, 11, 4, 11, 5, 4, 0,
+  /* 3755 */ 0, 14, 2, 2, 11, 5, 11, 5, 4, 0,
+  /* 3765 */ 11, 5, 11, 5, 11, 5, 11, 5, 4, 0,
+  /* 3775 */ 21, 5, 4, 0,
+  /* 3779 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 4, 0,
+  /* 3792 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
+  /* 3805 */ 21, 10, 4, 4, 10, 7, 4, 0,
+  /* 3813 */ 0, 14, 2, 2, 10, 4, 10, 7, 4, 0,
+  /* 3823 */ 0, 14, 2, 2, 9, 5, 10, 7, 4, 0,
+  /* 3833 */ 0, 14, 2, 2, 10, 5, 10, 7, 4, 0,
+  /* 3843 */ 0, 14, 2, 2, 11, 4, 11, 7, 4, 0,
+  /* 3853 */ 0, 14, 2, 2, 11, 5, 11, 7, 4, 0,
+  /* 3863 */ 0, 14, 2, 3, 12, 4, 12, 7, 4, 0,
+  /* 3873 */ 12, 7, 12, 7, 12, 7, 12, 7, 4, 0,
+  /* 3883 */ 21, 9, 5, 4, 9, 8, 4, 0,
+  /* 3891 */ 0, 14, 2, 2, 10, 4, 9, 8, 4, 0,
+  /* 3901 */ 0, 14, 2, 2, 9, 5, 9, 8, 4, 0,
+  /* 3911 */ 0, 14, 2, 2, 10, 4, 10, 8, 4, 0,
+  /* 3921 */ 0, 14, 2, 2, 10, 5, 10, 8, 4, 0,
+  /* 3931 */ 0, 14, 2, 2, 11, 4, 11, 8, 4, 0,
+  /* 3941 */ 0, 14, 2, 2, 11, 5, 11, 8, 4, 0,
+  /* 3951 */ 11, 8, 11, 8, 11, 8, 11, 8, 4, 0,
+  /* 3961 */ 21, 10, 4, 4, 10, 4, 0,
+  /* 3968 */ 21, 11, 3, 4, 10, 4, 10, 4, 0,
+  /* 3977 */ 21, 10, 4, 4, 10, 4, 10, 4, 0,
+  /* 3986 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 0,
+  /* 3997 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 0,
+  /* 4010 */ 12, 4, 36, 1, 12, 4, 0,
+  /* 4017 */ 0, 36, 1, 14, 2, 12, 4, 0,
+  /* 4025 */ 0, 14, 2, 36, 1, 4, 4, 12, 4, 0,
+  /* 4035 */ 36, 1, 36, 1, 12, 4, 12, 4, 0,
+  /* 4044 */ 12, 4, 36, 1, 12, 4, 12, 4, 0,
+  /* 4053 */ 13, 4, 36, 1, 12, 4, 12, 4, 0,
+  /* 4062 */ 0, 36, 1, 4, 4, 12, 4, 12, 4, 0,
+  /* 4072 */ 0, 36, 1, 4, 4, 13, 4, 12, 4, 0,
+  /* 4082 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
+  /* 4095 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
+  /* 4106 */ 21, 15, 3, 15, 3, 15, 12, 4, 0,
+  /* 4115 */ 13, 4, 37, 1, 13, 4, 0,
+  /* 4122 */ 0, 37, 1, 14, 2, 13, 4, 0,
+  /* 4130 */ 0, 14, 2, 36, 1, 4, 4, 13, 4, 0,
+  /* 4140 */ 0, 14, 2, 37, 1, 4, 4, 13, 4, 0,
+  /* 4150 */ 37, 1, 37, 1, 13, 4, 13, 4, 0,
+  /* 4159 */ 13, 4, 37, 1, 13, 4, 13, 4, 0,
+  /* 4168 */ 16, 4, 37, 1, 13, 4, 13, 4, 0,
+  /* 4177 */ 0, 37, 1, 4, 4, 13, 4, 13, 4, 0,
+  /* 4187 */ 16, 4, 16, 4, 13, 4, 13, 4, 0,
+  /* 4196 */ 0, 4, 4, 16, 4, 13, 4, 0,
+  /* 4204 */ 0, 37, 1, 4, 4, 16, 4, 13, 4, 0,
+  /* 4214 */ 16, 4, 16, 4, 13, 4, 0,
+  /* 4221 */ 0, 14, 20, 5, 15, 4, 0,
+  /* 4228 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
+  /* 4248 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
+  /* 4260 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 0,
+  /* 4272 */ 5, 19, 15, 4, 0,
+  /* 4277 */ 0, 14, 2, 37, 1, 4, 4, 16, 4, 0,
+  /* 4287 */ 0, 14, 2, 4, 4, 16, 4, 0,
+  /* 4295 */ 13, 4, 16, 4, 0,
+  /* 4300 */ 16, 4, 16, 4, 16, 4, 0,
+  /* 4307 */ 4, 17, 4, 0,
+  /* 4311 */ 0, 15, 4, 15, 12, 15, 17, 4, 0,
+  /* 4320 */ 17, 17, 4, 0,
+  /* 4324 */ 16, 2, 16, 2, 16, 2, 16, 2, 5, 0,
+  /* 4334 */ 5, 16, 2, 16, 2, 5, 0,
+  /* 4341 */ 21, 5, 1, 4, 5, 0,
+  /* 4347 */ 16, 4, 16, 4, 13, 4, 5, 0,
+  /* 4355 */ 21, 1, 5, 5, 0,
+  /* 4360 */ 21, 10, 4, 4, 9, 5, 9, 5, 0,
+  /* 4369 */ 21, 9, 5, 4, 9, 5, 9, 5, 0,
+  /* 4378 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 4390 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 4440 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
+  /* 4490 */ 23, 4, 4, 4, 4, 5, 4, 7, 0,
+  /* 4499 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 0,
+  /* 4509 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 0,
+  /* 4519 */ 23, 7, 7, 7, 7, 5, 4, 7, 0,
+  /* 4528 */ 23, 4, 4, 4, 4, 5, 7, 0,
+  /* 4536 */ 23, 4, 4, 4, 4, 5, 5, 7, 0,
+  /* 4545 */ 23, 7, 7, 7, 7, 5, 5, 7, 0,
+  /* 4554 */ 23, 7, 7, 7, 7, 5, 7, 0,
+  /* 4562 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 0,
+  /* 4572 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 0,
+  /* 4583 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 0,
+  /* 4594 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 0,
+  /* 4604 */ 23, 4, 4, 4, 4, 5, 7, 7, 0,
+  /* 4613 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 0,
+  /* 4623 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 0,
+  /* 4633 */ 23, 7, 7, 7, 7, 5, 7, 7, 0,
+  /* 4642 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 0,
+  /* 4653 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 0,
+  /* 4665 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 0,
+  /* 4677 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 0,
+  /* 4688 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 0,
+  /* 4698 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 0,
+  /* 4709 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 0,
+  /* 4720 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 0,
+  /* 4730 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 0,
+  /* 4742 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 0,
+  /* 4755 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 0,
+  /* 4768 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 0,
+  /* 4780 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 0,
+  /* 4791 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 0,
+  /* 4803 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 0,
+  /* 4815 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 0,
+  /* 4826 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 4840 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 4855 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 4870 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 7, 7, 0,
+  /* 4884 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 4897 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 4911 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 4925 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 0,
+  /* 4938 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 4950 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5000 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5050 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5066 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5083 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5100 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
+  /* 5116 */ 21, 10, 4, 4, 10, 7, 10, 7, 0,
+  /* 5125 */ 17, 10, 7, 0,
+  /* 5129 */ 9, 8, 9, 8, 9, 5, 9, 8, 0,
+  /* 5138 */ 21, 9, 5, 4, 9, 8, 9, 8, 0,
+  /* 5147 */ 9, 8, 9, 8, 9, 8, 9, 8, 0,
+  /* 5156 */ 17, 9, 8, 0,
+  /* 5160 */ 10, 8, 10, 8, 10, 5, 10, 8, 0,
+  /* 5169 */ 10, 8, 10, 8, 10, 8, 10, 8, 0,
+  /* 5178 */ 11, 8, 11, 8, 11, 5, 11, 8, 0,
+  /* 5187 */ 15, 3, 15, 3, 15, 11, 15, 11, 0,
+  /* 5196 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 0,
+  /* 5206 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 0,
+  /* 5218 */ 0, 15, 3, 15, 3, 15, 3, 15, 12, 0,
+  /* 5228 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
+  /* 5240 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
+  /* 5252 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 0,
+  /* 5262 */ 21, 15, 3, 15, 3, 15, 12, 0,
+  /* 5270 */ 0, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5279 */ 0, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5290 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5303 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5324 */ 22, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5341 */ 21, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
+  /* 5354 */ 4, 17, 0,
+  /* 5357 */ 10, 7, 10, 7, 17, 0,
+  /* 5363 */ 9, 8, 17, 0,
+  /* 5367 */ 0, 14, 17, 17, 0,
+  /* 5372 */ 17, 17, 17, 0,
+  /* 5376 */ 15, 0, 18, 0,
+  /* 5380 */ 1, 18, 0,
+  /* 5383 */ 14, 2, 18, 0,
+  /* 5387 */ 15, 4, 18, 0,
+  /* 5391 */ 0, 19, 0,
+  /* 5394 */ 15, 1, 19, 0,
+  /* 5398 */ 1, 14, 2, 19, 0,
+  /* 5403 */ 21, 14, 2, 1, 14, 2, 4, 19, 0,
+  /* 5412 */ 15, 2, 15, 10, 15, 19, 0,
+  /* 5419 */ 15, 2, 15, 2, 15, 2, 15, 2, 19, 19, 0,
+  /* 5430 */ 15, 2, 15, 2, 4, 19, 19, 0,
+  /* 5438 */ 0, 19, 19, 19, 0,
+  /* 5443 */ 15, 0, 29, 0,
+  /* 5447 */ 0, 1, 29, 0,
+  /* 5451 */ 0, 5, 4, 14, 2, 4, 29, 0,
+  /* 5459 */ 5, 5, 4, 14, 2, 4, 29, 0,
+  /* 5467 */ 18, 5, 4, 15, 4, 4, 4, 29, 0,
+  /* 5476 */ 0, 5, 4, 29, 0,
+  /* 5481 */ 28, 35, 28, 35, 28, 35, 28, 35, 0,
+  /* 5490 */ 8, 41, 0,
+  /* 5493 */ 41, 41, 41, 41, 0,
+  255
+};
+
+#endif
+
+// Add parameter attributes that are not common to all intrinsics.
+#ifdef GET_INTRINSIC_ATTRIBUTES
+AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {
+  static const uint8_t IntrinsicsToAttributesMap[] = {
+    1, // llvm.addressofreturnaddress
+    2, // llvm.adjust.trampoline
+    3, // llvm.annotation
+    3, // llvm.assume
+    4, // llvm.bitreverse
+    4, // llvm.bswap
+    4, // llvm.canonicalize
+    4, // llvm.ceil
+    3, // llvm.clear_cache
+    5, // llvm.codeview.annotation
+    1, // llvm.convert.from.fp16
+    1, // llvm.convert.to.fp16
+    4, // llvm.copysign
+    3, // llvm.coro.alloc
+    6, // llvm.coro.begin
+    7, // llvm.coro.destroy
+    8, // llvm.coro.done
+    3, // llvm.coro.end
+    1, // llvm.coro.frame
+    9, // llvm.coro.free
+    10, // llvm.coro.id
+    1, // llvm.coro.noop
+    11, // llvm.coro.param
+    12, // llvm.coro.promise
+    7, // llvm.coro.resume
+    3, // llvm.coro.save
+    1, // llvm.coro.size
+    13, // llvm.coro.subfn.addr
+    3, // llvm.coro.suspend
+    4, // llvm.cos
+    4, // llvm.ctlz
+    4, // llvm.ctpop
+    4, // llvm.cttz
+    4, // llvm.dbg.addr
+    4, // llvm.dbg.declare
+    4, // llvm.dbg.label
+    4, // llvm.dbg.value
+    3, // llvm.debugtrap
+    1, // llvm.donothing
+    3, // llvm.eh.dwarf.cfa
+    1, // llvm.eh.exceptioncode
+    1, // llvm.eh.exceptionpointer
+    3, // llvm.eh.return.i32
+    3, // llvm.eh.return.i64
+    1, // llvm.eh.sjlj.callsite
+    3, // llvm.eh.sjlj.functioncontext
+    14, // llvm.eh.sjlj.longjmp
+    1, // llvm.eh.sjlj.lsda
+    3, // llvm.eh.sjlj.setjmp
+    3, // llvm.eh.sjlj.setup.dispatch
+    1, // llvm.eh.typeid.for
+    3, // llvm.eh.unwind.init
+    4, // llvm.exp
+    4, // llvm.exp2
+    1, // llvm.expect
+    15, // llvm.experimental.constrained.cos
+    15, // llvm.experimental.constrained.exp
+    15, // llvm.experimental.constrained.exp2
+    15, // llvm.experimental.constrained.fadd
+    15, // llvm.experimental.constrained.fdiv
+    15, // llvm.experimental.constrained.fma
+    15, // llvm.experimental.constrained.fmul
+    15, // llvm.experimental.constrained.frem
+    15, // llvm.experimental.constrained.fsub
+    15, // llvm.experimental.constrained.log
+    15, // llvm.experimental.constrained.log10
+    15, // llvm.experimental.constrained.log2
+    15, // llvm.experimental.constrained.nearbyint
+    15, // llvm.experimental.constrained.pow
+    15, // llvm.experimental.constrained.powi
+    15, // llvm.experimental.constrained.rint
+    15, // llvm.experimental.constrained.sin
+    15, // llvm.experimental.constrained.sqrt
+    7, // llvm.experimental.deoptimize
+    16, // llvm.experimental.gc.relocate
+    16, // llvm.experimental.gc.result
+    7, // llvm.experimental.gc.statepoint
+    7, // llvm.experimental.guard
+    7, // llvm.experimental.patchpoint.i64
+    7, // llvm.experimental.patchpoint.void
+    7, // llvm.experimental.stackmap
+    1, // llvm.experimental.vector.reduce.add
+    1, // llvm.experimental.vector.reduce.and
+    1, // llvm.experimental.vector.reduce.fadd
+    1, // llvm.experimental.vector.reduce.fmax
+    1, // llvm.experimental.vector.reduce.fmin
+    1, // llvm.experimental.vector.reduce.fmul
+    1, // llvm.experimental.vector.reduce.mul
+    1, // llvm.experimental.vector.reduce.or
+    1, // llvm.experimental.vector.reduce.smax
+    1, // llvm.experimental.vector.reduce.smin
+    1, // llvm.experimental.vector.reduce.umax
+    1, // llvm.experimental.vector.reduce.umin
+    1, // llvm.experimental.vector.reduce.xor
+    4, // llvm.fabs
+    4, // llvm.floor
+    3, // llvm.flt.rounds
+    4, // llvm.fma
+    4, // llvm.fmuladd
+    1, // llvm.frameaddress
+    4, // llvm.fshl
+    4, // llvm.fshr
+    2, // llvm.gcread
+    3, // llvm.gcroot
+    17, // llvm.gcwrite
+    3, // llvm.get.dynamic.area.offset
+    3, // llvm.icall.branch.funnel
+    18, // llvm.init.trampoline
+    3, // llvm.instrprof.increment
+    3, // llvm.instrprof.increment.step
+    3, // llvm.instrprof.value.profile
+    19, // llvm.invariant.end
+    20, // llvm.invariant.start
+    21, // llvm.launder.invariant.group
+    20, // llvm.lifetime.end
+    20, // llvm.lifetime.start
+    2, // llvm.load.relative
+    1, // llvm.localaddress
+    3, // llvm.localescape
+    1, // llvm.localrecover
+    4, // llvm.log
+    4, // llvm.log10
+    4, // llvm.log2
+    14, // llvm.longjmp
+    22, // llvm.masked.compressstore
+    16, // llvm.masked.expandload
+    16, // llvm.masked.gather
+    2, // llvm.masked.load
+    3, // llvm.masked.scatter
+    22, // llvm.masked.store
+    4, // llvm.maxnum
+    23, // llvm.memcpy
+    23, // llvm.memcpy.element.unordered.atomic
+    24, // llvm.memmove
+    23, // llvm.memmove.element.unordered.atomic
+    25, // llvm.memset
+    25, // llvm.memset.element.unordered.atomic
+    4, // llvm.minnum
+    4, // llvm.nearbyint
+    4, // llvm.objectsize
+    3, // llvm.pcmarker
+    4, // llvm.pow
+    4, // llvm.powi
+    26, // llvm.prefetch
+    3, // llvm.ptr.annotation
+    16, // llvm.read_register
+    3, // llvm.readcyclecounter
+    1, // llvm.returnaddress
+    4, // llvm.rint
+    4, // llvm.round
+    4, // llvm.sadd.with.overflow
+    3, // llvm.setjmp
+    15, // llvm.sideeffect
+    14, // llvm.siglongjmp
+    3, // llvm.sigsetjmp
+    4, // llvm.sin
+    4, // llvm.smul.with.overflow
+    4, // llvm.sqrt
+    27, // llvm.ssa.copy
+    4, // llvm.ssub.with.overflow
+    3, // llvm.stackguard
+    3, // llvm.stackprotector
+    3, // llvm.stackrestore
+    3, // llvm.stacksave
+    4, // llvm.strip.invariant.group
+    1, // llvm.thread.pointer
+    14, // llvm.trap
+    4, // llvm.trunc
+    1, // llvm.type.checked.load
+    1, // llvm.type.test
+    4, // llvm.uadd.with.overflow
+    4, // llvm.umul.with.overflow
+    4, // llvm.usub.with.overflow
+    3, // llvm.va_copy
+    3, // llvm.va_end
+    3, // llvm.va_start
+    3, // llvm.var.annotation
+    3, // llvm.write_register
+    28, // llvm.xray.customevent
+    29, // llvm.xray.typedevent
+    3, // llvm.aarch64.clrex
+    1, // llvm.aarch64.crc32b
+    1, // llvm.aarch64.crc32cb
+    1, // llvm.aarch64.crc32ch
+    1, // llvm.aarch64.crc32cw
+    1, // llvm.aarch64.crc32cx
+    1, // llvm.aarch64.crc32h
+    1, // llvm.aarch64.crc32w
+    1, // llvm.aarch64.crc32x
+    1, // llvm.aarch64.crypto.aesd
+    1, // llvm.aarch64.crypto.aese
+    1, // llvm.aarch64.crypto.aesimc
+    1, // llvm.aarch64.crypto.aesmc
+    1, // llvm.aarch64.crypto.sha1c
+    1, // llvm.aarch64.crypto.sha1h
+    1, // llvm.aarch64.crypto.sha1m
+    1, // llvm.aarch64.crypto.sha1p
+    1, // llvm.aarch64.crypto.sha1su0
+    1, // llvm.aarch64.crypto.sha1su1
+    1, // llvm.aarch64.crypto.sha256h
+    1, // llvm.aarch64.crypto.sha256h2
+    1, // llvm.aarch64.crypto.sha256su0
+    1, // llvm.aarch64.crypto.sha256su1
+    3, // llvm.aarch64.dmb
+    3, // llvm.aarch64.dsb
+    1, // llvm.aarch64.get.fpcr
+    3, // llvm.aarch64.hint
+    3, // llvm.aarch64.isb
+    3, // llvm.aarch64.ldaxp
+    3, // llvm.aarch64.ldaxr
+    3, // llvm.aarch64.ldxp
+    3, // llvm.aarch64.ldxr
+    1, // llvm.aarch64.neon.abs
+    1, // llvm.aarch64.neon.addhn
+    1, // llvm.aarch64.neon.addp
+    1, // llvm.aarch64.neon.cls
+    1, // llvm.aarch64.neon.fabd
+    1, // llvm.aarch64.neon.facge
+    1, // llvm.aarch64.neon.facgt
+    1, // llvm.aarch64.neon.faddv
+    1, // llvm.aarch64.neon.fcvtas
+    1, // llvm.aarch64.neon.fcvtau
+    1, // llvm.aarch64.neon.fcvtms
+    1, // llvm.aarch64.neon.fcvtmu
+    1, // llvm.aarch64.neon.fcvtns
+    1, // llvm.aarch64.neon.fcvtnu
+    1, // llvm.aarch64.neon.fcvtps
+    1, // llvm.aarch64.neon.fcvtpu
+    1, // llvm.aarch64.neon.fcvtxn
+    1, // llvm.aarch64.neon.fcvtzs
+    1, // llvm.aarch64.neon.fcvtzu
+    1, // llvm.aarch64.neon.fmax
+    1, // llvm.aarch64.neon.fmaxnm
+    1, // llvm.aarch64.neon.fmaxnmp
+    1, // llvm.aarch64.neon.fmaxnmv
+    1, // llvm.aarch64.neon.fmaxp
+    1, // llvm.aarch64.neon.fmaxv
+    1, // llvm.aarch64.neon.fmin
+    1, // llvm.aarch64.neon.fminnm
+    1, // llvm.aarch64.neon.fminnmp
+    1, // llvm.aarch64.neon.fminnmv
+    1, // llvm.aarch64.neon.fminp
+    1, // llvm.aarch64.neon.fminv
+    1, // llvm.aarch64.neon.fmulx
+    1, // llvm.aarch64.neon.frecpe
+    1, // llvm.aarch64.neon.frecps
+    1, // llvm.aarch64.neon.frecpx
+    1, // llvm.aarch64.neon.frintn
+    1, // llvm.aarch64.neon.frsqrte
+    1, // llvm.aarch64.neon.frsqrts
+    2, // llvm.aarch64.neon.ld1x2
+    2, // llvm.aarch64.neon.ld1x3
+    2, // llvm.aarch64.neon.ld1x4
+    2, // llvm.aarch64.neon.ld2
+    2, // llvm.aarch64.neon.ld2lane
+    2, // llvm.aarch64.neon.ld2r
+    2, // llvm.aarch64.neon.ld3
+    2, // llvm.aarch64.neon.ld3lane
+    2, // llvm.aarch64.neon.ld3r
+    2, // llvm.aarch64.neon.ld4
+    2, // llvm.aarch64.neon.ld4lane
+    2, // llvm.aarch64.neon.ld4r
+    1, // llvm.aarch64.neon.pmul
+    1, // llvm.aarch64.neon.pmull
+    1, // llvm.aarch64.neon.pmull64
+    1, // llvm.aarch64.neon.raddhn
+    1, // llvm.aarch64.neon.rbit
+    1, // llvm.aarch64.neon.rshrn
+    1, // llvm.aarch64.neon.rsubhn
+    1, // llvm.aarch64.neon.sabd
+    1, // llvm.aarch64.neon.saddlp
+    1, // llvm.aarch64.neon.saddlv
+    1, // llvm.aarch64.neon.saddv
+    1, // llvm.aarch64.neon.scalar.sqxtn
+    1, // llvm.aarch64.neon.scalar.sqxtun
+    1, // llvm.aarch64.neon.scalar.uqxtn
+    1, // llvm.aarch64.neon.sdot
+    1, // llvm.aarch64.neon.shadd
+    1, // llvm.aarch64.neon.shll
+    1, // llvm.aarch64.neon.shsub
+    1, // llvm.aarch64.neon.smax
+    1, // llvm.aarch64.neon.smaxp
+    1, // llvm.aarch64.neon.smaxv
+    1, // llvm.aarch64.neon.smin
+    1, // llvm.aarch64.neon.sminp
+    1, // llvm.aarch64.neon.sminv
+    1, // llvm.aarch64.neon.smull
+    1, // llvm.aarch64.neon.sqabs
+    1, // llvm.aarch64.neon.sqadd
+    1, // llvm.aarch64.neon.sqdmulh
+    1, // llvm.aarch64.neon.sqdmull
+    1, // llvm.aarch64.neon.sqdmulls.scalar
+    1, // llvm.aarch64.neon.sqneg
+    1, // llvm.aarch64.neon.sqrdmulh
+    1, // llvm.aarch64.neon.sqrshl
+    1, // llvm.aarch64.neon.sqrshrn
+    1, // llvm.aarch64.neon.sqrshrun
+    1, // llvm.aarch64.neon.sqshl
+    1, // llvm.aarch64.neon.sqshlu
+    1, // llvm.aarch64.neon.sqshrn
+    1, // llvm.aarch64.neon.sqshrun
+    1, // llvm.aarch64.neon.sqsub
+    1, // llvm.aarch64.neon.sqxtn
+    1, // llvm.aarch64.neon.sqxtun
+    1, // llvm.aarch64.neon.srhadd
+    1, // llvm.aarch64.neon.srshl
+    1, // llvm.aarch64.neon.sshl
+    1, // llvm.aarch64.neon.sshll
+    19, // llvm.aarch64.neon.st1x2
+    30, // llvm.aarch64.neon.st1x3
+    31, // llvm.aarch64.neon.st1x4
+    19, // llvm.aarch64.neon.st2
+    30, // llvm.aarch64.neon.st2lane
+    30, // llvm.aarch64.neon.st3
+    31, // llvm.aarch64.neon.st3lane
+    31, // llvm.aarch64.neon.st4
+    32, // llvm.aarch64.neon.st4lane
+    1, // llvm.aarch64.neon.subhn
+    1, // llvm.aarch64.neon.suqadd
+    1, // llvm.aarch64.neon.tbl1
+    1, // llvm.aarch64.neon.tbl2
+    1, // llvm.aarch64.neon.tbl3
+    1, // llvm.aarch64.neon.tbl4
+    1, // llvm.aarch64.neon.tbx1
+    1, // llvm.aarch64.neon.tbx2
+    1, // llvm.aarch64.neon.tbx3
+    1, // llvm.aarch64.neon.tbx4
+    1, // llvm.aarch64.neon.uabd
+    1, // llvm.aarch64.neon.uaddlp
+    1, // llvm.aarch64.neon.uaddlv
+    1, // llvm.aarch64.neon.uaddv
+    1, // llvm.aarch64.neon.udot
+    1, // llvm.aarch64.neon.uhadd
+    1, // llvm.aarch64.neon.uhsub
+    1, // llvm.aarch64.neon.umax
+    1, // llvm.aarch64.neon.umaxp
+    1, // llvm.aarch64.neon.umaxv
+    1, // llvm.aarch64.neon.umin
+    1, // llvm.aarch64.neon.uminp
+    1, // llvm.aarch64.neon.uminv
+    1, // llvm.aarch64.neon.umull
+    1, // llvm.aarch64.neon.uqadd
+    1, // llvm.aarch64.neon.uqrshl
+    1, // llvm.aarch64.neon.uqrshrn
+    1, // llvm.aarch64.neon.uqshl
+    1, // llvm.aarch64.neon.uqshrn
+    1, // llvm.aarch64.neon.uqsub
+    1, // llvm.aarch64.neon.uqxtn
+    1, // llvm.aarch64.neon.urecpe
+    1, // llvm.aarch64.neon.urhadd
+    1, // llvm.aarch64.neon.urshl
+    1, // llvm.aarch64.neon.ursqrte
+    1, // llvm.aarch64.neon.ushl
+    1, // llvm.aarch64.neon.ushll
+    1, // llvm.aarch64.neon.usqadd
+    1, // llvm.aarch64.neon.vcopy.lane
+    1, // llvm.aarch64.neon.vcvtfp2fxs
+    1, // llvm.aarch64.neon.vcvtfp2fxu
+    1, // llvm.aarch64.neon.vcvtfp2hf
+    1, // llvm.aarch64.neon.vcvtfxs2fp
+    1, // llvm.aarch64.neon.vcvtfxu2fp
+    1, // llvm.aarch64.neon.vcvthf2fp
+    1, // llvm.aarch64.neon.vsli
+    1, // llvm.aarch64.neon.vsri
+    1, // llvm.aarch64.sdiv
+    1, // llvm.aarch64.sisd.fabd
+    1, // llvm.aarch64.sisd.fcvtxn
+    3, // llvm.aarch64.stlxp
+    3, // llvm.aarch64.stlxr
+    3, // llvm.aarch64.stxp
+    3, // llvm.aarch64.stxr
+    1, // llvm.aarch64.udiv
+    4, // llvm.amdgcn.alignbit
+    4, // llvm.amdgcn.alignbyte
+    18, // llvm.amdgcn.atomic.dec
+    18, // llvm.amdgcn.atomic.inc
+    33, // llvm.amdgcn.break
+    3, // llvm.amdgcn.buffer.atomic.add
+    3, // llvm.amdgcn.buffer.atomic.and
+    3, // llvm.amdgcn.buffer.atomic.cmpswap
+    3, // llvm.amdgcn.buffer.atomic.or
+    3, // llvm.amdgcn.buffer.atomic.smax
+    3, // llvm.amdgcn.buffer.atomic.smin
+    3, // llvm.amdgcn.buffer.atomic.sub
+    3, // llvm.amdgcn.buffer.atomic.swap
+    3, // llvm.amdgcn.buffer.atomic.umax
+    3, // llvm.amdgcn.buffer.atomic.umin
+    3, // llvm.amdgcn.buffer.atomic.xor
+    16, // llvm.amdgcn.buffer.load
+    16, // llvm.amdgcn.buffer.load.format
+    34, // llvm.amdgcn.buffer.store
+    34, // llvm.amdgcn.buffer.store.format
+    3, // llvm.amdgcn.buffer.wbinvl1
+    3, // llvm.amdgcn.buffer.wbinvl1.sc
+    3, // llvm.amdgcn.buffer.wbinvl1.vol
+    4, // llvm.amdgcn.class
+    4, // llvm.amdgcn.cos
+    4, // llvm.amdgcn.cubeid
+    4, // llvm.amdgcn.cubema
+    4, // llvm.amdgcn.cubesc
+    4, // llvm.amdgcn.cubetc
+    4, // llvm.amdgcn.cvt.pk.i16
+    4, // llvm.amdgcn.cvt.pk.u16
+    4, // llvm.amdgcn.cvt.pk.u8.f32
+    4, // llvm.amdgcn.cvt.pknorm.i16
+    4, // llvm.amdgcn.cvt.pknorm.u16
+    4, // llvm.amdgcn.cvt.pkrtz
+    4, // llvm.amdgcn.dispatch.id
+    4, // llvm.amdgcn.dispatch.ptr
+    4, // llvm.amdgcn.div.fixup
+    4, // llvm.amdgcn.div.fmas
+    4, // llvm.amdgcn.div.scale
+    33, // llvm.amdgcn.ds.bpermute
+    18, // llvm.amdgcn.ds.fadd
+    18, // llvm.amdgcn.ds.fmax
+    18, // llvm.amdgcn.ds.fmin
+    33, // llvm.amdgcn.ds.permute
+    33, // llvm.amdgcn.ds.swizzle
+    35, // llvm.amdgcn.else
+    33, // llvm.amdgcn.else.break
+    35, // llvm.amdgcn.end.cf
+    3, // llvm.amdgcn.exp
+    3, // llvm.amdgcn.exp.compr
+    33, // llvm.amdgcn.fcmp
+    4, // llvm.amdgcn.fdiv.fast
+    4, // llvm.amdgcn.fdot2
+    4, // llvm.amdgcn.fmad.ftz
+    4, // llvm.amdgcn.fmed3
+    4, // llvm.amdgcn.fmul.legacy
+    4, // llvm.amdgcn.fract
+    4, // llvm.amdgcn.frexp.exp
+    4, // llvm.amdgcn.frexp.mant
+    4, // llvm.amdgcn.groupstaticsize
+    33, // llvm.amdgcn.icmp
+    35, // llvm.amdgcn.if
+    33, // llvm.amdgcn.if.break
+    3, // llvm.amdgcn.image.atomic.add.1d
+    3, // llvm.amdgcn.image.atomic.add.1darray
+    3, // llvm.amdgcn.image.atomic.add.2d
+    3, // llvm.amdgcn.image.atomic.add.2darray
+    3, // llvm.amdgcn.image.atomic.add.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.add.2dmsaa
+    3, // llvm.amdgcn.image.atomic.add.3d
+    3, // llvm.amdgcn.image.atomic.add.cube
+    3, // llvm.amdgcn.image.atomic.and.1d
+    3, // llvm.amdgcn.image.atomic.and.1darray
+    3, // llvm.amdgcn.image.atomic.and.2d
+    3, // llvm.amdgcn.image.atomic.and.2darray
+    3, // llvm.amdgcn.image.atomic.and.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.and.2dmsaa
+    3, // llvm.amdgcn.image.atomic.and.3d
+    3, // llvm.amdgcn.image.atomic.and.cube
+    3, // llvm.amdgcn.image.atomic.cmpswap.1d
+    3, // llvm.amdgcn.image.atomic.cmpswap.1darray
+    3, // llvm.amdgcn.image.atomic.cmpswap.2d
+    3, // llvm.amdgcn.image.atomic.cmpswap.2darray
+    3, // llvm.amdgcn.image.atomic.cmpswap.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.cmpswap.2dmsaa
+    3, // llvm.amdgcn.image.atomic.cmpswap.3d
+    3, // llvm.amdgcn.image.atomic.cmpswap.cube
+    3, // llvm.amdgcn.image.atomic.dec.1d
+    3, // llvm.amdgcn.image.atomic.dec.1darray
+    3, // llvm.amdgcn.image.atomic.dec.2d
+    3, // llvm.amdgcn.image.atomic.dec.2darray
+    3, // llvm.amdgcn.image.atomic.dec.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.dec.2dmsaa
+    3, // llvm.amdgcn.image.atomic.dec.3d
+    3, // llvm.amdgcn.image.atomic.dec.cube
+    3, // llvm.amdgcn.image.atomic.inc.1d
+    3, // llvm.amdgcn.image.atomic.inc.1darray
+    3, // llvm.amdgcn.image.atomic.inc.2d
+    3, // llvm.amdgcn.image.atomic.inc.2darray
+    3, // llvm.amdgcn.image.atomic.inc.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.inc.2dmsaa
+    3, // llvm.amdgcn.image.atomic.inc.3d
+    3, // llvm.amdgcn.image.atomic.inc.cube
+    3, // llvm.amdgcn.image.atomic.or.1d
+    3, // llvm.amdgcn.image.atomic.or.1darray
+    3, // llvm.amdgcn.image.atomic.or.2d
+    3, // llvm.amdgcn.image.atomic.or.2darray
+    3, // llvm.amdgcn.image.atomic.or.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.or.2dmsaa
+    3, // llvm.amdgcn.image.atomic.or.3d
+    3, // llvm.amdgcn.image.atomic.or.cube
+    3, // llvm.amdgcn.image.atomic.smax.1d
+    3, // llvm.amdgcn.image.atomic.smax.1darray
+    3, // llvm.amdgcn.image.atomic.smax.2d
+    3, // llvm.amdgcn.image.atomic.smax.2darray
+    3, // llvm.amdgcn.image.atomic.smax.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.smax.2dmsaa
+    3, // llvm.amdgcn.image.atomic.smax.3d
+    3, // llvm.amdgcn.image.atomic.smax.cube
+    3, // llvm.amdgcn.image.atomic.smin.1d
+    3, // llvm.amdgcn.image.atomic.smin.1darray
+    3, // llvm.amdgcn.image.atomic.smin.2d
+    3, // llvm.amdgcn.image.atomic.smin.2darray
+    3, // llvm.amdgcn.image.atomic.smin.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.smin.2dmsaa
+    3, // llvm.amdgcn.image.atomic.smin.3d
+    3, // llvm.amdgcn.image.atomic.smin.cube
+    3, // llvm.amdgcn.image.atomic.sub.1d
+    3, // llvm.amdgcn.image.atomic.sub.1darray
+    3, // llvm.amdgcn.image.atomic.sub.2d
+    3, // llvm.amdgcn.image.atomic.sub.2darray
+    3, // llvm.amdgcn.image.atomic.sub.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.sub.2dmsaa
+    3, // llvm.amdgcn.image.atomic.sub.3d
+    3, // llvm.amdgcn.image.atomic.sub.cube
+    3, // llvm.amdgcn.image.atomic.swap.1d
+    3, // llvm.amdgcn.image.atomic.swap.1darray
+    3, // llvm.amdgcn.image.atomic.swap.2d
+    3, // llvm.amdgcn.image.atomic.swap.2darray
+    3, // llvm.amdgcn.image.atomic.swap.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.swap.2dmsaa
+    3, // llvm.amdgcn.image.atomic.swap.3d
+    3, // llvm.amdgcn.image.atomic.swap.cube
+    3, // llvm.amdgcn.image.atomic.umax.1d
+    3, // llvm.amdgcn.image.atomic.umax.1darray
+    3, // llvm.amdgcn.image.atomic.umax.2d
+    3, // llvm.amdgcn.image.atomic.umax.2darray
+    3, // llvm.amdgcn.image.atomic.umax.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.umax.2dmsaa
+    3, // llvm.amdgcn.image.atomic.umax.3d
+    3, // llvm.amdgcn.image.atomic.umax.cube
+    3, // llvm.amdgcn.image.atomic.umin.1d
+    3, // llvm.amdgcn.image.atomic.umin.1darray
+    3, // llvm.amdgcn.image.atomic.umin.2d
+    3, // llvm.amdgcn.image.atomic.umin.2darray
+    3, // llvm.amdgcn.image.atomic.umin.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.umin.2dmsaa
+    3, // llvm.amdgcn.image.atomic.umin.3d
+    3, // llvm.amdgcn.image.atomic.umin.cube
+    3, // llvm.amdgcn.image.atomic.xor.1d
+    3, // llvm.amdgcn.image.atomic.xor.1darray
+    3, // llvm.amdgcn.image.atomic.xor.2d
+    3, // llvm.amdgcn.image.atomic.xor.2darray
+    3, // llvm.amdgcn.image.atomic.xor.2darraymsaa
+    3, // llvm.amdgcn.image.atomic.xor.2dmsaa
+    3, // llvm.amdgcn.image.atomic.xor.3d
+    3, // llvm.amdgcn.image.atomic.xor.cube
+    16, // llvm.amdgcn.image.gather4.2d
+    16, // llvm.amdgcn.image.gather4.2darray
+    16, // llvm.amdgcn.image.gather4.b.2d
+    16, // llvm.amdgcn.image.gather4.b.2darray
+    16, // llvm.amdgcn.image.gather4.b.cl.2d
+    16, // llvm.amdgcn.image.gather4.b.cl.2darray
+    16, // llvm.amdgcn.image.gather4.b.cl.cube
+    16, // llvm.amdgcn.image.gather4.b.cl.o.2d
+    16, // llvm.amdgcn.image.gather4.b.cl.o.2darray
+    16, // llvm.amdgcn.image.gather4.b.cl.o.cube
+    16, // llvm.amdgcn.image.gather4.b.cube
+    16, // llvm.amdgcn.image.gather4.b.o.2d
+    16, // llvm.amdgcn.image.gather4.b.o.2darray
+    16, // llvm.amdgcn.image.gather4.b.o.cube
+    16, // llvm.amdgcn.image.gather4.c.2d
+    16, // llvm.amdgcn.image.gather4.c.2darray
+    16, // llvm.amdgcn.image.gather4.c.b.2d
+    16, // llvm.amdgcn.image.gather4.c.b.2darray
+    16, // llvm.amdgcn.image.gather4.c.b.cl.2d
+    16, // llvm.amdgcn.image.gather4.c.b.cl.2darray
+    16, // llvm.amdgcn.image.gather4.c.b.cl.cube
+    16, // llvm.amdgcn.image.gather4.c.b.cl.o.2d
+    16, // llvm.amdgcn.image.gather4.c.b.cl.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.b.cl.o.cube
+    16, // llvm.amdgcn.image.gather4.c.b.cube
+    16, // llvm.amdgcn.image.gather4.c.b.o.2d
+    16, // llvm.amdgcn.image.gather4.c.b.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.b.o.cube
+    16, // llvm.amdgcn.image.gather4.c.cl.2d
+    16, // llvm.amdgcn.image.gather4.c.cl.2darray
+    16, // llvm.amdgcn.image.gather4.c.cl.cube
+    16, // llvm.amdgcn.image.gather4.c.cl.o.2d
+    16, // llvm.amdgcn.image.gather4.c.cl.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.cl.o.cube
+    16, // llvm.amdgcn.image.gather4.c.cube
+    16, // llvm.amdgcn.image.gather4.c.l.2d
+    16, // llvm.amdgcn.image.gather4.c.l.2darray
+    16, // llvm.amdgcn.image.gather4.c.l.cube
+    16, // llvm.amdgcn.image.gather4.c.l.o.2d
+    16, // llvm.amdgcn.image.gather4.c.l.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.l.o.cube
+    16, // llvm.amdgcn.image.gather4.c.lz.2d
+    16, // llvm.amdgcn.image.gather4.c.lz.2darray
+    16, // llvm.amdgcn.image.gather4.c.lz.cube
+    16, // llvm.amdgcn.image.gather4.c.lz.o.2d
+    16, // llvm.amdgcn.image.gather4.c.lz.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.lz.o.cube
+    16, // llvm.amdgcn.image.gather4.c.o.2d
+    16, // llvm.amdgcn.image.gather4.c.o.2darray
+    16, // llvm.amdgcn.image.gather4.c.o.cube
+    16, // llvm.amdgcn.image.gather4.cl.2d
+    16, // llvm.amdgcn.image.gather4.cl.2darray
+    16, // llvm.amdgcn.image.gather4.cl.cube
+    16, // llvm.amdgcn.image.gather4.cl.o.2d
+    16, // llvm.amdgcn.image.gather4.cl.o.2darray
+    16, // llvm.amdgcn.image.gather4.cl.o.cube
+    16, // llvm.amdgcn.image.gather4.cube
+    16, // llvm.amdgcn.image.gather4.l.2d
+    16, // llvm.amdgcn.image.gather4.l.2darray
+    16, // llvm.amdgcn.image.gather4.l.cube
+    16, // llvm.amdgcn.image.gather4.l.o.2d
+    16, // llvm.amdgcn.image.gather4.l.o.2darray
+    16, // llvm.amdgcn.image.gather4.l.o.cube
+    16, // llvm.amdgcn.image.gather4.lz.2d
+    16, // llvm.amdgcn.image.gather4.lz.2darray
+    16, // llvm.amdgcn.image.gather4.lz.cube
+    16, // llvm.amdgcn.image.gather4.lz.o.2d
+    16, // llvm.amdgcn.image.gather4.lz.o.2darray
+    16, // llvm.amdgcn.image.gather4.lz.o.cube
+    16, // llvm.amdgcn.image.gather4.o.2d
+    16, // llvm.amdgcn.image.gather4.o.2darray
+    16, // llvm.amdgcn.image.gather4.o.cube
+    1, // llvm.amdgcn.image.getlod.1d
+    1, // llvm.amdgcn.image.getlod.1darray
+    1, // llvm.amdgcn.image.getlod.2d
+    1, // llvm.amdgcn.image.getlod.2darray
+    1, // llvm.amdgcn.image.getlod.3d
+    1, // llvm.amdgcn.image.getlod.cube
+    1, // llvm.amdgcn.image.getresinfo.1d
+    1, // llvm.amdgcn.image.getresinfo.1darray
+    1, // llvm.amdgcn.image.getresinfo.2d
+    1, // llvm.amdgcn.image.getresinfo.2darray
+    1, // llvm.amdgcn.image.getresinfo.2darraymsaa
+    1, // llvm.amdgcn.image.getresinfo.2dmsaa
+    1, // llvm.amdgcn.image.getresinfo.3d
+    1, // llvm.amdgcn.image.getresinfo.cube
+    16, // llvm.amdgcn.image.load.1d
+    16, // llvm.amdgcn.image.load.1darray
+    16, // llvm.amdgcn.image.load.2d
+    16, // llvm.amdgcn.image.load.2darray
+    16, // llvm.amdgcn.image.load.2darraymsaa
+    16, // llvm.amdgcn.image.load.2dmsaa
+    16, // llvm.amdgcn.image.load.3d
+    16, // llvm.amdgcn.image.load.cube
+    16, // llvm.amdgcn.image.load.mip.1d
+    16, // llvm.amdgcn.image.load.mip.1darray
+    16, // llvm.amdgcn.image.load.mip.2d
+    16, // llvm.amdgcn.image.load.mip.2darray
+    16, // llvm.amdgcn.image.load.mip.3d
+    16, // llvm.amdgcn.image.load.mip.cube
+    16, // llvm.amdgcn.image.sample.1d
+    16, // llvm.amdgcn.image.sample.1darray
+    16, // llvm.amdgcn.image.sample.2d
+    16, // llvm.amdgcn.image.sample.2darray
+    16, // llvm.amdgcn.image.sample.3d
+    16, // llvm.amdgcn.image.sample.b.1d
+    16, // llvm.amdgcn.image.sample.b.1darray
+    16, // llvm.amdgcn.image.sample.b.2d
+    16, // llvm.amdgcn.image.sample.b.2darray
+    16, // llvm.amdgcn.image.sample.b.3d
+    16, // llvm.amdgcn.image.sample.b.cl.1d
+    16, // llvm.amdgcn.image.sample.b.cl.1darray
+    16, // llvm.amdgcn.image.sample.b.cl.2d
+    16, // llvm.amdgcn.image.sample.b.cl.2darray
+    16, // llvm.amdgcn.image.sample.b.cl.3d
+    16, // llvm.amdgcn.image.sample.b.cl.cube
+    16, // llvm.amdgcn.image.sample.b.cl.o.1d
+    16, // llvm.amdgcn.image.sample.b.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.b.cl.o.2d
+    16, // llvm.amdgcn.image.sample.b.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.b.cl.o.3d
+    16, // llvm.amdgcn.image.sample.b.cl.o.cube
+    16, // llvm.amdgcn.image.sample.b.cube
+    16, // llvm.amdgcn.image.sample.b.o.1d
+    16, // llvm.amdgcn.image.sample.b.o.1darray
+    16, // llvm.amdgcn.image.sample.b.o.2d
+    16, // llvm.amdgcn.image.sample.b.o.2darray
+    16, // llvm.amdgcn.image.sample.b.o.3d
+    16, // llvm.amdgcn.image.sample.b.o.cube
+    16, // llvm.amdgcn.image.sample.c.1d
+    16, // llvm.amdgcn.image.sample.c.1darray
+    16, // llvm.amdgcn.image.sample.c.2d
+    16, // llvm.amdgcn.image.sample.c.2darray
+    16, // llvm.amdgcn.image.sample.c.3d
+    16, // llvm.amdgcn.image.sample.c.b.1d
+    16, // llvm.amdgcn.image.sample.c.b.1darray
+    16, // llvm.amdgcn.image.sample.c.b.2d
+    16, // llvm.amdgcn.image.sample.c.b.2darray
+    16, // llvm.amdgcn.image.sample.c.b.3d
+    16, // llvm.amdgcn.image.sample.c.b.cl.1d
+    16, // llvm.amdgcn.image.sample.c.b.cl.1darray
+    16, // llvm.amdgcn.image.sample.c.b.cl.2d
+    16, // llvm.amdgcn.image.sample.c.b.cl.2darray
+    16, // llvm.amdgcn.image.sample.c.b.cl.3d
+    16, // llvm.amdgcn.image.sample.c.b.cl.cube
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.1d
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.2d
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.3d
+    16, // llvm.amdgcn.image.sample.c.b.cl.o.cube
+    16, // llvm.amdgcn.image.sample.c.b.cube
+    16, // llvm.amdgcn.image.sample.c.b.o.1d
+    16, // llvm.amdgcn.image.sample.c.b.o.1darray
+    16, // llvm.amdgcn.image.sample.c.b.o.2d
+    16, // llvm.amdgcn.image.sample.c.b.o.2darray
+    16, // llvm.amdgcn.image.sample.c.b.o.3d
+    16, // llvm.amdgcn.image.sample.c.b.o.cube
+    16, // llvm.amdgcn.image.sample.c.cd.1d
+    16, // llvm.amdgcn.image.sample.c.cd.1darray
+    16, // llvm.amdgcn.image.sample.c.cd.2d
+    16, // llvm.amdgcn.image.sample.c.cd.2darray
+    16, // llvm.amdgcn.image.sample.c.cd.3d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.1d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.1darray
+    16, // llvm.amdgcn.image.sample.c.cd.cl.2d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.2darray
+    16, // llvm.amdgcn.image.sample.c.cd.cl.3d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.cube
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.1d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.2d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.3d
+    16, // llvm.amdgcn.image.sample.c.cd.cl.o.cube
+    16, // llvm.amdgcn.image.sample.c.cd.cube
+    16, // llvm.amdgcn.image.sample.c.cd.o.1d
+    16, // llvm.amdgcn.image.sample.c.cd.o.1darray
+    16, // llvm.amdgcn.image.sample.c.cd.o.2d
+    16, // llvm.amdgcn.image.sample.c.cd.o.2darray
+    16, // llvm.amdgcn.image.sample.c.cd.o.3d
+    16, // llvm.amdgcn.image.sample.c.cd.o.cube
+    16, // llvm.amdgcn.image.sample.c.cl.1d
+    16, // llvm.amdgcn.image.sample.c.cl.1darray
+    16, // llvm.amdgcn.image.sample.c.cl.2d
+    16, // llvm.amdgcn.image.sample.c.cl.2darray
+    16, // llvm.amdgcn.image.sample.c.cl.3d
+    16, // llvm.amdgcn.image.sample.c.cl.cube
+    16, // llvm.amdgcn.image.sample.c.cl.o.1d
+    16, // llvm.amdgcn.image.sample.c.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.c.cl.o.2d
+    16, // llvm.amdgcn.image.sample.c.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.c.cl.o.3d
+    16, // llvm.amdgcn.image.sample.c.cl.o.cube
+    16, // llvm.amdgcn.image.sample.c.cube
+    16, // llvm.amdgcn.image.sample.c.d.1d
+    16, // llvm.amdgcn.image.sample.c.d.1darray
+    16, // llvm.amdgcn.image.sample.c.d.2d
+    16, // llvm.amdgcn.image.sample.c.d.2darray
+    16, // llvm.amdgcn.image.sample.c.d.3d
+    16, // llvm.amdgcn.image.sample.c.d.cl.1d
+    16, // llvm.amdgcn.image.sample.c.d.cl.1darray
+    16, // llvm.amdgcn.image.sample.c.d.cl.2d
+    16, // llvm.amdgcn.image.sample.c.d.cl.2darray
+    16, // llvm.amdgcn.image.sample.c.d.cl.3d
+    16, // llvm.amdgcn.image.sample.c.d.cl.cube
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.1d
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.2d
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.3d
+    16, // llvm.amdgcn.image.sample.c.d.cl.o.cube
+    16, // llvm.amdgcn.image.sample.c.d.cube
+    16, // llvm.amdgcn.image.sample.c.d.o.1d
+    16, // llvm.amdgcn.image.sample.c.d.o.1darray
+    16, // llvm.amdgcn.image.sample.c.d.o.2d
+    16, // llvm.amdgcn.image.sample.c.d.o.2darray
+    16, // llvm.amdgcn.image.sample.c.d.o.3d
+    16, // llvm.amdgcn.image.sample.c.d.o.cube
+    16, // llvm.amdgcn.image.sample.c.l.1d
+    16, // llvm.amdgcn.image.sample.c.l.1darray
+    16, // llvm.amdgcn.image.sample.c.l.2d
+    16, // llvm.amdgcn.image.sample.c.l.2darray
+    16, // llvm.amdgcn.image.sample.c.l.3d
+    16, // llvm.amdgcn.image.sample.c.l.cube
+    16, // llvm.amdgcn.image.sample.c.l.o.1d
+    16, // llvm.amdgcn.image.sample.c.l.o.1darray
+    16, // llvm.amdgcn.image.sample.c.l.o.2d
+    16, // llvm.amdgcn.image.sample.c.l.o.2darray
+    16, // llvm.amdgcn.image.sample.c.l.o.3d
+    16, // llvm.amdgcn.image.sample.c.l.o.cube
+    16, // llvm.amdgcn.image.sample.c.lz.1d
+    16, // llvm.amdgcn.image.sample.c.lz.1darray
+    16, // llvm.amdgcn.image.sample.c.lz.2d
+    16, // llvm.amdgcn.image.sample.c.lz.2darray
+    16, // llvm.amdgcn.image.sample.c.lz.3d
+    16, // llvm.amdgcn.image.sample.c.lz.cube
+    16, // llvm.amdgcn.image.sample.c.lz.o.1d
+    16, // llvm.amdgcn.image.sample.c.lz.o.1darray
+    16, // llvm.amdgcn.image.sample.c.lz.o.2d
+    16, // llvm.amdgcn.image.sample.c.lz.o.2darray
+    16, // llvm.amdgcn.image.sample.c.lz.o.3d
+    16, // llvm.amdgcn.image.sample.c.lz.o.cube
+    16, // llvm.amdgcn.image.sample.c.o.1d
+    16, // llvm.amdgcn.image.sample.c.o.1darray
+    16, // llvm.amdgcn.image.sample.c.o.2d
+    16, // llvm.amdgcn.image.sample.c.o.2darray
+    16, // llvm.amdgcn.image.sample.c.o.3d
+    16, // llvm.amdgcn.image.sample.c.o.cube
+    16, // llvm.amdgcn.image.sample.cd.1d
+    16, // llvm.amdgcn.image.sample.cd.1darray
+    16, // llvm.amdgcn.image.sample.cd.2d
+    16, // llvm.amdgcn.image.sample.cd.2darray
+    16, // llvm.amdgcn.image.sample.cd.3d
+    16, // llvm.amdgcn.image.sample.cd.cl.1d
+    16, // llvm.amdgcn.image.sample.cd.cl.1darray
+    16, // llvm.amdgcn.image.sample.cd.cl.2d
+    16, // llvm.amdgcn.image.sample.cd.cl.2darray
+    16, // llvm.amdgcn.image.sample.cd.cl.3d
+    16, // llvm.amdgcn.image.sample.cd.cl.cube
+    16, // llvm.amdgcn.image.sample.cd.cl.o.1d
+    16, // llvm.amdgcn.image.sample.cd.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.cd.cl.o.2d
+    16, // llvm.amdgcn.image.sample.cd.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.cd.cl.o.3d
+    16, // llvm.amdgcn.image.sample.cd.cl.o.cube
+    16, // llvm.amdgcn.image.sample.cd.cube
+    16, // llvm.amdgcn.image.sample.cd.o.1d
+    16, // llvm.amdgcn.image.sample.cd.o.1darray
+    16, // llvm.amdgcn.image.sample.cd.o.2d
+    16, // llvm.amdgcn.image.sample.cd.o.2darray
+    16, // llvm.amdgcn.image.sample.cd.o.3d
+    16, // llvm.amdgcn.image.sample.cd.o.cube
+    16, // llvm.amdgcn.image.sample.cl.1d
+    16, // llvm.amdgcn.image.sample.cl.1darray
+    16, // llvm.amdgcn.image.sample.cl.2d
+    16, // llvm.amdgcn.image.sample.cl.2darray
+    16, // llvm.amdgcn.image.sample.cl.3d
+    16, // llvm.amdgcn.image.sample.cl.cube
+    16, // llvm.amdgcn.image.sample.cl.o.1d
+    16, // llvm.amdgcn.image.sample.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.cl.o.2d
+    16, // llvm.amdgcn.image.sample.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.cl.o.3d
+    16, // llvm.amdgcn.image.sample.cl.o.cube
+    16, // llvm.amdgcn.image.sample.cube
+    16, // llvm.amdgcn.image.sample.d.1d
+    16, // llvm.amdgcn.image.sample.d.1darray
+    16, // llvm.amdgcn.image.sample.d.2d
+    16, // llvm.amdgcn.image.sample.d.2darray
+    16, // llvm.amdgcn.image.sample.d.3d
+    16, // llvm.amdgcn.image.sample.d.cl.1d
+    16, // llvm.amdgcn.image.sample.d.cl.1darray
+    16, // llvm.amdgcn.image.sample.d.cl.2d
+    16, // llvm.amdgcn.image.sample.d.cl.2darray
+    16, // llvm.amdgcn.image.sample.d.cl.3d
+    16, // llvm.amdgcn.image.sample.d.cl.cube
+    16, // llvm.amdgcn.image.sample.d.cl.o.1d
+    16, // llvm.amdgcn.image.sample.d.cl.o.1darray
+    16, // llvm.amdgcn.image.sample.d.cl.o.2d
+    16, // llvm.amdgcn.image.sample.d.cl.o.2darray
+    16, // llvm.amdgcn.image.sample.d.cl.o.3d
+    16, // llvm.amdgcn.image.sample.d.cl.o.cube
+    16, // llvm.amdgcn.image.sample.d.cube
+    16, // llvm.amdgcn.image.sample.d.o.1d
+    16, // llvm.amdgcn.image.sample.d.o.1darray
+    16, // llvm.amdgcn.image.sample.d.o.2d
+    16, // llvm.amdgcn.image.sample.d.o.2darray
+    16, // llvm.amdgcn.image.sample.d.o.3d
+    16, // llvm.amdgcn.image.sample.d.o.cube
+    16, // llvm.amdgcn.image.sample.l.1d
+    16, // llvm.amdgcn.image.sample.l.1darray
+    16, // llvm.amdgcn.image.sample.l.2d
+    16, // llvm.amdgcn.image.sample.l.2darray
+    16, // llvm.amdgcn.image.sample.l.3d
+    16, // llvm.amdgcn.image.sample.l.cube
+    16, // llvm.amdgcn.image.sample.l.o.1d
+    16, // llvm.amdgcn.image.sample.l.o.1darray
+    16, // llvm.amdgcn.image.sample.l.o.2d
+    16, // llvm.amdgcn.image.sample.l.o.2darray
+    16, // llvm.amdgcn.image.sample.l.o.3d
+    16, // llvm.amdgcn.image.sample.l.o.cube
+    16, // llvm.amdgcn.image.sample.lz.1d
+    16, // llvm.amdgcn.image.sample.lz.1darray
+    16, // llvm.amdgcn.image.sample.lz.2d
+    16, // llvm.amdgcn.image.sample.lz.2darray
+    16, // llvm.amdgcn.image.sample.lz.3d
+    16, // llvm.amdgcn.image.sample.lz.cube
+    16, // llvm.amdgcn.image.sample.lz.o.1d
+    16, // llvm.amdgcn.image.sample.lz.o.1darray
+    16, // llvm.amdgcn.image.sample.lz.o.2d
+    16, // llvm.amdgcn.image.sample.lz.o.2darray
+    16, // llvm.amdgcn.image.sample.lz.o.3d
+    16, // llvm.amdgcn.image.sample.lz.o.cube
+    16, // llvm.amdgcn.image.sample.o.1d
+    16, // llvm.amdgcn.image.sample.o.1darray
+    16, // llvm.amdgcn.image.sample.o.2d
+    16, // llvm.amdgcn.image.sample.o.2darray
+    16, // llvm.amdgcn.image.sample.o.3d
+    16, // llvm.amdgcn.image.sample.o.cube
+    34, // llvm.amdgcn.image.store.1d
+    34, // llvm.amdgcn.image.store.1darray
+    34, // llvm.amdgcn.image.store.2d
+    34, // llvm.amdgcn.image.store.2darray
+    34, // llvm.amdgcn.image.store.2darraymsaa
+    34, // llvm.amdgcn.image.store.2dmsaa
+    34, // llvm.amdgcn.image.store.3d
+    34, // llvm.amdgcn.image.store.cube
+    34, // llvm.amdgcn.image.store.mip.1d
+    34, // llvm.amdgcn.image.store.mip.1darray
+    34, // llvm.amdgcn.image.store.mip.2d
+    34, // llvm.amdgcn.image.store.mip.2darray
+    34, // llvm.amdgcn.image.store.mip.3d
+    34, // llvm.amdgcn.image.store.mip.cube
+    4, // llvm.amdgcn.implicit.buffer.ptr
+    4, // llvm.amdgcn.implicitarg.ptr
+    35, // llvm.amdgcn.init.exec
+    35, // llvm.amdgcn.init.exec.from.input
+    4, // llvm.amdgcn.interp.mov
+    4, // llvm.amdgcn.interp.p1
+    4, // llvm.amdgcn.interp.p2
+    4, // llvm.amdgcn.kernarg.segment.ptr
+    3, // llvm.amdgcn.kill
+    4, // llvm.amdgcn.ldexp
+    4, // llvm.amdgcn.lerp
+    4, // llvm.amdgcn.log.clamp
+    35, // llvm.amdgcn.loop
+    1, // llvm.amdgcn.mbcnt.hi
+    1, // llvm.amdgcn.mbcnt.lo
+    33, // llvm.amdgcn.mov.dpp
+    4, // llvm.amdgcn.mqsad.pk.u16.u8
+    4, // llvm.amdgcn.mqsad.u32.u8
+    4, // llvm.amdgcn.msad.u8
+    1, // llvm.amdgcn.ps.live
+    4, // llvm.amdgcn.qsad.pk.u16.u8
+    4, // llvm.amdgcn.queue.ptr
+    4, // llvm.amdgcn.rcp
+    4, // llvm.amdgcn.rcp.legacy
+    33, // llvm.amdgcn.readfirstlane
+    33, // llvm.amdgcn.readlane
+    4, // llvm.amdgcn.rsq
+    4, // llvm.amdgcn.rsq.clamp
+    4, // llvm.amdgcn.rsq.legacy
+    35, // llvm.amdgcn.s.barrier
+    3, // llvm.amdgcn.s.dcache.inv
+    3, // llvm.amdgcn.s.dcache.inv.vol
+    3, // llvm.amdgcn.s.dcache.wb
+    3, // llvm.amdgcn.s.dcache.wb.vol
+    3, // llvm.amdgcn.s.decperflevel
+    4, // llvm.amdgcn.s.getpc
+    36, // llvm.amdgcn.s.getreg
+    3, // llvm.amdgcn.s.incperflevel
+    16, // llvm.amdgcn.s.memrealtime
+    16, // llvm.amdgcn.s.memtime
+    3, // llvm.amdgcn.s.sendmsg
+    3, // llvm.amdgcn.s.sendmsghalt
+    3, // llvm.amdgcn.s.sleep
+    3, // llvm.amdgcn.s.waitcnt
+    4, // llvm.amdgcn.sad.hi.u8
+    4, // llvm.amdgcn.sad.u16
+    4, // llvm.amdgcn.sad.u8
+    4, // llvm.amdgcn.sbfe
+    4, // llvm.amdgcn.sdot2
+    4, // llvm.amdgcn.sdot4
+    4, // llvm.amdgcn.sdot8
+    33, // llvm.amdgcn.set.inactive
+    4, // llvm.amdgcn.sffbh
+    4, // llvm.amdgcn.sin
+    16, // llvm.amdgcn.tbuffer.load
+    34, // llvm.amdgcn.tbuffer.store
+    4, // llvm.amdgcn.trig.preop
+    4, // llvm.amdgcn.ubfe
+    4, // llvm.amdgcn.udot2
+    4, // llvm.amdgcn.udot4
+    4, // llvm.amdgcn.udot8
+    35, // llvm.amdgcn.unreachable
+    33, // llvm.amdgcn.update.dpp
+    35, // llvm.amdgcn.wave.barrier
+    4, // llvm.amdgcn.workgroup.id.x
+    4, // llvm.amdgcn.workgroup.id.y
+    4, // llvm.amdgcn.workgroup.id.z
+    4, // llvm.amdgcn.workitem.id.x
+    4, // llvm.amdgcn.workitem.id.y
+    4, // llvm.amdgcn.workitem.id.z
+    4, // llvm.amdgcn.wqm
+    33, // llvm.amdgcn.wqm.vote
+    33, // llvm.amdgcn.writelane
+    4, // llvm.amdgcn.wwm
+    3, // llvm.arm.cdp
+    3, // llvm.arm.cdp2
+    3, // llvm.arm.clrex
+    1, // llvm.arm.crc32b
+    1, // llvm.arm.crc32cb
+    1, // llvm.arm.crc32ch
+    1, // llvm.arm.crc32cw
+    1, // llvm.arm.crc32h
+    1, // llvm.arm.crc32w
+    3, // llvm.arm.dbg
+    3, // llvm.arm.dmb
+    3, // llvm.arm.dsb
+    3, // llvm.arm.get.fpscr
+    3, // llvm.arm.hint
+    3, // llvm.arm.isb
+    3, // llvm.arm.ldaex
+    3, // llvm.arm.ldaexd
+    3, // llvm.arm.ldc
+    3, // llvm.arm.ldc2
+    3, // llvm.arm.ldc2l
+    3, // llvm.arm.ldcl
+    3, // llvm.arm.ldrex
+    3, // llvm.arm.ldrexd
+    3, // llvm.arm.mcr
+    3, // llvm.arm.mcr2
+    3, // llvm.arm.mcrr
+    3, // llvm.arm.mcrr2
+    3, // llvm.arm.mrc
+    3, // llvm.arm.mrc2
+    3, // llvm.arm.mrrc
+    3, // llvm.arm.mrrc2
+    1, // llvm.arm.neon.aesd
+    1, // llvm.arm.neon.aese
+    1, // llvm.arm.neon.aesimc
+    1, // llvm.arm.neon.aesmc
+    1, // llvm.arm.neon.sdot
+    1, // llvm.arm.neon.sha1c
+    1, // llvm.arm.neon.sha1h
+    1, // llvm.arm.neon.sha1m
+    1, // llvm.arm.neon.sha1p
+    1, // llvm.arm.neon.sha1su0
+    1, // llvm.arm.neon.sha1su1
+    1, // llvm.arm.neon.sha256h
+    1, // llvm.arm.neon.sha256h2
+    1, // llvm.arm.neon.sha256su0
+    1, // llvm.arm.neon.sha256su1
+    1, // llvm.arm.neon.udot
+    1, // llvm.arm.neon.vabds
+    1, // llvm.arm.neon.vabdu
+    1, // llvm.arm.neon.vabs
+    1, // llvm.arm.neon.vacge
+    1, // llvm.arm.neon.vacgt
+    1, // llvm.arm.neon.vbsl
+    1, // llvm.arm.neon.vcls
+    1, // llvm.arm.neon.vcvtas
+    1, // llvm.arm.neon.vcvtau
+    1, // llvm.arm.neon.vcvtfp2fxs
+    1, // llvm.arm.neon.vcvtfp2fxu
+    1, // llvm.arm.neon.vcvtfp2hf
+    1, // llvm.arm.neon.vcvtfxs2fp
+    1, // llvm.arm.neon.vcvtfxu2fp
+    1, // llvm.arm.neon.vcvthf2fp
+    1, // llvm.arm.neon.vcvtms
+    1, // llvm.arm.neon.vcvtmu
+    1, // llvm.arm.neon.vcvtns
+    1, // llvm.arm.neon.vcvtnu
+    1, // llvm.arm.neon.vcvtps
+    1, // llvm.arm.neon.vcvtpu
+    1, // llvm.arm.neon.vhadds
+    1, // llvm.arm.neon.vhaddu
+    1, // llvm.arm.neon.vhsubs
+    1, // llvm.arm.neon.vhsubu
+    2, // llvm.arm.neon.vld1
+    2, // llvm.arm.neon.vld1x2
+    2, // llvm.arm.neon.vld1x3
+    2, // llvm.arm.neon.vld1x4
+    2, // llvm.arm.neon.vld2
+    2, // llvm.arm.neon.vld2dup
+    2, // llvm.arm.neon.vld2lane
+    2, // llvm.arm.neon.vld3
+    2, // llvm.arm.neon.vld3dup
+    2, // llvm.arm.neon.vld3lane
+    2, // llvm.arm.neon.vld4
+    2, // llvm.arm.neon.vld4dup
+    2, // llvm.arm.neon.vld4lane
+    1, // llvm.arm.neon.vmaxnm
+    1, // llvm.arm.neon.vmaxs
+    1, // llvm.arm.neon.vmaxu
+    1, // llvm.arm.neon.vminnm
+    1, // llvm.arm.neon.vmins
+    1, // llvm.arm.neon.vminu
+    1, // llvm.arm.neon.vmullp
+    1, // llvm.arm.neon.vmulls
+    1, // llvm.arm.neon.vmullu
+    1, // llvm.arm.neon.vmulp
+    1, // llvm.arm.neon.vpadals
+    1, // llvm.arm.neon.vpadalu
+    1, // llvm.arm.neon.vpadd
+    1, // llvm.arm.neon.vpaddls
+    1, // llvm.arm.neon.vpaddlu
+    1, // llvm.arm.neon.vpmaxs
+    1, // llvm.arm.neon.vpmaxu
+    1, // llvm.arm.neon.vpmins
+    1, // llvm.arm.neon.vpminu
+    1, // llvm.arm.neon.vqabs
+    1, // llvm.arm.neon.vqadds
+    1, // llvm.arm.neon.vqaddu
+    1, // llvm.arm.neon.vqdmulh
+    1, // llvm.arm.neon.vqdmull
+    1, // llvm.arm.neon.vqmovns
+    1, // llvm.arm.neon.vqmovnsu
+    1, // llvm.arm.neon.vqmovnu
+    1, // llvm.arm.neon.vqneg
+    1, // llvm.arm.neon.vqrdmulh
+    1, // llvm.arm.neon.vqrshiftns
+    1, // llvm.arm.neon.vqrshiftnsu
+    1, // llvm.arm.neon.vqrshiftnu
+    1, // llvm.arm.neon.vqrshifts
+    1, // llvm.arm.neon.vqrshiftu
+    1, // llvm.arm.neon.vqshiftns
+    1, // llvm.arm.neon.vqshiftnsu
+    1, // llvm.arm.neon.vqshiftnu
+    1, // llvm.arm.neon.vqshifts
+    1, // llvm.arm.neon.vqshiftsu
+    1, // llvm.arm.neon.vqshiftu
+    1, // llvm.arm.neon.vqsubs
+    1, // llvm.arm.neon.vqsubu
+    1, // llvm.arm.neon.vraddhn
+    1, // llvm.arm.neon.vrecpe
+    1, // llvm.arm.neon.vrecps
+    1, // llvm.arm.neon.vrhadds
+    1, // llvm.arm.neon.vrhaddu
+    1, // llvm.arm.neon.vrinta
+    1, // llvm.arm.neon.vrintm
+    1, // llvm.arm.neon.vrintn
+    1, // llvm.arm.neon.vrintp
+    1, // llvm.arm.neon.vrintx
+    1, // llvm.arm.neon.vrintz
+    1, // llvm.arm.neon.vrshiftn
+    1, // llvm.arm.neon.vrshifts
+    1, // llvm.arm.neon.vrshiftu
+    1, // llvm.arm.neon.vrsqrte
+    1, // llvm.arm.neon.vrsqrts
+    1, // llvm.arm.neon.vrsubhn
+    1, // llvm.arm.neon.vshiftins
+    1, // llvm.arm.neon.vshifts
+    1, // llvm.arm.neon.vshiftu
+    22, // llvm.arm.neon.vst1
+    18, // llvm.arm.neon.vst1x2
+    18, // llvm.arm.neon.vst1x3
+    18, // llvm.arm.neon.vst1x4
+    22, // llvm.arm.neon.vst2
+    22, // llvm.arm.neon.vst2lane
+    22, // llvm.arm.neon.vst3
+    22, // llvm.arm.neon.vst3lane
+    22, // llvm.arm.neon.vst4
+    22, // llvm.arm.neon.vst4lane
+    1, // llvm.arm.neon.vtbl1
+    1, // llvm.arm.neon.vtbl2
+    1, // llvm.arm.neon.vtbl3
+    1, // llvm.arm.neon.vtbl4
+    1, // llvm.arm.neon.vtbx1
+    1, // llvm.arm.neon.vtbx2
+    1, // llvm.arm.neon.vtbx3
+    1, // llvm.arm.neon.vtbx4
+    1, // llvm.arm.qadd
+    1, // llvm.arm.qadd16
+    1, // llvm.arm.qadd8
+    1, // llvm.arm.qasx
+    1, // llvm.arm.qsax
+    1, // llvm.arm.qsub
+    1, // llvm.arm.qsub16
+    1, // llvm.arm.qsub8
+    3, // llvm.arm.sadd16
+    3, // llvm.arm.sadd8
+    3, // llvm.arm.sasx
+    16, // llvm.arm.sel
+    3, // llvm.arm.set.fpscr
+    1, // llvm.arm.shadd16
+    1, // llvm.arm.shadd8
+    1, // llvm.arm.shasx
+    1, // llvm.arm.shsax
+    1, // llvm.arm.shsub16
+    1, // llvm.arm.shsub8
+    1, // llvm.arm.smlabb
+    1, // llvm.arm.smlabt
+    1, // llvm.arm.smlad
+    1, // llvm.arm.smladx
+    1, // llvm.arm.smlald
+    1, // llvm.arm.smlaldx
+    1, // llvm.arm.smlatb
+    1, // llvm.arm.smlatt
+    1, // llvm.arm.smlawb
+    1, // llvm.arm.smlawt
+    1, // llvm.arm.smlsd
+    1, // llvm.arm.smlsdx
+    1, // llvm.arm.smlsld
+    1, // llvm.arm.smlsldx
+    1, // llvm.arm.smuad
+    1, // llvm.arm.smuadx
+    1, // llvm.arm.smulbb
+    1, // llvm.arm.smulbt
+    1, // llvm.arm.smultb
+    1, // llvm.arm.smultt
+    1, // llvm.arm.smulwb
+    1, // llvm.arm.smulwt
+    1, // llvm.arm.smusd
+    1, // llvm.arm.smusdx
+    3, // llvm.arm.space
+    1, // llvm.arm.ssat
+    1, // llvm.arm.ssat16
+    3, // llvm.arm.ssax
+    3, // llvm.arm.ssub16
+    3, // llvm.arm.ssub8
+    3, // llvm.arm.stc
+    3, // llvm.arm.stc2
+    3, // llvm.arm.stc2l
+    3, // llvm.arm.stcl
+    3, // llvm.arm.stlex
+    3, // llvm.arm.stlexd
+    3, // llvm.arm.strex
+    3, // llvm.arm.strexd
+    1, // llvm.arm.sxtab16
+    1, // llvm.arm.sxtb16
+    3, // llvm.arm.uadd16
+    3, // llvm.arm.uadd8
+    3, // llvm.arm.uasx
+    1, // llvm.arm.uhadd16
+    1, // llvm.arm.uhadd8
+    1, // llvm.arm.uhasx
+    1, // llvm.arm.uhsax
+    1, // llvm.arm.uhsub16
+    1, // llvm.arm.uhsub8
+    3, // llvm.arm.undefined
+    1, // llvm.arm.uqadd16
+    1, // llvm.arm.uqadd8
+    1, // llvm.arm.uqasx
+    1, // llvm.arm.uqsax
+    1, // llvm.arm.uqsub16
+    1, // llvm.arm.uqsub8
+    1, // llvm.arm.usad8
+    1, // llvm.arm.usada8
+    1, // llvm.arm.usat
+    1, // llvm.arm.usat16
+    3, // llvm.arm.usax
+    3, // llvm.arm.usub16
+    3, // llvm.arm.usub8
+    1, // llvm.arm.uxtab16
+    1, // llvm.arm.uxtb16
+    1, // llvm.arm.vcvtr
+    1, // llvm.arm.vcvtru
+    16, // llvm.bpf.load.byte
+    16, // llvm.bpf.load.half
+    16, // llvm.bpf.load.word
+    3, // llvm.bpf.pseudo
+    1, // llvm.hexagon.A2.abs
+    1, // llvm.hexagon.A2.absp
+    1, // llvm.hexagon.A2.abssat
+    1, // llvm.hexagon.A2.add
+    1, // llvm.hexagon.A2.addh.h16.hh
+    1, // llvm.hexagon.A2.addh.h16.hl
+    1, // llvm.hexagon.A2.addh.h16.lh
+    1, // llvm.hexagon.A2.addh.h16.ll
+    1, // llvm.hexagon.A2.addh.h16.sat.hh
+    1, // llvm.hexagon.A2.addh.h16.sat.hl
+    1, // llvm.hexagon.A2.addh.h16.sat.lh
+    1, // llvm.hexagon.A2.addh.h16.sat.ll
+    1, // llvm.hexagon.A2.addh.l16.hl
+    1, // llvm.hexagon.A2.addh.l16.ll
+    1, // llvm.hexagon.A2.addh.l16.sat.hl
+    1, // llvm.hexagon.A2.addh.l16.sat.ll
+    1, // llvm.hexagon.A2.addi
+    1, // llvm.hexagon.A2.addp
+    1, // llvm.hexagon.A2.addpsat
+    1, // llvm.hexagon.A2.addsat
+    1, // llvm.hexagon.A2.addsp
+    1, // llvm.hexagon.A2.and
+    1, // llvm.hexagon.A2.andir
+    1, // llvm.hexagon.A2.andp
+    1, // llvm.hexagon.A2.aslh
+    1, // llvm.hexagon.A2.asrh
+    1, // llvm.hexagon.A2.combine.hh
+    1, // llvm.hexagon.A2.combine.hl
+    1, // llvm.hexagon.A2.combine.lh
+    1, // llvm.hexagon.A2.combine.ll
+    1, // llvm.hexagon.A2.combineii
+    1, // llvm.hexagon.A2.combinew
+    1, // llvm.hexagon.A2.max
+    1, // llvm.hexagon.A2.maxp
+    1, // llvm.hexagon.A2.maxu
+    1, // llvm.hexagon.A2.maxup
+    1, // llvm.hexagon.A2.min
+    1, // llvm.hexagon.A2.minp
+    1, // llvm.hexagon.A2.minu
+    1, // llvm.hexagon.A2.minup
+    1, // llvm.hexagon.A2.neg
+    1, // llvm.hexagon.A2.negp
+    1, // llvm.hexagon.A2.negsat
+    1, // llvm.hexagon.A2.not
+    1, // llvm.hexagon.A2.notp
+    1, // llvm.hexagon.A2.or
+    1, // llvm.hexagon.A2.orir
+    1, // llvm.hexagon.A2.orp
+    1, // llvm.hexagon.A2.roundsat
+    1, // llvm.hexagon.A2.sat
+    1, // llvm.hexagon.A2.satb
+    1, // llvm.hexagon.A2.sath
+    1, // llvm.hexagon.A2.satub
+    1, // llvm.hexagon.A2.satuh
+    1, // llvm.hexagon.A2.sub
+    1, // llvm.hexagon.A2.subh.h16.hh
+    1, // llvm.hexagon.A2.subh.h16.hl
+    1, // llvm.hexagon.A2.subh.h16.lh
+    1, // llvm.hexagon.A2.subh.h16.ll
+    1, // llvm.hexagon.A2.subh.h16.sat.hh
+    1, // llvm.hexagon.A2.subh.h16.sat.hl
+    1, // llvm.hexagon.A2.subh.h16.sat.lh
+    1, // llvm.hexagon.A2.subh.h16.sat.ll
+    1, // llvm.hexagon.A2.subh.l16.hl
+    1, // llvm.hexagon.A2.subh.l16.ll
+    1, // llvm.hexagon.A2.subh.l16.sat.hl
+    1, // llvm.hexagon.A2.subh.l16.sat.ll
+    1, // llvm.hexagon.A2.subp
+    1, // llvm.hexagon.A2.subri
+    1, // llvm.hexagon.A2.subsat
+    1, // llvm.hexagon.A2.svaddh
+    1, // llvm.hexagon.A2.svaddhs
+    1, // llvm.hexagon.A2.svadduhs
+    1, // llvm.hexagon.A2.svavgh
+    1, // llvm.hexagon.A2.svavghs
+    1, // llvm.hexagon.A2.svnavgh
+    1, // llvm.hexagon.A2.svsubh
+    1, // llvm.hexagon.A2.svsubhs
+    1, // llvm.hexagon.A2.svsubuhs
+    1, // llvm.hexagon.A2.swiz
+    1, // llvm.hexagon.A2.sxtb
+    1, // llvm.hexagon.A2.sxth
+    1, // llvm.hexagon.A2.sxtw
+    1, // llvm.hexagon.A2.tfr
+    1, // llvm.hexagon.A2.tfrih
+    1, // llvm.hexagon.A2.tfril
+    1, // llvm.hexagon.A2.tfrp
+    1, // llvm.hexagon.A2.tfrpi
+    1, // llvm.hexagon.A2.tfrsi
+    1, // llvm.hexagon.A2.vabsh
+    1, // llvm.hexagon.A2.vabshsat
+    1, // llvm.hexagon.A2.vabsw
+    1, // llvm.hexagon.A2.vabswsat
+    1, // llvm.hexagon.A2.vaddb.map
+    1, // llvm.hexagon.A2.vaddh
+    1, // llvm.hexagon.A2.vaddhs
+    1, // llvm.hexagon.A2.vaddub
+    1, // llvm.hexagon.A2.vaddubs
+    1, // llvm.hexagon.A2.vadduhs
+    1, // llvm.hexagon.A2.vaddw
+    1, // llvm.hexagon.A2.vaddws
+    1, // llvm.hexagon.A2.vavgh
+    1, // llvm.hexagon.A2.vavghcr
+    1, // llvm.hexagon.A2.vavghr
+    1, // llvm.hexagon.A2.vavgub
+    1, // llvm.hexagon.A2.vavgubr
+    1, // llvm.hexagon.A2.vavguh
+    1, // llvm.hexagon.A2.vavguhr
+    1, // llvm.hexagon.A2.vavguw
+    1, // llvm.hexagon.A2.vavguwr
+    1, // llvm.hexagon.A2.vavgw
+    1, // llvm.hexagon.A2.vavgwcr
+    1, // llvm.hexagon.A2.vavgwr
+    1, // llvm.hexagon.A2.vcmpbeq
+    1, // llvm.hexagon.A2.vcmpbgtu
+    1, // llvm.hexagon.A2.vcmpheq
+    1, // llvm.hexagon.A2.vcmphgt
+    1, // llvm.hexagon.A2.vcmphgtu
+    1, // llvm.hexagon.A2.vcmpweq
+    1, // llvm.hexagon.A2.vcmpwgt
+    1, // llvm.hexagon.A2.vcmpwgtu
+    1, // llvm.hexagon.A2.vconj
+    1, // llvm.hexagon.A2.vmaxb
+    1, // llvm.hexagon.A2.vmaxh
+    1, // llvm.hexagon.A2.vmaxub
+    1, // llvm.hexagon.A2.vmaxuh
+    1, // llvm.hexagon.A2.vmaxuw
+    1, // llvm.hexagon.A2.vmaxw
+    1, // llvm.hexagon.A2.vminb
+    1, // llvm.hexagon.A2.vminh
+    1, // llvm.hexagon.A2.vminub
+    1, // llvm.hexagon.A2.vminuh
+    1, // llvm.hexagon.A2.vminuw
+    1, // llvm.hexagon.A2.vminw
+    1, // llvm.hexagon.A2.vnavgh
+    1, // llvm.hexagon.A2.vnavghcr
+    1, // llvm.hexagon.A2.vnavghr
+    1, // llvm.hexagon.A2.vnavgw
+    1, // llvm.hexagon.A2.vnavgwcr
+    1, // llvm.hexagon.A2.vnavgwr
+    1, // llvm.hexagon.A2.vraddub
+    1, // llvm.hexagon.A2.vraddub.acc
+    1, // llvm.hexagon.A2.vrsadub
+    1, // llvm.hexagon.A2.vrsadub.acc
+    1, // llvm.hexagon.A2.vsubb.map
+    1, // llvm.hexagon.A2.vsubh
+    1, // llvm.hexagon.A2.vsubhs
+    1, // llvm.hexagon.A2.vsubub
+    1, // llvm.hexagon.A2.vsububs
+    1, // llvm.hexagon.A2.vsubuhs
+    1, // llvm.hexagon.A2.vsubw
+    1, // llvm.hexagon.A2.vsubws
+    1, // llvm.hexagon.A2.xor
+    1, // llvm.hexagon.A2.xorp
+    1, // llvm.hexagon.A2.zxtb
+    1, // llvm.hexagon.A2.zxth
+    1, // llvm.hexagon.A4.andn
+    1, // llvm.hexagon.A4.andnp
+    1, // llvm.hexagon.A4.bitsplit
+    1, // llvm.hexagon.A4.bitspliti
+    1, // llvm.hexagon.A4.boundscheck
+    1, // llvm.hexagon.A4.cmpbeq
+    1, // llvm.hexagon.A4.cmpbeqi
+    1, // llvm.hexagon.A4.cmpbgt
+    1, // llvm.hexagon.A4.cmpbgti
+    1, // llvm.hexagon.A4.cmpbgtu
+    1, // llvm.hexagon.A4.cmpbgtui
+    1, // llvm.hexagon.A4.cmpheq
+    1, // llvm.hexagon.A4.cmpheqi
+    1, // llvm.hexagon.A4.cmphgt
+    1, // llvm.hexagon.A4.cmphgti
+    1, // llvm.hexagon.A4.cmphgtu
+    1, // llvm.hexagon.A4.cmphgtui
+    1, // llvm.hexagon.A4.combineir
+    1, // llvm.hexagon.A4.combineri
+    1, // llvm.hexagon.A4.cround.ri
+    1, // llvm.hexagon.A4.cround.rr
+    1, // llvm.hexagon.A4.modwrapu
+    1, // llvm.hexagon.A4.orn
+    1, // llvm.hexagon.A4.ornp
+    1, // llvm.hexagon.A4.rcmpeq
+    1, // llvm.hexagon.A4.rcmpeqi
+    1, // llvm.hexagon.A4.rcmpneq
+    1, // llvm.hexagon.A4.rcmpneqi
+    1, // llvm.hexagon.A4.round.ri
+    1, // llvm.hexagon.A4.round.ri.sat
+    1, // llvm.hexagon.A4.round.rr
+    1, // llvm.hexagon.A4.round.rr.sat
+    1, // llvm.hexagon.A4.tlbmatch
+    1, // llvm.hexagon.A4.vcmpbeq.any
+    1, // llvm.hexagon.A4.vcmpbeqi
+    1, // llvm.hexagon.A4.vcmpbgt
+    1, // llvm.hexagon.A4.vcmpbgti
+    1, // llvm.hexagon.A4.vcmpbgtui
+    1, // llvm.hexagon.A4.vcmpheqi
+    1, // llvm.hexagon.A4.vcmphgti
+    1, // llvm.hexagon.A4.vcmphgtui
+    1, // llvm.hexagon.A4.vcmpweqi
+    1, // llvm.hexagon.A4.vcmpwgti
+    1, // llvm.hexagon.A4.vcmpwgtui
+    1, // llvm.hexagon.A4.vrmaxh
+    1, // llvm.hexagon.A4.vrmaxuh
+    1, // llvm.hexagon.A4.vrmaxuw
+    1, // llvm.hexagon.A4.vrmaxw
+    1, // llvm.hexagon.A4.vrminh
+    1, // llvm.hexagon.A4.vrminuh
+    1, // llvm.hexagon.A4.vrminuw
+    1, // llvm.hexagon.A4.vrminw
+    1, // llvm.hexagon.A5.vaddhubs
+    1, // llvm.hexagon.A6.vcmpbeq.notany
+    1, // llvm.hexagon.A6.vcmpbeq.notany.128B
+    1, // llvm.hexagon.C2.all8
+    1, // llvm.hexagon.C2.and
+    1, // llvm.hexagon.C2.andn
+    1, // llvm.hexagon.C2.any8
+    1, // llvm.hexagon.C2.bitsclr
+    1, // llvm.hexagon.C2.bitsclri
+    1, // llvm.hexagon.C2.bitsset
+    1, // llvm.hexagon.C2.cmpeq
+    1, // llvm.hexagon.C2.cmpeqi
+    1, // llvm.hexagon.C2.cmpeqp
+    1, // llvm.hexagon.C2.cmpgei
+    1, // llvm.hexagon.C2.cmpgeui
+    1, // llvm.hexagon.C2.cmpgt
+    1, // llvm.hexagon.C2.cmpgti
+    1, // llvm.hexagon.C2.cmpgtp
+    1, // llvm.hexagon.C2.cmpgtu
+    1, // llvm.hexagon.C2.cmpgtui
+    1, // llvm.hexagon.C2.cmpgtup
+    1, // llvm.hexagon.C2.cmplt
+    1, // llvm.hexagon.C2.cmpltu
+    1, // llvm.hexagon.C2.mask
+    1, // llvm.hexagon.C2.mux
+    1, // llvm.hexagon.C2.muxii
+    1, // llvm.hexagon.C2.muxir
+    1, // llvm.hexagon.C2.muxri
+    1, // llvm.hexagon.C2.not
+    1, // llvm.hexagon.C2.or
+    1, // llvm.hexagon.C2.orn
+    1, // llvm.hexagon.C2.pxfer.map
+    1, // llvm.hexagon.C2.tfrpr
+    1, // llvm.hexagon.C2.tfrrp
+    1, // llvm.hexagon.C2.vitpack
+    1, // llvm.hexagon.C2.vmux
+    1, // llvm.hexagon.C2.xor
+    1, // llvm.hexagon.C4.and.and
+    1, // llvm.hexagon.C4.and.andn
+    1, // llvm.hexagon.C4.and.or
+    1, // llvm.hexagon.C4.and.orn
+    1, // llvm.hexagon.C4.cmplte
+    1, // llvm.hexagon.C4.cmpltei
+    1, // llvm.hexagon.C4.cmplteu
+    1, // llvm.hexagon.C4.cmplteui
+    1, // llvm.hexagon.C4.cmpneq
+    1, // llvm.hexagon.C4.cmpneqi
+    1, // llvm.hexagon.C4.fastcorner9
+    1, // llvm.hexagon.C4.fastcorner9.not
+    1, // llvm.hexagon.C4.nbitsclr
+    1, // llvm.hexagon.C4.nbitsclri
+    1, // llvm.hexagon.C4.nbitsset
+    1, // llvm.hexagon.C4.or.and
+    1, // llvm.hexagon.C4.or.andn
+    1, // llvm.hexagon.C4.or.or
+    1, // llvm.hexagon.C4.or.orn
+    1, // llvm.hexagon.F2.conv.d2df
+    1, // llvm.hexagon.F2.conv.d2sf
+    1, // llvm.hexagon.F2.conv.df2d
+    1, // llvm.hexagon.F2.conv.df2d.chop
+    1, // llvm.hexagon.F2.conv.df2sf
+    1, // llvm.hexagon.F2.conv.df2ud
+    1, // llvm.hexagon.F2.conv.df2ud.chop
+    1, // llvm.hexagon.F2.conv.df2uw
+    1, // llvm.hexagon.F2.conv.df2uw.chop
+    1, // llvm.hexagon.F2.conv.df2w
+    1, // llvm.hexagon.F2.conv.df2w.chop
+    1, // llvm.hexagon.F2.conv.sf2d
+    1, // llvm.hexagon.F2.conv.sf2d.chop
+    1, // llvm.hexagon.F2.conv.sf2df
+    1, // llvm.hexagon.F2.conv.sf2ud
+    1, // llvm.hexagon.F2.conv.sf2ud.chop
+    1, // llvm.hexagon.F2.conv.sf2uw
+    1, // llvm.hexagon.F2.conv.sf2uw.chop
+    1, // llvm.hexagon.F2.conv.sf2w
+    1, // llvm.hexagon.F2.conv.sf2w.chop
+    1, // llvm.hexagon.F2.conv.ud2df
+    1, // llvm.hexagon.F2.conv.ud2sf
+    37, // llvm.hexagon.F2.conv.uw2df
+    37, // llvm.hexagon.F2.conv.uw2sf
+    37, // llvm.hexagon.F2.conv.w2df
+    37, // llvm.hexagon.F2.conv.w2sf
+    37, // llvm.hexagon.F2.dfclass
+    37, // llvm.hexagon.F2.dfcmpeq
+    37, // llvm.hexagon.F2.dfcmpge
+    37, // llvm.hexagon.F2.dfcmpgt
+    37, // llvm.hexagon.F2.dfcmpuo
+    37, // llvm.hexagon.F2.dfimm.n
+    37, // llvm.hexagon.F2.dfimm.p
+    37, // llvm.hexagon.F2.sfadd
+    37, // llvm.hexagon.F2.sfclass
+    37, // llvm.hexagon.F2.sfcmpeq
+    37, // llvm.hexagon.F2.sfcmpge
+    37, // llvm.hexagon.F2.sfcmpgt
+    37, // llvm.hexagon.F2.sfcmpuo
+    37, // llvm.hexagon.F2.sffixupd
+    37, // llvm.hexagon.F2.sffixupn
+    1, // llvm.hexagon.F2.sffixupr
+    37, // llvm.hexagon.F2.sffma
+    37, // llvm.hexagon.F2.sffma.lib
+    37, // llvm.hexagon.F2.sffma.sc
+    37, // llvm.hexagon.F2.sffms
+    37, // llvm.hexagon.F2.sffms.lib
+    37, // llvm.hexagon.F2.sfimm.n
+    37, // llvm.hexagon.F2.sfimm.p
+    37, // llvm.hexagon.F2.sfmax
+    37, // llvm.hexagon.F2.sfmin
+    37, // llvm.hexagon.F2.sfmpy
+    37, // llvm.hexagon.F2.sfsub
+    16, // llvm.hexagon.L2.loadrb.pbr
+    30, // llvm.hexagon.L2.loadrb.pci
+    19, // llvm.hexagon.L2.loadrb.pcr
+    16, // llvm.hexagon.L2.loadrd.pbr
+    30, // llvm.hexagon.L2.loadrd.pci
+    19, // llvm.hexagon.L2.loadrd.pcr
+    16, // llvm.hexagon.L2.loadrh.pbr
+    30, // llvm.hexagon.L2.loadrh.pci
+    19, // llvm.hexagon.L2.loadrh.pcr
+    16, // llvm.hexagon.L2.loadri.pbr
+    30, // llvm.hexagon.L2.loadri.pci
+    19, // llvm.hexagon.L2.loadri.pcr
+    16, // llvm.hexagon.L2.loadrub.pbr
+    30, // llvm.hexagon.L2.loadrub.pci
+    19, // llvm.hexagon.L2.loadrub.pcr
+    16, // llvm.hexagon.L2.loadruh.pbr
+    30, // llvm.hexagon.L2.loadruh.pci
+    19, // llvm.hexagon.L2.loadruh.pcr
+    18, // llvm.hexagon.L2.loadw.locked
+    18, // llvm.hexagon.L4.loadd.locked
+    1, // llvm.hexagon.M2.acci
+    1, // llvm.hexagon.M2.accii
+    1, // llvm.hexagon.M2.cmaci.s0
+    1, // llvm.hexagon.M2.cmacr.s0
+    1, // llvm.hexagon.M2.cmacs.s0
+    1, // llvm.hexagon.M2.cmacs.s1
+    1, // llvm.hexagon.M2.cmacsc.s0
+    1, // llvm.hexagon.M2.cmacsc.s1
+    1, // llvm.hexagon.M2.cmpyi.s0
+    1, // llvm.hexagon.M2.cmpyr.s0
+    1, // llvm.hexagon.M2.cmpyrs.s0
+    1, // llvm.hexagon.M2.cmpyrs.s1
+    1, // llvm.hexagon.M2.cmpyrsc.s0
+    1, // llvm.hexagon.M2.cmpyrsc.s1
+    1, // llvm.hexagon.M2.cmpys.s0
+    1, // llvm.hexagon.M2.cmpys.s1
+    1, // llvm.hexagon.M2.cmpysc.s0
+    1, // llvm.hexagon.M2.cmpysc.s1
+    1, // llvm.hexagon.M2.cnacs.s0
+    1, // llvm.hexagon.M2.cnacs.s1
+    1, // llvm.hexagon.M2.cnacsc.s0
+    1, // llvm.hexagon.M2.cnacsc.s1
+    1, // llvm.hexagon.M2.dpmpyss.acc.s0
+    1, // llvm.hexagon.M2.dpmpyss.nac.s0
+    1, // llvm.hexagon.M2.dpmpyss.rnd.s0
+    1, // llvm.hexagon.M2.dpmpyss.s0
+    1, // llvm.hexagon.M2.dpmpyuu.acc.s0
+    1, // llvm.hexagon.M2.dpmpyuu.nac.s0
+    1, // llvm.hexagon.M2.dpmpyuu.s0
+    1, // llvm.hexagon.M2.hmmpyh.rs1
+    1, // llvm.hexagon.M2.hmmpyh.s1
+    1, // llvm.hexagon.M2.hmmpyl.rs1
+    1, // llvm.hexagon.M2.hmmpyl.s1
+    1, // llvm.hexagon.M2.maci
+    1, // llvm.hexagon.M2.macsin
+    1, // llvm.hexagon.M2.macsip
+    1, // llvm.hexagon.M2.mmachs.rs0
+    1, // llvm.hexagon.M2.mmachs.rs1
+    1, // llvm.hexagon.M2.mmachs.s0
+    1, // llvm.hexagon.M2.mmachs.s1
+    1, // llvm.hexagon.M2.mmacls.rs0
+    1, // llvm.hexagon.M2.mmacls.rs1
+    1, // llvm.hexagon.M2.mmacls.s0
+    1, // llvm.hexagon.M2.mmacls.s1
+    1, // llvm.hexagon.M2.mmacuhs.rs0
+    1, // llvm.hexagon.M2.mmacuhs.rs1
+    1, // llvm.hexagon.M2.mmacuhs.s0
+    1, // llvm.hexagon.M2.mmacuhs.s1
+    1, // llvm.hexagon.M2.mmaculs.rs0
+    1, // llvm.hexagon.M2.mmaculs.rs1
+    1, // llvm.hexagon.M2.mmaculs.s0
+    1, // llvm.hexagon.M2.mmaculs.s1
+    1, // llvm.hexagon.M2.mmpyh.rs0
+    1, // llvm.hexagon.M2.mmpyh.rs1
+    1, // llvm.hexagon.M2.mmpyh.s0
+    1, // llvm.hexagon.M2.mmpyh.s1
+    1, // llvm.hexagon.M2.mmpyl.rs0
+    1, // llvm.hexagon.M2.mmpyl.rs1
+    1, // llvm.hexagon.M2.mmpyl.s0
+    1, // llvm.hexagon.M2.mmpyl.s1
+    1, // llvm.hexagon.M2.mmpyuh.rs0
+    1, // llvm.hexagon.M2.mmpyuh.rs1
+    1, // llvm.hexagon.M2.mmpyuh.s0
+    1, // llvm.hexagon.M2.mmpyuh.s1
+    1, // llvm.hexagon.M2.mmpyul.rs0
+    1, // llvm.hexagon.M2.mmpyul.rs1
+    1, // llvm.hexagon.M2.mmpyul.s0
+    1, // llvm.hexagon.M2.mmpyul.s1
+    1, // llvm.hexagon.M2.mpy.acc.hh.s0
+    1, // llvm.hexagon.M2.mpy.acc.hh.s1
+    1, // llvm.hexagon.M2.mpy.acc.hl.s0
+    1, // llvm.hexagon.M2.mpy.acc.hl.s1
+    1, // llvm.hexagon.M2.mpy.acc.lh.s0
+    1, // llvm.hexagon.M2.mpy.acc.lh.s1
+    1, // llvm.hexagon.M2.mpy.acc.ll.s0
+    1, // llvm.hexagon.M2.mpy.acc.ll.s1
+    1, // llvm.hexagon.M2.mpy.acc.sat.hh.s0
+    1, // llvm.hexagon.M2.mpy.acc.sat.hh.s1
+    1, // llvm.hexagon.M2.mpy.acc.sat.hl.s0
+    1, // llvm.hexagon.M2.mpy.acc.sat.hl.s1
+    1, // llvm.hexagon.M2.mpy.acc.sat.lh.s0
+    1, // llvm.hexagon.M2.mpy.acc.sat.lh.s1
+    1, // llvm.hexagon.M2.mpy.acc.sat.ll.s0
+    1, // llvm.hexagon.M2.mpy.acc.sat.ll.s1
+    1, // llvm.hexagon.M2.mpy.hh.s0
+    1, // llvm.hexagon.M2.mpy.hh.s1
+    1, // llvm.hexagon.M2.mpy.hl.s0
+    1, // llvm.hexagon.M2.mpy.hl.s1
+    1, // llvm.hexagon.M2.mpy.lh.s0
+    1, // llvm.hexagon.M2.mpy.lh.s1
+    1, // llvm.hexagon.M2.mpy.ll.s0
+    1, // llvm.hexagon.M2.mpy.ll.s1
+    1, // llvm.hexagon.M2.mpy.nac.hh.s0
+    1, // llvm.hexagon.M2.mpy.nac.hh.s1
+    1, // llvm.hexagon.M2.mpy.nac.hl.s0
+    1, // llvm.hexagon.M2.mpy.nac.hl.s1
+    1, // llvm.hexagon.M2.mpy.nac.lh.s0
+    1, // llvm.hexagon.M2.mpy.nac.lh.s1
+    1, // llvm.hexagon.M2.mpy.nac.ll.s0
+    1, // llvm.hexagon.M2.mpy.nac.ll.s1
+    1, // llvm.hexagon.M2.mpy.nac.sat.hh.s0
+    1, // llvm.hexagon.M2.mpy.nac.sat.hh.s1
+    1, // llvm.hexagon.M2.mpy.nac.sat.hl.s0
+    1, // llvm.hexagon.M2.mpy.nac.sat.hl.s1
+    1, // llvm.hexagon.M2.mpy.nac.sat.lh.s0
+    1, // llvm.hexagon.M2.mpy.nac.sat.lh.s1
+    1, // llvm.hexagon.M2.mpy.nac.sat.ll.s0
+    1, // llvm.hexagon.M2.mpy.nac.sat.ll.s1
+    1, // llvm.hexagon.M2.mpy.rnd.hh.s0
+    1, // llvm.hexagon.M2.mpy.rnd.hh.s1
+    1, // llvm.hexagon.M2.mpy.rnd.hl.s0
+    1, // llvm.hexagon.M2.mpy.rnd.hl.s1
+    1, // llvm.hexagon.M2.mpy.rnd.lh.s0
+    1, // llvm.hexagon.M2.mpy.rnd.lh.s1
+    1, // llvm.hexagon.M2.mpy.rnd.ll.s0
+    1, // llvm.hexagon.M2.mpy.rnd.ll.s1
+    1, // llvm.hexagon.M2.mpy.sat.hh.s0
+    1, // llvm.hexagon.M2.mpy.sat.hh.s1
+    1, // llvm.hexagon.M2.mpy.sat.hl.s0
+    1, // llvm.hexagon.M2.mpy.sat.hl.s1
+    1, // llvm.hexagon.M2.mpy.sat.lh.s0
+    1, // llvm.hexagon.M2.mpy.sat.lh.s1
+    1, // llvm.hexagon.M2.mpy.sat.ll.s0
+    1, // llvm.hexagon.M2.mpy.sat.ll.s1
+    1, // llvm.hexagon.M2.mpy.sat.rnd.hh.s0
+    1, // llvm.hexagon.M2.mpy.sat.rnd.hh.s1
+    1, // llvm.hexagon.M2.mpy.sat.rnd.hl.s0
+    1, // llvm.hexagon.M2.mpy.sat.rnd.hl.s1
+    1, // llvm.hexagon.M2.mpy.sat.rnd.lh.s0
+    1, // llvm.hexagon.M2.mpy.sat.rnd.lh.s1
+    1, // llvm.hexagon.M2.mpy.sat.rnd.ll.s0
+    1, // llvm.hexagon.M2.mpy.sat.rnd.ll.s1
+    1, // llvm.hexagon.M2.mpy.up
+    1, // llvm.hexagon.M2.mpy.up.s1
+    1, // llvm.hexagon.M2.mpy.up.s1.sat
+    1, // llvm.hexagon.M2.mpyd.acc.hh.s0
+    1, // llvm.hexagon.M2.mpyd.acc.hh.s1
+    1, // llvm.hexagon.M2.mpyd.acc.hl.s0
+    1, // llvm.hexagon.M2.mpyd.acc.hl.s1
+    1, // llvm.hexagon.M2.mpyd.acc.lh.s0
+    1, // llvm.hexagon.M2.mpyd.acc.lh.s1
+    1, // llvm.hexagon.M2.mpyd.acc.ll.s0
+    1, // llvm.hexagon.M2.mpyd.acc.ll.s1
+    1, // llvm.hexagon.M2.mpyd.hh.s0
+    1, // llvm.hexagon.M2.mpyd.hh.s1
+    1, // llvm.hexagon.M2.mpyd.hl.s0
+    1, // llvm.hexagon.M2.mpyd.hl.s1
+    1, // llvm.hexagon.M2.mpyd.lh.s0
+    1, // llvm.hexagon.M2.mpyd.lh.s1
+    1, // llvm.hexagon.M2.mpyd.ll.s0
+    1, // llvm.hexagon.M2.mpyd.ll.s1
+    1, // llvm.hexagon.M2.mpyd.nac.hh.s0
+    1, // llvm.hexagon.M2.mpyd.nac.hh.s1
+    1, // llvm.hexagon.M2.mpyd.nac.hl.s0
+    1, // llvm.hexagon.M2.mpyd.nac.hl.s1
+    1, // llvm.hexagon.M2.mpyd.nac.lh.s0
+    1, // llvm.hexagon.M2.mpyd.nac.lh.s1
+    1, // llvm.hexagon.M2.mpyd.nac.ll.s0
+    1, // llvm.hexagon.M2.mpyd.nac.ll.s1
+    1, // llvm.hexagon.M2.mpyd.rnd.hh.s0
+    1, // llvm.hexagon.M2.mpyd.rnd.hh.s1
+    1, // llvm.hexagon.M2.mpyd.rnd.hl.s0
+    1, // llvm.hexagon.M2.mpyd.rnd.hl.s1
+    1, // llvm.hexagon.M2.mpyd.rnd.lh.s0
+    1, // llvm.hexagon.M2.mpyd.rnd.lh.s1
+    1, // llvm.hexagon.M2.mpyd.rnd.ll.s0
+    1, // llvm.hexagon.M2.mpyd.rnd.ll.s1
+    1, // llvm.hexagon.M2.mpyi
+    1, // llvm.hexagon.M2.mpysmi
+    1, // llvm.hexagon.M2.mpysu.up
+    1, // llvm.hexagon.M2.mpyu.acc.hh.s0
+    1, // llvm.hexagon.M2.mpyu.acc.hh.s1
+    1, // llvm.hexagon.M2.mpyu.acc.hl.s0
+    1, // llvm.hexagon.M2.mpyu.acc.hl.s1
+    1, // llvm.hexagon.M2.mpyu.acc.lh.s0
+    1, // llvm.hexagon.M2.mpyu.acc.lh.s1
+    1, // llvm.hexagon.M2.mpyu.acc.ll.s0
+    1, // llvm.hexagon.M2.mpyu.acc.ll.s1
+    1, // llvm.hexagon.M2.mpyu.hh.s0
+    1, // llvm.hexagon.M2.mpyu.hh.s1
+    1, // llvm.hexagon.M2.mpyu.hl.s0
+    1, // llvm.hexagon.M2.mpyu.hl.s1
+    1, // llvm.hexagon.M2.mpyu.lh.s0
+    1, // llvm.hexagon.M2.mpyu.lh.s1
+    1, // llvm.hexagon.M2.mpyu.ll.s0
+    1, // llvm.hexagon.M2.mpyu.ll.s1
+    1, // llvm.hexagon.M2.mpyu.nac.hh.s0
+    1, // llvm.hexagon.M2.mpyu.nac.hh.s1
+    1, // llvm.hexagon.M2.mpyu.nac.hl.s0
+    1, // llvm.hexagon.M2.mpyu.nac.hl.s1
+    1, // llvm.hexagon.M2.mpyu.nac.lh.s0
+    1, // llvm.hexagon.M2.mpyu.nac.lh.s1
+    1, // llvm.hexagon.M2.mpyu.nac.ll.s0
+    1, // llvm.hexagon.M2.mpyu.nac.ll.s1
+    1, // llvm.hexagon.M2.mpyu.up
+    1, // llvm.hexagon.M2.mpyud.acc.hh.s0
+    1, // llvm.hexagon.M2.mpyud.acc.hh.s1
+    1, // llvm.hexagon.M2.mpyud.acc.hl.s0
+    1, // llvm.hexagon.M2.mpyud.acc.hl.s1
+    1, // llvm.hexagon.M2.mpyud.acc.lh.s0
+    1, // llvm.hexagon.M2.mpyud.acc.lh.s1
+    1, // llvm.hexagon.M2.mpyud.acc.ll.s0
+    1, // llvm.hexagon.M2.mpyud.acc.ll.s1
+    1, // llvm.hexagon.M2.mpyud.hh.s0
+    1, // llvm.hexagon.M2.mpyud.hh.s1
+    1, // llvm.hexagon.M2.mpyud.hl.s0
+    1, // llvm.hexagon.M2.mpyud.hl.s1
+    1, // llvm.hexagon.M2.mpyud.lh.s0
+    1, // llvm.hexagon.M2.mpyud.lh.s1
+    1, // llvm.hexagon.M2.mpyud.ll.s0
+    1, // llvm.hexagon.M2.mpyud.ll.s1
+    1, // llvm.hexagon.M2.mpyud.nac.hh.s0
+    1, // llvm.hexagon.M2.mpyud.nac.hh.s1
+    1, // llvm.hexagon.M2.mpyud.nac.hl.s0
+    1, // llvm.hexagon.M2.mpyud.nac.hl.s1
+    1, // llvm.hexagon.M2.mpyud.nac.lh.s0
+    1, // llvm.hexagon.M2.mpyud.nac.lh.s1
+    1, // llvm.hexagon.M2.mpyud.nac.ll.s0
+    1, // llvm.hexagon.M2.mpyud.nac.ll.s1
+    1, // llvm.hexagon.M2.mpyui
+    1, // llvm.hexagon.M2.nacci
+    1, // llvm.hexagon.M2.naccii
+    1, // llvm.hexagon.M2.subacc
+    1, // llvm.hexagon.M2.vabsdiffh
+    1, // llvm.hexagon.M2.vabsdiffw
+    1, // llvm.hexagon.M2.vcmac.s0.sat.i
+    1, // llvm.hexagon.M2.vcmac.s0.sat.r
+    1, // llvm.hexagon.M2.vcmpy.s0.sat.i
+    1, // llvm.hexagon.M2.vcmpy.s0.sat.r
+    1, // llvm.hexagon.M2.vcmpy.s1.sat.i
+    1, // llvm.hexagon.M2.vcmpy.s1.sat.r
+    1, // llvm.hexagon.M2.vdmacs.s0
+    1, // llvm.hexagon.M2.vdmacs.s1
+    1, // llvm.hexagon.M2.vdmpyrs.s0
+    1, // llvm.hexagon.M2.vdmpyrs.s1
+    1, // llvm.hexagon.M2.vdmpys.s0
+    1, // llvm.hexagon.M2.vdmpys.s1
+    1, // llvm.hexagon.M2.vmac2
+    1, // llvm.hexagon.M2.vmac2es
+    1, // llvm.hexagon.M2.vmac2es.s0
+    1, // llvm.hexagon.M2.vmac2es.s1
+    1, // llvm.hexagon.M2.vmac2s.s0
+    1, // llvm.hexagon.M2.vmac2s.s1
+    1, // llvm.hexagon.M2.vmac2su.s0
+    1, // llvm.hexagon.M2.vmac2su.s1
+    1, // llvm.hexagon.M2.vmpy2es.s0
+    1, // llvm.hexagon.M2.vmpy2es.s1
+    1, // llvm.hexagon.M2.vmpy2s.s0
+    1, // llvm.hexagon.M2.vmpy2s.s0pack
+    1, // llvm.hexagon.M2.vmpy2s.s1
+    1, // llvm.hexagon.M2.vmpy2s.s1pack
+    1, // llvm.hexagon.M2.vmpy2su.s0
+    1, // llvm.hexagon.M2.vmpy2su.s1
+    1, // llvm.hexagon.M2.vraddh
+    1, // llvm.hexagon.M2.vradduh
+    1, // llvm.hexagon.M2.vrcmaci.s0
+    1, // llvm.hexagon.M2.vrcmaci.s0c
+    1, // llvm.hexagon.M2.vrcmacr.s0
+    1, // llvm.hexagon.M2.vrcmacr.s0c
+    1, // llvm.hexagon.M2.vrcmpyi.s0
+    1, // llvm.hexagon.M2.vrcmpyi.s0c
+    1, // llvm.hexagon.M2.vrcmpyr.s0
+    1, // llvm.hexagon.M2.vrcmpyr.s0c
+    1, // llvm.hexagon.M2.vrcmpys.acc.s1
+    1, // llvm.hexagon.M2.vrcmpys.s1
+    1, // llvm.hexagon.M2.vrcmpys.s1rp
+    1, // llvm.hexagon.M2.vrmac.s0
+    1, // llvm.hexagon.M2.vrmpy.s0
+    1, // llvm.hexagon.M2.xor.xacc
+    1, // llvm.hexagon.M4.and.and
+    1, // llvm.hexagon.M4.and.andn
+    1, // llvm.hexagon.M4.and.or
+    1, // llvm.hexagon.M4.and.xor
+    1, // llvm.hexagon.M4.cmpyi.wh
+    1, // llvm.hexagon.M4.cmpyi.whc
+    1, // llvm.hexagon.M4.cmpyr.wh
+    1, // llvm.hexagon.M4.cmpyr.whc
+    1, // llvm.hexagon.M4.mac.up.s1.sat
+    1, // llvm.hexagon.M4.mpyri.addi
+    1, // llvm.hexagon.M4.mpyri.addr
+    1, // llvm.hexagon.M4.mpyri.addr.u2
+    1, // llvm.hexagon.M4.mpyrr.addi
+    1, // llvm.hexagon.M4.mpyrr.addr
+    1, // llvm.hexagon.M4.nac.up.s1.sat
+    1, // llvm.hexagon.M4.or.and
+    1, // llvm.hexagon.M4.or.andn
+    1, // llvm.hexagon.M4.or.or
+    1, // llvm.hexagon.M4.or.xor
+    1, // llvm.hexagon.M4.pmpyw
+    1, // llvm.hexagon.M4.pmpyw.acc
+    1, // llvm.hexagon.M4.vpmpyh
+    1, // llvm.hexagon.M4.vpmpyh.acc
+    1, // llvm.hexagon.M4.vrmpyeh.acc.s0
+    1, // llvm.hexagon.M4.vrmpyeh.acc.s1
+    1, // llvm.hexagon.M4.vrmpyeh.s0
+    1, // llvm.hexagon.M4.vrmpyeh.s1
+    1, // llvm.hexagon.M4.vrmpyoh.acc.s0
+    1, // llvm.hexagon.M4.vrmpyoh.acc.s1
+    1, // llvm.hexagon.M4.vrmpyoh.s0
+    1, // llvm.hexagon.M4.vrmpyoh.s1
+    1, // llvm.hexagon.M4.xor.and
+    1, // llvm.hexagon.M4.xor.andn
+    1, // llvm.hexagon.M4.xor.or
+    1, // llvm.hexagon.M4.xor.xacc
+    1, // llvm.hexagon.M5.vdmacbsu
+    1, // llvm.hexagon.M5.vdmpybsu
+    1, // llvm.hexagon.M5.vmacbsu
+    1, // llvm.hexagon.M5.vmacbuu
+    1, // llvm.hexagon.M5.vmpybsu
+    1, // llvm.hexagon.M5.vmpybuu
+    1, // llvm.hexagon.M5.vrmacbsu
+    1, // llvm.hexagon.M5.vrmacbuu
+    1, // llvm.hexagon.M5.vrmpybsu
+    1, // llvm.hexagon.M5.vrmpybuu
+    1, // llvm.hexagon.M6.vabsdiffb
+    1, // llvm.hexagon.M6.vabsdiffub
+    1, // llvm.hexagon.S2.addasl.rrri
+    1, // llvm.hexagon.S2.asl.i.p
+    1, // llvm.hexagon.S2.asl.i.p.acc
+    1, // llvm.hexagon.S2.asl.i.p.and
+    1, // llvm.hexagon.S2.asl.i.p.nac
+    1, // llvm.hexagon.S2.asl.i.p.or
+    1, // llvm.hexagon.S2.asl.i.p.xacc
+    1, // llvm.hexagon.S2.asl.i.r
+    1, // llvm.hexagon.S2.asl.i.r.acc
+    1, // llvm.hexagon.S2.asl.i.r.and
+    1, // llvm.hexagon.S2.asl.i.r.nac
+    1, // llvm.hexagon.S2.asl.i.r.or
+    1, // llvm.hexagon.S2.asl.i.r.sat
+    1, // llvm.hexagon.S2.asl.i.r.xacc
+    1, // llvm.hexagon.S2.asl.i.vh
+    1, // llvm.hexagon.S2.asl.i.vw
+    1, // llvm.hexagon.S2.asl.r.p
+    1, // llvm.hexagon.S2.asl.r.p.acc
+    1, // llvm.hexagon.S2.asl.r.p.and
+    1, // llvm.hexagon.S2.asl.r.p.nac
+    1, // llvm.hexagon.S2.asl.r.p.or
+    1, // llvm.hexagon.S2.asl.r.p.xor
+    1, // llvm.hexagon.S2.asl.r.r
+    1, // llvm.hexagon.S2.asl.r.r.acc
+    1, // llvm.hexagon.S2.asl.r.r.and
+    1, // llvm.hexagon.S2.asl.r.r.nac
+    1, // llvm.hexagon.S2.asl.r.r.or
+    1, // llvm.hexagon.S2.asl.r.r.sat
+    1, // llvm.hexagon.S2.asl.r.vh
+    1, // llvm.hexagon.S2.asl.r.vw
+    1, // llvm.hexagon.S2.asr.i.p
+    1, // llvm.hexagon.S2.asr.i.p.acc
+    1, // llvm.hexagon.S2.asr.i.p.and
+    1, // llvm.hexagon.S2.asr.i.p.nac
+    1, // llvm.hexagon.S2.asr.i.p.or
+    1, // llvm.hexagon.S2.asr.i.p.rnd
+    1, // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
+    1, // llvm.hexagon.S2.asr.i.r
+    1, // llvm.hexagon.S2.asr.i.r.acc
+    1, // llvm.hexagon.S2.asr.i.r.and
+    1, // llvm.hexagon.S2.asr.i.r.nac
+    1, // llvm.hexagon.S2.asr.i.r.or
+    1, // llvm.hexagon.S2.asr.i.r.rnd
+    1, // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
+    1, // llvm.hexagon.S2.asr.i.svw.trun
+    1, // llvm.hexagon.S2.asr.i.vh
+    1, // llvm.hexagon.S2.asr.i.vw
+    1, // llvm.hexagon.S2.asr.r.p
+    1, // llvm.hexagon.S2.asr.r.p.acc
+    1, // llvm.hexagon.S2.asr.r.p.and
+    1, // llvm.hexagon.S2.asr.r.p.nac
+    1, // llvm.hexagon.S2.asr.r.p.or
+    1, // llvm.hexagon.S2.asr.r.p.xor
+    1, // llvm.hexagon.S2.asr.r.r
+    1, // llvm.hexagon.S2.asr.r.r.acc
+    1, // llvm.hexagon.S2.asr.r.r.and
+    1, // llvm.hexagon.S2.asr.r.r.nac
+    1, // llvm.hexagon.S2.asr.r.r.or
+    1, // llvm.hexagon.S2.asr.r.r.sat
+    1, // llvm.hexagon.S2.asr.r.svw.trun
+    1, // llvm.hexagon.S2.asr.r.vh
+    1, // llvm.hexagon.S2.asr.r.vw
+    1, // llvm.hexagon.S2.brev
+    1, // llvm.hexagon.S2.brevp
+    1, // llvm.hexagon.S2.cabacencbin
+    1, // llvm.hexagon.S2.cl0
+    1, // llvm.hexagon.S2.cl0p
+    1, // llvm.hexagon.S2.cl1
+    1, // llvm.hexagon.S2.cl1p
+    1, // llvm.hexagon.S2.clb
+    1, // llvm.hexagon.S2.clbnorm
+    1, // llvm.hexagon.S2.clbp
+    1, // llvm.hexagon.S2.clrbit.i
+    1, // llvm.hexagon.S2.clrbit.r
+    1, // llvm.hexagon.S2.ct0
+    1, // llvm.hexagon.S2.ct0p
+    1, // llvm.hexagon.S2.ct1
+    1, // llvm.hexagon.S2.ct1p
+    1, // llvm.hexagon.S2.deinterleave
+    1, // llvm.hexagon.S2.extractu
+    1, // llvm.hexagon.S2.extractu.rp
+    1, // llvm.hexagon.S2.extractup
+    1, // llvm.hexagon.S2.extractup.rp
+    1, // llvm.hexagon.S2.insert
+    1, // llvm.hexagon.S2.insert.rp
+    1, // llvm.hexagon.S2.insertp
+    1, // llvm.hexagon.S2.insertp.rp
+    1, // llvm.hexagon.S2.interleave
+    1, // llvm.hexagon.S2.lfsp
+    1, // llvm.hexagon.S2.lsl.r.p
+    1, // llvm.hexagon.S2.lsl.r.p.acc
+    1, // llvm.hexagon.S2.lsl.r.p.and
+    1, // llvm.hexagon.S2.lsl.r.p.nac
+    1, // llvm.hexagon.S2.lsl.r.p.or
+    1, // llvm.hexagon.S2.lsl.r.p.xor
+    1, // llvm.hexagon.S2.lsl.r.r
+    1, // llvm.hexagon.S2.lsl.r.r.acc
+    1, // llvm.hexagon.S2.lsl.r.r.and
+    1, // llvm.hexagon.S2.lsl.r.r.nac
+    1, // llvm.hexagon.S2.lsl.r.r.or
+    1, // llvm.hexagon.S2.lsl.r.vh
+    1, // llvm.hexagon.S2.lsl.r.vw
+    1, // llvm.hexagon.S2.lsr.i.p
+    1, // llvm.hexagon.S2.lsr.i.p.acc
+    1, // llvm.hexagon.S2.lsr.i.p.and
+    1, // llvm.hexagon.S2.lsr.i.p.nac
+    1, // llvm.hexagon.S2.lsr.i.p.or
+    1, // llvm.hexagon.S2.lsr.i.p.xacc
+    1, // llvm.hexagon.S2.lsr.i.r
+    1, // llvm.hexagon.S2.lsr.i.r.acc
+    1, // llvm.hexagon.S2.lsr.i.r.and
+    1, // llvm.hexagon.S2.lsr.i.r.nac
+    1, // llvm.hexagon.S2.lsr.i.r.or
+    1, // llvm.hexagon.S2.lsr.i.r.xacc
+    1, // llvm.hexagon.S2.lsr.i.vh
+    1, // llvm.hexagon.S2.lsr.i.vw
+    1, // llvm.hexagon.S2.lsr.r.p
+    1, // llvm.hexagon.S2.lsr.r.p.acc
+    1, // llvm.hexagon.S2.lsr.r.p.and
+    1, // llvm.hexagon.S2.lsr.r.p.nac
+    1, // llvm.hexagon.S2.lsr.r.p.or
+    1, // llvm.hexagon.S2.lsr.r.p.xor
+    1, // llvm.hexagon.S2.lsr.r.r
+    1, // llvm.hexagon.S2.lsr.r.r.acc
+    1, // llvm.hexagon.S2.lsr.r.r.and
+    1, // llvm.hexagon.S2.lsr.r.r.nac
+    1, // llvm.hexagon.S2.lsr.r.r.or
+    1, // llvm.hexagon.S2.lsr.r.vh
+    1, // llvm.hexagon.S2.lsr.r.vw
+    1, // llvm.hexagon.S2.packhl
+    1, // llvm.hexagon.S2.parityp
+    1, // llvm.hexagon.S2.setbit.i
+    1, // llvm.hexagon.S2.setbit.r
+    1, // llvm.hexagon.S2.shuffeb
+    1, // llvm.hexagon.S2.shuffeh
+    1, // llvm.hexagon.S2.shuffob
+    1, // llvm.hexagon.S2.shuffoh
+    34, // llvm.hexagon.S2.storerb.pbr
+    31, // llvm.hexagon.S2.storerb.pci
+    30, // llvm.hexagon.S2.storerb.pcr
+    34, // llvm.hexagon.S2.storerd.pbr
+    31, // llvm.hexagon.S2.storerd.pci
+    30, // llvm.hexagon.S2.storerd.pcr
+    34, // llvm.hexagon.S2.storerf.pbr
+    31, // llvm.hexagon.S2.storerf.pci
+    30, // llvm.hexagon.S2.storerf.pcr
+    34, // llvm.hexagon.S2.storerh.pbr
+    31, // llvm.hexagon.S2.storerh.pci
+    30, // llvm.hexagon.S2.storerh.pcr
+    34, // llvm.hexagon.S2.storeri.pbr
+    31, // llvm.hexagon.S2.storeri.pci
+    30, // llvm.hexagon.S2.storeri.pcr
+    18, // llvm.hexagon.S2.storew.locked
+    1, // llvm.hexagon.S2.svsathb
+    1, // llvm.hexagon.S2.svsathub
+    1, // llvm.hexagon.S2.tableidxb.goodsyntax
+    1, // llvm.hexagon.S2.tableidxd.goodsyntax
+    1, // llvm.hexagon.S2.tableidxh.goodsyntax
+    1, // llvm.hexagon.S2.tableidxw.goodsyntax
+    1, // llvm.hexagon.S2.togglebit.i
+    1, // llvm.hexagon.S2.togglebit.r
+    1, // llvm.hexagon.S2.tstbit.i
+    1, // llvm.hexagon.S2.tstbit.r
+    1, // llvm.hexagon.S2.valignib
+    1, // llvm.hexagon.S2.valignrb
+    1, // llvm.hexagon.S2.vcnegh
+    1, // llvm.hexagon.S2.vcrotate
+    1, // llvm.hexagon.S2.vrcnegh
+    1, // llvm.hexagon.S2.vrndpackwh
+    1, // llvm.hexagon.S2.vrndpackwhs
+    1, // llvm.hexagon.S2.vsathb
+    1, // llvm.hexagon.S2.vsathb.nopack
+    1, // llvm.hexagon.S2.vsathub
+    1, // llvm.hexagon.S2.vsathub.nopack
+    1, // llvm.hexagon.S2.vsatwh
+    1, // llvm.hexagon.S2.vsatwh.nopack
+    1, // llvm.hexagon.S2.vsatwuh
+    1, // llvm.hexagon.S2.vsatwuh.nopack
+    1, // llvm.hexagon.S2.vsplatrb
+    1, // llvm.hexagon.S2.vsplatrh
+    1, // llvm.hexagon.S2.vspliceib
+    1, // llvm.hexagon.S2.vsplicerb
+    1, // llvm.hexagon.S2.vsxtbh
+    1, // llvm.hexagon.S2.vsxthw
+    1, // llvm.hexagon.S2.vtrunehb
+    1, // llvm.hexagon.S2.vtrunewh
+    1, // llvm.hexagon.S2.vtrunohb
+    1, // llvm.hexagon.S2.vtrunowh
+    1, // llvm.hexagon.S2.vzxtbh
+    1, // llvm.hexagon.S2.vzxthw
+    1, // llvm.hexagon.S4.addaddi
+    1, // llvm.hexagon.S4.addi.asl.ri
+    1, // llvm.hexagon.S4.addi.lsr.ri
+    1, // llvm.hexagon.S4.andi.asl.ri
+    1, // llvm.hexagon.S4.andi.lsr.ri
+    1, // llvm.hexagon.S4.clbaddi
+    1, // llvm.hexagon.S4.clbpaddi
+    1, // llvm.hexagon.S4.clbpnorm
+    1, // llvm.hexagon.S4.extract
+    1, // llvm.hexagon.S4.extract.rp
+    1, // llvm.hexagon.S4.extractp
+    1, // llvm.hexagon.S4.extractp.rp
+    1, // llvm.hexagon.S4.lsli
+    1, // llvm.hexagon.S4.ntstbit.i
+    1, // llvm.hexagon.S4.ntstbit.r
+    1, // llvm.hexagon.S4.or.andi
+    1, // llvm.hexagon.S4.or.andix
+    1, // llvm.hexagon.S4.or.ori
+    1, // llvm.hexagon.S4.ori.asl.ri
+    1, // llvm.hexagon.S4.ori.lsr.ri
+    1, // llvm.hexagon.S4.parity
+    18, // llvm.hexagon.S4.stored.locked
+    1, // llvm.hexagon.S4.subaddi
+    1, // llvm.hexagon.S4.subi.asl.ri
+    1, // llvm.hexagon.S4.subi.lsr.ri
+    1, // llvm.hexagon.S4.vrcrotate
+    1, // llvm.hexagon.S4.vrcrotate.acc
+    1, // llvm.hexagon.S4.vxaddsubh
+    1, // llvm.hexagon.S4.vxaddsubhr
+    1, // llvm.hexagon.S4.vxaddsubw
+    1, // llvm.hexagon.S4.vxsubaddh
+    1, // llvm.hexagon.S4.vxsubaddhr
+    1, // llvm.hexagon.S4.vxsubaddw
+    1, // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
+    1, // llvm.hexagon.S5.asrhub.sat
+    1, // llvm.hexagon.S5.popcountp
+    1, // llvm.hexagon.S5.vasrhrnd.goodsyntax
+    1, // llvm.hexagon.S6.rol.i.p
+    1, // llvm.hexagon.S6.rol.i.p.acc
+    1, // llvm.hexagon.S6.rol.i.p.and
+    1, // llvm.hexagon.S6.rol.i.p.nac
+    1, // llvm.hexagon.S6.rol.i.p.or
+    1, // llvm.hexagon.S6.rol.i.p.xacc
+    1, // llvm.hexagon.S6.rol.i.r
+    1, // llvm.hexagon.S6.rol.i.r.acc
+    1, // llvm.hexagon.S6.rol.i.r.and
+    1, // llvm.hexagon.S6.rol.i.r.nac
+    1, // llvm.hexagon.S6.rol.i.r.or
+    1, // llvm.hexagon.S6.rol.i.r.xacc
+    1, // llvm.hexagon.S6.vsplatrbp
+    1, // llvm.hexagon.S6.vtrunehb.ppp
+    1, // llvm.hexagon.S6.vtrunohb.ppp
+    1, // llvm.hexagon.V6.extractw
+    1, // llvm.hexagon.V6.extractw.128B
+    1, // llvm.hexagon.V6.hi
+    1, // llvm.hexagon.V6.hi.128B
+    1, // llvm.hexagon.V6.lo
+    1, // llvm.hexagon.V6.lo.128B
+    1, // llvm.hexagon.V6.lvsplatb
+    1, // llvm.hexagon.V6.lvsplatb.128B
+    1, // llvm.hexagon.V6.lvsplath
+    1, // llvm.hexagon.V6.lvsplath.128B
+    1, // llvm.hexagon.V6.lvsplatw
+    1, // llvm.hexagon.V6.lvsplatw.128B
+    1, // llvm.hexagon.V6.pred.and
+    1, // llvm.hexagon.V6.pred.and.128B
+    1, // llvm.hexagon.V6.pred.and.n
+    1, // llvm.hexagon.V6.pred.and.n.128B
+    1, // llvm.hexagon.V6.pred.not
+    1, // llvm.hexagon.V6.pred.not.128B
+    1, // llvm.hexagon.V6.pred.or
+    1, // llvm.hexagon.V6.pred.or.128B
+    1, // llvm.hexagon.V6.pred.or.n
+    1, // llvm.hexagon.V6.pred.or.n.128B
+    1, // llvm.hexagon.V6.pred.scalar2
+    1, // llvm.hexagon.V6.pred.scalar2.128B
+    1, // llvm.hexagon.V6.pred.scalar2v2
+    1, // llvm.hexagon.V6.pred.scalar2v2.128B
+    1, // llvm.hexagon.V6.pred.xor
+    1, // llvm.hexagon.V6.pred.xor.128B
+    1, // llvm.hexagon.V6.shuffeqh
+    1, // llvm.hexagon.V6.shuffeqh.128B
+    1, // llvm.hexagon.V6.shuffeqw
+    1, // llvm.hexagon.V6.shuffeqw.128B
+    22, // llvm.hexagon.V6.vS32b.nqpred.ai
+    22, // llvm.hexagon.V6.vS32b.nqpred.ai.128B
+    22, // llvm.hexagon.V6.vS32b.nt.nqpred.ai
+    22, // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
+    22, // llvm.hexagon.V6.vS32b.nt.qpred.ai
+    22, // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
+    22, // llvm.hexagon.V6.vS32b.qpred.ai
+    22, // llvm.hexagon.V6.vS32b.qpred.ai.128B
+    1, // llvm.hexagon.V6.vabsb
+    1, // llvm.hexagon.V6.vabsb.128B
+    1, // llvm.hexagon.V6.vabsb.sat
+    1, // llvm.hexagon.V6.vabsb.sat.128B
+    1, // llvm.hexagon.V6.vabsdiffh
+    1, // llvm.hexagon.V6.vabsdiffh.128B
+    1, // llvm.hexagon.V6.vabsdiffub
+    1, // llvm.hexagon.V6.vabsdiffub.128B
+    1, // llvm.hexagon.V6.vabsdiffuh
+    1, // llvm.hexagon.V6.vabsdiffuh.128B
+    1, // llvm.hexagon.V6.vabsdiffw
+    1, // llvm.hexagon.V6.vabsdiffw.128B
+    1, // llvm.hexagon.V6.vabsh
+    1, // llvm.hexagon.V6.vabsh.128B
+    1, // llvm.hexagon.V6.vabsh.sat
+    1, // llvm.hexagon.V6.vabsh.sat.128B
+    1, // llvm.hexagon.V6.vabsw
+    1, // llvm.hexagon.V6.vabsw.128B
+    1, // llvm.hexagon.V6.vabsw.sat
+    1, // llvm.hexagon.V6.vabsw.sat.128B
+    1, // llvm.hexagon.V6.vaddb
+    1, // llvm.hexagon.V6.vaddb.128B
+    1, // llvm.hexagon.V6.vaddb.dv
+    1, // llvm.hexagon.V6.vaddb.dv.128B
+    1, // llvm.hexagon.V6.vaddbnq
+    1, // llvm.hexagon.V6.vaddbnq.128B
+    1, // llvm.hexagon.V6.vaddbq
+    1, // llvm.hexagon.V6.vaddbq.128B
+    1, // llvm.hexagon.V6.vaddbsat
+    1, // llvm.hexagon.V6.vaddbsat.128B
+    1, // llvm.hexagon.V6.vaddbsat.dv
+    1, // llvm.hexagon.V6.vaddbsat.dv.128B
+    1, // llvm.hexagon.V6.vaddcarry
+    1, // llvm.hexagon.V6.vaddcarry.128B
+    1, // llvm.hexagon.V6.vaddclbh
+    1, // llvm.hexagon.V6.vaddclbh.128B
+    1, // llvm.hexagon.V6.vaddclbw
+    1, // llvm.hexagon.V6.vaddclbw.128B
+    1, // llvm.hexagon.V6.vaddh
+    1, // llvm.hexagon.V6.vaddh.128B
+    1, // llvm.hexagon.V6.vaddh.dv
+    1, // llvm.hexagon.V6.vaddh.dv.128B
+    1, // llvm.hexagon.V6.vaddhnq
+    1, // llvm.hexagon.V6.vaddhnq.128B
+    1, // llvm.hexagon.V6.vaddhq
+    1, // llvm.hexagon.V6.vaddhq.128B
+    1, // llvm.hexagon.V6.vaddhsat
+    1, // llvm.hexagon.V6.vaddhsat.128B
+    1, // llvm.hexagon.V6.vaddhsat.dv
+    1, // llvm.hexagon.V6.vaddhsat.dv.128B
+    1, // llvm.hexagon.V6.vaddhw
+    1, // llvm.hexagon.V6.vaddhw.128B
+    1, // llvm.hexagon.V6.vaddhw.acc
+    1, // llvm.hexagon.V6.vaddhw.acc.128B
+    1, // llvm.hexagon.V6.vaddubh
+    1, // llvm.hexagon.V6.vaddubh.128B
+    1, // llvm.hexagon.V6.vaddubh.acc
+    1, // llvm.hexagon.V6.vaddubh.acc.128B
+    1, // llvm.hexagon.V6.vaddubsat
+    1, // llvm.hexagon.V6.vaddubsat.128B
+    1, // llvm.hexagon.V6.vaddubsat.dv
+    1, // llvm.hexagon.V6.vaddubsat.dv.128B
+    1, // llvm.hexagon.V6.vaddububb.sat
+    1, // llvm.hexagon.V6.vaddububb.sat.128B
+    1, // llvm.hexagon.V6.vadduhsat
+    1, // llvm.hexagon.V6.vadduhsat.128B
+    1, // llvm.hexagon.V6.vadduhsat.dv
+    1, // llvm.hexagon.V6.vadduhsat.dv.128B
+    1, // llvm.hexagon.V6.vadduhw
+    1, // llvm.hexagon.V6.vadduhw.128B
+    1, // llvm.hexagon.V6.vadduhw.acc
+    1, // llvm.hexagon.V6.vadduhw.acc.128B
+    1, // llvm.hexagon.V6.vadduwsat
+    1, // llvm.hexagon.V6.vadduwsat.128B
+    1, // llvm.hexagon.V6.vadduwsat.dv
+    1, // llvm.hexagon.V6.vadduwsat.dv.128B
+    1, // llvm.hexagon.V6.vaddw
+    1, // llvm.hexagon.V6.vaddw.128B
+    1, // llvm.hexagon.V6.vaddw.dv
+    1, // llvm.hexagon.V6.vaddw.dv.128B
+    1, // llvm.hexagon.V6.vaddwnq
+    1, // llvm.hexagon.V6.vaddwnq.128B
+    1, // llvm.hexagon.V6.vaddwq
+    1, // llvm.hexagon.V6.vaddwq.128B
+    1, // llvm.hexagon.V6.vaddwsat
+    1, // llvm.hexagon.V6.vaddwsat.128B
+    1, // llvm.hexagon.V6.vaddwsat.dv
+    1, // llvm.hexagon.V6.vaddwsat.dv.128B
+    1, // llvm.hexagon.V6.valignb
+    1, // llvm.hexagon.V6.valignb.128B
+    1, // llvm.hexagon.V6.valignbi
+    1, // llvm.hexagon.V6.valignbi.128B
+    1, // llvm.hexagon.V6.vand
+    1, // llvm.hexagon.V6.vand.128B
+    1, // llvm.hexagon.V6.vandnqrt
+    1, // llvm.hexagon.V6.vandnqrt.128B
+    1, // llvm.hexagon.V6.vandnqrt.acc
+    1, // llvm.hexagon.V6.vandnqrt.acc.128B
+    1, // llvm.hexagon.V6.vandqrt
+    1, // llvm.hexagon.V6.vandqrt.128B
+    1, // llvm.hexagon.V6.vandqrt.acc
+    1, // llvm.hexagon.V6.vandqrt.acc.128B
+    1, // llvm.hexagon.V6.vandvnqv
+    1, // llvm.hexagon.V6.vandvnqv.128B
+    1, // llvm.hexagon.V6.vandvqv
+    1, // llvm.hexagon.V6.vandvqv.128B
+    1, // llvm.hexagon.V6.vandvrt
+    1, // llvm.hexagon.V6.vandvrt.128B
+    1, // llvm.hexagon.V6.vandvrt.acc
+    1, // llvm.hexagon.V6.vandvrt.acc.128B
+    1, // llvm.hexagon.V6.vaslh
+    1, // llvm.hexagon.V6.vaslh.128B
+    1, // llvm.hexagon.V6.vaslh.acc
+    1, // llvm.hexagon.V6.vaslh.acc.128B
+    1, // llvm.hexagon.V6.vaslhv
+    1, // llvm.hexagon.V6.vaslhv.128B
+    1, // llvm.hexagon.V6.vaslw
+    1, // llvm.hexagon.V6.vaslw.128B
+    1, // llvm.hexagon.V6.vaslw.acc
+    1, // llvm.hexagon.V6.vaslw.acc.128B
+    1, // llvm.hexagon.V6.vaslwv
+    1, // llvm.hexagon.V6.vaslwv.128B
+    1, // llvm.hexagon.V6.vasrh
+    1, // llvm.hexagon.V6.vasrh.128B
+    1, // llvm.hexagon.V6.vasrh.acc
+    1, // llvm.hexagon.V6.vasrh.acc.128B
+    1, // llvm.hexagon.V6.vasrhbrndsat
+    1, // llvm.hexagon.V6.vasrhbrndsat.128B
+    1, // llvm.hexagon.V6.vasrhbsat
+    1, // llvm.hexagon.V6.vasrhbsat.128B
+    1, // llvm.hexagon.V6.vasrhubrndsat
+    1, // llvm.hexagon.V6.vasrhubrndsat.128B
+    1, // llvm.hexagon.V6.vasrhubsat
+    1, // llvm.hexagon.V6.vasrhubsat.128B
+    1, // llvm.hexagon.V6.vasrhv
+    1, // llvm.hexagon.V6.vasrhv.128B
+    1, // llvm.hexagon.V6.vasruhubrndsat
+    1, // llvm.hexagon.V6.vasruhubrndsat.128B
+    1, // llvm.hexagon.V6.vasruhubsat
+    1, // llvm.hexagon.V6.vasruhubsat.128B
+    1, // llvm.hexagon.V6.vasruwuhrndsat
+    1, // llvm.hexagon.V6.vasruwuhrndsat.128B
+    1, // llvm.hexagon.V6.vasruwuhsat
+    1, // llvm.hexagon.V6.vasruwuhsat.128B
+    1, // llvm.hexagon.V6.vasrw
+    1, // llvm.hexagon.V6.vasrw.128B
+    1, // llvm.hexagon.V6.vasrw.acc
+    1, // llvm.hexagon.V6.vasrw.acc.128B
+    1, // llvm.hexagon.V6.vasrwh
+    1, // llvm.hexagon.V6.vasrwh.128B
+    1, // llvm.hexagon.V6.vasrwhrndsat
+    1, // llvm.hexagon.V6.vasrwhrndsat.128B
+    1, // llvm.hexagon.V6.vasrwhsat
+    1, // llvm.hexagon.V6.vasrwhsat.128B
+    1, // llvm.hexagon.V6.vasrwuhrndsat
+    1, // llvm.hexagon.V6.vasrwuhrndsat.128B
+    1, // llvm.hexagon.V6.vasrwuhsat
+    1, // llvm.hexagon.V6.vasrwuhsat.128B
+    1, // llvm.hexagon.V6.vasrwv
+    1, // llvm.hexagon.V6.vasrwv.128B
+    1, // llvm.hexagon.V6.vassign
+    1, // llvm.hexagon.V6.vassign.128B
+    1, // llvm.hexagon.V6.vassignp
+    1, // llvm.hexagon.V6.vassignp.128B
+    1, // llvm.hexagon.V6.vavgb
+    1, // llvm.hexagon.V6.vavgb.128B
+    1, // llvm.hexagon.V6.vavgbrnd
+    1, // llvm.hexagon.V6.vavgbrnd.128B
+    1, // llvm.hexagon.V6.vavgh
+    1, // llvm.hexagon.V6.vavgh.128B
+    1, // llvm.hexagon.V6.vavghrnd
+    1, // llvm.hexagon.V6.vavghrnd.128B
+    1, // llvm.hexagon.V6.vavgub
+    1, // llvm.hexagon.V6.vavgub.128B
+    1, // llvm.hexagon.V6.vavgubrnd
+    1, // llvm.hexagon.V6.vavgubrnd.128B
+    1, // llvm.hexagon.V6.vavguh
+    1, // llvm.hexagon.V6.vavguh.128B
+    1, // llvm.hexagon.V6.vavguhrnd
+    1, // llvm.hexagon.V6.vavguhrnd.128B
+    1, // llvm.hexagon.V6.vavguw
+    1, // llvm.hexagon.V6.vavguw.128B
+    1, // llvm.hexagon.V6.vavguwrnd
+    1, // llvm.hexagon.V6.vavguwrnd.128B
+    1, // llvm.hexagon.V6.vavgw
+    1, // llvm.hexagon.V6.vavgw.128B
+    1, // llvm.hexagon.V6.vavgwrnd
+    1, // llvm.hexagon.V6.vavgwrnd.128B
+    1, // llvm.hexagon.V6.vcl0h
+    1, // llvm.hexagon.V6.vcl0h.128B
+    1, // llvm.hexagon.V6.vcl0w
+    1, // llvm.hexagon.V6.vcl0w.128B
+    1, // llvm.hexagon.V6.vcombine
+    1, // llvm.hexagon.V6.vcombine.128B
+    1, // llvm.hexagon.V6.vd0
+    1, // llvm.hexagon.V6.vd0.128B
+    1, // llvm.hexagon.V6.vdd0
+    1, // llvm.hexagon.V6.vdd0.128B
+    1, // llvm.hexagon.V6.vdealb
+    1, // llvm.hexagon.V6.vdealb.128B
+    1, // llvm.hexagon.V6.vdealb4w
+    1, // llvm.hexagon.V6.vdealb4w.128B
+    1, // llvm.hexagon.V6.vdealh
+    1, // llvm.hexagon.V6.vdealh.128B
+    1, // llvm.hexagon.V6.vdealvdd
+    1, // llvm.hexagon.V6.vdealvdd.128B
+    1, // llvm.hexagon.V6.vdelta
+    1, // llvm.hexagon.V6.vdelta.128B
+    1, // llvm.hexagon.V6.vdmpybus
+    1, // llvm.hexagon.V6.vdmpybus.128B
+    1, // llvm.hexagon.V6.vdmpybus.acc
+    1, // llvm.hexagon.V6.vdmpybus.acc.128B
+    1, // llvm.hexagon.V6.vdmpybus.dv
+    1, // llvm.hexagon.V6.vdmpybus.dv.128B
+    1, // llvm.hexagon.V6.vdmpybus.dv.acc
+    1, // llvm.hexagon.V6.vdmpybus.dv.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhb
+    1, // llvm.hexagon.V6.vdmpyhb.128B
+    1, // llvm.hexagon.V6.vdmpyhb.acc
+    1, // llvm.hexagon.V6.vdmpyhb.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhb.dv
+    1, // llvm.hexagon.V6.vdmpyhb.dv.128B
+    1, // llvm.hexagon.V6.vdmpyhb.dv.acc
+    1, // llvm.hexagon.V6.vdmpyhb.dv.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhisat
+    1, // llvm.hexagon.V6.vdmpyhisat.128B
+    1, // llvm.hexagon.V6.vdmpyhisat.acc
+    1, // llvm.hexagon.V6.vdmpyhisat.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhsat
+    1, // llvm.hexagon.V6.vdmpyhsat.128B
+    1, // llvm.hexagon.V6.vdmpyhsat.acc
+    1, // llvm.hexagon.V6.vdmpyhsat.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhsuisat
+    1, // llvm.hexagon.V6.vdmpyhsuisat.128B
+    1, // llvm.hexagon.V6.vdmpyhsuisat.acc
+    1, // llvm.hexagon.V6.vdmpyhsuisat.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhsusat
+    1, // llvm.hexagon.V6.vdmpyhsusat.128B
+    1, // llvm.hexagon.V6.vdmpyhsusat.acc
+    1, // llvm.hexagon.V6.vdmpyhsusat.acc.128B
+    1, // llvm.hexagon.V6.vdmpyhvsat
+    1, // llvm.hexagon.V6.vdmpyhvsat.128B
+    1, // llvm.hexagon.V6.vdmpyhvsat.acc
+    1, // llvm.hexagon.V6.vdmpyhvsat.acc.128B
+    1, // llvm.hexagon.V6.vdsaduh
+    1, // llvm.hexagon.V6.vdsaduh.128B
+    1, // llvm.hexagon.V6.vdsaduh.acc
+    1, // llvm.hexagon.V6.vdsaduh.acc.128B
+    1, // llvm.hexagon.V6.veqb
+    1, // llvm.hexagon.V6.veqb.128B
+    1, // llvm.hexagon.V6.veqb.and
+    1, // llvm.hexagon.V6.veqb.and.128B
+    1, // llvm.hexagon.V6.veqb.or
+    1, // llvm.hexagon.V6.veqb.or.128B
+    1, // llvm.hexagon.V6.veqb.xor
+    1, // llvm.hexagon.V6.veqb.xor.128B
+    1, // llvm.hexagon.V6.veqh
+    1, // llvm.hexagon.V6.veqh.128B
+    1, // llvm.hexagon.V6.veqh.and
+    1, // llvm.hexagon.V6.veqh.and.128B
+    1, // llvm.hexagon.V6.veqh.or
+    1, // llvm.hexagon.V6.veqh.or.128B
+    1, // llvm.hexagon.V6.veqh.xor
+    1, // llvm.hexagon.V6.veqh.xor.128B
+    1, // llvm.hexagon.V6.veqw
+    1, // llvm.hexagon.V6.veqw.128B
+    1, // llvm.hexagon.V6.veqw.and
+    1, // llvm.hexagon.V6.veqw.and.128B
+    1, // llvm.hexagon.V6.veqw.or
+    1, // llvm.hexagon.V6.veqw.or.128B
+    1, // llvm.hexagon.V6.veqw.xor
+    1, // llvm.hexagon.V6.veqw.xor.128B
+    22, // llvm.hexagon.V6.vgathermh
+    22, // llvm.hexagon.V6.vgathermh.128B
+    22, // llvm.hexagon.V6.vgathermhq
+    22, // llvm.hexagon.V6.vgathermhq.128B
+    22, // llvm.hexagon.V6.vgathermhw
+    22, // llvm.hexagon.V6.vgathermhw.128B
+    22, // llvm.hexagon.V6.vgathermhwq
+    22, // llvm.hexagon.V6.vgathermhwq.128B
+    22, // llvm.hexagon.V6.vgathermw
+    22, // llvm.hexagon.V6.vgathermw.128B
+    22, // llvm.hexagon.V6.vgathermwq
+    22, // llvm.hexagon.V6.vgathermwq.128B
+    1, // llvm.hexagon.V6.vgtb
+    1, // llvm.hexagon.V6.vgtb.128B
+    1, // llvm.hexagon.V6.vgtb.and
+    1, // llvm.hexagon.V6.vgtb.and.128B
+    1, // llvm.hexagon.V6.vgtb.or
+    1, // llvm.hexagon.V6.vgtb.or.128B
+    1, // llvm.hexagon.V6.vgtb.xor
+    1, // llvm.hexagon.V6.vgtb.xor.128B
+    1, // llvm.hexagon.V6.vgth
+    1, // llvm.hexagon.V6.vgth.128B
+    1, // llvm.hexagon.V6.vgth.and
+    1, // llvm.hexagon.V6.vgth.and.128B
+    1, // llvm.hexagon.V6.vgth.or
+    1, // llvm.hexagon.V6.vgth.or.128B
+    1, // llvm.hexagon.V6.vgth.xor
+    1, // llvm.hexagon.V6.vgth.xor.128B
+    1, // llvm.hexagon.V6.vgtub
+    1, // llvm.hexagon.V6.vgtub.128B
+    1, // llvm.hexagon.V6.vgtub.and
+    1, // llvm.hexagon.V6.vgtub.and.128B
+    1, // llvm.hexagon.V6.vgtub.or
+    1, // llvm.hexagon.V6.vgtub.or.128B
+    1, // llvm.hexagon.V6.vgtub.xor
+    1, // llvm.hexagon.V6.vgtub.xor.128B
+    1, // llvm.hexagon.V6.vgtuh
+    1, // llvm.hexagon.V6.vgtuh.128B
+    1, // llvm.hexagon.V6.vgtuh.and
+    1, // llvm.hexagon.V6.vgtuh.and.128B
+    1, // llvm.hexagon.V6.vgtuh.or
+    1, // llvm.hexagon.V6.vgtuh.or.128B
+    1, // llvm.hexagon.V6.vgtuh.xor
+    1, // llvm.hexagon.V6.vgtuh.xor.128B
+    1, // llvm.hexagon.V6.vgtuw
+    1, // llvm.hexagon.V6.vgtuw.128B
+    1, // llvm.hexagon.V6.vgtuw.and
+    1, // llvm.hexagon.V6.vgtuw.and.128B
+    1, // llvm.hexagon.V6.vgtuw.or
+    1, // llvm.hexagon.V6.vgtuw.or.128B
+    1, // llvm.hexagon.V6.vgtuw.xor
+    1, // llvm.hexagon.V6.vgtuw.xor.128B
+    1, // llvm.hexagon.V6.vgtw
+    1, // llvm.hexagon.V6.vgtw.128B
+    1, // llvm.hexagon.V6.vgtw.and
+    1, // llvm.hexagon.V6.vgtw.and.128B
+    1, // llvm.hexagon.V6.vgtw.or
+    1, // llvm.hexagon.V6.vgtw.or.128B
+    1, // llvm.hexagon.V6.vgtw.xor
+    1, // llvm.hexagon.V6.vgtw.xor.128B
+    1, // llvm.hexagon.V6.vinsertwr
+    1, // llvm.hexagon.V6.vinsertwr.128B
+    1, // llvm.hexagon.V6.vlalignb
+    1, // llvm.hexagon.V6.vlalignb.128B
+    1, // llvm.hexagon.V6.vlalignbi
+    1, // llvm.hexagon.V6.vlalignbi.128B
+    1, // llvm.hexagon.V6.vlsrb
+    1, // llvm.hexagon.V6.vlsrb.128B
+    1, // llvm.hexagon.V6.vlsrh
+    1, // llvm.hexagon.V6.vlsrh.128B
+    1, // llvm.hexagon.V6.vlsrhv
+    1, // llvm.hexagon.V6.vlsrhv.128B
+    1, // llvm.hexagon.V6.vlsrw
+    1, // llvm.hexagon.V6.vlsrw.128B
+    1, // llvm.hexagon.V6.vlsrwv
+    1, // llvm.hexagon.V6.vlsrwv.128B
+    1, // llvm.hexagon.V6.vlut4
+    1, // llvm.hexagon.V6.vlut4.128B
+    1, // llvm.hexagon.V6.vlutvvb
+    1, // llvm.hexagon.V6.vlutvvb.128B
+    1, // llvm.hexagon.V6.vlutvvb.nm
+    1, // llvm.hexagon.V6.vlutvvb.nm.128B
+    1, // llvm.hexagon.V6.vlutvvb.oracc
+    1, // llvm.hexagon.V6.vlutvvb.oracc.128B
+    1, // llvm.hexagon.V6.vlutvvb.oracci
+    1, // llvm.hexagon.V6.vlutvvb.oracci.128B
+    1, // llvm.hexagon.V6.vlutvvbi
+    1, // llvm.hexagon.V6.vlutvvbi.128B
+    1, // llvm.hexagon.V6.vlutvwh
+    1, // llvm.hexagon.V6.vlutvwh.128B
+    1, // llvm.hexagon.V6.vlutvwh.nm
+    1, // llvm.hexagon.V6.vlutvwh.nm.128B
+    1, // llvm.hexagon.V6.vlutvwh.oracc
+    1, // llvm.hexagon.V6.vlutvwh.oracc.128B
+    1, // llvm.hexagon.V6.vlutvwh.oracci
+    1, // llvm.hexagon.V6.vlutvwh.oracci.128B
+    1, // llvm.hexagon.V6.vlutvwhi
+    1, // llvm.hexagon.V6.vlutvwhi.128B
+    22, // llvm.hexagon.V6.vmaskedstorenq
+    22, // llvm.hexagon.V6.vmaskedstorenq.128B
+    22, // llvm.hexagon.V6.vmaskedstorentnq
+    22, // llvm.hexagon.V6.vmaskedstorentnq.128B
+    22, // llvm.hexagon.V6.vmaskedstorentq
+    22, // llvm.hexagon.V6.vmaskedstorentq.128B
+    22, // llvm.hexagon.V6.vmaskedstoreq
+    22, // llvm.hexagon.V6.vmaskedstoreq.128B
+    1, // llvm.hexagon.V6.vmaxb
+    1, // llvm.hexagon.V6.vmaxb.128B
+    1, // llvm.hexagon.V6.vmaxh
+    1, // llvm.hexagon.V6.vmaxh.128B
+    1, // llvm.hexagon.V6.vmaxub
+    1, // llvm.hexagon.V6.vmaxub.128B
+    1, // llvm.hexagon.V6.vmaxuh
+    1, // llvm.hexagon.V6.vmaxuh.128B
+    1, // llvm.hexagon.V6.vmaxw
+    1, // llvm.hexagon.V6.vmaxw.128B
+    1, // llvm.hexagon.V6.vminb
+    1, // llvm.hexagon.V6.vminb.128B
+    1, // llvm.hexagon.V6.vminh
+    1, // llvm.hexagon.V6.vminh.128B
+    1, // llvm.hexagon.V6.vminub
+    1, // llvm.hexagon.V6.vminub.128B
+    1, // llvm.hexagon.V6.vminuh
+    1, // llvm.hexagon.V6.vminuh.128B
+    1, // llvm.hexagon.V6.vminw
+    1, // llvm.hexagon.V6.vminw.128B
+    1, // llvm.hexagon.V6.vmpabus
+    1, // llvm.hexagon.V6.vmpabus.128B
+    1, // llvm.hexagon.V6.vmpabus.acc
+    1, // llvm.hexagon.V6.vmpabus.acc.128B
+    1, // llvm.hexagon.V6.vmpabusv
+    1, // llvm.hexagon.V6.vmpabusv.128B
+    1, // llvm.hexagon.V6.vmpabuu
+    1, // llvm.hexagon.V6.vmpabuu.128B
+    1, // llvm.hexagon.V6.vmpabuu.acc
+    1, // llvm.hexagon.V6.vmpabuu.acc.128B
+    1, // llvm.hexagon.V6.vmpabuuv
+    1, // llvm.hexagon.V6.vmpabuuv.128B
+    1, // llvm.hexagon.V6.vmpahb
+    1, // llvm.hexagon.V6.vmpahb.128B
+    1, // llvm.hexagon.V6.vmpahb.acc
+    1, // llvm.hexagon.V6.vmpahb.acc.128B
+    1, // llvm.hexagon.V6.vmpahhsat
+    1, // llvm.hexagon.V6.vmpahhsat.128B
+    1, // llvm.hexagon.V6.vmpauhb
+    1, // llvm.hexagon.V6.vmpauhb.128B
+    1, // llvm.hexagon.V6.vmpauhb.acc
+    1, // llvm.hexagon.V6.vmpauhb.acc.128B
+    1, // llvm.hexagon.V6.vmpauhuhsat
+    1, // llvm.hexagon.V6.vmpauhuhsat.128B
+    1, // llvm.hexagon.V6.vmpsuhuhsat
+    1, // llvm.hexagon.V6.vmpsuhuhsat.128B
+    1, // llvm.hexagon.V6.vmpybus
+    1, // llvm.hexagon.V6.vmpybus.128B
+    1, // llvm.hexagon.V6.vmpybus.acc
+    1, // llvm.hexagon.V6.vmpybus.acc.128B
+    1, // llvm.hexagon.V6.vmpybusv
+    1, // llvm.hexagon.V6.vmpybusv.128B
+    1, // llvm.hexagon.V6.vmpybusv.acc
+    1, // llvm.hexagon.V6.vmpybusv.acc.128B
+    1, // llvm.hexagon.V6.vmpybv
+    1, // llvm.hexagon.V6.vmpybv.128B
+    1, // llvm.hexagon.V6.vmpybv.acc
+    1, // llvm.hexagon.V6.vmpybv.acc.128B
+    1, // llvm.hexagon.V6.vmpyewuh
+    1, // llvm.hexagon.V6.vmpyewuh.128B
+    1, // llvm.hexagon.V6.vmpyewuh.64
+    1, // llvm.hexagon.V6.vmpyewuh.64.128B
+    1, // llvm.hexagon.V6.vmpyh
+    1, // llvm.hexagon.V6.vmpyh.128B
+    1, // llvm.hexagon.V6.vmpyh.acc
+    1, // llvm.hexagon.V6.vmpyh.acc.128B
+    1, // llvm.hexagon.V6.vmpyhsat.acc
+    1, // llvm.hexagon.V6.vmpyhsat.acc.128B
+    1, // llvm.hexagon.V6.vmpyhsrs
+    1, // llvm.hexagon.V6.vmpyhsrs.128B
+    1, // llvm.hexagon.V6.vmpyhss
+    1, // llvm.hexagon.V6.vmpyhss.128B
+    1, // llvm.hexagon.V6.vmpyhus
+    1, // llvm.hexagon.V6.vmpyhus.128B
+    1, // llvm.hexagon.V6.vmpyhus.acc
+    1, // llvm.hexagon.V6.vmpyhus.acc.128B
+    1, // llvm.hexagon.V6.vmpyhv
+    1, // llvm.hexagon.V6.vmpyhv.128B
+    1, // llvm.hexagon.V6.vmpyhv.acc
+    1, // llvm.hexagon.V6.vmpyhv.acc.128B
+    1, // llvm.hexagon.V6.vmpyhvsrs
+    1, // llvm.hexagon.V6.vmpyhvsrs.128B
+    1, // llvm.hexagon.V6.vmpyieoh
+    1, // llvm.hexagon.V6.vmpyieoh.128B
+    1, // llvm.hexagon.V6.vmpyiewh.acc
+    1, // llvm.hexagon.V6.vmpyiewh.acc.128B
+    1, // llvm.hexagon.V6.vmpyiewuh
+    1, // llvm.hexagon.V6.vmpyiewuh.128B
+    1, // llvm.hexagon.V6.vmpyiewuh.acc
+    1, // llvm.hexagon.V6.vmpyiewuh.acc.128B
+    1, // llvm.hexagon.V6.vmpyih
+    1, // llvm.hexagon.V6.vmpyih.128B
+    1, // llvm.hexagon.V6.vmpyih.acc
+    1, // llvm.hexagon.V6.vmpyih.acc.128B
+    1, // llvm.hexagon.V6.vmpyihb
+    1, // llvm.hexagon.V6.vmpyihb.128B
+    1, // llvm.hexagon.V6.vmpyihb.acc
+    1, // llvm.hexagon.V6.vmpyihb.acc.128B
+    1, // llvm.hexagon.V6.vmpyiowh
+    1, // llvm.hexagon.V6.vmpyiowh.128B
+    1, // llvm.hexagon.V6.vmpyiwb
+    1, // llvm.hexagon.V6.vmpyiwb.128B
+    1, // llvm.hexagon.V6.vmpyiwb.acc
+    1, // llvm.hexagon.V6.vmpyiwb.acc.128B
+    1, // llvm.hexagon.V6.vmpyiwh
+    1, // llvm.hexagon.V6.vmpyiwh.128B
+    1, // llvm.hexagon.V6.vmpyiwh.acc
+    1, // llvm.hexagon.V6.vmpyiwh.acc.128B
+    1, // llvm.hexagon.V6.vmpyiwub
+    1, // llvm.hexagon.V6.vmpyiwub.128B
+    1, // llvm.hexagon.V6.vmpyiwub.acc
+    1, // llvm.hexagon.V6.vmpyiwub.acc.128B
+    1, // llvm.hexagon.V6.vmpyowh
+    1, // llvm.hexagon.V6.vmpyowh.128B
+    1, // llvm.hexagon.V6.vmpyowh.64.acc
+    1, // llvm.hexagon.V6.vmpyowh.64.acc.128B
+    1, // llvm.hexagon.V6.vmpyowh.rnd
+    1, // llvm.hexagon.V6.vmpyowh.rnd.128B
+    1, // llvm.hexagon.V6.vmpyowh.rnd.sacc
+    1, // llvm.hexagon.V6.vmpyowh.rnd.sacc.128B
+    1, // llvm.hexagon.V6.vmpyowh.sacc
+    1, // llvm.hexagon.V6.vmpyowh.sacc.128B
+    1, // llvm.hexagon.V6.vmpyub
+    1, // llvm.hexagon.V6.vmpyub.128B
+    1, // llvm.hexagon.V6.vmpyub.acc
+    1, // llvm.hexagon.V6.vmpyub.acc.128B
+    1, // llvm.hexagon.V6.vmpyubv
+    1, // llvm.hexagon.V6.vmpyubv.128B
+    1, // llvm.hexagon.V6.vmpyubv.acc
+    1, // llvm.hexagon.V6.vmpyubv.acc.128B
+    1, // llvm.hexagon.V6.vmpyuh
+    1, // llvm.hexagon.V6.vmpyuh.128B
+    1, // llvm.hexagon.V6.vmpyuh.acc
+    1, // llvm.hexagon.V6.vmpyuh.acc.128B
+    1, // llvm.hexagon.V6.vmpyuhe
+    1, // llvm.hexagon.V6.vmpyuhe.128B
+    1, // llvm.hexagon.V6.vmpyuhe.acc
+    1, // llvm.hexagon.V6.vmpyuhe.acc.128B
+    1, // llvm.hexagon.V6.vmpyuhv
+    1, // llvm.hexagon.V6.vmpyuhv.128B
+    1, // llvm.hexagon.V6.vmpyuhv.acc
+    1, // llvm.hexagon.V6.vmpyuhv.acc.128B
+    1, // llvm.hexagon.V6.vmux
+    1, // llvm.hexagon.V6.vmux.128B
+    1, // llvm.hexagon.V6.vnavgb
+    1, // llvm.hexagon.V6.vnavgb.128B
+    1, // llvm.hexagon.V6.vnavgh
+    1, // llvm.hexagon.V6.vnavgh.128B
+    1, // llvm.hexagon.V6.vnavgub
+    1, // llvm.hexagon.V6.vnavgub.128B
+    1, // llvm.hexagon.V6.vnavgw
+    1, // llvm.hexagon.V6.vnavgw.128B
+    1, // llvm.hexagon.V6.vnormamth
+    1, // llvm.hexagon.V6.vnormamth.128B
+    1, // llvm.hexagon.V6.vnormamtw
+    1, // llvm.hexagon.V6.vnormamtw.128B
+    1, // llvm.hexagon.V6.vnot
+    1, // llvm.hexagon.V6.vnot.128B
+    1, // llvm.hexagon.V6.vor
+    1, // llvm.hexagon.V6.vor.128B
+    1, // llvm.hexagon.V6.vpackeb
+    1, // llvm.hexagon.V6.vpackeb.128B
+    1, // llvm.hexagon.V6.vpackeh
+    1, // llvm.hexagon.V6.vpackeh.128B
+    1, // llvm.hexagon.V6.vpackhb.sat
+    1, // llvm.hexagon.V6.vpackhb.sat.128B
+    1, // llvm.hexagon.V6.vpackhub.sat
+    1, // llvm.hexagon.V6.vpackhub.sat.128B
+    1, // llvm.hexagon.V6.vpackob
+    1, // llvm.hexagon.V6.vpackob.128B
+    1, // llvm.hexagon.V6.vpackoh
+    1, // llvm.hexagon.V6.vpackoh.128B
+    1, // llvm.hexagon.V6.vpackwh.sat
+    1, // llvm.hexagon.V6.vpackwh.sat.128B
+    1, // llvm.hexagon.V6.vpackwuh.sat
+    1, // llvm.hexagon.V6.vpackwuh.sat.128B
+    1, // llvm.hexagon.V6.vpopcounth
+    1, // llvm.hexagon.V6.vpopcounth.128B
+    1, // llvm.hexagon.V6.vprefixqb
+    1, // llvm.hexagon.V6.vprefixqb.128B
+    1, // llvm.hexagon.V6.vprefixqh
+    1, // llvm.hexagon.V6.vprefixqh.128B
+    1, // llvm.hexagon.V6.vprefixqw
+    1, // llvm.hexagon.V6.vprefixqw.128B
+    1, // llvm.hexagon.V6.vrdelta
+    1, // llvm.hexagon.V6.vrdelta.128B
+    1, // llvm.hexagon.V6.vrmpybub.rtt
+    1, // llvm.hexagon.V6.vrmpybub.rtt.128B
+    1, // llvm.hexagon.V6.vrmpybub.rtt.acc
+    1, // llvm.hexagon.V6.vrmpybub.rtt.acc.128B
+    1, // llvm.hexagon.V6.vrmpybus
+    1, // llvm.hexagon.V6.vrmpybus.128B
+    1, // llvm.hexagon.V6.vrmpybus.acc
+    1, // llvm.hexagon.V6.vrmpybus.acc.128B
+    1, // llvm.hexagon.V6.vrmpybusi
+    1, // llvm.hexagon.V6.vrmpybusi.128B
+    1, // llvm.hexagon.V6.vrmpybusi.acc
+    1, // llvm.hexagon.V6.vrmpybusi.acc.128B
+    1, // llvm.hexagon.V6.vrmpybusv
+    1, // llvm.hexagon.V6.vrmpybusv.128B
+    1, // llvm.hexagon.V6.vrmpybusv.acc
+    1, // llvm.hexagon.V6.vrmpybusv.acc.128B
+    1, // llvm.hexagon.V6.vrmpybv
+    1, // llvm.hexagon.V6.vrmpybv.128B
+    1, // llvm.hexagon.V6.vrmpybv.acc
+    1, // llvm.hexagon.V6.vrmpybv.acc.128B
+    1, // llvm.hexagon.V6.vrmpyub
+    1, // llvm.hexagon.V6.vrmpyub.128B
+    1, // llvm.hexagon.V6.vrmpyub.acc
+    1, // llvm.hexagon.V6.vrmpyub.acc.128B
+    1, // llvm.hexagon.V6.vrmpyub.rtt
+    1, // llvm.hexagon.V6.vrmpyub.rtt.128B
+    1, // llvm.hexagon.V6.vrmpyub.rtt.acc
+    1, // llvm.hexagon.V6.vrmpyub.rtt.acc.128B
+    1, // llvm.hexagon.V6.vrmpyubi
+    1, // llvm.hexagon.V6.vrmpyubi.128B
+    1, // llvm.hexagon.V6.vrmpyubi.acc
+    1, // llvm.hexagon.V6.vrmpyubi.acc.128B
+    1, // llvm.hexagon.V6.vrmpyubv
+    1, // llvm.hexagon.V6.vrmpyubv.128B
+    1, // llvm.hexagon.V6.vrmpyubv.acc
+    1, // llvm.hexagon.V6.vrmpyubv.acc.128B
+    1, // llvm.hexagon.V6.vror
+    1, // llvm.hexagon.V6.vror.128B
+    1, // llvm.hexagon.V6.vroundhb
+    1, // llvm.hexagon.V6.vroundhb.128B
+    1, // llvm.hexagon.V6.vroundhub
+    1, // llvm.hexagon.V6.vroundhub.128B
+    1, // llvm.hexagon.V6.vrounduhub
+    1, // llvm.hexagon.V6.vrounduhub.128B
+    1, // llvm.hexagon.V6.vrounduwuh
+    1, // llvm.hexagon.V6.vrounduwuh.128B
+    1, // llvm.hexagon.V6.vroundwh
+    1, // llvm.hexagon.V6.vroundwh.128B
+    1, // llvm.hexagon.V6.vroundwuh
+    1, // llvm.hexagon.V6.vroundwuh.128B
+    1, // llvm.hexagon.V6.vrsadubi
+    1, // llvm.hexagon.V6.vrsadubi.128B
+    1, // llvm.hexagon.V6.vrsadubi.acc
+    1, // llvm.hexagon.V6.vrsadubi.acc.128B
+    1, // llvm.hexagon.V6.vsathub
+    1, // llvm.hexagon.V6.vsathub.128B
+    1, // llvm.hexagon.V6.vsatuwuh
+    1, // llvm.hexagon.V6.vsatuwuh.128B
+    1, // llvm.hexagon.V6.vsatwh
+    1, // llvm.hexagon.V6.vsatwh.128B
+    1, // llvm.hexagon.V6.vsb
+    1, // llvm.hexagon.V6.vsb.128B
+    34, // llvm.hexagon.V6.vscattermh
+    34, // llvm.hexagon.V6.vscattermh.128B
+    34, // llvm.hexagon.V6.vscattermh.add
+    34, // llvm.hexagon.V6.vscattermh.add.128B
+    34, // llvm.hexagon.V6.vscattermhq
+    34, // llvm.hexagon.V6.vscattermhq.128B
+    34, // llvm.hexagon.V6.vscattermhw
+    34, // llvm.hexagon.V6.vscattermhw.128B
+    34, // llvm.hexagon.V6.vscattermhw.add
+    34, // llvm.hexagon.V6.vscattermhw.add.128B
+    34, // llvm.hexagon.V6.vscattermhwq
+    34, // llvm.hexagon.V6.vscattermhwq.128B
+    34, // llvm.hexagon.V6.vscattermw
+    34, // llvm.hexagon.V6.vscattermw.128B
+    34, // llvm.hexagon.V6.vscattermw.add
+    34, // llvm.hexagon.V6.vscattermw.add.128B
+    34, // llvm.hexagon.V6.vscattermwq
+    34, // llvm.hexagon.V6.vscattermwq.128B
+    1, // llvm.hexagon.V6.vsh
+    1, // llvm.hexagon.V6.vsh.128B
+    1, // llvm.hexagon.V6.vshufeh
+    1, // llvm.hexagon.V6.vshufeh.128B
+    1, // llvm.hexagon.V6.vshuffb
+    1, // llvm.hexagon.V6.vshuffb.128B
+    1, // llvm.hexagon.V6.vshuffeb
+    1, // llvm.hexagon.V6.vshuffeb.128B
+    1, // llvm.hexagon.V6.vshuffh
+    1, // llvm.hexagon.V6.vshuffh.128B
+    1, // llvm.hexagon.V6.vshuffob
+    1, // llvm.hexagon.V6.vshuffob.128B
+    1, // llvm.hexagon.V6.vshuffvdd
+    1, // llvm.hexagon.V6.vshuffvdd.128B
+    1, // llvm.hexagon.V6.vshufoeb
+    1, // llvm.hexagon.V6.vshufoeb.128B
+    1, // llvm.hexagon.V6.vshufoeh
+    1, // llvm.hexagon.V6.vshufoeh.128B
+    1, // llvm.hexagon.V6.vshufoh
+    1, // llvm.hexagon.V6.vshufoh.128B
+    1, // llvm.hexagon.V6.vsubb
+    1, // llvm.hexagon.V6.vsubb.128B
+    1, // llvm.hexagon.V6.vsubb.dv
+    1, // llvm.hexagon.V6.vsubb.dv.128B
+    1, // llvm.hexagon.V6.vsubbnq
+    1, // llvm.hexagon.V6.vsubbnq.128B
+    1, // llvm.hexagon.V6.vsubbq
+    1, // llvm.hexagon.V6.vsubbq.128B
+    1, // llvm.hexagon.V6.vsubbsat
+    1, // llvm.hexagon.V6.vsubbsat.128B
+    1, // llvm.hexagon.V6.vsubbsat.dv
+    1, // llvm.hexagon.V6.vsubbsat.dv.128B
+    1, // llvm.hexagon.V6.vsubcarry
+    1, // llvm.hexagon.V6.vsubcarry.128B
+    1, // llvm.hexagon.V6.vsubh
+    1, // llvm.hexagon.V6.vsubh.128B
+    1, // llvm.hexagon.V6.vsubh.dv
+    1, // llvm.hexagon.V6.vsubh.dv.128B
+    1, // llvm.hexagon.V6.vsubhnq
+    1, // llvm.hexagon.V6.vsubhnq.128B
+    1, // llvm.hexagon.V6.vsubhq
+    1, // llvm.hexagon.V6.vsubhq.128B
+    1, // llvm.hexagon.V6.vsubhsat
+    1, // llvm.hexagon.V6.vsubhsat.128B
+    1, // llvm.hexagon.V6.vsubhsat.dv
+    1, // llvm.hexagon.V6.vsubhsat.dv.128B
+    1, // llvm.hexagon.V6.vsubhw
+    1, // llvm.hexagon.V6.vsubhw.128B
+    1, // llvm.hexagon.V6.vsububh
+    1, // llvm.hexagon.V6.vsububh.128B
+    1, // llvm.hexagon.V6.vsububsat
+    1, // llvm.hexagon.V6.vsububsat.128B
+    1, // llvm.hexagon.V6.vsububsat.dv
+    1, // llvm.hexagon.V6.vsububsat.dv.128B
+    1, // llvm.hexagon.V6.vsubububb.sat
+    1, // llvm.hexagon.V6.vsubububb.sat.128B
+    1, // llvm.hexagon.V6.vsubuhsat
+    1, // llvm.hexagon.V6.vsubuhsat.128B
+    1, // llvm.hexagon.V6.vsubuhsat.dv
+    1, // llvm.hexagon.V6.vsubuhsat.dv.128B
+    1, // llvm.hexagon.V6.vsubuhw
+    1, // llvm.hexagon.V6.vsubuhw.128B
+    1, // llvm.hexagon.V6.vsubuwsat
+    1, // llvm.hexagon.V6.vsubuwsat.128B
+    1, // llvm.hexagon.V6.vsubuwsat.dv
+    1, // llvm.hexagon.V6.vsubuwsat.dv.128B
+    1, // llvm.hexagon.V6.vsubw
+    1, // llvm.hexagon.V6.vsubw.128B
+    1, // llvm.hexagon.V6.vsubw.dv
+    1, // llvm.hexagon.V6.vsubw.dv.128B
+    1, // llvm.hexagon.V6.vsubwnq
+    1, // llvm.hexagon.V6.vsubwnq.128B
+    1, // llvm.hexagon.V6.vsubwq
+    1, // llvm.hexagon.V6.vsubwq.128B
+    1, // llvm.hexagon.V6.vsubwsat
+    1, // llvm.hexagon.V6.vsubwsat.128B
+    1, // llvm.hexagon.V6.vsubwsat.dv
+    1, // llvm.hexagon.V6.vsubwsat.dv.128B
+    1, // llvm.hexagon.V6.vswap
+    1, // llvm.hexagon.V6.vswap.128B
+    1, // llvm.hexagon.V6.vtmpyb
+    1, // llvm.hexagon.V6.vtmpyb.128B
+    1, // llvm.hexagon.V6.vtmpyb.acc
+    1, // llvm.hexagon.V6.vtmpyb.acc.128B
+    1, // llvm.hexagon.V6.vtmpybus
+    1, // llvm.hexagon.V6.vtmpybus.128B
+    1, // llvm.hexagon.V6.vtmpybus.acc
+    1, // llvm.hexagon.V6.vtmpybus.acc.128B
+    1, // llvm.hexagon.V6.vtmpyhb
+    1, // llvm.hexagon.V6.vtmpyhb.128B
+    1, // llvm.hexagon.V6.vtmpyhb.acc
+    1, // llvm.hexagon.V6.vtmpyhb.acc.128B
+    1, // llvm.hexagon.V6.vunpackb
+    1, // llvm.hexagon.V6.vunpackb.128B
+    1, // llvm.hexagon.V6.vunpackh
+    1, // llvm.hexagon.V6.vunpackh.128B
+    1, // llvm.hexagon.V6.vunpackob
+    1, // llvm.hexagon.V6.vunpackob.128B
+    1, // llvm.hexagon.V6.vunpackoh
+    1, // llvm.hexagon.V6.vunpackoh.128B
+    1, // llvm.hexagon.V6.vunpackub
+    1, // llvm.hexagon.V6.vunpackub.128B
+    1, // llvm.hexagon.V6.vunpackuh
+    1, // llvm.hexagon.V6.vunpackuh.128B
+    1, // llvm.hexagon.V6.vxor
+    1, // llvm.hexagon.V6.vxor.128B
+    1, // llvm.hexagon.V6.vzb
+    1, // llvm.hexagon.V6.vzb.128B
+    1, // llvm.hexagon.V6.vzh
+    1, // llvm.hexagon.V6.vzh.128B
+    3, // llvm.hexagon.Y2.dccleana
+    3, // llvm.hexagon.Y2.dccleaninva
+    3, // llvm.hexagon.Y2.dcinva
+    38, // llvm.hexagon.Y2.dczeroa
+    3, // llvm.hexagon.Y4.l2fetch
+    3, // llvm.hexagon.Y5.l2fetch
+    22, // llvm.hexagon.circ.ldb
+    22, // llvm.hexagon.circ.ldd
+    22, // llvm.hexagon.circ.ldh
+    22, // llvm.hexagon.circ.ldub
+    22, // llvm.hexagon.circ.lduh
+    22, // llvm.hexagon.circ.ldw
+    34, // llvm.hexagon.circ.stb
+    34, // llvm.hexagon.circ.std
+    34, // llvm.hexagon.circ.sth
+    34, // llvm.hexagon.circ.sthhi
+    34, // llvm.hexagon.circ.stw
+    22, // llvm.hexagon.mm256i.vaddw
+    3, // llvm.hexagon.prefetch
+    3, // llvm.mips.absq.s.ph
+    3, // llvm.mips.absq.s.qb
+    3, // llvm.mips.absq.s.w
+    1, // llvm.mips.add.a.b
+    1, // llvm.mips.add.a.d
+    1, // llvm.mips.add.a.h
+    1, // llvm.mips.add.a.w
+    1, // llvm.mips.addq.ph
+    1, // llvm.mips.addq.s.ph
+    3, // llvm.mips.addq.s.w
+    1, // llvm.mips.addqh.ph
+    1, // llvm.mips.addqh.r.ph
+    1, // llvm.mips.addqh.r.w
+    1, // llvm.mips.addqh.w
+    1, // llvm.mips.adds.a.b
+    1, // llvm.mips.adds.a.d
+    1, // llvm.mips.adds.a.h
+    1, // llvm.mips.adds.a.w
+    1, // llvm.mips.adds.s.b
+    1, // llvm.mips.adds.s.d
+    1, // llvm.mips.adds.s.h
+    1, // llvm.mips.adds.s.w
+    1, // llvm.mips.adds.u.b
+    1, // llvm.mips.adds.u.d
+    1, // llvm.mips.adds.u.h
+    1, // llvm.mips.adds.u.w
+    3, // llvm.mips.addsc
+    3, // llvm.mips.addu.ph
+    1, // llvm.mips.addu.qb
+    3, // llvm.mips.addu.s.ph
+    1, // llvm.mips.addu.s.qb
+    1, // llvm.mips.adduh.qb
+    1, // llvm.mips.adduh.r.qb
+    1, // llvm.mips.addv.b
+    1, // llvm.mips.addv.d
+    1, // llvm.mips.addv.h
+    1, // llvm.mips.addv.w
+    1, // llvm.mips.addvi.b
+    1, // llvm.mips.addvi.d
+    1, // llvm.mips.addvi.h
+    1, // llvm.mips.addvi.w
+    3, // llvm.mips.addwc
+    1, // llvm.mips.and.v
+    1, // llvm.mips.andi.b
+    1, // llvm.mips.append
+    1, // llvm.mips.asub.s.b
+    1, // llvm.mips.asub.s.d
+    1, // llvm.mips.asub.s.h
+    1, // llvm.mips.asub.s.w
+    1, // llvm.mips.asub.u.b
+    1, // llvm.mips.asub.u.d
+    1, // llvm.mips.asub.u.h
+    1, // llvm.mips.asub.u.w
+    1, // llvm.mips.ave.s.b
+    1, // llvm.mips.ave.s.d
+    1, // llvm.mips.ave.s.h
+    1, // llvm.mips.ave.s.w
+    1, // llvm.mips.ave.u.b
+    1, // llvm.mips.ave.u.d
+    1, // llvm.mips.ave.u.h
+    1, // llvm.mips.ave.u.w
+    1, // llvm.mips.aver.s.b
+    1, // llvm.mips.aver.s.d
+    1, // llvm.mips.aver.s.h
+    1, // llvm.mips.aver.s.w
+    1, // llvm.mips.aver.u.b
+    1, // llvm.mips.aver.u.d
+    1, // llvm.mips.aver.u.h
+    1, // llvm.mips.aver.u.w
+    1, // llvm.mips.balign
+    1, // llvm.mips.bclr.b
+    1, // llvm.mips.bclr.d
+    1, // llvm.mips.bclr.h
+    1, // llvm.mips.bclr.w
+    1, // llvm.mips.bclri.b
+    1, // llvm.mips.bclri.d
+    1, // llvm.mips.bclri.h
+    1, // llvm.mips.bclri.w
+    1, // llvm.mips.binsl.b
+    1, // llvm.mips.binsl.d
+    1, // llvm.mips.binsl.h
+    1, // llvm.mips.binsl.w
+    1, // llvm.mips.binsli.b
+    1, // llvm.mips.binsli.d
+    1, // llvm.mips.binsli.h
+    1, // llvm.mips.binsli.w
+    1, // llvm.mips.binsr.b
+    1, // llvm.mips.binsr.d
+    1, // llvm.mips.binsr.h
+    1, // llvm.mips.binsr.w
+    1, // llvm.mips.binsri.b
+    1, // llvm.mips.binsri.d
+    1, // llvm.mips.binsri.h
+    1, // llvm.mips.binsri.w
+    1, // llvm.mips.bitrev
+    1, // llvm.mips.bmnz.v
+    1, // llvm.mips.bmnzi.b
+    1, // llvm.mips.bmz.v
+    1, // llvm.mips.bmzi.b
+    1, // llvm.mips.bneg.b
+    1, // llvm.mips.bneg.d
+    1, // llvm.mips.bneg.h
+    1, // llvm.mips.bneg.w
+    1, // llvm.mips.bnegi.b
+    1, // llvm.mips.bnegi.d
+    1, // llvm.mips.bnegi.h
+    1, // llvm.mips.bnegi.w
+    1, // llvm.mips.bnz.b
+    1, // llvm.mips.bnz.d
+    1, // llvm.mips.bnz.h
+    1, // llvm.mips.bnz.v
+    1, // llvm.mips.bnz.w
+    16, // llvm.mips.bposge32
+    1, // llvm.mips.bsel.v
+    1, // llvm.mips.bseli.b
+    1, // llvm.mips.bset.b
+    1, // llvm.mips.bset.d
+    1, // llvm.mips.bset.h
+    1, // llvm.mips.bset.w
+    1, // llvm.mips.bseti.b
+    1, // llvm.mips.bseti.d
+    1, // llvm.mips.bseti.h
+    1, // llvm.mips.bseti.w
+    1, // llvm.mips.bz.b
+    1, // llvm.mips.bz.d
+    1, // llvm.mips.bz.h
+    1, // llvm.mips.bz.v
+    1, // llvm.mips.bz.w
+    1, // llvm.mips.ceq.b
+    1, // llvm.mips.ceq.d
+    1, // llvm.mips.ceq.h
+    1, // llvm.mips.ceq.w
+    1, // llvm.mips.ceqi.b
+    1, // llvm.mips.ceqi.d
+    1, // llvm.mips.ceqi.h
+    1, // llvm.mips.ceqi.w
+    3, // llvm.mips.cfcmsa
+    1, // llvm.mips.cle.s.b
+    1, // llvm.mips.cle.s.d
+    1, // llvm.mips.cle.s.h
+    1, // llvm.mips.cle.s.w
+    1, // llvm.mips.cle.u.b
+    1, // llvm.mips.cle.u.d
+    1, // llvm.mips.cle.u.h
+    1, // llvm.mips.cle.u.w
+    1, // llvm.mips.clei.s.b
+    1, // llvm.mips.clei.s.d
+    1, // llvm.mips.clei.s.h
+    1, // llvm.mips.clei.s.w
+    1, // llvm.mips.clei.u.b
+    1, // llvm.mips.clei.u.d
+    1, // llvm.mips.clei.u.h
+    1, // llvm.mips.clei.u.w
+    1, // llvm.mips.clt.s.b
+    1, // llvm.mips.clt.s.d
+    1, // llvm.mips.clt.s.h
+    1, // llvm.mips.clt.s.w
+    1, // llvm.mips.clt.u.b
+    1, // llvm.mips.clt.u.d
+    1, // llvm.mips.clt.u.h
+    1, // llvm.mips.clt.u.w
+    1, // llvm.mips.clti.s.b
+    1, // llvm.mips.clti.s.d
+    1, // llvm.mips.clti.s.h
+    1, // llvm.mips.clti.s.w
+    1, // llvm.mips.clti.u.b
+    1, // llvm.mips.clti.u.d
+    1, // llvm.mips.clti.u.h
+    1, // llvm.mips.clti.u.w
+    3, // llvm.mips.cmp.eq.ph
+    3, // llvm.mips.cmp.le.ph
+    3, // llvm.mips.cmp.lt.ph
+    3, // llvm.mips.cmpgdu.eq.qb
+    3, // llvm.mips.cmpgdu.le.qb
+    3, // llvm.mips.cmpgdu.lt.qb
+    3, // llvm.mips.cmpgu.eq.qb
+    3, // llvm.mips.cmpgu.le.qb
+    3, // llvm.mips.cmpgu.lt.qb
+    3, // llvm.mips.cmpu.eq.qb
+    3, // llvm.mips.cmpu.le.qb
+    3, // llvm.mips.cmpu.lt.qb
+    1, // llvm.mips.copy.s.b
+    1, // llvm.mips.copy.s.d
+    1, // llvm.mips.copy.s.h
+    1, // llvm.mips.copy.s.w
+    1, // llvm.mips.copy.u.b
+    1, // llvm.mips.copy.u.d
+    1, // llvm.mips.copy.u.h
+    1, // llvm.mips.copy.u.w
+    3, // llvm.mips.ctcmsa
+    1, // llvm.mips.div.s.b
+    1, // llvm.mips.div.s.d
+    1, // llvm.mips.div.s.h
+    1, // llvm.mips.div.s.w
+    1, // llvm.mips.div.u.b
+    1, // llvm.mips.div.u.d
+    1, // llvm.mips.div.u.h
+    1, // llvm.mips.div.u.w
+    1, // llvm.mips.dlsa
+    1, // llvm.mips.dotp.s.d
+    1, // llvm.mips.dotp.s.h
+    1, // llvm.mips.dotp.s.w
+    1, // llvm.mips.dotp.u.d
+    1, // llvm.mips.dotp.u.h
+    1, // llvm.mips.dotp.u.w
+    1, // llvm.mips.dpa.w.ph
+    1, // llvm.mips.dpadd.s.d
+    1, // llvm.mips.dpadd.s.h
+    1, // llvm.mips.dpadd.s.w
+    1, // llvm.mips.dpadd.u.d
+    1, // llvm.mips.dpadd.u.h
+    1, // llvm.mips.dpadd.u.w
+    3, // llvm.mips.dpaq.s.w.ph
+    3, // llvm.mips.dpaq.sa.l.w
+    3, // llvm.mips.dpaqx.s.w.ph
+    3, // llvm.mips.dpaqx.sa.w.ph
+    1, // llvm.mips.dpau.h.qbl
+    1, // llvm.mips.dpau.h.qbr
+    1, // llvm.mips.dpax.w.ph
+    1, // llvm.mips.dps.w.ph
+    3, // llvm.mips.dpsq.s.w.ph
+    3, // llvm.mips.dpsq.sa.l.w
+    3, // llvm.mips.dpsqx.s.w.ph
+    3, // llvm.mips.dpsqx.sa.w.ph
+    1, // llvm.mips.dpsu.h.qbl
+    1, // llvm.mips.dpsu.h.qbr
+    1, // llvm.mips.dpsub.s.d
+    1, // llvm.mips.dpsub.s.h
+    1, // llvm.mips.dpsub.s.w
+    1, // llvm.mips.dpsub.u.d
+    1, // llvm.mips.dpsub.u.h
+    1, // llvm.mips.dpsub.u.w
+    1, // llvm.mips.dpsx.w.ph
+    3, // llvm.mips.extp
+    3, // llvm.mips.extpdp
+    3, // llvm.mips.extr.r.w
+    3, // llvm.mips.extr.rs.w
+    3, // llvm.mips.extr.s.h
+    3, // llvm.mips.extr.w
+    1, // llvm.mips.fadd.d
+    1, // llvm.mips.fadd.w
+    1, // llvm.mips.fcaf.d
+    1, // llvm.mips.fcaf.w
+    1, // llvm.mips.fceq.d
+    1, // llvm.mips.fceq.w
+    1, // llvm.mips.fclass.d
+    1, // llvm.mips.fclass.w
+    1, // llvm.mips.fcle.d
+    1, // llvm.mips.fcle.w
+    1, // llvm.mips.fclt.d
+    1, // llvm.mips.fclt.w
+    1, // llvm.mips.fcne.d
+    1, // llvm.mips.fcne.w
+    1, // llvm.mips.fcor.d
+    1, // llvm.mips.fcor.w
+    1, // llvm.mips.fcueq.d
+    1, // llvm.mips.fcueq.w
+    1, // llvm.mips.fcule.d
+    1, // llvm.mips.fcule.w
+    1, // llvm.mips.fcult.d
+    1, // llvm.mips.fcult.w
+    1, // llvm.mips.fcun.d
+    1, // llvm.mips.fcun.w
+    1, // llvm.mips.fcune.d
+    1, // llvm.mips.fcune.w
+    1, // llvm.mips.fdiv.d
+    1, // llvm.mips.fdiv.w
+    1, // llvm.mips.fexdo.h
+    1, // llvm.mips.fexdo.w
+    1, // llvm.mips.fexp2.d
+    1, // llvm.mips.fexp2.w
+    1, // llvm.mips.fexupl.d
+    1, // llvm.mips.fexupl.w
+    1, // llvm.mips.fexupr.d
+    1, // llvm.mips.fexupr.w
+    1, // llvm.mips.ffint.s.d
+    1, // llvm.mips.ffint.s.w
+    1, // llvm.mips.ffint.u.d
+    1, // llvm.mips.ffint.u.w
+    1, // llvm.mips.ffql.d
+    1, // llvm.mips.ffql.w
+    1, // llvm.mips.ffqr.d
+    1, // llvm.mips.ffqr.w
+    1, // llvm.mips.fill.b
+    1, // llvm.mips.fill.d
+    1, // llvm.mips.fill.h
+    1, // llvm.mips.fill.w
+    1, // llvm.mips.flog2.d
+    1, // llvm.mips.flog2.w
+    1, // llvm.mips.fmadd.d
+    1, // llvm.mips.fmadd.w
+    1, // llvm.mips.fmax.a.d
+    1, // llvm.mips.fmax.a.w
+    1, // llvm.mips.fmax.d
+    1, // llvm.mips.fmax.w
+    1, // llvm.mips.fmin.a.d
+    1, // llvm.mips.fmin.a.w
+    1, // llvm.mips.fmin.d
+    1, // llvm.mips.fmin.w
+    1, // llvm.mips.fmsub.d
+    1, // llvm.mips.fmsub.w
+    1, // llvm.mips.fmul.d
+    1, // llvm.mips.fmul.w
+    1, // llvm.mips.frcp.d
+    1, // llvm.mips.frcp.w
+    1, // llvm.mips.frint.d
+    1, // llvm.mips.frint.w
+    1, // llvm.mips.frsqrt.d
+    1, // llvm.mips.frsqrt.w
+    1, // llvm.mips.fsaf.d
+    1, // llvm.mips.fsaf.w
+    1, // llvm.mips.fseq.d
+    1, // llvm.mips.fseq.w
+    1, // llvm.mips.fsle.d
+    1, // llvm.mips.fsle.w
+    1, // llvm.mips.fslt.d
+    1, // llvm.mips.fslt.w
+    1, // llvm.mips.fsne.d
+    1, // llvm.mips.fsne.w
+    1, // llvm.mips.fsor.d
+    1, // llvm.mips.fsor.w
+    1, // llvm.mips.fsqrt.d
+    1, // llvm.mips.fsqrt.w
+    1, // llvm.mips.fsub.d
+    1, // llvm.mips.fsub.w
+    1, // llvm.mips.fsueq.d
+    1, // llvm.mips.fsueq.w
+    1, // llvm.mips.fsule.d
+    1, // llvm.mips.fsule.w
+    1, // llvm.mips.fsult.d
+    1, // llvm.mips.fsult.w
+    1, // llvm.mips.fsun.d
+    1, // llvm.mips.fsun.w
+    1, // llvm.mips.fsune.d
+    1, // llvm.mips.fsune.w
+    1, // llvm.mips.ftint.s.d
+    1, // llvm.mips.ftint.s.w
+    1, // llvm.mips.ftint.u.d
+    1, // llvm.mips.ftint.u.w
+    1, // llvm.mips.ftq.h
+    1, // llvm.mips.ftq.w
+    1, // llvm.mips.ftrunc.s.d
+    1, // llvm.mips.ftrunc.s.w
+    1, // llvm.mips.ftrunc.u.d
+    1, // llvm.mips.ftrunc.u.w
+    1, // llvm.mips.hadd.s.d
+    1, // llvm.mips.hadd.s.h
+    1, // llvm.mips.hadd.s.w
+    1, // llvm.mips.hadd.u.d
+    1, // llvm.mips.hadd.u.h
+    1, // llvm.mips.hadd.u.w
+    1, // llvm.mips.hsub.s.d
+    1, // llvm.mips.hsub.s.h
+    1, // llvm.mips.hsub.s.w
+    1, // llvm.mips.hsub.u.d
+    1, // llvm.mips.hsub.u.h
+    1, // llvm.mips.hsub.u.w
+    1, // llvm.mips.ilvev.b
+    1, // llvm.mips.ilvev.d
+    1, // llvm.mips.ilvev.h
+    1, // llvm.mips.ilvev.w
+    1, // llvm.mips.ilvl.b
+    1, // llvm.mips.ilvl.d
+    1, // llvm.mips.ilvl.h
+    1, // llvm.mips.ilvl.w
+    1, // llvm.mips.ilvod.b
+    1, // llvm.mips.ilvod.d
+    1, // llvm.mips.ilvod.h
+    1, // llvm.mips.ilvod.w
+    1, // llvm.mips.ilvr.b
+    1, // llvm.mips.ilvr.d
+    1, // llvm.mips.ilvr.h
+    1, // llvm.mips.ilvr.w
+    1, // llvm.mips.insert.b
+    1, // llvm.mips.insert.d
+    1, // llvm.mips.insert.h
+    1, // llvm.mips.insert.w
+    16, // llvm.mips.insv
+    1, // llvm.mips.insve.b
+    1, // llvm.mips.insve.d
+    1, // llvm.mips.insve.h
+    1, // llvm.mips.insve.w
+    2, // llvm.mips.lbux
+    2, // llvm.mips.ld.b
+    2, // llvm.mips.ld.d
+    2, // llvm.mips.ld.h
+    2, // llvm.mips.ld.w
+    1, // llvm.mips.ldi.b
+    1, // llvm.mips.ldi.d
+    1, // llvm.mips.ldi.h
+    1, // llvm.mips.ldi.w
+    2, // llvm.mips.lhx
+    1, // llvm.mips.lsa
+    2, // llvm.mips.lwx
+    1, // llvm.mips.madd
+    1, // llvm.mips.madd.q.h
+    1, // llvm.mips.madd.q.w
+    1, // llvm.mips.maddr.q.h
+    1, // llvm.mips.maddr.q.w
+    1, // llvm.mips.maddu
+    1, // llvm.mips.maddv.b
+    1, // llvm.mips.maddv.d
+    1, // llvm.mips.maddv.h
+    1, // llvm.mips.maddv.w
+    3, // llvm.mips.maq.s.w.phl
+    3, // llvm.mips.maq.s.w.phr
+    3, // llvm.mips.maq.sa.w.phl
+    3, // llvm.mips.maq.sa.w.phr
+    1, // llvm.mips.max.a.b
+    1, // llvm.mips.max.a.d
+    1, // llvm.mips.max.a.h
+    1, // llvm.mips.max.a.w
+    1, // llvm.mips.max.s.b
+    1, // llvm.mips.max.s.d
+    1, // llvm.mips.max.s.h
+    1, // llvm.mips.max.s.w
+    1, // llvm.mips.max.u.b
+    1, // llvm.mips.max.u.d
+    1, // llvm.mips.max.u.h
+    1, // llvm.mips.max.u.w
+    1, // llvm.mips.maxi.s.b
+    1, // llvm.mips.maxi.s.d
+    1, // llvm.mips.maxi.s.h
+    1, // llvm.mips.maxi.s.w
+    1, // llvm.mips.maxi.u.b
+    1, // llvm.mips.maxi.u.d
+    1, // llvm.mips.maxi.u.h
+    1, // llvm.mips.maxi.u.w
+    1, // llvm.mips.min.a.b
+    1, // llvm.mips.min.a.d
+    1, // llvm.mips.min.a.h
+    1, // llvm.mips.min.a.w
+    1, // llvm.mips.min.s.b
+    1, // llvm.mips.min.s.d
+    1, // llvm.mips.min.s.h
+    1, // llvm.mips.min.s.w
+    1, // llvm.mips.min.u.b
+    1, // llvm.mips.min.u.d
+    1, // llvm.mips.min.u.h
+    1, // llvm.mips.min.u.w
+    1, // llvm.mips.mini.s.b
+    1, // llvm.mips.mini.s.d
+    1, // llvm.mips.mini.s.h
+    1, // llvm.mips.mini.s.w
+    1, // llvm.mips.mini.u.b
+    1, // llvm.mips.mini.u.d
+    1, // llvm.mips.mini.u.h
+    1, // llvm.mips.mini.u.w
+    1, // llvm.mips.mod.s.b
+    1, // llvm.mips.mod.s.d
+    1, // llvm.mips.mod.s.h
+    1, // llvm.mips.mod.s.w
+    1, // llvm.mips.mod.u.b
+    1, // llvm.mips.mod.u.d
+    1, // llvm.mips.mod.u.h
+    1, // llvm.mips.mod.u.w
+    1, // llvm.mips.modsub
+    1, // llvm.mips.move.v
+    1, // llvm.mips.msub
+    1, // llvm.mips.msub.q.h
+    1, // llvm.mips.msub.q.w
+    1, // llvm.mips.msubr.q.h
+    1, // llvm.mips.msubr.q.w
+    1, // llvm.mips.msubu
+    1, // llvm.mips.msubv.b
+    1, // llvm.mips.msubv.d
+    1, // llvm.mips.msubv.h
+    1, // llvm.mips.msubv.w
+    3, // llvm.mips.mthlip
+    3, // llvm.mips.mul.ph
+    1, // llvm.mips.mul.q.h
+    1, // llvm.mips.mul.q.w
+    3, // llvm.mips.mul.s.ph
+    3, // llvm.mips.muleq.s.w.phl
+    3, // llvm.mips.muleq.s.w.phr
+    3, // llvm.mips.muleu.s.ph.qbl
+    3, // llvm.mips.muleu.s.ph.qbr
+    3, // llvm.mips.mulq.rs.ph
+    3, // llvm.mips.mulq.rs.w
+    3, // llvm.mips.mulq.s.ph
+    3, // llvm.mips.mulq.s.w
+    1, // llvm.mips.mulr.q.h
+    1, // llvm.mips.mulr.q.w
+    1, // llvm.mips.mulsa.w.ph
+    3, // llvm.mips.mulsaq.s.w.ph
+    1, // llvm.mips.mult
+    1, // llvm.mips.multu
+    1, // llvm.mips.mulv.b
+    1, // llvm.mips.mulv.d
+    1, // llvm.mips.mulv.h
+    1, // llvm.mips.mulv.w
+    1, // llvm.mips.nloc.b
+    1, // llvm.mips.nloc.d
+    1, // llvm.mips.nloc.h
+    1, // llvm.mips.nloc.w
+    1, // llvm.mips.nlzc.b
+    1, // llvm.mips.nlzc.d
+    1, // llvm.mips.nlzc.h
+    1, // llvm.mips.nlzc.w
+    1, // llvm.mips.nor.v
+    1, // llvm.mips.nori.b
+    1, // llvm.mips.or.v
+    1, // llvm.mips.ori.b
+    1, // llvm.mips.packrl.ph
+    1, // llvm.mips.pckev.b
+    1, // llvm.mips.pckev.d
+    1, // llvm.mips.pckev.h
+    1, // llvm.mips.pckev.w
+    1, // llvm.mips.pckod.b
+    1, // llvm.mips.pckod.d
+    1, // llvm.mips.pckod.h
+    1, // llvm.mips.pckod.w
+    1, // llvm.mips.pcnt.b
+    1, // llvm.mips.pcnt.d
+    1, // llvm.mips.pcnt.h
+    1, // llvm.mips.pcnt.w
+    16, // llvm.mips.pick.ph
+    16, // llvm.mips.pick.qb
+    1, // llvm.mips.preceq.w.phl
+    1, // llvm.mips.preceq.w.phr
+    1, // llvm.mips.precequ.ph.qbl
+    1, // llvm.mips.precequ.ph.qbla
+    1, // llvm.mips.precequ.ph.qbr
+    1, // llvm.mips.precequ.ph.qbra
+    1, // llvm.mips.preceu.ph.qbl
+    1, // llvm.mips.preceu.ph.qbla
+    1, // llvm.mips.preceu.ph.qbr
+    1, // llvm.mips.preceu.ph.qbra
+    3, // llvm.mips.precr.qb.ph
+    1, // llvm.mips.precr.sra.ph.w
+    1, // llvm.mips.precr.sra.r.ph.w
+    1, // llvm.mips.precrq.ph.w
+    1, // llvm.mips.precrq.qb.ph
+    3, // llvm.mips.precrq.rs.ph.w
+    3, // llvm.mips.precrqu.s.qb.ph
+    1, // llvm.mips.prepend
+    1, // llvm.mips.raddu.w.qb
+    16, // llvm.mips.rddsp
+    1, // llvm.mips.repl.ph
+    1, // llvm.mips.repl.qb
+    1, // llvm.mips.sat.s.b
+    1, // llvm.mips.sat.s.d
+    1, // llvm.mips.sat.s.h
+    1, // llvm.mips.sat.s.w
+    1, // llvm.mips.sat.u.b
+    1, // llvm.mips.sat.u.d
+    1, // llvm.mips.sat.u.h
+    1, // llvm.mips.sat.u.w
+    1, // llvm.mips.shf.b
+    1, // llvm.mips.shf.h
+    1, // llvm.mips.shf.w
+    1, // llvm.mips.shilo
+    3, // llvm.mips.shll.ph
+    3, // llvm.mips.shll.qb
+    3, // llvm.mips.shll.s.ph
+    3, // llvm.mips.shll.s.w
+    1, // llvm.mips.shra.ph
+    1, // llvm.mips.shra.qb
+    1, // llvm.mips.shra.r.ph
+    1, // llvm.mips.shra.r.qb
+    1, // llvm.mips.shra.r.w
+    1, // llvm.mips.shrl.ph
+    1, // llvm.mips.shrl.qb
+    1, // llvm.mips.sld.b
+    1, // llvm.mips.sld.d
+    1, // llvm.mips.sld.h
+    1, // llvm.mips.sld.w
+    1, // llvm.mips.sldi.b
+    1, // llvm.mips.sldi.d
+    1, // llvm.mips.sldi.h
+    1, // llvm.mips.sldi.w
+    1, // llvm.mips.sll.b
+    1, // llvm.mips.sll.d
+    1, // llvm.mips.sll.h
+    1, // llvm.mips.sll.w
+    1, // llvm.mips.slli.b
+    1, // llvm.mips.slli.d
+    1, // llvm.mips.slli.h
+    1, // llvm.mips.slli.w
+    1, // llvm.mips.splat.b
+    1, // llvm.mips.splat.d
+    1, // llvm.mips.splat.h
+    1, // llvm.mips.splat.w
+    1, // llvm.mips.splati.b
+    1, // llvm.mips.splati.d
+    1, // llvm.mips.splati.h
+    1, // llvm.mips.splati.w
+    1, // llvm.mips.sra.b
+    1, // llvm.mips.sra.d
+    1, // llvm.mips.sra.h
+    1, // llvm.mips.sra.w
+    1, // llvm.mips.srai.b
+    1, // llvm.mips.srai.d
+    1, // llvm.mips.srai.h
+    1, // llvm.mips.srai.w
+    1, // llvm.mips.srar.b
+    1, // llvm.mips.srar.d
+    1, // llvm.mips.srar.h
+    1, // llvm.mips.srar.w
+    1, // llvm.mips.srari.b
+    1, // llvm.mips.srari.d
+    1, // llvm.mips.srari.h
+    1, // llvm.mips.srari.w
+    1, // llvm.mips.srl.b
+    1, // llvm.mips.srl.d
+    1, // llvm.mips.srl.h
+    1, // llvm.mips.srl.w
+    1, // llvm.mips.srli.b
+    1, // llvm.mips.srli.d
+    1, // llvm.mips.srli.h
+    1, // llvm.mips.srli.w
+    1, // llvm.mips.srlr.b
+    1, // llvm.mips.srlr.d
+    1, // llvm.mips.srlr.h
+    1, // llvm.mips.srlr.w
+    1, // llvm.mips.srlri.b
+    1, // llvm.mips.srlri.d
+    1, // llvm.mips.srlri.h
+    1, // llvm.mips.srlri.w
+    22, // llvm.mips.st.b
+    22, // llvm.mips.st.d
+    22, // llvm.mips.st.h
+    22, // llvm.mips.st.w
+    1, // llvm.mips.subq.ph
+    1, // llvm.mips.subq.s.ph
+    3, // llvm.mips.subq.s.w
+    1, // llvm.mips.subqh.ph
+    1, // llvm.mips.subqh.r.ph
+    1, // llvm.mips.subqh.r.w
+    1, // llvm.mips.subqh.w
+    1, // llvm.mips.subs.s.b
+    1, // llvm.mips.subs.s.d
+    1, // llvm.mips.subs.s.h
+    1, // llvm.mips.subs.s.w
+    1, // llvm.mips.subs.u.b
+    1, // llvm.mips.subs.u.d
+    1, // llvm.mips.subs.u.h
+    1, // llvm.mips.subs.u.w
+    1, // llvm.mips.subsus.u.b
+    1, // llvm.mips.subsus.u.d
+    1, // llvm.mips.subsus.u.h
+    1, // llvm.mips.subsus.u.w
+    1, // llvm.mips.subsuu.s.b
+    1, // llvm.mips.subsuu.s.d
+    1, // llvm.mips.subsuu.s.h
+    1, // llvm.mips.subsuu.s.w
+    3, // llvm.mips.subu.ph
+    1, // llvm.mips.subu.qb
+    3, // llvm.mips.subu.s.ph
+    1, // llvm.mips.subu.s.qb
+    1, // llvm.mips.subuh.qb
+    1, // llvm.mips.subuh.r.qb
+    1, // llvm.mips.subv.b
+    1, // llvm.mips.subv.d
+    1, // llvm.mips.subv.h
+    1, // llvm.mips.subv.w
+    1, // llvm.mips.subvi.b
+    1, // llvm.mips.subvi.d
+    1, // llvm.mips.subvi.h
+    1, // llvm.mips.subvi.w
+    1, // llvm.mips.vshf.b
+    1, // llvm.mips.vshf.d
+    1, // llvm.mips.vshf.h
+    1, // llvm.mips.vshf.w
+    3, // llvm.mips.wrdsp
+    1, // llvm.mips.xor.v
+    1, // llvm.mips.xori.b
+    1, // llvm.nvvm.add.rm.d
+    1, // llvm.nvvm.add.rm.f
+    1, // llvm.nvvm.add.rm.ftz.f
+    1, // llvm.nvvm.add.rn.d
+    1, // llvm.nvvm.add.rn.f
+    1, // llvm.nvvm.add.rn.ftz.f
+    1, // llvm.nvvm.add.rp.d
+    1, // llvm.nvvm.add.rp.f
+    1, // llvm.nvvm.add.rp.ftz.f
+    1, // llvm.nvvm.add.rz.d
+    1, // llvm.nvvm.add.rz.f
+    1, // llvm.nvvm.add.rz.ftz.f
+    18, // llvm.nvvm.atomic.add.gen.f.cta
+    18, // llvm.nvvm.atomic.add.gen.f.sys
+    18, // llvm.nvvm.atomic.add.gen.i.cta
+    18, // llvm.nvvm.atomic.add.gen.i.sys
+    18, // llvm.nvvm.atomic.and.gen.i.cta
+    18, // llvm.nvvm.atomic.and.gen.i.sys
+    18, // llvm.nvvm.atomic.cas.gen.i.cta
+    18, // llvm.nvvm.atomic.cas.gen.i.sys
+    18, // llvm.nvvm.atomic.dec.gen.i.cta
+    18, // llvm.nvvm.atomic.dec.gen.i.sys
+    18, // llvm.nvvm.atomic.exch.gen.i.cta
+    18, // llvm.nvvm.atomic.exch.gen.i.sys
+    18, // llvm.nvvm.atomic.inc.gen.i.cta
+    18, // llvm.nvvm.atomic.inc.gen.i.sys
+    18, // llvm.nvvm.atomic.load.add.f32
+    18, // llvm.nvvm.atomic.load.add.f64
+    18, // llvm.nvvm.atomic.load.dec.32
+    18, // llvm.nvvm.atomic.load.inc.32
+    18, // llvm.nvvm.atomic.max.gen.i.cta
+    18, // llvm.nvvm.atomic.max.gen.i.sys
+    18, // llvm.nvvm.atomic.min.gen.i.cta
+    18, // llvm.nvvm.atomic.min.gen.i.sys
+    18, // llvm.nvvm.atomic.or.gen.i.cta
+    18, // llvm.nvvm.atomic.or.gen.i.sys
+    18, // llvm.nvvm.atomic.xor.gen.i.cta
+    18, // llvm.nvvm.atomic.xor.gen.i.sys
+    35, // llvm.nvvm.bar.sync
+    35, // llvm.nvvm.bar.warp.sync
+    35, // llvm.nvvm.barrier
+    35, // llvm.nvvm.barrier.n
+    35, // llvm.nvvm.barrier.sync
+    35, // llvm.nvvm.barrier.sync.cnt
+    35, // llvm.nvvm.barrier0
+    35, // llvm.nvvm.barrier0.and
+    35, // llvm.nvvm.barrier0.or
+    35, // llvm.nvvm.barrier0.popc
+    1, // llvm.nvvm.bitcast.d2ll
+    1, // llvm.nvvm.bitcast.f2i
+    1, // llvm.nvvm.bitcast.i2f
+    1, // llvm.nvvm.bitcast.ll2d
+    1, // llvm.nvvm.ceil.d
+    1, // llvm.nvvm.ceil.f
+    1, // llvm.nvvm.ceil.ftz.f
+    3, // llvm.nvvm.compiler.error
+    3, // llvm.nvvm.compiler.warn
+    1, // llvm.nvvm.cos.approx.f
+    1, // llvm.nvvm.cos.approx.ftz.f
+    1, // llvm.nvvm.d2f.rm
+    1, // llvm.nvvm.d2f.rm.ftz
+    1, // llvm.nvvm.d2f.rn
+    1, // llvm.nvvm.d2f.rn.ftz
+    1, // llvm.nvvm.d2f.rp
+    1, // llvm.nvvm.d2f.rp.ftz
+    1, // llvm.nvvm.d2f.rz
+    1, // llvm.nvvm.d2f.rz.ftz
+    1, // llvm.nvvm.d2i.hi
+    1, // llvm.nvvm.d2i.lo
+    1, // llvm.nvvm.d2i.rm
+    1, // llvm.nvvm.d2i.rn
+    1, // llvm.nvvm.d2i.rp
+    1, // llvm.nvvm.d2i.rz
+    1, // llvm.nvvm.d2ll.rm
+    1, // llvm.nvvm.d2ll.rn
+    1, // llvm.nvvm.d2ll.rp
+    1, // llvm.nvvm.d2ll.rz
+    1, // llvm.nvvm.d2ui.rm
+    1, // llvm.nvvm.d2ui.rn
+    1, // llvm.nvvm.d2ui.rp
+    1, // llvm.nvvm.d2ui.rz
+    1, // llvm.nvvm.d2ull.rm
+    1, // llvm.nvvm.d2ull.rn
+    1, // llvm.nvvm.d2ull.rp
+    1, // llvm.nvvm.d2ull.rz
+    1, // llvm.nvvm.div.approx.f
+    1, // llvm.nvvm.div.approx.ftz.f
+    1, // llvm.nvvm.div.rm.d
+    1, // llvm.nvvm.div.rm.f
+    1, // llvm.nvvm.div.rm.ftz.f
+    1, // llvm.nvvm.div.rn.d
+    1, // llvm.nvvm.div.rn.f
+    1, // llvm.nvvm.div.rn.ftz.f
+    1, // llvm.nvvm.div.rp.d
+    1, // llvm.nvvm.div.rp.f
+    1, // llvm.nvvm.div.rp.ftz.f
+    1, // llvm.nvvm.div.rz.d
+    1, // llvm.nvvm.div.rz.f
+    1, // llvm.nvvm.div.rz.ftz.f
+    1, // llvm.nvvm.ex2.approx.d
+    1, // llvm.nvvm.ex2.approx.f
+    1, // llvm.nvvm.ex2.approx.ftz.f
+    1, // llvm.nvvm.f2h.rn
+    1, // llvm.nvvm.f2h.rn.ftz
+    1, // llvm.nvvm.f2i.rm
+    1, // llvm.nvvm.f2i.rm.ftz
+    1, // llvm.nvvm.f2i.rn
+    1, // llvm.nvvm.f2i.rn.ftz
+    1, // llvm.nvvm.f2i.rp
+    1, // llvm.nvvm.f2i.rp.ftz
+    1, // llvm.nvvm.f2i.rz
+    1, // llvm.nvvm.f2i.rz.ftz
+    1, // llvm.nvvm.f2ll.rm
+    1, // llvm.nvvm.f2ll.rm.ftz
+    1, // llvm.nvvm.f2ll.rn
+    1, // llvm.nvvm.f2ll.rn.ftz
+    1, // llvm.nvvm.f2ll.rp
+    1, // llvm.nvvm.f2ll.rp.ftz
+    1, // llvm.nvvm.f2ll.rz
+    1, // llvm.nvvm.f2ll.rz.ftz
+    1, // llvm.nvvm.f2ui.rm
+    1, // llvm.nvvm.f2ui.rm.ftz
+    1, // llvm.nvvm.f2ui.rn
+    1, // llvm.nvvm.f2ui.rn.ftz
+    1, // llvm.nvvm.f2ui.rp
+    1, // llvm.nvvm.f2ui.rp.ftz
+    1, // llvm.nvvm.f2ui.rz
+    1, // llvm.nvvm.f2ui.rz.ftz
+    1, // llvm.nvvm.f2ull.rm
+    1, // llvm.nvvm.f2ull.rm.ftz
+    1, // llvm.nvvm.f2ull.rn
+    1, // llvm.nvvm.f2ull.rn.ftz
+    1, // llvm.nvvm.f2ull.rp
+    1, // llvm.nvvm.f2ull.rp.ftz
+    1, // llvm.nvvm.f2ull.rz
+    1, // llvm.nvvm.f2ull.rz.ftz
+    1, // llvm.nvvm.fabs.d
+    1, // llvm.nvvm.fabs.f
+    1, // llvm.nvvm.fabs.ftz.f
+    1, // llvm.nvvm.floor.d
+    1, // llvm.nvvm.floor.f
+    1, // llvm.nvvm.floor.ftz.f
+    1, // llvm.nvvm.fma.rm.d
+    1, // llvm.nvvm.fma.rm.f
+    1, // llvm.nvvm.fma.rm.ftz.f
+    1, // llvm.nvvm.fma.rn.d
+    1, // llvm.nvvm.fma.rn.f
+    1, // llvm.nvvm.fma.rn.ftz.f
+    1, // llvm.nvvm.fma.rp.d
+    1, // llvm.nvvm.fma.rp.f
+    1, // llvm.nvvm.fma.rp.ftz.f
+    1, // llvm.nvvm.fma.rz.d
+    1, // llvm.nvvm.fma.rz.f
+    1, // llvm.nvvm.fma.rz.ftz.f
+    1, // llvm.nvvm.fmax.d
+    1, // llvm.nvvm.fmax.f
+    1, // llvm.nvvm.fmax.ftz.f
+    1, // llvm.nvvm.fmin.d
+    1, // llvm.nvvm.fmin.f
+    1, // llvm.nvvm.fmin.ftz.f
+    1, // llvm.nvvm.fns
+    1, // llvm.nvvm.i2d.rm
+    1, // llvm.nvvm.i2d.rn
+    1, // llvm.nvvm.i2d.rp
+    1, // llvm.nvvm.i2d.rz
+    1, // llvm.nvvm.i2f.rm
+    1, // llvm.nvvm.i2f.rn
+    1, // llvm.nvvm.i2f.rp
+    1, // llvm.nvvm.i2f.rz
+    1, // llvm.nvvm.isspacep.const
+    1, // llvm.nvvm.isspacep.global
+    1, // llvm.nvvm.isspacep.local
+    1, // llvm.nvvm.isspacep.shared
+    1, // llvm.nvvm.istypep.sampler
+    1, // llvm.nvvm.istypep.surface
+    1, // llvm.nvvm.istypep.texture
+    39, // llvm.nvvm.ldg.global.f
+    39, // llvm.nvvm.ldg.global.i
+    39, // llvm.nvvm.ldg.global.p
+    39, // llvm.nvvm.ldu.global.f
+    39, // llvm.nvvm.ldu.global.i
+    39, // llvm.nvvm.ldu.global.p
+    1, // llvm.nvvm.lg2.approx.d
+    1, // llvm.nvvm.lg2.approx.f
+    1, // llvm.nvvm.lg2.approx.ftz.f
+    1, // llvm.nvvm.ll2d.rm
+    1, // llvm.nvvm.ll2d.rn
+    1, // llvm.nvvm.ll2d.rp
+    1, // llvm.nvvm.ll2d.rz
+    1, // llvm.nvvm.ll2f.rm
+    1, // llvm.nvvm.ll2f.rn
+    1, // llvm.nvvm.ll2f.rp
+    1, // llvm.nvvm.ll2f.rz
+    1, // llvm.nvvm.lohi.i2d
+    40, // llvm.nvvm.match.all.sync.i32p
+    40, // llvm.nvvm.match.all.sync.i64p
+    40, // llvm.nvvm.match.any.sync.i32
+    40, // llvm.nvvm.match.any.sync.i64
+    3, // llvm.nvvm.membar.cta
+    3, // llvm.nvvm.membar.gl
+    3, // llvm.nvvm.membar.sys
+    1, // llvm.nvvm.move.double
+    1, // llvm.nvvm.move.float
+    1, // llvm.nvvm.move.i16
+    1, // llvm.nvvm.move.i32
+    1, // llvm.nvvm.move.i64
+    12, // llvm.nvvm.move.ptr
+    1, // llvm.nvvm.mul.rm.d
+    1, // llvm.nvvm.mul.rm.f
+    1, // llvm.nvvm.mul.rm.ftz.f
+    1, // llvm.nvvm.mul.rn.d
+    1, // llvm.nvvm.mul.rn.f
+    1, // llvm.nvvm.mul.rn.ftz.f
+    1, // llvm.nvvm.mul.rp.d
+    1, // llvm.nvvm.mul.rp.f
+    1, // llvm.nvvm.mul.rp.ftz.f
+    1, // llvm.nvvm.mul.rz.d
+    1, // llvm.nvvm.mul.rz.f
+    1, // llvm.nvvm.mul.rz.ftz.f
+    1, // llvm.nvvm.mul24.i
+    1, // llvm.nvvm.mul24.ui
+    1, // llvm.nvvm.mulhi.i
+    1, // llvm.nvvm.mulhi.ll
+    1, // llvm.nvvm.mulhi.ui
+    1, // llvm.nvvm.mulhi.ull
+    1, // llvm.nvvm.prmt
+    1, // llvm.nvvm.ptr.constant.to.gen
+    1, // llvm.nvvm.ptr.gen.to.constant
+    1, // llvm.nvvm.ptr.gen.to.global
+    1, // llvm.nvvm.ptr.gen.to.local
+    1, // llvm.nvvm.ptr.gen.to.param
+    1, // llvm.nvvm.ptr.gen.to.shared
+    1, // llvm.nvvm.ptr.global.to.gen
+    1, // llvm.nvvm.ptr.local.to.gen
+    1, // llvm.nvvm.ptr.shared.to.gen
+    1, // llvm.nvvm.rcp.approx.ftz.d
+    1, // llvm.nvvm.rcp.rm.d
+    1, // llvm.nvvm.rcp.rm.f
+    1, // llvm.nvvm.rcp.rm.ftz.f
+    1, // llvm.nvvm.rcp.rn.d
+    1, // llvm.nvvm.rcp.rn.f
+    1, // llvm.nvvm.rcp.rn.ftz.f
+    1, // llvm.nvvm.rcp.rp.d
+    1, // llvm.nvvm.rcp.rp.f
+    1, // llvm.nvvm.rcp.rp.ftz.f
+    1, // llvm.nvvm.rcp.rz.d
+    1, // llvm.nvvm.rcp.rz.f
+    1, // llvm.nvvm.rcp.rz.ftz.f
+    1, // llvm.nvvm.read.ptx.sreg.clock
+    1, // llvm.nvvm.read.ptx.sreg.clock64
+    1, // llvm.nvvm.read.ptx.sreg.ctaid.w
+    1, // llvm.nvvm.read.ptx.sreg.ctaid.x
+    1, // llvm.nvvm.read.ptx.sreg.ctaid.y
+    1, // llvm.nvvm.read.ptx.sreg.ctaid.z
+    1, // llvm.nvvm.read.ptx.sreg.envreg0
+    1, // llvm.nvvm.read.ptx.sreg.envreg1
+    1, // llvm.nvvm.read.ptx.sreg.envreg10
+    1, // llvm.nvvm.read.ptx.sreg.envreg11
+    1, // llvm.nvvm.read.ptx.sreg.envreg12
+    1, // llvm.nvvm.read.ptx.sreg.envreg13
+    1, // llvm.nvvm.read.ptx.sreg.envreg14
+    1, // llvm.nvvm.read.ptx.sreg.envreg15
+    1, // llvm.nvvm.read.ptx.sreg.envreg16
+    1, // llvm.nvvm.read.ptx.sreg.envreg17
+    1, // llvm.nvvm.read.ptx.sreg.envreg18
+    1, // llvm.nvvm.read.ptx.sreg.envreg19
+    1, // llvm.nvvm.read.ptx.sreg.envreg2
+    1, // llvm.nvvm.read.ptx.sreg.envreg20
+    1, // llvm.nvvm.read.ptx.sreg.envreg21
+    1, // llvm.nvvm.read.ptx.sreg.envreg22
+    1, // llvm.nvvm.read.ptx.sreg.envreg23
+    1, // llvm.nvvm.read.ptx.sreg.envreg24
+    1, // llvm.nvvm.read.ptx.sreg.envreg25
+    1, // llvm.nvvm.read.ptx.sreg.envreg26
+    1, // llvm.nvvm.read.ptx.sreg.envreg27
+    1, // llvm.nvvm.read.ptx.sreg.envreg28
+    1, // llvm.nvvm.read.ptx.sreg.envreg29
+    1, // llvm.nvvm.read.ptx.sreg.envreg3
+    1, // llvm.nvvm.read.ptx.sreg.envreg30
+    1, // llvm.nvvm.read.ptx.sreg.envreg31
+    1, // llvm.nvvm.read.ptx.sreg.envreg4
+    1, // llvm.nvvm.read.ptx.sreg.envreg5
+    1, // llvm.nvvm.read.ptx.sreg.envreg6
+    1, // llvm.nvvm.read.ptx.sreg.envreg7
+    1, // llvm.nvvm.read.ptx.sreg.envreg8
+    1, // llvm.nvvm.read.ptx.sreg.envreg9
+    1, // llvm.nvvm.read.ptx.sreg.gridid
+    1, // llvm.nvvm.read.ptx.sreg.laneid
+    1, // llvm.nvvm.read.ptx.sreg.lanemask.eq
+    1, // llvm.nvvm.read.ptx.sreg.lanemask.ge
+    1, // llvm.nvvm.read.ptx.sreg.lanemask.gt
+    1, // llvm.nvvm.read.ptx.sreg.lanemask.le
+    1, // llvm.nvvm.read.ptx.sreg.lanemask.lt
+    1, // llvm.nvvm.read.ptx.sreg.nctaid.w
+    1, // llvm.nvvm.read.ptx.sreg.nctaid.x
+    1, // llvm.nvvm.read.ptx.sreg.nctaid.y
+    1, // llvm.nvvm.read.ptx.sreg.nctaid.z
+    1, // llvm.nvvm.read.ptx.sreg.nsmid
+    1, // llvm.nvvm.read.ptx.sreg.ntid.w
+    1, // llvm.nvvm.read.ptx.sreg.ntid.x
+    1, // llvm.nvvm.read.ptx.sreg.ntid.y
+    1, // llvm.nvvm.read.ptx.sreg.ntid.z
+    1, // llvm.nvvm.read.ptx.sreg.nwarpid
+    1, // llvm.nvvm.read.ptx.sreg.pm0
+    1, // llvm.nvvm.read.ptx.sreg.pm1
+    1, // llvm.nvvm.read.ptx.sreg.pm2
+    1, // llvm.nvvm.read.ptx.sreg.pm3
+    1, // llvm.nvvm.read.ptx.sreg.smid
+    1, // llvm.nvvm.read.ptx.sreg.tid.w
+    1, // llvm.nvvm.read.ptx.sreg.tid.x
+    1, // llvm.nvvm.read.ptx.sreg.tid.y
+    1, // llvm.nvvm.read.ptx.sreg.tid.z
+    1, // llvm.nvvm.read.ptx.sreg.warpid
+    1, // llvm.nvvm.read.ptx.sreg.warpsize
+    1, // llvm.nvvm.reflect
+    1, // llvm.nvvm.rotate.b32
+    1, // llvm.nvvm.rotate.b64
+    1, // llvm.nvvm.rotate.right.b64
+    1, // llvm.nvvm.round.d
+    1, // llvm.nvvm.round.f
+    1, // llvm.nvvm.round.ftz.f
+    1, // llvm.nvvm.rsqrt.approx.d
+    1, // llvm.nvvm.rsqrt.approx.f
+    1, // llvm.nvvm.rsqrt.approx.ftz.f
+    1, // llvm.nvvm.sad.i
+    1, // llvm.nvvm.sad.ui
+    1, // llvm.nvvm.saturate.d
+    1, // llvm.nvvm.saturate.f
+    1, // llvm.nvvm.saturate.ftz.f
+    40, // llvm.nvvm.shfl.bfly.f32
+    40, // llvm.nvvm.shfl.bfly.i32
+    40, // llvm.nvvm.shfl.down.f32
+    40, // llvm.nvvm.shfl.down.i32
+    40, // llvm.nvvm.shfl.idx.f32
+    40, // llvm.nvvm.shfl.idx.i32
+    40, // llvm.nvvm.shfl.sync.bfly.f32
+    40, // llvm.nvvm.shfl.sync.bfly.i32
+    40, // llvm.nvvm.shfl.sync.down.f32
+    40, // llvm.nvvm.shfl.sync.down.i32
+    40, // llvm.nvvm.shfl.sync.idx.f32
+    40, // llvm.nvvm.shfl.sync.idx.i32
+    40, // llvm.nvvm.shfl.sync.up.f32
+    40, // llvm.nvvm.shfl.sync.up.i32
+    40, // llvm.nvvm.shfl.up.f32
+    40, // llvm.nvvm.shfl.up.i32
+    1, // llvm.nvvm.sin.approx.f
+    1, // llvm.nvvm.sin.approx.ftz.f
+    1, // llvm.nvvm.sqrt.approx.f
+    1, // llvm.nvvm.sqrt.approx.ftz.f
+    1, // llvm.nvvm.sqrt.f
+    1, // llvm.nvvm.sqrt.rm.d
+    1, // llvm.nvvm.sqrt.rm.f
+    1, // llvm.nvvm.sqrt.rm.ftz.f
+    1, // llvm.nvvm.sqrt.rn.d
+    1, // llvm.nvvm.sqrt.rn.f
+    1, // llvm.nvvm.sqrt.rn.ftz.f
+    1, // llvm.nvvm.sqrt.rp.d
+    1, // llvm.nvvm.sqrt.rp.f
+    1, // llvm.nvvm.sqrt.rp.ftz.f
+    1, // llvm.nvvm.sqrt.rz.d
+    1, // llvm.nvvm.sqrt.rz.f
+    1, // llvm.nvvm.sqrt.rz.ftz.f
+    3, // llvm.nvvm.suld.1d.array.i16.clamp
+    3, // llvm.nvvm.suld.1d.array.i16.trap
+    3, // llvm.nvvm.suld.1d.array.i16.zero
+    3, // llvm.nvvm.suld.1d.array.i32.clamp
+    3, // llvm.nvvm.suld.1d.array.i32.trap
+    3, // llvm.nvvm.suld.1d.array.i32.zero
+    3, // llvm.nvvm.suld.1d.array.i64.clamp
+    3, // llvm.nvvm.suld.1d.array.i64.trap
+    3, // llvm.nvvm.suld.1d.array.i64.zero
+    3, // llvm.nvvm.suld.1d.array.i8.clamp
+    3, // llvm.nvvm.suld.1d.array.i8.trap
+    3, // llvm.nvvm.suld.1d.array.i8.zero
+    3, // llvm.nvvm.suld.1d.array.v2i16.clamp
+    3, // llvm.nvvm.suld.1d.array.v2i16.trap
+    3, // llvm.nvvm.suld.1d.array.v2i16.zero
+    3, // llvm.nvvm.suld.1d.array.v2i32.clamp
+    3, // llvm.nvvm.suld.1d.array.v2i32.trap
+    3, // llvm.nvvm.suld.1d.array.v2i32.zero
+    3, // llvm.nvvm.suld.1d.array.v2i64.clamp
+    3, // llvm.nvvm.suld.1d.array.v2i64.trap
+    3, // llvm.nvvm.suld.1d.array.v2i64.zero
+    3, // llvm.nvvm.suld.1d.array.v2i8.clamp
+    3, // llvm.nvvm.suld.1d.array.v2i8.trap
+    3, // llvm.nvvm.suld.1d.array.v2i8.zero
+    3, // llvm.nvvm.suld.1d.array.v4i16.clamp
+    3, // llvm.nvvm.suld.1d.array.v4i16.trap
+    3, // llvm.nvvm.suld.1d.array.v4i16.zero
+    3, // llvm.nvvm.suld.1d.array.v4i32.clamp
+    3, // llvm.nvvm.suld.1d.array.v4i32.trap
+    3, // llvm.nvvm.suld.1d.array.v4i32.zero
+    3, // llvm.nvvm.suld.1d.array.v4i8.clamp
+    3, // llvm.nvvm.suld.1d.array.v4i8.trap
+    3, // llvm.nvvm.suld.1d.array.v4i8.zero
+    3, // llvm.nvvm.suld.1d.i16.clamp
+    3, // llvm.nvvm.suld.1d.i16.trap
+    3, // llvm.nvvm.suld.1d.i16.zero
+    3, // llvm.nvvm.suld.1d.i32.clamp
+    3, // llvm.nvvm.suld.1d.i32.trap
+    3, // llvm.nvvm.suld.1d.i32.zero
+    3, // llvm.nvvm.suld.1d.i64.clamp
+    3, // llvm.nvvm.suld.1d.i64.trap
+    3, // llvm.nvvm.suld.1d.i64.zero
+    3, // llvm.nvvm.suld.1d.i8.clamp
+    3, // llvm.nvvm.suld.1d.i8.trap
+    3, // llvm.nvvm.suld.1d.i8.zero
+    3, // llvm.nvvm.suld.1d.v2i16.clamp
+    3, // llvm.nvvm.suld.1d.v2i16.trap
+    3, // llvm.nvvm.suld.1d.v2i16.zero
+    3, // llvm.nvvm.suld.1d.v2i32.clamp
+    3, // llvm.nvvm.suld.1d.v2i32.trap
+    3, // llvm.nvvm.suld.1d.v2i32.zero
+    3, // llvm.nvvm.suld.1d.v2i64.clamp
+    3, // llvm.nvvm.suld.1d.v2i64.trap
+    3, // llvm.nvvm.suld.1d.v2i64.zero
+    3, // llvm.nvvm.suld.1d.v2i8.clamp
+    3, // llvm.nvvm.suld.1d.v2i8.trap
+    3, // llvm.nvvm.suld.1d.v2i8.zero
+    3, // llvm.nvvm.suld.1d.v4i16.clamp
+    3, // llvm.nvvm.suld.1d.v4i16.trap
+    3, // llvm.nvvm.suld.1d.v4i16.zero
+    3, // llvm.nvvm.suld.1d.v4i32.clamp
+    3, // llvm.nvvm.suld.1d.v4i32.trap
+    3, // llvm.nvvm.suld.1d.v4i32.zero
+    3, // llvm.nvvm.suld.1d.v4i8.clamp
+    3, // llvm.nvvm.suld.1d.v4i8.trap
+    3, // llvm.nvvm.suld.1d.v4i8.zero
+    3, // llvm.nvvm.suld.2d.array.i16.clamp
+    3, // llvm.nvvm.suld.2d.array.i16.trap
+    3, // llvm.nvvm.suld.2d.array.i16.zero
+    3, // llvm.nvvm.suld.2d.array.i32.clamp
+    3, // llvm.nvvm.suld.2d.array.i32.trap
+    3, // llvm.nvvm.suld.2d.array.i32.zero
+    3, // llvm.nvvm.suld.2d.array.i64.clamp
+    3, // llvm.nvvm.suld.2d.array.i64.trap
+    3, // llvm.nvvm.suld.2d.array.i64.zero
+    3, // llvm.nvvm.suld.2d.array.i8.clamp
+    3, // llvm.nvvm.suld.2d.array.i8.trap
+    3, // llvm.nvvm.suld.2d.array.i8.zero
+    3, // llvm.nvvm.suld.2d.array.v2i16.clamp
+    3, // llvm.nvvm.suld.2d.array.v2i16.trap
+    3, // llvm.nvvm.suld.2d.array.v2i16.zero
+    3, // llvm.nvvm.suld.2d.array.v2i32.clamp
+    3, // llvm.nvvm.suld.2d.array.v2i32.trap
+    3, // llvm.nvvm.suld.2d.array.v2i32.zero
+    3, // llvm.nvvm.suld.2d.array.v2i64.clamp
+    3, // llvm.nvvm.suld.2d.array.v2i64.trap
+    3, // llvm.nvvm.suld.2d.array.v2i64.zero
+    3, // llvm.nvvm.suld.2d.array.v2i8.clamp
+    3, // llvm.nvvm.suld.2d.array.v2i8.trap
+    3, // llvm.nvvm.suld.2d.array.v2i8.zero
+    3, // llvm.nvvm.suld.2d.array.v4i16.clamp
+    3, // llvm.nvvm.suld.2d.array.v4i16.trap
+    3, // llvm.nvvm.suld.2d.array.v4i16.zero
+    3, // llvm.nvvm.suld.2d.array.v4i32.clamp
+    3, // llvm.nvvm.suld.2d.array.v4i32.trap
+    3, // llvm.nvvm.suld.2d.array.v4i32.zero
+    3, // llvm.nvvm.suld.2d.array.v4i8.clamp
+    3, // llvm.nvvm.suld.2d.array.v4i8.trap
+    3, // llvm.nvvm.suld.2d.array.v4i8.zero
+    3, // llvm.nvvm.suld.2d.i16.clamp
+    3, // llvm.nvvm.suld.2d.i16.trap
+    3, // llvm.nvvm.suld.2d.i16.zero
+    3, // llvm.nvvm.suld.2d.i32.clamp
+    3, // llvm.nvvm.suld.2d.i32.trap
+    3, // llvm.nvvm.suld.2d.i32.zero
+    3, // llvm.nvvm.suld.2d.i64.clamp
+    3, // llvm.nvvm.suld.2d.i64.trap
+    3, // llvm.nvvm.suld.2d.i64.zero
+    3, // llvm.nvvm.suld.2d.i8.clamp
+    3, // llvm.nvvm.suld.2d.i8.trap
+    3, // llvm.nvvm.suld.2d.i8.zero
+    3, // llvm.nvvm.suld.2d.v2i16.clamp
+    3, // llvm.nvvm.suld.2d.v2i16.trap
+    3, // llvm.nvvm.suld.2d.v2i16.zero
+    3, // llvm.nvvm.suld.2d.v2i32.clamp
+    3, // llvm.nvvm.suld.2d.v2i32.trap
+    3, // llvm.nvvm.suld.2d.v2i32.zero
+    3, // llvm.nvvm.suld.2d.v2i64.clamp
+    3, // llvm.nvvm.suld.2d.v2i64.trap
+    3, // llvm.nvvm.suld.2d.v2i64.zero
+    3, // llvm.nvvm.suld.2d.v2i8.clamp
+    3, // llvm.nvvm.suld.2d.v2i8.trap
+    3, // llvm.nvvm.suld.2d.v2i8.zero
+    3, // llvm.nvvm.suld.2d.v4i16.clamp
+    3, // llvm.nvvm.suld.2d.v4i16.trap
+    3, // llvm.nvvm.suld.2d.v4i16.zero
+    3, // llvm.nvvm.suld.2d.v4i32.clamp
+    3, // llvm.nvvm.suld.2d.v4i32.trap
+    3, // llvm.nvvm.suld.2d.v4i32.zero
+    3, // llvm.nvvm.suld.2d.v4i8.clamp
+    3, // llvm.nvvm.suld.2d.v4i8.trap
+    3, // llvm.nvvm.suld.2d.v4i8.zero
+    3, // llvm.nvvm.suld.3d.i16.clamp
+    3, // llvm.nvvm.suld.3d.i16.trap
+    3, // llvm.nvvm.suld.3d.i16.zero
+    3, // llvm.nvvm.suld.3d.i32.clamp
+    3, // llvm.nvvm.suld.3d.i32.trap
+    3, // llvm.nvvm.suld.3d.i32.zero
+    3, // llvm.nvvm.suld.3d.i64.clamp
+    3, // llvm.nvvm.suld.3d.i64.trap
+    3, // llvm.nvvm.suld.3d.i64.zero
+    3, // llvm.nvvm.suld.3d.i8.clamp
+    3, // llvm.nvvm.suld.3d.i8.trap
+    3, // llvm.nvvm.suld.3d.i8.zero
+    3, // llvm.nvvm.suld.3d.v2i16.clamp
+    3, // llvm.nvvm.suld.3d.v2i16.trap
+    3, // llvm.nvvm.suld.3d.v2i16.zero
+    3, // llvm.nvvm.suld.3d.v2i32.clamp
+    3, // llvm.nvvm.suld.3d.v2i32.trap
+    3, // llvm.nvvm.suld.3d.v2i32.zero
+    3, // llvm.nvvm.suld.3d.v2i64.clamp
+    3, // llvm.nvvm.suld.3d.v2i64.trap
+    3, // llvm.nvvm.suld.3d.v2i64.zero
+    3, // llvm.nvvm.suld.3d.v2i8.clamp
+    3, // llvm.nvvm.suld.3d.v2i8.trap
+    3, // llvm.nvvm.suld.3d.v2i8.zero
+    3, // llvm.nvvm.suld.3d.v4i16.clamp
+    3, // llvm.nvvm.suld.3d.v4i16.trap
+    3, // llvm.nvvm.suld.3d.v4i16.zero
+    3, // llvm.nvvm.suld.3d.v4i32.clamp
+    3, // llvm.nvvm.suld.3d.v4i32.trap
+    3, // llvm.nvvm.suld.3d.v4i32.zero
+    3, // llvm.nvvm.suld.3d.v4i8.clamp
+    3, // llvm.nvvm.suld.3d.v4i8.trap
+    3, // llvm.nvvm.suld.3d.v4i8.zero
+    1, // llvm.nvvm.suq.array.size
+    1, // llvm.nvvm.suq.channel.data.type
+    1, // llvm.nvvm.suq.channel.order
+    1, // llvm.nvvm.suq.depth
+    1, // llvm.nvvm.suq.height
+    1, // llvm.nvvm.suq.width
+    3, // llvm.nvvm.sust.b.1d.array.i16.clamp
+    3, // llvm.nvvm.sust.b.1d.array.i16.trap
+    3, // llvm.nvvm.sust.b.1d.array.i16.zero
+    3, // llvm.nvvm.sust.b.1d.array.i32.clamp
+    3, // llvm.nvvm.sust.b.1d.array.i32.trap
+    3, // llvm.nvvm.sust.b.1d.array.i32.zero
+    3, // llvm.nvvm.sust.b.1d.array.i64.clamp
+    3, // llvm.nvvm.sust.b.1d.array.i64.trap
+    3, // llvm.nvvm.sust.b.1d.array.i64.zero
+    3, // llvm.nvvm.sust.b.1d.array.i8.clamp
+    3, // llvm.nvvm.sust.b.1d.array.i8.trap
+    3, // llvm.nvvm.sust.b.1d.array.i8.zero
+    3, // llvm.nvvm.sust.b.1d.array.v2i16.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v2i16.trap
+    3, // llvm.nvvm.sust.b.1d.array.v2i16.zero
+    3, // llvm.nvvm.sust.b.1d.array.v2i32.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v2i32.trap
+    3, // llvm.nvvm.sust.b.1d.array.v2i32.zero
+    3, // llvm.nvvm.sust.b.1d.array.v2i64.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v2i64.trap
+    3, // llvm.nvvm.sust.b.1d.array.v2i64.zero
+    3, // llvm.nvvm.sust.b.1d.array.v2i8.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v2i8.trap
+    3, // llvm.nvvm.sust.b.1d.array.v2i8.zero
+    3, // llvm.nvvm.sust.b.1d.array.v4i16.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v4i16.trap
+    3, // llvm.nvvm.sust.b.1d.array.v4i16.zero
+    3, // llvm.nvvm.sust.b.1d.array.v4i32.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v4i32.trap
+    3, // llvm.nvvm.sust.b.1d.array.v4i32.zero
+    3, // llvm.nvvm.sust.b.1d.array.v4i8.clamp
+    3, // llvm.nvvm.sust.b.1d.array.v4i8.trap
+    3, // llvm.nvvm.sust.b.1d.array.v4i8.zero
+    3, // llvm.nvvm.sust.b.1d.i16.clamp
+    3, // llvm.nvvm.sust.b.1d.i16.trap
+    3, // llvm.nvvm.sust.b.1d.i16.zero
+    3, // llvm.nvvm.sust.b.1d.i32.clamp
+    3, // llvm.nvvm.sust.b.1d.i32.trap
+    3, // llvm.nvvm.sust.b.1d.i32.zero
+    3, // llvm.nvvm.sust.b.1d.i64.clamp
+    3, // llvm.nvvm.sust.b.1d.i64.trap
+    3, // llvm.nvvm.sust.b.1d.i64.zero
+    3, // llvm.nvvm.sust.b.1d.i8.clamp
+    3, // llvm.nvvm.sust.b.1d.i8.trap
+    3, // llvm.nvvm.sust.b.1d.i8.zero
+    3, // llvm.nvvm.sust.b.1d.v2i16.clamp
+    3, // llvm.nvvm.sust.b.1d.v2i16.trap
+    3, // llvm.nvvm.sust.b.1d.v2i16.zero
+    3, // llvm.nvvm.sust.b.1d.v2i32.clamp
+    3, // llvm.nvvm.sust.b.1d.v2i32.trap
+    3, // llvm.nvvm.sust.b.1d.v2i32.zero
+    3, // llvm.nvvm.sust.b.1d.v2i64.clamp
+    3, // llvm.nvvm.sust.b.1d.v2i64.trap
+    3, // llvm.nvvm.sust.b.1d.v2i64.zero
+    3, // llvm.nvvm.sust.b.1d.v2i8.clamp
+    3, // llvm.nvvm.sust.b.1d.v2i8.trap
+    3, // llvm.nvvm.sust.b.1d.v2i8.zero
+    3, // llvm.nvvm.sust.b.1d.v4i16.clamp
+    3, // llvm.nvvm.sust.b.1d.v4i16.trap
+    3, // llvm.nvvm.sust.b.1d.v4i16.zero
+    3, // llvm.nvvm.sust.b.1d.v4i32.clamp
+    3, // llvm.nvvm.sust.b.1d.v4i32.trap
+    3, // llvm.nvvm.sust.b.1d.v4i32.zero
+    3, // llvm.nvvm.sust.b.1d.v4i8.clamp
+    3, // llvm.nvvm.sust.b.1d.v4i8.trap
+    3, // llvm.nvvm.sust.b.1d.v4i8.zero
+    3, // llvm.nvvm.sust.b.2d.array.i16.clamp
+    3, // llvm.nvvm.sust.b.2d.array.i16.trap
+    3, // llvm.nvvm.sust.b.2d.array.i16.zero
+    3, // llvm.nvvm.sust.b.2d.array.i32.clamp
+    3, // llvm.nvvm.sust.b.2d.array.i32.trap
+    3, // llvm.nvvm.sust.b.2d.array.i32.zero
+    3, // llvm.nvvm.sust.b.2d.array.i64.clamp
+    3, // llvm.nvvm.sust.b.2d.array.i64.trap
+    3, // llvm.nvvm.sust.b.2d.array.i64.zero
+    3, // llvm.nvvm.sust.b.2d.array.i8.clamp
+    3, // llvm.nvvm.sust.b.2d.array.i8.trap
+    3, // llvm.nvvm.sust.b.2d.array.i8.zero
+    3, // llvm.nvvm.sust.b.2d.array.v2i16.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v2i16.trap
+    3, // llvm.nvvm.sust.b.2d.array.v2i16.zero
+    3, // llvm.nvvm.sust.b.2d.array.v2i32.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v2i32.trap
+    3, // llvm.nvvm.sust.b.2d.array.v2i32.zero
+    3, // llvm.nvvm.sust.b.2d.array.v2i64.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v2i64.trap
+    3, // llvm.nvvm.sust.b.2d.array.v2i64.zero
+    3, // llvm.nvvm.sust.b.2d.array.v2i8.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v2i8.trap
+    3, // llvm.nvvm.sust.b.2d.array.v2i8.zero
+    3, // llvm.nvvm.sust.b.2d.array.v4i16.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v4i16.trap
+    3, // llvm.nvvm.sust.b.2d.array.v4i16.zero
+    3, // llvm.nvvm.sust.b.2d.array.v4i32.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v4i32.trap
+    3, // llvm.nvvm.sust.b.2d.array.v4i32.zero
+    3, // llvm.nvvm.sust.b.2d.array.v4i8.clamp
+    3, // llvm.nvvm.sust.b.2d.array.v4i8.trap
+    3, // llvm.nvvm.sust.b.2d.array.v4i8.zero
+    3, // llvm.nvvm.sust.b.2d.i16.clamp
+    3, // llvm.nvvm.sust.b.2d.i16.trap
+    3, // llvm.nvvm.sust.b.2d.i16.zero
+    3, // llvm.nvvm.sust.b.2d.i32.clamp
+    3, // llvm.nvvm.sust.b.2d.i32.trap
+    3, // llvm.nvvm.sust.b.2d.i32.zero
+    3, // llvm.nvvm.sust.b.2d.i64.clamp
+    3, // llvm.nvvm.sust.b.2d.i64.trap
+    3, // llvm.nvvm.sust.b.2d.i64.zero
+    3, // llvm.nvvm.sust.b.2d.i8.clamp
+    3, // llvm.nvvm.sust.b.2d.i8.trap
+    3, // llvm.nvvm.sust.b.2d.i8.zero
+    3, // llvm.nvvm.sust.b.2d.v2i16.clamp
+    3, // llvm.nvvm.sust.b.2d.v2i16.trap
+    3, // llvm.nvvm.sust.b.2d.v2i16.zero
+    3, // llvm.nvvm.sust.b.2d.v2i32.clamp
+    3, // llvm.nvvm.sust.b.2d.v2i32.trap
+    3, // llvm.nvvm.sust.b.2d.v2i32.zero
+    3, // llvm.nvvm.sust.b.2d.v2i64.clamp
+    3, // llvm.nvvm.sust.b.2d.v2i64.trap
+    3, // llvm.nvvm.sust.b.2d.v2i64.zero
+    3, // llvm.nvvm.sust.b.2d.v2i8.clamp
+    3, // llvm.nvvm.sust.b.2d.v2i8.trap
+    3, // llvm.nvvm.sust.b.2d.v2i8.zero
+    3, // llvm.nvvm.sust.b.2d.v4i16.clamp
+    3, // llvm.nvvm.sust.b.2d.v4i16.trap
+    3, // llvm.nvvm.sust.b.2d.v4i16.zero
+    3, // llvm.nvvm.sust.b.2d.v4i32.clamp
+    3, // llvm.nvvm.sust.b.2d.v4i32.trap
+    3, // llvm.nvvm.sust.b.2d.v4i32.zero
+    3, // llvm.nvvm.sust.b.2d.v4i8.clamp
+    3, // llvm.nvvm.sust.b.2d.v4i8.trap
+    3, // llvm.nvvm.sust.b.2d.v4i8.zero
+    3, // llvm.nvvm.sust.b.3d.i16.clamp
+    3, // llvm.nvvm.sust.b.3d.i16.trap
+    3, // llvm.nvvm.sust.b.3d.i16.zero
+    3, // llvm.nvvm.sust.b.3d.i32.clamp
+    3, // llvm.nvvm.sust.b.3d.i32.trap
+    3, // llvm.nvvm.sust.b.3d.i32.zero
+    3, // llvm.nvvm.sust.b.3d.i64.clamp
+    3, // llvm.nvvm.sust.b.3d.i64.trap
+    3, // llvm.nvvm.sust.b.3d.i64.zero
+    3, // llvm.nvvm.sust.b.3d.i8.clamp
+    3, // llvm.nvvm.sust.b.3d.i8.trap
+    3, // llvm.nvvm.sust.b.3d.i8.zero
+    3, // llvm.nvvm.sust.b.3d.v2i16.clamp
+    3, // llvm.nvvm.sust.b.3d.v2i16.trap
+    3, // llvm.nvvm.sust.b.3d.v2i16.zero
+    3, // llvm.nvvm.sust.b.3d.v2i32.clamp
+    3, // llvm.nvvm.sust.b.3d.v2i32.trap
+    3, // llvm.nvvm.sust.b.3d.v2i32.zero
+    3, // llvm.nvvm.sust.b.3d.v2i64.clamp
+    3, // llvm.nvvm.sust.b.3d.v2i64.trap
+    3, // llvm.nvvm.sust.b.3d.v2i64.zero
+    3, // llvm.nvvm.sust.b.3d.v2i8.clamp
+    3, // llvm.nvvm.sust.b.3d.v2i8.trap
+    3, // llvm.nvvm.sust.b.3d.v2i8.zero
+    3, // llvm.nvvm.sust.b.3d.v4i16.clamp
+    3, // llvm.nvvm.sust.b.3d.v4i16.trap
+    3, // llvm.nvvm.sust.b.3d.v4i16.zero
+    3, // llvm.nvvm.sust.b.3d.v4i32.clamp
+    3, // llvm.nvvm.sust.b.3d.v4i32.trap
+    3, // llvm.nvvm.sust.b.3d.v4i32.zero
+    3, // llvm.nvvm.sust.b.3d.v4i8.clamp
+    3, // llvm.nvvm.sust.b.3d.v4i8.trap
+    3, // llvm.nvvm.sust.b.3d.v4i8.zero
+    3, // llvm.nvvm.sust.p.1d.array.i16.trap
+    3, // llvm.nvvm.sust.p.1d.array.i32.trap
+    3, // llvm.nvvm.sust.p.1d.array.i8.trap
+    3, // llvm.nvvm.sust.p.1d.array.v2i16.trap
+    3, // llvm.nvvm.sust.p.1d.array.v2i32.trap
+    3, // llvm.nvvm.sust.p.1d.array.v2i8.trap
+    3, // llvm.nvvm.sust.p.1d.array.v4i16.trap
+    3, // llvm.nvvm.sust.p.1d.array.v4i32.trap
+    3, // llvm.nvvm.sust.p.1d.array.v4i8.trap
+    3, // llvm.nvvm.sust.p.1d.i16.trap
+    3, // llvm.nvvm.sust.p.1d.i32.trap
+    3, // llvm.nvvm.sust.p.1d.i8.trap
+    3, // llvm.nvvm.sust.p.1d.v2i16.trap
+    3, // llvm.nvvm.sust.p.1d.v2i32.trap
+    3, // llvm.nvvm.sust.p.1d.v2i8.trap
+    3, // llvm.nvvm.sust.p.1d.v4i16.trap
+    3, // llvm.nvvm.sust.p.1d.v4i32.trap
+    3, // llvm.nvvm.sust.p.1d.v4i8.trap
+    3, // llvm.nvvm.sust.p.2d.array.i16.trap
+    3, // llvm.nvvm.sust.p.2d.array.i32.trap
+    3, // llvm.nvvm.sust.p.2d.array.i8.trap
+    3, // llvm.nvvm.sust.p.2d.array.v2i16.trap
+    3, // llvm.nvvm.sust.p.2d.array.v2i32.trap
+    3, // llvm.nvvm.sust.p.2d.array.v2i8.trap
+    3, // llvm.nvvm.sust.p.2d.array.v4i16.trap
+    3, // llvm.nvvm.sust.p.2d.array.v4i32.trap
+    3, // llvm.nvvm.sust.p.2d.array.v4i8.trap
+    3, // llvm.nvvm.sust.p.2d.i16.trap
+    3, // llvm.nvvm.sust.p.2d.i32.trap
+    3, // llvm.nvvm.sust.p.2d.i8.trap
+    3, // llvm.nvvm.sust.p.2d.v2i16.trap
+    3, // llvm.nvvm.sust.p.2d.v2i32.trap
+    3, // llvm.nvvm.sust.p.2d.v2i8.trap
+    3, // llvm.nvvm.sust.p.2d.v4i16.trap
+    3, // llvm.nvvm.sust.p.2d.v4i32.trap
+    3, // llvm.nvvm.sust.p.2d.v4i8.trap
+    3, // llvm.nvvm.sust.p.3d.i16.trap
+    3, // llvm.nvvm.sust.p.3d.i32.trap
+    3, // llvm.nvvm.sust.p.3d.i8.trap
+    3, // llvm.nvvm.sust.p.3d.v2i16.trap
+    3, // llvm.nvvm.sust.p.3d.v2i32.trap
+    3, // llvm.nvvm.sust.p.3d.v2i8.trap
+    3, // llvm.nvvm.sust.p.3d.v4i16.trap
+    3, // llvm.nvvm.sust.p.3d.v4i32.trap
+    3, // llvm.nvvm.sust.p.3d.v4i8.trap
+    1, // llvm.nvvm.swap.lo.hi.b64
+    3, // llvm.nvvm.tex.1d.array.grad.v4f32.f32
+    3, // llvm.nvvm.tex.1d.array.grad.v4s32.f32
+    3, // llvm.nvvm.tex.1d.array.grad.v4u32.f32
+    3, // llvm.nvvm.tex.1d.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.1d.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.1d.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.1d.array.v4f32.f32
+    3, // llvm.nvvm.tex.1d.array.v4f32.s32
+    3, // llvm.nvvm.tex.1d.array.v4s32.f32
+    3, // llvm.nvvm.tex.1d.array.v4s32.s32
+    3, // llvm.nvvm.tex.1d.array.v4u32.f32
+    3, // llvm.nvvm.tex.1d.array.v4u32.s32
+    3, // llvm.nvvm.tex.1d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.1d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.1d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.1d.level.v4f32.f32
+    3, // llvm.nvvm.tex.1d.level.v4s32.f32
+    3, // llvm.nvvm.tex.1d.level.v4u32.f32
+    3, // llvm.nvvm.tex.1d.v4f32.f32
+    3, // llvm.nvvm.tex.1d.v4f32.s32
+    3, // llvm.nvvm.tex.1d.v4s32.f32
+    3, // llvm.nvvm.tex.1d.v4s32.s32
+    3, // llvm.nvvm.tex.1d.v4u32.f32
+    3, // llvm.nvvm.tex.1d.v4u32.s32
+    3, // llvm.nvvm.tex.2d.array.grad.v4f32.f32
+    3, // llvm.nvvm.tex.2d.array.grad.v4s32.f32
+    3, // llvm.nvvm.tex.2d.array.grad.v4u32.f32
+    3, // llvm.nvvm.tex.2d.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.2d.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.2d.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.2d.array.v4f32.f32
+    3, // llvm.nvvm.tex.2d.array.v4f32.s32
+    3, // llvm.nvvm.tex.2d.array.v4s32.f32
+    3, // llvm.nvvm.tex.2d.array.v4s32.s32
+    3, // llvm.nvvm.tex.2d.array.v4u32.f32
+    3, // llvm.nvvm.tex.2d.array.v4u32.s32
+    3, // llvm.nvvm.tex.2d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.2d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.2d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.2d.level.v4f32.f32
+    3, // llvm.nvvm.tex.2d.level.v4s32.f32
+    3, // llvm.nvvm.tex.2d.level.v4u32.f32
+    3, // llvm.nvvm.tex.2d.v4f32.f32
+    3, // llvm.nvvm.tex.2d.v4f32.s32
+    3, // llvm.nvvm.tex.2d.v4s32.f32
+    3, // llvm.nvvm.tex.2d.v4s32.s32
+    3, // llvm.nvvm.tex.2d.v4u32.f32
+    3, // llvm.nvvm.tex.2d.v4u32.s32
+    3, // llvm.nvvm.tex.3d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.3d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.3d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.3d.level.v4f32.f32
+    3, // llvm.nvvm.tex.3d.level.v4s32.f32
+    3, // llvm.nvvm.tex.3d.level.v4u32.f32
+    3, // llvm.nvvm.tex.3d.v4f32.f32
+    3, // llvm.nvvm.tex.3d.v4f32.s32
+    3, // llvm.nvvm.tex.3d.v4s32.f32
+    3, // llvm.nvvm.tex.3d.v4s32.s32
+    3, // llvm.nvvm.tex.3d.v4u32.f32
+    3, // llvm.nvvm.tex.3d.v4u32.s32
+    3, // llvm.nvvm.tex.cube.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.cube.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.cube.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.cube.array.v4f32.f32
+    3, // llvm.nvvm.tex.cube.array.v4s32.f32
+    3, // llvm.nvvm.tex.cube.array.v4u32.f32
+    3, // llvm.nvvm.tex.cube.level.v4f32.f32
+    3, // llvm.nvvm.tex.cube.level.v4s32.f32
+    3, // llvm.nvvm.tex.cube.level.v4u32.f32
+    3, // llvm.nvvm.tex.cube.v4f32.f32
+    3, // llvm.nvvm.tex.cube.v4s32.f32
+    3, // llvm.nvvm.tex.cube.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.v4f32.s32
+    3, // llvm.nvvm.tex.unified.1d.array.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.v4s32.s32
+    3, // llvm.nvvm.tex.unified.1d.array.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.array.v4u32.s32
+    3, // llvm.nvvm.tex.unified.1d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.v4f32.f32
+    3, // llvm.nvvm.tex.unified.1d.v4f32.s32
+    3, // llvm.nvvm.tex.unified.1d.v4s32.f32
+    3, // llvm.nvvm.tex.unified.1d.v4s32.s32
+    3, // llvm.nvvm.tex.unified.1d.v4u32.f32
+    3, // llvm.nvvm.tex.unified.1d.v4u32.s32
+    3, // llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.v4f32.s32
+    3, // llvm.nvvm.tex.unified.2d.array.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.v4s32.s32
+    3, // llvm.nvvm.tex.unified.2d.array.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.array.v4u32.s32
+    3, // llvm.nvvm.tex.unified.2d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.v4f32.f32
+    3, // llvm.nvvm.tex.unified.2d.v4f32.s32
+    3, // llvm.nvvm.tex.unified.2d.v4s32.f32
+    3, // llvm.nvvm.tex.unified.2d.v4s32.s32
+    3, // llvm.nvvm.tex.unified.2d.v4u32.f32
+    3, // llvm.nvvm.tex.unified.2d.v4u32.s32
+    3, // llvm.nvvm.tex.unified.3d.grad.v4f32.f32
+    3, // llvm.nvvm.tex.unified.3d.grad.v4s32.f32
+    3, // llvm.nvvm.tex.unified.3d.grad.v4u32.f32
+    3, // llvm.nvvm.tex.unified.3d.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.3d.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.3d.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.3d.v4f32.f32
+    3, // llvm.nvvm.tex.unified.3d.v4f32.s32
+    3, // llvm.nvvm.tex.unified.3d.v4s32.f32
+    3, // llvm.nvvm.tex.unified.3d.v4s32.s32
+    3, // llvm.nvvm.tex.unified.3d.v4u32.f32
+    3, // llvm.nvvm.tex.unified.3d.v4u32.s32
+    3, // llvm.nvvm.tex.unified.cube.array.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.cube.array.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.cube.array.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.cube.array.v4f32.f32
+    3, // llvm.nvvm.tex.unified.cube.array.v4s32.f32
+    3, // llvm.nvvm.tex.unified.cube.array.v4u32.f32
+    3, // llvm.nvvm.tex.unified.cube.level.v4f32.f32
+    3, // llvm.nvvm.tex.unified.cube.level.v4s32.f32
+    3, // llvm.nvvm.tex.unified.cube.level.v4u32.f32
+    3, // llvm.nvvm.tex.unified.cube.v4f32.f32
+    3, // llvm.nvvm.tex.unified.cube.v4s32.f32
+    3, // llvm.nvvm.tex.unified.cube.v4u32.f32
+    1, // llvm.nvvm.texsurf.handle
+    1, // llvm.nvvm.texsurf.handle.internal
+    3, // llvm.nvvm.tld4.a.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.a.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.a.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.b.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.b.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.b.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.g.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.g.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.g.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.r.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.r.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.r.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.unified.a.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.unified.a.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.unified.a.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.unified.b.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.unified.b.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.unified.b.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.unified.g.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.unified.g.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.unified.g.2d.v4u32.f32
+    3, // llvm.nvvm.tld4.unified.r.2d.v4f32.f32
+    3, // llvm.nvvm.tld4.unified.r.2d.v4s32.f32
+    3, // llvm.nvvm.tld4.unified.r.2d.v4u32.f32
+    1, // llvm.nvvm.trunc.d
+    1, // llvm.nvvm.trunc.f
+    1, // llvm.nvvm.trunc.ftz.f
+    1, // llvm.nvvm.txq.array.size
+    1, // llvm.nvvm.txq.channel.data.type
+    1, // llvm.nvvm.txq.channel.order
+    1, // llvm.nvvm.txq.depth
+    1, // llvm.nvvm.txq.height
+    1, // llvm.nvvm.txq.num.mipmap.levels
+    1, // llvm.nvvm.txq.num.samples
+    1, // llvm.nvvm.txq.width
+    1, // llvm.nvvm.ui2d.rm
+    1, // llvm.nvvm.ui2d.rn
+    1, // llvm.nvvm.ui2d.rp
+    1, // llvm.nvvm.ui2d.rz
+    1, // llvm.nvvm.ui2f.rm
+    1, // llvm.nvvm.ui2f.rn
+    1, // llvm.nvvm.ui2f.rp
+    1, // llvm.nvvm.ui2f.rz
+    1, // llvm.nvvm.ull2d.rm
+    1, // llvm.nvvm.ull2d.rn
+    1, // llvm.nvvm.ull2d.rp
+    1, // llvm.nvvm.ull2d.rz
+    1, // llvm.nvvm.ull2f.rm
+    1, // llvm.nvvm.ull2f.rn
+    1, // llvm.nvvm.ull2f.rp
+    1, // llvm.nvvm.ull2f.rz
+    40, // llvm.nvvm.vote.all
+    40, // llvm.nvvm.vote.all.sync
+    40, // llvm.nvvm.vote.any
+    40, // llvm.nvvm.vote.any.sync
+    40, // llvm.nvvm.vote.ballot
+    40, // llvm.nvvm.vote.ballot.sync
+    40, // llvm.nvvm.vote.uni
+    40, // llvm.nvvm.vote.uni.sync
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
+    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
+    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
+    41, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f16
+    13, // llvm.nvvm.wmma.m32n8k16.load.c.row.stride.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32
+    1, // llvm.nvvm.wmma.m32n8k16.mma.row.row.f32.f32.satfinite
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.col.f16
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.col.f32
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f16
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.col.stride.f32
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.row.f16
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.row.f32
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f16
+    41, // llvm.nvvm.wmma.m32n8k16.store.d.row.stride.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.col.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.a.row.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.col.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.b.row.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.col.stride.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.f32
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f16
+    13, // llvm.nvvm.wmma.m8n32k16.load.c.row.stride.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.col.row.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.col.f32.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f16.f32.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f16.satfinite
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32
+    1, // llvm.nvvm.wmma.m8n32k16.mma.row.row.f32.f32.satfinite
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.col.f16
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.col.f32
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f16
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.col.stride.f32
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.row.f16
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.row.f32
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f16
+    41, // llvm.nvvm.wmma.m8n32k16.store.d.row.stride.f32
+    1, // llvm.ppc.addf128.round.to.odd
+    1, // llvm.ppc.altivec.crypto.vcipher
+    1, // llvm.ppc.altivec.crypto.vcipherlast
+    1, // llvm.ppc.altivec.crypto.vncipher
+    1, // llvm.ppc.altivec.crypto.vncipherlast
+    1, // llvm.ppc.altivec.crypto.vpermxor
+    1, // llvm.ppc.altivec.crypto.vpmsumb
+    1, // llvm.ppc.altivec.crypto.vpmsumd
+    1, // llvm.ppc.altivec.crypto.vpmsumh
+    1, // llvm.ppc.altivec.crypto.vpmsumw
+    1, // llvm.ppc.altivec.crypto.vsbox
+    1, // llvm.ppc.altivec.crypto.vshasigmad
+    1, // llvm.ppc.altivec.crypto.vshasigmaw
+    3, // llvm.ppc.altivec.dss
+    3, // llvm.ppc.altivec.dssall
+    3, // llvm.ppc.altivec.dst
+    3, // llvm.ppc.altivec.dstst
+    3, // llvm.ppc.altivec.dststt
+    3, // llvm.ppc.altivec.dstt
+    2, // llvm.ppc.altivec.lvebx
+    2, // llvm.ppc.altivec.lvehx
+    2, // llvm.ppc.altivec.lvewx
+    1, // llvm.ppc.altivec.lvsl
+    1, // llvm.ppc.altivec.lvsr
+    2, // llvm.ppc.altivec.lvx
+    2, // llvm.ppc.altivec.lvxl
+    16, // llvm.ppc.altivec.mfvscr
+    3, // llvm.ppc.altivec.mtvscr
+    42, // llvm.ppc.altivec.stvebx
+    42, // llvm.ppc.altivec.stvehx
+    42, // llvm.ppc.altivec.stvewx
+    42, // llvm.ppc.altivec.stvx
+    42, // llvm.ppc.altivec.stvxl
+    1, // llvm.ppc.altivec.vabsdub
+    1, // llvm.ppc.altivec.vabsduh
+    1, // llvm.ppc.altivec.vabsduw
+    1, // llvm.ppc.altivec.vaddcuq
+    1, // llvm.ppc.altivec.vaddcuw
+    1, // llvm.ppc.altivec.vaddecuq
+    1, // llvm.ppc.altivec.vaddeuqm
+    1, // llvm.ppc.altivec.vaddsbs
+    1, // llvm.ppc.altivec.vaddshs
+    1, // llvm.ppc.altivec.vaddsws
+    1, // llvm.ppc.altivec.vaddubs
+    1, // llvm.ppc.altivec.vadduhs
+    1, // llvm.ppc.altivec.vadduws
+    1, // llvm.ppc.altivec.vavgsb
+    1, // llvm.ppc.altivec.vavgsh
+    1, // llvm.ppc.altivec.vavgsw
+    1, // llvm.ppc.altivec.vavgub
+    1, // llvm.ppc.altivec.vavguh
+    1, // llvm.ppc.altivec.vavguw
+    1, // llvm.ppc.altivec.vbpermq
+    1, // llvm.ppc.altivec.vcfsx
+    1, // llvm.ppc.altivec.vcfux
+    1, // llvm.ppc.altivec.vclzlsbb
+    1, // llvm.ppc.altivec.vcmpbfp
+    1, // llvm.ppc.altivec.vcmpbfp.p
+    1, // llvm.ppc.altivec.vcmpeqfp
+    1, // llvm.ppc.altivec.vcmpeqfp.p
+    1, // llvm.ppc.altivec.vcmpequb
+    1, // llvm.ppc.altivec.vcmpequb.p
+    1, // llvm.ppc.altivec.vcmpequd
+    1, // llvm.ppc.altivec.vcmpequd.p
+    1, // llvm.ppc.altivec.vcmpequh
+    1, // llvm.ppc.altivec.vcmpequh.p
+    1, // llvm.ppc.altivec.vcmpequw
+    1, // llvm.ppc.altivec.vcmpequw.p
+    1, // llvm.ppc.altivec.vcmpgefp
+    1, // llvm.ppc.altivec.vcmpgefp.p
+    1, // llvm.ppc.altivec.vcmpgtfp
+    1, // llvm.ppc.altivec.vcmpgtfp.p
+    1, // llvm.ppc.altivec.vcmpgtsb
+    1, // llvm.ppc.altivec.vcmpgtsb.p
+    1, // llvm.ppc.altivec.vcmpgtsd
+    1, // llvm.ppc.altivec.vcmpgtsd.p
+    1, // llvm.ppc.altivec.vcmpgtsh
+    1, // llvm.ppc.altivec.vcmpgtsh.p
+    1, // llvm.ppc.altivec.vcmpgtsw
+    1, // llvm.ppc.altivec.vcmpgtsw.p
+    1, // llvm.ppc.altivec.vcmpgtub
+    1, // llvm.ppc.altivec.vcmpgtub.p
+    1, // llvm.ppc.altivec.vcmpgtud
+    1, // llvm.ppc.altivec.vcmpgtud.p
+    1, // llvm.ppc.altivec.vcmpgtuh
+    1, // llvm.ppc.altivec.vcmpgtuh.p
+    1, // llvm.ppc.altivec.vcmpgtuw
+    1, // llvm.ppc.altivec.vcmpgtuw.p
+    1, // llvm.ppc.altivec.vcmpneb
+    1, // llvm.ppc.altivec.vcmpneb.p
+    1, // llvm.ppc.altivec.vcmpneh
+    1, // llvm.ppc.altivec.vcmpneh.p
+    1, // llvm.ppc.altivec.vcmpnew
+    1, // llvm.ppc.altivec.vcmpnew.p
+    1, // llvm.ppc.altivec.vcmpnezb
+    1, // llvm.ppc.altivec.vcmpnezb.p
+    1, // llvm.ppc.altivec.vcmpnezh
+    1, // llvm.ppc.altivec.vcmpnezh.p
+    1, // llvm.ppc.altivec.vcmpnezw
+    1, // llvm.ppc.altivec.vcmpnezw.p
+    1, // llvm.ppc.altivec.vctsxs
+    1, // llvm.ppc.altivec.vctuxs
+    1, // llvm.ppc.altivec.vctzlsbb
+    1, // llvm.ppc.altivec.vexptefp
+    1, // llvm.ppc.altivec.vgbbd
+    1, // llvm.ppc.altivec.vlogefp
+    1, // llvm.ppc.altivec.vmaddfp
+    1, // llvm.ppc.altivec.vmaxfp
+    1, // llvm.ppc.altivec.vmaxsb
+    1, // llvm.ppc.altivec.vmaxsd
+    1, // llvm.ppc.altivec.vmaxsh
+    1, // llvm.ppc.altivec.vmaxsw
+    1, // llvm.ppc.altivec.vmaxub
+    1, // llvm.ppc.altivec.vmaxud
+    1, // llvm.ppc.altivec.vmaxuh
+    1, // llvm.ppc.altivec.vmaxuw
+    1, // llvm.ppc.altivec.vmhaddshs
+    1, // llvm.ppc.altivec.vmhraddshs
+    1, // llvm.ppc.altivec.vminfp
+    1, // llvm.ppc.altivec.vminsb
+    1, // llvm.ppc.altivec.vminsd
+    1, // llvm.ppc.altivec.vminsh
+    1, // llvm.ppc.altivec.vminsw
+    1, // llvm.ppc.altivec.vminub
+    1, // llvm.ppc.altivec.vminud
+    1, // llvm.ppc.altivec.vminuh
+    1, // llvm.ppc.altivec.vminuw
+    1, // llvm.ppc.altivec.vmladduhm
+    1, // llvm.ppc.altivec.vmsummbm
+    1, // llvm.ppc.altivec.vmsumshm
+    1, // llvm.ppc.altivec.vmsumshs
+    1, // llvm.ppc.altivec.vmsumubm
+    1, // llvm.ppc.altivec.vmsumuhm
+    1, // llvm.ppc.altivec.vmsumuhs
+    1, // llvm.ppc.altivec.vmulesb
+    1, // llvm.ppc.altivec.vmulesh
+    1, // llvm.ppc.altivec.vmulesw
+    1, // llvm.ppc.altivec.vmuleub
+    1, // llvm.ppc.altivec.vmuleuh
+    1, // llvm.ppc.altivec.vmuleuw
+    1, // llvm.ppc.altivec.vmulosb
+    1, // llvm.ppc.altivec.vmulosh
+    1, // llvm.ppc.altivec.vmulosw
+    1, // llvm.ppc.altivec.vmuloub
+    1, // llvm.ppc.altivec.vmulouh
+    1, // llvm.ppc.altivec.vmulouw
+    1, // llvm.ppc.altivec.vnmsubfp
+    1, // llvm.ppc.altivec.vperm
+    1, // llvm.ppc.altivec.vpkpx
+    1, // llvm.ppc.altivec.vpksdss
+    1, // llvm.ppc.altivec.vpksdus
+    1, // llvm.ppc.altivec.vpkshss
+    1, // llvm.ppc.altivec.vpkshus
+    1, // llvm.ppc.altivec.vpkswss
+    1, // llvm.ppc.altivec.vpkswus
+    1, // llvm.ppc.altivec.vpkudus
+    1, // llvm.ppc.altivec.vpkuhus
+    1, // llvm.ppc.altivec.vpkuwus
+    1, // llvm.ppc.altivec.vprtybd
+    1, // llvm.ppc.altivec.vprtybq
+    1, // llvm.ppc.altivec.vprtybw
+    1, // llvm.ppc.altivec.vrefp
+    1, // llvm.ppc.altivec.vrfim
+    1, // llvm.ppc.altivec.vrfin
+    1, // llvm.ppc.altivec.vrfip
+    1, // llvm.ppc.altivec.vrfiz
+    1, // llvm.ppc.altivec.vrlb
+    1, // llvm.ppc.altivec.vrld
+    1, // llvm.ppc.altivec.vrldmi
+    1, // llvm.ppc.altivec.vrldnm
+    1, // llvm.ppc.altivec.vrlh
+    1, // llvm.ppc.altivec.vrlw
+    1, // llvm.ppc.altivec.vrlwmi
+    1, // llvm.ppc.altivec.vrlwnm
+    1, // llvm.ppc.altivec.vrsqrtefp
+    1, // llvm.ppc.altivec.vsel
+    1, // llvm.ppc.altivec.vsl
+    1, // llvm.ppc.altivec.vslb
+    1, // llvm.ppc.altivec.vslh
+    1, // llvm.ppc.altivec.vslo
+    1, // llvm.ppc.altivec.vslv
+    1, // llvm.ppc.altivec.vslw
+    1, // llvm.ppc.altivec.vsr
+    1, // llvm.ppc.altivec.vsrab
+    1, // llvm.ppc.altivec.vsrah
+    1, // llvm.ppc.altivec.vsraw
+    1, // llvm.ppc.altivec.vsrb
+    1, // llvm.ppc.altivec.vsrh
+    1, // llvm.ppc.altivec.vsro
+    1, // llvm.ppc.altivec.vsrv
+    1, // llvm.ppc.altivec.vsrw
+    1, // llvm.ppc.altivec.vsubcuq
+    1, // llvm.ppc.altivec.vsubcuw
+    1, // llvm.ppc.altivec.vsubecuq
+    1, // llvm.ppc.altivec.vsubeuqm
+    1, // llvm.ppc.altivec.vsubsbs
+    1, // llvm.ppc.altivec.vsubshs
+    1, // llvm.ppc.altivec.vsubsws
+    1, // llvm.ppc.altivec.vsububs
+    1, // llvm.ppc.altivec.vsubuhs
+    1, // llvm.ppc.altivec.vsubuws
+    1, // llvm.ppc.altivec.vsum2sws
+    1, // llvm.ppc.altivec.vsum4sbs
+    1, // llvm.ppc.altivec.vsum4shs
+    1, // llvm.ppc.altivec.vsum4ubs
+    1, // llvm.ppc.altivec.vsumsws
+    1, // llvm.ppc.altivec.vupkhpx
+    1, // llvm.ppc.altivec.vupkhsb
+    1, // llvm.ppc.altivec.vupkhsh
+    1, // llvm.ppc.altivec.vupkhsw
+    1, // llvm.ppc.altivec.vupklpx
+    1, // llvm.ppc.altivec.vupklsb
+    1, // llvm.ppc.altivec.vupklsh
+    1, // llvm.ppc.altivec.vupklsw
+    1, // llvm.ppc.bpermd
+    3, // llvm.ppc.cfence
+    3, // llvm.ppc.dcba
+    3, // llvm.ppc.dcbf
+    3, // llvm.ppc.dcbi
+    3, // llvm.ppc.dcbst
+    18, // llvm.ppc.dcbt
+    18, // llvm.ppc.dcbtst
+    3, // llvm.ppc.dcbz
+    3, // llvm.ppc.dcbzl
+    1, // llvm.ppc.divde
+    1, // llvm.ppc.divdeu
+    1, // llvm.ppc.divf128.round.to.odd
+    1, // llvm.ppc.divwe
+    1, // llvm.ppc.divweu
+    1, // llvm.ppc.fmaf128.round.to.odd
+    3, // llvm.ppc.get.texasr
+    3, // llvm.ppc.get.texasru
+    3, // llvm.ppc.get.tfhar
+    3, // llvm.ppc.get.tfiar
+    43, // llvm.ppc.is.decremented.ctr.nonzero
+    3, // llvm.ppc.lwsync
+    3, // llvm.ppc.mtctr
+    1, // llvm.ppc.mulf128.round.to.odd
+    1, // llvm.ppc.qpx.qvfabs
+    1, // llvm.ppc.qpx.qvfadd
+    1, // llvm.ppc.qpx.qvfadds
+    1, // llvm.ppc.qpx.qvfcfid
+    1, // llvm.ppc.qpx.qvfcfids
+    1, // llvm.ppc.qpx.qvfcfidu
+    1, // llvm.ppc.qpx.qvfcfidus
+    1, // llvm.ppc.qpx.qvfcmpeq
+    1, // llvm.ppc.qpx.qvfcmpgt
+    1, // llvm.ppc.qpx.qvfcmplt
+    1, // llvm.ppc.qpx.qvfcpsgn
+    1, // llvm.ppc.qpx.qvfctid
+    1, // llvm.ppc.qpx.qvfctidu
+    1, // llvm.ppc.qpx.qvfctiduz
+    1, // llvm.ppc.qpx.qvfctidz
+    1, // llvm.ppc.qpx.qvfctiw
+    1, // llvm.ppc.qpx.qvfctiwu
+    1, // llvm.ppc.qpx.qvfctiwuz
+    1, // llvm.ppc.qpx.qvfctiwz
+    1, // llvm.ppc.qpx.qvflogical
+    1, // llvm.ppc.qpx.qvfmadd
+    1, // llvm.ppc.qpx.qvfmadds
+    1, // llvm.ppc.qpx.qvfmsub
+    1, // llvm.ppc.qpx.qvfmsubs
+    1, // llvm.ppc.qpx.qvfmul
+    1, // llvm.ppc.qpx.qvfmuls
+    1, // llvm.ppc.qpx.qvfnabs
+    1, // llvm.ppc.qpx.qvfneg
+    1, // llvm.ppc.qpx.qvfnmadd
+    1, // llvm.ppc.qpx.qvfnmadds
+    1, // llvm.ppc.qpx.qvfnmsub
+    1, // llvm.ppc.qpx.qvfnmsubs
+    1, // llvm.ppc.qpx.qvfperm
+    1, // llvm.ppc.qpx.qvfre
+    1, // llvm.ppc.qpx.qvfres
+    1, // llvm.ppc.qpx.qvfrim
+    1, // llvm.ppc.qpx.qvfrin
+    1, // llvm.ppc.qpx.qvfrip
+    1, // llvm.ppc.qpx.qvfriz
+    1, // llvm.ppc.qpx.qvfrsp
+    1, // llvm.ppc.qpx.qvfrsqrte
+    1, // llvm.ppc.qpx.qvfrsqrtes
+    1, // llvm.ppc.qpx.qvfsel
+    1, // llvm.ppc.qpx.qvfsub
+    1, // llvm.ppc.qpx.qvfsubs
+    1, // llvm.ppc.qpx.qvftstnan
+    1, // llvm.ppc.qpx.qvfxmadd
+    1, // llvm.ppc.qpx.qvfxmadds
+    1, // llvm.ppc.qpx.qvfxmul
+    1, // llvm.ppc.qpx.qvfxmuls
+    1, // llvm.ppc.qpx.qvfxxcpnmadd
+    1, // llvm.ppc.qpx.qvfxxcpnmadds
+    1, // llvm.ppc.qpx.qvfxxmadd
+    1, // llvm.ppc.qpx.qvfxxmadds
+    1, // llvm.ppc.qpx.qvfxxnpmadd
+    1, // llvm.ppc.qpx.qvfxxnpmadds
+    1, // llvm.ppc.qpx.qvgpci
+    2, // llvm.ppc.qpx.qvlfcd
+    2, // llvm.ppc.qpx.qvlfcda
+    2, // llvm.ppc.qpx.qvlfcs
+    2, // llvm.ppc.qpx.qvlfcsa
+    2, // llvm.ppc.qpx.qvlfd
+    2, // llvm.ppc.qpx.qvlfda
+    2, // llvm.ppc.qpx.qvlfiwa
+    2, // llvm.ppc.qpx.qvlfiwaa
+    2, // llvm.ppc.qpx.qvlfiwz
+    2, // llvm.ppc.qpx.qvlfiwza
+    2, // llvm.ppc.qpx.qvlfs
+    2, // llvm.ppc.qpx.qvlfsa
+    1, // llvm.ppc.qpx.qvlpcld
+    1, // llvm.ppc.qpx.qvlpcls
+    1, // llvm.ppc.qpx.qvlpcrd
+    1, // llvm.ppc.qpx.qvlpcrs
+    42, // llvm.ppc.qpx.qvstfcd
+    42, // llvm.ppc.qpx.qvstfcda
+    42, // llvm.ppc.qpx.qvstfcs
+    42, // llvm.ppc.qpx.qvstfcsa
+    42, // llvm.ppc.qpx.qvstfd
+    42, // llvm.ppc.qpx.qvstfda
+    42, // llvm.ppc.qpx.qvstfiw
+    42, // llvm.ppc.qpx.qvstfiwa
+    42, // llvm.ppc.qpx.qvstfs
+    42, // llvm.ppc.qpx.qvstfsa
+    3, // llvm.ppc.set.texasr
+    3, // llvm.ppc.set.texasru
+    3, // llvm.ppc.set.tfhar
+    3, // llvm.ppc.set.tfiar
+    1, // llvm.ppc.sqrtf128.round.to.odd
+    1, // llvm.ppc.subf128.round.to.odd
+    3, // llvm.ppc.sync
+    3, // llvm.ppc.tabort
+    3, // llvm.ppc.tabortdc
+    3, // llvm.ppc.tabortdci
+    3, // llvm.ppc.tabortwc
+    3, // llvm.ppc.tabortwci
+    3, // llvm.ppc.tbegin
+    3, // llvm.ppc.tcheck
+    3, // llvm.ppc.tend
+    3, // llvm.ppc.tendall
+    3, // llvm.ppc.trechkpt
+    3, // llvm.ppc.treclaim
+    3, // llvm.ppc.tresume
+    1, // llvm.ppc.truncf128.round.to.odd
+    3, // llvm.ppc.tsr
+    3, // llvm.ppc.tsuspend
+    3, // llvm.ppc.ttest
+    2, // llvm.ppc.vsx.lxvd2x
+    2, // llvm.ppc.vsx.lxvd2x.be
+    2, // llvm.ppc.vsx.lxvl
+    2, // llvm.ppc.vsx.lxvll
+    2, // llvm.ppc.vsx.lxvw4x
+    2, // llvm.ppc.vsx.lxvw4x.be
+    42, // llvm.ppc.vsx.stxvd2x
+    42, // llvm.ppc.vsx.stxvd2x.be
+    42, // llvm.ppc.vsx.stxvl
+    42, // llvm.ppc.vsx.stxvll
+    42, // llvm.ppc.vsx.stxvw4x
+    42, // llvm.ppc.vsx.stxvw4x.be
+    1, // llvm.ppc.vsx.xsmaxdp
+    1, // llvm.ppc.vsx.xsmindp
+    1, // llvm.ppc.vsx.xvcmpeqdp
+    1, // llvm.ppc.vsx.xvcmpeqdp.p
+    1, // llvm.ppc.vsx.xvcmpeqsp
+    1, // llvm.ppc.vsx.xvcmpeqsp.p
+    1, // llvm.ppc.vsx.xvcmpgedp
+    1, // llvm.ppc.vsx.xvcmpgedp.p
+    1, // llvm.ppc.vsx.xvcmpgesp
+    1, // llvm.ppc.vsx.xvcmpgesp.p
+    1, // llvm.ppc.vsx.xvcmpgtdp
+    1, // llvm.ppc.vsx.xvcmpgtdp.p
+    1, // llvm.ppc.vsx.xvcmpgtsp
+    1, // llvm.ppc.vsx.xvcmpgtsp.p
+    1, // llvm.ppc.vsx.xvcvdpsp
+    1, // llvm.ppc.vsx.xvcvdpsxws
+    1, // llvm.ppc.vsx.xvcvdpuxws
+    1, // llvm.ppc.vsx.xvcvhpsp
+    1, // llvm.ppc.vsx.xvcvspdp
+    1, // llvm.ppc.vsx.xvcvsphp
+    1, // llvm.ppc.vsx.xvcvsxdsp
+    1, // llvm.ppc.vsx.xvcvsxwdp
+    1, // llvm.ppc.vsx.xvcvuxdsp
+    1, // llvm.ppc.vsx.xvcvuxwdp
+    1, // llvm.ppc.vsx.xvdivdp
+    1, // llvm.ppc.vsx.xvdivsp
+    1, // llvm.ppc.vsx.xviexpdp
+    1, // llvm.ppc.vsx.xviexpsp
+    1, // llvm.ppc.vsx.xvmaxdp
+    1, // llvm.ppc.vsx.xvmaxsp
+    1, // llvm.ppc.vsx.xvmindp
+    1, // llvm.ppc.vsx.xvminsp
+    1, // llvm.ppc.vsx.xvrdpip
+    1, // llvm.ppc.vsx.xvredp
+    1, // llvm.ppc.vsx.xvresp
+    1, // llvm.ppc.vsx.xvrspip
+    1, // llvm.ppc.vsx.xvrsqrtedp
+    1, // llvm.ppc.vsx.xvrsqrtesp
+    1, // llvm.ppc.vsx.xvtstdcdp
+    1, // llvm.ppc.vsx.xvtstdcsp
+    1, // llvm.ppc.vsx.xvxexpdp
+    1, // llvm.ppc.vsx.xvxexpsp
+    1, // llvm.ppc.vsx.xvxsigdp
+    1, // llvm.ppc.vsx.xvxsigsp
+    1, // llvm.ppc.vsx.xxextractuw
+    1, // llvm.ppc.vsx.xxinsertw
+    1, // llvm.ppc.vsx.xxleqv
+    4, // llvm.r600.cube
+    1, // llvm.r600.ddx
+    1, // llvm.r600.ddy
+    4, // llvm.r600.dot4
+    35, // llvm.r600.group.barrier
+    4, // llvm.r600.implicitarg.ptr
+    3, // llvm.r600.kill
+    3, // llvm.r600.rat.store.typed
+    4, // llvm.r600.read.global.size.x
+    4, // llvm.r600.read.global.size.y
+    4, // llvm.r600.read.global.size.z
+    4, // llvm.r600.read.local.size.x
+    4, // llvm.r600.read.local.size.y
+    4, // llvm.r600.read.local.size.z
+    4, // llvm.r600.read.ngroups.x
+    4, // llvm.r600.read.ngroups.y
+    4, // llvm.r600.read.ngroups.z
+    4, // llvm.r600.read.tgid.x
+    4, // llvm.r600.read.tgid.y
+    4, // llvm.r600.read.tgid.z
+    4, // llvm.r600.read.tidig.x
+    4, // llvm.r600.read.tidig.y
+    4, // llvm.r600.read.tidig.z
+    4, // llvm.r600.recipsqrt.clamped
+    4, // llvm.r600.recipsqrt.ieee
+    3, // llvm.r600.store.stream.output
+    3, // llvm.r600.store.swizzle
+    1, // llvm.r600.tex
+    1, // llvm.r600.texc
+    1, // llvm.r600.txb
+    1, // llvm.r600.txbc
+    1, // llvm.r600.txf
+    1, // llvm.r600.txl
+    1, // llvm.r600.txlc
+    1, // llvm.r600.txq
+    3, // llvm.s390.efpc
+    1, // llvm.s390.etnd
+    1, // llvm.s390.lcbb
+    42, // llvm.s390.ntstg
+    3, // llvm.s390.ppa.txassist
+    3, // llvm.s390.sfpc
+    44, // llvm.s390.tabort
+    45, // llvm.s390.tbegin
+    45, // llvm.s390.tbegin.nofloat
+    45, // llvm.s390.tbeginc
+    1, // llvm.s390.tdc
+    3, // llvm.s390.tend
+    1, // llvm.s390.vaccb
+    1, // llvm.s390.vacccq
+    1, // llvm.s390.vaccf
+    1, // llvm.s390.vaccg
+    1, // llvm.s390.vacch
+    1, // llvm.s390.vaccq
+    1, // llvm.s390.vacq
+    1, // llvm.s390.vaq
+    1, // llvm.s390.vavgb
+    1, // llvm.s390.vavgf
+    1, // llvm.s390.vavgg
+    1, // llvm.s390.vavgh
+    1, // llvm.s390.vavglb
+    1, // llvm.s390.vavglf
+    1, // llvm.s390.vavglg
+    1, // llvm.s390.vavglh
+    1, // llvm.s390.vbperm
+    1, // llvm.s390.vceqbs
+    1, // llvm.s390.vceqfs
+    1, // llvm.s390.vceqgs
+    1, // llvm.s390.vceqhs
+    1, // llvm.s390.vchbs
+    1, // llvm.s390.vchfs
+    1, // llvm.s390.vchgs
+    1, // llvm.s390.vchhs
+    1, // llvm.s390.vchlbs
+    1, // llvm.s390.vchlfs
+    1, // llvm.s390.vchlgs
+    1, // llvm.s390.vchlhs
+    1, // llvm.s390.vcksm
+    1, // llvm.s390.verimb
+    1, // llvm.s390.verimf
+    1, // llvm.s390.verimg
+    1, // llvm.s390.verimh
+    1, // llvm.s390.verllb
+    1, // llvm.s390.verllf
+    1, // llvm.s390.verllg
+    1, // llvm.s390.verllh
+    1, // llvm.s390.verllvb
+    1, // llvm.s390.verllvf
+    1, // llvm.s390.verllvg
+    1, // llvm.s390.verllvh
+    1, // llvm.s390.vfaeb
+    1, // llvm.s390.vfaebs
+    1, // llvm.s390.vfaef
+    1, // llvm.s390.vfaefs
+    1, // llvm.s390.vfaeh
+    1, // llvm.s390.vfaehs
+    1, // llvm.s390.vfaezb
+    1, // llvm.s390.vfaezbs
+    1, // llvm.s390.vfaezf
+    1, // llvm.s390.vfaezfs
+    1, // llvm.s390.vfaezh
+    1, // llvm.s390.vfaezhs
+    1, // llvm.s390.vfcedbs
+    1, // llvm.s390.vfcesbs
+    1, // llvm.s390.vfchdbs
+    1, // llvm.s390.vfchedbs
+    1, // llvm.s390.vfchesbs
+    1, // llvm.s390.vfchsbs
+    1, // llvm.s390.vfeeb
+    1, // llvm.s390.vfeebs
+    1, // llvm.s390.vfeef
+    1, // llvm.s390.vfeefs
+    1, // llvm.s390.vfeeh
+    1, // llvm.s390.vfeehs
+    1, // llvm.s390.vfeezb
+    1, // llvm.s390.vfeezbs
+    1, // llvm.s390.vfeezf
+    1, // llvm.s390.vfeezfs
+    1, // llvm.s390.vfeezh
+    1, // llvm.s390.vfeezhs
+    1, // llvm.s390.vfeneb
+    1, // llvm.s390.vfenebs
+    1, // llvm.s390.vfenef
+    1, // llvm.s390.vfenefs
+    1, // llvm.s390.vfeneh
+    1, // llvm.s390.vfenehs
+    1, // llvm.s390.vfenezb
+    1, // llvm.s390.vfenezbs
+    1, // llvm.s390.vfenezf
+    1, // llvm.s390.vfenezfs
+    1, // llvm.s390.vfenezh
+    1, // llvm.s390.vfenezhs
+    1, // llvm.s390.vfidb
+    1, // llvm.s390.vfisb
+    1, // llvm.s390.vfmaxdb
+    1, // llvm.s390.vfmaxsb
+    1, // llvm.s390.vfmindb
+    1, // llvm.s390.vfminsb
+    1, // llvm.s390.vftcidb
+    1, // llvm.s390.vftcisb
+    1, // llvm.s390.vgfmab
+    1, // llvm.s390.vgfmaf
+    1, // llvm.s390.vgfmag
+    1, // llvm.s390.vgfmah
+    1, // llvm.s390.vgfmb
+    1, // llvm.s390.vgfmf
+    1, // llvm.s390.vgfmg
+    1, // llvm.s390.vgfmh
+    1, // llvm.s390.vistrb
+    1, // llvm.s390.vistrbs
+    1, // llvm.s390.vistrf
+    1, // llvm.s390.vistrfs
+    1, // llvm.s390.vistrh
+    1, // llvm.s390.vistrhs
+    2, // llvm.s390.vlbb
+    2, // llvm.s390.vll
+    2, // llvm.s390.vlrl
+    1, // llvm.s390.vmaeb
+    1, // llvm.s390.vmaef
+    1, // llvm.s390.vmaeh
+    1, // llvm.s390.vmahb
+    1, // llvm.s390.vmahf
+    1, // llvm.s390.vmahh
+    1, // llvm.s390.vmaleb
+    1, // llvm.s390.vmalef
+    1, // llvm.s390.vmaleh
+    1, // llvm.s390.vmalhb
+    1, // llvm.s390.vmalhf
+    1, // llvm.s390.vmalhh
+    1, // llvm.s390.vmalob
+    1, // llvm.s390.vmalof
+    1, // llvm.s390.vmaloh
+    1, // llvm.s390.vmaob
+    1, // llvm.s390.vmaof
+    1, // llvm.s390.vmaoh
+    1, // llvm.s390.vmeb
+    1, // llvm.s390.vmef
+    1, // llvm.s390.vmeh
+    1, // llvm.s390.vmhb
+    1, // llvm.s390.vmhf
+    1, // llvm.s390.vmhh
+    1, // llvm.s390.vmleb
+    1, // llvm.s390.vmlef
+    1, // llvm.s390.vmleh
+    1, // llvm.s390.vmlhb
+    1, // llvm.s390.vmlhf
+    1, // llvm.s390.vmlhh
+    1, // llvm.s390.vmlob
+    1, // llvm.s390.vmlof
+    1, // llvm.s390.vmloh
+    1, // llvm.s390.vmob
+    1, // llvm.s390.vmof
+    1, // llvm.s390.vmoh
+    1, // llvm.s390.vmslg
+    1, // llvm.s390.vpdi
+    1, // llvm.s390.vperm
+    1, // llvm.s390.vpklsf
+    1, // llvm.s390.vpklsfs
+    1, // llvm.s390.vpklsg
+    1, // llvm.s390.vpklsgs
+    1, // llvm.s390.vpklsh
+    1, // llvm.s390.vpklshs
+    1, // llvm.s390.vpksf
+    1, // llvm.s390.vpksfs
+    1, // llvm.s390.vpksg
+    1, // llvm.s390.vpksgs
+    1, // llvm.s390.vpksh
+    1, // llvm.s390.vpkshs
+    1, // llvm.s390.vsbcbiq
+    1, // llvm.s390.vsbiq
+    1, // llvm.s390.vscbib
+    1, // llvm.s390.vscbif
+    1, // llvm.s390.vscbig
+    1, // llvm.s390.vscbih
+    1, // llvm.s390.vscbiq
+    1, // llvm.s390.vsl
+    1, // llvm.s390.vslb
+    1, // llvm.s390.vsldb
+    1, // llvm.s390.vsq
+    1, // llvm.s390.vsra
+    1, // llvm.s390.vsrab
+    1, // llvm.s390.vsrl
+    1, // llvm.s390.vsrlb
+    42, // llvm.s390.vstl
+    1, // llvm.s390.vstrcb
+    1, // llvm.s390.vstrcbs
+    1, // llvm.s390.vstrcf
+    1, // llvm.s390.vstrcfs
+    1, // llvm.s390.vstrch
+    1, // llvm.s390.vstrchs
+    1, // llvm.s390.vstrczb
+    1, // llvm.s390.vstrczbs
+    1, // llvm.s390.vstrczf
+    1, // llvm.s390.vstrczfs
+    1, // llvm.s390.vstrczh
+    1, // llvm.s390.vstrczhs
+    42, // llvm.s390.vstrl
+    1, // llvm.s390.vsumb
+    1, // llvm.s390.vsumgf
+    1, // llvm.s390.vsumgh
+    1, // llvm.s390.vsumh
+    1, // llvm.s390.vsumqf
+    1, // llvm.s390.vsumqg
+    1, // llvm.s390.vtm
+    1, // llvm.s390.vuphb
+    1, // llvm.s390.vuphf
+    1, // llvm.s390.vuphh
+    1, // llvm.s390.vuplb
+    1, // llvm.s390.vuplf
+    1, // llvm.s390.vuplhb
+    1, // llvm.s390.vuplhf
+    1, // llvm.s390.vuplhh
+    1, // llvm.s390.vuplhw
+    1, // llvm.s390.vupllb
+    1, // llvm.s390.vupllf
+    1, // llvm.s390.vupllh
+    46, // llvm.wasm.atomic.notify
+    47, // llvm.wasm.atomic.wait.i32
+    47, // llvm.wasm.atomic.wait.i64
+    48, // llvm.wasm.catch
+    16, // llvm.wasm.current.memory
+    48, // llvm.wasm.get.ehselector
+    48, // llvm.wasm.get.exception
+    3, // llvm.wasm.grow.memory
+    1, // llvm.wasm.landingpad.index
+    1, // llvm.wasm.lsda
+    3, // llvm.wasm.mem.grow
+    16, // llvm.wasm.mem.size
+    3, // llvm.wasm.memory.grow
+    16, // llvm.wasm.memory.size
+    49, // llvm.wasm.rethrow
+    49, // llvm.wasm.throw
+    1, // llvm.x86.3dnow.pavgusb
+    1, // llvm.x86.3dnow.pf2id
+    1, // llvm.x86.3dnow.pfacc
+    1, // llvm.x86.3dnow.pfadd
+    1, // llvm.x86.3dnow.pfcmpeq
+    1, // llvm.x86.3dnow.pfcmpge
+    1, // llvm.x86.3dnow.pfcmpgt
+    1, // llvm.x86.3dnow.pfmax
+    1, // llvm.x86.3dnow.pfmin
+    1, // llvm.x86.3dnow.pfmul
+    1, // llvm.x86.3dnow.pfrcp
+    1, // llvm.x86.3dnow.pfrcpit1
+    1, // llvm.x86.3dnow.pfrcpit2
+    1, // llvm.x86.3dnow.pfrsqit1
+    1, // llvm.x86.3dnow.pfrsqrt
+    1, // llvm.x86.3dnow.pfsub
+    1, // llvm.x86.3dnow.pfsubr
+    1, // llvm.x86.3dnow.pi2fd
+    1, // llvm.x86.3dnow.pmulhrw
+    1, // llvm.x86.3dnowa.pf2iw
+    1, // llvm.x86.3dnowa.pfnacc
+    1, // llvm.x86.3dnowa.pfpnacc
+    1, // llvm.x86.3dnowa.pi2fw
+    1, // llvm.x86.3dnowa.pswapd
+    22, // llvm.x86.addcarry.u32
+    22, // llvm.x86.addcarry.u64
+    22, // llvm.x86.addcarryx.u32
+    22, // llvm.x86.addcarryx.u64
+    1, // llvm.x86.aesni.aesdec
+    1, // llvm.x86.aesni.aesdec.256
+    1, // llvm.x86.aesni.aesdec.512
+    1, // llvm.x86.aesni.aesdeclast
+    1, // llvm.x86.aesni.aesdeclast.256
+    1, // llvm.x86.aesni.aesdeclast.512
+    1, // llvm.x86.aesni.aesenc
+    1, // llvm.x86.aesni.aesenc.256
+    1, // llvm.x86.aesni.aesenc.512
+    1, // llvm.x86.aesni.aesenclast
+    1, // llvm.x86.aesni.aesenclast.256
+    1, // llvm.x86.aesni.aesenclast.512
+    1, // llvm.x86.aesni.aesimc
+    1, // llvm.x86.aesni.aeskeygenassist
+    1, // llvm.x86.avx.addsub.pd.256
+    1, // llvm.x86.avx.addsub.ps.256
+    1, // llvm.x86.avx.blendv.pd.256
+    1, // llvm.x86.avx.blendv.ps.256
+    1, // llvm.x86.avx.cmp.pd.256
+    1, // llvm.x86.avx.cmp.ps.256
+    1, // llvm.x86.avx.cvt.pd2.ps.256
+    1, // llvm.x86.avx.cvt.pd2dq.256
+    1, // llvm.x86.avx.cvt.ps2dq.256
+    1, // llvm.x86.avx.cvtt.pd2dq.256
+    1, // llvm.x86.avx.cvtt.ps2dq.256
+    1, // llvm.x86.avx.dp.ps.256
+    1, // llvm.x86.avx.hadd.pd.256
+    1, // llvm.x86.avx.hadd.ps.256
+    1, // llvm.x86.avx.hsub.pd.256
+    1, // llvm.x86.avx.hsub.ps.256
+    16, // llvm.x86.avx.ldu.dq.256
+    2, // llvm.x86.avx.maskload.pd
+    2, // llvm.x86.avx.maskload.pd.256
+    2, // llvm.x86.avx.maskload.ps
+    2, // llvm.x86.avx.maskload.ps.256
+    22, // llvm.x86.avx.maskstore.pd
+    22, // llvm.x86.avx.maskstore.pd.256
+    22, // llvm.x86.avx.maskstore.ps
+    22, // llvm.x86.avx.maskstore.ps.256
+    1, // llvm.x86.avx.max.pd.256
+    1, // llvm.x86.avx.max.ps.256
+    1, // llvm.x86.avx.min.pd.256
+    1, // llvm.x86.avx.min.ps.256
+    1, // llvm.x86.avx.movmsk.pd.256
+    1, // llvm.x86.avx.movmsk.ps.256
+    1, // llvm.x86.avx.ptestc.256
+    1, // llvm.x86.avx.ptestnzc.256
+    1, // llvm.x86.avx.ptestz.256
+    1, // llvm.x86.avx.rcp.ps.256
+    1, // llvm.x86.avx.round.pd.256
+    1, // llvm.x86.avx.round.ps.256
+    1, // llvm.x86.avx.rsqrt.ps.256
+    1, // llvm.x86.avx.vpermilvar.pd
+    1, // llvm.x86.avx.vpermilvar.pd.256
+    1, // llvm.x86.avx.vpermilvar.ps
+    1, // llvm.x86.avx.vpermilvar.ps.256
+    1, // llvm.x86.avx.vtestc.pd
+    1, // llvm.x86.avx.vtestc.pd.256
+    1, // llvm.x86.avx.vtestc.ps
+    1, // llvm.x86.avx.vtestc.ps.256
+    1, // llvm.x86.avx.vtestnzc.pd
+    1, // llvm.x86.avx.vtestnzc.pd.256
+    1, // llvm.x86.avx.vtestnzc.ps
+    1, // llvm.x86.avx.vtestnzc.ps.256
+    1, // llvm.x86.avx.vtestz.pd
+    1, // llvm.x86.avx.vtestz.pd.256
+    1, // llvm.x86.avx.vtestz.ps
+    1, // llvm.x86.avx.vtestz.ps.256
+    3, // llvm.x86.avx.vzeroall
+    3, // llvm.x86.avx.vzeroupper
+    2, // llvm.x86.avx2.gather.d.d
+    2, // llvm.x86.avx2.gather.d.d.256
+    2, // llvm.x86.avx2.gather.d.pd
+    2, // llvm.x86.avx2.gather.d.pd.256
+    2, // llvm.x86.avx2.gather.d.ps
+    2, // llvm.x86.avx2.gather.d.ps.256
+    2, // llvm.x86.avx2.gather.d.q
+    2, // llvm.x86.avx2.gather.d.q.256
+    2, // llvm.x86.avx2.gather.q.d
+    2, // llvm.x86.avx2.gather.q.d.256
+    2, // llvm.x86.avx2.gather.q.pd
+    2, // llvm.x86.avx2.gather.q.pd.256
+    2, // llvm.x86.avx2.gather.q.ps
+    2, // llvm.x86.avx2.gather.q.ps.256
+    2, // llvm.x86.avx2.gather.q.q
+    2, // llvm.x86.avx2.gather.q.q.256
+    2, // llvm.x86.avx2.maskload.d
+    2, // llvm.x86.avx2.maskload.d.256
+    2, // llvm.x86.avx2.maskload.q
+    2, // llvm.x86.avx2.maskload.q.256
+    22, // llvm.x86.avx2.maskstore.d
+    22, // llvm.x86.avx2.maskstore.d.256
+    22, // llvm.x86.avx2.maskstore.q
+    22, // llvm.x86.avx2.maskstore.q.256
+    1, // llvm.x86.avx2.mpsadbw
+    1, // llvm.x86.avx2.packssdw
+    1, // llvm.x86.avx2.packsswb
+    1, // llvm.x86.avx2.packusdw
+    1, // llvm.x86.avx2.packuswb
+    1, // llvm.x86.avx2.padds.b
+    1, // llvm.x86.avx2.padds.w
+    1, // llvm.x86.avx2.paddus.b
+    1, // llvm.x86.avx2.paddus.w
+    1, // llvm.x86.avx2.pblendvb
+    1, // llvm.x86.avx2.permd
+    1, // llvm.x86.avx2.permps
+    1, // llvm.x86.avx2.phadd.d
+    1, // llvm.x86.avx2.phadd.sw
+    1, // llvm.x86.avx2.phadd.w
+    1, // llvm.x86.avx2.phsub.d
+    1, // llvm.x86.avx2.phsub.sw
+    1, // llvm.x86.avx2.phsub.w
+    1, // llvm.x86.avx2.pmadd.ub.sw
+    1, // llvm.x86.avx2.pmadd.wd
+    1, // llvm.x86.avx2.pmovmskb
+    1, // llvm.x86.avx2.pmul.hr.sw
+    1, // llvm.x86.avx2.pmulh.w
+    1, // llvm.x86.avx2.pmulhu.w
+    1, // llvm.x86.avx2.psad.bw
+    1, // llvm.x86.avx2.pshuf.b
+    1, // llvm.x86.avx2.psign.b
+    1, // llvm.x86.avx2.psign.d
+    1, // llvm.x86.avx2.psign.w
+    1, // llvm.x86.avx2.psll.d
+    1, // llvm.x86.avx2.psll.q
+    1, // llvm.x86.avx2.psll.w
+    1, // llvm.x86.avx2.pslli.d
+    1, // llvm.x86.avx2.pslli.q
+    1, // llvm.x86.avx2.pslli.w
+    1, // llvm.x86.avx2.psllv.d
+    1, // llvm.x86.avx2.psllv.d.256
+    1, // llvm.x86.avx2.psllv.q
+    1, // llvm.x86.avx2.psllv.q.256
+    1, // llvm.x86.avx2.psra.d
+    1, // llvm.x86.avx2.psra.w
+    1, // llvm.x86.avx2.psrai.d
+    1, // llvm.x86.avx2.psrai.w
+    1, // llvm.x86.avx2.psrav.d
+    1, // llvm.x86.avx2.psrav.d.256
+    1, // llvm.x86.avx2.psrl.d
+    1, // llvm.x86.avx2.psrl.q
+    1, // llvm.x86.avx2.psrl.w
+    1, // llvm.x86.avx2.psrli.d
+    1, // llvm.x86.avx2.psrli.q
+    1, // llvm.x86.avx2.psrli.w
+    1, // llvm.x86.avx2.psrlv.d
+    1, // llvm.x86.avx2.psrlv.d.256
+    1, // llvm.x86.avx2.psrlv.q
+    1, // llvm.x86.avx2.psrlv.q.256
+    1, // llvm.x86.avx2.psubs.b
+    1, // llvm.x86.avx2.psubs.w
+    1, // llvm.x86.avx2.psubus.b
+    1, // llvm.x86.avx2.psubus.w
+    1, // llvm.x86.avx512.add.pd.512
+    1, // llvm.x86.avx512.add.ps.512
+    1, // llvm.x86.avx512.broadcastmb.128
+    1, // llvm.x86.avx512.broadcastmb.256
+    1, // llvm.x86.avx512.broadcastmb.512
+    1, // llvm.x86.avx512.broadcastmw.128
+    1, // llvm.x86.avx512.broadcastmw.256
+    1, // llvm.x86.avx512.broadcastmw.512
+    1, // llvm.x86.avx512.cmp.pd.128
+    1, // llvm.x86.avx512.cmp.pd.256
+    1, // llvm.x86.avx512.cmp.pd.512
+    1, // llvm.x86.avx512.cmp.ps.128
+    1, // llvm.x86.avx512.cmp.ps.256
+    1, // llvm.x86.avx512.cmp.ps.512
+    1, // llvm.x86.avx512.cvtsi2sd64
+    1, // llvm.x86.avx512.cvtsi2ss32
+    1, // llvm.x86.avx512.cvtsi2ss64
+    1, // llvm.x86.avx512.cvttsd2si
+    1, // llvm.x86.avx512.cvttsd2si64
+    1, // llvm.x86.avx512.cvttsd2usi
+    1, // llvm.x86.avx512.cvttsd2usi64
+    1, // llvm.x86.avx512.cvttss2si
+    1, // llvm.x86.avx512.cvttss2si64
+    1, // llvm.x86.avx512.cvttss2usi
+    1, // llvm.x86.avx512.cvttss2usi64
+    1, // llvm.x86.avx512.cvtusi2ss
+    1, // llvm.x86.avx512.cvtusi642sd
+    1, // llvm.x86.avx512.cvtusi642ss
+    1, // llvm.x86.avx512.dbpsadbw.128
+    1, // llvm.x86.avx512.dbpsadbw.256
+    1, // llvm.x86.avx512.dbpsadbw.512
+    1, // llvm.x86.avx512.div.pd.512
+    1, // llvm.x86.avx512.div.ps.512
+    1, // llvm.x86.avx512.exp2.pd
+    1, // llvm.x86.avx512.exp2.ps
+    1, // llvm.x86.avx512.fpclass.pd.128
+    1, // llvm.x86.avx512.fpclass.pd.256
+    1, // llvm.x86.avx512.fpclass.pd.512
+    1, // llvm.x86.avx512.fpclass.ps.128
+    1, // llvm.x86.avx512.fpclass.ps.256
+    1, // llvm.x86.avx512.fpclass.ps.512
+    2, // llvm.x86.avx512.gather.dpd.512
+    2, // llvm.x86.avx512.gather.dpi.512
+    2, // llvm.x86.avx512.gather.dpq.512
+    2, // llvm.x86.avx512.gather.dps.512
+    2, // llvm.x86.avx512.gather.qpd.512
+    2, // llvm.x86.avx512.gather.qpi.512
+    2, // llvm.x86.avx512.gather.qpq.512
+    2, // llvm.x86.avx512.gather.qps.512
+    2, // llvm.x86.avx512.gather3div2.df
+    2, // llvm.x86.avx512.gather3div2.di
+    2, // llvm.x86.avx512.gather3div4.df
+    2, // llvm.x86.avx512.gather3div4.di
+    2, // llvm.x86.avx512.gather3div4.sf
+    2, // llvm.x86.avx512.gather3div4.si
+    2, // llvm.x86.avx512.gather3div8.sf
+    2, // llvm.x86.avx512.gather3div8.si
+    2, // llvm.x86.avx512.gather3siv2.df
+    2, // llvm.x86.avx512.gather3siv2.di
+    2, // llvm.x86.avx512.gather3siv4.df
+    2, // llvm.x86.avx512.gather3siv4.di
+    2, // llvm.x86.avx512.gather3siv4.sf
+    2, // llvm.x86.avx512.gather3siv4.si
+    2, // llvm.x86.avx512.gather3siv8.sf
+    2, // llvm.x86.avx512.gather3siv8.si
+    22, // llvm.x86.avx512.gatherpf.dpd.512
+    22, // llvm.x86.avx512.gatherpf.dps.512
+    22, // llvm.x86.avx512.gatherpf.qpd.512
+    22, // llvm.x86.avx512.gatherpf.qps.512
+    1, // llvm.x86.avx512.mask.add.sd.round
+    1, // llvm.x86.avx512.mask.add.ss.round
+    1, // llvm.x86.avx512.mask.cmp.sd
+    1, // llvm.x86.avx512.mask.cmp.ss
+    1, // llvm.x86.avx512.mask.compress.b.128
+    1, // llvm.x86.avx512.mask.compress.b.256
+    1, // llvm.x86.avx512.mask.compress.b.512
+    1, // llvm.x86.avx512.mask.compress.d.128
+    1, // llvm.x86.avx512.mask.compress.d.256
+    1, // llvm.x86.avx512.mask.compress.d.512
+    1, // llvm.x86.avx512.mask.compress.pd.128
+    1, // llvm.x86.avx512.mask.compress.pd.256
+    1, // llvm.x86.avx512.mask.compress.pd.512
+    1, // llvm.x86.avx512.mask.compress.ps.128
+    1, // llvm.x86.avx512.mask.compress.ps.256
+    1, // llvm.x86.avx512.mask.compress.ps.512
+    1, // llvm.x86.avx512.mask.compress.q.128
+    1, // llvm.x86.avx512.mask.compress.q.256
+    1, // llvm.x86.avx512.mask.compress.q.512
+    1, // llvm.x86.avx512.mask.compress.w.128
+    1, // llvm.x86.avx512.mask.compress.w.256
+    1, // llvm.x86.avx512.mask.compress.w.512
+    1, // llvm.x86.avx512.mask.conflict.d.128
+    1, // llvm.x86.avx512.mask.conflict.d.256
+    1, // llvm.x86.avx512.mask.conflict.d.512
+    1, // llvm.x86.avx512.mask.conflict.q.128
+    1, // llvm.x86.avx512.mask.conflict.q.256
+    1, // llvm.x86.avx512.mask.conflict.q.512
+    1, // llvm.x86.avx512.mask.cvtdq2ps.512
+    1, // llvm.x86.avx512.mask.cvtpd2dq.128
+    1, // llvm.x86.avx512.mask.cvtpd2dq.512
+    1, // llvm.x86.avx512.mask.cvtpd2ps
+    1, // llvm.x86.avx512.mask.cvtpd2ps.512
+    1, // llvm.x86.avx512.mask.cvtpd2qq.128
+    1, // llvm.x86.avx512.mask.cvtpd2qq.256
+    1, // llvm.x86.avx512.mask.cvtpd2qq.512
+    1, // llvm.x86.avx512.mask.cvtpd2udq.128
+    1, // llvm.x86.avx512.mask.cvtpd2udq.256
+    1, // llvm.x86.avx512.mask.cvtpd2udq.512
+    1, // llvm.x86.avx512.mask.cvtpd2uqq.128
+    1, // llvm.x86.avx512.mask.cvtpd2uqq.256
+    1, // llvm.x86.avx512.mask.cvtpd2uqq.512
+    1, // llvm.x86.avx512.mask.cvtps2dq.128
+    1, // llvm.x86.avx512.mask.cvtps2dq.256
+    1, // llvm.x86.avx512.mask.cvtps2dq.512
+    1, // llvm.x86.avx512.mask.cvtps2pd.512
+    1, // llvm.x86.avx512.mask.cvtps2qq.128
+    1, // llvm.x86.avx512.mask.cvtps2qq.256
+    1, // llvm.x86.avx512.mask.cvtps2qq.512
+    1, // llvm.x86.avx512.mask.cvtps2udq.128
+    1, // llvm.x86.avx512.mask.cvtps2udq.256
+    1, // llvm.x86.avx512.mask.cvtps2udq.512
+    1, // llvm.x86.avx512.mask.cvtps2uqq.128
+    1, // llvm.x86.avx512.mask.cvtps2uqq.256
+    1, // llvm.x86.avx512.mask.cvtps2uqq.512
+    1, // llvm.x86.avx512.mask.cvtqq2pd.512
+    1, // llvm.x86.avx512.mask.cvtqq2ps.128
+    1, // llvm.x86.avx512.mask.cvtqq2ps.256
+    1, // llvm.x86.avx512.mask.cvtqq2ps.512
+    1, // llvm.x86.avx512.mask.cvtsd2ss.round
+    1, // llvm.x86.avx512.mask.cvtss2sd.round
+    1, // llvm.x86.avx512.mask.cvttpd2dq.128
+    1, // llvm.x86.avx512.mask.cvttpd2dq.512
+    1, // llvm.x86.avx512.mask.cvttpd2qq.128
+    1, // llvm.x86.avx512.mask.cvttpd2qq.256
+    1, // llvm.x86.avx512.mask.cvttpd2qq.512
+    1, // llvm.x86.avx512.mask.cvttpd2udq.128
+    1, // llvm.x86.avx512.mask.cvttpd2udq.256
+    1, // llvm.x86.avx512.mask.cvttpd2udq.512
+    1, // llvm.x86.avx512.mask.cvttpd2uqq.128
+    1, // llvm.x86.avx512.mask.cvttpd2uqq.256
+    1, // llvm.x86.avx512.mask.cvttpd2uqq.512
+    1, // llvm.x86.avx512.mask.cvttps2dq.512
+    1, // llvm.x86.avx512.mask.cvttps2qq.128
+    1, // llvm.x86.avx512.mask.cvttps2qq.256
+    1, // llvm.x86.avx512.mask.cvttps2qq.512
+    1, // llvm.x86.avx512.mask.cvttps2udq.128
+    1, // llvm.x86.avx512.mask.cvttps2udq.256
+    1, // llvm.x86.avx512.mask.cvttps2udq.512
+    1, // llvm.x86.avx512.mask.cvttps2uqq.128
+    1, // llvm.x86.avx512.mask.cvttps2uqq.256
+    1, // llvm.x86.avx512.mask.cvttps2uqq.512
+    1, // llvm.x86.avx512.mask.cvtudq2ps.512
+    1, // llvm.x86.avx512.mask.cvtuqq2pd.512
+    1, // llvm.x86.avx512.mask.cvtuqq2ps.128
+    1, // llvm.x86.avx512.mask.cvtuqq2ps.256
+    1, // llvm.x86.avx512.mask.cvtuqq2ps.512
+    1, // llvm.x86.avx512.mask.div.sd.round
+    1, // llvm.x86.avx512.mask.div.ss.round
+    1, // llvm.x86.avx512.mask.expand.b.128
+    1, // llvm.x86.avx512.mask.expand.b.256
+    1, // llvm.x86.avx512.mask.expand.b.512
+    1, // llvm.x86.avx512.mask.expand.d.128
+    1, // llvm.x86.avx512.mask.expand.d.256
+    1, // llvm.x86.avx512.mask.expand.d.512
+    1, // llvm.x86.avx512.mask.expand.pd.128
+    1, // llvm.x86.avx512.mask.expand.pd.256
+    1, // llvm.x86.avx512.mask.expand.pd.512
+    1, // llvm.x86.avx512.mask.expand.ps.128
+    1, // llvm.x86.avx512.mask.expand.ps.256
+    1, // llvm.x86.avx512.mask.expand.ps.512
+    1, // llvm.x86.avx512.mask.expand.q.128
+    1, // llvm.x86.avx512.mask.expand.q.256
+    1, // llvm.x86.avx512.mask.expand.q.512
+    1, // llvm.x86.avx512.mask.expand.w.128
+    1, // llvm.x86.avx512.mask.expand.w.256
+    1, // llvm.x86.avx512.mask.expand.w.512
+    1, // llvm.x86.avx512.mask.fixupimm.pd.128
+    1, // llvm.x86.avx512.mask.fixupimm.pd.256
+    1, // llvm.x86.avx512.mask.fixupimm.pd.512
+    1, // llvm.x86.avx512.mask.fixupimm.ps.128
+    1, // llvm.x86.avx512.mask.fixupimm.ps.256
+    1, // llvm.x86.avx512.mask.fixupimm.ps.512
+    1, // llvm.x86.avx512.mask.fixupimm.sd
+    1, // llvm.x86.avx512.mask.fixupimm.ss
+    1, // llvm.x86.avx512.mask.fpclass.sd
+    1, // llvm.x86.avx512.mask.fpclass.ss
+    1, // llvm.x86.avx512.mask.getexp.pd.128
+    1, // llvm.x86.avx512.mask.getexp.pd.256
+    1, // llvm.x86.avx512.mask.getexp.pd.512
+    1, // llvm.x86.avx512.mask.getexp.ps.128
+    1, // llvm.x86.avx512.mask.getexp.ps.256
+    1, // llvm.x86.avx512.mask.getexp.ps.512
+    1, // llvm.x86.avx512.mask.getexp.sd
+    1, // llvm.x86.avx512.mask.getexp.ss
+    1, // llvm.x86.avx512.mask.getmant.pd.128
+    1, // llvm.x86.avx512.mask.getmant.pd.256
+    1, // llvm.x86.avx512.mask.getmant.pd.512
+    1, // llvm.x86.avx512.mask.getmant.ps.128
+    1, // llvm.x86.avx512.mask.getmant.ps.256
+    1, // llvm.x86.avx512.mask.getmant.ps.512
+    1, // llvm.x86.avx512.mask.getmant.sd
+    1, // llvm.x86.avx512.mask.getmant.ss
+    1, // llvm.x86.avx512.mask.max.sd.round
+    1, // llvm.x86.avx512.mask.max.ss.round
+    1, // llvm.x86.avx512.mask.min.sd.round
+    1, // llvm.x86.avx512.mask.min.ss.round
+    1, // llvm.x86.avx512.mask.mul.sd.round
+    1, // llvm.x86.avx512.mask.mul.ss.round
+    1, // llvm.x86.avx512.mask.padds.b.128
+    1, // llvm.x86.avx512.mask.padds.b.256
+    1, // llvm.x86.avx512.mask.padds.b.512
+    1, // llvm.x86.avx512.mask.padds.w.128
+    1, // llvm.x86.avx512.mask.padds.w.256
+    1, // llvm.x86.avx512.mask.padds.w.512
+    1, // llvm.x86.avx512.mask.paddus.b.128
+    1, // llvm.x86.avx512.mask.paddus.b.256
+    1, // llvm.x86.avx512.mask.paddus.b.512
+    1, // llvm.x86.avx512.mask.paddus.w.128
+    1, // llvm.x86.avx512.mask.paddus.w.256
+    1, // llvm.x86.avx512.mask.paddus.w.512
+    1, // llvm.x86.avx512.mask.pmov.db.128
+    1, // llvm.x86.avx512.mask.pmov.db.256
+    1, // llvm.x86.avx512.mask.pmov.db.512
+    22, // llvm.x86.avx512.mask.pmov.db.mem.128
+    22, // llvm.x86.avx512.mask.pmov.db.mem.256
+    22, // llvm.x86.avx512.mask.pmov.db.mem.512
+    1, // llvm.x86.avx512.mask.pmov.dw.128
+    1, // llvm.x86.avx512.mask.pmov.dw.256
+    1, // llvm.x86.avx512.mask.pmov.dw.512
+    22, // llvm.x86.avx512.mask.pmov.dw.mem.128
+    22, // llvm.x86.avx512.mask.pmov.dw.mem.256
+    22, // llvm.x86.avx512.mask.pmov.dw.mem.512
+    1, // llvm.x86.avx512.mask.pmov.qb.128
+    1, // llvm.x86.avx512.mask.pmov.qb.256
+    1, // llvm.x86.avx512.mask.pmov.qb.512
+    22, // llvm.x86.avx512.mask.pmov.qb.mem.128
+    22, // llvm.x86.avx512.mask.pmov.qb.mem.256
+    22, // llvm.x86.avx512.mask.pmov.qb.mem.512
+    1, // llvm.x86.avx512.mask.pmov.qd.128
+    1, // llvm.x86.avx512.mask.pmov.qd.256
+    1, // llvm.x86.avx512.mask.pmov.qd.512
+    22, // llvm.x86.avx512.mask.pmov.qd.mem.128
+    22, // llvm.x86.avx512.mask.pmov.qd.mem.256
+    22, // llvm.x86.avx512.mask.pmov.qd.mem.512
+    1, // llvm.x86.avx512.mask.pmov.qw.128
+    1, // llvm.x86.avx512.mask.pmov.qw.256
+    1, // llvm.x86.avx512.mask.pmov.qw.512
+    22, // llvm.x86.avx512.mask.pmov.qw.mem.128
+    22, // llvm.x86.avx512.mask.pmov.qw.mem.256
+    22, // llvm.x86.avx512.mask.pmov.qw.mem.512
+    1, // llvm.x86.avx512.mask.pmov.wb.128
+    1, // llvm.x86.avx512.mask.pmov.wb.256
+    1, // llvm.x86.avx512.mask.pmov.wb.512
+    22, // llvm.x86.avx512.mask.pmov.wb.mem.128
+    22, // llvm.x86.avx512.mask.pmov.wb.mem.256
+    22, // llvm.x86.avx512.mask.pmov.wb.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.db.128
+    1, // llvm.x86.avx512.mask.pmovs.db.256
+    1, // llvm.x86.avx512.mask.pmovs.db.512
+    22, // llvm.x86.avx512.mask.pmovs.db.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.db.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.db.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.dw.128
+    1, // llvm.x86.avx512.mask.pmovs.dw.256
+    1, // llvm.x86.avx512.mask.pmovs.dw.512
+    22, // llvm.x86.avx512.mask.pmovs.dw.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.dw.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.dw.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.qb.128
+    1, // llvm.x86.avx512.mask.pmovs.qb.256
+    1, // llvm.x86.avx512.mask.pmovs.qb.512
+    22, // llvm.x86.avx512.mask.pmovs.qb.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.qb.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.qb.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.qd.128
+    1, // llvm.x86.avx512.mask.pmovs.qd.256
+    1, // llvm.x86.avx512.mask.pmovs.qd.512
+    22, // llvm.x86.avx512.mask.pmovs.qd.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.qd.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.qd.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.qw.128
+    1, // llvm.x86.avx512.mask.pmovs.qw.256
+    1, // llvm.x86.avx512.mask.pmovs.qw.512
+    22, // llvm.x86.avx512.mask.pmovs.qw.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.qw.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.qw.mem.512
+    1, // llvm.x86.avx512.mask.pmovs.wb.128
+    1, // llvm.x86.avx512.mask.pmovs.wb.256
+    1, // llvm.x86.avx512.mask.pmovs.wb.512
+    22, // llvm.x86.avx512.mask.pmovs.wb.mem.128
+    22, // llvm.x86.avx512.mask.pmovs.wb.mem.256
+    22, // llvm.x86.avx512.mask.pmovs.wb.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.db.128
+    1, // llvm.x86.avx512.mask.pmovus.db.256
+    1, // llvm.x86.avx512.mask.pmovus.db.512
+    22, // llvm.x86.avx512.mask.pmovus.db.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.db.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.db.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.dw.128
+    1, // llvm.x86.avx512.mask.pmovus.dw.256
+    1, // llvm.x86.avx512.mask.pmovus.dw.512
+    22, // llvm.x86.avx512.mask.pmovus.dw.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.dw.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.dw.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.qb.128
+    1, // llvm.x86.avx512.mask.pmovus.qb.256
+    1, // llvm.x86.avx512.mask.pmovus.qb.512
+    22, // llvm.x86.avx512.mask.pmovus.qb.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.qb.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.qb.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.qd.128
+    1, // llvm.x86.avx512.mask.pmovus.qd.256
+    1, // llvm.x86.avx512.mask.pmovus.qd.512
+    22, // llvm.x86.avx512.mask.pmovus.qd.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.qd.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.qd.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.qw.128
+    1, // llvm.x86.avx512.mask.pmovus.qw.256
+    1, // llvm.x86.avx512.mask.pmovus.qw.512
+    22, // llvm.x86.avx512.mask.pmovus.qw.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.qw.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.qw.mem.512
+    1, // llvm.x86.avx512.mask.pmovus.wb.128
+    1, // llvm.x86.avx512.mask.pmovus.wb.256
+    1, // llvm.x86.avx512.mask.pmovus.wb.512
+    22, // llvm.x86.avx512.mask.pmovus.wb.mem.128
+    22, // llvm.x86.avx512.mask.pmovus.wb.mem.256
+    22, // llvm.x86.avx512.mask.pmovus.wb.mem.512
+    1, // llvm.x86.avx512.mask.pmultishift.qb.128
+    1, // llvm.x86.avx512.mask.pmultishift.qb.256
+    1, // llvm.x86.avx512.mask.pmultishift.qb.512
+    1, // llvm.x86.avx512.mask.psubs.b.128
+    1, // llvm.x86.avx512.mask.psubs.b.256
+    1, // llvm.x86.avx512.mask.psubs.b.512
+    1, // llvm.x86.avx512.mask.psubs.w.128
+    1, // llvm.x86.avx512.mask.psubs.w.256
+    1, // llvm.x86.avx512.mask.psubs.w.512
+    1, // llvm.x86.avx512.mask.psubus.b.128
+    1, // llvm.x86.avx512.mask.psubus.b.256
+    1, // llvm.x86.avx512.mask.psubus.b.512
+    1, // llvm.x86.avx512.mask.psubus.w.128
+    1, // llvm.x86.avx512.mask.psubus.w.256
+    1, // llvm.x86.avx512.mask.psubus.w.512
+    1, // llvm.x86.avx512.mask.range.pd.128
+    1, // llvm.x86.avx512.mask.range.pd.256
+    1, // llvm.x86.avx512.mask.range.pd.512
+    1, // llvm.x86.avx512.mask.range.ps.128
+    1, // llvm.x86.avx512.mask.range.ps.256
+    1, // llvm.x86.avx512.mask.range.ps.512
+    1, // llvm.x86.avx512.mask.range.sd
+    1, // llvm.x86.avx512.mask.range.ss
+    1, // llvm.x86.avx512.mask.reduce.pd.128
+    1, // llvm.x86.avx512.mask.reduce.pd.256
+    1, // llvm.x86.avx512.mask.reduce.pd.512
+    1, // llvm.x86.avx512.mask.reduce.ps.128
+    1, // llvm.x86.avx512.mask.reduce.ps.256
+    1, // llvm.x86.avx512.mask.reduce.ps.512
+    1, // llvm.x86.avx512.mask.reduce.sd
+    1, // llvm.x86.avx512.mask.reduce.ss
+    1, // llvm.x86.avx512.mask.rndscale.pd.128
+    1, // llvm.x86.avx512.mask.rndscale.pd.256
+    1, // llvm.x86.avx512.mask.rndscale.pd.512
+    1, // llvm.x86.avx512.mask.rndscale.ps.128
+    1, // llvm.x86.avx512.mask.rndscale.ps.256
+    1, // llvm.x86.avx512.mask.rndscale.ps.512
+    1, // llvm.x86.avx512.mask.rndscale.sd
+    1, // llvm.x86.avx512.mask.rndscale.ss
+    1, // llvm.x86.avx512.mask.scalef.pd.128
+    1, // llvm.x86.avx512.mask.scalef.pd.256
+    1, // llvm.x86.avx512.mask.scalef.pd.512
+    1, // llvm.x86.avx512.mask.scalef.ps.128
+    1, // llvm.x86.avx512.mask.scalef.ps.256
+    1, // llvm.x86.avx512.mask.scalef.ps.512
+    1, // llvm.x86.avx512.mask.scalef.sd
+    1, // llvm.x86.avx512.mask.scalef.ss
+    1, // llvm.x86.avx512.mask.sqrt.sd
+    1, // llvm.x86.avx512.mask.sqrt.ss
+    1, // llvm.x86.avx512.mask.sub.sd.round
+    1, // llvm.x86.avx512.mask.sub.ss.round
+    1, // llvm.x86.avx512.mask.vcvtph2ps.128
+    1, // llvm.x86.avx512.mask.vcvtph2ps.256
+    1, // llvm.x86.avx512.mask.vcvtph2ps.512
+    1, // llvm.x86.avx512.mask.vcvtps2ph.128
+    1, // llvm.x86.avx512.mask.vcvtps2ph.256
+    1, // llvm.x86.avx512.mask.vcvtps2ph.512
+    1, // llvm.x86.avx512.mask.vpshldv.d.128
+    1, // llvm.x86.avx512.mask.vpshldv.d.256
+    1, // llvm.x86.avx512.mask.vpshldv.d.512
+    1, // llvm.x86.avx512.mask.vpshldv.q.128
+    1, // llvm.x86.avx512.mask.vpshldv.q.256
+    1, // llvm.x86.avx512.mask.vpshldv.q.512
+    1, // llvm.x86.avx512.mask.vpshldv.w.128
+    1, // llvm.x86.avx512.mask.vpshldv.w.256
+    1, // llvm.x86.avx512.mask.vpshldv.w.512
+    1, // llvm.x86.avx512.mask.vpshrdv.d.128
+    1, // llvm.x86.avx512.mask.vpshrdv.d.256
+    1, // llvm.x86.avx512.mask.vpshrdv.d.512
+    1, // llvm.x86.avx512.mask.vpshrdv.q.128
+    1, // llvm.x86.avx512.mask.vpshrdv.q.256
+    1, // llvm.x86.avx512.mask.vpshrdv.q.512
+    1, // llvm.x86.avx512.mask.vpshrdv.w.128
+    1, // llvm.x86.avx512.mask.vpshrdv.w.256
+    1, // llvm.x86.avx512.mask.vpshrdv.w.512
+    1, // llvm.x86.avx512.mask.vpshufbitqmb.128
+    1, // llvm.x86.avx512.mask.vpshufbitqmb.256
+    1, // llvm.x86.avx512.mask.vpshufbitqmb.512
+    1, // llvm.x86.avx512.maskz.fixupimm.pd.128
+    1, // llvm.x86.avx512.maskz.fixupimm.pd.256
+    1, // llvm.x86.avx512.maskz.fixupimm.pd.512
+    1, // llvm.x86.avx512.maskz.fixupimm.ps.128
+    1, // llvm.x86.avx512.maskz.fixupimm.ps.256
+    1, // llvm.x86.avx512.maskz.fixupimm.ps.512
+    1, // llvm.x86.avx512.maskz.fixupimm.sd
+    1, // llvm.x86.avx512.maskz.fixupimm.ss
+    1, // llvm.x86.avx512.maskz.vpshldv.d.128
+    1, // llvm.x86.avx512.maskz.vpshldv.d.256
+    1, // llvm.x86.avx512.maskz.vpshldv.d.512
+    1, // llvm.x86.avx512.maskz.vpshldv.q.128
+    1, // llvm.x86.avx512.maskz.vpshldv.q.256
+    1, // llvm.x86.avx512.maskz.vpshldv.q.512
+    1, // llvm.x86.avx512.maskz.vpshldv.w.128
+    1, // llvm.x86.avx512.maskz.vpshldv.w.256
+    1, // llvm.x86.avx512.maskz.vpshldv.w.512
+    1, // llvm.x86.avx512.maskz.vpshrdv.d.128
+    1, // llvm.x86.avx512.maskz.vpshrdv.d.256
+    1, // llvm.x86.avx512.maskz.vpshrdv.d.512
+    1, // llvm.x86.avx512.maskz.vpshrdv.q.128
+    1, // llvm.x86.avx512.maskz.vpshrdv.q.256
+    1, // llvm.x86.avx512.maskz.vpshrdv.q.512
+    1, // llvm.x86.avx512.maskz.vpshrdv.w.128
+    1, // llvm.x86.avx512.maskz.vpshrdv.w.256
+    1, // llvm.x86.avx512.maskz.vpshrdv.w.512
+    1, // llvm.x86.avx512.max.pd.512
+    1, // llvm.x86.avx512.max.ps.512
+    1, // llvm.x86.avx512.min.pd.512
+    1, // llvm.x86.avx512.min.ps.512
+    1, // llvm.x86.avx512.mul.pd.512
+    1, // llvm.x86.avx512.mul.ps.512
+    1, // llvm.x86.avx512.packssdw.512
+    1, // llvm.x86.avx512.packsswb.512
+    1, // llvm.x86.avx512.packusdw.512
+    1, // llvm.x86.avx512.packuswb.512
+    1, // llvm.x86.avx512.permvar.df.256
+    1, // llvm.x86.avx512.permvar.df.512
+    1, // llvm.x86.avx512.permvar.di.256
+    1, // llvm.x86.avx512.permvar.di.512
+    1, // llvm.x86.avx512.permvar.hi.128
+    1, // llvm.x86.avx512.permvar.hi.256
+    1, // llvm.x86.avx512.permvar.hi.512
+    1, // llvm.x86.avx512.permvar.qi.128
+    1, // llvm.x86.avx512.permvar.qi.256
+    1, // llvm.x86.avx512.permvar.qi.512
+    1, // llvm.x86.avx512.permvar.sf.512
+    1, // llvm.x86.avx512.permvar.si.512
+    1, // llvm.x86.avx512.pmaddubs.w.512
+    1, // llvm.x86.avx512.pmaddw.d.512
+    1, // llvm.x86.avx512.pmul.hr.sw.512
+    1, // llvm.x86.avx512.pmulh.w.512
+    1, // llvm.x86.avx512.pmulhu.w.512
+    1, // llvm.x86.avx512.prol.d.128
+    1, // llvm.x86.avx512.prol.d.256
+    1, // llvm.x86.avx512.prol.d.512
+    1, // llvm.x86.avx512.prol.q.128
+    1, // llvm.x86.avx512.prol.q.256
+    1, // llvm.x86.avx512.prol.q.512
+    1, // llvm.x86.avx512.prolv.d.128
+    1, // llvm.x86.avx512.prolv.d.256
+    1, // llvm.x86.avx512.prolv.d.512
+    1, // llvm.x86.avx512.prolv.q.128
+    1, // llvm.x86.avx512.prolv.q.256
+    1, // llvm.x86.avx512.prolv.q.512
+    1, // llvm.x86.avx512.pror.d.128
+    1, // llvm.x86.avx512.pror.d.256
+    1, // llvm.x86.avx512.pror.d.512
+    1, // llvm.x86.avx512.pror.q.128
+    1, // llvm.x86.avx512.pror.q.256
+    1, // llvm.x86.avx512.pror.q.512
+    1, // llvm.x86.avx512.prorv.d.128
+    1, // llvm.x86.avx512.prorv.d.256
+    1, // llvm.x86.avx512.prorv.d.512
+    1, // llvm.x86.avx512.prorv.q.128
+    1, // llvm.x86.avx512.prorv.q.256
+    1, // llvm.x86.avx512.prorv.q.512
+    1, // llvm.x86.avx512.psad.bw.512
+    1, // llvm.x86.avx512.pshuf.b.512
+    1, // llvm.x86.avx512.psll.d.512
+    1, // llvm.x86.avx512.psll.q.512
+    1, // llvm.x86.avx512.psll.w.512
+    1, // llvm.x86.avx512.pslli.d.512
+    1, // llvm.x86.avx512.pslli.q.512
+    1, // llvm.x86.avx512.pslli.w.512
+    1, // llvm.x86.avx512.psllv.d.512
+    1, // llvm.x86.avx512.psllv.q.512
+    1, // llvm.x86.avx512.psllv.w.128
+    1, // llvm.x86.avx512.psllv.w.256
+    1, // llvm.x86.avx512.psllv.w.512
+    1, // llvm.x86.avx512.psra.d.512
+    1, // llvm.x86.avx512.psra.q.128
+    1, // llvm.x86.avx512.psra.q.256
+    1, // llvm.x86.avx512.psra.q.512
+    1, // llvm.x86.avx512.psra.w.512
+    1, // llvm.x86.avx512.psrai.d.512
+    1, // llvm.x86.avx512.psrai.q.128
+    1, // llvm.x86.avx512.psrai.q.256
+    1, // llvm.x86.avx512.psrai.q.512
+    1, // llvm.x86.avx512.psrai.w.512
+    1, // llvm.x86.avx512.psrav.d.512
+    1, // llvm.x86.avx512.psrav.q.128
+    1, // llvm.x86.avx512.psrav.q.256
+    1, // llvm.x86.avx512.psrav.q.512
+    1, // llvm.x86.avx512.psrav.w.128
+    1, // llvm.x86.avx512.psrav.w.256
+    1, // llvm.x86.avx512.psrav.w.512
+    1, // llvm.x86.avx512.psrl.d.512
+    1, // llvm.x86.avx512.psrl.q.512
+    1, // llvm.x86.avx512.psrl.w.512
+    1, // llvm.x86.avx512.psrli.d.512
+    1, // llvm.x86.avx512.psrli.q.512
+    1, // llvm.x86.avx512.psrli.w.512
+    1, // llvm.x86.avx512.psrlv.d.512
+    1, // llvm.x86.avx512.psrlv.q.512
+    1, // llvm.x86.avx512.psrlv.w.128
+    1, // llvm.x86.avx512.psrlv.w.256
+    1, // llvm.x86.avx512.psrlv.w.512
+    1, // llvm.x86.avx512.pternlog.d.128
+    1, // llvm.x86.avx512.pternlog.d.256
+    1, // llvm.x86.avx512.pternlog.d.512
+    1, // llvm.x86.avx512.pternlog.q.128
+    1, // llvm.x86.avx512.pternlog.q.256
+    1, // llvm.x86.avx512.pternlog.q.512
+    1, // llvm.x86.avx512.rcp14.pd.128
+    1, // llvm.x86.avx512.rcp14.pd.256
+    1, // llvm.x86.avx512.rcp14.pd.512
+    1, // llvm.x86.avx512.rcp14.ps.128
+    1, // llvm.x86.avx512.rcp14.ps.256
+    1, // llvm.x86.avx512.rcp14.ps.512
+    1, // llvm.x86.avx512.rcp14.sd
+    1, // llvm.x86.avx512.rcp14.ss
+    1, // llvm.x86.avx512.rcp28.pd
+    1, // llvm.x86.avx512.rcp28.ps
+    1, // llvm.x86.avx512.rcp28.sd
+    1, // llvm.x86.avx512.rcp28.ss
+    1, // llvm.x86.avx512.rsqrt14.pd.128
+    1, // llvm.x86.avx512.rsqrt14.pd.256
+    1, // llvm.x86.avx512.rsqrt14.pd.512
+    1, // llvm.x86.avx512.rsqrt14.ps.128
+    1, // llvm.x86.avx512.rsqrt14.ps.256
+    1, // llvm.x86.avx512.rsqrt14.ps.512
+    1, // llvm.x86.avx512.rsqrt14.sd
+    1, // llvm.x86.avx512.rsqrt14.ss
+    1, // llvm.x86.avx512.rsqrt28.pd
+    1, // llvm.x86.avx512.rsqrt28.ps
+    1, // llvm.x86.avx512.rsqrt28.sd
+    1, // llvm.x86.avx512.rsqrt28.ss
+    22, // llvm.x86.avx512.scatter.dpd.512
+    22, // llvm.x86.avx512.scatter.dpi.512
+    22, // llvm.x86.avx512.scatter.dpq.512
+    22, // llvm.x86.avx512.scatter.dps.512
+    22, // llvm.x86.avx512.scatter.qpd.512
+    22, // llvm.x86.avx512.scatter.qpi.512
+    22, // llvm.x86.avx512.scatter.qpq.512
+    22, // llvm.x86.avx512.scatter.qps.512
+    22, // llvm.x86.avx512.scatterdiv2.df
+    22, // llvm.x86.avx512.scatterdiv2.di
+    22, // llvm.x86.avx512.scatterdiv4.df
+    22, // llvm.x86.avx512.scatterdiv4.di
+    22, // llvm.x86.avx512.scatterdiv4.sf
+    22, // llvm.x86.avx512.scatterdiv4.si
+    22, // llvm.x86.avx512.scatterdiv8.sf
+    22, // llvm.x86.avx512.scatterdiv8.si
+    22, // llvm.x86.avx512.scatterpf.dpd.512
+    22, // llvm.x86.avx512.scatterpf.dps.512
+    22, // llvm.x86.avx512.scatterpf.qpd.512
+    22, // llvm.x86.avx512.scatterpf.qps.512
+    22, // llvm.x86.avx512.scattersiv2.df
+    22, // llvm.x86.avx512.scattersiv2.di
+    22, // llvm.x86.avx512.scattersiv4.df
+    22, // llvm.x86.avx512.scattersiv4.di
+    22, // llvm.x86.avx512.scattersiv4.sf
+    22, // llvm.x86.avx512.scattersiv4.si
+    22, // llvm.x86.avx512.scattersiv8.sf
+    22, // llvm.x86.avx512.scattersiv8.si
+    1, // llvm.x86.avx512.sqrt.pd.512
+    1, // llvm.x86.avx512.sqrt.ps.512
+    1, // llvm.x86.avx512.sub.pd.512
+    1, // llvm.x86.avx512.sub.ps.512
+    1, // llvm.x86.avx512.vcomi.sd
+    1, // llvm.x86.avx512.vcomi.ss
+    1, // llvm.x86.avx512.vcvtsd2si32
+    1, // llvm.x86.avx512.vcvtsd2si64
+    1, // llvm.x86.avx512.vcvtsd2usi32
+    1, // llvm.x86.avx512.vcvtsd2usi64
+    1, // llvm.x86.avx512.vcvtss2si32
+    1, // llvm.x86.avx512.vcvtss2si64
+    1, // llvm.x86.avx512.vcvtss2usi32
+    1, // llvm.x86.avx512.vcvtss2usi64
+    1, // llvm.x86.avx512.vfmadd.f32
+    1, // llvm.x86.avx512.vfmadd.f64
+    1, // llvm.x86.avx512.vfmadd.pd.512
+    1, // llvm.x86.avx512.vfmadd.ps.512
+    1, // llvm.x86.avx512.vfmaddsub.pd.512
+    1, // llvm.x86.avx512.vfmaddsub.ps.512
+    1, // llvm.x86.avx512.vpdpbusd.128
+    1, // llvm.x86.avx512.vpdpbusd.256
+    1, // llvm.x86.avx512.vpdpbusd.512
+    1, // llvm.x86.avx512.vpdpbusds.128
+    1, // llvm.x86.avx512.vpdpbusds.256
+    1, // llvm.x86.avx512.vpdpbusds.512
+    1, // llvm.x86.avx512.vpdpwssd.128
+    1, // llvm.x86.avx512.vpdpwssd.256
+    1, // llvm.x86.avx512.vpdpwssd.512
+    1, // llvm.x86.avx512.vpdpwssds.128
+    1, // llvm.x86.avx512.vpdpwssds.256
+    1, // llvm.x86.avx512.vpdpwssds.512
+    1, // llvm.x86.avx512.vpermi2var.d.128
+    1, // llvm.x86.avx512.vpermi2var.d.256
+    1, // llvm.x86.avx512.vpermi2var.d.512
+    1, // llvm.x86.avx512.vpermi2var.hi.128
+    1, // llvm.x86.avx512.vpermi2var.hi.256
+    1, // llvm.x86.avx512.vpermi2var.hi.512
+    1, // llvm.x86.avx512.vpermi2var.pd.128
+    1, // llvm.x86.avx512.vpermi2var.pd.256
+    1, // llvm.x86.avx512.vpermi2var.pd.512
+    1, // llvm.x86.avx512.vpermi2var.ps.128
+    1, // llvm.x86.avx512.vpermi2var.ps.256
+    1, // llvm.x86.avx512.vpermi2var.ps.512
+    1, // llvm.x86.avx512.vpermi2var.q.128
+    1, // llvm.x86.avx512.vpermi2var.q.256
+    1, // llvm.x86.avx512.vpermi2var.q.512
+    1, // llvm.x86.avx512.vpermi2var.qi.128
+    1, // llvm.x86.avx512.vpermi2var.qi.256
+    1, // llvm.x86.avx512.vpermi2var.qi.512
+    1, // llvm.x86.avx512.vpermilvar.pd.512
+    1, // llvm.x86.avx512.vpermilvar.ps.512
+    1, // llvm.x86.avx512.vpmadd52h.uq.128
+    1, // llvm.x86.avx512.vpmadd52h.uq.256
+    1, // llvm.x86.avx512.vpmadd52h.uq.512
+    1, // llvm.x86.avx512.vpmadd52l.uq.128
+    1, // llvm.x86.avx512.vpmadd52l.uq.256
+    1, // llvm.x86.avx512.vpmadd52l.uq.512
+    1, // llvm.x86.avx512.vpshld.d.128
+    1, // llvm.x86.avx512.vpshld.d.256
+    1, // llvm.x86.avx512.vpshld.d.512
+    1, // llvm.x86.avx512.vpshld.q.128
+    1, // llvm.x86.avx512.vpshld.q.256
+    1, // llvm.x86.avx512.vpshld.q.512
+    1, // llvm.x86.avx512.vpshld.w.128
+    1, // llvm.x86.avx512.vpshld.w.256
+    1, // llvm.x86.avx512.vpshld.w.512
+    1, // llvm.x86.avx512.vpshrd.d.128
+    1, // llvm.x86.avx512.vpshrd.d.256
+    1, // llvm.x86.avx512.vpshrd.d.512
+    1, // llvm.x86.avx512.vpshrd.q.128
+    1, // llvm.x86.avx512.vpshrd.q.256
+    1, // llvm.x86.avx512.vpshrd.q.512
+    1, // llvm.x86.avx512.vpshrd.w.128
+    1, // llvm.x86.avx512.vpshrd.w.256
+    1, // llvm.x86.avx512.vpshrd.w.512
+    1, // llvm.x86.bmi.bextr.32
+    1, // llvm.x86.bmi.bextr.64
+    1, // llvm.x86.bmi.bzhi.32
+    1, // llvm.x86.bmi.bzhi.64
+    1, // llvm.x86.bmi.pdep.32
+    1, // llvm.x86.bmi.pdep.64
+    1, // llvm.x86.bmi.pext.32
+    1, // llvm.x86.bmi.pext.64
+    3, // llvm.x86.cldemote
+    3, // llvm.x86.clflushopt
+    3, // llvm.x86.clrssbsy
+    3, // llvm.x86.clwb
+    3, // llvm.x86.clzero
+    3, // llvm.x86.directstore32
+    3, // llvm.x86.directstore64
+    3, // llvm.x86.flags.read.u32
+    3, // llvm.x86.flags.read.u64
+    3, // llvm.x86.flags.write.u32
+    3, // llvm.x86.flags.write.u64
+    3, // llvm.x86.fxrstor
+    3, // llvm.x86.fxrstor64
+    3, // llvm.x86.fxsave
+    3, // llvm.x86.fxsave64
+    3, // llvm.x86.incsspd
+    3, // llvm.x86.incsspq
+    3, // llvm.x86.int
+    3, // llvm.x86.invpcid
+    3, // llvm.x86.llwpcb
+    3, // llvm.x86.lwpins32
+    3, // llvm.x86.lwpins64
+    3, // llvm.x86.lwpval32
+    3, // llvm.x86.lwpval64
+    3, // llvm.x86.mmx.emms
+    3, // llvm.x86.mmx.femms
+    3, // llvm.x86.mmx.maskmovq
+    3, // llvm.x86.mmx.movnt.dq
+    1, // llvm.x86.mmx.packssdw
+    1, // llvm.x86.mmx.packsswb
+    1, // llvm.x86.mmx.packuswb
+    1, // llvm.x86.mmx.padd.b
+    1, // llvm.x86.mmx.padd.d
+    1, // llvm.x86.mmx.padd.q
+    1, // llvm.x86.mmx.padd.w
+    1, // llvm.x86.mmx.padds.b
+    1, // llvm.x86.mmx.padds.w
+    1, // llvm.x86.mmx.paddus.b
+    1, // llvm.x86.mmx.paddus.w
+    1, // llvm.x86.mmx.palignr.b
+    1, // llvm.x86.mmx.pand
+    1, // llvm.x86.mmx.pandn
+    1, // llvm.x86.mmx.pavg.b
+    1, // llvm.x86.mmx.pavg.w
+    1, // llvm.x86.mmx.pcmpeq.b
+    1, // llvm.x86.mmx.pcmpeq.d
+    1, // llvm.x86.mmx.pcmpeq.w
+    1, // llvm.x86.mmx.pcmpgt.b
+    1, // llvm.x86.mmx.pcmpgt.d
+    1, // llvm.x86.mmx.pcmpgt.w
+    1, // llvm.x86.mmx.pextr.w
+    1, // llvm.x86.mmx.pinsr.w
+    1, // llvm.x86.mmx.pmadd.wd
+    1, // llvm.x86.mmx.pmaxs.w
+    1, // llvm.x86.mmx.pmaxu.b
+    1, // llvm.x86.mmx.pmins.w
+    1, // llvm.x86.mmx.pminu.b
+    1, // llvm.x86.mmx.pmovmskb
+    1, // llvm.x86.mmx.pmulh.w
+    1, // llvm.x86.mmx.pmulhu.w
+    1, // llvm.x86.mmx.pmull.w
+    1, // llvm.x86.mmx.pmulu.dq
+    1, // llvm.x86.mmx.por
+    1, // llvm.x86.mmx.psad.bw
+    1, // llvm.x86.mmx.psll.d
+    1, // llvm.x86.mmx.psll.q
+    1, // llvm.x86.mmx.psll.w
+    1, // llvm.x86.mmx.pslli.d
+    1, // llvm.x86.mmx.pslli.q
+    1, // llvm.x86.mmx.pslli.w
+    1, // llvm.x86.mmx.psra.d
+    1, // llvm.x86.mmx.psra.w
+    1, // llvm.x86.mmx.psrai.d
+    1, // llvm.x86.mmx.psrai.w
+    1, // llvm.x86.mmx.psrl.d
+    1, // llvm.x86.mmx.psrl.q
+    1, // llvm.x86.mmx.psrl.w
+    1, // llvm.x86.mmx.psrli.d
+    1, // llvm.x86.mmx.psrli.q
+    1, // llvm.x86.mmx.psrli.w
+    1, // llvm.x86.mmx.psub.b
+    1, // llvm.x86.mmx.psub.d
+    1, // llvm.x86.mmx.psub.q
+    1, // llvm.x86.mmx.psub.w
+    1, // llvm.x86.mmx.psubs.b
+    1, // llvm.x86.mmx.psubs.w
+    1, // llvm.x86.mmx.psubus.b
+    1, // llvm.x86.mmx.psubus.w
+    1, // llvm.x86.mmx.punpckhbw
+    1, // llvm.x86.mmx.punpckhdq
+    1, // llvm.x86.mmx.punpckhwd
+    1, // llvm.x86.mmx.punpcklbw
+    1, // llvm.x86.mmx.punpckldq
+    1, // llvm.x86.mmx.punpcklwd
+    1, // llvm.x86.mmx.pxor
+    3, // llvm.x86.monitorx
+    3, // llvm.x86.movdir64b
+    3, // llvm.x86.mwaitx
+    1, // llvm.x86.pclmulqdq
+    1, // llvm.x86.pclmulqdq.256
+    1, // llvm.x86.pclmulqdq.512
+    3, // llvm.x86.ptwrite32
+    3, // llvm.x86.ptwrite64
+    3, // llvm.x86.rdfsbase.32
+    3, // llvm.x86.rdfsbase.64
+    3, // llvm.x86.rdgsbase.32
+    3, // llvm.x86.rdgsbase.64
+    3, // llvm.x86.rdpid
+    3, // llvm.x86.rdpkru
+    3, // llvm.x86.rdpmc
+    3, // llvm.x86.rdrand.16
+    3, // llvm.x86.rdrand.32
+    3, // llvm.x86.rdrand.64
+    3, // llvm.x86.rdseed.16
+    3, // llvm.x86.rdseed.32
+    3, // llvm.x86.rdseed.64
+    3, // llvm.x86.rdsspd
+    3, // llvm.x86.rdsspq
+    3, // llvm.x86.rdtsc
+    22, // llvm.x86.rdtscp
+    3, // llvm.x86.rstorssp
+    3, // llvm.x86.saveprevssp
+    3, // llvm.x86.seh.ehguard
+    3, // llvm.x86.seh.ehregnode
+    1, // llvm.x86.seh.lsda
+    1, // llvm.x86.seh.recoverfp
+    3, // llvm.x86.setssbsy
+    1, // llvm.x86.sha1msg1
+    1, // llvm.x86.sha1msg2
+    1, // llvm.x86.sha1nexte
+    1, // llvm.x86.sha1rnds4
+    1, // llvm.x86.sha256msg1
+    1, // llvm.x86.sha256msg2
+    1, // llvm.x86.sha256rnds2
+    3, // llvm.x86.slwpcb
+    1, // llvm.x86.sse.cmp.ps
+    1, // llvm.x86.sse.cmp.ss
+    1, // llvm.x86.sse.comieq.ss
+    1, // llvm.x86.sse.comige.ss
+    1, // llvm.x86.sse.comigt.ss
+    1, // llvm.x86.sse.comile.ss
+    1, // llvm.x86.sse.comilt.ss
+    1, // llvm.x86.sse.comineq.ss
+    1, // llvm.x86.sse.cvtpd2pi
+    1, // llvm.x86.sse.cvtpi2pd
+    1, // llvm.x86.sse.cvtpi2ps
+    1, // llvm.x86.sse.cvtps2pi
+    1, // llvm.x86.sse.cvtss2si
+    1, // llvm.x86.sse.cvtss2si64
+    1, // llvm.x86.sse.cvttpd2pi
+    1, // llvm.x86.sse.cvttps2pi
+    1, // llvm.x86.sse.cvttss2si
+    1, // llvm.x86.sse.cvttss2si64
+    3, // llvm.x86.sse.ldmxcsr
+    1, // llvm.x86.sse.max.ps
+    1, // llvm.x86.sse.max.ss
+    1, // llvm.x86.sse.min.ps
+    1, // llvm.x86.sse.min.ss
+    1, // llvm.x86.sse.movmsk.ps
+    1, // llvm.x86.sse.pshuf.w
+    1, // llvm.x86.sse.rcp.ps
+    1, // llvm.x86.sse.rcp.ss
+    1, // llvm.x86.sse.rsqrt.ps
+    1, // llvm.x86.sse.rsqrt.ss
+    3, // llvm.x86.sse.sfence
+    3, // llvm.x86.sse.stmxcsr
+    1, // llvm.x86.sse.ucomieq.ss
+    1, // llvm.x86.sse.ucomige.ss
+    1, // llvm.x86.sse.ucomigt.ss
+    1, // llvm.x86.sse.ucomile.ss
+    1, // llvm.x86.sse.ucomilt.ss
+    1, // llvm.x86.sse.ucomineq.ss
+    3, // llvm.x86.sse2.clflush
+    1, // llvm.x86.sse2.cmp.pd
+    1, // llvm.x86.sse2.cmp.sd
+    1, // llvm.x86.sse2.comieq.sd
+    1, // llvm.x86.sse2.comige.sd
+    1, // llvm.x86.sse2.comigt.sd
+    1, // llvm.x86.sse2.comile.sd
+    1, // llvm.x86.sse2.comilt.sd
+    1, // llvm.x86.sse2.comineq.sd
+    1, // llvm.x86.sse2.cvtpd2dq
+    1, // llvm.x86.sse2.cvtpd2ps
+    1, // llvm.x86.sse2.cvtps2dq
+    1, // llvm.x86.sse2.cvtsd2si
+    1, // llvm.x86.sse2.cvtsd2si64
+    1, // llvm.x86.sse2.cvtsd2ss
+    1, // llvm.x86.sse2.cvttpd2dq
+    1, // llvm.x86.sse2.cvttps2dq
+    1, // llvm.x86.sse2.cvttsd2si
+    1, // llvm.x86.sse2.cvttsd2si64
+    3, // llvm.x86.sse2.lfence
+    3, // llvm.x86.sse2.maskmov.dqu
+    1, // llvm.x86.sse2.max.pd
+    1, // llvm.x86.sse2.max.sd
+    3, // llvm.x86.sse2.mfence
+    1, // llvm.x86.sse2.min.pd
+    1, // llvm.x86.sse2.min.sd
+    1, // llvm.x86.sse2.movmsk.pd
+    1, // llvm.x86.sse2.packssdw.128
+    1, // llvm.x86.sse2.packsswb.128
+    1, // llvm.x86.sse2.packuswb.128
+    1, // llvm.x86.sse2.padds.b
+    1, // llvm.x86.sse2.padds.w
+    1, // llvm.x86.sse2.paddus.b
+    1, // llvm.x86.sse2.paddus.w
+    3, // llvm.x86.sse2.pause
+    1, // llvm.x86.sse2.pmadd.wd
+    1, // llvm.x86.sse2.pmovmskb.128
+    1, // llvm.x86.sse2.pmulh.w
+    1, // llvm.x86.sse2.pmulhu.w
+    1, // llvm.x86.sse2.psad.bw
+    1, // llvm.x86.sse2.psll.d
+    1, // llvm.x86.sse2.psll.q
+    1, // llvm.x86.sse2.psll.w
+    1, // llvm.x86.sse2.pslli.d
+    1, // llvm.x86.sse2.pslli.q
+    1, // llvm.x86.sse2.pslli.w
+    1, // llvm.x86.sse2.psra.d
+    1, // llvm.x86.sse2.psra.w
+    1, // llvm.x86.sse2.psrai.d
+    1, // llvm.x86.sse2.psrai.w
+    1, // llvm.x86.sse2.psrl.d
+    1, // llvm.x86.sse2.psrl.q
+    1, // llvm.x86.sse2.psrl.w
+    1, // llvm.x86.sse2.psrli.d
+    1, // llvm.x86.sse2.psrli.q
+    1, // llvm.x86.sse2.psrli.w
+    1, // llvm.x86.sse2.psubs.b
+    1, // llvm.x86.sse2.psubs.w
+    1, // llvm.x86.sse2.psubus.b
+    1, // llvm.x86.sse2.psubus.w
+    1, // llvm.x86.sse2.ucomieq.sd
+    1, // llvm.x86.sse2.ucomige.sd
+    1, // llvm.x86.sse2.ucomigt.sd
+    1, // llvm.x86.sse2.ucomile.sd
+    1, // llvm.x86.sse2.ucomilt.sd
+    1, // llvm.x86.sse2.ucomineq.sd
+    1, // llvm.x86.sse3.addsub.pd
+    1, // llvm.x86.sse3.addsub.ps
+    1, // llvm.x86.sse3.hadd.pd
+    1, // llvm.x86.sse3.hadd.ps
+    1, // llvm.x86.sse3.hsub.pd
+    1, // llvm.x86.sse3.hsub.ps
+    16, // llvm.x86.sse3.ldu.dq
+    3, // llvm.x86.sse3.monitor
+    3, // llvm.x86.sse3.mwait
+    1, // llvm.x86.sse41.blendvpd
+    1, // llvm.x86.sse41.blendvps
+    1, // llvm.x86.sse41.dppd
+    1, // llvm.x86.sse41.dpps
+    1, // llvm.x86.sse41.insertps
+    1, // llvm.x86.sse41.mpsadbw
+    1, // llvm.x86.sse41.packusdw
+    1, // llvm.x86.sse41.pblendvb
+    1, // llvm.x86.sse41.phminposuw
+    1, // llvm.x86.sse41.ptestc
+    1, // llvm.x86.sse41.ptestnzc
+    1, // llvm.x86.sse41.ptestz
+    1, // llvm.x86.sse41.round.pd
+    1, // llvm.x86.sse41.round.ps
+    1, // llvm.x86.sse41.round.sd
+    1, // llvm.x86.sse41.round.ss
+    1, // llvm.x86.sse42.crc32.32.16
+    1, // llvm.x86.sse42.crc32.32.32
+    1, // llvm.x86.sse42.crc32.32.8
+    1, // llvm.x86.sse42.crc32.64.64
+    1, // llvm.x86.sse42.pcmpestri128
+    1, // llvm.x86.sse42.pcmpestria128
+    1, // llvm.x86.sse42.pcmpestric128
+    1, // llvm.x86.sse42.pcmpestrio128
+    1, // llvm.x86.sse42.pcmpestris128
+    1, // llvm.x86.sse42.pcmpestriz128
+    1, // llvm.x86.sse42.pcmpestrm128
+    1, // llvm.x86.sse42.pcmpistri128
+    1, // llvm.x86.sse42.pcmpistria128
+    1, // llvm.x86.sse42.pcmpistric128
+    1, // llvm.x86.sse42.pcmpistrio128
+    1, // llvm.x86.sse42.pcmpistris128
+    1, // llvm.x86.sse42.pcmpistriz128
+    1, // llvm.x86.sse42.pcmpistrm128
+    1, // llvm.x86.sse4a.extrq
+    1, // llvm.x86.sse4a.extrqi
+    1, // llvm.x86.sse4a.insertq
+    1, // llvm.x86.sse4a.insertqi
+    1, // llvm.x86.ssse3.pabs.b
+    1, // llvm.x86.ssse3.pabs.d
+    1, // llvm.x86.ssse3.pabs.w
+    1, // llvm.x86.ssse3.phadd.d
+    1, // llvm.x86.ssse3.phadd.d.128
+    1, // llvm.x86.ssse3.phadd.sw
+    1, // llvm.x86.ssse3.phadd.sw.128
+    1, // llvm.x86.ssse3.phadd.w
+    1, // llvm.x86.ssse3.phadd.w.128
+    1, // llvm.x86.ssse3.phsub.d
+    1, // llvm.x86.ssse3.phsub.d.128
+    1, // llvm.x86.ssse3.phsub.sw
+    1, // llvm.x86.ssse3.phsub.sw.128
+    1, // llvm.x86.ssse3.phsub.w
+    1, // llvm.x86.ssse3.phsub.w.128
+    1, // llvm.x86.ssse3.pmadd.ub.sw
+    1, // llvm.x86.ssse3.pmadd.ub.sw.128
+    1, // llvm.x86.ssse3.pmul.hr.sw
+    1, // llvm.x86.ssse3.pmul.hr.sw.128
+    1, // llvm.x86.ssse3.pshuf.b
+    1, // llvm.x86.ssse3.pshuf.b.128
+    1, // llvm.x86.ssse3.psign.b
+    1, // llvm.x86.ssse3.psign.b.128
+    1, // llvm.x86.ssse3.psign.d
+    1, // llvm.x86.ssse3.psign.d.128
+    1, // llvm.x86.ssse3.psign.w
+    1, // llvm.x86.ssse3.psign.w.128
+    22, // llvm.x86.subborrow.u32
+    22, // llvm.x86.subborrow.u64
+    1, // llvm.x86.tbm.bextri.u32
+    1, // llvm.x86.tbm.bextri.u64
+    3, // llvm.x86.tpause
+    3, // llvm.x86.umonitor
+    3, // llvm.x86.umwait
+    1, // llvm.x86.vcvtph2ps.128
+    1, // llvm.x86.vcvtph2ps.256
+    1, // llvm.x86.vcvtps2ph.128
+    1, // llvm.x86.vcvtps2ph.256
+    1, // llvm.x86.vgf2p8affineinvqb.128
+    1, // llvm.x86.vgf2p8affineinvqb.256
+    1, // llvm.x86.vgf2p8affineinvqb.512
+    1, // llvm.x86.vgf2p8affineqb.128
+    1, // llvm.x86.vgf2p8affineqb.256
+    1, // llvm.x86.vgf2p8affineqb.512
+    1, // llvm.x86.vgf2p8mulb.128
+    1, // llvm.x86.vgf2p8mulb.256
+    1, // llvm.x86.vgf2p8mulb.512
+    3, // llvm.x86.wbinvd
+    3, // llvm.x86.wbnoinvd
+    3, // llvm.x86.wrfsbase.32
+    3, // llvm.x86.wrfsbase.64
+    3, // llvm.x86.wrgsbase.32
+    3, // llvm.x86.wrgsbase.64
+    3, // llvm.x86.wrpkru
+    3, // llvm.x86.wrssd
+    3, // llvm.x86.wrssq
+    3, // llvm.x86.wrussd
+    3, // llvm.x86.wrussq
+    3, // llvm.x86.xabort
+    3, // llvm.x86.xbegin
+    3, // llvm.x86.xend
+    3, // llvm.x86.xgetbv
+    1, // llvm.x86.xop.vfrcz.pd
+    1, // llvm.x86.xop.vfrcz.pd.256
+    1, // llvm.x86.xop.vfrcz.ps
+    1, // llvm.x86.xop.vfrcz.ps.256
+    1, // llvm.x86.xop.vfrcz.sd
+    1, // llvm.x86.xop.vfrcz.ss
+    1, // llvm.x86.xop.vpcomb
+    1, // llvm.x86.xop.vpcomd
+    1, // llvm.x86.xop.vpcomq
+    1, // llvm.x86.xop.vpcomub
+    1, // llvm.x86.xop.vpcomud
+    1, // llvm.x86.xop.vpcomuq
+    1, // llvm.x86.xop.vpcomuw
+    1, // llvm.x86.xop.vpcomw
+    1, // llvm.x86.xop.vpermil2pd
+    1, // llvm.x86.xop.vpermil2pd.256
+    1, // llvm.x86.xop.vpermil2ps
+    1, // llvm.x86.xop.vpermil2ps.256
+    1, // llvm.x86.xop.vphaddbd
+    1, // llvm.x86.xop.vphaddbq
+    1, // llvm.x86.xop.vphaddbw
+    1, // llvm.x86.xop.vphadddq
+    1, // llvm.x86.xop.vphaddubd
+    1, // llvm.x86.xop.vphaddubq
+    1, // llvm.x86.xop.vphaddubw
+    1, // llvm.x86.xop.vphaddudq
+    1, // llvm.x86.xop.vphadduwd
+    1, // llvm.x86.xop.vphadduwq
+    1, // llvm.x86.xop.vphaddwd
+    1, // llvm.x86.xop.vphaddwq
+    1, // llvm.x86.xop.vphsubbw
+    1, // llvm.x86.xop.vphsubdq
+    1, // llvm.x86.xop.vphsubwd
+    1, // llvm.x86.xop.vpmacsdd
+    1, // llvm.x86.xop.vpmacsdqh
+    1, // llvm.x86.xop.vpmacsdql
+    1, // llvm.x86.xop.vpmacssdd
+    1, // llvm.x86.xop.vpmacssdqh
+    1, // llvm.x86.xop.vpmacssdql
+    1, // llvm.x86.xop.vpmacsswd
+    1, // llvm.x86.xop.vpmacssww
+    1, // llvm.x86.xop.vpmacswd
+    1, // llvm.x86.xop.vpmacsww
+    1, // llvm.x86.xop.vpmadcsswd
+    1, // llvm.x86.xop.vpmadcswd
+    1, // llvm.x86.xop.vpperm
+    1, // llvm.x86.xop.vprotb
+    1, // llvm.x86.xop.vprotbi
+    1, // llvm.x86.xop.vprotd
+    1, // llvm.x86.xop.vprotdi
+    1, // llvm.x86.xop.vprotq
+    1, // llvm.x86.xop.vprotqi
+    1, // llvm.x86.xop.vprotw
+    1, // llvm.x86.xop.vprotwi
+    1, // llvm.x86.xop.vpshab
+    1, // llvm.x86.xop.vpshad
+    1, // llvm.x86.xop.vpshaq
+    1, // llvm.x86.xop.vpshaw
+    1, // llvm.x86.xop.vpshlb
+    1, // llvm.x86.xop.vpshld
+    1, // llvm.x86.xop.vpshlq
+    1, // llvm.x86.xop.vpshlw
+    3, // llvm.x86.xrstor
+    3, // llvm.x86.xrstor64
+    3, // llvm.x86.xrstors
+    3, // llvm.x86.xrstors64
+    3, // llvm.x86.xsave
+    3, // llvm.x86.xsave64
+    3, // llvm.x86.xsavec
+    3, // llvm.x86.xsavec64
+    3, // llvm.x86.xsaveopt
+    3, // llvm.x86.xsaveopt64
+    3, // llvm.x86.xsaves
+    3, // llvm.x86.xsaves64
+    3, // llvm.x86.xsetbv
+    3, // llvm.x86.xtest
+    1, // llvm.xcore.bitrev
+    3, // llvm.xcore.checkevent
+    50, // llvm.xcore.chkct
+    3, // llvm.xcore.clre
+    50, // llvm.xcore.clrpt
+    3, // llvm.xcore.clrsr
+    1, // llvm.xcore.crc32
+    1, // llvm.xcore.crc8
+    50, // llvm.xcore.edu
+    50, // llvm.xcore.eeu
+    50, // llvm.xcore.endin
+    50, // llvm.xcore.freer
+    3, // llvm.xcore.geted
+    3, // llvm.xcore.getet
+    1, // llvm.xcore.getid
+    3, // llvm.xcore.getps
+    3, // llvm.xcore.getr
+    50, // llvm.xcore.getst
+    50, // llvm.xcore.getts
+    50, // llvm.xcore.in
+    50, // llvm.xcore.inct
+    50, // llvm.xcore.initcp
+    50, // llvm.xcore.initdp
+    50, // llvm.xcore.initlr
+    50, // llvm.xcore.initpc
+    50, // llvm.xcore.initsp
+    50, // llvm.xcore.inshr
+    50, // llvm.xcore.int
+    50, // llvm.xcore.mjoin
+    50, // llvm.xcore.msync
+    50, // llvm.xcore.out
+    50, // llvm.xcore.outct
+    50, // llvm.xcore.outshr
+    50, // llvm.xcore.outt
+    50, // llvm.xcore.peek
+    50, // llvm.xcore.setc
+    51, // llvm.xcore.setclk
+    50, // llvm.xcore.setd
+    50, // llvm.xcore.setev
+    3, // llvm.xcore.setps
+    50, // llvm.xcore.setpsc
+    50, // llvm.xcore.setpt
+    51, // llvm.xcore.setrdy
+    3, // llvm.xcore.setsr
+    50, // llvm.xcore.settw
+    50, // llvm.xcore.setv
+    1, // llvm.xcore.sext
+    3, // llvm.xcore.ssync
+    50, // llvm.xcore.syncr
+    50, // llvm.xcore.testct
+    50, // llvm.xcore.testwct
+    16, // llvm.xcore.waitevent
+    1, // llvm.xcore.zext
+  };
+
+  AttributeList AS[5];
+  unsigned NumAttrs = 0;
+  if (id != 0) {
+    switch(IntrinsicsToAttributesMap[id - 1]) {
+    default: llvm_unreachable("Invalid attribute number");
+    case 3: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 50: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 51: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 6: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 26: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 22: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 18: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 8: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 25: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 23: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 24: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 20: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 17: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 19: {
+      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 30: {
+      const Attribute::AttrKind AttrParam4[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 4, AttrParam4);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 31: {
+      const Attribute::AttrKind AttrParam5[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 5, AttrParam5);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 32: {
+      const Attribute::AttrKind AttrParam6[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 6, AttrParam6);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 15: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 34: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 28: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 29: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 42: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 41: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 16: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 2: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 39: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 13: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 9: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 10: {
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[1] = AttributeList::get(C, 3, AttrParam3);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 1: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 12: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 27: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::Returned};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 11: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind AttrParam2[]= {Attribute::ReadNone};
+      AS[1] = AttributeList::get(C, 2, AttrParam2);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
+      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 3;
+      break;
+      }
+    case 48: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 47: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 46: {
+      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
+      AS[0] = AttributeList::get(C, 1, AttrParam1);
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
+      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 2;
+      break;
+      }
+    case 38: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 21: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 36: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 4: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 35: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 40: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 33: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 14: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoReturn};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 43: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 5: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate,Attribute::InaccessibleMemOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 45: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 7: {
+      return AttributeList();
+      }
+    case 37: {
+      const Attribute::AttrKind Atts[] = {Attribute::ReadNone};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 49: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoReturn};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    case 44: {
+      const Attribute::AttrKind Atts[] = {Attribute::NoReturn,Attribute::WriteOnly};
+      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
+      NumAttrs = 1;
+      break;
+      }
+    }
+  }
+  return AttributeList::get(C, makeArrayRef(AS, NumAttrs));
+}
+#endif // GET_INTRINSIC_ATTRIBUTES
+
+// Get the LLVM intrinsic that corresponds to a builtin.
+// This is used by the C front-end.  The builtin name is passed
+// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed
+// in as TargetPrefix.  The result is assigned to 'IntrinsicID'.
+#ifdef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
+Intrinsic::ID Intrinsic::getIntrinsicForGCCBuiltin(const char *TargetPrefixStr, StringRef BuiltinNameStr) {
+  static const char BuiltinNames[] = {
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'd', 'j', 'u', 's',
+  't', '_', 't', 'r', 'a', 'm', 'p', 'o', 'l', 'i', 'n', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'e', 'b', 'u', 'g', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'u', 'n',
+  'w', 'i', 'n', 'd', '_', 'i', 'n', 'i', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'f', 'l', 't', '_', 'r', 'o', 'u', 'n', 'd', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'n', 'i', 't',
+  '_', 't', 'r', 'a', 'm', 'p', 'o', 'l', 'i', 'n', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'o', 'b', 'j', 'e', 'c', 't', '_', 's',
+  'i', 'z', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  't', 'a', 'c', 'k', '_', 'r', 'e', 's', 't', 'o', 'r', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 't', 'a', 'c', 'k', '_', 's',
+  'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't',
+  'h', 'r', 'e', 'a', 'd', '_', 'p', 'o', 'i', 'n', 't', 'e', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'd', 'm',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'd', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'i', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'b', 'u', 'f', 'f', 'e',
+  'r', '_', 'w', 'b', 'i', 'n', 'v', 'l', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'b', 'u', 'f',
+  'f', 'e', 'r', '_', 'w', 'b', 'i', 'n', 'v', 'l', '1', '_', 's', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 'b', 'u', 'f', 'f', 'e', 'r', '_', 'w', 'b', 'i', 'n', 'v', 'l',
+  '1', '_', 'v', 'o', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e', 'i', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 'c', 'u', 'b', 'e', 'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e',
+  's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e', 't', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c',
+  'v', 't', '_', 'p', 'k', '_', 'u', '8', '_', 'f', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  'd', 'i', 's', 'p', 'a', 't', 'c', 'h', '_', 'i', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
+  'i', 's', 'p', 'a', 't', 'c', 'h', '_', 'p', 't', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
+  's', '_', 'b', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's',
+  '_', 'f', 'a', 'd', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's', '_', 'f', 'm', 'a',
+  'x', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'd', 's', '_', 'f', 'm', 'i', 'n', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 'd', 's', '_', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
+  's', '_', 's', 'w', 'i', 'z', 'z', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'd', 'o',
+  't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'f', 'm', 'e', 'd', '3', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'm',
+  'u', 'l', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'g', 'r', 'o',
+  'u', 'p', 's', 't', 'a', 't', 'i', 'c', 's', 'i', 'z', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', '_', 'b', 'u', 'f', 'f', 'e', 'r',
+  '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't',
+  'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r',
+  'p', '_', 'm', 'o', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_',
+  'p', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p', '_', 'p', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's', 'e', 'g', 'm', 'e',
+  'n', 't', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'l', 'e', 'r', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 'm', 'b', 'c', 'n', 't', '_', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'b', 'c',
+  'n', 't', '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q', 's', 'a', 'd', '_', 'p',
+  'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q', 's', 'a',
+  'd', '_', 'u', '3', '2', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 's', 'a', 'd',
+  '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 'q', 's', 'a', 'd', '_', 'p', 'k', '_', 'u',
+  '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 'u', 'e', 'u', 'e', '_', 'p',
+  't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'r', 'c', 'p', '_', 'l', 'e', 'g', 'a', 'c', 'y',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 'r', 'e', 'a', 'd', 'f', 'i', 'r', 's', 't', 'l', 'a', 'n',
+  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
+  'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'l', 'a', 'n', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  'r', 's', 'q', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'd', 'c', 'a',
+  'c', 'h', 'e', '_', 'i', 'n', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'd', 'c', 'a',
+  'c', 'h', 'e', '_', 'i', 'n', 'v', '_', 'v', 'o', 'l', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
+  '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '_', 'v', 'o', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 's', '_', 'd', 'e', 'c', 'p', 'e', 'r', 'f', 'l', 'e', 'v', 'e', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 's', '_', 'g', 'e', 't', 'p', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
+  'g', 'e', 't', 'r', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'i', 'n', 'c', 'p',
+  'e', 'r', 'f', 'l', 'e', 'v', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'm', 'e',
+  'm', 'r', 'e', 'a', 'l', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'm',
+  'e', 'm', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n', 'd',
+  'm', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n', 'd', 'm', 's', 'g',
+  'h', 'a', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'l', 'e', 'e', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 's', '_', 'w', 'a', 'i', 't', 'c', 'n', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
+  'a', 'd', '_', 'h', 'i', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd', '_',
+  'u', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd', '_', 'u', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
+  's', 'd', 'o', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'd', 'o', 't', '4', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
+  '_', 's', 'd', 'o', 't', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o', 't', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
+  'n', '_', 'u', 'd', 'o', 't', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'u', 'd', 'o', 't', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 'w', 'a', 'v', 'e', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
+  'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_', 'i', 'd',
+  '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
+  'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_',
+  'i', 'd', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'm', 'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u',
+  'p', '_', 'i', 'd', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'w', 'r', 'i', 't', 'e', 'l',
+  'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 'c', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 'c', 'd', 'p', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'g', 'e', 't', '_', 'f',
+  'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'l', 'd', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '2',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'l', 'd', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'r', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  'm', 'r', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '1', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q',
+  'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'q', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'a', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'u', 'b', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 'd',
+  'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 's', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'e', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'e', 't', '_', 'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 'd', 'd', '1',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'h', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 's', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 's',
+  'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 'h', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 's', 'u', 'b', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'm', 'l', 'a', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'b', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l',
+  'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 'm', 'l', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'l', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
+  'm', 'l', 'a', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 't', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l',
+  'a', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'm', 'l', 'a', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'w', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  's', 'm', 'l', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'd', 'x', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's',
+  'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 'm', 'l', 's', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'a', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
+  'm', 'u', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'b', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l',
+  'b', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 'm', 'u', 'l', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 't', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
+  'm', 'u', 'l', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'w', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 's',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 's', 'm', 'u', 's', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 't',
+  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'r', 'm', '_', 's', 's', 'u', 'b', '1', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'u',
+  'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
+  'm', '_', 's', 't', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's',
+  't', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 's', 'x', 't', 'a', 'b', '1', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'x', 't', 'b', '1',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'u', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a', 'd', 'd', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a', 's',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'u', 'h', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 'a', 'd', 'd', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
+  'h', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'u', 'h', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'u', 'b', '1',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
+  '_', 'u', 'h', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 'd', 'd', '1', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
+  'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 's', 'x', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'a', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
+  'u', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'u', 'b', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's',
+  'a', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'r', 'm', '_', 'u', 's', 'a', 'd', 'a', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's',
+  'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'u', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'u', 'b', '1', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
+  's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'r', 'm', '_', 'u', 'x', 't', 'a', 'b', '1', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'x', 't', 'b',
+  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p',
+  'f', '_', 'l', 'o', 'a', 'd', '_', 'b', 'y', 't', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd',
+  '_', 'h', 'a', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'w', 'o', 'r', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_', 'p',
+  's', 'e', 'u', 'd', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'a', 'b', 's', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h',
+  '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a',
+  'd', 'd', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'l', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'l',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1',
+  '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6',
+  '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a',
+  'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6', '_',
+  'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l',
+  '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd',
+  'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h', 'l', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6', '_', 's', 'a',
+  't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'a', 'd', 'd', 'p', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'a', 'd', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'a', 'd', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'i', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'a', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'a', 's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 's', 'r', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '_',
+  'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n',
+  'e', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b',
+  'i', 'n', 'e', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o',
+  'm', 'b', 'i', 'n', 'e', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'm', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'm', 'a', 'x', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'u', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'm', 'i', 'n', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n',
+  'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'n', 'e', 'g', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'o',
+  't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'o', 'r', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'o',
+  'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'r', 'o', 'u', 'n', 'd', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'a', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_',
+  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h',
+  '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
+  'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a',
+  't', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h',
+  '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't',
+  '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_',
+  'l', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u',
+  'b', 'h', '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 's', 'u', 'b', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'l', '1',
+  '6', '_', 's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'u', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'r',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 's', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 's', 'v', 'a', 'v', 'g', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  's', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
+  'v', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's',
+  'u', 'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's', 'u',
+  'b', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'w', 'i', 'z',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'x', 't', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 's', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
+  'x', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 't', 'f', 'r', 'i', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 't', 'f', 'r', 'i', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't',
+  'f', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'p', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 's', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'a', 'b', 's', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
+  'b', 's', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
+  'd', 'd', 'b', '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
+  'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd',
+  'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '2', '_', 'v', 'a', 'd', 'd', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
+  'g', 'h', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g',
+  'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'a', 'v', 'g', 'u', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'v', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
+  'g', 'w', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g',
+  'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'e',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'g', 't',
+  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'e', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'c', 'o', 'n', 'j', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'm', 'a', 'x', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm',
+  'a', 'x', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'm', 'i', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm',
+  'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
+  'n', 'a', 'v', 'g', 'h', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
+  'n', 'a', 'v', 'g', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n',
+  'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v',
+  'g', 'w', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a', 'v',
+  'g', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u',
+  'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's',
+  'a', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's', 'a',
+  'd', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
+  's', 'u', 'b', 'b', '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
+  'v', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u',
+  'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'v', 's', 'u', 'b', 'w', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
+  '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'x', 'o', 'r', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '2', '_', 'z', 'x', 't', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '2', '_', 'z', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a',
+  'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'n', 'd', 'n', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i', 't',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'o', 'u', 'n', 'd', 's', 'c',
+  'h', 'e', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b',
+  'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'e', 'q',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
+  '4', '_', 'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'c', 'm', 'p', 'h', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
+  'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm',
+  'p', 'h', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p',
+  'h', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o', 'm',
+  'b', 'i', 'n', 'e', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o',
+  'm', 'b', 'i', 'n', 'e', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
+  'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'c', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'm', 'o', 'd', 'w', 'r', 'a', 'p', 'u', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'o', 'r', 'n', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'e', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'n', 'e', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'c', 'm', 'p', 'n', 'e', 'q', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '_', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r',
+  '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 't', 'l', 'b', 'm',
+  'a', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'c', 'm', 'p',
+  'b', 'e', 'q', '_', 'a', 'n', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'c',
+  'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'c',
+  'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'c', 'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'c', 'm', 'p', 'h', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'v', 'c', 'm', 'p', 'w', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'v', 'c', 'm', 'p', 'w', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
+  'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
+  '_', 'v', 'r', 'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
+  'r', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r',
+  'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm',
+  'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'u', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'u', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '5', '_', 'v', 'a', 'd', 'd', 'h', 'u', 'b', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'A', '6', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '_', 'n', 'o', 't',
+  'a', 'n', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '6', '_', 'v', 'c', 'm', 'p', 'b',
+  'e', 'q', '_', 'n', 'o', 't', 'a', 'n', 'y', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '2', '_', 'a', 'l', 'l', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'd',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'y', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 'b', 'i', 't', 's', 's', 'e', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c',
+  'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p',
+  'e', 'q', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 'e',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 'e', 'u', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'c', 'm', 'p', 'g', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
+  'c', 'm', 'p', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm',
+  'p', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p',
+  'g', 't', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'l',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'l', 't', 'u', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x',
+  'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', 'i', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', 'r', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '2', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '2', '_', 'p', 'x', 'f', 'e', 'r', '_', 'm', 'a', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'C', '2', '_', 't', 'f', 'r', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
+  't', 'f', 'r', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'v', 'i', 't',
+  'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'v', 'm', 'u', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '2', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
+  '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
+  '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'a',
+  'n', 'd', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm',
+  'p', 'l', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'l',
+  't', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'l', 't',
+  'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'l', 't', 'e',
+  'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'n', 'e', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'n', 'e', 'q', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's', 't', 'c', 'o', 'r', 'n', 'e',
+  'r', '9', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's', 't', 'c', 'o',
+  'r', 'n', 'e', 'r', '9', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
+  '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
+  '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '4', '_', 'n', 'b', 'i', 't', 's', 's', 'e', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
+  '4', '_', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
+  'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'o',
+  'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'o', 'r', '_', 'o',
+  'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd',
+  '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
+  'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
+  '_', 'd', 'f', '2', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
+  'v', '_', 'd', 'f', '2', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 's', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2',
+  'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
+  'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w', '_', 'c', 'h', 'o',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f',
+  '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd',
+  'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
+  'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '_', 'c', 'h', 'o', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2',
+  'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's',
+  'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
+  '_', 's', 'f', '2', 'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'w',
+  '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
+  'v', '_', 's', 'f', '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
+  'n', 'v', '_', 's', 'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'd', '2', 'd', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'd', '2', 's',
+  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'w',
+  '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
+  'u', 'w', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
+  'v', '_', 'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
+  'n', 'v', '_', 'w', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd',
+  'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f',
+  'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c',
+  'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c', 'm',
+  'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c', 'm', 'p',
+  'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm', '_',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm', '_', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'a', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'F', '2', '_', 's', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'F', '2', '_', 's', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
+  '2', '_', 's', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
+  '_', 's', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
+  's', 'f', 'c', 'm', 'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'i', 'x', 'u', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'i', 'x', 'u', 'p', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'i', 'x', 'u', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 'f', 'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm',
+  'a', '_', 'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
+  'm', 'a', '_', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
+  'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 's', '_',
+  'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm',
+  '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm', '_',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'a', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'F', '2', '_', 's', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
+  '2', '_', 's', 'f', 'm', 'p', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's',
+  'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '2', '_', 'l', 'o', 'a', 'd',
+  'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '4', '_',
+  'l', 'o', 'a', 'd', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
+  'c', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
+  'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
+  'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
+  'c', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'a',
+  'c', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
+  'a', 'c', 's', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
+  'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'c', 'm', 'p', 'y', 'r', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's',
+  's', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'n', 'a', 'c', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'r',
+  'n', 'd', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm',
+  'p', 'y', 's', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd',
+  'p', 'm', 'p', 'y', 'u', 'u', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 'u', 'u', '_', 'n', 'a',
+  'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p',
+  'y', 'u', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'h', 'm',
+  'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'h', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'a', 'c', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'a',
+  'c', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
+  'h', 's', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
+  'a', 'c', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'a', 'c', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'h', 's',
+  '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
+  'u', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'm', 'a', 'c', 'u', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l',
+  's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c',
+  'u', 'l', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
+  'p', 'y', 'h', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'p', 'y', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'l', '_',
+  'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u',
+  'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p',
+  'y', 'u', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
+  'p', 'y', 'u', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
+  'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
+  'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
+  'c', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_',
+  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's',
+  'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c',
+  'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_',
+  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'l',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
+  'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
+  'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
+  'c', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_',
+  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's',
+  'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a',
+  'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_',
+  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'r', 'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h',
+  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l',
+  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l',
+  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n',
+  'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't',
+  '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
+  's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n',
+  'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's',
+  '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a',
+  'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_',
+  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a',
+  'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l', 'h',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
+  'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c',
+  '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
+  'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c',
+  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'h',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
+  'r', 'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd',
+  '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'h',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
+  'r', 'n', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 's', 'm', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 's', 'u', '_', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c',
+  '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_',
+  'a', 'c', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c',
+  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'h', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'h', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'l',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_',
+  'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h',
+  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a',
+  'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'u', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c',
+  'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
+  'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c',
+  '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
+  'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_',
+  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l',
+  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'h', '_', 's', '0', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_',
+  'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'm', 'p', 'y', 'u', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'l', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_',
+  'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
+  'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h',
+  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
+  'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
+  '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_',
+  'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'n', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'n', 'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  's', 'u', 'b', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'a',
+  'b', 's', 'd', 'i', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
+  'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'v', 'c', 'm', 'a', 'c', '_', 's', '0', '_', 's', 'a', 't', '_', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'a', 'c', '_', 's', '0', '_',
+  's', 'a', 't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm',
+  'p', 'y', '_', 's', '0', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '0', '_', 's', 'a', 't',
+  '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_',
+  's', '1', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'v', 'c', 'm', 'p', 'y', '_', 's', '1', '_', 's', 'a', 't', '_', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'a', 'c', 's', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'a', 'c', 's', '_', 's',
+  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 'r', 's',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y',
+  'r', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm',
+  'p', 'y', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd',
+  'm', 'p', 'y', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
+  'm', 'a', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c',
+  '2', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2',
+  'e', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a',
+  'c', '2', 'e', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
+  'm', 'a', 'c', '2', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'v', 'm', 'a', 'c', '2', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'v', 'm', 'a', 'c', '2', 's', 'u', '_', 's', '0', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'm', 'a', 'c', '2', 's', 'u', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 'e', 's', '_', 's', '0',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 'e', 's', '_',
+  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's',
+  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2',
+  's', '_', 's', '0', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
+  'v', 'm', 'p', 'y', '2', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
+  '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '1', 'p', 'a', 'c', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', 'u', '_', 's',
+  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', 'u',
+  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'a', 'd', 'd',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'i', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c',
+  'i', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c',
+  'm', 'a', 'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
+  'r', 'c', 'm', 'a', 'c', 'r', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'i', '_', 's', '0', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'r', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y',
+  'r', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c',
+  'm', 'p', 'y', 's', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 's', '1',
+  'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'm', 'a', 'c', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'm', 'p', 'y', '_',
+  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'x', 'o', 'r', '_', 'x', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'o', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'x', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'a', 'c', '_', 'u', 'p', '_', 's',
+  '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y',
+  'r', 'i', '_', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm',
+  'p', 'y', 'r', 'i', '_', 'a', 'd', 'd', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
+  '_', 'm', 'p', 'y', 'r', 'i', '_', 'a', 'd', 'd', 'r', '_', 'u', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'r', '_', 'a', 'd', 'd',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'r', '_', 'a',
+  'd', 'd', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'n', 'a', 'c', '_', 'u',
+  'p', '_', 's', '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
+  'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r',
+  '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_',
+  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'x', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '4', '_', 'p', 'm', 'p', 'y', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '4', '_', 'p', 'm', 'p', 'y', 'w', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '4', '_', 'v', 'p', 'm', 'p', 'y', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '4', '_', 'v', 'p', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 'a', 'c',
+  'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p',
+  'y', 'e', 'h', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 's', '0', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 's', '1', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 'a',
+  'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm',
+  'p', 'y', 'o', 'h', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 's', '0', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 's', '1',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '5', '_', 'v', 'd', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '5', '_', 'v', 'd', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'M', '5', '_', 'v', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'M', '5', '_', 'v', 'm', 'a', 'c', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
+  '5', '_', 'v', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5',
+  '_', 'v', 'm', 'p', 'y', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_',
+  'v', 'r', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_',
+  'v', 'r', 'm', 'a', 'c', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_',
+  'v', 'r', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5', '_',
+  'v', 'r', 'm', 'p', 'y', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '6', '_',
+  'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '6',
+  '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 'd', 'd', 'a', 's', 'l', '_', 'r', 'r', 'r', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p',
+  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
+  'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
+  's', 'l', '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'x', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_',
+  'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i',
+  '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'l', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'l', '_', 'i', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'x', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_',
+  'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l',
+  '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'l', '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'c', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_',
+  'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r',
+  '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'l', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'l', '_', 'r', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p',
+  '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
+  'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'i', '_', 'p', '_', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'r', 'n', 'd', '_', 'g', 'o',
+  'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'r', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
+  's', 'r', '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'n', 'a',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r',
+  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i',
+  '_', 'r', '_', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'i', '_', 'r', '_', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's',
+  'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
+  '_', 'i', '_', 's', 'v', 'w', '_', 't', 'r', 'u', 'n', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p',
+  '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
+  'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
+  'r', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'a', 's', 'r', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'a', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'n',
+  'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_',
+  'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
+  'r', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
+  's', 'r', '_', 'r', '_', 's', 'v', 'w', '_', 't', 'r', 'u', 'n', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'v', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'v', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'b', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'b', 'r', 'e', 'v', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'a',
+  'b', 'a', 'c', 'e', 'n', 'c', 'b', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'c', 'l', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '0', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'c', 'l', '1', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'b', 'n', 'o', 'r', 'm',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'b', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'c', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't',
+  '0', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '1', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'c', 't', '1', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'd', 'e', 'i', 'n', 't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u', '_', 'r', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't',
+  'u', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's',
+  'e', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's', 'e', 'r',
+  't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's', 'e',
+  'r', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's', 'e', 'r',
+  't', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 't',
+  'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
+  'f', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_',
+  'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l',
+  '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'l', 's', 'l', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'x', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
+  '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
+  'l', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p',
+  '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_',
+  'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
+  'r', '_', 'i', '_', 'p', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'n', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_',
+  'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i',
+  '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
+  '_', 'i', '_', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'l', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'n',
+  'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_',
+  'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_',
+  'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
+  's', 'r', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
+  'r', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'n', 'a', 'c',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_',
+  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_',
+  'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_',
+  'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'c', 'k', 'h', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'r', 'i', 't', 'y', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_',
+  's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b',
+  'r', 'e', 'v', '_', 's', 't', 'h', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's',
+  't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 't', 'o', 'r', 'e', 'w',
+  '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's',
+  'v', 's', 'a', 't', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 'v',
+  's', 'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a',
+  'b', 'l', 'e', 'i', 'd', 'x', 'b', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n',
+  't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e',
+  'i', 'd', 'x', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x',
+  'h', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x', 'w', '_', 'g',
+  'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
+  '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'i', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'r', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'n', 'e', 'g', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'v', 'c', 'r', 'o', 't', 'a', 't', 'e', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'v', 'r', 'c', 'n', 'e', 'g', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k', 'w', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k', 'w',
+  'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h', 'b', '_', 'n',
+  'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a',
+  't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't',
+  'h', 'u', 'b', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '2', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
+  'v', 's', 'a', 't', 'w', 'h', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '_', 'n', 'o', 'p',
+  'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l', 'a',
+  't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l', 'a',
+  't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l', 'i',
+  'c', 'e', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
+  'i', 'c', 'e', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'x',
+  't', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'x', 't', 'h',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e', 'h',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e', 'w',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o', 'h',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o', 'w',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'b', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'h', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '4', '_', 'a', 'd', 'd', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'l', 's', 'r', '_',
+  'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n', 'd', 'i', '_', 'a',
+  's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n', 'd',
+  'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'c', 'l', 'b', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'c',
+  'l', 'b', 'p', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'c',
+  'l', 'b', 'p', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'e',
+  'x', 't', 'r', 'a', 'c', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'e', 'x',
+  't', 'r', 'a', 'c', 't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '_', 'r', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '4', '_', 'l', 's', 'l', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'n',
+  't', 's', 't', 'b', 'i', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'n', 't', 's', 't', 'b', 'i', 't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
+  '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'o', 'r', '_', 'a', 'n', 'd', 'i', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'o', 'r', '_', 'o', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'o', 'r',
+  'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  'o', 'r', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'p', 'a', 'r', 'i', 't', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
+  's', 't', 'o', 'r', 'e', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '4', '_', 's', 'u', 'b', 'a', 'd', 'd', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'a', 's', 'l', '_', 'r', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'l', 's', 'r',
+  '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c', 'r', 'o',
+  't', 'a', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c', 'r',
+  'o', 't', 'a', 't', 'e', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
+  '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd', 'h',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd',
+  'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r', 'h', 'u', 'b',
+  '_', 'r', 'n', 'd', '_', 's', 'a', 't', '_', 'g', 'o', 'o', 'd', 's', 'y',
+  'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r', 'h',
+  'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'p', 'o',
+  'p', 'c', 'o', 'u', 'n', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'v',
+  'a', 's', 'r', 'h', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n',
+  't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_',
+  'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l',
+  '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_',
+  'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'x', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_',
+  'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r',
+  'o', 'l', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
+  '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'x', 'a', 'c',
+  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 's', 'p', 'l', 'a', 't', 'r',
+  'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 't', 'r', 'u', 'n', 'e',
+  'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 't',
+  'r', 'u', 'n', 'o', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'h', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'o', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't',
+  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v',
+  's', 'p', 'l', 'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v',
+  's', 'p', 'l', 'a', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'w', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a', 'n',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r',
+  'e', 'd', '_', 'a', 'n', 'd', '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '_', 'n', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'n', 'o', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'n', 'o', 't',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e',
+  'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd',
+  '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'p', 'r', 'e', 'd', '_', 'o', 'r', '_', 'n', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_', 'n', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a',
+  'l', 'a', 'r', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd',
+  '_', 's', 'c', 'a', 'l', 'a', 'r', '2', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l', 'a',
+  'r', '2', 'v', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd',
+  '_', 's', 'c', 'a', 'l', 'a', 'r', '2', 'v', '2', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'x', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'x', 'o', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u',
+  'f', 'f', 'e', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h', 'u',
+  'f', 'f', 'e', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 'q',
+  'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'S', '3', '2', 'b', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2',
+  'b', '_', 'n', 't', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't', '_',
+  'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't', '_',
+  'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'q', 'p', 'r', 'e', 'd', '_',
+  'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'S', '3', '2', 'b', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'q', 'p', 'r', 'e',
+  'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'b', 's', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'b', 's', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'b', 's', 'b', '_', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
+  'f', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
+  'f', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd',
+  'i', 'f', 'f', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b',
+  's', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'b', 's', 'w', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'b', 's', 'w', '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', 'd', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', 'd', 'v', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b',
+  'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 'n',
+  'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'd', 'd', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'b', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '_', 'd', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'v', '6', '_',
+  'v', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'v', '6',
+  '_', 'v', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'c', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'c', 'l', 'b', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
+  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'h', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'h', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b',
+  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'u', 'b', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
+  'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
+  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't', '_', 'd', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'u', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'u', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a',
+  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't',
+  '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
+  'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'd', 'd', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
+  'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'q',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
+  'd', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'l', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'l',
+  'i', 'g', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'n', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v',
+  'q', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'q',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'n', 'd', 'v', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n',
+  'd', 'v', 'r', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l',
+  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'l', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'l', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'l', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'l', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w',
+  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
+  'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 'r', 'n', 'd', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 'r', 'n', 'd',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b', 'r',
+  'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u',
+  'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 's', 'r', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 's', 'r', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u',
+  'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 'r',
+  'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  's', 'r', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 'r', 'n', 'd', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h',
+  'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
+  'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 's', 'r', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
+  'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
+  'r', 'w', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 's', 'r', 'w', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n',
+  'p', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
+  'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
+  'g', 'b', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
+  'g', 'b', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r',
+  'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
+  'g', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w', 'r',
+  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w',
+  'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v',
+  'g', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'w', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'a', 'v', 'g', 'w', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'c', 'l', '0', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'c', 'l', '0', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'c', 'l', '0', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', '0', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'd', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'd', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', 'e', 'a', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e',
+  'a', 'l', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'h', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'v', 'd', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'v', 'd', 'd', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'l',
+  't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'l', 't', 'a',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
+  'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
+  'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'b', 'u', 's', '_', 'd', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'd', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'a',
+  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b',
+  '_', 'd', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'h', 'i', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
+  'p', 'y', 'h', 'i', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y',
+  'h', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'h', 's', 'u', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a',
+  't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  'm', 'p', 'y', 'h', 's', 'u', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a',
+  't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
+  'y', 'h', 'v', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
+  's', 'a', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 's',
+  'a', 'd', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'a',
+  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'a',
+  'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'b', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
+  'q', 'b', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'e', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a', 'n', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a', 'n', 'd', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'o', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
+  'h', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q',
+  'h', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
+  'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'e', 'q', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o', 'r', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'x', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'x', 'o', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a',
+  't', 'h', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  'a', 't', 'h', 'e', 'r', 'm', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h',
+  'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
+  'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm',
+  'h', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h',
+  'e', 'r', 'm', 'h', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h',
+  'e', 'r', 'm', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a',
+  't', 'h', 'e', 'r', 'm', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'o', 'r', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'x',
+  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'x',
+  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'g', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h',
+  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h',
+  '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'h', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x', 'o', 'r', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'a',
+  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_',
+  'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'x', 'o', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'x', 'o', 'r',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
+  'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'u', 'h', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o', 'r', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o', 'r', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'x',
+  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_',
+  'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'u', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'o', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'o', 'r', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u',
+  'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
+  'u', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'g', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'g', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'o', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'o', 'r', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'x', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'x', 'o',
+  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'i',
+  'n', 's', 'e', 'r', 't', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i',
+  'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l',
+  'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'l', 's', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 's', 'r', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  's', 'r', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'l', 's', 'r', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  's', 'r', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  's', 'r', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'l', 's', 'r', 'w', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  's', 'r', 'w', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 'u', 't', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
+  'u', 't', '4', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'l', 'u', 't', 'v', 'v', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 'u', 't', 'v', 'v', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'n', 'm', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'n', 'm',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u',
+  't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u',
+  't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c',
+  'c', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 'u', 't', 'v', 'v', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'l', 'u', 't', 'v', 'v', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_',
+  'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w',
+  'h', '_', 'n', 'm', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o',
+  'r', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_',
+  'o', 'r', 'a', 'c', 'c', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', 'i', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd',
+  's', 't', 'o', 'r', 'e', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 'q', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k',
+  'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'n', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e',
+  'n', 't', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd',
+  's', 't', 'o', 'r', 'e', 'n', 't', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o',
+  'r', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k',
+  'e', 'd', 's', 't', 'o', 'r', 'e', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'a', 'x', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'a', 'x', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'a', 'x', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'a', 'x', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'a', 'x', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'i', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'i', 'n', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'i', 'n', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'i', 'n', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'i', 'n', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u',
+  's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b',
+  'u', 'u', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'b', 'u', 'u', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
+  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'a', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'h', 's', 'a', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'h', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'a', 'u', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'a', 'u', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', 'a', 'c', 'c',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'a', 'u', 'h', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 's', 'u', 'h', 'u',
+  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 's',
+  'u', 'h', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b',
+  'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's',
+  'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v',
+  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '_',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w',
+  'u', 'h', '_', '6', '4', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'a',
+  't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'r', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'r', 's', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'h', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h',
+  's', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'h', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'h', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'h', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', 's',
+  'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v',
+  's', 'r', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'h', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e',
+  'w', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
+  'e', 'w', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'i', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o', 'w', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o', 'w', 'h', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'i', 'w', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'i', 'w', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'm', 'p', 'y', 'i', 'w', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'i', 'w', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o',
+  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w',
+  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'o', 'w', 'h', '_', '6', '4', '_', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', '6', '4', '_',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
+  'o', 'w', 'h', '_', 'r', 'n', 'd', '_', 's', 'a', 'c', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd',
+  '_', 's', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 's', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 's',
+  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'm', 'p', 'y', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
+  'y', 'u', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
+  'h', 'e', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h',
+  'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
+  'u', 'x', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'n', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'a',
+  'v', 'g', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n',
+  'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'n', 'a', 'v', 'g', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'n', 'a', 'v', 'g', 'w', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o',
+  'r', 'm', 'a', 'm', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n',
+  'o', 'r', 'm', 'a', 'm', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'n', 'o', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'o', 'r', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c',
+  'k', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k',
+  'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'p', 'a', 'c', 'k', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'a', 'c', 'k', 'e', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'b', '_', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'b', '_', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'a', 'c', 'k', 'h', 'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'u', 'b', '_', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c',
+  'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k',
+  'o', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'p', 'a', 'c', 'k', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'a', 'c', 'k', 'o', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'h', '_', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'h', '_', 's', 'a',
+  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'a', 'c', 'k', 'w', 'u', 'h', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'u', 'h', '_', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'o', 'p',
+  'c', 'o', 'u', 'n', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'o', 'p', 'c', 'o', 'u', 'n', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r',
+  'e', 'f', 'i', 'x', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
+  'r', 'e', 'f', 'i', 'x', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'w', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'd', 'e',
+  'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'd', 'e', 'l',
+  't', 'a', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r',
+  't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
+  's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's',
+  'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'b', 'u', 's', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_', 'a', 'c',
+  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
+  'm', 'p', 'y', 'b', 'u', 's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v',
+  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
+  'y', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y',
+  'u', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r',
+  't', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r',
+  't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
+  'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
+  'p', 'y', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
+  'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'r', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'b', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u',
+  'n', 'd', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'h', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'h', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'h', 'u', 'b',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'u', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u',
+  'n', 'd', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
+  'u', 'n', 'd', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b',
+  'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's',
+  'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'h', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'h', 'u', 'b', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'u', 'w',
+  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'u', 'w',
+  'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a',
+  't', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
+  't', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c',
+  'a', 't', 't', 'e', 'r', 'm', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_',
+  'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
+  't', 'e', 'r', 'm', 'h', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm',
+  'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'm', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h',
+  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '_', 'a', 'd', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h',
+  'w', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm',
+  'h', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'm', 'w', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', 'a', 'd', 'd', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
+  't', 't', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', 'q', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'e',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'e',
+  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'h', 'u', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h',
+  'u', 'f', 'f', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'v', 'd', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'v', 'd',
+  'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'h', 'u', 'f', 'o', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'h', 'u', 'f', 'o', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'h', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b',
+  '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'b', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'u', 'b', 'b', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'b', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '_', '1', '2',
+  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's',
+  'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'v', '6', '_', 'v', 's', 'u', 'b', 'c', 'a', 'r', 'r', 'y', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'v', '6', '_', 'v', 's', 'u', 'b', 'c', 'a', 'r', 'r', 'y',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'h', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'h', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h',
+  's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'u', 'b', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '_', '1',
+  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u',
+  'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't',
+  '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a',
+  't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'u', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's',
+  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w',
+  's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
+  'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd',
+  'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
+  'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'w', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
+  'b', 'w', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
+  '6', '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
+  'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  's', 'u', 'b', 'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', 'a',
+  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
+  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b',
+  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
+  '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y',
+  'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8', 'B',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_',
+  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
+  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y',
+  'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k',
+  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u',
+  'n', 'p', 'a', 'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
+  'u', 'n', 'p', 'a', 'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
+  'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h',
+  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n',
+  'p', 'a', 'c', 'k', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u',
+  'n', 'p', 'a', 'c', 'k', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
+  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
+  'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '_',
+  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
+  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r', '_', '1', '2', '8',
+  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'z', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'z', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
+  'V', '6', '_', 'v', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'z',
+  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c',
+  'c', 'l', 'e', 'a', 'n', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd', 'c',
+  'c', 'l', 'e', 'a', 'n', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2',
+  '_', 'd', 'c', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd',
+  'c', 'z', 'e', 'r', 'o', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '4', '_', 'l', '2',
+  'f', 'e', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '5', '_', 'l', '2', 'f',
+  'e', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'c', 'i', 'r', 'c', '_', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r',
+  'c', '_', 'l', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c',
+  '_', 's', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'c', 'i', 'r', 'c', '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't',
+  'h', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c',
+  'i', 'r', 'c', '_', 's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', '_', 'm', 'm', '2', '5', '6', 'i', '_', 'v', 'a', 'd', 'd',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
+  'A', 'G', 'O', 'N', '_', 'p', 'r', 'e', 'f', 'e', 't', 'c', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
+  'b', 's', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_', 's',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_', 's', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
+  '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_',
+  'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_', 's', '_', 'p', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
+  'd', 'd', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'p',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd',
+  'd', 'q', 'h', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'a', 'd', 'd', 's', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_',
+  's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's',
+  '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
+  's', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
+  'd', 's', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 's', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd',
+  'd', 'u', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 'q', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
+  'd', 'd', 'u', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 's',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'a', 'd', 'd', 'u', 'h', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd',
+  'd', 'u', 'h', '_', 'r', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
+  'd', 'd', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'a', 'd', 'd', 'v', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'a', 'd', 'd', 'w', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'a', 'n', 'd', '_', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'n', 'd', 'i',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 'a', 'p', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 's',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_',
+  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b',
+  '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u',
+  'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
+  'e', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
+  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_',
+  'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_',
+  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r',
+  '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
+  'r', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b',
+  'a', 'l', 'i', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'b', 'c', 'l', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'c', 'l', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c',
+  'l', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
+  's', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
+  'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l',
+  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
+  'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
+  's', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
+  'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r',
+  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
+  'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b', 'i',
+  't', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'm', 'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'n', 'z', 'i',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'b', 'm', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'z', 'i', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n',
+  'e', 'g', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'b', 'n', 'e', 'g', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'n', 'e', 'g', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n',
+  'e', 'g', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'n', 'z', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'b', 'p', 'o', 's', 'g', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 'l', '_', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 's', 'e', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's',
+  'e', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'b', 's', 'e', 't', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 's', 'e', 't', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
+  'z', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'b', 'z', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'b', 'z', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'e', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'e', 'q', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q',
+  'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'c', 'f', 'c', 'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'c', 'l', 'e', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'l', 'e', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'l', 'e', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l',
+  'e', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l',
+  'e', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'l', 'e', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'l', 'e', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'c', 'l', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'l', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'l', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l',
+  't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l',
+  't', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'l', 't', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'l', 't', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'e',
+  'q', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'l', 'e', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'c', 'm', 'p', '_', 'l', 't', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd',
+  'u', '_', 'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_',
+  'l', 'e', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'l', 't',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'u', '_', 'e', 'q', '_', 'q', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'c', 'm', 'p', 'g', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm',
+  'p', 'g', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u', '_',
+  'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u', '_', 'l', 'e', '_', 'q',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'c', 'm', 'p', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p',
+  'y', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o',
+  'p', 'y', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
+  'o', 'p', 'y', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'c', 'o', 'p', 'y', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'c', 't', 'c', 'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
+  'i', 'v', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i',
+  'v', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v',
+  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_',
+  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'd', 'l', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 's', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'd', 'o', 't', 'p', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 's',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_',
+  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a',
+  '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
+  'p', 'a', 'd', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd',
+  'd', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'd', 'p', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a',
+  'q', '_', 's', 'a', '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_',
+  's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_', 's', 'a',
+  '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'u', '_', 'h', '_', 'q', 'b',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'd', 'p', 'a', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
+  'a', 'x', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', '_', 'w', '_', 'p',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'd', 'p', 's', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd',
+  'p', 's', 'q', '_', 's', 'a', '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q',
+  'x', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', 'x', '_',
+  's', 'a', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'u', '_', 'h', '_',
+  'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'd', 'p', 's', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
+  'p', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u',
+  'b', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 'u', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
+  'p', 's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'x', '_', 'w',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'e', 'x', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'p', 'd', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'e', 'x', 't', 'r', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_',
+  'r', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_', 's', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e',
+  'x', 't', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'a', 'd', 'd', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'a', 'd', 'd',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'c', 'a', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'a', 'f', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'c', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'c', 'e', 'q', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'a',
+  's', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'c', 'l', 'a', 's', 's', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l',
+  'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'c', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 't', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'c', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'n', 'e', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'n',
+  'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'c', 'o', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'o', 'r', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'c', 'u', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'e', 'q', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'c', 'u', 'l', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 'e', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
+  'u', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 't', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u',
+  'n', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'c', 'u', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', 'e', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'c', 'u', 'n', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'd', 'i', 'v', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'd', 'i', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'd', 'o', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x',
+  'd', 'o', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'e', 'x', 'p', '2', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'p',
+  '2', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'l', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u',
+  'p', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'r', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x',
+  'u', 'p', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'f', 'i', 'n', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 'u',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'f', 'i', 'n', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'l',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'f', 'q', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'r', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'f', 'q', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'i', 'l', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  'l', 'o', 'g', '2', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 'l', 'o', 'g', '2', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
+  'a', 'd', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'd', 'd', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a',
+  'x', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'a', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
+  'a', 'x', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_',
+  'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'a', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 'm', 'i', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 's', 'u', 'b', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'm', 's', 'u', 'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'u', 'l', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
+  'u', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 'r', 'c', 'p', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'c', 'p', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 'r', 'i', 'n', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'i', 'n', 't', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 'r', 's', 'q', 'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 's', 'q', 'r', 't', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 's', 'a', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'a', 'f', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
+  'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 's', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 'e', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 's', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 't', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
+  'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'f', 's', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'n', 'e', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 's', 'o', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'o', 'r', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
+  'q', 'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 's', 'q', 'r', 't', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u',
+  'b', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'u', 'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'e', 'q', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'f', 's', 'u', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 'e', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'f', 's', 'u', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 't', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  's', 'u', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u',
+  'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 's', 'u', 'n', 'e', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', 'e',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'f', 't', 'i', 'n', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n',
+  't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 'u', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
+  't', 'i', 'n', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'q', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't',
+  'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 's', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't',
+  'r', 'u', 'n', 'c', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_',
+  'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a',
+  'd', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 's', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h',
+  'a', 'd', 'd', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'h', 'a', 'd', 'd', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'h', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 's',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'h', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_',
+  'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b',
+  '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e',
+  'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'i', 'l', 'v', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i',
+  'l', 'v', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o',
+  'd', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'i', 'l', 'v', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v',
+  'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e',
+  'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's',
+  'e', 'r', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'i', 'n', 's', 'v', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'i', 'n', 's', 'v', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 'b', 'u', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'l', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l',
+  'd', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l',
+  'd', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'l', 'h', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 's', 'a', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 'w',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', '_', 'q', '_', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'a', 'd', 'd', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'r', '_', 'q', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'a', 'd', 'd', 'r', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'd', 'd',
+  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'a', 'd', 'd', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'a', 'd', 'd', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q',
+  '_', 's', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a',
+  '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a', '_', 'w',
+  '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_',
+  'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'a', 'x', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'a', 'x', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'a', 'x', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'a', 'x', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a',
+  'x', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'a', 'x', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'a', 'x', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 'i', 'n', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'i', 'n', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'i', 'n', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
+  'n', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n',
+  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i',
+  '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n',
+  'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
+  'n', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'i', 'n', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'o', 'd', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'o', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o',
+  'd', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd',
+  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'o', 'd',
+  's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'm', 'o', 'v', 'e', '_', 'v', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 's', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  's', 'u', 'b', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', '_', 'q', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 's', 'u', 'b', 'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'r', '_',
+  'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'm', 's', 'u', 'b', 'u', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'm', 's', 'u', 'b', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 's', 'u', 'b', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 't', 'h', 'l', 'i', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 'u', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', '_', 'q', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u',
+  'l', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', '_', 's', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'm', 'u', 'l', 'e', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
+  'u', 'l', 'e', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u',
+  'l', 'e', 'u', '_', 's', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u',
+  'l', 'e', 'u', '_', 's', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u',
+  'l', 'q', '_', 'r', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 'r',
+  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 's', '_', 'p', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
+  'u', 'l', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'r', '_', 'q', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'm', 'u', 'l', 'r', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 's', 'a', '_',
+  'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 's', 'a', 'q', '_', 's', '_', 'w',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'm', 'u', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 't', 'u', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
+  'u', 'l', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'm', 'u', 'l', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n',
+  'l', 'o', 'c', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'n', 'l', 'z', 'c', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n',
+  'l', 'z', 'c', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'o', 'r', '_',
+  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'n', 'o', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'o', 'r', '_', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'o', 'r', 'i', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'p', 'a', 'c', 'k', 'r', 'l', '_', 'p', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e',
+  'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'p', 'c', 'k', 'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'p', 'c', 'k', 'o', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c',
+  'n', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'p', 'i', 'c', 'k', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'i', 'c', 'k', '_',
+  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'p', 'r', 'e', 'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
+  'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
+  'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
+  'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
+  'r', 'e', 'c', 'r', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'r', '_', 's', 'r', 'a', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
+  'r', '_', 's', 'r', 'a', '_', 'r', '_', 'p', 'h', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r',
+  'e', 'c', 'r', 'q', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r',
+  'q', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', '_',
+  'r', 's', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q', 'u',
+  '_', 's', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'p', 'e', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 'r', 'a', 'd', 'd', 'u', '_', 'w', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'd',
+  'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 'r', 'e', 'p', 'l', '_', 'p', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'e', 'p',
+  'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_',
+  's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 's',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'a', 't', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'a', 't', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'h', 'f', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 's', 'h', 'i', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  's', 'h', 'l', 'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 's', '_',
+  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 's', 'h', 'l', 'l', '_', 's', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r',
+  'a', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h',
+  'r', 'a', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r', '_',
+  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
+  'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r',
+  'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'l', '_', 'q', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'l', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'l', 'd', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'l', 'd', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'l', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'l', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
+  'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't',
+  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'p', 'l', 'a', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'p', 'l', 'a', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'r', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'r', 'a', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a',
+  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'r', 'a', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'r', 'a', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a',
+  'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'r', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'r', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
+  'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'r', 'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'r', 'l', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
+  'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'r', 'l', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'r', 'l', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'r', 'l', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', '_', 'p',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
+  's', '_', 's', 'u', 'b', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b',
+  'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
+  's', 'u', 'b', 'q', 'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q',
+  'h', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
+  'b', 's', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
+  'u', 'b', 's', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'u', 'b', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u', '_',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 's', 'u', 'b', 's', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u',
+  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
+  's', 'u', 's', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u',
+  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
+  's', 'u', 'u', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
+  'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
+  's', 'u', 'u', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 'p', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
+  '_', 's', 'u', 'b', 'u', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 's',
+  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 's', '_', 'q', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
+  'u', 'b', 'u', 'h', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', 'h', '_', 'r',
+  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'u', 'b', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  's', 'u', 'b', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
+  'v', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v',
+  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
+  's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
+  '_', 'v', 's', 'h', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's',
+  'h', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'm', 'i', 'p', 's', '_', 'w', 'r', 'd', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'x', 'o', 'r', '_', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
+  'x', 'o', 'r', 'i', '_', 'b', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a',
+  'd', 'd', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'a', 'd', 'd', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'a', 'd', 'd', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_',
+  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd',
+  'd', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a',
+  'd', 'd', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'a', 'd', 'd', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'd', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f',
+  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r',
+  '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
+  'r', '_', 'w', 'a', 'r', 'p', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'b', 'a', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'b', 'a', 'r', '_', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
+  'r', 'r', 'i', 'e', 'r', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '_', 's', 'y', 'n', 'c',
+  '_', 'c', 'n', 't', '\000', '_', '_', 's', 'y', 'n', 'c', 't', 'h', 'r', 'e',
+  'a', 'd', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '0',
+  '_', 'a', 'n', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r',
+  '0', '_', 'o', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r',
+  '0', '_', 'p', 'o', 'p', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b',
+  'i', 't', 'c', 'a', 's', 't', '_', 'd', '2', 'l', 'l', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't', '_', 'f', '2', 'i',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't',
+  '_', 'i', '2', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't',
+  'c', 'a', 's', 't', '_', 'l', 'l', '2', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'c', 'e', 'i', 'l', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'c', 'e', 'i', 'l', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'c', 'e', 'i', 'l', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'c', 'o', 's', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'o', 's', '_', 'a', 'p', 'p',
+  'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'd', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'd', '2', 'f', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'p', '_', 'f', 't', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z', '_', 'f',
+  't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'h',
+  'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'l', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'm', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'n', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'n', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'a', 'p', 'p',
+  'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i',
+  'v', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
+  'i', 'v', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', 'i', 'v', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'd', 'i', 'v', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_',
+  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i',
+  'v', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
+  'i', 'v', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'd', 'i', 'v', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x',
+  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a',
+  'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n', '_',
+  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_',
+  'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_', 'r',
+  'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i',
+  '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', '2', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  '2', 'i', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', '2', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', '2', 'i', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'm', '_', 'f', 't', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'n',
+  '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l',
+  'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l',
+  'l', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', '2', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', '2', 'l', 'l', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '_', 'f', 't',
+  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r',
+  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r',
+  'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'u', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'u', 'i', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm',
+  '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u',
+  'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
+  'u', 'l', 'l', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'p', '_', 'f', 't',
+  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_',
+  'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l',
+  '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'f', 'a', 'b', 's', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  'a', 'b', 's', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'a',
+  'b', 's', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'l', 'o', 'o', 'r', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'l', 'o', 'o', 'r', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'l', 'o', 'o', 'r', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'd', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f',
+  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a',
+  '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
+  'a', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
+  'm', 'a', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'd', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f', 't',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_',
+  'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a',
+  '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
+  'a', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'f', 'm', 'a', 'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', 'm', 'a', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'f', 'm', 'a', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'f', 'm', 'i', 'n', '_', 'd', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'f', 'm', 'i', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'f', 'm', 'i', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'f', 'n', 's', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'i', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'i', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i',
+  '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2',
+  'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f',
+  '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_',
+  'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r', 'z',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e',
+  'p', '_', 'c', 'o', 'n', 's', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'g', 'l', 'o', 'b', 'a', 'l',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c', 'e',
+  'p', '_', 'l', 'o', 'c', 'a', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 's', 'h', 'a', 'r', 'e', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p',
+  '_', 's', 'a', 'm', 'p', 'l', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 's', 'u', 'r', 'f', 'a', 'c',
+  'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e',
+  'p', '_', 't', 'e', 'x', 't', 'u', 'r', 'e', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r',
+  'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2',
+  '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'm', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'n', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'l', 'o', 'h', 'i', '_', 'i', '2', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'a', 't', 'c', 'h', '_', 'a', 'n',
+  'y', '_', 's', 'y', 'n', 'c', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'm', 'a', 't', 'c', 'h', '_', 'a', 'n', 'y', '_', 's', 'y',
+  'n', 'c', '_', 'i', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
+  'e', 'm', 'b', 'a', 'r', '_', 'c', 't', 'a', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'm', 'e', 'm', 'b', 'a', 'r', '_', 'g', 'l', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'm', 'e', 'm', 'b', 'a', 'r', '_', 's', 'y', 's', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
+  'u', 'l', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'm', 'u', 'l', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'm', 'u', 'l', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_',
+  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u',
+  'l', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
+  'u', 'l', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'm', 'u', 'l', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '2', '4', '_', 'i', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '2', '4', '_', 'u', 'i', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'i', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'l', 'l', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u', 'i',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u',
+  'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'p', 'r', 'm', 't', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'a', 'p', 'p', 'r',
+  'o', 'x', '_', 'f', 't', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n', '_',
+  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n',
+  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r',
+  'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'c', 'p', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'c', 'p', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'c', 'p', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_', 'd',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 'l',
+  'o', 'c', 'k', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 'l', 'o', 'c', 'k',
+  '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_',
+  'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'x',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
+  'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
+  's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '0', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
+  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '0', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '1', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '2', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '3', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '4', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '5', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '6', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '7', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '8', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '9', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '0', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '1', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '3', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '4', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '5', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '6', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '7', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '8', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '9', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
+  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '0', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '1', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'e', 'n', 'v', 'r', 'e', 'g', '4', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
+  'e', 'n', 'v', 'r', 'e', 'g', '5', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
+  'n', 'v', 'r', 'e', 'g', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
+  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
+  'v', 'r', 'e', 'g', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
+  'r', 'e', 'g', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
+  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r',
+  'e', 'g', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'g', 'r', 'i', 'd', 'i',
+  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
+  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'i', 'd', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_',
+  'e', 'q', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a',
+  's', 'k', '_', 'g', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n',
+  'e', 'm', 'a', 's', 'k', '_', 'g', 't', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
+  'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'l', 'e', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'l', 't', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'w', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'x', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'y', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 'n', 's', 'm', 'i', 'd', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'n', 't', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'n', 't', 'i', 'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n',
+  't', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't', 'i',
+  'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
+  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'w', 'a', 'r', 'p',
+  'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '0', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
+  'r', 'e', 'g', '_', 'p', 'm', '1', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p',
+  'm', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '3', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
+  'r', 'e', 'g', '_', 's', 'm', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
+  't', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
+  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd',
+  '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
+  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'y', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
+  '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'z', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
+  'e', 'g', '_', 'w', 'a', 'r', 'p', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
+  '_', 'w', 'a', 'r', 'p', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'b', '3', '2', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'b', '6', '4',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_',
+  'r', 'i', 'g', 'h', 't', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p',
+  'r', 'o', 'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 's',
+  'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r',
+  'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'a', 'd', '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'a', 'd', '_', 'u', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'a',
+  't', 'u', 'r', 'a', 't', 'e', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'f', 't',
+  'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
+  '_', 'b', 'f', 'l', 'y', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'h', 'f', 'l', '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'd', 'o',
+  'w', 'n', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'h', 'f', 'l', '_', 'd', 'o', 'w', 'n', '_', 'i', '3', '2', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'i', 'd', 'x', '_', 'f',
+  '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_',
+  'i', 'd', 'x', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'b', 'f', 'l', 'y', '_',
+  'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
+  '_', 's', 'y', 'n', 'c', '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n',
+  'c', '_', 'd', 'o', 'w', 'n', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'd', 'o',
+  'w', 'n', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'i', 'd', 'x', '_', 'f', '3',
+  '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's',
+  'y', 'n', 'c', '_', 'i', 'd', 'x', '_', 'i', '3', '2', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'u',
+  'p', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h',
+  'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'u', 'p', '_', 'i', '3', '2', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'u', 'p', '_',
+  'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
+  '_', 'u', 'p', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'i', 'n', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'i', 'n', '_', 'a', 'p', 'p', 'r', 'o', 'x',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o',
+  'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'q', 'r', 't', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'q', 'r', 't', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'q', 'r', 't', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'm', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r',
+  'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't',
+  '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q',
+  'r', 't', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'd', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'f',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p',
+  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'q', 'r', 't', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'q', 'r', 't', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'z', '_', 'f', 't', 'z', '_',
+  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'd', 'a',
+  't', 'a', '_', 't', 'y', 'p', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'o', 'r', 'd',
+  'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'd',
+  'e', 'p', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q',
+  '_', 'h', 'e', 'i', 'g', 'h', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 'q', '_', 'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3',
+  '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'c', 'l', 'a',
+  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
+  'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3',
+  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a',
+  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1',
+  '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
+  'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
+  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
+  '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '6', '4', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '1', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i',
+  '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
+  'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v',
+  '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i',
+  '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2',
+  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e',
+  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '1', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '1', 'd', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
+  'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
+  'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
+  '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v',
+  '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i',
+  '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1',
+  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
+  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i',
+  '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
+  '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4',
+  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
+  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
+  'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
+  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i',
+  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
+  '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i',
+  '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '1', '6', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '3',
+  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i',
+  '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '8', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l',
+  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
+  '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v',
+  '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i',
+  '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6',
+  '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4', '_',
+  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a',
+  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'b', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v',
+  '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4',
+  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '1',
+  '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '2', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
+  'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v',
+  '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '1', '6', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
+  '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6', '4',
+  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i',
+  '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_',
+  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r',
+  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
+  '3', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
+  '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v',
+  '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2',
+  'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '6',
+  '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 'c',
+  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
+  '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
+  'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4',
+  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3',
+  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'z',
+  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
+  '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
+  '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
+  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '1', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1',
+  'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i',
+  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'p', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '1', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd',
+  '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r',
+  'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_',
+  'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2',
+  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
+  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
+  'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a',
+  'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_',
+  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
+  't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
+  'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '2', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2',
+  'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i',
+  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '3', '2',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'p', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
+  '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd',
+  '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i', '1',
+  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
+  'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i', '3', '2', '_', 't', 'r',
+  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
+  'p', '_', '3', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_',
+  'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2',
+  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
+  '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i', '8',
+  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
+  's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't',
+  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
+  '_', 'p', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
+  '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 's', 'w', 'a', 'p', '_', 'l', 'o', '_', 'h',
+  'i', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r',
+  'u', 'n', 'c', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r',
+  'u', 'n', 'c', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'r',
+  'u', 'n', 'c', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 't', 'x', 'q', '_', 'a', 'r', 'r', 'a', 'y', '_', 's', 'i', 'z',
+  'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h',
+  'a', 'n', 'n', 'e', 'l', '_', 'd', 'a', 't', 'a', '_', 't', 'y', 'p', 'e',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h', 'a',
+  'n', 'n', 'e', 'l', '_', 'o', 'r', 'd', 'e', 'r', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 't', 'x', 'q', '_', 'd', 'e', 'p', 't', 'h', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'h', 'e', 'i', 'g', 'h', 't',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm',
+  '_', 'm', 'i', 'p', 'm', 'a', 'p', '_', 'l', 'e', 'v', 'e', 'l', 's', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm', '_',
+  's', 'a', 'm', 'p', 'l', 'e', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
+  't', 'x', 'q', '_', 'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n',
+  'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_', '_',
+  'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000', '_',
+  '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'n',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r',
+  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_',
+  'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_',
+  'a', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e',
+  '_', 'a', 'l', 'l', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v',
+  'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'n', 'y', '\000', '_', '_', 'n', 'v',
+  'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'n', 'y', '_', 's', 'y', 'n',
+  'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'b',
+  'a', 'l', 'l', 'o', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o',
+  't', 'e', '_', 'b', 'a', 'l', 'l', 'o', 't', '_', 's', 'y', 'n', 'c', '\000',
+  '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n', 'i',
+  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n',
+  'i', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'd', 'd', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd',
+  '_', 't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p',
+  't', 'o', '_', 'v', 'c', 'i', 'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c',
+  'r', 'y', 'p', 't', 'o', '_', 'v', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a',
+  's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n',
+  'c', 'i', 'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't',
+  'o', '_', 'v', 'n', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'e', 'r', 'm',
+  'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v',
+  'p', 'm', 's', 'u', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't',
+  'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r',
+  'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'b', 'o',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'h',
+  'a', 's', 'i', 'g', 'm', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p',
+  't', 'o', '_', 'v', 's', 'h', 'a', 's', 'i', 'g', 'm', 'a', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 's', 'a', 'l', 'l',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'd', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's', 't', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'd', 's', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'm', 'f', 'v', 's', 'c', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'm', 't', 'v', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
+  'b', 's', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'a', 'd', 'd', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
+  'd', 'c', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'e', 'c', 'u',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'e', 'u', 'q', 'm', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'a', 'd', 'd', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
+  'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'w',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
+  'd', 'u', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
+  'v', 'g', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
+  'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'b', 'p', 'e', 'r', 'm', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'c', 'f', 's', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'f', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'l', 'z', 'l', 's', 'b', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'b', 'f', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'm', 'p', 'b', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'm', 'p', 'e', 'q', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e',
+  'q', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
+  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '_',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'd', '_', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'm', 'p', 'e', 'q', 'u', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
+  'p', 'e', 'q', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
+  'u', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f', 'p', '_', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'f', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'c', 'm', 'p', 'g', 't', 'f', 'p', '_', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'm', 'p', 'g', 't', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
+  'p', 'g', 't', 's', 'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
+  'g', 't', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's',
+  'd', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h', '_', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'c', 'm', 'p', 'g', 't', 's', 'w', '_', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'g', 't', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
+  'g', 't', 'u', 'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g',
+  't', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '_', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'g', 't', 'u', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  'm', 'p', 'n', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e',
+  'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '_', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'c', 'm', 'p', 'n', 'e', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
+  'p', 'n', 'e', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n',
+  'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b',
+  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '_', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'c', 'm', 'p', 'n', 'e', 'z', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
+  't', 's', 'x', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 't', 'u', 'x', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'c', 't', 'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'e', 'x', 'p', 't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'g', 'b',
+  'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'l', 'o', 'g', 'e', 'f', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'm', 'a', 'd', 'd', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
+  'a', 'x', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
+  'a', 'x', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
+  'a', 'x', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
+  'h', 'a', 'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'r',
+  'a', 'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'f',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'm', 'i', 'n', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'm', 'i', 'n', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'm', 'i', 'n', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'l', 'a', 'd',
+  'd', 'u', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'm', 'b',
+  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 's', 'h', 'm', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'm', 's', 'u', 'm', 's', 'h', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'm', 's', 'u', 'm', 'u', 'b', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u',
+  'm', 'u', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 's', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'm', 'u', 'l', 'e', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u',
+  'l', 'e', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'm', 'u', 'l', 'e', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l',
+  'o', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'w', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'm', 'u', 'l', 'o', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o',
+  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'n', 'm', 's', 'u', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'p', 'e', 'r', 'm', '_', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k',
+  'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'd', 's', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'p', 'k', 's', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p',
+  'k', 's', 'h', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 'u',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'w', 's', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'p', 'k', 's', 'w', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k',
+  'u', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'h', 'u', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'w', 'u', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'p', 'r', 't', 'y', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't',
+  'y', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'r', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f',
+  'i', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'n', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'r', 'f', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', 'm', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
+  'r', 'l', 'd', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'r', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'm',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'n', 'm', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 'r', 's', 'q', 'r', 't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
+  'e', 'l', '_', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 's', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'v',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
+  'r', 'a', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 's', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 's', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'v', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
+  'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'c', 'u', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'u', 'b', 'e', 'c', 'u', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'u', 'b', 'e', 'u', 'q', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
+  'b', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'h', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'w', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'u', 'b', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
+  'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
+  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
+  'e', 'c', '_', 'v', 's', 'u', 'm', '2', 's', 'w', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
+  'v', 's', 'u', 'm', '4', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
+  'm', '4', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 'u',
+  'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
+  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', 's', 'w', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
+  'c', '_', 'v', 'u', 'p', 'k', 'h', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u',
+  'p', 'k', 'h', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
+  'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
+  '_', 'v', 'u', 'p', 'k', 'l', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p',
+  'k', 'l', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
+  'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'e', 'r', 'm', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e',
+  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v',
+  'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o',
+  'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i',
+  'v', 'w', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd',
+  'i', 'v', 'w', 'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'f', 'm', 'a', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_',
+  't', 'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'g', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', '_', 't', 'e', 'x',
+  'a', 's', 'r', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'g', 'e', 't', '_', 't', 'f', 'h', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'g', 'e', 't', '_', 't', 'f', 'i', 'a', 'r', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'u', 'l', 'f', '1',
+  '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'f', 'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
+  'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c',
+  'f', 'i', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', 'u', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
+  'c', 'f', 'i', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'e', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'l', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'f', 'c', 'p', 's', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'f', 'c', 't', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd',
+  'u', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', 'z', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't',
+  'i', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'u', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't',
+  'i', 'w', 'u', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'z', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
+  'l', 'o', 'g', 'i', 'c', 'a', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'a', 'd', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 's', 'u', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'm', 's', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'u', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  'f', 'm', 'u', 'l', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'a', 'b', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
+  'n', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n',
+  'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 's', 'u', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  'f', 'n', 'm', 's', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'p', 'e', 'r', 'm', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'r', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'e', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i',
+  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 'f', 'r', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  'f', 'r', 'i', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's',
+  'q', 'r', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's', 'q', 'r', 't', 'e', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 's', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'u', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's',
+  'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 't', 's', 't', 'n', 'a', 'n', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
+  'x', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'a', 'd', 'd', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'x', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'u', 'l', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'f', 'x', 'x', 'c', 'p', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x',
+  'x', 'c', 'p', 'n', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'm',
+  'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  'f', 'x', 'x', 'n', 'p', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n',
+  'p', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'g', 'p', 'c', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l',
+  'f', 'c', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
+  '_', 'q', 'v', 'l', 'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  'l', 'f', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f',
+  'i', 'w', 'a', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f',
+  'i', 'w', 'z', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 's', 'a',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
+  'q', 'v', 'l', 'p', 'c', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'l', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
+  'v', 'l', 'p', 'c', 'r', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'r', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  's', 't', 'f', 'c', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c', 'd', 'a', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  's', 't', 'f', 'c', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'c', 's', 'a', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
+  's', 't', 'f', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'd', 'a', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't',
+  'f', 'i', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
+  'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't',
+  'f', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
+  'x', '_', 'q', 'v', 's', 't', 'f', 's', 'a', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_',
+  't', 'e', 'x', 'a', 's', 'r', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', 'e', 't', '_', 't', 'f', 'h', 'a', 'r', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'f', 'i',
+  'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'q',
+  'r', 't', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o',
+  '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', 'u', 'b', 'f', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't',
+  'o', '_', 'o', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 't', 'a', 'b', 'o', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'd', 'c', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'd', 'c',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b',
+  'o', 'r', 't', 'w', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 't', 'a', 'b', 'o', 'r', 't', 'w', 'c', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 't', 'b', 'e', 'g', 'i', 'n', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'c', 'h', 'e', 'c', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'e', 'n', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'e', 'n', 'd', 'a',
+  'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r',
+  'e', 'c', 'h', 'k', 'p', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 't', 'r', 'e', 'c', 'l', 'a', 'i', 'm', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'e', 's', 'u', 'm', 'e', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'u', 'n', 'c', 'f',
+  '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 't', 'o', '_', 'o', 'd',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 's', 'r',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 's', 'u', 's',
+  'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  't', 't', 'e', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 's', 'm', 'a', 'x', 'd', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 's', 'm',
+  'i', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 'd', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
+  'c', 'm', 'p', 'e', 'q', 'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e',
+  'q', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 's', 'p', '_', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e',
+  'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 's', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
+  'c', 'm', 'p', 'g', 'e', 's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g',
+  't', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 'd', 'p', '_', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'v', 'c', 'm', 'p', 'g', 't', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't',
+  's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd', 'p', 's', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c',
+  'v', 'd', 'p', 's', 'x', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd', 'p', 'u', 'x',
+  'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
+  'x', '_', 'x', 'v', 'c', 'v', 'h', 'p', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's',
+  'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'p', 'h', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v',
+  's', 'x', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'x', 'w', 'd', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'v', 'c', 'v', 'u', 'x', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'u', 'x', 'w',
+  'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
+  'x', '_', 'x', 'v', 'd', 'i', 'v', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'd', 'i', 'v', 's',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'i', 'e', 'x', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'i', 'e', 'x', 'p',
+  's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
+  'x', '_', 'x', 'v', 'm', 'a', 'x', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'a', 'x', 's',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
+  '_', 'x', 'v', 'm', 'i', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'i', 'n', 's', 'p',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
+  'x', 'v', 'r', 'e', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 'e', 's', 'p', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r',
+  's', 'q', 'r', 't', 'e', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 's', 'q', 'r', 't', 'e',
+  's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
+  'x', '_', 'x', 'v', 't', 's', 't', 'd', 'c', 'd', 'p', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 't', 's',
+  't', 'd', 'c', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 'e', 'x', 'p', 'd', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
+  'x', 'e', 'x', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 's', 'i', 'g', 'd', 'p', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
+  'v', 'x', 's', 'i', 'g', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'e', 'x', 't', 'r', 'a', 'c',
+  't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
+  's', 'x', '_', 'x', 'x', 'i', 'n', 's', 'e', 'r', 't', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'l',
+  'e', 'q', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r',
+  '6', '0', '0', '_', 'g', 'r', 'o', 'u', 'p', '_', 'b', 'a', 'r', 'r', 'i',
+  'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6',
+  '0', '0', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', 'a', 'r', 'g', '_',
+  'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r',
+  '6', '0', '0', '_', 'r', 'a', 't', '_', 's', 't', 'o', 'r', 'e', '_', 't',
+  'y', 'p', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'g', 'l', 'o', 'b', 'a',
+  'l', '_', 's', 'i', 'z', 'e', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'g',
+  'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_', 'y', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e',
+  'a', 'd', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_',
+  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
+  '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u', 'p', 's', '_',
+  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
+  '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u', 'p', 's', '_',
+  'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
+  '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g', 'r', 'o', 'u', 'p', 's', '_',
+  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
+  '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'x', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r',
+  'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'y', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd',
+  '_', 't', 'g', 'i', 'd', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'e', 'f', 'p', 'c', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'x', '_', 'n', 'e', 's', 't',
+  'i', 'n', 'g', '_', 'd', 'e', 'p', 't', 'h', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'l', 'c', 'b', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'x', '_', 'a', 's',
+  's', 'i', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 's', 'f', 'p', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'a', 'c', 'c', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'a', 'c', 'c', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'a', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'a', 'v', 'g', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'g', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v',
+  'g', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'g', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g',
+  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'b', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'c', 'k', 's', 'm',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'e', 'r', 'i', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'e', 'r', 'i', 'm', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'e', 'r', 'l', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e',
+  'r', 'l', 'l', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r',
+  'l', 'l', 'v', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e',
+  'r', 'l', 'l', 'v', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'f', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'f', 'a', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'a', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'f', 'e', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e',
+  'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'f', 'e', 'e', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'z',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'f', 'e', 'n', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'e', 'n', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'z', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'f', 'e', 'n', 'e', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'z',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'g', 'f', 'm', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'g', 'f', 'm', 'a', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'g', 'f', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f',
+  'm', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'g', 'f', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's', 't', 'r', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'i', 's', 't', 'r', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's', 't', 'r', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'l', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'r', 'l', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'm', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 'a', 'e', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'e',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'm', 'a', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'm', 'a', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a',
+  'l', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l',
+  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'm', 'a', 'l', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'h',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'm', 'a', 'l', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'm', 'a', 'l', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'o', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'm', 'a', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 'a', 'o', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'e', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'm', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'e', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'h', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'm', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'm', 'h', 'h', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'e',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'm', 'l', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'e', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'm', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 'l', 'h', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'h',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'm', 'l', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'm', 'l', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'o', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 'm', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'm', 's', 'l', 'g', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'd', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'p', 'k', 'l', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p',
+  'k', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
+  '3', '9', '0', '_', 'v', 'p', 'k', 's', 'g', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 's', 'h',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 's', 'b', 'c', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'b', 'i', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 's', 'c', 'b', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  's', 'c', 'b', 'i', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'h', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
+  'c', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'l', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  's', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'r', 'a', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 'r', 'l', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'r', 'l', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 's', 't', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
+  't', 'r', 'c', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'h', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't',
+  'r', 'c', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
+  't', 'r', 'c', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r', 'l', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u',
+  'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 's', 'u', 'm', 'g', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'g',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 's', 'u', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'q', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
+  'v', 's', 'u', 'm', 'q', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 's', '3', '9', '0', '_', 'v', 't', 'm', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'h',
+  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'u', 'p', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'h', 'h', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
+  'u', 'p', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l',
+  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
+  '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h',
+  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
+  '0', '_', 'v', 'u', 'p', 'l', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'l', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
+  '_', 'v', 'u', 'p', 'l', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'l', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'a', 'v', 'g', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', '2', 'i', 'd', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'f', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'c', 'm',
+  'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'c',
+  'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'a', 'x', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'i',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'f', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c', 'p', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'f', 'r', 'c', 'p', 'i', 't', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c', 'p', 'i', 't',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'f', 'r', 's', 'q', 'i', 't', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 's',
+  'q', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 's', 'u', 'b',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'i', '2', 'f', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'f', '2', 'i', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'n', 'a', 'c', 'c', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'f', 'p', 'n', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'i', '2', 'f', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd',
+  'd', 'c', 'a', 'r', 'r', 'y', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'c',
+  'a', 'r', 'r', 'y', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'c', 'a', 'r',
+  'r', 'y', 'x', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'c', 'a', 'r', 'r',
+  'y', 'x', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's',
+  'd', 'e', 'c', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a',
+  's', 't', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's',
+  't', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', 'l', 'a', 's', 't',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a',
+  'e', 's', 'e', 'n', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'a', 'e', 's', 'e', 'n', 'c', 'l', 'a', 's', 't', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'a', 'e', 's', 'i', 'm', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'k',
+  'e', 'y', 'g', 'e', 'n', 'a', 's', 's', 'i', 's', 't', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd',
+  's', 'u', 'b', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v',
+  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 's', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  'p', 's', '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd',
+  '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd',
+  'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a',
+  'd', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'h', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's',
+  'u', 'b', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd', 'q', 'u', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a',
+  's', 'k', 'l', 'o', 'a', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's',
+  'k', 'l', 'o', 'a', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a',
+  'd', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r',
+  'e', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'a', 'x', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
+  'n', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 's', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 't', 'e', 's', 't', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's',
+  't', 'n', 'z', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'c', 'p', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u',
+  'n', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 's',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', 'p', 's', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
+  'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
+  'e', 's', 't', 'c', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
+  'e', 's', 't', 'c', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't',
+  'n', 'z', 'c', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 's', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 't', 'e', 's', 't', 'z', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z',
+  'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 't', 'e', 's', 't', 'z', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'z', 'e',
+  'r', 'o', 'a', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'z', 'e', 'r', 'o', 'u', 'p', 'p', 'e',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
+  'h', 'e', 'r', 'd', '_', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 'd', '_', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 's',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 's', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 'd', '_', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q',
+  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'd', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
+  'h', 'e', 'r', 'q', '_', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
+  'e', 'r', 'q', '_', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_',
+  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'q', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
+  'a', 's', 'k', 'l', 'o', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o',
+  'a', 'd', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'q', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k',
+  's', 't', 'o', 'r', 'e', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's',
+  't', 'o', 'r', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e',
+  'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'm', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
+  'c', 'k', 's', 's', 'w', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u',
+  's', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'b', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'd', 'd', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's',
+  'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e',
+  'r', 'm', 'v', 'a', 'r', 's', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm',
+  'v', 'a', 'r', 's', 'f', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'h', 'a', 'd', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'h', 's', 'u', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd',
+  'd', 'u', 'b', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'u', 'l', 'h', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u',
+  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'h', 'u', 'f', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n',
+  'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'i', 'g', 'n', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'l', 'l', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
+  'l', 'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 's', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'l', 'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v',
+  '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 'd', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'r', 'a', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '4', 's', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'a', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'l', 'q', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
+  'l', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
+  'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '4', 's', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '2',
+  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'l', 'v', '4', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u',
+  'b', 's', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'u', 'b', 'u', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 'p', 'd', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'a', 'd', 'd', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'b', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o',
+  'a', 'd', 'c', 'a', 's', 't', 'm', 'w', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  's', 'i', '2', 's', 'd', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's',
+  's', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's', 's', '6', '4', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c',
+  'v', 't', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
+  't', 's', 'd', '2', 'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't',
+  's', 'd', '2', 'u', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's',
+  's', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2',
+  's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's',
+  'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's', 'i',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i', '2', 's', 's', '3', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'v', 't', 'u', 's', 'i', '2', 's', 'd', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  'u', 's', 'i', '2', 's', 's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd',
+  'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b', 'w', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b', 'w', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'd', 'i', 'v', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v', 'p', 's', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'e', 'x', 'p', '2', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'e', 'x', 'p', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
+  'h', 'e', 'r', 's', 'i', 'v', '8', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', 's', 'i', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
+  's', 'i', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 's', 'i',
+  'v', '1', '6', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v',
+  '8', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '1', '6',
+  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '8', 'd', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '1', '6', 's', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'g', 'a', 't', 'h', 'e', 'r', '3', 'd', 'i', 'v', '2', 'd', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'a', 't', 'h', 'e', 'r', '3', 'd', 'i', 'v', '2', 'd', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
+  't', 'h', 'e', 'r', '3', 'd', 'i', 'v', '4', 'd', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
+  'h', 'e', 'r', '3', 'd', 'i', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
+  'e', 'r', '3', 'd', 'i', 'v', '4', 's', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
+  'r', '3', 'd', 'i', 'v', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
+  '3', 'd', 'i', 'v', '8', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3',
+  'd', 'i', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's',
+  'i', 'v', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i',
+  'v', '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v',
+  '4', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4',
+  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4', 's',
+  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4', 's', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '8', 's', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '8', 's', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'a', 't', 'h', 'e', 'r', 'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
+  'e', 'r', 'p', 'f', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p',
+  'f', 'q', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'q', 'p',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'a', 'd', 'd', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'd', 'd', 's', 's', '_', 'r', 'o', 'u', 'n', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'm', 'p', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
+  'm', 'p', 'r', 'e', 's', 's', 'q', 'i', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'q', 'i', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'q',
+  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
+  'e', 's', 's', 's', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'i', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'i', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
+  'd', 'f', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p',
+  'r', 'e', 's', 's', 'd', 'f', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd', 'f', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'f', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's',
+  's', 's', 'f', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm',
+  'p', 'r', 'e', 's', 's', 's', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd', 'i', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd', 'i',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e',
+  's', 's', 'd', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
+  'm', 'p', 'r', 'e', 's', 's', 'h', 'i', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'h', 'i', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'h',
+  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n',
+  'f', 'l', 'i', 'c', 't', 's', 'i', '_', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', 'i', '_',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f',
+  'l', 'i', 'c', 't', 's', 'i', '_', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l',
+  'i', 'c', 't', 'd', 'i', '_', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'd', 'q', '2', 'p', 's',
+  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2',
+  'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  'd', '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'p', 'd', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  'p', 'd', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 'd', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'p', 'd', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'q', 'q', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u',
+  'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
+  'd', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd',
+  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
+  '2', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  'p', 's', '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'p', 's', '2', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'q', 'q', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd',
+  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
+  '2', 'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'p', 's', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q',
+  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q',
+  '2', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  'q', 'q', '2', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 'q', 'q', '2', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'q', 'q', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 's', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's',
+  'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 'd', '2', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q',
+  'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  'd', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 'd', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd', 'q', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd',
+  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  'd', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd',
+  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
+  's', '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 't', 'p', 's', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'q', 'q', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd', 'q', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2',
+  'u', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  't', 'p', 's', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's',
+  '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'u', 'd', 'q', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 'd', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 's', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p',
+  's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q',
+  'q', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i',
+  'v', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'd', 'i', 'v', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 's',
+  'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n',
+  'd', 's', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p',
+  'a', 'n', 'd', 's', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e',
+  'x', 'p', 'a', 'n', 'd', 'd', 'f', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'f', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'f', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 's', 'f', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 's', 'f',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd',
+  's', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a',
+  'n', 'd', 'd', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
+  'p', 'a', 'n', 'd', 'd', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'e', 'x', 'p', 'a', 'n', 'd', 'd', 'i', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h', 'i', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h', 'i', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h', 'i', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm',
+  'm', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x',
+  'u', 'p', 'i', 'm', 'm', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i',
+  'm', 'm', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i',
+  'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 'd', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 's', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 's', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 's', 's', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 'd', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 'd', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p',
+  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x',
+  'p', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't',
+  'e', 'x', 'p', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'e', 't', 'e', 'x', 'p', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'g', 'e', 't', 'e', 'x', 'p', 's', 'd', '1', '2', '8', '_', 'r', 'o',
+  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p',
+  's', 's', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 'd', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 'd', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't',
+  'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm',
+  'a', 'n', 't', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
+  'e', 't', 'm', 'a', 'n', 't', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 's', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 's', 'd', '_',
+  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm',
+  'a', 'n', 't', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'a', 'x', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'm', 'a', 'x', 's', 's', '_', 'r', 'o', 'u', 'n', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 'd', '_', 'r', 'o', 'u',
+  'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 's', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 's', 'd',
+  '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l',
+  's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'd', 'd', 's', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'd', 'd', 's', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'd', 'd', 'u', 's', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'a', 'd', 'd', 'u', 's', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'd', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '2', '5', '6', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'b', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
+  'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
+  'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
+  'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '2', '5', '6', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '1', '2', '8', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '2', '5',
+  '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
+  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'q', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '5', '1', '2', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2',
+  '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
+  'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '2', '5', '6', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w', 'b', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'd', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'd', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'd', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'd', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'q', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'q', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'q', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'q', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'q', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'q', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'q', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's',
+  'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  's', 'w', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 's', 'w', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 's', 'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '2', '5', '6', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
+  's', 'd', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'u', 's', 'd', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'u', 's', 'd', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '1', '2', '8', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '2',
+  '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '1', '2', '8', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '5', '1',
+  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w',
+  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'u', 's', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '5', '1', '2', 'm', 'e',
+  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
+  'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'u', 's', 'q', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '2', '5', '6', 'm',
+  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
+  'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'o', 'v', 'u', 's', 'q', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '1', '2', '8',
+  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
+  'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'u', 's', 'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
+  'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
+  's', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '5', '1',
+  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
+  's', 'w', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'u', 's', 'w', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'm', 'o', 'v', 'u', 's', 'w', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '1', '2', '8', 'm', 'e', 'm',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '2',
+  '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
+  'u', 's', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's', 'h', 'i', 'f', 't', 'q', 'b',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l', 't',
+  'i', 's', 'h', 'i', 'f', 't', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's', 'h', 'i', 'f', 't', 'q',
+  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's',
+  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's',
+  'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u',
+  's', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b',
+  'u', 's', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n',
+  'g', 'e', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a',
+  'n', 'g', 'e', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'a', 'n', 'g', 'e', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 'a', 'n', 'g', 'e', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 's', 'd', '1', '2', '8', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e',
+  's', 's', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p',
+  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c',
+  'e', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd',
+  'u', 'c', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'e', 'd', 'u', 'c', 'e', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e',
+  'd', 'u', 'c', 'e', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd',
+  's', 'c', 'a', 'l', 'e', 'p', 'd', '_', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 'd', '_', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e',
+  'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l',
+  'e', 'p', 's', '_', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n',
+  'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 's', 'd', '_',
+  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's',
+  'c', 'a', 'l', 'e', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '2', '5',
+  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd',
+  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f',
+  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l',
+  'e', 'f', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
+  'a', 'l', 'e', 'f', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'c', 'a', 'l', 'e', 'f', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 's', 's', '_', 'r',
+  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 's', 'd',
+  '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b',
+  's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'c', 'v', 't', 'p', 'h', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'c', 'v', 't', 'p', 'h', '2', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2',
+  'p', 'h', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
+  'l', 'd', 'v', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  's', 'h', 'l', 'd', 'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'l', 'd', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '1', '2', '8', '_', 'm',
+  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '2', '5', '6',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v',
+  'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l',
+  'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'l', 'd', 'v', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 's', 'h', 'r', 'd', 'v', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '1', '2',
+  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
+  'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
+  'r', 'd', 'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  's', 'h', 'r', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'r', 'd', 'v', 'w', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 's', 'h', 'u', 'f', 'b', 'i', 't', 'q', 'm', 'b', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'u', 'f', 'b',
+  'i', 't', 'q', 'm', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 's', 'h', 'u', 'f', 'b', 'i', 't', 'q', 'm', 'b', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's',
+  '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
+  'i', 'm', 'm', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '5', '1', '2', '_', 'm',
+  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 'd',
+  '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm',
+  's', 's', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd',
+  'v', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'l', 'd', 'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'l', 'd', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '1', '2', '8', '_',
+  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '2',
+  '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd',
+  'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'l', 'd', 'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '5', '1', '2', '_',
+  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '1',
+  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
+  'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'r', 'd', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '1', '2', '8', '_', 'm', 'a', 's',
+  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '2', '5', '6', '_',
+  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '5',
+  '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
+  'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'r', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'r', 'd', 'v', 'w', '5', '1', '2', '_', 'm', 'a', 's',
+  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x',
+  'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'i', 'n', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 'p', 'd', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'u', 'l', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c',
+  'k', 's', 's', 'd', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's',
+  'w', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e',
+  'r', 'm', 'v', 'a', 'r', 'd', 'f', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm',
+  'v', 'a', 'r', 'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a',
+  'r', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r',
+  'm', 'v', 'a', 'r', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v',
+  'a', 'r', 's', 'f', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r',
+  's', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u',
+  'l', 'h', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'r', 'o', 'l', 'd', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
+  'l', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'l', 'd', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'r', 'o', 'l', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'l', 'q', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'r', 'o', 'l', 'q', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
+  'l', 'v', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'l', 'v', 'd', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'r', 'o', 'l', 'v', 'd', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
+  'l', 'v', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'l', 'v', 'q', '2', '5',
+  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'r', 'o', 'l', 'v', 'q', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
+  'r', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'd', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'r', 'o', 'r', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'q', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'r', 'o', 'r', 'q', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
+  'r', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'd', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'r', 'o', 'r', 'v', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r',
+  'v', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'q', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'r', 'o', 'r', 'v', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r',
+  'v', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'h', 'u', 'f', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'l', 'l', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'l', 'l', 'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '1', '6',
+  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'l', 'l', 'v', '8', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
+  'l', 'v', '8', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '1', '6', 'h', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'l', 'l', 'v', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'a', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'a', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', 'i', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
+  'v', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', 'q', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v',
+  '8', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '1', '6', 'h', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'a', 'v', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'l', 'q', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
+  'l', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
+  'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '1', '6', 's', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v',
+  '8', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '1', '6', 'h', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'l', 'v', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l',
+  'o', 'g', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g',
+  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p',
+  '1', '4', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c',
+  'p', '1', '4', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'c', 'p', '1', '4', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 'c', 'p', '1', '4', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'c', 'p', '1', '4', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
+  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '5', '1', '2', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'c', 'p', '1', '4', 's', 'd', '_', 'm', 'a', 's', 'k',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'c', 'p', '1', '4', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'c', 'p', '2', '8', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p',
+  '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8',
+  's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'c', 'p', '2', '8', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 'd', '1', '2', '8',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 'd',
+  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1',
+  '4', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
+  'r', 't', '1', '4', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'r', 's', 'q', 'r', 't', '1', '4', 'p', 's', '2', '5', '6', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 's', '5', '1', '2',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 's', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 's', 's',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 'p', 'd',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 'p', 's',
+  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 's', 'd',
+  '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
+  'r', 't', '2', '8', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
+  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '8', 'd',
+  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '1', '6', 's',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '8', 'd', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '1', '6', 's', 'f',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '8', 'd', 'f', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '1', '6', 's', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '8', 'd', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '1', '6', 's', 'f', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '2', 'd', 'f', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
+  'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '2', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
+  't', 't', 'e', 'r', 'd', 'i', 'v', '4', 'd', 'f', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't',
+  't', 'e', 'r', 'd', 'i', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't',
+  'e', 'r', 'd', 'i', 'v', '4', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e',
+  'r', 'd', 'i', 'v', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
+  'd', 'i', 'v', '8', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd',
+  'i', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f',
+  'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f', 'd', 'p',
+  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f', 'q', 'p', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f', 'q', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
+  'a', 't', 't', 'e', 'r', 's', 'i', 'v', '2', 'd', 'f', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
+  't', 't', 'e', 'r', 's', 'i', 'v', '2', 'd', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't',
+  't', 'e', 'r', 's', 'i', 'v', '4', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't',
+  'e', 'r', 's', 'i', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e',
+  'r', 's', 'i', 'v', '4', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
+  's', 'i', 'v', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's',
+  'i', 'v', '8', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i',
+  'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 's', 'u', 'b', 'p', 'd', '5', '1', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'u', 'b', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'o', 'm', 'i', 's', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'c', 'o', 'm', 'i', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd',
+  '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 's', 'i',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's', 'i', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's', 'i', '6', '4', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'c', 'v', 't', 's', 's', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
+  's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2',
+  'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's', '2', 'u', 's',
+  'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'd', 'p', 'b', 'u', 's', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b',
+  'u', 's', 'd', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's',
+  'd', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'd', 'p', 'w', 's', 's', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w',
+  's', 's', 'd', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's',
+  'd', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd',
+  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r',
+  'h', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a',
+  'r', 'h', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
+  'a', 'r', 'p', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2',
+  'v', 'a', 'r', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i',
+  '2', 'v', 'a', 'r', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
+  'i', '2', 'v', 'a', 'r', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
+  'm', 'i', '2', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
+  'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 's', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '5', '1', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '5', '1', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 'd', '5', '1',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r', 'p', 's', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '2',
+  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'd', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 's', 'h', 'l', 'd', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l',
+  'd', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'q', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'q', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  's', 'h', 'l', 'd', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd',
+  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'w', '2', '5', '6',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 's', 'h', 'l', 'd', 'w', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'r', 'd', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'd',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'd', '5', '1', '2', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'r', 'd', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
+  'r', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'q', '5',
+  '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'w', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 's', 'h', 'r', 'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r',
+  'd', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', '_', 'u', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'b', 'e', 'x', 't', 'r', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'z', 'h', 'i',
+  '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'b', 'z', 'h', 'i', '_', 'd', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'd', 'e',
+  'p', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'd', 'e', 'p', '_', 'd', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e',
+  'x', 't', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'x', 't', '_', 'd', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
+  'l', 'd', 'e', 'm', 'o', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h',
+  'o', 'p', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'l', 'r', 's', 's', 'b', 's', 'y', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l',
+  'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'l', 'z', 'e', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e', 'c',
+  't', 's', 't', 'o', 'r', 'e', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'r', 'e',
+  'c', 't', 's', 't', 'o', 'r', 'e', '_', 'u', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a',
+  'd', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'a',
+  'd', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'i',
+  't', 'e', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r',
+  'i', 't', 'e', 'e', 'f', 'l', 'a', 'g', 's', '_', 'u', '6', '4', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
+  'x', 'r', 's', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x', 'r', 's', 't', 'o', 'r', '6',
+  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'f', 'x', 's', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x', 's', 'a', 'v', 'e',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'i', 'n', 'c', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 'c', 's',
+  's', 'p', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'i', 'n', 'v', 'p', 'c', 'i', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'l', 'w',
+  'p', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'l', 'w', 'p', 'i', 'n', 's', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w',
+  'p', 'i', 'n', 's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w', 'p', 'v', 'a', 'l', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'l', 'w', 'p', 'v', 'a', 'l', '6', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'm', 'm', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'f', 'e', 'm', 'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'o', 'v', 'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u',
+  's', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'd', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
+  'd', 'd', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd',
+  'd', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
+  'l', 'i', 'g', 'n', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd',
+  'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'c', 'm', 'p', 'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 'q', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'c', 'm', 'p', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'b',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'c', 'm', 'p', 'g', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'e', 'c', '_', 'e', 'x', 't', '_', 'v', '4', 'h', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'e', 'c', '_', 's', 'e', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'a', 'd', 'd', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'x', 's', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'i',
+  'n', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'u', 'l', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
+  'u', 'l', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'o',
+  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'l', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
+  'l', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
+  'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'a', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'r', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'l', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'b', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  's', 'u', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'u', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'b', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n',
+  'p', 'c', 'k', 'h', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'w',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'b', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n',
+  'p', 'c', 'k', 'l', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'w',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'x',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'o', 'v', 'd', 'i', 'r', '6', '4', 'b', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i',
+  't', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '2', '5', '6', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '5', '1', '2', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'w',
+  'r', 'i', 't', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'w', 'r', 'i', 't', 'e', '6',
+  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'd', 'f', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd',
+  'f', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a',
+  's', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e', '6', '4',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'r', 'd', 'p', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'p', 'k', 'r', 'u', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
+  'd', 'p', 'm', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'r', 'd', 's', 's', 'p', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 's',
+  's', 'p', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'd', 't', 's', 'c', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 't', 's', 'c',
+  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 's', 't', 'o', 'r', 's', 's', 'p', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'a', 'v', 'e',
+  'p', 'r', 'e', 'v', 's', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'e', 't', 's', 's', 'b', 's',
+  'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'h', 'a', '1', 'm', 's', 'g', '1', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1',
+  'm', 's', 'g', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'n', 'e', 'x', 't', 'e', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  's', 'h', 'a', '1', 'r', 'n', 'd', 's', '4', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2', '5',
+  '6', 'm', 's', 'g', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2', '5', '6', 'm', 's', 'g',
+  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 's', 'h', 'a', '2', '5', '6', 'r', 'n', 'd', 's', '2', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'l', 'w', 'p', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p', 's', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm',
+  'i', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'g', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i',
+  'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'o', 'm', 'i', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'l',
+  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'o', 'm', 'i', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd',
+  '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'p', 'i', '2', 'p', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 'p', 'i', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'p', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 's', 's', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's',
+  '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'p', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 't', 'p', 's', '2', 'p', 'i', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
+  's', 's', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'a', 'x', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 's', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'm', 'i', 'n', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v',
+  'm', 's', 'k', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c',
+  'p', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'r', 'c', 'p', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't',
+  'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 's', 'q', 'r', 't', 's', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'f', 'e', 'n',
+  'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'e', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm',
+  'i', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'g', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o',
+  'm', 'i', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'l', 't', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c',
+  'o', 'm', 'i', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'm', 'p', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'e', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd',
+  'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'l', 'e', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm',
+  'i', 's', 'd', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'n', 'e', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd',
+  '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
+  't', 's', 'd', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 'i',
+  '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  't', 'p', 'd', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd',
+  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
+  't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'f', 'e', 'n', 'c', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'd', 'q', 'u', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x',
+  'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'm', 'a', 'x', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'f', 'e', 'n', 'c', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'm', 'i', 'n', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o',
+  'v', 'm', 's', 'k', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
+  'd', 'd', 's', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'b', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'a', 'd', 'd', 'u', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'u', 's', 'e',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
+  'v', 'm', 's', 'k', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'w',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'l', 'l', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
+  'l', 'w', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 's', 'r', 'a', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd',
+  'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'r', 'l', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 's', 'r', 'l', 'w', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
+  'l', 'd', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'r', 'l', 'w', 'i', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u',
+  'b', 's', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '1', '2', '8', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'u', 'b', 'u', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's',
+  'd', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u',
+  'c', 'o', 'm', 'i', 's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's',
+  'd', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u',
+  'c', 'o', 'm', 'i', 's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u',
+  'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a',
+  'd', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u',
+  'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd', 'q',
+  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i', 't',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n', 'd',
+  'v', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'd', 'p', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i',
+  'n', 's', 'e', 'r', 't', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'p', 's', 'a',
+  'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'h', 'm', 'i', 'n', 'p', 'o', 's', 'u', 'w', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 't', 'e', 's', 't', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't',
+  'n', 'z', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd',
+  'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 's', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n',
+  'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'h', 'i', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c',
+  '3', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r',
+  'c', '3', '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i',
+  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'a', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'c', '1', '2',
+  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'o', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 's', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'z', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'c', 'm', 'p', 'e', 's', 't', 'r', 'm', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm',
+  'p', 'i', 's', 't', 'r', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i',
+  's', 't', 'r', 'i', 'a', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's',
+  't', 'r', 'i', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't',
+  'r', 'i', 'o', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r',
+  'i', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i',
+  'z', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'm', '1',
+  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'e', 'x', 't', 'r', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 't', 'r', 'q', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'i', 'n', 's', 'e', 'r', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 's', 'e', 'r', 't',
+  'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
+  '3', '2', '_', 'p', 'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
+  'a', 'd', 'd', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a',
+  'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
+  'h', 's', 'u', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '1', '2', '8',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 's',
+  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's',
+  'u', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's',
+  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '1', '2', '8', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
+  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r',
+  's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
+  'h', 'u', 'f', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'p', 's', 'i', 'g', 'n', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '1', '2', '8', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i',
+  'g', 'n', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'w', '1', '2', '8', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
+  'u', 'b', 'b', 'o', 'r', 'r', 'o', 'w', '_', 'u', '3', '2', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u',
+  'b', 'b', 'o', 'r', 'r', 'o', 'w', '_', 'u', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x',
+  't', 'r', 'i', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', 'i', '_',
+  'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 't', 'p', 'a', 'u', 's', 'e', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'm', 'o', 'n',
+  'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'u', 'm', 'w', 'a', 'i', 't', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v',
+  't', 'p', 'h', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p',
+  's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '2', '5', '6', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g',
+  'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q', 'b',
+  '_', 'v', '1', '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f',
+  'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '3', '2', 'q', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n',
+  'v', 'q', 'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p',
+  '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '1', '6', 'q', 'i',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b',
+  '_', 'v', '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f',
+  'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g',
+  'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '1', '6', 'q', 'i', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '3', '2', 'q',
+  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '6',
+  '4', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'w', 'b', 'i', 'n', 'v', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'b', 'n', 'o',
+  'i', 'n', 'v', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e', '3', '2',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g',
+  's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g', 's', 'b', 'a', 's',
+  'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'w', 'r', 'p', 'k', 'r', 'u', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 's', 's',
+  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'w', 'r', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'u', 's', 's', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'w', 'r', 'u', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'x', 'a', 'b', 'o', 'r', 't', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x',
+  'b', 'e', 'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'x', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c',
+  'z', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 'd', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'f', 'r', 'c', 'z', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 's',
+  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 's', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r',
+  'c', 'z', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'b', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c',
+  'o', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o',
+  'm', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'u', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c',
+  'o', 'm', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'u', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'c', 'o', 'm', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd', '2', '5', '6', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
+  'm', 'i', 'l', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd',
+  'd', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b', 'q', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'h', 'a', 'd', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'd', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'b', 'd', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a',
+  'd', 'd', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'b', 'w',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'd', 'q', '\000', '_', '_', 'b', 'u',
+  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a',
+  'd', 'd', 'u', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'w', 'q',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'h', 'a', 'd', 'd', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd',
+  'd', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'b', 'w', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  'h', 's', 'u', 'b', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'w', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c',
+  's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'q', 'l', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'm', 'a', 'c', 's', 's', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c',
+  's', 's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'd', 'q',
+  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
+  '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'w', 'd', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm',
+  'a', 'c', 's', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'w', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'm', 'a', 'c', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd',
+  'c', 's', 's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'c', 's', 'w', 'd',
+  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
+  '_', 'v', 'p', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'r', 'o', 't', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't', 'd', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'r', 'o', 't', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't', 'q', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'r', 'o', 't', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't', 'w', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 'r', 'o', 't', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
+  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'b', '\000',
+  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
+  'v', 'p', 's', 'h', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
+  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'q', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
+  'p', 's', 'h', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
+  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'b', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
+  's', 'h', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
+  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'q', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
+  'h', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
+  'a', '3', '2', '_', 'x', 't', 'e', 's', 't', '\000', '_', '_', 'b', 'u', 'i',
+  'l', 't', 'i', 'n', '_', 'b', 'i', 't', 'r', 'e', 'v', '\000', '_', '_', 'b',
+  'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'i', 'd', '\000', '_', '_',
+  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'p', 's', '\000', '_',
+  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', 'p', 's', '\000',
+ 
+  };
+
+  struct BuiltinEntry {
+    Intrinsic::ID IntrinID;
+    unsigned StrTabOffset;
+    const char *getName() const {
+      return &BuiltinNames[StrTabOffset];
+    }
+    bool operator<(StringRef RHS) const {
+      return strncmp(getName(), RHS.data(), RHS.size()) < 0;
+    }
+  };
+  StringRef TargetPrefix(TargetPrefixStr);
+
+  /* Target Independent Builtins */ {
+    static const BuiltinEntry Names[] = {
+      {Intrinsic::adjust_trampoline, 0}, // __builtin_adjust_trampoline
+      {Intrinsic::debugtrap, 28}, // __builtin_debugtrap
+      {Intrinsic::flt_rounds, 70}, // __builtin_flt_rounds
+      {Intrinsic::init_trampoline, 91}, // __builtin_init_trampoline
+      {Intrinsic::objectsize, 117}, // __builtin_object_size
+      {Intrinsic::stackrestore, 139}, // __builtin_stack_restore
+      {Intrinsic::stacksave, 163}, // __builtin_stack_save
+      {Intrinsic::thread_pointer, 184}, // __builtin_thread_pointer
+      {Intrinsic::trap, 209}, // __builtin_trap
+      {Intrinsic::eh_unwind_init, 48}, // __builtin_unwind_init
+    };
+    auto I = std::lower_bound(std::begin(Names),
+                              std::end(Names),
+                              BuiltinNameStr);
+    if (I != std::end(Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "aarch64") {
+    static const BuiltinEntry aarch64Names[] = {
+      {Intrinsic::aarch64_dmb, 224}, // __builtin_arm_dmb
+      {Intrinsic::aarch64_dsb, 242}, // __builtin_arm_dsb
+      {Intrinsic::aarch64_isb, 260}, // __builtin_arm_isb
+    };
+    auto I = std::lower_bound(std::begin(aarch64Names),
+                              std::end(aarch64Names),
+                              BuiltinNameStr);
+    if (I != std::end(aarch64Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "amdgcn") {
+    static const BuiltinEntry amdgcnNames[] = {
+      {Intrinsic::amdgcn_buffer_wbinvl1, 278}, // __builtin_amdgcn_buffer_wbinvl1
+      {Intrinsic::amdgcn_buffer_wbinvl1_sc, 310}, // __builtin_amdgcn_buffer_wbinvl1_sc
+      {Intrinsic::amdgcn_buffer_wbinvl1_vol, 345}, // __builtin_amdgcn_buffer_wbinvl1_vol
+      {Intrinsic::amdgcn_cubeid, 381}, // __builtin_amdgcn_cubeid
+      {Intrinsic::amdgcn_cubema, 405}, // __builtin_amdgcn_cubema
+      {Intrinsic::amdgcn_cubesc, 429}, // __builtin_amdgcn_cubesc
+      {Intrinsic::amdgcn_cubetc, 453}, // __builtin_amdgcn_cubetc
+      {Intrinsic::amdgcn_cvt_pk_u8_f32, 477}, // __builtin_amdgcn_cvt_pk_u8_f32
+      {Intrinsic::amdgcn_dispatch_id, 508}, // __builtin_amdgcn_dispatch_id
+      {Intrinsic::amdgcn_dispatch_ptr, 537}, // __builtin_amdgcn_dispatch_ptr
+      {Intrinsic::amdgcn_ds_bpermute, 567}, // __builtin_amdgcn_ds_bpermute
+      {Intrinsic::amdgcn_ds_fadd, 596}, // __builtin_amdgcn_ds_faddf
+      {Intrinsic::amdgcn_ds_fmax, 622}, // __builtin_amdgcn_ds_fmaxf
+      {Intrinsic::amdgcn_ds_fmin, 648}, // __builtin_amdgcn_ds_fminf
+      {Intrinsic::amdgcn_ds_permute, 674}, // __builtin_amdgcn_ds_permute
+      {Intrinsic::amdgcn_ds_swizzle, 702}, // __builtin_amdgcn_ds_swizzle
+      {Intrinsic::amdgcn_fdot2, 730}, // __builtin_amdgcn_fdot2
+      {Intrinsic::amdgcn_fmed3, 753}, // __builtin_amdgcn_fmed3
+      {Intrinsic::amdgcn_fmul_legacy, 776}, // __builtin_amdgcn_fmul_legacy
+      {Intrinsic::amdgcn_groupstaticsize, 805}, // __builtin_amdgcn_groupstaticsize
+      {Intrinsic::amdgcn_implicit_buffer_ptr, 838}, // __builtin_amdgcn_implicit_buffer_ptr
+      {Intrinsic::amdgcn_implicitarg_ptr, 875}, // __builtin_amdgcn_implicitarg_ptr
+      {Intrinsic::amdgcn_interp_mov, 908}, // __builtin_amdgcn_interp_mov
+      {Intrinsic::amdgcn_interp_p1, 936}, // __builtin_amdgcn_interp_p1
+      {Intrinsic::amdgcn_interp_p2, 963}, // __builtin_amdgcn_interp_p2
+      {Intrinsic::amdgcn_kernarg_segment_ptr, 990}, // __builtin_amdgcn_kernarg_segment_ptr
+      {Intrinsic::amdgcn_lerp, 1027}, // __builtin_amdgcn_lerp
+      {Intrinsic::amdgcn_mbcnt_hi, 1049}, // __builtin_amdgcn_mbcnt_hi
+      {Intrinsic::amdgcn_mbcnt_lo, 1075}, // __builtin_amdgcn_mbcnt_lo
+      {Intrinsic::amdgcn_mqsad_pk_u16_u8, 1101}, // __builtin_amdgcn_mqsad_pk_u16_u8
+      {Intrinsic::amdgcn_mqsad_u32_u8, 1134}, // __builtin_amdgcn_mqsad_u32_u8
+      {Intrinsic::amdgcn_msad_u8, 1164}, // __builtin_amdgcn_msad_u8
+      {Intrinsic::amdgcn_qsad_pk_u16_u8, 1189}, // __builtin_amdgcn_qsad_pk_u16_u8
+      {Intrinsic::amdgcn_queue_ptr, 1221}, // __builtin_amdgcn_queue_ptr
+      {Intrinsic::amdgcn_rcp_legacy, 1248}, // __builtin_amdgcn_rcp_legacy
+      {Intrinsic::amdgcn_readfirstlane, 1276}, // __builtin_amdgcn_readfirstlane
+      {Intrinsic::amdgcn_readlane, 1307}, // __builtin_amdgcn_readlane
+      {Intrinsic::amdgcn_rsq_legacy, 1333}, // __builtin_amdgcn_rsq_legacy
+      {Intrinsic::amdgcn_s_barrier, 1361}, // __builtin_amdgcn_s_barrier
+      {Intrinsic::amdgcn_s_dcache_inv, 1388}, // __builtin_amdgcn_s_dcache_inv
+      {Intrinsic::amdgcn_s_dcache_inv_vol, 1418}, // __builtin_amdgcn_s_dcache_inv_vol
+      {Intrinsic::amdgcn_s_dcache_wb, 1452}, // __builtin_amdgcn_s_dcache_wb
+      {Intrinsic::amdgcn_s_dcache_wb_vol, 1481}, // __builtin_amdgcn_s_dcache_wb_vol
+      {Intrinsic::amdgcn_s_decperflevel, 1514}, // __builtin_amdgcn_s_decperflevel
+      {Intrinsic::amdgcn_s_getpc, 1546}, // __builtin_amdgcn_s_getpc
+      {Intrinsic::amdgcn_s_getreg, 1571}, // __builtin_amdgcn_s_getreg
+      {Intrinsic::amdgcn_s_incperflevel, 1597}, // __builtin_amdgcn_s_incperflevel
+      {Intrinsic::amdgcn_s_memrealtime, 1629}, // __builtin_amdgcn_s_memrealtime
+      {Intrinsic::amdgcn_s_memtime, 1660}, // __builtin_amdgcn_s_memtime
+      {Intrinsic::amdgcn_s_sendmsg, 1687}, // __builtin_amdgcn_s_sendmsg
+      {Intrinsic::amdgcn_s_sendmsghalt, 1714}, // __builtin_amdgcn_s_sendmsghalt
+      {Intrinsic::amdgcn_s_sleep, 1745}, // __builtin_amdgcn_s_sleep
+      {Intrinsic::amdgcn_s_waitcnt, 1770}, // __builtin_amdgcn_s_waitcnt
+      {Intrinsic::amdgcn_sad_hi_u8, 1797}, // __builtin_amdgcn_sad_hi_u8
+      {Intrinsic::amdgcn_sad_u16, 1824}, // __builtin_amdgcn_sad_u16
+      {Intrinsic::amdgcn_sad_u8, 1849}, // __builtin_amdgcn_sad_u8
+      {Intrinsic::amdgcn_sdot2, 1873}, // __builtin_amdgcn_sdot2
+      {Intrinsic::amdgcn_sdot4, 1896}, // __builtin_amdgcn_sdot4
+      {Intrinsic::amdgcn_sdot8, 1919}, // __builtin_amdgcn_sdot8
+      {Intrinsic::amdgcn_udot2, 1942}, // __builtin_amdgcn_udot2
+      {Intrinsic::amdgcn_udot4, 1965}, // __builtin_amdgcn_udot4
+      {Intrinsic::amdgcn_udot8, 1988}, // __builtin_amdgcn_udot8
+      {Intrinsic::amdgcn_wave_barrier, 2011}, // __builtin_amdgcn_wave_barrier
+      {Intrinsic::amdgcn_workgroup_id_x, 2041}, // __builtin_amdgcn_workgroup_id_x
+      {Intrinsic::amdgcn_workgroup_id_y, 2073}, // __builtin_amdgcn_workgroup_id_y
+      {Intrinsic::amdgcn_workgroup_id_z, 2105}, // __builtin_amdgcn_workgroup_id_z
+      {Intrinsic::amdgcn_writelane, 2137}, // __builtin_amdgcn_writelane
+    };
+    auto I = std::lower_bound(std::begin(amdgcnNames),
+                              std::end(amdgcnNames),
+                              BuiltinNameStr);
+    if (I != std::end(amdgcnNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "arm") {
+    static const BuiltinEntry armNames[] = {
+      {Intrinsic::arm_cdp, 2164}, // __builtin_arm_cdp
+      {Intrinsic::arm_cdp2, 2182}, // __builtin_arm_cdp2
+      {Intrinsic::arm_dmb, 224}, // __builtin_arm_dmb
+      {Intrinsic::arm_dsb, 242}, // __builtin_arm_dsb
+      {Intrinsic::arm_get_fpscr, 2201}, // __builtin_arm_get_fpscr
+      {Intrinsic::arm_isb, 260}, // __builtin_arm_isb
+      {Intrinsic::arm_ldc, 2225}, // __builtin_arm_ldc
+      {Intrinsic::arm_ldc2, 2243}, // __builtin_arm_ldc2
+      {Intrinsic::arm_ldc2l, 2262}, // __builtin_arm_ldc2l
+      {Intrinsic::arm_ldcl, 2282}, // __builtin_arm_ldcl
+      {Intrinsic::arm_mcr, 2301}, // __builtin_arm_mcr
+      {Intrinsic::arm_mcr2, 2319}, // __builtin_arm_mcr2
+      {Intrinsic::arm_mrc, 2338}, // __builtin_arm_mrc
+      {Intrinsic::arm_mrc2, 2356}, // __builtin_arm_mrc2
+      {Intrinsic::arm_qadd, 2375}, // __builtin_arm_qadd
+      {Intrinsic::arm_qadd16, 2394}, // __builtin_arm_qadd16
+      {Intrinsic::arm_qadd8, 2415}, // __builtin_arm_qadd8
+      {Intrinsic::arm_qasx, 2435}, // __builtin_arm_qasx
+      {Intrinsic::arm_qsax, 2454}, // __builtin_arm_qsax
+      {Intrinsic::arm_qsub, 2473}, // __builtin_arm_qsub
+      {Intrinsic::arm_qsub16, 2492}, // __builtin_arm_qsub16
+      {Intrinsic::arm_qsub8, 2513}, // __builtin_arm_qsub8
+      {Intrinsic::arm_sadd16, 2533}, // __builtin_arm_sadd16
+      {Intrinsic::arm_sadd8, 2554}, // __builtin_arm_sadd8
+      {Intrinsic::arm_sasx, 2574}, // __builtin_arm_sasx
+      {Intrinsic::arm_sel, 2593}, // __builtin_arm_sel
+      {Intrinsic::arm_set_fpscr, 2611}, // __builtin_arm_set_fpscr
+      {Intrinsic::arm_shadd16, 2635}, // __builtin_arm_shadd16
+      {Intrinsic::arm_shadd8, 2657}, // __builtin_arm_shadd8
+      {Intrinsic::arm_shasx, 2678}, // __builtin_arm_shasx
+      {Intrinsic::arm_shsax, 2698}, // __builtin_arm_shsax
+      {Intrinsic::arm_shsub16, 2718}, // __builtin_arm_shsub16
+      {Intrinsic::arm_shsub8, 2740}, // __builtin_arm_shsub8
+      {Intrinsic::arm_smlabb, 2761}, // __builtin_arm_smlabb
+      {Intrinsic::arm_smlabt, 2782}, // __builtin_arm_smlabt
+      {Intrinsic::arm_smlad, 2803}, // __builtin_arm_smlad
+      {Intrinsic::arm_smladx, 2823}, // __builtin_arm_smladx
+      {Intrinsic::arm_smlald, 2844}, // __builtin_arm_smlald
+      {Intrinsic::arm_smlaldx, 2865}, // __builtin_arm_smlaldx
+      {Intrinsic::arm_smlatb, 2887}, // __builtin_arm_smlatb
+      {Intrinsic::arm_smlatt, 2908}, // __builtin_arm_smlatt
+      {Intrinsic::arm_smlawb, 2929}, // __builtin_arm_smlawb
+      {Intrinsic::arm_smlawt, 2950}, // __builtin_arm_smlawt
+      {Intrinsic::arm_smlsd, 2971}, // __builtin_arm_smlsd
+      {Intrinsic::arm_smlsdx, 2991}, // __builtin_arm_smlsdx
+      {Intrinsic::arm_smlsld, 3012}, // __builtin_arm_smlsld
+      {Intrinsic::arm_smlsldx, 3033}, // __builtin_arm_smlsldx
+      {Intrinsic::arm_smuad, 3055}, // __builtin_arm_smuad
+      {Intrinsic::arm_smuadx, 3075}, // __builtin_arm_smuadx
+      {Intrinsic::arm_smulbb, 3096}, // __builtin_arm_smulbb
+      {Intrinsic::arm_smulbt, 3117}, // __builtin_arm_smulbt
+      {Intrinsic::arm_smultb, 3138}, // __builtin_arm_smultb
+      {Intrinsic::arm_smultt, 3159}, // __builtin_arm_smultt
+      {Intrinsic::arm_smulwb, 3180}, // __builtin_arm_smulwb
+      {Intrinsic::arm_smulwt, 3201}, // __builtin_arm_smulwt
+      {Intrinsic::arm_smusd, 3222}, // __builtin_arm_smusd
+      {Intrinsic::arm_smusdx, 3242}, // __builtin_arm_smusdx
+      {Intrinsic::arm_ssat, 3263}, // __builtin_arm_ssat
+      {Intrinsic::arm_ssat16, 3282}, // __builtin_arm_ssat16
+      {Intrinsic::arm_ssax, 3303}, // __builtin_arm_ssax
+      {Intrinsic::arm_ssub16, 3322}, // __builtin_arm_ssub16
+      {Intrinsic::arm_ssub8, 3343}, // __builtin_arm_ssub8
+      {Intrinsic::arm_stc, 3363}, // __builtin_arm_stc
+      {Intrinsic::arm_stc2, 3381}, // __builtin_arm_stc2
+      {Intrinsic::arm_stc2l, 3400}, // __builtin_arm_stc2l
+      {Intrinsic::arm_stcl, 3420}, // __builtin_arm_stcl
+      {Intrinsic::arm_sxtab16, 3439}, // __builtin_arm_sxtab16
+      {Intrinsic::arm_sxtb16, 3461}, // __builtin_arm_sxtb16
+      {Intrinsic::arm_uadd16, 3482}, // __builtin_arm_uadd16
+      {Intrinsic::arm_uadd8, 3503}, // __builtin_arm_uadd8
+      {Intrinsic::arm_uasx, 3523}, // __builtin_arm_uasx
+      {Intrinsic::arm_uhadd16, 3542}, // __builtin_arm_uhadd16
+      {Intrinsic::arm_uhadd8, 3564}, // __builtin_arm_uhadd8
+      {Intrinsic::arm_uhasx, 3585}, // __builtin_arm_uhasx
+      {Intrinsic::arm_uhsax, 3605}, // __builtin_arm_uhsax
+      {Intrinsic::arm_uhsub16, 3625}, // __builtin_arm_uhsub16
+      {Intrinsic::arm_uhsub8, 3647}, // __builtin_arm_uhsub8
+      {Intrinsic::arm_uqadd16, 3668}, // __builtin_arm_uqadd16
+      {Intrinsic::arm_uqadd8, 3690}, // __builtin_arm_uqadd8
+      {Intrinsic::arm_uqasx, 3711}, // __builtin_arm_uqasx
+      {Intrinsic::arm_uqsax, 3731}, // __builtin_arm_uqsax
+      {Intrinsic::arm_uqsub16, 3751}, // __builtin_arm_uqsub16
+      {Intrinsic::arm_uqsub8, 3773}, // __builtin_arm_uqsub8
+      {Intrinsic::arm_usad8, 3794}, // __builtin_arm_usad8
+      {Intrinsic::arm_usada8, 3814}, // __builtin_arm_usada8
+      {Intrinsic::arm_usat, 3835}, // __builtin_arm_usat
+      {Intrinsic::arm_usat16, 3854}, // __builtin_arm_usat16
+      {Intrinsic::arm_usax, 3875}, // __builtin_arm_usax
+      {Intrinsic::arm_usub16, 3894}, // __builtin_arm_usub16
+      {Intrinsic::arm_usub8, 3915}, // __builtin_arm_usub8
+      {Intrinsic::arm_uxtab16, 3935}, // __builtin_arm_uxtab16
+      {Intrinsic::arm_uxtb16, 3957}, // __builtin_arm_uxtb16
+    };
+    auto I = std::lower_bound(std::begin(armNames),
+                              std::end(armNames),
+                              BuiltinNameStr);
+    if (I != std::end(armNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "bpf") {
+    static const BuiltinEntry bpfNames[] = {
+      {Intrinsic::bpf_load_byte, 3978}, // __builtin_bpf_load_byte
+      {Intrinsic::bpf_load_half, 4002}, // __builtin_bpf_load_half
+      {Intrinsic::bpf_load_word, 4026}, // __builtin_bpf_load_word
+      {Intrinsic::bpf_pseudo, 4050}, // __builtin_bpf_pseudo
+    };
+    auto I = std::lower_bound(std::begin(bpfNames),
+                              std::end(bpfNames),
+                              BuiltinNameStr);
+    if (I != std::end(bpfNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "hexagon") {
+    static const BuiltinEntry hexagonNames[] = {
+      {Intrinsic::hexagon_A2_abs, 4071}, // __builtin_HEXAGON_A2_abs
+      {Intrinsic::hexagon_A2_absp, 4096}, // __builtin_HEXAGON_A2_absp
+      {Intrinsic::hexagon_A2_abssat, 4122}, // __builtin_HEXAGON_A2_abssat
+      {Intrinsic::hexagon_A2_add, 4150}, // __builtin_HEXAGON_A2_add
+      {Intrinsic::hexagon_A2_addh_h16_hh, 4175}, // __builtin_HEXAGON_A2_addh_h16_hh
+      {Intrinsic::hexagon_A2_addh_h16_hl, 4208}, // __builtin_HEXAGON_A2_addh_h16_hl
+      {Intrinsic::hexagon_A2_addh_h16_lh, 4241}, // __builtin_HEXAGON_A2_addh_h16_lh
+      {Intrinsic::hexagon_A2_addh_h16_ll, 4274}, // __builtin_HEXAGON_A2_addh_h16_ll
+      {Intrinsic::hexagon_A2_addh_h16_sat_hh, 4307}, // __builtin_HEXAGON_A2_addh_h16_sat_hh
+      {Intrinsic::hexagon_A2_addh_h16_sat_hl, 4344}, // __builtin_HEXAGON_A2_addh_h16_sat_hl
+      {Intrinsic::hexagon_A2_addh_h16_sat_lh, 4381}, // __builtin_HEXAGON_A2_addh_h16_sat_lh
+      {Intrinsic::hexagon_A2_addh_h16_sat_ll, 4418}, // __builtin_HEXAGON_A2_addh_h16_sat_ll
+      {Intrinsic::hexagon_A2_addh_l16_hl, 4455}, // __builtin_HEXAGON_A2_addh_l16_hl
+      {Intrinsic::hexagon_A2_addh_l16_ll, 4488}, // __builtin_HEXAGON_A2_addh_l16_ll
+      {Intrinsic::hexagon_A2_addh_l16_sat_hl, 4521}, // __builtin_HEXAGON_A2_addh_l16_sat_hl
+      {Intrinsic::hexagon_A2_addh_l16_sat_ll, 4558}, // __builtin_HEXAGON_A2_addh_l16_sat_ll
+      {Intrinsic::hexagon_A2_addi, 4595}, // __builtin_HEXAGON_A2_addi
+      {Intrinsic::hexagon_A2_addp, 4621}, // __builtin_HEXAGON_A2_addp
+      {Intrinsic::hexagon_A2_addpsat, 4647}, // __builtin_HEXAGON_A2_addpsat
+      {Intrinsic::hexagon_A2_addsat, 4676}, // __builtin_HEXAGON_A2_addsat
+      {Intrinsic::hexagon_A2_addsp, 4704}, // __builtin_HEXAGON_A2_addsp
+      {Intrinsic::hexagon_A2_and, 4731}, // __builtin_HEXAGON_A2_and
+      {Intrinsic::hexagon_A2_andir, 4756}, // __builtin_HEXAGON_A2_andir
+      {Intrinsic::hexagon_A2_andp, 4783}, // __builtin_HEXAGON_A2_andp
+      {Intrinsic::hexagon_A2_aslh, 4809}, // __builtin_HEXAGON_A2_aslh
+      {Intrinsic::hexagon_A2_asrh, 4835}, // __builtin_HEXAGON_A2_asrh
+      {Intrinsic::hexagon_A2_combine_hh, 4861}, // __builtin_HEXAGON_A2_combine_hh
+      {Intrinsic::hexagon_A2_combine_hl, 4893}, // __builtin_HEXAGON_A2_combine_hl
+      {Intrinsic::hexagon_A2_combine_lh, 4925}, // __builtin_HEXAGON_A2_combine_lh
+      {Intrinsic::hexagon_A2_combine_ll, 4957}, // __builtin_HEXAGON_A2_combine_ll
+      {Intrinsic::hexagon_A2_combineii, 4989}, // __builtin_HEXAGON_A2_combineii
+      {Intrinsic::hexagon_A2_combinew, 5020}, // __builtin_HEXAGON_A2_combinew
+      {Intrinsic::hexagon_A2_max, 5050}, // __builtin_HEXAGON_A2_max
+      {Intrinsic::hexagon_A2_maxp, 5075}, // __builtin_HEXAGON_A2_maxp
+      {Intrinsic::hexagon_A2_maxu, 5101}, // __builtin_HEXAGON_A2_maxu
+      {Intrinsic::hexagon_A2_maxup, 5127}, // __builtin_HEXAGON_A2_maxup
+      {Intrinsic::hexagon_A2_min, 5154}, // __builtin_HEXAGON_A2_min
+      {Intrinsic::hexagon_A2_minp, 5179}, // __builtin_HEXAGON_A2_minp
+      {Intrinsic::hexagon_A2_minu, 5205}, // __builtin_HEXAGON_A2_minu
+      {Intrinsic::hexagon_A2_minup, 5231}, // __builtin_HEXAGON_A2_minup
+      {Intrinsic::hexagon_A2_neg, 5258}, // __builtin_HEXAGON_A2_neg
+      {Intrinsic::hexagon_A2_negp, 5283}, // __builtin_HEXAGON_A2_negp
+      {Intrinsic::hexagon_A2_negsat, 5309}, // __builtin_HEXAGON_A2_negsat
+      {Intrinsic::hexagon_A2_not, 5337}, // __builtin_HEXAGON_A2_not
+      {Intrinsic::hexagon_A2_notp, 5362}, // __builtin_HEXAGON_A2_notp
+      {Intrinsic::hexagon_A2_or, 5388}, // __builtin_HEXAGON_A2_or
+      {Intrinsic::hexagon_A2_orir, 5412}, // __builtin_HEXAGON_A2_orir
+      {Intrinsic::hexagon_A2_orp, 5438}, // __builtin_HEXAGON_A2_orp
+      {Intrinsic::hexagon_A2_roundsat, 5463}, // __builtin_HEXAGON_A2_roundsat
+      {Intrinsic::hexagon_A2_sat, 5493}, // __builtin_HEXAGON_A2_sat
+      {Intrinsic::hexagon_A2_satb, 5518}, // __builtin_HEXAGON_A2_satb
+      {Intrinsic::hexagon_A2_sath, 5544}, // __builtin_HEXAGON_A2_sath
+      {Intrinsic::hexagon_A2_satub, 5570}, // __builtin_HEXAGON_A2_satub
+      {Intrinsic::hexagon_A2_satuh, 5597}, // __builtin_HEXAGON_A2_satuh
+      {Intrinsic::hexagon_A2_sub, 5624}, // __builtin_HEXAGON_A2_sub
+      {Intrinsic::hexagon_A2_subh_h16_hh, 5649}, // __builtin_HEXAGON_A2_subh_h16_hh
+      {Intrinsic::hexagon_A2_subh_h16_hl, 5682}, // __builtin_HEXAGON_A2_subh_h16_hl
+      {Intrinsic::hexagon_A2_subh_h16_lh, 5715}, // __builtin_HEXAGON_A2_subh_h16_lh
+      {Intrinsic::hexagon_A2_subh_h16_ll, 5748}, // __builtin_HEXAGON_A2_subh_h16_ll
+      {Intrinsic::hexagon_A2_subh_h16_sat_hh, 5781}, // __builtin_HEXAGON_A2_subh_h16_sat_hh
+      {Intrinsic::hexagon_A2_subh_h16_sat_hl, 5818}, // __builtin_HEXAGON_A2_subh_h16_sat_hl
+      {Intrinsic::hexagon_A2_subh_h16_sat_lh, 5855}, // __builtin_HEXAGON_A2_subh_h16_sat_lh
+      {Intrinsic::hexagon_A2_subh_h16_sat_ll, 5892}, // __builtin_HEXAGON_A2_subh_h16_sat_ll
+      {Intrinsic::hexagon_A2_subh_l16_hl, 5929}, // __builtin_HEXAGON_A2_subh_l16_hl
+      {Intrinsic::hexagon_A2_subh_l16_ll, 5962}, // __builtin_HEXAGON_A2_subh_l16_ll
+      {Intrinsic::hexagon_A2_subh_l16_sat_hl, 5995}, // __builtin_HEXAGON_A2_subh_l16_sat_hl
+      {Intrinsic::hexagon_A2_subh_l16_sat_ll, 6032}, // __builtin_HEXAGON_A2_subh_l16_sat_ll
+      {Intrinsic::hexagon_A2_subp, 6069}, // __builtin_HEXAGON_A2_subp
+      {Intrinsic::hexagon_A2_subri, 6095}, // __builtin_HEXAGON_A2_subri
+      {Intrinsic::hexagon_A2_subsat, 6122}, // __builtin_HEXAGON_A2_subsat
+      {Intrinsic::hexagon_A2_svaddh, 6150}, // __builtin_HEXAGON_A2_svaddh
+      {Intrinsic::hexagon_A2_svaddhs, 6178}, // __builtin_HEXAGON_A2_svaddhs
+      {Intrinsic::hexagon_A2_svadduhs, 6207}, // __builtin_HEXAGON_A2_svadduhs
+      {Intrinsic::hexagon_A2_svavgh, 6237}, // __builtin_HEXAGON_A2_svavgh
+      {Intrinsic::hexagon_A2_svavghs, 6265}, // __builtin_HEXAGON_A2_svavghs
+      {Intrinsic::hexagon_A2_svnavgh, 6294}, // __builtin_HEXAGON_A2_svnavgh
+      {Intrinsic::hexagon_A2_svsubh, 6323}, // __builtin_HEXAGON_A2_svsubh
+      {Intrinsic::hexagon_A2_svsubhs, 6351}, // __builtin_HEXAGON_A2_svsubhs
+      {Intrinsic::hexagon_A2_svsubuhs, 6380}, // __builtin_HEXAGON_A2_svsubuhs
+      {Intrinsic::hexagon_A2_swiz, 6410}, // __builtin_HEXAGON_A2_swiz
+      {Intrinsic::hexagon_A2_sxtb, 6436}, // __builtin_HEXAGON_A2_sxtb
+      {Intrinsic::hexagon_A2_sxth, 6462}, // __builtin_HEXAGON_A2_sxth
+      {Intrinsic::hexagon_A2_sxtw, 6488}, // __builtin_HEXAGON_A2_sxtw
+      {Intrinsic::hexagon_A2_tfr, 6514}, // __builtin_HEXAGON_A2_tfr
+      {Intrinsic::hexagon_A2_tfrih, 6539}, // __builtin_HEXAGON_A2_tfrih
+      {Intrinsic::hexagon_A2_tfril, 6566}, // __builtin_HEXAGON_A2_tfril
+      {Intrinsic::hexagon_A2_tfrp, 6593}, // __builtin_HEXAGON_A2_tfrp
+      {Intrinsic::hexagon_A2_tfrpi, 6619}, // __builtin_HEXAGON_A2_tfrpi
+      {Intrinsic::hexagon_A2_tfrsi, 6646}, // __builtin_HEXAGON_A2_tfrsi
+      {Intrinsic::hexagon_A2_vabsh, 6673}, // __builtin_HEXAGON_A2_vabsh
+      {Intrinsic::hexagon_A2_vabshsat, 6700}, // __builtin_HEXAGON_A2_vabshsat
+      {Intrinsic::hexagon_A2_vabsw, 6730}, // __builtin_HEXAGON_A2_vabsw
+      {Intrinsic::hexagon_A2_vabswsat, 6757}, // __builtin_HEXAGON_A2_vabswsat
+      {Intrinsic::hexagon_A2_vaddb_map, 6787}, // __builtin_HEXAGON_A2_vaddb_map
+      {Intrinsic::hexagon_A2_vaddh, 6818}, // __builtin_HEXAGON_A2_vaddh
+      {Intrinsic::hexagon_A2_vaddhs, 6845}, // __builtin_HEXAGON_A2_vaddhs
+      {Intrinsic::hexagon_A2_vaddub, 6873}, // __builtin_HEXAGON_A2_vaddub
+      {Intrinsic::hexagon_A2_vaddubs, 6901}, // __builtin_HEXAGON_A2_vaddubs
+      {Intrinsic::hexagon_A2_vadduhs, 6930}, // __builtin_HEXAGON_A2_vadduhs
+      {Intrinsic::hexagon_A2_vaddw, 6959}, // __builtin_HEXAGON_A2_vaddw
+      {Intrinsic::hexagon_A2_vaddws, 6986}, // __builtin_HEXAGON_A2_vaddws
+      {Intrinsic::hexagon_A2_vavgh, 7014}, // __builtin_HEXAGON_A2_vavgh
+      {Intrinsic::hexagon_A2_vavghcr, 7041}, // __builtin_HEXAGON_A2_vavghcr
+      {Intrinsic::hexagon_A2_vavghr, 7070}, // __builtin_HEXAGON_A2_vavghr
+      {Intrinsic::hexagon_A2_vavgub, 7098}, // __builtin_HEXAGON_A2_vavgub
+      {Intrinsic::hexagon_A2_vavgubr, 7126}, // __builtin_HEXAGON_A2_vavgubr
+      {Intrinsic::hexagon_A2_vavguh, 7155}, // __builtin_HEXAGON_A2_vavguh
+      {Intrinsic::hexagon_A2_vavguhr, 7183}, // __builtin_HEXAGON_A2_vavguhr
+      {Intrinsic::hexagon_A2_vavguw, 7212}, // __builtin_HEXAGON_A2_vavguw
+      {Intrinsic::hexagon_A2_vavguwr, 7240}, // __builtin_HEXAGON_A2_vavguwr
+      {Intrinsic::hexagon_A2_vavgw, 7269}, // __builtin_HEXAGON_A2_vavgw
+      {Intrinsic::hexagon_A2_vavgwcr, 7296}, // __builtin_HEXAGON_A2_vavgwcr
+      {Intrinsic::hexagon_A2_vavgwr, 7325}, // __builtin_HEXAGON_A2_vavgwr
+      {Intrinsic::hexagon_A2_vcmpbeq, 7353}, // __builtin_HEXAGON_A2_vcmpbeq
+      {Intrinsic::hexagon_A2_vcmpbgtu, 7382}, // __builtin_HEXAGON_A2_vcmpbgtu
+      {Intrinsic::hexagon_A2_vcmpheq, 7412}, // __builtin_HEXAGON_A2_vcmpheq
+      {Intrinsic::hexagon_A2_vcmphgt, 7441}, // __builtin_HEXAGON_A2_vcmphgt
+      {Intrinsic::hexagon_A2_vcmphgtu, 7470}, // __builtin_HEXAGON_A2_vcmphgtu
+      {Intrinsic::hexagon_A2_vcmpweq, 7500}, // __builtin_HEXAGON_A2_vcmpweq
+      {Intrinsic::hexagon_A2_vcmpwgt, 7529}, // __builtin_HEXAGON_A2_vcmpwgt
+      {Intrinsic::hexagon_A2_vcmpwgtu, 7558}, // __builtin_HEXAGON_A2_vcmpwgtu
+      {Intrinsic::hexagon_A2_vconj, 7588}, // __builtin_HEXAGON_A2_vconj
+      {Intrinsic::hexagon_A2_vmaxb, 7615}, // __builtin_HEXAGON_A2_vmaxb
+      {Intrinsic::hexagon_A2_vmaxh, 7642}, // __builtin_HEXAGON_A2_vmaxh
+      {Intrinsic::hexagon_A2_vmaxub, 7669}, // __builtin_HEXAGON_A2_vmaxub
+      {Intrinsic::hexagon_A2_vmaxuh, 7697}, // __builtin_HEXAGON_A2_vmaxuh
+      {Intrinsic::hexagon_A2_vmaxuw, 7725}, // __builtin_HEXAGON_A2_vmaxuw
+      {Intrinsic::hexagon_A2_vmaxw, 7753}, // __builtin_HEXAGON_A2_vmaxw
+      {Intrinsic::hexagon_A2_vminb, 7780}, // __builtin_HEXAGON_A2_vminb
+      {Intrinsic::hexagon_A2_vminh, 7807}, // __builtin_HEXAGON_A2_vminh
+      {Intrinsic::hexagon_A2_vminub, 7834}, // __builtin_HEXAGON_A2_vminub
+      {Intrinsic::hexagon_A2_vminuh, 7862}, // __builtin_HEXAGON_A2_vminuh
+      {Intrinsic::hexagon_A2_vminuw, 7890}, // __builtin_HEXAGON_A2_vminuw
+      {Intrinsic::hexagon_A2_vminw, 7918}, // __builtin_HEXAGON_A2_vminw
+      {Intrinsic::hexagon_A2_vnavgh, 7945}, // __builtin_HEXAGON_A2_vnavgh
+      {Intrinsic::hexagon_A2_vnavghcr, 7973}, // __builtin_HEXAGON_A2_vnavghcr
+      {Intrinsic::hexagon_A2_vnavghr, 8003}, // __builtin_HEXAGON_A2_vnavghr
+      {Intrinsic::hexagon_A2_vnavgw, 8032}, // __builtin_HEXAGON_A2_vnavgw
+      {Intrinsic::hexagon_A2_vnavgwcr, 8060}, // __builtin_HEXAGON_A2_vnavgwcr
+      {Intrinsic::hexagon_A2_vnavgwr, 8090}, // __builtin_HEXAGON_A2_vnavgwr
+      {Intrinsic::hexagon_A2_vraddub, 8119}, // __builtin_HEXAGON_A2_vraddub
+      {Intrinsic::hexagon_A2_vraddub_acc, 8148}, // __builtin_HEXAGON_A2_vraddub_acc
+      {Intrinsic::hexagon_A2_vrsadub, 8181}, // __builtin_HEXAGON_A2_vrsadub
+      {Intrinsic::hexagon_A2_vrsadub_acc, 8210}, // __builtin_HEXAGON_A2_vrsadub_acc
+      {Intrinsic::hexagon_A2_vsubb_map, 8243}, // __builtin_HEXAGON_A2_vsubb_map
+      {Intrinsic::hexagon_A2_vsubh, 8274}, // __builtin_HEXAGON_A2_vsubh
+      {Intrinsic::hexagon_A2_vsubhs, 8301}, // __builtin_HEXAGON_A2_vsubhs
+      {Intrinsic::hexagon_A2_vsubub, 8329}, // __builtin_HEXAGON_A2_vsubub
+      {Intrinsic::hexagon_A2_vsububs, 8357}, // __builtin_HEXAGON_A2_vsububs
+      {Intrinsic::hexagon_A2_vsubuhs, 8386}, // __builtin_HEXAGON_A2_vsubuhs
+      {Intrinsic::hexagon_A2_vsubw, 8415}, // __builtin_HEXAGON_A2_vsubw
+      {Intrinsic::hexagon_A2_vsubws, 8442}, // __builtin_HEXAGON_A2_vsubws
+      {Intrinsic::hexagon_A2_xor, 8470}, // __builtin_HEXAGON_A2_xor
+      {Intrinsic::hexagon_A2_xorp, 8495}, // __builtin_HEXAGON_A2_xorp
+      {Intrinsic::hexagon_A2_zxtb, 8521}, // __builtin_HEXAGON_A2_zxtb
+      {Intrinsic::hexagon_A2_zxth, 8547}, // __builtin_HEXAGON_A2_zxth
+      {Intrinsic::hexagon_A4_andn, 8573}, // __builtin_HEXAGON_A4_andn
+      {Intrinsic::hexagon_A4_andnp, 8599}, // __builtin_HEXAGON_A4_andnp
+      {Intrinsic::hexagon_A4_bitsplit, 8626}, // __builtin_HEXAGON_A4_bitsplit
+      {Intrinsic::hexagon_A4_bitspliti, 8656}, // __builtin_HEXAGON_A4_bitspliti
+      {Intrinsic::hexagon_A4_boundscheck, 8687}, // __builtin_HEXAGON_A4_boundscheck
+      {Intrinsic::hexagon_A4_cmpbeq, 8720}, // __builtin_HEXAGON_A4_cmpbeq
+      {Intrinsic::hexagon_A4_cmpbeqi, 8748}, // __builtin_HEXAGON_A4_cmpbeqi
+      {Intrinsic::hexagon_A4_cmpbgt, 8777}, // __builtin_HEXAGON_A4_cmpbgt
+      {Intrinsic::hexagon_A4_cmpbgti, 8805}, // __builtin_HEXAGON_A4_cmpbgti
+      {Intrinsic::hexagon_A4_cmpbgtu, 8834}, // __builtin_HEXAGON_A4_cmpbgtu
+      {Intrinsic::hexagon_A4_cmpbgtui, 8863}, // __builtin_HEXAGON_A4_cmpbgtui
+      {Intrinsic::hexagon_A4_cmpheq, 8893}, // __builtin_HEXAGON_A4_cmpheq
+      {Intrinsic::hexagon_A4_cmpheqi, 8921}, // __builtin_HEXAGON_A4_cmpheqi
+      {Intrinsic::hexagon_A4_cmphgt, 8950}, // __builtin_HEXAGON_A4_cmphgt
+      {Intrinsic::hexagon_A4_cmphgti, 8978}, // __builtin_HEXAGON_A4_cmphgti
+      {Intrinsic::hexagon_A4_cmphgtu, 9007}, // __builtin_HEXAGON_A4_cmphgtu
+      {Intrinsic::hexagon_A4_cmphgtui, 9036}, // __builtin_HEXAGON_A4_cmphgtui
+      {Intrinsic::hexagon_A4_combineir, 9066}, // __builtin_HEXAGON_A4_combineir
+      {Intrinsic::hexagon_A4_combineri, 9097}, // __builtin_HEXAGON_A4_combineri
+      {Intrinsic::hexagon_A4_cround_ri, 9128}, // __builtin_HEXAGON_A4_cround_ri
+      {Intrinsic::hexagon_A4_cround_rr, 9159}, // __builtin_HEXAGON_A4_cround_rr
+      {Intrinsic::hexagon_A4_modwrapu, 9190}, // __builtin_HEXAGON_A4_modwrapu
+      {Intrinsic::hexagon_A4_orn, 9220}, // __builtin_HEXAGON_A4_orn
+      {Intrinsic::hexagon_A4_ornp, 9245}, // __builtin_HEXAGON_A4_ornp
+      {Intrinsic::hexagon_A4_rcmpeq, 9271}, // __builtin_HEXAGON_A4_rcmpeq
+      {Intrinsic::hexagon_A4_rcmpeqi, 9299}, // __builtin_HEXAGON_A4_rcmpeqi
+      {Intrinsic::hexagon_A4_rcmpneq, 9328}, // __builtin_HEXAGON_A4_rcmpneq
+      {Intrinsic::hexagon_A4_rcmpneqi, 9357}, // __builtin_HEXAGON_A4_rcmpneqi
+      {Intrinsic::hexagon_A4_round_ri, 9387}, // __builtin_HEXAGON_A4_round_ri
+      {Intrinsic::hexagon_A4_round_ri_sat, 9417}, // __builtin_HEXAGON_A4_round_ri_sat
+      {Intrinsic::hexagon_A4_round_rr, 9451}, // __builtin_HEXAGON_A4_round_rr
+      {Intrinsic::hexagon_A4_round_rr_sat, 9481}, // __builtin_HEXAGON_A4_round_rr_sat
+      {Intrinsic::hexagon_A4_tlbmatch, 9515}, // __builtin_HEXAGON_A4_tlbmatch
+      {Intrinsic::hexagon_A4_vcmpbeq_any, 9545}, // __builtin_HEXAGON_A4_vcmpbeq_any
+      {Intrinsic::hexagon_A4_vcmpbeqi, 9578}, // __builtin_HEXAGON_A4_vcmpbeqi
+      {Intrinsic::hexagon_A4_vcmpbgt, 9608}, // __builtin_HEXAGON_A4_vcmpbgt
+      {Intrinsic::hexagon_A4_vcmpbgti, 9637}, // __builtin_HEXAGON_A4_vcmpbgti
+      {Intrinsic::hexagon_A4_vcmpbgtui, 9667}, // __builtin_HEXAGON_A4_vcmpbgtui
+      {Intrinsic::hexagon_A4_vcmpheqi, 9698}, // __builtin_HEXAGON_A4_vcmpheqi
+      {Intrinsic::hexagon_A4_vcmphgti, 9728}, // __builtin_HEXAGON_A4_vcmphgti
+      {Intrinsic::hexagon_A4_vcmphgtui, 9758}, // __builtin_HEXAGON_A4_vcmphgtui
+      {Intrinsic::hexagon_A4_vcmpweqi, 9789}, // __builtin_HEXAGON_A4_vcmpweqi
+      {Intrinsic::hexagon_A4_vcmpwgti, 9819}, // __builtin_HEXAGON_A4_vcmpwgti
+      {Intrinsic::hexagon_A4_vcmpwgtui, 9849}, // __builtin_HEXAGON_A4_vcmpwgtui
+      {Intrinsic::hexagon_A4_vrmaxh, 9880}, // __builtin_HEXAGON_A4_vrmaxh
+      {Intrinsic::hexagon_A4_vrmaxuh, 9908}, // __builtin_HEXAGON_A4_vrmaxuh
+      {Intrinsic::hexagon_A4_vrmaxuw, 9937}, // __builtin_HEXAGON_A4_vrmaxuw
+      {Intrinsic::hexagon_A4_vrmaxw, 9966}, // __builtin_HEXAGON_A4_vrmaxw
+      {Intrinsic::hexagon_A4_vrminh, 9994}, // __builtin_HEXAGON_A4_vrminh
+      {Intrinsic::hexagon_A4_vrminuh, 10022}, // __builtin_HEXAGON_A4_vrminuh
+      {Intrinsic::hexagon_A4_vrminuw, 10051}, // __builtin_HEXAGON_A4_vrminuw
+      {Intrinsic::hexagon_A4_vrminw, 10080}, // __builtin_HEXAGON_A4_vrminw
+      {Intrinsic::hexagon_A5_vaddhubs, 10108}, // __builtin_HEXAGON_A5_vaddhubs
+      {Intrinsic::hexagon_A6_vcmpbeq_notany, 10138}, // __builtin_HEXAGON_A6_vcmpbeq_notany
+      {Intrinsic::hexagon_A6_vcmpbeq_notany_128B, 10174}, // __builtin_HEXAGON_A6_vcmpbeq_notany_128B
+      {Intrinsic::hexagon_C2_all8, 10215}, // __builtin_HEXAGON_C2_all8
+      {Intrinsic::hexagon_C2_and, 10241}, // __builtin_HEXAGON_C2_and
+      {Intrinsic::hexagon_C2_andn, 10266}, // __builtin_HEXAGON_C2_andn
+      {Intrinsic::hexagon_C2_any8, 10292}, // __builtin_HEXAGON_C2_any8
+      {Intrinsic::hexagon_C2_bitsclr, 10318}, // __builtin_HEXAGON_C2_bitsclr
+      {Intrinsic::hexagon_C2_bitsclri, 10347}, // __builtin_HEXAGON_C2_bitsclri
+      {Intrinsic::hexagon_C2_bitsset, 10377}, // __builtin_HEXAGON_C2_bitsset
+      {Intrinsic::hexagon_C2_cmpeq, 10406}, // __builtin_HEXAGON_C2_cmpeq
+      {Intrinsic::hexagon_C2_cmpeqi, 10433}, // __builtin_HEXAGON_C2_cmpeqi
+      {Intrinsic::hexagon_C2_cmpeqp, 10461}, // __builtin_HEXAGON_C2_cmpeqp
+      {Intrinsic::hexagon_C2_cmpgei, 10489}, // __builtin_HEXAGON_C2_cmpgei
+      {Intrinsic::hexagon_C2_cmpgeui, 10517}, // __builtin_HEXAGON_C2_cmpgeui
+      {Intrinsic::hexagon_C2_cmpgt, 10546}, // __builtin_HEXAGON_C2_cmpgt
+      {Intrinsic::hexagon_C2_cmpgti, 10573}, // __builtin_HEXAGON_C2_cmpgti
+      {Intrinsic::hexagon_C2_cmpgtp, 10601}, // __builtin_HEXAGON_C2_cmpgtp
+      {Intrinsic::hexagon_C2_cmpgtu, 10629}, // __builtin_HEXAGON_C2_cmpgtu
+      {Intrinsic::hexagon_C2_cmpgtui, 10657}, // __builtin_HEXAGON_C2_cmpgtui
+      {Intrinsic::hexagon_C2_cmpgtup, 10686}, // __builtin_HEXAGON_C2_cmpgtup
+      {Intrinsic::hexagon_C2_cmplt, 10715}, // __builtin_HEXAGON_C2_cmplt
+      {Intrinsic::hexagon_C2_cmpltu, 10742}, // __builtin_HEXAGON_C2_cmpltu
+      {Intrinsic::hexagon_C2_mask, 10770}, // __builtin_HEXAGON_C2_mask
+      {Intrinsic::hexagon_C2_mux, 10796}, // __builtin_HEXAGON_C2_mux
+      {Intrinsic::hexagon_C2_muxii, 10821}, // __builtin_HEXAGON_C2_muxii
+      {Intrinsic::hexagon_C2_muxir, 10848}, // __builtin_HEXAGON_C2_muxir
+      {Intrinsic::hexagon_C2_muxri, 10875}, // __builtin_HEXAGON_C2_muxri
+      {Intrinsic::hexagon_C2_not, 10902}, // __builtin_HEXAGON_C2_not
+      {Intrinsic::hexagon_C2_or, 10927}, // __builtin_HEXAGON_C2_or
+      {Intrinsic::hexagon_C2_orn, 10951}, // __builtin_HEXAGON_C2_orn
+      {Intrinsic::hexagon_C2_pxfer_map, 10976}, // __builtin_HEXAGON_C2_pxfer_map
+      {Intrinsic::hexagon_C2_tfrpr, 11007}, // __builtin_HEXAGON_C2_tfrpr
+      {Intrinsic::hexagon_C2_tfrrp, 11034}, // __builtin_HEXAGON_C2_tfrrp
+      {Intrinsic::hexagon_C2_vitpack, 11061}, // __builtin_HEXAGON_C2_vitpack
+      {Intrinsic::hexagon_C2_vmux, 11090}, // __builtin_HEXAGON_C2_vmux
+      {Intrinsic::hexagon_C2_xor, 11116}, // __builtin_HEXAGON_C2_xor
+      {Intrinsic::hexagon_C4_and_and, 11141}, // __builtin_HEXAGON_C4_and_and
+      {Intrinsic::hexagon_C4_and_andn, 11170}, // __builtin_HEXAGON_C4_and_andn
+      {Intrinsic::hexagon_C4_and_or, 11200}, // __builtin_HEXAGON_C4_and_or
+      {Intrinsic::hexagon_C4_and_orn, 11228}, // __builtin_HEXAGON_C4_and_orn
+      {Intrinsic::hexagon_C4_cmplte, 11257}, // __builtin_HEXAGON_C4_cmplte
+      {Intrinsic::hexagon_C4_cmpltei, 11285}, // __builtin_HEXAGON_C4_cmpltei
+      {Intrinsic::hexagon_C4_cmplteu, 11314}, // __builtin_HEXAGON_C4_cmplteu
+      {Intrinsic::hexagon_C4_cmplteui, 11343}, // __builtin_HEXAGON_C4_cmplteui
+      {Intrinsic::hexagon_C4_cmpneq, 11373}, // __builtin_HEXAGON_C4_cmpneq
+      {Intrinsic::hexagon_C4_cmpneqi, 11401}, // __builtin_HEXAGON_C4_cmpneqi
+      {Intrinsic::hexagon_C4_fastcorner9, 11430}, // __builtin_HEXAGON_C4_fastcorner9
+      {Intrinsic::hexagon_C4_fastcorner9_not, 11463}, // __builtin_HEXAGON_C4_fastcorner9_not
+      {Intrinsic::hexagon_C4_nbitsclr, 11500}, // __builtin_HEXAGON_C4_nbitsclr
+      {Intrinsic::hexagon_C4_nbitsclri, 11530}, // __builtin_HEXAGON_C4_nbitsclri
+      {Intrinsic::hexagon_C4_nbitsset, 11561}, // __builtin_HEXAGON_C4_nbitsset
+      {Intrinsic::hexagon_C4_or_and, 11591}, // __builtin_HEXAGON_C4_or_and
+      {Intrinsic::hexagon_C4_or_andn, 11619}, // __builtin_HEXAGON_C4_or_andn
+      {Intrinsic::hexagon_C4_or_or, 11648}, // __builtin_HEXAGON_C4_or_or
+      {Intrinsic::hexagon_C4_or_orn, 11675}, // __builtin_HEXAGON_C4_or_orn
+      {Intrinsic::hexagon_F2_conv_d2df, 11703}, // __builtin_HEXAGON_F2_conv_d2df
+      {Intrinsic::hexagon_F2_conv_d2sf, 11734}, // __builtin_HEXAGON_F2_conv_d2sf
+      {Intrinsic::hexagon_F2_conv_df2d, 11765}, // __builtin_HEXAGON_F2_conv_df2d
+      {Intrinsic::hexagon_F2_conv_df2d_chop, 11796}, // __builtin_HEXAGON_F2_conv_df2d_chop
+      {Intrinsic::hexagon_F2_conv_df2sf, 11832}, // __builtin_HEXAGON_F2_conv_df2sf
+      {Intrinsic::hexagon_F2_conv_df2ud, 11864}, // __builtin_HEXAGON_F2_conv_df2ud
+      {Intrinsic::hexagon_F2_conv_df2ud_chop, 11896}, // __builtin_HEXAGON_F2_conv_df2ud_chop
+      {Intrinsic::hexagon_F2_conv_df2uw, 11933}, // __builtin_HEXAGON_F2_conv_df2uw
+      {Intrinsic::hexagon_F2_conv_df2uw_chop, 11965}, // __builtin_HEXAGON_F2_conv_df2uw_chop
+      {Intrinsic::hexagon_F2_conv_df2w, 12002}, // __builtin_HEXAGON_F2_conv_df2w
+      {Intrinsic::hexagon_F2_conv_df2w_chop, 12033}, // __builtin_HEXAGON_F2_conv_df2w_chop
+      {Intrinsic::hexagon_F2_conv_sf2d, 12069}, // __builtin_HEXAGON_F2_conv_sf2d
+      {Intrinsic::hexagon_F2_conv_sf2d_chop, 12100}, // __builtin_HEXAGON_F2_conv_sf2d_chop
+      {Intrinsic::hexagon_F2_conv_sf2df, 12136}, // __builtin_HEXAGON_F2_conv_sf2df
+      {Intrinsic::hexagon_F2_conv_sf2ud, 12168}, // __builtin_HEXAGON_F2_conv_sf2ud
+      {Intrinsic::hexagon_F2_conv_sf2ud_chop, 12200}, // __builtin_HEXAGON_F2_conv_sf2ud_chop
+      {Intrinsic::hexagon_F2_conv_sf2uw, 12237}, // __builtin_HEXAGON_F2_conv_sf2uw
+      {Intrinsic::hexagon_F2_conv_sf2uw_chop, 12269}, // __builtin_HEXAGON_F2_conv_sf2uw_chop
+      {Intrinsic::hexagon_F2_conv_sf2w, 12306}, // __builtin_HEXAGON_F2_conv_sf2w
+      {Intrinsic::hexagon_F2_conv_sf2w_chop, 12337}, // __builtin_HEXAGON_F2_conv_sf2w_chop
+      {Intrinsic::hexagon_F2_conv_ud2df, 12373}, // __builtin_HEXAGON_F2_conv_ud2df
+      {Intrinsic::hexagon_F2_conv_ud2sf, 12405}, // __builtin_HEXAGON_F2_conv_ud2sf
+      {Intrinsic::hexagon_F2_conv_uw2df, 12437}, // __builtin_HEXAGON_F2_conv_uw2df
+      {Intrinsic::hexagon_F2_conv_uw2sf, 12469}, // __builtin_HEXAGON_F2_conv_uw2sf
+      {Intrinsic::hexagon_F2_conv_w2df, 12501}, // __builtin_HEXAGON_F2_conv_w2df
+      {Intrinsic::hexagon_F2_conv_w2sf, 12532}, // __builtin_HEXAGON_F2_conv_w2sf
+      {Intrinsic::hexagon_F2_dfclass, 12563}, // __builtin_HEXAGON_F2_dfclass
+      {Intrinsic::hexagon_F2_dfcmpeq, 12592}, // __builtin_HEXAGON_F2_dfcmpeq
+      {Intrinsic::hexagon_F2_dfcmpge, 12621}, // __builtin_HEXAGON_F2_dfcmpge
+      {Intrinsic::hexagon_F2_dfcmpgt, 12650}, // __builtin_HEXAGON_F2_dfcmpgt
+      {Intrinsic::hexagon_F2_dfcmpuo, 12679}, // __builtin_HEXAGON_F2_dfcmpuo
+      {Intrinsic::hexagon_F2_dfimm_n, 12708}, // __builtin_HEXAGON_F2_dfimm_n
+      {Intrinsic::hexagon_F2_dfimm_p, 12737}, // __builtin_HEXAGON_F2_dfimm_p
+      {Intrinsic::hexagon_F2_sfadd, 12766}, // __builtin_HEXAGON_F2_sfadd
+      {Intrinsic::hexagon_F2_sfclass, 12793}, // __builtin_HEXAGON_F2_sfclass
+      {Intrinsic::hexagon_F2_sfcmpeq, 12822}, // __builtin_HEXAGON_F2_sfcmpeq
+      {Intrinsic::hexagon_F2_sfcmpge, 12851}, // __builtin_HEXAGON_F2_sfcmpge
+      {Intrinsic::hexagon_F2_sfcmpgt, 12880}, // __builtin_HEXAGON_F2_sfcmpgt
+      {Intrinsic::hexagon_F2_sfcmpuo, 12909}, // __builtin_HEXAGON_F2_sfcmpuo
+      {Intrinsic::hexagon_F2_sffixupd, 12938}, // __builtin_HEXAGON_F2_sffixupd
+      {Intrinsic::hexagon_F2_sffixupn, 12968}, // __builtin_HEXAGON_F2_sffixupn
+      {Intrinsic::hexagon_F2_sffixupr, 12998}, // __builtin_HEXAGON_F2_sffixupr
+      {Intrinsic::hexagon_F2_sffma, 13028}, // __builtin_HEXAGON_F2_sffma
+      {Intrinsic::hexagon_F2_sffma_lib, 13055}, // __builtin_HEXAGON_F2_sffma_lib
+      {Intrinsic::hexagon_F2_sffma_sc, 13086}, // __builtin_HEXAGON_F2_sffma_sc
+      {Intrinsic::hexagon_F2_sffms, 13116}, // __builtin_HEXAGON_F2_sffms
+      {Intrinsic::hexagon_F2_sffms_lib, 13143}, // __builtin_HEXAGON_F2_sffms_lib
+      {Intrinsic::hexagon_F2_sfimm_n, 13174}, // __builtin_HEXAGON_F2_sfimm_n
+      {Intrinsic::hexagon_F2_sfimm_p, 13203}, // __builtin_HEXAGON_F2_sfimm_p
+      {Intrinsic::hexagon_F2_sfmax, 13232}, // __builtin_HEXAGON_F2_sfmax
+      {Intrinsic::hexagon_F2_sfmin, 13259}, // __builtin_HEXAGON_F2_sfmin
+      {Intrinsic::hexagon_F2_sfmpy, 13286}, // __builtin_HEXAGON_F2_sfmpy
+      {Intrinsic::hexagon_F2_sfsub, 13313}, // __builtin_HEXAGON_F2_sfsub
+      {Intrinsic::hexagon_L2_loadw_locked, 13340}, // __builtin_HEXAGON_L2_loadw_locked
+      {Intrinsic::hexagon_L4_loadd_locked, 13374}, // __builtin_HEXAGON_L4_loadd_locked
+      {Intrinsic::hexagon_M2_acci, 13408}, // __builtin_HEXAGON_M2_acci
+      {Intrinsic::hexagon_M2_accii, 13434}, // __builtin_HEXAGON_M2_accii
+      {Intrinsic::hexagon_M2_cmaci_s0, 13461}, // __builtin_HEXAGON_M2_cmaci_s0
+      {Intrinsic::hexagon_M2_cmacr_s0, 13491}, // __builtin_HEXAGON_M2_cmacr_s0
+      {Intrinsic::hexagon_M2_cmacs_s0, 13521}, // __builtin_HEXAGON_M2_cmacs_s0
+      {Intrinsic::hexagon_M2_cmacs_s1, 13551}, // __builtin_HEXAGON_M2_cmacs_s1
+      {Intrinsic::hexagon_M2_cmacsc_s0, 13581}, // __builtin_HEXAGON_M2_cmacsc_s0
+      {Intrinsic::hexagon_M2_cmacsc_s1, 13612}, // __builtin_HEXAGON_M2_cmacsc_s1
+      {Intrinsic::hexagon_M2_cmpyi_s0, 13643}, // __builtin_HEXAGON_M2_cmpyi_s0
+      {Intrinsic::hexagon_M2_cmpyr_s0, 13673}, // __builtin_HEXAGON_M2_cmpyr_s0
+      {Intrinsic::hexagon_M2_cmpyrs_s0, 13703}, // __builtin_HEXAGON_M2_cmpyrs_s0
+      {Intrinsic::hexagon_M2_cmpyrs_s1, 13734}, // __builtin_HEXAGON_M2_cmpyrs_s1
+      {Intrinsic::hexagon_M2_cmpyrsc_s0, 13765}, // __builtin_HEXAGON_M2_cmpyrsc_s0
+      {Intrinsic::hexagon_M2_cmpyrsc_s1, 13797}, // __builtin_HEXAGON_M2_cmpyrsc_s1
+      {Intrinsic::hexagon_M2_cmpys_s0, 13829}, // __builtin_HEXAGON_M2_cmpys_s0
+      {Intrinsic::hexagon_M2_cmpys_s1, 13859}, // __builtin_HEXAGON_M2_cmpys_s1
+      {Intrinsic::hexagon_M2_cmpysc_s0, 13889}, // __builtin_HEXAGON_M2_cmpysc_s0
+      {Intrinsic::hexagon_M2_cmpysc_s1, 13920}, // __builtin_HEXAGON_M2_cmpysc_s1
+      {Intrinsic::hexagon_M2_cnacs_s0, 13951}, // __builtin_HEXAGON_M2_cnacs_s0
+      {Intrinsic::hexagon_M2_cnacs_s1, 13981}, // __builtin_HEXAGON_M2_cnacs_s1
+      {Intrinsic::hexagon_M2_cnacsc_s0, 14011}, // __builtin_HEXAGON_M2_cnacsc_s0
+      {Intrinsic::hexagon_M2_cnacsc_s1, 14042}, // __builtin_HEXAGON_M2_cnacsc_s1
+      {Intrinsic::hexagon_M2_dpmpyss_acc_s0, 14073}, // __builtin_HEXAGON_M2_dpmpyss_acc_s0
+      {Intrinsic::hexagon_M2_dpmpyss_nac_s0, 14109}, // __builtin_HEXAGON_M2_dpmpyss_nac_s0
+      {Intrinsic::hexagon_M2_dpmpyss_rnd_s0, 14145}, // __builtin_HEXAGON_M2_dpmpyss_rnd_s0
+      {Intrinsic::hexagon_M2_dpmpyss_s0, 14181}, // __builtin_HEXAGON_M2_dpmpyss_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_acc_s0, 14213}, // __builtin_HEXAGON_M2_dpmpyuu_acc_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_nac_s0, 14249}, // __builtin_HEXAGON_M2_dpmpyuu_nac_s0
+      {Intrinsic::hexagon_M2_dpmpyuu_s0, 14285}, // __builtin_HEXAGON_M2_dpmpyuu_s0
+      {Intrinsic::hexagon_M2_hmmpyh_rs1, 14317}, // __builtin_HEXAGON_M2_hmmpyh_rs1
+      {Intrinsic::hexagon_M2_hmmpyh_s1, 14349}, // __builtin_HEXAGON_M2_hmmpyh_s1
+      {Intrinsic::hexagon_M2_hmmpyl_rs1, 14380}, // __builtin_HEXAGON_M2_hmmpyl_rs1
+      {Intrinsic::hexagon_M2_hmmpyl_s1, 14412}, // __builtin_HEXAGON_M2_hmmpyl_s1
+      {Intrinsic::hexagon_M2_maci, 14443}, // __builtin_HEXAGON_M2_maci
+      {Intrinsic::hexagon_M2_macsin, 14469}, // __builtin_HEXAGON_M2_macsin
+      {Intrinsic::hexagon_M2_macsip, 14497}, // __builtin_HEXAGON_M2_macsip
+      {Intrinsic::hexagon_M2_mmachs_rs0, 14525}, // __builtin_HEXAGON_M2_mmachs_rs0
+      {Intrinsic::hexagon_M2_mmachs_rs1, 14557}, // __builtin_HEXAGON_M2_mmachs_rs1
+      {Intrinsic::hexagon_M2_mmachs_s0, 14589}, // __builtin_HEXAGON_M2_mmachs_s0
+      {Intrinsic::hexagon_M2_mmachs_s1, 14620}, // __builtin_HEXAGON_M2_mmachs_s1
+      {Intrinsic::hexagon_M2_mmacls_rs0, 14651}, // __builtin_HEXAGON_M2_mmacls_rs0
+      {Intrinsic::hexagon_M2_mmacls_rs1, 14683}, // __builtin_HEXAGON_M2_mmacls_rs1
+      {Intrinsic::hexagon_M2_mmacls_s0, 14715}, // __builtin_HEXAGON_M2_mmacls_s0
+      {Intrinsic::hexagon_M2_mmacls_s1, 14746}, // __builtin_HEXAGON_M2_mmacls_s1
+      {Intrinsic::hexagon_M2_mmacuhs_rs0, 14777}, // __builtin_HEXAGON_M2_mmacuhs_rs0
+      {Intrinsic::hexagon_M2_mmacuhs_rs1, 14810}, // __builtin_HEXAGON_M2_mmacuhs_rs1
+      {Intrinsic::hexagon_M2_mmacuhs_s0, 14843}, // __builtin_HEXAGON_M2_mmacuhs_s0
+      {Intrinsic::hexagon_M2_mmacuhs_s1, 14875}, // __builtin_HEXAGON_M2_mmacuhs_s1
+      {Intrinsic::hexagon_M2_mmaculs_rs0, 14907}, // __builtin_HEXAGON_M2_mmaculs_rs0
+      {Intrinsic::hexagon_M2_mmaculs_rs1, 14940}, // __builtin_HEXAGON_M2_mmaculs_rs1
+      {Intrinsic::hexagon_M2_mmaculs_s0, 14973}, // __builtin_HEXAGON_M2_mmaculs_s0
+      {Intrinsic::hexagon_M2_mmaculs_s1, 15005}, // __builtin_HEXAGON_M2_mmaculs_s1
+      {Intrinsic::hexagon_M2_mmpyh_rs0, 15037}, // __builtin_HEXAGON_M2_mmpyh_rs0
+      {Intrinsic::hexagon_M2_mmpyh_rs1, 15068}, // __builtin_HEXAGON_M2_mmpyh_rs1
+      {Intrinsic::hexagon_M2_mmpyh_s0, 15099}, // __builtin_HEXAGON_M2_mmpyh_s0
+      {Intrinsic::hexagon_M2_mmpyh_s1, 15129}, // __builtin_HEXAGON_M2_mmpyh_s1
+      {Intrinsic::hexagon_M2_mmpyl_rs0, 15159}, // __builtin_HEXAGON_M2_mmpyl_rs0
+      {Intrinsic::hexagon_M2_mmpyl_rs1, 15190}, // __builtin_HEXAGON_M2_mmpyl_rs1
+      {Intrinsic::hexagon_M2_mmpyl_s0, 15221}, // __builtin_HEXAGON_M2_mmpyl_s0
+      {Intrinsic::hexagon_M2_mmpyl_s1, 15251}, // __builtin_HEXAGON_M2_mmpyl_s1
+      {Intrinsic::hexagon_M2_mmpyuh_rs0, 15281}, // __builtin_HEXAGON_M2_mmpyuh_rs0
+      {Intrinsic::hexagon_M2_mmpyuh_rs1, 15313}, // __builtin_HEXAGON_M2_mmpyuh_rs1
+      {Intrinsic::hexagon_M2_mmpyuh_s0, 15345}, // __builtin_HEXAGON_M2_mmpyuh_s0
+      {Intrinsic::hexagon_M2_mmpyuh_s1, 15376}, // __builtin_HEXAGON_M2_mmpyuh_s1
+      {Intrinsic::hexagon_M2_mmpyul_rs0, 15407}, // __builtin_HEXAGON_M2_mmpyul_rs0
+      {Intrinsic::hexagon_M2_mmpyul_rs1, 15439}, // __builtin_HEXAGON_M2_mmpyul_rs1
+      {Intrinsic::hexagon_M2_mmpyul_s0, 15471}, // __builtin_HEXAGON_M2_mmpyul_s0
+      {Intrinsic::hexagon_M2_mmpyul_s1, 15502}, // __builtin_HEXAGON_M2_mmpyul_s1
+      {Intrinsic::hexagon_M2_mpy_acc_hh_s0, 15533}, // __builtin_HEXAGON_M2_mpy_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_hh_s1, 15568}, // __builtin_HEXAGON_M2_mpy_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_hl_s0, 15603}, // __builtin_HEXAGON_M2_mpy_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpy_acc_hl_s1, 15638}, // __builtin_HEXAGON_M2_mpy_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpy_acc_lh_s0, 15673}, // __builtin_HEXAGON_M2_mpy_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_lh_s1, 15708}, // __builtin_HEXAGON_M2_mpy_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_ll_s0, 15743}, // __builtin_HEXAGON_M2_mpy_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpy_acc_ll_s1, 15778}, // __builtin_HEXAGON_M2_mpy_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0, 15813}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1, 15852}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0, 15891}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1, 15930}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0, 15969}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1, 16008}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0, 16047}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1, 16086}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_hh_s0, 16125}, // __builtin_HEXAGON_M2_mpy_hh_s0
+      {Intrinsic::hexagon_M2_mpy_hh_s1, 16156}, // __builtin_HEXAGON_M2_mpy_hh_s1
+      {Intrinsic::hexagon_M2_mpy_hl_s0, 16187}, // __builtin_HEXAGON_M2_mpy_hl_s0
+      {Intrinsic::hexagon_M2_mpy_hl_s1, 16218}, // __builtin_HEXAGON_M2_mpy_hl_s1
+      {Intrinsic::hexagon_M2_mpy_lh_s0, 16249}, // __builtin_HEXAGON_M2_mpy_lh_s0
+      {Intrinsic::hexagon_M2_mpy_lh_s1, 16280}, // __builtin_HEXAGON_M2_mpy_lh_s1
+      {Intrinsic::hexagon_M2_mpy_ll_s0, 16311}, // __builtin_HEXAGON_M2_mpy_ll_s0
+      {Intrinsic::hexagon_M2_mpy_ll_s1, 16342}, // __builtin_HEXAGON_M2_mpy_ll_s1
+      {Intrinsic::hexagon_M2_mpy_nac_hh_s0, 16373}, // __builtin_HEXAGON_M2_mpy_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_hh_s1, 16408}, // __builtin_HEXAGON_M2_mpy_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_hl_s0, 16443}, // __builtin_HEXAGON_M2_mpy_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpy_nac_hl_s1, 16478}, // __builtin_HEXAGON_M2_mpy_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpy_nac_lh_s0, 16513}, // __builtin_HEXAGON_M2_mpy_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_lh_s1, 16548}, // __builtin_HEXAGON_M2_mpy_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_ll_s0, 16583}, // __builtin_HEXAGON_M2_mpy_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpy_nac_ll_s1, 16618}, // __builtin_HEXAGON_M2_mpy_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0, 16653}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1, 16692}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0, 16731}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1, 16770}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0, 16809}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1, 16848}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0, 16887}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1, 16926}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_hh_s0, 16965}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_hh_s1, 17000}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_hl_s0, 17035}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_hl_s1, 17070}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_lh_s0, 17105}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_lh_s1, 17140}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpy_rnd_ll_s0, 17175}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpy_rnd_ll_s1, 17210}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpy_sat_hh_s0, 17245}, // __builtin_HEXAGON_M2_mpy_sat_hh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_hh_s1, 17280}, // __builtin_HEXAGON_M2_mpy_sat_hh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_hl_s0, 17315}, // __builtin_HEXAGON_M2_mpy_sat_hl_s0
+      {Intrinsic::hexagon_M2_mpy_sat_hl_s1, 17350}, // __builtin_HEXAGON_M2_mpy_sat_hl_s1
+      {Intrinsic::hexagon_M2_mpy_sat_lh_s0, 17385}, // __builtin_HEXAGON_M2_mpy_sat_lh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_lh_s1, 17420}, // __builtin_HEXAGON_M2_mpy_sat_lh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_ll_s0, 17455}, // __builtin_HEXAGON_M2_mpy_sat_ll_s0
+      {Intrinsic::hexagon_M2_mpy_sat_ll_s1, 17490}, // __builtin_HEXAGON_M2_mpy_sat_ll_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0, 17525}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1, 17564}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0, 17603}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1, 17642}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0, 17681}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1, 17720}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0, 17759}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1, 17798}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpy_up, 17837}, // __builtin_HEXAGON_M2_mpy_up
+      {Intrinsic::hexagon_M2_mpy_up_s1, 17865}, // __builtin_HEXAGON_M2_mpy_up_s1
+      {Intrinsic::hexagon_M2_mpy_up_s1_sat, 17896}, // __builtin_HEXAGON_M2_mpy_up_s1_sat
+      {Intrinsic::hexagon_M2_mpyd_acc_hh_s0, 17931}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_hh_s1, 17967}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_hl_s0, 18003}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_hl_s1, 18039}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_lh_s0, 18075}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_lh_s1, 18111}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_acc_ll_s0, 18147}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_acc_ll_s1, 18183}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_hh_s0, 18219}, // __builtin_HEXAGON_M2_mpyd_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_hh_s1, 18251}, // __builtin_HEXAGON_M2_mpyd_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_hl_s0, 18283}, // __builtin_HEXAGON_M2_mpyd_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_hl_s1, 18315}, // __builtin_HEXAGON_M2_mpyd_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_lh_s0, 18347}, // __builtin_HEXAGON_M2_mpyd_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_lh_s1, 18379}, // __builtin_HEXAGON_M2_mpyd_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_ll_s0, 18411}, // __builtin_HEXAGON_M2_mpyd_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_ll_s1, 18443}, // __builtin_HEXAGON_M2_mpyd_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_hh_s0, 18475}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_hh_s1, 18511}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_hl_s0, 18547}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_hl_s1, 18583}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_lh_s0, 18619}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_lh_s1, 18655}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_nac_ll_s0, 18691}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_nac_ll_s1, 18727}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s0, 18763}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s1, 18799}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s0, 18835}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s1, 18871}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s0, 18907}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s1, 18943}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s1
+      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s0, 18979}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s0
+      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s1, 19015}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s1
+      {Intrinsic::hexagon_M2_mpyi, 19051}, // __builtin_HEXAGON_M2_mpyi
+      {Intrinsic::hexagon_M2_mpysmi, 19077}, // __builtin_HEXAGON_M2_mpysmi
+      {Intrinsic::hexagon_M2_mpysu_up, 19105}, // __builtin_HEXAGON_M2_mpysu_up
+      {Intrinsic::hexagon_M2_mpyu_acc_hh_s0, 19135}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_hh_s1, 19171}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_hl_s0, 19207}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_hl_s1, 19243}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_lh_s0, 19279}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_lh_s1, 19315}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_acc_ll_s0, 19351}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_acc_ll_s1, 19387}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_hh_s0, 19423}, // __builtin_HEXAGON_M2_mpyu_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_hh_s1, 19455}, // __builtin_HEXAGON_M2_mpyu_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_hl_s0, 19487}, // __builtin_HEXAGON_M2_mpyu_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_hl_s1, 19519}, // __builtin_HEXAGON_M2_mpyu_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_lh_s0, 19551}, // __builtin_HEXAGON_M2_mpyu_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_lh_s1, 19583}, // __builtin_HEXAGON_M2_mpyu_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_ll_s0, 19615}, // __builtin_HEXAGON_M2_mpyu_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_ll_s1, 19647}, // __builtin_HEXAGON_M2_mpyu_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_hh_s0, 19679}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_hh_s1, 19715}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_hl_s0, 19751}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_hl_s1, 19787}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_lh_s0, 19823}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_lh_s1, 19859}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyu_nac_ll_s0, 19895}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyu_nac_ll_s1, 19931}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyu_up, 19967}, // __builtin_HEXAGON_M2_mpyu_up
+      {Intrinsic::hexagon_M2_mpyud_acc_hh_s0, 19996}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_hh_s1, 20033}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_hl_s0, 20070}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_hl_s1, 20107}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_lh_s0, 20144}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_lh_s1, 20181}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_acc_ll_s0, 20218}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_acc_ll_s1, 20255}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s1
+      {Intrinsic::hexagon_M2_mpyud_hh_s0, 20292}, // __builtin_HEXAGON_M2_mpyud_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_hh_s1, 20325}, // __builtin_HEXAGON_M2_mpyud_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_hl_s0, 20358}, // __builtin_HEXAGON_M2_mpyud_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_hl_s1, 20391}, // __builtin_HEXAGON_M2_mpyud_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_lh_s0, 20424}, // __builtin_HEXAGON_M2_mpyud_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_lh_s1, 20457}, // __builtin_HEXAGON_M2_mpyud_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_ll_s0, 20490}, // __builtin_HEXAGON_M2_mpyud_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_ll_s1, 20523}, // __builtin_HEXAGON_M2_mpyud_ll_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_hh_s0, 20556}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_hh_s1, 20593}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_hl_s0, 20630}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_hl_s1, 20667}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_lh_s0, 20704}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_lh_s1, 20741}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s1
+      {Intrinsic::hexagon_M2_mpyud_nac_ll_s0, 20778}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s0
+      {Intrinsic::hexagon_M2_mpyud_nac_ll_s1, 20815}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s1
+      {Intrinsic::hexagon_M2_mpyui, 20852}, // __builtin_HEXAGON_M2_mpyui
+      {Intrinsic::hexagon_M2_nacci, 20879}, // __builtin_HEXAGON_M2_nacci
+      {Intrinsic::hexagon_M2_naccii, 20906}, // __builtin_HEXAGON_M2_naccii
+      {Intrinsic::hexagon_M2_subacc, 20934}, // __builtin_HEXAGON_M2_subacc
+      {Intrinsic::hexagon_M2_vabsdiffh, 20962}, // __builtin_HEXAGON_M2_vabsdiffh
+      {Intrinsic::hexagon_M2_vabsdiffw, 20993}, // __builtin_HEXAGON_M2_vabsdiffw
+      {Intrinsic::hexagon_M2_vcmac_s0_sat_i, 21024}, // __builtin_HEXAGON_M2_vcmac_s0_sat_i
+      {Intrinsic::hexagon_M2_vcmac_s0_sat_r, 21060}, // __builtin_HEXAGON_M2_vcmac_s0_sat_r
+      {Intrinsic::hexagon_M2_vcmpy_s0_sat_i, 21096}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_i
+      {Intrinsic::hexagon_M2_vcmpy_s0_sat_r, 21132}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_r
+      {Intrinsic::hexagon_M2_vcmpy_s1_sat_i, 21168}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_i
+      {Intrinsic::hexagon_M2_vcmpy_s1_sat_r, 21204}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_r
+      {Intrinsic::hexagon_M2_vdmacs_s0, 21240}, // __builtin_HEXAGON_M2_vdmacs_s0
+      {Intrinsic::hexagon_M2_vdmacs_s1, 21271}, // __builtin_HEXAGON_M2_vdmacs_s1
+      {Intrinsic::hexagon_M2_vdmpyrs_s0, 21302}, // __builtin_HEXAGON_M2_vdmpyrs_s0
+      {Intrinsic::hexagon_M2_vdmpyrs_s1, 21334}, // __builtin_HEXAGON_M2_vdmpyrs_s1
+      {Intrinsic::hexagon_M2_vdmpys_s0, 21366}, // __builtin_HEXAGON_M2_vdmpys_s0
+      {Intrinsic::hexagon_M2_vdmpys_s1, 21397}, // __builtin_HEXAGON_M2_vdmpys_s1
+      {Intrinsic::hexagon_M2_vmac2, 21428}, // __builtin_HEXAGON_M2_vmac2
+      {Intrinsic::hexagon_M2_vmac2es, 21455}, // __builtin_HEXAGON_M2_vmac2es
+      {Intrinsic::hexagon_M2_vmac2es_s0, 21484}, // __builtin_HEXAGON_M2_vmac2es_s0
+      {Intrinsic::hexagon_M2_vmac2es_s1, 21516}, // __builtin_HEXAGON_M2_vmac2es_s1
+      {Intrinsic::hexagon_M2_vmac2s_s0, 21548}, // __builtin_HEXAGON_M2_vmac2s_s0
+      {Intrinsic::hexagon_M2_vmac2s_s1, 21579}, // __builtin_HEXAGON_M2_vmac2s_s1
+      {Intrinsic::hexagon_M2_vmac2su_s0, 21610}, // __builtin_HEXAGON_M2_vmac2su_s0
+      {Intrinsic::hexagon_M2_vmac2su_s1, 21642}, // __builtin_HEXAGON_M2_vmac2su_s1
+      {Intrinsic::hexagon_M2_vmpy2es_s0, 21674}, // __builtin_HEXAGON_M2_vmpy2es_s0
+      {Intrinsic::hexagon_M2_vmpy2es_s1, 21706}, // __builtin_HEXAGON_M2_vmpy2es_s1
+      {Intrinsic::hexagon_M2_vmpy2s_s0, 21738}, // __builtin_HEXAGON_M2_vmpy2s_s0
+      {Intrinsic::hexagon_M2_vmpy2s_s0pack, 21769}, // __builtin_HEXAGON_M2_vmpy2s_s0pack
+      {Intrinsic::hexagon_M2_vmpy2s_s1, 21804}, // __builtin_HEXAGON_M2_vmpy2s_s1
+      {Intrinsic::hexagon_M2_vmpy2s_s1pack, 21835}, // __builtin_HEXAGON_M2_vmpy2s_s1pack
+      {Intrinsic::hexagon_M2_vmpy2su_s0, 21870}, // __builtin_HEXAGON_M2_vmpy2su_s0
+      {Intrinsic::hexagon_M2_vmpy2su_s1, 21902}, // __builtin_HEXAGON_M2_vmpy2su_s1
+      {Intrinsic::hexagon_M2_vraddh, 21934}, // __builtin_HEXAGON_M2_vraddh
+      {Intrinsic::hexagon_M2_vradduh, 21962}, // __builtin_HEXAGON_M2_vradduh
+      {Intrinsic::hexagon_M2_vrcmaci_s0, 21991}, // __builtin_HEXAGON_M2_vrcmaci_s0
+      {Intrinsic::hexagon_M2_vrcmaci_s0c, 22023}, // __builtin_HEXAGON_M2_vrcmaci_s0c
+      {Intrinsic::hexagon_M2_vrcmacr_s0, 22056}, // __builtin_HEXAGON_M2_vrcmacr_s0
+      {Intrinsic::hexagon_M2_vrcmacr_s0c, 22088}, // __builtin_HEXAGON_M2_vrcmacr_s0c
+      {Intrinsic::hexagon_M2_vrcmpyi_s0, 22121}, // __builtin_HEXAGON_M2_vrcmpyi_s0
+      {Intrinsic::hexagon_M2_vrcmpyi_s0c, 22153}, // __builtin_HEXAGON_M2_vrcmpyi_s0c
+      {Intrinsic::hexagon_M2_vrcmpyr_s0, 22186}, // __builtin_HEXAGON_M2_vrcmpyr_s0
+      {Intrinsic::hexagon_M2_vrcmpyr_s0c, 22218}, // __builtin_HEXAGON_M2_vrcmpyr_s0c
+      {Intrinsic::hexagon_M2_vrcmpys_acc_s1, 22251}, // __builtin_HEXAGON_M2_vrcmpys_acc_s1
+      {Intrinsic::hexagon_M2_vrcmpys_s1, 22287}, // __builtin_HEXAGON_M2_vrcmpys_s1
+      {Intrinsic::hexagon_M2_vrcmpys_s1rp, 22319}, // __builtin_HEXAGON_M2_vrcmpys_s1rp
+      {Intrinsic::hexagon_M2_vrmac_s0, 22353}, // __builtin_HEXAGON_M2_vrmac_s0
+      {Intrinsic::hexagon_M2_vrmpy_s0, 22383}, // __builtin_HEXAGON_M2_vrmpy_s0
+      {Intrinsic::hexagon_M2_xor_xacc, 22413}, // __builtin_HEXAGON_M2_xor_xacc
+      {Intrinsic::hexagon_M4_and_and, 22443}, // __builtin_HEXAGON_M4_and_and
+      {Intrinsic::hexagon_M4_and_andn, 22472}, // __builtin_HEXAGON_M4_and_andn
+      {Intrinsic::hexagon_M4_and_or, 22502}, // __builtin_HEXAGON_M4_and_or
+      {Intrinsic::hexagon_M4_and_xor, 22530}, // __builtin_HEXAGON_M4_and_xor
+      {Intrinsic::hexagon_M4_cmpyi_wh, 22559}, // __builtin_HEXAGON_M4_cmpyi_wh
+      {Intrinsic::hexagon_M4_cmpyi_whc, 22589}, // __builtin_HEXAGON_M4_cmpyi_whc
+      {Intrinsic::hexagon_M4_cmpyr_wh, 22620}, // __builtin_HEXAGON_M4_cmpyr_wh
+      {Intrinsic::hexagon_M4_cmpyr_whc, 22650}, // __builtin_HEXAGON_M4_cmpyr_whc
+      {Intrinsic::hexagon_M4_mac_up_s1_sat, 22681}, // __builtin_HEXAGON_M4_mac_up_s1_sat
+      {Intrinsic::hexagon_M4_mpyri_addi, 22716}, // __builtin_HEXAGON_M4_mpyri_addi
+      {Intrinsic::hexagon_M4_mpyri_addr, 22748}, // __builtin_HEXAGON_M4_mpyri_addr
+      {Intrinsic::hexagon_M4_mpyri_addr_u2, 22780}, // __builtin_HEXAGON_M4_mpyri_addr_u2
+      {Intrinsic::hexagon_M4_mpyrr_addi, 22815}, // __builtin_HEXAGON_M4_mpyrr_addi
+      {Intrinsic::hexagon_M4_mpyrr_addr, 22847}, // __builtin_HEXAGON_M4_mpyrr_addr
+      {Intrinsic::hexagon_M4_nac_up_s1_sat, 22879}, // __builtin_HEXAGON_M4_nac_up_s1_sat
+      {Intrinsic::hexagon_M4_or_and, 22914}, // __builtin_HEXAGON_M4_or_and
+      {Intrinsic::hexagon_M4_or_andn, 22942}, // __builtin_HEXAGON_M4_or_andn
+      {Intrinsic::hexagon_M4_or_or, 22971}, // __builtin_HEXAGON_M4_or_or
+      {Intrinsic::hexagon_M4_or_xor, 22998}, // __builtin_HEXAGON_M4_or_xor
+      {Intrinsic::hexagon_M4_pmpyw, 23026}, // __builtin_HEXAGON_M4_pmpyw
+      {Intrinsic::hexagon_M4_pmpyw_acc, 23053}, // __builtin_HEXAGON_M4_pmpyw_acc
+      {Intrinsic::hexagon_M4_vpmpyh, 23084}, // __builtin_HEXAGON_M4_vpmpyh
+      {Intrinsic::hexagon_M4_vpmpyh_acc, 23112}, // __builtin_HEXAGON_M4_vpmpyh_acc
+      {Intrinsic::hexagon_M4_vrmpyeh_acc_s0, 23144}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s0
+      {Intrinsic::hexagon_M4_vrmpyeh_acc_s1, 23180}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s1
+      {Intrinsic::hexagon_M4_vrmpyeh_s0, 23216}, // __builtin_HEXAGON_M4_vrmpyeh_s0
+      {Intrinsic::hexagon_M4_vrmpyeh_s1, 23248}, // __builtin_HEXAGON_M4_vrmpyeh_s1
+      {Intrinsic::hexagon_M4_vrmpyoh_acc_s0, 23280}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s0
+      {Intrinsic::hexagon_M4_vrmpyoh_acc_s1, 23316}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s1
+      {Intrinsic::hexagon_M4_vrmpyoh_s0, 23352}, // __builtin_HEXAGON_M4_vrmpyoh_s0
+      {Intrinsic::hexagon_M4_vrmpyoh_s1, 23384}, // __builtin_HEXAGON_M4_vrmpyoh_s1
+      {Intrinsic::hexagon_M4_xor_and, 23416}, // __builtin_HEXAGON_M4_xor_and
+      {Intrinsic::hexagon_M4_xor_andn, 23445}, // __builtin_HEXAGON_M4_xor_andn
+      {Intrinsic::hexagon_M4_xor_or, 23475}, // __builtin_HEXAGON_M4_xor_or
+      {Intrinsic::hexagon_M4_xor_xacc, 23503}, // __builtin_HEXAGON_M4_xor_xacc
+      {Intrinsic::hexagon_M5_vdmacbsu, 23533}, // __builtin_HEXAGON_M5_vdmacbsu
+      {Intrinsic::hexagon_M5_vdmpybsu, 23563}, // __builtin_HEXAGON_M5_vdmpybsu
+      {Intrinsic::hexagon_M5_vmacbsu, 23593}, // __builtin_HEXAGON_M5_vmacbsu
+      {Intrinsic::hexagon_M5_vmacbuu, 23622}, // __builtin_HEXAGON_M5_vmacbuu
+      {Intrinsic::hexagon_M5_vmpybsu, 23651}, // __builtin_HEXAGON_M5_vmpybsu
+      {Intrinsic::hexagon_M5_vmpybuu, 23680}, // __builtin_HEXAGON_M5_vmpybuu
+      {Intrinsic::hexagon_M5_vrmacbsu, 23709}, // __builtin_HEXAGON_M5_vrmacbsu
+      {Intrinsic::hexagon_M5_vrmacbuu, 23739}, // __builtin_HEXAGON_M5_vrmacbuu
+      {Intrinsic::hexagon_M5_vrmpybsu, 23769}, // __builtin_HEXAGON_M5_vrmpybsu
+      {Intrinsic::hexagon_M5_vrmpybuu, 23799}, // __builtin_HEXAGON_M5_vrmpybuu
+      {Intrinsic::hexagon_M6_vabsdiffb, 23829}, // __builtin_HEXAGON_M6_vabsdiffb
+      {Intrinsic::hexagon_M6_vabsdiffub, 23860}, // __builtin_HEXAGON_M6_vabsdiffub
+      {Intrinsic::hexagon_S2_addasl_rrri, 23892}, // __builtin_HEXAGON_S2_addasl_rrri
+      {Intrinsic::hexagon_S2_asl_i_p, 23925}, // __builtin_HEXAGON_S2_asl_i_p
+      {Intrinsic::hexagon_S2_asl_i_p_acc, 23954}, // __builtin_HEXAGON_S2_asl_i_p_acc
+      {Intrinsic::hexagon_S2_asl_i_p_and, 23987}, // __builtin_HEXAGON_S2_asl_i_p_and
+      {Intrinsic::hexagon_S2_asl_i_p_nac, 24020}, // __builtin_HEXAGON_S2_asl_i_p_nac
+      {Intrinsic::hexagon_S2_asl_i_p_or, 24053}, // __builtin_HEXAGON_S2_asl_i_p_or
+      {Intrinsic::hexagon_S2_asl_i_p_xacc, 24085}, // __builtin_HEXAGON_S2_asl_i_p_xacc
+      {Intrinsic::hexagon_S2_asl_i_r, 24119}, // __builtin_HEXAGON_S2_asl_i_r
+      {Intrinsic::hexagon_S2_asl_i_r_acc, 24148}, // __builtin_HEXAGON_S2_asl_i_r_acc
+      {Intrinsic::hexagon_S2_asl_i_r_and, 24181}, // __builtin_HEXAGON_S2_asl_i_r_and
+      {Intrinsic::hexagon_S2_asl_i_r_nac, 24214}, // __builtin_HEXAGON_S2_asl_i_r_nac
+      {Intrinsic::hexagon_S2_asl_i_r_or, 24247}, // __builtin_HEXAGON_S2_asl_i_r_or
+      {Intrinsic::hexagon_S2_asl_i_r_sat, 24279}, // __builtin_HEXAGON_S2_asl_i_r_sat
+      {Intrinsic::hexagon_S2_asl_i_r_xacc, 24312}, // __builtin_HEXAGON_S2_asl_i_r_xacc
+      {Intrinsic::hexagon_S2_asl_i_vh, 24346}, // __builtin_HEXAGON_S2_asl_i_vh
+      {Intrinsic::hexagon_S2_asl_i_vw, 24376}, // __builtin_HEXAGON_S2_asl_i_vw
+      {Intrinsic::hexagon_S2_asl_r_p, 24406}, // __builtin_HEXAGON_S2_asl_r_p
+      {Intrinsic::hexagon_S2_asl_r_p_acc, 24435}, // __builtin_HEXAGON_S2_asl_r_p_acc
+      {Intrinsic::hexagon_S2_asl_r_p_and, 24468}, // __builtin_HEXAGON_S2_asl_r_p_and
+      {Intrinsic::hexagon_S2_asl_r_p_nac, 24501}, // __builtin_HEXAGON_S2_asl_r_p_nac
+      {Intrinsic::hexagon_S2_asl_r_p_or, 24534}, // __builtin_HEXAGON_S2_asl_r_p_or
+      {Intrinsic::hexagon_S2_asl_r_p_xor, 24566}, // __builtin_HEXAGON_S2_asl_r_p_xor
+      {Intrinsic::hexagon_S2_asl_r_r, 24599}, // __builtin_HEXAGON_S2_asl_r_r
+      {Intrinsic::hexagon_S2_asl_r_r_acc, 24628}, // __builtin_HEXAGON_S2_asl_r_r_acc
+      {Intrinsic::hexagon_S2_asl_r_r_and, 24661}, // __builtin_HEXAGON_S2_asl_r_r_and
+      {Intrinsic::hexagon_S2_asl_r_r_nac, 24694}, // __builtin_HEXAGON_S2_asl_r_r_nac
+      {Intrinsic::hexagon_S2_asl_r_r_or, 24727}, // __builtin_HEXAGON_S2_asl_r_r_or
+      {Intrinsic::hexagon_S2_asl_r_r_sat, 24759}, // __builtin_HEXAGON_S2_asl_r_r_sat
+      {Intrinsic::hexagon_S2_asl_r_vh, 24792}, // __builtin_HEXAGON_S2_asl_r_vh
+      {Intrinsic::hexagon_S2_asl_r_vw, 24822}, // __builtin_HEXAGON_S2_asl_r_vw
+      {Intrinsic::hexagon_S2_asr_i_p, 24852}, // __builtin_HEXAGON_S2_asr_i_p
+      {Intrinsic::hexagon_S2_asr_i_p_acc, 24881}, // __builtin_HEXAGON_S2_asr_i_p_acc
+      {Intrinsic::hexagon_S2_asr_i_p_and, 24914}, // __builtin_HEXAGON_S2_asr_i_p_and
+      {Intrinsic::hexagon_S2_asr_i_p_nac, 24947}, // __builtin_HEXAGON_S2_asr_i_p_nac
+      {Intrinsic::hexagon_S2_asr_i_p_or, 24980}, // __builtin_HEXAGON_S2_asr_i_p_or
+      {Intrinsic::hexagon_S2_asr_i_p_rnd, 25012}, // __builtin_HEXAGON_S2_asr_i_p_rnd
+      {Intrinsic::hexagon_S2_asr_i_p_rnd_goodsyntax, 25045}, // __builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax
+      {Intrinsic::hexagon_S2_asr_i_r, 25089}, // __builtin_HEXAGON_S2_asr_i_r
+      {Intrinsic::hexagon_S2_asr_i_r_acc, 25118}, // __builtin_HEXAGON_S2_asr_i_r_acc
+      {Intrinsic::hexagon_S2_asr_i_r_and, 25151}, // __builtin_HEXAGON_S2_asr_i_r_and
+      {Intrinsic::hexagon_S2_asr_i_r_nac, 25184}, // __builtin_HEXAGON_S2_asr_i_r_nac
+      {Intrinsic::hexagon_S2_asr_i_r_or, 25217}, // __builtin_HEXAGON_S2_asr_i_r_or
+      {Intrinsic::hexagon_S2_asr_i_r_rnd, 25249}, // __builtin_HEXAGON_S2_asr_i_r_rnd
+      {Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax, 25282}, // __builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax
+      {Intrinsic::hexagon_S2_asr_i_svw_trun, 25326}, // __builtin_HEXAGON_S2_asr_i_svw_trun
+      {Intrinsic::hexagon_S2_asr_i_vh, 25362}, // __builtin_HEXAGON_S2_asr_i_vh
+      {Intrinsic::hexagon_S2_asr_i_vw, 25392}, // __builtin_HEXAGON_S2_asr_i_vw
+      {Intrinsic::hexagon_S2_asr_r_p, 25422}, // __builtin_HEXAGON_S2_asr_r_p
+      {Intrinsic::hexagon_S2_asr_r_p_acc, 25451}, // __builtin_HEXAGON_S2_asr_r_p_acc
+      {Intrinsic::hexagon_S2_asr_r_p_and, 25484}, // __builtin_HEXAGON_S2_asr_r_p_and
+      {Intrinsic::hexagon_S2_asr_r_p_nac, 25517}, // __builtin_HEXAGON_S2_asr_r_p_nac
+      {Intrinsic::hexagon_S2_asr_r_p_or, 25550}, // __builtin_HEXAGON_S2_asr_r_p_or
+      {Intrinsic::hexagon_S2_asr_r_p_xor, 25582}, // __builtin_HEXAGON_S2_asr_r_p_xor
+      {Intrinsic::hexagon_S2_asr_r_r, 25615}, // __builtin_HEXAGON_S2_asr_r_r
+      {Intrinsic::hexagon_S2_asr_r_r_acc, 25644}, // __builtin_HEXAGON_S2_asr_r_r_acc
+      {Intrinsic::hexagon_S2_asr_r_r_and, 25677}, // __builtin_HEXAGON_S2_asr_r_r_and
+      {Intrinsic::hexagon_S2_asr_r_r_nac, 25710}, // __builtin_HEXAGON_S2_asr_r_r_nac
+      {Intrinsic::hexagon_S2_asr_r_r_or, 25743}, // __builtin_HEXAGON_S2_asr_r_r_or
+      {Intrinsic::hexagon_S2_asr_r_r_sat, 25775}, // __builtin_HEXAGON_S2_asr_r_r_sat
+      {Intrinsic::hexagon_S2_asr_r_svw_trun, 25808}, // __builtin_HEXAGON_S2_asr_r_svw_trun
+      {Intrinsic::hexagon_S2_asr_r_vh, 25844}, // __builtin_HEXAGON_S2_asr_r_vh
+      {Intrinsic::hexagon_S2_asr_r_vw, 25874}, // __builtin_HEXAGON_S2_asr_r_vw
+      {Intrinsic::hexagon_S2_brev, 25904}, // __builtin_HEXAGON_S2_brev
+      {Intrinsic::hexagon_S2_brevp, 25930}, // __builtin_HEXAGON_S2_brevp
+      {Intrinsic::hexagon_S2_cabacencbin, 25957}, // __builtin_HEXAGON_S2_cabacencbin
+      {Intrinsic::hexagon_S2_cl0, 25990}, // __builtin_HEXAGON_S2_cl0
+      {Intrinsic::hexagon_S2_cl0p, 26015}, // __builtin_HEXAGON_S2_cl0p
+      {Intrinsic::hexagon_S2_cl1, 26041}, // __builtin_HEXAGON_S2_cl1
+      {Intrinsic::hexagon_S2_cl1p, 26066}, // __builtin_HEXAGON_S2_cl1p
+      {Intrinsic::hexagon_S2_clb, 26092}, // __builtin_HEXAGON_S2_clb
+      {Intrinsic::hexagon_S2_clbnorm, 26117}, // __builtin_HEXAGON_S2_clbnorm
+      {Intrinsic::hexagon_S2_clbp, 26146}, // __builtin_HEXAGON_S2_clbp
+      {Intrinsic::hexagon_S2_clrbit_i, 26172}, // __builtin_HEXAGON_S2_clrbit_i
+      {Intrinsic::hexagon_S2_clrbit_r, 26202}, // __builtin_HEXAGON_S2_clrbit_r
+      {Intrinsic::hexagon_S2_ct0, 26232}, // __builtin_HEXAGON_S2_ct0
+      {Intrinsic::hexagon_S2_ct0p, 26257}, // __builtin_HEXAGON_S2_ct0p
+      {Intrinsic::hexagon_S2_ct1, 26283}, // __builtin_HEXAGON_S2_ct1
+      {Intrinsic::hexagon_S2_ct1p, 26308}, // __builtin_HEXAGON_S2_ct1p
+      {Intrinsic::hexagon_S2_deinterleave, 26334}, // __builtin_HEXAGON_S2_deinterleave
+      {Intrinsic::hexagon_S2_extractu, 26368}, // __builtin_HEXAGON_S2_extractu
+      {Intrinsic::hexagon_S2_extractu_rp, 26398}, // __builtin_HEXAGON_S2_extractu_rp
+      {Intrinsic::hexagon_S2_extractup, 26431}, // __builtin_HEXAGON_S2_extractup
+      {Intrinsic::hexagon_S2_extractup_rp, 26462}, // __builtin_HEXAGON_S2_extractup_rp
+      {Intrinsic::hexagon_S2_insert, 26496}, // __builtin_HEXAGON_S2_insert
+      {Intrinsic::hexagon_S2_insert_rp, 26524}, // __builtin_HEXAGON_S2_insert_rp
+      {Intrinsic::hexagon_S2_insertp, 26555}, // __builtin_HEXAGON_S2_insertp
+      {Intrinsic::hexagon_S2_insertp_rp, 26584}, // __builtin_HEXAGON_S2_insertp_rp
+      {Intrinsic::hexagon_S2_interleave, 26616}, // __builtin_HEXAGON_S2_interleave
+      {Intrinsic::hexagon_S2_lfsp, 26648}, // __builtin_HEXAGON_S2_lfsp
+      {Intrinsic::hexagon_S2_lsl_r_p, 26674}, // __builtin_HEXAGON_S2_lsl_r_p
+      {Intrinsic::hexagon_S2_lsl_r_p_acc, 26703}, // __builtin_HEXAGON_S2_lsl_r_p_acc
+      {Intrinsic::hexagon_S2_lsl_r_p_and, 26736}, // __builtin_HEXAGON_S2_lsl_r_p_and
+      {Intrinsic::hexagon_S2_lsl_r_p_nac, 26769}, // __builtin_HEXAGON_S2_lsl_r_p_nac
+      {Intrinsic::hexagon_S2_lsl_r_p_or, 26802}, // __builtin_HEXAGON_S2_lsl_r_p_or
+      {Intrinsic::hexagon_S2_lsl_r_p_xor, 26834}, // __builtin_HEXAGON_S2_lsl_r_p_xor
+      {Intrinsic::hexagon_S2_lsl_r_r, 26867}, // __builtin_HEXAGON_S2_lsl_r_r
+      {Intrinsic::hexagon_S2_lsl_r_r_acc, 26896}, // __builtin_HEXAGON_S2_lsl_r_r_acc
+      {Intrinsic::hexagon_S2_lsl_r_r_and, 26929}, // __builtin_HEXAGON_S2_lsl_r_r_and
+      {Intrinsic::hexagon_S2_lsl_r_r_nac, 26962}, // __builtin_HEXAGON_S2_lsl_r_r_nac
+      {Intrinsic::hexagon_S2_lsl_r_r_or, 26995}, // __builtin_HEXAGON_S2_lsl_r_r_or
+      {Intrinsic::hexagon_S2_lsl_r_vh, 27027}, // __builtin_HEXAGON_S2_lsl_r_vh
+      {Intrinsic::hexagon_S2_lsl_r_vw, 27057}, // __builtin_HEXAGON_S2_lsl_r_vw
+      {Intrinsic::hexagon_S2_lsr_i_p, 27087}, // __builtin_HEXAGON_S2_lsr_i_p
+      {Intrinsic::hexagon_S2_lsr_i_p_acc, 27116}, // __builtin_HEXAGON_S2_lsr_i_p_acc
+      {Intrinsic::hexagon_S2_lsr_i_p_and, 27149}, // __builtin_HEXAGON_S2_lsr_i_p_and
+      {Intrinsic::hexagon_S2_lsr_i_p_nac, 27182}, // __builtin_HEXAGON_S2_lsr_i_p_nac
+      {Intrinsic::hexagon_S2_lsr_i_p_or, 27215}, // __builtin_HEXAGON_S2_lsr_i_p_or
+      {Intrinsic::hexagon_S2_lsr_i_p_xacc, 27247}, // __builtin_HEXAGON_S2_lsr_i_p_xacc
+      {Intrinsic::hexagon_S2_lsr_i_r, 27281}, // __builtin_HEXAGON_S2_lsr_i_r
+      {Intrinsic::hexagon_S2_lsr_i_r_acc, 27310}, // __builtin_HEXAGON_S2_lsr_i_r_acc
+      {Intrinsic::hexagon_S2_lsr_i_r_and, 27343}, // __builtin_HEXAGON_S2_lsr_i_r_and
+      {Intrinsic::hexagon_S2_lsr_i_r_nac, 27376}, // __builtin_HEXAGON_S2_lsr_i_r_nac
+      {Intrinsic::hexagon_S2_lsr_i_r_or, 27409}, // __builtin_HEXAGON_S2_lsr_i_r_or
+      {Intrinsic::hexagon_S2_lsr_i_r_xacc, 27441}, // __builtin_HEXAGON_S2_lsr_i_r_xacc
+      {Intrinsic::hexagon_S2_lsr_i_vh, 27475}, // __builtin_HEXAGON_S2_lsr_i_vh
+      {Intrinsic::hexagon_S2_lsr_i_vw, 27505}, // __builtin_HEXAGON_S2_lsr_i_vw
+      {Intrinsic::hexagon_S2_lsr_r_p, 27535}, // __builtin_HEXAGON_S2_lsr_r_p
+      {Intrinsic::hexagon_S2_lsr_r_p_acc, 27564}, // __builtin_HEXAGON_S2_lsr_r_p_acc
+      {Intrinsic::hexagon_S2_lsr_r_p_and, 27597}, // __builtin_HEXAGON_S2_lsr_r_p_and
+      {Intrinsic::hexagon_S2_lsr_r_p_nac, 27630}, // __builtin_HEXAGON_S2_lsr_r_p_nac
+      {Intrinsic::hexagon_S2_lsr_r_p_or, 27663}, // __builtin_HEXAGON_S2_lsr_r_p_or
+      {Intrinsic::hexagon_S2_lsr_r_p_xor, 27695}, // __builtin_HEXAGON_S2_lsr_r_p_xor
+      {Intrinsic::hexagon_S2_lsr_r_r, 27728}, // __builtin_HEXAGON_S2_lsr_r_r
+      {Intrinsic::hexagon_S2_lsr_r_r_acc, 27757}, // __builtin_HEXAGON_S2_lsr_r_r_acc
+      {Intrinsic::hexagon_S2_lsr_r_r_and, 27790}, // __builtin_HEXAGON_S2_lsr_r_r_and
+      {Intrinsic::hexagon_S2_lsr_r_r_nac, 27823}, // __builtin_HEXAGON_S2_lsr_r_r_nac
+      {Intrinsic::hexagon_S2_lsr_r_r_or, 27856}, // __builtin_HEXAGON_S2_lsr_r_r_or
+      {Intrinsic::hexagon_S2_lsr_r_vh, 27888}, // __builtin_HEXAGON_S2_lsr_r_vh
+      {Intrinsic::hexagon_S2_lsr_r_vw, 27918}, // __builtin_HEXAGON_S2_lsr_r_vw
+      {Intrinsic::hexagon_S2_packhl, 27948}, // __builtin_HEXAGON_S2_packhl
+      {Intrinsic::hexagon_S2_parityp, 27976}, // __builtin_HEXAGON_S2_parityp
+      {Intrinsic::hexagon_S2_setbit_i, 28005}, // __builtin_HEXAGON_S2_setbit_i
+      {Intrinsic::hexagon_S2_setbit_r, 28035}, // __builtin_HEXAGON_S2_setbit_r
+      {Intrinsic::hexagon_S2_shuffeb, 28065}, // __builtin_HEXAGON_S2_shuffeb
+      {Intrinsic::hexagon_S2_shuffeh, 28094}, // __builtin_HEXAGON_S2_shuffeh
+      {Intrinsic::hexagon_S2_shuffob, 28123}, // __builtin_HEXAGON_S2_shuffob
+      {Intrinsic::hexagon_S2_shuffoh, 28152}, // __builtin_HEXAGON_S2_shuffoh
+      {Intrinsic::hexagon_S2_storew_locked, 28278}, // __builtin_HEXAGON_S2_storew_locked
+      {Intrinsic::hexagon_S2_svsathb, 28313}, // __builtin_HEXAGON_S2_svsathb
+      {Intrinsic::hexagon_S2_svsathub, 28342}, // __builtin_HEXAGON_S2_svsathub
+      {Intrinsic::hexagon_S2_tableidxb_goodsyntax, 28372}, // __builtin_HEXAGON_S2_tableidxb_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxd_goodsyntax, 28414}, // __builtin_HEXAGON_S2_tableidxd_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxh_goodsyntax, 28456}, // __builtin_HEXAGON_S2_tableidxh_goodsyntax
+      {Intrinsic::hexagon_S2_tableidxw_goodsyntax, 28498}, // __builtin_HEXAGON_S2_tableidxw_goodsyntax
+      {Intrinsic::hexagon_S2_togglebit_i, 28540}, // __builtin_HEXAGON_S2_togglebit_i
+      {Intrinsic::hexagon_S2_togglebit_r, 28573}, // __builtin_HEXAGON_S2_togglebit_r
+      {Intrinsic::hexagon_S2_tstbit_i, 28606}, // __builtin_HEXAGON_S2_tstbit_i
+      {Intrinsic::hexagon_S2_tstbit_r, 28636}, // __builtin_HEXAGON_S2_tstbit_r
+      {Intrinsic::hexagon_S2_valignib, 28666}, // __builtin_HEXAGON_S2_valignib
+      {Intrinsic::hexagon_S2_valignrb, 28696}, // __builtin_HEXAGON_S2_valignrb
+      {Intrinsic::hexagon_S2_vcnegh, 28726}, // __builtin_HEXAGON_S2_vcnegh
+      {Intrinsic::hexagon_S2_vcrotate, 28754}, // __builtin_HEXAGON_S2_vcrotate
+      {Intrinsic::hexagon_S2_vrcnegh, 28784}, // __builtin_HEXAGON_S2_vrcnegh
+      {Intrinsic::hexagon_S2_vrndpackwh, 28813}, // __builtin_HEXAGON_S2_vrndpackwh
+      {Intrinsic::hexagon_S2_vrndpackwhs, 28845}, // __builtin_HEXAGON_S2_vrndpackwhs
+      {Intrinsic::hexagon_S2_vsathb, 28878}, // __builtin_HEXAGON_S2_vsathb
+      {Intrinsic::hexagon_S2_vsathb_nopack, 28906}, // __builtin_HEXAGON_S2_vsathb_nopack
+      {Intrinsic::hexagon_S2_vsathub, 28941}, // __builtin_HEXAGON_S2_vsathub
+      {Intrinsic::hexagon_S2_vsathub_nopack, 28970}, // __builtin_HEXAGON_S2_vsathub_nopack
+      {Intrinsic::hexagon_S2_vsatwh, 29006}, // __builtin_HEXAGON_S2_vsatwh
+      {Intrinsic::hexagon_S2_vsatwh_nopack, 29034}, // __builtin_HEXAGON_S2_vsatwh_nopack
+      {Intrinsic::hexagon_S2_vsatwuh, 29069}, // __builtin_HEXAGON_S2_vsatwuh
+      {Intrinsic::hexagon_S2_vsatwuh_nopack, 29098}, // __builtin_HEXAGON_S2_vsatwuh_nopack
+      {Intrinsic::hexagon_S2_vsplatrb, 29134}, // __builtin_HEXAGON_S2_vsplatrb
+      {Intrinsic::hexagon_S2_vsplatrh, 29164}, // __builtin_HEXAGON_S2_vsplatrh
+      {Intrinsic::hexagon_S2_vspliceib, 29194}, // __builtin_HEXAGON_S2_vspliceib
+      {Intrinsic::hexagon_S2_vsplicerb, 29225}, // __builtin_HEXAGON_S2_vsplicerb
+      {Intrinsic::hexagon_S2_vsxtbh, 29256}, // __builtin_HEXAGON_S2_vsxtbh
+      {Intrinsic::hexagon_S2_vsxthw, 29284}, // __builtin_HEXAGON_S2_vsxthw
+      {Intrinsic::hexagon_S2_vtrunehb, 29312}, // __builtin_HEXAGON_S2_vtrunehb
+      {Intrinsic::hexagon_S2_vtrunewh, 29342}, // __builtin_HEXAGON_S2_vtrunewh
+      {Intrinsic::hexagon_S2_vtrunohb, 29372}, // __builtin_HEXAGON_S2_vtrunohb
+      {Intrinsic::hexagon_S2_vtrunowh, 29402}, // __builtin_HEXAGON_S2_vtrunowh
+      {Intrinsic::hexagon_S2_vzxtbh, 29432}, // __builtin_HEXAGON_S2_vzxtbh
+      {Intrinsic::hexagon_S2_vzxthw, 29460}, // __builtin_HEXAGON_S2_vzxthw
+      {Intrinsic::hexagon_S4_addaddi, 29488}, // __builtin_HEXAGON_S4_addaddi
+      {Intrinsic::hexagon_S4_addi_asl_ri, 29517}, // __builtin_HEXAGON_S4_addi_asl_ri
+      {Intrinsic::hexagon_S4_addi_lsr_ri, 29550}, // __builtin_HEXAGON_S4_addi_lsr_ri
+      {Intrinsic::hexagon_S4_andi_asl_ri, 29583}, // __builtin_HEXAGON_S4_andi_asl_ri
+      {Intrinsic::hexagon_S4_andi_lsr_ri, 29616}, // __builtin_HEXAGON_S4_andi_lsr_ri
+      {Intrinsic::hexagon_S4_clbaddi, 29649}, // __builtin_HEXAGON_S4_clbaddi
+      {Intrinsic::hexagon_S4_clbpaddi, 29678}, // __builtin_HEXAGON_S4_clbpaddi
+      {Intrinsic::hexagon_S4_clbpnorm, 29708}, // __builtin_HEXAGON_S4_clbpnorm
+      {Intrinsic::hexagon_S4_extract, 29738}, // __builtin_HEXAGON_S4_extract
+      {Intrinsic::hexagon_S4_extract_rp, 29767}, // __builtin_HEXAGON_S4_extract_rp
+      {Intrinsic::hexagon_S4_extractp, 29799}, // __builtin_HEXAGON_S4_extractp
+      {Intrinsic::hexagon_S4_extractp_rp, 29829}, // __builtin_HEXAGON_S4_extractp_rp
+      {Intrinsic::hexagon_S4_lsli, 29862}, // __builtin_HEXAGON_S4_lsli
+      {Intrinsic::hexagon_S4_ntstbit_i, 29888}, // __builtin_HEXAGON_S4_ntstbit_i
+      {Intrinsic::hexagon_S4_ntstbit_r, 29919}, // __builtin_HEXAGON_S4_ntstbit_r
+      {Intrinsic::hexagon_S4_or_andi, 29950}, // __builtin_HEXAGON_S4_or_andi
+      {Intrinsic::hexagon_S4_or_andix, 29979}, // __builtin_HEXAGON_S4_or_andix
+      {Intrinsic::hexagon_S4_or_ori, 30009}, // __builtin_HEXAGON_S4_or_ori
+      {Intrinsic::hexagon_S4_ori_asl_ri, 30037}, // __builtin_HEXAGON_S4_ori_asl_ri
+      {Intrinsic::hexagon_S4_ori_lsr_ri, 30069}, // __builtin_HEXAGON_S4_ori_lsr_ri
+      {Intrinsic::hexagon_S4_parity, 30101}, // __builtin_HEXAGON_S4_parity
+      {Intrinsic::hexagon_S4_stored_locked, 30129}, // __builtin_HEXAGON_S4_stored_locked
+      {Intrinsic::hexagon_S4_subaddi, 30164}, // __builtin_HEXAGON_S4_subaddi
+      {Intrinsic::hexagon_S4_subi_asl_ri, 30193}, // __builtin_HEXAGON_S4_subi_asl_ri
+      {Intrinsic::hexagon_S4_subi_lsr_ri, 30226}, // __builtin_HEXAGON_S4_subi_lsr_ri
+      {Intrinsic::hexagon_S4_vrcrotate, 30259}, // __builtin_HEXAGON_S4_vrcrotate
+      {Intrinsic::hexagon_S4_vrcrotate_acc, 30290}, // __builtin_HEXAGON_S4_vrcrotate_acc
+      {Intrinsic::hexagon_S4_vxaddsubh, 30325}, // __builtin_HEXAGON_S4_vxaddsubh
+      {Intrinsic::hexagon_S4_vxaddsubhr, 30356}, // __builtin_HEXAGON_S4_vxaddsubhr
+      {Intrinsic::hexagon_S4_vxaddsubw, 30388}, // __builtin_HEXAGON_S4_vxaddsubw
+      {Intrinsic::hexagon_S4_vxsubaddh, 30419}, // __builtin_HEXAGON_S4_vxsubaddh
+      {Intrinsic::hexagon_S4_vxsubaddhr, 30450}, // __builtin_HEXAGON_S4_vxsubaddhr
+      {Intrinsic::hexagon_S4_vxsubaddw, 30482}, // __builtin_HEXAGON_S4_vxsubaddw
+      {Intrinsic::hexagon_S5_asrhub_rnd_sat_goodsyntax, 30513}, // __builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax
+      {Intrinsic::hexagon_S5_asrhub_sat, 30560}, // __builtin_HEXAGON_S5_asrhub_sat
+      {Intrinsic::hexagon_S5_popcountp, 30592}, // __builtin_HEXAGON_S5_popcountp
+      {Intrinsic::hexagon_S5_vasrhrnd_goodsyntax, 30623}, // __builtin_HEXAGON_S5_vasrhrnd_goodsyntax
+      {Intrinsic::hexagon_S6_rol_i_p, 30664}, // __builtin_HEXAGON_S6_rol_i_p
+      {Intrinsic::hexagon_S6_rol_i_p_acc, 30693}, // __builtin_HEXAGON_S6_rol_i_p_acc
+      {Intrinsic::hexagon_S6_rol_i_p_and, 30726}, // __builtin_HEXAGON_S6_rol_i_p_and
+      {Intrinsic::hexagon_S6_rol_i_p_nac, 30759}, // __builtin_HEXAGON_S6_rol_i_p_nac
+      {Intrinsic::hexagon_S6_rol_i_p_or, 30792}, // __builtin_HEXAGON_S6_rol_i_p_or
+      {Intrinsic::hexagon_S6_rol_i_p_xacc, 30824}, // __builtin_HEXAGON_S6_rol_i_p_xacc
+      {Intrinsic::hexagon_S6_rol_i_r, 30858}, // __builtin_HEXAGON_S6_rol_i_r
+      {Intrinsic::hexagon_S6_rol_i_r_acc, 30887}, // __builtin_HEXAGON_S6_rol_i_r_acc
+      {Intrinsic::hexagon_S6_rol_i_r_and, 30920}, // __builtin_HEXAGON_S6_rol_i_r_and
+      {Intrinsic::hexagon_S6_rol_i_r_nac, 30953}, // __builtin_HEXAGON_S6_rol_i_r_nac
+      {Intrinsic::hexagon_S6_rol_i_r_or, 30986}, // __builtin_HEXAGON_S6_rol_i_r_or
+      {Intrinsic::hexagon_S6_rol_i_r_xacc, 31018}, // __builtin_HEXAGON_S6_rol_i_r_xacc
+      {Intrinsic::hexagon_S6_vsplatrbp, 31052}, // __builtin_HEXAGON_S6_vsplatrbp
+      {Intrinsic::hexagon_S6_vtrunehb_ppp, 31083}, // __builtin_HEXAGON_S6_vtrunehb_ppp
+      {Intrinsic::hexagon_S6_vtrunohb_ppp, 31117}, // __builtin_HEXAGON_S6_vtrunohb_ppp
+      {Intrinsic::hexagon_V6_extractw, 31151}, // __builtin_HEXAGON_V6_extractw
+      {Intrinsic::hexagon_V6_extractw_128B, 31181}, // __builtin_HEXAGON_V6_extractw_128B
+      {Intrinsic::hexagon_V6_hi, 31216}, // __builtin_HEXAGON_V6_hi
+      {Intrinsic::hexagon_V6_hi_128B, 31240}, // __builtin_HEXAGON_V6_hi_128B
+      {Intrinsic::hexagon_V6_lo, 31269}, // __builtin_HEXAGON_V6_lo
+      {Intrinsic::hexagon_V6_lo_128B, 31293}, // __builtin_HEXAGON_V6_lo_128B
+      {Intrinsic::hexagon_V6_lvsplatb, 31322}, // __builtin_HEXAGON_V6_lvsplatb
+      {Intrinsic::hexagon_V6_lvsplatb_128B, 31352}, // __builtin_HEXAGON_V6_lvsplatb_128B
+      {Intrinsic::hexagon_V6_lvsplath, 31387}, // __builtin_HEXAGON_V6_lvsplath
+      {Intrinsic::hexagon_V6_lvsplath_128B, 31417}, // __builtin_HEXAGON_V6_lvsplath_128B
+      {Intrinsic::hexagon_V6_lvsplatw, 31452}, // __builtin_HEXAGON_V6_lvsplatw
+      {Intrinsic::hexagon_V6_lvsplatw_128B, 31482}, // __builtin_HEXAGON_V6_lvsplatw_128B
+      {Intrinsic::hexagon_V6_pred_and, 31517}, // __builtin_HEXAGON_V6_pred_and
+      {Intrinsic::hexagon_V6_pred_and_128B, 31547}, // __builtin_HEXAGON_V6_pred_and_128B
+      {Intrinsic::hexagon_V6_pred_and_n, 31582}, // __builtin_HEXAGON_V6_pred_and_n
+      {Intrinsic::hexagon_V6_pred_and_n_128B, 31614}, // __builtin_HEXAGON_V6_pred_and_n_128B
+      {Intrinsic::hexagon_V6_pred_not, 31651}, // __builtin_HEXAGON_V6_pred_not
+      {Intrinsic::hexagon_V6_pred_not_128B, 31681}, // __builtin_HEXAGON_V6_pred_not_128B
+      {Intrinsic::hexagon_V6_pred_or, 31716}, // __builtin_HEXAGON_V6_pred_or
+      {Intrinsic::hexagon_V6_pred_or_128B, 31745}, // __builtin_HEXAGON_V6_pred_or_128B
+      {Intrinsic::hexagon_V6_pred_or_n, 31779}, // __builtin_HEXAGON_V6_pred_or_n
+      {Intrinsic::hexagon_V6_pred_or_n_128B, 31810}, // __builtin_HEXAGON_V6_pred_or_n_128B
+      {Intrinsic::hexagon_V6_pred_scalar2, 31846}, // __builtin_HEXAGON_V6_pred_scalar2
+      {Intrinsic::hexagon_V6_pred_scalar2_128B, 31880}, // __builtin_HEXAGON_V6_pred_scalar2_128B
+      {Intrinsic::hexagon_V6_pred_scalar2v2, 31919}, // __builtin_HEXAGON_V6_pred_scalar2v2
+      {Intrinsic::hexagon_V6_pred_scalar2v2_128B, 31955}, // __builtin_HEXAGON_V6_pred_scalar2v2_128B
+      {Intrinsic::hexagon_V6_pred_xor, 31996}, // __builtin_HEXAGON_V6_pred_xor
+      {Intrinsic::hexagon_V6_pred_xor_128B, 32026}, // __builtin_HEXAGON_V6_pred_xor_128B
+      {Intrinsic::hexagon_V6_shuffeqh, 32061}, // __builtin_HEXAGON_V6_shuffeqh
+      {Intrinsic::hexagon_V6_shuffeqh_128B, 32091}, // __builtin_HEXAGON_V6_shuffeqh_128B
+      {Intrinsic::hexagon_V6_shuffeqw, 32126}, // __builtin_HEXAGON_V6_shuffeqw
+      {Intrinsic::hexagon_V6_shuffeqw_128B, 32156}, // __builtin_HEXAGON_V6_shuffeqw_128B
+      {Intrinsic::hexagon_V6_vS32b_nqpred_ai, 32191}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nqpred_ai_128B, 32228}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai, 32270}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai_128B, 32310}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai, 32355}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai
+      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai_128B, 32394}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai_128B
+      {Intrinsic::hexagon_V6_vS32b_qpred_ai, 32438}, // __builtin_HEXAGON_V6_vS32b_qpred_ai
+      {Intrinsic::hexagon_V6_vS32b_qpred_ai_128B, 32474}, // __builtin_HEXAGON_V6_vS32b_qpred_ai_128B
+      {Intrinsic::hexagon_V6_vabsb, 32515}, // __builtin_HEXAGON_V6_vabsb
+      {Intrinsic::hexagon_V6_vabsb_128B, 32542}, // __builtin_HEXAGON_V6_vabsb_128B
+      {Intrinsic::hexagon_V6_vabsb_sat, 32574}, // __builtin_HEXAGON_V6_vabsb_sat
+      {Intrinsic::hexagon_V6_vabsb_sat_128B, 32605}, // __builtin_HEXAGON_V6_vabsb_sat_128B
+      {Intrinsic::hexagon_V6_vabsdiffh, 32641}, // __builtin_HEXAGON_V6_vabsdiffh
+      {Intrinsic::hexagon_V6_vabsdiffh_128B, 32672}, // __builtin_HEXAGON_V6_vabsdiffh_128B
+      {Intrinsic::hexagon_V6_vabsdiffub, 32708}, // __builtin_HEXAGON_V6_vabsdiffub
+      {Intrinsic::hexagon_V6_vabsdiffub_128B, 32740}, // __builtin_HEXAGON_V6_vabsdiffub_128B
+      {Intrinsic::hexagon_V6_vabsdiffuh, 32777}, // __builtin_HEXAGON_V6_vabsdiffuh
+      {Intrinsic::hexagon_V6_vabsdiffuh_128B, 32809}, // __builtin_HEXAGON_V6_vabsdiffuh_128B
+      {Intrinsic::hexagon_V6_vabsdiffw, 32846}, // __builtin_HEXAGON_V6_vabsdiffw
+      {Intrinsic::hexagon_V6_vabsdiffw_128B, 32877}, // __builtin_HEXAGON_V6_vabsdiffw_128B
+      {Intrinsic::hexagon_V6_vabsh, 32913}, // __builtin_HEXAGON_V6_vabsh
+      {Intrinsic::hexagon_V6_vabsh_128B, 32940}, // __builtin_HEXAGON_V6_vabsh_128B
+      {Intrinsic::hexagon_V6_vabsh_sat, 32972}, // __builtin_HEXAGON_V6_vabsh_sat
+      {Intrinsic::hexagon_V6_vabsh_sat_128B, 33003}, // __builtin_HEXAGON_V6_vabsh_sat_128B
+      {Intrinsic::hexagon_V6_vabsw, 33039}, // __builtin_HEXAGON_V6_vabsw
+      {Intrinsic::hexagon_V6_vabsw_128B, 33066}, // __builtin_HEXAGON_V6_vabsw_128B
+      {Intrinsic::hexagon_V6_vabsw_sat, 33098}, // __builtin_HEXAGON_V6_vabsw_sat
+      {Intrinsic::hexagon_V6_vabsw_sat_128B, 33129}, // __builtin_HEXAGON_V6_vabsw_sat_128B
+      {Intrinsic::hexagon_V6_vaddb, 33165}, // __builtin_HEXAGON_V6_vaddb
+      {Intrinsic::hexagon_V6_vaddb_128B, 33192}, // __builtin_HEXAGON_V6_vaddb_128B
+      {Intrinsic::hexagon_V6_vaddb_dv, 33224}, // __builtin_HEXAGON_V6_vaddb_dv
+      {Intrinsic::hexagon_V6_vaddb_dv_128B, 33254}, // __builtin_HEXAGON_V6_vaddb_dv_128B
+      {Intrinsic::hexagon_V6_vaddbnq, 33289}, // __builtin_HEXAGON_V6_vaddbnq
+      {Intrinsic::hexagon_V6_vaddbnq_128B, 33318}, // __builtin_HEXAGON_V6_vaddbnq_128B
+      {Intrinsic::hexagon_V6_vaddbq, 33352}, // __builtin_HEXAGON_V6_vaddbq
+      {Intrinsic::hexagon_V6_vaddbq_128B, 33380}, // __builtin_HEXAGON_V6_vaddbq_128B
+      {Intrinsic::hexagon_V6_vaddbsat, 33413}, // __builtin_HEXAGON_V6_vaddbsat
+      {Intrinsic::hexagon_V6_vaddbsat_128B, 33443}, // __builtin_HEXAGON_V6_vaddbsat_128B
+      {Intrinsic::hexagon_V6_vaddbsat_dv, 33478}, // __builtin_HEXAGON_V6_vaddbsat_dv
+      {Intrinsic::hexagon_V6_vaddbsat_dv_128B, 33511}, // __builtin_HEXAGON_V6_vaddbsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddclbh, 33616}, // __builtin_HEXAGON_V6_vaddclbh
+      {Intrinsic::hexagon_V6_vaddclbh_128B, 33646}, // __builtin_HEXAGON_V6_vaddclbh_128B
+      {Intrinsic::hexagon_V6_vaddclbw, 33681}, // __builtin_HEXAGON_V6_vaddclbw
+      {Intrinsic::hexagon_V6_vaddclbw_128B, 33711}, // __builtin_HEXAGON_V6_vaddclbw_128B
+      {Intrinsic::hexagon_V6_vaddh, 33746}, // __builtin_HEXAGON_V6_vaddh
+      {Intrinsic::hexagon_V6_vaddh_128B, 33773}, // __builtin_HEXAGON_V6_vaddh_128B
+      {Intrinsic::hexagon_V6_vaddh_dv, 33805}, // __builtin_HEXAGON_V6_vaddh_dv
+      {Intrinsic::hexagon_V6_vaddh_dv_128B, 33835}, // __builtin_HEXAGON_V6_vaddh_dv_128B
+      {Intrinsic::hexagon_V6_vaddhnq, 33870}, // __builtin_HEXAGON_V6_vaddhnq
+      {Intrinsic::hexagon_V6_vaddhnq_128B, 33899}, // __builtin_HEXAGON_V6_vaddhnq_128B
+      {Intrinsic::hexagon_V6_vaddhq, 33933}, // __builtin_HEXAGON_V6_vaddhq
+      {Intrinsic::hexagon_V6_vaddhq_128B, 33961}, // __builtin_HEXAGON_V6_vaddhq_128B
+      {Intrinsic::hexagon_V6_vaddhsat, 33994}, // __builtin_HEXAGON_V6_vaddhsat
+      {Intrinsic::hexagon_V6_vaddhsat_128B, 34024}, // __builtin_HEXAGON_V6_vaddhsat_128B
+      {Intrinsic::hexagon_V6_vaddhsat_dv, 34059}, // __builtin_HEXAGON_V6_vaddhsat_dv
+      {Intrinsic::hexagon_V6_vaddhsat_dv_128B, 34092}, // __builtin_HEXAGON_V6_vaddhsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddhw, 34130}, // __builtin_HEXAGON_V6_vaddhw
+      {Intrinsic::hexagon_V6_vaddhw_128B, 34158}, // __builtin_HEXAGON_V6_vaddhw_128B
+      {Intrinsic::hexagon_V6_vaddhw_acc, 34191}, // __builtin_HEXAGON_V6_vaddhw_acc
+      {Intrinsic::hexagon_V6_vaddhw_acc_128B, 34223}, // __builtin_HEXAGON_V6_vaddhw_acc_128B
+      {Intrinsic::hexagon_V6_vaddubh, 34260}, // __builtin_HEXAGON_V6_vaddubh
+      {Intrinsic::hexagon_V6_vaddubh_128B, 34289}, // __builtin_HEXAGON_V6_vaddubh_128B
+      {Intrinsic::hexagon_V6_vaddubh_acc, 34323}, // __builtin_HEXAGON_V6_vaddubh_acc
+      {Intrinsic::hexagon_V6_vaddubh_acc_128B, 34356}, // __builtin_HEXAGON_V6_vaddubh_acc_128B
+      {Intrinsic::hexagon_V6_vaddubsat, 34394}, // __builtin_HEXAGON_V6_vaddubsat
+      {Intrinsic::hexagon_V6_vaddubsat_128B, 34425}, // __builtin_HEXAGON_V6_vaddubsat_128B
+      {Intrinsic::hexagon_V6_vaddubsat_dv, 34461}, // __builtin_HEXAGON_V6_vaddubsat_dv
+      {Intrinsic::hexagon_V6_vaddubsat_dv_128B, 34495}, // __builtin_HEXAGON_V6_vaddubsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddububb_sat, 34534}, // __builtin_HEXAGON_V6_vaddububb_sat
+      {Intrinsic::hexagon_V6_vaddububb_sat_128B, 34569}, // __builtin_HEXAGON_V6_vaddububb_sat_128B
+      {Intrinsic::hexagon_V6_vadduhsat, 34609}, // __builtin_HEXAGON_V6_vadduhsat
+      {Intrinsic::hexagon_V6_vadduhsat_128B, 34640}, // __builtin_HEXAGON_V6_vadduhsat_128B
+      {Intrinsic::hexagon_V6_vadduhsat_dv, 34676}, // __builtin_HEXAGON_V6_vadduhsat_dv
+      {Intrinsic::hexagon_V6_vadduhsat_dv_128B, 34710}, // __builtin_HEXAGON_V6_vadduhsat_dv_128B
+      {Intrinsic::hexagon_V6_vadduhw, 34749}, // __builtin_HEXAGON_V6_vadduhw
+      {Intrinsic::hexagon_V6_vadduhw_128B, 34778}, // __builtin_HEXAGON_V6_vadduhw_128B
+      {Intrinsic::hexagon_V6_vadduhw_acc, 34812}, // __builtin_HEXAGON_V6_vadduhw_acc
+      {Intrinsic::hexagon_V6_vadduhw_acc_128B, 34845}, // __builtin_HEXAGON_V6_vadduhw_acc_128B
+      {Intrinsic::hexagon_V6_vadduwsat, 34883}, // __builtin_HEXAGON_V6_vadduwsat
+      {Intrinsic::hexagon_V6_vadduwsat_128B, 34914}, // __builtin_HEXAGON_V6_vadduwsat_128B
+      {Intrinsic::hexagon_V6_vadduwsat_dv, 34950}, // __builtin_HEXAGON_V6_vadduwsat_dv
+      {Intrinsic::hexagon_V6_vadduwsat_dv_128B, 34984}, // __builtin_HEXAGON_V6_vadduwsat_dv_128B
+      {Intrinsic::hexagon_V6_vaddw, 35023}, // __builtin_HEXAGON_V6_vaddw
+      {Intrinsic::hexagon_V6_vaddw_128B, 35050}, // __builtin_HEXAGON_V6_vaddw_128B
+      {Intrinsic::hexagon_V6_vaddw_dv, 35082}, // __builtin_HEXAGON_V6_vaddw_dv
+      {Intrinsic::hexagon_V6_vaddw_dv_128B, 35112}, // __builtin_HEXAGON_V6_vaddw_dv_128B
+      {Intrinsic::hexagon_V6_vaddwnq, 35147}, // __builtin_HEXAGON_V6_vaddwnq
+      {Intrinsic::hexagon_V6_vaddwnq_128B, 35176}, // __builtin_HEXAGON_V6_vaddwnq_128B
+      {Intrinsic::hexagon_V6_vaddwq, 35210}, // __builtin_HEXAGON_V6_vaddwq
+      {Intrinsic::hexagon_V6_vaddwq_128B, 35238}, // __builtin_HEXAGON_V6_vaddwq_128B
+      {Intrinsic::hexagon_V6_vaddwsat, 35271}, // __builtin_HEXAGON_V6_vaddwsat
+      {Intrinsic::hexagon_V6_vaddwsat_128B, 35301}, // __builtin_HEXAGON_V6_vaddwsat_128B
+      {Intrinsic::hexagon_V6_vaddwsat_dv, 35336}, // __builtin_HEXAGON_V6_vaddwsat_dv
+      {Intrinsic::hexagon_V6_vaddwsat_dv_128B, 35369}, // __builtin_HEXAGON_V6_vaddwsat_dv_128B
+      {Intrinsic::hexagon_V6_valignb, 35407}, // __builtin_HEXAGON_V6_valignb
+      {Intrinsic::hexagon_V6_valignb_128B, 35436}, // __builtin_HEXAGON_V6_valignb_128B
+      {Intrinsic::hexagon_V6_valignbi, 35470}, // __builtin_HEXAGON_V6_valignbi
+      {Intrinsic::hexagon_V6_valignbi_128B, 35500}, // __builtin_HEXAGON_V6_valignbi_128B
+      {Intrinsic::hexagon_V6_vand, 35535}, // __builtin_HEXAGON_V6_vand
+      {Intrinsic::hexagon_V6_vand_128B, 35561}, // __builtin_HEXAGON_V6_vand_128B
+      {Intrinsic::hexagon_V6_vandnqrt, 35592}, // __builtin_HEXAGON_V6_vandnqrt
+      {Intrinsic::hexagon_V6_vandnqrt_128B, 35622}, // __builtin_HEXAGON_V6_vandnqrt_128B
+      {Intrinsic::hexagon_V6_vandnqrt_acc, 35657}, // __builtin_HEXAGON_V6_vandnqrt_acc
+      {Intrinsic::hexagon_V6_vandnqrt_acc_128B, 35691}, // __builtin_HEXAGON_V6_vandnqrt_acc_128B
+      {Intrinsic::hexagon_V6_vandqrt, 35730}, // __builtin_HEXAGON_V6_vandqrt
+      {Intrinsic::hexagon_V6_vandqrt_128B, 35759}, // __builtin_HEXAGON_V6_vandqrt_128B
+      {Intrinsic::hexagon_V6_vandqrt_acc, 35793}, // __builtin_HEXAGON_V6_vandqrt_acc
+      {Intrinsic::hexagon_V6_vandqrt_acc_128B, 35826}, // __builtin_HEXAGON_V6_vandqrt_acc_128B
+      {Intrinsic::hexagon_V6_vandvnqv, 35864}, // __builtin_HEXAGON_V6_vandvnqv
+      {Intrinsic::hexagon_V6_vandvnqv_128B, 35894}, // __builtin_HEXAGON_V6_vandvnqv_128B
+      {Intrinsic::hexagon_V6_vandvqv, 35929}, // __builtin_HEXAGON_V6_vandvqv
+      {Intrinsic::hexagon_V6_vandvqv_128B, 35958}, // __builtin_HEXAGON_V6_vandvqv_128B
+      {Intrinsic::hexagon_V6_vandvrt, 35992}, // __builtin_HEXAGON_V6_vandvrt
+      {Intrinsic::hexagon_V6_vandvrt_128B, 36021}, // __builtin_HEXAGON_V6_vandvrt_128B
+      {Intrinsic::hexagon_V6_vandvrt_acc, 36055}, // __builtin_HEXAGON_V6_vandvrt_acc
+      {Intrinsic::hexagon_V6_vandvrt_acc_128B, 36088}, // __builtin_HEXAGON_V6_vandvrt_acc_128B
+      {Intrinsic::hexagon_V6_vaslh, 36126}, // __builtin_HEXAGON_V6_vaslh
+      {Intrinsic::hexagon_V6_vaslh_128B, 36153}, // __builtin_HEXAGON_V6_vaslh_128B
+      {Intrinsic::hexagon_V6_vaslh_acc, 36185}, // __builtin_HEXAGON_V6_vaslh_acc
+      {Intrinsic::hexagon_V6_vaslh_acc_128B, 36216}, // __builtin_HEXAGON_V6_vaslh_acc_128B
+      {Intrinsic::hexagon_V6_vaslhv, 36252}, // __builtin_HEXAGON_V6_vaslhv
+      {Intrinsic::hexagon_V6_vaslhv_128B, 36280}, // __builtin_HEXAGON_V6_vaslhv_128B
+      {Intrinsic::hexagon_V6_vaslw, 36313}, // __builtin_HEXAGON_V6_vaslw
+      {Intrinsic::hexagon_V6_vaslw_128B, 36340}, // __builtin_HEXAGON_V6_vaslw_128B
+      {Intrinsic::hexagon_V6_vaslw_acc, 36372}, // __builtin_HEXAGON_V6_vaslw_acc
+      {Intrinsic::hexagon_V6_vaslw_acc_128B, 36403}, // __builtin_HEXAGON_V6_vaslw_acc_128B
+      {Intrinsic::hexagon_V6_vaslwv, 36439}, // __builtin_HEXAGON_V6_vaslwv
+      {Intrinsic::hexagon_V6_vaslwv_128B, 36467}, // __builtin_HEXAGON_V6_vaslwv_128B
+      {Intrinsic::hexagon_V6_vasrh, 36500}, // __builtin_HEXAGON_V6_vasrh
+      {Intrinsic::hexagon_V6_vasrh_128B, 36527}, // __builtin_HEXAGON_V6_vasrh_128B
+      {Intrinsic::hexagon_V6_vasrh_acc, 36559}, // __builtin_HEXAGON_V6_vasrh_acc
+      {Intrinsic::hexagon_V6_vasrh_acc_128B, 36590}, // __builtin_HEXAGON_V6_vasrh_acc_128B
+      {Intrinsic::hexagon_V6_vasrhbrndsat, 36626}, // __builtin_HEXAGON_V6_vasrhbrndsat
+      {Intrinsic::hexagon_V6_vasrhbrndsat_128B, 36660}, // __builtin_HEXAGON_V6_vasrhbrndsat_128B
+      {Intrinsic::hexagon_V6_vasrhbsat, 36699}, // __builtin_HEXAGON_V6_vasrhbsat
+      {Intrinsic::hexagon_V6_vasrhbsat_128B, 36730}, // __builtin_HEXAGON_V6_vasrhbsat_128B
+      {Intrinsic::hexagon_V6_vasrhubrndsat, 36766}, // __builtin_HEXAGON_V6_vasrhubrndsat
+      {Intrinsic::hexagon_V6_vasrhubrndsat_128B, 36801}, // __builtin_HEXAGON_V6_vasrhubrndsat_128B
+      {Intrinsic::hexagon_V6_vasrhubsat, 36841}, // __builtin_HEXAGON_V6_vasrhubsat
+      {Intrinsic::hexagon_V6_vasrhubsat_128B, 36873}, // __builtin_HEXAGON_V6_vasrhubsat_128B
+      {Intrinsic::hexagon_V6_vasrhv, 36910}, // __builtin_HEXAGON_V6_vasrhv
+      {Intrinsic::hexagon_V6_vasrhv_128B, 36938}, // __builtin_HEXAGON_V6_vasrhv_128B
+      {Intrinsic::hexagon_V6_vasruhubrndsat, 36971}, // __builtin_HEXAGON_V6_vasruhubrndsat
+      {Intrinsic::hexagon_V6_vasruhubrndsat_128B, 37007}, // __builtin_HEXAGON_V6_vasruhubrndsat_128B
+      {Intrinsic::hexagon_V6_vasruhubsat, 37048}, // __builtin_HEXAGON_V6_vasruhubsat
+      {Intrinsic::hexagon_V6_vasruhubsat_128B, 37081}, // __builtin_HEXAGON_V6_vasruhubsat_128B
+      {Intrinsic::hexagon_V6_vasruwuhrndsat, 37119}, // __builtin_HEXAGON_V6_vasruwuhrndsat
+      {Intrinsic::hexagon_V6_vasruwuhrndsat_128B, 37155}, // __builtin_HEXAGON_V6_vasruwuhrndsat_128B
+      {Intrinsic::hexagon_V6_vasruwuhsat, 37196}, // __builtin_HEXAGON_V6_vasruwuhsat
+      {Intrinsic::hexagon_V6_vasruwuhsat_128B, 37229}, // __builtin_HEXAGON_V6_vasruwuhsat_128B
+      {Intrinsic::hexagon_V6_vasrw, 37267}, // __builtin_HEXAGON_V6_vasrw
+      {Intrinsic::hexagon_V6_vasrw_128B, 37294}, // __builtin_HEXAGON_V6_vasrw_128B
+      {Intrinsic::hexagon_V6_vasrw_acc, 37326}, // __builtin_HEXAGON_V6_vasrw_acc
+      {Intrinsic::hexagon_V6_vasrw_acc_128B, 37357}, // __builtin_HEXAGON_V6_vasrw_acc_128B
+      {Intrinsic::hexagon_V6_vasrwh, 37393}, // __builtin_HEXAGON_V6_vasrwh
+      {Intrinsic::hexagon_V6_vasrwh_128B, 37421}, // __builtin_HEXAGON_V6_vasrwh_128B
+      {Intrinsic::hexagon_V6_vasrwhrndsat, 37454}, // __builtin_HEXAGON_V6_vasrwhrndsat
+      {Intrinsic::hexagon_V6_vasrwhrndsat_128B, 37488}, // __builtin_HEXAGON_V6_vasrwhrndsat_128B
+      {Intrinsic::hexagon_V6_vasrwhsat, 37527}, // __builtin_HEXAGON_V6_vasrwhsat
+      {Intrinsic::hexagon_V6_vasrwhsat_128B, 37558}, // __builtin_HEXAGON_V6_vasrwhsat_128B
+      {Intrinsic::hexagon_V6_vasrwuhrndsat, 37594}, // __builtin_HEXAGON_V6_vasrwuhrndsat
+      {Intrinsic::hexagon_V6_vasrwuhrndsat_128B, 37629}, // __builtin_HEXAGON_V6_vasrwuhrndsat_128B
+      {Intrinsic::hexagon_V6_vasrwuhsat, 37669}, // __builtin_HEXAGON_V6_vasrwuhsat
+      {Intrinsic::hexagon_V6_vasrwuhsat_128B, 37701}, // __builtin_HEXAGON_V6_vasrwuhsat_128B
+      {Intrinsic::hexagon_V6_vasrwv, 37738}, // __builtin_HEXAGON_V6_vasrwv
+      {Intrinsic::hexagon_V6_vasrwv_128B, 37766}, // __builtin_HEXAGON_V6_vasrwv_128B
+      {Intrinsic::hexagon_V6_vassign, 37799}, // __builtin_HEXAGON_V6_vassign
+      {Intrinsic::hexagon_V6_vassign_128B, 37828}, // __builtin_HEXAGON_V6_vassign_128B
+      {Intrinsic::hexagon_V6_vassignp, 37862}, // __builtin_HEXAGON_V6_vassignp
+      {Intrinsic::hexagon_V6_vassignp_128B, 37892}, // __builtin_HEXAGON_V6_vassignp_128B
+      {Intrinsic::hexagon_V6_vavgb, 37927}, // __builtin_HEXAGON_V6_vavgb
+      {Intrinsic::hexagon_V6_vavgb_128B, 37954}, // __builtin_HEXAGON_V6_vavgb_128B
+      {Intrinsic::hexagon_V6_vavgbrnd, 37986}, // __builtin_HEXAGON_V6_vavgbrnd
+      {Intrinsic::hexagon_V6_vavgbrnd_128B, 38016}, // __builtin_HEXAGON_V6_vavgbrnd_128B
+      {Intrinsic::hexagon_V6_vavgh, 38051}, // __builtin_HEXAGON_V6_vavgh
+      {Intrinsic::hexagon_V6_vavgh_128B, 38078}, // __builtin_HEXAGON_V6_vavgh_128B
+      {Intrinsic::hexagon_V6_vavghrnd, 38110}, // __builtin_HEXAGON_V6_vavghrnd
+      {Intrinsic::hexagon_V6_vavghrnd_128B, 38140}, // __builtin_HEXAGON_V6_vavghrnd_128B
+      {Intrinsic::hexagon_V6_vavgub, 38175}, // __builtin_HEXAGON_V6_vavgub
+      {Intrinsic::hexagon_V6_vavgub_128B, 38203}, // __builtin_HEXAGON_V6_vavgub_128B
+      {Intrinsic::hexagon_V6_vavgubrnd, 38236}, // __builtin_HEXAGON_V6_vavgubrnd
+      {Intrinsic::hexagon_V6_vavgubrnd_128B, 38267}, // __builtin_HEXAGON_V6_vavgubrnd_128B
+      {Intrinsic::hexagon_V6_vavguh, 38303}, // __builtin_HEXAGON_V6_vavguh
+      {Intrinsic::hexagon_V6_vavguh_128B, 38331}, // __builtin_HEXAGON_V6_vavguh_128B
+      {Intrinsic::hexagon_V6_vavguhrnd, 38364}, // __builtin_HEXAGON_V6_vavguhrnd
+      {Intrinsic::hexagon_V6_vavguhrnd_128B, 38395}, // __builtin_HEXAGON_V6_vavguhrnd_128B
+      {Intrinsic::hexagon_V6_vavguw, 38431}, // __builtin_HEXAGON_V6_vavguw
+      {Intrinsic::hexagon_V6_vavguw_128B, 38459}, // __builtin_HEXAGON_V6_vavguw_128B
+      {Intrinsic::hexagon_V6_vavguwrnd, 38492}, // __builtin_HEXAGON_V6_vavguwrnd
+      {Intrinsic::hexagon_V6_vavguwrnd_128B, 38523}, // __builtin_HEXAGON_V6_vavguwrnd_128B
+      {Intrinsic::hexagon_V6_vavgw, 38559}, // __builtin_HEXAGON_V6_vavgw
+      {Intrinsic::hexagon_V6_vavgw_128B, 38586}, // __builtin_HEXAGON_V6_vavgw_128B
+      {Intrinsic::hexagon_V6_vavgwrnd, 38618}, // __builtin_HEXAGON_V6_vavgwrnd
+      {Intrinsic::hexagon_V6_vavgwrnd_128B, 38648}, // __builtin_HEXAGON_V6_vavgwrnd_128B
+      {Intrinsic::hexagon_V6_vcl0h, 38683}, // __builtin_HEXAGON_V6_vcl0h
+      {Intrinsic::hexagon_V6_vcl0h_128B, 38710}, // __builtin_HEXAGON_V6_vcl0h_128B
+      {Intrinsic::hexagon_V6_vcl0w, 38742}, // __builtin_HEXAGON_V6_vcl0w
+      {Intrinsic::hexagon_V6_vcl0w_128B, 38769}, // __builtin_HEXAGON_V6_vcl0w_128B
+      {Intrinsic::hexagon_V6_vcombine, 38801}, // __builtin_HEXAGON_V6_vcombine
+      {Intrinsic::hexagon_V6_vcombine_128B, 38831}, // __builtin_HEXAGON_V6_vcombine_128B
+      {Intrinsic::hexagon_V6_vd0, 38866}, // __builtin_HEXAGON_V6_vd0
+      {Intrinsic::hexagon_V6_vd0_128B, 38891}, // __builtin_HEXAGON_V6_vd0_128B
+      {Intrinsic::hexagon_V6_vdd0, 38921}, // __builtin_HEXAGON_V6_vdd0
+      {Intrinsic::hexagon_V6_vdd0_128B, 38947}, // __builtin_HEXAGON_V6_vdd0_128B
+      {Intrinsic::hexagon_V6_vdealb, 38978}, // __builtin_HEXAGON_V6_vdealb
+      {Intrinsic::hexagon_V6_vdealb4w, 39039}, // __builtin_HEXAGON_V6_vdealb4w
+      {Intrinsic::hexagon_V6_vdealb4w_128B, 39069}, // __builtin_HEXAGON_V6_vdealb4w_128B
+      {Intrinsic::hexagon_V6_vdealb_128B, 39006}, // __builtin_HEXAGON_V6_vdealb_128B
+      {Intrinsic::hexagon_V6_vdealh, 39104}, // __builtin_HEXAGON_V6_vdealh
+      {Intrinsic::hexagon_V6_vdealh_128B, 39132}, // __builtin_HEXAGON_V6_vdealh_128B
+      {Intrinsic::hexagon_V6_vdealvdd, 39165}, // __builtin_HEXAGON_V6_vdealvdd
+      {Intrinsic::hexagon_V6_vdealvdd_128B, 39195}, // __builtin_HEXAGON_V6_vdealvdd_128B
+      {Intrinsic::hexagon_V6_vdelta, 39230}, // __builtin_HEXAGON_V6_vdelta
+      {Intrinsic::hexagon_V6_vdelta_128B, 39258}, // __builtin_HEXAGON_V6_vdelta_128B
+      {Intrinsic::hexagon_V6_vdmpybus, 39291}, // __builtin_HEXAGON_V6_vdmpybus
+      {Intrinsic::hexagon_V6_vdmpybus_128B, 39321}, // __builtin_HEXAGON_V6_vdmpybus_128B
+      {Intrinsic::hexagon_V6_vdmpybus_acc, 39356}, // __builtin_HEXAGON_V6_vdmpybus_acc
+      {Intrinsic::hexagon_V6_vdmpybus_acc_128B, 39390}, // __builtin_HEXAGON_V6_vdmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vdmpybus_dv, 39429}, // __builtin_HEXAGON_V6_vdmpybus_dv
+      {Intrinsic::hexagon_V6_vdmpybus_dv_128B, 39462}, // __builtin_HEXAGON_V6_vdmpybus_dv_128B
+      {Intrinsic::hexagon_V6_vdmpybus_dv_acc, 39500}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc
+      {Intrinsic::hexagon_V6_vdmpybus_dv_acc_128B, 39537}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhb, 39579}, // __builtin_HEXAGON_V6_vdmpyhb
+      {Intrinsic::hexagon_V6_vdmpyhb_128B, 39608}, // __builtin_HEXAGON_V6_vdmpyhb_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_acc, 39642}, // __builtin_HEXAGON_V6_vdmpyhb_acc
+      {Intrinsic::hexagon_V6_vdmpyhb_acc_128B, 39675}, // __builtin_HEXAGON_V6_vdmpyhb_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_dv, 39713}, // __builtin_HEXAGON_V6_vdmpyhb_dv
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_128B, 39745}, // __builtin_HEXAGON_V6_vdmpyhb_dv_128B
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc, 39782}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc
+      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc_128B, 39818}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhisat, 39859}, // __builtin_HEXAGON_V6_vdmpyhisat
+      {Intrinsic::hexagon_V6_vdmpyhisat_128B, 39891}, // __builtin_HEXAGON_V6_vdmpyhisat_128B
+      {Intrinsic::hexagon_V6_vdmpyhisat_acc, 39928}, // __builtin_HEXAGON_V6_vdmpyhisat_acc
+      {Intrinsic::hexagon_V6_vdmpyhisat_acc_128B, 39964}, // __builtin_HEXAGON_V6_vdmpyhisat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsat, 40005}, // __builtin_HEXAGON_V6_vdmpyhsat
+      {Intrinsic::hexagon_V6_vdmpyhsat_128B, 40036}, // __builtin_HEXAGON_V6_vdmpyhsat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsat_acc, 40072}, // __builtin_HEXAGON_V6_vdmpyhsat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsat_acc_128B, 40107}, // __builtin_HEXAGON_V6_vdmpyhsat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsuisat, 40147}, // __builtin_HEXAGON_V6_vdmpyhsuisat
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_128B, 40181}, // __builtin_HEXAGON_V6_vdmpyhsuisat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc, 40220}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc_128B, 40258}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhsusat, 40301}, // __builtin_HEXAGON_V6_vdmpyhsusat
+      {Intrinsic::hexagon_V6_vdmpyhsusat_128B, 40334}, // __builtin_HEXAGON_V6_vdmpyhsusat_128B
+      {Intrinsic::hexagon_V6_vdmpyhsusat_acc, 40372}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc
+      {Intrinsic::hexagon_V6_vdmpyhsusat_acc_128B, 40409}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc_128B
+      {Intrinsic::hexagon_V6_vdmpyhvsat, 40451}, // __builtin_HEXAGON_V6_vdmpyhvsat
+      {Intrinsic::hexagon_V6_vdmpyhvsat_128B, 40483}, // __builtin_HEXAGON_V6_vdmpyhvsat_128B
+      {Intrinsic::hexagon_V6_vdmpyhvsat_acc, 40520}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc
+      {Intrinsic::hexagon_V6_vdmpyhvsat_acc_128B, 40556}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc_128B
+      {Intrinsic::hexagon_V6_vdsaduh, 40597}, // __builtin_HEXAGON_V6_vdsaduh
+      {Intrinsic::hexagon_V6_vdsaduh_128B, 40626}, // __builtin_HEXAGON_V6_vdsaduh_128B
+      {Intrinsic::hexagon_V6_vdsaduh_acc, 40660}, // __builtin_HEXAGON_V6_vdsaduh_acc
+      {Intrinsic::hexagon_V6_vdsaduh_acc_128B, 40693}, // __builtin_HEXAGON_V6_vdsaduh_acc_128B
+      {Intrinsic::hexagon_V6_veqb, 40731}, // __builtin_HEXAGON_V6_veqb
+      {Intrinsic::hexagon_V6_veqb_128B, 40757}, // __builtin_HEXAGON_V6_veqb_128B
+      {Intrinsic::hexagon_V6_veqb_and, 40788}, // __builtin_HEXAGON_V6_veqb_and
+      {Intrinsic::hexagon_V6_veqb_and_128B, 40818}, // __builtin_HEXAGON_V6_veqb_and_128B
+      {Intrinsic::hexagon_V6_veqb_or, 40853}, // __builtin_HEXAGON_V6_veqb_or
+      {Intrinsic::hexagon_V6_veqb_or_128B, 40882}, // __builtin_HEXAGON_V6_veqb_or_128B
+      {Intrinsic::hexagon_V6_veqb_xor, 40916}, // __builtin_HEXAGON_V6_veqb_xor
+      {Intrinsic::hexagon_V6_veqb_xor_128B, 40946}, // __builtin_HEXAGON_V6_veqb_xor_128B
+      {Intrinsic::hexagon_V6_veqh, 40981}, // __builtin_HEXAGON_V6_veqh
+      {Intrinsic::hexagon_V6_veqh_128B, 41007}, // __builtin_HEXAGON_V6_veqh_128B
+      {Intrinsic::hexagon_V6_veqh_and, 41038}, // __builtin_HEXAGON_V6_veqh_and
+      {Intrinsic::hexagon_V6_veqh_and_128B, 41068}, // __builtin_HEXAGON_V6_veqh_and_128B
+      {Intrinsic::hexagon_V6_veqh_or, 41103}, // __builtin_HEXAGON_V6_veqh_or
+      {Intrinsic::hexagon_V6_veqh_or_128B, 41132}, // __builtin_HEXAGON_V6_veqh_or_128B
+      {Intrinsic::hexagon_V6_veqh_xor, 41166}, // __builtin_HEXAGON_V6_veqh_xor
+      {Intrinsic::hexagon_V6_veqh_xor_128B, 41196}, // __builtin_HEXAGON_V6_veqh_xor_128B
+      {Intrinsic::hexagon_V6_veqw, 41231}, // __builtin_HEXAGON_V6_veqw
+      {Intrinsic::hexagon_V6_veqw_128B, 41257}, // __builtin_HEXAGON_V6_veqw_128B
+      {Intrinsic::hexagon_V6_veqw_and, 41288}, // __builtin_HEXAGON_V6_veqw_and
+      {Intrinsic::hexagon_V6_veqw_and_128B, 41318}, // __builtin_HEXAGON_V6_veqw_and_128B
+      {Intrinsic::hexagon_V6_veqw_or, 41353}, // __builtin_HEXAGON_V6_veqw_or
+      {Intrinsic::hexagon_V6_veqw_or_128B, 41382}, // __builtin_HEXAGON_V6_veqw_or_128B
+      {Intrinsic::hexagon_V6_veqw_xor, 41416}, // __builtin_HEXAGON_V6_veqw_xor
+      {Intrinsic::hexagon_V6_veqw_xor_128B, 41446}, // __builtin_HEXAGON_V6_veqw_xor_128B
+      {Intrinsic::hexagon_V6_vgathermh, 41481}, // __builtin_HEXAGON_V6_vgathermh
+      {Intrinsic::hexagon_V6_vgathermh_128B, 41512}, // __builtin_HEXAGON_V6_vgathermh_128B
+      {Intrinsic::hexagon_V6_vgathermhq, 41548}, // __builtin_HEXAGON_V6_vgathermhq
+      {Intrinsic::hexagon_V6_vgathermhq_128B, 41580}, // __builtin_HEXAGON_V6_vgathermhq_128B
+      {Intrinsic::hexagon_V6_vgathermhw, 41617}, // __builtin_HEXAGON_V6_vgathermhw
+      {Intrinsic::hexagon_V6_vgathermhw_128B, 41649}, // __builtin_HEXAGON_V6_vgathermhw_128B
+      {Intrinsic::hexagon_V6_vgathermhwq, 41686}, // __builtin_HEXAGON_V6_vgathermhwq
+      {Intrinsic::hexagon_V6_vgathermhwq_128B, 41719}, // __builtin_HEXAGON_V6_vgathermhwq_128B
+      {Intrinsic::hexagon_V6_vgathermw, 41757}, // __builtin_HEXAGON_V6_vgathermw
+      {Intrinsic::hexagon_V6_vgathermw_128B, 41788}, // __builtin_HEXAGON_V6_vgathermw_128B
+      {Intrinsic::hexagon_V6_vgathermwq, 41824}, // __builtin_HEXAGON_V6_vgathermwq
+      {Intrinsic::hexagon_V6_vgathermwq_128B, 41856}, // __builtin_HEXAGON_V6_vgathermwq_128B
+      {Intrinsic::hexagon_V6_vgtb, 41893}, // __builtin_HEXAGON_V6_vgtb
+      {Intrinsic::hexagon_V6_vgtb_128B, 41919}, // __builtin_HEXAGON_V6_vgtb_128B
+      {Intrinsic::hexagon_V6_vgtb_and, 41950}, // __builtin_HEXAGON_V6_vgtb_and
+      {Intrinsic::hexagon_V6_vgtb_and_128B, 41980}, // __builtin_HEXAGON_V6_vgtb_and_128B
+      {Intrinsic::hexagon_V6_vgtb_or, 42015}, // __builtin_HEXAGON_V6_vgtb_or
+      {Intrinsic::hexagon_V6_vgtb_or_128B, 42044}, // __builtin_HEXAGON_V6_vgtb_or_128B
+      {Intrinsic::hexagon_V6_vgtb_xor, 42078}, // __builtin_HEXAGON_V6_vgtb_xor
+      {Intrinsic::hexagon_V6_vgtb_xor_128B, 42108}, // __builtin_HEXAGON_V6_vgtb_xor_128B
+      {Intrinsic::hexagon_V6_vgth, 42143}, // __builtin_HEXAGON_V6_vgth
+      {Intrinsic::hexagon_V6_vgth_128B, 42169}, // __builtin_HEXAGON_V6_vgth_128B
+      {Intrinsic::hexagon_V6_vgth_and, 42200}, // __builtin_HEXAGON_V6_vgth_and
+      {Intrinsic::hexagon_V6_vgth_and_128B, 42230}, // __builtin_HEXAGON_V6_vgth_and_128B
+      {Intrinsic::hexagon_V6_vgth_or, 42265}, // __builtin_HEXAGON_V6_vgth_or
+      {Intrinsic::hexagon_V6_vgth_or_128B, 42294}, // __builtin_HEXAGON_V6_vgth_or_128B
+      {Intrinsic::hexagon_V6_vgth_xor, 42328}, // __builtin_HEXAGON_V6_vgth_xor
+      {Intrinsic::hexagon_V6_vgth_xor_128B, 42358}, // __builtin_HEXAGON_V6_vgth_xor_128B
+      {Intrinsic::hexagon_V6_vgtub, 42393}, // __builtin_HEXAGON_V6_vgtub
+      {Intrinsic::hexagon_V6_vgtub_128B, 42420}, // __builtin_HEXAGON_V6_vgtub_128B
+      {Intrinsic::hexagon_V6_vgtub_and, 42452}, // __builtin_HEXAGON_V6_vgtub_and
+      {Intrinsic::hexagon_V6_vgtub_and_128B, 42483}, // __builtin_HEXAGON_V6_vgtub_and_128B
+      {Intrinsic::hexagon_V6_vgtub_or, 42519}, // __builtin_HEXAGON_V6_vgtub_or
+      {Intrinsic::hexagon_V6_vgtub_or_128B, 42549}, // __builtin_HEXAGON_V6_vgtub_or_128B
+      {Intrinsic::hexagon_V6_vgtub_xor, 42584}, // __builtin_HEXAGON_V6_vgtub_xor
+      {Intrinsic::hexagon_V6_vgtub_xor_128B, 42615}, // __builtin_HEXAGON_V6_vgtub_xor_128B
+      {Intrinsic::hexagon_V6_vgtuh, 42651}, // __builtin_HEXAGON_V6_vgtuh
+      {Intrinsic::hexagon_V6_vgtuh_128B, 42678}, // __builtin_HEXAGON_V6_vgtuh_128B
+      {Intrinsic::hexagon_V6_vgtuh_and, 42710}, // __builtin_HEXAGON_V6_vgtuh_and
+      {Intrinsic::hexagon_V6_vgtuh_and_128B, 42741}, // __builtin_HEXAGON_V6_vgtuh_and_128B
+      {Intrinsic::hexagon_V6_vgtuh_or, 42777}, // __builtin_HEXAGON_V6_vgtuh_or
+      {Intrinsic::hexagon_V6_vgtuh_or_128B, 42807}, // __builtin_HEXAGON_V6_vgtuh_or_128B
+      {Intrinsic::hexagon_V6_vgtuh_xor, 42842}, // __builtin_HEXAGON_V6_vgtuh_xor
+      {Intrinsic::hexagon_V6_vgtuh_xor_128B, 42873}, // __builtin_HEXAGON_V6_vgtuh_xor_128B
+      {Intrinsic::hexagon_V6_vgtuw, 42909}, // __builtin_HEXAGON_V6_vgtuw
+      {Intrinsic::hexagon_V6_vgtuw_128B, 42936}, // __builtin_HEXAGON_V6_vgtuw_128B
+      {Intrinsic::hexagon_V6_vgtuw_and, 42968}, // __builtin_HEXAGON_V6_vgtuw_and
+      {Intrinsic::hexagon_V6_vgtuw_and_128B, 42999}, // __builtin_HEXAGON_V6_vgtuw_and_128B
+      {Intrinsic::hexagon_V6_vgtuw_or, 43035}, // __builtin_HEXAGON_V6_vgtuw_or
+      {Intrinsic::hexagon_V6_vgtuw_or_128B, 43065}, // __builtin_HEXAGON_V6_vgtuw_or_128B
+      {Intrinsic::hexagon_V6_vgtuw_xor, 43100}, // __builtin_HEXAGON_V6_vgtuw_xor
+      {Intrinsic::hexagon_V6_vgtuw_xor_128B, 43131}, // __builtin_HEXAGON_V6_vgtuw_xor_128B
+      {Intrinsic::hexagon_V6_vgtw, 43167}, // __builtin_HEXAGON_V6_vgtw
+      {Intrinsic::hexagon_V6_vgtw_128B, 43193}, // __builtin_HEXAGON_V6_vgtw_128B
+      {Intrinsic::hexagon_V6_vgtw_and, 43224}, // __builtin_HEXAGON_V6_vgtw_and
+      {Intrinsic::hexagon_V6_vgtw_and_128B, 43254}, // __builtin_HEXAGON_V6_vgtw_and_128B
+      {Intrinsic::hexagon_V6_vgtw_or, 43289}, // __builtin_HEXAGON_V6_vgtw_or
+      {Intrinsic::hexagon_V6_vgtw_or_128B, 43318}, // __builtin_HEXAGON_V6_vgtw_or_128B
+      {Intrinsic::hexagon_V6_vgtw_xor, 43352}, // __builtin_HEXAGON_V6_vgtw_xor
+      {Intrinsic::hexagon_V6_vgtw_xor_128B, 43382}, // __builtin_HEXAGON_V6_vgtw_xor_128B
+      {Intrinsic::hexagon_V6_vinsertwr, 43417}, // __builtin_HEXAGON_V6_vinsertwr
+      {Intrinsic::hexagon_V6_vinsertwr_128B, 43448}, // __builtin_HEXAGON_V6_vinsertwr_128B
+      {Intrinsic::hexagon_V6_vlalignb, 43484}, // __builtin_HEXAGON_V6_vlalignb
+      {Intrinsic::hexagon_V6_vlalignb_128B, 43514}, // __builtin_HEXAGON_V6_vlalignb_128B
+      {Intrinsic::hexagon_V6_vlalignbi, 43549}, // __builtin_HEXAGON_V6_vlalignbi
+      {Intrinsic::hexagon_V6_vlalignbi_128B, 43580}, // __builtin_HEXAGON_V6_vlalignbi_128B
+      {Intrinsic::hexagon_V6_vlsrb, 43616}, // __builtin_HEXAGON_V6_vlsrb
+      {Intrinsic::hexagon_V6_vlsrb_128B, 43643}, // __builtin_HEXAGON_V6_vlsrb_128B
+      {Intrinsic::hexagon_V6_vlsrh, 43675}, // __builtin_HEXAGON_V6_vlsrh
+      {Intrinsic::hexagon_V6_vlsrh_128B, 43702}, // __builtin_HEXAGON_V6_vlsrh_128B
+      {Intrinsic::hexagon_V6_vlsrhv, 43734}, // __builtin_HEXAGON_V6_vlsrhv
+      {Intrinsic::hexagon_V6_vlsrhv_128B, 43762}, // __builtin_HEXAGON_V6_vlsrhv_128B
+      {Intrinsic::hexagon_V6_vlsrw, 43795}, // __builtin_HEXAGON_V6_vlsrw
+      {Intrinsic::hexagon_V6_vlsrw_128B, 43822}, // __builtin_HEXAGON_V6_vlsrw_128B
+      {Intrinsic::hexagon_V6_vlsrwv, 43854}, // __builtin_HEXAGON_V6_vlsrwv
+      {Intrinsic::hexagon_V6_vlsrwv_128B, 43882}, // __builtin_HEXAGON_V6_vlsrwv_128B
+      {Intrinsic::hexagon_V6_vlut4, 43915}, // __builtin_HEXAGON_V6_vlut4
+      {Intrinsic::hexagon_V6_vlut4_128B, 43942}, // __builtin_HEXAGON_V6_vlut4_128B
+      {Intrinsic::hexagon_V6_vlutvvb, 43974}, // __builtin_HEXAGON_V6_vlutvvb
+      {Intrinsic::hexagon_V6_vlutvvb_128B, 44003}, // __builtin_HEXAGON_V6_vlutvvb_128B
+      {Intrinsic::hexagon_V6_vlutvvb_nm, 44037}, // __builtin_HEXAGON_V6_vlutvvb_nm
+      {Intrinsic::hexagon_V6_vlutvvb_nm_128B, 44069}, // __builtin_HEXAGON_V6_vlutvvb_nm_128B
+      {Intrinsic::hexagon_V6_vlutvvb_oracc, 44106}, // __builtin_HEXAGON_V6_vlutvvb_oracc
+      {Intrinsic::hexagon_V6_vlutvvb_oracc_128B, 44141}, // __builtin_HEXAGON_V6_vlutvvb_oracc_128B
+      {Intrinsic::hexagon_V6_vlutvvb_oracci, 44181}, // __builtin_HEXAGON_V6_vlutvvb_oracci
+      {Intrinsic::hexagon_V6_vlutvvb_oracci_128B, 44217}, // __builtin_HEXAGON_V6_vlutvvb_oracci_128B
+      {Intrinsic::hexagon_V6_vlutvvbi, 44258}, // __builtin_HEXAGON_V6_vlutvvbi
+      {Intrinsic::hexagon_V6_vlutvvbi_128B, 44288}, // __builtin_HEXAGON_V6_vlutvvbi_128B
+      {Intrinsic::hexagon_V6_vlutvwh, 44323}, // __builtin_HEXAGON_V6_vlutvwh
+      {Intrinsic::hexagon_V6_vlutvwh_128B, 44352}, // __builtin_HEXAGON_V6_vlutvwh_128B
+      {Intrinsic::hexagon_V6_vlutvwh_nm, 44386}, // __builtin_HEXAGON_V6_vlutvwh_nm
+      {Intrinsic::hexagon_V6_vlutvwh_nm_128B, 44418}, // __builtin_HEXAGON_V6_vlutvwh_nm_128B
+      {Intrinsic::hexagon_V6_vlutvwh_oracc, 44455}, // __builtin_HEXAGON_V6_vlutvwh_oracc
+      {Intrinsic::hexagon_V6_vlutvwh_oracc_128B, 44490}, // __builtin_HEXAGON_V6_vlutvwh_oracc_128B
+      {Intrinsic::hexagon_V6_vlutvwh_oracci, 44530}, // __builtin_HEXAGON_V6_vlutvwh_oracci
+      {Intrinsic::hexagon_V6_vlutvwh_oracci_128B, 44566}, // __builtin_HEXAGON_V6_vlutvwh_oracci_128B
+      {Intrinsic::hexagon_V6_vlutvwhi, 44607}, // __builtin_HEXAGON_V6_vlutvwhi
+      {Intrinsic::hexagon_V6_vlutvwhi_128B, 44637}, // __builtin_HEXAGON_V6_vlutvwhi_128B
+      {Intrinsic::hexagon_V6_vmaskedstorenq, 44672}, // __builtin_HEXAGON_V6_vmaskedstorenq
+      {Intrinsic::hexagon_V6_vmaskedstorenq_128B, 44708}, // __builtin_HEXAGON_V6_vmaskedstorenq_128B
+      {Intrinsic::hexagon_V6_vmaskedstorentnq, 44749}, // __builtin_HEXAGON_V6_vmaskedstorentnq
+      {Intrinsic::hexagon_V6_vmaskedstorentnq_128B, 44787}, // __builtin_HEXAGON_V6_vmaskedstorentnq_128B
+      {Intrinsic::hexagon_V6_vmaskedstorentq, 44830}, // __builtin_HEXAGON_V6_vmaskedstorentq
+      {Intrinsic::hexagon_V6_vmaskedstorentq_128B, 44867}, // __builtin_HEXAGON_V6_vmaskedstorentq_128B
+      {Intrinsic::hexagon_V6_vmaskedstoreq, 44909}, // __builtin_HEXAGON_V6_vmaskedstoreq
+      {Intrinsic::hexagon_V6_vmaskedstoreq_128B, 44944}, // __builtin_HEXAGON_V6_vmaskedstoreq_128B
+      {Intrinsic::hexagon_V6_vmaxb, 44984}, // __builtin_HEXAGON_V6_vmaxb
+      {Intrinsic::hexagon_V6_vmaxb_128B, 45011}, // __builtin_HEXAGON_V6_vmaxb_128B
+      {Intrinsic::hexagon_V6_vmaxh, 45043}, // __builtin_HEXAGON_V6_vmaxh
+      {Intrinsic::hexagon_V6_vmaxh_128B, 45070}, // __builtin_HEXAGON_V6_vmaxh_128B
+      {Intrinsic::hexagon_V6_vmaxub, 45102}, // __builtin_HEXAGON_V6_vmaxub
+      {Intrinsic::hexagon_V6_vmaxub_128B, 45130}, // __builtin_HEXAGON_V6_vmaxub_128B
+      {Intrinsic::hexagon_V6_vmaxuh, 45163}, // __builtin_HEXAGON_V6_vmaxuh
+      {Intrinsic::hexagon_V6_vmaxuh_128B, 45191}, // __builtin_HEXAGON_V6_vmaxuh_128B
+      {Intrinsic::hexagon_V6_vmaxw, 45224}, // __builtin_HEXAGON_V6_vmaxw
+      {Intrinsic::hexagon_V6_vmaxw_128B, 45251}, // __builtin_HEXAGON_V6_vmaxw_128B
+      {Intrinsic::hexagon_V6_vminb, 45283}, // __builtin_HEXAGON_V6_vminb
+      {Intrinsic::hexagon_V6_vminb_128B, 45310}, // __builtin_HEXAGON_V6_vminb_128B
+      {Intrinsic::hexagon_V6_vminh, 45342}, // __builtin_HEXAGON_V6_vminh
+      {Intrinsic::hexagon_V6_vminh_128B, 45369}, // __builtin_HEXAGON_V6_vminh_128B
+      {Intrinsic::hexagon_V6_vminub, 45401}, // __builtin_HEXAGON_V6_vminub
+      {Intrinsic::hexagon_V6_vminub_128B, 45429}, // __builtin_HEXAGON_V6_vminub_128B
+      {Intrinsic::hexagon_V6_vminuh, 45462}, // __builtin_HEXAGON_V6_vminuh
+      {Intrinsic::hexagon_V6_vminuh_128B, 45490}, // __builtin_HEXAGON_V6_vminuh_128B
+      {Intrinsic::hexagon_V6_vminw, 45523}, // __builtin_HEXAGON_V6_vminw
+      {Intrinsic::hexagon_V6_vminw_128B, 45550}, // __builtin_HEXAGON_V6_vminw_128B
+      {Intrinsic::hexagon_V6_vmpabus, 45582}, // __builtin_HEXAGON_V6_vmpabus
+      {Intrinsic::hexagon_V6_vmpabus_128B, 45611}, // __builtin_HEXAGON_V6_vmpabus_128B
+      {Intrinsic::hexagon_V6_vmpabus_acc, 45645}, // __builtin_HEXAGON_V6_vmpabus_acc
+      {Intrinsic::hexagon_V6_vmpabus_acc_128B, 45678}, // __builtin_HEXAGON_V6_vmpabus_acc_128B
+      {Intrinsic::hexagon_V6_vmpabusv, 45716}, // __builtin_HEXAGON_V6_vmpabusv
+      {Intrinsic::hexagon_V6_vmpabusv_128B, 45746}, // __builtin_HEXAGON_V6_vmpabusv_128B
+      {Intrinsic::hexagon_V6_vmpabuu, 45781}, // __builtin_HEXAGON_V6_vmpabuu
+      {Intrinsic::hexagon_V6_vmpabuu_128B, 45810}, // __builtin_HEXAGON_V6_vmpabuu_128B
+      {Intrinsic::hexagon_V6_vmpabuu_acc, 45844}, // __builtin_HEXAGON_V6_vmpabuu_acc
+      {Intrinsic::hexagon_V6_vmpabuu_acc_128B, 45877}, // __builtin_HEXAGON_V6_vmpabuu_acc_128B
+      {Intrinsic::hexagon_V6_vmpabuuv, 45915}, // __builtin_HEXAGON_V6_vmpabuuv
+      {Intrinsic::hexagon_V6_vmpabuuv_128B, 45945}, // __builtin_HEXAGON_V6_vmpabuuv_128B
+      {Intrinsic::hexagon_V6_vmpahb, 45980}, // __builtin_HEXAGON_V6_vmpahb
+      {Intrinsic::hexagon_V6_vmpahb_128B, 46008}, // __builtin_HEXAGON_V6_vmpahb_128B
+      {Intrinsic::hexagon_V6_vmpahb_acc, 46041}, // __builtin_HEXAGON_V6_vmpahb_acc
+      {Intrinsic::hexagon_V6_vmpahb_acc_128B, 46073}, // __builtin_HEXAGON_V6_vmpahb_acc_128B
+      {Intrinsic::hexagon_V6_vmpahhsat, 46110}, // __builtin_HEXAGON_V6_vmpahhsat
+      {Intrinsic::hexagon_V6_vmpahhsat_128B, 46141}, // __builtin_HEXAGON_V6_vmpahhsat_128B
+      {Intrinsic::hexagon_V6_vmpauhb, 46177}, // __builtin_HEXAGON_V6_vmpauhb
+      {Intrinsic::hexagon_V6_vmpauhb_128B, 46206}, // __builtin_HEXAGON_V6_vmpauhb_128B
+      {Intrinsic::hexagon_V6_vmpauhb_acc, 46240}, // __builtin_HEXAGON_V6_vmpauhb_acc
+      {Intrinsic::hexagon_V6_vmpauhb_acc_128B, 46273}, // __builtin_HEXAGON_V6_vmpauhb_acc_128B
+      {Intrinsic::hexagon_V6_vmpauhuhsat, 46311}, // __builtin_HEXAGON_V6_vmpauhuhsat
+      {Intrinsic::hexagon_V6_vmpauhuhsat_128B, 46344}, // __builtin_HEXAGON_V6_vmpauhuhsat_128B
+      {Intrinsic::hexagon_V6_vmpsuhuhsat, 46382}, // __builtin_HEXAGON_V6_vmpsuhuhsat
+      {Intrinsic::hexagon_V6_vmpsuhuhsat_128B, 46415}, // __builtin_HEXAGON_V6_vmpsuhuhsat_128B
+      {Intrinsic::hexagon_V6_vmpybus, 46453}, // __builtin_HEXAGON_V6_vmpybus
+      {Intrinsic::hexagon_V6_vmpybus_128B, 46482}, // __builtin_HEXAGON_V6_vmpybus_128B
+      {Intrinsic::hexagon_V6_vmpybus_acc, 46516}, // __builtin_HEXAGON_V6_vmpybus_acc
+      {Intrinsic::hexagon_V6_vmpybus_acc_128B, 46549}, // __builtin_HEXAGON_V6_vmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vmpybusv, 46587}, // __builtin_HEXAGON_V6_vmpybusv
+      {Intrinsic::hexagon_V6_vmpybusv_128B, 46617}, // __builtin_HEXAGON_V6_vmpybusv_128B
+      {Intrinsic::hexagon_V6_vmpybusv_acc, 46652}, // __builtin_HEXAGON_V6_vmpybusv_acc
+      {Intrinsic::hexagon_V6_vmpybusv_acc_128B, 46686}, // __builtin_HEXAGON_V6_vmpybusv_acc_128B
+      {Intrinsic::hexagon_V6_vmpybv, 46725}, // __builtin_HEXAGON_V6_vmpybv
+      {Intrinsic::hexagon_V6_vmpybv_128B, 46753}, // __builtin_HEXAGON_V6_vmpybv_128B
+      {Intrinsic::hexagon_V6_vmpybv_acc, 46786}, // __builtin_HEXAGON_V6_vmpybv_acc
+      {Intrinsic::hexagon_V6_vmpybv_acc_128B, 46818}, // __builtin_HEXAGON_V6_vmpybv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyewuh, 46855}, // __builtin_HEXAGON_V6_vmpyewuh
+      {Intrinsic::hexagon_V6_vmpyewuh_128B, 46885}, // __builtin_HEXAGON_V6_vmpyewuh_128B
+      {Intrinsic::hexagon_V6_vmpyewuh_64, 46920}, // __builtin_HEXAGON_V6_vmpyewuh_64
+      {Intrinsic::hexagon_V6_vmpyewuh_64_128B, 46953}, // __builtin_HEXAGON_V6_vmpyewuh_64_128B
+      {Intrinsic::hexagon_V6_vmpyh, 46991}, // __builtin_HEXAGON_V6_vmpyh
+      {Intrinsic::hexagon_V6_vmpyh_128B, 47018}, // __builtin_HEXAGON_V6_vmpyh_128B
+      {Intrinsic::hexagon_V6_vmpyh_acc, 47050}, // __builtin_HEXAGON_V6_vmpyh_acc
+      {Intrinsic::hexagon_V6_vmpyh_acc_128B, 47081}, // __builtin_HEXAGON_V6_vmpyh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhsat_acc, 47117}, // __builtin_HEXAGON_V6_vmpyhsat_acc
+      {Intrinsic::hexagon_V6_vmpyhsat_acc_128B, 47151}, // __builtin_HEXAGON_V6_vmpyhsat_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhsrs, 47190}, // __builtin_HEXAGON_V6_vmpyhsrs
+      {Intrinsic::hexagon_V6_vmpyhsrs_128B, 47220}, // __builtin_HEXAGON_V6_vmpyhsrs_128B
+      {Intrinsic::hexagon_V6_vmpyhss, 47255}, // __builtin_HEXAGON_V6_vmpyhss
+      {Intrinsic::hexagon_V6_vmpyhss_128B, 47284}, // __builtin_HEXAGON_V6_vmpyhss_128B
+      {Intrinsic::hexagon_V6_vmpyhus, 47318}, // __builtin_HEXAGON_V6_vmpyhus
+      {Intrinsic::hexagon_V6_vmpyhus_128B, 47347}, // __builtin_HEXAGON_V6_vmpyhus_128B
+      {Intrinsic::hexagon_V6_vmpyhus_acc, 47381}, // __builtin_HEXAGON_V6_vmpyhus_acc
+      {Intrinsic::hexagon_V6_vmpyhus_acc_128B, 47414}, // __builtin_HEXAGON_V6_vmpyhus_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhv, 47452}, // __builtin_HEXAGON_V6_vmpyhv
+      {Intrinsic::hexagon_V6_vmpyhv_128B, 47480}, // __builtin_HEXAGON_V6_vmpyhv_128B
+      {Intrinsic::hexagon_V6_vmpyhv_acc, 47513}, // __builtin_HEXAGON_V6_vmpyhv_acc
+      {Intrinsic::hexagon_V6_vmpyhv_acc_128B, 47545}, // __builtin_HEXAGON_V6_vmpyhv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyhvsrs, 47582}, // __builtin_HEXAGON_V6_vmpyhvsrs
+      {Intrinsic::hexagon_V6_vmpyhvsrs_128B, 47613}, // __builtin_HEXAGON_V6_vmpyhvsrs_128B
+      {Intrinsic::hexagon_V6_vmpyieoh, 47649}, // __builtin_HEXAGON_V6_vmpyieoh
+      {Intrinsic::hexagon_V6_vmpyieoh_128B, 47679}, // __builtin_HEXAGON_V6_vmpyieoh_128B
+      {Intrinsic::hexagon_V6_vmpyiewh_acc, 47714}, // __builtin_HEXAGON_V6_vmpyiewh_acc
+      {Intrinsic::hexagon_V6_vmpyiewh_acc_128B, 47748}, // __builtin_HEXAGON_V6_vmpyiewh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiewuh, 47787}, // __builtin_HEXAGON_V6_vmpyiewuh
+      {Intrinsic::hexagon_V6_vmpyiewuh_128B, 47818}, // __builtin_HEXAGON_V6_vmpyiewuh_128B
+      {Intrinsic::hexagon_V6_vmpyiewuh_acc, 47854}, // __builtin_HEXAGON_V6_vmpyiewuh_acc
+      {Intrinsic::hexagon_V6_vmpyiewuh_acc_128B, 47889}, // __builtin_HEXAGON_V6_vmpyiewuh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyih, 47929}, // __builtin_HEXAGON_V6_vmpyih
+      {Intrinsic::hexagon_V6_vmpyih_128B, 47957}, // __builtin_HEXAGON_V6_vmpyih_128B
+      {Intrinsic::hexagon_V6_vmpyih_acc, 47990}, // __builtin_HEXAGON_V6_vmpyih_acc
+      {Intrinsic::hexagon_V6_vmpyih_acc_128B, 48022}, // __builtin_HEXAGON_V6_vmpyih_acc_128B
+      {Intrinsic::hexagon_V6_vmpyihb, 48059}, // __builtin_HEXAGON_V6_vmpyihb
+      {Intrinsic::hexagon_V6_vmpyihb_128B, 48088}, // __builtin_HEXAGON_V6_vmpyihb_128B
+      {Intrinsic::hexagon_V6_vmpyihb_acc, 48122}, // __builtin_HEXAGON_V6_vmpyihb_acc
+      {Intrinsic::hexagon_V6_vmpyihb_acc_128B, 48155}, // __builtin_HEXAGON_V6_vmpyihb_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiowh, 48193}, // __builtin_HEXAGON_V6_vmpyiowh
+      {Intrinsic::hexagon_V6_vmpyiowh_128B, 48223}, // __builtin_HEXAGON_V6_vmpyiowh_128B
+      {Intrinsic::hexagon_V6_vmpyiwb, 48258}, // __builtin_HEXAGON_V6_vmpyiwb
+      {Intrinsic::hexagon_V6_vmpyiwb_128B, 48287}, // __builtin_HEXAGON_V6_vmpyiwb_128B
+      {Intrinsic::hexagon_V6_vmpyiwb_acc, 48321}, // __builtin_HEXAGON_V6_vmpyiwb_acc
+      {Intrinsic::hexagon_V6_vmpyiwb_acc_128B, 48354}, // __builtin_HEXAGON_V6_vmpyiwb_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiwh, 48392}, // __builtin_HEXAGON_V6_vmpyiwh
+      {Intrinsic::hexagon_V6_vmpyiwh_128B, 48421}, // __builtin_HEXAGON_V6_vmpyiwh_128B
+      {Intrinsic::hexagon_V6_vmpyiwh_acc, 48455}, // __builtin_HEXAGON_V6_vmpyiwh_acc
+      {Intrinsic::hexagon_V6_vmpyiwh_acc_128B, 48488}, // __builtin_HEXAGON_V6_vmpyiwh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyiwub, 48526}, // __builtin_HEXAGON_V6_vmpyiwub
+      {Intrinsic::hexagon_V6_vmpyiwub_128B, 48556}, // __builtin_HEXAGON_V6_vmpyiwub_128B
+      {Intrinsic::hexagon_V6_vmpyiwub_acc, 48591}, // __builtin_HEXAGON_V6_vmpyiwub_acc
+      {Intrinsic::hexagon_V6_vmpyiwub_acc_128B, 48625}, // __builtin_HEXAGON_V6_vmpyiwub_acc_128B
+      {Intrinsic::hexagon_V6_vmpyowh, 48664}, // __builtin_HEXAGON_V6_vmpyowh
+      {Intrinsic::hexagon_V6_vmpyowh_128B, 48693}, // __builtin_HEXAGON_V6_vmpyowh_128B
+      {Intrinsic::hexagon_V6_vmpyowh_64_acc, 48727}, // __builtin_HEXAGON_V6_vmpyowh_64_acc
+      {Intrinsic::hexagon_V6_vmpyowh_64_acc_128B, 48763}, // __builtin_HEXAGON_V6_vmpyowh_64_acc_128B
+      {Intrinsic::hexagon_V6_vmpyowh_rnd, 48804}, // __builtin_HEXAGON_V6_vmpyowh_rnd
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_128B, 48837}, // __builtin_HEXAGON_V6_vmpyowh_rnd_128B
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc, 48875}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc
+      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc_128B, 48913}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc_128B
+      {Intrinsic::hexagon_V6_vmpyowh_sacc, 48956}, // __builtin_HEXAGON_V6_vmpyowh_sacc
+      {Intrinsic::hexagon_V6_vmpyowh_sacc_128B, 48990}, // __builtin_HEXAGON_V6_vmpyowh_sacc_128B
+      {Intrinsic::hexagon_V6_vmpyub, 49029}, // __builtin_HEXAGON_V6_vmpyub
+      {Intrinsic::hexagon_V6_vmpyub_128B, 49057}, // __builtin_HEXAGON_V6_vmpyub_128B
+      {Intrinsic::hexagon_V6_vmpyub_acc, 49090}, // __builtin_HEXAGON_V6_vmpyub_acc
+      {Intrinsic::hexagon_V6_vmpyub_acc_128B, 49122}, // __builtin_HEXAGON_V6_vmpyub_acc_128B
+      {Intrinsic::hexagon_V6_vmpyubv, 49159}, // __builtin_HEXAGON_V6_vmpyubv
+      {Intrinsic::hexagon_V6_vmpyubv_128B, 49188}, // __builtin_HEXAGON_V6_vmpyubv_128B
+      {Intrinsic::hexagon_V6_vmpyubv_acc, 49222}, // __builtin_HEXAGON_V6_vmpyubv_acc
+      {Intrinsic::hexagon_V6_vmpyubv_acc_128B, 49255}, // __builtin_HEXAGON_V6_vmpyubv_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuh, 49293}, // __builtin_HEXAGON_V6_vmpyuh
+      {Intrinsic::hexagon_V6_vmpyuh_128B, 49321}, // __builtin_HEXAGON_V6_vmpyuh_128B
+      {Intrinsic::hexagon_V6_vmpyuh_acc, 49354}, // __builtin_HEXAGON_V6_vmpyuh_acc
+      {Intrinsic::hexagon_V6_vmpyuh_acc_128B, 49386}, // __builtin_HEXAGON_V6_vmpyuh_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuhe, 49423}, // __builtin_HEXAGON_V6_vmpyuhe
+      {Intrinsic::hexagon_V6_vmpyuhe_128B, 49452}, // __builtin_HEXAGON_V6_vmpyuhe_128B
+      {Intrinsic::hexagon_V6_vmpyuhe_acc, 49486}, // __builtin_HEXAGON_V6_vmpyuhe_acc
+      {Intrinsic::hexagon_V6_vmpyuhe_acc_128B, 49519}, // __builtin_HEXAGON_V6_vmpyuhe_acc_128B
+      {Intrinsic::hexagon_V6_vmpyuhv, 49557}, // __builtin_HEXAGON_V6_vmpyuhv
+      {Intrinsic::hexagon_V6_vmpyuhv_128B, 49586}, // __builtin_HEXAGON_V6_vmpyuhv_128B
+      {Intrinsic::hexagon_V6_vmpyuhv_acc, 49620}, // __builtin_HEXAGON_V6_vmpyuhv_acc
+      {Intrinsic::hexagon_V6_vmpyuhv_acc_128B, 49653}, // __builtin_HEXAGON_V6_vmpyuhv_acc_128B
+      {Intrinsic::hexagon_V6_vmux, 49691}, // __builtin_HEXAGON_V6_vmux
+      {Intrinsic::hexagon_V6_vmux_128B, 49717}, // __builtin_HEXAGON_V6_vmux_128B
+      {Intrinsic::hexagon_V6_vnavgb, 49748}, // __builtin_HEXAGON_V6_vnavgb
+      {Intrinsic::hexagon_V6_vnavgb_128B, 49776}, // __builtin_HEXAGON_V6_vnavgb_128B
+      {Intrinsic::hexagon_V6_vnavgh, 49809}, // __builtin_HEXAGON_V6_vnavgh
+      {Intrinsic::hexagon_V6_vnavgh_128B, 49837}, // __builtin_HEXAGON_V6_vnavgh_128B
+      {Intrinsic::hexagon_V6_vnavgub, 49870}, // __builtin_HEXAGON_V6_vnavgub
+      {Intrinsic::hexagon_V6_vnavgub_128B, 49899}, // __builtin_HEXAGON_V6_vnavgub_128B
+      {Intrinsic::hexagon_V6_vnavgw, 49933}, // __builtin_HEXAGON_V6_vnavgw
+      {Intrinsic::hexagon_V6_vnavgw_128B, 49961}, // __builtin_HEXAGON_V6_vnavgw_128B
+      {Intrinsic::hexagon_V6_vnormamth, 49994}, // __builtin_HEXAGON_V6_vnormamth
+      {Intrinsic::hexagon_V6_vnormamth_128B, 50025}, // __builtin_HEXAGON_V6_vnormamth_128B
+      {Intrinsic::hexagon_V6_vnormamtw, 50061}, // __builtin_HEXAGON_V6_vnormamtw
+      {Intrinsic::hexagon_V6_vnormamtw_128B, 50092}, // __builtin_HEXAGON_V6_vnormamtw_128B
+      {Intrinsic::hexagon_V6_vnot, 50128}, // __builtin_HEXAGON_V6_vnot
+      {Intrinsic::hexagon_V6_vnot_128B, 50154}, // __builtin_HEXAGON_V6_vnot_128B
+      {Intrinsic::hexagon_V6_vor, 50185}, // __builtin_HEXAGON_V6_vor
+      {Intrinsic::hexagon_V6_vor_128B, 50210}, // __builtin_HEXAGON_V6_vor_128B
+      {Intrinsic::hexagon_V6_vpackeb, 50240}, // __builtin_HEXAGON_V6_vpackeb
+      {Intrinsic::hexagon_V6_vpackeb_128B, 50269}, // __builtin_HEXAGON_V6_vpackeb_128B
+      {Intrinsic::hexagon_V6_vpackeh, 50303}, // __builtin_HEXAGON_V6_vpackeh
+      {Intrinsic::hexagon_V6_vpackeh_128B, 50332}, // __builtin_HEXAGON_V6_vpackeh_128B
+      {Intrinsic::hexagon_V6_vpackhb_sat, 50366}, // __builtin_HEXAGON_V6_vpackhb_sat
+      {Intrinsic::hexagon_V6_vpackhb_sat_128B, 50399}, // __builtin_HEXAGON_V6_vpackhb_sat_128B
+      {Intrinsic::hexagon_V6_vpackhub_sat, 50437}, // __builtin_HEXAGON_V6_vpackhub_sat
+      {Intrinsic::hexagon_V6_vpackhub_sat_128B, 50471}, // __builtin_HEXAGON_V6_vpackhub_sat_128B
+      {Intrinsic::hexagon_V6_vpackob, 50510}, // __builtin_HEXAGON_V6_vpackob
+      {Intrinsic::hexagon_V6_vpackob_128B, 50539}, // __builtin_HEXAGON_V6_vpackob_128B
+      {Intrinsic::hexagon_V6_vpackoh, 50573}, // __builtin_HEXAGON_V6_vpackoh
+      {Intrinsic::hexagon_V6_vpackoh_128B, 50602}, // __builtin_HEXAGON_V6_vpackoh_128B
+      {Intrinsic::hexagon_V6_vpackwh_sat, 50636}, // __builtin_HEXAGON_V6_vpackwh_sat
+      {Intrinsic::hexagon_V6_vpackwh_sat_128B, 50669}, // __builtin_HEXAGON_V6_vpackwh_sat_128B
+      {Intrinsic::hexagon_V6_vpackwuh_sat, 50707}, // __builtin_HEXAGON_V6_vpackwuh_sat
+      {Intrinsic::hexagon_V6_vpackwuh_sat_128B, 50741}, // __builtin_HEXAGON_V6_vpackwuh_sat_128B
+      {Intrinsic::hexagon_V6_vpopcounth, 50780}, // __builtin_HEXAGON_V6_vpopcounth
+      {Intrinsic::hexagon_V6_vpopcounth_128B, 50812}, // __builtin_HEXAGON_V6_vpopcounth_128B
+      {Intrinsic::hexagon_V6_vprefixqb, 50849}, // __builtin_HEXAGON_V6_vprefixqb
+      {Intrinsic::hexagon_V6_vprefixqb_128B, 50880}, // __builtin_HEXAGON_V6_vprefixqb_128B
+      {Intrinsic::hexagon_V6_vprefixqh, 50916}, // __builtin_HEXAGON_V6_vprefixqh
+      {Intrinsic::hexagon_V6_vprefixqh_128B, 50947}, // __builtin_HEXAGON_V6_vprefixqh_128B
+      {Intrinsic::hexagon_V6_vprefixqw, 50983}, // __builtin_HEXAGON_V6_vprefixqw
+      {Intrinsic::hexagon_V6_vprefixqw_128B, 51014}, // __builtin_HEXAGON_V6_vprefixqw_128B
+      {Intrinsic::hexagon_V6_vrdelta, 51050}, // __builtin_HEXAGON_V6_vrdelta
+      {Intrinsic::hexagon_V6_vrdelta_128B, 51079}, // __builtin_HEXAGON_V6_vrdelta_128B
+      {Intrinsic::hexagon_V6_vrmpybub_rtt, 51113}, // __builtin_HEXAGON_V6_vrmpybub_rtt
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_128B, 51147}, // __builtin_HEXAGON_V6_vrmpybub_rtt_128B
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc, 51186}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc
+      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc_128B, 51224}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybus, 51267}, // __builtin_HEXAGON_V6_vrmpybus
+      {Intrinsic::hexagon_V6_vrmpybus_128B, 51297}, // __builtin_HEXAGON_V6_vrmpybus_128B
+      {Intrinsic::hexagon_V6_vrmpybus_acc, 51332}, // __builtin_HEXAGON_V6_vrmpybus_acc
+      {Intrinsic::hexagon_V6_vrmpybus_acc_128B, 51366}, // __builtin_HEXAGON_V6_vrmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybusi, 51405}, // __builtin_HEXAGON_V6_vrmpybusi
+      {Intrinsic::hexagon_V6_vrmpybusi_128B, 51436}, // __builtin_HEXAGON_V6_vrmpybusi_128B
+      {Intrinsic::hexagon_V6_vrmpybusi_acc, 51472}, // __builtin_HEXAGON_V6_vrmpybusi_acc
+      {Intrinsic::hexagon_V6_vrmpybusi_acc_128B, 51507}, // __builtin_HEXAGON_V6_vrmpybusi_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybusv, 51547}, // __builtin_HEXAGON_V6_vrmpybusv
+      {Intrinsic::hexagon_V6_vrmpybusv_128B, 51578}, // __builtin_HEXAGON_V6_vrmpybusv_128B
+      {Intrinsic::hexagon_V6_vrmpybusv_acc, 51614}, // __builtin_HEXAGON_V6_vrmpybusv_acc
+      {Intrinsic::hexagon_V6_vrmpybusv_acc_128B, 51649}, // __builtin_HEXAGON_V6_vrmpybusv_acc_128B
+      {Intrinsic::hexagon_V6_vrmpybv, 51689}, // __builtin_HEXAGON_V6_vrmpybv
+      {Intrinsic::hexagon_V6_vrmpybv_128B, 51718}, // __builtin_HEXAGON_V6_vrmpybv_128B
+      {Intrinsic::hexagon_V6_vrmpybv_acc, 51752}, // __builtin_HEXAGON_V6_vrmpybv_acc
+      {Intrinsic::hexagon_V6_vrmpybv_acc_128B, 51785}, // __builtin_HEXAGON_V6_vrmpybv_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyub, 51823}, // __builtin_HEXAGON_V6_vrmpyub
+      {Intrinsic::hexagon_V6_vrmpyub_128B, 51852}, // __builtin_HEXAGON_V6_vrmpyub_128B
+      {Intrinsic::hexagon_V6_vrmpyub_acc, 51886}, // __builtin_HEXAGON_V6_vrmpyub_acc
+      {Intrinsic::hexagon_V6_vrmpyub_acc_128B, 51919}, // __builtin_HEXAGON_V6_vrmpyub_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyub_rtt, 51957}, // __builtin_HEXAGON_V6_vrmpyub_rtt
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_128B, 51990}, // __builtin_HEXAGON_V6_vrmpyub_rtt_128B
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc, 52028}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc
+      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc_128B, 52065}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyubi, 52107}, // __builtin_HEXAGON_V6_vrmpyubi
+      {Intrinsic::hexagon_V6_vrmpyubi_128B, 52137}, // __builtin_HEXAGON_V6_vrmpyubi_128B
+      {Intrinsic::hexagon_V6_vrmpyubi_acc, 52172}, // __builtin_HEXAGON_V6_vrmpyubi_acc
+      {Intrinsic::hexagon_V6_vrmpyubi_acc_128B, 52206}, // __builtin_HEXAGON_V6_vrmpyubi_acc_128B
+      {Intrinsic::hexagon_V6_vrmpyubv, 52245}, // __builtin_HEXAGON_V6_vrmpyubv
+      {Intrinsic::hexagon_V6_vrmpyubv_128B, 52275}, // __builtin_HEXAGON_V6_vrmpyubv_128B
+      {Intrinsic::hexagon_V6_vrmpyubv_acc, 52310}, // __builtin_HEXAGON_V6_vrmpyubv_acc
+      {Intrinsic::hexagon_V6_vrmpyubv_acc_128B, 52344}, // __builtin_HEXAGON_V6_vrmpyubv_acc_128B
+      {Intrinsic::hexagon_V6_vror, 52383}, // __builtin_HEXAGON_V6_vror
+      {Intrinsic::hexagon_V6_vror_128B, 52409}, // __builtin_HEXAGON_V6_vror_128B
+      {Intrinsic::hexagon_V6_vroundhb, 52440}, // __builtin_HEXAGON_V6_vroundhb
+      {Intrinsic::hexagon_V6_vroundhb_128B, 52470}, // __builtin_HEXAGON_V6_vroundhb_128B
+      {Intrinsic::hexagon_V6_vroundhub, 52505}, // __builtin_HEXAGON_V6_vroundhub
+      {Intrinsic::hexagon_V6_vroundhub_128B, 52536}, // __builtin_HEXAGON_V6_vroundhub_128B
+      {Intrinsic::hexagon_V6_vrounduhub, 52572}, // __builtin_HEXAGON_V6_vrounduhub
+      {Intrinsic::hexagon_V6_vrounduhub_128B, 52604}, // __builtin_HEXAGON_V6_vrounduhub_128B
+      {Intrinsic::hexagon_V6_vrounduwuh, 52641}, // __builtin_HEXAGON_V6_vrounduwuh
+      {Intrinsic::hexagon_V6_vrounduwuh_128B, 52673}, // __builtin_HEXAGON_V6_vrounduwuh_128B
+      {Intrinsic::hexagon_V6_vroundwh, 52710}, // __builtin_HEXAGON_V6_vroundwh
+      {Intrinsic::hexagon_V6_vroundwh_128B, 52740}, // __builtin_HEXAGON_V6_vroundwh_128B
+      {Intrinsic::hexagon_V6_vroundwuh, 52775}, // __builtin_HEXAGON_V6_vroundwuh
+      {Intrinsic::hexagon_V6_vroundwuh_128B, 52806}, // __builtin_HEXAGON_V6_vroundwuh_128B
+      {Intrinsic::hexagon_V6_vrsadubi, 52842}, // __builtin_HEXAGON_V6_vrsadubi
+      {Intrinsic::hexagon_V6_vrsadubi_128B, 52872}, // __builtin_HEXAGON_V6_vrsadubi_128B
+      {Intrinsic::hexagon_V6_vrsadubi_acc, 52907}, // __builtin_HEXAGON_V6_vrsadubi_acc
+      {Intrinsic::hexagon_V6_vrsadubi_acc_128B, 52941}, // __builtin_HEXAGON_V6_vrsadubi_acc_128B
+      {Intrinsic::hexagon_V6_vsathub, 52980}, // __builtin_HEXAGON_V6_vsathub
+      {Intrinsic::hexagon_V6_vsathub_128B, 53009}, // __builtin_HEXAGON_V6_vsathub_128B
+      {Intrinsic::hexagon_V6_vsatuwuh, 53043}, // __builtin_HEXAGON_V6_vsatuwuh
+      {Intrinsic::hexagon_V6_vsatuwuh_128B, 53073}, // __builtin_HEXAGON_V6_vsatuwuh_128B
+      {Intrinsic::hexagon_V6_vsatwh, 53108}, // __builtin_HEXAGON_V6_vsatwh
+      {Intrinsic::hexagon_V6_vsatwh_128B, 53136}, // __builtin_HEXAGON_V6_vsatwh_128B
+      {Intrinsic::hexagon_V6_vsb, 53169}, // __builtin_HEXAGON_V6_vsb
+      {Intrinsic::hexagon_V6_vsb_128B, 53194}, // __builtin_HEXAGON_V6_vsb_128B
+      {Intrinsic::hexagon_V6_vscattermh, 53224}, // __builtin_HEXAGON_V6_vscattermh
+      {Intrinsic::hexagon_V6_vscattermh_128B, 53256}, // __builtin_HEXAGON_V6_vscattermh_128B
+      {Intrinsic::hexagon_V6_vscattermh_add, 53293}, // __builtin_HEXAGON_V6_vscattermh_add
+      {Intrinsic::hexagon_V6_vscattermh_add_128B, 53329}, // __builtin_HEXAGON_V6_vscattermh_add_128B
+      {Intrinsic::hexagon_V6_vscattermhq, 53370}, // __builtin_HEXAGON_V6_vscattermhq
+      {Intrinsic::hexagon_V6_vscattermhq_128B, 53403}, // __builtin_HEXAGON_V6_vscattermhq_128B
+      {Intrinsic::hexagon_V6_vscattermhw, 53441}, // __builtin_HEXAGON_V6_vscattermhw
+      {Intrinsic::hexagon_V6_vscattermhw_128B, 53474}, // __builtin_HEXAGON_V6_vscattermhw_128B
+      {Intrinsic::hexagon_V6_vscattermhw_add, 53512}, // __builtin_HEXAGON_V6_vscattermhw_add
+      {Intrinsic::hexagon_V6_vscattermhw_add_128B, 53549}, // __builtin_HEXAGON_V6_vscattermhw_add_128B
+      {Intrinsic::hexagon_V6_vscattermhwq, 53591}, // __builtin_HEXAGON_V6_vscattermhwq
+      {Intrinsic::hexagon_V6_vscattermhwq_128B, 53625}, // __builtin_HEXAGON_V6_vscattermhwq_128B
+      {Intrinsic::hexagon_V6_vscattermw, 53664}, // __builtin_HEXAGON_V6_vscattermw
+      {Intrinsic::hexagon_V6_vscattermw_128B, 53696}, // __builtin_HEXAGON_V6_vscattermw_128B
+      {Intrinsic::hexagon_V6_vscattermw_add, 53733}, // __builtin_HEXAGON_V6_vscattermw_add
+      {Intrinsic::hexagon_V6_vscattermw_add_128B, 53769}, // __builtin_HEXAGON_V6_vscattermw_add_128B
+      {Intrinsic::hexagon_V6_vscattermwq, 53810}, // __builtin_HEXAGON_V6_vscattermwq
+      {Intrinsic::hexagon_V6_vscattermwq_128B, 53843}, // __builtin_HEXAGON_V6_vscattermwq_128B
+      {Intrinsic::hexagon_V6_vsh, 53881}, // __builtin_HEXAGON_V6_vsh
+      {Intrinsic::hexagon_V6_vsh_128B, 53906}, // __builtin_HEXAGON_V6_vsh_128B
+      {Intrinsic::hexagon_V6_vshufeh, 53936}, // __builtin_HEXAGON_V6_vshufeh
+      {Intrinsic::hexagon_V6_vshufeh_128B, 53965}, // __builtin_HEXAGON_V6_vshufeh_128B
+      {Intrinsic::hexagon_V6_vshuffb, 53999}, // __builtin_HEXAGON_V6_vshuffb
+      {Intrinsic::hexagon_V6_vshuffb_128B, 54028}, // __builtin_HEXAGON_V6_vshuffb_128B
+      {Intrinsic::hexagon_V6_vshuffeb, 54062}, // __builtin_HEXAGON_V6_vshuffeb
+      {Intrinsic::hexagon_V6_vshuffeb_128B, 54092}, // __builtin_HEXAGON_V6_vshuffeb_128B
+      {Intrinsic::hexagon_V6_vshuffh, 54127}, // __builtin_HEXAGON_V6_vshuffh
+      {Intrinsic::hexagon_V6_vshuffh_128B, 54156}, // __builtin_HEXAGON_V6_vshuffh_128B
+      {Intrinsic::hexagon_V6_vshuffob, 54190}, // __builtin_HEXAGON_V6_vshuffob
+      {Intrinsic::hexagon_V6_vshuffob_128B, 54220}, // __builtin_HEXAGON_V6_vshuffob_128B
+      {Intrinsic::hexagon_V6_vshuffvdd, 54255}, // __builtin_HEXAGON_V6_vshuffvdd
+      {Intrinsic::hexagon_V6_vshuffvdd_128B, 54286}, // __builtin_HEXAGON_V6_vshuffvdd_128B
+      {Intrinsic::hexagon_V6_vshufoeb, 54322}, // __builtin_HEXAGON_V6_vshufoeb
+      {Intrinsic::hexagon_V6_vshufoeb_128B, 54352}, // __builtin_HEXAGON_V6_vshufoeb_128B
+      {Intrinsic::hexagon_V6_vshufoeh, 54387}, // __builtin_HEXAGON_V6_vshufoeh
+      {Intrinsic::hexagon_V6_vshufoeh_128B, 54417}, // __builtin_HEXAGON_V6_vshufoeh_128B
+      {Intrinsic::hexagon_V6_vshufoh, 54452}, // __builtin_HEXAGON_V6_vshufoh
+      {Intrinsic::hexagon_V6_vshufoh_128B, 54481}, // __builtin_HEXAGON_V6_vshufoh_128B
+      {Intrinsic::hexagon_V6_vsubb, 54515}, // __builtin_HEXAGON_V6_vsubb
+      {Intrinsic::hexagon_V6_vsubb_128B, 54542}, // __builtin_HEXAGON_V6_vsubb_128B
+      {Intrinsic::hexagon_V6_vsubb_dv, 54574}, // __builtin_HEXAGON_V6_vsubb_dv
+      {Intrinsic::hexagon_V6_vsubb_dv_128B, 54604}, // __builtin_HEXAGON_V6_vsubb_dv_128B
+      {Intrinsic::hexagon_V6_vsubbnq, 54639}, // __builtin_HEXAGON_V6_vsubbnq
+      {Intrinsic::hexagon_V6_vsubbnq_128B, 54668}, // __builtin_HEXAGON_V6_vsubbnq_128B
+      {Intrinsic::hexagon_V6_vsubbq, 54702}, // __builtin_HEXAGON_V6_vsubbq
+      {Intrinsic::hexagon_V6_vsubbq_128B, 54730}, // __builtin_HEXAGON_V6_vsubbq_128B
+      {Intrinsic::hexagon_V6_vsubbsat, 54763}, // __builtin_HEXAGON_V6_vsubbsat
+      {Intrinsic::hexagon_V6_vsubbsat_128B, 54793}, // __builtin_HEXAGON_V6_vsubbsat_128B
+      {Intrinsic::hexagon_V6_vsubbsat_dv, 54828}, // __builtin_HEXAGON_V6_vsubbsat_dv
+      {Intrinsic::hexagon_V6_vsubbsat_dv_128B, 54861}, // __builtin_HEXAGON_V6_vsubbsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubh, 54966}, // __builtin_HEXAGON_V6_vsubh
+      {Intrinsic::hexagon_V6_vsubh_128B, 54993}, // __builtin_HEXAGON_V6_vsubh_128B
+      {Intrinsic::hexagon_V6_vsubh_dv, 55025}, // __builtin_HEXAGON_V6_vsubh_dv
+      {Intrinsic::hexagon_V6_vsubh_dv_128B, 55055}, // __builtin_HEXAGON_V6_vsubh_dv_128B
+      {Intrinsic::hexagon_V6_vsubhnq, 55090}, // __builtin_HEXAGON_V6_vsubhnq
+      {Intrinsic::hexagon_V6_vsubhnq_128B, 55119}, // __builtin_HEXAGON_V6_vsubhnq_128B
+      {Intrinsic::hexagon_V6_vsubhq, 55153}, // __builtin_HEXAGON_V6_vsubhq
+      {Intrinsic::hexagon_V6_vsubhq_128B, 55181}, // __builtin_HEXAGON_V6_vsubhq_128B
+      {Intrinsic::hexagon_V6_vsubhsat, 55214}, // __builtin_HEXAGON_V6_vsubhsat
+      {Intrinsic::hexagon_V6_vsubhsat_128B, 55244}, // __builtin_HEXAGON_V6_vsubhsat_128B
+      {Intrinsic::hexagon_V6_vsubhsat_dv, 55279}, // __builtin_HEXAGON_V6_vsubhsat_dv
+      {Intrinsic::hexagon_V6_vsubhsat_dv_128B, 55312}, // __builtin_HEXAGON_V6_vsubhsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubhw, 55350}, // __builtin_HEXAGON_V6_vsubhw
+      {Intrinsic::hexagon_V6_vsubhw_128B, 55378}, // __builtin_HEXAGON_V6_vsubhw_128B
+      {Intrinsic::hexagon_V6_vsububh, 55411}, // __builtin_HEXAGON_V6_vsububh
+      {Intrinsic::hexagon_V6_vsububh_128B, 55440}, // __builtin_HEXAGON_V6_vsububh_128B
+      {Intrinsic::hexagon_V6_vsububsat, 55474}, // __builtin_HEXAGON_V6_vsububsat
+      {Intrinsic::hexagon_V6_vsububsat_128B, 55505}, // __builtin_HEXAGON_V6_vsububsat_128B
+      {Intrinsic::hexagon_V6_vsububsat_dv, 55541}, // __builtin_HEXAGON_V6_vsububsat_dv
+      {Intrinsic::hexagon_V6_vsububsat_dv_128B, 55575}, // __builtin_HEXAGON_V6_vsububsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubububb_sat, 55614}, // __builtin_HEXAGON_V6_vsubububb_sat
+      {Intrinsic::hexagon_V6_vsubububb_sat_128B, 55649}, // __builtin_HEXAGON_V6_vsubububb_sat_128B
+      {Intrinsic::hexagon_V6_vsubuhsat, 55689}, // __builtin_HEXAGON_V6_vsubuhsat
+      {Intrinsic::hexagon_V6_vsubuhsat_128B, 55720}, // __builtin_HEXAGON_V6_vsubuhsat_128B
+      {Intrinsic::hexagon_V6_vsubuhsat_dv, 55756}, // __builtin_HEXAGON_V6_vsubuhsat_dv
+      {Intrinsic::hexagon_V6_vsubuhsat_dv_128B, 55790}, // __builtin_HEXAGON_V6_vsubuhsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubuhw, 55829}, // __builtin_HEXAGON_V6_vsubuhw
+      {Intrinsic::hexagon_V6_vsubuhw_128B, 55858}, // __builtin_HEXAGON_V6_vsubuhw_128B
+      {Intrinsic::hexagon_V6_vsubuwsat, 55892}, // __builtin_HEXAGON_V6_vsubuwsat
+      {Intrinsic::hexagon_V6_vsubuwsat_128B, 55923}, // __builtin_HEXAGON_V6_vsubuwsat_128B
+      {Intrinsic::hexagon_V6_vsubuwsat_dv, 55959}, // __builtin_HEXAGON_V6_vsubuwsat_dv
+      {Intrinsic::hexagon_V6_vsubuwsat_dv_128B, 55993}, // __builtin_HEXAGON_V6_vsubuwsat_dv_128B
+      {Intrinsic::hexagon_V6_vsubw, 56032}, // __builtin_HEXAGON_V6_vsubw
+      {Intrinsic::hexagon_V6_vsubw_128B, 56059}, // __builtin_HEXAGON_V6_vsubw_128B
+      {Intrinsic::hexagon_V6_vsubw_dv, 56091}, // __builtin_HEXAGON_V6_vsubw_dv
+      {Intrinsic::hexagon_V6_vsubw_dv_128B, 56121}, // __builtin_HEXAGON_V6_vsubw_dv_128B
+      {Intrinsic::hexagon_V6_vsubwnq, 56156}, // __builtin_HEXAGON_V6_vsubwnq
+      {Intrinsic::hexagon_V6_vsubwnq_128B, 56185}, // __builtin_HEXAGON_V6_vsubwnq_128B
+      {Intrinsic::hexagon_V6_vsubwq, 56219}, // __builtin_HEXAGON_V6_vsubwq
+      {Intrinsic::hexagon_V6_vsubwq_128B, 56247}, // __builtin_HEXAGON_V6_vsubwq_128B
+      {Intrinsic::hexagon_V6_vsubwsat, 56280}, // __builtin_HEXAGON_V6_vsubwsat
+      {Intrinsic::hexagon_V6_vsubwsat_128B, 56310}, // __builtin_HEXAGON_V6_vsubwsat_128B
+      {Intrinsic::hexagon_V6_vsubwsat_dv, 56345}, // __builtin_HEXAGON_V6_vsubwsat_dv
+      {Intrinsic::hexagon_V6_vsubwsat_dv_128B, 56378}, // __builtin_HEXAGON_V6_vsubwsat_dv_128B
+      {Intrinsic::hexagon_V6_vswap, 56416}, // __builtin_HEXAGON_V6_vswap
+      {Intrinsic::hexagon_V6_vswap_128B, 56443}, // __builtin_HEXAGON_V6_vswap_128B
+      {Intrinsic::hexagon_V6_vtmpyb, 56475}, // __builtin_HEXAGON_V6_vtmpyb
+      {Intrinsic::hexagon_V6_vtmpyb_128B, 56503}, // __builtin_HEXAGON_V6_vtmpyb_128B
+      {Intrinsic::hexagon_V6_vtmpyb_acc, 56536}, // __builtin_HEXAGON_V6_vtmpyb_acc
+      {Intrinsic::hexagon_V6_vtmpyb_acc_128B, 56568}, // __builtin_HEXAGON_V6_vtmpyb_acc_128B
+      {Intrinsic::hexagon_V6_vtmpybus, 56605}, // __builtin_HEXAGON_V6_vtmpybus
+      {Intrinsic::hexagon_V6_vtmpybus_128B, 56635}, // __builtin_HEXAGON_V6_vtmpybus_128B
+      {Intrinsic::hexagon_V6_vtmpybus_acc, 56670}, // __builtin_HEXAGON_V6_vtmpybus_acc
+      {Intrinsic::hexagon_V6_vtmpybus_acc_128B, 56704}, // __builtin_HEXAGON_V6_vtmpybus_acc_128B
+      {Intrinsic::hexagon_V6_vtmpyhb, 56743}, // __builtin_HEXAGON_V6_vtmpyhb
+      {Intrinsic::hexagon_V6_vtmpyhb_128B, 56772}, // __builtin_HEXAGON_V6_vtmpyhb_128B
+      {Intrinsic::hexagon_V6_vtmpyhb_acc, 56806}, // __builtin_HEXAGON_V6_vtmpyhb_acc
+      {Intrinsic::hexagon_V6_vtmpyhb_acc_128B, 56839}, // __builtin_HEXAGON_V6_vtmpyhb_acc_128B
+      {Intrinsic::hexagon_V6_vunpackb, 56877}, // __builtin_HEXAGON_V6_vunpackb
+      {Intrinsic::hexagon_V6_vunpackb_128B, 56907}, // __builtin_HEXAGON_V6_vunpackb_128B
+      {Intrinsic::hexagon_V6_vunpackh, 56942}, // __builtin_HEXAGON_V6_vunpackh
+      {Intrinsic::hexagon_V6_vunpackh_128B, 56972}, // __builtin_HEXAGON_V6_vunpackh_128B
+      {Intrinsic::hexagon_V6_vunpackob, 57007}, // __builtin_HEXAGON_V6_vunpackob
+      {Intrinsic::hexagon_V6_vunpackob_128B, 57038}, // __builtin_HEXAGON_V6_vunpackob_128B
+      {Intrinsic::hexagon_V6_vunpackoh, 57074}, // __builtin_HEXAGON_V6_vunpackoh
+      {Intrinsic::hexagon_V6_vunpackoh_128B, 57105}, // __builtin_HEXAGON_V6_vunpackoh_128B
+      {Intrinsic::hexagon_V6_vunpackub, 57141}, // __builtin_HEXAGON_V6_vunpackub
+      {Intrinsic::hexagon_V6_vunpackub_128B, 57172}, // __builtin_HEXAGON_V6_vunpackub_128B
+      {Intrinsic::hexagon_V6_vunpackuh, 57208}, // __builtin_HEXAGON_V6_vunpackuh
+      {Intrinsic::hexagon_V6_vunpackuh_128B, 57239}, // __builtin_HEXAGON_V6_vunpackuh_128B
+      {Intrinsic::hexagon_V6_vxor, 57275}, // __builtin_HEXAGON_V6_vxor
+      {Intrinsic::hexagon_V6_vxor_128B, 57301}, // __builtin_HEXAGON_V6_vxor_128B
+      {Intrinsic::hexagon_V6_vzb, 57332}, // __builtin_HEXAGON_V6_vzb
+      {Intrinsic::hexagon_V6_vzb_128B, 57357}, // __builtin_HEXAGON_V6_vzb_128B
+      {Intrinsic::hexagon_V6_vzh, 57387}, // __builtin_HEXAGON_V6_vzh
+      {Intrinsic::hexagon_V6_vzh_128B, 57412}, // __builtin_HEXAGON_V6_vzh_128B
+      {Intrinsic::hexagon_Y2_dccleana, 57442}, // __builtin_HEXAGON_Y2_dccleana
+      {Intrinsic::hexagon_Y2_dccleaninva, 57472}, // __builtin_HEXAGON_Y2_dccleaninva
+      {Intrinsic::hexagon_Y2_dcinva, 57505}, // __builtin_HEXAGON_Y2_dcinva
+      {Intrinsic::hexagon_Y2_dczeroa, 57533}, // __builtin_HEXAGON_Y2_dczeroa
+      {Intrinsic::hexagon_Y4_l2fetch, 57562}, // __builtin_HEXAGON_Y4_l2fetch
+      {Intrinsic::hexagon_Y5_l2fetch, 57591}, // __builtin_HEXAGON_Y5_l2fetch
+      {Intrinsic::hexagon_prefetch, 57857}, // __builtin_HEXAGON_prefetch
+      {Intrinsic::hexagon_V6_vaddcarry, 33549}, // __builtin_HEXAGON_v6_vaddcarry
+      {Intrinsic::hexagon_V6_vaddcarry_128B, 33580}, // __builtin_HEXAGON_v6_vaddcarry_128B
+      {Intrinsic::hexagon_V6_vsubcarry, 54899}, // __builtin_HEXAGON_v6_vsubcarry
+      {Intrinsic::hexagon_V6_vsubcarry_128B, 54930}, // __builtin_HEXAGON_v6_vsubcarry_128B
+      {Intrinsic::hexagon_mm256i_vaddw, 57833}, // __builtin__mm256i_vaddw
+      {Intrinsic::hexagon_S2_storerb_pbr, 28181}, // __builtin_brev_stb
+      {Intrinsic::hexagon_S2_storerd_pbr, 28200}, // __builtin_brev_std
+      {Intrinsic::hexagon_S2_storerh_pbr, 28240}, // __builtin_brev_sth
+      {Intrinsic::hexagon_S2_storerf_pbr, 28219}, // __builtin_brev_sthhi
+      {Intrinsic::hexagon_S2_storeri_pbr, 28259}, // __builtin_brev_stw
+      {Intrinsic::hexagon_circ_ldb, 57620}, // __builtin_circ_ldb
+      {Intrinsic::hexagon_circ_ldd, 57639}, // __builtin_circ_ldd
+      {Intrinsic::hexagon_circ_ldh, 57658}, // __builtin_circ_ldh
+      {Intrinsic::hexagon_circ_ldub, 57677}, // __builtin_circ_ldub
+      {Intrinsic::hexagon_circ_lduh, 57697}, // __builtin_circ_lduh
+      {Intrinsic::hexagon_circ_ldw, 57717}, // __builtin_circ_ldw
+      {Intrinsic::hexagon_circ_stb, 57736}, // __builtin_circ_stb
+      {Intrinsic::hexagon_circ_std, 57755}, // __builtin_circ_std
+      {Intrinsic::hexagon_circ_sth, 57774}, // __builtin_circ_sth
+      {Intrinsic::hexagon_circ_sthhi, 57793}, // __builtin_circ_sthhi
+      {Intrinsic::hexagon_circ_stw, 57814}, // __builtin_circ_stw
+    };
+    auto I = std::lower_bound(std::begin(hexagonNames),
+                              std::end(hexagonNames),
+                              BuiltinNameStr);
+    if (I != std::end(hexagonNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "mips") {
+    static const BuiltinEntry mipsNames[] = {
+      {Intrinsic::mips_absq_s_ph, 57884}, // __builtin_mips_absq_s_ph
+      {Intrinsic::mips_absq_s_qb, 57909}, // __builtin_mips_absq_s_qb
+      {Intrinsic::mips_absq_s_w, 57934}, // __builtin_mips_absq_s_w
+      {Intrinsic::mips_addq_ph, 58046}, // __builtin_mips_addq_ph
+      {Intrinsic::mips_addq_s_ph, 58069}, // __builtin_mips_addq_s_ph
+      {Intrinsic::mips_addq_s_w, 58094}, // __builtin_mips_addq_s_w
+      {Intrinsic::mips_addqh_ph, 58118}, // __builtin_mips_addqh_ph
+      {Intrinsic::mips_addqh_r_ph, 58142}, // __builtin_mips_addqh_r_ph
+      {Intrinsic::mips_addqh_r_w, 58168}, // __builtin_mips_addqh_r_w
+      {Intrinsic::mips_addqh_w, 58193}, // __builtin_mips_addqh_w
+      {Intrinsic::mips_addsc, 58492}, // __builtin_mips_addsc
+      {Intrinsic::mips_addu_ph, 58513}, // __builtin_mips_addu_ph
+      {Intrinsic::mips_addu_qb, 58536}, // __builtin_mips_addu_qb
+      {Intrinsic::mips_addu_s_ph, 58559}, // __builtin_mips_addu_s_ph
+      {Intrinsic::mips_addu_s_qb, 58584}, // __builtin_mips_addu_s_qb
+      {Intrinsic::mips_adduh_qb, 58609}, // __builtin_mips_adduh_qb
+      {Intrinsic::mips_adduh_r_qb, 58633}, // __builtin_mips_adduh_r_qb
+      {Intrinsic::mips_addwc, 58831}, // __builtin_mips_addwc
+      {Intrinsic::mips_append, 58893}, // __builtin_mips_append
+      {Intrinsic::mips_balign, 59459}, // __builtin_mips_balign
+      {Intrinsic::mips_bitrev, 60013}, // __builtin_mips_bitrev
+      {Intrinsic::mips_bposge32, 60391}, // __builtin_mips_bposge32
+      {Intrinsic::mips_cmp_eq_ph, 61630}, // __builtin_mips_cmp_eq_ph
+      {Intrinsic::mips_cmp_le_ph, 61655}, // __builtin_mips_cmp_le_ph
+      {Intrinsic::mips_cmp_lt_ph, 61680}, // __builtin_mips_cmp_lt_ph
+      {Intrinsic::mips_cmpgdu_eq_qb, 61705}, // __builtin_mips_cmpgdu_eq_qb
+      {Intrinsic::mips_cmpgdu_le_qb, 61733}, // __builtin_mips_cmpgdu_le_qb
+      {Intrinsic::mips_cmpgdu_lt_qb, 61761}, // __builtin_mips_cmpgdu_lt_qb
+      {Intrinsic::mips_cmpgu_eq_qb, 61789}, // __builtin_mips_cmpgu_eq_qb
+      {Intrinsic::mips_cmpgu_le_qb, 61816}, // __builtin_mips_cmpgu_le_qb
+      {Intrinsic::mips_cmpgu_lt_qb, 61843}, // __builtin_mips_cmpgu_lt_qb
+      {Intrinsic::mips_cmpu_eq_qb, 61870}, // __builtin_mips_cmpu_eq_qb
+      {Intrinsic::mips_cmpu_le_qb, 61896}, // __builtin_mips_cmpu_le_qb
+      {Intrinsic::mips_cmpu_lt_qb, 61922}, // __builtin_mips_cmpu_lt_qb
+      {Intrinsic::mips_dlsa, 62329}, // __builtin_mips_dlsa
+      {Intrinsic::mips_dpa_w_ph, 62487}, // __builtin_mips_dpa_w_ph
+      {Intrinsic::mips_dpaq_s_w_ph, 62655}, // __builtin_mips_dpaq_s_w_ph
+      {Intrinsic::mips_dpaq_sa_l_w, 62682}, // __builtin_mips_dpaq_sa_l_w
+      {Intrinsic::mips_dpaqx_s_w_ph, 62709}, // __builtin_mips_dpaqx_s_w_ph
+      {Intrinsic::mips_dpaqx_sa_w_ph, 62737}, // __builtin_mips_dpaqx_sa_w_ph
+      {Intrinsic::mips_dpau_h_qbl, 62766}, // __builtin_mips_dpau_h_qbl
+      {Intrinsic::mips_dpau_h_qbr, 62792}, // __builtin_mips_dpau_h_qbr
+      {Intrinsic::mips_dpax_w_ph, 62818}, // __builtin_mips_dpax_w_ph
+      {Intrinsic::mips_dps_w_ph, 62843}, // __builtin_mips_dps_w_ph
+      {Intrinsic::mips_dpsq_s_w_ph, 62867}, // __builtin_mips_dpsq_s_w_ph
+      {Intrinsic::mips_dpsq_sa_l_w, 62894}, // __builtin_mips_dpsq_sa_l_w
+      {Intrinsic::mips_dpsqx_s_w_ph, 62921}, // __builtin_mips_dpsqx_s_w_ph
+      {Intrinsic::mips_dpsqx_sa_w_ph, 62949}, // __builtin_mips_dpsqx_sa_w_ph
+      {Intrinsic::mips_dpsu_h_qbl, 62978}, // __builtin_mips_dpsu_h_qbl
+      {Intrinsic::mips_dpsu_h_qbr, 63004}, // __builtin_mips_dpsu_h_qbr
+      {Intrinsic::mips_dpsx_w_ph, 63174}, // __builtin_mips_dpsx_w_ph
+      {Intrinsic::mips_extp, 63199}, // __builtin_mips_extp
+      {Intrinsic::mips_extpdp, 63219}, // __builtin_mips_extpdp
+      {Intrinsic::mips_extr_r_w, 63241}, // __builtin_mips_extr_r_w
+      {Intrinsic::mips_extr_rs_w, 63265}, // __builtin_mips_extr_rs_w
+      {Intrinsic::mips_extr_s_h, 63290}, // __builtin_mips_extr_s_h
+      {Intrinsic::mips_extr_w, 63314}, // __builtin_mips_extr_w
+      {Intrinsic::mips_insv, 66366}, // __builtin_mips_insv
+      {Intrinsic::mips_lbux, 66474}, // __builtin_mips_lbux
+      {Intrinsic::mips_lhx, 66650}, // __builtin_mips_lhx
+      {Intrinsic::mips_lsa, 66669}, // __builtin_mips_lsa
+      {Intrinsic::mips_lwx, 66688}, // __builtin_mips_lwx
+      {Intrinsic::mips_madd, 66707}, // __builtin_mips_madd
+      {Intrinsic::mips_maddu, 66821}, // __builtin_mips_maddu
+      {Intrinsic::mips_maq_s_w_phl, 66930}, // __builtin_mips_maq_s_w_phl
+      {Intrinsic::mips_maq_s_w_phr, 66957}, // __builtin_mips_maq_s_w_phr
+      {Intrinsic::mips_maq_sa_w_phl, 66984}, // __builtin_mips_maq_sa_w_phl
+      {Intrinsic::mips_maq_sa_w_phr, 67012}, // __builtin_mips_maq_sa_w_phr
+      {Intrinsic::mips_modsub, 68112}, // __builtin_mips_modsub
+      {Intrinsic::mips_msub, 68155}, // __builtin_mips_msub
+      {Intrinsic::mips_msubu, 68269}, // __builtin_mips_msubu
+      {Intrinsic::mips_mthlip, 68378}, // __builtin_mips_mthlip
+      {Intrinsic::mips_mul_ph, 68400}, // __builtin_mips_mul_ph
+      {Intrinsic::mips_mul_s_ph, 68466}, // __builtin_mips_mul_s_ph
+      {Intrinsic::mips_muleq_s_w_phl, 68490}, // __builtin_mips_muleq_s_w_phl
+      {Intrinsic::mips_muleq_s_w_phr, 68519}, // __builtin_mips_muleq_s_w_phr
+      {Intrinsic::mips_muleu_s_ph_qbl, 68548}, // __builtin_mips_muleu_s_ph_qbl
+      {Intrinsic::mips_muleu_s_ph_qbr, 68578}, // __builtin_mips_muleu_s_ph_qbr
+      {Intrinsic::mips_mulq_rs_ph, 68608}, // __builtin_mips_mulq_rs_ph
+      {Intrinsic::mips_mulq_rs_w, 68634}, // __builtin_mips_mulq_rs_w
+      {Intrinsic::mips_mulq_s_ph, 68659}, // __builtin_mips_mulq_s_ph
+      {Intrinsic::mips_mulq_s_w, 68684}, // __builtin_mips_mulq_s_w
+      {Intrinsic::mips_mulsa_w_ph, 68754}, // __builtin_mips_mulsa_w_ph
+      {Intrinsic::mips_mulsaq_s_w_ph, 68780}, // __builtin_mips_mulsaq_s_w_ph
+      {Intrinsic::mips_mult, 68809}, // __builtin_mips_mult
+      {Intrinsic::mips_multu, 68829}, // __builtin_mips_multu
+      {Intrinsic::mips_packrl_ph, 69182}, // __builtin_mips_packrl_ph
+      {Intrinsic::mips_pick_ph, 69467}, // __builtin_mips_pick_ph
+      {Intrinsic::mips_pick_qb, 69490}, // __builtin_mips_pick_qb
+      {Intrinsic::mips_preceq_w_phl, 69513}, // __builtin_mips_preceq_w_phl
+      {Intrinsic::mips_preceq_w_phr, 69541}, // __builtin_mips_preceq_w_phr
+      {Intrinsic::mips_precequ_ph_qbl, 69569}, // __builtin_mips_precequ_ph_qbl
+      {Intrinsic::mips_precequ_ph_qbla, 69599}, // __builtin_mips_precequ_ph_qbla
+      {Intrinsic::mips_precequ_ph_qbr, 69630}, // __builtin_mips_precequ_ph_qbr
+      {Intrinsic::mips_precequ_ph_qbra, 69660}, // __builtin_mips_precequ_ph_qbra
+      {Intrinsic::mips_preceu_ph_qbl, 69691}, // __builtin_mips_preceu_ph_qbl
+      {Intrinsic::mips_preceu_ph_qbla, 69720}, // __builtin_mips_preceu_ph_qbla
+      {Intrinsic::mips_preceu_ph_qbr, 69750}, // __builtin_mips_preceu_ph_qbr
+      {Intrinsic::mips_preceu_ph_qbra, 69779}, // __builtin_mips_preceu_ph_qbra
+      {Intrinsic::mips_precr_qb_ph, 69809}, // __builtin_mips_precr_qb_ph
+      {Intrinsic::mips_precr_sra_ph_w, 69836}, // __builtin_mips_precr_sra_ph_w
+      {Intrinsic::mips_precr_sra_r_ph_w, 69866}, // __builtin_mips_precr_sra_r_ph_w
+      {Intrinsic::mips_precrq_ph_w, 69898}, // __builtin_mips_precrq_ph_w
+      {Intrinsic::mips_precrq_qb_ph, 69925}, // __builtin_mips_precrq_qb_ph
+      {Intrinsic::mips_precrq_rs_ph_w, 69953}, // __builtin_mips_precrq_rs_ph_w
+      {Intrinsic::mips_precrqu_s_qb_ph, 69983}, // __builtin_mips_precrqu_s_qb_ph
+      {Intrinsic::mips_prepend, 70014}, // __builtin_mips_prepend
+      {Intrinsic::mips_raddu_w_qb, 70037}, // __builtin_mips_raddu_w_qb
+      {Intrinsic::mips_rddsp, 70063}, // __builtin_mips_rddsp
+      {Intrinsic::mips_repl_ph, 70084}, // __builtin_mips_repl_ph
+      {Intrinsic::mips_repl_qb, 70107}, // __builtin_mips_repl_qb
+      {Intrinsic::mips_shilo, 70366}, // __builtin_mips_shilo
+      {Intrinsic::mips_shll_ph, 70387}, // __builtin_mips_shll_ph
+      {Intrinsic::mips_shll_qb, 70410}, // __builtin_mips_shll_qb
+      {Intrinsic::mips_shll_s_ph, 70433}, // __builtin_mips_shll_s_ph
+      {Intrinsic::mips_shll_s_w, 70458}, // __builtin_mips_shll_s_w
+      {Intrinsic::mips_shra_ph, 70482}, // __builtin_mips_shra_ph
+      {Intrinsic::mips_shra_qb, 70505}, // __builtin_mips_shra_qb
+      {Intrinsic::mips_shra_r_ph, 70528}, // __builtin_mips_shra_r_ph
+      {Intrinsic::mips_shra_r_qb, 70553}, // __builtin_mips_shra_r_qb
+      {Intrinsic::mips_shra_r_w, 70578}, // __builtin_mips_shra_r_w
+      {Intrinsic::mips_shrl_ph, 70602}, // __builtin_mips_shrl_ph
+      {Intrinsic::mips_shrl_qb, 70625}, // __builtin_mips_shrl_qb
+      {Intrinsic::mips_subq_ph, 71904}, // __builtin_mips_subq_ph
+      {Intrinsic::mips_subq_s_ph, 71927}, // __builtin_mips_subq_s_ph
+      {Intrinsic::mips_subq_s_w, 71952}, // __builtin_mips_subq_s_w
+      {Intrinsic::mips_subqh_ph, 71976}, // __builtin_mips_subqh_ph
+      {Intrinsic::mips_subqh_r_ph, 72000}, // __builtin_mips_subqh_r_ph
+      {Intrinsic::mips_subqh_r_w, 72026}, // __builtin_mips_subqh_r_w
+      {Intrinsic::mips_subqh_w, 72051}, // __builtin_mips_subqh_w
+      {Intrinsic::mips_subu_ph, 72458}, // __builtin_mips_subu_ph
+      {Intrinsic::mips_subu_qb, 72481}, // __builtin_mips_subu_qb
+      {Intrinsic::mips_subu_s_ph, 72504}, // __builtin_mips_subu_s_ph
+      {Intrinsic::mips_subu_s_qb, 72529}, // __builtin_mips_subu_s_qb
+      {Intrinsic::mips_subuh_qb, 72554}, // __builtin_mips_subuh_qb
+      {Intrinsic::mips_subuh_r_qb, 72578}, // __builtin_mips_subuh_r_qb
+      {Intrinsic::mips_wrdsp, 72860}, // __builtin_mips_wrdsp
+      {Intrinsic::mips_add_a_b, 57958}, // __builtin_msa_add_a_b
+      {Intrinsic::mips_add_a_d, 57980}, // __builtin_msa_add_a_d
+      {Intrinsic::mips_add_a_h, 58002}, // __builtin_msa_add_a_h
+      {Intrinsic::mips_add_a_w, 58024}, // __builtin_msa_add_a_w
+      {Intrinsic::mips_adds_a_b, 58216}, // __builtin_msa_adds_a_b
+      {Intrinsic::mips_adds_a_d, 58239}, // __builtin_msa_adds_a_d
+      {Intrinsic::mips_adds_a_h, 58262}, // __builtin_msa_adds_a_h
+      {Intrinsic::mips_adds_a_w, 58285}, // __builtin_msa_adds_a_w
+      {Intrinsic::mips_adds_s_b, 58308}, // __builtin_msa_adds_s_b
+      {Intrinsic::mips_adds_s_d, 58331}, // __builtin_msa_adds_s_d
+      {Intrinsic::mips_adds_s_h, 58354}, // __builtin_msa_adds_s_h
+      {Intrinsic::mips_adds_s_w, 58377}, // __builtin_msa_adds_s_w
+      {Intrinsic::mips_adds_u_b, 58400}, // __builtin_msa_adds_u_b
+      {Intrinsic::mips_adds_u_d, 58423}, // __builtin_msa_adds_u_d
+      {Intrinsic::mips_adds_u_h, 58446}, // __builtin_msa_adds_u_h
+      {Intrinsic::mips_adds_u_w, 58469}, // __builtin_msa_adds_u_w
+      {Intrinsic::mips_addv_b, 58659}, // __builtin_msa_addv_b
+      {Intrinsic::mips_addv_d, 58680}, // __builtin_msa_addv_d
+      {Intrinsic::mips_addv_h, 58701}, // __builtin_msa_addv_h
+      {Intrinsic::mips_addv_w, 58722}, // __builtin_msa_addv_w
+      {Intrinsic::mips_addvi_b, 58743}, // __builtin_msa_addvi_b
+      {Intrinsic::mips_addvi_d, 58765}, // __builtin_msa_addvi_d
+      {Intrinsic::mips_addvi_h, 58787}, // __builtin_msa_addvi_h
+      {Intrinsic::mips_addvi_w, 58809}, // __builtin_msa_addvi_w
+      {Intrinsic::mips_and_v, 58852}, // __builtin_msa_and_v
+      {Intrinsic::mips_andi_b, 58872}, // __builtin_msa_andi_b
+      {Intrinsic::mips_asub_s_b, 58915}, // __builtin_msa_asub_s_b
+      {Intrinsic::mips_asub_s_d, 58938}, // __builtin_msa_asub_s_d
+      {Intrinsic::mips_asub_s_h, 58961}, // __builtin_msa_asub_s_h
+      {Intrinsic::mips_asub_s_w, 58984}, // __builtin_msa_asub_s_w
+      {Intrinsic::mips_asub_u_b, 59007}, // __builtin_msa_asub_u_b
+      {Intrinsic::mips_asub_u_d, 59030}, // __builtin_msa_asub_u_d
+      {Intrinsic::mips_asub_u_h, 59053}, // __builtin_msa_asub_u_h
+      {Intrinsic::mips_asub_u_w, 59076}, // __builtin_msa_asub_u_w
+      {Intrinsic::mips_ave_s_b, 59099}, // __builtin_msa_ave_s_b
+      {Intrinsic::mips_ave_s_d, 59121}, // __builtin_msa_ave_s_d
+      {Intrinsic::mips_ave_s_h, 59143}, // __builtin_msa_ave_s_h
+      {Intrinsic::mips_ave_s_w, 59165}, // __builtin_msa_ave_s_w
+      {Intrinsic::mips_ave_u_b, 59187}, // __builtin_msa_ave_u_b
+      {Intrinsic::mips_ave_u_d, 59209}, // __builtin_msa_ave_u_d
+      {Intrinsic::mips_ave_u_h, 59231}, // __builtin_msa_ave_u_h
+      {Intrinsic::mips_ave_u_w, 59253}, // __builtin_msa_ave_u_w
+      {Intrinsic::mips_aver_s_b, 59275}, // __builtin_msa_aver_s_b
+      {Intrinsic::mips_aver_s_d, 59298}, // __builtin_msa_aver_s_d
+      {Intrinsic::mips_aver_s_h, 59321}, // __builtin_msa_aver_s_h
+      {Intrinsic::mips_aver_s_w, 59344}, // __builtin_msa_aver_s_w
+      {Intrinsic::mips_aver_u_b, 59367}, // __builtin_msa_aver_u_b
+      {Intrinsic::mips_aver_u_d, 59390}, // __builtin_msa_aver_u_d
+      {Intrinsic::mips_aver_u_h, 59413}, // __builtin_msa_aver_u_h
+      {Intrinsic::mips_aver_u_w, 59436}, // __builtin_msa_aver_u_w
+      {Intrinsic::mips_bclr_b, 59481}, // __builtin_msa_bclr_b
+      {Intrinsic::mips_bclr_d, 59502}, // __builtin_msa_bclr_d
+      {Intrinsic::mips_bclr_h, 59523}, // __builtin_msa_bclr_h
+      {Intrinsic::mips_bclr_w, 59544}, // __builtin_msa_bclr_w
+      {Intrinsic::mips_bclri_b, 59565}, // __builtin_msa_bclri_b
+      {Intrinsic::mips_bclri_d, 59587}, // __builtin_msa_bclri_d
+      {Intrinsic::mips_bclri_h, 59609}, // __builtin_msa_bclri_h
+      {Intrinsic::mips_bclri_w, 59631}, // __builtin_msa_bclri_w
+      {Intrinsic::mips_binsl_b, 59653}, // __builtin_msa_binsl_b
+      {Intrinsic::mips_binsl_d, 59675}, // __builtin_msa_binsl_d
+      {Intrinsic::mips_binsl_h, 59697}, // __builtin_msa_binsl_h
+      {Intrinsic::mips_binsl_w, 59719}, // __builtin_msa_binsl_w
+      {Intrinsic::mips_binsli_b, 59741}, // __builtin_msa_binsli_b
+      {Intrinsic::mips_binsli_d, 59764}, // __builtin_msa_binsli_d
+      {Intrinsic::mips_binsli_h, 59787}, // __builtin_msa_binsli_h
+      {Intrinsic::mips_binsli_w, 59810}, // __builtin_msa_binsli_w
+      {Intrinsic::mips_binsr_b, 59833}, // __builtin_msa_binsr_b
+      {Intrinsic::mips_binsr_d, 59855}, // __builtin_msa_binsr_d
+      {Intrinsic::mips_binsr_h, 59877}, // __builtin_msa_binsr_h
+      {Intrinsic::mips_binsr_w, 59899}, // __builtin_msa_binsr_w
+      {Intrinsic::mips_binsri_b, 59921}, // __builtin_msa_binsri_b
+      {Intrinsic::mips_binsri_d, 59944}, // __builtin_msa_binsri_d
+      {Intrinsic::mips_binsri_h, 59967}, // __builtin_msa_binsri_h
+      {Intrinsic::mips_binsri_w, 59990}, // __builtin_msa_binsri_w
+      {Intrinsic::mips_bmnz_v, 60035}, // __builtin_msa_bmnz_v
+      {Intrinsic::mips_bmnzi_b, 60056}, // __builtin_msa_bmnzi_b
+      {Intrinsic::mips_bmz_v, 60078}, // __builtin_msa_bmz_v
+      {Intrinsic::mips_bmzi_b, 60098}, // __builtin_msa_bmzi_b
+      {Intrinsic::mips_bneg_b, 60119}, // __builtin_msa_bneg_b
+      {Intrinsic::mips_bneg_d, 60140}, // __builtin_msa_bneg_d
+      {Intrinsic::mips_bneg_h, 60161}, // __builtin_msa_bneg_h
+      {Intrinsic::mips_bneg_w, 60182}, // __builtin_msa_bneg_w
+      {Intrinsic::mips_bnegi_b, 60203}, // __builtin_msa_bnegi_b
+      {Intrinsic::mips_bnegi_d, 60225}, // __builtin_msa_bnegi_d
+      {Intrinsic::mips_bnegi_h, 60247}, // __builtin_msa_bnegi_h
+      {Intrinsic::mips_bnegi_w, 60269}, // __builtin_msa_bnegi_w
+      {Intrinsic::mips_bnz_b, 60291}, // __builtin_msa_bnz_b
+      {Intrinsic::mips_bnz_d, 60311}, // __builtin_msa_bnz_d
+      {Intrinsic::mips_bnz_h, 60331}, // __builtin_msa_bnz_h
+      {Intrinsic::mips_bnz_v, 60351}, // __builtin_msa_bnz_v
+      {Intrinsic::mips_bnz_w, 60371}, // __builtin_msa_bnz_w
+      {Intrinsic::mips_bsel_v, 60415}, // __builtin_msa_bsel_v
+      {Intrinsic::mips_bseli_b, 60436}, // __builtin_msa_bseli_b
+      {Intrinsic::mips_bset_b, 60458}, // __builtin_msa_bset_b
+      {Intrinsic::mips_bset_d, 60479}, // __builtin_msa_bset_d
+      {Intrinsic::mips_bset_h, 60500}, // __builtin_msa_bset_h
+      {Intrinsic::mips_bset_w, 60521}, // __builtin_msa_bset_w
+      {Intrinsic::mips_bseti_b, 60542}, // __builtin_msa_bseti_b
+      {Intrinsic::mips_bseti_d, 60564}, // __builtin_msa_bseti_d
+      {Intrinsic::mips_bseti_h, 60586}, // __builtin_msa_bseti_h
+      {Intrinsic::mips_bseti_w, 60608}, // __builtin_msa_bseti_w
+      {Intrinsic::mips_bz_b, 60630}, // __builtin_msa_bz_b
+      {Intrinsic::mips_bz_d, 60649}, // __builtin_msa_bz_d
+      {Intrinsic::mips_bz_h, 60668}, // __builtin_msa_bz_h
+      {Intrinsic::mips_bz_v, 60687}, // __builtin_msa_bz_v
+      {Intrinsic::mips_bz_w, 60706}, // __builtin_msa_bz_w
+      {Intrinsic::mips_ceq_b, 60725}, // __builtin_msa_ceq_b
+      {Intrinsic::mips_ceq_d, 60745}, // __builtin_msa_ceq_d
+      {Intrinsic::mips_ceq_h, 60765}, // __builtin_msa_ceq_h
+      {Intrinsic::mips_ceq_w, 60785}, // __builtin_msa_ceq_w
+      {Intrinsic::mips_ceqi_b, 60805}, // __builtin_msa_ceqi_b
+      {Intrinsic::mips_ceqi_d, 60826}, // __builtin_msa_ceqi_d
+      {Intrinsic::mips_ceqi_h, 60847}, // __builtin_msa_ceqi_h
+      {Intrinsic::mips_ceqi_w, 60868}, // __builtin_msa_ceqi_w
+      {Intrinsic::mips_cfcmsa, 60889}, // __builtin_msa_cfcmsa
+      {Intrinsic::mips_cle_s_b, 60910}, // __builtin_msa_cle_s_b
+      {Intrinsic::mips_cle_s_d, 60932}, // __builtin_msa_cle_s_d
+      {Intrinsic::mips_cle_s_h, 60954}, // __builtin_msa_cle_s_h
+      {Intrinsic::mips_cle_s_w, 60976}, // __builtin_msa_cle_s_w
+      {Intrinsic::mips_cle_u_b, 60998}, // __builtin_msa_cle_u_b
+      {Intrinsic::mips_cle_u_d, 61020}, // __builtin_msa_cle_u_d
+      {Intrinsic::mips_cle_u_h, 61042}, // __builtin_msa_cle_u_h
+      {Intrinsic::mips_cle_u_w, 61064}, // __builtin_msa_cle_u_w
+      {Intrinsic::mips_clei_s_b, 61086}, // __builtin_msa_clei_s_b
+      {Intrinsic::mips_clei_s_d, 61109}, // __builtin_msa_clei_s_d
+      {Intrinsic::mips_clei_s_h, 61132}, // __builtin_msa_clei_s_h
+      {Intrinsic::mips_clei_s_w, 61155}, // __builtin_msa_clei_s_w
+      {Intrinsic::mips_clei_u_b, 61178}, // __builtin_msa_clei_u_b
+      {Intrinsic::mips_clei_u_d, 61201}, // __builtin_msa_clei_u_d
+      {Intrinsic::mips_clei_u_h, 61224}, // __builtin_msa_clei_u_h
+      {Intrinsic::mips_clei_u_w, 61247}, // __builtin_msa_clei_u_w
+      {Intrinsic::mips_clt_s_b, 61270}, // __builtin_msa_clt_s_b
+      {Intrinsic::mips_clt_s_d, 61292}, // __builtin_msa_clt_s_d
+      {Intrinsic::mips_clt_s_h, 61314}, // __builtin_msa_clt_s_h
+      {Intrinsic::mips_clt_s_w, 61336}, // __builtin_msa_clt_s_w
+      {Intrinsic::mips_clt_u_b, 61358}, // __builtin_msa_clt_u_b
+      {Intrinsic::mips_clt_u_d, 61380}, // __builtin_msa_clt_u_d
+      {Intrinsic::mips_clt_u_h, 61402}, // __builtin_msa_clt_u_h
+      {Intrinsic::mips_clt_u_w, 61424}, // __builtin_msa_clt_u_w
+      {Intrinsic::mips_clti_s_b, 61446}, // __builtin_msa_clti_s_b
+      {Intrinsic::mips_clti_s_d, 61469}, // __builtin_msa_clti_s_d
+      {Intrinsic::mips_clti_s_h, 61492}, // __builtin_msa_clti_s_h
+      {Intrinsic::mips_clti_s_w, 61515}, // __builtin_msa_clti_s_w
+      {Intrinsic::mips_clti_u_b, 61538}, // __builtin_msa_clti_u_b
+      {Intrinsic::mips_clti_u_d, 61561}, // __builtin_msa_clti_u_d
+      {Intrinsic::mips_clti_u_h, 61584}, // __builtin_msa_clti_u_h
+      {Intrinsic::mips_clti_u_w, 61607}, // __builtin_msa_clti_u_w
+      {Intrinsic::mips_copy_s_b, 61948}, // __builtin_msa_copy_s_b
+      {Intrinsic::mips_copy_s_d, 61971}, // __builtin_msa_copy_s_d
+      {Intrinsic::mips_copy_s_h, 61994}, // __builtin_msa_copy_s_h
+      {Intrinsic::mips_copy_s_w, 62017}, // __builtin_msa_copy_s_w
+      {Intrinsic::mips_copy_u_b, 62040}, // __builtin_msa_copy_u_b
+      {Intrinsic::mips_copy_u_d, 62063}, // __builtin_msa_copy_u_d
+      {Intrinsic::mips_copy_u_h, 62086}, // __builtin_msa_copy_u_h
+      {Intrinsic::mips_copy_u_w, 62109}, // __builtin_msa_copy_u_w
+      {Intrinsic::mips_ctcmsa, 62132}, // __builtin_msa_ctcmsa
+      {Intrinsic::mips_div_s_b, 62153}, // __builtin_msa_div_s_b
+      {Intrinsic::mips_div_s_d, 62175}, // __builtin_msa_div_s_d
+      {Intrinsic::mips_div_s_h, 62197}, // __builtin_msa_div_s_h
+      {Intrinsic::mips_div_s_w, 62219}, // __builtin_msa_div_s_w
+      {Intrinsic::mips_div_u_b, 62241}, // __builtin_msa_div_u_b
+      {Intrinsic::mips_div_u_d, 62263}, // __builtin_msa_div_u_d
+      {Intrinsic::mips_div_u_h, 62285}, // __builtin_msa_div_u_h
+      {Intrinsic::mips_div_u_w, 62307}, // __builtin_msa_div_u_w
+      {Intrinsic::mips_dotp_s_d, 62349}, // __builtin_msa_dotp_s_d
+      {Intrinsic::mips_dotp_s_h, 62372}, // __builtin_msa_dotp_s_h
+      {Intrinsic::mips_dotp_s_w, 62395}, // __builtin_msa_dotp_s_w
+      {Intrinsic::mips_dotp_u_d, 62418}, // __builtin_msa_dotp_u_d
+      {Intrinsic::mips_dotp_u_h, 62441}, // __builtin_msa_dotp_u_h
+      {Intrinsic::mips_dotp_u_w, 62464}, // __builtin_msa_dotp_u_w
+      {Intrinsic::mips_dpadd_s_d, 62511}, // __builtin_msa_dpadd_s_d
+      {Intrinsic::mips_dpadd_s_h, 62535}, // __builtin_msa_dpadd_s_h
+      {Intrinsic::mips_dpadd_s_w, 62559}, // __builtin_msa_dpadd_s_w
+      {Intrinsic::mips_dpadd_u_d, 62583}, // __builtin_msa_dpadd_u_d
+      {Intrinsic::mips_dpadd_u_h, 62607}, // __builtin_msa_dpadd_u_h
+      {Intrinsic::mips_dpadd_u_w, 62631}, // __builtin_msa_dpadd_u_w
+      {Intrinsic::mips_dpsub_s_d, 63030}, // __builtin_msa_dpsub_s_d
+      {Intrinsic::mips_dpsub_s_h, 63054}, // __builtin_msa_dpsub_s_h
+      {Intrinsic::mips_dpsub_s_w, 63078}, // __builtin_msa_dpsub_s_w
+      {Intrinsic::mips_dpsub_u_d, 63102}, // __builtin_msa_dpsub_u_d
+      {Intrinsic::mips_dpsub_u_h, 63126}, // __builtin_msa_dpsub_u_h
+      {Intrinsic::mips_dpsub_u_w, 63150}, // __builtin_msa_dpsub_u_w
+      {Intrinsic::mips_fadd_d, 63336}, // __builtin_msa_fadd_d
+      {Intrinsic::mips_fadd_w, 63357}, // __builtin_msa_fadd_w
+      {Intrinsic::mips_fcaf_d, 63378}, // __builtin_msa_fcaf_d
+      {Intrinsic::mips_fcaf_w, 63399}, // __builtin_msa_fcaf_w
+      {Intrinsic::mips_fceq_d, 63420}, // __builtin_msa_fceq_d
+      {Intrinsic::mips_fceq_w, 63441}, // __builtin_msa_fceq_w
+      {Intrinsic::mips_fclass_d, 63462}, // __builtin_msa_fclass_d
+      {Intrinsic::mips_fclass_w, 63485}, // __builtin_msa_fclass_w
+      {Intrinsic::mips_fcle_d, 63508}, // __builtin_msa_fcle_d
+      {Intrinsic::mips_fcle_w, 63529}, // __builtin_msa_fcle_w
+      {Intrinsic::mips_fclt_d, 63550}, // __builtin_msa_fclt_d
+      {Intrinsic::mips_fclt_w, 63571}, // __builtin_msa_fclt_w
+      {Intrinsic::mips_fcne_d, 63592}, // __builtin_msa_fcne_d
+      {Intrinsic::mips_fcne_w, 63613}, // __builtin_msa_fcne_w
+      {Intrinsic::mips_fcor_d, 63634}, // __builtin_msa_fcor_d
+      {Intrinsic::mips_fcor_w, 63655}, // __builtin_msa_fcor_w
+      {Intrinsic::mips_fcueq_d, 63676}, // __builtin_msa_fcueq_d
+      {Intrinsic::mips_fcueq_w, 63698}, // __builtin_msa_fcueq_w
+      {Intrinsic::mips_fcule_d, 63720}, // __builtin_msa_fcule_d
+      {Intrinsic::mips_fcule_w, 63742}, // __builtin_msa_fcule_w
+      {Intrinsic::mips_fcult_d, 63764}, // __builtin_msa_fcult_d
+      {Intrinsic::mips_fcult_w, 63786}, // __builtin_msa_fcult_w
+      {Intrinsic::mips_fcun_d, 63808}, // __builtin_msa_fcun_d
+      {Intrinsic::mips_fcun_w, 63829}, // __builtin_msa_fcun_w
+      {Intrinsic::mips_fcune_d, 63850}, // __builtin_msa_fcune_d
+      {Intrinsic::mips_fcune_w, 63872}, // __builtin_msa_fcune_w
+      {Intrinsic::mips_fdiv_d, 63894}, // __builtin_msa_fdiv_d
+      {Intrinsic::mips_fdiv_w, 63915}, // __builtin_msa_fdiv_w
+      {Intrinsic::mips_fexdo_h, 63936}, // __builtin_msa_fexdo_h
+      {Intrinsic::mips_fexdo_w, 63958}, // __builtin_msa_fexdo_w
+      {Intrinsic::mips_fexp2_d, 63980}, // __builtin_msa_fexp2_d
+      {Intrinsic::mips_fexp2_w, 64002}, // __builtin_msa_fexp2_w
+      {Intrinsic::mips_fexupl_d, 64024}, // __builtin_msa_fexupl_d
+      {Intrinsic::mips_fexupl_w, 64047}, // __builtin_msa_fexupl_w
+      {Intrinsic::mips_fexupr_d, 64070}, // __builtin_msa_fexupr_d
+      {Intrinsic::mips_fexupr_w, 64093}, // __builtin_msa_fexupr_w
+      {Intrinsic::mips_ffint_s_d, 64116}, // __builtin_msa_ffint_s_d
+      {Intrinsic::mips_ffint_s_w, 64140}, // __builtin_msa_ffint_s_w
+      {Intrinsic::mips_ffint_u_d, 64164}, // __builtin_msa_ffint_u_d
+      {Intrinsic::mips_ffint_u_w, 64188}, // __builtin_msa_ffint_u_w
+      {Intrinsic::mips_ffql_d, 64212}, // __builtin_msa_ffql_d
+      {Intrinsic::mips_ffql_w, 64233}, // __builtin_msa_ffql_w
+      {Intrinsic::mips_ffqr_d, 64254}, // __builtin_msa_ffqr_d
+      {Intrinsic::mips_ffqr_w, 64275}, // __builtin_msa_ffqr_w
+      {Intrinsic::mips_fill_b, 64296}, // __builtin_msa_fill_b
+      {Intrinsic::mips_fill_d, 64317}, // __builtin_msa_fill_d
+      {Intrinsic::mips_fill_h, 64338}, // __builtin_msa_fill_h
+      {Intrinsic::mips_fill_w, 64359}, // __builtin_msa_fill_w
+      {Intrinsic::mips_flog2_d, 64380}, // __builtin_msa_flog2_d
+      {Intrinsic::mips_flog2_w, 64402}, // __builtin_msa_flog2_w
+      {Intrinsic::mips_fmadd_d, 64424}, // __builtin_msa_fmadd_d
+      {Intrinsic::mips_fmadd_w, 64446}, // __builtin_msa_fmadd_w
+      {Intrinsic::mips_fmax_a_d, 64468}, // __builtin_msa_fmax_a_d
+      {Intrinsic::mips_fmax_a_w, 64491}, // __builtin_msa_fmax_a_w
+      {Intrinsic::mips_fmax_d, 64514}, // __builtin_msa_fmax_d
+      {Intrinsic::mips_fmax_w, 64535}, // __builtin_msa_fmax_w
+      {Intrinsic::mips_fmin_a_d, 64556}, // __builtin_msa_fmin_a_d
+      {Intrinsic::mips_fmin_a_w, 64579}, // __builtin_msa_fmin_a_w
+      {Intrinsic::mips_fmin_d, 64602}, // __builtin_msa_fmin_d
+      {Intrinsic::mips_fmin_w, 64623}, // __builtin_msa_fmin_w
+      {Intrinsic::mips_fmsub_d, 64644}, // __builtin_msa_fmsub_d
+      {Intrinsic::mips_fmsub_w, 64666}, // __builtin_msa_fmsub_w
+      {Intrinsic::mips_fmul_d, 64688}, // __builtin_msa_fmul_d
+      {Intrinsic::mips_fmul_w, 64709}, // __builtin_msa_fmul_w
+      {Intrinsic::mips_frcp_d, 64730}, // __builtin_msa_frcp_d
+      {Intrinsic::mips_frcp_w, 64751}, // __builtin_msa_frcp_w
+      {Intrinsic::mips_frint_d, 64772}, // __builtin_msa_frint_d
+      {Intrinsic::mips_frint_w, 64794}, // __builtin_msa_frint_w
+      {Intrinsic::mips_frsqrt_d, 64816}, // __builtin_msa_frsqrt_d
+      {Intrinsic::mips_frsqrt_w, 64839}, // __builtin_msa_frsqrt_w
+      {Intrinsic::mips_fsaf_d, 64862}, // __builtin_msa_fsaf_d
+      {Intrinsic::mips_fsaf_w, 64883}, // __builtin_msa_fsaf_w
+      {Intrinsic::mips_fseq_d, 64904}, // __builtin_msa_fseq_d
+      {Intrinsic::mips_fseq_w, 64925}, // __builtin_msa_fseq_w
+      {Intrinsic::mips_fsle_d, 64946}, // __builtin_msa_fsle_d
+      {Intrinsic::mips_fsle_w, 64967}, // __builtin_msa_fsle_w
+      {Intrinsic::mips_fslt_d, 64988}, // __builtin_msa_fslt_d
+      {Intrinsic::mips_fslt_w, 65009}, // __builtin_msa_fslt_w
+      {Intrinsic::mips_fsne_d, 65030}, // __builtin_msa_fsne_d
+      {Intrinsic::mips_fsne_w, 65051}, // __builtin_msa_fsne_w
+      {Intrinsic::mips_fsor_d, 65072}, // __builtin_msa_fsor_d
+      {Intrinsic::mips_fsor_w, 65093}, // __builtin_msa_fsor_w
+      {Intrinsic::mips_fsqrt_d, 65114}, // __builtin_msa_fsqrt_d
+      {Intrinsic::mips_fsqrt_w, 65136}, // __builtin_msa_fsqrt_w
+      {Intrinsic::mips_fsub_d, 65158}, // __builtin_msa_fsub_d
+      {Intrinsic::mips_fsub_w, 65179}, // __builtin_msa_fsub_w
+      {Intrinsic::mips_fsueq_d, 65200}, // __builtin_msa_fsueq_d
+      {Intrinsic::mips_fsueq_w, 65222}, // __builtin_msa_fsueq_w
+      {Intrinsic::mips_fsule_d, 65244}, // __builtin_msa_fsule_d
+      {Intrinsic::mips_fsule_w, 65266}, // __builtin_msa_fsule_w
+      {Intrinsic::mips_fsult_d, 65288}, // __builtin_msa_fsult_d
+      {Intrinsic::mips_fsult_w, 65310}, // __builtin_msa_fsult_w
+      {Intrinsic::mips_fsun_d, 65332}, // __builtin_msa_fsun_d
+      {Intrinsic::mips_fsun_w, 65353}, // __builtin_msa_fsun_w
+      {Intrinsic::mips_fsune_d, 65374}, // __builtin_msa_fsune_d
+      {Intrinsic::mips_fsune_w, 65396}, // __builtin_msa_fsune_w
+      {Intrinsic::mips_ftint_s_d, 65418}, // __builtin_msa_ftint_s_d
+      {Intrinsic::mips_ftint_s_w, 65442}, // __builtin_msa_ftint_s_w
+      {Intrinsic::mips_ftint_u_d, 65466}, // __builtin_msa_ftint_u_d
+      {Intrinsic::mips_ftint_u_w, 65490}, // __builtin_msa_ftint_u_w
+      {Intrinsic::mips_ftq_h, 65514}, // __builtin_msa_ftq_h
+      {Intrinsic::mips_ftq_w, 65534}, // __builtin_msa_ftq_w
+      {Intrinsic::mips_ftrunc_s_d, 65554}, // __builtin_msa_ftrunc_s_d
+      {Intrinsic::mips_ftrunc_s_w, 65579}, // __builtin_msa_ftrunc_s_w
+      {Intrinsic::mips_ftrunc_u_d, 65604}, // __builtin_msa_ftrunc_u_d
+      {Intrinsic::mips_ftrunc_u_w, 65629}, // __builtin_msa_ftrunc_u_w
+      {Intrinsic::mips_hadd_s_d, 65654}, // __builtin_msa_hadd_s_d
+      {Intrinsic::mips_hadd_s_h, 65677}, // __builtin_msa_hadd_s_h
+      {Intrinsic::mips_hadd_s_w, 65700}, // __builtin_msa_hadd_s_w
+      {Intrinsic::mips_hadd_u_d, 65723}, // __builtin_msa_hadd_u_d
+      {Intrinsic::mips_hadd_u_h, 65746}, // __builtin_msa_hadd_u_h
+      {Intrinsic::mips_hadd_u_w, 65769}, // __builtin_msa_hadd_u_w
+      {Intrinsic::mips_hsub_s_d, 65792}, // __builtin_msa_hsub_s_d
+      {Intrinsic::mips_hsub_s_h, 65815}, // __builtin_msa_hsub_s_h
+      {Intrinsic::mips_hsub_s_w, 65838}, // __builtin_msa_hsub_s_w
+      {Intrinsic::mips_hsub_u_d, 65861}, // __builtin_msa_hsub_u_d
+      {Intrinsic::mips_hsub_u_h, 65884}, // __builtin_msa_hsub_u_h
+      {Intrinsic::mips_hsub_u_w, 65907}, // __builtin_msa_hsub_u_w
+      {Intrinsic::mips_ilvev_b, 65930}, // __builtin_msa_ilvev_b
+      {Intrinsic::mips_ilvev_d, 65952}, // __builtin_msa_ilvev_d
+      {Intrinsic::mips_ilvev_h, 65974}, // __builtin_msa_ilvev_h
+      {Intrinsic::mips_ilvev_w, 65996}, // __builtin_msa_ilvev_w
+      {Intrinsic::mips_ilvl_b, 66018}, // __builtin_msa_ilvl_b
+      {Intrinsic::mips_ilvl_d, 66039}, // __builtin_msa_ilvl_d
+      {Intrinsic::mips_ilvl_h, 66060}, // __builtin_msa_ilvl_h
+      {Intrinsic::mips_ilvl_w, 66081}, // __builtin_msa_ilvl_w
+      {Intrinsic::mips_ilvod_b, 66102}, // __builtin_msa_ilvod_b
+      {Intrinsic::mips_ilvod_d, 66124}, // __builtin_msa_ilvod_d
+      {Intrinsic::mips_ilvod_h, 66146}, // __builtin_msa_ilvod_h
+      {Intrinsic::mips_ilvod_w, 66168}, // __builtin_msa_ilvod_w
+      {Intrinsic::mips_ilvr_b, 66190}, // __builtin_msa_ilvr_b
+      {Intrinsic::mips_ilvr_d, 66211}, // __builtin_msa_ilvr_d
+      {Intrinsic::mips_ilvr_h, 66232}, // __builtin_msa_ilvr_h
+      {Intrinsic::mips_ilvr_w, 66253}, // __builtin_msa_ilvr_w
+      {Intrinsic::mips_insert_b, 66274}, // __builtin_msa_insert_b
+      {Intrinsic::mips_insert_d, 66297}, // __builtin_msa_insert_d
+      {Intrinsic::mips_insert_h, 66320}, // __builtin_msa_insert_h
+      {Intrinsic::mips_insert_w, 66343}, // __builtin_msa_insert_w
+      {Intrinsic::mips_insve_b, 66386}, // __builtin_msa_insve_b
+      {Intrinsic::mips_insve_d, 66408}, // __builtin_msa_insve_d
+      {Intrinsic::mips_insve_h, 66430}, // __builtin_msa_insve_h
+      {Intrinsic::mips_insve_w, 66452}, // __builtin_msa_insve_w
+      {Intrinsic::mips_ld_b, 66494}, // __builtin_msa_ld_b
+      {Intrinsic::mips_ld_d, 66513}, // __builtin_msa_ld_d
+      {Intrinsic::mips_ld_h, 66532}, // __builtin_msa_ld_h
+      {Intrinsic::mips_ld_w, 66551}, // __builtin_msa_ld_w
+      {Intrinsic::mips_ldi_b, 66570}, // __builtin_msa_ldi_b
+      {Intrinsic::mips_ldi_d, 66590}, // __builtin_msa_ldi_d
+      {Intrinsic::mips_ldi_h, 66610}, // __builtin_msa_ldi_h
+      {Intrinsic::mips_ldi_w, 66630}, // __builtin_msa_ldi_w
+      {Intrinsic::mips_madd_q_h, 66727}, // __builtin_msa_madd_q_h
+      {Intrinsic::mips_madd_q_w, 66750}, // __builtin_msa_madd_q_w
+      {Intrinsic::mips_maddr_q_h, 66773}, // __builtin_msa_maddr_q_h
+      {Intrinsic::mips_maddr_q_w, 66797}, // __builtin_msa_maddr_q_w
+      {Intrinsic::mips_maddv_b, 66842}, // __builtin_msa_maddv_b
+      {Intrinsic::mips_maddv_d, 66864}, // __builtin_msa_maddv_d
+      {Intrinsic::mips_maddv_h, 66886}, // __builtin_msa_maddv_h
+      {Intrinsic::mips_maddv_w, 66908}, // __builtin_msa_maddv_w
+      {Intrinsic::mips_max_a_b, 67040}, // __builtin_msa_max_a_b
+      {Intrinsic::mips_max_a_d, 67062}, // __builtin_msa_max_a_d
+      {Intrinsic::mips_max_a_h, 67084}, // __builtin_msa_max_a_h
+      {Intrinsic::mips_max_a_w, 67106}, // __builtin_msa_max_a_w
+      {Intrinsic::mips_max_s_b, 67128}, // __builtin_msa_max_s_b
+      {Intrinsic::mips_max_s_d, 67150}, // __builtin_msa_max_s_d
+      {Intrinsic::mips_max_s_h, 67172}, // __builtin_msa_max_s_h
+      {Intrinsic::mips_max_s_w, 67194}, // __builtin_msa_max_s_w
+      {Intrinsic::mips_max_u_b, 67216}, // __builtin_msa_max_u_b
+      {Intrinsic::mips_max_u_d, 67238}, // __builtin_msa_max_u_d
+      {Intrinsic::mips_max_u_h, 67260}, // __builtin_msa_max_u_h
+      {Intrinsic::mips_max_u_w, 67282}, // __builtin_msa_max_u_w
+      {Intrinsic::mips_maxi_s_b, 67304}, // __builtin_msa_maxi_s_b
+      {Intrinsic::mips_maxi_s_d, 67327}, // __builtin_msa_maxi_s_d
+      {Intrinsic::mips_maxi_s_h, 67350}, // __builtin_msa_maxi_s_h
+      {Intrinsic::mips_maxi_s_w, 67373}, // __builtin_msa_maxi_s_w
+      {Intrinsic::mips_maxi_u_b, 67396}, // __builtin_msa_maxi_u_b
+      {Intrinsic::mips_maxi_u_d, 67419}, // __builtin_msa_maxi_u_d
+      {Intrinsic::mips_maxi_u_h, 67442}, // __builtin_msa_maxi_u_h
+      {Intrinsic::mips_maxi_u_w, 67465}, // __builtin_msa_maxi_u_w
+      {Intrinsic::mips_min_a_b, 67488}, // __builtin_msa_min_a_b
+      {Intrinsic::mips_min_a_d, 67510}, // __builtin_msa_min_a_d
+      {Intrinsic::mips_min_a_h, 67532}, // __builtin_msa_min_a_h
+      {Intrinsic::mips_min_a_w, 67554}, // __builtin_msa_min_a_w
+      {Intrinsic::mips_min_s_b, 67576}, // __builtin_msa_min_s_b
+      {Intrinsic::mips_min_s_d, 67598}, // __builtin_msa_min_s_d
+      {Intrinsic::mips_min_s_h, 67620}, // __builtin_msa_min_s_h
+      {Intrinsic::mips_min_s_w, 67642}, // __builtin_msa_min_s_w
+      {Intrinsic::mips_min_u_b, 67664}, // __builtin_msa_min_u_b
+      {Intrinsic::mips_min_u_d, 67686}, // __builtin_msa_min_u_d
+      {Intrinsic::mips_min_u_h, 67708}, // __builtin_msa_min_u_h
+      {Intrinsic::mips_min_u_w, 67730}, // __builtin_msa_min_u_w
+      {Intrinsic::mips_mini_s_b, 67752}, // __builtin_msa_mini_s_b
+      {Intrinsic::mips_mini_s_d, 67775}, // __builtin_msa_mini_s_d
+      {Intrinsic::mips_mini_s_h, 67798}, // __builtin_msa_mini_s_h
+      {Intrinsic::mips_mini_s_w, 67821}, // __builtin_msa_mini_s_w
+      {Intrinsic::mips_mini_u_b, 67844}, // __builtin_msa_mini_u_b
+      {Intrinsic::mips_mini_u_d, 67867}, // __builtin_msa_mini_u_d
+      {Intrinsic::mips_mini_u_h, 67890}, // __builtin_msa_mini_u_h
+      {Intrinsic::mips_mini_u_w, 67913}, // __builtin_msa_mini_u_w
+      {Intrinsic::mips_mod_s_b, 67936}, // __builtin_msa_mod_s_b
+      {Intrinsic::mips_mod_s_d, 67958}, // __builtin_msa_mod_s_d
+      {Intrinsic::mips_mod_s_h, 67980}, // __builtin_msa_mod_s_h
+      {Intrinsic::mips_mod_s_w, 68002}, // __builtin_msa_mod_s_w
+      {Intrinsic::mips_mod_u_b, 68024}, // __builtin_msa_mod_u_b
+      {Intrinsic::mips_mod_u_d, 68046}, // __builtin_msa_mod_u_d
+      {Intrinsic::mips_mod_u_h, 68068}, // __builtin_msa_mod_u_h
+      {Intrinsic::mips_mod_u_w, 68090}, // __builtin_msa_mod_u_w
+      {Intrinsic::mips_move_v, 68134}, // __builtin_msa_move_v
+      {Intrinsic::mips_msub_q_h, 68175}, // __builtin_msa_msub_q_h
+      {Intrinsic::mips_msub_q_w, 68198}, // __builtin_msa_msub_q_w
+      {Intrinsic::mips_msubr_q_h, 68221}, // __builtin_msa_msubr_q_h
+      {Intrinsic::mips_msubr_q_w, 68245}, // __builtin_msa_msubr_q_w
+      {Intrinsic::mips_msubv_b, 68290}, // __builtin_msa_msubv_b
+      {Intrinsic::mips_msubv_d, 68312}, // __builtin_msa_msubv_d
+      {Intrinsic::mips_msubv_h, 68334}, // __builtin_msa_msubv_h
+      {Intrinsic::mips_msubv_w, 68356}, // __builtin_msa_msubv_w
+      {Intrinsic::mips_mul_q_h, 68422}, // __builtin_msa_mul_q_h
+      {Intrinsic::mips_mul_q_w, 68444}, // __builtin_msa_mul_q_w
+      {Intrinsic::mips_mulr_q_h, 68708}, // __builtin_msa_mulr_q_h
+      {Intrinsic::mips_mulr_q_w, 68731}, // __builtin_msa_mulr_q_w
+      {Intrinsic::mips_mulv_b, 68850}, // __builtin_msa_mulv_b
+      {Intrinsic::mips_mulv_d, 68871}, // __builtin_msa_mulv_d
+      {Intrinsic::mips_mulv_h, 68892}, // __builtin_msa_mulv_h
+      {Intrinsic::mips_mulv_w, 68913}, // __builtin_msa_mulv_w
+      {Intrinsic::mips_nloc_b, 68934}, // __builtin_msa_nloc_b
+      {Intrinsic::mips_nloc_d, 68955}, // __builtin_msa_nloc_d
+      {Intrinsic::mips_nloc_h, 68976}, // __builtin_msa_nloc_h
+      {Intrinsic::mips_nloc_w, 68997}, // __builtin_msa_nloc_w
+      {Intrinsic::mips_nlzc_b, 69018}, // __builtin_msa_nlzc_b
+      {Intrinsic::mips_nlzc_d, 69039}, // __builtin_msa_nlzc_d
+      {Intrinsic::mips_nlzc_h, 69060}, // __builtin_msa_nlzc_h
+      {Intrinsic::mips_nlzc_w, 69081}, // __builtin_msa_nlzc_w
+      {Intrinsic::mips_nor_v, 69102}, // __builtin_msa_nor_v
+      {Intrinsic::mips_nori_b, 69122}, // __builtin_msa_nori_b
+      {Intrinsic::mips_or_v, 69143}, // __builtin_msa_or_v
+      {Intrinsic::mips_ori_b, 69162}, // __builtin_msa_ori_b
+      {Intrinsic::mips_pckev_b, 69207}, // __builtin_msa_pckev_b
+      {Intrinsic::mips_pckev_d, 69229}, // __builtin_msa_pckev_d
+      {Intrinsic::mips_pckev_h, 69251}, // __builtin_msa_pckev_h
+      {Intrinsic::mips_pckev_w, 69273}, // __builtin_msa_pckev_w
+      {Intrinsic::mips_pckod_b, 69295}, // __builtin_msa_pckod_b
+      {Intrinsic::mips_pckod_d, 69317}, // __builtin_msa_pckod_d
+      {Intrinsic::mips_pckod_h, 69339}, // __builtin_msa_pckod_h
+      {Intrinsic::mips_pckod_w, 69361}, // __builtin_msa_pckod_w
+      {Intrinsic::mips_pcnt_b, 69383}, // __builtin_msa_pcnt_b
+      {Intrinsic::mips_pcnt_d, 69404}, // __builtin_msa_pcnt_d
+      {Intrinsic::mips_pcnt_h, 69425}, // __builtin_msa_pcnt_h
+      {Intrinsic::mips_pcnt_w, 69446}, // __builtin_msa_pcnt_w
+      {Intrinsic::mips_sat_s_b, 70130}, // __builtin_msa_sat_s_b
+      {Intrinsic::mips_sat_s_d, 70152}, // __builtin_msa_sat_s_d
+      {Intrinsic::mips_sat_s_h, 70174}, // __builtin_msa_sat_s_h
+      {Intrinsic::mips_sat_s_w, 70196}, // __builtin_msa_sat_s_w
+      {Intrinsic::mips_sat_u_b, 70218}, // __builtin_msa_sat_u_b
+      {Intrinsic::mips_sat_u_d, 70240}, // __builtin_msa_sat_u_d
+      {Intrinsic::mips_sat_u_h, 70262}, // __builtin_msa_sat_u_h
+      {Intrinsic::mips_sat_u_w, 70284}, // __builtin_msa_sat_u_w
+      {Intrinsic::mips_shf_b, 70306}, // __builtin_msa_shf_b
+      {Intrinsic::mips_shf_h, 70326}, // __builtin_msa_shf_h
+      {Intrinsic::mips_shf_w, 70346}, // __builtin_msa_shf_w
+      {Intrinsic::mips_sld_b, 70648}, // __builtin_msa_sld_b
+      {Intrinsic::mips_sld_d, 70668}, // __builtin_msa_sld_d
+      {Intrinsic::mips_sld_h, 70688}, // __builtin_msa_sld_h
+      {Intrinsic::mips_sld_w, 70708}, // __builtin_msa_sld_w
+      {Intrinsic::mips_sldi_b, 70728}, // __builtin_msa_sldi_b
+      {Intrinsic::mips_sldi_d, 70749}, // __builtin_msa_sldi_d
+      {Intrinsic::mips_sldi_h, 70770}, // __builtin_msa_sldi_h
+      {Intrinsic::mips_sldi_w, 70791}, // __builtin_msa_sldi_w
+      {Intrinsic::mips_sll_b, 70812}, // __builtin_msa_sll_b
+      {Intrinsic::mips_sll_d, 70832}, // __builtin_msa_sll_d
+      {Intrinsic::mips_sll_h, 70852}, // __builtin_msa_sll_h
+      {Intrinsic::mips_sll_w, 70872}, // __builtin_msa_sll_w
+      {Intrinsic::mips_slli_b, 70892}, // __builtin_msa_slli_b
+      {Intrinsic::mips_slli_d, 70913}, // __builtin_msa_slli_d
+      {Intrinsic::mips_slli_h, 70934}, // __builtin_msa_slli_h
+      {Intrinsic::mips_slli_w, 70955}, // __builtin_msa_slli_w
+      {Intrinsic::mips_splat_b, 70976}, // __builtin_msa_splat_b
+      {Intrinsic::mips_splat_d, 70998}, // __builtin_msa_splat_d
+      {Intrinsic::mips_splat_h, 71020}, // __builtin_msa_splat_h
+      {Intrinsic::mips_splat_w, 71042}, // __builtin_msa_splat_w
+      {Intrinsic::mips_splati_b, 71064}, // __builtin_msa_splati_b
+      {Intrinsic::mips_splati_d, 71087}, // __builtin_msa_splati_d
+      {Intrinsic::mips_splati_h, 71110}, // __builtin_msa_splati_h
+      {Intrinsic::mips_splati_w, 71133}, // __builtin_msa_splati_w
+      {Intrinsic::mips_sra_b, 71156}, // __builtin_msa_sra_b
+      {Intrinsic::mips_sra_d, 71176}, // __builtin_msa_sra_d
+      {Intrinsic::mips_sra_h, 71196}, // __builtin_msa_sra_h
+      {Intrinsic::mips_sra_w, 71216}, // __builtin_msa_sra_w
+      {Intrinsic::mips_srai_b, 71236}, // __builtin_msa_srai_b
+      {Intrinsic::mips_srai_d, 71257}, // __builtin_msa_srai_d
+      {Intrinsic::mips_srai_h, 71278}, // __builtin_msa_srai_h
+      {Intrinsic::mips_srai_w, 71299}, // __builtin_msa_srai_w
+      {Intrinsic::mips_srar_b, 71320}, // __builtin_msa_srar_b
+      {Intrinsic::mips_srar_d, 71341}, // __builtin_msa_srar_d
+      {Intrinsic::mips_srar_h, 71362}, // __builtin_msa_srar_h
+      {Intrinsic::mips_srar_w, 71383}, // __builtin_msa_srar_w
+      {Intrinsic::mips_srari_b, 71404}, // __builtin_msa_srari_b
+      {Intrinsic::mips_srari_d, 71426}, // __builtin_msa_srari_d
+      {Intrinsic::mips_srari_h, 71448}, // __builtin_msa_srari_h
+      {Intrinsic::mips_srari_w, 71470}, // __builtin_msa_srari_w
+      {Intrinsic::mips_srl_b, 71492}, // __builtin_msa_srl_b
+      {Intrinsic::mips_srl_d, 71512}, // __builtin_msa_srl_d
+      {Intrinsic::mips_srl_h, 71532}, // __builtin_msa_srl_h
+      {Intrinsic::mips_srl_w, 71552}, // __builtin_msa_srl_w
+      {Intrinsic::mips_srli_b, 71572}, // __builtin_msa_srli_b
+      {Intrinsic::mips_srli_d, 71593}, // __builtin_msa_srli_d
+      {Intrinsic::mips_srli_h, 71614}, // __builtin_msa_srli_h
+      {Intrinsic::mips_srli_w, 71635}, // __builtin_msa_srli_w
+      {Intrinsic::mips_srlr_b, 71656}, // __builtin_msa_srlr_b
+      {Intrinsic::mips_srlr_d, 71677}, // __builtin_msa_srlr_d
+      {Intrinsic::mips_srlr_h, 71698}, // __builtin_msa_srlr_h
+      {Intrinsic::mips_srlr_w, 71719}, // __builtin_msa_srlr_w
+      {Intrinsic::mips_srlri_b, 71740}, // __builtin_msa_srlri_b
+      {Intrinsic::mips_srlri_d, 71762}, // __builtin_msa_srlri_d
+      {Intrinsic::mips_srlri_h, 71784}, // __builtin_msa_srlri_h
+      {Intrinsic::mips_srlri_w, 71806}, // __builtin_msa_srlri_w
+      {Intrinsic::mips_st_b, 71828}, // __builtin_msa_st_b
+      {Intrinsic::mips_st_d, 71847}, // __builtin_msa_st_d
+      {Intrinsic::mips_st_h, 71866}, // __builtin_msa_st_h
+      {Intrinsic::mips_st_w, 71885}, // __builtin_msa_st_w
+      {Intrinsic::mips_subs_s_b, 72074}, // __builtin_msa_subs_s_b
+      {Intrinsic::mips_subs_s_d, 72097}, // __builtin_msa_subs_s_d
+      {Intrinsic::mips_subs_s_h, 72120}, // __builtin_msa_subs_s_h
+      {Intrinsic::mips_subs_s_w, 72143}, // __builtin_msa_subs_s_w
+      {Intrinsic::mips_subs_u_b, 72166}, // __builtin_msa_subs_u_b
+      {Intrinsic::mips_subs_u_d, 72189}, // __builtin_msa_subs_u_d
+      {Intrinsic::mips_subs_u_h, 72212}, // __builtin_msa_subs_u_h
+      {Intrinsic::mips_subs_u_w, 72235}, // __builtin_msa_subs_u_w
+      {Intrinsic::mips_subsus_u_b, 72258}, // __builtin_msa_subsus_u_b
+      {Intrinsic::mips_subsus_u_d, 72283}, // __builtin_msa_subsus_u_d
+      {Intrinsic::mips_subsus_u_h, 72308}, // __builtin_msa_subsus_u_h
+      {Intrinsic::mips_subsus_u_w, 72333}, // __builtin_msa_subsus_u_w
+      {Intrinsic::mips_subsuu_s_b, 72358}, // __builtin_msa_subsuu_s_b
+      {Intrinsic::mips_subsuu_s_d, 72383}, // __builtin_msa_subsuu_s_d
+      {Intrinsic::mips_subsuu_s_h, 72408}, // __builtin_msa_subsuu_s_h
+      {Intrinsic::mips_subsuu_s_w, 72433}, // __builtin_msa_subsuu_s_w
+      {Intrinsic::mips_subv_b, 72604}, // __builtin_msa_subv_b
+      {Intrinsic::mips_subv_d, 72625}, // __builtin_msa_subv_d
+      {Intrinsic::mips_subv_h, 72646}, // __builtin_msa_subv_h
+      {Intrinsic::mips_subv_w, 72667}, // __builtin_msa_subv_w
+      {Intrinsic::mips_subvi_b, 72688}, // __builtin_msa_subvi_b
+      {Intrinsic::mips_subvi_d, 72710}, // __builtin_msa_subvi_d
+      {Intrinsic::mips_subvi_h, 72732}, // __builtin_msa_subvi_h
+      {Intrinsic::mips_subvi_w, 72754}, // __builtin_msa_subvi_w
+      {Intrinsic::mips_vshf_b, 72776}, // __builtin_msa_vshf_b
+      {Intrinsic::mips_vshf_d, 72797}, // __builtin_msa_vshf_d
+      {Intrinsic::mips_vshf_h, 72818}, // __builtin_msa_vshf_h
+      {Intrinsic::mips_vshf_w, 72839}, // __builtin_msa_vshf_w
+      {Intrinsic::mips_xor_v, 72881}, // __builtin_msa_xor_v
+      {Intrinsic::mips_xori_b, 72901}, // __builtin_msa_xori_b
+    };
+    auto I = std::lower_bound(std::begin(mipsNames),
+                              std::end(mipsNames),
+                              BuiltinNameStr);
+    if (I != std::end(mipsNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "nvvm") {
+    static const BuiltinEntry nvvmNames[] = {
+      {Intrinsic::nvvm_add_rm_d, 72922}, // __nvvm_add_rm_d
+      {Intrinsic::nvvm_add_rm_f, 72938}, // __nvvm_add_rm_f
+      {Intrinsic::nvvm_add_rm_ftz_f, 72954}, // __nvvm_add_rm_ftz_f
+      {Intrinsic::nvvm_add_rn_d, 72974}, // __nvvm_add_rn_d
+      {Intrinsic::nvvm_add_rn_f, 72990}, // __nvvm_add_rn_f
+      {Intrinsic::nvvm_add_rn_ftz_f, 73006}, // __nvvm_add_rn_ftz_f
+      {Intrinsic::nvvm_add_rp_d, 73026}, // __nvvm_add_rp_d
+      {Intrinsic::nvvm_add_rp_f, 73042}, // __nvvm_add_rp_f
+      {Intrinsic::nvvm_add_rp_ftz_f, 73058}, // __nvvm_add_rp_ftz_f
+      {Intrinsic::nvvm_add_rz_d, 73078}, // __nvvm_add_rz_d
+      {Intrinsic::nvvm_add_rz_f, 73094}, // __nvvm_add_rz_f
+      {Intrinsic::nvvm_add_rz_ftz_f, 73110}, // __nvvm_add_rz_ftz_f
+      {Intrinsic::nvvm_barrier, 73167}, // __nvvm_bar
+      {Intrinsic::nvvm_barrier0_and, 73249}, // __nvvm_bar0_and
+      {Intrinsic::nvvm_barrier0_or, 73265}, // __nvvm_bar0_or
+      {Intrinsic::nvvm_barrier0_popc, 73280}, // __nvvm_bar0_popc
+      {Intrinsic::nvvm_barrier_n, 73178}, // __nvvm_bar_n
+      {Intrinsic::nvvm_bar_sync, 73130}, // __nvvm_bar_sync
+      {Intrinsic::nvvm_bar_warp_sync, 73146}, // __nvvm_bar_warp_sync
+      {Intrinsic::nvvm_barrier_sync, 73191}, // __nvvm_barrier_sync
+      {Intrinsic::nvvm_barrier_sync_cnt, 73211}, // __nvvm_barrier_sync_cnt
+      {Intrinsic::nvvm_bitcast_d2ll, 73297}, // __nvvm_bitcast_d2ll
+      {Intrinsic::nvvm_bitcast_f2i, 73317}, // __nvvm_bitcast_f2i
+      {Intrinsic::nvvm_bitcast_i2f, 73336}, // __nvvm_bitcast_i2f
+      {Intrinsic::nvvm_bitcast_ll2d, 73355}, // __nvvm_bitcast_ll2d
+      {Intrinsic::nvvm_ceil_d, 73375}, // __nvvm_ceil_d
+      {Intrinsic::nvvm_ceil_f, 73389}, // __nvvm_ceil_f
+      {Intrinsic::nvvm_ceil_ftz_f, 73403}, // __nvvm_ceil_ftz_f
+      {Intrinsic::nvvm_cos_approx_f, 73421}, // __nvvm_cos_approx_f
+      {Intrinsic::nvvm_cos_approx_ftz_f, 73441}, // __nvvm_cos_approx_ftz_f
+      {Intrinsic::nvvm_d2f_rm, 73465}, // __nvvm_d2f_rm
+      {Intrinsic::nvvm_d2f_rm_ftz, 73479}, // __nvvm_d2f_rm_ftz
+      {Intrinsic::nvvm_d2f_rn, 73497}, // __nvvm_d2f_rn
+      {Intrinsic::nvvm_d2f_rn_ftz, 73511}, // __nvvm_d2f_rn_ftz
+      {Intrinsic::nvvm_d2f_rp, 73529}, // __nvvm_d2f_rp
+      {Intrinsic::nvvm_d2f_rp_ftz, 73543}, // __nvvm_d2f_rp_ftz
+      {Intrinsic::nvvm_d2f_rz, 73561}, // __nvvm_d2f_rz
+      {Intrinsic::nvvm_d2f_rz_ftz, 73575}, // __nvvm_d2f_rz_ftz
+      {Intrinsic::nvvm_d2i_hi, 73593}, // __nvvm_d2i_hi
+      {Intrinsic::nvvm_d2i_lo, 73607}, // __nvvm_d2i_lo
+      {Intrinsic::nvvm_d2i_rm, 73621}, // __nvvm_d2i_rm
+      {Intrinsic::nvvm_d2i_rn, 73635}, // __nvvm_d2i_rn
+      {Intrinsic::nvvm_d2i_rp, 73649}, // __nvvm_d2i_rp
+      {Intrinsic::nvvm_d2i_rz, 73663}, // __nvvm_d2i_rz
+      {Intrinsic::nvvm_d2ll_rm, 73677}, // __nvvm_d2ll_rm
+      {Intrinsic::nvvm_d2ll_rn, 73692}, // __nvvm_d2ll_rn
+      {Intrinsic::nvvm_d2ll_rp, 73707}, // __nvvm_d2ll_rp
+      {Intrinsic::nvvm_d2ll_rz, 73722}, // __nvvm_d2ll_rz
+      {Intrinsic::nvvm_d2ui_rm, 73737}, // __nvvm_d2ui_rm
+      {Intrinsic::nvvm_d2ui_rn, 73752}, // __nvvm_d2ui_rn
+      {Intrinsic::nvvm_d2ui_rp, 73767}, // __nvvm_d2ui_rp
+      {Intrinsic::nvvm_d2ui_rz, 73782}, // __nvvm_d2ui_rz
+      {Intrinsic::nvvm_d2ull_rm, 73797}, // __nvvm_d2ull_rm
+      {Intrinsic::nvvm_d2ull_rn, 73813}, // __nvvm_d2ull_rn
+      {Intrinsic::nvvm_d2ull_rp, 73829}, // __nvvm_d2ull_rp
+      {Intrinsic::nvvm_d2ull_rz, 73845}, // __nvvm_d2ull_rz
+      {Intrinsic::nvvm_div_approx_f, 73861}, // __nvvm_div_approx_f
+      {Intrinsic::nvvm_div_approx_ftz_f, 73881}, // __nvvm_div_approx_ftz_f
+      {Intrinsic::nvvm_div_rm_d, 73905}, // __nvvm_div_rm_d
+      {Intrinsic::nvvm_div_rm_f, 73921}, // __nvvm_div_rm_f
+      {Intrinsic::nvvm_div_rm_ftz_f, 73937}, // __nvvm_div_rm_ftz_f
+      {Intrinsic::nvvm_div_rn_d, 73957}, // __nvvm_div_rn_d
+      {Intrinsic::nvvm_div_rn_f, 73973}, // __nvvm_div_rn_f
+      {Intrinsic::nvvm_div_rn_ftz_f, 73989}, // __nvvm_div_rn_ftz_f
+      {Intrinsic::nvvm_div_rp_d, 74009}, // __nvvm_div_rp_d
+      {Intrinsic::nvvm_div_rp_f, 74025}, // __nvvm_div_rp_f
+      {Intrinsic::nvvm_div_rp_ftz_f, 74041}, // __nvvm_div_rp_ftz_f
+      {Intrinsic::nvvm_div_rz_d, 74061}, // __nvvm_div_rz_d
+      {Intrinsic::nvvm_div_rz_f, 74077}, // __nvvm_div_rz_f
+      {Intrinsic::nvvm_div_rz_ftz_f, 74093}, // __nvvm_div_rz_ftz_f
+      {Intrinsic::nvvm_ex2_approx_d, 74113}, // __nvvm_ex2_approx_d
+      {Intrinsic::nvvm_ex2_approx_f, 74133}, // __nvvm_ex2_approx_f
+      {Intrinsic::nvvm_ex2_approx_ftz_f, 74153}, // __nvvm_ex2_approx_ftz_f
+      {Intrinsic::nvvm_f2h_rn, 74177}, // __nvvm_f2h_rn
+      {Intrinsic::nvvm_f2h_rn_ftz, 74191}, // __nvvm_f2h_rn_ftz
+      {Intrinsic::nvvm_f2i_rm, 74209}, // __nvvm_f2i_rm
+      {Intrinsic::nvvm_f2i_rm_ftz, 74223}, // __nvvm_f2i_rm_ftz
+      {Intrinsic::nvvm_f2i_rn, 74241}, // __nvvm_f2i_rn
+      {Intrinsic::nvvm_f2i_rn_ftz, 74255}, // __nvvm_f2i_rn_ftz
+      {Intrinsic::nvvm_f2i_rp, 74273}, // __nvvm_f2i_rp
+      {Intrinsic::nvvm_f2i_rp_ftz, 74287}, // __nvvm_f2i_rp_ftz
+      {Intrinsic::nvvm_f2i_rz, 74305}, // __nvvm_f2i_rz
+      {Intrinsic::nvvm_f2i_rz_ftz, 74319}, // __nvvm_f2i_rz_ftz
+      {Intrinsic::nvvm_f2ll_rm, 74337}, // __nvvm_f2ll_rm
+      {Intrinsic::nvvm_f2ll_rm_ftz, 74352}, // __nvvm_f2ll_rm_ftz
+      {Intrinsic::nvvm_f2ll_rn, 74371}, // __nvvm_f2ll_rn
+      {Intrinsic::nvvm_f2ll_rn_ftz, 74386}, // __nvvm_f2ll_rn_ftz
+      {Intrinsic::nvvm_f2ll_rp, 74405}, // __nvvm_f2ll_rp
+      {Intrinsic::nvvm_f2ll_rp_ftz, 74420}, // __nvvm_f2ll_rp_ftz
+      {Intrinsic::nvvm_f2ll_rz, 74439}, // __nvvm_f2ll_rz
+      {Intrinsic::nvvm_f2ll_rz_ftz, 74454}, // __nvvm_f2ll_rz_ftz
+      {Intrinsic::nvvm_f2ui_rm, 74473}, // __nvvm_f2ui_rm
+      {Intrinsic::nvvm_f2ui_rm_ftz, 74488}, // __nvvm_f2ui_rm_ftz
+      {Intrinsic::nvvm_f2ui_rn, 74507}, // __nvvm_f2ui_rn
+      {Intrinsic::nvvm_f2ui_rn_ftz, 74522}, // __nvvm_f2ui_rn_ftz
+      {Intrinsic::nvvm_f2ui_rp, 74541}, // __nvvm_f2ui_rp
+      {Intrinsic::nvvm_f2ui_rp_ftz, 74556}, // __nvvm_f2ui_rp_ftz
+      {Intrinsic::nvvm_f2ui_rz, 74575}, // __nvvm_f2ui_rz
+      {Intrinsic::nvvm_f2ui_rz_ftz, 74590}, // __nvvm_f2ui_rz_ftz
+      {Intrinsic::nvvm_f2ull_rm, 74609}, // __nvvm_f2ull_rm
+      {Intrinsic::nvvm_f2ull_rm_ftz, 74625}, // __nvvm_f2ull_rm_ftz
+      {Intrinsic::nvvm_f2ull_rn, 74645}, // __nvvm_f2ull_rn
+      {Intrinsic::nvvm_f2ull_rn_ftz, 74661}, // __nvvm_f2ull_rn_ftz
+      {Intrinsic::nvvm_f2ull_rp, 74681}, // __nvvm_f2ull_rp
+      {Intrinsic::nvvm_f2ull_rp_ftz, 74697}, // __nvvm_f2ull_rp_ftz
+      {Intrinsic::nvvm_f2ull_rz, 74717}, // __nvvm_f2ull_rz
+      {Intrinsic::nvvm_f2ull_rz_ftz, 74733}, // __nvvm_f2ull_rz_ftz
+      {Intrinsic::nvvm_fabs_d, 74753}, // __nvvm_fabs_d
+      {Intrinsic::nvvm_fabs_f, 74767}, // __nvvm_fabs_f
+      {Intrinsic::nvvm_fabs_ftz_f, 74781}, // __nvvm_fabs_ftz_f
+      {Intrinsic::nvvm_floor_d, 74799}, // __nvvm_floor_d
+      {Intrinsic::nvvm_floor_f, 74814}, // __nvvm_floor_f
+      {Intrinsic::nvvm_floor_ftz_f, 74829}, // __nvvm_floor_ftz_f
+      {Intrinsic::nvvm_fma_rm_d, 74848}, // __nvvm_fma_rm_d
+      {Intrinsic::nvvm_fma_rm_f, 74864}, // __nvvm_fma_rm_f
+      {Intrinsic::nvvm_fma_rm_ftz_f, 74880}, // __nvvm_fma_rm_ftz_f
+      {Intrinsic::nvvm_fma_rn_d, 74900}, // __nvvm_fma_rn_d
+      {Intrinsic::nvvm_fma_rn_f, 74916}, // __nvvm_fma_rn_f
+      {Intrinsic::nvvm_fma_rn_ftz_f, 74932}, // __nvvm_fma_rn_ftz_f
+      {Intrinsic::nvvm_fma_rp_d, 74952}, // __nvvm_fma_rp_d
+      {Intrinsic::nvvm_fma_rp_f, 74968}, // __nvvm_fma_rp_f
+      {Intrinsic::nvvm_fma_rp_ftz_f, 74984}, // __nvvm_fma_rp_ftz_f
+      {Intrinsic::nvvm_fma_rz_d, 75004}, // __nvvm_fma_rz_d
+      {Intrinsic::nvvm_fma_rz_f, 75020}, // __nvvm_fma_rz_f
+      {Intrinsic::nvvm_fma_rz_ftz_f, 75036}, // __nvvm_fma_rz_ftz_f
+      {Intrinsic::nvvm_fmax_d, 75056}, // __nvvm_fmax_d
+      {Intrinsic::nvvm_fmax_f, 75070}, // __nvvm_fmax_f
+      {Intrinsic::nvvm_fmax_ftz_f, 75084}, // __nvvm_fmax_ftz_f
+      {Intrinsic::nvvm_fmin_d, 75102}, // __nvvm_fmin_d
+      {Intrinsic::nvvm_fmin_f, 75116}, // __nvvm_fmin_f
+      {Intrinsic::nvvm_fmin_ftz_f, 75130}, // __nvvm_fmin_ftz_f
+      {Intrinsic::nvvm_fns, 75148}, // __nvvm_fns
+      {Intrinsic::nvvm_i2d_rm, 75159}, // __nvvm_i2d_rm
+      {Intrinsic::nvvm_i2d_rn, 75173}, // __nvvm_i2d_rn
+      {Intrinsic::nvvm_i2d_rp, 75187}, // __nvvm_i2d_rp
+      {Intrinsic::nvvm_i2d_rz, 75201}, // __nvvm_i2d_rz
+      {Intrinsic::nvvm_i2f_rm, 75215}, // __nvvm_i2f_rm
+      {Intrinsic::nvvm_i2f_rn, 75229}, // __nvvm_i2f_rn
+      {Intrinsic::nvvm_i2f_rp, 75243}, // __nvvm_i2f_rp
+      {Intrinsic::nvvm_i2f_rz, 75257}, // __nvvm_i2f_rz
+      {Intrinsic::nvvm_isspacep_const, 75271}, // __nvvm_isspacep_const
+      {Intrinsic::nvvm_isspacep_global, 75293}, // __nvvm_isspacep_global
+      {Intrinsic::nvvm_isspacep_local, 75316}, // __nvvm_isspacep_local
+      {Intrinsic::nvvm_isspacep_shared, 75338}, // __nvvm_isspacep_shared
+      {Intrinsic::nvvm_istypep_sampler, 75361}, // __nvvm_istypep_sampler
+      {Intrinsic::nvvm_istypep_surface, 75384}, // __nvvm_istypep_surface
+      {Intrinsic::nvvm_istypep_texture, 75407}, // __nvvm_istypep_texture
+      {Intrinsic::nvvm_lg2_approx_d, 75430}, // __nvvm_lg2_approx_d
+      {Intrinsic::nvvm_lg2_approx_f, 75450}, // __nvvm_lg2_approx_f
+      {Intrinsic::nvvm_lg2_approx_ftz_f, 75470}, // __nvvm_lg2_approx_ftz_f
+      {Intrinsic::nvvm_ll2d_rm, 75494}, // __nvvm_ll2d_rm
+      {Intrinsic::nvvm_ll2d_rn, 75509}, // __nvvm_ll2d_rn
+      {Intrinsic::nvvm_ll2d_rp, 75524}, // __nvvm_ll2d_rp
+      {Intrinsic::nvvm_ll2d_rz, 75539}, // __nvvm_ll2d_rz
+      {Intrinsic::nvvm_ll2f_rm, 75554}, // __nvvm_ll2f_rm
+      {Intrinsic::nvvm_ll2f_rn, 75569}, // __nvvm_ll2f_rn
+      {Intrinsic::nvvm_ll2f_rp, 75584}, // __nvvm_ll2f_rp
+      {Intrinsic::nvvm_ll2f_rz, 75599}, // __nvvm_ll2f_rz
+      {Intrinsic::nvvm_lohi_i2d, 75614}, // __nvvm_lohi_i2d
+      {Intrinsic::nvvm_match_any_sync_i32, 75630}, // __nvvm_match_any_sync_i32
+      {Intrinsic::nvvm_match_any_sync_i64, 75656}, // __nvvm_match_any_sync_i64
+      {Intrinsic::nvvm_membar_cta, 75682}, // __nvvm_membar_cta
+      {Intrinsic::nvvm_membar_gl, 75700}, // __nvvm_membar_gl
+      {Intrinsic::nvvm_membar_sys, 75717}, // __nvvm_membar_sys
+      {Intrinsic::nvvm_mul24_i, 75943}, // __nvvm_mul24_i
+      {Intrinsic::nvvm_mul24_ui, 75958}, // __nvvm_mul24_ui
+      {Intrinsic::nvvm_mul_rm_d, 75735}, // __nvvm_mul_rm_d
+      {Intrinsic::nvvm_mul_rm_f, 75751}, // __nvvm_mul_rm_f
+      {Intrinsic::nvvm_mul_rm_ftz_f, 75767}, // __nvvm_mul_rm_ftz_f
+      {Intrinsic::nvvm_mul_rn_d, 75787}, // __nvvm_mul_rn_d
+      {Intrinsic::nvvm_mul_rn_f, 75803}, // __nvvm_mul_rn_f
+      {Intrinsic::nvvm_mul_rn_ftz_f, 75819}, // __nvvm_mul_rn_ftz_f
+      {Intrinsic::nvvm_mul_rp_d, 75839}, // __nvvm_mul_rp_d
+      {Intrinsic::nvvm_mul_rp_f, 75855}, // __nvvm_mul_rp_f
+      {Intrinsic::nvvm_mul_rp_ftz_f, 75871}, // __nvvm_mul_rp_ftz_f
+      {Intrinsic::nvvm_mul_rz_d, 75891}, // __nvvm_mul_rz_d
+      {Intrinsic::nvvm_mul_rz_f, 75907}, // __nvvm_mul_rz_f
+      {Intrinsic::nvvm_mul_rz_ftz_f, 75923}, // __nvvm_mul_rz_ftz_f
+      {Intrinsic::nvvm_mulhi_i, 75974}, // __nvvm_mulhi_i
+      {Intrinsic::nvvm_mulhi_ll, 75989}, // __nvvm_mulhi_ll
+      {Intrinsic::nvvm_mulhi_ui, 76005}, // __nvvm_mulhi_ui
+      {Intrinsic::nvvm_mulhi_ull, 76021}, // __nvvm_mulhi_ull
+      {Intrinsic::nvvm_prmt, 76038}, // __nvvm_prmt
+      {Intrinsic::nvvm_rcp_approx_ftz_d, 76050}, // __nvvm_rcp_approx_ftz_d
+      {Intrinsic::nvvm_rcp_rm_d, 76074}, // __nvvm_rcp_rm_d
+      {Intrinsic::nvvm_rcp_rm_f, 76090}, // __nvvm_rcp_rm_f
+      {Intrinsic::nvvm_rcp_rm_ftz_f, 76106}, // __nvvm_rcp_rm_ftz_f
+      {Intrinsic::nvvm_rcp_rn_d, 76126}, // __nvvm_rcp_rn_d
+      {Intrinsic::nvvm_rcp_rn_f, 76142}, // __nvvm_rcp_rn_f
+      {Intrinsic::nvvm_rcp_rn_ftz_f, 76158}, // __nvvm_rcp_rn_ftz_f
+      {Intrinsic::nvvm_rcp_rp_d, 76178}, // __nvvm_rcp_rp_d
+      {Intrinsic::nvvm_rcp_rp_f, 76194}, // __nvvm_rcp_rp_f
+      {Intrinsic::nvvm_rcp_rp_ftz_f, 76210}, // __nvvm_rcp_rp_ftz_f
+      {Intrinsic::nvvm_rcp_rz_d, 76230}, // __nvvm_rcp_rz_d
+      {Intrinsic::nvvm_rcp_rz_f, 76246}, // __nvvm_rcp_rz_f
+      {Intrinsic::nvvm_rcp_rz_ftz_f, 76262}, // __nvvm_rcp_rz_ftz_f
+      {Intrinsic::nvvm_read_ptx_sreg_clock, 76282}, // __nvvm_read_ptx_sreg_clock
+      {Intrinsic::nvvm_read_ptx_sreg_clock64, 76309}, // __nvvm_read_ptx_sreg_clock64
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_w, 76338}, // __nvvm_read_ptx_sreg_ctaid_w
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_x, 76367}, // __nvvm_read_ptx_sreg_ctaid_x
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_y, 76396}, // __nvvm_read_ptx_sreg_ctaid_y
+      {Intrinsic::nvvm_read_ptx_sreg_ctaid_z, 76425}, // __nvvm_read_ptx_sreg_ctaid_z
+      {Intrinsic::nvvm_read_ptx_sreg_envreg0, 76454}, // __nvvm_read_ptx_sreg_envreg0
+      {Intrinsic::nvvm_read_ptx_sreg_envreg1, 76483}, // __nvvm_read_ptx_sreg_envreg1
+      {Intrinsic::nvvm_read_ptx_sreg_envreg10, 76512}, // __nvvm_read_ptx_sreg_envreg10
+      {Intrinsic::nvvm_read_ptx_sreg_envreg11, 76542}, // __nvvm_read_ptx_sreg_envreg11
+      {Intrinsic::nvvm_read_ptx_sreg_envreg12, 76572}, // __nvvm_read_ptx_sreg_envreg12
+      {Intrinsic::nvvm_read_ptx_sreg_envreg13, 76602}, // __nvvm_read_ptx_sreg_envreg13
+      {Intrinsic::nvvm_read_ptx_sreg_envreg14, 76632}, // __nvvm_read_ptx_sreg_envreg14
+      {Intrinsic::nvvm_read_ptx_sreg_envreg15, 76662}, // __nvvm_read_ptx_sreg_envreg15
+      {Intrinsic::nvvm_read_ptx_sreg_envreg16, 76692}, // __nvvm_read_ptx_sreg_envreg16
+      {Intrinsic::nvvm_read_ptx_sreg_envreg17, 76722}, // __nvvm_read_ptx_sreg_envreg17
+      {Intrinsic::nvvm_read_ptx_sreg_envreg18, 76752}, // __nvvm_read_ptx_sreg_envreg18
+      {Intrinsic::nvvm_read_ptx_sreg_envreg19, 76782}, // __nvvm_read_ptx_sreg_envreg19
+      {Intrinsic::nvvm_read_ptx_sreg_envreg2, 76812}, // __nvvm_read_ptx_sreg_envreg2
+      {Intrinsic::nvvm_read_ptx_sreg_envreg20, 76841}, // __nvvm_read_ptx_sreg_envreg20
+      {Intrinsic::nvvm_read_ptx_sreg_envreg21, 76871}, // __nvvm_read_ptx_sreg_envreg21
+      {Intrinsic::nvvm_read_ptx_sreg_envreg22, 76901}, // __nvvm_read_ptx_sreg_envreg22
+      {Intrinsic::nvvm_read_ptx_sreg_envreg23, 76931}, // __nvvm_read_ptx_sreg_envreg23
+      {Intrinsic::nvvm_read_ptx_sreg_envreg24, 76961}, // __nvvm_read_ptx_sreg_envreg24
+      {Intrinsic::nvvm_read_ptx_sreg_envreg25, 76991}, // __nvvm_read_ptx_sreg_envreg25
+      {Intrinsic::nvvm_read_ptx_sreg_envreg26, 77021}, // __nvvm_read_ptx_sreg_envreg26
+      {Intrinsic::nvvm_read_ptx_sreg_envreg27, 77051}, // __nvvm_read_ptx_sreg_envreg27
+      {Intrinsic::nvvm_read_ptx_sreg_envreg28, 77081}, // __nvvm_read_ptx_sreg_envreg28
+      {Intrinsic::nvvm_read_ptx_sreg_envreg29, 77111}, // __nvvm_read_ptx_sreg_envreg29
+      {Intrinsic::nvvm_read_ptx_sreg_envreg3, 77141}, // __nvvm_read_ptx_sreg_envreg3
+      {Intrinsic::nvvm_read_ptx_sreg_envreg30, 77170}, // __nvvm_read_ptx_sreg_envreg30
+      {Intrinsic::nvvm_read_ptx_sreg_envreg31, 77200}, // __nvvm_read_ptx_sreg_envreg31
+      {Intrinsic::nvvm_read_ptx_sreg_envreg4, 77230}, // __nvvm_read_ptx_sreg_envreg4
+      {Intrinsic::nvvm_read_ptx_sreg_envreg5, 77259}, // __nvvm_read_ptx_sreg_envreg5
+      {Intrinsic::nvvm_read_ptx_sreg_envreg6, 77288}, // __nvvm_read_ptx_sreg_envreg6
+      {Intrinsic::nvvm_read_ptx_sreg_envreg7, 77317}, // __nvvm_read_ptx_sreg_envreg7
+      {Intrinsic::nvvm_read_ptx_sreg_envreg8, 77346}, // __nvvm_read_ptx_sreg_envreg8
+      {Intrinsic::nvvm_read_ptx_sreg_envreg9, 77375}, // __nvvm_read_ptx_sreg_envreg9
+      {Intrinsic::nvvm_read_ptx_sreg_gridid, 77404}, // __nvvm_read_ptx_sreg_gridid
+      {Intrinsic::nvvm_read_ptx_sreg_laneid, 77432}, // __nvvm_read_ptx_sreg_laneid
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_eq, 77460}, // __nvvm_read_ptx_sreg_lanemask_eq
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_ge, 77493}, // __nvvm_read_ptx_sreg_lanemask_ge
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_gt, 77526}, // __nvvm_read_ptx_sreg_lanemask_gt
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_le, 77559}, // __nvvm_read_ptx_sreg_lanemask_le
+      {Intrinsic::nvvm_read_ptx_sreg_lanemask_lt, 77592}, // __nvvm_read_ptx_sreg_lanemask_lt
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_w, 77625}, // __nvvm_read_ptx_sreg_nctaid_w
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_x, 77655}, // __nvvm_read_ptx_sreg_nctaid_x
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_y, 77685}, // __nvvm_read_ptx_sreg_nctaid_y
+      {Intrinsic::nvvm_read_ptx_sreg_nctaid_z, 77715}, // __nvvm_read_ptx_sreg_nctaid_z
+      {Intrinsic::nvvm_read_ptx_sreg_nsmid, 77745}, // __nvvm_read_ptx_sreg_nsmid
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_w, 77772}, // __nvvm_read_ptx_sreg_ntid_w
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_x, 77800}, // __nvvm_read_ptx_sreg_ntid_x
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_y, 77828}, // __nvvm_read_ptx_sreg_ntid_y
+      {Intrinsic::nvvm_read_ptx_sreg_ntid_z, 77856}, // __nvvm_read_ptx_sreg_ntid_z
+      {Intrinsic::nvvm_read_ptx_sreg_nwarpid, 77884}, // __nvvm_read_ptx_sreg_nwarpid
+      {Intrinsic::nvvm_read_ptx_sreg_pm0, 77913}, // __nvvm_read_ptx_sreg_pm0
+      {Intrinsic::nvvm_read_ptx_sreg_pm1, 77938}, // __nvvm_read_ptx_sreg_pm1
+      {Intrinsic::nvvm_read_ptx_sreg_pm2, 77963}, // __nvvm_read_ptx_sreg_pm2
+      {Intrinsic::nvvm_read_ptx_sreg_pm3, 77988}, // __nvvm_read_ptx_sreg_pm3
+      {Intrinsic::nvvm_read_ptx_sreg_smid, 78013}, // __nvvm_read_ptx_sreg_smid
+      {Intrinsic::nvvm_read_ptx_sreg_tid_w, 78039}, // __nvvm_read_ptx_sreg_tid_w
+      {Intrinsic::nvvm_read_ptx_sreg_tid_x, 78066}, // __nvvm_read_ptx_sreg_tid_x
+      {Intrinsic::nvvm_read_ptx_sreg_tid_y, 78093}, // __nvvm_read_ptx_sreg_tid_y
+      {Intrinsic::nvvm_read_ptx_sreg_tid_z, 78120}, // __nvvm_read_ptx_sreg_tid_z
+      {Intrinsic::nvvm_read_ptx_sreg_warpid, 78147}, // __nvvm_read_ptx_sreg_warpid
+      {Intrinsic::nvvm_read_ptx_sreg_warpsize, 78175}, // __nvvm_read_ptx_sreg_warpsize
+      {Intrinsic::nvvm_rotate_b32, 78205}, // __nvvm_rotate_b32
+      {Intrinsic::nvvm_rotate_b64, 78223}, // __nvvm_rotate_b64
+      {Intrinsic::nvvm_rotate_right_b64, 78241}, // __nvvm_rotate_right_b64
+      {Intrinsic::nvvm_round_d, 78265}, // __nvvm_round_d
+      {Intrinsic::nvvm_round_f, 78280}, // __nvvm_round_f
+      {Intrinsic::nvvm_round_ftz_f, 78295}, // __nvvm_round_ftz_f
+      {Intrinsic::nvvm_rsqrt_approx_d, 78314}, // __nvvm_rsqrt_approx_d
+      {Intrinsic::nvvm_rsqrt_approx_f, 78336}, // __nvvm_rsqrt_approx_f
+      {Intrinsic::nvvm_rsqrt_approx_ftz_f, 78358}, // __nvvm_rsqrt_approx_ftz_f
+      {Intrinsic::nvvm_sad_i, 78384}, // __nvvm_sad_i
+      {Intrinsic::nvvm_sad_ui, 78397}, // __nvvm_sad_ui
+      {Intrinsic::nvvm_saturate_d, 78411}, // __nvvm_saturate_d
+      {Intrinsic::nvvm_saturate_f, 78429}, // __nvvm_saturate_f
+      {Intrinsic::nvvm_saturate_ftz_f, 78447}, // __nvvm_saturate_ftz_f
+      {Intrinsic::nvvm_shfl_bfly_f32, 78469}, // __nvvm_shfl_bfly_f32
+      {Intrinsic::nvvm_shfl_bfly_i32, 78490}, // __nvvm_shfl_bfly_i32
+      {Intrinsic::nvvm_shfl_down_f32, 78511}, // __nvvm_shfl_down_f32
+      {Intrinsic::nvvm_shfl_down_i32, 78532}, // __nvvm_shfl_down_i32
+      {Intrinsic::nvvm_shfl_idx_f32, 78553}, // __nvvm_shfl_idx_f32
+      {Intrinsic::nvvm_shfl_idx_i32, 78573}, // __nvvm_shfl_idx_i32
+      {Intrinsic::nvvm_shfl_sync_bfly_f32, 78593}, // __nvvm_shfl_sync_bfly_f32
+      {Intrinsic::nvvm_shfl_sync_bfly_i32, 78619}, // __nvvm_shfl_sync_bfly_i32
+      {Intrinsic::nvvm_shfl_sync_down_f32, 78645}, // __nvvm_shfl_sync_down_f32
+      {Intrinsic::nvvm_shfl_sync_down_i32, 78671}, // __nvvm_shfl_sync_down_i32
+      {Intrinsic::nvvm_shfl_sync_idx_f32, 78697}, // __nvvm_shfl_sync_idx_f32
+      {Intrinsic::nvvm_shfl_sync_idx_i32, 78722}, // __nvvm_shfl_sync_idx_i32
+      {Intrinsic::nvvm_shfl_sync_up_f32, 78747}, // __nvvm_shfl_sync_up_f32
+      {Intrinsic::nvvm_shfl_sync_up_i32, 78771}, // __nvvm_shfl_sync_up_i32
+      {Intrinsic::nvvm_shfl_up_f32, 78795}, // __nvvm_shfl_up_f32
+      {Intrinsic::nvvm_shfl_up_i32, 78814}, // __nvvm_shfl_up_i32
+      {Intrinsic::nvvm_sin_approx_f, 78833}, // __nvvm_sin_approx_f
+      {Intrinsic::nvvm_sin_approx_ftz_f, 78853}, // __nvvm_sin_approx_ftz_f
+      {Intrinsic::nvvm_sqrt_approx_f, 78877}, // __nvvm_sqrt_approx_f
+      {Intrinsic::nvvm_sqrt_approx_ftz_f, 78898}, // __nvvm_sqrt_approx_ftz_f
+      {Intrinsic::nvvm_sqrt_f, 78923}, // __nvvm_sqrt_f
+      {Intrinsic::nvvm_sqrt_rm_d, 78937}, // __nvvm_sqrt_rm_d
+      {Intrinsic::nvvm_sqrt_rm_f, 78954}, // __nvvm_sqrt_rm_f
+      {Intrinsic::nvvm_sqrt_rm_ftz_f, 78971}, // __nvvm_sqrt_rm_ftz_f
+      {Intrinsic::nvvm_sqrt_rn_d, 78992}, // __nvvm_sqrt_rn_d
+      {Intrinsic::nvvm_sqrt_rn_f, 79009}, // __nvvm_sqrt_rn_f
+      {Intrinsic::nvvm_sqrt_rn_ftz_f, 79026}, // __nvvm_sqrt_rn_ftz_f
+      {Intrinsic::nvvm_sqrt_rp_d, 79047}, // __nvvm_sqrt_rp_d
+      {Intrinsic::nvvm_sqrt_rp_f, 79064}, // __nvvm_sqrt_rp_f
+      {Intrinsic::nvvm_sqrt_rp_ftz_f, 79081}, // __nvvm_sqrt_rp_ftz_f
+      {Intrinsic::nvvm_sqrt_rz_d, 79102}, // __nvvm_sqrt_rz_d
+      {Intrinsic::nvvm_sqrt_rz_f, 79119}, // __nvvm_sqrt_rz_f
+      {Intrinsic::nvvm_sqrt_rz_ftz_f, 79136}, // __nvvm_sqrt_rz_ftz_f
+      {Intrinsic::nvvm_suq_array_size, 79157}, // __nvvm_suq_array_size
+      {Intrinsic::nvvm_suq_channel_data_type, 79179}, // __nvvm_suq_channel_data_type
+      {Intrinsic::nvvm_suq_channel_order, 79208}, // __nvvm_suq_channel_order
+      {Intrinsic::nvvm_suq_depth, 79233}, // __nvvm_suq_depth
+      {Intrinsic::nvvm_suq_height, 79250}, // __nvvm_suq_height
+      {Intrinsic::nvvm_suq_width, 79268}, // __nvvm_suq_width
+      {Intrinsic::nvvm_sust_b_1d_array_i16_clamp, 79285}, // __nvvm_sust_b_1d_array_i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i16_trap, 79318}, // __nvvm_sust_b_1d_array_i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i16_zero, 79350}, // __nvvm_sust_b_1d_array_i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i32_clamp, 79382}, // __nvvm_sust_b_1d_array_i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i32_trap, 79415}, // __nvvm_sust_b_1d_array_i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i32_zero, 79447}, // __nvvm_sust_b_1d_array_i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i64_clamp, 79479}, // __nvvm_sust_b_1d_array_i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i64_trap, 79512}, // __nvvm_sust_b_1d_array_i64_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i64_zero, 79544}, // __nvvm_sust_b_1d_array_i64_zero
+      {Intrinsic::nvvm_sust_b_1d_array_i8_clamp, 79576}, // __nvvm_sust_b_1d_array_i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_i8_trap, 79608}, // __nvvm_sust_b_1d_array_i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_i8_zero, 79639}, // __nvvm_sust_b_1d_array_i8_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_clamp, 79670}, // __nvvm_sust_b_1d_array_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_trap, 79705}, // __nvvm_sust_b_1d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i16_zero, 79739}, // __nvvm_sust_b_1d_array_v2i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_clamp, 79773}, // __nvvm_sust_b_1d_array_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_trap, 79808}, // __nvvm_sust_b_1d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i32_zero, 79842}, // __nvvm_sust_b_1d_array_v2i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_clamp, 79876}, // __nvvm_sust_b_1d_array_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_trap, 79911}, // __nvvm_sust_b_1d_array_v2i64_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i64_zero, 79945}, // __nvvm_sust_b_1d_array_v2i64_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_clamp, 79979}, // __nvvm_sust_b_1d_array_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_trap, 80013}, // __nvvm_sust_b_1d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v2i8_zero, 80046}, // __nvvm_sust_b_1d_array_v2i8_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_clamp, 80079}, // __nvvm_sust_b_1d_array_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_trap, 80114}, // __nvvm_sust_b_1d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i16_zero, 80148}, // __nvvm_sust_b_1d_array_v4i16_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_clamp, 80182}, // __nvvm_sust_b_1d_array_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_trap, 80217}, // __nvvm_sust_b_1d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i32_zero, 80251}, // __nvvm_sust_b_1d_array_v4i32_zero
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_clamp, 80285}, // __nvvm_sust_b_1d_array_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_trap, 80319}, // __nvvm_sust_b_1d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_b_1d_array_v4i8_zero, 80352}, // __nvvm_sust_b_1d_array_v4i8_zero
+      {Intrinsic::nvvm_sust_b_1d_i16_clamp, 80385}, // __nvvm_sust_b_1d_i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_i16_trap, 80412}, // __nvvm_sust_b_1d_i16_trap
+      {Intrinsic::nvvm_sust_b_1d_i16_zero, 80438}, // __nvvm_sust_b_1d_i16_zero
+      {Intrinsic::nvvm_sust_b_1d_i32_clamp, 80464}, // __nvvm_sust_b_1d_i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_i32_trap, 80491}, // __nvvm_sust_b_1d_i32_trap
+      {Intrinsic::nvvm_sust_b_1d_i32_zero, 80517}, // __nvvm_sust_b_1d_i32_zero
+      {Intrinsic::nvvm_sust_b_1d_i64_clamp, 80543}, // __nvvm_sust_b_1d_i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_i64_trap, 80570}, // __nvvm_sust_b_1d_i64_trap
+      {Intrinsic::nvvm_sust_b_1d_i64_zero, 80596}, // __nvvm_sust_b_1d_i64_zero
+      {Intrinsic::nvvm_sust_b_1d_i8_clamp, 80622}, // __nvvm_sust_b_1d_i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_i8_trap, 80648}, // __nvvm_sust_b_1d_i8_trap
+      {Intrinsic::nvvm_sust_b_1d_i8_zero, 80673}, // __nvvm_sust_b_1d_i8_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i16_clamp, 80698}, // __nvvm_sust_b_1d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i16_trap, 80727}, // __nvvm_sust_b_1d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i16_zero, 80755}, // __nvvm_sust_b_1d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i32_clamp, 80783}, // __nvvm_sust_b_1d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i32_trap, 80812}, // __nvvm_sust_b_1d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i32_zero, 80840}, // __nvvm_sust_b_1d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i64_clamp, 80868}, // __nvvm_sust_b_1d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i64_trap, 80897}, // __nvvm_sust_b_1d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i64_zero, 80925}, // __nvvm_sust_b_1d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_1d_v2i8_clamp, 80953}, // __nvvm_sust_b_1d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_v2i8_trap, 80981}, // __nvvm_sust_b_1d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_1d_v2i8_zero, 81008}, // __nvvm_sust_b_1d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i16_clamp, 81035}, // __nvvm_sust_b_1d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i16_trap, 81064}, // __nvvm_sust_b_1d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i16_zero, 81092}, // __nvvm_sust_b_1d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i32_clamp, 81120}, // __nvvm_sust_b_1d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i32_trap, 81149}, // __nvvm_sust_b_1d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i32_zero, 81177}, // __nvvm_sust_b_1d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_1d_v4i8_clamp, 81205}, // __nvvm_sust_b_1d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_1d_v4i8_trap, 81233}, // __nvvm_sust_b_1d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_1d_v4i8_zero, 81260}, // __nvvm_sust_b_1d_v4i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i16_clamp, 81287}, // __nvvm_sust_b_2d_array_i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i16_trap, 81320}, // __nvvm_sust_b_2d_array_i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i16_zero, 81352}, // __nvvm_sust_b_2d_array_i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i32_clamp, 81384}, // __nvvm_sust_b_2d_array_i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i32_trap, 81417}, // __nvvm_sust_b_2d_array_i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i32_zero, 81449}, // __nvvm_sust_b_2d_array_i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i64_clamp, 81481}, // __nvvm_sust_b_2d_array_i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i64_trap, 81514}, // __nvvm_sust_b_2d_array_i64_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i64_zero, 81546}, // __nvvm_sust_b_2d_array_i64_zero
+      {Intrinsic::nvvm_sust_b_2d_array_i8_clamp, 81578}, // __nvvm_sust_b_2d_array_i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_i8_trap, 81610}, // __nvvm_sust_b_2d_array_i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_i8_zero, 81641}, // __nvvm_sust_b_2d_array_i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_clamp, 81672}, // __nvvm_sust_b_2d_array_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_trap, 81707}, // __nvvm_sust_b_2d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i16_zero, 81741}, // __nvvm_sust_b_2d_array_v2i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_clamp, 81775}, // __nvvm_sust_b_2d_array_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_trap, 81810}, // __nvvm_sust_b_2d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i32_zero, 81844}, // __nvvm_sust_b_2d_array_v2i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_clamp, 81878}, // __nvvm_sust_b_2d_array_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_trap, 81913}, // __nvvm_sust_b_2d_array_v2i64_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i64_zero, 81947}, // __nvvm_sust_b_2d_array_v2i64_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_clamp, 81981}, // __nvvm_sust_b_2d_array_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_trap, 82015}, // __nvvm_sust_b_2d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v2i8_zero, 82048}, // __nvvm_sust_b_2d_array_v2i8_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_clamp, 82081}, // __nvvm_sust_b_2d_array_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_trap, 82116}, // __nvvm_sust_b_2d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i16_zero, 82150}, // __nvvm_sust_b_2d_array_v4i16_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_clamp, 82184}, // __nvvm_sust_b_2d_array_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_trap, 82219}, // __nvvm_sust_b_2d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i32_zero, 82253}, // __nvvm_sust_b_2d_array_v4i32_zero
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_clamp, 82287}, // __nvvm_sust_b_2d_array_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_trap, 82321}, // __nvvm_sust_b_2d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_b_2d_array_v4i8_zero, 82354}, // __nvvm_sust_b_2d_array_v4i8_zero
+      {Intrinsic::nvvm_sust_b_2d_i16_clamp, 82387}, // __nvvm_sust_b_2d_i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_i16_trap, 82414}, // __nvvm_sust_b_2d_i16_trap
+      {Intrinsic::nvvm_sust_b_2d_i16_zero, 82440}, // __nvvm_sust_b_2d_i16_zero
+      {Intrinsic::nvvm_sust_b_2d_i32_clamp, 82466}, // __nvvm_sust_b_2d_i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_i32_trap, 82493}, // __nvvm_sust_b_2d_i32_trap
+      {Intrinsic::nvvm_sust_b_2d_i32_zero, 82519}, // __nvvm_sust_b_2d_i32_zero
+      {Intrinsic::nvvm_sust_b_2d_i64_clamp, 82545}, // __nvvm_sust_b_2d_i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_i64_trap, 82572}, // __nvvm_sust_b_2d_i64_trap
+      {Intrinsic::nvvm_sust_b_2d_i64_zero, 82598}, // __nvvm_sust_b_2d_i64_zero
+      {Intrinsic::nvvm_sust_b_2d_i8_clamp, 82624}, // __nvvm_sust_b_2d_i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_i8_trap, 82650}, // __nvvm_sust_b_2d_i8_trap
+      {Intrinsic::nvvm_sust_b_2d_i8_zero, 82675}, // __nvvm_sust_b_2d_i8_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i16_clamp, 82700}, // __nvvm_sust_b_2d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i16_trap, 82729}, // __nvvm_sust_b_2d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i16_zero, 82757}, // __nvvm_sust_b_2d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i32_clamp, 82785}, // __nvvm_sust_b_2d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i32_trap, 82814}, // __nvvm_sust_b_2d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i32_zero, 82842}, // __nvvm_sust_b_2d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i64_clamp, 82870}, // __nvvm_sust_b_2d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i64_trap, 82899}, // __nvvm_sust_b_2d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i64_zero, 82927}, // __nvvm_sust_b_2d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_2d_v2i8_clamp, 82955}, // __nvvm_sust_b_2d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_v2i8_trap, 82983}, // __nvvm_sust_b_2d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_2d_v2i8_zero, 83010}, // __nvvm_sust_b_2d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i16_clamp, 83037}, // __nvvm_sust_b_2d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i16_trap, 83066}, // __nvvm_sust_b_2d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i16_zero, 83094}, // __nvvm_sust_b_2d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i32_clamp, 83122}, // __nvvm_sust_b_2d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i32_trap, 83151}, // __nvvm_sust_b_2d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i32_zero, 83179}, // __nvvm_sust_b_2d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_2d_v4i8_clamp, 83207}, // __nvvm_sust_b_2d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_2d_v4i8_trap, 83235}, // __nvvm_sust_b_2d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_2d_v4i8_zero, 83262}, // __nvvm_sust_b_2d_v4i8_zero
+      {Intrinsic::nvvm_sust_b_3d_i16_clamp, 83289}, // __nvvm_sust_b_3d_i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_i16_trap, 83316}, // __nvvm_sust_b_3d_i16_trap
+      {Intrinsic::nvvm_sust_b_3d_i16_zero, 83342}, // __nvvm_sust_b_3d_i16_zero
+      {Intrinsic::nvvm_sust_b_3d_i32_clamp, 83368}, // __nvvm_sust_b_3d_i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_i32_trap, 83395}, // __nvvm_sust_b_3d_i32_trap
+      {Intrinsic::nvvm_sust_b_3d_i32_zero, 83421}, // __nvvm_sust_b_3d_i32_zero
+      {Intrinsic::nvvm_sust_b_3d_i64_clamp, 83447}, // __nvvm_sust_b_3d_i64_clamp
+      {Intrinsic::nvvm_sust_b_3d_i64_trap, 83474}, // __nvvm_sust_b_3d_i64_trap
+      {Intrinsic::nvvm_sust_b_3d_i64_zero, 83500}, // __nvvm_sust_b_3d_i64_zero
+      {Intrinsic::nvvm_sust_b_3d_i8_clamp, 83526}, // __nvvm_sust_b_3d_i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_i8_trap, 83552}, // __nvvm_sust_b_3d_i8_trap
+      {Intrinsic::nvvm_sust_b_3d_i8_zero, 83577}, // __nvvm_sust_b_3d_i8_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i16_clamp, 83602}, // __nvvm_sust_b_3d_v2i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i16_trap, 83631}, // __nvvm_sust_b_3d_v2i16_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i16_zero, 83659}, // __nvvm_sust_b_3d_v2i16_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i32_clamp, 83687}, // __nvvm_sust_b_3d_v2i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i32_trap, 83716}, // __nvvm_sust_b_3d_v2i32_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i32_zero, 83744}, // __nvvm_sust_b_3d_v2i32_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i64_clamp, 83772}, // __nvvm_sust_b_3d_v2i64_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i64_trap, 83801}, // __nvvm_sust_b_3d_v2i64_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i64_zero, 83829}, // __nvvm_sust_b_3d_v2i64_zero
+      {Intrinsic::nvvm_sust_b_3d_v2i8_clamp, 83857}, // __nvvm_sust_b_3d_v2i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_v2i8_trap, 83885}, // __nvvm_sust_b_3d_v2i8_trap
+      {Intrinsic::nvvm_sust_b_3d_v2i8_zero, 83912}, // __nvvm_sust_b_3d_v2i8_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i16_clamp, 83939}, // __nvvm_sust_b_3d_v4i16_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i16_trap, 83968}, // __nvvm_sust_b_3d_v4i16_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i16_zero, 83996}, // __nvvm_sust_b_3d_v4i16_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i32_clamp, 84024}, // __nvvm_sust_b_3d_v4i32_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i32_trap, 84053}, // __nvvm_sust_b_3d_v4i32_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i32_zero, 84081}, // __nvvm_sust_b_3d_v4i32_zero
+      {Intrinsic::nvvm_sust_b_3d_v4i8_clamp, 84109}, // __nvvm_sust_b_3d_v4i8_clamp
+      {Intrinsic::nvvm_sust_b_3d_v4i8_trap, 84137}, // __nvvm_sust_b_3d_v4i8_trap
+      {Intrinsic::nvvm_sust_b_3d_v4i8_zero, 84164}, // __nvvm_sust_b_3d_v4i8_zero
+      {Intrinsic::nvvm_sust_p_1d_array_i16_trap, 84191}, // __nvvm_sust_p_1d_array_i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_i32_trap, 84223}, // __nvvm_sust_p_1d_array_i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_i8_trap, 84255}, // __nvvm_sust_p_1d_array_i8_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i16_trap, 84286}, // __nvvm_sust_p_1d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i32_trap, 84320}, // __nvvm_sust_p_1d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v2i8_trap, 84354}, // __nvvm_sust_p_1d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i16_trap, 84387}, // __nvvm_sust_p_1d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i32_trap, 84421}, // __nvvm_sust_p_1d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_p_1d_array_v4i8_trap, 84455}, // __nvvm_sust_p_1d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_p_1d_i16_trap, 84488}, // __nvvm_sust_p_1d_i16_trap
+      {Intrinsic::nvvm_sust_p_1d_i32_trap, 84514}, // __nvvm_sust_p_1d_i32_trap
+      {Intrinsic::nvvm_sust_p_1d_i8_trap, 84540}, // __nvvm_sust_p_1d_i8_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i16_trap, 84565}, // __nvvm_sust_p_1d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i32_trap, 84593}, // __nvvm_sust_p_1d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_1d_v2i8_trap, 84621}, // __nvvm_sust_p_1d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i16_trap, 84648}, // __nvvm_sust_p_1d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i32_trap, 84676}, // __nvvm_sust_p_1d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_1d_v4i8_trap, 84704}, // __nvvm_sust_p_1d_v4i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i16_trap, 84731}, // __nvvm_sust_p_2d_array_i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i32_trap, 84763}, // __nvvm_sust_p_2d_array_i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_i8_trap, 84795}, // __nvvm_sust_p_2d_array_i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i16_trap, 84826}, // __nvvm_sust_p_2d_array_v2i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i32_trap, 84860}, // __nvvm_sust_p_2d_array_v2i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v2i8_trap, 84894}, // __nvvm_sust_p_2d_array_v2i8_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i16_trap, 84927}, // __nvvm_sust_p_2d_array_v4i16_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i32_trap, 84961}, // __nvvm_sust_p_2d_array_v4i32_trap
+      {Intrinsic::nvvm_sust_p_2d_array_v4i8_trap, 84995}, // __nvvm_sust_p_2d_array_v4i8_trap
+      {Intrinsic::nvvm_sust_p_2d_i16_trap, 85028}, // __nvvm_sust_p_2d_i16_trap
+      {Intrinsic::nvvm_sust_p_2d_i32_trap, 85054}, // __nvvm_sust_p_2d_i32_trap
+      {Intrinsic::nvvm_sust_p_2d_i8_trap, 85080}, // __nvvm_sust_p_2d_i8_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i16_trap, 85105}, // __nvvm_sust_p_2d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i32_trap, 85133}, // __nvvm_sust_p_2d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_2d_v2i8_trap, 85161}, // __nvvm_sust_p_2d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i16_trap, 85188}, // __nvvm_sust_p_2d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i32_trap, 85216}, // __nvvm_sust_p_2d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_2d_v4i8_trap, 85244}, // __nvvm_sust_p_2d_v4i8_trap
+      {Intrinsic::nvvm_sust_p_3d_i16_trap, 85271}, // __nvvm_sust_p_3d_i16_trap
+      {Intrinsic::nvvm_sust_p_3d_i32_trap, 85297}, // __nvvm_sust_p_3d_i32_trap
+      {Intrinsic::nvvm_sust_p_3d_i8_trap, 85323}, // __nvvm_sust_p_3d_i8_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i16_trap, 85348}, // __nvvm_sust_p_3d_v2i16_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i32_trap, 85376}, // __nvvm_sust_p_3d_v2i32_trap
+      {Intrinsic::nvvm_sust_p_3d_v2i8_trap, 85404}, // __nvvm_sust_p_3d_v2i8_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i16_trap, 85431}, // __nvvm_sust_p_3d_v4i16_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i32_trap, 85459}, // __nvvm_sust_p_3d_v4i32_trap
+      {Intrinsic::nvvm_sust_p_3d_v4i8_trap, 85487}, // __nvvm_sust_p_3d_v4i8_trap
+      {Intrinsic::nvvm_swap_lo_hi_b64, 85514}, // __nvvm_swap_lo_hi_b64
+      {Intrinsic::nvvm_trunc_d, 85536}, // __nvvm_trunc_d
+      {Intrinsic::nvvm_trunc_f, 85551}, // __nvvm_trunc_f
+      {Intrinsic::nvvm_trunc_ftz_f, 85566}, // __nvvm_trunc_ftz_f
+      {Intrinsic::nvvm_txq_array_size, 85585}, // __nvvm_txq_array_size
+      {Intrinsic::nvvm_txq_channel_data_type, 85607}, // __nvvm_txq_channel_data_type
+      {Intrinsic::nvvm_txq_channel_order, 85636}, // __nvvm_txq_channel_order
+      {Intrinsic::nvvm_txq_depth, 85661}, // __nvvm_txq_depth
+      {Intrinsic::nvvm_txq_height, 85678}, // __nvvm_txq_height
+      {Intrinsic::nvvm_txq_num_mipmap_levels, 85696}, // __nvvm_txq_num_mipmap_levels
+      {Intrinsic::nvvm_txq_num_samples, 85725}, // __nvvm_txq_num_samples
+      {Intrinsic::nvvm_txq_width, 85748}, // __nvvm_txq_width
+      {Intrinsic::nvvm_ui2d_rm, 85765}, // __nvvm_ui2d_rm
+      {Intrinsic::nvvm_ui2d_rn, 85780}, // __nvvm_ui2d_rn
+      {Intrinsic::nvvm_ui2d_rp, 85795}, // __nvvm_ui2d_rp
+      {Intrinsic::nvvm_ui2d_rz, 85810}, // __nvvm_ui2d_rz
+      {Intrinsic::nvvm_ui2f_rm, 85825}, // __nvvm_ui2f_rm
+      {Intrinsic::nvvm_ui2f_rn, 85840}, // __nvvm_ui2f_rn
+      {Intrinsic::nvvm_ui2f_rp, 85855}, // __nvvm_ui2f_rp
+      {Intrinsic::nvvm_ui2f_rz, 85870}, // __nvvm_ui2f_rz
+      {Intrinsic::nvvm_ull2d_rm, 85885}, // __nvvm_ull2d_rm
+      {Intrinsic::nvvm_ull2d_rn, 85901}, // __nvvm_ull2d_rn
+      {Intrinsic::nvvm_ull2d_rp, 85917}, // __nvvm_ull2d_rp
+      {Intrinsic::nvvm_ull2d_rz, 85933}, // __nvvm_ull2d_rz
+      {Intrinsic::nvvm_ull2f_rm, 85949}, // __nvvm_ull2f_rm
+      {Intrinsic::nvvm_ull2f_rn, 85965}, // __nvvm_ull2f_rn
+      {Intrinsic::nvvm_ull2f_rp, 85981}, // __nvvm_ull2f_rp
+      {Intrinsic::nvvm_ull2f_rz, 85997}, // __nvvm_ull2f_rz
+      {Intrinsic::nvvm_vote_all, 86013}, // __nvvm_vote_all
+      {Intrinsic::nvvm_vote_all_sync, 86029}, // __nvvm_vote_all_sync
+      {Intrinsic::nvvm_vote_any, 86050}, // __nvvm_vote_any
+      {Intrinsic::nvvm_vote_any_sync, 86066}, // __nvvm_vote_any_sync
+      {Intrinsic::nvvm_vote_ballot, 86087}, // __nvvm_vote_ballot
+      {Intrinsic::nvvm_vote_ballot_sync, 86106}, // __nvvm_vote_ballot_sync
+      {Intrinsic::nvvm_vote_uni, 86130}, // __nvvm_vote_uni
+      {Intrinsic::nvvm_vote_uni_sync, 86146}, // __nvvm_vote_uni_sync
+      {Intrinsic::nvvm_barrier0, 73235}, // __syncthreads
+    };
+    auto I = std::lower_bound(std::begin(nvvmNames),
+                              std::end(nvvmNames),
+                              BuiltinNameStr);
+    if (I != std::end(nvvmNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "ppc") {
+    static const BuiltinEntry ppcNames[] = {
+      {Intrinsic::ppc_addf128_round_to_odd, 86167}, // __builtin_addf128_round_to_odd
+      {Intrinsic::ppc_altivec_crypto_vcipher, 86198}, // __builtin_altivec_crypto_vcipher
+      {Intrinsic::ppc_altivec_crypto_vcipherlast, 86231}, // __builtin_altivec_crypto_vcipherlast
+      {Intrinsic::ppc_altivec_crypto_vncipher, 86268}, // __builtin_altivec_crypto_vncipher
+      {Intrinsic::ppc_altivec_crypto_vncipherlast, 86302}, // __builtin_altivec_crypto_vncipherlast
+      {Intrinsic::ppc_altivec_crypto_vpermxor, 86340}, // __builtin_altivec_crypto_vpermxor
+      {Intrinsic::ppc_altivec_crypto_vpmsumb, 86374}, // __builtin_altivec_crypto_vpmsumb
+      {Intrinsic::ppc_altivec_crypto_vpmsumd, 86407}, // __builtin_altivec_crypto_vpmsumd
+      {Intrinsic::ppc_altivec_crypto_vpmsumh, 86440}, // __builtin_altivec_crypto_vpmsumh
+      {Intrinsic::ppc_altivec_crypto_vpmsumw, 86473}, // __builtin_altivec_crypto_vpmsumw
+      {Intrinsic::ppc_altivec_crypto_vsbox, 86506}, // __builtin_altivec_crypto_vsbox
+      {Intrinsic::ppc_altivec_crypto_vshasigmad, 86537}, // __builtin_altivec_crypto_vshasigmad
+      {Intrinsic::ppc_altivec_crypto_vshasigmaw, 86573}, // __builtin_altivec_crypto_vshasigmaw
+      {Intrinsic::ppc_altivec_dss, 86609}, // __builtin_altivec_dss
+      {Intrinsic::ppc_altivec_dssall, 86631}, // __builtin_altivec_dssall
+      {Intrinsic::ppc_altivec_dst, 86656}, // __builtin_altivec_dst
+      {Intrinsic::ppc_altivec_dstst, 86678}, // __builtin_altivec_dstst
+      {Intrinsic::ppc_altivec_dststt, 86702}, // __builtin_altivec_dststt
+      {Intrinsic::ppc_altivec_dstt, 86727}, // __builtin_altivec_dstt
+      {Intrinsic::ppc_altivec_mfvscr, 86750}, // __builtin_altivec_mfvscr
+      {Intrinsic::ppc_altivec_mtvscr, 86775}, // __builtin_altivec_mtvscr
+      {Intrinsic::ppc_altivec_vabsdub, 86800}, // __builtin_altivec_vabsdub
+      {Intrinsic::ppc_altivec_vabsduh, 86826}, // __builtin_altivec_vabsduh
+      {Intrinsic::ppc_altivec_vabsduw, 86852}, // __builtin_altivec_vabsduw
+      {Intrinsic::ppc_altivec_vaddcuq, 86878}, // __builtin_altivec_vaddcuq
+      {Intrinsic::ppc_altivec_vaddcuw, 86904}, // __builtin_altivec_vaddcuw
+      {Intrinsic::ppc_altivec_vaddecuq, 86930}, // __builtin_altivec_vaddecuq
+      {Intrinsic::ppc_altivec_vaddeuqm, 86957}, // __builtin_altivec_vaddeuqm
+      {Intrinsic::ppc_altivec_vaddsbs, 86984}, // __builtin_altivec_vaddsbs
+      {Intrinsic::ppc_altivec_vaddshs, 87010}, // __builtin_altivec_vaddshs
+      {Intrinsic::ppc_altivec_vaddsws, 87036}, // __builtin_altivec_vaddsws
+      {Intrinsic::ppc_altivec_vaddubs, 87062}, // __builtin_altivec_vaddubs
+      {Intrinsic::ppc_altivec_vadduhs, 87088}, // __builtin_altivec_vadduhs
+      {Intrinsic::ppc_altivec_vadduws, 87114}, // __builtin_altivec_vadduws
+      {Intrinsic::ppc_altivec_vavgsb, 87140}, // __builtin_altivec_vavgsb
+      {Intrinsic::ppc_altivec_vavgsh, 87165}, // __builtin_altivec_vavgsh
+      {Intrinsic::ppc_altivec_vavgsw, 87190}, // __builtin_altivec_vavgsw
+      {Intrinsic::ppc_altivec_vavgub, 87215}, // __builtin_altivec_vavgub
+      {Intrinsic::ppc_altivec_vavguh, 87240}, // __builtin_altivec_vavguh
+      {Intrinsic::ppc_altivec_vavguw, 87265}, // __builtin_altivec_vavguw
+      {Intrinsic::ppc_altivec_vbpermq, 87290}, // __builtin_altivec_vbpermq
+      {Intrinsic::ppc_altivec_vcfsx, 87316}, // __builtin_altivec_vcfsx
+      {Intrinsic::ppc_altivec_vcfux, 87340}, // __builtin_altivec_vcfux
+      {Intrinsic::ppc_altivec_vclzlsbb, 87364}, // __builtin_altivec_vclzlsbb
+      {Intrinsic::ppc_altivec_vcmpbfp, 87391}, // __builtin_altivec_vcmpbfp
+      {Intrinsic::ppc_altivec_vcmpbfp_p, 87417}, // __builtin_altivec_vcmpbfp_p
+      {Intrinsic::ppc_altivec_vcmpeqfp, 87445}, // __builtin_altivec_vcmpeqfp
+      {Intrinsic::ppc_altivec_vcmpeqfp_p, 87472}, // __builtin_altivec_vcmpeqfp_p
+      {Intrinsic::ppc_altivec_vcmpequb, 87501}, // __builtin_altivec_vcmpequb
+      {Intrinsic::ppc_altivec_vcmpequb_p, 87528}, // __builtin_altivec_vcmpequb_p
+      {Intrinsic::ppc_altivec_vcmpequd, 87557}, // __builtin_altivec_vcmpequd
+      {Intrinsic::ppc_altivec_vcmpequd_p, 87584}, // __builtin_altivec_vcmpequd_p
+      {Intrinsic::ppc_altivec_vcmpequh, 87613}, // __builtin_altivec_vcmpequh
+      {Intrinsic::ppc_altivec_vcmpequh_p, 87640}, // __builtin_altivec_vcmpequh_p
+      {Intrinsic::ppc_altivec_vcmpequw, 87669}, // __builtin_altivec_vcmpequw
+      {Intrinsic::ppc_altivec_vcmpequw_p, 87696}, // __builtin_altivec_vcmpequw_p
+      {Intrinsic::ppc_altivec_vcmpgefp, 87725}, // __builtin_altivec_vcmpgefp
+      {Intrinsic::ppc_altivec_vcmpgefp_p, 87752}, // __builtin_altivec_vcmpgefp_p
+      {Intrinsic::ppc_altivec_vcmpgtfp, 87781}, // __builtin_altivec_vcmpgtfp
+      {Intrinsic::ppc_altivec_vcmpgtfp_p, 87808}, // __builtin_altivec_vcmpgtfp_p
+      {Intrinsic::ppc_altivec_vcmpgtsb, 87837}, // __builtin_altivec_vcmpgtsb
+      {Intrinsic::ppc_altivec_vcmpgtsb_p, 87864}, // __builtin_altivec_vcmpgtsb_p
+      {Intrinsic::ppc_altivec_vcmpgtsd, 87893}, // __builtin_altivec_vcmpgtsd
+      {Intrinsic::ppc_altivec_vcmpgtsd_p, 87920}, // __builtin_altivec_vcmpgtsd_p
+      {Intrinsic::ppc_altivec_vcmpgtsh, 87949}, // __builtin_altivec_vcmpgtsh
+      {Intrinsic::ppc_altivec_vcmpgtsh_p, 87976}, // __builtin_altivec_vcmpgtsh_p
+      {Intrinsic::ppc_altivec_vcmpgtsw, 88005}, // __builtin_altivec_vcmpgtsw
+      {Intrinsic::ppc_altivec_vcmpgtsw_p, 88032}, // __builtin_altivec_vcmpgtsw_p
+      {Intrinsic::ppc_altivec_vcmpgtub, 88061}, // __builtin_altivec_vcmpgtub
+      {Intrinsic::ppc_altivec_vcmpgtub_p, 88088}, // __builtin_altivec_vcmpgtub_p
+      {Intrinsic::ppc_altivec_vcmpgtud, 88117}, // __builtin_altivec_vcmpgtud
+      {Intrinsic::ppc_altivec_vcmpgtud_p, 88144}, // __builtin_altivec_vcmpgtud_p
+      {Intrinsic::ppc_altivec_vcmpgtuh, 88173}, // __builtin_altivec_vcmpgtuh
+      {Intrinsic::ppc_altivec_vcmpgtuh_p, 88200}, // __builtin_altivec_vcmpgtuh_p
+      {Intrinsic::ppc_altivec_vcmpgtuw, 88229}, // __builtin_altivec_vcmpgtuw
+      {Intrinsic::ppc_altivec_vcmpgtuw_p, 88256}, // __builtin_altivec_vcmpgtuw_p
+      {Intrinsic::ppc_altivec_vcmpneb, 88285}, // __builtin_altivec_vcmpneb
+      {Intrinsic::ppc_altivec_vcmpneb_p, 88311}, // __builtin_altivec_vcmpneb_p
+      {Intrinsic::ppc_altivec_vcmpneh, 88339}, // __builtin_altivec_vcmpneh
+      {Intrinsic::ppc_altivec_vcmpneh_p, 88365}, // __builtin_altivec_vcmpneh_p
+      {Intrinsic::ppc_altivec_vcmpnew, 88393}, // __builtin_altivec_vcmpnew
+      {Intrinsic::ppc_altivec_vcmpnew_p, 88419}, // __builtin_altivec_vcmpnew_p
+      {Intrinsic::ppc_altivec_vcmpnezb, 88447}, // __builtin_altivec_vcmpnezb
+      {Intrinsic::ppc_altivec_vcmpnezb_p, 88474}, // __builtin_altivec_vcmpnezb_p
+      {Intrinsic::ppc_altivec_vcmpnezh, 88503}, // __builtin_altivec_vcmpnezh
+      {Intrinsic::ppc_altivec_vcmpnezh_p, 88530}, // __builtin_altivec_vcmpnezh_p
+      {Intrinsic::ppc_altivec_vcmpnezw, 88559}, // __builtin_altivec_vcmpnezw
+      {Intrinsic::ppc_altivec_vcmpnezw_p, 88586}, // __builtin_altivec_vcmpnezw_p
+      {Intrinsic::ppc_altivec_vctsxs, 88615}, // __builtin_altivec_vctsxs
+      {Intrinsic::ppc_altivec_vctuxs, 88640}, // __builtin_altivec_vctuxs
+      {Intrinsic::ppc_altivec_vctzlsbb, 88665}, // __builtin_altivec_vctzlsbb
+      {Intrinsic::ppc_altivec_vexptefp, 88692}, // __builtin_altivec_vexptefp
+      {Intrinsic::ppc_altivec_vgbbd, 88719}, // __builtin_altivec_vgbbd
+      {Intrinsic::ppc_altivec_vlogefp, 88743}, // __builtin_altivec_vlogefp
+      {Intrinsic::ppc_altivec_vmaddfp, 88769}, // __builtin_altivec_vmaddfp
+      {Intrinsic::ppc_altivec_vmaxfp, 88795}, // __builtin_altivec_vmaxfp
+      {Intrinsic::ppc_altivec_vmaxsb, 88820}, // __builtin_altivec_vmaxsb
+      {Intrinsic::ppc_altivec_vmaxsd, 88845}, // __builtin_altivec_vmaxsd
+      {Intrinsic::ppc_altivec_vmaxsh, 88870}, // __builtin_altivec_vmaxsh
+      {Intrinsic::ppc_altivec_vmaxsw, 88895}, // __builtin_altivec_vmaxsw
+      {Intrinsic::ppc_altivec_vmaxub, 88920}, // __builtin_altivec_vmaxub
+      {Intrinsic::ppc_altivec_vmaxud, 88945}, // __builtin_altivec_vmaxud
+      {Intrinsic::ppc_altivec_vmaxuh, 88970}, // __builtin_altivec_vmaxuh
+      {Intrinsic::ppc_altivec_vmaxuw, 88995}, // __builtin_altivec_vmaxuw
+      {Intrinsic::ppc_altivec_vmhaddshs, 89020}, // __builtin_altivec_vmhaddshs
+      {Intrinsic::ppc_altivec_vmhraddshs, 89048}, // __builtin_altivec_vmhraddshs
+      {Intrinsic::ppc_altivec_vminfp, 89077}, // __builtin_altivec_vminfp
+      {Intrinsic::ppc_altivec_vminsb, 89102}, // __builtin_altivec_vminsb
+      {Intrinsic::ppc_altivec_vminsd, 89127}, // __builtin_altivec_vminsd
+      {Intrinsic::ppc_altivec_vminsh, 89152}, // __builtin_altivec_vminsh
+      {Intrinsic::ppc_altivec_vminsw, 89177}, // __builtin_altivec_vminsw
+      {Intrinsic::ppc_altivec_vminub, 89202}, // __builtin_altivec_vminub
+      {Intrinsic::ppc_altivec_vminud, 89227}, // __builtin_altivec_vminud
+      {Intrinsic::ppc_altivec_vminuh, 89252}, // __builtin_altivec_vminuh
+      {Intrinsic::ppc_altivec_vminuw, 89277}, // __builtin_altivec_vminuw
+      {Intrinsic::ppc_altivec_vmladduhm, 89302}, // __builtin_altivec_vmladduhm
+      {Intrinsic::ppc_altivec_vmsummbm, 89330}, // __builtin_altivec_vmsummbm
+      {Intrinsic::ppc_altivec_vmsumshm, 89357}, // __builtin_altivec_vmsumshm
+      {Intrinsic::ppc_altivec_vmsumshs, 89384}, // __builtin_altivec_vmsumshs
+      {Intrinsic::ppc_altivec_vmsumubm, 89411}, // __builtin_altivec_vmsumubm
+      {Intrinsic::ppc_altivec_vmsumuhm, 89438}, // __builtin_altivec_vmsumuhm
+      {Intrinsic::ppc_altivec_vmsumuhs, 89465}, // __builtin_altivec_vmsumuhs
+      {Intrinsic::ppc_altivec_vmulesb, 89492}, // __builtin_altivec_vmulesb
+      {Intrinsic::ppc_altivec_vmulesh, 89518}, // __builtin_altivec_vmulesh
+      {Intrinsic::ppc_altivec_vmulesw, 89544}, // __builtin_altivec_vmulesw
+      {Intrinsic::ppc_altivec_vmuleub, 89570}, // __builtin_altivec_vmuleub
+      {Intrinsic::ppc_altivec_vmuleuh, 89596}, // __builtin_altivec_vmuleuh
+      {Intrinsic::ppc_altivec_vmuleuw, 89622}, // __builtin_altivec_vmuleuw
+      {Intrinsic::ppc_altivec_vmulosb, 89648}, // __builtin_altivec_vmulosb
+      {Intrinsic::ppc_altivec_vmulosh, 89674}, // __builtin_altivec_vmulosh
+      {Intrinsic::ppc_altivec_vmulosw, 89700}, // __builtin_altivec_vmulosw
+      {Intrinsic::ppc_altivec_vmuloub, 89726}, // __builtin_altivec_vmuloub
+      {Intrinsic::ppc_altivec_vmulouh, 89752}, // __builtin_altivec_vmulouh
+      {Intrinsic::ppc_altivec_vmulouw, 89778}, // __builtin_altivec_vmulouw
+      {Intrinsic::ppc_altivec_vnmsubfp, 89804}, // __builtin_altivec_vnmsubfp
+      {Intrinsic::ppc_altivec_vperm, 89831}, // __builtin_altivec_vperm_4si
+      {Intrinsic::ppc_altivec_vpkpx, 89859}, // __builtin_altivec_vpkpx
+      {Intrinsic::ppc_altivec_vpksdss, 89883}, // __builtin_altivec_vpksdss
+      {Intrinsic::ppc_altivec_vpksdus, 89909}, // __builtin_altivec_vpksdus
+      {Intrinsic::ppc_altivec_vpkshss, 89935}, // __builtin_altivec_vpkshss
+      {Intrinsic::ppc_altivec_vpkshus, 89961}, // __builtin_altivec_vpkshus
+      {Intrinsic::ppc_altivec_vpkswss, 89987}, // __builtin_altivec_vpkswss
+      {Intrinsic::ppc_altivec_vpkswus, 90013}, // __builtin_altivec_vpkswus
+      {Intrinsic::ppc_altivec_vpkudus, 90039}, // __builtin_altivec_vpkudus
+      {Intrinsic::ppc_altivec_vpkuhus, 90065}, // __builtin_altivec_vpkuhus
+      {Intrinsic::ppc_altivec_vpkuwus, 90091}, // __builtin_altivec_vpkuwus
+      {Intrinsic::ppc_altivec_vprtybd, 90117}, // __builtin_altivec_vprtybd
+      {Intrinsic::ppc_altivec_vprtybq, 90143}, // __builtin_altivec_vprtybq
+      {Intrinsic::ppc_altivec_vprtybw, 90169}, // __builtin_altivec_vprtybw
+      {Intrinsic::ppc_altivec_vrefp, 90195}, // __builtin_altivec_vrefp
+      {Intrinsic::ppc_altivec_vrfim, 90219}, // __builtin_altivec_vrfim
+      {Intrinsic::ppc_altivec_vrfin, 90243}, // __builtin_altivec_vrfin
+      {Intrinsic::ppc_altivec_vrfip, 90267}, // __builtin_altivec_vrfip
+      {Intrinsic::ppc_altivec_vrfiz, 90291}, // __builtin_altivec_vrfiz
+      {Intrinsic::ppc_altivec_vrlb, 90315}, // __builtin_altivec_vrlb
+      {Intrinsic::ppc_altivec_vrld, 90338}, // __builtin_altivec_vrld
+      {Intrinsic::ppc_altivec_vrldmi, 90361}, // __builtin_altivec_vrldmi
+      {Intrinsic::ppc_altivec_vrldnm, 90386}, // __builtin_altivec_vrldnm
+      {Intrinsic::ppc_altivec_vrlh, 90411}, // __builtin_altivec_vrlh
+      {Intrinsic::ppc_altivec_vrlw, 90434}, // __builtin_altivec_vrlw
+      {Intrinsic::ppc_altivec_vrlwmi, 90457}, // __builtin_altivec_vrlwmi
+      {Intrinsic::ppc_altivec_vrlwnm, 90482}, // __builtin_altivec_vrlwnm
+      {Intrinsic::ppc_altivec_vrsqrtefp, 90507}, // __builtin_altivec_vrsqrtefp
+      {Intrinsic::ppc_altivec_vsel, 90535}, // __builtin_altivec_vsel_4si
+      {Intrinsic::ppc_altivec_vsl, 90562}, // __builtin_altivec_vsl
+      {Intrinsic::ppc_altivec_vslb, 90584}, // __builtin_altivec_vslb
+      {Intrinsic::ppc_altivec_vslh, 90607}, // __builtin_altivec_vslh
+      {Intrinsic::ppc_altivec_vslo, 90630}, // __builtin_altivec_vslo
+      {Intrinsic::ppc_altivec_vslv, 90653}, // __builtin_altivec_vslv
+      {Intrinsic::ppc_altivec_vslw, 90676}, // __builtin_altivec_vslw
+      {Intrinsic::ppc_altivec_vsr, 90699}, // __builtin_altivec_vsr
+      {Intrinsic::ppc_altivec_vsrab, 90721}, // __builtin_altivec_vsrab
+      {Intrinsic::ppc_altivec_vsrah, 90745}, // __builtin_altivec_vsrah
+      {Intrinsic::ppc_altivec_vsraw, 90769}, // __builtin_altivec_vsraw
+      {Intrinsic::ppc_altivec_vsrb, 90793}, // __builtin_altivec_vsrb
+      {Intrinsic::ppc_altivec_vsrh, 90816}, // __builtin_altivec_vsrh
+      {Intrinsic::ppc_altivec_vsro, 90839}, // __builtin_altivec_vsro
+      {Intrinsic::ppc_altivec_vsrv, 90862}, // __builtin_altivec_vsrv
+      {Intrinsic::ppc_altivec_vsrw, 90885}, // __builtin_altivec_vsrw
+      {Intrinsic::ppc_altivec_vsubcuq, 90908}, // __builtin_altivec_vsubcuq
+      {Intrinsic::ppc_altivec_vsubcuw, 90934}, // __builtin_altivec_vsubcuw
+      {Intrinsic::ppc_altivec_vsubecuq, 90960}, // __builtin_altivec_vsubecuq
+      {Intrinsic::ppc_altivec_vsubeuqm, 90987}, // __builtin_altivec_vsubeuqm
+      {Intrinsic::ppc_altivec_vsubsbs, 91014}, // __builtin_altivec_vsubsbs
+      {Intrinsic::ppc_altivec_vsubshs, 91040}, // __builtin_altivec_vsubshs
+      {Intrinsic::ppc_altivec_vsubsws, 91066}, // __builtin_altivec_vsubsws
+      {Intrinsic::ppc_altivec_vsububs, 91092}, // __builtin_altivec_vsububs
+      {Intrinsic::ppc_altivec_vsubuhs, 91118}, // __builtin_altivec_vsubuhs
+      {Intrinsic::ppc_altivec_vsubuws, 91144}, // __builtin_altivec_vsubuws
+      {Intrinsic::ppc_altivec_vsum2sws, 91170}, // __builtin_altivec_vsum2sws
+      {Intrinsic::ppc_altivec_vsum4sbs, 91197}, // __builtin_altivec_vsum4sbs
+      {Intrinsic::ppc_altivec_vsum4shs, 91224}, // __builtin_altivec_vsum4shs
+      {Intrinsic::ppc_altivec_vsum4ubs, 91251}, // __builtin_altivec_vsum4ubs
+      {Intrinsic::ppc_altivec_vsumsws, 91278}, // __builtin_altivec_vsumsws
+      {Intrinsic::ppc_altivec_vupkhpx, 91304}, // __builtin_altivec_vupkhpx
+      {Intrinsic::ppc_altivec_vupkhsb, 91330}, // __builtin_altivec_vupkhsb
+      {Intrinsic::ppc_altivec_vupkhsh, 91356}, // __builtin_altivec_vupkhsh
+      {Intrinsic::ppc_altivec_vupkhsw, 91382}, // __builtin_altivec_vupkhsw
+      {Intrinsic::ppc_altivec_vupklpx, 91408}, // __builtin_altivec_vupklpx
+      {Intrinsic::ppc_altivec_vupklsb, 91434}, // __builtin_altivec_vupklsb
+      {Intrinsic::ppc_altivec_vupklsh, 91460}, // __builtin_altivec_vupklsh
+      {Intrinsic::ppc_altivec_vupklsw, 91486}, // __builtin_altivec_vupklsw
+      {Intrinsic::ppc_bpermd, 91512}, // __builtin_bpermd
+      {Intrinsic::ppc_divde, 91529}, // __builtin_divde
+      {Intrinsic::ppc_divdeu, 91545}, // __builtin_divdeu
+      {Intrinsic::ppc_divf128_round_to_odd, 91562}, // __builtin_divf128_round_to_odd
+      {Intrinsic::ppc_divwe, 91593}, // __builtin_divwe
+      {Intrinsic::ppc_divweu, 91609}, // __builtin_divweu
+      {Intrinsic::ppc_fmaf128_round_to_odd, 91626}, // __builtin_fmaf128_round_to_odd
+      {Intrinsic::ppc_get_texasr, 91657}, // __builtin_get_texasr
+      {Intrinsic::ppc_get_texasru, 91678}, // __builtin_get_texasru
+      {Intrinsic::ppc_get_tfhar, 91700}, // __builtin_get_tfhar
+      {Intrinsic::ppc_get_tfiar, 91720}, // __builtin_get_tfiar
+      {Intrinsic::ppc_mulf128_round_to_odd, 91740}, // __builtin_mulf128_round_to_odd
+      {Intrinsic::ppc_qpx_qvfabs, 91771}, // __builtin_qpx_qvfabs
+      {Intrinsic::ppc_qpx_qvfadd, 91792}, // __builtin_qpx_qvfadd
+      {Intrinsic::ppc_qpx_qvfadds, 91813}, // __builtin_qpx_qvfadds
+      {Intrinsic::ppc_qpx_qvfcfid, 91835}, // __builtin_qpx_qvfcfid
+      {Intrinsic::ppc_qpx_qvfcfids, 91857}, // __builtin_qpx_qvfcfids
+      {Intrinsic::ppc_qpx_qvfcfidu, 91880}, // __builtin_qpx_qvfcfidu
+      {Intrinsic::ppc_qpx_qvfcfidus, 91903}, // __builtin_qpx_qvfcfidus
+      {Intrinsic::ppc_qpx_qvfcmpeq, 91927}, // __builtin_qpx_qvfcmpeq
+      {Intrinsic::ppc_qpx_qvfcmpgt, 91950}, // __builtin_qpx_qvfcmpgt
+      {Intrinsic::ppc_qpx_qvfcmplt, 91973}, // __builtin_qpx_qvfcmplt
+      {Intrinsic::ppc_qpx_qvfcpsgn, 91996}, // __builtin_qpx_qvfcpsgn
+      {Intrinsic::ppc_qpx_qvfctid, 92019}, // __builtin_qpx_qvfctid
+      {Intrinsic::ppc_qpx_qvfctidu, 92041}, // __builtin_qpx_qvfctidu
+      {Intrinsic::ppc_qpx_qvfctiduz, 92064}, // __builtin_qpx_qvfctiduz
+      {Intrinsic::ppc_qpx_qvfctidz, 92088}, // __builtin_qpx_qvfctidz
+      {Intrinsic::ppc_qpx_qvfctiw, 92111}, // __builtin_qpx_qvfctiw
+      {Intrinsic::ppc_qpx_qvfctiwu, 92133}, // __builtin_qpx_qvfctiwu
+      {Intrinsic::ppc_qpx_qvfctiwuz, 92156}, // __builtin_qpx_qvfctiwuz
+      {Intrinsic::ppc_qpx_qvfctiwz, 92180}, // __builtin_qpx_qvfctiwz
+      {Intrinsic::ppc_qpx_qvflogical, 92203}, // __builtin_qpx_qvflogical
+      {Intrinsic::ppc_qpx_qvfmadd, 92228}, // __builtin_qpx_qvfmadd
+      {Intrinsic::ppc_qpx_qvfmadds, 92250}, // __builtin_qpx_qvfmadds
+      {Intrinsic::ppc_qpx_qvfmsub, 92273}, // __builtin_qpx_qvfmsub
+      {Intrinsic::ppc_qpx_qvfmsubs, 92295}, // __builtin_qpx_qvfmsubs
+      {Intrinsic::ppc_qpx_qvfmul, 92318}, // __builtin_qpx_qvfmul
+      {Intrinsic::ppc_qpx_qvfmuls, 92339}, // __builtin_qpx_qvfmuls
+      {Intrinsic::ppc_qpx_qvfnabs, 92361}, // __builtin_qpx_qvfnabs
+      {Intrinsic::ppc_qpx_qvfneg, 92383}, // __builtin_qpx_qvfneg
+      {Intrinsic::ppc_qpx_qvfnmadd, 92404}, // __builtin_qpx_qvfnmadd
+      {Intrinsic::ppc_qpx_qvfnmadds, 92427}, // __builtin_qpx_qvfnmadds
+      {Intrinsic::ppc_qpx_qvfnmsub, 92451}, // __builtin_qpx_qvfnmsub
+      {Intrinsic::ppc_qpx_qvfnmsubs, 92474}, // __builtin_qpx_qvfnmsubs
+      {Intrinsic::ppc_qpx_qvfperm, 92498}, // __builtin_qpx_qvfperm
+      {Intrinsic::ppc_qpx_qvfre, 92520}, // __builtin_qpx_qvfre
+      {Intrinsic::ppc_qpx_qvfres, 92540}, // __builtin_qpx_qvfres
+      {Intrinsic::ppc_qpx_qvfrim, 92561}, // __builtin_qpx_qvfrim
+      {Intrinsic::ppc_qpx_qvfrin, 92582}, // __builtin_qpx_qvfrin
+      {Intrinsic::ppc_qpx_qvfrip, 92603}, // __builtin_qpx_qvfrip
+      {Intrinsic::ppc_qpx_qvfriz, 92624}, // __builtin_qpx_qvfriz
+      {Intrinsic::ppc_qpx_qvfrsp, 92645}, // __builtin_qpx_qvfrsp
+      {Intrinsic::ppc_qpx_qvfrsqrte, 92666}, // __builtin_qpx_qvfrsqrte
+      {Intrinsic::ppc_qpx_qvfrsqrtes, 92690}, // __builtin_qpx_qvfrsqrtes
+      {Intrinsic::ppc_qpx_qvfsel, 92715}, // __builtin_qpx_qvfsel
+      {Intrinsic::ppc_qpx_qvfsub, 92736}, // __builtin_qpx_qvfsub
+      {Intrinsic::ppc_qpx_qvfsubs, 92757}, // __builtin_qpx_qvfsubs
+      {Intrinsic::ppc_qpx_qvftstnan, 92779}, // __builtin_qpx_qvftstnan
+      {Intrinsic::ppc_qpx_qvfxmadd, 92803}, // __builtin_qpx_qvfxmadd
+      {Intrinsic::ppc_qpx_qvfxmadds, 92826}, // __builtin_qpx_qvfxmadds
+      {Intrinsic::ppc_qpx_qvfxmul, 92850}, // __builtin_qpx_qvfxmul
+      {Intrinsic::ppc_qpx_qvfxmuls, 92872}, // __builtin_qpx_qvfxmuls
+      {Intrinsic::ppc_qpx_qvfxxcpnmadd, 92895}, // __builtin_qpx_qvfxxcpnmadd
+      {Intrinsic::ppc_qpx_qvfxxcpnmadds, 92922}, // __builtin_qpx_qvfxxcpnmadds
+      {Intrinsic::ppc_qpx_qvfxxmadd, 92950}, // __builtin_qpx_qvfxxmadd
+      {Intrinsic::ppc_qpx_qvfxxmadds, 92974}, // __builtin_qpx_qvfxxmadds
+      {Intrinsic::ppc_qpx_qvfxxnpmadd, 92999}, // __builtin_qpx_qvfxxnpmadd
+      {Intrinsic::ppc_qpx_qvfxxnpmadds, 93025}, // __builtin_qpx_qvfxxnpmadds
+      {Intrinsic::ppc_qpx_qvgpci, 93052}, // __builtin_qpx_qvgpci
+      {Intrinsic::ppc_qpx_qvlfcd, 93073}, // __builtin_qpx_qvlfcd
+      {Intrinsic::ppc_qpx_qvlfcda, 93094}, // __builtin_qpx_qvlfcda
+      {Intrinsic::ppc_qpx_qvlfcs, 93116}, // __builtin_qpx_qvlfcs
+      {Intrinsic::ppc_qpx_qvlfcsa, 93137}, // __builtin_qpx_qvlfcsa
+      {Intrinsic::ppc_qpx_qvlfd, 93159}, // __builtin_qpx_qvlfd
+      {Intrinsic::ppc_qpx_qvlfda, 93179}, // __builtin_qpx_qvlfda
+      {Intrinsic::ppc_qpx_qvlfiwa, 93200}, // __builtin_qpx_qvlfiwa
+      {Intrinsic::ppc_qpx_qvlfiwaa, 93222}, // __builtin_qpx_qvlfiwaa
+      {Intrinsic::ppc_qpx_qvlfiwz, 93245}, // __builtin_qpx_qvlfiwz
+      {Intrinsic::ppc_qpx_qvlfiwza, 93267}, // __builtin_qpx_qvlfiwza
+      {Intrinsic::ppc_qpx_qvlfs, 93290}, // __builtin_qpx_qvlfs
+      {Intrinsic::ppc_qpx_qvlfsa, 93310}, // __builtin_qpx_qvlfsa
+      {Intrinsic::ppc_qpx_qvlpcld, 93331}, // __builtin_qpx_qvlpcld
+      {Intrinsic::ppc_qpx_qvlpcls, 93353}, // __builtin_qpx_qvlpcls
+      {Intrinsic::ppc_qpx_qvlpcrd, 93375}, // __builtin_qpx_qvlpcrd
+      {Intrinsic::ppc_qpx_qvlpcrs, 93397}, // __builtin_qpx_qvlpcrs
+      {Intrinsic::ppc_qpx_qvstfcd, 93419}, // __builtin_qpx_qvstfcd
+      {Intrinsic::ppc_qpx_qvstfcda, 93441}, // __builtin_qpx_qvstfcda
+      {Intrinsic::ppc_qpx_qvstfcs, 93464}, // __builtin_qpx_qvstfcs
+      {Intrinsic::ppc_qpx_qvstfcsa, 93486}, // __builtin_qpx_qvstfcsa
+      {Intrinsic::ppc_qpx_qvstfd, 93509}, // __builtin_qpx_qvstfd
+      {Intrinsic::ppc_qpx_qvstfda, 93530}, // __builtin_qpx_qvstfda
+      {Intrinsic::ppc_qpx_qvstfiw, 93552}, // __builtin_qpx_qvstfiw
+      {Intrinsic::ppc_qpx_qvstfiwa, 93574}, // __builtin_qpx_qvstfiwa
+      {Intrinsic::ppc_qpx_qvstfs, 93597}, // __builtin_qpx_qvstfs
+      {Intrinsic::ppc_qpx_qvstfsa, 93618}, // __builtin_qpx_qvstfsa
+      {Intrinsic::ppc_set_texasr, 93640}, // __builtin_set_texasr
+      {Intrinsic::ppc_set_texasru, 93661}, // __builtin_set_texasru
+      {Intrinsic::ppc_set_tfhar, 93683}, // __builtin_set_tfhar
+      {Intrinsic::ppc_set_tfiar, 93703}, // __builtin_set_tfiar
+      {Intrinsic::ppc_sqrtf128_round_to_odd, 93723}, // __builtin_sqrtf128_round_to_odd
+      {Intrinsic::ppc_subf128_round_to_odd, 93755}, // __builtin_subf128_round_to_odd
+      {Intrinsic::ppc_tabort, 93786}, // __builtin_tabort
+      {Intrinsic::ppc_tabortdc, 93803}, // __builtin_tabortdc
+      {Intrinsic::ppc_tabortdci, 93822}, // __builtin_tabortdci
+      {Intrinsic::ppc_tabortwc, 93842}, // __builtin_tabortwc
+      {Intrinsic::ppc_tabortwci, 93861}, // __builtin_tabortwci
+      {Intrinsic::ppc_tbegin, 93881}, // __builtin_tbegin
+      {Intrinsic::ppc_tcheck, 93898}, // __builtin_tcheck
+      {Intrinsic::ppc_tend, 93915}, // __builtin_tend
+      {Intrinsic::ppc_tendall, 93930}, // __builtin_tendall
+      {Intrinsic::ppc_trechkpt, 93948}, // __builtin_trechkpt
+      {Intrinsic::ppc_treclaim, 93967}, // __builtin_treclaim
+      {Intrinsic::ppc_tresume, 93986}, // __builtin_tresume
+      {Intrinsic::ppc_truncf128_round_to_odd, 94004}, // __builtin_truncf128_round_to_odd
+      {Intrinsic::ppc_tsr, 94037}, // __builtin_tsr
+      {Intrinsic::ppc_tsuspend, 94051}, // __builtin_tsuspend
+      {Intrinsic::ppc_ttest, 94070}, // __builtin_ttest
+      {Intrinsic::ppc_vsx_xsmaxdp, 94086}, // __builtin_vsx_xsmaxdp
+      {Intrinsic::ppc_vsx_xsmindp, 94108}, // __builtin_vsx_xsmindp
+      {Intrinsic::ppc_vsx_xvcmpeqdp, 94130}, // __builtin_vsx_xvcmpeqdp
+      {Intrinsic::ppc_vsx_xvcmpeqdp_p, 94154}, // __builtin_vsx_xvcmpeqdp_p
+      {Intrinsic::ppc_vsx_xvcmpeqsp, 94180}, // __builtin_vsx_xvcmpeqsp
+      {Intrinsic::ppc_vsx_xvcmpeqsp_p, 94204}, // __builtin_vsx_xvcmpeqsp_p
+      {Intrinsic::ppc_vsx_xvcmpgedp, 94230}, // __builtin_vsx_xvcmpgedp
+      {Intrinsic::ppc_vsx_xvcmpgedp_p, 94254}, // __builtin_vsx_xvcmpgedp_p
+      {Intrinsic::ppc_vsx_xvcmpgesp, 94280}, // __builtin_vsx_xvcmpgesp
+      {Intrinsic::ppc_vsx_xvcmpgesp_p, 94304}, // __builtin_vsx_xvcmpgesp_p
+      {Intrinsic::ppc_vsx_xvcmpgtdp, 94330}, // __builtin_vsx_xvcmpgtdp
+      {Intrinsic::ppc_vsx_xvcmpgtdp_p, 94354}, // __builtin_vsx_xvcmpgtdp_p
+      {Intrinsic::ppc_vsx_xvcmpgtsp, 94380}, // __builtin_vsx_xvcmpgtsp
+      {Intrinsic::ppc_vsx_xvcmpgtsp_p, 94404}, // __builtin_vsx_xvcmpgtsp_p
+      {Intrinsic::ppc_vsx_xvcvdpsp, 94430}, // __builtin_vsx_xvcvdpsp
+      {Intrinsic::ppc_vsx_xvcvdpsxws, 94453}, // __builtin_vsx_xvcvdpsxws
+      {Intrinsic::ppc_vsx_xvcvdpuxws, 94478}, // __builtin_vsx_xvcvdpuxws
+      {Intrinsic::ppc_vsx_xvcvhpsp, 94503}, // __builtin_vsx_xvcvhpsp
+      {Intrinsic::ppc_vsx_xvcvspdp, 94526}, // __builtin_vsx_xvcvspdp
+      {Intrinsic::ppc_vsx_xvcvsphp, 94549}, // __builtin_vsx_xvcvsphp
+      {Intrinsic::ppc_vsx_xvcvsxdsp, 94572}, // __builtin_vsx_xvcvsxdsp
+      {Intrinsic::ppc_vsx_xvcvsxwdp, 94596}, // __builtin_vsx_xvcvsxwdp
+      {Intrinsic::ppc_vsx_xvcvuxdsp, 94620}, // __builtin_vsx_xvcvuxdsp
+      {Intrinsic::ppc_vsx_xvcvuxwdp, 94644}, // __builtin_vsx_xvcvuxwdp
+      {Intrinsic::ppc_vsx_xvdivdp, 94668}, // __builtin_vsx_xvdivdp
+      {Intrinsic::ppc_vsx_xvdivsp, 94690}, // __builtin_vsx_xvdivsp
+      {Intrinsic::ppc_vsx_xviexpdp, 94712}, // __builtin_vsx_xviexpdp
+      {Intrinsic::ppc_vsx_xviexpsp, 94735}, // __builtin_vsx_xviexpsp
+      {Intrinsic::ppc_vsx_xvmaxdp, 94758}, // __builtin_vsx_xvmaxdp
+      {Intrinsic::ppc_vsx_xvmaxsp, 94780}, // __builtin_vsx_xvmaxsp
+      {Intrinsic::ppc_vsx_xvmindp, 94802}, // __builtin_vsx_xvmindp
+      {Intrinsic::ppc_vsx_xvminsp, 94824}, // __builtin_vsx_xvminsp
+      {Intrinsic::ppc_vsx_xvredp, 94846}, // __builtin_vsx_xvredp
+      {Intrinsic::ppc_vsx_xvresp, 94867}, // __builtin_vsx_xvresp
+      {Intrinsic::ppc_vsx_xvrsqrtedp, 94888}, // __builtin_vsx_xvrsqrtedp
+      {Intrinsic::ppc_vsx_xvrsqrtesp, 94913}, // __builtin_vsx_xvrsqrtesp
+      {Intrinsic::ppc_vsx_xvtstdcdp, 94938}, // __builtin_vsx_xvtstdcdp
+      {Intrinsic::ppc_vsx_xvtstdcsp, 94962}, // __builtin_vsx_xvtstdcsp
+      {Intrinsic::ppc_vsx_xvxexpdp, 94986}, // __builtin_vsx_xvxexpdp
+      {Intrinsic::ppc_vsx_xvxexpsp, 95009}, // __builtin_vsx_xvxexpsp
+      {Intrinsic::ppc_vsx_xvxsigdp, 95032}, // __builtin_vsx_xvxsigdp
+      {Intrinsic::ppc_vsx_xvxsigsp, 95055}, // __builtin_vsx_xvxsigsp
+      {Intrinsic::ppc_vsx_xxextractuw, 95078}, // __builtin_vsx_xxextractuw
+      {Intrinsic::ppc_vsx_xxinsertw, 95104}, // __builtin_vsx_xxinsertw
+      {Intrinsic::ppc_vsx_xxleqv, 95128}, // __builtin_vsx_xxleqv
+    };
+    auto I = std::lower_bound(std::begin(ppcNames),
+                              std::end(ppcNames),
+                              BuiltinNameStr);
+    if (I != std::end(ppcNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "r600") {
+    static const BuiltinEntry r600Names[] = {
+      {Intrinsic::r600_group_barrier, 95149}, // __builtin_r600_group_barrier
+      {Intrinsic::r600_implicitarg_ptr, 95178}, // __builtin_r600_implicitarg_ptr
+      {Intrinsic::r600_rat_store_typed, 95209}, // __builtin_r600_rat_store_typed
+      {Intrinsic::r600_read_global_size_x, 95240}, // __builtin_r600_read_global_size_x
+      {Intrinsic::r600_read_global_size_y, 95274}, // __builtin_r600_read_global_size_y
+      {Intrinsic::r600_read_global_size_z, 95308}, // __builtin_r600_read_global_size_z
+      {Intrinsic::r600_read_ngroups_x, 95342}, // __builtin_r600_read_ngroups_x
+      {Intrinsic::r600_read_ngroups_y, 95372}, // __builtin_r600_read_ngroups_y
+      {Intrinsic::r600_read_ngroups_z, 95402}, // __builtin_r600_read_ngroups_z
+      {Intrinsic::r600_read_tgid_x, 95432}, // __builtin_r600_read_tgid_x
+      {Intrinsic::r600_read_tgid_y, 95459}, // __builtin_r600_read_tgid_y
+      {Intrinsic::r600_read_tgid_z, 95486}, // __builtin_r600_read_tgid_z
+    };
+    auto I = std::lower_bound(std::begin(r600Names),
+                              std::end(r600Names),
+                              BuiltinNameStr);
+    if (I != std::end(r600Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "s390") {
+    static const BuiltinEntry s390Names[] = {
+      {Intrinsic::s390_efpc, 95513}, // __builtin_s390_efpc
+      {Intrinsic::s390_lcbb, 95560}, // __builtin_s390_lcbb
+      {Intrinsic::s390_sfpc, 95600}, // __builtin_s390_sfpc
+      {Intrinsic::s390_vaccb, 95620}, // __builtin_s390_vaccb
+      {Intrinsic::s390_vacccq, 95641}, // __builtin_s390_vacccq
+      {Intrinsic::s390_vaccf, 95663}, // __builtin_s390_vaccf
+      {Intrinsic::s390_vaccg, 95684}, // __builtin_s390_vaccg
+      {Intrinsic::s390_vacch, 95705}, // __builtin_s390_vacch
+      {Intrinsic::s390_vaccq, 95726}, // __builtin_s390_vaccq
+      {Intrinsic::s390_vacq, 95747}, // __builtin_s390_vacq
+      {Intrinsic::s390_vaq, 95767}, // __builtin_s390_vaq
+      {Intrinsic::s390_vavgb, 95786}, // __builtin_s390_vavgb
+      {Intrinsic::s390_vavgf, 95807}, // __builtin_s390_vavgf
+      {Intrinsic::s390_vavgg, 95828}, // __builtin_s390_vavgg
+      {Intrinsic::s390_vavgh, 95849}, // __builtin_s390_vavgh
+      {Intrinsic::s390_vavglb, 95870}, // __builtin_s390_vavglb
+      {Intrinsic::s390_vavglf, 95892}, // __builtin_s390_vavglf
+      {Intrinsic::s390_vavglg, 95914}, // __builtin_s390_vavglg
+      {Intrinsic::s390_vavglh, 95936}, // __builtin_s390_vavglh
+      {Intrinsic::s390_vbperm, 95958}, // __builtin_s390_vbperm
+      {Intrinsic::s390_vcksm, 95980}, // __builtin_s390_vcksm
+      {Intrinsic::s390_verimb, 96001}, // __builtin_s390_verimb
+      {Intrinsic::s390_verimf, 96023}, // __builtin_s390_verimf
+      {Intrinsic::s390_verimg, 96045}, // __builtin_s390_verimg
+      {Intrinsic::s390_verimh, 96067}, // __builtin_s390_verimh
+      {Intrinsic::s390_verllb, 96089}, // __builtin_s390_verllb
+      {Intrinsic::s390_verllf, 96111}, // __builtin_s390_verllf
+      {Intrinsic::s390_verllg, 96133}, // __builtin_s390_verllg
+      {Intrinsic::s390_verllh, 96155}, // __builtin_s390_verllh
+      {Intrinsic::s390_verllvb, 96177}, // __builtin_s390_verllvb
+      {Intrinsic::s390_verllvf, 96200}, // __builtin_s390_verllvf
+      {Intrinsic::s390_verllvg, 96223}, // __builtin_s390_verllvg
+      {Intrinsic::s390_verllvh, 96246}, // __builtin_s390_verllvh
+      {Intrinsic::s390_vfaeb, 96269}, // __builtin_s390_vfaeb
+      {Intrinsic::s390_vfaef, 96290}, // __builtin_s390_vfaef
+      {Intrinsic::s390_vfaeh, 96311}, // __builtin_s390_vfaeh
+      {Intrinsic::s390_vfaezb, 96332}, // __builtin_s390_vfaezb
+      {Intrinsic::s390_vfaezf, 96354}, // __builtin_s390_vfaezf
+      {Intrinsic::s390_vfaezh, 96376}, // __builtin_s390_vfaezh
+      {Intrinsic::s390_vfeeb, 96398}, // __builtin_s390_vfeeb
+      {Intrinsic::s390_vfeef, 96419}, // __builtin_s390_vfeef
+      {Intrinsic::s390_vfeeh, 96440}, // __builtin_s390_vfeeh
+      {Intrinsic::s390_vfeezb, 96461}, // __builtin_s390_vfeezb
+      {Intrinsic::s390_vfeezf, 96483}, // __builtin_s390_vfeezf
+      {Intrinsic::s390_vfeezh, 96505}, // __builtin_s390_vfeezh
+      {Intrinsic::s390_vfeneb, 96527}, // __builtin_s390_vfeneb
+      {Intrinsic::s390_vfenef, 96549}, // __builtin_s390_vfenef
+      {Intrinsic::s390_vfeneh, 96571}, // __builtin_s390_vfeneh
+      {Intrinsic::s390_vfenezb, 96593}, // __builtin_s390_vfenezb
+      {Intrinsic::s390_vfenezf, 96616}, // __builtin_s390_vfenezf
+      {Intrinsic::s390_vfenezh, 96639}, // __builtin_s390_vfenezh
+      {Intrinsic::s390_vgfmab, 96662}, // __builtin_s390_vgfmab
+      {Intrinsic::s390_vgfmaf, 96684}, // __builtin_s390_vgfmaf
+      {Intrinsic::s390_vgfmag, 96706}, // __builtin_s390_vgfmag
+      {Intrinsic::s390_vgfmah, 96728}, // __builtin_s390_vgfmah
+      {Intrinsic::s390_vgfmb, 96750}, // __builtin_s390_vgfmb
+      {Intrinsic::s390_vgfmf, 96771}, // __builtin_s390_vgfmf
+      {Intrinsic::s390_vgfmg, 96792}, // __builtin_s390_vgfmg
+      {Intrinsic::s390_vgfmh, 96813}, // __builtin_s390_vgfmh
+      {Intrinsic::s390_vistrb, 96834}, // __builtin_s390_vistrb
+      {Intrinsic::s390_vistrf, 96856}, // __builtin_s390_vistrf
+      {Intrinsic::s390_vistrh, 96878}, // __builtin_s390_vistrh
+      {Intrinsic::s390_vlbb, 96900}, // __builtin_s390_vlbb
+      {Intrinsic::s390_vll, 96920}, // __builtin_s390_vll
+      {Intrinsic::s390_vlrl, 96939}, // __builtin_s390_vlrl
+      {Intrinsic::s390_vmaeb, 96959}, // __builtin_s390_vmaeb
+      {Intrinsic::s390_vmaef, 96980}, // __builtin_s390_vmaef
+      {Intrinsic::s390_vmaeh, 97001}, // __builtin_s390_vmaeh
+      {Intrinsic::s390_vmahb, 97022}, // __builtin_s390_vmahb
+      {Intrinsic::s390_vmahf, 97043}, // __builtin_s390_vmahf
+      {Intrinsic::s390_vmahh, 97064}, // __builtin_s390_vmahh
+      {Intrinsic::s390_vmaleb, 97085}, // __builtin_s390_vmaleb
+      {Intrinsic::s390_vmalef, 97107}, // __builtin_s390_vmalef
+      {Intrinsic::s390_vmaleh, 97129}, // __builtin_s390_vmaleh
+      {Intrinsic::s390_vmalhb, 97151}, // __builtin_s390_vmalhb
+      {Intrinsic::s390_vmalhf, 97173}, // __builtin_s390_vmalhf
+      {Intrinsic::s390_vmalhh, 97195}, // __builtin_s390_vmalhh
+      {Intrinsic::s390_vmalob, 97217}, // __builtin_s390_vmalob
+      {Intrinsic::s390_vmalof, 97239}, // __builtin_s390_vmalof
+      {Intrinsic::s390_vmaloh, 97261}, // __builtin_s390_vmaloh
+      {Intrinsic::s390_vmaob, 97283}, // __builtin_s390_vmaob
+      {Intrinsic::s390_vmaof, 97304}, // __builtin_s390_vmaof
+      {Intrinsic::s390_vmaoh, 97325}, // __builtin_s390_vmaoh
+      {Intrinsic::s390_vmeb, 97346}, // __builtin_s390_vmeb
+      {Intrinsic::s390_vmef, 97366}, // __builtin_s390_vmef
+      {Intrinsic::s390_vmeh, 97386}, // __builtin_s390_vmeh
+      {Intrinsic::s390_vmhb, 97406}, // __builtin_s390_vmhb
+      {Intrinsic::s390_vmhf, 97426}, // __builtin_s390_vmhf
+      {Intrinsic::s390_vmhh, 97446}, // __builtin_s390_vmhh
+      {Intrinsic::s390_vmleb, 97466}, // __builtin_s390_vmleb
+      {Intrinsic::s390_vmlef, 97487}, // __builtin_s390_vmlef
+      {Intrinsic::s390_vmleh, 97508}, // __builtin_s390_vmleh
+      {Intrinsic::s390_vmlhb, 97529}, // __builtin_s390_vmlhb
+      {Intrinsic::s390_vmlhf, 97550}, // __builtin_s390_vmlhf
+      {Intrinsic::s390_vmlhh, 97571}, // __builtin_s390_vmlhh
+      {Intrinsic::s390_vmlob, 97592}, // __builtin_s390_vmlob
+      {Intrinsic::s390_vmlof, 97613}, // __builtin_s390_vmlof
+      {Intrinsic::s390_vmloh, 97634}, // __builtin_s390_vmloh
+      {Intrinsic::s390_vmob, 97655}, // __builtin_s390_vmob
+      {Intrinsic::s390_vmof, 97675}, // __builtin_s390_vmof
+      {Intrinsic::s390_vmoh, 97695}, // __builtin_s390_vmoh
+      {Intrinsic::s390_vmslg, 97715}, // __builtin_s390_vmslg
+      {Intrinsic::s390_vpdi, 97736}, // __builtin_s390_vpdi
+      {Intrinsic::s390_vperm, 97756}, // __builtin_s390_vperm
+      {Intrinsic::s390_vpklsf, 97777}, // __builtin_s390_vpklsf
+      {Intrinsic::s390_vpklsg, 97799}, // __builtin_s390_vpklsg
+      {Intrinsic::s390_vpklsh, 97821}, // __builtin_s390_vpklsh
+      {Intrinsic::s390_vpksf, 97843}, // __builtin_s390_vpksf
+      {Intrinsic::s390_vpksg, 97864}, // __builtin_s390_vpksg
+      {Intrinsic::s390_vpksh, 97885}, // __builtin_s390_vpksh
+      {Intrinsic::s390_vsbcbiq, 97906}, // __builtin_s390_vsbcbiq
+      {Intrinsic::s390_vsbiq, 97929}, // __builtin_s390_vsbiq
+      {Intrinsic::s390_vscbib, 97950}, // __builtin_s390_vscbib
+      {Intrinsic::s390_vscbif, 97972}, // __builtin_s390_vscbif
+      {Intrinsic::s390_vscbig, 97994}, // __builtin_s390_vscbig
+      {Intrinsic::s390_vscbih, 98016}, // __builtin_s390_vscbih
+      {Intrinsic::s390_vscbiq, 98038}, // __builtin_s390_vscbiq
+      {Intrinsic::s390_vsl, 98060}, // __builtin_s390_vsl
+      {Intrinsic::s390_vslb, 98079}, // __builtin_s390_vslb
+      {Intrinsic::s390_vsldb, 98099}, // __builtin_s390_vsldb
+      {Intrinsic::s390_vsq, 98120}, // __builtin_s390_vsq
+      {Intrinsic::s390_vsra, 98139}, // __builtin_s390_vsra
+      {Intrinsic::s390_vsrab, 98159}, // __builtin_s390_vsrab
+      {Intrinsic::s390_vsrl, 98180}, // __builtin_s390_vsrl
+      {Intrinsic::s390_vsrlb, 98200}, // __builtin_s390_vsrlb
+      {Intrinsic::s390_vstl, 98221}, // __builtin_s390_vstl
+      {Intrinsic::s390_vstrcb, 98241}, // __builtin_s390_vstrcb
+      {Intrinsic::s390_vstrcf, 98263}, // __builtin_s390_vstrcf
+      {Intrinsic::s390_vstrch, 98285}, // __builtin_s390_vstrch
+      {Intrinsic::s390_vstrczb, 98307}, // __builtin_s390_vstrczb
+      {Intrinsic::s390_vstrczf, 98330}, // __builtin_s390_vstrczf
+      {Intrinsic::s390_vstrczh, 98353}, // __builtin_s390_vstrczh
+      {Intrinsic::s390_vstrl, 98376}, // __builtin_s390_vstrl
+      {Intrinsic::s390_vsumb, 98397}, // __builtin_s390_vsumb
+      {Intrinsic::s390_vsumgf, 98418}, // __builtin_s390_vsumgf
+      {Intrinsic::s390_vsumgh, 98440}, // __builtin_s390_vsumgh
+      {Intrinsic::s390_vsumh, 98462}, // __builtin_s390_vsumh
+      {Intrinsic::s390_vsumqf, 98483}, // __builtin_s390_vsumqf
+      {Intrinsic::s390_vsumqg, 98505}, // __builtin_s390_vsumqg
+      {Intrinsic::s390_vtm, 98527}, // __builtin_s390_vtm
+      {Intrinsic::s390_vuphb, 98546}, // __builtin_s390_vuphb
+      {Intrinsic::s390_vuphf, 98567}, // __builtin_s390_vuphf
+      {Intrinsic::s390_vuphh, 98588}, // __builtin_s390_vuphh
+      {Intrinsic::s390_vuplb, 98609}, // __builtin_s390_vuplb
+      {Intrinsic::s390_vuplf, 98630}, // __builtin_s390_vuplf
+      {Intrinsic::s390_vuplhb, 98651}, // __builtin_s390_vuplhb
+      {Intrinsic::s390_vuplhf, 98673}, // __builtin_s390_vuplhf
+      {Intrinsic::s390_vuplhh, 98695}, // __builtin_s390_vuplhh
+      {Intrinsic::s390_vuplhw, 98717}, // __builtin_s390_vuplhw
+      {Intrinsic::s390_vupllb, 98739}, // __builtin_s390_vupllb
+      {Intrinsic::s390_vupllf, 98761}, // __builtin_s390_vupllf
+      {Intrinsic::s390_vupllh, 98783}, // __builtin_s390_vupllh
+      {Intrinsic::s390_tend, 93915}, // __builtin_tend
+      {Intrinsic::s390_ppa_txassist, 95580}, // __builtin_tx_assist
+      {Intrinsic::s390_etnd, 95533}, // __builtin_tx_nesting_depth
+    };
+    auto I = std::lower_bound(std::begin(s390Names),
+                              std::end(s390Names),
+                              BuiltinNameStr);
+    if (I != std::end(s390Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "x86") {
+    static const BuiltinEntry x86Names[] = {
+      {Intrinsic::x86_addcarry_u32, 99313}, // __builtin_ia32_addcarry_u32
+      {Intrinsic::x86_addcarry_u64, 99341}, // __builtin_ia32_addcarry_u64
+      {Intrinsic::x86_addcarryx_u32, 99369}, // __builtin_ia32_addcarryx_u32
+      {Intrinsic::x86_addcarryx_u64, 99398}, // __builtin_ia32_addcarryx_u64
+      {Intrinsic::x86_avx512_add_pd_512, 103374}, // __builtin_ia32_addpd512
+      {Intrinsic::x86_avx512_add_ps_512, 103398}, // __builtin_ia32_addps512
+      {Intrinsic::x86_avx512_mask_add_sd_round, 104972}, // __builtin_ia32_addsd_round_mask
+      {Intrinsic::x86_avx512_mask_add_ss_round, 105004}, // __builtin_ia32_addss_round_mask
+      {Intrinsic::x86_sse3_addsub_pd, 127495}, // __builtin_ia32_addsubpd
+      {Intrinsic::x86_avx_addsub_pd_256, 99810}, // __builtin_ia32_addsubpd256
+      {Intrinsic::x86_sse3_addsub_ps, 127519}, // __builtin_ia32_addsubps
+      {Intrinsic::x86_avx_addsub_ps_256, 99837}, // __builtin_ia32_addsubps256
+      {Intrinsic::x86_aesni_aesdec, 99427}, // __builtin_ia32_aesdec128
+      {Intrinsic::x86_aesni_aesdec_256, 99452}, // __builtin_ia32_aesdec256
+      {Intrinsic::x86_aesni_aesdec_512, 99477}, // __builtin_ia32_aesdec512
+      {Intrinsic::x86_aesni_aesdeclast, 99502}, // __builtin_ia32_aesdeclast128
+      {Intrinsic::x86_aesni_aesdeclast_256, 99531}, // __builtin_ia32_aesdeclast256
+      {Intrinsic::x86_aesni_aesdeclast_512, 99560}, // __builtin_ia32_aesdeclast512
+      {Intrinsic::x86_aesni_aesenc, 99589}, // __builtin_ia32_aesenc128
+      {Intrinsic::x86_aesni_aesenc_256, 99614}, // __builtin_ia32_aesenc256
+      {Intrinsic::x86_aesni_aesenc_512, 99639}, // __builtin_ia32_aesenc512
+      {Intrinsic::x86_aesni_aesenclast, 99664}, // __builtin_ia32_aesenclast128
+      {Intrinsic::x86_aesni_aesenclast_256, 99693}, // __builtin_ia32_aesenclast256
+      {Intrinsic::x86_aesni_aesenclast_512, 99722}, // __builtin_ia32_aesenclast512
+      {Intrinsic::x86_aesni_aesimc, 99751}, // __builtin_ia32_aesimc128
+      {Intrinsic::x86_aesni_aeskeygenassist, 99776}, // __builtin_ia32_aeskeygenassist128
+      {Intrinsic::x86_bmi_bextr_32, 122031}, // __builtin_ia32_bextr_u32
+      {Intrinsic::x86_bmi_bextr_64, 122056}, // __builtin_ia32_bextr_u64
+      {Intrinsic::x86_tbm_bextri_u32, 129372}, // __builtin_ia32_bextri_u32
+      {Intrinsic::x86_tbm_bextri_u64, 129398}, // __builtin_ia32_bextri_u64
+      {Intrinsic::x86_sse41_blendvpd, 127696}, // __builtin_ia32_blendvpd
+      {Intrinsic::x86_avx_blendv_pd_256, 99864}, // __builtin_ia32_blendvpd256
+      {Intrinsic::x86_sse41_blendvps, 127720}, // __builtin_ia32_blendvps
+      {Intrinsic::x86_avx_blendv_ps_256, 99891}, // __builtin_ia32_blendvps256
+      {Intrinsic::x86_avx512_broadcastmb_128, 103422}, // __builtin_ia32_broadcastmb128
+      {Intrinsic::x86_avx512_broadcastmb_256, 103452}, // __builtin_ia32_broadcastmb256
+      {Intrinsic::x86_avx512_broadcastmb_512, 103482}, // __builtin_ia32_broadcastmb512
+      {Intrinsic::x86_avx512_broadcastmw_128, 103512}, // __builtin_ia32_broadcastmw128
+      {Intrinsic::x86_avx512_broadcastmw_256, 103542}, // __builtin_ia32_broadcastmw256
+      {Intrinsic::x86_avx512_broadcastmw_512, 103572}, // __builtin_ia32_broadcastmw512
+      {Intrinsic::x86_bmi_bzhi_64, 122104}, // __builtin_ia32_bzhi_di
+      {Intrinsic::x86_bmi_bzhi_32, 122081}, // __builtin_ia32_bzhi_si
+      {Intrinsic::x86_cldemote, 122219}, // __builtin_ia32_cldemote
+      {Intrinsic::x86_sse2_clflush, 125902}, // __builtin_ia32_clflush
+      {Intrinsic::x86_clflushopt, 122243}, // __builtin_ia32_clflushopt
+      {Intrinsic::x86_clrssbsy, 122269}, // __builtin_ia32_clrssbsy
+      {Intrinsic::x86_clwb, 122293}, // __builtin_ia32_clwb
+      {Intrinsic::x86_clzero, 122313}, // __builtin_ia32_clzero
+      {Intrinsic::x86_sse2_cmp_sd, 125925}, // __builtin_ia32_cmpsd
+      {Intrinsic::x86_avx512_mask_cmp_sd, 105036}, // __builtin_ia32_cmpsd_mask
+      {Intrinsic::x86_sse_cmp_ss, 125121}, // __builtin_ia32_cmpss
+      {Intrinsic::x86_avx512_mask_cmp_ss, 105062}, // __builtin_ia32_cmpss_mask
+      {Intrinsic::x86_sse_comieq_ss, 125142}, // __builtin_ia32_comieq
+      {Intrinsic::x86_sse_comige_ss, 125164}, // __builtin_ia32_comige
+      {Intrinsic::x86_sse_comigt_ss, 125186}, // __builtin_ia32_comigt
+      {Intrinsic::x86_sse_comile_ss, 125208}, // __builtin_ia32_comile
+      {Intrinsic::x86_sse_comilt_ss, 125230}, // __builtin_ia32_comilt
+      {Intrinsic::x86_sse_comineq_ss, 125252}, // __builtin_ia32_comineq
+      {Intrinsic::x86_sse2_comieq_sd, 125946}, // __builtin_ia32_comisdeq
+      {Intrinsic::x86_sse2_comige_sd, 125970}, // __builtin_ia32_comisdge
+      {Intrinsic::x86_sse2_comigt_sd, 125994}, // __builtin_ia32_comisdgt
+      {Intrinsic::x86_sse2_comile_sd, 126018}, // __builtin_ia32_comisdle
+      {Intrinsic::x86_sse2_comilt_sd, 126042}, // __builtin_ia32_comisdlt
+      {Intrinsic::x86_sse2_comineq_sd, 126066}, // __builtin_ia32_comisdneq
+      {Intrinsic::x86_avx512_mask_compress_pd_128, 105292}, // __builtin_ia32_compressdf128_mask
+      {Intrinsic::x86_avx512_mask_compress_pd_256, 105326}, // __builtin_ia32_compressdf256_mask
+      {Intrinsic::x86_avx512_mask_compress_pd_512, 105360}, // __builtin_ia32_compressdf512_mask
+      {Intrinsic::x86_avx512_mask_compress_q_128, 105496}, // __builtin_ia32_compressdi128_mask
+      {Intrinsic::x86_avx512_mask_compress_q_256, 105530}, // __builtin_ia32_compressdi256_mask
+      {Intrinsic::x86_avx512_mask_compress_q_512, 105564}, // __builtin_ia32_compressdi512_mask
+      {Intrinsic::x86_avx512_mask_compress_w_128, 105598}, // __builtin_ia32_compresshi128_mask
+      {Intrinsic::x86_avx512_mask_compress_w_256, 105632}, // __builtin_ia32_compresshi256_mask
+      {Intrinsic::x86_avx512_mask_compress_w_512, 105666}, // __builtin_ia32_compresshi512_mask
+      {Intrinsic::x86_avx512_mask_compress_b_128, 105088}, // __builtin_ia32_compressqi128_mask
+      {Intrinsic::x86_avx512_mask_compress_b_256, 105122}, // __builtin_ia32_compressqi256_mask
+      {Intrinsic::x86_avx512_mask_compress_b_512, 105156}, // __builtin_ia32_compressqi512_mask
+      {Intrinsic::x86_avx512_mask_compress_ps_128, 105394}, // __builtin_ia32_compresssf128_mask
+      {Intrinsic::x86_avx512_mask_compress_ps_256, 105428}, // __builtin_ia32_compresssf256_mask
+      {Intrinsic::x86_avx512_mask_compress_ps_512, 105462}, // __builtin_ia32_compresssf512_mask
+      {Intrinsic::x86_avx512_mask_compress_d_128, 105190}, // __builtin_ia32_compresssi128_mask
+      {Intrinsic::x86_avx512_mask_compress_d_256, 105224}, // __builtin_ia32_compresssi256_mask
+      {Intrinsic::x86_avx512_mask_compress_d_512, 105258}, // __builtin_ia32_compresssi512_mask
+      {Intrinsic::x86_sse42_crc32_64_64, 128158}, // __builtin_ia32_crc32di
+      {Intrinsic::x86_sse42_crc32_32_16, 128089}, // __builtin_ia32_crc32hi
+      {Intrinsic::x86_sse42_crc32_32_8, 128135}, // __builtin_ia32_crc32qi
+      {Intrinsic::x86_sse42_crc32_32_32, 128112}, // __builtin_ia32_crc32si
+      {Intrinsic::x86_avx512_mask_cvtdq2ps_512, 105922}, // __builtin_ia32_cvtdq2ps512_mask
+      {Intrinsic::x86_sse2_cvtpd2dq, 126091}, // __builtin_ia32_cvtpd2dq
+      {Intrinsic::x86_avx512_mask_cvtpd2dq_128, 105954}, // __builtin_ia32_cvtpd2dq128_mask
+      {Intrinsic::x86_avx_cvt_pd2dq_256, 99945}, // __builtin_ia32_cvtpd2dq256
+      {Intrinsic::x86_avx512_mask_cvtpd2dq_512, 105986}, // __builtin_ia32_cvtpd2dq512_mask
+      {Intrinsic::x86_sse_cvtpd2pi, 125275}, // __builtin_ia32_cvtpd2pi
+      {Intrinsic::x86_sse2_cvtpd2ps, 126115}, // __builtin_ia32_cvtpd2ps
+      {Intrinsic::x86_avx_cvt_pd2_ps_256, 99918}, // __builtin_ia32_cvtpd2ps256
+      {Intrinsic::x86_avx512_mask_cvtpd2ps_512, 106047}, // __builtin_ia32_cvtpd2ps512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2ps, 106018}, // __builtin_ia32_cvtpd2ps_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_128, 106079}, // __builtin_ia32_cvtpd2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_256, 106111}, // __builtin_ia32_cvtpd2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2qq_512, 106143}, // __builtin_ia32_cvtpd2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_128, 106175}, // __builtin_ia32_cvtpd2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_256, 106208}, // __builtin_ia32_cvtpd2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2udq_512, 106241}, // __builtin_ia32_cvtpd2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_128, 106274}, // __builtin_ia32_cvtpd2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_256, 106307}, // __builtin_ia32_cvtpd2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvtpd2uqq_512, 106340}, // __builtin_ia32_cvtpd2uqq512_mask
+      {Intrinsic::x86_sse_cvtpi2pd, 125299}, // __builtin_ia32_cvtpi2pd
+      {Intrinsic::x86_sse_cvtpi2ps, 125323}, // __builtin_ia32_cvtpi2ps
+      {Intrinsic::x86_sse2_cvtps2dq, 126139}, // __builtin_ia32_cvtps2dq
+      {Intrinsic::x86_avx512_mask_cvtps2dq_128, 106373}, // __builtin_ia32_cvtps2dq128_mask
+      {Intrinsic::x86_avx_cvt_ps2dq_256, 99972}, // __builtin_ia32_cvtps2dq256
+      {Intrinsic::x86_avx512_mask_cvtps2dq_256, 106405}, // __builtin_ia32_cvtps2dq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2dq_512, 106437}, // __builtin_ia32_cvtps2dq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2pd_512, 106469}, // __builtin_ia32_cvtps2pd512_mask
+      {Intrinsic::x86_sse_cvtps2pi, 125347}, // __builtin_ia32_cvtps2pi
+      {Intrinsic::x86_avx512_mask_cvtps2qq_128, 106501}, // __builtin_ia32_cvtps2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2qq_256, 106533}, // __builtin_ia32_cvtps2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2qq_512, 106565}, // __builtin_ia32_cvtps2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_128, 106597}, // __builtin_ia32_cvtps2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_256, 106630}, // __builtin_ia32_cvtps2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2udq_512, 106663}, // __builtin_ia32_cvtps2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_128, 106696}, // __builtin_ia32_cvtps2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_256, 106729}, // __builtin_ia32_cvtps2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvtps2uqq_512, 106762}, // __builtin_ia32_cvtps2uqq512_mask
+      {Intrinsic::x86_avx512_mask_cvtqq2pd_512, 106795}, // __builtin_ia32_cvtqq2pd512_mask
+      {Intrinsic::x86_avx512_mask_cvtqq2ps_128, 106827}, // __builtin_ia32_cvtqq2ps128_mask
+      {Intrinsic::x86_avx512_mask_cvtqq2ps_256, 106859}, // __builtin_ia32_cvtqq2ps256_mask
+      {Intrinsic::x86_avx512_mask_cvtqq2ps_512, 106891}, // __builtin_ia32_cvtqq2ps512_mask
+      {Intrinsic::x86_sse2_cvtsd2si, 126163}, // __builtin_ia32_cvtsd2si
+      {Intrinsic::x86_sse2_cvtsd2si64, 126187}, // __builtin_ia32_cvtsd2si64
+      {Intrinsic::x86_sse2_cvtsd2ss, 126213}, // __builtin_ia32_cvtsd2ss
+      {Intrinsic::x86_avx512_mask_cvtsd2ss_round, 106923}, // __builtin_ia32_cvtsd2ss_round_mask
+      {Intrinsic::x86_avx512_cvtsi2sd64, 103602}, // __builtin_ia32_cvtsi2sd64
+      {Intrinsic::x86_avx512_cvtsi2ss32, 103628}, // __builtin_ia32_cvtsi2ss32
+      {Intrinsic::x86_avx512_cvtsi2ss64, 103654}, // __builtin_ia32_cvtsi2ss64
+      {Intrinsic::x86_avx512_mask_cvtss2sd_round, 106958}, // __builtin_ia32_cvtss2sd_round_mask
+      {Intrinsic::x86_sse_cvtss2si, 125371}, // __builtin_ia32_cvtss2si
+      {Intrinsic::x86_sse_cvtss2si64, 125395}, // __builtin_ia32_cvtss2si64
+      {Intrinsic::x86_sse2_cvttpd2dq, 126237}, // __builtin_ia32_cvttpd2dq
+      {Intrinsic::x86_avx512_mask_cvttpd2dq_128, 106993}, // __builtin_ia32_cvttpd2dq128_mask
+      {Intrinsic::x86_avx_cvtt_pd2dq_256, 99999}, // __builtin_ia32_cvttpd2dq256
+      {Intrinsic::x86_avx512_mask_cvttpd2dq_512, 107026}, // __builtin_ia32_cvttpd2dq512_mask
+      {Intrinsic::x86_sse_cvttpd2pi, 125421}, // __builtin_ia32_cvttpd2pi
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_128, 107059}, // __builtin_ia32_cvttpd2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_256, 107092}, // __builtin_ia32_cvttpd2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2qq_512, 107125}, // __builtin_ia32_cvttpd2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_128, 107158}, // __builtin_ia32_cvttpd2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_256, 107192}, // __builtin_ia32_cvttpd2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2udq_512, 107226}, // __builtin_ia32_cvttpd2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_128, 107260}, // __builtin_ia32_cvttpd2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_256, 107294}, // __builtin_ia32_cvttpd2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvttpd2uqq_512, 107328}, // __builtin_ia32_cvttpd2uqq512_mask
+      {Intrinsic::x86_sse2_cvttps2dq, 126262}, // __builtin_ia32_cvttps2dq
+      {Intrinsic::x86_avx_cvtt_ps2dq_256, 100027}, // __builtin_ia32_cvttps2dq256
+      {Intrinsic::x86_avx512_mask_cvttps2dq_512, 107362}, // __builtin_ia32_cvttps2dq512_mask
+      {Intrinsic::x86_sse_cvttps2pi, 125446}, // __builtin_ia32_cvttps2pi
+      {Intrinsic::x86_avx512_mask_cvttps2qq_128, 107395}, // __builtin_ia32_cvttps2qq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2qq_256, 107428}, // __builtin_ia32_cvttps2qq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2qq_512, 107461}, // __builtin_ia32_cvttps2qq512_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_128, 107494}, // __builtin_ia32_cvttps2udq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_256, 107528}, // __builtin_ia32_cvttps2udq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2udq_512, 107562}, // __builtin_ia32_cvttps2udq512_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_128, 107596}, // __builtin_ia32_cvttps2uqq128_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_256, 107630}, // __builtin_ia32_cvttps2uqq256_mask
+      {Intrinsic::x86_avx512_mask_cvttps2uqq_512, 107664}, // __builtin_ia32_cvttps2uqq512_mask
+      {Intrinsic::x86_sse2_cvttsd2si, 126287}, // __builtin_ia32_cvttsd2si
+      {Intrinsic::x86_sse2_cvttsd2si64, 126312}, // __builtin_ia32_cvttsd2si64
+      {Intrinsic::x86_sse_cvttss2si, 125471}, // __builtin_ia32_cvttss2si
+      {Intrinsic::x86_sse_cvttss2si64, 125496}, // __builtin_ia32_cvttss2si64
+      {Intrinsic::x86_avx512_mask_cvtudq2ps_512, 107698}, // __builtin_ia32_cvtudq2ps512_mask
+      {Intrinsic::x86_avx512_mask_cvtuqq2pd_512, 107731}, // __builtin_ia32_cvtuqq2pd512_mask
+      {Intrinsic::x86_avx512_mask_cvtuqq2ps_128, 107764}, // __builtin_ia32_cvtuqq2ps128_mask
+      {Intrinsic::x86_avx512_mask_cvtuqq2ps_256, 107797}, // __builtin_ia32_cvtuqq2ps256_mask
+      {Intrinsic::x86_avx512_mask_cvtuqq2ps_512, 107830}, // __builtin_ia32_cvtuqq2ps512_mask
+      {Intrinsic::x86_avx512_cvtusi642sd, 103935}, // __builtin_ia32_cvtusi2sd64
+      {Intrinsic::x86_avx512_cvtusi2ss, 103908}, // __builtin_ia32_cvtusi2ss32
+      {Intrinsic::x86_avx512_cvtusi642ss, 103962}, // __builtin_ia32_cvtusi2ss64
+      {Intrinsic::x86_avx512_dbpsadbw_128, 103989}, // __builtin_ia32_dbpsadbw128
+      {Intrinsic::x86_avx512_dbpsadbw_256, 104016}, // __builtin_ia32_dbpsadbw256
+      {Intrinsic::x86_avx512_dbpsadbw_512, 104043}, // __builtin_ia32_dbpsadbw512
+      {Intrinsic::x86_directstore32, 122335}, // __builtin_ia32_directstore_u32
+      {Intrinsic::x86_directstore64, 122366}, // __builtin_ia32_directstore_u64
+      {Intrinsic::x86_avx512_div_pd_512, 104070}, // __builtin_ia32_divpd512
+      {Intrinsic::x86_avx512_div_ps_512, 104094}, // __builtin_ia32_divps512
+      {Intrinsic::x86_avx512_mask_div_sd_round, 107863}, // __builtin_ia32_divsd_round_mask
+      {Intrinsic::x86_avx512_mask_div_ss_round, 107895}, // __builtin_ia32_divss_round_mask
+      {Intrinsic::x86_sse41_dppd, 127744}, // __builtin_ia32_dppd
+      {Intrinsic::x86_sse41_dpps, 127764}, // __builtin_ia32_dpps
+      {Intrinsic::x86_avx_dp_ps_256, 100055}, // __builtin_ia32_dpps256
+      {Intrinsic::x86_mmx_emms, 122800}, // __builtin_ia32_emms
+      {Intrinsic::x86_avx512_exp2_pd, 104118}, // __builtin_ia32_exp2pd_mask
+      {Intrinsic::x86_avx512_exp2_ps, 104145}, // __builtin_ia32_exp2ps_mask
+      {Intrinsic::x86_avx512_mask_expand_pd_128, 108119}, // __builtin_ia32_expanddf128_mask
+      {Intrinsic::x86_avx512_mask_expand_pd_256, 108151}, // __builtin_ia32_expanddf256_mask
+      {Intrinsic::x86_avx512_mask_expand_pd_512, 108183}, // __builtin_ia32_expanddf512_mask
+      {Intrinsic::x86_avx512_mask_expand_q_128, 108311}, // __builtin_ia32_expanddi128_mask
+      {Intrinsic::x86_avx512_mask_expand_q_256, 108343}, // __builtin_ia32_expanddi256_mask
+      {Intrinsic::x86_avx512_mask_expand_q_512, 108375}, // __builtin_ia32_expanddi512_mask
+      {Intrinsic::x86_avx512_mask_expand_w_128, 108407}, // __builtin_ia32_expandhi128_mask
+      {Intrinsic::x86_avx512_mask_expand_w_256, 108439}, // __builtin_ia32_expandhi256_mask
+      {Intrinsic::x86_avx512_mask_expand_w_512, 108471}, // __builtin_ia32_expandhi512_mask
+      {Intrinsic::x86_avx512_mask_expand_b_128, 107927}, // __builtin_ia32_expandqi128_mask
+      {Intrinsic::x86_avx512_mask_expand_b_256, 107959}, // __builtin_ia32_expandqi256_mask
+      {Intrinsic::x86_avx512_mask_expand_b_512, 107991}, // __builtin_ia32_expandqi512_mask
+      {Intrinsic::x86_avx512_mask_expand_ps_128, 108215}, // __builtin_ia32_expandsf128_mask
+      {Intrinsic::x86_avx512_mask_expand_ps_256, 108247}, // __builtin_ia32_expandsf256_mask
+      {Intrinsic::x86_avx512_mask_expand_ps_512, 108279}, // __builtin_ia32_expandsf512_mask
+      {Intrinsic::x86_avx512_mask_expand_d_128, 108023}, // __builtin_ia32_expandsi128_mask
+      {Intrinsic::x86_avx512_mask_expand_d_256, 108055}, // __builtin_ia32_expandsi256_mask
+      {Intrinsic::x86_avx512_mask_expand_d_512, 108087}, // __builtin_ia32_expandsi512_mask
+      {Intrinsic::x86_sse4a_extrq, 128583}, // __builtin_ia32_extrq
+      {Intrinsic::x86_sse4a_extrqi, 128604}, // __builtin_ia32_extrqi
+      {Intrinsic::x86_mmx_femms, 122820}, // __builtin_ia32_femms
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_128, 108503}, // __builtin_ia32_fixupimmpd128_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_128, 115205}, // __builtin_ia32_fixupimmpd128_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_256, 108537}, // __builtin_ia32_fixupimmpd256_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_256, 115240}, // __builtin_ia32_fixupimmpd256_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_pd_512, 108571}, // __builtin_ia32_fixupimmpd512_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_pd_512, 115275}, // __builtin_ia32_fixupimmpd512_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_128, 108605}, // __builtin_ia32_fixupimmps128_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_128, 115310}, // __builtin_ia32_fixupimmps128_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_256, 108639}, // __builtin_ia32_fixupimmps256_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_256, 115345}, // __builtin_ia32_fixupimmps256_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ps_512, 108673}, // __builtin_ia32_fixupimmps512_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ps_512, 115380}, // __builtin_ia32_fixupimmps512_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_sd, 108707}, // __builtin_ia32_fixupimmsd_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_sd, 115415}, // __builtin_ia32_fixupimmsd_maskz
+      {Intrinsic::x86_avx512_mask_fixupimm_ss, 108738}, // __builtin_ia32_fixupimmss_mask
+      {Intrinsic::x86_avx512_maskz_fixupimm_ss, 115447}, // __builtin_ia32_fixupimmss_maskz
+      {Intrinsic::x86_avx512_mask_fpclass_sd, 108769}, // __builtin_ia32_fpclasssd_mask
+      {Intrinsic::x86_avx512_mask_fpclass_ss, 108799}, // __builtin_ia32_fpclassss_mask
+      {Intrinsic::x86_fxrstor, 122519}, // __builtin_ia32_fxrstor
+      {Intrinsic::x86_fxrstor64, 122542}, // __builtin_ia32_fxrstor64
+      {Intrinsic::x86_fxsave, 122567}, // __builtin_ia32_fxsave
+      {Intrinsic::x86_fxsave64, 122589}, // __builtin_ia32_fxsave64
+      {Intrinsic::x86_avx512_gather3div2_df, 104400}, // __builtin_ia32_gather3div2df
+      {Intrinsic::x86_avx512_gather3div2_di, 104429}, // __builtin_ia32_gather3div2di
+      {Intrinsic::x86_avx512_gather3div4_df, 104458}, // __builtin_ia32_gather3div4df
+      {Intrinsic::x86_avx512_gather3div4_di, 104487}, // __builtin_ia32_gather3div4di
+      {Intrinsic::x86_avx512_gather3div4_sf, 104516}, // __builtin_ia32_gather3div4sf
+      {Intrinsic::x86_avx512_gather3div4_si, 104545}, // __builtin_ia32_gather3div4si
+      {Intrinsic::x86_avx512_gather3div8_sf, 104574}, // __builtin_ia32_gather3div8sf
+      {Intrinsic::x86_avx512_gather3div8_si, 104603}, // __builtin_ia32_gather3div8si
+      {Intrinsic::x86_avx512_gather3siv2_df, 104632}, // __builtin_ia32_gather3siv2df
+      {Intrinsic::x86_avx512_gather3siv2_di, 104661}, // __builtin_ia32_gather3siv2di
+      {Intrinsic::x86_avx512_gather3siv4_df, 104690}, // __builtin_ia32_gather3siv4df
+      {Intrinsic::x86_avx512_gather3siv4_di, 104719}, // __builtin_ia32_gather3siv4di
+      {Intrinsic::x86_avx512_gather3siv4_sf, 104748}, // __builtin_ia32_gather3siv4sf
+      {Intrinsic::x86_avx512_gather3siv4_si, 104777}, // __builtin_ia32_gather3siv4si
+      {Intrinsic::x86_avx512_gather3siv8_sf, 104806}, // __builtin_ia32_gather3siv8sf
+      {Intrinsic::x86_avx512_gather3siv8_si, 104835}, // __builtin_ia32_gather3siv8si
+      {Intrinsic::x86_avx2_gather_d_d, 101237}, // __builtin_ia32_gatherd_d
+      {Intrinsic::x86_avx2_gather_d_d_256, 101262}, // __builtin_ia32_gatherd_d256
+      {Intrinsic::x86_avx2_gather_d_pd, 101290}, // __builtin_ia32_gatherd_pd
+      {Intrinsic::x86_avx2_gather_d_pd_256, 101316}, // __builtin_ia32_gatherd_pd256
+      {Intrinsic::x86_avx2_gather_d_ps, 101345}, // __builtin_ia32_gatherd_ps
+      {Intrinsic::x86_avx2_gather_d_ps_256, 101371}, // __builtin_ia32_gatherd_ps256
+      {Intrinsic::x86_avx2_gather_d_q, 101400}, // __builtin_ia32_gatherd_q
+      {Intrinsic::x86_avx2_gather_d_q_256, 101425}, // __builtin_ia32_gatherd_q256
+      {Intrinsic::x86_avx512_gather_qps_512, 104371}, // __builtin_ia32_gatherdiv16sf
+      {Intrinsic::x86_avx512_gather_qpi_512, 104314}, // __builtin_ia32_gatherdiv16si
+      {Intrinsic::x86_avx512_gather_qpd_512, 104286}, // __builtin_ia32_gatherdiv8df
+      {Intrinsic::x86_avx512_gather_qpq_512, 104343}, // __builtin_ia32_gatherdiv8di
+      {Intrinsic::x86_avx512_gatherpf_dpd_512, 104864}, // __builtin_ia32_gatherpfdpd
+      {Intrinsic::x86_avx512_gatherpf_dps_512, 104891}, // __builtin_ia32_gatherpfdps
+      {Intrinsic::x86_avx512_gatherpf_qpd_512, 104918}, // __builtin_ia32_gatherpfqpd
+      {Intrinsic::x86_avx512_gatherpf_qps_512, 104945}, // __builtin_ia32_gatherpfqps
+      {Intrinsic::x86_avx2_gather_q_d, 101453}, // __builtin_ia32_gatherq_d
+      {Intrinsic::x86_avx2_gather_q_d_256, 101478}, // __builtin_ia32_gatherq_d256
+      {Intrinsic::x86_avx2_gather_q_pd, 101506}, // __builtin_ia32_gatherq_pd
+      {Intrinsic::x86_avx2_gather_q_pd_256, 101532}, // __builtin_ia32_gatherq_pd256
+      {Intrinsic::x86_avx2_gather_q_ps, 101561}, // __builtin_ia32_gatherq_ps
+      {Intrinsic::x86_avx2_gather_q_ps_256, 101587}, // __builtin_ia32_gatherq_ps256
+      {Intrinsic::x86_avx2_gather_q_q, 101616}, // __builtin_ia32_gatherq_q
+      {Intrinsic::x86_avx2_gather_q_q_256, 101641}, // __builtin_ia32_gatherq_q256
+      {Intrinsic::x86_avx512_gather_dps_512, 104257}, // __builtin_ia32_gathersiv16sf
+      {Intrinsic::x86_avx512_gather_dpi_512, 104200}, // __builtin_ia32_gathersiv16si
+      {Intrinsic::x86_avx512_gather_dpd_512, 104172}, // __builtin_ia32_gathersiv8df
+      {Intrinsic::x86_avx512_gather_dpq_512, 104229}, // __builtin_ia32_gathersiv8di
+      {Intrinsic::x86_avx512_mask_getexp_pd_128, 108829}, // __builtin_ia32_getexppd128_mask
+      {Intrinsic::x86_avx512_mask_getexp_pd_256, 108861}, // __builtin_ia32_getexppd256_mask
+      {Intrinsic::x86_avx512_mask_getexp_pd_512, 108893}, // __builtin_ia32_getexppd512_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_128, 108925}, // __builtin_ia32_getexpps128_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_256, 108957}, // __builtin_ia32_getexpps256_mask
+      {Intrinsic::x86_avx512_mask_getexp_ps_512, 108989}, // __builtin_ia32_getexpps512_mask
+      {Intrinsic::x86_avx512_mask_getexp_sd, 109021}, // __builtin_ia32_getexpsd128_round_mask
+      {Intrinsic::x86_avx512_mask_getexp_ss, 109059}, // __builtin_ia32_getexpss128_round_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_128, 109097}, // __builtin_ia32_getmantpd128_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_256, 109130}, // __builtin_ia32_getmantpd256_mask
+      {Intrinsic::x86_avx512_mask_getmant_pd_512, 109163}, // __builtin_ia32_getmantpd512_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_128, 109196}, // __builtin_ia32_getmantps128_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_256, 109229}, // __builtin_ia32_getmantps256_mask
+      {Intrinsic::x86_avx512_mask_getmant_ps_512, 109262}, // __builtin_ia32_getmantps512_mask
+      {Intrinsic::x86_avx512_mask_getmant_sd, 109295}, // __builtin_ia32_getmantsd_round_mask
+      {Intrinsic::x86_avx512_mask_getmant_ss, 109331}, // __builtin_ia32_getmantss_round_mask
+      {Intrinsic::x86_sse3_hadd_pd, 127543}, // __builtin_ia32_haddpd
+      {Intrinsic::x86_avx_hadd_pd_256, 100078}, // __builtin_ia32_haddpd256
+      {Intrinsic::x86_sse3_hadd_ps, 127565}, // __builtin_ia32_haddps
+      {Intrinsic::x86_avx_hadd_ps_256, 100103}, // __builtin_ia32_haddps256
+      {Intrinsic::x86_sse3_hsub_pd, 127587}, // __builtin_ia32_hsubpd
+      {Intrinsic::x86_avx_hsub_pd_256, 100128}, // __builtin_ia32_hsubpd256
+      {Intrinsic::x86_sse3_hsub_ps, 127609}, // __builtin_ia32_hsubps
+      {Intrinsic::x86_avx_hsub_ps_256, 100153}, // __builtin_ia32_hsubps256
+      {Intrinsic::x86_incsspd, 122613}, // __builtin_ia32_incsspd
+      {Intrinsic::x86_incsspq, 122636}, // __builtin_ia32_incsspq
+      {Intrinsic::x86_sse41_insertps, 127784}, // __builtin_ia32_insertps128
+      {Intrinsic::x86_sse4a_insertq, 128626}, // __builtin_ia32_insertq
+      {Intrinsic::x86_sse4a_insertqi, 128649}, // __builtin_ia32_insertqi
+      {Intrinsic::x86_invpcid, 122659}, // __builtin_ia32_invpcid
+      {Intrinsic::x86_sse3_ldu_dq, 127631}, // __builtin_ia32_lddqu
+      {Intrinsic::x86_avx_ldu_dq_256, 100178}, // __builtin_ia32_lddqu256
+      {Intrinsic::x86_sse2_lfence, 126339}, // __builtin_ia32_lfence
+      {Intrinsic::x86_llwpcb, 122682}, // __builtin_ia32_llwpcb
+      {Intrinsic::x86_lwpins32, 122704}, // __builtin_ia32_lwpins32
+      {Intrinsic::x86_lwpins64, 122728}, // __builtin_ia32_lwpins64
+      {Intrinsic::x86_lwpval32, 122752}, // __builtin_ia32_lwpval32
+      {Intrinsic::x86_lwpval64, 122776}, // __builtin_ia32_lwpval64
+      {Intrinsic::x86_avx2_maskload_d, 101669}, // __builtin_ia32_maskloadd
+      {Intrinsic::x86_avx2_maskload_d_256, 101694}, // __builtin_ia32_maskloadd256
+      {Intrinsic::x86_avx_maskload_pd, 100202}, // __builtin_ia32_maskloadpd
+      {Intrinsic::x86_avx_maskload_pd_256, 100228}, // __builtin_ia32_maskloadpd256
+      {Intrinsic::x86_avx_maskload_ps, 100257}, // __builtin_ia32_maskloadps
+      {Intrinsic::x86_avx_maskload_ps_256, 100283}, // __builtin_ia32_maskloadps256
+      {Intrinsic::x86_avx2_maskload_q, 101722}, // __builtin_ia32_maskloadq
+      {Intrinsic::x86_avx2_maskload_q_256, 101747}, // __builtin_ia32_maskloadq256
+      {Intrinsic::x86_sse2_maskmov_dqu, 126361}, // __builtin_ia32_maskmovdqu
+      {Intrinsic::x86_mmx_maskmovq, 122841}, // __builtin_ia32_maskmovq
+      {Intrinsic::x86_avx2_maskstore_d, 101775}, // __builtin_ia32_maskstored
+      {Intrinsic::x86_avx2_maskstore_d_256, 101801}, // __builtin_ia32_maskstored256
+      {Intrinsic::x86_avx_maskstore_pd, 100312}, // __builtin_ia32_maskstorepd
+      {Intrinsic::x86_avx_maskstore_pd_256, 100339}, // __builtin_ia32_maskstorepd256
+      {Intrinsic::x86_avx_maskstore_ps, 100369}, // __builtin_ia32_maskstoreps
+      {Intrinsic::x86_avx_maskstore_ps_256, 100396}, // __builtin_ia32_maskstoreps256
+      {Intrinsic::x86_avx2_maskstore_q, 101830}, // __builtin_ia32_maskstoreq
+      {Intrinsic::x86_avx2_maskstore_q_256, 101856}, // __builtin_ia32_maskstoreq256
+      {Intrinsic::x86_sse2_max_pd, 126387}, // __builtin_ia32_maxpd
+      {Intrinsic::x86_avx_max_pd_256, 100426}, // __builtin_ia32_maxpd256
+      {Intrinsic::x86_avx512_max_pd_512, 116073}, // __builtin_ia32_maxpd512
+      {Intrinsic::x86_sse_max_ps, 125523}, // __builtin_ia32_maxps
+      {Intrinsic::x86_avx_max_ps_256, 100450}, // __builtin_ia32_maxps256
+      {Intrinsic::x86_avx512_max_ps_512, 116097}, // __builtin_ia32_maxps512
+      {Intrinsic::x86_sse2_max_sd, 126408}, // __builtin_ia32_maxsd
+      {Intrinsic::x86_avx512_mask_max_sd_round, 109367}, // __builtin_ia32_maxsd_round_mask
+      {Intrinsic::x86_sse_max_ss, 125544}, // __builtin_ia32_maxss
+      {Intrinsic::x86_avx512_mask_max_ss_round, 109399}, // __builtin_ia32_maxss_round_mask
+      {Intrinsic::x86_sse2_mfence, 126429}, // __builtin_ia32_mfence
+      {Intrinsic::x86_sse2_min_pd, 126451}, // __builtin_ia32_minpd
+      {Intrinsic::x86_avx_min_pd_256, 100474}, // __builtin_ia32_minpd256
+      {Intrinsic::x86_avx512_min_pd_512, 116121}, // __builtin_ia32_minpd512
+      {Intrinsic::x86_sse_min_ps, 125565}, // __builtin_ia32_minps
+      {Intrinsic::x86_avx_min_ps_256, 100498}, // __builtin_ia32_minps256
+      {Intrinsic::x86_avx512_min_ps_512, 116145}, // __builtin_ia32_minps512
+      {Intrinsic::x86_sse2_min_sd, 126472}, // __builtin_ia32_minsd
+      {Intrinsic::x86_avx512_mask_min_sd_round, 109431}, // __builtin_ia32_minsd_round_mask
+      {Intrinsic::x86_sse_min_ss, 125586}, // __builtin_ia32_minss
+      {Intrinsic::x86_avx512_mask_min_ss_round, 109463}, // __builtin_ia32_minss_round_mask
+      {Intrinsic::x86_sse3_monitor, 127652}, // __builtin_ia32_monitor
+      {Intrinsic::x86_monitorx, 124387}, // __builtin_ia32_monitorx
+      {Intrinsic::x86_movdir64b, 124411}, // __builtin_ia32_movdir64b
+      {Intrinsic::x86_sse2_movmsk_pd, 126493}, // __builtin_ia32_movmskpd
+      {Intrinsic::x86_avx_movmsk_pd_256, 100522}, // __builtin_ia32_movmskpd256
+      {Intrinsic::x86_sse_movmsk_ps, 125607}, // __builtin_ia32_movmskps
+      {Intrinsic::x86_avx_movmsk_ps_256, 100549}, // __builtin_ia32_movmskps256
+      {Intrinsic::x86_mmx_movnt_dq, 122865}, // __builtin_ia32_movntq
+      {Intrinsic::x86_sse41_mpsadbw, 127811}, // __builtin_ia32_mpsadbw128
+      {Intrinsic::x86_avx2_mpsadbw, 101885}, // __builtin_ia32_mpsadbw256
+      {Intrinsic::x86_avx512_mul_pd_512, 116169}, // __builtin_ia32_mulpd512
+      {Intrinsic::x86_avx512_mul_ps_512, 116193}, // __builtin_ia32_mulps512
+      {Intrinsic::x86_avx512_mask_mul_sd_round, 109495}, // __builtin_ia32_mulsd_round_mask
+      {Intrinsic::x86_avx512_mask_mul_ss_round, 109527}, // __builtin_ia32_mulss_round_mask
+      {Intrinsic::x86_sse3_mwait, 127675}, // __builtin_ia32_mwait
+      {Intrinsic::x86_mwaitx, 124436}, // __builtin_ia32_mwaitx
+      {Intrinsic::x86_ssse3_pabs_b, 128673}, // __builtin_ia32_pabsb
+      {Intrinsic::x86_ssse3_pabs_d, 128694}, // __builtin_ia32_pabsd
+      {Intrinsic::x86_ssse3_pabs_w, 128715}, // __builtin_ia32_pabsw
+      {Intrinsic::x86_mmx_packssdw, 122887}, // __builtin_ia32_packssdw
+      {Intrinsic::x86_sse2_packssdw_128, 126517}, // __builtin_ia32_packssdw128
+      {Intrinsic::x86_avx2_packssdw, 101911}, // __builtin_ia32_packssdw256
+      {Intrinsic::x86_avx512_packssdw_512, 116217}, // __builtin_ia32_packssdw512
+      {Intrinsic::x86_mmx_packsswb, 122911}, // __builtin_ia32_packsswb
+      {Intrinsic::x86_sse2_packsswb_128, 126544}, // __builtin_ia32_packsswb128
+      {Intrinsic::x86_avx2_packsswb, 101938}, // __builtin_ia32_packsswb256
+      {Intrinsic::x86_avx512_packsswb_512, 116244}, // __builtin_ia32_packsswb512
+      {Intrinsic::x86_sse41_packusdw, 127837}, // __builtin_ia32_packusdw128
+      {Intrinsic::x86_avx2_packusdw, 101965}, // __builtin_ia32_packusdw256
+      {Intrinsic::x86_avx512_packusdw_512, 116271}, // __builtin_ia32_packusdw512
+      {Intrinsic::x86_mmx_packuswb, 122935}, // __builtin_ia32_packuswb
+      {Intrinsic::x86_sse2_packuswb_128, 126571}, // __builtin_ia32_packuswb128
+      {Intrinsic::x86_avx2_packuswb, 101992}, // __builtin_ia32_packuswb256
+      {Intrinsic::x86_avx512_packuswb_512, 116298}, // __builtin_ia32_packuswb512
+      {Intrinsic::x86_mmx_padd_b, 122959}, // __builtin_ia32_paddb
+      {Intrinsic::x86_mmx_padd_d, 122980}, // __builtin_ia32_paddd
+      {Intrinsic::x86_mmx_padd_q, 123001}, // __builtin_ia32_paddq
+      {Intrinsic::x86_mmx_padds_b, 123043}, // __builtin_ia32_paddsb
+      {Intrinsic::x86_sse2_padds_b, 126598}, // __builtin_ia32_paddsb128
+      {Intrinsic::x86_avx2_padds_b, 102019}, // __builtin_ia32_paddsb256
+      {Intrinsic::x86_avx512_mask_padds_b_512, 109559}, // __builtin_ia32_paddsb512_mask
+      {Intrinsic::x86_mmx_padds_w, 123065}, // __builtin_ia32_paddsw
+      {Intrinsic::x86_sse2_padds_w, 126623}, // __builtin_ia32_paddsw128
+      {Intrinsic::x86_avx2_padds_w, 102044}, // __builtin_ia32_paddsw256
+      {Intrinsic::x86_avx512_mask_padds_w_512, 109589}, // __builtin_ia32_paddsw512_mask
+      {Intrinsic::x86_mmx_paddus_b, 123087}, // __builtin_ia32_paddusb
+      {Intrinsic::x86_sse2_paddus_b, 126648}, // __builtin_ia32_paddusb128
+      {Intrinsic::x86_avx2_paddus_b, 102069}, // __builtin_ia32_paddusb256
+      {Intrinsic::x86_avx512_mask_paddus_b_512, 109619}, // __builtin_ia32_paddusb512_mask
+      {Intrinsic::x86_mmx_paddus_w, 123110}, // __builtin_ia32_paddusw
+      {Intrinsic::x86_sse2_paddus_w, 126674}, // __builtin_ia32_paddusw128
+      {Intrinsic::x86_avx2_paddus_w, 102095}, // __builtin_ia32_paddusw256
+      {Intrinsic::x86_avx512_mask_paddus_w_512, 109650}, // __builtin_ia32_paddusw512_mask
+      {Intrinsic::x86_mmx_padd_w, 123022}, // __builtin_ia32_paddw
+      {Intrinsic::x86_mmx_palignr_b, 123133}, // __builtin_ia32_palignr
+      {Intrinsic::x86_mmx_pand, 123156}, // __builtin_ia32_pand
+      {Intrinsic::x86_mmx_pandn, 123176}, // __builtin_ia32_pandn
+      {Intrinsic::x86_sse2_pause, 126700}, // __builtin_ia32_pause
+      {Intrinsic::x86_mmx_pavg_b, 123197}, // __builtin_ia32_pavgb
+      {Intrinsic::x86_3dnow_pavgusb, 98805}, // __builtin_ia32_pavgusb
+      {Intrinsic::x86_mmx_pavg_w, 123218}, // __builtin_ia32_pavgw
+      {Intrinsic::x86_sse41_pblendvb, 127864}, // __builtin_ia32_pblendvb128
+      {Intrinsic::x86_avx2_pblendvb, 102121}, // __builtin_ia32_pblendvb256
+      {Intrinsic::x86_pclmulqdq, 124458}, // __builtin_ia32_pclmulqdq128
+      {Intrinsic::x86_pclmulqdq_256, 124486}, // __builtin_ia32_pclmulqdq256
+      {Intrinsic::x86_pclmulqdq_512, 124514}, // __builtin_ia32_pclmulqdq512
+      {Intrinsic::x86_mmx_pcmpeq_b, 123239}, // __builtin_ia32_pcmpeqb
+      {Intrinsic::x86_mmx_pcmpeq_d, 123262}, // __builtin_ia32_pcmpeqd
+      {Intrinsic::x86_mmx_pcmpeq_w, 123285}, // __builtin_ia32_pcmpeqw
+      {Intrinsic::x86_sse42_pcmpestri128, 128181}, // __builtin_ia32_pcmpestri128
+      {Intrinsic::x86_sse42_pcmpestria128, 128209}, // __builtin_ia32_pcmpestria128
+      {Intrinsic::x86_sse42_pcmpestric128, 128238}, // __builtin_ia32_pcmpestric128
+      {Intrinsic::x86_sse42_pcmpestrio128, 128267}, // __builtin_ia32_pcmpestrio128
+      {Intrinsic::x86_sse42_pcmpestris128, 128296}, // __builtin_ia32_pcmpestris128
+      {Intrinsic::x86_sse42_pcmpestriz128, 128325}, // __builtin_ia32_pcmpestriz128
+      {Intrinsic::x86_sse42_pcmpestrm128, 128354}, // __builtin_ia32_pcmpestrm128
+      {Intrinsic::x86_mmx_pcmpgt_b, 123308}, // __builtin_ia32_pcmpgtb
+      {Intrinsic::x86_mmx_pcmpgt_d, 123331}, // __builtin_ia32_pcmpgtd
+      {Intrinsic::x86_mmx_pcmpgt_w, 123354}, // __builtin_ia32_pcmpgtw
+      {Intrinsic::x86_sse42_pcmpistri128, 128382}, // __builtin_ia32_pcmpistri128
+      {Intrinsic::x86_sse42_pcmpistria128, 128410}, // __builtin_ia32_pcmpistria128
+      {Intrinsic::x86_sse42_pcmpistric128, 128439}, // __builtin_ia32_pcmpistric128
+      {Intrinsic::x86_sse42_pcmpistrio128, 128468}, // __builtin_ia32_pcmpistrio128
+      {Intrinsic::x86_sse42_pcmpistris128, 128497}, // __builtin_ia32_pcmpistris128
+      {Intrinsic::x86_sse42_pcmpistriz128, 128526}, // __builtin_ia32_pcmpistriz128
+      {Intrinsic::x86_sse42_pcmpistrm128, 128555}, // __builtin_ia32_pcmpistrm128
+      {Intrinsic::x86_bmi_pdep_64, 122150}, // __builtin_ia32_pdep_di
+      {Intrinsic::x86_bmi_pdep_32, 122127}, // __builtin_ia32_pdep_si
+      {Intrinsic::x86_avx512_permvar_df_256, 116325}, // __builtin_ia32_permvardf256
+      {Intrinsic::x86_avx512_permvar_df_512, 116353}, // __builtin_ia32_permvardf512
+      {Intrinsic::x86_avx512_permvar_di_256, 116381}, // __builtin_ia32_permvardi256
+      {Intrinsic::x86_avx512_permvar_di_512, 116409}, // __builtin_ia32_permvardi512
+      {Intrinsic::x86_avx512_permvar_hi_128, 116437}, // __builtin_ia32_permvarhi128
+      {Intrinsic::x86_avx512_permvar_hi_256, 116465}, // __builtin_ia32_permvarhi256
+      {Intrinsic::x86_avx512_permvar_hi_512, 116493}, // __builtin_ia32_permvarhi512
+      {Intrinsic::x86_avx512_permvar_qi_128, 116521}, // __builtin_ia32_permvarqi128
+      {Intrinsic::x86_avx512_permvar_qi_256, 116549}, // __builtin_ia32_permvarqi256
+      {Intrinsic::x86_avx512_permvar_qi_512, 116577}, // __builtin_ia32_permvarqi512
+      {Intrinsic::x86_avx2_permps, 102176}, // __builtin_ia32_permvarsf256
+      {Intrinsic::x86_avx512_permvar_sf_512, 116605}, // __builtin_ia32_permvarsf512
+      {Intrinsic::x86_avx2_permd, 102148}, // __builtin_ia32_permvarsi256
+      {Intrinsic::x86_avx512_permvar_si_512, 116633}, // __builtin_ia32_permvarsi512
+      {Intrinsic::x86_bmi_pext_64, 122196}, // __builtin_ia32_pext_di
+      {Intrinsic::x86_bmi_pext_32, 122173}, // __builtin_ia32_pext_si
+      {Intrinsic::x86_3dnow_pf2id, 98828}, // __builtin_ia32_pf2id
+      {Intrinsic::x86_3dnowa_pf2iw, 99226}, // __builtin_ia32_pf2iw
+      {Intrinsic::x86_3dnow_pfacc, 98849}, // __builtin_ia32_pfacc
+      {Intrinsic::x86_3dnow_pfadd, 98870}, // __builtin_ia32_pfadd
+      {Intrinsic::x86_3dnow_pfcmpeq, 98891}, // __builtin_ia32_pfcmpeq
+      {Intrinsic::x86_3dnow_pfcmpge, 98914}, // __builtin_ia32_pfcmpge
+      {Intrinsic::x86_3dnow_pfcmpgt, 98937}, // __builtin_ia32_pfcmpgt
+      {Intrinsic::x86_3dnow_pfmax, 98960}, // __builtin_ia32_pfmax
+      {Intrinsic::x86_3dnow_pfmin, 98981}, // __builtin_ia32_pfmin
+      {Intrinsic::x86_3dnow_pfmul, 99002}, // __builtin_ia32_pfmul
+      {Intrinsic::x86_3dnowa_pfnacc, 99247}, // __builtin_ia32_pfnacc
+      {Intrinsic::x86_3dnowa_pfpnacc, 99269}, // __builtin_ia32_pfpnacc
+      {Intrinsic::x86_3dnow_pfrcp, 99023}, // __builtin_ia32_pfrcp
+      {Intrinsic::x86_3dnow_pfrcpit1, 99044}, // __builtin_ia32_pfrcpit1
+      {Intrinsic::x86_3dnow_pfrcpit2, 99068}, // __builtin_ia32_pfrcpit2
+      {Intrinsic::x86_3dnow_pfrsqit1, 99092}, // __builtin_ia32_pfrsqit1
+      {Intrinsic::x86_3dnow_pfrsqrt, 99116}, // __builtin_ia32_pfrsqrt
+      {Intrinsic::x86_3dnow_pfsub, 99139}, // __builtin_ia32_pfsub
+      {Intrinsic::x86_3dnow_pfsubr, 99160}, // __builtin_ia32_pfsubr
+      {Intrinsic::x86_ssse3_phadd_d, 128736}, // __builtin_ia32_phaddd
+      {Intrinsic::x86_ssse3_phadd_d_128, 128758}, // __builtin_ia32_phaddd128
+      {Intrinsic::x86_avx2_phadd_d, 102204}, // __builtin_ia32_phaddd256
+      {Intrinsic::x86_ssse3_phadd_sw, 128783}, // __builtin_ia32_phaddsw
+      {Intrinsic::x86_ssse3_phadd_sw_128, 128806}, // __builtin_ia32_phaddsw128
+      {Intrinsic::x86_avx2_phadd_sw, 102229}, // __builtin_ia32_phaddsw256
+      {Intrinsic::x86_ssse3_phadd_w, 128832}, // __builtin_ia32_phaddw
+      {Intrinsic::x86_ssse3_phadd_w_128, 128854}, // __builtin_ia32_phaddw128
+      {Intrinsic::x86_avx2_phadd_w, 102255}, // __builtin_ia32_phaddw256
+      {Intrinsic::x86_sse41_phminposuw, 127891}, // __builtin_ia32_phminposuw128
+      {Intrinsic::x86_ssse3_phsub_d, 128879}, // __builtin_ia32_phsubd
+      {Intrinsic::x86_ssse3_phsub_d_128, 128901}, // __builtin_ia32_phsubd128
+      {Intrinsic::x86_avx2_phsub_d, 102280}, // __builtin_ia32_phsubd256
+      {Intrinsic::x86_ssse3_phsub_sw, 128926}, // __builtin_ia32_phsubsw
+      {Intrinsic::x86_ssse3_phsub_sw_128, 128949}, // __builtin_ia32_phsubsw128
+      {Intrinsic::x86_avx2_phsub_sw, 102305}, // __builtin_ia32_phsubsw256
+      {Intrinsic::x86_ssse3_phsub_w, 128975}, // __builtin_ia32_phsubw
+      {Intrinsic::x86_ssse3_phsub_w_128, 128997}, // __builtin_ia32_phsubw128
+      {Intrinsic::x86_avx2_phsub_w, 102331}, // __builtin_ia32_phsubw256
+      {Intrinsic::x86_3dnow_pi2fd, 99182}, // __builtin_ia32_pi2fd
+      {Intrinsic::x86_3dnowa_pi2fw, 99292}, // __builtin_ia32_pi2fw
+      {Intrinsic::x86_ssse3_pmadd_ub_sw, 129022}, // __builtin_ia32_pmaddubsw
+      {Intrinsic::x86_ssse3_pmadd_ub_sw_128, 129047}, // __builtin_ia32_pmaddubsw128
+      {Intrinsic::x86_avx2_pmadd_ub_sw, 102356}, // __builtin_ia32_pmaddubsw256
+      {Intrinsic::x86_avx512_pmaddubs_w_512, 116661}, // __builtin_ia32_pmaddubsw512
+      {Intrinsic::x86_mmx_pmadd_wd, 123433}, // __builtin_ia32_pmaddwd
+      {Intrinsic::x86_sse2_pmadd_wd, 126721}, // __builtin_ia32_pmaddwd128
+      {Intrinsic::x86_avx2_pmadd_wd, 102384}, // __builtin_ia32_pmaddwd256
+      {Intrinsic::x86_avx512_pmaddw_d_512, 116689}, // __builtin_ia32_pmaddwd512
+      {Intrinsic::x86_mmx_pmaxs_w, 123456}, // __builtin_ia32_pmaxsw
+      {Intrinsic::x86_mmx_pmaxu_b, 123478}, // __builtin_ia32_pmaxub
+      {Intrinsic::x86_mmx_pmins_w, 123500}, // __builtin_ia32_pminsw
+      {Intrinsic::x86_mmx_pminu_b, 123522}, // __builtin_ia32_pminub
+      {Intrinsic::x86_avx512_mask_pmov_db_128, 109681}, // __builtin_ia32_pmovdb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_128, 109741}, // __builtin_ia32_pmovdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_256, 109711}, // __builtin_ia32_pmovdb256_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_256, 109774}, // __builtin_ia32_pmovdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_db_mem_512, 109807}, // __builtin_ia32_pmovdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_128, 109840}, // __builtin_ia32_pmovdw128_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_128, 109900}, // __builtin_ia32_pmovdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_256, 109870}, // __builtin_ia32_pmovdw256_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_256, 109933}, // __builtin_ia32_pmovdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_dw_mem_512, 109966}, // __builtin_ia32_pmovdw512mem_mask
+      {Intrinsic::x86_mmx_pmovmskb, 123544}, // __builtin_ia32_pmovmskb
+      {Intrinsic::x86_sse2_pmovmskb_128, 126747}, // __builtin_ia32_pmovmskb128
+      {Intrinsic::x86_avx2_pmovmskb, 102410}, // __builtin_ia32_pmovmskb256
+      {Intrinsic::x86_avx512_mask_pmov_qb_128, 109999}, // __builtin_ia32_pmovqb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_128, 110089}, // __builtin_ia32_pmovqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_256, 110029}, // __builtin_ia32_pmovqb256_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_256, 110122}, // __builtin_ia32_pmovqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_512, 110059}, // __builtin_ia32_pmovqb512_mask
+      {Intrinsic::x86_avx512_mask_pmov_qb_mem_512, 110155}, // __builtin_ia32_pmovqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_128, 110188}, // __builtin_ia32_pmovqd128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_128, 110218}, // __builtin_ia32_pmovqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_256, 110251}, // __builtin_ia32_pmovqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qd_mem_512, 110284}, // __builtin_ia32_pmovqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_128, 110317}, // __builtin_ia32_pmovqw128_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_128, 110377}, // __builtin_ia32_pmovqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_256, 110347}, // __builtin_ia32_pmovqw256_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_256, 110410}, // __builtin_ia32_pmovqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_qw_mem_512, 110443}, // __builtin_ia32_pmovqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_128, 110605}, // __builtin_ia32_pmovsdb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_128, 110698}, // __builtin_ia32_pmovsdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_256, 110636}, // __builtin_ia32_pmovsdb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_256, 110732}, // __builtin_ia32_pmovsdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_512, 110667}, // __builtin_ia32_pmovsdb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_db_mem_512, 110766}, // __builtin_ia32_pmovsdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_128, 110800}, // __builtin_ia32_pmovsdw128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_128, 110893}, // __builtin_ia32_pmovsdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_256, 110831}, // __builtin_ia32_pmovsdw256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_256, 110927}, // __builtin_ia32_pmovsdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_512, 110862}, // __builtin_ia32_pmovsdw512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_512, 110961}, // __builtin_ia32_pmovsdw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_128, 110995}, // __builtin_ia32_pmovsqb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_128, 111088}, // __builtin_ia32_pmovsqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_256, 111026}, // __builtin_ia32_pmovsqb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_256, 111122}, // __builtin_ia32_pmovsqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_512, 111057}, // __builtin_ia32_pmovsqb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_512, 111156}, // __builtin_ia32_pmovsqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_128, 111190}, // __builtin_ia32_pmovsqd128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_128, 111283}, // __builtin_ia32_pmovsqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_256, 111221}, // __builtin_ia32_pmovsqd256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_256, 111317}, // __builtin_ia32_pmovsqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_512, 111252}, // __builtin_ia32_pmovsqd512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_512, 111351}, // __builtin_ia32_pmovsqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_128, 111385}, // __builtin_ia32_pmovsqw128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_128, 111478}, // __builtin_ia32_pmovsqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_256, 111416}, // __builtin_ia32_pmovsqw256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_256, 111512}, // __builtin_ia32_pmovsqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_512, 111447}, // __builtin_ia32_pmovsqw512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_512, 111546}, // __builtin_ia32_pmovsqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_128, 111580}, // __builtin_ia32_pmovswb128_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_128, 111673}, // __builtin_ia32_pmovswb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_256, 111611}, // __builtin_ia32_pmovswb256_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_256, 111707}, // __builtin_ia32_pmovswb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_512, 111642}, // __builtin_ia32_pmovswb512_mask
+      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_512, 111741}, // __builtin_ia32_pmovswb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_128, 111775}, // __builtin_ia32_pmovusdb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_128, 111871}, // __builtin_ia32_pmovusdb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_256, 111807}, // __builtin_ia32_pmovusdb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_256, 111906}, // __builtin_ia32_pmovusdb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_512, 111839}, // __builtin_ia32_pmovusdb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_db_mem_512, 111941}, // __builtin_ia32_pmovusdb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_128, 111976}, // __builtin_ia32_pmovusdw128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_128, 112072}, // __builtin_ia32_pmovusdw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_256, 112008}, // __builtin_ia32_pmovusdw256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_256, 112107}, // __builtin_ia32_pmovusdw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_512, 112040}, // __builtin_ia32_pmovusdw512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_512, 112142}, // __builtin_ia32_pmovusdw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_128, 112177}, // __builtin_ia32_pmovusqb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_128, 112273}, // __builtin_ia32_pmovusqb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_256, 112209}, // __builtin_ia32_pmovusqb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_256, 112308}, // __builtin_ia32_pmovusqb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_512, 112241}, // __builtin_ia32_pmovusqb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_512, 112343}, // __builtin_ia32_pmovusqb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_128, 112378}, // __builtin_ia32_pmovusqd128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_128, 112474}, // __builtin_ia32_pmovusqd128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_256, 112410}, // __builtin_ia32_pmovusqd256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_256, 112509}, // __builtin_ia32_pmovusqd256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_512, 112442}, // __builtin_ia32_pmovusqd512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_512, 112544}, // __builtin_ia32_pmovusqd512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_128, 112579}, // __builtin_ia32_pmovusqw128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_128, 112675}, // __builtin_ia32_pmovusqw128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_256, 112611}, // __builtin_ia32_pmovusqw256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_256, 112710}, // __builtin_ia32_pmovusqw256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_512, 112643}, // __builtin_ia32_pmovusqw512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_512, 112745}, // __builtin_ia32_pmovusqw512mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_128, 112780}, // __builtin_ia32_pmovuswb128_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_128, 112876}, // __builtin_ia32_pmovuswb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_256, 112812}, // __builtin_ia32_pmovuswb256_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_256, 112911}, // __builtin_ia32_pmovuswb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_512, 112844}, // __builtin_ia32_pmovuswb512_mask
+      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_512, 112946}, // __builtin_ia32_pmovuswb512mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_128, 110476}, // __builtin_ia32_pmovwb128_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_128, 110506}, // __builtin_ia32_pmovwb128mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_256, 110539}, // __builtin_ia32_pmovwb256mem_mask
+      {Intrinsic::x86_avx512_mask_pmov_wb_mem_512, 110572}, // __builtin_ia32_pmovwb512mem_mask
+      {Intrinsic::x86_ssse3_pmul_hr_sw, 129075}, // __builtin_ia32_pmulhrsw
+      {Intrinsic::x86_ssse3_pmul_hr_sw_128, 129099}, // __builtin_ia32_pmulhrsw128
+      {Intrinsic::x86_avx2_pmul_hr_sw, 102437}, // __builtin_ia32_pmulhrsw256
+      {Intrinsic::x86_avx512_pmul_hr_sw_512, 116715}, // __builtin_ia32_pmulhrsw512
+      {Intrinsic::x86_3dnow_pmulhrw, 99203}, // __builtin_ia32_pmulhrw
+      {Intrinsic::x86_mmx_pmulhu_w, 123590}, // __builtin_ia32_pmulhuw
+      {Intrinsic::x86_sse2_pmulhu_w, 126799}, // __builtin_ia32_pmulhuw128
+      {Intrinsic::x86_avx2_pmulhu_w, 102489}, // __builtin_ia32_pmulhuw256
+      {Intrinsic::x86_avx512_pmulhu_w_512, 116767}, // __builtin_ia32_pmulhuw512
+      {Intrinsic::x86_mmx_pmulh_w, 123568}, // __builtin_ia32_pmulhw
+      {Intrinsic::x86_sse2_pmulh_w, 126774}, // __builtin_ia32_pmulhw128
+      {Intrinsic::x86_avx2_pmulh_w, 102464}, // __builtin_ia32_pmulhw256
+      {Intrinsic::x86_avx512_pmulh_w_512, 116742}, // __builtin_ia32_pmulhw512
+      {Intrinsic::x86_mmx_pmull_w, 123613}, // __builtin_ia32_pmullw
+      {Intrinsic::x86_mmx_pmulu_dq, 123635}, // __builtin_ia32_pmuludq
+      {Intrinsic::x86_mmx_por, 123658}, // __builtin_ia32_por
+      {Intrinsic::x86_avx512_prol_d_128, 116793}, // __builtin_ia32_prold128
+      {Intrinsic::x86_avx512_prol_d_256, 116817}, // __builtin_ia32_prold256
+      {Intrinsic::x86_avx512_prol_d_512, 116841}, // __builtin_ia32_prold512
+      {Intrinsic::x86_avx512_prol_q_128, 116865}, // __builtin_ia32_prolq128
+      {Intrinsic::x86_avx512_prol_q_256, 116889}, // __builtin_ia32_prolq256
+      {Intrinsic::x86_avx512_prol_q_512, 116913}, // __builtin_ia32_prolq512
+      {Intrinsic::x86_avx512_prolv_d_128, 116937}, // __builtin_ia32_prolvd128
+      {Intrinsic::x86_avx512_prolv_d_256, 116962}, // __builtin_ia32_prolvd256
+      {Intrinsic::x86_avx512_prolv_d_512, 116987}, // __builtin_ia32_prolvd512
+      {Intrinsic::x86_avx512_prolv_q_128, 117012}, // __builtin_ia32_prolvq128
+      {Intrinsic::x86_avx512_prolv_q_256, 117037}, // __builtin_ia32_prolvq256
+      {Intrinsic::x86_avx512_prolv_q_512, 117062}, // __builtin_ia32_prolvq512
+      {Intrinsic::x86_avx512_pror_d_128, 117087}, // __builtin_ia32_prord128
+      {Intrinsic::x86_avx512_pror_d_256, 117111}, // __builtin_ia32_prord256
+      {Intrinsic::x86_avx512_pror_d_512, 117135}, // __builtin_ia32_prord512
+      {Intrinsic::x86_avx512_pror_q_128, 117159}, // __builtin_ia32_prorq128
+      {Intrinsic::x86_avx512_pror_q_256, 117183}, // __builtin_ia32_prorq256
+      {Intrinsic::x86_avx512_pror_q_512, 117207}, // __builtin_ia32_prorq512
+      {Intrinsic::x86_avx512_prorv_d_128, 117231}, // __builtin_ia32_prorvd128
+      {Intrinsic::x86_avx512_prorv_d_256, 117256}, // __builtin_ia32_prorvd256
+      {Intrinsic::x86_avx512_prorv_d_512, 117281}, // __builtin_ia32_prorvd512
+      {Intrinsic::x86_avx512_prorv_q_128, 117306}, // __builtin_ia32_prorvq128
+      {Intrinsic::x86_avx512_prorv_q_256, 117331}, // __builtin_ia32_prorvq256
+      {Intrinsic::x86_avx512_prorv_q_512, 117356}, // __builtin_ia32_prorvq512
+      {Intrinsic::x86_mmx_psad_bw, 123677}, // __builtin_ia32_psadbw
+      {Intrinsic::x86_sse2_psad_bw, 126825}, // __builtin_ia32_psadbw128
+      {Intrinsic::x86_avx2_psad_bw, 102515}, // __builtin_ia32_psadbw256
+      {Intrinsic::x86_avx512_psad_bw_512, 117381}, // __builtin_ia32_psadbw512
+      {Intrinsic::x86_ssse3_pshuf_b, 129126}, // __builtin_ia32_pshufb
+      {Intrinsic::x86_ssse3_pshuf_b_128, 129148}, // __builtin_ia32_pshufb128
+      {Intrinsic::x86_avx2_pshuf_b, 102540}, // __builtin_ia32_pshufb256
+      {Intrinsic::x86_avx512_pshuf_b_512, 117406}, // __builtin_ia32_pshufb512
+      {Intrinsic::x86_sse_pshuf_w, 125631}, // __builtin_ia32_pshufw
+      {Intrinsic::x86_ssse3_psign_b, 129173}, // __builtin_ia32_psignb
+      {Intrinsic::x86_ssse3_psign_b_128, 129195}, // __builtin_ia32_psignb128
+      {Intrinsic::x86_avx2_psign_b, 102565}, // __builtin_ia32_psignb256
+      {Intrinsic::x86_ssse3_psign_d, 129220}, // __builtin_ia32_psignd
+      {Intrinsic::x86_ssse3_psign_d_128, 129242}, // __builtin_ia32_psignd128
+      {Intrinsic::x86_avx2_psign_d, 102590}, // __builtin_ia32_psignd256
+      {Intrinsic::x86_ssse3_psign_w, 129267}, // __builtin_ia32_psignw
+      {Intrinsic::x86_ssse3_psign_w_128, 129289}, // __builtin_ia32_psignw128
+      {Intrinsic::x86_avx2_psign_w, 102615}, // __builtin_ia32_psignw256
+      {Intrinsic::x86_mmx_psll_d, 123699}, // __builtin_ia32_pslld
+      {Intrinsic::x86_sse2_psll_d, 126850}, // __builtin_ia32_pslld128
+      {Intrinsic::x86_avx2_psll_d, 102640}, // __builtin_ia32_pslld256
+      {Intrinsic::x86_avx512_psll_d_512, 117431}, // __builtin_ia32_pslld512
+      {Intrinsic::x86_mmx_pslli_d, 123762}, // __builtin_ia32_pslldi
+      {Intrinsic::x86_sse2_pslli_d, 126922}, // __builtin_ia32_pslldi128
+      {Intrinsic::x86_avx2_pslli_d, 102712}, // __builtin_ia32_pslldi256
+      {Intrinsic::x86_avx512_pslli_d_512, 117503}, // __builtin_ia32_pslldi512
+      {Intrinsic::x86_mmx_psll_q, 123720}, // __builtin_ia32_psllq
+      {Intrinsic::x86_sse2_psll_q, 126874}, // __builtin_ia32_psllq128
+      {Intrinsic::x86_avx2_psll_q, 102664}, // __builtin_ia32_psllq256
+      {Intrinsic::x86_avx512_psll_q_512, 117455}, // __builtin_ia32_psllq512
+      {Intrinsic::x86_mmx_pslli_q, 123784}, // __builtin_ia32_psllqi
+      {Intrinsic::x86_sse2_pslli_q, 126947}, // __builtin_ia32_psllqi128
+      {Intrinsic::x86_avx2_pslli_q, 102737}, // __builtin_ia32_psllqi256
+      {Intrinsic::x86_avx512_pslli_q_512, 117528}, // __builtin_ia32_psllqi512
+      {Intrinsic::x86_avx512_psllv_w_256, 117651}, // __builtin_ia32_psllv16hi
+      {Intrinsic::x86_avx512_psllv_d_512, 117578}, // __builtin_ia32_psllv16si
+      {Intrinsic::x86_avx2_psllv_q, 102835}, // __builtin_ia32_psllv2di
+      {Intrinsic::x86_avx512_psllv_w_512, 117676}, // __builtin_ia32_psllv32hi
+      {Intrinsic::x86_avx2_psllv_q_256, 102859}, // __builtin_ia32_psllv4di
+      {Intrinsic::x86_avx2_psllv_d, 102787}, // __builtin_ia32_psllv4si
+      {Intrinsic::x86_avx512_psllv_q_512, 117603}, // __builtin_ia32_psllv8di
+      {Intrinsic::x86_avx512_psllv_w_128, 117627}, // __builtin_ia32_psllv8hi
+      {Intrinsic::x86_avx2_psllv_d_256, 102811}, // __builtin_ia32_psllv8si
+      {Intrinsic::x86_mmx_psll_w, 123741}, // __builtin_ia32_psllw
+      {Intrinsic::x86_sse2_psll_w, 126898}, // __builtin_ia32_psllw128
+      {Intrinsic::x86_avx2_psll_w, 102688}, // __builtin_ia32_psllw256
+      {Intrinsic::x86_avx512_psll_w_512, 117479}, // __builtin_ia32_psllw512
+      {Intrinsic::x86_mmx_pslli_w, 123806}, // __builtin_ia32_psllwi
+      {Intrinsic::x86_sse2_pslli_w, 126972}, // __builtin_ia32_psllwi128
+      {Intrinsic::x86_avx2_pslli_w, 102762}, // __builtin_ia32_psllwi256
+      {Intrinsic::x86_avx512_pslli_w_512, 117553}, // __builtin_ia32_psllwi512
+      {Intrinsic::x86_mmx_psra_d, 123828}, // __builtin_ia32_psrad
+      {Intrinsic::x86_sse2_psra_d, 126997}, // __builtin_ia32_psrad128
+      {Intrinsic::x86_avx2_psra_d, 102883}, // __builtin_ia32_psrad256
+      {Intrinsic::x86_avx512_psra_d_512, 117701}, // __builtin_ia32_psrad512
+      {Intrinsic::x86_mmx_psrai_d, 123870}, // __builtin_ia32_psradi
+      {Intrinsic::x86_sse2_psrai_d, 127045}, // __builtin_ia32_psradi128
+      {Intrinsic::x86_avx2_psrai_d, 102931}, // __builtin_ia32_psradi256
+      {Intrinsic::x86_avx512_psrai_d_512, 117821}, // __builtin_ia32_psradi512
+      {Intrinsic::x86_avx512_psra_q_128, 117725}, // __builtin_ia32_psraq128
+      {Intrinsic::x86_avx512_psra_q_256, 117749}, // __builtin_ia32_psraq256
+      {Intrinsic::x86_avx512_psra_q_512, 117773}, // __builtin_ia32_psraq512
+      {Intrinsic::x86_avx512_psrai_q_128, 117846}, // __builtin_ia32_psraqi128
+      {Intrinsic::x86_avx512_psrai_q_256, 117871}, // __builtin_ia32_psraqi256
+      {Intrinsic::x86_avx512_psrai_q_512, 117896}, // __builtin_ia32_psraqi512
+      {Intrinsic::x86_avx512_psrav_w_256, 118069}, // __builtin_ia32_psrav16hi
+      {Intrinsic::x86_avx512_psrav_d_512, 117946}, // __builtin_ia32_psrav16si
+      {Intrinsic::x86_avx512_psrav_w_512, 118094}, // __builtin_ia32_psrav32hi
+      {Intrinsic::x86_avx2_psrav_d, 102981}, // __builtin_ia32_psrav4si
+      {Intrinsic::x86_avx512_psrav_q_512, 118021}, // __builtin_ia32_psrav8di
+      {Intrinsic::x86_avx512_psrav_w_128, 118045}, // __builtin_ia32_psrav8hi
+      {Intrinsic::x86_avx2_psrav_d_256, 103005}, // __builtin_ia32_psrav8si
+      {Intrinsic::x86_avx512_psrav_q_128, 117971}, // __builtin_ia32_psravq128
+      {Intrinsic::x86_avx512_psrav_q_256, 117996}, // __builtin_ia32_psravq256
+      {Intrinsic::x86_mmx_psra_w, 123849}, // __builtin_ia32_psraw
+      {Intrinsic::x86_sse2_psra_w, 127021}, // __builtin_ia32_psraw128
+      {Intrinsic::x86_avx2_psra_w, 102907}, // __builtin_ia32_psraw256
+      {Intrinsic::x86_avx512_psra_w_512, 117797}, // __builtin_ia32_psraw512
+      {Intrinsic::x86_mmx_psrai_w, 123892}, // __builtin_ia32_psrawi
+      {Intrinsic::x86_sse2_psrai_w, 127070}, // __builtin_ia32_psrawi128
+      {Intrinsic::x86_avx2_psrai_w, 102956}, // __builtin_ia32_psrawi256
+      {Intrinsic::x86_avx512_psrai_w_512, 117921}, // __builtin_ia32_psrawi512
+      {Intrinsic::x86_mmx_psrl_d, 123914}, // __builtin_ia32_psrld
+      {Intrinsic::x86_sse2_psrl_d, 127095}, // __builtin_ia32_psrld128
+      {Intrinsic::x86_avx2_psrl_d, 103029}, // __builtin_ia32_psrld256
+      {Intrinsic::x86_avx512_psrl_d_512, 118119}, // __builtin_ia32_psrld512
+      {Intrinsic::x86_mmx_psrli_d, 123977}, // __builtin_ia32_psrldi
+      {Intrinsic::x86_sse2_psrli_d, 127167}, // __builtin_ia32_psrldi128
+      {Intrinsic::x86_avx2_psrli_d, 103101}, // __builtin_ia32_psrldi256
+      {Intrinsic::x86_avx512_psrli_d_512, 118191}, // __builtin_ia32_psrldi512
+      {Intrinsic::x86_mmx_psrl_q, 123935}, // __builtin_ia32_psrlq
+      {Intrinsic::x86_sse2_psrl_q, 127119}, // __builtin_ia32_psrlq128
+      {Intrinsic::x86_avx2_psrl_q, 103053}, // __builtin_ia32_psrlq256
+      {Intrinsic::x86_avx512_psrl_q_512, 118143}, // __builtin_ia32_psrlq512
+      {Intrinsic::x86_mmx_psrli_q, 123999}, // __builtin_ia32_psrlqi
+      {Intrinsic::x86_sse2_psrli_q, 127192}, // __builtin_ia32_psrlqi128
+      {Intrinsic::x86_avx2_psrli_q, 103126}, // __builtin_ia32_psrlqi256
+      {Intrinsic::x86_avx512_psrli_q_512, 118216}, // __builtin_ia32_psrlqi512
+      {Intrinsic::x86_avx512_psrlv_w_256, 118339}, // __builtin_ia32_psrlv16hi
+      {Intrinsic::x86_avx512_psrlv_d_512, 118266}, // __builtin_ia32_psrlv16si
+      {Intrinsic::x86_avx2_psrlv_q, 103224}, // __builtin_ia32_psrlv2di
+      {Intrinsic::x86_avx512_psrlv_w_512, 118364}, // __builtin_ia32_psrlv32hi
+      {Intrinsic::x86_avx2_psrlv_q_256, 103248}, // __builtin_ia32_psrlv4di
+      {Intrinsic::x86_avx2_psrlv_d, 103176}, // __builtin_ia32_psrlv4si
+      {Intrinsic::x86_avx512_psrlv_q_512, 118291}, // __builtin_ia32_psrlv8di
+      {Intrinsic::x86_avx512_psrlv_w_128, 118315}, // __builtin_ia32_psrlv8hi
+      {Intrinsic::x86_avx2_psrlv_d_256, 103200}, // __builtin_ia32_psrlv8si
+      {Intrinsic::x86_mmx_psrl_w, 123956}, // __builtin_ia32_psrlw
+      {Intrinsic::x86_sse2_psrl_w, 127143}, // __builtin_ia32_psrlw128
+      {Intrinsic::x86_avx2_psrl_w, 103077}, // __builtin_ia32_psrlw256
+      {Intrinsic::x86_avx512_psrl_w_512, 118167}, // __builtin_ia32_psrlw512
+      {Intrinsic::x86_mmx_psrli_w, 124021}, // __builtin_ia32_psrlwi
+      {Intrinsic::x86_sse2_psrli_w, 127217}, // __builtin_ia32_psrlwi128
+      {Intrinsic::x86_avx2_psrli_w, 103151}, // __builtin_ia32_psrlwi256
+      {Intrinsic::x86_avx512_psrli_w_512, 118241}, // __builtin_ia32_psrlwi512
+      {Intrinsic::x86_mmx_psub_b, 124043}, // __builtin_ia32_psubb
+      {Intrinsic::x86_mmx_psub_d, 124064}, // __builtin_ia32_psubd
+      {Intrinsic::x86_mmx_psub_q, 124085}, // __builtin_ia32_psubq
+      {Intrinsic::x86_mmx_psubs_b, 124127}, // __builtin_ia32_psubsb
+      {Intrinsic::x86_sse2_psubs_b, 127242}, // __builtin_ia32_psubsb128
+      {Intrinsic::x86_avx2_psubs_b, 103272}, // __builtin_ia32_psubsb256
+      {Intrinsic::x86_avx512_mask_psubs_b_512, 113095}, // __builtin_ia32_psubsb512_mask
+      {Intrinsic::x86_mmx_psubs_w, 124149}, // __builtin_ia32_psubsw
+      {Intrinsic::x86_sse2_psubs_w, 127267}, // __builtin_ia32_psubsw128
+      {Intrinsic::x86_avx2_psubs_w, 103297}, // __builtin_ia32_psubsw256
+      {Intrinsic::x86_avx512_mask_psubs_w_512, 113125}, // __builtin_ia32_psubsw512_mask
+      {Intrinsic::x86_mmx_psubus_b, 124171}, // __builtin_ia32_psubusb
+      {Intrinsic::x86_sse2_psubus_b, 127292}, // __builtin_ia32_psubusb128
+      {Intrinsic::x86_avx2_psubus_b, 103322}, // __builtin_ia32_psubusb256
+      {Intrinsic::x86_avx512_mask_psubus_b_512, 113155}, // __builtin_ia32_psubusb512_mask
+      {Intrinsic::x86_mmx_psubus_w, 124194}, // __builtin_ia32_psubusw
+      {Intrinsic::x86_sse2_psubus_w, 127318}, // __builtin_ia32_psubusw128
+      {Intrinsic::x86_avx2_psubus_w, 103348}, // __builtin_ia32_psubusw256
+      {Intrinsic::x86_avx512_mask_psubus_w_512, 113186}, // __builtin_ia32_psubusw512_mask
+      {Intrinsic::x86_mmx_psub_w, 124106}, // __builtin_ia32_psubw
+      {Intrinsic::x86_avx512_pternlog_d_128, 118389}, // __builtin_ia32_pternlogd128
+      {Intrinsic::x86_avx512_pternlog_d_256, 118417}, // __builtin_ia32_pternlogd256
+      {Intrinsic::x86_avx512_pternlog_d_512, 118445}, // __builtin_ia32_pternlogd512
+      {Intrinsic::x86_avx512_pternlog_q_128, 118473}, // __builtin_ia32_pternlogq128
+      {Intrinsic::x86_avx512_pternlog_q_256, 118501}, // __builtin_ia32_pternlogq256
+      {Intrinsic::x86_avx512_pternlog_q_512, 118529}, // __builtin_ia32_pternlogq512
+      {Intrinsic::x86_sse41_ptestc, 127920}, // __builtin_ia32_ptestc128
+      {Intrinsic::x86_avx_ptestc_256, 100576}, // __builtin_ia32_ptestc256
+      {Intrinsic::x86_sse41_ptestnzc, 127945}, // __builtin_ia32_ptestnzc128
+      {Intrinsic::x86_avx_ptestnzc_256, 100601}, // __builtin_ia32_ptestnzc256
+      {Intrinsic::x86_sse41_ptestz, 127972}, // __builtin_ia32_ptestz128
+      {Intrinsic::x86_avx_ptestz_256, 100628}, // __builtin_ia32_ptestz256
+      {Intrinsic::x86_ptwrite32, 124542}, // __builtin_ia32_ptwrite32
+      {Intrinsic::x86_ptwrite64, 124567}, // __builtin_ia32_ptwrite64
+      {Intrinsic::x86_mmx_punpckhbw, 124217}, // __builtin_ia32_punpckhbw
+      {Intrinsic::x86_mmx_punpckhdq, 124242}, // __builtin_ia32_punpckhdq
+      {Intrinsic::x86_mmx_punpckhwd, 124267}, // __builtin_ia32_punpckhwd
+      {Intrinsic::x86_mmx_punpcklbw, 124292}, // __builtin_ia32_punpcklbw
+      {Intrinsic::x86_mmx_punpckldq, 124317}, // __builtin_ia32_punpckldq
+      {Intrinsic::x86_mmx_punpcklwd, 124342}, // __builtin_ia32_punpcklwd
+      {Intrinsic::x86_mmx_pxor, 124367}, // __builtin_ia32_pxor
+      {Intrinsic::x86_avx512_mask_range_pd_128, 113217}, // __builtin_ia32_rangepd128_mask
+      {Intrinsic::x86_avx512_mask_range_pd_256, 113248}, // __builtin_ia32_rangepd256_mask
+      {Intrinsic::x86_avx512_mask_range_pd_512, 113279}, // __builtin_ia32_rangepd512_mask
+      {Intrinsic::x86_avx512_mask_range_ps_128, 113310}, // __builtin_ia32_rangeps128_mask
+      {Intrinsic::x86_avx512_mask_range_ps_256, 113341}, // __builtin_ia32_rangeps256_mask
+      {Intrinsic::x86_avx512_mask_range_ps_512, 113372}, // __builtin_ia32_rangeps512_mask
+      {Intrinsic::x86_avx512_mask_range_sd, 113403}, // __builtin_ia32_rangesd128_round_mask
+      {Intrinsic::x86_avx512_mask_range_ss, 113440}, // __builtin_ia32_rangess128_round_mask
+      {Intrinsic::x86_avx512_rcp14_pd_128, 118557}, // __builtin_ia32_rcp14pd128_mask
+      {Intrinsic::x86_avx512_rcp14_pd_256, 118588}, // __builtin_ia32_rcp14pd256_mask
+      {Intrinsic::x86_avx512_rcp14_pd_512, 118619}, // __builtin_ia32_rcp14pd512_mask
+      {Intrinsic::x86_avx512_rcp14_ps_128, 118650}, // __builtin_ia32_rcp14ps128_mask
+      {Intrinsic::x86_avx512_rcp14_ps_256, 118681}, // __builtin_ia32_rcp14ps256_mask
+      {Intrinsic::x86_avx512_rcp14_ps_512, 118712}, // __builtin_ia32_rcp14ps512_mask
+      {Intrinsic::x86_avx512_rcp14_sd, 118743}, // __builtin_ia32_rcp14sd_mask
+      {Intrinsic::x86_avx512_rcp14_ss, 118771}, // __builtin_ia32_rcp14ss_mask
+      {Intrinsic::x86_avx512_rcp28_pd, 118799}, // __builtin_ia32_rcp28pd_mask
+      {Intrinsic::x86_avx512_rcp28_ps, 118827}, // __builtin_ia32_rcp28ps_mask
+      {Intrinsic::x86_avx512_rcp28_sd, 118855}, // __builtin_ia32_rcp28sd_round_mask
+      {Intrinsic::x86_avx512_rcp28_ss, 118889}, // __builtin_ia32_rcp28ss_round_mask
+      {Intrinsic::x86_sse_rcp_ps, 125653}, // __builtin_ia32_rcpps
+      {Intrinsic::x86_avx_rcp_ps_256, 100653}, // __builtin_ia32_rcpps256
+      {Intrinsic::x86_sse_rcp_ss, 125674}, // __builtin_ia32_rcpss
+      {Intrinsic::x86_rdfsbase_32, 124592}, // __builtin_ia32_rdfsbase32
+      {Intrinsic::x86_rdfsbase_64, 124618}, // __builtin_ia32_rdfsbase64
+      {Intrinsic::x86_rdgsbase_32, 124644}, // __builtin_ia32_rdgsbase32
+      {Intrinsic::x86_rdgsbase_64, 124670}, // __builtin_ia32_rdgsbase64
+      {Intrinsic::x86_rdpid, 124696}, // __builtin_ia32_rdpid
+      {Intrinsic::x86_rdpkru, 124717}, // __builtin_ia32_rdpkru
+      {Intrinsic::x86_rdpmc, 124739}, // __builtin_ia32_rdpmc
+      {Intrinsic::x86_rdsspd, 124760}, // __builtin_ia32_rdsspd
+      {Intrinsic::x86_rdsspq, 124782}, // __builtin_ia32_rdsspq
+      {Intrinsic::x86_rdtsc, 124804}, // __builtin_ia32_rdtsc
+      {Intrinsic::x86_rdtscp, 124825}, // __builtin_ia32_rdtscp
+      {Intrinsic::x86_flags_read_u32, 122397}, // __builtin_ia32_readeflags_u32
+      {Intrinsic::x86_flags_read_u64, 122427}, // __builtin_ia32_readeflags_u64
+      {Intrinsic::x86_avx512_mask_reduce_pd_128, 113477}, // __builtin_ia32_reducepd128_mask
+      {Intrinsic::x86_avx512_mask_reduce_pd_256, 113509}, // __builtin_ia32_reducepd256_mask
+      {Intrinsic::x86_avx512_mask_reduce_pd_512, 113541}, // __builtin_ia32_reducepd512_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_128, 113573}, // __builtin_ia32_reduceps128_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_256, 113605}, // __builtin_ia32_reduceps256_mask
+      {Intrinsic::x86_avx512_mask_reduce_ps_512, 113637}, // __builtin_ia32_reduceps512_mask
+      {Intrinsic::x86_avx512_mask_reduce_sd, 113669}, // __builtin_ia32_reducesd_mask
+      {Intrinsic::x86_avx512_mask_reduce_ss, 113698}, // __builtin_ia32_reducess_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_128, 113727}, // __builtin_ia32_rndscalepd_128_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_256, 113762}, // __builtin_ia32_rndscalepd_256_mask
+      {Intrinsic::x86_avx512_mask_rndscale_pd_512, 113797}, // __builtin_ia32_rndscalepd_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_128, 113828}, // __builtin_ia32_rndscaleps_128_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_256, 113863}, // __builtin_ia32_rndscaleps_256_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ps_512, 113898}, // __builtin_ia32_rndscaleps_mask
+      {Intrinsic::x86_avx512_mask_rndscale_sd, 113929}, // __builtin_ia32_rndscalesd_round_mask
+      {Intrinsic::x86_avx512_mask_rndscale_ss, 113966}, // __builtin_ia32_rndscaless_round_mask
+      {Intrinsic::x86_sse41_round_pd, 127997}, // __builtin_ia32_roundpd
+      {Intrinsic::x86_avx_round_pd_256, 100677}, // __builtin_ia32_roundpd256
+      {Intrinsic::x86_sse41_round_ps, 128020}, // __builtin_ia32_roundps
+      {Intrinsic::x86_avx_round_ps_256, 100703}, // __builtin_ia32_roundps256
+      {Intrinsic::x86_sse41_round_sd, 128043}, // __builtin_ia32_roundsd
+      {Intrinsic::x86_sse41_round_ss, 128066}, // __builtin_ia32_roundss
+      {Intrinsic::x86_avx512_rsqrt14_pd_128, 118923}, // __builtin_ia32_rsqrt14pd128_mask
+      {Intrinsic::x86_avx512_rsqrt14_pd_256, 118956}, // __builtin_ia32_rsqrt14pd256_mask
+      {Intrinsic::x86_avx512_rsqrt14_pd_512, 118989}, // __builtin_ia32_rsqrt14pd512_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_128, 119022}, // __builtin_ia32_rsqrt14ps128_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_256, 119055}, // __builtin_ia32_rsqrt14ps256_mask
+      {Intrinsic::x86_avx512_rsqrt14_ps_512, 119088}, // __builtin_ia32_rsqrt14ps512_mask
+      {Intrinsic::x86_avx512_rsqrt14_sd, 119121}, // __builtin_ia32_rsqrt14sd_mask
+      {Intrinsic::x86_avx512_rsqrt14_ss, 119151}, // __builtin_ia32_rsqrt14ss_mask
+      {Intrinsic::x86_avx512_rsqrt28_pd, 119181}, // __builtin_ia32_rsqrt28pd_mask
+      {Intrinsic::x86_avx512_rsqrt28_ps, 119211}, // __builtin_ia32_rsqrt28ps_mask
+      {Intrinsic::x86_avx512_rsqrt28_sd, 119241}, // __builtin_ia32_rsqrt28sd_round_mask
+      {Intrinsic::x86_avx512_rsqrt28_ss, 119277}, // __builtin_ia32_rsqrt28ss_round_mask
+      {Intrinsic::x86_sse_rsqrt_ps, 125695}, // __builtin_ia32_rsqrtps
+      {Intrinsic::x86_avx_rsqrt_ps_256, 100729}, // __builtin_ia32_rsqrtps256
+      {Intrinsic::x86_sse_rsqrt_ss, 125718}, // __builtin_ia32_rsqrtss
+      {Intrinsic::x86_rstorssp, 124847}, // __builtin_ia32_rstorssp
+      {Intrinsic::x86_saveprevssp, 124871}, // __builtin_ia32_saveprevssp
+      {Intrinsic::x86_avx512_mask_scalef_pd_128, 114003}, // __builtin_ia32_scalefpd128_mask
+      {Intrinsic::x86_avx512_mask_scalef_pd_256, 114035}, // __builtin_ia32_scalefpd256_mask
+      {Intrinsic::x86_avx512_mask_scalef_pd_512, 114067}, // __builtin_ia32_scalefpd512_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_128, 114099}, // __builtin_ia32_scalefps128_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_256, 114131}, // __builtin_ia32_scalefps256_mask
+      {Intrinsic::x86_avx512_mask_scalef_ps_512, 114163}, // __builtin_ia32_scalefps512_mask
+      {Intrinsic::x86_avx512_mask_scalef_sd, 114195}, // __builtin_ia32_scalefsd_round_mask
+      {Intrinsic::x86_avx512_mask_scalef_ss, 114230}, // __builtin_ia32_scalefss_round_mask
+      {Intrinsic::x86_avx512_scatter_qps_512, 119519}, // __builtin_ia32_scatterdiv16sf
+      {Intrinsic::x86_avx512_scatter_qpi_512, 119460}, // __builtin_ia32_scatterdiv16si
+      {Intrinsic::x86_avx512_scatterdiv2_df, 119549}, // __builtin_ia32_scatterdiv2df
+      {Intrinsic::x86_avx512_scatterdiv2_di, 119578}, // __builtin_ia32_scatterdiv2di
+      {Intrinsic::x86_avx512_scatterdiv4_df, 119607}, // __builtin_ia32_scatterdiv4df
+      {Intrinsic::x86_avx512_scatterdiv4_di, 119636}, // __builtin_ia32_scatterdiv4di
+      {Intrinsic::x86_avx512_scatterdiv4_sf, 119665}, // __builtin_ia32_scatterdiv4sf
+      {Intrinsic::x86_avx512_scatterdiv4_si, 119694}, // __builtin_ia32_scatterdiv4si
+      {Intrinsic::x86_avx512_scatter_qpd_512, 119431}, // __builtin_ia32_scatterdiv8df
+      {Intrinsic::x86_avx512_scatter_qpq_512, 119490}, // __builtin_ia32_scatterdiv8di
+      {Intrinsic::x86_avx512_scatterdiv8_sf, 119723}, // __builtin_ia32_scatterdiv8sf
+      {Intrinsic::x86_avx512_scatterdiv8_si, 119752}, // __builtin_ia32_scatterdiv8si
+      {Intrinsic::x86_avx512_scatterpf_dpd_512, 119781}, // __builtin_ia32_scatterpfdpd
+      {Intrinsic::x86_avx512_scatterpf_dps_512, 119809}, // __builtin_ia32_scatterpfdps
+      {Intrinsic::x86_avx512_scatterpf_qpd_512, 119837}, // __builtin_ia32_scatterpfqpd
+      {Intrinsic::x86_avx512_scatterpf_qps_512, 119865}, // __builtin_ia32_scatterpfqps
+      {Intrinsic::x86_avx512_scatter_dps_512, 119401}, // __builtin_ia32_scattersiv16sf
+      {Intrinsic::x86_avx512_scatter_dpi_512, 119342}, // __builtin_ia32_scattersiv16si
+      {Intrinsic::x86_avx512_scattersiv2_df, 119893}, // __builtin_ia32_scattersiv2df
+      {Intrinsic::x86_avx512_scattersiv2_di, 119922}, // __builtin_ia32_scattersiv2di
+      {Intrinsic::x86_avx512_scattersiv4_df, 119951}, // __builtin_ia32_scattersiv4df
+      {Intrinsic::x86_avx512_scattersiv4_di, 119980}, // __builtin_ia32_scattersiv4di
+      {Intrinsic::x86_avx512_scattersiv4_sf, 120009}, // __builtin_ia32_scattersiv4sf
+      {Intrinsic::x86_avx512_scattersiv4_si, 120038}, // __builtin_ia32_scattersiv4si
+      {Intrinsic::x86_avx512_scatter_dpd_512, 119313}, // __builtin_ia32_scattersiv8df
+      {Intrinsic::x86_avx512_scatter_dpq_512, 119372}, // __builtin_ia32_scattersiv8di
+      {Intrinsic::x86_avx512_scattersiv8_sf, 120067}, // __builtin_ia32_scattersiv8sf
+      {Intrinsic::x86_avx512_scattersiv8_si, 120096}, // __builtin_ia32_scattersiv8si
+      {Intrinsic::x86_setssbsy, 124898}, // __builtin_ia32_setssbsy
+      {Intrinsic::x86_sse_sfence, 125741}, // __builtin_ia32_sfence
+      {Intrinsic::x86_sha1msg1, 124922}, // __builtin_ia32_sha1msg1
+      {Intrinsic::x86_sha1msg2, 124946}, // __builtin_ia32_sha1msg2
+      {Intrinsic::x86_sha1nexte, 124970}, // __builtin_ia32_sha1nexte
+      {Intrinsic::x86_sha1rnds4, 124995}, // __builtin_ia32_sha1rnds4
+      {Intrinsic::x86_sha256msg1, 125020}, // __builtin_ia32_sha256msg1
+      {Intrinsic::x86_sha256msg2, 125046}, // __builtin_ia32_sha256msg2
+      {Intrinsic::x86_sha256rnds2, 125072}, // __builtin_ia32_sha256rnds2
+      {Intrinsic::x86_slwpcb, 125099}, // __builtin_ia32_slwpcb
+      {Intrinsic::x86_subborrow_u32, 129314}, // __builtin_ia32_subborrow_u32
+      {Intrinsic::x86_subborrow_u64, 129343}, // __builtin_ia32_subborrow_u64
+      {Intrinsic::x86_avx512_sub_pd_512, 120125}, // __builtin_ia32_subpd512
+      {Intrinsic::x86_avx512_sub_ps_512, 120149}, // __builtin_ia32_subps512
+      {Intrinsic::x86_avx512_mask_sub_sd_round, 114265}, // __builtin_ia32_subsd_round_mask
+      {Intrinsic::x86_avx512_mask_sub_ss_round, 114297}, // __builtin_ia32_subss_round_mask
+      {Intrinsic::x86_tpause, 129424}, // __builtin_ia32_tpause
+      {Intrinsic::x86_sse_ucomieq_ss, 125763}, // __builtin_ia32_ucomieq
+      {Intrinsic::x86_sse_ucomige_ss, 125786}, // __builtin_ia32_ucomige
+      {Intrinsic::x86_sse_ucomigt_ss, 125809}, // __builtin_ia32_ucomigt
+      {Intrinsic::x86_sse_ucomile_ss, 125832}, // __builtin_ia32_ucomile
+      {Intrinsic::x86_sse_ucomilt_ss, 125855}, // __builtin_ia32_ucomilt
+      {Intrinsic::x86_sse_ucomineq_ss, 125878}, // __builtin_ia32_ucomineq
+      {Intrinsic::x86_sse2_ucomieq_sd, 127344}, // __builtin_ia32_ucomisdeq
+      {Intrinsic::x86_sse2_ucomige_sd, 127369}, // __builtin_ia32_ucomisdge
+      {Intrinsic::x86_sse2_ucomigt_sd, 127394}, // __builtin_ia32_ucomisdgt
+      {Intrinsic::x86_sse2_ucomile_sd, 127419}, // __builtin_ia32_ucomisdle
+      {Intrinsic::x86_sse2_ucomilt_sd, 127444}, // __builtin_ia32_ucomisdlt
+      {Intrinsic::x86_sse2_ucomineq_sd, 127469}, // __builtin_ia32_ucomisdneq
+      {Intrinsic::x86_umonitor, 129446}, // __builtin_ia32_umonitor
+      {Intrinsic::x86_umwait, 129470}, // __builtin_ia32_umwait
+      {Intrinsic::x86_avx512_vcomi_sd, 120173}, // __builtin_ia32_vcomisd
+      {Intrinsic::x86_avx512_vcomi_ss, 120196}, // __builtin_ia32_vcomiss
+      {Intrinsic::x86_vcvtph2ps_128, 129492}, // __builtin_ia32_vcvtph2ps
+      {Intrinsic::x86_vcvtph2ps_256, 129517}, // __builtin_ia32_vcvtph2ps256
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_256, 114359}, // __builtin_ia32_vcvtph2ps256_mask
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_512, 114392}, // __builtin_ia32_vcvtph2ps512_mask
+      {Intrinsic::x86_avx512_mask_vcvtph2ps_128, 114329}, // __builtin_ia32_vcvtph2ps_mask
+      {Intrinsic::x86_vcvtps2ph_128, 129545}, // __builtin_ia32_vcvtps2ph
+      {Intrinsic::x86_vcvtps2ph_256, 129570}, // __builtin_ia32_vcvtps2ph256
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_256, 114455}, // __builtin_ia32_vcvtps2ph256_mask
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_512, 114488}, // __builtin_ia32_vcvtps2ph512_mask
+      {Intrinsic::x86_avx512_mask_vcvtps2ph_128, 114425}, // __builtin_ia32_vcvtps2ph_mask
+      {Intrinsic::x86_avx512_vcvtsd2si32, 120219}, // __builtin_ia32_vcvtsd2si32
+      {Intrinsic::x86_avx512_vcvtsd2si64, 120246}, // __builtin_ia32_vcvtsd2si64
+      {Intrinsic::x86_avx512_vcvtsd2usi32, 120273}, // __builtin_ia32_vcvtsd2usi32
+      {Intrinsic::x86_avx512_vcvtsd2usi64, 120301}, // __builtin_ia32_vcvtsd2usi64
+      {Intrinsic::x86_avx512_vcvtss2si32, 120329}, // __builtin_ia32_vcvtss2si32
+      {Intrinsic::x86_avx512_vcvtss2si64, 120356}, // __builtin_ia32_vcvtss2si64
+      {Intrinsic::x86_avx512_vcvtss2usi32, 120383}, // __builtin_ia32_vcvtss2usi32
+      {Intrinsic::x86_avx512_vcvtss2usi64, 120411}, // __builtin_ia32_vcvtss2usi64
+      {Intrinsic::x86_avx512_cvttsd2si, 103680}, // __builtin_ia32_vcvttsd2si32
+      {Intrinsic::x86_avx512_cvttsd2si64, 103708}, // __builtin_ia32_vcvttsd2si64
+      {Intrinsic::x86_avx512_cvttsd2usi, 103736}, // __builtin_ia32_vcvttsd2usi32
+      {Intrinsic::x86_avx512_cvttsd2usi64, 103765}, // __builtin_ia32_vcvttsd2usi64
+      {Intrinsic::x86_avx512_cvttss2si, 103794}, // __builtin_ia32_vcvttss2si32
+      {Intrinsic::x86_avx512_cvttss2si64, 103822}, // __builtin_ia32_vcvttss2si64
+      {Intrinsic::x86_avx512_cvttss2usi, 103850}, // __builtin_ia32_vcvttss2usi32
+      {Intrinsic::x86_avx512_cvttss2usi64, 103879}, // __builtin_ia32_vcvttss2usi64
+      {Intrinsic::x86_mmx_pextr_w, 123377}, // __builtin_ia32_vec_ext_v4hi
+      {Intrinsic::x86_mmx_pinsr_w, 123405}, // __builtin_ia32_vec_set_v4hi
+      {Intrinsic::x86_xop_vfrcz_pd, 130241}, // __builtin_ia32_vfrczpd
+      {Intrinsic::x86_xop_vfrcz_pd_256, 130264}, // __builtin_ia32_vfrczpd256
+      {Intrinsic::x86_xop_vfrcz_ps, 130290}, // __builtin_ia32_vfrczps
+      {Intrinsic::x86_xop_vfrcz_ps_256, 130313}, // __builtin_ia32_vfrczps256
+      {Intrinsic::x86_xop_vfrcz_sd, 130339}, // __builtin_ia32_vfrczsd
+      {Intrinsic::x86_xop_vfrcz_ss, 130362}, // __builtin_ia32_vfrczss
+      {Intrinsic::x86_vgf2p8affineinvqb_128, 129598}, // __builtin_ia32_vgf2p8affineinvqb_v16qi
+      {Intrinsic::x86_vgf2p8affineinvqb_256, 129637}, // __builtin_ia32_vgf2p8affineinvqb_v32qi
+      {Intrinsic::x86_vgf2p8affineinvqb_512, 129676}, // __builtin_ia32_vgf2p8affineinvqb_v64qi
+      {Intrinsic::x86_vgf2p8affineqb_128, 129715}, // __builtin_ia32_vgf2p8affineqb_v16qi
+      {Intrinsic::x86_vgf2p8affineqb_256, 129751}, // __builtin_ia32_vgf2p8affineqb_v32qi
+      {Intrinsic::x86_vgf2p8affineqb_512, 129787}, // __builtin_ia32_vgf2p8affineqb_v64qi
+      {Intrinsic::x86_vgf2p8mulb_128, 129823}, // __builtin_ia32_vgf2p8mulb_v16qi
+      {Intrinsic::x86_vgf2p8mulb_256, 129855}, // __builtin_ia32_vgf2p8mulb_v32qi
+      {Intrinsic::x86_vgf2p8mulb_512, 129887}, // __builtin_ia32_vgf2p8mulb_v64qi
+      {Intrinsic::x86_xop_vpcomb, 130385}, // __builtin_ia32_vpcomb
+      {Intrinsic::x86_xop_vpcomd, 130407}, // __builtin_ia32_vpcomd
+      {Intrinsic::x86_xop_vpcomq, 130429}, // __builtin_ia32_vpcomq
+      {Intrinsic::x86_xop_vpcomub, 130451}, // __builtin_ia32_vpcomub
+      {Intrinsic::x86_xop_vpcomud, 130474}, // __builtin_ia32_vpcomud
+      {Intrinsic::x86_xop_vpcomuq, 130497}, // __builtin_ia32_vpcomuq
+      {Intrinsic::x86_xop_vpcomuw, 130520}, // __builtin_ia32_vpcomuw
+      {Intrinsic::x86_xop_vpcomw, 130543}, // __builtin_ia32_vpcomw
+      {Intrinsic::x86_avx512_mask_conflict_q_128, 105811}, // __builtin_ia32_vpconflictdi_128_mask
+      {Intrinsic::x86_avx512_mask_conflict_q_256, 105848}, // __builtin_ia32_vpconflictdi_256_mask
+      {Intrinsic::x86_avx512_mask_conflict_q_512, 105885}, // __builtin_ia32_vpconflictdi_512_mask
+      {Intrinsic::x86_avx512_mask_conflict_d_128, 105700}, // __builtin_ia32_vpconflictsi_128_mask
+      {Intrinsic::x86_avx512_mask_conflict_d_256, 105737}, // __builtin_ia32_vpconflictsi_256_mask
+      {Intrinsic::x86_avx512_mask_conflict_d_512, 105774}, // __builtin_ia32_vpconflictsi_512_mask
+      {Intrinsic::x86_avx512_vpdpbusd_128, 120439}, // __builtin_ia32_vpdpbusd128
+      {Intrinsic::x86_avx512_vpdpbusd_256, 120466}, // __builtin_ia32_vpdpbusd256
+      {Intrinsic::x86_avx512_vpdpbusd_512, 120493}, // __builtin_ia32_vpdpbusd512
+      {Intrinsic::x86_avx512_vpdpbusds_128, 120520}, // __builtin_ia32_vpdpbusds128
+      {Intrinsic::x86_avx512_vpdpbusds_256, 120548}, // __builtin_ia32_vpdpbusds256
+      {Intrinsic::x86_avx512_vpdpbusds_512, 120576}, // __builtin_ia32_vpdpbusds512
+      {Intrinsic::x86_avx512_vpdpwssd_128, 120604}, // __builtin_ia32_vpdpwssd128
+      {Intrinsic::x86_avx512_vpdpwssd_256, 120631}, // __builtin_ia32_vpdpwssd256
+      {Intrinsic::x86_avx512_vpdpwssd_512, 120658}, // __builtin_ia32_vpdpwssd512
+      {Intrinsic::x86_avx512_vpdpwssds_128, 120685}, // __builtin_ia32_vpdpwssds128
+      {Intrinsic::x86_avx512_vpdpwssds_256, 120713}, // __builtin_ia32_vpdpwssds256
+      {Intrinsic::x86_avx512_vpdpwssds_512, 120741}, // __builtin_ia32_vpdpwssds512
+      {Intrinsic::x86_avx512_vpermi2var_d_128, 120769}, // __builtin_ia32_vpermi2vard128
+      {Intrinsic::x86_avx512_vpermi2var_d_256, 120799}, // __builtin_ia32_vpermi2vard256
+      {Intrinsic::x86_avx512_vpermi2var_d_512, 120829}, // __builtin_ia32_vpermi2vard512
+      {Intrinsic::x86_avx512_vpermi2var_hi_128, 120859}, // __builtin_ia32_vpermi2varhi128
+      {Intrinsic::x86_avx512_vpermi2var_hi_256, 120890}, // __builtin_ia32_vpermi2varhi256
+      {Intrinsic::x86_avx512_vpermi2var_hi_512, 120921}, // __builtin_ia32_vpermi2varhi512
+      {Intrinsic::x86_avx512_vpermi2var_pd_128, 120952}, // __builtin_ia32_vpermi2varpd128
+      {Intrinsic::x86_avx512_vpermi2var_pd_256, 120983}, // __builtin_ia32_vpermi2varpd256
+      {Intrinsic::x86_avx512_vpermi2var_pd_512, 121014}, // __builtin_ia32_vpermi2varpd512
+      {Intrinsic::x86_avx512_vpermi2var_ps_128, 121045}, // __builtin_ia32_vpermi2varps128
+      {Intrinsic::x86_avx512_vpermi2var_ps_256, 121076}, // __builtin_ia32_vpermi2varps256
+      {Intrinsic::x86_avx512_vpermi2var_ps_512, 121107}, // __builtin_ia32_vpermi2varps512
+      {Intrinsic::x86_avx512_vpermi2var_q_128, 121138}, // __builtin_ia32_vpermi2varq128
+      {Intrinsic::x86_avx512_vpermi2var_q_256, 121168}, // __builtin_ia32_vpermi2varq256
+      {Intrinsic::x86_avx512_vpermi2var_q_512, 121198}, // __builtin_ia32_vpermi2varq512
+      {Intrinsic::x86_avx512_vpermi2var_qi_128, 121228}, // __builtin_ia32_vpermi2varqi128
+      {Intrinsic::x86_avx512_vpermi2var_qi_256, 121259}, // __builtin_ia32_vpermi2varqi256
+      {Intrinsic::x86_avx512_vpermi2var_qi_512, 121290}, // __builtin_ia32_vpermi2varqi512
+      {Intrinsic::x86_xop_vpermil2pd, 130565}, // __builtin_ia32_vpermil2pd
+      {Intrinsic::x86_xop_vpermil2pd_256, 130591}, // __builtin_ia32_vpermil2pd256
+      {Intrinsic::x86_xop_vpermil2ps, 130620}, // __builtin_ia32_vpermil2ps
+      {Intrinsic::x86_xop_vpermil2ps_256, 130646}, // __builtin_ia32_vpermil2ps256
+      {Intrinsic::x86_avx_vpermilvar_pd, 100755}, // __builtin_ia32_vpermilvarpd
+      {Intrinsic::x86_avx_vpermilvar_pd_256, 100783}, // __builtin_ia32_vpermilvarpd256
+      {Intrinsic::x86_avx512_vpermilvar_pd_512, 121321}, // __builtin_ia32_vpermilvarpd512
+      {Intrinsic::x86_avx_vpermilvar_ps, 100814}, // __builtin_ia32_vpermilvarps
+      {Intrinsic::x86_avx_vpermilvar_ps_256, 100842}, // __builtin_ia32_vpermilvarps256
+      {Intrinsic::x86_avx512_vpermilvar_ps_512, 121352}, // __builtin_ia32_vpermilvarps512
+      {Intrinsic::x86_xop_vphaddbd, 130675}, // __builtin_ia32_vphaddbd
+      {Intrinsic::x86_xop_vphaddbq, 130699}, // __builtin_ia32_vphaddbq
+      {Intrinsic::x86_xop_vphaddbw, 130723}, // __builtin_ia32_vphaddbw
+      {Intrinsic::x86_xop_vphadddq, 130747}, // __builtin_ia32_vphadddq
+      {Intrinsic::x86_xop_vphaddubd, 130771}, // __builtin_ia32_vphaddubd
+      {Intrinsic::x86_xop_vphaddubq, 130796}, // __builtin_ia32_vphaddubq
+      {Intrinsic::x86_xop_vphaddubw, 130821}, // __builtin_ia32_vphaddubw
+      {Intrinsic::x86_xop_vphaddudq, 130846}, // __builtin_ia32_vphaddudq
+      {Intrinsic::x86_xop_vphadduwd, 130871}, // __builtin_ia32_vphadduwd
+      {Intrinsic::x86_xop_vphadduwq, 130896}, // __builtin_ia32_vphadduwq
+      {Intrinsic::x86_xop_vphaddwd, 130921}, // __builtin_ia32_vphaddwd
+      {Intrinsic::x86_xop_vphaddwq, 130945}, // __builtin_ia32_vphaddwq
+      {Intrinsic::x86_xop_vphsubbw, 130969}, // __builtin_ia32_vphsubbw
+      {Intrinsic::x86_xop_vphsubdq, 130993}, // __builtin_ia32_vphsubdq
+      {Intrinsic::x86_xop_vphsubwd, 131017}, // __builtin_ia32_vphsubwd
+      {Intrinsic::x86_xop_vpmacsdd, 131041}, // __builtin_ia32_vpmacsdd
+      {Intrinsic::x86_xop_vpmacsdqh, 131065}, // __builtin_ia32_vpmacsdqh
+      {Intrinsic::x86_xop_vpmacsdql, 131090}, // __builtin_ia32_vpmacsdql
+      {Intrinsic::x86_xop_vpmacssdd, 131115}, // __builtin_ia32_vpmacssdd
+      {Intrinsic::x86_xop_vpmacssdqh, 131140}, // __builtin_ia32_vpmacssdqh
+      {Intrinsic::x86_xop_vpmacssdql, 131166}, // __builtin_ia32_vpmacssdql
+      {Intrinsic::x86_xop_vpmacsswd, 131192}, // __builtin_ia32_vpmacsswd
+      {Intrinsic::x86_xop_vpmacssww, 131217}, // __builtin_ia32_vpmacssww
+      {Intrinsic::x86_xop_vpmacswd, 131242}, // __builtin_ia32_vpmacswd
+      {Intrinsic::x86_xop_vpmacsww, 131266}, // __builtin_ia32_vpmacsww
+      {Intrinsic::x86_xop_vpmadcsswd, 131290}, // __builtin_ia32_vpmadcsswd
+      {Intrinsic::x86_xop_vpmadcswd, 131316}, // __builtin_ia32_vpmadcswd
+      {Intrinsic::x86_avx512_vpmadd52h_uq_128, 121383}, // __builtin_ia32_vpmadd52huq128
+      {Intrinsic::x86_avx512_vpmadd52h_uq_256, 121413}, // __builtin_ia32_vpmadd52huq256
+      {Intrinsic::x86_avx512_vpmadd52h_uq_512, 121443}, // __builtin_ia32_vpmadd52huq512
+      {Intrinsic::x86_avx512_vpmadd52l_uq_128, 121473}, // __builtin_ia32_vpmadd52luq128
+      {Intrinsic::x86_avx512_vpmadd52l_uq_256, 121503}, // __builtin_ia32_vpmadd52luq256
+      {Intrinsic::x86_avx512_vpmadd52l_uq_512, 121533}, // __builtin_ia32_vpmadd52luq512
+      {Intrinsic::x86_avx512_mask_pmultishift_qb_128, 112981}, // __builtin_ia32_vpmultishiftqb128_mask
+      {Intrinsic::x86_avx512_mask_pmultishift_qb_256, 113019}, // __builtin_ia32_vpmultishiftqb256_mask
+      {Intrinsic::x86_avx512_mask_pmultishift_qb_512, 113057}, // __builtin_ia32_vpmultishiftqb512_mask
+      {Intrinsic::x86_xop_vpperm, 131341}, // __builtin_ia32_vpperm
+      {Intrinsic::x86_xop_vprotb, 131363}, // __builtin_ia32_vprotb
+      {Intrinsic::x86_xop_vprotbi, 131385}, // __builtin_ia32_vprotbi
+      {Intrinsic::x86_xop_vprotd, 131408}, // __builtin_ia32_vprotd
+      {Intrinsic::x86_xop_vprotdi, 131430}, // __builtin_ia32_vprotdi
+      {Intrinsic::x86_xop_vprotq, 131453}, // __builtin_ia32_vprotq
+      {Intrinsic::x86_xop_vprotqi, 131475}, // __builtin_ia32_vprotqi
+      {Intrinsic::x86_xop_vprotw, 131498}, // __builtin_ia32_vprotw
+      {Intrinsic::x86_xop_vprotwi, 131520}, // __builtin_ia32_vprotwi
+      {Intrinsic::x86_xop_vpshab, 131543}, // __builtin_ia32_vpshab
+      {Intrinsic::x86_xop_vpshad, 131565}, // __builtin_ia32_vpshad
+      {Intrinsic::x86_xop_vpshaq, 131587}, // __builtin_ia32_vpshaq
+      {Intrinsic::x86_xop_vpshaw, 131609}, // __builtin_ia32_vpshaw
+      {Intrinsic::x86_xop_vpshlb, 131631}, // __builtin_ia32_vpshlb
+      {Intrinsic::x86_xop_vpshld, 131653}, // __builtin_ia32_vpshld
+      {Intrinsic::x86_avx512_vpshld_d_128, 121563}, // __builtin_ia32_vpshldd128
+      {Intrinsic::x86_avx512_vpshld_d_256, 121589}, // __builtin_ia32_vpshldd256
+      {Intrinsic::x86_avx512_vpshld_d_512, 121615}, // __builtin_ia32_vpshldd512
+      {Intrinsic::x86_avx512_vpshld_q_128, 121641}, // __builtin_ia32_vpshldq128
+      {Intrinsic::x86_avx512_vpshld_q_256, 121667}, // __builtin_ia32_vpshldq256
+      {Intrinsic::x86_avx512_vpshld_q_512, 121693}, // __builtin_ia32_vpshldq512
+      {Intrinsic::x86_avx512_mask_vpshldv_d_128, 114521}, // __builtin_ia32_vpshldvd128_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_d_128, 115479}, // __builtin_ia32_vpshldvd128_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_d_256, 114553}, // __builtin_ia32_vpshldvd256_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_d_256, 115512}, // __builtin_ia32_vpshldvd256_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_d_512, 114585}, // __builtin_ia32_vpshldvd512_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_d_512, 115545}, // __builtin_ia32_vpshldvd512_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_q_128, 114617}, // __builtin_ia32_vpshldvq128_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_q_128, 115578}, // __builtin_ia32_vpshldvq128_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_q_256, 114649}, // __builtin_ia32_vpshldvq256_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_q_256, 115611}, // __builtin_ia32_vpshldvq256_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_q_512, 114681}, // __builtin_ia32_vpshldvq512_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_q_512, 115644}, // __builtin_ia32_vpshldvq512_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_w_128, 114713}, // __builtin_ia32_vpshldvw128_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_w_128, 115677}, // __builtin_ia32_vpshldvw128_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_w_256, 114745}, // __builtin_ia32_vpshldvw256_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_w_256, 115710}, // __builtin_ia32_vpshldvw256_maskz
+      {Intrinsic::x86_avx512_mask_vpshldv_w_512, 114777}, // __builtin_ia32_vpshldvw512_mask
+      {Intrinsic::x86_avx512_maskz_vpshldv_w_512, 115743}, // __builtin_ia32_vpshldvw512_maskz
+      {Intrinsic::x86_avx512_vpshld_w_128, 121719}, // __builtin_ia32_vpshldw128
+      {Intrinsic::x86_avx512_vpshld_w_256, 121745}, // __builtin_ia32_vpshldw256
+      {Intrinsic::x86_avx512_vpshld_w_512, 121771}, // __builtin_ia32_vpshldw512
+      {Intrinsic::x86_xop_vpshlq, 131675}, // __builtin_ia32_vpshlq
+      {Intrinsic::x86_xop_vpshlw, 131697}, // __builtin_ia32_vpshlw
+      {Intrinsic::x86_avx512_vpshrd_d_128, 121797}, // __builtin_ia32_vpshrdd128
+      {Intrinsic::x86_avx512_vpshrd_d_256, 121823}, // __builtin_ia32_vpshrdd256
+      {Intrinsic::x86_avx512_vpshrd_d_512, 121849}, // __builtin_ia32_vpshrdd512
+      {Intrinsic::x86_avx512_vpshrd_q_128, 121875}, // __builtin_ia32_vpshrdq128
+      {Intrinsic::x86_avx512_vpshrd_q_256, 121901}, // __builtin_ia32_vpshrdq256
+      {Intrinsic::x86_avx512_vpshrd_q_512, 121927}, // __builtin_ia32_vpshrdq512
+      {Intrinsic::x86_avx512_mask_vpshrdv_d_128, 114809}, // __builtin_ia32_vpshrdvd128_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_d_128, 115776}, // __builtin_ia32_vpshrdvd128_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_d_256, 114841}, // __builtin_ia32_vpshrdvd256_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_d_256, 115809}, // __builtin_ia32_vpshrdvd256_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_d_512, 114873}, // __builtin_ia32_vpshrdvd512_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_d_512, 115842}, // __builtin_ia32_vpshrdvd512_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_q_128, 114905}, // __builtin_ia32_vpshrdvq128_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_q_128, 115875}, // __builtin_ia32_vpshrdvq128_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_q_256, 114937}, // __builtin_ia32_vpshrdvq256_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_q_256, 115908}, // __builtin_ia32_vpshrdvq256_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_q_512, 114969}, // __builtin_ia32_vpshrdvq512_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_q_512, 115941}, // __builtin_ia32_vpshrdvq512_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_w_128, 115001}, // __builtin_ia32_vpshrdvw128_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_w_128, 115974}, // __builtin_ia32_vpshrdvw128_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_w_256, 115033}, // __builtin_ia32_vpshrdvw256_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_w_256, 116007}, // __builtin_ia32_vpshrdvw256_maskz
+      {Intrinsic::x86_avx512_mask_vpshrdv_w_512, 115065}, // __builtin_ia32_vpshrdvw512_mask
+      {Intrinsic::x86_avx512_maskz_vpshrdv_w_512, 116040}, // __builtin_ia32_vpshrdvw512_maskz
+      {Intrinsic::x86_avx512_vpshrd_w_128, 121953}, // __builtin_ia32_vpshrdw128
+      {Intrinsic::x86_avx512_vpshrd_w_256, 121979}, // __builtin_ia32_vpshrdw256
+      {Intrinsic::x86_avx512_vpshrd_w_512, 122005}, // __builtin_ia32_vpshrdw512
+      {Intrinsic::x86_avx512_mask_vpshufbitqmb_128, 115097}, // __builtin_ia32_vpshufbitqmb128_mask
+      {Intrinsic::x86_avx512_mask_vpshufbitqmb_256, 115133}, // __builtin_ia32_vpshufbitqmb256_mask
+      {Intrinsic::x86_avx512_mask_vpshufbitqmb_512, 115169}, // __builtin_ia32_vpshufbitqmb512_mask
+      {Intrinsic::x86_avx_vtestc_pd, 100873}, // __builtin_ia32_vtestcpd
+      {Intrinsic::x86_avx_vtestc_pd_256, 100897}, // __builtin_ia32_vtestcpd256
+      {Intrinsic::x86_avx_vtestc_ps, 100924}, // __builtin_ia32_vtestcps
+      {Intrinsic::x86_avx_vtestc_ps_256, 100948}, // __builtin_ia32_vtestcps256
+      {Intrinsic::x86_avx_vtestnzc_pd, 100975}, // __builtin_ia32_vtestnzcpd
+      {Intrinsic::x86_avx_vtestnzc_pd_256, 101001}, // __builtin_ia32_vtestnzcpd256
+      {Intrinsic::x86_avx_vtestnzc_ps, 101030}, // __builtin_ia32_vtestnzcps
+      {Intrinsic::x86_avx_vtestnzc_ps_256, 101056}, // __builtin_ia32_vtestnzcps256
+      {Intrinsic::x86_avx_vtestz_pd, 101085}, // __builtin_ia32_vtestzpd
+      {Intrinsic::x86_avx_vtestz_pd_256, 101109}, // __builtin_ia32_vtestzpd256
+      {Intrinsic::x86_avx_vtestz_ps, 101136}, // __builtin_ia32_vtestzps
+      {Intrinsic::x86_avx_vtestz_ps_256, 101160}, // __builtin_ia32_vtestzps256
+      {Intrinsic::x86_avx_vzeroall, 101187}, // __builtin_ia32_vzeroall
+      {Intrinsic::x86_avx_vzeroupper, 101211}, // __builtin_ia32_vzeroupper
+      {Intrinsic::x86_wbinvd, 129919}, // __builtin_ia32_wbinvd
+      {Intrinsic::x86_wbnoinvd, 129941}, // __builtin_ia32_wbnoinvd
+      {Intrinsic::x86_wrfsbase_32, 129965}, // __builtin_ia32_wrfsbase32
+      {Intrinsic::x86_wrfsbase_64, 129991}, // __builtin_ia32_wrfsbase64
+      {Intrinsic::x86_wrgsbase_32, 130017}, // __builtin_ia32_wrgsbase32
+      {Intrinsic::x86_wrgsbase_64, 130043}, // __builtin_ia32_wrgsbase64
+      {Intrinsic::x86_flags_write_u32, 122457}, // __builtin_ia32_writeeflags_u32
+      {Intrinsic::x86_flags_write_u64, 122488}, // __builtin_ia32_writeeflags_u64
+      {Intrinsic::x86_wrpkru, 130069}, // __builtin_ia32_wrpkru
+      {Intrinsic::x86_wrssd, 130091}, // __builtin_ia32_wrssd
+      {Intrinsic::x86_wrssq, 130112}, // __builtin_ia32_wrssq
+      {Intrinsic::x86_wrussd, 130133}, // __builtin_ia32_wrussd
+      {Intrinsic::x86_wrussq, 130155}, // __builtin_ia32_wrussq
+      {Intrinsic::x86_xabort, 130177}, // __builtin_ia32_xabort
+      {Intrinsic::x86_xbegin, 130199}, // __builtin_ia32_xbegin
+      {Intrinsic::x86_xend, 130221}, // __builtin_ia32_xend
+      {Intrinsic::x86_xtest, 131719}, // __builtin_ia32_xtest
+    };
+    auto I = std::lower_bound(std::begin(x86Names),
+                              std::end(x86Names),
+                              BuiltinNameStr);
+    if (I != std::end(x86Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "xcore") {
+    static const BuiltinEntry xcoreNames[] = {
+      {Intrinsic::xcore_bitrev, 131740}, // __builtin_bitrev
+      {Intrinsic::xcore_getid, 131757}, // __builtin_getid
+      {Intrinsic::xcore_getps, 131773}, // __builtin_getps
+      {Intrinsic::xcore_setps, 131789}, // __builtin_setps
+    };
+    auto I = std::lower_bound(std::begin(xcoreNames),
+                              std::end(xcoreNames),
+                              BuiltinNameStr);
+    if (I != std::end(xcoreNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  return Intrinsic::not_intrinsic;
+}
+#endif
+
+// Get the LLVM intrinsic that corresponds to a builtin.
+// This is used by the C front-end.  The builtin name is passed
+// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed
+// in as TargetPrefix.  The result is assigned to 'IntrinsicID'.
+#ifdef GET_LLVM_INTRINSIC_FOR_MS_BUILTIN
+Intrinsic::ID Intrinsic::getIntrinsicForMSBuiltin(const char *TargetPrefixStr, StringRef BuiltinNameStr) {
+  static const char BuiltinNames[] = {
+  '_', '_', 'd', 'm', 'b', '\000', '_', '_', 'd', 's', 'b', '\000', '_', '_', 'i',
+  's', 'b', '\000', '_', 'M', 'o', 'v', 'e', 'F', 'r', 'o', 'm', 'C', 'o', 'p',
+  'r', 'o', 'c', 'e', 's', 's', 'o', 'r', '\000', '_', 'M', 'o', 'v', 'e', 'F',
+  'r', 'o', 'm', 'C', 'o', 'p', 'r', 'o', 'c', 'e', 's', 's', 'o', 'r', '2',
+  '\000',
+  };
+
+  struct BuiltinEntry {
+    Intrinsic::ID IntrinID;
+    unsigned StrTabOffset;
+    const char *getName() const {
+      return &BuiltinNames[StrTabOffset];
+    }
+    bool operator<(StringRef RHS) const {
+      return strncmp(getName(), RHS.data(), RHS.size()) < 0;
+    }
+  };
+  StringRef TargetPrefix(TargetPrefixStr);
+
+  if (TargetPrefix == "aarch64") {
+    static const BuiltinEntry aarch64Names[] = {
+      {Intrinsic::aarch64_dmb, 0}, // __dmb
+      {Intrinsic::aarch64_dsb, 6}, // __dsb
+      {Intrinsic::aarch64_isb, 12}, // __isb
+    };
+    auto I = std::lower_bound(std::begin(aarch64Names),
+                              std::end(aarch64Names),
+                              BuiltinNameStr);
+    if (I != std::end(aarch64Names) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  if (TargetPrefix == "arm") {
+    static const BuiltinEntry armNames[] = {
+      {Intrinsic::arm_mrc, 18}, // _MoveFromCoprocessor
+      {Intrinsic::arm_mrc2, 39}, // _MoveFromCoprocessor2
+      {Intrinsic::arm_dmb, 0}, // __dmb
+      {Intrinsic::arm_dsb, 6}, // __dsb
+      {Intrinsic::arm_isb, 12}, // __isb
+    };
+    auto I = std::lower_bound(std::begin(armNames),
+                              std::end(armNames),
+                              BuiltinNameStr);
+    if (I != std::end(armNames) &&
+        I->getName() == BuiltinNameStr)
+      return I->IntrinID;
+  }
+  return Intrinsic::not_intrinsic;
+}
+#endif
+
+#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
+// let's return it to _setjmp state
+#  pragma pop_macro("setjmp")
+#  undef setjmp_undefined_for_msvc
+#endif
+
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicInst.h b/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
index 80d428c..32a62a4 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicInst.h
@@ -66,6 +66,27 @@
   /// This is the common base class for debug info intrinsics.
   class DbgInfoIntrinsic : public IntrinsicInst {
   public:
+    /// \name Casting methods
+    /// @{
+    static bool classof(const IntrinsicInst *I) {
+      switch (I->getIntrinsicID()) {
+      case Intrinsic::dbg_declare:
+      case Intrinsic::dbg_value:
+      case Intrinsic::dbg_addr:
+      case Intrinsic::dbg_label:
+        return true;
+      default: return false;
+      }
+    }
+    static bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+    /// @}
+  };
+
+  /// This is the common base class for debug info intrinsics for variables.
+  class DbgVariableIntrinsic : public DbgInfoIntrinsic {
+  public:
     /// Get the location corresponding to the variable referenced by the debug
     /// info intrinsic.  Depending on the intrinsic, this could be the
     /// variable's value or its address.
@@ -93,6 +114,10 @@
       return cast<MetadataAsValue>(getArgOperand(2))->getMetadata();
     }
 
+    /// Get the size (in bits) of the variable, or fragment of the variable that
+    /// is described.
+    Optional<uint64_t> getFragmentSizeInBits() const;
+
     /// \name Casting methods
     /// @{
     static bool classof(const IntrinsicInst *I) {
@@ -111,7 +136,7 @@
   };
 
   /// This represents the llvm.dbg.declare instruction.
-  class DbgDeclareInst : public DbgInfoIntrinsic {
+  class DbgDeclareInst : public DbgVariableIntrinsic {
   public:
     Value *getAddress() const { return getVariableLocation(); }
 
@@ -127,7 +152,7 @@
   };
 
   /// This represents the llvm.dbg.addr instruction.
-  class DbgAddrIntrinsic : public DbgInfoIntrinsic {
+  class DbgAddrIntrinsic : public DbgVariableIntrinsic {
   public:
     Value *getAddress() const { return getVariableLocation(); }
 
@@ -142,7 +167,7 @@
   };
 
   /// This represents the llvm.dbg.value instruction.
-  class DbgValueInst : public DbgInfoIntrinsic {
+  class DbgValueInst : public DbgVariableIntrinsic {
   public:
     Value *getValue() const {
       return getVariableLocation(/* AllowNullOp = */ false);
@@ -159,6 +184,28 @@
     /// @}
   };
 
+  /// This represents the llvm.dbg.label instruction.
+  class DbgLabelInst : public DbgInfoIntrinsic {
+  public:
+    DILabel *getLabel() const {
+      return cast<DILabel>(getRawLabel());
+    }
+
+    Metadata *getRawLabel() const {
+      return cast<MetadataAsValue>(getArgOperand(0))->getMetadata();
+    }
+
+    /// Methods for support type inquiry through isa, cast, and dyn_cast:
+    /// @{
+    static bool classof(const IntrinsicInst *I) {
+      return I->getIntrinsicID() == Intrinsic::dbg_label;
+    }
+    static bool classof(const Value *V) {
+      return isa<IntrinsicInst>(V) && classof(cast<IntrinsicInst>(V));
+    }
+    /// @}
+  };
+
   /// This is the common base class for constrained floating point intrinsics.
   class ConstrainedFPIntrinsic : public IntrinsicInst {
   public:
@@ -266,6 +313,71 @@
     }
   };
 
+  /// Common base class for all memory transfer intrinsics. Simply provides
+  /// common methods.
+  template <class BaseCL> class MemTransferBase : public BaseCL {
+  private:
+    enum { ARG_SOURCE = 1 };
+
+  public:
+    /// Return the arguments to the instruction.
+    Value *getRawSource() const {
+      return const_cast<Value *>(BaseCL::getArgOperand(ARG_SOURCE));
+    }
+    const Use &getRawSourceUse() const {
+      return BaseCL::getArgOperandUse(ARG_SOURCE);
+    }
+    Use &getRawSourceUse() { return BaseCL::getArgOperandUse(ARG_SOURCE); }
+
+    /// This is just like getRawSource, but it strips off any cast
+    /// instructions that feed it, giving the original input.  The returned
+    /// value is guaranteed to be a pointer.
+    Value *getSource() const { return getRawSource()->stripPointerCasts(); }
+
+    unsigned getSourceAddressSpace() const {
+      return cast<PointerType>(getRawSource()->getType())->getAddressSpace();
+    }
+
+    unsigned getSourceAlignment() const {
+      return BaseCL::getParamAlignment(ARG_SOURCE);
+    }
+
+    void setSource(Value *Ptr) {
+      assert(getRawSource()->getType() == Ptr->getType() &&
+             "setSource called with pointer of wrong type!");
+      BaseCL::setArgOperand(ARG_SOURCE, Ptr);
+    }
+
+    void setSourceAlignment(unsigned Align) {
+      BaseCL::removeParamAttr(ARG_SOURCE, Attribute::Alignment);
+      if (Align > 0)
+        BaseCL::addParamAttr(ARG_SOURCE, Attribute::getWithAlignment(
+                                             BaseCL::getContext(), Align));
+    }
+  };
+
+  /// Common base class for all memset intrinsics. Simply provides
+  /// common methods.
+  template <class BaseCL> class MemSetBase : public BaseCL {
+  private:
+    enum { ARG_VALUE = 1 };
+
+  public:
+    Value *getValue() const {
+      return const_cast<Value *>(BaseCL::getArgOperand(ARG_VALUE));
+    }
+    const Use &getValueUse() const {
+      return BaseCL::getArgOperandUse(ARG_VALUE);
+    }
+    Use &getValueUse() { return BaseCL::getArgOperandUse(ARG_VALUE); }
+
+    void setValue(Value *Val) {
+      assert(getValue()->getType() == Val->getType() &&
+             "setValue called with value of wrong type!");
+      BaseCL::setArgOperand(ARG_VALUE, Val);
+    }
+  };
+
   // The common base class for the atomic memset/memmove/memcpy intrinsics
   // i.e. llvm.element.unordered.atomic.memset/memcpy/memmove
   class AtomicMemIntrinsic : public MemIntrinsicBase<AtomicMemIntrinsic> {
@@ -308,23 +420,8 @@
 
   /// This class represents atomic memset intrinsic
   // i.e. llvm.element.unordered.atomic.memset
-  class AtomicMemSetInst : public AtomicMemIntrinsic {
-  private:
-    enum { ARG_VALUE = 1 };
-
+  class AtomicMemSetInst : public MemSetBase<AtomicMemIntrinsic> {
   public:
-    Value *getValue() const {
-      return const_cast<Value *>(getArgOperand(ARG_VALUE));
-    }
-    const Use &getValueUse() const { return getArgOperandUse(ARG_VALUE); }
-    Use &getValueUse() { return getArgOperandUse(ARG_VALUE); }
-
-    void setValue(Value *Val) {
-      assert(getValue()->getType() == Val->getType() &&
-             "setValue called with value of wrong type!");
-      setArgOperand(ARG_VALUE, Val);
-    }
-
     static bool classof(const IntrinsicInst *I) {
       return I->getIntrinsicID() == Intrinsic::memset_element_unordered_atomic;
     }
@@ -335,44 +432,8 @@
 
   // This class wraps the atomic memcpy/memmove intrinsics
   // i.e. llvm.element.unordered.atomic.memcpy/memmove
-  class AtomicMemTransferInst : public AtomicMemIntrinsic {
-  private:
-    enum { ARG_SOURCE = 1 };
-
+  class AtomicMemTransferInst : public MemTransferBase<AtomicMemIntrinsic> {
   public:
-    /// Return the arguments to the instruction.
-    Value *getRawSource() const {
-      return const_cast<Value *>(getArgOperand(ARG_SOURCE));
-    }
-    const Use &getRawSourceUse() const { return getArgOperandUse(ARG_SOURCE); }
-    Use &getRawSourceUse() { return getArgOperandUse(ARG_SOURCE); }
-
-    /// This is just like getRawSource, but it strips off any cast
-    /// instructions that feed it, giving the original input.  The returned
-    /// value is guaranteed to be a pointer.
-    Value *getSource() const { return getRawSource()->stripPointerCasts(); }
-
-    unsigned getSourceAddressSpace() const {
-      return cast<PointerType>(getRawSource()->getType())->getAddressSpace();
-    }
-
-    unsigned getSourceAlignment() const {
-      return getParamAlignment(ARG_SOURCE);
-    }
-
-    void setSource(Value *Ptr) {
-      assert(getRawSource()->getType() == Ptr->getType() &&
-             "setSource called with pointer of wrong type!");
-      setArgOperand(ARG_SOURCE, Ptr);
-    }
-
-    void setSourceAlignment(unsigned Align) {
-      removeParamAttr(ARG_SOURCE, Attribute::Alignment);
-      if (Align > 0)
-        addParamAttr(ARG_SOURCE,
-                     Attribute::getWithAlignment(getContext(), Align));
-    }
-
     static bool classof(const IntrinsicInst *I) {
       switch (I->getIntrinsicID()) {
       case Intrinsic::memcpy_element_unordered_atomic:
@@ -444,19 +505,8 @@
   };
 
   /// This class wraps the llvm.memset intrinsic.
-  class MemSetInst : public MemIntrinsic {
+  class MemSetInst : public MemSetBase<MemIntrinsic> {
   public:
-    /// Return the arguments to the instruction.
-    Value *getValue() const { return const_cast<Value*>(getArgOperand(1)); }
-    const Use &getValueUse() const { return getArgOperandUse(1); }
-    Use &getValueUse() { return getArgOperandUse(1); }
-
-    void setValue(Value *Val) {
-      assert(getValue()->getType() == Val->getType() &&
-             "setValue called with value of wrong type!");
-      setArgOperand(1, Val);
-    }
-
     // Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const IntrinsicInst *I) {
       return I->getIntrinsicID() == Intrinsic::memset;
@@ -467,42 +517,8 @@
   };
 
   /// This class wraps the llvm.memcpy/memmove intrinsics.
-  class MemTransferInst : public MemIntrinsic {
-  private:
-    enum { ARG_SOURCE = 1 };
-
+  class MemTransferInst : public MemTransferBase<MemIntrinsic> {
   public:
-    /// Return the arguments to the instruction.
-    Value *getRawSource() const { return const_cast<Value*>(getArgOperand(ARG_SOURCE)); }
-    const Use &getRawSourceUse() const { return getArgOperandUse(ARG_SOURCE); }
-    Use &getRawSourceUse() { return getArgOperandUse(ARG_SOURCE); }
-
-    /// This is just like getRawSource, but it strips off any cast
-    /// instructions that feed it, giving the original input.  The returned
-    /// value is guaranteed to be a pointer.
-    Value *getSource() const { return getRawSource()->stripPointerCasts(); }
-
-    unsigned getSourceAddressSpace() const {
-      return cast<PointerType>(getRawSource()->getType())->getAddressSpace();
-    }
-
-    unsigned getSourceAlignment() const {
-      return getParamAlignment(ARG_SOURCE);
-    }
-
-    void setSource(Value *Ptr) {
-      assert(getRawSource()->getType() == Ptr->getType() &&
-             "setSource called with pointer of wrong type!");
-      setArgOperand(ARG_SOURCE, Ptr);
-    }
-
-    void setSourceAlignment(unsigned Align) {
-      removeParamAttr(ARG_SOURCE, Attribute::Alignment);
-      if (Align > 0)
-        addParamAttr(ARG_SOURCE,
-                     Attribute::getWithAlignment(getContext(), Align));
-    }
-
     // Methods for support type inquiry through isa, cast, and dyn_cast:
     static bool classof(const IntrinsicInst *I) {
       return I->getIntrinsicID() == Intrinsic::memcpy ||
@@ -571,23 +587,8 @@
   /// This class represents any memset intrinsic
   // i.e. llvm.element.unordered.atomic.memset
   // and  llvm.memset
-  class AnyMemSetInst : public AnyMemIntrinsic {
-  private:
-    enum { ARG_VALUE = 1 };
-
+  class AnyMemSetInst : public MemSetBase<AnyMemIntrinsic> {
   public:
-    Value *getValue() const {
-      return const_cast<Value *>(getArgOperand(ARG_VALUE));
-    }
-    const Use &getValueUse() const { return getArgOperandUse(ARG_VALUE); }
-    Use &getValueUse() { return getArgOperandUse(ARG_VALUE); }
-
-    void setValue(Value *Val) {
-      assert(getValue()->getType() == Val->getType() &&
-             "setValue called with value of wrong type!");
-      setArgOperand(ARG_VALUE, Val);
-    }
-
     static bool classof(const IntrinsicInst *I) {
       switch (I->getIntrinsicID()) {
       case Intrinsic::memset:
@@ -605,44 +606,8 @@
   // This class wraps any memcpy/memmove intrinsics
   // i.e. llvm.element.unordered.atomic.memcpy/memmove
   // and  llvm.memcpy/memmove
-  class AnyMemTransferInst : public AnyMemIntrinsic {
-  private:
-    enum { ARG_SOURCE = 1 };
-
+  class AnyMemTransferInst : public MemTransferBase<AnyMemIntrinsic> {
   public:
-    /// Return the arguments to the instruction.
-    Value *getRawSource() const {
-      return const_cast<Value *>(getArgOperand(ARG_SOURCE));
-    }
-    const Use &getRawSourceUse() const { return getArgOperandUse(ARG_SOURCE); }
-    Use &getRawSourceUse() { return getArgOperandUse(ARG_SOURCE); }
-
-    /// This is just like getRawSource, but it strips off any cast
-    /// instructions that feed it, giving the original input.  The returned
-    /// value is guaranteed to be a pointer.
-    Value *getSource() const { return getRawSource()->stripPointerCasts(); }
-
-    unsigned getSourceAddressSpace() const {
-      return cast<PointerType>(getRawSource()->getType())->getAddressSpace();
-    }
-
-    unsigned getSourceAlignment() const {
-      return getParamAlignment(ARG_SOURCE);
-    }
-
-    void setSource(Value *Ptr) {
-      assert(getRawSource()->getType() == Ptr->getType() &&
-             "setSource called with pointer of wrong type!");
-      setArgOperand(ARG_SOURCE, Ptr);
-    }
-
-    void setSourceAlignment(unsigned Align) {
-      removeParamAttr(ARG_SOURCE, Attribute::Alignment);
-      if (Align > 0)
-        addParamAttr(ARG_SOURCE,
-                     Attribute::getWithAlignment(getContext(), Align));
-    }
-
     static bool classof(const IntrinsicInst *I) {
       switch (I->getIntrinsicID()) {
       case Intrinsic::memcpy:
diff --git a/linux-x64/clang/include/llvm/IR/Intrinsics.gen b/linux-x64/clang/include/llvm/IR/Intrinsics.gen
deleted file mode 100644
index 7919f07..0000000
--- a/linux-x64/clang/include/llvm/IR/Intrinsics.gen
+++ /dev/null
@@ -1,36169 +0,0 @@
-/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
-|*                                                                            *|
-|* Intrinsic Function Source Fragment                                         *|
-|*                                                                            *|
-|* Automatically generated file, do not edit!                                 *|
-|*                                                                            *|
-\*===----------------------------------------------------------------------===*/
-
-// VisualStudio defines setjmp as _setjmp
-#if defined(_MSC_VER) && defined(setjmp) && \
-                         !defined(setjmp_undefined_for_msvc)
-#  pragma push_macro("setjmp")
-#  undef setjmp
-#  define setjmp_undefined_for_msvc
-#endif
-
-// Enum values for Intrinsics.h
-#ifdef GET_INTRINSIC_ENUM_VALUES
-    addressofreturnaddress,                    // llvm.addressofreturnaddress
-    adjust_trampoline,                         // llvm.adjust.trampoline
-    annotation,                                // llvm.annotation
-    assume,                                    // llvm.assume
-    bitreverse,                                // llvm.bitreverse
-    bswap,                                     // llvm.bswap
-    canonicalize,                              // llvm.canonicalize
-    ceil,                                      // llvm.ceil
-    clear_cache,                               // llvm.clear_cache
-    codeview_annotation,                       // llvm.codeview.annotation
-    convert_from_fp16,                         // llvm.convert.from.fp16
-    convert_to_fp16,                           // llvm.convert.to.fp16
-    copysign,                                  // llvm.copysign
-    coro_alloc,                                // llvm.coro.alloc
-    coro_begin,                                // llvm.coro.begin
-    coro_destroy,                              // llvm.coro.destroy
-    coro_done,                                 // llvm.coro.done
-    coro_end,                                  // llvm.coro.end
-    coro_frame,                                // llvm.coro.frame
-    coro_free,                                 // llvm.coro.free
-    coro_id,                                   // llvm.coro.id
-    coro_param,                                // llvm.coro.param
-    coro_promise,                              // llvm.coro.promise
-    coro_resume,                               // llvm.coro.resume
-    coro_save,                                 // llvm.coro.save
-    coro_size,                                 // llvm.coro.size
-    coro_subfn_addr,                           // llvm.coro.subfn.addr
-    coro_suspend,                              // llvm.coro.suspend
-    cos,                                       // llvm.cos
-    ctlz,                                      // llvm.ctlz
-    ctpop,                                     // llvm.ctpop
-    cttz,                                      // llvm.cttz
-    dbg_addr,                                  // llvm.dbg.addr
-    dbg_declare,                               // llvm.dbg.declare
-    dbg_value,                                 // llvm.dbg.value
-    debugtrap,                                 // llvm.debugtrap
-    donothing,                                 // llvm.donothing
-    eh_dwarf_cfa,                              // llvm.eh.dwarf.cfa
-    eh_exceptioncode,                          // llvm.eh.exceptioncode
-    eh_exceptionpointer,                       // llvm.eh.exceptionpointer
-    eh_return_i32,                             // llvm.eh.return.i32
-    eh_return_i64,                             // llvm.eh.return.i64
-    eh_sjlj_callsite,                          // llvm.eh.sjlj.callsite
-    eh_sjlj_functioncontext,                   // llvm.eh.sjlj.functioncontext
-    eh_sjlj_longjmp,                           // llvm.eh.sjlj.longjmp
-    eh_sjlj_lsda,                              // llvm.eh.sjlj.lsda
-    eh_sjlj_setjmp,                            // llvm.eh.sjlj.setjmp
-    eh_sjlj_setup_dispatch,                    // llvm.eh.sjlj.setup.dispatch
-    eh_typeid_for,                             // llvm.eh.typeid.for
-    eh_unwind_init,                            // llvm.eh.unwind.init
-    exp,                                       // llvm.exp
-    exp2,                                      // llvm.exp2
-    expect,                                    // llvm.expect
-    experimental_constrained_cos,              // llvm.experimental.constrained.cos
-    experimental_constrained_exp,              // llvm.experimental.constrained.exp
-    experimental_constrained_exp2,             // llvm.experimental.constrained.exp2
-    experimental_constrained_fadd,             // llvm.experimental.constrained.fadd
-    experimental_constrained_fdiv,             // llvm.experimental.constrained.fdiv
-    experimental_constrained_fma,              // llvm.experimental.constrained.fma
-    experimental_constrained_fmul,             // llvm.experimental.constrained.fmul
-    experimental_constrained_frem,             // llvm.experimental.constrained.frem
-    experimental_constrained_fsub,             // llvm.experimental.constrained.fsub
-    experimental_constrained_log,              // llvm.experimental.constrained.log
-    experimental_constrained_log10,            // llvm.experimental.constrained.log10
-    experimental_constrained_log2,             // llvm.experimental.constrained.log2
-    experimental_constrained_nearbyint,        // llvm.experimental.constrained.nearbyint
-    experimental_constrained_pow,              // llvm.experimental.constrained.pow
-    experimental_constrained_powi,             // llvm.experimental.constrained.powi
-    experimental_constrained_rint,             // llvm.experimental.constrained.rint
-    experimental_constrained_sin,              // llvm.experimental.constrained.sin
-    experimental_constrained_sqrt,             // llvm.experimental.constrained.sqrt
-    experimental_deoptimize,                   // llvm.experimental.deoptimize
-    experimental_gc_relocate,                  // llvm.experimental.gc.relocate
-    experimental_gc_result,                    // llvm.experimental.gc.result
-    experimental_gc_statepoint,                // llvm.experimental.gc.statepoint
-    experimental_guard,                        // llvm.experimental.guard
-    experimental_patchpoint_i64,               // llvm.experimental.patchpoint.i64
-    experimental_patchpoint_void,              // llvm.experimental.patchpoint.void
-    experimental_stackmap,                     // llvm.experimental.stackmap
-    experimental_vector_reduce_add,            // llvm.experimental.vector.reduce.add
-    experimental_vector_reduce_and,            // llvm.experimental.vector.reduce.and
-    experimental_vector_reduce_fadd,           // llvm.experimental.vector.reduce.fadd
-    experimental_vector_reduce_fmax,           // llvm.experimental.vector.reduce.fmax
-    experimental_vector_reduce_fmin,           // llvm.experimental.vector.reduce.fmin
-    experimental_vector_reduce_fmul,           // llvm.experimental.vector.reduce.fmul
-    experimental_vector_reduce_mul,            // llvm.experimental.vector.reduce.mul
-    experimental_vector_reduce_or,             // llvm.experimental.vector.reduce.or
-    experimental_vector_reduce_smax,           // llvm.experimental.vector.reduce.smax
-    experimental_vector_reduce_smin,           // llvm.experimental.vector.reduce.smin
-    experimental_vector_reduce_umax,           // llvm.experimental.vector.reduce.umax
-    experimental_vector_reduce_umin,           // llvm.experimental.vector.reduce.umin
-    experimental_vector_reduce_xor,            // llvm.experimental.vector.reduce.xor
-    fabs,                                      // llvm.fabs
-    floor,                                     // llvm.floor
-    flt_rounds,                                // llvm.flt.rounds
-    fma,                                       // llvm.fma
-    fmuladd,                                   // llvm.fmuladd
-    frameaddress,                              // llvm.frameaddress
-    gcread,                                    // llvm.gcread
-    gcroot,                                    // llvm.gcroot
-    gcwrite,                                   // llvm.gcwrite
-    get_dynamic_area_offset,                   // llvm.get.dynamic.area.offset
-    icall_branch_funnel,                       // llvm.icall.branch.funnel
-    init_trampoline,                           // llvm.init.trampoline
-    instrprof_increment,                       // llvm.instrprof.increment
-    instrprof_increment_step,                  // llvm.instrprof.increment.step
-    instrprof_value_profile,                   // llvm.instrprof.value.profile
-    invariant_end,                             // llvm.invariant.end
-    invariant_group_barrier,                   // llvm.invariant.group.barrier
-    invariant_start,                           // llvm.invariant.start
-    lifetime_end,                              // llvm.lifetime.end
-    lifetime_start,                            // llvm.lifetime.start
-    load_relative,                             // llvm.load.relative
-    localaddress,                              // llvm.localaddress
-    localescape,                               // llvm.localescape
-    localrecover,                              // llvm.localrecover
-    log,                                       // llvm.log
-    log10,                                     // llvm.log10
-    log2,                                      // llvm.log2
-    longjmp,                                   // llvm.longjmp
-    masked_compressstore,                      // llvm.masked.compressstore
-    masked_expandload,                         // llvm.masked.expandload
-    masked_gather,                             // llvm.masked.gather
-    masked_load,                               // llvm.masked.load
-    masked_scatter,                            // llvm.masked.scatter
-    masked_store,                              // llvm.masked.store
-    maxnum,                                    // llvm.maxnum
-    memcpy,                                    // llvm.memcpy
-    memcpy_element_unordered_atomic,           // llvm.memcpy.element.unordered.atomic
-    memmove,                                   // llvm.memmove
-    memmove_element_unordered_atomic,          // llvm.memmove.element.unordered.atomic
-    memset,                                    // llvm.memset
-    memset_element_unordered_atomic,           // llvm.memset.element.unordered.atomic
-    minnum,                                    // llvm.minnum
-    nearbyint,                                 // llvm.nearbyint
-    objectsize,                                // llvm.objectsize
-    pcmarker,                                  // llvm.pcmarker
-    pow,                                       // llvm.pow
-    powi,                                      // llvm.powi
-    prefetch,                                  // llvm.prefetch
-    ptr_annotation,                            // llvm.ptr.annotation
-    read_register,                             // llvm.read_register
-    readcyclecounter,                          // llvm.readcyclecounter
-    returnaddress,                             // llvm.returnaddress
-    rint,                                      // llvm.rint
-    round,                                     // llvm.round
-    sadd_with_overflow,                        // llvm.sadd.with.overflow
-    setjmp,                                    // llvm.setjmp
-    sideeffect,                                // llvm.sideeffect
-    siglongjmp,                                // llvm.siglongjmp
-    sigsetjmp,                                 // llvm.sigsetjmp
-    sin,                                       // llvm.sin
-    smul_with_overflow,                        // llvm.smul.with.overflow
-    sqrt,                                      // llvm.sqrt
-    ssa_copy,                                  // llvm.ssa.copy
-    ssub_with_overflow,                        // llvm.ssub.with.overflow
-    stackguard,                                // llvm.stackguard
-    stackprotector,                            // llvm.stackprotector
-    stackrestore,                              // llvm.stackrestore
-    stacksave,                                 // llvm.stacksave
-    thread_pointer,                            // llvm.thread.pointer
-    trap,                                      // llvm.trap
-    trunc,                                     // llvm.trunc
-    type_checked_load,                         // llvm.type.checked.load
-    type_test,                                 // llvm.type.test
-    uadd_with_overflow,                        // llvm.uadd.with.overflow
-    umul_with_overflow,                        // llvm.umul.with.overflow
-    usub_with_overflow,                        // llvm.usub.with.overflow
-    vacopy,                                    // llvm.va_copy
-    vaend,                                     // llvm.va_end
-    vastart,                                   // llvm.va_start
-    var_annotation,                            // llvm.var.annotation
-    write_register,                            // llvm.write_register
-    xray_customevent,                          // llvm.xray.customevent
-    aarch64_clrex,                             // llvm.aarch64.clrex
-    aarch64_crc32b,                            // llvm.aarch64.crc32b
-    aarch64_crc32cb,                           // llvm.aarch64.crc32cb
-    aarch64_crc32ch,                           // llvm.aarch64.crc32ch
-    aarch64_crc32cw,                           // llvm.aarch64.crc32cw
-    aarch64_crc32cx,                           // llvm.aarch64.crc32cx
-    aarch64_crc32h,                            // llvm.aarch64.crc32h
-    aarch64_crc32w,                            // llvm.aarch64.crc32w
-    aarch64_crc32x,                            // llvm.aarch64.crc32x
-    aarch64_crypto_aesd,                       // llvm.aarch64.crypto.aesd
-    aarch64_crypto_aese,                       // llvm.aarch64.crypto.aese
-    aarch64_crypto_aesimc,                     // llvm.aarch64.crypto.aesimc
-    aarch64_crypto_aesmc,                      // llvm.aarch64.crypto.aesmc
-    aarch64_crypto_sha1c,                      // llvm.aarch64.crypto.sha1c
-    aarch64_crypto_sha1h,                      // llvm.aarch64.crypto.sha1h
-    aarch64_crypto_sha1m,                      // llvm.aarch64.crypto.sha1m
-    aarch64_crypto_sha1p,                      // llvm.aarch64.crypto.sha1p
-    aarch64_crypto_sha1su0,                    // llvm.aarch64.crypto.sha1su0
-    aarch64_crypto_sha1su1,                    // llvm.aarch64.crypto.sha1su1
-    aarch64_crypto_sha256h,                    // llvm.aarch64.crypto.sha256h
-    aarch64_crypto_sha256h2,                   // llvm.aarch64.crypto.sha256h2
-    aarch64_crypto_sha256su0,                  // llvm.aarch64.crypto.sha256su0
-    aarch64_crypto_sha256su1,                  // llvm.aarch64.crypto.sha256su1
-    aarch64_dmb,                               // llvm.aarch64.dmb
-    aarch64_dsb,                               // llvm.aarch64.dsb
-    aarch64_hint,                              // llvm.aarch64.hint
-    aarch64_isb,                               // llvm.aarch64.isb
-    aarch64_ldaxp,                             // llvm.aarch64.ldaxp
-    aarch64_ldaxr,                             // llvm.aarch64.ldaxr
-    aarch64_ldxp,                              // llvm.aarch64.ldxp
-    aarch64_ldxr,                              // llvm.aarch64.ldxr
-    aarch64_neon_abs,                          // llvm.aarch64.neon.abs
-    aarch64_neon_addhn,                        // llvm.aarch64.neon.addhn
-    aarch64_neon_addp,                         // llvm.aarch64.neon.addp
-    aarch64_neon_cls,                          // llvm.aarch64.neon.cls
-    aarch64_neon_fabd,                         // llvm.aarch64.neon.fabd
-    aarch64_neon_facge,                        // llvm.aarch64.neon.facge
-    aarch64_neon_facgt,                        // llvm.aarch64.neon.facgt
-    aarch64_neon_faddv,                        // llvm.aarch64.neon.faddv
-    aarch64_neon_fcvtas,                       // llvm.aarch64.neon.fcvtas
-    aarch64_neon_fcvtau,                       // llvm.aarch64.neon.fcvtau
-    aarch64_neon_fcvtms,                       // llvm.aarch64.neon.fcvtms
-    aarch64_neon_fcvtmu,                       // llvm.aarch64.neon.fcvtmu
-    aarch64_neon_fcvtns,                       // llvm.aarch64.neon.fcvtns
-    aarch64_neon_fcvtnu,                       // llvm.aarch64.neon.fcvtnu
-    aarch64_neon_fcvtps,                       // llvm.aarch64.neon.fcvtps
-    aarch64_neon_fcvtpu,                       // llvm.aarch64.neon.fcvtpu
-    aarch64_neon_fcvtxn,                       // llvm.aarch64.neon.fcvtxn
-    aarch64_neon_fcvtzs,                       // llvm.aarch64.neon.fcvtzs
-    aarch64_neon_fcvtzu,                       // llvm.aarch64.neon.fcvtzu
-    aarch64_neon_fmax,                         // llvm.aarch64.neon.fmax
-    aarch64_neon_fmaxnm,                       // llvm.aarch64.neon.fmaxnm
-    aarch64_neon_fmaxnmp,                      // llvm.aarch64.neon.fmaxnmp
-    aarch64_neon_fmaxnmv,                      // llvm.aarch64.neon.fmaxnmv
-    aarch64_neon_fmaxp,                        // llvm.aarch64.neon.fmaxp
-    aarch64_neon_fmaxv,                        // llvm.aarch64.neon.fmaxv
-    aarch64_neon_fmin,                         // llvm.aarch64.neon.fmin
-    aarch64_neon_fminnm,                       // llvm.aarch64.neon.fminnm
-    aarch64_neon_fminnmp,                      // llvm.aarch64.neon.fminnmp
-    aarch64_neon_fminnmv,                      // llvm.aarch64.neon.fminnmv
-    aarch64_neon_fminp,                        // llvm.aarch64.neon.fminp
-    aarch64_neon_fminv,                        // llvm.aarch64.neon.fminv
-    aarch64_neon_fmulx,                        // llvm.aarch64.neon.fmulx
-    aarch64_neon_frecpe,                       // llvm.aarch64.neon.frecpe
-    aarch64_neon_frecps,                       // llvm.aarch64.neon.frecps
-    aarch64_neon_frecpx,                       // llvm.aarch64.neon.frecpx
-    aarch64_neon_frintn,                       // llvm.aarch64.neon.frintn
-    aarch64_neon_frsqrte,                      // llvm.aarch64.neon.frsqrte
-    aarch64_neon_frsqrts,                      // llvm.aarch64.neon.frsqrts
-    aarch64_neon_ld1x2,                        // llvm.aarch64.neon.ld1x2
-    aarch64_neon_ld1x3,                        // llvm.aarch64.neon.ld1x3
-    aarch64_neon_ld1x4,                        // llvm.aarch64.neon.ld1x4
-    aarch64_neon_ld2,                          // llvm.aarch64.neon.ld2
-    aarch64_neon_ld2lane,                      // llvm.aarch64.neon.ld2lane
-    aarch64_neon_ld2r,                         // llvm.aarch64.neon.ld2r
-    aarch64_neon_ld3,                          // llvm.aarch64.neon.ld3
-    aarch64_neon_ld3lane,                      // llvm.aarch64.neon.ld3lane
-    aarch64_neon_ld3r,                         // llvm.aarch64.neon.ld3r
-    aarch64_neon_ld4,                          // llvm.aarch64.neon.ld4
-    aarch64_neon_ld4lane,                      // llvm.aarch64.neon.ld4lane
-    aarch64_neon_ld4r,                         // llvm.aarch64.neon.ld4r
-    aarch64_neon_pmul,                         // llvm.aarch64.neon.pmul
-    aarch64_neon_pmull,                        // llvm.aarch64.neon.pmull
-    aarch64_neon_pmull64,                      // llvm.aarch64.neon.pmull64
-    aarch64_neon_raddhn,                       // llvm.aarch64.neon.raddhn
-    aarch64_neon_rbit,                         // llvm.aarch64.neon.rbit
-    aarch64_neon_rshrn,                        // llvm.aarch64.neon.rshrn
-    aarch64_neon_rsubhn,                       // llvm.aarch64.neon.rsubhn
-    aarch64_neon_sabd,                         // llvm.aarch64.neon.sabd
-    aarch64_neon_saddlp,                       // llvm.aarch64.neon.saddlp
-    aarch64_neon_saddlv,                       // llvm.aarch64.neon.saddlv
-    aarch64_neon_saddv,                        // llvm.aarch64.neon.saddv
-    aarch64_neon_scalar_sqxtn,                 // llvm.aarch64.neon.scalar.sqxtn
-    aarch64_neon_scalar_sqxtun,                // llvm.aarch64.neon.scalar.sqxtun
-    aarch64_neon_scalar_uqxtn,                 // llvm.aarch64.neon.scalar.uqxtn
-    aarch64_neon_shadd,                        // llvm.aarch64.neon.shadd
-    aarch64_neon_shll,                         // llvm.aarch64.neon.shll
-    aarch64_neon_shsub,                        // llvm.aarch64.neon.shsub
-    aarch64_neon_smax,                         // llvm.aarch64.neon.smax
-    aarch64_neon_smaxp,                        // llvm.aarch64.neon.smaxp
-    aarch64_neon_smaxv,                        // llvm.aarch64.neon.smaxv
-    aarch64_neon_smin,                         // llvm.aarch64.neon.smin
-    aarch64_neon_sminp,                        // llvm.aarch64.neon.sminp
-    aarch64_neon_sminv,                        // llvm.aarch64.neon.sminv
-    aarch64_neon_smull,                        // llvm.aarch64.neon.smull
-    aarch64_neon_sqabs,                        // llvm.aarch64.neon.sqabs
-    aarch64_neon_sqadd,                        // llvm.aarch64.neon.sqadd
-    aarch64_neon_sqdmulh,                      // llvm.aarch64.neon.sqdmulh
-    aarch64_neon_sqdmull,                      // llvm.aarch64.neon.sqdmull
-    aarch64_neon_sqdmulls_scalar,              // llvm.aarch64.neon.sqdmulls.scalar
-    aarch64_neon_sqneg,                        // llvm.aarch64.neon.sqneg
-    aarch64_neon_sqrdmulh,                     // llvm.aarch64.neon.sqrdmulh
-    aarch64_neon_sqrshl,                       // llvm.aarch64.neon.sqrshl
-    aarch64_neon_sqrshrn,                      // llvm.aarch64.neon.sqrshrn
-    aarch64_neon_sqrshrun,                     // llvm.aarch64.neon.sqrshrun
-    aarch64_neon_sqshl,                        // llvm.aarch64.neon.sqshl
-    aarch64_neon_sqshlu,                       // llvm.aarch64.neon.sqshlu
-    aarch64_neon_sqshrn,                       // llvm.aarch64.neon.sqshrn
-    aarch64_neon_sqshrun,                      // llvm.aarch64.neon.sqshrun
-    aarch64_neon_sqsub,                        // llvm.aarch64.neon.sqsub
-    aarch64_neon_sqxtn,                        // llvm.aarch64.neon.sqxtn
-    aarch64_neon_sqxtun,                       // llvm.aarch64.neon.sqxtun
-    aarch64_neon_srhadd,                       // llvm.aarch64.neon.srhadd
-    aarch64_neon_srshl,                        // llvm.aarch64.neon.srshl
-    aarch64_neon_sshl,                         // llvm.aarch64.neon.sshl
-    aarch64_neon_sshll,                        // llvm.aarch64.neon.sshll
-    aarch64_neon_st1x2,                        // llvm.aarch64.neon.st1x2
-    aarch64_neon_st1x3,                        // llvm.aarch64.neon.st1x3
-    aarch64_neon_st1x4,                        // llvm.aarch64.neon.st1x4
-    aarch64_neon_st2,                          // llvm.aarch64.neon.st2
-    aarch64_neon_st2lane,                      // llvm.aarch64.neon.st2lane
-    aarch64_neon_st3,                          // llvm.aarch64.neon.st3
-    aarch64_neon_st3lane,                      // llvm.aarch64.neon.st3lane
-    aarch64_neon_st4,                          // llvm.aarch64.neon.st4
-    aarch64_neon_st4lane,                      // llvm.aarch64.neon.st4lane
-    aarch64_neon_subhn,                        // llvm.aarch64.neon.subhn
-    aarch64_neon_suqadd,                       // llvm.aarch64.neon.suqadd
-    aarch64_neon_tbl1,                         // llvm.aarch64.neon.tbl1
-    aarch64_neon_tbl2,                         // llvm.aarch64.neon.tbl2
-    aarch64_neon_tbl3,                         // llvm.aarch64.neon.tbl3
-    aarch64_neon_tbl4,                         // llvm.aarch64.neon.tbl4
-    aarch64_neon_tbx1,                         // llvm.aarch64.neon.tbx1
-    aarch64_neon_tbx2,                         // llvm.aarch64.neon.tbx2
-    aarch64_neon_tbx3,                         // llvm.aarch64.neon.tbx3
-    aarch64_neon_tbx4,                         // llvm.aarch64.neon.tbx4
-    aarch64_neon_uabd,                         // llvm.aarch64.neon.uabd
-    aarch64_neon_uaddlp,                       // llvm.aarch64.neon.uaddlp
-    aarch64_neon_uaddlv,                       // llvm.aarch64.neon.uaddlv
-    aarch64_neon_uaddv,                        // llvm.aarch64.neon.uaddv
-    aarch64_neon_uhadd,                        // llvm.aarch64.neon.uhadd
-    aarch64_neon_uhsub,                        // llvm.aarch64.neon.uhsub
-    aarch64_neon_umax,                         // llvm.aarch64.neon.umax
-    aarch64_neon_umaxp,                        // llvm.aarch64.neon.umaxp
-    aarch64_neon_umaxv,                        // llvm.aarch64.neon.umaxv
-    aarch64_neon_umin,                         // llvm.aarch64.neon.umin
-    aarch64_neon_uminp,                        // llvm.aarch64.neon.uminp
-    aarch64_neon_uminv,                        // llvm.aarch64.neon.uminv
-    aarch64_neon_umull,                        // llvm.aarch64.neon.umull
-    aarch64_neon_uqadd,                        // llvm.aarch64.neon.uqadd
-    aarch64_neon_uqrshl,                       // llvm.aarch64.neon.uqrshl
-    aarch64_neon_uqrshrn,                      // llvm.aarch64.neon.uqrshrn
-    aarch64_neon_uqshl,                        // llvm.aarch64.neon.uqshl
-    aarch64_neon_uqshrn,                       // llvm.aarch64.neon.uqshrn
-    aarch64_neon_uqsub,                        // llvm.aarch64.neon.uqsub
-    aarch64_neon_uqxtn,                        // llvm.aarch64.neon.uqxtn
-    aarch64_neon_urecpe,                       // llvm.aarch64.neon.urecpe
-    aarch64_neon_urhadd,                       // llvm.aarch64.neon.urhadd
-    aarch64_neon_urshl,                        // llvm.aarch64.neon.urshl
-    aarch64_neon_ursqrte,                      // llvm.aarch64.neon.ursqrte
-    aarch64_neon_ushl,                         // llvm.aarch64.neon.ushl
-    aarch64_neon_ushll,                        // llvm.aarch64.neon.ushll
-    aarch64_neon_usqadd,                       // llvm.aarch64.neon.usqadd
-    aarch64_neon_vcopy_lane,                   // llvm.aarch64.neon.vcopy.lane
-    aarch64_neon_vcvtfp2fxs,                   // llvm.aarch64.neon.vcvtfp2fxs
-    aarch64_neon_vcvtfp2fxu,                   // llvm.aarch64.neon.vcvtfp2fxu
-    aarch64_neon_vcvtfp2hf,                    // llvm.aarch64.neon.vcvtfp2hf
-    aarch64_neon_vcvtfxs2fp,                   // llvm.aarch64.neon.vcvtfxs2fp
-    aarch64_neon_vcvtfxu2fp,                   // llvm.aarch64.neon.vcvtfxu2fp
-    aarch64_neon_vcvthf2fp,                    // llvm.aarch64.neon.vcvthf2fp
-    aarch64_neon_vsli,                         // llvm.aarch64.neon.vsli
-    aarch64_neon_vsri,                         // llvm.aarch64.neon.vsri
-    aarch64_sdiv,                              // llvm.aarch64.sdiv
-    aarch64_sisd_fabd,                         // llvm.aarch64.sisd.fabd
-    aarch64_sisd_fcvtxn,                       // llvm.aarch64.sisd.fcvtxn
-    aarch64_stlxp,                             // llvm.aarch64.stlxp
-    aarch64_stlxr,                             // llvm.aarch64.stlxr
-    aarch64_stxp,                              // llvm.aarch64.stxp
-    aarch64_stxr,                              // llvm.aarch64.stxr
-    aarch64_udiv,                              // llvm.aarch64.udiv
-    amdgcn_alignbit,                           // llvm.amdgcn.alignbit
-    amdgcn_alignbyte,                          // llvm.amdgcn.alignbyte
-    amdgcn_atomic_dec,                         // llvm.amdgcn.atomic.dec
-    amdgcn_atomic_inc,                         // llvm.amdgcn.atomic.inc
-    amdgcn_break,                              // llvm.amdgcn.break
-    amdgcn_buffer_atomic_add,                  // llvm.amdgcn.buffer.atomic.add
-    amdgcn_buffer_atomic_and,                  // llvm.amdgcn.buffer.atomic.and
-    amdgcn_buffer_atomic_cmpswap,              // llvm.amdgcn.buffer.atomic.cmpswap
-    amdgcn_buffer_atomic_or,                   // llvm.amdgcn.buffer.atomic.or
-    amdgcn_buffer_atomic_smax,                 // llvm.amdgcn.buffer.atomic.smax
-    amdgcn_buffer_atomic_smin,                 // llvm.amdgcn.buffer.atomic.smin
-    amdgcn_buffer_atomic_sub,                  // llvm.amdgcn.buffer.atomic.sub
-    amdgcn_buffer_atomic_swap,                 // llvm.amdgcn.buffer.atomic.swap
-    amdgcn_buffer_atomic_umax,                 // llvm.amdgcn.buffer.atomic.umax
-    amdgcn_buffer_atomic_umin,                 // llvm.amdgcn.buffer.atomic.umin
-    amdgcn_buffer_atomic_xor,                  // llvm.amdgcn.buffer.atomic.xor
-    amdgcn_buffer_load,                        // llvm.amdgcn.buffer.load
-    amdgcn_buffer_load_format,                 // llvm.amdgcn.buffer.load.format
-    amdgcn_buffer_store,                       // llvm.amdgcn.buffer.store
-    amdgcn_buffer_store_format,                // llvm.amdgcn.buffer.store.format
-    amdgcn_buffer_wbinvl1,                     // llvm.amdgcn.buffer.wbinvl1
-    amdgcn_buffer_wbinvl1_sc,                  // llvm.amdgcn.buffer.wbinvl1.sc
-    amdgcn_buffer_wbinvl1_vol,                 // llvm.amdgcn.buffer.wbinvl1.vol
-    amdgcn_class,                              // llvm.amdgcn.class
-    amdgcn_cos,                                // llvm.amdgcn.cos
-    amdgcn_cubeid,                             // llvm.amdgcn.cubeid
-    amdgcn_cubema,                             // llvm.amdgcn.cubema
-    amdgcn_cubesc,                             // llvm.amdgcn.cubesc
-    amdgcn_cubetc,                             // llvm.amdgcn.cubetc
-    amdgcn_cvt_pk_i16,                         // llvm.amdgcn.cvt.pk.i16
-    amdgcn_cvt_pk_u16,                         // llvm.amdgcn.cvt.pk.u16
-    amdgcn_cvt_pk_u8_f32,                      // llvm.amdgcn.cvt.pk.u8.f32
-    amdgcn_cvt_pknorm_i16,                     // llvm.amdgcn.cvt.pknorm.i16
-    amdgcn_cvt_pknorm_u16,                     // llvm.amdgcn.cvt.pknorm.u16
-    amdgcn_cvt_pkrtz,                          // llvm.amdgcn.cvt.pkrtz
-    amdgcn_dispatch_id,                        // llvm.amdgcn.dispatch.id
-    amdgcn_dispatch_ptr,                       // llvm.amdgcn.dispatch.ptr
-    amdgcn_div_fixup,                          // llvm.amdgcn.div.fixup
-    amdgcn_div_fmas,                           // llvm.amdgcn.div.fmas
-    amdgcn_div_scale,                          // llvm.amdgcn.div.scale
-    amdgcn_ds_bpermute,                        // llvm.amdgcn.ds.bpermute
-    amdgcn_ds_fadd,                            // llvm.amdgcn.ds.fadd
-    amdgcn_ds_fmax,                            // llvm.amdgcn.ds.fmax
-    amdgcn_ds_fmin,                            // llvm.amdgcn.ds.fmin
-    amdgcn_ds_permute,                         // llvm.amdgcn.ds.permute
-    amdgcn_ds_swizzle,                         // llvm.amdgcn.ds.swizzle
-    amdgcn_else,                               // llvm.amdgcn.else
-    amdgcn_else_break,                         // llvm.amdgcn.else.break
-    amdgcn_end_cf,                             // llvm.amdgcn.end.cf
-    amdgcn_exp,                                // llvm.amdgcn.exp
-    amdgcn_exp_compr,                          // llvm.amdgcn.exp.compr
-    amdgcn_fcmp,                               // llvm.amdgcn.fcmp
-    amdgcn_fdiv_fast,                          // llvm.amdgcn.fdiv.fast
-    amdgcn_fmed3,                              // llvm.amdgcn.fmed3
-    amdgcn_fmul_legacy,                        // llvm.amdgcn.fmul.legacy
-    amdgcn_fract,                              // llvm.amdgcn.fract
-    amdgcn_frexp_exp,                          // llvm.amdgcn.frexp.exp
-    amdgcn_frexp_mant,                         // llvm.amdgcn.frexp.mant
-    amdgcn_groupstaticsize,                    // llvm.amdgcn.groupstaticsize
-    amdgcn_icmp,                               // llvm.amdgcn.icmp
-    amdgcn_if,                                 // llvm.amdgcn.if
-    amdgcn_if_break,                           // llvm.amdgcn.if.break
-    amdgcn_image_atomic_add,                   // llvm.amdgcn.image.atomic.add
-    amdgcn_image_atomic_and,                   // llvm.amdgcn.image.atomic.and
-    amdgcn_image_atomic_cmpswap,               // llvm.amdgcn.image.atomic.cmpswap
-    amdgcn_image_atomic_dec,                   // llvm.amdgcn.image.atomic.dec
-    amdgcn_image_atomic_inc,                   // llvm.amdgcn.image.atomic.inc
-    amdgcn_image_atomic_or,                    // llvm.amdgcn.image.atomic.or
-    amdgcn_image_atomic_smax,                  // llvm.amdgcn.image.atomic.smax
-    amdgcn_image_atomic_smin,                  // llvm.amdgcn.image.atomic.smin
-    amdgcn_image_atomic_sub,                   // llvm.amdgcn.image.atomic.sub
-    amdgcn_image_atomic_swap,                  // llvm.amdgcn.image.atomic.swap
-    amdgcn_image_atomic_umax,                  // llvm.amdgcn.image.atomic.umax
-    amdgcn_image_atomic_umin,                  // llvm.amdgcn.image.atomic.umin
-    amdgcn_image_atomic_xor,                   // llvm.amdgcn.image.atomic.xor
-    amdgcn_image_gather4,                      // llvm.amdgcn.image.gather4
-    amdgcn_image_gather4_b,                    // llvm.amdgcn.image.gather4.b
-    amdgcn_image_gather4_b_cl,                 // llvm.amdgcn.image.gather4.b.cl
-    amdgcn_image_gather4_b_cl_o,               // llvm.amdgcn.image.gather4.b.cl.o
-    amdgcn_image_gather4_b_o,                  // llvm.amdgcn.image.gather4.b.o
-    amdgcn_image_gather4_c,                    // llvm.amdgcn.image.gather4.c
-    amdgcn_image_gather4_c_b,                  // llvm.amdgcn.image.gather4.c.b
-    amdgcn_image_gather4_c_b_cl,               // llvm.amdgcn.image.gather4.c.b.cl
-    amdgcn_image_gather4_c_b_cl_o,             // llvm.amdgcn.image.gather4.c.b.cl.o
-    amdgcn_image_gather4_c_b_o,                // llvm.amdgcn.image.gather4.c.b.o
-    amdgcn_image_gather4_c_cl,                 // llvm.amdgcn.image.gather4.c.cl
-    amdgcn_image_gather4_c_cl_o,               // llvm.amdgcn.image.gather4.c.cl.o
-    amdgcn_image_gather4_c_l,                  // llvm.amdgcn.image.gather4.c.l
-    amdgcn_image_gather4_c_l_o,                // llvm.amdgcn.image.gather4.c.l.o
-    amdgcn_image_gather4_c_lz,                 // llvm.amdgcn.image.gather4.c.lz
-    amdgcn_image_gather4_c_lz_o,               // llvm.amdgcn.image.gather4.c.lz.o
-    amdgcn_image_gather4_c_o,                  // llvm.amdgcn.image.gather4.c.o
-    amdgcn_image_gather4_cl,                   // llvm.amdgcn.image.gather4.cl
-    amdgcn_image_gather4_cl_o,                 // llvm.amdgcn.image.gather4.cl.o
-    amdgcn_image_gather4_l,                    // llvm.amdgcn.image.gather4.l
-    amdgcn_image_gather4_l_o,                  // llvm.amdgcn.image.gather4.l.o
-    amdgcn_image_gather4_lz,                   // llvm.amdgcn.image.gather4.lz
-    amdgcn_image_gather4_lz_o,                 // llvm.amdgcn.image.gather4.lz.o
-    amdgcn_image_gather4_o,                    // llvm.amdgcn.image.gather4.o
-    amdgcn_image_getlod,                       // llvm.amdgcn.image.getlod
-    amdgcn_image_getresinfo,                   // llvm.amdgcn.image.getresinfo
-    amdgcn_image_load,                         // llvm.amdgcn.image.load
-    amdgcn_image_load_mip,                     // llvm.amdgcn.image.load.mip
-    amdgcn_image_sample,                       // llvm.amdgcn.image.sample
-    amdgcn_image_sample_b,                     // llvm.amdgcn.image.sample.b
-    amdgcn_image_sample_b_cl,                  // llvm.amdgcn.image.sample.b.cl
-    amdgcn_image_sample_b_cl_o,                // llvm.amdgcn.image.sample.b.cl.o
-    amdgcn_image_sample_b_o,                   // llvm.amdgcn.image.sample.b.o
-    amdgcn_image_sample_c,                     // llvm.amdgcn.image.sample.c
-    amdgcn_image_sample_c_b,                   // llvm.amdgcn.image.sample.c.b
-    amdgcn_image_sample_c_b_cl,                // llvm.amdgcn.image.sample.c.b.cl
-    amdgcn_image_sample_c_b_cl_o,              // llvm.amdgcn.image.sample.c.b.cl.o
-    amdgcn_image_sample_c_b_o,                 // llvm.amdgcn.image.sample.c.b.o
-    amdgcn_image_sample_c_cd,                  // llvm.amdgcn.image.sample.c.cd
-    amdgcn_image_sample_c_cd_cl,               // llvm.amdgcn.image.sample.c.cd.cl
-    amdgcn_image_sample_c_cd_cl_o,             // llvm.amdgcn.image.sample.c.cd.cl.o
-    amdgcn_image_sample_c_cd_o,                // llvm.amdgcn.image.sample.c.cd.o
-    amdgcn_image_sample_c_cl,                  // llvm.amdgcn.image.sample.c.cl
-    amdgcn_image_sample_c_cl_o,                // llvm.amdgcn.image.sample.c.cl.o
-    amdgcn_image_sample_c_d,                   // llvm.amdgcn.image.sample.c.d
-    amdgcn_image_sample_c_d_cl,                // llvm.amdgcn.image.sample.c.d.cl
-    amdgcn_image_sample_c_d_cl_o,              // llvm.amdgcn.image.sample.c.d.cl.o
-    amdgcn_image_sample_c_d_o,                 // llvm.amdgcn.image.sample.c.d.o
-    amdgcn_image_sample_c_l,                   // llvm.amdgcn.image.sample.c.l
-    amdgcn_image_sample_c_l_o,                 // llvm.amdgcn.image.sample.c.l.o
-    amdgcn_image_sample_c_lz,                  // llvm.amdgcn.image.sample.c.lz
-    amdgcn_image_sample_c_lz_o,                // llvm.amdgcn.image.sample.c.lz.o
-    amdgcn_image_sample_c_o,                   // llvm.amdgcn.image.sample.c.o
-    amdgcn_image_sample_cd,                    // llvm.amdgcn.image.sample.cd
-    amdgcn_image_sample_cd_cl,                 // llvm.amdgcn.image.sample.cd.cl
-    amdgcn_image_sample_cd_cl_o,               // llvm.amdgcn.image.sample.cd.cl.o
-    amdgcn_image_sample_cd_o,                  // llvm.amdgcn.image.sample.cd.o
-    amdgcn_image_sample_cl,                    // llvm.amdgcn.image.sample.cl
-    amdgcn_image_sample_cl_o,                  // llvm.amdgcn.image.sample.cl.o
-    amdgcn_image_sample_d,                     // llvm.amdgcn.image.sample.d
-    amdgcn_image_sample_d_cl,                  // llvm.amdgcn.image.sample.d.cl
-    amdgcn_image_sample_d_cl_o,                // llvm.amdgcn.image.sample.d.cl.o
-    amdgcn_image_sample_d_o,                   // llvm.amdgcn.image.sample.d.o
-    amdgcn_image_sample_l,                     // llvm.amdgcn.image.sample.l
-    amdgcn_image_sample_l_o,                   // llvm.amdgcn.image.sample.l.o
-    amdgcn_image_sample_lz,                    // llvm.amdgcn.image.sample.lz
-    amdgcn_image_sample_lz_o,                  // llvm.amdgcn.image.sample.lz.o
-    amdgcn_image_sample_o,                     // llvm.amdgcn.image.sample.o
-    amdgcn_image_store,                        // llvm.amdgcn.image.store
-    amdgcn_image_store_mip,                    // llvm.amdgcn.image.store.mip
-    amdgcn_implicit_buffer_ptr,                // llvm.amdgcn.implicit.buffer.ptr
-    amdgcn_implicitarg_ptr,                    // llvm.amdgcn.implicitarg.ptr
-    amdgcn_init_exec,                          // llvm.amdgcn.init.exec
-    amdgcn_init_exec_from_input,               // llvm.amdgcn.init.exec.from.input
-    amdgcn_interp_mov,                         // llvm.amdgcn.interp.mov
-    amdgcn_interp_p1,                          // llvm.amdgcn.interp.p1
-    amdgcn_interp_p2,                          // llvm.amdgcn.interp.p2
-    amdgcn_kernarg_segment_ptr,                // llvm.amdgcn.kernarg.segment.ptr
-    amdgcn_kill,                               // llvm.amdgcn.kill
-    amdgcn_ldexp,                              // llvm.amdgcn.ldexp
-    amdgcn_lerp,                               // llvm.amdgcn.lerp
-    amdgcn_log_clamp,                          // llvm.amdgcn.log.clamp
-    amdgcn_loop,                               // llvm.amdgcn.loop
-    amdgcn_mbcnt_hi,                           // llvm.amdgcn.mbcnt.hi
-    amdgcn_mbcnt_lo,                           // llvm.amdgcn.mbcnt.lo
-    amdgcn_mov_dpp,                            // llvm.amdgcn.mov.dpp
-    amdgcn_mqsad_pk_u16_u8,                    // llvm.amdgcn.mqsad.pk.u16.u8
-    amdgcn_mqsad_u32_u8,                       // llvm.amdgcn.mqsad.u32.u8
-    amdgcn_msad_u8,                            // llvm.amdgcn.msad.u8
-    amdgcn_ps_live,                            // llvm.amdgcn.ps.live
-    amdgcn_qsad_pk_u16_u8,                     // llvm.amdgcn.qsad.pk.u16.u8
-    amdgcn_queue_ptr,                          // llvm.amdgcn.queue.ptr
-    amdgcn_rcp,                                // llvm.amdgcn.rcp
-    amdgcn_rcp_legacy,                         // llvm.amdgcn.rcp.legacy
-    amdgcn_readfirstlane,                      // llvm.amdgcn.readfirstlane
-    amdgcn_readlane,                           // llvm.amdgcn.readlane
-    amdgcn_rsq,                                // llvm.amdgcn.rsq
-    amdgcn_rsq_clamp,                          // llvm.amdgcn.rsq.clamp
-    amdgcn_rsq_legacy,                         // llvm.amdgcn.rsq.legacy
-    amdgcn_s_barrier,                          // llvm.amdgcn.s.barrier
-    amdgcn_s_dcache_inv,                       // llvm.amdgcn.s.dcache.inv
-    amdgcn_s_dcache_inv_vol,                   // llvm.amdgcn.s.dcache.inv.vol
-    amdgcn_s_dcache_wb,                        // llvm.amdgcn.s.dcache.wb
-    amdgcn_s_dcache_wb_vol,                    // llvm.amdgcn.s.dcache.wb.vol
-    amdgcn_s_decperflevel,                     // llvm.amdgcn.s.decperflevel
-    amdgcn_s_getpc,                            // llvm.amdgcn.s.getpc
-    amdgcn_s_getreg,                           // llvm.amdgcn.s.getreg
-    amdgcn_s_incperflevel,                     // llvm.amdgcn.s.incperflevel
-    amdgcn_s_memrealtime,                      // llvm.amdgcn.s.memrealtime
-    amdgcn_s_memtime,                          // llvm.amdgcn.s.memtime
-    amdgcn_s_sendmsg,                          // llvm.amdgcn.s.sendmsg
-    amdgcn_s_sendmsghalt,                      // llvm.amdgcn.s.sendmsghalt
-    amdgcn_s_sleep,                            // llvm.amdgcn.s.sleep
-    amdgcn_s_waitcnt,                          // llvm.amdgcn.s.waitcnt
-    amdgcn_sad_hi_u8,                          // llvm.amdgcn.sad.hi.u8
-    amdgcn_sad_u16,                            // llvm.amdgcn.sad.u16
-    amdgcn_sad_u8,                             // llvm.amdgcn.sad.u8
-    amdgcn_sbfe,                               // llvm.amdgcn.sbfe
-    amdgcn_set_inactive,                       // llvm.amdgcn.set.inactive
-    amdgcn_sffbh,                              // llvm.amdgcn.sffbh
-    amdgcn_sin,                                // llvm.amdgcn.sin
-    amdgcn_tbuffer_load,                       // llvm.amdgcn.tbuffer.load
-    amdgcn_tbuffer_store,                      // llvm.amdgcn.tbuffer.store
-    amdgcn_trig_preop,                         // llvm.amdgcn.trig.preop
-    amdgcn_ubfe,                               // llvm.amdgcn.ubfe
-    amdgcn_unreachable,                        // llvm.amdgcn.unreachable
-    amdgcn_update_dpp,                         // llvm.amdgcn.update.dpp
-    amdgcn_wave_barrier,                       // llvm.amdgcn.wave.barrier
-    amdgcn_workgroup_id_x,                     // llvm.amdgcn.workgroup.id.x
-    amdgcn_workgroup_id_y,                     // llvm.amdgcn.workgroup.id.y
-    amdgcn_workgroup_id_z,                     // llvm.amdgcn.workgroup.id.z
-    amdgcn_workitem_id_x,                      // llvm.amdgcn.workitem.id.x
-    amdgcn_workitem_id_y,                      // llvm.amdgcn.workitem.id.y
-    amdgcn_workitem_id_z,                      // llvm.amdgcn.workitem.id.z
-    amdgcn_wqm,                                // llvm.amdgcn.wqm
-    amdgcn_wqm_vote,                           // llvm.amdgcn.wqm.vote
-    amdgcn_writelane,                          // llvm.amdgcn.writelane
-    amdgcn_wwm,                                // llvm.amdgcn.wwm
-    arm_cdp,                                   // llvm.arm.cdp
-    arm_cdp2,                                  // llvm.arm.cdp2
-    arm_clrex,                                 // llvm.arm.clrex
-    arm_crc32b,                                // llvm.arm.crc32b
-    arm_crc32cb,                               // llvm.arm.crc32cb
-    arm_crc32ch,                               // llvm.arm.crc32ch
-    arm_crc32cw,                               // llvm.arm.crc32cw
-    arm_crc32h,                                // llvm.arm.crc32h
-    arm_crc32w,                                // llvm.arm.crc32w
-    arm_dbg,                                   // llvm.arm.dbg
-    arm_dmb,                                   // llvm.arm.dmb
-    arm_dsb,                                   // llvm.arm.dsb
-    arm_get_fpscr,                             // llvm.arm.get.fpscr
-    arm_hint,                                  // llvm.arm.hint
-    arm_isb,                                   // llvm.arm.isb
-    arm_ldaex,                                 // llvm.arm.ldaex
-    arm_ldaexd,                                // llvm.arm.ldaexd
-    arm_ldc,                                   // llvm.arm.ldc
-    arm_ldc2,                                  // llvm.arm.ldc2
-    arm_ldc2l,                                 // llvm.arm.ldc2l
-    arm_ldcl,                                  // llvm.arm.ldcl
-    arm_ldrex,                                 // llvm.arm.ldrex
-    arm_ldrexd,                                // llvm.arm.ldrexd
-    arm_mcr,                                   // llvm.arm.mcr
-    arm_mcr2,                                  // llvm.arm.mcr2
-    arm_mcrr,                                  // llvm.arm.mcrr
-    arm_mcrr2,                                 // llvm.arm.mcrr2
-    arm_mrc,                                   // llvm.arm.mrc
-    arm_mrc2,                                  // llvm.arm.mrc2
-    arm_mrrc,                                  // llvm.arm.mrrc
-    arm_mrrc2,                                 // llvm.arm.mrrc2
-    arm_neon_aesd,                             // llvm.arm.neon.aesd
-    arm_neon_aese,                             // llvm.arm.neon.aese
-    arm_neon_aesimc,                           // llvm.arm.neon.aesimc
-    arm_neon_aesmc,                            // llvm.arm.neon.aesmc
-    arm_neon_sha1c,                            // llvm.arm.neon.sha1c
-    arm_neon_sha1h,                            // llvm.arm.neon.sha1h
-    arm_neon_sha1m,                            // llvm.arm.neon.sha1m
-    arm_neon_sha1p,                            // llvm.arm.neon.sha1p
-    arm_neon_sha1su0,                          // llvm.arm.neon.sha1su0
-    arm_neon_sha1su1,                          // llvm.arm.neon.sha1su1
-    arm_neon_sha256h,                          // llvm.arm.neon.sha256h
-    arm_neon_sha256h2,                         // llvm.arm.neon.sha256h2
-    arm_neon_sha256su0,                        // llvm.arm.neon.sha256su0
-    arm_neon_sha256su1,                        // llvm.arm.neon.sha256su1
-    arm_neon_vabds,                            // llvm.arm.neon.vabds
-    arm_neon_vabdu,                            // llvm.arm.neon.vabdu
-    arm_neon_vabs,                             // llvm.arm.neon.vabs
-    arm_neon_vacge,                            // llvm.arm.neon.vacge
-    arm_neon_vacgt,                            // llvm.arm.neon.vacgt
-    arm_neon_vbsl,                             // llvm.arm.neon.vbsl
-    arm_neon_vcls,                             // llvm.arm.neon.vcls
-    arm_neon_vcvtas,                           // llvm.arm.neon.vcvtas
-    arm_neon_vcvtau,                           // llvm.arm.neon.vcvtau
-    arm_neon_vcvtfp2fxs,                       // llvm.arm.neon.vcvtfp2fxs
-    arm_neon_vcvtfp2fxu,                       // llvm.arm.neon.vcvtfp2fxu
-    arm_neon_vcvtfp2hf,                        // llvm.arm.neon.vcvtfp2hf
-    arm_neon_vcvtfxs2fp,                       // llvm.arm.neon.vcvtfxs2fp
-    arm_neon_vcvtfxu2fp,                       // llvm.arm.neon.vcvtfxu2fp
-    arm_neon_vcvthf2fp,                        // llvm.arm.neon.vcvthf2fp
-    arm_neon_vcvtms,                           // llvm.arm.neon.vcvtms
-    arm_neon_vcvtmu,                           // llvm.arm.neon.vcvtmu
-    arm_neon_vcvtns,                           // llvm.arm.neon.vcvtns
-    arm_neon_vcvtnu,                           // llvm.arm.neon.vcvtnu
-    arm_neon_vcvtps,                           // llvm.arm.neon.vcvtps
-    arm_neon_vcvtpu,                           // llvm.arm.neon.vcvtpu
-    arm_neon_vhadds,                           // llvm.arm.neon.vhadds
-    arm_neon_vhaddu,                           // llvm.arm.neon.vhaddu
-    arm_neon_vhsubs,                           // llvm.arm.neon.vhsubs
-    arm_neon_vhsubu,                           // llvm.arm.neon.vhsubu
-    arm_neon_vld1,                             // llvm.arm.neon.vld1
-    arm_neon_vld2,                             // llvm.arm.neon.vld2
-    arm_neon_vld2lane,                         // llvm.arm.neon.vld2lane
-    arm_neon_vld3,                             // llvm.arm.neon.vld3
-    arm_neon_vld3lane,                         // llvm.arm.neon.vld3lane
-    arm_neon_vld4,                             // llvm.arm.neon.vld4
-    arm_neon_vld4lane,                         // llvm.arm.neon.vld4lane
-    arm_neon_vmaxnm,                           // llvm.arm.neon.vmaxnm
-    arm_neon_vmaxs,                            // llvm.arm.neon.vmaxs
-    arm_neon_vmaxu,                            // llvm.arm.neon.vmaxu
-    arm_neon_vminnm,                           // llvm.arm.neon.vminnm
-    arm_neon_vmins,                            // llvm.arm.neon.vmins
-    arm_neon_vminu,                            // llvm.arm.neon.vminu
-    arm_neon_vmullp,                           // llvm.arm.neon.vmullp
-    arm_neon_vmulls,                           // llvm.arm.neon.vmulls
-    arm_neon_vmullu,                           // llvm.arm.neon.vmullu
-    arm_neon_vmulp,                            // llvm.arm.neon.vmulp
-    arm_neon_vpadals,                          // llvm.arm.neon.vpadals
-    arm_neon_vpadalu,                          // llvm.arm.neon.vpadalu
-    arm_neon_vpadd,                            // llvm.arm.neon.vpadd
-    arm_neon_vpaddls,                          // llvm.arm.neon.vpaddls
-    arm_neon_vpaddlu,                          // llvm.arm.neon.vpaddlu
-    arm_neon_vpmaxs,                           // llvm.arm.neon.vpmaxs
-    arm_neon_vpmaxu,                           // llvm.arm.neon.vpmaxu
-    arm_neon_vpmins,                           // llvm.arm.neon.vpmins
-    arm_neon_vpminu,                           // llvm.arm.neon.vpminu
-    arm_neon_vqabs,                            // llvm.arm.neon.vqabs
-    arm_neon_vqadds,                           // llvm.arm.neon.vqadds
-    arm_neon_vqaddu,                           // llvm.arm.neon.vqaddu
-    arm_neon_vqdmulh,                          // llvm.arm.neon.vqdmulh
-    arm_neon_vqdmull,                          // llvm.arm.neon.vqdmull
-    arm_neon_vqmovns,                          // llvm.arm.neon.vqmovns
-    arm_neon_vqmovnsu,                         // llvm.arm.neon.vqmovnsu
-    arm_neon_vqmovnu,                          // llvm.arm.neon.vqmovnu
-    arm_neon_vqneg,                            // llvm.arm.neon.vqneg
-    arm_neon_vqrdmulh,                         // llvm.arm.neon.vqrdmulh
-    arm_neon_vqrshiftns,                       // llvm.arm.neon.vqrshiftns
-    arm_neon_vqrshiftnsu,                      // llvm.arm.neon.vqrshiftnsu
-    arm_neon_vqrshiftnu,                       // llvm.arm.neon.vqrshiftnu
-    arm_neon_vqrshifts,                        // llvm.arm.neon.vqrshifts
-    arm_neon_vqrshiftu,                        // llvm.arm.neon.vqrshiftu
-    arm_neon_vqshiftns,                        // llvm.arm.neon.vqshiftns
-    arm_neon_vqshiftnsu,                       // llvm.arm.neon.vqshiftnsu
-    arm_neon_vqshiftnu,                        // llvm.arm.neon.vqshiftnu
-    arm_neon_vqshifts,                         // llvm.arm.neon.vqshifts
-    arm_neon_vqshiftsu,                        // llvm.arm.neon.vqshiftsu
-    arm_neon_vqshiftu,                         // llvm.arm.neon.vqshiftu
-    arm_neon_vqsubs,                           // llvm.arm.neon.vqsubs
-    arm_neon_vqsubu,                           // llvm.arm.neon.vqsubu
-    arm_neon_vraddhn,                          // llvm.arm.neon.vraddhn
-    arm_neon_vrecpe,                           // llvm.arm.neon.vrecpe
-    arm_neon_vrecps,                           // llvm.arm.neon.vrecps
-    arm_neon_vrhadds,                          // llvm.arm.neon.vrhadds
-    arm_neon_vrhaddu,                          // llvm.arm.neon.vrhaddu
-    arm_neon_vrinta,                           // llvm.arm.neon.vrinta
-    arm_neon_vrintm,                           // llvm.arm.neon.vrintm
-    arm_neon_vrintn,                           // llvm.arm.neon.vrintn
-    arm_neon_vrintp,                           // llvm.arm.neon.vrintp
-    arm_neon_vrintx,                           // llvm.arm.neon.vrintx
-    arm_neon_vrintz,                           // llvm.arm.neon.vrintz
-    arm_neon_vrshiftn,                         // llvm.arm.neon.vrshiftn
-    arm_neon_vrshifts,                         // llvm.arm.neon.vrshifts
-    arm_neon_vrshiftu,                         // llvm.arm.neon.vrshiftu
-    arm_neon_vrsqrte,                          // llvm.arm.neon.vrsqrte
-    arm_neon_vrsqrts,                          // llvm.arm.neon.vrsqrts
-    arm_neon_vrsubhn,                          // llvm.arm.neon.vrsubhn
-    arm_neon_vshiftins,                        // llvm.arm.neon.vshiftins
-    arm_neon_vshifts,                          // llvm.arm.neon.vshifts
-    arm_neon_vshiftu,                          // llvm.arm.neon.vshiftu
-    arm_neon_vst1,                             // llvm.arm.neon.vst1
-    arm_neon_vst2,                             // llvm.arm.neon.vst2
-    arm_neon_vst2lane,                         // llvm.arm.neon.vst2lane
-    arm_neon_vst3,                             // llvm.arm.neon.vst3
-    arm_neon_vst3lane,                         // llvm.arm.neon.vst3lane
-    arm_neon_vst4,                             // llvm.arm.neon.vst4
-    arm_neon_vst4lane,                         // llvm.arm.neon.vst4lane
-    arm_neon_vtbl1,                            // llvm.arm.neon.vtbl1
-    arm_neon_vtbl2,                            // llvm.arm.neon.vtbl2
-    arm_neon_vtbl3,                            // llvm.arm.neon.vtbl3
-    arm_neon_vtbl4,                            // llvm.arm.neon.vtbl4
-    arm_neon_vtbx1,                            // llvm.arm.neon.vtbx1
-    arm_neon_vtbx2,                            // llvm.arm.neon.vtbx2
-    arm_neon_vtbx3,                            // llvm.arm.neon.vtbx3
-    arm_neon_vtbx4,                            // llvm.arm.neon.vtbx4
-    arm_qadd,                                  // llvm.arm.qadd
-    arm_qadd16,                                // llvm.arm.qadd16
-    arm_qadd8,                                 // llvm.arm.qadd8
-    arm_qasx,                                  // llvm.arm.qasx
-    arm_qsax,                                  // llvm.arm.qsax
-    arm_qsub,                                  // llvm.arm.qsub
-    arm_qsub16,                                // llvm.arm.qsub16
-    arm_qsub8,                                 // llvm.arm.qsub8
-    arm_sadd16,                                // llvm.arm.sadd16
-    arm_sadd8,                                 // llvm.arm.sadd8
-    arm_sasx,                                  // llvm.arm.sasx
-    arm_sel,                                   // llvm.arm.sel
-    arm_set_fpscr,                             // llvm.arm.set.fpscr
-    arm_shadd16,                               // llvm.arm.shadd16
-    arm_shadd8,                                // llvm.arm.shadd8
-    arm_shasx,                                 // llvm.arm.shasx
-    arm_shsax,                                 // llvm.arm.shsax
-    arm_shsub16,                               // llvm.arm.shsub16
-    arm_shsub8,                                // llvm.arm.shsub8
-    arm_smlabb,                                // llvm.arm.smlabb
-    arm_smlabt,                                // llvm.arm.smlabt
-    arm_smlad,                                 // llvm.arm.smlad
-    arm_smladx,                                // llvm.arm.smladx
-    arm_smlald,                                // llvm.arm.smlald
-    arm_smlaldx,                               // llvm.arm.smlaldx
-    arm_smlatb,                                // llvm.arm.smlatb
-    arm_smlatt,                                // llvm.arm.smlatt
-    arm_smlawb,                                // llvm.arm.smlawb
-    arm_smlawt,                                // llvm.arm.smlawt
-    arm_smlsd,                                 // llvm.arm.smlsd
-    arm_smlsdx,                                // llvm.arm.smlsdx
-    arm_smlsld,                                // llvm.arm.smlsld
-    arm_smlsldx,                               // llvm.arm.smlsldx
-    arm_smuad,                                 // llvm.arm.smuad
-    arm_smuadx,                                // llvm.arm.smuadx
-    arm_smulbb,                                // llvm.arm.smulbb
-    arm_smulbt,                                // llvm.arm.smulbt
-    arm_smultb,                                // llvm.arm.smultb
-    arm_smultt,                                // llvm.arm.smultt
-    arm_smulwb,                                // llvm.arm.smulwb
-    arm_smulwt,                                // llvm.arm.smulwt
-    arm_smusd,                                 // llvm.arm.smusd
-    arm_smusdx,                                // llvm.arm.smusdx
-    arm_space,                                 // llvm.arm.space
-    arm_ssat,                                  // llvm.arm.ssat
-    arm_ssat16,                                // llvm.arm.ssat16
-    arm_ssax,                                  // llvm.arm.ssax
-    arm_ssub16,                                // llvm.arm.ssub16
-    arm_ssub8,                                 // llvm.arm.ssub8
-    arm_stc,                                   // llvm.arm.stc
-    arm_stc2,                                  // llvm.arm.stc2
-    arm_stc2l,                                 // llvm.arm.stc2l
-    arm_stcl,                                  // llvm.arm.stcl
-    arm_stlex,                                 // llvm.arm.stlex
-    arm_stlexd,                                // llvm.arm.stlexd
-    arm_strex,                                 // llvm.arm.strex
-    arm_strexd,                                // llvm.arm.strexd
-    arm_sxtab16,                               // llvm.arm.sxtab16
-    arm_sxtb16,                                // llvm.arm.sxtb16
-    arm_uadd16,                                // llvm.arm.uadd16
-    arm_uadd8,                                 // llvm.arm.uadd8
-    arm_uasx,                                  // llvm.arm.uasx
-    arm_uhadd16,                               // llvm.arm.uhadd16
-    arm_uhadd8,                                // llvm.arm.uhadd8
-    arm_uhasx,                                 // llvm.arm.uhasx
-    arm_uhsax,                                 // llvm.arm.uhsax
-    arm_uhsub16,                               // llvm.arm.uhsub16
-    arm_uhsub8,                                // llvm.arm.uhsub8
-    arm_undefined,                             // llvm.arm.undefined
-    arm_uqadd16,                               // llvm.arm.uqadd16
-    arm_uqadd8,                                // llvm.arm.uqadd8
-    arm_uqasx,                                 // llvm.arm.uqasx
-    arm_uqsax,                                 // llvm.arm.uqsax
-    arm_uqsub16,                               // llvm.arm.uqsub16
-    arm_uqsub8,                                // llvm.arm.uqsub8
-    arm_usad8,                                 // llvm.arm.usad8
-    arm_usada8,                                // llvm.arm.usada8
-    arm_usat,                                  // llvm.arm.usat
-    arm_usat16,                                // llvm.arm.usat16
-    arm_usax,                                  // llvm.arm.usax
-    arm_usub16,                                // llvm.arm.usub16
-    arm_usub8,                                 // llvm.arm.usub8
-    arm_uxtab16,                               // llvm.arm.uxtab16
-    arm_uxtb16,                                // llvm.arm.uxtb16
-    arm_vcvtr,                                 // llvm.arm.vcvtr
-    arm_vcvtru,                                // llvm.arm.vcvtru
-    bpf_load_byte,                             // llvm.bpf.load.byte
-    bpf_load_half,                             // llvm.bpf.load.half
-    bpf_load_word,                             // llvm.bpf.load.word
-    bpf_pseudo,                                // llvm.bpf.pseudo
-    hexagon_A2_abs,                            // llvm.hexagon.A2.abs
-    hexagon_A2_absp,                           // llvm.hexagon.A2.absp
-    hexagon_A2_abssat,                         // llvm.hexagon.A2.abssat
-    hexagon_A2_add,                            // llvm.hexagon.A2.add
-    hexagon_A2_addh_h16_hh,                    // llvm.hexagon.A2.addh.h16.hh
-    hexagon_A2_addh_h16_hl,                    // llvm.hexagon.A2.addh.h16.hl
-    hexagon_A2_addh_h16_lh,                    // llvm.hexagon.A2.addh.h16.lh
-    hexagon_A2_addh_h16_ll,                    // llvm.hexagon.A2.addh.h16.ll
-    hexagon_A2_addh_h16_sat_hh,                // llvm.hexagon.A2.addh.h16.sat.hh
-    hexagon_A2_addh_h16_sat_hl,                // llvm.hexagon.A2.addh.h16.sat.hl
-    hexagon_A2_addh_h16_sat_lh,                // llvm.hexagon.A2.addh.h16.sat.lh
-    hexagon_A2_addh_h16_sat_ll,                // llvm.hexagon.A2.addh.h16.sat.ll
-    hexagon_A2_addh_l16_hl,                    // llvm.hexagon.A2.addh.l16.hl
-    hexagon_A2_addh_l16_ll,                    // llvm.hexagon.A2.addh.l16.ll
-    hexagon_A2_addh_l16_sat_hl,                // llvm.hexagon.A2.addh.l16.sat.hl
-    hexagon_A2_addh_l16_sat_ll,                // llvm.hexagon.A2.addh.l16.sat.ll
-    hexagon_A2_addi,                           // llvm.hexagon.A2.addi
-    hexagon_A2_addp,                           // llvm.hexagon.A2.addp
-    hexagon_A2_addpsat,                        // llvm.hexagon.A2.addpsat
-    hexagon_A2_addsat,                         // llvm.hexagon.A2.addsat
-    hexagon_A2_addsp,                          // llvm.hexagon.A2.addsp
-    hexagon_A2_and,                            // llvm.hexagon.A2.and
-    hexagon_A2_andir,                          // llvm.hexagon.A2.andir
-    hexagon_A2_andp,                           // llvm.hexagon.A2.andp
-    hexagon_A2_aslh,                           // llvm.hexagon.A2.aslh
-    hexagon_A2_asrh,                           // llvm.hexagon.A2.asrh
-    hexagon_A2_combine_hh,                     // llvm.hexagon.A2.combine.hh
-    hexagon_A2_combine_hl,                     // llvm.hexagon.A2.combine.hl
-    hexagon_A2_combine_lh,                     // llvm.hexagon.A2.combine.lh
-    hexagon_A2_combine_ll,                     // llvm.hexagon.A2.combine.ll
-    hexagon_A2_combineii,                      // llvm.hexagon.A2.combineii
-    hexagon_A2_combinew,                       // llvm.hexagon.A2.combinew
-    hexagon_A2_max,                            // llvm.hexagon.A2.max
-    hexagon_A2_maxp,                           // llvm.hexagon.A2.maxp
-    hexagon_A2_maxu,                           // llvm.hexagon.A2.maxu
-    hexagon_A2_maxup,                          // llvm.hexagon.A2.maxup
-    hexagon_A2_min,                            // llvm.hexagon.A2.min
-    hexagon_A2_minp,                           // llvm.hexagon.A2.minp
-    hexagon_A2_minu,                           // llvm.hexagon.A2.minu
-    hexagon_A2_minup,                          // llvm.hexagon.A2.minup
-    hexagon_A2_neg,                            // llvm.hexagon.A2.neg
-    hexagon_A2_negp,                           // llvm.hexagon.A2.negp
-    hexagon_A2_negsat,                         // llvm.hexagon.A2.negsat
-    hexagon_A2_not,                            // llvm.hexagon.A2.not
-    hexagon_A2_notp,                           // llvm.hexagon.A2.notp
-    hexagon_A2_or,                             // llvm.hexagon.A2.or
-    hexagon_A2_orir,                           // llvm.hexagon.A2.orir
-    hexagon_A2_orp,                            // llvm.hexagon.A2.orp
-    hexagon_A2_roundsat,                       // llvm.hexagon.A2.roundsat
-    hexagon_A2_sat,                            // llvm.hexagon.A2.sat
-    hexagon_A2_satb,                           // llvm.hexagon.A2.satb
-    hexagon_A2_sath,                           // llvm.hexagon.A2.sath
-    hexagon_A2_satub,                          // llvm.hexagon.A2.satub
-    hexagon_A2_satuh,                          // llvm.hexagon.A2.satuh
-    hexagon_A2_sub,                            // llvm.hexagon.A2.sub
-    hexagon_A2_subh_h16_hh,                    // llvm.hexagon.A2.subh.h16.hh
-    hexagon_A2_subh_h16_hl,                    // llvm.hexagon.A2.subh.h16.hl
-    hexagon_A2_subh_h16_lh,                    // llvm.hexagon.A2.subh.h16.lh
-    hexagon_A2_subh_h16_ll,                    // llvm.hexagon.A2.subh.h16.ll
-    hexagon_A2_subh_h16_sat_hh,                // llvm.hexagon.A2.subh.h16.sat.hh
-    hexagon_A2_subh_h16_sat_hl,                // llvm.hexagon.A2.subh.h16.sat.hl
-    hexagon_A2_subh_h16_sat_lh,                // llvm.hexagon.A2.subh.h16.sat.lh
-    hexagon_A2_subh_h16_sat_ll,                // llvm.hexagon.A2.subh.h16.sat.ll
-    hexagon_A2_subh_l16_hl,                    // llvm.hexagon.A2.subh.l16.hl
-    hexagon_A2_subh_l16_ll,                    // llvm.hexagon.A2.subh.l16.ll
-    hexagon_A2_subh_l16_sat_hl,                // llvm.hexagon.A2.subh.l16.sat.hl
-    hexagon_A2_subh_l16_sat_ll,                // llvm.hexagon.A2.subh.l16.sat.ll
-    hexagon_A2_subp,                           // llvm.hexagon.A2.subp
-    hexagon_A2_subri,                          // llvm.hexagon.A2.subri
-    hexagon_A2_subsat,                         // llvm.hexagon.A2.subsat
-    hexagon_A2_svaddh,                         // llvm.hexagon.A2.svaddh
-    hexagon_A2_svaddhs,                        // llvm.hexagon.A2.svaddhs
-    hexagon_A2_svadduhs,                       // llvm.hexagon.A2.svadduhs
-    hexagon_A2_svavgh,                         // llvm.hexagon.A2.svavgh
-    hexagon_A2_svavghs,                        // llvm.hexagon.A2.svavghs
-    hexagon_A2_svnavgh,                        // llvm.hexagon.A2.svnavgh
-    hexagon_A2_svsubh,                         // llvm.hexagon.A2.svsubh
-    hexagon_A2_svsubhs,                        // llvm.hexagon.A2.svsubhs
-    hexagon_A2_svsubuhs,                       // llvm.hexagon.A2.svsubuhs
-    hexagon_A2_swiz,                           // llvm.hexagon.A2.swiz
-    hexagon_A2_sxtb,                           // llvm.hexagon.A2.sxtb
-    hexagon_A2_sxth,                           // llvm.hexagon.A2.sxth
-    hexagon_A2_sxtw,                           // llvm.hexagon.A2.sxtw
-    hexagon_A2_tfr,                            // llvm.hexagon.A2.tfr
-    hexagon_A2_tfrih,                          // llvm.hexagon.A2.tfrih
-    hexagon_A2_tfril,                          // llvm.hexagon.A2.tfril
-    hexagon_A2_tfrp,                           // llvm.hexagon.A2.tfrp
-    hexagon_A2_tfrpi,                          // llvm.hexagon.A2.tfrpi
-    hexagon_A2_tfrsi,                          // llvm.hexagon.A2.tfrsi
-    hexagon_A2_vabsh,                          // llvm.hexagon.A2.vabsh
-    hexagon_A2_vabshsat,                       // llvm.hexagon.A2.vabshsat
-    hexagon_A2_vabsw,                          // llvm.hexagon.A2.vabsw
-    hexagon_A2_vabswsat,                       // llvm.hexagon.A2.vabswsat
-    hexagon_A2_vaddb_map,                      // llvm.hexagon.A2.vaddb.map
-    hexagon_A2_vaddh,                          // llvm.hexagon.A2.vaddh
-    hexagon_A2_vaddhs,                         // llvm.hexagon.A2.vaddhs
-    hexagon_A2_vaddub,                         // llvm.hexagon.A2.vaddub
-    hexagon_A2_vaddubs,                        // llvm.hexagon.A2.vaddubs
-    hexagon_A2_vadduhs,                        // llvm.hexagon.A2.vadduhs
-    hexagon_A2_vaddw,                          // llvm.hexagon.A2.vaddw
-    hexagon_A2_vaddws,                         // llvm.hexagon.A2.vaddws
-    hexagon_A2_vavgh,                          // llvm.hexagon.A2.vavgh
-    hexagon_A2_vavghcr,                        // llvm.hexagon.A2.vavghcr
-    hexagon_A2_vavghr,                         // llvm.hexagon.A2.vavghr
-    hexagon_A2_vavgub,                         // llvm.hexagon.A2.vavgub
-    hexagon_A2_vavgubr,                        // llvm.hexagon.A2.vavgubr
-    hexagon_A2_vavguh,                         // llvm.hexagon.A2.vavguh
-    hexagon_A2_vavguhr,                        // llvm.hexagon.A2.vavguhr
-    hexagon_A2_vavguw,                         // llvm.hexagon.A2.vavguw
-    hexagon_A2_vavguwr,                        // llvm.hexagon.A2.vavguwr
-    hexagon_A2_vavgw,                          // llvm.hexagon.A2.vavgw
-    hexagon_A2_vavgwcr,                        // llvm.hexagon.A2.vavgwcr
-    hexagon_A2_vavgwr,                         // llvm.hexagon.A2.vavgwr
-    hexagon_A2_vcmpbeq,                        // llvm.hexagon.A2.vcmpbeq
-    hexagon_A2_vcmpbgtu,                       // llvm.hexagon.A2.vcmpbgtu
-    hexagon_A2_vcmpheq,                        // llvm.hexagon.A2.vcmpheq
-    hexagon_A2_vcmphgt,                        // llvm.hexagon.A2.vcmphgt
-    hexagon_A2_vcmphgtu,                       // llvm.hexagon.A2.vcmphgtu
-    hexagon_A2_vcmpweq,                        // llvm.hexagon.A2.vcmpweq
-    hexagon_A2_vcmpwgt,                        // llvm.hexagon.A2.vcmpwgt
-    hexagon_A2_vcmpwgtu,                       // llvm.hexagon.A2.vcmpwgtu
-    hexagon_A2_vconj,                          // llvm.hexagon.A2.vconj
-    hexagon_A2_vmaxb,                          // llvm.hexagon.A2.vmaxb
-    hexagon_A2_vmaxh,                          // llvm.hexagon.A2.vmaxh
-    hexagon_A2_vmaxub,                         // llvm.hexagon.A2.vmaxub
-    hexagon_A2_vmaxuh,                         // llvm.hexagon.A2.vmaxuh
-    hexagon_A2_vmaxuw,                         // llvm.hexagon.A2.vmaxuw
-    hexagon_A2_vmaxw,                          // llvm.hexagon.A2.vmaxw
-    hexagon_A2_vminb,                          // llvm.hexagon.A2.vminb
-    hexagon_A2_vminh,                          // llvm.hexagon.A2.vminh
-    hexagon_A2_vminub,                         // llvm.hexagon.A2.vminub
-    hexagon_A2_vminuh,                         // llvm.hexagon.A2.vminuh
-    hexagon_A2_vminuw,                         // llvm.hexagon.A2.vminuw
-    hexagon_A2_vminw,                          // llvm.hexagon.A2.vminw
-    hexagon_A2_vnavgh,                         // llvm.hexagon.A2.vnavgh
-    hexagon_A2_vnavghcr,                       // llvm.hexagon.A2.vnavghcr
-    hexagon_A2_vnavghr,                        // llvm.hexagon.A2.vnavghr
-    hexagon_A2_vnavgw,                         // llvm.hexagon.A2.vnavgw
-    hexagon_A2_vnavgwcr,                       // llvm.hexagon.A2.vnavgwcr
-    hexagon_A2_vnavgwr,                        // llvm.hexagon.A2.vnavgwr
-    hexagon_A2_vraddub,                        // llvm.hexagon.A2.vraddub
-    hexagon_A2_vraddub_acc,                    // llvm.hexagon.A2.vraddub.acc
-    hexagon_A2_vrsadub,                        // llvm.hexagon.A2.vrsadub
-    hexagon_A2_vrsadub_acc,                    // llvm.hexagon.A2.vrsadub.acc
-    hexagon_A2_vsubb_map,                      // llvm.hexagon.A2.vsubb.map
-    hexagon_A2_vsubh,                          // llvm.hexagon.A2.vsubh
-    hexagon_A2_vsubhs,                         // llvm.hexagon.A2.vsubhs
-    hexagon_A2_vsubub,                         // llvm.hexagon.A2.vsubub
-    hexagon_A2_vsububs,                        // llvm.hexagon.A2.vsububs
-    hexagon_A2_vsubuhs,                        // llvm.hexagon.A2.vsubuhs
-    hexagon_A2_vsubw,                          // llvm.hexagon.A2.vsubw
-    hexagon_A2_vsubws,                         // llvm.hexagon.A2.vsubws
-    hexagon_A2_xor,                            // llvm.hexagon.A2.xor
-    hexagon_A2_xorp,                           // llvm.hexagon.A2.xorp
-    hexagon_A2_zxtb,                           // llvm.hexagon.A2.zxtb
-    hexagon_A2_zxth,                           // llvm.hexagon.A2.zxth
-    hexagon_A4_andn,                           // llvm.hexagon.A4.andn
-    hexagon_A4_andnp,                          // llvm.hexagon.A4.andnp
-    hexagon_A4_bitsplit,                       // llvm.hexagon.A4.bitsplit
-    hexagon_A4_bitspliti,                      // llvm.hexagon.A4.bitspliti
-    hexagon_A4_boundscheck,                    // llvm.hexagon.A4.boundscheck
-    hexagon_A4_cmpbeq,                         // llvm.hexagon.A4.cmpbeq
-    hexagon_A4_cmpbeqi,                        // llvm.hexagon.A4.cmpbeqi
-    hexagon_A4_cmpbgt,                         // llvm.hexagon.A4.cmpbgt
-    hexagon_A4_cmpbgti,                        // llvm.hexagon.A4.cmpbgti
-    hexagon_A4_cmpbgtu,                        // llvm.hexagon.A4.cmpbgtu
-    hexagon_A4_cmpbgtui,                       // llvm.hexagon.A4.cmpbgtui
-    hexagon_A4_cmpheq,                         // llvm.hexagon.A4.cmpheq
-    hexagon_A4_cmpheqi,                        // llvm.hexagon.A4.cmpheqi
-    hexagon_A4_cmphgt,                         // llvm.hexagon.A4.cmphgt
-    hexagon_A4_cmphgti,                        // llvm.hexagon.A4.cmphgti
-    hexagon_A4_cmphgtu,                        // llvm.hexagon.A4.cmphgtu
-    hexagon_A4_cmphgtui,                       // llvm.hexagon.A4.cmphgtui
-    hexagon_A4_combineir,                      // llvm.hexagon.A4.combineir
-    hexagon_A4_combineri,                      // llvm.hexagon.A4.combineri
-    hexagon_A4_cround_ri,                      // llvm.hexagon.A4.cround.ri
-    hexagon_A4_cround_rr,                      // llvm.hexagon.A4.cround.rr
-    hexagon_A4_modwrapu,                       // llvm.hexagon.A4.modwrapu
-    hexagon_A4_orn,                            // llvm.hexagon.A4.orn
-    hexagon_A4_ornp,                           // llvm.hexagon.A4.ornp
-    hexagon_A4_rcmpeq,                         // llvm.hexagon.A4.rcmpeq
-    hexagon_A4_rcmpeqi,                        // llvm.hexagon.A4.rcmpeqi
-    hexagon_A4_rcmpneq,                        // llvm.hexagon.A4.rcmpneq
-    hexagon_A4_rcmpneqi,                       // llvm.hexagon.A4.rcmpneqi
-    hexagon_A4_round_ri,                       // llvm.hexagon.A4.round.ri
-    hexagon_A4_round_ri_sat,                   // llvm.hexagon.A4.round.ri.sat
-    hexagon_A4_round_rr,                       // llvm.hexagon.A4.round.rr
-    hexagon_A4_round_rr_sat,                   // llvm.hexagon.A4.round.rr.sat
-    hexagon_A4_tlbmatch,                       // llvm.hexagon.A4.tlbmatch
-    hexagon_A4_vcmpbeq_any,                    // llvm.hexagon.A4.vcmpbeq.any
-    hexagon_A4_vcmpbeqi,                       // llvm.hexagon.A4.vcmpbeqi
-    hexagon_A4_vcmpbgt,                        // llvm.hexagon.A4.vcmpbgt
-    hexagon_A4_vcmpbgti,                       // llvm.hexagon.A4.vcmpbgti
-    hexagon_A4_vcmpbgtui,                      // llvm.hexagon.A4.vcmpbgtui
-    hexagon_A4_vcmpheqi,                       // llvm.hexagon.A4.vcmpheqi
-    hexagon_A4_vcmphgti,                       // llvm.hexagon.A4.vcmphgti
-    hexagon_A4_vcmphgtui,                      // llvm.hexagon.A4.vcmphgtui
-    hexagon_A4_vcmpweqi,                       // llvm.hexagon.A4.vcmpweqi
-    hexagon_A4_vcmpwgti,                       // llvm.hexagon.A4.vcmpwgti
-    hexagon_A4_vcmpwgtui,                      // llvm.hexagon.A4.vcmpwgtui
-    hexagon_A4_vrmaxh,                         // llvm.hexagon.A4.vrmaxh
-    hexagon_A4_vrmaxuh,                        // llvm.hexagon.A4.vrmaxuh
-    hexagon_A4_vrmaxuw,                        // llvm.hexagon.A4.vrmaxuw
-    hexagon_A4_vrmaxw,                         // llvm.hexagon.A4.vrmaxw
-    hexagon_A4_vrminh,                         // llvm.hexagon.A4.vrminh
-    hexagon_A4_vrminuh,                        // llvm.hexagon.A4.vrminuh
-    hexagon_A4_vrminuw,                        // llvm.hexagon.A4.vrminuw
-    hexagon_A4_vrminw,                         // llvm.hexagon.A4.vrminw
-    hexagon_A5_vaddhubs,                       // llvm.hexagon.A5.vaddhubs
-    hexagon_A6_vcmpbeq_notany,                 // llvm.hexagon.A6.vcmpbeq.notany
-    hexagon_A6_vcmpbeq_notany_128B,            // llvm.hexagon.A6.vcmpbeq.notany.128B
-    hexagon_C2_all8,                           // llvm.hexagon.C2.all8
-    hexagon_C2_and,                            // llvm.hexagon.C2.and
-    hexagon_C2_andn,                           // llvm.hexagon.C2.andn
-    hexagon_C2_any8,                           // llvm.hexagon.C2.any8
-    hexagon_C2_bitsclr,                        // llvm.hexagon.C2.bitsclr
-    hexagon_C2_bitsclri,                       // llvm.hexagon.C2.bitsclri
-    hexagon_C2_bitsset,                        // llvm.hexagon.C2.bitsset
-    hexagon_C2_cmpeq,                          // llvm.hexagon.C2.cmpeq
-    hexagon_C2_cmpeqi,                         // llvm.hexagon.C2.cmpeqi
-    hexagon_C2_cmpeqp,                         // llvm.hexagon.C2.cmpeqp
-    hexagon_C2_cmpgei,                         // llvm.hexagon.C2.cmpgei
-    hexagon_C2_cmpgeui,                        // llvm.hexagon.C2.cmpgeui
-    hexagon_C2_cmpgt,                          // llvm.hexagon.C2.cmpgt
-    hexagon_C2_cmpgti,                         // llvm.hexagon.C2.cmpgti
-    hexagon_C2_cmpgtp,                         // llvm.hexagon.C2.cmpgtp
-    hexagon_C2_cmpgtu,                         // llvm.hexagon.C2.cmpgtu
-    hexagon_C2_cmpgtui,                        // llvm.hexagon.C2.cmpgtui
-    hexagon_C2_cmpgtup,                        // llvm.hexagon.C2.cmpgtup
-    hexagon_C2_cmplt,                          // llvm.hexagon.C2.cmplt
-    hexagon_C2_cmpltu,                         // llvm.hexagon.C2.cmpltu
-    hexagon_C2_mask,                           // llvm.hexagon.C2.mask
-    hexagon_C2_mux,                            // llvm.hexagon.C2.mux
-    hexagon_C2_muxii,                          // llvm.hexagon.C2.muxii
-    hexagon_C2_muxir,                          // llvm.hexagon.C2.muxir
-    hexagon_C2_muxri,                          // llvm.hexagon.C2.muxri
-    hexagon_C2_not,                            // llvm.hexagon.C2.not
-    hexagon_C2_or,                             // llvm.hexagon.C2.or
-    hexagon_C2_orn,                            // llvm.hexagon.C2.orn
-    hexagon_C2_pxfer_map,                      // llvm.hexagon.C2.pxfer.map
-    hexagon_C2_tfrpr,                          // llvm.hexagon.C2.tfrpr
-    hexagon_C2_tfrrp,                          // llvm.hexagon.C2.tfrrp
-    hexagon_C2_vitpack,                        // llvm.hexagon.C2.vitpack
-    hexagon_C2_vmux,                           // llvm.hexagon.C2.vmux
-    hexagon_C2_xor,                            // llvm.hexagon.C2.xor
-    hexagon_C4_and_and,                        // llvm.hexagon.C4.and.and
-    hexagon_C4_and_andn,                       // llvm.hexagon.C4.and.andn
-    hexagon_C4_and_or,                         // llvm.hexagon.C4.and.or
-    hexagon_C4_and_orn,                        // llvm.hexagon.C4.and.orn
-    hexagon_C4_cmplte,                         // llvm.hexagon.C4.cmplte
-    hexagon_C4_cmpltei,                        // llvm.hexagon.C4.cmpltei
-    hexagon_C4_cmplteu,                        // llvm.hexagon.C4.cmplteu
-    hexagon_C4_cmplteui,                       // llvm.hexagon.C4.cmplteui
-    hexagon_C4_cmpneq,                         // llvm.hexagon.C4.cmpneq
-    hexagon_C4_cmpneqi,                        // llvm.hexagon.C4.cmpneqi
-    hexagon_C4_fastcorner9,                    // llvm.hexagon.C4.fastcorner9
-    hexagon_C4_fastcorner9_not,                // llvm.hexagon.C4.fastcorner9.not
-    hexagon_C4_nbitsclr,                       // llvm.hexagon.C4.nbitsclr
-    hexagon_C4_nbitsclri,                      // llvm.hexagon.C4.nbitsclri
-    hexagon_C4_nbitsset,                       // llvm.hexagon.C4.nbitsset
-    hexagon_C4_or_and,                         // llvm.hexagon.C4.or.and
-    hexagon_C4_or_andn,                        // llvm.hexagon.C4.or.andn
-    hexagon_C4_or_or,                          // llvm.hexagon.C4.or.or
-    hexagon_C4_or_orn,                         // llvm.hexagon.C4.or.orn
-    hexagon_F2_conv_d2df,                      // llvm.hexagon.F2.conv.d2df
-    hexagon_F2_conv_d2sf,                      // llvm.hexagon.F2.conv.d2sf
-    hexagon_F2_conv_df2d,                      // llvm.hexagon.F2.conv.df2d
-    hexagon_F2_conv_df2d_chop,                 // llvm.hexagon.F2.conv.df2d.chop
-    hexagon_F2_conv_df2sf,                     // llvm.hexagon.F2.conv.df2sf
-    hexagon_F2_conv_df2ud,                     // llvm.hexagon.F2.conv.df2ud
-    hexagon_F2_conv_df2ud_chop,                // llvm.hexagon.F2.conv.df2ud.chop
-    hexagon_F2_conv_df2uw,                     // llvm.hexagon.F2.conv.df2uw
-    hexagon_F2_conv_df2uw_chop,                // llvm.hexagon.F2.conv.df2uw.chop
-    hexagon_F2_conv_df2w,                      // llvm.hexagon.F2.conv.df2w
-    hexagon_F2_conv_df2w_chop,                 // llvm.hexagon.F2.conv.df2w.chop
-    hexagon_F2_conv_sf2d,                      // llvm.hexagon.F2.conv.sf2d
-    hexagon_F2_conv_sf2d_chop,                 // llvm.hexagon.F2.conv.sf2d.chop
-    hexagon_F2_conv_sf2df,                     // llvm.hexagon.F2.conv.sf2df
-    hexagon_F2_conv_sf2ud,                     // llvm.hexagon.F2.conv.sf2ud
-    hexagon_F2_conv_sf2ud_chop,                // llvm.hexagon.F2.conv.sf2ud.chop
-    hexagon_F2_conv_sf2uw,                     // llvm.hexagon.F2.conv.sf2uw
-    hexagon_F2_conv_sf2uw_chop,                // llvm.hexagon.F2.conv.sf2uw.chop
-    hexagon_F2_conv_sf2w,                      // llvm.hexagon.F2.conv.sf2w
-    hexagon_F2_conv_sf2w_chop,                 // llvm.hexagon.F2.conv.sf2w.chop
-    hexagon_F2_conv_ud2df,                     // llvm.hexagon.F2.conv.ud2df
-    hexagon_F2_conv_ud2sf,                     // llvm.hexagon.F2.conv.ud2sf
-    hexagon_F2_conv_uw2df,                     // llvm.hexagon.F2.conv.uw2df
-    hexagon_F2_conv_uw2sf,                     // llvm.hexagon.F2.conv.uw2sf
-    hexagon_F2_conv_w2df,                      // llvm.hexagon.F2.conv.w2df
-    hexagon_F2_conv_w2sf,                      // llvm.hexagon.F2.conv.w2sf
-    hexagon_F2_dfclass,                        // llvm.hexagon.F2.dfclass
-    hexagon_F2_dfcmpeq,                        // llvm.hexagon.F2.dfcmpeq
-    hexagon_F2_dfcmpge,                        // llvm.hexagon.F2.dfcmpge
-    hexagon_F2_dfcmpgt,                        // llvm.hexagon.F2.dfcmpgt
-    hexagon_F2_dfcmpuo,                        // llvm.hexagon.F2.dfcmpuo
-    hexagon_F2_dfimm_n,                        // llvm.hexagon.F2.dfimm.n
-    hexagon_F2_dfimm_p,                        // llvm.hexagon.F2.dfimm.p
-    hexagon_F2_sfadd,                          // llvm.hexagon.F2.sfadd
-    hexagon_F2_sfclass,                        // llvm.hexagon.F2.sfclass
-    hexagon_F2_sfcmpeq,                        // llvm.hexagon.F2.sfcmpeq
-    hexagon_F2_sfcmpge,                        // llvm.hexagon.F2.sfcmpge
-    hexagon_F2_sfcmpgt,                        // llvm.hexagon.F2.sfcmpgt
-    hexagon_F2_sfcmpuo,                        // llvm.hexagon.F2.sfcmpuo
-    hexagon_F2_sffixupd,                       // llvm.hexagon.F2.sffixupd
-    hexagon_F2_sffixupn,                       // llvm.hexagon.F2.sffixupn
-    hexagon_F2_sffixupr,                       // llvm.hexagon.F2.sffixupr
-    hexagon_F2_sffma,                          // llvm.hexagon.F2.sffma
-    hexagon_F2_sffma_lib,                      // llvm.hexagon.F2.sffma.lib
-    hexagon_F2_sffma_sc,                       // llvm.hexagon.F2.sffma.sc
-    hexagon_F2_sffms,                          // llvm.hexagon.F2.sffms
-    hexagon_F2_sffms_lib,                      // llvm.hexagon.F2.sffms.lib
-    hexagon_F2_sfimm_n,                        // llvm.hexagon.F2.sfimm.n
-    hexagon_F2_sfimm_p,                        // llvm.hexagon.F2.sfimm.p
-    hexagon_F2_sfmax,                          // llvm.hexagon.F2.sfmax
-    hexagon_F2_sfmin,                          // llvm.hexagon.F2.sfmin
-    hexagon_F2_sfmpy,                          // llvm.hexagon.F2.sfmpy
-    hexagon_F2_sfsub,                          // llvm.hexagon.F2.sfsub
-    hexagon_L2_loadrb_pbr,                     // llvm.hexagon.L2.loadrb.pbr
-    hexagon_L2_loadrb_pci,                     // llvm.hexagon.L2.loadrb.pci
-    hexagon_L2_loadrb_pcr,                     // llvm.hexagon.L2.loadrb.pcr
-    hexagon_L2_loadrd_pbr,                     // llvm.hexagon.L2.loadrd.pbr
-    hexagon_L2_loadrd_pci,                     // llvm.hexagon.L2.loadrd.pci
-    hexagon_L2_loadrd_pcr,                     // llvm.hexagon.L2.loadrd.pcr
-    hexagon_L2_loadrh_pbr,                     // llvm.hexagon.L2.loadrh.pbr
-    hexagon_L2_loadrh_pci,                     // llvm.hexagon.L2.loadrh.pci
-    hexagon_L2_loadrh_pcr,                     // llvm.hexagon.L2.loadrh.pcr
-    hexagon_L2_loadri_pbr,                     // llvm.hexagon.L2.loadri.pbr
-    hexagon_L2_loadri_pci,                     // llvm.hexagon.L2.loadri.pci
-    hexagon_L2_loadri_pcr,                     // llvm.hexagon.L2.loadri.pcr
-    hexagon_L2_loadrub_pbr,                    // llvm.hexagon.L2.loadrub.pbr
-    hexagon_L2_loadrub_pci,                    // llvm.hexagon.L2.loadrub.pci
-    hexagon_L2_loadrub_pcr,                    // llvm.hexagon.L2.loadrub.pcr
-    hexagon_L2_loadruh_pbr,                    // llvm.hexagon.L2.loadruh.pbr
-    hexagon_L2_loadruh_pci,                    // llvm.hexagon.L2.loadruh.pci
-    hexagon_L2_loadruh_pcr,                    // llvm.hexagon.L2.loadruh.pcr
-    hexagon_L2_loadw_locked,                   // llvm.hexagon.L2.loadw.locked
-    hexagon_L4_loadd_locked,                   // llvm.hexagon.L4.loadd.locked
-    hexagon_M2_acci,                           // llvm.hexagon.M2.acci
-    hexagon_M2_accii,                          // llvm.hexagon.M2.accii
-    hexagon_M2_cmaci_s0,                       // llvm.hexagon.M2.cmaci.s0
-    hexagon_M2_cmacr_s0,                       // llvm.hexagon.M2.cmacr.s0
-    hexagon_M2_cmacs_s0,                       // llvm.hexagon.M2.cmacs.s0
-    hexagon_M2_cmacs_s1,                       // llvm.hexagon.M2.cmacs.s1
-    hexagon_M2_cmacsc_s0,                      // llvm.hexagon.M2.cmacsc.s0
-    hexagon_M2_cmacsc_s1,                      // llvm.hexagon.M2.cmacsc.s1
-    hexagon_M2_cmpyi_s0,                       // llvm.hexagon.M2.cmpyi.s0
-    hexagon_M2_cmpyr_s0,                       // llvm.hexagon.M2.cmpyr.s0
-    hexagon_M2_cmpyrs_s0,                      // llvm.hexagon.M2.cmpyrs.s0
-    hexagon_M2_cmpyrs_s1,                      // llvm.hexagon.M2.cmpyrs.s1
-    hexagon_M2_cmpyrsc_s0,                     // llvm.hexagon.M2.cmpyrsc.s0
-    hexagon_M2_cmpyrsc_s1,                     // llvm.hexagon.M2.cmpyrsc.s1
-    hexagon_M2_cmpys_s0,                       // llvm.hexagon.M2.cmpys.s0
-    hexagon_M2_cmpys_s1,                       // llvm.hexagon.M2.cmpys.s1
-    hexagon_M2_cmpysc_s0,                      // llvm.hexagon.M2.cmpysc.s0
-    hexagon_M2_cmpysc_s1,                      // llvm.hexagon.M2.cmpysc.s1
-    hexagon_M2_cnacs_s0,                       // llvm.hexagon.M2.cnacs.s0
-    hexagon_M2_cnacs_s1,                       // llvm.hexagon.M2.cnacs.s1
-    hexagon_M2_cnacsc_s0,                      // llvm.hexagon.M2.cnacsc.s0
-    hexagon_M2_cnacsc_s1,                      // llvm.hexagon.M2.cnacsc.s1
-    hexagon_M2_dpmpyss_acc_s0,                 // llvm.hexagon.M2.dpmpyss.acc.s0
-    hexagon_M2_dpmpyss_nac_s0,                 // llvm.hexagon.M2.dpmpyss.nac.s0
-    hexagon_M2_dpmpyss_rnd_s0,                 // llvm.hexagon.M2.dpmpyss.rnd.s0
-    hexagon_M2_dpmpyss_s0,                     // llvm.hexagon.M2.dpmpyss.s0
-    hexagon_M2_dpmpyuu_acc_s0,                 // llvm.hexagon.M2.dpmpyuu.acc.s0
-    hexagon_M2_dpmpyuu_nac_s0,                 // llvm.hexagon.M2.dpmpyuu.nac.s0
-    hexagon_M2_dpmpyuu_s0,                     // llvm.hexagon.M2.dpmpyuu.s0
-    hexagon_M2_hmmpyh_rs1,                     // llvm.hexagon.M2.hmmpyh.rs1
-    hexagon_M2_hmmpyh_s1,                      // llvm.hexagon.M2.hmmpyh.s1
-    hexagon_M2_hmmpyl_rs1,                     // llvm.hexagon.M2.hmmpyl.rs1
-    hexagon_M2_hmmpyl_s1,                      // llvm.hexagon.M2.hmmpyl.s1
-    hexagon_M2_maci,                           // llvm.hexagon.M2.maci
-    hexagon_M2_macsin,                         // llvm.hexagon.M2.macsin
-    hexagon_M2_macsip,                         // llvm.hexagon.M2.macsip
-    hexagon_M2_mmachs_rs0,                     // llvm.hexagon.M2.mmachs.rs0
-    hexagon_M2_mmachs_rs1,                     // llvm.hexagon.M2.mmachs.rs1
-    hexagon_M2_mmachs_s0,                      // llvm.hexagon.M2.mmachs.s0
-    hexagon_M2_mmachs_s1,                      // llvm.hexagon.M2.mmachs.s1
-    hexagon_M2_mmacls_rs0,                     // llvm.hexagon.M2.mmacls.rs0
-    hexagon_M2_mmacls_rs1,                     // llvm.hexagon.M2.mmacls.rs1
-    hexagon_M2_mmacls_s0,                      // llvm.hexagon.M2.mmacls.s0
-    hexagon_M2_mmacls_s1,                      // llvm.hexagon.M2.mmacls.s1
-    hexagon_M2_mmacuhs_rs0,                    // llvm.hexagon.M2.mmacuhs.rs0
-    hexagon_M2_mmacuhs_rs1,                    // llvm.hexagon.M2.mmacuhs.rs1
-    hexagon_M2_mmacuhs_s0,                     // llvm.hexagon.M2.mmacuhs.s0
-    hexagon_M2_mmacuhs_s1,                     // llvm.hexagon.M2.mmacuhs.s1
-    hexagon_M2_mmaculs_rs0,                    // llvm.hexagon.M2.mmaculs.rs0
-    hexagon_M2_mmaculs_rs1,                    // llvm.hexagon.M2.mmaculs.rs1
-    hexagon_M2_mmaculs_s0,                     // llvm.hexagon.M2.mmaculs.s0
-    hexagon_M2_mmaculs_s1,                     // llvm.hexagon.M2.mmaculs.s1
-    hexagon_M2_mmpyh_rs0,                      // llvm.hexagon.M2.mmpyh.rs0
-    hexagon_M2_mmpyh_rs1,                      // llvm.hexagon.M2.mmpyh.rs1
-    hexagon_M2_mmpyh_s0,                       // llvm.hexagon.M2.mmpyh.s0
-    hexagon_M2_mmpyh_s1,                       // llvm.hexagon.M2.mmpyh.s1
-    hexagon_M2_mmpyl_rs0,                      // llvm.hexagon.M2.mmpyl.rs0
-    hexagon_M2_mmpyl_rs1,                      // llvm.hexagon.M2.mmpyl.rs1
-    hexagon_M2_mmpyl_s0,                       // llvm.hexagon.M2.mmpyl.s0
-    hexagon_M2_mmpyl_s1,                       // llvm.hexagon.M2.mmpyl.s1
-    hexagon_M2_mmpyuh_rs0,                     // llvm.hexagon.M2.mmpyuh.rs0
-    hexagon_M2_mmpyuh_rs1,                     // llvm.hexagon.M2.mmpyuh.rs1
-    hexagon_M2_mmpyuh_s0,                      // llvm.hexagon.M2.mmpyuh.s0
-    hexagon_M2_mmpyuh_s1,                      // llvm.hexagon.M2.mmpyuh.s1
-    hexagon_M2_mmpyul_rs0,                     // llvm.hexagon.M2.mmpyul.rs0
-    hexagon_M2_mmpyul_rs1,                     // llvm.hexagon.M2.mmpyul.rs1
-    hexagon_M2_mmpyul_s0,                      // llvm.hexagon.M2.mmpyul.s0
-    hexagon_M2_mmpyul_s1,                      // llvm.hexagon.M2.mmpyul.s1
-    hexagon_M2_mpy_acc_hh_s0,                  // llvm.hexagon.M2.mpy.acc.hh.s0
-    hexagon_M2_mpy_acc_hh_s1,                  // llvm.hexagon.M2.mpy.acc.hh.s1
-    hexagon_M2_mpy_acc_hl_s0,                  // llvm.hexagon.M2.mpy.acc.hl.s0
-    hexagon_M2_mpy_acc_hl_s1,                  // llvm.hexagon.M2.mpy.acc.hl.s1
-    hexagon_M2_mpy_acc_lh_s0,                  // llvm.hexagon.M2.mpy.acc.lh.s0
-    hexagon_M2_mpy_acc_lh_s1,                  // llvm.hexagon.M2.mpy.acc.lh.s1
-    hexagon_M2_mpy_acc_ll_s0,                  // llvm.hexagon.M2.mpy.acc.ll.s0
-    hexagon_M2_mpy_acc_ll_s1,                  // llvm.hexagon.M2.mpy.acc.ll.s1
-    hexagon_M2_mpy_acc_sat_hh_s0,              // llvm.hexagon.M2.mpy.acc.sat.hh.s0
-    hexagon_M2_mpy_acc_sat_hh_s1,              // llvm.hexagon.M2.mpy.acc.sat.hh.s1
-    hexagon_M2_mpy_acc_sat_hl_s0,              // llvm.hexagon.M2.mpy.acc.sat.hl.s0
-    hexagon_M2_mpy_acc_sat_hl_s1,              // llvm.hexagon.M2.mpy.acc.sat.hl.s1
-    hexagon_M2_mpy_acc_sat_lh_s0,              // llvm.hexagon.M2.mpy.acc.sat.lh.s0
-    hexagon_M2_mpy_acc_sat_lh_s1,              // llvm.hexagon.M2.mpy.acc.sat.lh.s1
-    hexagon_M2_mpy_acc_sat_ll_s0,              // llvm.hexagon.M2.mpy.acc.sat.ll.s0
-    hexagon_M2_mpy_acc_sat_ll_s1,              // llvm.hexagon.M2.mpy.acc.sat.ll.s1
-    hexagon_M2_mpy_hh_s0,                      // llvm.hexagon.M2.mpy.hh.s0
-    hexagon_M2_mpy_hh_s1,                      // llvm.hexagon.M2.mpy.hh.s1
-    hexagon_M2_mpy_hl_s0,                      // llvm.hexagon.M2.mpy.hl.s0
-    hexagon_M2_mpy_hl_s1,                      // llvm.hexagon.M2.mpy.hl.s1
-    hexagon_M2_mpy_lh_s0,                      // llvm.hexagon.M2.mpy.lh.s0
-    hexagon_M2_mpy_lh_s1,                      // llvm.hexagon.M2.mpy.lh.s1
-    hexagon_M2_mpy_ll_s0,                      // llvm.hexagon.M2.mpy.ll.s0
-    hexagon_M2_mpy_ll_s1,                      // llvm.hexagon.M2.mpy.ll.s1
-    hexagon_M2_mpy_nac_hh_s0,                  // llvm.hexagon.M2.mpy.nac.hh.s0
-    hexagon_M2_mpy_nac_hh_s1,                  // llvm.hexagon.M2.mpy.nac.hh.s1
-    hexagon_M2_mpy_nac_hl_s0,                  // llvm.hexagon.M2.mpy.nac.hl.s0
-    hexagon_M2_mpy_nac_hl_s1,                  // llvm.hexagon.M2.mpy.nac.hl.s1
-    hexagon_M2_mpy_nac_lh_s0,                  // llvm.hexagon.M2.mpy.nac.lh.s0
-    hexagon_M2_mpy_nac_lh_s1,                  // llvm.hexagon.M2.mpy.nac.lh.s1
-    hexagon_M2_mpy_nac_ll_s0,                  // llvm.hexagon.M2.mpy.nac.ll.s0
-    hexagon_M2_mpy_nac_ll_s1,                  // llvm.hexagon.M2.mpy.nac.ll.s1
-    hexagon_M2_mpy_nac_sat_hh_s0,              // llvm.hexagon.M2.mpy.nac.sat.hh.s0
-    hexagon_M2_mpy_nac_sat_hh_s1,              // llvm.hexagon.M2.mpy.nac.sat.hh.s1
-    hexagon_M2_mpy_nac_sat_hl_s0,              // llvm.hexagon.M2.mpy.nac.sat.hl.s0
-    hexagon_M2_mpy_nac_sat_hl_s1,              // llvm.hexagon.M2.mpy.nac.sat.hl.s1
-    hexagon_M2_mpy_nac_sat_lh_s0,              // llvm.hexagon.M2.mpy.nac.sat.lh.s0
-    hexagon_M2_mpy_nac_sat_lh_s1,              // llvm.hexagon.M2.mpy.nac.sat.lh.s1
-    hexagon_M2_mpy_nac_sat_ll_s0,              // llvm.hexagon.M2.mpy.nac.sat.ll.s0
-    hexagon_M2_mpy_nac_sat_ll_s1,              // llvm.hexagon.M2.mpy.nac.sat.ll.s1
-    hexagon_M2_mpy_rnd_hh_s0,                  // llvm.hexagon.M2.mpy.rnd.hh.s0
-    hexagon_M2_mpy_rnd_hh_s1,                  // llvm.hexagon.M2.mpy.rnd.hh.s1
-    hexagon_M2_mpy_rnd_hl_s0,                  // llvm.hexagon.M2.mpy.rnd.hl.s0
-    hexagon_M2_mpy_rnd_hl_s1,                  // llvm.hexagon.M2.mpy.rnd.hl.s1
-    hexagon_M2_mpy_rnd_lh_s0,                  // llvm.hexagon.M2.mpy.rnd.lh.s0
-    hexagon_M2_mpy_rnd_lh_s1,                  // llvm.hexagon.M2.mpy.rnd.lh.s1
-    hexagon_M2_mpy_rnd_ll_s0,                  // llvm.hexagon.M2.mpy.rnd.ll.s0
-    hexagon_M2_mpy_rnd_ll_s1,                  // llvm.hexagon.M2.mpy.rnd.ll.s1
-    hexagon_M2_mpy_sat_hh_s0,                  // llvm.hexagon.M2.mpy.sat.hh.s0
-    hexagon_M2_mpy_sat_hh_s1,                  // llvm.hexagon.M2.mpy.sat.hh.s1
-    hexagon_M2_mpy_sat_hl_s0,                  // llvm.hexagon.M2.mpy.sat.hl.s0
-    hexagon_M2_mpy_sat_hl_s1,                  // llvm.hexagon.M2.mpy.sat.hl.s1
-    hexagon_M2_mpy_sat_lh_s0,                  // llvm.hexagon.M2.mpy.sat.lh.s0
-    hexagon_M2_mpy_sat_lh_s1,                  // llvm.hexagon.M2.mpy.sat.lh.s1
-    hexagon_M2_mpy_sat_ll_s0,                  // llvm.hexagon.M2.mpy.sat.ll.s0
-    hexagon_M2_mpy_sat_ll_s1,                  // llvm.hexagon.M2.mpy.sat.ll.s1
-    hexagon_M2_mpy_sat_rnd_hh_s0,              // llvm.hexagon.M2.mpy.sat.rnd.hh.s0
-    hexagon_M2_mpy_sat_rnd_hh_s1,              // llvm.hexagon.M2.mpy.sat.rnd.hh.s1
-    hexagon_M2_mpy_sat_rnd_hl_s0,              // llvm.hexagon.M2.mpy.sat.rnd.hl.s0
-    hexagon_M2_mpy_sat_rnd_hl_s1,              // llvm.hexagon.M2.mpy.sat.rnd.hl.s1
-    hexagon_M2_mpy_sat_rnd_lh_s0,              // llvm.hexagon.M2.mpy.sat.rnd.lh.s0
-    hexagon_M2_mpy_sat_rnd_lh_s1,              // llvm.hexagon.M2.mpy.sat.rnd.lh.s1
-    hexagon_M2_mpy_sat_rnd_ll_s0,              // llvm.hexagon.M2.mpy.sat.rnd.ll.s0
-    hexagon_M2_mpy_sat_rnd_ll_s1,              // llvm.hexagon.M2.mpy.sat.rnd.ll.s1
-    hexagon_M2_mpy_up,                         // llvm.hexagon.M2.mpy.up
-    hexagon_M2_mpy_up_s1,                      // llvm.hexagon.M2.mpy.up.s1
-    hexagon_M2_mpy_up_s1_sat,                  // llvm.hexagon.M2.mpy.up.s1.sat
-    hexagon_M2_mpyd_acc_hh_s0,                 // llvm.hexagon.M2.mpyd.acc.hh.s0
-    hexagon_M2_mpyd_acc_hh_s1,                 // llvm.hexagon.M2.mpyd.acc.hh.s1
-    hexagon_M2_mpyd_acc_hl_s0,                 // llvm.hexagon.M2.mpyd.acc.hl.s0
-    hexagon_M2_mpyd_acc_hl_s1,                 // llvm.hexagon.M2.mpyd.acc.hl.s1
-    hexagon_M2_mpyd_acc_lh_s0,                 // llvm.hexagon.M2.mpyd.acc.lh.s0
-    hexagon_M2_mpyd_acc_lh_s1,                 // llvm.hexagon.M2.mpyd.acc.lh.s1
-    hexagon_M2_mpyd_acc_ll_s0,                 // llvm.hexagon.M2.mpyd.acc.ll.s0
-    hexagon_M2_mpyd_acc_ll_s1,                 // llvm.hexagon.M2.mpyd.acc.ll.s1
-    hexagon_M2_mpyd_hh_s0,                     // llvm.hexagon.M2.mpyd.hh.s0
-    hexagon_M2_mpyd_hh_s1,                     // llvm.hexagon.M2.mpyd.hh.s1
-    hexagon_M2_mpyd_hl_s0,                     // llvm.hexagon.M2.mpyd.hl.s0
-    hexagon_M2_mpyd_hl_s1,                     // llvm.hexagon.M2.mpyd.hl.s1
-    hexagon_M2_mpyd_lh_s0,                     // llvm.hexagon.M2.mpyd.lh.s0
-    hexagon_M2_mpyd_lh_s1,                     // llvm.hexagon.M2.mpyd.lh.s1
-    hexagon_M2_mpyd_ll_s0,                     // llvm.hexagon.M2.mpyd.ll.s0
-    hexagon_M2_mpyd_ll_s1,                     // llvm.hexagon.M2.mpyd.ll.s1
-    hexagon_M2_mpyd_nac_hh_s0,                 // llvm.hexagon.M2.mpyd.nac.hh.s0
-    hexagon_M2_mpyd_nac_hh_s1,                 // llvm.hexagon.M2.mpyd.nac.hh.s1
-    hexagon_M2_mpyd_nac_hl_s0,                 // llvm.hexagon.M2.mpyd.nac.hl.s0
-    hexagon_M2_mpyd_nac_hl_s1,                 // llvm.hexagon.M2.mpyd.nac.hl.s1
-    hexagon_M2_mpyd_nac_lh_s0,                 // llvm.hexagon.M2.mpyd.nac.lh.s0
-    hexagon_M2_mpyd_nac_lh_s1,                 // llvm.hexagon.M2.mpyd.nac.lh.s1
-    hexagon_M2_mpyd_nac_ll_s0,                 // llvm.hexagon.M2.mpyd.nac.ll.s0
-    hexagon_M2_mpyd_nac_ll_s1,                 // llvm.hexagon.M2.mpyd.nac.ll.s1
-    hexagon_M2_mpyd_rnd_hh_s0,                 // llvm.hexagon.M2.mpyd.rnd.hh.s0
-    hexagon_M2_mpyd_rnd_hh_s1,                 // llvm.hexagon.M2.mpyd.rnd.hh.s1
-    hexagon_M2_mpyd_rnd_hl_s0,                 // llvm.hexagon.M2.mpyd.rnd.hl.s0
-    hexagon_M2_mpyd_rnd_hl_s1,                 // llvm.hexagon.M2.mpyd.rnd.hl.s1
-    hexagon_M2_mpyd_rnd_lh_s0,                 // llvm.hexagon.M2.mpyd.rnd.lh.s0
-    hexagon_M2_mpyd_rnd_lh_s1,                 // llvm.hexagon.M2.mpyd.rnd.lh.s1
-    hexagon_M2_mpyd_rnd_ll_s0,                 // llvm.hexagon.M2.mpyd.rnd.ll.s0
-    hexagon_M2_mpyd_rnd_ll_s1,                 // llvm.hexagon.M2.mpyd.rnd.ll.s1
-    hexagon_M2_mpyi,                           // llvm.hexagon.M2.mpyi
-    hexagon_M2_mpysmi,                         // llvm.hexagon.M2.mpysmi
-    hexagon_M2_mpysu_up,                       // llvm.hexagon.M2.mpysu.up
-    hexagon_M2_mpyu_acc_hh_s0,                 // llvm.hexagon.M2.mpyu.acc.hh.s0
-    hexagon_M2_mpyu_acc_hh_s1,                 // llvm.hexagon.M2.mpyu.acc.hh.s1
-    hexagon_M2_mpyu_acc_hl_s0,                 // llvm.hexagon.M2.mpyu.acc.hl.s0
-    hexagon_M2_mpyu_acc_hl_s1,                 // llvm.hexagon.M2.mpyu.acc.hl.s1
-    hexagon_M2_mpyu_acc_lh_s0,                 // llvm.hexagon.M2.mpyu.acc.lh.s0
-    hexagon_M2_mpyu_acc_lh_s1,                 // llvm.hexagon.M2.mpyu.acc.lh.s1
-    hexagon_M2_mpyu_acc_ll_s0,                 // llvm.hexagon.M2.mpyu.acc.ll.s0
-    hexagon_M2_mpyu_acc_ll_s1,                 // llvm.hexagon.M2.mpyu.acc.ll.s1
-    hexagon_M2_mpyu_hh_s0,                     // llvm.hexagon.M2.mpyu.hh.s0
-    hexagon_M2_mpyu_hh_s1,                     // llvm.hexagon.M2.mpyu.hh.s1
-    hexagon_M2_mpyu_hl_s0,                     // llvm.hexagon.M2.mpyu.hl.s0
-    hexagon_M2_mpyu_hl_s1,                     // llvm.hexagon.M2.mpyu.hl.s1
-    hexagon_M2_mpyu_lh_s0,                     // llvm.hexagon.M2.mpyu.lh.s0
-    hexagon_M2_mpyu_lh_s1,                     // llvm.hexagon.M2.mpyu.lh.s1
-    hexagon_M2_mpyu_ll_s0,                     // llvm.hexagon.M2.mpyu.ll.s0
-    hexagon_M2_mpyu_ll_s1,                     // llvm.hexagon.M2.mpyu.ll.s1
-    hexagon_M2_mpyu_nac_hh_s0,                 // llvm.hexagon.M2.mpyu.nac.hh.s0
-    hexagon_M2_mpyu_nac_hh_s1,                 // llvm.hexagon.M2.mpyu.nac.hh.s1
-    hexagon_M2_mpyu_nac_hl_s0,                 // llvm.hexagon.M2.mpyu.nac.hl.s0
-    hexagon_M2_mpyu_nac_hl_s1,                 // llvm.hexagon.M2.mpyu.nac.hl.s1
-    hexagon_M2_mpyu_nac_lh_s0,                 // llvm.hexagon.M2.mpyu.nac.lh.s0
-    hexagon_M2_mpyu_nac_lh_s1,                 // llvm.hexagon.M2.mpyu.nac.lh.s1
-    hexagon_M2_mpyu_nac_ll_s0,                 // llvm.hexagon.M2.mpyu.nac.ll.s0
-    hexagon_M2_mpyu_nac_ll_s1,                 // llvm.hexagon.M2.mpyu.nac.ll.s1
-    hexagon_M2_mpyu_up,                        // llvm.hexagon.M2.mpyu.up
-    hexagon_M2_mpyud_acc_hh_s0,                // llvm.hexagon.M2.mpyud.acc.hh.s0
-    hexagon_M2_mpyud_acc_hh_s1,                // llvm.hexagon.M2.mpyud.acc.hh.s1
-    hexagon_M2_mpyud_acc_hl_s0,                // llvm.hexagon.M2.mpyud.acc.hl.s0
-    hexagon_M2_mpyud_acc_hl_s1,                // llvm.hexagon.M2.mpyud.acc.hl.s1
-    hexagon_M2_mpyud_acc_lh_s0,                // llvm.hexagon.M2.mpyud.acc.lh.s0
-    hexagon_M2_mpyud_acc_lh_s1,                // llvm.hexagon.M2.mpyud.acc.lh.s1
-    hexagon_M2_mpyud_acc_ll_s0,                // llvm.hexagon.M2.mpyud.acc.ll.s0
-    hexagon_M2_mpyud_acc_ll_s1,                // llvm.hexagon.M2.mpyud.acc.ll.s1
-    hexagon_M2_mpyud_hh_s0,                    // llvm.hexagon.M2.mpyud.hh.s0
-    hexagon_M2_mpyud_hh_s1,                    // llvm.hexagon.M2.mpyud.hh.s1
-    hexagon_M2_mpyud_hl_s0,                    // llvm.hexagon.M2.mpyud.hl.s0
-    hexagon_M2_mpyud_hl_s1,                    // llvm.hexagon.M2.mpyud.hl.s1
-    hexagon_M2_mpyud_lh_s0,                    // llvm.hexagon.M2.mpyud.lh.s0
-    hexagon_M2_mpyud_lh_s1,                    // llvm.hexagon.M2.mpyud.lh.s1
-    hexagon_M2_mpyud_ll_s0,                    // llvm.hexagon.M2.mpyud.ll.s0
-    hexagon_M2_mpyud_ll_s1,                    // llvm.hexagon.M2.mpyud.ll.s1
-    hexagon_M2_mpyud_nac_hh_s0,                // llvm.hexagon.M2.mpyud.nac.hh.s0
-    hexagon_M2_mpyud_nac_hh_s1,                // llvm.hexagon.M2.mpyud.nac.hh.s1
-    hexagon_M2_mpyud_nac_hl_s0,                // llvm.hexagon.M2.mpyud.nac.hl.s0
-    hexagon_M2_mpyud_nac_hl_s1,                // llvm.hexagon.M2.mpyud.nac.hl.s1
-    hexagon_M2_mpyud_nac_lh_s0,                // llvm.hexagon.M2.mpyud.nac.lh.s0
-    hexagon_M2_mpyud_nac_lh_s1,                // llvm.hexagon.M2.mpyud.nac.lh.s1
-    hexagon_M2_mpyud_nac_ll_s0,                // llvm.hexagon.M2.mpyud.nac.ll.s0
-    hexagon_M2_mpyud_nac_ll_s1,                // llvm.hexagon.M2.mpyud.nac.ll.s1
-    hexagon_M2_mpyui,                          // llvm.hexagon.M2.mpyui
-    hexagon_M2_nacci,                          // llvm.hexagon.M2.nacci
-    hexagon_M2_naccii,                         // llvm.hexagon.M2.naccii
-    hexagon_M2_subacc,                         // llvm.hexagon.M2.subacc
-    hexagon_M2_vabsdiffh,                      // llvm.hexagon.M2.vabsdiffh
-    hexagon_M2_vabsdiffw,                      // llvm.hexagon.M2.vabsdiffw
-    hexagon_M2_vcmac_s0_sat_i,                 // llvm.hexagon.M2.vcmac.s0.sat.i
-    hexagon_M2_vcmac_s0_sat_r,                 // llvm.hexagon.M2.vcmac.s0.sat.r
-    hexagon_M2_vcmpy_s0_sat_i,                 // llvm.hexagon.M2.vcmpy.s0.sat.i
-    hexagon_M2_vcmpy_s0_sat_r,                 // llvm.hexagon.M2.vcmpy.s0.sat.r
-    hexagon_M2_vcmpy_s1_sat_i,                 // llvm.hexagon.M2.vcmpy.s1.sat.i
-    hexagon_M2_vcmpy_s1_sat_r,                 // llvm.hexagon.M2.vcmpy.s1.sat.r
-    hexagon_M2_vdmacs_s0,                      // llvm.hexagon.M2.vdmacs.s0
-    hexagon_M2_vdmacs_s1,                      // llvm.hexagon.M2.vdmacs.s1
-    hexagon_M2_vdmpyrs_s0,                     // llvm.hexagon.M2.vdmpyrs.s0
-    hexagon_M2_vdmpyrs_s1,                     // llvm.hexagon.M2.vdmpyrs.s1
-    hexagon_M2_vdmpys_s0,                      // llvm.hexagon.M2.vdmpys.s0
-    hexagon_M2_vdmpys_s1,                      // llvm.hexagon.M2.vdmpys.s1
-    hexagon_M2_vmac2,                          // llvm.hexagon.M2.vmac2
-    hexagon_M2_vmac2es,                        // llvm.hexagon.M2.vmac2es
-    hexagon_M2_vmac2es_s0,                     // llvm.hexagon.M2.vmac2es.s0
-    hexagon_M2_vmac2es_s1,                     // llvm.hexagon.M2.vmac2es.s1
-    hexagon_M2_vmac2s_s0,                      // llvm.hexagon.M2.vmac2s.s0
-    hexagon_M2_vmac2s_s1,                      // llvm.hexagon.M2.vmac2s.s1
-    hexagon_M2_vmac2su_s0,                     // llvm.hexagon.M2.vmac2su.s0
-    hexagon_M2_vmac2su_s1,                     // llvm.hexagon.M2.vmac2su.s1
-    hexagon_M2_vmpy2es_s0,                     // llvm.hexagon.M2.vmpy2es.s0
-    hexagon_M2_vmpy2es_s1,                     // llvm.hexagon.M2.vmpy2es.s1
-    hexagon_M2_vmpy2s_s0,                      // llvm.hexagon.M2.vmpy2s.s0
-    hexagon_M2_vmpy2s_s0pack,                  // llvm.hexagon.M2.vmpy2s.s0pack
-    hexagon_M2_vmpy2s_s1,                      // llvm.hexagon.M2.vmpy2s.s1
-    hexagon_M2_vmpy2s_s1pack,                  // llvm.hexagon.M2.vmpy2s.s1pack
-    hexagon_M2_vmpy2su_s0,                     // llvm.hexagon.M2.vmpy2su.s0
-    hexagon_M2_vmpy2su_s1,                     // llvm.hexagon.M2.vmpy2su.s1
-    hexagon_M2_vraddh,                         // llvm.hexagon.M2.vraddh
-    hexagon_M2_vradduh,                        // llvm.hexagon.M2.vradduh
-    hexagon_M2_vrcmaci_s0,                     // llvm.hexagon.M2.vrcmaci.s0
-    hexagon_M2_vrcmaci_s0c,                    // llvm.hexagon.M2.vrcmaci.s0c
-    hexagon_M2_vrcmacr_s0,                     // llvm.hexagon.M2.vrcmacr.s0
-    hexagon_M2_vrcmacr_s0c,                    // llvm.hexagon.M2.vrcmacr.s0c
-    hexagon_M2_vrcmpyi_s0,                     // llvm.hexagon.M2.vrcmpyi.s0
-    hexagon_M2_vrcmpyi_s0c,                    // llvm.hexagon.M2.vrcmpyi.s0c
-    hexagon_M2_vrcmpyr_s0,                     // llvm.hexagon.M2.vrcmpyr.s0
-    hexagon_M2_vrcmpyr_s0c,                    // llvm.hexagon.M2.vrcmpyr.s0c
-    hexagon_M2_vrcmpys_acc_s1,                 // llvm.hexagon.M2.vrcmpys.acc.s1
-    hexagon_M2_vrcmpys_s1,                     // llvm.hexagon.M2.vrcmpys.s1
-    hexagon_M2_vrcmpys_s1rp,                   // llvm.hexagon.M2.vrcmpys.s1rp
-    hexagon_M2_vrmac_s0,                       // llvm.hexagon.M2.vrmac.s0
-    hexagon_M2_vrmpy_s0,                       // llvm.hexagon.M2.vrmpy.s0
-    hexagon_M2_xor_xacc,                       // llvm.hexagon.M2.xor.xacc
-    hexagon_M4_and_and,                        // llvm.hexagon.M4.and.and
-    hexagon_M4_and_andn,                       // llvm.hexagon.M4.and.andn
-    hexagon_M4_and_or,                         // llvm.hexagon.M4.and.or
-    hexagon_M4_and_xor,                        // llvm.hexagon.M4.and.xor
-    hexagon_M4_cmpyi_wh,                       // llvm.hexagon.M4.cmpyi.wh
-    hexagon_M4_cmpyi_whc,                      // llvm.hexagon.M4.cmpyi.whc
-    hexagon_M4_cmpyr_wh,                       // llvm.hexagon.M4.cmpyr.wh
-    hexagon_M4_cmpyr_whc,                      // llvm.hexagon.M4.cmpyr.whc
-    hexagon_M4_mac_up_s1_sat,                  // llvm.hexagon.M4.mac.up.s1.sat
-    hexagon_M4_mpyri_addi,                     // llvm.hexagon.M4.mpyri.addi
-    hexagon_M4_mpyri_addr,                     // llvm.hexagon.M4.mpyri.addr
-    hexagon_M4_mpyri_addr_u2,                  // llvm.hexagon.M4.mpyri.addr.u2
-    hexagon_M4_mpyrr_addi,                     // llvm.hexagon.M4.mpyrr.addi
-    hexagon_M4_mpyrr_addr,                     // llvm.hexagon.M4.mpyrr.addr
-    hexagon_M4_nac_up_s1_sat,                  // llvm.hexagon.M4.nac.up.s1.sat
-    hexagon_M4_or_and,                         // llvm.hexagon.M4.or.and
-    hexagon_M4_or_andn,                        // llvm.hexagon.M4.or.andn
-    hexagon_M4_or_or,                          // llvm.hexagon.M4.or.or
-    hexagon_M4_or_xor,                         // llvm.hexagon.M4.or.xor
-    hexagon_M4_pmpyw,                          // llvm.hexagon.M4.pmpyw
-    hexagon_M4_pmpyw_acc,                      // llvm.hexagon.M4.pmpyw.acc
-    hexagon_M4_vpmpyh,                         // llvm.hexagon.M4.vpmpyh
-    hexagon_M4_vpmpyh_acc,                     // llvm.hexagon.M4.vpmpyh.acc
-    hexagon_M4_vrmpyeh_acc_s0,                 // llvm.hexagon.M4.vrmpyeh.acc.s0
-    hexagon_M4_vrmpyeh_acc_s1,                 // llvm.hexagon.M4.vrmpyeh.acc.s1
-    hexagon_M4_vrmpyeh_s0,                     // llvm.hexagon.M4.vrmpyeh.s0
-    hexagon_M4_vrmpyeh_s1,                     // llvm.hexagon.M4.vrmpyeh.s1
-    hexagon_M4_vrmpyoh_acc_s0,                 // llvm.hexagon.M4.vrmpyoh.acc.s0
-    hexagon_M4_vrmpyoh_acc_s1,                 // llvm.hexagon.M4.vrmpyoh.acc.s1
-    hexagon_M4_vrmpyoh_s0,                     // llvm.hexagon.M4.vrmpyoh.s0
-    hexagon_M4_vrmpyoh_s1,                     // llvm.hexagon.M4.vrmpyoh.s1
-    hexagon_M4_xor_and,                        // llvm.hexagon.M4.xor.and
-    hexagon_M4_xor_andn,                       // llvm.hexagon.M4.xor.andn
-    hexagon_M4_xor_or,                         // llvm.hexagon.M4.xor.or
-    hexagon_M4_xor_xacc,                       // llvm.hexagon.M4.xor.xacc
-    hexagon_M5_vdmacbsu,                       // llvm.hexagon.M5.vdmacbsu
-    hexagon_M5_vdmpybsu,                       // llvm.hexagon.M5.vdmpybsu
-    hexagon_M5_vmacbsu,                        // llvm.hexagon.M5.vmacbsu
-    hexagon_M5_vmacbuu,                        // llvm.hexagon.M5.vmacbuu
-    hexagon_M5_vmpybsu,                        // llvm.hexagon.M5.vmpybsu
-    hexagon_M5_vmpybuu,                        // llvm.hexagon.M5.vmpybuu
-    hexagon_M5_vrmacbsu,                       // llvm.hexagon.M5.vrmacbsu
-    hexagon_M5_vrmacbuu,                       // llvm.hexagon.M5.vrmacbuu
-    hexagon_M5_vrmpybsu,                       // llvm.hexagon.M5.vrmpybsu
-    hexagon_M5_vrmpybuu,                       // llvm.hexagon.M5.vrmpybuu
-    hexagon_M6_vabsdiffb,                      // llvm.hexagon.M6.vabsdiffb
-    hexagon_M6_vabsdiffub,                     // llvm.hexagon.M6.vabsdiffub
-    hexagon_S2_addasl_rrri,                    // llvm.hexagon.S2.addasl.rrri
-    hexagon_S2_asl_i_p,                        // llvm.hexagon.S2.asl.i.p
-    hexagon_S2_asl_i_p_acc,                    // llvm.hexagon.S2.asl.i.p.acc
-    hexagon_S2_asl_i_p_and,                    // llvm.hexagon.S2.asl.i.p.and
-    hexagon_S2_asl_i_p_nac,                    // llvm.hexagon.S2.asl.i.p.nac
-    hexagon_S2_asl_i_p_or,                     // llvm.hexagon.S2.asl.i.p.or
-    hexagon_S2_asl_i_p_xacc,                   // llvm.hexagon.S2.asl.i.p.xacc
-    hexagon_S2_asl_i_r,                        // llvm.hexagon.S2.asl.i.r
-    hexagon_S2_asl_i_r_acc,                    // llvm.hexagon.S2.asl.i.r.acc
-    hexagon_S2_asl_i_r_and,                    // llvm.hexagon.S2.asl.i.r.and
-    hexagon_S2_asl_i_r_nac,                    // llvm.hexagon.S2.asl.i.r.nac
-    hexagon_S2_asl_i_r_or,                     // llvm.hexagon.S2.asl.i.r.or
-    hexagon_S2_asl_i_r_sat,                    // llvm.hexagon.S2.asl.i.r.sat
-    hexagon_S2_asl_i_r_xacc,                   // llvm.hexagon.S2.asl.i.r.xacc
-    hexagon_S2_asl_i_vh,                       // llvm.hexagon.S2.asl.i.vh
-    hexagon_S2_asl_i_vw,                       // llvm.hexagon.S2.asl.i.vw
-    hexagon_S2_asl_r_p,                        // llvm.hexagon.S2.asl.r.p
-    hexagon_S2_asl_r_p_acc,                    // llvm.hexagon.S2.asl.r.p.acc
-    hexagon_S2_asl_r_p_and,                    // llvm.hexagon.S2.asl.r.p.and
-    hexagon_S2_asl_r_p_nac,                    // llvm.hexagon.S2.asl.r.p.nac
-    hexagon_S2_asl_r_p_or,                     // llvm.hexagon.S2.asl.r.p.or
-    hexagon_S2_asl_r_p_xor,                    // llvm.hexagon.S2.asl.r.p.xor
-    hexagon_S2_asl_r_r,                        // llvm.hexagon.S2.asl.r.r
-    hexagon_S2_asl_r_r_acc,                    // llvm.hexagon.S2.asl.r.r.acc
-    hexagon_S2_asl_r_r_and,                    // llvm.hexagon.S2.asl.r.r.and
-    hexagon_S2_asl_r_r_nac,                    // llvm.hexagon.S2.asl.r.r.nac
-    hexagon_S2_asl_r_r_or,                     // llvm.hexagon.S2.asl.r.r.or
-    hexagon_S2_asl_r_r_sat,                    // llvm.hexagon.S2.asl.r.r.sat
-    hexagon_S2_asl_r_vh,                       // llvm.hexagon.S2.asl.r.vh
-    hexagon_S2_asl_r_vw,                       // llvm.hexagon.S2.asl.r.vw
-    hexagon_S2_asr_i_p,                        // llvm.hexagon.S2.asr.i.p
-    hexagon_S2_asr_i_p_acc,                    // llvm.hexagon.S2.asr.i.p.acc
-    hexagon_S2_asr_i_p_and,                    // llvm.hexagon.S2.asr.i.p.and
-    hexagon_S2_asr_i_p_nac,                    // llvm.hexagon.S2.asr.i.p.nac
-    hexagon_S2_asr_i_p_or,                     // llvm.hexagon.S2.asr.i.p.or
-    hexagon_S2_asr_i_p_rnd,                    // llvm.hexagon.S2.asr.i.p.rnd
-    hexagon_S2_asr_i_p_rnd_goodsyntax,         // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
-    hexagon_S2_asr_i_r,                        // llvm.hexagon.S2.asr.i.r
-    hexagon_S2_asr_i_r_acc,                    // llvm.hexagon.S2.asr.i.r.acc
-    hexagon_S2_asr_i_r_and,                    // llvm.hexagon.S2.asr.i.r.and
-    hexagon_S2_asr_i_r_nac,                    // llvm.hexagon.S2.asr.i.r.nac
-    hexagon_S2_asr_i_r_or,                     // llvm.hexagon.S2.asr.i.r.or
-    hexagon_S2_asr_i_r_rnd,                    // llvm.hexagon.S2.asr.i.r.rnd
-    hexagon_S2_asr_i_r_rnd_goodsyntax,         // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
-    hexagon_S2_asr_i_svw_trun,                 // llvm.hexagon.S2.asr.i.svw.trun
-    hexagon_S2_asr_i_vh,                       // llvm.hexagon.S2.asr.i.vh
-    hexagon_S2_asr_i_vw,                       // llvm.hexagon.S2.asr.i.vw
-    hexagon_S2_asr_r_p,                        // llvm.hexagon.S2.asr.r.p
-    hexagon_S2_asr_r_p_acc,                    // llvm.hexagon.S2.asr.r.p.acc
-    hexagon_S2_asr_r_p_and,                    // llvm.hexagon.S2.asr.r.p.and
-    hexagon_S2_asr_r_p_nac,                    // llvm.hexagon.S2.asr.r.p.nac
-    hexagon_S2_asr_r_p_or,                     // llvm.hexagon.S2.asr.r.p.or
-    hexagon_S2_asr_r_p_xor,                    // llvm.hexagon.S2.asr.r.p.xor
-    hexagon_S2_asr_r_r,                        // llvm.hexagon.S2.asr.r.r
-    hexagon_S2_asr_r_r_acc,                    // llvm.hexagon.S2.asr.r.r.acc
-    hexagon_S2_asr_r_r_and,                    // llvm.hexagon.S2.asr.r.r.and
-    hexagon_S2_asr_r_r_nac,                    // llvm.hexagon.S2.asr.r.r.nac
-    hexagon_S2_asr_r_r_or,                     // llvm.hexagon.S2.asr.r.r.or
-    hexagon_S2_asr_r_r_sat,                    // llvm.hexagon.S2.asr.r.r.sat
-    hexagon_S2_asr_r_svw_trun,                 // llvm.hexagon.S2.asr.r.svw.trun
-    hexagon_S2_asr_r_vh,                       // llvm.hexagon.S2.asr.r.vh
-    hexagon_S2_asr_r_vw,                       // llvm.hexagon.S2.asr.r.vw
-    hexagon_S2_brev,                           // llvm.hexagon.S2.brev
-    hexagon_S2_brevp,                          // llvm.hexagon.S2.brevp
-    hexagon_S2_cabacencbin,                    // llvm.hexagon.S2.cabacencbin
-    hexagon_S2_cl0,                            // llvm.hexagon.S2.cl0
-    hexagon_S2_cl0p,                           // llvm.hexagon.S2.cl0p
-    hexagon_S2_cl1,                            // llvm.hexagon.S2.cl1
-    hexagon_S2_cl1p,                           // llvm.hexagon.S2.cl1p
-    hexagon_S2_clb,                            // llvm.hexagon.S2.clb
-    hexagon_S2_clbnorm,                        // llvm.hexagon.S2.clbnorm
-    hexagon_S2_clbp,                           // llvm.hexagon.S2.clbp
-    hexagon_S2_clrbit_i,                       // llvm.hexagon.S2.clrbit.i
-    hexagon_S2_clrbit_r,                       // llvm.hexagon.S2.clrbit.r
-    hexagon_S2_ct0,                            // llvm.hexagon.S2.ct0
-    hexagon_S2_ct0p,                           // llvm.hexagon.S2.ct0p
-    hexagon_S2_ct1,                            // llvm.hexagon.S2.ct1
-    hexagon_S2_ct1p,                           // llvm.hexagon.S2.ct1p
-    hexagon_S2_deinterleave,                   // llvm.hexagon.S2.deinterleave
-    hexagon_S2_extractu,                       // llvm.hexagon.S2.extractu
-    hexagon_S2_extractu_rp,                    // llvm.hexagon.S2.extractu.rp
-    hexagon_S2_extractup,                      // llvm.hexagon.S2.extractup
-    hexagon_S2_extractup_rp,                   // llvm.hexagon.S2.extractup.rp
-    hexagon_S2_insert,                         // llvm.hexagon.S2.insert
-    hexagon_S2_insert_rp,                      // llvm.hexagon.S2.insert.rp
-    hexagon_S2_insertp,                        // llvm.hexagon.S2.insertp
-    hexagon_S2_insertp_rp,                     // llvm.hexagon.S2.insertp.rp
-    hexagon_S2_interleave,                     // llvm.hexagon.S2.interleave
-    hexagon_S2_lfsp,                           // llvm.hexagon.S2.lfsp
-    hexagon_S2_lsl_r_p,                        // llvm.hexagon.S2.lsl.r.p
-    hexagon_S2_lsl_r_p_acc,                    // llvm.hexagon.S2.lsl.r.p.acc
-    hexagon_S2_lsl_r_p_and,                    // llvm.hexagon.S2.lsl.r.p.and
-    hexagon_S2_lsl_r_p_nac,                    // llvm.hexagon.S2.lsl.r.p.nac
-    hexagon_S2_lsl_r_p_or,                     // llvm.hexagon.S2.lsl.r.p.or
-    hexagon_S2_lsl_r_p_xor,                    // llvm.hexagon.S2.lsl.r.p.xor
-    hexagon_S2_lsl_r_r,                        // llvm.hexagon.S2.lsl.r.r
-    hexagon_S2_lsl_r_r_acc,                    // llvm.hexagon.S2.lsl.r.r.acc
-    hexagon_S2_lsl_r_r_and,                    // llvm.hexagon.S2.lsl.r.r.and
-    hexagon_S2_lsl_r_r_nac,                    // llvm.hexagon.S2.lsl.r.r.nac
-    hexagon_S2_lsl_r_r_or,                     // llvm.hexagon.S2.lsl.r.r.or
-    hexagon_S2_lsl_r_vh,                       // llvm.hexagon.S2.lsl.r.vh
-    hexagon_S2_lsl_r_vw,                       // llvm.hexagon.S2.lsl.r.vw
-    hexagon_S2_lsr_i_p,                        // llvm.hexagon.S2.lsr.i.p
-    hexagon_S2_lsr_i_p_acc,                    // llvm.hexagon.S2.lsr.i.p.acc
-    hexagon_S2_lsr_i_p_and,                    // llvm.hexagon.S2.lsr.i.p.and
-    hexagon_S2_lsr_i_p_nac,                    // llvm.hexagon.S2.lsr.i.p.nac
-    hexagon_S2_lsr_i_p_or,                     // llvm.hexagon.S2.lsr.i.p.or
-    hexagon_S2_lsr_i_p_xacc,                   // llvm.hexagon.S2.lsr.i.p.xacc
-    hexagon_S2_lsr_i_r,                        // llvm.hexagon.S2.lsr.i.r
-    hexagon_S2_lsr_i_r_acc,                    // llvm.hexagon.S2.lsr.i.r.acc
-    hexagon_S2_lsr_i_r_and,                    // llvm.hexagon.S2.lsr.i.r.and
-    hexagon_S2_lsr_i_r_nac,                    // llvm.hexagon.S2.lsr.i.r.nac
-    hexagon_S2_lsr_i_r_or,                     // llvm.hexagon.S2.lsr.i.r.or
-    hexagon_S2_lsr_i_r_xacc,                   // llvm.hexagon.S2.lsr.i.r.xacc
-    hexagon_S2_lsr_i_vh,                       // llvm.hexagon.S2.lsr.i.vh
-    hexagon_S2_lsr_i_vw,                       // llvm.hexagon.S2.lsr.i.vw
-    hexagon_S2_lsr_r_p,                        // llvm.hexagon.S2.lsr.r.p
-    hexagon_S2_lsr_r_p_acc,                    // llvm.hexagon.S2.lsr.r.p.acc
-    hexagon_S2_lsr_r_p_and,                    // llvm.hexagon.S2.lsr.r.p.and
-    hexagon_S2_lsr_r_p_nac,                    // llvm.hexagon.S2.lsr.r.p.nac
-    hexagon_S2_lsr_r_p_or,                     // llvm.hexagon.S2.lsr.r.p.or
-    hexagon_S2_lsr_r_p_xor,                    // llvm.hexagon.S2.lsr.r.p.xor
-    hexagon_S2_lsr_r_r,                        // llvm.hexagon.S2.lsr.r.r
-    hexagon_S2_lsr_r_r_acc,                    // llvm.hexagon.S2.lsr.r.r.acc
-    hexagon_S2_lsr_r_r_and,                    // llvm.hexagon.S2.lsr.r.r.and
-    hexagon_S2_lsr_r_r_nac,                    // llvm.hexagon.S2.lsr.r.r.nac
-    hexagon_S2_lsr_r_r_or,                     // llvm.hexagon.S2.lsr.r.r.or
-    hexagon_S2_lsr_r_vh,                       // llvm.hexagon.S2.lsr.r.vh
-    hexagon_S2_lsr_r_vw,                       // llvm.hexagon.S2.lsr.r.vw
-    hexagon_S2_packhl,                         // llvm.hexagon.S2.packhl
-    hexagon_S2_parityp,                        // llvm.hexagon.S2.parityp
-    hexagon_S2_setbit_i,                       // llvm.hexagon.S2.setbit.i
-    hexagon_S2_setbit_r,                       // llvm.hexagon.S2.setbit.r
-    hexagon_S2_shuffeb,                        // llvm.hexagon.S2.shuffeb
-    hexagon_S2_shuffeh,                        // llvm.hexagon.S2.shuffeh
-    hexagon_S2_shuffob,                        // llvm.hexagon.S2.shuffob
-    hexagon_S2_shuffoh,                        // llvm.hexagon.S2.shuffoh
-    hexagon_S2_storerb_pbr,                    // llvm.hexagon.S2.storerb.pbr
-    hexagon_S2_storerb_pci,                    // llvm.hexagon.S2.storerb.pci
-    hexagon_S2_storerb_pcr,                    // llvm.hexagon.S2.storerb.pcr
-    hexagon_S2_storerd_pbr,                    // llvm.hexagon.S2.storerd.pbr
-    hexagon_S2_storerd_pci,                    // llvm.hexagon.S2.storerd.pci
-    hexagon_S2_storerd_pcr,                    // llvm.hexagon.S2.storerd.pcr
-    hexagon_S2_storerf_pbr,                    // llvm.hexagon.S2.storerf.pbr
-    hexagon_S2_storerf_pci,                    // llvm.hexagon.S2.storerf.pci
-    hexagon_S2_storerf_pcr,                    // llvm.hexagon.S2.storerf.pcr
-    hexagon_S2_storerh_pbr,                    // llvm.hexagon.S2.storerh.pbr
-    hexagon_S2_storerh_pci,                    // llvm.hexagon.S2.storerh.pci
-    hexagon_S2_storerh_pcr,                    // llvm.hexagon.S2.storerh.pcr
-    hexagon_S2_storeri_pbr,                    // llvm.hexagon.S2.storeri.pbr
-    hexagon_S2_storeri_pci,                    // llvm.hexagon.S2.storeri.pci
-    hexagon_S2_storeri_pcr,                    // llvm.hexagon.S2.storeri.pcr
-    hexagon_S2_storew_locked,                  // llvm.hexagon.S2.storew.locked
-    hexagon_S2_svsathb,                        // llvm.hexagon.S2.svsathb
-    hexagon_S2_svsathub,                       // llvm.hexagon.S2.svsathub
-    hexagon_S2_tableidxb_goodsyntax,           // llvm.hexagon.S2.tableidxb.goodsyntax
-    hexagon_S2_tableidxd_goodsyntax,           // llvm.hexagon.S2.tableidxd.goodsyntax
-    hexagon_S2_tableidxh_goodsyntax,           // llvm.hexagon.S2.tableidxh.goodsyntax
-    hexagon_S2_tableidxw_goodsyntax,           // llvm.hexagon.S2.tableidxw.goodsyntax
-    hexagon_S2_togglebit_i,                    // llvm.hexagon.S2.togglebit.i
-    hexagon_S2_togglebit_r,                    // llvm.hexagon.S2.togglebit.r
-    hexagon_S2_tstbit_i,                       // llvm.hexagon.S2.tstbit.i
-    hexagon_S2_tstbit_r,                       // llvm.hexagon.S2.tstbit.r
-    hexagon_S2_valignib,                       // llvm.hexagon.S2.valignib
-    hexagon_S2_valignrb,                       // llvm.hexagon.S2.valignrb
-    hexagon_S2_vcnegh,                         // llvm.hexagon.S2.vcnegh
-    hexagon_S2_vcrotate,                       // llvm.hexagon.S2.vcrotate
-    hexagon_S2_vrcnegh,                        // llvm.hexagon.S2.vrcnegh
-    hexagon_S2_vrndpackwh,                     // llvm.hexagon.S2.vrndpackwh
-    hexagon_S2_vrndpackwhs,                    // llvm.hexagon.S2.vrndpackwhs
-    hexagon_S2_vsathb,                         // llvm.hexagon.S2.vsathb
-    hexagon_S2_vsathb_nopack,                  // llvm.hexagon.S2.vsathb.nopack
-    hexagon_S2_vsathub,                        // llvm.hexagon.S2.vsathub
-    hexagon_S2_vsathub_nopack,                 // llvm.hexagon.S2.vsathub.nopack
-    hexagon_S2_vsatwh,                         // llvm.hexagon.S2.vsatwh
-    hexagon_S2_vsatwh_nopack,                  // llvm.hexagon.S2.vsatwh.nopack
-    hexagon_S2_vsatwuh,                        // llvm.hexagon.S2.vsatwuh
-    hexagon_S2_vsatwuh_nopack,                 // llvm.hexagon.S2.vsatwuh.nopack
-    hexagon_S2_vsplatrb,                       // llvm.hexagon.S2.vsplatrb
-    hexagon_S2_vsplatrh,                       // llvm.hexagon.S2.vsplatrh
-    hexagon_S2_vspliceib,                      // llvm.hexagon.S2.vspliceib
-    hexagon_S2_vsplicerb,                      // llvm.hexagon.S2.vsplicerb
-    hexagon_S2_vsxtbh,                         // llvm.hexagon.S2.vsxtbh
-    hexagon_S2_vsxthw,                         // llvm.hexagon.S2.vsxthw
-    hexagon_S2_vtrunehb,                       // llvm.hexagon.S2.vtrunehb
-    hexagon_S2_vtrunewh,                       // llvm.hexagon.S2.vtrunewh
-    hexagon_S2_vtrunohb,                       // llvm.hexagon.S2.vtrunohb
-    hexagon_S2_vtrunowh,                       // llvm.hexagon.S2.vtrunowh
-    hexagon_S2_vzxtbh,                         // llvm.hexagon.S2.vzxtbh
-    hexagon_S2_vzxthw,                         // llvm.hexagon.S2.vzxthw
-    hexagon_S4_addaddi,                        // llvm.hexagon.S4.addaddi
-    hexagon_S4_addi_asl_ri,                    // llvm.hexagon.S4.addi.asl.ri
-    hexagon_S4_addi_lsr_ri,                    // llvm.hexagon.S4.addi.lsr.ri
-    hexagon_S4_andi_asl_ri,                    // llvm.hexagon.S4.andi.asl.ri
-    hexagon_S4_andi_lsr_ri,                    // llvm.hexagon.S4.andi.lsr.ri
-    hexagon_S4_clbaddi,                        // llvm.hexagon.S4.clbaddi
-    hexagon_S4_clbpaddi,                       // llvm.hexagon.S4.clbpaddi
-    hexagon_S4_clbpnorm,                       // llvm.hexagon.S4.clbpnorm
-    hexagon_S4_extract,                        // llvm.hexagon.S4.extract
-    hexagon_S4_extract_rp,                     // llvm.hexagon.S4.extract.rp
-    hexagon_S4_extractp,                       // llvm.hexagon.S4.extractp
-    hexagon_S4_extractp_rp,                    // llvm.hexagon.S4.extractp.rp
-    hexagon_S4_lsli,                           // llvm.hexagon.S4.lsli
-    hexagon_S4_ntstbit_i,                      // llvm.hexagon.S4.ntstbit.i
-    hexagon_S4_ntstbit_r,                      // llvm.hexagon.S4.ntstbit.r
-    hexagon_S4_or_andi,                        // llvm.hexagon.S4.or.andi
-    hexagon_S4_or_andix,                       // llvm.hexagon.S4.or.andix
-    hexagon_S4_or_ori,                         // llvm.hexagon.S4.or.ori
-    hexagon_S4_ori_asl_ri,                     // llvm.hexagon.S4.ori.asl.ri
-    hexagon_S4_ori_lsr_ri,                     // llvm.hexagon.S4.ori.lsr.ri
-    hexagon_S4_parity,                         // llvm.hexagon.S4.parity
-    hexagon_S4_stored_locked,                  // llvm.hexagon.S4.stored.locked
-    hexagon_S4_subaddi,                        // llvm.hexagon.S4.subaddi
-    hexagon_S4_subi_asl_ri,                    // llvm.hexagon.S4.subi.asl.ri
-    hexagon_S4_subi_lsr_ri,                    // llvm.hexagon.S4.subi.lsr.ri
-    hexagon_S4_vrcrotate,                      // llvm.hexagon.S4.vrcrotate
-    hexagon_S4_vrcrotate_acc,                  // llvm.hexagon.S4.vrcrotate.acc
-    hexagon_S4_vxaddsubh,                      // llvm.hexagon.S4.vxaddsubh
-    hexagon_S4_vxaddsubhr,                     // llvm.hexagon.S4.vxaddsubhr
-    hexagon_S4_vxaddsubw,                      // llvm.hexagon.S4.vxaddsubw
-    hexagon_S4_vxsubaddh,                      // llvm.hexagon.S4.vxsubaddh
-    hexagon_S4_vxsubaddhr,                     // llvm.hexagon.S4.vxsubaddhr
-    hexagon_S4_vxsubaddw,                      // llvm.hexagon.S4.vxsubaddw
-    hexagon_S5_asrhub_rnd_sat_goodsyntax,      // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
-    hexagon_S5_asrhub_sat,                     // llvm.hexagon.S5.asrhub.sat
-    hexagon_S5_popcountp,                      // llvm.hexagon.S5.popcountp
-    hexagon_S5_vasrhrnd_goodsyntax,            // llvm.hexagon.S5.vasrhrnd.goodsyntax
-    hexagon_S6_rol_i_p,                        // llvm.hexagon.S6.rol.i.p
-    hexagon_S6_rol_i_p_acc,                    // llvm.hexagon.S6.rol.i.p.acc
-    hexagon_S6_rol_i_p_and,                    // llvm.hexagon.S6.rol.i.p.and
-    hexagon_S6_rol_i_p_nac,                    // llvm.hexagon.S6.rol.i.p.nac
-    hexagon_S6_rol_i_p_or,                     // llvm.hexagon.S6.rol.i.p.or
-    hexagon_S6_rol_i_p_xacc,                   // llvm.hexagon.S6.rol.i.p.xacc
-    hexagon_S6_rol_i_r,                        // llvm.hexagon.S6.rol.i.r
-    hexagon_S6_rol_i_r_acc,                    // llvm.hexagon.S6.rol.i.r.acc
-    hexagon_S6_rol_i_r_and,                    // llvm.hexagon.S6.rol.i.r.and
-    hexagon_S6_rol_i_r_nac,                    // llvm.hexagon.S6.rol.i.r.nac
-    hexagon_S6_rol_i_r_or,                     // llvm.hexagon.S6.rol.i.r.or
-    hexagon_S6_rol_i_r_xacc,                   // llvm.hexagon.S6.rol.i.r.xacc
-    hexagon_S6_vsplatrbp,                      // llvm.hexagon.S6.vsplatrbp
-    hexagon_S6_vtrunehb_ppp,                   // llvm.hexagon.S6.vtrunehb.ppp
-    hexagon_S6_vtrunohb_ppp,                   // llvm.hexagon.S6.vtrunohb.ppp
-    hexagon_V6_extractw,                       // llvm.hexagon.V6.extractw
-    hexagon_V6_extractw_128B,                  // llvm.hexagon.V6.extractw.128B
-    hexagon_V6_hi,                             // llvm.hexagon.V6.hi
-    hexagon_V6_hi_128B,                        // llvm.hexagon.V6.hi.128B
-    hexagon_V6_lo,                             // llvm.hexagon.V6.lo
-    hexagon_V6_lo_128B,                        // llvm.hexagon.V6.lo.128B
-    hexagon_V6_lvsplatb,                       // llvm.hexagon.V6.lvsplatb
-    hexagon_V6_lvsplatb_128B,                  // llvm.hexagon.V6.lvsplatb.128B
-    hexagon_V6_lvsplath,                       // llvm.hexagon.V6.lvsplath
-    hexagon_V6_lvsplath_128B,                  // llvm.hexagon.V6.lvsplath.128B
-    hexagon_V6_lvsplatw,                       // llvm.hexagon.V6.lvsplatw
-    hexagon_V6_lvsplatw_128B,                  // llvm.hexagon.V6.lvsplatw.128B
-    hexagon_V6_pred_and,                       // llvm.hexagon.V6.pred.and
-    hexagon_V6_pred_and_128B,                  // llvm.hexagon.V6.pred.and.128B
-    hexagon_V6_pred_and_n,                     // llvm.hexagon.V6.pred.and.n
-    hexagon_V6_pred_and_n_128B,                // llvm.hexagon.V6.pred.and.n.128B
-    hexagon_V6_pred_not,                       // llvm.hexagon.V6.pred.not
-    hexagon_V6_pred_not_128B,                  // llvm.hexagon.V6.pred.not.128B
-    hexagon_V6_pred_or,                        // llvm.hexagon.V6.pred.or
-    hexagon_V6_pred_or_128B,                   // llvm.hexagon.V6.pred.or.128B
-    hexagon_V6_pred_or_n,                      // llvm.hexagon.V6.pred.or.n
-    hexagon_V6_pred_or_n_128B,                 // llvm.hexagon.V6.pred.or.n.128B
-    hexagon_V6_pred_scalar2,                   // llvm.hexagon.V6.pred.scalar2
-    hexagon_V6_pred_scalar2_128B,              // llvm.hexagon.V6.pred.scalar2.128B
-    hexagon_V6_pred_scalar2v2,                 // llvm.hexagon.V6.pred.scalar2v2
-    hexagon_V6_pred_scalar2v2_128B,            // llvm.hexagon.V6.pred.scalar2v2.128B
-    hexagon_V6_pred_xor,                       // llvm.hexagon.V6.pred.xor
-    hexagon_V6_pred_xor_128B,                  // llvm.hexagon.V6.pred.xor.128B
-    hexagon_V6_shuffeqh,                       // llvm.hexagon.V6.shuffeqh
-    hexagon_V6_shuffeqh_128B,                  // llvm.hexagon.V6.shuffeqh.128B
-    hexagon_V6_shuffeqw,                       // llvm.hexagon.V6.shuffeqw
-    hexagon_V6_shuffeqw_128B,                  // llvm.hexagon.V6.shuffeqw.128B
-    hexagon_V6_vS32b_nqpred_ai,                // llvm.hexagon.V6.vS32b.nqpred.ai
-    hexagon_V6_vS32b_nqpred_ai_128B,           // llvm.hexagon.V6.vS32b.nqpred.ai.128B
-    hexagon_V6_vS32b_nt_nqpred_ai,             // llvm.hexagon.V6.vS32b.nt.nqpred.ai
-    hexagon_V6_vS32b_nt_nqpred_ai_128B,        // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
-    hexagon_V6_vS32b_nt_qpred_ai,              // llvm.hexagon.V6.vS32b.nt.qpred.ai
-    hexagon_V6_vS32b_nt_qpred_ai_128B,         // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
-    hexagon_V6_vS32b_qpred_ai,                 // llvm.hexagon.V6.vS32b.qpred.ai
-    hexagon_V6_vS32b_qpred_ai_128B,            // llvm.hexagon.V6.vS32b.qpred.ai.128B
-    hexagon_V6_vabsb,                          // llvm.hexagon.V6.vabsb
-    hexagon_V6_vabsb_128B,                     // llvm.hexagon.V6.vabsb.128B
-    hexagon_V6_vabsb_sat,                      // llvm.hexagon.V6.vabsb.sat
-    hexagon_V6_vabsb_sat_128B,                 // llvm.hexagon.V6.vabsb.sat.128B
-    hexagon_V6_vabsdiffh,                      // llvm.hexagon.V6.vabsdiffh
-    hexagon_V6_vabsdiffh_128B,                 // llvm.hexagon.V6.vabsdiffh.128B
-    hexagon_V6_vabsdiffub,                     // llvm.hexagon.V6.vabsdiffub
-    hexagon_V6_vabsdiffub_128B,                // llvm.hexagon.V6.vabsdiffub.128B
-    hexagon_V6_vabsdiffuh,                     // llvm.hexagon.V6.vabsdiffuh
-    hexagon_V6_vabsdiffuh_128B,                // llvm.hexagon.V6.vabsdiffuh.128B
-    hexagon_V6_vabsdiffw,                      // llvm.hexagon.V6.vabsdiffw
-    hexagon_V6_vabsdiffw_128B,                 // llvm.hexagon.V6.vabsdiffw.128B
-    hexagon_V6_vabsh,                          // llvm.hexagon.V6.vabsh
-    hexagon_V6_vabsh_128B,                     // llvm.hexagon.V6.vabsh.128B
-    hexagon_V6_vabsh_sat,                      // llvm.hexagon.V6.vabsh.sat
-    hexagon_V6_vabsh_sat_128B,                 // llvm.hexagon.V6.vabsh.sat.128B
-    hexagon_V6_vabsw,                          // llvm.hexagon.V6.vabsw
-    hexagon_V6_vabsw_128B,                     // llvm.hexagon.V6.vabsw.128B
-    hexagon_V6_vabsw_sat,                      // llvm.hexagon.V6.vabsw.sat
-    hexagon_V6_vabsw_sat_128B,                 // llvm.hexagon.V6.vabsw.sat.128B
-    hexagon_V6_vaddb,                          // llvm.hexagon.V6.vaddb
-    hexagon_V6_vaddb_128B,                     // llvm.hexagon.V6.vaddb.128B
-    hexagon_V6_vaddb_dv,                       // llvm.hexagon.V6.vaddb.dv
-    hexagon_V6_vaddb_dv_128B,                  // llvm.hexagon.V6.vaddb.dv.128B
-    hexagon_V6_vaddbnq,                        // llvm.hexagon.V6.vaddbnq
-    hexagon_V6_vaddbnq_128B,                   // llvm.hexagon.V6.vaddbnq.128B
-    hexagon_V6_vaddbq,                         // llvm.hexagon.V6.vaddbq
-    hexagon_V6_vaddbq_128B,                    // llvm.hexagon.V6.vaddbq.128B
-    hexagon_V6_vaddbsat,                       // llvm.hexagon.V6.vaddbsat
-    hexagon_V6_vaddbsat_128B,                  // llvm.hexagon.V6.vaddbsat.128B
-    hexagon_V6_vaddbsat_dv,                    // llvm.hexagon.V6.vaddbsat.dv
-    hexagon_V6_vaddbsat_dv_128B,               // llvm.hexagon.V6.vaddbsat.dv.128B
-    hexagon_V6_vaddcarry,                      // llvm.hexagon.V6.vaddcarry
-    hexagon_V6_vaddcarry_128B,                 // llvm.hexagon.V6.vaddcarry.128B
-    hexagon_V6_vaddclbh,                       // llvm.hexagon.V6.vaddclbh
-    hexagon_V6_vaddclbh_128B,                  // llvm.hexagon.V6.vaddclbh.128B
-    hexagon_V6_vaddclbw,                       // llvm.hexagon.V6.vaddclbw
-    hexagon_V6_vaddclbw_128B,                  // llvm.hexagon.V6.vaddclbw.128B
-    hexagon_V6_vaddh,                          // llvm.hexagon.V6.vaddh
-    hexagon_V6_vaddh_128B,                     // llvm.hexagon.V6.vaddh.128B
-    hexagon_V6_vaddh_dv,                       // llvm.hexagon.V6.vaddh.dv
-    hexagon_V6_vaddh_dv_128B,                  // llvm.hexagon.V6.vaddh.dv.128B
-    hexagon_V6_vaddhnq,                        // llvm.hexagon.V6.vaddhnq
-    hexagon_V6_vaddhnq_128B,                   // llvm.hexagon.V6.vaddhnq.128B
-    hexagon_V6_vaddhq,                         // llvm.hexagon.V6.vaddhq
-    hexagon_V6_vaddhq_128B,                    // llvm.hexagon.V6.vaddhq.128B
-    hexagon_V6_vaddhsat,                       // llvm.hexagon.V6.vaddhsat
-    hexagon_V6_vaddhsat_128B,                  // llvm.hexagon.V6.vaddhsat.128B
-    hexagon_V6_vaddhsat_dv,                    // llvm.hexagon.V6.vaddhsat.dv
-    hexagon_V6_vaddhsat_dv_128B,               // llvm.hexagon.V6.vaddhsat.dv.128B
-    hexagon_V6_vaddhw,                         // llvm.hexagon.V6.vaddhw
-    hexagon_V6_vaddhw_128B,                    // llvm.hexagon.V6.vaddhw.128B
-    hexagon_V6_vaddhw_acc,                     // llvm.hexagon.V6.vaddhw.acc
-    hexagon_V6_vaddhw_acc_128B,                // llvm.hexagon.V6.vaddhw.acc.128B
-    hexagon_V6_vaddubh,                        // llvm.hexagon.V6.vaddubh
-    hexagon_V6_vaddubh_128B,                   // llvm.hexagon.V6.vaddubh.128B
-    hexagon_V6_vaddubh_acc,                    // llvm.hexagon.V6.vaddubh.acc
-    hexagon_V6_vaddubh_acc_128B,               // llvm.hexagon.V6.vaddubh.acc.128B
-    hexagon_V6_vaddubsat,                      // llvm.hexagon.V6.vaddubsat
-    hexagon_V6_vaddubsat_128B,                 // llvm.hexagon.V6.vaddubsat.128B
-    hexagon_V6_vaddubsat_dv,                   // llvm.hexagon.V6.vaddubsat.dv
-    hexagon_V6_vaddubsat_dv_128B,              // llvm.hexagon.V6.vaddubsat.dv.128B
-    hexagon_V6_vaddububb_sat,                  // llvm.hexagon.V6.vaddububb.sat
-    hexagon_V6_vaddububb_sat_128B,             // llvm.hexagon.V6.vaddububb.sat.128B
-    hexagon_V6_vadduhsat,                      // llvm.hexagon.V6.vadduhsat
-    hexagon_V6_vadduhsat_128B,                 // llvm.hexagon.V6.vadduhsat.128B
-    hexagon_V6_vadduhsat_dv,                   // llvm.hexagon.V6.vadduhsat.dv
-    hexagon_V6_vadduhsat_dv_128B,              // llvm.hexagon.V6.vadduhsat.dv.128B
-    hexagon_V6_vadduhw,                        // llvm.hexagon.V6.vadduhw
-    hexagon_V6_vadduhw_128B,                   // llvm.hexagon.V6.vadduhw.128B
-    hexagon_V6_vadduhw_acc,                    // llvm.hexagon.V6.vadduhw.acc
-    hexagon_V6_vadduhw_acc_128B,               // llvm.hexagon.V6.vadduhw.acc.128B
-    hexagon_V6_vadduwsat,                      // llvm.hexagon.V6.vadduwsat
-    hexagon_V6_vadduwsat_128B,                 // llvm.hexagon.V6.vadduwsat.128B
-    hexagon_V6_vadduwsat_dv,                   // llvm.hexagon.V6.vadduwsat.dv
-    hexagon_V6_vadduwsat_dv_128B,              // llvm.hexagon.V6.vadduwsat.dv.128B
-    hexagon_V6_vaddw,                          // llvm.hexagon.V6.vaddw
-    hexagon_V6_vaddw_128B,                     // llvm.hexagon.V6.vaddw.128B
-    hexagon_V6_vaddw_dv,                       // llvm.hexagon.V6.vaddw.dv
-    hexagon_V6_vaddw_dv_128B,                  // llvm.hexagon.V6.vaddw.dv.128B
-    hexagon_V6_vaddwnq,                        // llvm.hexagon.V6.vaddwnq
-    hexagon_V6_vaddwnq_128B,                   // llvm.hexagon.V6.vaddwnq.128B
-    hexagon_V6_vaddwq,                         // llvm.hexagon.V6.vaddwq
-    hexagon_V6_vaddwq_128B,                    // llvm.hexagon.V6.vaddwq.128B
-    hexagon_V6_vaddwsat,                       // llvm.hexagon.V6.vaddwsat
-    hexagon_V6_vaddwsat_128B,                  // llvm.hexagon.V6.vaddwsat.128B
-    hexagon_V6_vaddwsat_dv,                    // llvm.hexagon.V6.vaddwsat.dv
-    hexagon_V6_vaddwsat_dv_128B,               // llvm.hexagon.V6.vaddwsat.dv.128B
-    hexagon_V6_valignb,                        // llvm.hexagon.V6.valignb
-    hexagon_V6_valignb_128B,                   // llvm.hexagon.V6.valignb.128B
-    hexagon_V6_valignbi,                       // llvm.hexagon.V6.valignbi
-    hexagon_V6_valignbi_128B,                  // llvm.hexagon.V6.valignbi.128B
-    hexagon_V6_vand,                           // llvm.hexagon.V6.vand
-    hexagon_V6_vand_128B,                      // llvm.hexagon.V6.vand.128B
-    hexagon_V6_vandnqrt,                       // llvm.hexagon.V6.vandnqrt
-    hexagon_V6_vandnqrt_128B,                  // llvm.hexagon.V6.vandnqrt.128B
-    hexagon_V6_vandnqrt_acc,                   // llvm.hexagon.V6.vandnqrt.acc
-    hexagon_V6_vandnqrt_acc_128B,              // llvm.hexagon.V6.vandnqrt.acc.128B
-    hexagon_V6_vandqrt,                        // llvm.hexagon.V6.vandqrt
-    hexagon_V6_vandqrt_128B,                   // llvm.hexagon.V6.vandqrt.128B
-    hexagon_V6_vandqrt_acc,                    // llvm.hexagon.V6.vandqrt.acc
-    hexagon_V6_vandqrt_acc_128B,               // llvm.hexagon.V6.vandqrt.acc.128B
-    hexagon_V6_vandvnqv,                       // llvm.hexagon.V6.vandvnqv
-    hexagon_V6_vandvnqv_128B,                  // llvm.hexagon.V6.vandvnqv.128B
-    hexagon_V6_vandvqv,                        // llvm.hexagon.V6.vandvqv
-    hexagon_V6_vandvqv_128B,                   // llvm.hexagon.V6.vandvqv.128B
-    hexagon_V6_vandvrt,                        // llvm.hexagon.V6.vandvrt
-    hexagon_V6_vandvrt_128B,                   // llvm.hexagon.V6.vandvrt.128B
-    hexagon_V6_vandvrt_acc,                    // llvm.hexagon.V6.vandvrt.acc
-    hexagon_V6_vandvrt_acc_128B,               // llvm.hexagon.V6.vandvrt.acc.128B
-    hexagon_V6_vaslh,                          // llvm.hexagon.V6.vaslh
-    hexagon_V6_vaslh_128B,                     // llvm.hexagon.V6.vaslh.128B
-    hexagon_V6_vaslh_acc,                      // llvm.hexagon.V6.vaslh.acc
-    hexagon_V6_vaslh_acc_128B,                 // llvm.hexagon.V6.vaslh.acc.128B
-    hexagon_V6_vaslhv,                         // llvm.hexagon.V6.vaslhv
-    hexagon_V6_vaslhv_128B,                    // llvm.hexagon.V6.vaslhv.128B
-    hexagon_V6_vaslw,                          // llvm.hexagon.V6.vaslw
-    hexagon_V6_vaslw_128B,                     // llvm.hexagon.V6.vaslw.128B
-    hexagon_V6_vaslw_acc,                      // llvm.hexagon.V6.vaslw.acc
-    hexagon_V6_vaslw_acc_128B,                 // llvm.hexagon.V6.vaslw.acc.128B
-    hexagon_V6_vaslwv,                         // llvm.hexagon.V6.vaslwv
-    hexagon_V6_vaslwv_128B,                    // llvm.hexagon.V6.vaslwv.128B
-    hexagon_V6_vasrh,                          // llvm.hexagon.V6.vasrh
-    hexagon_V6_vasrh_128B,                     // llvm.hexagon.V6.vasrh.128B
-    hexagon_V6_vasrh_acc,                      // llvm.hexagon.V6.vasrh.acc
-    hexagon_V6_vasrh_acc_128B,                 // llvm.hexagon.V6.vasrh.acc.128B
-    hexagon_V6_vasrhbrndsat,                   // llvm.hexagon.V6.vasrhbrndsat
-    hexagon_V6_vasrhbrndsat_128B,              // llvm.hexagon.V6.vasrhbrndsat.128B
-    hexagon_V6_vasrhbsat,                      // llvm.hexagon.V6.vasrhbsat
-    hexagon_V6_vasrhbsat_128B,                 // llvm.hexagon.V6.vasrhbsat.128B
-    hexagon_V6_vasrhubrndsat,                  // llvm.hexagon.V6.vasrhubrndsat
-    hexagon_V6_vasrhubrndsat_128B,             // llvm.hexagon.V6.vasrhubrndsat.128B
-    hexagon_V6_vasrhubsat,                     // llvm.hexagon.V6.vasrhubsat
-    hexagon_V6_vasrhubsat_128B,                // llvm.hexagon.V6.vasrhubsat.128B
-    hexagon_V6_vasrhv,                         // llvm.hexagon.V6.vasrhv
-    hexagon_V6_vasrhv_128B,                    // llvm.hexagon.V6.vasrhv.128B
-    hexagon_V6_vasruhubrndsat,                 // llvm.hexagon.V6.vasruhubrndsat
-    hexagon_V6_vasruhubrndsat_128B,            // llvm.hexagon.V6.vasruhubrndsat.128B
-    hexagon_V6_vasruhubsat,                    // llvm.hexagon.V6.vasruhubsat
-    hexagon_V6_vasruhubsat_128B,               // llvm.hexagon.V6.vasruhubsat.128B
-    hexagon_V6_vasruwuhrndsat,                 // llvm.hexagon.V6.vasruwuhrndsat
-    hexagon_V6_vasruwuhrndsat_128B,            // llvm.hexagon.V6.vasruwuhrndsat.128B
-    hexagon_V6_vasruwuhsat,                    // llvm.hexagon.V6.vasruwuhsat
-    hexagon_V6_vasruwuhsat_128B,               // llvm.hexagon.V6.vasruwuhsat.128B
-    hexagon_V6_vasrw,                          // llvm.hexagon.V6.vasrw
-    hexagon_V6_vasrw_128B,                     // llvm.hexagon.V6.vasrw.128B
-    hexagon_V6_vasrw_acc,                      // llvm.hexagon.V6.vasrw.acc
-    hexagon_V6_vasrw_acc_128B,                 // llvm.hexagon.V6.vasrw.acc.128B
-    hexagon_V6_vasrwh,                         // llvm.hexagon.V6.vasrwh
-    hexagon_V6_vasrwh_128B,                    // llvm.hexagon.V6.vasrwh.128B
-    hexagon_V6_vasrwhrndsat,                   // llvm.hexagon.V6.vasrwhrndsat
-    hexagon_V6_vasrwhrndsat_128B,              // llvm.hexagon.V6.vasrwhrndsat.128B
-    hexagon_V6_vasrwhsat,                      // llvm.hexagon.V6.vasrwhsat
-    hexagon_V6_vasrwhsat_128B,                 // llvm.hexagon.V6.vasrwhsat.128B
-    hexagon_V6_vasrwuhrndsat,                  // llvm.hexagon.V6.vasrwuhrndsat
-    hexagon_V6_vasrwuhrndsat_128B,             // llvm.hexagon.V6.vasrwuhrndsat.128B
-    hexagon_V6_vasrwuhsat,                     // llvm.hexagon.V6.vasrwuhsat
-    hexagon_V6_vasrwuhsat_128B,                // llvm.hexagon.V6.vasrwuhsat.128B
-    hexagon_V6_vasrwv,                         // llvm.hexagon.V6.vasrwv
-    hexagon_V6_vasrwv_128B,                    // llvm.hexagon.V6.vasrwv.128B
-    hexagon_V6_vassign,                        // llvm.hexagon.V6.vassign
-    hexagon_V6_vassign_128B,                   // llvm.hexagon.V6.vassign.128B
-    hexagon_V6_vassignp,                       // llvm.hexagon.V6.vassignp
-    hexagon_V6_vassignp_128B,                  // llvm.hexagon.V6.vassignp.128B
-    hexagon_V6_vavgb,                          // llvm.hexagon.V6.vavgb
-    hexagon_V6_vavgb_128B,                     // llvm.hexagon.V6.vavgb.128B
-    hexagon_V6_vavgbrnd,                       // llvm.hexagon.V6.vavgbrnd
-    hexagon_V6_vavgbrnd_128B,                  // llvm.hexagon.V6.vavgbrnd.128B
-    hexagon_V6_vavgh,                          // llvm.hexagon.V6.vavgh
-    hexagon_V6_vavgh_128B,                     // llvm.hexagon.V6.vavgh.128B
-    hexagon_V6_vavghrnd,                       // llvm.hexagon.V6.vavghrnd
-    hexagon_V6_vavghrnd_128B,                  // llvm.hexagon.V6.vavghrnd.128B
-    hexagon_V6_vavgub,                         // llvm.hexagon.V6.vavgub
-    hexagon_V6_vavgub_128B,                    // llvm.hexagon.V6.vavgub.128B
-    hexagon_V6_vavgubrnd,                      // llvm.hexagon.V6.vavgubrnd
-    hexagon_V6_vavgubrnd_128B,                 // llvm.hexagon.V6.vavgubrnd.128B
-    hexagon_V6_vavguh,                         // llvm.hexagon.V6.vavguh
-    hexagon_V6_vavguh_128B,                    // llvm.hexagon.V6.vavguh.128B
-    hexagon_V6_vavguhrnd,                      // llvm.hexagon.V6.vavguhrnd
-    hexagon_V6_vavguhrnd_128B,                 // llvm.hexagon.V6.vavguhrnd.128B
-    hexagon_V6_vavguw,                         // llvm.hexagon.V6.vavguw
-    hexagon_V6_vavguw_128B,                    // llvm.hexagon.V6.vavguw.128B
-    hexagon_V6_vavguwrnd,                      // llvm.hexagon.V6.vavguwrnd
-    hexagon_V6_vavguwrnd_128B,                 // llvm.hexagon.V6.vavguwrnd.128B
-    hexagon_V6_vavgw,                          // llvm.hexagon.V6.vavgw
-    hexagon_V6_vavgw_128B,                     // llvm.hexagon.V6.vavgw.128B
-    hexagon_V6_vavgwrnd,                       // llvm.hexagon.V6.vavgwrnd
-    hexagon_V6_vavgwrnd_128B,                  // llvm.hexagon.V6.vavgwrnd.128B
-    hexagon_V6_vcl0h,                          // llvm.hexagon.V6.vcl0h
-    hexagon_V6_vcl0h_128B,                     // llvm.hexagon.V6.vcl0h.128B
-    hexagon_V6_vcl0w,                          // llvm.hexagon.V6.vcl0w
-    hexagon_V6_vcl0w_128B,                     // llvm.hexagon.V6.vcl0w.128B
-    hexagon_V6_vcombine,                       // llvm.hexagon.V6.vcombine
-    hexagon_V6_vcombine_128B,                  // llvm.hexagon.V6.vcombine.128B
-    hexagon_V6_vd0,                            // llvm.hexagon.V6.vd0
-    hexagon_V6_vd0_128B,                       // llvm.hexagon.V6.vd0.128B
-    hexagon_V6_vdd0,                           // llvm.hexagon.V6.vdd0
-    hexagon_V6_vdd0_128B,                      // llvm.hexagon.V6.vdd0.128B
-    hexagon_V6_vdealb,                         // llvm.hexagon.V6.vdealb
-    hexagon_V6_vdealb_128B,                    // llvm.hexagon.V6.vdealb.128B
-    hexagon_V6_vdealb4w,                       // llvm.hexagon.V6.vdealb4w
-    hexagon_V6_vdealb4w_128B,                  // llvm.hexagon.V6.vdealb4w.128B
-    hexagon_V6_vdealh,                         // llvm.hexagon.V6.vdealh
-    hexagon_V6_vdealh_128B,                    // llvm.hexagon.V6.vdealh.128B
-    hexagon_V6_vdealvdd,                       // llvm.hexagon.V6.vdealvdd
-    hexagon_V6_vdealvdd_128B,                  // llvm.hexagon.V6.vdealvdd.128B
-    hexagon_V6_vdelta,                         // llvm.hexagon.V6.vdelta
-    hexagon_V6_vdelta_128B,                    // llvm.hexagon.V6.vdelta.128B
-    hexagon_V6_vdmpybus,                       // llvm.hexagon.V6.vdmpybus
-    hexagon_V6_vdmpybus_128B,                  // llvm.hexagon.V6.vdmpybus.128B
-    hexagon_V6_vdmpybus_acc,                   // llvm.hexagon.V6.vdmpybus.acc
-    hexagon_V6_vdmpybus_acc_128B,              // llvm.hexagon.V6.vdmpybus.acc.128B
-    hexagon_V6_vdmpybus_dv,                    // llvm.hexagon.V6.vdmpybus.dv
-    hexagon_V6_vdmpybus_dv_128B,               // llvm.hexagon.V6.vdmpybus.dv.128B
-    hexagon_V6_vdmpybus_dv_acc,                // llvm.hexagon.V6.vdmpybus.dv.acc
-    hexagon_V6_vdmpybus_dv_acc_128B,           // llvm.hexagon.V6.vdmpybus.dv.acc.128B
-    hexagon_V6_vdmpyhb,                        // llvm.hexagon.V6.vdmpyhb
-    hexagon_V6_vdmpyhb_128B,                   // llvm.hexagon.V6.vdmpyhb.128B
-    hexagon_V6_vdmpyhb_acc,                    // llvm.hexagon.V6.vdmpyhb.acc
-    hexagon_V6_vdmpyhb_acc_128B,               // llvm.hexagon.V6.vdmpyhb.acc.128B
-    hexagon_V6_vdmpyhb_dv,                     // llvm.hexagon.V6.vdmpyhb.dv
-    hexagon_V6_vdmpyhb_dv_128B,                // llvm.hexagon.V6.vdmpyhb.dv.128B
-    hexagon_V6_vdmpyhb_dv_acc,                 // llvm.hexagon.V6.vdmpyhb.dv.acc
-    hexagon_V6_vdmpyhb_dv_acc_128B,            // llvm.hexagon.V6.vdmpyhb.dv.acc.128B
-    hexagon_V6_vdmpyhisat,                     // llvm.hexagon.V6.vdmpyhisat
-    hexagon_V6_vdmpyhisat_128B,                // llvm.hexagon.V6.vdmpyhisat.128B
-    hexagon_V6_vdmpyhisat_acc,                 // llvm.hexagon.V6.vdmpyhisat.acc
-    hexagon_V6_vdmpyhisat_acc_128B,            // llvm.hexagon.V6.vdmpyhisat.acc.128B
-    hexagon_V6_vdmpyhsat,                      // llvm.hexagon.V6.vdmpyhsat
-    hexagon_V6_vdmpyhsat_128B,                 // llvm.hexagon.V6.vdmpyhsat.128B
-    hexagon_V6_vdmpyhsat_acc,                  // llvm.hexagon.V6.vdmpyhsat.acc
-    hexagon_V6_vdmpyhsat_acc_128B,             // llvm.hexagon.V6.vdmpyhsat.acc.128B
-    hexagon_V6_vdmpyhsuisat,                   // llvm.hexagon.V6.vdmpyhsuisat
-    hexagon_V6_vdmpyhsuisat_128B,              // llvm.hexagon.V6.vdmpyhsuisat.128B
-    hexagon_V6_vdmpyhsuisat_acc,               // llvm.hexagon.V6.vdmpyhsuisat.acc
-    hexagon_V6_vdmpyhsuisat_acc_128B,          // llvm.hexagon.V6.vdmpyhsuisat.acc.128B
-    hexagon_V6_vdmpyhsusat,                    // llvm.hexagon.V6.vdmpyhsusat
-    hexagon_V6_vdmpyhsusat_128B,               // llvm.hexagon.V6.vdmpyhsusat.128B
-    hexagon_V6_vdmpyhsusat_acc,                // llvm.hexagon.V6.vdmpyhsusat.acc
-    hexagon_V6_vdmpyhsusat_acc_128B,           // llvm.hexagon.V6.vdmpyhsusat.acc.128B
-    hexagon_V6_vdmpyhvsat,                     // llvm.hexagon.V6.vdmpyhvsat
-    hexagon_V6_vdmpyhvsat_128B,                // llvm.hexagon.V6.vdmpyhvsat.128B
-    hexagon_V6_vdmpyhvsat_acc,                 // llvm.hexagon.V6.vdmpyhvsat.acc
-    hexagon_V6_vdmpyhvsat_acc_128B,            // llvm.hexagon.V6.vdmpyhvsat.acc.128B
-    hexagon_V6_vdsaduh,                        // llvm.hexagon.V6.vdsaduh
-    hexagon_V6_vdsaduh_128B,                   // llvm.hexagon.V6.vdsaduh.128B
-    hexagon_V6_vdsaduh_acc,                    // llvm.hexagon.V6.vdsaduh.acc
-    hexagon_V6_vdsaduh_acc_128B,               // llvm.hexagon.V6.vdsaduh.acc.128B
-    hexagon_V6_veqb,                           // llvm.hexagon.V6.veqb
-    hexagon_V6_veqb_128B,                      // llvm.hexagon.V6.veqb.128B
-    hexagon_V6_veqb_and,                       // llvm.hexagon.V6.veqb.and
-    hexagon_V6_veqb_and_128B,                  // llvm.hexagon.V6.veqb.and.128B
-    hexagon_V6_veqb_or,                        // llvm.hexagon.V6.veqb.or
-    hexagon_V6_veqb_or_128B,                   // llvm.hexagon.V6.veqb.or.128B
-    hexagon_V6_veqb_xor,                       // llvm.hexagon.V6.veqb.xor
-    hexagon_V6_veqb_xor_128B,                  // llvm.hexagon.V6.veqb.xor.128B
-    hexagon_V6_veqh,                           // llvm.hexagon.V6.veqh
-    hexagon_V6_veqh_128B,                      // llvm.hexagon.V6.veqh.128B
-    hexagon_V6_veqh_and,                       // llvm.hexagon.V6.veqh.and
-    hexagon_V6_veqh_and_128B,                  // llvm.hexagon.V6.veqh.and.128B
-    hexagon_V6_veqh_or,                        // llvm.hexagon.V6.veqh.or
-    hexagon_V6_veqh_or_128B,                   // llvm.hexagon.V6.veqh.or.128B
-    hexagon_V6_veqh_xor,                       // llvm.hexagon.V6.veqh.xor
-    hexagon_V6_veqh_xor_128B,                  // llvm.hexagon.V6.veqh.xor.128B
-    hexagon_V6_veqw,                           // llvm.hexagon.V6.veqw
-    hexagon_V6_veqw_128B,                      // llvm.hexagon.V6.veqw.128B
-    hexagon_V6_veqw_and,                       // llvm.hexagon.V6.veqw.and
-    hexagon_V6_veqw_and_128B,                  // llvm.hexagon.V6.veqw.and.128B
-    hexagon_V6_veqw_or,                        // llvm.hexagon.V6.veqw.or
-    hexagon_V6_veqw_or_128B,                   // llvm.hexagon.V6.veqw.or.128B
-    hexagon_V6_veqw_xor,                       // llvm.hexagon.V6.veqw.xor
-    hexagon_V6_veqw_xor_128B,                  // llvm.hexagon.V6.veqw.xor.128B
-    hexagon_V6_vgathermh,                      // llvm.hexagon.V6.vgathermh
-    hexagon_V6_vgathermh_128B,                 // llvm.hexagon.V6.vgathermh.128B
-    hexagon_V6_vgathermhq,                     // llvm.hexagon.V6.vgathermhq
-    hexagon_V6_vgathermhq_128B,                // llvm.hexagon.V6.vgathermhq.128B
-    hexagon_V6_vgathermhw,                     // llvm.hexagon.V6.vgathermhw
-    hexagon_V6_vgathermhw_128B,                // llvm.hexagon.V6.vgathermhw.128B
-    hexagon_V6_vgathermhwq,                    // llvm.hexagon.V6.vgathermhwq
-    hexagon_V6_vgathermhwq_128B,               // llvm.hexagon.V6.vgathermhwq.128B
-    hexagon_V6_vgathermw,                      // llvm.hexagon.V6.vgathermw
-    hexagon_V6_vgathermw_128B,                 // llvm.hexagon.V6.vgathermw.128B
-    hexagon_V6_vgathermwq,                     // llvm.hexagon.V6.vgathermwq
-    hexagon_V6_vgathermwq_128B,                // llvm.hexagon.V6.vgathermwq.128B
-    hexagon_V6_vgtb,                           // llvm.hexagon.V6.vgtb
-    hexagon_V6_vgtb_128B,                      // llvm.hexagon.V6.vgtb.128B
-    hexagon_V6_vgtb_and,                       // llvm.hexagon.V6.vgtb.and
-    hexagon_V6_vgtb_and_128B,                  // llvm.hexagon.V6.vgtb.and.128B
-    hexagon_V6_vgtb_or,                        // llvm.hexagon.V6.vgtb.or
-    hexagon_V6_vgtb_or_128B,                   // llvm.hexagon.V6.vgtb.or.128B
-    hexagon_V6_vgtb_xor,                       // llvm.hexagon.V6.vgtb.xor
-    hexagon_V6_vgtb_xor_128B,                  // llvm.hexagon.V6.vgtb.xor.128B
-    hexagon_V6_vgth,                           // llvm.hexagon.V6.vgth
-    hexagon_V6_vgth_128B,                      // llvm.hexagon.V6.vgth.128B
-    hexagon_V6_vgth_and,                       // llvm.hexagon.V6.vgth.and
-    hexagon_V6_vgth_and_128B,                  // llvm.hexagon.V6.vgth.and.128B
-    hexagon_V6_vgth_or,                        // llvm.hexagon.V6.vgth.or
-    hexagon_V6_vgth_or_128B,                   // llvm.hexagon.V6.vgth.or.128B
-    hexagon_V6_vgth_xor,                       // llvm.hexagon.V6.vgth.xor
-    hexagon_V6_vgth_xor_128B,                  // llvm.hexagon.V6.vgth.xor.128B
-    hexagon_V6_vgtub,                          // llvm.hexagon.V6.vgtub
-    hexagon_V6_vgtub_128B,                     // llvm.hexagon.V6.vgtub.128B
-    hexagon_V6_vgtub_and,                      // llvm.hexagon.V6.vgtub.and
-    hexagon_V6_vgtub_and_128B,                 // llvm.hexagon.V6.vgtub.and.128B
-    hexagon_V6_vgtub_or,                       // llvm.hexagon.V6.vgtub.or
-    hexagon_V6_vgtub_or_128B,                  // llvm.hexagon.V6.vgtub.or.128B
-    hexagon_V6_vgtub_xor,                      // llvm.hexagon.V6.vgtub.xor
-    hexagon_V6_vgtub_xor_128B,                 // llvm.hexagon.V6.vgtub.xor.128B
-    hexagon_V6_vgtuh,                          // llvm.hexagon.V6.vgtuh
-    hexagon_V6_vgtuh_128B,                     // llvm.hexagon.V6.vgtuh.128B
-    hexagon_V6_vgtuh_and,                      // llvm.hexagon.V6.vgtuh.and
-    hexagon_V6_vgtuh_and_128B,                 // llvm.hexagon.V6.vgtuh.and.128B
-    hexagon_V6_vgtuh_or,                       // llvm.hexagon.V6.vgtuh.or
-    hexagon_V6_vgtuh_or_128B,                  // llvm.hexagon.V6.vgtuh.or.128B
-    hexagon_V6_vgtuh_xor,                      // llvm.hexagon.V6.vgtuh.xor
-    hexagon_V6_vgtuh_xor_128B,                 // llvm.hexagon.V6.vgtuh.xor.128B
-    hexagon_V6_vgtuw,                          // llvm.hexagon.V6.vgtuw
-    hexagon_V6_vgtuw_128B,                     // llvm.hexagon.V6.vgtuw.128B
-    hexagon_V6_vgtuw_and,                      // llvm.hexagon.V6.vgtuw.and
-    hexagon_V6_vgtuw_and_128B,                 // llvm.hexagon.V6.vgtuw.and.128B
-    hexagon_V6_vgtuw_or,                       // llvm.hexagon.V6.vgtuw.or
-    hexagon_V6_vgtuw_or_128B,                  // llvm.hexagon.V6.vgtuw.or.128B
-    hexagon_V6_vgtuw_xor,                      // llvm.hexagon.V6.vgtuw.xor
-    hexagon_V6_vgtuw_xor_128B,                 // llvm.hexagon.V6.vgtuw.xor.128B
-    hexagon_V6_vgtw,                           // llvm.hexagon.V6.vgtw
-    hexagon_V6_vgtw_128B,                      // llvm.hexagon.V6.vgtw.128B
-    hexagon_V6_vgtw_and,                       // llvm.hexagon.V6.vgtw.and
-    hexagon_V6_vgtw_and_128B,                  // llvm.hexagon.V6.vgtw.and.128B
-    hexagon_V6_vgtw_or,                        // llvm.hexagon.V6.vgtw.or
-    hexagon_V6_vgtw_or_128B,                   // llvm.hexagon.V6.vgtw.or.128B
-    hexagon_V6_vgtw_xor,                       // llvm.hexagon.V6.vgtw.xor
-    hexagon_V6_vgtw_xor_128B,                  // llvm.hexagon.V6.vgtw.xor.128B
-    hexagon_V6_vinsertwr,                      // llvm.hexagon.V6.vinsertwr
-    hexagon_V6_vinsertwr_128B,                 // llvm.hexagon.V6.vinsertwr.128B
-    hexagon_V6_vlalignb,                       // llvm.hexagon.V6.vlalignb
-    hexagon_V6_vlalignb_128B,                  // llvm.hexagon.V6.vlalignb.128B
-    hexagon_V6_vlalignbi,                      // llvm.hexagon.V6.vlalignbi
-    hexagon_V6_vlalignbi_128B,                 // llvm.hexagon.V6.vlalignbi.128B
-    hexagon_V6_vlsrb,                          // llvm.hexagon.V6.vlsrb
-    hexagon_V6_vlsrb_128B,                     // llvm.hexagon.V6.vlsrb.128B
-    hexagon_V6_vlsrh,                          // llvm.hexagon.V6.vlsrh
-    hexagon_V6_vlsrh_128B,                     // llvm.hexagon.V6.vlsrh.128B
-    hexagon_V6_vlsrhv,                         // llvm.hexagon.V6.vlsrhv
-    hexagon_V6_vlsrhv_128B,                    // llvm.hexagon.V6.vlsrhv.128B
-    hexagon_V6_vlsrw,                          // llvm.hexagon.V6.vlsrw
-    hexagon_V6_vlsrw_128B,                     // llvm.hexagon.V6.vlsrw.128B
-    hexagon_V6_vlsrwv,                         // llvm.hexagon.V6.vlsrwv
-    hexagon_V6_vlsrwv_128B,                    // llvm.hexagon.V6.vlsrwv.128B
-    hexagon_V6_vlut4,                          // llvm.hexagon.V6.vlut4
-    hexagon_V6_vlut4_128B,                     // llvm.hexagon.V6.vlut4.128B
-    hexagon_V6_vlutvvb,                        // llvm.hexagon.V6.vlutvvb
-    hexagon_V6_vlutvvb_128B,                   // llvm.hexagon.V6.vlutvvb.128B
-    hexagon_V6_vlutvvb_nm,                     // llvm.hexagon.V6.vlutvvb.nm
-    hexagon_V6_vlutvvb_nm_128B,                // llvm.hexagon.V6.vlutvvb.nm.128B
-    hexagon_V6_vlutvvb_oracc,                  // llvm.hexagon.V6.vlutvvb.oracc
-    hexagon_V6_vlutvvb_oracc_128B,             // llvm.hexagon.V6.vlutvvb.oracc.128B
-    hexagon_V6_vlutvvb_oracci,                 // llvm.hexagon.V6.vlutvvb.oracci
-    hexagon_V6_vlutvvb_oracci_128B,            // llvm.hexagon.V6.vlutvvb.oracci.128B
-    hexagon_V6_vlutvvbi,                       // llvm.hexagon.V6.vlutvvbi
-    hexagon_V6_vlutvvbi_128B,                  // llvm.hexagon.V6.vlutvvbi.128B
-    hexagon_V6_vlutvwh,                        // llvm.hexagon.V6.vlutvwh
-    hexagon_V6_vlutvwh_128B,                   // llvm.hexagon.V6.vlutvwh.128B
-    hexagon_V6_vlutvwh_nm,                     // llvm.hexagon.V6.vlutvwh.nm
-    hexagon_V6_vlutvwh_nm_128B,                // llvm.hexagon.V6.vlutvwh.nm.128B
-    hexagon_V6_vlutvwh_oracc,                  // llvm.hexagon.V6.vlutvwh.oracc
-    hexagon_V6_vlutvwh_oracc_128B,             // llvm.hexagon.V6.vlutvwh.oracc.128B
-    hexagon_V6_vlutvwh_oracci,                 // llvm.hexagon.V6.vlutvwh.oracci
-    hexagon_V6_vlutvwh_oracci_128B,            // llvm.hexagon.V6.vlutvwh.oracci.128B
-    hexagon_V6_vlutvwhi,                       // llvm.hexagon.V6.vlutvwhi
-    hexagon_V6_vlutvwhi_128B,                  // llvm.hexagon.V6.vlutvwhi.128B
-    hexagon_V6_vmaskedstorenq,                 // llvm.hexagon.V6.vmaskedstorenq
-    hexagon_V6_vmaskedstorenq_128B,            // llvm.hexagon.V6.vmaskedstorenq.128B
-    hexagon_V6_vmaskedstorentnq,               // llvm.hexagon.V6.vmaskedstorentnq
-    hexagon_V6_vmaskedstorentnq_128B,          // llvm.hexagon.V6.vmaskedstorentnq.128B
-    hexagon_V6_vmaskedstorentq,                // llvm.hexagon.V6.vmaskedstorentq
-    hexagon_V6_vmaskedstorentq_128B,           // llvm.hexagon.V6.vmaskedstorentq.128B
-    hexagon_V6_vmaskedstoreq,                  // llvm.hexagon.V6.vmaskedstoreq
-    hexagon_V6_vmaskedstoreq_128B,             // llvm.hexagon.V6.vmaskedstoreq.128B
-    hexagon_V6_vmaxb,                          // llvm.hexagon.V6.vmaxb
-    hexagon_V6_vmaxb_128B,                     // llvm.hexagon.V6.vmaxb.128B
-    hexagon_V6_vmaxh,                          // llvm.hexagon.V6.vmaxh
-    hexagon_V6_vmaxh_128B,                     // llvm.hexagon.V6.vmaxh.128B
-    hexagon_V6_vmaxub,                         // llvm.hexagon.V6.vmaxub
-    hexagon_V6_vmaxub_128B,                    // llvm.hexagon.V6.vmaxub.128B
-    hexagon_V6_vmaxuh,                         // llvm.hexagon.V6.vmaxuh
-    hexagon_V6_vmaxuh_128B,                    // llvm.hexagon.V6.vmaxuh.128B
-    hexagon_V6_vmaxw,                          // llvm.hexagon.V6.vmaxw
-    hexagon_V6_vmaxw_128B,                     // llvm.hexagon.V6.vmaxw.128B
-    hexagon_V6_vminb,                          // llvm.hexagon.V6.vminb
-    hexagon_V6_vminb_128B,                     // llvm.hexagon.V6.vminb.128B
-    hexagon_V6_vminh,                          // llvm.hexagon.V6.vminh
-    hexagon_V6_vminh_128B,                     // llvm.hexagon.V6.vminh.128B
-    hexagon_V6_vminub,                         // llvm.hexagon.V6.vminub
-    hexagon_V6_vminub_128B,                    // llvm.hexagon.V6.vminub.128B
-    hexagon_V6_vminuh,                         // llvm.hexagon.V6.vminuh
-    hexagon_V6_vminuh_128B,                    // llvm.hexagon.V6.vminuh.128B
-    hexagon_V6_vminw,                          // llvm.hexagon.V6.vminw
-    hexagon_V6_vminw_128B,                     // llvm.hexagon.V6.vminw.128B
-    hexagon_V6_vmpabus,                        // llvm.hexagon.V6.vmpabus
-    hexagon_V6_vmpabus_128B,                   // llvm.hexagon.V6.vmpabus.128B
-    hexagon_V6_vmpabus_acc,                    // llvm.hexagon.V6.vmpabus.acc
-    hexagon_V6_vmpabus_acc_128B,               // llvm.hexagon.V6.vmpabus.acc.128B
-    hexagon_V6_vmpabusv,                       // llvm.hexagon.V6.vmpabusv
-    hexagon_V6_vmpabusv_128B,                  // llvm.hexagon.V6.vmpabusv.128B
-    hexagon_V6_vmpabuu,                        // llvm.hexagon.V6.vmpabuu
-    hexagon_V6_vmpabuu_128B,                   // llvm.hexagon.V6.vmpabuu.128B
-    hexagon_V6_vmpabuu_acc,                    // llvm.hexagon.V6.vmpabuu.acc
-    hexagon_V6_vmpabuu_acc_128B,               // llvm.hexagon.V6.vmpabuu.acc.128B
-    hexagon_V6_vmpabuuv,                       // llvm.hexagon.V6.vmpabuuv
-    hexagon_V6_vmpabuuv_128B,                  // llvm.hexagon.V6.vmpabuuv.128B
-    hexagon_V6_vmpahb,                         // llvm.hexagon.V6.vmpahb
-    hexagon_V6_vmpahb_128B,                    // llvm.hexagon.V6.vmpahb.128B
-    hexagon_V6_vmpahb_acc,                     // llvm.hexagon.V6.vmpahb.acc
-    hexagon_V6_vmpahb_acc_128B,                // llvm.hexagon.V6.vmpahb.acc.128B
-    hexagon_V6_vmpahhsat,                      // llvm.hexagon.V6.vmpahhsat
-    hexagon_V6_vmpahhsat_128B,                 // llvm.hexagon.V6.vmpahhsat.128B
-    hexagon_V6_vmpauhb,                        // llvm.hexagon.V6.vmpauhb
-    hexagon_V6_vmpauhb_128B,                   // llvm.hexagon.V6.vmpauhb.128B
-    hexagon_V6_vmpauhb_acc,                    // llvm.hexagon.V6.vmpauhb.acc
-    hexagon_V6_vmpauhb_acc_128B,               // llvm.hexagon.V6.vmpauhb.acc.128B
-    hexagon_V6_vmpauhuhsat,                    // llvm.hexagon.V6.vmpauhuhsat
-    hexagon_V6_vmpauhuhsat_128B,               // llvm.hexagon.V6.vmpauhuhsat.128B
-    hexagon_V6_vmpsuhuhsat,                    // llvm.hexagon.V6.vmpsuhuhsat
-    hexagon_V6_vmpsuhuhsat_128B,               // llvm.hexagon.V6.vmpsuhuhsat.128B
-    hexagon_V6_vmpybus,                        // llvm.hexagon.V6.vmpybus
-    hexagon_V6_vmpybus_128B,                   // llvm.hexagon.V6.vmpybus.128B
-    hexagon_V6_vmpybus_acc,                    // llvm.hexagon.V6.vmpybus.acc
-    hexagon_V6_vmpybus_acc_128B,               // llvm.hexagon.V6.vmpybus.acc.128B
-    hexagon_V6_vmpybusv,                       // llvm.hexagon.V6.vmpybusv
-    hexagon_V6_vmpybusv_128B,                  // llvm.hexagon.V6.vmpybusv.128B
-    hexagon_V6_vmpybusv_acc,                   // llvm.hexagon.V6.vmpybusv.acc
-    hexagon_V6_vmpybusv_acc_128B,              // llvm.hexagon.V6.vmpybusv.acc.128B
-    hexagon_V6_vmpybv,                         // llvm.hexagon.V6.vmpybv
-    hexagon_V6_vmpybv_128B,                    // llvm.hexagon.V6.vmpybv.128B
-    hexagon_V6_vmpybv_acc,                     // llvm.hexagon.V6.vmpybv.acc
-    hexagon_V6_vmpybv_acc_128B,                // llvm.hexagon.V6.vmpybv.acc.128B
-    hexagon_V6_vmpyewuh,                       // llvm.hexagon.V6.vmpyewuh
-    hexagon_V6_vmpyewuh_128B,                  // llvm.hexagon.V6.vmpyewuh.128B
-    hexagon_V6_vmpyewuh_64,                    // llvm.hexagon.V6.vmpyewuh.64
-    hexagon_V6_vmpyewuh_64_128B,               // llvm.hexagon.V6.vmpyewuh.64.128B
-    hexagon_V6_vmpyh,                          // llvm.hexagon.V6.vmpyh
-    hexagon_V6_vmpyh_128B,                     // llvm.hexagon.V6.vmpyh.128B
-    hexagon_V6_vmpyh_acc,                      // llvm.hexagon.V6.vmpyh.acc
-    hexagon_V6_vmpyh_acc_128B,                 // llvm.hexagon.V6.vmpyh.acc.128B
-    hexagon_V6_vmpyhsat_acc,                   // llvm.hexagon.V6.vmpyhsat.acc
-    hexagon_V6_vmpyhsat_acc_128B,              // llvm.hexagon.V6.vmpyhsat.acc.128B
-    hexagon_V6_vmpyhsrs,                       // llvm.hexagon.V6.vmpyhsrs
-    hexagon_V6_vmpyhsrs_128B,                  // llvm.hexagon.V6.vmpyhsrs.128B
-    hexagon_V6_vmpyhss,                        // llvm.hexagon.V6.vmpyhss
-    hexagon_V6_vmpyhss_128B,                   // llvm.hexagon.V6.vmpyhss.128B
-    hexagon_V6_vmpyhus,                        // llvm.hexagon.V6.vmpyhus
-    hexagon_V6_vmpyhus_128B,                   // llvm.hexagon.V6.vmpyhus.128B
-    hexagon_V6_vmpyhus_acc,                    // llvm.hexagon.V6.vmpyhus.acc
-    hexagon_V6_vmpyhus_acc_128B,               // llvm.hexagon.V6.vmpyhus.acc.128B
-    hexagon_V6_vmpyhv,                         // llvm.hexagon.V6.vmpyhv
-    hexagon_V6_vmpyhv_128B,                    // llvm.hexagon.V6.vmpyhv.128B
-    hexagon_V6_vmpyhv_acc,                     // llvm.hexagon.V6.vmpyhv.acc
-    hexagon_V6_vmpyhv_acc_128B,                // llvm.hexagon.V6.vmpyhv.acc.128B
-    hexagon_V6_vmpyhvsrs,                      // llvm.hexagon.V6.vmpyhvsrs
-    hexagon_V6_vmpyhvsrs_128B,                 // llvm.hexagon.V6.vmpyhvsrs.128B
-    hexagon_V6_vmpyieoh,                       // llvm.hexagon.V6.vmpyieoh
-    hexagon_V6_vmpyieoh_128B,                  // llvm.hexagon.V6.vmpyieoh.128B
-    hexagon_V6_vmpyiewh_acc,                   // llvm.hexagon.V6.vmpyiewh.acc
-    hexagon_V6_vmpyiewh_acc_128B,              // llvm.hexagon.V6.vmpyiewh.acc.128B
-    hexagon_V6_vmpyiewuh,                      // llvm.hexagon.V6.vmpyiewuh
-    hexagon_V6_vmpyiewuh_128B,                 // llvm.hexagon.V6.vmpyiewuh.128B
-    hexagon_V6_vmpyiewuh_acc,                  // llvm.hexagon.V6.vmpyiewuh.acc
-    hexagon_V6_vmpyiewuh_acc_128B,             // llvm.hexagon.V6.vmpyiewuh.acc.128B
-    hexagon_V6_vmpyih,                         // llvm.hexagon.V6.vmpyih
-    hexagon_V6_vmpyih_128B,                    // llvm.hexagon.V6.vmpyih.128B
-    hexagon_V6_vmpyih_acc,                     // llvm.hexagon.V6.vmpyih.acc
-    hexagon_V6_vmpyih_acc_128B,                // llvm.hexagon.V6.vmpyih.acc.128B
-    hexagon_V6_vmpyihb,                        // llvm.hexagon.V6.vmpyihb
-    hexagon_V6_vmpyihb_128B,                   // llvm.hexagon.V6.vmpyihb.128B
-    hexagon_V6_vmpyihb_acc,                    // llvm.hexagon.V6.vmpyihb.acc
-    hexagon_V6_vmpyihb_acc_128B,               // llvm.hexagon.V6.vmpyihb.acc.128B
-    hexagon_V6_vmpyiowh,                       // llvm.hexagon.V6.vmpyiowh
-    hexagon_V6_vmpyiowh_128B,                  // llvm.hexagon.V6.vmpyiowh.128B
-    hexagon_V6_vmpyiwb,                        // llvm.hexagon.V6.vmpyiwb
-    hexagon_V6_vmpyiwb_128B,                   // llvm.hexagon.V6.vmpyiwb.128B
-    hexagon_V6_vmpyiwb_acc,                    // llvm.hexagon.V6.vmpyiwb.acc
-    hexagon_V6_vmpyiwb_acc_128B,               // llvm.hexagon.V6.vmpyiwb.acc.128B
-    hexagon_V6_vmpyiwh,                        // llvm.hexagon.V6.vmpyiwh
-    hexagon_V6_vmpyiwh_128B,                   // llvm.hexagon.V6.vmpyiwh.128B
-    hexagon_V6_vmpyiwh_acc,                    // llvm.hexagon.V6.vmpyiwh.acc
-    hexagon_V6_vmpyiwh_acc_128B,               // llvm.hexagon.V6.vmpyiwh.acc.128B
-    hexagon_V6_vmpyiwub,                       // llvm.hexagon.V6.vmpyiwub
-    hexagon_V6_vmpyiwub_128B,                  // llvm.hexagon.V6.vmpyiwub.128B
-    hexagon_V6_vmpyiwub_acc,                   // llvm.hexagon.V6.vmpyiwub.acc
-    hexagon_V6_vmpyiwub_acc_128B,              // llvm.hexagon.V6.vmpyiwub.acc.128B
-    hexagon_V6_vmpyowh,                        // llvm.hexagon.V6.vmpyowh
-    hexagon_V6_vmpyowh_128B,                   // llvm.hexagon.V6.vmpyowh.128B
-    hexagon_V6_vmpyowh_64_acc,                 // llvm.hexagon.V6.vmpyowh.64.acc
-    hexagon_V6_vmpyowh_64_acc_128B,            // llvm.hexagon.V6.vmpyowh.64.acc.128B
-    hexagon_V6_vmpyowh_rnd,                    // llvm.hexagon.V6.vmpyowh.rnd
-    hexagon_V6_vmpyowh_rnd_128B,               // llvm.hexagon.V6.vmpyowh.rnd.128B
-    hexagon_V6_vmpyowh_rnd_sacc,               // llvm.hexagon.V6.vmpyowh.rnd.sacc
-    hexagon_V6_vmpyowh_rnd_sacc_128B,          // llvm.hexagon.V6.vmpyowh.rnd.sacc.128B
-    hexagon_V6_vmpyowh_sacc,                   // llvm.hexagon.V6.vmpyowh.sacc
-    hexagon_V6_vmpyowh_sacc_128B,              // llvm.hexagon.V6.vmpyowh.sacc.128B
-    hexagon_V6_vmpyub,                         // llvm.hexagon.V6.vmpyub
-    hexagon_V6_vmpyub_128B,                    // llvm.hexagon.V6.vmpyub.128B
-    hexagon_V6_vmpyub_acc,                     // llvm.hexagon.V6.vmpyub.acc
-    hexagon_V6_vmpyub_acc_128B,                // llvm.hexagon.V6.vmpyub.acc.128B
-    hexagon_V6_vmpyubv,                        // llvm.hexagon.V6.vmpyubv
-    hexagon_V6_vmpyubv_128B,                   // llvm.hexagon.V6.vmpyubv.128B
-    hexagon_V6_vmpyubv_acc,                    // llvm.hexagon.V6.vmpyubv.acc
-    hexagon_V6_vmpyubv_acc_128B,               // llvm.hexagon.V6.vmpyubv.acc.128B
-    hexagon_V6_vmpyuh,                         // llvm.hexagon.V6.vmpyuh
-    hexagon_V6_vmpyuh_128B,                    // llvm.hexagon.V6.vmpyuh.128B
-    hexagon_V6_vmpyuh_acc,                     // llvm.hexagon.V6.vmpyuh.acc
-    hexagon_V6_vmpyuh_acc_128B,                // llvm.hexagon.V6.vmpyuh.acc.128B
-    hexagon_V6_vmpyuhe,                        // llvm.hexagon.V6.vmpyuhe
-    hexagon_V6_vmpyuhe_128B,                   // llvm.hexagon.V6.vmpyuhe.128B
-    hexagon_V6_vmpyuhe_acc,                    // llvm.hexagon.V6.vmpyuhe.acc
-    hexagon_V6_vmpyuhe_acc_128B,               // llvm.hexagon.V6.vmpyuhe.acc.128B
-    hexagon_V6_vmpyuhv,                        // llvm.hexagon.V6.vmpyuhv
-    hexagon_V6_vmpyuhv_128B,                   // llvm.hexagon.V6.vmpyuhv.128B
-    hexagon_V6_vmpyuhv_acc,                    // llvm.hexagon.V6.vmpyuhv.acc
-    hexagon_V6_vmpyuhv_acc_128B,               // llvm.hexagon.V6.vmpyuhv.acc.128B
-    hexagon_V6_vmux,                           // llvm.hexagon.V6.vmux
-    hexagon_V6_vmux_128B,                      // llvm.hexagon.V6.vmux.128B
-    hexagon_V6_vnavgb,                         // llvm.hexagon.V6.vnavgb
-    hexagon_V6_vnavgb_128B,                    // llvm.hexagon.V6.vnavgb.128B
-    hexagon_V6_vnavgh,                         // llvm.hexagon.V6.vnavgh
-    hexagon_V6_vnavgh_128B,                    // llvm.hexagon.V6.vnavgh.128B
-    hexagon_V6_vnavgub,                        // llvm.hexagon.V6.vnavgub
-    hexagon_V6_vnavgub_128B,                   // llvm.hexagon.V6.vnavgub.128B
-    hexagon_V6_vnavgw,                         // llvm.hexagon.V6.vnavgw
-    hexagon_V6_vnavgw_128B,                    // llvm.hexagon.V6.vnavgw.128B
-    hexagon_V6_vnormamth,                      // llvm.hexagon.V6.vnormamth
-    hexagon_V6_vnormamth_128B,                 // llvm.hexagon.V6.vnormamth.128B
-    hexagon_V6_vnormamtw,                      // llvm.hexagon.V6.vnormamtw
-    hexagon_V6_vnormamtw_128B,                 // llvm.hexagon.V6.vnormamtw.128B
-    hexagon_V6_vnot,                           // llvm.hexagon.V6.vnot
-    hexagon_V6_vnot_128B,                      // llvm.hexagon.V6.vnot.128B
-    hexagon_V6_vor,                            // llvm.hexagon.V6.vor
-    hexagon_V6_vor_128B,                       // llvm.hexagon.V6.vor.128B
-    hexagon_V6_vpackeb,                        // llvm.hexagon.V6.vpackeb
-    hexagon_V6_vpackeb_128B,                   // llvm.hexagon.V6.vpackeb.128B
-    hexagon_V6_vpackeh,                        // llvm.hexagon.V6.vpackeh
-    hexagon_V6_vpackeh_128B,                   // llvm.hexagon.V6.vpackeh.128B
-    hexagon_V6_vpackhb_sat,                    // llvm.hexagon.V6.vpackhb.sat
-    hexagon_V6_vpackhb_sat_128B,               // llvm.hexagon.V6.vpackhb.sat.128B
-    hexagon_V6_vpackhub_sat,                   // llvm.hexagon.V6.vpackhub.sat
-    hexagon_V6_vpackhub_sat_128B,              // llvm.hexagon.V6.vpackhub.sat.128B
-    hexagon_V6_vpackob,                        // llvm.hexagon.V6.vpackob
-    hexagon_V6_vpackob_128B,                   // llvm.hexagon.V6.vpackob.128B
-    hexagon_V6_vpackoh,                        // llvm.hexagon.V6.vpackoh
-    hexagon_V6_vpackoh_128B,                   // llvm.hexagon.V6.vpackoh.128B
-    hexagon_V6_vpackwh_sat,                    // llvm.hexagon.V6.vpackwh.sat
-    hexagon_V6_vpackwh_sat_128B,               // llvm.hexagon.V6.vpackwh.sat.128B
-    hexagon_V6_vpackwuh_sat,                   // llvm.hexagon.V6.vpackwuh.sat
-    hexagon_V6_vpackwuh_sat_128B,              // llvm.hexagon.V6.vpackwuh.sat.128B
-    hexagon_V6_vpopcounth,                     // llvm.hexagon.V6.vpopcounth
-    hexagon_V6_vpopcounth_128B,                // llvm.hexagon.V6.vpopcounth.128B
-    hexagon_V6_vprefixqb,                      // llvm.hexagon.V6.vprefixqb
-    hexagon_V6_vprefixqb_128B,                 // llvm.hexagon.V6.vprefixqb.128B
-    hexagon_V6_vprefixqh,                      // llvm.hexagon.V6.vprefixqh
-    hexagon_V6_vprefixqh_128B,                 // llvm.hexagon.V6.vprefixqh.128B
-    hexagon_V6_vprefixqw,                      // llvm.hexagon.V6.vprefixqw
-    hexagon_V6_vprefixqw_128B,                 // llvm.hexagon.V6.vprefixqw.128B
-    hexagon_V6_vrdelta,                        // llvm.hexagon.V6.vrdelta
-    hexagon_V6_vrdelta_128B,                   // llvm.hexagon.V6.vrdelta.128B
-    hexagon_V6_vrmpybub_rtt,                   // llvm.hexagon.V6.vrmpybub.rtt
-    hexagon_V6_vrmpybub_rtt_128B,              // llvm.hexagon.V6.vrmpybub.rtt.128B
-    hexagon_V6_vrmpybub_rtt_acc,               // llvm.hexagon.V6.vrmpybub.rtt.acc
-    hexagon_V6_vrmpybub_rtt_acc_128B,          // llvm.hexagon.V6.vrmpybub.rtt.acc.128B
-    hexagon_V6_vrmpybus,                       // llvm.hexagon.V6.vrmpybus
-    hexagon_V6_vrmpybus_128B,                  // llvm.hexagon.V6.vrmpybus.128B
-    hexagon_V6_vrmpybus_acc,                   // llvm.hexagon.V6.vrmpybus.acc
-    hexagon_V6_vrmpybus_acc_128B,              // llvm.hexagon.V6.vrmpybus.acc.128B
-    hexagon_V6_vrmpybusi,                      // llvm.hexagon.V6.vrmpybusi
-    hexagon_V6_vrmpybusi_128B,                 // llvm.hexagon.V6.vrmpybusi.128B
-    hexagon_V6_vrmpybusi_acc,                  // llvm.hexagon.V6.vrmpybusi.acc
-    hexagon_V6_vrmpybusi_acc_128B,             // llvm.hexagon.V6.vrmpybusi.acc.128B
-    hexagon_V6_vrmpybusv,                      // llvm.hexagon.V6.vrmpybusv
-    hexagon_V6_vrmpybusv_128B,                 // llvm.hexagon.V6.vrmpybusv.128B
-    hexagon_V6_vrmpybusv_acc,                  // llvm.hexagon.V6.vrmpybusv.acc
-    hexagon_V6_vrmpybusv_acc_128B,             // llvm.hexagon.V6.vrmpybusv.acc.128B
-    hexagon_V6_vrmpybv,                        // llvm.hexagon.V6.vrmpybv
-    hexagon_V6_vrmpybv_128B,                   // llvm.hexagon.V6.vrmpybv.128B
-    hexagon_V6_vrmpybv_acc,                    // llvm.hexagon.V6.vrmpybv.acc
-    hexagon_V6_vrmpybv_acc_128B,               // llvm.hexagon.V6.vrmpybv.acc.128B
-    hexagon_V6_vrmpyub,                        // llvm.hexagon.V6.vrmpyub
-    hexagon_V6_vrmpyub_128B,                   // llvm.hexagon.V6.vrmpyub.128B
-    hexagon_V6_vrmpyub_acc,                    // llvm.hexagon.V6.vrmpyub.acc
-    hexagon_V6_vrmpyub_acc_128B,               // llvm.hexagon.V6.vrmpyub.acc.128B
-    hexagon_V6_vrmpyub_rtt,                    // llvm.hexagon.V6.vrmpyub.rtt
-    hexagon_V6_vrmpyub_rtt_128B,               // llvm.hexagon.V6.vrmpyub.rtt.128B
-    hexagon_V6_vrmpyub_rtt_acc,                // llvm.hexagon.V6.vrmpyub.rtt.acc
-    hexagon_V6_vrmpyub_rtt_acc_128B,           // llvm.hexagon.V6.vrmpyub.rtt.acc.128B
-    hexagon_V6_vrmpyubi,                       // llvm.hexagon.V6.vrmpyubi
-    hexagon_V6_vrmpyubi_128B,                  // llvm.hexagon.V6.vrmpyubi.128B
-    hexagon_V6_vrmpyubi_acc,                   // llvm.hexagon.V6.vrmpyubi.acc
-    hexagon_V6_vrmpyubi_acc_128B,              // llvm.hexagon.V6.vrmpyubi.acc.128B
-    hexagon_V6_vrmpyubv,                       // llvm.hexagon.V6.vrmpyubv
-    hexagon_V6_vrmpyubv_128B,                  // llvm.hexagon.V6.vrmpyubv.128B
-    hexagon_V6_vrmpyubv_acc,                   // llvm.hexagon.V6.vrmpyubv.acc
-    hexagon_V6_vrmpyubv_acc_128B,              // llvm.hexagon.V6.vrmpyubv.acc.128B
-    hexagon_V6_vror,                           // llvm.hexagon.V6.vror
-    hexagon_V6_vror_128B,                      // llvm.hexagon.V6.vror.128B
-    hexagon_V6_vroundhb,                       // llvm.hexagon.V6.vroundhb
-    hexagon_V6_vroundhb_128B,                  // llvm.hexagon.V6.vroundhb.128B
-    hexagon_V6_vroundhub,                      // llvm.hexagon.V6.vroundhub
-    hexagon_V6_vroundhub_128B,                 // llvm.hexagon.V6.vroundhub.128B
-    hexagon_V6_vrounduhub,                     // llvm.hexagon.V6.vrounduhub
-    hexagon_V6_vrounduhub_128B,                // llvm.hexagon.V6.vrounduhub.128B
-    hexagon_V6_vrounduwuh,                     // llvm.hexagon.V6.vrounduwuh
-    hexagon_V6_vrounduwuh_128B,                // llvm.hexagon.V6.vrounduwuh.128B
-    hexagon_V6_vroundwh,                       // llvm.hexagon.V6.vroundwh
-    hexagon_V6_vroundwh_128B,                  // llvm.hexagon.V6.vroundwh.128B
-    hexagon_V6_vroundwuh,                      // llvm.hexagon.V6.vroundwuh
-    hexagon_V6_vroundwuh_128B,                 // llvm.hexagon.V6.vroundwuh.128B
-    hexagon_V6_vrsadubi,                       // llvm.hexagon.V6.vrsadubi
-    hexagon_V6_vrsadubi_128B,                  // llvm.hexagon.V6.vrsadubi.128B
-    hexagon_V6_vrsadubi_acc,                   // llvm.hexagon.V6.vrsadubi.acc
-    hexagon_V6_vrsadubi_acc_128B,              // llvm.hexagon.V6.vrsadubi.acc.128B
-    hexagon_V6_vsathub,                        // llvm.hexagon.V6.vsathub
-    hexagon_V6_vsathub_128B,                   // llvm.hexagon.V6.vsathub.128B
-    hexagon_V6_vsatuwuh,                       // llvm.hexagon.V6.vsatuwuh
-    hexagon_V6_vsatuwuh_128B,                  // llvm.hexagon.V6.vsatuwuh.128B
-    hexagon_V6_vsatwh,                         // llvm.hexagon.V6.vsatwh
-    hexagon_V6_vsatwh_128B,                    // llvm.hexagon.V6.vsatwh.128B
-    hexagon_V6_vsb,                            // llvm.hexagon.V6.vsb
-    hexagon_V6_vsb_128B,                       // llvm.hexagon.V6.vsb.128B
-    hexagon_V6_vscattermh,                     // llvm.hexagon.V6.vscattermh
-    hexagon_V6_vscattermh_128B,                // llvm.hexagon.V6.vscattermh.128B
-    hexagon_V6_vscattermh_add,                 // llvm.hexagon.V6.vscattermh.add
-    hexagon_V6_vscattermh_add_128B,            // llvm.hexagon.V6.vscattermh.add.128B
-    hexagon_V6_vscattermhq,                    // llvm.hexagon.V6.vscattermhq
-    hexagon_V6_vscattermhq_128B,               // llvm.hexagon.V6.vscattermhq.128B
-    hexagon_V6_vscattermhw,                    // llvm.hexagon.V6.vscattermhw
-    hexagon_V6_vscattermhw_128B,               // llvm.hexagon.V6.vscattermhw.128B
-    hexagon_V6_vscattermhw_add,                // llvm.hexagon.V6.vscattermhw.add
-    hexagon_V6_vscattermhw_add_128B,           // llvm.hexagon.V6.vscattermhw.add.128B
-    hexagon_V6_vscattermhwq,                   // llvm.hexagon.V6.vscattermhwq
-    hexagon_V6_vscattermhwq_128B,              // llvm.hexagon.V6.vscattermhwq.128B
-    hexagon_V6_vscattermw,                     // llvm.hexagon.V6.vscattermw
-    hexagon_V6_vscattermw_128B,                // llvm.hexagon.V6.vscattermw.128B
-    hexagon_V6_vscattermw_add,                 // llvm.hexagon.V6.vscattermw.add
-    hexagon_V6_vscattermw_add_128B,            // llvm.hexagon.V6.vscattermw.add.128B
-    hexagon_V6_vscattermwq,                    // llvm.hexagon.V6.vscattermwq
-    hexagon_V6_vscattermwq_128B,               // llvm.hexagon.V6.vscattermwq.128B
-    hexagon_V6_vsh,                            // llvm.hexagon.V6.vsh
-    hexagon_V6_vsh_128B,                       // llvm.hexagon.V6.vsh.128B
-    hexagon_V6_vshufeh,                        // llvm.hexagon.V6.vshufeh
-    hexagon_V6_vshufeh_128B,                   // llvm.hexagon.V6.vshufeh.128B
-    hexagon_V6_vshuffb,                        // llvm.hexagon.V6.vshuffb
-    hexagon_V6_vshuffb_128B,                   // llvm.hexagon.V6.vshuffb.128B
-    hexagon_V6_vshuffeb,                       // llvm.hexagon.V6.vshuffeb
-    hexagon_V6_vshuffeb_128B,                  // llvm.hexagon.V6.vshuffeb.128B
-    hexagon_V6_vshuffh,                        // llvm.hexagon.V6.vshuffh
-    hexagon_V6_vshuffh_128B,                   // llvm.hexagon.V6.vshuffh.128B
-    hexagon_V6_vshuffob,                       // llvm.hexagon.V6.vshuffob
-    hexagon_V6_vshuffob_128B,                  // llvm.hexagon.V6.vshuffob.128B
-    hexagon_V6_vshuffvdd,                      // llvm.hexagon.V6.vshuffvdd
-    hexagon_V6_vshuffvdd_128B,                 // llvm.hexagon.V6.vshuffvdd.128B
-    hexagon_V6_vshufoeb,                       // llvm.hexagon.V6.vshufoeb
-    hexagon_V6_vshufoeb_128B,                  // llvm.hexagon.V6.vshufoeb.128B
-    hexagon_V6_vshufoeh,                       // llvm.hexagon.V6.vshufoeh
-    hexagon_V6_vshufoeh_128B,                  // llvm.hexagon.V6.vshufoeh.128B
-    hexagon_V6_vshufoh,                        // llvm.hexagon.V6.vshufoh
-    hexagon_V6_vshufoh_128B,                   // llvm.hexagon.V6.vshufoh.128B
-    hexagon_V6_vsubb,                          // llvm.hexagon.V6.vsubb
-    hexagon_V6_vsubb_128B,                     // llvm.hexagon.V6.vsubb.128B
-    hexagon_V6_vsubb_dv,                       // llvm.hexagon.V6.vsubb.dv
-    hexagon_V6_vsubb_dv_128B,                  // llvm.hexagon.V6.vsubb.dv.128B
-    hexagon_V6_vsubbnq,                        // llvm.hexagon.V6.vsubbnq
-    hexagon_V6_vsubbnq_128B,                   // llvm.hexagon.V6.vsubbnq.128B
-    hexagon_V6_vsubbq,                         // llvm.hexagon.V6.vsubbq
-    hexagon_V6_vsubbq_128B,                    // llvm.hexagon.V6.vsubbq.128B
-    hexagon_V6_vsubbsat,                       // llvm.hexagon.V6.vsubbsat
-    hexagon_V6_vsubbsat_128B,                  // llvm.hexagon.V6.vsubbsat.128B
-    hexagon_V6_vsubbsat_dv,                    // llvm.hexagon.V6.vsubbsat.dv
-    hexagon_V6_vsubbsat_dv_128B,               // llvm.hexagon.V6.vsubbsat.dv.128B
-    hexagon_V6_vsubcarry,                      // llvm.hexagon.V6.vsubcarry
-    hexagon_V6_vsubcarry_128B,                 // llvm.hexagon.V6.vsubcarry.128B
-    hexagon_V6_vsubh,                          // llvm.hexagon.V6.vsubh
-    hexagon_V6_vsubh_128B,                     // llvm.hexagon.V6.vsubh.128B
-    hexagon_V6_vsubh_dv,                       // llvm.hexagon.V6.vsubh.dv
-    hexagon_V6_vsubh_dv_128B,                  // llvm.hexagon.V6.vsubh.dv.128B
-    hexagon_V6_vsubhnq,                        // llvm.hexagon.V6.vsubhnq
-    hexagon_V6_vsubhnq_128B,                   // llvm.hexagon.V6.vsubhnq.128B
-    hexagon_V6_vsubhq,                         // llvm.hexagon.V6.vsubhq
-    hexagon_V6_vsubhq_128B,                    // llvm.hexagon.V6.vsubhq.128B
-    hexagon_V6_vsubhsat,                       // llvm.hexagon.V6.vsubhsat
-    hexagon_V6_vsubhsat_128B,                  // llvm.hexagon.V6.vsubhsat.128B
-    hexagon_V6_vsubhsat_dv,                    // llvm.hexagon.V6.vsubhsat.dv
-    hexagon_V6_vsubhsat_dv_128B,               // llvm.hexagon.V6.vsubhsat.dv.128B
-    hexagon_V6_vsubhw,                         // llvm.hexagon.V6.vsubhw
-    hexagon_V6_vsubhw_128B,                    // llvm.hexagon.V6.vsubhw.128B
-    hexagon_V6_vsububh,                        // llvm.hexagon.V6.vsububh
-    hexagon_V6_vsububh_128B,                   // llvm.hexagon.V6.vsububh.128B
-    hexagon_V6_vsububsat,                      // llvm.hexagon.V6.vsububsat
-    hexagon_V6_vsububsat_128B,                 // llvm.hexagon.V6.vsububsat.128B
-    hexagon_V6_vsububsat_dv,                   // llvm.hexagon.V6.vsububsat.dv
-    hexagon_V6_vsububsat_dv_128B,              // llvm.hexagon.V6.vsububsat.dv.128B
-    hexagon_V6_vsubububb_sat,                  // llvm.hexagon.V6.vsubububb.sat
-    hexagon_V6_vsubububb_sat_128B,             // llvm.hexagon.V6.vsubububb.sat.128B
-    hexagon_V6_vsubuhsat,                      // llvm.hexagon.V6.vsubuhsat
-    hexagon_V6_vsubuhsat_128B,                 // llvm.hexagon.V6.vsubuhsat.128B
-    hexagon_V6_vsubuhsat_dv,                   // llvm.hexagon.V6.vsubuhsat.dv
-    hexagon_V6_vsubuhsat_dv_128B,              // llvm.hexagon.V6.vsubuhsat.dv.128B
-    hexagon_V6_vsubuhw,                        // llvm.hexagon.V6.vsubuhw
-    hexagon_V6_vsubuhw_128B,                   // llvm.hexagon.V6.vsubuhw.128B
-    hexagon_V6_vsubuwsat,                      // llvm.hexagon.V6.vsubuwsat
-    hexagon_V6_vsubuwsat_128B,                 // llvm.hexagon.V6.vsubuwsat.128B
-    hexagon_V6_vsubuwsat_dv,                   // llvm.hexagon.V6.vsubuwsat.dv
-    hexagon_V6_vsubuwsat_dv_128B,              // llvm.hexagon.V6.vsubuwsat.dv.128B
-    hexagon_V6_vsubw,                          // llvm.hexagon.V6.vsubw
-    hexagon_V6_vsubw_128B,                     // llvm.hexagon.V6.vsubw.128B
-    hexagon_V6_vsubw_dv,                       // llvm.hexagon.V6.vsubw.dv
-    hexagon_V6_vsubw_dv_128B,                  // llvm.hexagon.V6.vsubw.dv.128B
-    hexagon_V6_vsubwnq,                        // llvm.hexagon.V6.vsubwnq
-    hexagon_V6_vsubwnq_128B,                   // llvm.hexagon.V6.vsubwnq.128B
-    hexagon_V6_vsubwq,                         // llvm.hexagon.V6.vsubwq
-    hexagon_V6_vsubwq_128B,                    // llvm.hexagon.V6.vsubwq.128B
-    hexagon_V6_vsubwsat,                       // llvm.hexagon.V6.vsubwsat
-    hexagon_V6_vsubwsat_128B,                  // llvm.hexagon.V6.vsubwsat.128B
-    hexagon_V6_vsubwsat_dv,                    // llvm.hexagon.V6.vsubwsat.dv
-    hexagon_V6_vsubwsat_dv_128B,               // llvm.hexagon.V6.vsubwsat.dv.128B
-    hexagon_V6_vswap,                          // llvm.hexagon.V6.vswap
-    hexagon_V6_vswap_128B,                     // llvm.hexagon.V6.vswap.128B
-    hexagon_V6_vtmpyb,                         // llvm.hexagon.V6.vtmpyb
-    hexagon_V6_vtmpyb_128B,                    // llvm.hexagon.V6.vtmpyb.128B
-    hexagon_V6_vtmpyb_acc,                     // llvm.hexagon.V6.vtmpyb.acc
-    hexagon_V6_vtmpyb_acc_128B,                // llvm.hexagon.V6.vtmpyb.acc.128B
-    hexagon_V6_vtmpybus,                       // llvm.hexagon.V6.vtmpybus
-    hexagon_V6_vtmpybus_128B,                  // llvm.hexagon.V6.vtmpybus.128B
-    hexagon_V6_vtmpybus_acc,                   // llvm.hexagon.V6.vtmpybus.acc
-    hexagon_V6_vtmpybus_acc_128B,              // llvm.hexagon.V6.vtmpybus.acc.128B
-    hexagon_V6_vtmpyhb,                        // llvm.hexagon.V6.vtmpyhb
-    hexagon_V6_vtmpyhb_128B,                   // llvm.hexagon.V6.vtmpyhb.128B
-    hexagon_V6_vtmpyhb_acc,                    // llvm.hexagon.V6.vtmpyhb.acc
-    hexagon_V6_vtmpyhb_acc_128B,               // llvm.hexagon.V6.vtmpyhb.acc.128B
-    hexagon_V6_vunpackb,                       // llvm.hexagon.V6.vunpackb
-    hexagon_V6_vunpackb_128B,                  // llvm.hexagon.V6.vunpackb.128B
-    hexagon_V6_vunpackh,                       // llvm.hexagon.V6.vunpackh
-    hexagon_V6_vunpackh_128B,                  // llvm.hexagon.V6.vunpackh.128B
-    hexagon_V6_vunpackob,                      // llvm.hexagon.V6.vunpackob
-    hexagon_V6_vunpackob_128B,                 // llvm.hexagon.V6.vunpackob.128B
-    hexagon_V6_vunpackoh,                      // llvm.hexagon.V6.vunpackoh
-    hexagon_V6_vunpackoh_128B,                 // llvm.hexagon.V6.vunpackoh.128B
-    hexagon_V6_vunpackub,                      // llvm.hexagon.V6.vunpackub
-    hexagon_V6_vunpackub_128B,                 // llvm.hexagon.V6.vunpackub.128B
-    hexagon_V6_vunpackuh,                      // llvm.hexagon.V6.vunpackuh
-    hexagon_V6_vunpackuh_128B,                 // llvm.hexagon.V6.vunpackuh.128B
-    hexagon_V6_vxor,                           // llvm.hexagon.V6.vxor
-    hexagon_V6_vxor_128B,                      // llvm.hexagon.V6.vxor.128B
-    hexagon_V6_vzb,                            // llvm.hexagon.V6.vzb
-    hexagon_V6_vzb_128B,                       // llvm.hexagon.V6.vzb.128B
-    hexagon_V6_vzh,                            // llvm.hexagon.V6.vzh
-    hexagon_V6_vzh_128B,                       // llvm.hexagon.V6.vzh.128B
-    hexagon_Y2_dccleana,                       // llvm.hexagon.Y2.dccleana
-    hexagon_Y2_dccleaninva,                    // llvm.hexagon.Y2.dccleaninva
-    hexagon_Y2_dcinva,                         // llvm.hexagon.Y2.dcinva
-    hexagon_Y2_dczeroa,                        // llvm.hexagon.Y2.dczeroa
-    hexagon_Y4_l2fetch,                        // llvm.hexagon.Y4.l2fetch
-    hexagon_Y5_l2fetch,                        // llvm.hexagon.Y5.l2fetch
-    hexagon_circ_ldb,                          // llvm.hexagon.circ.ldb
-    hexagon_circ_ldd,                          // llvm.hexagon.circ.ldd
-    hexagon_circ_ldh,                          // llvm.hexagon.circ.ldh
-    hexagon_circ_ldub,                         // llvm.hexagon.circ.ldub
-    hexagon_circ_lduh,                         // llvm.hexagon.circ.lduh
-    hexagon_circ_ldw,                          // llvm.hexagon.circ.ldw
-    hexagon_circ_stb,                          // llvm.hexagon.circ.stb
-    hexagon_circ_std,                          // llvm.hexagon.circ.std
-    hexagon_circ_sth,                          // llvm.hexagon.circ.sth
-    hexagon_circ_sthhi,                        // llvm.hexagon.circ.sthhi
-    hexagon_circ_stw,                          // llvm.hexagon.circ.stw
-    hexagon_mm256i_vaddw,                      // llvm.hexagon.mm256i.vaddw
-    hexagon_prefetch,                          // llvm.hexagon.prefetch
-    mips_absq_s_ph,                            // llvm.mips.absq.s.ph
-    mips_absq_s_qb,                            // llvm.mips.absq.s.qb
-    mips_absq_s_w,                             // llvm.mips.absq.s.w
-    mips_add_a_b,                              // llvm.mips.add.a.b
-    mips_add_a_d,                              // llvm.mips.add.a.d
-    mips_add_a_h,                              // llvm.mips.add.a.h
-    mips_add_a_w,                              // llvm.mips.add.a.w
-    mips_addq_ph,                              // llvm.mips.addq.ph
-    mips_addq_s_ph,                            // llvm.mips.addq.s.ph
-    mips_addq_s_w,                             // llvm.mips.addq.s.w
-    mips_addqh_ph,                             // llvm.mips.addqh.ph
-    mips_addqh_r_ph,                           // llvm.mips.addqh.r.ph
-    mips_addqh_r_w,                            // llvm.mips.addqh.r.w
-    mips_addqh_w,                              // llvm.mips.addqh.w
-    mips_adds_a_b,                             // llvm.mips.adds.a.b
-    mips_adds_a_d,                             // llvm.mips.adds.a.d
-    mips_adds_a_h,                             // llvm.mips.adds.a.h
-    mips_adds_a_w,                             // llvm.mips.adds.a.w
-    mips_adds_s_b,                             // llvm.mips.adds.s.b
-    mips_adds_s_d,                             // llvm.mips.adds.s.d
-    mips_adds_s_h,                             // llvm.mips.adds.s.h
-    mips_adds_s_w,                             // llvm.mips.adds.s.w
-    mips_adds_u_b,                             // llvm.mips.adds.u.b
-    mips_adds_u_d,                             // llvm.mips.adds.u.d
-    mips_adds_u_h,                             // llvm.mips.adds.u.h
-    mips_adds_u_w,                             // llvm.mips.adds.u.w
-    mips_addsc,                                // llvm.mips.addsc
-    mips_addu_ph,                              // llvm.mips.addu.ph
-    mips_addu_qb,                              // llvm.mips.addu.qb
-    mips_addu_s_ph,                            // llvm.mips.addu.s.ph
-    mips_addu_s_qb,                            // llvm.mips.addu.s.qb
-    mips_adduh_qb,                             // llvm.mips.adduh.qb
-    mips_adduh_r_qb,                           // llvm.mips.adduh.r.qb
-    mips_addv_b,                               // llvm.mips.addv.b
-    mips_addv_d,                               // llvm.mips.addv.d
-    mips_addv_h,                               // llvm.mips.addv.h
-    mips_addv_w,                               // llvm.mips.addv.w
-    mips_addvi_b,                              // llvm.mips.addvi.b
-    mips_addvi_d,                              // llvm.mips.addvi.d
-    mips_addvi_h,                              // llvm.mips.addvi.h
-    mips_addvi_w,                              // llvm.mips.addvi.w
-    mips_addwc,                                // llvm.mips.addwc
-    mips_and_v,                                // llvm.mips.and.v
-    mips_andi_b,                               // llvm.mips.andi.b
-    mips_append,                               // llvm.mips.append
-    mips_asub_s_b,                             // llvm.mips.asub.s.b
-    mips_asub_s_d,                             // llvm.mips.asub.s.d
-    mips_asub_s_h,                             // llvm.mips.asub.s.h
-    mips_asub_s_w,                             // llvm.mips.asub.s.w
-    mips_asub_u_b,                             // llvm.mips.asub.u.b
-    mips_asub_u_d,                             // llvm.mips.asub.u.d
-    mips_asub_u_h,                             // llvm.mips.asub.u.h
-    mips_asub_u_w,                             // llvm.mips.asub.u.w
-    mips_ave_s_b,                              // llvm.mips.ave.s.b
-    mips_ave_s_d,                              // llvm.mips.ave.s.d
-    mips_ave_s_h,                              // llvm.mips.ave.s.h
-    mips_ave_s_w,                              // llvm.mips.ave.s.w
-    mips_ave_u_b,                              // llvm.mips.ave.u.b
-    mips_ave_u_d,                              // llvm.mips.ave.u.d
-    mips_ave_u_h,                              // llvm.mips.ave.u.h
-    mips_ave_u_w,                              // llvm.mips.ave.u.w
-    mips_aver_s_b,                             // llvm.mips.aver.s.b
-    mips_aver_s_d,                             // llvm.mips.aver.s.d
-    mips_aver_s_h,                             // llvm.mips.aver.s.h
-    mips_aver_s_w,                             // llvm.mips.aver.s.w
-    mips_aver_u_b,                             // llvm.mips.aver.u.b
-    mips_aver_u_d,                             // llvm.mips.aver.u.d
-    mips_aver_u_h,                             // llvm.mips.aver.u.h
-    mips_aver_u_w,                             // llvm.mips.aver.u.w
-    mips_balign,                               // llvm.mips.balign
-    mips_bclr_b,                               // llvm.mips.bclr.b
-    mips_bclr_d,                               // llvm.mips.bclr.d
-    mips_bclr_h,                               // llvm.mips.bclr.h
-    mips_bclr_w,                               // llvm.mips.bclr.w
-    mips_bclri_b,                              // llvm.mips.bclri.b
-    mips_bclri_d,                              // llvm.mips.bclri.d
-    mips_bclri_h,                              // llvm.mips.bclri.h
-    mips_bclri_w,                              // llvm.mips.bclri.w
-    mips_binsl_b,                              // llvm.mips.binsl.b
-    mips_binsl_d,                              // llvm.mips.binsl.d
-    mips_binsl_h,                              // llvm.mips.binsl.h
-    mips_binsl_w,                              // llvm.mips.binsl.w
-    mips_binsli_b,                             // llvm.mips.binsli.b
-    mips_binsli_d,                             // llvm.mips.binsli.d
-    mips_binsli_h,                             // llvm.mips.binsli.h
-    mips_binsli_w,                             // llvm.mips.binsli.w
-    mips_binsr_b,                              // llvm.mips.binsr.b
-    mips_binsr_d,                              // llvm.mips.binsr.d
-    mips_binsr_h,                              // llvm.mips.binsr.h
-    mips_binsr_w,                              // llvm.mips.binsr.w
-    mips_binsri_b,                             // llvm.mips.binsri.b
-    mips_binsri_d,                             // llvm.mips.binsri.d
-    mips_binsri_h,                             // llvm.mips.binsri.h
-    mips_binsri_w,                             // llvm.mips.binsri.w
-    mips_bitrev,                               // llvm.mips.bitrev
-    mips_bmnz_v,                               // llvm.mips.bmnz.v
-    mips_bmnzi_b,                              // llvm.mips.bmnzi.b
-    mips_bmz_v,                                // llvm.mips.bmz.v
-    mips_bmzi_b,                               // llvm.mips.bmzi.b
-    mips_bneg_b,                               // llvm.mips.bneg.b
-    mips_bneg_d,                               // llvm.mips.bneg.d
-    mips_bneg_h,                               // llvm.mips.bneg.h
-    mips_bneg_w,                               // llvm.mips.bneg.w
-    mips_bnegi_b,                              // llvm.mips.bnegi.b
-    mips_bnegi_d,                              // llvm.mips.bnegi.d
-    mips_bnegi_h,                              // llvm.mips.bnegi.h
-    mips_bnegi_w,                              // llvm.mips.bnegi.w
-    mips_bnz_b,                                // llvm.mips.bnz.b
-    mips_bnz_d,                                // llvm.mips.bnz.d
-    mips_bnz_h,                                // llvm.mips.bnz.h
-    mips_bnz_v,                                // llvm.mips.bnz.v
-    mips_bnz_w,                                // llvm.mips.bnz.w
-    mips_bposge32,                             // llvm.mips.bposge32
-    mips_bsel_v,                               // llvm.mips.bsel.v
-    mips_bseli_b,                              // llvm.mips.bseli.b
-    mips_bset_b,                               // llvm.mips.bset.b
-    mips_bset_d,                               // llvm.mips.bset.d
-    mips_bset_h,                               // llvm.mips.bset.h
-    mips_bset_w,                               // llvm.mips.bset.w
-    mips_bseti_b,                              // llvm.mips.bseti.b
-    mips_bseti_d,                              // llvm.mips.bseti.d
-    mips_bseti_h,                              // llvm.mips.bseti.h
-    mips_bseti_w,                              // llvm.mips.bseti.w
-    mips_bz_b,                                 // llvm.mips.bz.b
-    mips_bz_d,                                 // llvm.mips.bz.d
-    mips_bz_h,                                 // llvm.mips.bz.h
-    mips_bz_v,                                 // llvm.mips.bz.v
-    mips_bz_w,                                 // llvm.mips.bz.w
-    mips_ceq_b,                                // llvm.mips.ceq.b
-    mips_ceq_d,                                // llvm.mips.ceq.d
-    mips_ceq_h,                                // llvm.mips.ceq.h
-    mips_ceq_w,                                // llvm.mips.ceq.w
-    mips_ceqi_b,                               // llvm.mips.ceqi.b
-    mips_ceqi_d,                               // llvm.mips.ceqi.d
-    mips_ceqi_h,                               // llvm.mips.ceqi.h
-    mips_ceqi_w,                               // llvm.mips.ceqi.w
-    mips_cfcmsa,                               // llvm.mips.cfcmsa
-    mips_cle_s_b,                              // llvm.mips.cle.s.b
-    mips_cle_s_d,                              // llvm.mips.cle.s.d
-    mips_cle_s_h,                              // llvm.mips.cle.s.h
-    mips_cle_s_w,                              // llvm.mips.cle.s.w
-    mips_cle_u_b,                              // llvm.mips.cle.u.b
-    mips_cle_u_d,                              // llvm.mips.cle.u.d
-    mips_cle_u_h,                              // llvm.mips.cle.u.h
-    mips_cle_u_w,                              // llvm.mips.cle.u.w
-    mips_clei_s_b,                             // llvm.mips.clei.s.b
-    mips_clei_s_d,                             // llvm.mips.clei.s.d
-    mips_clei_s_h,                             // llvm.mips.clei.s.h
-    mips_clei_s_w,                             // llvm.mips.clei.s.w
-    mips_clei_u_b,                             // llvm.mips.clei.u.b
-    mips_clei_u_d,                             // llvm.mips.clei.u.d
-    mips_clei_u_h,                             // llvm.mips.clei.u.h
-    mips_clei_u_w,                             // llvm.mips.clei.u.w
-    mips_clt_s_b,                              // llvm.mips.clt.s.b
-    mips_clt_s_d,                              // llvm.mips.clt.s.d
-    mips_clt_s_h,                              // llvm.mips.clt.s.h
-    mips_clt_s_w,                              // llvm.mips.clt.s.w
-    mips_clt_u_b,                              // llvm.mips.clt.u.b
-    mips_clt_u_d,                              // llvm.mips.clt.u.d
-    mips_clt_u_h,                              // llvm.mips.clt.u.h
-    mips_clt_u_w,                              // llvm.mips.clt.u.w
-    mips_clti_s_b,                             // llvm.mips.clti.s.b
-    mips_clti_s_d,                             // llvm.mips.clti.s.d
-    mips_clti_s_h,                             // llvm.mips.clti.s.h
-    mips_clti_s_w,                             // llvm.mips.clti.s.w
-    mips_clti_u_b,                             // llvm.mips.clti.u.b
-    mips_clti_u_d,                             // llvm.mips.clti.u.d
-    mips_clti_u_h,                             // llvm.mips.clti.u.h
-    mips_clti_u_w,                             // llvm.mips.clti.u.w
-    mips_cmp_eq_ph,                            // llvm.mips.cmp.eq.ph
-    mips_cmp_le_ph,                            // llvm.mips.cmp.le.ph
-    mips_cmp_lt_ph,                            // llvm.mips.cmp.lt.ph
-    mips_cmpgdu_eq_qb,                         // llvm.mips.cmpgdu.eq.qb
-    mips_cmpgdu_le_qb,                         // llvm.mips.cmpgdu.le.qb
-    mips_cmpgdu_lt_qb,                         // llvm.mips.cmpgdu.lt.qb
-    mips_cmpgu_eq_qb,                          // llvm.mips.cmpgu.eq.qb
-    mips_cmpgu_le_qb,                          // llvm.mips.cmpgu.le.qb
-    mips_cmpgu_lt_qb,                          // llvm.mips.cmpgu.lt.qb
-    mips_cmpu_eq_qb,                           // llvm.mips.cmpu.eq.qb
-    mips_cmpu_le_qb,                           // llvm.mips.cmpu.le.qb
-    mips_cmpu_lt_qb,                           // llvm.mips.cmpu.lt.qb
-    mips_copy_s_b,                             // llvm.mips.copy.s.b
-    mips_copy_s_d,                             // llvm.mips.copy.s.d
-    mips_copy_s_h,                             // llvm.mips.copy.s.h
-    mips_copy_s_w,                             // llvm.mips.copy.s.w
-    mips_copy_u_b,                             // llvm.mips.copy.u.b
-    mips_copy_u_d,                             // llvm.mips.copy.u.d
-    mips_copy_u_h,                             // llvm.mips.copy.u.h
-    mips_copy_u_w,                             // llvm.mips.copy.u.w
-    mips_ctcmsa,                               // llvm.mips.ctcmsa
-    mips_div_s_b,                              // llvm.mips.div.s.b
-    mips_div_s_d,                              // llvm.mips.div.s.d
-    mips_div_s_h,                              // llvm.mips.div.s.h
-    mips_div_s_w,                              // llvm.mips.div.s.w
-    mips_div_u_b,                              // llvm.mips.div.u.b
-    mips_div_u_d,                              // llvm.mips.div.u.d
-    mips_div_u_h,                              // llvm.mips.div.u.h
-    mips_div_u_w,                              // llvm.mips.div.u.w
-    mips_dlsa,                                 // llvm.mips.dlsa
-    mips_dotp_s_d,                             // llvm.mips.dotp.s.d
-    mips_dotp_s_h,                             // llvm.mips.dotp.s.h
-    mips_dotp_s_w,                             // llvm.mips.dotp.s.w
-    mips_dotp_u_d,                             // llvm.mips.dotp.u.d
-    mips_dotp_u_h,                             // llvm.mips.dotp.u.h
-    mips_dotp_u_w,                             // llvm.mips.dotp.u.w
-    mips_dpa_w_ph,                             // llvm.mips.dpa.w.ph
-    mips_dpadd_s_d,                            // llvm.mips.dpadd.s.d
-    mips_dpadd_s_h,                            // llvm.mips.dpadd.s.h
-    mips_dpadd_s_w,                            // llvm.mips.dpadd.s.w
-    mips_dpadd_u_d,                            // llvm.mips.dpadd.u.d
-    mips_dpadd_u_h,                            // llvm.mips.dpadd.u.h
-    mips_dpadd_u_w,                            // llvm.mips.dpadd.u.w
-    mips_dpaq_s_w_ph,                          // llvm.mips.dpaq.s.w.ph
-    mips_dpaq_sa_l_w,                          // llvm.mips.dpaq.sa.l.w
-    mips_dpaqx_s_w_ph,                         // llvm.mips.dpaqx.s.w.ph
-    mips_dpaqx_sa_w_ph,                        // llvm.mips.dpaqx.sa.w.ph
-    mips_dpau_h_qbl,                           // llvm.mips.dpau.h.qbl
-    mips_dpau_h_qbr,                           // llvm.mips.dpau.h.qbr
-    mips_dpax_w_ph,                            // llvm.mips.dpax.w.ph
-    mips_dps_w_ph,                             // llvm.mips.dps.w.ph
-    mips_dpsq_s_w_ph,                          // llvm.mips.dpsq.s.w.ph
-    mips_dpsq_sa_l_w,                          // llvm.mips.dpsq.sa.l.w
-    mips_dpsqx_s_w_ph,                         // llvm.mips.dpsqx.s.w.ph
-    mips_dpsqx_sa_w_ph,                        // llvm.mips.dpsqx.sa.w.ph
-    mips_dpsu_h_qbl,                           // llvm.mips.dpsu.h.qbl
-    mips_dpsu_h_qbr,                           // llvm.mips.dpsu.h.qbr
-    mips_dpsub_s_d,                            // llvm.mips.dpsub.s.d
-    mips_dpsub_s_h,                            // llvm.mips.dpsub.s.h
-    mips_dpsub_s_w,                            // llvm.mips.dpsub.s.w
-    mips_dpsub_u_d,                            // llvm.mips.dpsub.u.d
-    mips_dpsub_u_h,                            // llvm.mips.dpsub.u.h
-    mips_dpsub_u_w,                            // llvm.mips.dpsub.u.w
-    mips_dpsx_w_ph,                            // llvm.mips.dpsx.w.ph
-    mips_extp,                                 // llvm.mips.extp
-    mips_extpdp,                               // llvm.mips.extpdp
-    mips_extr_r_w,                             // llvm.mips.extr.r.w
-    mips_extr_rs_w,                            // llvm.mips.extr.rs.w
-    mips_extr_s_h,                             // llvm.mips.extr.s.h
-    mips_extr_w,                               // llvm.mips.extr.w
-    mips_fadd_d,                               // llvm.mips.fadd.d
-    mips_fadd_w,                               // llvm.mips.fadd.w
-    mips_fcaf_d,                               // llvm.mips.fcaf.d
-    mips_fcaf_w,                               // llvm.mips.fcaf.w
-    mips_fceq_d,                               // llvm.mips.fceq.d
-    mips_fceq_w,                               // llvm.mips.fceq.w
-    mips_fclass_d,                             // llvm.mips.fclass.d
-    mips_fclass_w,                             // llvm.mips.fclass.w
-    mips_fcle_d,                               // llvm.mips.fcle.d
-    mips_fcle_w,                               // llvm.mips.fcle.w
-    mips_fclt_d,                               // llvm.mips.fclt.d
-    mips_fclt_w,                               // llvm.mips.fclt.w
-    mips_fcne_d,                               // llvm.mips.fcne.d
-    mips_fcne_w,                               // llvm.mips.fcne.w
-    mips_fcor_d,                               // llvm.mips.fcor.d
-    mips_fcor_w,                               // llvm.mips.fcor.w
-    mips_fcueq_d,                              // llvm.mips.fcueq.d
-    mips_fcueq_w,                              // llvm.mips.fcueq.w
-    mips_fcule_d,                              // llvm.mips.fcule.d
-    mips_fcule_w,                              // llvm.mips.fcule.w
-    mips_fcult_d,                              // llvm.mips.fcult.d
-    mips_fcult_w,                              // llvm.mips.fcult.w
-    mips_fcun_d,                               // llvm.mips.fcun.d
-    mips_fcun_w,                               // llvm.mips.fcun.w
-    mips_fcune_d,                              // llvm.mips.fcune.d
-    mips_fcune_w,                              // llvm.mips.fcune.w
-    mips_fdiv_d,                               // llvm.mips.fdiv.d
-    mips_fdiv_w,                               // llvm.mips.fdiv.w
-    mips_fexdo_h,                              // llvm.mips.fexdo.h
-    mips_fexdo_w,                              // llvm.mips.fexdo.w
-    mips_fexp2_d,                              // llvm.mips.fexp2.d
-    mips_fexp2_w,                              // llvm.mips.fexp2.w
-    mips_fexupl_d,                             // llvm.mips.fexupl.d
-    mips_fexupl_w,                             // llvm.mips.fexupl.w
-    mips_fexupr_d,                             // llvm.mips.fexupr.d
-    mips_fexupr_w,                             // llvm.mips.fexupr.w
-    mips_ffint_s_d,                            // llvm.mips.ffint.s.d
-    mips_ffint_s_w,                            // llvm.mips.ffint.s.w
-    mips_ffint_u_d,                            // llvm.mips.ffint.u.d
-    mips_ffint_u_w,                            // llvm.mips.ffint.u.w
-    mips_ffql_d,                               // llvm.mips.ffql.d
-    mips_ffql_w,                               // llvm.mips.ffql.w
-    mips_ffqr_d,                               // llvm.mips.ffqr.d
-    mips_ffqr_w,                               // llvm.mips.ffqr.w
-    mips_fill_b,                               // llvm.mips.fill.b
-    mips_fill_d,                               // llvm.mips.fill.d
-    mips_fill_h,                               // llvm.mips.fill.h
-    mips_fill_w,                               // llvm.mips.fill.w
-    mips_flog2_d,                              // llvm.mips.flog2.d
-    mips_flog2_w,                              // llvm.mips.flog2.w
-    mips_fmadd_d,                              // llvm.mips.fmadd.d
-    mips_fmadd_w,                              // llvm.mips.fmadd.w
-    mips_fmax_a_d,                             // llvm.mips.fmax.a.d
-    mips_fmax_a_w,                             // llvm.mips.fmax.a.w
-    mips_fmax_d,                               // llvm.mips.fmax.d
-    mips_fmax_w,                               // llvm.mips.fmax.w
-    mips_fmin_a_d,                             // llvm.mips.fmin.a.d
-    mips_fmin_a_w,                             // llvm.mips.fmin.a.w
-    mips_fmin_d,                               // llvm.mips.fmin.d
-    mips_fmin_w,                               // llvm.mips.fmin.w
-    mips_fmsub_d,                              // llvm.mips.fmsub.d
-    mips_fmsub_w,                              // llvm.mips.fmsub.w
-    mips_fmul_d,                               // llvm.mips.fmul.d
-    mips_fmul_w,                               // llvm.mips.fmul.w
-    mips_frcp_d,                               // llvm.mips.frcp.d
-    mips_frcp_w,                               // llvm.mips.frcp.w
-    mips_frint_d,                              // llvm.mips.frint.d
-    mips_frint_w,                              // llvm.mips.frint.w
-    mips_frsqrt_d,                             // llvm.mips.frsqrt.d
-    mips_frsqrt_w,                             // llvm.mips.frsqrt.w
-    mips_fsaf_d,                               // llvm.mips.fsaf.d
-    mips_fsaf_w,                               // llvm.mips.fsaf.w
-    mips_fseq_d,                               // llvm.mips.fseq.d
-    mips_fseq_w,                               // llvm.mips.fseq.w
-    mips_fsle_d,                               // llvm.mips.fsle.d
-    mips_fsle_w,                               // llvm.mips.fsle.w
-    mips_fslt_d,                               // llvm.mips.fslt.d
-    mips_fslt_w,                               // llvm.mips.fslt.w
-    mips_fsne_d,                               // llvm.mips.fsne.d
-    mips_fsne_w,                               // llvm.mips.fsne.w
-    mips_fsor_d,                               // llvm.mips.fsor.d
-    mips_fsor_w,                               // llvm.mips.fsor.w
-    mips_fsqrt_d,                              // llvm.mips.fsqrt.d
-    mips_fsqrt_w,                              // llvm.mips.fsqrt.w
-    mips_fsub_d,                               // llvm.mips.fsub.d
-    mips_fsub_w,                               // llvm.mips.fsub.w
-    mips_fsueq_d,                              // llvm.mips.fsueq.d
-    mips_fsueq_w,                              // llvm.mips.fsueq.w
-    mips_fsule_d,                              // llvm.mips.fsule.d
-    mips_fsule_w,                              // llvm.mips.fsule.w
-    mips_fsult_d,                              // llvm.mips.fsult.d
-    mips_fsult_w,                              // llvm.mips.fsult.w
-    mips_fsun_d,                               // llvm.mips.fsun.d
-    mips_fsun_w,                               // llvm.mips.fsun.w
-    mips_fsune_d,                              // llvm.mips.fsune.d
-    mips_fsune_w,                              // llvm.mips.fsune.w
-    mips_ftint_s_d,                            // llvm.mips.ftint.s.d
-    mips_ftint_s_w,                            // llvm.mips.ftint.s.w
-    mips_ftint_u_d,                            // llvm.mips.ftint.u.d
-    mips_ftint_u_w,                            // llvm.mips.ftint.u.w
-    mips_ftq_h,                                // llvm.mips.ftq.h
-    mips_ftq_w,                                // llvm.mips.ftq.w
-    mips_ftrunc_s_d,                           // llvm.mips.ftrunc.s.d
-    mips_ftrunc_s_w,                           // llvm.mips.ftrunc.s.w
-    mips_ftrunc_u_d,                           // llvm.mips.ftrunc.u.d
-    mips_ftrunc_u_w,                           // llvm.mips.ftrunc.u.w
-    mips_hadd_s_d,                             // llvm.mips.hadd.s.d
-    mips_hadd_s_h,                             // llvm.mips.hadd.s.h
-    mips_hadd_s_w,                             // llvm.mips.hadd.s.w
-    mips_hadd_u_d,                             // llvm.mips.hadd.u.d
-    mips_hadd_u_h,                             // llvm.mips.hadd.u.h
-    mips_hadd_u_w,                             // llvm.mips.hadd.u.w
-    mips_hsub_s_d,                             // llvm.mips.hsub.s.d
-    mips_hsub_s_h,                             // llvm.mips.hsub.s.h
-    mips_hsub_s_w,                             // llvm.mips.hsub.s.w
-    mips_hsub_u_d,                             // llvm.mips.hsub.u.d
-    mips_hsub_u_h,                             // llvm.mips.hsub.u.h
-    mips_hsub_u_w,                             // llvm.mips.hsub.u.w
-    mips_ilvev_b,                              // llvm.mips.ilvev.b
-    mips_ilvev_d,                              // llvm.mips.ilvev.d
-    mips_ilvev_h,                              // llvm.mips.ilvev.h
-    mips_ilvev_w,                              // llvm.mips.ilvev.w
-    mips_ilvl_b,                               // llvm.mips.ilvl.b
-    mips_ilvl_d,                               // llvm.mips.ilvl.d
-    mips_ilvl_h,                               // llvm.mips.ilvl.h
-    mips_ilvl_w,                               // llvm.mips.ilvl.w
-    mips_ilvod_b,                              // llvm.mips.ilvod.b
-    mips_ilvod_d,                              // llvm.mips.ilvod.d
-    mips_ilvod_h,                              // llvm.mips.ilvod.h
-    mips_ilvod_w,                              // llvm.mips.ilvod.w
-    mips_ilvr_b,                               // llvm.mips.ilvr.b
-    mips_ilvr_d,                               // llvm.mips.ilvr.d
-    mips_ilvr_h,                               // llvm.mips.ilvr.h
-    mips_ilvr_w,                               // llvm.mips.ilvr.w
-    mips_insert_b,                             // llvm.mips.insert.b
-    mips_insert_d,                             // llvm.mips.insert.d
-    mips_insert_h,                             // llvm.mips.insert.h
-    mips_insert_w,                             // llvm.mips.insert.w
-    mips_insv,                                 // llvm.mips.insv
-    mips_insve_b,                              // llvm.mips.insve.b
-    mips_insve_d,                              // llvm.mips.insve.d
-    mips_insve_h,                              // llvm.mips.insve.h
-    mips_insve_w,                              // llvm.mips.insve.w
-    mips_lbux,                                 // llvm.mips.lbux
-    mips_ld_b,                                 // llvm.mips.ld.b
-    mips_ld_d,                                 // llvm.mips.ld.d
-    mips_ld_h,                                 // llvm.mips.ld.h
-    mips_ld_w,                                 // llvm.mips.ld.w
-    mips_ldi_b,                                // llvm.mips.ldi.b
-    mips_ldi_d,                                // llvm.mips.ldi.d
-    mips_ldi_h,                                // llvm.mips.ldi.h
-    mips_ldi_w,                                // llvm.mips.ldi.w
-    mips_lhx,                                  // llvm.mips.lhx
-    mips_lsa,                                  // llvm.mips.lsa
-    mips_lwx,                                  // llvm.mips.lwx
-    mips_madd,                                 // llvm.mips.madd
-    mips_madd_q_h,                             // llvm.mips.madd.q.h
-    mips_madd_q_w,                             // llvm.mips.madd.q.w
-    mips_maddr_q_h,                            // llvm.mips.maddr.q.h
-    mips_maddr_q_w,                            // llvm.mips.maddr.q.w
-    mips_maddu,                                // llvm.mips.maddu
-    mips_maddv_b,                              // llvm.mips.maddv.b
-    mips_maddv_d,                              // llvm.mips.maddv.d
-    mips_maddv_h,                              // llvm.mips.maddv.h
-    mips_maddv_w,                              // llvm.mips.maddv.w
-    mips_maq_s_w_phl,                          // llvm.mips.maq.s.w.phl
-    mips_maq_s_w_phr,                          // llvm.mips.maq.s.w.phr
-    mips_maq_sa_w_phl,                         // llvm.mips.maq.sa.w.phl
-    mips_maq_sa_w_phr,                         // llvm.mips.maq.sa.w.phr
-    mips_max_a_b,                              // llvm.mips.max.a.b
-    mips_max_a_d,                              // llvm.mips.max.a.d
-    mips_max_a_h,                              // llvm.mips.max.a.h
-    mips_max_a_w,                              // llvm.mips.max.a.w
-    mips_max_s_b,                              // llvm.mips.max.s.b
-    mips_max_s_d,                              // llvm.mips.max.s.d
-    mips_max_s_h,                              // llvm.mips.max.s.h
-    mips_max_s_w,                              // llvm.mips.max.s.w
-    mips_max_u_b,                              // llvm.mips.max.u.b
-    mips_max_u_d,                              // llvm.mips.max.u.d
-    mips_max_u_h,                              // llvm.mips.max.u.h
-    mips_max_u_w,                              // llvm.mips.max.u.w
-    mips_maxi_s_b,                             // llvm.mips.maxi.s.b
-    mips_maxi_s_d,                             // llvm.mips.maxi.s.d
-    mips_maxi_s_h,                             // llvm.mips.maxi.s.h
-    mips_maxi_s_w,                             // llvm.mips.maxi.s.w
-    mips_maxi_u_b,                             // llvm.mips.maxi.u.b
-    mips_maxi_u_d,                             // llvm.mips.maxi.u.d
-    mips_maxi_u_h,                             // llvm.mips.maxi.u.h
-    mips_maxi_u_w,                             // llvm.mips.maxi.u.w
-    mips_min_a_b,                              // llvm.mips.min.a.b
-    mips_min_a_d,                              // llvm.mips.min.a.d
-    mips_min_a_h,                              // llvm.mips.min.a.h
-    mips_min_a_w,                              // llvm.mips.min.a.w
-    mips_min_s_b,                              // llvm.mips.min.s.b
-    mips_min_s_d,                              // llvm.mips.min.s.d
-    mips_min_s_h,                              // llvm.mips.min.s.h
-    mips_min_s_w,                              // llvm.mips.min.s.w
-    mips_min_u_b,                              // llvm.mips.min.u.b
-    mips_min_u_d,                              // llvm.mips.min.u.d
-    mips_min_u_h,                              // llvm.mips.min.u.h
-    mips_min_u_w,                              // llvm.mips.min.u.w
-    mips_mini_s_b,                             // llvm.mips.mini.s.b
-    mips_mini_s_d,                             // llvm.mips.mini.s.d
-    mips_mini_s_h,                             // llvm.mips.mini.s.h
-    mips_mini_s_w,                             // llvm.mips.mini.s.w
-    mips_mini_u_b,                             // llvm.mips.mini.u.b
-    mips_mini_u_d,                             // llvm.mips.mini.u.d
-    mips_mini_u_h,                             // llvm.mips.mini.u.h
-    mips_mini_u_w,                             // llvm.mips.mini.u.w
-    mips_mod_s_b,                              // llvm.mips.mod.s.b
-    mips_mod_s_d,                              // llvm.mips.mod.s.d
-    mips_mod_s_h,                              // llvm.mips.mod.s.h
-    mips_mod_s_w,                              // llvm.mips.mod.s.w
-    mips_mod_u_b,                              // llvm.mips.mod.u.b
-    mips_mod_u_d,                              // llvm.mips.mod.u.d
-    mips_mod_u_h,                              // llvm.mips.mod.u.h
-    mips_mod_u_w,                              // llvm.mips.mod.u.w
-    mips_modsub,                               // llvm.mips.modsub
-    mips_move_v,                               // llvm.mips.move.v
-    mips_msub,                                 // llvm.mips.msub
-    mips_msub_q_h,                             // llvm.mips.msub.q.h
-    mips_msub_q_w,                             // llvm.mips.msub.q.w
-    mips_msubr_q_h,                            // llvm.mips.msubr.q.h
-    mips_msubr_q_w,                            // llvm.mips.msubr.q.w
-    mips_msubu,                                // llvm.mips.msubu
-    mips_msubv_b,                              // llvm.mips.msubv.b
-    mips_msubv_d,                              // llvm.mips.msubv.d
-    mips_msubv_h,                              // llvm.mips.msubv.h
-    mips_msubv_w,                              // llvm.mips.msubv.w
-    mips_mthlip,                               // llvm.mips.mthlip
-    mips_mul_ph,                               // llvm.mips.mul.ph
-    mips_mul_q_h,                              // llvm.mips.mul.q.h
-    mips_mul_q_w,                              // llvm.mips.mul.q.w
-    mips_mul_s_ph,                             // llvm.mips.mul.s.ph
-    mips_muleq_s_w_phl,                        // llvm.mips.muleq.s.w.phl
-    mips_muleq_s_w_phr,                        // llvm.mips.muleq.s.w.phr
-    mips_muleu_s_ph_qbl,                       // llvm.mips.muleu.s.ph.qbl
-    mips_muleu_s_ph_qbr,                       // llvm.mips.muleu.s.ph.qbr
-    mips_mulq_rs_ph,                           // llvm.mips.mulq.rs.ph
-    mips_mulq_rs_w,                            // llvm.mips.mulq.rs.w
-    mips_mulq_s_ph,                            // llvm.mips.mulq.s.ph
-    mips_mulq_s_w,                             // llvm.mips.mulq.s.w
-    mips_mulr_q_h,                             // llvm.mips.mulr.q.h
-    mips_mulr_q_w,                             // llvm.mips.mulr.q.w
-    mips_mulsa_w_ph,                           // llvm.mips.mulsa.w.ph
-    mips_mulsaq_s_w_ph,                        // llvm.mips.mulsaq.s.w.ph
-    mips_mult,                                 // llvm.mips.mult
-    mips_multu,                                // llvm.mips.multu
-    mips_mulv_b,                               // llvm.mips.mulv.b
-    mips_mulv_d,                               // llvm.mips.mulv.d
-    mips_mulv_h,                               // llvm.mips.mulv.h
-    mips_mulv_w,                               // llvm.mips.mulv.w
-    mips_nloc_b,                               // llvm.mips.nloc.b
-    mips_nloc_d,                               // llvm.mips.nloc.d
-    mips_nloc_h,                               // llvm.mips.nloc.h
-    mips_nloc_w,                               // llvm.mips.nloc.w
-    mips_nlzc_b,                               // llvm.mips.nlzc.b
-    mips_nlzc_d,                               // llvm.mips.nlzc.d
-    mips_nlzc_h,                               // llvm.mips.nlzc.h
-    mips_nlzc_w,                               // llvm.mips.nlzc.w
-    mips_nor_v,                                // llvm.mips.nor.v
-    mips_nori_b,                               // llvm.mips.nori.b
-    mips_or_v,                                 // llvm.mips.or.v
-    mips_ori_b,                                // llvm.mips.ori.b
-    mips_packrl_ph,                            // llvm.mips.packrl.ph
-    mips_pckev_b,                              // llvm.mips.pckev.b
-    mips_pckev_d,                              // llvm.mips.pckev.d
-    mips_pckev_h,                              // llvm.mips.pckev.h
-    mips_pckev_w,                              // llvm.mips.pckev.w
-    mips_pckod_b,                              // llvm.mips.pckod.b
-    mips_pckod_d,                              // llvm.mips.pckod.d
-    mips_pckod_h,                              // llvm.mips.pckod.h
-    mips_pckod_w,                              // llvm.mips.pckod.w
-    mips_pcnt_b,                               // llvm.mips.pcnt.b
-    mips_pcnt_d,                               // llvm.mips.pcnt.d
-    mips_pcnt_h,                               // llvm.mips.pcnt.h
-    mips_pcnt_w,                               // llvm.mips.pcnt.w
-    mips_pick_ph,                              // llvm.mips.pick.ph
-    mips_pick_qb,                              // llvm.mips.pick.qb
-    mips_preceq_w_phl,                         // llvm.mips.preceq.w.phl
-    mips_preceq_w_phr,                         // llvm.mips.preceq.w.phr
-    mips_precequ_ph_qbl,                       // llvm.mips.precequ.ph.qbl
-    mips_precequ_ph_qbla,                      // llvm.mips.precequ.ph.qbla
-    mips_precequ_ph_qbr,                       // llvm.mips.precequ.ph.qbr
-    mips_precequ_ph_qbra,                      // llvm.mips.precequ.ph.qbra
-    mips_preceu_ph_qbl,                        // llvm.mips.preceu.ph.qbl
-    mips_preceu_ph_qbla,                       // llvm.mips.preceu.ph.qbla
-    mips_preceu_ph_qbr,                        // llvm.mips.preceu.ph.qbr
-    mips_preceu_ph_qbra,                       // llvm.mips.preceu.ph.qbra
-    mips_precr_qb_ph,                          // llvm.mips.precr.qb.ph
-    mips_precr_sra_ph_w,                       // llvm.mips.precr.sra.ph.w
-    mips_precr_sra_r_ph_w,                     // llvm.mips.precr.sra.r.ph.w
-    mips_precrq_ph_w,                          // llvm.mips.precrq.ph.w
-    mips_precrq_qb_ph,                         // llvm.mips.precrq.qb.ph
-    mips_precrq_rs_ph_w,                       // llvm.mips.precrq.rs.ph.w
-    mips_precrqu_s_qb_ph,                      // llvm.mips.precrqu.s.qb.ph
-    mips_prepend,                              // llvm.mips.prepend
-    mips_raddu_w_qb,                           // llvm.mips.raddu.w.qb
-    mips_rddsp,                                // llvm.mips.rddsp
-    mips_repl_ph,                              // llvm.mips.repl.ph
-    mips_repl_qb,                              // llvm.mips.repl.qb
-    mips_sat_s_b,                              // llvm.mips.sat.s.b
-    mips_sat_s_d,                              // llvm.mips.sat.s.d
-    mips_sat_s_h,                              // llvm.mips.sat.s.h
-    mips_sat_s_w,                              // llvm.mips.sat.s.w
-    mips_sat_u_b,                              // llvm.mips.sat.u.b
-    mips_sat_u_d,                              // llvm.mips.sat.u.d
-    mips_sat_u_h,                              // llvm.mips.sat.u.h
-    mips_sat_u_w,                              // llvm.mips.sat.u.w
-    mips_shf_b,                                // llvm.mips.shf.b
-    mips_shf_h,                                // llvm.mips.shf.h
-    mips_shf_w,                                // llvm.mips.shf.w
-    mips_shilo,                                // llvm.mips.shilo
-    mips_shll_ph,                              // llvm.mips.shll.ph
-    mips_shll_qb,                              // llvm.mips.shll.qb
-    mips_shll_s_ph,                            // llvm.mips.shll.s.ph
-    mips_shll_s_w,                             // llvm.mips.shll.s.w
-    mips_shra_ph,                              // llvm.mips.shra.ph
-    mips_shra_qb,                              // llvm.mips.shra.qb
-    mips_shra_r_ph,                            // llvm.mips.shra.r.ph
-    mips_shra_r_qb,                            // llvm.mips.shra.r.qb
-    mips_shra_r_w,                             // llvm.mips.shra.r.w
-    mips_shrl_ph,                              // llvm.mips.shrl.ph
-    mips_shrl_qb,                              // llvm.mips.shrl.qb
-    mips_sld_b,                                // llvm.mips.sld.b
-    mips_sld_d,                                // llvm.mips.sld.d
-    mips_sld_h,                                // llvm.mips.sld.h
-    mips_sld_w,                                // llvm.mips.sld.w
-    mips_sldi_b,                               // llvm.mips.sldi.b
-    mips_sldi_d,                               // llvm.mips.sldi.d
-    mips_sldi_h,                               // llvm.mips.sldi.h
-    mips_sldi_w,                               // llvm.mips.sldi.w
-    mips_sll_b,                                // llvm.mips.sll.b
-    mips_sll_d,                                // llvm.mips.sll.d
-    mips_sll_h,                                // llvm.mips.sll.h
-    mips_sll_w,                                // llvm.mips.sll.w
-    mips_slli_b,                               // llvm.mips.slli.b
-    mips_slli_d,                               // llvm.mips.slli.d
-    mips_slli_h,                               // llvm.mips.slli.h
-    mips_slli_w,                               // llvm.mips.slli.w
-    mips_splat_b,                              // llvm.mips.splat.b
-    mips_splat_d,                              // llvm.mips.splat.d
-    mips_splat_h,                              // llvm.mips.splat.h
-    mips_splat_w,                              // llvm.mips.splat.w
-    mips_splati_b,                             // llvm.mips.splati.b
-    mips_splati_d,                             // llvm.mips.splati.d
-    mips_splati_h,                             // llvm.mips.splati.h
-    mips_splati_w,                             // llvm.mips.splati.w
-    mips_sra_b,                                // llvm.mips.sra.b
-    mips_sra_d,                                // llvm.mips.sra.d
-    mips_sra_h,                                // llvm.mips.sra.h
-    mips_sra_w,                                // llvm.mips.sra.w
-    mips_srai_b,                               // llvm.mips.srai.b
-    mips_srai_d,                               // llvm.mips.srai.d
-    mips_srai_h,                               // llvm.mips.srai.h
-    mips_srai_w,                               // llvm.mips.srai.w
-    mips_srar_b,                               // llvm.mips.srar.b
-    mips_srar_d,                               // llvm.mips.srar.d
-    mips_srar_h,                               // llvm.mips.srar.h
-    mips_srar_w,                               // llvm.mips.srar.w
-    mips_srari_b,                              // llvm.mips.srari.b
-    mips_srari_d,                              // llvm.mips.srari.d
-    mips_srari_h,                              // llvm.mips.srari.h
-    mips_srari_w,                              // llvm.mips.srari.w
-    mips_srl_b,                                // llvm.mips.srl.b
-    mips_srl_d,                                // llvm.mips.srl.d
-    mips_srl_h,                                // llvm.mips.srl.h
-    mips_srl_w,                                // llvm.mips.srl.w
-    mips_srli_b,                               // llvm.mips.srli.b
-    mips_srli_d,                               // llvm.mips.srli.d
-    mips_srli_h,                               // llvm.mips.srli.h
-    mips_srli_w,                               // llvm.mips.srli.w
-    mips_srlr_b,                               // llvm.mips.srlr.b
-    mips_srlr_d,                               // llvm.mips.srlr.d
-    mips_srlr_h,                               // llvm.mips.srlr.h
-    mips_srlr_w,                               // llvm.mips.srlr.w
-    mips_srlri_b,                              // llvm.mips.srlri.b
-    mips_srlri_d,                              // llvm.mips.srlri.d
-    mips_srlri_h,                              // llvm.mips.srlri.h
-    mips_srlri_w,                              // llvm.mips.srlri.w
-    mips_st_b,                                 // llvm.mips.st.b
-    mips_st_d,                                 // llvm.mips.st.d
-    mips_st_h,                                 // llvm.mips.st.h
-    mips_st_w,                                 // llvm.mips.st.w
-    mips_subq_ph,                              // llvm.mips.subq.ph
-    mips_subq_s_ph,                            // llvm.mips.subq.s.ph
-    mips_subq_s_w,                             // llvm.mips.subq.s.w
-    mips_subqh_ph,                             // llvm.mips.subqh.ph
-    mips_subqh_r_ph,                           // llvm.mips.subqh.r.ph
-    mips_subqh_r_w,                            // llvm.mips.subqh.r.w
-    mips_subqh_w,                              // llvm.mips.subqh.w
-    mips_subs_s_b,                             // llvm.mips.subs.s.b
-    mips_subs_s_d,                             // llvm.mips.subs.s.d
-    mips_subs_s_h,                             // llvm.mips.subs.s.h
-    mips_subs_s_w,                             // llvm.mips.subs.s.w
-    mips_subs_u_b,                             // llvm.mips.subs.u.b
-    mips_subs_u_d,                             // llvm.mips.subs.u.d
-    mips_subs_u_h,                             // llvm.mips.subs.u.h
-    mips_subs_u_w,                             // llvm.mips.subs.u.w
-    mips_subsus_u_b,                           // llvm.mips.subsus.u.b
-    mips_subsus_u_d,                           // llvm.mips.subsus.u.d
-    mips_subsus_u_h,                           // llvm.mips.subsus.u.h
-    mips_subsus_u_w,                           // llvm.mips.subsus.u.w
-    mips_subsuu_s_b,                           // llvm.mips.subsuu.s.b
-    mips_subsuu_s_d,                           // llvm.mips.subsuu.s.d
-    mips_subsuu_s_h,                           // llvm.mips.subsuu.s.h
-    mips_subsuu_s_w,                           // llvm.mips.subsuu.s.w
-    mips_subu_ph,                              // llvm.mips.subu.ph
-    mips_subu_qb,                              // llvm.mips.subu.qb
-    mips_subu_s_ph,                            // llvm.mips.subu.s.ph
-    mips_subu_s_qb,                            // llvm.mips.subu.s.qb
-    mips_subuh_qb,                             // llvm.mips.subuh.qb
-    mips_subuh_r_qb,                           // llvm.mips.subuh.r.qb
-    mips_subv_b,                               // llvm.mips.subv.b
-    mips_subv_d,                               // llvm.mips.subv.d
-    mips_subv_h,                               // llvm.mips.subv.h
-    mips_subv_w,                               // llvm.mips.subv.w
-    mips_subvi_b,                              // llvm.mips.subvi.b
-    mips_subvi_d,                              // llvm.mips.subvi.d
-    mips_subvi_h,                              // llvm.mips.subvi.h
-    mips_subvi_w,                              // llvm.mips.subvi.w
-    mips_vshf_b,                               // llvm.mips.vshf.b
-    mips_vshf_d,                               // llvm.mips.vshf.d
-    mips_vshf_h,                               // llvm.mips.vshf.h
-    mips_vshf_w,                               // llvm.mips.vshf.w
-    mips_wrdsp,                                // llvm.mips.wrdsp
-    mips_xor_v,                                // llvm.mips.xor.v
-    mips_xori_b,                               // llvm.mips.xori.b
-    nvvm_add_rm_d,                             // llvm.nvvm.add.rm.d
-    nvvm_add_rm_f,                             // llvm.nvvm.add.rm.f
-    nvvm_add_rm_ftz_f,                         // llvm.nvvm.add.rm.ftz.f
-    nvvm_add_rn_d,                             // llvm.nvvm.add.rn.d
-    nvvm_add_rn_f,                             // llvm.nvvm.add.rn.f
-    nvvm_add_rn_ftz_f,                         // llvm.nvvm.add.rn.ftz.f
-    nvvm_add_rp_d,                             // llvm.nvvm.add.rp.d
-    nvvm_add_rp_f,                             // llvm.nvvm.add.rp.f
-    nvvm_add_rp_ftz_f,                         // llvm.nvvm.add.rp.ftz.f
-    nvvm_add_rz_d,                             // llvm.nvvm.add.rz.d
-    nvvm_add_rz_f,                             // llvm.nvvm.add.rz.f
-    nvvm_add_rz_ftz_f,                         // llvm.nvvm.add.rz.ftz.f
-    nvvm_atomic_add_gen_f_cta,                 // llvm.nvvm.atomic.add.gen.f.cta
-    nvvm_atomic_add_gen_f_sys,                 // llvm.nvvm.atomic.add.gen.f.sys
-    nvvm_atomic_add_gen_i_cta,                 // llvm.nvvm.atomic.add.gen.i.cta
-    nvvm_atomic_add_gen_i_sys,                 // llvm.nvvm.atomic.add.gen.i.sys
-    nvvm_atomic_and_gen_i_cta,                 // llvm.nvvm.atomic.and.gen.i.cta
-    nvvm_atomic_and_gen_i_sys,                 // llvm.nvvm.atomic.and.gen.i.sys
-    nvvm_atomic_cas_gen_i_cta,                 // llvm.nvvm.atomic.cas.gen.i.cta
-    nvvm_atomic_cas_gen_i_sys,                 // llvm.nvvm.atomic.cas.gen.i.sys
-    nvvm_atomic_dec_gen_i_cta,                 // llvm.nvvm.atomic.dec.gen.i.cta
-    nvvm_atomic_dec_gen_i_sys,                 // llvm.nvvm.atomic.dec.gen.i.sys
-    nvvm_atomic_exch_gen_i_cta,                // llvm.nvvm.atomic.exch.gen.i.cta
-    nvvm_atomic_exch_gen_i_sys,                // llvm.nvvm.atomic.exch.gen.i.sys
-    nvvm_atomic_inc_gen_i_cta,                 // llvm.nvvm.atomic.inc.gen.i.cta
-    nvvm_atomic_inc_gen_i_sys,                 // llvm.nvvm.atomic.inc.gen.i.sys
-    nvvm_atomic_load_add_f32,                  // llvm.nvvm.atomic.load.add.f32
-    nvvm_atomic_load_add_f64,                  // llvm.nvvm.atomic.load.add.f64
-    nvvm_atomic_load_dec_32,                   // llvm.nvvm.atomic.load.dec.32
-    nvvm_atomic_load_inc_32,                   // llvm.nvvm.atomic.load.inc.32
-    nvvm_atomic_max_gen_i_cta,                 // llvm.nvvm.atomic.max.gen.i.cta
-    nvvm_atomic_max_gen_i_sys,                 // llvm.nvvm.atomic.max.gen.i.sys
-    nvvm_atomic_min_gen_i_cta,                 // llvm.nvvm.atomic.min.gen.i.cta
-    nvvm_atomic_min_gen_i_sys,                 // llvm.nvvm.atomic.min.gen.i.sys
-    nvvm_atomic_or_gen_i_cta,                  // llvm.nvvm.atomic.or.gen.i.cta
-    nvvm_atomic_or_gen_i_sys,                  // llvm.nvvm.atomic.or.gen.i.sys
-    nvvm_atomic_xor_gen_i_cta,                 // llvm.nvvm.atomic.xor.gen.i.cta
-    nvvm_atomic_xor_gen_i_sys,                 // llvm.nvvm.atomic.xor.gen.i.sys
-    nvvm_bar_sync,                             // llvm.nvvm.bar.sync
-    nvvm_bar_warp_sync,                        // llvm.nvvm.bar.warp.sync
-    nvvm_barrier,                              // llvm.nvvm.barrier
-    nvvm_barrier_n,                            // llvm.nvvm.barrier.n
-    nvvm_barrier_sync,                         // llvm.nvvm.barrier.sync
-    nvvm_barrier_sync_cnt,                     // llvm.nvvm.barrier.sync.cnt
-    nvvm_barrier0,                             // llvm.nvvm.barrier0
-    nvvm_barrier0_and,                         // llvm.nvvm.barrier0.and
-    nvvm_barrier0_or,                          // llvm.nvvm.barrier0.or
-    nvvm_barrier0_popc,                        // llvm.nvvm.barrier0.popc
-    nvvm_bitcast_d2ll,                         // llvm.nvvm.bitcast.d2ll
-    nvvm_bitcast_f2i,                          // llvm.nvvm.bitcast.f2i
-    nvvm_bitcast_i2f,                          // llvm.nvvm.bitcast.i2f
-    nvvm_bitcast_ll2d,                         // llvm.nvvm.bitcast.ll2d
-    nvvm_ceil_d,                               // llvm.nvvm.ceil.d
-    nvvm_ceil_f,                               // llvm.nvvm.ceil.f
-    nvvm_ceil_ftz_f,                           // llvm.nvvm.ceil.ftz.f
-    nvvm_compiler_error,                       // llvm.nvvm.compiler.error
-    nvvm_compiler_warn,                        // llvm.nvvm.compiler.warn
-    nvvm_cos_approx_f,                         // llvm.nvvm.cos.approx.f
-    nvvm_cos_approx_ftz_f,                     // llvm.nvvm.cos.approx.ftz.f
-    nvvm_d2f_rm,                               // llvm.nvvm.d2f.rm
-    nvvm_d2f_rm_ftz,                           // llvm.nvvm.d2f.rm.ftz
-    nvvm_d2f_rn,                               // llvm.nvvm.d2f.rn
-    nvvm_d2f_rn_ftz,                           // llvm.nvvm.d2f.rn.ftz
-    nvvm_d2f_rp,                               // llvm.nvvm.d2f.rp
-    nvvm_d2f_rp_ftz,                           // llvm.nvvm.d2f.rp.ftz
-    nvvm_d2f_rz,                               // llvm.nvvm.d2f.rz
-    nvvm_d2f_rz_ftz,                           // llvm.nvvm.d2f.rz.ftz
-    nvvm_d2i_hi,                               // llvm.nvvm.d2i.hi
-    nvvm_d2i_lo,                               // llvm.nvvm.d2i.lo
-    nvvm_d2i_rm,                               // llvm.nvvm.d2i.rm
-    nvvm_d2i_rn,                               // llvm.nvvm.d2i.rn
-    nvvm_d2i_rp,                               // llvm.nvvm.d2i.rp
-    nvvm_d2i_rz,                               // llvm.nvvm.d2i.rz
-    nvvm_d2ll_rm,                              // llvm.nvvm.d2ll.rm
-    nvvm_d2ll_rn,                              // llvm.nvvm.d2ll.rn
-    nvvm_d2ll_rp,                              // llvm.nvvm.d2ll.rp
-    nvvm_d2ll_rz,                              // llvm.nvvm.d2ll.rz
-    nvvm_d2ui_rm,                              // llvm.nvvm.d2ui.rm
-    nvvm_d2ui_rn,                              // llvm.nvvm.d2ui.rn
-    nvvm_d2ui_rp,                              // llvm.nvvm.d2ui.rp
-    nvvm_d2ui_rz,                              // llvm.nvvm.d2ui.rz
-    nvvm_d2ull_rm,                             // llvm.nvvm.d2ull.rm
-    nvvm_d2ull_rn,                             // llvm.nvvm.d2ull.rn
-    nvvm_d2ull_rp,                             // llvm.nvvm.d2ull.rp
-    nvvm_d2ull_rz,                             // llvm.nvvm.d2ull.rz
-    nvvm_div_approx_f,                         // llvm.nvvm.div.approx.f
-    nvvm_div_approx_ftz_f,                     // llvm.nvvm.div.approx.ftz.f
-    nvvm_div_rm_d,                             // llvm.nvvm.div.rm.d
-    nvvm_div_rm_f,                             // llvm.nvvm.div.rm.f
-    nvvm_div_rm_ftz_f,                         // llvm.nvvm.div.rm.ftz.f
-    nvvm_div_rn_d,                             // llvm.nvvm.div.rn.d
-    nvvm_div_rn_f,                             // llvm.nvvm.div.rn.f
-    nvvm_div_rn_ftz_f,                         // llvm.nvvm.div.rn.ftz.f
-    nvvm_div_rp_d,                             // llvm.nvvm.div.rp.d
-    nvvm_div_rp_f,                             // llvm.nvvm.div.rp.f
-    nvvm_div_rp_ftz_f,                         // llvm.nvvm.div.rp.ftz.f
-    nvvm_div_rz_d,                             // llvm.nvvm.div.rz.d
-    nvvm_div_rz_f,                             // llvm.nvvm.div.rz.f
-    nvvm_div_rz_ftz_f,                         // llvm.nvvm.div.rz.ftz.f
-    nvvm_ex2_approx_d,                         // llvm.nvvm.ex2.approx.d
-    nvvm_ex2_approx_f,                         // llvm.nvvm.ex2.approx.f
-    nvvm_ex2_approx_ftz_f,                     // llvm.nvvm.ex2.approx.ftz.f
-    nvvm_f2h_rn,                               // llvm.nvvm.f2h.rn
-    nvvm_f2h_rn_ftz,                           // llvm.nvvm.f2h.rn.ftz
-    nvvm_f2i_rm,                               // llvm.nvvm.f2i.rm
-    nvvm_f2i_rm_ftz,                           // llvm.nvvm.f2i.rm.ftz
-    nvvm_f2i_rn,                               // llvm.nvvm.f2i.rn
-    nvvm_f2i_rn_ftz,                           // llvm.nvvm.f2i.rn.ftz
-    nvvm_f2i_rp,                               // llvm.nvvm.f2i.rp
-    nvvm_f2i_rp_ftz,                           // llvm.nvvm.f2i.rp.ftz
-    nvvm_f2i_rz,                               // llvm.nvvm.f2i.rz
-    nvvm_f2i_rz_ftz,                           // llvm.nvvm.f2i.rz.ftz
-    nvvm_f2ll_rm,                              // llvm.nvvm.f2ll.rm
-    nvvm_f2ll_rm_ftz,                          // llvm.nvvm.f2ll.rm.ftz
-    nvvm_f2ll_rn,                              // llvm.nvvm.f2ll.rn
-    nvvm_f2ll_rn_ftz,                          // llvm.nvvm.f2ll.rn.ftz
-    nvvm_f2ll_rp,                              // llvm.nvvm.f2ll.rp
-    nvvm_f2ll_rp_ftz,                          // llvm.nvvm.f2ll.rp.ftz
-    nvvm_f2ll_rz,                              // llvm.nvvm.f2ll.rz
-    nvvm_f2ll_rz_ftz,                          // llvm.nvvm.f2ll.rz.ftz
-    nvvm_f2ui_rm,                              // llvm.nvvm.f2ui.rm
-    nvvm_f2ui_rm_ftz,                          // llvm.nvvm.f2ui.rm.ftz
-    nvvm_f2ui_rn,                              // llvm.nvvm.f2ui.rn
-    nvvm_f2ui_rn_ftz,                          // llvm.nvvm.f2ui.rn.ftz
-    nvvm_f2ui_rp,                              // llvm.nvvm.f2ui.rp
-    nvvm_f2ui_rp_ftz,                          // llvm.nvvm.f2ui.rp.ftz
-    nvvm_f2ui_rz,                              // llvm.nvvm.f2ui.rz
-    nvvm_f2ui_rz_ftz,                          // llvm.nvvm.f2ui.rz.ftz
-    nvvm_f2ull_rm,                             // llvm.nvvm.f2ull.rm
-    nvvm_f2ull_rm_ftz,                         // llvm.nvvm.f2ull.rm.ftz
-    nvvm_f2ull_rn,                             // llvm.nvvm.f2ull.rn
-    nvvm_f2ull_rn_ftz,                         // llvm.nvvm.f2ull.rn.ftz
-    nvvm_f2ull_rp,                             // llvm.nvvm.f2ull.rp
-    nvvm_f2ull_rp_ftz,                         // llvm.nvvm.f2ull.rp.ftz
-    nvvm_f2ull_rz,                             // llvm.nvvm.f2ull.rz
-    nvvm_f2ull_rz_ftz,                         // llvm.nvvm.f2ull.rz.ftz
-    nvvm_fabs_d,                               // llvm.nvvm.fabs.d
-    nvvm_fabs_f,                               // llvm.nvvm.fabs.f
-    nvvm_fabs_ftz_f,                           // llvm.nvvm.fabs.ftz.f
-    nvvm_floor_d,                              // llvm.nvvm.floor.d
-    nvvm_floor_f,                              // llvm.nvvm.floor.f
-    nvvm_floor_ftz_f,                          // llvm.nvvm.floor.ftz.f
-    nvvm_fma_rm_d,                             // llvm.nvvm.fma.rm.d
-    nvvm_fma_rm_f,                             // llvm.nvvm.fma.rm.f
-    nvvm_fma_rm_ftz_f,                         // llvm.nvvm.fma.rm.ftz.f
-    nvvm_fma_rn_d,                             // llvm.nvvm.fma.rn.d
-    nvvm_fma_rn_f,                             // llvm.nvvm.fma.rn.f
-    nvvm_fma_rn_ftz_f,                         // llvm.nvvm.fma.rn.ftz.f
-    nvvm_fma_rp_d,                             // llvm.nvvm.fma.rp.d
-    nvvm_fma_rp_f,                             // llvm.nvvm.fma.rp.f
-    nvvm_fma_rp_ftz_f,                         // llvm.nvvm.fma.rp.ftz.f
-    nvvm_fma_rz_d,                             // llvm.nvvm.fma.rz.d
-    nvvm_fma_rz_f,                             // llvm.nvvm.fma.rz.f
-    nvvm_fma_rz_ftz_f,                         // llvm.nvvm.fma.rz.ftz.f
-    nvvm_fmax_d,                               // llvm.nvvm.fmax.d
-    nvvm_fmax_f,                               // llvm.nvvm.fmax.f
-    nvvm_fmax_ftz_f,                           // llvm.nvvm.fmax.ftz.f
-    nvvm_fmin_d,                               // llvm.nvvm.fmin.d
-    nvvm_fmin_f,                               // llvm.nvvm.fmin.f
-    nvvm_fmin_ftz_f,                           // llvm.nvvm.fmin.ftz.f
-    nvvm_fns,                                  // llvm.nvvm.fns
-    nvvm_i2d_rm,                               // llvm.nvvm.i2d.rm
-    nvvm_i2d_rn,                               // llvm.nvvm.i2d.rn
-    nvvm_i2d_rp,                               // llvm.nvvm.i2d.rp
-    nvvm_i2d_rz,                               // llvm.nvvm.i2d.rz
-    nvvm_i2f_rm,                               // llvm.nvvm.i2f.rm
-    nvvm_i2f_rn,                               // llvm.nvvm.i2f.rn
-    nvvm_i2f_rp,                               // llvm.nvvm.i2f.rp
-    nvvm_i2f_rz,                               // llvm.nvvm.i2f.rz
-    nvvm_isspacep_const,                       // llvm.nvvm.isspacep.const
-    nvvm_isspacep_global,                      // llvm.nvvm.isspacep.global
-    nvvm_isspacep_local,                       // llvm.nvvm.isspacep.local
-    nvvm_isspacep_shared,                      // llvm.nvvm.isspacep.shared
-    nvvm_istypep_sampler,                      // llvm.nvvm.istypep.sampler
-    nvvm_istypep_surface,                      // llvm.nvvm.istypep.surface
-    nvvm_istypep_texture,                      // llvm.nvvm.istypep.texture
-    nvvm_ldg_global_f,                         // llvm.nvvm.ldg.global.f
-    nvvm_ldg_global_i,                         // llvm.nvvm.ldg.global.i
-    nvvm_ldg_global_p,                         // llvm.nvvm.ldg.global.p
-    nvvm_ldu_global_f,                         // llvm.nvvm.ldu.global.f
-    nvvm_ldu_global_i,                         // llvm.nvvm.ldu.global.i
-    nvvm_ldu_global_p,                         // llvm.nvvm.ldu.global.p
-    nvvm_lg2_approx_d,                         // llvm.nvvm.lg2.approx.d
-    nvvm_lg2_approx_f,                         // llvm.nvvm.lg2.approx.f
-    nvvm_lg2_approx_ftz_f,                     // llvm.nvvm.lg2.approx.ftz.f
-    nvvm_ll2d_rm,                              // llvm.nvvm.ll2d.rm
-    nvvm_ll2d_rn,                              // llvm.nvvm.ll2d.rn
-    nvvm_ll2d_rp,                              // llvm.nvvm.ll2d.rp
-    nvvm_ll2d_rz,                              // llvm.nvvm.ll2d.rz
-    nvvm_ll2f_rm,                              // llvm.nvvm.ll2f.rm
-    nvvm_ll2f_rn,                              // llvm.nvvm.ll2f.rn
-    nvvm_ll2f_rp,                              // llvm.nvvm.ll2f.rp
-    nvvm_ll2f_rz,                              // llvm.nvvm.ll2f.rz
-    nvvm_lohi_i2d,                             // llvm.nvvm.lohi.i2d
-    nvvm_match_all_sync_i32p,                  // llvm.nvvm.match.all.sync.i32p
-    nvvm_match_all_sync_i64p,                  // llvm.nvvm.match.all.sync.i64p
-    nvvm_match_any_sync_i32,                   // llvm.nvvm.match.any.sync.i32
-    nvvm_match_any_sync_i64,                   // llvm.nvvm.match.any.sync.i64
-    nvvm_membar_cta,                           // llvm.nvvm.membar.cta
-    nvvm_membar_gl,                            // llvm.nvvm.membar.gl
-    nvvm_membar_sys,                           // llvm.nvvm.membar.sys
-    nvvm_move_double,                          // llvm.nvvm.move.double
-    nvvm_move_float,                           // llvm.nvvm.move.float
-    nvvm_move_i16,                             // llvm.nvvm.move.i16
-    nvvm_move_i32,                             // llvm.nvvm.move.i32
-    nvvm_move_i64,                             // llvm.nvvm.move.i64
-    nvvm_move_ptr,                             // llvm.nvvm.move.ptr
-    nvvm_mul_rm_d,                             // llvm.nvvm.mul.rm.d
-    nvvm_mul_rm_f,                             // llvm.nvvm.mul.rm.f
-    nvvm_mul_rm_ftz_f,                         // llvm.nvvm.mul.rm.ftz.f
-    nvvm_mul_rn_d,                             // llvm.nvvm.mul.rn.d
-    nvvm_mul_rn_f,                             // llvm.nvvm.mul.rn.f
-    nvvm_mul_rn_ftz_f,                         // llvm.nvvm.mul.rn.ftz.f
-    nvvm_mul_rp_d,                             // llvm.nvvm.mul.rp.d
-    nvvm_mul_rp_f,                             // llvm.nvvm.mul.rp.f
-    nvvm_mul_rp_ftz_f,                         // llvm.nvvm.mul.rp.ftz.f
-    nvvm_mul_rz_d,                             // llvm.nvvm.mul.rz.d
-    nvvm_mul_rz_f,                             // llvm.nvvm.mul.rz.f
-    nvvm_mul_rz_ftz_f,                         // llvm.nvvm.mul.rz.ftz.f
-    nvvm_mul24_i,                              // llvm.nvvm.mul24.i
-    nvvm_mul24_ui,                             // llvm.nvvm.mul24.ui
-    nvvm_mulhi_i,                              // llvm.nvvm.mulhi.i
-    nvvm_mulhi_ll,                             // llvm.nvvm.mulhi.ll
-    nvvm_mulhi_ui,                             // llvm.nvvm.mulhi.ui
-    nvvm_mulhi_ull,                            // llvm.nvvm.mulhi.ull
-    nvvm_prmt,                                 // llvm.nvvm.prmt
-    nvvm_ptr_constant_to_gen,                  // llvm.nvvm.ptr.constant.to.gen
-    nvvm_ptr_gen_to_constant,                  // llvm.nvvm.ptr.gen.to.constant
-    nvvm_ptr_gen_to_global,                    // llvm.nvvm.ptr.gen.to.global
-    nvvm_ptr_gen_to_local,                     // llvm.nvvm.ptr.gen.to.local
-    nvvm_ptr_gen_to_param,                     // llvm.nvvm.ptr.gen.to.param
-    nvvm_ptr_gen_to_shared,                    // llvm.nvvm.ptr.gen.to.shared
-    nvvm_ptr_global_to_gen,                    // llvm.nvvm.ptr.global.to.gen
-    nvvm_ptr_local_to_gen,                     // llvm.nvvm.ptr.local.to.gen
-    nvvm_ptr_shared_to_gen,                    // llvm.nvvm.ptr.shared.to.gen
-    nvvm_rcp_approx_ftz_d,                     // llvm.nvvm.rcp.approx.ftz.d
-    nvvm_rcp_rm_d,                             // llvm.nvvm.rcp.rm.d
-    nvvm_rcp_rm_f,                             // llvm.nvvm.rcp.rm.f
-    nvvm_rcp_rm_ftz_f,                         // llvm.nvvm.rcp.rm.ftz.f
-    nvvm_rcp_rn_d,                             // llvm.nvvm.rcp.rn.d
-    nvvm_rcp_rn_f,                             // llvm.nvvm.rcp.rn.f
-    nvvm_rcp_rn_ftz_f,                         // llvm.nvvm.rcp.rn.ftz.f
-    nvvm_rcp_rp_d,                             // llvm.nvvm.rcp.rp.d
-    nvvm_rcp_rp_f,                             // llvm.nvvm.rcp.rp.f
-    nvvm_rcp_rp_ftz_f,                         // llvm.nvvm.rcp.rp.ftz.f
-    nvvm_rcp_rz_d,                             // llvm.nvvm.rcp.rz.d
-    nvvm_rcp_rz_f,                             // llvm.nvvm.rcp.rz.f
-    nvvm_rcp_rz_ftz_f,                         // llvm.nvvm.rcp.rz.ftz.f
-    nvvm_read_ptx_sreg_clock,                  // llvm.nvvm.read.ptx.sreg.clock
-    nvvm_read_ptx_sreg_clock64,                // llvm.nvvm.read.ptx.sreg.clock64
-    nvvm_read_ptx_sreg_ctaid_w,                // llvm.nvvm.read.ptx.sreg.ctaid.w
-    nvvm_read_ptx_sreg_ctaid_x,                // llvm.nvvm.read.ptx.sreg.ctaid.x
-    nvvm_read_ptx_sreg_ctaid_y,                // llvm.nvvm.read.ptx.sreg.ctaid.y
-    nvvm_read_ptx_sreg_ctaid_z,                // llvm.nvvm.read.ptx.sreg.ctaid.z
-    nvvm_read_ptx_sreg_envreg0,                // llvm.nvvm.read.ptx.sreg.envreg0
-    nvvm_read_ptx_sreg_envreg1,                // llvm.nvvm.read.ptx.sreg.envreg1
-    nvvm_read_ptx_sreg_envreg10,               // llvm.nvvm.read.ptx.sreg.envreg10
-    nvvm_read_ptx_sreg_envreg11,               // llvm.nvvm.read.ptx.sreg.envreg11
-    nvvm_read_ptx_sreg_envreg12,               // llvm.nvvm.read.ptx.sreg.envreg12
-    nvvm_read_ptx_sreg_envreg13,               // llvm.nvvm.read.ptx.sreg.envreg13
-    nvvm_read_ptx_sreg_envreg14,               // llvm.nvvm.read.ptx.sreg.envreg14
-    nvvm_read_ptx_sreg_envreg15,               // llvm.nvvm.read.ptx.sreg.envreg15
-    nvvm_read_ptx_sreg_envreg16,               // llvm.nvvm.read.ptx.sreg.envreg16
-    nvvm_read_ptx_sreg_envreg17,               // llvm.nvvm.read.ptx.sreg.envreg17
-    nvvm_read_ptx_sreg_envreg18,               // llvm.nvvm.read.ptx.sreg.envreg18
-    nvvm_read_ptx_sreg_envreg19,               // llvm.nvvm.read.ptx.sreg.envreg19
-    nvvm_read_ptx_sreg_envreg2,                // llvm.nvvm.read.ptx.sreg.envreg2
-    nvvm_read_ptx_sreg_envreg20,               // llvm.nvvm.read.ptx.sreg.envreg20
-    nvvm_read_ptx_sreg_envreg21,               // llvm.nvvm.read.ptx.sreg.envreg21
-    nvvm_read_ptx_sreg_envreg22,               // llvm.nvvm.read.ptx.sreg.envreg22
-    nvvm_read_ptx_sreg_envreg23,               // llvm.nvvm.read.ptx.sreg.envreg23
-    nvvm_read_ptx_sreg_envreg24,               // llvm.nvvm.read.ptx.sreg.envreg24
-    nvvm_read_ptx_sreg_envreg25,               // llvm.nvvm.read.ptx.sreg.envreg25
-    nvvm_read_ptx_sreg_envreg26,               // llvm.nvvm.read.ptx.sreg.envreg26
-    nvvm_read_ptx_sreg_envreg27,               // llvm.nvvm.read.ptx.sreg.envreg27
-    nvvm_read_ptx_sreg_envreg28,               // llvm.nvvm.read.ptx.sreg.envreg28
-    nvvm_read_ptx_sreg_envreg29,               // llvm.nvvm.read.ptx.sreg.envreg29
-    nvvm_read_ptx_sreg_envreg3,                // llvm.nvvm.read.ptx.sreg.envreg3
-    nvvm_read_ptx_sreg_envreg30,               // llvm.nvvm.read.ptx.sreg.envreg30
-    nvvm_read_ptx_sreg_envreg31,               // llvm.nvvm.read.ptx.sreg.envreg31
-    nvvm_read_ptx_sreg_envreg4,                // llvm.nvvm.read.ptx.sreg.envreg4
-    nvvm_read_ptx_sreg_envreg5,                // llvm.nvvm.read.ptx.sreg.envreg5
-    nvvm_read_ptx_sreg_envreg6,                // llvm.nvvm.read.ptx.sreg.envreg6
-    nvvm_read_ptx_sreg_envreg7,                // llvm.nvvm.read.ptx.sreg.envreg7
-    nvvm_read_ptx_sreg_envreg8,                // llvm.nvvm.read.ptx.sreg.envreg8
-    nvvm_read_ptx_sreg_envreg9,                // llvm.nvvm.read.ptx.sreg.envreg9
-    nvvm_read_ptx_sreg_gridid,                 // llvm.nvvm.read.ptx.sreg.gridid
-    nvvm_read_ptx_sreg_laneid,                 // llvm.nvvm.read.ptx.sreg.laneid
-    nvvm_read_ptx_sreg_lanemask_eq,            // llvm.nvvm.read.ptx.sreg.lanemask.eq
-    nvvm_read_ptx_sreg_lanemask_ge,            // llvm.nvvm.read.ptx.sreg.lanemask.ge
-    nvvm_read_ptx_sreg_lanemask_gt,            // llvm.nvvm.read.ptx.sreg.lanemask.gt
-    nvvm_read_ptx_sreg_lanemask_le,            // llvm.nvvm.read.ptx.sreg.lanemask.le
-    nvvm_read_ptx_sreg_lanemask_lt,            // llvm.nvvm.read.ptx.sreg.lanemask.lt
-    nvvm_read_ptx_sreg_nctaid_w,               // llvm.nvvm.read.ptx.sreg.nctaid.w
-    nvvm_read_ptx_sreg_nctaid_x,               // llvm.nvvm.read.ptx.sreg.nctaid.x
-    nvvm_read_ptx_sreg_nctaid_y,               // llvm.nvvm.read.ptx.sreg.nctaid.y
-    nvvm_read_ptx_sreg_nctaid_z,               // llvm.nvvm.read.ptx.sreg.nctaid.z
-    nvvm_read_ptx_sreg_nsmid,                  // llvm.nvvm.read.ptx.sreg.nsmid
-    nvvm_read_ptx_sreg_ntid_w,                 // llvm.nvvm.read.ptx.sreg.ntid.w
-    nvvm_read_ptx_sreg_ntid_x,                 // llvm.nvvm.read.ptx.sreg.ntid.x
-    nvvm_read_ptx_sreg_ntid_y,                 // llvm.nvvm.read.ptx.sreg.ntid.y
-    nvvm_read_ptx_sreg_ntid_z,                 // llvm.nvvm.read.ptx.sreg.ntid.z
-    nvvm_read_ptx_sreg_nwarpid,                // llvm.nvvm.read.ptx.sreg.nwarpid
-    nvvm_read_ptx_sreg_pm0,                    // llvm.nvvm.read.ptx.sreg.pm0
-    nvvm_read_ptx_sreg_pm1,                    // llvm.nvvm.read.ptx.sreg.pm1
-    nvvm_read_ptx_sreg_pm2,                    // llvm.nvvm.read.ptx.sreg.pm2
-    nvvm_read_ptx_sreg_pm3,                    // llvm.nvvm.read.ptx.sreg.pm3
-    nvvm_read_ptx_sreg_smid,                   // llvm.nvvm.read.ptx.sreg.smid
-    nvvm_read_ptx_sreg_tid_w,                  // llvm.nvvm.read.ptx.sreg.tid.w
-    nvvm_read_ptx_sreg_tid_x,                  // llvm.nvvm.read.ptx.sreg.tid.x
-    nvvm_read_ptx_sreg_tid_y,                  // llvm.nvvm.read.ptx.sreg.tid.y
-    nvvm_read_ptx_sreg_tid_z,                  // llvm.nvvm.read.ptx.sreg.tid.z
-    nvvm_read_ptx_sreg_warpid,                 // llvm.nvvm.read.ptx.sreg.warpid
-    nvvm_read_ptx_sreg_warpsize,               // llvm.nvvm.read.ptx.sreg.warpsize
-    nvvm_reflect,                              // llvm.nvvm.reflect
-    nvvm_rotate_b32,                           // llvm.nvvm.rotate.b32
-    nvvm_rotate_b64,                           // llvm.nvvm.rotate.b64
-    nvvm_rotate_right_b64,                     // llvm.nvvm.rotate.right.b64
-    nvvm_round_d,                              // llvm.nvvm.round.d
-    nvvm_round_f,                              // llvm.nvvm.round.f
-    nvvm_round_ftz_f,                          // llvm.nvvm.round.ftz.f
-    nvvm_rsqrt_approx_d,                       // llvm.nvvm.rsqrt.approx.d
-    nvvm_rsqrt_approx_f,                       // llvm.nvvm.rsqrt.approx.f
-    nvvm_rsqrt_approx_ftz_f,                   // llvm.nvvm.rsqrt.approx.ftz.f
-    nvvm_sad_i,                                // llvm.nvvm.sad.i
-    nvvm_sad_ui,                               // llvm.nvvm.sad.ui
-    nvvm_saturate_d,                           // llvm.nvvm.saturate.d
-    nvvm_saturate_f,                           // llvm.nvvm.saturate.f
-    nvvm_saturate_ftz_f,                       // llvm.nvvm.saturate.ftz.f
-    nvvm_shfl_bfly_f32,                        // llvm.nvvm.shfl.bfly.f32
-    nvvm_shfl_bfly_i32,                        // llvm.nvvm.shfl.bfly.i32
-    nvvm_shfl_down_f32,                        // llvm.nvvm.shfl.down.f32
-    nvvm_shfl_down_i32,                        // llvm.nvvm.shfl.down.i32
-    nvvm_shfl_idx_f32,                         // llvm.nvvm.shfl.idx.f32
-    nvvm_shfl_idx_i32,                         // llvm.nvvm.shfl.idx.i32
-    nvvm_shfl_sync_bfly_f32,                   // llvm.nvvm.shfl.sync.bfly.f32
-    nvvm_shfl_sync_bfly_i32,                   // llvm.nvvm.shfl.sync.bfly.i32
-    nvvm_shfl_sync_down_f32,                   // llvm.nvvm.shfl.sync.down.f32
-    nvvm_shfl_sync_down_i32,                   // llvm.nvvm.shfl.sync.down.i32
-    nvvm_shfl_sync_idx_f32,                    // llvm.nvvm.shfl.sync.idx.f32
-    nvvm_shfl_sync_idx_i32,                    // llvm.nvvm.shfl.sync.idx.i32
-    nvvm_shfl_sync_up_f32,                     // llvm.nvvm.shfl.sync.up.f32
-    nvvm_shfl_sync_up_i32,                     // llvm.nvvm.shfl.sync.up.i32
-    nvvm_shfl_up_f32,                          // llvm.nvvm.shfl.up.f32
-    nvvm_shfl_up_i32,                          // llvm.nvvm.shfl.up.i32
-    nvvm_sin_approx_f,                         // llvm.nvvm.sin.approx.f
-    nvvm_sin_approx_ftz_f,                     // llvm.nvvm.sin.approx.ftz.f
-    nvvm_sqrt_approx_f,                        // llvm.nvvm.sqrt.approx.f
-    nvvm_sqrt_approx_ftz_f,                    // llvm.nvvm.sqrt.approx.ftz.f
-    nvvm_sqrt_f,                               // llvm.nvvm.sqrt.f
-    nvvm_sqrt_rm_d,                            // llvm.nvvm.sqrt.rm.d
-    nvvm_sqrt_rm_f,                            // llvm.nvvm.sqrt.rm.f
-    nvvm_sqrt_rm_ftz_f,                        // llvm.nvvm.sqrt.rm.ftz.f
-    nvvm_sqrt_rn_d,                            // llvm.nvvm.sqrt.rn.d
-    nvvm_sqrt_rn_f,                            // llvm.nvvm.sqrt.rn.f
-    nvvm_sqrt_rn_ftz_f,                        // llvm.nvvm.sqrt.rn.ftz.f
-    nvvm_sqrt_rp_d,                            // llvm.nvvm.sqrt.rp.d
-    nvvm_sqrt_rp_f,                            // llvm.nvvm.sqrt.rp.f
-    nvvm_sqrt_rp_ftz_f,                        // llvm.nvvm.sqrt.rp.ftz.f
-    nvvm_sqrt_rz_d,                            // llvm.nvvm.sqrt.rz.d
-    nvvm_sqrt_rz_f,                            // llvm.nvvm.sqrt.rz.f
-    nvvm_sqrt_rz_ftz_f,                        // llvm.nvvm.sqrt.rz.ftz.f
-    nvvm_suld_1d_array_i16_clamp,              // llvm.nvvm.suld.1d.array.i16.clamp
-    nvvm_suld_1d_array_i16_trap,               // llvm.nvvm.suld.1d.array.i16.trap
-    nvvm_suld_1d_array_i16_zero,               // llvm.nvvm.suld.1d.array.i16.zero
-    nvvm_suld_1d_array_i32_clamp,              // llvm.nvvm.suld.1d.array.i32.clamp
-    nvvm_suld_1d_array_i32_trap,               // llvm.nvvm.suld.1d.array.i32.trap
-    nvvm_suld_1d_array_i32_zero,               // llvm.nvvm.suld.1d.array.i32.zero
-    nvvm_suld_1d_array_i64_clamp,              // llvm.nvvm.suld.1d.array.i64.clamp
-    nvvm_suld_1d_array_i64_trap,               // llvm.nvvm.suld.1d.array.i64.trap
-    nvvm_suld_1d_array_i64_zero,               // llvm.nvvm.suld.1d.array.i64.zero
-    nvvm_suld_1d_array_i8_clamp,               // llvm.nvvm.suld.1d.array.i8.clamp
-    nvvm_suld_1d_array_i8_trap,                // llvm.nvvm.suld.1d.array.i8.trap
-    nvvm_suld_1d_array_i8_zero,                // llvm.nvvm.suld.1d.array.i8.zero
-    nvvm_suld_1d_array_v2i16_clamp,            // llvm.nvvm.suld.1d.array.v2i16.clamp
-    nvvm_suld_1d_array_v2i16_trap,             // llvm.nvvm.suld.1d.array.v2i16.trap
-    nvvm_suld_1d_array_v2i16_zero,             // llvm.nvvm.suld.1d.array.v2i16.zero
-    nvvm_suld_1d_array_v2i32_clamp,            // llvm.nvvm.suld.1d.array.v2i32.clamp
-    nvvm_suld_1d_array_v2i32_trap,             // llvm.nvvm.suld.1d.array.v2i32.trap
-    nvvm_suld_1d_array_v2i32_zero,             // llvm.nvvm.suld.1d.array.v2i32.zero
-    nvvm_suld_1d_array_v2i64_clamp,            // llvm.nvvm.suld.1d.array.v2i64.clamp
-    nvvm_suld_1d_array_v2i64_trap,             // llvm.nvvm.suld.1d.array.v2i64.trap
-    nvvm_suld_1d_array_v2i64_zero,             // llvm.nvvm.suld.1d.array.v2i64.zero
-    nvvm_suld_1d_array_v2i8_clamp,             // llvm.nvvm.suld.1d.array.v2i8.clamp
-    nvvm_suld_1d_array_v2i8_trap,              // llvm.nvvm.suld.1d.array.v2i8.trap
-    nvvm_suld_1d_array_v2i8_zero,              // llvm.nvvm.suld.1d.array.v2i8.zero
-    nvvm_suld_1d_array_v4i16_clamp,            // llvm.nvvm.suld.1d.array.v4i16.clamp
-    nvvm_suld_1d_array_v4i16_trap,             // llvm.nvvm.suld.1d.array.v4i16.trap
-    nvvm_suld_1d_array_v4i16_zero,             // llvm.nvvm.suld.1d.array.v4i16.zero
-    nvvm_suld_1d_array_v4i32_clamp,            // llvm.nvvm.suld.1d.array.v4i32.clamp
-    nvvm_suld_1d_array_v4i32_trap,             // llvm.nvvm.suld.1d.array.v4i32.trap
-    nvvm_suld_1d_array_v4i32_zero,             // llvm.nvvm.suld.1d.array.v4i32.zero
-    nvvm_suld_1d_array_v4i8_clamp,             // llvm.nvvm.suld.1d.array.v4i8.clamp
-    nvvm_suld_1d_array_v4i8_trap,              // llvm.nvvm.suld.1d.array.v4i8.trap
-    nvvm_suld_1d_array_v4i8_zero,              // llvm.nvvm.suld.1d.array.v4i8.zero
-    nvvm_suld_1d_i16_clamp,                    // llvm.nvvm.suld.1d.i16.clamp
-    nvvm_suld_1d_i16_trap,                     // llvm.nvvm.suld.1d.i16.trap
-    nvvm_suld_1d_i16_zero,                     // llvm.nvvm.suld.1d.i16.zero
-    nvvm_suld_1d_i32_clamp,                    // llvm.nvvm.suld.1d.i32.clamp
-    nvvm_suld_1d_i32_trap,                     // llvm.nvvm.suld.1d.i32.trap
-    nvvm_suld_1d_i32_zero,                     // llvm.nvvm.suld.1d.i32.zero
-    nvvm_suld_1d_i64_clamp,                    // llvm.nvvm.suld.1d.i64.clamp
-    nvvm_suld_1d_i64_trap,                     // llvm.nvvm.suld.1d.i64.trap
-    nvvm_suld_1d_i64_zero,                     // llvm.nvvm.suld.1d.i64.zero
-    nvvm_suld_1d_i8_clamp,                     // llvm.nvvm.suld.1d.i8.clamp
-    nvvm_suld_1d_i8_trap,                      // llvm.nvvm.suld.1d.i8.trap
-    nvvm_suld_1d_i8_zero,                      // llvm.nvvm.suld.1d.i8.zero
-    nvvm_suld_1d_v2i16_clamp,                  // llvm.nvvm.suld.1d.v2i16.clamp
-    nvvm_suld_1d_v2i16_trap,                   // llvm.nvvm.suld.1d.v2i16.trap
-    nvvm_suld_1d_v2i16_zero,                   // llvm.nvvm.suld.1d.v2i16.zero
-    nvvm_suld_1d_v2i32_clamp,                  // llvm.nvvm.suld.1d.v2i32.clamp
-    nvvm_suld_1d_v2i32_trap,                   // llvm.nvvm.suld.1d.v2i32.trap
-    nvvm_suld_1d_v2i32_zero,                   // llvm.nvvm.suld.1d.v2i32.zero
-    nvvm_suld_1d_v2i64_clamp,                  // llvm.nvvm.suld.1d.v2i64.clamp
-    nvvm_suld_1d_v2i64_trap,                   // llvm.nvvm.suld.1d.v2i64.trap
-    nvvm_suld_1d_v2i64_zero,                   // llvm.nvvm.suld.1d.v2i64.zero
-    nvvm_suld_1d_v2i8_clamp,                   // llvm.nvvm.suld.1d.v2i8.clamp
-    nvvm_suld_1d_v2i8_trap,                    // llvm.nvvm.suld.1d.v2i8.trap
-    nvvm_suld_1d_v2i8_zero,                    // llvm.nvvm.suld.1d.v2i8.zero
-    nvvm_suld_1d_v4i16_clamp,                  // llvm.nvvm.suld.1d.v4i16.clamp
-    nvvm_suld_1d_v4i16_trap,                   // llvm.nvvm.suld.1d.v4i16.trap
-    nvvm_suld_1d_v4i16_zero,                   // llvm.nvvm.suld.1d.v4i16.zero
-    nvvm_suld_1d_v4i32_clamp,                  // llvm.nvvm.suld.1d.v4i32.clamp
-    nvvm_suld_1d_v4i32_trap,                   // llvm.nvvm.suld.1d.v4i32.trap
-    nvvm_suld_1d_v4i32_zero,                   // llvm.nvvm.suld.1d.v4i32.zero
-    nvvm_suld_1d_v4i8_clamp,                   // llvm.nvvm.suld.1d.v4i8.clamp
-    nvvm_suld_1d_v4i8_trap,                    // llvm.nvvm.suld.1d.v4i8.trap
-    nvvm_suld_1d_v4i8_zero,                    // llvm.nvvm.suld.1d.v4i8.zero
-    nvvm_suld_2d_array_i16_clamp,              // llvm.nvvm.suld.2d.array.i16.clamp
-    nvvm_suld_2d_array_i16_trap,               // llvm.nvvm.suld.2d.array.i16.trap
-    nvvm_suld_2d_array_i16_zero,               // llvm.nvvm.suld.2d.array.i16.zero
-    nvvm_suld_2d_array_i32_clamp,              // llvm.nvvm.suld.2d.array.i32.clamp
-    nvvm_suld_2d_array_i32_trap,               // llvm.nvvm.suld.2d.array.i32.trap
-    nvvm_suld_2d_array_i32_zero,               // llvm.nvvm.suld.2d.array.i32.zero
-    nvvm_suld_2d_array_i64_clamp,              // llvm.nvvm.suld.2d.array.i64.clamp
-    nvvm_suld_2d_array_i64_trap,               // llvm.nvvm.suld.2d.array.i64.trap
-    nvvm_suld_2d_array_i64_zero,               // llvm.nvvm.suld.2d.array.i64.zero
-    nvvm_suld_2d_array_i8_clamp,               // llvm.nvvm.suld.2d.array.i8.clamp
-    nvvm_suld_2d_array_i8_trap,                // llvm.nvvm.suld.2d.array.i8.trap
-    nvvm_suld_2d_array_i8_zero,                // llvm.nvvm.suld.2d.array.i8.zero
-    nvvm_suld_2d_array_v2i16_clamp,            // llvm.nvvm.suld.2d.array.v2i16.clamp
-    nvvm_suld_2d_array_v2i16_trap,             // llvm.nvvm.suld.2d.array.v2i16.trap
-    nvvm_suld_2d_array_v2i16_zero,             // llvm.nvvm.suld.2d.array.v2i16.zero
-    nvvm_suld_2d_array_v2i32_clamp,            // llvm.nvvm.suld.2d.array.v2i32.clamp
-    nvvm_suld_2d_array_v2i32_trap,             // llvm.nvvm.suld.2d.array.v2i32.trap
-    nvvm_suld_2d_array_v2i32_zero,             // llvm.nvvm.suld.2d.array.v2i32.zero
-    nvvm_suld_2d_array_v2i64_clamp,            // llvm.nvvm.suld.2d.array.v2i64.clamp
-    nvvm_suld_2d_array_v2i64_trap,             // llvm.nvvm.suld.2d.array.v2i64.trap
-    nvvm_suld_2d_array_v2i64_zero,             // llvm.nvvm.suld.2d.array.v2i64.zero
-    nvvm_suld_2d_array_v2i8_clamp,             // llvm.nvvm.suld.2d.array.v2i8.clamp
-    nvvm_suld_2d_array_v2i8_trap,              // llvm.nvvm.suld.2d.array.v2i8.trap
-    nvvm_suld_2d_array_v2i8_zero,              // llvm.nvvm.suld.2d.array.v2i8.zero
-    nvvm_suld_2d_array_v4i16_clamp,            // llvm.nvvm.suld.2d.array.v4i16.clamp
-    nvvm_suld_2d_array_v4i16_trap,             // llvm.nvvm.suld.2d.array.v4i16.trap
-    nvvm_suld_2d_array_v4i16_zero,             // llvm.nvvm.suld.2d.array.v4i16.zero
-    nvvm_suld_2d_array_v4i32_clamp,            // llvm.nvvm.suld.2d.array.v4i32.clamp
-    nvvm_suld_2d_array_v4i32_trap,             // llvm.nvvm.suld.2d.array.v4i32.trap
-    nvvm_suld_2d_array_v4i32_zero,             // llvm.nvvm.suld.2d.array.v4i32.zero
-    nvvm_suld_2d_array_v4i8_clamp,             // llvm.nvvm.suld.2d.array.v4i8.clamp
-    nvvm_suld_2d_array_v4i8_trap,              // llvm.nvvm.suld.2d.array.v4i8.trap
-    nvvm_suld_2d_array_v4i8_zero,              // llvm.nvvm.suld.2d.array.v4i8.zero
-    nvvm_suld_2d_i16_clamp,                    // llvm.nvvm.suld.2d.i16.clamp
-    nvvm_suld_2d_i16_trap,                     // llvm.nvvm.suld.2d.i16.trap
-    nvvm_suld_2d_i16_zero,                     // llvm.nvvm.suld.2d.i16.zero
-    nvvm_suld_2d_i32_clamp,                    // llvm.nvvm.suld.2d.i32.clamp
-    nvvm_suld_2d_i32_trap,                     // llvm.nvvm.suld.2d.i32.trap
-    nvvm_suld_2d_i32_zero,                     // llvm.nvvm.suld.2d.i32.zero
-    nvvm_suld_2d_i64_clamp,                    // llvm.nvvm.suld.2d.i64.clamp
-    nvvm_suld_2d_i64_trap,                     // llvm.nvvm.suld.2d.i64.trap
-    nvvm_suld_2d_i64_zero,                     // llvm.nvvm.suld.2d.i64.zero
-    nvvm_suld_2d_i8_clamp,                     // llvm.nvvm.suld.2d.i8.clamp
-    nvvm_suld_2d_i8_trap,                      // llvm.nvvm.suld.2d.i8.trap
-    nvvm_suld_2d_i8_zero,                      // llvm.nvvm.suld.2d.i8.zero
-    nvvm_suld_2d_v2i16_clamp,                  // llvm.nvvm.suld.2d.v2i16.clamp
-    nvvm_suld_2d_v2i16_trap,                   // llvm.nvvm.suld.2d.v2i16.trap
-    nvvm_suld_2d_v2i16_zero,                   // llvm.nvvm.suld.2d.v2i16.zero
-    nvvm_suld_2d_v2i32_clamp,                  // llvm.nvvm.suld.2d.v2i32.clamp
-    nvvm_suld_2d_v2i32_trap,                   // llvm.nvvm.suld.2d.v2i32.trap
-    nvvm_suld_2d_v2i32_zero,                   // llvm.nvvm.suld.2d.v2i32.zero
-    nvvm_suld_2d_v2i64_clamp,                  // llvm.nvvm.suld.2d.v2i64.clamp
-    nvvm_suld_2d_v2i64_trap,                   // llvm.nvvm.suld.2d.v2i64.trap
-    nvvm_suld_2d_v2i64_zero,                   // llvm.nvvm.suld.2d.v2i64.zero
-    nvvm_suld_2d_v2i8_clamp,                   // llvm.nvvm.suld.2d.v2i8.clamp
-    nvvm_suld_2d_v2i8_trap,                    // llvm.nvvm.suld.2d.v2i8.trap
-    nvvm_suld_2d_v2i8_zero,                    // llvm.nvvm.suld.2d.v2i8.zero
-    nvvm_suld_2d_v4i16_clamp,                  // llvm.nvvm.suld.2d.v4i16.clamp
-    nvvm_suld_2d_v4i16_trap,                   // llvm.nvvm.suld.2d.v4i16.trap
-    nvvm_suld_2d_v4i16_zero,                   // llvm.nvvm.suld.2d.v4i16.zero
-    nvvm_suld_2d_v4i32_clamp,                  // llvm.nvvm.suld.2d.v4i32.clamp
-    nvvm_suld_2d_v4i32_trap,                   // llvm.nvvm.suld.2d.v4i32.trap
-    nvvm_suld_2d_v4i32_zero,                   // llvm.nvvm.suld.2d.v4i32.zero
-    nvvm_suld_2d_v4i8_clamp,                   // llvm.nvvm.suld.2d.v4i8.clamp
-    nvvm_suld_2d_v4i8_trap,                    // llvm.nvvm.suld.2d.v4i8.trap
-    nvvm_suld_2d_v4i8_zero,                    // llvm.nvvm.suld.2d.v4i8.zero
-    nvvm_suld_3d_i16_clamp,                    // llvm.nvvm.suld.3d.i16.clamp
-    nvvm_suld_3d_i16_trap,                     // llvm.nvvm.suld.3d.i16.trap
-    nvvm_suld_3d_i16_zero,                     // llvm.nvvm.suld.3d.i16.zero
-    nvvm_suld_3d_i32_clamp,                    // llvm.nvvm.suld.3d.i32.clamp
-    nvvm_suld_3d_i32_trap,                     // llvm.nvvm.suld.3d.i32.trap
-    nvvm_suld_3d_i32_zero,                     // llvm.nvvm.suld.3d.i32.zero
-    nvvm_suld_3d_i64_clamp,                    // llvm.nvvm.suld.3d.i64.clamp
-    nvvm_suld_3d_i64_trap,                     // llvm.nvvm.suld.3d.i64.trap
-    nvvm_suld_3d_i64_zero,                     // llvm.nvvm.suld.3d.i64.zero
-    nvvm_suld_3d_i8_clamp,                     // llvm.nvvm.suld.3d.i8.clamp
-    nvvm_suld_3d_i8_trap,                      // llvm.nvvm.suld.3d.i8.trap
-    nvvm_suld_3d_i8_zero,                      // llvm.nvvm.suld.3d.i8.zero
-    nvvm_suld_3d_v2i16_clamp,                  // llvm.nvvm.suld.3d.v2i16.clamp
-    nvvm_suld_3d_v2i16_trap,                   // llvm.nvvm.suld.3d.v2i16.trap
-    nvvm_suld_3d_v2i16_zero,                   // llvm.nvvm.suld.3d.v2i16.zero
-    nvvm_suld_3d_v2i32_clamp,                  // llvm.nvvm.suld.3d.v2i32.clamp
-    nvvm_suld_3d_v2i32_trap,                   // llvm.nvvm.suld.3d.v2i32.trap
-    nvvm_suld_3d_v2i32_zero,                   // llvm.nvvm.suld.3d.v2i32.zero
-    nvvm_suld_3d_v2i64_clamp,                  // llvm.nvvm.suld.3d.v2i64.clamp
-    nvvm_suld_3d_v2i64_trap,                   // llvm.nvvm.suld.3d.v2i64.trap
-    nvvm_suld_3d_v2i64_zero,                   // llvm.nvvm.suld.3d.v2i64.zero
-    nvvm_suld_3d_v2i8_clamp,                   // llvm.nvvm.suld.3d.v2i8.clamp
-    nvvm_suld_3d_v2i8_trap,                    // llvm.nvvm.suld.3d.v2i8.trap
-    nvvm_suld_3d_v2i8_zero,                    // llvm.nvvm.suld.3d.v2i8.zero
-    nvvm_suld_3d_v4i16_clamp,                  // llvm.nvvm.suld.3d.v4i16.clamp
-    nvvm_suld_3d_v4i16_trap,                   // llvm.nvvm.suld.3d.v4i16.trap
-    nvvm_suld_3d_v4i16_zero,                   // llvm.nvvm.suld.3d.v4i16.zero
-    nvvm_suld_3d_v4i32_clamp,                  // llvm.nvvm.suld.3d.v4i32.clamp
-    nvvm_suld_3d_v4i32_trap,                   // llvm.nvvm.suld.3d.v4i32.trap
-    nvvm_suld_3d_v4i32_zero,                   // llvm.nvvm.suld.3d.v4i32.zero
-    nvvm_suld_3d_v4i8_clamp,                   // llvm.nvvm.suld.3d.v4i8.clamp
-    nvvm_suld_3d_v4i8_trap,                    // llvm.nvvm.suld.3d.v4i8.trap
-    nvvm_suld_3d_v4i8_zero,                    // llvm.nvvm.suld.3d.v4i8.zero
-    nvvm_suq_array_size,                       // llvm.nvvm.suq.array.size
-    nvvm_suq_channel_data_type,                // llvm.nvvm.suq.channel.data.type
-    nvvm_suq_channel_order,                    // llvm.nvvm.suq.channel.order
-    nvvm_suq_depth,                            // llvm.nvvm.suq.depth
-    nvvm_suq_height,                           // llvm.nvvm.suq.height
-    nvvm_suq_width,                            // llvm.nvvm.suq.width
-    nvvm_sust_b_1d_array_i16_clamp,            // llvm.nvvm.sust.b.1d.array.i16.clamp
-    nvvm_sust_b_1d_array_i16_trap,             // llvm.nvvm.sust.b.1d.array.i16.trap
-    nvvm_sust_b_1d_array_i16_zero,             // llvm.nvvm.sust.b.1d.array.i16.zero
-    nvvm_sust_b_1d_array_i32_clamp,            // llvm.nvvm.sust.b.1d.array.i32.clamp
-    nvvm_sust_b_1d_array_i32_trap,             // llvm.nvvm.sust.b.1d.array.i32.trap
-    nvvm_sust_b_1d_array_i32_zero,             // llvm.nvvm.sust.b.1d.array.i32.zero
-    nvvm_sust_b_1d_array_i64_clamp,            // llvm.nvvm.sust.b.1d.array.i64.clamp
-    nvvm_sust_b_1d_array_i64_trap,             // llvm.nvvm.sust.b.1d.array.i64.trap
-    nvvm_sust_b_1d_array_i64_zero,             // llvm.nvvm.sust.b.1d.array.i64.zero
-    nvvm_sust_b_1d_array_i8_clamp,             // llvm.nvvm.sust.b.1d.array.i8.clamp
-    nvvm_sust_b_1d_array_i8_trap,              // llvm.nvvm.sust.b.1d.array.i8.trap
-    nvvm_sust_b_1d_array_i8_zero,              // llvm.nvvm.sust.b.1d.array.i8.zero
-    nvvm_sust_b_1d_array_v2i16_clamp,          // llvm.nvvm.sust.b.1d.array.v2i16.clamp
-    nvvm_sust_b_1d_array_v2i16_trap,           // llvm.nvvm.sust.b.1d.array.v2i16.trap
-    nvvm_sust_b_1d_array_v2i16_zero,           // llvm.nvvm.sust.b.1d.array.v2i16.zero
-    nvvm_sust_b_1d_array_v2i32_clamp,          // llvm.nvvm.sust.b.1d.array.v2i32.clamp
-    nvvm_sust_b_1d_array_v2i32_trap,           // llvm.nvvm.sust.b.1d.array.v2i32.trap
-    nvvm_sust_b_1d_array_v2i32_zero,           // llvm.nvvm.sust.b.1d.array.v2i32.zero
-    nvvm_sust_b_1d_array_v2i64_clamp,          // llvm.nvvm.sust.b.1d.array.v2i64.clamp
-    nvvm_sust_b_1d_array_v2i64_trap,           // llvm.nvvm.sust.b.1d.array.v2i64.trap
-    nvvm_sust_b_1d_array_v2i64_zero,           // llvm.nvvm.sust.b.1d.array.v2i64.zero
-    nvvm_sust_b_1d_array_v2i8_clamp,           // llvm.nvvm.sust.b.1d.array.v2i8.clamp
-    nvvm_sust_b_1d_array_v2i8_trap,            // llvm.nvvm.sust.b.1d.array.v2i8.trap
-    nvvm_sust_b_1d_array_v2i8_zero,            // llvm.nvvm.sust.b.1d.array.v2i8.zero
-    nvvm_sust_b_1d_array_v4i16_clamp,          // llvm.nvvm.sust.b.1d.array.v4i16.clamp
-    nvvm_sust_b_1d_array_v4i16_trap,           // llvm.nvvm.sust.b.1d.array.v4i16.trap
-    nvvm_sust_b_1d_array_v4i16_zero,           // llvm.nvvm.sust.b.1d.array.v4i16.zero
-    nvvm_sust_b_1d_array_v4i32_clamp,          // llvm.nvvm.sust.b.1d.array.v4i32.clamp
-    nvvm_sust_b_1d_array_v4i32_trap,           // llvm.nvvm.sust.b.1d.array.v4i32.trap
-    nvvm_sust_b_1d_array_v4i32_zero,           // llvm.nvvm.sust.b.1d.array.v4i32.zero
-    nvvm_sust_b_1d_array_v4i8_clamp,           // llvm.nvvm.sust.b.1d.array.v4i8.clamp
-    nvvm_sust_b_1d_array_v4i8_trap,            // llvm.nvvm.sust.b.1d.array.v4i8.trap
-    nvvm_sust_b_1d_array_v4i8_zero,            // llvm.nvvm.sust.b.1d.array.v4i8.zero
-    nvvm_sust_b_1d_i16_clamp,                  // llvm.nvvm.sust.b.1d.i16.clamp
-    nvvm_sust_b_1d_i16_trap,                   // llvm.nvvm.sust.b.1d.i16.trap
-    nvvm_sust_b_1d_i16_zero,                   // llvm.nvvm.sust.b.1d.i16.zero
-    nvvm_sust_b_1d_i32_clamp,                  // llvm.nvvm.sust.b.1d.i32.clamp
-    nvvm_sust_b_1d_i32_trap,                   // llvm.nvvm.sust.b.1d.i32.trap
-    nvvm_sust_b_1d_i32_zero,                   // llvm.nvvm.sust.b.1d.i32.zero
-    nvvm_sust_b_1d_i64_clamp,                  // llvm.nvvm.sust.b.1d.i64.clamp
-    nvvm_sust_b_1d_i64_trap,                   // llvm.nvvm.sust.b.1d.i64.trap
-    nvvm_sust_b_1d_i64_zero,                   // llvm.nvvm.sust.b.1d.i64.zero
-    nvvm_sust_b_1d_i8_clamp,                   // llvm.nvvm.sust.b.1d.i8.clamp
-    nvvm_sust_b_1d_i8_trap,                    // llvm.nvvm.sust.b.1d.i8.trap
-    nvvm_sust_b_1d_i8_zero,                    // llvm.nvvm.sust.b.1d.i8.zero
-    nvvm_sust_b_1d_v2i16_clamp,                // llvm.nvvm.sust.b.1d.v2i16.clamp
-    nvvm_sust_b_1d_v2i16_trap,                 // llvm.nvvm.sust.b.1d.v2i16.trap
-    nvvm_sust_b_1d_v2i16_zero,                 // llvm.nvvm.sust.b.1d.v2i16.zero
-    nvvm_sust_b_1d_v2i32_clamp,                // llvm.nvvm.sust.b.1d.v2i32.clamp
-    nvvm_sust_b_1d_v2i32_trap,                 // llvm.nvvm.sust.b.1d.v2i32.trap
-    nvvm_sust_b_1d_v2i32_zero,                 // llvm.nvvm.sust.b.1d.v2i32.zero
-    nvvm_sust_b_1d_v2i64_clamp,                // llvm.nvvm.sust.b.1d.v2i64.clamp
-    nvvm_sust_b_1d_v2i64_trap,                 // llvm.nvvm.sust.b.1d.v2i64.trap
-    nvvm_sust_b_1d_v2i64_zero,                 // llvm.nvvm.sust.b.1d.v2i64.zero
-    nvvm_sust_b_1d_v2i8_clamp,                 // llvm.nvvm.sust.b.1d.v2i8.clamp
-    nvvm_sust_b_1d_v2i8_trap,                  // llvm.nvvm.sust.b.1d.v2i8.trap
-    nvvm_sust_b_1d_v2i8_zero,                  // llvm.nvvm.sust.b.1d.v2i8.zero
-    nvvm_sust_b_1d_v4i16_clamp,                // llvm.nvvm.sust.b.1d.v4i16.clamp
-    nvvm_sust_b_1d_v4i16_trap,                 // llvm.nvvm.sust.b.1d.v4i16.trap
-    nvvm_sust_b_1d_v4i16_zero,                 // llvm.nvvm.sust.b.1d.v4i16.zero
-    nvvm_sust_b_1d_v4i32_clamp,                // llvm.nvvm.sust.b.1d.v4i32.clamp
-    nvvm_sust_b_1d_v4i32_trap,                 // llvm.nvvm.sust.b.1d.v4i32.trap
-    nvvm_sust_b_1d_v4i32_zero,                 // llvm.nvvm.sust.b.1d.v4i32.zero
-    nvvm_sust_b_1d_v4i8_clamp,                 // llvm.nvvm.sust.b.1d.v4i8.clamp
-    nvvm_sust_b_1d_v4i8_trap,                  // llvm.nvvm.sust.b.1d.v4i8.trap
-    nvvm_sust_b_1d_v4i8_zero,                  // llvm.nvvm.sust.b.1d.v4i8.zero
-    nvvm_sust_b_2d_array_i16_clamp,            // llvm.nvvm.sust.b.2d.array.i16.clamp
-    nvvm_sust_b_2d_array_i16_trap,             // llvm.nvvm.sust.b.2d.array.i16.trap
-    nvvm_sust_b_2d_array_i16_zero,             // llvm.nvvm.sust.b.2d.array.i16.zero
-    nvvm_sust_b_2d_array_i32_clamp,            // llvm.nvvm.sust.b.2d.array.i32.clamp
-    nvvm_sust_b_2d_array_i32_trap,             // llvm.nvvm.sust.b.2d.array.i32.trap
-    nvvm_sust_b_2d_array_i32_zero,             // llvm.nvvm.sust.b.2d.array.i32.zero
-    nvvm_sust_b_2d_array_i64_clamp,            // llvm.nvvm.sust.b.2d.array.i64.clamp
-    nvvm_sust_b_2d_array_i64_trap,             // llvm.nvvm.sust.b.2d.array.i64.trap
-    nvvm_sust_b_2d_array_i64_zero,             // llvm.nvvm.sust.b.2d.array.i64.zero
-    nvvm_sust_b_2d_array_i8_clamp,             // llvm.nvvm.sust.b.2d.array.i8.clamp
-    nvvm_sust_b_2d_array_i8_trap,              // llvm.nvvm.sust.b.2d.array.i8.trap
-    nvvm_sust_b_2d_array_i8_zero,              // llvm.nvvm.sust.b.2d.array.i8.zero
-    nvvm_sust_b_2d_array_v2i16_clamp,          // llvm.nvvm.sust.b.2d.array.v2i16.clamp
-    nvvm_sust_b_2d_array_v2i16_trap,           // llvm.nvvm.sust.b.2d.array.v2i16.trap
-    nvvm_sust_b_2d_array_v2i16_zero,           // llvm.nvvm.sust.b.2d.array.v2i16.zero
-    nvvm_sust_b_2d_array_v2i32_clamp,          // llvm.nvvm.sust.b.2d.array.v2i32.clamp
-    nvvm_sust_b_2d_array_v2i32_trap,           // llvm.nvvm.sust.b.2d.array.v2i32.trap
-    nvvm_sust_b_2d_array_v2i32_zero,           // llvm.nvvm.sust.b.2d.array.v2i32.zero
-    nvvm_sust_b_2d_array_v2i64_clamp,          // llvm.nvvm.sust.b.2d.array.v2i64.clamp
-    nvvm_sust_b_2d_array_v2i64_trap,           // llvm.nvvm.sust.b.2d.array.v2i64.trap
-    nvvm_sust_b_2d_array_v2i64_zero,           // llvm.nvvm.sust.b.2d.array.v2i64.zero
-    nvvm_sust_b_2d_array_v2i8_clamp,           // llvm.nvvm.sust.b.2d.array.v2i8.clamp
-    nvvm_sust_b_2d_array_v2i8_trap,            // llvm.nvvm.sust.b.2d.array.v2i8.trap
-    nvvm_sust_b_2d_array_v2i8_zero,            // llvm.nvvm.sust.b.2d.array.v2i8.zero
-    nvvm_sust_b_2d_array_v4i16_clamp,          // llvm.nvvm.sust.b.2d.array.v4i16.clamp
-    nvvm_sust_b_2d_array_v4i16_trap,           // llvm.nvvm.sust.b.2d.array.v4i16.trap
-    nvvm_sust_b_2d_array_v4i16_zero,           // llvm.nvvm.sust.b.2d.array.v4i16.zero
-    nvvm_sust_b_2d_array_v4i32_clamp,          // llvm.nvvm.sust.b.2d.array.v4i32.clamp
-    nvvm_sust_b_2d_array_v4i32_trap,           // llvm.nvvm.sust.b.2d.array.v4i32.trap
-    nvvm_sust_b_2d_array_v4i32_zero,           // llvm.nvvm.sust.b.2d.array.v4i32.zero
-    nvvm_sust_b_2d_array_v4i8_clamp,           // llvm.nvvm.sust.b.2d.array.v4i8.clamp
-    nvvm_sust_b_2d_array_v4i8_trap,            // llvm.nvvm.sust.b.2d.array.v4i8.trap
-    nvvm_sust_b_2d_array_v4i8_zero,            // llvm.nvvm.sust.b.2d.array.v4i8.zero
-    nvvm_sust_b_2d_i16_clamp,                  // llvm.nvvm.sust.b.2d.i16.clamp
-    nvvm_sust_b_2d_i16_trap,                   // llvm.nvvm.sust.b.2d.i16.trap
-    nvvm_sust_b_2d_i16_zero,                   // llvm.nvvm.sust.b.2d.i16.zero
-    nvvm_sust_b_2d_i32_clamp,                  // llvm.nvvm.sust.b.2d.i32.clamp
-    nvvm_sust_b_2d_i32_trap,                   // llvm.nvvm.sust.b.2d.i32.trap
-    nvvm_sust_b_2d_i32_zero,                   // llvm.nvvm.sust.b.2d.i32.zero
-    nvvm_sust_b_2d_i64_clamp,                  // llvm.nvvm.sust.b.2d.i64.clamp
-    nvvm_sust_b_2d_i64_trap,                   // llvm.nvvm.sust.b.2d.i64.trap
-    nvvm_sust_b_2d_i64_zero,                   // llvm.nvvm.sust.b.2d.i64.zero
-    nvvm_sust_b_2d_i8_clamp,                   // llvm.nvvm.sust.b.2d.i8.clamp
-    nvvm_sust_b_2d_i8_trap,                    // llvm.nvvm.sust.b.2d.i8.trap
-    nvvm_sust_b_2d_i8_zero,                    // llvm.nvvm.sust.b.2d.i8.zero
-    nvvm_sust_b_2d_v2i16_clamp,                // llvm.nvvm.sust.b.2d.v2i16.clamp
-    nvvm_sust_b_2d_v2i16_trap,                 // llvm.nvvm.sust.b.2d.v2i16.trap
-    nvvm_sust_b_2d_v2i16_zero,                 // llvm.nvvm.sust.b.2d.v2i16.zero
-    nvvm_sust_b_2d_v2i32_clamp,                // llvm.nvvm.sust.b.2d.v2i32.clamp
-    nvvm_sust_b_2d_v2i32_trap,                 // llvm.nvvm.sust.b.2d.v2i32.trap
-    nvvm_sust_b_2d_v2i32_zero,                 // llvm.nvvm.sust.b.2d.v2i32.zero
-    nvvm_sust_b_2d_v2i64_clamp,                // llvm.nvvm.sust.b.2d.v2i64.clamp
-    nvvm_sust_b_2d_v2i64_trap,                 // llvm.nvvm.sust.b.2d.v2i64.trap
-    nvvm_sust_b_2d_v2i64_zero,                 // llvm.nvvm.sust.b.2d.v2i64.zero
-    nvvm_sust_b_2d_v2i8_clamp,                 // llvm.nvvm.sust.b.2d.v2i8.clamp
-    nvvm_sust_b_2d_v2i8_trap,                  // llvm.nvvm.sust.b.2d.v2i8.trap
-    nvvm_sust_b_2d_v2i8_zero,                  // llvm.nvvm.sust.b.2d.v2i8.zero
-    nvvm_sust_b_2d_v4i16_clamp,                // llvm.nvvm.sust.b.2d.v4i16.clamp
-    nvvm_sust_b_2d_v4i16_trap,                 // llvm.nvvm.sust.b.2d.v4i16.trap
-    nvvm_sust_b_2d_v4i16_zero,                 // llvm.nvvm.sust.b.2d.v4i16.zero
-    nvvm_sust_b_2d_v4i32_clamp,                // llvm.nvvm.sust.b.2d.v4i32.clamp
-    nvvm_sust_b_2d_v4i32_trap,                 // llvm.nvvm.sust.b.2d.v4i32.trap
-    nvvm_sust_b_2d_v4i32_zero,                 // llvm.nvvm.sust.b.2d.v4i32.zero
-    nvvm_sust_b_2d_v4i8_clamp,                 // llvm.nvvm.sust.b.2d.v4i8.clamp
-    nvvm_sust_b_2d_v4i8_trap,                  // llvm.nvvm.sust.b.2d.v4i8.trap
-    nvvm_sust_b_2d_v4i8_zero,                  // llvm.nvvm.sust.b.2d.v4i8.zero
-    nvvm_sust_b_3d_i16_clamp,                  // llvm.nvvm.sust.b.3d.i16.clamp
-    nvvm_sust_b_3d_i16_trap,                   // llvm.nvvm.sust.b.3d.i16.trap
-    nvvm_sust_b_3d_i16_zero,                   // llvm.nvvm.sust.b.3d.i16.zero
-    nvvm_sust_b_3d_i32_clamp,                  // llvm.nvvm.sust.b.3d.i32.clamp
-    nvvm_sust_b_3d_i32_trap,                   // llvm.nvvm.sust.b.3d.i32.trap
-    nvvm_sust_b_3d_i32_zero,                   // llvm.nvvm.sust.b.3d.i32.zero
-    nvvm_sust_b_3d_i64_clamp,                  // llvm.nvvm.sust.b.3d.i64.clamp
-    nvvm_sust_b_3d_i64_trap,                   // llvm.nvvm.sust.b.3d.i64.trap
-    nvvm_sust_b_3d_i64_zero,                   // llvm.nvvm.sust.b.3d.i64.zero
-    nvvm_sust_b_3d_i8_clamp,                   // llvm.nvvm.sust.b.3d.i8.clamp
-    nvvm_sust_b_3d_i8_trap,                    // llvm.nvvm.sust.b.3d.i8.trap
-    nvvm_sust_b_3d_i8_zero,                    // llvm.nvvm.sust.b.3d.i8.zero
-    nvvm_sust_b_3d_v2i16_clamp,                // llvm.nvvm.sust.b.3d.v2i16.clamp
-    nvvm_sust_b_3d_v2i16_trap,                 // llvm.nvvm.sust.b.3d.v2i16.trap
-    nvvm_sust_b_3d_v2i16_zero,                 // llvm.nvvm.sust.b.3d.v2i16.zero
-    nvvm_sust_b_3d_v2i32_clamp,                // llvm.nvvm.sust.b.3d.v2i32.clamp
-    nvvm_sust_b_3d_v2i32_trap,                 // llvm.nvvm.sust.b.3d.v2i32.trap
-    nvvm_sust_b_3d_v2i32_zero,                 // llvm.nvvm.sust.b.3d.v2i32.zero
-    nvvm_sust_b_3d_v2i64_clamp,                // llvm.nvvm.sust.b.3d.v2i64.clamp
-    nvvm_sust_b_3d_v2i64_trap,                 // llvm.nvvm.sust.b.3d.v2i64.trap
-    nvvm_sust_b_3d_v2i64_zero,                 // llvm.nvvm.sust.b.3d.v2i64.zero
-    nvvm_sust_b_3d_v2i8_clamp,                 // llvm.nvvm.sust.b.3d.v2i8.clamp
-    nvvm_sust_b_3d_v2i8_trap,                  // llvm.nvvm.sust.b.3d.v2i8.trap
-    nvvm_sust_b_3d_v2i8_zero,                  // llvm.nvvm.sust.b.3d.v2i8.zero
-    nvvm_sust_b_3d_v4i16_clamp,                // llvm.nvvm.sust.b.3d.v4i16.clamp
-    nvvm_sust_b_3d_v4i16_trap,                 // llvm.nvvm.sust.b.3d.v4i16.trap
-    nvvm_sust_b_3d_v4i16_zero,                 // llvm.nvvm.sust.b.3d.v4i16.zero
-    nvvm_sust_b_3d_v4i32_clamp,                // llvm.nvvm.sust.b.3d.v4i32.clamp
-    nvvm_sust_b_3d_v4i32_trap,                 // llvm.nvvm.sust.b.3d.v4i32.trap
-    nvvm_sust_b_3d_v4i32_zero,                 // llvm.nvvm.sust.b.3d.v4i32.zero
-    nvvm_sust_b_3d_v4i8_clamp,                 // llvm.nvvm.sust.b.3d.v4i8.clamp
-    nvvm_sust_b_3d_v4i8_trap,                  // llvm.nvvm.sust.b.3d.v4i8.trap
-    nvvm_sust_b_3d_v4i8_zero,                  // llvm.nvvm.sust.b.3d.v4i8.zero
-    nvvm_sust_p_1d_array_i16_trap,             // llvm.nvvm.sust.p.1d.array.i16.trap
-    nvvm_sust_p_1d_array_i32_trap,             // llvm.nvvm.sust.p.1d.array.i32.trap
-    nvvm_sust_p_1d_array_i8_trap,              // llvm.nvvm.sust.p.1d.array.i8.trap
-    nvvm_sust_p_1d_array_v2i16_trap,           // llvm.nvvm.sust.p.1d.array.v2i16.trap
-    nvvm_sust_p_1d_array_v2i32_trap,           // llvm.nvvm.sust.p.1d.array.v2i32.trap
-    nvvm_sust_p_1d_array_v2i8_trap,            // llvm.nvvm.sust.p.1d.array.v2i8.trap
-    nvvm_sust_p_1d_array_v4i16_trap,           // llvm.nvvm.sust.p.1d.array.v4i16.trap
-    nvvm_sust_p_1d_array_v4i32_trap,           // llvm.nvvm.sust.p.1d.array.v4i32.trap
-    nvvm_sust_p_1d_array_v4i8_trap,            // llvm.nvvm.sust.p.1d.array.v4i8.trap
-    nvvm_sust_p_1d_i16_trap,                   // llvm.nvvm.sust.p.1d.i16.trap
-    nvvm_sust_p_1d_i32_trap,                   // llvm.nvvm.sust.p.1d.i32.trap
-    nvvm_sust_p_1d_i8_trap,                    // llvm.nvvm.sust.p.1d.i8.trap
-    nvvm_sust_p_1d_v2i16_trap,                 // llvm.nvvm.sust.p.1d.v2i16.trap
-    nvvm_sust_p_1d_v2i32_trap,                 // llvm.nvvm.sust.p.1d.v2i32.trap
-    nvvm_sust_p_1d_v2i8_trap,                  // llvm.nvvm.sust.p.1d.v2i8.trap
-    nvvm_sust_p_1d_v4i16_trap,                 // llvm.nvvm.sust.p.1d.v4i16.trap
-    nvvm_sust_p_1d_v4i32_trap,                 // llvm.nvvm.sust.p.1d.v4i32.trap
-    nvvm_sust_p_1d_v4i8_trap,                  // llvm.nvvm.sust.p.1d.v4i8.trap
-    nvvm_sust_p_2d_array_i16_trap,             // llvm.nvvm.sust.p.2d.array.i16.trap
-    nvvm_sust_p_2d_array_i32_trap,             // llvm.nvvm.sust.p.2d.array.i32.trap
-    nvvm_sust_p_2d_array_i8_trap,              // llvm.nvvm.sust.p.2d.array.i8.trap
-    nvvm_sust_p_2d_array_v2i16_trap,           // llvm.nvvm.sust.p.2d.array.v2i16.trap
-    nvvm_sust_p_2d_array_v2i32_trap,           // llvm.nvvm.sust.p.2d.array.v2i32.trap
-    nvvm_sust_p_2d_array_v2i8_trap,            // llvm.nvvm.sust.p.2d.array.v2i8.trap
-    nvvm_sust_p_2d_array_v4i16_trap,           // llvm.nvvm.sust.p.2d.array.v4i16.trap
-    nvvm_sust_p_2d_array_v4i32_trap,           // llvm.nvvm.sust.p.2d.array.v4i32.trap
-    nvvm_sust_p_2d_array_v4i8_trap,            // llvm.nvvm.sust.p.2d.array.v4i8.trap
-    nvvm_sust_p_2d_i16_trap,                   // llvm.nvvm.sust.p.2d.i16.trap
-    nvvm_sust_p_2d_i32_trap,                   // llvm.nvvm.sust.p.2d.i32.trap
-    nvvm_sust_p_2d_i8_trap,                    // llvm.nvvm.sust.p.2d.i8.trap
-    nvvm_sust_p_2d_v2i16_trap,                 // llvm.nvvm.sust.p.2d.v2i16.trap
-    nvvm_sust_p_2d_v2i32_trap,                 // llvm.nvvm.sust.p.2d.v2i32.trap
-    nvvm_sust_p_2d_v2i8_trap,                  // llvm.nvvm.sust.p.2d.v2i8.trap
-    nvvm_sust_p_2d_v4i16_trap,                 // llvm.nvvm.sust.p.2d.v4i16.trap
-    nvvm_sust_p_2d_v4i32_trap,                 // llvm.nvvm.sust.p.2d.v4i32.trap
-    nvvm_sust_p_2d_v4i8_trap,                  // llvm.nvvm.sust.p.2d.v4i8.trap
-    nvvm_sust_p_3d_i16_trap,                   // llvm.nvvm.sust.p.3d.i16.trap
-    nvvm_sust_p_3d_i32_trap,                   // llvm.nvvm.sust.p.3d.i32.trap
-    nvvm_sust_p_3d_i8_trap,                    // llvm.nvvm.sust.p.3d.i8.trap
-    nvvm_sust_p_3d_v2i16_trap,                 // llvm.nvvm.sust.p.3d.v2i16.trap
-    nvvm_sust_p_3d_v2i32_trap,                 // llvm.nvvm.sust.p.3d.v2i32.trap
-    nvvm_sust_p_3d_v2i8_trap,                  // llvm.nvvm.sust.p.3d.v2i8.trap
-    nvvm_sust_p_3d_v4i16_trap,                 // llvm.nvvm.sust.p.3d.v4i16.trap
-    nvvm_sust_p_3d_v4i32_trap,                 // llvm.nvvm.sust.p.3d.v4i32.trap
-    nvvm_sust_p_3d_v4i8_trap,                  // llvm.nvvm.sust.p.3d.v4i8.trap
-    nvvm_swap_lo_hi_b64,                       // llvm.nvvm.swap.lo.hi.b64
-    nvvm_tex_1d_array_grad_v4f32_f32,          // llvm.nvvm.tex.1d.array.grad.v4f32.f32
-    nvvm_tex_1d_array_grad_v4s32_f32,          // llvm.nvvm.tex.1d.array.grad.v4s32.f32
-    nvvm_tex_1d_array_grad_v4u32_f32,          // llvm.nvvm.tex.1d.array.grad.v4u32.f32
-    nvvm_tex_1d_array_level_v4f32_f32,         // llvm.nvvm.tex.1d.array.level.v4f32.f32
-    nvvm_tex_1d_array_level_v4s32_f32,         // llvm.nvvm.tex.1d.array.level.v4s32.f32
-    nvvm_tex_1d_array_level_v4u32_f32,         // llvm.nvvm.tex.1d.array.level.v4u32.f32
-    nvvm_tex_1d_array_v4f32_f32,               // llvm.nvvm.tex.1d.array.v4f32.f32
-    nvvm_tex_1d_array_v4f32_s32,               // llvm.nvvm.tex.1d.array.v4f32.s32
-    nvvm_tex_1d_array_v4s32_f32,               // llvm.nvvm.tex.1d.array.v4s32.f32
-    nvvm_tex_1d_array_v4s32_s32,               // llvm.nvvm.tex.1d.array.v4s32.s32
-    nvvm_tex_1d_array_v4u32_f32,               // llvm.nvvm.tex.1d.array.v4u32.f32
-    nvvm_tex_1d_array_v4u32_s32,               // llvm.nvvm.tex.1d.array.v4u32.s32
-    nvvm_tex_1d_grad_v4f32_f32,                // llvm.nvvm.tex.1d.grad.v4f32.f32
-    nvvm_tex_1d_grad_v4s32_f32,                // llvm.nvvm.tex.1d.grad.v4s32.f32
-    nvvm_tex_1d_grad_v4u32_f32,                // llvm.nvvm.tex.1d.grad.v4u32.f32
-    nvvm_tex_1d_level_v4f32_f32,               // llvm.nvvm.tex.1d.level.v4f32.f32
-    nvvm_tex_1d_level_v4s32_f32,               // llvm.nvvm.tex.1d.level.v4s32.f32
-    nvvm_tex_1d_level_v4u32_f32,               // llvm.nvvm.tex.1d.level.v4u32.f32
-    nvvm_tex_1d_v4f32_f32,                     // llvm.nvvm.tex.1d.v4f32.f32
-    nvvm_tex_1d_v4f32_s32,                     // llvm.nvvm.tex.1d.v4f32.s32
-    nvvm_tex_1d_v4s32_f32,                     // llvm.nvvm.tex.1d.v4s32.f32
-    nvvm_tex_1d_v4s32_s32,                     // llvm.nvvm.tex.1d.v4s32.s32
-    nvvm_tex_1d_v4u32_f32,                     // llvm.nvvm.tex.1d.v4u32.f32
-    nvvm_tex_1d_v4u32_s32,                     // llvm.nvvm.tex.1d.v4u32.s32
-    nvvm_tex_2d_array_grad_v4f32_f32,          // llvm.nvvm.tex.2d.array.grad.v4f32.f32
-    nvvm_tex_2d_array_grad_v4s32_f32,          // llvm.nvvm.tex.2d.array.grad.v4s32.f32
-    nvvm_tex_2d_array_grad_v4u32_f32,          // llvm.nvvm.tex.2d.array.grad.v4u32.f32
-    nvvm_tex_2d_array_level_v4f32_f32,         // llvm.nvvm.tex.2d.array.level.v4f32.f32
-    nvvm_tex_2d_array_level_v4s32_f32,         // llvm.nvvm.tex.2d.array.level.v4s32.f32
-    nvvm_tex_2d_array_level_v4u32_f32,         // llvm.nvvm.tex.2d.array.level.v4u32.f32
-    nvvm_tex_2d_array_v4f32_f32,               // llvm.nvvm.tex.2d.array.v4f32.f32
-    nvvm_tex_2d_array_v4f32_s32,               // llvm.nvvm.tex.2d.array.v4f32.s32
-    nvvm_tex_2d_array_v4s32_f32,               // llvm.nvvm.tex.2d.array.v4s32.f32
-    nvvm_tex_2d_array_v4s32_s32,               // llvm.nvvm.tex.2d.array.v4s32.s32
-    nvvm_tex_2d_array_v4u32_f32,               // llvm.nvvm.tex.2d.array.v4u32.f32
-    nvvm_tex_2d_array_v4u32_s32,               // llvm.nvvm.tex.2d.array.v4u32.s32
-    nvvm_tex_2d_grad_v4f32_f32,                // llvm.nvvm.tex.2d.grad.v4f32.f32
-    nvvm_tex_2d_grad_v4s32_f32,                // llvm.nvvm.tex.2d.grad.v4s32.f32
-    nvvm_tex_2d_grad_v4u32_f32,                // llvm.nvvm.tex.2d.grad.v4u32.f32
-    nvvm_tex_2d_level_v4f32_f32,               // llvm.nvvm.tex.2d.level.v4f32.f32
-    nvvm_tex_2d_level_v4s32_f32,               // llvm.nvvm.tex.2d.level.v4s32.f32
-    nvvm_tex_2d_level_v4u32_f32,               // llvm.nvvm.tex.2d.level.v4u32.f32
-    nvvm_tex_2d_v4f32_f32,                     // llvm.nvvm.tex.2d.v4f32.f32
-    nvvm_tex_2d_v4f32_s32,                     // llvm.nvvm.tex.2d.v4f32.s32
-    nvvm_tex_2d_v4s32_f32,                     // llvm.nvvm.tex.2d.v4s32.f32
-    nvvm_tex_2d_v4s32_s32,                     // llvm.nvvm.tex.2d.v4s32.s32
-    nvvm_tex_2d_v4u32_f32,                     // llvm.nvvm.tex.2d.v4u32.f32
-    nvvm_tex_2d_v4u32_s32,                     // llvm.nvvm.tex.2d.v4u32.s32
-    nvvm_tex_3d_grad_v4f32_f32,                // llvm.nvvm.tex.3d.grad.v4f32.f32
-    nvvm_tex_3d_grad_v4s32_f32,                // llvm.nvvm.tex.3d.grad.v4s32.f32
-    nvvm_tex_3d_grad_v4u32_f32,                // llvm.nvvm.tex.3d.grad.v4u32.f32
-    nvvm_tex_3d_level_v4f32_f32,               // llvm.nvvm.tex.3d.level.v4f32.f32
-    nvvm_tex_3d_level_v4s32_f32,               // llvm.nvvm.tex.3d.level.v4s32.f32
-    nvvm_tex_3d_level_v4u32_f32,               // llvm.nvvm.tex.3d.level.v4u32.f32
-    nvvm_tex_3d_v4f32_f32,                     // llvm.nvvm.tex.3d.v4f32.f32
-    nvvm_tex_3d_v4f32_s32,                     // llvm.nvvm.tex.3d.v4f32.s32
-    nvvm_tex_3d_v4s32_f32,                     // llvm.nvvm.tex.3d.v4s32.f32
-    nvvm_tex_3d_v4s32_s32,                     // llvm.nvvm.tex.3d.v4s32.s32
-    nvvm_tex_3d_v4u32_f32,                     // llvm.nvvm.tex.3d.v4u32.f32
-    nvvm_tex_3d_v4u32_s32,                     // llvm.nvvm.tex.3d.v4u32.s32
-    nvvm_tex_cube_array_level_v4f32_f32,       // llvm.nvvm.tex.cube.array.level.v4f32.f32
-    nvvm_tex_cube_array_level_v4s32_f32,       // llvm.nvvm.tex.cube.array.level.v4s32.f32
-    nvvm_tex_cube_array_level_v4u32_f32,       // llvm.nvvm.tex.cube.array.level.v4u32.f32
-    nvvm_tex_cube_array_v4f32_f32,             // llvm.nvvm.tex.cube.array.v4f32.f32
-    nvvm_tex_cube_array_v4s32_f32,             // llvm.nvvm.tex.cube.array.v4s32.f32
-    nvvm_tex_cube_array_v4u32_f32,             // llvm.nvvm.tex.cube.array.v4u32.f32
-    nvvm_tex_cube_level_v4f32_f32,             // llvm.nvvm.tex.cube.level.v4f32.f32
-    nvvm_tex_cube_level_v4s32_f32,             // llvm.nvvm.tex.cube.level.v4s32.f32
-    nvvm_tex_cube_level_v4u32_f32,             // llvm.nvvm.tex.cube.level.v4u32.f32
-    nvvm_tex_cube_v4f32_f32,                   // llvm.nvvm.tex.cube.v4f32.f32
-    nvvm_tex_cube_v4s32_f32,                   // llvm.nvvm.tex.cube.v4s32.f32
-    nvvm_tex_cube_v4u32_f32,                   // llvm.nvvm.tex.cube.v4u32.f32
-    nvvm_tex_unified_1d_array_grad_v4f32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32
-    nvvm_tex_unified_1d_array_grad_v4s32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32
-    nvvm_tex_unified_1d_array_grad_v4u32_f32,  // llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32
-    nvvm_tex_unified_1d_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4f32.f32
-    nvvm_tex_unified_1d_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4s32.f32
-    nvvm_tex_unified_1d_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.1d.array.level.v4u32.f32
-    nvvm_tex_unified_1d_array_v4f32_f32,       // llvm.nvvm.tex.unified.1d.array.v4f32.f32
-    nvvm_tex_unified_1d_array_v4f32_s32,       // llvm.nvvm.tex.unified.1d.array.v4f32.s32
-    nvvm_tex_unified_1d_array_v4s32_f32,       // llvm.nvvm.tex.unified.1d.array.v4s32.f32
-    nvvm_tex_unified_1d_array_v4s32_s32,       // llvm.nvvm.tex.unified.1d.array.v4s32.s32
-    nvvm_tex_unified_1d_array_v4u32_f32,       // llvm.nvvm.tex.unified.1d.array.v4u32.f32
-    nvvm_tex_unified_1d_array_v4u32_s32,       // llvm.nvvm.tex.unified.1d.array.v4u32.s32
-    nvvm_tex_unified_1d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4f32.f32
-    nvvm_tex_unified_1d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4s32.f32
-    nvvm_tex_unified_1d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.1d.grad.v4u32.f32
-    nvvm_tex_unified_1d_level_v4f32_f32,       // llvm.nvvm.tex.unified.1d.level.v4f32.f32
-    nvvm_tex_unified_1d_level_v4s32_f32,       // llvm.nvvm.tex.unified.1d.level.v4s32.f32
-    nvvm_tex_unified_1d_level_v4u32_f32,       // llvm.nvvm.tex.unified.1d.level.v4u32.f32
-    nvvm_tex_unified_1d_v4f32_f32,             // llvm.nvvm.tex.unified.1d.v4f32.f32
-    nvvm_tex_unified_1d_v4f32_s32,             // llvm.nvvm.tex.unified.1d.v4f32.s32
-    nvvm_tex_unified_1d_v4s32_f32,             // llvm.nvvm.tex.unified.1d.v4s32.f32
-    nvvm_tex_unified_1d_v4s32_s32,             // llvm.nvvm.tex.unified.1d.v4s32.s32
-    nvvm_tex_unified_1d_v4u32_f32,             // llvm.nvvm.tex.unified.1d.v4u32.f32
-    nvvm_tex_unified_1d_v4u32_s32,             // llvm.nvvm.tex.unified.1d.v4u32.s32
-    nvvm_tex_unified_2d_array_grad_v4f32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32
-    nvvm_tex_unified_2d_array_grad_v4s32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32
-    nvvm_tex_unified_2d_array_grad_v4u32_f32,  // llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32
-    nvvm_tex_unified_2d_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4f32.f32
-    nvvm_tex_unified_2d_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4s32.f32
-    nvvm_tex_unified_2d_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.2d.array.level.v4u32.f32
-    nvvm_tex_unified_2d_array_v4f32_f32,       // llvm.nvvm.tex.unified.2d.array.v4f32.f32
-    nvvm_tex_unified_2d_array_v4f32_s32,       // llvm.nvvm.tex.unified.2d.array.v4f32.s32
-    nvvm_tex_unified_2d_array_v4s32_f32,       // llvm.nvvm.tex.unified.2d.array.v4s32.f32
-    nvvm_tex_unified_2d_array_v4s32_s32,       // llvm.nvvm.tex.unified.2d.array.v4s32.s32
-    nvvm_tex_unified_2d_array_v4u32_f32,       // llvm.nvvm.tex.unified.2d.array.v4u32.f32
-    nvvm_tex_unified_2d_array_v4u32_s32,       // llvm.nvvm.tex.unified.2d.array.v4u32.s32
-    nvvm_tex_unified_2d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4f32.f32
-    nvvm_tex_unified_2d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4s32.f32
-    nvvm_tex_unified_2d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.2d.grad.v4u32.f32
-    nvvm_tex_unified_2d_level_v4f32_f32,       // llvm.nvvm.tex.unified.2d.level.v4f32.f32
-    nvvm_tex_unified_2d_level_v4s32_f32,       // llvm.nvvm.tex.unified.2d.level.v4s32.f32
-    nvvm_tex_unified_2d_level_v4u32_f32,       // llvm.nvvm.tex.unified.2d.level.v4u32.f32
-    nvvm_tex_unified_2d_v4f32_f32,             // llvm.nvvm.tex.unified.2d.v4f32.f32
-    nvvm_tex_unified_2d_v4f32_s32,             // llvm.nvvm.tex.unified.2d.v4f32.s32
-    nvvm_tex_unified_2d_v4s32_f32,             // llvm.nvvm.tex.unified.2d.v4s32.f32
-    nvvm_tex_unified_2d_v4s32_s32,             // llvm.nvvm.tex.unified.2d.v4s32.s32
-    nvvm_tex_unified_2d_v4u32_f32,             // llvm.nvvm.tex.unified.2d.v4u32.f32
-    nvvm_tex_unified_2d_v4u32_s32,             // llvm.nvvm.tex.unified.2d.v4u32.s32
-    nvvm_tex_unified_3d_grad_v4f32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4f32.f32
-    nvvm_tex_unified_3d_grad_v4s32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4s32.f32
-    nvvm_tex_unified_3d_grad_v4u32_f32,        // llvm.nvvm.tex.unified.3d.grad.v4u32.f32
-    nvvm_tex_unified_3d_level_v4f32_f32,       // llvm.nvvm.tex.unified.3d.level.v4f32.f32
-    nvvm_tex_unified_3d_level_v4s32_f32,       // llvm.nvvm.tex.unified.3d.level.v4s32.f32
-    nvvm_tex_unified_3d_level_v4u32_f32,       // llvm.nvvm.tex.unified.3d.level.v4u32.f32
-    nvvm_tex_unified_3d_v4f32_f32,             // llvm.nvvm.tex.unified.3d.v4f32.f32
-    nvvm_tex_unified_3d_v4f32_s32,             // llvm.nvvm.tex.unified.3d.v4f32.s32
-    nvvm_tex_unified_3d_v4s32_f32,             // llvm.nvvm.tex.unified.3d.v4s32.f32
-    nvvm_tex_unified_3d_v4s32_s32,             // llvm.nvvm.tex.unified.3d.v4s32.s32
-    nvvm_tex_unified_3d_v4u32_f32,             // llvm.nvvm.tex.unified.3d.v4u32.f32
-    nvvm_tex_unified_3d_v4u32_s32,             // llvm.nvvm.tex.unified.3d.v4u32.s32
-    nvvm_tex_unified_cube_array_level_v4f32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4f32.f32
-    nvvm_tex_unified_cube_array_level_v4s32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4s32.f32
-    nvvm_tex_unified_cube_array_level_v4u32_f32,  // llvm.nvvm.tex.unified.cube.array.level.v4u32.f32
-    nvvm_tex_unified_cube_array_v4f32_f32,     // llvm.nvvm.tex.unified.cube.array.v4f32.f32
-    nvvm_tex_unified_cube_array_v4s32_f32,     // llvm.nvvm.tex.unified.cube.array.v4s32.f32
-    nvvm_tex_unified_cube_array_v4u32_f32,     // llvm.nvvm.tex.unified.cube.array.v4u32.f32
-    nvvm_tex_unified_cube_level_v4f32_f32,     // llvm.nvvm.tex.unified.cube.level.v4f32.f32
-    nvvm_tex_unified_cube_level_v4s32_f32,     // llvm.nvvm.tex.unified.cube.level.v4s32.f32
-    nvvm_tex_unified_cube_level_v4u32_f32,     // llvm.nvvm.tex.unified.cube.level.v4u32.f32
-    nvvm_tex_unified_cube_v4f32_f32,           // llvm.nvvm.tex.unified.cube.v4f32.f32
-    nvvm_tex_unified_cube_v4s32_f32,           // llvm.nvvm.tex.unified.cube.v4s32.f32
-    nvvm_tex_unified_cube_v4u32_f32,           // llvm.nvvm.tex.unified.cube.v4u32.f32
-    nvvm_texsurf_handle,                       // llvm.nvvm.texsurf.handle
-    nvvm_texsurf_handle_internal,              // llvm.nvvm.texsurf.handle.internal
-    nvvm_tld4_a_2d_v4f32_f32,                  // llvm.nvvm.tld4.a.2d.v4f32.f32
-    nvvm_tld4_a_2d_v4s32_f32,                  // llvm.nvvm.tld4.a.2d.v4s32.f32
-    nvvm_tld4_a_2d_v4u32_f32,                  // llvm.nvvm.tld4.a.2d.v4u32.f32
-    nvvm_tld4_b_2d_v4f32_f32,                  // llvm.nvvm.tld4.b.2d.v4f32.f32
-    nvvm_tld4_b_2d_v4s32_f32,                  // llvm.nvvm.tld4.b.2d.v4s32.f32
-    nvvm_tld4_b_2d_v4u32_f32,                  // llvm.nvvm.tld4.b.2d.v4u32.f32
-    nvvm_tld4_g_2d_v4f32_f32,                  // llvm.nvvm.tld4.g.2d.v4f32.f32
-    nvvm_tld4_g_2d_v4s32_f32,                  // llvm.nvvm.tld4.g.2d.v4s32.f32
-    nvvm_tld4_g_2d_v4u32_f32,                  // llvm.nvvm.tld4.g.2d.v4u32.f32
-    nvvm_tld4_r_2d_v4f32_f32,                  // llvm.nvvm.tld4.r.2d.v4f32.f32
-    nvvm_tld4_r_2d_v4s32_f32,                  // llvm.nvvm.tld4.r.2d.v4s32.f32
-    nvvm_tld4_r_2d_v4u32_f32,                  // llvm.nvvm.tld4.r.2d.v4u32.f32
-    nvvm_tld4_unified_a_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4f32.f32
-    nvvm_tld4_unified_a_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4s32.f32
-    nvvm_tld4_unified_a_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.a.2d.v4u32.f32
-    nvvm_tld4_unified_b_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4f32.f32
-    nvvm_tld4_unified_b_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4s32.f32
-    nvvm_tld4_unified_b_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.b.2d.v4u32.f32
-    nvvm_tld4_unified_g_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4f32.f32
-    nvvm_tld4_unified_g_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4s32.f32
-    nvvm_tld4_unified_g_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.g.2d.v4u32.f32
-    nvvm_tld4_unified_r_2d_v4f32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4f32.f32
-    nvvm_tld4_unified_r_2d_v4s32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4s32.f32
-    nvvm_tld4_unified_r_2d_v4u32_f32,          // llvm.nvvm.tld4.unified.r.2d.v4u32.f32
-    nvvm_trunc_d,                              // llvm.nvvm.trunc.d
-    nvvm_trunc_f,                              // llvm.nvvm.trunc.f
-    nvvm_trunc_ftz_f,                          // llvm.nvvm.trunc.ftz.f
-    nvvm_txq_array_size,                       // llvm.nvvm.txq.array.size
-    nvvm_txq_channel_data_type,                // llvm.nvvm.txq.channel.data.type
-    nvvm_txq_channel_order,                    // llvm.nvvm.txq.channel.order
-    nvvm_txq_depth,                            // llvm.nvvm.txq.depth
-    nvvm_txq_height,                           // llvm.nvvm.txq.height
-    nvvm_txq_num_mipmap_levels,                // llvm.nvvm.txq.num.mipmap.levels
-    nvvm_txq_num_samples,                      // llvm.nvvm.txq.num.samples
-    nvvm_txq_width,                            // llvm.nvvm.txq.width
-    nvvm_ui2d_rm,                              // llvm.nvvm.ui2d.rm
-    nvvm_ui2d_rn,                              // llvm.nvvm.ui2d.rn
-    nvvm_ui2d_rp,                              // llvm.nvvm.ui2d.rp
-    nvvm_ui2d_rz,                              // llvm.nvvm.ui2d.rz
-    nvvm_ui2f_rm,                              // llvm.nvvm.ui2f.rm
-    nvvm_ui2f_rn,                              // llvm.nvvm.ui2f.rn
-    nvvm_ui2f_rp,                              // llvm.nvvm.ui2f.rp
-    nvvm_ui2f_rz,                              // llvm.nvvm.ui2f.rz
-    nvvm_ull2d_rm,                             // llvm.nvvm.ull2d.rm
-    nvvm_ull2d_rn,                             // llvm.nvvm.ull2d.rn
-    nvvm_ull2d_rp,                             // llvm.nvvm.ull2d.rp
-    nvvm_ull2d_rz,                             // llvm.nvvm.ull2d.rz
-    nvvm_ull2f_rm,                             // llvm.nvvm.ull2f.rm
-    nvvm_ull2f_rn,                             // llvm.nvvm.ull2f.rn
-    nvvm_ull2f_rp,                             // llvm.nvvm.ull2f.rp
-    nvvm_ull2f_rz,                             // llvm.nvvm.ull2f.rz
-    nvvm_vote_all,                             // llvm.nvvm.vote.all
-    nvvm_vote_all_sync,                        // llvm.nvvm.vote.all.sync
-    nvvm_vote_any,                             // llvm.nvvm.vote.any
-    nvvm_vote_any_sync,                        // llvm.nvvm.vote.any.sync
-    nvvm_vote_ballot,                          // llvm.nvvm.vote.ballot
-    nvvm_vote_ballot_sync,                     // llvm.nvvm.vote.ballot.sync
-    nvvm_vote_uni,                             // llvm.nvvm.vote.uni
-    nvvm_vote_uni_sync,                        // llvm.nvvm.vote.uni.sync
-    nvvm_wmma_m16n16k16_load_a_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
-    nvvm_wmma_m16n16k16_load_a_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
-    nvvm_wmma_m16n16k16_load_a_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
-    nvvm_wmma_m16n16k16_load_a_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
-    nvvm_wmma_m16n16k16_load_b_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
-    nvvm_wmma_m16n16k16_load_b_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
-    nvvm_wmma_m16n16k16_load_b_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
-    nvvm_wmma_m16n16k16_load_b_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
-    nvvm_wmma_m16n16k16_load_c_f16_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
-    nvvm_wmma_m16n16k16_load_c_f32_col,        // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
-    nvvm_wmma_m16n16k16_load_c_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
-    nvvm_wmma_m16n16k16_load_c_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
-    nvvm_wmma_m16n16k16_load_c_f16_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
-    nvvm_wmma_m16n16k16_load_c_f32_row,        // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
-    nvvm_wmma_m16n16k16_load_c_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
-    nvvm_wmma_m16n16k16_load_c_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
-    nvvm_wmma_m16n16k16_mma_col_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
-    nvvm_wmma_m16n16k16_mma_col_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_col_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
-    nvvm_wmma_m16n16k16_mma_col_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_col_col_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16
-    nvvm_wmma_m16n16k16_mma_col_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_col_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
-    nvvm_wmma_m16n16k16_mma_col_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_col_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
-    nvvm_wmma_m16n16k16_mma_col_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_col_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
-    nvvm_wmma_m16n16k16_mma_col_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_col_row_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16
-    nvvm_wmma_m16n16k16_mma_col_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_col_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
-    nvvm_wmma_m16n16k16_mma_col_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_row_col_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
-    nvvm_wmma_m16n16k16_mma_row_col_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_row_col_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
-    nvvm_wmma_m16n16k16_mma_row_col_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_row_col_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16
-    nvvm_wmma_m16n16k16_mma_row_col_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_row_col_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
-    nvvm_wmma_m16n16k16_mma_row_col_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_row_row_f16_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
-    nvvm_wmma_m16n16k16_mma_row_row_f16_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_row_row_f16_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
-    nvvm_wmma_m16n16k16_mma_row_row_f16_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite
-    nvvm_wmma_m16n16k16_mma_row_row_f32_f16,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16
-    nvvm_wmma_m16n16k16_mma_row_row_f32_f16_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
-    nvvm_wmma_m16n16k16_mma_row_row_f32_f32,   // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
-    nvvm_wmma_m16n16k16_mma_row_row_f32_f32_satfinite,  // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
-    nvvm_wmma_m16n16k16_store_d_f16_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
-    nvvm_wmma_m16n16k16_store_d_f32_col,       // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
-    nvvm_wmma_m16n16k16_store_d_f16_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
-    nvvm_wmma_m16n16k16_store_d_f32_col_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
-    nvvm_wmma_m16n16k16_store_d_f16_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
-    nvvm_wmma_m16n16k16_store_d_f32_row,       // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
-    nvvm_wmma_m16n16k16_store_d_f16_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
-    nvvm_wmma_m16n16k16_store_d_f32_row_stride,  // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
-    ppc_altivec_crypto_vcipher,                // llvm.ppc.altivec.crypto.vcipher
-    ppc_altivec_crypto_vcipherlast,            // llvm.ppc.altivec.crypto.vcipherlast
-    ppc_altivec_crypto_vncipher,               // llvm.ppc.altivec.crypto.vncipher
-    ppc_altivec_crypto_vncipherlast,           // llvm.ppc.altivec.crypto.vncipherlast
-    ppc_altivec_crypto_vpermxor,               // llvm.ppc.altivec.crypto.vpermxor
-    ppc_altivec_crypto_vpmsumb,                // llvm.ppc.altivec.crypto.vpmsumb
-    ppc_altivec_crypto_vpmsumd,                // llvm.ppc.altivec.crypto.vpmsumd
-    ppc_altivec_crypto_vpmsumh,                // llvm.ppc.altivec.crypto.vpmsumh
-    ppc_altivec_crypto_vpmsumw,                // llvm.ppc.altivec.crypto.vpmsumw
-    ppc_altivec_crypto_vsbox,                  // llvm.ppc.altivec.crypto.vsbox
-    ppc_altivec_crypto_vshasigmad,             // llvm.ppc.altivec.crypto.vshasigmad
-    ppc_altivec_crypto_vshasigmaw,             // llvm.ppc.altivec.crypto.vshasigmaw
-    ppc_altivec_dss,                           // llvm.ppc.altivec.dss
-    ppc_altivec_dssall,                        // llvm.ppc.altivec.dssall
-    ppc_altivec_dst,                           // llvm.ppc.altivec.dst
-    ppc_altivec_dstst,                         // llvm.ppc.altivec.dstst
-    ppc_altivec_dststt,                        // llvm.ppc.altivec.dststt
-    ppc_altivec_dstt,                          // llvm.ppc.altivec.dstt
-    ppc_altivec_lvebx,                         // llvm.ppc.altivec.lvebx
-    ppc_altivec_lvehx,                         // llvm.ppc.altivec.lvehx
-    ppc_altivec_lvewx,                         // llvm.ppc.altivec.lvewx
-    ppc_altivec_lvsl,                          // llvm.ppc.altivec.lvsl
-    ppc_altivec_lvsr,                          // llvm.ppc.altivec.lvsr
-    ppc_altivec_lvx,                           // llvm.ppc.altivec.lvx
-    ppc_altivec_lvxl,                          // llvm.ppc.altivec.lvxl
-    ppc_altivec_mfvscr,                        // llvm.ppc.altivec.mfvscr
-    ppc_altivec_mtvscr,                        // llvm.ppc.altivec.mtvscr
-    ppc_altivec_stvebx,                        // llvm.ppc.altivec.stvebx
-    ppc_altivec_stvehx,                        // llvm.ppc.altivec.stvehx
-    ppc_altivec_stvewx,                        // llvm.ppc.altivec.stvewx
-    ppc_altivec_stvx,                          // llvm.ppc.altivec.stvx
-    ppc_altivec_stvxl,                         // llvm.ppc.altivec.stvxl
-    ppc_altivec_vabsdub,                       // llvm.ppc.altivec.vabsdub
-    ppc_altivec_vabsduh,                       // llvm.ppc.altivec.vabsduh
-    ppc_altivec_vabsduw,                       // llvm.ppc.altivec.vabsduw
-    ppc_altivec_vaddcuq,                       // llvm.ppc.altivec.vaddcuq
-    ppc_altivec_vaddcuw,                       // llvm.ppc.altivec.vaddcuw
-    ppc_altivec_vaddecuq,                      // llvm.ppc.altivec.vaddecuq
-    ppc_altivec_vaddeuqm,                      // llvm.ppc.altivec.vaddeuqm
-    ppc_altivec_vaddsbs,                       // llvm.ppc.altivec.vaddsbs
-    ppc_altivec_vaddshs,                       // llvm.ppc.altivec.vaddshs
-    ppc_altivec_vaddsws,                       // llvm.ppc.altivec.vaddsws
-    ppc_altivec_vaddubs,                       // llvm.ppc.altivec.vaddubs
-    ppc_altivec_vadduhs,                       // llvm.ppc.altivec.vadduhs
-    ppc_altivec_vadduws,                       // llvm.ppc.altivec.vadduws
-    ppc_altivec_vavgsb,                        // llvm.ppc.altivec.vavgsb
-    ppc_altivec_vavgsh,                        // llvm.ppc.altivec.vavgsh
-    ppc_altivec_vavgsw,                        // llvm.ppc.altivec.vavgsw
-    ppc_altivec_vavgub,                        // llvm.ppc.altivec.vavgub
-    ppc_altivec_vavguh,                        // llvm.ppc.altivec.vavguh
-    ppc_altivec_vavguw,                        // llvm.ppc.altivec.vavguw
-    ppc_altivec_vbpermq,                       // llvm.ppc.altivec.vbpermq
-    ppc_altivec_vcfsx,                         // llvm.ppc.altivec.vcfsx
-    ppc_altivec_vcfux,                         // llvm.ppc.altivec.vcfux
-    ppc_altivec_vclzlsbb,                      // llvm.ppc.altivec.vclzlsbb
-    ppc_altivec_vcmpbfp,                       // llvm.ppc.altivec.vcmpbfp
-    ppc_altivec_vcmpbfp_p,                     // llvm.ppc.altivec.vcmpbfp.p
-    ppc_altivec_vcmpeqfp,                      // llvm.ppc.altivec.vcmpeqfp
-    ppc_altivec_vcmpeqfp_p,                    // llvm.ppc.altivec.vcmpeqfp.p
-    ppc_altivec_vcmpequb,                      // llvm.ppc.altivec.vcmpequb
-    ppc_altivec_vcmpequb_p,                    // llvm.ppc.altivec.vcmpequb.p
-    ppc_altivec_vcmpequd,                      // llvm.ppc.altivec.vcmpequd
-    ppc_altivec_vcmpequd_p,                    // llvm.ppc.altivec.vcmpequd.p
-    ppc_altivec_vcmpequh,                      // llvm.ppc.altivec.vcmpequh
-    ppc_altivec_vcmpequh_p,                    // llvm.ppc.altivec.vcmpequh.p
-    ppc_altivec_vcmpequw,                      // llvm.ppc.altivec.vcmpequw
-    ppc_altivec_vcmpequw_p,                    // llvm.ppc.altivec.vcmpequw.p
-    ppc_altivec_vcmpgefp,                      // llvm.ppc.altivec.vcmpgefp
-    ppc_altivec_vcmpgefp_p,                    // llvm.ppc.altivec.vcmpgefp.p
-    ppc_altivec_vcmpgtfp,                      // llvm.ppc.altivec.vcmpgtfp
-    ppc_altivec_vcmpgtfp_p,                    // llvm.ppc.altivec.vcmpgtfp.p
-    ppc_altivec_vcmpgtsb,                      // llvm.ppc.altivec.vcmpgtsb
-    ppc_altivec_vcmpgtsb_p,                    // llvm.ppc.altivec.vcmpgtsb.p
-    ppc_altivec_vcmpgtsd,                      // llvm.ppc.altivec.vcmpgtsd
-    ppc_altivec_vcmpgtsd_p,                    // llvm.ppc.altivec.vcmpgtsd.p
-    ppc_altivec_vcmpgtsh,                      // llvm.ppc.altivec.vcmpgtsh
-    ppc_altivec_vcmpgtsh_p,                    // llvm.ppc.altivec.vcmpgtsh.p
-    ppc_altivec_vcmpgtsw,                      // llvm.ppc.altivec.vcmpgtsw
-    ppc_altivec_vcmpgtsw_p,                    // llvm.ppc.altivec.vcmpgtsw.p
-    ppc_altivec_vcmpgtub,                      // llvm.ppc.altivec.vcmpgtub
-    ppc_altivec_vcmpgtub_p,                    // llvm.ppc.altivec.vcmpgtub.p
-    ppc_altivec_vcmpgtud,                      // llvm.ppc.altivec.vcmpgtud
-    ppc_altivec_vcmpgtud_p,                    // llvm.ppc.altivec.vcmpgtud.p
-    ppc_altivec_vcmpgtuh,                      // llvm.ppc.altivec.vcmpgtuh
-    ppc_altivec_vcmpgtuh_p,                    // llvm.ppc.altivec.vcmpgtuh.p
-    ppc_altivec_vcmpgtuw,                      // llvm.ppc.altivec.vcmpgtuw
-    ppc_altivec_vcmpgtuw_p,                    // llvm.ppc.altivec.vcmpgtuw.p
-    ppc_altivec_vcmpneb,                       // llvm.ppc.altivec.vcmpneb
-    ppc_altivec_vcmpneb_p,                     // llvm.ppc.altivec.vcmpneb.p
-    ppc_altivec_vcmpneh,                       // llvm.ppc.altivec.vcmpneh
-    ppc_altivec_vcmpneh_p,                     // llvm.ppc.altivec.vcmpneh.p
-    ppc_altivec_vcmpnew,                       // llvm.ppc.altivec.vcmpnew
-    ppc_altivec_vcmpnew_p,                     // llvm.ppc.altivec.vcmpnew.p
-    ppc_altivec_vcmpnezb,                      // llvm.ppc.altivec.vcmpnezb
-    ppc_altivec_vcmpnezb_p,                    // llvm.ppc.altivec.vcmpnezb.p
-    ppc_altivec_vcmpnezh,                      // llvm.ppc.altivec.vcmpnezh
-    ppc_altivec_vcmpnezh_p,                    // llvm.ppc.altivec.vcmpnezh.p
-    ppc_altivec_vcmpnezw,                      // llvm.ppc.altivec.vcmpnezw
-    ppc_altivec_vcmpnezw_p,                    // llvm.ppc.altivec.vcmpnezw.p
-    ppc_altivec_vctsxs,                        // llvm.ppc.altivec.vctsxs
-    ppc_altivec_vctuxs,                        // llvm.ppc.altivec.vctuxs
-    ppc_altivec_vctzlsbb,                      // llvm.ppc.altivec.vctzlsbb
-    ppc_altivec_vexptefp,                      // llvm.ppc.altivec.vexptefp
-    ppc_altivec_vgbbd,                         // llvm.ppc.altivec.vgbbd
-    ppc_altivec_vlogefp,                       // llvm.ppc.altivec.vlogefp
-    ppc_altivec_vmaddfp,                       // llvm.ppc.altivec.vmaddfp
-    ppc_altivec_vmaxfp,                        // llvm.ppc.altivec.vmaxfp
-    ppc_altivec_vmaxsb,                        // llvm.ppc.altivec.vmaxsb
-    ppc_altivec_vmaxsd,                        // llvm.ppc.altivec.vmaxsd
-    ppc_altivec_vmaxsh,                        // llvm.ppc.altivec.vmaxsh
-    ppc_altivec_vmaxsw,                        // llvm.ppc.altivec.vmaxsw
-    ppc_altivec_vmaxub,                        // llvm.ppc.altivec.vmaxub
-    ppc_altivec_vmaxud,                        // llvm.ppc.altivec.vmaxud
-    ppc_altivec_vmaxuh,                        // llvm.ppc.altivec.vmaxuh
-    ppc_altivec_vmaxuw,                        // llvm.ppc.altivec.vmaxuw
-    ppc_altivec_vmhaddshs,                     // llvm.ppc.altivec.vmhaddshs
-    ppc_altivec_vmhraddshs,                    // llvm.ppc.altivec.vmhraddshs
-    ppc_altivec_vminfp,                        // llvm.ppc.altivec.vminfp
-    ppc_altivec_vminsb,                        // llvm.ppc.altivec.vminsb
-    ppc_altivec_vminsd,                        // llvm.ppc.altivec.vminsd
-    ppc_altivec_vminsh,                        // llvm.ppc.altivec.vminsh
-    ppc_altivec_vminsw,                        // llvm.ppc.altivec.vminsw
-    ppc_altivec_vminub,                        // llvm.ppc.altivec.vminub
-    ppc_altivec_vminud,                        // llvm.ppc.altivec.vminud
-    ppc_altivec_vminuh,                        // llvm.ppc.altivec.vminuh
-    ppc_altivec_vminuw,                        // llvm.ppc.altivec.vminuw
-    ppc_altivec_vmladduhm,                     // llvm.ppc.altivec.vmladduhm
-    ppc_altivec_vmsummbm,                      // llvm.ppc.altivec.vmsummbm
-    ppc_altivec_vmsumshm,                      // llvm.ppc.altivec.vmsumshm
-    ppc_altivec_vmsumshs,                      // llvm.ppc.altivec.vmsumshs
-    ppc_altivec_vmsumubm,                      // llvm.ppc.altivec.vmsumubm
-    ppc_altivec_vmsumuhm,                      // llvm.ppc.altivec.vmsumuhm
-    ppc_altivec_vmsumuhs,                      // llvm.ppc.altivec.vmsumuhs
-    ppc_altivec_vmulesb,                       // llvm.ppc.altivec.vmulesb
-    ppc_altivec_vmulesh,                       // llvm.ppc.altivec.vmulesh
-    ppc_altivec_vmulesw,                       // llvm.ppc.altivec.vmulesw
-    ppc_altivec_vmuleub,                       // llvm.ppc.altivec.vmuleub
-    ppc_altivec_vmuleuh,                       // llvm.ppc.altivec.vmuleuh
-    ppc_altivec_vmuleuw,                       // llvm.ppc.altivec.vmuleuw
-    ppc_altivec_vmulosb,                       // llvm.ppc.altivec.vmulosb
-    ppc_altivec_vmulosh,                       // llvm.ppc.altivec.vmulosh
-    ppc_altivec_vmulosw,                       // llvm.ppc.altivec.vmulosw
-    ppc_altivec_vmuloub,                       // llvm.ppc.altivec.vmuloub
-    ppc_altivec_vmulouh,                       // llvm.ppc.altivec.vmulouh
-    ppc_altivec_vmulouw,                       // llvm.ppc.altivec.vmulouw
-    ppc_altivec_vnmsubfp,                      // llvm.ppc.altivec.vnmsubfp
-    ppc_altivec_vperm,                         // llvm.ppc.altivec.vperm
-    ppc_altivec_vpkpx,                         // llvm.ppc.altivec.vpkpx
-    ppc_altivec_vpksdss,                       // llvm.ppc.altivec.vpksdss
-    ppc_altivec_vpksdus,                       // llvm.ppc.altivec.vpksdus
-    ppc_altivec_vpkshss,                       // llvm.ppc.altivec.vpkshss
-    ppc_altivec_vpkshus,                       // llvm.ppc.altivec.vpkshus
-    ppc_altivec_vpkswss,                       // llvm.ppc.altivec.vpkswss
-    ppc_altivec_vpkswus,                       // llvm.ppc.altivec.vpkswus
-    ppc_altivec_vpkudus,                       // llvm.ppc.altivec.vpkudus
-    ppc_altivec_vpkuhus,                       // llvm.ppc.altivec.vpkuhus
-    ppc_altivec_vpkuwus,                       // llvm.ppc.altivec.vpkuwus
-    ppc_altivec_vprtybd,                       // llvm.ppc.altivec.vprtybd
-    ppc_altivec_vprtybq,                       // llvm.ppc.altivec.vprtybq
-    ppc_altivec_vprtybw,                       // llvm.ppc.altivec.vprtybw
-    ppc_altivec_vrefp,                         // llvm.ppc.altivec.vrefp
-    ppc_altivec_vrfim,                         // llvm.ppc.altivec.vrfim
-    ppc_altivec_vrfin,                         // llvm.ppc.altivec.vrfin
-    ppc_altivec_vrfip,                         // llvm.ppc.altivec.vrfip
-    ppc_altivec_vrfiz,                         // llvm.ppc.altivec.vrfiz
-    ppc_altivec_vrlb,                          // llvm.ppc.altivec.vrlb
-    ppc_altivec_vrld,                          // llvm.ppc.altivec.vrld
-    ppc_altivec_vrldmi,                        // llvm.ppc.altivec.vrldmi
-    ppc_altivec_vrldnm,                        // llvm.ppc.altivec.vrldnm
-    ppc_altivec_vrlh,                          // llvm.ppc.altivec.vrlh
-    ppc_altivec_vrlw,                          // llvm.ppc.altivec.vrlw
-    ppc_altivec_vrlwmi,                        // llvm.ppc.altivec.vrlwmi
-    ppc_altivec_vrlwnm,                        // llvm.ppc.altivec.vrlwnm
-    ppc_altivec_vrsqrtefp,                     // llvm.ppc.altivec.vrsqrtefp
-    ppc_altivec_vsel,                          // llvm.ppc.altivec.vsel
-    ppc_altivec_vsl,                           // llvm.ppc.altivec.vsl
-    ppc_altivec_vslb,                          // llvm.ppc.altivec.vslb
-    ppc_altivec_vslh,                          // llvm.ppc.altivec.vslh
-    ppc_altivec_vslo,                          // llvm.ppc.altivec.vslo
-    ppc_altivec_vslv,                          // llvm.ppc.altivec.vslv
-    ppc_altivec_vslw,                          // llvm.ppc.altivec.vslw
-    ppc_altivec_vsr,                           // llvm.ppc.altivec.vsr
-    ppc_altivec_vsrab,                         // llvm.ppc.altivec.vsrab
-    ppc_altivec_vsrah,                         // llvm.ppc.altivec.vsrah
-    ppc_altivec_vsraw,                         // llvm.ppc.altivec.vsraw
-    ppc_altivec_vsrb,                          // llvm.ppc.altivec.vsrb
-    ppc_altivec_vsrh,                          // llvm.ppc.altivec.vsrh
-    ppc_altivec_vsro,                          // llvm.ppc.altivec.vsro
-    ppc_altivec_vsrv,                          // llvm.ppc.altivec.vsrv
-    ppc_altivec_vsrw,                          // llvm.ppc.altivec.vsrw
-    ppc_altivec_vsubcuq,                       // llvm.ppc.altivec.vsubcuq
-    ppc_altivec_vsubcuw,                       // llvm.ppc.altivec.vsubcuw
-    ppc_altivec_vsubecuq,                      // llvm.ppc.altivec.vsubecuq
-    ppc_altivec_vsubeuqm,                      // llvm.ppc.altivec.vsubeuqm
-    ppc_altivec_vsubsbs,                       // llvm.ppc.altivec.vsubsbs
-    ppc_altivec_vsubshs,                       // llvm.ppc.altivec.vsubshs
-    ppc_altivec_vsubsws,                       // llvm.ppc.altivec.vsubsws
-    ppc_altivec_vsububs,                       // llvm.ppc.altivec.vsububs
-    ppc_altivec_vsubuhs,                       // llvm.ppc.altivec.vsubuhs
-    ppc_altivec_vsubuws,                       // llvm.ppc.altivec.vsubuws
-    ppc_altivec_vsum2sws,                      // llvm.ppc.altivec.vsum2sws
-    ppc_altivec_vsum4sbs,                      // llvm.ppc.altivec.vsum4sbs
-    ppc_altivec_vsum4shs,                      // llvm.ppc.altivec.vsum4shs
-    ppc_altivec_vsum4ubs,                      // llvm.ppc.altivec.vsum4ubs
-    ppc_altivec_vsumsws,                       // llvm.ppc.altivec.vsumsws
-    ppc_altivec_vupkhpx,                       // llvm.ppc.altivec.vupkhpx
-    ppc_altivec_vupkhsb,                       // llvm.ppc.altivec.vupkhsb
-    ppc_altivec_vupkhsh,                       // llvm.ppc.altivec.vupkhsh
-    ppc_altivec_vupkhsw,                       // llvm.ppc.altivec.vupkhsw
-    ppc_altivec_vupklpx,                       // llvm.ppc.altivec.vupklpx
-    ppc_altivec_vupklsb,                       // llvm.ppc.altivec.vupklsb
-    ppc_altivec_vupklsh,                       // llvm.ppc.altivec.vupklsh
-    ppc_altivec_vupklsw,                       // llvm.ppc.altivec.vupklsw
-    ppc_bpermd,                                // llvm.ppc.bpermd
-    ppc_cfence,                                // llvm.ppc.cfence
-    ppc_dcba,                                  // llvm.ppc.dcba
-    ppc_dcbf,                                  // llvm.ppc.dcbf
-    ppc_dcbi,                                  // llvm.ppc.dcbi
-    ppc_dcbst,                                 // llvm.ppc.dcbst
-    ppc_dcbt,                                  // llvm.ppc.dcbt
-    ppc_dcbtst,                                // llvm.ppc.dcbtst
-    ppc_dcbz,                                  // llvm.ppc.dcbz
-    ppc_dcbzl,                                 // llvm.ppc.dcbzl
-    ppc_divde,                                 // llvm.ppc.divde
-    ppc_divdeu,                                // llvm.ppc.divdeu
-    ppc_divwe,                                 // llvm.ppc.divwe
-    ppc_divweu,                                // llvm.ppc.divweu
-    ppc_get_texasr,                            // llvm.ppc.get.texasr
-    ppc_get_texasru,                           // llvm.ppc.get.texasru
-    ppc_get_tfhar,                             // llvm.ppc.get.tfhar
-    ppc_get_tfiar,                             // llvm.ppc.get.tfiar
-    ppc_is_decremented_ctr_nonzero,            // llvm.ppc.is.decremented.ctr.nonzero
-    ppc_lwsync,                                // llvm.ppc.lwsync
-    ppc_mtctr,                                 // llvm.ppc.mtctr
-    ppc_qpx_qvfabs,                            // llvm.ppc.qpx.qvfabs
-    ppc_qpx_qvfadd,                            // llvm.ppc.qpx.qvfadd
-    ppc_qpx_qvfadds,                           // llvm.ppc.qpx.qvfadds
-    ppc_qpx_qvfcfid,                           // llvm.ppc.qpx.qvfcfid
-    ppc_qpx_qvfcfids,                          // llvm.ppc.qpx.qvfcfids
-    ppc_qpx_qvfcfidu,                          // llvm.ppc.qpx.qvfcfidu
-    ppc_qpx_qvfcfidus,                         // llvm.ppc.qpx.qvfcfidus
-    ppc_qpx_qvfcmpeq,                          // llvm.ppc.qpx.qvfcmpeq
-    ppc_qpx_qvfcmpgt,                          // llvm.ppc.qpx.qvfcmpgt
-    ppc_qpx_qvfcmplt,                          // llvm.ppc.qpx.qvfcmplt
-    ppc_qpx_qvfcpsgn,                          // llvm.ppc.qpx.qvfcpsgn
-    ppc_qpx_qvfctid,                           // llvm.ppc.qpx.qvfctid
-    ppc_qpx_qvfctidu,                          // llvm.ppc.qpx.qvfctidu
-    ppc_qpx_qvfctiduz,                         // llvm.ppc.qpx.qvfctiduz
-    ppc_qpx_qvfctidz,                          // llvm.ppc.qpx.qvfctidz
-    ppc_qpx_qvfctiw,                           // llvm.ppc.qpx.qvfctiw
-    ppc_qpx_qvfctiwu,                          // llvm.ppc.qpx.qvfctiwu
-    ppc_qpx_qvfctiwuz,                         // llvm.ppc.qpx.qvfctiwuz
-    ppc_qpx_qvfctiwz,                          // llvm.ppc.qpx.qvfctiwz
-    ppc_qpx_qvflogical,                        // llvm.ppc.qpx.qvflogical
-    ppc_qpx_qvfmadd,                           // llvm.ppc.qpx.qvfmadd
-    ppc_qpx_qvfmadds,                          // llvm.ppc.qpx.qvfmadds
-    ppc_qpx_qvfmsub,                           // llvm.ppc.qpx.qvfmsub
-    ppc_qpx_qvfmsubs,                          // llvm.ppc.qpx.qvfmsubs
-    ppc_qpx_qvfmul,                            // llvm.ppc.qpx.qvfmul
-    ppc_qpx_qvfmuls,                           // llvm.ppc.qpx.qvfmuls
-    ppc_qpx_qvfnabs,                           // llvm.ppc.qpx.qvfnabs
-    ppc_qpx_qvfneg,                            // llvm.ppc.qpx.qvfneg
-    ppc_qpx_qvfnmadd,                          // llvm.ppc.qpx.qvfnmadd
-    ppc_qpx_qvfnmadds,                         // llvm.ppc.qpx.qvfnmadds
-    ppc_qpx_qvfnmsub,                          // llvm.ppc.qpx.qvfnmsub
-    ppc_qpx_qvfnmsubs,                         // llvm.ppc.qpx.qvfnmsubs
-    ppc_qpx_qvfperm,                           // llvm.ppc.qpx.qvfperm
-    ppc_qpx_qvfre,                             // llvm.ppc.qpx.qvfre
-    ppc_qpx_qvfres,                            // llvm.ppc.qpx.qvfres
-    ppc_qpx_qvfrim,                            // llvm.ppc.qpx.qvfrim
-    ppc_qpx_qvfrin,                            // llvm.ppc.qpx.qvfrin
-    ppc_qpx_qvfrip,                            // llvm.ppc.qpx.qvfrip
-    ppc_qpx_qvfriz,                            // llvm.ppc.qpx.qvfriz
-    ppc_qpx_qvfrsp,                            // llvm.ppc.qpx.qvfrsp
-    ppc_qpx_qvfrsqrte,                         // llvm.ppc.qpx.qvfrsqrte
-    ppc_qpx_qvfrsqrtes,                        // llvm.ppc.qpx.qvfrsqrtes
-    ppc_qpx_qvfsel,                            // llvm.ppc.qpx.qvfsel
-    ppc_qpx_qvfsub,                            // llvm.ppc.qpx.qvfsub
-    ppc_qpx_qvfsubs,                           // llvm.ppc.qpx.qvfsubs
-    ppc_qpx_qvftstnan,                         // llvm.ppc.qpx.qvftstnan
-    ppc_qpx_qvfxmadd,                          // llvm.ppc.qpx.qvfxmadd
-    ppc_qpx_qvfxmadds,                         // llvm.ppc.qpx.qvfxmadds
-    ppc_qpx_qvfxmul,                           // llvm.ppc.qpx.qvfxmul
-    ppc_qpx_qvfxmuls,                          // llvm.ppc.qpx.qvfxmuls
-    ppc_qpx_qvfxxcpnmadd,                      // llvm.ppc.qpx.qvfxxcpnmadd
-    ppc_qpx_qvfxxcpnmadds,                     // llvm.ppc.qpx.qvfxxcpnmadds
-    ppc_qpx_qvfxxmadd,                         // llvm.ppc.qpx.qvfxxmadd
-    ppc_qpx_qvfxxmadds,                        // llvm.ppc.qpx.qvfxxmadds
-    ppc_qpx_qvfxxnpmadd,                       // llvm.ppc.qpx.qvfxxnpmadd
-    ppc_qpx_qvfxxnpmadds,                      // llvm.ppc.qpx.qvfxxnpmadds
-    ppc_qpx_qvgpci,                            // llvm.ppc.qpx.qvgpci
-    ppc_qpx_qvlfcd,                            // llvm.ppc.qpx.qvlfcd
-    ppc_qpx_qvlfcda,                           // llvm.ppc.qpx.qvlfcda
-    ppc_qpx_qvlfcs,                            // llvm.ppc.qpx.qvlfcs
-    ppc_qpx_qvlfcsa,                           // llvm.ppc.qpx.qvlfcsa
-    ppc_qpx_qvlfd,                             // llvm.ppc.qpx.qvlfd
-    ppc_qpx_qvlfda,                            // llvm.ppc.qpx.qvlfda
-    ppc_qpx_qvlfiwa,                           // llvm.ppc.qpx.qvlfiwa
-    ppc_qpx_qvlfiwaa,                          // llvm.ppc.qpx.qvlfiwaa
-    ppc_qpx_qvlfiwz,                           // llvm.ppc.qpx.qvlfiwz
-    ppc_qpx_qvlfiwza,                          // llvm.ppc.qpx.qvlfiwza
-    ppc_qpx_qvlfs,                             // llvm.ppc.qpx.qvlfs
-    ppc_qpx_qvlfsa,                            // llvm.ppc.qpx.qvlfsa
-    ppc_qpx_qvlpcld,                           // llvm.ppc.qpx.qvlpcld
-    ppc_qpx_qvlpcls,                           // llvm.ppc.qpx.qvlpcls
-    ppc_qpx_qvlpcrd,                           // llvm.ppc.qpx.qvlpcrd
-    ppc_qpx_qvlpcrs,                           // llvm.ppc.qpx.qvlpcrs
-    ppc_qpx_qvstfcd,                           // llvm.ppc.qpx.qvstfcd
-    ppc_qpx_qvstfcda,                          // llvm.ppc.qpx.qvstfcda
-    ppc_qpx_qvstfcs,                           // llvm.ppc.qpx.qvstfcs
-    ppc_qpx_qvstfcsa,                          // llvm.ppc.qpx.qvstfcsa
-    ppc_qpx_qvstfd,                            // llvm.ppc.qpx.qvstfd
-    ppc_qpx_qvstfda,                           // llvm.ppc.qpx.qvstfda
-    ppc_qpx_qvstfiw,                           // llvm.ppc.qpx.qvstfiw
-    ppc_qpx_qvstfiwa,                          // llvm.ppc.qpx.qvstfiwa
-    ppc_qpx_qvstfs,                            // llvm.ppc.qpx.qvstfs
-    ppc_qpx_qvstfsa,                           // llvm.ppc.qpx.qvstfsa
-    ppc_set_texasr,                            // llvm.ppc.set.texasr
-    ppc_set_texasru,                           // llvm.ppc.set.texasru
-    ppc_set_tfhar,                             // llvm.ppc.set.tfhar
-    ppc_set_tfiar,                             // llvm.ppc.set.tfiar
-    ppc_sync,                                  // llvm.ppc.sync
-    ppc_tabort,                                // llvm.ppc.tabort
-    ppc_tabortdc,                              // llvm.ppc.tabortdc
-    ppc_tabortdci,                             // llvm.ppc.tabortdci
-    ppc_tabortwc,                              // llvm.ppc.tabortwc
-    ppc_tabortwci,                             // llvm.ppc.tabortwci
-    ppc_tbegin,                                // llvm.ppc.tbegin
-    ppc_tcheck,                                // llvm.ppc.tcheck
-    ppc_tend,                                  // llvm.ppc.tend
-    ppc_tendall,                               // llvm.ppc.tendall
-    ppc_trechkpt,                              // llvm.ppc.trechkpt
-    ppc_treclaim,                              // llvm.ppc.treclaim
-    ppc_tresume,                               // llvm.ppc.tresume
-    ppc_tsr,                                   // llvm.ppc.tsr
-    ppc_tsuspend,                              // llvm.ppc.tsuspend
-    ppc_ttest,                                 // llvm.ppc.ttest
-    ppc_vsx_lxvd2x,                            // llvm.ppc.vsx.lxvd2x
-    ppc_vsx_lxvd2x_be,                         // llvm.ppc.vsx.lxvd2x.be
-    ppc_vsx_lxvl,                              // llvm.ppc.vsx.lxvl
-    ppc_vsx_lxvll,                             // llvm.ppc.vsx.lxvll
-    ppc_vsx_lxvw4x,                            // llvm.ppc.vsx.lxvw4x
-    ppc_vsx_lxvw4x_be,                         // llvm.ppc.vsx.lxvw4x.be
-    ppc_vsx_stxvd2x,                           // llvm.ppc.vsx.stxvd2x
-    ppc_vsx_stxvd2x_be,                        // llvm.ppc.vsx.stxvd2x.be
-    ppc_vsx_stxvl,                             // llvm.ppc.vsx.stxvl
-    ppc_vsx_stxvll,                            // llvm.ppc.vsx.stxvll
-    ppc_vsx_stxvw4x,                           // llvm.ppc.vsx.stxvw4x
-    ppc_vsx_stxvw4x_be,                        // llvm.ppc.vsx.stxvw4x.be
-    ppc_vsx_xsmaxdp,                           // llvm.ppc.vsx.xsmaxdp
-    ppc_vsx_xsmindp,                           // llvm.ppc.vsx.xsmindp
-    ppc_vsx_xvcmpeqdp,                         // llvm.ppc.vsx.xvcmpeqdp
-    ppc_vsx_xvcmpeqdp_p,                       // llvm.ppc.vsx.xvcmpeqdp.p
-    ppc_vsx_xvcmpeqsp,                         // llvm.ppc.vsx.xvcmpeqsp
-    ppc_vsx_xvcmpeqsp_p,                       // llvm.ppc.vsx.xvcmpeqsp.p
-    ppc_vsx_xvcmpgedp,                         // llvm.ppc.vsx.xvcmpgedp
-    ppc_vsx_xvcmpgedp_p,                       // llvm.ppc.vsx.xvcmpgedp.p
-    ppc_vsx_xvcmpgesp,                         // llvm.ppc.vsx.xvcmpgesp
-    ppc_vsx_xvcmpgesp_p,                       // llvm.ppc.vsx.xvcmpgesp.p
-    ppc_vsx_xvcmpgtdp,                         // llvm.ppc.vsx.xvcmpgtdp
-    ppc_vsx_xvcmpgtdp_p,                       // llvm.ppc.vsx.xvcmpgtdp.p
-    ppc_vsx_xvcmpgtsp,                         // llvm.ppc.vsx.xvcmpgtsp
-    ppc_vsx_xvcmpgtsp_p,                       // llvm.ppc.vsx.xvcmpgtsp.p
-    ppc_vsx_xvcvdpsp,                          // llvm.ppc.vsx.xvcvdpsp
-    ppc_vsx_xvcvdpsxws,                        // llvm.ppc.vsx.xvcvdpsxws
-    ppc_vsx_xvcvdpuxws,                        // llvm.ppc.vsx.xvcvdpuxws
-    ppc_vsx_xvcvhpsp,                          // llvm.ppc.vsx.xvcvhpsp
-    ppc_vsx_xvcvspdp,                          // llvm.ppc.vsx.xvcvspdp
-    ppc_vsx_xvcvsphp,                          // llvm.ppc.vsx.xvcvsphp
-    ppc_vsx_xvcvsxdsp,                         // llvm.ppc.vsx.xvcvsxdsp
-    ppc_vsx_xvcvsxwdp,                         // llvm.ppc.vsx.xvcvsxwdp
-    ppc_vsx_xvcvuxdsp,                         // llvm.ppc.vsx.xvcvuxdsp
-    ppc_vsx_xvcvuxwdp,                         // llvm.ppc.vsx.xvcvuxwdp
-    ppc_vsx_xvdivdp,                           // llvm.ppc.vsx.xvdivdp
-    ppc_vsx_xvdivsp,                           // llvm.ppc.vsx.xvdivsp
-    ppc_vsx_xviexpdp,                          // llvm.ppc.vsx.xviexpdp
-    ppc_vsx_xviexpsp,                          // llvm.ppc.vsx.xviexpsp
-    ppc_vsx_xvmaxdp,                           // llvm.ppc.vsx.xvmaxdp
-    ppc_vsx_xvmaxsp,                           // llvm.ppc.vsx.xvmaxsp
-    ppc_vsx_xvmindp,                           // llvm.ppc.vsx.xvmindp
-    ppc_vsx_xvminsp,                           // llvm.ppc.vsx.xvminsp
-    ppc_vsx_xvrdpip,                           // llvm.ppc.vsx.xvrdpip
-    ppc_vsx_xvredp,                            // llvm.ppc.vsx.xvredp
-    ppc_vsx_xvresp,                            // llvm.ppc.vsx.xvresp
-    ppc_vsx_xvrspip,                           // llvm.ppc.vsx.xvrspip
-    ppc_vsx_xvrsqrtedp,                        // llvm.ppc.vsx.xvrsqrtedp
-    ppc_vsx_xvrsqrtesp,                        // llvm.ppc.vsx.xvrsqrtesp
-    ppc_vsx_xvtstdcdp,                         // llvm.ppc.vsx.xvtstdcdp
-    ppc_vsx_xvtstdcsp,                         // llvm.ppc.vsx.xvtstdcsp
-    ppc_vsx_xvxexpdp,                          // llvm.ppc.vsx.xvxexpdp
-    ppc_vsx_xvxexpsp,                          // llvm.ppc.vsx.xvxexpsp
-    ppc_vsx_xvxsigdp,                          // llvm.ppc.vsx.xvxsigdp
-    ppc_vsx_xvxsigsp,                          // llvm.ppc.vsx.xvxsigsp
-    ppc_vsx_xxextractuw,                       // llvm.ppc.vsx.xxextractuw
-    ppc_vsx_xxinsertw,                         // llvm.ppc.vsx.xxinsertw
-    ppc_vsx_xxleqv,                            // llvm.ppc.vsx.xxleqv
-    r600_cube,                                 // llvm.r600.cube
-    r600_group_barrier,                        // llvm.r600.group.barrier
-    r600_implicitarg_ptr,                      // llvm.r600.implicitarg.ptr
-    r600_rat_store_typed,                      // llvm.r600.rat.store.typed
-    r600_read_global_size_x,                   // llvm.r600.read.global.size.x
-    r600_read_global_size_y,                   // llvm.r600.read.global.size.y
-    r600_read_global_size_z,                   // llvm.r600.read.global.size.z
-    r600_read_local_size_x,                    // llvm.r600.read.local.size.x
-    r600_read_local_size_y,                    // llvm.r600.read.local.size.y
-    r600_read_local_size_z,                    // llvm.r600.read.local.size.z
-    r600_read_ngroups_x,                       // llvm.r600.read.ngroups.x
-    r600_read_ngroups_y,                       // llvm.r600.read.ngroups.y
-    r600_read_ngroups_z,                       // llvm.r600.read.ngroups.z
-    r600_read_tgid_x,                          // llvm.r600.read.tgid.x
-    r600_read_tgid_y,                          // llvm.r600.read.tgid.y
-    r600_read_tgid_z,                          // llvm.r600.read.tgid.z
-    r600_read_tidig_x,                         // llvm.r600.read.tidig.x
-    r600_read_tidig_y,                         // llvm.r600.read.tidig.y
-    r600_read_tidig_z,                         // llvm.r600.read.tidig.z
-    r600_recipsqrt_clamped,                    // llvm.r600.recipsqrt.clamped
-    r600_recipsqrt_ieee,                       // llvm.r600.recipsqrt.ieee
-    s390_efpc,                                 // llvm.s390.efpc
-    s390_etnd,                                 // llvm.s390.etnd
-    s390_lcbb,                                 // llvm.s390.lcbb
-    s390_ntstg,                                // llvm.s390.ntstg
-    s390_ppa_txassist,                         // llvm.s390.ppa.txassist
-    s390_sfpc,                                 // llvm.s390.sfpc
-    s390_tabort,                               // llvm.s390.tabort
-    s390_tbegin,                               // llvm.s390.tbegin
-    s390_tbegin_nofloat,                       // llvm.s390.tbegin.nofloat
-    s390_tbeginc,                              // llvm.s390.tbeginc
-    s390_tdc,                                  // llvm.s390.tdc
-    s390_tend,                                 // llvm.s390.tend
-    s390_vaccb,                                // llvm.s390.vaccb
-    s390_vacccq,                               // llvm.s390.vacccq
-    s390_vaccf,                                // llvm.s390.vaccf
-    s390_vaccg,                                // llvm.s390.vaccg
-    s390_vacch,                                // llvm.s390.vacch
-    s390_vaccq,                                // llvm.s390.vaccq
-    s390_vacq,                                 // llvm.s390.vacq
-    s390_vaq,                                  // llvm.s390.vaq
-    s390_vavgb,                                // llvm.s390.vavgb
-    s390_vavgf,                                // llvm.s390.vavgf
-    s390_vavgg,                                // llvm.s390.vavgg
-    s390_vavgh,                                // llvm.s390.vavgh
-    s390_vavglb,                               // llvm.s390.vavglb
-    s390_vavglf,                               // llvm.s390.vavglf
-    s390_vavglg,                               // llvm.s390.vavglg
-    s390_vavglh,                               // llvm.s390.vavglh
-    s390_vbperm,                               // llvm.s390.vbperm
-    s390_vceqbs,                               // llvm.s390.vceqbs
-    s390_vceqfs,                               // llvm.s390.vceqfs
-    s390_vceqgs,                               // llvm.s390.vceqgs
-    s390_vceqhs,                               // llvm.s390.vceqhs
-    s390_vchbs,                                // llvm.s390.vchbs
-    s390_vchfs,                                // llvm.s390.vchfs
-    s390_vchgs,                                // llvm.s390.vchgs
-    s390_vchhs,                                // llvm.s390.vchhs
-    s390_vchlbs,                               // llvm.s390.vchlbs
-    s390_vchlfs,                               // llvm.s390.vchlfs
-    s390_vchlgs,                               // llvm.s390.vchlgs
-    s390_vchlhs,                               // llvm.s390.vchlhs
-    s390_vcksm,                                // llvm.s390.vcksm
-    s390_verimb,                               // llvm.s390.verimb
-    s390_verimf,                               // llvm.s390.verimf
-    s390_verimg,                               // llvm.s390.verimg
-    s390_verimh,                               // llvm.s390.verimh
-    s390_verllb,                               // llvm.s390.verllb
-    s390_verllf,                               // llvm.s390.verllf
-    s390_verllg,                               // llvm.s390.verllg
-    s390_verllh,                               // llvm.s390.verllh
-    s390_verllvb,                              // llvm.s390.verllvb
-    s390_verllvf,                              // llvm.s390.verllvf
-    s390_verllvg,                              // llvm.s390.verllvg
-    s390_verllvh,                              // llvm.s390.verllvh
-    s390_vfaeb,                                // llvm.s390.vfaeb
-    s390_vfaebs,                               // llvm.s390.vfaebs
-    s390_vfaef,                                // llvm.s390.vfaef
-    s390_vfaefs,                               // llvm.s390.vfaefs
-    s390_vfaeh,                                // llvm.s390.vfaeh
-    s390_vfaehs,                               // llvm.s390.vfaehs
-    s390_vfaezb,                               // llvm.s390.vfaezb
-    s390_vfaezbs,                              // llvm.s390.vfaezbs
-    s390_vfaezf,                               // llvm.s390.vfaezf
-    s390_vfaezfs,                              // llvm.s390.vfaezfs
-    s390_vfaezh,                               // llvm.s390.vfaezh
-    s390_vfaezhs,                              // llvm.s390.vfaezhs
-    s390_vfcedbs,                              // llvm.s390.vfcedbs
-    s390_vfcesbs,                              // llvm.s390.vfcesbs
-    s390_vfchdbs,                              // llvm.s390.vfchdbs
-    s390_vfchedbs,                             // llvm.s390.vfchedbs
-    s390_vfchesbs,                             // llvm.s390.vfchesbs
-    s390_vfchsbs,                              // llvm.s390.vfchsbs
-    s390_vfeeb,                                // llvm.s390.vfeeb
-    s390_vfeebs,                               // llvm.s390.vfeebs
-    s390_vfeef,                                // llvm.s390.vfeef
-    s390_vfeefs,                               // llvm.s390.vfeefs
-    s390_vfeeh,                                // llvm.s390.vfeeh
-    s390_vfeehs,                               // llvm.s390.vfeehs
-    s390_vfeezb,                               // llvm.s390.vfeezb
-    s390_vfeezbs,                              // llvm.s390.vfeezbs
-    s390_vfeezf,                               // llvm.s390.vfeezf
-    s390_vfeezfs,                              // llvm.s390.vfeezfs
-    s390_vfeezh,                               // llvm.s390.vfeezh
-    s390_vfeezhs,                              // llvm.s390.vfeezhs
-    s390_vfeneb,                               // llvm.s390.vfeneb
-    s390_vfenebs,                              // llvm.s390.vfenebs
-    s390_vfenef,                               // llvm.s390.vfenef
-    s390_vfenefs,                              // llvm.s390.vfenefs
-    s390_vfeneh,                               // llvm.s390.vfeneh
-    s390_vfenehs,                              // llvm.s390.vfenehs
-    s390_vfenezb,                              // llvm.s390.vfenezb
-    s390_vfenezbs,                             // llvm.s390.vfenezbs
-    s390_vfenezf,                              // llvm.s390.vfenezf
-    s390_vfenezfs,                             // llvm.s390.vfenezfs
-    s390_vfenezh,                              // llvm.s390.vfenezh
-    s390_vfenezhs,                             // llvm.s390.vfenezhs
-    s390_vfidb,                                // llvm.s390.vfidb
-    s390_vfisb,                                // llvm.s390.vfisb
-    s390_vfmaxdb,                              // llvm.s390.vfmaxdb
-    s390_vfmaxsb,                              // llvm.s390.vfmaxsb
-    s390_vfmindb,                              // llvm.s390.vfmindb
-    s390_vfminsb,                              // llvm.s390.vfminsb
-    s390_vftcidb,                              // llvm.s390.vftcidb
-    s390_vftcisb,                              // llvm.s390.vftcisb
-    s390_vgfmab,                               // llvm.s390.vgfmab
-    s390_vgfmaf,                               // llvm.s390.vgfmaf
-    s390_vgfmag,                               // llvm.s390.vgfmag
-    s390_vgfmah,                               // llvm.s390.vgfmah
-    s390_vgfmb,                                // llvm.s390.vgfmb
-    s390_vgfmf,                                // llvm.s390.vgfmf
-    s390_vgfmg,                                // llvm.s390.vgfmg
-    s390_vgfmh,                                // llvm.s390.vgfmh
-    s390_vistrb,                               // llvm.s390.vistrb
-    s390_vistrbs,                              // llvm.s390.vistrbs
-    s390_vistrf,                               // llvm.s390.vistrf
-    s390_vistrfs,                              // llvm.s390.vistrfs
-    s390_vistrh,                               // llvm.s390.vistrh
-    s390_vistrhs,                              // llvm.s390.vistrhs
-    s390_vlbb,                                 // llvm.s390.vlbb
-    s390_vll,                                  // llvm.s390.vll
-    s390_vlrl,                                 // llvm.s390.vlrl
-    s390_vmaeb,                                // llvm.s390.vmaeb
-    s390_vmaef,                                // llvm.s390.vmaef
-    s390_vmaeh,                                // llvm.s390.vmaeh
-    s390_vmahb,                                // llvm.s390.vmahb
-    s390_vmahf,                                // llvm.s390.vmahf
-    s390_vmahh,                                // llvm.s390.vmahh
-    s390_vmaleb,                               // llvm.s390.vmaleb
-    s390_vmalef,                               // llvm.s390.vmalef
-    s390_vmaleh,                               // llvm.s390.vmaleh
-    s390_vmalhb,                               // llvm.s390.vmalhb
-    s390_vmalhf,                               // llvm.s390.vmalhf
-    s390_vmalhh,                               // llvm.s390.vmalhh
-    s390_vmalob,                               // llvm.s390.vmalob
-    s390_vmalof,                               // llvm.s390.vmalof
-    s390_vmaloh,                               // llvm.s390.vmaloh
-    s390_vmaob,                                // llvm.s390.vmaob
-    s390_vmaof,                                // llvm.s390.vmaof
-    s390_vmaoh,                                // llvm.s390.vmaoh
-    s390_vmeb,                                 // llvm.s390.vmeb
-    s390_vmef,                                 // llvm.s390.vmef
-    s390_vmeh,                                 // llvm.s390.vmeh
-    s390_vmhb,                                 // llvm.s390.vmhb
-    s390_vmhf,                                 // llvm.s390.vmhf
-    s390_vmhh,                                 // llvm.s390.vmhh
-    s390_vmleb,                                // llvm.s390.vmleb
-    s390_vmlef,                                // llvm.s390.vmlef
-    s390_vmleh,                                // llvm.s390.vmleh
-    s390_vmlhb,                                // llvm.s390.vmlhb
-    s390_vmlhf,                                // llvm.s390.vmlhf
-    s390_vmlhh,                                // llvm.s390.vmlhh
-    s390_vmlob,                                // llvm.s390.vmlob
-    s390_vmlof,                                // llvm.s390.vmlof
-    s390_vmloh,                                // llvm.s390.vmloh
-    s390_vmob,                                 // llvm.s390.vmob
-    s390_vmof,                                 // llvm.s390.vmof
-    s390_vmoh,                                 // llvm.s390.vmoh
-    s390_vmslg,                                // llvm.s390.vmslg
-    s390_vpdi,                                 // llvm.s390.vpdi
-    s390_vperm,                                // llvm.s390.vperm
-    s390_vpklsf,                               // llvm.s390.vpklsf
-    s390_vpklsfs,                              // llvm.s390.vpklsfs
-    s390_vpklsg,                               // llvm.s390.vpklsg
-    s390_vpklsgs,                              // llvm.s390.vpklsgs
-    s390_vpklsh,                               // llvm.s390.vpklsh
-    s390_vpklshs,                              // llvm.s390.vpklshs
-    s390_vpksf,                                // llvm.s390.vpksf
-    s390_vpksfs,                               // llvm.s390.vpksfs
-    s390_vpksg,                                // llvm.s390.vpksg
-    s390_vpksgs,                               // llvm.s390.vpksgs
-    s390_vpksh,                                // llvm.s390.vpksh
-    s390_vpkshs,                               // llvm.s390.vpkshs
-    s390_vsbcbiq,                              // llvm.s390.vsbcbiq
-    s390_vsbiq,                                // llvm.s390.vsbiq
-    s390_vscbib,                               // llvm.s390.vscbib
-    s390_vscbif,                               // llvm.s390.vscbif
-    s390_vscbig,                               // llvm.s390.vscbig
-    s390_vscbih,                               // llvm.s390.vscbih
-    s390_vscbiq,                               // llvm.s390.vscbiq
-    s390_vsl,                                  // llvm.s390.vsl
-    s390_vslb,                                 // llvm.s390.vslb
-    s390_vsldb,                                // llvm.s390.vsldb
-    s390_vsq,                                  // llvm.s390.vsq
-    s390_vsra,                                 // llvm.s390.vsra
-    s390_vsrab,                                // llvm.s390.vsrab
-    s390_vsrl,                                 // llvm.s390.vsrl
-    s390_vsrlb,                                // llvm.s390.vsrlb
-    s390_vstl,                                 // llvm.s390.vstl
-    s390_vstrcb,                               // llvm.s390.vstrcb
-    s390_vstrcbs,                              // llvm.s390.vstrcbs
-    s390_vstrcf,                               // llvm.s390.vstrcf
-    s390_vstrcfs,                              // llvm.s390.vstrcfs
-    s390_vstrch,                               // llvm.s390.vstrch
-    s390_vstrchs,                              // llvm.s390.vstrchs
-    s390_vstrczb,                              // llvm.s390.vstrczb
-    s390_vstrczbs,                             // llvm.s390.vstrczbs
-    s390_vstrczf,                              // llvm.s390.vstrczf
-    s390_vstrczfs,                             // llvm.s390.vstrczfs
-    s390_vstrczh,                              // llvm.s390.vstrczh
-    s390_vstrczhs,                             // llvm.s390.vstrczhs
-    s390_vstrl,                                // llvm.s390.vstrl
-    s390_vsumb,                                // llvm.s390.vsumb
-    s390_vsumgf,                               // llvm.s390.vsumgf
-    s390_vsumgh,                               // llvm.s390.vsumgh
-    s390_vsumh,                                // llvm.s390.vsumh
-    s390_vsumqf,                               // llvm.s390.vsumqf
-    s390_vsumqg,                               // llvm.s390.vsumqg
-    s390_vtm,                                  // llvm.s390.vtm
-    s390_vuphb,                                // llvm.s390.vuphb
-    s390_vuphf,                                // llvm.s390.vuphf
-    s390_vuphh,                                // llvm.s390.vuphh
-    s390_vuplb,                                // llvm.s390.vuplb
-    s390_vuplf,                                // llvm.s390.vuplf
-    s390_vuplhb,                               // llvm.s390.vuplhb
-    s390_vuplhf,                               // llvm.s390.vuplhf
-    s390_vuplhh,                               // llvm.s390.vuplhh
-    s390_vuplhw,                               // llvm.s390.vuplhw
-    s390_vupllb,                               // llvm.s390.vupllb
-    s390_vupllf,                               // llvm.s390.vupllf
-    s390_vupllh,                               // llvm.s390.vupllh
-    wasm_current_memory,                       // llvm.wasm.current.memory
-    wasm_get_ehselector,                       // llvm.wasm.get.ehselector
-    wasm_get_exception,                        // llvm.wasm.get.exception
-    wasm_grow_memory,                          // llvm.wasm.grow.memory
-    wasm_mem_grow,                             // llvm.wasm.mem.grow
-    wasm_mem_size,                             // llvm.wasm.mem.size
-    wasm_rethrow,                              // llvm.wasm.rethrow
-    wasm_throw,                                // llvm.wasm.throw
-    x86_3dnow_pavgusb,                         // llvm.x86.3dnow.pavgusb
-    x86_3dnow_pf2id,                           // llvm.x86.3dnow.pf2id
-    x86_3dnow_pfacc,                           // llvm.x86.3dnow.pfacc
-    x86_3dnow_pfadd,                           // llvm.x86.3dnow.pfadd
-    x86_3dnow_pfcmpeq,                         // llvm.x86.3dnow.pfcmpeq
-    x86_3dnow_pfcmpge,                         // llvm.x86.3dnow.pfcmpge
-    x86_3dnow_pfcmpgt,                         // llvm.x86.3dnow.pfcmpgt
-    x86_3dnow_pfmax,                           // llvm.x86.3dnow.pfmax
-    x86_3dnow_pfmin,                           // llvm.x86.3dnow.pfmin
-    x86_3dnow_pfmul,                           // llvm.x86.3dnow.pfmul
-    x86_3dnow_pfrcp,                           // llvm.x86.3dnow.pfrcp
-    x86_3dnow_pfrcpit1,                        // llvm.x86.3dnow.pfrcpit1
-    x86_3dnow_pfrcpit2,                        // llvm.x86.3dnow.pfrcpit2
-    x86_3dnow_pfrsqit1,                        // llvm.x86.3dnow.pfrsqit1
-    x86_3dnow_pfrsqrt,                         // llvm.x86.3dnow.pfrsqrt
-    x86_3dnow_pfsub,                           // llvm.x86.3dnow.pfsub
-    x86_3dnow_pfsubr,                          // llvm.x86.3dnow.pfsubr
-    x86_3dnow_pi2fd,                           // llvm.x86.3dnow.pi2fd
-    x86_3dnow_pmulhrw,                         // llvm.x86.3dnow.pmulhrw
-    x86_3dnowa_pf2iw,                          // llvm.x86.3dnowa.pf2iw
-    x86_3dnowa_pfnacc,                         // llvm.x86.3dnowa.pfnacc
-    x86_3dnowa_pfpnacc,                        // llvm.x86.3dnowa.pfpnacc
-    x86_3dnowa_pi2fw,                          // llvm.x86.3dnowa.pi2fw
-    x86_3dnowa_pswapd,                         // llvm.x86.3dnowa.pswapd
-    x86_addcarry_u32,                          // llvm.x86.addcarry.u32
-    x86_addcarry_u64,                          // llvm.x86.addcarry.u64
-    x86_addcarryx_u32,                         // llvm.x86.addcarryx.u32
-    x86_addcarryx_u64,                         // llvm.x86.addcarryx.u64
-    x86_aesni_aesdec,                          // llvm.x86.aesni.aesdec
-    x86_aesni_aesdec_256,                      // llvm.x86.aesni.aesdec.256
-    x86_aesni_aesdec_512,                      // llvm.x86.aesni.aesdec.512
-    x86_aesni_aesdeclast,                      // llvm.x86.aesni.aesdeclast
-    x86_aesni_aesdeclast_256,                  // llvm.x86.aesni.aesdeclast.256
-    x86_aesni_aesdeclast_512,                  // llvm.x86.aesni.aesdeclast.512
-    x86_aesni_aesenc,                          // llvm.x86.aesni.aesenc
-    x86_aesni_aesenc_256,                      // llvm.x86.aesni.aesenc.256
-    x86_aesni_aesenc_512,                      // llvm.x86.aesni.aesenc.512
-    x86_aesni_aesenclast,                      // llvm.x86.aesni.aesenclast
-    x86_aesni_aesenclast_256,                  // llvm.x86.aesni.aesenclast.256
-    x86_aesni_aesenclast_512,                  // llvm.x86.aesni.aesenclast.512
-    x86_aesni_aesimc,                          // llvm.x86.aesni.aesimc
-    x86_aesni_aeskeygenassist,                 // llvm.x86.aesni.aeskeygenassist
-    x86_avx_addsub_pd_256,                     // llvm.x86.avx.addsub.pd.256
-    x86_avx_addsub_ps_256,                     // llvm.x86.avx.addsub.ps.256
-    x86_avx_blendv_pd_256,                     // llvm.x86.avx.blendv.pd.256
-    x86_avx_blendv_ps_256,                     // llvm.x86.avx.blendv.ps.256
-    x86_avx_cmp_pd_256,                        // llvm.x86.avx.cmp.pd.256
-    x86_avx_cmp_ps_256,                        // llvm.x86.avx.cmp.ps.256
-    x86_avx_cvt_pd2_ps_256,                    // llvm.x86.avx.cvt.pd2.ps.256
-    x86_avx_cvt_pd2dq_256,                     // llvm.x86.avx.cvt.pd2dq.256
-    x86_avx_cvt_ps2dq_256,                     // llvm.x86.avx.cvt.ps2dq.256
-    x86_avx_cvtdq2_ps_256,                     // llvm.x86.avx.cvtdq2.ps.256
-    x86_avx_cvtt_pd2dq_256,                    // llvm.x86.avx.cvtt.pd2dq.256
-    x86_avx_cvtt_ps2dq_256,                    // llvm.x86.avx.cvtt.ps2dq.256
-    x86_avx_dp_ps_256,                         // llvm.x86.avx.dp.ps.256
-    x86_avx_hadd_pd_256,                       // llvm.x86.avx.hadd.pd.256
-    x86_avx_hadd_ps_256,                       // llvm.x86.avx.hadd.ps.256
-    x86_avx_hsub_pd_256,                       // llvm.x86.avx.hsub.pd.256
-    x86_avx_hsub_ps_256,                       // llvm.x86.avx.hsub.ps.256
-    x86_avx_ldu_dq_256,                        // llvm.x86.avx.ldu.dq.256
-    x86_avx_maskload_pd,                       // llvm.x86.avx.maskload.pd
-    x86_avx_maskload_pd_256,                   // llvm.x86.avx.maskload.pd.256
-    x86_avx_maskload_ps,                       // llvm.x86.avx.maskload.ps
-    x86_avx_maskload_ps_256,                   // llvm.x86.avx.maskload.ps.256
-    x86_avx_maskstore_pd,                      // llvm.x86.avx.maskstore.pd
-    x86_avx_maskstore_pd_256,                  // llvm.x86.avx.maskstore.pd.256
-    x86_avx_maskstore_ps,                      // llvm.x86.avx.maskstore.ps
-    x86_avx_maskstore_ps_256,                  // llvm.x86.avx.maskstore.ps.256
-    x86_avx_max_pd_256,                        // llvm.x86.avx.max.pd.256
-    x86_avx_max_ps_256,                        // llvm.x86.avx.max.ps.256
-    x86_avx_min_pd_256,                        // llvm.x86.avx.min.pd.256
-    x86_avx_min_ps_256,                        // llvm.x86.avx.min.ps.256
-    x86_avx_movmsk_pd_256,                     // llvm.x86.avx.movmsk.pd.256
-    x86_avx_movmsk_ps_256,                     // llvm.x86.avx.movmsk.ps.256
-    x86_avx_ptestc_256,                        // llvm.x86.avx.ptestc.256
-    x86_avx_ptestnzc_256,                      // llvm.x86.avx.ptestnzc.256
-    x86_avx_ptestz_256,                        // llvm.x86.avx.ptestz.256
-    x86_avx_rcp_ps_256,                        // llvm.x86.avx.rcp.ps.256
-    x86_avx_round_pd_256,                      // llvm.x86.avx.round.pd.256
-    x86_avx_round_ps_256,                      // llvm.x86.avx.round.ps.256
-    x86_avx_rsqrt_ps_256,                      // llvm.x86.avx.rsqrt.ps.256
-    x86_avx_sqrt_pd_256,                       // llvm.x86.avx.sqrt.pd.256
-    x86_avx_sqrt_ps_256,                       // llvm.x86.avx.sqrt.ps.256
-    x86_avx_vpermilvar_pd,                     // llvm.x86.avx.vpermilvar.pd
-    x86_avx_vpermilvar_pd_256,                 // llvm.x86.avx.vpermilvar.pd.256
-    x86_avx_vpermilvar_ps,                     // llvm.x86.avx.vpermilvar.ps
-    x86_avx_vpermilvar_ps_256,                 // llvm.x86.avx.vpermilvar.ps.256
-    x86_avx_vtestc_pd,                         // llvm.x86.avx.vtestc.pd
-    x86_avx_vtestc_pd_256,                     // llvm.x86.avx.vtestc.pd.256
-    x86_avx_vtestc_ps,                         // llvm.x86.avx.vtestc.ps
-    x86_avx_vtestc_ps_256,                     // llvm.x86.avx.vtestc.ps.256
-    x86_avx_vtestnzc_pd,                       // llvm.x86.avx.vtestnzc.pd
-    x86_avx_vtestnzc_pd_256,                   // llvm.x86.avx.vtestnzc.pd.256
-    x86_avx_vtestnzc_ps,                       // llvm.x86.avx.vtestnzc.ps
-    x86_avx_vtestnzc_ps_256,                   // llvm.x86.avx.vtestnzc.ps.256
-    x86_avx_vtestz_pd,                         // llvm.x86.avx.vtestz.pd
-    x86_avx_vtestz_pd_256,                     // llvm.x86.avx.vtestz.pd.256
-    x86_avx_vtestz_ps,                         // llvm.x86.avx.vtestz.ps
-    x86_avx_vtestz_ps_256,                     // llvm.x86.avx.vtestz.ps.256
-    x86_avx_vzeroall,                          // llvm.x86.avx.vzeroall
-    x86_avx_vzeroupper,                        // llvm.x86.avx.vzeroupper
-    x86_avx2_gather_d_d,                       // llvm.x86.avx2.gather.d.d
-    x86_avx2_gather_d_d_256,                   // llvm.x86.avx2.gather.d.d.256
-    x86_avx2_gather_d_pd,                      // llvm.x86.avx2.gather.d.pd
-    x86_avx2_gather_d_pd_256,                  // llvm.x86.avx2.gather.d.pd.256
-    x86_avx2_gather_d_ps,                      // llvm.x86.avx2.gather.d.ps
-    x86_avx2_gather_d_ps_256,                  // llvm.x86.avx2.gather.d.ps.256
-    x86_avx2_gather_d_q,                       // llvm.x86.avx2.gather.d.q
-    x86_avx2_gather_d_q_256,                   // llvm.x86.avx2.gather.d.q.256
-    x86_avx2_gather_q_d,                       // llvm.x86.avx2.gather.q.d
-    x86_avx2_gather_q_d_256,                   // llvm.x86.avx2.gather.q.d.256
-    x86_avx2_gather_q_pd,                      // llvm.x86.avx2.gather.q.pd
-    x86_avx2_gather_q_pd_256,                  // llvm.x86.avx2.gather.q.pd.256
-    x86_avx2_gather_q_ps,                      // llvm.x86.avx2.gather.q.ps
-    x86_avx2_gather_q_ps_256,                  // llvm.x86.avx2.gather.q.ps.256
-    x86_avx2_gather_q_q,                       // llvm.x86.avx2.gather.q.q
-    x86_avx2_gather_q_q_256,                   // llvm.x86.avx2.gather.q.q.256
-    x86_avx2_maskload_d,                       // llvm.x86.avx2.maskload.d
-    x86_avx2_maskload_d_256,                   // llvm.x86.avx2.maskload.d.256
-    x86_avx2_maskload_q,                       // llvm.x86.avx2.maskload.q
-    x86_avx2_maskload_q_256,                   // llvm.x86.avx2.maskload.q.256
-    x86_avx2_maskstore_d,                      // llvm.x86.avx2.maskstore.d
-    x86_avx2_maskstore_d_256,                  // llvm.x86.avx2.maskstore.d.256
-    x86_avx2_maskstore_q,                      // llvm.x86.avx2.maskstore.q
-    x86_avx2_maskstore_q_256,                  // llvm.x86.avx2.maskstore.q.256
-    x86_avx2_mpsadbw,                          // llvm.x86.avx2.mpsadbw
-    x86_avx2_packssdw,                         // llvm.x86.avx2.packssdw
-    x86_avx2_packsswb,                         // llvm.x86.avx2.packsswb
-    x86_avx2_packusdw,                         // llvm.x86.avx2.packusdw
-    x86_avx2_packuswb,                         // llvm.x86.avx2.packuswb
-    x86_avx2_padds_b,                          // llvm.x86.avx2.padds.b
-    x86_avx2_padds_w,                          // llvm.x86.avx2.padds.w
-    x86_avx2_paddus_b,                         // llvm.x86.avx2.paddus.b
-    x86_avx2_paddus_w,                         // llvm.x86.avx2.paddus.w
-    x86_avx2_pblendvb,                         // llvm.x86.avx2.pblendvb
-    x86_avx2_permd,                            // llvm.x86.avx2.permd
-    x86_avx2_permps,                           // llvm.x86.avx2.permps
-    x86_avx2_phadd_d,                          // llvm.x86.avx2.phadd.d
-    x86_avx2_phadd_sw,                         // llvm.x86.avx2.phadd.sw
-    x86_avx2_phadd_w,                          // llvm.x86.avx2.phadd.w
-    x86_avx2_phsub_d,                          // llvm.x86.avx2.phsub.d
-    x86_avx2_phsub_sw,                         // llvm.x86.avx2.phsub.sw
-    x86_avx2_phsub_w,                          // llvm.x86.avx2.phsub.w
-    x86_avx2_pmadd_ub_sw,                      // llvm.x86.avx2.pmadd.ub.sw
-    x86_avx2_pmadd_wd,                         // llvm.x86.avx2.pmadd.wd
-    x86_avx2_pmovmskb,                         // llvm.x86.avx2.pmovmskb
-    x86_avx2_pmul_dq,                          // llvm.x86.avx2.pmul.dq
-    x86_avx2_pmul_hr_sw,                       // llvm.x86.avx2.pmul.hr.sw
-    x86_avx2_pmulh_w,                          // llvm.x86.avx2.pmulh.w
-    x86_avx2_pmulhu_w,                         // llvm.x86.avx2.pmulhu.w
-    x86_avx2_pmulu_dq,                         // llvm.x86.avx2.pmulu.dq
-    x86_avx2_psad_bw,                          // llvm.x86.avx2.psad.bw
-    x86_avx2_pshuf_b,                          // llvm.x86.avx2.pshuf.b
-    x86_avx2_psign_b,                          // llvm.x86.avx2.psign.b
-    x86_avx2_psign_d,                          // llvm.x86.avx2.psign.d
-    x86_avx2_psign_w,                          // llvm.x86.avx2.psign.w
-    x86_avx2_psll_d,                           // llvm.x86.avx2.psll.d
-    x86_avx2_psll_q,                           // llvm.x86.avx2.psll.q
-    x86_avx2_psll_w,                           // llvm.x86.avx2.psll.w
-    x86_avx2_pslli_d,                          // llvm.x86.avx2.pslli.d
-    x86_avx2_pslli_q,                          // llvm.x86.avx2.pslli.q
-    x86_avx2_pslli_w,                          // llvm.x86.avx2.pslli.w
-    x86_avx2_psllv_d,                          // llvm.x86.avx2.psllv.d
-    x86_avx2_psllv_d_256,                      // llvm.x86.avx2.psllv.d.256
-    x86_avx2_psllv_q,                          // llvm.x86.avx2.psllv.q
-    x86_avx2_psllv_q_256,                      // llvm.x86.avx2.psllv.q.256
-    x86_avx2_psra_d,                           // llvm.x86.avx2.psra.d
-    x86_avx2_psra_w,                           // llvm.x86.avx2.psra.w
-    x86_avx2_psrai_d,                          // llvm.x86.avx2.psrai.d
-    x86_avx2_psrai_w,                          // llvm.x86.avx2.psrai.w
-    x86_avx2_psrav_d,                          // llvm.x86.avx2.psrav.d
-    x86_avx2_psrav_d_256,                      // llvm.x86.avx2.psrav.d.256
-    x86_avx2_psrl_d,                           // llvm.x86.avx2.psrl.d
-    x86_avx2_psrl_q,                           // llvm.x86.avx2.psrl.q
-    x86_avx2_psrl_w,                           // llvm.x86.avx2.psrl.w
-    x86_avx2_psrli_d,                          // llvm.x86.avx2.psrli.d
-    x86_avx2_psrli_q,                          // llvm.x86.avx2.psrli.q
-    x86_avx2_psrli_w,                          // llvm.x86.avx2.psrli.w
-    x86_avx2_psrlv_d,                          // llvm.x86.avx2.psrlv.d
-    x86_avx2_psrlv_d_256,                      // llvm.x86.avx2.psrlv.d.256
-    x86_avx2_psrlv_q,                          // llvm.x86.avx2.psrlv.q
-    x86_avx2_psrlv_q_256,                      // llvm.x86.avx2.psrlv.q.256
-    x86_avx2_psubs_b,                          // llvm.x86.avx2.psubs.b
-    x86_avx2_psubs_w,                          // llvm.x86.avx2.psubs.w
-    x86_avx2_psubus_b,                         // llvm.x86.avx2.psubus.b
-    x86_avx2_psubus_w,                         // llvm.x86.avx2.psubus.w
-    x86_avx512_broadcastmb_128,                // llvm.x86.avx512.broadcastmb.128
-    x86_avx512_broadcastmb_256,                // llvm.x86.avx512.broadcastmb.256
-    x86_avx512_broadcastmb_512,                // llvm.x86.avx512.broadcastmb.512
-    x86_avx512_broadcastmw_128,                // llvm.x86.avx512.broadcastmw.128
-    x86_avx512_broadcastmw_256,                // llvm.x86.avx512.broadcastmw.256
-    x86_avx512_broadcastmw_512,                // llvm.x86.avx512.broadcastmw.512
-    x86_avx512_cvtsi2sd64,                     // llvm.x86.avx512.cvtsi2sd64
-    x86_avx512_cvtsi2ss32,                     // llvm.x86.avx512.cvtsi2ss32
-    x86_avx512_cvtsi2ss64,                     // llvm.x86.avx512.cvtsi2ss64
-    x86_avx512_cvttsd2si,                      // llvm.x86.avx512.cvttsd2si
-    x86_avx512_cvttsd2si64,                    // llvm.x86.avx512.cvttsd2si64
-    x86_avx512_cvttsd2usi,                     // llvm.x86.avx512.cvttsd2usi
-    x86_avx512_cvttsd2usi64,                   // llvm.x86.avx512.cvttsd2usi64
-    x86_avx512_cvttss2si,                      // llvm.x86.avx512.cvttss2si
-    x86_avx512_cvttss2si64,                    // llvm.x86.avx512.cvttss2si64
-    x86_avx512_cvttss2usi,                     // llvm.x86.avx512.cvttss2usi
-    x86_avx512_cvttss2usi64,                   // llvm.x86.avx512.cvttss2usi64
-    x86_avx512_cvtusi2sd,                      // llvm.x86.avx512.cvtusi2sd
-    x86_avx512_cvtusi2ss,                      // llvm.x86.avx512.cvtusi2ss
-    x86_avx512_cvtusi642sd,                    // llvm.x86.avx512.cvtusi642sd
-    x86_avx512_cvtusi642ss,                    // llvm.x86.avx512.cvtusi642ss
-    x86_avx512_exp2_pd,                        // llvm.x86.avx512.exp2.pd
-    x86_avx512_exp2_ps,                        // llvm.x86.avx512.exp2.ps
-    x86_avx512_gather_dpd_512,                 // llvm.x86.avx512.gather.dpd.512
-    x86_avx512_gather_dpi_512,                 // llvm.x86.avx512.gather.dpi.512
-    x86_avx512_gather_dpq_512,                 // llvm.x86.avx512.gather.dpq.512
-    x86_avx512_gather_dps_512,                 // llvm.x86.avx512.gather.dps.512
-    x86_avx512_gather_qpd_512,                 // llvm.x86.avx512.gather.qpd.512
-    x86_avx512_gather_qpi_512,                 // llvm.x86.avx512.gather.qpi.512
-    x86_avx512_gather_qpq_512,                 // llvm.x86.avx512.gather.qpq.512
-    x86_avx512_gather_qps_512,                 // llvm.x86.avx512.gather.qps.512
-    x86_avx512_gather3div2_df,                 // llvm.x86.avx512.gather3div2.df
-    x86_avx512_gather3div2_di,                 // llvm.x86.avx512.gather3div2.di
-    x86_avx512_gather3div4_df,                 // llvm.x86.avx512.gather3div4.df
-    x86_avx512_gather3div4_di,                 // llvm.x86.avx512.gather3div4.di
-    x86_avx512_gather3div4_sf,                 // llvm.x86.avx512.gather3div4.sf
-    x86_avx512_gather3div4_si,                 // llvm.x86.avx512.gather3div4.si
-    x86_avx512_gather3div8_sf,                 // llvm.x86.avx512.gather3div8.sf
-    x86_avx512_gather3div8_si,                 // llvm.x86.avx512.gather3div8.si
-    x86_avx512_gather3siv2_df,                 // llvm.x86.avx512.gather3siv2.df
-    x86_avx512_gather3siv2_di,                 // llvm.x86.avx512.gather3siv2.di
-    x86_avx512_gather3siv4_df,                 // llvm.x86.avx512.gather3siv4.df
-    x86_avx512_gather3siv4_di,                 // llvm.x86.avx512.gather3siv4.di
-    x86_avx512_gather3siv4_sf,                 // llvm.x86.avx512.gather3siv4.sf
-    x86_avx512_gather3siv4_si,                 // llvm.x86.avx512.gather3siv4.si
-    x86_avx512_gather3siv8_sf,                 // llvm.x86.avx512.gather3siv8.sf
-    x86_avx512_gather3siv8_si,                 // llvm.x86.avx512.gather3siv8.si
-    x86_avx512_gatherpf_dpd_512,               // llvm.x86.avx512.gatherpf.dpd.512
-    x86_avx512_gatherpf_dps_512,               // llvm.x86.avx512.gatherpf.dps.512
-    x86_avx512_gatherpf_qpd_512,               // llvm.x86.avx512.gatherpf.qpd.512
-    x86_avx512_gatherpf_qps_512,               // llvm.x86.avx512.gatherpf.qps.512
-    x86_avx512_mask_add_pd_512,                // llvm.x86.avx512.mask.add.pd.512
-    x86_avx512_mask_add_ps_512,                // llvm.x86.avx512.mask.add.ps.512
-    x86_avx512_mask_add_sd_round,              // llvm.x86.avx512.mask.add.sd.round
-    x86_avx512_mask_add_ss_round,              // llvm.x86.avx512.mask.add.ss.round
-    x86_avx512_mask_cmp_pd_128,                // llvm.x86.avx512.mask.cmp.pd.128
-    x86_avx512_mask_cmp_pd_256,                // llvm.x86.avx512.mask.cmp.pd.256
-    x86_avx512_mask_cmp_pd_512,                // llvm.x86.avx512.mask.cmp.pd.512
-    x86_avx512_mask_cmp_ps_128,                // llvm.x86.avx512.mask.cmp.ps.128
-    x86_avx512_mask_cmp_ps_256,                // llvm.x86.avx512.mask.cmp.ps.256
-    x86_avx512_mask_cmp_ps_512,                // llvm.x86.avx512.mask.cmp.ps.512
-    x86_avx512_mask_cmp_sd,                    // llvm.x86.avx512.mask.cmp.sd
-    x86_avx512_mask_cmp_ss,                    // llvm.x86.avx512.mask.cmp.ss
-    x86_avx512_mask_compress_b_128,            // llvm.x86.avx512.mask.compress.b.128
-    x86_avx512_mask_compress_b_256,            // llvm.x86.avx512.mask.compress.b.256
-    x86_avx512_mask_compress_b_512,            // llvm.x86.avx512.mask.compress.b.512
-    x86_avx512_mask_compress_d_128,            // llvm.x86.avx512.mask.compress.d.128
-    x86_avx512_mask_compress_d_256,            // llvm.x86.avx512.mask.compress.d.256
-    x86_avx512_mask_compress_d_512,            // llvm.x86.avx512.mask.compress.d.512
-    x86_avx512_mask_compress_pd_128,           // llvm.x86.avx512.mask.compress.pd.128
-    x86_avx512_mask_compress_pd_256,           // llvm.x86.avx512.mask.compress.pd.256
-    x86_avx512_mask_compress_pd_512,           // llvm.x86.avx512.mask.compress.pd.512
-    x86_avx512_mask_compress_ps_128,           // llvm.x86.avx512.mask.compress.ps.128
-    x86_avx512_mask_compress_ps_256,           // llvm.x86.avx512.mask.compress.ps.256
-    x86_avx512_mask_compress_ps_512,           // llvm.x86.avx512.mask.compress.ps.512
-    x86_avx512_mask_compress_q_128,            // llvm.x86.avx512.mask.compress.q.128
-    x86_avx512_mask_compress_q_256,            // llvm.x86.avx512.mask.compress.q.256
-    x86_avx512_mask_compress_q_512,            // llvm.x86.avx512.mask.compress.q.512
-    x86_avx512_mask_compress_store_b_128,      // llvm.x86.avx512.mask.compress.store.b.128
-    x86_avx512_mask_compress_store_b_256,      // llvm.x86.avx512.mask.compress.store.b.256
-    x86_avx512_mask_compress_store_b_512,      // llvm.x86.avx512.mask.compress.store.b.512
-    x86_avx512_mask_compress_store_d_128,      // llvm.x86.avx512.mask.compress.store.d.128
-    x86_avx512_mask_compress_store_d_256,      // llvm.x86.avx512.mask.compress.store.d.256
-    x86_avx512_mask_compress_store_d_512,      // llvm.x86.avx512.mask.compress.store.d.512
-    x86_avx512_mask_compress_store_pd_128,     // llvm.x86.avx512.mask.compress.store.pd.128
-    x86_avx512_mask_compress_store_pd_256,     // llvm.x86.avx512.mask.compress.store.pd.256
-    x86_avx512_mask_compress_store_pd_512,     // llvm.x86.avx512.mask.compress.store.pd.512
-    x86_avx512_mask_compress_store_ps_128,     // llvm.x86.avx512.mask.compress.store.ps.128
-    x86_avx512_mask_compress_store_ps_256,     // llvm.x86.avx512.mask.compress.store.ps.256
-    x86_avx512_mask_compress_store_ps_512,     // llvm.x86.avx512.mask.compress.store.ps.512
-    x86_avx512_mask_compress_store_q_128,      // llvm.x86.avx512.mask.compress.store.q.128
-    x86_avx512_mask_compress_store_q_256,      // llvm.x86.avx512.mask.compress.store.q.256
-    x86_avx512_mask_compress_store_q_512,      // llvm.x86.avx512.mask.compress.store.q.512
-    x86_avx512_mask_compress_store_w_128,      // llvm.x86.avx512.mask.compress.store.w.128
-    x86_avx512_mask_compress_store_w_256,      // llvm.x86.avx512.mask.compress.store.w.256
-    x86_avx512_mask_compress_store_w_512,      // llvm.x86.avx512.mask.compress.store.w.512
-    x86_avx512_mask_compress_w_128,            // llvm.x86.avx512.mask.compress.w.128
-    x86_avx512_mask_compress_w_256,            // llvm.x86.avx512.mask.compress.w.256
-    x86_avx512_mask_compress_w_512,            // llvm.x86.avx512.mask.compress.w.512
-    x86_avx512_mask_conflict_d_128,            // llvm.x86.avx512.mask.conflict.d.128
-    x86_avx512_mask_conflict_d_256,            // llvm.x86.avx512.mask.conflict.d.256
-    x86_avx512_mask_conflict_d_512,            // llvm.x86.avx512.mask.conflict.d.512
-    x86_avx512_mask_conflict_q_128,            // llvm.x86.avx512.mask.conflict.q.128
-    x86_avx512_mask_conflict_q_256,            // llvm.x86.avx512.mask.conflict.q.256
-    x86_avx512_mask_conflict_q_512,            // llvm.x86.avx512.mask.conflict.q.512
-    x86_avx512_mask_cvtdq2ps_128,              // llvm.x86.avx512.mask.cvtdq2ps.128
-    x86_avx512_mask_cvtdq2ps_256,              // llvm.x86.avx512.mask.cvtdq2ps.256
-    x86_avx512_mask_cvtdq2ps_512,              // llvm.x86.avx512.mask.cvtdq2ps.512
-    x86_avx512_mask_cvtpd2dq_128,              // llvm.x86.avx512.mask.cvtpd2dq.128
-    x86_avx512_mask_cvtpd2dq_256,              // llvm.x86.avx512.mask.cvtpd2dq.256
-    x86_avx512_mask_cvtpd2dq_512,              // llvm.x86.avx512.mask.cvtpd2dq.512
-    x86_avx512_mask_cvtpd2ps,                  // llvm.x86.avx512.mask.cvtpd2ps
-    x86_avx512_mask_cvtpd2ps_256,              // llvm.x86.avx512.mask.cvtpd2ps.256
-    x86_avx512_mask_cvtpd2ps_512,              // llvm.x86.avx512.mask.cvtpd2ps.512
-    x86_avx512_mask_cvtpd2qq_128,              // llvm.x86.avx512.mask.cvtpd2qq.128
-    x86_avx512_mask_cvtpd2qq_256,              // llvm.x86.avx512.mask.cvtpd2qq.256
-    x86_avx512_mask_cvtpd2qq_512,              // llvm.x86.avx512.mask.cvtpd2qq.512
-    x86_avx512_mask_cvtpd2udq_128,             // llvm.x86.avx512.mask.cvtpd2udq.128
-    x86_avx512_mask_cvtpd2udq_256,             // llvm.x86.avx512.mask.cvtpd2udq.256
-    x86_avx512_mask_cvtpd2udq_512,             // llvm.x86.avx512.mask.cvtpd2udq.512
-    x86_avx512_mask_cvtpd2uqq_128,             // llvm.x86.avx512.mask.cvtpd2uqq.128
-    x86_avx512_mask_cvtpd2uqq_256,             // llvm.x86.avx512.mask.cvtpd2uqq.256
-    x86_avx512_mask_cvtpd2uqq_512,             // llvm.x86.avx512.mask.cvtpd2uqq.512
-    x86_avx512_mask_cvtps2dq_128,              // llvm.x86.avx512.mask.cvtps2dq.128
-    x86_avx512_mask_cvtps2dq_256,              // llvm.x86.avx512.mask.cvtps2dq.256
-    x86_avx512_mask_cvtps2dq_512,              // llvm.x86.avx512.mask.cvtps2dq.512
-    x86_avx512_mask_cvtps2pd_128,              // llvm.x86.avx512.mask.cvtps2pd.128
-    x86_avx512_mask_cvtps2pd_256,              // llvm.x86.avx512.mask.cvtps2pd.256
-    x86_avx512_mask_cvtps2pd_512,              // llvm.x86.avx512.mask.cvtps2pd.512
-    x86_avx512_mask_cvtps2qq_128,              // llvm.x86.avx512.mask.cvtps2qq.128
-    x86_avx512_mask_cvtps2qq_256,              // llvm.x86.avx512.mask.cvtps2qq.256
-    x86_avx512_mask_cvtps2qq_512,              // llvm.x86.avx512.mask.cvtps2qq.512
-    x86_avx512_mask_cvtps2udq_128,             // llvm.x86.avx512.mask.cvtps2udq.128
-    x86_avx512_mask_cvtps2udq_256,             // llvm.x86.avx512.mask.cvtps2udq.256
-    x86_avx512_mask_cvtps2udq_512,             // llvm.x86.avx512.mask.cvtps2udq.512
-    x86_avx512_mask_cvtps2uqq_128,             // llvm.x86.avx512.mask.cvtps2uqq.128
-    x86_avx512_mask_cvtps2uqq_256,             // llvm.x86.avx512.mask.cvtps2uqq.256
-    x86_avx512_mask_cvtps2uqq_512,             // llvm.x86.avx512.mask.cvtps2uqq.512
-    x86_avx512_mask_cvtqq2pd_128,              // llvm.x86.avx512.mask.cvtqq2pd.128
-    x86_avx512_mask_cvtqq2pd_256,              // llvm.x86.avx512.mask.cvtqq2pd.256
-    x86_avx512_mask_cvtqq2pd_512,              // llvm.x86.avx512.mask.cvtqq2pd.512
-    x86_avx512_mask_cvtqq2ps_128,              // llvm.x86.avx512.mask.cvtqq2ps.128
-    x86_avx512_mask_cvtqq2ps_256,              // llvm.x86.avx512.mask.cvtqq2ps.256
-    x86_avx512_mask_cvtqq2ps_512,              // llvm.x86.avx512.mask.cvtqq2ps.512
-    x86_avx512_mask_cvtsd2ss_round,            // llvm.x86.avx512.mask.cvtsd2ss.round
-    x86_avx512_mask_cvtss2sd_round,            // llvm.x86.avx512.mask.cvtss2sd.round
-    x86_avx512_mask_cvttpd2dq_128,             // llvm.x86.avx512.mask.cvttpd2dq.128
-    x86_avx512_mask_cvttpd2dq_256,             // llvm.x86.avx512.mask.cvttpd2dq.256
-    x86_avx512_mask_cvttpd2dq_512,             // llvm.x86.avx512.mask.cvttpd2dq.512
-    x86_avx512_mask_cvttpd2qq_128,             // llvm.x86.avx512.mask.cvttpd2qq.128
-    x86_avx512_mask_cvttpd2qq_256,             // llvm.x86.avx512.mask.cvttpd2qq.256
-    x86_avx512_mask_cvttpd2qq_512,             // llvm.x86.avx512.mask.cvttpd2qq.512
-    x86_avx512_mask_cvttpd2udq_128,            // llvm.x86.avx512.mask.cvttpd2udq.128
-    x86_avx512_mask_cvttpd2udq_256,            // llvm.x86.avx512.mask.cvttpd2udq.256
-    x86_avx512_mask_cvttpd2udq_512,            // llvm.x86.avx512.mask.cvttpd2udq.512
-    x86_avx512_mask_cvttpd2uqq_128,            // llvm.x86.avx512.mask.cvttpd2uqq.128
-    x86_avx512_mask_cvttpd2uqq_256,            // llvm.x86.avx512.mask.cvttpd2uqq.256
-    x86_avx512_mask_cvttpd2uqq_512,            // llvm.x86.avx512.mask.cvttpd2uqq.512
-    x86_avx512_mask_cvttps2dq_128,             // llvm.x86.avx512.mask.cvttps2dq.128
-    x86_avx512_mask_cvttps2dq_256,             // llvm.x86.avx512.mask.cvttps2dq.256
-    x86_avx512_mask_cvttps2dq_512,             // llvm.x86.avx512.mask.cvttps2dq.512
-    x86_avx512_mask_cvttps2qq_128,             // llvm.x86.avx512.mask.cvttps2qq.128
-    x86_avx512_mask_cvttps2qq_256,             // llvm.x86.avx512.mask.cvttps2qq.256
-    x86_avx512_mask_cvttps2qq_512,             // llvm.x86.avx512.mask.cvttps2qq.512
-    x86_avx512_mask_cvttps2udq_128,            // llvm.x86.avx512.mask.cvttps2udq.128
-    x86_avx512_mask_cvttps2udq_256,            // llvm.x86.avx512.mask.cvttps2udq.256
-    x86_avx512_mask_cvttps2udq_512,            // llvm.x86.avx512.mask.cvttps2udq.512
-    x86_avx512_mask_cvttps2uqq_128,            // llvm.x86.avx512.mask.cvttps2uqq.128
-    x86_avx512_mask_cvttps2uqq_256,            // llvm.x86.avx512.mask.cvttps2uqq.256
-    x86_avx512_mask_cvttps2uqq_512,            // llvm.x86.avx512.mask.cvttps2uqq.512
-    x86_avx512_mask_cvtudq2ps_128,             // llvm.x86.avx512.mask.cvtudq2ps.128
-    x86_avx512_mask_cvtudq2ps_256,             // llvm.x86.avx512.mask.cvtudq2ps.256
-    x86_avx512_mask_cvtudq2ps_512,             // llvm.x86.avx512.mask.cvtudq2ps.512
-    x86_avx512_mask_cvtuqq2pd_128,             // llvm.x86.avx512.mask.cvtuqq2pd.128
-    x86_avx512_mask_cvtuqq2pd_256,             // llvm.x86.avx512.mask.cvtuqq2pd.256
-    x86_avx512_mask_cvtuqq2pd_512,             // llvm.x86.avx512.mask.cvtuqq2pd.512
-    x86_avx512_mask_cvtuqq2ps_128,             // llvm.x86.avx512.mask.cvtuqq2ps.128
-    x86_avx512_mask_cvtuqq2ps_256,             // llvm.x86.avx512.mask.cvtuqq2ps.256
-    x86_avx512_mask_cvtuqq2ps_512,             // llvm.x86.avx512.mask.cvtuqq2ps.512
-    x86_avx512_mask_dbpsadbw_128,              // llvm.x86.avx512.mask.dbpsadbw.128
-    x86_avx512_mask_dbpsadbw_256,              // llvm.x86.avx512.mask.dbpsadbw.256
-    x86_avx512_mask_dbpsadbw_512,              // llvm.x86.avx512.mask.dbpsadbw.512
-    x86_avx512_mask_div_pd_512,                // llvm.x86.avx512.mask.div.pd.512
-    x86_avx512_mask_div_ps_512,                // llvm.x86.avx512.mask.div.ps.512
-    x86_avx512_mask_div_sd_round,              // llvm.x86.avx512.mask.div.sd.round
-    x86_avx512_mask_div_ss_round,              // llvm.x86.avx512.mask.div.ss.round
-    x86_avx512_mask_expand_b_128,              // llvm.x86.avx512.mask.expand.b.128
-    x86_avx512_mask_expand_b_256,              // llvm.x86.avx512.mask.expand.b.256
-    x86_avx512_mask_expand_b_512,              // llvm.x86.avx512.mask.expand.b.512
-    x86_avx512_mask_expand_d_128,              // llvm.x86.avx512.mask.expand.d.128
-    x86_avx512_mask_expand_d_256,              // llvm.x86.avx512.mask.expand.d.256
-    x86_avx512_mask_expand_d_512,              // llvm.x86.avx512.mask.expand.d.512
-    x86_avx512_mask_expand_load_b_128,         // llvm.x86.avx512.mask.expand.load.b.128
-    x86_avx512_mask_expand_load_b_256,         // llvm.x86.avx512.mask.expand.load.b.256
-    x86_avx512_mask_expand_load_b_512,         // llvm.x86.avx512.mask.expand.load.b.512
-    x86_avx512_mask_expand_load_d_128,         // llvm.x86.avx512.mask.expand.load.d.128
-    x86_avx512_mask_expand_load_d_256,         // llvm.x86.avx512.mask.expand.load.d.256
-    x86_avx512_mask_expand_load_d_512,         // llvm.x86.avx512.mask.expand.load.d.512
-    x86_avx512_mask_expand_load_pd_128,        // llvm.x86.avx512.mask.expand.load.pd.128
-    x86_avx512_mask_expand_load_pd_256,        // llvm.x86.avx512.mask.expand.load.pd.256
-    x86_avx512_mask_expand_load_pd_512,        // llvm.x86.avx512.mask.expand.load.pd.512
-    x86_avx512_mask_expand_load_ps_128,        // llvm.x86.avx512.mask.expand.load.ps.128
-    x86_avx512_mask_expand_load_ps_256,        // llvm.x86.avx512.mask.expand.load.ps.256
-    x86_avx512_mask_expand_load_ps_512,        // llvm.x86.avx512.mask.expand.load.ps.512
-    x86_avx512_mask_expand_load_q_128,         // llvm.x86.avx512.mask.expand.load.q.128
-    x86_avx512_mask_expand_load_q_256,         // llvm.x86.avx512.mask.expand.load.q.256
-    x86_avx512_mask_expand_load_q_512,         // llvm.x86.avx512.mask.expand.load.q.512
-    x86_avx512_mask_expand_load_w_128,         // llvm.x86.avx512.mask.expand.load.w.128
-    x86_avx512_mask_expand_load_w_256,         // llvm.x86.avx512.mask.expand.load.w.256
-    x86_avx512_mask_expand_load_w_512,         // llvm.x86.avx512.mask.expand.load.w.512
-    x86_avx512_mask_expand_pd_128,             // llvm.x86.avx512.mask.expand.pd.128
-    x86_avx512_mask_expand_pd_256,             // llvm.x86.avx512.mask.expand.pd.256
-    x86_avx512_mask_expand_pd_512,             // llvm.x86.avx512.mask.expand.pd.512
-    x86_avx512_mask_expand_ps_128,             // llvm.x86.avx512.mask.expand.ps.128
-    x86_avx512_mask_expand_ps_256,             // llvm.x86.avx512.mask.expand.ps.256
-    x86_avx512_mask_expand_ps_512,             // llvm.x86.avx512.mask.expand.ps.512
-    x86_avx512_mask_expand_q_128,              // llvm.x86.avx512.mask.expand.q.128
-    x86_avx512_mask_expand_q_256,              // llvm.x86.avx512.mask.expand.q.256
-    x86_avx512_mask_expand_q_512,              // llvm.x86.avx512.mask.expand.q.512
-    x86_avx512_mask_expand_w_128,              // llvm.x86.avx512.mask.expand.w.128
-    x86_avx512_mask_expand_w_256,              // llvm.x86.avx512.mask.expand.w.256
-    x86_avx512_mask_expand_w_512,              // llvm.x86.avx512.mask.expand.w.512
-    x86_avx512_mask_fixupimm_pd_128,           // llvm.x86.avx512.mask.fixupimm.pd.128
-    x86_avx512_mask_fixupimm_pd_256,           // llvm.x86.avx512.mask.fixupimm.pd.256
-    x86_avx512_mask_fixupimm_pd_512,           // llvm.x86.avx512.mask.fixupimm.pd.512
-    x86_avx512_mask_fixupimm_ps_128,           // llvm.x86.avx512.mask.fixupimm.ps.128
-    x86_avx512_mask_fixupimm_ps_256,           // llvm.x86.avx512.mask.fixupimm.ps.256
-    x86_avx512_mask_fixupimm_ps_512,           // llvm.x86.avx512.mask.fixupimm.ps.512
-    x86_avx512_mask_fixupimm_sd,               // llvm.x86.avx512.mask.fixupimm.sd
-    x86_avx512_mask_fixupimm_ss,               // llvm.x86.avx512.mask.fixupimm.ss
-    x86_avx512_mask_fpclass_pd_128,            // llvm.x86.avx512.mask.fpclass.pd.128
-    x86_avx512_mask_fpclass_pd_256,            // llvm.x86.avx512.mask.fpclass.pd.256
-    x86_avx512_mask_fpclass_pd_512,            // llvm.x86.avx512.mask.fpclass.pd.512
-    x86_avx512_mask_fpclass_ps_128,            // llvm.x86.avx512.mask.fpclass.ps.128
-    x86_avx512_mask_fpclass_ps_256,            // llvm.x86.avx512.mask.fpclass.ps.256
-    x86_avx512_mask_fpclass_ps_512,            // llvm.x86.avx512.mask.fpclass.ps.512
-    x86_avx512_mask_fpclass_sd,                // llvm.x86.avx512.mask.fpclass.sd
-    x86_avx512_mask_fpclass_ss,                // llvm.x86.avx512.mask.fpclass.ss
-    x86_avx512_mask_getexp_pd_128,             // llvm.x86.avx512.mask.getexp.pd.128
-    x86_avx512_mask_getexp_pd_256,             // llvm.x86.avx512.mask.getexp.pd.256
-    x86_avx512_mask_getexp_pd_512,             // llvm.x86.avx512.mask.getexp.pd.512
-    x86_avx512_mask_getexp_ps_128,             // llvm.x86.avx512.mask.getexp.ps.128
-    x86_avx512_mask_getexp_ps_256,             // llvm.x86.avx512.mask.getexp.ps.256
-    x86_avx512_mask_getexp_ps_512,             // llvm.x86.avx512.mask.getexp.ps.512
-    x86_avx512_mask_getexp_sd,                 // llvm.x86.avx512.mask.getexp.sd
-    x86_avx512_mask_getexp_ss,                 // llvm.x86.avx512.mask.getexp.ss
-    x86_avx512_mask_getmant_pd_128,            // llvm.x86.avx512.mask.getmant.pd.128
-    x86_avx512_mask_getmant_pd_256,            // llvm.x86.avx512.mask.getmant.pd.256
-    x86_avx512_mask_getmant_pd_512,            // llvm.x86.avx512.mask.getmant.pd.512
-    x86_avx512_mask_getmant_ps_128,            // llvm.x86.avx512.mask.getmant.ps.128
-    x86_avx512_mask_getmant_ps_256,            // llvm.x86.avx512.mask.getmant.ps.256
-    x86_avx512_mask_getmant_ps_512,            // llvm.x86.avx512.mask.getmant.ps.512
-    x86_avx512_mask_getmant_sd,                // llvm.x86.avx512.mask.getmant.sd
-    x86_avx512_mask_getmant_ss,                // llvm.x86.avx512.mask.getmant.ss
-    x86_avx512_mask_max_pd_512,                // llvm.x86.avx512.mask.max.pd.512
-    x86_avx512_mask_max_ps_512,                // llvm.x86.avx512.mask.max.ps.512
-    x86_avx512_mask_max_sd_round,              // llvm.x86.avx512.mask.max.sd.round
-    x86_avx512_mask_max_ss_round,              // llvm.x86.avx512.mask.max.ss.round
-    x86_avx512_mask_min_pd_512,                // llvm.x86.avx512.mask.min.pd.512
-    x86_avx512_mask_min_ps_512,                // llvm.x86.avx512.mask.min.ps.512
-    x86_avx512_mask_min_sd_round,              // llvm.x86.avx512.mask.min.sd.round
-    x86_avx512_mask_min_ss_round,              // llvm.x86.avx512.mask.min.ss.round
-    x86_avx512_mask_mul_pd_512,                // llvm.x86.avx512.mask.mul.pd.512
-    x86_avx512_mask_mul_ps_512,                // llvm.x86.avx512.mask.mul.ps.512
-    x86_avx512_mask_mul_sd_round,              // llvm.x86.avx512.mask.mul.sd.round
-    x86_avx512_mask_mul_ss_round,              // llvm.x86.avx512.mask.mul.ss.round
-    x86_avx512_mask_padds_b_128,               // llvm.x86.avx512.mask.padds.b.128
-    x86_avx512_mask_padds_b_256,               // llvm.x86.avx512.mask.padds.b.256
-    x86_avx512_mask_padds_b_512,               // llvm.x86.avx512.mask.padds.b.512
-    x86_avx512_mask_padds_w_128,               // llvm.x86.avx512.mask.padds.w.128
-    x86_avx512_mask_padds_w_256,               // llvm.x86.avx512.mask.padds.w.256
-    x86_avx512_mask_padds_w_512,               // llvm.x86.avx512.mask.padds.w.512
-    x86_avx512_mask_paddus_b_128,              // llvm.x86.avx512.mask.paddus.b.128
-    x86_avx512_mask_paddus_b_256,              // llvm.x86.avx512.mask.paddus.b.256
-    x86_avx512_mask_paddus_b_512,              // llvm.x86.avx512.mask.paddus.b.512
-    x86_avx512_mask_paddus_w_128,              // llvm.x86.avx512.mask.paddus.w.128
-    x86_avx512_mask_paddus_w_256,              // llvm.x86.avx512.mask.paddus.w.256
-    x86_avx512_mask_paddus_w_512,              // llvm.x86.avx512.mask.paddus.w.512
-    x86_avx512_mask_permvar_df_256,            // llvm.x86.avx512.mask.permvar.df.256
-    x86_avx512_mask_permvar_df_512,            // llvm.x86.avx512.mask.permvar.df.512
-    x86_avx512_mask_permvar_di_256,            // llvm.x86.avx512.mask.permvar.di.256
-    x86_avx512_mask_permvar_di_512,            // llvm.x86.avx512.mask.permvar.di.512
-    x86_avx512_mask_permvar_hi_128,            // llvm.x86.avx512.mask.permvar.hi.128
-    x86_avx512_mask_permvar_hi_256,            // llvm.x86.avx512.mask.permvar.hi.256
-    x86_avx512_mask_permvar_hi_512,            // llvm.x86.avx512.mask.permvar.hi.512
-    x86_avx512_mask_permvar_qi_128,            // llvm.x86.avx512.mask.permvar.qi.128
-    x86_avx512_mask_permvar_qi_256,            // llvm.x86.avx512.mask.permvar.qi.256
-    x86_avx512_mask_permvar_qi_512,            // llvm.x86.avx512.mask.permvar.qi.512
-    x86_avx512_mask_permvar_sf_256,            // llvm.x86.avx512.mask.permvar.sf.256
-    x86_avx512_mask_permvar_sf_512,            // llvm.x86.avx512.mask.permvar.sf.512
-    x86_avx512_mask_permvar_si_256,            // llvm.x86.avx512.mask.permvar.si.256
-    x86_avx512_mask_permvar_si_512,            // llvm.x86.avx512.mask.permvar.si.512
-    x86_avx512_mask_pmaddubs_w_128,            // llvm.x86.avx512.mask.pmaddubs.w.128
-    x86_avx512_mask_pmaddubs_w_256,            // llvm.x86.avx512.mask.pmaddubs.w.256
-    x86_avx512_mask_pmaddubs_w_512,            // llvm.x86.avx512.mask.pmaddubs.w.512
-    x86_avx512_mask_pmaddw_d_128,              // llvm.x86.avx512.mask.pmaddw.d.128
-    x86_avx512_mask_pmaddw_d_256,              // llvm.x86.avx512.mask.pmaddw.d.256
-    x86_avx512_mask_pmaddw_d_512,              // llvm.x86.avx512.mask.pmaddw.d.512
-    x86_avx512_mask_pmov_db_128,               // llvm.x86.avx512.mask.pmov.db.128
-    x86_avx512_mask_pmov_db_256,               // llvm.x86.avx512.mask.pmov.db.256
-    x86_avx512_mask_pmov_db_512,               // llvm.x86.avx512.mask.pmov.db.512
-    x86_avx512_mask_pmov_db_mem_128,           // llvm.x86.avx512.mask.pmov.db.mem.128
-    x86_avx512_mask_pmov_db_mem_256,           // llvm.x86.avx512.mask.pmov.db.mem.256
-    x86_avx512_mask_pmov_db_mem_512,           // llvm.x86.avx512.mask.pmov.db.mem.512
-    x86_avx512_mask_pmov_dw_128,               // llvm.x86.avx512.mask.pmov.dw.128
-    x86_avx512_mask_pmov_dw_256,               // llvm.x86.avx512.mask.pmov.dw.256
-    x86_avx512_mask_pmov_dw_512,               // llvm.x86.avx512.mask.pmov.dw.512
-    x86_avx512_mask_pmov_dw_mem_128,           // llvm.x86.avx512.mask.pmov.dw.mem.128
-    x86_avx512_mask_pmov_dw_mem_256,           // llvm.x86.avx512.mask.pmov.dw.mem.256
-    x86_avx512_mask_pmov_dw_mem_512,           // llvm.x86.avx512.mask.pmov.dw.mem.512
-    x86_avx512_mask_pmov_qb_128,               // llvm.x86.avx512.mask.pmov.qb.128
-    x86_avx512_mask_pmov_qb_256,               // llvm.x86.avx512.mask.pmov.qb.256
-    x86_avx512_mask_pmov_qb_512,               // llvm.x86.avx512.mask.pmov.qb.512
-    x86_avx512_mask_pmov_qb_mem_128,           // llvm.x86.avx512.mask.pmov.qb.mem.128
-    x86_avx512_mask_pmov_qb_mem_256,           // llvm.x86.avx512.mask.pmov.qb.mem.256
-    x86_avx512_mask_pmov_qb_mem_512,           // llvm.x86.avx512.mask.pmov.qb.mem.512
-    x86_avx512_mask_pmov_qd_128,               // llvm.x86.avx512.mask.pmov.qd.128
-    x86_avx512_mask_pmov_qd_256,               // llvm.x86.avx512.mask.pmov.qd.256
-    x86_avx512_mask_pmov_qd_512,               // llvm.x86.avx512.mask.pmov.qd.512
-    x86_avx512_mask_pmov_qd_mem_128,           // llvm.x86.avx512.mask.pmov.qd.mem.128
-    x86_avx512_mask_pmov_qd_mem_256,           // llvm.x86.avx512.mask.pmov.qd.mem.256
-    x86_avx512_mask_pmov_qd_mem_512,           // llvm.x86.avx512.mask.pmov.qd.mem.512
-    x86_avx512_mask_pmov_qw_128,               // llvm.x86.avx512.mask.pmov.qw.128
-    x86_avx512_mask_pmov_qw_256,               // llvm.x86.avx512.mask.pmov.qw.256
-    x86_avx512_mask_pmov_qw_512,               // llvm.x86.avx512.mask.pmov.qw.512
-    x86_avx512_mask_pmov_qw_mem_128,           // llvm.x86.avx512.mask.pmov.qw.mem.128
-    x86_avx512_mask_pmov_qw_mem_256,           // llvm.x86.avx512.mask.pmov.qw.mem.256
-    x86_avx512_mask_pmov_qw_mem_512,           // llvm.x86.avx512.mask.pmov.qw.mem.512
-    x86_avx512_mask_pmov_wb_128,               // llvm.x86.avx512.mask.pmov.wb.128
-    x86_avx512_mask_pmov_wb_256,               // llvm.x86.avx512.mask.pmov.wb.256
-    x86_avx512_mask_pmov_wb_512,               // llvm.x86.avx512.mask.pmov.wb.512
-    x86_avx512_mask_pmov_wb_mem_128,           // llvm.x86.avx512.mask.pmov.wb.mem.128
-    x86_avx512_mask_pmov_wb_mem_256,           // llvm.x86.avx512.mask.pmov.wb.mem.256
-    x86_avx512_mask_pmov_wb_mem_512,           // llvm.x86.avx512.mask.pmov.wb.mem.512
-    x86_avx512_mask_pmovs_db_128,              // llvm.x86.avx512.mask.pmovs.db.128
-    x86_avx512_mask_pmovs_db_256,              // llvm.x86.avx512.mask.pmovs.db.256
-    x86_avx512_mask_pmovs_db_512,              // llvm.x86.avx512.mask.pmovs.db.512
-    x86_avx512_mask_pmovs_db_mem_128,          // llvm.x86.avx512.mask.pmovs.db.mem.128
-    x86_avx512_mask_pmovs_db_mem_256,          // llvm.x86.avx512.mask.pmovs.db.mem.256
-    x86_avx512_mask_pmovs_db_mem_512,          // llvm.x86.avx512.mask.pmovs.db.mem.512
-    x86_avx512_mask_pmovs_dw_128,              // llvm.x86.avx512.mask.pmovs.dw.128
-    x86_avx512_mask_pmovs_dw_256,              // llvm.x86.avx512.mask.pmovs.dw.256
-    x86_avx512_mask_pmovs_dw_512,              // llvm.x86.avx512.mask.pmovs.dw.512
-    x86_avx512_mask_pmovs_dw_mem_128,          // llvm.x86.avx512.mask.pmovs.dw.mem.128
-    x86_avx512_mask_pmovs_dw_mem_256,          // llvm.x86.avx512.mask.pmovs.dw.mem.256
-    x86_avx512_mask_pmovs_dw_mem_512,          // llvm.x86.avx512.mask.pmovs.dw.mem.512
-    x86_avx512_mask_pmovs_qb_128,              // llvm.x86.avx512.mask.pmovs.qb.128
-    x86_avx512_mask_pmovs_qb_256,              // llvm.x86.avx512.mask.pmovs.qb.256
-    x86_avx512_mask_pmovs_qb_512,              // llvm.x86.avx512.mask.pmovs.qb.512
-    x86_avx512_mask_pmovs_qb_mem_128,          // llvm.x86.avx512.mask.pmovs.qb.mem.128
-    x86_avx512_mask_pmovs_qb_mem_256,          // llvm.x86.avx512.mask.pmovs.qb.mem.256
-    x86_avx512_mask_pmovs_qb_mem_512,          // llvm.x86.avx512.mask.pmovs.qb.mem.512
-    x86_avx512_mask_pmovs_qd_128,              // llvm.x86.avx512.mask.pmovs.qd.128
-    x86_avx512_mask_pmovs_qd_256,              // llvm.x86.avx512.mask.pmovs.qd.256
-    x86_avx512_mask_pmovs_qd_512,              // llvm.x86.avx512.mask.pmovs.qd.512
-    x86_avx512_mask_pmovs_qd_mem_128,          // llvm.x86.avx512.mask.pmovs.qd.mem.128
-    x86_avx512_mask_pmovs_qd_mem_256,          // llvm.x86.avx512.mask.pmovs.qd.mem.256
-    x86_avx512_mask_pmovs_qd_mem_512,          // llvm.x86.avx512.mask.pmovs.qd.mem.512
-    x86_avx512_mask_pmovs_qw_128,              // llvm.x86.avx512.mask.pmovs.qw.128
-    x86_avx512_mask_pmovs_qw_256,              // llvm.x86.avx512.mask.pmovs.qw.256
-    x86_avx512_mask_pmovs_qw_512,              // llvm.x86.avx512.mask.pmovs.qw.512
-    x86_avx512_mask_pmovs_qw_mem_128,          // llvm.x86.avx512.mask.pmovs.qw.mem.128
-    x86_avx512_mask_pmovs_qw_mem_256,          // llvm.x86.avx512.mask.pmovs.qw.mem.256
-    x86_avx512_mask_pmovs_qw_mem_512,          // llvm.x86.avx512.mask.pmovs.qw.mem.512
-    x86_avx512_mask_pmovs_wb_128,              // llvm.x86.avx512.mask.pmovs.wb.128
-    x86_avx512_mask_pmovs_wb_256,              // llvm.x86.avx512.mask.pmovs.wb.256
-    x86_avx512_mask_pmovs_wb_512,              // llvm.x86.avx512.mask.pmovs.wb.512
-    x86_avx512_mask_pmovs_wb_mem_128,          // llvm.x86.avx512.mask.pmovs.wb.mem.128
-    x86_avx512_mask_pmovs_wb_mem_256,          // llvm.x86.avx512.mask.pmovs.wb.mem.256
-    x86_avx512_mask_pmovs_wb_mem_512,          // llvm.x86.avx512.mask.pmovs.wb.mem.512
-    x86_avx512_mask_pmovus_db_128,             // llvm.x86.avx512.mask.pmovus.db.128
-    x86_avx512_mask_pmovus_db_256,             // llvm.x86.avx512.mask.pmovus.db.256
-    x86_avx512_mask_pmovus_db_512,             // llvm.x86.avx512.mask.pmovus.db.512
-    x86_avx512_mask_pmovus_db_mem_128,         // llvm.x86.avx512.mask.pmovus.db.mem.128
-    x86_avx512_mask_pmovus_db_mem_256,         // llvm.x86.avx512.mask.pmovus.db.mem.256
-    x86_avx512_mask_pmovus_db_mem_512,         // llvm.x86.avx512.mask.pmovus.db.mem.512
-    x86_avx512_mask_pmovus_dw_128,             // llvm.x86.avx512.mask.pmovus.dw.128
-    x86_avx512_mask_pmovus_dw_256,             // llvm.x86.avx512.mask.pmovus.dw.256
-    x86_avx512_mask_pmovus_dw_512,             // llvm.x86.avx512.mask.pmovus.dw.512
-    x86_avx512_mask_pmovus_dw_mem_128,         // llvm.x86.avx512.mask.pmovus.dw.mem.128
-    x86_avx512_mask_pmovus_dw_mem_256,         // llvm.x86.avx512.mask.pmovus.dw.mem.256
-    x86_avx512_mask_pmovus_dw_mem_512,         // llvm.x86.avx512.mask.pmovus.dw.mem.512
-    x86_avx512_mask_pmovus_qb_128,             // llvm.x86.avx512.mask.pmovus.qb.128
-    x86_avx512_mask_pmovus_qb_256,             // llvm.x86.avx512.mask.pmovus.qb.256
-    x86_avx512_mask_pmovus_qb_512,             // llvm.x86.avx512.mask.pmovus.qb.512
-    x86_avx512_mask_pmovus_qb_mem_128,         // llvm.x86.avx512.mask.pmovus.qb.mem.128
-    x86_avx512_mask_pmovus_qb_mem_256,         // llvm.x86.avx512.mask.pmovus.qb.mem.256
-    x86_avx512_mask_pmovus_qb_mem_512,         // llvm.x86.avx512.mask.pmovus.qb.mem.512
-    x86_avx512_mask_pmovus_qd_128,             // llvm.x86.avx512.mask.pmovus.qd.128
-    x86_avx512_mask_pmovus_qd_256,             // llvm.x86.avx512.mask.pmovus.qd.256
-    x86_avx512_mask_pmovus_qd_512,             // llvm.x86.avx512.mask.pmovus.qd.512
-    x86_avx512_mask_pmovus_qd_mem_128,         // llvm.x86.avx512.mask.pmovus.qd.mem.128
-    x86_avx512_mask_pmovus_qd_mem_256,         // llvm.x86.avx512.mask.pmovus.qd.mem.256
-    x86_avx512_mask_pmovus_qd_mem_512,         // llvm.x86.avx512.mask.pmovus.qd.mem.512
-    x86_avx512_mask_pmovus_qw_128,             // llvm.x86.avx512.mask.pmovus.qw.128
-    x86_avx512_mask_pmovus_qw_256,             // llvm.x86.avx512.mask.pmovus.qw.256
-    x86_avx512_mask_pmovus_qw_512,             // llvm.x86.avx512.mask.pmovus.qw.512
-    x86_avx512_mask_pmovus_qw_mem_128,         // llvm.x86.avx512.mask.pmovus.qw.mem.128
-    x86_avx512_mask_pmovus_qw_mem_256,         // llvm.x86.avx512.mask.pmovus.qw.mem.256
-    x86_avx512_mask_pmovus_qw_mem_512,         // llvm.x86.avx512.mask.pmovus.qw.mem.512
-    x86_avx512_mask_pmovus_wb_128,             // llvm.x86.avx512.mask.pmovus.wb.128
-    x86_avx512_mask_pmovus_wb_256,             // llvm.x86.avx512.mask.pmovus.wb.256
-    x86_avx512_mask_pmovus_wb_512,             // llvm.x86.avx512.mask.pmovus.wb.512
-    x86_avx512_mask_pmovus_wb_mem_128,         // llvm.x86.avx512.mask.pmovus.wb.mem.128
-    x86_avx512_mask_pmovus_wb_mem_256,         // llvm.x86.avx512.mask.pmovus.wb.mem.256
-    x86_avx512_mask_pmovus_wb_mem_512,         // llvm.x86.avx512.mask.pmovus.wb.mem.512
-    x86_avx512_mask_pmultishift_qb_128,        // llvm.x86.avx512.mask.pmultishift.qb.128
-    x86_avx512_mask_pmultishift_qb_256,        // llvm.x86.avx512.mask.pmultishift.qb.256
-    x86_avx512_mask_pmultishift_qb_512,        // llvm.x86.avx512.mask.pmultishift.qb.512
-    x86_avx512_mask_prol_d_128,                // llvm.x86.avx512.mask.prol.d.128
-    x86_avx512_mask_prol_d_256,                // llvm.x86.avx512.mask.prol.d.256
-    x86_avx512_mask_prol_d_512,                // llvm.x86.avx512.mask.prol.d.512
-    x86_avx512_mask_prol_q_128,                // llvm.x86.avx512.mask.prol.q.128
-    x86_avx512_mask_prol_q_256,                // llvm.x86.avx512.mask.prol.q.256
-    x86_avx512_mask_prol_q_512,                // llvm.x86.avx512.mask.prol.q.512
-    x86_avx512_mask_prolv_d_128,               // llvm.x86.avx512.mask.prolv.d.128
-    x86_avx512_mask_prolv_d_256,               // llvm.x86.avx512.mask.prolv.d.256
-    x86_avx512_mask_prolv_d_512,               // llvm.x86.avx512.mask.prolv.d.512
-    x86_avx512_mask_prolv_q_128,               // llvm.x86.avx512.mask.prolv.q.128
-    x86_avx512_mask_prolv_q_256,               // llvm.x86.avx512.mask.prolv.q.256
-    x86_avx512_mask_prolv_q_512,               // llvm.x86.avx512.mask.prolv.q.512
-    x86_avx512_mask_pror_d_128,                // llvm.x86.avx512.mask.pror.d.128
-    x86_avx512_mask_pror_d_256,                // llvm.x86.avx512.mask.pror.d.256
-    x86_avx512_mask_pror_d_512,                // llvm.x86.avx512.mask.pror.d.512
-    x86_avx512_mask_pror_q_128,                // llvm.x86.avx512.mask.pror.q.128
-    x86_avx512_mask_pror_q_256,                // llvm.x86.avx512.mask.pror.q.256
-    x86_avx512_mask_pror_q_512,                // llvm.x86.avx512.mask.pror.q.512
-    x86_avx512_mask_prorv_d_128,               // llvm.x86.avx512.mask.prorv.d.128
-    x86_avx512_mask_prorv_d_256,               // llvm.x86.avx512.mask.prorv.d.256
-    x86_avx512_mask_prorv_d_512,               // llvm.x86.avx512.mask.prorv.d.512
-    x86_avx512_mask_prorv_q_128,               // llvm.x86.avx512.mask.prorv.q.128
-    x86_avx512_mask_prorv_q_256,               // llvm.x86.avx512.mask.prorv.q.256
-    x86_avx512_mask_prorv_q_512,               // llvm.x86.avx512.mask.prorv.q.512
-    x86_avx512_mask_psubs_b_128,               // llvm.x86.avx512.mask.psubs.b.128
-    x86_avx512_mask_psubs_b_256,               // llvm.x86.avx512.mask.psubs.b.256
-    x86_avx512_mask_psubs_b_512,               // llvm.x86.avx512.mask.psubs.b.512
-    x86_avx512_mask_psubs_w_128,               // llvm.x86.avx512.mask.psubs.w.128
-    x86_avx512_mask_psubs_w_256,               // llvm.x86.avx512.mask.psubs.w.256
-    x86_avx512_mask_psubs_w_512,               // llvm.x86.avx512.mask.psubs.w.512
-    x86_avx512_mask_psubus_b_128,              // llvm.x86.avx512.mask.psubus.b.128
-    x86_avx512_mask_psubus_b_256,              // llvm.x86.avx512.mask.psubus.b.256
-    x86_avx512_mask_psubus_b_512,              // llvm.x86.avx512.mask.psubus.b.512
-    x86_avx512_mask_psubus_w_128,              // llvm.x86.avx512.mask.psubus.w.128
-    x86_avx512_mask_psubus_w_256,              // llvm.x86.avx512.mask.psubus.w.256
-    x86_avx512_mask_psubus_w_512,              // llvm.x86.avx512.mask.psubus.w.512
-    x86_avx512_mask_pternlog_d_128,            // llvm.x86.avx512.mask.pternlog.d.128
-    x86_avx512_mask_pternlog_d_256,            // llvm.x86.avx512.mask.pternlog.d.256
-    x86_avx512_mask_pternlog_d_512,            // llvm.x86.avx512.mask.pternlog.d.512
-    x86_avx512_mask_pternlog_q_128,            // llvm.x86.avx512.mask.pternlog.q.128
-    x86_avx512_mask_pternlog_q_256,            // llvm.x86.avx512.mask.pternlog.q.256
-    x86_avx512_mask_pternlog_q_512,            // llvm.x86.avx512.mask.pternlog.q.512
-    x86_avx512_mask_range_pd_128,              // llvm.x86.avx512.mask.range.pd.128
-    x86_avx512_mask_range_pd_256,              // llvm.x86.avx512.mask.range.pd.256
-    x86_avx512_mask_range_pd_512,              // llvm.x86.avx512.mask.range.pd.512
-    x86_avx512_mask_range_ps_128,              // llvm.x86.avx512.mask.range.ps.128
-    x86_avx512_mask_range_ps_256,              // llvm.x86.avx512.mask.range.ps.256
-    x86_avx512_mask_range_ps_512,              // llvm.x86.avx512.mask.range.ps.512
-    x86_avx512_mask_range_sd,                  // llvm.x86.avx512.mask.range.sd
-    x86_avx512_mask_range_ss,                  // llvm.x86.avx512.mask.range.ss
-    x86_avx512_mask_reduce_pd_128,             // llvm.x86.avx512.mask.reduce.pd.128
-    x86_avx512_mask_reduce_pd_256,             // llvm.x86.avx512.mask.reduce.pd.256
-    x86_avx512_mask_reduce_pd_512,             // llvm.x86.avx512.mask.reduce.pd.512
-    x86_avx512_mask_reduce_ps_128,             // llvm.x86.avx512.mask.reduce.ps.128
-    x86_avx512_mask_reduce_ps_256,             // llvm.x86.avx512.mask.reduce.ps.256
-    x86_avx512_mask_reduce_ps_512,             // llvm.x86.avx512.mask.reduce.ps.512
-    x86_avx512_mask_reduce_sd,                 // llvm.x86.avx512.mask.reduce.sd
-    x86_avx512_mask_reduce_ss,                 // llvm.x86.avx512.mask.reduce.ss
-    x86_avx512_mask_rndscale_pd_128,           // llvm.x86.avx512.mask.rndscale.pd.128
-    x86_avx512_mask_rndscale_pd_256,           // llvm.x86.avx512.mask.rndscale.pd.256
-    x86_avx512_mask_rndscale_pd_512,           // llvm.x86.avx512.mask.rndscale.pd.512
-    x86_avx512_mask_rndscale_ps_128,           // llvm.x86.avx512.mask.rndscale.ps.128
-    x86_avx512_mask_rndscale_ps_256,           // llvm.x86.avx512.mask.rndscale.ps.256
-    x86_avx512_mask_rndscale_ps_512,           // llvm.x86.avx512.mask.rndscale.ps.512
-    x86_avx512_mask_rndscale_sd,               // llvm.x86.avx512.mask.rndscale.sd
-    x86_avx512_mask_rndscale_ss,               // llvm.x86.avx512.mask.rndscale.ss
-    x86_avx512_mask_scalef_pd_128,             // llvm.x86.avx512.mask.scalef.pd.128
-    x86_avx512_mask_scalef_pd_256,             // llvm.x86.avx512.mask.scalef.pd.256
-    x86_avx512_mask_scalef_pd_512,             // llvm.x86.avx512.mask.scalef.pd.512
-    x86_avx512_mask_scalef_ps_128,             // llvm.x86.avx512.mask.scalef.ps.128
-    x86_avx512_mask_scalef_ps_256,             // llvm.x86.avx512.mask.scalef.ps.256
-    x86_avx512_mask_scalef_ps_512,             // llvm.x86.avx512.mask.scalef.ps.512
-    x86_avx512_mask_scalef_sd,                 // llvm.x86.avx512.mask.scalef.sd
-    x86_avx512_mask_scalef_ss,                 // llvm.x86.avx512.mask.scalef.ss
-    x86_avx512_mask_sqrt_pd_128,               // llvm.x86.avx512.mask.sqrt.pd.128
-    x86_avx512_mask_sqrt_pd_256,               // llvm.x86.avx512.mask.sqrt.pd.256
-    x86_avx512_mask_sqrt_pd_512,               // llvm.x86.avx512.mask.sqrt.pd.512
-    x86_avx512_mask_sqrt_ps_128,               // llvm.x86.avx512.mask.sqrt.ps.128
-    x86_avx512_mask_sqrt_ps_256,               // llvm.x86.avx512.mask.sqrt.ps.256
-    x86_avx512_mask_sqrt_ps_512,               // llvm.x86.avx512.mask.sqrt.ps.512
-    x86_avx512_mask_sqrt_sd,                   // llvm.x86.avx512.mask.sqrt.sd
-    x86_avx512_mask_sqrt_ss,                   // llvm.x86.avx512.mask.sqrt.ss
-    x86_avx512_mask_store_ss,                  // llvm.x86.avx512.mask.store.ss
-    x86_avx512_mask_sub_pd_512,                // llvm.x86.avx512.mask.sub.pd.512
-    x86_avx512_mask_sub_ps_512,                // llvm.x86.avx512.mask.sub.ps.512
-    x86_avx512_mask_sub_sd_round,              // llvm.x86.avx512.mask.sub.sd.round
-    x86_avx512_mask_sub_ss_round,              // llvm.x86.avx512.mask.sub.ss.round
-    x86_avx512_mask_vcvtph2ps_128,             // llvm.x86.avx512.mask.vcvtph2ps.128
-    x86_avx512_mask_vcvtph2ps_256,             // llvm.x86.avx512.mask.vcvtph2ps.256
-    x86_avx512_mask_vcvtph2ps_512,             // llvm.x86.avx512.mask.vcvtph2ps.512
-    x86_avx512_mask_vcvtps2ph_128,             // llvm.x86.avx512.mask.vcvtps2ph.128
-    x86_avx512_mask_vcvtps2ph_256,             // llvm.x86.avx512.mask.vcvtps2ph.256
-    x86_avx512_mask_vcvtps2ph_512,             // llvm.x86.avx512.mask.vcvtps2ph.512
-    x86_avx512_mask_vfmadd_pd_128,             // llvm.x86.avx512.mask.vfmadd.pd.128
-    x86_avx512_mask_vfmadd_pd_256,             // llvm.x86.avx512.mask.vfmadd.pd.256
-    x86_avx512_mask_vfmadd_pd_512,             // llvm.x86.avx512.mask.vfmadd.pd.512
-    x86_avx512_mask_vfmadd_ps_128,             // llvm.x86.avx512.mask.vfmadd.ps.128
-    x86_avx512_mask_vfmadd_ps_256,             // llvm.x86.avx512.mask.vfmadd.ps.256
-    x86_avx512_mask_vfmadd_ps_512,             // llvm.x86.avx512.mask.vfmadd.ps.512
-    x86_avx512_mask_vfmadd_sd,                 // llvm.x86.avx512.mask.vfmadd.sd
-    x86_avx512_mask_vfmadd_ss,                 // llvm.x86.avx512.mask.vfmadd.ss
-    x86_avx512_mask_vfmaddsub_pd_128,          // llvm.x86.avx512.mask.vfmaddsub.pd.128
-    x86_avx512_mask_vfmaddsub_pd_256,          // llvm.x86.avx512.mask.vfmaddsub.pd.256
-    x86_avx512_mask_vfmaddsub_pd_512,          // llvm.x86.avx512.mask.vfmaddsub.pd.512
-    x86_avx512_mask_vfmaddsub_ps_128,          // llvm.x86.avx512.mask.vfmaddsub.ps.128
-    x86_avx512_mask_vfmaddsub_ps_256,          // llvm.x86.avx512.mask.vfmaddsub.ps.256
-    x86_avx512_mask_vfmaddsub_ps_512,          // llvm.x86.avx512.mask.vfmaddsub.ps.512
-    x86_avx512_mask_vfnmadd_pd_128,            // llvm.x86.avx512.mask.vfnmadd.pd.128
-    x86_avx512_mask_vfnmadd_pd_256,            // llvm.x86.avx512.mask.vfnmadd.pd.256
-    x86_avx512_mask_vfnmadd_pd_512,            // llvm.x86.avx512.mask.vfnmadd.pd.512
-    x86_avx512_mask_vfnmadd_ps_128,            // llvm.x86.avx512.mask.vfnmadd.ps.128
-    x86_avx512_mask_vfnmadd_ps_256,            // llvm.x86.avx512.mask.vfnmadd.ps.256
-    x86_avx512_mask_vfnmadd_ps_512,            // llvm.x86.avx512.mask.vfnmadd.ps.512
-    x86_avx512_mask_vfnmsub_pd_128,            // llvm.x86.avx512.mask.vfnmsub.pd.128
-    x86_avx512_mask_vfnmsub_pd_256,            // llvm.x86.avx512.mask.vfnmsub.pd.256
-    x86_avx512_mask_vfnmsub_pd_512,            // llvm.x86.avx512.mask.vfnmsub.pd.512
-    x86_avx512_mask_vfnmsub_ps_128,            // llvm.x86.avx512.mask.vfnmsub.ps.128
-    x86_avx512_mask_vfnmsub_ps_256,            // llvm.x86.avx512.mask.vfnmsub.ps.256
-    x86_avx512_mask_vfnmsub_ps_512,            // llvm.x86.avx512.mask.vfnmsub.ps.512
-    x86_avx512_mask_vpdpbusd_128,              // llvm.x86.avx512.mask.vpdpbusd.128
-    x86_avx512_mask_vpdpbusd_256,              // llvm.x86.avx512.mask.vpdpbusd.256
-    x86_avx512_mask_vpdpbusd_512,              // llvm.x86.avx512.mask.vpdpbusd.512
-    x86_avx512_mask_vpdpbusds_128,             // llvm.x86.avx512.mask.vpdpbusds.128
-    x86_avx512_mask_vpdpbusds_256,             // llvm.x86.avx512.mask.vpdpbusds.256
-    x86_avx512_mask_vpdpbusds_512,             // llvm.x86.avx512.mask.vpdpbusds.512
-    x86_avx512_mask_vpdpwssd_128,              // llvm.x86.avx512.mask.vpdpwssd.128
-    x86_avx512_mask_vpdpwssd_256,              // llvm.x86.avx512.mask.vpdpwssd.256
-    x86_avx512_mask_vpdpwssd_512,              // llvm.x86.avx512.mask.vpdpwssd.512
-    x86_avx512_mask_vpdpwssds_128,             // llvm.x86.avx512.mask.vpdpwssds.128
-    x86_avx512_mask_vpdpwssds_256,             // llvm.x86.avx512.mask.vpdpwssds.256
-    x86_avx512_mask_vpdpwssds_512,             // llvm.x86.avx512.mask.vpdpwssds.512
-    x86_avx512_mask_vpermi2var_d_128,          // llvm.x86.avx512.mask.vpermi2var.d.128
-    x86_avx512_mask_vpermi2var_d_256,          // llvm.x86.avx512.mask.vpermi2var.d.256
-    x86_avx512_mask_vpermi2var_d_512,          // llvm.x86.avx512.mask.vpermi2var.d.512
-    x86_avx512_mask_vpermi2var_hi_128,         // llvm.x86.avx512.mask.vpermi2var.hi.128
-    x86_avx512_mask_vpermi2var_hi_256,         // llvm.x86.avx512.mask.vpermi2var.hi.256
-    x86_avx512_mask_vpermi2var_hi_512,         // llvm.x86.avx512.mask.vpermi2var.hi.512
-    x86_avx512_mask_vpermi2var_pd_128,         // llvm.x86.avx512.mask.vpermi2var.pd.128
-    x86_avx512_mask_vpermi2var_pd_256,         // llvm.x86.avx512.mask.vpermi2var.pd.256
-    x86_avx512_mask_vpermi2var_pd_512,         // llvm.x86.avx512.mask.vpermi2var.pd.512
-    x86_avx512_mask_vpermi2var_ps_128,         // llvm.x86.avx512.mask.vpermi2var.ps.128
-    x86_avx512_mask_vpermi2var_ps_256,         // llvm.x86.avx512.mask.vpermi2var.ps.256
-    x86_avx512_mask_vpermi2var_ps_512,         // llvm.x86.avx512.mask.vpermi2var.ps.512
-    x86_avx512_mask_vpermi2var_q_128,          // llvm.x86.avx512.mask.vpermi2var.q.128
-    x86_avx512_mask_vpermi2var_q_256,          // llvm.x86.avx512.mask.vpermi2var.q.256
-    x86_avx512_mask_vpermi2var_q_512,          // llvm.x86.avx512.mask.vpermi2var.q.512
-    x86_avx512_mask_vpermi2var_qi_128,         // llvm.x86.avx512.mask.vpermi2var.qi.128
-    x86_avx512_mask_vpermi2var_qi_256,         // llvm.x86.avx512.mask.vpermi2var.qi.256
-    x86_avx512_mask_vpermi2var_qi_512,         // llvm.x86.avx512.mask.vpermi2var.qi.512
-    x86_avx512_mask_vpermt2var_d_128,          // llvm.x86.avx512.mask.vpermt2var.d.128
-    x86_avx512_mask_vpermt2var_d_256,          // llvm.x86.avx512.mask.vpermt2var.d.256
-    x86_avx512_mask_vpermt2var_d_512,          // llvm.x86.avx512.mask.vpermt2var.d.512
-    x86_avx512_mask_vpermt2var_hi_128,         // llvm.x86.avx512.mask.vpermt2var.hi.128
-    x86_avx512_mask_vpermt2var_hi_256,         // llvm.x86.avx512.mask.vpermt2var.hi.256
-    x86_avx512_mask_vpermt2var_hi_512,         // llvm.x86.avx512.mask.vpermt2var.hi.512
-    x86_avx512_mask_vpermt2var_pd_128,         // llvm.x86.avx512.mask.vpermt2var.pd.128
-    x86_avx512_mask_vpermt2var_pd_256,         // llvm.x86.avx512.mask.vpermt2var.pd.256
-    x86_avx512_mask_vpermt2var_pd_512,         // llvm.x86.avx512.mask.vpermt2var.pd.512
-    x86_avx512_mask_vpermt2var_ps_128,         // llvm.x86.avx512.mask.vpermt2var.ps.128
-    x86_avx512_mask_vpermt2var_ps_256,         // llvm.x86.avx512.mask.vpermt2var.ps.256
-    x86_avx512_mask_vpermt2var_ps_512,         // llvm.x86.avx512.mask.vpermt2var.ps.512
-    x86_avx512_mask_vpermt2var_q_128,          // llvm.x86.avx512.mask.vpermt2var.q.128
-    x86_avx512_mask_vpermt2var_q_256,          // llvm.x86.avx512.mask.vpermt2var.q.256
-    x86_avx512_mask_vpermt2var_q_512,          // llvm.x86.avx512.mask.vpermt2var.q.512
-    x86_avx512_mask_vpermt2var_qi_128,         // llvm.x86.avx512.mask.vpermt2var.qi.128
-    x86_avx512_mask_vpermt2var_qi_256,         // llvm.x86.avx512.mask.vpermt2var.qi.256
-    x86_avx512_mask_vpermt2var_qi_512,         // llvm.x86.avx512.mask.vpermt2var.qi.512
-    x86_avx512_mask_vpmadd52h_uq_128,          // llvm.x86.avx512.mask.vpmadd52h.uq.128
-    x86_avx512_mask_vpmadd52h_uq_256,          // llvm.x86.avx512.mask.vpmadd52h.uq.256
-    x86_avx512_mask_vpmadd52h_uq_512,          // llvm.x86.avx512.mask.vpmadd52h.uq.512
-    x86_avx512_mask_vpmadd52l_uq_128,          // llvm.x86.avx512.mask.vpmadd52l.uq.128
-    x86_avx512_mask_vpmadd52l_uq_256,          // llvm.x86.avx512.mask.vpmadd52l.uq.256
-    x86_avx512_mask_vpmadd52l_uq_512,          // llvm.x86.avx512.mask.vpmadd52l.uq.512
-    x86_avx512_mask_vpshld_d_128,              // llvm.x86.avx512.mask.vpshld.d.128
-    x86_avx512_mask_vpshld_d_256,              // llvm.x86.avx512.mask.vpshld.d.256
-    x86_avx512_mask_vpshld_d_512,              // llvm.x86.avx512.mask.vpshld.d.512
-    x86_avx512_mask_vpshld_q_128,              // llvm.x86.avx512.mask.vpshld.q.128
-    x86_avx512_mask_vpshld_q_256,              // llvm.x86.avx512.mask.vpshld.q.256
-    x86_avx512_mask_vpshld_q_512,              // llvm.x86.avx512.mask.vpshld.q.512
-    x86_avx512_mask_vpshld_w_128,              // llvm.x86.avx512.mask.vpshld.w.128
-    x86_avx512_mask_vpshld_w_256,              // llvm.x86.avx512.mask.vpshld.w.256
-    x86_avx512_mask_vpshld_w_512,              // llvm.x86.avx512.mask.vpshld.w.512
-    x86_avx512_mask_vpshldv_d_128,             // llvm.x86.avx512.mask.vpshldv.d.128
-    x86_avx512_mask_vpshldv_d_256,             // llvm.x86.avx512.mask.vpshldv.d.256
-    x86_avx512_mask_vpshldv_d_512,             // llvm.x86.avx512.mask.vpshldv.d.512
-    x86_avx512_mask_vpshldv_q_128,             // llvm.x86.avx512.mask.vpshldv.q.128
-    x86_avx512_mask_vpshldv_q_256,             // llvm.x86.avx512.mask.vpshldv.q.256
-    x86_avx512_mask_vpshldv_q_512,             // llvm.x86.avx512.mask.vpshldv.q.512
-    x86_avx512_mask_vpshldv_w_128,             // llvm.x86.avx512.mask.vpshldv.w.128
-    x86_avx512_mask_vpshldv_w_256,             // llvm.x86.avx512.mask.vpshldv.w.256
-    x86_avx512_mask_vpshldv_w_512,             // llvm.x86.avx512.mask.vpshldv.w.512
-    x86_avx512_mask_vpshrd_d_128,              // llvm.x86.avx512.mask.vpshrd.d.128
-    x86_avx512_mask_vpshrd_d_256,              // llvm.x86.avx512.mask.vpshrd.d.256
-    x86_avx512_mask_vpshrd_d_512,              // llvm.x86.avx512.mask.vpshrd.d.512
-    x86_avx512_mask_vpshrd_q_128,              // llvm.x86.avx512.mask.vpshrd.q.128
-    x86_avx512_mask_vpshrd_q_256,              // llvm.x86.avx512.mask.vpshrd.q.256
-    x86_avx512_mask_vpshrd_q_512,              // llvm.x86.avx512.mask.vpshrd.q.512
-    x86_avx512_mask_vpshrd_w_128,              // llvm.x86.avx512.mask.vpshrd.w.128
-    x86_avx512_mask_vpshrd_w_256,              // llvm.x86.avx512.mask.vpshrd.w.256
-    x86_avx512_mask_vpshrd_w_512,              // llvm.x86.avx512.mask.vpshrd.w.512
-    x86_avx512_mask_vpshrdv_d_128,             // llvm.x86.avx512.mask.vpshrdv.d.128
-    x86_avx512_mask_vpshrdv_d_256,             // llvm.x86.avx512.mask.vpshrdv.d.256
-    x86_avx512_mask_vpshrdv_d_512,             // llvm.x86.avx512.mask.vpshrdv.d.512
-    x86_avx512_mask_vpshrdv_q_128,             // llvm.x86.avx512.mask.vpshrdv.q.128
-    x86_avx512_mask_vpshrdv_q_256,             // llvm.x86.avx512.mask.vpshrdv.q.256
-    x86_avx512_mask_vpshrdv_q_512,             // llvm.x86.avx512.mask.vpshrdv.q.512
-    x86_avx512_mask_vpshrdv_w_128,             // llvm.x86.avx512.mask.vpshrdv.w.128
-    x86_avx512_mask_vpshrdv_w_256,             // llvm.x86.avx512.mask.vpshrdv.w.256
-    x86_avx512_mask_vpshrdv_w_512,             // llvm.x86.avx512.mask.vpshrdv.w.512
-    x86_avx512_mask_vpshufbitqmb_128,          // llvm.x86.avx512.mask.vpshufbitqmb.128
-    x86_avx512_mask_vpshufbitqmb_256,          // llvm.x86.avx512.mask.vpshufbitqmb.256
-    x86_avx512_mask_vpshufbitqmb_512,          // llvm.x86.avx512.mask.vpshufbitqmb.512
-    x86_avx512_mask3_vfmadd_pd_128,            // llvm.x86.avx512.mask3.vfmadd.pd.128
-    x86_avx512_mask3_vfmadd_pd_256,            // llvm.x86.avx512.mask3.vfmadd.pd.256
-    x86_avx512_mask3_vfmadd_pd_512,            // llvm.x86.avx512.mask3.vfmadd.pd.512
-    x86_avx512_mask3_vfmadd_ps_128,            // llvm.x86.avx512.mask3.vfmadd.ps.128
-    x86_avx512_mask3_vfmadd_ps_256,            // llvm.x86.avx512.mask3.vfmadd.ps.256
-    x86_avx512_mask3_vfmadd_ps_512,            // llvm.x86.avx512.mask3.vfmadd.ps.512
-    x86_avx512_mask3_vfmadd_sd,                // llvm.x86.avx512.mask3.vfmadd.sd
-    x86_avx512_mask3_vfmadd_ss,                // llvm.x86.avx512.mask3.vfmadd.ss
-    x86_avx512_mask3_vfmaddsub_pd_128,         // llvm.x86.avx512.mask3.vfmaddsub.pd.128
-    x86_avx512_mask3_vfmaddsub_pd_256,         // llvm.x86.avx512.mask3.vfmaddsub.pd.256
-    x86_avx512_mask3_vfmaddsub_pd_512,         // llvm.x86.avx512.mask3.vfmaddsub.pd.512
-    x86_avx512_mask3_vfmaddsub_ps_128,         // llvm.x86.avx512.mask3.vfmaddsub.ps.128
-    x86_avx512_mask3_vfmaddsub_ps_256,         // llvm.x86.avx512.mask3.vfmaddsub.ps.256
-    x86_avx512_mask3_vfmaddsub_ps_512,         // llvm.x86.avx512.mask3.vfmaddsub.ps.512
-    x86_avx512_mask3_vfmsub_pd_128,            // llvm.x86.avx512.mask3.vfmsub.pd.128
-    x86_avx512_mask3_vfmsub_pd_256,            // llvm.x86.avx512.mask3.vfmsub.pd.256
-    x86_avx512_mask3_vfmsub_pd_512,            // llvm.x86.avx512.mask3.vfmsub.pd.512
-    x86_avx512_mask3_vfmsub_ps_128,            // llvm.x86.avx512.mask3.vfmsub.ps.128
-    x86_avx512_mask3_vfmsub_ps_256,            // llvm.x86.avx512.mask3.vfmsub.ps.256
-    x86_avx512_mask3_vfmsub_ps_512,            // llvm.x86.avx512.mask3.vfmsub.ps.512
-    x86_avx512_mask3_vfmsub_sd,                // llvm.x86.avx512.mask3.vfmsub.sd
-    x86_avx512_mask3_vfmsub_ss,                // llvm.x86.avx512.mask3.vfmsub.ss
-    x86_avx512_mask3_vfmsubadd_pd_128,         // llvm.x86.avx512.mask3.vfmsubadd.pd.128
-    x86_avx512_mask3_vfmsubadd_pd_256,         // llvm.x86.avx512.mask3.vfmsubadd.pd.256
-    x86_avx512_mask3_vfmsubadd_pd_512,         // llvm.x86.avx512.mask3.vfmsubadd.pd.512
-    x86_avx512_mask3_vfmsubadd_ps_128,         // llvm.x86.avx512.mask3.vfmsubadd.ps.128
-    x86_avx512_mask3_vfmsubadd_ps_256,         // llvm.x86.avx512.mask3.vfmsubadd.ps.256
-    x86_avx512_mask3_vfmsubadd_ps_512,         // llvm.x86.avx512.mask3.vfmsubadd.ps.512
-    x86_avx512_mask3_vfnmsub_pd_128,           // llvm.x86.avx512.mask3.vfnmsub.pd.128
-    x86_avx512_mask3_vfnmsub_pd_256,           // llvm.x86.avx512.mask3.vfnmsub.pd.256
-    x86_avx512_mask3_vfnmsub_pd_512,           // llvm.x86.avx512.mask3.vfnmsub.pd.512
-    x86_avx512_mask3_vfnmsub_ps_128,           // llvm.x86.avx512.mask3.vfnmsub.ps.128
-    x86_avx512_mask3_vfnmsub_ps_256,           // llvm.x86.avx512.mask3.vfnmsub.ps.256
-    x86_avx512_mask3_vfnmsub_ps_512,           // llvm.x86.avx512.mask3.vfnmsub.ps.512
-    x86_avx512_mask3_vfnmsub_sd,               // llvm.x86.avx512.mask3.vfnmsub.sd
-    x86_avx512_mask3_vfnmsub_ss,               // llvm.x86.avx512.mask3.vfnmsub.ss
-    x86_avx512_maskz_fixupimm_pd_128,          // llvm.x86.avx512.maskz.fixupimm.pd.128
-    x86_avx512_maskz_fixupimm_pd_256,          // llvm.x86.avx512.maskz.fixupimm.pd.256
-    x86_avx512_maskz_fixupimm_pd_512,          // llvm.x86.avx512.maskz.fixupimm.pd.512
-    x86_avx512_maskz_fixupimm_ps_128,          // llvm.x86.avx512.maskz.fixupimm.ps.128
-    x86_avx512_maskz_fixupimm_ps_256,          // llvm.x86.avx512.maskz.fixupimm.ps.256
-    x86_avx512_maskz_fixupimm_ps_512,          // llvm.x86.avx512.maskz.fixupimm.ps.512
-    x86_avx512_maskz_fixupimm_sd,              // llvm.x86.avx512.maskz.fixupimm.sd
-    x86_avx512_maskz_fixupimm_ss,              // llvm.x86.avx512.maskz.fixupimm.ss
-    x86_avx512_maskz_pternlog_d_128,           // llvm.x86.avx512.maskz.pternlog.d.128
-    x86_avx512_maskz_pternlog_d_256,           // llvm.x86.avx512.maskz.pternlog.d.256
-    x86_avx512_maskz_pternlog_d_512,           // llvm.x86.avx512.maskz.pternlog.d.512
-    x86_avx512_maskz_pternlog_q_128,           // llvm.x86.avx512.maskz.pternlog.q.128
-    x86_avx512_maskz_pternlog_q_256,           // llvm.x86.avx512.maskz.pternlog.q.256
-    x86_avx512_maskz_pternlog_q_512,           // llvm.x86.avx512.maskz.pternlog.q.512
-    x86_avx512_maskz_vfmadd_pd_128,            // llvm.x86.avx512.maskz.vfmadd.pd.128
-    x86_avx512_maskz_vfmadd_pd_256,            // llvm.x86.avx512.maskz.vfmadd.pd.256
-    x86_avx512_maskz_vfmadd_pd_512,            // llvm.x86.avx512.maskz.vfmadd.pd.512
-    x86_avx512_maskz_vfmadd_ps_128,            // llvm.x86.avx512.maskz.vfmadd.ps.128
-    x86_avx512_maskz_vfmadd_ps_256,            // llvm.x86.avx512.maskz.vfmadd.ps.256
-    x86_avx512_maskz_vfmadd_ps_512,            // llvm.x86.avx512.maskz.vfmadd.ps.512
-    x86_avx512_maskz_vfmadd_sd,                // llvm.x86.avx512.maskz.vfmadd.sd
-    x86_avx512_maskz_vfmadd_ss,                // llvm.x86.avx512.maskz.vfmadd.ss
-    x86_avx512_maskz_vfmaddsub_pd_128,         // llvm.x86.avx512.maskz.vfmaddsub.pd.128
-    x86_avx512_maskz_vfmaddsub_pd_256,         // llvm.x86.avx512.maskz.vfmaddsub.pd.256
-    x86_avx512_maskz_vfmaddsub_pd_512,         // llvm.x86.avx512.maskz.vfmaddsub.pd.512
-    x86_avx512_maskz_vfmaddsub_ps_128,         // llvm.x86.avx512.maskz.vfmaddsub.ps.128
-    x86_avx512_maskz_vfmaddsub_ps_256,         // llvm.x86.avx512.maskz.vfmaddsub.ps.256
-    x86_avx512_maskz_vfmaddsub_ps_512,         // llvm.x86.avx512.maskz.vfmaddsub.ps.512
-    x86_avx512_maskz_vpdpbusd_128,             // llvm.x86.avx512.maskz.vpdpbusd.128
-    x86_avx512_maskz_vpdpbusd_256,             // llvm.x86.avx512.maskz.vpdpbusd.256
-    x86_avx512_maskz_vpdpbusd_512,             // llvm.x86.avx512.maskz.vpdpbusd.512
-    x86_avx512_maskz_vpdpbusds_128,            // llvm.x86.avx512.maskz.vpdpbusds.128
-    x86_avx512_maskz_vpdpbusds_256,            // llvm.x86.avx512.maskz.vpdpbusds.256
-    x86_avx512_maskz_vpdpbusds_512,            // llvm.x86.avx512.maskz.vpdpbusds.512
-    x86_avx512_maskz_vpdpwssd_128,             // llvm.x86.avx512.maskz.vpdpwssd.128
-    x86_avx512_maskz_vpdpwssd_256,             // llvm.x86.avx512.maskz.vpdpwssd.256
-    x86_avx512_maskz_vpdpwssd_512,             // llvm.x86.avx512.maskz.vpdpwssd.512
-    x86_avx512_maskz_vpdpwssds_128,            // llvm.x86.avx512.maskz.vpdpwssds.128
-    x86_avx512_maskz_vpdpwssds_256,            // llvm.x86.avx512.maskz.vpdpwssds.256
-    x86_avx512_maskz_vpdpwssds_512,            // llvm.x86.avx512.maskz.vpdpwssds.512
-    x86_avx512_maskz_vpermt2var_d_128,         // llvm.x86.avx512.maskz.vpermt2var.d.128
-    x86_avx512_maskz_vpermt2var_d_256,         // llvm.x86.avx512.maskz.vpermt2var.d.256
-    x86_avx512_maskz_vpermt2var_d_512,         // llvm.x86.avx512.maskz.vpermt2var.d.512
-    x86_avx512_maskz_vpermt2var_hi_128,        // llvm.x86.avx512.maskz.vpermt2var.hi.128
-    x86_avx512_maskz_vpermt2var_hi_256,        // llvm.x86.avx512.maskz.vpermt2var.hi.256
-    x86_avx512_maskz_vpermt2var_hi_512,        // llvm.x86.avx512.maskz.vpermt2var.hi.512
-    x86_avx512_maskz_vpermt2var_pd_128,        // llvm.x86.avx512.maskz.vpermt2var.pd.128
-    x86_avx512_maskz_vpermt2var_pd_256,        // llvm.x86.avx512.maskz.vpermt2var.pd.256
-    x86_avx512_maskz_vpermt2var_pd_512,        // llvm.x86.avx512.maskz.vpermt2var.pd.512
-    x86_avx512_maskz_vpermt2var_ps_128,        // llvm.x86.avx512.maskz.vpermt2var.ps.128
-    x86_avx512_maskz_vpermt2var_ps_256,        // llvm.x86.avx512.maskz.vpermt2var.ps.256
-    x86_avx512_maskz_vpermt2var_ps_512,        // llvm.x86.avx512.maskz.vpermt2var.ps.512
-    x86_avx512_maskz_vpermt2var_q_128,         // llvm.x86.avx512.maskz.vpermt2var.q.128
-    x86_avx512_maskz_vpermt2var_q_256,         // llvm.x86.avx512.maskz.vpermt2var.q.256
-    x86_avx512_maskz_vpermt2var_q_512,         // llvm.x86.avx512.maskz.vpermt2var.q.512
-    x86_avx512_maskz_vpermt2var_qi_128,        // llvm.x86.avx512.maskz.vpermt2var.qi.128
-    x86_avx512_maskz_vpermt2var_qi_256,        // llvm.x86.avx512.maskz.vpermt2var.qi.256
-    x86_avx512_maskz_vpermt2var_qi_512,        // llvm.x86.avx512.maskz.vpermt2var.qi.512
-    x86_avx512_maskz_vpmadd52h_uq_128,         // llvm.x86.avx512.maskz.vpmadd52h.uq.128
-    x86_avx512_maskz_vpmadd52h_uq_256,         // llvm.x86.avx512.maskz.vpmadd52h.uq.256
-    x86_avx512_maskz_vpmadd52h_uq_512,         // llvm.x86.avx512.maskz.vpmadd52h.uq.512
-    x86_avx512_maskz_vpmadd52l_uq_128,         // llvm.x86.avx512.maskz.vpmadd52l.uq.128
-    x86_avx512_maskz_vpmadd52l_uq_256,         // llvm.x86.avx512.maskz.vpmadd52l.uq.256
-    x86_avx512_maskz_vpmadd52l_uq_512,         // llvm.x86.avx512.maskz.vpmadd52l.uq.512
-    x86_avx512_maskz_vpshldv_d_128,            // llvm.x86.avx512.maskz.vpshldv.d.128
-    x86_avx512_maskz_vpshldv_d_256,            // llvm.x86.avx512.maskz.vpshldv.d.256
-    x86_avx512_maskz_vpshldv_d_512,            // llvm.x86.avx512.maskz.vpshldv.d.512
-    x86_avx512_maskz_vpshldv_q_128,            // llvm.x86.avx512.maskz.vpshldv.q.128
-    x86_avx512_maskz_vpshldv_q_256,            // llvm.x86.avx512.maskz.vpshldv.q.256
-    x86_avx512_maskz_vpshldv_q_512,            // llvm.x86.avx512.maskz.vpshldv.q.512
-    x86_avx512_maskz_vpshldv_w_128,            // llvm.x86.avx512.maskz.vpshldv.w.128
-    x86_avx512_maskz_vpshldv_w_256,            // llvm.x86.avx512.maskz.vpshldv.w.256
-    x86_avx512_maskz_vpshldv_w_512,            // llvm.x86.avx512.maskz.vpshldv.w.512
-    x86_avx512_maskz_vpshrdv_d_128,            // llvm.x86.avx512.maskz.vpshrdv.d.128
-    x86_avx512_maskz_vpshrdv_d_256,            // llvm.x86.avx512.maskz.vpshrdv.d.256
-    x86_avx512_maskz_vpshrdv_d_512,            // llvm.x86.avx512.maskz.vpshrdv.d.512
-    x86_avx512_maskz_vpshrdv_q_128,            // llvm.x86.avx512.maskz.vpshrdv.q.128
-    x86_avx512_maskz_vpshrdv_q_256,            // llvm.x86.avx512.maskz.vpshrdv.q.256
-    x86_avx512_maskz_vpshrdv_q_512,            // llvm.x86.avx512.maskz.vpshrdv.q.512
-    x86_avx512_maskz_vpshrdv_w_128,            // llvm.x86.avx512.maskz.vpshrdv.w.128
-    x86_avx512_maskz_vpshrdv_w_256,            // llvm.x86.avx512.maskz.vpshrdv.w.256
-    x86_avx512_maskz_vpshrdv_w_512,            // llvm.x86.avx512.maskz.vpshrdv.w.512
-    x86_avx512_packssdw_512,                   // llvm.x86.avx512.packssdw.512
-    x86_avx512_packsswb_512,                   // llvm.x86.avx512.packsswb.512
-    x86_avx512_packusdw_512,                   // llvm.x86.avx512.packusdw.512
-    x86_avx512_packuswb_512,                   // llvm.x86.avx512.packuswb.512
-    x86_avx512_pmul_dq_512,                    // llvm.x86.avx512.pmul.dq.512
-    x86_avx512_pmul_hr_sw_512,                 // llvm.x86.avx512.pmul.hr.sw.512
-    x86_avx512_pmulh_w_512,                    // llvm.x86.avx512.pmulh.w.512
-    x86_avx512_pmulhu_w_512,                   // llvm.x86.avx512.pmulhu.w.512
-    x86_avx512_pmulu_dq_512,                   // llvm.x86.avx512.pmulu.dq.512
-    x86_avx512_psad_bw_512,                    // llvm.x86.avx512.psad.bw.512
-    x86_avx512_pshuf_b_512,                    // llvm.x86.avx512.pshuf.b.512
-    x86_avx512_psll_d_512,                     // llvm.x86.avx512.psll.d.512
-    x86_avx512_psll_q_512,                     // llvm.x86.avx512.psll.q.512
-    x86_avx512_psll_w_512,                     // llvm.x86.avx512.psll.w.512
-    x86_avx512_pslli_d_512,                    // llvm.x86.avx512.pslli.d.512
-    x86_avx512_pslli_q_512,                    // llvm.x86.avx512.pslli.q.512
-    x86_avx512_pslli_w_512,                    // llvm.x86.avx512.pslli.w.512
-    x86_avx512_psllv_d_512,                    // llvm.x86.avx512.psllv.d.512
-    x86_avx512_psllv_q_512,                    // llvm.x86.avx512.psllv.q.512
-    x86_avx512_psllv_w_128,                    // llvm.x86.avx512.psllv.w.128
-    x86_avx512_psllv_w_256,                    // llvm.x86.avx512.psllv.w.256
-    x86_avx512_psllv_w_512,                    // llvm.x86.avx512.psllv.w.512
-    x86_avx512_psra_d_512,                     // llvm.x86.avx512.psra.d.512
-    x86_avx512_psra_q_128,                     // llvm.x86.avx512.psra.q.128
-    x86_avx512_psra_q_256,                     // llvm.x86.avx512.psra.q.256
-    x86_avx512_psra_q_512,                     // llvm.x86.avx512.psra.q.512
-    x86_avx512_psra_w_512,                     // llvm.x86.avx512.psra.w.512
-    x86_avx512_psrai_d_512,                    // llvm.x86.avx512.psrai.d.512
-    x86_avx512_psrai_q_128,                    // llvm.x86.avx512.psrai.q.128
-    x86_avx512_psrai_q_256,                    // llvm.x86.avx512.psrai.q.256
-    x86_avx512_psrai_q_512,                    // llvm.x86.avx512.psrai.q.512
-    x86_avx512_psrai_w_512,                    // llvm.x86.avx512.psrai.w.512
-    x86_avx512_psrav_d_512,                    // llvm.x86.avx512.psrav.d.512
-    x86_avx512_psrav_q_128,                    // llvm.x86.avx512.psrav.q.128
-    x86_avx512_psrav_q_256,                    // llvm.x86.avx512.psrav.q.256
-    x86_avx512_psrav_q_512,                    // llvm.x86.avx512.psrav.q.512
-    x86_avx512_psrav_w_128,                    // llvm.x86.avx512.psrav.w.128
-    x86_avx512_psrav_w_256,                    // llvm.x86.avx512.psrav.w.256
-    x86_avx512_psrav_w_512,                    // llvm.x86.avx512.psrav.w.512
-    x86_avx512_psrl_d_512,                     // llvm.x86.avx512.psrl.d.512
-    x86_avx512_psrl_q_512,                     // llvm.x86.avx512.psrl.q.512
-    x86_avx512_psrl_w_512,                     // llvm.x86.avx512.psrl.w.512
-    x86_avx512_psrli_d_512,                    // llvm.x86.avx512.psrli.d.512
-    x86_avx512_psrli_q_512,                    // llvm.x86.avx512.psrli.q.512
-    x86_avx512_psrli_w_512,                    // llvm.x86.avx512.psrli.w.512
-    x86_avx512_psrlv_d_512,                    // llvm.x86.avx512.psrlv.d.512
-    x86_avx512_psrlv_q_512,                    // llvm.x86.avx512.psrlv.q.512
-    x86_avx512_psrlv_w_128,                    // llvm.x86.avx512.psrlv.w.128
-    x86_avx512_psrlv_w_256,                    // llvm.x86.avx512.psrlv.w.256
-    x86_avx512_psrlv_w_512,                    // llvm.x86.avx512.psrlv.w.512
-    x86_avx512_rcp14_pd_128,                   // llvm.x86.avx512.rcp14.pd.128
-    x86_avx512_rcp14_pd_256,                   // llvm.x86.avx512.rcp14.pd.256
-    x86_avx512_rcp14_pd_512,                   // llvm.x86.avx512.rcp14.pd.512
-    x86_avx512_rcp14_ps_128,                   // llvm.x86.avx512.rcp14.ps.128
-    x86_avx512_rcp14_ps_256,                   // llvm.x86.avx512.rcp14.ps.256
-    x86_avx512_rcp14_ps_512,                   // llvm.x86.avx512.rcp14.ps.512
-    x86_avx512_rcp14_sd,                       // llvm.x86.avx512.rcp14.sd
-    x86_avx512_rcp14_ss,                       // llvm.x86.avx512.rcp14.ss
-    x86_avx512_rcp28_pd,                       // llvm.x86.avx512.rcp28.pd
-    x86_avx512_rcp28_ps,                       // llvm.x86.avx512.rcp28.ps
-    x86_avx512_rcp28_sd,                       // llvm.x86.avx512.rcp28.sd
-    x86_avx512_rcp28_ss,                       // llvm.x86.avx512.rcp28.ss
-    x86_avx512_rsqrt14_pd_128,                 // llvm.x86.avx512.rsqrt14.pd.128
-    x86_avx512_rsqrt14_pd_256,                 // llvm.x86.avx512.rsqrt14.pd.256
-    x86_avx512_rsqrt14_pd_512,                 // llvm.x86.avx512.rsqrt14.pd.512
-    x86_avx512_rsqrt14_ps_128,                 // llvm.x86.avx512.rsqrt14.ps.128
-    x86_avx512_rsqrt14_ps_256,                 // llvm.x86.avx512.rsqrt14.ps.256
-    x86_avx512_rsqrt14_ps_512,                 // llvm.x86.avx512.rsqrt14.ps.512
-    x86_avx512_rsqrt14_sd,                     // llvm.x86.avx512.rsqrt14.sd
-    x86_avx512_rsqrt14_ss,                     // llvm.x86.avx512.rsqrt14.ss
-    x86_avx512_rsqrt28_pd,                     // llvm.x86.avx512.rsqrt28.pd
-    x86_avx512_rsqrt28_ps,                     // llvm.x86.avx512.rsqrt28.ps
-    x86_avx512_rsqrt28_sd,                     // llvm.x86.avx512.rsqrt28.sd
-    x86_avx512_rsqrt28_ss,                     // llvm.x86.avx512.rsqrt28.ss
-    x86_avx512_scatter_dpd_512,                // llvm.x86.avx512.scatter.dpd.512
-    x86_avx512_scatter_dpi_512,                // llvm.x86.avx512.scatter.dpi.512
-    x86_avx512_scatter_dpq_512,                // llvm.x86.avx512.scatter.dpq.512
-    x86_avx512_scatter_dps_512,                // llvm.x86.avx512.scatter.dps.512
-    x86_avx512_scatter_qpd_512,                // llvm.x86.avx512.scatter.qpd.512
-    x86_avx512_scatter_qpi_512,                // llvm.x86.avx512.scatter.qpi.512
-    x86_avx512_scatter_qpq_512,                // llvm.x86.avx512.scatter.qpq.512
-    x86_avx512_scatter_qps_512,                // llvm.x86.avx512.scatter.qps.512
-    x86_avx512_scatterdiv2_df,                 // llvm.x86.avx512.scatterdiv2.df
-    x86_avx512_scatterdiv2_di,                 // llvm.x86.avx512.scatterdiv2.di
-    x86_avx512_scatterdiv4_df,                 // llvm.x86.avx512.scatterdiv4.df
-    x86_avx512_scatterdiv4_di,                 // llvm.x86.avx512.scatterdiv4.di
-    x86_avx512_scatterdiv4_sf,                 // llvm.x86.avx512.scatterdiv4.sf
-    x86_avx512_scatterdiv4_si,                 // llvm.x86.avx512.scatterdiv4.si
-    x86_avx512_scatterdiv8_sf,                 // llvm.x86.avx512.scatterdiv8.sf
-    x86_avx512_scatterdiv8_si,                 // llvm.x86.avx512.scatterdiv8.si
-    x86_avx512_scatterpf_dpd_512,              // llvm.x86.avx512.scatterpf.dpd.512
-    x86_avx512_scatterpf_dps_512,              // llvm.x86.avx512.scatterpf.dps.512
-    x86_avx512_scatterpf_qpd_512,              // llvm.x86.avx512.scatterpf.qpd.512
-    x86_avx512_scatterpf_qps_512,              // llvm.x86.avx512.scatterpf.qps.512
-    x86_avx512_scattersiv2_df,                 // llvm.x86.avx512.scattersiv2.df
-    x86_avx512_scattersiv2_di,                 // llvm.x86.avx512.scattersiv2.di
-    x86_avx512_scattersiv4_df,                 // llvm.x86.avx512.scattersiv4.df
-    x86_avx512_scattersiv4_di,                 // llvm.x86.avx512.scattersiv4.di
-    x86_avx512_scattersiv4_sf,                 // llvm.x86.avx512.scattersiv4.sf
-    x86_avx512_scattersiv4_si,                 // llvm.x86.avx512.scattersiv4.si
-    x86_avx512_scattersiv8_sf,                 // llvm.x86.avx512.scattersiv8.sf
-    x86_avx512_scattersiv8_si,                 // llvm.x86.avx512.scattersiv8.si
-    x86_avx512_vbroadcast_sd_512,              // llvm.x86.avx512.vbroadcast.sd.512
-    x86_avx512_vbroadcast_ss_512,              // llvm.x86.avx512.vbroadcast.ss.512
-    x86_avx512_vcomi_sd,                       // llvm.x86.avx512.vcomi.sd
-    x86_avx512_vcomi_ss,                       // llvm.x86.avx512.vcomi.ss
-    x86_avx512_vcvtsd2si32,                    // llvm.x86.avx512.vcvtsd2si32
-    x86_avx512_vcvtsd2si64,                    // llvm.x86.avx512.vcvtsd2si64
-    x86_avx512_vcvtsd2usi32,                   // llvm.x86.avx512.vcvtsd2usi32
-    x86_avx512_vcvtsd2usi64,                   // llvm.x86.avx512.vcvtsd2usi64
-    x86_avx512_vcvtss2si32,                    // llvm.x86.avx512.vcvtss2si32
-    x86_avx512_vcvtss2si64,                    // llvm.x86.avx512.vcvtss2si64
-    x86_avx512_vcvtss2usi32,                   // llvm.x86.avx512.vcvtss2usi32
-    x86_avx512_vcvtss2usi64,                   // llvm.x86.avx512.vcvtss2usi64
-    x86_avx512_vpermilvar_pd_512,              // llvm.x86.avx512.vpermilvar.pd.512
-    x86_avx512_vpermilvar_ps_512,              // llvm.x86.avx512.vpermilvar.ps.512
-    x86_bmi_bextr_32,                          // llvm.x86.bmi.bextr.32
-    x86_bmi_bextr_64,                          // llvm.x86.bmi.bextr.64
-    x86_bmi_bzhi_32,                           // llvm.x86.bmi.bzhi.32
-    x86_bmi_bzhi_64,                           // llvm.x86.bmi.bzhi.64
-    x86_bmi_pdep_32,                           // llvm.x86.bmi.pdep.32
-    x86_bmi_pdep_64,                           // llvm.x86.bmi.pdep.64
-    x86_bmi_pext_32,                           // llvm.x86.bmi.pext.32
-    x86_bmi_pext_64,                           // llvm.x86.bmi.pext.64
-    x86_clflushopt,                            // llvm.x86.clflushopt
-    x86_clrssbsy,                              // llvm.x86.clrssbsy
-    x86_clwb,                                  // llvm.x86.clwb
-    x86_clzero,                                // llvm.x86.clzero
-    x86_flags_read_u32,                        // llvm.x86.flags.read.u32
-    x86_flags_read_u64,                        // llvm.x86.flags.read.u64
-    x86_flags_write_u32,                       // llvm.x86.flags.write.u32
-    x86_flags_write_u64,                       // llvm.x86.flags.write.u64
-    x86_fma_vfmadd_pd,                         // llvm.x86.fma.vfmadd.pd
-    x86_fma_vfmadd_pd_256,                     // llvm.x86.fma.vfmadd.pd.256
-    x86_fma_vfmadd_ps,                         // llvm.x86.fma.vfmadd.ps
-    x86_fma_vfmadd_ps_256,                     // llvm.x86.fma.vfmadd.ps.256
-    x86_fma_vfmadd_sd,                         // llvm.x86.fma.vfmadd.sd
-    x86_fma_vfmadd_ss,                         // llvm.x86.fma.vfmadd.ss
-    x86_fma_vfmaddsub_pd,                      // llvm.x86.fma.vfmaddsub.pd
-    x86_fma_vfmaddsub_pd_256,                  // llvm.x86.fma.vfmaddsub.pd.256
-    x86_fma_vfmaddsub_ps,                      // llvm.x86.fma.vfmaddsub.ps
-    x86_fma_vfmaddsub_ps_256,                  // llvm.x86.fma.vfmaddsub.ps.256
-    x86_fma_vfmsub_pd,                         // llvm.x86.fma.vfmsub.pd
-    x86_fma_vfmsub_pd_256,                     // llvm.x86.fma.vfmsub.pd.256
-    x86_fma_vfmsub_ps,                         // llvm.x86.fma.vfmsub.ps
-    x86_fma_vfmsub_ps_256,                     // llvm.x86.fma.vfmsub.ps.256
-    x86_fma_vfmsub_sd,                         // llvm.x86.fma.vfmsub.sd
-    x86_fma_vfmsub_ss,                         // llvm.x86.fma.vfmsub.ss
-    x86_fma_vfmsubadd_pd,                      // llvm.x86.fma.vfmsubadd.pd
-    x86_fma_vfmsubadd_pd_256,                  // llvm.x86.fma.vfmsubadd.pd.256
-    x86_fma_vfmsubadd_ps,                      // llvm.x86.fma.vfmsubadd.ps
-    x86_fma_vfmsubadd_ps_256,                  // llvm.x86.fma.vfmsubadd.ps.256
-    x86_fma_vfnmadd_pd,                        // llvm.x86.fma.vfnmadd.pd
-    x86_fma_vfnmadd_pd_256,                    // llvm.x86.fma.vfnmadd.pd.256
-    x86_fma_vfnmadd_ps,                        // llvm.x86.fma.vfnmadd.ps
-    x86_fma_vfnmadd_ps_256,                    // llvm.x86.fma.vfnmadd.ps.256
-    x86_fma_vfnmadd_sd,                        // llvm.x86.fma.vfnmadd.sd
-    x86_fma_vfnmadd_ss,                        // llvm.x86.fma.vfnmadd.ss
-    x86_fma_vfnmsub_pd,                        // llvm.x86.fma.vfnmsub.pd
-    x86_fma_vfnmsub_pd_256,                    // llvm.x86.fma.vfnmsub.pd.256
-    x86_fma_vfnmsub_ps,                        // llvm.x86.fma.vfnmsub.ps
-    x86_fma_vfnmsub_ps_256,                    // llvm.x86.fma.vfnmsub.ps.256
-    x86_fma_vfnmsub_sd,                        // llvm.x86.fma.vfnmsub.sd
-    x86_fma_vfnmsub_ss,                        // llvm.x86.fma.vfnmsub.ss
-    x86_fma4_vfmadd_sd,                        // llvm.x86.fma4.vfmadd.sd
-    x86_fma4_vfmadd_ss,                        // llvm.x86.fma4.vfmadd.ss
-    x86_fxrstor,                               // llvm.x86.fxrstor
-    x86_fxrstor64,                             // llvm.x86.fxrstor64
-    x86_fxsave,                                // llvm.x86.fxsave
-    x86_fxsave64,                              // llvm.x86.fxsave64
-    x86_incsspd,                               // llvm.x86.incsspd
-    x86_incsspq,                               // llvm.x86.incsspq
-    x86_int,                                   // llvm.x86.int
-    x86_llwpcb,                                // llvm.x86.llwpcb
-    x86_lwpins32,                              // llvm.x86.lwpins32
-    x86_lwpins64,                              // llvm.x86.lwpins64
-    x86_lwpval32,                              // llvm.x86.lwpval32
-    x86_lwpval64,                              // llvm.x86.lwpval64
-    x86_mmx_emms,                              // llvm.x86.mmx.emms
-    x86_mmx_femms,                             // llvm.x86.mmx.femms
-    x86_mmx_maskmovq,                          // llvm.x86.mmx.maskmovq
-    x86_mmx_movnt_dq,                          // llvm.x86.mmx.movnt.dq
-    x86_mmx_packssdw,                          // llvm.x86.mmx.packssdw
-    x86_mmx_packsswb,                          // llvm.x86.mmx.packsswb
-    x86_mmx_packuswb,                          // llvm.x86.mmx.packuswb
-    x86_mmx_padd_b,                            // llvm.x86.mmx.padd.b
-    x86_mmx_padd_d,                            // llvm.x86.mmx.padd.d
-    x86_mmx_padd_q,                            // llvm.x86.mmx.padd.q
-    x86_mmx_padd_w,                            // llvm.x86.mmx.padd.w
-    x86_mmx_padds_b,                           // llvm.x86.mmx.padds.b
-    x86_mmx_padds_w,                           // llvm.x86.mmx.padds.w
-    x86_mmx_paddus_b,                          // llvm.x86.mmx.paddus.b
-    x86_mmx_paddus_w,                          // llvm.x86.mmx.paddus.w
-    x86_mmx_palignr_b,                         // llvm.x86.mmx.palignr.b
-    x86_mmx_pand,                              // llvm.x86.mmx.pand
-    x86_mmx_pandn,                             // llvm.x86.mmx.pandn
-    x86_mmx_pavg_b,                            // llvm.x86.mmx.pavg.b
-    x86_mmx_pavg_w,                            // llvm.x86.mmx.pavg.w
-    x86_mmx_pcmpeq_b,                          // llvm.x86.mmx.pcmpeq.b
-    x86_mmx_pcmpeq_d,                          // llvm.x86.mmx.pcmpeq.d
-    x86_mmx_pcmpeq_w,                          // llvm.x86.mmx.pcmpeq.w
-    x86_mmx_pcmpgt_b,                          // llvm.x86.mmx.pcmpgt.b
-    x86_mmx_pcmpgt_d,                          // llvm.x86.mmx.pcmpgt.d
-    x86_mmx_pcmpgt_w,                          // llvm.x86.mmx.pcmpgt.w
-    x86_mmx_pextr_w,                           // llvm.x86.mmx.pextr.w
-    x86_mmx_pinsr_w,                           // llvm.x86.mmx.pinsr.w
-    x86_mmx_pmadd_wd,                          // llvm.x86.mmx.pmadd.wd
-    x86_mmx_pmaxs_w,                           // llvm.x86.mmx.pmaxs.w
-    x86_mmx_pmaxu_b,                           // llvm.x86.mmx.pmaxu.b
-    x86_mmx_pmins_w,                           // llvm.x86.mmx.pmins.w
-    x86_mmx_pminu_b,                           // llvm.x86.mmx.pminu.b
-    x86_mmx_pmovmskb,                          // llvm.x86.mmx.pmovmskb
-    x86_mmx_pmulh_w,                           // llvm.x86.mmx.pmulh.w
-    x86_mmx_pmulhu_w,                          // llvm.x86.mmx.pmulhu.w
-    x86_mmx_pmull_w,                           // llvm.x86.mmx.pmull.w
-    x86_mmx_pmulu_dq,                          // llvm.x86.mmx.pmulu.dq
-    x86_mmx_por,                               // llvm.x86.mmx.por
-    x86_mmx_psad_bw,                           // llvm.x86.mmx.psad.bw
-    x86_mmx_psll_d,                            // llvm.x86.mmx.psll.d
-    x86_mmx_psll_q,                            // llvm.x86.mmx.psll.q
-    x86_mmx_psll_w,                            // llvm.x86.mmx.psll.w
-    x86_mmx_pslli_d,                           // llvm.x86.mmx.pslli.d
-    x86_mmx_pslli_q,                           // llvm.x86.mmx.pslli.q
-    x86_mmx_pslli_w,                           // llvm.x86.mmx.pslli.w
-    x86_mmx_psra_d,                            // llvm.x86.mmx.psra.d
-    x86_mmx_psra_w,                            // llvm.x86.mmx.psra.w
-    x86_mmx_psrai_d,                           // llvm.x86.mmx.psrai.d
-    x86_mmx_psrai_w,                           // llvm.x86.mmx.psrai.w
-    x86_mmx_psrl_d,                            // llvm.x86.mmx.psrl.d
-    x86_mmx_psrl_q,                            // llvm.x86.mmx.psrl.q
-    x86_mmx_psrl_w,                            // llvm.x86.mmx.psrl.w
-    x86_mmx_psrli_d,                           // llvm.x86.mmx.psrli.d
-    x86_mmx_psrli_q,                           // llvm.x86.mmx.psrli.q
-    x86_mmx_psrli_w,                           // llvm.x86.mmx.psrli.w
-    x86_mmx_psub_b,                            // llvm.x86.mmx.psub.b
-    x86_mmx_psub_d,                            // llvm.x86.mmx.psub.d
-    x86_mmx_psub_q,                            // llvm.x86.mmx.psub.q
-    x86_mmx_psub_w,                            // llvm.x86.mmx.psub.w
-    x86_mmx_psubs_b,                           // llvm.x86.mmx.psubs.b
-    x86_mmx_psubs_w,                           // llvm.x86.mmx.psubs.w
-    x86_mmx_psubus_b,                          // llvm.x86.mmx.psubus.b
-    x86_mmx_psubus_w,                          // llvm.x86.mmx.psubus.w
-    x86_mmx_punpckhbw,                         // llvm.x86.mmx.punpckhbw
-    x86_mmx_punpckhdq,                         // llvm.x86.mmx.punpckhdq
-    x86_mmx_punpckhwd,                         // llvm.x86.mmx.punpckhwd
-    x86_mmx_punpcklbw,                         // llvm.x86.mmx.punpcklbw
-    x86_mmx_punpckldq,                         // llvm.x86.mmx.punpckldq
-    x86_mmx_punpcklwd,                         // llvm.x86.mmx.punpcklwd
-    x86_mmx_pxor,                              // llvm.x86.mmx.pxor
-    x86_monitorx,                              // llvm.x86.monitorx
-    x86_mwaitx,                                // llvm.x86.mwaitx
-    x86_pclmulqdq,                             // llvm.x86.pclmulqdq
-    x86_pclmulqdq_256,                         // llvm.x86.pclmulqdq.256
-    x86_pclmulqdq_512,                         // llvm.x86.pclmulqdq.512
-    x86_rdfsbase_32,                           // llvm.x86.rdfsbase.32
-    x86_rdfsbase_64,                           // llvm.x86.rdfsbase.64
-    x86_rdgsbase_32,                           // llvm.x86.rdgsbase.32
-    x86_rdgsbase_64,                           // llvm.x86.rdgsbase.64
-    x86_rdpid,                                 // llvm.x86.rdpid
-    x86_rdpkru,                                // llvm.x86.rdpkru
-    x86_rdpmc,                                 // llvm.x86.rdpmc
-    x86_rdrand_16,                             // llvm.x86.rdrand.16
-    x86_rdrand_32,                             // llvm.x86.rdrand.32
-    x86_rdrand_64,                             // llvm.x86.rdrand.64
-    x86_rdseed_16,                             // llvm.x86.rdseed.16
-    x86_rdseed_32,                             // llvm.x86.rdseed.32
-    x86_rdseed_64,                             // llvm.x86.rdseed.64
-    x86_rdsspd,                                // llvm.x86.rdsspd
-    x86_rdsspq,                                // llvm.x86.rdsspq
-    x86_rdtsc,                                 // llvm.x86.rdtsc
-    x86_rdtscp,                                // llvm.x86.rdtscp
-    x86_rstorssp,                              // llvm.x86.rstorssp
-    x86_saveprevssp,                           // llvm.x86.saveprevssp
-    x86_seh_ehguard,                           // llvm.x86.seh.ehguard
-    x86_seh_ehregnode,                         // llvm.x86.seh.ehregnode
-    x86_seh_lsda,                              // llvm.x86.seh.lsda
-    x86_seh_recoverfp,                         // llvm.x86.seh.recoverfp
-    x86_setssbsy,                              // llvm.x86.setssbsy
-    x86_sha1msg1,                              // llvm.x86.sha1msg1
-    x86_sha1msg2,                              // llvm.x86.sha1msg2
-    x86_sha1nexte,                             // llvm.x86.sha1nexte
-    x86_sha1rnds4,                             // llvm.x86.sha1rnds4
-    x86_sha256msg1,                            // llvm.x86.sha256msg1
-    x86_sha256msg2,                            // llvm.x86.sha256msg2
-    x86_sha256rnds2,                           // llvm.x86.sha256rnds2
-    x86_slwpcb,                                // llvm.x86.slwpcb
-    x86_sse_cmp_ps,                            // llvm.x86.sse.cmp.ps
-    x86_sse_cmp_ss,                            // llvm.x86.sse.cmp.ss
-    x86_sse_comieq_ss,                         // llvm.x86.sse.comieq.ss
-    x86_sse_comige_ss,                         // llvm.x86.sse.comige.ss
-    x86_sse_comigt_ss,                         // llvm.x86.sse.comigt.ss
-    x86_sse_comile_ss,                         // llvm.x86.sse.comile.ss
-    x86_sse_comilt_ss,                         // llvm.x86.sse.comilt.ss
-    x86_sse_comineq_ss,                        // llvm.x86.sse.comineq.ss
-    x86_sse_cvtpd2pi,                          // llvm.x86.sse.cvtpd2pi
-    x86_sse_cvtpi2pd,                          // llvm.x86.sse.cvtpi2pd
-    x86_sse_cvtpi2ps,                          // llvm.x86.sse.cvtpi2ps
-    x86_sse_cvtps2pi,                          // llvm.x86.sse.cvtps2pi
-    x86_sse_cvtsi2ss,                          // llvm.x86.sse.cvtsi2ss
-    x86_sse_cvtsi642ss,                        // llvm.x86.sse.cvtsi642ss
-    x86_sse_cvtss2si,                          // llvm.x86.sse.cvtss2si
-    x86_sse_cvtss2si64,                        // llvm.x86.sse.cvtss2si64
-    x86_sse_cvttpd2pi,                         // llvm.x86.sse.cvttpd2pi
-    x86_sse_cvttps2pi,                         // llvm.x86.sse.cvttps2pi
-    x86_sse_cvttss2si,                         // llvm.x86.sse.cvttss2si
-    x86_sse_cvttss2si64,                       // llvm.x86.sse.cvttss2si64
-    x86_sse_ldmxcsr,                           // llvm.x86.sse.ldmxcsr
-    x86_sse_max_ps,                            // llvm.x86.sse.max.ps
-    x86_sse_max_ss,                            // llvm.x86.sse.max.ss
-    x86_sse_min_ps,                            // llvm.x86.sse.min.ps
-    x86_sse_min_ss,                            // llvm.x86.sse.min.ss
-    x86_sse_movmsk_ps,                         // llvm.x86.sse.movmsk.ps
-    x86_sse_pshuf_w,                           // llvm.x86.sse.pshuf.w
-    x86_sse_rcp_ps,                            // llvm.x86.sse.rcp.ps
-    x86_sse_rcp_ss,                            // llvm.x86.sse.rcp.ss
-    x86_sse_rsqrt_ps,                          // llvm.x86.sse.rsqrt.ps
-    x86_sse_rsqrt_ss,                          // llvm.x86.sse.rsqrt.ss
-    x86_sse_sfence,                            // llvm.x86.sse.sfence
-    x86_sse_sqrt_ps,                           // llvm.x86.sse.sqrt.ps
-    x86_sse_sqrt_ss,                           // llvm.x86.sse.sqrt.ss
-    x86_sse_stmxcsr,                           // llvm.x86.sse.stmxcsr
-    x86_sse_ucomieq_ss,                        // llvm.x86.sse.ucomieq.ss
-    x86_sse_ucomige_ss,                        // llvm.x86.sse.ucomige.ss
-    x86_sse_ucomigt_ss,                        // llvm.x86.sse.ucomigt.ss
-    x86_sse_ucomile_ss,                        // llvm.x86.sse.ucomile.ss
-    x86_sse_ucomilt_ss,                        // llvm.x86.sse.ucomilt.ss
-    x86_sse_ucomineq_ss,                       // llvm.x86.sse.ucomineq.ss
-    x86_sse2_clflush,                          // llvm.x86.sse2.clflush
-    x86_sse2_cmp_pd,                           // llvm.x86.sse2.cmp.pd
-    x86_sse2_cmp_sd,                           // llvm.x86.sse2.cmp.sd
-    x86_sse2_comieq_sd,                        // llvm.x86.sse2.comieq.sd
-    x86_sse2_comige_sd,                        // llvm.x86.sse2.comige.sd
-    x86_sse2_comigt_sd,                        // llvm.x86.sse2.comigt.sd
-    x86_sse2_comile_sd,                        // llvm.x86.sse2.comile.sd
-    x86_sse2_comilt_sd,                        // llvm.x86.sse2.comilt.sd
-    x86_sse2_comineq_sd,                       // llvm.x86.sse2.comineq.sd
-    x86_sse2_cvtdq2ps,                         // llvm.x86.sse2.cvtdq2ps
-    x86_sse2_cvtpd2dq,                         // llvm.x86.sse2.cvtpd2dq
-    x86_sse2_cvtpd2ps,                         // llvm.x86.sse2.cvtpd2ps
-    x86_sse2_cvtps2dq,                         // llvm.x86.sse2.cvtps2dq
-    x86_sse2_cvtsd2si,                         // llvm.x86.sse2.cvtsd2si
-    x86_sse2_cvtsd2si64,                       // llvm.x86.sse2.cvtsd2si64
-    x86_sse2_cvtsd2ss,                         // llvm.x86.sse2.cvtsd2ss
-    x86_sse2_cvtsi2sd,                         // llvm.x86.sse2.cvtsi2sd
-    x86_sse2_cvtsi642sd,                       // llvm.x86.sse2.cvtsi642sd
-    x86_sse2_cvtss2sd,                         // llvm.x86.sse2.cvtss2sd
-    x86_sse2_cvttpd2dq,                        // llvm.x86.sse2.cvttpd2dq
-    x86_sse2_cvttps2dq,                        // llvm.x86.sse2.cvttps2dq
-    x86_sse2_cvttsd2si,                        // llvm.x86.sse2.cvttsd2si
-    x86_sse2_cvttsd2si64,                      // llvm.x86.sse2.cvttsd2si64
-    x86_sse2_lfence,                           // llvm.x86.sse2.lfence
-    x86_sse2_maskmov_dqu,                      // llvm.x86.sse2.maskmov.dqu
-    x86_sse2_max_pd,                           // llvm.x86.sse2.max.pd
-    x86_sse2_max_sd,                           // llvm.x86.sse2.max.sd
-    x86_sse2_mfence,                           // llvm.x86.sse2.mfence
-    x86_sse2_min_pd,                           // llvm.x86.sse2.min.pd
-    x86_sse2_min_sd,                           // llvm.x86.sse2.min.sd
-    x86_sse2_movmsk_pd,                        // llvm.x86.sse2.movmsk.pd
-    x86_sse2_packssdw_128,                     // llvm.x86.sse2.packssdw.128
-    x86_sse2_packsswb_128,                     // llvm.x86.sse2.packsswb.128
-    x86_sse2_packuswb_128,                     // llvm.x86.sse2.packuswb.128
-    x86_sse2_padds_b,                          // llvm.x86.sse2.padds.b
-    x86_sse2_padds_w,                          // llvm.x86.sse2.padds.w
-    x86_sse2_paddus_b,                         // llvm.x86.sse2.paddus.b
-    x86_sse2_paddus_w,                         // llvm.x86.sse2.paddus.w
-    x86_sse2_pause,                            // llvm.x86.sse2.pause
-    x86_sse2_pmadd_wd,                         // llvm.x86.sse2.pmadd.wd
-    x86_sse2_pmovmskb_128,                     // llvm.x86.sse2.pmovmskb.128
-    x86_sse2_pmulh_w,                          // llvm.x86.sse2.pmulh.w
-    x86_sse2_pmulhu_w,                         // llvm.x86.sse2.pmulhu.w
-    x86_sse2_pmulu_dq,                         // llvm.x86.sse2.pmulu.dq
-    x86_sse2_psad_bw,                          // llvm.x86.sse2.psad.bw
-    x86_sse2_psll_d,                           // llvm.x86.sse2.psll.d
-    x86_sse2_psll_q,                           // llvm.x86.sse2.psll.q
-    x86_sse2_psll_w,                           // llvm.x86.sse2.psll.w
-    x86_sse2_pslli_d,                          // llvm.x86.sse2.pslli.d
-    x86_sse2_pslli_q,                          // llvm.x86.sse2.pslli.q
-    x86_sse2_pslli_w,                          // llvm.x86.sse2.pslli.w
-    x86_sse2_psra_d,                           // llvm.x86.sse2.psra.d
-    x86_sse2_psra_w,                           // llvm.x86.sse2.psra.w
-    x86_sse2_psrai_d,                          // llvm.x86.sse2.psrai.d
-    x86_sse2_psrai_w,                          // llvm.x86.sse2.psrai.w
-    x86_sse2_psrl_d,                           // llvm.x86.sse2.psrl.d
-    x86_sse2_psrl_q,                           // llvm.x86.sse2.psrl.q
-    x86_sse2_psrl_w,                           // llvm.x86.sse2.psrl.w
-    x86_sse2_psrli_d,                          // llvm.x86.sse2.psrli.d
-    x86_sse2_psrli_q,                          // llvm.x86.sse2.psrli.q
-    x86_sse2_psrli_w,                          // llvm.x86.sse2.psrli.w
-    x86_sse2_psubs_b,                          // llvm.x86.sse2.psubs.b
-    x86_sse2_psubs_w,                          // llvm.x86.sse2.psubs.w
-    x86_sse2_psubus_b,                         // llvm.x86.sse2.psubus.b
-    x86_sse2_psubus_w,                         // llvm.x86.sse2.psubus.w
-    x86_sse2_sqrt_pd,                          // llvm.x86.sse2.sqrt.pd
-    x86_sse2_sqrt_sd,                          // llvm.x86.sse2.sqrt.sd
-    x86_sse2_ucomieq_sd,                       // llvm.x86.sse2.ucomieq.sd
-    x86_sse2_ucomige_sd,                       // llvm.x86.sse2.ucomige.sd
-    x86_sse2_ucomigt_sd,                       // llvm.x86.sse2.ucomigt.sd
-    x86_sse2_ucomile_sd,                       // llvm.x86.sse2.ucomile.sd
-    x86_sse2_ucomilt_sd,                       // llvm.x86.sse2.ucomilt.sd
-    x86_sse2_ucomineq_sd,                      // llvm.x86.sse2.ucomineq.sd
-    x86_sse3_addsub_pd,                        // llvm.x86.sse3.addsub.pd
-    x86_sse3_addsub_ps,                        // llvm.x86.sse3.addsub.ps
-    x86_sse3_hadd_pd,                          // llvm.x86.sse3.hadd.pd
-    x86_sse3_hadd_ps,                          // llvm.x86.sse3.hadd.ps
-    x86_sse3_hsub_pd,                          // llvm.x86.sse3.hsub.pd
-    x86_sse3_hsub_ps,                          // llvm.x86.sse3.hsub.ps
-    x86_sse3_ldu_dq,                           // llvm.x86.sse3.ldu.dq
-    x86_sse3_monitor,                          // llvm.x86.sse3.monitor
-    x86_sse3_mwait,                            // llvm.x86.sse3.mwait
-    x86_sse41_blendvpd,                        // llvm.x86.sse41.blendvpd
-    x86_sse41_blendvps,                        // llvm.x86.sse41.blendvps
-    x86_sse41_dppd,                            // llvm.x86.sse41.dppd
-    x86_sse41_dpps,                            // llvm.x86.sse41.dpps
-    x86_sse41_insertps,                        // llvm.x86.sse41.insertps
-    x86_sse41_mpsadbw,                         // llvm.x86.sse41.mpsadbw
-    x86_sse41_packusdw,                        // llvm.x86.sse41.packusdw
-    x86_sse41_pblendvb,                        // llvm.x86.sse41.pblendvb
-    x86_sse41_phminposuw,                      // llvm.x86.sse41.phminposuw
-    x86_sse41_pmuldq,                          // llvm.x86.sse41.pmuldq
-    x86_sse41_ptestc,                          // llvm.x86.sse41.ptestc
-    x86_sse41_ptestnzc,                        // llvm.x86.sse41.ptestnzc
-    x86_sse41_ptestz,                          // llvm.x86.sse41.ptestz
-    x86_sse41_round_pd,                        // llvm.x86.sse41.round.pd
-    x86_sse41_round_ps,                        // llvm.x86.sse41.round.ps
-    x86_sse41_round_sd,                        // llvm.x86.sse41.round.sd
-    x86_sse41_round_ss,                        // llvm.x86.sse41.round.ss
-    x86_sse42_crc32_32_16,                     // llvm.x86.sse42.crc32.32.16
-    x86_sse42_crc32_32_32,                     // llvm.x86.sse42.crc32.32.32
-    x86_sse42_crc32_32_8,                      // llvm.x86.sse42.crc32.32.8
-    x86_sse42_crc32_64_64,                     // llvm.x86.sse42.crc32.64.64
-    x86_sse42_pcmpestri128,                    // llvm.x86.sse42.pcmpestri128
-    x86_sse42_pcmpestria128,                   // llvm.x86.sse42.pcmpestria128
-    x86_sse42_pcmpestric128,                   // llvm.x86.sse42.pcmpestric128
-    x86_sse42_pcmpestrio128,                   // llvm.x86.sse42.pcmpestrio128
-    x86_sse42_pcmpestris128,                   // llvm.x86.sse42.pcmpestris128
-    x86_sse42_pcmpestriz128,                   // llvm.x86.sse42.pcmpestriz128
-    x86_sse42_pcmpestrm128,                    // llvm.x86.sse42.pcmpestrm128
-    x86_sse42_pcmpistri128,                    // llvm.x86.sse42.pcmpistri128
-    x86_sse42_pcmpistria128,                   // llvm.x86.sse42.pcmpistria128
-    x86_sse42_pcmpistric128,                   // llvm.x86.sse42.pcmpistric128
-    x86_sse42_pcmpistrio128,                   // llvm.x86.sse42.pcmpistrio128
-    x86_sse42_pcmpistris128,                   // llvm.x86.sse42.pcmpistris128
-    x86_sse42_pcmpistriz128,                   // llvm.x86.sse42.pcmpistriz128
-    x86_sse42_pcmpistrm128,                    // llvm.x86.sse42.pcmpistrm128
-    x86_sse4a_extrq,                           // llvm.x86.sse4a.extrq
-    x86_sse4a_extrqi,                          // llvm.x86.sse4a.extrqi
-    x86_sse4a_insertq,                         // llvm.x86.sse4a.insertq
-    x86_sse4a_insertqi,                        // llvm.x86.sse4a.insertqi
-    x86_ssse3_pabs_b,                          // llvm.x86.ssse3.pabs.b
-    x86_ssse3_pabs_d,                          // llvm.x86.ssse3.pabs.d
-    x86_ssse3_pabs_w,                          // llvm.x86.ssse3.pabs.w
-    x86_ssse3_phadd_d,                         // llvm.x86.ssse3.phadd.d
-    x86_ssse3_phadd_d_128,                     // llvm.x86.ssse3.phadd.d.128
-    x86_ssse3_phadd_sw,                        // llvm.x86.ssse3.phadd.sw
-    x86_ssse3_phadd_sw_128,                    // llvm.x86.ssse3.phadd.sw.128
-    x86_ssse3_phadd_w,                         // llvm.x86.ssse3.phadd.w
-    x86_ssse3_phadd_w_128,                     // llvm.x86.ssse3.phadd.w.128
-    x86_ssse3_phsub_d,                         // llvm.x86.ssse3.phsub.d
-    x86_ssse3_phsub_d_128,                     // llvm.x86.ssse3.phsub.d.128
-    x86_ssse3_phsub_sw,                        // llvm.x86.ssse3.phsub.sw
-    x86_ssse3_phsub_sw_128,                    // llvm.x86.ssse3.phsub.sw.128
-    x86_ssse3_phsub_w,                         // llvm.x86.ssse3.phsub.w
-    x86_ssse3_phsub_w_128,                     // llvm.x86.ssse3.phsub.w.128
-    x86_ssse3_pmadd_ub_sw,                     // llvm.x86.ssse3.pmadd.ub.sw
-    x86_ssse3_pmadd_ub_sw_128,                 // llvm.x86.ssse3.pmadd.ub.sw.128
-    x86_ssse3_pmul_hr_sw,                      // llvm.x86.ssse3.pmul.hr.sw
-    x86_ssse3_pmul_hr_sw_128,                  // llvm.x86.ssse3.pmul.hr.sw.128
-    x86_ssse3_pshuf_b,                         // llvm.x86.ssse3.pshuf.b
-    x86_ssse3_pshuf_b_128,                     // llvm.x86.ssse3.pshuf.b.128
-    x86_ssse3_psign_b,                         // llvm.x86.ssse3.psign.b
-    x86_ssse3_psign_b_128,                     // llvm.x86.ssse3.psign.b.128
-    x86_ssse3_psign_d,                         // llvm.x86.ssse3.psign.d
-    x86_ssse3_psign_d_128,                     // llvm.x86.ssse3.psign.d.128
-    x86_ssse3_psign_w,                         // llvm.x86.ssse3.psign.w
-    x86_ssse3_psign_w_128,                     // llvm.x86.ssse3.psign.w.128
-    x86_subborrow_u32,                         // llvm.x86.subborrow.u32
-    x86_subborrow_u64,                         // llvm.x86.subborrow.u64
-    x86_tbm_bextri_u32,                        // llvm.x86.tbm.bextri.u32
-    x86_tbm_bextri_u64,                        // llvm.x86.tbm.bextri.u64
-    x86_vcvtph2ps_128,                         // llvm.x86.vcvtph2ps.128
-    x86_vcvtph2ps_256,                         // llvm.x86.vcvtph2ps.256
-    x86_vcvtps2ph_128,                         // llvm.x86.vcvtps2ph.128
-    x86_vcvtps2ph_256,                         // llvm.x86.vcvtps2ph.256
-    x86_vgf2p8affineinvqb_128,                 // llvm.x86.vgf2p8affineinvqb.128
-    x86_vgf2p8affineinvqb_256,                 // llvm.x86.vgf2p8affineinvqb.256
-    x86_vgf2p8affineinvqb_512,                 // llvm.x86.vgf2p8affineinvqb.512
-    x86_vgf2p8affineqb_128,                    // llvm.x86.vgf2p8affineqb.128
-    x86_vgf2p8affineqb_256,                    // llvm.x86.vgf2p8affineqb.256
-    x86_vgf2p8affineqb_512,                    // llvm.x86.vgf2p8affineqb.512
-    x86_vgf2p8mulb_128,                        // llvm.x86.vgf2p8mulb.128
-    x86_vgf2p8mulb_256,                        // llvm.x86.vgf2p8mulb.256
-    x86_vgf2p8mulb_512,                        // llvm.x86.vgf2p8mulb.512
-    x86_wrfsbase_32,                           // llvm.x86.wrfsbase.32
-    x86_wrfsbase_64,                           // llvm.x86.wrfsbase.64
-    x86_wrgsbase_32,                           // llvm.x86.wrgsbase.32
-    x86_wrgsbase_64,                           // llvm.x86.wrgsbase.64
-    x86_wrpkru,                                // llvm.x86.wrpkru
-    x86_wrssd,                                 // llvm.x86.wrssd
-    x86_wrssq,                                 // llvm.x86.wrssq
-    x86_wrussd,                                // llvm.x86.wrussd
-    x86_wrussq,                                // llvm.x86.wrussq
-    x86_xabort,                                // llvm.x86.xabort
-    x86_xbegin,                                // llvm.x86.xbegin
-    x86_xend,                                  // llvm.x86.xend
-    x86_xgetbv,                                // llvm.x86.xgetbv
-    x86_xop_vfrcz_pd,                          // llvm.x86.xop.vfrcz.pd
-    x86_xop_vfrcz_pd_256,                      // llvm.x86.xop.vfrcz.pd.256
-    x86_xop_vfrcz_ps,                          // llvm.x86.xop.vfrcz.ps
-    x86_xop_vfrcz_ps_256,                      // llvm.x86.xop.vfrcz.ps.256
-    x86_xop_vfrcz_sd,                          // llvm.x86.xop.vfrcz.sd
-    x86_xop_vfrcz_ss,                          // llvm.x86.xop.vfrcz.ss
-    x86_xop_vpcomb,                            // llvm.x86.xop.vpcomb
-    x86_xop_vpcomd,                            // llvm.x86.xop.vpcomd
-    x86_xop_vpcomq,                            // llvm.x86.xop.vpcomq
-    x86_xop_vpcomub,                           // llvm.x86.xop.vpcomub
-    x86_xop_vpcomud,                           // llvm.x86.xop.vpcomud
-    x86_xop_vpcomuq,                           // llvm.x86.xop.vpcomuq
-    x86_xop_vpcomuw,                           // llvm.x86.xop.vpcomuw
-    x86_xop_vpcomw,                            // llvm.x86.xop.vpcomw
-    x86_xop_vpermil2pd,                        // llvm.x86.xop.vpermil2pd
-    x86_xop_vpermil2pd_256,                    // llvm.x86.xop.vpermil2pd.256
-    x86_xop_vpermil2ps,                        // llvm.x86.xop.vpermil2ps
-    x86_xop_vpermil2ps_256,                    // llvm.x86.xop.vpermil2ps.256
-    x86_xop_vphaddbd,                          // llvm.x86.xop.vphaddbd
-    x86_xop_vphaddbq,                          // llvm.x86.xop.vphaddbq
-    x86_xop_vphaddbw,                          // llvm.x86.xop.vphaddbw
-    x86_xop_vphadddq,                          // llvm.x86.xop.vphadddq
-    x86_xop_vphaddubd,                         // llvm.x86.xop.vphaddubd
-    x86_xop_vphaddubq,                         // llvm.x86.xop.vphaddubq
-    x86_xop_vphaddubw,                         // llvm.x86.xop.vphaddubw
-    x86_xop_vphaddudq,                         // llvm.x86.xop.vphaddudq
-    x86_xop_vphadduwd,                         // llvm.x86.xop.vphadduwd
-    x86_xop_vphadduwq,                         // llvm.x86.xop.vphadduwq
-    x86_xop_vphaddwd,                          // llvm.x86.xop.vphaddwd
-    x86_xop_vphaddwq,                          // llvm.x86.xop.vphaddwq
-    x86_xop_vphsubbw,                          // llvm.x86.xop.vphsubbw
-    x86_xop_vphsubdq,                          // llvm.x86.xop.vphsubdq
-    x86_xop_vphsubwd,                          // llvm.x86.xop.vphsubwd
-    x86_xop_vpmacsdd,                          // llvm.x86.xop.vpmacsdd
-    x86_xop_vpmacsdqh,                         // llvm.x86.xop.vpmacsdqh
-    x86_xop_vpmacsdql,                         // llvm.x86.xop.vpmacsdql
-    x86_xop_vpmacssdd,                         // llvm.x86.xop.vpmacssdd
-    x86_xop_vpmacssdqh,                        // llvm.x86.xop.vpmacssdqh
-    x86_xop_vpmacssdql,                        // llvm.x86.xop.vpmacssdql
-    x86_xop_vpmacsswd,                         // llvm.x86.xop.vpmacsswd
-    x86_xop_vpmacssww,                         // llvm.x86.xop.vpmacssww
-    x86_xop_vpmacswd,                          // llvm.x86.xop.vpmacswd
-    x86_xop_vpmacsww,                          // llvm.x86.xop.vpmacsww
-    x86_xop_vpmadcsswd,                        // llvm.x86.xop.vpmadcsswd
-    x86_xop_vpmadcswd,                         // llvm.x86.xop.vpmadcswd
-    x86_xop_vpperm,                            // llvm.x86.xop.vpperm
-    x86_xop_vprotb,                            // llvm.x86.xop.vprotb
-    x86_xop_vprotbi,                           // llvm.x86.xop.vprotbi
-    x86_xop_vprotd,                            // llvm.x86.xop.vprotd
-    x86_xop_vprotdi,                           // llvm.x86.xop.vprotdi
-    x86_xop_vprotq,                            // llvm.x86.xop.vprotq
-    x86_xop_vprotqi,                           // llvm.x86.xop.vprotqi
-    x86_xop_vprotw,                            // llvm.x86.xop.vprotw
-    x86_xop_vprotwi,                           // llvm.x86.xop.vprotwi
-    x86_xop_vpshab,                            // llvm.x86.xop.vpshab
-    x86_xop_vpshad,                            // llvm.x86.xop.vpshad
-    x86_xop_vpshaq,                            // llvm.x86.xop.vpshaq
-    x86_xop_vpshaw,                            // llvm.x86.xop.vpshaw
-    x86_xop_vpshlb,                            // llvm.x86.xop.vpshlb
-    x86_xop_vpshld,                            // llvm.x86.xop.vpshld
-    x86_xop_vpshlq,                            // llvm.x86.xop.vpshlq
-    x86_xop_vpshlw,                            // llvm.x86.xop.vpshlw
-    x86_xrstor,                                // llvm.x86.xrstor
-    x86_xrstor64,                              // llvm.x86.xrstor64
-    x86_xrstors,                               // llvm.x86.xrstors
-    x86_xrstors64,                             // llvm.x86.xrstors64
-    x86_xsave,                                 // llvm.x86.xsave
-    x86_xsave64,                               // llvm.x86.xsave64
-    x86_xsavec,                                // llvm.x86.xsavec
-    x86_xsavec64,                              // llvm.x86.xsavec64
-    x86_xsaveopt,                              // llvm.x86.xsaveopt
-    x86_xsaveopt64,                            // llvm.x86.xsaveopt64
-    x86_xsaves,                                // llvm.x86.xsaves
-    x86_xsaves64,                              // llvm.x86.xsaves64
-    x86_xsetbv,                                // llvm.x86.xsetbv
-    x86_xtest,                                 // llvm.x86.xtest
-    xcore_bitrev,                              // llvm.xcore.bitrev
-    xcore_checkevent,                          // llvm.xcore.checkevent
-    xcore_chkct,                               // llvm.xcore.chkct
-    xcore_clre,                                // llvm.xcore.clre
-    xcore_clrpt,                               // llvm.xcore.clrpt
-    xcore_clrsr,                               // llvm.xcore.clrsr
-    xcore_crc32,                               // llvm.xcore.crc32
-    xcore_crc8,                                // llvm.xcore.crc8
-    xcore_edu,                                 // llvm.xcore.edu
-    xcore_eeu,                                 // llvm.xcore.eeu
-    xcore_endin,                               // llvm.xcore.endin
-    xcore_freer,                               // llvm.xcore.freer
-    xcore_geted,                               // llvm.xcore.geted
-    xcore_getet,                               // llvm.xcore.getet
-    xcore_getid,                               // llvm.xcore.getid
-    xcore_getps,                               // llvm.xcore.getps
-    xcore_getr,                                // llvm.xcore.getr
-    xcore_getst,                               // llvm.xcore.getst
-    xcore_getts,                               // llvm.xcore.getts
-    xcore_in,                                  // llvm.xcore.in
-    xcore_inct,                                // llvm.xcore.inct
-    xcore_initcp,                              // llvm.xcore.initcp
-    xcore_initdp,                              // llvm.xcore.initdp
-    xcore_initlr,                              // llvm.xcore.initlr
-    xcore_initpc,                              // llvm.xcore.initpc
-    xcore_initsp,                              // llvm.xcore.initsp
-    xcore_inshr,                               // llvm.xcore.inshr
-    xcore_int,                                 // llvm.xcore.int
-    xcore_mjoin,                               // llvm.xcore.mjoin
-    xcore_msync,                               // llvm.xcore.msync
-    xcore_out,                                 // llvm.xcore.out
-    xcore_outct,                               // llvm.xcore.outct
-    xcore_outshr,                              // llvm.xcore.outshr
-    xcore_outt,                                // llvm.xcore.outt
-    xcore_peek,                                // llvm.xcore.peek
-    xcore_setc,                                // llvm.xcore.setc
-    xcore_setclk,                              // llvm.xcore.setclk
-    xcore_setd,                                // llvm.xcore.setd
-    xcore_setev,                               // llvm.xcore.setev
-    xcore_setps,                               // llvm.xcore.setps
-    xcore_setpsc,                              // llvm.xcore.setpsc
-    xcore_setpt,                               // llvm.xcore.setpt
-    xcore_setrdy,                              // llvm.xcore.setrdy
-    xcore_setsr,                               // llvm.xcore.setsr
-    xcore_settw,                               // llvm.xcore.settw
-    xcore_setv,                                // llvm.xcore.setv
-    xcore_sext,                                // llvm.xcore.sext
-    xcore_ssync,                               // llvm.xcore.ssync
-    xcore_syncr,                               // llvm.xcore.syncr
-    xcore_testct,                              // llvm.xcore.testct
-    xcore_testwct,                             // llvm.xcore.testwct
-    xcore_waitevent,                           // llvm.xcore.waitevent
-    xcore_zext                                 // llvm.xcore.zext
-#endif
-
-// Target mapping
-#ifdef GET_INTRINSIC_TARGET_DATA
-struct IntrinsicTargetInfo {
-  llvm::StringLiteral Name;
-  size_t Offset;
-  size_t Count;
-};
-static constexpr IntrinsicTargetInfo TargetInfos[] = {
-  {llvm::StringLiteral(""), 0, 174},
-  {llvm::StringLiteral("aarch64"), 174, 189},
-  {llvm::StringLiteral("amdgcn"), 363, 213},
-  {llvm::StringLiteral("arm"), 576, 240},
-  {llvm::StringLiteral("bpf"), 816, 4},
-  {llvm::StringLiteral("hexagon"), 820, 1708},
-  {llvm::StringLiteral("mips"), 2528, 667},
-  {llvm::StringLiteral("nvvm"), 3195, 1005},
-  {llvm::StringLiteral("ppc"), 4200, 396},
-  {llvm::StringLiteral("r600"), 4596, 21},
-  {llvm::StringLiteral("s390"), 4617, 220},
-  {llvm::StringLiteral("wasm"), 4837, 8},
-  {llvm::StringLiteral("x86"), 4845, 1506},
-  {llvm::StringLiteral("xcore"), 6351, 53},
-};
-#endif
-
-// Intrinsic ID to name table
-#ifdef GET_INTRINSIC_NAME_TABLE
-  // Note that entry #0 is the invalid intrinsic!
-  "llvm.addressofreturnaddress",
-  "llvm.adjust.trampoline",
-  "llvm.annotation",
-  "llvm.assume",
-  "llvm.bitreverse",
-  "llvm.bswap",
-  "llvm.canonicalize",
-  "llvm.ceil",
-  "llvm.clear_cache",
-  "llvm.codeview.annotation",
-  "llvm.convert.from.fp16",
-  "llvm.convert.to.fp16",
-  "llvm.copysign",
-  "llvm.coro.alloc",
-  "llvm.coro.begin",
-  "llvm.coro.destroy",
-  "llvm.coro.done",
-  "llvm.coro.end",
-  "llvm.coro.frame",
-  "llvm.coro.free",
-  "llvm.coro.id",
-  "llvm.coro.param",
-  "llvm.coro.promise",
-  "llvm.coro.resume",
-  "llvm.coro.save",
-  "llvm.coro.size",
-  "llvm.coro.subfn.addr",
-  "llvm.coro.suspend",
-  "llvm.cos",
-  "llvm.ctlz",
-  "llvm.ctpop",
-  "llvm.cttz",
-  "llvm.dbg.addr",
-  "llvm.dbg.declare",
-  "llvm.dbg.value",
-  "llvm.debugtrap",
-  "llvm.donothing",
-  "llvm.eh.dwarf.cfa",
-  "llvm.eh.exceptioncode",
-  "llvm.eh.exceptionpointer",
-  "llvm.eh.return.i32",
-  "llvm.eh.return.i64",
-  "llvm.eh.sjlj.callsite",
-  "llvm.eh.sjlj.functioncontext",
-  "llvm.eh.sjlj.longjmp",
-  "llvm.eh.sjlj.lsda",
-  "llvm.eh.sjlj.setjmp",
-  "llvm.eh.sjlj.setup.dispatch",
-  "llvm.eh.typeid.for",
-  "llvm.eh.unwind.init",
-  "llvm.exp",
-  "llvm.exp2",
-  "llvm.expect",
-  "llvm.experimental.constrained.cos",
-  "llvm.experimental.constrained.exp",
-  "llvm.experimental.constrained.exp2",
-  "llvm.experimental.constrained.fadd",
-  "llvm.experimental.constrained.fdiv",
-  "llvm.experimental.constrained.fma",
-  "llvm.experimental.constrained.fmul",
-  "llvm.experimental.constrained.frem",
-  "llvm.experimental.constrained.fsub",
-  "llvm.experimental.constrained.log",
-  "llvm.experimental.constrained.log10",
-  "llvm.experimental.constrained.log2",
-  "llvm.experimental.constrained.nearbyint",
-  "llvm.experimental.constrained.pow",
-  "llvm.experimental.constrained.powi",
-  "llvm.experimental.constrained.rint",
-  "llvm.experimental.constrained.sin",
-  "llvm.experimental.constrained.sqrt",
-  "llvm.experimental.deoptimize",
-  "llvm.experimental.gc.relocate",
-  "llvm.experimental.gc.result",
-  "llvm.experimental.gc.statepoint",
-  "llvm.experimental.guard",
-  "llvm.experimental.patchpoint.i64",
-  "llvm.experimental.patchpoint.void",
-  "llvm.experimental.stackmap",
-  "llvm.experimental.vector.reduce.add",
-  "llvm.experimental.vector.reduce.and",
-  "llvm.experimental.vector.reduce.fadd",
-  "llvm.experimental.vector.reduce.fmax",
-  "llvm.experimental.vector.reduce.fmin",
-  "llvm.experimental.vector.reduce.fmul",
-  "llvm.experimental.vector.reduce.mul",
-  "llvm.experimental.vector.reduce.or",
-  "llvm.experimental.vector.reduce.smax",
-  "llvm.experimental.vector.reduce.smin",
-  "llvm.experimental.vector.reduce.umax",
-  "llvm.experimental.vector.reduce.umin",
-  "llvm.experimental.vector.reduce.xor",
-  "llvm.fabs",
-  "llvm.floor",
-  "llvm.flt.rounds",
-  "llvm.fma",
-  "llvm.fmuladd",
-  "llvm.frameaddress",
-  "llvm.gcread",
-  "llvm.gcroot",
-  "llvm.gcwrite",
-  "llvm.get.dynamic.area.offset",
-  "llvm.icall.branch.funnel",
-  "llvm.init.trampoline",
-  "llvm.instrprof.increment",
-  "llvm.instrprof.increment.step",
-  "llvm.instrprof.value.profile",
-  "llvm.invariant.end",
-  "llvm.invariant.group.barrier",
-  "llvm.invariant.start",
-  "llvm.lifetime.end",
-  "llvm.lifetime.start",
-  "llvm.load.relative",
-  "llvm.localaddress",
-  "llvm.localescape",
-  "llvm.localrecover",
-  "llvm.log",
-  "llvm.log10",
-  "llvm.log2",
-  "llvm.longjmp",
-  "llvm.masked.compressstore",
-  "llvm.masked.expandload",
-  "llvm.masked.gather",
-  "llvm.masked.load",
-  "llvm.masked.scatter",
-  "llvm.masked.store",
-  "llvm.maxnum",
-  "llvm.memcpy",
-  "llvm.memcpy.element.unordered.atomic",
-  "llvm.memmove",
-  "llvm.memmove.element.unordered.atomic",
-  "llvm.memset",
-  "llvm.memset.element.unordered.atomic",
-  "llvm.minnum",
-  "llvm.nearbyint",
-  "llvm.objectsize",
-  "llvm.pcmarker",
-  "llvm.pow",
-  "llvm.powi",
-  "llvm.prefetch",
-  "llvm.ptr.annotation",
-  "llvm.read_register",
-  "llvm.readcyclecounter",
-  "llvm.returnaddress",
-  "llvm.rint",
-  "llvm.round",
-  "llvm.sadd.with.overflow",
-  "llvm.setjmp",
-  "llvm.sideeffect",
-  "llvm.siglongjmp",
-  "llvm.sigsetjmp",
-  "llvm.sin",
-  "llvm.smul.with.overflow",
-  "llvm.sqrt",
-  "llvm.ssa.copy",
-  "llvm.ssub.with.overflow",
-  "llvm.stackguard",
-  "llvm.stackprotector",
-  "llvm.stackrestore",
-  "llvm.stacksave",
-  "llvm.thread.pointer",
-  "llvm.trap",
-  "llvm.trunc",
-  "llvm.type.checked.load",
-  "llvm.type.test",
-  "llvm.uadd.with.overflow",
-  "llvm.umul.with.overflow",
-  "llvm.usub.with.overflow",
-  "llvm.va_copy",
-  "llvm.va_end",
-  "llvm.va_start",
-  "llvm.var.annotation",
-  "llvm.write_register",
-  "llvm.xray.customevent",
-  "llvm.aarch64.clrex",
-  "llvm.aarch64.crc32b",
-  "llvm.aarch64.crc32cb",
-  "llvm.aarch64.crc32ch",
-  "llvm.aarch64.crc32cw",
-  "llvm.aarch64.crc32cx",
-  "llvm.aarch64.crc32h",
-  "llvm.aarch64.crc32w",
-  "llvm.aarch64.crc32x",
-  "llvm.aarch64.crypto.aesd",
-  "llvm.aarch64.crypto.aese",
-  "llvm.aarch64.crypto.aesimc",
-  "llvm.aarch64.crypto.aesmc",
-  "llvm.aarch64.crypto.sha1c",
-  "llvm.aarch64.crypto.sha1h",
-  "llvm.aarch64.crypto.sha1m",
-  "llvm.aarch64.crypto.sha1p",
-  "llvm.aarch64.crypto.sha1su0",
-  "llvm.aarch64.crypto.sha1su1",
-  "llvm.aarch64.crypto.sha256h",
-  "llvm.aarch64.crypto.sha256h2",
-  "llvm.aarch64.crypto.sha256su0",
-  "llvm.aarch64.crypto.sha256su1",
-  "llvm.aarch64.dmb",
-  "llvm.aarch64.dsb",
-  "llvm.aarch64.hint",
-  "llvm.aarch64.isb",
-  "llvm.aarch64.ldaxp",
-  "llvm.aarch64.ldaxr",
-  "llvm.aarch64.ldxp",
-  "llvm.aarch64.ldxr",
-  "llvm.aarch64.neon.abs",
-  "llvm.aarch64.neon.addhn",
-  "llvm.aarch64.neon.addp",
-  "llvm.aarch64.neon.cls",
-  "llvm.aarch64.neon.fabd",
-  "llvm.aarch64.neon.facge",
-  "llvm.aarch64.neon.facgt",
-  "llvm.aarch64.neon.faddv",
-  "llvm.aarch64.neon.fcvtas",
-  "llvm.aarch64.neon.fcvtau",
-  "llvm.aarch64.neon.fcvtms",
-  "llvm.aarch64.neon.fcvtmu",
-  "llvm.aarch64.neon.fcvtns",
-  "llvm.aarch64.neon.fcvtnu",
-  "llvm.aarch64.neon.fcvtps",
-  "llvm.aarch64.neon.fcvtpu",
-  "llvm.aarch64.neon.fcvtxn",
-  "llvm.aarch64.neon.fcvtzs",
-  "llvm.aarch64.neon.fcvtzu",
-  "llvm.aarch64.neon.fmax",
-  "llvm.aarch64.neon.fmaxnm",
-  "llvm.aarch64.neon.fmaxnmp",
-  "llvm.aarch64.neon.fmaxnmv",
-  "llvm.aarch64.neon.fmaxp",
-  "llvm.aarch64.neon.fmaxv",
-  "llvm.aarch64.neon.fmin",
-  "llvm.aarch64.neon.fminnm",
-  "llvm.aarch64.neon.fminnmp",
-  "llvm.aarch64.neon.fminnmv",
-  "llvm.aarch64.neon.fminp",
-  "llvm.aarch64.neon.fminv",
-  "llvm.aarch64.neon.fmulx",
-  "llvm.aarch64.neon.frecpe",
-  "llvm.aarch64.neon.frecps",
-  "llvm.aarch64.neon.frecpx",
-  "llvm.aarch64.neon.frintn",
-  "llvm.aarch64.neon.frsqrte",
-  "llvm.aarch64.neon.frsqrts",
-  "llvm.aarch64.neon.ld1x2",
-  "llvm.aarch64.neon.ld1x3",
-  "llvm.aarch64.neon.ld1x4",
-  "llvm.aarch64.neon.ld2",
-  "llvm.aarch64.neon.ld2lane",
-  "llvm.aarch64.neon.ld2r",
-  "llvm.aarch64.neon.ld3",
-  "llvm.aarch64.neon.ld3lane",
-  "llvm.aarch64.neon.ld3r",
-  "llvm.aarch64.neon.ld4",
-  "llvm.aarch64.neon.ld4lane",
-  "llvm.aarch64.neon.ld4r",
-  "llvm.aarch64.neon.pmul",
-  "llvm.aarch64.neon.pmull",
-  "llvm.aarch64.neon.pmull64",
-  "llvm.aarch64.neon.raddhn",
-  "llvm.aarch64.neon.rbit",
-  "llvm.aarch64.neon.rshrn",
-  "llvm.aarch64.neon.rsubhn",
-  "llvm.aarch64.neon.sabd",
-  "llvm.aarch64.neon.saddlp",
-  "llvm.aarch64.neon.saddlv",
-  "llvm.aarch64.neon.saddv",
-  "llvm.aarch64.neon.scalar.sqxtn",
-  "llvm.aarch64.neon.scalar.sqxtun",
-  "llvm.aarch64.neon.scalar.uqxtn",
-  "llvm.aarch64.neon.shadd",
-  "llvm.aarch64.neon.shll",
-  "llvm.aarch64.neon.shsub",
-  "llvm.aarch64.neon.smax",
-  "llvm.aarch64.neon.smaxp",
-  "llvm.aarch64.neon.smaxv",
-  "llvm.aarch64.neon.smin",
-  "llvm.aarch64.neon.sminp",
-  "llvm.aarch64.neon.sminv",
-  "llvm.aarch64.neon.smull",
-  "llvm.aarch64.neon.sqabs",
-  "llvm.aarch64.neon.sqadd",
-  "llvm.aarch64.neon.sqdmulh",
-  "llvm.aarch64.neon.sqdmull",
-  "llvm.aarch64.neon.sqdmulls.scalar",
-  "llvm.aarch64.neon.sqneg",
-  "llvm.aarch64.neon.sqrdmulh",
-  "llvm.aarch64.neon.sqrshl",
-  "llvm.aarch64.neon.sqrshrn",
-  "llvm.aarch64.neon.sqrshrun",
-  "llvm.aarch64.neon.sqshl",
-  "llvm.aarch64.neon.sqshlu",
-  "llvm.aarch64.neon.sqshrn",
-  "llvm.aarch64.neon.sqshrun",
-  "llvm.aarch64.neon.sqsub",
-  "llvm.aarch64.neon.sqxtn",
-  "llvm.aarch64.neon.sqxtun",
-  "llvm.aarch64.neon.srhadd",
-  "llvm.aarch64.neon.srshl",
-  "llvm.aarch64.neon.sshl",
-  "llvm.aarch64.neon.sshll",
-  "llvm.aarch64.neon.st1x2",
-  "llvm.aarch64.neon.st1x3",
-  "llvm.aarch64.neon.st1x4",
-  "llvm.aarch64.neon.st2",
-  "llvm.aarch64.neon.st2lane",
-  "llvm.aarch64.neon.st3",
-  "llvm.aarch64.neon.st3lane",
-  "llvm.aarch64.neon.st4",
-  "llvm.aarch64.neon.st4lane",
-  "llvm.aarch64.neon.subhn",
-  "llvm.aarch64.neon.suqadd",
-  "llvm.aarch64.neon.tbl1",
-  "llvm.aarch64.neon.tbl2",
-  "llvm.aarch64.neon.tbl3",
-  "llvm.aarch64.neon.tbl4",
-  "llvm.aarch64.neon.tbx1",
-  "llvm.aarch64.neon.tbx2",
-  "llvm.aarch64.neon.tbx3",
-  "llvm.aarch64.neon.tbx4",
-  "llvm.aarch64.neon.uabd",
-  "llvm.aarch64.neon.uaddlp",
-  "llvm.aarch64.neon.uaddlv",
-  "llvm.aarch64.neon.uaddv",
-  "llvm.aarch64.neon.uhadd",
-  "llvm.aarch64.neon.uhsub",
-  "llvm.aarch64.neon.umax",
-  "llvm.aarch64.neon.umaxp",
-  "llvm.aarch64.neon.umaxv",
-  "llvm.aarch64.neon.umin",
-  "llvm.aarch64.neon.uminp",
-  "llvm.aarch64.neon.uminv",
-  "llvm.aarch64.neon.umull",
-  "llvm.aarch64.neon.uqadd",
-  "llvm.aarch64.neon.uqrshl",
-  "llvm.aarch64.neon.uqrshrn",
-  "llvm.aarch64.neon.uqshl",
-  "llvm.aarch64.neon.uqshrn",
-  "llvm.aarch64.neon.uqsub",
-  "llvm.aarch64.neon.uqxtn",
-  "llvm.aarch64.neon.urecpe",
-  "llvm.aarch64.neon.urhadd",
-  "llvm.aarch64.neon.urshl",
-  "llvm.aarch64.neon.ursqrte",
-  "llvm.aarch64.neon.ushl",
-  "llvm.aarch64.neon.ushll",
-  "llvm.aarch64.neon.usqadd",
-  "llvm.aarch64.neon.vcopy.lane",
-  "llvm.aarch64.neon.vcvtfp2fxs",
-  "llvm.aarch64.neon.vcvtfp2fxu",
-  "llvm.aarch64.neon.vcvtfp2hf",
-  "llvm.aarch64.neon.vcvtfxs2fp",
-  "llvm.aarch64.neon.vcvtfxu2fp",
-  "llvm.aarch64.neon.vcvthf2fp",
-  "llvm.aarch64.neon.vsli",
-  "llvm.aarch64.neon.vsri",
-  "llvm.aarch64.sdiv",
-  "llvm.aarch64.sisd.fabd",
-  "llvm.aarch64.sisd.fcvtxn",
-  "llvm.aarch64.stlxp",
-  "llvm.aarch64.stlxr",
-  "llvm.aarch64.stxp",
-  "llvm.aarch64.stxr",
-  "llvm.aarch64.udiv",
-  "llvm.amdgcn.alignbit",
-  "llvm.amdgcn.alignbyte",
-  "llvm.amdgcn.atomic.dec",
-  "llvm.amdgcn.atomic.inc",
-  "llvm.amdgcn.break",
-  "llvm.amdgcn.buffer.atomic.add",
-  "llvm.amdgcn.buffer.atomic.and",
-  "llvm.amdgcn.buffer.atomic.cmpswap",
-  "llvm.amdgcn.buffer.atomic.or",
-  "llvm.amdgcn.buffer.atomic.smax",
-  "llvm.amdgcn.buffer.atomic.smin",
-  "llvm.amdgcn.buffer.atomic.sub",
-  "llvm.amdgcn.buffer.atomic.swap",
-  "llvm.amdgcn.buffer.atomic.umax",
-  "llvm.amdgcn.buffer.atomic.umin",
-  "llvm.amdgcn.buffer.atomic.xor",
-  "llvm.amdgcn.buffer.load",
-  "llvm.amdgcn.buffer.load.format",
-  "llvm.amdgcn.buffer.store",
-  "llvm.amdgcn.buffer.store.format",
-  "llvm.amdgcn.buffer.wbinvl1",
-  "llvm.amdgcn.buffer.wbinvl1.sc",
-  "llvm.amdgcn.buffer.wbinvl1.vol",
-  "llvm.amdgcn.class",
-  "llvm.amdgcn.cos",
-  "llvm.amdgcn.cubeid",
-  "llvm.amdgcn.cubema",
-  "llvm.amdgcn.cubesc",
-  "llvm.amdgcn.cubetc",
-  "llvm.amdgcn.cvt.pk.i16",
-  "llvm.amdgcn.cvt.pk.u16",
-  "llvm.amdgcn.cvt.pk.u8.f32",
-  "llvm.amdgcn.cvt.pknorm.i16",
-  "llvm.amdgcn.cvt.pknorm.u16",
-  "llvm.amdgcn.cvt.pkrtz",
-  "llvm.amdgcn.dispatch.id",
-  "llvm.amdgcn.dispatch.ptr",
-  "llvm.amdgcn.div.fixup",
-  "llvm.amdgcn.div.fmas",
-  "llvm.amdgcn.div.scale",
-  "llvm.amdgcn.ds.bpermute",
-  "llvm.amdgcn.ds.fadd",
-  "llvm.amdgcn.ds.fmax",
-  "llvm.amdgcn.ds.fmin",
-  "llvm.amdgcn.ds.permute",
-  "llvm.amdgcn.ds.swizzle",
-  "llvm.amdgcn.else",
-  "llvm.amdgcn.else.break",
-  "llvm.amdgcn.end.cf",
-  "llvm.amdgcn.exp",
-  "llvm.amdgcn.exp.compr",
-  "llvm.amdgcn.fcmp",
-  "llvm.amdgcn.fdiv.fast",
-  "llvm.amdgcn.fmed3",
-  "llvm.amdgcn.fmul.legacy",
-  "llvm.amdgcn.fract",
-  "llvm.amdgcn.frexp.exp",
-  "llvm.amdgcn.frexp.mant",
-  "llvm.amdgcn.groupstaticsize",
-  "llvm.amdgcn.icmp",
-  "llvm.amdgcn.if",
-  "llvm.amdgcn.if.break",
-  "llvm.amdgcn.image.atomic.add",
-  "llvm.amdgcn.image.atomic.and",
-  "llvm.amdgcn.image.atomic.cmpswap",
-  "llvm.amdgcn.image.atomic.dec",
-  "llvm.amdgcn.image.atomic.inc",
-  "llvm.amdgcn.image.atomic.or",
-  "llvm.amdgcn.image.atomic.smax",
-  "llvm.amdgcn.image.atomic.smin",
-  "llvm.amdgcn.image.atomic.sub",
-  "llvm.amdgcn.image.atomic.swap",
-  "llvm.amdgcn.image.atomic.umax",
-  "llvm.amdgcn.image.atomic.umin",
-  "llvm.amdgcn.image.atomic.xor",
-  "llvm.amdgcn.image.gather4",
-  "llvm.amdgcn.image.gather4.b",
-  "llvm.amdgcn.image.gather4.b.cl",
-  "llvm.amdgcn.image.gather4.b.cl.o",
-  "llvm.amdgcn.image.gather4.b.o",
-  "llvm.amdgcn.image.gather4.c",
-  "llvm.amdgcn.image.gather4.c.b",
-  "llvm.amdgcn.image.gather4.c.b.cl",
-  "llvm.amdgcn.image.gather4.c.b.cl.o",
-  "llvm.amdgcn.image.gather4.c.b.o",
-  "llvm.amdgcn.image.gather4.c.cl",
-  "llvm.amdgcn.image.gather4.c.cl.o",
-  "llvm.amdgcn.image.gather4.c.l",
-  "llvm.amdgcn.image.gather4.c.l.o",
-  "llvm.amdgcn.image.gather4.c.lz",
-  "llvm.amdgcn.image.gather4.c.lz.o",
-  "llvm.amdgcn.image.gather4.c.o",
-  "llvm.amdgcn.image.gather4.cl",
-  "llvm.amdgcn.image.gather4.cl.o",
-  "llvm.amdgcn.image.gather4.l",
-  "llvm.amdgcn.image.gather4.l.o",
-  "llvm.amdgcn.image.gather4.lz",
-  "llvm.amdgcn.image.gather4.lz.o",
-  "llvm.amdgcn.image.gather4.o",
-  "llvm.amdgcn.image.getlod",
-  "llvm.amdgcn.image.getresinfo",
-  "llvm.amdgcn.image.load",
-  "llvm.amdgcn.image.load.mip",
-  "llvm.amdgcn.image.sample",
-  "llvm.amdgcn.image.sample.b",
-  "llvm.amdgcn.image.sample.b.cl",
-  "llvm.amdgcn.image.sample.b.cl.o",
-  "llvm.amdgcn.image.sample.b.o",
-  "llvm.amdgcn.image.sample.c",
-  "llvm.amdgcn.image.sample.c.b",
-  "llvm.amdgcn.image.sample.c.b.cl",
-  "llvm.amdgcn.image.sample.c.b.cl.o",
-  "llvm.amdgcn.image.sample.c.b.o",
-  "llvm.amdgcn.image.sample.c.cd",
-  "llvm.amdgcn.image.sample.c.cd.cl",
-  "llvm.amdgcn.image.sample.c.cd.cl.o",
-  "llvm.amdgcn.image.sample.c.cd.o",
-  "llvm.amdgcn.image.sample.c.cl",
-  "llvm.amdgcn.image.sample.c.cl.o",
-  "llvm.amdgcn.image.sample.c.d",
-  "llvm.amdgcn.image.sample.c.d.cl",
-  "llvm.amdgcn.image.sample.c.d.cl.o",
-  "llvm.amdgcn.image.sample.c.d.o",
-  "llvm.amdgcn.image.sample.c.l",
-  "llvm.amdgcn.image.sample.c.l.o",
-  "llvm.amdgcn.image.sample.c.lz",
-  "llvm.amdgcn.image.sample.c.lz.o",
-  "llvm.amdgcn.image.sample.c.o",
-  "llvm.amdgcn.image.sample.cd",
-  "llvm.amdgcn.image.sample.cd.cl",
-  "llvm.amdgcn.image.sample.cd.cl.o",
-  "llvm.amdgcn.image.sample.cd.o",
-  "llvm.amdgcn.image.sample.cl",
-  "llvm.amdgcn.image.sample.cl.o",
-  "llvm.amdgcn.image.sample.d",
-  "llvm.amdgcn.image.sample.d.cl",
-  "llvm.amdgcn.image.sample.d.cl.o",
-  "llvm.amdgcn.image.sample.d.o",
-  "llvm.amdgcn.image.sample.l",
-  "llvm.amdgcn.image.sample.l.o",
-  "llvm.amdgcn.image.sample.lz",
-  "llvm.amdgcn.image.sample.lz.o",
-  "llvm.amdgcn.image.sample.o",
-  "llvm.amdgcn.image.store",
-  "llvm.amdgcn.image.store.mip",
-  "llvm.amdgcn.implicit.buffer.ptr",
-  "llvm.amdgcn.implicitarg.ptr",
-  "llvm.amdgcn.init.exec",
-  "llvm.amdgcn.init.exec.from.input",
-  "llvm.amdgcn.interp.mov",
-  "llvm.amdgcn.interp.p1",
-  "llvm.amdgcn.interp.p2",
-  "llvm.amdgcn.kernarg.segment.ptr",
-  "llvm.amdgcn.kill",
-  "llvm.amdgcn.ldexp",
-  "llvm.amdgcn.lerp",
-  "llvm.amdgcn.log.clamp",
-  "llvm.amdgcn.loop",
-  "llvm.amdgcn.mbcnt.hi",
-  "llvm.amdgcn.mbcnt.lo",
-  "llvm.amdgcn.mov.dpp",
-  "llvm.amdgcn.mqsad.pk.u16.u8",
-  "llvm.amdgcn.mqsad.u32.u8",
-  "llvm.amdgcn.msad.u8",
-  "llvm.amdgcn.ps.live",
-  "llvm.amdgcn.qsad.pk.u16.u8",
-  "llvm.amdgcn.queue.ptr",
-  "llvm.amdgcn.rcp",
-  "llvm.amdgcn.rcp.legacy",
-  "llvm.amdgcn.readfirstlane",
-  "llvm.amdgcn.readlane",
-  "llvm.amdgcn.rsq",
-  "llvm.amdgcn.rsq.clamp",
-  "llvm.amdgcn.rsq.legacy",
-  "llvm.amdgcn.s.barrier",
-  "llvm.amdgcn.s.dcache.inv",
-  "llvm.amdgcn.s.dcache.inv.vol",
-  "llvm.amdgcn.s.dcache.wb",
-  "llvm.amdgcn.s.dcache.wb.vol",
-  "llvm.amdgcn.s.decperflevel",
-  "llvm.amdgcn.s.getpc",
-  "llvm.amdgcn.s.getreg",
-  "llvm.amdgcn.s.incperflevel",
-  "llvm.amdgcn.s.memrealtime",
-  "llvm.amdgcn.s.memtime",
-  "llvm.amdgcn.s.sendmsg",
-  "llvm.amdgcn.s.sendmsghalt",
-  "llvm.amdgcn.s.sleep",
-  "llvm.amdgcn.s.waitcnt",
-  "llvm.amdgcn.sad.hi.u8",
-  "llvm.amdgcn.sad.u16",
-  "llvm.amdgcn.sad.u8",
-  "llvm.amdgcn.sbfe",
-  "llvm.amdgcn.set.inactive",
-  "llvm.amdgcn.sffbh",
-  "llvm.amdgcn.sin",
-  "llvm.amdgcn.tbuffer.load",
-  "llvm.amdgcn.tbuffer.store",
-  "llvm.amdgcn.trig.preop",
-  "llvm.amdgcn.ubfe",
-  "llvm.amdgcn.unreachable",
-  "llvm.amdgcn.update.dpp",
-  "llvm.amdgcn.wave.barrier",
-  "llvm.amdgcn.workgroup.id.x",
-  "llvm.amdgcn.workgroup.id.y",
-  "llvm.amdgcn.workgroup.id.z",
-  "llvm.amdgcn.workitem.id.x",
-  "llvm.amdgcn.workitem.id.y",
-  "llvm.amdgcn.workitem.id.z",
-  "llvm.amdgcn.wqm",
-  "llvm.amdgcn.wqm.vote",
-  "llvm.amdgcn.writelane",
-  "llvm.amdgcn.wwm",
-  "llvm.arm.cdp",
-  "llvm.arm.cdp2",
-  "llvm.arm.clrex",
-  "llvm.arm.crc32b",
-  "llvm.arm.crc32cb",
-  "llvm.arm.crc32ch",
-  "llvm.arm.crc32cw",
-  "llvm.arm.crc32h",
-  "llvm.arm.crc32w",
-  "llvm.arm.dbg",
-  "llvm.arm.dmb",
-  "llvm.arm.dsb",
-  "llvm.arm.get.fpscr",
-  "llvm.arm.hint",
-  "llvm.arm.isb",
-  "llvm.arm.ldaex",
-  "llvm.arm.ldaexd",
-  "llvm.arm.ldc",
-  "llvm.arm.ldc2",
-  "llvm.arm.ldc2l",
-  "llvm.arm.ldcl",
-  "llvm.arm.ldrex",
-  "llvm.arm.ldrexd",
-  "llvm.arm.mcr",
-  "llvm.arm.mcr2",
-  "llvm.arm.mcrr",
-  "llvm.arm.mcrr2",
-  "llvm.arm.mrc",
-  "llvm.arm.mrc2",
-  "llvm.arm.mrrc",
-  "llvm.arm.mrrc2",
-  "llvm.arm.neon.aesd",
-  "llvm.arm.neon.aese",
-  "llvm.arm.neon.aesimc",
-  "llvm.arm.neon.aesmc",
-  "llvm.arm.neon.sha1c",
-  "llvm.arm.neon.sha1h",
-  "llvm.arm.neon.sha1m",
-  "llvm.arm.neon.sha1p",
-  "llvm.arm.neon.sha1su0",
-  "llvm.arm.neon.sha1su1",
-  "llvm.arm.neon.sha256h",
-  "llvm.arm.neon.sha256h2",
-  "llvm.arm.neon.sha256su0",
-  "llvm.arm.neon.sha256su1",
-  "llvm.arm.neon.vabds",
-  "llvm.arm.neon.vabdu",
-  "llvm.arm.neon.vabs",
-  "llvm.arm.neon.vacge",
-  "llvm.arm.neon.vacgt",
-  "llvm.arm.neon.vbsl",
-  "llvm.arm.neon.vcls",
-  "llvm.arm.neon.vcvtas",
-  "llvm.arm.neon.vcvtau",
-  "llvm.arm.neon.vcvtfp2fxs",
-  "llvm.arm.neon.vcvtfp2fxu",
-  "llvm.arm.neon.vcvtfp2hf",
-  "llvm.arm.neon.vcvtfxs2fp",
-  "llvm.arm.neon.vcvtfxu2fp",
-  "llvm.arm.neon.vcvthf2fp",
-  "llvm.arm.neon.vcvtms",
-  "llvm.arm.neon.vcvtmu",
-  "llvm.arm.neon.vcvtns",
-  "llvm.arm.neon.vcvtnu",
-  "llvm.arm.neon.vcvtps",
-  "llvm.arm.neon.vcvtpu",
-  "llvm.arm.neon.vhadds",
-  "llvm.arm.neon.vhaddu",
-  "llvm.arm.neon.vhsubs",
-  "llvm.arm.neon.vhsubu",
-  "llvm.arm.neon.vld1",
-  "llvm.arm.neon.vld2",
-  "llvm.arm.neon.vld2lane",
-  "llvm.arm.neon.vld3",
-  "llvm.arm.neon.vld3lane",
-  "llvm.arm.neon.vld4",
-  "llvm.arm.neon.vld4lane",
-  "llvm.arm.neon.vmaxnm",
-  "llvm.arm.neon.vmaxs",
-  "llvm.arm.neon.vmaxu",
-  "llvm.arm.neon.vminnm",
-  "llvm.arm.neon.vmins",
-  "llvm.arm.neon.vminu",
-  "llvm.arm.neon.vmullp",
-  "llvm.arm.neon.vmulls",
-  "llvm.arm.neon.vmullu",
-  "llvm.arm.neon.vmulp",
-  "llvm.arm.neon.vpadals",
-  "llvm.arm.neon.vpadalu",
-  "llvm.arm.neon.vpadd",
-  "llvm.arm.neon.vpaddls",
-  "llvm.arm.neon.vpaddlu",
-  "llvm.arm.neon.vpmaxs",
-  "llvm.arm.neon.vpmaxu",
-  "llvm.arm.neon.vpmins",
-  "llvm.arm.neon.vpminu",
-  "llvm.arm.neon.vqabs",
-  "llvm.arm.neon.vqadds",
-  "llvm.arm.neon.vqaddu",
-  "llvm.arm.neon.vqdmulh",
-  "llvm.arm.neon.vqdmull",
-  "llvm.arm.neon.vqmovns",
-  "llvm.arm.neon.vqmovnsu",
-  "llvm.arm.neon.vqmovnu",
-  "llvm.arm.neon.vqneg",
-  "llvm.arm.neon.vqrdmulh",
-  "llvm.arm.neon.vqrshiftns",
-  "llvm.arm.neon.vqrshiftnsu",
-  "llvm.arm.neon.vqrshiftnu",
-  "llvm.arm.neon.vqrshifts",
-  "llvm.arm.neon.vqrshiftu",
-  "llvm.arm.neon.vqshiftns",
-  "llvm.arm.neon.vqshiftnsu",
-  "llvm.arm.neon.vqshiftnu",
-  "llvm.arm.neon.vqshifts",
-  "llvm.arm.neon.vqshiftsu",
-  "llvm.arm.neon.vqshiftu",
-  "llvm.arm.neon.vqsubs",
-  "llvm.arm.neon.vqsubu",
-  "llvm.arm.neon.vraddhn",
-  "llvm.arm.neon.vrecpe",
-  "llvm.arm.neon.vrecps",
-  "llvm.arm.neon.vrhadds",
-  "llvm.arm.neon.vrhaddu",
-  "llvm.arm.neon.vrinta",
-  "llvm.arm.neon.vrintm",
-  "llvm.arm.neon.vrintn",
-  "llvm.arm.neon.vrintp",
-  "llvm.arm.neon.vrintx",
-  "llvm.arm.neon.vrintz",
-  "llvm.arm.neon.vrshiftn",
-  "llvm.arm.neon.vrshifts",
-  "llvm.arm.neon.vrshiftu",
-  "llvm.arm.neon.vrsqrte",
-  "llvm.arm.neon.vrsqrts",
-  "llvm.arm.neon.vrsubhn",
-  "llvm.arm.neon.vshiftins",
-  "llvm.arm.neon.vshifts",
-  "llvm.arm.neon.vshiftu",
-  "llvm.arm.neon.vst1",
-  "llvm.arm.neon.vst2",
-  "llvm.arm.neon.vst2lane",
-  "llvm.arm.neon.vst3",
-  "llvm.arm.neon.vst3lane",
-  "llvm.arm.neon.vst4",
-  "llvm.arm.neon.vst4lane",
-  "llvm.arm.neon.vtbl1",
-  "llvm.arm.neon.vtbl2",
-  "llvm.arm.neon.vtbl3",
-  "llvm.arm.neon.vtbl4",
-  "llvm.arm.neon.vtbx1",
-  "llvm.arm.neon.vtbx2",
-  "llvm.arm.neon.vtbx3",
-  "llvm.arm.neon.vtbx4",
-  "llvm.arm.qadd",
-  "llvm.arm.qadd16",
-  "llvm.arm.qadd8",
-  "llvm.arm.qasx",
-  "llvm.arm.qsax",
-  "llvm.arm.qsub",
-  "llvm.arm.qsub16",
-  "llvm.arm.qsub8",
-  "llvm.arm.sadd16",
-  "llvm.arm.sadd8",
-  "llvm.arm.sasx",
-  "llvm.arm.sel",
-  "llvm.arm.set.fpscr",
-  "llvm.arm.shadd16",
-  "llvm.arm.shadd8",
-  "llvm.arm.shasx",
-  "llvm.arm.shsax",
-  "llvm.arm.shsub16",
-  "llvm.arm.shsub8",
-  "llvm.arm.smlabb",
-  "llvm.arm.smlabt",
-  "llvm.arm.smlad",
-  "llvm.arm.smladx",
-  "llvm.arm.smlald",
-  "llvm.arm.smlaldx",
-  "llvm.arm.smlatb",
-  "llvm.arm.smlatt",
-  "llvm.arm.smlawb",
-  "llvm.arm.smlawt",
-  "llvm.arm.smlsd",
-  "llvm.arm.smlsdx",
-  "llvm.arm.smlsld",
-  "llvm.arm.smlsldx",
-  "llvm.arm.smuad",
-  "llvm.arm.smuadx",
-  "llvm.arm.smulbb",
-  "llvm.arm.smulbt",
-  "llvm.arm.smultb",
-  "llvm.arm.smultt",
-  "llvm.arm.smulwb",
-  "llvm.arm.smulwt",
-  "llvm.arm.smusd",
-  "llvm.arm.smusdx",
-  "llvm.arm.space",
-  "llvm.arm.ssat",
-  "llvm.arm.ssat16",
-  "llvm.arm.ssax",
-  "llvm.arm.ssub16",
-  "llvm.arm.ssub8",
-  "llvm.arm.stc",
-  "llvm.arm.stc2",
-  "llvm.arm.stc2l",
-  "llvm.arm.stcl",
-  "llvm.arm.stlex",
-  "llvm.arm.stlexd",
-  "llvm.arm.strex",
-  "llvm.arm.strexd",
-  "llvm.arm.sxtab16",
-  "llvm.arm.sxtb16",
-  "llvm.arm.uadd16",
-  "llvm.arm.uadd8",
-  "llvm.arm.uasx",
-  "llvm.arm.uhadd16",
-  "llvm.arm.uhadd8",
-  "llvm.arm.uhasx",
-  "llvm.arm.uhsax",
-  "llvm.arm.uhsub16",
-  "llvm.arm.uhsub8",
-  "llvm.arm.undefined",
-  "llvm.arm.uqadd16",
-  "llvm.arm.uqadd8",
-  "llvm.arm.uqasx",
-  "llvm.arm.uqsax",
-  "llvm.arm.uqsub16",
-  "llvm.arm.uqsub8",
-  "llvm.arm.usad8",
-  "llvm.arm.usada8",
-  "llvm.arm.usat",
-  "llvm.arm.usat16",
-  "llvm.arm.usax",
-  "llvm.arm.usub16",
-  "llvm.arm.usub8",
-  "llvm.arm.uxtab16",
-  "llvm.arm.uxtb16",
-  "llvm.arm.vcvtr",
-  "llvm.arm.vcvtru",
-  "llvm.bpf.load.byte",
-  "llvm.bpf.load.half",
-  "llvm.bpf.load.word",
-  "llvm.bpf.pseudo",
-  "llvm.hexagon.A2.abs",
-  "llvm.hexagon.A2.absp",
-  "llvm.hexagon.A2.abssat",
-  "llvm.hexagon.A2.add",
-  "llvm.hexagon.A2.addh.h16.hh",
-  "llvm.hexagon.A2.addh.h16.hl",
-  "llvm.hexagon.A2.addh.h16.lh",
-  "llvm.hexagon.A2.addh.h16.ll",
-  "llvm.hexagon.A2.addh.h16.sat.hh",
-  "llvm.hexagon.A2.addh.h16.sat.hl",
-  "llvm.hexagon.A2.addh.h16.sat.lh",
-  "llvm.hexagon.A2.addh.h16.sat.ll",
-  "llvm.hexagon.A2.addh.l16.hl",
-  "llvm.hexagon.A2.addh.l16.ll",
-  "llvm.hexagon.A2.addh.l16.sat.hl",
-  "llvm.hexagon.A2.addh.l16.sat.ll",
-  "llvm.hexagon.A2.addi",
-  "llvm.hexagon.A2.addp",
-  "llvm.hexagon.A2.addpsat",
-  "llvm.hexagon.A2.addsat",
-  "llvm.hexagon.A2.addsp",
-  "llvm.hexagon.A2.and",
-  "llvm.hexagon.A2.andir",
-  "llvm.hexagon.A2.andp",
-  "llvm.hexagon.A2.aslh",
-  "llvm.hexagon.A2.asrh",
-  "llvm.hexagon.A2.combine.hh",
-  "llvm.hexagon.A2.combine.hl",
-  "llvm.hexagon.A2.combine.lh",
-  "llvm.hexagon.A2.combine.ll",
-  "llvm.hexagon.A2.combineii",
-  "llvm.hexagon.A2.combinew",
-  "llvm.hexagon.A2.max",
-  "llvm.hexagon.A2.maxp",
-  "llvm.hexagon.A2.maxu",
-  "llvm.hexagon.A2.maxup",
-  "llvm.hexagon.A2.min",
-  "llvm.hexagon.A2.minp",
-  "llvm.hexagon.A2.minu",
-  "llvm.hexagon.A2.minup",
-  "llvm.hexagon.A2.neg",
-  "llvm.hexagon.A2.negp",
-  "llvm.hexagon.A2.negsat",
-  "llvm.hexagon.A2.not",
-  "llvm.hexagon.A2.notp",
-  "llvm.hexagon.A2.or",
-  "llvm.hexagon.A2.orir",
-  "llvm.hexagon.A2.orp",
-  "llvm.hexagon.A2.roundsat",
-  "llvm.hexagon.A2.sat",
-  "llvm.hexagon.A2.satb",
-  "llvm.hexagon.A2.sath",
-  "llvm.hexagon.A2.satub",
-  "llvm.hexagon.A2.satuh",
-  "llvm.hexagon.A2.sub",
-  "llvm.hexagon.A2.subh.h16.hh",
-  "llvm.hexagon.A2.subh.h16.hl",
-  "llvm.hexagon.A2.subh.h16.lh",
-  "llvm.hexagon.A2.subh.h16.ll",
-  "llvm.hexagon.A2.subh.h16.sat.hh",
-  "llvm.hexagon.A2.subh.h16.sat.hl",
-  "llvm.hexagon.A2.subh.h16.sat.lh",
-  "llvm.hexagon.A2.subh.h16.sat.ll",
-  "llvm.hexagon.A2.subh.l16.hl",
-  "llvm.hexagon.A2.subh.l16.ll",
-  "llvm.hexagon.A2.subh.l16.sat.hl",
-  "llvm.hexagon.A2.subh.l16.sat.ll",
-  "llvm.hexagon.A2.subp",
-  "llvm.hexagon.A2.subri",
-  "llvm.hexagon.A2.subsat",
-  "llvm.hexagon.A2.svaddh",
-  "llvm.hexagon.A2.svaddhs",
-  "llvm.hexagon.A2.svadduhs",
-  "llvm.hexagon.A2.svavgh",
-  "llvm.hexagon.A2.svavghs",
-  "llvm.hexagon.A2.svnavgh",
-  "llvm.hexagon.A2.svsubh",
-  "llvm.hexagon.A2.svsubhs",
-  "llvm.hexagon.A2.svsubuhs",
-  "llvm.hexagon.A2.swiz",
-  "llvm.hexagon.A2.sxtb",
-  "llvm.hexagon.A2.sxth",
-  "llvm.hexagon.A2.sxtw",
-  "llvm.hexagon.A2.tfr",
-  "llvm.hexagon.A2.tfrih",
-  "llvm.hexagon.A2.tfril",
-  "llvm.hexagon.A2.tfrp",
-  "llvm.hexagon.A2.tfrpi",
-  "llvm.hexagon.A2.tfrsi",
-  "llvm.hexagon.A2.vabsh",
-  "llvm.hexagon.A2.vabshsat",
-  "llvm.hexagon.A2.vabsw",
-  "llvm.hexagon.A2.vabswsat",
-  "llvm.hexagon.A2.vaddb.map",
-  "llvm.hexagon.A2.vaddh",
-  "llvm.hexagon.A2.vaddhs",
-  "llvm.hexagon.A2.vaddub",
-  "llvm.hexagon.A2.vaddubs",
-  "llvm.hexagon.A2.vadduhs",
-  "llvm.hexagon.A2.vaddw",
-  "llvm.hexagon.A2.vaddws",
-  "llvm.hexagon.A2.vavgh",
-  "llvm.hexagon.A2.vavghcr",
-  "llvm.hexagon.A2.vavghr",
-  "llvm.hexagon.A2.vavgub",
-  "llvm.hexagon.A2.vavgubr",
-  "llvm.hexagon.A2.vavguh",
-  "llvm.hexagon.A2.vavguhr",
-  "llvm.hexagon.A2.vavguw",
-  "llvm.hexagon.A2.vavguwr",
-  "llvm.hexagon.A2.vavgw",
-  "llvm.hexagon.A2.vavgwcr",
-  "llvm.hexagon.A2.vavgwr",
-  "llvm.hexagon.A2.vcmpbeq",
-  "llvm.hexagon.A2.vcmpbgtu",
-  "llvm.hexagon.A2.vcmpheq",
-  "llvm.hexagon.A2.vcmphgt",
-  "llvm.hexagon.A2.vcmphgtu",
-  "llvm.hexagon.A2.vcmpweq",
-  "llvm.hexagon.A2.vcmpwgt",
-  "llvm.hexagon.A2.vcmpwgtu",
-  "llvm.hexagon.A2.vconj",
-  "llvm.hexagon.A2.vmaxb",
-  "llvm.hexagon.A2.vmaxh",
-  "llvm.hexagon.A2.vmaxub",
-  "llvm.hexagon.A2.vmaxuh",
-  "llvm.hexagon.A2.vmaxuw",
-  "llvm.hexagon.A2.vmaxw",
-  "llvm.hexagon.A2.vminb",
-  "llvm.hexagon.A2.vminh",
-  "llvm.hexagon.A2.vminub",
-  "llvm.hexagon.A2.vminuh",
-  "llvm.hexagon.A2.vminuw",
-  "llvm.hexagon.A2.vminw",
-  "llvm.hexagon.A2.vnavgh",
-  "llvm.hexagon.A2.vnavghcr",
-  "llvm.hexagon.A2.vnavghr",
-  "llvm.hexagon.A2.vnavgw",
-  "llvm.hexagon.A2.vnavgwcr",
-  "llvm.hexagon.A2.vnavgwr",
-  "llvm.hexagon.A2.vraddub",
-  "llvm.hexagon.A2.vraddub.acc",
-  "llvm.hexagon.A2.vrsadub",
-  "llvm.hexagon.A2.vrsadub.acc",
-  "llvm.hexagon.A2.vsubb.map",
-  "llvm.hexagon.A2.vsubh",
-  "llvm.hexagon.A2.vsubhs",
-  "llvm.hexagon.A2.vsubub",
-  "llvm.hexagon.A2.vsububs",
-  "llvm.hexagon.A2.vsubuhs",
-  "llvm.hexagon.A2.vsubw",
-  "llvm.hexagon.A2.vsubws",
-  "llvm.hexagon.A2.xor",
-  "llvm.hexagon.A2.xorp",
-  "llvm.hexagon.A2.zxtb",
-  "llvm.hexagon.A2.zxth",
-  "llvm.hexagon.A4.andn",
-  "llvm.hexagon.A4.andnp",
-  "llvm.hexagon.A4.bitsplit",
-  "llvm.hexagon.A4.bitspliti",
-  "llvm.hexagon.A4.boundscheck",
-  "llvm.hexagon.A4.cmpbeq",
-  "llvm.hexagon.A4.cmpbeqi",
-  "llvm.hexagon.A4.cmpbgt",
-  "llvm.hexagon.A4.cmpbgti",
-  "llvm.hexagon.A4.cmpbgtu",
-  "llvm.hexagon.A4.cmpbgtui",
-  "llvm.hexagon.A4.cmpheq",
-  "llvm.hexagon.A4.cmpheqi",
-  "llvm.hexagon.A4.cmphgt",
-  "llvm.hexagon.A4.cmphgti",
-  "llvm.hexagon.A4.cmphgtu",
-  "llvm.hexagon.A4.cmphgtui",
-  "llvm.hexagon.A4.combineir",
-  "llvm.hexagon.A4.combineri",
-  "llvm.hexagon.A4.cround.ri",
-  "llvm.hexagon.A4.cround.rr",
-  "llvm.hexagon.A4.modwrapu",
-  "llvm.hexagon.A4.orn",
-  "llvm.hexagon.A4.ornp",
-  "llvm.hexagon.A4.rcmpeq",
-  "llvm.hexagon.A4.rcmpeqi",
-  "llvm.hexagon.A4.rcmpneq",
-  "llvm.hexagon.A4.rcmpneqi",
-  "llvm.hexagon.A4.round.ri",
-  "llvm.hexagon.A4.round.ri.sat",
-  "llvm.hexagon.A4.round.rr",
-  "llvm.hexagon.A4.round.rr.sat",
-  "llvm.hexagon.A4.tlbmatch",
-  "llvm.hexagon.A4.vcmpbeq.any",
-  "llvm.hexagon.A4.vcmpbeqi",
-  "llvm.hexagon.A4.vcmpbgt",
-  "llvm.hexagon.A4.vcmpbgti",
-  "llvm.hexagon.A4.vcmpbgtui",
-  "llvm.hexagon.A4.vcmpheqi",
-  "llvm.hexagon.A4.vcmphgti",
-  "llvm.hexagon.A4.vcmphgtui",
-  "llvm.hexagon.A4.vcmpweqi",
-  "llvm.hexagon.A4.vcmpwgti",
-  "llvm.hexagon.A4.vcmpwgtui",
-  "llvm.hexagon.A4.vrmaxh",
-  "llvm.hexagon.A4.vrmaxuh",
-  "llvm.hexagon.A4.vrmaxuw",
-  "llvm.hexagon.A4.vrmaxw",
-  "llvm.hexagon.A4.vrminh",
-  "llvm.hexagon.A4.vrminuh",
-  "llvm.hexagon.A4.vrminuw",
-  "llvm.hexagon.A4.vrminw",
-  "llvm.hexagon.A5.vaddhubs",
-  "llvm.hexagon.A6.vcmpbeq.notany",
-  "llvm.hexagon.A6.vcmpbeq.notany.128B",
-  "llvm.hexagon.C2.all8",
-  "llvm.hexagon.C2.and",
-  "llvm.hexagon.C2.andn",
-  "llvm.hexagon.C2.any8",
-  "llvm.hexagon.C2.bitsclr",
-  "llvm.hexagon.C2.bitsclri",
-  "llvm.hexagon.C2.bitsset",
-  "llvm.hexagon.C2.cmpeq",
-  "llvm.hexagon.C2.cmpeqi",
-  "llvm.hexagon.C2.cmpeqp",
-  "llvm.hexagon.C2.cmpgei",
-  "llvm.hexagon.C2.cmpgeui",
-  "llvm.hexagon.C2.cmpgt",
-  "llvm.hexagon.C2.cmpgti",
-  "llvm.hexagon.C2.cmpgtp",
-  "llvm.hexagon.C2.cmpgtu",
-  "llvm.hexagon.C2.cmpgtui",
-  "llvm.hexagon.C2.cmpgtup",
-  "llvm.hexagon.C2.cmplt",
-  "llvm.hexagon.C2.cmpltu",
-  "llvm.hexagon.C2.mask",
-  "llvm.hexagon.C2.mux",
-  "llvm.hexagon.C2.muxii",
-  "llvm.hexagon.C2.muxir",
-  "llvm.hexagon.C2.muxri",
-  "llvm.hexagon.C2.not",
-  "llvm.hexagon.C2.or",
-  "llvm.hexagon.C2.orn",
-  "llvm.hexagon.C2.pxfer.map",
-  "llvm.hexagon.C2.tfrpr",
-  "llvm.hexagon.C2.tfrrp",
-  "llvm.hexagon.C2.vitpack",
-  "llvm.hexagon.C2.vmux",
-  "llvm.hexagon.C2.xor",
-  "llvm.hexagon.C4.and.and",
-  "llvm.hexagon.C4.and.andn",
-  "llvm.hexagon.C4.and.or",
-  "llvm.hexagon.C4.and.orn",
-  "llvm.hexagon.C4.cmplte",
-  "llvm.hexagon.C4.cmpltei",
-  "llvm.hexagon.C4.cmplteu",
-  "llvm.hexagon.C4.cmplteui",
-  "llvm.hexagon.C4.cmpneq",
-  "llvm.hexagon.C4.cmpneqi",
-  "llvm.hexagon.C4.fastcorner9",
-  "llvm.hexagon.C4.fastcorner9.not",
-  "llvm.hexagon.C4.nbitsclr",
-  "llvm.hexagon.C4.nbitsclri",
-  "llvm.hexagon.C4.nbitsset",
-  "llvm.hexagon.C4.or.and",
-  "llvm.hexagon.C4.or.andn",
-  "llvm.hexagon.C4.or.or",
-  "llvm.hexagon.C4.or.orn",
-  "llvm.hexagon.F2.conv.d2df",
-  "llvm.hexagon.F2.conv.d2sf",
-  "llvm.hexagon.F2.conv.df2d",
-  "llvm.hexagon.F2.conv.df2d.chop",
-  "llvm.hexagon.F2.conv.df2sf",
-  "llvm.hexagon.F2.conv.df2ud",
-  "llvm.hexagon.F2.conv.df2ud.chop",
-  "llvm.hexagon.F2.conv.df2uw",
-  "llvm.hexagon.F2.conv.df2uw.chop",
-  "llvm.hexagon.F2.conv.df2w",
-  "llvm.hexagon.F2.conv.df2w.chop",
-  "llvm.hexagon.F2.conv.sf2d",
-  "llvm.hexagon.F2.conv.sf2d.chop",
-  "llvm.hexagon.F2.conv.sf2df",
-  "llvm.hexagon.F2.conv.sf2ud",
-  "llvm.hexagon.F2.conv.sf2ud.chop",
-  "llvm.hexagon.F2.conv.sf2uw",
-  "llvm.hexagon.F2.conv.sf2uw.chop",
-  "llvm.hexagon.F2.conv.sf2w",
-  "llvm.hexagon.F2.conv.sf2w.chop",
-  "llvm.hexagon.F2.conv.ud2df",
-  "llvm.hexagon.F2.conv.ud2sf",
-  "llvm.hexagon.F2.conv.uw2df",
-  "llvm.hexagon.F2.conv.uw2sf",
-  "llvm.hexagon.F2.conv.w2df",
-  "llvm.hexagon.F2.conv.w2sf",
-  "llvm.hexagon.F2.dfclass",
-  "llvm.hexagon.F2.dfcmpeq",
-  "llvm.hexagon.F2.dfcmpge",
-  "llvm.hexagon.F2.dfcmpgt",
-  "llvm.hexagon.F2.dfcmpuo",
-  "llvm.hexagon.F2.dfimm.n",
-  "llvm.hexagon.F2.dfimm.p",
-  "llvm.hexagon.F2.sfadd",
-  "llvm.hexagon.F2.sfclass",
-  "llvm.hexagon.F2.sfcmpeq",
-  "llvm.hexagon.F2.sfcmpge",
-  "llvm.hexagon.F2.sfcmpgt",
-  "llvm.hexagon.F2.sfcmpuo",
-  "llvm.hexagon.F2.sffixupd",
-  "llvm.hexagon.F2.sffixupn",
-  "llvm.hexagon.F2.sffixupr",
-  "llvm.hexagon.F2.sffma",
-  "llvm.hexagon.F2.sffma.lib",
-  "llvm.hexagon.F2.sffma.sc",
-  "llvm.hexagon.F2.sffms",
-  "llvm.hexagon.F2.sffms.lib",
-  "llvm.hexagon.F2.sfimm.n",
-  "llvm.hexagon.F2.sfimm.p",
-  "llvm.hexagon.F2.sfmax",
-  "llvm.hexagon.F2.sfmin",
-  "llvm.hexagon.F2.sfmpy",
-  "llvm.hexagon.F2.sfsub",
-  "llvm.hexagon.L2.loadrb.pbr",
-  "llvm.hexagon.L2.loadrb.pci",
-  "llvm.hexagon.L2.loadrb.pcr",
-  "llvm.hexagon.L2.loadrd.pbr",
-  "llvm.hexagon.L2.loadrd.pci",
-  "llvm.hexagon.L2.loadrd.pcr",
-  "llvm.hexagon.L2.loadrh.pbr",
-  "llvm.hexagon.L2.loadrh.pci",
-  "llvm.hexagon.L2.loadrh.pcr",
-  "llvm.hexagon.L2.loadri.pbr",
-  "llvm.hexagon.L2.loadri.pci",
-  "llvm.hexagon.L2.loadri.pcr",
-  "llvm.hexagon.L2.loadrub.pbr",
-  "llvm.hexagon.L2.loadrub.pci",
-  "llvm.hexagon.L2.loadrub.pcr",
-  "llvm.hexagon.L2.loadruh.pbr",
-  "llvm.hexagon.L2.loadruh.pci",
-  "llvm.hexagon.L2.loadruh.pcr",
-  "llvm.hexagon.L2.loadw.locked",
-  "llvm.hexagon.L4.loadd.locked",
-  "llvm.hexagon.M2.acci",
-  "llvm.hexagon.M2.accii",
-  "llvm.hexagon.M2.cmaci.s0",
-  "llvm.hexagon.M2.cmacr.s0",
-  "llvm.hexagon.M2.cmacs.s0",
-  "llvm.hexagon.M2.cmacs.s1",
-  "llvm.hexagon.M2.cmacsc.s0",
-  "llvm.hexagon.M2.cmacsc.s1",
-  "llvm.hexagon.M2.cmpyi.s0",
-  "llvm.hexagon.M2.cmpyr.s0",
-  "llvm.hexagon.M2.cmpyrs.s0",
-  "llvm.hexagon.M2.cmpyrs.s1",
-  "llvm.hexagon.M2.cmpyrsc.s0",
-  "llvm.hexagon.M2.cmpyrsc.s1",
-  "llvm.hexagon.M2.cmpys.s0",
-  "llvm.hexagon.M2.cmpys.s1",
-  "llvm.hexagon.M2.cmpysc.s0",
-  "llvm.hexagon.M2.cmpysc.s1",
-  "llvm.hexagon.M2.cnacs.s0",
-  "llvm.hexagon.M2.cnacs.s1",
-  "llvm.hexagon.M2.cnacsc.s0",
-  "llvm.hexagon.M2.cnacsc.s1",
-  "llvm.hexagon.M2.dpmpyss.acc.s0",
-  "llvm.hexagon.M2.dpmpyss.nac.s0",
-  "llvm.hexagon.M2.dpmpyss.rnd.s0",
-  "llvm.hexagon.M2.dpmpyss.s0",
-  "llvm.hexagon.M2.dpmpyuu.acc.s0",
-  "llvm.hexagon.M2.dpmpyuu.nac.s0",
-  "llvm.hexagon.M2.dpmpyuu.s0",
-  "llvm.hexagon.M2.hmmpyh.rs1",
-  "llvm.hexagon.M2.hmmpyh.s1",
-  "llvm.hexagon.M2.hmmpyl.rs1",
-  "llvm.hexagon.M2.hmmpyl.s1",
-  "llvm.hexagon.M2.maci",
-  "llvm.hexagon.M2.macsin",
-  "llvm.hexagon.M2.macsip",
-  "llvm.hexagon.M2.mmachs.rs0",
-  "llvm.hexagon.M2.mmachs.rs1",
-  "llvm.hexagon.M2.mmachs.s0",
-  "llvm.hexagon.M2.mmachs.s1",
-  "llvm.hexagon.M2.mmacls.rs0",
-  "llvm.hexagon.M2.mmacls.rs1",
-  "llvm.hexagon.M2.mmacls.s0",
-  "llvm.hexagon.M2.mmacls.s1",
-  "llvm.hexagon.M2.mmacuhs.rs0",
-  "llvm.hexagon.M2.mmacuhs.rs1",
-  "llvm.hexagon.M2.mmacuhs.s0",
-  "llvm.hexagon.M2.mmacuhs.s1",
-  "llvm.hexagon.M2.mmaculs.rs0",
-  "llvm.hexagon.M2.mmaculs.rs1",
-  "llvm.hexagon.M2.mmaculs.s0",
-  "llvm.hexagon.M2.mmaculs.s1",
-  "llvm.hexagon.M2.mmpyh.rs0",
-  "llvm.hexagon.M2.mmpyh.rs1",
-  "llvm.hexagon.M2.mmpyh.s0",
-  "llvm.hexagon.M2.mmpyh.s1",
-  "llvm.hexagon.M2.mmpyl.rs0",
-  "llvm.hexagon.M2.mmpyl.rs1",
-  "llvm.hexagon.M2.mmpyl.s0",
-  "llvm.hexagon.M2.mmpyl.s1",
-  "llvm.hexagon.M2.mmpyuh.rs0",
-  "llvm.hexagon.M2.mmpyuh.rs1",
-  "llvm.hexagon.M2.mmpyuh.s0",
-  "llvm.hexagon.M2.mmpyuh.s1",
-  "llvm.hexagon.M2.mmpyul.rs0",
-  "llvm.hexagon.M2.mmpyul.rs1",
-  "llvm.hexagon.M2.mmpyul.s0",
-  "llvm.hexagon.M2.mmpyul.s1",
-  "llvm.hexagon.M2.mpy.acc.hh.s0",
-  "llvm.hexagon.M2.mpy.acc.hh.s1",
-  "llvm.hexagon.M2.mpy.acc.hl.s0",
-  "llvm.hexagon.M2.mpy.acc.hl.s1",
-  "llvm.hexagon.M2.mpy.acc.lh.s0",
-  "llvm.hexagon.M2.mpy.acc.lh.s1",
-  "llvm.hexagon.M2.mpy.acc.ll.s0",
-  "llvm.hexagon.M2.mpy.acc.ll.s1",
-  "llvm.hexagon.M2.mpy.acc.sat.hh.s0",
-  "llvm.hexagon.M2.mpy.acc.sat.hh.s1",
-  "llvm.hexagon.M2.mpy.acc.sat.hl.s0",
-  "llvm.hexagon.M2.mpy.acc.sat.hl.s1",
-  "llvm.hexagon.M2.mpy.acc.sat.lh.s0",
-  "llvm.hexagon.M2.mpy.acc.sat.lh.s1",
-  "llvm.hexagon.M2.mpy.acc.sat.ll.s0",
-  "llvm.hexagon.M2.mpy.acc.sat.ll.s1",
-  "llvm.hexagon.M2.mpy.hh.s0",
-  "llvm.hexagon.M2.mpy.hh.s1",
-  "llvm.hexagon.M2.mpy.hl.s0",
-  "llvm.hexagon.M2.mpy.hl.s1",
-  "llvm.hexagon.M2.mpy.lh.s0",
-  "llvm.hexagon.M2.mpy.lh.s1",
-  "llvm.hexagon.M2.mpy.ll.s0",
-  "llvm.hexagon.M2.mpy.ll.s1",
-  "llvm.hexagon.M2.mpy.nac.hh.s0",
-  "llvm.hexagon.M2.mpy.nac.hh.s1",
-  "llvm.hexagon.M2.mpy.nac.hl.s0",
-  "llvm.hexagon.M2.mpy.nac.hl.s1",
-  "llvm.hexagon.M2.mpy.nac.lh.s0",
-  "llvm.hexagon.M2.mpy.nac.lh.s1",
-  "llvm.hexagon.M2.mpy.nac.ll.s0",
-  "llvm.hexagon.M2.mpy.nac.ll.s1",
-  "llvm.hexagon.M2.mpy.nac.sat.hh.s0",
-  "llvm.hexagon.M2.mpy.nac.sat.hh.s1",
-  "llvm.hexagon.M2.mpy.nac.sat.hl.s0",
-  "llvm.hexagon.M2.mpy.nac.sat.hl.s1",
-  "llvm.hexagon.M2.mpy.nac.sat.lh.s0",
-  "llvm.hexagon.M2.mpy.nac.sat.lh.s1",
-  "llvm.hexagon.M2.mpy.nac.sat.ll.s0",
-  "llvm.hexagon.M2.mpy.nac.sat.ll.s1",
-  "llvm.hexagon.M2.mpy.rnd.hh.s0",
-  "llvm.hexagon.M2.mpy.rnd.hh.s1",
-  "llvm.hexagon.M2.mpy.rnd.hl.s0",
-  "llvm.hexagon.M2.mpy.rnd.hl.s1",
-  "llvm.hexagon.M2.mpy.rnd.lh.s0",
-  "llvm.hexagon.M2.mpy.rnd.lh.s1",
-  "llvm.hexagon.M2.mpy.rnd.ll.s0",
-  "llvm.hexagon.M2.mpy.rnd.ll.s1",
-  "llvm.hexagon.M2.mpy.sat.hh.s0",
-  "llvm.hexagon.M2.mpy.sat.hh.s1",
-  "llvm.hexagon.M2.mpy.sat.hl.s0",
-  "llvm.hexagon.M2.mpy.sat.hl.s1",
-  "llvm.hexagon.M2.mpy.sat.lh.s0",
-  "llvm.hexagon.M2.mpy.sat.lh.s1",
-  "llvm.hexagon.M2.mpy.sat.ll.s0",
-  "llvm.hexagon.M2.mpy.sat.ll.s1",
-  "llvm.hexagon.M2.mpy.sat.rnd.hh.s0",
-  "llvm.hexagon.M2.mpy.sat.rnd.hh.s1",
-  "llvm.hexagon.M2.mpy.sat.rnd.hl.s0",
-  "llvm.hexagon.M2.mpy.sat.rnd.hl.s1",
-  "llvm.hexagon.M2.mpy.sat.rnd.lh.s0",
-  "llvm.hexagon.M2.mpy.sat.rnd.lh.s1",
-  "llvm.hexagon.M2.mpy.sat.rnd.ll.s0",
-  "llvm.hexagon.M2.mpy.sat.rnd.ll.s1",
-  "llvm.hexagon.M2.mpy.up",
-  "llvm.hexagon.M2.mpy.up.s1",
-  "llvm.hexagon.M2.mpy.up.s1.sat",
-  "llvm.hexagon.M2.mpyd.acc.hh.s0",
-  "llvm.hexagon.M2.mpyd.acc.hh.s1",
-  "llvm.hexagon.M2.mpyd.acc.hl.s0",
-  "llvm.hexagon.M2.mpyd.acc.hl.s1",
-  "llvm.hexagon.M2.mpyd.acc.lh.s0",
-  "llvm.hexagon.M2.mpyd.acc.lh.s1",
-  "llvm.hexagon.M2.mpyd.acc.ll.s0",
-  "llvm.hexagon.M2.mpyd.acc.ll.s1",
-  "llvm.hexagon.M2.mpyd.hh.s0",
-  "llvm.hexagon.M2.mpyd.hh.s1",
-  "llvm.hexagon.M2.mpyd.hl.s0",
-  "llvm.hexagon.M2.mpyd.hl.s1",
-  "llvm.hexagon.M2.mpyd.lh.s0",
-  "llvm.hexagon.M2.mpyd.lh.s1",
-  "llvm.hexagon.M2.mpyd.ll.s0",
-  "llvm.hexagon.M2.mpyd.ll.s1",
-  "llvm.hexagon.M2.mpyd.nac.hh.s0",
-  "llvm.hexagon.M2.mpyd.nac.hh.s1",
-  "llvm.hexagon.M2.mpyd.nac.hl.s0",
-  "llvm.hexagon.M2.mpyd.nac.hl.s1",
-  "llvm.hexagon.M2.mpyd.nac.lh.s0",
-  "llvm.hexagon.M2.mpyd.nac.lh.s1",
-  "llvm.hexagon.M2.mpyd.nac.ll.s0",
-  "llvm.hexagon.M2.mpyd.nac.ll.s1",
-  "llvm.hexagon.M2.mpyd.rnd.hh.s0",
-  "llvm.hexagon.M2.mpyd.rnd.hh.s1",
-  "llvm.hexagon.M2.mpyd.rnd.hl.s0",
-  "llvm.hexagon.M2.mpyd.rnd.hl.s1",
-  "llvm.hexagon.M2.mpyd.rnd.lh.s0",
-  "llvm.hexagon.M2.mpyd.rnd.lh.s1",
-  "llvm.hexagon.M2.mpyd.rnd.ll.s0",
-  "llvm.hexagon.M2.mpyd.rnd.ll.s1",
-  "llvm.hexagon.M2.mpyi",
-  "llvm.hexagon.M2.mpysmi",
-  "llvm.hexagon.M2.mpysu.up",
-  "llvm.hexagon.M2.mpyu.acc.hh.s0",
-  "llvm.hexagon.M2.mpyu.acc.hh.s1",
-  "llvm.hexagon.M2.mpyu.acc.hl.s0",
-  "llvm.hexagon.M2.mpyu.acc.hl.s1",
-  "llvm.hexagon.M2.mpyu.acc.lh.s0",
-  "llvm.hexagon.M2.mpyu.acc.lh.s1",
-  "llvm.hexagon.M2.mpyu.acc.ll.s0",
-  "llvm.hexagon.M2.mpyu.acc.ll.s1",
-  "llvm.hexagon.M2.mpyu.hh.s0",
-  "llvm.hexagon.M2.mpyu.hh.s1",
-  "llvm.hexagon.M2.mpyu.hl.s0",
-  "llvm.hexagon.M2.mpyu.hl.s1",
-  "llvm.hexagon.M2.mpyu.lh.s0",
-  "llvm.hexagon.M2.mpyu.lh.s1",
-  "llvm.hexagon.M2.mpyu.ll.s0",
-  "llvm.hexagon.M2.mpyu.ll.s1",
-  "llvm.hexagon.M2.mpyu.nac.hh.s0",
-  "llvm.hexagon.M2.mpyu.nac.hh.s1",
-  "llvm.hexagon.M2.mpyu.nac.hl.s0",
-  "llvm.hexagon.M2.mpyu.nac.hl.s1",
-  "llvm.hexagon.M2.mpyu.nac.lh.s0",
-  "llvm.hexagon.M2.mpyu.nac.lh.s1",
-  "llvm.hexagon.M2.mpyu.nac.ll.s0",
-  "llvm.hexagon.M2.mpyu.nac.ll.s1",
-  "llvm.hexagon.M2.mpyu.up",
-  "llvm.hexagon.M2.mpyud.acc.hh.s0",
-  "llvm.hexagon.M2.mpyud.acc.hh.s1",
-  "llvm.hexagon.M2.mpyud.acc.hl.s0",
-  "llvm.hexagon.M2.mpyud.acc.hl.s1",
-  "llvm.hexagon.M2.mpyud.acc.lh.s0",
-  "llvm.hexagon.M2.mpyud.acc.lh.s1",
-  "llvm.hexagon.M2.mpyud.acc.ll.s0",
-  "llvm.hexagon.M2.mpyud.acc.ll.s1",
-  "llvm.hexagon.M2.mpyud.hh.s0",
-  "llvm.hexagon.M2.mpyud.hh.s1",
-  "llvm.hexagon.M2.mpyud.hl.s0",
-  "llvm.hexagon.M2.mpyud.hl.s1",
-  "llvm.hexagon.M2.mpyud.lh.s0",
-  "llvm.hexagon.M2.mpyud.lh.s1",
-  "llvm.hexagon.M2.mpyud.ll.s0",
-  "llvm.hexagon.M2.mpyud.ll.s1",
-  "llvm.hexagon.M2.mpyud.nac.hh.s0",
-  "llvm.hexagon.M2.mpyud.nac.hh.s1",
-  "llvm.hexagon.M2.mpyud.nac.hl.s0",
-  "llvm.hexagon.M2.mpyud.nac.hl.s1",
-  "llvm.hexagon.M2.mpyud.nac.lh.s0",
-  "llvm.hexagon.M2.mpyud.nac.lh.s1",
-  "llvm.hexagon.M2.mpyud.nac.ll.s0",
-  "llvm.hexagon.M2.mpyud.nac.ll.s1",
-  "llvm.hexagon.M2.mpyui",
-  "llvm.hexagon.M2.nacci",
-  "llvm.hexagon.M2.naccii",
-  "llvm.hexagon.M2.subacc",
-  "llvm.hexagon.M2.vabsdiffh",
-  "llvm.hexagon.M2.vabsdiffw",
-  "llvm.hexagon.M2.vcmac.s0.sat.i",
-  "llvm.hexagon.M2.vcmac.s0.sat.r",
-  "llvm.hexagon.M2.vcmpy.s0.sat.i",
-  "llvm.hexagon.M2.vcmpy.s0.sat.r",
-  "llvm.hexagon.M2.vcmpy.s1.sat.i",
-  "llvm.hexagon.M2.vcmpy.s1.sat.r",
-  "llvm.hexagon.M2.vdmacs.s0",
-  "llvm.hexagon.M2.vdmacs.s1",
-  "llvm.hexagon.M2.vdmpyrs.s0",
-  "llvm.hexagon.M2.vdmpyrs.s1",
-  "llvm.hexagon.M2.vdmpys.s0",
-  "llvm.hexagon.M2.vdmpys.s1",
-  "llvm.hexagon.M2.vmac2",
-  "llvm.hexagon.M2.vmac2es",
-  "llvm.hexagon.M2.vmac2es.s0",
-  "llvm.hexagon.M2.vmac2es.s1",
-  "llvm.hexagon.M2.vmac2s.s0",
-  "llvm.hexagon.M2.vmac2s.s1",
-  "llvm.hexagon.M2.vmac2su.s0",
-  "llvm.hexagon.M2.vmac2su.s1",
-  "llvm.hexagon.M2.vmpy2es.s0",
-  "llvm.hexagon.M2.vmpy2es.s1",
-  "llvm.hexagon.M2.vmpy2s.s0",
-  "llvm.hexagon.M2.vmpy2s.s0pack",
-  "llvm.hexagon.M2.vmpy2s.s1",
-  "llvm.hexagon.M2.vmpy2s.s1pack",
-  "llvm.hexagon.M2.vmpy2su.s0",
-  "llvm.hexagon.M2.vmpy2su.s1",
-  "llvm.hexagon.M2.vraddh",
-  "llvm.hexagon.M2.vradduh",
-  "llvm.hexagon.M2.vrcmaci.s0",
-  "llvm.hexagon.M2.vrcmaci.s0c",
-  "llvm.hexagon.M2.vrcmacr.s0",
-  "llvm.hexagon.M2.vrcmacr.s0c",
-  "llvm.hexagon.M2.vrcmpyi.s0",
-  "llvm.hexagon.M2.vrcmpyi.s0c",
-  "llvm.hexagon.M2.vrcmpyr.s0",
-  "llvm.hexagon.M2.vrcmpyr.s0c",
-  "llvm.hexagon.M2.vrcmpys.acc.s1",
-  "llvm.hexagon.M2.vrcmpys.s1",
-  "llvm.hexagon.M2.vrcmpys.s1rp",
-  "llvm.hexagon.M2.vrmac.s0",
-  "llvm.hexagon.M2.vrmpy.s0",
-  "llvm.hexagon.M2.xor.xacc",
-  "llvm.hexagon.M4.and.and",
-  "llvm.hexagon.M4.and.andn",
-  "llvm.hexagon.M4.and.or",
-  "llvm.hexagon.M4.and.xor",
-  "llvm.hexagon.M4.cmpyi.wh",
-  "llvm.hexagon.M4.cmpyi.whc",
-  "llvm.hexagon.M4.cmpyr.wh",
-  "llvm.hexagon.M4.cmpyr.whc",
-  "llvm.hexagon.M4.mac.up.s1.sat",
-  "llvm.hexagon.M4.mpyri.addi",
-  "llvm.hexagon.M4.mpyri.addr",
-  "llvm.hexagon.M4.mpyri.addr.u2",
-  "llvm.hexagon.M4.mpyrr.addi",
-  "llvm.hexagon.M4.mpyrr.addr",
-  "llvm.hexagon.M4.nac.up.s1.sat",
-  "llvm.hexagon.M4.or.and",
-  "llvm.hexagon.M4.or.andn",
-  "llvm.hexagon.M4.or.or",
-  "llvm.hexagon.M4.or.xor",
-  "llvm.hexagon.M4.pmpyw",
-  "llvm.hexagon.M4.pmpyw.acc",
-  "llvm.hexagon.M4.vpmpyh",
-  "llvm.hexagon.M4.vpmpyh.acc",
-  "llvm.hexagon.M4.vrmpyeh.acc.s0",
-  "llvm.hexagon.M4.vrmpyeh.acc.s1",
-  "llvm.hexagon.M4.vrmpyeh.s0",
-  "llvm.hexagon.M4.vrmpyeh.s1",
-  "llvm.hexagon.M4.vrmpyoh.acc.s0",
-  "llvm.hexagon.M4.vrmpyoh.acc.s1",
-  "llvm.hexagon.M4.vrmpyoh.s0",
-  "llvm.hexagon.M4.vrmpyoh.s1",
-  "llvm.hexagon.M4.xor.and",
-  "llvm.hexagon.M4.xor.andn",
-  "llvm.hexagon.M4.xor.or",
-  "llvm.hexagon.M4.xor.xacc",
-  "llvm.hexagon.M5.vdmacbsu",
-  "llvm.hexagon.M5.vdmpybsu",
-  "llvm.hexagon.M5.vmacbsu",
-  "llvm.hexagon.M5.vmacbuu",
-  "llvm.hexagon.M5.vmpybsu",
-  "llvm.hexagon.M5.vmpybuu",
-  "llvm.hexagon.M5.vrmacbsu",
-  "llvm.hexagon.M5.vrmacbuu",
-  "llvm.hexagon.M5.vrmpybsu",
-  "llvm.hexagon.M5.vrmpybuu",
-  "llvm.hexagon.M6.vabsdiffb",
-  "llvm.hexagon.M6.vabsdiffub",
-  "llvm.hexagon.S2.addasl.rrri",
-  "llvm.hexagon.S2.asl.i.p",
-  "llvm.hexagon.S2.asl.i.p.acc",
-  "llvm.hexagon.S2.asl.i.p.and",
-  "llvm.hexagon.S2.asl.i.p.nac",
-  "llvm.hexagon.S2.asl.i.p.or",
-  "llvm.hexagon.S2.asl.i.p.xacc",
-  "llvm.hexagon.S2.asl.i.r",
-  "llvm.hexagon.S2.asl.i.r.acc",
-  "llvm.hexagon.S2.asl.i.r.and",
-  "llvm.hexagon.S2.asl.i.r.nac",
-  "llvm.hexagon.S2.asl.i.r.or",
-  "llvm.hexagon.S2.asl.i.r.sat",
-  "llvm.hexagon.S2.asl.i.r.xacc",
-  "llvm.hexagon.S2.asl.i.vh",
-  "llvm.hexagon.S2.asl.i.vw",
-  "llvm.hexagon.S2.asl.r.p",
-  "llvm.hexagon.S2.asl.r.p.acc",
-  "llvm.hexagon.S2.asl.r.p.and",
-  "llvm.hexagon.S2.asl.r.p.nac",
-  "llvm.hexagon.S2.asl.r.p.or",
-  "llvm.hexagon.S2.asl.r.p.xor",
-  "llvm.hexagon.S2.asl.r.r",
-  "llvm.hexagon.S2.asl.r.r.acc",
-  "llvm.hexagon.S2.asl.r.r.and",
-  "llvm.hexagon.S2.asl.r.r.nac",
-  "llvm.hexagon.S2.asl.r.r.or",
-  "llvm.hexagon.S2.asl.r.r.sat",
-  "llvm.hexagon.S2.asl.r.vh",
-  "llvm.hexagon.S2.asl.r.vw",
-  "llvm.hexagon.S2.asr.i.p",
-  "llvm.hexagon.S2.asr.i.p.acc",
-  "llvm.hexagon.S2.asr.i.p.and",
-  "llvm.hexagon.S2.asr.i.p.nac",
-  "llvm.hexagon.S2.asr.i.p.or",
-  "llvm.hexagon.S2.asr.i.p.rnd",
-  "llvm.hexagon.S2.asr.i.p.rnd.goodsyntax",
-  "llvm.hexagon.S2.asr.i.r",
-  "llvm.hexagon.S2.asr.i.r.acc",
-  "llvm.hexagon.S2.asr.i.r.and",
-  "llvm.hexagon.S2.asr.i.r.nac",
-  "llvm.hexagon.S2.asr.i.r.or",
-  "llvm.hexagon.S2.asr.i.r.rnd",
-  "llvm.hexagon.S2.asr.i.r.rnd.goodsyntax",
-  "llvm.hexagon.S2.asr.i.svw.trun",
-  "llvm.hexagon.S2.asr.i.vh",
-  "llvm.hexagon.S2.asr.i.vw",
-  "llvm.hexagon.S2.asr.r.p",
-  "llvm.hexagon.S2.asr.r.p.acc",
-  "llvm.hexagon.S2.asr.r.p.and",
-  "llvm.hexagon.S2.asr.r.p.nac",
-  "llvm.hexagon.S2.asr.r.p.or",
-  "llvm.hexagon.S2.asr.r.p.xor",
-  "llvm.hexagon.S2.asr.r.r",
-  "llvm.hexagon.S2.asr.r.r.acc",
-  "llvm.hexagon.S2.asr.r.r.and",
-  "llvm.hexagon.S2.asr.r.r.nac",
-  "llvm.hexagon.S2.asr.r.r.or",
-  "llvm.hexagon.S2.asr.r.r.sat",
-  "llvm.hexagon.S2.asr.r.svw.trun",
-  "llvm.hexagon.S2.asr.r.vh",
-  "llvm.hexagon.S2.asr.r.vw",
-  "llvm.hexagon.S2.brev",
-  "llvm.hexagon.S2.brevp",
-  "llvm.hexagon.S2.cabacencbin",
-  "llvm.hexagon.S2.cl0",
-  "llvm.hexagon.S2.cl0p",
-  "llvm.hexagon.S2.cl1",
-  "llvm.hexagon.S2.cl1p",
-  "llvm.hexagon.S2.clb",
-  "llvm.hexagon.S2.clbnorm",
-  "llvm.hexagon.S2.clbp",
-  "llvm.hexagon.S2.clrbit.i",
-  "llvm.hexagon.S2.clrbit.r",
-  "llvm.hexagon.S2.ct0",
-  "llvm.hexagon.S2.ct0p",
-  "llvm.hexagon.S2.ct1",
-  "llvm.hexagon.S2.ct1p",
-  "llvm.hexagon.S2.deinterleave",
-  "llvm.hexagon.S2.extractu",
-  "llvm.hexagon.S2.extractu.rp",
-  "llvm.hexagon.S2.extractup",
-  "llvm.hexagon.S2.extractup.rp",
-  "llvm.hexagon.S2.insert",
-  "llvm.hexagon.S2.insert.rp",
-  "llvm.hexagon.S2.insertp",
-  "llvm.hexagon.S2.insertp.rp",
-  "llvm.hexagon.S2.interleave",
-  "llvm.hexagon.S2.lfsp",
-  "llvm.hexagon.S2.lsl.r.p",
-  "llvm.hexagon.S2.lsl.r.p.acc",
-  "llvm.hexagon.S2.lsl.r.p.and",
-  "llvm.hexagon.S2.lsl.r.p.nac",
-  "llvm.hexagon.S2.lsl.r.p.or",
-  "llvm.hexagon.S2.lsl.r.p.xor",
-  "llvm.hexagon.S2.lsl.r.r",
-  "llvm.hexagon.S2.lsl.r.r.acc",
-  "llvm.hexagon.S2.lsl.r.r.and",
-  "llvm.hexagon.S2.lsl.r.r.nac",
-  "llvm.hexagon.S2.lsl.r.r.or",
-  "llvm.hexagon.S2.lsl.r.vh",
-  "llvm.hexagon.S2.lsl.r.vw",
-  "llvm.hexagon.S2.lsr.i.p",
-  "llvm.hexagon.S2.lsr.i.p.acc",
-  "llvm.hexagon.S2.lsr.i.p.and",
-  "llvm.hexagon.S2.lsr.i.p.nac",
-  "llvm.hexagon.S2.lsr.i.p.or",
-  "llvm.hexagon.S2.lsr.i.p.xacc",
-  "llvm.hexagon.S2.lsr.i.r",
-  "llvm.hexagon.S2.lsr.i.r.acc",
-  "llvm.hexagon.S2.lsr.i.r.and",
-  "llvm.hexagon.S2.lsr.i.r.nac",
-  "llvm.hexagon.S2.lsr.i.r.or",
-  "llvm.hexagon.S2.lsr.i.r.xacc",
-  "llvm.hexagon.S2.lsr.i.vh",
-  "llvm.hexagon.S2.lsr.i.vw",
-  "llvm.hexagon.S2.lsr.r.p",
-  "llvm.hexagon.S2.lsr.r.p.acc",
-  "llvm.hexagon.S2.lsr.r.p.and",
-  "llvm.hexagon.S2.lsr.r.p.nac",
-  "llvm.hexagon.S2.lsr.r.p.or",
-  "llvm.hexagon.S2.lsr.r.p.xor",
-  "llvm.hexagon.S2.lsr.r.r",
-  "llvm.hexagon.S2.lsr.r.r.acc",
-  "llvm.hexagon.S2.lsr.r.r.and",
-  "llvm.hexagon.S2.lsr.r.r.nac",
-  "llvm.hexagon.S2.lsr.r.r.or",
-  "llvm.hexagon.S2.lsr.r.vh",
-  "llvm.hexagon.S2.lsr.r.vw",
-  "llvm.hexagon.S2.packhl",
-  "llvm.hexagon.S2.parityp",
-  "llvm.hexagon.S2.setbit.i",
-  "llvm.hexagon.S2.setbit.r",
-  "llvm.hexagon.S2.shuffeb",
-  "llvm.hexagon.S2.shuffeh",
-  "llvm.hexagon.S2.shuffob",
-  "llvm.hexagon.S2.shuffoh",
-  "llvm.hexagon.S2.storerb.pbr",
-  "llvm.hexagon.S2.storerb.pci",
-  "llvm.hexagon.S2.storerb.pcr",
-  "llvm.hexagon.S2.storerd.pbr",
-  "llvm.hexagon.S2.storerd.pci",
-  "llvm.hexagon.S2.storerd.pcr",
-  "llvm.hexagon.S2.storerf.pbr",
-  "llvm.hexagon.S2.storerf.pci",
-  "llvm.hexagon.S2.storerf.pcr",
-  "llvm.hexagon.S2.storerh.pbr",
-  "llvm.hexagon.S2.storerh.pci",
-  "llvm.hexagon.S2.storerh.pcr",
-  "llvm.hexagon.S2.storeri.pbr",
-  "llvm.hexagon.S2.storeri.pci",
-  "llvm.hexagon.S2.storeri.pcr",
-  "llvm.hexagon.S2.storew.locked",
-  "llvm.hexagon.S2.svsathb",
-  "llvm.hexagon.S2.svsathub",
-  "llvm.hexagon.S2.tableidxb.goodsyntax",
-  "llvm.hexagon.S2.tableidxd.goodsyntax",
-  "llvm.hexagon.S2.tableidxh.goodsyntax",
-  "llvm.hexagon.S2.tableidxw.goodsyntax",
-  "llvm.hexagon.S2.togglebit.i",
-  "llvm.hexagon.S2.togglebit.r",
-  "llvm.hexagon.S2.tstbit.i",
-  "llvm.hexagon.S2.tstbit.r",
-  "llvm.hexagon.S2.valignib",
-  "llvm.hexagon.S2.valignrb",
-  "llvm.hexagon.S2.vcnegh",
-  "llvm.hexagon.S2.vcrotate",
-  "llvm.hexagon.S2.vrcnegh",
-  "llvm.hexagon.S2.vrndpackwh",
-  "llvm.hexagon.S2.vrndpackwhs",
-  "llvm.hexagon.S2.vsathb",
-  "llvm.hexagon.S2.vsathb.nopack",
-  "llvm.hexagon.S2.vsathub",
-  "llvm.hexagon.S2.vsathub.nopack",
-  "llvm.hexagon.S2.vsatwh",
-  "llvm.hexagon.S2.vsatwh.nopack",
-  "llvm.hexagon.S2.vsatwuh",
-  "llvm.hexagon.S2.vsatwuh.nopack",
-  "llvm.hexagon.S2.vsplatrb",
-  "llvm.hexagon.S2.vsplatrh",
-  "llvm.hexagon.S2.vspliceib",
-  "llvm.hexagon.S2.vsplicerb",
-  "llvm.hexagon.S2.vsxtbh",
-  "llvm.hexagon.S2.vsxthw",
-  "llvm.hexagon.S2.vtrunehb",
-  "llvm.hexagon.S2.vtrunewh",
-  "llvm.hexagon.S2.vtrunohb",
-  "llvm.hexagon.S2.vtrunowh",
-  "llvm.hexagon.S2.vzxtbh",
-  "llvm.hexagon.S2.vzxthw",
-  "llvm.hexagon.S4.addaddi",
-  "llvm.hexagon.S4.addi.asl.ri",
-  "llvm.hexagon.S4.addi.lsr.ri",
-  "llvm.hexagon.S4.andi.asl.ri",
-  "llvm.hexagon.S4.andi.lsr.ri",
-  "llvm.hexagon.S4.clbaddi",
-  "llvm.hexagon.S4.clbpaddi",
-  "llvm.hexagon.S4.clbpnorm",
-  "llvm.hexagon.S4.extract",
-  "llvm.hexagon.S4.extract.rp",
-  "llvm.hexagon.S4.extractp",
-  "llvm.hexagon.S4.extractp.rp",
-  "llvm.hexagon.S4.lsli",
-  "llvm.hexagon.S4.ntstbit.i",
-  "llvm.hexagon.S4.ntstbit.r",
-  "llvm.hexagon.S4.or.andi",
-  "llvm.hexagon.S4.or.andix",
-  "llvm.hexagon.S4.or.ori",
-  "llvm.hexagon.S4.ori.asl.ri",
-  "llvm.hexagon.S4.ori.lsr.ri",
-  "llvm.hexagon.S4.parity",
-  "llvm.hexagon.S4.stored.locked",
-  "llvm.hexagon.S4.subaddi",
-  "llvm.hexagon.S4.subi.asl.ri",
-  "llvm.hexagon.S4.subi.lsr.ri",
-  "llvm.hexagon.S4.vrcrotate",
-  "llvm.hexagon.S4.vrcrotate.acc",
-  "llvm.hexagon.S4.vxaddsubh",
-  "llvm.hexagon.S4.vxaddsubhr",
-  "llvm.hexagon.S4.vxaddsubw",
-  "llvm.hexagon.S4.vxsubaddh",
-  "llvm.hexagon.S4.vxsubaddhr",
-  "llvm.hexagon.S4.vxsubaddw",
-  "llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax",
-  "llvm.hexagon.S5.asrhub.sat",
-  "llvm.hexagon.S5.popcountp",
-  "llvm.hexagon.S5.vasrhrnd.goodsyntax",
-  "llvm.hexagon.S6.rol.i.p",
-  "llvm.hexagon.S6.rol.i.p.acc",
-  "llvm.hexagon.S6.rol.i.p.and",
-  "llvm.hexagon.S6.rol.i.p.nac",
-  "llvm.hexagon.S6.rol.i.p.or",
-  "llvm.hexagon.S6.rol.i.p.xacc",
-  "llvm.hexagon.S6.rol.i.r",
-  "llvm.hexagon.S6.rol.i.r.acc",
-  "llvm.hexagon.S6.rol.i.r.and",
-  "llvm.hexagon.S6.rol.i.r.nac",
-  "llvm.hexagon.S6.rol.i.r.or",
-  "llvm.hexagon.S6.rol.i.r.xacc",
-  "llvm.hexagon.S6.vsplatrbp",
-  "llvm.hexagon.S6.vtrunehb.ppp",
-  "llvm.hexagon.S6.vtrunohb.ppp",
-  "llvm.hexagon.V6.extractw",
-  "llvm.hexagon.V6.extractw.128B",
-  "llvm.hexagon.V6.hi",
-  "llvm.hexagon.V6.hi.128B",
-  "llvm.hexagon.V6.lo",
-  "llvm.hexagon.V6.lo.128B",
-  "llvm.hexagon.V6.lvsplatb",
-  "llvm.hexagon.V6.lvsplatb.128B",
-  "llvm.hexagon.V6.lvsplath",
-  "llvm.hexagon.V6.lvsplath.128B",
-  "llvm.hexagon.V6.lvsplatw",
-  "llvm.hexagon.V6.lvsplatw.128B",
-  "llvm.hexagon.V6.pred.and",
-  "llvm.hexagon.V6.pred.and.128B",
-  "llvm.hexagon.V6.pred.and.n",
-  "llvm.hexagon.V6.pred.and.n.128B",
-  "llvm.hexagon.V6.pred.not",
-  "llvm.hexagon.V6.pred.not.128B",
-  "llvm.hexagon.V6.pred.or",
-  "llvm.hexagon.V6.pred.or.128B",
-  "llvm.hexagon.V6.pred.or.n",
-  "llvm.hexagon.V6.pred.or.n.128B",
-  "llvm.hexagon.V6.pred.scalar2",
-  "llvm.hexagon.V6.pred.scalar2.128B",
-  "llvm.hexagon.V6.pred.scalar2v2",
-  "llvm.hexagon.V6.pred.scalar2v2.128B",
-  "llvm.hexagon.V6.pred.xor",
-  "llvm.hexagon.V6.pred.xor.128B",
-  "llvm.hexagon.V6.shuffeqh",
-  "llvm.hexagon.V6.shuffeqh.128B",
-  "llvm.hexagon.V6.shuffeqw",
-  "llvm.hexagon.V6.shuffeqw.128B",
-  "llvm.hexagon.V6.vS32b.nqpred.ai",
-  "llvm.hexagon.V6.vS32b.nqpred.ai.128B",
-  "llvm.hexagon.V6.vS32b.nt.nqpred.ai",
-  "llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B",
-  "llvm.hexagon.V6.vS32b.nt.qpred.ai",
-  "llvm.hexagon.V6.vS32b.nt.qpred.ai.128B",
-  "llvm.hexagon.V6.vS32b.qpred.ai",
-  "llvm.hexagon.V6.vS32b.qpred.ai.128B",
-  "llvm.hexagon.V6.vabsb",
-  "llvm.hexagon.V6.vabsb.128B",
-  "llvm.hexagon.V6.vabsb.sat",
-  "llvm.hexagon.V6.vabsb.sat.128B",
-  "llvm.hexagon.V6.vabsdiffh",
-  "llvm.hexagon.V6.vabsdiffh.128B",
-  "llvm.hexagon.V6.vabsdiffub",
-  "llvm.hexagon.V6.vabsdiffub.128B",
-  "llvm.hexagon.V6.vabsdiffuh",
-  "llvm.hexagon.V6.vabsdiffuh.128B",
-  "llvm.hexagon.V6.vabsdiffw",
-  "llvm.hexagon.V6.vabsdiffw.128B",
-  "llvm.hexagon.V6.vabsh",
-  "llvm.hexagon.V6.vabsh.128B",
-  "llvm.hexagon.V6.vabsh.sat",
-  "llvm.hexagon.V6.vabsh.sat.128B",
-  "llvm.hexagon.V6.vabsw",
-  "llvm.hexagon.V6.vabsw.128B",
-  "llvm.hexagon.V6.vabsw.sat",
-  "llvm.hexagon.V6.vabsw.sat.128B",
-  "llvm.hexagon.V6.vaddb",
-  "llvm.hexagon.V6.vaddb.128B",
-  "llvm.hexagon.V6.vaddb.dv",
-  "llvm.hexagon.V6.vaddb.dv.128B",
-  "llvm.hexagon.V6.vaddbnq",
-  "llvm.hexagon.V6.vaddbnq.128B",
-  "llvm.hexagon.V6.vaddbq",
-  "llvm.hexagon.V6.vaddbq.128B",
-  "llvm.hexagon.V6.vaddbsat",
-  "llvm.hexagon.V6.vaddbsat.128B",
-  "llvm.hexagon.V6.vaddbsat.dv",
-  "llvm.hexagon.V6.vaddbsat.dv.128B",
-  "llvm.hexagon.V6.vaddcarry",
-  "llvm.hexagon.V6.vaddcarry.128B",
-  "llvm.hexagon.V6.vaddclbh",
-  "llvm.hexagon.V6.vaddclbh.128B",
-  "llvm.hexagon.V6.vaddclbw",
-  "llvm.hexagon.V6.vaddclbw.128B",
-  "llvm.hexagon.V6.vaddh",
-  "llvm.hexagon.V6.vaddh.128B",
-  "llvm.hexagon.V6.vaddh.dv",
-  "llvm.hexagon.V6.vaddh.dv.128B",
-  "llvm.hexagon.V6.vaddhnq",
-  "llvm.hexagon.V6.vaddhnq.128B",
-  "llvm.hexagon.V6.vaddhq",
-  "llvm.hexagon.V6.vaddhq.128B",
-  "llvm.hexagon.V6.vaddhsat",
-  "llvm.hexagon.V6.vaddhsat.128B",
-  "llvm.hexagon.V6.vaddhsat.dv",
-  "llvm.hexagon.V6.vaddhsat.dv.128B",
-  "llvm.hexagon.V6.vaddhw",
-  "llvm.hexagon.V6.vaddhw.128B",
-  "llvm.hexagon.V6.vaddhw.acc",
-  "llvm.hexagon.V6.vaddhw.acc.128B",
-  "llvm.hexagon.V6.vaddubh",
-  "llvm.hexagon.V6.vaddubh.128B",
-  "llvm.hexagon.V6.vaddubh.acc",
-  "llvm.hexagon.V6.vaddubh.acc.128B",
-  "llvm.hexagon.V6.vaddubsat",
-  "llvm.hexagon.V6.vaddubsat.128B",
-  "llvm.hexagon.V6.vaddubsat.dv",
-  "llvm.hexagon.V6.vaddubsat.dv.128B",
-  "llvm.hexagon.V6.vaddububb.sat",
-  "llvm.hexagon.V6.vaddububb.sat.128B",
-  "llvm.hexagon.V6.vadduhsat",
-  "llvm.hexagon.V6.vadduhsat.128B",
-  "llvm.hexagon.V6.vadduhsat.dv",
-  "llvm.hexagon.V6.vadduhsat.dv.128B",
-  "llvm.hexagon.V6.vadduhw",
-  "llvm.hexagon.V6.vadduhw.128B",
-  "llvm.hexagon.V6.vadduhw.acc",
-  "llvm.hexagon.V6.vadduhw.acc.128B",
-  "llvm.hexagon.V6.vadduwsat",
-  "llvm.hexagon.V6.vadduwsat.128B",
-  "llvm.hexagon.V6.vadduwsat.dv",
-  "llvm.hexagon.V6.vadduwsat.dv.128B",
-  "llvm.hexagon.V6.vaddw",
-  "llvm.hexagon.V6.vaddw.128B",
-  "llvm.hexagon.V6.vaddw.dv",
-  "llvm.hexagon.V6.vaddw.dv.128B",
-  "llvm.hexagon.V6.vaddwnq",
-  "llvm.hexagon.V6.vaddwnq.128B",
-  "llvm.hexagon.V6.vaddwq",
-  "llvm.hexagon.V6.vaddwq.128B",
-  "llvm.hexagon.V6.vaddwsat",
-  "llvm.hexagon.V6.vaddwsat.128B",
-  "llvm.hexagon.V6.vaddwsat.dv",
-  "llvm.hexagon.V6.vaddwsat.dv.128B",
-  "llvm.hexagon.V6.valignb",
-  "llvm.hexagon.V6.valignb.128B",
-  "llvm.hexagon.V6.valignbi",
-  "llvm.hexagon.V6.valignbi.128B",
-  "llvm.hexagon.V6.vand",
-  "llvm.hexagon.V6.vand.128B",
-  "llvm.hexagon.V6.vandnqrt",
-  "llvm.hexagon.V6.vandnqrt.128B",
-  "llvm.hexagon.V6.vandnqrt.acc",
-  "llvm.hexagon.V6.vandnqrt.acc.128B",
-  "llvm.hexagon.V6.vandqrt",
-  "llvm.hexagon.V6.vandqrt.128B",
-  "llvm.hexagon.V6.vandqrt.acc",
-  "llvm.hexagon.V6.vandqrt.acc.128B",
-  "llvm.hexagon.V6.vandvnqv",
-  "llvm.hexagon.V6.vandvnqv.128B",
-  "llvm.hexagon.V6.vandvqv",
-  "llvm.hexagon.V6.vandvqv.128B",
-  "llvm.hexagon.V6.vandvrt",
-  "llvm.hexagon.V6.vandvrt.128B",
-  "llvm.hexagon.V6.vandvrt.acc",
-  "llvm.hexagon.V6.vandvrt.acc.128B",
-  "llvm.hexagon.V6.vaslh",
-  "llvm.hexagon.V6.vaslh.128B",
-  "llvm.hexagon.V6.vaslh.acc",
-  "llvm.hexagon.V6.vaslh.acc.128B",
-  "llvm.hexagon.V6.vaslhv",
-  "llvm.hexagon.V6.vaslhv.128B",
-  "llvm.hexagon.V6.vaslw",
-  "llvm.hexagon.V6.vaslw.128B",
-  "llvm.hexagon.V6.vaslw.acc",
-  "llvm.hexagon.V6.vaslw.acc.128B",
-  "llvm.hexagon.V6.vaslwv",
-  "llvm.hexagon.V6.vaslwv.128B",
-  "llvm.hexagon.V6.vasrh",
-  "llvm.hexagon.V6.vasrh.128B",
-  "llvm.hexagon.V6.vasrh.acc",
-  "llvm.hexagon.V6.vasrh.acc.128B",
-  "llvm.hexagon.V6.vasrhbrndsat",
-  "llvm.hexagon.V6.vasrhbrndsat.128B",
-  "llvm.hexagon.V6.vasrhbsat",
-  "llvm.hexagon.V6.vasrhbsat.128B",
-  "llvm.hexagon.V6.vasrhubrndsat",
-  "llvm.hexagon.V6.vasrhubrndsat.128B",
-  "llvm.hexagon.V6.vasrhubsat",
-  "llvm.hexagon.V6.vasrhubsat.128B",
-  "llvm.hexagon.V6.vasrhv",
-  "llvm.hexagon.V6.vasrhv.128B",
-  "llvm.hexagon.V6.vasruhubrndsat",
-  "llvm.hexagon.V6.vasruhubrndsat.128B",
-  "llvm.hexagon.V6.vasruhubsat",
-  "llvm.hexagon.V6.vasruhubsat.128B",
-  "llvm.hexagon.V6.vasruwuhrndsat",
-  "llvm.hexagon.V6.vasruwuhrndsat.128B",
-  "llvm.hexagon.V6.vasruwuhsat",
-  "llvm.hexagon.V6.vasruwuhsat.128B",
-  "llvm.hexagon.V6.vasrw",
-  "llvm.hexagon.V6.vasrw.128B",
-  "llvm.hexagon.V6.vasrw.acc",
-  "llvm.hexagon.V6.vasrw.acc.128B",
-  "llvm.hexagon.V6.vasrwh",
-  "llvm.hexagon.V6.vasrwh.128B",
-  "llvm.hexagon.V6.vasrwhrndsat",
-  "llvm.hexagon.V6.vasrwhrndsat.128B",
-  "llvm.hexagon.V6.vasrwhsat",
-  "llvm.hexagon.V6.vasrwhsat.128B",
-  "llvm.hexagon.V6.vasrwuhrndsat",
-  "llvm.hexagon.V6.vasrwuhrndsat.128B",
-  "llvm.hexagon.V6.vasrwuhsat",
-  "llvm.hexagon.V6.vasrwuhsat.128B",
-  "llvm.hexagon.V6.vasrwv",
-  "llvm.hexagon.V6.vasrwv.128B",
-  "llvm.hexagon.V6.vassign",
-  "llvm.hexagon.V6.vassign.128B",
-  "llvm.hexagon.V6.vassignp",
-  "llvm.hexagon.V6.vassignp.128B",
-  "llvm.hexagon.V6.vavgb",
-  "llvm.hexagon.V6.vavgb.128B",
-  "llvm.hexagon.V6.vavgbrnd",
-  "llvm.hexagon.V6.vavgbrnd.128B",
-  "llvm.hexagon.V6.vavgh",
-  "llvm.hexagon.V6.vavgh.128B",
-  "llvm.hexagon.V6.vavghrnd",
-  "llvm.hexagon.V6.vavghrnd.128B",
-  "llvm.hexagon.V6.vavgub",
-  "llvm.hexagon.V6.vavgub.128B",
-  "llvm.hexagon.V6.vavgubrnd",
-  "llvm.hexagon.V6.vavgubrnd.128B",
-  "llvm.hexagon.V6.vavguh",
-  "llvm.hexagon.V6.vavguh.128B",
-  "llvm.hexagon.V6.vavguhrnd",
-  "llvm.hexagon.V6.vavguhrnd.128B",
-  "llvm.hexagon.V6.vavguw",
-  "llvm.hexagon.V6.vavguw.128B",
-  "llvm.hexagon.V6.vavguwrnd",
-  "llvm.hexagon.V6.vavguwrnd.128B",
-  "llvm.hexagon.V6.vavgw",
-  "llvm.hexagon.V6.vavgw.128B",
-  "llvm.hexagon.V6.vavgwrnd",
-  "llvm.hexagon.V6.vavgwrnd.128B",
-  "llvm.hexagon.V6.vcl0h",
-  "llvm.hexagon.V6.vcl0h.128B",
-  "llvm.hexagon.V6.vcl0w",
-  "llvm.hexagon.V6.vcl0w.128B",
-  "llvm.hexagon.V6.vcombine",
-  "llvm.hexagon.V6.vcombine.128B",
-  "llvm.hexagon.V6.vd0",
-  "llvm.hexagon.V6.vd0.128B",
-  "llvm.hexagon.V6.vdd0",
-  "llvm.hexagon.V6.vdd0.128B",
-  "llvm.hexagon.V6.vdealb",
-  "llvm.hexagon.V6.vdealb.128B",
-  "llvm.hexagon.V6.vdealb4w",
-  "llvm.hexagon.V6.vdealb4w.128B",
-  "llvm.hexagon.V6.vdealh",
-  "llvm.hexagon.V6.vdealh.128B",
-  "llvm.hexagon.V6.vdealvdd",
-  "llvm.hexagon.V6.vdealvdd.128B",
-  "llvm.hexagon.V6.vdelta",
-  "llvm.hexagon.V6.vdelta.128B",
-  "llvm.hexagon.V6.vdmpybus",
-  "llvm.hexagon.V6.vdmpybus.128B",
-  "llvm.hexagon.V6.vdmpybus.acc",
-  "llvm.hexagon.V6.vdmpybus.acc.128B",
-  "llvm.hexagon.V6.vdmpybus.dv",
-  "llvm.hexagon.V6.vdmpybus.dv.128B",
-  "llvm.hexagon.V6.vdmpybus.dv.acc",
-  "llvm.hexagon.V6.vdmpybus.dv.acc.128B",
-  "llvm.hexagon.V6.vdmpyhb",
-  "llvm.hexagon.V6.vdmpyhb.128B",
-  "llvm.hexagon.V6.vdmpyhb.acc",
-  "llvm.hexagon.V6.vdmpyhb.acc.128B",
-  "llvm.hexagon.V6.vdmpyhb.dv",
-  "llvm.hexagon.V6.vdmpyhb.dv.128B",
-  "llvm.hexagon.V6.vdmpyhb.dv.acc",
-  "llvm.hexagon.V6.vdmpyhb.dv.acc.128B",
-  "llvm.hexagon.V6.vdmpyhisat",
-  "llvm.hexagon.V6.vdmpyhisat.128B",
-  "llvm.hexagon.V6.vdmpyhisat.acc",
-  "llvm.hexagon.V6.vdmpyhisat.acc.128B",
-  "llvm.hexagon.V6.vdmpyhsat",
-  "llvm.hexagon.V6.vdmpyhsat.128B",
-  "llvm.hexagon.V6.vdmpyhsat.acc",
-  "llvm.hexagon.V6.vdmpyhsat.acc.128B",
-  "llvm.hexagon.V6.vdmpyhsuisat",
-  "llvm.hexagon.V6.vdmpyhsuisat.128B",
-  "llvm.hexagon.V6.vdmpyhsuisat.acc",
-  "llvm.hexagon.V6.vdmpyhsuisat.acc.128B",
-  "llvm.hexagon.V6.vdmpyhsusat",
-  "llvm.hexagon.V6.vdmpyhsusat.128B",
-  "llvm.hexagon.V6.vdmpyhsusat.acc",
-  "llvm.hexagon.V6.vdmpyhsusat.acc.128B",
-  "llvm.hexagon.V6.vdmpyhvsat",
-  "llvm.hexagon.V6.vdmpyhvsat.128B",
-  "llvm.hexagon.V6.vdmpyhvsat.acc",
-  "llvm.hexagon.V6.vdmpyhvsat.acc.128B",
-  "llvm.hexagon.V6.vdsaduh",
-  "llvm.hexagon.V6.vdsaduh.128B",
-  "llvm.hexagon.V6.vdsaduh.acc",
-  "llvm.hexagon.V6.vdsaduh.acc.128B",
-  "llvm.hexagon.V6.veqb",
-  "llvm.hexagon.V6.veqb.128B",
-  "llvm.hexagon.V6.veqb.and",
-  "llvm.hexagon.V6.veqb.and.128B",
-  "llvm.hexagon.V6.veqb.or",
-  "llvm.hexagon.V6.veqb.or.128B",
-  "llvm.hexagon.V6.veqb.xor",
-  "llvm.hexagon.V6.veqb.xor.128B",
-  "llvm.hexagon.V6.veqh",
-  "llvm.hexagon.V6.veqh.128B",
-  "llvm.hexagon.V6.veqh.and",
-  "llvm.hexagon.V6.veqh.and.128B",
-  "llvm.hexagon.V6.veqh.or",
-  "llvm.hexagon.V6.veqh.or.128B",
-  "llvm.hexagon.V6.veqh.xor",
-  "llvm.hexagon.V6.veqh.xor.128B",
-  "llvm.hexagon.V6.veqw",
-  "llvm.hexagon.V6.veqw.128B",
-  "llvm.hexagon.V6.veqw.and",
-  "llvm.hexagon.V6.veqw.and.128B",
-  "llvm.hexagon.V6.veqw.or",
-  "llvm.hexagon.V6.veqw.or.128B",
-  "llvm.hexagon.V6.veqw.xor",
-  "llvm.hexagon.V6.veqw.xor.128B",
-  "llvm.hexagon.V6.vgathermh",
-  "llvm.hexagon.V6.vgathermh.128B",
-  "llvm.hexagon.V6.vgathermhq",
-  "llvm.hexagon.V6.vgathermhq.128B",
-  "llvm.hexagon.V6.vgathermhw",
-  "llvm.hexagon.V6.vgathermhw.128B",
-  "llvm.hexagon.V6.vgathermhwq",
-  "llvm.hexagon.V6.vgathermhwq.128B",
-  "llvm.hexagon.V6.vgathermw",
-  "llvm.hexagon.V6.vgathermw.128B",
-  "llvm.hexagon.V6.vgathermwq",
-  "llvm.hexagon.V6.vgathermwq.128B",
-  "llvm.hexagon.V6.vgtb",
-  "llvm.hexagon.V6.vgtb.128B",
-  "llvm.hexagon.V6.vgtb.and",
-  "llvm.hexagon.V6.vgtb.and.128B",
-  "llvm.hexagon.V6.vgtb.or",
-  "llvm.hexagon.V6.vgtb.or.128B",
-  "llvm.hexagon.V6.vgtb.xor",
-  "llvm.hexagon.V6.vgtb.xor.128B",
-  "llvm.hexagon.V6.vgth",
-  "llvm.hexagon.V6.vgth.128B",
-  "llvm.hexagon.V6.vgth.and",
-  "llvm.hexagon.V6.vgth.and.128B",
-  "llvm.hexagon.V6.vgth.or",
-  "llvm.hexagon.V6.vgth.or.128B",
-  "llvm.hexagon.V6.vgth.xor",
-  "llvm.hexagon.V6.vgth.xor.128B",
-  "llvm.hexagon.V6.vgtub",
-  "llvm.hexagon.V6.vgtub.128B",
-  "llvm.hexagon.V6.vgtub.and",
-  "llvm.hexagon.V6.vgtub.and.128B",
-  "llvm.hexagon.V6.vgtub.or",
-  "llvm.hexagon.V6.vgtub.or.128B",
-  "llvm.hexagon.V6.vgtub.xor",
-  "llvm.hexagon.V6.vgtub.xor.128B",
-  "llvm.hexagon.V6.vgtuh",
-  "llvm.hexagon.V6.vgtuh.128B",
-  "llvm.hexagon.V6.vgtuh.and",
-  "llvm.hexagon.V6.vgtuh.and.128B",
-  "llvm.hexagon.V6.vgtuh.or",
-  "llvm.hexagon.V6.vgtuh.or.128B",
-  "llvm.hexagon.V6.vgtuh.xor",
-  "llvm.hexagon.V6.vgtuh.xor.128B",
-  "llvm.hexagon.V6.vgtuw",
-  "llvm.hexagon.V6.vgtuw.128B",
-  "llvm.hexagon.V6.vgtuw.and",
-  "llvm.hexagon.V6.vgtuw.and.128B",
-  "llvm.hexagon.V6.vgtuw.or",
-  "llvm.hexagon.V6.vgtuw.or.128B",
-  "llvm.hexagon.V6.vgtuw.xor",
-  "llvm.hexagon.V6.vgtuw.xor.128B",
-  "llvm.hexagon.V6.vgtw",
-  "llvm.hexagon.V6.vgtw.128B",
-  "llvm.hexagon.V6.vgtw.and",
-  "llvm.hexagon.V6.vgtw.and.128B",
-  "llvm.hexagon.V6.vgtw.or",
-  "llvm.hexagon.V6.vgtw.or.128B",
-  "llvm.hexagon.V6.vgtw.xor",
-  "llvm.hexagon.V6.vgtw.xor.128B",
-  "llvm.hexagon.V6.vinsertwr",
-  "llvm.hexagon.V6.vinsertwr.128B",
-  "llvm.hexagon.V6.vlalignb",
-  "llvm.hexagon.V6.vlalignb.128B",
-  "llvm.hexagon.V6.vlalignbi",
-  "llvm.hexagon.V6.vlalignbi.128B",
-  "llvm.hexagon.V6.vlsrb",
-  "llvm.hexagon.V6.vlsrb.128B",
-  "llvm.hexagon.V6.vlsrh",
-  "llvm.hexagon.V6.vlsrh.128B",
-  "llvm.hexagon.V6.vlsrhv",
-  "llvm.hexagon.V6.vlsrhv.128B",
-  "llvm.hexagon.V6.vlsrw",
-  "llvm.hexagon.V6.vlsrw.128B",
-  "llvm.hexagon.V6.vlsrwv",
-  "llvm.hexagon.V6.vlsrwv.128B",
-  "llvm.hexagon.V6.vlut4",
-  "llvm.hexagon.V6.vlut4.128B",
-  "llvm.hexagon.V6.vlutvvb",
-  "llvm.hexagon.V6.vlutvvb.128B",
-  "llvm.hexagon.V6.vlutvvb.nm",
-  "llvm.hexagon.V6.vlutvvb.nm.128B",
-  "llvm.hexagon.V6.vlutvvb.oracc",
-  "llvm.hexagon.V6.vlutvvb.oracc.128B",
-  "llvm.hexagon.V6.vlutvvb.oracci",
-  "llvm.hexagon.V6.vlutvvb.oracci.128B",
-  "llvm.hexagon.V6.vlutvvbi",
-  "llvm.hexagon.V6.vlutvvbi.128B",
-  "llvm.hexagon.V6.vlutvwh",
-  "llvm.hexagon.V6.vlutvwh.128B",
-  "llvm.hexagon.V6.vlutvwh.nm",
-  "llvm.hexagon.V6.vlutvwh.nm.128B",
-  "llvm.hexagon.V6.vlutvwh.oracc",
-  "llvm.hexagon.V6.vlutvwh.oracc.128B",
-  "llvm.hexagon.V6.vlutvwh.oracci",
-  "llvm.hexagon.V6.vlutvwh.oracci.128B",
-  "llvm.hexagon.V6.vlutvwhi",
-  "llvm.hexagon.V6.vlutvwhi.128B",
-  "llvm.hexagon.V6.vmaskedstorenq",
-  "llvm.hexagon.V6.vmaskedstorenq.128B",
-  "llvm.hexagon.V6.vmaskedstorentnq",
-  "llvm.hexagon.V6.vmaskedstorentnq.128B",
-  "llvm.hexagon.V6.vmaskedstorentq",
-  "llvm.hexagon.V6.vmaskedstorentq.128B",
-  "llvm.hexagon.V6.vmaskedstoreq",
-  "llvm.hexagon.V6.vmaskedstoreq.128B",
-  "llvm.hexagon.V6.vmaxb",
-  "llvm.hexagon.V6.vmaxb.128B",
-  "llvm.hexagon.V6.vmaxh",
-  "llvm.hexagon.V6.vmaxh.128B",
-  "llvm.hexagon.V6.vmaxub",
-  "llvm.hexagon.V6.vmaxub.128B",
-  "llvm.hexagon.V6.vmaxuh",
-  "llvm.hexagon.V6.vmaxuh.128B",
-  "llvm.hexagon.V6.vmaxw",
-  "llvm.hexagon.V6.vmaxw.128B",
-  "llvm.hexagon.V6.vminb",
-  "llvm.hexagon.V6.vminb.128B",
-  "llvm.hexagon.V6.vminh",
-  "llvm.hexagon.V6.vminh.128B",
-  "llvm.hexagon.V6.vminub",
-  "llvm.hexagon.V6.vminub.128B",
-  "llvm.hexagon.V6.vminuh",
-  "llvm.hexagon.V6.vminuh.128B",
-  "llvm.hexagon.V6.vminw",
-  "llvm.hexagon.V6.vminw.128B",
-  "llvm.hexagon.V6.vmpabus",
-  "llvm.hexagon.V6.vmpabus.128B",
-  "llvm.hexagon.V6.vmpabus.acc",
-  "llvm.hexagon.V6.vmpabus.acc.128B",
-  "llvm.hexagon.V6.vmpabusv",
-  "llvm.hexagon.V6.vmpabusv.128B",
-  "llvm.hexagon.V6.vmpabuu",
-  "llvm.hexagon.V6.vmpabuu.128B",
-  "llvm.hexagon.V6.vmpabuu.acc",
-  "llvm.hexagon.V6.vmpabuu.acc.128B",
-  "llvm.hexagon.V6.vmpabuuv",
-  "llvm.hexagon.V6.vmpabuuv.128B",
-  "llvm.hexagon.V6.vmpahb",
-  "llvm.hexagon.V6.vmpahb.128B",
-  "llvm.hexagon.V6.vmpahb.acc",
-  "llvm.hexagon.V6.vmpahb.acc.128B",
-  "llvm.hexagon.V6.vmpahhsat",
-  "llvm.hexagon.V6.vmpahhsat.128B",
-  "llvm.hexagon.V6.vmpauhb",
-  "llvm.hexagon.V6.vmpauhb.128B",
-  "llvm.hexagon.V6.vmpauhb.acc",
-  "llvm.hexagon.V6.vmpauhb.acc.128B",
-  "llvm.hexagon.V6.vmpauhuhsat",
-  "llvm.hexagon.V6.vmpauhuhsat.128B",
-  "llvm.hexagon.V6.vmpsuhuhsat",
-  "llvm.hexagon.V6.vmpsuhuhsat.128B",
-  "llvm.hexagon.V6.vmpybus",
-  "llvm.hexagon.V6.vmpybus.128B",
-  "llvm.hexagon.V6.vmpybus.acc",
-  "llvm.hexagon.V6.vmpybus.acc.128B",
-  "llvm.hexagon.V6.vmpybusv",
-  "llvm.hexagon.V6.vmpybusv.128B",
-  "llvm.hexagon.V6.vmpybusv.acc",
-  "llvm.hexagon.V6.vmpybusv.acc.128B",
-  "llvm.hexagon.V6.vmpybv",
-  "llvm.hexagon.V6.vmpybv.128B",
-  "llvm.hexagon.V6.vmpybv.acc",
-  "llvm.hexagon.V6.vmpybv.acc.128B",
-  "llvm.hexagon.V6.vmpyewuh",
-  "llvm.hexagon.V6.vmpyewuh.128B",
-  "llvm.hexagon.V6.vmpyewuh.64",
-  "llvm.hexagon.V6.vmpyewuh.64.128B",
-  "llvm.hexagon.V6.vmpyh",
-  "llvm.hexagon.V6.vmpyh.128B",
-  "llvm.hexagon.V6.vmpyh.acc",
-  "llvm.hexagon.V6.vmpyh.acc.128B",
-  "llvm.hexagon.V6.vmpyhsat.acc",
-  "llvm.hexagon.V6.vmpyhsat.acc.128B",
-  "llvm.hexagon.V6.vmpyhsrs",
-  "llvm.hexagon.V6.vmpyhsrs.128B",
-  "llvm.hexagon.V6.vmpyhss",
-  "llvm.hexagon.V6.vmpyhss.128B",
-  "llvm.hexagon.V6.vmpyhus",
-  "llvm.hexagon.V6.vmpyhus.128B",
-  "llvm.hexagon.V6.vmpyhus.acc",
-  "llvm.hexagon.V6.vmpyhus.acc.128B",
-  "llvm.hexagon.V6.vmpyhv",
-  "llvm.hexagon.V6.vmpyhv.128B",
-  "llvm.hexagon.V6.vmpyhv.acc",
-  "llvm.hexagon.V6.vmpyhv.acc.128B",
-  "llvm.hexagon.V6.vmpyhvsrs",
-  "llvm.hexagon.V6.vmpyhvsrs.128B",
-  "llvm.hexagon.V6.vmpyieoh",
-  "llvm.hexagon.V6.vmpyieoh.128B",
-  "llvm.hexagon.V6.vmpyiewh.acc",
-  "llvm.hexagon.V6.vmpyiewh.acc.128B",
-  "llvm.hexagon.V6.vmpyiewuh",
-  "llvm.hexagon.V6.vmpyiewuh.128B",
-  "llvm.hexagon.V6.vmpyiewuh.acc",
-  "llvm.hexagon.V6.vmpyiewuh.acc.128B",
-  "llvm.hexagon.V6.vmpyih",
-  "llvm.hexagon.V6.vmpyih.128B",
-  "llvm.hexagon.V6.vmpyih.acc",
-  "llvm.hexagon.V6.vmpyih.acc.128B",
-  "llvm.hexagon.V6.vmpyihb",
-  "llvm.hexagon.V6.vmpyihb.128B",
-  "llvm.hexagon.V6.vmpyihb.acc",
-  "llvm.hexagon.V6.vmpyihb.acc.128B",
-  "llvm.hexagon.V6.vmpyiowh",
-  "llvm.hexagon.V6.vmpyiowh.128B",
-  "llvm.hexagon.V6.vmpyiwb",
-  "llvm.hexagon.V6.vmpyiwb.128B",
-  "llvm.hexagon.V6.vmpyiwb.acc",
-  "llvm.hexagon.V6.vmpyiwb.acc.128B",
-  "llvm.hexagon.V6.vmpyiwh",
-  "llvm.hexagon.V6.vmpyiwh.128B",
-  "llvm.hexagon.V6.vmpyiwh.acc",
-  "llvm.hexagon.V6.vmpyiwh.acc.128B",
-  "llvm.hexagon.V6.vmpyiwub",
-  "llvm.hexagon.V6.vmpyiwub.128B",
-  "llvm.hexagon.V6.vmpyiwub.acc",
-  "llvm.hexagon.V6.vmpyiwub.acc.128B",
-  "llvm.hexagon.V6.vmpyowh",
-  "llvm.hexagon.V6.vmpyowh.128B",
-  "llvm.hexagon.V6.vmpyowh.64.acc",
-  "llvm.hexagon.V6.vmpyowh.64.acc.128B",
-  "llvm.hexagon.V6.vmpyowh.rnd",
-  "llvm.hexagon.V6.vmpyowh.rnd.128B",
-  "llvm.hexagon.V6.vmpyowh.rnd.sacc",
-  "llvm.hexagon.V6.vmpyowh.rnd.sacc.128B",
-  "llvm.hexagon.V6.vmpyowh.sacc",
-  "llvm.hexagon.V6.vmpyowh.sacc.128B",
-  "llvm.hexagon.V6.vmpyub",
-  "llvm.hexagon.V6.vmpyub.128B",
-  "llvm.hexagon.V6.vmpyub.acc",
-  "llvm.hexagon.V6.vmpyub.acc.128B",
-  "llvm.hexagon.V6.vmpyubv",
-  "llvm.hexagon.V6.vmpyubv.128B",
-  "llvm.hexagon.V6.vmpyubv.acc",
-  "llvm.hexagon.V6.vmpyubv.acc.128B",
-  "llvm.hexagon.V6.vmpyuh",
-  "llvm.hexagon.V6.vmpyuh.128B",
-  "llvm.hexagon.V6.vmpyuh.acc",
-  "llvm.hexagon.V6.vmpyuh.acc.128B",
-  "llvm.hexagon.V6.vmpyuhe",
-  "llvm.hexagon.V6.vmpyuhe.128B",
-  "llvm.hexagon.V6.vmpyuhe.acc",
-  "llvm.hexagon.V6.vmpyuhe.acc.128B",
-  "llvm.hexagon.V6.vmpyuhv",
-  "llvm.hexagon.V6.vmpyuhv.128B",
-  "llvm.hexagon.V6.vmpyuhv.acc",
-  "llvm.hexagon.V6.vmpyuhv.acc.128B",
-  "llvm.hexagon.V6.vmux",
-  "llvm.hexagon.V6.vmux.128B",
-  "llvm.hexagon.V6.vnavgb",
-  "llvm.hexagon.V6.vnavgb.128B",
-  "llvm.hexagon.V6.vnavgh",
-  "llvm.hexagon.V6.vnavgh.128B",
-  "llvm.hexagon.V6.vnavgub",
-  "llvm.hexagon.V6.vnavgub.128B",
-  "llvm.hexagon.V6.vnavgw",
-  "llvm.hexagon.V6.vnavgw.128B",
-  "llvm.hexagon.V6.vnormamth",
-  "llvm.hexagon.V6.vnormamth.128B",
-  "llvm.hexagon.V6.vnormamtw",
-  "llvm.hexagon.V6.vnormamtw.128B",
-  "llvm.hexagon.V6.vnot",
-  "llvm.hexagon.V6.vnot.128B",
-  "llvm.hexagon.V6.vor",
-  "llvm.hexagon.V6.vor.128B",
-  "llvm.hexagon.V6.vpackeb",
-  "llvm.hexagon.V6.vpackeb.128B",
-  "llvm.hexagon.V6.vpackeh",
-  "llvm.hexagon.V6.vpackeh.128B",
-  "llvm.hexagon.V6.vpackhb.sat",
-  "llvm.hexagon.V6.vpackhb.sat.128B",
-  "llvm.hexagon.V6.vpackhub.sat",
-  "llvm.hexagon.V6.vpackhub.sat.128B",
-  "llvm.hexagon.V6.vpackob",
-  "llvm.hexagon.V6.vpackob.128B",
-  "llvm.hexagon.V6.vpackoh",
-  "llvm.hexagon.V6.vpackoh.128B",
-  "llvm.hexagon.V6.vpackwh.sat",
-  "llvm.hexagon.V6.vpackwh.sat.128B",
-  "llvm.hexagon.V6.vpackwuh.sat",
-  "llvm.hexagon.V6.vpackwuh.sat.128B",
-  "llvm.hexagon.V6.vpopcounth",
-  "llvm.hexagon.V6.vpopcounth.128B",
-  "llvm.hexagon.V6.vprefixqb",
-  "llvm.hexagon.V6.vprefixqb.128B",
-  "llvm.hexagon.V6.vprefixqh",
-  "llvm.hexagon.V6.vprefixqh.128B",
-  "llvm.hexagon.V6.vprefixqw",
-  "llvm.hexagon.V6.vprefixqw.128B",
-  "llvm.hexagon.V6.vrdelta",
-  "llvm.hexagon.V6.vrdelta.128B",
-  "llvm.hexagon.V6.vrmpybub.rtt",
-  "llvm.hexagon.V6.vrmpybub.rtt.128B",
-  "llvm.hexagon.V6.vrmpybub.rtt.acc",
-  "llvm.hexagon.V6.vrmpybub.rtt.acc.128B",
-  "llvm.hexagon.V6.vrmpybus",
-  "llvm.hexagon.V6.vrmpybus.128B",
-  "llvm.hexagon.V6.vrmpybus.acc",
-  "llvm.hexagon.V6.vrmpybus.acc.128B",
-  "llvm.hexagon.V6.vrmpybusi",
-  "llvm.hexagon.V6.vrmpybusi.128B",
-  "llvm.hexagon.V6.vrmpybusi.acc",
-  "llvm.hexagon.V6.vrmpybusi.acc.128B",
-  "llvm.hexagon.V6.vrmpybusv",
-  "llvm.hexagon.V6.vrmpybusv.128B",
-  "llvm.hexagon.V6.vrmpybusv.acc",
-  "llvm.hexagon.V6.vrmpybusv.acc.128B",
-  "llvm.hexagon.V6.vrmpybv",
-  "llvm.hexagon.V6.vrmpybv.128B",
-  "llvm.hexagon.V6.vrmpybv.acc",
-  "llvm.hexagon.V6.vrmpybv.acc.128B",
-  "llvm.hexagon.V6.vrmpyub",
-  "llvm.hexagon.V6.vrmpyub.128B",
-  "llvm.hexagon.V6.vrmpyub.acc",
-  "llvm.hexagon.V6.vrmpyub.acc.128B",
-  "llvm.hexagon.V6.vrmpyub.rtt",
-  "llvm.hexagon.V6.vrmpyub.rtt.128B",
-  "llvm.hexagon.V6.vrmpyub.rtt.acc",
-  "llvm.hexagon.V6.vrmpyub.rtt.acc.128B",
-  "llvm.hexagon.V6.vrmpyubi",
-  "llvm.hexagon.V6.vrmpyubi.128B",
-  "llvm.hexagon.V6.vrmpyubi.acc",
-  "llvm.hexagon.V6.vrmpyubi.acc.128B",
-  "llvm.hexagon.V6.vrmpyubv",
-  "llvm.hexagon.V6.vrmpyubv.128B",
-  "llvm.hexagon.V6.vrmpyubv.acc",
-  "llvm.hexagon.V6.vrmpyubv.acc.128B",
-  "llvm.hexagon.V6.vror",
-  "llvm.hexagon.V6.vror.128B",
-  "llvm.hexagon.V6.vroundhb",
-  "llvm.hexagon.V6.vroundhb.128B",
-  "llvm.hexagon.V6.vroundhub",
-  "llvm.hexagon.V6.vroundhub.128B",
-  "llvm.hexagon.V6.vrounduhub",
-  "llvm.hexagon.V6.vrounduhub.128B",
-  "llvm.hexagon.V6.vrounduwuh",
-  "llvm.hexagon.V6.vrounduwuh.128B",
-  "llvm.hexagon.V6.vroundwh",
-  "llvm.hexagon.V6.vroundwh.128B",
-  "llvm.hexagon.V6.vroundwuh",
-  "llvm.hexagon.V6.vroundwuh.128B",
-  "llvm.hexagon.V6.vrsadubi",
-  "llvm.hexagon.V6.vrsadubi.128B",
-  "llvm.hexagon.V6.vrsadubi.acc",
-  "llvm.hexagon.V6.vrsadubi.acc.128B",
-  "llvm.hexagon.V6.vsathub",
-  "llvm.hexagon.V6.vsathub.128B",
-  "llvm.hexagon.V6.vsatuwuh",
-  "llvm.hexagon.V6.vsatuwuh.128B",
-  "llvm.hexagon.V6.vsatwh",
-  "llvm.hexagon.V6.vsatwh.128B",
-  "llvm.hexagon.V6.vsb",
-  "llvm.hexagon.V6.vsb.128B",
-  "llvm.hexagon.V6.vscattermh",
-  "llvm.hexagon.V6.vscattermh.128B",
-  "llvm.hexagon.V6.vscattermh.add",
-  "llvm.hexagon.V6.vscattermh.add.128B",
-  "llvm.hexagon.V6.vscattermhq",
-  "llvm.hexagon.V6.vscattermhq.128B",
-  "llvm.hexagon.V6.vscattermhw",
-  "llvm.hexagon.V6.vscattermhw.128B",
-  "llvm.hexagon.V6.vscattermhw.add",
-  "llvm.hexagon.V6.vscattermhw.add.128B",
-  "llvm.hexagon.V6.vscattermhwq",
-  "llvm.hexagon.V6.vscattermhwq.128B",
-  "llvm.hexagon.V6.vscattermw",
-  "llvm.hexagon.V6.vscattermw.128B",
-  "llvm.hexagon.V6.vscattermw.add",
-  "llvm.hexagon.V6.vscattermw.add.128B",
-  "llvm.hexagon.V6.vscattermwq",
-  "llvm.hexagon.V6.vscattermwq.128B",
-  "llvm.hexagon.V6.vsh",
-  "llvm.hexagon.V6.vsh.128B",
-  "llvm.hexagon.V6.vshufeh",
-  "llvm.hexagon.V6.vshufeh.128B",
-  "llvm.hexagon.V6.vshuffb",
-  "llvm.hexagon.V6.vshuffb.128B",
-  "llvm.hexagon.V6.vshuffeb",
-  "llvm.hexagon.V6.vshuffeb.128B",
-  "llvm.hexagon.V6.vshuffh",
-  "llvm.hexagon.V6.vshuffh.128B",
-  "llvm.hexagon.V6.vshuffob",
-  "llvm.hexagon.V6.vshuffob.128B",
-  "llvm.hexagon.V6.vshuffvdd",
-  "llvm.hexagon.V6.vshuffvdd.128B",
-  "llvm.hexagon.V6.vshufoeb",
-  "llvm.hexagon.V6.vshufoeb.128B",
-  "llvm.hexagon.V6.vshufoeh",
-  "llvm.hexagon.V6.vshufoeh.128B",
-  "llvm.hexagon.V6.vshufoh",
-  "llvm.hexagon.V6.vshufoh.128B",
-  "llvm.hexagon.V6.vsubb",
-  "llvm.hexagon.V6.vsubb.128B",
-  "llvm.hexagon.V6.vsubb.dv",
-  "llvm.hexagon.V6.vsubb.dv.128B",
-  "llvm.hexagon.V6.vsubbnq",
-  "llvm.hexagon.V6.vsubbnq.128B",
-  "llvm.hexagon.V6.vsubbq",
-  "llvm.hexagon.V6.vsubbq.128B",
-  "llvm.hexagon.V6.vsubbsat",
-  "llvm.hexagon.V6.vsubbsat.128B",
-  "llvm.hexagon.V6.vsubbsat.dv",
-  "llvm.hexagon.V6.vsubbsat.dv.128B",
-  "llvm.hexagon.V6.vsubcarry",
-  "llvm.hexagon.V6.vsubcarry.128B",
-  "llvm.hexagon.V6.vsubh",
-  "llvm.hexagon.V6.vsubh.128B",
-  "llvm.hexagon.V6.vsubh.dv",
-  "llvm.hexagon.V6.vsubh.dv.128B",
-  "llvm.hexagon.V6.vsubhnq",
-  "llvm.hexagon.V6.vsubhnq.128B",
-  "llvm.hexagon.V6.vsubhq",
-  "llvm.hexagon.V6.vsubhq.128B",
-  "llvm.hexagon.V6.vsubhsat",
-  "llvm.hexagon.V6.vsubhsat.128B",
-  "llvm.hexagon.V6.vsubhsat.dv",
-  "llvm.hexagon.V6.vsubhsat.dv.128B",
-  "llvm.hexagon.V6.vsubhw",
-  "llvm.hexagon.V6.vsubhw.128B",
-  "llvm.hexagon.V6.vsububh",
-  "llvm.hexagon.V6.vsububh.128B",
-  "llvm.hexagon.V6.vsububsat",
-  "llvm.hexagon.V6.vsububsat.128B",
-  "llvm.hexagon.V6.vsububsat.dv",
-  "llvm.hexagon.V6.vsububsat.dv.128B",
-  "llvm.hexagon.V6.vsubububb.sat",
-  "llvm.hexagon.V6.vsubububb.sat.128B",
-  "llvm.hexagon.V6.vsubuhsat",
-  "llvm.hexagon.V6.vsubuhsat.128B",
-  "llvm.hexagon.V6.vsubuhsat.dv",
-  "llvm.hexagon.V6.vsubuhsat.dv.128B",
-  "llvm.hexagon.V6.vsubuhw",
-  "llvm.hexagon.V6.vsubuhw.128B",
-  "llvm.hexagon.V6.vsubuwsat",
-  "llvm.hexagon.V6.vsubuwsat.128B",
-  "llvm.hexagon.V6.vsubuwsat.dv",
-  "llvm.hexagon.V6.vsubuwsat.dv.128B",
-  "llvm.hexagon.V6.vsubw",
-  "llvm.hexagon.V6.vsubw.128B",
-  "llvm.hexagon.V6.vsubw.dv",
-  "llvm.hexagon.V6.vsubw.dv.128B",
-  "llvm.hexagon.V6.vsubwnq",
-  "llvm.hexagon.V6.vsubwnq.128B",
-  "llvm.hexagon.V6.vsubwq",
-  "llvm.hexagon.V6.vsubwq.128B",
-  "llvm.hexagon.V6.vsubwsat",
-  "llvm.hexagon.V6.vsubwsat.128B",
-  "llvm.hexagon.V6.vsubwsat.dv",
-  "llvm.hexagon.V6.vsubwsat.dv.128B",
-  "llvm.hexagon.V6.vswap",
-  "llvm.hexagon.V6.vswap.128B",
-  "llvm.hexagon.V6.vtmpyb",
-  "llvm.hexagon.V6.vtmpyb.128B",
-  "llvm.hexagon.V6.vtmpyb.acc",
-  "llvm.hexagon.V6.vtmpyb.acc.128B",
-  "llvm.hexagon.V6.vtmpybus",
-  "llvm.hexagon.V6.vtmpybus.128B",
-  "llvm.hexagon.V6.vtmpybus.acc",
-  "llvm.hexagon.V6.vtmpybus.acc.128B",
-  "llvm.hexagon.V6.vtmpyhb",
-  "llvm.hexagon.V6.vtmpyhb.128B",
-  "llvm.hexagon.V6.vtmpyhb.acc",
-  "llvm.hexagon.V6.vtmpyhb.acc.128B",
-  "llvm.hexagon.V6.vunpackb",
-  "llvm.hexagon.V6.vunpackb.128B",
-  "llvm.hexagon.V6.vunpackh",
-  "llvm.hexagon.V6.vunpackh.128B",
-  "llvm.hexagon.V6.vunpackob",
-  "llvm.hexagon.V6.vunpackob.128B",
-  "llvm.hexagon.V6.vunpackoh",
-  "llvm.hexagon.V6.vunpackoh.128B",
-  "llvm.hexagon.V6.vunpackub",
-  "llvm.hexagon.V6.vunpackub.128B",
-  "llvm.hexagon.V6.vunpackuh",
-  "llvm.hexagon.V6.vunpackuh.128B",
-  "llvm.hexagon.V6.vxor",
-  "llvm.hexagon.V6.vxor.128B",
-  "llvm.hexagon.V6.vzb",
-  "llvm.hexagon.V6.vzb.128B",
-  "llvm.hexagon.V6.vzh",
-  "llvm.hexagon.V6.vzh.128B",
-  "llvm.hexagon.Y2.dccleana",
-  "llvm.hexagon.Y2.dccleaninva",
-  "llvm.hexagon.Y2.dcinva",
-  "llvm.hexagon.Y2.dczeroa",
-  "llvm.hexagon.Y4.l2fetch",
-  "llvm.hexagon.Y5.l2fetch",
-  "llvm.hexagon.circ.ldb",
-  "llvm.hexagon.circ.ldd",
-  "llvm.hexagon.circ.ldh",
-  "llvm.hexagon.circ.ldub",
-  "llvm.hexagon.circ.lduh",
-  "llvm.hexagon.circ.ldw",
-  "llvm.hexagon.circ.stb",
-  "llvm.hexagon.circ.std",
-  "llvm.hexagon.circ.sth",
-  "llvm.hexagon.circ.sthhi",
-  "llvm.hexagon.circ.stw",
-  "llvm.hexagon.mm256i.vaddw",
-  "llvm.hexagon.prefetch",
-  "llvm.mips.absq.s.ph",
-  "llvm.mips.absq.s.qb",
-  "llvm.mips.absq.s.w",
-  "llvm.mips.add.a.b",
-  "llvm.mips.add.a.d",
-  "llvm.mips.add.a.h",
-  "llvm.mips.add.a.w",
-  "llvm.mips.addq.ph",
-  "llvm.mips.addq.s.ph",
-  "llvm.mips.addq.s.w",
-  "llvm.mips.addqh.ph",
-  "llvm.mips.addqh.r.ph",
-  "llvm.mips.addqh.r.w",
-  "llvm.mips.addqh.w",
-  "llvm.mips.adds.a.b",
-  "llvm.mips.adds.a.d",
-  "llvm.mips.adds.a.h",
-  "llvm.mips.adds.a.w",
-  "llvm.mips.adds.s.b",
-  "llvm.mips.adds.s.d",
-  "llvm.mips.adds.s.h",
-  "llvm.mips.adds.s.w",
-  "llvm.mips.adds.u.b",
-  "llvm.mips.adds.u.d",
-  "llvm.mips.adds.u.h",
-  "llvm.mips.adds.u.w",
-  "llvm.mips.addsc",
-  "llvm.mips.addu.ph",
-  "llvm.mips.addu.qb",
-  "llvm.mips.addu.s.ph",
-  "llvm.mips.addu.s.qb",
-  "llvm.mips.adduh.qb",
-  "llvm.mips.adduh.r.qb",
-  "llvm.mips.addv.b",
-  "llvm.mips.addv.d",
-  "llvm.mips.addv.h",
-  "llvm.mips.addv.w",
-  "llvm.mips.addvi.b",
-  "llvm.mips.addvi.d",
-  "llvm.mips.addvi.h",
-  "llvm.mips.addvi.w",
-  "llvm.mips.addwc",
-  "llvm.mips.and.v",
-  "llvm.mips.andi.b",
-  "llvm.mips.append",
-  "llvm.mips.asub.s.b",
-  "llvm.mips.asub.s.d",
-  "llvm.mips.asub.s.h",
-  "llvm.mips.asub.s.w",
-  "llvm.mips.asub.u.b",
-  "llvm.mips.asub.u.d",
-  "llvm.mips.asub.u.h",
-  "llvm.mips.asub.u.w",
-  "llvm.mips.ave.s.b",
-  "llvm.mips.ave.s.d",
-  "llvm.mips.ave.s.h",
-  "llvm.mips.ave.s.w",
-  "llvm.mips.ave.u.b",
-  "llvm.mips.ave.u.d",
-  "llvm.mips.ave.u.h",
-  "llvm.mips.ave.u.w",
-  "llvm.mips.aver.s.b",
-  "llvm.mips.aver.s.d",
-  "llvm.mips.aver.s.h",
-  "llvm.mips.aver.s.w",
-  "llvm.mips.aver.u.b",
-  "llvm.mips.aver.u.d",
-  "llvm.mips.aver.u.h",
-  "llvm.mips.aver.u.w",
-  "llvm.mips.balign",
-  "llvm.mips.bclr.b",
-  "llvm.mips.bclr.d",
-  "llvm.mips.bclr.h",
-  "llvm.mips.bclr.w",
-  "llvm.mips.bclri.b",
-  "llvm.mips.bclri.d",
-  "llvm.mips.bclri.h",
-  "llvm.mips.bclri.w",
-  "llvm.mips.binsl.b",
-  "llvm.mips.binsl.d",
-  "llvm.mips.binsl.h",
-  "llvm.mips.binsl.w",
-  "llvm.mips.binsli.b",
-  "llvm.mips.binsli.d",
-  "llvm.mips.binsli.h",
-  "llvm.mips.binsli.w",
-  "llvm.mips.binsr.b",
-  "llvm.mips.binsr.d",
-  "llvm.mips.binsr.h",
-  "llvm.mips.binsr.w",
-  "llvm.mips.binsri.b",
-  "llvm.mips.binsri.d",
-  "llvm.mips.binsri.h",
-  "llvm.mips.binsri.w",
-  "llvm.mips.bitrev",
-  "llvm.mips.bmnz.v",
-  "llvm.mips.bmnzi.b",
-  "llvm.mips.bmz.v",
-  "llvm.mips.bmzi.b",
-  "llvm.mips.bneg.b",
-  "llvm.mips.bneg.d",
-  "llvm.mips.bneg.h",
-  "llvm.mips.bneg.w",
-  "llvm.mips.bnegi.b",
-  "llvm.mips.bnegi.d",
-  "llvm.mips.bnegi.h",
-  "llvm.mips.bnegi.w",
-  "llvm.mips.bnz.b",
-  "llvm.mips.bnz.d",
-  "llvm.mips.bnz.h",
-  "llvm.mips.bnz.v",
-  "llvm.mips.bnz.w",
-  "llvm.mips.bposge32",
-  "llvm.mips.bsel.v",
-  "llvm.mips.bseli.b",
-  "llvm.mips.bset.b",
-  "llvm.mips.bset.d",
-  "llvm.mips.bset.h",
-  "llvm.mips.bset.w",
-  "llvm.mips.bseti.b",
-  "llvm.mips.bseti.d",
-  "llvm.mips.bseti.h",
-  "llvm.mips.bseti.w",
-  "llvm.mips.bz.b",
-  "llvm.mips.bz.d",
-  "llvm.mips.bz.h",
-  "llvm.mips.bz.v",
-  "llvm.mips.bz.w",
-  "llvm.mips.ceq.b",
-  "llvm.mips.ceq.d",
-  "llvm.mips.ceq.h",
-  "llvm.mips.ceq.w",
-  "llvm.mips.ceqi.b",
-  "llvm.mips.ceqi.d",
-  "llvm.mips.ceqi.h",
-  "llvm.mips.ceqi.w",
-  "llvm.mips.cfcmsa",
-  "llvm.mips.cle.s.b",
-  "llvm.mips.cle.s.d",
-  "llvm.mips.cle.s.h",
-  "llvm.mips.cle.s.w",
-  "llvm.mips.cle.u.b",
-  "llvm.mips.cle.u.d",
-  "llvm.mips.cle.u.h",
-  "llvm.mips.cle.u.w",
-  "llvm.mips.clei.s.b",
-  "llvm.mips.clei.s.d",
-  "llvm.mips.clei.s.h",
-  "llvm.mips.clei.s.w",
-  "llvm.mips.clei.u.b",
-  "llvm.mips.clei.u.d",
-  "llvm.mips.clei.u.h",
-  "llvm.mips.clei.u.w",
-  "llvm.mips.clt.s.b",
-  "llvm.mips.clt.s.d",
-  "llvm.mips.clt.s.h",
-  "llvm.mips.clt.s.w",
-  "llvm.mips.clt.u.b",
-  "llvm.mips.clt.u.d",
-  "llvm.mips.clt.u.h",
-  "llvm.mips.clt.u.w",
-  "llvm.mips.clti.s.b",
-  "llvm.mips.clti.s.d",
-  "llvm.mips.clti.s.h",
-  "llvm.mips.clti.s.w",
-  "llvm.mips.clti.u.b",
-  "llvm.mips.clti.u.d",
-  "llvm.mips.clti.u.h",
-  "llvm.mips.clti.u.w",
-  "llvm.mips.cmp.eq.ph",
-  "llvm.mips.cmp.le.ph",
-  "llvm.mips.cmp.lt.ph",
-  "llvm.mips.cmpgdu.eq.qb",
-  "llvm.mips.cmpgdu.le.qb",
-  "llvm.mips.cmpgdu.lt.qb",
-  "llvm.mips.cmpgu.eq.qb",
-  "llvm.mips.cmpgu.le.qb",
-  "llvm.mips.cmpgu.lt.qb",
-  "llvm.mips.cmpu.eq.qb",
-  "llvm.mips.cmpu.le.qb",
-  "llvm.mips.cmpu.lt.qb",
-  "llvm.mips.copy.s.b",
-  "llvm.mips.copy.s.d",
-  "llvm.mips.copy.s.h",
-  "llvm.mips.copy.s.w",
-  "llvm.mips.copy.u.b",
-  "llvm.mips.copy.u.d",
-  "llvm.mips.copy.u.h",
-  "llvm.mips.copy.u.w",
-  "llvm.mips.ctcmsa",
-  "llvm.mips.div.s.b",
-  "llvm.mips.div.s.d",
-  "llvm.mips.div.s.h",
-  "llvm.mips.div.s.w",
-  "llvm.mips.div.u.b",
-  "llvm.mips.div.u.d",
-  "llvm.mips.div.u.h",
-  "llvm.mips.div.u.w",
-  "llvm.mips.dlsa",
-  "llvm.mips.dotp.s.d",
-  "llvm.mips.dotp.s.h",
-  "llvm.mips.dotp.s.w",
-  "llvm.mips.dotp.u.d",
-  "llvm.mips.dotp.u.h",
-  "llvm.mips.dotp.u.w",
-  "llvm.mips.dpa.w.ph",
-  "llvm.mips.dpadd.s.d",
-  "llvm.mips.dpadd.s.h",
-  "llvm.mips.dpadd.s.w",
-  "llvm.mips.dpadd.u.d",
-  "llvm.mips.dpadd.u.h",
-  "llvm.mips.dpadd.u.w",
-  "llvm.mips.dpaq.s.w.ph",
-  "llvm.mips.dpaq.sa.l.w",
-  "llvm.mips.dpaqx.s.w.ph",
-  "llvm.mips.dpaqx.sa.w.ph",
-  "llvm.mips.dpau.h.qbl",
-  "llvm.mips.dpau.h.qbr",
-  "llvm.mips.dpax.w.ph",
-  "llvm.mips.dps.w.ph",
-  "llvm.mips.dpsq.s.w.ph",
-  "llvm.mips.dpsq.sa.l.w",
-  "llvm.mips.dpsqx.s.w.ph",
-  "llvm.mips.dpsqx.sa.w.ph",
-  "llvm.mips.dpsu.h.qbl",
-  "llvm.mips.dpsu.h.qbr",
-  "llvm.mips.dpsub.s.d",
-  "llvm.mips.dpsub.s.h",
-  "llvm.mips.dpsub.s.w",
-  "llvm.mips.dpsub.u.d",
-  "llvm.mips.dpsub.u.h",
-  "llvm.mips.dpsub.u.w",
-  "llvm.mips.dpsx.w.ph",
-  "llvm.mips.extp",
-  "llvm.mips.extpdp",
-  "llvm.mips.extr.r.w",
-  "llvm.mips.extr.rs.w",
-  "llvm.mips.extr.s.h",
-  "llvm.mips.extr.w",
-  "llvm.mips.fadd.d",
-  "llvm.mips.fadd.w",
-  "llvm.mips.fcaf.d",
-  "llvm.mips.fcaf.w",
-  "llvm.mips.fceq.d",
-  "llvm.mips.fceq.w",
-  "llvm.mips.fclass.d",
-  "llvm.mips.fclass.w",
-  "llvm.mips.fcle.d",
-  "llvm.mips.fcle.w",
-  "llvm.mips.fclt.d",
-  "llvm.mips.fclt.w",
-  "llvm.mips.fcne.d",
-  "llvm.mips.fcne.w",
-  "llvm.mips.fcor.d",
-  "llvm.mips.fcor.w",
-  "llvm.mips.fcueq.d",
-  "llvm.mips.fcueq.w",
-  "llvm.mips.fcule.d",
-  "llvm.mips.fcule.w",
-  "llvm.mips.fcult.d",
-  "llvm.mips.fcult.w",
-  "llvm.mips.fcun.d",
-  "llvm.mips.fcun.w",
-  "llvm.mips.fcune.d",
-  "llvm.mips.fcune.w",
-  "llvm.mips.fdiv.d",
-  "llvm.mips.fdiv.w",
-  "llvm.mips.fexdo.h",
-  "llvm.mips.fexdo.w",
-  "llvm.mips.fexp2.d",
-  "llvm.mips.fexp2.w",
-  "llvm.mips.fexupl.d",
-  "llvm.mips.fexupl.w",
-  "llvm.mips.fexupr.d",
-  "llvm.mips.fexupr.w",
-  "llvm.mips.ffint.s.d",
-  "llvm.mips.ffint.s.w",
-  "llvm.mips.ffint.u.d",
-  "llvm.mips.ffint.u.w",
-  "llvm.mips.ffql.d",
-  "llvm.mips.ffql.w",
-  "llvm.mips.ffqr.d",
-  "llvm.mips.ffqr.w",
-  "llvm.mips.fill.b",
-  "llvm.mips.fill.d",
-  "llvm.mips.fill.h",
-  "llvm.mips.fill.w",
-  "llvm.mips.flog2.d",
-  "llvm.mips.flog2.w",
-  "llvm.mips.fmadd.d",
-  "llvm.mips.fmadd.w",
-  "llvm.mips.fmax.a.d",
-  "llvm.mips.fmax.a.w",
-  "llvm.mips.fmax.d",
-  "llvm.mips.fmax.w",
-  "llvm.mips.fmin.a.d",
-  "llvm.mips.fmin.a.w",
-  "llvm.mips.fmin.d",
-  "llvm.mips.fmin.w",
-  "llvm.mips.fmsub.d",
-  "llvm.mips.fmsub.w",
-  "llvm.mips.fmul.d",
-  "llvm.mips.fmul.w",
-  "llvm.mips.frcp.d",
-  "llvm.mips.frcp.w",
-  "llvm.mips.frint.d",
-  "llvm.mips.frint.w",
-  "llvm.mips.frsqrt.d",
-  "llvm.mips.frsqrt.w",
-  "llvm.mips.fsaf.d",
-  "llvm.mips.fsaf.w",
-  "llvm.mips.fseq.d",
-  "llvm.mips.fseq.w",
-  "llvm.mips.fsle.d",
-  "llvm.mips.fsle.w",
-  "llvm.mips.fslt.d",
-  "llvm.mips.fslt.w",
-  "llvm.mips.fsne.d",
-  "llvm.mips.fsne.w",
-  "llvm.mips.fsor.d",
-  "llvm.mips.fsor.w",
-  "llvm.mips.fsqrt.d",
-  "llvm.mips.fsqrt.w",
-  "llvm.mips.fsub.d",
-  "llvm.mips.fsub.w",
-  "llvm.mips.fsueq.d",
-  "llvm.mips.fsueq.w",
-  "llvm.mips.fsule.d",
-  "llvm.mips.fsule.w",
-  "llvm.mips.fsult.d",
-  "llvm.mips.fsult.w",
-  "llvm.mips.fsun.d",
-  "llvm.mips.fsun.w",
-  "llvm.mips.fsune.d",
-  "llvm.mips.fsune.w",
-  "llvm.mips.ftint.s.d",
-  "llvm.mips.ftint.s.w",
-  "llvm.mips.ftint.u.d",
-  "llvm.mips.ftint.u.w",
-  "llvm.mips.ftq.h",
-  "llvm.mips.ftq.w",
-  "llvm.mips.ftrunc.s.d",
-  "llvm.mips.ftrunc.s.w",
-  "llvm.mips.ftrunc.u.d",
-  "llvm.mips.ftrunc.u.w",
-  "llvm.mips.hadd.s.d",
-  "llvm.mips.hadd.s.h",
-  "llvm.mips.hadd.s.w",
-  "llvm.mips.hadd.u.d",
-  "llvm.mips.hadd.u.h",
-  "llvm.mips.hadd.u.w",
-  "llvm.mips.hsub.s.d",
-  "llvm.mips.hsub.s.h",
-  "llvm.mips.hsub.s.w",
-  "llvm.mips.hsub.u.d",
-  "llvm.mips.hsub.u.h",
-  "llvm.mips.hsub.u.w",
-  "llvm.mips.ilvev.b",
-  "llvm.mips.ilvev.d",
-  "llvm.mips.ilvev.h",
-  "llvm.mips.ilvev.w",
-  "llvm.mips.ilvl.b",
-  "llvm.mips.ilvl.d",
-  "llvm.mips.ilvl.h",
-  "llvm.mips.ilvl.w",
-  "llvm.mips.ilvod.b",
-  "llvm.mips.ilvod.d",
-  "llvm.mips.ilvod.h",
-  "llvm.mips.ilvod.w",
-  "llvm.mips.ilvr.b",
-  "llvm.mips.ilvr.d",
-  "llvm.mips.ilvr.h",
-  "llvm.mips.ilvr.w",
-  "llvm.mips.insert.b",
-  "llvm.mips.insert.d",
-  "llvm.mips.insert.h",
-  "llvm.mips.insert.w",
-  "llvm.mips.insv",
-  "llvm.mips.insve.b",
-  "llvm.mips.insve.d",
-  "llvm.mips.insve.h",
-  "llvm.mips.insve.w",
-  "llvm.mips.lbux",
-  "llvm.mips.ld.b",
-  "llvm.mips.ld.d",
-  "llvm.mips.ld.h",
-  "llvm.mips.ld.w",
-  "llvm.mips.ldi.b",
-  "llvm.mips.ldi.d",
-  "llvm.mips.ldi.h",
-  "llvm.mips.ldi.w",
-  "llvm.mips.lhx",
-  "llvm.mips.lsa",
-  "llvm.mips.lwx",
-  "llvm.mips.madd",
-  "llvm.mips.madd.q.h",
-  "llvm.mips.madd.q.w",
-  "llvm.mips.maddr.q.h",
-  "llvm.mips.maddr.q.w",
-  "llvm.mips.maddu",
-  "llvm.mips.maddv.b",
-  "llvm.mips.maddv.d",
-  "llvm.mips.maddv.h",
-  "llvm.mips.maddv.w",
-  "llvm.mips.maq.s.w.phl",
-  "llvm.mips.maq.s.w.phr",
-  "llvm.mips.maq.sa.w.phl",
-  "llvm.mips.maq.sa.w.phr",
-  "llvm.mips.max.a.b",
-  "llvm.mips.max.a.d",
-  "llvm.mips.max.a.h",
-  "llvm.mips.max.a.w",
-  "llvm.mips.max.s.b",
-  "llvm.mips.max.s.d",
-  "llvm.mips.max.s.h",
-  "llvm.mips.max.s.w",
-  "llvm.mips.max.u.b",
-  "llvm.mips.max.u.d",
-  "llvm.mips.max.u.h",
-  "llvm.mips.max.u.w",
-  "llvm.mips.maxi.s.b",
-  "llvm.mips.maxi.s.d",
-  "llvm.mips.maxi.s.h",
-  "llvm.mips.maxi.s.w",
-  "llvm.mips.maxi.u.b",
-  "llvm.mips.maxi.u.d",
-  "llvm.mips.maxi.u.h",
-  "llvm.mips.maxi.u.w",
-  "llvm.mips.min.a.b",
-  "llvm.mips.min.a.d",
-  "llvm.mips.min.a.h",
-  "llvm.mips.min.a.w",
-  "llvm.mips.min.s.b",
-  "llvm.mips.min.s.d",
-  "llvm.mips.min.s.h",
-  "llvm.mips.min.s.w",
-  "llvm.mips.min.u.b",
-  "llvm.mips.min.u.d",
-  "llvm.mips.min.u.h",
-  "llvm.mips.min.u.w",
-  "llvm.mips.mini.s.b",
-  "llvm.mips.mini.s.d",
-  "llvm.mips.mini.s.h",
-  "llvm.mips.mini.s.w",
-  "llvm.mips.mini.u.b",
-  "llvm.mips.mini.u.d",
-  "llvm.mips.mini.u.h",
-  "llvm.mips.mini.u.w",
-  "llvm.mips.mod.s.b",
-  "llvm.mips.mod.s.d",
-  "llvm.mips.mod.s.h",
-  "llvm.mips.mod.s.w",
-  "llvm.mips.mod.u.b",
-  "llvm.mips.mod.u.d",
-  "llvm.mips.mod.u.h",
-  "llvm.mips.mod.u.w",
-  "llvm.mips.modsub",
-  "llvm.mips.move.v",
-  "llvm.mips.msub",
-  "llvm.mips.msub.q.h",
-  "llvm.mips.msub.q.w",
-  "llvm.mips.msubr.q.h",
-  "llvm.mips.msubr.q.w",
-  "llvm.mips.msubu",
-  "llvm.mips.msubv.b",
-  "llvm.mips.msubv.d",
-  "llvm.mips.msubv.h",
-  "llvm.mips.msubv.w",
-  "llvm.mips.mthlip",
-  "llvm.mips.mul.ph",
-  "llvm.mips.mul.q.h",
-  "llvm.mips.mul.q.w",
-  "llvm.mips.mul.s.ph",
-  "llvm.mips.muleq.s.w.phl",
-  "llvm.mips.muleq.s.w.phr",
-  "llvm.mips.muleu.s.ph.qbl",
-  "llvm.mips.muleu.s.ph.qbr",
-  "llvm.mips.mulq.rs.ph",
-  "llvm.mips.mulq.rs.w",
-  "llvm.mips.mulq.s.ph",
-  "llvm.mips.mulq.s.w",
-  "llvm.mips.mulr.q.h",
-  "llvm.mips.mulr.q.w",
-  "llvm.mips.mulsa.w.ph",
-  "llvm.mips.mulsaq.s.w.ph",
-  "llvm.mips.mult",
-  "llvm.mips.multu",
-  "llvm.mips.mulv.b",
-  "llvm.mips.mulv.d",
-  "llvm.mips.mulv.h",
-  "llvm.mips.mulv.w",
-  "llvm.mips.nloc.b",
-  "llvm.mips.nloc.d",
-  "llvm.mips.nloc.h",
-  "llvm.mips.nloc.w",
-  "llvm.mips.nlzc.b",
-  "llvm.mips.nlzc.d",
-  "llvm.mips.nlzc.h",
-  "llvm.mips.nlzc.w",
-  "llvm.mips.nor.v",
-  "llvm.mips.nori.b",
-  "llvm.mips.or.v",
-  "llvm.mips.ori.b",
-  "llvm.mips.packrl.ph",
-  "llvm.mips.pckev.b",
-  "llvm.mips.pckev.d",
-  "llvm.mips.pckev.h",
-  "llvm.mips.pckev.w",
-  "llvm.mips.pckod.b",
-  "llvm.mips.pckod.d",
-  "llvm.mips.pckod.h",
-  "llvm.mips.pckod.w",
-  "llvm.mips.pcnt.b",
-  "llvm.mips.pcnt.d",
-  "llvm.mips.pcnt.h",
-  "llvm.mips.pcnt.w",
-  "llvm.mips.pick.ph",
-  "llvm.mips.pick.qb",
-  "llvm.mips.preceq.w.phl",
-  "llvm.mips.preceq.w.phr",
-  "llvm.mips.precequ.ph.qbl",
-  "llvm.mips.precequ.ph.qbla",
-  "llvm.mips.precequ.ph.qbr",
-  "llvm.mips.precequ.ph.qbra",
-  "llvm.mips.preceu.ph.qbl",
-  "llvm.mips.preceu.ph.qbla",
-  "llvm.mips.preceu.ph.qbr",
-  "llvm.mips.preceu.ph.qbra",
-  "llvm.mips.precr.qb.ph",
-  "llvm.mips.precr.sra.ph.w",
-  "llvm.mips.precr.sra.r.ph.w",
-  "llvm.mips.precrq.ph.w",
-  "llvm.mips.precrq.qb.ph",
-  "llvm.mips.precrq.rs.ph.w",
-  "llvm.mips.precrqu.s.qb.ph",
-  "llvm.mips.prepend",
-  "llvm.mips.raddu.w.qb",
-  "llvm.mips.rddsp",
-  "llvm.mips.repl.ph",
-  "llvm.mips.repl.qb",
-  "llvm.mips.sat.s.b",
-  "llvm.mips.sat.s.d",
-  "llvm.mips.sat.s.h",
-  "llvm.mips.sat.s.w",
-  "llvm.mips.sat.u.b",
-  "llvm.mips.sat.u.d",
-  "llvm.mips.sat.u.h",
-  "llvm.mips.sat.u.w",
-  "llvm.mips.shf.b",
-  "llvm.mips.shf.h",
-  "llvm.mips.shf.w",
-  "llvm.mips.shilo",
-  "llvm.mips.shll.ph",
-  "llvm.mips.shll.qb",
-  "llvm.mips.shll.s.ph",
-  "llvm.mips.shll.s.w",
-  "llvm.mips.shra.ph",
-  "llvm.mips.shra.qb",
-  "llvm.mips.shra.r.ph",
-  "llvm.mips.shra.r.qb",
-  "llvm.mips.shra.r.w",
-  "llvm.mips.shrl.ph",
-  "llvm.mips.shrl.qb",
-  "llvm.mips.sld.b",
-  "llvm.mips.sld.d",
-  "llvm.mips.sld.h",
-  "llvm.mips.sld.w",
-  "llvm.mips.sldi.b",
-  "llvm.mips.sldi.d",
-  "llvm.mips.sldi.h",
-  "llvm.mips.sldi.w",
-  "llvm.mips.sll.b",
-  "llvm.mips.sll.d",
-  "llvm.mips.sll.h",
-  "llvm.mips.sll.w",
-  "llvm.mips.slli.b",
-  "llvm.mips.slli.d",
-  "llvm.mips.slli.h",
-  "llvm.mips.slli.w",
-  "llvm.mips.splat.b",
-  "llvm.mips.splat.d",
-  "llvm.mips.splat.h",
-  "llvm.mips.splat.w",
-  "llvm.mips.splati.b",
-  "llvm.mips.splati.d",
-  "llvm.mips.splati.h",
-  "llvm.mips.splati.w",
-  "llvm.mips.sra.b",
-  "llvm.mips.sra.d",
-  "llvm.mips.sra.h",
-  "llvm.mips.sra.w",
-  "llvm.mips.srai.b",
-  "llvm.mips.srai.d",
-  "llvm.mips.srai.h",
-  "llvm.mips.srai.w",
-  "llvm.mips.srar.b",
-  "llvm.mips.srar.d",
-  "llvm.mips.srar.h",
-  "llvm.mips.srar.w",
-  "llvm.mips.srari.b",
-  "llvm.mips.srari.d",
-  "llvm.mips.srari.h",
-  "llvm.mips.srari.w",
-  "llvm.mips.srl.b",
-  "llvm.mips.srl.d",
-  "llvm.mips.srl.h",
-  "llvm.mips.srl.w",
-  "llvm.mips.srli.b",
-  "llvm.mips.srli.d",
-  "llvm.mips.srli.h",
-  "llvm.mips.srli.w",
-  "llvm.mips.srlr.b",
-  "llvm.mips.srlr.d",
-  "llvm.mips.srlr.h",
-  "llvm.mips.srlr.w",
-  "llvm.mips.srlri.b",
-  "llvm.mips.srlri.d",
-  "llvm.mips.srlri.h",
-  "llvm.mips.srlri.w",
-  "llvm.mips.st.b",
-  "llvm.mips.st.d",
-  "llvm.mips.st.h",
-  "llvm.mips.st.w",
-  "llvm.mips.subq.ph",
-  "llvm.mips.subq.s.ph",
-  "llvm.mips.subq.s.w",
-  "llvm.mips.subqh.ph",
-  "llvm.mips.subqh.r.ph",
-  "llvm.mips.subqh.r.w",
-  "llvm.mips.subqh.w",
-  "llvm.mips.subs.s.b",
-  "llvm.mips.subs.s.d",
-  "llvm.mips.subs.s.h",
-  "llvm.mips.subs.s.w",
-  "llvm.mips.subs.u.b",
-  "llvm.mips.subs.u.d",
-  "llvm.mips.subs.u.h",
-  "llvm.mips.subs.u.w",
-  "llvm.mips.subsus.u.b",
-  "llvm.mips.subsus.u.d",
-  "llvm.mips.subsus.u.h",
-  "llvm.mips.subsus.u.w",
-  "llvm.mips.subsuu.s.b",
-  "llvm.mips.subsuu.s.d",
-  "llvm.mips.subsuu.s.h",
-  "llvm.mips.subsuu.s.w",
-  "llvm.mips.subu.ph",
-  "llvm.mips.subu.qb",
-  "llvm.mips.subu.s.ph",
-  "llvm.mips.subu.s.qb",
-  "llvm.mips.subuh.qb",
-  "llvm.mips.subuh.r.qb",
-  "llvm.mips.subv.b",
-  "llvm.mips.subv.d",
-  "llvm.mips.subv.h",
-  "llvm.mips.subv.w",
-  "llvm.mips.subvi.b",
-  "llvm.mips.subvi.d",
-  "llvm.mips.subvi.h",
-  "llvm.mips.subvi.w",
-  "llvm.mips.vshf.b",
-  "llvm.mips.vshf.d",
-  "llvm.mips.vshf.h",
-  "llvm.mips.vshf.w",
-  "llvm.mips.wrdsp",
-  "llvm.mips.xor.v",
-  "llvm.mips.xori.b",
-  "llvm.nvvm.add.rm.d",
-  "llvm.nvvm.add.rm.f",
-  "llvm.nvvm.add.rm.ftz.f",
-  "llvm.nvvm.add.rn.d",
-  "llvm.nvvm.add.rn.f",
-  "llvm.nvvm.add.rn.ftz.f",
-  "llvm.nvvm.add.rp.d",
-  "llvm.nvvm.add.rp.f",
-  "llvm.nvvm.add.rp.ftz.f",
-  "llvm.nvvm.add.rz.d",
-  "llvm.nvvm.add.rz.f",
-  "llvm.nvvm.add.rz.ftz.f",
-  "llvm.nvvm.atomic.add.gen.f.cta",
-  "llvm.nvvm.atomic.add.gen.f.sys",
-  "llvm.nvvm.atomic.add.gen.i.cta",
-  "llvm.nvvm.atomic.add.gen.i.sys",
-  "llvm.nvvm.atomic.and.gen.i.cta",
-  "llvm.nvvm.atomic.and.gen.i.sys",
-  "llvm.nvvm.atomic.cas.gen.i.cta",
-  "llvm.nvvm.atomic.cas.gen.i.sys",
-  "llvm.nvvm.atomic.dec.gen.i.cta",
-  "llvm.nvvm.atomic.dec.gen.i.sys",
-  "llvm.nvvm.atomic.exch.gen.i.cta",
-  "llvm.nvvm.atomic.exch.gen.i.sys",
-  "llvm.nvvm.atomic.inc.gen.i.cta",
-  "llvm.nvvm.atomic.inc.gen.i.sys",
-  "llvm.nvvm.atomic.load.add.f32",
-  "llvm.nvvm.atomic.load.add.f64",
-  "llvm.nvvm.atomic.load.dec.32",
-  "llvm.nvvm.atomic.load.inc.32",
-  "llvm.nvvm.atomic.max.gen.i.cta",
-  "llvm.nvvm.atomic.max.gen.i.sys",
-  "llvm.nvvm.atomic.min.gen.i.cta",
-  "llvm.nvvm.atomic.min.gen.i.sys",
-  "llvm.nvvm.atomic.or.gen.i.cta",
-  "llvm.nvvm.atomic.or.gen.i.sys",
-  "llvm.nvvm.atomic.xor.gen.i.cta",
-  "llvm.nvvm.atomic.xor.gen.i.sys",
-  "llvm.nvvm.bar.sync",
-  "llvm.nvvm.bar.warp.sync",
-  "llvm.nvvm.barrier",
-  "llvm.nvvm.barrier.n",
-  "llvm.nvvm.barrier.sync",
-  "llvm.nvvm.barrier.sync.cnt",
-  "llvm.nvvm.barrier0",
-  "llvm.nvvm.barrier0.and",
-  "llvm.nvvm.barrier0.or",
-  "llvm.nvvm.barrier0.popc",
-  "llvm.nvvm.bitcast.d2ll",
-  "llvm.nvvm.bitcast.f2i",
-  "llvm.nvvm.bitcast.i2f",
-  "llvm.nvvm.bitcast.ll2d",
-  "llvm.nvvm.ceil.d",
-  "llvm.nvvm.ceil.f",
-  "llvm.nvvm.ceil.ftz.f",
-  "llvm.nvvm.compiler.error",
-  "llvm.nvvm.compiler.warn",
-  "llvm.nvvm.cos.approx.f",
-  "llvm.nvvm.cos.approx.ftz.f",
-  "llvm.nvvm.d2f.rm",
-  "llvm.nvvm.d2f.rm.ftz",
-  "llvm.nvvm.d2f.rn",
-  "llvm.nvvm.d2f.rn.ftz",
-  "llvm.nvvm.d2f.rp",
-  "llvm.nvvm.d2f.rp.ftz",
-  "llvm.nvvm.d2f.rz",
-  "llvm.nvvm.d2f.rz.ftz",
-  "llvm.nvvm.d2i.hi",
-  "llvm.nvvm.d2i.lo",
-  "llvm.nvvm.d2i.rm",
-  "llvm.nvvm.d2i.rn",
-  "llvm.nvvm.d2i.rp",
-  "llvm.nvvm.d2i.rz",
-  "llvm.nvvm.d2ll.rm",
-  "llvm.nvvm.d2ll.rn",
-  "llvm.nvvm.d2ll.rp",
-  "llvm.nvvm.d2ll.rz",
-  "llvm.nvvm.d2ui.rm",
-  "llvm.nvvm.d2ui.rn",
-  "llvm.nvvm.d2ui.rp",
-  "llvm.nvvm.d2ui.rz",
-  "llvm.nvvm.d2ull.rm",
-  "llvm.nvvm.d2ull.rn",
-  "llvm.nvvm.d2ull.rp",
-  "llvm.nvvm.d2ull.rz",
-  "llvm.nvvm.div.approx.f",
-  "llvm.nvvm.div.approx.ftz.f",
-  "llvm.nvvm.div.rm.d",
-  "llvm.nvvm.div.rm.f",
-  "llvm.nvvm.div.rm.ftz.f",
-  "llvm.nvvm.div.rn.d",
-  "llvm.nvvm.div.rn.f",
-  "llvm.nvvm.div.rn.ftz.f",
-  "llvm.nvvm.div.rp.d",
-  "llvm.nvvm.div.rp.f",
-  "llvm.nvvm.div.rp.ftz.f",
-  "llvm.nvvm.div.rz.d",
-  "llvm.nvvm.div.rz.f",
-  "llvm.nvvm.div.rz.ftz.f",
-  "llvm.nvvm.ex2.approx.d",
-  "llvm.nvvm.ex2.approx.f",
-  "llvm.nvvm.ex2.approx.ftz.f",
-  "llvm.nvvm.f2h.rn",
-  "llvm.nvvm.f2h.rn.ftz",
-  "llvm.nvvm.f2i.rm",
-  "llvm.nvvm.f2i.rm.ftz",
-  "llvm.nvvm.f2i.rn",
-  "llvm.nvvm.f2i.rn.ftz",
-  "llvm.nvvm.f2i.rp",
-  "llvm.nvvm.f2i.rp.ftz",
-  "llvm.nvvm.f2i.rz",
-  "llvm.nvvm.f2i.rz.ftz",
-  "llvm.nvvm.f2ll.rm",
-  "llvm.nvvm.f2ll.rm.ftz",
-  "llvm.nvvm.f2ll.rn",
-  "llvm.nvvm.f2ll.rn.ftz",
-  "llvm.nvvm.f2ll.rp",
-  "llvm.nvvm.f2ll.rp.ftz",
-  "llvm.nvvm.f2ll.rz",
-  "llvm.nvvm.f2ll.rz.ftz",
-  "llvm.nvvm.f2ui.rm",
-  "llvm.nvvm.f2ui.rm.ftz",
-  "llvm.nvvm.f2ui.rn",
-  "llvm.nvvm.f2ui.rn.ftz",
-  "llvm.nvvm.f2ui.rp",
-  "llvm.nvvm.f2ui.rp.ftz",
-  "llvm.nvvm.f2ui.rz",
-  "llvm.nvvm.f2ui.rz.ftz",
-  "llvm.nvvm.f2ull.rm",
-  "llvm.nvvm.f2ull.rm.ftz",
-  "llvm.nvvm.f2ull.rn",
-  "llvm.nvvm.f2ull.rn.ftz",
-  "llvm.nvvm.f2ull.rp",
-  "llvm.nvvm.f2ull.rp.ftz",
-  "llvm.nvvm.f2ull.rz",
-  "llvm.nvvm.f2ull.rz.ftz",
-  "llvm.nvvm.fabs.d",
-  "llvm.nvvm.fabs.f",
-  "llvm.nvvm.fabs.ftz.f",
-  "llvm.nvvm.floor.d",
-  "llvm.nvvm.floor.f",
-  "llvm.nvvm.floor.ftz.f",
-  "llvm.nvvm.fma.rm.d",
-  "llvm.nvvm.fma.rm.f",
-  "llvm.nvvm.fma.rm.ftz.f",
-  "llvm.nvvm.fma.rn.d",
-  "llvm.nvvm.fma.rn.f",
-  "llvm.nvvm.fma.rn.ftz.f",
-  "llvm.nvvm.fma.rp.d",
-  "llvm.nvvm.fma.rp.f",
-  "llvm.nvvm.fma.rp.ftz.f",
-  "llvm.nvvm.fma.rz.d",
-  "llvm.nvvm.fma.rz.f",
-  "llvm.nvvm.fma.rz.ftz.f",
-  "llvm.nvvm.fmax.d",
-  "llvm.nvvm.fmax.f",
-  "llvm.nvvm.fmax.ftz.f",
-  "llvm.nvvm.fmin.d",
-  "llvm.nvvm.fmin.f",
-  "llvm.nvvm.fmin.ftz.f",
-  "llvm.nvvm.fns",
-  "llvm.nvvm.i2d.rm",
-  "llvm.nvvm.i2d.rn",
-  "llvm.nvvm.i2d.rp",
-  "llvm.nvvm.i2d.rz",
-  "llvm.nvvm.i2f.rm",
-  "llvm.nvvm.i2f.rn",
-  "llvm.nvvm.i2f.rp",
-  "llvm.nvvm.i2f.rz",
-  "llvm.nvvm.isspacep.const",
-  "llvm.nvvm.isspacep.global",
-  "llvm.nvvm.isspacep.local",
-  "llvm.nvvm.isspacep.shared",
-  "llvm.nvvm.istypep.sampler",
-  "llvm.nvvm.istypep.surface",
-  "llvm.nvvm.istypep.texture",
-  "llvm.nvvm.ldg.global.f",
-  "llvm.nvvm.ldg.global.i",
-  "llvm.nvvm.ldg.global.p",
-  "llvm.nvvm.ldu.global.f",
-  "llvm.nvvm.ldu.global.i",
-  "llvm.nvvm.ldu.global.p",
-  "llvm.nvvm.lg2.approx.d",
-  "llvm.nvvm.lg2.approx.f",
-  "llvm.nvvm.lg2.approx.ftz.f",
-  "llvm.nvvm.ll2d.rm",
-  "llvm.nvvm.ll2d.rn",
-  "llvm.nvvm.ll2d.rp",
-  "llvm.nvvm.ll2d.rz",
-  "llvm.nvvm.ll2f.rm",
-  "llvm.nvvm.ll2f.rn",
-  "llvm.nvvm.ll2f.rp",
-  "llvm.nvvm.ll2f.rz",
-  "llvm.nvvm.lohi.i2d",
-  "llvm.nvvm.match.all.sync.i32p",
-  "llvm.nvvm.match.all.sync.i64p",
-  "llvm.nvvm.match.any.sync.i32",
-  "llvm.nvvm.match.any.sync.i64",
-  "llvm.nvvm.membar.cta",
-  "llvm.nvvm.membar.gl",
-  "llvm.nvvm.membar.sys",
-  "llvm.nvvm.move.double",
-  "llvm.nvvm.move.float",
-  "llvm.nvvm.move.i16",
-  "llvm.nvvm.move.i32",
-  "llvm.nvvm.move.i64",
-  "llvm.nvvm.move.ptr",
-  "llvm.nvvm.mul.rm.d",
-  "llvm.nvvm.mul.rm.f",
-  "llvm.nvvm.mul.rm.ftz.f",
-  "llvm.nvvm.mul.rn.d",
-  "llvm.nvvm.mul.rn.f",
-  "llvm.nvvm.mul.rn.ftz.f",
-  "llvm.nvvm.mul.rp.d",
-  "llvm.nvvm.mul.rp.f",
-  "llvm.nvvm.mul.rp.ftz.f",
-  "llvm.nvvm.mul.rz.d",
-  "llvm.nvvm.mul.rz.f",
-  "llvm.nvvm.mul.rz.ftz.f",
-  "llvm.nvvm.mul24.i",
-  "llvm.nvvm.mul24.ui",
-  "llvm.nvvm.mulhi.i",
-  "llvm.nvvm.mulhi.ll",
-  "llvm.nvvm.mulhi.ui",
-  "llvm.nvvm.mulhi.ull",
-  "llvm.nvvm.prmt",
-  "llvm.nvvm.ptr.constant.to.gen",
-  "llvm.nvvm.ptr.gen.to.constant",
-  "llvm.nvvm.ptr.gen.to.global",
-  "llvm.nvvm.ptr.gen.to.local",
-  "llvm.nvvm.ptr.gen.to.param",
-  "llvm.nvvm.ptr.gen.to.shared",
-  "llvm.nvvm.ptr.global.to.gen",
-  "llvm.nvvm.ptr.local.to.gen",
-  "llvm.nvvm.ptr.shared.to.gen",
-  "llvm.nvvm.rcp.approx.ftz.d",
-  "llvm.nvvm.rcp.rm.d",
-  "llvm.nvvm.rcp.rm.f",
-  "llvm.nvvm.rcp.rm.ftz.f",
-  "llvm.nvvm.rcp.rn.d",
-  "llvm.nvvm.rcp.rn.f",
-  "llvm.nvvm.rcp.rn.ftz.f",
-  "llvm.nvvm.rcp.rp.d",
-  "llvm.nvvm.rcp.rp.f",
-  "llvm.nvvm.rcp.rp.ftz.f",
-  "llvm.nvvm.rcp.rz.d",
-  "llvm.nvvm.rcp.rz.f",
-  "llvm.nvvm.rcp.rz.ftz.f",
-  "llvm.nvvm.read.ptx.sreg.clock",
-  "llvm.nvvm.read.ptx.sreg.clock64",
-  "llvm.nvvm.read.ptx.sreg.ctaid.w",
-  "llvm.nvvm.read.ptx.sreg.ctaid.x",
-  "llvm.nvvm.read.ptx.sreg.ctaid.y",
-  "llvm.nvvm.read.ptx.sreg.ctaid.z",
-  "llvm.nvvm.read.ptx.sreg.envreg0",
-  "llvm.nvvm.read.ptx.sreg.envreg1",
-  "llvm.nvvm.read.ptx.sreg.envreg10",
-  "llvm.nvvm.read.ptx.sreg.envreg11",
-  "llvm.nvvm.read.ptx.sreg.envreg12",
-  "llvm.nvvm.read.ptx.sreg.envreg13",
-  "llvm.nvvm.read.ptx.sreg.envreg14",
-  "llvm.nvvm.read.ptx.sreg.envreg15",
-  "llvm.nvvm.read.ptx.sreg.envreg16",
-  "llvm.nvvm.read.ptx.sreg.envreg17",
-  "llvm.nvvm.read.ptx.sreg.envreg18",
-  "llvm.nvvm.read.ptx.sreg.envreg19",
-  "llvm.nvvm.read.ptx.sreg.envreg2",
-  "llvm.nvvm.read.ptx.sreg.envreg20",
-  "llvm.nvvm.read.ptx.sreg.envreg21",
-  "llvm.nvvm.read.ptx.sreg.envreg22",
-  "llvm.nvvm.read.ptx.sreg.envreg23",
-  "llvm.nvvm.read.ptx.sreg.envreg24",
-  "llvm.nvvm.read.ptx.sreg.envreg25",
-  "llvm.nvvm.read.ptx.sreg.envreg26",
-  "llvm.nvvm.read.ptx.sreg.envreg27",
-  "llvm.nvvm.read.ptx.sreg.envreg28",
-  "llvm.nvvm.read.ptx.sreg.envreg29",
-  "llvm.nvvm.read.ptx.sreg.envreg3",
-  "llvm.nvvm.read.ptx.sreg.envreg30",
-  "llvm.nvvm.read.ptx.sreg.envreg31",
-  "llvm.nvvm.read.ptx.sreg.envreg4",
-  "llvm.nvvm.read.ptx.sreg.envreg5",
-  "llvm.nvvm.read.ptx.sreg.envreg6",
-  "llvm.nvvm.read.ptx.sreg.envreg7",
-  "llvm.nvvm.read.ptx.sreg.envreg8",
-  "llvm.nvvm.read.ptx.sreg.envreg9",
-  "llvm.nvvm.read.ptx.sreg.gridid",
-  "llvm.nvvm.read.ptx.sreg.laneid",
-  "llvm.nvvm.read.ptx.sreg.lanemask.eq",
-  "llvm.nvvm.read.ptx.sreg.lanemask.ge",
-  "llvm.nvvm.read.ptx.sreg.lanemask.gt",
-  "llvm.nvvm.read.ptx.sreg.lanemask.le",
-  "llvm.nvvm.read.ptx.sreg.lanemask.lt",
-  "llvm.nvvm.read.ptx.sreg.nctaid.w",
-  "llvm.nvvm.read.ptx.sreg.nctaid.x",
-  "llvm.nvvm.read.ptx.sreg.nctaid.y",
-  "llvm.nvvm.read.ptx.sreg.nctaid.z",
-  "llvm.nvvm.read.ptx.sreg.nsmid",
-  "llvm.nvvm.read.ptx.sreg.ntid.w",
-  "llvm.nvvm.read.ptx.sreg.ntid.x",
-  "llvm.nvvm.read.ptx.sreg.ntid.y",
-  "llvm.nvvm.read.ptx.sreg.ntid.z",
-  "llvm.nvvm.read.ptx.sreg.nwarpid",
-  "llvm.nvvm.read.ptx.sreg.pm0",
-  "llvm.nvvm.read.ptx.sreg.pm1",
-  "llvm.nvvm.read.ptx.sreg.pm2",
-  "llvm.nvvm.read.ptx.sreg.pm3",
-  "llvm.nvvm.read.ptx.sreg.smid",
-  "llvm.nvvm.read.ptx.sreg.tid.w",
-  "llvm.nvvm.read.ptx.sreg.tid.x",
-  "llvm.nvvm.read.ptx.sreg.tid.y",
-  "llvm.nvvm.read.ptx.sreg.tid.z",
-  "llvm.nvvm.read.ptx.sreg.warpid",
-  "llvm.nvvm.read.ptx.sreg.warpsize",
-  "llvm.nvvm.reflect",
-  "llvm.nvvm.rotate.b32",
-  "llvm.nvvm.rotate.b64",
-  "llvm.nvvm.rotate.right.b64",
-  "llvm.nvvm.round.d",
-  "llvm.nvvm.round.f",
-  "llvm.nvvm.round.ftz.f",
-  "llvm.nvvm.rsqrt.approx.d",
-  "llvm.nvvm.rsqrt.approx.f",
-  "llvm.nvvm.rsqrt.approx.ftz.f",
-  "llvm.nvvm.sad.i",
-  "llvm.nvvm.sad.ui",
-  "llvm.nvvm.saturate.d",
-  "llvm.nvvm.saturate.f",
-  "llvm.nvvm.saturate.ftz.f",
-  "llvm.nvvm.shfl.bfly.f32",
-  "llvm.nvvm.shfl.bfly.i32",
-  "llvm.nvvm.shfl.down.f32",
-  "llvm.nvvm.shfl.down.i32",
-  "llvm.nvvm.shfl.idx.f32",
-  "llvm.nvvm.shfl.idx.i32",
-  "llvm.nvvm.shfl.sync.bfly.f32",
-  "llvm.nvvm.shfl.sync.bfly.i32",
-  "llvm.nvvm.shfl.sync.down.f32",
-  "llvm.nvvm.shfl.sync.down.i32",
-  "llvm.nvvm.shfl.sync.idx.f32",
-  "llvm.nvvm.shfl.sync.idx.i32",
-  "llvm.nvvm.shfl.sync.up.f32",
-  "llvm.nvvm.shfl.sync.up.i32",
-  "llvm.nvvm.shfl.up.f32",
-  "llvm.nvvm.shfl.up.i32",
-  "llvm.nvvm.sin.approx.f",
-  "llvm.nvvm.sin.approx.ftz.f",
-  "llvm.nvvm.sqrt.approx.f",
-  "llvm.nvvm.sqrt.approx.ftz.f",
-  "llvm.nvvm.sqrt.f",
-  "llvm.nvvm.sqrt.rm.d",
-  "llvm.nvvm.sqrt.rm.f",
-  "llvm.nvvm.sqrt.rm.ftz.f",
-  "llvm.nvvm.sqrt.rn.d",
-  "llvm.nvvm.sqrt.rn.f",
-  "llvm.nvvm.sqrt.rn.ftz.f",
-  "llvm.nvvm.sqrt.rp.d",
-  "llvm.nvvm.sqrt.rp.f",
-  "llvm.nvvm.sqrt.rp.ftz.f",
-  "llvm.nvvm.sqrt.rz.d",
-  "llvm.nvvm.sqrt.rz.f",
-  "llvm.nvvm.sqrt.rz.ftz.f",
-  "llvm.nvvm.suld.1d.array.i16.clamp",
-  "llvm.nvvm.suld.1d.array.i16.trap",
-  "llvm.nvvm.suld.1d.array.i16.zero",
-  "llvm.nvvm.suld.1d.array.i32.clamp",
-  "llvm.nvvm.suld.1d.array.i32.trap",
-  "llvm.nvvm.suld.1d.array.i32.zero",
-  "llvm.nvvm.suld.1d.array.i64.clamp",
-  "llvm.nvvm.suld.1d.array.i64.trap",
-  "llvm.nvvm.suld.1d.array.i64.zero",
-  "llvm.nvvm.suld.1d.array.i8.clamp",
-  "llvm.nvvm.suld.1d.array.i8.trap",
-  "llvm.nvvm.suld.1d.array.i8.zero",
-  "llvm.nvvm.suld.1d.array.v2i16.clamp",
-  "llvm.nvvm.suld.1d.array.v2i16.trap",
-  "llvm.nvvm.suld.1d.array.v2i16.zero",
-  "llvm.nvvm.suld.1d.array.v2i32.clamp",
-  "llvm.nvvm.suld.1d.array.v2i32.trap",
-  "llvm.nvvm.suld.1d.array.v2i32.zero",
-  "llvm.nvvm.suld.1d.array.v2i64.clamp",
-  "llvm.nvvm.suld.1d.array.v2i64.trap",
-  "llvm.nvvm.suld.1d.array.v2i64.zero",
-  "llvm.nvvm.suld.1d.array.v2i8.clamp",
-  "llvm.nvvm.suld.1d.array.v2i8.trap",
-  "llvm.nvvm.suld.1d.array.v2i8.zero",
-  "llvm.nvvm.suld.1d.array.v4i16.clamp",
-  "llvm.nvvm.suld.1d.array.v4i16.trap",
-  "llvm.nvvm.suld.1d.array.v4i16.zero",
-  "llvm.nvvm.suld.1d.array.v4i32.clamp",
-  "llvm.nvvm.suld.1d.array.v4i32.trap",
-  "llvm.nvvm.suld.1d.array.v4i32.zero",
-  "llvm.nvvm.suld.1d.array.v4i8.clamp",
-  "llvm.nvvm.suld.1d.array.v4i8.trap",
-  "llvm.nvvm.suld.1d.array.v4i8.zero",
-  "llvm.nvvm.suld.1d.i16.clamp",
-  "llvm.nvvm.suld.1d.i16.trap",
-  "llvm.nvvm.suld.1d.i16.zero",
-  "llvm.nvvm.suld.1d.i32.clamp",
-  "llvm.nvvm.suld.1d.i32.trap",
-  "llvm.nvvm.suld.1d.i32.zero",
-  "llvm.nvvm.suld.1d.i64.clamp",
-  "llvm.nvvm.suld.1d.i64.trap",
-  "llvm.nvvm.suld.1d.i64.zero",
-  "llvm.nvvm.suld.1d.i8.clamp",
-  "llvm.nvvm.suld.1d.i8.trap",
-  "llvm.nvvm.suld.1d.i8.zero",
-  "llvm.nvvm.suld.1d.v2i16.clamp",
-  "llvm.nvvm.suld.1d.v2i16.trap",
-  "llvm.nvvm.suld.1d.v2i16.zero",
-  "llvm.nvvm.suld.1d.v2i32.clamp",
-  "llvm.nvvm.suld.1d.v2i32.trap",
-  "llvm.nvvm.suld.1d.v2i32.zero",
-  "llvm.nvvm.suld.1d.v2i64.clamp",
-  "llvm.nvvm.suld.1d.v2i64.trap",
-  "llvm.nvvm.suld.1d.v2i64.zero",
-  "llvm.nvvm.suld.1d.v2i8.clamp",
-  "llvm.nvvm.suld.1d.v2i8.trap",
-  "llvm.nvvm.suld.1d.v2i8.zero",
-  "llvm.nvvm.suld.1d.v4i16.clamp",
-  "llvm.nvvm.suld.1d.v4i16.trap",
-  "llvm.nvvm.suld.1d.v4i16.zero",
-  "llvm.nvvm.suld.1d.v4i32.clamp",
-  "llvm.nvvm.suld.1d.v4i32.trap",
-  "llvm.nvvm.suld.1d.v4i32.zero",
-  "llvm.nvvm.suld.1d.v4i8.clamp",
-  "llvm.nvvm.suld.1d.v4i8.trap",
-  "llvm.nvvm.suld.1d.v4i8.zero",
-  "llvm.nvvm.suld.2d.array.i16.clamp",
-  "llvm.nvvm.suld.2d.array.i16.trap",
-  "llvm.nvvm.suld.2d.array.i16.zero",
-  "llvm.nvvm.suld.2d.array.i32.clamp",
-  "llvm.nvvm.suld.2d.array.i32.trap",
-  "llvm.nvvm.suld.2d.array.i32.zero",
-  "llvm.nvvm.suld.2d.array.i64.clamp",
-  "llvm.nvvm.suld.2d.array.i64.trap",
-  "llvm.nvvm.suld.2d.array.i64.zero",
-  "llvm.nvvm.suld.2d.array.i8.clamp",
-  "llvm.nvvm.suld.2d.array.i8.trap",
-  "llvm.nvvm.suld.2d.array.i8.zero",
-  "llvm.nvvm.suld.2d.array.v2i16.clamp",
-  "llvm.nvvm.suld.2d.array.v2i16.trap",
-  "llvm.nvvm.suld.2d.array.v2i16.zero",
-  "llvm.nvvm.suld.2d.array.v2i32.clamp",
-  "llvm.nvvm.suld.2d.array.v2i32.trap",
-  "llvm.nvvm.suld.2d.array.v2i32.zero",
-  "llvm.nvvm.suld.2d.array.v2i64.clamp",
-  "llvm.nvvm.suld.2d.array.v2i64.trap",
-  "llvm.nvvm.suld.2d.array.v2i64.zero",
-  "llvm.nvvm.suld.2d.array.v2i8.clamp",
-  "llvm.nvvm.suld.2d.array.v2i8.trap",
-  "llvm.nvvm.suld.2d.array.v2i8.zero",
-  "llvm.nvvm.suld.2d.array.v4i16.clamp",
-  "llvm.nvvm.suld.2d.array.v4i16.trap",
-  "llvm.nvvm.suld.2d.array.v4i16.zero",
-  "llvm.nvvm.suld.2d.array.v4i32.clamp",
-  "llvm.nvvm.suld.2d.array.v4i32.trap",
-  "llvm.nvvm.suld.2d.array.v4i32.zero",
-  "llvm.nvvm.suld.2d.array.v4i8.clamp",
-  "llvm.nvvm.suld.2d.array.v4i8.trap",
-  "llvm.nvvm.suld.2d.array.v4i8.zero",
-  "llvm.nvvm.suld.2d.i16.clamp",
-  "llvm.nvvm.suld.2d.i16.trap",
-  "llvm.nvvm.suld.2d.i16.zero",
-  "llvm.nvvm.suld.2d.i32.clamp",
-  "llvm.nvvm.suld.2d.i32.trap",
-  "llvm.nvvm.suld.2d.i32.zero",
-  "llvm.nvvm.suld.2d.i64.clamp",
-  "llvm.nvvm.suld.2d.i64.trap",
-  "llvm.nvvm.suld.2d.i64.zero",
-  "llvm.nvvm.suld.2d.i8.clamp",
-  "llvm.nvvm.suld.2d.i8.trap",
-  "llvm.nvvm.suld.2d.i8.zero",
-  "llvm.nvvm.suld.2d.v2i16.clamp",
-  "llvm.nvvm.suld.2d.v2i16.trap",
-  "llvm.nvvm.suld.2d.v2i16.zero",
-  "llvm.nvvm.suld.2d.v2i32.clamp",
-  "llvm.nvvm.suld.2d.v2i32.trap",
-  "llvm.nvvm.suld.2d.v2i32.zero",
-  "llvm.nvvm.suld.2d.v2i64.clamp",
-  "llvm.nvvm.suld.2d.v2i64.trap",
-  "llvm.nvvm.suld.2d.v2i64.zero",
-  "llvm.nvvm.suld.2d.v2i8.clamp",
-  "llvm.nvvm.suld.2d.v2i8.trap",
-  "llvm.nvvm.suld.2d.v2i8.zero",
-  "llvm.nvvm.suld.2d.v4i16.clamp",
-  "llvm.nvvm.suld.2d.v4i16.trap",
-  "llvm.nvvm.suld.2d.v4i16.zero",
-  "llvm.nvvm.suld.2d.v4i32.clamp",
-  "llvm.nvvm.suld.2d.v4i32.trap",
-  "llvm.nvvm.suld.2d.v4i32.zero",
-  "llvm.nvvm.suld.2d.v4i8.clamp",
-  "llvm.nvvm.suld.2d.v4i8.trap",
-  "llvm.nvvm.suld.2d.v4i8.zero",
-  "llvm.nvvm.suld.3d.i16.clamp",
-  "llvm.nvvm.suld.3d.i16.trap",
-  "llvm.nvvm.suld.3d.i16.zero",
-  "llvm.nvvm.suld.3d.i32.clamp",
-  "llvm.nvvm.suld.3d.i32.trap",
-  "llvm.nvvm.suld.3d.i32.zero",
-  "llvm.nvvm.suld.3d.i64.clamp",
-  "llvm.nvvm.suld.3d.i64.trap",
-  "llvm.nvvm.suld.3d.i64.zero",
-  "llvm.nvvm.suld.3d.i8.clamp",
-  "llvm.nvvm.suld.3d.i8.trap",
-  "llvm.nvvm.suld.3d.i8.zero",
-  "llvm.nvvm.suld.3d.v2i16.clamp",
-  "llvm.nvvm.suld.3d.v2i16.trap",
-  "llvm.nvvm.suld.3d.v2i16.zero",
-  "llvm.nvvm.suld.3d.v2i32.clamp",
-  "llvm.nvvm.suld.3d.v2i32.trap",
-  "llvm.nvvm.suld.3d.v2i32.zero",
-  "llvm.nvvm.suld.3d.v2i64.clamp",
-  "llvm.nvvm.suld.3d.v2i64.trap",
-  "llvm.nvvm.suld.3d.v2i64.zero",
-  "llvm.nvvm.suld.3d.v2i8.clamp",
-  "llvm.nvvm.suld.3d.v2i8.trap",
-  "llvm.nvvm.suld.3d.v2i8.zero",
-  "llvm.nvvm.suld.3d.v4i16.clamp",
-  "llvm.nvvm.suld.3d.v4i16.trap",
-  "llvm.nvvm.suld.3d.v4i16.zero",
-  "llvm.nvvm.suld.3d.v4i32.clamp",
-  "llvm.nvvm.suld.3d.v4i32.trap",
-  "llvm.nvvm.suld.3d.v4i32.zero",
-  "llvm.nvvm.suld.3d.v4i8.clamp",
-  "llvm.nvvm.suld.3d.v4i8.trap",
-  "llvm.nvvm.suld.3d.v4i8.zero",
-  "llvm.nvvm.suq.array.size",
-  "llvm.nvvm.suq.channel.data.type",
-  "llvm.nvvm.suq.channel.order",
-  "llvm.nvvm.suq.depth",
-  "llvm.nvvm.suq.height",
-  "llvm.nvvm.suq.width",
-  "llvm.nvvm.sust.b.1d.array.i16.clamp",
-  "llvm.nvvm.sust.b.1d.array.i16.trap",
-  "llvm.nvvm.sust.b.1d.array.i16.zero",
-  "llvm.nvvm.sust.b.1d.array.i32.clamp",
-  "llvm.nvvm.sust.b.1d.array.i32.trap",
-  "llvm.nvvm.sust.b.1d.array.i32.zero",
-  "llvm.nvvm.sust.b.1d.array.i64.clamp",
-  "llvm.nvvm.sust.b.1d.array.i64.trap",
-  "llvm.nvvm.sust.b.1d.array.i64.zero",
-  "llvm.nvvm.sust.b.1d.array.i8.clamp",
-  "llvm.nvvm.sust.b.1d.array.i8.trap",
-  "llvm.nvvm.sust.b.1d.array.i8.zero",
-  "llvm.nvvm.sust.b.1d.array.v2i16.clamp",
-  "llvm.nvvm.sust.b.1d.array.v2i16.trap",
-  "llvm.nvvm.sust.b.1d.array.v2i16.zero",
-  "llvm.nvvm.sust.b.1d.array.v2i32.clamp",
-  "llvm.nvvm.sust.b.1d.array.v2i32.trap",
-  "llvm.nvvm.sust.b.1d.array.v2i32.zero",
-  "llvm.nvvm.sust.b.1d.array.v2i64.clamp",
-  "llvm.nvvm.sust.b.1d.array.v2i64.trap",
-  "llvm.nvvm.sust.b.1d.array.v2i64.zero",
-  "llvm.nvvm.sust.b.1d.array.v2i8.clamp",
-  "llvm.nvvm.sust.b.1d.array.v2i8.trap",
-  "llvm.nvvm.sust.b.1d.array.v2i8.zero",
-  "llvm.nvvm.sust.b.1d.array.v4i16.clamp",
-  "llvm.nvvm.sust.b.1d.array.v4i16.trap",
-  "llvm.nvvm.sust.b.1d.array.v4i16.zero",
-  "llvm.nvvm.sust.b.1d.array.v4i32.clamp",
-  "llvm.nvvm.sust.b.1d.array.v4i32.trap",
-  "llvm.nvvm.sust.b.1d.array.v4i32.zero",
-  "llvm.nvvm.sust.b.1d.array.v4i8.clamp",
-  "llvm.nvvm.sust.b.1d.array.v4i8.trap",
-  "llvm.nvvm.sust.b.1d.array.v4i8.zero",
-  "llvm.nvvm.sust.b.1d.i16.clamp",
-  "llvm.nvvm.sust.b.1d.i16.trap",
-  "llvm.nvvm.sust.b.1d.i16.zero",
-  "llvm.nvvm.sust.b.1d.i32.clamp",
-  "llvm.nvvm.sust.b.1d.i32.trap",
-  "llvm.nvvm.sust.b.1d.i32.zero",
-  "llvm.nvvm.sust.b.1d.i64.clamp",
-  "llvm.nvvm.sust.b.1d.i64.trap",
-  "llvm.nvvm.sust.b.1d.i64.zero",
-  "llvm.nvvm.sust.b.1d.i8.clamp",
-  "llvm.nvvm.sust.b.1d.i8.trap",
-  "llvm.nvvm.sust.b.1d.i8.zero",
-  "llvm.nvvm.sust.b.1d.v2i16.clamp",
-  "llvm.nvvm.sust.b.1d.v2i16.trap",
-  "llvm.nvvm.sust.b.1d.v2i16.zero",
-  "llvm.nvvm.sust.b.1d.v2i32.clamp",
-  "llvm.nvvm.sust.b.1d.v2i32.trap",
-  "llvm.nvvm.sust.b.1d.v2i32.zero",
-  "llvm.nvvm.sust.b.1d.v2i64.clamp",
-  "llvm.nvvm.sust.b.1d.v2i64.trap",
-  "llvm.nvvm.sust.b.1d.v2i64.zero",
-  "llvm.nvvm.sust.b.1d.v2i8.clamp",
-  "llvm.nvvm.sust.b.1d.v2i8.trap",
-  "llvm.nvvm.sust.b.1d.v2i8.zero",
-  "llvm.nvvm.sust.b.1d.v4i16.clamp",
-  "llvm.nvvm.sust.b.1d.v4i16.trap",
-  "llvm.nvvm.sust.b.1d.v4i16.zero",
-  "llvm.nvvm.sust.b.1d.v4i32.clamp",
-  "llvm.nvvm.sust.b.1d.v4i32.trap",
-  "llvm.nvvm.sust.b.1d.v4i32.zero",
-  "llvm.nvvm.sust.b.1d.v4i8.clamp",
-  "llvm.nvvm.sust.b.1d.v4i8.trap",
-  "llvm.nvvm.sust.b.1d.v4i8.zero",
-  "llvm.nvvm.sust.b.2d.array.i16.clamp",
-  "llvm.nvvm.sust.b.2d.array.i16.trap",
-  "llvm.nvvm.sust.b.2d.array.i16.zero",
-  "llvm.nvvm.sust.b.2d.array.i32.clamp",
-  "llvm.nvvm.sust.b.2d.array.i32.trap",
-  "llvm.nvvm.sust.b.2d.array.i32.zero",
-  "llvm.nvvm.sust.b.2d.array.i64.clamp",
-  "llvm.nvvm.sust.b.2d.array.i64.trap",
-  "llvm.nvvm.sust.b.2d.array.i64.zero",
-  "llvm.nvvm.sust.b.2d.array.i8.clamp",
-  "llvm.nvvm.sust.b.2d.array.i8.trap",
-  "llvm.nvvm.sust.b.2d.array.i8.zero",
-  "llvm.nvvm.sust.b.2d.array.v2i16.clamp",
-  "llvm.nvvm.sust.b.2d.array.v2i16.trap",
-  "llvm.nvvm.sust.b.2d.array.v2i16.zero",
-  "llvm.nvvm.sust.b.2d.array.v2i32.clamp",
-  "llvm.nvvm.sust.b.2d.array.v2i32.trap",
-  "llvm.nvvm.sust.b.2d.array.v2i32.zero",
-  "llvm.nvvm.sust.b.2d.array.v2i64.clamp",
-  "llvm.nvvm.sust.b.2d.array.v2i64.trap",
-  "llvm.nvvm.sust.b.2d.array.v2i64.zero",
-  "llvm.nvvm.sust.b.2d.array.v2i8.clamp",
-  "llvm.nvvm.sust.b.2d.array.v2i8.trap",
-  "llvm.nvvm.sust.b.2d.array.v2i8.zero",
-  "llvm.nvvm.sust.b.2d.array.v4i16.clamp",
-  "llvm.nvvm.sust.b.2d.array.v4i16.trap",
-  "llvm.nvvm.sust.b.2d.array.v4i16.zero",
-  "llvm.nvvm.sust.b.2d.array.v4i32.clamp",
-  "llvm.nvvm.sust.b.2d.array.v4i32.trap",
-  "llvm.nvvm.sust.b.2d.array.v4i32.zero",
-  "llvm.nvvm.sust.b.2d.array.v4i8.clamp",
-  "llvm.nvvm.sust.b.2d.array.v4i8.trap",
-  "llvm.nvvm.sust.b.2d.array.v4i8.zero",
-  "llvm.nvvm.sust.b.2d.i16.clamp",
-  "llvm.nvvm.sust.b.2d.i16.trap",
-  "llvm.nvvm.sust.b.2d.i16.zero",
-  "llvm.nvvm.sust.b.2d.i32.clamp",
-  "llvm.nvvm.sust.b.2d.i32.trap",
-  "llvm.nvvm.sust.b.2d.i32.zero",
-  "llvm.nvvm.sust.b.2d.i64.clamp",
-  "llvm.nvvm.sust.b.2d.i64.trap",
-  "llvm.nvvm.sust.b.2d.i64.zero",
-  "llvm.nvvm.sust.b.2d.i8.clamp",
-  "llvm.nvvm.sust.b.2d.i8.trap",
-  "llvm.nvvm.sust.b.2d.i8.zero",
-  "llvm.nvvm.sust.b.2d.v2i16.clamp",
-  "llvm.nvvm.sust.b.2d.v2i16.trap",
-  "llvm.nvvm.sust.b.2d.v2i16.zero",
-  "llvm.nvvm.sust.b.2d.v2i32.clamp",
-  "llvm.nvvm.sust.b.2d.v2i32.trap",
-  "llvm.nvvm.sust.b.2d.v2i32.zero",
-  "llvm.nvvm.sust.b.2d.v2i64.clamp",
-  "llvm.nvvm.sust.b.2d.v2i64.trap",
-  "llvm.nvvm.sust.b.2d.v2i64.zero",
-  "llvm.nvvm.sust.b.2d.v2i8.clamp",
-  "llvm.nvvm.sust.b.2d.v2i8.trap",
-  "llvm.nvvm.sust.b.2d.v2i8.zero",
-  "llvm.nvvm.sust.b.2d.v4i16.clamp",
-  "llvm.nvvm.sust.b.2d.v4i16.trap",
-  "llvm.nvvm.sust.b.2d.v4i16.zero",
-  "llvm.nvvm.sust.b.2d.v4i32.clamp",
-  "llvm.nvvm.sust.b.2d.v4i32.trap",
-  "llvm.nvvm.sust.b.2d.v4i32.zero",
-  "llvm.nvvm.sust.b.2d.v4i8.clamp",
-  "llvm.nvvm.sust.b.2d.v4i8.trap",
-  "llvm.nvvm.sust.b.2d.v4i8.zero",
-  "llvm.nvvm.sust.b.3d.i16.clamp",
-  "llvm.nvvm.sust.b.3d.i16.trap",
-  "llvm.nvvm.sust.b.3d.i16.zero",
-  "llvm.nvvm.sust.b.3d.i32.clamp",
-  "llvm.nvvm.sust.b.3d.i32.trap",
-  "llvm.nvvm.sust.b.3d.i32.zero",
-  "llvm.nvvm.sust.b.3d.i64.clamp",
-  "llvm.nvvm.sust.b.3d.i64.trap",
-  "llvm.nvvm.sust.b.3d.i64.zero",
-  "llvm.nvvm.sust.b.3d.i8.clamp",
-  "llvm.nvvm.sust.b.3d.i8.trap",
-  "llvm.nvvm.sust.b.3d.i8.zero",
-  "llvm.nvvm.sust.b.3d.v2i16.clamp",
-  "llvm.nvvm.sust.b.3d.v2i16.trap",
-  "llvm.nvvm.sust.b.3d.v2i16.zero",
-  "llvm.nvvm.sust.b.3d.v2i32.clamp",
-  "llvm.nvvm.sust.b.3d.v2i32.trap",
-  "llvm.nvvm.sust.b.3d.v2i32.zero",
-  "llvm.nvvm.sust.b.3d.v2i64.clamp",
-  "llvm.nvvm.sust.b.3d.v2i64.trap",
-  "llvm.nvvm.sust.b.3d.v2i64.zero",
-  "llvm.nvvm.sust.b.3d.v2i8.clamp",
-  "llvm.nvvm.sust.b.3d.v2i8.trap",
-  "llvm.nvvm.sust.b.3d.v2i8.zero",
-  "llvm.nvvm.sust.b.3d.v4i16.clamp",
-  "llvm.nvvm.sust.b.3d.v4i16.trap",
-  "llvm.nvvm.sust.b.3d.v4i16.zero",
-  "llvm.nvvm.sust.b.3d.v4i32.clamp",
-  "llvm.nvvm.sust.b.3d.v4i32.trap",
-  "llvm.nvvm.sust.b.3d.v4i32.zero",
-  "llvm.nvvm.sust.b.3d.v4i8.clamp",
-  "llvm.nvvm.sust.b.3d.v4i8.trap",
-  "llvm.nvvm.sust.b.3d.v4i8.zero",
-  "llvm.nvvm.sust.p.1d.array.i16.trap",
-  "llvm.nvvm.sust.p.1d.array.i32.trap",
-  "llvm.nvvm.sust.p.1d.array.i8.trap",
-  "llvm.nvvm.sust.p.1d.array.v2i16.trap",
-  "llvm.nvvm.sust.p.1d.array.v2i32.trap",
-  "llvm.nvvm.sust.p.1d.array.v2i8.trap",
-  "llvm.nvvm.sust.p.1d.array.v4i16.trap",
-  "llvm.nvvm.sust.p.1d.array.v4i32.trap",
-  "llvm.nvvm.sust.p.1d.array.v4i8.trap",
-  "llvm.nvvm.sust.p.1d.i16.trap",
-  "llvm.nvvm.sust.p.1d.i32.trap",
-  "llvm.nvvm.sust.p.1d.i8.trap",
-  "llvm.nvvm.sust.p.1d.v2i16.trap",
-  "llvm.nvvm.sust.p.1d.v2i32.trap",
-  "llvm.nvvm.sust.p.1d.v2i8.trap",
-  "llvm.nvvm.sust.p.1d.v4i16.trap",
-  "llvm.nvvm.sust.p.1d.v4i32.trap",
-  "llvm.nvvm.sust.p.1d.v4i8.trap",
-  "llvm.nvvm.sust.p.2d.array.i16.trap",
-  "llvm.nvvm.sust.p.2d.array.i32.trap",
-  "llvm.nvvm.sust.p.2d.array.i8.trap",
-  "llvm.nvvm.sust.p.2d.array.v2i16.trap",
-  "llvm.nvvm.sust.p.2d.array.v2i32.trap",
-  "llvm.nvvm.sust.p.2d.array.v2i8.trap",
-  "llvm.nvvm.sust.p.2d.array.v4i16.trap",
-  "llvm.nvvm.sust.p.2d.array.v4i32.trap",
-  "llvm.nvvm.sust.p.2d.array.v4i8.trap",
-  "llvm.nvvm.sust.p.2d.i16.trap",
-  "llvm.nvvm.sust.p.2d.i32.trap",
-  "llvm.nvvm.sust.p.2d.i8.trap",
-  "llvm.nvvm.sust.p.2d.v2i16.trap",
-  "llvm.nvvm.sust.p.2d.v2i32.trap",
-  "llvm.nvvm.sust.p.2d.v2i8.trap",
-  "llvm.nvvm.sust.p.2d.v4i16.trap",
-  "llvm.nvvm.sust.p.2d.v4i32.trap",
-  "llvm.nvvm.sust.p.2d.v4i8.trap",
-  "llvm.nvvm.sust.p.3d.i16.trap",
-  "llvm.nvvm.sust.p.3d.i32.trap",
-  "llvm.nvvm.sust.p.3d.i8.trap",
-  "llvm.nvvm.sust.p.3d.v2i16.trap",
-  "llvm.nvvm.sust.p.3d.v2i32.trap",
-  "llvm.nvvm.sust.p.3d.v2i8.trap",
-  "llvm.nvvm.sust.p.3d.v4i16.trap",
-  "llvm.nvvm.sust.p.3d.v4i32.trap",
-  "llvm.nvvm.sust.p.3d.v4i8.trap",
-  "llvm.nvvm.swap.lo.hi.b64",
-  "llvm.nvvm.tex.1d.array.grad.v4f32.f32",
-  "llvm.nvvm.tex.1d.array.grad.v4s32.f32",
-  "llvm.nvvm.tex.1d.array.grad.v4u32.f32",
-  "llvm.nvvm.tex.1d.array.level.v4f32.f32",
-  "llvm.nvvm.tex.1d.array.level.v4s32.f32",
-  "llvm.nvvm.tex.1d.array.level.v4u32.f32",
-  "llvm.nvvm.tex.1d.array.v4f32.f32",
-  "llvm.nvvm.tex.1d.array.v4f32.s32",
-  "llvm.nvvm.tex.1d.array.v4s32.f32",
-  "llvm.nvvm.tex.1d.array.v4s32.s32",
-  "llvm.nvvm.tex.1d.array.v4u32.f32",
-  "llvm.nvvm.tex.1d.array.v4u32.s32",
-  "llvm.nvvm.tex.1d.grad.v4f32.f32",
-  "llvm.nvvm.tex.1d.grad.v4s32.f32",
-  "llvm.nvvm.tex.1d.grad.v4u32.f32",
-  "llvm.nvvm.tex.1d.level.v4f32.f32",
-  "llvm.nvvm.tex.1d.level.v4s32.f32",
-  "llvm.nvvm.tex.1d.level.v4u32.f32",
-  "llvm.nvvm.tex.1d.v4f32.f32",
-  "llvm.nvvm.tex.1d.v4f32.s32",
-  "llvm.nvvm.tex.1d.v4s32.f32",
-  "llvm.nvvm.tex.1d.v4s32.s32",
-  "llvm.nvvm.tex.1d.v4u32.f32",
-  "llvm.nvvm.tex.1d.v4u32.s32",
-  "llvm.nvvm.tex.2d.array.grad.v4f32.f32",
-  "llvm.nvvm.tex.2d.array.grad.v4s32.f32",
-  "llvm.nvvm.tex.2d.array.grad.v4u32.f32",
-  "llvm.nvvm.tex.2d.array.level.v4f32.f32",
-  "llvm.nvvm.tex.2d.array.level.v4s32.f32",
-  "llvm.nvvm.tex.2d.array.level.v4u32.f32",
-  "llvm.nvvm.tex.2d.array.v4f32.f32",
-  "llvm.nvvm.tex.2d.array.v4f32.s32",
-  "llvm.nvvm.tex.2d.array.v4s32.f32",
-  "llvm.nvvm.tex.2d.array.v4s32.s32",
-  "llvm.nvvm.tex.2d.array.v4u32.f32",
-  "llvm.nvvm.tex.2d.array.v4u32.s32",
-  "llvm.nvvm.tex.2d.grad.v4f32.f32",
-  "llvm.nvvm.tex.2d.grad.v4s32.f32",
-  "llvm.nvvm.tex.2d.grad.v4u32.f32",
-  "llvm.nvvm.tex.2d.level.v4f32.f32",
-  "llvm.nvvm.tex.2d.level.v4s32.f32",
-  "llvm.nvvm.tex.2d.level.v4u32.f32",
-  "llvm.nvvm.tex.2d.v4f32.f32",
-  "llvm.nvvm.tex.2d.v4f32.s32",
-  "llvm.nvvm.tex.2d.v4s32.f32",
-  "llvm.nvvm.tex.2d.v4s32.s32",
-  "llvm.nvvm.tex.2d.v4u32.f32",
-  "llvm.nvvm.tex.2d.v4u32.s32",
-  "llvm.nvvm.tex.3d.grad.v4f32.f32",
-  "llvm.nvvm.tex.3d.grad.v4s32.f32",
-  "llvm.nvvm.tex.3d.grad.v4u32.f32",
-  "llvm.nvvm.tex.3d.level.v4f32.f32",
-  "llvm.nvvm.tex.3d.level.v4s32.f32",
-  "llvm.nvvm.tex.3d.level.v4u32.f32",
-  "llvm.nvvm.tex.3d.v4f32.f32",
-  "llvm.nvvm.tex.3d.v4f32.s32",
-  "llvm.nvvm.tex.3d.v4s32.f32",
-  "llvm.nvvm.tex.3d.v4s32.s32",
-  "llvm.nvvm.tex.3d.v4u32.f32",
-  "llvm.nvvm.tex.3d.v4u32.s32",
-  "llvm.nvvm.tex.cube.array.level.v4f32.f32",
-  "llvm.nvvm.tex.cube.array.level.v4s32.f32",
-  "llvm.nvvm.tex.cube.array.level.v4u32.f32",
-  "llvm.nvvm.tex.cube.array.v4f32.f32",
-  "llvm.nvvm.tex.cube.array.v4s32.f32",
-  "llvm.nvvm.tex.cube.array.v4u32.f32",
-  "llvm.nvvm.tex.cube.level.v4f32.f32",
-  "llvm.nvvm.tex.cube.level.v4s32.f32",
-  "llvm.nvvm.tex.cube.level.v4u32.f32",
-  "llvm.nvvm.tex.cube.v4f32.f32",
-  "llvm.nvvm.tex.cube.v4s32.f32",
-  "llvm.nvvm.tex.cube.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.array.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.array.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.array.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.array.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.array.v4f32.s32",
-  "llvm.nvvm.tex.unified.1d.array.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.array.v4s32.s32",
-  "llvm.nvvm.tex.unified.1d.array.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.array.v4u32.s32",
-  "llvm.nvvm.tex.unified.1d.grad.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.grad.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.grad.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.v4f32.f32",
-  "llvm.nvvm.tex.unified.1d.v4f32.s32",
-  "llvm.nvvm.tex.unified.1d.v4s32.f32",
-  "llvm.nvvm.tex.unified.1d.v4s32.s32",
-  "llvm.nvvm.tex.unified.1d.v4u32.f32",
-  "llvm.nvvm.tex.unified.1d.v4u32.s32",
-  "llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.array.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.array.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.array.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.array.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.array.v4f32.s32",
-  "llvm.nvvm.tex.unified.2d.array.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.array.v4s32.s32",
-  "llvm.nvvm.tex.unified.2d.array.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.array.v4u32.s32",
-  "llvm.nvvm.tex.unified.2d.grad.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.grad.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.grad.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.v4f32.f32",
-  "llvm.nvvm.tex.unified.2d.v4f32.s32",
-  "llvm.nvvm.tex.unified.2d.v4s32.f32",
-  "llvm.nvvm.tex.unified.2d.v4s32.s32",
-  "llvm.nvvm.tex.unified.2d.v4u32.f32",
-  "llvm.nvvm.tex.unified.2d.v4u32.s32",
-  "llvm.nvvm.tex.unified.3d.grad.v4f32.f32",
-  "llvm.nvvm.tex.unified.3d.grad.v4s32.f32",
-  "llvm.nvvm.tex.unified.3d.grad.v4u32.f32",
-  "llvm.nvvm.tex.unified.3d.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.3d.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.3d.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.3d.v4f32.f32",
-  "llvm.nvvm.tex.unified.3d.v4f32.s32",
-  "llvm.nvvm.tex.unified.3d.v4s32.f32",
-  "llvm.nvvm.tex.unified.3d.v4s32.s32",
-  "llvm.nvvm.tex.unified.3d.v4u32.f32",
-  "llvm.nvvm.tex.unified.3d.v4u32.s32",
-  "llvm.nvvm.tex.unified.cube.array.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.cube.array.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.cube.array.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.cube.array.v4f32.f32",
-  "llvm.nvvm.tex.unified.cube.array.v4s32.f32",
-  "llvm.nvvm.tex.unified.cube.array.v4u32.f32",
-  "llvm.nvvm.tex.unified.cube.level.v4f32.f32",
-  "llvm.nvvm.tex.unified.cube.level.v4s32.f32",
-  "llvm.nvvm.tex.unified.cube.level.v4u32.f32",
-  "llvm.nvvm.tex.unified.cube.v4f32.f32",
-  "llvm.nvvm.tex.unified.cube.v4s32.f32",
-  "llvm.nvvm.tex.unified.cube.v4u32.f32",
-  "llvm.nvvm.texsurf.handle",
-  "llvm.nvvm.texsurf.handle.internal",
-  "llvm.nvvm.tld4.a.2d.v4f32.f32",
-  "llvm.nvvm.tld4.a.2d.v4s32.f32",
-  "llvm.nvvm.tld4.a.2d.v4u32.f32",
-  "llvm.nvvm.tld4.b.2d.v4f32.f32",
-  "llvm.nvvm.tld4.b.2d.v4s32.f32",
-  "llvm.nvvm.tld4.b.2d.v4u32.f32",
-  "llvm.nvvm.tld4.g.2d.v4f32.f32",
-  "llvm.nvvm.tld4.g.2d.v4s32.f32",
-  "llvm.nvvm.tld4.g.2d.v4u32.f32",
-  "llvm.nvvm.tld4.r.2d.v4f32.f32",
-  "llvm.nvvm.tld4.r.2d.v4s32.f32",
-  "llvm.nvvm.tld4.r.2d.v4u32.f32",
-  "llvm.nvvm.tld4.unified.a.2d.v4f32.f32",
-  "llvm.nvvm.tld4.unified.a.2d.v4s32.f32",
-  "llvm.nvvm.tld4.unified.a.2d.v4u32.f32",
-  "llvm.nvvm.tld4.unified.b.2d.v4f32.f32",
-  "llvm.nvvm.tld4.unified.b.2d.v4s32.f32",
-  "llvm.nvvm.tld4.unified.b.2d.v4u32.f32",
-  "llvm.nvvm.tld4.unified.g.2d.v4f32.f32",
-  "llvm.nvvm.tld4.unified.g.2d.v4s32.f32",
-  "llvm.nvvm.tld4.unified.g.2d.v4u32.f32",
-  "llvm.nvvm.tld4.unified.r.2d.v4f32.f32",
-  "llvm.nvvm.tld4.unified.r.2d.v4s32.f32",
-  "llvm.nvvm.tld4.unified.r.2d.v4u32.f32",
-  "llvm.nvvm.trunc.d",
-  "llvm.nvvm.trunc.f",
-  "llvm.nvvm.trunc.ftz.f",
-  "llvm.nvvm.txq.array.size",
-  "llvm.nvvm.txq.channel.data.type",
-  "llvm.nvvm.txq.channel.order",
-  "llvm.nvvm.txq.depth",
-  "llvm.nvvm.txq.height",
-  "llvm.nvvm.txq.num.mipmap.levels",
-  "llvm.nvvm.txq.num.samples",
-  "llvm.nvvm.txq.width",
-  "llvm.nvvm.ui2d.rm",
-  "llvm.nvvm.ui2d.rn",
-  "llvm.nvvm.ui2d.rp",
-  "llvm.nvvm.ui2d.rz",
-  "llvm.nvvm.ui2f.rm",
-  "llvm.nvvm.ui2f.rn",
-  "llvm.nvvm.ui2f.rp",
-  "llvm.nvvm.ui2f.rz",
-  "llvm.nvvm.ull2d.rm",
-  "llvm.nvvm.ull2d.rn",
-  "llvm.nvvm.ull2d.rp",
-  "llvm.nvvm.ull2d.rz",
-  "llvm.nvvm.ull2f.rm",
-  "llvm.nvvm.ull2f.rn",
-  "llvm.nvvm.ull2f.rp",
-  "llvm.nvvm.ull2f.rz",
-  "llvm.nvvm.vote.all",
-  "llvm.nvvm.vote.all.sync",
-  "llvm.nvvm.vote.any",
-  "llvm.nvvm.vote.any.sync",
-  "llvm.nvvm.vote.ballot",
-  "llvm.nvvm.vote.ballot.sync",
-  "llvm.nvvm.vote.uni",
-  "llvm.nvvm.vote.uni.sync",
-  "llvm.nvvm.wmma.m16n16k16.load.a.col.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.a.row.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.b.col.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.b.row.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.c.col.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.c.col.f32",
-  "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32",
-  "llvm.nvvm.wmma.m16n16k16.load.c.row.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.c.row.f32",
-  "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32",
-  "llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite",
-  "llvm.nvvm.wmma.m16n16k16.store.d.col.f16",
-  "llvm.nvvm.wmma.m16n16k16.store.d.col.f32",
-  "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32",
-  "llvm.nvvm.wmma.m16n16k16.store.d.row.f16",
-  "llvm.nvvm.wmma.m16n16k16.store.d.row.f32",
-  "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16",
-  "llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32",
-  "llvm.ppc.altivec.crypto.vcipher",
-  "llvm.ppc.altivec.crypto.vcipherlast",
-  "llvm.ppc.altivec.crypto.vncipher",
-  "llvm.ppc.altivec.crypto.vncipherlast",
-  "llvm.ppc.altivec.crypto.vpermxor",
-  "llvm.ppc.altivec.crypto.vpmsumb",
-  "llvm.ppc.altivec.crypto.vpmsumd",
-  "llvm.ppc.altivec.crypto.vpmsumh",
-  "llvm.ppc.altivec.crypto.vpmsumw",
-  "llvm.ppc.altivec.crypto.vsbox",
-  "llvm.ppc.altivec.crypto.vshasigmad",
-  "llvm.ppc.altivec.crypto.vshasigmaw",
-  "llvm.ppc.altivec.dss",
-  "llvm.ppc.altivec.dssall",
-  "llvm.ppc.altivec.dst",
-  "llvm.ppc.altivec.dstst",
-  "llvm.ppc.altivec.dststt",
-  "llvm.ppc.altivec.dstt",
-  "llvm.ppc.altivec.lvebx",
-  "llvm.ppc.altivec.lvehx",
-  "llvm.ppc.altivec.lvewx",
-  "llvm.ppc.altivec.lvsl",
-  "llvm.ppc.altivec.lvsr",
-  "llvm.ppc.altivec.lvx",
-  "llvm.ppc.altivec.lvxl",
-  "llvm.ppc.altivec.mfvscr",
-  "llvm.ppc.altivec.mtvscr",
-  "llvm.ppc.altivec.stvebx",
-  "llvm.ppc.altivec.stvehx",
-  "llvm.ppc.altivec.stvewx",
-  "llvm.ppc.altivec.stvx",
-  "llvm.ppc.altivec.stvxl",
-  "llvm.ppc.altivec.vabsdub",
-  "llvm.ppc.altivec.vabsduh",
-  "llvm.ppc.altivec.vabsduw",
-  "llvm.ppc.altivec.vaddcuq",
-  "llvm.ppc.altivec.vaddcuw",
-  "llvm.ppc.altivec.vaddecuq",
-  "llvm.ppc.altivec.vaddeuqm",
-  "llvm.ppc.altivec.vaddsbs",
-  "llvm.ppc.altivec.vaddshs",
-  "llvm.ppc.altivec.vaddsws",
-  "llvm.ppc.altivec.vaddubs",
-  "llvm.ppc.altivec.vadduhs",
-  "llvm.ppc.altivec.vadduws",
-  "llvm.ppc.altivec.vavgsb",
-  "llvm.ppc.altivec.vavgsh",
-  "llvm.ppc.altivec.vavgsw",
-  "llvm.ppc.altivec.vavgub",
-  "llvm.ppc.altivec.vavguh",
-  "llvm.ppc.altivec.vavguw",
-  "llvm.ppc.altivec.vbpermq",
-  "llvm.ppc.altivec.vcfsx",
-  "llvm.ppc.altivec.vcfux",
-  "llvm.ppc.altivec.vclzlsbb",
-  "llvm.ppc.altivec.vcmpbfp",
-  "llvm.ppc.altivec.vcmpbfp.p",
-  "llvm.ppc.altivec.vcmpeqfp",
-  "llvm.ppc.altivec.vcmpeqfp.p",
-  "llvm.ppc.altivec.vcmpequb",
-  "llvm.ppc.altivec.vcmpequb.p",
-  "llvm.ppc.altivec.vcmpequd",
-  "llvm.ppc.altivec.vcmpequd.p",
-  "llvm.ppc.altivec.vcmpequh",
-  "llvm.ppc.altivec.vcmpequh.p",
-  "llvm.ppc.altivec.vcmpequw",
-  "llvm.ppc.altivec.vcmpequw.p",
-  "llvm.ppc.altivec.vcmpgefp",
-  "llvm.ppc.altivec.vcmpgefp.p",
-  "llvm.ppc.altivec.vcmpgtfp",
-  "llvm.ppc.altivec.vcmpgtfp.p",
-  "llvm.ppc.altivec.vcmpgtsb",
-  "llvm.ppc.altivec.vcmpgtsb.p",
-  "llvm.ppc.altivec.vcmpgtsd",
-  "llvm.ppc.altivec.vcmpgtsd.p",
-  "llvm.ppc.altivec.vcmpgtsh",
-  "llvm.ppc.altivec.vcmpgtsh.p",
-  "llvm.ppc.altivec.vcmpgtsw",
-  "llvm.ppc.altivec.vcmpgtsw.p",
-  "llvm.ppc.altivec.vcmpgtub",
-  "llvm.ppc.altivec.vcmpgtub.p",
-  "llvm.ppc.altivec.vcmpgtud",
-  "llvm.ppc.altivec.vcmpgtud.p",
-  "llvm.ppc.altivec.vcmpgtuh",
-  "llvm.ppc.altivec.vcmpgtuh.p",
-  "llvm.ppc.altivec.vcmpgtuw",
-  "llvm.ppc.altivec.vcmpgtuw.p",
-  "llvm.ppc.altivec.vcmpneb",
-  "llvm.ppc.altivec.vcmpneb.p",
-  "llvm.ppc.altivec.vcmpneh",
-  "llvm.ppc.altivec.vcmpneh.p",
-  "llvm.ppc.altivec.vcmpnew",
-  "llvm.ppc.altivec.vcmpnew.p",
-  "llvm.ppc.altivec.vcmpnezb",
-  "llvm.ppc.altivec.vcmpnezb.p",
-  "llvm.ppc.altivec.vcmpnezh",
-  "llvm.ppc.altivec.vcmpnezh.p",
-  "llvm.ppc.altivec.vcmpnezw",
-  "llvm.ppc.altivec.vcmpnezw.p",
-  "llvm.ppc.altivec.vctsxs",
-  "llvm.ppc.altivec.vctuxs",
-  "llvm.ppc.altivec.vctzlsbb",
-  "llvm.ppc.altivec.vexptefp",
-  "llvm.ppc.altivec.vgbbd",
-  "llvm.ppc.altivec.vlogefp",
-  "llvm.ppc.altivec.vmaddfp",
-  "llvm.ppc.altivec.vmaxfp",
-  "llvm.ppc.altivec.vmaxsb",
-  "llvm.ppc.altivec.vmaxsd",
-  "llvm.ppc.altivec.vmaxsh",
-  "llvm.ppc.altivec.vmaxsw",
-  "llvm.ppc.altivec.vmaxub",
-  "llvm.ppc.altivec.vmaxud",
-  "llvm.ppc.altivec.vmaxuh",
-  "llvm.ppc.altivec.vmaxuw",
-  "llvm.ppc.altivec.vmhaddshs",
-  "llvm.ppc.altivec.vmhraddshs",
-  "llvm.ppc.altivec.vminfp",
-  "llvm.ppc.altivec.vminsb",
-  "llvm.ppc.altivec.vminsd",
-  "llvm.ppc.altivec.vminsh",
-  "llvm.ppc.altivec.vminsw",
-  "llvm.ppc.altivec.vminub",
-  "llvm.ppc.altivec.vminud",
-  "llvm.ppc.altivec.vminuh",
-  "llvm.ppc.altivec.vminuw",
-  "llvm.ppc.altivec.vmladduhm",
-  "llvm.ppc.altivec.vmsummbm",
-  "llvm.ppc.altivec.vmsumshm",
-  "llvm.ppc.altivec.vmsumshs",
-  "llvm.ppc.altivec.vmsumubm",
-  "llvm.ppc.altivec.vmsumuhm",
-  "llvm.ppc.altivec.vmsumuhs",
-  "llvm.ppc.altivec.vmulesb",
-  "llvm.ppc.altivec.vmulesh",
-  "llvm.ppc.altivec.vmulesw",
-  "llvm.ppc.altivec.vmuleub",
-  "llvm.ppc.altivec.vmuleuh",
-  "llvm.ppc.altivec.vmuleuw",
-  "llvm.ppc.altivec.vmulosb",
-  "llvm.ppc.altivec.vmulosh",
-  "llvm.ppc.altivec.vmulosw",
-  "llvm.ppc.altivec.vmuloub",
-  "llvm.ppc.altivec.vmulouh",
-  "llvm.ppc.altivec.vmulouw",
-  "llvm.ppc.altivec.vnmsubfp",
-  "llvm.ppc.altivec.vperm",
-  "llvm.ppc.altivec.vpkpx",
-  "llvm.ppc.altivec.vpksdss",
-  "llvm.ppc.altivec.vpksdus",
-  "llvm.ppc.altivec.vpkshss",
-  "llvm.ppc.altivec.vpkshus",
-  "llvm.ppc.altivec.vpkswss",
-  "llvm.ppc.altivec.vpkswus",
-  "llvm.ppc.altivec.vpkudus",
-  "llvm.ppc.altivec.vpkuhus",
-  "llvm.ppc.altivec.vpkuwus",
-  "llvm.ppc.altivec.vprtybd",
-  "llvm.ppc.altivec.vprtybq",
-  "llvm.ppc.altivec.vprtybw",
-  "llvm.ppc.altivec.vrefp",
-  "llvm.ppc.altivec.vrfim",
-  "llvm.ppc.altivec.vrfin",
-  "llvm.ppc.altivec.vrfip",
-  "llvm.ppc.altivec.vrfiz",
-  "llvm.ppc.altivec.vrlb",
-  "llvm.ppc.altivec.vrld",
-  "llvm.ppc.altivec.vrldmi",
-  "llvm.ppc.altivec.vrldnm",
-  "llvm.ppc.altivec.vrlh",
-  "llvm.ppc.altivec.vrlw",
-  "llvm.ppc.altivec.vrlwmi",
-  "llvm.ppc.altivec.vrlwnm",
-  "llvm.ppc.altivec.vrsqrtefp",
-  "llvm.ppc.altivec.vsel",
-  "llvm.ppc.altivec.vsl",
-  "llvm.ppc.altivec.vslb",
-  "llvm.ppc.altivec.vslh",
-  "llvm.ppc.altivec.vslo",
-  "llvm.ppc.altivec.vslv",
-  "llvm.ppc.altivec.vslw",
-  "llvm.ppc.altivec.vsr",
-  "llvm.ppc.altivec.vsrab",
-  "llvm.ppc.altivec.vsrah",
-  "llvm.ppc.altivec.vsraw",
-  "llvm.ppc.altivec.vsrb",
-  "llvm.ppc.altivec.vsrh",
-  "llvm.ppc.altivec.vsro",
-  "llvm.ppc.altivec.vsrv",
-  "llvm.ppc.altivec.vsrw",
-  "llvm.ppc.altivec.vsubcuq",
-  "llvm.ppc.altivec.vsubcuw",
-  "llvm.ppc.altivec.vsubecuq",
-  "llvm.ppc.altivec.vsubeuqm",
-  "llvm.ppc.altivec.vsubsbs",
-  "llvm.ppc.altivec.vsubshs",
-  "llvm.ppc.altivec.vsubsws",
-  "llvm.ppc.altivec.vsububs",
-  "llvm.ppc.altivec.vsubuhs",
-  "llvm.ppc.altivec.vsubuws",
-  "llvm.ppc.altivec.vsum2sws",
-  "llvm.ppc.altivec.vsum4sbs",
-  "llvm.ppc.altivec.vsum4shs",
-  "llvm.ppc.altivec.vsum4ubs",
-  "llvm.ppc.altivec.vsumsws",
-  "llvm.ppc.altivec.vupkhpx",
-  "llvm.ppc.altivec.vupkhsb",
-  "llvm.ppc.altivec.vupkhsh",
-  "llvm.ppc.altivec.vupkhsw",
-  "llvm.ppc.altivec.vupklpx",
-  "llvm.ppc.altivec.vupklsb",
-  "llvm.ppc.altivec.vupklsh",
-  "llvm.ppc.altivec.vupklsw",
-  "llvm.ppc.bpermd",
-  "llvm.ppc.cfence",
-  "llvm.ppc.dcba",
-  "llvm.ppc.dcbf",
-  "llvm.ppc.dcbi",
-  "llvm.ppc.dcbst",
-  "llvm.ppc.dcbt",
-  "llvm.ppc.dcbtst",
-  "llvm.ppc.dcbz",
-  "llvm.ppc.dcbzl",
-  "llvm.ppc.divde",
-  "llvm.ppc.divdeu",
-  "llvm.ppc.divwe",
-  "llvm.ppc.divweu",
-  "llvm.ppc.get.texasr",
-  "llvm.ppc.get.texasru",
-  "llvm.ppc.get.tfhar",
-  "llvm.ppc.get.tfiar",
-  "llvm.ppc.is.decremented.ctr.nonzero",
-  "llvm.ppc.lwsync",
-  "llvm.ppc.mtctr",
-  "llvm.ppc.qpx.qvfabs",
-  "llvm.ppc.qpx.qvfadd",
-  "llvm.ppc.qpx.qvfadds",
-  "llvm.ppc.qpx.qvfcfid",
-  "llvm.ppc.qpx.qvfcfids",
-  "llvm.ppc.qpx.qvfcfidu",
-  "llvm.ppc.qpx.qvfcfidus",
-  "llvm.ppc.qpx.qvfcmpeq",
-  "llvm.ppc.qpx.qvfcmpgt",
-  "llvm.ppc.qpx.qvfcmplt",
-  "llvm.ppc.qpx.qvfcpsgn",
-  "llvm.ppc.qpx.qvfctid",
-  "llvm.ppc.qpx.qvfctidu",
-  "llvm.ppc.qpx.qvfctiduz",
-  "llvm.ppc.qpx.qvfctidz",
-  "llvm.ppc.qpx.qvfctiw",
-  "llvm.ppc.qpx.qvfctiwu",
-  "llvm.ppc.qpx.qvfctiwuz",
-  "llvm.ppc.qpx.qvfctiwz",
-  "llvm.ppc.qpx.qvflogical",
-  "llvm.ppc.qpx.qvfmadd",
-  "llvm.ppc.qpx.qvfmadds",
-  "llvm.ppc.qpx.qvfmsub",
-  "llvm.ppc.qpx.qvfmsubs",
-  "llvm.ppc.qpx.qvfmul",
-  "llvm.ppc.qpx.qvfmuls",
-  "llvm.ppc.qpx.qvfnabs",
-  "llvm.ppc.qpx.qvfneg",
-  "llvm.ppc.qpx.qvfnmadd",
-  "llvm.ppc.qpx.qvfnmadds",
-  "llvm.ppc.qpx.qvfnmsub",
-  "llvm.ppc.qpx.qvfnmsubs",
-  "llvm.ppc.qpx.qvfperm",
-  "llvm.ppc.qpx.qvfre",
-  "llvm.ppc.qpx.qvfres",
-  "llvm.ppc.qpx.qvfrim",
-  "llvm.ppc.qpx.qvfrin",
-  "llvm.ppc.qpx.qvfrip",
-  "llvm.ppc.qpx.qvfriz",
-  "llvm.ppc.qpx.qvfrsp",
-  "llvm.ppc.qpx.qvfrsqrte",
-  "llvm.ppc.qpx.qvfrsqrtes",
-  "llvm.ppc.qpx.qvfsel",
-  "llvm.ppc.qpx.qvfsub",
-  "llvm.ppc.qpx.qvfsubs",
-  "llvm.ppc.qpx.qvftstnan",
-  "llvm.ppc.qpx.qvfxmadd",
-  "llvm.ppc.qpx.qvfxmadds",
-  "llvm.ppc.qpx.qvfxmul",
-  "llvm.ppc.qpx.qvfxmuls",
-  "llvm.ppc.qpx.qvfxxcpnmadd",
-  "llvm.ppc.qpx.qvfxxcpnmadds",
-  "llvm.ppc.qpx.qvfxxmadd",
-  "llvm.ppc.qpx.qvfxxmadds",
-  "llvm.ppc.qpx.qvfxxnpmadd",
-  "llvm.ppc.qpx.qvfxxnpmadds",
-  "llvm.ppc.qpx.qvgpci",
-  "llvm.ppc.qpx.qvlfcd",
-  "llvm.ppc.qpx.qvlfcda",
-  "llvm.ppc.qpx.qvlfcs",
-  "llvm.ppc.qpx.qvlfcsa",
-  "llvm.ppc.qpx.qvlfd",
-  "llvm.ppc.qpx.qvlfda",
-  "llvm.ppc.qpx.qvlfiwa",
-  "llvm.ppc.qpx.qvlfiwaa",
-  "llvm.ppc.qpx.qvlfiwz",
-  "llvm.ppc.qpx.qvlfiwza",
-  "llvm.ppc.qpx.qvlfs",
-  "llvm.ppc.qpx.qvlfsa",
-  "llvm.ppc.qpx.qvlpcld",
-  "llvm.ppc.qpx.qvlpcls",
-  "llvm.ppc.qpx.qvlpcrd",
-  "llvm.ppc.qpx.qvlpcrs",
-  "llvm.ppc.qpx.qvstfcd",
-  "llvm.ppc.qpx.qvstfcda",
-  "llvm.ppc.qpx.qvstfcs",
-  "llvm.ppc.qpx.qvstfcsa",
-  "llvm.ppc.qpx.qvstfd",
-  "llvm.ppc.qpx.qvstfda",
-  "llvm.ppc.qpx.qvstfiw",
-  "llvm.ppc.qpx.qvstfiwa",
-  "llvm.ppc.qpx.qvstfs",
-  "llvm.ppc.qpx.qvstfsa",
-  "llvm.ppc.set.texasr",
-  "llvm.ppc.set.texasru",
-  "llvm.ppc.set.tfhar",
-  "llvm.ppc.set.tfiar",
-  "llvm.ppc.sync",
-  "llvm.ppc.tabort",
-  "llvm.ppc.tabortdc",
-  "llvm.ppc.tabortdci",
-  "llvm.ppc.tabortwc",
-  "llvm.ppc.tabortwci",
-  "llvm.ppc.tbegin",
-  "llvm.ppc.tcheck",
-  "llvm.ppc.tend",
-  "llvm.ppc.tendall",
-  "llvm.ppc.trechkpt",
-  "llvm.ppc.treclaim",
-  "llvm.ppc.tresume",
-  "llvm.ppc.tsr",
-  "llvm.ppc.tsuspend",
-  "llvm.ppc.ttest",
-  "llvm.ppc.vsx.lxvd2x",
-  "llvm.ppc.vsx.lxvd2x.be",
-  "llvm.ppc.vsx.lxvl",
-  "llvm.ppc.vsx.lxvll",
-  "llvm.ppc.vsx.lxvw4x",
-  "llvm.ppc.vsx.lxvw4x.be",
-  "llvm.ppc.vsx.stxvd2x",
-  "llvm.ppc.vsx.stxvd2x.be",
-  "llvm.ppc.vsx.stxvl",
-  "llvm.ppc.vsx.stxvll",
-  "llvm.ppc.vsx.stxvw4x",
-  "llvm.ppc.vsx.stxvw4x.be",
-  "llvm.ppc.vsx.xsmaxdp",
-  "llvm.ppc.vsx.xsmindp",
-  "llvm.ppc.vsx.xvcmpeqdp",
-  "llvm.ppc.vsx.xvcmpeqdp.p",
-  "llvm.ppc.vsx.xvcmpeqsp",
-  "llvm.ppc.vsx.xvcmpeqsp.p",
-  "llvm.ppc.vsx.xvcmpgedp",
-  "llvm.ppc.vsx.xvcmpgedp.p",
-  "llvm.ppc.vsx.xvcmpgesp",
-  "llvm.ppc.vsx.xvcmpgesp.p",
-  "llvm.ppc.vsx.xvcmpgtdp",
-  "llvm.ppc.vsx.xvcmpgtdp.p",
-  "llvm.ppc.vsx.xvcmpgtsp",
-  "llvm.ppc.vsx.xvcmpgtsp.p",
-  "llvm.ppc.vsx.xvcvdpsp",
-  "llvm.ppc.vsx.xvcvdpsxws",
-  "llvm.ppc.vsx.xvcvdpuxws",
-  "llvm.ppc.vsx.xvcvhpsp",
-  "llvm.ppc.vsx.xvcvspdp",
-  "llvm.ppc.vsx.xvcvsphp",
-  "llvm.ppc.vsx.xvcvsxdsp",
-  "llvm.ppc.vsx.xvcvsxwdp",
-  "llvm.ppc.vsx.xvcvuxdsp",
-  "llvm.ppc.vsx.xvcvuxwdp",
-  "llvm.ppc.vsx.xvdivdp",
-  "llvm.ppc.vsx.xvdivsp",
-  "llvm.ppc.vsx.xviexpdp",
-  "llvm.ppc.vsx.xviexpsp",
-  "llvm.ppc.vsx.xvmaxdp",
-  "llvm.ppc.vsx.xvmaxsp",
-  "llvm.ppc.vsx.xvmindp",
-  "llvm.ppc.vsx.xvminsp",
-  "llvm.ppc.vsx.xvrdpip",
-  "llvm.ppc.vsx.xvredp",
-  "llvm.ppc.vsx.xvresp",
-  "llvm.ppc.vsx.xvrspip",
-  "llvm.ppc.vsx.xvrsqrtedp",
-  "llvm.ppc.vsx.xvrsqrtesp",
-  "llvm.ppc.vsx.xvtstdcdp",
-  "llvm.ppc.vsx.xvtstdcsp",
-  "llvm.ppc.vsx.xvxexpdp",
-  "llvm.ppc.vsx.xvxexpsp",
-  "llvm.ppc.vsx.xvxsigdp",
-  "llvm.ppc.vsx.xvxsigsp",
-  "llvm.ppc.vsx.xxextractuw",
-  "llvm.ppc.vsx.xxinsertw",
-  "llvm.ppc.vsx.xxleqv",
-  "llvm.r600.cube",
-  "llvm.r600.group.barrier",
-  "llvm.r600.implicitarg.ptr",
-  "llvm.r600.rat.store.typed",
-  "llvm.r600.read.global.size.x",
-  "llvm.r600.read.global.size.y",
-  "llvm.r600.read.global.size.z",
-  "llvm.r600.read.local.size.x",
-  "llvm.r600.read.local.size.y",
-  "llvm.r600.read.local.size.z",
-  "llvm.r600.read.ngroups.x",
-  "llvm.r600.read.ngroups.y",
-  "llvm.r600.read.ngroups.z",
-  "llvm.r600.read.tgid.x",
-  "llvm.r600.read.tgid.y",
-  "llvm.r600.read.tgid.z",
-  "llvm.r600.read.tidig.x",
-  "llvm.r600.read.tidig.y",
-  "llvm.r600.read.tidig.z",
-  "llvm.r600.recipsqrt.clamped",
-  "llvm.r600.recipsqrt.ieee",
-  "llvm.s390.efpc",
-  "llvm.s390.etnd",
-  "llvm.s390.lcbb",
-  "llvm.s390.ntstg",
-  "llvm.s390.ppa.txassist",
-  "llvm.s390.sfpc",
-  "llvm.s390.tabort",
-  "llvm.s390.tbegin",
-  "llvm.s390.tbegin.nofloat",
-  "llvm.s390.tbeginc",
-  "llvm.s390.tdc",
-  "llvm.s390.tend",
-  "llvm.s390.vaccb",
-  "llvm.s390.vacccq",
-  "llvm.s390.vaccf",
-  "llvm.s390.vaccg",
-  "llvm.s390.vacch",
-  "llvm.s390.vaccq",
-  "llvm.s390.vacq",
-  "llvm.s390.vaq",
-  "llvm.s390.vavgb",
-  "llvm.s390.vavgf",
-  "llvm.s390.vavgg",
-  "llvm.s390.vavgh",
-  "llvm.s390.vavglb",
-  "llvm.s390.vavglf",
-  "llvm.s390.vavglg",
-  "llvm.s390.vavglh",
-  "llvm.s390.vbperm",
-  "llvm.s390.vceqbs",
-  "llvm.s390.vceqfs",
-  "llvm.s390.vceqgs",
-  "llvm.s390.vceqhs",
-  "llvm.s390.vchbs",
-  "llvm.s390.vchfs",
-  "llvm.s390.vchgs",
-  "llvm.s390.vchhs",
-  "llvm.s390.vchlbs",
-  "llvm.s390.vchlfs",
-  "llvm.s390.vchlgs",
-  "llvm.s390.vchlhs",
-  "llvm.s390.vcksm",
-  "llvm.s390.verimb",
-  "llvm.s390.verimf",
-  "llvm.s390.verimg",
-  "llvm.s390.verimh",
-  "llvm.s390.verllb",
-  "llvm.s390.verllf",
-  "llvm.s390.verllg",
-  "llvm.s390.verllh",
-  "llvm.s390.verllvb",
-  "llvm.s390.verllvf",
-  "llvm.s390.verllvg",
-  "llvm.s390.verllvh",
-  "llvm.s390.vfaeb",
-  "llvm.s390.vfaebs",
-  "llvm.s390.vfaef",
-  "llvm.s390.vfaefs",
-  "llvm.s390.vfaeh",
-  "llvm.s390.vfaehs",
-  "llvm.s390.vfaezb",
-  "llvm.s390.vfaezbs",
-  "llvm.s390.vfaezf",
-  "llvm.s390.vfaezfs",
-  "llvm.s390.vfaezh",
-  "llvm.s390.vfaezhs",
-  "llvm.s390.vfcedbs",
-  "llvm.s390.vfcesbs",
-  "llvm.s390.vfchdbs",
-  "llvm.s390.vfchedbs",
-  "llvm.s390.vfchesbs",
-  "llvm.s390.vfchsbs",
-  "llvm.s390.vfeeb",
-  "llvm.s390.vfeebs",
-  "llvm.s390.vfeef",
-  "llvm.s390.vfeefs",
-  "llvm.s390.vfeeh",
-  "llvm.s390.vfeehs",
-  "llvm.s390.vfeezb",
-  "llvm.s390.vfeezbs",
-  "llvm.s390.vfeezf",
-  "llvm.s390.vfeezfs",
-  "llvm.s390.vfeezh",
-  "llvm.s390.vfeezhs",
-  "llvm.s390.vfeneb",
-  "llvm.s390.vfenebs",
-  "llvm.s390.vfenef",
-  "llvm.s390.vfenefs",
-  "llvm.s390.vfeneh",
-  "llvm.s390.vfenehs",
-  "llvm.s390.vfenezb",
-  "llvm.s390.vfenezbs",
-  "llvm.s390.vfenezf",
-  "llvm.s390.vfenezfs",
-  "llvm.s390.vfenezh",
-  "llvm.s390.vfenezhs",
-  "llvm.s390.vfidb",
-  "llvm.s390.vfisb",
-  "llvm.s390.vfmaxdb",
-  "llvm.s390.vfmaxsb",
-  "llvm.s390.vfmindb",
-  "llvm.s390.vfminsb",
-  "llvm.s390.vftcidb",
-  "llvm.s390.vftcisb",
-  "llvm.s390.vgfmab",
-  "llvm.s390.vgfmaf",
-  "llvm.s390.vgfmag",
-  "llvm.s390.vgfmah",
-  "llvm.s390.vgfmb",
-  "llvm.s390.vgfmf",
-  "llvm.s390.vgfmg",
-  "llvm.s390.vgfmh",
-  "llvm.s390.vistrb",
-  "llvm.s390.vistrbs",
-  "llvm.s390.vistrf",
-  "llvm.s390.vistrfs",
-  "llvm.s390.vistrh",
-  "llvm.s390.vistrhs",
-  "llvm.s390.vlbb",
-  "llvm.s390.vll",
-  "llvm.s390.vlrl",
-  "llvm.s390.vmaeb",
-  "llvm.s390.vmaef",
-  "llvm.s390.vmaeh",
-  "llvm.s390.vmahb",
-  "llvm.s390.vmahf",
-  "llvm.s390.vmahh",
-  "llvm.s390.vmaleb",
-  "llvm.s390.vmalef",
-  "llvm.s390.vmaleh",
-  "llvm.s390.vmalhb",
-  "llvm.s390.vmalhf",
-  "llvm.s390.vmalhh",
-  "llvm.s390.vmalob",
-  "llvm.s390.vmalof",
-  "llvm.s390.vmaloh",
-  "llvm.s390.vmaob",
-  "llvm.s390.vmaof",
-  "llvm.s390.vmaoh",
-  "llvm.s390.vmeb",
-  "llvm.s390.vmef",
-  "llvm.s390.vmeh",
-  "llvm.s390.vmhb",
-  "llvm.s390.vmhf",
-  "llvm.s390.vmhh",
-  "llvm.s390.vmleb",
-  "llvm.s390.vmlef",
-  "llvm.s390.vmleh",
-  "llvm.s390.vmlhb",
-  "llvm.s390.vmlhf",
-  "llvm.s390.vmlhh",
-  "llvm.s390.vmlob",
-  "llvm.s390.vmlof",
-  "llvm.s390.vmloh",
-  "llvm.s390.vmob",
-  "llvm.s390.vmof",
-  "llvm.s390.vmoh",
-  "llvm.s390.vmslg",
-  "llvm.s390.vpdi",
-  "llvm.s390.vperm",
-  "llvm.s390.vpklsf",
-  "llvm.s390.vpklsfs",
-  "llvm.s390.vpklsg",
-  "llvm.s390.vpklsgs",
-  "llvm.s390.vpklsh",
-  "llvm.s390.vpklshs",
-  "llvm.s390.vpksf",
-  "llvm.s390.vpksfs",
-  "llvm.s390.vpksg",
-  "llvm.s390.vpksgs",
-  "llvm.s390.vpksh",
-  "llvm.s390.vpkshs",
-  "llvm.s390.vsbcbiq",
-  "llvm.s390.vsbiq",
-  "llvm.s390.vscbib",
-  "llvm.s390.vscbif",
-  "llvm.s390.vscbig",
-  "llvm.s390.vscbih",
-  "llvm.s390.vscbiq",
-  "llvm.s390.vsl",
-  "llvm.s390.vslb",
-  "llvm.s390.vsldb",
-  "llvm.s390.vsq",
-  "llvm.s390.vsra",
-  "llvm.s390.vsrab",
-  "llvm.s390.vsrl",
-  "llvm.s390.vsrlb",
-  "llvm.s390.vstl",
-  "llvm.s390.vstrcb",
-  "llvm.s390.vstrcbs",
-  "llvm.s390.vstrcf",
-  "llvm.s390.vstrcfs",
-  "llvm.s390.vstrch",
-  "llvm.s390.vstrchs",
-  "llvm.s390.vstrczb",
-  "llvm.s390.vstrczbs",
-  "llvm.s390.vstrczf",
-  "llvm.s390.vstrczfs",
-  "llvm.s390.vstrczh",
-  "llvm.s390.vstrczhs",
-  "llvm.s390.vstrl",
-  "llvm.s390.vsumb",
-  "llvm.s390.vsumgf",
-  "llvm.s390.vsumgh",
-  "llvm.s390.vsumh",
-  "llvm.s390.vsumqf",
-  "llvm.s390.vsumqg",
-  "llvm.s390.vtm",
-  "llvm.s390.vuphb",
-  "llvm.s390.vuphf",
-  "llvm.s390.vuphh",
-  "llvm.s390.vuplb",
-  "llvm.s390.vuplf",
-  "llvm.s390.vuplhb",
-  "llvm.s390.vuplhf",
-  "llvm.s390.vuplhh",
-  "llvm.s390.vuplhw",
-  "llvm.s390.vupllb",
-  "llvm.s390.vupllf",
-  "llvm.s390.vupllh",
-  "llvm.wasm.current.memory",
-  "llvm.wasm.get.ehselector",
-  "llvm.wasm.get.exception",
-  "llvm.wasm.grow.memory",
-  "llvm.wasm.mem.grow",
-  "llvm.wasm.mem.size",
-  "llvm.wasm.rethrow",
-  "llvm.wasm.throw",
-  "llvm.x86.3dnow.pavgusb",
-  "llvm.x86.3dnow.pf2id",
-  "llvm.x86.3dnow.pfacc",
-  "llvm.x86.3dnow.pfadd",
-  "llvm.x86.3dnow.pfcmpeq",
-  "llvm.x86.3dnow.pfcmpge",
-  "llvm.x86.3dnow.pfcmpgt",
-  "llvm.x86.3dnow.pfmax",
-  "llvm.x86.3dnow.pfmin",
-  "llvm.x86.3dnow.pfmul",
-  "llvm.x86.3dnow.pfrcp",
-  "llvm.x86.3dnow.pfrcpit1",
-  "llvm.x86.3dnow.pfrcpit2",
-  "llvm.x86.3dnow.pfrsqit1",
-  "llvm.x86.3dnow.pfrsqrt",
-  "llvm.x86.3dnow.pfsub",
-  "llvm.x86.3dnow.pfsubr",
-  "llvm.x86.3dnow.pi2fd",
-  "llvm.x86.3dnow.pmulhrw",
-  "llvm.x86.3dnowa.pf2iw",
-  "llvm.x86.3dnowa.pfnacc",
-  "llvm.x86.3dnowa.pfpnacc",
-  "llvm.x86.3dnowa.pi2fw",
-  "llvm.x86.3dnowa.pswapd",
-  "llvm.x86.addcarry.u32",
-  "llvm.x86.addcarry.u64",
-  "llvm.x86.addcarryx.u32",
-  "llvm.x86.addcarryx.u64",
-  "llvm.x86.aesni.aesdec",
-  "llvm.x86.aesni.aesdec.256",
-  "llvm.x86.aesni.aesdec.512",
-  "llvm.x86.aesni.aesdeclast",
-  "llvm.x86.aesni.aesdeclast.256",
-  "llvm.x86.aesni.aesdeclast.512",
-  "llvm.x86.aesni.aesenc",
-  "llvm.x86.aesni.aesenc.256",
-  "llvm.x86.aesni.aesenc.512",
-  "llvm.x86.aesni.aesenclast",
-  "llvm.x86.aesni.aesenclast.256",
-  "llvm.x86.aesni.aesenclast.512",
-  "llvm.x86.aesni.aesimc",
-  "llvm.x86.aesni.aeskeygenassist",
-  "llvm.x86.avx.addsub.pd.256",
-  "llvm.x86.avx.addsub.ps.256",
-  "llvm.x86.avx.blendv.pd.256",
-  "llvm.x86.avx.blendv.ps.256",
-  "llvm.x86.avx.cmp.pd.256",
-  "llvm.x86.avx.cmp.ps.256",
-  "llvm.x86.avx.cvt.pd2.ps.256",
-  "llvm.x86.avx.cvt.pd2dq.256",
-  "llvm.x86.avx.cvt.ps2dq.256",
-  "llvm.x86.avx.cvtdq2.ps.256",
-  "llvm.x86.avx.cvtt.pd2dq.256",
-  "llvm.x86.avx.cvtt.ps2dq.256",
-  "llvm.x86.avx.dp.ps.256",
-  "llvm.x86.avx.hadd.pd.256",
-  "llvm.x86.avx.hadd.ps.256",
-  "llvm.x86.avx.hsub.pd.256",
-  "llvm.x86.avx.hsub.ps.256",
-  "llvm.x86.avx.ldu.dq.256",
-  "llvm.x86.avx.maskload.pd",
-  "llvm.x86.avx.maskload.pd.256",
-  "llvm.x86.avx.maskload.ps",
-  "llvm.x86.avx.maskload.ps.256",
-  "llvm.x86.avx.maskstore.pd",
-  "llvm.x86.avx.maskstore.pd.256",
-  "llvm.x86.avx.maskstore.ps",
-  "llvm.x86.avx.maskstore.ps.256",
-  "llvm.x86.avx.max.pd.256",
-  "llvm.x86.avx.max.ps.256",
-  "llvm.x86.avx.min.pd.256",
-  "llvm.x86.avx.min.ps.256",
-  "llvm.x86.avx.movmsk.pd.256",
-  "llvm.x86.avx.movmsk.ps.256",
-  "llvm.x86.avx.ptestc.256",
-  "llvm.x86.avx.ptestnzc.256",
-  "llvm.x86.avx.ptestz.256",
-  "llvm.x86.avx.rcp.ps.256",
-  "llvm.x86.avx.round.pd.256",
-  "llvm.x86.avx.round.ps.256",
-  "llvm.x86.avx.rsqrt.ps.256",
-  "llvm.x86.avx.sqrt.pd.256",
-  "llvm.x86.avx.sqrt.ps.256",
-  "llvm.x86.avx.vpermilvar.pd",
-  "llvm.x86.avx.vpermilvar.pd.256",
-  "llvm.x86.avx.vpermilvar.ps",
-  "llvm.x86.avx.vpermilvar.ps.256",
-  "llvm.x86.avx.vtestc.pd",
-  "llvm.x86.avx.vtestc.pd.256",
-  "llvm.x86.avx.vtestc.ps",
-  "llvm.x86.avx.vtestc.ps.256",
-  "llvm.x86.avx.vtestnzc.pd",
-  "llvm.x86.avx.vtestnzc.pd.256",
-  "llvm.x86.avx.vtestnzc.ps",
-  "llvm.x86.avx.vtestnzc.ps.256",
-  "llvm.x86.avx.vtestz.pd",
-  "llvm.x86.avx.vtestz.pd.256",
-  "llvm.x86.avx.vtestz.ps",
-  "llvm.x86.avx.vtestz.ps.256",
-  "llvm.x86.avx.vzeroall",
-  "llvm.x86.avx.vzeroupper",
-  "llvm.x86.avx2.gather.d.d",
-  "llvm.x86.avx2.gather.d.d.256",
-  "llvm.x86.avx2.gather.d.pd",
-  "llvm.x86.avx2.gather.d.pd.256",
-  "llvm.x86.avx2.gather.d.ps",
-  "llvm.x86.avx2.gather.d.ps.256",
-  "llvm.x86.avx2.gather.d.q",
-  "llvm.x86.avx2.gather.d.q.256",
-  "llvm.x86.avx2.gather.q.d",
-  "llvm.x86.avx2.gather.q.d.256",
-  "llvm.x86.avx2.gather.q.pd",
-  "llvm.x86.avx2.gather.q.pd.256",
-  "llvm.x86.avx2.gather.q.ps",
-  "llvm.x86.avx2.gather.q.ps.256",
-  "llvm.x86.avx2.gather.q.q",
-  "llvm.x86.avx2.gather.q.q.256",
-  "llvm.x86.avx2.maskload.d",
-  "llvm.x86.avx2.maskload.d.256",
-  "llvm.x86.avx2.maskload.q",
-  "llvm.x86.avx2.maskload.q.256",
-  "llvm.x86.avx2.maskstore.d",
-  "llvm.x86.avx2.maskstore.d.256",
-  "llvm.x86.avx2.maskstore.q",
-  "llvm.x86.avx2.maskstore.q.256",
-  "llvm.x86.avx2.mpsadbw",
-  "llvm.x86.avx2.packssdw",
-  "llvm.x86.avx2.packsswb",
-  "llvm.x86.avx2.packusdw",
-  "llvm.x86.avx2.packuswb",
-  "llvm.x86.avx2.padds.b",
-  "llvm.x86.avx2.padds.w",
-  "llvm.x86.avx2.paddus.b",
-  "llvm.x86.avx2.paddus.w",
-  "llvm.x86.avx2.pblendvb",
-  "llvm.x86.avx2.permd",
-  "llvm.x86.avx2.permps",
-  "llvm.x86.avx2.phadd.d",
-  "llvm.x86.avx2.phadd.sw",
-  "llvm.x86.avx2.phadd.w",
-  "llvm.x86.avx2.phsub.d",
-  "llvm.x86.avx2.phsub.sw",
-  "llvm.x86.avx2.phsub.w",
-  "llvm.x86.avx2.pmadd.ub.sw",
-  "llvm.x86.avx2.pmadd.wd",
-  "llvm.x86.avx2.pmovmskb",
-  "llvm.x86.avx2.pmul.dq",
-  "llvm.x86.avx2.pmul.hr.sw",
-  "llvm.x86.avx2.pmulh.w",
-  "llvm.x86.avx2.pmulhu.w",
-  "llvm.x86.avx2.pmulu.dq",
-  "llvm.x86.avx2.psad.bw",
-  "llvm.x86.avx2.pshuf.b",
-  "llvm.x86.avx2.psign.b",
-  "llvm.x86.avx2.psign.d",
-  "llvm.x86.avx2.psign.w",
-  "llvm.x86.avx2.psll.d",
-  "llvm.x86.avx2.psll.q",
-  "llvm.x86.avx2.psll.w",
-  "llvm.x86.avx2.pslli.d",
-  "llvm.x86.avx2.pslli.q",
-  "llvm.x86.avx2.pslli.w",
-  "llvm.x86.avx2.psllv.d",
-  "llvm.x86.avx2.psllv.d.256",
-  "llvm.x86.avx2.psllv.q",
-  "llvm.x86.avx2.psllv.q.256",
-  "llvm.x86.avx2.psra.d",
-  "llvm.x86.avx2.psra.w",
-  "llvm.x86.avx2.psrai.d",
-  "llvm.x86.avx2.psrai.w",
-  "llvm.x86.avx2.psrav.d",
-  "llvm.x86.avx2.psrav.d.256",
-  "llvm.x86.avx2.psrl.d",
-  "llvm.x86.avx2.psrl.q",
-  "llvm.x86.avx2.psrl.w",
-  "llvm.x86.avx2.psrli.d",
-  "llvm.x86.avx2.psrli.q",
-  "llvm.x86.avx2.psrli.w",
-  "llvm.x86.avx2.psrlv.d",
-  "llvm.x86.avx2.psrlv.d.256",
-  "llvm.x86.avx2.psrlv.q",
-  "llvm.x86.avx2.psrlv.q.256",
-  "llvm.x86.avx2.psubs.b",
-  "llvm.x86.avx2.psubs.w",
-  "llvm.x86.avx2.psubus.b",
-  "llvm.x86.avx2.psubus.w",
-  "llvm.x86.avx512.broadcastmb.128",
-  "llvm.x86.avx512.broadcastmb.256",
-  "llvm.x86.avx512.broadcastmb.512",
-  "llvm.x86.avx512.broadcastmw.128",
-  "llvm.x86.avx512.broadcastmw.256",
-  "llvm.x86.avx512.broadcastmw.512",
-  "llvm.x86.avx512.cvtsi2sd64",
-  "llvm.x86.avx512.cvtsi2ss32",
-  "llvm.x86.avx512.cvtsi2ss64",
-  "llvm.x86.avx512.cvttsd2si",
-  "llvm.x86.avx512.cvttsd2si64",
-  "llvm.x86.avx512.cvttsd2usi",
-  "llvm.x86.avx512.cvttsd2usi64",
-  "llvm.x86.avx512.cvttss2si",
-  "llvm.x86.avx512.cvttss2si64",
-  "llvm.x86.avx512.cvttss2usi",
-  "llvm.x86.avx512.cvttss2usi64",
-  "llvm.x86.avx512.cvtusi2sd",
-  "llvm.x86.avx512.cvtusi2ss",
-  "llvm.x86.avx512.cvtusi642sd",
-  "llvm.x86.avx512.cvtusi642ss",
-  "llvm.x86.avx512.exp2.pd",
-  "llvm.x86.avx512.exp2.ps",
-  "llvm.x86.avx512.gather.dpd.512",
-  "llvm.x86.avx512.gather.dpi.512",
-  "llvm.x86.avx512.gather.dpq.512",
-  "llvm.x86.avx512.gather.dps.512",
-  "llvm.x86.avx512.gather.qpd.512",
-  "llvm.x86.avx512.gather.qpi.512",
-  "llvm.x86.avx512.gather.qpq.512",
-  "llvm.x86.avx512.gather.qps.512",
-  "llvm.x86.avx512.gather3div2.df",
-  "llvm.x86.avx512.gather3div2.di",
-  "llvm.x86.avx512.gather3div4.df",
-  "llvm.x86.avx512.gather3div4.di",
-  "llvm.x86.avx512.gather3div4.sf",
-  "llvm.x86.avx512.gather3div4.si",
-  "llvm.x86.avx512.gather3div8.sf",
-  "llvm.x86.avx512.gather3div8.si",
-  "llvm.x86.avx512.gather3siv2.df",
-  "llvm.x86.avx512.gather3siv2.di",
-  "llvm.x86.avx512.gather3siv4.df",
-  "llvm.x86.avx512.gather3siv4.di",
-  "llvm.x86.avx512.gather3siv4.sf",
-  "llvm.x86.avx512.gather3siv4.si",
-  "llvm.x86.avx512.gather3siv8.sf",
-  "llvm.x86.avx512.gather3siv8.si",
-  "llvm.x86.avx512.gatherpf.dpd.512",
-  "llvm.x86.avx512.gatherpf.dps.512",
-  "llvm.x86.avx512.gatherpf.qpd.512",
-  "llvm.x86.avx512.gatherpf.qps.512",
-  "llvm.x86.avx512.mask.add.pd.512",
-  "llvm.x86.avx512.mask.add.ps.512",
-  "llvm.x86.avx512.mask.add.sd.round",
-  "llvm.x86.avx512.mask.add.ss.round",
-  "llvm.x86.avx512.mask.cmp.pd.128",
-  "llvm.x86.avx512.mask.cmp.pd.256",
-  "llvm.x86.avx512.mask.cmp.pd.512",
-  "llvm.x86.avx512.mask.cmp.ps.128",
-  "llvm.x86.avx512.mask.cmp.ps.256",
-  "llvm.x86.avx512.mask.cmp.ps.512",
-  "llvm.x86.avx512.mask.cmp.sd",
-  "llvm.x86.avx512.mask.cmp.ss",
-  "llvm.x86.avx512.mask.compress.b.128",
-  "llvm.x86.avx512.mask.compress.b.256",
-  "llvm.x86.avx512.mask.compress.b.512",
-  "llvm.x86.avx512.mask.compress.d.128",
-  "llvm.x86.avx512.mask.compress.d.256",
-  "llvm.x86.avx512.mask.compress.d.512",
-  "llvm.x86.avx512.mask.compress.pd.128",
-  "llvm.x86.avx512.mask.compress.pd.256",
-  "llvm.x86.avx512.mask.compress.pd.512",
-  "llvm.x86.avx512.mask.compress.ps.128",
-  "llvm.x86.avx512.mask.compress.ps.256",
-  "llvm.x86.avx512.mask.compress.ps.512",
-  "llvm.x86.avx512.mask.compress.q.128",
-  "llvm.x86.avx512.mask.compress.q.256",
-  "llvm.x86.avx512.mask.compress.q.512",
-  "llvm.x86.avx512.mask.compress.store.b.128",
-  "llvm.x86.avx512.mask.compress.store.b.256",
-  "llvm.x86.avx512.mask.compress.store.b.512",
-  "llvm.x86.avx512.mask.compress.store.d.128",
-  "llvm.x86.avx512.mask.compress.store.d.256",
-  "llvm.x86.avx512.mask.compress.store.d.512",
-  "llvm.x86.avx512.mask.compress.store.pd.128",
-  "llvm.x86.avx512.mask.compress.store.pd.256",
-  "llvm.x86.avx512.mask.compress.store.pd.512",
-  "llvm.x86.avx512.mask.compress.store.ps.128",
-  "llvm.x86.avx512.mask.compress.store.ps.256",
-  "llvm.x86.avx512.mask.compress.store.ps.512",
-  "llvm.x86.avx512.mask.compress.store.q.128",
-  "llvm.x86.avx512.mask.compress.store.q.256",
-  "llvm.x86.avx512.mask.compress.store.q.512",
-  "llvm.x86.avx512.mask.compress.store.w.128",
-  "llvm.x86.avx512.mask.compress.store.w.256",
-  "llvm.x86.avx512.mask.compress.store.w.512",
-  "llvm.x86.avx512.mask.compress.w.128",
-  "llvm.x86.avx512.mask.compress.w.256",
-  "llvm.x86.avx512.mask.compress.w.512",
-  "llvm.x86.avx512.mask.conflict.d.128",
-  "llvm.x86.avx512.mask.conflict.d.256",
-  "llvm.x86.avx512.mask.conflict.d.512",
-  "llvm.x86.avx512.mask.conflict.q.128",
-  "llvm.x86.avx512.mask.conflict.q.256",
-  "llvm.x86.avx512.mask.conflict.q.512",
-  "llvm.x86.avx512.mask.cvtdq2ps.128",
-  "llvm.x86.avx512.mask.cvtdq2ps.256",
-  "llvm.x86.avx512.mask.cvtdq2ps.512",
-  "llvm.x86.avx512.mask.cvtpd2dq.128",
-  "llvm.x86.avx512.mask.cvtpd2dq.256",
-  "llvm.x86.avx512.mask.cvtpd2dq.512",
-  "llvm.x86.avx512.mask.cvtpd2ps",
-  "llvm.x86.avx512.mask.cvtpd2ps.256",
-  "llvm.x86.avx512.mask.cvtpd2ps.512",
-  "llvm.x86.avx512.mask.cvtpd2qq.128",
-  "llvm.x86.avx512.mask.cvtpd2qq.256",
-  "llvm.x86.avx512.mask.cvtpd2qq.512",
-  "llvm.x86.avx512.mask.cvtpd2udq.128",
-  "llvm.x86.avx512.mask.cvtpd2udq.256",
-  "llvm.x86.avx512.mask.cvtpd2udq.512",
-  "llvm.x86.avx512.mask.cvtpd2uqq.128",
-  "llvm.x86.avx512.mask.cvtpd2uqq.256",
-  "llvm.x86.avx512.mask.cvtpd2uqq.512",
-  "llvm.x86.avx512.mask.cvtps2dq.128",
-  "llvm.x86.avx512.mask.cvtps2dq.256",
-  "llvm.x86.avx512.mask.cvtps2dq.512",
-  "llvm.x86.avx512.mask.cvtps2pd.128",
-  "llvm.x86.avx512.mask.cvtps2pd.256",
-  "llvm.x86.avx512.mask.cvtps2pd.512",
-  "llvm.x86.avx512.mask.cvtps2qq.128",
-  "llvm.x86.avx512.mask.cvtps2qq.256",
-  "llvm.x86.avx512.mask.cvtps2qq.512",
-  "llvm.x86.avx512.mask.cvtps2udq.128",
-  "llvm.x86.avx512.mask.cvtps2udq.256",
-  "llvm.x86.avx512.mask.cvtps2udq.512",
-  "llvm.x86.avx512.mask.cvtps2uqq.128",
-  "llvm.x86.avx512.mask.cvtps2uqq.256",
-  "llvm.x86.avx512.mask.cvtps2uqq.512",
-  "llvm.x86.avx512.mask.cvtqq2pd.128",
-  "llvm.x86.avx512.mask.cvtqq2pd.256",
-  "llvm.x86.avx512.mask.cvtqq2pd.512",
-  "llvm.x86.avx512.mask.cvtqq2ps.128",
-  "llvm.x86.avx512.mask.cvtqq2ps.256",
-  "llvm.x86.avx512.mask.cvtqq2ps.512",
-  "llvm.x86.avx512.mask.cvtsd2ss.round",
-  "llvm.x86.avx512.mask.cvtss2sd.round",
-  "llvm.x86.avx512.mask.cvttpd2dq.128",
-  "llvm.x86.avx512.mask.cvttpd2dq.256",
-  "llvm.x86.avx512.mask.cvttpd2dq.512",
-  "llvm.x86.avx512.mask.cvttpd2qq.128",
-  "llvm.x86.avx512.mask.cvttpd2qq.256",
-  "llvm.x86.avx512.mask.cvttpd2qq.512",
-  "llvm.x86.avx512.mask.cvttpd2udq.128",
-  "llvm.x86.avx512.mask.cvttpd2udq.256",
-  "llvm.x86.avx512.mask.cvttpd2udq.512",
-  "llvm.x86.avx512.mask.cvttpd2uqq.128",
-  "llvm.x86.avx512.mask.cvttpd2uqq.256",
-  "llvm.x86.avx512.mask.cvttpd2uqq.512",
-  "llvm.x86.avx512.mask.cvttps2dq.128",
-  "llvm.x86.avx512.mask.cvttps2dq.256",
-  "llvm.x86.avx512.mask.cvttps2dq.512",
-  "llvm.x86.avx512.mask.cvttps2qq.128",
-  "llvm.x86.avx512.mask.cvttps2qq.256",
-  "llvm.x86.avx512.mask.cvttps2qq.512",
-  "llvm.x86.avx512.mask.cvttps2udq.128",
-  "llvm.x86.avx512.mask.cvttps2udq.256",
-  "llvm.x86.avx512.mask.cvttps2udq.512",
-  "llvm.x86.avx512.mask.cvttps2uqq.128",
-  "llvm.x86.avx512.mask.cvttps2uqq.256",
-  "llvm.x86.avx512.mask.cvttps2uqq.512",
-  "llvm.x86.avx512.mask.cvtudq2ps.128",
-  "llvm.x86.avx512.mask.cvtudq2ps.256",
-  "llvm.x86.avx512.mask.cvtudq2ps.512",
-  "llvm.x86.avx512.mask.cvtuqq2pd.128",
-  "llvm.x86.avx512.mask.cvtuqq2pd.256",
-  "llvm.x86.avx512.mask.cvtuqq2pd.512",
-  "llvm.x86.avx512.mask.cvtuqq2ps.128",
-  "llvm.x86.avx512.mask.cvtuqq2ps.256",
-  "llvm.x86.avx512.mask.cvtuqq2ps.512",
-  "llvm.x86.avx512.mask.dbpsadbw.128",
-  "llvm.x86.avx512.mask.dbpsadbw.256",
-  "llvm.x86.avx512.mask.dbpsadbw.512",
-  "llvm.x86.avx512.mask.div.pd.512",
-  "llvm.x86.avx512.mask.div.ps.512",
-  "llvm.x86.avx512.mask.div.sd.round",
-  "llvm.x86.avx512.mask.div.ss.round",
-  "llvm.x86.avx512.mask.expand.b.128",
-  "llvm.x86.avx512.mask.expand.b.256",
-  "llvm.x86.avx512.mask.expand.b.512",
-  "llvm.x86.avx512.mask.expand.d.128",
-  "llvm.x86.avx512.mask.expand.d.256",
-  "llvm.x86.avx512.mask.expand.d.512",
-  "llvm.x86.avx512.mask.expand.load.b.128",
-  "llvm.x86.avx512.mask.expand.load.b.256",
-  "llvm.x86.avx512.mask.expand.load.b.512",
-  "llvm.x86.avx512.mask.expand.load.d.128",
-  "llvm.x86.avx512.mask.expand.load.d.256",
-  "llvm.x86.avx512.mask.expand.load.d.512",
-  "llvm.x86.avx512.mask.expand.load.pd.128",
-  "llvm.x86.avx512.mask.expand.load.pd.256",
-  "llvm.x86.avx512.mask.expand.load.pd.512",
-  "llvm.x86.avx512.mask.expand.load.ps.128",
-  "llvm.x86.avx512.mask.expand.load.ps.256",
-  "llvm.x86.avx512.mask.expand.load.ps.512",
-  "llvm.x86.avx512.mask.expand.load.q.128",
-  "llvm.x86.avx512.mask.expand.load.q.256",
-  "llvm.x86.avx512.mask.expand.load.q.512",
-  "llvm.x86.avx512.mask.expand.load.w.128",
-  "llvm.x86.avx512.mask.expand.load.w.256",
-  "llvm.x86.avx512.mask.expand.load.w.512",
-  "llvm.x86.avx512.mask.expand.pd.128",
-  "llvm.x86.avx512.mask.expand.pd.256",
-  "llvm.x86.avx512.mask.expand.pd.512",
-  "llvm.x86.avx512.mask.expand.ps.128",
-  "llvm.x86.avx512.mask.expand.ps.256",
-  "llvm.x86.avx512.mask.expand.ps.512",
-  "llvm.x86.avx512.mask.expand.q.128",
-  "llvm.x86.avx512.mask.expand.q.256",
-  "llvm.x86.avx512.mask.expand.q.512",
-  "llvm.x86.avx512.mask.expand.w.128",
-  "llvm.x86.avx512.mask.expand.w.256",
-  "llvm.x86.avx512.mask.expand.w.512",
-  "llvm.x86.avx512.mask.fixupimm.pd.128",
-  "llvm.x86.avx512.mask.fixupimm.pd.256",
-  "llvm.x86.avx512.mask.fixupimm.pd.512",
-  "llvm.x86.avx512.mask.fixupimm.ps.128",
-  "llvm.x86.avx512.mask.fixupimm.ps.256",
-  "llvm.x86.avx512.mask.fixupimm.ps.512",
-  "llvm.x86.avx512.mask.fixupimm.sd",
-  "llvm.x86.avx512.mask.fixupimm.ss",
-  "llvm.x86.avx512.mask.fpclass.pd.128",
-  "llvm.x86.avx512.mask.fpclass.pd.256",
-  "llvm.x86.avx512.mask.fpclass.pd.512",
-  "llvm.x86.avx512.mask.fpclass.ps.128",
-  "llvm.x86.avx512.mask.fpclass.ps.256",
-  "llvm.x86.avx512.mask.fpclass.ps.512",
-  "llvm.x86.avx512.mask.fpclass.sd",
-  "llvm.x86.avx512.mask.fpclass.ss",
-  "llvm.x86.avx512.mask.getexp.pd.128",
-  "llvm.x86.avx512.mask.getexp.pd.256",
-  "llvm.x86.avx512.mask.getexp.pd.512",
-  "llvm.x86.avx512.mask.getexp.ps.128",
-  "llvm.x86.avx512.mask.getexp.ps.256",
-  "llvm.x86.avx512.mask.getexp.ps.512",
-  "llvm.x86.avx512.mask.getexp.sd",
-  "llvm.x86.avx512.mask.getexp.ss",
-  "llvm.x86.avx512.mask.getmant.pd.128",
-  "llvm.x86.avx512.mask.getmant.pd.256",
-  "llvm.x86.avx512.mask.getmant.pd.512",
-  "llvm.x86.avx512.mask.getmant.ps.128",
-  "llvm.x86.avx512.mask.getmant.ps.256",
-  "llvm.x86.avx512.mask.getmant.ps.512",
-  "llvm.x86.avx512.mask.getmant.sd",
-  "llvm.x86.avx512.mask.getmant.ss",
-  "llvm.x86.avx512.mask.max.pd.512",
-  "llvm.x86.avx512.mask.max.ps.512",
-  "llvm.x86.avx512.mask.max.sd.round",
-  "llvm.x86.avx512.mask.max.ss.round",
-  "llvm.x86.avx512.mask.min.pd.512",
-  "llvm.x86.avx512.mask.min.ps.512",
-  "llvm.x86.avx512.mask.min.sd.round",
-  "llvm.x86.avx512.mask.min.ss.round",
-  "llvm.x86.avx512.mask.mul.pd.512",
-  "llvm.x86.avx512.mask.mul.ps.512",
-  "llvm.x86.avx512.mask.mul.sd.round",
-  "llvm.x86.avx512.mask.mul.ss.round",
-  "llvm.x86.avx512.mask.padds.b.128",
-  "llvm.x86.avx512.mask.padds.b.256",
-  "llvm.x86.avx512.mask.padds.b.512",
-  "llvm.x86.avx512.mask.padds.w.128",
-  "llvm.x86.avx512.mask.padds.w.256",
-  "llvm.x86.avx512.mask.padds.w.512",
-  "llvm.x86.avx512.mask.paddus.b.128",
-  "llvm.x86.avx512.mask.paddus.b.256",
-  "llvm.x86.avx512.mask.paddus.b.512",
-  "llvm.x86.avx512.mask.paddus.w.128",
-  "llvm.x86.avx512.mask.paddus.w.256",
-  "llvm.x86.avx512.mask.paddus.w.512",
-  "llvm.x86.avx512.mask.permvar.df.256",
-  "llvm.x86.avx512.mask.permvar.df.512",
-  "llvm.x86.avx512.mask.permvar.di.256",
-  "llvm.x86.avx512.mask.permvar.di.512",
-  "llvm.x86.avx512.mask.permvar.hi.128",
-  "llvm.x86.avx512.mask.permvar.hi.256",
-  "llvm.x86.avx512.mask.permvar.hi.512",
-  "llvm.x86.avx512.mask.permvar.qi.128",
-  "llvm.x86.avx512.mask.permvar.qi.256",
-  "llvm.x86.avx512.mask.permvar.qi.512",
-  "llvm.x86.avx512.mask.permvar.sf.256",
-  "llvm.x86.avx512.mask.permvar.sf.512",
-  "llvm.x86.avx512.mask.permvar.si.256",
-  "llvm.x86.avx512.mask.permvar.si.512",
-  "llvm.x86.avx512.mask.pmaddubs.w.128",
-  "llvm.x86.avx512.mask.pmaddubs.w.256",
-  "llvm.x86.avx512.mask.pmaddubs.w.512",
-  "llvm.x86.avx512.mask.pmaddw.d.128",
-  "llvm.x86.avx512.mask.pmaddw.d.256",
-  "llvm.x86.avx512.mask.pmaddw.d.512",
-  "llvm.x86.avx512.mask.pmov.db.128",
-  "llvm.x86.avx512.mask.pmov.db.256",
-  "llvm.x86.avx512.mask.pmov.db.512",
-  "llvm.x86.avx512.mask.pmov.db.mem.128",
-  "llvm.x86.avx512.mask.pmov.db.mem.256",
-  "llvm.x86.avx512.mask.pmov.db.mem.512",
-  "llvm.x86.avx512.mask.pmov.dw.128",
-  "llvm.x86.avx512.mask.pmov.dw.256",
-  "llvm.x86.avx512.mask.pmov.dw.512",
-  "llvm.x86.avx512.mask.pmov.dw.mem.128",
-  "llvm.x86.avx512.mask.pmov.dw.mem.256",
-  "llvm.x86.avx512.mask.pmov.dw.mem.512",
-  "llvm.x86.avx512.mask.pmov.qb.128",
-  "llvm.x86.avx512.mask.pmov.qb.256",
-  "llvm.x86.avx512.mask.pmov.qb.512",
-  "llvm.x86.avx512.mask.pmov.qb.mem.128",
-  "llvm.x86.avx512.mask.pmov.qb.mem.256",
-  "llvm.x86.avx512.mask.pmov.qb.mem.512",
-  "llvm.x86.avx512.mask.pmov.qd.128",
-  "llvm.x86.avx512.mask.pmov.qd.256",
-  "llvm.x86.avx512.mask.pmov.qd.512",
-  "llvm.x86.avx512.mask.pmov.qd.mem.128",
-  "llvm.x86.avx512.mask.pmov.qd.mem.256",
-  "llvm.x86.avx512.mask.pmov.qd.mem.512",
-  "llvm.x86.avx512.mask.pmov.qw.128",
-  "llvm.x86.avx512.mask.pmov.qw.256",
-  "llvm.x86.avx512.mask.pmov.qw.512",
-  "llvm.x86.avx512.mask.pmov.qw.mem.128",
-  "llvm.x86.avx512.mask.pmov.qw.mem.256",
-  "llvm.x86.avx512.mask.pmov.qw.mem.512",
-  "llvm.x86.avx512.mask.pmov.wb.128",
-  "llvm.x86.avx512.mask.pmov.wb.256",
-  "llvm.x86.avx512.mask.pmov.wb.512",
-  "llvm.x86.avx512.mask.pmov.wb.mem.128",
-  "llvm.x86.avx512.mask.pmov.wb.mem.256",
-  "llvm.x86.avx512.mask.pmov.wb.mem.512",
-  "llvm.x86.avx512.mask.pmovs.db.128",
-  "llvm.x86.avx512.mask.pmovs.db.256",
-  "llvm.x86.avx512.mask.pmovs.db.512",
-  "llvm.x86.avx512.mask.pmovs.db.mem.128",
-  "llvm.x86.avx512.mask.pmovs.db.mem.256",
-  "llvm.x86.avx512.mask.pmovs.db.mem.512",
-  "llvm.x86.avx512.mask.pmovs.dw.128",
-  "llvm.x86.avx512.mask.pmovs.dw.256",
-  "llvm.x86.avx512.mask.pmovs.dw.512",
-  "llvm.x86.avx512.mask.pmovs.dw.mem.128",
-  "llvm.x86.avx512.mask.pmovs.dw.mem.256",
-  "llvm.x86.avx512.mask.pmovs.dw.mem.512",
-  "llvm.x86.avx512.mask.pmovs.qb.128",
-  "llvm.x86.avx512.mask.pmovs.qb.256",
-  "llvm.x86.avx512.mask.pmovs.qb.512",
-  "llvm.x86.avx512.mask.pmovs.qb.mem.128",
-  "llvm.x86.avx512.mask.pmovs.qb.mem.256",
-  "llvm.x86.avx512.mask.pmovs.qb.mem.512",
-  "llvm.x86.avx512.mask.pmovs.qd.128",
-  "llvm.x86.avx512.mask.pmovs.qd.256",
-  "llvm.x86.avx512.mask.pmovs.qd.512",
-  "llvm.x86.avx512.mask.pmovs.qd.mem.128",
-  "llvm.x86.avx512.mask.pmovs.qd.mem.256",
-  "llvm.x86.avx512.mask.pmovs.qd.mem.512",
-  "llvm.x86.avx512.mask.pmovs.qw.128",
-  "llvm.x86.avx512.mask.pmovs.qw.256",
-  "llvm.x86.avx512.mask.pmovs.qw.512",
-  "llvm.x86.avx512.mask.pmovs.qw.mem.128",
-  "llvm.x86.avx512.mask.pmovs.qw.mem.256",
-  "llvm.x86.avx512.mask.pmovs.qw.mem.512",
-  "llvm.x86.avx512.mask.pmovs.wb.128",
-  "llvm.x86.avx512.mask.pmovs.wb.256",
-  "llvm.x86.avx512.mask.pmovs.wb.512",
-  "llvm.x86.avx512.mask.pmovs.wb.mem.128",
-  "llvm.x86.avx512.mask.pmovs.wb.mem.256",
-  "llvm.x86.avx512.mask.pmovs.wb.mem.512",
-  "llvm.x86.avx512.mask.pmovus.db.128",
-  "llvm.x86.avx512.mask.pmovus.db.256",
-  "llvm.x86.avx512.mask.pmovus.db.512",
-  "llvm.x86.avx512.mask.pmovus.db.mem.128",
-  "llvm.x86.avx512.mask.pmovus.db.mem.256",
-  "llvm.x86.avx512.mask.pmovus.db.mem.512",
-  "llvm.x86.avx512.mask.pmovus.dw.128",
-  "llvm.x86.avx512.mask.pmovus.dw.256",
-  "llvm.x86.avx512.mask.pmovus.dw.512",
-  "llvm.x86.avx512.mask.pmovus.dw.mem.128",
-  "llvm.x86.avx512.mask.pmovus.dw.mem.256",
-  "llvm.x86.avx512.mask.pmovus.dw.mem.512",
-  "llvm.x86.avx512.mask.pmovus.qb.128",
-  "llvm.x86.avx512.mask.pmovus.qb.256",
-  "llvm.x86.avx512.mask.pmovus.qb.512",
-  "llvm.x86.avx512.mask.pmovus.qb.mem.128",
-  "llvm.x86.avx512.mask.pmovus.qb.mem.256",
-  "llvm.x86.avx512.mask.pmovus.qb.mem.512",
-  "llvm.x86.avx512.mask.pmovus.qd.128",
-  "llvm.x86.avx512.mask.pmovus.qd.256",
-  "llvm.x86.avx512.mask.pmovus.qd.512",
-  "llvm.x86.avx512.mask.pmovus.qd.mem.128",
-  "llvm.x86.avx512.mask.pmovus.qd.mem.256",
-  "llvm.x86.avx512.mask.pmovus.qd.mem.512",
-  "llvm.x86.avx512.mask.pmovus.qw.128",
-  "llvm.x86.avx512.mask.pmovus.qw.256",
-  "llvm.x86.avx512.mask.pmovus.qw.512",
-  "llvm.x86.avx512.mask.pmovus.qw.mem.128",
-  "llvm.x86.avx512.mask.pmovus.qw.mem.256",
-  "llvm.x86.avx512.mask.pmovus.qw.mem.512",
-  "llvm.x86.avx512.mask.pmovus.wb.128",
-  "llvm.x86.avx512.mask.pmovus.wb.256",
-  "llvm.x86.avx512.mask.pmovus.wb.512",
-  "llvm.x86.avx512.mask.pmovus.wb.mem.128",
-  "llvm.x86.avx512.mask.pmovus.wb.mem.256",
-  "llvm.x86.avx512.mask.pmovus.wb.mem.512",
-  "llvm.x86.avx512.mask.pmultishift.qb.128",
-  "llvm.x86.avx512.mask.pmultishift.qb.256",
-  "llvm.x86.avx512.mask.pmultishift.qb.512",
-  "llvm.x86.avx512.mask.prol.d.128",
-  "llvm.x86.avx512.mask.prol.d.256",
-  "llvm.x86.avx512.mask.prol.d.512",
-  "llvm.x86.avx512.mask.prol.q.128",
-  "llvm.x86.avx512.mask.prol.q.256",
-  "llvm.x86.avx512.mask.prol.q.512",
-  "llvm.x86.avx512.mask.prolv.d.128",
-  "llvm.x86.avx512.mask.prolv.d.256",
-  "llvm.x86.avx512.mask.prolv.d.512",
-  "llvm.x86.avx512.mask.prolv.q.128",
-  "llvm.x86.avx512.mask.prolv.q.256",
-  "llvm.x86.avx512.mask.prolv.q.512",
-  "llvm.x86.avx512.mask.pror.d.128",
-  "llvm.x86.avx512.mask.pror.d.256",
-  "llvm.x86.avx512.mask.pror.d.512",
-  "llvm.x86.avx512.mask.pror.q.128",
-  "llvm.x86.avx512.mask.pror.q.256",
-  "llvm.x86.avx512.mask.pror.q.512",
-  "llvm.x86.avx512.mask.prorv.d.128",
-  "llvm.x86.avx512.mask.prorv.d.256",
-  "llvm.x86.avx512.mask.prorv.d.512",
-  "llvm.x86.avx512.mask.prorv.q.128",
-  "llvm.x86.avx512.mask.prorv.q.256",
-  "llvm.x86.avx512.mask.prorv.q.512",
-  "llvm.x86.avx512.mask.psubs.b.128",
-  "llvm.x86.avx512.mask.psubs.b.256",
-  "llvm.x86.avx512.mask.psubs.b.512",
-  "llvm.x86.avx512.mask.psubs.w.128",
-  "llvm.x86.avx512.mask.psubs.w.256",
-  "llvm.x86.avx512.mask.psubs.w.512",
-  "llvm.x86.avx512.mask.psubus.b.128",
-  "llvm.x86.avx512.mask.psubus.b.256",
-  "llvm.x86.avx512.mask.psubus.b.512",
-  "llvm.x86.avx512.mask.psubus.w.128",
-  "llvm.x86.avx512.mask.psubus.w.256",
-  "llvm.x86.avx512.mask.psubus.w.512",
-  "llvm.x86.avx512.mask.pternlog.d.128",
-  "llvm.x86.avx512.mask.pternlog.d.256",
-  "llvm.x86.avx512.mask.pternlog.d.512",
-  "llvm.x86.avx512.mask.pternlog.q.128",
-  "llvm.x86.avx512.mask.pternlog.q.256",
-  "llvm.x86.avx512.mask.pternlog.q.512",
-  "llvm.x86.avx512.mask.range.pd.128",
-  "llvm.x86.avx512.mask.range.pd.256",
-  "llvm.x86.avx512.mask.range.pd.512",
-  "llvm.x86.avx512.mask.range.ps.128",
-  "llvm.x86.avx512.mask.range.ps.256",
-  "llvm.x86.avx512.mask.range.ps.512",
-  "llvm.x86.avx512.mask.range.sd",
-  "llvm.x86.avx512.mask.range.ss",
-  "llvm.x86.avx512.mask.reduce.pd.128",
-  "llvm.x86.avx512.mask.reduce.pd.256",
-  "llvm.x86.avx512.mask.reduce.pd.512",
-  "llvm.x86.avx512.mask.reduce.ps.128",
-  "llvm.x86.avx512.mask.reduce.ps.256",
-  "llvm.x86.avx512.mask.reduce.ps.512",
-  "llvm.x86.avx512.mask.reduce.sd",
-  "llvm.x86.avx512.mask.reduce.ss",
-  "llvm.x86.avx512.mask.rndscale.pd.128",
-  "llvm.x86.avx512.mask.rndscale.pd.256",
-  "llvm.x86.avx512.mask.rndscale.pd.512",
-  "llvm.x86.avx512.mask.rndscale.ps.128",
-  "llvm.x86.avx512.mask.rndscale.ps.256",
-  "llvm.x86.avx512.mask.rndscale.ps.512",
-  "llvm.x86.avx512.mask.rndscale.sd",
-  "llvm.x86.avx512.mask.rndscale.ss",
-  "llvm.x86.avx512.mask.scalef.pd.128",
-  "llvm.x86.avx512.mask.scalef.pd.256",
-  "llvm.x86.avx512.mask.scalef.pd.512",
-  "llvm.x86.avx512.mask.scalef.ps.128",
-  "llvm.x86.avx512.mask.scalef.ps.256",
-  "llvm.x86.avx512.mask.scalef.ps.512",
-  "llvm.x86.avx512.mask.scalef.sd",
-  "llvm.x86.avx512.mask.scalef.ss",
-  "llvm.x86.avx512.mask.sqrt.pd.128",
-  "llvm.x86.avx512.mask.sqrt.pd.256",
-  "llvm.x86.avx512.mask.sqrt.pd.512",
-  "llvm.x86.avx512.mask.sqrt.ps.128",
-  "llvm.x86.avx512.mask.sqrt.ps.256",
-  "llvm.x86.avx512.mask.sqrt.ps.512",
-  "llvm.x86.avx512.mask.sqrt.sd",
-  "llvm.x86.avx512.mask.sqrt.ss",
-  "llvm.x86.avx512.mask.store.ss",
-  "llvm.x86.avx512.mask.sub.pd.512",
-  "llvm.x86.avx512.mask.sub.ps.512",
-  "llvm.x86.avx512.mask.sub.sd.round",
-  "llvm.x86.avx512.mask.sub.ss.round",
-  "llvm.x86.avx512.mask.vcvtph2ps.128",
-  "llvm.x86.avx512.mask.vcvtph2ps.256",
-  "llvm.x86.avx512.mask.vcvtph2ps.512",
-  "llvm.x86.avx512.mask.vcvtps2ph.128",
-  "llvm.x86.avx512.mask.vcvtps2ph.256",
-  "llvm.x86.avx512.mask.vcvtps2ph.512",
-  "llvm.x86.avx512.mask.vfmadd.pd.128",
-  "llvm.x86.avx512.mask.vfmadd.pd.256",
-  "llvm.x86.avx512.mask.vfmadd.pd.512",
-  "llvm.x86.avx512.mask.vfmadd.ps.128",
-  "llvm.x86.avx512.mask.vfmadd.ps.256",
-  "llvm.x86.avx512.mask.vfmadd.ps.512",
-  "llvm.x86.avx512.mask.vfmadd.sd",
-  "llvm.x86.avx512.mask.vfmadd.ss",
-  "llvm.x86.avx512.mask.vfmaddsub.pd.128",
-  "llvm.x86.avx512.mask.vfmaddsub.pd.256",
-  "llvm.x86.avx512.mask.vfmaddsub.pd.512",
-  "llvm.x86.avx512.mask.vfmaddsub.ps.128",
-  "llvm.x86.avx512.mask.vfmaddsub.ps.256",
-  "llvm.x86.avx512.mask.vfmaddsub.ps.512",
-  "llvm.x86.avx512.mask.vfnmadd.pd.128",
-  "llvm.x86.avx512.mask.vfnmadd.pd.256",
-  "llvm.x86.avx512.mask.vfnmadd.pd.512",
-  "llvm.x86.avx512.mask.vfnmadd.ps.128",
-  "llvm.x86.avx512.mask.vfnmadd.ps.256",
-  "llvm.x86.avx512.mask.vfnmadd.ps.512",
-  "llvm.x86.avx512.mask.vfnmsub.pd.128",
-  "llvm.x86.avx512.mask.vfnmsub.pd.256",
-  "llvm.x86.avx512.mask.vfnmsub.pd.512",
-  "llvm.x86.avx512.mask.vfnmsub.ps.128",
-  "llvm.x86.avx512.mask.vfnmsub.ps.256",
-  "llvm.x86.avx512.mask.vfnmsub.ps.512",
-  "llvm.x86.avx512.mask.vpdpbusd.128",
-  "llvm.x86.avx512.mask.vpdpbusd.256",
-  "llvm.x86.avx512.mask.vpdpbusd.512",
-  "llvm.x86.avx512.mask.vpdpbusds.128",
-  "llvm.x86.avx512.mask.vpdpbusds.256",
-  "llvm.x86.avx512.mask.vpdpbusds.512",
-  "llvm.x86.avx512.mask.vpdpwssd.128",
-  "llvm.x86.avx512.mask.vpdpwssd.256",
-  "llvm.x86.avx512.mask.vpdpwssd.512",
-  "llvm.x86.avx512.mask.vpdpwssds.128",
-  "llvm.x86.avx512.mask.vpdpwssds.256",
-  "llvm.x86.avx512.mask.vpdpwssds.512",
-  "llvm.x86.avx512.mask.vpermi2var.d.128",
-  "llvm.x86.avx512.mask.vpermi2var.d.256",
-  "llvm.x86.avx512.mask.vpermi2var.d.512",
-  "llvm.x86.avx512.mask.vpermi2var.hi.128",
-  "llvm.x86.avx512.mask.vpermi2var.hi.256",
-  "llvm.x86.avx512.mask.vpermi2var.hi.512",
-  "llvm.x86.avx512.mask.vpermi2var.pd.128",
-  "llvm.x86.avx512.mask.vpermi2var.pd.256",
-  "llvm.x86.avx512.mask.vpermi2var.pd.512",
-  "llvm.x86.avx512.mask.vpermi2var.ps.128",
-  "llvm.x86.avx512.mask.vpermi2var.ps.256",
-  "llvm.x86.avx512.mask.vpermi2var.ps.512",
-  "llvm.x86.avx512.mask.vpermi2var.q.128",
-  "llvm.x86.avx512.mask.vpermi2var.q.256",
-  "llvm.x86.avx512.mask.vpermi2var.q.512",
-  "llvm.x86.avx512.mask.vpermi2var.qi.128",
-  "llvm.x86.avx512.mask.vpermi2var.qi.256",
-  "llvm.x86.avx512.mask.vpermi2var.qi.512",
-  "llvm.x86.avx512.mask.vpermt2var.d.128",
-  "llvm.x86.avx512.mask.vpermt2var.d.256",
-  "llvm.x86.avx512.mask.vpermt2var.d.512",
-  "llvm.x86.avx512.mask.vpermt2var.hi.128",
-  "llvm.x86.avx512.mask.vpermt2var.hi.256",
-  "llvm.x86.avx512.mask.vpermt2var.hi.512",
-  "llvm.x86.avx512.mask.vpermt2var.pd.128",
-  "llvm.x86.avx512.mask.vpermt2var.pd.256",
-  "llvm.x86.avx512.mask.vpermt2var.pd.512",
-  "llvm.x86.avx512.mask.vpermt2var.ps.128",
-  "llvm.x86.avx512.mask.vpermt2var.ps.256",
-  "llvm.x86.avx512.mask.vpermt2var.ps.512",
-  "llvm.x86.avx512.mask.vpermt2var.q.128",
-  "llvm.x86.avx512.mask.vpermt2var.q.256",
-  "llvm.x86.avx512.mask.vpermt2var.q.512",
-  "llvm.x86.avx512.mask.vpermt2var.qi.128",
-  "llvm.x86.avx512.mask.vpermt2var.qi.256",
-  "llvm.x86.avx512.mask.vpermt2var.qi.512",
-  "llvm.x86.avx512.mask.vpmadd52h.uq.128",
-  "llvm.x86.avx512.mask.vpmadd52h.uq.256",
-  "llvm.x86.avx512.mask.vpmadd52h.uq.512",
-  "llvm.x86.avx512.mask.vpmadd52l.uq.128",
-  "llvm.x86.avx512.mask.vpmadd52l.uq.256",
-  "llvm.x86.avx512.mask.vpmadd52l.uq.512",
-  "llvm.x86.avx512.mask.vpshld.d.128",
-  "llvm.x86.avx512.mask.vpshld.d.256",
-  "llvm.x86.avx512.mask.vpshld.d.512",
-  "llvm.x86.avx512.mask.vpshld.q.128",
-  "llvm.x86.avx512.mask.vpshld.q.256",
-  "llvm.x86.avx512.mask.vpshld.q.512",
-  "llvm.x86.avx512.mask.vpshld.w.128",
-  "llvm.x86.avx512.mask.vpshld.w.256",
-  "llvm.x86.avx512.mask.vpshld.w.512",
-  "llvm.x86.avx512.mask.vpshldv.d.128",
-  "llvm.x86.avx512.mask.vpshldv.d.256",
-  "llvm.x86.avx512.mask.vpshldv.d.512",
-  "llvm.x86.avx512.mask.vpshldv.q.128",
-  "llvm.x86.avx512.mask.vpshldv.q.256",
-  "llvm.x86.avx512.mask.vpshldv.q.512",
-  "llvm.x86.avx512.mask.vpshldv.w.128",
-  "llvm.x86.avx512.mask.vpshldv.w.256",
-  "llvm.x86.avx512.mask.vpshldv.w.512",
-  "llvm.x86.avx512.mask.vpshrd.d.128",
-  "llvm.x86.avx512.mask.vpshrd.d.256",
-  "llvm.x86.avx512.mask.vpshrd.d.512",
-  "llvm.x86.avx512.mask.vpshrd.q.128",
-  "llvm.x86.avx512.mask.vpshrd.q.256",
-  "llvm.x86.avx512.mask.vpshrd.q.512",
-  "llvm.x86.avx512.mask.vpshrd.w.128",
-  "llvm.x86.avx512.mask.vpshrd.w.256",
-  "llvm.x86.avx512.mask.vpshrd.w.512",
-  "llvm.x86.avx512.mask.vpshrdv.d.128",
-  "llvm.x86.avx512.mask.vpshrdv.d.256",
-  "llvm.x86.avx512.mask.vpshrdv.d.512",
-  "llvm.x86.avx512.mask.vpshrdv.q.128",
-  "llvm.x86.avx512.mask.vpshrdv.q.256",
-  "llvm.x86.avx512.mask.vpshrdv.q.512",
-  "llvm.x86.avx512.mask.vpshrdv.w.128",
-  "llvm.x86.avx512.mask.vpshrdv.w.256",
-  "llvm.x86.avx512.mask.vpshrdv.w.512",
-  "llvm.x86.avx512.mask.vpshufbitqmb.128",
-  "llvm.x86.avx512.mask.vpshufbitqmb.256",
-  "llvm.x86.avx512.mask.vpshufbitqmb.512",
-  "llvm.x86.avx512.mask3.vfmadd.pd.128",
-  "llvm.x86.avx512.mask3.vfmadd.pd.256",
-  "llvm.x86.avx512.mask3.vfmadd.pd.512",
-  "llvm.x86.avx512.mask3.vfmadd.ps.128",
-  "llvm.x86.avx512.mask3.vfmadd.ps.256",
-  "llvm.x86.avx512.mask3.vfmadd.ps.512",
-  "llvm.x86.avx512.mask3.vfmadd.sd",
-  "llvm.x86.avx512.mask3.vfmadd.ss",
-  "llvm.x86.avx512.mask3.vfmaddsub.pd.128",
-  "llvm.x86.avx512.mask3.vfmaddsub.pd.256",
-  "llvm.x86.avx512.mask3.vfmaddsub.pd.512",
-  "llvm.x86.avx512.mask3.vfmaddsub.ps.128",
-  "llvm.x86.avx512.mask3.vfmaddsub.ps.256",
-  "llvm.x86.avx512.mask3.vfmaddsub.ps.512",
-  "llvm.x86.avx512.mask3.vfmsub.pd.128",
-  "llvm.x86.avx512.mask3.vfmsub.pd.256",
-  "llvm.x86.avx512.mask3.vfmsub.pd.512",
-  "llvm.x86.avx512.mask3.vfmsub.ps.128",
-  "llvm.x86.avx512.mask3.vfmsub.ps.256",
-  "llvm.x86.avx512.mask3.vfmsub.ps.512",
-  "llvm.x86.avx512.mask3.vfmsub.sd",
-  "llvm.x86.avx512.mask3.vfmsub.ss",
-  "llvm.x86.avx512.mask3.vfmsubadd.pd.128",
-  "llvm.x86.avx512.mask3.vfmsubadd.pd.256",
-  "llvm.x86.avx512.mask3.vfmsubadd.pd.512",
-  "llvm.x86.avx512.mask3.vfmsubadd.ps.128",
-  "llvm.x86.avx512.mask3.vfmsubadd.ps.256",
-  "llvm.x86.avx512.mask3.vfmsubadd.ps.512",
-  "llvm.x86.avx512.mask3.vfnmsub.pd.128",
-  "llvm.x86.avx512.mask3.vfnmsub.pd.256",
-  "llvm.x86.avx512.mask3.vfnmsub.pd.512",
-  "llvm.x86.avx512.mask3.vfnmsub.ps.128",
-  "llvm.x86.avx512.mask3.vfnmsub.ps.256",
-  "llvm.x86.avx512.mask3.vfnmsub.ps.512",
-  "llvm.x86.avx512.mask3.vfnmsub.sd",
-  "llvm.x86.avx512.mask3.vfnmsub.ss",
-  "llvm.x86.avx512.maskz.fixupimm.pd.128",
-  "llvm.x86.avx512.maskz.fixupimm.pd.256",
-  "llvm.x86.avx512.maskz.fixupimm.pd.512",
-  "llvm.x86.avx512.maskz.fixupimm.ps.128",
-  "llvm.x86.avx512.maskz.fixupimm.ps.256",
-  "llvm.x86.avx512.maskz.fixupimm.ps.512",
-  "llvm.x86.avx512.maskz.fixupimm.sd",
-  "llvm.x86.avx512.maskz.fixupimm.ss",
-  "llvm.x86.avx512.maskz.pternlog.d.128",
-  "llvm.x86.avx512.maskz.pternlog.d.256",
-  "llvm.x86.avx512.maskz.pternlog.d.512",
-  "llvm.x86.avx512.maskz.pternlog.q.128",
-  "llvm.x86.avx512.maskz.pternlog.q.256",
-  "llvm.x86.avx512.maskz.pternlog.q.512",
-  "llvm.x86.avx512.maskz.vfmadd.pd.128",
-  "llvm.x86.avx512.maskz.vfmadd.pd.256",
-  "llvm.x86.avx512.maskz.vfmadd.pd.512",
-  "llvm.x86.avx512.maskz.vfmadd.ps.128",
-  "llvm.x86.avx512.maskz.vfmadd.ps.256",
-  "llvm.x86.avx512.maskz.vfmadd.ps.512",
-  "llvm.x86.avx512.maskz.vfmadd.sd",
-  "llvm.x86.avx512.maskz.vfmadd.ss",
-  "llvm.x86.avx512.maskz.vfmaddsub.pd.128",
-  "llvm.x86.avx512.maskz.vfmaddsub.pd.256",
-  "llvm.x86.avx512.maskz.vfmaddsub.pd.512",
-  "llvm.x86.avx512.maskz.vfmaddsub.ps.128",
-  "llvm.x86.avx512.maskz.vfmaddsub.ps.256",
-  "llvm.x86.avx512.maskz.vfmaddsub.ps.512",
-  "llvm.x86.avx512.maskz.vpdpbusd.128",
-  "llvm.x86.avx512.maskz.vpdpbusd.256",
-  "llvm.x86.avx512.maskz.vpdpbusd.512",
-  "llvm.x86.avx512.maskz.vpdpbusds.128",
-  "llvm.x86.avx512.maskz.vpdpbusds.256",
-  "llvm.x86.avx512.maskz.vpdpbusds.512",
-  "llvm.x86.avx512.maskz.vpdpwssd.128",
-  "llvm.x86.avx512.maskz.vpdpwssd.256",
-  "llvm.x86.avx512.maskz.vpdpwssd.512",
-  "llvm.x86.avx512.maskz.vpdpwssds.128",
-  "llvm.x86.avx512.maskz.vpdpwssds.256",
-  "llvm.x86.avx512.maskz.vpdpwssds.512",
-  "llvm.x86.avx512.maskz.vpermt2var.d.128",
-  "llvm.x86.avx512.maskz.vpermt2var.d.256",
-  "llvm.x86.avx512.maskz.vpermt2var.d.512",
-  "llvm.x86.avx512.maskz.vpermt2var.hi.128",
-  "llvm.x86.avx512.maskz.vpermt2var.hi.256",
-  "llvm.x86.avx512.maskz.vpermt2var.hi.512",
-  "llvm.x86.avx512.maskz.vpermt2var.pd.128",
-  "llvm.x86.avx512.maskz.vpermt2var.pd.256",
-  "llvm.x86.avx512.maskz.vpermt2var.pd.512",
-  "llvm.x86.avx512.maskz.vpermt2var.ps.128",
-  "llvm.x86.avx512.maskz.vpermt2var.ps.256",
-  "llvm.x86.avx512.maskz.vpermt2var.ps.512",
-  "llvm.x86.avx512.maskz.vpermt2var.q.128",
-  "llvm.x86.avx512.maskz.vpermt2var.q.256",
-  "llvm.x86.avx512.maskz.vpermt2var.q.512",
-  "llvm.x86.avx512.maskz.vpermt2var.qi.128",
-  "llvm.x86.avx512.maskz.vpermt2var.qi.256",
-  "llvm.x86.avx512.maskz.vpermt2var.qi.512",
-  "llvm.x86.avx512.maskz.vpmadd52h.uq.128",
-  "llvm.x86.avx512.maskz.vpmadd52h.uq.256",
-  "llvm.x86.avx512.maskz.vpmadd52h.uq.512",
-  "llvm.x86.avx512.maskz.vpmadd52l.uq.128",
-  "llvm.x86.avx512.maskz.vpmadd52l.uq.256",
-  "llvm.x86.avx512.maskz.vpmadd52l.uq.512",
-  "llvm.x86.avx512.maskz.vpshldv.d.128",
-  "llvm.x86.avx512.maskz.vpshldv.d.256",
-  "llvm.x86.avx512.maskz.vpshldv.d.512",
-  "llvm.x86.avx512.maskz.vpshldv.q.128",
-  "llvm.x86.avx512.maskz.vpshldv.q.256",
-  "llvm.x86.avx512.maskz.vpshldv.q.512",
-  "llvm.x86.avx512.maskz.vpshldv.w.128",
-  "llvm.x86.avx512.maskz.vpshldv.w.256",
-  "llvm.x86.avx512.maskz.vpshldv.w.512",
-  "llvm.x86.avx512.maskz.vpshrdv.d.128",
-  "llvm.x86.avx512.maskz.vpshrdv.d.256",
-  "llvm.x86.avx512.maskz.vpshrdv.d.512",
-  "llvm.x86.avx512.maskz.vpshrdv.q.128",
-  "llvm.x86.avx512.maskz.vpshrdv.q.256",
-  "llvm.x86.avx512.maskz.vpshrdv.q.512",
-  "llvm.x86.avx512.maskz.vpshrdv.w.128",
-  "llvm.x86.avx512.maskz.vpshrdv.w.256",
-  "llvm.x86.avx512.maskz.vpshrdv.w.512",
-  "llvm.x86.avx512.packssdw.512",
-  "llvm.x86.avx512.packsswb.512",
-  "llvm.x86.avx512.packusdw.512",
-  "llvm.x86.avx512.packuswb.512",
-  "llvm.x86.avx512.pmul.dq.512",
-  "llvm.x86.avx512.pmul.hr.sw.512",
-  "llvm.x86.avx512.pmulh.w.512",
-  "llvm.x86.avx512.pmulhu.w.512",
-  "llvm.x86.avx512.pmulu.dq.512",
-  "llvm.x86.avx512.psad.bw.512",
-  "llvm.x86.avx512.pshuf.b.512",
-  "llvm.x86.avx512.psll.d.512",
-  "llvm.x86.avx512.psll.q.512",
-  "llvm.x86.avx512.psll.w.512",
-  "llvm.x86.avx512.pslli.d.512",
-  "llvm.x86.avx512.pslli.q.512",
-  "llvm.x86.avx512.pslli.w.512",
-  "llvm.x86.avx512.psllv.d.512",
-  "llvm.x86.avx512.psllv.q.512",
-  "llvm.x86.avx512.psllv.w.128",
-  "llvm.x86.avx512.psllv.w.256",
-  "llvm.x86.avx512.psllv.w.512",
-  "llvm.x86.avx512.psra.d.512",
-  "llvm.x86.avx512.psra.q.128",
-  "llvm.x86.avx512.psra.q.256",
-  "llvm.x86.avx512.psra.q.512",
-  "llvm.x86.avx512.psra.w.512",
-  "llvm.x86.avx512.psrai.d.512",
-  "llvm.x86.avx512.psrai.q.128",
-  "llvm.x86.avx512.psrai.q.256",
-  "llvm.x86.avx512.psrai.q.512",
-  "llvm.x86.avx512.psrai.w.512",
-  "llvm.x86.avx512.psrav.d.512",
-  "llvm.x86.avx512.psrav.q.128",
-  "llvm.x86.avx512.psrav.q.256",
-  "llvm.x86.avx512.psrav.q.512",
-  "llvm.x86.avx512.psrav.w.128",
-  "llvm.x86.avx512.psrav.w.256",
-  "llvm.x86.avx512.psrav.w.512",
-  "llvm.x86.avx512.psrl.d.512",
-  "llvm.x86.avx512.psrl.q.512",
-  "llvm.x86.avx512.psrl.w.512",
-  "llvm.x86.avx512.psrli.d.512",
-  "llvm.x86.avx512.psrli.q.512",
-  "llvm.x86.avx512.psrli.w.512",
-  "llvm.x86.avx512.psrlv.d.512",
-  "llvm.x86.avx512.psrlv.q.512",
-  "llvm.x86.avx512.psrlv.w.128",
-  "llvm.x86.avx512.psrlv.w.256",
-  "llvm.x86.avx512.psrlv.w.512",
-  "llvm.x86.avx512.rcp14.pd.128",
-  "llvm.x86.avx512.rcp14.pd.256",
-  "llvm.x86.avx512.rcp14.pd.512",
-  "llvm.x86.avx512.rcp14.ps.128",
-  "llvm.x86.avx512.rcp14.ps.256",
-  "llvm.x86.avx512.rcp14.ps.512",
-  "llvm.x86.avx512.rcp14.sd",
-  "llvm.x86.avx512.rcp14.ss",
-  "llvm.x86.avx512.rcp28.pd",
-  "llvm.x86.avx512.rcp28.ps",
-  "llvm.x86.avx512.rcp28.sd",
-  "llvm.x86.avx512.rcp28.ss",
-  "llvm.x86.avx512.rsqrt14.pd.128",
-  "llvm.x86.avx512.rsqrt14.pd.256",
-  "llvm.x86.avx512.rsqrt14.pd.512",
-  "llvm.x86.avx512.rsqrt14.ps.128",
-  "llvm.x86.avx512.rsqrt14.ps.256",
-  "llvm.x86.avx512.rsqrt14.ps.512",
-  "llvm.x86.avx512.rsqrt14.sd",
-  "llvm.x86.avx512.rsqrt14.ss",
-  "llvm.x86.avx512.rsqrt28.pd",
-  "llvm.x86.avx512.rsqrt28.ps",
-  "llvm.x86.avx512.rsqrt28.sd",
-  "llvm.x86.avx512.rsqrt28.ss",
-  "llvm.x86.avx512.scatter.dpd.512",
-  "llvm.x86.avx512.scatter.dpi.512",
-  "llvm.x86.avx512.scatter.dpq.512",
-  "llvm.x86.avx512.scatter.dps.512",
-  "llvm.x86.avx512.scatter.qpd.512",
-  "llvm.x86.avx512.scatter.qpi.512",
-  "llvm.x86.avx512.scatter.qpq.512",
-  "llvm.x86.avx512.scatter.qps.512",
-  "llvm.x86.avx512.scatterdiv2.df",
-  "llvm.x86.avx512.scatterdiv2.di",
-  "llvm.x86.avx512.scatterdiv4.df",
-  "llvm.x86.avx512.scatterdiv4.di",
-  "llvm.x86.avx512.scatterdiv4.sf",
-  "llvm.x86.avx512.scatterdiv4.si",
-  "llvm.x86.avx512.scatterdiv8.sf",
-  "llvm.x86.avx512.scatterdiv8.si",
-  "llvm.x86.avx512.scatterpf.dpd.512",
-  "llvm.x86.avx512.scatterpf.dps.512",
-  "llvm.x86.avx512.scatterpf.qpd.512",
-  "llvm.x86.avx512.scatterpf.qps.512",
-  "llvm.x86.avx512.scattersiv2.df",
-  "llvm.x86.avx512.scattersiv2.di",
-  "llvm.x86.avx512.scattersiv4.df",
-  "llvm.x86.avx512.scattersiv4.di",
-  "llvm.x86.avx512.scattersiv4.sf",
-  "llvm.x86.avx512.scattersiv4.si",
-  "llvm.x86.avx512.scattersiv8.sf",
-  "llvm.x86.avx512.scattersiv8.si",
-  "llvm.x86.avx512.vbroadcast.sd.512",
-  "llvm.x86.avx512.vbroadcast.ss.512",
-  "llvm.x86.avx512.vcomi.sd",
-  "llvm.x86.avx512.vcomi.ss",
-  "llvm.x86.avx512.vcvtsd2si32",
-  "llvm.x86.avx512.vcvtsd2si64",
-  "llvm.x86.avx512.vcvtsd2usi32",
-  "llvm.x86.avx512.vcvtsd2usi64",
-  "llvm.x86.avx512.vcvtss2si32",
-  "llvm.x86.avx512.vcvtss2si64",
-  "llvm.x86.avx512.vcvtss2usi32",
-  "llvm.x86.avx512.vcvtss2usi64",
-  "llvm.x86.avx512.vpermilvar.pd.512",
-  "llvm.x86.avx512.vpermilvar.ps.512",
-  "llvm.x86.bmi.bextr.32",
-  "llvm.x86.bmi.bextr.64",
-  "llvm.x86.bmi.bzhi.32",
-  "llvm.x86.bmi.bzhi.64",
-  "llvm.x86.bmi.pdep.32",
-  "llvm.x86.bmi.pdep.64",
-  "llvm.x86.bmi.pext.32",
-  "llvm.x86.bmi.pext.64",
-  "llvm.x86.clflushopt",
-  "llvm.x86.clrssbsy",
-  "llvm.x86.clwb",
-  "llvm.x86.clzero",
-  "llvm.x86.flags.read.u32",
-  "llvm.x86.flags.read.u64",
-  "llvm.x86.flags.write.u32",
-  "llvm.x86.flags.write.u64",
-  "llvm.x86.fma.vfmadd.pd",
-  "llvm.x86.fma.vfmadd.pd.256",
-  "llvm.x86.fma.vfmadd.ps",
-  "llvm.x86.fma.vfmadd.ps.256",
-  "llvm.x86.fma.vfmadd.sd",
-  "llvm.x86.fma.vfmadd.ss",
-  "llvm.x86.fma.vfmaddsub.pd",
-  "llvm.x86.fma.vfmaddsub.pd.256",
-  "llvm.x86.fma.vfmaddsub.ps",
-  "llvm.x86.fma.vfmaddsub.ps.256",
-  "llvm.x86.fma.vfmsub.pd",
-  "llvm.x86.fma.vfmsub.pd.256",
-  "llvm.x86.fma.vfmsub.ps",
-  "llvm.x86.fma.vfmsub.ps.256",
-  "llvm.x86.fma.vfmsub.sd",
-  "llvm.x86.fma.vfmsub.ss",
-  "llvm.x86.fma.vfmsubadd.pd",
-  "llvm.x86.fma.vfmsubadd.pd.256",
-  "llvm.x86.fma.vfmsubadd.ps",
-  "llvm.x86.fma.vfmsubadd.ps.256",
-  "llvm.x86.fma.vfnmadd.pd",
-  "llvm.x86.fma.vfnmadd.pd.256",
-  "llvm.x86.fma.vfnmadd.ps",
-  "llvm.x86.fma.vfnmadd.ps.256",
-  "llvm.x86.fma.vfnmadd.sd",
-  "llvm.x86.fma.vfnmadd.ss",
-  "llvm.x86.fma.vfnmsub.pd",
-  "llvm.x86.fma.vfnmsub.pd.256",
-  "llvm.x86.fma.vfnmsub.ps",
-  "llvm.x86.fma.vfnmsub.ps.256",
-  "llvm.x86.fma.vfnmsub.sd",
-  "llvm.x86.fma.vfnmsub.ss",
-  "llvm.x86.fma4.vfmadd.sd",
-  "llvm.x86.fma4.vfmadd.ss",
-  "llvm.x86.fxrstor",
-  "llvm.x86.fxrstor64",
-  "llvm.x86.fxsave",
-  "llvm.x86.fxsave64",
-  "llvm.x86.incsspd",
-  "llvm.x86.incsspq",
-  "llvm.x86.int",
-  "llvm.x86.llwpcb",
-  "llvm.x86.lwpins32",
-  "llvm.x86.lwpins64",
-  "llvm.x86.lwpval32",
-  "llvm.x86.lwpval64",
-  "llvm.x86.mmx.emms",
-  "llvm.x86.mmx.femms",
-  "llvm.x86.mmx.maskmovq",
-  "llvm.x86.mmx.movnt.dq",
-  "llvm.x86.mmx.packssdw",
-  "llvm.x86.mmx.packsswb",
-  "llvm.x86.mmx.packuswb",
-  "llvm.x86.mmx.padd.b",
-  "llvm.x86.mmx.padd.d",
-  "llvm.x86.mmx.padd.q",
-  "llvm.x86.mmx.padd.w",
-  "llvm.x86.mmx.padds.b",
-  "llvm.x86.mmx.padds.w",
-  "llvm.x86.mmx.paddus.b",
-  "llvm.x86.mmx.paddus.w",
-  "llvm.x86.mmx.palignr.b",
-  "llvm.x86.mmx.pand",
-  "llvm.x86.mmx.pandn",
-  "llvm.x86.mmx.pavg.b",
-  "llvm.x86.mmx.pavg.w",
-  "llvm.x86.mmx.pcmpeq.b",
-  "llvm.x86.mmx.pcmpeq.d",
-  "llvm.x86.mmx.pcmpeq.w",
-  "llvm.x86.mmx.pcmpgt.b",
-  "llvm.x86.mmx.pcmpgt.d",
-  "llvm.x86.mmx.pcmpgt.w",
-  "llvm.x86.mmx.pextr.w",
-  "llvm.x86.mmx.pinsr.w",
-  "llvm.x86.mmx.pmadd.wd",
-  "llvm.x86.mmx.pmaxs.w",
-  "llvm.x86.mmx.pmaxu.b",
-  "llvm.x86.mmx.pmins.w",
-  "llvm.x86.mmx.pminu.b",
-  "llvm.x86.mmx.pmovmskb",
-  "llvm.x86.mmx.pmulh.w",
-  "llvm.x86.mmx.pmulhu.w",
-  "llvm.x86.mmx.pmull.w",
-  "llvm.x86.mmx.pmulu.dq",
-  "llvm.x86.mmx.por",
-  "llvm.x86.mmx.psad.bw",
-  "llvm.x86.mmx.psll.d",
-  "llvm.x86.mmx.psll.q",
-  "llvm.x86.mmx.psll.w",
-  "llvm.x86.mmx.pslli.d",
-  "llvm.x86.mmx.pslli.q",
-  "llvm.x86.mmx.pslli.w",
-  "llvm.x86.mmx.psra.d",
-  "llvm.x86.mmx.psra.w",
-  "llvm.x86.mmx.psrai.d",
-  "llvm.x86.mmx.psrai.w",
-  "llvm.x86.mmx.psrl.d",
-  "llvm.x86.mmx.psrl.q",
-  "llvm.x86.mmx.psrl.w",
-  "llvm.x86.mmx.psrli.d",
-  "llvm.x86.mmx.psrli.q",
-  "llvm.x86.mmx.psrli.w",
-  "llvm.x86.mmx.psub.b",
-  "llvm.x86.mmx.psub.d",
-  "llvm.x86.mmx.psub.q",
-  "llvm.x86.mmx.psub.w",
-  "llvm.x86.mmx.psubs.b",
-  "llvm.x86.mmx.psubs.w",
-  "llvm.x86.mmx.psubus.b",
-  "llvm.x86.mmx.psubus.w",
-  "llvm.x86.mmx.punpckhbw",
-  "llvm.x86.mmx.punpckhdq",
-  "llvm.x86.mmx.punpckhwd",
-  "llvm.x86.mmx.punpcklbw",
-  "llvm.x86.mmx.punpckldq",
-  "llvm.x86.mmx.punpcklwd",
-  "llvm.x86.mmx.pxor",
-  "llvm.x86.monitorx",
-  "llvm.x86.mwaitx",
-  "llvm.x86.pclmulqdq",
-  "llvm.x86.pclmulqdq.256",
-  "llvm.x86.pclmulqdq.512",
-  "llvm.x86.rdfsbase.32",
-  "llvm.x86.rdfsbase.64",
-  "llvm.x86.rdgsbase.32",
-  "llvm.x86.rdgsbase.64",
-  "llvm.x86.rdpid",
-  "llvm.x86.rdpkru",
-  "llvm.x86.rdpmc",
-  "llvm.x86.rdrand.16",
-  "llvm.x86.rdrand.32",
-  "llvm.x86.rdrand.64",
-  "llvm.x86.rdseed.16",
-  "llvm.x86.rdseed.32",
-  "llvm.x86.rdseed.64",
-  "llvm.x86.rdsspd",
-  "llvm.x86.rdsspq",
-  "llvm.x86.rdtsc",
-  "llvm.x86.rdtscp",
-  "llvm.x86.rstorssp",
-  "llvm.x86.saveprevssp",
-  "llvm.x86.seh.ehguard",
-  "llvm.x86.seh.ehregnode",
-  "llvm.x86.seh.lsda",
-  "llvm.x86.seh.recoverfp",
-  "llvm.x86.setssbsy",
-  "llvm.x86.sha1msg1",
-  "llvm.x86.sha1msg2",
-  "llvm.x86.sha1nexte",
-  "llvm.x86.sha1rnds4",
-  "llvm.x86.sha256msg1",
-  "llvm.x86.sha256msg2",
-  "llvm.x86.sha256rnds2",
-  "llvm.x86.slwpcb",
-  "llvm.x86.sse.cmp.ps",
-  "llvm.x86.sse.cmp.ss",
-  "llvm.x86.sse.comieq.ss",
-  "llvm.x86.sse.comige.ss",
-  "llvm.x86.sse.comigt.ss",
-  "llvm.x86.sse.comile.ss",
-  "llvm.x86.sse.comilt.ss",
-  "llvm.x86.sse.comineq.ss",
-  "llvm.x86.sse.cvtpd2pi",
-  "llvm.x86.sse.cvtpi2pd",
-  "llvm.x86.sse.cvtpi2ps",
-  "llvm.x86.sse.cvtps2pi",
-  "llvm.x86.sse.cvtsi2ss",
-  "llvm.x86.sse.cvtsi642ss",
-  "llvm.x86.sse.cvtss2si",
-  "llvm.x86.sse.cvtss2si64",
-  "llvm.x86.sse.cvttpd2pi",
-  "llvm.x86.sse.cvttps2pi",
-  "llvm.x86.sse.cvttss2si",
-  "llvm.x86.sse.cvttss2si64",
-  "llvm.x86.sse.ldmxcsr",
-  "llvm.x86.sse.max.ps",
-  "llvm.x86.sse.max.ss",
-  "llvm.x86.sse.min.ps",
-  "llvm.x86.sse.min.ss",
-  "llvm.x86.sse.movmsk.ps",
-  "llvm.x86.sse.pshuf.w",
-  "llvm.x86.sse.rcp.ps",
-  "llvm.x86.sse.rcp.ss",
-  "llvm.x86.sse.rsqrt.ps",
-  "llvm.x86.sse.rsqrt.ss",
-  "llvm.x86.sse.sfence",
-  "llvm.x86.sse.sqrt.ps",
-  "llvm.x86.sse.sqrt.ss",
-  "llvm.x86.sse.stmxcsr",
-  "llvm.x86.sse.ucomieq.ss",
-  "llvm.x86.sse.ucomige.ss",
-  "llvm.x86.sse.ucomigt.ss",
-  "llvm.x86.sse.ucomile.ss",
-  "llvm.x86.sse.ucomilt.ss",
-  "llvm.x86.sse.ucomineq.ss",
-  "llvm.x86.sse2.clflush",
-  "llvm.x86.sse2.cmp.pd",
-  "llvm.x86.sse2.cmp.sd",
-  "llvm.x86.sse2.comieq.sd",
-  "llvm.x86.sse2.comige.sd",
-  "llvm.x86.sse2.comigt.sd",
-  "llvm.x86.sse2.comile.sd",
-  "llvm.x86.sse2.comilt.sd",
-  "llvm.x86.sse2.comineq.sd",
-  "llvm.x86.sse2.cvtdq2ps",
-  "llvm.x86.sse2.cvtpd2dq",
-  "llvm.x86.sse2.cvtpd2ps",
-  "llvm.x86.sse2.cvtps2dq",
-  "llvm.x86.sse2.cvtsd2si",
-  "llvm.x86.sse2.cvtsd2si64",
-  "llvm.x86.sse2.cvtsd2ss",
-  "llvm.x86.sse2.cvtsi2sd",
-  "llvm.x86.sse2.cvtsi642sd",
-  "llvm.x86.sse2.cvtss2sd",
-  "llvm.x86.sse2.cvttpd2dq",
-  "llvm.x86.sse2.cvttps2dq",
-  "llvm.x86.sse2.cvttsd2si",
-  "llvm.x86.sse2.cvttsd2si64",
-  "llvm.x86.sse2.lfence",
-  "llvm.x86.sse2.maskmov.dqu",
-  "llvm.x86.sse2.max.pd",
-  "llvm.x86.sse2.max.sd",
-  "llvm.x86.sse2.mfence",
-  "llvm.x86.sse2.min.pd",
-  "llvm.x86.sse2.min.sd",
-  "llvm.x86.sse2.movmsk.pd",
-  "llvm.x86.sse2.packssdw.128",
-  "llvm.x86.sse2.packsswb.128",
-  "llvm.x86.sse2.packuswb.128",
-  "llvm.x86.sse2.padds.b",
-  "llvm.x86.sse2.padds.w",
-  "llvm.x86.sse2.paddus.b",
-  "llvm.x86.sse2.paddus.w",
-  "llvm.x86.sse2.pause",
-  "llvm.x86.sse2.pmadd.wd",
-  "llvm.x86.sse2.pmovmskb.128",
-  "llvm.x86.sse2.pmulh.w",
-  "llvm.x86.sse2.pmulhu.w",
-  "llvm.x86.sse2.pmulu.dq",
-  "llvm.x86.sse2.psad.bw",
-  "llvm.x86.sse2.psll.d",
-  "llvm.x86.sse2.psll.q",
-  "llvm.x86.sse2.psll.w",
-  "llvm.x86.sse2.pslli.d",
-  "llvm.x86.sse2.pslli.q",
-  "llvm.x86.sse2.pslli.w",
-  "llvm.x86.sse2.psra.d",
-  "llvm.x86.sse2.psra.w",
-  "llvm.x86.sse2.psrai.d",
-  "llvm.x86.sse2.psrai.w",
-  "llvm.x86.sse2.psrl.d",
-  "llvm.x86.sse2.psrl.q",
-  "llvm.x86.sse2.psrl.w",
-  "llvm.x86.sse2.psrli.d",
-  "llvm.x86.sse2.psrli.q",
-  "llvm.x86.sse2.psrli.w",
-  "llvm.x86.sse2.psubs.b",
-  "llvm.x86.sse2.psubs.w",
-  "llvm.x86.sse2.psubus.b",
-  "llvm.x86.sse2.psubus.w",
-  "llvm.x86.sse2.sqrt.pd",
-  "llvm.x86.sse2.sqrt.sd",
-  "llvm.x86.sse2.ucomieq.sd",
-  "llvm.x86.sse2.ucomige.sd",
-  "llvm.x86.sse2.ucomigt.sd",
-  "llvm.x86.sse2.ucomile.sd",
-  "llvm.x86.sse2.ucomilt.sd",
-  "llvm.x86.sse2.ucomineq.sd",
-  "llvm.x86.sse3.addsub.pd",
-  "llvm.x86.sse3.addsub.ps",
-  "llvm.x86.sse3.hadd.pd",
-  "llvm.x86.sse3.hadd.ps",
-  "llvm.x86.sse3.hsub.pd",
-  "llvm.x86.sse3.hsub.ps",
-  "llvm.x86.sse3.ldu.dq",
-  "llvm.x86.sse3.monitor",
-  "llvm.x86.sse3.mwait",
-  "llvm.x86.sse41.blendvpd",
-  "llvm.x86.sse41.blendvps",
-  "llvm.x86.sse41.dppd",
-  "llvm.x86.sse41.dpps",
-  "llvm.x86.sse41.insertps",
-  "llvm.x86.sse41.mpsadbw",
-  "llvm.x86.sse41.packusdw",
-  "llvm.x86.sse41.pblendvb",
-  "llvm.x86.sse41.phminposuw",
-  "llvm.x86.sse41.pmuldq",
-  "llvm.x86.sse41.ptestc",
-  "llvm.x86.sse41.ptestnzc",
-  "llvm.x86.sse41.ptestz",
-  "llvm.x86.sse41.round.pd",
-  "llvm.x86.sse41.round.ps",
-  "llvm.x86.sse41.round.sd",
-  "llvm.x86.sse41.round.ss",
-  "llvm.x86.sse42.crc32.32.16",
-  "llvm.x86.sse42.crc32.32.32",
-  "llvm.x86.sse42.crc32.32.8",
-  "llvm.x86.sse42.crc32.64.64",
-  "llvm.x86.sse42.pcmpestri128",
-  "llvm.x86.sse42.pcmpestria128",
-  "llvm.x86.sse42.pcmpestric128",
-  "llvm.x86.sse42.pcmpestrio128",
-  "llvm.x86.sse42.pcmpestris128",
-  "llvm.x86.sse42.pcmpestriz128",
-  "llvm.x86.sse42.pcmpestrm128",
-  "llvm.x86.sse42.pcmpistri128",
-  "llvm.x86.sse42.pcmpistria128",
-  "llvm.x86.sse42.pcmpistric128",
-  "llvm.x86.sse42.pcmpistrio128",
-  "llvm.x86.sse42.pcmpistris128",
-  "llvm.x86.sse42.pcmpistriz128",
-  "llvm.x86.sse42.pcmpistrm128",
-  "llvm.x86.sse4a.extrq",
-  "llvm.x86.sse4a.extrqi",
-  "llvm.x86.sse4a.insertq",
-  "llvm.x86.sse4a.insertqi",
-  "llvm.x86.ssse3.pabs.b",
-  "llvm.x86.ssse3.pabs.d",
-  "llvm.x86.ssse3.pabs.w",
-  "llvm.x86.ssse3.phadd.d",
-  "llvm.x86.ssse3.phadd.d.128",
-  "llvm.x86.ssse3.phadd.sw",
-  "llvm.x86.ssse3.phadd.sw.128",
-  "llvm.x86.ssse3.phadd.w",
-  "llvm.x86.ssse3.phadd.w.128",
-  "llvm.x86.ssse3.phsub.d",
-  "llvm.x86.ssse3.phsub.d.128",
-  "llvm.x86.ssse3.phsub.sw",
-  "llvm.x86.ssse3.phsub.sw.128",
-  "llvm.x86.ssse3.phsub.w",
-  "llvm.x86.ssse3.phsub.w.128",
-  "llvm.x86.ssse3.pmadd.ub.sw",
-  "llvm.x86.ssse3.pmadd.ub.sw.128",
-  "llvm.x86.ssse3.pmul.hr.sw",
-  "llvm.x86.ssse3.pmul.hr.sw.128",
-  "llvm.x86.ssse3.pshuf.b",
-  "llvm.x86.ssse3.pshuf.b.128",
-  "llvm.x86.ssse3.psign.b",
-  "llvm.x86.ssse3.psign.b.128",
-  "llvm.x86.ssse3.psign.d",
-  "llvm.x86.ssse3.psign.d.128",
-  "llvm.x86.ssse3.psign.w",
-  "llvm.x86.ssse3.psign.w.128",
-  "llvm.x86.subborrow.u32",
-  "llvm.x86.subborrow.u64",
-  "llvm.x86.tbm.bextri.u32",
-  "llvm.x86.tbm.bextri.u64",
-  "llvm.x86.vcvtph2ps.128",
-  "llvm.x86.vcvtph2ps.256",
-  "llvm.x86.vcvtps2ph.128",
-  "llvm.x86.vcvtps2ph.256",
-  "llvm.x86.vgf2p8affineinvqb.128",
-  "llvm.x86.vgf2p8affineinvqb.256",
-  "llvm.x86.vgf2p8affineinvqb.512",
-  "llvm.x86.vgf2p8affineqb.128",
-  "llvm.x86.vgf2p8affineqb.256",
-  "llvm.x86.vgf2p8affineqb.512",
-  "llvm.x86.vgf2p8mulb.128",
-  "llvm.x86.vgf2p8mulb.256",
-  "llvm.x86.vgf2p8mulb.512",
-  "llvm.x86.wrfsbase.32",
-  "llvm.x86.wrfsbase.64",
-  "llvm.x86.wrgsbase.32",
-  "llvm.x86.wrgsbase.64",
-  "llvm.x86.wrpkru",
-  "llvm.x86.wrssd",
-  "llvm.x86.wrssq",
-  "llvm.x86.wrussd",
-  "llvm.x86.wrussq",
-  "llvm.x86.xabort",
-  "llvm.x86.xbegin",
-  "llvm.x86.xend",
-  "llvm.x86.xgetbv",
-  "llvm.x86.xop.vfrcz.pd",
-  "llvm.x86.xop.vfrcz.pd.256",
-  "llvm.x86.xop.vfrcz.ps",
-  "llvm.x86.xop.vfrcz.ps.256",
-  "llvm.x86.xop.vfrcz.sd",
-  "llvm.x86.xop.vfrcz.ss",
-  "llvm.x86.xop.vpcomb",
-  "llvm.x86.xop.vpcomd",
-  "llvm.x86.xop.vpcomq",
-  "llvm.x86.xop.vpcomub",
-  "llvm.x86.xop.vpcomud",
-  "llvm.x86.xop.vpcomuq",
-  "llvm.x86.xop.vpcomuw",
-  "llvm.x86.xop.vpcomw",
-  "llvm.x86.xop.vpermil2pd",
-  "llvm.x86.xop.vpermil2pd.256",
-  "llvm.x86.xop.vpermil2ps",
-  "llvm.x86.xop.vpermil2ps.256",
-  "llvm.x86.xop.vphaddbd",
-  "llvm.x86.xop.vphaddbq",
-  "llvm.x86.xop.vphaddbw",
-  "llvm.x86.xop.vphadddq",
-  "llvm.x86.xop.vphaddubd",
-  "llvm.x86.xop.vphaddubq",
-  "llvm.x86.xop.vphaddubw",
-  "llvm.x86.xop.vphaddudq",
-  "llvm.x86.xop.vphadduwd",
-  "llvm.x86.xop.vphadduwq",
-  "llvm.x86.xop.vphaddwd",
-  "llvm.x86.xop.vphaddwq",
-  "llvm.x86.xop.vphsubbw",
-  "llvm.x86.xop.vphsubdq",
-  "llvm.x86.xop.vphsubwd",
-  "llvm.x86.xop.vpmacsdd",
-  "llvm.x86.xop.vpmacsdqh",
-  "llvm.x86.xop.vpmacsdql",
-  "llvm.x86.xop.vpmacssdd",
-  "llvm.x86.xop.vpmacssdqh",
-  "llvm.x86.xop.vpmacssdql",
-  "llvm.x86.xop.vpmacsswd",
-  "llvm.x86.xop.vpmacssww",
-  "llvm.x86.xop.vpmacswd",
-  "llvm.x86.xop.vpmacsww",
-  "llvm.x86.xop.vpmadcsswd",
-  "llvm.x86.xop.vpmadcswd",
-  "llvm.x86.xop.vpperm",
-  "llvm.x86.xop.vprotb",
-  "llvm.x86.xop.vprotbi",
-  "llvm.x86.xop.vprotd",
-  "llvm.x86.xop.vprotdi",
-  "llvm.x86.xop.vprotq",
-  "llvm.x86.xop.vprotqi",
-  "llvm.x86.xop.vprotw",
-  "llvm.x86.xop.vprotwi",
-  "llvm.x86.xop.vpshab",
-  "llvm.x86.xop.vpshad",
-  "llvm.x86.xop.vpshaq",
-  "llvm.x86.xop.vpshaw",
-  "llvm.x86.xop.vpshlb",
-  "llvm.x86.xop.vpshld",
-  "llvm.x86.xop.vpshlq",
-  "llvm.x86.xop.vpshlw",
-  "llvm.x86.xrstor",
-  "llvm.x86.xrstor64",
-  "llvm.x86.xrstors",
-  "llvm.x86.xrstors64",
-  "llvm.x86.xsave",
-  "llvm.x86.xsave64",
-  "llvm.x86.xsavec",
-  "llvm.x86.xsavec64",
-  "llvm.x86.xsaveopt",
-  "llvm.x86.xsaveopt64",
-  "llvm.x86.xsaves",
-  "llvm.x86.xsaves64",
-  "llvm.x86.xsetbv",
-  "llvm.x86.xtest",
-  "llvm.xcore.bitrev",
-  "llvm.xcore.checkevent",
-  "llvm.xcore.chkct",
-  "llvm.xcore.clre",
-  "llvm.xcore.clrpt",
-  "llvm.xcore.clrsr",
-  "llvm.xcore.crc32",
-  "llvm.xcore.crc8",
-  "llvm.xcore.edu",
-  "llvm.xcore.eeu",
-  "llvm.xcore.endin",
-  "llvm.xcore.freer",
-  "llvm.xcore.geted",
-  "llvm.xcore.getet",
-  "llvm.xcore.getid",
-  "llvm.xcore.getps",
-  "llvm.xcore.getr",
-  "llvm.xcore.getst",
-  "llvm.xcore.getts",
-  "llvm.xcore.in",
-  "llvm.xcore.inct",
-  "llvm.xcore.initcp",
-  "llvm.xcore.initdp",
-  "llvm.xcore.initlr",
-  "llvm.xcore.initpc",
-  "llvm.xcore.initsp",
-  "llvm.xcore.inshr",
-  "llvm.xcore.int",
-  "llvm.xcore.mjoin",
-  "llvm.xcore.msync",
-  "llvm.xcore.out",
-  "llvm.xcore.outct",
-  "llvm.xcore.outshr",
-  "llvm.xcore.outt",
-  "llvm.xcore.peek",
-  "llvm.xcore.setc",
-  "llvm.xcore.setclk",
-  "llvm.xcore.setd",
-  "llvm.xcore.setev",
-  "llvm.xcore.setps",
-  "llvm.xcore.setpsc",
-  "llvm.xcore.setpt",
-  "llvm.xcore.setrdy",
-  "llvm.xcore.setsr",
-  "llvm.xcore.settw",
-  "llvm.xcore.setv",
-  "llvm.xcore.sext",
-  "llvm.xcore.ssync",
-  "llvm.xcore.syncr",
-  "llvm.xcore.testct",
-  "llvm.xcore.testwct",
-  "llvm.xcore.waitevent",
-  "llvm.xcore.zext",
-#endif
-
-// Intrinsic ID to overload bitset
-#ifdef GET_INTRINSIC_OVERLOAD_TABLE
-static const uint8_t OTable[] = {
-  0 | (1<<3) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<3) | (1<<4) | (1<<5),
-  0,
-  0 | (1<<2) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0),
-  0 | (1<<0),
-  0 | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
-  0 | (1<<0) | (1<<1) | (1<<6),
-  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<2) | (1<<3) | (1<<5) | (1<<6),
-  0 | (1<<1) | (1<<2) | (1<<3),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
-  0 | (1<<3) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<5),
-  0,
-  0,
-  0,
-  0 | (1<<3) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
-  0 | (1<<0) | (1<<2) | (1<<3) | (1<<4) | (1<<5),
-  0 | (1<<0) | (1<<2) | (1<<3) | (1<<6) | (1<<7),
-  0,
-  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<3) | (1<<4),
-  0,
-  0 | (1<<1) | (1<<2) | (1<<3),
-  0 | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<1) | (1<<3) | (1<<4) | (1<<5) | (1<<7),
-  0 | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4),
-  0 | (1<<6),
-  0 | (1<<0) | (1<<4),
-  0 | (1<<3) | (1<<7),
-  0 | (1<<0),
-  0,
-  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<5),
-  0 | (1<<5),
-  0 | (1<<0),
-  0,
-  0 | (1<<0) | (1<<6),
-  0,
-  0,
-  0 | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<2) | (1<<3) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<0) | (1<<2),
-  0,
-  0,
-  0 | (1<<7),
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1),
-  0,
-  0 | (1<<3) | (1<<4),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1),
-  0,
-  0,
-  0 | (1<<2),
-  0,
-  0 | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<6),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<4) | (1<<5),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0 | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<7),
-  0,
-  0,
-  0 | (1<<2),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<0) | (1<<1),
-  0 | (1<<4),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<6),
-  0 | (1<<1) | (1<<2) | (1<<3),
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0,
-  0 | (1<<2) | (1<<4),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6) | (1<<7),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<3) | (1<<4) | (1<<5) | (1<<6),
-  0 | (1<<0) | (1<<1) | (1<<2) | (1<<4) | (1<<5),
-  0 | (1<<0) | (1<<1) | (1<<2)
-};
-
-return (OTable[id/8] & (1 << (id%8))) != 0;
-#endif
-
-// Global intrinsic function declaration type table.
-#ifdef GET_INTRINSIC_GENERATOR_GLOBAL
-static const unsigned IIT_Table[] = {
-  0x2e, 0x2e2e, (1U<<31) | 1790, 0x10, 0x1f1f, 0x1f1f, 0x2f2f, 
-  0x2f2f, 0x2e2e0, (1U<<31) | 4170, 0x32f, 0x2f3, 0x2f2f2f, (1U<<31) | 4163, (1U<<31) | 1070, 
-  0x2e0, 0x2e1, 0x12e1, 0x2e, (1U<<31) | 1070, (1U<<31) | 981, 0x2e2e1, 0x142e2e, 
-  0x2e0, (1U<<31) | 1072, 0x1f, 0x22e2e, (1U<<31) | 195, 0x2f2f, 0x11f1f, 0x1f1f, 
-  0x11f1f, (1U<<31) | 4217, (1U<<31) | 4217, (1U<<31) | 4217, 0x0, 0x0, 0x42e, (1U<<31) | 4167, 
-  (1U<<31) | 4166, 0x2e40, 0x2e50, 0x40, 0x2e0, 0x2e0, 0x2e, 0x2e4, 
-  0x0, 0x2e4, 0x0, 0x2f2f, 0x2f2f, 0x1f1f1f, (1U<<31) | 4202, (1U<<31) | 4202, 
-  (1U<<31) | 4202, (1U<<31) | 4200, (1U<<31) | 4200, (1U<<31) | 4198, (1U<<31) | 4200, (1U<<31) | 4200, (1U<<31) | 4200, (1U<<31) | 4202, 
-  (1U<<31) | 4202, (1U<<31) | 4202, (1U<<31) | 4202, (1U<<31) | 4200, (1U<<31) | 4209, (1U<<31) | 4202, (1U<<31) | 4202, (1U<<31) | 4202, 
-  (1U<<31) | 4222, (1U<<31) | 2481, (1U<<31) | 4159, (1U<<31) | 4246, (1U<<31) | 4226, (1U<<31) | 4238, (1U<<31) | 4230, (1U<<31) | 4255, 
-  0xbf1f, 0xbf1f, (1U<<31) | 4191, 0xbf2f, 0xbf2f, (1U<<31) | 4191, 0xbf1f, 0xbf1f, 
-  0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0xbf1f, 0x2f2f, 0x2f2f, 0x4, 
-  0x2f2f2f2f, 0x2f2f2f2f, 0x42e, 0x2ee2e2e, 0x2e2ee0, 0x2ee2e2e0, 0x1f, (1U<<31) | 4223, 
-  0x2e2e2e0, 0x4452e0, 0x54452e0, 0x44552e0, (1U<<31) | 3047, 0x4f4f, (1U<<31) | 3048, 0x4f50, 
-  0x4f50, 0x1f2e2e, 0x2e, (1U<<31) | 4223, 0x42e2e2e, 0x2f2f, 0x2f2f, 0x2f2f, 
-  0x42e0, (1U<<31) | 107, (1U<<31) | 1251, (1U<<31) | 1261, (1U<<31) | 1273, (1U<<31) | 116, (1U<<31) | 127, 0x2f2f2f, 
-  (1U<<31) | 186, (1U<<31) | 3137, (1U<<31) | 186, (1U<<31) | 3137, 0x19f24f0, 0x49f24f0, 0x2f2f2f, 0x2f2f, 
-  0x11cf1f, 0x40, 0x2f2f2f, 0x42f2f, 0x4442e0, (1U<<31) | 1800, (1U<<31) | 4173, 0x5, 
-  0x42e, 0x2f2f, 0x2f2f, (1U<<31) | 172, 0x2e4, 0x0, 0x42e0, 0x42e4, 
-  0x2f2f, (1U<<31) | 172, 0x2f2f, 0xf0f, (1U<<31) | 172, 0x2e, 0x2ee2e0, 0x2e0, 
-  0x2e, 0x2e, 0x0, 0x2f2f, (1U<<31) | 4182, (1U<<31) | 4177, (1U<<31) | 172, (1U<<31) | 172, 
-  (1U<<31) | 172, 0x2e2e0, 0x2e0, 0x2e0, 0x42e2e2e0, (1U<<31) | 181, 0x42e0, 0x0, 
-  0x444, 0x444, 0x444, 0x444, 0x544, 0x444, 0x444, 0x544, 
-  0x2c2c2c, 0x2c2c2c, 0x2c2c, 0x2c2c, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 
-  0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x40, 0x40, 
-  0x40, 0x40, (1U<<31) | 1058, 0x4f5, (1U<<31) | 1058, 0x4f5, 0xf0f, (1U<<31) | 1328, 
-  0x3f3f3f, 0x3f3f, 0x3f3f3f, 0xafaf1f, 0xafaf1f, 0xbf2f, 0xaf1f, 0xaf1f, 
-  0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xaf1f, 0xbf3f, 0xaf1f, 
-  0xaf1f, 0x2f2f2f, 0x2f2f2f, 0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, 0x2f2f2f, 
-  0x2f2f2f, 0x3f3f3f, 0xbf2f, 0x3f3f3f, 0xbf2f, 0x2f2f2f, 0x2f2f, 0x2f2f2f, 
-  0x2f2f, 0x2f2f, 0x2f2f, 0x2f2f2f, (1U<<31) | 4045, (1U<<31) | 4035, (1U<<31) | 4023, (1U<<31) | 4045, 
-  (1U<<31) | 4124, (1U<<31) | 4045, (1U<<31) | 4035, (1U<<31) | 4107, (1U<<31) | 4035, (1U<<31) | 4023, (1U<<31) | 4086, (1U<<31) | 4023, 
-  0x3f3f3f, (1U<<31) | 1340, 0x552c, (1U<<31) | 1328, 0x3f3f, (1U<<31) | 1347, (1U<<31) | 1328, 0x3f3f3f, 
-  0xbf3f, 0xbf1f, 0xbf1f, 0x9f1f, 0x9f1f, 0x9f1f, 0x3f3f3f, (1U<<31) | 1335, 
-  0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, (1U<<31) | 1340, 
-  0x1f1f, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1340, 0x445, 0x1f1f, 0x1f1f1f, 0x1f1f1f, 
-  (1U<<31) | 1347, (1U<<31) | 1347, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1347, (1U<<31) | 1347, 0x1f1f1f, (1U<<31) | 199, 
-  (1U<<31) | 199, 0x3f3f3f, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1961, 0xcf3f3f0, (1U<<31) | 4001, (1U<<31) | 4011, 
-  0xcf3f3f0, (1U<<31) | 4053, (1U<<31) | 4001, (1U<<31) | 4062, (1U<<31) | 4011, (1U<<31) | 4073, (1U<<31) | 1328, 0x1f1f1f, 
-  0x3f2c3f, 0x3f2c2c3f, (1U<<31) | 1301, (1U<<31) | 1286, 0x3f2c3f3f, (1U<<31) | 1312, (1U<<31) | 1299, (1U<<31) | 1284, 
-  0x3f3f3f, 0xbf3f, 0xbf1f, 0xbf1f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
-  0xbf1f, 0x3f3f3f, 0x3f3f3f, 0xbf1f, (1U<<31) | 1340, 0x1f1f1f, 0x1f1f1f, (1U<<31) | 1347, 
-  0x1f1f1f, (1U<<31) | 1347, 0x1f1f1f, (1U<<31) | 199, 0x3f3f, 0x3f3f3f, 0x1f1f1f, 0x3f3f, 
-  0x1f1f1f, (1U<<31) | 1961, 0x1f1f1f, 0x53f5bf3f, 0x4af1f, 0x4af1f, 0x7a3a, 0x49f2f, 
-  0x49f2f, 0x3a7a, 0x43f3f3f, 0x43f3f3f, 0x1f1f1f, 0x2f2f2f, 0x87, 0x2e554, 
-  0x4f54, 0x2e554, 0x4f54, 0x1f1f1f, 0x4444, 0x4444, (1U<<31) | 137, (1U<<31) | 137, 
-  0x55, 0x1444a44, 0x1444a44, 0x1444a444, 0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 
-  0x1444a44, 0x1444a44, 0x1444a44, 0x1444a44, 0x11444a2f, 0x11444a2f, (1U<<31) | 77, (1U<<31) | 77, 
-  0x0, 0x0, 0x0, 0x42f1, 0x2f2f, 0x7777, 0x7777, 0x7777, 
-  0x7777, 0x4439, 0x4439, 0x4474, 0x7739, 0x7739, 0x7769, 0x5, 
-  (1U<<31) | 531, 0x2f2f2f2f, (1U<<31) | 97, (1U<<31) | 87, 0x444, (1U<<31) | 158, (1U<<31) | 158, (1U<<31) | 158, 
-  0x444, 0x444, (1U<<31) | 3196, 0x555, 0x50, (1U<<31) | 0, (1U<<31) | 53, 0x42f2f5, 
-  0x777, 0x2f2f2f2f, 0x777, 0x2f2f, 0xaf1f, 0x2f2f, 0x4, 0x41f1f5, 
-  (1U<<31) | 167, 0x515, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 42, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, 
-  (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 43, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 30, (1U<<31) | 30, (1U<<31) | 30, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, 
-  (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 14, (1U<<31) | 29, (1U<<31) | 29, (1U<<31) | 531, (1U<<31) | 531, 0x50, 
-  0x440, 0x44447, 0x44477, 0x444777, (1U<<31) | 531, 0x10, 0x42f2f, 0x4444, 
-  0x2f2f, 0x51, 0x444, 0x444, 0x14441f1f, 0x5455, 0x4a454a, 0x4444, 
-  0x1, 0x5455, (1U<<31) | 531, 0x2f2f, 0x77, 0x44, 0x444, 0x2f2f, 
-  0x2f2f, 0x77, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 
-  0x5, 0x44, 0x40, 0x5, 0x5, 0x440, 0x440, 0x40, 
-  0x40, 0x4444, 0x4444, 0x4444, 0x441f1f, 0x1f1f1f, 0x1f1f, 0x2f2f, 
-  (1U<<31) | 64, (1U<<31) | 63, 0x42f2f, 0x441f1f, 0x0, (1U<<31) | 147, 0x0, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0xf0f, 0x11, 0x4444, 
-  0xf0f, 0x4444440, 0x4444440, 0x0, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x40, 0x40, 0x40, 0x4, 0x40, 0x40, 
-  0x4f4, (1U<<31) | 1042, 0x2e440, 0x2e440, 0x2e440, 0x2e440, 0x4f4, (1U<<31) | 1042, 
-  0x4444440, 0x4444440, 0x444440, 0x444440, 0x444444, 0x444444, (1U<<31) | 2061, (1U<<31) | 2061, 
-  0x2c2c2c, 0x2c2c2c, 0x2c2c, 0x2c2c, 0x4a44a4a, 0x44, 0x4a44a4a, 0x4a44a4a, 
-  0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 0x3f3f3f, 0x3f3f3f, 
-  0x3f3f, 0xbfbf3f, 0xbfbf3f, 0x3f3f3f3f, 0x3f3f, 0xbf3f, 0xbf3f, 0x4af1f, 
-  0x4af1f, 0x7a3a, 0x49f2f, 0x49f2f, 0x3a7a, 0xbf3f, 0xbf3f, 0xbf3f, 
-  0xbf3f, 0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x4cf3f, 
-  (1U<<31) | 2932, (1U<<31) | 2037, (1U<<31) | 2921, (1U<<31) | 2019, (1U<<31) | 2908, (1U<<31) | 1997, 0x3f3f3f, 0x3f3f3f, 
-  0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 1340, (1U<<31) | 1340, (1U<<31) | 1340, 0x3f3f3f, 
-  0xbf3f3f, 0xbf3f3f, 0x3f3f3f, 0xbf3f, 0xbf3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
-  0x3f3f3f, 0x3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, (1U<<31) | 1340, (1U<<31) | 1323, (1U<<31) | 1323, 
-  (1U<<31) | 1323, 0x3f3f, 0x3f3f3f, (1U<<31) | 1328, (1U<<31) | 1328, (1U<<31) | 1328, 0x3f3f3f, 0x3f3f3f, 
-  (1U<<31) | 1328, (1U<<31) | 1328, (1U<<31) | 1328, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 
-  (1U<<31) | 1328, 0x3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f, 0x3f3f, 
-  0x3f3f, 0x3f3f, 0x3f3f, (1U<<31) | 1328, 0x3f3f3f, 0x3f3f3f, 0x3f3f, 0x3f3f3f, 
-  (1U<<31) | 1328, 0x3f3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x4bf4f0, 0x4bfbf4f0, (1U<<31) | 2303, (1U<<31) | 2812, 
-  (1U<<31) | 2313, (1U<<31) | 2823, (1U<<31) | 2325, 0x2b2b2b, 0x2b2b2b2b, (1U<<31) | 954, (1U<<31) | 952, 0x2b2b2b2b, 
-  (1U<<31) | 954, (1U<<31) | 952, (1U<<31) | 950, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x5445, 0x5445, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x5445, 0x5445, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x2e440, 0x2e440, 0x2e440, 0x2e440, 
-  0x4f44, 0x2e444, 0x4f44, 0x2e444, 0x444, 0x44, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x40, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x4444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x44, 0x2f7, 
-  0x2f7, 0x52e5, 0x52e5, 0x52e5, 0x555, 0x44, 0x55, 0x44, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x555, 0x555, 
-  0x444, 0x545, 0x444, 0x444, 0x555, 0x44, 0x44, 0x444, 
-  0x444, 0x444, 0x444, 0x445, 0x445, 0x444, 0x555, 0x444, 
-  0x555, 0x444, 0x555, 0x444, 0x555, 0x44, 0x55, 0x44, 
-  0x44, 0x55, 0x444, 0x444, 0x555, 0x54, 0x54, 0x44, 
-  0x44, 0x44, 0x44, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x555, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x44, 0x44, 0x44, 0x45, 
-  0x44, 0x444, 0x444, 0x55, 0x45, 0x44, 0x55, 0x55, 
-  0x55, 0x55, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x554, 0x554, 
-  0x554, 0x554, 0x554, 0x554, 0x554, 0x554, 0x55, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x5555, 0x555, 0x5555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x444, 0x555, 0x44, 
-  0x44, 0x444, 0x555, 0x445, 0x445, 0x544, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x445, 0x445, 0x444, 0x444, 0x444, 0x444, 
-  0x555, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x454, 0x554, 0x454, 0x554, 0x454, 0x454, 0x454, 
-  0x454, 0x454, 0x454, 0x454, 0x454, 0x4555, 0x4555, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x554, 0x554, 0x554, 
-  0x44, 0x444, 0x444, 0x44, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x554, 0x444, 0x444, 0x444, 0x444, 0x554, 0x444, 
-  0x444, 0x554, 0x444, 0x444, 0x45, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x44, 0x444, 0x444, 0x44, 0x44, 0x44, 0x444, 
-  0x5545, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x58, 0x57, 0x85, 
-  0x85, 0x87, 0x85, 0x85, 0x84, 0x84, 0x84, 0x84, 
-  0x75, 0x75, 0x78, 0x75, 0x75, 0x74, 0x74, 0x74, 
-  0x74, 0x58, 0x57, 0x48, 0x47, 0x48, 0x47, 0x484, 
-  0x884, 0x884, 0x884, 0x884, 0x48, 0x48, 0x777, 0x474, 
-  0x774, 0x774, 0x774, 0x774, 0x777, 0x777, 0x77, 0x7777, 
-  0x7777, 0x47777, 0x7777, 0x7777, 0x47, 0x47, 0x777, 0x777, 
-  0x777, 0x777, (1U<<31) | 1810, (1U<<31) | 1010, (1U<<31) | 990, (1U<<31) | 1818, (1U<<31) | 1021, (1U<<31) | 1000, 
-  (1U<<31) | 1810, (1U<<31) | 1010, (1U<<31) | 990, (1U<<31) | 1810, (1U<<31) | 1010, (1U<<31) | 990, (1U<<31) | 1810, (1U<<31) | 1010, 
-  (1U<<31) | 990, (1U<<31) | 1810, (1U<<31) | 1010, (1U<<31) | 990, 0x4e4, 0x5e5, 0x4444, 0x4444, 
-  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 
-  0x444, 0x444, 0x444, 0x444, 0x445, 0x445, 0x445, 0x445, 
-  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x444, 0x445, 
-  0x4455, 0x4455, 0x445, 0x444, 0x444, 0x444, 0x444, 0x4444, 
-  0x4444, 0x4444, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
-  0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 0x5555, 
-  0x5555, 0x5555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x555, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 
-  0x445, 0x445, 0x445, 0x445, 0x445, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x445, 0x445, 0x445, 
-  0x445, 0x445, 0x445, 0x445, 0x445, 0x444, 0x444, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x444, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 0x445, 
-  0x445, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 0x4455, 
-  0x4455, 0x444, 0x4444, 0x4444, 0x4444, 0x555, 0x555, 0x5555, 
-  0x5555, 0x555, 0x555, 0x555, 0x555, 0x5555, 0x5555, 0x554, 
-  0x554, 0x555, 0x555, 0x4455, 0x5555, 0x5555, 0x5555, 0x4455, 
-  0x4455, 0x4455, 0x4455, 0x555, 0x555, 0x445, 0x444, 0x445, 
-  0x444, 0x445, 0x445, 0x554, 0x554, 0x5555, 0x5555, 0x5555, 
-  0x5555, 0x555, 0x555, 0x555, 0x555, 0x4555, 0x455, 0x454, 
-  0x5555, 0x555, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x454, 
-  0x454, 0x454, 0x454, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x445, 0x4455, 
-  0x445, 0x4455, 0x5555, 0x5555, 0x555, 0x555, 0x5555, 0x5555, 
-  0x555, 0x555, 0x4444, 0x4444, 0x4444, 0x5555, 0x5555, 0x555, 
-  0x4455, 0x4455, 0x445, 0x445, 0x5555, 0x5555, 0x555, 0x555, 
-  0x555, 0x555, 0x4444, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x4444, 
-  0x455, 0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x455, 0x455, 
-  0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x455, 0x455, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x444, 0x454, 0x455, 
-  0x455, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 0x455, 0x455, 
-  0x44, 0x55, 0x4555, 0x44, 0x54, 0x44, 0x54, 0x44, 
-  0x44, 0x54, 0x444, 0x444, 0x44, 0x54, 0x44, 0x54, 
-  0x55, 0x4444, 0x544, 0x4455, 0x555, 0x44444, 0x5444, 0x44555, 
-  0x5555, 0x55, 0x555, 0x455, 0x4555, 0x4555, 0x4555, 0x4555, 
-  0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 
-  0x455, 0x4555, 0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x455, 0x455, 0x455, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x455, 0x455, 0x445, 0x554, 0x444, 0x444, 0x555, 
-  0x555, 0x555, 0x555, 0x442e2e, (1U<<31) | 1032, 0x2e442e2e, 0x452e2e, (1U<<31) | 1048, 
-  0x2e542e2e, 0x442e2e, (1U<<31) | 1032, 0x2e442e2e, 0x442e2e, (1U<<31) | 1032, 0x2e442e2e, 0x442e2e, 
-  (1U<<31) | 1032, 0x2e442e2e, 0x44e4, 0x44, 0x44, 0x44444, 0x44444, 0x44444, 
-  0x44444, 0x444, 0x444, 0x444, 0x444, 0x4555, 0x4555, 0x455, 
-  0x455, 0x4555, 0x54, 0x54, 0x54, 0x55, 0x54, 0x55, 
-  0x54, 0x55, 0x54, 0x55, 0x44, 0x45, 0x4555, 0x4555, 
-  0x45, 0x45, 0x54, 0x555, 0x54, 0x555, 0x45, 0x45, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x454, 0x54, 
-  0x4444, 0x544, 0x4455, 0x555, 0x444, 0x444, 0x444, 0x4444, 
-  0x4444, 0x4444, 0x4444, 0x4444, 0x444, 0x55e4, 0x4444, 0x4444, 
-  0x4444, 0x4455, 0x44555, 0x555, 0x555, 0x555, 0x555, 0x555, 
-  0x555, 0x454, 0x454, 0x54, 0x455, 0x455, 0x4555, 0x4555, 
-  0x4555, 0x4555, 0x4555, 0x444, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x4444, 0x45, 0x555, 0x555, 0x44c4, 0x44d4, 0x4d4c, (1U<<31) | 3121, 
-  0x4d4c, (1U<<31) | 3121, 0x44c, 0x44d, 0x44c, 0x44d, 0x44c, 0x44d, 
-  (1U<<31) | 204, (1U<<31) | 223, (1U<<31) | 204, (1U<<31) | 223, (1U<<31) | 206, (1U<<31) | 225, (1U<<31) | 204, (1U<<31) | 223, 
-  (1U<<31) | 204, (1U<<31) | 223, (1U<<31) | 1357, (1U<<31) | 1365, (1U<<31) | 1357, (1U<<31) | 1365, (1U<<31) | 204, (1U<<31) | 223, 
-  (1U<<31) | 204, (1U<<31) | 223, (1U<<31) | 204, (1U<<31) | 223, (1U<<31) | 2843, (1U<<31) | 2948, (1U<<31) | 2843, (1U<<31) | 2948, 
-  (1U<<31) | 2843, (1U<<31) | 2948, (1U<<31) | 2843, (1U<<31) | 2948, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2870, (1U<<31) | 2985, (1U<<31) | 2870, (1U<<31) | 2985, 
-  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 211, (1U<<31) | 230, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2870, (1U<<31) | 2985, 
-  (1U<<31) | 2870, (1U<<31) | 2985, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 0x4c4c4d, (1U<<31) | 3015, 
-  0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4c, 0x4d4d4d, 
-  0x4d4d4d, (1U<<31) | 3126, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 
-  0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 
-  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2870, (1U<<31) | 2985, (1U<<31) | 2870, (1U<<31) | 2985, 
-  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x4c4c4c, 0x4d4d4d, (1U<<31) | 1355, (1U<<31) | 1363, (1U<<31) | 1353, (1U<<31) | 1361, (1U<<31) | 1355, (1U<<31) | 1363, 
-  (1U<<31) | 1353, (1U<<31) | 1361, (1U<<31) | 2836, (1U<<31) | 2941, (1U<<31) | 2836, (1U<<31) | 2941, (1U<<31) | 2341, (1U<<31) | 2379, 
-  (1U<<31) | 2339, (1U<<31) | 2377, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4d4d, (1U<<31) | 3128, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4d, (1U<<31) | 3015, 0x4c, 0x4d, 
-  0x4d, (1U<<31) | 3110, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 
-  0x44c4c4d, (1U<<31) | 2397, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x44d4c, (1U<<31) | 2462, 0x44d4c4c, (1U<<31) | 2460, 
-  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44d4c, (1U<<31) | 2462, 0x44d4c4c, (1U<<31) | 2460, 
-  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 0x4c442e0, 0x4d442e0, (1U<<31) | 2851, (1U<<31) | 2966, 
-  0x4d442e0, (1U<<31) | 3113, (1U<<31) | 2956, (1U<<31) | 3103, 0x4c442e0, 0x4d442e0, (1U<<31) | 2851, (1U<<31) | 2966, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  (1U<<31) | 2863, (1U<<31) | 2978, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, (1U<<31) | 2861, (1U<<31) | 2976, 
-  0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 
-  0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x54c4c, 0x54d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c4c, 0x44d4d4d, (1U<<31) | 2357, (1U<<31) | 2385, 
-  (1U<<31) | 2357, (1U<<31) | 2385, 0x44c4c4c, 0x44d4d4d, 0x44c4c4d, (1U<<31) | 2397, 0x44c4c4d, (1U<<31) | 2397, 
-  (1U<<31) | 2367, (1U<<31) | 2395, (1U<<31) | 2367, (1U<<31) | 2395, 0x44c4c4d, (1U<<31) | 2397, (1U<<31) | 2843, (1U<<31) | 2948, 
-  (1U<<31) | 2843, (1U<<31) | 2948, (1U<<31) | 2843, (1U<<31) | 2948, (1U<<31) | 2843, (1U<<31) | 2948, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x4d4d4d, (1U<<31) | 3126, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x4d4d4d, (1U<<31) | 3126, 0x44d4d, (1U<<31) | 2470, 
-  0x44d4d4d, (1U<<31) | 2468, 0x54c4c4c, 0x54d4d4d, 0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 
-  0x54c4c4c, 0x54d4d4d, 0x54c4c4c, 0x54d4d4d, 0x44c4d, (1U<<31) | 2407, 0x44c4d4d, (1U<<31) | 2405, 
-  0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4d, (1U<<31) | 3015, 0x44c4d, (1U<<31) | 2407, 0x44c4d4d, (1U<<31) | 2405, 
-  0x44c4d4d, (1U<<31) | 2405, 0x44c4c, 0x44d4d, 0x44c4c, 0x44d4d, 0x4c4c4d, (1U<<31) | 3015, 
-  0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 
-  0x44c4c4c, 0x44d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4d4d, (1U<<31) | 3013, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
-  0x44c4d, (1U<<31) | 2407, 0x44c4d4d, (1U<<31) | 2405, 0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, 
-  0x44c4d, (1U<<31) | 2407, 0x44c4d4d, (1U<<31) | 2405, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x4c4c4d, (1U<<31) | 3015, 0x4c4c4d4d, (1U<<31) | 3013, (1U<<31) | 2870, (1U<<31) | 2985, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 
-  0x4c4c, 0x4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 
-  (1U<<31) | 218, (1U<<31) | 237, (1U<<31) | 218, (1U<<31) | 237, (1U<<31) | 218, (1U<<31) | 237, 0x4c4c4c, 0x4d4d4d, 
-  0x54c4d, (1U<<31) | 3190, 0x54c4d4d, (1U<<31) | 3188, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x444d4d, (1U<<31) | 2146, 0x444d4d4d, (1U<<31) | 2144, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 0x44d4d, 0x44c4c4c, 0x44d4d4d, 
-  0x54c4d, (1U<<31) | 3190, 0x54c4d4d, (1U<<31) | 3188, 0x444d4d, (1U<<31) | 2146, 0x444d4d4d, (1U<<31) | 2144, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c4c, 0x4d4d4d4d, 0x44c4c, 0x44d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x444d4d, (1U<<31) | 2146, 0x444d4d4d, (1U<<31) | 2144, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 3025, 0x4c4c440, 0x4d4d440, 
-  0x4c4c440, 0x4d4d440, (1U<<31) | 2888, (1U<<31) | 3003, 0x4c4d440, (1U<<31) | 3022, 0x4c4d440, (1U<<31) | 3022, 
-  (1U<<31) | 2898, (1U<<31) | 3030, 0x4c4c440, 0x4d4d440, 0x4c4c440, 0x4d4d440, (1U<<31) | 2888, (1U<<31) | 3003, 
-  0x4c4d, (1U<<31) | 3025, 0x4c4c4c, 0x4d4d4d, 0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c, 0x4d4d, 0x4c4c4c, 0x4d4d4d, 0x44c4c4d, (1U<<31) | 2397, 0x4c4c4d, (1U<<31) | 3015, 
-  0x4c4c4d, (1U<<31) | 3015, 0x4c4c4c, 0x4d4d4d, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 
-  (1U<<31) | 2870, (1U<<31) | 2985, (1U<<31) | 2870, (1U<<31) | 2985, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 
-  (1U<<31) | 211, (1U<<31) | 230, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2870, (1U<<31) | 2985, 
-  (1U<<31) | 2870, (1U<<31) | 2985, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 0x4c4c4d, (1U<<31) | 3015, 
-  0x4c4c4d, (1U<<31) | 3015, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 0x4c4c4c, 0x4d4d4d, 
-  0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, 0x4c4c4d, (1U<<31) | 3015, 0x4c4c4c, 0x4d4d4d, 
-  0x4d4d4d, (1U<<31) | 3126, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2870, (1U<<31) | 2985, 
-  (1U<<31) | 2870, (1U<<31) | 2985, 0x4c4c4c, 0x4d4d4d, 0x4d4d4d, (1U<<31) | 3126, (1U<<31) | 2879, (1U<<31) | 2994, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 
-  0x44d4d, (1U<<31) | 2470, 0x44d4d4d, (1U<<31) | 2468, 0x4c4d, (1U<<31) | 3025, 0x4c4d, (1U<<31) | 3025, 
-  0x4c4d4d, (1U<<31) | 3040, 0x4c4d4d, (1U<<31) | 3040, 0x4c4d, (1U<<31) | 3025, 0x4c4d, (1U<<31) | 3025, 
-  0x4c4c4c, 0x4d4d4d, 0x4c4d, (1U<<31) | 3025, 0x4c4d, (1U<<31) | 3025, 0x2e0, 0x2e0, 
-  0x2e0, 0x2e0, 0x42e0, 0x52e0, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 0x442e2e2e, 
-  0x442e2e2e, 0x442e2e2e, 0x4442e2e, 0x4452e2e, 0x4442e2e, 0x4442e2e, 0x4442e2e, 0x4b4b4b, 
-  0x2e0, 0x3939, 0x2a2a, 0x44, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x393939, 0x393939, 0x444, 0x393939, 0x393939, 0x444, 0x444, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x444, 0x393939, 0x2a2a2a, 0x393939, 0x2a2a2a, 
-  0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 
-  0x43b3b, 0x44a4a, 0x444, 0x2c2c2c, 0x42c2c, 0x4444, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x4444, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c2c, 
-  0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x2c2c2c2c, 
-  0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x44, 
-  0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 0x594, 0x3b4, 0x2c4, 
-  0x4a4, 0x4, 0x2c2c2c2c, 0x42c2c2c, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c4, 0x594, 0x3b4, 0x2c4, 
-  0x4a4, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
-  0x44a4a, 0x44, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 
-  0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 
-  0x43b3b, 0x44a4a, 0x39390, 0x39390, 0x39390, 0x2a2a4, 0x2a2a4, 0x2a2a4, 
-  0x2a2a4, 0x2a2a4, 0x2a2a4, 0x2a2a0, 0x2a2a0, 0x2a2a0, 0x42c4, 0x4595, 
-  0x43b4, 0x44a4, 0x42c4, 0x4595, 0x43b4, 0x44a4, 0x440, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x4555, 
-  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x393955, 0x4a4a5959, 
-  0x2c2c3b3b, 0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x393955, 0x4455, 0x393955, 
-  0x393955, 0x2a2a55, 0x2a2a55, 0x393955, 0x393955, 0x393955, 0x4455, 0x393955, 
-  0x393955, 0x2a2a55, 0x2a2a55, 0x4a4a5959, 0x2c2c3b3b, 0x3b3b4a4a, 0x4a4a5959, 0x2c2c3b3b, 
-  0x3b3b4a4a, 0x393955, 0x454, 0x454, 0x454, 0x454, 0x454, 0x454, 
-  0x898989, 0x7a7a7a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x8959, 0x7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898989, 0x7a7a7a, 0x7a7a6b, 0x89897a, 0x598989, 0x4a7a7a, 
-  0x7a89, 0x6b7a, 0x7a89, 0x6b7a, 0x5989, 0x4a7a, 0x5989, 0x4a7a, 
-  0x4a89, 0x3b7a, 0x4a89, 0x3b7a, 0x42c, 0x559, 0x43b, 0x44a, 
-  0x8989, 0x7a7a, (1U<<31) | 3979, 0x7a7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 
-  0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, (1U<<31) | 3979, 0x7a7a7a7a, 0x898989, 0x7a7a7a, 
-  0x8989, 0x7a7a, 0x8989, 0x7a7a, 0x8989, 0x7a7a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x8989, 0x7a7a, 0x898989, 0x7a7a7a, 0x898959, 0x7a7a4a, 
-  0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 0x898959, 0x7a7a4a, 
-  0x8959, 0x7a4a, 0x8959, 0x7a4a, 0x7a7a3b, 0x89894a, 0x8959, 0x7a4a, 
-  0x8959, 0x7a4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 
-  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x442c2c, 0x545959, 
-  0x443b3b, 0x444a4a, 0x444, 0x2c42c2c, 0x5945959, 0x3b43b3b, 0x4a44a4a, 0x42e4, 
-  0x42e2c, 0x42e59, 0x42e3b, 0x42e4a, 0x42c, 0x459, 0x43b, 0x44a, 
-  0x42e4, 0x4444, 0x42e4, 0x4455, 0x3b3b3b3b, 0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 
-  0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x393955, 0x393955, 0x393955, 
-  0x393955, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 
-  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 
-  0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x444, 0x2c2c, 0x4455, 0x3b3b3b3b, 0x4a4a4a4a, 0x3b3b3b3b, 0x4a4a4a4a, 
-  0x4455, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 0x4a4a4a4a, 0x455, 0x393939, 0x3b3b3b, 
-  0x4a4a4a, 0x393939, 0x39394, 0x39394, 0x392a39, 0x392a39, 0x393939, 0x444, 
-  0x393939, 0x444, 0x3b3b3b, 0x4a4a4a, 0x393955, 0x393955, 0x445, 0x445, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 
-  0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x2c2c2c, 0x42c2c, 0x2c2c2c, 0x42c2c, 
-  0x393939, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c, 0x5959, 0x3b3b, 0x4a4a, 0x393939, 0x2a2a2a, 0x394, 
-  0x394, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 0x2a39, 
-  0x2a39, 0x39392a, 0x44439, 0x44439, 0x4439, 0x39392a, 0x4439, 0x39392a, 
-  0x4444, 0x2a4, 0x44, 0x439, 0x42a, 0x42c2c, 0x45959, 0x43b3b, 
-  0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x43b3b, 0x44a4a, 
-  0x455, 0x43939, 0x42a2a, 0x43939, 0x444, 0x43939, 0x42a2a, 0x43939, 
-  0x42a2a, 0x444, 0x43939, 0x42a2a, 0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 
-  0x42c2c2c, 0x4595959, 0x43b3b3b, 0x44a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x42e2c0, 0x42e590, 0x42e3b0, 0x42e4a0, 
-  0x393939, 0x393939, 0x444, 0x393939, 0x393939, 0x444, 0x444, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x393939, 
-  0x2a2a2a, 0x393939, 0x2a2a2a, 0x2a2a2a, 0x2a2a2a, 0x2c2c2c, 0x595959, 0x3b3b3b, 
-  0x4a4a4a, 0x42c2c, 0x45959, 0x43b3b, 0x44a4a, 0x2c2c2c2c, 0x59595959, 0x3b3b3b3b, 
-  0x4a4a4a4a, 0x440, 0x2c2c2c, 0x42c2c, 0x888, 0x777, 0x777, 0x888, 
-  0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 
-  0x2fcf2f, 0x2fcf2f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1f1fcf1f, 0x1f1fcf1f, 
-  0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x74f7, 0x84f8, 
-  0x44f4, 0x44f4, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 0x1fcf1f, 
-  0x1fcf1f, 0x1fcf1f, 0x40, 0x40, 0x440, 0x40, 0x40, 0x440, 
-  0x0, 0x44, 0x44, 0x44, 0x85, 0x74, 0x47, 0x58, 
-  0x88, 0x77, 0x77, 0x4f0, 0x4f0, 0x77, 0x77, 0x87, 
-  0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x87, 0x84, 
-  0x84, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 
-  0x85, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 
-  0x85, 0x777, 0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 
-  0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x88, 
-  0x77, 0x77, 0x73, 0x73, 0x74, 0x74, 0x74, 0x74, 
-  0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 
-  0x75, 0x75, 0x75, 0x75, 0x74, 0x74, 0x74, 0x74, 
-  0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 
-  0x75, 0x75, 0x75, 0x75, 0x88, 0x77, 0x77, 0x88, 
-  0x77, 0x77, 0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 
-  0x8888, 0x7777, 0x7777, 0x8888, 0x7777, 0x7777, 0x888, 0x777, 
-  0x777, 0x888, 0x777, 0x777, 0x4444, 0x48, 0x48, 0x48, 
-  0x48, 0x47, 0x47, 0x47, 0x47, 0x2e1, 0x2e1, 0x2e1, 
-  0x2e1, 0x51, 0x51, 0x51, 0x4cf2f, 0x4cf1f, 0x4cf4f, 0x4cf2f, 
-  0x4cf1f, 0x4cf4f, 0x88, 0x77, 0x77, 0x58, 0x58, 0x58, 
-  0x58, 0x57, 0x57, 0x57, 0x57, 0x448, (1U<<31) | 1967, (1U<<31) | 3182, 
-  0x444, 0x545, 0x0, 0x0, 0x0, 0x88, 0x77, 0x33, 
-  0x44, 0x55, 0xcf4f, 0x888, 0x777, 0x777, 0x888, 0x777, 
-  0x777, 0x888, 0x777, 0x777, 0x888, 0x777, 0x777, 0x444, 
-  0x444, 0x444, 0x555, 0x444, 0x555, 0x4444, 0xcf4f, 0xcf4f, 
-  0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0xcf4f, 0x88, 
-  0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 
-  0x77, 0x88, 0x77, 0x77, 0x4, 0x5, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4f4, 0x444, 
-  0x455, 0x455, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 
-  0x4444, 0x4444, 0x88, 0x77, 0x77, 0x4477, 0x4444, 0x4477, 
-  0x4444, 0x4477, 0x4444, 0x44747, 0x44444, 0x44747, 0x44444, 0x44747, 
-  0x44444, 0x44747, 0x44444, 0x4477, 0x4444, 0x77, 0x77, 0x77, 
-  0x77, 0x77, 0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 
-  0x88, 0x77, 0x77, 0x88, 0x77, 0x77, 0x4453, 0x4453, 
-  0x4453, 0x4454, 0x4454, 0x4454, 0x4455, 0x4455, 0x4455, 0x4453, 
-  0x4453, 0x4453, (1U<<31) | 2162, (1U<<31) | 2162, (1U<<31) | 2162, (1U<<31) | 2178, (1U<<31) | 2178, (1U<<31) | 2178, 
-  (1U<<31) | 2195, (1U<<31) | 2195, (1U<<31) | 2195, (1U<<31) | 2162, (1U<<31) | 2162, (1U<<31) | 2162, (1U<<31) | 2153, (1U<<31) | 2153, 
-  (1U<<31) | 2153, (1U<<31) | 2169, (1U<<31) | 2169, (1U<<31) | 2169, (1U<<31) | 2153, (1U<<31) | 2153, (1U<<31) | 2153, 0x453, 
-  0x453, 0x453, 0x454, 0x454, 0x454, 0x455, 0x455, 0x455, 
-  0x453, 0x453, 0x453, (1U<<31) | 2499, (1U<<31) | 2499, (1U<<31) | 2499, (1U<<31) | 2513, (1U<<31) | 2513, 
-  (1U<<31) | 2513, (1U<<31) | 2528, (1U<<31) | 2528, (1U<<31) | 2528, (1U<<31) | 2499, (1U<<31) | 2499, (1U<<31) | 2499, (1U<<31) | 2491, 
-  (1U<<31) | 2491, (1U<<31) | 2491, (1U<<31) | 2505, (1U<<31) | 2505, (1U<<31) | 2505, (1U<<31) | 2491, (1U<<31) | 2491, (1U<<31) | 2491, 
-  0x44453, 0x44453, 0x44453, 0x44454, 0x44454, 0x44454, 0x44455, 0x44455, 
-  0x44455, 0x44453, 0x44453, 0x44453, (1U<<31) | 2078, (1U<<31) | 2078, (1U<<31) | 2078, (1U<<31) | 2096, 
-  (1U<<31) | 2096, (1U<<31) | 2096, (1U<<31) | 2115, (1U<<31) | 2115, (1U<<31) | 2115, (1U<<31) | 2078, (1U<<31) | 2078, (1U<<31) | 2078, 
-  (1U<<31) | 2068, (1U<<31) | 2068, (1U<<31) | 2068, (1U<<31) | 2086, (1U<<31) | 2086, (1U<<31) | 2086, (1U<<31) | 2068, (1U<<31) | 2068, 
-  (1U<<31) | 2068, 0x4453, 0x4453, 0x4453, 0x4454, 0x4454, 0x4454, 0x4455, 
-  0x4455, 0x4455, 0x4453, 0x4453, 0x4453, (1U<<31) | 2162, (1U<<31) | 2162, (1U<<31) | 2162, 
-  (1U<<31) | 2178, (1U<<31) | 2178, (1U<<31) | 2178, (1U<<31) | 2195, (1U<<31) | 2195, (1U<<31) | 2195, (1U<<31) | 2162, (1U<<31) | 2162, 
-  (1U<<31) | 2162, (1U<<31) | 2153, (1U<<31) | 2153, (1U<<31) | 2153, (1U<<31) | 2169, (1U<<31) | 2169, (1U<<31) | 2169, (1U<<31) | 2153, 
-  (1U<<31) | 2153, (1U<<31) | 2153, 0x44453, 0x44453, 0x44453, 0x44454, 0x44454, 0x44454, 
-  0x44455, 0x44455, 0x44455, 0x44453, 0x44453, 0x44453, (1U<<31) | 2078, (1U<<31) | 2078, 
-  (1U<<31) | 2078, (1U<<31) | 2096, (1U<<31) | 2096, (1U<<31) | 2096, (1U<<31) | 2115, (1U<<31) | 2115, (1U<<31) | 2115, (1U<<31) | 2078, 
-  (1U<<31) | 2078, (1U<<31) | 2078, (1U<<31) | 2068, (1U<<31) | 2068, (1U<<31) | 2068, (1U<<31) | 2086, (1U<<31) | 2086, (1U<<31) | 2086, 
-  (1U<<31) | 2068, (1U<<31) | 2068, (1U<<31) | 2068, 0x54, 0x54, 0x54, 0x54, 0x54, 
-  0x54, 0x34450, 0x34450, 0x34450, 0x44450, 0x44450, 0x44450, 0x54450, 
-  0x54450, 0x54450, 0x34450, 0x34450, 0x34450, 0x334450, 0x334450, 0x334450, 
-  0x444450, 0x444450, 0x444450, 0x554450, 0x554450, 0x554450, 0x334450, 0x334450, 
-  0x334450, 0x33334450, 0x33334450, 0x33334450, 0x44444450, 0x44444450, 0x44444450, 0x33334450, 
-  0x33334450, 0x33334450, 0x3450, 0x3450, 0x3450, 0x4450, 0x4450, 0x4450, 
-  0x5450, 0x5450, 0x5450, 0x3450, 0x3450, 0x3450, 0x33450, 0x33450, 
-  0x33450, 0x44450, 0x44450, 0x44450, 0x55450, 0x55450, 0x55450, 0x33450, 
-  0x33450, 0x33450, 0x3333450, 0x3333450, 0x3333450, 0x4444450, 0x4444450, 0x4444450, 
-  0x3333450, 0x3333450, 0x3333450, 0x344450, 0x344450, 0x344450, 0x444450, 0x444450, 
-  0x444450, 0x544450, 0x544450, 0x544450, 0x344450, 0x344450, 0x344450, 0x3344450, 
-  0x3344450, 0x3344450, 0x4444450, 0x4444450, 0x4444450, 0x5544450, 0x5544450, 0x5544450, 
-  0x3344450, 0x3344450, 0x3344450, (1U<<31) | 1105, (1U<<31) | 1105, (1U<<31) | 1105, (1U<<31) | 2051, (1U<<31) | 2051, 
-  (1U<<31) | 2051, (1U<<31) | 1105, (1U<<31) | 1105, (1U<<31) | 1105, 0x34450, 0x34450, 0x34450, 0x44450, 
-  0x44450, 0x44450, 0x54450, 0x54450, 0x54450, 0x34450, 0x34450, 0x34450, 
-  0x334450, 0x334450, 0x334450, 0x444450, 0x444450, 0x444450, 0x554450, 0x554450, 
-  0x554450, 0x334450, 0x334450, 0x334450, 0x33334450, 0x33334450, 0x33334450, 0x44444450, 
-  0x44444450, 0x44444450, 0x33334450, 0x33334450, 0x33334450, 0x344450, 0x344450, 0x344450, 
-  0x444450, 0x444450, 0x444450, 0x544450, 0x544450, 0x544450, 0x344450, 0x344450, 
-  0x344450, 0x3344450, 0x3344450, 0x3344450, 0x4444450, 0x4444450, 0x4444450, 0x5544450, 
-  0x5544450, 0x5544450, 0x3344450, 0x3344450, 0x3344450, (1U<<31) | 1105, (1U<<31) | 1105, (1U<<31) | 1105, 
-  (1U<<31) | 2051, (1U<<31) | 2051, (1U<<31) | 2051, (1U<<31) | 1105, (1U<<31) | 1105, (1U<<31) | 1105, 0x34450, 0x44450, 
-  0x34450, 0x334450, 0x444450, 0x334450, 0x33334450, 0x44444450, 0x33334450, 0x3450, 
-  0x4450, 0x3450, 0x33450, 0x44450, 0x33450, 0x3333450, 0x4444450, 0x3333450, 
-  0x344450, 0x444450, 0x344450, 0x3344450, 0x4444450, 0x3344450, (1U<<31) | 1105, (1U<<31) | 2051, 
-  (1U<<31) | 1105, 0x34450, 0x44450, 0x34450, 0x334450, 0x444450, 0x334450, 0x33334450, 
-  0x44444450, 0x33334450, 0x344450, 0x444450, 0x344450, 0x3344450, 0x4444450, 0x3344450, 
-  (1U<<31) | 1105, (1U<<31) | 2051, (1U<<31) | 1105, 0x55, (1U<<31) | 3506, (1U<<31) | 3494, (1U<<31) | 3494, (1U<<31) | 3424, 
-  (1U<<31) | 3413, (1U<<31) | 3413, (1U<<31) | 3350, (1U<<31) | 2202, (1U<<31) | 3340, (1U<<31) | 2185, (1U<<31) | 3340, (1U<<31) | 2185, 
-  (1U<<31) | 3550, (1U<<31) | 3539, (1U<<31) | 3539, (1U<<31) | 3464, (1U<<31) | 3454, (1U<<31) | 3454, (1U<<31) | 3386, (1U<<31) | 2534, 
-  (1U<<31) | 3377, (1U<<31) | 2519, (1U<<31) | 3377, (1U<<31) | 2519, (1U<<31) | 3696, (1U<<31) | 3681, (1U<<31) | 3681, (1U<<31) | 3506, 
-  (1U<<31) | 3494, (1U<<31) | 3494, (1U<<31) | 3424, (1U<<31) | 2123, (1U<<31) | 3413, (1U<<31) | 2104, (1U<<31) | 3413, (1U<<31) | 2104, 
-  (1U<<31) | 3752, (1U<<31) | 3738, (1U<<31) | 3738, (1U<<31) | 3550, (1U<<31) | 3539, (1U<<31) | 3539, (1U<<31) | 3464, (1U<<31) | 2202, 
-  (1U<<31) | 3454, (1U<<31) | 2185, (1U<<31) | 3454, (1U<<31) | 2185, (1U<<31) | 3924, (1U<<31) | 3907, (1U<<31) | 3907, (1U<<31) | 3644, 
-  (1U<<31) | 3632, (1U<<31) | 3632, (1U<<31) | 3550, (1U<<31) | 2123, (1U<<31) | 3539, (1U<<31) | 2104, (1U<<31) | 3539, (1U<<31) | 2104, 
-  (1U<<31) | 3596, (1U<<31) | 3583, (1U<<31) | 3583, (1U<<31) | 3506, (1U<<31) | 3494, (1U<<31) | 3494, (1U<<31) | 3644, (1U<<31) | 3632, 
-  (1U<<31) | 3632, (1U<<31) | 3550, (1U<<31) | 3539, (1U<<31) | 3539, (1U<<31) | 3518, (1U<<31) | 3483, (1U<<31) | 3483, (1U<<31) | 3435, 
-  (1U<<31) | 3403, (1U<<31) | 3403, (1U<<31) | 3360, (1U<<31) | 2212, (1U<<31) | 3331, (1U<<31) | 2169, (1U<<31) | 3331, (1U<<31) | 2169, 
-  (1U<<31) | 3561, (1U<<31) | 3529, (1U<<31) | 3529, (1U<<31) | 3474, (1U<<31) | 3445, (1U<<31) | 3445, (1U<<31) | 3395, (1U<<31) | 2543, 
-  (1U<<31) | 3369, (1U<<31) | 2505, (1U<<31) | 3369, (1U<<31) | 2505, (1U<<31) | 3711, (1U<<31) | 3667, (1U<<31) | 3667, (1U<<31) | 3518, 
-  (1U<<31) | 3483, (1U<<31) | 3483, (1U<<31) | 3435, (1U<<31) | 2134, (1U<<31) | 3403, (1U<<31) | 2086, (1U<<31) | 3403, (1U<<31) | 2086, 
-  (1U<<31) | 3766, (1U<<31) | 3725, (1U<<31) | 3725, (1U<<31) | 3561, (1U<<31) | 3529, (1U<<31) | 3529, (1U<<31) | 3474, (1U<<31) | 2212, 
-  (1U<<31) | 3445, (1U<<31) | 2169, (1U<<31) | 3445, (1U<<31) | 2169, (1U<<31) | 3941, (1U<<31) | 3891, (1U<<31) | 3891, (1U<<31) | 3656, 
-  (1U<<31) | 3621, (1U<<31) | 3621, (1U<<31) | 3561, (1U<<31) | 2134, (1U<<31) | 3529, (1U<<31) | 2086, (1U<<31) | 3529, (1U<<31) | 2086, 
-  (1U<<31) | 3609, (1U<<31) | 3571, (1U<<31) | 3571, (1U<<31) | 3518, (1U<<31) | 3483, (1U<<31) | 3483, (1U<<31) | 3656, (1U<<31) | 3621, 
-  (1U<<31) | 3621, (1U<<31) | 3561, (1U<<31) | 3529, (1U<<31) | 3529, (1U<<31) | 3098, 0x4f5, (1U<<31) | 3464, (1U<<31) | 3454, 
-  (1U<<31) | 3454, (1U<<31) | 3464, (1U<<31) | 3454, (1U<<31) | 3454, (1U<<31) | 3464, (1U<<31) | 3454, (1U<<31) | 3454, (1U<<31) | 3464, 
-  (1U<<31) | 3454, (1U<<31) | 3454, (1U<<31) | 3474, (1U<<31) | 3445, (1U<<31) | 3445, (1U<<31) | 3474, (1U<<31) | 3445, (1U<<31) | 3445, 
-  (1U<<31) | 3474, (1U<<31) | 3445, (1U<<31) | 3445, (1U<<31) | 3474, (1U<<31) | 3445, (1U<<31) | 3445, 0x88, 0x77, 
-  0x77, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 
-  0x54, 0x48, 0x48, 0x48, 0x48, 0x47, 0x47, 0x47, 
-  0x47, 0x58, 0x58, 0x58, 0x58, 0x57, 0x57, 0x57, 
-  0x57, 0x11, 0x141, 0x11, 0x141, 0x14, 0x144, 0x11, 
-  0x141, (1U<<31) | 3054, (1U<<31) | 2413, (1U<<31) | 3054, (1U<<31) | 2413, (1U<<31) | 3054, (1U<<31) | 2413, (1U<<31) | 3054, 
-  (1U<<31) | 2413, (1U<<31) | 3074, (1U<<31) | 3086, (1U<<31) | 2434, (1U<<31) | 2447, (1U<<31) | 3074, (1U<<31) | 3086, (1U<<31) | 2434, 
-  (1U<<31) | 2447, (1U<<31) | 3231, (1U<<31) | 3231, (1U<<31) | 3791, (1U<<31) | 3791, (1U<<31) | 3281, (1U<<31) | 3281, (1U<<31) | 3841, 
-  (1U<<31) | 3841, (1U<<31) | 3231, (1U<<31) | 3231, (1U<<31) | 3791, (1U<<31) | 3791, (1U<<31) | 3281, (1U<<31) | 3281, (1U<<31) | 3841, 
-  (1U<<31) | 3841, (1U<<31) | 3231, (1U<<31) | 3231, (1U<<31) | 3791, (1U<<31) | 3791, (1U<<31) | 3281, (1U<<31) | 3281, (1U<<31) | 3841, 
-  (1U<<31) | 3841, (1U<<31) | 3231, (1U<<31) | 3231, (1U<<31) | 3791, (1U<<31) | 3791, (1U<<31) | 3281, (1U<<31) | 3281, (1U<<31) | 3841, 
-  (1U<<31) | 3841, (1U<<31) | 3219, (1U<<31) | 3779, (1U<<31) | 2625, (1U<<31) | 2638, (1U<<31) | 3219, (1U<<31) | 3779, (1U<<31) | 2625, 
-  (1U<<31) | 2638, 0x595959, 0x595959, 0x595959, 0x595959, 0x2c2c2c2c, 0x2c2c2c, 0x595959, 
-  0x3b3b3b, 0x4a4a4a, 0x5959, 0x445959, 0x444a4a, 0x40, 0x0, 0x442e0, 
-  0x442e0, 0x442e0, 0x442e0, 0x2e2c, 0x2e3b, 0x2e4a, 0x2e2c, 0x2e2c, 
-  0x2e4a, 0x2e4a, 0x3b, 0x4a0, 0x2e2c0, 0x2e3b0, 0x2e4a0, 0x2e4a0, 
-  0x2e4a0, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, (1U<<31) | 4262, 0x4a4a4a, (1U<<31) | 4260, (1U<<31) | 4260, 
-  0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
-  0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c59, 0x44a7a, 0x44a7a, 0x2c4, 
-  0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 
-  0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x7a7a4a, 0x7a7a44, 0x7a7a4a, 0x7a7a44, 
-  0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 
-  0x2c2c2c, 0x2c2c44, 0x595959, 0x595944, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 
-  0x2c2c2c, 0x2c2c44, 0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x2c2c2c, 0x2c2c44, 
-  0x3b3b3b, 0x3b3b44, 0x4a4a4a, 0x4a4a44, 0x47a4a, 0x47a4a, 0x2c4, 0x7a7a, 
-  0x2c2c, 0x7a7a, 0x7a7a7a7a, 0x7a7a7a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 
-  0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 0x3b3b3b3b, 0x7a7a7a, 0x2c2c2c, 
-  0x595959, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x3b3b3b3b, 
-  0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 0x4a2c2c4a, 0x4a3b3b4a, 0x4a3b3b4a, 0x2c2c3b, 0x3b3b4a, 
-  0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 0x3b3b4a, 0x4a4a59, 0x2c2c3b, 
-  0x3b3b4a, 0x4a4a59, 0x7a7a7a7a, 0x2c4a4a4a, 0x4a4a3b, 0x59594a, 0x59594a, 0x3b3b2c, 
-  0x3b3b2c, 0x4a4a3b, 0x4a4a3b, 0x59594a, 0x3b3b2c, 0x4a4a3b, 0x5959, (1U<<31) | 4264, 
-  0x4a4a, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 0x2c2c2c, 0x595959, 
-  0x59595959, 0x595959, 0x3b3b3b, 0x4a4a4a, 0x4a4a4a4a, 0x4a4a4a, 0x7a7a, 0x4a4a4a4a, 
-  0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x4a4a4a, 0x4a4a4a, 0x2c2c2c, 
-  0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x4a4a4a, (1U<<31) | 4262, 
-  0x4a4a4a, (1U<<31) | 4260, (1U<<31) | 4260, 0x2c2c2c, 0x3b3b3b, 0x4a4a4a, 0x2c2c2c, 0x3b3b3b, 
-  0x4a4a4a, 0x4a4a4a, 0x4a2c4a, 0x4a3b4a, 0x4a2c4a, 0x4a4a4a, 0x3b4a, 0x2c3b, 
-  0x3b4a, 0x4a59, 0x3b4a, 0x2c3b, 0x3b4a, 0x4a59, 0x555, 0x1f0, 
-  0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 
-  0x555, 0x555, 0x444, 0x444, 0x5, 0x5, 0x5, 0x5, 
-  0x1, 0x0, 0x1f0, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a, 0x8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x48a8a8a, (1U<<31) | 3992, 
-  (1U<<31) | 3992, (1U<<31) | 3992, (1U<<31) | 3992, 0x8a8a8a, 0x8a8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 3992, 
-  (1U<<31) | 3992, (1U<<31) | 3992, (1U<<31) | 3992, (1U<<31) | 3992, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 
-  0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, 0x8a8a, (1U<<31) | 3992, 0x8a8a8a, 0x8a8a8a, 
-  0x8a8a8a, (1U<<31) | 3992, (1U<<31) | 3992, 0x8a8a8a, 0x8a8a8a, (1U<<31) | 3992, (1U<<31) | 3992, (1U<<31) | 3992, 
-  (1U<<31) | 3992, (1U<<31) | 3992, (1U<<31) | 3992, 0x48a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
-  0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 
-  0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 
-  0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x2e8a0, 0x50, 0x50, 
-  0x50, 0x50, 0x0, 0x44, 0x4444, 0x4444, 0x4444, 0x4444, 
-  0x44, 0x4, 0x44, 0x4, 0x4, 0x44, 0x4, 0x44, 
-  0x4, 0x5, 0x2e89, 0x2e89, 0x52e4a, 0x52e4a, 0x2e4a, 0x2e4a, 
-  0x2e890, 0x2e890, 0x52e4a0, 0x52e4a0, 0x2e4a0, 0x2e4a0, 0x888, 0x888, 
-  0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 
-  0x898959, 0x898944, 0x7a7a4a, 0x7a7a44, 0x897a, 0x894a, 0x894a, 0x3b7a, 
-  0x7a89, 0x7a7a, 0x597a, 0x4a89, 0x597a, 0x4a89, 0x898989, 0x7a7a7a, 
-  0x595989, 0x4a4a7a, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x8989, 0x8989, 
-  0x7a7a, 0x7a7a, 0x8989, 0x7a7a, 0x48959, 0x47a4a, 0x8959, 0x7a4a, 
-  0x8959, 0x7a4a, 0x45959, 0x4594a4a, 0x4a4a4a, 0x7a7a, 0x0, (1U<<31) | 796, 
-  0x44a4a0, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 0x4, 
-  0x2f2f, 0x2f2f, 0x4, 0x4, 0x42e4, 0x5e50, 0x40, 0x40, 
-  0x50, 0x42e4, 0x42e4, 0x42e0, 0x52f4, 0x4, 0x2c2c2c, 0x2c2c2c2c, 
-  0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x4a4a4a, 
-  0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c59, (1U<<31) | 965, 
-  (1U<<31) | 2803, (1U<<31) | 3210, (1U<<31) | 1228, (1U<<31) | 965, (1U<<31) | 2803, (1U<<31) | 3210, (1U<<31) | 1228, (1U<<31) | 965, 
-  (1U<<31) | 2803, (1U<<31) | 3210, (1U<<31) | 1228, 0x4a4a4a, (1U<<31) | 1738, (1U<<31) | 2253, (1U<<31) | 2571, (1U<<31) | 1883, 
-  0x42c2c, 0x44a4a, 0x45959, 0x43b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 
-  0x42c2c2c, (1U<<31) | 1760, 0x44a4a4a, (1U<<31) | 2231, 0x43b3b3b, (1U<<31) | 1905, 0x42c2c2c, (1U<<31) | 1760, 
-  0x44a4a4a, (1U<<31) | 2231, 0x43b3b3b, (1U<<31) | 1905, (1U<<31) | 3970, (1U<<31) | 3957, (1U<<31) | 3970, (1U<<31) | 3970, 
-  (1U<<31) | 3957, (1U<<31) | 3957, 0x2c2c2c, (1U<<31) | 965, 0x4a4a4a, (1U<<31) | 2803, 0x3b3b3b, (1U<<31) | 1228, 
-  0x2c2c2c, (1U<<31) | 965, 0x4a4a4a, (1U<<31) | 2803, 0x3b3b3b, (1U<<31) | 1228, 0x2c2c2c, (1U<<31) | 965, 
-  0x4a4a4a, (1U<<31) | 2803, 0x3b3b3b, (1U<<31) | 1228, 0x2c2c2c, (1U<<31) | 965, 0x4a4a4a, (1U<<31) | 2803, 
-  0x3b3b3b, (1U<<31) | 1228, 0x448989, 0x447a7a, 0x4898989, 0x47a7a7a, 0x4898989, 0x47a7a7a, 
-  (1U<<31) | 2719, (1U<<31) | 2651, 0x3b2c2c3b, 0x594a4a59, 0x2c59592c, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 
-  0x59592c, 0x3b3b4a, 0x2c2c, (1U<<31) | 974, 0x4a4a, (1U<<31) | 2787, 0x3b3b, (1U<<31) | 1237, 
-  0x42e2c, 0x2e42c, 0x2e42c, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 
-  0x3b3b3b3b, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c2c2c, 0x4a4a4a4a, 0x3b3b3b3b, 0x3b2c2c3b, 
-  0x594a4a59, 0x4a3b3b4a, 0x3b2c2c3b, 0x594a4a59, 0x4a3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 
-  0x2c2c2c, 0x4a4a4a, 0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c2c, 0x4a4a4a, 
-  0x3b3b3b, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, 0x2c2c3b, 0x4a4a59, 0x3b3b4a, (1U<<31) | 1770, 
-  0x4595959, 0x2c2c2c2c, 0x4a4a3b, (1U<<31) | 2794, 0x59594a, (1U<<31) | 3201, 0x3b3b2c, (1U<<31) | 1219, 
-  0x4a4a3b, (1U<<31) | 2794, 0x59594a, (1U<<31) | 3201, 0x3b3b2c, (1U<<31) | 1219, 0x2c2c2c2c, 0x2c2c2c2c, 
-  0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x42c2c2c, 
-  0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2c2c2c, 0x2e42c0, (1U<<31) | 1738, (1U<<31) | 1748, 
-  (1U<<31) | 2253, (1U<<31) | 2241, (1U<<31) | 1883, (1U<<31) | 1893, (1U<<31) | 1738, (1U<<31) | 1748, (1U<<31) | 2253, (1U<<31) | 2241, 
-  (1U<<31) | 1883, (1U<<31) | 1893, 0x2e42c0, 0x2c2c4a, 0x4a4a59, 0x3b3b59, 0x3b3b4a, 0x4a4a2c, 
-  0x59592c, 0x2c2c4, 0x2c3b, 0x4a59, 0x3b4a, 0x2c3b, 0x4a59, 0x2c3b, 
-  0x4a59, 0x3b4a, 0x3b4a, 0x2c3b, 0x4a59, 0x3b4a, 0x1f, 0x4, 
-  0x2e, 0x1f1f, 0x1f41f, 0x41f, 0x0, 0x2e40, (1U<<31) | 4155, (1U<<31) | 4152, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 4152, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4152, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4152, 
-  (1U<<31) | 4155, (1U<<31) | 4152, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4152, (1U<<31) | 4152, 0x2e4422, 0x2e5522, 
-  0x2e4422, 0x2e5522, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 
-  0x595959, 0x5a5a5a, 0x5b5b5b, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x5959, 0x25959, 
-  0x8a8a8a, 0x7b7b7b, (1U<<31) | 3992, 0x7b7b7b7b, 0x28a8a8a, 0x27b7b7b, 0x8a7a, 0x8a4a, 
-  0x7b4b, 0x4b7b, 0x8a4a, 0x7b4b, 0x27b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 
-  0x7b7b7b, 0x2e2d, 0x592e89, 0x5a2e8a, 0x4a2e7a, 0x4b2e7b, 0x89592e0, 0x8a5a2e0, 
-  0x7a4a2e0, 0x7b4b2e0, 0x8a8a8a, 0x7b7b7b, 0x8a8a8a, 0x7b7b7b, 0x8a4, 0x7b4, 
-  0x5a5a4, 0x5a5a4, 0x5a5a4, 0x7b7b, 0x48a8a, 0x47b7b, 0x7b7b, 0x8a8a, 
-  0x7b7b, 0x598989, 0x5a8a8a, 0x4a7a7a, 0x4b7b7b, 0x89894, 0x8a8a4, 0x7a7a4, 
-  0x7b7b4, 0x89894, 0x8a8a4, 0x7a7a4, 0x7b7b4, 0x89894, 0x8a8a4, 0x7a7a4, 
-  0x7b7b4, 0x0, 0x0, (1U<<31) | 422, (1U<<31) | 499, (1U<<31) | 811, (1U<<31) | 876, (1U<<31) | 677, 
-  (1U<<31) | 754, (1U<<31) | 546, (1U<<31) | 601, (1U<<31) | 444, (1U<<31) | 456, (1U<<31) | 823, (1U<<31) | 888, (1U<<31) | 699, 
-  (1U<<31) | 711, (1U<<31) | 558, (1U<<31) | 613, 0x4a2e4a, 0x4b2e4b, 0x592e59, 0x5a2e5a, 0x4a4a2e0, 
-  0x4b4b2e0, 0x59592e0, 0x5a5a2e0, 0x22d2d3c, 0x4b4b3c, 0x3c3c2d, 0x4b4b3c, 0x3c3c2d, 
-  0x2d2d2d, 0x3c3c3c, 0x2d2d2d, 0x3c3c3c, 0x2d2d2d2d, 0x4b4b4b, 0x4b7b7b, 0x4b4b4b, 
-  0x3c3c3c, 0x3c3c3c, 0x4b4b4b, 0x3c3c3c, 0x3c3c3c, 0x2d2d3c, 0x3c3c4b, 0x2d4, 
-  0x4b4b5a, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x4b4b5a, 0x2d2d5a, 0x2d2d2d, 0x2d2d2d, 
-  0x4b4b4b, 0x3c3c3c, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 0x44b4b, 0x45a5a, 0x43c3c, 
-  0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x4a4b4b, 0x3b3c3c, 0x44b4b, 0x43c3c, 
-  0x4a4a4a, 0x4b4b4b, 0x4a4b4b, 0x595a5a, 0x3b3c3c, 0x44b4b, 0x45a5a, 0x43c3c, 
-  0x4a4a4a, 0x4b4b4b, 0x595959, 0x5a5a5a, 0x2d2d2d, 0x3c3c3c, 0x2d2d2d, 0x3c3c3c, 
-  0x259, 0x25a, 0x25b, 0x34a, 0x34b, 0x34c, 0x458989, 0x447a7a, 
-  0x457a7a, 0x4894, 0x4895, 0x4894, 0x4895, 0x47a4, 0x47a5, 0x47a4, 
-  0x47a5, 0x48989, 0x447a7a, 0x458989, 0x457a7a, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1504, 
-  (1U<<31) | 1838, (1U<<31) | 1482, (1U<<31) | 1849, (1U<<31) | 1636, (1U<<31) | 1603, (1U<<31) | 1614, (1U<<31) | 1625, (1U<<31) | 1548, 
-  (1U<<31) | 1526, (1U<<31) | 1592, (1U<<31) | 1570, (1U<<31) | 1537, (1U<<31) | 1515, (1U<<31) | 1581, (1U<<31) | 1559, (1U<<31) | 1449, 
-  (1U<<31) | 1416, (1U<<31) | 1460, (1U<<31) | 1427, (1U<<31) | 1438, (1U<<31) | 1405, (1U<<31) | 1493, (1U<<31) | 1471, 0x442e4b20, 
-  0x442e4c30, 0x442e5b20, 0x442e5b20, (1U<<31) | 1727, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, 0x4898919, 
-  0x48a8a1a, 0x448b8b1b, 0x47a7a1a, 0x47b7b1b, 0x447c7c1c, 0x42489892, 0x4247a7a2, 0x32c2c2c, 
-  0x42d2d2d, (1U<<31) | 3167, 0x24a4a4a, 0x24b4b4b, 0x34c4c4c, 0x2898989, 0x28a8a8a, 0x28b8b8b, 
-  0x27a7a7a, 0x27b7b7b, 0x37c7c7c, 0x2595959, 0x25a5a5a, 0x25b5b5b, 0x32c2e0, 0x42d2e0, 
-  (1U<<31) | 3150, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x2892e0, 0x28a2e0, 0x28b2e0, 0x27a2e0, 
-  0x27b2e0, 0x37c2e0, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b2e0, 0x33c2e0, 0x43d2e0, 
-  0x23b3b3b, 0x33c3c3c, 0x43d3d3d, 0x24a4a4a, 0x24b4b4b, 0x34c4c4c, 0x2595959, 0x25a5a5a, 
-  0x25b5b5b, 0x27a4a7a, 0x27b4b7b, 0x437c4c7c, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x27a897a, 
-  0x27a8a7a, 0x427b8b7b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 
-  0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2897a89, 0x28a7a8a, 
-  0x428b7b8b, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 
-  0x25a7a5a, 0x425b7b5b, 0x2895989, 0x28a5a8a, 0x428b5b8b, 0x27a597a, 0x27a5a7a, 0x427b5b7b, 
-  (1U<<31) | 1670, (1U<<31) | 1693, 0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 
-  0x24a894a, 0x24a8a4a, 0x424b8b4b, 0x2598959, 0x25a8a5a, 0x425b8b5b, 0x24a7a4a, 0x24b7b4b, 
-  0x434c7c4c, 0x2597a59, 0x25a7a5a, 0x425b7b5b, 0x24a7a4a, 0x24b7b4b, 0x434c7c4c, 0x2597a59, 
-  0x25a7a5a, 0x425b7b5b, 0x27a4a7a, 0x27b4b7b, 0x437c4c7c, 0x2895989, 0x28a5a8a, 0x428b5b8b, 
-  0x27a597a, 0x27a5a7a, 0x427b5b7b, (1U<<31) | 270, (1U<<31) | 1135, (1U<<31) | 1935, (1U<<31) | 1727, (1U<<31) | 1872, 
-  (1U<<31) | 1704, (1U<<31) | 1659, 0x32c2c2c, 0x42d2d2d, (1U<<31) | 3167, 0x24a4a4a, 0x24b4b4b, 0x34c4c4c, 
-  0x32c2e2c, 0x42d2e2d, (1U<<31) | 3157, 0x24a2e4a, 0x24b2e4b, 0x34c2e4c, 0x2892e89, 0x28a2e8a, 
-  0x28b2e8b, 0x27a2e7a, 0x27b2e7b, 0x37c2e7c, 0x2592e59, 0x25a2e5a, 0x25b2e5b, 0x23b2e3b, 
-  0x33c2e3c, 0x43d2e3d, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, 
-  0x2595959, 0x25a5a5a, 0x25b5b5b, 0x23b3b3b, 0x33c3c3c, 0x43d3d3d, (1U<<31) | 357, (1U<<31) | 379, 
-  (1U<<31) | 1393, (1U<<31) | 313, (1U<<31) | 335, (1U<<31) | 1826, (1U<<31) | 1381, (1U<<31) | 1369, 0x24892, 0x248a2, 
-  0x248b2, 0x247a2, 0x247b2, 0x347c3, 0x24892, 0x247a2, 0x2898989, 0x28a8a8a, 
-  0x428b8b8b, 0x27a7a7a, 0x27b7b7b, 0x437c7c7c, (1U<<31) | 1704, (1U<<31) | 1659, 0x28948989, 0x28a48a8a, 
-  (1U<<31) | 1717, 0x27a47a7a, 0x27b47b7b, (1U<<31) | 1862, (1U<<31) | 1681, (1U<<31) | 1647, (1U<<31) | 1727, (1U<<31) | 1872, 
-  (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 1727, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 1727, (1U<<31) | 1872, 
-  (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, 
-  (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 900, (1U<<31) | 930, 
-  (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, 
-  (1U<<31) | 766, (1U<<31) | 1199, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 250, (1U<<31) | 1115, (1U<<31) | 1915, (1U<<31) | 401, 
-  (1U<<31) | 478, (1U<<31) | 1168, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 
-  0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 
-  0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 
-  0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 
-  0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, 0x22c4a2c, 0x22c4b2c, 
-  0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 
-  0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 
-  0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 
-  0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 
-  0x33c2e0, 0x43d2e0, 0x22c4a2c, 0x22c4b2c, 0x32c4c2c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 
-  0x23b4a3b, 0x23b4b3b, 0x33c4c3c, 0x24a2e0, 0x24b2e0, 0x34c2e0, 0x22c592c, 0x22c5a2c, 
-  0x22c5b2c, 0x2592e0, 0x25a2e0, 0x25b2e0, 0x24a594a, 0x24a5a4a, 0x24b5b4b, 0x2592e0, 
-  0x25a2e0, 0x25b2e0, 0x23b593b, 0x23b5a3b, 0x23b5b3b, 0x2592e0, 0x25a2e0, 0x25b2e0, 
-  0x22c3b2c, 0x32c3c2c, 0x42d3d2d, 0x23b2e0, 0x33c2e0, 0x43d2e0, (1U<<31) | 1095, (1U<<31) | 1780, 
-  (1U<<31) | 3165, 0x24a44a4a, 0x24b44b4b, 0x34c44c4c, 0x25945959, 0x25a45a5a, 0x25b45b5b, (1U<<31) | 434, 
-  (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, 0x24a44a4a, 0x24b44b4b, 0x34c44c4c, 
-  0x25945959, 0x25a45a5a, 0x25b45b5b, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, 
-  (1U<<31) | 656, (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 1095, 
-  (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 302, (1U<<31) | 324, (1U<<31) | 1157, 
-  (1U<<31) | 346, (1U<<31) | 368, (1U<<31) | 390, (1U<<31) | 800, (1U<<31) | 865, (1U<<31) | 1715, (1U<<31) | 666, (1U<<31) | 743, 
-  (1U<<31) | 1860, (1U<<31) | 1985, (1U<<31) | 1973, 0x28948989, 0x28a48a8a, (1U<<31) | 1717, 0x27a47a7a, 0x27b47b7b, 
-  (1U<<31) | 1862, (1U<<31) | 1985, (1U<<31) | 1973, 0x28948989, 0x28a48a8a, (1U<<31) | 1717, 0x27a47a7a, 0x27b47b7b, 
-  (1U<<31) | 1862, (1U<<31) | 1985, (1U<<31) | 1973, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, 
-  (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, 0x2898989, 0x28a8a8a, 0x428b8b8b, 0x27a7a7a, 0x27b7b7b, 
-  0x437c7c7c, (1U<<31) | 1704, (1U<<31) | 1659, 0x27a2e0, (1U<<31) | 1727, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, 
-  0x27a3b7a, 0x27b3b7b, 0x437c3c7c, 0x23b47a3b, 0x23b47b3b, 0x33c47c3c, (1U<<31) | 855, (1U<<31) | 920, 
-  (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 855, (1U<<31) | 920, 
-  (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, 
-  (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, 
-  (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, 
-  (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 260, 
-  (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 835, (1U<<31) | 900, (1U<<31) | 930, (1U<<31) | 689, (1U<<31) | 766, (1U<<31) | 1199, 
-  (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 434, (1U<<31) | 511, 
-  (1U<<31) | 1189, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 845, (1U<<31) | 910, (1U<<31) | 940, (1U<<31) | 723, 
-  (1U<<31) | 776, (1U<<31) | 1209, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, 
-  (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 411, (1U<<31) | 488, 
-  (1U<<31) | 1178, (1U<<31) | 535, (1U<<31) | 590, (1U<<31) | 645, (1U<<31) | 281, (1U<<31) | 1146, (1U<<31) | 1946, (1U<<31) | 434, 
-  (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, 
-  (1U<<31) | 411, (1U<<31) | 488, (1U<<31) | 1178, (1U<<31) | 535, (1U<<31) | 590, (1U<<31) | 645, (1U<<31) | 281, (1U<<31) | 1146, 
-  (1U<<31) | 1946, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 260, 
-  (1U<<31) | 1125, (1U<<31) | 1925, 0x32c2c3, 0x42d2d4, (1U<<31) | 3175, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, 
-  (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, 
-  (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, 
-  (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, 
-  (1U<<31) | 1872, (1U<<31) | 855, (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 1704, 
-  (1U<<31) | 1659, (1U<<31) | 357, (1U<<31) | 379, (1U<<31) | 1393, (1U<<31) | 313, (1U<<31) | 335, (1U<<31) | 1826, (1U<<31) | 1381, 
-  (1U<<31) | 1369, (1U<<31) | 302, (1U<<31) | 324, (1U<<31) | 1157, (1U<<31) | 346, (1U<<31) | 368, (1U<<31) | 390, (1U<<31) | 855, 
-  (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 855, 
-  (1U<<31) | 920, (1U<<31) | 1727, (1U<<31) | 733, (1U<<31) | 786, (1U<<31) | 1872, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, 
-  (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, 
-  (1U<<31) | 1189, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 845, 
-  (1U<<31) | 910, (1U<<31) | 940, (1U<<31) | 723, (1U<<31) | 776, (1U<<31) | 1209, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, 
-  (1U<<31) | 1095, (1U<<31) | 1780, (1U<<31) | 3165, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 570, (1U<<31) | 625, 
-  (1U<<31) | 656, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, (1U<<31) | 260, 
-  (1U<<31) | 1125, (1U<<31) | 1925, (1U<<31) | 434, (1U<<31) | 511, (1U<<31) | 1189, (1U<<31) | 570, (1U<<31) | 625, (1U<<31) | 656, 
-  (1U<<31) | 260, (1U<<31) | 1125, (1U<<31) | 1925, 0x4c4c3d, (1U<<31) | 1244, 0x4c4c3d, (1U<<31) | 1244, 0x4c4c5b, 
-  0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x4c4c5b, (1U<<31) | 1083, (1U<<31) | 1076, 0x4a4c4c, 0x595b5b, 
-  0x3b3d3d, 0x44c4c, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 
-  0x3d3d3d, 0x4a4c4c, 0x595959, 0x595a5a, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45959, 
-  0x45a5a, 0x45b5b, 0x43d3d, 0x4c4c4c, 0x595959, 0x5a5a5a, 0x5b5b5b, 0x3b3b3b, 
-  0x3c3c3c, 0x3d3d3d, 0x4a4c4c, 0x595b5b, 0x3b3d3d, 0x44c4c, 0x45b5b, 0x43d3d, 
-  0x4c4c4c, 0x5b5b5b, 0x3b3b3b, 0x3c3c3c, 0x3d3d3d, 0x2898989, 0x28a8a8a, 0x28b8b8b, 
-  0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 855, (1U<<31) | 733, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1704, 
-  (1U<<31) | 1659, 0x2898989, 0x28a8a8a, 0x28b8b8b, 0x27a7a7a, 0x27b7b7b, 0x37c7c7c, (1U<<31) | 855, 
-  (1U<<31) | 733, 0x428b8b8b, 0x437c7c7c, (1U<<31) | 1704, (1U<<31) | 1659, (1U<<31) | 2767, (1U<<31) | 2347, (1U<<31) | 2601, 
-  (1U<<31) | 2709, (1U<<31) | 2777, (1U<<31) | 2293, (1U<<31) | 2611, (1U<<31) | 2699, (1U<<31) | 2737, (1U<<31) | 2561, (1U<<31) | 2757, 
-  (1U<<31) | 2591, (1U<<31) | 2669, (1U<<31) | 2263, (1U<<31) | 2679, (1U<<31) | 2273, 0x442e4b20, 0x442e4c30, 0x442e5b20, 
-  0x442e5b20, (1U<<31) | 2727, (1U<<31) | 2551, (1U<<31) | 2747, (1U<<31) | 2581, (1U<<31) | 2659, (1U<<31) | 2221, (1U<<31) | 2689, 
-  (1U<<31) | 2283, 0x2e8b, 0x2e7c, 0x4489894, 0x447a7a4, 0x4894, 0x4895, 0x4894, 
-  0x4895, 0x47a4, 0x47a5, 0x47a4, 0x47a5, 0x5b8b8b, 0x4c7c7c, 0x444, 
-  0x555, 0x444, 0x555, 0x444, 0x555, 0x444, 0x555, 0x2e0, 
-  0x2e0, 0x2e0, 0x2e0, 0x4, 0x5, 0x40, 0x50, (1U<<31) | 3979, 
-  (1U<<31) | 3992, 0x7a7a7a7a, 0x7b7b7b7b, (1U<<31) | 3979, 0x7a7a7a7a, (1U<<31) | 3979, (1U<<31) | 3992, 0x7a7a7a7a, 
-  0x7b7b7b7b, (1U<<31) | 3979, (1U<<31) | 3992, 0x7a7a7a7a, 0x7b7b7b7b, (1U<<31) | 3979, 0x7a7a7a7a, (1U<<31) | 3979, 
-  (1U<<31) | 3992, 0x7a7a7a7a, 0x7b7b7b7b, (1U<<31) | 3979, (1U<<31) | 3992, 0x7a7a7a7a, 0x7b7b7b7b, (1U<<31) | 3979, 
-  0x7a7a7a7a, (1U<<31) | 3979, (1U<<31) | 3992, 0x7a7a7a7a, 0x7b7b7b7b, (1U<<31) | 3979, 0x7a7a7a7a, (1U<<31) | 3979, 
-  0x7a7a7a7a, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x40, 0x50, 0x20, 
-  0x2e0, 0x4442, 0x4452, 0x4440, 0x4450, 0x0, 0x0, (1U<<31) | 1064, 
-  (1U<<31) | 4150, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 1090, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 3133, 
-  (1U<<31) | 2476, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4137, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 3146, (1U<<31) | 3146, (1U<<31) | 3146, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 3146, (1U<<31) | 3146, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 3146, (1U<<31) | 3146, (1U<<31) | 3146, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 
-  (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, (1U<<31) | 4155, 0x442e0, 0x4440, 0x2595959, 0x25a5a5a, 
-  0x25b5b5b, 0x4, 0x5, 0x4, 0x5, 0x4, 0x4, 0x45, 
-  (1U<<31) | 1957, (1U<<31) | 2487, (1U<<31) | 2621, (1U<<31) | 1957, (1U<<31) | 2487, (1U<<31) | 2621, 0x44, 0x55, 
-  0x5, 0x2e5, 0x2e0, 0x0, 0x2e0, 0x2e0, 0x2e2e, 0x2e2e2e, 
-  0x0, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x24a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a4a, 
-  0x2e, 0x27a7a7a, 0x27a7a7a, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 
-  0x7a7a4, (1U<<31) | 3988, (1U<<31) | 4146, (1U<<31) | 4140, (1U<<31) | 3966, 0x47a7a, 0x57a7a, 0x7a4, 
-  0x7a5, (1U<<31) | 3988, (1U<<31) | 3966, 0x7a4, 0x7a5, 0x2e0, 0x7a7a7a, 0x7a7a7a, 
-  0x7a7a7a, 0x7a7a7a, 0x7a4, (1U<<31) | 1091, 0x7a7a, 0x7a7a, 0x7a7a, 0x7a7a, 
-  0x0, 0x7a7a, 0x7a7a, 0x2e0, 0x7a7a4, 0x7a7a4, 0x7a7a4, 0x7a7a4, 
-  0x7a7a4, 0x7a7a4, 0x2e0, 0x2898989, 0x2898989, 0x89894, 0x89894, 0x89894, 
-  0x89894, 0x89894, 0x89894, 0x4a7a, 0x894a, 0x897a, 0x7a4a, 0x894, 
-  0x895, 0x897a7a, 0x48989, 0x58989, 0x7a8989, 0x894a, 0x7a4a, 0x894, 
-  0x895, 0x0, 0x2e2c2c0, 0x898989, 0x898989, 0x0, 0x898989, 0x898989, 
-  0x894, 0x4a4a3b, 0x3b3b2c, 0x3b3b2c, 0x2c2c2c, 0x3b3b3b, 0x2c2c2c, 0x3b3b3b, 
-  0x0, 0x3b3b4a, 0x2c4, 0x3b3b3b, 0x3b3b3b, 0x4a4a59, 0x2c2c59, 0x4a4a4a, 
-  0x595959, 0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x4a4a4a, 0x3b3b3b, 0x44a4a, 
-  0x43b3b, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x44a4a, 0x45959, 0x43b3b, 0x2c2c2c, 
-  0x3b3b3b, 0x2c2c2c, 0x3b3b3b, 0x8989, 0x8989, 0x89894, 0x89894, 0x89894, 
-  0x89894, 0x89894, 0x89894, 0x898989, 0x7a7a7a, 0x898989, 0x7a7a7a, 0x898989, 
-  0x7a7a7a, 0x2e2c, 0x442e0, 0x440, (1U<<31) | 3979, 0x7a7a7a7a, 0x2898989, 0x27a7a7a, 
-  0x27a7a7a, 0x22c2c3b, 0x4a4a3b, 0x2c2c2c2c, 0x3b3b, 0x4a4a59, 0x59594, 0x59594, 
-  0x59594, 0x48989, 0x47a7a, 0x4898989, 0x47a7a7a, 0x344, 0x444, 0x244, 
-  0x555, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, 0x242c42c4, (1U<<31) | 292, 
-  0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c4, 0x22c2c2c, 0x2c5959, 
-  0x225959, 0x595959, 0x22595959, (1U<<31) | 4152, (1U<<31) | 4152, (1U<<31) | 4152, (1U<<31) | 4155, 0x4a4a4a, 
-  (1U<<31) | 4155, 0x3b3b3b, (1U<<31) | 4155, 0x3b3b3b, (1U<<31) | 4155, 0x4a4a4a, (1U<<31) | 4155, 0x3b3b3b, 
-  (1U<<31) | 4155, 0x3b3b3b, (1U<<31) | 4155, 0x2c2c3b, (1U<<31) | 4155, 0x3b3b3b, (1U<<31) | 4155, 0x2c2c2c, 
-  (1U<<31) | 4155, 0x2c2c2c, (1U<<31) | 4155, 0x4a4a4a, (1U<<31) | 4155, 0x3b3b3b, 0x2e4422, 0x2e5522, 
-  0x444, 0x555, 0x3b7a, 0x3b7b, 0x47a3b, 0x47b3b, 0x22c2c2c, 0x22d2d2d, 
-  (1U<<31) | 242, 0x22c2c2c, 0x22d2d2d, (1U<<31) | 242, 0x2c2c2c, 0x2d2d2d, (1U<<31) | 1076, 0x40, 
-  0x50, 0x40, 0x50, 0x40, 0x2e40, 0x2e50, 0x2e40, 0x2e50, 
-  0x20, 0x4, 0x0, 0x45, 0x8989, 0x8a8a, 0x7a7a, 0x7b7b, 
-  0x8989, 0x7a7a, 0x22c2c2c, 0x24a4a4a, 0x2595959, 0x22c2c2c, 0x24a4a4a, 0x2595959, 
-  0x23b3b3b, 0x23b3b3b, (1U<<31) | 580, (1U<<31) | 635, (1U<<31) | 468, (1U<<31) | 521, 0x2c4a, 0x2c59, 
-  0x2c3b, 0x4a59, 0x2c4a, 0x2c59, 0x2c3b, 0x4a59, 0x3b4a, 0x3b59, 
-  0x3b4a, 0x3b59, 0x2c3b, 0x4a59, 0x3b4a, 0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 
-  0x4a4a4a4a, 0x594a4a59, 0x594a4a59, 0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 0x3b3b3b3b, 0x4a3b3b4a, 
-  0x4a3b3b4a, 0x2c2c2c2c, 0x2c2c2c, 0x22c2c, 0x4a4a4a, 0x24a4a, 0x595959, 0x25959, 
-  0x3b3b3b, 0x23b3b, 0x2c2c2c, 0x4a4a4a, 0x595959, 0x3b3b3b, 0x2c2c2c, 0x4a4a4a, 
-  0x595959, 0x3b3b3b, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 
-  0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x442e0, 0x4440, 0x4, 
-  0x44, 0x2e2e, 0x44f0, 0x0, 0x4f0, 0x40, 0x4444, (1U<<31) | 2061, 
-  0x4f0, 0x4f0, 0x4f4, 0x4f0, 0x4, 0x4, 0x4, 0x44, 
-  0x44f, 0xcf4f, 0x4f4, 0x4f4, 0x4f4, 0x2e4f0, 0x2e4f0, 0x2e4f0, 
-  0x2e4f0, 0x2e4f0, 0x44f4, 0x4f4, 0x4f0, 0x4f0, 0x44f0, 0x44f0, 
-  0x44f4, 0x44f0, 0x4f4, 0x44f0, 0xcf4f0, 0x44f0, 0x2e4f0, 0x440, 
-  0x44f0, 0x44f0, 0xcf4f0, 0x40, 0x44f0, 0x2e4f0, 0x444, 0x0, 
-  0x4f0, 0x4f4, 0x4f4, 0x2e, 0x444, 0
-};
-
-static const unsigned char IIT_LongEncodingTable[] = {
-  /* 0 */ 0, 4, 4, 15, 0, 15, 0, 15, 0, 15, 0, 1, 1, 0,
-  /* 14 */ 15, 2, 15, 10, 15, 17, 10, 4, 4, 1, 1, 1, 1, 1, 0,
-  /* 29 */ 0, 15, 2, 15, 9, 15, 17, 4, 1, 1, 1, 1, 0,
-  /* 42 */ 4, 4, 4, 15, 1, 11, 4, 1, 1, 1, 0,
-  /* 53 */ 0, 4, 4, 15, 3, 15, 3, 1, 1, 0,
-  /* 63 */ 0, 15, 0, 10, 4, 4, 4, 4, 4, 4, 4, 1, 1, 0,
-  /* 77 */ 0, 15, 2, 10, 4, 4, 4, 1, 1, 0,
-  /* 87 */ 21, 15, 2, 1, 15, 2, 15, 2, 1, 0,
-  /* 97 */ 15, 2, 15, 2, 15, 2, 15, 2, 1, 0,
-  /* 107 */ 0, 15, 3, 33, 3, 31, 3, 1, 0,
-  /* 116 */ 0, 15, 3, 34, 1, 0, 4, 31, 3, 1, 0,
-  /* 127 */ 0, 15, 3, 15, 12, 4, 31, 3, 1, 0,
-  /* 137 */ 15, 1, 15, 12, 15, 1, 4, 4, 1, 0,
-  /* 147 */ 15, 1, 15, 1, 15, 1, 4, 4, 4, 1, 0,
-  /* 158 */ 7, 27, 3, 7, 7, 4, 4, 1, 0,
-  /* 167 */ 21, 1, 5, 1, 0,
-  /* 172 */ 21, 15, 1, 1, 15, 1, 15, 1, 0,
-  /* 181 */ 0, 19, 15, 1, 0,
-  /* 186 */ 0, 15, 4, 15, 12, 15, 17, 1, 0,
-  /* 195 */ 2, 18, 1, 0,
-  /* 199 */ 15, 1, 25, 1, 0,
-  /* 204 */ 36, 1, 36, 1, 36, 1, 0,
-  /* 211 */ 21, 12, 4, 36, 1, 12, 4, 12, 4, 36, 1, 0,
-  /* 223 */ 37, 1, 37, 1, 37, 1, 0,
-  /* 230 */ 21, 13, 4, 37, 1, 13, 4, 13, 4, 37, 1, 0,
-  /* 242 */ 16, 2, 16, 2, 16, 2, 2, 0,
-  /* 250 */ 11, 3, 12, 2, 12, 2, 11, 3, 2, 0,
-  /* 260 */ 11, 3, 11, 3, 11, 3, 11, 3, 2, 0,
-  /* 270 */ 11, 3, 12, 2, 12, 2, 4, 11, 3, 2, 0,
-  /* 281 */ 11, 3, 11, 3, 11, 3, 4, 11, 3, 2, 0,
-  /* 292 */ 12, 2, 12, 2, 4, 12, 2, 4, 2, 0,
-  /* 302 */ 10, 4, 10, 4, 10, 4, 10, 4, 4, 2, 0,
-  /* 313 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 0,
-  /* 324 */ 11, 4, 11, 4, 11, 4, 11, 4, 4, 2, 0,
-  /* 335 */ 11, 7, 11, 7, 11, 7, 11, 4, 4, 2, 0,
-  /* 346 */ 9, 5, 9, 5, 9, 5, 9, 5, 4, 2, 0,
-  /* 357 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 0,
-  /* 368 */ 10, 5, 10, 5, 10, 5, 10, 5, 4, 2, 0,
-  /* 379 */ 10, 8, 10, 8, 10, 8, 10, 5, 4, 2, 0,
-  /* 390 */ 11, 5, 11, 5, 11, 5, 11, 5, 4, 2, 0,
-  /* 401 */ 10, 4, 11, 3, 11, 3, 10, 4, 2, 0,
-  /* 411 */ 10, 4, 10, 4, 10, 4, 4, 10, 4, 2, 0,
-  /* 422 */ 10, 4, 10, 4, 14, 2, 10, 4, 10, 4, 2, 0,
-  /* 434 */ 10, 4, 10, 4, 10, 4, 10, 4, 2, 0,
-  /* 444 */ 10, 4, 10, 4, 14, 2, 9, 5, 10, 4, 2, 0,
-  /* 456 */ 10, 4, 10, 4, 14, 2, 10, 5, 10, 4, 2, 0,
-  /* 468 */ 10, 7, 10, 7, 10, 7, 10, 4, 2, 0,
-  /* 478 */ 11, 4, 12, 3, 12, 3, 11, 4, 2, 0,
-  /* 488 */ 11, 4, 11, 4, 11, 4, 4, 11, 4, 2, 0,
-  /* 499 */ 11, 4, 11, 4, 14, 2, 11, 4, 11, 4, 2, 0,
-  /* 511 */ 11, 4, 11, 4, 11, 4, 11, 4, 2, 0,
-  /* 521 */ 11, 7, 11, 7, 11, 7, 11, 4, 2, 0,
-  /* 531 */ 27, 4, 2, 0,
-  /* 535 */ 9, 5, 9, 5, 9, 5, 4, 9, 5, 2, 0,
-  /* 546 */ 9, 5, 9, 5, 14, 2, 10, 4, 9, 5, 2, 0,
-  /* 558 */ 9, 5, 9, 5, 14, 2, 9, 5, 9, 5, 2, 0,
-  /* 570 */ 9, 5, 9, 5, 9, 5, 9, 5, 2, 0,
-  /* 580 */ 9, 8, 9, 8, 9, 8, 9, 5, 2, 0,
-  /* 590 */ 10, 5, 10, 5, 10, 5, 4, 10, 5, 2, 0,
-  /* 601 */ 10, 5, 10, 5, 14, 2, 10, 4, 10, 5, 2, 0,
-  /* 613 */ 10, 5, 10, 5, 14, 2, 10, 5, 10, 5, 2, 0,
-  /* 625 */ 10, 5, 10, 5, 10, 5, 10, 5, 2, 0,
-  /* 635 */ 10, 8, 10, 8, 10, 8, 10, 5, 2, 0,
-  /* 645 */ 11, 5, 11, 5, 11, 5, 4, 11, 5, 2, 0,
-  /* 656 */ 11, 5, 11, 5, 11, 5, 11, 5, 2, 0,
-  /* 666 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 0,
-  /* 677 */ 10, 7, 10, 7, 14, 2, 10, 4, 10, 7, 2, 0,
-  /* 689 */ 10, 7, 10, 7, 10, 4, 10, 7, 2, 0,
-  /* 699 */ 10, 7, 10, 7, 14, 2, 9, 5, 10, 7, 2, 0,
-  /* 711 */ 10, 7, 10, 7, 14, 2, 10, 5, 10, 7, 2, 0,
-  /* 723 */ 10, 7, 10, 4, 10, 7, 10, 7, 2, 0,
-  /* 733 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 0,
-  /* 743 */ 11, 7, 11, 7, 11, 7, 4, 11, 7, 2, 0,
-  /* 754 */ 11, 7, 11, 7, 14, 2, 11, 4, 11, 7, 2, 0,
-  /* 766 */ 11, 7, 11, 7, 11, 4, 11, 7, 2, 0,
-  /* 776 */ 11, 7, 11, 4, 11, 7, 11, 7, 2, 0,
-  /* 786 */ 11, 7, 11, 7, 11, 7, 11, 7, 2, 0,
-  /* 796 */ 27, 7, 2, 0,
-  /* 800 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 0,
-  /* 811 */ 9, 8, 9, 8, 14, 2, 10, 4, 9, 8, 2, 0,
-  /* 823 */ 9, 8, 9, 8, 14, 2, 9, 5, 9, 8, 2, 0,
-  /* 835 */ 9, 8, 9, 8, 9, 5, 9, 8, 2, 0,
-  /* 845 */ 9, 8, 9, 5, 9, 8, 9, 8, 2, 0,
-  /* 855 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 0,
-  /* 865 */ 10, 8, 10, 8, 10, 8, 4, 10, 8, 2, 0,
-  /* 876 */ 10, 8, 10, 8, 14, 2, 10, 4, 10, 8, 2, 0,
-  /* 888 */ 10, 8, 10, 8, 14, 2, 10, 5, 10, 8, 2, 0,
-  /* 900 */ 10, 8, 10, 8, 10, 5, 10, 8, 2, 0,
-  /* 910 */ 10, 8, 10, 5, 10, 8, 10, 8, 2, 0,
-  /* 920 */ 10, 8, 10, 8, 10, 8, 10, 8, 2, 0,
-  /* 930 */ 11, 8, 11, 8, 11, 5, 11, 8, 2, 0,
-  /* 940 */ 11, 8, 11, 5, 11, 8, 11, 8, 2, 0,
-  /* 950 */ 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 11, 2, 0,
-  /* 965 */ 21, 12, 2, 4, 12, 2, 12, 2, 0,
-  /* 974 */ 21, 12, 2, 4, 12, 2, 0,
-  /* 981 */ 18, 4, 14, 2, 14, 2, 14, 2, 0,
-  /* 990 */ 21, 4, 14, 2, 14, 2, 4, 14, 2, 0,
-  /* 1000 */ 21, 5, 14, 2, 14, 2, 4, 14, 2, 0,
-  /* 1010 */ 21, 4, 14, 2, 14, 2, 4, 4, 14, 2, 0,
-  /* 1021 */ 21, 5, 14, 2, 14, 2, 4, 4, 14, 2, 0,
-  /* 1032 */ 14, 2, 14, 2, 4, 4, 4, 14, 2, 0,
-  /* 1042 */ 21, 4, 4, 14, 2, 0,
-  /* 1048 */ 14, 2, 14, 2, 4, 4, 5, 14, 2, 0,
-  /* 1058 */ 21, 5, 5, 14, 2, 0,
-  /* 1064 */ 0, 17, 17, 14, 2, 0,
-  /* 1070 */ 14, 2, 18, 14, 2, 0,
-  /* 1076 */ 16, 2, 16, 2, 16, 2, 0,
-  /* 1083 */ 11, 5, 16, 2, 16, 2, 0,
-  /* 1090 */ 17, 17, 17, 2, 0,
-  /* 1095 */ 12, 2, 12, 2, 12, 2, 12, 2, 3, 0,
-  /* 1105 */ 0, 5, 4, 4, 4, 3, 3, 3, 3, 0,
-  /* 1115 */ 12, 3, 13, 2, 13, 2, 12, 3, 3, 0,
-  /* 1125 */ 12, 3, 12, 3, 12, 3, 12, 3, 3, 0,
-  /* 1135 */ 12, 3, 13, 2, 13, 2, 4, 12, 3, 3, 0,
-  /* 1146 */ 12, 3, 12, 3, 12, 3, 4, 12, 3, 3, 0,
-  /* 1157 */ 12, 4, 12, 4, 12, 4, 12, 4, 4, 3, 0,
-  /* 1168 */ 12, 4, 13, 3, 13, 3, 12, 4, 3, 0,
-  /* 1178 */ 12, 4, 12, 4, 12, 4, 4, 12, 4, 3, 0,
-  /* 1189 */ 12, 4, 12, 4, 12, 4, 12, 4, 3, 0,
-  /* 1199 */ 12, 7, 12, 7, 12, 4, 12, 7, 3, 0,
-  /* 1209 */ 12, 7, 12, 4, 12, 7, 12, 7, 3, 0,
-  /* 1219 */ 21, 12, 2, 4, 11, 3, 11, 3, 0,
-  /* 1228 */ 21, 11, 3, 4, 11, 3, 11, 3, 0,
-  /* 1237 */ 21, 11, 3, 4, 11, 3, 0,
-  /* 1244 */ 16, 2, 13, 3, 13, 3, 0,
-  /* 1251 */ 15, 3, 33, 3, 31, 3, 1, 15, 3, 0,
-  /* 1261 */ 15, 3, 34, 1, 0, 4, 31, 3, 1, 15, 3, 0,
-  /* 1273 */ 15, 3, 15, 12, 4, 31, 3, 1, 15, 3, 0,
-  /* 1284 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 12, 2, 15, 3, 0,
-  /* 1299 */ 15, 3, 15, 3, 12, 2, 12, 2, 12, 2, 15, 3, 0,
-  /* 1312 */ 15, 3, 15, 3, 12, 2, 12, 2, 15, 3, 0,
-  /* 1323 */ 15, 3, 25, 3, 0,
-  /* 1328 */ 15, 3, 25, 3, 25, 3, 0,
-  /* 1335 */ 15, 3, 26, 3, 0,
-  /* 1340 */ 15, 3, 26, 3, 26, 3, 0,
-  /* 1347 */ 15, 1, 25, 1, 4, 0,
-  /* 1353 */ 12, 4, 12, 4, 36, 1, 4, 0,
-  /* 1361 */ 13, 4, 13, 4, 37, 1, 4, 0,
-  /* 1369 */ 10, 7, 10, 7, 10, 7, 10, 4, 4, 2, 4, 0,
-  /* 1381 */ 9, 8, 9, 8, 9, 8, 9, 5, 4, 2, 4, 0,
-  /* 1393 */ 11, 8, 11, 8, 11, 8, 11, 5, 4, 2, 4, 0,
-  /* 1405 */ 10, 4, 10, 4, 14, 2, 10, 4, 2, 4, 0,
-  /* 1416 */ 9, 5, 9, 5, 14, 2, 10, 4, 2, 4, 0,
-  /* 1427 */ 10, 5, 10, 5, 14, 2, 10, 4, 2, 4, 0,
-  /* 1438 */ 10, 7, 10, 7, 14, 2, 10, 4, 2, 4, 0,
-  /* 1449 */ 9, 8, 9, 8, 14, 2, 10, 4, 2, 4, 0,
-  /* 1460 */ 10, 8, 10, 8, 14, 2, 10, 4, 2, 4, 0,
-  /* 1471 */ 11, 4, 11, 4, 14, 2, 11, 4, 2, 4, 0,
-  /* 1482 */ 11, 5, 11, 5, 14, 2, 11, 4, 2, 4, 0,
-  /* 1493 */ 11, 7, 11, 7, 14, 2, 11, 4, 2, 4, 0,
-  /* 1504 */ 11, 8, 11, 8, 14, 2, 11, 4, 2, 4, 0,
-  /* 1515 */ 10, 4, 10, 4, 14, 2, 9, 5, 2, 4, 0,
-  /* 1526 */ 9, 5, 9, 5, 14, 2, 9, 5, 2, 4, 0,
-  /* 1537 */ 10, 7, 10, 7, 14, 2, 9, 5, 2, 4, 0,
-  /* 1548 */ 9, 8, 9, 8, 14, 2, 9, 5, 2, 4, 0,
-  /* 1559 */ 10, 4, 10, 4, 14, 2, 10, 5, 2, 4, 0,
-  /* 1570 */ 10, 5, 10, 5, 14, 2, 10, 5, 2, 4, 0,
-  /* 1581 */ 10, 7, 10, 7, 14, 2, 10, 5, 2, 4, 0,
-  /* 1592 */ 10, 8, 10, 8, 14, 2, 10, 5, 2, 4, 0,
-  /* 1603 */ 11, 4, 11, 4, 14, 2, 11, 5, 2, 4, 0,
-  /* 1614 */ 11, 5, 11, 5, 14, 2, 11, 5, 2, 4, 0,
-  /* 1625 */ 11, 7, 11, 7, 14, 2, 11, 5, 2, 4, 0,
-  /* 1636 */ 11, 8, 11, 8, 14, 2, 11, 5, 2, 4, 0,
-  /* 1647 */ 10, 7, 10, 7, 10, 7, 4, 10, 7, 2, 4, 0,
-  /* 1659 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 0,
-  /* 1670 */ 10, 7, 10, 7, 9, 8, 10, 7, 2, 4, 0,
-  /* 1681 */ 9, 8, 9, 8, 9, 8, 4, 9, 8, 2, 4, 0,
-  /* 1693 */ 9, 8, 9, 8, 10, 7, 9, 8, 2, 4, 0,
-  /* 1704 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 0,
-  /* 1715 */ 11, 8, 11, 8, 11, 8, 4, 11, 8, 2, 4, 0,
-  /* 1727 */ 11, 8, 11, 8, 11, 8, 11, 8, 2, 4, 0,
-  /* 1738 */ 12, 2, 12, 2, 12, 2, 12, 2, 4, 0,
-  /* 1748 */ 21, 12, 2, 4, 12, 2, 12, 2, 12, 2, 4, 0,
-  /* 1760 */ 21, 12, 2, 4, 12, 2, 12, 2, 4, 0,
-  /* 1770 */ 12, 2, 9, 5, 9, 5, 12, 2, 4, 0,
-  /* 1780 */ 13, 2, 13, 2, 13, 2, 13, 2, 4, 0,
-  /* 1790 */ 15, 1, 15, 1, 14, 2, 14, 2, 4, 0,
-  /* 1800 */ 15, 4, 15, 4, 14, 2, 14, 2, 4, 0,
-  /* 1810 */ 21, 4, 14, 2, 14, 2, 4, 0,
-  /* 1818 */ 21, 5, 14, 2, 14, 2, 4, 0,
-  /* 1826 */ 12, 7, 12, 7, 12, 7, 12, 4, 4, 3, 4, 0,
-  /* 1838 */ 12, 4, 12, 4, 14, 2, 12, 4, 3, 4, 0,
-  /* 1849 */ 12, 7, 12, 7, 14, 2, 12, 4, 3, 4, 0,
-  /* 1860 */ 12, 7, 12, 7, 12, 7, 4, 12, 7, 3, 4, 0,
-  /* 1872 */ 12, 7, 12, 7, 12, 7, 12, 7, 3, 4, 0,
-  /* 1883 */ 11, 3, 11, 3, 11, 3, 11, 3, 4, 0,
-  /* 1893 */ 21, 11, 3, 4, 11, 3, 11, 3, 11, 3, 4, 0,
-  /* 1905 */ 21, 11, 3, 4, 11, 3, 11, 3, 4, 0,
-  /* 1915 */ 13, 3, 16, 2, 16, 2, 13, 3, 4, 0,
-  /* 1925 */ 13, 3, 13, 3, 13, 3, 13, 3, 4, 0,
-  /* 1935 */ 13, 3, 16, 2, 16, 2, 4, 13, 3, 4, 0,
-  /* 1946 */ 13, 3, 13, 3, 13, 3, 4, 13, 3, 4, 0,
-  /* 1957 */ 21, 3, 4, 0,
-  /* 1961 */ 15, 3, 26, 3, 4, 0,
-  /* 1967 */ 21, 4, 1, 4, 4, 0,
-  /* 1973 */ 10, 7, 10, 7, 10, 7, 10, 7, 2, 4, 4, 0,
-  /* 1985 */ 9, 8, 9, 8, 9, 8, 9, 8, 2, 4, 4, 0,
-  /* 1997 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 15, 3, 4, 4, 0,
-  /* 2019 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 15, 3, 4, 4, 0,
-  /* 2037 */ 21, 15, 3, 15, 3, 15, 12, 15, 3, 15, 3, 4, 4, 0,
-  /* 2051 */ 0, 5, 4, 4, 4, 4, 4, 4, 4, 0,
-  /* 2061 */ 21, 4, 4, 4, 4, 4, 0,
-  /* 2068 */ 23, 3, 3, 3, 3, 5, 4, 4, 4, 0,
-  /* 2078 */ 21, 3, 3, 5, 4, 4, 4, 0,
-  /* 2086 */ 23, 4, 4, 4, 4, 5, 4, 4, 4, 0,
-  /* 2096 */ 21, 4, 4, 5, 4, 4, 4, 0,
-  /* 2104 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 4, 0,
-  /* 2115 */ 21, 5, 5, 5, 4, 4, 4, 0,
-  /* 2123 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 4, 0,
-  /* 2134 */ 23, 7, 7, 7, 7, 5, 4, 4, 4, 0,
-  /* 2144 */ 16, 4, 16, 4, 16, 4, 4, 4, 0,
-  /* 2153 */ 23, 3, 3, 3, 3, 5, 4, 4, 0,
-  /* 2162 */ 21, 3, 3, 5, 4, 4, 0,
-  /* 2169 */ 23, 4, 4, 4, 4, 5, 4, 4, 0,
-  /* 2178 */ 21, 4, 4, 5, 4, 4, 0,
-  /* 2185 */ 23, 4, 4, 4, 4, 5, 5, 4, 4, 0,
-  /* 2195 */ 21, 5, 5, 5, 4, 4, 0,
-  /* 2202 */ 23, 7, 7, 7, 7, 5, 5, 4, 4, 0,
-  /* 2212 */ 23, 7, 7, 7, 7, 5, 4, 4, 0,
-  /* 2221 */ 0, 14, 2, 2, 10, 4, 10, 4, 4, 0,
-  /* 2231 */ 21, 10, 4, 4, 10, 4, 10, 4, 4, 0,
-  /* 2241 */ 21, 10, 4, 4, 10, 4, 10, 4, 10, 4, 4, 0,
-  /* 2253 */ 10, 4, 10, 4, 10, 4, 10, 4, 4, 0,
-  /* 2263 */ 0, 14, 2, 2, 9, 5, 10, 4, 4, 0,
-  /* 2273 */ 0, 14, 2, 2, 10, 5, 10, 4, 4, 0,
-  /* 2283 */ 0, 14, 2, 2, 11, 4, 11, 4, 4, 0,
-  /* 2293 */ 0, 14, 2, 2, 11, 5, 11, 4, 4, 0,
-  /* 2303 */ 0, 15, 4, 15, 11, 15, 11, 4, 4, 0,
-  /* 2313 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 4, 0,
-  /* 2325 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 4, 0,
-  /* 2339 */ 36, 1, 36, 1, 12, 4, 4, 0,
-  /* 2347 */ 0, 14, 2, 3, 12, 4, 12, 4, 4, 0,
-  /* 2357 */ 12, 4, 12, 4, 12, 4, 12, 4, 4, 0,
-  /* 2367 */ 13, 4, 13, 4, 12, 4, 12, 4, 4, 0,
-  /* 2377 */ 37, 1, 37, 1, 13, 4, 4, 0,
-  /* 2385 */ 13, 4, 13, 4, 13, 4, 13, 4, 4, 0,
-  /* 2395 */ 16, 4, 16, 4, 13, 4, 13, 4, 4, 0,
-  /* 2405 */ 16, 4, 16, 4, 13, 4, 4, 0,
-  /* 2413 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
-  /* 2434 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 4, 0,
-  /* 2447 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 4, 0,
-  /* 2460 */ 13, 4, 13, 4, 16, 4, 4, 0,
-  /* 2468 */ 16, 4, 16, 4, 16, 4, 4, 0,
-  /* 2476 */ 17, 17, 4, 4, 0,
-  /* 2481 */ 15, 0, 18, 4, 4, 0,
-  /* 2487 */ 21, 4, 4, 0,
-  /* 2491 */ 23, 3, 3, 3, 3, 5, 4, 0,
-  /* 2499 */ 21, 3, 3, 5, 4, 0,
-  /* 2505 */ 23, 4, 4, 4, 4, 5, 4, 0,
-  /* 2513 */ 21, 4, 4, 5, 4, 0,
-  /* 2519 */ 23, 4, 4, 4, 4, 5, 5, 4, 0,
-  /* 2528 */ 21, 5, 5, 5, 4, 0,
-  /* 2534 */ 23, 7, 7, 7, 7, 5, 5, 4, 0,
-  /* 2543 */ 23, 7, 7, 7, 7, 5, 4, 0,
-  /* 2551 */ 0, 14, 2, 2, 10, 4, 9, 5, 4, 0,
-  /* 2561 */ 0, 14, 2, 2, 9, 5, 9, 5, 4, 0,
-  /* 2571 */ 9, 5, 9, 5, 9, 5, 9, 5, 4, 0,
-  /* 2581 */ 0, 14, 2, 2, 10, 4, 10, 5, 4, 0,
-  /* 2591 */ 0, 14, 2, 2, 10, 5, 10, 5, 4, 0,
-  /* 2601 */ 0, 14, 2, 2, 11, 4, 11, 5, 4, 0,
-  /* 2611 */ 0, 14, 2, 2, 11, 5, 11, 5, 4, 0,
-  /* 2621 */ 21, 5, 4, 0,
-  /* 2625 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 4, 0,
-  /* 2638 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 4, 0,
-  /* 2651 */ 21, 10, 4, 4, 10, 7, 4, 0,
-  /* 2659 */ 0, 14, 2, 2, 10, 4, 10, 7, 4, 0,
-  /* 2669 */ 0, 14, 2, 2, 9, 5, 10, 7, 4, 0,
-  /* 2679 */ 0, 14, 2, 2, 10, 5, 10, 7, 4, 0,
-  /* 2689 */ 0, 14, 2, 2, 11, 4, 11, 7, 4, 0,
-  /* 2699 */ 0, 14, 2, 2, 11, 5, 11, 7, 4, 0,
-  /* 2709 */ 0, 14, 2, 3, 12, 4, 12, 7, 4, 0,
-  /* 2719 */ 21, 9, 5, 4, 9, 8, 4, 0,
-  /* 2727 */ 0, 14, 2, 2, 10, 4, 9, 8, 4, 0,
-  /* 2737 */ 0, 14, 2, 2, 9, 5, 9, 8, 4, 0,
-  /* 2747 */ 0, 14, 2, 2, 10, 4, 10, 8, 4, 0,
-  /* 2757 */ 0, 14, 2, 2, 10, 5, 10, 8, 4, 0,
-  /* 2767 */ 0, 14, 2, 2, 11, 4, 11, 8, 4, 0,
-  /* 2777 */ 0, 14, 2, 2, 11, 5, 11, 8, 4, 0,
-  /* 2787 */ 21, 10, 4, 4, 10, 4, 0,
-  /* 2794 */ 21, 11, 3, 4, 10, 4, 10, 4, 0,
-  /* 2803 */ 21, 10, 4, 4, 10, 4, 10, 4, 0,
-  /* 2812 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 4, 0,
-  /* 2823 */ 0, 15, 4, 15, 11, 15, 11, 15, 11, 15, 11, 4, 0,
-  /* 2836 */ 12, 4, 36, 1, 12, 4, 0,
-  /* 2843 */ 0, 36, 1, 14, 2, 12, 4, 0,
-  /* 2851 */ 0, 14, 2, 36, 1, 4, 4, 12, 4, 0,
-  /* 2861 */ 36, 1, 36, 1, 12, 4, 12, 4, 0,
-  /* 2870 */ 12, 4, 36, 1, 12, 4, 12, 4, 0,
-  /* 2879 */ 13, 4, 36, 1, 12, 4, 12, 4, 0,
-  /* 2888 */ 0, 36, 1, 4, 4, 12, 4, 12, 4, 0,
-  /* 2898 */ 0, 36, 1, 4, 4, 13, 4, 12, 4, 0,
-  /* 2908 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 2921 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 2932 */ 21, 15, 3, 15, 3, 15, 12, 4, 0,
-  /* 2941 */ 13, 4, 37, 1, 13, 4, 0,
-  /* 2948 */ 0, 37, 1, 14, 2, 13, 4, 0,
-  /* 2956 */ 0, 14, 2, 36, 1, 4, 4, 13, 4, 0,
-  /* 2966 */ 0, 14, 2, 37, 1, 4, 4, 13, 4, 0,
-  /* 2976 */ 37, 1, 37, 1, 13, 4, 13, 4, 0,
-  /* 2985 */ 13, 4, 37, 1, 13, 4, 13, 4, 0,
-  /* 2994 */ 16, 4, 37, 1, 13, 4, 13, 4, 0,
-  /* 3003 */ 0, 37, 1, 4, 4, 13, 4, 13, 4, 0,
-  /* 3013 */ 16, 4, 16, 4, 13, 4, 13, 4, 0,
-  /* 3022 */ 0, 4, 4, 16, 4, 13, 4, 0,
-  /* 3030 */ 0, 37, 1, 4, 4, 16, 4, 13, 4, 0,
-  /* 3040 */ 16, 4, 16, 4, 13, 4, 0,
-  /* 3047 */ 0, 14, 20, 5, 15, 4, 0,
-  /* 3054 */ 40, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
-  /* 3074 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 15, 4, 0,
-  /* 3086 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 15, 4, 0,
-  /* 3098 */ 5, 19, 15, 4, 0,
-  /* 3103 */ 0, 14, 2, 37, 1, 4, 4, 16, 4, 0,
-  /* 3113 */ 0, 14, 2, 4, 4, 16, 4, 0,
-  /* 3121 */ 13, 4, 16, 4, 0,
-  /* 3126 */ 16, 4, 16, 4, 16, 4, 0,
-  /* 3133 */ 4, 17, 4, 0,
-  /* 3137 */ 0, 15, 4, 15, 12, 15, 17, 4, 0,
-  /* 3146 */ 17, 17, 4, 0,
-  /* 3150 */ 0, 14, 2, 16, 2, 5, 0,
-  /* 3157 */ 16, 2, 14, 2, 16, 2, 5, 0,
-  /* 3165 */ 16, 2, 16, 2, 16, 2, 16, 2, 5, 0,
-  /* 3175 */ 5, 16, 2, 16, 2, 5, 0,
-  /* 3182 */ 21, 5, 1, 4, 5, 0,
-  /* 3188 */ 16, 4, 16, 4, 13, 4, 5, 0,
-  /* 3196 */ 21, 1, 5, 5, 0,
-  /* 3201 */ 21, 10, 4, 4, 9, 5, 9, 5, 0,
-  /* 3210 */ 21, 9, 5, 4, 9, 5, 9, 5, 0,
-  /* 3219 */ 0, 15, 4, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 3231 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 3281 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 0,
-  /* 3331 */ 23, 4, 4, 4, 4, 5, 4, 7, 0,
-  /* 3340 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 0,
-  /* 3350 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 0,
-  /* 3360 */ 23, 7, 7, 7, 7, 5, 4, 7, 0,
-  /* 3369 */ 23, 4, 4, 4, 4, 5, 7, 0,
-  /* 3377 */ 23, 4, 4, 4, 4, 5, 5, 7, 0,
-  /* 3386 */ 23, 7, 7, 7, 7, 5, 5, 7, 0,
-  /* 3395 */ 23, 7, 7, 7, 7, 5, 7, 0,
-  /* 3403 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 0,
-  /* 3413 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 0,
-  /* 3424 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 0,
-  /* 3435 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 0,
-  /* 3445 */ 23, 4, 4, 4, 4, 5, 7, 7, 0,
-  /* 3454 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 0,
-  /* 3464 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 0,
-  /* 3474 */ 23, 7, 7, 7, 7, 5, 7, 7, 0,
-  /* 3483 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 0,
-  /* 3494 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 0,
-  /* 3506 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 0,
-  /* 3518 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 0,
-  /* 3529 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 0,
-  /* 3539 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 0,
-  /* 3550 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 0,
-  /* 3561 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 0,
-  /* 3571 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 0,
-  /* 3583 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 0,
-  /* 3596 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 0,
-  /* 3609 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 0,
-  /* 3621 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 0,
-  /* 3632 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 0,
-  /* 3644 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 0,
-  /* 3656 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 0,
-  /* 3667 */ 23, 4, 4, 4, 4, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 3681 */ 23, 4, 4, 4, 4, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 3696 */ 23, 7, 7, 7, 7, 5, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 3711 */ 23, 7, 7, 7, 7, 5, 4, 7, 7, 7, 7, 7, 7, 0,
-  /* 3725 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 3738 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 3752 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 3766 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 0,
-  /* 3779 */ 0, 15, 4, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3791 */ 23, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3841 */ 40, 7, 7, 7, 7, 7, 7, 7, 7, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 9, 6, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3891 */ 23, 4, 4, 4, 4, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3907 */ 23, 4, 4, 4, 4, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3924 */ 23, 7, 7, 7, 7, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3941 */ 23, 7, 7, 7, 7, 5, 7, 7, 7, 7, 7, 7, 7, 7, 7, 0,
-  /* 3957 */ 21, 10, 4, 4, 10, 7, 10, 7, 0,
-  /* 3966 */ 17, 10, 7, 0,
-  /* 3970 */ 21, 9, 5, 4, 9, 8, 9, 8, 0,
-  /* 3979 */ 9, 8, 9, 8, 9, 8, 9, 8, 0,
-  /* 3988 */ 17, 9, 8, 0,
-  /* 3992 */ 10, 8, 10, 8, 10, 8, 10, 8, 0,
-  /* 4001 */ 0, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 4011 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 4023 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 4035 */ 22, 15, 3, 15, 3, 15, 3, 15, 12, 0,
-  /* 4045 */ 21, 15, 3, 15, 3, 15, 12, 0,
-  /* 4053 */ 0, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4062 */ 0, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4073 */ 0, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4086 */ 23, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4107 */ 22, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4124 */ 21, 15, 3, 15, 3, 15, 3, 15, 3, 5, 15, 12, 0,
-  /* 4137 */ 4, 17, 0,
-  /* 4140 */ 10, 7, 10, 7, 17, 0,
-  /* 4146 */ 9, 8, 17, 0,
-  /* 4150 */ 0, 14, 17, 17, 0,
-  /* 4155 */ 17, 17, 17, 0,
-  /* 4159 */ 15, 0, 18, 0,
-  /* 4163 */ 1, 18, 0,
-  /* 4166 */ 15, 4, 18, 0,
-  /* 4170 */ 0, 19, 0,
-  /* 4173 */ 15, 1, 19, 0,
-  /* 4177 */ 1, 14, 2, 19, 0,
-  /* 4182 */ 21, 14, 2, 1, 14, 2, 4, 19, 0,
-  /* 4191 */ 15, 2, 15, 10, 15, 19, 0,
-  /* 4198 */ 15, 2, 15, 2, 15, 2, 15, 2, 19, 19, 0,
-  /* 4209 */ 15, 2, 15, 2, 4, 19, 19, 0,
-  /* 4217 */ 0, 19, 19, 19, 0,
-  /* 4222 */ 15, 0, 29, 0,
-  /* 4226 */ 0, 1, 29, 0,
-  /* 4230 */ 0, 5, 4, 14, 2, 4, 29, 0,
-  /* 4238 */ 5, 5, 4, 14, 2, 4, 29, 0,
-  /* 4246 */ 18, 5, 4, 15, 4, 4, 4, 29, 0,
-  /* 4255 */ 0, 5, 4, 29, 0,
-  /* 4260 */ 28, 35, 28, 35, 28, 35, 28, 35, 0,
-  255
-};
-
-#endif
-
-// Add parameter attributes that are not common to all intrinsics.
-#ifdef GET_INTRINSIC_ATTRIBUTES
-AttributeList Intrinsic::getAttributes(LLVMContext &C, ID id) {
-  static const uint8_t IntrinsicsToAttributesMap[] = {
-    1, // llvm.addressofreturnaddress
-    2, // llvm.adjust.trampoline
-    3, // llvm.annotation
-    3, // llvm.assume
-    4, // llvm.bitreverse
-    4, // llvm.bswap
-    4, // llvm.canonicalize
-    4, // llvm.ceil
-    3, // llvm.clear_cache
-    5, // llvm.codeview.annotation
-    1, // llvm.convert.from.fp16
-    1, // llvm.convert.to.fp16
-    4, // llvm.copysign
-    3, // llvm.coro.alloc
-    6, // llvm.coro.begin
-    7, // llvm.coro.destroy
-    8, // llvm.coro.done
-    3, // llvm.coro.end
-    1, // llvm.coro.frame
-    9, // llvm.coro.free
-    10, // llvm.coro.id
-    11, // llvm.coro.param
-    12, // llvm.coro.promise
-    7, // llvm.coro.resume
-    3, // llvm.coro.save
-    1, // llvm.coro.size
-    13, // llvm.coro.subfn.addr
-    3, // llvm.coro.suspend
-    4, // llvm.cos
-    4, // llvm.ctlz
-    4, // llvm.ctpop
-    4, // llvm.cttz
-    4, // llvm.dbg.addr
-    4, // llvm.dbg.declare
-    4, // llvm.dbg.value
-    3, // llvm.debugtrap
-    1, // llvm.donothing
-    3, // llvm.eh.dwarf.cfa
-    1, // llvm.eh.exceptioncode
-    1, // llvm.eh.exceptionpointer
-    3, // llvm.eh.return.i32
-    3, // llvm.eh.return.i64
-    1, // llvm.eh.sjlj.callsite
-    3, // llvm.eh.sjlj.functioncontext
-    14, // llvm.eh.sjlj.longjmp
-    1, // llvm.eh.sjlj.lsda
-    3, // llvm.eh.sjlj.setjmp
-    3, // llvm.eh.sjlj.setup.dispatch
-    1, // llvm.eh.typeid.for
-    3, // llvm.eh.unwind.init
-    4, // llvm.exp
-    4, // llvm.exp2
-    1, // llvm.expect
-    15, // llvm.experimental.constrained.cos
-    15, // llvm.experimental.constrained.exp
-    15, // llvm.experimental.constrained.exp2
-    15, // llvm.experimental.constrained.fadd
-    15, // llvm.experimental.constrained.fdiv
-    15, // llvm.experimental.constrained.fma
-    15, // llvm.experimental.constrained.fmul
-    15, // llvm.experimental.constrained.frem
-    15, // llvm.experimental.constrained.fsub
-    15, // llvm.experimental.constrained.log
-    15, // llvm.experimental.constrained.log10
-    15, // llvm.experimental.constrained.log2
-    15, // llvm.experimental.constrained.nearbyint
-    15, // llvm.experimental.constrained.pow
-    15, // llvm.experimental.constrained.powi
-    15, // llvm.experimental.constrained.rint
-    15, // llvm.experimental.constrained.sin
-    15, // llvm.experimental.constrained.sqrt
-    7, // llvm.experimental.deoptimize
-    16, // llvm.experimental.gc.relocate
-    16, // llvm.experimental.gc.result
-    7, // llvm.experimental.gc.statepoint
-    7, // llvm.experimental.guard
-    7, // llvm.experimental.patchpoint.i64
-    7, // llvm.experimental.patchpoint.void
-    7, // llvm.experimental.stackmap
-    1, // llvm.experimental.vector.reduce.add
-    1, // llvm.experimental.vector.reduce.and
-    1, // llvm.experimental.vector.reduce.fadd
-    1, // llvm.experimental.vector.reduce.fmax
-    1, // llvm.experimental.vector.reduce.fmin
-    1, // llvm.experimental.vector.reduce.fmul
-    1, // llvm.experimental.vector.reduce.mul
-    1, // llvm.experimental.vector.reduce.or
-    1, // llvm.experimental.vector.reduce.smax
-    1, // llvm.experimental.vector.reduce.smin
-    1, // llvm.experimental.vector.reduce.umax
-    1, // llvm.experimental.vector.reduce.umin
-    1, // llvm.experimental.vector.reduce.xor
-    4, // llvm.fabs
-    4, // llvm.floor
-    3, // llvm.flt.rounds
-    4, // llvm.fma
-    4, // llvm.fmuladd
-    1, // llvm.frameaddress
-    2, // llvm.gcread
-    3, // llvm.gcroot
-    17, // llvm.gcwrite
-    3, // llvm.get.dynamic.area.offset
-    3, // llvm.icall.branch.funnel
-    18, // llvm.init.trampoline
-    3, // llvm.instrprof.increment
-    3, // llvm.instrprof.increment.step
-    3, // llvm.instrprof.value.profile
-    19, // llvm.invariant.end
-    2, // llvm.invariant.group.barrier
-    20, // llvm.invariant.start
-    20, // llvm.lifetime.end
-    20, // llvm.lifetime.start
-    2, // llvm.load.relative
-    1, // llvm.localaddress
-    3, // llvm.localescape
-    1, // llvm.localrecover
-    4, // llvm.log
-    4, // llvm.log10
-    4, // llvm.log2
-    14, // llvm.longjmp
-    21, // llvm.masked.compressstore
-    16, // llvm.masked.expandload
-    16, // llvm.masked.gather
-    2, // llvm.masked.load
-    3, // llvm.masked.scatter
-    21, // llvm.masked.store
-    4, // llvm.maxnum
-    22, // llvm.memcpy
-    22, // llvm.memcpy.element.unordered.atomic
-    23, // llvm.memmove
-    22, // llvm.memmove.element.unordered.atomic
-    24, // llvm.memset
-    24, // llvm.memset.element.unordered.atomic
-    4, // llvm.minnum
-    4, // llvm.nearbyint
-    4, // llvm.objectsize
-    3, // llvm.pcmarker
-    4, // llvm.pow
-    4, // llvm.powi
-    25, // llvm.prefetch
-    3, // llvm.ptr.annotation
-    16, // llvm.read_register
-    3, // llvm.readcyclecounter
-    1, // llvm.returnaddress
-    4, // llvm.rint
-    4, // llvm.round
-    4, // llvm.sadd.with.overflow
-    3, // llvm.setjmp
-    15, // llvm.sideeffect
-    14, // llvm.siglongjmp
-    3, // llvm.sigsetjmp
-    4, // llvm.sin
-    4, // llvm.smul.with.overflow
-    4, // llvm.sqrt
-    26, // llvm.ssa.copy
-    4, // llvm.ssub.with.overflow
-    3, // llvm.stackguard
-    3, // llvm.stackprotector
-    3, // llvm.stackrestore
-    3, // llvm.stacksave
-    1, // llvm.thread.pointer
-    14, // llvm.trap
-    4, // llvm.trunc
-    1, // llvm.type.checked.load
-    1, // llvm.type.test
-    4, // llvm.uadd.with.overflow
-    4, // llvm.umul.with.overflow
-    4, // llvm.usub.with.overflow
-    3, // llvm.va_copy
-    3, // llvm.va_end
-    3, // llvm.va_start
-    3, // llvm.var.annotation
-    3, // llvm.write_register
-    27, // llvm.xray.customevent
-    3, // llvm.aarch64.clrex
-    1, // llvm.aarch64.crc32b
-    1, // llvm.aarch64.crc32cb
-    1, // llvm.aarch64.crc32ch
-    1, // llvm.aarch64.crc32cw
-    1, // llvm.aarch64.crc32cx
-    1, // llvm.aarch64.crc32h
-    1, // llvm.aarch64.crc32w
-    1, // llvm.aarch64.crc32x
-    1, // llvm.aarch64.crypto.aesd
-    1, // llvm.aarch64.crypto.aese
-    1, // llvm.aarch64.crypto.aesimc
-    1, // llvm.aarch64.crypto.aesmc
-    1, // llvm.aarch64.crypto.sha1c
-    1, // llvm.aarch64.crypto.sha1h
-    1, // llvm.aarch64.crypto.sha1m
-    1, // llvm.aarch64.crypto.sha1p
-    1, // llvm.aarch64.crypto.sha1su0
-    1, // llvm.aarch64.crypto.sha1su1
-    1, // llvm.aarch64.crypto.sha256h
-    1, // llvm.aarch64.crypto.sha256h2
-    1, // llvm.aarch64.crypto.sha256su0
-    1, // llvm.aarch64.crypto.sha256su1
-    3, // llvm.aarch64.dmb
-    3, // llvm.aarch64.dsb
-    3, // llvm.aarch64.hint
-    3, // llvm.aarch64.isb
-    3, // llvm.aarch64.ldaxp
-    3, // llvm.aarch64.ldaxr
-    3, // llvm.aarch64.ldxp
-    3, // llvm.aarch64.ldxr
-    1, // llvm.aarch64.neon.abs
-    1, // llvm.aarch64.neon.addhn
-    1, // llvm.aarch64.neon.addp
-    1, // llvm.aarch64.neon.cls
-    1, // llvm.aarch64.neon.fabd
-    1, // llvm.aarch64.neon.facge
-    1, // llvm.aarch64.neon.facgt
-    1, // llvm.aarch64.neon.faddv
-    1, // llvm.aarch64.neon.fcvtas
-    1, // llvm.aarch64.neon.fcvtau
-    1, // llvm.aarch64.neon.fcvtms
-    1, // llvm.aarch64.neon.fcvtmu
-    1, // llvm.aarch64.neon.fcvtns
-    1, // llvm.aarch64.neon.fcvtnu
-    1, // llvm.aarch64.neon.fcvtps
-    1, // llvm.aarch64.neon.fcvtpu
-    1, // llvm.aarch64.neon.fcvtxn
-    1, // llvm.aarch64.neon.fcvtzs
-    1, // llvm.aarch64.neon.fcvtzu
-    1, // llvm.aarch64.neon.fmax
-    1, // llvm.aarch64.neon.fmaxnm
-    1, // llvm.aarch64.neon.fmaxnmp
-    1, // llvm.aarch64.neon.fmaxnmv
-    1, // llvm.aarch64.neon.fmaxp
-    1, // llvm.aarch64.neon.fmaxv
-    1, // llvm.aarch64.neon.fmin
-    1, // llvm.aarch64.neon.fminnm
-    1, // llvm.aarch64.neon.fminnmp
-    1, // llvm.aarch64.neon.fminnmv
-    1, // llvm.aarch64.neon.fminp
-    1, // llvm.aarch64.neon.fminv
-    1, // llvm.aarch64.neon.fmulx
-    1, // llvm.aarch64.neon.frecpe
-    1, // llvm.aarch64.neon.frecps
-    1, // llvm.aarch64.neon.frecpx
-    1, // llvm.aarch64.neon.frintn
-    1, // llvm.aarch64.neon.frsqrte
-    1, // llvm.aarch64.neon.frsqrts
-    2, // llvm.aarch64.neon.ld1x2
-    2, // llvm.aarch64.neon.ld1x3
-    2, // llvm.aarch64.neon.ld1x4
-    2, // llvm.aarch64.neon.ld2
-    2, // llvm.aarch64.neon.ld2lane
-    2, // llvm.aarch64.neon.ld2r
-    2, // llvm.aarch64.neon.ld3
-    2, // llvm.aarch64.neon.ld3lane
-    2, // llvm.aarch64.neon.ld3r
-    2, // llvm.aarch64.neon.ld4
-    2, // llvm.aarch64.neon.ld4lane
-    2, // llvm.aarch64.neon.ld4r
-    1, // llvm.aarch64.neon.pmul
-    1, // llvm.aarch64.neon.pmull
-    1, // llvm.aarch64.neon.pmull64
-    1, // llvm.aarch64.neon.raddhn
-    1, // llvm.aarch64.neon.rbit
-    1, // llvm.aarch64.neon.rshrn
-    1, // llvm.aarch64.neon.rsubhn
-    1, // llvm.aarch64.neon.sabd
-    1, // llvm.aarch64.neon.saddlp
-    1, // llvm.aarch64.neon.saddlv
-    1, // llvm.aarch64.neon.saddv
-    1, // llvm.aarch64.neon.scalar.sqxtn
-    1, // llvm.aarch64.neon.scalar.sqxtun
-    1, // llvm.aarch64.neon.scalar.uqxtn
-    1, // llvm.aarch64.neon.shadd
-    1, // llvm.aarch64.neon.shll
-    1, // llvm.aarch64.neon.shsub
-    1, // llvm.aarch64.neon.smax
-    1, // llvm.aarch64.neon.smaxp
-    1, // llvm.aarch64.neon.smaxv
-    1, // llvm.aarch64.neon.smin
-    1, // llvm.aarch64.neon.sminp
-    1, // llvm.aarch64.neon.sminv
-    1, // llvm.aarch64.neon.smull
-    1, // llvm.aarch64.neon.sqabs
-    1, // llvm.aarch64.neon.sqadd
-    1, // llvm.aarch64.neon.sqdmulh
-    1, // llvm.aarch64.neon.sqdmull
-    1, // llvm.aarch64.neon.sqdmulls.scalar
-    1, // llvm.aarch64.neon.sqneg
-    1, // llvm.aarch64.neon.sqrdmulh
-    1, // llvm.aarch64.neon.sqrshl
-    1, // llvm.aarch64.neon.sqrshrn
-    1, // llvm.aarch64.neon.sqrshrun
-    1, // llvm.aarch64.neon.sqshl
-    1, // llvm.aarch64.neon.sqshlu
-    1, // llvm.aarch64.neon.sqshrn
-    1, // llvm.aarch64.neon.sqshrun
-    1, // llvm.aarch64.neon.sqsub
-    1, // llvm.aarch64.neon.sqxtn
-    1, // llvm.aarch64.neon.sqxtun
-    1, // llvm.aarch64.neon.srhadd
-    1, // llvm.aarch64.neon.srshl
-    1, // llvm.aarch64.neon.sshl
-    1, // llvm.aarch64.neon.sshll
-    19, // llvm.aarch64.neon.st1x2
-    28, // llvm.aarch64.neon.st1x3
-    29, // llvm.aarch64.neon.st1x4
-    19, // llvm.aarch64.neon.st2
-    28, // llvm.aarch64.neon.st2lane
-    28, // llvm.aarch64.neon.st3
-    29, // llvm.aarch64.neon.st3lane
-    29, // llvm.aarch64.neon.st4
-    30, // llvm.aarch64.neon.st4lane
-    1, // llvm.aarch64.neon.subhn
-    1, // llvm.aarch64.neon.suqadd
-    1, // llvm.aarch64.neon.tbl1
-    1, // llvm.aarch64.neon.tbl2
-    1, // llvm.aarch64.neon.tbl3
-    1, // llvm.aarch64.neon.tbl4
-    1, // llvm.aarch64.neon.tbx1
-    1, // llvm.aarch64.neon.tbx2
-    1, // llvm.aarch64.neon.tbx3
-    1, // llvm.aarch64.neon.tbx4
-    1, // llvm.aarch64.neon.uabd
-    1, // llvm.aarch64.neon.uaddlp
-    1, // llvm.aarch64.neon.uaddlv
-    1, // llvm.aarch64.neon.uaddv
-    1, // llvm.aarch64.neon.uhadd
-    1, // llvm.aarch64.neon.uhsub
-    1, // llvm.aarch64.neon.umax
-    1, // llvm.aarch64.neon.umaxp
-    1, // llvm.aarch64.neon.umaxv
-    1, // llvm.aarch64.neon.umin
-    1, // llvm.aarch64.neon.uminp
-    1, // llvm.aarch64.neon.uminv
-    1, // llvm.aarch64.neon.umull
-    1, // llvm.aarch64.neon.uqadd
-    1, // llvm.aarch64.neon.uqrshl
-    1, // llvm.aarch64.neon.uqrshrn
-    1, // llvm.aarch64.neon.uqshl
-    1, // llvm.aarch64.neon.uqshrn
-    1, // llvm.aarch64.neon.uqsub
-    1, // llvm.aarch64.neon.uqxtn
-    1, // llvm.aarch64.neon.urecpe
-    1, // llvm.aarch64.neon.urhadd
-    1, // llvm.aarch64.neon.urshl
-    1, // llvm.aarch64.neon.ursqrte
-    1, // llvm.aarch64.neon.ushl
-    1, // llvm.aarch64.neon.ushll
-    1, // llvm.aarch64.neon.usqadd
-    1, // llvm.aarch64.neon.vcopy.lane
-    1, // llvm.aarch64.neon.vcvtfp2fxs
-    1, // llvm.aarch64.neon.vcvtfp2fxu
-    1, // llvm.aarch64.neon.vcvtfp2hf
-    1, // llvm.aarch64.neon.vcvtfxs2fp
-    1, // llvm.aarch64.neon.vcvtfxu2fp
-    1, // llvm.aarch64.neon.vcvthf2fp
-    1, // llvm.aarch64.neon.vsli
-    1, // llvm.aarch64.neon.vsri
-    1, // llvm.aarch64.sdiv
-    1, // llvm.aarch64.sisd.fabd
-    1, // llvm.aarch64.sisd.fcvtxn
-    3, // llvm.aarch64.stlxp
-    3, // llvm.aarch64.stlxr
-    3, // llvm.aarch64.stxp
-    3, // llvm.aarch64.stxr
-    1, // llvm.aarch64.udiv
-    4, // llvm.amdgcn.alignbit
-    4, // llvm.amdgcn.alignbyte
-    18, // llvm.amdgcn.atomic.dec
-    18, // llvm.amdgcn.atomic.inc
-    31, // llvm.amdgcn.break
-    3, // llvm.amdgcn.buffer.atomic.add
-    3, // llvm.amdgcn.buffer.atomic.and
-    3, // llvm.amdgcn.buffer.atomic.cmpswap
-    3, // llvm.amdgcn.buffer.atomic.or
-    3, // llvm.amdgcn.buffer.atomic.smax
-    3, // llvm.amdgcn.buffer.atomic.smin
-    3, // llvm.amdgcn.buffer.atomic.sub
-    3, // llvm.amdgcn.buffer.atomic.swap
-    3, // llvm.amdgcn.buffer.atomic.umax
-    3, // llvm.amdgcn.buffer.atomic.umin
-    3, // llvm.amdgcn.buffer.atomic.xor
-    16, // llvm.amdgcn.buffer.load
-    16, // llvm.amdgcn.buffer.load.format
-    32, // llvm.amdgcn.buffer.store
-    32, // llvm.amdgcn.buffer.store.format
-    3, // llvm.amdgcn.buffer.wbinvl1
-    3, // llvm.amdgcn.buffer.wbinvl1.sc
-    3, // llvm.amdgcn.buffer.wbinvl1.vol
-    4, // llvm.amdgcn.class
-    4, // llvm.amdgcn.cos
-    4, // llvm.amdgcn.cubeid
-    4, // llvm.amdgcn.cubema
-    4, // llvm.amdgcn.cubesc
-    4, // llvm.amdgcn.cubetc
-    4, // llvm.amdgcn.cvt.pk.i16
-    4, // llvm.amdgcn.cvt.pk.u16
-    4, // llvm.amdgcn.cvt.pk.u8.f32
-    4, // llvm.amdgcn.cvt.pknorm.i16
-    4, // llvm.amdgcn.cvt.pknorm.u16
-    4, // llvm.amdgcn.cvt.pkrtz
-    4, // llvm.amdgcn.dispatch.id
-    4, // llvm.amdgcn.dispatch.ptr
-    4, // llvm.amdgcn.div.fixup
-    4, // llvm.amdgcn.div.fmas
-    4, // llvm.amdgcn.div.scale
-    31, // llvm.amdgcn.ds.bpermute
-    18, // llvm.amdgcn.ds.fadd
-    18, // llvm.amdgcn.ds.fmax
-    18, // llvm.amdgcn.ds.fmin
-    31, // llvm.amdgcn.ds.permute
-    31, // llvm.amdgcn.ds.swizzle
-    33, // llvm.amdgcn.else
-    31, // llvm.amdgcn.else.break
-    33, // llvm.amdgcn.end.cf
-    3, // llvm.amdgcn.exp
-    3, // llvm.amdgcn.exp.compr
-    31, // llvm.amdgcn.fcmp
-    4, // llvm.amdgcn.fdiv.fast
-    4, // llvm.amdgcn.fmed3
-    4, // llvm.amdgcn.fmul.legacy
-    4, // llvm.amdgcn.fract
-    4, // llvm.amdgcn.frexp.exp
-    4, // llvm.amdgcn.frexp.mant
-    4, // llvm.amdgcn.groupstaticsize
-    31, // llvm.amdgcn.icmp
-    33, // llvm.amdgcn.if
-    31, // llvm.amdgcn.if.break
-    3, // llvm.amdgcn.image.atomic.add
-    3, // llvm.amdgcn.image.atomic.and
-    3, // llvm.amdgcn.image.atomic.cmpswap
-    3, // llvm.amdgcn.image.atomic.dec
-    3, // llvm.amdgcn.image.atomic.inc
-    3, // llvm.amdgcn.image.atomic.or
-    3, // llvm.amdgcn.image.atomic.smax
-    3, // llvm.amdgcn.image.atomic.smin
-    3, // llvm.amdgcn.image.atomic.sub
-    3, // llvm.amdgcn.image.atomic.swap
-    3, // llvm.amdgcn.image.atomic.umax
-    3, // llvm.amdgcn.image.atomic.umin
-    3, // llvm.amdgcn.image.atomic.xor
-    16, // llvm.amdgcn.image.gather4
-    16, // llvm.amdgcn.image.gather4.b
-    16, // llvm.amdgcn.image.gather4.b.cl
-    16, // llvm.amdgcn.image.gather4.b.cl.o
-    16, // llvm.amdgcn.image.gather4.b.o
-    16, // llvm.amdgcn.image.gather4.c
-    16, // llvm.amdgcn.image.gather4.c.b
-    16, // llvm.amdgcn.image.gather4.c.b.cl
-    16, // llvm.amdgcn.image.gather4.c.b.cl.o
-    16, // llvm.amdgcn.image.gather4.c.b.o
-    16, // llvm.amdgcn.image.gather4.c.cl
-    16, // llvm.amdgcn.image.gather4.c.cl.o
-    16, // llvm.amdgcn.image.gather4.c.l
-    16, // llvm.amdgcn.image.gather4.c.l.o
-    16, // llvm.amdgcn.image.gather4.c.lz
-    16, // llvm.amdgcn.image.gather4.c.lz.o
-    16, // llvm.amdgcn.image.gather4.c.o
-    16, // llvm.amdgcn.image.gather4.cl
-    16, // llvm.amdgcn.image.gather4.cl.o
-    16, // llvm.amdgcn.image.gather4.l
-    16, // llvm.amdgcn.image.gather4.l.o
-    16, // llvm.amdgcn.image.gather4.lz
-    16, // llvm.amdgcn.image.gather4.lz.o
-    16, // llvm.amdgcn.image.gather4.o
-    1, // llvm.amdgcn.image.getlod
-    1, // llvm.amdgcn.image.getresinfo
-    16, // llvm.amdgcn.image.load
-    16, // llvm.amdgcn.image.load.mip
-    16, // llvm.amdgcn.image.sample
-    16, // llvm.amdgcn.image.sample.b
-    16, // llvm.amdgcn.image.sample.b.cl
-    16, // llvm.amdgcn.image.sample.b.cl.o
-    16, // llvm.amdgcn.image.sample.b.o
-    16, // llvm.amdgcn.image.sample.c
-    16, // llvm.amdgcn.image.sample.c.b
-    16, // llvm.amdgcn.image.sample.c.b.cl
-    16, // llvm.amdgcn.image.sample.c.b.cl.o
-    16, // llvm.amdgcn.image.sample.c.b.o
-    16, // llvm.amdgcn.image.sample.c.cd
-    16, // llvm.amdgcn.image.sample.c.cd.cl
-    16, // llvm.amdgcn.image.sample.c.cd.cl.o
-    16, // llvm.amdgcn.image.sample.c.cd.o
-    16, // llvm.amdgcn.image.sample.c.cl
-    16, // llvm.amdgcn.image.sample.c.cl.o
-    16, // llvm.amdgcn.image.sample.c.d
-    16, // llvm.amdgcn.image.sample.c.d.cl
-    16, // llvm.amdgcn.image.sample.c.d.cl.o
-    16, // llvm.amdgcn.image.sample.c.d.o
-    16, // llvm.amdgcn.image.sample.c.l
-    16, // llvm.amdgcn.image.sample.c.l.o
-    16, // llvm.amdgcn.image.sample.c.lz
-    16, // llvm.amdgcn.image.sample.c.lz.o
-    16, // llvm.amdgcn.image.sample.c.o
-    16, // llvm.amdgcn.image.sample.cd
-    16, // llvm.amdgcn.image.sample.cd.cl
-    16, // llvm.amdgcn.image.sample.cd.cl.o
-    16, // llvm.amdgcn.image.sample.cd.o
-    16, // llvm.amdgcn.image.sample.cl
-    16, // llvm.amdgcn.image.sample.cl.o
-    16, // llvm.amdgcn.image.sample.d
-    16, // llvm.amdgcn.image.sample.d.cl
-    16, // llvm.amdgcn.image.sample.d.cl.o
-    16, // llvm.amdgcn.image.sample.d.o
-    16, // llvm.amdgcn.image.sample.l
-    16, // llvm.amdgcn.image.sample.l.o
-    16, // llvm.amdgcn.image.sample.lz
-    16, // llvm.amdgcn.image.sample.lz.o
-    16, // llvm.amdgcn.image.sample.o
-    32, // llvm.amdgcn.image.store
-    32, // llvm.amdgcn.image.store.mip
-    4, // llvm.amdgcn.implicit.buffer.ptr
-    4, // llvm.amdgcn.implicitarg.ptr
-    33, // llvm.amdgcn.init.exec
-    33, // llvm.amdgcn.init.exec.from.input
-    4, // llvm.amdgcn.interp.mov
-    4, // llvm.amdgcn.interp.p1
-    4, // llvm.amdgcn.interp.p2
-    4, // llvm.amdgcn.kernarg.segment.ptr
-    3, // llvm.amdgcn.kill
-    4, // llvm.amdgcn.ldexp
-    4, // llvm.amdgcn.lerp
-    4, // llvm.amdgcn.log.clamp
-    33, // llvm.amdgcn.loop
-    1, // llvm.amdgcn.mbcnt.hi
-    1, // llvm.amdgcn.mbcnt.lo
-    31, // llvm.amdgcn.mov.dpp
-    4, // llvm.amdgcn.mqsad.pk.u16.u8
-    4, // llvm.amdgcn.mqsad.u32.u8
-    4, // llvm.amdgcn.msad.u8
-    1, // llvm.amdgcn.ps.live
-    4, // llvm.amdgcn.qsad.pk.u16.u8
-    4, // llvm.amdgcn.queue.ptr
-    4, // llvm.amdgcn.rcp
-    4, // llvm.amdgcn.rcp.legacy
-    31, // llvm.amdgcn.readfirstlane
-    31, // llvm.amdgcn.readlane
-    4, // llvm.amdgcn.rsq
-    4, // llvm.amdgcn.rsq.clamp
-    4, // llvm.amdgcn.rsq.legacy
-    33, // llvm.amdgcn.s.barrier
-    3, // llvm.amdgcn.s.dcache.inv
-    3, // llvm.amdgcn.s.dcache.inv.vol
-    3, // llvm.amdgcn.s.dcache.wb
-    3, // llvm.amdgcn.s.dcache.wb.vol
-    3, // llvm.amdgcn.s.decperflevel
-    4, // llvm.amdgcn.s.getpc
-    34, // llvm.amdgcn.s.getreg
-    3, // llvm.amdgcn.s.incperflevel
-    16, // llvm.amdgcn.s.memrealtime
-    16, // llvm.amdgcn.s.memtime
-    3, // llvm.amdgcn.s.sendmsg
-    3, // llvm.amdgcn.s.sendmsghalt
-    3, // llvm.amdgcn.s.sleep
-    3, // llvm.amdgcn.s.waitcnt
-    4, // llvm.amdgcn.sad.hi.u8
-    4, // llvm.amdgcn.sad.u16
-    4, // llvm.amdgcn.sad.u8
-    4, // llvm.amdgcn.sbfe
-    31, // llvm.amdgcn.set.inactive
-    4, // llvm.amdgcn.sffbh
-    4, // llvm.amdgcn.sin
-    16, // llvm.amdgcn.tbuffer.load
-    32, // llvm.amdgcn.tbuffer.store
-    4, // llvm.amdgcn.trig.preop
-    4, // llvm.amdgcn.ubfe
-    33, // llvm.amdgcn.unreachable
-    31, // llvm.amdgcn.update.dpp
-    33, // llvm.amdgcn.wave.barrier
-    4, // llvm.amdgcn.workgroup.id.x
-    4, // llvm.amdgcn.workgroup.id.y
-    4, // llvm.amdgcn.workgroup.id.z
-    4, // llvm.amdgcn.workitem.id.x
-    4, // llvm.amdgcn.workitem.id.y
-    4, // llvm.amdgcn.workitem.id.z
-    4, // llvm.amdgcn.wqm
-    31, // llvm.amdgcn.wqm.vote
-    31, // llvm.amdgcn.writelane
-    4, // llvm.amdgcn.wwm
-    3, // llvm.arm.cdp
-    3, // llvm.arm.cdp2
-    3, // llvm.arm.clrex
-    1, // llvm.arm.crc32b
-    1, // llvm.arm.crc32cb
-    1, // llvm.arm.crc32ch
-    1, // llvm.arm.crc32cw
-    1, // llvm.arm.crc32h
-    1, // llvm.arm.crc32w
-    3, // llvm.arm.dbg
-    3, // llvm.arm.dmb
-    3, // llvm.arm.dsb
-    3, // llvm.arm.get.fpscr
-    3, // llvm.arm.hint
-    3, // llvm.arm.isb
-    3, // llvm.arm.ldaex
-    3, // llvm.arm.ldaexd
-    3, // llvm.arm.ldc
-    3, // llvm.arm.ldc2
-    3, // llvm.arm.ldc2l
-    3, // llvm.arm.ldcl
-    3, // llvm.arm.ldrex
-    3, // llvm.arm.ldrexd
-    3, // llvm.arm.mcr
-    3, // llvm.arm.mcr2
-    3, // llvm.arm.mcrr
-    3, // llvm.arm.mcrr2
-    3, // llvm.arm.mrc
-    3, // llvm.arm.mrc2
-    3, // llvm.arm.mrrc
-    3, // llvm.arm.mrrc2
-    1, // llvm.arm.neon.aesd
-    1, // llvm.arm.neon.aese
-    1, // llvm.arm.neon.aesimc
-    1, // llvm.arm.neon.aesmc
-    1, // llvm.arm.neon.sha1c
-    1, // llvm.arm.neon.sha1h
-    1, // llvm.arm.neon.sha1m
-    1, // llvm.arm.neon.sha1p
-    1, // llvm.arm.neon.sha1su0
-    1, // llvm.arm.neon.sha1su1
-    1, // llvm.arm.neon.sha256h
-    1, // llvm.arm.neon.sha256h2
-    1, // llvm.arm.neon.sha256su0
-    1, // llvm.arm.neon.sha256su1
-    1, // llvm.arm.neon.vabds
-    1, // llvm.arm.neon.vabdu
-    1, // llvm.arm.neon.vabs
-    1, // llvm.arm.neon.vacge
-    1, // llvm.arm.neon.vacgt
-    1, // llvm.arm.neon.vbsl
-    1, // llvm.arm.neon.vcls
-    1, // llvm.arm.neon.vcvtas
-    1, // llvm.arm.neon.vcvtau
-    1, // llvm.arm.neon.vcvtfp2fxs
-    1, // llvm.arm.neon.vcvtfp2fxu
-    1, // llvm.arm.neon.vcvtfp2hf
-    1, // llvm.arm.neon.vcvtfxs2fp
-    1, // llvm.arm.neon.vcvtfxu2fp
-    1, // llvm.arm.neon.vcvthf2fp
-    1, // llvm.arm.neon.vcvtms
-    1, // llvm.arm.neon.vcvtmu
-    1, // llvm.arm.neon.vcvtns
-    1, // llvm.arm.neon.vcvtnu
-    1, // llvm.arm.neon.vcvtps
-    1, // llvm.arm.neon.vcvtpu
-    1, // llvm.arm.neon.vhadds
-    1, // llvm.arm.neon.vhaddu
-    1, // llvm.arm.neon.vhsubs
-    1, // llvm.arm.neon.vhsubu
-    2, // llvm.arm.neon.vld1
-    2, // llvm.arm.neon.vld2
-    2, // llvm.arm.neon.vld2lane
-    2, // llvm.arm.neon.vld3
-    2, // llvm.arm.neon.vld3lane
-    2, // llvm.arm.neon.vld4
-    2, // llvm.arm.neon.vld4lane
-    1, // llvm.arm.neon.vmaxnm
-    1, // llvm.arm.neon.vmaxs
-    1, // llvm.arm.neon.vmaxu
-    1, // llvm.arm.neon.vminnm
-    1, // llvm.arm.neon.vmins
-    1, // llvm.arm.neon.vminu
-    1, // llvm.arm.neon.vmullp
-    1, // llvm.arm.neon.vmulls
-    1, // llvm.arm.neon.vmullu
-    1, // llvm.arm.neon.vmulp
-    1, // llvm.arm.neon.vpadals
-    1, // llvm.arm.neon.vpadalu
-    1, // llvm.arm.neon.vpadd
-    1, // llvm.arm.neon.vpaddls
-    1, // llvm.arm.neon.vpaddlu
-    1, // llvm.arm.neon.vpmaxs
-    1, // llvm.arm.neon.vpmaxu
-    1, // llvm.arm.neon.vpmins
-    1, // llvm.arm.neon.vpminu
-    1, // llvm.arm.neon.vqabs
-    1, // llvm.arm.neon.vqadds
-    1, // llvm.arm.neon.vqaddu
-    1, // llvm.arm.neon.vqdmulh
-    1, // llvm.arm.neon.vqdmull
-    1, // llvm.arm.neon.vqmovns
-    1, // llvm.arm.neon.vqmovnsu
-    1, // llvm.arm.neon.vqmovnu
-    1, // llvm.arm.neon.vqneg
-    1, // llvm.arm.neon.vqrdmulh
-    1, // llvm.arm.neon.vqrshiftns
-    1, // llvm.arm.neon.vqrshiftnsu
-    1, // llvm.arm.neon.vqrshiftnu
-    1, // llvm.arm.neon.vqrshifts
-    1, // llvm.arm.neon.vqrshiftu
-    1, // llvm.arm.neon.vqshiftns
-    1, // llvm.arm.neon.vqshiftnsu
-    1, // llvm.arm.neon.vqshiftnu
-    1, // llvm.arm.neon.vqshifts
-    1, // llvm.arm.neon.vqshiftsu
-    1, // llvm.arm.neon.vqshiftu
-    1, // llvm.arm.neon.vqsubs
-    1, // llvm.arm.neon.vqsubu
-    1, // llvm.arm.neon.vraddhn
-    1, // llvm.arm.neon.vrecpe
-    1, // llvm.arm.neon.vrecps
-    1, // llvm.arm.neon.vrhadds
-    1, // llvm.arm.neon.vrhaddu
-    1, // llvm.arm.neon.vrinta
-    1, // llvm.arm.neon.vrintm
-    1, // llvm.arm.neon.vrintn
-    1, // llvm.arm.neon.vrintp
-    1, // llvm.arm.neon.vrintx
-    1, // llvm.arm.neon.vrintz
-    1, // llvm.arm.neon.vrshiftn
-    1, // llvm.arm.neon.vrshifts
-    1, // llvm.arm.neon.vrshiftu
-    1, // llvm.arm.neon.vrsqrte
-    1, // llvm.arm.neon.vrsqrts
-    1, // llvm.arm.neon.vrsubhn
-    1, // llvm.arm.neon.vshiftins
-    1, // llvm.arm.neon.vshifts
-    1, // llvm.arm.neon.vshiftu
-    21, // llvm.arm.neon.vst1
-    21, // llvm.arm.neon.vst2
-    21, // llvm.arm.neon.vst2lane
-    21, // llvm.arm.neon.vst3
-    21, // llvm.arm.neon.vst3lane
-    21, // llvm.arm.neon.vst4
-    21, // llvm.arm.neon.vst4lane
-    1, // llvm.arm.neon.vtbl1
-    1, // llvm.arm.neon.vtbl2
-    1, // llvm.arm.neon.vtbl3
-    1, // llvm.arm.neon.vtbl4
-    1, // llvm.arm.neon.vtbx1
-    1, // llvm.arm.neon.vtbx2
-    1, // llvm.arm.neon.vtbx3
-    1, // llvm.arm.neon.vtbx4
-    1, // llvm.arm.qadd
-    1, // llvm.arm.qadd16
-    1, // llvm.arm.qadd8
-    1, // llvm.arm.qasx
-    1, // llvm.arm.qsax
-    1, // llvm.arm.qsub
-    1, // llvm.arm.qsub16
-    1, // llvm.arm.qsub8
-    3, // llvm.arm.sadd16
-    3, // llvm.arm.sadd8
-    3, // llvm.arm.sasx
-    16, // llvm.arm.sel
-    3, // llvm.arm.set.fpscr
-    1, // llvm.arm.shadd16
-    1, // llvm.arm.shadd8
-    1, // llvm.arm.shasx
-    1, // llvm.arm.shsax
-    1, // llvm.arm.shsub16
-    1, // llvm.arm.shsub8
-    1, // llvm.arm.smlabb
-    1, // llvm.arm.smlabt
-    1, // llvm.arm.smlad
-    1, // llvm.arm.smladx
-    1, // llvm.arm.smlald
-    1, // llvm.arm.smlaldx
-    1, // llvm.arm.smlatb
-    1, // llvm.arm.smlatt
-    1, // llvm.arm.smlawb
-    1, // llvm.arm.smlawt
-    1, // llvm.arm.smlsd
-    1, // llvm.arm.smlsdx
-    1, // llvm.arm.smlsld
-    1, // llvm.arm.smlsldx
-    1, // llvm.arm.smuad
-    1, // llvm.arm.smuadx
-    1, // llvm.arm.smulbb
-    1, // llvm.arm.smulbt
-    1, // llvm.arm.smultb
-    1, // llvm.arm.smultt
-    1, // llvm.arm.smulwb
-    1, // llvm.arm.smulwt
-    1, // llvm.arm.smusd
-    1, // llvm.arm.smusdx
-    3, // llvm.arm.space
-    1, // llvm.arm.ssat
-    1, // llvm.arm.ssat16
-    3, // llvm.arm.ssax
-    3, // llvm.arm.ssub16
-    3, // llvm.arm.ssub8
-    3, // llvm.arm.stc
-    3, // llvm.arm.stc2
-    3, // llvm.arm.stc2l
-    3, // llvm.arm.stcl
-    3, // llvm.arm.stlex
-    3, // llvm.arm.stlexd
-    3, // llvm.arm.strex
-    3, // llvm.arm.strexd
-    1, // llvm.arm.sxtab16
-    1, // llvm.arm.sxtb16
-    3, // llvm.arm.uadd16
-    3, // llvm.arm.uadd8
-    3, // llvm.arm.uasx
-    1, // llvm.arm.uhadd16
-    1, // llvm.arm.uhadd8
-    1, // llvm.arm.uhasx
-    1, // llvm.arm.uhsax
-    1, // llvm.arm.uhsub16
-    1, // llvm.arm.uhsub8
-    3, // llvm.arm.undefined
-    1, // llvm.arm.uqadd16
-    1, // llvm.arm.uqadd8
-    1, // llvm.arm.uqasx
-    1, // llvm.arm.uqsax
-    1, // llvm.arm.uqsub16
-    1, // llvm.arm.uqsub8
-    1, // llvm.arm.usad8
-    1, // llvm.arm.usada8
-    1, // llvm.arm.usat
-    1, // llvm.arm.usat16
-    3, // llvm.arm.usax
-    3, // llvm.arm.usub16
-    3, // llvm.arm.usub8
-    1, // llvm.arm.uxtab16
-    1, // llvm.arm.uxtb16
-    1, // llvm.arm.vcvtr
-    1, // llvm.arm.vcvtru
-    16, // llvm.bpf.load.byte
-    16, // llvm.bpf.load.half
-    16, // llvm.bpf.load.word
-    3, // llvm.bpf.pseudo
-    1, // llvm.hexagon.A2.abs
-    1, // llvm.hexagon.A2.absp
-    1, // llvm.hexagon.A2.abssat
-    1, // llvm.hexagon.A2.add
-    1, // llvm.hexagon.A2.addh.h16.hh
-    1, // llvm.hexagon.A2.addh.h16.hl
-    1, // llvm.hexagon.A2.addh.h16.lh
-    1, // llvm.hexagon.A2.addh.h16.ll
-    1, // llvm.hexagon.A2.addh.h16.sat.hh
-    1, // llvm.hexagon.A2.addh.h16.sat.hl
-    1, // llvm.hexagon.A2.addh.h16.sat.lh
-    1, // llvm.hexagon.A2.addh.h16.sat.ll
-    1, // llvm.hexagon.A2.addh.l16.hl
-    1, // llvm.hexagon.A2.addh.l16.ll
-    1, // llvm.hexagon.A2.addh.l16.sat.hl
-    1, // llvm.hexagon.A2.addh.l16.sat.ll
-    1, // llvm.hexagon.A2.addi
-    1, // llvm.hexagon.A2.addp
-    1, // llvm.hexagon.A2.addpsat
-    1, // llvm.hexagon.A2.addsat
-    1, // llvm.hexagon.A2.addsp
-    1, // llvm.hexagon.A2.and
-    1, // llvm.hexagon.A2.andir
-    1, // llvm.hexagon.A2.andp
-    1, // llvm.hexagon.A2.aslh
-    1, // llvm.hexagon.A2.asrh
-    1, // llvm.hexagon.A2.combine.hh
-    1, // llvm.hexagon.A2.combine.hl
-    1, // llvm.hexagon.A2.combine.lh
-    1, // llvm.hexagon.A2.combine.ll
-    1, // llvm.hexagon.A2.combineii
-    1, // llvm.hexagon.A2.combinew
-    1, // llvm.hexagon.A2.max
-    1, // llvm.hexagon.A2.maxp
-    1, // llvm.hexagon.A2.maxu
-    1, // llvm.hexagon.A2.maxup
-    1, // llvm.hexagon.A2.min
-    1, // llvm.hexagon.A2.minp
-    1, // llvm.hexagon.A2.minu
-    1, // llvm.hexagon.A2.minup
-    1, // llvm.hexagon.A2.neg
-    1, // llvm.hexagon.A2.negp
-    1, // llvm.hexagon.A2.negsat
-    1, // llvm.hexagon.A2.not
-    1, // llvm.hexagon.A2.notp
-    1, // llvm.hexagon.A2.or
-    1, // llvm.hexagon.A2.orir
-    1, // llvm.hexagon.A2.orp
-    1, // llvm.hexagon.A2.roundsat
-    1, // llvm.hexagon.A2.sat
-    1, // llvm.hexagon.A2.satb
-    1, // llvm.hexagon.A2.sath
-    1, // llvm.hexagon.A2.satub
-    1, // llvm.hexagon.A2.satuh
-    1, // llvm.hexagon.A2.sub
-    1, // llvm.hexagon.A2.subh.h16.hh
-    1, // llvm.hexagon.A2.subh.h16.hl
-    1, // llvm.hexagon.A2.subh.h16.lh
-    1, // llvm.hexagon.A2.subh.h16.ll
-    1, // llvm.hexagon.A2.subh.h16.sat.hh
-    1, // llvm.hexagon.A2.subh.h16.sat.hl
-    1, // llvm.hexagon.A2.subh.h16.sat.lh
-    1, // llvm.hexagon.A2.subh.h16.sat.ll
-    1, // llvm.hexagon.A2.subh.l16.hl
-    1, // llvm.hexagon.A2.subh.l16.ll
-    1, // llvm.hexagon.A2.subh.l16.sat.hl
-    1, // llvm.hexagon.A2.subh.l16.sat.ll
-    1, // llvm.hexagon.A2.subp
-    1, // llvm.hexagon.A2.subri
-    1, // llvm.hexagon.A2.subsat
-    1, // llvm.hexagon.A2.svaddh
-    1, // llvm.hexagon.A2.svaddhs
-    1, // llvm.hexagon.A2.svadduhs
-    1, // llvm.hexagon.A2.svavgh
-    1, // llvm.hexagon.A2.svavghs
-    1, // llvm.hexagon.A2.svnavgh
-    1, // llvm.hexagon.A2.svsubh
-    1, // llvm.hexagon.A2.svsubhs
-    1, // llvm.hexagon.A2.svsubuhs
-    1, // llvm.hexagon.A2.swiz
-    1, // llvm.hexagon.A2.sxtb
-    1, // llvm.hexagon.A2.sxth
-    1, // llvm.hexagon.A2.sxtw
-    1, // llvm.hexagon.A2.tfr
-    1, // llvm.hexagon.A2.tfrih
-    1, // llvm.hexagon.A2.tfril
-    1, // llvm.hexagon.A2.tfrp
-    1, // llvm.hexagon.A2.tfrpi
-    1, // llvm.hexagon.A2.tfrsi
-    1, // llvm.hexagon.A2.vabsh
-    1, // llvm.hexagon.A2.vabshsat
-    1, // llvm.hexagon.A2.vabsw
-    1, // llvm.hexagon.A2.vabswsat
-    1, // llvm.hexagon.A2.vaddb.map
-    1, // llvm.hexagon.A2.vaddh
-    1, // llvm.hexagon.A2.vaddhs
-    1, // llvm.hexagon.A2.vaddub
-    1, // llvm.hexagon.A2.vaddubs
-    1, // llvm.hexagon.A2.vadduhs
-    1, // llvm.hexagon.A2.vaddw
-    1, // llvm.hexagon.A2.vaddws
-    1, // llvm.hexagon.A2.vavgh
-    1, // llvm.hexagon.A2.vavghcr
-    1, // llvm.hexagon.A2.vavghr
-    1, // llvm.hexagon.A2.vavgub
-    1, // llvm.hexagon.A2.vavgubr
-    1, // llvm.hexagon.A2.vavguh
-    1, // llvm.hexagon.A2.vavguhr
-    1, // llvm.hexagon.A2.vavguw
-    1, // llvm.hexagon.A2.vavguwr
-    1, // llvm.hexagon.A2.vavgw
-    1, // llvm.hexagon.A2.vavgwcr
-    1, // llvm.hexagon.A2.vavgwr
-    1, // llvm.hexagon.A2.vcmpbeq
-    1, // llvm.hexagon.A2.vcmpbgtu
-    1, // llvm.hexagon.A2.vcmpheq
-    1, // llvm.hexagon.A2.vcmphgt
-    1, // llvm.hexagon.A2.vcmphgtu
-    1, // llvm.hexagon.A2.vcmpweq
-    1, // llvm.hexagon.A2.vcmpwgt
-    1, // llvm.hexagon.A2.vcmpwgtu
-    1, // llvm.hexagon.A2.vconj
-    1, // llvm.hexagon.A2.vmaxb
-    1, // llvm.hexagon.A2.vmaxh
-    1, // llvm.hexagon.A2.vmaxub
-    1, // llvm.hexagon.A2.vmaxuh
-    1, // llvm.hexagon.A2.vmaxuw
-    1, // llvm.hexagon.A2.vmaxw
-    1, // llvm.hexagon.A2.vminb
-    1, // llvm.hexagon.A2.vminh
-    1, // llvm.hexagon.A2.vminub
-    1, // llvm.hexagon.A2.vminuh
-    1, // llvm.hexagon.A2.vminuw
-    1, // llvm.hexagon.A2.vminw
-    1, // llvm.hexagon.A2.vnavgh
-    1, // llvm.hexagon.A2.vnavghcr
-    1, // llvm.hexagon.A2.vnavghr
-    1, // llvm.hexagon.A2.vnavgw
-    1, // llvm.hexagon.A2.vnavgwcr
-    1, // llvm.hexagon.A2.vnavgwr
-    1, // llvm.hexagon.A2.vraddub
-    1, // llvm.hexagon.A2.vraddub.acc
-    1, // llvm.hexagon.A2.vrsadub
-    1, // llvm.hexagon.A2.vrsadub.acc
-    1, // llvm.hexagon.A2.vsubb.map
-    1, // llvm.hexagon.A2.vsubh
-    1, // llvm.hexagon.A2.vsubhs
-    1, // llvm.hexagon.A2.vsubub
-    1, // llvm.hexagon.A2.vsububs
-    1, // llvm.hexagon.A2.vsubuhs
-    1, // llvm.hexagon.A2.vsubw
-    1, // llvm.hexagon.A2.vsubws
-    1, // llvm.hexagon.A2.xor
-    1, // llvm.hexagon.A2.xorp
-    1, // llvm.hexagon.A2.zxtb
-    1, // llvm.hexagon.A2.zxth
-    1, // llvm.hexagon.A4.andn
-    1, // llvm.hexagon.A4.andnp
-    1, // llvm.hexagon.A4.bitsplit
-    1, // llvm.hexagon.A4.bitspliti
-    1, // llvm.hexagon.A4.boundscheck
-    1, // llvm.hexagon.A4.cmpbeq
-    1, // llvm.hexagon.A4.cmpbeqi
-    1, // llvm.hexagon.A4.cmpbgt
-    1, // llvm.hexagon.A4.cmpbgti
-    1, // llvm.hexagon.A4.cmpbgtu
-    1, // llvm.hexagon.A4.cmpbgtui
-    1, // llvm.hexagon.A4.cmpheq
-    1, // llvm.hexagon.A4.cmpheqi
-    1, // llvm.hexagon.A4.cmphgt
-    1, // llvm.hexagon.A4.cmphgti
-    1, // llvm.hexagon.A4.cmphgtu
-    1, // llvm.hexagon.A4.cmphgtui
-    1, // llvm.hexagon.A4.combineir
-    1, // llvm.hexagon.A4.combineri
-    1, // llvm.hexagon.A4.cround.ri
-    1, // llvm.hexagon.A4.cround.rr
-    1, // llvm.hexagon.A4.modwrapu
-    1, // llvm.hexagon.A4.orn
-    1, // llvm.hexagon.A4.ornp
-    1, // llvm.hexagon.A4.rcmpeq
-    1, // llvm.hexagon.A4.rcmpeqi
-    1, // llvm.hexagon.A4.rcmpneq
-    1, // llvm.hexagon.A4.rcmpneqi
-    1, // llvm.hexagon.A4.round.ri
-    1, // llvm.hexagon.A4.round.ri.sat
-    1, // llvm.hexagon.A4.round.rr
-    1, // llvm.hexagon.A4.round.rr.sat
-    1, // llvm.hexagon.A4.tlbmatch
-    1, // llvm.hexagon.A4.vcmpbeq.any
-    1, // llvm.hexagon.A4.vcmpbeqi
-    1, // llvm.hexagon.A4.vcmpbgt
-    1, // llvm.hexagon.A4.vcmpbgti
-    1, // llvm.hexagon.A4.vcmpbgtui
-    1, // llvm.hexagon.A4.vcmpheqi
-    1, // llvm.hexagon.A4.vcmphgti
-    1, // llvm.hexagon.A4.vcmphgtui
-    1, // llvm.hexagon.A4.vcmpweqi
-    1, // llvm.hexagon.A4.vcmpwgti
-    1, // llvm.hexagon.A4.vcmpwgtui
-    1, // llvm.hexagon.A4.vrmaxh
-    1, // llvm.hexagon.A4.vrmaxuh
-    1, // llvm.hexagon.A4.vrmaxuw
-    1, // llvm.hexagon.A4.vrmaxw
-    1, // llvm.hexagon.A4.vrminh
-    1, // llvm.hexagon.A4.vrminuh
-    1, // llvm.hexagon.A4.vrminuw
-    1, // llvm.hexagon.A4.vrminw
-    1, // llvm.hexagon.A5.vaddhubs
-    1, // llvm.hexagon.A6.vcmpbeq.notany
-    1, // llvm.hexagon.A6.vcmpbeq.notany.128B
-    1, // llvm.hexagon.C2.all8
-    1, // llvm.hexagon.C2.and
-    1, // llvm.hexagon.C2.andn
-    1, // llvm.hexagon.C2.any8
-    1, // llvm.hexagon.C2.bitsclr
-    1, // llvm.hexagon.C2.bitsclri
-    1, // llvm.hexagon.C2.bitsset
-    1, // llvm.hexagon.C2.cmpeq
-    1, // llvm.hexagon.C2.cmpeqi
-    1, // llvm.hexagon.C2.cmpeqp
-    1, // llvm.hexagon.C2.cmpgei
-    1, // llvm.hexagon.C2.cmpgeui
-    1, // llvm.hexagon.C2.cmpgt
-    1, // llvm.hexagon.C2.cmpgti
-    1, // llvm.hexagon.C2.cmpgtp
-    1, // llvm.hexagon.C2.cmpgtu
-    1, // llvm.hexagon.C2.cmpgtui
-    1, // llvm.hexagon.C2.cmpgtup
-    1, // llvm.hexagon.C2.cmplt
-    1, // llvm.hexagon.C2.cmpltu
-    1, // llvm.hexagon.C2.mask
-    1, // llvm.hexagon.C2.mux
-    1, // llvm.hexagon.C2.muxii
-    1, // llvm.hexagon.C2.muxir
-    1, // llvm.hexagon.C2.muxri
-    1, // llvm.hexagon.C2.not
-    1, // llvm.hexagon.C2.or
-    1, // llvm.hexagon.C2.orn
-    1, // llvm.hexagon.C2.pxfer.map
-    1, // llvm.hexagon.C2.tfrpr
-    1, // llvm.hexagon.C2.tfrrp
-    1, // llvm.hexagon.C2.vitpack
-    1, // llvm.hexagon.C2.vmux
-    1, // llvm.hexagon.C2.xor
-    1, // llvm.hexagon.C4.and.and
-    1, // llvm.hexagon.C4.and.andn
-    1, // llvm.hexagon.C4.and.or
-    1, // llvm.hexagon.C4.and.orn
-    1, // llvm.hexagon.C4.cmplte
-    1, // llvm.hexagon.C4.cmpltei
-    1, // llvm.hexagon.C4.cmplteu
-    1, // llvm.hexagon.C4.cmplteui
-    1, // llvm.hexagon.C4.cmpneq
-    1, // llvm.hexagon.C4.cmpneqi
-    1, // llvm.hexagon.C4.fastcorner9
-    1, // llvm.hexagon.C4.fastcorner9.not
-    1, // llvm.hexagon.C4.nbitsclr
-    1, // llvm.hexagon.C4.nbitsclri
-    1, // llvm.hexagon.C4.nbitsset
-    1, // llvm.hexagon.C4.or.and
-    1, // llvm.hexagon.C4.or.andn
-    1, // llvm.hexagon.C4.or.or
-    1, // llvm.hexagon.C4.or.orn
-    1, // llvm.hexagon.F2.conv.d2df
-    1, // llvm.hexagon.F2.conv.d2sf
-    1, // llvm.hexagon.F2.conv.df2d
-    1, // llvm.hexagon.F2.conv.df2d.chop
-    1, // llvm.hexagon.F2.conv.df2sf
-    1, // llvm.hexagon.F2.conv.df2ud
-    1, // llvm.hexagon.F2.conv.df2ud.chop
-    1, // llvm.hexagon.F2.conv.df2uw
-    1, // llvm.hexagon.F2.conv.df2uw.chop
-    1, // llvm.hexagon.F2.conv.df2w
-    1, // llvm.hexagon.F2.conv.df2w.chop
-    1, // llvm.hexagon.F2.conv.sf2d
-    1, // llvm.hexagon.F2.conv.sf2d.chop
-    1, // llvm.hexagon.F2.conv.sf2df
-    1, // llvm.hexagon.F2.conv.sf2ud
-    1, // llvm.hexagon.F2.conv.sf2ud.chop
-    1, // llvm.hexagon.F2.conv.sf2uw
-    1, // llvm.hexagon.F2.conv.sf2uw.chop
-    1, // llvm.hexagon.F2.conv.sf2w
-    1, // llvm.hexagon.F2.conv.sf2w.chop
-    1, // llvm.hexagon.F2.conv.ud2df
-    1, // llvm.hexagon.F2.conv.ud2sf
-    35, // llvm.hexagon.F2.conv.uw2df
-    35, // llvm.hexagon.F2.conv.uw2sf
-    35, // llvm.hexagon.F2.conv.w2df
-    35, // llvm.hexagon.F2.conv.w2sf
-    35, // llvm.hexagon.F2.dfclass
-    35, // llvm.hexagon.F2.dfcmpeq
-    35, // llvm.hexagon.F2.dfcmpge
-    35, // llvm.hexagon.F2.dfcmpgt
-    35, // llvm.hexagon.F2.dfcmpuo
-    35, // llvm.hexagon.F2.dfimm.n
-    35, // llvm.hexagon.F2.dfimm.p
-    35, // llvm.hexagon.F2.sfadd
-    35, // llvm.hexagon.F2.sfclass
-    35, // llvm.hexagon.F2.sfcmpeq
-    35, // llvm.hexagon.F2.sfcmpge
-    35, // llvm.hexagon.F2.sfcmpgt
-    35, // llvm.hexagon.F2.sfcmpuo
-    35, // llvm.hexagon.F2.sffixupd
-    35, // llvm.hexagon.F2.sffixupn
-    1, // llvm.hexagon.F2.sffixupr
-    35, // llvm.hexagon.F2.sffma
-    35, // llvm.hexagon.F2.sffma.lib
-    35, // llvm.hexagon.F2.sffma.sc
-    35, // llvm.hexagon.F2.sffms
-    35, // llvm.hexagon.F2.sffms.lib
-    35, // llvm.hexagon.F2.sfimm.n
-    35, // llvm.hexagon.F2.sfimm.p
-    35, // llvm.hexagon.F2.sfmax
-    35, // llvm.hexagon.F2.sfmin
-    35, // llvm.hexagon.F2.sfmpy
-    35, // llvm.hexagon.F2.sfsub
-    16, // llvm.hexagon.L2.loadrb.pbr
-    28, // llvm.hexagon.L2.loadrb.pci
-    19, // llvm.hexagon.L2.loadrb.pcr
-    16, // llvm.hexagon.L2.loadrd.pbr
-    28, // llvm.hexagon.L2.loadrd.pci
-    19, // llvm.hexagon.L2.loadrd.pcr
-    16, // llvm.hexagon.L2.loadrh.pbr
-    28, // llvm.hexagon.L2.loadrh.pci
-    19, // llvm.hexagon.L2.loadrh.pcr
-    16, // llvm.hexagon.L2.loadri.pbr
-    28, // llvm.hexagon.L2.loadri.pci
-    19, // llvm.hexagon.L2.loadri.pcr
-    16, // llvm.hexagon.L2.loadrub.pbr
-    28, // llvm.hexagon.L2.loadrub.pci
-    19, // llvm.hexagon.L2.loadrub.pcr
-    16, // llvm.hexagon.L2.loadruh.pbr
-    28, // llvm.hexagon.L2.loadruh.pci
-    19, // llvm.hexagon.L2.loadruh.pcr
-    18, // llvm.hexagon.L2.loadw.locked
-    18, // llvm.hexagon.L4.loadd.locked
-    1, // llvm.hexagon.M2.acci
-    1, // llvm.hexagon.M2.accii
-    1, // llvm.hexagon.M2.cmaci.s0
-    1, // llvm.hexagon.M2.cmacr.s0
-    1, // llvm.hexagon.M2.cmacs.s0
-    1, // llvm.hexagon.M2.cmacs.s1
-    1, // llvm.hexagon.M2.cmacsc.s0
-    1, // llvm.hexagon.M2.cmacsc.s1
-    1, // llvm.hexagon.M2.cmpyi.s0
-    1, // llvm.hexagon.M2.cmpyr.s0
-    1, // llvm.hexagon.M2.cmpyrs.s0
-    1, // llvm.hexagon.M2.cmpyrs.s1
-    1, // llvm.hexagon.M2.cmpyrsc.s0
-    1, // llvm.hexagon.M2.cmpyrsc.s1
-    1, // llvm.hexagon.M2.cmpys.s0
-    1, // llvm.hexagon.M2.cmpys.s1
-    1, // llvm.hexagon.M2.cmpysc.s0
-    1, // llvm.hexagon.M2.cmpysc.s1
-    1, // llvm.hexagon.M2.cnacs.s0
-    1, // llvm.hexagon.M2.cnacs.s1
-    1, // llvm.hexagon.M2.cnacsc.s0
-    1, // llvm.hexagon.M2.cnacsc.s1
-    1, // llvm.hexagon.M2.dpmpyss.acc.s0
-    1, // llvm.hexagon.M2.dpmpyss.nac.s0
-    1, // llvm.hexagon.M2.dpmpyss.rnd.s0
-    1, // llvm.hexagon.M2.dpmpyss.s0
-    1, // llvm.hexagon.M2.dpmpyuu.acc.s0
-    1, // llvm.hexagon.M2.dpmpyuu.nac.s0
-    1, // llvm.hexagon.M2.dpmpyuu.s0
-    1, // llvm.hexagon.M2.hmmpyh.rs1
-    1, // llvm.hexagon.M2.hmmpyh.s1
-    1, // llvm.hexagon.M2.hmmpyl.rs1
-    1, // llvm.hexagon.M2.hmmpyl.s1
-    1, // llvm.hexagon.M2.maci
-    1, // llvm.hexagon.M2.macsin
-    1, // llvm.hexagon.M2.macsip
-    1, // llvm.hexagon.M2.mmachs.rs0
-    1, // llvm.hexagon.M2.mmachs.rs1
-    1, // llvm.hexagon.M2.mmachs.s0
-    1, // llvm.hexagon.M2.mmachs.s1
-    1, // llvm.hexagon.M2.mmacls.rs0
-    1, // llvm.hexagon.M2.mmacls.rs1
-    1, // llvm.hexagon.M2.mmacls.s0
-    1, // llvm.hexagon.M2.mmacls.s1
-    1, // llvm.hexagon.M2.mmacuhs.rs0
-    1, // llvm.hexagon.M2.mmacuhs.rs1
-    1, // llvm.hexagon.M2.mmacuhs.s0
-    1, // llvm.hexagon.M2.mmacuhs.s1
-    1, // llvm.hexagon.M2.mmaculs.rs0
-    1, // llvm.hexagon.M2.mmaculs.rs1
-    1, // llvm.hexagon.M2.mmaculs.s0
-    1, // llvm.hexagon.M2.mmaculs.s1
-    1, // llvm.hexagon.M2.mmpyh.rs0
-    1, // llvm.hexagon.M2.mmpyh.rs1
-    1, // llvm.hexagon.M2.mmpyh.s0
-    1, // llvm.hexagon.M2.mmpyh.s1
-    1, // llvm.hexagon.M2.mmpyl.rs0
-    1, // llvm.hexagon.M2.mmpyl.rs1
-    1, // llvm.hexagon.M2.mmpyl.s0
-    1, // llvm.hexagon.M2.mmpyl.s1
-    1, // llvm.hexagon.M2.mmpyuh.rs0
-    1, // llvm.hexagon.M2.mmpyuh.rs1
-    1, // llvm.hexagon.M2.mmpyuh.s0
-    1, // llvm.hexagon.M2.mmpyuh.s1
-    1, // llvm.hexagon.M2.mmpyul.rs0
-    1, // llvm.hexagon.M2.mmpyul.rs1
-    1, // llvm.hexagon.M2.mmpyul.s0
-    1, // llvm.hexagon.M2.mmpyul.s1
-    1, // llvm.hexagon.M2.mpy.acc.hh.s0
-    1, // llvm.hexagon.M2.mpy.acc.hh.s1
-    1, // llvm.hexagon.M2.mpy.acc.hl.s0
-    1, // llvm.hexagon.M2.mpy.acc.hl.s1
-    1, // llvm.hexagon.M2.mpy.acc.lh.s0
-    1, // llvm.hexagon.M2.mpy.acc.lh.s1
-    1, // llvm.hexagon.M2.mpy.acc.ll.s0
-    1, // llvm.hexagon.M2.mpy.acc.ll.s1
-    1, // llvm.hexagon.M2.mpy.acc.sat.hh.s0
-    1, // llvm.hexagon.M2.mpy.acc.sat.hh.s1
-    1, // llvm.hexagon.M2.mpy.acc.sat.hl.s0
-    1, // llvm.hexagon.M2.mpy.acc.sat.hl.s1
-    1, // llvm.hexagon.M2.mpy.acc.sat.lh.s0
-    1, // llvm.hexagon.M2.mpy.acc.sat.lh.s1
-    1, // llvm.hexagon.M2.mpy.acc.sat.ll.s0
-    1, // llvm.hexagon.M2.mpy.acc.sat.ll.s1
-    1, // llvm.hexagon.M2.mpy.hh.s0
-    1, // llvm.hexagon.M2.mpy.hh.s1
-    1, // llvm.hexagon.M2.mpy.hl.s0
-    1, // llvm.hexagon.M2.mpy.hl.s1
-    1, // llvm.hexagon.M2.mpy.lh.s0
-    1, // llvm.hexagon.M2.mpy.lh.s1
-    1, // llvm.hexagon.M2.mpy.ll.s0
-    1, // llvm.hexagon.M2.mpy.ll.s1
-    1, // llvm.hexagon.M2.mpy.nac.hh.s0
-    1, // llvm.hexagon.M2.mpy.nac.hh.s1
-    1, // llvm.hexagon.M2.mpy.nac.hl.s0
-    1, // llvm.hexagon.M2.mpy.nac.hl.s1
-    1, // llvm.hexagon.M2.mpy.nac.lh.s0
-    1, // llvm.hexagon.M2.mpy.nac.lh.s1
-    1, // llvm.hexagon.M2.mpy.nac.ll.s0
-    1, // llvm.hexagon.M2.mpy.nac.ll.s1
-    1, // llvm.hexagon.M2.mpy.nac.sat.hh.s0
-    1, // llvm.hexagon.M2.mpy.nac.sat.hh.s1
-    1, // llvm.hexagon.M2.mpy.nac.sat.hl.s0
-    1, // llvm.hexagon.M2.mpy.nac.sat.hl.s1
-    1, // llvm.hexagon.M2.mpy.nac.sat.lh.s0
-    1, // llvm.hexagon.M2.mpy.nac.sat.lh.s1
-    1, // llvm.hexagon.M2.mpy.nac.sat.ll.s0
-    1, // llvm.hexagon.M2.mpy.nac.sat.ll.s1
-    1, // llvm.hexagon.M2.mpy.rnd.hh.s0
-    1, // llvm.hexagon.M2.mpy.rnd.hh.s1
-    1, // llvm.hexagon.M2.mpy.rnd.hl.s0
-    1, // llvm.hexagon.M2.mpy.rnd.hl.s1
-    1, // llvm.hexagon.M2.mpy.rnd.lh.s0
-    1, // llvm.hexagon.M2.mpy.rnd.lh.s1
-    1, // llvm.hexagon.M2.mpy.rnd.ll.s0
-    1, // llvm.hexagon.M2.mpy.rnd.ll.s1
-    1, // llvm.hexagon.M2.mpy.sat.hh.s0
-    1, // llvm.hexagon.M2.mpy.sat.hh.s1
-    1, // llvm.hexagon.M2.mpy.sat.hl.s0
-    1, // llvm.hexagon.M2.mpy.sat.hl.s1
-    1, // llvm.hexagon.M2.mpy.sat.lh.s0
-    1, // llvm.hexagon.M2.mpy.sat.lh.s1
-    1, // llvm.hexagon.M2.mpy.sat.ll.s0
-    1, // llvm.hexagon.M2.mpy.sat.ll.s1
-    1, // llvm.hexagon.M2.mpy.sat.rnd.hh.s0
-    1, // llvm.hexagon.M2.mpy.sat.rnd.hh.s1
-    1, // llvm.hexagon.M2.mpy.sat.rnd.hl.s0
-    1, // llvm.hexagon.M2.mpy.sat.rnd.hl.s1
-    1, // llvm.hexagon.M2.mpy.sat.rnd.lh.s0
-    1, // llvm.hexagon.M2.mpy.sat.rnd.lh.s1
-    1, // llvm.hexagon.M2.mpy.sat.rnd.ll.s0
-    1, // llvm.hexagon.M2.mpy.sat.rnd.ll.s1
-    1, // llvm.hexagon.M2.mpy.up
-    1, // llvm.hexagon.M2.mpy.up.s1
-    1, // llvm.hexagon.M2.mpy.up.s1.sat
-    1, // llvm.hexagon.M2.mpyd.acc.hh.s0
-    1, // llvm.hexagon.M2.mpyd.acc.hh.s1
-    1, // llvm.hexagon.M2.mpyd.acc.hl.s0
-    1, // llvm.hexagon.M2.mpyd.acc.hl.s1
-    1, // llvm.hexagon.M2.mpyd.acc.lh.s0
-    1, // llvm.hexagon.M2.mpyd.acc.lh.s1
-    1, // llvm.hexagon.M2.mpyd.acc.ll.s0
-    1, // llvm.hexagon.M2.mpyd.acc.ll.s1
-    1, // llvm.hexagon.M2.mpyd.hh.s0
-    1, // llvm.hexagon.M2.mpyd.hh.s1
-    1, // llvm.hexagon.M2.mpyd.hl.s0
-    1, // llvm.hexagon.M2.mpyd.hl.s1
-    1, // llvm.hexagon.M2.mpyd.lh.s0
-    1, // llvm.hexagon.M2.mpyd.lh.s1
-    1, // llvm.hexagon.M2.mpyd.ll.s0
-    1, // llvm.hexagon.M2.mpyd.ll.s1
-    1, // llvm.hexagon.M2.mpyd.nac.hh.s0
-    1, // llvm.hexagon.M2.mpyd.nac.hh.s1
-    1, // llvm.hexagon.M2.mpyd.nac.hl.s0
-    1, // llvm.hexagon.M2.mpyd.nac.hl.s1
-    1, // llvm.hexagon.M2.mpyd.nac.lh.s0
-    1, // llvm.hexagon.M2.mpyd.nac.lh.s1
-    1, // llvm.hexagon.M2.mpyd.nac.ll.s0
-    1, // llvm.hexagon.M2.mpyd.nac.ll.s1
-    1, // llvm.hexagon.M2.mpyd.rnd.hh.s0
-    1, // llvm.hexagon.M2.mpyd.rnd.hh.s1
-    1, // llvm.hexagon.M2.mpyd.rnd.hl.s0
-    1, // llvm.hexagon.M2.mpyd.rnd.hl.s1
-    1, // llvm.hexagon.M2.mpyd.rnd.lh.s0
-    1, // llvm.hexagon.M2.mpyd.rnd.lh.s1
-    1, // llvm.hexagon.M2.mpyd.rnd.ll.s0
-    1, // llvm.hexagon.M2.mpyd.rnd.ll.s1
-    1, // llvm.hexagon.M2.mpyi
-    1, // llvm.hexagon.M2.mpysmi
-    1, // llvm.hexagon.M2.mpysu.up
-    1, // llvm.hexagon.M2.mpyu.acc.hh.s0
-    1, // llvm.hexagon.M2.mpyu.acc.hh.s1
-    1, // llvm.hexagon.M2.mpyu.acc.hl.s0
-    1, // llvm.hexagon.M2.mpyu.acc.hl.s1
-    1, // llvm.hexagon.M2.mpyu.acc.lh.s0
-    1, // llvm.hexagon.M2.mpyu.acc.lh.s1
-    1, // llvm.hexagon.M2.mpyu.acc.ll.s0
-    1, // llvm.hexagon.M2.mpyu.acc.ll.s1
-    1, // llvm.hexagon.M2.mpyu.hh.s0
-    1, // llvm.hexagon.M2.mpyu.hh.s1
-    1, // llvm.hexagon.M2.mpyu.hl.s0
-    1, // llvm.hexagon.M2.mpyu.hl.s1
-    1, // llvm.hexagon.M2.mpyu.lh.s0
-    1, // llvm.hexagon.M2.mpyu.lh.s1
-    1, // llvm.hexagon.M2.mpyu.ll.s0
-    1, // llvm.hexagon.M2.mpyu.ll.s1
-    1, // llvm.hexagon.M2.mpyu.nac.hh.s0
-    1, // llvm.hexagon.M2.mpyu.nac.hh.s1
-    1, // llvm.hexagon.M2.mpyu.nac.hl.s0
-    1, // llvm.hexagon.M2.mpyu.nac.hl.s1
-    1, // llvm.hexagon.M2.mpyu.nac.lh.s0
-    1, // llvm.hexagon.M2.mpyu.nac.lh.s1
-    1, // llvm.hexagon.M2.mpyu.nac.ll.s0
-    1, // llvm.hexagon.M2.mpyu.nac.ll.s1
-    1, // llvm.hexagon.M2.mpyu.up
-    1, // llvm.hexagon.M2.mpyud.acc.hh.s0
-    1, // llvm.hexagon.M2.mpyud.acc.hh.s1
-    1, // llvm.hexagon.M2.mpyud.acc.hl.s0
-    1, // llvm.hexagon.M2.mpyud.acc.hl.s1
-    1, // llvm.hexagon.M2.mpyud.acc.lh.s0
-    1, // llvm.hexagon.M2.mpyud.acc.lh.s1
-    1, // llvm.hexagon.M2.mpyud.acc.ll.s0
-    1, // llvm.hexagon.M2.mpyud.acc.ll.s1
-    1, // llvm.hexagon.M2.mpyud.hh.s0
-    1, // llvm.hexagon.M2.mpyud.hh.s1
-    1, // llvm.hexagon.M2.mpyud.hl.s0
-    1, // llvm.hexagon.M2.mpyud.hl.s1
-    1, // llvm.hexagon.M2.mpyud.lh.s0
-    1, // llvm.hexagon.M2.mpyud.lh.s1
-    1, // llvm.hexagon.M2.mpyud.ll.s0
-    1, // llvm.hexagon.M2.mpyud.ll.s1
-    1, // llvm.hexagon.M2.mpyud.nac.hh.s0
-    1, // llvm.hexagon.M2.mpyud.nac.hh.s1
-    1, // llvm.hexagon.M2.mpyud.nac.hl.s0
-    1, // llvm.hexagon.M2.mpyud.nac.hl.s1
-    1, // llvm.hexagon.M2.mpyud.nac.lh.s0
-    1, // llvm.hexagon.M2.mpyud.nac.lh.s1
-    1, // llvm.hexagon.M2.mpyud.nac.ll.s0
-    1, // llvm.hexagon.M2.mpyud.nac.ll.s1
-    1, // llvm.hexagon.M2.mpyui
-    1, // llvm.hexagon.M2.nacci
-    1, // llvm.hexagon.M2.naccii
-    1, // llvm.hexagon.M2.subacc
-    1, // llvm.hexagon.M2.vabsdiffh
-    1, // llvm.hexagon.M2.vabsdiffw
-    1, // llvm.hexagon.M2.vcmac.s0.sat.i
-    1, // llvm.hexagon.M2.vcmac.s0.sat.r
-    1, // llvm.hexagon.M2.vcmpy.s0.sat.i
-    1, // llvm.hexagon.M2.vcmpy.s0.sat.r
-    1, // llvm.hexagon.M2.vcmpy.s1.sat.i
-    1, // llvm.hexagon.M2.vcmpy.s1.sat.r
-    1, // llvm.hexagon.M2.vdmacs.s0
-    1, // llvm.hexagon.M2.vdmacs.s1
-    1, // llvm.hexagon.M2.vdmpyrs.s0
-    1, // llvm.hexagon.M2.vdmpyrs.s1
-    1, // llvm.hexagon.M2.vdmpys.s0
-    1, // llvm.hexagon.M2.vdmpys.s1
-    1, // llvm.hexagon.M2.vmac2
-    1, // llvm.hexagon.M2.vmac2es
-    1, // llvm.hexagon.M2.vmac2es.s0
-    1, // llvm.hexagon.M2.vmac2es.s1
-    1, // llvm.hexagon.M2.vmac2s.s0
-    1, // llvm.hexagon.M2.vmac2s.s1
-    1, // llvm.hexagon.M2.vmac2su.s0
-    1, // llvm.hexagon.M2.vmac2su.s1
-    1, // llvm.hexagon.M2.vmpy2es.s0
-    1, // llvm.hexagon.M2.vmpy2es.s1
-    1, // llvm.hexagon.M2.vmpy2s.s0
-    1, // llvm.hexagon.M2.vmpy2s.s0pack
-    1, // llvm.hexagon.M2.vmpy2s.s1
-    1, // llvm.hexagon.M2.vmpy2s.s1pack
-    1, // llvm.hexagon.M2.vmpy2su.s0
-    1, // llvm.hexagon.M2.vmpy2su.s1
-    1, // llvm.hexagon.M2.vraddh
-    1, // llvm.hexagon.M2.vradduh
-    1, // llvm.hexagon.M2.vrcmaci.s0
-    1, // llvm.hexagon.M2.vrcmaci.s0c
-    1, // llvm.hexagon.M2.vrcmacr.s0
-    1, // llvm.hexagon.M2.vrcmacr.s0c
-    1, // llvm.hexagon.M2.vrcmpyi.s0
-    1, // llvm.hexagon.M2.vrcmpyi.s0c
-    1, // llvm.hexagon.M2.vrcmpyr.s0
-    1, // llvm.hexagon.M2.vrcmpyr.s0c
-    1, // llvm.hexagon.M2.vrcmpys.acc.s1
-    1, // llvm.hexagon.M2.vrcmpys.s1
-    1, // llvm.hexagon.M2.vrcmpys.s1rp
-    1, // llvm.hexagon.M2.vrmac.s0
-    1, // llvm.hexagon.M2.vrmpy.s0
-    1, // llvm.hexagon.M2.xor.xacc
-    1, // llvm.hexagon.M4.and.and
-    1, // llvm.hexagon.M4.and.andn
-    1, // llvm.hexagon.M4.and.or
-    1, // llvm.hexagon.M4.and.xor
-    1, // llvm.hexagon.M4.cmpyi.wh
-    1, // llvm.hexagon.M4.cmpyi.whc
-    1, // llvm.hexagon.M4.cmpyr.wh
-    1, // llvm.hexagon.M4.cmpyr.whc
-    1, // llvm.hexagon.M4.mac.up.s1.sat
-    1, // llvm.hexagon.M4.mpyri.addi
-    1, // llvm.hexagon.M4.mpyri.addr
-    1, // llvm.hexagon.M4.mpyri.addr.u2
-    1, // llvm.hexagon.M4.mpyrr.addi
-    1, // llvm.hexagon.M4.mpyrr.addr
-    1, // llvm.hexagon.M4.nac.up.s1.sat
-    1, // llvm.hexagon.M4.or.and
-    1, // llvm.hexagon.M4.or.andn
-    1, // llvm.hexagon.M4.or.or
-    1, // llvm.hexagon.M4.or.xor
-    1, // llvm.hexagon.M4.pmpyw
-    1, // llvm.hexagon.M4.pmpyw.acc
-    1, // llvm.hexagon.M4.vpmpyh
-    1, // llvm.hexagon.M4.vpmpyh.acc
-    1, // llvm.hexagon.M4.vrmpyeh.acc.s0
-    1, // llvm.hexagon.M4.vrmpyeh.acc.s1
-    1, // llvm.hexagon.M4.vrmpyeh.s0
-    1, // llvm.hexagon.M4.vrmpyeh.s1
-    1, // llvm.hexagon.M4.vrmpyoh.acc.s0
-    1, // llvm.hexagon.M4.vrmpyoh.acc.s1
-    1, // llvm.hexagon.M4.vrmpyoh.s0
-    1, // llvm.hexagon.M4.vrmpyoh.s1
-    1, // llvm.hexagon.M4.xor.and
-    1, // llvm.hexagon.M4.xor.andn
-    1, // llvm.hexagon.M4.xor.or
-    1, // llvm.hexagon.M4.xor.xacc
-    1, // llvm.hexagon.M5.vdmacbsu
-    1, // llvm.hexagon.M5.vdmpybsu
-    1, // llvm.hexagon.M5.vmacbsu
-    1, // llvm.hexagon.M5.vmacbuu
-    1, // llvm.hexagon.M5.vmpybsu
-    1, // llvm.hexagon.M5.vmpybuu
-    1, // llvm.hexagon.M5.vrmacbsu
-    1, // llvm.hexagon.M5.vrmacbuu
-    1, // llvm.hexagon.M5.vrmpybsu
-    1, // llvm.hexagon.M5.vrmpybuu
-    1, // llvm.hexagon.M6.vabsdiffb
-    1, // llvm.hexagon.M6.vabsdiffub
-    1, // llvm.hexagon.S2.addasl.rrri
-    1, // llvm.hexagon.S2.asl.i.p
-    1, // llvm.hexagon.S2.asl.i.p.acc
-    1, // llvm.hexagon.S2.asl.i.p.and
-    1, // llvm.hexagon.S2.asl.i.p.nac
-    1, // llvm.hexagon.S2.asl.i.p.or
-    1, // llvm.hexagon.S2.asl.i.p.xacc
-    1, // llvm.hexagon.S2.asl.i.r
-    1, // llvm.hexagon.S2.asl.i.r.acc
-    1, // llvm.hexagon.S2.asl.i.r.and
-    1, // llvm.hexagon.S2.asl.i.r.nac
-    1, // llvm.hexagon.S2.asl.i.r.or
-    1, // llvm.hexagon.S2.asl.i.r.sat
-    1, // llvm.hexagon.S2.asl.i.r.xacc
-    1, // llvm.hexagon.S2.asl.i.vh
-    1, // llvm.hexagon.S2.asl.i.vw
-    1, // llvm.hexagon.S2.asl.r.p
-    1, // llvm.hexagon.S2.asl.r.p.acc
-    1, // llvm.hexagon.S2.asl.r.p.and
-    1, // llvm.hexagon.S2.asl.r.p.nac
-    1, // llvm.hexagon.S2.asl.r.p.or
-    1, // llvm.hexagon.S2.asl.r.p.xor
-    1, // llvm.hexagon.S2.asl.r.r
-    1, // llvm.hexagon.S2.asl.r.r.acc
-    1, // llvm.hexagon.S2.asl.r.r.and
-    1, // llvm.hexagon.S2.asl.r.r.nac
-    1, // llvm.hexagon.S2.asl.r.r.or
-    1, // llvm.hexagon.S2.asl.r.r.sat
-    1, // llvm.hexagon.S2.asl.r.vh
-    1, // llvm.hexagon.S2.asl.r.vw
-    1, // llvm.hexagon.S2.asr.i.p
-    1, // llvm.hexagon.S2.asr.i.p.acc
-    1, // llvm.hexagon.S2.asr.i.p.and
-    1, // llvm.hexagon.S2.asr.i.p.nac
-    1, // llvm.hexagon.S2.asr.i.p.or
-    1, // llvm.hexagon.S2.asr.i.p.rnd
-    1, // llvm.hexagon.S2.asr.i.p.rnd.goodsyntax
-    1, // llvm.hexagon.S2.asr.i.r
-    1, // llvm.hexagon.S2.asr.i.r.acc
-    1, // llvm.hexagon.S2.asr.i.r.and
-    1, // llvm.hexagon.S2.asr.i.r.nac
-    1, // llvm.hexagon.S2.asr.i.r.or
-    1, // llvm.hexagon.S2.asr.i.r.rnd
-    1, // llvm.hexagon.S2.asr.i.r.rnd.goodsyntax
-    1, // llvm.hexagon.S2.asr.i.svw.trun
-    1, // llvm.hexagon.S2.asr.i.vh
-    1, // llvm.hexagon.S2.asr.i.vw
-    1, // llvm.hexagon.S2.asr.r.p
-    1, // llvm.hexagon.S2.asr.r.p.acc
-    1, // llvm.hexagon.S2.asr.r.p.and
-    1, // llvm.hexagon.S2.asr.r.p.nac
-    1, // llvm.hexagon.S2.asr.r.p.or
-    1, // llvm.hexagon.S2.asr.r.p.xor
-    1, // llvm.hexagon.S2.asr.r.r
-    1, // llvm.hexagon.S2.asr.r.r.acc
-    1, // llvm.hexagon.S2.asr.r.r.and
-    1, // llvm.hexagon.S2.asr.r.r.nac
-    1, // llvm.hexagon.S2.asr.r.r.or
-    1, // llvm.hexagon.S2.asr.r.r.sat
-    1, // llvm.hexagon.S2.asr.r.svw.trun
-    1, // llvm.hexagon.S2.asr.r.vh
-    1, // llvm.hexagon.S2.asr.r.vw
-    1, // llvm.hexagon.S2.brev
-    1, // llvm.hexagon.S2.brevp
-    1, // llvm.hexagon.S2.cabacencbin
-    1, // llvm.hexagon.S2.cl0
-    1, // llvm.hexagon.S2.cl0p
-    1, // llvm.hexagon.S2.cl1
-    1, // llvm.hexagon.S2.cl1p
-    1, // llvm.hexagon.S2.clb
-    1, // llvm.hexagon.S2.clbnorm
-    1, // llvm.hexagon.S2.clbp
-    1, // llvm.hexagon.S2.clrbit.i
-    1, // llvm.hexagon.S2.clrbit.r
-    1, // llvm.hexagon.S2.ct0
-    1, // llvm.hexagon.S2.ct0p
-    1, // llvm.hexagon.S2.ct1
-    1, // llvm.hexagon.S2.ct1p
-    1, // llvm.hexagon.S2.deinterleave
-    1, // llvm.hexagon.S2.extractu
-    1, // llvm.hexagon.S2.extractu.rp
-    1, // llvm.hexagon.S2.extractup
-    1, // llvm.hexagon.S2.extractup.rp
-    1, // llvm.hexagon.S2.insert
-    1, // llvm.hexagon.S2.insert.rp
-    1, // llvm.hexagon.S2.insertp
-    1, // llvm.hexagon.S2.insertp.rp
-    1, // llvm.hexagon.S2.interleave
-    1, // llvm.hexagon.S2.lfsp
-    1, // llvm.hexagon.S2.lsl.r.p
-    1, // llvm.hexagon.S2.lsl.r.p.acc
-    1, // llvm.hexagon.S2.lsl.r.p.and
-    1, // llvm.hexagon.S2.lsl.r.p.nac
-    1, // llvm.hexagon.S2.lsl.r.p.or
-    1, // llvm.hexagon.S2.lsl.r.p.xor
-    1, // llvm.hexagon.S2.lsl.r.r
-    1, // llvm.hexagon.S2.lsl.r.r.acc
-    1, // llvm.hexagon.S2.lsl.r.r.and
-    1, // llvm.hexagon.S2.lsl.r.r.nac
-    1, // llvm.hexagon.S2.lsl.r.r.or
-    1, // llvm.hexagon.S2.lsl.r.vh
-    1, // llvm.hexagon.S2.lsl.r.vw
-    1, // llvm.hexagon.S2.lsr.i.p
-    1, // llvm.hexagon.S2.lsr.i.p.acc
-    1, // llvm.hexagon.S2.lsr.i.p.and
-    1, // llvm.hexagon.S2.lsr.i.p.nac
-    1, // llvm.hexagon.S2.lsr.i.p.or
-    1, // llvm.hexagon.S2.lsr.i.p.xacc
-    1, // llvm.hexagon.S2.lsr.i.r
-    1, // llvm.hexagon.S2.lsr.i.r.acc
-    1, // llvm.hexagon.S2.lsr.i.r.and
-    1, // llvm.hexagon.S2.lsr.i.r.nac
-    1, // llvm.hexagon.S2.lsr.i.r.or
-    1, // llvm.hexagon.S2.lsr.i.r.xacc
-    1, // llvm.hexagon.S2.lsr.i.vh
-    1, // llvm.hexagon.S2.lsr.i.vw
-    1, // llvm.hexagon.S2.lsr.r.p
-    1, // llvm.hexagon.S2.lsr.r.p.acc
-    1, // llvm.hexagon.S2.lsr.r.p.and
-    1, // llvm.hexagon.S2.lsr.r.p.nac
-    1, // llvm.hexagon.S2.lsr.r.p.or
-    1, // llvm.hexagon.S2.lsr.r.p.xor
-    1, // llvm.hexagon.S2.lsr.r.r
-    1, // llvm.hexagon.S2.lsr.r.r.acc
-    1, // llvm.hexagon.S2.lsr.r.r.and
-    1, // llvm.hexagon.S2.lsr.r.r.nac
-    1, // llvm.hexagon.S2.lsr.r.r.or
-    1, // llvm.hexagon.S2.lsr.r.vh
-    1, // llvm.hexagon.S2.lsr.r.vw
-    1, // llvm.hexagon.S2.packhl
-    1, // llvm.hexagon.S2.parityp
-    1, // llvm.hexagon.S2.setbit.i
-    1, // llvm.hexagon.S2.setbit.r
-    1, // llvm.hexagon.S2.shuffeb
-    1, // llvm.hexagon.S2.shuffeh
-    1, // llvm.hexagon.S2.shuffob
-    1, // llvm.hexagon.S2.shuffoh
-    32, // llvm.hexagon.S2.storerb.pbr
-    29, // llvm.hexagon.S2.storerb.pci
-    28, // llvm.hexagon.S2.storerb.pcr
-    32, // llvm.hexagon.S2.storerd.pbr
-    29, // llvm.hexagon.S2.storerd.pci
-    28, // llvm.hexagon.S2.storerd.pcr
-    32, // llvm.hexagon.S2.storerf.pbr
-    29, // llvm.hexagon.S2.storerf.pci
-    28, // llvm.hexagon.S2.storerf.pcr
-    32, // llvm.hexagon.S2.storerh.pbr
-    29, // llvm.hexagon.S2.storerh.pci
-    28, // llvm.hexagon.S2.storerh.pcr
-    32, // llvm.hexagon.S2.storeri.pbr
-    29, // llvm.hexagon.S2.storeri.pci
-    28, // llvm.hexagon.S2.storeri.pcr
-    18, // llvm.hexagon.S2.storew.locked
-    1, // llvm.hexagon.S2.svsathb
-    1, // llvm.hexagon.S2.svsathub
-    1, // llvm.hexagon.S2.tableidxb.goodsyntax
-    1, // llvm.hexagon.S2.tableidxd.goodsyntax
-    1, // llvm.hexagon.S2.tableidxh.goodsyntax
-    1, // llvm.hexagon.S2.tableidxw.goodsyntax
-    1, // llvm.hexagon.S2.togglebit.i
-    1, // llvm.hexagon.S2.togglebit.r
-    1, // llvm.hexagon.S2.tstbit.i
-    1, // llvm.hexagon.S2.tstbit.r
-    1, // llvm.hexagon.S2.valignib
-    1, // llvm.hexagon.S2.valignrb
-    1, // llvm.hexagon.S2.vcnegh
-    1, // llvm.hexagon.S2.vcrotate
-    1, // llvm.hexagon.S2.vrcnegh
-    1, // llvm.hexagon.S2.vrndpackwh
-    1, // llvm.hexagon.S2.vrndpackwhs
-    1, // llvm.hexagon.S2.vsathb
-    1, // llvm.hexagon.S2.vsathb.nopack
-    1, // llvm.hexagon.S2.vsathub
-    1, // llvm.hexagon.S2.vsathub.nopack
-    1, // llvm.hexagon.S2.vsatwh
-    1, // llvm.hexagon.S2.vsatwh.nopack
-    1, // llvm.hexagon.S2.vsatwuh
-    1, // llvm.hexagon.S2.vsatwuh.nopack
-    1, // llvm.hexagon.S2.vsplatrb
-    1, // llvm.hexagon.S2.vsplatrh
-    1, // llvm.hexagon.S2.vspliceib
-    1, // llvm.hexagon.S2.vsplicerb
-    1, // llvm.hexagon.S2.vsxtbh
-    1, // llvm.hexagon.S2.vsxthw
-    1, // llvm.hexagon.S2.vtrunehb
-    1, // llvm.hexagon.S2.vtrunewh
-    1, // llvm.hexagon.S2.vtrunohb
-    1, // llvm.hexagon.S2.vtrunowh
-    1, // llvm.hexagon.S2.vzxtbh
-    1, // llvm.hexagon.S2.vzxthw
-    1, // llvm.hexagon.S4.addaddi
-    1, // llvm.hexagon.S4.addi.asl.ri
-    1, // llvm.hexagon.S4.addi.lsr.ri
-    1, // llvm.hexagon.S4.andi.asl.ri
-    1, // llvm.hexagon.S4.andi.lsr.ri
-    1, // llvm.hexagon.S4.clbaddi
-    1, // llvm.hexagon.S4.clbpaddi
-    1, // llvm.hexagon.S4.clbpnorm
-    1, // llvm.hexagon.S4.extract
-    1, // llvm.hexagon.S4.extract.rp
-    1, // llvm.hexagon.S4.extractp
-    1, // llvm.hexagon.S4.extractp.rp
-    1, // llvm.hexagon.S4.lsli
-    1, // llvm.hexagon.S4.ntstbit.i
-    1, // llvm.hexagon.S4.ntstbit.r
-    1, // llvm.hexagon.S4.or.andi
-    1, // llvm.hexagon.S4.or.andix
-    1, // llvm.hexagon.S4.or.ori
-    1, // llvm.hexagon.S4.ori.asl.ri
-    1, // llvm.hexagon.S4.ori.lsr.ri
-    1, // llvm.hexagon.S4.parity
-    18, // llvm.hexagon.S4.stored.locked
-    1, // llvm.hexagon.S4.subaddi
-    1, // llvm.hexagon.S4.subi.asl.ri
-    1, // llvm.hexagon.S4.subi.lsr.ri
-    1, // llvm.hexagon.S4.vrcrotate
-    1, // llvm.hexagon.S4.vrcrotate.acc
-    1, // llvm.hexagon.S4.vxaddsubh
-    1, // llvm.hexagon.S4.vxaddsubhr
-    1, // llvm.hexagon.S4.vxaddsubw
-    1, // llvm.hexagon.S4.vxsubaddh
-    1, // llvm.hexagon.S4.vxsubaddhr
-    1, // llvm.hexagon.S4.vxsubaddw
-    1, // llvm.hexagon.S5.asrhub.rnd.sat.goodsyntax
-    1, // llvm.hexagon.S5.asrhub.sat
-    1, // llvm.hexagon.S5.popcountp
-    1, // llvm.hexagon.S5.vasrhrnd.goodsyntax
-    1, // llvm.hexagon.S6.rol.i.p
-    1, // llvm.hexagon.S6.rol.i.p.acc
-    1, // llvm.hexagon.S6.rol.i.p.and
-    1, // llvm.hexagon.S6.rol.i.p.nac
-    1, // llvm.hexagon.S6.rol.i.p.or
-    1, // llvm.hexagon.S6.rol.i.p.xacc
-    1, // llvm.hexagon.S6.rol.i.r
-    1, // llvm.hexagon.S6.rol.i.r.acc
-    1, // llvm.hexagon.S6.rol.i.r.and
-    1, // llvm.hexagon.S6.rol.i.r.nac
-    1, // llvm.hexagon.S6.rol.i.r.or
-    1, // llvm.hexagon.S6.rol.i.r.xacc
-    1, // llvm.hexagon.S6.vsplatrbp
-    1, // llvm.hexagon.S6.vtrunehb.ppp
-    1, // llvm.hexagon.S6.vtrunohb.ppp
-    1, // llvm.hexagon.V6.extractw
-    1, // llvm.hexagon.V6.extractw.128B
-    1, // llvm.hexagon.V6.hi
-    1, // llvm.hexagon.V6.hi.128B
-    1, // llvm.hexagon.V6.lo
-    1, // llvm.hexagon.V6.lo.128B
-    1, // llvm.hexagon.V6.lvsplatb
-    1, // llvm.hexagon.V6.lvsplatb.128B
-    1, // llvm.hexagon.V6.lvsplath
-    1, // llvm.hexagon.V6.lvsplath.128B
-    1, // llvm.hexagon.V6.lvsplatw
-    1, // llvm.hexagon.V6.lvsplatw.128B
-    1, // llvm.hexagon.V6.pred.and
-    1, // llvm.hexagon.V6.pred.and.128B
-    1, // llvm.hexagon.V6.pred.and.n
-    1, // llvm.hexagon.V6.pred.and.n.128B
-    1, // llvm.hexagon.V6.pred.not
-    1, // llvm.hexagon.V6.pred.not.128B
-    1, // llvm.hexagon.V6.pred.or
-    1, // llvm.hexagon.V6.pred.or.128B
-    1, // llvm.hexagon.V6.pred.or.n
-    1, // llvm.hexagon.V6.pred.or.n.128B
-    1, // llvm.hexagon.V6.pred.scalar2
-    1, // llvm.hexagon.V6.pred.scalar2.128B
-    1, // llvm.hexagon.V6.pred.scalar2v2
-    1, // llvm.hexagon.V6.pred.scalar2v2.128B
-    1, // llvm.hexagon.V6.pred.xor
-    1, // llvm.hexagon.V6.pred.xor.128B
-    1, // llvm.hexagon.V6.shuffeqh
-    1, // llvm.hexagon.V6.shuffeqh.128B
-    1, // llvm.hexagon.V6.shuffeqw
-    1, // llvm.hexagon.V6.shuffeqw.128B
-    21, // llvm.hexagon.V6.vS32b.nqpred.ai
-    21, // llvm.hexagon.V6.vS32b.nqpred.ai.128B
-    21, // llvm.hexagon.V6.vS32b.nt.nqpred.ai
-    21, // llvm.hexagon.V6.vS32b.nt.nqpred.ai.128B
-    21, // llvm.hexagon.V6.vS32b.nt.qpred.ai
-    21, // llvm.hexagon.V6.vS32b.nt.qpred.ai.128B
-    21, // llvm.hexagon.V6.vS32b.qpred.ai
-    21, // llvm.hexagon.V6.vS32b.qpred.ai.128B
-    1, // llvm.hexagon.V6.vabsb
-    1, // llvm.hexagon.V6.vabsb.128B
-    1, // llvm.hexagon.V6.vabsb.sat
-    1, // llvm.hexagon.V6.vabsb.sat.128B
-    1, // llvm.hexagon.V6.vabsdiffh
-    1, // llvm.hexagon.V6.vabsdiffh.128B
-    1, // llvm.hexagon.V6.vabsdiffub
-    1, // llvm.hexagon.V6.vabsdiffub.128B
-    1, // llvm.hexagon.V6.vabsdiffuh
-    1, // llvm.hexagon.V6.vabsdiffuh.128B
-    1, // llvm.hexagon.V6.vabsdiffw
-    1, // llvm.hexagon.V6.vabsdiffw.128B
-    1, // llvm.hexagon.V6.vabsh
-    1, // llvm.hexagon.V6.vabsh.128B
-    1, // llvm.hexagon.V6.vabsh.sat
-    1, // llvm.hexagon.V6.vabsh.sat.128B
-    1, // llvm.hexagon.V6.vabsw
-    1, // llvm.hexagon.V6.vabsw.128B
-    1, // llvm.hexagon.V6.vabsw.sat
-    1, // llvm.hexagon.V6.vabsw.sat.128B
-    1, // llvm.hexagon.V6.vaddb
-    1, // llvm.hexagon.V6.vaddb.128B
-    1, // llvm.hexagon.V6.vaddb.dv
-    1, // llvm.hexagon.V6.vaddb.dv.128B
-    1, // llvm.hexagon.V6.vaddbnq
-    1, // llvm.hexagon.V6.vaddbnq.128B
-    1, // llvm.hexagon.V6.vaddbq
-    1, // llvm.hexagon.V6.vaddbq.128B
-    1, // llvm.hexagon.V6.vaddbsat
-    1, // llvm.hexagon.V6.vaddbsat.128B
-    1, // llvm.hexagon.V6.vaddbsat.dv
-    1, // llvm.hexagon.V6.vaddbsat.dv.128B
-    1, // llvm.hexagon.V6.vaddcarry
-    1, // llvm.hexagon.V6.vaddcarry.128B
-    1, // llvm.hexagon.V6.vaddclbh
-    1, // llvm.hexagon.V6.vaddclbh.128B
-    1, // llvm.hexagon.V6.vaddclbw
-    1, // llvm.hexagon.V6.vaddclbw.128B
-    1, // llvm.hexagon.V6.vaddh
-    1, // llvm.hexagon.V6.vaddh.128B
-    1, // llvm.hexagon.V6.vaddh.dv
-    1, // llvm.hexagon.V6.vaddh.dv.128B
-    1, // llvm.hexagon.V6.vaddhnq
-    1, // llvm.hexagon.V6.vaddhnq.128B
-    1, // llvm.hexagon.V6.vaddhq
-    1, // llvm.hexagon.V6.vaddhq.128B
-    1, // llvm.hexagon.V6.vaddhsat
-    1, // llvm.hexagon.V6.vaddhsat.128B
-    1, // llvm.hexagon.V6.vaddhsat.dv
-    1, // llvm.hexagon.V6.vaddhsat.dv.128B
-    1, // llvm.hexagon.V6.vaddhw
-    1, // llvm.hexagon.V6.vaddhw.128B
-    1, // llvm.hexagon.V6.vaddhw.acc
-    1, // llvm.hexagon.V6.vaddhw.acc.128B
-    1, // llvm.hexagon.V6.vaddubh
-    1, // llvm.hexagon.V6.vaddubh.128B
-    1, // llvm.hexagon.V6.vaddubh.acc
-    1, // llvm.hexagon.V6.vaddubh.acc.128B
-    1, // llvm.hexagon.V6.vaddubsat
-    1, // llvm.hexagon.V6.vaddubsat.128B
-    1, // llvm.hexagon.V6.vaddubsat.dv
-    1, // llvm.hexagon.V6.vaddubsat.dv.128B
-    1, // llvm.hexagon.V6.vaddububb.sat
-    1, // llvm.hexagon.V6.vaddububb.sat.128B
-    1, // llvm.hexagon.V6.vadduhsat
-    1, // llvm.hexagon.V6.vadduhsat.128B
-    1, // llvm.hexagon.V6.vadduhsat.dv
-    1, // llvm.hexagon.V6.vadduhsat.dv.128B
-    1, // llvm.hexagon.V6.vadduhw
-    1, // llvm.hexagon.V6.vadduhw.128B
-    1, // llvm.hexagon.V6.vadduhw.acc
-    1, // llvm.hexagon.V6.vadduhw.acc.128B
-    1, // llvm.hexagon.V6.vadduwsat
-    1, // llvm.hexagon.V6.vadduwsat.128B
-    1, // llvm.hexagon.V6.vadduwsat.dv
-    1, // llvm.hexagon.V6.vadduwsat.dv.128B
-    1, // llvm.hexagon.V6.vaddw
-    1, // llvm.hexagon.V6.vaddw.128B
-    1, // llvm.hexagon.V6.vaddw.dv
-    1, // llvm.hexagon.V6.vaddw.dv.128B
-    1, // llvm.hexagon.V6.vaddwnq
-    1, // llvm.hexagon.V6.vaddwnq.128B
-    1, // llvm.hexagon.V6.vaddwq
-    1, // llvm.hexagon.V6.vaddwq.128B
-    1, // llvm.hexagon.V6.vaddwsat
-    1, // llvm.hexagon.V6.vaddwsat.128B
-    1, // llvm.hexagon.V6.vaddwsat.dv
-    1, // llvm.hexagon.V6.vaddwsat.dv.128B
-    1, // llvm.hexagon.V6.valignb
-    1, // llvm.hexagon.V6.valignb.128B
-    1, // llvm.hexagon.V6.valignbi
-    1, // llvm.hexagon.V6.valignbi.128B
-    1, // llvm.hexagon.V6.vand
-    1, // llvm.hexagon.V6.vand.128B
-    1, // llvm.hexagon.V6.vandnqrt
-    1, // llvm.hexagon.V6.vandnqrt.128B
-    1, // llvm.hexagon.V6.vandnqrt.acc
-    1, // llvm.hexagon.V6.vandnqrt.acc.128B
-    1, // llvm.hexagon.V6.vandqrt
-    1, // llvm.hexagon.V6.vandqrt.128B
-    1, // llvm.hexagon.V6.vandqrt.acc
-    1, // llvm.hexagon.V6.vandqrt.acc.128B
-    1, // llvm.hexagon.V6.vandvnqv
-    1, // llvm.hexagon.V6.vandvnqv.128B
-    1, // llvm.hexagon.V6.vandvqv
-    1, // llvm.hexagon.V6.vandvqv.128B
-    1, // llvm.hexagon.V6.vandvrt
-    1, // llvm.hexagon.V6.vandvrt.128B
-    1, // llvm.hexagon.V6.vandvrt.acc
-    1, // llvm.hexagon.V6.vandvrt.acc.128B
-    1, // llvm.hexagon.V6.vaslh
-    1, // llvm.hexagon.V6.vaslh.128B
-    1, // llvm.hexagon.V6.vaslh.acc
-    1, // llvm.hexagon.V6.vaslh.acc.128B
-    1, // llvm.hexagon.V6.vaslhv
-    1, // llvm.hexagon.V6.vaslhv.128B
-    1, // llvm.hexagon.V6.vaslw
-    1, // llvm.hexagon.V6.vaslw.128B
-    1, // llvm.hexagon.V6.vaslw.acc
-    1, // llvm.hexagon.V6.vaslw.acc.128B
-    1, // llvm.hexagon.V6.vaslwv
-    1, // llvm.hexagon.V6.vaslwv.128B
-    1, // llvm.hexagon.V6.vasrh
-    1, // llvm.hexagon.V6.vasrh.128B
-    1, // llvm.hexagon.V6.vasrh.acc
-    1, // llvm.hexagon.V6.vasrh.acc.128B
-    1, // llvm.hexagon.V6.vasrhbrndsat
-    1, // llvm.hexagon.V6.vasrhbrndsat.128B
-    1, // llvm.hexagon.V6.vasrhbsat
-    1, // llvm.hexagon.V6.vasrhbsat.128B
-    1, // llvm.hexagon.V6.vasrhubrndsat
-    1, // llvm.hexagon.V6.vasrhubrndsat.128B
-    1, // llvm.hexagon.V6.vasrhubsat
-    1, // llvm.hexagon.V6.vasrhubsat.128B
-    1, // llvm.hexagon.V6.vasrhv
-    1, // llvm.hexagon.V6.vasrhv.128B
-    1, // llvm.hexagon.V6.vasruhubrndsat
-    1, // llvm.hexagon.V6.vasruhubrndsat.128B
-    1, // llvm.hexagon.V6.vasruhubsat
-    1, // llvm.hexagon.V6.vasruhubsat.128B
-    1, // llvm.hexagon.V6.vasruwuhrndsat
-    1, // llvm.hexagon.V6.vasruwuhrndsat.128B
-    1, // llvm.hexagon.V6.vasruwuhsat
-    1, // llvm.hexagon.V6.vasruwuhsat.128B
-    1, // llvm.hexagon.V6.vasrw
-    1, // llvm.hexagon.V6.vasrw.128B
-    1, // llvm.hexagon.V6.vasrw.acc
-    1, // llvm.hexagon.V6.vasrw.acc.128B
-    1, // llvm.hexagon.V6.vasrwh
-    1, // llvm.hexagon.V6.vasrwh.128B
-    1, // llvm.hexagon.V6.vasrwhrndsat
-    1, // llvm.hexagon.V6.vasrwhrndsat.128B
-    1, // llvm.hexagon.V6.vasrwhsat
-    1, // llvm.hexagon.V6.vasrwhsat.128B
-    1, // llvm.hexagon.V6.vasrwuhrndsat
-    1, // llvm.hexagon.V6.vasrwuhrndsat.128B
-    1, // llvm.hexagon.V6.vasrwuhsat
-    1, // llvm.hexagon.V6.vasrwuhsat.128B
-    1, // llvm.hexagon.V6.vasrwv
-    1, // llvm.hexagon.V6.vasrwv.128B
-    1, // llvm.hexagon.V6.vassign
-    1, // llvm.hexagon.V6.vassign.128B
-    1, // llvm.hexagon.V6.vassignp
-    1, // llvm.hexagon.V6.vassignp.128B
-    1, // llvm.hexagon.V6.vavgb
-    1, // llvm.hexagon.V6.vavgb.128B
-    1, // llvm.hexagon.V6.vavgbrnd
-    1, // llvm.hexagon.V6.vavgbrnd.128B
-    1, // llvm.hexagon.V6.vavgh
-    1, // llvm.hexagon.V6.vavgh.128B
-    1, // llvm.hexagon.V6.vavghrnd
-    1, // llvm.hexagon.V6.vavghrnd.128B
-    1, // llvm.hexagon.V6.vavgub
-    1, // llvm.hexagon.V6.vavgub.128B
-    1, // llvm.hexagon.V6.vavgubrnd
-    1, // llvm.hexagon.V6.vavgubrnd.128B
-    1, // llvm.hexagon.V6.vavguh
-    1, // llvm.hexagon.V6.vavguh.128B
-    1, // llvm.hexagon.V6.vavguhrnd
-    1, // llvm.hexagon.V6.vavguhrnd.128B
-    1, // llvm.hexagon.V6.vavguw
-    1, // llvm.hexagon.V6.vavguw.128B
-    1, // llvm.hexagon.V6.vavguwrnd
-    1, // llvm.hexagon.V6.vavguwrnd.128B
-    1, // llvm.hexagon.V6.vavgw
-    1, // llvm.hexagon.V6.vavgw.128B
-    1, // llvm.hexagon.V6.vavgwrnd
-    1, // llvm.hexagon.V6.vavgwrnd.128B
-    1, // llvm.hexagon.V6.vcl0h
-    1, // llvm.hexagon.V6.vcl0h.128B
-    1, // llvm.hexagon.V6.vcl0w
-    1, // llvm.hexagon.V6.vcl0w.128B
-    1, // llvm.hexagon.V6.vcombine
-    1, // llvm.hexagon.V6.vcombine.128B
-    1, // llvm.hexagon.V6.vd0
-    1, // llvm.hexagon.V6.vd0.128B
-    1, // llvm.hexagon.V6.vdd0
-    1, // llvm.hexagon.V6.vdd0.128B
-    1, // llvm.hexagon.V6.vdealb
-    1, // llvm.hexagon.V6.vdealb.128B
-    1, // llvm.hexagon.V6.vdealb4w
-    1, // llvm.hexagon.V6.vdealb4w.128B
-    1, // llvm.hexagon.V6.vdealh
-    1, // llvm.hexagon.V6.vdealh.128B
-    1, // llvm.hexagon.V6.vdealvdd
-    1, // llvm.hexagon.V6.vdealvdd.128B
-    1, // llvm.hexagon.V6.vdelta
-    1, // llvm.hexagon.V6.vdelta.128B
-    1, // llvm.hexagon.V6.vdmpybus
-    1, // llvm.hexagon.V6.vdmpybus.128B
-    1, // llvm.hexagon.V6.vdmpybus.acc
-    1, // llvm.hexagon.V6.vdmpybus.acc.128B
-    1, // llvm.hexagon.V6.vdmpybus.dv
-    1, // llvm.hexagon.V6.vdmpybus.dv.128B
-    1, // llvm.hexagon.V6.vdmpybus.dv.acc
-    1, // llvm.hexagon.V6.vdmpybus.dv.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhb
-    1, // llvm.hexagon.V6.vdmpyhb.128B
-    1, // llvm.hexagon.V6.vdmpyhb.acc
-    1, // llvm.hexagon.V6.vdmpyhb.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhb.dv
-    1, // llvm.hexagon.V6.vdmpyhb.dv.128B
-    1, // llvm.hexagon.V6.vdmpyhb.dv.acc
-    1, // llvm.hexagon.V6.vdmpyhb.dv.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhisat
-    1, // llvm.hexagon.V6.vdmpyhisat.128B
-    1, // llvm.hexagon.V6.vdmpyhisat.acc
-    1, // llvm.hexagon.V6.vdmpyhisat.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhsat
-    1, // llvm.hexagon.V6.vdmpyhsat.128B
-    1, // llvm.hexagon.V6.vdmpyhsat.acc
-    1, // llvm.hexagon.V6.vdmpyhsat.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhsuisat
-    1, // llvm.hexagon.V6.vdmpyhsuisat.128B
-    1, // llvm.hexagon.V6.vdmpyhsuisat.acc
-    1, // llvm.hexagon.V6.vdmpyhsuisat.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhsusat
-    1, // llvm.hexagon.V6.vdmpyhsusat.128B
-    1, // llvm.hexagon.V6.vdmpyhsusat.acc
-    1, // llvm.hexagon.V6.vdmpyhsusat.acc.128B
-    1, // llvm.hexagon.V6.vdmpyhvsat
-    1, // llvm.hexagon.V6.vdmpyhvsat.128B
-    1, // llvm.hexagon.V6.vdmpyhvsat.acc
-    1, // llvm.hexagon.V6.vdmpyhvsat.acc.128B
-    1, // llvm.hexagon.V6.vdsaduh
-    1, // llvm.hexagon.V6.vdsaduh.128B
-    1, // llvm.hexagon.V6.vdsaduh.acc
-    1, // llvm.hexagon.V6.vdsaduh.acc.128B
-    1, // llvm.hexagon.V6.veqb
-    1, // llvm.hexagon.V6.veqb.128B
-    1, // llvm.hexagon.V6.veqb.and
-    1, // llvm.hexagon.V6.veqb.and.128B
-    1, // llvm.hexagon.V6.veqb.or
-    1, // llvm.hexagon.V6.veqb.or.128B
-    1, // llvm.hexagon.V6.veqb.xor
-    1, // llvm.hexagon.V6.veqb.xor.128B
-    1, // llvm.hexagon.V6.veqh
-    1, // llvm.hexagon.V6.veqh.128B
-    1, // llvm.hexagon.V6.veqh.and
-    1, // llvm.hexagon.V6.veqh.and.128B
-    1, // llvm.hexagon.V6.veqh.or
-    1, // llvm.hexagon.V6.veqh.or.128B
-    1, // llvm.hexagon.V6.veqh.xor
-    1, // llvm.hexagon.V6.veqh.xor.128B
-    1, // llvm.hexagon.V6.veqw
-    1, // llvm.hexagon.V6.veqw.128B
-    1, // llvm.hexagon.V6.veqw.and
-    1, // llvm.hexagon.V6.veqw.and.128B
-    1, // llvm.hexagon.V6.veqw.or
-    1, // llvm.hexagon.V6.veqw.or.128B
-    1, // llvm.hexagon.V6.veqw.xor
-    1, // llvm.hexagon.V6.veqw.xor.128B
-    21, // llvm.hexagon.V6.vgathermh
-    21, // llvm.hexagon.V6.vgathermh.128B
-    21, // llvm.hexagon.V6.vgathermhq
-    21, // llvm.hexagon.V6.vgathermhq.128B
-    21, // llvm.hexagon.V6.vgathermhw
-    21, // llvm.hexagon.V6.vgathermhw.128B
-    21, // llvm.hexagon.V6.vgathermhwq
-    21, // llvm.hexagon.V6.vgathermhwq.128B
-    21, // llvm.hexagon.V6.vgathermw
-    21, // llvm.hexagon.V6.vgathermw.128B
-    21, // llvm.hexagon.V6.vgathermwq
-    21, // llvm.hexagon.V6.vgathermwq.128B
-    1, // llvm.hexagon.V6.vgtb
-    1, // llvm.hexagon.V6.vgtb.128B
-    1, // llvm.hexagon.V6.vgtb.and
-    1, // llvm.hexagon.V6.vgtb.and.128B
-    1, // llvm.hexagon.V6.vgtb.or
-    1, // llvm.hexagon.V6.vgtb.or.128B
-    1, // llvm.hexagon.V6.vgtb.xor
-    1, // llvm.hexagon.V6.vgtb.xor.128B
-    1, // llvm.hexagon.V6.vgth
-    1, // llvm.hexagon.V6.vgth.128B
-    1, // llvm.hexagon.V6.vgth.and
-    1, // llvm.hexagon.V6.vgth.and.128B
-    1, // llvm.hexagon.V6.vgth.or
-    1, // llvm.hexagon.V6.vgth.or.128B
-    1, // llvm.hexagon.V6.vgth.xor
-    1, // llvm.hexagon.V6.vgth.xor.128B
-    1, // llvm.hexagon.V6.vgtub
-    1, // llvm.hexagon.V6.vgtub.128B
-    1, // llvm.hexagon.V6.vgtub.and
-    1, // llvm.hexagon.V6.vgtub.and.128B
-    1, // llvm.hexagon.V6.vgtub.or
-    1, // llvm.hexagon.V6.vgtub.or.128B
-    1, // llvm.hexagon.V6.vgtub.xor
-    1, // llvm.hexagon.V6.vgtub.xor.128B
-    1, // llvm.hexagon.V6.vgtuh
-    1, // llvm.hexagon.V6.vgtuh.128B
-    1, // llvm.hexagon.V6.vgtuh.and
-    1, // llvm.hexagon.V6.vgtuh.and.128B
-    1, // llvm.hexagon.V6.vgtuh.or
-    1, // llvm.hexagon.V6.vgtuh.or.128B
-    1, // llvm.hexagon.V6.vgtuh.xor
-    1, // llvm.hexagon.V6.vgtuh.xor.128B
-    1, // llvm.hexagon.V6.vgtuw
-    1, // llvm.hexagon.V6.vgtuw.128B
-    1, // llvm.hexagon.V6.vgtuw.and
-    1, // llvm.hexagon.V6.vgtuw.and.128B
-    1, // llvm.hexagon.V6.vgtuw.or
-    1, // llvm.hexagon.V6.vgtuw.or.128B
-    1, // llvm.hexagon.V6.vgtuw.xor
-    1, // llvm.hexagon.V6.vgtuw.xor.128B
-    1, // llvm.hexagon.V6.vgtw
-    1, // llvm.hexagon.V6.vgtw.128B
-    1, // llvm.hexagon.V6.vgtw.and
-    1, // llvm.hexagon.V6.vgtw.and.128B
-    1, // llvm.hexagon.V6.vgtw.or
-    1, // llvm.hexagon.V6.vgtw.or.128B
-    1, // llvm.hexagon.V6.vgtw.xor
-    1, // llvm.hexagon.V6.vgtw.xor.128B
-    1, // llvm.hexagon.V6.vinsertwr
-    1, // llvm.hexagon.V6.vinsertwr.128B
-    1, // llvm.hexagon.V6.vlalignb
-    1, // llvm.hexagon.V6.vlalignb.128B
-    1, // llvm.hexagon.V6.vlalignbi
-    1, // llvm.hexagon.V6.vlalignbi.128B
-    1, // llvm.hexagon.V6.vlsrb
-    1, // llvm.hexagon.V6.vlsrb.128B
-    1, // llvm.hexagon.V6.vlsrh
-    1, // llvm.hexagon.V6.vlsrh.128B
-    1, // llvm.hexagon.V6.vlsrhv
-    1, // llvm.hexagon.V6.vlsrhv.128B
-    1, // llvm.hexagon.V6.vlsrw
-    1, // llvm.hexagon.V6.vlsrw.128B
-    1, // llvm.hexagon.V6.vlsrwv
-    1, // llvm.hexagon.V6.vlsrwv.128B
-    1, // llvm.hexagon.V6.vlut4
-    1, // llvm.hexagon.V6.vlut4.128B
-    1, // llvm.hexagon.V6.vlutvvb
-    1, // llvm.hexagon.V6.vlutvvb.128B
-    1, // llvm.hexagon.V6.vlutvvb.nm
-    1, // llvm.hexagon.V6.vlutvvb.nm.128B
-    1, // llvm.hexagon.V6.vlutvvb.oracc
-    1, // llvm.hexagon.V6.vlutvvb.oracc.128B
-    1, // llvm.hexagon.V6.vlutvvb.oracci
-    1, // llvm.hexagon.V6.vlutvvb.oracci.128B
-    1, // llvm.hexagon.V6.vlutvvbi
-    1, // llvm.hexagon.V6.vlutvvbi.128B
-    1, // llvm.hexagon.V6.vlutvwh
-    1, // llvm.hexagon.V6.vlutvwh.128B
-    1, // llvm.hexagon.V6.vlutvwh.nm
-    1, // llvm.hexagon.V6.vlutvwh.nm.128B
-    1, // llvm.hexagon.V6.vlutvwh.oracc
-    1, // llvm.hexagon.V6.vlutvwh.oracc.128B
-    1, // llvm.hexagon.V6.vlutvwh.oracci
-    1, // llvm.hexagon.V6.vlutvwh.oracci.128B
-    1, // llvm.hexagon.V6.vlutvwhi
-    1, // llvm.hexagon.V6.vlutvwhi.128B
-    21, // llvm.hexagon.V6.vmaskedstorenq
-    21, // llvm.hexagon.V6.vmaskedstorenq.128B
-    21, // llvm.hexagon.V6.vmaskedstorentnq
-    21, // llvm.hexagon.V6.vmaskedstorentnq.128B
-    21, // llvm.hexagon.V6.vmaskedstorentq
-    21, // llvm.hexagon.V6.vmaskedstorentq.128B
-    21, // llvm.hexagon.V6.vmaskedstoreq
-    21, // llvm.hexagon.V6.vmaskedstoreq.128B
-    1, // llvm.hexagon.V6.vmaxb
-    1, // llvm.hexagon.V6.vmaxb.128B
-    1, // llvm.hexagon.V6.vmaxh
-    1, // llvm.hexagon.V6.vmaxh.128B
-    1, // llvm.hexagon.V6.vmaxub
-    1, // llvm.hexagon.V6.vmaxub.128B
-    1, // llvm.hexagon.V6.vmaxuh
-    1, // llvm.hexagon.V6.vmaxuh.128B
-    1, // llvm.hexagon.V6.vmaxw
-    1, // llvm.hexagon.V6.vmaxw.128B
-    1, // llvm.hexagon.V6.vminb
-    1, // llvm.hexagon.V6.vminb.128B
-    1, // llvm.hexagon.V6.vminh
-    1, // llvm.hexagon.V6.vminh.128B
-    1, // llvm.hexagon.V6.vminub
-    1, // llvm.hexagon.V6.vminub.128B
-    1, // llvm.hexagon.V6.vminuh
-    1, // llvm.hexagon.V6.vminuh.128B
-    1, // llvm.hexagon.V6.vminw
-    1, // llvm.hexagon.V6.vminw.128B
-    1, // llvm.hexagon.V6.vmpabus
-    1, // llvm.hexagon.V6.vmpabus.128B
-    1, // llvm.hexagon.V6.vmpabus.acc
-    1, // llvm.hexagon.V6.vmpabus.acc.128B
-    1, // llvm.hexagon.V6.vmpabusv
-    1, // llvm.hexagon.V6.vmpabusv.128B
-    1, // llvm.hexagon.V6.vmpabuu
-    1, // llvm.hexagon.V6.vmpabuu.128B
-    1, // llvm.hexagon.V6.vmpabuu.acc
-    1, // llvm.hexagon.V6.vmpabuu.acc.128B
-    1, // llvm.hexagon.V6.vmpabuuv
-    1, // llvm.hexagon.V6.vmpabuuv.128B
-    1, // llvm.hexagon.V6.vmpahb
-    1, // llvm.hexagon.V6.vmpahb.128B
-    1, // llvm.hexagon.V6.vmpahb.acc
-    1, // llvm.hexagon.V6.vmpahb.acc.128B
-    1, // llvm.hexagon.V6.vmpahhsat
-    1, // llvm.hexagon.V6.vmpahhsat.128B
-    1, // llvm.hexagon.V6.vmpauhb
-    1, // llvm.hexagon.V6.vmpauhb.128B
-    1, // llvm.hexagon.V6.vmpauhb.acc
-    1, // llvm.hexagon.V6.vmpauhb.acc.128B
-    1, // llvm.hexagon.V6.vmpauhuhsat
-    1, // llvm.hexagon.V6.vmpauhuhsat.128B
-    1, // llvm.hexagon.V6.vmpsuhuhsat
-    1, // llvm.hexagon.V6.vmpsuhuhsat.128B
-    1, // llvm.hexagon.V6.vmpybus
-    1, // llvm.hexagon.V6.vmpybus.128B
-    1, // llvm.hexagon.V6.vmpybus.acc
-    1, // llvm.hexagon.V6.vmpybus.acc.128B
-    1, // llvm.hexagon.V6.vmpybusv
-    1, // llvm.hexagon.V6.vmpybusv.128B
-    1, // llvm.hexagon.V6.vmpybusv.acc
-    1, // llvm.hexagon.V6.vmpybusv.acc.128B
-    1, // llvm.hexagon.V6.vmpybv
-    1, // llvm.hexagon.V6.vmpybv.128B
-    1, // llvm.hexagon.V6.vmpybv.acc
-    1, // llvm.hexagon.V6.vmpybv.acc.128B
-    1, // llvm.hexagon.V6.vmpyewuh
-    1, // llvm.hexagon.V6.vmpyewuh.128B
-    1, // llvm.hexagon.V6.vmpyewuh.64
-    1, // llvm.hexagon.V6.vmpyewuh.64.128B
-    1, // llvm.hexagon.V6.vmpyh
-    1, // llvm.hexagon.V6.vmpyh.128B
-    1, // llvm.hexagon.V6.vmpyh.acc
-    1, // llvm.hexagon.V6.vmpyh.acc.128B
-    1, // llvm.hexagon.V6.vmpyhsat.acc
-    1, // llvm.hexagon.V6.vmpyhsat.acc.128B
-    1, // llvm.hexagon.V6.vmpyhsrs
-    1, // llvm.hexagon.V6.vmpyhsrs.128B
-    1, // llvm.hexagon.V6.vmpyhss
-    1, // llvm.hexagon.V6.vmpyhss.128B
-    1, // llvm.hexagon.V6.vmpyhus
-    1, // llvm.hexagon.V6.vmpyhus.128B
-    1, // llvm.hexagon.V6.vmpyhus.acc
-    1, // llvm.hexagon.V6.vmpyhus.acc.128B
-    1, // llvm.hexagon.V6.vmpyhv
-    1, // llvm.hexagon.V6.vmpyhv.128B
-    1, // llvm.hexagon.V6.vmpyhv.acc
-    1, // llvm.hexagon.V6.vmpyhv.acc.128B
-    1, // llvm.hexagon.V6.vmpyhvsrs
-    1, // llvm.hexagon.V6.vmpyhvsrs.128B
-    1, // llvm.hexagon.V6.vmpyieoh
-    1, // llvm.hexagon.V6.vmpyieoh.128B
-    1, // llvm.hexagon.V6.vmpyiewh.acc
-    1, // llvm.hexagon.V6.vmpyiewh.acc.128B
-    1, // llvm.hexagon.V6.vmpyiewuh
-    1, // llvm.hexagon.V6.vmpyiewuh.128B
-    1, // llvm.hexagon.V6.vmpyiewuh.acc
-    1, // llvm.hexagon.V6.vmpyiewuh.acc.128B
-    1, // llvm.hexagon.V6.vmpyih
-    1, // llvm.hexagon.V6.vmpyih.128B
-    1, // llvm.hexagon.V6.vmpyih.acc
-    1, // llvm.hexagon.V6.vmpyih.acc.128B
-    1, // llvm.hexagon.V6.vmpyihb
-    1, // llvm.hexagon.V6.vmpyihb.128B
-    1, // llvm.hexagon.V6.vmpyihb.acc
-    1, // llvm.hexagon.V6.vmpyihb.acc.128B
-    1, // llvm.hexagon.V6.vmpyiowh
-    1, // llvm.hexagon.V6.vmpyiowh.128B
-    1, // llvm.hexagon.V6.vmpyiwb
-    1, // llvm.hexagon.V6.vmpyiwb.128B
-    1, // llvm.hexagon.V6.vmpyiwb.acc
-    1, // llvm.hexagon.V6.vmpyiwb.acc.128B
-    1, // llvm.hexagon.V6.vmpyiwh
-    1, // llvm.hexagon.V6.vmpyiwh.128B
-    1, // llvm.hexagon.V6.vmpyiwh.acc
-    1, // llvm.hexagon.V6.vmpyiwh.acc.128B
-    1, // llvm.hexagon.V6.vmpyiwub
-    1, // llvm.hexagon.V6.vmpyiwub.128B
-    1, // llvm.hexagon.V6.vmpyiwub.acc
-    1, // llvm.hexagon.V6.vmpyiwub.acc.128B
-    1, // llvm.hexagon.V6.vmpyowh
-    1, // llvm.hexagon.V6.vmpyowh.128B
-    1, // llvm.hexagon.V6.vmpyowh.64.acc
-    1, // llvm.hexagon.V6.vmpyowh.64.acc.128B
-    1, // llvm.hexagon.V6.vmpyowh.rnd
-    1, // llvm.hexagon.V6.vmpyowh.rnd.128B
-    1, // llvm.hexagon.V6.vmpyowh.rnd.sacc
-    1, // llvm.hexagon.V6.vmpyowh.rnd.sacc.128B
-    1, // llvm.hexagon.V6.vmpyowh.sacc
-    1, // llvm.hexagon.V6.vmpyowh.sacc.128B
-    1, // llvm.hexagon.V6.vmpyub
-    1, // llvm.hexagon.V6.vmpyub.128B
-    1, // llvm.hexagon.V6.vmpyub.acc
-    1, // llvm.hexagon.V6.vmpyub.acc.128B
-    1, // llvm.hexagon.V6.vmpyubv
-    1, // llvm.hexagon.V6.vmpyubv.128B
-    1, // llvm.hexagon.V6.vmpyubv.acc
-    1, // llvm.hexagon.V6.vmpyubv.acc.128B
-    1, // llvm.hexagon.V6.vmpyuh
-    1, // llvm.hexagon.V6.vmpyuh.128B
-    1, // llvm.hexagon.V6.vmpyuh.acc
-    1, // llvm.hexagon.V6.vmpyuh.acc.128B
-    1, // llvm.hexagon.V6.vmpyuhe
-    1, // llvm.hexagon.V6.vmpyuhe.128B
-    1, // llvm.hexagon.V6.vmpyuhe.acc
-    1, // llvm.hexagon.V6.vmpyuhe.acc.128B
-    1, // llvm.hexagon.V6.vmpyuhv
-    1, // llvm.hexagon.V6.vmpyuhv.128B
-    1, // llvm.hexagon.V6.vmpyuhv.acc
-    1, // llvm.hexagon.V6.vmpyuhv.acc.128B
-    1, // llvm.hexagon.V6.vmux
-    1, // llvm.hexagon.V6.vmux.128B
-    1, // llvm.hexagon.V6.vnavgb
-    1, // llvm.hexagon.V6.vnavgb.128B
-    1, // llvm.hexagon.V6.vnavgh
-    1, // llvm.hexagon.V6.vnavgh.128B
-    1, // llvm.hexagon.V6.vnavgub
-    1, // llvm.hexagon.V6.vnavgub.128B
-    1, // llvm.hexagon.V6.vnavgw
-    1, // llvm.hexagon.V6.vnavgw.128B
-    1, // llvm.hexagon.V6.vnormamth
-    1, // llvm.hexagon.V6.vnormamth.128B
-    1, // llvm.hexagon.V6.vnormamtw
-    1, // llvm.hexagon.V6.vnormamtw.128B
-    1, // llvm.hexagon.V6.vnot
-    1, // llvm.hexagon.V6.vnot.128B
-    1, // llvm.hexagon.V6.vor
-    1, // llvm.hexagon.V6.vor.128B
-    1, // llvm.hexagon.V6.vpackeb
-    1, // llvm.hexagon.V6.vpackeb.128B
-    1, // llvm.hexagon.V6.vpackeh
-    1, // llvm.hexagon.V6.vpackeh.128B
-    1, // llvm.hexagon.V6.vpackhb.sat
-    1, // llvm.hexagon.V6.vpackhb.sat.128B
-    1, // llvm.hexagon.V6.vpackhub.sat
-    1, // llvm.hexagon.V6.vpackhub.sat.128B
-    1, // llvm.hexagon.V6.vpackob
-    1, // llvm.hexagon.V6.vpackob.128B
-    1, // llvm.hexagon.V6.vpackoh
-    1, // llvm.hexagon.V6.vpackoh.128B
-    1, // llvm.hexagon.V6.vpackwh.sat
-    1, // llvm.hexagon.V6.vpackwh.sat.128B
-    1, // llvm.hexagon.V6.vpackwuh.sat
-    1, // llvm.hexagon.V6.vpackwuh.sat.128B
-    1, // llvm.hexagon.V6.vpopcounth
-    1, // llvm.hexagon.V6.vpopcounth.128B
-    1, // llvm.hexagon.V6.vprefixqb
-    1, // llvm.hexagon.V6.vprefixqb.128B
-    1, // llvm.hexagon.V6.vprefixqh
-    1, // llvm.hexagon.V6.vprefixqh.128B
-    1, // llvm.hexagon.V6.vprefixqw
-    1, // llvm.hexagon.V6.vprefixqw.128B
-    1, // llvm.hexagon.V6.vrdelta
-    1, // llvm.hexagon.V6.vrdelta.128B
-    1, // llvm.hexagon.V6.vrmpybub.rtt
-    1, // llvm.hexagon.V6.vrmpybub.rtt.128B
-    1, // llvm.hexagon.V6.vrmpybub.rtt.acc
-    1, // llvm.hexagon.V6.vrmpybub.rtt.acc.128B
-    1, // llvm.hexagon.V6.vrmpybus
-    1, // llvm.hexagon.V6.vrmpybus.128B
-    1, // llvm.hexagon.V6.vrmpybus.acc
-    1, // llvm.hexagon.V6.vrmpybus.acc.128B
-    1, // llvm.hexagon.V6.vrmpybusi
-    1, // llvm.hexagon.V6.vrmpybusi.128B
-    1, // llvm.hexagon.V6.vrmpybusi.acc
-    1, // llvm.hexagon.V6.vrmpybusi.acc.128B
-    1, // llvm.hexagon.V6.vrmpybusv
-    1, // llvm.hexagon.V6.vrmpybusv.128B
-    1, // llvm.hexagon.V6.vrmpybusv.acc
-    1, // llvm.hexagon.V6.vrmpybusv.acc.128B
-    1, // llvm.hexagon.V6.vrmpybv
-    1, // llvm.hexagon.V6.vrmpybv.128B
-    1, // llvm.hexagon.V6.vrmpybv.acc
-    1, // llvm.hexagon.V6.vrmpybv.acc.128B
-    1, // llvm.hexagon.V6.vrmpyub
-    1, // llvm.hexagon.V6.vrmpyub.128B
-    1, // llvm.hexagon.V6.vrmpyub.acc
-    1, // llvm.hexagon.V6.vrmpyub.acc.128B
-    1, // llvm.hexagon.V6.vrmpyub.rtt
-    1, // llvm.hexagon.V6.vrmpyub.rtt.128B
-    1, // llvm.hexagon.V6.vrmpyub.rtt.acc
-    1, // llvm.hexagon.V6.vrmpyub.rtt.acc.128B
-    1, // llvm.hexagon.V6.vrmpyubi
-    1, // llvm.hexagon.V6.vrmpyubi.128B
-    1, // llvm.hexagon.V6.vrmpyubi.acc
-    1, // llvm.hexagon.V6.vrmpyubi.acc.128B
-    1, // llvm.hexagon.V6.vrmpyubv
-    1, // llvm.hexagon.V6.vrmpyubv.128B
-    1, // llvm.hexagon.V6.vrmpyubv.acc
-    1, // llvm.hexagon.V6.vrmpyubv.acc.128B
-    1, // llvm.hexagon.V6.vror
-    1, // llvm.hexagon.V6.vror.128B
-    1, // llvm.hexagon.V6.vroundhb
-    1, // llvm.hexagon.V6.vroundhb.128B
-    1, // llvm.hexagon.V6.vroundhub
-    1, // llvm.hexagon.V6.vroundhub.128B
-    1, // llvm.hexagon.V6.vrounduhub
-    1, // llvm.hexagon.V6.vrounduhub.128B
-    1, // llvm.hexagon.V6.vrounduwuh
-    1, // llvm.hexagon.V6.vrounduwuh.128B
-    1, // llvm.hexagon.V6.vroundwh
-    1, // llvm.hexagon.V6.vroundwh.128B
-    1, // llvm.hexagon.V6.vroundwuh
-    1, // llvm.hexagon.V6.vroundwuh.128B
-    1, // llvm.hexagon.V6.vrsadubi
-    1, // llvm.hexagon.V6.vrsadubi.128B
-    1, // llvm.hexagon.V6.vrsadubi.acc
-    1, // llvm.hexagon.V6.vrsadubi.acc.128B
-    1, // llvm.hexagon.V6.vsathub
-    1, // llvm.hexagon.V6.vsathub.128B
-    1, // llvm.hexagon.V6.vsatuwuh
-    1, // llvm.hexagon.V6.vsatuwuh.128B
-    1, // llvm.hexagon.V6.vsatwh
-    1, // llvm.hexagon.V6.vsatwh.128B
-    1, // llvm.hexagon.V6.vsb
-    1, // llvm.hexagon.V6.vsb.128B
-    32, // llvm.hexagon.V6.vscattermh
-    32, // llvm.hexagon.V6.vscattermh.128B
-    32, // llvm.hexagon.V6.vscattermh.add
-    32, // llvm.hexagon.V6.vscattermh.add.128B
-    32, // llvm.hexagon.V6.vscattermhq
-    32, // llvm.hexagon.V6.vscattermhq.128B
-    32, // llvm.hexagon.V6.vscattermhw
-    32, // llvm.hexagon.V6.vscattermhw.128B
-    32, // llvm.hexagon.V6.vscattermhw.add
-    32, // llvm.hexagon.V6.vscattermhw.add.128B
-    32, // llvm.hexagon.V6.vscattermhwq
-    32, // llvm.hexagon.V6.vscattermhwq.128B
-    32, // llvm.hexagon.V6.vscattermw
-    32, // llvm.hexagon.V6.vscattermw.128B
-    32, // llvm.hexagon.V6.vscattermw.add
-    32, // llvm.hexagon.V6.vscattermw.add.128B
-    32, // llvm.hexagon.V6.vscattermwq
-    32, // llvm.hexagon.V6.vscattermwq.128B
-    1, // llvm.hexagon.V6.vsh
-    1, // llvm.hexagon.V6.vsh.128B
-    1, // llvm.hexagon.V6.vshufeh
-    1, // llvm.hexagon.V6.vshufeh.128B
-    1, // llvm.hexagon.V6.vshuffb
-    1, // llvm.hexagon.V6.vshuffb.128B
-    1, // llvm.hexagon.V6.vshuffeb
-    1, // llvm.hexagon.V6.vshuffeb.128B
-    1, // llvm.hexagon.V6.vshuffh
-    1, // llvm.hexagon.V6.vshuffh.128B
-    1, // llvm.hexagon.V6.vshuffob
-    1, // llvm.hexagon.V6.vshuffob.128B
-    1, // llvm.hexagon.V6.vshuffvdd
-    1, // llvm.hexagon.V6.vshuffvdd.128B
-    1, // llvm.hexagon.V6.vshufoeb
-    1, // llvm.hexagon.V6.vshufoeb.128B
-    1, // llvm.hexagon.V6.vshufoeh
-    1, // llvm.hexagon.V6.vshufoeh.128B
-    1, // llvm.hexagon.V6.vshufoh
-    1, // llvm.hexagon.V6.vshufoh.128B
-    1, // llvm.hexagon.V6.vsubb
-    1, // llvm.hexagon.V6.vsubb.128B
-    1, // llvm.hexagon.V6.vsubb.dv
-    1, // llvm.hexagon.V6.vsubb.dv.128B
-    1, // llvm.hexagon.V6.vsubbnq
-    1, // llvm.hexagon.V6.vsubbnq.128B
-    1, // llvm.hexagon.V6.vsubbq
-    1, // llvm.hexagon.V6.vsubbq.128B
-    1, // llvm.hexagon.V6.vsubbsat
-    1, // llvm.hexagon.V6.vsubbsat.128B
-    1, // llvm.hexagon.V6.vsubbsat.dv
-    1, // llvm.hexagon.V6.vsubbsat.dv.128B
-    1, // llvm.hexagon.V6.vsubcarry
-    1, // llvm.hexagon.V6.vsubcarry.128B
-    1, // llvm.hexagon.V6.vsubh
-    1, // llvm.hexagon.V6.vsubh.128B
-    1, // llvm.hexagon.V6.vsubh.dv
-    1, // llvm.hexagon.V6.vsubh.dv.128B
-    1, // llvm.hexagon.V6.vsubhnq
-    1, // llvm.hexagon.V6.vsubhnq.128B
-    1, // llvm.hexagon.V6.vsubhq
-    1, // llvm.hexagon.V6.vsubhq.128B
-    1, // llvm.hexagon.V6.vsubhsat
-    1, // llvm.hexagon.V6.vsubhsat.128B
-    1, // llvm.hexagon.V6.vsubhsat.dv
-    1, // llvm.hexagon.V6.vsubhsat.dv.128B
-    1, // llvm.hexagon.V6.vsubhw
-    1, // llvm.hexagon.V6.vsubhw.128B
-    1, // llvm.hexagon.V6.vsububh
-    1, // llvm.hexagon.V6.vsububh.128B
-    1, // llvm.hexagon.V6.vsububsat
-    1, // llvm.hexagon.V6.vsububsat.128B
-    1, // llvm.hexagon.V6.vsububsat.dv
-    1, // llvm.hexagon.V6.vsububsat.dv.128B
-    1, // llvm.hexagon.V6.vsubububb.sat
-    1, // llvm.hexagon.V6.vsubububb.sat.128B
-    1, // llvm.hexagon.V6.vsubuhsat
-    1, // llvm.hexagon.V6.vsubuhsat.128B
-    1, // llvm.hexagon.V6.vsubuhsat.dv
-    1, // llvm.hexagon.V6.vsubuhsat.dv.128B
-    1, // llvm.hexagon.V6.vsubuhw
-    1, // llvm.hexagon.V6.vsubuhw.128B
-    1, // llvm.hexagon.V6.vsubuwsat
-    1, // llvm.hexagon.V6.vsubuwsat.128B
-    1, // llvm.hexagon.V6.vsubuwsat.dv
-    1, // llvm.hexagon.V6.vsubuwsat.dv.128B
-    1, // llvm.hexagon.V6.vsubw
-    1, // llvm.hexagon.V6.vsubw.128B
-    1, // llvm.hexagon.V6.vsubw.dv
-    1, // llvm.hexagon.V6.vsubw.dv.128B
-    1, // llvm.hexagon.V6.vsubwnq
-    1, // llvm.hexagon.V6.vsubwnq.128B
-    1, // llvm.hexagon.V6.vsubwq
-    1, // llvm.hexagon.V6.vsubwq.128B
-    1, // llvm.hexagon.V6.vsubwsat
-    1, // llvm.hexagon.V6.vsubwsat.128B
-    1, // llvm.hexagon.V6.vsubwsat.dv
-    1, // llvm.hexagon.V6.vsubwsat.dv.128B
-    1, // llvm.hexagon.V6.vswap
-    1, // llvm.hexagon.V6.vswap.128B
-    1, // llvm.hexagon.V6.vtmpyb
-    1, // llvm.hexagon.V6.vtmpyb.128B
-    1, // llvm.hexagon.V6.vtmpyb.acc
-    1, // llvm.hexagon.V6.vtmpyb.acc.128B
-    1, // llvm.hexagon.V6.vtmpybus
-    1, // llvm.hexagon.V6.vtmpybus.128B
-    1, // llvm.hexagon.V6.vtmpybus.acc
-    1, // llvm.hexagon.V6.vtmpybus.acc.128B
-    1, // llvm.hexagon.V6.vtmpyhb
-    1, // llvm.hexagon.V6.vtmpyhb.128B
-    1, // llvm.hexagon.V6.vtmpyhb.acc
-    1, // llvm.hexagon.V6.vtmpyhb.acc.128B
-    1, // llvm.hexagon.V6.vunpackb
-    1, // llvm.hexagon.V6.vunpackb.128B
-    1, // llvm.hexagon.V6.vunpackh
-    1, // llvm.hexagon.V6.vunpackh.128B
-    1, // llvm.hexagon.V6.vunpackob
-    1, // llvm.hexagon.V6.vunpackob.128B
-    1, // llvm.hexagon.V6.vunpackoh
-    1, // llvm.hexagon.V6.vunpackoh.128B
-    1, // llvm.hexagon.V6.vunpackub
-    1, // llvm.hexagon.V6.vunpackub.128B
-    1, // llvm.hexagon.V6.vunpackuh
-    1, // llvm.hexagon.V6.vunpackuh.128B
-    1, // llvm.hexagon.V6.vxor
-    1, // llvm.hexagon.V6.vxor.128B
-    1, // llvm.hexagon.V6.vzb
-    1, // llvm.hexagon.V6.vzb.128B
-    1, // llvm.hexagon.V6.vzh
-    1, // llvm.hexagon.V6.vzh.128B
-    3, // llvm.hexagon.Y2.dccleana
-    3, // llvm.hexagon.Y2.dccleaninva
-    3, // llvm.hexagon.Y2.dcinva
-    36, // llvm.hexagon.Y2.dczeroa
-    3, // llvm.hexagon.Y4.l2fetch
-    3, // llvm.hexagon.Y5.l2fetch
-    21, // llvm.hexagon.circ.ldb
-    21, // llvm.hexagon.circ.ldd
-    21, // llvm.hexagon.circ.ldh
-    21, // llvm.hexagon.circ.ldub
-    21, // llvm.hexagon.circ.lduh
-    21, // llvm.hexagon.circ.ldw
-    32, // llvm.hexagon.circ.stb
-    32, // llvm.hexagon.circ.std
-    32, // llvm.hexagon.circ.sth
-    32, // llvm.hexagon.circ.sthhi
-    32, // llvm.hexagon.circ.stw
-    21, // llvm.hexagon.mm256i.vaddw
-    3, // llvm.hexagon.prefetch
-    3, // llvm.mips.absq.s.ph
-    3, // llvm.mips.absq.s.qb
-    3, // llvm.mips.absq.s.w
-    1, // llvm.mips.add.a.b
-    1, // llvm.mips.add.a.d
-    1, // llvm.mips.add.a.h
-    1, // llvm.mips.add.a.w
-    1, // llvm.mips.addq.ph
-    1, // llvm.mips.addq.s.ph
-    3, // llvm.mips.addq.s.w
-    1, // llvm.mips.addqh.ph
-    1, // llvm.mips.addqh.r.ph
-    1, // llvm.mips.addqh.r.w
-    1, // llvm.mips.addqh.w
-    1, // llvm.mips.adds.a.b
-    1, // llvm.mips.adds.a.d
-    1, // llvm.mips.adds.a.h
-    1, // llvm.mips.adds.a.w
-    1, // llvm.mips.adds.s.b
-    1, // llvm.mips.adds.s.d
-    1, // llvm.mips.adds.s.h
-    1, // llvm.mips.adds.s.w
-    1, // llvm.mips.adds.u.b
-    1, // llvm.mips.adds.u.d
-    1, // llvm.mips.adds.u.h
-    1, // llvm.mips.adds.u.w
-    3, // llvm.mips.addsc
-    3, // llvm.mips.addu.ph
-    1, // llvm.mips.addu.qb
-    3, // llvm.mips.addu.s.ph
-    1, // llvm.mips.addu.s.qb
-    1, // llvm.mips.adduh.qb
-    1, // llvm.mips.adduh.r.qb
-    1, // llvm.mips.addv.b
-    1, // llvm.mips.addv.d
-    1, // llvm.mips.addv.h
-    1, // llvm.mips.addv.w
-    1, // llvm.mips.addvi.b
-    1, // llvm.mips.addvi.d
-    1, // llvm.mips.addvi.h
-    1, // llvm.mips.addvi.w
-    3, // llvm.mips.addwc
-    1, // llvm.mips.and.v
-    1, // llvm.mips.andi.b
-    1, // llvm.mips.append
-    1, // llvm.mips.asub.s.b
-    1, // llvm.mips.asub.s.d
-    1, // llvm.mips.asub.s.h
-    1, // llvm.mips.asub.s.w
-    1, // llvm.mips.asub.u.b
-    1, // llvm.mips.asub.u.d
-    1, // llvm.mips.asub.u.h
-    1, // llvm.mips.asub.u.w
-    1, // llvm.mips.ave.s.b
-    1, // llvm.mips.ave.s.d
-    1, // llvm.mips.ave.s.h
-    1, // llvm.mips.ave.s.w
-    1, // llvm.mips.ave.u.b
-    1, // llvm.mips.ave.u.d
-    1, // llvm.mips.ave.u.h
-    1, // llvm.mips.ave.u.w
-    1, // llvm.mips.aver.s.b
-    1, // llvm.mips.aver.s.d
-    1, // llvm.mips.aver.s.h
-    1, // llvm.mips.aver.s.w
-    1, // llvm.mips.aver.u.b
-    1, // llvm.mips.aver.u.d
-    1, // llvm.mips.aver.u.h
-    1, // llvm.mips.aver.u.w
-    1, // llvm.mips.balign
-    1, // llvm.mips.bclr.b
-    1, // llvm.mips.bclr.d
-    1, // llvm.mips.bclr.h
-    1, // llvm.mips.bclr.w
-    1, // llvm.mips.bclri.b
-    1, // llvm.mips.bclri.d
-    1, // llvm.mips.bclri.h
-    1, // llvm.mips.bclri.w
-    1, // llvm.mips.binsl.b
-    1, // llvm.mips.binsl.d
-    1, // llvm.mips.binsl.h
-    1, // llvm.mips.binsl.w
-    1, // llvm.mips.binsli.b
-    1, // llvm.mips.binsli.d
-    1, // llvm.mips.binsli.h
-    1, // llvm.mips.binsli.w
-    1, // llvm.mips.binsr.b
-    1, // llvm.mips.binsr.d
-    1, // llvm.mips.binsr.h
-    1, // llvm.mips.binsr.w
-    1, // llvm.mips.binsri.b
-    1, // llvm.mips.binsri.d
-    1, // llvm.mips.binsri.h
-    1, // llvm.mips.binsri.w
-    1, // llvm.mips.bitrev
-    1, // llvm.mips.bmnz.v
-    1, // llvm.mips.bmnzi.b
-    1, // llvm.mips.bmz.v
-    1, // llvm.mips.bmzi.b
-    1, // llvm.mips.bneg.b
-    1, // llvm.mips.bneg.d
-    1, // llvm.mips.bneg.h
-    1, // llvm.mips.bneg.w
-    1, // llvm.mips.bnegi.b
-    1, // llvm.mips.bnegi.d
-    1, // llvm.mips.bnegi.h
-    1, // llvm.mips.bnegi.w
-    1, // llvm.mips.bnz.b
-    1, // llvm.mips.bnz.d
-    1, // llvm.mips.bnz.h
-    1, // llvm.mips.bnz.v
-    1, // llvm.mips.bnz.w
-    16, // llvm.mips.bposge32
-    1, // llvm.mips.bsel.v
-    1, // llvm.mips.bseli.b
-    1, // llvm.mips.bset.b
-    1, // llvm.mips.bset.d
-    1, // llvm.mips.bset.h
-    1, // llvm.mips.bset.w
-    1, // llvm.mips.bseti.b
-    1, // llvm.mips.bseti.d
-    1, // llvm.mips.bseti.h
-    1, // llvm.mips.bseti.w
-    1, // llvm.mips.bz.b
-    1, // llvm.mips.bz.d
-    1, // llvm.mips.bz.h
-    1, // llvm.mips.bz.v
-    1, // llvm.mips.bz.w
-    1, // llvm.mips.ceq.b
-    1, // llvm.mips.ceq.d
-    1, // llvm.mips.ceq.h
-    1, // llvm.mips.ceq.w
-    1, // llvm.mips.ceqi.b
-    1, // llvm.mips.ceqi.d
-    1, // llvm.mips.ceqi.h
-    1, // llvm.mips.ceqi.w
-    3, // llvm.mips.cfcmsa
-    1, // llvm.mips.cle.s.b
-    1, // llvm.mips.cle.s.d
-    1, // llvm.mips.cle.s.h
-    1, // llvm.mips.cle.s.w
-    1, // llvm.mips.cle.u.b
-    1, // llvm.mips.cle.u.d
-    1, // llvm.mips.cle.u.h
-    1, // llvm.mips.cle.u.w
-    1, // llvm.mips.clei.s.b
-    1, // llvm.mips.clei.s.d
-    1, // llvm.mips.clei.s.h
-    1, // llvm.mips.clei.s.w
-    1, // llvm.mips.clei.u.b
-    1, // llvm.mips.clei.u.d
-    1, // llvm.mips.clei.u.h
-    1, // llvm.mips.clei.u.w
-    1, // llvm.mips.clt.s.b
-    1, // llvm.mips.clt.s.d
-    1, // llvm.mips.clt.s.h
-    1, // llvm.mips.clt.s.w
-    1, // llvm.mips.clt.u.b
-    1, // llvm.mips.clt.u.d
-    1, // llvm.mips.clt.u.h
-    1, // llvm.mips.clt.u.w
-    1, // llvm.mips.clti.s.b
-    1, // llvm.mips.clti.s.d
-    1, // llvm.mips.clti.s.h
-    1, // llvm.mips.clti.s.w
-    1, // llvm.mips.clti.u.b
-    1, // llvm.mips.clti.u.d
-    1, // llvm.mips.clti.u.h
-    1, // llvm.mips.clti.u.w
-    3, // llvm.mips.cmp.eq.ph
-    3, // llvm.mips.cmp.le.ph
-    3, // llvm.mips.cmp.lt.ph
-    3, // llvm.mips.cmpgdu.eq.qb
-    3, // llvm.mips.cmpgdu.le.qb
-    3, // llvm.mips.cmpgdu.lt.qb
-    3, // llvm.mips.cmpgu.eq.qb
-    3, // llvm.mips.cmpgu.le.qb
-    3, // llvm.mips.cmpgu.lt.qb
-    3, // llvm.mips.cmpu.eq.qb
-    3, // llvm.mips.cmpu.le.qb
-    3, // llvm.mips.cmpu.lt.qb
-    1, // llvm.mips.copy.s.b
-    1, // llvm.mips.copy.s.d
-    1, // llvm.mips.copy.s.h
-    1, // llvm.mips.copy.s.w
-    1, // llvm.mips.copy.u.b
-    1, // llvm.mips.copy.u.d
-    1, // llvm.mips.copy.u.h
-    1, // llvm.mips.copy.u.w
-    3, // llvm.mips.ctcmsa
-    1, // llvm.mips.div.s.b
-    1, // llvm.mips.div.s.d
-    1, // llvm.mips.div.s.h
-    1, // llvm.mips.div.s.w
-    1, // llvm.mips.div.u.b
-    1, // llvm.mips.div.u.d
-    1, // llvm.mips.div.u.h
-    1, // llvm.mips.div.u.w
-    1, // llvm.mips.dlsa
-    1, // llvm.mips.dotp.s.d
-    1, // llvm.mips.dotp.s.h
-    1, // llvm.mips.dotp.s.w
-    1, // llvm.mips.dotp.u.d
-    1, // llvm.mips.dotp.u.h
-    1, // llvm.mips.dotp.u.w
-    1, // llvm.mips.dpa.w.ph
-    1, // llvm.mips.dpadd.s.d
-    1, // llvm.mips.dpadd.s.h
-    1, // llvm.mips.dpadd.s.w
-    1, // llvm.mips.dpadd.u.d
-    1, // llvm.mips.dpadd.u.h
-    1, // llvm.mips.dpadd.u.w
-    3, // llvm.mips.dpaq.s.w.ph
-    3, // llvm.mips.dpaq.sa.l.w
-    3, // llvm.mips.dpaqx.s.w.ph
-    3, // llvm.mips.dpaqx.sa.w.ph
-    1, // llvm.mips.dpau.h.qbl
-    1, // llvm.mips.dpau.h.qbr
-    1, // llvm.mips.dpax.w.ph
-    1, // llvm.mips.dps.w.ph
-    3, // llvm.mips.dpsq.s.w.ph
-    3, // llvm.mips.dpsq.sa.l.w
-    3, // llvm.mips.dpsqx.s.w.ph
-    3, // llvm.mips.dpsqx.sa.w.ph
-    1, // llvm.mips.dpsu.h.qbl
-    1, // llvm.mips.dpsu.h.qbr
-    1, // llvm.mips.dpsub.s.d
-    1, // llvm.mips.dpsub.s.h
-    1, // llvm.mips.dpsub.s.w
-    1, // llvm.mips.dpsub.u.d
-    1, // llvm.mips.dpsub.u.h
-    1, // llvm.mips.dpsub.u.w
-    1, // llvm.mips.dpsx.w.ph
-    3, // llvm.mips.extp
-    3, // llvm.mips.extpdp
-    3, // llvm.mips.extr.r.w
-    3, // llvm.mips.extr.rs.w
-    3, // llvm.mips.extr.s.h
-    3, // llvm.mips.extr.w
-    1, // llvm.mips.fadd.d
-    1, // llvm.mips.fadd.w
-    1, // llvm.mips.fcaf.d
-    1, // llvm.mips.fcaf.w
-    1, // llvm.mips.fceq.d
-    1, // llvm.mips.fceq.w
-    1, // llvm.mips.fclass.d
-    1, // llvm.mips.fclass.w
-    1, // llvm.mips.fcle.d
-    1, // llvm.mips.fcle.w
-    1, // llvm.mips.fclt.d
-    1, // llvm.mips.fclt.w
-    1, // llvm.mips.fcne.d
-    1, // llvm.mips.fcne.w
-    1, // llvm.mips.fcor.d
-    1, // llvm.mips.fcor.w
-    1, // llvm.mips.fcueq.d
-    1, // llvm.mips.fcueq.w
-    1, // llvm.mips.fcule.d
-    1, // llvm.mips.fcule.w
-    1, // llvm.mips.fcult.d
-    1, // llvm.mips.fcult.w
-    1, // llvm.mips.fcun.d
-    1, // llvm.mips.fcun.w
-    1, // llvm.mips.fcune.d
-    1, // llvm.mips.fcune.w
-    1, // llvm.mips.fdiv.d
-    1, // llvm.mips.fdiv.w
-    1, // llvm.mips.fexdo.h
-    1, // llvm.mips.fexdo.w
-    1, // llvm.mips.fexp2.d
-    1, // llvm.mips.fexp2.w
-    1, // llvm.mips.fexupl.d
-    1, // llvm.mips.fexupl.w
-    1, // llvm.mips.fexupr.d
-    1, // llvm.mips.fexupr.w
-    1, // llvm.mips.ffint.s.d
-    1, // llvm.mips.ffint.s.w
-    1, // llvm.mips.ffint.u.d
-    1, // llvm.mips.ffint.u.w
-    1, // llvm.mips.ffql.d
-    1, // llvm.mips.ffql.w
-    1, // llvm.mips.ffqr.d
-    1, // llvm.mips.ffqr.w
-    1, // llvm.mips.fill.b
-    1, // llvm.mips.fill.d
-    1, // llvm.mips.fill.h
-    1, // llvm.mips.fill.w
-    1, // llvm.mips.flog2.d
-    1, // llvm.mips.flog2.w
-    1, // llvm.mips.fmadd.d
-    1, // llvm.mips.fmadd.w
-    1, // llvm.mips.fmax.a.d
-    1, // llvm.mips.fmax.a.w
-    1, // llvm.mips.fmax.d
-    1, // llvm.mips.fmax.w
-    1, // llvm.mips.fmin.a.d
-    1, // llvm.mips.fmin.a.w
-    1, // llvm.mips.fmin.d
-    1, // llvm.mips.fmin.w
-    1, // llvm.mips.fmsub.d
-    1, // llvm.mips.fmsub.w
-    1, // llvm.mips.fmul.d
-    1, // llvm.mips.fmul.w
-    1, // llvm.mips.frcp.d
-    1, // llvm.mips.frcp.w
-    1, // llvm.mips.frint.d
-    1, // llvm.mips.frint.w
-    1, // llvm.mips.frsqrt.d
-    1, // llvm.mips.frsqrt.w
-    1, // llvm.mips.fsaf.d
-    1, // llvm.mips.fsaf.w
-    1, // llvm.mips.fseq.d
-    1, // llvm.mips.fseq.w
-    1, // llvm.mips.fsle.d
-    1, // llvm.mips.fsle.w
-    1, // llvm.mips.fslt.d
-    1, // llvm.mips.fslt.w
-    1, // llvm.mips.fsne.d
-    1, // llvm.mips.fsne.w
-    1, // llvm.mips.fsor.d
-    1, // llvm.mips.fsor.w
-    1, // llvm.mips.fsqrt.d
-    1, // llvm.mips.fsqrt.w
-    1, // llvm.mips.fsub.d
-    1, // llvm.mips.fsub.w
-    1, // llvm.mips.fsueq.d
-    1, // llvm.mips.fsueq.w
-    1, // llvm.mips.fsule.d
-    1, // llvm.mips.fsule.w
-    1, // llvm.mips.fsult.d
-    1, // llvm.mips.fsult.w
-    1, // llvm.mips.fsun.d
-    1, // llvm.mips.fsun.w
-    1, // llvm.mips.fsune.d
-    1, // llvm.mips.fsune.w
-    1, // llvm.mips.ftint.s.d
-    1, // llvm.mips.ftint.s.w
-    1, // llvm.mips.ftint.u.d
-    1, // llvm.mips.ftint.u.w
-    1, // llvm.mips.ftq.h
-    1, // llvm.mips.ftq.w
-    1, // llvm.mips.ftrunc.s.d
-    1, // llvm.mips.ftrunc.s.w
-    1, // llvm.mips.ftrunc.u.d
-    1, // llvm.mips.ftrunc.u.w
-    1, // llvm.mips.hadd.s.d
-    1, // llvm.mips.hadd.s.h
-    1, // llvm.mips.hadd.s.w
-    1, // llvm.mips.hadd.u.d
-    1, // llvm.mips.hadd.u.h
-    1, // llvm.mips.hadd.u.w
-    1, // llvm.mips.hsub.s.d
-    1, // llvm.mips.hsub.s.h
-    1, // llvm.mips.hsub.s.w
-    1, // llvm.mips.hsub.u.d
-    1, // llvm.mips.hsub.u.h
-    1, // llvm.mips.hsub.u.w
-    1, // llvm.mips.ilvev.b
-    1, // llvm.mips.ilvev.d
-    1, // llvm.mips.ilvev.h
-    1, // llvm.mips.ilvev.w
-    1, // llvm.mips.ilvl.b
-    1, // llvm.mips.ilvl.d
-    1, // llvm.mips.ilvl.h
-    1, // llvm.mips.ilvl.w
-    1, // llvm.mips.ilvod.b
-    1, // llvm.mips.ilvod.d
-    1, // llvm.mips.ilvod.h
-    1, // llvm.mips.ilvod.w
-    1, // llvm.mips.ilvr.b
-    1, // llvm.mips.ilvr.d
-    1, // llvm.mips.ilvr.h
-    1, // llvm.mips.ilvr.w
-    1, // llvm.mips.insert.b
-    1, // llvm.mips.insert.d
-    1, // llvm.mips.insert.h
-    1, // llvm.mips.insert.w
-    16, // llvm.mips.insv
-    1, // llvm.mips.insve.b
-    1, // llvm.mips.insve.d
-    1, // llvm.mips.insve.h
-    1, // llvm.mips.insve.w
-    2, // llvm.mips.lbux
-    2, // llvm.mips.ld.b
-    2, // llvm.mips.ld.d
-    2, // llvm.mips.ld.h
-    2, // llvm.mips.ld.w
-    1, // llvm.mips.ldi.b
-    1, // llvm.mips.ldi.d
-    1, // llvm.mips.ldi.h
-    1, // llvm.mips.ldi.w
-    2, // llvm.mips.lhx
-    1, // llvm.mips.lsa
-    2, // llvm.mips.lwx
-    1, // llvm.mips.madd
-    1, // llvm.mips.madd.q.h
-    1, // llvm.mips.madd.q.w
-    1, // llvm.mips.maddr.q.h
-    1, // llvm.mips.maddr.q.w
-    1, // llvm.mips.maddu
-    1, // llvm.mips.maddv.b
-    1, // llvm.mips.maddv.d
-    1, // llvm.mips.maddv.h
-    1, // llvm.mips.maddv.w
-    3, // llvm.mips.maq.s.w.phl
-    3, // llvm.mips.maq.s.w.phr
-    3, // llvm.mips.maq.sa.w.phl
-    3, // llvm.mips.maq.sa.w.phr
-    1, // llvm.mips.max.a.b
-    1, // llvm.mips.max.a.d
-    1, // llvm.mips.max.a.h
-    1, // llvm.mips.max.a.w
-    1, // llvm.mips.max.s.b
-    1, // llvm.mips.max.s.d
-    1, // llvm.mips.max.s.h
-    1, // llvm.mips.max.s.w
-    1, // llvm.mips.max.u.b
-    1, // llvm.mips.max.u.d
-    1, // llvm.mips.max.u.h
-    1, // llvm.mips.max.u.w
-    1, // llvm.mips.maxi.s.b
-    1, // llvm.mips.maxi.s.d
-    1, // llvm.mips.maxi.s.h
-    1, // llvm.mips.maxi.s.w
-    1, // llvm.mips.maxi.u.b
-    1, // llvm.mips.maxi.u.d
-    1, // llvm.mips.maxi.u.h
-    1, // llvm.mips.maxi.u.w
-    1, // llvm.mips.min.a.b
-    1, // llvm.mips.min.a.d
-    1, // llvm.mips.min.a.h
-    1, // llvm.mips.min.a.w
-    1, // llvm.mips.min.s.b
-    1, // llvm.mips.min.s.d
-    1, // llvm.mips.min.s.h
-    1, // llvm.mips.min.s.w
-    1, // llvm.mips.min.u.b
-    1, // llvm.mips.min.u.d
-    1, // llvm.mips.min.u.h
-    1, // llvm.mips.min.u.w
-    1, // llvm.mips.mini.s.b
-    1, // llvm.mips.mini.s.d
-    1, // llvm.mips.mini.s.h
-    1, // llvm.mips.mini.s.w
-    1, // llvm.mips.mini.u.b
-    1, // llvm.mips.mini.u.d
-    1, // llvm.mips.mini.u.h
-    1, // llvm.mips.mini.u.w
-    1, // llvm.mips.mod.s.b
-    1, // llvm.mips.mod.s.d
-    1, // llvm.mips.mod.s.h
-    1, // llvm.mips.mod.s.w
-    1, // llvm.mips.mod.u.b
-    1, // llvm.mips.mod.u.d
-    1, // llvm.mips.mod.u.h
-    1, // llvm.mips.mod.u.w
-    1, // llvm.mips.modsub
-    1, // llvm.mips.move.v
-    1, // llvm.mips.msub
-    1, // llvm.mips.msub.q.h
-    1, // llvm.mips.msub.q.w
-    1, // llvm.mips.msubr.q.h
-    1, // llvm.mips.msubr.q.w
-    1, // llvm.mips.msubu
-    1, // llvm.mips.msubv.b
-    1, // llvm.mips.msubv.d
-    1, // llvm.mips.msubv.h
-    1, // llvm.mips.msubv.w
-    3, // llvm.mips.mthlip
-    3, // llvm.mips.mul.ph
-    1, // llvm.mips.mul.q.h
-    1, // llvm.mips.mul.q.w
-    3, // llvm.mips.mul.s.ph
-    3, // llvm.mips.muleq.s.w.phl
-    3, // llvm.mips.muleq.s.w.phr
-    3, // llvm.mips.muleu.s.ph.qbl
-    3, // llvm.mips.muleu.s.ph.qbr
-    3, // llvm.mips.mulq.rs.ph
-    3, // llvm.mips.mulq.rs.w
-    3, // llvm.mips.mulq.s.ph
-    3, // llvm.mips.mulq.s.w
-    1, // llvm.mips.mulr.q.h
-    1, // llvm.mips.mulr.q.w
-    1, // llvm.mips.mulsa.w.ph
-    3, // llvm.mips.mulsaq.s.w.ph
-    1, // llvm.mips.mult
-    1, // llvm.mips.multu
-    1, // llvm.mips.mulv.b
-    1, // llvm.mips.mulv.d
-    1, // llvm.mips.mulv.h
-    1, // llvm.mips.mulv.w
-    1, // llvm.mips.nloc.b
-    1, // llvm.mips.nloc.d
-    1, // llvm.mips.nloc.h
-    1, // llvm.mips.nloc.w
-    1, // llvm.mips.nlzc.b
-    1, // llvm.mips.nlzc.d
-    1, // llvm.mips.nlzc.h
-    1, // llvm.mips.nlzc.w
-    1, // llvm.mips.nor.v
-    1, // llvm.mips.nori.b
-    1, // llvm.mips.or.v
-    1, // llvm.mips.ori.b
-    1, // llvm.mips.packrl.ph
-    1, // llvm.mips.pckev.b
-    1, // llvm.mips.pckev.d
-    1, // llvm.mips.pckev.h
-    1, // llvm.mips.pckev.w
-    1, // llvm.mips.pckod.b
-    1, // llvm.mips.pckod.d
-    1, // llvm.mips.pckod.h
-    1, // llvm.mips.pckod.w
-    1, // llvm.mips.pcnt.b
-    1, // llvm.mips.pcnt.d
-    1, // llvm.mips.pcnt.h
-    1, // llvm.mips.pcnt.w
-    16, // llvm.mips.pick.ph
-    16, // llvm.mips.pick.qb
-    1, // llvm.mips.preceq.w.phl
-    1, // llvm.mips.preceq.w.phr
-    1, // llvm.mips.precequ.ph.qbl
-    1, // llvm.mips.precequ.ph.qbla
-    1, // llvm.mips.precequ.ph.qbr
-    1, // llvm.mips.precequ.ph.qbra
-    1, // llvm.mips.preceu.ph.qbl
-    1, // llvm.mips.preceu.ph.qbla
-    1, // llvm.mips.preceu.ph.qbr
-    1, // llvm.mips.preceu.ph.qbra
-    3, // llvm.mips.precr.qb.ph
-    1, // llvm.mips.precr.sra.ph.w
-    1, // llvm.mips.precr.sra.r.ph.w
-    1, // llvm.mips.precrq.ph.w
-    1, // llvm.mips.precrq.qb.ph
-    3, // llvm.mips.precrq.rs.ph.w
-    3, // llvm.mips.precrqu.s.qb.ph
-    1, // llvm.mips.prepend
-    1, // llvm.mips.raddu.w.qb
-    16, // llvm.mips.rddsp
-    1, // llvm.mips.repl.ph
-    1, // llvm.mips.repl.qb
-    1, // llvm.mips.sat.s.b
-    1, // llvm.mips.sat.s.d
-    1, // llvm.mips.sat.s.h
-    1, // llvm.mips.sat.s.w
-    1, // llvm.mips.sat.u.b
-    1, // llvm.mips.sat.u.d
-    1, // llvm.mips.sat.u.h
-    1, // llvm.mips.sat.u.w
-    1, // llvm.mips.shf.b
-    1, // llvm.mips.shf.h
-    1, // llvm.mips.shf.w
-    1, // llvm.mips.shilo
-    3, // llvm.mips.shll.ph
-    3, // llvm.mips.shll.qb
-    3, // llvm.mips.shll.s.ph
-    3, // llvm.mips.shll.s.w
-    1, // llvm.mips.shra.ph
-    1, // llvm.mips.shra.qb
-    1, // llvm.mips.shra.r.ph
-    1, // llvm.mips.shra.r.qb
-    1, // llvm.mips.shra.r.w
-    1, // llvm.mips.shrl.ph
-    1, // llvm.mips.shrl.qb
-    1, // llvm.mips.sld.b
-    1, // llvm.mips.sld.d
-    1, // llvm.mips.sld.h
-    1, // llvm.mips.sld.w
-    1, // llvm.mips.sldi.b
-    1, // llvm.mips.sldi.d
-    1, // llvm.mips.sldi.h
-    1, // llvm.mips.sldi.w
-    1, // llvm.mips.sll.b
-    1, // llvm.mips.sll.d
-    1, // llvm.mips.sll.h
-    1, // llvm.mips.sll.w
-    1, // llvm.mips.slli.b
-    1, // llvm.mips.slli.d
-    1, // llvm.mips.slli.h
-    1, // llvm.mips.slli.w
-    1, // llvm.mips.splat.b
-    1, // llvm.mips.splat.d
-    1, // llvm.mips.splat.h
-    1, // llvm.mips.splat.w
-    1, // llvm.mips.splati.b
-    1, // llvm.mips.splati.d
-    1, // llvm.mips.splati.h
-    1, // llvm.mips.splati.w
-    1, // llvm.mips.sra.b
-    1, // llvm.mips.sra.d
-    1, // llvm.mips.sra.h
-    1, // llvm.mips.sra.w
-    1, // llvm.mips.srai.b
-    1, // llvm.mips.srai.d
-    1, // llvm.mips.srai.h
-    1, // llvm.mips.srai.w
-    1, // llvm.mips.srar.b
-    1, // llvm.mips.srar.d
-    1, // llvm.mips.srar.h
-    1, // llvm.mips.srar.w
-    1, // llvm.mips.srari.b
-    1, // llvm.mips.srari.d
-    1, // llvm.mips.srari.h
-    1, // llvm.mips.srari.w
-    1, // llvm.mips.srl.b
-    1, // llvm.mips.srl.d
-    1, // llvm.mips.srl.h
-    1, // llvm.mips.srl.w
-    1, // llvm.mips.srli.b
-    1, // llvm.mips.srli.d
-    1, // llvm.mips.srli.h
-    1, // llvm.mips.srli.w
-    1, // llvm.mips.srlr.b
-    1, // llvm.mips.srlr.d
-    1, // llvm.mips.srlr.h
-    1, // llvm.mips.srlr.w
-    1, // llvm.mips.srlri.b
-    1, // llvm.mips.srlri.d
-    1, // llvm.mips.srlri.h
-    1, // llvm.mips.srlri.w
-    21, // llvm.mips.st.b
-    21, // llvm.mips.st.d
-    21, // llvm.mips.st.h
-    21, // llvm.mips.st.w
-    1, // llvm.mips.subq.ph
-    1, // llvm.mips.subq.s.ph
-    3, // llvm.mips.subq.s.w
-    1, // llvm.mips.subqh.ph
-    1, // llvm.mips.subqh.r.ph
-    1, // llvm.mips.subqh.r.w
-    1, // llvm.mips.subqh.w
-    1, // llvm.mips.subs.s.b
-    1, // llvm.mips.subs.s.d
-    1, // llvm.mips.subs.s.h
-    1, // llvm.mips.subs.s.w
-    1, // llvm.mips.subs.u.b
-    1, // llvm.mips.subs.u.d
-    1, // llvm.mips.subs.u.h
-    1, // llvm.mips.subs.u.w
-    1, // llvm.mips.subsus.u.b
-    1, // llvm.mips.subsus.u.d
-    1, // llvm.mips.subsus.u.h
-    1, // llvm.mips.subsus.u.w
-    1, // llvm.mips.subsuu.s.b
-    1, // llvm.mips.subsuu.s.d
-    1, // llvm.mips.subsuu.s.h
-    1, // llvm.mips.subsuu.s.w
-    3, // llvm.mips.subu.ph
-    1, // llvm.mips.subu.qb
-    3, // llvm.mips.subu.s.ph
-    1, // llvm.mips.subu.s.qb
-    1, // llvm.mips.subuh.qb
-    1, // llvm.mips.subuh.r.qb
-    1, // llvm.mips.subv.b
-    1, // llvm.mips.subv.d
-    1, // llvm.mips.subv.h
-    1, // llvm.mips.subv.w
-    1, // llvm.mips.subvi.b
-    1, // llvm.mips.subvi.d
-    1, // llvm.mips.subvi.h
-    1, // llvm.mips.subvi.w
-    1, // llvm.mips.vshf.b
-    1, // llvm.mips.vshf.d
-    1, // llvm.mips.vshf.h
-    1, // llvm.mips.vshf.w
-    3, // llvm.mips.wrdsp
-    1, // llvm.mips.xor.v
-    1, // llvm.mips.xori.b
-    1, // llvm.nvvm.add.rm.d
-    1, // llvm.nvvm.add.rm.f
-    1, // llvm.nvvm.add.rm.ftz.f
-    1, // llvm.nvvm.add.rn.d
-    1, // llvm.nvvm.add.rn.f
-    1, // llvm.nvvm.add.rn.ftz.f
-    1, // llvm.nvvm.add.rp.d
-    1, // llvm.nvvm.add.rp.f
-    1, // llvm.nvvm.add.rp.ftz.f
-    1, // llvm.nvvm.add.rz.d
-    1, // llvm.nvvm.add.rz.f
-    1, // llvm.nvvm.add.rz.ftz.f
-    18, // llvm.nvvm.atomic.add.gen.f.cta
-    18, // llvm.nvvm.atomic.add.gen.f.sys
-    18, // llvm.nvvm.atomic.add.gen.i.cta
-    18, // llvm.nvvm.atomic.add.gen.i.sys
-    18, // llvm.nvvm.atomic.and.gen.i.cta
-    18, // llvm.nvvm.atomic.and.gen.i.sys
-    18, // llvm.nvvm.atomic.cas.gen.i.cta
-    18, // llvm.nvvm.atomic.cas.gen.i.sys
-    18, // llvm.nvvm.atomic.dec.gen.i.cta
-    18, // llvm.nvvm.atomic.dec.gen.i.sys
-    18, // llvm.nvvm.atomic.exch.gen.i.cta
-    18, // llvm.nvvm.atomic.exch.gen.i.sys
-    18, // llvm.nvvm.atomic.inc.gen.i.cta
-    18, // llvm.nvvm.atomic.inc.gen.i.sys
-    18, // llvm.nvvm.atomic.load.add.f32
-    18, // llvm.nvvm.atomic.load.add.f64
-    18, // llvm.nvvm.atomic.load.dec.32
-    18, // llvm.nvvm.atomic.load.inc.32
-    18, // llvm.nvvm.atomic.max.gen.i.cta
-    18, // llvm.nvvm.atomic.max.gen.i.sys
-    18, // llvm.nvvm.atomic.min.gen.i.cta
-    18, // llvm.nvvm.atomic.min.gen.i.sys
-    18, // llvm.nvvm.atomic.or.gen.i.cta
-    18, // llvm.nvvm.atomic.or.gen.i.sys
-    18, // llvm.nvvm.atomic.xor.gen.i.cta
-    18, // llvm.nvvm.atomic.xor.gen.i.sys
-    33, // llvm.nvvm.bar.sync
-    33, // llvm.nvvm.bar.warp.sync
-    33, // llvm.nvvm.barrier
-    33, // llvm.nvvm.barrier.n
-    33, // llvm.nvvm.barrier.sync
-    33, // llvm.nvvm.barrier.sync.cnt
-    33, // llvm.nvvm.barrier0
-    33, // llvm.nvvm.barrier0.and
-    33, // llvm.nvvm.barrier0.or
-    33, // llvm.nvvm.barrier0.popc
-    1, // llvm.nvvm.bitcast.d2ll
-    1, // llvm.nvvm.bitcast.f2i
-    1, // llvm.nvvm.bitcast.i2f
-    1, // llvm.nvvm.bitcast.ll2d
-    1, // llvm.nvvm.ceil.d
-    1, // llvm.nvvm.ceil.f
-    1, // llvm.nvvm.ceil.ftz.f
-    3, // llvm.nvvm.compiler.error
-    3, // llvm.nvvm.compiler.warn
-    1, // llvm.nvvm.cos.approx.f
-    1, // llvm.nvvm.cos.approx.ftz.f
-    1, // llvm.nvvm.d2f.rm
-    1, // llvm.nvvm.d2f.rm.ftz
-    1, // llvm.nvvm.d2f.rn
-    1, // llvm.nvvm.d2f.rn.ftz
-    1, // llvm.nvvm.d2f.rp
-    1, // llvm.nvvm.d2f.rp.ftz
-    1, // llvm.nvvm.d2f.rz
-    1, // llvm.nvvm.d2f.rz.ftz
-    1, // llvm.nvvm.d2i.hi
-    1, // llvm.nvvm.d2i.lo
-    1, // llvm.nvvm.d2i.rm
-    1, // llvm.nvvm.d2i.rn
-    1, // llvm.nvvm.d2i.rp
-    1, // llvm.nvvm.d2i.rz
-    1, // llvm.nvvm.d2ll.rm
-    1, // llvm.nvvm.d2ll.rn
-    1, // llvm.nvvm.d2ll.rp
-    1, // llvm.nvvm.d2ll.rz
-    1, // llvm.nvvm.d2ui.rm
-    1, // llvm.nvvm.d2ui.rn
-    1, // llvm.nvvm.d2ui.rp
-    1, // llvm.nvvm.d2ui.rz
-    1, // llvm.nvvm.d2ull.rm
-    1, // llvm.nvvm.d2ull.rn
-    1, // llvm.nvvm.d2ull.rp
-    1, // llvm.nvvm.d2ull.rz
-    1, // llvm.nvvm.div.approx.f
-    1, // llvm.nvvm.div.approx.ftz.f
-    1, // llvm.nvvm.div.rm.d
-    1, // llvm.nvvm.div.rm.f
-    1, // llvm.nvvm.div.rm.ftz.f
-    1, // llvm.nvvm.div.rn.d
-    1, // llvm.nvvm.div.rn.f
-    1, // llvm.nvvm.div.rn.ftz.f
-    1, // llvm.nvvm.div.rp.d
-    1, // llvm.nvvm.div.rp.f
-    1, // llvm.nvvm.div.rp.ftz.f
-    1, // llvm.nvvm.div.rz.d
-    1, // llvm.nvvm.div.rz.f
-    1, // llvm.nvvm.div.rz.ftz.f
-    1, // llvm.nvvm.ex2.approx.d
-    1, // llvm.nvvm.ex2.approx.f
-    1, // llvm.nvvm.ex2.approx.ftz.f
-    1, // llvm.nvvm.f2h.rn
-    1, // llvm.nvvm.f2h.rn.ftz
-    1, // llvm.nvvm.f2i.rm
-    1, // llvm.nvvm.f2i.rm.ftz
-    1, // llvm.nvvm.f2i.rn
-    1, // llvm.nvvm.f2i.rn.ftz
-    1, // llvm.nvvm.f2i.rp
-    1, // llvm.nvvm.f2i.rp.ftz
-    1, // llvm.nvvm.f2i.rz
-    1, // llvm.nvvm.f2i.rz.ftz
-    1, // llvm.nvvm.f2ll.rm
-    1, // llvm.nvvm.f2ll.rm.ftz
-    1, // llvm.nvvm.f2ll.rn
-    1, // llvm.nvvm.f2ll.rn.ftz
-    1, // llvm.nvvm.f2ll.rp
-    1, // llvm.nvvm.f2ll.rp.ftz
-    1, // llvm.nvvm.f2ll.rz
-    1, // llvm.nvvm.f2ll.rz.ftz
-    1, // llvm.nvvm.f2ui.rm
-    1, // llvm.nvvm.f2ui.rm.ftz
-    1, // llvm.nvvm.f2ui.rn
-    1, // llvm.nvvm.f2ui.rn.ftz
-    1, // llvm.nvvm.f2ui.rp
-    1, // llvm.nvvm.f2ui.rp.ftz
-    1, // llvm.nvvm.f2ui.rz
-    1, // llvm.nvvm.f2ui.rz.ftz
-    1, // llvm.nvvm.f2ull.rm
-    1, // llvm.nvvm.f2ull.rm.ftz
-    1, // llvm.nvvm.f2ull.rn
-    1, // llvm.nvvm.f2ull.rn.ftz
-    1, // llvm.nvvm.f2ull.rp
-    1, // llvm.nvvm.f2ull.rp.ftz
-    1, // llvm.nvvm.f2ull.rz
-    1, // llvm.nvvm.f2ull.rz.ftz
-    1, // llvm.nvvm.fabs.d
-    1, // llvm.nvvm.fabs.f
-    1, // llvm.nvvm.fabs.ftz.f
-    1, // llvm.nvvm.floor.d
-    1, // llvm.nvvm.floor.f
-    1, // llvm.nvvm.floor.ftz.f
-    1, // llvm.nvvm.fma.rm.d
-    1, // llvm.nvvm.fma.rm.f
-    1, // llvm.nvvm.fma.rm.ftz.f
-    1, // llvm.nvvm.fma.rn.d
-    1, // llvm.nvvm.fma.rn.f
-    1, // llvm.nvvm.fma.rn.ftz.f
-    1, // llvm.nvvm.fma.rp.d
-    1, // llvm.nvvm.fma.rp.f
-    1, // llvm.nvvm.fma.rp.ftz.f
-    1, // llvm.nvvm.fma.rz.d
-    1, // llvm.nvvm.fma.rz.f
-    1, // llvm.nvvm.fma.rz.ftz.f
-    1, // llvm.nvvm.fmax.d
-    1, // llvm.nvvm.fmax.f
-    1, // llvm.nvvm.fmax.ftz.f
-    1, // llvm.nvvm.fmin.d
-    1, // llvm.nvvm.fmin.f
-    1, // llvm.nvvm.fmin.ftz.f
-    1, // llvm.nvvm.fns
-    1, // llvm.nvvm.i2d.rm
-    1, // llvm.nvvm.i2d.rn
-    1, // llvm.nvvm.i2d.rp
-    1, // llvm.nvvm.i2d.rz
-    1, // llvm.nvvm.i2f.rm
-    1, // llvm.nvvm.i2f.rn
-    1, // llvm.nvvm.i2f.rp
-    1, // llvm.nvvm.i2f.rz
-    1, // llvm.nvvm.isspacep.const
-    1, // llvm.nvvm.isspacep.global
-    1, // llvm.nvvm.isspacep.local
-    1, // llvm.nvvm.isspacep.shared
-    1, // llvm.nvvm.istypep.sampler
-    1, // llvm.nvvm.istypep.surface
-    1, // llvm.nvvm.istypep.texture
-    37, // llvm.nvvm.ldg.global.f
-    37, // llvm.nvvm.ldg.global.i
-    37, // llvm.nvvm.ldg.global.p
-    37, // llvm.nvvm.ldu.global.f
-    37, // llvm.nvvm.ldu.global.i
-    37, // llvm.nvvm.ldu.global.p
-    1, // llvm.nvvm.lg2.approx.d
-    1, // llvm.nvvm.lg2.approx.f
-    1, // llvm.nvvm.lg2.approx.ftz.f
-    1, // llvm.nvvm.ll2d.rm
-    1, // llvm.nvvm.ll2d.rn
-    1, // llvm.nvvm.ll2d.rp
-    1, // llvm.nvvm.ll2d.rz
-    1, // llvm.nvvm.ll2f.rm
-    1, // llvm.nvvm.ll2f.rn
-    1, // llvm.nvvm.ll2f.rp
-    1, // llvm.nvvm.ll2f.rz
-    1, // llvm.nvvm.lohi.i2d
-    38, // llvm.nvvm.match.all.sync.i32p
-    38, // llvm.nvvm.match.all.sync.i64p
-    38, // llvm.nvvm.match.any.sync.i32
-    38, // llvm.nvvm.match.any.sync.i64
-    3, // llvm.nvvm.membar.cta
-    3, // llvm.nvvm.membar.gl
-    3, // llvm.nvvm.membar.sys
-    1, // llvm.nvvm.move.double
-    1, // llvm.nvvm.move.float
-    1, // llvm.nvvm.move.i16
-    1, // llvm.nvvm.move.i32
-    1, // llvm.nvvm.move.i64
-    12, // llvm.nvvm.move.ptr
-    1, // llvm.nvvm.mul.rm.d
-    1, // llvm.nvvm.mul.rm.f
-    1, // llvm.nvvm.mul.rm.ftz.f
-    1, // llvm.nvvm.mul.rn.d
-    1, // llvm.nvvm.mul.rn.f
-    1, // llvm.nvvm.mul.rn.ftz.f
-    1, // llvm.nvvm.mul.rp.d
-    1, // llvm.nvvm.mul.rp.f
-    1, // llvm.nvvm.mul.rp.ftz.f
-    1, // llvm.nvvm.mul.rz.d
-    1, // llvm.nvvm.mul.rz.f
-    1, // llvm.nvvm.mul.rz.ftz.f
-    1, // llvm.nvvm.mul24.i
-    1, // llvm.nvvm.mul24.ui
-    1, // llvm.nvvm.mulhi.i
-    1, // llvm.nvvm.mulhi.ll
-    1, // llvm.nvvm.mulhi.ui
-    1, // llvm.nvvm.mulhi.ull
-    1, // llvm.nvvm.prmt
-    1, // llvm.nvvm.ptr.constant.to.gen
-    1, // llvm.nvvm.ptr.gen.to.constant
-    1, // llvm.nvvm.ptr.gen.to.global
-    1, // llvm.nvvm.ptr.gen.to.local
-    1, // llvm.nvvm.ptr.gen.to.param
-    1, // llvm.nvvm.ptr.gen.to.shared
-    1, // llvm.nvvm.ptr.global.to.gen
-    1, // llvm.nvvm.ptr.local.to.gen
-    1, // llvm.nvvm.ptr.shared.to.gen
-    1, // llvm.nvvm.rcp.approx.ftz.d
-    1, // llvm.nvvm.rcp.rm.d
-    1, // llvm.nvvm.rcp.rm.f
-    1, // llvm.nvvm.rcp.rm.ftz.f
-    1, // llvm.nvvm.rcp.rn.d
-    1, // llvm.nvvm.rcp.rn.f
-    1, // llvm.nvvm.rcp.rn.ftz.f
-    1, // llvm.nvvm.rcp.rp.d
-    1, // llvm.nvvm.rcp.rp.f
-    1, // llvm.nvvm.rcp.rp.ftz.f
-    1, // llvm.nvvm.rcp.rz.d
-    1, // llvm.nvvm.rcp.rz.f
-    1, // llvm.nvvm.rcp.rz.ftz.f
-    1, // llvm.nvvm.read.ptx.sreg.clock
-    1, // llvm.nvvm.read.ptx.sreg.clock64
-    1, // llvm.nvvm.read.ptx.sreg.ctaid.w
-    1, // llvm.nvvm.read.ptx.sreg.ctaid.x
-    1, // llvm.nvvm.read.ptx.sreg.ctaid.y
-    1, // llvm.nvvm.read.ptx.sreg.ctaid.z
-    1, // llvm.nvvm.read.ptx.sreg.envreg0
-    1, // llvm.nvvm.read.ptx.sreg.envreg1
-    1, // llvm.nvvm.read.ptx.sreg.envreg10
-    1, // llvm.nvvm.read.ptx.sreg.envreg11
-    1, // llvm.nvvm.read.ptx.sreg.envreg12
-    1, // llvm.nvvm.read.ptx.sreg.envreg13
-    1, // llvm.nvvm.read.ptx.sreg.envreg14
-    1, // llvm.nvvm.read.ptx.sreg.envreg15
-    1, // llvm.nvvm.read.ptx.sreg.envreg16
-    1, // llvm.nvvm.read.ptx.sreg.envreg17
-    1, // llvm.nvvm.read.ptx.sreg.envreg18
-    1, // llvm.nvvm.read.ptx.sreg.envreg19
-    1, // llvm.nvvm.read.ptx.sreg.envreg2
-    1, // llvm.nvvm.read.ptx.sreg.envreg20
-    1, // llvm.nvvm.read.ptx.sreg.envreg21
-    1, // llvm.nvvm.read.ptx.sreg.envreg22
-    1, // llvm.nvvm.read.ptx.sreg.envreg23
-    1, // llvm.nvvm.read.ptx.sreg.envreg24
-    1, // llvm.nvvm.read.ptx.sreg.envreg25
-    1, // llvm.nvvm.read.ptx.sreg.envreg26
-    1, // llvm.nvvm.read.ptx.sreg.envreg27
-    1, // llvm.nvvm.read.ptx.sreg.envreg28
-    1, // llvm.nvvm.read.ptx.sreg.envreg29
-    1, // llvm.nvvm.read.ptx.sreg.envreg3
-    1, // llvm.nvvm.read.ptx.sreg.envreg30
-    1, // llvm.nvvm.read.ptx.sreg.envreg31
-    1, // llvm.nvvm.read.ptx.sreg.envreg4
-    1, // llvm.nvvm.read.ptx.sreg.envreg5
-    1, // llvm.nvvm.read.ptx.sreg.envreg6
-    1, // llvm.nvvm.read.ptx.sreg.envreg7
-    1, // llvm.nvvm.read.ptx.sreg.envreg8
-    1, // llvm.nvvm.read.ptx.sreg.envreg9
-    1, // llvm.nvvm.read.ptx.sreg.gridid
-    1, // llvm.nvvm.read.ptx.sreg.laneid
-    1, // llvm.nvvm.read.ptx.sreg.lanemask.eq
-    1, // llvm.nvvm.read.ptx.sreg.lanemask.ge
-    1, // llvm.nvvm.read.ptx.sreg.lanemask.gt
-    1, // llvm.nvvm.read.ptx.sreg.lanemask.le
-    1, // llvm.nvvm.read.ptx.sreg.lanemask.lt
-    1, // llvm.nvvm.read.ptx.sreg.nctaid.w
-    1, // llvm.nvvm.read.ptx.sreg.nctaid.x
-    1, // llvm.nvvm.read.ptx.sreg.nctaid.y
-    1, // llvm.nvvm.read.ptx.sreg.nctaid.z
-    1, // llvm.nvvm.read.ptx.sreg.nsmid
-    1, // llvm.nvvm.read.ptx.sreg.ntid.w
-    1, // llvm.nvvm.read.ptx.sreg.ntid.x
-    1, // llvm.nvvm.read.ptx.sreg.ntid.y
-    1, // llvm.nvvm.read.ptx.sreg.ntid.z
-    1, // llvm.nvvm.read.ptx.sreg.nwarpid
-    1, // llvm.nvvm.read.ptx.sreg.pm0
-    1, // llvm.nvvm.read.ptx.sreg.pm1
-    1, // llvm.nvvm.read.ptx.sreg.pm2
-    1, // llvm.nvvm.read.ptx.sreg.pm3
-    1, // llvm.nvvm.read.ptx.sreg.smid
-    1, // llvm.nvvm.read.ptx.sreg.tid.w
-    1, // llvm.nvvm.read.ptx.sreg.tid.x
-    1, // llvm.nvvm.read.ptx.sreg.tid.y
-    1, // llvm.nvvm.read.ptx.sreg.tid.z
-    1, // llvm.nvvm.read.ptx.sreg.warpid
-    1, // llvm.nvvm.read.ptx.sreg.warpsize
-    1, // llvm.nvvm.reflect
-    1, // llvm.nvvm.rotate.b32
-    1, // llvm.nvvm.rotate.b64
-    1, // llvm.nvvm.rotate.right.b64
-    1, // llvm.nvvm.round.d
-    1, // llvm.nvvm.round.f
-    1, // llvm.nvvm.round.ftz.f
-    1, // llvm.nvvm.rsqrt.approx.d
-    1, // llvm.nvvm.rsqrt.approx.f
-    1, // llvm.nvvm.rsqrt.approx.ftz.f
-    1, // llvm.nvvm.sad.i
-    1, // llvm.nvvm.sad.ui
-    1, // llvm.nvvm.saturate.d
-    1, // llvm.nvvm.saturate.f
-    1, // llvm.nvvm.saturate.ftz.f
-    38, // llvm.nvvm.shfl.bfly.f32
-    38, // llvm.nvvm.shfl.bfly.i32
-    38, // llvm.nvvm.shfl.down.f32
-    38, // llvm.nvvm.shfl.down.i32
-    38, // llvm.nvvm.shfl.idx.f32
-    38, // llvm.nvvm.shfl.idx.i32
-    38, // llvm.nvvm.shfl.sync.bfly.f32
-    38, // llvm.nvvm.shfl.sync.bfly.i32
-    38, // llvm.nvvm.shfl.sync.down.f32
-    38, // llvm.nvvm.shfl.sync.down.i32
-    38, // llvm.nvvm.shfl.sync.idx.f32
-    38, // llvm.nvvm.shfl.sync.idx.i32
-    38, // llvm.nvvm.shfl.sync.up.f32
-    38, // llvm.nvvm.shfl.sync.up.i32
-    38, // llvm.nvvm.shfl.up.f32
-    38, // llvm.nvvm.shfl.up.i32
-    1, // llvm.nvvm.sin.approx.f
-    1, // llvm.nvvm.sin.approx.ftz.f
-    1, // llvm.nvvm.sqrt.approx.f
-    1, // llvm.nvvm.sqrt.approx.ftz.f
-    1, // llvm.nvvm.sqrt.f
-    1, // llvm.nvvm.sqrt.rm.d
-    1, // llvm.nvvm.sqrt.rm.f
-    1, // llvm.nvvm.sqrt.rm.ftz.f
-    1, // llvm.nvvm.sqrt.rn.d
-    1, // llvm.nvvm.sqrt.rn.f
-    1, // llvm.nvvm.sqrt.rn.ftz.f
-    1, // llvm.nvvm.sqrt.rp.d
-    1, // llvm.nvvm.sqrt.rp.f
-    1, // llvm.nvvm.sqrt.rp.ftz.f
-    1, // llvm.nvvm.sqrt.rz.d
-    1, // llvm.nvvm.sqrt.rz.f
-    1, // llvm.nvvm.sqrt.rz.ftz.f
-    3, // llvm.nvvm.suld.1d.array.i16.clamp
-    3, // llvm.nvvm.suld.1d.array.i16.trap
-    3, // llvm.nvvm.suld.1d.array.i16.zero
-    3, // llvm.nvvm.suld.1d.array.i32.clamp
-    3, // llvm.nvvm.suld.1d.array.i32.trap
-    3, // llvm.nvvm.suld.1d.array.i32.zero
-    3, // llvm.nvvm.suld.1d.array.i64.clamp
-    3, // llvm.nvvm.suld.1d.array.i64.trap
-    3, // llvm.nvvm.suld.1d.array.i64.zero
-    3, // llvm.nvvm.suld.1d.array.i8.clamp
-    3, // llvm.nvvm.suld.1d.array.i8.trap
-    3, // llvm.nvvm.suld.1d.array.i8.zero
-    3, // llvm.nvvm.suld.1d.array.v2i16.clamp
-    3, // llvm.nvvm.suld.1d.array.v2i16.trap
-    3, // llvm.nvvm.suld.1d.array.v2i16.zero
-    3, // llvm.nvvm.suld.1d.array.v2i32.clamp
-    3, // llvm.nvvm.suld.1d.array.v2i32.trap
-    3, // llvm.nvvm.suld.1d.array.v2i32.zero
-    3, // llvm.nvvm.suld.1d.array.v2i64.clamp
-    3, // llvm.nvvm.suld.1d.array.v2i64.trap
-    3, // llvm.nvvm.suld.1d.array.v2i64.zero
-    3, // llvm.nvvm.suld.1d.array.v2i8.clamp
-    3, // llvm.nvvm.suld.1d.array.v2i8.trap
-    3, // llvm.nvvm.suld.1d.array.v2i8.zero
-    3, // llvm.nvvm.suld.1d.array.v4i16.clamp
-    3, // llvm.nvvm.suld.1d.array.v4i16.trap
-    3, // llvm.nvvm.suld.1d.array.v4i16.zero
-    3, // llvm.nvvm.suld.1d.array.v4i32.clamp
-    3, // llvm.nvvm.suld.1d.array.v4i32.trap
-    3, // llvm.nvvm.suld.1d.array.v4i32.zero
-    3, // llvm.nvvm.suld.1d.array.v4i8.clamp
-    3, // llvm.nvvm.suld.1d.array.v4i8.trap
-    3, // llvm.nvvm.suld.1d.array.v4i8.zero
-    3, // llvm.nvvm.suld.1d.i16.clamp
-    3, // llvm.nvvm.suld.1d.i16.trap
-    3, // llvm.nvvm.suld.1d.i16.zero
-    3, // llvm.nvvm.suld.1d.i32.clamp
-    3, // llvm.nvvm.suld.1d.i32.trap
-    3, // llvm.nvvm.suld.1d.i32.zero
-    3, // llvm.nvvm.suld.1d.i64.clamp
-    3, // llvm.nvvm.suld.1d.i64.trap
-    3, // llvm.nvvm.suld.1d.i64.zero
-    3, // llvm.nvvm.suld.1d.i8.clamp
-    3, // llvm.nvvm.suld.1d.i8.trap
-    3, // llvm.nvvm.suld.1d.i8.zero
-    3, // llvm.nvvm.suld.1d.v2i16.clamp
-    3, // llvm.nvvm.suld.1d.v2i16.trap
-    3, // llvm.nvvm.suld.1d.v2i16.zero
-    3, // llvm.nvvm.suld.1d.v2i32.clamp
-    3, // llvm.nvvm.suld.1d.v2i32.trap
-    3, // llvm.nvvm.suld.1d.v2i32.zero
-    3, // llvm.nvvm.suld.1d.v2i64.clamp
-    3, // llvm.nvvm.suld.1d.v2i64.trap
-    3, // llvm.nvvm.suld.1d.v2i64.zero
-    3, // llvm.nvvm.suld.1d.v2i8.clamp
-    3, // llvm.nvvm.suld.1d.v2i8.trap
-    3, // llvm.nvvm.suld.1d.v2i8.zero
-    3, // llvm.nvvm.suld.1d.v4i16.clamp
-    3, // llvm.nvvm.suld.1d.v4i16.trap
-    3, // llvm.nvvm.suld.1d.v4i16.zero
-    3, // llvm.nvvm.suld.1d.v4i32.clamp
-    3, // llvm.nvvm.suld.1d.v4i32.trap
-    3, // llvm.nvvm.suld.1d.v4i32.zero
-    3, // llvm.nvvm.suld.1d.v4i8.clamp
-    3, // llvm.nvvm.suld.1d.v4i8.trap
-    3, // llvm.nvvm.suld.1d.v4i8.zero
-    3, // llvm.nvvm.suld.2d.array.i16.clamp
-    3, // llvm.nvvm.suld.2d.array.i16.trap
-    3, // llvm.nvvm.suld.2d.array.i16.zero
-    3, // llvm.nvvm.suld.2d.array.i32.clamp
-    3, // llvm.nvvm.suld.2d.array.i32.trap
-    3, // llvm.nvvm.suld.2d.array.i32.zero
-    3, // llvm.nvvm.suld.2d.array.i64.clamp
-    3, // llvm.nvvm.suld.2d.array.i64.trap
-    3, // llvm.nvvm.suld.2d.array.i64.zero
-    3, // llvm.nvvm.suld.2d.array.i8.clamp
-    3, // llvm.nvvm.suld.2d.array.i8.trap
-    3, // llvm.nvvm.suld.2d.array.i8.zero
-    3, // llvm.nvvm.suld.2d.array.v2i16.clamp
-    3, // llvm.nvvm.suld.2d.array.v2i16.trap
-    3, // llvm.nvvm.suld.2d.array.v2i16.zero
-    3, // llvm.nvvm.suld.2d.array.v2i32.clamp
-    3, // llvm.nvvm.suld.2d.array.v2i32.trap
-    3, // llvm.nvvm.suld.2d.array.v2i32.zero
-    3, // llvm.nvvm.suld.2d.array.v2i64.clamp
-    3, // llvm.nvvm.suld.2d.array.v2i64.trap
-    3, // llvm.nvvm.suld.2d.array.v2i64.zero
-    3, // llvm.nvvm.suld.2d.array.v2i8.clamp
-    3, // llvm.nvvm.suld.2d.array.v2i8.trap
-    3, // llvm.nvvm.suld.2d.array.v2i8.zero
-    3, // llvm.nvvm.suld.2d.array.v4i16.clamp
-    3, // llvm.nvvm.suld.2d.array.v4i16.trap
-    3, // llvm.nvvm.suld.2d.array.v4i16.zero
-    3, // llvm.nvvm.suld.2d.array.v4i32.clamp
-    3, // llvm.nvvm.suld.2d.array.v4i32.trap
-    3, // llvm.nvvm.suld.2d.array.v4i32.zero
-    3, // llvm.nvvm.suld.2d.array.v4i8.clamp
-    3, // llvm.nvvm.suld.2d.array.v4i8.trap
-    3, // llvm.nvvm.suld.2d.array.v4i8.zero
-    3, // llvm.nvvm.suld.2d.i16.clamp
-    3, // llvm.nvvm.suld.2d.i16.trap
-    3, // llvm.nvvm.suld.2d.i16.zero
-    3, // llvm.nvvm.suld.2d.i32.clamp
-    3, // llvm.nvvm.suld.2d.i32.trap
-    3, // llvm.nvvm.suld.2d.i32.zero
-    3, // llvm.nvvm.suld.2d.i64.clamp
-    3, // llvm.nvvm.suld.2d.i64.trap
-    3, // llvm.nvvm.suld.2d.i64.zero
-    3, // llvm.nvvm.suld.2d.i8.clamp
-    3, // llvm.nvvm.suld.2d.i8.trap
-    3, // llvm.nvvm.suld.2d.i8.zero
-    3, // llvm.nvvm.suld.2d.v2i16.clamp
-    3, // llvm.nvvm.suld.2d.v2i16.trap
-    3, // llvm.nvvm.suld.2d.v2i16.zero
-    3, // llvm.nvvm.suld.2d.v2i32.clamp
-    3, // llvm.nvvm.suld.2d.v2i32.trap
-    3, // llvm.nvvm.suld.2d.v2i32.zero
-    3, // llvm.nvvm.suld.2d.v2i64.clamp
-    3, // llvm.nvvm.suld.2d.v2i64.trap
-    3, // llvm.nvvm.suld.2d.v2i64.zero
-    3, // llvm.nvvm.suld.2d.v2i8.clamp
-    3, // llvm.nvvm.suld.2d.v2i8.trap
-    3, // llvm.nvvm.suld.2d.v2i8.zero
-    3, // llvm.nvvm.suld.2d.v4i16.clamp
-    3, // llvm.nvvm.suld.2d.v4i16.trap
-    3, // llvm.nvvm.suld.2d.v4i16.zero
-    3, // llvm.nvvm.suld.2d.v4i32.clamp
-    3, // llvm.nvvm.suld.2d.v4i32.trap
-    3, // llvm.nvvm.suld.2d.v4i32.zero
-    3, // llvm.nvvm.suld.2d.v4i8.clamp
-    3, // llvm.nvvm.suld.2d.v4i8.trap
-    3, // llvm.nvvm.suld.2d.v4i8.zero
-    3, // llvm.nvvm.suld.3d.i16.clamp
-    3, // llvm.nvvm.suld.3d.i16.trap
-    3, // llvm.nvvm.suld.3d.i16.zero
-    3, // llvm.nvvm.suld.3d.i32.clamp
-    3, // llvm.nvvm.suld.3d.i32.trap
-    3, // llvm.nvvm.suld.3d.i32.zero
-    3, // llvm.nvvm.suld.3d.i64.clamp
-    3, // llvm.nvvm.suld.3d.i64.trap
-    3, // llvm.nvvm.suld.3d.i64.zero
-    3, // llvm.nvvm.suld.3d.i8.clamp
-    3, // llvm.nvvm.suld.3d.i8.trap
-    3, // llvm.nvvm.suld.3d.i8.zero
-    3, // llvm.nvvm.suld.3d.v2i16.clamp
-    3, // llvm.nvvm.suld.3d.v2i16.trap
-    3, // llvm.nvvm.suld.3d.v2i16.zero
-    3, // llvm.nvvm.suld.3d.v2i32.clamp
-    3, // llvm.nvvm.suld.3d.v2i32.trap
-    3, // llvm.nvvm.suld.3d.v2i32.zero
-    3, // llvm.nvvm.suld.3d.v2i64.clamp
-    3, // llvm.nvvm.suld.3d.v2i64.trap
-    3, // llvm.nvvm.suld.3d.v2i64.zero
-    3, // llvm.nvvm.suld.3d.v2i8.clamp
-    3, // llvm.nvvm.suld.3d.v2i8.trap
-    3, // llvm.nvvm.suld.3d.v2i8.zero
-    3, // llvm.nvvm.suld.3d.v4i16.clamp
-    3, // llvm.nvvm.suld.3d.v4i16.trap
-    3, // llvm.nvvm.suld.3d.v4i16.zero
-    3, // llvm.nvvm.suld.3d.v4i32.clamp
-    3, // llvm.nvvm.suld.3d.v4i32.trap
-    3, // llvm.nvvm.suld.3d.v4i32.zero
-    3, // llvm.nvvm.suld.3d.v4i8.clamp
-    3, // llvm.nvvm.suld.3d.v4i8.trap
-    3, // llvm.nvvm.suld.3d.v4i8.zero
-    1, // llvm.nvvm.suq.array.size
-    1, // llvm.nvvm.suq.channel.data.type
-    1, // llvm.nvvm.suq.channel.order
-    1, // llvm.nvvm.suq.depth
-    1, // llvm.nvvm.suq.height
-    1, // llvm.nvvm.suq.width
-    3, // llvm.nvvm.sust.b.1d.array.i16.clamp
-    3, // llvm.nvvm.sust.b.1d.array.i16.trap
-    3, // llvm.nvvm.sust.b.1d.array.i16.zero
-    3, // llvm.nvvm.sust.b.1d.array.i32.clamp
-    3, // llvm.nvvm.sust.b.1d.array.i32.trap
-    3, // llvm.nvvm.sust.b.1d.array.i32.zero
-    3, // llvm.nvvm.sust.b.1d.array.i64.clamp
-    3, // llvm.nvvm.sust.b.1d.array.i64.trap
-    3, // llvm.nvvm.sust.b.1d.array.i64.zero
-    3, // llvm.nvvm.sust.b.1d.array.i8.clamp
-    3, // llvm.nvvm.sust.b.1d.array.i8.trap
-    3, // llvm.nvvm.sust.b.1d.array.i8.zero
-    3, // llvm.nvvm.sust.b.1d.array.v2i16.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v2i16.trap
-    3, // llvm.nvvm.sust.b.1d.array.v2i16.zero
-    3, // llvm.nvvm.sust.b.1d.array.v2i32.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v2i32.trap
-    3, // llvm.nvvm.sust.b.1d.array.v2i32.zero
-    3, // llvm.nvvm.sust.b.1d.array.v2i64.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v2i64.trap
-    3, // llvm.nvvm.sust.b.1d.array.v2i64.zero
-    3, // llvm.nvvm.sust.b.1d.array.v2i8.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v2i8.trap
-    3, // llvm.nvvm.sust.b.1d.array.v2i8.zero
-    3, // llvm.nvvm.sust.b.1d.array.v4i16.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v4i16.trap
-    3, // llvm.nvvm.sust.b.1d.array.v4i16.zero
-    3, // llvm.nvvm.sust.b.1d.array.v4i32.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v4i32.trap
-    3, // llvm.nvvm.sust.b.1d.array.v4i32.zero
-    3, // llvm.nvvm.sust.b.1d.array.v4i8.clamp
-    3, // llvm.nvvm.sust.b.1d.array.v4i8.trap
-    3, // llvm.nvvm.sust.b.1d.array.v4i8.zero
-    3, // llvm.nvvm.sust.b.1d.i16.clamp
-    3, // llvm.nvvm.sust.b.1d.i16.trap
-    3, // llvm.nvvm.sust.b.1d.i16.zero
-    3, // llvm.nvvm.sust.b.1d.i32.clamp
-    3, // llvm.nvvm.sust.b.1d.i32.trap
-    3, // llvm.nvvm.sust.b.1d.i32.zero
-    3, // llvm.nvvm.sust.b.1d.i64.clamp
-    3, // llvm.nvvm.sust.b.1d.i64.trap
-    3, // llvm.nvvm.sust.b.1d.i64.zero
-    3, // llvm.nvvm.sust.b.1d.i8.clamp
-    3, // llvm.nvvm.sust.b.1d.i8.trap
-    3, // llvm.nvvm.sust.b.1d.i8.zero
-    3, // llvm.nvvm.sust.b.1d.v2i16.clamp
-    3, // llvm.nvvm.sust.b.1d.v2i16.trap
-    3, // llvm.nvvm.sust.b.1d.v2i16.zero
-    3, // llvm.nvvm.sust.b.1d.v2i32.clamp
-    3, // llvm.nvvm.sust.b.1d.v2i32.trap
-    3, // llvm.nvvm.sust.b.1d.v2i32.zero
-    3, // llvm.nvvm.sust.b.1d.v2i64.clamp
-    3, // llvm.nvvm.sust.b.1d.v2i64.trap
-    3, // llvm.nvvm.sust.b.1d.v2i64.zero
-    3, // llvm.nvvm.sust.b.1d.v2i8.clamp
-    3, // llvm.nvvm.sust.b.1d.v2i8.trap
-    3, // llvm.nvvm.sust.b.1d.v2i8.zero
-    3, // llvm.nvvm.sust.b.1d.v4i16.clamp
-    3, // llvm.nvvm.sust.b.1d.v4i16.trap
-    3, // llvm.nvvm.sust.b.1d.v4i16.zero
-    3, // llvm.nvvm.sust.b.1d.v4i32.clamp
-    3, // llvm.nvvm.sust.b.1d.v4i32.trap
-    3, // llvm.nvvm.sust.b.1d.v4i32.zero
-    3, // llvm.nvvm.sust.b.1d.v4i8.clamp
-    3, // llvm.nvvm.sust.b.1d.v4i8.trap
-    3, // llvm.nvvm.sust.b.1d.v4i8.zero
-    3, // llvm.nvvm.sust.b.2d.array.i16.clamp
-    3, // llvm.nvvm.sust.b.2d.array.i16.trap
-    3, // llvm.nvvm.sust.b.2d.array.i16.zero
-    3, // llvm.nvvm.sust.b.2d.array.i32.clamp
-    3, // llvm.nvvm.sust.b.2d.array.i32.trap
-    3, // llvm.nvvm.sust.b.2d.array.i32.zero
-    3, // llvm.nvvm.sust.b.2d.array.i64.clamp
-    3, // llvm.nvvm.sust.b.2d.array.i64.trap
-    3, // llvm.nvvm.sust.b.2d.array.i64.zero
-    3, // llvm.nvvm.sust.b.2d.array.i8.clamp
-    3, // llvm.nvvm.sust.b.2d.array.i8.trap
-    3, // llvm.nvvm.sust.b.2d.array.i8.zero
-    3, // llvm.nvvm.sust.b.2d.array.v2i16.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v2i16.trap
-    3, // llvm.nvvm.sust.b.2d.array.v2i16.zero
-    3, // llvm.nvvm.sust.b.2d.array.v2i32.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v2i32.trap
-    3, // llvm.nvvm.sust.b.2d.array.v2i32.zero
-    3, // llvm.nvvm.sust.b.2d.array.v2i64.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v2i64.trap
-    3, // llvm.nvvm.sust.b.2d.array.v2i64.zero
-    3, // llvm.nvvm.sust.b.2d.array.v2i8.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v2i8.trap
-    3, // llvm.nvvm.sust.b.2d.array.v2i8.zero
-    3, // llvm.nvvm.sust.b.2d.array.v4i16.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v4i16.trap
-    3, // llvm.nvvm.sust.b.2d.array.v4i16.zero
-    3, // llvm.nvvm.sust.b.2d.array.v4i32.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v4i32.trap
-    3, // llvm.nvvm.sust.b.2d.array.v4i32.zero
-    3, // llvm.nvvm.sust.b.2d.array.v4i8.clamp
-    3, // llvm.nvvm.sust.b.2d.array.v4i8.trap
-    3, // llvm.nvvm.sust.b.2d.array.v4i8.zero
-    3, // llvm.nvvm.sust.b.2d.i16.clamp
-    3, // llvm.nvvm.sust.b.2d.i16.trap
-    3, // llvm.nvvm.sust.b.2d.i16.zero
-    3, // llvm.nvvm.sust.b.2d.i32.clamp
-    3, // llvm.nvvm.sust.b.2d.i32.trap
-    3, // llvm.nvvm.sust.b.2d.i32.zero
-    3, // llvm.nvvm.sust.b.2d.i64.clamp
-    3, // llvm.nvvm.sust.b.2d.i64.trap
-    3, // llvm.nvvm.sust.b.2d.i64.zero
-    3, // llvm.nvvm.sust.b.2d.i8.clamp
-    3, // llvm.nvvm.sust.b.2d.i8.trap
-    3, // llvm.nvvm.sust.b.2d.i8.zero
-    3, // llvm.nvvm.sust.b.2d.v2i16.clamp
-    3, // llvm.nvvm.sust.b.2d.v2i16.trap
-    3, // llvm.nvvm.sust.b.2d.v2i16.zero
-    3, // llvm.nvvm.sust.b.2d.v2i32.clamp
-    3, // llvm.nvvm.sust.b.2d.v2i32.trap
-    3, // llvm.nvvm.sust.b.2d.v2i32.zero
-    3, // llvm.nvvm.sust.b.2d.v2i64.clamp
-    3, // llvm.nvvm.sust.b.2d.v2i64.trap
-    3, // llvm.nvvm.sust.b.2d.v2i64.zero
-    3, // llvm.nvvm.sust.b.2d.v2i8.clamp
-    3, // llvm.nvvm.sust.b.2d.v2i8.trap
-    3, // llvm.nvvm.sust.b.2d.v2i8.zero
-    3, // llvm.nvvm.sust.b.2d.v4i16.clamp
-    3, // llvm.nvvm.sust.b.2d.v4i16.trap
-    3, // llvm.nvvm.sust.b.2d.v4i16.zero
-    3, // llvm.nvvm.sust.b.2d.v4i32.clamp
-    3, // llvm.nvvm.sust.b.2d.v4i32.trap
-    3, // llvm.nvvm.sust.b.2d.v4i32.zero
-    3, // llvm.nvvm.sust.b.2d.v4i8.clamp
-    3, // llvm.nvvm.sust.b.2d.v4i8.trap
-    3, // llvm.nvvm.sust.b.2d.v4i8.zero
-    3, // llvm.nvvm.sust.b.3d.i16.clamp
-    3, // llvm.nvvm.sust.b.3d.i16.trap
-    3, // llvm.nvvm.sust.b.3d.i16.zero
-    3, // llvm.nvvm.sust.b.3d.i32.clamp
-    3, // llvm.nvvm.sust.b.3d.i32.trap
-    3, // llvm.nvvm.sust.b.3d.i32.zero
-    3, // llvm.nvvm.sust.b.3d.i64.clamp
-    3, // llvm.nvvm.sust.b.3d.i64.trap
-    3, // llvm.nvvm.sust.b.3d.i64.zero
-    3, // llvm.nvvm.sust.b.3d.i8.clamp
-    3, // llvm.nvvm.sust.b.3d.i8.trap
-    3, // llvm.nvvm.sust.b.3d.i8.zero
-    3, // llvm.nvvm.sust.b.3d.v2i16.clamp
-    3, // llvm.nvvm.sust.b.3d.v2i16.trap
-    3, // llvm.nvvm.sust.b.3d.v2i16.zero
-    3, // llvm.nvvm.sust.b.3d.v2i32.clamp
-    3, // llvm.nvvm.sust.b.3d.v2i32.trap
-    3, // llvm.nvvm.sust.b.3d.v2i32.zero
-    3, // llvm.nvvm.sust.b.3d.v2i64.clamp
-    3, // llvm.nvvm.sust.b.3d.v2i64.trap
-    3, // llvm.nvvm.sust.b.3d.v2i64.zero
-    3, // llvm.nvvm.sust.b.3d.v2i8.clamp
-    3, // llvm.nvvm.sust.b.3d.v2i8.trap
-    3, // llvm.nvvm.sust.b.3d.v2i8.zero
-    3, // llvm.nvvm.sust.b.3d.v4i16.clamp
-    3, // llvm.nvvm.sust.b.3d.v4i16.trap
-    3, // llvm.nvvm.sust.b.3d.v4i16.zero
-    3, // llvm.nvvm.sust.b.3d.v4i32.clamp
-    3, // llvm.nvvm.sust.b.3d.v4i32.trap
-    3, // llvm.nvvm.sust.b.3d.v4i32.zero
-    3, // llvm.nvvm.sust.b.3d.v4i8.clamp
-    3, // llvm.nvvm.sust.b.3d.v4i8.trap
-    3, // llvm.nvvm.sust.b.3d.v4i8.zero
-    3, // llvm.nvvm.sust.p.1d.array.i16.trap
-    3, // llvm.nvvm.sust.p.1d.array.i32.trap
-    3, // llvm.nvvm.sust.p.1d.array.i8.trap
-    3, // llvm.nvvm.sust.p.1d.array.v2i16.trap
-    3, // llvm.nvvm.sust.p.1d.array.v2i32.trap
-    3, // llvm.nvvm.sust.p.1d.array.v2i8.trap
-    3, // llvm.nvvm.sust.p.1d.array.v4i16.trap
-    3, // llvm.nvvm.sust.p.1d.array.v4i32.trap
-    3, // llvm.nvvm.sust.p.1d.array.v4i8.trap
-    3, // llvm.nvvm.sust.p.1d.i16.trap
-    3, // llvm.nvvm.sust.p.1d.i32.trap
-    3, // llvm.nvvm.sust.p.1d.i8.trap
-    3, // llvm.nvvm.sust.p.1d.v2i16.trap
-    3, // llvm.nvvm.sust.p.1d.v2i32.trap
-    3, // llvm.nvvm.sust.p.1d.v2i8.trap
-    3, // llvm.nvvm.sust.p.1d.v4i16.trap
-    3, // llvm.nvvm.sust.p.1d.v4i32.trap
-    3, // llvm.nvvm.sust.p.1d.v4i8.trap
-    3, // llvm.nvvm.sust.p.2d.array.i16.trap
-    3, // llvm.nvvm.sust.p.2d.array.i32.trap
-    3, // llvm.nvvm.sust.p.2d.array.i8.trap
-    3, // llvm.nvvm.sust.p.2d.array.v2i16.trap
-    3, // llvm.nvvm.sust.p.2d.array.v2i32.trap
-    3, // llvm.nvvm.sust.p.2d.array.v2i8.trap
-    3, // llvm.nvvm.sust.p.2d.array.v4i16.trap
-    3, // llvm.nvvm.sust.p.2d.array.v4i32.trap
-    3, // llvm.nvvm.sust.p.2d.array.v4i8.trap
-    3, // llvm.nvvm.sust.p.2d.i16.trap
-    3, // llvm.nvvm.sust.p.2d.i32.trap
-    3, // llvm.nvvm.sust.p.2d.i8.trap
-    3, // llvm.nvvm.sust.p.2d.v2i16.trap
-    3, // llvm.nvvm.sust.p.2d.v2i32.trap
-    3, // llvm.nvvm.sust.p.2d.v2i8.trap
-    3, // llvm.nvvm.sust.p.2d.v4i16.trap
-    3, // llvm.nvvm.sust.p.2d.v4i32.trap
-    3, // llvm.nvvm.sust.p.2d.v4i8.trap
-    3, // llvm.nvvm.sust.p.3d.i16.trap
-    3, // llvm.nvvm.sust.p.3d.i32.trap
-    3, // llvm.nvvm.sust.p.3d.i8.trap
-    3, // llvm.nvvm.sust.p.3d.v2i16.trap
-    3, // llvm.nvvm.sust.p.3d.v2i32.trap
-    3, // llvm.nvvm.sust.p.3d.v2i8.trap
-    3, // llvm.nvvm.sust.p.3d.v4i16.trap
-    3, // llvm.nvvm.sust.p.3d.v4i32.trap
-    3, // llvm.nvvm.sust.p.3d.v4i8.trap
-    1, // llvm.nvvm.swap.lo.hi.b64
-    3, // llvm.nvvm.tex.1d.array.grad.v4f32.f32
-    3, // llvm.nvvm.tex.1d.array.grad.v4s32.f32
-    3, // llvm.nvvm.tex.1d.array.grad.v4u32.f32
-    3, // llvm.nvvm.tex.1d.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.1d.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.1d.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.1d.array.v4f32.f32
-    3, // llvm.nvvm.tex.1d.array.v4f32.s32
-    3, // llvm.nvvm.tex.1d.array.v4s32.f32
-    3, // llvm.nvvm.tex.1d.array.v4s32.s32
-    3, // llvm.nvvm.tex.1d.array.v4u32.f32
-    3, // llvm.nvvm.tex.1d.array.v4u32.s32
-    3, // llvm.nvvm.tex.1d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.1d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.1d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.1d.level.v4f32.f32
-    3, // llvm.nvvm.tex.1d.level.v4s32.f32
-    3, // llvm.nvvm.tex.1d.level.v4u32.f32
-    3, // llvm.nvvm.tex.1d.v4f32.f32
-    3, // llvm.nvvm.tex.1d.v4f32.s32
-    3, // llvm.nvvm.tex.1d.v4s32.f32
-    3, // llvm.nvvm.tex.1d.v4s32.s32
-    3, // llvm.nvvm.tex.1d.v4u32.f32
-    3, // llvm.nvvm.tex.1d.v4u32.s32
-    3, // llvm.nvvm.tex.2d.array.grad.v4f32.f32
-    3, // llvm.nvvm.tex.2d.array.grad.v4s32.f32
-    3, // llvm.nvvm.tex.2d.array.grad.v4u32.f32
-    3, // llvm.nvvm.tex.2d.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.2d.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.2d.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.2d.array.v4f32.f32
-    3, // llvm.nvvm.tex.2d.array.v4f32.s32
-    3, // llvm.nvvm.tex.2d.array.v4s32.f32
-    3, // llvm.nvvm.tex.2d.array.v4s32.s32
-    3, // llvm.nvvm.tex.2d.array.v4u32.f32
-    3, // llvm.nvvm.tex.2d.array.v4u32.s32
-    3, // llvm.nvvm.tex.2d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.2d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.2d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.2d.level.v4f32.f32
-    3, // llvm.nvvm.tex.2d.level.v4s32.f32
-    3, // llvm.nvvm.tex.2d.level.v4u32.f32
-    3, // llvm.nvvm.tex.2d.v4f32.f32
-    3, // llvm.nvvm.tex.2d.v4f32.s32
-    3, // llvm.nvvm.tex.2d.v4s32.f32
-    3, // llvm.nvvm.tex.2d.v4s32.s32
-    3, // llvm.nvvm.tex.2d.v4u32.f32
-    3, // llvm.nvvm.tex.2d.v4u32.s32
-    3, // llvm.nvvm.tex.3d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.3d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.3d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.3d.level.v4f32.f32
-    3, // llvm.nvvm.tex.3d.level.v4s32.f32
-    3, // llvm.nvvm.tex.3d.level.v4u32.f32
-    3, // llvm.nvvm.tex.3d.v4f32.f32
-    3, // llvm.nvvm.tex.3d.v4f32.s32
-    3, // llvm.nvvm.tex.3d.v4s32.f32
-    3, // llvm.nvvm.tex.3d.v4s32.s32
-    3, // llvm.nvvm.tex.3d.v4u32.f32
-    3, // llvm.nvvm.tex.3d.v4u32.s32
-    3, // llvm.nvvm.tex.cube.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.cube.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.cube.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.cube.array.v4f32.f32
-    3, // llvm.nvvm.tex.cube.array.v4s32.f32
-    3, // llvm.nvvm.tex.cube.array.v4u32.f32
-    3, // llvm.nvvm.tex.cube.level.v4f32.f32
-    3, // llvm.nvvm.tex.cube.level.v4s32.f32
-    3, // llvm.nvvm.tex.cube.level.v4u32.f32
-    3, // llvm.nvvm.tex.cube.v4f32.f32
-    3, // llvm.nvvm.tex.cube.v4s32.f32
-    3, // llvm.nvvm.tex.cube.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.grad.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.grad.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.grad.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.v4f32.s32
-    3, // llvm.nvvm.tex.unified.1d.array.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.v4s32.s32
-    3, // llvm.nvvm.tex.unified.1d.array.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.array.v4u32.s32
-    3, // llvm.nvvm.tex.unified.1d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.v4f32.f32
-    3, // llvm.nvvm.tex.unified.1d.v4f32.s32
-    3, // llvm.nvvm.tex.unified.1d.v4s32.f32
-    3, // llvm.nvvm.tex.unified.1d.v4s32.s32
-    3, // llvm.nvvm.tex.unified.1d.v4u32.f32
-    3, // llvm.nvvm.tex.unified.1d.v4u32.s32
-    3, // llvm.nvvm.tex.unified.2d.array.grad.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.grad.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.grad.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.v4f32.s32
-    3, // llvm.nvvm.tex.unified.2d.array.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.v4s32.s32
-    3, // llvm.nvvm.tex.unified.2d.array.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.array.v4u32.s32
-    3, // llvm.nvvm.tex.unified.2d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.v4f32.f32
-    3, // llvm.nvvm.tex.unified.2d.v4f32.s32
-    3, // llvm.nvvm.tex.unified.2d.v4s32.f32
-    3, // llvm.nvvm.tex.unified.2d.v4s32.s32
-    3, // llvm.nvvm.tex.unified.2d.v4u32.f32
-    3, // llvm.nvvm.tex.unified.2d.v4u32.s32
-    3, // llvm.nvvm.tex.unified.3d.grad.v4f32.f32
-    3, // llvm.nvvm.tex.unified.3d.grad.v4s32.f32
-    3, // llvm.nvvm.tex.unified.3d.grad.v4u32.f32
-    3, // llvm.nvvm.tex.unified.3d.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.3d.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.3d.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.3d.v4f32.f32
-    3, // llvm.nvvm.tex.unified.3d.v4f32.s32
-    3, // llvm.nvvm.tex.unified.3d.v4s32.f32
-    3, // llvm.nvvm.tex.unified.3d.v4s32.s32
-    3, // llvm.nvvm.tex.unified.3d.v4u32.f32
-    3, // llvm.nvvm.tex.unified.3d.v4u32.s32
-    3, // llvm.nvvm.tex.unified.cube.array.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.cube.array.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.cube.array.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.cube.array.v4f32.f32
-    3, // llvm.nvvm.tex.unified.cube.array.v4s32.f32
-    3, // llvm.nvvm.tex.unified.cube.array.v4u32.f32
-    3, // llvm.nvvm.tex.unified.cube.level.v4f32.f32
-    3, // llvm.nvvm.tex.unified.cube.level.v4s32.f32
-    3, // llvm.nvvm.tex.unified.cube.level.v4u32.f32
-    3, // llvm.nvvm.tex.unified.cube.v4f32.f32
-    3, // llvm.nvvm.tex.unified.cube.v4s32.f32
-    3, // llvm.nvvm.tex.unified.cube.v4u32.f32
-    1, // llvm.nvvm.texsurf.handle
-    1, // llvm.nvvm.texsurf.handle.internal
-    3, // llvm.nvvm.tld4.a.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.a.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.a.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.b.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.b.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.b.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.g.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.g.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.g.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.r.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.r.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.r.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.unified.a.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.unified.a.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.unified.a.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.unified.b.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.unified.b.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.unified.b.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.unified.g.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.unified.g.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.unified.g.2d.v4u32.f32
-    3, // llvm.nvvm.tld4.unified.r.2d.v4f32.f32
-    3, // llvm.nvvm.tld4.unified.r.2d.v4s32.f32
-    3, // llvm.nvvm.tld4.unified.r.2d.v4u32.f32
-    1, // llvm.nvvm.trunc.d
-    1, // llvm.nvvm.trunc.f
-    1, // llvm.nvvm.trunc.ftz.f
-    1, // llvm.nvvm.txq.array.size
-    1, // llvm.nvvm.txq.channel.data.type
-    1, // llvm.nvvm.txq.channel.order
-    1, // llvm.nvvm.txq.depth
-    1, // llvm.nvvm.txq.height
-    1, // llvm.nvvm.txq.num.mipmap.levels
-    1, // llvm.nvvm.txq.num.samples
-    1, // llvm.nvvm.txq.width
-    1, // llvm.nvvm.ui2d.rm
-    1, // llvm.nvvm.ui2d.rn
-    1, // llvm.nvvm.ui2d.rp
-    1, // llvm.nvvm.ui2d.rz
-    1, // llvm.nvvm.ui2f.rm
-    1, // llvm.nvvm.ui2f.rn
-    1, // llvm.nvvm.ui2f.rp
-    1, // llvm.nvvm.ui2f.rz
-    1, // llvm.nvvm.ull2d.rm
-    1, // llvm.nvvm.ull2d.rn
-    1, // llvm.nvvm.ull2d.rp
-    1, // llvm.nvvm.ull2d.rz
-    1, // llvm.nvvm.ull2f.rm
-    1, // llvm.nvvm.ull2f.rn
-    1, // llvm.nvvm.ull2f.rp
-    1, // llvm.nvvm.ull2f.rz
-    38, // llvm.nvvm.vote.all
-    38, // llvm.nvvm.vote.all.sync
-    38, // llvm.nvvm.vote.any
-    38, // llvm.nvvm.vote.any.sync
-    38, // llvm.nvvm.vote.ballot
-    38, // llvm.nvvm.vote.ballot.sync
-    38, // llvm.nvvm.vote.uni
-    38, // llvm.nvvm.vote.uni.sync
-    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.a.col.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.a.row.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.b.col.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.b.row.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.f32
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.col.stride.f32
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.f32
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f16
-    13, // llvm.nvvm.wmma.m16n16k16.load.c.row.stride.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f16.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.col.f32.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f16.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.col.row.f32.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f16.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.col.f32.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f16.f32.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f16.satfinite
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32
-    1, // llvm.nvvm.wmma.m16n16k16.mma.row.row.f32.f32.satfinite
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.col.f16
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.col.f32
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f16
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.col.stride.f32
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.row.f16
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.row.f32
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f16
-    39, // llvm.nvvm.wmma.m16n16k16.store.d.row.stride.f32
-    1, // llvm.ppc.altivec.crypto.vcipher
-    1, // llvm.ppc.altivec.crypto.vcipherlast
-    1, // llvm.ppc.altivec.crypto.vncipher
-    1, // llvm.ppc.altivec.crypto.vncipherlast
-    1, // llvm.ppc.altivec.crypto.vpermxor
-    1, // llvm.ppc.altivec.crypto.vpmsumb
-    1, // llvm.ppc.altivec.crypto.vpmsumd
-    1, // llvm.ppc.altivec.crypto.vpmsumh
-    1, // llvm.ppc.altivec.crypto.vpmsumw
-    1, // llvm.ppc.altivec.crypto.vsbox
-    1, // llvm.ppc.altivec.crypto.vshasigmad
-    1, // llvm.ppc.altivec.crypto.vshasigmaw
-    3, // llvm.ppc.altivec.dss
-    3, // llvm.ppc.altivec.dssall
-    3, // llvm.ppc.altivec.dst
-    3, // llvm.ppc.altivec.dstst
-    3, // llvm.ppc.altivec.dststt
-    3, // llvm.ppc.altivec.dstt
-    2, // llvm.ppc.altivec.lvebx
-    2, // llvm.ppc.altivec.lvehx
-    2, // llvm.ppc.altivec.lvewx
-    1, // llvm.ppc.altivec.lvsl
-    1, // llvm.ppc.altivec.lvsr
-    2, // llvm.ppc.altivec.lvx
-    2, // llvm.ppc.altivec.lvxl
-    16, // llvm.ppc.altivec.mfvscr
-    3, // llvm.ppc.altivec.mtvscr
-    40, // llvm.ppc.altivec.stvebx
-    40, // llvm.ppc.altivec.stvehx
-    40, // llvm.ppc.altivec.stvewx
-    40, // llvm.ppc.altivec.stvx
-    40, // llvm.ppc.altivec.stvxl
-    1, // llvm.ppc.altivec.vabsdub
-    1, // llvm.ppc.altivec.vabsduh
-    1, // llvm.ppc.altivec.vabsduw
-    1, // llvm.ppc.altivec.vaddcuq
-    1, // llvm.ppc.altivec.vaddcuw
-    1, // llvm.ppc.altivec.vaddecuq
-    1, // llvm.ppc.altivec.vaddeuqm
-    1, // llvm.ppc.altivec.vaddsbs
-    1, // llvm.ppc.altivec.vaddshs
-    1, // llvm.ppc.altivec.vaddsws
-    1, // llvm.ppc.altivec.vaddubs
-    1, // llvm.ppc.altivec.vadduhs
-    1, // llvm.ppc.altivec.vadduws
-    1, // llvm.ppc.altivec.vavgsb
-    1, // llvm.ppc.altivec.vavgsh
-    1, // llvm.ppc.altivec.vavgsw
-    1, // llvm.ppc.altivec.vavgub
-    1, // llvm.ppc.altivec.vavguh
-    1, // llvm.ppc.altivec.vavguw
-    1, // llvm.ppc.altivec.vbpermq
-    1, // llvm.ppc.altivec.vcfsx
-    1, // llvm.ppc.altivec.vcfux
-    1, // llvm.ppc.altivec.vclzlsbb
-    1, // llvm.ppc.altivec.vcmpbfp
-    1, // llvm.ppc.altivec.vcmpbfp.p
-    1, // llvm.ppc.altivec.vcmpeqfp
-    1, // llvm.ppc.altivec.vcmpeqfp.p
-    1, // llvm.ppc.altivec.vcmpequb
-    1, // llvm.ppc.altivec.vcmpequb.p
-    1, // llvm.ppc.altivec.vcmpequd
-    1, // llvm.ppc.altivec.vcmpequd.p
-    1, // llvm.ppc.altivec.vcmpequh
-    1, // llvm.ppc.altivec.vcmpequh.p
-    1, // llvm.ppc.altivec.vcmpequw
-    1, // llvm.ppc.altivec.vcmpequw.p
-    1, // llvm.ppc.altivec.vcmpgefp
-    1, // llvm.ppc.altivec.vcmpgefp.p
-    1, // llvm.ppc.altivec.vcmpgtfp
-    1, // llvm.ppc.altivec.vcmpgtfp.p
-    1, // llvm.ppc.altivec.vcmpgtsb
-    1, // llvm.ppc.altivec.vcmpgtsb.p
-    1, // llvm.ppc.altivec.vcmpgtsd
-    1, // llvm.ppc.altivec.vcmpgtsd.p
-    1, // llvm.ppc.altivec.vcmpgtsh
-    1, // llvm.ppc.altivec.vcmpgtsh.p
-    1, // llvm.ppc.altivec.vcmpgtsw
-    1, // llvm.ppc.altivec.vcmpgtsw.p
-    1, // llvm.ppc.altivec.vcmpgtub
-    1, // llvm.ppc.altivec.vcmpgtub.p
-    1, // llvm.ppc.altivec.vcmpgtud
-    1, // llvm.ppc.altivec.vcmpgtud.p
-    1, // llvm.ppc.altivec.vcmpgtuh
-    1, // llvm.ppc.altivec.vcmpgtuh.p
-    1, // llvm.ppc.altivec.vcmpgtuw
-    1, // llvm.ppc.altivec.vcmpgtuw.p
-    1, // llvm.ppc.altivec.vcmpneb
-    1, // llvm.ppc.altivec.vcmpneb.p
-    1, // llvm.ppc.altivec.vcmpneh
-    1, // llvm.ppc.altivec.vcmpneh.p
-    1, // llvm.ppc.altivec.vcmpnew
-    1, // llvm.ppc.altivec.vcmpnew.p
-    1, // llvm.ppc.altivec.vcmpnezb
-    1, // llvm.ppc.altivec.vcmpnezb.p
-    1, // llvm.ppc.altivec.vcmpnezh
-    1, // llvm.ppc.altivec.vcmpnezh.p
-    1, // llvm.ppc.altivec.vcmpnezw
-    1, // llvm.ppc.altivec.vcmpnezw.p
-    1, // llvm.ppc.altivec.vctsxs
-    1, // llvm.ppc.altivec.vctuxs
-    1, // llvm.ppc.altivec.vctzlsbb
-    1, // llvm.ppc.altivec.vexptefp
-    1, // llvm.ppc.altivec.vgbbd
-    1, // llvm.ppc.altivec.vlogefp
-    1, // llvm.ppc.altivec.vmaddfp
-    1, // llvm.ppc.altivec.vmaxfp
-    1, // llvm.ppc.altivec.vmaxsb
-    1, // llvm.ppc.altivec.vmaxsd
-    1, // llvm.ppc.altivec.vmaxsh
-    1, // llvm.ppc.altivec.vmaxsw
-    1, // llvm.ppc.altivec.vmaxub
-    1, // llvm.ppc.altivec.vmaxud
-    1, // llvm.ppc.altivec.vmaxuh
-    1, // llvm.ppc.altivec.vmaxuw
-    1, // llvm.ppc.altivec.vmhaddshs
-    1, // llvm.ppc.altivec.vmhraddshs
-    1, // llvm.ppc.altivec.vminfp
-    1, // llvm.ppc.altivec.vminsb
-    1, // llvm.ppc.altivec.vminsd
-    1, // llvm.ppc.altivec.vminsh
-    1, // llvm.ppc.altivec.vminsw
-    1, // llvm.ppc.altivec.vminub
-    1, // llvm.ppc.altivec.vminud
-    1, // llvm.ppc.altivec.vminuh
-    1, // llvm.ppc.altivec.vminuw
-    1, // llvm.ppc.altivec.vmladduhm
-    1, // llvm.ppc.altivec.vmsummbm
-    1, // llvm.ppc.altivec.vmsumshm
-    1, // llvm.ppc.altivec.vmsumshs
-    1, // llvm.ppc.altivec.vmsumubm
-    1, // llvm.ppc.altivec.vmsumuhm
-    1, // llvm.ppc.altivec.vmsumuhs
-    1, // llvm.ppc.altivec.vmulesb
-    1, // llvm.ppc.altivec.vmulesh
-    1, // llvm.ppc.altivec.vmulesw
-    1, // llvm.ppc.altivec.vmuleub
-    1, // llvm.ppc.altivec.vmuleuh
-    1, // llvm.ppc.altivec.vmuleuw
-    1, // llvm.ppc.altivec.vmulosb
-    1, // llvm.ppc.altivec.vmulosh
-    1, // llvm.ppc.altivec.vmulosw
-    1, // llvm.ppc.altivec.vmuloub
-    1, // llvm.ppc.altivec.vmulouh
-    1, // llvm.ppc.altivec.vmulouw
-    1, // llvm.ppc.altivec.vnmsubfp
-    1, // llvm.ppc.altivec.vperm
-    1, // llvm.ppc.altivec.vpkpx
-    1, // llvm.ppc.altivec.vpksdss
-    1, // llvm.ppc.altivec.vpksdus
-    1, // llvm.ppc.altivec.vpkshss
-    1, // llvm.ppc.altivec.vpkshus
-    1, // llvm.ppc.altivec.vpkswss
-    1, // llvm.ppc.altivec.vpkswus
-    1, // llvm.ppc.altivec.vpkudus
-    1, // llvm.ppc.altivec.vpkuhus
-    1, // llvm.ppc.altivec.vpkuwus
-    1, // llvm.ppc.altivec.vprtybd
-    1, // llvm.ppc.altivec.vprtybq
-    1, // llvm.ppc.altivec.vprtybw
-    1, // llvm.ppc.altivec.vrefp
-    1, // llvm.ppc.altivec.vrfim
-    1, // llvm.ppc.altivec.vrfin
-    1, // llvm.ppc.altivec.vrfip
-    1, // llvm.ppc.altivec.vrfiz
-    1, // llvm.ppc.altivec.vrlb
-    1, // llvm.ppc.altivec.vrld
-    1, // llvm.ppc.altivec.vrldmi
-    1, // llvm.ppc.altivec.vrldnm
-    1, // llvm.ppc.altivec.vrlh
-    1, // llvm.ppc.altivec.vrlw
-    1, // llvm.ppc.altivec.vrlwmi
-    1, // llvm.ppc.altivec.vrlwnm
-    1, // llvm.ppc.altivec.vrsqrtefp
-    1, // llvm.ppc.altivec.vsel
-    1, // llvm.ppc.altivec.vsl
-    1, // llvm.ppc.altivec.vslb
-    1, // llvm.ppc.altivec.vslh
-    1, // llvm.ppc.altivec.vslo
-    1, // llvm.ppc.altivec.vslv
-    1, // llvm.ppc.altivec.vslw
-    1, // llvm.ppc.altivec.vsr
-    1, // llvm.ppc.altivec.vsrab
-    1, // llvm.ppc.altivec.vsrah
-    1, // llvm.ppc.altivec.vsraw
-    1, // llvm.ppc.altivec.vsrb
-    1, // llvm.ppc.altivec.vsrh
-    1, // llvm.ppc.altivec.vsro
-    1, // llvm.ppc.altivec.vsrv
-    1, // llvm.ppc.altivec.vsrw
-    1, // llvm.ppc.altivec.vsubcuq
-    1, // llvm.ppc.altivec.vsubcuw
-    1, // llvm.ppc.altivec.vsubecuq
-    1, // llvm.ppc.altivec.vsubeuqm
-    1, // llvm.ppc.altivec.vsubsbs
-    1, // llvm.ppc.altivec.vsubshs
-    1, // llvm.ppc.altivec.vsubsws
-    1, // llvm.ppc.altivec.vsububs
-    1, // llvm.ppc.altivec.vsubuhs
-    1, // llvm.ppc.altivec.vsubuws
-    1, // llvm.ppc.altivec.vsum2sws
-    1, // llvm.ppc.altivec.vsum4sbs
-    1, // llvm.ppc.altivec.vsum4shs
-    1, // llvm.ppc.altivec.vsum4ubs
-    1, // llvm.ppc.altivec.vsumsws
-    1, // llvm.ppc.altivec.vupkhpx
-    1, // llvm.ppc.altivec.vupkhsb
-    1, // llvm.ppc.altivec.vupkhsh
-    1, // llvm.ppc.altivec.vupkhsw
-    1, // llvm.ppc.altivec.vupklpx
-    1, // llvm.ppc.altivec.vupklsb
-    1, // llvm.ppc.altivec.vupklsh
-    1, // llvm.ppc.altivec.vupklsw
-    1, // llvm.ppc.bpermd
-    3, // llvm.ppc.cfence
-    3, // llvm.ppc.dcba
-    3, // llvm.ppc.dcbf
-    3, // llvm.ppc.dcbi
-    3, // llvm.ppc.dcbst
-    18, // llvm.ppc.dcbt
-    18, // llvm.ppc.dcbtst
-    3, // llvm.ppc.dcbz
-    3, // llvm.ppc.dcbzl
-    1, // llvm.ppc.divde
-    1, // llvm.ppc.divdeu
-    1, // llvm.ppc.divwe
-    1, // llvm.ppc.divweu
-    3, // llvm.ppc.get.texasr
-    3, // llvm.ppc.get.texasru
-    3, // llvm.ppc.get.tfhar
-    3, // llvm.ppc.get.tfiar
-    3, // llvm.ppc.is.decremented.ctr.nonzero
-    3, // llvm.ppc.lwsync
-    3, // llvm.ppc.mtctr
-    1, // llvm.ppc.qpx.qvfabs
-    1, // llvm.ppc.qpx.qvfadd
-    1, // llvm.ppc.qpx.qvfadds
-    1, // llvm.ppc.qpx.qvfcfid
-    1, // llvm.ppc.qpx.qvfcfids
-    1, // llvm.ppc.qpx.qvfcfidu
-    1, // llvm.ppc.qpx.qvfcfidus
-    1, // llvm.ppc.qpx.qvfcmpeq
-    1, // llvm.ppc.qpx.qvfcmpgt
-    1, // llvm.ppc.qpx.qvfcmplt
-    1, // llvm.ppc.qpx.qvfcpsgn
-    1, // llvm.ppc.qpx.qvfctid
-    1, // llvm.ppc.qpx.qvfctidu
-    1, // llvm.ppc.qpx.qvfctiduz
-    1, // llvm.ppc.qpx.qvfctidz
-    1, // llvm.ppc.qpx.qvfctiw
-    1, // llvm.ppc.qpx.qvfctiwu
-    1, // llvm.ppc.qpx.qvfctiwuz
-    1, // llvm.ppc.qpx.qvfctiwz
-    1, // llvm.ppc.qpx.qvflogical
-    1, // llvm.ppc.qpx.qvfmadd
-    1, // llvm.ppc.qpx.qvfmadds
-    1, // llvm.ppc.qpx.qvfmsub
-    1, // llvm.ppc.qpx.qvfmsubs
-    1, // llvm.ppc.qpx.qvfmul
-    1, // llvm.ppc.qpx.qvfmuls
-    1, // llvm.ppc.qpx.qvfnabs
-    1, // llvm.ppc.qpx.qvfneg
-    1, // llvm.ppc.qpx.qvfnmadd
-    1, // llvm.ppc.qpx.qvfnmadds
-    1, // llvm.ppc.qpx.qvfnmsub
-    1, // llvm.ppc.qpx.qvfnmsubs
-    1, // llvm.ppc.qpx.qvfperm
-    1, // llvm.ppc.qpx.qvfre
-    1, // llvm.ppc.qpx.qvfres
-    1, // llvm.ppc.qpx.qvfrim
-    1, // llvm.ppc.qpx.qvfrin
-    1, // llvm.ppc.qpx.qvfrip
-    1, // llvm.ppc.qpx.qvfriz
-    1, // llvm.ppc.qpx.qvfrsp
-    1, // llvm.ppc.qpx.qvfrsqrte
-    1, // llvm.ppc.qpx.qvfrsqrtes
-    1, // llvm.ppc.qpx.qvfsel
-    1, // llvm.ppc.qpx.qvfsub
-    1, // llvm.ppc.qpx.qvfsubs
-    1, // llvm.ppc.qpx.qvftstnan
-    1, // llvm.ppc.qpx.qvfxmadd
-    1, // llvm.ppc.qpx.qvfxmadds
-    1, // llvm.ppc.qpx.qvfxmul
-    1, // llvm.ppc.qpx.qvfxmuls
-    1, // llvm.ppc.qpx.qvfxxcpnmadd
-    1, // llvm.ppc.qpx.qvfxxcpnmadds
-    1, // llvm.ppc.qpx.qvfxxmadd
-    1, // llvm.ppc.qpx.qvfxxmadds
-    1, // llvm.ppc.qpx.qvfxxnpmadd
-    1, // llvm.ppc.qpx.qvfxxnpmadds
-    1, // llvm.ppc.qpx.qvgpci
-    2, // llvm.ppc.qpx.qvlfcd
-    2, // llvm.ppc.qpx.qvlfcda
-    2, // llvm.ppc.qpx.qvlfcs
-    2, // llvm.ppc.qpx.qvlfcsa
-    2, // llvm.ppc.qpx.qvlfd
-    2, // llvm.ppc.qpx.qvlfda
-    2, // llvm.ppc.qpx.qvlfiwa
-    2, // llvm.ppc.qpx.qvlfiwaa
-    2, // llvm.ppc.qpx.qvlfiwz
-    2, // llvm.ppc.qpx.qvlfiwza
-    2, // llvm.ppc.qpx.qvlfs
-    2, // llvm.ppc.qpx.qvlfsa
-    1, // llvm.ppc.qpx.qvlpcld
-    1, // llvm.ppc.qpx.qvlpcls
-    1, // llvm.ppc.qpx.qvlpcrd
-    1, // llvm.ppc.qpx.qvlpcrs
-    40, // llvm.ppc.qpx.qvstfcd
-    40, // llvm.ppc.qpx.qvstfcda
-    40, // llvm.ppc.qpx.qvstfcs
-    40, // llvm.ppc.qpx.qvstfcsa
-    40, // llvm.ppc.qpx.qvstfd
-    40, // llvm.ppc.qpx.qvstfda
-    40, // llvm.ppc.qpx.qvstfiw
-    40, // llvm.ppc.qpx.qvstfiwa
-    40, // llvm.ppc.qpx.qvstfs
-    40, // llvm.ppc.qpx.qvstfsa
-    3, // llvm.ppc.set.texasr
-    3, // llvm.ppc.set.texasru
-    3, // llvm.ppc.set.tfhar
-    3, // llvm.ppc.set.tfiar
-    3, // llvm.ppc.sync
-    3, // llvm.ppc.tabort
-    3, // llvm.ppc.tabortdc
-    3, // llvm.ppc.tabortdci
-    3, // llvm.ppc.tabortwc
-    3, // llvm.ppc.tabortwci
-    3, // llvm.ppc.tbegin
-    3, // llvm.ppc.tcheck
-    3, // llvm.ppc.tend
-    3, // llvm.ppc.tendall
-    3, // llvm.ppc.trechkpt
-    3, // llvm.ppc.treclaim
-    3, // llvm.ppc.tresume
-    3, // llvm.ppc.tsr
-    3, // llvm.ppc.tsuspend
-    3, // llvm.ppc.ttest
-    2, // llvm.ppc.vsx.lxvd2x
-    2, // llvm.ppc.vsx.lxvd2x.be
-    2, // llvm.ppc.vsx.lxvl
-    2, // llvm.ppc.vsx.lxvll
-    2, // llvm.ppc.vsx.lxvw4x
-    2, // llvm.ppc.vsx.lxvw4x.be
-    40, // llvm.ppc.vsx.stxvd2x
-    40, // llvm.ppc.vsx.stxvd2x.be
-    40, // llvm.ppc.vsx.stxvl
-    40, // llvm.ppc.vsx.stxvll
-    40, // llvm.ppc.vsx.stxvw4x
-    40, // llvm.ppc.vsx.stxvw4x.be
-    1, // llvm.ppc.vsx.xsmaxdp
-    1, // llvm.ppc.vsx.xsmindp
-    1, // llvm.ppc.vsx.xvcmpeqdp
-    1, // llvm.ppc.vsx.xvcmpeqdp.p
-    1, // llvm.ppc.vsx.xvcmpeqsp
-    1, // llvm.ppc.vsx.xvcmpeqsp.p
-    1, // llvm.ppc.vsx.xvcmpgedp
-    1, // llvm.ppc.vsx.xvcmpgedp.p
-    1, // llvm.ppc.vsx.xvcmpgesp
-    1, // llvm.ppc.vsx.xvcmpgesp.p
-    1, // llvm.ppc.vsx.xvcmpgtdp
-    1, // llvm.ppc.vsx.xvcmpgtdp.p
-    1, // llvm.ppc.vsx.xvcmpgtsp
-    1, // llvm.ppc.vsx.xvcmpgtsp.p
-    1, // llvm.ppc.vsx.xvcvdpsp
-    1, // llvm.ppc.vsx.xvcvdpsxws
-    1, // llvm.ppc.vsx.xvcvdpuxws
-    1, // llvm.ppc.vsx.xvcvhpsp
-    1, // llvm.ppc.vsx.xvcvspdp
-    1, // llvm.ppc.vsx.xvcvsphp
-    1, // llvm.ppc.vsx.xvcvsxdsp
-    1, // llvm.ppc.vsx.xvcvsxwdp
-    1, // llvm.ppc.vsx.xvcvuxdsp
-    1, // llvm.ppc.vsx.xvcvuxwdp
-    1, // llvm.ppc.vsx.xvdivdp
-    1, // llvm.ppc.vsx.xvdivsp
-    1, // llvm.ppc.vsx.xviexpdp
-    1, // llvm.ppc.vsx.xviexpsp
-    1, // llvm.ppc.vsx.xvmaxdp
-    1, // llvm.ppc.vsx.xvmaxsp
-    1, // llvm.ppc.vsx.xvmindp
-    1, // llvm.ppc.vsx.xvminsp
-    1, // llvm.ppc.vsx.xvrdpip
-    1, // llvm.ppc.vsx.xvredp
-    1, // llvm.ppc.vsx.xvresp
-    1, // llvm.ppc.vsx.xvrspip
-    1, // llvm.ppc.vsx.xvrsqrtedp
-    1, // llvm.ppc.vsx.xvrsqrtesp
-    1, // llvm.ppc.vsx.xvtstdcdp
-    1, // llvm.ppc.vsx.xvtstdcsp
-    1, // llvm.ppc.vsx.xvxexpdp
-    1, // llvm.ppc.vsx.xvxexpsp
-    1, // llvm.ppc.vsx.xvxsigdp
-    1, // llvm.ppc.vsx.xvxsigsp
-    1, // llvm.ppc.vsx.xxextractuw
-    1, // llvm.ppc.vsx.xxinsertw
-    1, // llvm.ppc.vsx.xxleqv
-    4, // llvm.r600.cube
-    33, // llvm.r600.group.barrier
-    4, // llvm.r600.implicitarg.ptr
-    3, // llvm.r600.rat.store.typed
-    4, // llvm.r600.read.global.size.x
-    4, // llvm.r600.read.global.size.y
-    4, // llvm.r600.read.global.size.z
-    4, // llvm.r600.read.local.size.x
-    4, // llvm.r600.read.local.size.y
-    4, // llvm.r600.read.local.size.z
-    4, // llvm.r600.read.ngroups.x
-    4, // llvm.r600.read.ngroups.y
-    4, // llvm.r600.read.ngroups.z
-    4, // llvm.r600.read.tgid.x
-    4, // llvm.r600.read.tgid.y
-    4, // llvm.r600.read.tgid.z
-    4, // llvm.r600.read.tidig.x
-    4, // llvm.r600.read.tidig.y
-    4, // llvm.r600.read.tidig.z
-    4, // llvm.r600.recipsqrt.clamped
-    4, // llvm.r600.recipsqrt.ieee
-    3, // llvm.s390.efpc
-    1, // llvm.s390.etnd
-    1, // llvm.s390.lcbb
-    40, // llvm.s390.ntstg
-    3, // llvm.s390.ppa.txassist
-    3, // llvm.s390.sfpc
-    41, // llvm.s390.tabort
-    42, // llvm.s390.tbegin
-    42, // llvm.s390.tbegin.nofloat
-    42, // llvm.s390.tbeginc
-    1, // llvm.s390.tdc
-    3, // llvm.s390.tend
-    1, // llvm.s390.vaccb
-    1, // llvm.s390.vacccq
-    1, // llvm.s390.vaccf
-    1, // llvm.s390.vaccg
-    1, // llvm.s390.vacch
-    1, // llvm.s390.vaccq
-    1, // llvm.s390.vacq
-    1, // llvm.s390.vaq
-    1, // llvm.s390.vavgb
-    1, // llvm.s390.vavgf
-    1, // llvm.s390.vavgg
-    1, // llvm.s390.vavgh
-    1, // llvm.s390.vavglb
-    1, // llvm.s390.vavglf
-    1, // llvm.s390.vavglg
-    1, // llvm.s390.vavglh
-    1, // llvm.s390.vbperm
-    1, // llvm.s390.vceqbs
-    1, // llvm.s390.vceqfs
-    1, // llvm.s390.vceqgs
-    1, // llvm.s390.vceqhs
-    1, // llvm.s390.vchbs
-    1, // llvm.s390.vchfs
-    1, // llvm.s390.vchgs
-    1, // llvm.s390.vchhs
-    1, // llvm.s390.vchlbs
-    1, // llvm.s390.vchlfs
-    1, // llvm.s390.vchlgs
-    1, // llvm.s390.vchlhs
-    1, // llvm.s390.vcksm
-    1, // llvm.s390.verimb
-    1, // llvm.s390.verimf
-    1, // llvm.s390.verimg
-    1, // llvm.s390.verimh
-    1, // llvm.s390.verllb
-    1, // llvm.s390.verllf
-    1, // llvm.s390.verllg
-    1, // llvm.s390.verllh
-    1, // llvm.s390.verllvb
-    1, // llvm.s390.verllvf
-    1, // llvm.s390.verllvg
-    1, // llvm.s390.verllvh
-    1, // llvm.s390.vfaeb
-    1, // llvm.s390.vfaebs
-    1, // llvm.s390.vfaef
-    1, // llvm.s390.vfaefs
-    1, // llvm.s390.vfaeh
-    1, // llvm.s390.vfaehs
-    1, // llvm.s390.vfaezb
-    1, // llvm.s390.vfaezbs
-    1, // llvm.s390.vfaezf
-    1, // llvm.s390.vfaezfs
-    1, // llvm.s390.vfaezh
-    1, // llvm.s390.vfaezhs
-    1, // llvm.s390.vfcedbs
-    1, // llvm.s390.vfcesbs
-    1, // llvm.s390.vfchdbs
-    1, // llvm.s390.vfchedbs
-    1, // llvm.s390.vfchesbs
-    1, // llvm.s390.vfchsbs
-    1, // llvm.s390.vfeeb
-    1, // llvm.s390.vfeebs
-    1, // llvm.s390.vfeef
-    1, // llvm.s390.vfeefs
-    1, // llvm.s390.vfeeh
-    1, // llvm.s390.vfeehs
-    1, // llvm.s390.vfeezb
-    1, // llvm.s390.vfeezbs
-    1, // llvm.s390.vfeezf
-    1, // llvm.s390.vfeezfs
-    1, // llvm.s390.vfeezh
-    1, // llvm.s390.vfeezhs
-    1, // llvm.s390.vfeneb
-    1, // llvm.s390.vfenebs
-    1, // llvm.s390.vfenef
-    1, // llvm.s390.vfenefs
-    1, // llvm.s390.vfeneh
-    1, // llvm.s390.vfenehs
-    1, // llvm.s390.vfenezb
-    1, // llvm.s390.vfenezbs
-    1, // llvm.s390.vfenezf
-    1, // llvm.s390.vfenezfs
-    1, // llvm.s390.vfenezh
-    1, // llvm.s390.vfenezhs
-    1, // llvm.s390.vfidb
-    1, // llvm.s390.vfisb
-    1, // llvm.s390.vfmaxdb
-    1, // llvm.s390.vfmaxsb
-    1, // llvm.s390.vfmindb
-    1, // llvm.s390.vfminsb
-    1, // llvm.s390.vftcidb
-    1, // llvm.s390.vftcisb
-    1, // llvm.s390.vgfmab
-    1, // llvm.s390.vgfmaf
-    1, // llvm.s390.vgfmag
-    1, // llvm.s390.vgfmah
-    1, // llvm.s390.vgfmb
-    1, // llvm.s390.vgfmf
-    1, // llvm.s390.vgfmg
-    1, // llvm.s390.vgfmh
-    1, // llvm.s390.vistrb
-    1, // llvm.s390.vistrbs
-    1, // llvm.s390.vistrf
-    1, // llvm.s390.vistrfs
-    1, // llvm.s390.vistrh
-    1, // llvm.s390.vistrhs
-    2, // llvm.s390.vlbb
-    2, // llvm.s390.vll
-    2, // llvm.s390.vlrl
-    1, // llvm.s390.vmaeb
-    1, // llvm.s390.vmaef
-    1, // llvm.s390.vmaeh
-    1, // llvm.s390.vmahb
-    1, // llvm.s390.vmahf
-    1, // llvm.s390.vmahh
-    1, // llvm.s390.vmaleb
-    1, // llvm.s390.vmalef
-    1, // llvm.s390.vmaleh
-    1, // llvm.s390.vmalhb
-    1, // llvm.s390.vmalhf
-    1, // llvm.s390.vmalhh
-    1, // llvm.s390.vmalob
-    1, // llvm.s390.vmalof
-    1, // llvm.s390.vmaloh
-    1, // llvm.s390.vmaob
-    1, // llvm.s390.vmaof
-    1, // llvm.s390.vmaoh
-    1, // llvm.s390.vmeb
-    1, // llvm.s390.vmef
-    1, // llvm.s390.vmeh
-    1, // llvm.s390.vmhb
-    1, // llvm.s390.vmhf
-    1, // llvm.s390.vmhh
-    1, // llvm.s390.vmleb
-    1, // llvm.s390.vmlef
-    1, // llvm.s390.vmleh
-    1, // llvm.s390.vmlhb
-    1, // llvm.s390.vmlhf
-    1, // llvm.s390.vmlhh
-    1, // llvm.s390.vmlob
-    1, // llvm.s390.vmlof
-    1, // llvm.s390.vmloh
-    1, // llvm.s390.vmob
-    1, // llvm.s390.vmof
-    1, // llvm.s390.vmoh
-    1, // llvm.s390.vmslg
-    1, // llvm.s390.vpdi
-    1, // llvm.s390.vperm
-    1, // llvm.s390.vpklsf
-    1, // llvm.s390.vpklsfs
-    1, // llvm.s390.vpklsg
-    1, // llvm.s390.vpklsgs
-    1, // llvm.s390.vpklsh
-    1, // llvm.s390.vpklshs
-    1, // llvm.s390.vpksf
-    1, // llvm.s390.vpksfs
-    1, // llvm.s390.vpksg
-    1, // llvm.s390.vpksgs
-    1, // llvm.s390.vpksh
-    1, // llvm.s390.vpkshs
-    1, // llvm.s390.vsbcbiq
-    1, // llvm.s390.vsbiq
-    1, // llvm.s390.vscbib
-    1, // llvm.s390.vscbif
-    1, // llvm.s390.vscbig
-    1, // llvm.s390.vscbih
-    1, // llvm.s390.vscbiq
-    1, // llvm.s390.vsl
-    1, // llvm.s390.vslb
-    1, // llvm.s390.vsldb
-    1, // llvm.s390.vsq
-    1, // llvm.s390.vsra
-    1, // llvm.s390.vsrab
-    1, // llvm.s390.vsrl
-    1, // llvm.s390.vsrlb
-    40, // llvm.s390.vstl
-    1, // llvm.s390.vstrcb
-    1, // llvm.s390.vstrcbs
-    1, // llvm.s390.vstrcf
-    1, // llvm.s390.vstrcfs
-    1, // llvm.s390.vstrch
-    1, // llvm.s390.vstrchs
-    1, // llvm.s390.vstrczb
-    1, // llvm.s390.vstrczbs
-    1, // llvm.s390.vstrczf
-    1, // llvm.s390.vstrczfs
-    1, // llvm.s390.vstrczh
-    1, // llvm.s390.vstrczhs
-    40, // llvm.s390.vstrl
-    1, // llvm.s390.vsumb
-    1, // llvm.s390.vsumgf
-    1, // llvm.s390.vsumgh
-    1, // llvm.s390.vsumh
-    1, // llvm.s390.vsumqf
-    1, // llvm.s390.vsumqg
-    1, // llvm.s390.vtm
-    1, // llvm.s390.vuphb
-    1, // llvm.s390.vuphf
-    1, // llvm.s390.vuphh
-    1, // llvm.s390.vuplb
-    1, // llvm.s390.vuplf
-    1, // llvm.s390.vuplhb
-    1, // llvm.s390.vuplhf
-    1, // llvm.s390.vuplhh
-    1, // llvm.s390.vuplhw
-    1, // llvm.s390.vupllb
-    1, // llvm.s390.vupllf
-    1, // llvm.s390.vupllh
-    16, // llvm.wasm.current.memory
-    43, // llvm.wasm.get.ehselector
-    43, // llvm.wasm.get.exception
-    3, // llvm.wasm.grow.memory
-    3, // llvm.wasm.mem.grow
-    16, // llvm.wasm.mem.size
-    44, // llvm.wasm.rethrow
-    44, // llvm.wasm.throw
-    1, // llvm.x86.3dnow.pavgusb
-    1, // llvm.x86.3dnow.pf2id
-    1, // llvm.x86.3dnow.pfacc
-    1, // llvm.x86.3dnow.pfadd
-    1, // llvm.x86.3dnow.pfcmpeq
-    1, // llvm.x86.3dnow.pfcmpge
-    1, // llvm.x86.3dnow.pfcmpgt
-    1, // llvm.x86.3dnow.pfmax
-    1, // llvm.x86.3dnow.pfmin
-    1, // llvm.x86.3dnow.pfmul
-    1, // llvm.x86.3dnow.pfrcp
-    1, // llvm.x86.3dnow.pfrcpit1
-    1, // llvm.x86.3dnow.pfrcpit2
-    1, // llvm.x86.3dnow.pfrsqit1
-    1, // llvm.x86.3dnow.pfrsqrt
-    1, // llvm.x86.3dnow.pfsub
-    1, // llvm.x86.3dnow.pfsubr
-    1, // llvm.x86.3dnow.pi2fd
-    1, // llvm.x86.3dnow.pmulhrw
-    1, // llvm.x86.3dnowa.pf2iw
-    1, // llvm.x86.3dnowa.pfnacc
-    1, // llvm.x86.3dnowa.pfpnacc
-    1, // llvm.x86.3dnowa.pi2fw
-    1, // llvm.x86.3dnowa.pswapd
-    21, // llvm.x86.addcarry.u32
-    21, // llvm.x86.addcarry.u64
-    21, // llvm.x86.addcarryx.u32
-    21, // llvm.x86.addcarryx.u64
-    1, // llvm.x86.aesni.aesdec
-    1, // llvm.x86.aesni.aesdec.256
-    1, // llvm.x86.aesni.aesdec.512
-    1, // llvm.x86.aesni.aesdeclast
-    1, // llvm.x86.aesni.aesdeclast.256
-    1, // llvm.x86.aesni.aesdeclast.512
-    1, // llvm.x86.aesni.aesenc
-    1, // llvm.x86.aesni.aesenc.256
-    1, // llvm.x86.aesni.aesenc.512
-    1, // llvm.x86.aesni.aesenclast
-    1, // llvm.x86.aesni.aesenclast.256
-    1, // llvm.x86.aesni.aesenclast.512
-    1, // llvm.x86.aesni.aesimc
-    1, // llvm.x86.aesni.aeskeygenassist
-    1, // llvm.x86.avx.addsub.pd.256
-    1, // llvm.x86.avx.addsub.ps.256
-    1, // llvm.x86.avx.blendv.pd.256
-    1, // llvm.x86.avx.blendv.ps.256
-    1, // llvm.x86.avx.cmp.pd.256
-    1, // llvm.x86.avx.cmp.ps.256
-    1, // llvm.x86.avx.cvt.pd2.ps.256
-    1, // llvm.x86.avx.cvt.pd2dq.256
-    1, // llvm.x86.avx.cvt.ps2dq.256
-    1, // llvm.x86.avx.cvtdq2.ps.256
-    1, // llvm.x86.avx.cvtt.pd2dq.256
-    1, // llvm.x86.avx.cvtt.ps2dq.256
-    1, // llvm.x86.avx.dp.ps.256
-    1, // llvm.x86.avx.hadd.pd.256
-    1, // llvm.x86.avx.hadd.ps.256
-    1, // llvm.x86.avx.hsub.pd.256
-    1, // llvm.x86.avx.hsub.ps.256
-    16, // llvm.x86.avx.ldu.dq.256
-    2, // llvm.x86.avx.maskload.pd
-    2, // llvm.x86.avx.maskload.pd.256
-    2, // llvm.x86.avx.maskload.ps
-    2, // llvm.x86.avx.maskload.ps.256
-    21, // llvm.x86.avx.maskstore.pd
-    21, // llvm.x86.avx.maskstore.pd.256
-    21, // llvm.x86.avx.maskstore.ps
-    21, // llvm.x86.avx.maskstore.ps.256
-    1, // llvm.x86.avx.max.pd.256
-    1, // llvm.x86.avx.max.ps.256
-    1, // llvm.x86.avx.min.pd.256
-    1, // llvm.x86.avx.min.ps.256
-    1, // llvm.x86.avx.movmsk.pd.256
-    1, // llvm.x86.avx.movmsk.ps.256
-    1, // llvm.x86.avx.ptestc.256
-    1, // llvm.x86.avx.ptestnzc.256
-    1, // llvm.x86.avx.ptestz.256
-    1, // llvm.x86.avx.rcp.ps.256
-    1, // llvm.x86.avx.round.pd.256
-    1, // llvm.x86.avx.round.ps.256
-    1, // llvm.x86.avx.rsqrt.ps.256
-    1, // llvm.x86.avx.sqrt.pd.256
-    1, // llvm.x86.avx.sqrt.ps.256
-    1, // llvm.x86.avx.vpermilvar.pd
-    1, // llvm.x86.avx.vpermilvar.pd.256
-    1, // llvm.x86.avx.vpermilvar.ps
-    1, // llvm.x86.avx.vpermilvar.ps.256
-    1, // llvm.x86.avx.vtestc.pd
-    1, // llvm.x86.avx.vtestc.pd.256
-    1, // llvm.x86.avx.vtestc.ps
-    1, // llvm.x86.avx.vtestc.ps.256
-    1, // llvm.x86.avx.vtestnzc.pd
-    1, // llvm.x86.avx.vtestnzc.pd.256
-    1, // llvm.x86.avx.vtestnzc.ps
-    1, // llvm.x86.avx.vtestnzc.ps.256
-    1, // llvm.x86.avx.vtestz.pd
-    1, // llvm.x86.avx.vtestz.pd.256
-    1, // llvm.x86.avx.vtestz.ps
-    1, // llvm.x86.avx.vtestz.ps.256
-    3, // llvm.x86.avx.vzeroall
-    3, // llvm.x86.avx.vzeroupper
-    2, // llvm.x86.avx2.gather.d.d
-    2, // llvm.x86.avx2.gather.d.d.256
-    2, // llvm.x86.avx2.gather.d.pd
-    2, // llvm.x86.avx2.gather.d.pd.256
-    2, // llvm.x86.avx2.gather.d.ps
-    2, // llvm.x86.avx2.gather.d.ps.256
-    2, // llvm.x86.avx2.gather.d.q
-    2, // llvm.x86.avx2.gather.d.q.256
-    2, // llvm.x86.avx2.gather.q.d
-    2, // llvm.x86.avx2.gather.q.d.256
-    2, // llvm.x86.avx2.gather.q.pd
-    2, // llvm.x86.avx2.gather.q.pd.256
-    2, // llvm.x86.avx2.gather.q.ps
-    2, // llvm.x86.avx2.gather.q.ps.256
-    2, // llvm.x86.avx2.gather.q.q
-    2, // llvm.x86.avx2.gather.q.q.256
-    2, // llvm.x86.avx2.maskload.d
-    2, // llvm.x86.avx2.maskload.d.256
-    2, // llvm.x86.avx2.maskload.q
-    2, // llvm.x86.avx2.maskload.q.256
-    21, // llvm.x86.avx2.maskstore.d
-    21, // llvm.x86.avx2.maskstore.d.256
-    21, // llvm.x86.avx2.maskstore.q
-    21, // llvm.x86.avx2.maskstore.q.256
-    1, // llvm.x86.avx2.mpsadbw
-    1, // llvm.x86.avx2.packssdw
-    1, // llvm.x86.avx2.packsswb
-    1, // llvm.x86.avx2.packusdw
-    1, // llvm.x86.avx2.packuswb
-    1, // llvm.x86.avx2.padds.b
-    1, // llvm.x86.avx2.padds.w
-    1, // llvm.x86.avx2.paddus.b
-    1, // llvm.x86.avx2.paddus.w
-    1, // llvm.x86.avx2.pblendvb
-    1, // llvm.x86.avx2.permd
-    1, // llvm.x86.avx2.permps
-    1, // llvm.x86.avx2.phadd.d
-    1, // llvm.x86.avx2.phadd.sw
-    1, // llvm.x86.avx2.phadd.w
-    1, // llvm.x86.avx2.phsub.d
-    1, // llvm.x86.avx2.phsub.sw
-    1, // llvm.x86.avx2.phsub.w
-    1, // llvm.x86.avx2.pmadd.ub.sw
-    1, // llvm.x86.avx2.pmadd.wd
-    1, // llvm.x86.avx2.pmovmskb
-    1, // llvm.x86.avx2.pmul.dq
-    1, // llvm.x86.avx2.pmul.hr.sw
-    1, // llvm.x86.avx2.pmulh.w
-    1, // llvm.x86.avx2.pmulhu.w
-    1, // llvm.x86.avx2.pmulu.dq
-    1, // llvm.x86.avx2.psad.bw
-    1, // llvm.x86.avx2.pshuf.b
-    1, // llvm.x86.avx2.psign.b
-    1, // llvm.x86.avx2.psign.d
-    1, // llvm.x86.avx2.psign.w
-    1, // llvm.x86.avx2.psll.d
-    1, // llvm.x86.avx2.psll.q
-    1, // llvm.x86.avx2.psll.w
-    1, // llvm.x86.avx2.pslli.d
-    1, // llvm.x86.avx2.pslli.q
-    1, // llvm.x86.avx2.pslli.w
-    1, // llvm.x86.avx2.psllv.d
-    1, // llvm.x86.avx2.psllv.d.256
-    1, // llvm.x86.avx2.psllv.q
-    1, // llvm.x86.avx2.psllv.q.256
-    1, // llvm.x86.avx2.psra.d
-    1, // llvm.x86.avx2.psra.w
-    1, // llvm.x86.avx2.psrai.d
-    1, // llvm.x86.avx2.psrai.w
-    1, // llvm.x86.avx2.psrav.d
-    1, // llvm.x86.avx2.psrav.d.256
-    1, // llvm.x86.avx2.psrl.d
-    1, // llvm.x86.avx2.psrl.q
-    1, // llvm.x86.avx2.psrl.w
-    1, // llvm.x86.avx2.psrli.d
-    1, // llvm.x86.avx2.psrli.q
-    1, // llvm.x86.avx2.psrli.w
-    1, // llvm.x86.avx2.psrlv.d
-    1, // llvm.x86.avx2.psrlv.d.256
-    1, // llvm.x86.avx2.psrlv.q
-    1, // llvm.x86.avx2.psrlv.q.256
-    1, // llvm.x86.avx2.psubs.b
-    1, // llvm.x86.avx2.psubs.w
-    1, // llvm.x86.avx2.psubus.b
-    1, // llvm.x86.avx2.psubus.w
-    1, // llvm.x86.avx512.broadcastmb.128
-    1, // llvm.x86.avx512.broadcastmb.256
-    1, // llvm.x86.avx512.broadcastmb.512
-    1, // llvm.x86.avx512.broadcastmw.128
-    1, // llvm.x86.avx512.broadcastmw.256
-    1, // llvm.x86.avx512.broadcastmw.512
-    1, // llvm.x86.avx512.cvtsi2sd64
-    1, // llvm.x86.avx512.cvtsi2ss32
-    1, // llvm.x86.avx512.cvtsi2ss64
-    1, // llvm.x86.avx512.cvttsd2si
-    1, // llvm.x86.avx512.cvttsd2si64
-    1, // llvm.x86.avx512.cvttsd2usi
-    1, // llvm.x86.avx512.cvttsd2usi64
-    1, // llvm.x86.avx512.cvttss2si
-    1, // llvm.x86.avx512.cvttss2si64
-    1, // llvm.x86.avx512.cvttss2usi
-    1, // llvm.x86.avx512.cvttss2usi64
-    1, // llvm.x86.avx512.cvtusi2sd
-    1, // llvm.x86.avx512.cvtusi2ss
-    1, // llvm.x86.avx512.cvtusi642sd
-    1, // llvm.x86.avx512.cvtusi642ss
-    1, // llvm.x86.avx512.exp2.pd
-    1, // llvm.x86.avx512.exp2.ps
-    2, // llvm.x86.avx512.gather.dpd.512
-    2, // llvm.x86.avx512.gather.dpi.512
-    2, // llvm.x86.avx512.gather.dpq.512
-    2, // llvm.x86.avx512.gather.dps.512
-    2, // llvm.x86.avx512.gather.qpd.512
-    2, // llvm.x86.avx512.gather.qpi.512
-    2, // llvm.x86.avx512.gather.qpq.512
-    2, // llvm.x86.avx512.gather.qps.512
-    2, // llvm.x86.avx512.gather3div2.df
-    2, // llvm.x86.avx512.gather3div2.di
-    2, // llvm.x86.avx512.gather3div4.df
-    2, // llvm.x86.avx512.gather3div4.di
-    2, // llvm.x86.avx512.gather3div4.sf
-    2, // llvm.x86.avx512.gather3div4.si
-    2, // llvm.x86.avx512.gather3div8.sf
-    2, // llvm.x86.avx512.gather3div8.si
-    2, // llvm.x86.avx512.gather3siv2.df
-    2, // llvm.x86.avx512.gather3siv2.di
-    2, // llvm.x86.avx512.gather3siv4.df
-    2, // llvm.x86.avx512.gather3siv4.di
-    2, // llvm.x86.avx512.gather3siv4.sf
-    2, // llvm.x86.avx512.gather3siv4.si
-    2, // llvm.x86.avx512.gather3siv8.sf
-    2, // llvm.x86.avx512.gather3siv8.si
-    21, // llvm.x86.avx512.gatherpf.dpd.512
-    21, // llvm.x86.avx512.gatherpf.dps.512
-    21, // llvm.x86.avx512.gatherpf.qpd.512
-    21, // llvm.x86.avx512.gatherpf.qps.512
-    1, // llvm.x86.avx512.mask.add.pd.512
-    1, // llvm.x86.avx512.mask.add.ps.512
-    1, // llvm.x86.avx512.mask.add.sd.round
-    1, // llvm.x86.avx512.mask.add.ss.round
-    1, // llvm.x86.avx512.mask.cmp.pd.128
-    1, // llvm.x86.avx512.mask.cmp.pd.256
-    1, // llvm.x86.avx512.mask.cmp.pd.512
-    1, // llvm.x86.avx512.mask.cmp.ps.128
-    1, // llvm.x86.avx512.mask.cmp.ps.256
-    1, // llvm.x86.avx512.mask.cmp.ps.512
-    1, // llvm.x86.avx512.mask.cmp.sd
-    1, // llvm.x86.avx512.mask.cmp.ss
-    1, // llvm.x86.avx512.mask.compress.b.128
-    1, // llvm.x86.avx512.mask.compress.b.256
-    1, // llvm.x86.avx512.mask.compress.b.512
-    1, // llvm.x86.avx512.mask.compress.d.128
-    1, // llvm.x86.avx512.mask.compress.d.256
-    1, // llvm.x86.avx512.mask.compress.d.512
-    1, // llvm.x86.avx512.mask.compress.pd.128
-    1, // llvm.x86.avx512.mask.compress.pd.256
-    1, // llvm.x86.avx512.mask.compress.pd.512
-    1, // llvm.x86.avx512.mask.compress.ps.128
-    1, // llvm.x86.avx512.mask.compress.ps.256
-    1, // llvm.x86.avx512.mask.compress.ps.512
-    1, // llvm.x86.avx512.mask.compress.q.128
-    1, // llvm.x86.avx512.mask.compress.q.256
-    1, // llvm.x86.avx512.mask.compress.q.512
-    21, // llvm.x86.avx512.mask.compress.store.b.128
-    21, // llvm.x86.avx512.mask.compress.store.b.256
-    21, // llvm.x86.avx512.mask.compress.store.b.512
-    21, // llvm.x86.avx512.mask.compress.store.d.128
-    21, // llvm.x86.avx512.mask.compress.store.d.256
-    21, // llvm.x86.avx512.mask.compress.store.d.512
-    21, // llvm.x86.avx512.mask.compress.store.pd.128
-    21, // llvm.x86.avx512.mask.compress.store.pd.256
-    21, // llvm.x86.avx512.mask.compress.store.pd.512
-    21, // llvm.x86.avx512.mask.compress.store.ps.128
-    21, // llvm.x86.avx512.mask.compress.store.ps.256
-    21, // llvm.x86.avx512.mask.compress.store.ps.512
-    21, // llvm.x86.avx512.mask.compress.store.q.128
-    21, // llvm.x86.avx512.mask.compress.store.q.256
-    21, // llvm.x86.avx512.mask.compress.store.q.512
-    21, // llvm.x86.avx512.mask.compress.store.w.128
-    21, // llvm.x86.avx512.mask.compress.store.w.256
-    21, // llvm.x86.avx512.mask.compress.store.w.512
-    1, // llvm.x86.avx512.mask.compress.w.128
-    1, // llvm.x86.avx512.mask.compress.w.256
-    1, // llvm.x86.avx512.mask.compress.w.512
-    1, // llvm.x86.avx512.mask.conflict.d.128
-    1, // llvm.x86.avx512.mask.conflict.d.256
-    1, // llvm.x86.avx512.mask.conflict.d.512
-    1, // llvm.x86.avx512.mask.conflict.q.128
-    1, // llvm.x86.avx512.mask.conflict.q.256
-    1, // llvm.x86.avx512.mask.conflict.q.512
-    1, // llvm.x86.avx512.mask.cvtdq2ps.128
-    1, // llvm.x86.avx512.mask.cvtdq2ps.256
-    1, // llvm.x86.avx512.mask.cvtdq2ps.512
-    1, // llvm.x86.avx512.mask.cvtpd2dq.128
-    1, // llvm.x86.avx512.mask.cvtpd2dq.256
-    1, // llvm.x86.avx512.mask.cvtpd2dq.512
-    1, // llvm.x86.avx512.mask.cvtpd2ps
-    1, // llvm.x86.avx512.mask.cvtpd2ps.256
-    1, // llvm.x86.avx512.mask.cvtpd2ps.512
-    1, // llvm.x86.avx512.mask.cvtpd2qq.128
-    1, // llvm.x86.avx512.mask.cvtpd2qq.256
-    1, // llvm.x86.avx512.mask.cvtpd2qq.512
-    1, // llvm.x86.avx512.mask.cvtpd2udq.128
-    1, // llvm.x86.avx512.mask.cvtpd2udq.256
-    1, // llvm.x86.avx512.mask.cvtpd2udq.512
-    1, // llvm.x86.avx512.mask.cvtpd2uqq.128
-    1, // llvm.x86.avx512.mask.cvtpd2uqq.256
-    1, // llvm.x86.avx512.mask.cvtpd2uqq.512
-    1, // llvm.x86.avx512.mask.cvtps2dq.128
-    1, // llvm.x86.avx512.mask.cvtps2dq.256
-    1, // llvm.x86.avx512.mask.cvtps2dq.512
-    1, // llvm.x86.avx512.mask.cvtps2pd.128
-    1, // llvm.x86.avx512.mask.cvtps2pd.256
-    1, // llvm.x86.avx512.mask.cvtps2pd.512
-    1, // llvm.x86.avx512.mask.cvtps2qq.128
-    1, // llvm.x86.avx512.mask.cvtps2qq.256
-    1, // llvm.x86.avx512.mask.cvtps2qq.512
-    1, // llvm.x86.avx512.mask.cvtps2udq.128
-    1, // llvm.x86.avx512.mask.cvtps2udq.256
-    1, // llvm.x86.avx512.mask.cvtps2udq.512
-    1, // llvm.x86.avx512.mask.cvtps2uqq.128
-    1, // llvm.x86.avx512.mask.cvtps2uqq.256
-    1, // llvm.x86.avx512.mask.cvtps2uqq.512
-    1, // llvm.x86.avx512.mask.cvtqq2pd.128
-    1, // llvm.x86.avx512.mask.cvtqq2pd.256
-    1, // llvm.x86.avx512.mask.cvtqq2pd.512
-    1, // llvm.x86.avx512.mask.cvtqq2ps.128
-    1, // llvm.x86.avx512.mask.cvtqq2ps.256
-    1, // llvm.x86.avx512.mask.cvtqq2ps.512
-    1, // llvm.x86.avx512.mask.cvtsd2ss.round
-    1, // llvm.x86.avx512.mask.cvtss2sd.round
-    1, // llvm.x86.avx512.mask.cvttpd2dq.128
-    1, // llvm.x86.avx512.mask.cvttpd2dq.256
-    1, // llvm.x86.avx512.mask.cvttpd2dq.512
-    1, // llvm.x86.avx512.mask.cvttpd2qq.128
-    1, // llvm.x86.avx512.mask.cvttpd2qq.256
-    1, // llvm.x86.avx512.mask.cvttpd2qq.512
-    1, // llvm.x86.avx512.mask.cvttpd2udq.128
-    1, // llvm.x86.avx512.mask.cvttpd2udq.256
-    1, // llvm.x86.avx512.mask.cvttpd2udq.512
-    1, // llvm.x86.avx512.mask.cvttpd2uqq.128
-    1, // llvm.x86.avx512.mask.cvttpd2uqq.256
-    1, // llvm.x86.avx512.mask.cvttpd2uqq.512
-    1, // llvm.x86.avx512.mask.cvttps2dq.128
-    1, // llvm.x86.avx512.mask.cvttps2dq.256
-    1, // llvm.x86.avx512.mask.cvttps2dq.512
-    1, // llvm.x86.avx512.mask.cvttps2qq.128
-    1, // llvm.x86.avx512.mask.cvttps2qq.256
-    1, // llvm.x86.avx512.mask.cvttps2qq.512
-    1, // llvm.x86.avx512.mask.cvttps2udq.128
-    1, // llvm.x86.avx512.mask.cvttps2udq.256
-    1, // llvm.x86.avx512.mask.cvttps2udq.512
-    1, // llvm.x86.avx512.mask.cvttps2uqq.128
-    1, // llvm.x86.avx512.mask.cvttps2uqq.256
-    1, // llvm.x86.avx512.mask.cvttps2uqq.512
-    1, // llvm.x86.avx512.mask.cvtudq2ps.128
-    1, // llvm.x86.avx512.mask.cvtudq2ps.256
-    1, // llvm.x86.avx512.mask.cvtudq2ps.512
-    1, // llvm.x86.avx512.mask.cvtuqq2pd.128
-    1, // llvm.x86.avx512.mask.cvtuqq2pd.256
-    1, // llvm.x86.avx512.mask.cvtuqq2pd.512
-    1, // llvm.x86.avx512.mask.cvtuqq2ps.128
-    1, // llvm.x86.avx512.mask.cvtuqq2ps.256
-    1, // llvm.x86.avx512.mask.cvtuqq2ps.512
-    1, // llvm.x86.avx512.mask.dbpsadbw.128
-    1, // llvm.x86.avx512.mask.dbpsadbw.256
-    1, // llvm.x86.avx512.mask.dbpsadbw.512
-    1, // llvm.x86.avx512.mask.div.pd.512
-    1, // llvm.x86.avx512.mask.div.ps.512
-    1, // llvm.x86.avx512.mask.div.sd.round
-    1, // llvm.x86.avx512.mask.div.ss.round
-    1, // llvm.x86.avx512.mask.expand.b.128
-    1, // llvm.x86.avx512.mask.expand.b.256
-    1, // llvm.x86.avx512.mask.expand.b.512
-    1, // llvm.x86.avx512.mask.expand.d.128
-    1, // llvm.x86.avx512.mask.expand.d.256
-    1, // llvm.x86.avx512.mask.expand.d.512
-    2, // llvm.x86.avx512.mask.expand.load.b.128
-    2, // llvm.x86.avx512.mask.expand.load.b.256
-    2, // llvm.x86.avx512.mask.expand.load.b.512
-    2, // llvm.x86.avx512.mask.expand.load.d.128
-    2, // llvm.x86.avx512.mask.expand.load.d.256
-    2, // llvm.x86.avx512.mask.expand.load.d.512
-    2, // llvm.x86.avx512.mask.expand.load.pd.128
-    2, // llvm.x86.avx512.mask.expand.load.pd.256
-    2, // llvm.x86.avx512.mask.expand.load.pd.512
-    2, // llvm.x86.avx512.mask.expand.load.ps.128
-    2, // llvm.x86.avx512.mask.expand.load.ps.256
-    2, // llvm.x86.avx512.mask.expand.load.ps.512
-    2, // llvm.x86.avx512.mask.expand.load.q.128
-    2, // llvm.x86.avx512.mask.expand.load.q.256
-    2, // llvm.x86.avx512.mask.expand.load.q.512
-    2, // llvm.x86.avx512.mask.expand.load.w.128
-    2, // llvm.x86.avx512.mask.expand.load.w.256
-    2, // llvm.x86.avx512.mask.expand.load.w.512
-    1, // llvm.x86.avx512.mask.expand.pd.128
-    1, // llvm.x86.avx512.mask.expand.pd.256
-    1, // llvm.x86.avx512.mask.expand.pd.512
-    1, // llvm.x86.avx512.mask.expand.ps.128
-    1, // llvm.x86.avx512.mask.expand.ps.256
-    1, // llvm.x86.avx512.mask.expand.ps.512
-    1, // llvm.x86.avx512.mask.expand.q.128
-    1, // llvm.x86.avx512.mask.expand.q.256
-    1, // llvm.x86.avx512.mask.expand.q.512
-    1, // llvm.x86.avx512.mask.expand.w.128
-    1, // llvm.x86.avx512.mask.expand.w.256
-    1, // llvm.x86.avx512.mask.expand.w.512
-    1, // llvm.x86.avx512.mask.fixupimm.pd.128
-    1, // llvm.x86.avx512.mask.fixupimm.pd.256
-    1, // llvm.x86.avx512.mask.fixupimm.pd.512
-    1, // llvm.x86.avx512.mask.fixupimm.ps.128
-    1, // llvm.x86.avx512.mask.fixupimm.ps.256
-    1, // llvm.x86.avx512.mask.fixupimm.ps.512
-    1, // llvm.x86.avx512.mask.fixupimm.sd
-    1, // llvm.x86.avx512.mask.fixupimm.ss
-    1, // llvm.x86.avx512.mask.fpclass.pd.128
-    1, // llvm.x86.avx512.mask.fpclass.pd.256
-    1, // llvm.x86.avx512.mask.fpclass.pd.512
-    1, // llvm.x86.avx512.mask.fpclass.ps.128
-    1, // llvm.x86.avx512.mask.fpclass.ps.256
-    1, // llvm.x86.avx512.mask.fpclass.ps.512
-    1, // llvm.x86.avx512.mask.fpclass.sd
-    1, // llvm.x86.avx512.mask.fpclass.ss
-    1, // llvm.x86.avx512.mask.getexp.pd.128
-    1, // llvm.x86.avx512.mask.getexp.pd.256
-    1, // llvm.x86.avx512.mask.getexp.pd.512
-    1, // llvm.x86.avx512.mask.getexp.ps.128
-    1, // llvm.x86.avx512.mask.getexp.ps.256
-    1, // llvm.x86.avx512.mask.getexp.ps.512
-    1, // llvm.x86.avx512.mask.getexp.sd
-    1, // llvm.x86.avx512.mask.getexp.ss
-    1, // llvm.x86.avx512.mask.getmant.pd.128
-    1, // llvm.x86.avx512.mask.getmant.pd.256
-    1, // llvm.x86.avx512.mask.getmant.pd.512
-    1, // llvm.x86.avx512.mask.getmant.ps.128
-    1, // llvm.x86.avx512.mask.getmant.ps.256
-    1, // llvm.x86.avx512.mask.getmant.ps.512
-    1, // llvm.x86.avx512.mask.getmant.sd
-    1, // llvm.x86.avx512.mask.getmant.ss
-    1, // llvm.x86.avx512.mask.max.pd.512
-    1, // llvm.x86.avx512.mask.max.ps.512
-    1, // llvm.x86.avx512.mask.max.sd.round
-    1, // llvm.x86.avx512.mask.max.ss.round
-    1, // llvm.x86.avx512.mask.min.pd.512
-    1, // llvm.x86.avx512.mask.min.ps.512
-    1, // llvm.x86.avx512.mask.min.sd.round
-    1, // llvm.x86.avx512.mask.min.ss.round
-    1, // llvm.x86.avx512.mask.mul.pd.512
-    1, // llvm.x86.avx512.mask.mul.ps.512
-    1, // llvm.x86.avx512.mask.mul.sd.round
-    1, // llvm.x86.avx512.mask.mul.ss.round
-    1, // llvm.x86.avx512.mask.padds.b.128
-    1, // llvm.x86.avx512.mask.padds.b.256
-    1, // llvm.x86.avx512.mask.padds.b.512
-    1, // llvm.x86.avx512.mask.padds.w.128
-    1, // llvm.x86.avx512.mask.padds.w.256
-    1, // llvm.x86.avx512.mask.padds.w.512
-    1, // llvm.x86.avx512.mask.paddus.b.128
-    1, // llvm.x86.avx512.mask.paddus.b.256
-    1, // llvm.x86.avx512.mask.paddus.b.512
-    1, // llvm.x86.avx512.mask.paddus.w.128
-    1, // llvm.x86.avx512.mask.paddus.w.256
-    1, // llvm.x86.avx512.mask.paddus.w.512
-    1, // llvm.x86.avx512.mask.permvar.df.256
-    1, // llvm.x86.avx512.mask.permvar.df.512
-    1, // llvm.x86.avx512.mask.permvar.di.256
-    1, // llvm.x86.avx512.mask.permvar.di.512
-    1, // llvm.x86.avx512.mask.permvar.hi.128
-    1, // llvm.x86.avx512.mask.permvar.hi.256
-    1, // llvm.x86.avx512.mask.permvar.hi.512
-    1, // llvm.x86.avx512.mask.permvar.qi.128
-    1, // llvm.x86.avx512.mask.permvar.qi.256
-    1, // llvm.x86.avx512.mask.permvar.qi.512
-    1, // llvm.x86.avx512.mask.permvar.sf.256
-    1, // llvm.x86.avx512.mask.permvar.sf.512
-    1, // llvm.x86.avx512.mask.permvar.si.256
-    1, // llvm.x86.avx512.mask.permvar.si.512
-    1, // llvm.x86.avx512.mask.pmaddubs.w.128
-    1, // llvm.x86.avx512.mask.pmaddubs.w.256
-    1, // llvm.x86.avx512.mask.pmaddubs.w.512
-    1, // llvm.x86.avx512.mask.pmaddw.d.128
-    1, // llvm.x86.avx512.mask.pmaddw.d.256
-    1, // llvm.x86.avx512.mask.pmaddw.d.512
-    1, // llvm.x86.avx512.mask.pmov.db.128
-    1, // llvm.x86.avx512.mask.pmov.db.256
-    1, // llvm.x86.avx512.mask.pmov.db.512
-    21, // llvm.x86.avx512.mask.pmov.db.mem.128
-    21, // llvm.x86.avx512.mask.pmov.db.mem.256
-    21, // llvm.x86.avx512.mask.pmov.db.mem.512
-    1, // llvm.x86.avx512.mask.pmov.dw.128
-    1, // llvm.x86.avx512.mask.pmov.dw.256
-    1, // llvm.x86.avx512.mask.pmov.dw.512
-    21, // llvm.x86.avx512.mask.pmov.dw.mem.128
-    21, // llvm.x86.avx512.mask.pmov.dw.mem.256
-    21, // llvm.x86.avx512.mask.pmov.dw.mem.512
-    1, // llvm.x86.avx512.mask.pmov.qb.128
-    1, // llvm.x86.avx512.mask.pmov.qb.256
-    1, // llvm.x86.avx512.mask.pmov.qb.512
-    21, // llvm.x86.avx512.mask.pmov.qb.mem.128
-    21, // llvm.x86.avx512.mask.pmov.qb.mem.256
-    21, // llvm.x86.avx512.mask.pmov.qb.mem.512
-    1, // llvm.x86.avx512.mask.pmov.qd.128
-    1, // llvm.x86.avx512.mask.pmov.qd.256
-    1, // llvm.x86.avx512.mask.pmov.qd.512
-    21, // llvm.x86.avx512.mask.pmov.qd.mem.128
-    21, // llvm.x86.avx512.mask.pmov.qd.mem.256
-    21, // llvm.x86.avx512.mask.pmov.qd.mem.512
-    1, // llvm.x86.avx512.mask.pmov.qw.128
-    1, // llvm.x86.avx512.mask.pmov.qw.256
-    1, // llvm.x86.avx512.mask.pmov.qw.512
-    21, // llvm.x86.avx512.mask.pmov.qw.mem.128
-    21, // llvm.x86.avx512.mask.pmov.qw.mem.256
-    21, // llvm.x86.avx512.mask.pmov.qw.mem.512
-    1, // llvm.x86.avx512.mask.pmov.wb.128
-    1, // llvm.x86.avx512.mask.pmov.wb.256
-    1, // llvm.x86.avx512.mask.pmov.wb.512
-    21, // llvm.x86.avx512.mask.pmov.wb.mem.128
-    21, // llvm.x86.avx512.mask.pmov.wb.mem.256
-    21, // llvm.x86.avx512.mask.pmov.wb.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.db.128
-    1, // llvm.x86.avx512.mask.pmovs.db.256
-    1, // llvm.x86.avx512.mask.pmovs.db.512
-    21, // llvm.x86.avx512.mask.pmovs.db.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.db.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.db.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.dw.128
-    1, // llvm.x86.avx512.mask.pmovs.dw.256
-    1, // llvm.x86.avx512.mask.pmovs.dw.512
-    21, // llvm.x86.avx512.mask.pmovs.dw.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.dw.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.dw.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.qb.128
-    1, // llvm.x86.avx512.mask.pmovs.qb.256
-    1, // llvm.x86.avx512.mask.pmovs.qb.512
-    21, // llvm.x86.avx512.mask.pmovs.qb.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.qb.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.qb.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.qd.128
-    1, // llvm.x86.avx512.mask.pmovs.qd.256
-    1, // llvm.x86.avx512.mask.pmovs.qd.512
-    21, // llvm.x86.avx512.mask.pmovs.qd.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.qd.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.qd.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.qw.128
-    1, // llvm.x86.avx512.mask.pmovs.qw.256
-    1, // llvm.x86.avx512.mask.pmovs.qw.512
-    21, // llvm.x86.avx512.mask.pmovs.qw.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.qw.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.qw.mem.512
-    1, // llvm.x86.avx512.mask.pmovs.wb.128
-    1, // llvm.x86.avx512.mask.pmovs.wb.256
-    1, // llvm.x86.avx512.mask.pmovs.wb.512
-    21, // llvm.x86.avx512.mask.pmovs.wb.mem.128
-    21, // llvm.x86.avx512.mask.pmovs.wb.mem.256
-    21, // llvm.x86.avx512.mask.pmovs.wb.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.db.128
-    1, // llvm.x86.avx512.mask.pmovus.db.256
-    1, // llvm.x86.avx512.mask.pmovus.db.512
-    21, // llvm.x86.avx512.mask.pmovus.db.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.db.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.db.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.dw.128
-    1, // llvm.x86.avx512.mask.pmovus.dw.256
-    1, // llvm.x86.avx512.mask.pmovus.dw.512
-    21, // llvm.x86.avx512.mask.pmovus.dw.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.dw.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.dw.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.qb.128
-    1, // llvm.x86.avx512.mask.pmovus.qb.256
-    1, // llvm.x86.avx512.mask.pmovus.qb.512
-    21, // llvm.x86.avx512.mask.pmovus.qb.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.qb.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.qb.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.qd.128
-    1, // llvm.x86.avx512.mask.pmovus.qd.256
-    1, // llvm.x86.avx512.mask.pmovus.qd.512
-    21, // llvm.x86.avx512.mask.pmovus.qd.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.qd.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.qd.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.qw.128
-    1, // llvm.x86.avx512.mask.pmovus.qw.256
-    1, // llvm.x86.avx512.mask.pmovus.qw.512
-    21, // llvm.x86.avx512.mask.pmovus.qw.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.qw.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.qw.mem.512
-    1, // llvm.x86.avx512.mask.pmovus.wb.128
-    1, // llvm.x86.avx512.mask.pmovus.wb.256
-    1, // llvm.x86.avx512.mask.pmovus.wb.512
-    21, // llvm.x86.avx512.mask.pmovus.wb.mem.128
-    21, // llvm.x86.avx512.mask.pmovus.wb.mem.256
-    21, // llvm.x86.avx512.mask.pmovus.wb.mem.512
-    1, // llvm.x86.avx512.mask.pmultishift.qb.128
-    1, // llvm.x86.avx512.mask.pmultishift.qb.256
-    1, // llvm.x86.avx512.mask.pmultishift.qb.512
-    1, // llvm.x86.avx512.mask.prol.d.128
-    1, // llvm.x86.avx512.mask.prol.d.256
-    1, // llvm.x86.avx512.mask.prol.d.512
-    1, // llvm.x86.avx512.mask.prol.q.128
-    1, // llvm.x86.avx512.mask.prol.q.256
-    1, // llvm.x86.avx512.mask.prol.q.512
-    1, // llvm.x86.avx512.mask.prolv.d.128
-    1, // llvm.x86.avx512.mask.prolv.d.256
-    1, // llvm.x86.avx512.mask.prolv.d.512
-    1, // llvm.x86.avx512.mask.prolv.q.128
-    1, // llvm.x86.avx512.mask.prolv.q.256
-    1, // llvm.x86.avx512.mask.prolv.q.512
-    1, // llvm.x86.avx512.mask.pror.d.128
-    1, // llvm.x86.avx512.mask.pror.d.256
-    1, // llvm.x86.avx512.mask.pror.d.512
-    1, // llvm.x86.avx512.mask.pror.q.128
-    1, // llvm.x86.avx512.mask.pror.q.256
-    1, // llvm.x86.avx512.mask.pror.q.512
-    1, // llvm.x86.avx512.mask.prorv.d.128
-    1, // llvm.x86.avx512.mask.prorv.d.256
-    1, // llvm.x86.avx512.mask.prorv.d.512
-    1, // llvm.x86.avx512.mask.prorv.q.128
-    1, // llvm.x86.avx512.mask.prorv.q.256
-    1, // llvm.x86.avx512.mask.prorv.q.512
-    1, // llvm.x86.avx512.mask.psubs.b.128
-    1, // llvm.x86.avx512.mask.psubs.b.256
-    1, // llvm.x86.avx512.mask.psubs.b.512
-    1, // llvm.x86.avx512.mask.psubs.w.128
-    1, // llvm.x86.avx512.mask.psubs.w.256
-    1, // llvm.x86.avx512.mask.psubs.w.512
-    1, // llvm.x86.avx512.mask.psubus.b.128
-    1, // llvm.x86.avx512.mask.psubus.b.256
-    1, // llvm.x86.avx512.mask.psubus.b.512
-    1, // llvm.x86.avx512.mask.psubus.w.128
-    1, // llvm.x86.avx512.mask.psubus.w.256
-    1, // llvm.x86.avx512.mask.psubus.w.512
-    1, // llvm.x86.avx512.mask.pternlog.d.128
-    1, // llvm.x86.avx512.mask.pternlog.d.256
-    1, // llvm.x86.avx512.mask.pternlog.d.512
-    1, // llvm.x86.avx512.mask.pternlog.q.128
-    1, // llvm.x86.avx512.mask.pternlog.q.256
-    1, // llvm.x86.avx512.mask.pternlog.q.512
-    1, // llvm.x86.avx512.mask.range.pd.128
-    1, // llvm.x86.avx512.mask.range.pd.256
-    1, // llvm.x86.avx512.mask.range.pd.512
-    1, // llvm.x86.avx512.mask.range.ps.128
-    1, // llvm.x86.avx512.mask.range.ps.256
-    1, // llvm.x86.avx512.mask.range.ps.512
-    1, // llvm.x86.avx512.mask.range.sd
-    1, // llvm.x86.avx512.mask.range.ss
-    1, // llvm.x86.avx512.mask.reduce.pd.128
-    1, // llvm.x86.avx512.mask.reduce.pd.256
-    1, // llvm.x86.avx512.mask.reduce.pd.512
-    1, // llvm.x86.avx512.mask.reduce.ps.128
-    1, // llvm.x86.avx512.mask.reduce.ps.256
-    1, // llvm.x86.avx512.mask.reduce.ps.512
-    1, // llvm.x86.avx512.mask.reduce.sd
-    1, // llvm.x86.avx512.mask.reduce.ss
-    1, // llvm.x86.avx512.mask.rndscale.pd.128
-    1, // llvm.x86.avx512.mask.rndscale.pd.256
-    1, // llvm.x86.avx512.mask.rndscale.pd.512
-    1, // llvm.x86.avx512.mask.rndscale.ps.128
-    1, // llvm.x86.avx512.mask.rndscale.ps.256
-    1, // llvm.x86.avx512.mask.rndscale.ps.512
-    1, // llvm.x86.avx512.mask.rndscale.sd
-    1, // llvm.x86.avx512.mask.rndscale.ss
-    1, // llvm.x86.avx512.mask.scalef.pd.128
-    1, // llvm.x86.avx512.mask.scalef.pd.256
-    1, // llvm.x86.avx512.mask.scalef.pd.512
-    1, // llvm.x86.avx512.mask.scalef.ps.128
-    1, // llvm.x86.avx512.mask.scalef.ps.256
-    1, // llvm.x86.avx512.mask.scalef.ps.512
-    1, // llvm.x86.avx512.mask.scalef.sd
-    1, // llvm.x86.avx512.mask.scalef.ss
-    1, // llvm.x86.avx512.mask.sqrt.pd.128
-    1, // llvm.x86.avx512.mask.sqrt.pd.256
-    1, // llvm.x86.avx512.mask.sqrt.pd.512
-    1, // llvm.x86.avx512.mask.sqrt.ps.128
-    1, // llvm.x86.avx512.mask.sqrt.ps.256
-    1, // llvm.x86.avx512.mask.sqrt.ps.512
-    1, // llvm.x86.avx512.mask.sqrt.sd
-    1, // llvm.x86.avx512.mask.sqrt.ss
-    21, // llvm.x86.avx512.mask.store.ss
-    1, // llvm.x86.avx512.mask.sub.pd.512
-    1, // llvm.x86.avx512.mask.sub.ps.512
-    1, // llvm.x86.avx512.mask.sub.sd.round
-    1, // llvm.x86.avx512.mask.sub.ss.round
-    1, // llvm.x86.avx512.mask.vcvtph2ps.128
-    1, // llvm.x86.avx512.mask.vcvtph2ps.256
-    1, // llvm.x86.avx512.mask.vcvtph2ps.512
-    1, // llvm.x86.avx512.mask.vcvtps2ph.128
-    1, // llvm.x86.avx512.mask.vcvtps2ph.256
-    1, // llvm.x86.avx512.mask.vcvtps2ph.512
-    1, // llvm.x86.avx512.mask.vfmadd.pd.128
-    1, // llvm.x86.avx512.mask.vfmadd.pd.256
-    1, // llvm.x86.avx512.mask.vfmadd.pd.512
-    1, // llvm.x86.avx512.mask.vfmadd.ps.128
-    1, // llvm.x86.avx512.mask.vfmadd.ps.256
-    1, // llvm.x86.avx512.mask.vfmadd.ps.512
-    1, // llvm.x86.avx512.mask.vfmadd.sd
-    1, // llvm.x86.avx512.mask.vfmadd.ss
-    1, // llvm.x86.avx512.mask.vfmaddsub.pd.128
-    1, // llvm.x86.avx512.mask.vfmaddsub.pd.256
-    1, // llvm.x86.avx512.mask.vfmaddsub.pd.512
-    1, // llvm.x86.avx512.mask.vfmaddsub.ps.128
-    1, // llvm.x86.avx512.mask.vfmaddsub.ps.256
-    1, // llvm.x86.avx512.mask.vfmaddsub.ps.512
-    1, // llvm.x86.avx512.mask.vfnmadd.pd.128
-    1, // llvm.x86.avx512.mask.vfnmadd.pd.256
-    1, // llvm.x86.avx512.mask.vfnmadd.pd.512
-    1, // llvm.x86.avx512.mask.vfnmadd.ps.128
-    1, // llvm.x86.avx512.mask.vfnmadd.ps.256
-    1, // llvm.x86.avx512.mask.vfnmadd.ps.512
-    1, // llvm.x86.avx512.mask.vfnmsub.pd.128
-    1, // llvm.x86.avx512.mask.vfnmsub.pd.256
-    1, // llvm.x86.avx512.mask.vfnmsub.pd.512
-    1, // llvm.x86.avx512.mask.vfnmsub.ps.128
-    1, // llvm.x86.avx512.mask.vfnmsub.ps.256
-    1, // llvm.x86.avx512.mask.vfnmsub.ps.512
-    1, // llvm.x86.avx512.mask.vpdpbusd.128
-    1, // llvm.x86.avx512.mask.vpdpbusd.256
-    1, // llvm.x86.avx512.mask.vpdpbusd.512
-    1, // llvm.x86.avx512.mask.vpdpbusds.128
-    1, // llvm.x86.avx512.mask.vpdpbusds.256
-    1, // llvm.x86.avx512.mask.vpdpbusds.512
-    1, // llvm.x86.avx512.mask.vpdpwssd.128
-    1, // llvm.x86.avx512.mask.vpdpwssd.256
-    1, // llvm.x86.avx512.mask.vpdpwssd.512
-    1, // llvm.x86.avx512.mask.vpdpwssds.128
-    1, // llvm.x86.avx512.mask.vpdpwssds.256
-    1, // llvm.x86.avx512.mask.vpdpwssds.512
-    1, // llvm.x86.avx512.mask.vpermi2var.d.128
-    1, // llvm.x86.avx512.mask.vpermi2var.d.256
-    1, // llvm.x86.avx512.mask.vpermi2var.d.512
-    1, // llvm.x86.avx512.mask.vpermi2var.hi.128
-    1, // llvm.x86.avx512.mask.vpermi2var.hi.256
-    1, // llvm.x86.avx512.mask.vpermi2var.hi.512
-    1, // llvm.x86.avx512.mask.vpermi2var.pd.128
-    1, // llvm.x86.avx512.mask.vpermi2var.pd.256
-    1, // llvm.x86.avx512.mask.vpermi2var.pd.512
-    1, // llvm.x86.avx512.mask.vpermi2var.ps.128
-    1, // llvm.x86.avx512.mask.vpermi2var.ps.256
-    1, // llvm.x86.avx512.mask.vpermi2var.ps.512
-    1, // llvm.x86.avx512.mask.vpermi2var.q.128
-    1, // llvm.x86.avx512.mask.vpermi2var.q.256
-    1, // llvm.x86.avx512.mask.vpermi2var.q.512
-    1, // llvm.x86.avx512.mask.vpermi2var.qi.128
-    1, // llvm.x86.avx512.mask.vpermi2var.qi.256
-    1, // llvm.x86.avx512.mask.vpermi2var.qi.512
-    1, // llvm.x86.avx512.mask.vpermt2var.d.128
-    1, // llvm.x86.avx512.mask.vpermt2var.d.256
-    1, // llvm.x86.avx512.mask.vpermt2var.d.512
-    1, // llvm.x86.avx512.mask.vpermt2var.hi.128
-    1, // llvm.x86.avx512.mask.vpermt2var.hi.256
-    1, // llvm.x86.avx512.mask.vpermt2var.hi.512
-    1, // llvm.x86.avx512.mask.vpermt2var.pd.128
-    1, // llvm.x86.avx512.mask.vpermt2var.pd.256
-    1, // llvm.x86.avx512.mask.vpermt2var.pd.512
-    1, // llvm.x86.avx512.mask.vpermt2var.ps.128
-    1, // llvm.x86.avx512.mask.vpermt2var.ps.256
-    1, // llvm.x86.avx512.mask.vpermt2var.ps.512
-    1, // llvm.x86.avx512.mask.vpermt2var.q.128
-    1, // llvm.x86.avx512.mask.vpermt2var.q.256
-    1, // llvm.x86.avx512.mask.vpermt2var.q.512
-    1, // llvm.x86.avx512.mask.vpermt2var.qi.128
-    1, // llvm.x86.avx512.mask.vpermt2var.qi.256
-    1, // llvm.x86.avx512.mask.vpermt2var.qi.512
-    1, // llvm.x86.avx512.mask.vpmadd52h.uq.128
-    1, // llvm.x86.avx512.mask.vpmadd52h.uq.256
-    1, // llvm.x86.avx512.mask.vpmadd52h.uq.512
-    1, // llvm.x86.avx512.mask.vpmadd52l.uq.128
-    1, // llvm.x86.avx512.mask.vpmadd52l.uq.256
-    1, // llvm.x86.avx512.mask.vpmadd52l.uq.512
-    1, // llvm.x86.avx512.mask.vpshld.d.128
-    1, // llvm.x86.avx512.mask.vpshld.d.256
-    1, // llvm.x86.avx512.mask.vpshld.d.512
-    1, // llvm.x86.avx512.mask.vpshld.q.128
-    1, // llvm.x86.avx512.mask.vpshld.q.256
-    1, // llvm.x86.avx512.mask.vpshld.q.512
-    1, // llvm.x86.avx512.mask.vpshld.w.128
-    1, // llvm.x86.avx512.mask.vpshld.w.256
-    1, // llvm.x86.avx512.mask.vpshld.w.512
-    1, // llvm.x86.avx512.mask.vpshldv.d.128
-    1, // llvm.x86.avx512.mask.vpshldv.d.256
-    1, // llvm.x86.avx512.mask.vpshldv.d.512
-    1, // llvm.x86.avx512.mask.vpshldv.q.128
-    1, // llvm.x86.avx512.mask.vpshldv.q.256
-    1, // llvm.x86.avx512.mask.vpshldv.q.512
-    1, // llvm.x86.avx512.mask.vpshldv.w.128
-    1, // llvm.x86.avx512.mask.vpshldv.w.256
-    1, // llvm.x86.avx512.mask.vpshldv.w.512
-    1, // llvm.x86.avx512.mask.vpshrd.d.128
-    1, // llvm.x86.avx512.mask.vpshrd.d.256
-    1, // llvm.x86.avx512.mask.vpshrd.d.512
-    1, // llvm.x86.avx512.mask.vpshrd.q.128
-    1, // llvm.x86.avx512.mask.vpshrd.q.256
-    1, // llvm.x86.avx512.mask.vpshrd.q.512
-    1, // llvm.x86.avx512.mask.vpshrd.w.128
-    1, // llvm.x86.avx512.mask.vpshrd.w.256
-    1, // llvm.x86.avx512.mask.vpshrd.w.512
-    1, // llvm.x86.avx512.mask.vpshrdv.d.128
-    1, // llvm.x86.avx512.mask.vpshrdv.d.256
-    1, // llvm.x86.avx512.mask.vpshrdv.d.512
-    1, // llvm.x86.avx512.mask.vpshrdv.q.128
-    1, // llvm.x86.avx512.mask.vpshrdv.q.256
-    1, // llvm.x86.avx512.mask.vpshrdv.q.512
-    1, // llvm.x86.avx512.mask.vpshrdv.w.128
-    1, // llvm.x86.avx512.mask.vpshrdv.w.256
-    1, // llvm.x86.avx512.mask.vpshrdv.w.512
-    1, // llvm.x86.avx512.mask.vpshufbitqmb.128
-    1, // llvm.x86.avx512.mask.vpshufbitqmb.256
-    1, // llvm.x86.avx512.mask.vpshufbitqmb.512
-    1, // llvm.x86.avx512.mask3.vfmadd.pd.128
-    1, // llvm.x86.avx512.mask3.vfmadd.pd.256
-    1, // llvm.x86.avx512.mask3.vfmadd.pd.512
-    1, // llvm.x86.avx512.mask3.vfmadd.ps.128
-    1, // llvm.x86.avx512.mask3.vfmadd.ps.256
-    1, // llvm.x86.avx512.mask3.vfmadd.ps.512
-    1, // llvm.x86.avx512.mask3.vfmadd.sd
-    1, // llvm.x86.avx512.mask3.vfmadd.ss
-    1, // llvm.x86.avx512.mask3.vfmaddsub.pd.128
-    1, // llvm.x86.avx512.mask3.vfmaddsub.pd.256
-    1, // llvm.x86.avx512.mask3.vfmaddsub.pd.512
-    1, // llvm.x86.avx512.mask3.vfmaddsub.ps.128
-    1, // llvm.x86.avx512.mask3.vfmaddsub.ps.256
-    1, // llvm.x86.avx512.mask3.vfmaddsub.ps.512
-    1, // llvm.x86.avx512.mask3.vfmsub.pd.128
-    1, // llvm.x86.avx512.mask3.vfmsub.pd.256
-    1, // llvm.x86.avx512.mask3.vfmsub.pd.512
-    1, // llvm.x86.avx512.mask3.vfmsub.ps.128
-    1, // llvm.x86.avx512.mask3.vfmsub.ps.256
-    1, // llvm.x86.avx512.mask3.vfmsub.ps.512
-    1, // llvm.x86.avx512.mask3.vfmsub.sd
-    1, // llvm.x86.avx512.mask3.vfmsub.ss
-    1, // llvm.x86.avx512.mask3.vfmsubadd.pd.128
-    1, // llvm.x86.avx512.mask3.vfmsubadd.pd.256
-    1, // llvm.x86.avx512.mask3.vfmsubadd.pd.512
-    1, // llvm.x86.avx512.mask3.vfmsubadd.ps.128
-    1, // llvm.x86.avx512.mask3.vfmsubadd.ps.256
-    1, // llvm.x86.avx512.mask3.vfmsubadd.ps.512
-    1, // llvm.x86.avx512.mask3.vfnmsub.pd.128
-    1, // llvm.x86.avx512.mask3.vfnmsub.pd.256
-    1, // llvm.x86.avx512.mask3.vfnmsub.pd.512
-    1, // llvm.x86.avx512.mask3.vfnmsub.ps.128
-    1, // llvm.x86.avx512.mask3.vfnmsub.ps.256
-    1, // llvm.x86.avx512.mask3.vfnmsub.ps.512
-    1, // llvm.x86.avx512.mask3.vfnmsub.sd
-    1, // llvm.x86.avx512.mask3.vfnmsub.ss
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.128
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.256
-    1, // llvm.x86.avx512.maskz.fixupimm.pd.512
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.128
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.256
-    1, // llvm.x86.avx512.maskz.fixupimm.ps.512
-    1, // llvm.x86.avx512.maskz.fixupimm.sd
-    1, // llvm.x86.avx512.maskz.fixupimm.ss
-    1, // llvm.x86.avx512.maskz.pternlog.d.128
-    1, // llvm.x86.avx512.maskz.pternlog.d.256
-    1, // llvm.x86.avx512.maskz.pternlog.d.512
-    1, // llvm.x86.avx512.maskz.pternlog.q.128
-    1, // llvm.x86.avx512.maskz.pternlog.q.256
-    1, // llvm.x86.avx512.maskz.pternlog.q.512
-    1, // llvm.x86.avx512.maskz.vfmadd.pd.128
-    1, // llvm.x86.avx512.maskz.vfmadd.pd.256
-    1, // llvm.x86.avx512.maskz.vfmadd.pd.512
-    1, // llvm.x86.avx512.maskz.vfmadd.ps.128
-    1, // llvm.x86.avx512.maskz.vfmadd.ps.256
-    1, // llvm.x86.avx512.maskz.vfmadd.ps.512
-    1, // llvm.x86.avx512.maskz.vfmadd.sd
-    1, // llvm.x86.avx512.maskz.vfmadd.ss
-    1, // llvm.x86.avx512.maskz.vfmaddsub.pd.128
-    1, // llvm.x86.avx512.maskz.vfmaddsub.pd.256
-    1, // llvm.x86.avx512.maskz.vfmaddsub.pd.512
-    1, // llvm.x86.avx512.maskz.vfmaddsub.ps.128
-    1, // llvm.x86.avx512.maskz.vfmaddsub.ps.256
-    1, // llvm.x86.avx512.maskz.vfmaddsub.ps.512
-    1, // llvm.x86.avx512.maskz.vpdpbusd.128
-    1, // llvm.x86.avx512.maskz.vpdpbusd.256
-    1, // llvm.x86.avx512.maskz.vpdpbusd.512
-    1, // llvm.x86.avx512.maskz.vpdpbusds.128
-    1, // llvm.x86.avx512.maskz.vpdpbusds.256
-    1, // llvm.x86.avx512.maskz.vpdpbusds.512
-    1, // llvm.x86.avx512.maskz.vpdpwssd.128
-    1, // llvm.x86.avx512.maskz.vpdpwssd.256
-    1, // llvm.x86.avx512.maskz.vpdpwssd.512
-    1, // llvm.x86.avx512.maskz.vpdpwssds.128
-    1, // llvm.x86.avx512.maskz.vpdpwssds.256
-    1, // llvm.x86.avx512.maskz.vpdpwssds.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.d.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.d.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.d.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.hi.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.hi.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.hi.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.pd.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.pd.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.pd.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.ps.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.ps.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.ps.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.q.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.q.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.q.512
-    1, // llvm.x86.avx512.maskz.vpermt2var.qi.128
-    1, // llvm.x86.avx512.maskz.vpermt2var.qi.256
-    1, // llvm.x86.avx512.maskz.vpermt2var.qi.512
-    1, // llvm.x86.avx512.maskz.vpmadd52h.uq.128
-    1, // llvm.x86.avx512.maskz.vpmadd52h.uq.256
-    1, // llvm.x86.avx512.maskz.vpmadd52h.uq.512
-    1, // llvm.x86.avx512.maskz.vpmadd52l.uq.128
-    1, // llvm.x86.avx512.maskz.vpmadd52l.uq.256
-    1, // llvm.x86.avx512.maskz.vpmadd52l.uq.512
-    1, // llvm.x86.avx512.maskz.vpshldv.d.128
-    1, // llvm.x86.avx512.maskz.vpshldv.d.256
-    1, // llvm.x86.avx512.maskz.vpshldv.d.512
-    1, // llvm.x86.avx512.maskz.vpshldv.q.128
-    1, // llvm.x86.avx512.maskz.vpshldv.q.256
-    1, // llvm.x86.avx512.maskz.vpshldv.q.512
-    1, // llvm.x86.avx512.maskz.vpshldv.w.128
-    1, // llvm.x86.avx512.maskz.vpshldv.w.256
-    1, // llvm.x86.avx512.maskz.vpshldv.w.512
-    1, // llvm.x86.avx512.maskz.vpshrdv.d.128
-    1, // llvm.x86.avx512.maskz.vpshrdv.d.256
-    1, // llvm.x86.avx512.maskz.vpshrdv.d.512
-    1, // llvm.x86.avx512.maskz.vpshrdv.q.128
-    1, // llvm.x86.avx512.maskz.vpshrdv.q.256
-    1, // llvm.x86.avx512.maskz.vpshrdv.q.512
-    1, // llvm.x86.avx512.maskz.vpshrdv.w.128
-    1, // llvm.x86.avx512.maskz.vpshrdv.w.256
-    1, // llvm.x86.avx512.maskz.vpshrdv.w.512
-    1, // llvm.x86.avx512.packssdw.512
-    1, // llvm.x86.avx512.packsswb.512
-    1, // llvm.x86.avx512.packusdw.512
-    1, // llvm.x86.avx512.packuswb.512
-    1, // llvm.x86.avx512.pmul.dq.512
-    1, // llvm.x86.avx512.pmul.hr.sw.512
-    1, // llvm.x86.avx512.pmulh.w.512
-    1, // llvm.x86.avx512.pmulhu.w.512
-    1, // llvm.x86.avx512.pmulu.dq.512
-    1, // llvm.x86.avx512.psad.bw.512
-    1, // llvm.x86.avx512.pshuf.b.512
-    1, // llvm.x86.avx512.psll.d.512
-    1, // llvm.x86.avx512.psll.q.512
-    1, // llvm.x86.avx512.psll.w.512
-    1, // llvm.x86.avx512.pslli.d.512
-    1, // llvm.x86.avx512.pslli.q.512
-    1, // llvm.x86.avx512.pslli.w.512
-    1, // llvm.x86.avx512.psllv.d.512
-    1, // llvm.x86.avx512.psllv.q.512
-    1, // llvm.x86.avx512.psllv.w.128
-    1, // llvm.x86.avx512.psllv.w.256
-    1, // llvm.x86.avx512.psllv.w.512
-    1, // llvm.x86.avx512.psra.d.512
-    1, // llvm.x86.avx512.psra.q.128
-    1, // llvm.x86.avx512.psra.q.256
-    1, // llvm.x86.avx512.psra.q.512
-    1, // llvm.x86.avx512.psra.w.512
-    1, // llvm.x86.avx512.psrai.d.512
-    1, // llvm.x86.avx512.psrai.q.128
-    1, // llvm.x86.avx512.psrai.q.256
-    1, // llvm.x86.avx512.psrai.q.512
-    1, // llvm.x86.avx512.psrai.w.512
-    1, // llvm.x86.avx512.psrav.d.512
-    1, // llvm.x86.avx512.psrav.q.128
-    1, // llvm.x86.avx512.psrav.q.256
-    1, // llvm.x86.avx512.psrav.q.512
-    1, // llvm.x86.avx512.psrav.w.128
-    1, // llvm.x86.avx512.psrav.w.256
-    1, // llvm.x86.avx512.psrav.w.512
-    1, // llvm.x86.avx512.psrl.d.512
-    1, // llvm.x86.avx512.psrl.q.512
-    1, // llvm.x86.avx512.psrl.w.512
-    1, // llvm.x86.avx512.psrli.d.512
-    1, // llvm.x86.avx512.psrli.q.512
-    1, // llvm.x86.avx512.psrli.w.512
-    1, // llvm.x86.avx512.psrlv.d.512
-    1, // llvm.x86.avx512.psrlv.q.512
-    1, // llvm.x86.avx512.psrlv.w.128
-    1, // llvm.x86.avx512.psrlv.w.256
-    1, // llvm.x86.avx512.psrlv.w.512
-    1, // llvm.x86.avx512.rcp14.pd.128
-    1, // llvm.x86.avx512.rcp14.pd.256
-    1, // llvm.x86.avx512.rcp14.pd.512
-    1, // llvm.x86.avx512.rcp14.ps.128
-    1, // llvm.x86.avx512.rcp14.ps.256
-    1, // llvm.x86.avx512.rcp14.ps.512
-    1, // llvm.x86.avx512.rcp14.sd
-    1, // llvm.x86.avx512.rcp14.ss
-    1, // llvm.x86.avx512.rcp28.pd
-    1, // llvm.x86.avx512.rcp28.ps
-    1, // llvm.x86.avx512.rcp28.sd
-    1, // llvm.x86.avx512.rcp28.ss
-    1, // llvm.x86.avx512.rsqrt14.pd.128
-    1, // llvm.x86.avx512.rsqrt14.pd.256
-    1, // llvm.x86.avx512.rsqrt14.pd.512
-    1, // llvm.x86.avx512.rsqrt14.ps.128
-    1, // llvm.x86.avx512.rsqrt14.ps.256
-    1, // llvm.x86.avx512.rsqrt14.ps.512
-    1, // llvm.x86.avx512.rsqrt14.sd
-    1, // llvm.x86.avx512.rsqrt14.ss
-    1, // llvm.x86.avx512.rsqrt28.pd
-    1, // llvm.x86.avx512.rsqrt28.ps
-    1, // llvm.x86.avx512.rsqrt28.sd
-    1, // llvm.x86.avx512.rsqrt28.ss
-    21, // llvm.x86.avx512.scatter.dpd.512
-    21, // llvm.x86.avx512.scatter.dpi.512
-    21, // llvm.x86.avx512.scatter.dpq.512
-    21, // llvm.x86.avx512.scatter.dps.512
-    21, // llvm.x86.avx512.scatter.qpd.512
-    21, // llvm.x86.avx512.scatter.qpi.512
-    21, // llvm.x86.avx512.scatter.qpq.512
-    21, // llvm.x86.avx512.scatter.qps.512
-    21, // llvm.x86.avx512.scatterdiv2.df
-    21, // llvm.x86.avx512.scatterdiv2.di
-    21, // llvm.x86.avx512.scatterdiv4.df
-    21, // llvm.x86.avx512.scatterdiv4.di
-    21, // llvm.x86.avx512.scatterdiv4.sf
-    21, // llvm.x86.avx512.scatterdiv4.si
-    21, // llvm.x86.avx512.scatterdiv8.sf
-    21, // llvm.x86.avx512.scatterdiv8.si
-    21, // llvm.x86.avx512.scatterpf.dpd.512
-    21, // llvm.x86.avx512.scatterpf.dps.512
-    21, // llvm.x86.avx512.scatterpf.qpd.512
-    21, // llvm.x86.avx512.scatterpf.qps.512
-    21, // llvm.x86.avx512.scattersiv2.df
-    21, // llvm.x86.avx512.scattersiv2.di
-    21, // llvm.x86.avx512.scattersiv4.df
-    21, // llvm.x86.avx512.scattersiv4.di
-    21, // llvm.x86.avx512.scattersiv4.sf
-    21, // llvm.x86.avx512.scattersiv4.si
-    21, // llvm.x86.avx512.scattersiv8.sf
-    21, // llvm.x86.avx512.scattersiv8.si
-    2, // llvm.x86.avx512.vbroadcast.sd.512
-    2, // llvm.x86.avx512.vbroadcast.ss.512
-    1, // llvm.x86.avx512.vcomi.sd
-    1, // llvm.x86.avx512.vcomi.ss
-    1, // llvm.x86.avx512.vcvtsd2si32
-    1, // llvm.x86.avx512.vcvtsd2si64
-    1, // llvm.x86.avx512.vcvtsd2usi32
-    1, // llvm.x86.avx512.vcvtsd2usi64
-    1, // llvm.x86.avx512.vcvtss2si32
-    1, // llvm.x86.avx512.vcvtss2si64
-    1, // llvm.x86.avx512.vcvtss2usi32
-    1, // llvm.x86.avx512.vcvtss2usi64
-    1, // llvm.x86.avx512.vpermilvar.pd.512
-    1, // llvm.x86.avx512.vpermilvar.ps.512
-    1, // llvm.x86.bmi.bextr.32
-    1, // llvm.x86.bmi.bextr.64
-    1, // llvm.x86.bmi.bzhi.32
-    1, // llvm.x86.bmi.bzhi.64
-    1, // llvm.x86.bmi.pdep.32
-    1, // llvm.x86.bmi.pdep.64
-    1, // llvm.x86.bmi.pext.32
-    1, // llvm.x86.bmi.pext.64
-    3, // llvm.x86.clflushopt
-    3, // llvm.x86.clrssbsy
-    3, // llvm.x86.clwb
-    3, // llvm.x86.clzero
-    3, // llvm.x86.flags.read.u32
-    3, // llvm.x86.flags.read.u64
-    3, // llvm.x86.flags.write.u32
-    3, // llvm.x86.flags.write.u64
-    1, // llvm.x86.fma.vfmadd.pd
-    1, // llvm.x86.fma.vfmadd.pd.256
-    1, // llvm.x86.fma.vfmadd.ps
-    1, // llvm.x86.fma.vfmadd.ps.256
-    1, // llvm.x86.fma.vfmadd.sd
-    1, // llvm.x86.fma.vfmadd.ss
-    1, // llvm.x86.fma.vfmaddsub.pd
-    1, // llvm.x86.fma.vfmaddsub.pd.256
-    1, // llvm.x86.fma.vfmaddsub.ps
-    1, // llvm.x86.fma.vfmaddsub.ps.256
-    1, // llvm.x86.fma.vfmsub.pd
-    1, // llvm.x86.fma.vfmsub.pd.256
-    1, // llvm.x86.fma.vfmsub.ps
-    1, // llvm.x86.fma.vfmsub.ps.256
-    1, // llvm.x86.fma.vfmsub.sd
-    1, // llvm.x86.fma.vfmsub.ss
-    1, // llvm.x86.fma.vfmsubadd.pd
-    1, // llvm.x86.fma.vfmsubadd.pd.256
-    1, // llvm.x86.fma.vfmsubadd.ps
-    1, // llvm.x86.fma.vfmsubadd.ps.256
-    1, // llvm.x86.fma.vfnmadd.pd
-    1, // llvm.x86.fma.vfnmadd.pd.256
-    1, // llvm.x86.fma.vfnmadd.ps
-    1, // llvm.x86.fma.vfnmadd.ps.256
-    1, // llvm.x86.fma.vfnmadd.sd
-    1, // llvm.x86.fma.vfnmadd.ss
-    1, // llvm.x86.fma.vfnmsub.pd
-    1, // llvm.x86.fma.vfnmsub.pd.256
-    1, // llvm.x86.fma.vfnmsub.ps
-    1, // llvm.x86.fma.vfnmsub.ps.256
-    1, // llvm.x86.fma.vfnmsub.sd
-    1, // llvm.x86.fma.vfnmsub.ss
-    1, // llvm.x86.fma4.vfmadd.sd
-    1, // llvm.x86.fma4.vfmadd.ss
-    3, // llvm.x86.fxrstor
-    3, // llvm.x86.fxrstor64
-    3, // llvm.x86.fxsave
-    3, // llvm.x86.fxsave64
-    3, // llvm.x86.incsspd
-    3, // llvm.x86.incsspq
-    3, // llvm.x86.int
-    3, // llvm.x86.llwpcb
-    3, // llvm.x86.lwpins32
-    3, // llvm.x86.lwpins64
-    3, // llvm.x86.lwpval32
-    3, // llvm.x86.lwpval64
-    3, // llvm.x86.mmx.emms
-    3, // llvm.x86.mmx.femms
-    3, // llvm.x86.mmx.maskmovq
-    3, // llvm.x86.mmx.movnt.dq
-    1, // llvm.x86.mmx.packssdw
-    1, // llvm.x86.mmx.packsswb
-    1, // llvm.x86.mmx.packuswb
-    1, // llvm.x86.mmx.padd.b
-    1, // llvm.x86.mmx.padd.d
-    1, // llvm.x86.mmx.padd.q
-    1, // llvm.x86.mmx.padd.w
-    1, // llvm.x86.mmx.padds.b
-    1, // llvm.x86.mmx.padds.w
-    1, // llvm.x86.mmx.paddus.b
-    1, // llvm.x86.mmx.paddus.w
-    1, // llvm.x86.mmx.palignr.b
-    1, // llvm.x86.mmx.pand
-    1, // llvm.x86.mmx.pandn
-    1, // llvm.x86.mmx.pavg.b
-    1, // llvm.x86.mmx.pavg.w
-    1, // llvm.x86.mmx.pcmpeq.b
-    1, // llvm.x86.mmx.pcmpeq.d
-    1, // llvm.x86.mmx.pcmpeq.w
-    1, // llvm.x86.mmx.pcmpgt.b
-    1, // llvm.x86.mmx.pcmpgt.d
-    1, // llvm.x86.mmx.pcmpgt.w
-    1, // llvm.x86.mmx.pextr.w
-    1, // llvm.x86.mmx.pinsr.w
-    1, // llvm.x86.mmx.pmadd.wd
-    1, // llvm.x86.mmx.pmaxs.w
-    1, // llvm.x86.mmx.pmaxu.b
-    1, // llvm.x86.mmx.pmins.w
-    1, // llvm.x86.mmx.pminu.b
-    1, // llvm.x86.mmx.pmovmskb
-    1, // llvm.x86.mmx.pmulh.w
-    1, // llvm.x86.mmx.pmulhu.w
-    1, // llvm.x86.mmx.pmull.w
-    1, // llvm.x86.mmx.pmulu.dq
-    1, // llvm.x86.mmx.por
-    1, // llvm.x86.mmx.psad.bw
-    1, // llvm.x86.mmx.psll.d
-    1, // llvm.x86.mmx.psll.q
-    1, // llvm.x86.mmx.psll.w
-    1, // llvm.x86.mmx.pslli.d
-    1, // llvm.x86.mmx.pslli.q
-    1, // llvm.x86.mmx.pslli.w
-    1, // llvm.x86.mmx.psra.d
-    1, // llvm.x86.mmx.psra.w
-    1, // llvm.x86.mmx.psrai.d
-    1, // llvm.x86.mmx.psrai.w
-    1, // llvm.x86.mmx.psrl.d
-    1, // llvm.x86.mmx.psrl.q
-    1, // llvm.x86.mmx.psrl.w
-    1, // llvm.x86.mmx.psrli.d
-    1, // llvm.x86.mmx.psrli.q
-    1, // llvm.x86.mmx.psrli.w
-    1, // llvm.x86.mmx.psub.b
-    1, // llvm.x86.mmx.psub.d
-    1, // llvm.x86.mmx.psub.q
-    1, // llvm.x86.mmx.psub.w
-    1, // llvm.x86.mmx.psubs.b
-    1, // llvm.x86.mmx.psubs.w
-    1, // llvm.x86.mmx.psubus.b
-    1, // llvm.x86.mmx.psubus.w
-    1, // llvm.x86.mmx.punpckhbw
-    1, // llvm.x86.mmx.punpckhdq
-    1, // llvm.x86.mmx.punpckhwd
-    1, // llvm.x86.mmx.punpcklbw
-    1, // llvm.x86.mmx.punpckldq
-    1, // llvm.x86.mmx.punpcklwd
-    1, // llvm.x86.mmx.pxor
-    3, // llvm.x86.monitorx
-    3, // llvm.x86.mwaitx
-    1, // llvm.x86.pclmulqdq
-    1, // llvm.x86.pclmulqdq.256
-    1, // llvm.x86.pclmulqdq.512
-    3, // llvm.x86.rdfsbase.32
-    3, // llvm.x86.rdfsbase.64
-    3, // llvm.x86.rdgsbase.32
-    3, // llvm.x86.rdgsbase.64
-    3, // llvm.x86.rdpid
-    3, // llvm.x86.rdpkru
-    3, // llvm.x86.rdpmc
-    3, // llvm.x86.rdrand.16
-    3, // llvm.x86.rdrand.32
-    3, // llvm.x86.rdrand.64
-    3, // llvm.x86.rdseed.16
-    3, // llvm.x86.rdseed.32
-    3, // llvm.x86.rdseed.64
-    3, // llvm.x86.rdsspd
-    3, // llvm.x86.rdsspq
-    3, // llvm.x86.rdtsc
-    21, // llvm.x86.rdtscp
-    3, // llvm.x86.rstorssp
-    3, // llvm.x86.saveprevssp
-    3, // llvm.x86.seh.ehguard
-    3, // llvm.x86.seh.ehregnode
-    1, // llvm.x86.seh.lsda
-    1, // llvm.x86.seh.recoverfp
-    3, // llvm.x86.setssbsy
-    1, // llvm.x86.sha1msg1
-    1, // llvm.x86.sha1msg2
-    1, // llvm.x86.sha1nexte
-    1, // llvm.x86.sha1rnds4
-    1, // llvm.x86.sha256msg1
-    1, // llvm.x86.sha256msg2
-    1, // llvm.x86.sha256rnds2
-    3, // llvm.x86.slwpcb
-    1, // llvm.x86.sse.cmp.ps
-    1, // llvm.x86.sse.cmp.ss
-    1, // llvm.x86.sse.comieq.ss
-    1, // llvm.x86.sse.comige.ss
-    1, // llvm.x86.sse.comigt.ss
-    1, // llvm.x86.sse.comile.ss
-    1, // llvm.x86.sse.comilt.ss
-    1, // llvm.x86.sse.comineq.ss
-    1, // llvm.x86.sse.cvtpd2pi
-    1, // llvm.x86.sse.cvtpi2pd
-    1, // llvm.x86.sse.cvtpi2ps
-    1, // llvm.x86.sse.cvtps2pi
-    1, // llvm.x86.sse.cvtsi2ss
-    1, // llvm.x86.sse.cvtsi642ss
-    1, // llvm.x86.sse.cvtss2si
-    1, // llvm.x86.sse.cvtss2si64
-    1, // llvm.x86.sse.cvttpd2pi
-    1, // llvm.x86.sse.cvttps2pi
-    1, // llvm.x86.sse.cvttss2si
-    1, // llvm.x86.sse.cvttss2si64
-    3, // llvm.x86.sse.ldmxcsr
-    1, // llvm.x86.sse.max.ps
-    1, // llvm.x86.sse.max.ss
-    1, // llvm.x86.sse.min.ps
-    1, // llvm.x86.sse.min.ss
-    1, // llvm.x86.sse.movmsk.ps
-    1, // llvm.x86.sse.pshuf.w
-    1, // llvm.x86.sse.rcp.ps
-    1, // llvm.x86.sse.rcp.ss
-    1, // llvm.x86.sse.rsqrt.ps
-    1, // llvm.x86.sse.rsqrt.ss
-    3, // llvm.x86.sse.sfence
-    1, // llvm.x86.sse.sqrt.ps
-    1, // llvm.x86.sse.sqrt.ss
-    3, // llvm.x86.sse.stmxcsr
-    1, // llvm.x86.sse.ucomieq.ss
-    1, // llvm.x86.sse.ucomige.ss
-    1, // llvm.x86.sse.ucomigt.ss
-    1, // llvm.x86.sse.ucomile.ss
-    1, // llvm.x86.sse.ucomilt.ss
-    1, // llvm.x86.sse.ucomineq.ss
-    3, // llvm.x86.sse2.clflush
-    1, // llvm.x86.sse2.cmp.pd
-    1, // llvm.x86.sse2.cmp.sd
-    1, // llvm.x86.sse2.comieq.sd
-    1, // llvm.x86.sse2.comige.sd
-    1, // llvm.x86.sse2.comigt.sd
-    1, // llvm.x86.sse2.comile.sd
-    1, // llvm.x86.sse2.comilt.sd
-    1, // llvm.x86.sse2.comineq.sd
-    1, // llvm.x86.sse2.cvtdq2ps
-    1, // llvm.x86.sse2.cvtpd2dq
-    1, // llvm.x86.sse2.cvtpd2ps
-    1, // llvm.x86.sse2.cvtps2dq
-    1, // llvm.x86.sse2.cvtsd2si
-    1, // llvm.x86.sse2.cvtsd2si64
-    1, // llvm.x86.sse2.cvtsd2ss
-    1, // llvm.x86.sse2.cvtsi2sd
-    1, // llvm.x86.sse2.cvtsi642sd
-    1, // llvm.x86.sse2.cvtss2sd
-    1, // llvm.x86.sse2.cvttpd2dq
-    1, // llvm.x86.sse2.cvttps2dq
-    1, // llvm.x86.sse2.cvttsd2si
-    1, // llvm.x86.sse2.cvttsd2si64
-    3, // llvm.x86.sse2.lfence
-    3, // llvm.x86.sse2.maskmov.dqu
-    1, // llvm.x86.sse2.max.pd
-    1, // llvm.x86.sse2.max.sd
-    3, // llvm.x86.sse2.mfence
-    1, // llvm.x86.sse2.min.pd
-    1, // llvm.x86.sse2.min.sd
-    1, // llvm.x86.sse2.movmsk.pd
-    1, // llvm.x86.sse2.packssdw.128
-    1, // llvm.x86.sse2.packsswb.128
-    1, // llvm.x86.sse2.packuswb.128
-    1, // llvm.x86.sse2.padds.b
-    1, // llvm.x86.sse2.padds.w
-    1, // llvm.x86.sse2.paddus.b
-    1, // llvm.x86.sse2.paddus.w
-    3, // llvm.x86.sse2.pause
-    1, // llvm.x86.sse2.pmadd.wd
-    1, // llvm.x86.sse2.pmovmskb.128
-    1, // llvm.x86.sse2.pmulh.w
-    1, // llvm.x86.sse2.pmulhu.w
-    1, // llvm.x86.sse2.pmulu.dq
-    1, // llvm.x86.sse2.psad.bw
-    1, // llvm.x86.sse2.psll.d
-    1, // llvm.x86.sse2.psll.q
-    1, // llvm.x86.sse2.psll.w
-    1, // llvm.x86.sse2.pslli.d
-    1, // llvm.x86.sse2.pslli.q
-    1, // llvm.x86.sse2.pslli.w
-    1, // llvm.x86.sse2.psra.d
-    1, // llvm.x86.sse2.psra.w
-    1, // llvm.x86.sse2.psrai.d
-    1, // llvm.x86.sse2.psrai.w
-    1, // llvm.x86.sse2.psrl.d
-    1, // llvm.x86.sse2.psrl.q
-    1, // llvm.x86.sse2.psrl.w
-    1, // llvm.x86.sse2.psrli.d
-    1, // llvm.x86.sse2.psrli.q
-    1, // llvm.x86.sse2.psrli.w
-    1, // llvm.x86.sse2.psubs.b
-    1, // llvm.x86.sse2.psubs.w
-    1, // llvm.x86.sse2.psubus.b
-    1, // llvm.x86.sse2.psubus.w
-    1, // llvm.x86.sse2.sqrt.pd
-    1, // llvm.x86.sse2.sqrt.sd
-    1, // llvm.x86.sse2.ucomieq.sd
-    1, // llvm.x86.sse2.ucomige.sd
-    1, // llvm.x86.sse2.ucomigt.sd
-    1, // llvm.x86.sse2.ucomile.sd
-    1, // llvm.x86.sse2.ucomilt.sd
-    1, // llvm.x86.sse2.ucomineq.sd
-    1, // llvm.x86.sse3.addsub.pd
-    1, // llvm.x86.sse3.addsub.ps
-    1, // llvm.x86.sse3.hadd.pd
-    1, // llvm.x86.sse3.hadd.ps
-    1, // llvm.x86.sse3.hsub.pd
-    1, // llvm.x86.sse3.hsub.ps
-    16, // llvm.x86.sse3.ldu.dq
-    3, // llvm.x86.sse3.monitor
-    3, // llvm.x86.sse3.mwait
-    1, // llvm.x86.sse41.blendvpd
-    1, // llvm.x86.sse41.blendvps
-    1, // llvm.x86.sse41.dppd
-    1, // llvm.x86.sse41.dpps
-    1, // llvm.x86.sse41.insertps
-    1, // llvm.x86.sse41.mpsadbw
-    1, // llvm.x86.sse41.packusdw
-    1, // llvm.x86.sse41.pblendvb
-    1, // llvm.x86.sse41.phminposuw
-    1, // llvm.x86.sse41.pmuldq
-    1, // llvm.x86.sse41.ptestc
-    1, // llvm.x86.sse41.ptestnzc
-    1, // llvm.x86.sse41.ptestz
-    1, // llvm.x86.sse41.round.pd
-    1, // llvm.x86.sse41.round.ps
-    1, // llvm.x86.sse41.round.sd
-    1, // llvm.x86.sse41.round.ss
-    1, // llvm.x86.sse42.crc32.32.16
-    1, // llvm.x86.sse42.crc32.32.32
-    1, // llvm.x86.sse42.crc32.32.8
-    1, // llvm.x86.sse42.crc32.64.64
-    1, // llvm.x86.sse42.pcmpestri128
-    1, // llvm.x86.sse42.pcmpestria128
-    1, // llvm.x86.sse42.pcmpestric128
-    1, // llvm.x86.sse42.pcmpestrio128
-    1, // llvm.x86.sse42.pcmpestris128
-    1, // llvm.x86.sse42.pcmpestriz128
-    1, // llvm.x86.sse42.pcmpestrm128
-    1, // llvm.x86.sse42.pcmpistri128
-    1, // llvm.x86.sse42.pcmpistria128
-    1, // llvm.x86.sse42.pcmpistric128
-    1, // llvm.x86.sse42.pcmpistrio128
-    1, // llvm.x86.sse42.pcmpistris128
-    1, // llvm.x86.sse42.pcmpistriz128
-    1, // llvm.x86.sse42.pcmpistrm128
-    1, // llvm.x86.sse4a.extrq
-    1, // llvm.x86.sse4a.extrqi
-    1, // llvm.x86.sse4a.insertq
-    1, // llvm.x86.sse4a.insertqi
-    1, // llvm.x86.ssse3.pabs.b
-    1, // llvm.x86.ssse3.pabs.d
-    1, // llvm.x86.ssse3.pabs.w
-    1, // llvm.x86.ssse3.phadd.d
-    1, // llvm.x86.ssse3.phadd.d.128
-    1, // llvm.x86.ssse3.phadd.sw
-    1, // llvm.x86.ssse3.phadd.sw.128
-    1, // llvm.x86.ssse3.phadd.w
-    1, // llvm.x86.ssse3.phadd.w.128
-    1, // llvm.x86.ssse3.phsub.d
-    1, // llvm.x86.ssse3.phsub.d.128
-    1, // llvm.x86.ssse3.phsub.sw
-    1, // llvm.x86.ssse3.phsub.sw.128
-    1, // llvm.x86.ssse3.phsub.w
-    1, // llvm.x86.ssse3.phsub.w.128
-    1, // llvm.x86.ssse3.pmadd.ub.sw
-    1, // llvm.x86.ssse3.pmadd.ub.sw.128
-    1, // llvm.x86.ssse3.pmul.hr.sw
-    1, // llvm.x86.ssse3.pmul.hr.sw.128
-    1, // llvm.x86.ssse3.pshuf.b
-    1, // llvm.x86.ssse3.pshuf.b.128
-    1, // llvm.x86.ssse3.psign.b
-    1, // llvm.x86.ssse3.psign.b.128
-    1, // llvm.x86.ssse3.psign.d
-    1, // llvm.x86.ssse3.psign.d.128
-    1, // llvm.x86.ssse3.psign.w
-    1, // llvm.x86.ssse3.psign.w.128
-    21, // llvm.x86.subborrow.u32
-    21, // llvm.x86.subborrow.u64
-    1, // llvm.x86.tbm.bextri.u32
-    1, // llvm.x86.tbm.bextri.u64
-    1, // llvm.x86.vcvtph2ps.128
-    1, // llvm.x86.vcvtph2ps.256
-    1, // llvm.x86.vcvtps2ph.128
-    1, // llvm.x86.vcvtps2ph.256
-    1, // llvm.x86.vgf2p8affineinvqb.128
-    1, // llvm.x86.vgf2p8affineinvqb.256
-    1, // llvm.x86.vgf2p8affineinvqb.512
-    1, // llvm.x86.vgf2p8affineqb.128
-    1, // llvm.x86.vgf2p8affineqb.256
-    1, // llvm.x86.vgf2p8affineqb.512
-    1, // llvm.x86.vgf2p8mulb.128
-    1, // llvm.x86.vgf2p8mulb.256
-    1, // llvm.x86.vgf2p8mulb.512
-    3, // llvm.x86.wrfsbase.32
-    3, // llvm.x86.wrfsbase.64
-    3, // llvm.x86.wrgsbase.32
-    3, // llvm.x86.wrgsbase.64
-    3, // llvm.x86.wrpkru
-    3, // llvm.x86.wrssd
-    3, // llvm.x86.wrssq
-    3, // llvm.x86.wrussd
-    3, // llvm.x86.wrussq
-    3, // llvm.x86.xabort
-    3, // llvm.x86.xbegin
-    3, // llvm.x86.xend
-    3, // llvm.x86.xgetbv
-    1, // llvm.x86.xop.vfrcz.pd
-    1, // llvm.x86.xop.vfrcz.pd.256
-    1, // llvm.x86.xop.vfrcz.ps
-    1, // llvm.x86.xop.vfrcz.ps.256
-    1, // llvm.x86.xop.vfrcz.sd
-    1, // llvm.x86.xop.vfrcz.ss
-    1, // llvm.x86.xop.vpcomb
-    1, // llvm.x86.xop.vpcomd
-    1, // llvm.x86.xop.vpcomq
-    1, // llvm.x86.xop.vpcomub
-    1, // llvm.x86.xop.vpcomud
-    1, // llvm.x86.xop.vpcomuq
-    1, // llvm.x86.xop.vpcomuw
-    1, // llvm.x86.xop.vpcomw
-    1, // llvm.x86.xop.vpermil2pd
-    1, // llvm.x86.xop.vpermil2pd.256
-    1, // llvm.x86.xop.vpermil2ps
-    1, // llvm.x86.xop.vpermil2ps.256
-    1, // llvm.x86.xop.vphaddbd
-    1, // llvm.x86.xop.vphaddbq
-    1, // llvm.x86.xop.vphaddbw
-    1, // llvm.x86.xop.vphadddq
-    1, // llvm.x86.xop.vphaddubd
-    1, // llvm.x86.xop.vphaddubq
-    1, // llvm.x86.xop.vphaddubw
-    1, // llvm.x86.xop.vphaddudq
-    1, // llvm.x86.xop.vphadduwd
-    1, // llvm.x86.xop.vphadduwq
-    1, // llvm.x86.xop.vphaddwd
-    1, // llvm.x86.xop.vphaddwq
-    1, // llvm.x86.xop.vphsubbw
-    1, // llvm.x86.xop.vphsubdq
-    1, // llvm.x86.xop.vphsubwd
-    1, // llvm.x86.xop.vpmacsdd
-    1, // llvm.x86.xop.vpmacsdqh
-    1, // llvm.x86.xop.vpmacsdql
-    1, // llvm.x86.xop.vpmacssdd
-    1, // llvm.x86.xop.vpmacssdqh
-    1, // llvm.x86.xop.vpmacssdql
-    1, // llvm.x86.xop.vpmacsswd
-    1, // llvm.x86.xop.vpmacssww
-    1, // llvm.x86.xop.vpmacswd
-    1, // llvm.x86.xop.vpmacsww
-    1, // llvm.x86.xop.vpmadcsswd
-    1, // llvm.x86.xop.vpmadcswd
-    1, // llvm.x86.xop.vpperm
-    1, // llvm.x86.xop.vprotb
-    1, // llvm.x86.xop.vprotbi
-    1, // llvm.x86.xop.vprotd
-    1, // llvm.x86.xop.vprotdi
-    1, // llvm.x86.xop.vprotq
-    1, // llvm.x86.xop.vprotqi
-    1, // llvm.x86.xop.vprotw
-    1, // llvm.x86.xop.vprotwi
-    1, // llvm.x86.xop.vpshab
-    1, // llvm.x86.xop.vpshad
-    1, // llvm.x86.xop.vpshaq
-    1, // llvm.x86.xop.vpshaw
-    1, // llvm.x86.xop.vpshlb
-    1, // llvm.x86.xop.vpshld
-    1, // llvm.x86.xop.vpshlq
-    1, // llvm.x86.xop.vpshlw
-    3, // llvm.x86.xrstor
-    3, // llvm.x86.xrstor64
-    3, // llvm.x86.xrstors
-    3, // llvm.x86.xrstors64
-    3, // llvm.x86.xsave
-    3, // llvm.x86.xsave64
-    3, // llvm.x86.xsavec
-    3, // llvm.x86.xsavec64
-    3, // llvm.x86.xsaveopt
-    3, // llvm.x86.xsaveopt64
-    3, // llvm.x86.xsaves
-    3, // llvm.x86.xsaves64
-    3, // llvm.x86.xsetbv
-    3, // llvm.x86.xtest
-    1, // llvm.xcore.bitrev
-    3, // llvm.xcore.checkevent
-    45, // llvm.xcore.chkct
-    3, // llvm.xcore.clre
-    45, // llvm.xcore.clrpt
-    3, // llvm.xcore.clrsr
-    1, // llvm.xcore.crc32
-    1, // llvm.xcore.crc8
-    45, // llvm.xcore.edu
-    45, // llvm.xcore.eeu
-    45, // llvm.xcore.endin
-    45, // llvm.xcore.freer
-    3, // llvm.xcore.geted
-    3, // llvm.xcore.getet
-    1, // llvm.xcore.getid
-    3, // llvm.xcore.getps
-    3, // llvm.xcore.getr
-    45, // llvm.xcore.getst
-    45, // llvm.xcore.getts
-    45, // llvm.xcore.in
-    45, // llvm.xcore.inct
-    45, // llvm.xcore.initcp
-    45, // llvm.xcore.initdp
-    45, // llvm.xcore.initlr
-    45, // llvm.xcore.initpc
-    45, // llvm.xcore.initsp
-    45, // llvm.xcore.inshr
-    45, // llvm.xcore.int
-    45, // llvm.xcore.mjoin
-    45, // llvm.xcore.msync
-    45, // llvm.xcore.out
-    45, // llvm.xcore.outct
-    45, // llvm.xcore.outshr
-    45, // llvm.xcore.outt
-    45, // llvm.xcore.peek
-    45, // llvm.xcore.setc
-    46, // llvm.xcore.setclk
-    45, // llvm.xcore.setd
-    45, // llvm.xcore.setev
-    3, // llvm.xcore.setps
-    45, // llvm.xcore.setpsc
-    45, // llvm.xcore.setpt
-    46, // llvm.xcore.setrdy
-    3, // llvm.xcore.setsr
-    45, // llvm.xcore.settw
-    45, // llvm.xcore.setv
-    1, // llvm.xcore.sext
-    3, // llvm.xcore.ssync
-    45, // llvm.xcore.syncr
-    45, // llvm.xcore.testct
-    45, // llvm.xcore.testwct
-    16, // llvm.xcore.waitevent
-    1, // llvm.xcore.zext
-  };
-
-  AttributeList AS[5];
-  unsigned NumAttrs = 0;
-  if (id != 0) {
-    switch(IntrinsicsToAttributesMap[id - 1]) {
-    default: llvm_unreachable("Invalid attribute number");
-    case 3: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 45: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 46: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
-      AS[1] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 6: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 25: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOrArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 21: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 18: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 8: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 24: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 22: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[1] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 23: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[1] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 20: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 17: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
-      AS[1] = AttributeList::get(C, 3, AttrParam3);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 19: {
-      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 3, AttrParam3);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 28: {
-      const Attribute::AttrKind AttrParam4[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 4, AttrParam4);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 29: {
-      const Attribute::AttrKind AttrParam5[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 5, AttrParam5);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 30: {
-      const Attribute::AttrKind AttrParam6[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 6, AttrParam6);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 15: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::InaccessibleMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 32: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 27: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 40: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 39: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 16: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 2: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 37: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 13: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 9: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 10: {
-      const Attribute::AttrKind AttrParam2[]= {Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind AttrParam3[]= {Attribute::NoCapture,Attribute::ReadOnly};
-      AS[1] = AttributeList::get(C, 3, AttrParam3);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadOnly,Attribute::ArgMemOnly};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 1: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 12: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::NoCapture};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 26: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::Returned};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
-      AS[1] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 2;
-      break;
-      }
-    case 11: {
-      const Attribute::AttrKind AttrParam1[]= {Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, 1, AttrParam1);
-      const Attribute::AttrKind AttrParam2[]= {Attribute::ReadNone};
-      AS[1] = AttributeList::get(C, 2, AttrParam2);
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::ReadNone};
-      AS[2] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 3;
-      break;
-      }
-    case 43: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 36: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::WriteOnly,Attribute::ArgMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 34: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 4: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Speculatable,Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 33: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 38: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::InaccessibleMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 31: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::Convergent,Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 14: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoReturn};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 5: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate,Attribute::InaccessibleMemOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 42: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoUnwind,Attribute::NoDuplicate,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 7: {
-      return AttributeList();
-      }
-    case 35: {
-      const Attribute::AttrKind Atts[] = {Attribute::ReadNone};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 44: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoReturn};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    case 41: {
-      const Attribute::AttrKind Atts[] = {Attribute::NoReturn,Attribute::WriteOnly};
-      AS[0] = AttributeList::get(C, AttributeList::FunctionIndex, Atts);
-      NumAttrs = 1;
-      break;
-      }
-    }
-  }
-  return AttributeList::get(C, makeArrayRef(AS, NumAttrs));
-}
-#endif // GET_INTRINSIC_ATTRIBUTES
-
-// Get the LLVM intrinsic that corresponds to a builtin.
-// This is used by the C front-end.  The builtin name is passed
-// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed
-// in as TargetPrefix.  The result is assigned to 'IntrinsicID'.
-#ifdef GET_LLVM_INTRINSIC_FOR_GCC_BUILTIN
-Intrinsic::ID Intrinsic::getIntrinsicForGCCBuiltin(const char *TargetPrefixStr, StringRef BuiltinNameStr) {
-  static const char BuiltinNames[] = {
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'd', 'j', 'u', 's',
-  't', '_', 't', 'r', 'a', 'm', 'p', 'o', 'l', 'i', 'n', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'e', 'b', 'u', 'g', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'u', 'n',
-  'w', 'i', 'n', 'd', '_', 'i', 'n', 'i', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'f', 'l', 't', '_', 'r', 'o', 'u', 'n', 'd', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'n', 'i', 't',
-  '_', 't', 'r', 'a', 'm', 'p', 'o', 'l', 'i', 'n', 'e', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'o', 'b', 'j', 'e', 'c', 't', '_', 's',
-  'i', 'z', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  't', 'a', 'c', 'k', '_', 'r', 'e', 's', 't', 'o', 'r', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 't', 'a', 'c', 'k', '_', 's',
-  'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't',
-  'h', 'r', 'e', 'a', 'd', '_', 'p', 'o', 'i', 'n', 't', 'e', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'd', 'm',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'd', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 'i', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'b', 'u', 'f', 'f', 'e',
-  'r', '_', 'w', 'b', 'i', 'n', 'v', 'l', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'b', 'u', 'f',
-  'f', 'e', 'r', '_', 'w', 'b', 'i', 'n', 'v', 'l', '1', '_', 's', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 'b', 'u', 'f', 'f', 'e', 'r', '_', 'w', 'b', 'i', 'n', 'v', 'l',
-  '1', '_', 'v', 'o', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e', 'i', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 'c', 'u', 'b', 'e', 'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e',
-  's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'c', 'u', 'b', 'e', 't', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'c',
-  'v', 't', '_', 'p', 'k', '_', 'u', '8', '_', 'f', '3', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  'd', 'i', 's', 'p', 'a', 't', 'c', 'h', '_', 'i', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
-  'i', 's', 'p', 'a', 't', 'c', 'h', '_', 'p', 't', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd',
-  's', '_', 'b', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's',
-  '_', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's', '_', 'f', 'm', 'a', 'x',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 'd', 's', '_', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's',
-  '_', 'p', 'e', 'r', 'm', 'u', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'd', 's', '_', 's',
-  'w', 'i', 'z', 'z', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'f', 'm', 'e', 'd', '3', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 'f', 'm', 'u', 'l', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 'g', 'r', 'o', 'u', 'p', 's', 't', 'a', 't', 'i', 'c', 's', 'i', 'z',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'i', 'm', 'p', 'l', 'i', 'c', 'i', 't', '_', 'b', 'u',
-  'f', 'f', 'e', 'r', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'm', 'p', 'l',
-  'i', 'c', 'i', 't', 'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i',
-  'n', 't', 'e', 'r', 'p', '_', 'm', 'o', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't',
-  'e', 'r', 'p', '_', 'p', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'i', 'n', 't', 'e', 'r', 'p',
-  '_', 'p', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'm', 'd', 'g', 'c', 'n', '_', 'k', 'e', 'r', 'n', 'a', 'r', 'g', '_', 's',
-  'e', 'g', 'm', 'e', 'n', 't', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'l', 'e',
-  'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 'm', 'b', 'c', 'n', 't', '_', 'h', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 'm', 'b', 'c', 'n', 't', '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'm', 'q', 's',
-  'a', 'd', '_', 'p', 'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  'm', 'q', 's', 'a', 'd', '_', 'u', '3', '2', '_', 'u', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  'm', 's', 'a', 'd', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 's', 'a', 'd', '_',
-  'p', 'k', '_', 'u', '1', '6', '_', 'u', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'q', 'u', 'e',
-  'u', 'e', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'c', 'p', '_', 'l', 'e',
-  'g', 'a', 'c', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'f', 'i', 'r', 's',
-  't', 'l', 'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'r', 'e', 'a', 'd', 'l', 'a', 'n',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'r', 's', 'q', '_', 'l', 'e', 'g', 'a', 'c', 'y', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 's', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
-  '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's',
-  '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'i', 'n', 'v', '_', 'v', 'o', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 's', '_', 'd', 'c', 'a', 'c', 'h', 'e', '_', 'w', 'b', '_', 'v',
-  'o', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm',
-  'd', 'g', 'c', 'n', '_', 's', '_', 'd', 'e', 'c', 'p', 'e', 'r', 'f', 'l',
-  'e', 'v', 'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'g', 'e', 't', 'p', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c',
-  'n', '_', 's', '_', 'g', 'e', 't', 'r', 'e', 'g', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
-  'i', 'n', 'c', 'p', 'e', 'r', 'f', 'l', 'e', 'v', 'e', 'l', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  's', '_', 'm', 'e', 'm', 'r', 'e', 'a', 'l', 't', 'i', 'm', 'e', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n',
-  '_', 's', '_', 'm', 'e', 'm', 't', 'i', 'm', 'e', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_',
-  's', 'e', 'n', 'd', 'm', 's', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'e', 'n',
-  'd', 'm', 's', 'g', 'h', 'a', 'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', '_', 's', 'l',
-  'e', 'e', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'm', 'd', 'g', 'c', 'n', '_', 's', '_', 'w', 'a', 'i', 't', 'c', 'n', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g',
-  'c', 'n', '_', 's', 'a', 'd', '_', 'h', 'i', '_', 'u', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_',
-  's', 'a', 'd', '_', 'u', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 's', 'a', 'd', '_', 'u',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'w', 'a', 'v', 'e', '_', 'b', 'a', 'r', 'r', 'i', 'e',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'm', 'd',
-  'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p', '_', 'i',
-  'd', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'm', 'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o', 'u', 'p',
-  '_', 'i', 'd', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'w', 'o', 'r', 'k', 'g', 'r', 'o',
-  'u', 'p', '_', 'i', 'd', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'm', 'd', 'g', 'c', 'n', '_', 'w', 'r', 'i', 't', 'e',
-  'l', 'a', 'n', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 'c', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 'c', 'd', 'p', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'g', 'e', 't', '_',
-  'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'l', 'd', 'c',
-  '2', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'l', 'd', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'c', 'r', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'm', 'r',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'm', 'r', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 'a', 'd', 'd', '1', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'q', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'a', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'q', 's', 'u', 'b', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a',
-  'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'a', 's', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'e',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'e', 't', '_', 'f', 'p', 's', 'c', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 'd', 'd',
-  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 's', 'h', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 'a', 's', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h',
-  's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'h', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'h', 's', 'u', 'b',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'm', 'l', 'a', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'b', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
-  'l', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'm', 'l', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'l', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  's', 'm', 'l', 'a', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 't', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm',
-  'l', 'a', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'w', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 'a', 'w',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 's', 'm', 'l', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l', 's', 'd', 'x', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'l',
-  's', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'm', 'l', 's', 'l', 'd', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'a', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  's', 'm', 'u', 'a', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'b', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u',
-  'l', 'b', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 'm', 'u', 'l', 't', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 't', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  's', 'm', 'u', 'l', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u', 'l', 'w', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'm', 'u',
-  's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 's', 'm', 'u', 's', 'd', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'a',
-  't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's', 'u', 'b', '1', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 's',
-  'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'r', 'm', '_', 's', 't', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 't', 'c', '2', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  's', 't', 'c', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 's', 'x', 't', 'a', 'b', '1', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 's', 'x', 't', 'b',
-  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'u', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a', 'd', 'd', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'a',
-  's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'u', 'h', 'a', 'd', 'd', '1', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 'a', 'd', 'd', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'u', 'h', 'a', 's', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'a', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'h', 's', 'u', 'b',
-  '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r',
-  'm', '_', 'u', 'h', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 'd', 'd', '1', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'u', 'q', 'a', 'd', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 'a', 's', 'x', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'a',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm',
-  '_', 'u', 'q', 's', 'u', 'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'q', 's', 'u', 'b', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
-  's', 'a', 'd', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'r', 'm', '_', 'u', 's', 'a', 'd', 'a', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u',
-  's', 'a', 't', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'u', 's', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 's', 'u', 'b', '1', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_',
-  'u', 's', 'u', 'b', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'r', 'm', '_', 'u', 'x', 't', 'a', 'b', '1', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'r', 'm', '_', 'u', 'x', 't',
-  'b', '1', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b',
-  'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'b', 'y', 't', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a',
-  'd', '_', 'h', 'a', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'b', 'p', 'f', '_', 'l', 'o', 'a', 'd', '_', 'w', 'o', 'r', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'f', '_',
-  'p', 's', 'e', 'u', 'd', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'b', 's', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'a', 'b', 's', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd',
-  'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 'l', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_',
-  'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h',
-  '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'h', '1',
-  '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'a', 'd', 'd', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6',
-  '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_',
-  'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd',
-  'd', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_', 'h', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'h', '_', 'l', '1', '6', '_', 's',
-  'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'd', 'd', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'a', 'd', 'd', 'p', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'a', 'd', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'a', 'd', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'i', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'a', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'a', 's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'a', 's', 'r',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e',
-  '_', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm', 'b', 'i',
-  'n', 'e', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c', 'o', 'm',
-  'b', 'i', 'n', 'e', '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'c',
-  'o', 'm', 'b', 'i', 'n', 'e', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'i', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'c', 'o', 'm', 'b', 'i', 'n', 'e', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'm', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'a', 'x', 'u', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'm', 'a', 'x', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'm', 'i', 'n', 'u', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'm', 'i', 'n', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'n', 'e', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'n', 'e', 'g', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'n',
-  'o', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'o', 'r', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'o', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'r', 'o', 'u', 'n', 'd',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 's', 'a', 't', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 's', 'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'a', 't', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 'h', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6',
-  '_', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_',
-  'h', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u',
-  'b', 'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'h', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's',
-  'a', 't', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
-  'h', '_', 'h', '1', '6', '_', 's', 'a', 't', '_', 'l', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'h', '1', '6', '_', 's', 'a',
-  't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h',
-  '_', 'l', '1', '6', '_', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's',
-  'u', 'b', 'h', '_', 'l', '1', '6', '_', 'l', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'u', 'b', 'h', '_', 'l', '1', '6', '_', 's', 'a', 't', '_',
-  'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 'h', '_', 'l',
-  '1', '6', '_', 's', 'a', 't', '_', 'l', 'l', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 's', 'u', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b',
-  'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'u', 'b', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'h', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 's', 'v', 'a', 'v', 'g', 'h', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 's', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  's', 'v', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v',
-  's', 'u', 'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'v', 's',
-  'u', 'b', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'w', 'i',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 's', 'x', 't', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 's', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  's', 'x', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'i', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 't', 'f', 'r', 'i', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  't', 'f', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 'p',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 't', 'f', 'r', 's', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'a', 'b', 's', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'a', 'b', 's', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'a', 'b', 's', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'a', 'd', 'd', 'b', '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd',
-  'd', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '2', '_', 'v', 'a', 'd', 'd', 'w', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
-  'v', 'g', 'h', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
-  'g', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 'a', 'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'a', 'v', 'g', 'u', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a',
-  'v', 'g', 'w', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'a', 'v',
-  'g', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b',
-  'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'b', 'g',
-  't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'e',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'h', 'g', 't', 'u',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'c', 'o', 'n', 'j', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'm', 'a', 'x', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'm', 'i', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'm', 'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'u', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '2', '_', 'v', 'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 'n', 'a', 'v', 'g', 'h', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 'n', 'a', 'v', 'g', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v',
-  'n', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a',
-  'v', 'g', 'w', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'n', 'a',
-  'v', 'g', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd',
-  'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 'a', 'd', 'd',
-  'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r',
-  's', 'a', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 'r', 's',
-  'a', 'd', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_',
-  'v', 's', 'u', 'b', 'b', '_', 'm', 'a', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2',
-  '_', 'v', 's', 'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's',
-  'u', 'b', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'b',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'u', 'h', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'v', 's', 'u', 'b', 'w', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '2', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'x', 'o', 'r',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '2', '_', 'z', 'x', 't', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '2', '_', 'z', 'x', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'a', 'n', 'd', 'n',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'i', 't', 's', 'p', 'l', 'i',
-  't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'b', 'o', 'u', 'n', 'd', 's',
-  'c', 'h', 'e', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p',
-  'b', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'e',
-  'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'c', 'm', 'p', 'h', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'A', '4', '_', 'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'c', 'm', 'p', 'h', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'c', 'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
-  'm', 'p', 'h', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'm',
-  'p', 'h', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c', 'o',
-  'm', 'b', 'i', 'n', 'e', 'i', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'c',
-  'o', 'm', 'b', 'i', 'n', 'e', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'c', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'c', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'm', 'o', 'd', 'w', 'r', 'a', 'p', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'o', 'r', 'n',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'e', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'e', 'q', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'n', 'e', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '4', '_', 'r', 'c', 'm', 'p', 'n', 'e', 'q', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r', 'i', '_', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'r', 'o', 'u', 'n', 'd', '_', 'r',
-  'r', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 't', 'l', 'b',
-  'm', 'a', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'c', 'm',
-  'p', 'b', 'e', 'q', '_', 'a', 'n', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'c', 'm', 'p', 'b', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'c', 'm', 'p', 'b', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
-  'c', 'm', 'p', 'b', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
-  'c', 'm', 'p', 'b', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'c', 'm', 'p', 'h', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'c', 'm', 'p', 'h', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'c', 'm', 'p', 'h', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'c', 'm', 'p', 'w', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4',
-  '_', 'v', 'c', 'm', 'p', 'w', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A',
-  '4', '_', 'v', 'r', 'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_',
-  'v', 'r', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v',
-  'r', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r',
-  'm', 'a', 'x', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i',
-  'n', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'u',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'u', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'A', '4', '_', 'v', 'r', 'm', 'i', 'n', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '5', '_', 'v', 'a', 'd', 'd', 'h', 'u', 'b', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'A', '6', '_', 'v', 'c', 'm', 'p', 'b', 'e', 'q', '_', 'n', 'o',
-  't', 'a', 'n', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'A', '6', '_', 'v', 'c', 'm', 'p',
-  'b', 'e', 'q', '_', 'n', 'o', 't', 'a', 'n', 'y', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'l', 'l', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n',
-  'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'a', 'n', 'y', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 'b', 'i', 't', 's', 's', 'e', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_',
-  'c', 'm', 'p', 'e', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm',
-  'p', 'e', 'q', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g',
-  'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 'e', 'u',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'c', 'm', 'p', 'g', 't', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 'c', 'm', 'p', 'g', 't', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c',
-  'm', 'p', 'g', 't', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm',
-  'p', 'g', 't', 'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p',
-  'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'c', 'm', 'p', 'l', 't', 'u',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u',
-  'x', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', 'i', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '2', '_', 'm', 'u', 'x', 'r', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'o', 'r', 'n', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '2', '_', 'p', 'x', 'f', 'e', 'r', '_', 'm', 'a', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'C', '2', '_', 't', 'f', 'r', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2',
-  '_', 't', 'f', 'r', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'v', 'i',
-  't', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'v', 'm', 'u',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '2', '_', 'x', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '4', '_', 'a', 'n', 'd', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '4', '_', 'a', 'n', 'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
-  'a', 'n', 'd', '_', 'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c',
-  'm', 'p', 'l', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p',
-  'l', 't', 'e', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'l',
-  't', 'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'l', 't',
-  'e', 'u', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'n', 'e',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'c', 'm', 'p', 'n', 'e', 'q', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's', 't', 'c', 'o', 'r', 'n',
-  'e', 'r', '9', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'f', 'a', 's', 't', 'c',
-  'o', 'r', 'n', 'e', 'r', '9', '_', 'n', 'o', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C',
-  '4', '_', 'n', 'b', 'i', 't', 's', 'c', 'l', 'r', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '4', '_', 'n', 'b', 'i', 't', 's', 's', 'e', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'C', '4', '_', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4',
-  '_', 'o', 'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_',
-  'o', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'C', '4', '_', 'o', 'r', '_',
-  'o', 'r', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
-  'd', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
-  '_', 'd', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
-  'v', '_', 'd', 'f', '2', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 'd', 'f', '2', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 's', 'f', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f',
-  '2', 'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 'c', 'o', 'n', 'v', '_', 'd', 'f', '2', 'u', 'w', '_', 'c', 'h',
-  'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'd',
-  'f', '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
-  'd', 'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'd', '_', 'c', 'h', 'o',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f',
-  '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_',
-  's', 'f', '2', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n',
-  'v', '_', 's', 'f', '2', 'u', 'd', '_', 'c', 'h', 'o', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 's', 'f', '2', 'u',
-  'w', '_', 'c', 'h', 'o', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 's', 'f', '2', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
-  'o', 'n', 'v', '_', 's', 'f', '2', 'w', '_', 'c', 'h', 'o', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'd', '2', 'd', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u', 'd', '2',
-  's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v', '_', 'u',
-  'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o', 'n', 'v',
-  '_', 'u', 'w', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c', 'o',
-  'n', 'v', '_', 'w', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'c',
-  'o', 'n', 'v', '_', 'w', '2', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  'd', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd',
-  'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f',
-  'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c',
-  'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'c', 'm',
-  'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm',
-  '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 'd', 'f', 'i', 'm', 'm', '_',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'a', 'd', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'F', '2', '_', 's', 'f', 'c', 'l', 'a', 's', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'F', '2', '_', 's', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'F', '2', '_', 's', 'f', 'c', 'm', 'p', 'g', 'e', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F',
-  '2', '_', 's', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2',
-  '_', 's', 'f', 'c', 'm', 'p', 'u', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 'f', 'i', 'x', 'u', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 'f', 'i', 'x', 'u', 'p', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 'f', 'i', 'x', 'u', 'p', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 'f', 'm', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f',
-  'm', 'a', '_', 'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f',
-  'f', 'm', 'a', '_', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f',
-  'f', 'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'f', 'm', 's',
-  '_', 'l', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm',
-  'm', '_', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'i', 'm', 'm',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'a', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'F', '2', '_', 's', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'F', '2', '_', 's', 'f', 'm', 'p', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'F', '2', '_',
-  's', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '2', '_', 'l', 'o', 'a',
-  'd', 'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'L', '4',
-  '_', 'l', 'o', 'a', 'd', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm',
-  'a', 'c', 's', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c',
-  'm', 'a', 'c', 's', 'c', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'c', 'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'c', 'm', 'p', 'y', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'c', 'm', 'p', 'y', 'r', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'c', 'm', 'p', 'y', 'r', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 'r', 's', 'c', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'm', 'p', 'y', 's', 'c', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'c', 'n', 'a', 'c', 's', 'c',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y',
-  's', 's', '_', 'a', 'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'd', 'p', 'm', 'p', 'y', 's', 's', '_', 'n', 'a', 'c', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 's', 's', '_',
-  'r', 'n', 'd', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p',
-  'm', 'p', 'y', 's', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'd', 'p', 'm', 'p', 'y', 'u', 'u', '_', 'a', 'c', 'c', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm', 'p', 'y', 'u', 'u', '_', 'n',
-  'a', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'd', 'p', 'm',
-  'p', 'y', 'u', 'u', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'h',
-  'm', 'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'h', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'h', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'a', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'a', 'c', 's', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'a', 'c', 's', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a',
-  'c', 'h', 's', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'm', 'a', 'c', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'a', 'c', 'h', 's', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 'r', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'l', 's', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'h',
-  's', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a',
-  'c', 'u', 'h', 's', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'a', 'c', 'u', 'h', 's', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_', 'r', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u', 'l', 's', '_',
-  'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a', 'c', 'u',
-  'l', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'a',
-  'c', 'u', 'l', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'm', 'p', 'y', 'h', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'm', 'p', 'y', 'h', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'p', 'y', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'p', 'y', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'm', 'p', 'y', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 'r', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y', 'u', 'l',
-  '_', 'r', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm', 'p', 'y',
-  'u', 'l', '_', 'r', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'm',
-  'p', 'y', 'u', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'm', 'p', 'y', 'u', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a',
-  'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'h',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a',
-  'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 'l', 'l',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a',
-  'c', 'c', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't',
-  '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_',
-  's', 'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'h',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a',
-  'c', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't',
-  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'a', 'c', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h', 'l',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'h',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_',
-  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n',
-  'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'h',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n',
-  'a', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 'l', 'l',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n',
-  'a', 'c', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't',
-  '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_',
-  's', 'a', 't', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'h',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n',
-  'a', 'c', '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't',
-  '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', '_', 'n', 'a', 'c', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_',
-  'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_',
-  'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'r', 'n', 'd', '_',
-  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_',
-  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'h', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_',
-  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 's', 'a', 't', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'l', 'l', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_',
-  'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r',
-  'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'h', 'l', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a',
-  't', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_',
-  'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r',
-  'n', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', '_', 's', 'a', 't', '_', 'r', 'n', 'd', '_', 'l', 'l', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', '_', 'u', 'p', '_',
-  's', '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
-  'a', 'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c',
-  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_',
-  'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'd', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'h', 'l', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'l',
-  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
-  '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'd', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a',
-  'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'h',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
-  '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'n', 'a',
-  'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h',
-  'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
-  '_', 'r', 'n', 'd', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'h', 'l', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n',
-  'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l',
-  'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'd',
-  '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'd', '_', 'r', 'n', 'd', '_', 'l', 'l', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 's', 'm', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 's', 'u', '_', 'u', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c',
-  'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'h',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'a', 'c',
-  'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h', 'h', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'h',
-  'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', '_', 'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'l', 'l', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_',
-  'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'h', 'l', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n',
-  'a', 'c', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_',
-  'l', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'n', 'a', 'c', '_', 'l', 'l', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', '_', 'u',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a',
-  'c', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'h', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c',
-  'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm',
-  'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'h', 'l', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c',
-  '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'h', '_', 's', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'a', 'c', 'c', '_',
-  'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', 'd', '_', 'a', 'c', 'c', '_', 'l', 'l', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'h', '_', 's', '0',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'h', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
-  '_', 'h', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', 'd', '_', 'h', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'h', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'l', 'l',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
-  '_', 'l', 'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p',
-  'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_',
-  'h', 'h', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y',
-  'u', 'd', '_', 'n', 'a', 'c', '_', 'h', 'l', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'h',
-  'l', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u',
-  'd', '_', 'n', 'a', 'c', '_', 'l', 'h', '_', 's', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'h',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'd',
-  '_', 'n', 'a', 'c', '_', 'l', 'l', '_', 's', '0', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'm', 'p', 'y', 'u', 'd', '_', 'n', 'a', 'c', '_', 'l', 'l', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'm', 'p', 'y', 'u', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'n', 'a', 'c', 'c', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'n', 'a', 'c', 'c', 'i', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 's', 'u', 'b', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
-  'a', 'b', 's', 'd', 'i', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'c', 'm', 'a', 'c', '_', 's', '0', '_', 's', 'a', 't', '_', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'a', 'c', '_', 's', '0',
-  '_', 's', 'a', 't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c',
-  'm', 'p', 'y', '_', 's', '0', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '0', '_', 's', 'a',
-  't', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'c', 'm', 'p', 'y',
-  '_', 's', '1', '_', 's', 'a', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'c', 'm', 'p', 'y', '_', 's', '1', '_', 's', 'a', 't', '_', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'a', 'c', 's', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'a', 'c', 's', '_',
-  's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p', 'y', 'r',
-  's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd', 'm', 'p',
-  'y', 'r', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'd',
-  'm', 'p', 'y', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v',
-  'd', 'm', 'p', 'y', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'm', 'a', 'c', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a',
-  'c', '2', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'a', 'c',
-  '2', 'e', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm',
-  'a', 'c', '2', 'e', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'm', 'a', 'c', '2', 's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'm', 'a', 'c', '2', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'm', 'a', 'c', '2', 's', 'u', '_', 's', '0', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'v', 'm', 'a', 'c', '2', 's', 'u', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 'e', 's', '_', 's',
-  '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 'e', 's',
-  '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2',
-  's', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y',
-  '2', 's', '_', 's', '0', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2',
-  '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '1', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '2', '_', 'v', 'm', 'p', 'y', '2', 's', '_', 's', '1', 'p', 'a', 'c', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's', 'u', '_',
-  's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'm', 'p', 'y', '2', 's',
-  'u', '_', 's', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'a', 'd',
-  'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'a', 'd', 'd', 'u',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a', 'c', 'i',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'a',
-  'c', 'i', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r',
-  'c', 'm', 'a', 'c', 'r', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_',
-  'v', 'r', 'c', 'm', 'a', 'c', 'r', '_', 's', '0', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'i', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'i', '_', 's', '0',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 'r',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p',
-  'y', 'r', '_', 's', '0', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r',
-  'c', 'm', 'p', 'y', 's', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 's', '1', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'c', 'm', 'p', 'y', 's', '_', 's',
-  '1', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'm', 'a', 'c',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'v', 'r', 'm', 'p', 'y',
-  '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '2', '_', 'x', 'o', 'r', '_', 'x',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'a', 'n',
-  'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'o', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'a', 'n', 'd', '_', 'x', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'i', '_', 'w', 'h', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'c', 'm', 'p', 'y', 'r', '_', 'w', 'h',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'a', 'c', '_', 'u', 'p', '_',
-  's', '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p',
-  'y', 'r', 'i', '_', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_',
-  'm', 'p', 'y', 'r', 'i', '_', 'a', 'd', 'd', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '4', '_', 'm', 'p', 'y', 'r', 'i', '_', 'a', 'd', 'd', 'r', '_', 'u', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'r', '_', 'a', 'd',
-  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'm', 'p', 'y', 'r', 'r', '_',
-  'a', 'd', 'd', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'n', 'a', 'c', '_',
-  'u', 'p', '_', 's', '1', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4',
-  '_', 'o', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o',
-  'r', '_', 'a', 'n', 'd', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r',
-  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'o', 'r', '_', 'x', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'p', 'm', 'p', 'y', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'p', 'm', 'p', 'y', 'w', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'v', 'p', 'm', 'p', 'y', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '4', '_', 'v', 'p', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 'a',
-  'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm',
-  'p', 'y', 'e', 'h', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 's', '0', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'e', 'h', '_', 's', '1',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_',
-  'a', 'c', 'c', '_', 's', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'v', 'r',
-  'm', 'p', 'y', 'o', 'h', '_', 'a', 'c', 'c', '_', 's', '1', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 's', '0', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'M', '4', '_', 'v', 'r', 'm', 'p', 'y', 'o', 'h', '_', 's',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'a', 'n', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'a', 'n', 'd', 'n',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '4', '_', 'x', 'o', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '5', '_', 'v', 'd', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '5', '_', 'v', 'd', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'M', '5', '_', 'v', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'M', '5', '_', 'v', 'm', 'a', 'c', 'b', 'u', 'u', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'M', '5', '_', 'v', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '5', '_', 'v', 'm', 'p', 'y', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5',
-  '_', 'v', 'r', 'm', 'a', 'c', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5',
-  '_', 'v', 'r', 'm', 'a', 'c', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5',
-  '_', 'v', 'r', 'm', 'p', 'y', 'b', 's', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '5',
-  '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M', '6',
-  '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'M',
-  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 'd', 'd', 'a', 's', 'l', '_', 'r', 'r', 'r', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_',
-  'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l',
-  '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'l', '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'a', 's', 'l', '_', 'i', '_', 'p', '_', 'x', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r',
-  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
-  'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'l', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'r', '_', 'x', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'i', '_', 'v',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r',
-  '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'l', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 'a', 'c',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'r',
-  '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'l', '_',
-  'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'l', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'l', '_', 'r', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'v', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'l', '_', 'r', '_', 'v', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_',
-  'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
-  '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'r', '_', 'i', '_', 'p', '_', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'a', 's', 'r', '_', 'i', '_', 'p', '_', 'r', 'n', 'd', '_', 'g',
-  'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'r', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'r', '_', 'n',
-  'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_',
-  'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_',
-  'i', '_', 'r', '_', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'r', '_', 'i', '_', 'r', '_', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd',
-  's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's',
-  'r', '_', 'i', '_', 's', 'v', 'w', '_', 't', 'r', 'u', 'n', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'v', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'i', '_', 'v', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'p', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_',
-  'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
-  '_', 'r', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a',
-  's', 'r', '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'n', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'r', '_',
-  'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r',
-  '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r',
-  '_', 'r', '_', 'r', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'a', 's', 'r', '_', 'r', '_', 's', 'v', 'w', '_', 't', 'r', 'u', 'n', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'v', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'a', 's', 'r', '_', 'r', '_', 'v', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'b', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'b', 'r', 'e', 'v', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
-  'a', 'b', 'a', 'c', 'e', 'n', 'c', 'b', 'i', 'n', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'c', 'l', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '0',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', '1', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'c', 'l', '1', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
-  'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'b', 'n', 'o', 'r',
-  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 'l', 'b', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'c', 'l', 'r', 'b', 'i', 't', '_', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'c', 't', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c',
-  't', '0', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'c', 't', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'c', 't', '1', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'd', 'e', 'i', 'n', 't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'u', '_', 'r',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c', 't',
-  'u', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'e', 'x', 't', 'r', 'a', 'c',
-  't', 'u', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n',
-  's', 'e', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's', 'e',
-  'r', 't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's',
-  'e', 'r', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n', 's', 'e',
-  'r', 't', 'p', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'i', 'n',
-  't', 'e', 'r', 'l', 'e', 'a', 'v', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'l', 'f', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_',
-  'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r',
-  '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
-  'l', '_', 'r', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'p', '_', 'x',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'l', '_',
-  'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'l', '_', 'r', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'l', '_', 'r', '_', 'r', '_', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'l', '_', 'r', '_', 'v', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'p', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_',
-  'p', '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
-  '_', 'i', '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'r', '_', 'i', '_', 'p', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r', '_', 'a', 'n',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'i', '_', 'r',
-  '_', 'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_',
-  'i', '_', 'r', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's',
-  'r', '_', 'i', '_', 'r', '_', 'x', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'i', '_', 'v', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_', 'a', 'n', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'p', '_',
-  'n', 'a', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r',
-  '_', 'p', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r',
-  '_', 'r', '_', 'p', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  'l', 's', 'r', '_', 'r', '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l',
-  's', 'r', '_', 'r', '_', 'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'a', 'n', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r', '_', 'n', 'a',
-  'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r', '_', 'r',
-  '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r',
-  '_', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'l', 's', 'r', '_', 'r',
-  '_', 'v', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'c', 'k', 'h',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'p', 'a', 'r', 'i', 't', 'y', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'e', 't', 'b', 'i', 't', '_', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '2', '_', 's', 'h', 'u', 'f', 'f', 'o', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v',
-  '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'b', 'r', 'e', 'v', '_', 's', 't', 'h', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_', 's', 't', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'r', 'e', 'v', '_',
-  's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's', 't', 'o', 'r', 'e',
-  'w', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_',
-  's', 'v', 's', 'a', 't', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 's',
-  'v', 's', 'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't',
-  'a', 'b', 'l', 'e', 'i', 'd', 'x', 'b', '_', 'g', 'o', 'o', 'd', 's', 'y',
-  'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l',
-  'e', 'i', 'd', 'x', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd',
-  'x', 'h', '_', 'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 't', 'a', 'b', 'l', 'e', 'i', 'd', 'x', 'w', '_',
-  'g', 'o', 'o', 'd', 's', 'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 't', 'o', 'g', 'g', 'l', 'e', 'b', 'i', 't', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 't', 's', 't', 'b', 'i', 't', '_',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'i',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'r',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'n', 'e', 'g', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 'c', 'r', 'o', 't', 'a', 't', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'c', 'n', 'e', 'g', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k', 'w', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'r', 'n', 'd', 'p', 'a', 'c', 'k',
-  'w', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'h', 'b', '_',
-  'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
-  'a', 't', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a',
-  't', 'h', 'u', 'b', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '2', '_', 'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2',
-  '_', 'v', 's', 'a', 't', 'w', 'h', '_', 'n', 'o', 'p', 'a', 'c', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '2', '_', 'v', 's', 'a', 't', 'w', 'u', 'h', '_', 'n', 'o',
-  'p', 'a', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'a', 't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'a', 't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p', 'l',
-  'i', 'c', 'e', 'i', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'p',
-  'l', 'i', 'c', 'e', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's',
-  'x', 't', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 's', 'x', 't',
-  'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e',
-  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'e',
-  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o',
-  'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 't', 'r', 'u', 'n', 'o',
-  'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'b', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '2', '_', 'v', 'z', 'x', 't', 'h', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'a', 'd', 'd', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'a', 's', 'l', '_', 'r', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'd', 'd', 'i', '_', 'l', 's', 'r',
-  '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n', 'd', 'i', '_',
-  'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'a', 'n',
-  'd', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'c', 'l', 'b', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'c', 'l', 'b', 'p', 'a', 'd', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'c', 'l', 'b', 'p', 'n', 'o', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'e', 'x', 't', 'r', 'a', 'c', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'e',
-  'x', 't', 'r', 'a', 'c', 't', '_', 'r', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'p', '_', 'r', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '4', '_', 'l', 's', 'l', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_',
-  'n', 't', 's', 't', 'b', 'i', 't', '_', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'n', 't', 's', 't', 'b', 'i', 't', '_', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '4', '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', '_', 'a', 'n', 'd', 'i', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', '_', 'o', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'o',
-  'r', 'i', '_', 'a', 's', 'l', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 'o', 'r', 'i', '_', 'l', 's', 'r', '_', 'r', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '4', '_', 'p', 'a', 'r', 'i', 't', 'y', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4',
-  '_', 's', 't', 'o', 'r', 'e', 'd', '_', 'l', 'o', 'c', 'k', 'e', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'a', 'd', 'd', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'a', 's', 'l', '_', 'r',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'S', '4', '_', 's', 'u', 'b', 'i', '_', 'l', 's',
-  'r', '_', 'r', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c', 'r',
-  'o', 't', 'a', 't', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'r', 'c',
-  'r', 'o', 't', 'a', 't', 'e', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S',
-  '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'h', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '4', '_', 'v', 'x', 'a', 'd', 'd', 's', 'u', 'b', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a', 'd', 'd',
-  'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '4', '_', 'v', 'x', 's', 'u', 'b', 'a',
-  'd', 'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r', 'h', 'u',
-  'b', '_', 'r', 'n', 'd', '_', 's', 'a', 't', '_', 'g', 'o', 'o', 'd', 's',
-  'y', 'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'a', 's', 'r',
-  'h', 'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_', 'p',
-  'o', 'p', 'c', 'o', 'u', 'n', 't', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '5', '_',
-  'v', 'a', 's', 'r', 'h', 'r', 'n', 'd', '_', 'g', 'o', 'o', 'd', 's', 'y',
-  'n', 't', 'a', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_',
-  'i', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i',
-  '_', 'p', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o',
-  'l', '_', 'i', '_', 'p', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6',
-  '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'n', 'a', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'p', '_', 'x',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i',
-  '_', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_',
-  'r', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'r', 'o', 'l',
-  '_', 'i', '_', 'r', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_',
-  'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'n', 'a', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'S', '6', '_', 'r', 'o', 'l', '_', 'i', '_', 'r', '_', 'x', 'a',
-  'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 's', 'p', 'l', 'a', 't',
-  'r', 'b', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v', 't', 'r', 'u', 'n',
-  'e', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'S', '6', '_', 'v',
-  't', 'r', 'u', 'n', 'o', 'h', 'b', '_', 'p', 'p', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'e', 'x', 't', 'r', 'a', 'c', 't', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'h', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'o', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a',
-  't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a',
-  't', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l',
-  'v', 's', 'p', 'l', 'a', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'l',
-  'v', 's', 'p', 'l', 'a', 't', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'l', 'v', 's', 'p', 'l', 'a', 't', 'w', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'a',
-  'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p',
-  'r', 'e', 'd', '_', 'a', 'n', 'd', '_', 'n', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'p', 'r', 'e', 'd', '_', 'a', 'n', 'd', '_', 'n', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'n', 'o',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'n', 'o',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r',
-  'e', 'd', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e',
-  'd', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_', 'n', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'p', 'r', 'e', 'd', '_', 'o', 'r', '_', 'n', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c',
-  'a', 'l', 'a', 'r', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e',
-  'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 's', 'c', 'a', 'l',
-  'a', 'r', '2', 'v', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e',
-  'd', '_', 's', 'c', 'a', 'l', 'a', 'r', '2', 'v', '2', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'x', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'p', 'r', 'e', 'd', '_', 'x', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h',
-  'u', 'f', 'f', 'e', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 's', 'h',
-  'u', 'f', 'f', 'e', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 's', 'h', 'u', 'f', 'f', 'e', 'q', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n',
-  'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'S', '3', '2', 'b', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3',
-  '2', 'b', '_', 'n', 't', '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't',
-  '_', 'n', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't',
-  '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'S', '3', '2', 'b', '_', 'n', 't', '_', 'q', 'p', 'r', 'e', 'd',
-  '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'S', '3', '2', 'b', '_', 'q', 'p', 'r', 'e', 'd', '_', 'a', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'S', '3', '2', 'b', '_', 'q', 'p', 'r',
-  'e', 'd', '_', 'a', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'b', 's', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'b', 's', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'b', 's', 'b', '_', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f',
-  'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i',
-  'f', 'f', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'u', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i',
-  'f', 'f', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's',
-  'd', 'i', 'f', 'f', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'd', 'i', 'f', 'f', 'w', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h', '_',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'b', 's', 'h',
-  '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'b', 's', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'b', 's', 'w', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'b', 's', 'w', '_', 's', 'a', 't', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', 'd', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', '_', 'd', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'b', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b',
-  'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'd', 'd', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'b', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a', 't', '_', 'd',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'b', 's', 'a',
-  't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'v', '6',
-  '_', 'v', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'v',
-  '6', '_', 'v', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'c', 'l', 'b',
-  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'c', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'c', 'l', 'b', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'h', '_', 'd', 'v', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'n', 'q', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 'q', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h', 's', 'a', 't', '_', 'd', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'h',
-  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'h', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'h', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u',
-  'b', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'u', 'b', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', 'a', 't', '_', 'd', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a', 't', '_', 'd', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', 'a',
-  't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'h', 'w', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'u', 'w', 's', 'a',
-  't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd',
-  'u', 'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'd', 'd', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', '_', 'd', 'v', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 'n', 'q',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd',
-  'd', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w',
-  'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'w', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'd', 'd', 'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_', 'd', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'd', 'd', 'w', 's', 'a', 't', '_',
-  'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'l', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'l', 'i', 'g', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q', 'r', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'n', 'q',
-  'r', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'n', 'd', 'n', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q', 'r', 't', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'q',
-  'r', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'n', 'd', 'q', 'r', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'n', 'q', 'v', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd',
-  'v', 'q', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v',
-  'q', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'n', 'd', 'v', 'r', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'n', 'd', 'v', 'r', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'n', 'd', 'v', 'r', 't', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'l', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'l', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'h', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'l', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'l', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l',
-  'w', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'l', 'w', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's',
-  'r', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 'r', 'n', 'd', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 'r', 'n',
-  'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'r', 'h', 'b', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b',
-  'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'r', 'h', 'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h', 'u', 'b',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'h',
-  'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 's', 'r', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 's', 'r', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b', 'r', 'n', 'd', 's',
-  'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h',
-  'u', 'b', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u', 'b', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'h', 'u',
-  'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h',
-  'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'u', 'w', 'u', 'h', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'r', 'w', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 's', 'r', 'w', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 'r', 'n', 'd',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w',
-  'h', 'r', 'n', 'd', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'h', 's', 'a', 't', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 's', 'r', 'w', 'u', 'h', 'r', 'n', 'd', 's', 'a', 't', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r',
-  'w', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  's', 'r', 'w', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 's', 'r', 'w', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g', 'n', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g',
-  'n', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 's', 's', 'i', 'g',
-  'n', 'p', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'b', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'b', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'h', 'r', 'n', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b', 'r',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'b',
-  'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'a', 'v', 'g', 'u', 'h', 'r', 'n', 'd', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u', 'w',
-  'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a', 'v', 'g', 'u',
-  'w', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'a',
-  'v', 'g', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'a', 'v', 'g', 'w', 'r', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'c', 'l', '0', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'c', 'l', '0', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'c', 'l', '0', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'c', 'o', 'm', 'b', 'i', 'n', 'e', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', '0', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'd', '0', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 'd', '0', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'e', 'a', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  'e', 'a', 'l', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'e', 'a', 'l', 'b', '4', 'w', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'v', 'd', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'a', 'l', 'v', 'd', 'd',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e',
-  'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'e', 'l', 't',
-  'a', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's',
-  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
-  'p', 'y', 'b', 'u', 's', '_', 'd', 'v', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'b', 'u', 's', '_', 'd', 'v',
-  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_',
-  'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h',
-  'b', '_', 'd', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'd', 'm', 'p', 'y', 'h', 'b', '_', 'd', 'v', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
-  'y', 'h', 'i', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  'm', 'p', 'y', 'h', 'i', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'i', 's', 'a', 't',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p',
-  'y', 'h', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'a', 't', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
-  'p', 'y', 'h', 's', 'u', 'i', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 'i', 's',
-  'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 'm', 'p', 'y', 'h', 's', 'u', 's', 'a', 't', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 's', 'u', 's',
-  'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd', 'm',
-  'p', 'y', 'h', 'v', 's', 'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'd', 'm', 'p', 'y', 'h', 'v', 's', 'a', 't', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'd', 's', 'a', 'd', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'd',
-  's', 'a', 'd', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'd', 's', 'a', 'd', 'u', 'h', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
-  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_',
-  'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'b', '_',
-  'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'e', 'q', 'b', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'e', 'q', 'b', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'e', 'q', 'b', '_', 'x', 'o', 'r', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a', 'n', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'a', 'n', 'd', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'h', '_', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
-  'q', 'h', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e',
-  'q', 'h', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'e', 'q', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'e', 'q', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'o', 'r', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'x', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'e', 'q', 'w', '_', 'x', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  'a', 't', 'h', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm',
-  'h', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'h', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r',
-  'm', 'h', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't',
-  'h', 'e', 'r', 'm', 'h', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't', 'h', 'e', 'r', 'm', 'w', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 'a', 't',
-  'h', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  'a', 't', 'h', 'e', 'r', 'm', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'b', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_', 'o', 'r', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_',
-  'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'b', '_',
-  'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
-  'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
-  'h', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'h', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'h', '_', 'x', 'o', 'r', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_',
-  'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b',
-  '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'b', '_', 'o', 'r', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'x', 'o', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'b', '_', 'x', 'o',
-  'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
-  'u', 'h', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'h', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_', 'o', 'r', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h', '_',
-  'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'h',
-  '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'u', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'o', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'u', 'w', '_', 'o', 'r',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't',
-  'u', 'w', '_', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g',
-  't', 'u', 'w', '_', 'x', 'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'g', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'g', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'g', 't', 'w', '_', 'a', 'n', 'd', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'o', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'o', 'r', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'x',
-  'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'g', 't', 'w', '_', 'x',
-  'o', 'r', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'i', 'n', 's', 'e', 'r', 't', 'w', 'r', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l', 'i', 'g', 'n', 'b', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a', 'l',
-  'i', 'g', 'n', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'a',
-  'l', 'i', 'g', 'n', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 's', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'l', 's', 'r', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 's', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 's', 'r', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'l', 's', 'r', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 's', 'r', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 's', 'r', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'l', 's', 'r', 'w', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 's', 'r', 'w', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 'u', 't', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'l', 'u', 't', '4', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'l', 'u', 't', 'v', 'v', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'n', 'm', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'n',
-  'm', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
-  'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l',
-  'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a', 'c', 'c', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'v', 'b', '_', 'o', 'r', 'a',
-  'c', 'c', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'l', 'u', 't', 'v', 'v', 'b', 'i', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
-  '_', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v',
-  'w', 'h', '_', 'n', 'm', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_',
-  'o', 'r', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', '_', 'o', 'r', 'a', 'c', 'c',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h',
-  '_', 'o', 'r', 'a', 'c', 'c', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'l', 'u', 't', 'v', 'w', 'h', 'i', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e',
-  'd', 's', 't', 'o', 'r', 'e', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 'q', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's',
-  'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'n', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r',
-  'e', 'n', 't', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'n',
-  't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e',
-  'd', 's', 't', 'o', 'r', 'e', 'n', 't', 'q', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's', 'k', 'e', 'd', 's', 't',
-  'o', 'r', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 's',
-  'k', 'e', 'd', 's', 't', 'o', 'r', 'e', 'q', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'a', 'x', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'a', 'x', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'a', 'x', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'a', 'x', 'u', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'a', 'x', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'a', 'x', 'w', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'i', 'n', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'i', 'n', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'i', 'n', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'i', 'n', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'i', 'n', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'i', 'n', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b',
-  'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 's', 'v', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a',
-  'b', 'u', 'u', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'a', 'b', 'u', 'u', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'b', 'u', 'u', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'a', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'a', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'h', 's', 'a',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'h', 'h', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'a', 'u', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'a', 'u', 'h', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'a', 'u', 'h', 'b', '_', 'a', 'c',
-  'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'a', 'u', 'h', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'a', 'u', 'h', 'u', 'h', 's', 'a', 't', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 's', 'u', 'h',
-  'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  's', 'u', 'h', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'u',
-  's', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b', 'v', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'b',
-  'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e', 'w', 'u', 'h',
-  '_', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'e',
-  'w', 'u', 'h', '_', '6', '4', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's',
-  'a', 't', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'h', 's', 'a', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'r', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 's', 'r', 's',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'h', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'h', 's', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'h', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'h', 'u', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'u', 's', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'h', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'h', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'h', 'v', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h', 'v',
-  's', 'r', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'h',
-  'v', 's', 'r', 's', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'e', 'o', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'h', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
-  'e', 'w', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'i', 'e', 'w', 'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'e', 'w', 'u', 'h', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'i', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'h',
-  'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o', 'w', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'o', 'w', 'h', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i',
-  'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'w', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'i', 'w', 'b', '_', 'a', 'c', 'c', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'i', 'w', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'm', 'p', 'y', 'i', 'w', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'i', 'w', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'i', 'w', 'u', 'b', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'o', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o',
-  'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'o', 'w', 'h', '_', '6', '4', '_', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', '6', '4',
-  '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n', 'd',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p',
-  'y', 'o', 'w', 'h', '_', 'r', 'n', 'd', '_', 's', 'a', 'c', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 'r', 'n',
-  'd', '_', 's', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_', 's', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'o', 'w', 'h', '_',
-  's', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'm', 'p', 'y', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', '_', 'a', 'c', 'c', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'u', 'b', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
-  'b', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'u', 'h', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm',
-  'p', 'y', 'u', 'h', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'e',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y',
-  'u', 'h', 'e', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u', 'h', 'v', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'm', 'p', 'y', 'u',
-  'h', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'm', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'm', 'u', 'x', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'n', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n',
-  'a', 'v', 'g', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'n', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'n', 'a', 'v', 'g', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'n', 'a', 'v', 'g', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'n', 'a', 'v', 'g', 'w', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n', 'o', 'r', 'm', 'a', 'm', 't',
-  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'n',
-  'o', 'r', 'm', 'a', 'm', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'n', 'o', 'r', 'm', 'a', 'm', 't', 'w', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'n', 'o', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'n', 'o', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'o', 'r',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a',
-  'c', 'k', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c',
-  'k', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'p', 'a', 'c', 'k', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'a', 'c', 'k', 'e', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'b', '_', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'b', '_', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'a', 'c', 'k', 'h', 'u', 'b', '_', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'h', 'u', 'b', '_', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a',
-  'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c',
-  'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'p', 'a', 'c', 'k', 'o', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'a', 'c', 'k', 'o', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'h', '_', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'h', '_', 's',
-  'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'a', 'c', 'k', 'w', 'u', 'h', '_', 's', 'a', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 'p', 'a', 'c', 'k', 'w', 'u', 'h', '_', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'o',
-  'p', 'c', 'o', 'u', 'n', 't', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'o', 'p', 'c', 'o', 'u', 'n', 't', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'p',
-  'r', 'e', 'f', 'i', 'x', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'p', 'r', 'e', 'f', 'i', 'x', 'q', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'p', 'r', 'e', 'f', 'i', 'x', 'q', 'w',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'd',
-  'e', 'l', 't', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'd', 'e',
-  'l', 't', 'a', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't',
-  't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'b', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 'b', '_',
-  'r', 't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b',
-  'u', 's', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u',
-  's', 'i', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'i', '_', 'a',
-  'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'u', 's', 'v',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'b', 'u', 's', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b', 'v', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'b',
-  'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
-  'p', 'y', 'b', 'v', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p',
-  'y', 'u', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_',
-  'r', 't', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'm', 'p', 'y', 'u', 'b', '_', 'r', 't', 't', '_', 'a', 'c', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', '_',
-  'r', 't', 't', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'i', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u',
-  'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'm', 'p', 'y', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'm',
-  'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 'r', 'm', 'p', 'y', 'u', 'b', 'v', '_', 'a', 'c', 'c', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'r', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'h', 'b',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
-  'u', 'n', 'd', 'h', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'o', 'u', 'n', 'd', 'h', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'h', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'u', 'h', 'u',
-  'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'r', 'o', 'u', 'n', 'd', 'u', 'w', 'u', 'h', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o', 'u', 'n', 'd', 'w', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 'o',
-  'u', 'n', 'd', 'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  'o', 'u', 'n', 'd', 'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u', 'b', 'i', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r', 's', 'a', 'd', 'u',
-  'b', 'i', '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'r',
-  's', 'a', 'd', 'u', 'b', 'i', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'h', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'h', 'u', 'b', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'u',
-  'w', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'a', 't', 'u',
-  'w', 'u', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'a', 't', 'w', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'a', 't', 'w', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'b', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
-  't', 't', 'e', 'r', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'c', 'a', 't', 't', 'e', 'r', 'm', 'h', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h',
-  '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a',
-  't', 't', 'e', 'r', 'm', 'h', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'm', 'h', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
-  't', 'e', 'r', 'm', 'h', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm',
-  'h', 'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', '_', 'a', 'd', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm',
-  'h', 'w', '_', 'a', 'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'h', 'w', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'm', 'h', 'w', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c', 'a', 't',
-  't', 'e', 'r', 'm', 'w', '_', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', '_', 'a', 'd', 'd',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'c',
-  'a', 't', 't', 'e', 'r', 'm', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'c', 'a', 't', 't', 'e', 'r', 'm', 'w', 'q', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'h', 'u', 'f', 'e', 'h', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f',
-  'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f',
-  'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'h', 'u', 'f', 'f', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'h', 'u', 'f', 'f', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'o', 'b', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'v', 'd',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'f', 'v',
-  'd', 'd', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'h', 'u', 'f', 'o', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'h', 'u', 'f', 'o', 'e', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'e', 'h', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'h', 'u', 'f', 'o', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'b', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'b', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'b', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'b', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'b', 'q', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b', 's', 'a', 't', '_', '1',
-  '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'b',
-  's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'b', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'v', '6', '_', 'v', 's', 'u', 'b', 'c', 'a', 'r', 'r', 'y',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'v', '6', '_', 'v', 's', 'u', 'b', 'c', 'a', 'r', 'r',
-  'y', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'h', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'h', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'h', 'n', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'h', 'n', 'q', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'q', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 's', 'a', 't', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'h', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'h', 'w', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'h', '_',
-  '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'u', 'b', 's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'u', 'b', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a', 't', '_', 'd', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 's', 'a',
-  't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b', '_', 's', 'a', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'b', 'u', 'b', 'b',
-  '_', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 's', 'a', 't', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 's',
-  'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'u', 'h', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'h', 'w', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w',
-  's', 'a', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u',
-  'w', 's', 'a', 't', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6',
-  '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', 'a', 't', '_',
-  'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  's', 'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b',
-  'w', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'w', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's',
-  'u', 'b', 'w', '_', 'd', 'v', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_',
-  'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 's', 'u', 'b', 'w', 'n', 'q', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 'q', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u', 'b', 'w', 's', 'a', 't',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'u',
-  'b', 'w', 's', 'a', 't', '_', 'd', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 's', 'u', 'b', 'w', 's', 'a', 't', '_', 'd', 'v', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 's', 'w', 'a', 'p', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', '_',
-  'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H',
-  'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y',
-  'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V',
-  '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's', '_', '1', '2', '8', 'B',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'b', 'u', 's',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p',
-  'y', 'b', 'u', 's', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b', '_', '1', '2', '8',
-  'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p', 'y', 'h', 'b',
-  '_', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 't', 'm', 'p',
-  'y', 'h', 'b', '_', 'a', 'c', 'c', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'b', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c',
-  'k', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c',
-  'k', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'u', 'n', 'p', 'a', 'c', 'k', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_',
-  'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'b', '_', '1', '2', '8', 'B', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A',
-  'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'o',
-  'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'u',
-  'n', 'p', 'a', 'c', 'k', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'u', 'n', 'p', 'a', 'c', 'k', 'u', 'b', '_', '1', '2', '8', 'B', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O',
-  'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G',
-  'O', 'N', '_', 'V', '6', '_', 'v', 'u', 'n', 'p', 'a', 'c', 'k', 'u', 'h',
-  '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o',
-  'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X',
-  'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'x', 'o', 'r', '_', '1', '2',
-  '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v', 'z', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'z', 'b', '_', '1', '2', '8', 'B', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N',
-  '_', 'V', '6', '_', 'v', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'V', '6', '_', 'v',
-  'z', 'h', '_', '1', '2', '8', 'B', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd',
-  'c', 'c', 'l', 'e', 'a', 'n', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_', 'd',
-  'c', 'c', 'l', 'e', 'a', 'n', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y',
-  '2', '_', 'd', 'c', 'i', 'n', 'v', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '2', '_',
-  'd', 'c', 'z', 'e', 'r', 'o', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '4', '_', 'l',
-  '2', 'f', 'e', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'H', 'E', 'X', 'A', 'G', 'O', 'N', '_', 'Y', '5', '_', 'l', '2',
-  'f', 'e', 't', 'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l',
-  'd', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i',
-  'r', 'c', '_', 'l', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd', 'u', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 'l', 'd',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r',
-  'c', '_', 's', 't', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's', 't', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'c', 'i', 'r', 'c', '_', 's',
-  't', 'h', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'c', 'i', 'r', 'c', '_', 's', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', '_', 'm', 'm', '2', '5', '6', 'i', '_', 'v', 'a', 'd',
-  'd', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'H', 'E',
-  'X', 'A', 'G', 'O', 'N', '_', 'p', 'r', 'e', 'f', 'e', 't', 'c', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'a', 'b', 's', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_',
-  's', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'a', 'b', 's', 'q', '_', 's', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
-  'd', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
-  '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'd', 'd', '_', 'a', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd',
-  'q', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', '_', 's', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'a', 'd', 'd', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_', 'r', '_', 'p', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
-  'd', 'd', 'q', 'h', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'q', 'h', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'a',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'a', 'd', 'd', 's', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_',
-  'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's',
-  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 's', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
-  's', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd',
-  'd', 's', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 's', '_', 'u', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'd', 'd', 's', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 's', 'c', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
-  'd', 'd', 'u', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_', 'q', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'a', 'd', 'd', 'u', '_', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', '_',
-  's', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'a', 'd', 'd', 'u', 'h', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'a',
-  'd', 'd', 'u', 'h', '_', 'r', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'a', 'd', 'd', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd',
-  'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'a', 'd', 'd', 'v', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'd', 'd', 'v', 'i', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'a', 'd', 'd', 'w', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'n', 'd', '_', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'n', 'd',
-  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'a', 'p', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_',
-  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b',
-  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u',
-  'b', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 's',
-  'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 's', 'u', 'b', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a',
-  'v', 'e', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
-  'e', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
-  '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', '_',
-  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'v', 'e', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_',
-  's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r',
-  '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e',
-  'r', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'a', 'v',
-  'e', 'r', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'a', 'v', 'e', 'r', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'b', 'a', 'l', 'i', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l',
-  'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'b', 'c', 'l', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'c', 'l', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'c', 'l', 'r', 'i', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
-  'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'l', 'i', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i',
-  'n', 's', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's',
-  'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'i', 'n',
-  's', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'i', 'n', 's', 'r', 'i', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'b',
-  'i', 't', 'r', 'e', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'm', 'n', 'z', '_', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'n', 'z',
-  'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'b', 'm', 'z', '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'm', 'z', 'i', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'n', 'e', 'g', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'b', 'n', 'e', 'g', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'b', 'n', 'e', 'g', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'e', 'g', 'i', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  'n', 'e', 'g', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 'n', 'z', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'n', 'z', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'b', 'p', 'o', 's', 'g', 'e', '3', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 'l', '_',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 's', 'e', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b',
-  's', 'e', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'b', 's', 'e', 't', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 's', 'e', 't', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 's', 'e', 't', 'i', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'b', 'z', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'b', 'z', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'b', 'z', '_',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'b', 'z', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'e', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'c', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'e', 'q', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e', 'q', 'i', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'e',
-  'q', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'c', 'f', 'c', 'm', 's', 'a', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 'e', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 's', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 'e', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 'e', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', '_', 'u', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 'e', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 'e', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 'e', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 'e', 'i', '_', 'u',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 'e', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 't', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 's', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 't', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', '_', 'u', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'l', 't', 'i', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'l', 't', 'i', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'l', 't', 'i', '_', 'u',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 'l', 't', 'i', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_',
-  'e', 'q', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', '_', 'l', 'e', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'c', 'm', 'p', '_', 'l', 't', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g',
-  'd', 'u', '_', 'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u',
-  '_', 'l', 'e', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'd', 'u', '_', 'l',
-  't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'g', 'u', '_', 'e', 'q', '_', 'q',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'c', 'm', 'p', 'g', 'u', '_', 'l', 'e', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c',
-  'm', 'p', 'g', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u',
-  '_', 'e', 'q', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'c', 'm', 'p', 'u', '_', 'l', 'e', '_',
-  'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'c', 'm', 'p', 'u', '_', 'l', 't', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o',
-  'p', 'y', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c',
-  'o', 'p', 'y', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 's', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'c', 'o', 'p', 'y', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'c', 'o', 'p', 'y', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'c', 'o', 'p', 'y', '_', 'u',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'c', 't', 'c', 'm', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'd', 'i', 'v', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 's', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd',
-  'i', 'v', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i',
-  'v', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'd', 'i', 'v', '_', 'u', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'i', 'v',
-  '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'd', 'l', 's', 'a', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 's',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'd', 'o', 't', 'p', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_',
-  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'o', 't', 'p',
-  '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'd', 'o', 't', 'p', '_', 'u', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
-  'a', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'd', 'p', 'a', 'd', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_',
-  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a',
-  'd', 'd', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'd', 'p', 'a', 'd', 'd', '_', 'u', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'd', 'p', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p',
-  'a', 'q', '_', 's', 'a', '_', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', 'x',
-  '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'q', 'x', '_', 's',
-  'a', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 'a', 'u', '_', 'h', '_', 'q',
-  'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'd', 'p', 'a', 'u', '_', 'h', '_', 'q', 'b', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd',
-  'p', 'a', 'x', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', '_', 'w', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'd', 'p', 's', 'q', '_', 's', '_', 'w', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'd', 'p', 's', 'q', '_', 's', 'a', '_', 'l', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's',
-  'q', 'x', '_', 's', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'q', 'x',
-  '_', 's', 'a', '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'u', '_', 'h',
-  '_', 'q', 'b', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'u', '_', 'h', '_', 'q', 'b', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'd', 'p', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_',
-  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's',
-  'u', 'b', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'd', 'p', 's', 'u', 'b', '_', 'u', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'd', 'p', 's', 'u', 'b', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'd', 'p', 's', 'x', '_',
-  'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'p', 'd',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'e', 'x', 't', 'r', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r',
-  '_', 'r', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'e', 'x', 't', 'r', '_', 's', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'e', 'x', 't', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'a', 'd', 'd', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'a', 'd',
-  'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'c', 'a', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'a', 'f', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'c', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'e', 'q', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l',
-  'a', 's', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 'a', 's', 's', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
-  'l', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'c', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'l', 't', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'c', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'n', 'e', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
-  'n', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'c', 'o', 'r', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'o', 'r', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'c', 'u', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'e', 'q', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'c', 'u', 'l', 'e', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 'e', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'c', 'u', 'l', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'l', 't', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c',
-  'u', 'n', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'c', 'u', 'n', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'c', 'u', 'n', 'e',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'c', 'u', 'n', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'd', 'i', 'v', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'd', 'i', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'd', 'o', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e',
-  'x', 'd', 'o', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'p', '2', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x',
-  'p', '2', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'l', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e', 'x',
-  'u', 'p', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'e', 'x', 'u', 'p', 'r', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'e',
-  'x', 'u', 'p', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'f', 'i', 'n', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_',
-  'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'f', 'i', 'n', 't', '_', 'u', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q',
-  'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'f', 'q', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'f', 'q', 'r', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'f', 'q', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l',
-  'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'i', 'l', 'l', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 'l', 'o', 'g', '2', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'l', 'o', 'g', '2', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'm', 'a', 'd', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'd', 'd', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm',
-  'a', 'x', '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'a', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'm', 'a', 'x', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'm', 'a', 'x', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i', 'n',
-  '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'a', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'i',
-  'n', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 'm', 'i', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 's', 'u', 'b', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'm', 's', 'u', 'b', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'm', 'u', 'l', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  'm', 'u', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 'r', 'c', 'p', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'c', 'p',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 'r', 'i', 'n', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 'i', 'n', 't', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 'r', 's', 'q', 'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 'r', 's', 'q', 'r', 't',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 's', 'a', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'a', 'f', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  's', 'e', 'q', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 's', 'e', 'q', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 'e',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 's', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'l', 't', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  's', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'f', 's', 'n', 'e', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'n', 'e',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 's', 'o', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'o', 'r', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  's', 'q', 'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 's', 'q', 'r', 't', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
-  'u', 'b', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 's', 'u', 'b', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'e', 'q',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'f', 's', 'u', 'e', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 'e', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'f', 's', 'u', 'l', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'l', 't', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 's', 'u', 'l', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's',
-  'u', 'n', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 's', 'u', 'n', 'e', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 's', 'u', 'n',
-  'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 's', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i',
-  'n', 't', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'f', 't', 'i', 'n', 't', '_', 'u', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'f', 't', 'i', 'n', 't', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'q', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  't', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 's', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f',
-  't', 'r', 'u', 'n', 'c', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c',
-  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'f', 't', 'r', 'u', 'n', 'c', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h',
-  'a', 'd', 'd', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 's', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'h', 'a', 'd', 'd', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'h', 'a', 'd', 'd', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 'a', 'd', 'd', '_', 'u',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'h', 's', 'u', 'b', '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_',
-  's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'h', 's', 'u', 'b', '_', 's', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u', 'b',
-  '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'h', 's', 'u', 'b', '_', 'u', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'h', 's', 'u',
-  'b', '_', 'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v',
-  'e', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'l', 'v', 'e', 'v', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'e',
-  'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'i', 'l', 'v', 'l', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'l', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v',
-  'o', 'd', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'o',
-  'd', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'i', 'l', 'v', 'o', 'd', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'i', 'l', 'v', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l', 'v', 'r', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'l',
-  'v', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's',
-  'e', 'r', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'e', 'r', 't', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n',
-  's', 'e', 'r', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'i', 'n', 's', 'v', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v',
-  'e', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'i', 'n', 's', 'v', 'e',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'i', 'n', 's', 'v', 'e', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 'b', 'u', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l',
-  'd', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'l', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'l', 'd', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'l', 'd', 'i', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'l', 'd', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'l', 'h', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l', 's', 'a', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'l',
-  'w', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', '_', 'q', '_', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'd', 'd', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'r', '_', 'q',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'd', 'd', 'r', '_', 'q', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'd',
-  'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'd', 'd', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'd', 'd', 'v', '_', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'm', 'a', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a',
-  'q', '_', 's', '_', 'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's',
-  'a', '_', 'w', '_', 'p', 'h', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'a', 'q', '_', 's', 'a', '_',
-  'w', '_', 'p', 'h', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x',
-  '_', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'a', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_',
-  'a', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'a', 'x', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'x', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'x', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'x', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', '_', 'u', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'a', 'x', 'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'a', 'x', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_', 'u',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'a', 'x', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'a', 'x', 'i', '_',
-  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 'i', 'n', '_', 'a', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'a', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'i', 'n', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'i', 'n', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'i', 'n', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
-  'n', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', '_', 'u', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n',
-  'i', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i',
-  'n', 'i', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'i', 'n', 'i', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'i', 'n', 'i', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'i', 'n', 'i', '_', 'u', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'o', 'd', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'o', 'd', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 's', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'o', 'd', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'o',
-  'd', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'm', 'o', 'd', '_', 'u', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'o',
-  'd', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'm', 'o', 'v', 'e', '_', 'v', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 's', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 's', 'u', 'b', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', '_', 'q', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 's', 'u', 'b', 'r', '_', 'q', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'r',
-  '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'm', 's', 'u', 'b', 'u', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'm', 's', 'u', 'b', 'v', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 's', 'u', 'b', 'v', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 's', 'u', 'b', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 't', 'h', 'l', 'i', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'm', 'u', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', '_', 'q', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm',
-  'u', 'l', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', '_', 's', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'm', 'u', 'l', 'e', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'm', 'u', 'l', 'e', 'q', '_', 's', '_', 'w', '_', 'p', 'h', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
-  'u', 'l', 'e', 'u', '_', 's', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
-  'u', 'l', 'e', 'u', '_', 's', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm',
-  'u', 'l', 'q', '_', 'r', 's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_',
-  'r', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 'q', '_', 's', '_', 'p', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'm', 'u', 'l', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'r', '_', 'q', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'm', 'u', 'l', 'r', '_', 'q', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 's', 'a',
-  '_', 'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 's', 'a', 'q', '_', 's', '_',
-  'w', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'm', 'u', 'l', 't', 'u',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'm', 'u', 'l', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'm', 'u', 'l',
-  'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'm', 'u', 'l', 'v', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'n', 'l', 'o', 'c', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o', 'c', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'o',
-  'c', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  'n', 'l', 'z', 'c', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 'n', 'l', 'z', 'c', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'n', 'o', 'r',
-  '_', 'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'n', 'o', 'r', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'o', 'r', '_', 'v', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'o', 'r', 'i',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'p', 'a', 'c', 'k', 'r', 'l', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k',
-  'e', 'v', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'e',
-  'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 'p', 'c', 'k', 'e', 'v', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'p', 'c', 'k', 'o', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'k', 'o', 'd', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'p', 'c', 'k', 'o', 'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p',
-  'c', 'n', 't', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'p', 'c', 'n', 't',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'p', 'i', 'c', 'k', '_', 'p', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'i', 'c', 'k',
-  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'e', 'q', '_', 'w', '_', 'p', 'h',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'p', 'r', 'e', 'c', 'e', 'q', '_', 'w', '_', 'p', 'h', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'p', 'r', 'e', 'c', 'e', 'q', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'l', 'a',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'p', 'r', 'e', 'c', 'e', 'u', '_', 'p', 'h', '_', 'q', 'b', 'r', 'a', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  'p', 'r', 'e', 'c', 'r', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e',
-  'c', 'r', '_', 's', 'r', 'a', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e',
-  'c', 'r', '_', 's', 'r', 'a', '_', 'r', '_', 'p', 'h', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p',
-  'r', 'e', 'c', 'r', 'q', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c',
-  'r', 'q', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q',
-  '_', 'r', 's', '_', 'p', 'h', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'c', 'r', 'q',
-  'u', '_', 's', '_', 'q', 'b', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'p', 'r', 'e', 'p', 'e',
-  'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 'r', 'a', 'd', 'd', 'u', '_', 'w', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r',
-  'd', 'd', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 'r', 'e', 'p', 'l', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 'r', 'e',
-  'p', 'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't',
-  '_', 's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'a', 't', '_', 's', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_',
-  's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'a', 't', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'a', 't', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'a', 't', '_', 'u', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'h', 'f', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'h', 'f', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'h', 'i', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 's', 'h', 'l', 'l', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 's',
-  '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 's', 'h', 'l', 'l', '_', 's', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h',
-  'r', 'a', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's',
-  'h', 'r', 'a', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r',
-  '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  'i', 'p', 's', '_', 's', 'h', 'r', 'a', '_', 'r', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'h',
-  'r', 'l', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 's', 'h', 'r', 'l', '_', 'q', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
-  'd', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'l', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l',
-  'd', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'l', 'd', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'l', 'd', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'l', 'd', 'i', '_', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'l', 'l', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', '_', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'l', 'l', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
-  'l', 'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'l', 'l', 'i', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a',
-  't', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'p', 'l', 'a', 't', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'p', 'l', 'a', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'p', 'l', 'a', 't',
-  'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'p', 'l', 'a', 't', 'i', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'r', 'a', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'r', 'a', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r',
-  'a', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'a', 'i', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'r', 'a', 'r', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r',
-  'a', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r',
-  'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'r', 'a', 'r', 'i', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'a', 'r', 'i',
-  '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'r', 'l', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l',
-  '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'r', 'l', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r',
-  'l', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'i', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'r', 'l', 'r', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r',
-  'l', 'r', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'r', 'l', 'r', '_', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'r', 'l', 'r', 'i', '_', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'r', 'l', 'r', 'i', '_',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'r', 'l', 'r', 'i', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 't', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 't', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 't', '_', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', '_',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i',
-  'p', 's', '_', 's', 'u', 'b', 'q', '_', 's', '_', 'p', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u',
-  'b', 'q', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'p', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's',
-  '_', 's', 'u', 'b', 'q', 'h', '_', 'r', '_', 'p', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b',
-  'q', 'h', '_', 'r', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'q', 'h', '_', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's',
-  'u', 'b', 's', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_',
-  's', 'u', 'b', 's', '_', 's', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 's', '_',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'u', 'b', 's', '_', 'u', '_', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_', 'u',
-  '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 's', 'u', 'b', 's', '_', 'u', '_', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', '_',
-  'u', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
-  'b', 's', 'u', 's', '_', 'u', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_',
-  'u', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'u', 'b', 's', 'u', 's', '_', 'u', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
-  'b', 's', 'u', 'u', '_', 's', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_',
-  's', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm',
-  's', 'a', '_', 's', 'u', 'b', 's', 'u', 'u', '_', 's', '_', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
-  'b', 's', 'u', 'u', '_', 's', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 'p',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p',
-  's', '_', 's', 'u', 'b', 'u', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_',
-  's', '_', 'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', '_', 's', '_', 'q', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_',
-  's', 'u', 'b', 'u', 'h', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 'i', 'p', 's', '_', 's', 'u', 'b', 'u', 'h', '_',
-  'r', '_', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 's', 'u', 'b', 'v', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', '_', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u',
-  'b', 'v', 'i', '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 's', 'u', 'b',
-  'v', 'i', '_', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'm', 's', 'a', '_', 's', 'u', 'b', 'v', 'i', '_', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f',
-  '_', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's',
-  'a', '_', 'v', 's', 'h', 'f', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v', 's', 'h', 'f', '_', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'v',
-  's', 'h', 'f', '_', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'm', 'i', 'p', 's', '_', 'w', 'r', 'd', 's', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a', '_', 'x', 'o', 'r', '_',
-  'v', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'm', 's', 'a',
-  '_', 'x', 'o', 'r', 'i', '_', 'b', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'a', 'd', 'd', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'a', 'd', 'd', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'a', 'd', 'd', '_', 'r', 'm', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'n',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a',
-  'd', 'd', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'a', 'd', 'd', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'a', 'd', 'd', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'a', 'd', 'd', '_', 'r', 'z', '_',
-  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
-  'r', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b',
-  'a', 'r', '_', 'w', 'a', 'r', 'p', '_', 's', 'y', 'n', 'c', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'b', 'a', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'b', 'a', 'r', '_', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b',
-  'a', 'r', 'r', 'i', 'e', 'r', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '_', 's', 'y', 'n',
-  'c', '_', 'c', 'n', 't', '\000', '_', '_', 's', 'y', 'n', 'c', 't', 'h', 'r',
-  'e', 'a', 'd', 's', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a', 'r',
-  '0', '_', 'a', 'n', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
-  'r', '0', '_', 'o', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'a',
-  'r', '0', '_', 'p', 'o', 'p', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'b', 'i', 't', 'c', 'a', 's', 't', '_', 'd', '2', 'l', 'l', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's', 't', '_', 'f', '2',
-  'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i', 't', 'c', 'a', 's',
-  't', '_', 'i', '2', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'b', 'i',
-  't', 'c', 'a', 's', 't', '_', 'l', 'l', '2', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'c', 'e', 'i', 'l', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'c', 'e', 'i', 'l', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'c', 'e', 'i', 'l', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'c', 'o', 's', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'c', 'o', 's', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', '2', 'f', '_', 'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'n', '_', 'f', 't', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'p', '_', 'f', 't',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'f', '_', 'r', 'z', '_',
-  'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_',
-  'h', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'l',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'm',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'i', '_', 'r', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'n', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'l', 'l', '_', 'r', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'm', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'n', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'i', '_', 'r', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'm', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', '2', 'u', 'l', 'l', '_', 'r',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
-  'i', 'v', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'm',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r',
-  'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', 'i', 'v', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', 'i', 'v', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'd', 'i', 'v', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd', 'i', 'v', '_', 'r', 'p',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'd',
-  'i', 'v', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'd', 'i', 'v', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'd', 'i', 'v', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o',
-  'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'e', 'x', '2', '_',
-  'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'e', 'x', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r',
-  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'h', '_', 'r', 'n',
-  '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i',
-  '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'i', '_',
-  'r', 'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'i', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'i', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'f', '2', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', '2', 'i', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'i', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'm', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'm', '_', 'f', 't',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r',
-  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'l', 'l', '_', 'r',
-  'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'l', 'l', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'l', 'l', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', '2', 'l', 'l', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'm', '_', 'f',
-  't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_',
-  'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'i', '_',
-  'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'u', 'i', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'u', 'i', '_', 'r', 'p', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', '2', 'u', 'i', '_', 'r', 'z', '_', 'f', 't', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'm',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r',
-  'm', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2',
-  'u', 'l', 'l', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  '2', 'u', 'l', 'l', '_', 'r', 'n', '_', 'f', 't', 'z', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l', '_', 'r', 'p', '_', 'f',
-  't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l', 'l',
-  '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', '2', 'u', 'l',
-  'l', '_', 'r', 'z', '_', 'f', 't', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'f', 'a', 'b', 's', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', 'a', 'b', 's', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'a', 'b', 's', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', 'l', 'o', 'o', 'r', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', 'l', 'o', 'o', 'r', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', 'l', 'o', 'o', 'r', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'm', '_',
-  'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
-  'a', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'm', 'a', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'f', 'm', 'a', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'd', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a', '_', 'r', 'p', '_', 'f',
-  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm', 'a',
-  '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f', 'm',
-  'a', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'f',
-  'm', 'a', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'f', 'm', 'a', 'x', '_', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', 'm', 'a', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'f', 'm', 'a', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'f', 'm', 'i', 'n', '_', 'd', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'f', 'm', 'i', 'n', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'f', 'm', 'i', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'f', 'n', 's', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'i', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'i', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'i', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i',
-  '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2',
-  'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f',
-  '_', 'r', 'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_',
-  'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', '2', 'f', '_', 'r',
-  'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c',
-  'e', 'p', '_', 'c', 'o', 'n', 's', 't', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 'g', 'l', 'o', 'b', 'a',
-  'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 's', 'p', 'a', 'c',
-  'e', 'p', '_', 'l', 'o', 'c', 'a', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'i', 's', 's', 'p', 'a', 'c', 'e', 'p', '_', 's', 'h', 'a', 'r', 'e',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p', 'e',
-  'p', '_', 's', 'a', 'm', 'p', 'l', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'i', 's', 't', 'y', 'p', 'e', 'p', '_', 's', 'u', 'r', 'f', 'a',
-  'c', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'i', 's', 't', 'y', 'p',
-  'e', 'p', '_', 't', 'e', 'x', 't', 'u', 'r', 'e', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g', '2', '_', 'a', 'p', 'p',
-  'r', 'o', 'x', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'g',
-  '2', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'm', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'm', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'n', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'l', '2', 'f', '_', 'r', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'l', 'o', 'h', 'i', '_', 'i', '2', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'a', 't', 'c', 'h', '_', 'a',
-  'n', 'y', '_', 's', 'y', 'n', 'c', '_', 'i', '3', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'm', 'a', 't', 'c', 'h', '_', 'a', 'n', 'y', '_', 's',
-  'y', 'n', 'c', '_', 'i', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'e', 'm', 'b', 'a', 'r', '_', 'c', 't', 'a', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'm', 'e', 'm', 'b', 'a', 'r', '_', 'g', 'l', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'm', 'e', 'm', 'b', 'a', 'r', '_', 's', 'y', 's',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'm',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r',
-  'm', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'u', 'l', '_', 'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'u', 'l', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'm', 'u', 'l', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '_', 'r', 'p',
-  '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm',
-  'u', 'l', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'm', 'u', 'l', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'm', 'u', 'l', '_', 'r', 'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '2', '4', '_', 'i', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', '2', '4', '_', 'u', 'i', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'i', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'l', 'l',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_', 'u',
-  'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'm', 'u', 'l', 'h', 'i', '_',
-  'u', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'p', 'r', 'm', 't',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'a', 'p', 'p',
-  'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'm', '_', 'f', 't', 'z', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'n',
-  '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r',
-  'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_',
-  'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'c', 'p', '_', 'r', 'p', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'c', 'p', '_', 'r', 'p', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'p', '_', 'f', 't', 'z', '_', 'f',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z', '_',
-  'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'c', 'p', '_', 'r',
-  'z', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c',
-  'l', 'o', 'c', 'k', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 'l', 'o', 'c',
-  'k', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd',
-  '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
-  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_',
-  'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p',
-  't', 'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'y',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'c', 't', 'a', 'i', 'd', '_', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x',
-  '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '0', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
-  's', 'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '0', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '1', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '2', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '3', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '4', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '5', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '6', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '7', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '8', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '1', '9', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '0', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '1', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '3', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '4', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '5', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '6', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '7', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '8', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '2', '9', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r',
-  'e', 'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '0', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '3', '1', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'e', 'n', 'v', 'r', 'e', 'g', '4', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
-  '_', 'e', 'n', 'v', 'r', 'e', 'g', '5', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'e', 'n', 'v', 'r', 'e', 'g', '6', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e',
-  'n', 'v', 'r', 'e', 'g', '7', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n',
-  'v', 'r', 'e', 'g', '8', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e',
-  'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'e', 'n', 'v',
-  'r', 'e', 'g', '9', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'g', 'r', 'i', 'd',
-  'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_',
-  'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'i', 'd',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k',
-  '_', 'e', 'q', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm',
-  'a', 's', 'k', '_', 'g', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'l', 'a',
-  'n', 'e', 'm', 'a', 's', 'k', '_', 'g', 't', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
-  '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'l', 'e', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'l', 'a', 'n', 'e', 'm', 'a', 's', 'k', '_', 'l', 't',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'w',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'x',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'y',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'c', 't', 'a', 'i', 'd', '_', 'z',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 'n', 's', 'm', 'i', 'd', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'n', 't', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'n', 't', 'i', 'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'n', 't', 'i', 'd', '_', 'y', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 't',
-  'i', 'd', '_', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a',
-  'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'n', 'w', 'a', 'r',
-  'p', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '0', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
-  's', 'r', 'e', 'g', '_', 'p', 'm', '1', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_',
-  'p', 'm', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 'p', 'm', '3', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_',
-  's', 'r', 'e', 'g', '_', 's', 'm', 'i', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g',
-  '_', 't', 'i', 'd', '_', 'w', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i',
-  'd', '_', 'x', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd',
-  '_', 'p', 't', 'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'y',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't',
-  'x', '_', 's', 'r', 'e', 'g', '_', 't', 'i', 'd', '_', 'z', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's',
-  'r', 'e', 'g', '_', 'w', 'a', 'r', 'p', 'i', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'e', 'a', 'd', '_', 'p', 't', 'x', '_', 's', 'r', 'e',
-  'g', '_', 'w', 'a', 'r', 'p', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'b', '3', '2', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e', '_', 'b', '6',
-  '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 'o', 't', 'a', 't', 'e',
-  '_', 'r', 'i', 'g', 'h', 't', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'd', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'r', 'o', 'u', 'n', 'd', '_', 'f', 't', 'z', '_', 'f', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p',
-  'p', 'r', 'o', 'x', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'r',
-  's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'r', 's', 'q', 'r', 't', '_', 'a', 'p', 'p',
-  'r', 'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'a', 'd', '_', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'a', 'd', '_', 'u', 'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'a', 't', 'u', 'r', 'a', 't', 'e', '_', 'f',
-  't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f',
-  'l', '_', 'b', 'f', 'l', 'y', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'b', 'f', 'l', 'y', '_', 'i', '3',
-  '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'd',
-  'o', 'w', 'n', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'h', 'f', 'l', '_', 'd', 'o', 'w', 'n', '_', 'i', '3', '2', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'i', 'd', 'x', '_',
-  'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l',
-  '_', 'i', 'd', 'x', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'b', 'f', 'l', 'y',
-  '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f',
-  'l', '_', 's', 'y', 'n', 'c', '_', 'b', 'f', 'l', 'y', '_', 'i', '3', '2',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y',
-  'n', 'c', '_', 'd', 'o', 'w', 'n', '_', 'f', '3', '2', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'd',
-  'o', 'w', 'n', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'i', 'd', 'x', '_', 'f',
-  '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_',
-  's', 'y', 'n', 'c', '_', 'i', 'd', 'x', '_', 'i', '3', '2', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_',
-  'u', 'p', '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'h', 'f', 'l', '_', 's', 'y', 'n', 'c', '_', 'u', 'p', '_', 'i', '3', '2',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f', 'l', '_', 'u', 'p',
-  '_', 'f', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'h', 'f',
-  'l', '_', 'u', 'p', '_', 'i', '3', '2', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'i', 'n', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'i', 'n', '_', 'a', 'p', 'p', 'r', 'o',
-  'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r', 'o', 'x', '_', 'f', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'a', 'p', 'p', 'r',
-  'o', 'x', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'q', 'r', 't', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'q', 'r', 't', '_', 'r', 'm', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'q', 'r', 't', '_', 'r', 'm', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'm', '_', 'f', 't', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_',
-  'r', 'n', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r',
-  't', '_', 'r', 'n', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'q', 'r', 't', '_', 'r', 'n', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_', 'd', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'p', '_',
-  'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r',
-  'p', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'q', 'r', 't', '_', 'r', 'z', '_', 'd', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'q', 'r', 't', '_', 'r', 'z', '_', 'f', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'q', 'r', 't', '_', 'r', 'z', '_', 'f', 't', 'z',
-  '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 's', 'i', 'z', 'e', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'd',
-  'a', 't', 'a', '_', 't', 'y', 'p', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 'q', '_', 'c', 'h', 'a', 'n', 'n', 'e', 'l', '_', 'o', 'r',
-  'd', 'e', 'r', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 'q', '_',
-  'd', 'e', 'p', 't', 'h', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  'q', '_', 'h', 'e', 'i', 'g', 'h', 't', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 'q', '_', 'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i',
-  '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
-  '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i',
-  '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i',
-  '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '1', '6', '_',
-  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '1', 'd', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '6', '4', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '6', '4', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '1', 'd', '_', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2',
-  'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3',
-  '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'v', '2', 'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd',
-  '_', 'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v',
-  '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '2', 'i', '8',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '1', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1',
-  'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_',
-  'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4',
-  'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '1', 'd', '_', 'v', '4', 'i', '8', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i',
-  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y',
-  '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6', '4', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '6',
-  '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'i', '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1',
-  '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '3', '2', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2',
-  'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6', '4', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '6',
-  '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '2', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r',
-  'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_',
-  'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r',
-  'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
-  'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a',
-  'y', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '8', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4',
-  'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '1', '6', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i',
-  '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'i', '3', '2', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '6', '4', '_',
-  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'i', '8',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'c',
-  'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e', 'r', 'o',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2',
-  'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2',
-  'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i',
-  '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '6', '4',
-  '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 'c', 'l',
-  'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'b', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v',
-  '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i',
-  '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '2', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a', 'm', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_',
-  '2', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '2', 'd', '_',
-  'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '1', '6',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '1', '6', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
-  '_', 'i', '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3',
-  '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '3', '2', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '6',
-  '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'i', '8', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
-  'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6',
-  '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '1', '6', '_', 'z', 'e',
-  'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'v', '2', 'i', '3', '2', '_', 'c', 'l', 'a', 'm',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b',
-  '_', '3', 'd', '_', 'v', '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'v', '2', 'i', '3', '2', '_', 'z', 'e', 'r', 'o', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_',
-  'v', '2', 'i', '6', '4', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v',
-  '2', 'i', '6', '4', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i',
-  '6', '4', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_',
-  'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'v', '2', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'v', '4', 'i', '1', '6', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd',
-  '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v',
-  '4', 'i', '1', '6', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i',
-  '3', '2', '_', 'c', 'l', 'a', 'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3',
-  '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_',
-  'z', 'e', 'r', 'o', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'b', '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 'c', 'l', 'a',
-  'm', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'b', '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'b', '_', '3',
-  'd', '_', 'v', '4', 'i', '8', '_', 'z', 'e', 'r', 'o', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
-  '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '1', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '1', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
-  '1', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2',
-  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '3',
-  '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '1', 'd', '_', 'v', '2', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'p', '_', '1', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '1', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '1',
-  'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a',
-  'r', 'r', 'a', 'y', '_', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd',
-  '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
-  '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'i', '8', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '2', 'i', '1', '6',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r',
-  'a', 'y', '_', 'v', '2', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_',
-  'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v', '4', 'i', '3', '2',
-  '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u',
-  's', 't', '_', 'p', '_', '2', 'd', '_', 'a', 'r', 'r', 'a', 'y', '_', 'v',
-  '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '2', 'd', '_', 'i', '3', '2', '_', 't', 'r', 'a', 'p',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_',
-  '2', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2',
-  'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 's', 'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '3',
-  '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '2', 'd', '_', 'v', '2', 'i', '8', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'p', '_', '2', 'd', '_', 'v', '4', 'i', '1', '6', '_', 't', 'r', 'a',
-  'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p',
-  '_', '2', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '2',
-  'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i',
-  '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_',
-  's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'i', '3', '2', '_', 't',
-  'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't',
-  '_', 'p', '_', '3', 'd', '_', 'i', '8', '_', 't', 'r', 'a', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd',
-  '_', 'v', '2', 'i', '1', '6', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v',
-  '2', 'i', '3', '2', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v',
-  'm', '_', 's', 'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '2', 'i',
-  '8', '_', 't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's',
-  'u', 's', 't', '_', 'p', '_', '3', 'd', '_', 'v', '4', 'i', '1', '6', '_',
-  't', 'r', 'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's',
-  't', '_', 'p', '_', '3', 'd', '_', 'v', '4', 'i', '3', '2', '_', 't', 'r',
-  'a', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'u', 's', 't', '_',
-  'p', '_', '3', 'd', '_', 'v', '4', 'i', '8', '_', 't', 'r', 'a', 'p', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 's', 'w', 'a', 'p', '_', 'l', 'o', '_',
-  'h', 'i', '_', 'b', '6', '4', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't',
-  'r', 'u', 'n', 'c', '_', 'd', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't',
-  'r', 'u', 'n', 'c', '_', 'f', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't',
-  'r', 'u', 'n', 'c', '_', 'f', 't', 'z', '_', 'f', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 't', 'x', 'q', '_', 'a', 'r', 'r', 'a', 'y', '_', 's', 'i',
-  'z', 'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c',
-  'h', 'a', 'n', 'n', 'e', 'l', '_', 'd', 'a', 't', 'a', '_', 't', 'y', 'p',
-  'e', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'c', 'h',
-  'a', 'n', 'n', 'e', 'l', '_', 'o', 'r', 'd', 'e', 'r', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'd', 'e', 'p', 't', 'h', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'h', 'e', 'i', 'g', 'h',
-  't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u',
-  'm', '_', 'm', 'i', 'p', 'm', 'a', 'p', '_', 'l', 'e', 'v', 'e', 'l', 's',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 't', 'x', 'q', '_', 'n', 'u', 'm',
-  '_', 's', 'a', 'm', 'p', 'l', 'e', 's', '\000', '_', '_', 'n', 'v', 'v', 'm',
-  '_', 't', 'x', 'q', '_', 'w', 'i', 'd', 't', 'h', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'n', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'd', '_', 'r', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'm', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'n', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'p', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'i', '2', 'f', '_', 'r', 'z', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'm', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'n', '\000', '_', '_',
-  'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'p', '\000', '_',
-  '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'd', '_', 'r', 'z', '\000',
-  '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r', 'm',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_', 'r',
-  'n', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f', '_',
-  'r', 'p', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'u', 'l', 'l', '2', 'f',
-  '_', 'r', 'z', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e',
-  '_', 'a', 'l', 'l', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't',
-  'e', '_', 'a', 'l', 'l', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'n', 'v',
-  'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'n', 'y', '\000', '_', '_', 'n',
-  'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'a', 'n', 'y', '_', 's', 'y',
-  'n', 'c', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_',
-  'b', 'a', 'l', 'l', 'o', 't', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v',
-  'o', 't', 'e', '_', 'b', 'a', 'l', 'l', 'o', 't', '_', 's', 'y', 'n', 'c',
-  '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u', 'n',
-  'i', '\000', '_', '_', 'n', 'v', 'v', 'm', '_', 'v', 'o', 't', 'e', '_', 'u',
-  'n', 'i', '_', 's', 'y', 'n', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p',
-  't', 'o', '_', 'v', 'c', 'i', 'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c',
-  'r', 'y', 'p', 't', 'o', '_', 'v', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a',
-  's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'n',
-  'c', 'i', 'p', 'h', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't',
-  'o', '_', 'v', 'n', 'c', 'i', 'p', 'h', 'e', 'r', 'l', 'a', 's', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'e', 'r', 'm',
-  'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v',
-  'p', 'm', 's', 'u', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't',
-  'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r',
-  'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'h', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 'p', 'm', 's', 'u', 'm', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'b', 'o',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p', 't', 'o', '_', 'v', 's', 'h',
-  'a', 's', 'i', 'g', 'm', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'c', 'r', 'y', 'p',
-  't', 'o', '_', 'v', 's', 'h', 'a', 's', 'i', 'g', 'm', 'a', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 's', 'a', 'l', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'd', 's', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'd', 's', 't', 's', 't', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'd', 's', 't', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'm', 'f', 'v', 's', 'c', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'm', 't', 'v', 's', 'c', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
-  'b', 's', 'd', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'a', 'b', 's', 'd', 'u', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'a', 'd', 'd', 'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
-  'd', 'c', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'e', 'c', 'u',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'e', 'u', 'q', 'm', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'a', 'd', 'd', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
-  'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 's', 'w',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'a', 'd', 'd', 'u', 'b', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'a', 'd', 'd', 'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'd',
-  'd', 'u', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'a', 'v', 'g', 's', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
-  'v', 'g', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'a', 'v', 'g', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'a',
-  'v', 'g', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'b', 'p', 'e', 'r', 'm', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'f', 's', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'f', 'u', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'l', 'z', 'l', 's', 'b', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'b', 'f', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'b', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'e', 'q', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e',
-  'q', 'f', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'b', '_',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'd', '_', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'e', 'q', 'u', 'h', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'e', 'q', 'u', 'h', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'e', 'q', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'e', 'q',
-  'u', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 'e', 'f', 'p', '_', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'f', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'g', 't', 'f', 'p', '_', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'g', 't', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'g', 't', 's', 'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
-  'g', 't', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's',
-  'd', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'h', '_', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 's', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'c', 'm', 'p', 'g', 't', 's', 'w', '_', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'c', 'm', 'p', 'g', 't', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p',
-  'g', 't', 'u', 'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g',
-  't', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'd',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'h', '_', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 'm', 'p', 'g', 't', 'u', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'c', 'm', 'p', 'g', 't', 'u', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  'm', 'p', 'n', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e',
-  'b', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'h', '_', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'c', 'm', 'p', 'n', 'e', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm',
-  'p', 'n', 'e', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n',
-  'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'b',
-  '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'h', '_', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'c', 'm', 'p', 'n', 'e', 'z', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'c', 'm', 'p', 'n', 'e', 'z', 'w', '_', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c',
-  't', 's', 'x', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'c', 't', 'u', 'x', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'c', 't', 'z', 'l', 's', 'b', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'e', 'x', 'p', 't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'g', 'b',
-  'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'l', 'o', 'g', 'e', 'f', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 'a', 'd', 'd', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
-  'a', 'x', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
-  'a', 'x', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 's', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
-  'a', 'x', 'u', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'm', 'a', 'x', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm',
-  'h', 'a', 'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'h', 'r',
-  'a', 'd', 'd', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'f',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'm', 'i', 'n', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'm', 'i', 'n', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'i', 'n', 'u', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'm', 'i', 'n', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'l', 'a', 'd',
-  'd', 'u', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'm', 'b',
-  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 's', 'h', 'm', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'm', 's', 'u', 'm', 's', 'h', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 's', 'u', 'm', 'u', 'b', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u',
-  'm', 'u', 'h', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 's', 'u', 'm', 'u', 'h',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 's', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'm', 'u', 'l', 'e', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u',
-  'l', 'e', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'e', 'u', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'm', 'u', 'l', 'e', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l',
-  'o', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 's', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'm', 'u', 'l', 'o', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o',
-  'u', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'm', 'u', 'l', 'o', 'u', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'n', 'm', 's', 'u', 'b', 'f', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'p', 'e', 'r', 'm', '_', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k',
-  'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'd', 's', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'p', 'k', 's', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p',
-  'k', 's', 'h', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'h', 'u',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 's', 'w', 's', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'p', 'k', 's', 'w', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k',
-  'u', 'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'h', 'u', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'p', 'k', 'u', 'w', 'u', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'p', 'r', 't', 'y', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't',
-  'y', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'p', 'r', 't', 'y', 'b', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'r', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f',
-  'i', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'n', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'r', 'f', 'i', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'f', 'i', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'r', 'l', 'd', 'm', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v',
-  'r', 'l', 'd', 'n', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'r', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'm',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'r', 'l', 'w', 'n', 'm', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 'r', 's', 'q', 'r', 't', 'e', 'f', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
-  'e', 'l', '_', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 's', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'l', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'l', 'v',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's',
-  'r', 'a', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'a', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 's', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 's', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'r', 'v', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
-  'c', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'c', 'u', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'u', 'b', 'e', 'c', 'u', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 's', 'u', 'b', 'e', 'u', 'q', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
-  'b', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'h', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 's', 'w', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 's', 'u', 'b', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b',
-  'u', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a',
-  'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'b', 'u', 'w', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v',
-  'e', 'c', '_', 'v', 's', 'u', 'm', '2', 's', 'w', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_',
-  'v', 's', 'u', 'm', '4', 's', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u',
-  'm', '4', 's', 'h', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', '4', 'u',
-  'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l',
-  't', 'i', 'v', 'e', 'c', '_', 'v', 's', 'u', 'm', 's', 'w', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e',
-  'c', '_', 'v', 'u', 'p', 'k', 'h', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u',
-  'p', 'k', 'h', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't',
-  'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'h', 's', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c',
-  '_', 'v', 'u', 'p', 'k', 'l', 'p', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p',
-  'k', 'l', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'a', 'l', 't', 'i', 'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'a', 'l', 't', 'i',
-  'v', 'e', 'c', '_', 'v', 'u', 'p', 'k', 'l', 's', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'p', 'e', 'r', 'm', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v', 'd', 'e',
-  'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i', 'v',
-  'w', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'd', 'i',
-  'v', 'w', 'e', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'g', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', '_', 't', 'e', 'x', 'a', 's',
-  'r', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e',
-  't', '_', 't', 'f', 'h', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'g', 'e', 't', '_', 't', 'f', 'i', 'a', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'f', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'a', 'd', 'd',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'c', 'f', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'f', 'i',
-  'd', 'u', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c',
-  'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 'm', 'p', 'l', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  'c', 'p', 's', 'g', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f',
-  'c', 't', 'i', 'd', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'd', 'u', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 'c', 't', 'i', 'd', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 'f', 'c', 't', 'i', 'w', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'u',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'c', 't', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'l', 'o', 'g',
-  'i', 'c', 'a', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm',
-  'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 's', 'u', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm',
-  's', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'u', 'l', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'm', 'u',
-  'l', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 'n', 'a', 'b', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'e', 'g',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm', 'a', 'd',
-  'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 'n', 'm', 's', 'u', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'n', 'm',
-  's', 'u', 'b', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'r', 'e', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'm', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'f', 'r', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 'i',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'r', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'r', 's', 'q', 'r', 't',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'f', 'r', 's', 'q', 'r', 't', 'e', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's',
-  'e', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 's', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 's', 'u', 'b', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 't', 's', 't', 'n', 'a', 'n', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'a',
-  'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 'f', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x',
-  'm', 'u', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'f', 'x', 'm', 'u', 'l', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x',
-  'x', 'c', 'p', 'n', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'c', 'p',
-  'n', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'f', 'x', 'x', 'm', 'a', 'd', 'd', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x',
-  'n', 'p', 'm', 'a', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'f', 'x', 'x', 'n', 'p', 'm', 'a',
-  'd', 'd', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'g', 'p', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 'l', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'c', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v',
-  'l', 'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'd',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'l', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'a',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'l', 'f', 'i', 'w', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 'i', 'w', 'z',
-  'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 'l', 'f', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'f', 's', 'a', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l',
-  'p', 'c', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'q', 'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'l', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 'l', 'p',
-  'c', 'r', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q',
-  'p', 'x', '_', 'q', 'v', 'l', 'p', 'c', 'r', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f',
-  'c', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 's', 't', 'f', 'c', 'd', 'a', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f',
-  'c', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p',
-  'x', '_', 'q', 'v', 's', 't', 'f', 'c', 's', 'a', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x',
-  '_', 'q', 'v', 's', 't', 'f', 'd', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 'i', 'w',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_',
-  'q', 'v', 's', 't', 'f', 'i', 'w', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q', 'v', 's', 't', 'f', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'q', 'p', 'x', '_', 'q',
-  'v', 's', 't', 'f', 's', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', 'e', 't', '_', 't', 'e', 'x', 'a', 's', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'e', 'x',
-  'a', 's', 'r', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', 'e', 't', '_', 't', 'f', 'h', 'a', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', 'e', 't', '_', 't', 'f', 'i', 'a', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b',
-  'o', 'r', 't', 'd', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 't', 'a', 'b', 'o', 'r', 't', 'd', 'c', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r', 't', 'w', 'c', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'a', 'b', 'o', 'r',
-  't', 'w', 'c', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  't', 'b', 'e', 'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 't', 'c', 'h', 'e', 'c', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 't', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 't', 'e', 'n', 'd', 'a', 'l', 'l', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'e', 'c', 'h', 'k', 'p', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't', 'r', 'e', 'c',
-  'l', 'a', 'i', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  't', 'r', 'e', 's', 'u', 'm', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 't', 's', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 't', 's', 'u', 's', 'p', 'e', 'n', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 't', 't', 'e', 's', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 's', 'm', 'a',
-  'x', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 'x', 's', 'm', 'i', 'n', 'd', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p',
-  'e', 'q', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e', 'q', 'd', 'p', '_', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'c', 'm', 'p', 'e', 'q', 's', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'e',
-  'q', 's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 'c', 'm', 'p', 'g', 'e', 'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p',
-  'g', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 'e', 's', 'p', '_', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'c', 'm', 'p', 'g', 't', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g',
-  't', 'd', 'p', '_', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'm', 'p', 'g', 't', 's', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 'c', 'm', 'p', 'g', 't', 's', 'p', '_', 'p', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'd',
-  'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 'x', 'v', 'c', 'v', 'd', 'p', 's', 'x', 'w', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
-  'c', 'v', 'd', 'p', 'u', 'x', 'w', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'h', 'p', 's',
-  'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x',
-  '_', 'x', 'v', 'c', 'v', 's', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 's', 'p',
-  'h', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 'c', 'v', 's', 'x', 'd', 's', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v',
-  's', 'x', 'w', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'c', 'v', 'u', 'x', 'd', 's', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 'c', 'v', 'u', 'x', 'w', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'd', 'i', 'v', 'd', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'd', 'i', 'v', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'i', 'e', 'x', 'p', 'd', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'i', 'e', 'x', 'p', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'a', 'x', 'd', 'p',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_',
-  'x', 'v', 'm', 'a', 'x', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'm', 'i', 'n', 'd', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x',
-  'v', 'm', 'i', 'n', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r', 'e', 'd', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'r',
-  'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 'x', 'v', 'r', 's', 'q', 'r', 't', 'e', 'd', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v',
-  'r', 's', 'q', 'r', 't', 'e', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 't', 's', 't', 'd', 'c',
-  'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's',
-  'x', '_', 'x', 'v', 't', 's', 't', 'd', 'c', 's', 'p', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 'e',
-  'x', 'p', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'v', 's', 'x', '_', 'x', 'v', 'x', 'e', 'x', 'p', 's', 'p', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'v', 'x',
-  's', 'i', 'g', 'd', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'v', 's', 'x', '_', 'x', 'v', 'x', 's', 'i', 'g', 's', 'p', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x',
-  'e', 'x', 't', 'r', 'a', 'c', 't', 'u', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'v', 's', 'x', '_', 'x', 'x', 'i', 'n', 's', 'e',
-  'r', 't', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'v',
-  's', 'x', '_', 'x', 'x', 'l', 'e', 'q', 'v', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'g', 'r', 'o', 'u', 'p',
-  '_', 'b', 'a', 'r', 'r', 'i', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'i', 'm', 'p', 'l', 'i', 'c',
-  'i', 't', 'a', 'r', 'g', '_', 'p', 't', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'a', 't', '_', 's',
-  't', 'o', 'r', 'e', '_', 't', 'y', 'p', 'e', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd',
-  '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z', 'e', '_', 'x', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0', '0', '_',
-  'r', 'e', 'a', 'd', '_', 'g', 'l', 'o', 'b', 'a', 'l', '_', 's', 'i', 'z',
-  'e', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r',
-  '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'g', 'l', 'o', 'b', 'a', 'l',
-  '_', 's', 'i', 'z', 'e', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g',
-  'r', 'o', 'u', 'p', 's', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g',
-  'r', 'o', 'u', 'p', 's', '_', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 'n', 'g',
-  'r', 'o', 'u', 'p', 's', '_', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g',
-  'i', 'd', '_', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'r', '6', '0', '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_',
-  'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'r', '6', '0',
-  '0', '_', 'r', 'e', 'a', 'd', '_', 't', 'g', 'i', 'd', '_', 'z', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'e',
-  'f', 'p', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 't',
-  'x', '_', 'n', 'e', 's', 't', 'i', 'n', 'g', '_', 'd', 'e', 'p', 't', 'h',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'l', 'c', 'b', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 't', 'x', '_', 'a', 's', 's', 'i', 's', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 's', 'f', 'p', 'c',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'a', 'c', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'c', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'a', 'c', 'c', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'a', 'c', 'c', 'g', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'c',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'a', 'c', 'c', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'c', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'a', 'v', 'g', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g',
-  'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'a', 'v', 'g', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'a', 'v', 'g', 'l',
-  'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'a', 'v', 'g', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'b', 'p', 'e', 'r', 'm',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'c', 'k', 's', 'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'e', 'r', 'i', 'm', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'i', 'm', 'g', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e',
-  'r', 'i', 'm', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r',
-  'l', 'l', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'g', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l',
-  'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r', 'l',
-  'l', 'v', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'e', 'r', 'l', 'l', 'v', 'g', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'e', 'r',
-  'l', 'l', 'v', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'f', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'f', 'a', 'e', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'a', 'e', 'z', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'f', 'e', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'f', 'e', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'e', 'z', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'f', 'e', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'f', 'e', 'n', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'f', 'e', 'n', 'e', 'z', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'f', 'e', 'n', 'e', 'z', 'f', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'f', 'e', 'n', 'e', 'z', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'g', 'f', 'm', 'a', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'a', 'g', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'g', 'f', 'm', 'a', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f',
-  'm', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'g', 'f', 'm', 'g', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'g', 'f', 'm', 'h', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'i', 's', 't', 'r', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'i', 's', 't', 'r', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'i', 's', 't', 'r', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'l', 'b', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'l', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'l', 'r', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'a', 'e', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'e',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'a', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'a', 'h', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'a', 'h', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l',
-  'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 'm', 'a', 'l', 'e', 'f', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'e',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'a', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'h', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'm', 'a', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'm', 'a', 'l', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'l', 'o', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'a', 'o', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'a', 'o', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'a', 'o',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'e', 'f', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'e',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'h', 'f', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'h',
-  'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'l', 'e', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'e', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'l', 'e', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'h',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'm', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'm', 'l', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'm', 'l', 'o', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 'o', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'm', 'o', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 'm', 'o', 'h', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'm', 's', 'l',
-  'g', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'p', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'e', 'r', 'm', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p',
-  'k', 'l', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'p', 'k', 'l', 's', 'g', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k',
-  'l', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 'p', 'k', 's', 'f', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'p', 'k', 's', 'g',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'p', 'k', 's', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'b', 'c', 'b', 'i', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 's', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'b', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's',
-  'c', 'b', 'i', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'g', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'c',
-  'b', 'i', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 's', 'c', 'b', 'i', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'l', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 's', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 's', 'l', 'd', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 's', 'r', 'a', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 's', 'r', 'a', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'r', 'l',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 's', 'r', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'l', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't',
-  'r', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r',
-  'c', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't', 'r',
-  'c', 'z', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's',
-  '3', '9', '0', '_', 'v', 's', 't', 'r', 'c', 'z', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 't',
-  'r', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3',
-  '9', '0', '_', 'v', 's', 'u', 'm', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'g', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 's', 'u', 'm', 'g', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'h', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  's', 'u', 'm', 'q', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 's', '3', '9', '0', '_', 'v', 's', 'u', 'm', 'q', 'g', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 't',
-  'm', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'u', 'p', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'h', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'u', 'p', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9',
-  '0', '_', 'v', 'u', 'p', 'l', 'h', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0',
-  '_', 'v', 'u', 'p', 'l', 'h', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'h', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_',
-  'v', 'u', 'p', 'l', 'l', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 's', '3', '9', '0', '_', 'v', 'u', 'p', 'l', 'l', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', '3', '9', '0', '_', 'v',
-  'u', 'p', 'l', 'l', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'u', 's', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', '2', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'f', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'a', 'd',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'c', 'm', 'p', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'c', 'm', 'p',
-  'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'f', 'c', 'm', 'p', 'g', 't', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'a',
-  'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'm', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'm', 'u', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', 'r', 'c', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'f', 'r', 'c', 'p', 'i', 't', '1', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'f', 'r', 'c', 'p', 'i', 't', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 'r', 's', 'q', 'i', 't',
-  '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'f', 'r', 's', 'q', 'r', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', 's', 'u', 'b',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'f', 's', 'u', 'b', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'i', '2', 'f', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'u', 'l', 'h', 'r', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f', '2', 'i', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'f',
-  'n', 'a', 'c', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'f', 'p', 'n', 'a', 'c', 'c', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'i',
-  '2', 'f', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '_', 'u', '3',
-  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', '_', 'u', '6', '4', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'a', 'd', 'd', 'c', 'a', 'r', 'r', 'y', 'x', '_', 'u', '3', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a',
-  'd', 'd', 'c', 'a', 'r', 'r', 'y', 'x', '_', 'u', '6', '4', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e',
-  's', 'd', 'e', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'a', 'e', 's', 'd', 'e', 'c', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e',
-  's', 'd', 'e', 'c', 'l', 'a', 's', 't', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's',
-  'd', 'e', 'c', 'l', 'a', 's', 't', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'd',
-  'e', 'c', 'l', 'a', 's', 't', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n',
-  'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'a', 'e', 's', 'e', 'n', 'c', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n',
-  'c', 'l', 'a', 's', 't', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c',
-  'l', 'a', 's', 't', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'e', 'n', 'c', 'l',
-  'a', 's', 't', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'a', 'e', 's', 'i', 'm', 'c', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'a', 'e', 's', 'k', 'e', 'y', 'g', 'e', 'n', 'a', 's', 's', 'i',
-  's', 't', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e',
-  'n', 'd', 'v', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 'd', 'q', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  't', 'p', 'd', '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
-  's', '2', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'h', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 'd', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'h', 's', 'u', 'b', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd', 'q',
-  'u', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 'd',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'p', 's', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k',
-  'l', 'o', 'a', 'd', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's',
-  't', 'o', 'r', 'e', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r',
-  'e', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r',
-  'e', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'p', 's',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a',
-  'x', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'i', 'n', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's',
-  'k', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 's',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'c', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  't', 'e', 's', 't', 'n', 'z', 'c', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's',
-  't', 'z', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', 'p', 's', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 'o', 'u', 'n', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n',
-  'd', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', 'p', 's', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'q', 'r', 't', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q',
-  'r', 't', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l',
-  'v', 'a', 'r', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a',
-  'r', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v',
-  'a', 'r', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v', 'a', 'r',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 't', 'e', 's', 't', 'c', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e',
-  's', 't', 'c', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'c', 'p', 's', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 't', 'e', 's', 't', 'n', 'z', 'c', 'p', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  't', 'e', 's', 't', 'n', 'z', 'c', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't',
-  'e', 's', 't', 'n', 'z', 'c', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'n',
-  'z', 'c', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p', 'd', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  't', 'e', 's', 't', 'z', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 't', 'e', 's', 't', 'z', 'p',
-  's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'z', 'e', 'r', 'o', 'a', 'l', 'l', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'z', 'e', 'r', 'o', 'u', 'p', 'p', 'e', 'r', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', 'd', '_', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'd', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'a', 't', 'h', 'e', 'r', 'd', '_', 'p', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
-  't', 'h', 'e', 'r', 'd', '_', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  'd', '_', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd',
-  '_', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', '_', 'q', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
-  'e', 'r', 'q', '_', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  'q', '_', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 'd',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', 'q', '_', 'p', 's', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'a', 't', 'h', 'e', 'r', 'q', '_', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  'q', '_', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'd', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'm', 'a', 's', 'k', 'l', 'o', 'a', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'l',
-  'o', 'a', 'd', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o',
-  'r', 'e', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'd', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
-  'a', 's', 'k', 's', 't', 'o', 'r', 'e', 'q', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'p',
-  's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's',
-  'd', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd', 'w', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'a', 'c', 'k', 'u', 's', 'w', 'b', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd',
-  'd', 's', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'b', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'd', 'd', 'u', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'b', 'l', 'e', 'n', 'd',
-  'v', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'i',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'f', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a',
-  'd', 'd', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h',
-  's', 'u', 'b', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '2', '5', '6', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'm', 's', 'k', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'd',
-  'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'u', 'l', 'h', 'w', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u',
-  'l', 'h', 'u', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'h', 'u', 'f', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b',
-  '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '2', '5', '6', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'i', 'g', 'n', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'q', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'l', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l',
-  'w', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 's', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'l', 'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '2',
-  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'l', 'l', 'v', '4', 'd', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'a', 'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'd', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w',
-  'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '4', 's', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'a', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'l', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'd', 'i', '2', '5', '6', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'q', 'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w',
-  'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '4', 's', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'l', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '2', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'l', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b',
-  's', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u',
-  'b', 'u', 's', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'b', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'w', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'r', 'o', 'a', 'd', 'c', 'a',
-  's', 't', 'm', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's',
-  'd', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 's', 'i', '2', 's', 's', '3', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 's', 'i', '2', 's', 's', '6', '4', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
-  't', 's', 'd', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's',
-  'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd', '2',
-  'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 'd', '2', 'u',
-  's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i',
-  '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i', '6', '4',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's', 'i', '3', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'c', 'v', 't', 't', 's', 's', '2', 'u', 's', 'i', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'u', 's', 'i', '2', 's', 'd', '3', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u',
-  's', 'i', '2', 's', 's', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i', '2',
-  's', 'd', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 's', 'i', '2', 's', 's', '6',
-  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'e', 'x', 'p', '2', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e',
-  'x', 'p', '2', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
-  'e', 'r', 's', 'i', 'v', '8', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  's', 'i', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 's',
-  'i', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 's', 'i', 'v',
-  '1', '6', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '8',
-  'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '1', '6', 's',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '8', 'd', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', 'd', 'i', 'v', '1', '6', 's', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'a', 't', 'h', 'e', 'r', '3', 'd', 'i', 'v', '2', 'd', 'f', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
-  't', 'h', 'e', 'r', '3', 'd', 'i', 'v', '2', 'd', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't',
-  'h', 'e', 'r', '3', 'd', 'i', 'v', '4', 'd', 'f', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h',
-  'e', 'r', '3', 'd', 'i', 'v', '4', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', '3', 'd', 'i', 'v', '4', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r',
-  '3', 'd', 'i', 'v', '4', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3',
-  'd', 'i', 'v', '8', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 'd',
-  'i', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i',
-  'v', '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v',
-  '2', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4',
-  'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4', 's', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '4', 's', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '8', 's', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'a', 't', 'h', 'e', 'r', '3', 's', 'i', 'v', '8', 's', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a',
-  't', 'h', 'e', 'r', 'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e',
-  'r', 'p', 'f', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f',
-  'q', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'a', 't', 'h', 'e', 'r', 'p', 'f', 'q', 'p', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'a', 'd', 'd', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a',
-  'd', 'd', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'a', 'd', 'd', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'm', 'p', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'm', 'p', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
-  'e', 's', 's', 'q', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'o', 'm', 'p', 'r', 'e', 's', 's', 'q', 'i', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'q', 'i', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
-  's', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p',
-  'r', 'e', 's', 's', 's', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd', 'f', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's',
-  's', 'd', 'f', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm',
-  'p', 'r', 'e', 's', 's', 'd', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'f', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 'f',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e',
-  's', 's', 's', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
-  'm', 'p', 'r', 'e', 's', 's', 'd', 'i', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd', 'i', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'd',
-  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
-  'e', 's', 's', 's', 't', 'o', 'r', 'e', 'q', 'i', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o',
-  'r', 'e', 'q', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
-  'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 'q', 'i', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
-  's', 't', 'o', 'r', 'e', 's', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 's',
-  'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
-  'e', 's', 's', 's', 't', 'o', 'r', 'e', 's', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o',
-  'r', 'e', 'd', 'f', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
-  'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 'd', 'f', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
-  's', 't', 'o', 'r', 'e', 'd', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 's',
-  'f', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
-  'e', 's', 's', 's', 't', 'o', 'r', 'e', 's', 'f', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o',
-  'r', 'e', 's', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
-  'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 'd', 'i', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
-  's', 't', 'o', 'r', 'e', 'd', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 'd',
-  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r',
-  'e', 's', 's', 's', 't', 'o', 'r', 'e', 'h', 'i', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o',
-  'r', 'e', 'h', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o',
-  'm', 'p', 'r', 'e', 's', 's', 's', 't', 'o', 'r', 'e', 'h', 'i', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p', 'r', 'e', 's', 's',
-  'h', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'p',
-  'r', 'e', 's', 's', 'h', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'o', 'm', 'p', 'r', 'e', 's', 's', 'h', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's',
-  'i', '_', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o',
-  'n', 'f', 'l', 'i', 'c', 't', 's', 'i', '_', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 's', 'i',
-  '_', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n',
-  'f', 'l', 'i', 'c', 't', 'd', 'i', '_', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'c', 'o', 'n', 'f', 'l', 'i', 'c', 't', 'd', 'i', '_',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'n', 'f',
-  'l', 'i', 'c', 't', 'd', 'i', '_', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 'd', 'q', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'q',
-  'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd',
-  '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 'd', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u', 'd', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'u',
-  'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
-  'd', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'p', 'd', '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'd', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
-  '2', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'p', 's', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'p', 's', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd', 'q', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'd',
-  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
-  '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 'p', 's', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 'p', 's', '2', 'u', 'q', 'q', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q', '2', 'p', 'd', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q', '2', 'p', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q', '2', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'q', 'q',
-  '2', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  'q', 'q', '2', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'q', 'q', '2', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 's', 'd', '2', 's', 's', '_', 'r', 'o', 'u', 'n', 'd',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's', 'd', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  'p', 'd', '2', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 't', 'p', 'd', '2', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'q', 'q', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2',
-  'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  'p', 'd', '2', 'u', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd', 'q', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'd', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2',
-  'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't',
-  't', 'p', 'd', '2', 'u', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'u', 'q', 'q', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'd', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2',
-  'q', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't',
-  'p', 's', '2', 'q', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 't', 'p', 's', '2', 'q', 'q', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd', 'q', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'd',
-  'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p',
-  's', '2', 'u', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u', 'q', 'q', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 's', '2', 'u',
-  'q', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u',
-  'd', 'q', '2', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'u', 'd', 'q', '2', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'u', 'd', 'q', '2', 'p', 's', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2',
-  'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u',
-  'q', 'q', '2', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 'u', 'q', 'q', '2', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 's', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'u', 'q', 'q', '2', 'p', 's', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a', 'd', 'b',
-  'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p', 's', 'a',
-  'd', 'b', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'b', 'p',
-  's', 'a', 'd', 'b', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd',
-  'i', 'v', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i',
-  'v', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'i', 'v',
-  's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd',
-  'i', 'v', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'q', 'i', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 's', 'i',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd',
-  's', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a',
-  'n', 'd', 's', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
-  'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'q', 'i', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'q',
-  'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n',
-  'd', 'l', 'o', 'a', 'd', 'q', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 's', 'i', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o',
-  'a', 'd', 's', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
-  'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 's', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'd',
-  'f', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n',
-  'd', 'l', 'o', 'a', 'd', 'd', 'f', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'd', 'f', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o',
-  'a', 'd', 's', 'f', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
-  'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 's', 'f', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 's',
-  'f', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n',
-  'd', 'l', 'o', 'a', 'd', 'd', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'd', 'i', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o',
-  'a', 'd', 'd', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
-  'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'h', 'i', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'l', 'o', 'a', 'd', 'h',
-  'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n',
-  'd', 'l', 'o', 'a', 'd', 'h', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'f', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'f', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'f', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 's', 'f',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd',
-  's', 'f', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a',
-  'n', 'd', 's', 'f', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x',
-  'p', 'a', 'n', 'd', 'd', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'e', 'x', 'p', 'a', 'n', 'd', 'd', 'i', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'd', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h', 'i', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h', 'i', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'x', 'p', 'a', 'n', 'd', 'h',
-  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p',
-  'i', 'm', 'm', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
-  'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm',
-  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u',
-  'p', 'i', 'm', 'm', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 'd', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 's',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 'p', 'd',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's',
-  's', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c',
-  'l', 'a', 's', 's', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'f', 'p', 'c', 'l', 'a', 's', 's', 'p', 's', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 'p', 's', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's', 's', 'p', 's',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's',
-  's', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'p', 'c', 'l', 'a', 's',
-  's', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p',
-  'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e',
-  'x', 'p', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e',
-  't', 'e', 'x', 'p', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 'p', 's', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'e', 'x', 'p', 's', 'd', '1',
-  '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g',
-  'e', 't', 'e', 'x', 'p', 's', 's', '1', '2', '8', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p',
-  'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a',
-  'n', 't', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e',
-  't', 'm', 'a', 'n', 't', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 's', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p', 's', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'g', 'e', 't', 'm', 'a',
-  'n', 't', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'g', 'e', 't', 'm', 'a', 'n', 't', 's', 's', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 'p', 's', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 'd', '_', 'r', 'o', 'u', 'n',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 's', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 'd', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 's', 's', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 'p', 's',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 's', 'd', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'u', 'l', 's',
-  's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'd', 'd', 's', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'd', 'd', 's', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'd', 'd', 'u', 's', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'd', 'd', 'u', 's', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'f', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'd', 'i',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a',
-  'r', 'd', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r',
-  'm', 'v', 'a', 'r', 'h', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'h', 'i', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 'q', 'i',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a',
-  'r', 'q', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'r',
-  'm', 'v', 'a', 'r', 'q', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'f', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'e', 'r', 'm', 'v', 'a', 'r', 's', 'i', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '1', '2', '8', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd', 'w', '2', '5',
-  '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'd',
-  'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'b', '5', '1', '2', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'd', '1', '2',
-  '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q',
-  'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'q', 'w', '1', '2', '8', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '2', '5', '6', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'q', 'w', '5', '1',
-  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w',
-  'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w',
-  'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w',
-  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'w',
-  'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'b', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'd', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'd', 'w', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'd', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'b', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'd', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'q', 'd', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'q', 'w', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 's', 'w', 'b', '1',
-  '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  's', 'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 's', 'w', 'b', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd',
-  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
-  's', 'd', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '2', '5', '6', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'b', '5', '1',
-  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
-  's', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
-  'v', 'u', 's', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 'u', 's', 'd', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '1', '2', '8', 'm', 'e', 'm',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'd', 'w', '2',
-  '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  'u', 's', 'd', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b',
-  '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o',
-  'v', 'u', 's', 'q', 'b', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'b', '5', '1', '2', 'm', 'e',
-  'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
-  'q', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v',
-  'u', 's', 'q', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'u', 's', 'q', 'd', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'd', '2', '5', '6', 'm',
-  'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q',
-  'd', '5', '1', '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'o', 'v', 'u', 's', 'q', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'q', 'w', '1', '2', '8',
-  'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's',
-  'q', 'w', '2', '5', '6', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'm', 'o', 'v', 'u', 's', 'q', 'w', '5', '1', '2', 'm', 'e', 'm', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w',
-  'b', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u',
-  's', 'w', 'b', '1', '2', '8', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '2', '5', '6', 'm', 'e', 'm', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'o', 'v', 'u', 's', 'w', 'b', '5', '1',
-  '2', 'm', 'e', 'm', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u', 'l',
-  't', 'i', 's', 'h', 'i', 'f', 't', 'q', 'b', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'u', 'l', 't', 'i', 's', 'h', 'i', 'f', 't',
-  'q', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'u',
-  'l', 't', 'i', 's', 'h', 'i', 'f', 't', 'q', 'b', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'r', 'o', 'l', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'r', 'o', 'l', 'd', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'r', 'o', 'l', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'r', 'o', 'l', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'r', 'o', 'l', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'r', 'o', 'l', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'l', 'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r',
-  'o', 'r', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o',
-  'r', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'q',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'q', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'q', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'd', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'd', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'q', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'q', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'r', 'o', 'r', 'v', 'q', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'w',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l',
-  'o', 'g', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e',
-  'r', 'n', 'l', 'o', 'g', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l',
-  'o', 'g', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n',
-  'g', 'e', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a',
-  'n', 'g', 'e', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'a', 'n', 'g', 'e', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 'a', 'n', 'g', 'e', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'a', 'n', 'g', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'a', 'n', 'g', 'e', 's', 'd', '1', '2', '8', '_', 'r',
-  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'a', 'n', 'g', 'e',
-  's', 's', '1', '2', '8', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p', 'd', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c', 'e', 'p',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd', 'u', 'c',
-  'e', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e', 'd',
-  'u', 'c', 'e', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'e', 'd', 'u', 'c', 'e', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'e',
-  'd', 'u', 'c', 'e', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd',
-  's', 'c', 'a', 'l', 'e', 'p', 'd', '_', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 'd', '_', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e',
-  'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l',
-  'e', 'p', 's', '_', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n',
-  'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 'p', 's', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'n', 'd', 's', 'c', 'a', 'l', 'e', 's', 'd', '_',
-  'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'n', 'd', 's',
-  'c', 'a', 'l', 'e', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 'p', 'd',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f',
-  'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l',
-  'e', 'f', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
-  'a', 'l', 'e', 'f', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'c', 'a', 'l', 'e', 'f', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'c', 'a', 'l', 'e', 'f', 's', 's', '_', 'r',
-  'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 's',
-  'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q',
-  'r', 't', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 't', 'o', 'r', 'e', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'u', 'b', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u',
-  'b', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b',
-  's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'u', 'b', 's', 's', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p',
-  'h', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p',
-  'h', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p',
-  's', '2', 'p', 'h', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'm', 'a', 'd', 'd', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 's', 'd', '3', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 's', 's', '3', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 's', 'u', 'b', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 'a',
-  'd', 'd', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'n', 'm', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'f', 'n', 'm', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'n', 'm', 'a', 'd', 'd', 'p', 's', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 'a', 'd', 'd', 'p',
-  's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 'a',
-  'd', 'd', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'n', 'm', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p', 'd', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's',
-  'u', 'b', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'n', 'm', 's', 'u', 'b', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b',
-  'u', 's', 'd', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'd', 'p', 'b', 'u', 's', 'd', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w',
-  's', 's', 'd', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'd', 'p', 'w', 's', 's', 'd', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'd', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a',
-  'r', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
-  'm', 'i', '2', 'v', 'a', 'r', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h', 'i', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
-  'a', 'r', 'h', 'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'h', 'i', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p',
-  'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  'i', '2', 'v', 'a', 'r', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
-  'a', 'r', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'p',
-  's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  'i', '2', 'v', 'a', 'r', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r',
-  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  'i', '2', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v', 'a', 'r', 'q', 'i', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', '2', 'v',
-  'a', 'r', 'q', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2',
-  'v', 'a', 'r', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'h', 'i', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'h',
-  'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  't', '2', 'v', 'a', 'r', 'h', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 'd', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v',
-  'a', 'r', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 'd', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p',
-  's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  't', '2', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v',
-  'a', 'r', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
-  'r', 'm', 't', '2', 'v', 'a', 'r', 'q', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'q', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v',
-  'a', 'r', 'q', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'q', 'i', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'q',
-  'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd',
-  'd', '5', '2', 'h', 'u', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u',
-  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd',
-  'd', '5', '2', 'l', 'u', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u',
-  'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l',
-  'd', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
-  'l', 'd', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'l', 'd', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  's', 'h', 'l', 'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 's', 'h', 'l', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'l', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 's', 'h', 'l', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'w', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'w', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'd', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l',
-  'd', 'v', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'l', 'd', 'v', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 's', 'h', 'l', 'd', 'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'd',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r',
-  'd', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
-  'r', 'd', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'r', 'd', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  's', 'h', 'r', 'd', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 's', 'h', 'r', 'd', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'r', 'd', 'w', '5', '1', '2', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
-  'v', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h',
-  'r', 'd', 'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  's', 'h', 'r', 'd', 'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'r', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'w', '5', '1', '2', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 's', 'h', 'u', 'f', 'b', 'i', 't', 'q', 'm',
-  'b', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'u',
-  'f', 'b', 'i', 't', 'q', 'm', 'b', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 's', 'h', 'u', 'f', 'b', 'i', 't', 'q', 'm', 'b', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'm', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 's', 'd', '3', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a',
-  'd', 'd', 's', 's', '3', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm',
-  'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd',
-  's', 'u', 'b', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b',
-  'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm',
-  'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'p', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b',
-  'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm',
-  's', 'u', 'b', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '3', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 's', 'u', 'b', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'p', 's', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 's', 'd', '3',
-  '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 's', 's',
-  '3', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'a',
-  'd', 'd', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '3', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'f', 'm', 's', 'u', 'b', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'a', 'd', 'd', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's',
-  'u', 'b', 'a', 'd', 'd', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'a', 'd', 'd', 'p', 's', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 's', 'u', 'b', 'a',
-  'd', 'd', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'f', 'n', 'm', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p',
-  'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm',
-  's', 'u', 'b', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k', '3', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'n', 'm', 's', 'u', 'b', 'p', 's', '2', '5', '6', '_', 'm', 'a',
-  's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b', 'p', 's', '5', '1',
-  '2', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's', 'u', 'b',
-  's', 'd', '3', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'n', 'm', 's',
-  'u', 'b', 's', 's', '3', '_', 'm', 'a', 's', 'k', '3', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x',
-  'u', 'p', 'i', 'm', 'm', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 'd', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm',
-  'p', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x',
-  'u', 'p', 'i', 'm', 'm', 'p', 's', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm', 'p', 's', '2', '5', '6',
-  '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x', 'u', 'p', 'i', 'm', 'm',
-  'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'i', 'x',
-  'u', 'p', 'i', 'm', 'm', 's', 'd', '_', 'm', 'a', 's', 'k', 'z', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f',
-  'i', 'x', 'u', 'p', 'i', 'm', 'm', 's', 's', '_', 'm', 'a', 's', 'k', 'z',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'd', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l',
-  'o', 'g', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't',
-  'e', 'r', 'n', 'l', 'o', 'g', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 'r', 'n', 'l', 'o', 'g', 'q',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'm', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd',
-  'd', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'm', 'a', 'd', 'd', 's', 'd', '3', '_', 'm', 'a', 's', 'k', 'z', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'f', 'm', 'a', 'd', 'd', 's', 's', '3', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b',
-  'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm',
-  'a', 'd', 'd', 's', 'u', 'b', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd',
-  's', 'u', 'b', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u',
-  's', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd',
-  'p', 'b', 'u', 's', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's', 'd', 's', '2', '5',
-  '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'b', 'u', 's',
-  'd', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd',
-  'p', 'w', 's', 's', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w', 's', 's', 'd', 's',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'd', 'p', 'w',
-  's', 's', 'd', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'd', 'p', 'w', 's', 's', 'd', 's', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't',
-  '2', 'v', 'a', 'r', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'd', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a',
-  'r', 'h', 'i', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'h', 'i', '2', '5', '6', '_', 'm',
-  'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r',
-  'h', 'i', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
-  'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 'd', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p',
-  'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
-  'm', 't', '2', 'v', 'a', 'r', 'p', 'd', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 's',
-  '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm',
-  't', '2', 'v', 'a', 'r', 'p', 's', '2', '5', '6', '_', 'm', 'a', 's', 'k',
-  'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'p', 's', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't',
-  '2', 'v', 'a', 'r', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a',
-  'r', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e',
-  'r', 'm', 't', '2', 'v', 'a', 'r', 'q', 'i', '1', '2', '8', '_', 'm', 'a',
-  's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 't', '2', 'v', 'a', 'r', 'q',
-  'i', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r',
-  'm', 't', '2', 'v', 'a', 'r', 'q', 'i', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd',
-  '5', '2', 'h', 'u', 'q', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'h', 'u', 'q', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l',
-  'u', 'q', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm',
-  'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'd', '5', '2', 'l', 'u', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd',
-  'v', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'l', 'd', 'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'l', 'd', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '1', '2', '8', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'q', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd',
-  'v', 'q', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'l', 'd', 'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'd', 'v', 'w', '5', '1', '2', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'd', '1',
-  '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
-  'v', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'r', 'd', 'v', 'd', '5', '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '1', '2', '8', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd', 'v', 'q', '5',
-  '1', '2', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'r', 'd',
-  'v', 'w', '1', '2', '8', '_', 'm', 'a', 's', 'k', 'z', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's',
-  'h', 'r', 'd', 'v', 'w', '2', '5', '6', '_', 'm', 'a', 's', 'k', 'z', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'r', 'd', 'v', 'w', '5', '1', '2', '_', 'm', 'a', 's',
-  'k', 'z', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'a', 'c', 'k', 's', 's', 'w', 'b', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c',
-  'k', 'u', 's', 'd', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's',
-  'w', 'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'd', 'q', '5', '1', '2',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '5', '1', '2', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'u', 'l', 'h', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w',
-  '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'a', 'd', 'b', 'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f',
-  'b', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '5', '1', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'l', 'l', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '5', '1',
-  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'l', 'l', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'q', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i', '5', '1',
-  '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'l', 'l', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v', '8', 'h', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'l', 'l', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'v',
-  '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', '5', '1', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'a', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'a', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a',
-  'w', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', 'i', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'q', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q',
-  'i', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'q', 'i', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'w', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v',
-  '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', 'q', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'a', 'v', 'q', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v',
-  '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '8', 'h', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'a', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'v', '3', '2',
-  'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'l', 'd', '5', '1', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'l', 'q', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'd', 'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q',
-  'i', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', 'i', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v',
-  '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '8', 'h', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'l', 'v', '1', '6', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'v', '3', '2',
-  'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '1', '2', '8', '_', 'm',
-  'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '2', '5', '6', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 'd', '5', '1', '2',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '1', '2',
-  '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's', '2',
-  '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 'p', 's',
-  '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 's',
-  'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', '1', '4', 's', 's', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 'p', 'd', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'c', 'p', '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 'c', 'p', '2', '8', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_',
-  'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'c', 'p', '2', '8', 's', 's', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1',
-  '4', 'p', 'd', '1', '2', '8', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '1', '4', 'p', 'd', '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 's', 'q', 'r', 't', '1', '4', 'p', 'd', '5', '1', '2', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 's', '1', '2', '8',
-  '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1', '4', 'p', 's',
-  '2', '5', '6', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', '1',
-  '4', 'p', 's', '5', '1', '2', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '1', '4', 's', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '1', '4', 's', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '2', '8', 'p', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '2', '8', 'p', 's', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q',
-  'r', 't', '2', '8', 's', 'd', '_', 'r', 'o', 'u', 'n', 'd', '_', 'm', 'a',
-  's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 's', 'q', 'r', 't', '2', '8', 's', 's', '_', 'r', 'o',
-  'u', 'n', 'd', '_', 'm', 'a', 's', 'k', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e',
-  'r', 's', 'i', 'v', '8', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
-  's', 'i', 'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
-  's', 'i', 'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's',
-  'i', 'v', '1', '6', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd',
-  'i', 'v', '8', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i',
-  'v', '1', '6', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i',
-  'v', '8', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v',
-  '1', '6', 's', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v',
-  '2', 'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '2',
-  'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '4', 'd',
-  'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '4', 'd', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '4', 's', 'f', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '4', 's', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'c', 'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '8', 's', 'f', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
-  'a', 't', 't', 'e', 'r', 'd', 'i', 'v', '8', 's', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
-  't', 't', 'e', 'r', 'p', 'f', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't',
-  'e', 'r', 'p', 'f', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r',
-  'p', 'f', 'q', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 'p', 'f',
-  'q', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '2',
-  'd', 'f', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '2', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '4', 'd', 'f',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '4', 'd', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '4', 's', 'f', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's',
-  'c', 'a', 't', 't', 'e', 'r', 's', 'i', 'v', '4', 's', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c',
-  'a', 't', 't', 'e', 'r', 's', 'i', 'v', '8', 's', 'f', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'c', 'a',
-  't', 't', 'e', 'r', 's', 'i', 'v', '8', 's', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'o', 'm',
-  'i', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'c', 'o', 'm', 'i', 's', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v',
-  't', 's', 'd', '2', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd',
-  '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's',
-  'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 'd', '2', 'u', 's', 'i', '6',
-  '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'c', 'v', 't', 's', 's', '2', 's', 'i', '3', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'c', 'v', 't', 's', 's', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't',
-  's', 's', '2', 'u', 's', 'i', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 's', 's',
-  '2', 'u', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', 'v',
-  'a', 'r', 'p', 'd', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l',
-  'v', 'a', 'r', 'p', 's', '5', '1', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', '_',
-  'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', '_', 'u', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b',
-  'z', 'h', 'i', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'b', 'z', 'h', 'i', '_', 'd', 'i', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'd', 'e', 'p', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'd', 'e', 'p', '_', 'd', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'e', 'x', 't', '_', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'e', 'x', 't', '_', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h', 'o', 'p', 't', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l',
-  'r', 's', 's', 'b', 's', 'y', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'w', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'l', 'z',
-  'e', 'r', 'o', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'e', 'a', 'd', 'e', 'f', 'l', 'a', 'g', 's', '_',
-  'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'r', 'e', 'a', 'd', 'e', 'f', 'l', 'a', 'g', 's', '_',
-  'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'w', 'r', 'i', 't', 'e', 'e', 'f', 'l', 'a', 'g', 's',
-  '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'w', 'r', 'i', 't', 'e', 'e', 'f', 'l', 'a', 'g',
-  's', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'f', 'm', 'a', 'd', 'd', 'p', 'd', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm',
-  'a', 'd', 'd', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 'p', 's', '2',
-  '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'd', '3', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'm', 'a', 'd', 'd', 's', 's', '3', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's',
-  'u', 'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p',
-  'd', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'm', 'a', 'd', 'd', 's', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'm', 'a',
-  'd', 'd', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'f', 'x', 'r', 's', 't', 'o', 'r', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x',
-  'r', 's', 't', 'o', 'r', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'x', 's', 'a', 'v', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'f', 'x', 's', 'a', 'v', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 'c', 's', 's', 'p',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'i', 'n', 'c', 's', 's', 'p', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'l', 'w', 'p', 'c',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'l', 'w', 'p', 'i', 'n', 's', '3', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'w', 'p', 'i',
-  'n', 's', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'l', 'w', 'p', 'v', 'a', 'l', '3', '2', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l',
-  'w', 'p', 'v', 'a', 'l', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e', 'm', 'm', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'f', 'e',
-  'm', 'm', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o',
-  'v', 'n', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's', 's', 'd', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'c', 'k', 's', 's', 'w', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'a', 'd', 'd', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'd', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd',
-  's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u',
-  's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'l', 'i',
-  'g', 'n', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'a', 'n', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'n', 'd', 'n', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'a', 'v', 'g', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'v', 'g', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm',
-  'p', 'e', 'q', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e', 'q', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
-  'm', 'p', 'e', 'q', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'c', 'm', 'p', 'g', 't', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'g', 't', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'e', 'c', '_', 'e', 'x', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'e',
-  'c', '_', 's', 'e', 't', '_', 'v', '4', 'h', 'i', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd',
-  'd', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'm', 'a', 'x', 's', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'x',
-  'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'i', 'n', 's', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'i', 'n', 'u',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'u', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'o', 'r', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'a', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'l', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'w', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 's', 'r', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'r', 'a', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'l', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'r', 'l', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'l', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'b', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u',
-  'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'u', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'u', 'b', 'u', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'u', 'n', 'p', 'c', 'k', 'h', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c',
-  'k', 'h', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'h', 'w', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'u', 'n', 'p', 'c', 'k', 'l', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c',
-  'k', 'l', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'u', 'n', 'p', 'c', 'k', 'l', 'w', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'x', 'o', 'r', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', 'x', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm',
-  'w', 'a', 'i', 't', 'x', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'c', 'l', 'm', 'u', 'l', 'q', 'd', 'q', '5', '1', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 'd', 'f', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'f', 's',
-  'b', 'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e',
-  '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'd', 'g', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'd', 'p', 'i', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'r', 'd', 'p', 'k', 'r', 'u', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 'p',
-  'm', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'r', 'd', 's', 's', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 's', 's', 'p',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'd', 't', 's', 'c', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'd', 't', 's', 'c', 'p', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'r', 's', 't', 'o', 'r', 's', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'a', 'v', 'e', 'p', 'r',
-  'e', 'v', 's', 's', 'p', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 's', 'e', 't', 's', 's', 'b', 's', 'y', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'h', 'a', '1', 'm', 's', 'g', '1', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '1', 'm', 's',
-  'g', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'h', 'a', '1', 'n', 'e', 'x', 't', 'e', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h',
-  'a', '1', 'r', 'n', 'd', 's', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'h', 'a', '2', '5', '6', 'm',
-  's', 'g', '1', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 's', 'h', 'a', '2', '5', '6', 'm', 's', 'g', '2', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  's', 'h', 'a', '2', '5', '6', 'r', 'n', 'd', 's', '2', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'l', 'w',
-  'p', 'c', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'm', 'p', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'e',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'o', 'm', 'i', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'g', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'o', 'm', 'i', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 'l', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'o', 'm', 'i', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'p',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'c', 'v', 't', 'p', 'i', '2', 'p', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p',
-  'i', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's', '2', 'p', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 's', 's', '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 's', '2', 's',
-  'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'p', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c',
-  'v', 't', 't', 'p', 's', '2', 'p', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 's',
-  '2', 's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 's', '2', 's', 'i', '6', '4',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'm', 'a', 'x', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
-  'n', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'i', 'n', 's', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's',
-  'k', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'w', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'c', 'p', 'p',
-  's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'r', 'c', 'p', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 's', 'q', 'r', 't', 'p', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'r', 's', 'q', 'r', 't', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'f', 'e', 'n', 'c', 'e',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 's', 'q', 'r', 't', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't', 's', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'u', 'c', 'o', 'm', 'i', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'g', 'e',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'u', 'c', 'o', 'm', 'i', 'g', 't', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 'l',
-  'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'u', 'c', 'o', 'm', 'i', 'l', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  'n', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'l', 'f', 'l', 'u', 's', 'h', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'm', 'p',
-  's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'e', 'q', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm',
-  'i', 's', 'd', 'g', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'g', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'o', 'm', 'i', 's', 'd', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd',
-  'l', 't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'o', 'm', 'i', 's', 'd', 'n', 'e', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 'd', 'q', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 'd', '2', 'd', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'v', 't', 'p', 'd', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 'p', 's',
-  '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'c', 'v', 't', 's', 'd', '2', 's', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 's', 'd', '2', 's', 'i', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 's', 'd', '2',
-  's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 'p', 'd', '2', 'd', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v',
-  't', 't', 'p', 's', '2', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'v', 't', 't', 's', 'd', '2',
-  's', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'c', 'v', 't', 't', 's', 'd', '2', 's', 'i', '6', '4', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'l', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 's', 'k', 'm', 'o', 'v', 'd',
-  'q', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'a', 'x', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'a', 'x', 's', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'm', 'f', 'e', 'n', 'c', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i', 'n', 'p', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'i',
-  'n', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'm', 'o', 'v', 'm', 's', 'k', 'p', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a',
-  'c', 'k', 's', 's', 'd', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 's',
-  's', 'w', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'w', 'b',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'a', 'd', 'd', 's', 'b', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'd', 'd', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's',
-  'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'd', 'd', 'u', 's', 'w', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'a', 'u', 's', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'w', 'd', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'o', 'v', 'm', 's', 'k', 'b', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'm', 'u', 'l', 'h', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h',
-  'u', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'u', 'd', 'q', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l',
-  'l', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'l', 'l', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'l', 'l', 'd', 'i',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'l', 'l', 'q', 'i', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'l', 'l', 'w', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'd', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 's', 'r', 'a', 'w', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r',
-  'a', 'd', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'a', 'w', 'i', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'r', 'l', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l',
-  'q', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'r', 'l', 'd', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'r', 'l', 'q', 'i',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'r', 'l', 'w', 'i', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  's', 'u', 'b', 's', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'u', 'b', 's', 'w',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'u', 'b', 'u', 's', 'b', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'u', 'b', 'u', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'q', 'r', 't',
-  'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 's', 'q', 'r', 't', 's', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  's', 'd', 'e', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 'e', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'u', 'c', 'o', 'm', 'i', 's', 'd', 'g', 't', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i',
-  's', 'd', 'l', 'e', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'u', 'c', 'o', 'm', 'i', 's', 'd', 'l', 't', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'u', 'c', 'o', 'm', 'i', 's', 'd', 'n', 'e', 'q', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's',
-  'u', 'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'a', 'd', 'd', 's', 'u', 'b', 'p', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h',
-  'a', 'd', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'h', 'a', 'd', 'd', 'p', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'h', 's',
-  'u', 'b', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'h', 's', 'u', 'b', 'p', 's', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'l', 'd', 'd',
-  'q', 'u', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'm', 'o', 'n', 'i', 't', 'o', 'r', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'w', 'a', 'i',
-  't', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'b', 'l', 'e', 'n', 'd', 'v', 'p', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'l', 'e', 'n',
-  'd', 'v', 'p', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'd', 'p', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'd', 'p', 'p', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'i', 'n', 's', 'e', 'r', 't', 'p', 's', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'm', 'p', 's',
-  'a', 'd', 'b', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'c', 'k', 'u', 's', 'd',
-  'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'b', 'l', 'e', 'n', 'd', 'v', 'b', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 'm', 'i', 'n', 'p', 'o', 's', 'u', 'w', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'm', 'u', 'l', 'd', 'q', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's',
-  't', 'c', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 't', 'e', 's', 't', 'n', 'z', 'c', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 't', 'e', 's', 't', 'z', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o',
-  'u', 'n', 'd', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 'p', 's', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'r',
-  'o', 'u', 'n', 'd', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'r', 'o', 'u', 'n', 'd', 's', 's', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'c', 'r', 'c', '3', '2', 'h', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 's', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'c', 'r', 'c', '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'c', 'r', 'c', '3', '2', 'd',
-  'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', '1', '2', '8', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'a', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'c', 'm', 'p', 'e', 's', 't', 'r', 'i', 'c', '1', '2', '8', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c',
-  'm', 'p', 'e', 's', 't', 'r', 'i', 'o', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm',
-  'p', 'e', 's', 't', 'r', 'i', 's', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p',
-  'e', 's', 't', 'r', 'i', 'z', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'e',
-  's', 't', 'r', 'm', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't',
-  'r', 'i', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i',
-  'a', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'c',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'o', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 's', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'i', 'z', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'c', 'm', 'p', 'i', 's', 't', 'r', 'm', '1', '2', '8', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'e',
-  'x', 't', 'r', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'e', 'x', 't', 'r', 'q', 'i', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'i', 'n', 's',
-  'e', 'r', 't', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'i', 'n', 's', 'e', 'r', 't', 'q', 'i', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p',
-  'a', 'b', 's', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's', 'd', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'a', 'b', 's',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 'a', 'd', 'd', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'd',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 's', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a',
-  'd', 'd', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 'a', 'd', 'd', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 'h', 'a', 'd', 'd', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 'h', 's', 'u', 'b', 'd', '1', '2', '8', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's',
-  'u', 'b', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 's', 'w', '1', '2', '8',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'p', 'h', 's', 'u', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'h', 's', 'u', 'b', 'w', '1',
-  '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'p', 'm', 'a', 'd', 'd', 'u', 'b', 's', 'w', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm',
-  'a', 'd', 'd', 'u', 'b', 's', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l',
-  'h', 'r', 's', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'p', 'm', 'u', 'l', 'h', 'r', 's', 'w', '1', '2',
-  '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'p', 's', 'h', 'u', 'f', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'h', 'u', 'f', 'b',
-  '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'b', '\000', '_', '_', 'b', 'u',
-  'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g',
-  'n', 'b', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's',
-  'i', 'g', 'n', 'd', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'p', 's', 'i', 'g', 'n', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'p', 's', 'i', 'g', 'n', 'w', '1', '2', '8', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 'b', 'o',
-  'r', 'r', 'o', 'w', '_', 'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 's', 'u', 'b', 'b', 'o', 'r',
-  'r', 'o', 'w', '_', 'u', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', 'i', '_',
-  'u', '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'b', 'e', 'x', 't', 'r', 'i', '_', 'u', '6', '4', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'c', 'v', 't', 'p', 'h', '2', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p',
-  'h', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2',
-  'p', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'c', 'v', 't', 'p', 's', '2', 'p', 'h', '2', '5', '6',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n',
-  'v', 'q', 'b', '_', 'v', '1', '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p',
-  '8', 'a', 'f', 'f', 'i', 'n', 'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '3',
-  '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n',
-  'e', 'i', 'n', 'v', 'q', 'b', '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g',
-  'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '1',
-  '6', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'a', 'f', 'f', 'i', 'n',
-  'e', 'q', 'b', '_', 'v', '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p',
-  '8', 'a', 'f', 'f', 'i', 'n', 'e', 'q', 'b', '_', 'v', '6', '4', 'q', 'i',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v', '1', '6',
-  'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b', '_', 'v',
-  '3', '2', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_',
-  'i', 'a', '3', '2', '_', 'v', 'g', 'f', '2', 'p', '8', 'm', 'u', 'l', 'b',
-  '_', 'v', '6', '4', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e',
-  '3', '2', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'w', 'r', 'f', 's', 'b', 'a', 's', 'e', '6', '4', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w',
-  'r', 'g', 's', 'b', 'a', 's', 'e', '3', '2', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'g', 's', 'b',
-  'a', 's', 'e', '6', '4', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'p', 'k', 'r', 'u', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r',
-  's', 's', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'w', 'r', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'w', 'r', 'u', 's', 's',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'w', 'r', 'u', 's', 's', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x', 'a', 'b', 'o', 'r', 't',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'x', 'b', 'e', 'g', 'i', 'n', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'x', 'e', 'n', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f',
-  'r', 'c', 'z', 'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'f', 'r', 'c', 'z', 'p', 's', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z',
-  'p', 's', '2', '5', '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'f', 'r', 'c', 'z', 's', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'f', 'r', 'c', 'z', 's', 's', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'b', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'c', 'o', 'm', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'c', 'o', 'm', 'u', 'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'u', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'c', 'o', 'm', 'u', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'c', 'o', 'm', 'u', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'c', 'o', 'm', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2',
-  'p', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 'd', '2', '5',
-  '6', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'e', 'r', 'm', 'i', 'l', '2', 'p', 's', '2', '5', '6', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h',
-  'a', 'd', 'd', 'b', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'b', 'q', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'h', 'a', 'd', 'd', 'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd',
-  'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'b', 'd', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'h', 'a', 'd', 'd', 'u', 'b', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u',
-  'b', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u', 'd', 'q', '\000', '_', '_',
-  'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p',
-  'h', 'a', 'd', 'd', 'u', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'u',
-  'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'h', 'a', 'd', 'd', 'w', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h',
-  'a', 'd', 'd', 'w', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b', 'b', 'w', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 'h', 's', 'u', 'b', 'd', 'q', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'h', 's', 'u', 'b',
-  'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm',
-  'a', 'c', 's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'd', 'q',
-  'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'd', 'd', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm',
-  'a', 'c', 's', 's', 'd', 'q', 'h', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's',
-  'd', 'q', 'l', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i',
-  'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 's', 'w', 'd', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 'm', 'a', 'c', 's', 's', 'w', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's',
-  'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'm', 'a', 'c', 's', 'w', 'w', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm',
-  'a', 'd', 'c', 's', 's', 'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'm', 'a', 'd', 'c', 's',
-  'w', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a',
-  '3', '2', '_', 'v', 'p', 'p', 'e', 'r', 'm', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'r', 'o', 't', 'b', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't',
-  'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'r', 'o', 't', 'd', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't',
-  'q', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'r', 'o', 't', 'q', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 'r', 'o', 't',
-  'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 'r', 'o', 't', 'w', 'i', '\000', '_', '_', 'b', 'u', 'i',
-  'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a',
-  'b', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3',
-  '2', '_', 'v', 'p', 's', 'h', 'a', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l',
-  't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'a', 'q',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2',
-  '_', 'v', 'p', 's', 'h', 'a', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't',
-  'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'b', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_',
-  'v', 'p', 's', 'h', 'l', 'd', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i',
-  'n', '_', 'i', 'a', '3', '2', '_', 'v', 'p', 's', 'h', 'l', 'q', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'i', 'a', '3', '2', '_', 'v',
-  'p', 's', 'h', 'l', 'w', '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n',
-  '_', 'i', 'a', '3', '2', '_', 'x', 't', 'e', 's', 't', '\000', '_', '_', 'b',
-  'u', 'i', 'l', 't', 'i', 'n', '_', 'b', 'i', 't', 'r', 'e', 'v', '\000', '_',
-  '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'i', 'd', '\000',
-  '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 'g', 'e', 't', 'p', 's',
-  '\000', '_', '_', 'b', 'u', 'i', 'l', 't', 'i', 'n', '_', 's', 'e', 't', 'p',
-  's', '\000',
-  };
-
-  struct BuiltinEntry {
-    Intrinsic::ID IntrinID;
-    unsigned StrTabOffset;
-    const char *getName() const {
-      return &BuiltinNames[StrTabOffset];
-    }
-    bool operator<(StringRef RHS) const {
-      return strncmp(getName(), RHS.data(), RHS.size()) < 0;
-    }
-  };
-  StringRef TargetPrefix(TargetPrefixStr);
-
-  /* Target Independent Builtins */ {
-    static const BuiltinEntry Names[] = {
-      {Intrinsic::adjust_trampoline, 0}, // __builtin_adjust_trampoline
-      {Intrinsic::debugtrap, 28}, // __builtin_debugtrap
-      {Intrinsic::flt_rounds, 70}, // __builtin_flt_rounds
-      {Intrinsic::init_trampoline, 91}, // __builtin_init_trampoline
-      {Intrinsic::objectsize, 117}, // __builtin_object_size
-      {Intrinsic::stackrestore, 139}, // __builtin_stack_restore
-      {Intrinsic::stacksave, 163}, // __builtin_stack_save
-      {Intrinsic::thread_pointer, 184}, // __builtin_thread_pointer
-      {Intrinsic::trap, 209}, // __builtin_trap
-      {Intrinsic::eh_unwind_init, 48}, // __builtin_unwind_init
-    };
-    auto I = std::lower_bound(std::begin(Names),
-                              std::end(Names),
-                              BuiltinNameStr);
-    if (I != std::end(Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "aarch64") {
-    static const BuiltinEntry aarch64Names[] = {
-      {Intrinsic::aarch64_dmb, 224}, // __builtin_arm_dmb
-      {Intrinsic::aarch64_dsb, 242}, // __builtin_arm_dsb
-      {Intrinsic::aarch64_isb, 260}, // __builtin_arm_isb
-    };
-    auto I = std::lower_bound(std::begin(aarch64Names),
-                              std::end(aarch64Names),
-                              BuiltinNameStr);
-    if (I != std::end(aarch64Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "amdgcn") {
-    static const BuiltinEntry amdgcnNames[] = {
-      {Intrinsic::amdgcn_buffer_wbinvl1, 278}, // __builtin_amdgcn_buffer_wbinvl1
-      {Intrinsic::amdgcn_buffer_wbinvl1_sc, 310}, // __builtin_amdgcn_buffer_wbinvl1_sc
-      {Intrinsic::amdgcn_buffer_wbinvl1_vol, 345}, // __builtin_amdgcn_buffer_wbinvl1_vol
-      {Intrinsic::amdgcn_cubeid, 381}, // __builtin_amdgcn_cubeid
-      {Intrinsic::amdgcn_cubema, 405}, // __builtin_amdgcn_cubema
-      {Intrinsic::amdgcn_cubesc, 429}, // __builtin_amdgcn_cubesc
-      {Intrinsic::amdgcn_cubetc, 453}, // __builtin_amdgcn_cubetc
-      {Intrinsic::amdgcn_cvt_pk_u8_f32, 477}, // __builtin_amdgcn_cvt_pk_u8_f32
-      {Intrinsic::amdgcn_dispatch_id, 508}, // __builtin_amdgcn_dispatch_id
-      {Intrinsic::amdgcn_dispatch_ptr, 537}, // __builtin_amdgcn_dispatch_ptr
-      {Intrinsic::amdgcn_ds_bpermute, 567}, // __builtin_amdgcn_ds_bpermute
-      {Intrinsic::amdgcn_ds_fadd, 596}, // __builtin_amdgcn_ds_fadd
-      {Intrinsic::amdgcn_ds_fmax, 621}, // __builtin_amdgcn_ds_fmax
-      {Intrinsic::amdgcn_ds_fmin, 646}, // __builtin_amdgcn_ds_fmin
-      {Intrinsic::amdgcn_ds_permute, 671}, // __builtin_amdgcn_ds_permute
-      {Intrinsic::amdgcn_ds_swizzle, 699}, // __builtin_amdgcn_ds_swizzle
-      {Intrinsic::amdgcn_fmed3, 727}, // __builtin_amdgcn_fmed3
-      {Intrinsic::amdgcn_fmul_legacy, 750}, // __builtin_amdgcn_fmul_legacy
-      {Intrinsic::amdgcn_groupstaticsize, 779}, // __builtin_amdgcn_groupstaticsize
-      {Intrinsic::amdgcn_implicit_buffer_ptr, 812}, // __builtin_amdgcn_implicit_buffer_ptr
-      {Intrinsic::amdgcn_implicitarg_ptr, 849}, // __builtin_amdgcn_implicitarg_ptr
-      {Intrinsic::amdgcn_interp_mov, 882}, // __builtin_amdgcn_interp_mov
-      {Intrinsic::amdgcn_interp_p1, 910}, // __builtin_amdgcn_interp_p1
-      {Intrinsic::amdgcn_interp_p2, 937}, // __builtin_amdgcn_interp_p2
-      {Intrinsic::amdgcn_kernarg_segment_ptr, 964}, // __builtin_amdgcn_kernarg_segment_ptr
-      {Intrinsic::amdgcn_lerp, 1001}, // __builtin_amdgcn_lerp
-      {Intrinsic::amdgcn_mbcnt_hi, 1023}, // __builtin_amdgcn_mbcnt_hi
-      {Intrinsic::amdgcn_mbcnt_lo, 1049}, // __builtin_amdgcn_mbcnt_lo
-      {Intrinsic::amdgcn_mqsad_pk_u16_u8, 1075}, // __builtin_amdgcn_mqsad_pk_u16_u8
-      {Intrinsic::amdgcn_mqsad_u32_u8, 1108}, // __builtin_amdgcn_mqsad_u32_u8
-      {Intrinsic::amdgcn_msad_u8, 1138}, // __builtin_amdgcn_msad_u8
-      {Intrinsic::amdgcn_qsad_pk_u16_u8, 1163}, // __builtin_amdgcn_qsad_pk_u16_u8
-      {Intrinsic::amdgcn_queue_ptr, 1195}, // __builtin_amdgcn_queue_ptr
-      {Intrinsic::amdgcn_rcp_legacy, 1222}, // __builtin_amdgcn_rcp_legacy
-      {Intrinsic::amdgcn_readfirstlane, 1250}, // __builtin_amdgcn_readfirstlane
-      {Intrinsic::amdgcn_readlane, 1281}, // __builtin_amdgcn_readlane
-      {Intrinsic::amdgcn_rsq_legacy, 1307}, // __builtin_amdgcn_rsq_legacy
-      {Intrinsic::amdgcn_s_barrier, 1335}, // __builtin_amdgcn_s_barrier
-      {Intrinsic::amdgcn_s_dcache_inv, 1362}, // __builtin_amdgcn_s_dcache_inv
-      {Intrinsic::amdgcn_s_dcache_inv_vol, 1392}, // __builtin_amdgcn_s_dcache_inv_vol
-      {Intrinsic::amdgcn_s_dcache_wb, 1426}, // __builtin_amdgcn_s_dcache_wb
-      {Intrinsic::amdgcn_s_dcache_wb_vol, 1455}, // __builtin_amdgcn_s_dcache_wb_vol
-      {Intrinsic::amdgcn_s_decperflevel, 1488}, // __builtin_amdgcn_s_decperflevel
-      {Intrinsic::amdgcn_s_getpc, 1520}, // __builtin_amdgcn_s_getpc
-      {Intrinsic::amdgcn_s_getreg, 1545}, // __builtin_amdgcn_s_getreg
-      {Intrinsic::amdgcn_s_incperflevel, 1571}, // __builtin_amdgcn_s_incperflevel
-      {Intrinsic::amdgcn_s_memrealtime, 1603}, // __builtin_amdgcn_s_memrealtime
-      {Intrinsic::amdgcn_s_memtime, 1634}, // __builtin_amdgcn_s_memtime
-      {Intrinsic::amdgcn_s_sendmsg, 1661}, // __builtin_amdgcn_s_sendmsg
-      {Intrinsic::amdgcn_s_sendmsghalt, 1688}, // __builtin_amdgcn_s_sendmsghalt
-      {Intrinsic::amdgcn_s_sleep, 1719}, // __builtin_amdgcn_s_sleep
-      {Intrinsic::amdgcn_s_waitcnt, 1744}, // __builtin_amdgcn_s_waitcnt
-      {Intrinsic::amdgcn_sad_hi_u8, 1771}, // __builtin_amdgcn_sad_hi_u8
-      {Intrinsic::amdgcn_sad_u16, 1798}, // __builtin_amdgcn_sad_u16
-      {Intrinsic::amdgcn_sad_u8, 1823}, // __builtin_amdgcn_sad_u8
-      {Intrinsic::amdgcn_wave_barrier, 1847}, // __builtin_amdgcn_wave_barrier
-      {Intrinsic::amdgcn_workgroup_id_x, 1877}, // __builtin_amdgcn_workgroup_id_x
-      {Intrinsic::amdgcn_workgroup_id_y, 1909}, // __builtin_amdgcn_workgroup_id_y
-      {Intrinsic::amdgcn_workgroup_id_z, 1941}, // __builtin_amdgcn_workgroup_id_z
-      {Intrinsic::amdgcn_writelane, 1973}, // __builtin_amdgcn_writelane
-    };
-    auto I = std::lower_bound(std::begin(amdgcnNames),
-                              std::end(amdgcnNames),
-                              BuiltinNameStr);
-    if (I != std::end(amdgcnNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "arm") {
-    static const BuiltinEntry armNames[] = {
-      {Intrinsic::arm_cdp, 2000}, // __builtin_arm_cdp
-      {Intrinsic::arm_cdp2, 2018}, // __builtin_arm_cdp2
-      {Intrinsic::arm_dmb, 224}, // __builtin_arm_dmb
-      {Intrinsic::arm_dsb, 242}, // __builtin_arm_dsb
-      {Intrinsic::arm_get_fpscr, 2037}, // __builtin_arm_get_fpscr
-      {Intrinsic::arm_isb, 260}, // __builtin_arm_isb
-      {Intrinsic::arm_ldc, 2061}, // __builtin_arm_ldc
-      {Intrinsic::arm_ldc2, 2079}, // __builtin_arm_ldc2
-      {Intrinsic::arm_ldc2l, 2098}, // __builtin_arm_ldc2l
-      {Intrinsic::arm_ldcl, 2118}, // __builtin_arm_ldcl
-      {Intrinsic::arm_mcr, 2137}, // __builtin_arm_mcr
-      {Intrinsic::arm_mcr2, 2155}, // __builtin_arm_mcr2
-      {Intrinsic::arm_mrc, 2174}, // __builtin_arm_mrc
-      {Intrinsic::arm_mrc2, 2192}, // __builtin_arm_mrc2
-      {Intrinsic::arm_qadd, 2211}, // __builtin_arm_qadd
-      {Intrinsic::arm_qadd16, 2230}, // __builtin_arm_qadd16
-      {Intrinsic::arm_qadd8, 2251}, // __builtin_arm_qadd8
-      {Intrinsic::arm_qasx, 2271}, // __builtin_arm_qasx
-      {Intrinsic::arm_qsax, 2290}, // __builtin_arm_qsax
-      {Intrinsic::arm_qsub, 2309}, // __builtin_arm_qsub
-      {Intrinsic::arm_qsub16, 2328}, // __builtin_arm_qsub16
-      {Intrinsic::arm_qsub8, 2349}, // __builtin_arm_qsub8
-      {Intrinsic::arm_sadd16, 2369}, // __builtin_arm_sadd16
-      {Intrinsic::arm_sadd8, 2390}, // __builtin_arm_sadd8
-      {Intrinsic::arm_sasx, 2410}, // __builtin_arm_sasx
-      {Intrinsic::arm_sel, 2429}, // __builtin_arm_sel
-      {Intrinsic::arm_set_fpscr, 2447}, // __builtin_arm_set_fpscr
-      {Intrinsic::arm_shadd16, 2471}, // __builtin_arm_shadd16
-      {Intrinsic::arm_shadd8, 2493}, // __builtin_arm_shadd8
-      {Intrinsic::arm_shasx, 2514}, // __builtin_arm_shasx
-      {Intrinsic::arm_shsax, 2534}, // __builtin_arm_shsax
-      {Intrinsic::arm_shsub16, 2554}, // __builtin_arm_shsub16
-      {Intrinsic::arm_shsub8, 2576}, // __builtin_arm_shsub8
-      {Intrinsic::arm_smlabb, 2597}, // __builtin_arm_smlabb
-      {Intrinsic::arm_smlabt, 2618}, // __builtin_arm_smlabt
-      {Intrinsic::arm_smlad, 2639}, // __builtin_arm_smlad
-      {Intrinsic::arm_smladx, 2659}, // __builtin_arm_smladx
-      {Intrinsic::arm_smlald, 2680}, // __builtin_arm_smlald
-      {Intrinsic::arm_smlaldx, 2701}, // __builtin_arm_smlaldx
-      {Intrinsic::arm_smlatb, 2723}, // __builtin_arm_smlatb
-      {Intrinsic::arm_smlatt, 2744}, // __builtin_arm_smlatt
-      {Intrinsic::arm_smlawb, 2765}, // __builtin_arm_smlawb
-      {Intrinsic::arm_smlawt, 2786}, // __builtin_arm_smlawt
-      {Intrinsic::arm_smlsd, 2807}, // __builtin_arm_smlsd
-      {Intrinsic::arm_smlsdx, 2827}, // __builtin_arm_smlsdx
-      {Intrinsic::arm_smlsld, 2848}, // __builtin_arm_smlsld
-      {Intrinsic::arm_smlsldx, 2869}, // __builtin_arm_smlsldx
-      {Intrinsic::arm_smuad, 2891}, // __builtin_arm_smuad
-      {Intrinsic::arm_smuadx, 2911}, // __builtin_arm_smuadx
-      {Intrinsic::arm_smulbb, 2932}, // __builtin_arm_smulbb
-      {Intrinsic::arm_smulbt, 2953}, // __builtin_arm_smulbt
-      {Intrinsic::arm_smultb, 2974}, // __builtin_arm_smultb
-      {Intrinsic::arm_smultt, 2995}, // __builtin_arm_smultt
-      {Intrinsic::arm_smulwb, 3016}, // __builtin_arm_smulwb
-      {Intrinsic::arm_smulwt, 3037}, // __builtin_arm_smulwt
-      {Intrinsic::arm_smusd, 3058}, // __builtin_arm_smusd
-      {Intrinsic::arm_smusdx, 3078}, // __builtin_arm_smusdx
-      {Intrinsic::arm_ssat, 3099}, // __builtin_arm_ssat
-      {Intrinsic::arm_ssat16, 3118}, // __builtin_arm_ssat16
-      {Intrinsic::arm_ssax, 3139}, // __builtin_arm_ssax
-      {Intrinsic::arm_ssub16, 3158}, // __builtin_arm_ssub16
-      {Intrinsic::arm_ssub8, 3179}, // __builtin_arm_ssub8
-      {Intrinsic::arm_stc, 3199}, // __builtin_arm_stc
-      {Intrinsic::arm_stc2, 3217}, // __builtin_arm_stc2
-      {Intrinsic::arm_stc2l, 3236}, // __builtin_arm_stc2l
-      {Intrinsic::arm_stcl, 3256}, // __builtin_arm_stcl
-      {Intrinsic::arm_sxtab16, 3275}, // __builtin_arm_sxtab16
-      {Intrinsic::arm_sxtb16, 3297}, // __builtin_arm_sxtb16
-      {Intrinsic::arm_uadd16, 3318}, // __builtin_arm_uadd16
-      {Intrinsic::arm_uadd8, 3339}, // __builtin_arm_uadd8
-      {Intrinsic::arm_uasx, 3359}, // __builtin_arm_uasx
-      {Intrinsic::arm_uhadd16, 3378}, // __builtin_arm_uhadd16
-      {Intrinsic::arm_uhadd8, 3400}, // __builtin_arm_uhadd8
-      {Intrinsic::arm_uhasx, 3421}, // __builtin_arm_uhasx
-      {Intrinsic::arm_uhsax, 3441}, // __builtin_arm_uhsax
-      {Intrinsic::arm_uhsub16, 3461}, // __builtin_arm_uhsub16
-      {Intrinsic::arm_uhsub8, 3483}, // __builtin_arm_uhsub8
-      {Intrinsic::arm_uqadd16, 3504}, // __builtin_arm_uqadd16
-      {Intrinsic::arm_uqadd8, 3526}, // __builtin_arm_uqadd8
-      {Intrinsic::arm_uqasx, 3547}, // __builtin_arm_uqasx
-      {Intrinsic::arm_uqsax, 3567}, // __builtin_arm_uqsax
-      {Intrinsic::arm_uqsub16, 3587}, // __builtin_arm_uqsub16
-      {Intrinsic::arm_uqsub8, 3609}, // __builtin_arm_uqsub8
-      {Intrinsic::arm_usad8, 3630}, // __builtin_arm_usad8
-      {Intrinsic::arm_usada8, 3650}, // __builtin_arm_usada8
-      {Intrinsic::arm_usat, 3671}, // __builtin_arm_usat
-      {Intrinsic::arm_usat16, 3690}, // __builtin_arm_usat16
-      {Intrinsic::arm_usax, 3711}, // __builtin_arm_usax
-      {Intrinsic::arm_usub16, 3730}, // __builtin_arm_usub16
-      {Intrinsic::arm_usub8, 3751}, // __builtin_arm_usub8
-      {Intrinsic::arm_uxtab16, 3771}, // __builtin_arm_uxtab16
-      {Intrinsic::arm_uxtb16, 3793}, // __builtin_arm_uxtb16
-    };
-    auto I = std::lower_bound(std::begin(armNames),
-                              std::end(armNames),
-                              BuiltinNameStr);
-    if (I != std::end(armNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "bpf") {
-    static const BuiltinEntry bpfNames[] = {
-      {Intrinsic::bpf_load_byte, 3814}, // __builtin_bpf_load_byte
-      {Intrinsic::bpf_load_half, 3838}, // __builtin_bpf_load_half
-      {Intrinsic::bpf_load_word, 3862}, // __builtin_bpf_load_word
-      {Intrinsic::bpf_pseudo, 3886}, // __builtin_bpf_pseudo
-    };
-    auto I = std::lower_bound(std::begin(bpfNames),
-                              std::end(bpfNames),
-                              BuiltinNameStr);
-    if (I != std::end(bpfNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "hexagon") {
-    static const BuiltinEntry hexagonNames[] = {
-      {Intrinsic::hexagon_A2_abs, 3907}, // __builtin_HEXAGON_A2_abs
-      {Intrinsic::hexagon_A2_absp, 3932}, // __builtin_HEXAGON_A2_absp
-      {Intrinsic::hexagon_A2_abssat, 3958}, // __builtin_HEXAGON_A2_abssat
-      {Intrinsic::hexagon_A2_add, 3986}, // __builtin_HEXAGON_A2_add
-      {Intrinsic::hexagon_A2_addh_h16_hh, 4011}, // __builtin_HEXAGON_A2_addh_h16_hh
-      {Intrinsic::hexagon_A2_addh_h16_hl, 4044}, // __builtin_HEXAGON_A2_addh_h16_hl
-      {Intrinsic::hexagon_A2_addh_h16_lh, 4077}, // __builtin_HEXAGON_A2_addh_h16_lh
-      {Intrinsic::hexagon_A2_addh_h16_ll, 4110}, // __builtin_HEXAGON_A2_addh_h16_ll
-      {Intrinsic::hexagon_A2_addh_h16_sat_hh, 4143}, // __builtin_HEXAGON_A2_addh_h16_sat_hh
-      {Intrinsic::hexagon_A2_addh_h16_sat_hl, 4180}, // __builtin_HEXAGON_A2_addh_h16_sat_hl
-      {Intrinsic::hexagon_A2_addh_h16_sat_lh, 4217}, // __builtin_HEXAGON_A2_addh_h16_sat_lh
-      {Intrinsic::hexagon_A2_addh_h16_sat_ll, 4254}, // __builtin_HEXAGON_A2_addh_h16_sat_ll
-      {Intrinsic::hexagon_A2_addh_l16_hl, 4291}, // __builtin_HEXAGON_A2_addh_l16_hl
-      {Intrinsic::hexagon_A2_addh_l16_ll, 4324}, // __builtin_HEXAGON_A2_addh_l16_ll
-      {Intrinsic::hexagon_A2_addh_l16_sat_hl, 4357}, // __builtin_HEXAGON_A2_addh_l16_sat_hl
-      {Intrinsic::hexagon_A2_addh_l16_sat_ll, 4394}, // __builtin_HEXAGON_A2_addh_l16_sat_ll
-      {Intrinsic::hexagon_A2_addi, 4431}, // __builtin_HEXAGON_A2_addi
-      {Intrinsic::hexagon_A2_addp, 4457}, // __builtin_HEXAGON_A2_addp
-      {Intrinsic::hexagon_A2_addpsat, 4483}, // __builtin_HEXAGON_A2_addpsat
-      {Intrinsic::hexagon_A2_addsat, 4512}, // __builtin_HEXAGON_A2_addsat
-      {Intrinsic::hexagon_A2_addsp, 4540}, // __builtin_HEXAGON_A2_addsp
-      {Intrinsic::hexagon_A2_and, 4567}, // __builtin_HEXAGON_A2_and
-      {Intrinsic::hexagon_A2_andir, 4592}, // __builtin_HEXAGON_A2_andir
-      {Intrinsic::hexagon_A2_andp, 4619}, // __builtin_HEXAGON_A2_andp
-      {Intrinsic::hexagon_A2_aslh, 4645}, // __builtin_HEXAGON_A2_aslh
-      {Intrinsic::hexagon_A2_asrh, 4671}, // __builtin_HEXAGON_A2_asrh
-      {Intrinsic::hexagon_A2_combine_hh, 4697}, // __builtin_HEXAGON_A2_combine_hh
-      {Intrinsic::hexagon_A2_combine_hl, 4729}, // __builtin_HEXAGON_A2_combine_hl
-      {Intrinsic::hexagon_A2_combine_lh, 4761}, // __builtin_HEXAGON_A2_combine_lh
-      {Intrinsic::hexagon_A2_combine_ll, 4793}, // __builtin_HEXAGON_A2_combine_ll
-      {Intrinsic::hexagon_A2_combineii, 4825}, // __builtin_HEXAGON_A2_combineii
-      {Intrinsic::hexagon_A2_combinew, 4856}, // __builtin_HEXAGON_A2_combinew
-      {Intrinsic::hexagon_A2_max, 4886}, // __builtin_HEXAGON_A2_max
-      {Intrinsic::hexagon_A2_maxp, 4911}, // __builtin_HEXAGON_A2_maxp
-      {Intrinsic::hexagon_A2_maxu, 4937}, // __builtin_HEXAGON_A2_maxu
-      {Intrinsic::hexagon_A2_maxup, 4963}, // __builtin_HEXAGON_A2_maxup
-      {Intrinsic::hexagon_A2_min, 4990}, // __builtin_HEXAGON_A2_min
-      {Intrinsic::hexagon_A2_minp, 5015}, // __builtin_HEXAGON_A2_minp
-      {Intrinsic::hexagon_A2_minu, 5041}, // __builtin_HEXAGON_A2_minu
-      {Intrinsic::hexagon_A2_minup, 5067}, // __builtin_HEXAGON_A2_minup
-      {Intrinsic::hexagon_A2_neg, 5094}, // __builtin_HEXAGON_A2_neg
-      {Intrinsic::hexagon_A2_negp, 5119}, // __builtin_HEXAGON_A2_negp
-      {Intrinsic::hexagon_A2_negsat, 5145}, // __builtin_HEXAGON_A2_negsat
-      {Intrinsic::hexagon_A2_not, 5173}, // __builtin_HEXAGON_A2_not
-      {Intrinsic::hexagon_A2_notp, 5198}, // __builtin_HEXAGON_A2_notp
-      {Intrinsic::hexagon_A2_or, 5224}, // __builtin_HEXAGON_A2_or
-      {Intrinsic::hexagon_A2_orir, 5248}, // __builtin_HEXAGON_A2_orir
-      {Intrinsic::hexagon_A2_orp, 5274}, // __builtin_HEXAGON_A2_orp
-      {Intrinsic::hexagon_A2_roundsat, 5299}, // __builtin_HEXAGON_A2_roundsat
-      {Intrinsic::hexagon_A2_sat, 5329}, // __builtin_HEXAGON_A2_sat
-      {Intrinsic::hexagon_A2_satb, 5354}, // __builtin_HEXAGON_A2_satb
-      {Intrinsic::hexagon_A2_sath, 5380}, // __builtin_HEXAGON_A2_sath
-      {Intrinsic::hexagon_A2_satub, 5406}, // __builtin_HEXAGON_A2_satub
-      {Intrinsic::hexagon_A2_satuh, 5433}, // __builtin_HEXAGON_A2_satuh
-      {Intrinsic::hexagon_A2_sub, 5460}, // __builtin_HEXAGON_A2_sub
-      {Intrinsic::hexagon_A2_subh_h16_hh, 5485}, // __builtin_HEXAGON_A2_subh_h16_hh
-      {Intrinsic::hexagon_A2_subh_h16_hl, 5518}, // __builtin_HEXAGON_A2_subh_h16_hl
-      {Intrinsic::hexagon_A2_subh_h16_lh, 5551}, // __builtin_HEXAGON_A2_subh_h16_lh
-      {Intrinsic::hexagon_A2_subh_h16_ll, 5584}, // __builtin_HEXAGON_A2_subh_h16_ll
-      {Intrinsic::hexagon_A2_subh_h16_sat_hh, 5617}, // __builtin_HEXAGON_A2_subh_h16_sat_hh
-      {Intrinsic::hexagon_A2_subh_h16_sat_hl, 5654}, // __builtin_HEXAGON_A2_subh_h16_sat_hl
-      {Intrinsic::hexagon_A2_subh_h16_sat_lh, 5691}, // __builtin_HEXAGON_A2_subh_h16_sat_lh
-      {Intrinsic::hexagon_A2_subh_h16_sat_ll, 5728}, // __builtin_HEXAGON_A2_subh_h16_sat_ll
-      {Intrinsic::hexagon_A2_subh_l16_hl, 5765}, // __builtin_HEXAGON_A2_subh_l16_hl
-      {Intrinsic::hexagon_A2_subh_l16_ll, 5798}, // __builtin_HEXAGON_A2_subh_l16_ll
-      {Intrinsic::hexagon_A2_subh_l16_sat_hl, 5831}, // __builtin_HEXAGON_A2_subh_l16_sat_hl
-      {Intrinsic::hexagon_A2_subh_l16_sat_ll, 5868}, // __builtin_HEXAGON_A2_subh_l16_sat_ll
-      {Intrinsic::hexagon_A2_subp, 5905}, // __builtin_HEXAGON_A2_subp
-      {Intrinsic::hexagon_A2_subri, 5931}, // __builtin_HEXAGON_A2_subri
-      {Intrinsic::hexagon_A2_subsat, 5958}, // __builtin_HEXAGON_A2_subsat
-      {Intrinsic::hexagon_A2_svaddh, 5986}, // __builtin_HEXAGON_A2_svaddh
-      {Intrinsic::hexagon_A2_svaddhs, 6014}, // __builtin_HEXAGON_A2_svaddhs
-      {Intrinsic::hexagon_A2_svadduhs, 6043}, // __builtin_HEXAGON_A2_svadduhs
-      {Intrinsic::hexagon_A2_svavgh, 6073}, // __builtin_HEXAGON_A2_svavgh
-      {Intrinsic::hexagon_A2_svavghs, 6101}, // __builtin_HEXAGON_A2_svavghs
-      {Intrinsic::hexagon_A2_svnavgh, 6130}, // __builtin_HEXAGON_A2_svnavgh
-      {Intrinsic::hexagon_A2_svsubh, 6159}, // __builtin_HEXAGON_A2_svsubh
-      {Intrinsic::hexagon_A2_svsubhs, 6187}, // __builtin_HEXAGON_A2_svsubhs
-      {Intrinsic::hexagon_A2_svsubuhs, 6216}, // __builtin_HEXAGON_A2_svsubuhs
-      {Intrinsic::hexagon_A2_swiz, 6246}, // __builtin_HEXAGON_A2_swiz
-      {Intrinsic::hexagon_A2_sxtb, 6272}, // __builtin_HEXAGON_A2_sxtb
-      {Intrinsic::hexagon_A2_sxth, 6298}, // __builtin_HEXAGON_A2_sxth
-      {Intrinsic::hexagon_A2_sxtw, 6324}, // __builtin_HEXAGON_A2_sxtw
-      {Intrinsic::hexagon_A2_tfr, 6350}, // __builtin_HEXAGON_A2_tfr
-      {Intrinsic::hexagon_A2_tfrih, 6375}, // __builtin_HEXAGON_A2_tfrih
-      {Intrinsic::hexagon_A2_tfril, 6402}, // __builtin_HEXAGON_A2_tfril
-      {Intrinsic::hexagon_A2_tfrp, 6429}, // __builtin_HEXAGON_A2_tfrp
-      {Intrinsic::hexagon_A2_tfrpi, 6455}, // __builtin_HEXAGON_A2_tfrpi
-      {Intrinsic::hexagon_A2_tfrsi, 6482}, // __builtin_HEXAGON_A2_tfrsi
-      {Intrinsic::hexagon_A2_vabsh, 6509}, // __builtin_HEXAGON_A2_vabsh
-      {Intrinsic::hexagon_A2_vabshsat, 6536}, // __builtin_HEXAGON_A2_vabshsat
-      {Intrinsic::hexagon_A2_vabsw, 6566}, // __builtin_HEXAGON_A2_vabsw
-      {Intrinsic::hexagon_A2_vabswsat, 6593}, // __builtin_HEXAGON_A2_vabswsat
-      {Intrinsic::hexagon_A2_vaddb_map, 6623}, // __builtin_HEXAGON_A2_vaddb_map
-      {Intrinsic::hexagon_A2_vaddh, 6654}, // __builtin_HEXAGON_A2_vaddh
-      {Intrinsic::hexagon_A2_vaddhs, 6681}, // __builtin_HEXAGON_A2_vaddhs
-      {Intrinsic::hexagon_A2_vaddub, 6709}, // __builtin_HEXAGON_A2_vaddub
-      {Intrinsic::hexagon_A2_vaddubs, 6737}, // __builtin_HEXAGON_A2_vaddubs
-      {Intrinsic::hexagon_A2_vadduhs, 6766}, // __builtin_HEXAGON_A2_vadduhs
-      {Intrinsic::hexagon_A2_vaddw, 6795}, // __builtin_HEXAGON_A2_vaddw
-      {Intrinsic::hexagon_A2_vaddws, 6822}, // __builtin_HEXAGON_A2_vaddws
-      {Intrinsic::hexagon_A2_vavgh, 6850}, // __builtin_HEXAGON_A2_vavgh
-      {Intrinsic::hexagon_A2_vavghcr, 6877}, // __builtin_HEXAGON_A2_vavghcr
-      {Intrinsic::hexagon_A2_vavghr, 6906}, // __builtin_HEXAGON_A2_vavghr
-      {Intrinsic::hexagon_A2_vavgub, 6934}, // __builtin_HEXAGON_A2_vavgub
-      {Intrinsic::hexagon_A2_vavgubr, 6962}, // __builtin_HEXAGON_A2_vavgubr
-      {Intrinsic::hexagon_A2_vavguh, 6991}, // __builtin_HEXAGON_A2_vavguh
-      {Intrinsic::hexagon_A2_vavguhr, 7019}, // __builtin_HEXAGON_A2_vavguhr
-      {Intrinsic::hexagon_A2_vavguw, 7048}, // __builtin_HEXAGON_A2_vavguw
-      {Intrinsic::hexagon_A2_vavguwr, 7076}, // __builtin_HEXAGON_A2_vavguwr
-      {Intrinsic::hexagon_A2_vavgw, 7105}, // __builtin_HEXAGON_A2_vavgw
-      {Intrinsic::hexagon_A2_vavgwcr, 7132}, // __builtin_HEXAGON_A2_vavgwcr
-      {Intrinsic::hexagon_A2_vavgwr, 7161}, // __builtin_HEXAGON_A2_vavgwr
-      {Intrinsic::hexagon_A2_vcmpbeq, 7189}, // __builtin_HEXAGON_A2_vcmpbeq
-      {Intrinsic::hexagon_A2_vcmpbgtu, 7218}, // __builtin_HEXAGON_A2_vcmpbgtu
-      {Intrinsic::hexagon_A2_vcmpheq, 7248}, // __builtin_HEXAGON_A2_vcmpheq
-      {Intrinsic::hexagon_A2_vcmphgt, 7277}, // __builtin_HEXAGON_A2_vcmphgt
-      {Intrinsic::hexagon_A2_vcmphgtu, 7306}, // __builtin_HEXAGON_A2_vcmphgtu
-      {Intrinsic::hexagon_A2_vcmpweq, 7336}, // __builtin_HEXAGON_A2_vcmpweq
-      {Intrinsic::hexagon_A2_vcmpwgt, 7365}, // __builtin_HEXAGON_A2_vcmpwgt
-      {Intrinsic::hexagon_A2_vcmpwgtu, 7394}, // __builtin_HEXAGON_A2_vcmpwgtu
-      {Intrinsic::hexagon_A2_vconj, 7424}, // __builtin_HEXAGON_A2_vconj
-      {Intrinsic::hexagon_A2_vmaxb, 7451}, // __builtin_HEXAGON_A2_vmaxb
-      {Intrinsic::hexagon_A2_vmaxh, 7478}, // __builtin_HEXAGON_A2_vmaxh
-      {Intrinsic::hexagon_A2_vmaxub, 7505}, // __builtin_HEXAGON_A2_vmaxub
-      {Intrinsic::hexagon_A2_vmaxuh, 7533}, // __builtin_HEXAGON_A2_vmaxuh
-      {Intrinsic::hexagon_A2_vmaxuw, 7561}, // __builtin_HEXAGON_A2_vmaxuw
-      {Intrinsic::hexagon_A2_vmaxw, 7589}, // __builtin_HEXAGON_A2_vmaxw
-      {Intrinsic::hexagon_A2_vminb, 7616}, // __builtin_HEXAGON_A2_vminb
-      {Intrinsic::hexagon_A2_vminh, 7643}, // __builtin_HEXAGON_A2_vminh
-      {Intrinsic::hexagon_A2_vminub, 7670}, // __builtin_HEXAGON_A2_vminub
-      {Intrinsic::hexagon_A2_vminuh, 7698}, // __builtin_HEXAGON_A2_vminuh
-      {Intrinsic::hexagon_A2_vminuw, 7726}, // __builtin_HEXAGON_A2_vminuw
-      {Intrinsic::hexagon_A2_vminw, 7754}, // __builtin_HEXAGON_A2_vminw
-      {Intrinsic::hexagon_A2_vnavgh, 7781}, // __builtin_HEXAGON_A2_vnavgh
-      {Intrinsic::hexagon_A2_vnavghcr, 7809}, // __builtin_HEXAGON_A2_vnavghcr
-      {Intrinsic::hexagon_A2_vnavghr, 7839}, // __builtin_HEXAGON_A2_vnavghr
-      {Intrinsic::hexagon_A2_vnavgw, 7868}, // __builtin_HEXAGON_A2_vnavgw
-      {Intrinsic::hexagon_A2_vnavgwcr, 7896}, // __builtin_HEXAGON_A2_vnavgwcr
-      {Intrinsic::hexagon_A2_vnavgwr, 7926}, // __builtin_HEXAGON_A2_vnavgwr
-      {Intrinsic::hexagon_A2_vraddub, 7955}, // __builtin_HEXAGON_A2_vraddub
-      {Intrinsic::hexagon_A2_vraddub_acc, 7984}, // __builtin_HEXAGON_A2_vraddub_acc
-      {Intrinsic::hexagon_A2_vrsadub, 8017}, // __builtin_HEXAGON_A2_vrsadub
-      {Intrinsic::hexagon_A2_vrsadub_acc, 8046}, // __builtin_HEXAGON_A2_vrsadub_acc
-      {Intrinsic::hexagon_A2_vsubb_map, 8079}, // __builtin_HEXAGON_A2_vsubb_map
-      {Intrinsic::hexagon_A2_vsubh, 8110}, // __builtin_HEXAGON_A2_vsubh
-      {Intrinsic::hexagon_A2_vsubhs, 8137}, // __builtin_HEXAGON_A2_vsubhs
-      {Intrinsic::hexagon_A2_vsubub, 8165}, // __builtin_HEXAGON_A2_vsubub
-      {Intrinsic::hexagon_A2_vsububs, 8193}, // __builtin_HEXAGON_A2_vsububs
-      {Intrinsic::hexagon_A2_vsubuhs, 8222}, // __builtin_HEXAGON_A2_vsubuhs
-      {Intrinsic::hexagon_A2_vsubw, 8251}, // __builtin_HEXAGON_A2_vsubw
-      {Intrinsic::hexagon_A2_vsubws, 8278}, // __builtin_HEXAGON_A2_vsubws
-      {Intrinsic::hexagon_A2_xor, 8306}, // __builtin_HEXAGON_A2_xor
-      {Intrinsic::hexagon_A2_xorp, 8331}, // __builtin_HEXAGON_A2_xorp
-      {Intrinsic::hexagon_A2_zxtb, 8357}, // __builtin_HEXAGON_A2_zxtb
-      {Intrinsic::hexagon_A2_zxth, 8383}, // __builtin_HEXAGON_A2_zxth
-      {Intrinsic::hexagon_A4_andn, 8409}, // __builtin_HEXAGON_A4_andn
-      {Intrinsic::hexagon_A4_andnp, 8435}, // __builtin_HEXAGON_A4_andnp
-      {Intrinsic::hexagon_A4_bitsplit, 8462}, // __builtin_HEXAGON_A4_bitsplit
-      {Intrinsic::hexagon_A4_bitspliti, 8492}, // __builtin_HEXAGON_A4_bitspliti
-      {Intrinsic::hexagon_A4_boundscheck, 8523}, // __builtin_HEXAGON_A4_boundscheck
-      {Intrinsic::hexagon_A4_cmpbeq, 8556}, // __builtin_HEXAGON_A4_cmpbeq
-      {Intrinsic::hexagon_A4_cmpbeqi, 8584}, // __builtin_HEXAGON_A4_cmpbeqi
-      {Intrinsic::hexagon_A4_cmpbgt, 8613}, // __builtin_HEXAGON_A4_cmpbgt
-      {Intrinsic::hexagon_A4_cmpbgti, 8641}, // __builtin_HEXAGON_A4_cmpbgti
-      {Intrinsic::hexagon_A4_cmpbgtu, 8670}, // __builtin_HEXAGON_A4_cmpbgtu
-      {Intrinsic::hexagon_A4_cmpbgtui, 8699}, // __builtin_HEXAGON_A4_cmpbgtui
-      {Intrinsic::hexagon_A4_cmpheq, 8729}, // __builtin_HEXAGON_A4_cmpheq
-      {Intrinsic::hexagon_A4_cmpheqi, 8757}, // __builtin_HEXAGON_A4_cmpheqi
-      {Intrinsic::hexagon_A4_cmphgt, 8786}, // __builtin_HEXAGON_A4_cmphgt
-      {Intrinsic::hexagon_A4_cmphgti, 8814}, // __builtin_HEXAGON_A4_cmphgti
-      {Intrinsic::hexagon_A4_cmphgtu, 8843}, // __builtin_HEXAGON_A4_cmphgtu
-      {Intrinsic::hexagon_A4_cmphgtui, 8872}, // __builtin_HEXAGON_A4_cmphgtui
-      {Intrinsic::hexagon_A4_combineir, 8902}, // __builtin_HEXAGON_A4_combineir
-      {Intrinsic::hexagon_A4_combineri, 8933}, // __builtin_HEXAGON_A4_combineri
-      {Intrinsic::hexagon_A4_cround_ri, 8964}, // __builtin_HEXAGON_A4_cround_ri
-      {Intrinsic::hexagon_A4_cround_rr, 8995}, // __builtin_HEXAGON_A4_cround_rr
-      {Intrinsic::hexagon_A4_modwrapu, 9026}, // __builtin_HEXAGON_A4_modwrapu
-      {Intrinsic::hexagon_A4_orn, 9056}, // __builtin_HEXAGON_A4_orn
-      {Intrinsic::hexagon_A4_ornp, 9081}, // __builtin_HEXAGON_A4_ornp
-      {Intrinsic::hexagon_A4_rcmpeq, 9107}, // __builtin_HEXAGON_A4_rcmpeq
-      {Intrinsic::hexagon_A4_rcmpeqi, 9135}, // __builtin_HEXAGON_A4_rcmpeqi
-      {Intrinsic::hexagon_A4_rcmpneq, 9164}, // __builtin_HEXAGON_A4_rcmpneq
-      {Intrinsic::hexagon_A4_rcmpneqi, 9193}, // __builtin_HEXAGON_A4_rcmpneqi
-      {Intrinsic::hexagon_A4_round_ri, 9223}, // __builtin_HEXAGON_A4_round_ri
-      {Intrinsic::hexagon_A4_round_ri_sat, 9253}, // __builtin_HEXAGON_A4_round_ri_sat
-      {Intrinsic::hexagon_A4_round_rr, 9287}, // __builtin_HEXAGON_A4_round_rr
-      {Intrinsic::hexagon_A4_round_rr_sat, 9317}, // __builtin_HEXAGON_A4_round_rr_sat
-      {Intrinsic::hexagon_A4_tlbmatch, 9351}, // __builtin_HEXAGON_A4_tlbmatch
-      {Intrinsic::hexagon_A4_vcmpbeq_any, 9381}, // __builtin_HEXAGON_A4_vcmpbeq_any
-      {Intrinsic::hexagon_A4_vcmpbeqi, 9414}, // __builtin_HEXAGON_A4_vcmpbeqi
-      {Intrinsic::hexagon_A4_vcmpbgt, 9444}, // __builtin_HEXAGON_A4_vcmpbgt
-      {Intrinsic::hexagon_A4_vcmpbgti, 9473}, // __builtin_HEXAGON_A4_vcmpbgti
-      {Intrinsic::hexagon_A4_vcmpbgtui, 9503}, // __builtin_HEXAGON_A4_vcmpbgtui
-      {Intrinsic::hexagon_A4_vcmpheqi, 9534}, // __builtin_HEXAGON_A4_vcmpheqi
-      {Intrinsic::hexagon_A4_vcmphgti, 9564}, // __builtin_HEXAGON_A4_vcmphgti
-      {Intrinsic::hexagon_A4_vcmphgtui, 9594}, // __builtin_HEXAGON_A4_vcmphgtui
-      {Intrinsic::hexagon_A4_vcmpweqi, 9625}, // __builtin_HEXAGON_A4_vcmpweqi
-      {Intrinsic::hexagon_A4_vcmpwgti, 9655}, // __builtin_HEXAGON_A4_vcmpwgti
-      {Intrinsic::hexagon_A4_vcmpwgtui, 9685}, // __builtin_HEXAGON_A4_vcmpwgtui
-      {Intrinsic::hexagon_A4_vrmaxh, 9716}, // __builtin_HEXAGON_A4_vrmaxh
-      {Intrinsic::hexagon_A4_vrmaxuh, 9744}, // __builtin_HEXAGON_A4_vrmaxuh
-      {Intrinsic::hexagon_A4_vrmaxuw, 9773}, // __builtin_HEXAGON_A4_vrmaxuw
-      {Intrinsic::hexagon_A4_vrmaxw, 9802}, // __builtin_HEXAGON_A4_vrmaxw
-      {Intrinsic::hexagon_A4_vrminh, 9830}, // __builtin_HEXAGON_A4_vrminh
-      {Intrinsic::hexagon_A4_vrminuh, 9858}, // __builtin_HEXAGON_A4_vrminuh
-      {Intrinsic::hexagon_A4_vrminuw, 9887}, // __builtin_HEXAGON_A4_vrminuw
-      {Intrinsic::hexagon_A4_vrminw, 9916}, // __builtin_HEXAGON_A4_vrminw
-      {Intrinsic::hexagon_A5_vaddhubs, 9944}, // __builtin_HEXAGON_A5_vaddhubs
-      {Intrinsic::hexagon_A6_vcmpbeq_notany, 9974}, // __builtin_HEXAGON_A6_vcmpbeq_notany
-      {Intrinsic::hexagon_A6_vcmpbeq_notany_128B, 10010}, // __builtin_HEXAGON_A6_vcmpbeq_notany_128B
-      {Intrinsic::hexagon_C2_all8, 10051}, // __builtin_HEXAGON_C2_all8
-      {Intrinsic::hexagon_C2_and, 10077}, // __builtin_HEXAGON_C2_and
-      {Intrinsic::hexagon_C2_andn, 10102}, // __builtin_HEXAGON_C2_andn
-      {Intrinsic::hexagon_C2_any8, 10128}, // __builtin_HEXAGON_C2_any8
-      {Intrinsic::hexagon_C2_bitsclr, 10154}, // __builtin_HEXAGON_C2_bitsclr
-      {Intrinsic::hexagon_C2_bitsclri, 10183}, // __builtin_HEXAGON_C2_bitsclri
-      {Intrinsic::hexagon_C2_bitsset, 10213}, // __builtin_HEXAGON_C2_bitsset
-      {Intrinsic::hexagon_C2_cmpeq, 10242}, // __builtin_HEXAGON_C2_cmpeq
-      {Intrinsic::hexagon_C2_cmpeqi, 10269}, // __builtin_HEXAGON_C2_cmpeqi
-      {Intrinsic::hexagon_C2_cmpeqp, 10297}, // __builtin_HEXAGON_C2_cmpeqp
-      {Intrinsic::hexagon_C2_cmpgei, 10325}, // __builtin_HEXAGON_C2_cmpgei
-      {Intrinsic::hexagon_C2_cmpgeui, 10353}, // __builtin_HEXAGON_C2_cmpgeui
-      {Intrinsic::hexagon_C2_cmpgt, 10382}, // __builtin_HEXAGON_C2_cmpgt
-      {Intrinsic::hexagon_C2_cmpgti, 10409}, // __builtin_HEXAGON_C2_cmpgti
-      {Intrinsic::hexagon_C2_cmpgtp, 10437}, // __builtin_HEXAGON_C2_cmpgtp
-      {Intrinsic::hexagon_C2_cmpgtu, 10465}, // __builtin_HEXAGON_C2_cmpgtu
-      {Intrinsic::hexagon_C2_cmpgtui, 10493}, // __builtin_HEXAGON_C2_cmpgtui
-      {Intrinsic::hexagon_C2_cmpgtup, 10522}, // __builtin_HEXAGON_C2_cmpgtup
-      {Intrinsic::hexagon_C2_cmplt, 10551}, // __builtin_HEXAGON_C2_cmplt
-      {Intrinsic::hexagon_C2_cmpltu, 10578}, // __builtin_HEXAGON_C2_cmpltu
-      {Intrinsic::hexagon_C2_mask, 10606}, // __builtin_HEXAGON_C2_mask
-      {Intrinsic::hexagon_C2_mux, 10632}, // __builtin_HEXAGON_C2_mux
-      {Intrinsic::hexagon_C2_muxii, 10657}, // __builtin_HEXAGON_C2_muxii
-      {Intrinsic::hexagon_C2_muxir, 10684}, // __builtin_HEXAGON_C2_muxir
-      {Intrinsic::hexagon_C2_muxri, 10711}, // __builtin_HEXAGON_C2_muxri
-      {Intrinsic::hexagon_C2_not, 10738}, // __builtin_HEXAGON_C2_not
-      {Intrinsic::hexagon_C2_or, 10763}, // __builtin_HEXAGON_C2_or
-      {Intrinsic::hexagon_C2_orn, 10787}, // __builtin_HEXAGON_C2_orn
-      {Intrinsic::hexagon_C2_pxfer_map, 10812}, // __builtin_HEXAGON_C2_pxfer_map
-      {Intrinsic::hexagon_C2_tfrpr, 10843}, // __builtin_HEXAGON_C2_tfrpr
-      {Intrinsic::hexagon_C2_tfrrp, 10870}, // __builtin_HEXAGON_C2_tfrrp
-      {Intrinsic::hexagon_C2_vitpack, 10897}, // __builtin_HEXAGON_C2_vitpack
-      {Intrinsic::hexagon_C2_vmux, 10926}, // __builtin_HEXAGON_C2_vmux
-      {Intrinsic::hexagon_C2_xor, 10952}, // __builtin_HEXAGON_C2_xor
-      {Intrinsic::hexagon_C4_and_and, 10977}, // __builtin_HEXAGON_C4_and_and
-      {Intrinsic::hexagon_C4_and_andn, 11006}, // __builtin_HEXAGON_C4_and_andn
-      {Intrinsic::hexagon_C4_and_or, 11036}, // __builtin_HEXAGON_C4_and_or
-      {Intrinsic::hexagon_C4_and_orn, 11064}, // __builtin_HEXAGON_C4_and_orn
-      {Intrinsic::hexagon_C4_cmplte, 11093}, // __builtin_HEXAGON_C4_cmplte
-      {Intrinsic::hexagon_C4_cmpltei, 11121}, // __builtin_HEXAGON_C4_cmpltei
-      {Intrinsic::hexagon_C4_cmplteu, 11150}, // __builtin_HEXAGON_C4_cmplteu
-      {Intrinsic::hexagon_C4_cmplteui, 11179}, // __builtin_HEXAGON_C4_cmplteui
-      {Intrinsic::hexagon_C4_cmpneq, 11209}, // __builtin_HEXAGON_C4_cmpneq
-      {Intrinsic::hexagon_C4_cmpneqi, 11237}, // __builtin_HEXAGON_C4_cmpneqi
-      {Intrinsic::hexagon_C4_fastcorner9, 11266}, // __builtin_HEXAGON_C4_fastcorner9
-      {Intrinsic::hexagon_C4_fastcorner9_not, 11299}, // __builtin_HEXAGON_C4_fastcorner9_not
-      {Intrinsic::hexagon_C4_nbitsclr, 11336}, // __builtin_HEXAGON_C4_nbitsclr
-      {Intrinsic::hexagon_C4_nbitsclri, 11366}, // __builtin_HEXAGON_C4_nbitsclri
-      {Intrinsic::hexagon_C4_nbitsset, 11397}, // __builtin_HEXAGON_C4_nbitsset
-      {Intrinsic::hexagon_C4_or_and, 11427}, // __builtin_HEXAGON_C4_or_and
-      {Intrinsic::hexagon_C4_or_andn, 11455}, // __builtin_HEXAGON_C4_or_andn
-      {Intrinsic::hexagon_C4_or_or, 11484}, // __builtin_HEXAGON_C4_or_or
-      {Intrinsic::hexagon_C4_or_orn, 11511}, // __builtin_HEXAGON_C4_or_orn
-      {Intrinsic::hexagon_F2_conv_d2df, 11539}, // __builtin_HEXAGON_F2_conv_d2df
-      {Intrinsic::hexagon_F2_conv_d2sf, 11570}, // __builtin_HEXAGON_F2_conv_d2sf
-      {Intrinsic::hexagon_F2_conv_df2d, 11601}, // __builtin_HEXAGON_F2_conv_df2d
-      {Intrinsic::hexagon_F2_conv_df2d_chop, 11632}, // __builtin_HEXAGON_F2_conv_df2d_chop
-      {Intrinsic::hexagon_F2_conv_df2sf, 11668}, // __builtin_HEXAGON_F2_conv_df2sf
-      {Intrinsic::hexagon_F2_conv_df2ud, 11700}, // __builtin_HEXAGON_F2_conv_df2ud
-      {Intrinsic::hexagon_F2_conv_df2ud_chop, 11732}, // __builtin_HEXAGON_F2_conv_df2ud_chop
-      {Intrinsic::hexagon_F2_conv_df2uw, 11769}, // __builtin_HEXAGON_F2_conv_df2uw
-      {Intrinsic::hexagon_F2_conv_df2uw_chop, 11801}, // __builtin_HEXAGON_F2_conv_df2uw_chop
-      {Intrinsic::hexagon_F2_conv_df2w, 11838}, // __builtin_HEXAGON_F2_conv_df2w
-      {Intrinsic::hexagon_F2_conv_df2w_chop, 11869}, // __builtin_HEXAGON_F2_conv_df2w_chop
-      {Intrinsic::hexagon_F2_conv_sf2d, 11905}, // __builtin_HEXAGON_F2_conv_sf2d
-      {Intrinsic::hexagon_F2_conv_sf2d_chop, 11936}, // __builtin_HEXAGON_F2_conv_sf2d_chop
-      {Intrinsic::hexagon_F2_conv_sf2df, 11972}, // __builtin_HEXAGON_F2_conv_sf2df
-      {Intrinsic::hexagon_F2_conv_sf2ud, 12004}, // __builtin_HEXAGON_F2_conv_sf2ud
-      {Intrinsic::hexagon_F2_conv_sf2ud_chop, 12036}, // __builtin_HEXAGON_F2_conv_sf2ud_chop
-      {Intrinsic::hexagon_F2_conv_sf2uw, 12073}, // __builtin_HEXAGON_F2_conv_sf2uw
-      {Intrinsic::hexagon_F2_conv_sf2uw_chop, 12105}, // __builtin_HEXAGON_F2_conv_sf2uw_chop
-      {Intrinsic::hexagon_F2_conv_sf2w, 12142}, // __builtin_HEXAGON_F2_conv_sf2w
-      {Intrinsic::hexagon_F2_conv_sf2w_chop, 12173}, // __builtin_HEXAGON_F2_conv_sf2w_chop
-      {Intrinsic::hexagon_F2_conv_ud2df, 12209}, // __builtin_HEXAGON_F2_conv_ud2df
-      {Intrinsic::hexagon_F2_conv_ud2sf, 12241}, // __builtin_HEXAGON_F2_conv_ud2sf
-      {Intrinsic::hexagon_F2_conv_uw2df, 12273}, // __builtin_HEXAGON_F2_conv_uw2df
-      {Intrinsic::hexagon_F2_conv_uw2sf, 12305}, // __builtin_HEXAGON_F2_conv_uw2sf
-      {Intrinsic::hexagon_F2_conv_w2df, 12337}, // __builtin_HEXAGON_F2_conv_w2df
-      {Intrinsic::hexagon_F2_conv_w2sf, 12368}, // __builtin_HEXAGON_F2_conv_w2sf
-      {Intrinsic::hexagon_F2_dfclass, 12399}, // __builtin_HEXAGON_F2_dfclass
-      {Intrinsic::hexagon_F2_dfcmpeq, 12428}, // __builtin_HEXAGON_F2_dfcmpeq
-      {Intrinsic::hexagon_F2_dfcmpge, 12457}, // __builtin_HEXAGON_F2_dfcmpge
-      {Intrinsic::hexagon_F2_dfcmpgt, 12486}, // __builtin_HEXAGON_F2_dfcmpgt
-      {Intrinsic::hexagon_F2_dfcmpuo, 12515}, // __builtin_HEXAGON_F2_dfcmpuo
-      {Intrinsic::hexagon_F2_dfimm_n, 12544}, // __builtin_HEXAGON_F2_dfimm_n
-      {Intrinsic::hexagon_F2_dfimm_p, 12573}, // __builtin_HEXAGON_F2_dfimm_p
-      {Intrinsic::hexagon_F2_sfadd, 12602}, // __builtin_HEXAGON_F2_sfadd
-      {Intrinsic::hexagon_F2_sfclass, 12629}, // __builtin_HEXAGON_F2_sfclass
-      {Intrinsic::hexagon_F2_sfcmpeq, 12658}, // __builtin_HEXAGON_F2_sfcmpeq
-      {Intrinsic::hexagon_F2_sfcmpge, 12687}, // __builtin_HEXAGON_F2_sfcmpge
-      {Intrinsic::hexagon_F2_sfcmpgt, 12716}, // __builtin_HEXAGON_F2_sfcmpgt
-      {Intrinsic::hexagon_F2_sfcmpuo, 12745}, // __builtin_HEXAGON_F2_sfcmpuo
-      {Intrinsic::hexagon_F2_sffixupd, 12774}, // __builtin_HEXAGON_F2_sffixupd
-      {Intrinsic::hexagon_F2_sffixupn, 12804}, // __builtin_HEXAGON_F2_sffixupn
-      {Intrinsic::hexagon_F2_sffixupr, 12834}, // __builtin_HEXAGON_F2_sffixupr
-      {Intrinsic::hexagon_F2_sffma, 12864}, // __builtin_HEXAGON_F2_sffma
-      {Intrinsic::hexagon_F2_sffma_lib, 12891}, // __builtin_HEXAGON_F2_sffma_lib
-      {Intrinsic::hexagon_F2_sffma_sc, 12922}, // __builtin_HEXAGON_F2_sffma_sc
-      {Intrinsic::hexagon_F2_sffms, 12952}, // __builtin_HEXAGON_F2_sffms
-      {Intrinsic::hexagon_F2_sffms_lib, 12979}, // __builtin_HEXAGON_F2_sffms_lib
-      {Intrinsic::hexagon_F2_sfimm_n, 13010}, // __builtin_HEXAGON_F2_sfimm_n
-      {Intrinsic::hexagon_F2_sfimm_p, 13039}, // __builtin_HEXAGON_F2_sfimm_p
-      {Intrinsic::hexagon_F2_sfmax, 13068}, // __builtin_HEXAGON_F2_sfmax
-      {Intrinsic::hexagon_F2_sfmin, 13095}, // __builtin_HEXAGON_F2_sfmin
-      {Intrinsic::hexagon_F2_sfmpy, 13122}, // __builtin_HEXAGON_F2_sfmpy
-      {Intrinsic::hexagon_F2_sfsub, 13149}, // __builtin_HEXAGON_F2_sfsub
-      {Intrinsic::hexagon_L2_loadw_locked, 13176}, // __builtin_HEXAGON_L2_loadw_locked
-      {Intrinsic::hexagon_L4_loadd_locked, 13210}, // __builtin_HEXAGON_L4_loadd_locked
-      {Intrinsic::hexagon_M2_acci, 13244}, // __builtin_HEXAGON_M2_acci
-      {Intrinsic::hexagon_M2_accii, 13270}, // __builtin_HEXAGON_M2_accii
-      {Intrinsic::hexagon_M2_cmaci_s0, 13297}, // __builtin_HEXAGON_M2_cmaci_s0
-      {Intrinsic::hexagon_M2_cmacr_s0, 13327}, // __builtin_HEXAGON_M2_cmacr_s0
-      {Intrinsic::hexagon_M2_cmacs_s0, 13357}, // __builtin_HEXAGON_M2_cmacs_s0
-      {Intrinsic::hexagon_M2_cmacs_s1, 13387}, // __builtin_HEXAGON_M2_cmacs_s1
-      {Intrinsic::hexagon_M2_cmacsc_s0, 13417}, // __builtin_HEXAGON_M2_cmacsc_s0
-      {Intrinsic::hexagon_M2_cmacsc_s1, 13448}, // __builtin_HEXAGON_M2_cmacsc_s1
-      {Intrinsic::hexagon_M2_cmpyi_s0, 13479}, // __builtin_HEXAGON_M2_cmpyi_s0
-      {Intrinsic::hexagon_M2_cmpyr_s0, 13509}, // __builtin_HEXAGON_M2_cmpyr_s0
-      {Intrinsic::hexagon_M2_cmpyrs_s0, 13539}, // __builtin_HEXAGON_M2_cmpyrs_s0
-      {Intrinsic::hexagon_M2_cmpyrs_s1, 13570}, // __builtin_HEXAGON_M2_cmpyrs_s1
-      {Intrinsic::hexagon_M2_cmpyrsc_s0, 13601}, // __builtin_HEXAGON_M2_cmpyrsc_s0
-      {Intrinsic::hexagon_M2_cmpyrsc_s1, 13633}, // __builtin_HEXAGON_M2_cmpyrsc_s1
-      {Intrinsic::hexagon_M2_cmpys_s0, 13665}, // __builtin_HEXAGON_M2_cmpys_s0
-      {Intrinsic::hexagon_M2_cmpys_s1, 13695}, // __builtin_HEXAGON_M2_cmpys_s1
-      {Intrinsic::hexagon_M2_cmpysc_s0, 13725}, // __builtin_HEXAGON_M2_cmpysc_s0
-      {Intrinsic::hexagon_M2_cmpysc_s1, 13756}, // __builtin_HEXAGON_M2_cmpysc_s1
-      {Intrinsic::hexagon_M2_cnacs_s0, 13787}, // __builtin_HEXAGON_M2_cnacs_s0
-      {Intrinsic::hexagon_M2_cnacs_s1, 13817}, // __builtin_HEXAGON_M2_cnacs_s1
-      {Intrinsic::hexagon_M2_cnacsc_s0, 13847}, // __builtin_HEXAGON_M2_cnacsc_s0
-      {Intrinsic::hexagon_M2_cnacsc_s1, 13878}, // __builtin_HEXAGON_M2_cnacsc_s1
-      {Intrinsic::hexagon_M2_dpmpyss_acc_s0, 13909}, // __builtin_HEXAGON_M2_dpmpyss_acc_s0
-      {Intrinsic::hexagon_M2_dpmpyss_nac_s0, 13945}, // __builtin_HEXAGON_M2_dpmpyss_nac_s0
-      {Intrinsic::hexagon_M2_dpmpyss_rnd_s0, 13981}, // __builtin_HEXAGON_M2_dpmpyss_rnd_s0
-      {Intrinsic::hexagon_M2_dpmpyss_s0, 14017}, // __builtin_HEXAGON_M2_dpmpyss_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_acc_s0, 14049}, // __builtin_HEXAGON_M2_dpmpyuu_acc_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_nac_s0, 14085}, // __builtin_HEXAGON_M2_dpmpyuu_nac_s0
-      {Intrinsic::hexagon_M2_dpmpyuu_s0, 14121}, // __builtin_HEXAGON_M2_dpmpyuu_s0
-      {Intrinsic::hexagon_M2_hmmpyh_rs1, 14153}, // __builtin_HEXAGON_M2_hmmpyh_rs1
-      {Intrinsic::hexagon_M2_hmmpyh_s1, 14185}, // __builtin_HEXAGON_M2_hmmpyh_s1
-      {Intrinsic::hexagon_M2_hmmpyl_rs1, 14216}, // __builtin_HEXAGON_M2_hmmpyl_rs1
-      {Intrinsic::hexagon_M2_hmmpyl_s1, 14248}, // __builtin_HEXAGON_M2_hmmpyl_s1
-      {Intrinsic::hexagon_M2_maci, 14279}, // __builtin_HEXAGON_M2_maci
-      {Intrinsic::hexagon_M2_macsin, 14305}, // __builtin_HEXAGON_M2_macsin
-      {Intrinsic::hexagon_M2_macsip, 14333}, // __builtin_HEXAGON_M2_macsip
-      {Intrinsic::hexagon_M2_mmachs_rs0, 14361}, // __builtin_HEXAGON_M2_mmachs_rs0
-      {Intrinsic::hexagon_M2_mmachs_rs1, 14393}, // __builtin_HEXAGON_M2_mmachs_rs1
-      {Intrinsic::hexagon_M2_mmachs_s0, 14425}, // __builtin_HEXAGON_M2_mmachs_s0
-      {Intrinsic::hexagon_M2_mmachs_s1, 14456}, // __builtin_HEXAGON_M2_mmachs_s1
-      {Intrinsic::hexagon_M2_mmacls_rs0, 14487}, // __builtin_HEXAGON_M2_mmacls_rs0
-      {Intrinsic::hexagon_M2_mmacls_rs1, 14519}, // __builtin_HEXAGON_M2_mmacls_rs1
-      {Intrinsic::hexagon_M2_mmacls_s0, 14551}, // __builtin_HEXAGON_M2_mmacls_s0
-      {Intrinsic::hexagon_M2_mmacls_s1, 14582}, // __builtin_HEXAGON_M2_mmacls_s1
-      {Intrinsic::hexagon_M2_mmacuhs_rs0, 14613}, // __builtin_HEXAGON_M2_mmacuhs_rs0
-      {Intrinsic::hexagon_M2_mmacuhs_rs1, 14646}, // __builtin_HEXAGON_M2_mmacuhs_rs1
-      {Intrinsic::hexagon_M2_mmacuhs_s0, 14679}, // __builtin_HEXAGON_M2_mmacuhs_s0
-      {Intrinsic::hexagon_M2_mmacuhs_s1, 14711}, // __builtin_HEXAGON_M2_mmacuhs_s1
-      {Intrinsic::hexagon_M2_mmaculs_rs0, 14743}, // __builtin_HEXAGON_M2_mmaculs_rs0
-      {Intrinsic::hexagon_M2_mmaculs_rs1, 14776}, // __builtin_HEXAGON_M2_mmaculs_rs1
-      {Intrinsic::hexagon_M2_mmaculs_s0, 14809}, // __builtin_HEXAGON_M2_mmaculs_s0
-      {Intrinsic::hexagon_M2_mmaculs_s1, 14841}, // __builtin_HEXAGON_M2_mmaculs_s1
-      {Intrinsic::hexagon_M2_mmpyh_rs0, 14873}, // __builtin_HEXAGON_M2_mmpyh_rs0
-      {Intrinsic::hexagon_M2_mmpyh_rs1, 14904}, // __builtin_HEXAGON_M2_mmpyh_rs1
-      {Intrinsic::hexagon_M2_mmpyh_s0, 14935}, // __builtin_HEXAGON_M2_mmpyh_s0
-      {Intrinsic::hexagon_M2_mmpyh_s1, 14965}, // __builtin_HEXAGON_M2_mmpyh_s1
-      {Intrinsic::hexagon_M2_mmpyl_rs0, 14995}, // __builtin_HEXAGON_M2_mmpyl_rs0
-      {Intrinsic::hexagon_M2_mmpyl_rs1, 15026}, // __builtin_HEXAGON_M2_mmpyl_rs1
-      {Intrinsic::hexagon_M2_mmpyl_s0, 15057}, // __builtin_HEXAGON_M2_mmpyl_s0
-      {Intrinsic::hexagon_M2_mmpyl_s1, 15087}, // __builtin_HEXAGON_M2_mmpyl_s1
-      {Intrinsic::hexagon_M2_mmpyuh_rs0, 15117}, // __builtin_HEXAGON_M2_mmpyuh_rs0
-      {Intrinsic::hexagon_M2_mmpyuh_rs1, 15149}, // __builtin_HEXAGON_M2_mmpyuh_rs1
-      {Intrinsic::hexagon_M2_mmpyuh_s0, 15181}, // __builtin_HEXAGON_M2_mmpyuh_s0
-      {Intrinsic::hexagon_M2_mmpyuh_s1, 15212}, // __builtin_HEXAGON_M2_mmpyuh_s1
-      {Intrinsic::hexagon_M2_mmpyul_rs0, 15243}, // __builtin_HEXAGON_M2_mmpyul_rs0
-      {Intrinsic::hexagon_M2_mmpyul_rs1, 15275}, // __builtin_HEXAGON_M2_mmpyul_rs1
-      {Intrinsic::hexagon_M2_mmpyul_s0, 15307}, // __builtin_HEXAGON_M2_mmpyul_s0
-      {Intrinsic::hexagon_M2_mmpyul_s1, 15338}, // __builtin_HEXAGON_M2_mmpyul_s1
-      {Intrinsic::hexagon_M2_mpy_acc_hh_s0, 15369}, // __builtin_HEXAGON_M2_mpy_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_hh_s1, 15404}, // __builtin_HEXAGON_M2_mpy_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_hl_s0, 15439}, // __builtin_HEXAGON_M2_mpy_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpy_acc_hl_s1, 15474}, // __builtin_HEXAGON_M2_mpy_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpy_acc_lh_s0, 15509}, // __builtin_HEXAGON_M2_mpy_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_lh_s1, 15544}, // __builtin_HEXAGON_M2_mpy_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_ll_s0, 15579}, // __builtin_HEXAGON_M2_mpy_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpy_acc_ll_s1, 15614}, // __builtin_HEXAGON_M2_mpy_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s0, 15649}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hh_s1, 15688}, // __builtin_HEXAGON_M2_mpy_acc_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s0, 15727}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_hl_s1, 15766}, // __builtin_HEXAGON_M2_mpy_acc_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s0, 15805}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_lh_s1, 15844}, // __builtin_HEXAGON_M2_mpy_acc_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s0, 15883}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_acc_sat_ll_s1, 15922}, // __builtin_HEXAGON_M2_mpy_acc_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_hh_s0, 15961}, // __builtin_HEXAGON_M2_mpy_hh_s0
-      {Intrinsic::hexagon_M2_mpy_hh_s1, 15992}, // __builtin_HEXAGON_M2_mpy_hh_s1
-      {Intrinsic::hexagon_M2_mpy_hl_s0, 16023}, // __builtin_HEXAGON_M2_mpy_hl_s0
-      {Intrinsic::hexagon_M2_mpy_hl_s1, 16054}, // __builtin_HEXAGON_M2_mpy_hl_s1
-      {Intrinsic::hexagon_M2_mpy_lh_s0, 16085}, // __builtin_HEXAGON_M2_mpy_lh_s0
-      {Intrinsic::hexagon_M2_mpy_lh_s1, 16116}, // __builtin_HEXAGON_M2_mpy_lh_s1
-      {Intrinsic::hexagon_M2_mpy_ll_s0, 16147}, // __builtin_HEXAGON_M2_mpy_ll_s0
-      {Intrinsic::hexagon_M2_mpy_ll_s1, 16178}, // __builtin_HEXAGON_M2_mpy_ll_s1
-      {Intrinsic::hexagon_M2_mpy_nac_hh_s0, 16209}, // __builtin_HEXAGON_M2_mpy_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_hh_s1, 16244}, // __builtin_HEXAGON_M2_mpy_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_hl_s0, 16279}, // __builtin_HEXAGON_M2_mpy_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpy_nac_hl_s1, 16314}, // __builtin_HEXAGON_M2_mpy_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpy_nac_lh_s0, 16349}, // __builtin_HEXAGON_M2_mpy_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_lh_s1, 16384}, // __builtin_HEXAGON_M2_mpy_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_ll_s0, 16419}, // __builtin_HEXAGON_M2_mpy_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpy_nac_ll_s1, 16454}, // __builtin_HEXAGON_M2_mpy_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s0, 16489}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hh_s1, 16528}, // __builtin_HEXAGON_M2_mpy_nac_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s0, 16567}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_hl_s1, 16606}, // __builtin_HEXAGON_M2_mpy_nac_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s0, 16645}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_lh_s1, 16684}, // __builtin_HEXAGON_M2_mpy_nac_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s0, 16723}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_nac_sat_ll_s1, 16762}, // __builtin_HEXAGON_M2_mpy_nac_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_hh_s0, 16801}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_hh_s1, 16836}, // __builtin_HEXAGON_M2_mpy_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_hl_s0, 16871}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_hl_s1, 16906}, // __builtin_HEXAGON_M2_mpy_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_lh_s0, 16941}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_lh_s1, 16976}, // __builtin_HEXAGON_M2_mpy_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpy_rnd_ll_s0, 17011}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpy_rnd_ll_s1, 17046}, // __builtin_HEXAGON_M2_mpy_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpy_sat_hh_s0, 17081}, // __builtin_HEXAGON_M2_mpy_sat_hh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_hh_s1, 17116}, // __builtin_HEXAGON_M2_mpy_sat_hh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_hl_s0, 17151}, // __builtin_HEXAGON_M2_mpy_sat_hl_s0
-      {Intrinsic::hexagon_M2_mpy_sat_hl_s1, 17186}, // __builtin_HEXAGON_M2_mpy_sat_hl_s1
-      {Intrinsic::hexagon_M2_mpy_sat_lh_s0, 17221}, // __builtin_HEXAGON_M2_mpy_sat_lh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_lh_s1, 17256}, // __builtin_HEXAGON_M2_mpy_sat_lh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_ll_s0, 17291}, // __builtin_HEXAGON_M2_mpy_sat_ll_s0
-      {Intrinsic::hexagon_M2_mpy_sat_ll_s1, 17326}, // __builtin_HEXAGON_M2_mpy_sat_ll_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s0, 17361}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hh_s1, 17400}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s0, 17439}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_hl_s1, 17478}, // __builtin_HEXAGON_M2_mpy_sat_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s0, 17517}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_lh_s1, 17556}, // __builtin_HEXAGON_M2_mpy_sat_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s0, 17595}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpy_sat_rnd_ll_s1, 17634}, // __builtin_HEXAGON_M2_mpy_sat_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpy_up, 17673}, // __builtin_HEXAGON_M2_mpy_up
-      {Intrinsic::hexagon_M2_mpy_up_s1, 17701}, // __builtin_HEXAGON_M2_mpy_up_s1
-      {Intrinsic::hexagon_M2_mpy_up_s1_sat, 17732}, // __builtin_HEXAGON_M2_mpy_up_s1_sat
-      {Intrinsic::hexagon_M2_mpyd_acc_hh_s0, 17767}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_hh_s1, 17803}, // __builtin_HEXAGON_M2_mpyd_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_hl_s0, 17839}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_hl_s1, 17875}, // __builtin_HEXAGON_M2_mpyd_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_lh_s0, 17911}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_lh_s1, 17947}, // __builtin_HEXAGON_M2_mpyd_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_acc_ll_s0, 17983}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_acc_ll_s1, 18019}, // __builtin_HEXAGON_M2_mpyd_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_hh_s0, 18055}, // __builtin_HEXAGON_M2_mpyd_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_hh_s1, 18087}, // __builtin_HEXAGON_M2_mpyd_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_hl_s0, 18119}, // __builtin_HEXAGON_M2_mpyd_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_hl_s1, 18151}, // __builtin_HEXAGON_M2_mpyd_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_lh_s0, 18183}, // __builtin_HEXAGON_M2_mpyd_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_lh_s1, 18215}, // __builtin_HEXAGON_M2_mpyd_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_ll_s0, 18247}, // __builtin_HEXAGON_M2_mpyd_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_ll_s1, 18279}, // __builtin_HEXAGON_M2_mpyd_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_hh_s0, 18311}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_hh_s1, 18347}, // __builtin_HEXAGON_M2_mpyd_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_hl_s0, 18383}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_hl_s1, 18419}, // __builtin_HEXAGON_M2_mpyd_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_lh_s0, 18455}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_lh_s1, 18491}, // __builtin_HEXAGON_M2_mpyd_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_nac_ll_s0, 18527}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_nac_ll_s1, 18563}, // __builtin_HEXAGON_M2_mpyd_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s0, 18599}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_hh_s1, 18635}, // __builtin_HEXAGON_M2_mpyd_rnd_hh_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s0, 18671}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_hl_s1, 18707}, // __builtin_HEXAGON_M2_mpyd_rnd_hl_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s0, 18743}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_lh_s1, 18779}, // __builtin_HEXAGON_M2_mpyd_rnd_lh_s1
-      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s0, 18815}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s0
-      {Intrinsic::hexagon_M2_mpyd_rnd_ll_s1, 18851}, // __builtin_HEXAGON_M2_mpyd_rnd_ll_s1
-      {Intrinsic::hexagon_M2_mpyi, 18887}, // __builtin_HEXAGON_M2_mpyi
-      {Intrinsic::hexagon_M2_mpysmi, 18913}, // __builtin_HEXAGON_M2_mpysmi
-      {Intrinsic::hexagon_M2_mpysu_up, 18941}, // __builtin_HEXAGON_M2_mpysu_up
-      {Intrinsic::hexagon_M2_mpyu_acc_hh_s0, 18971}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_hh_s1, 19007}, // __builtin_HEXAGON_M2_mpyu_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_hl_s0, 19043}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_hl_s1, 19079}, // __builtin_HEXAGON_M2_mpyu_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_lh_s0, 19115}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_lh_s1, 19151}, // __builtin_HEXAGON_M2_mpyu_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_acc_ll_s0, 19187}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_acc_ll_s1, 19223}, // __builtin_HEXAGON_M2_mpyu_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_hh_s0, 19259}, // __builtin_HEXAGON_M2_mpyu_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_hh_s1, 19291}, // __builtin_HEXAGON_M2_mpyu_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_hl_s0, 19323}, // __builtin_HEXAGON_M2_mpyu_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_hl_s1, 19355}, // __builtin_HEXAGON_M2_mpyu_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_lh_s0, 19387}, // __builtin_HEXAGON_M2_mpyu_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_lh_s1, 19419}, // __builtin_HEXAGON_M2_mpyu_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_ll_s0, 19451}, // __builtin_HEXAGON_M2_mpyu_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_ll_s1, 19483}, // __builtin_HEXAGON_M2_mpyu_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_hh_s0, 19515}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_hh_s1, 19551}, // __builtin_HEXAGON_M2_mpyu_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_hl_s0, 19587}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_hl_s1, 19623}, // __builtin_HEXAGON_M2_mpyu_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_lh_s0, 19659}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_lh_s1, 19695}, // __builtin_HEXAGON_M2_mpyu_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyu_nac_ll_s0, 19731}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyu_nac_ll_s1, 19767}, // __builtin_HEXAGON_M2_mpyu_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyu_up, 19803}, // __builtin_HEXAGON_M2_mpyu_up
-      {Intrinsic::hexagon_M2_mpyud_acc_hh_s0, 19832}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_hh_s1, 19869}, // __builtin_HEXAGON_M2_mpyud_acc_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_hl_s0, 19906}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_hl_s1, 19943}, // __builtin_HEXAGON_M2_mpyud_acc_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_lh_s0, 19980}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_lh_s1, 20017}, // __builtin_HEXAGON_M2_mpyud_acc_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_acc_ll_s0, 20054}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_acc_ll_s1, 20091}, // __builtin_HEXAGON_M2_mpyud_acc_ll_s1
-      {Intrinsic::hexagon_M2_mpyud_hh_s0, 20128}, // __builtin_HEXAGON_M2_mpyud_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_hh_s1, 20161}, // __builtin_HEXAGON_M2_mpyud_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_hl_s0, 20194}, // __builtin_HEXAGON_M2_mpyud_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_hl_s1, 20227}, // __builtin_HEXAGON_M2_mpyud_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_lh_s0, 20260}, // __builtin_HEXAGON_M2_mpyud_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_lh_s1, 20293}, // __builtin_HEXAGON_M2_mpyud_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_ll_s0, 20326}, // __builtin_HEXAGON_M2_mpyud_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_ll_s1, 20359}, // __builtin_HEXAGON_M2_mpyud_ll_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_hh_s0, 20392}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_hh_s1, 20429}, // __builtin_HEXAGON_M2_mpyud_nac_hh_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_hl_s0, 20466}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_hl_s1, 20503}, // __builtin_HEXAGON_M2_mpyud_nac_hl_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_lh_s0, 20540}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_lh_s1, 20577}, // __builtin_HEXAGON_M2_mpyud_nac_lh_s1
-      {Intrinsic::hexagon_M2_mpyud_nac_ll_s0, 20614}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s0
-      {Intrinsic::hexagon_M2_mpyud_nac_ll_s1, 20651}, // __builtin_HEXAGON_M2_mpyud_nac_ll_s1
-      {Intrinsic::hexagon_M2_mpyui, 20688}, // __builtin_HEXAGON_M2_mpyui
-      {Intrinsic::hexagon_M2_nacci, 20715}, // __builtin_HEXAGON_M2_nacci
-      {Intrinsic::hexagon_M2_naccii, 20742}, // __builtin_HEXAGON_M2_naccii
-      {Intrinsic::hexagon_M2_subacc, 20770}, // __builtin_HEXAGON_M2_subacc
-      {Intrinsic::hexagon_M2_vabsdiffh, 20798}, // __builtin_HEXAGON_M2_vabsdiffh
-      {Intrinsic::hexagon_M2_vabsdiffw, 20829}, // __builtin_HEXAGON_M2_vabsdiffw
-      {Intrinsic::hexagon_M2_vcmac_s0_sat_i, 20860}, // __builtin_HEXAGON_M2_vcmac_s0_sat_i
-      {Intrinsic::hexagon_M2_vcmac_s0_sat_r, 20896}, // __builtin_HEXAGON_M2_vcmac_s0_sat_r
-      {Intrinsic::hexagon_M2_vcmpy_s0_sat_i, 20932}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_i
-      {Intrinsic::hexagon_M2_vcmpy_s0_sat_r, 20968}, // __builtin_HEXAGON_M2_vcmpy_s0_sat_r
-      {Intrinsic::hexagon_M2_vcmpy_s1_sat_i, 21004}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_i
-      {Intrinsic::hexagon_M2_vcmpy_s1_sat_r, 21040}, // __builtin_HEXAGON_M2_vcmpy_s1_sat_r
-      {Intrinsic::hexagon_M2_vdmacs_s0, 21076}, // __builtin_HEXAGON_M2_vdmacs_s0
-      {Intrinsic::hexagon_M2_vdmacs_s1, 21107}, // __builtin_HEXAGON_M2_vdmacs_s1
-      {Intrinsic::hexagon_M2_vdmpyrs_s0, 21138}, // __builtin_HEXAGON_M2_vdmpyrs_s0
-      {Intrinsic::hexagon_M2_vdmpyrs_s1, 21170}, // __builtin_HEXAGON_M2_vdmpyrs_s1
-      {Intrinsic::hexagon_M2_vdmpys_s0, 21202}, // __builtin_HEXAGON_M2_vdmpys_s0
-      {Intrinsic::hexagon_M2_vdmpys_s1, 21233}, // __builtin_HEXAGON_M2_vdmpys_s1
-      {Intrinsic::hexagon_M2_vmac2, 21264}, // __builtin_HEXAGON_M2_vmac2
-      {Intrinsic::hexagon_M2_vmac2es, 21291}, // __builtin_HEXAGON_M2_vmac2es
-      {Intrinsic::hexagon_M2_vmac2es_s0, 21320}, // __builtin_HEXAGON_M2_vmac2es_s0
-      {Intrinsic::hexagon_M2_vmac2es_s1, 21352}, // __builtin_HEXAGON_M2_vmac2es_s1
-      {Intrinsic::hexagon_M2_vmac2s_s0, 21384}, // __builtin_HEXAGON_M2_vmac2s_s0
-      {Intrinsic::hexagon_M2_vmac2s_s1, 21415}, // __builtin_HEXAGON_M2_vmac2s_s1
-      {Intrinsic::hexagon_M2_vmac2su_s0, 21446}, // __builtin_HEXAGON_M2_vmac2su_s0
-      {Intrinsic::hexagon_M2_vmac2su_s1, 21478}, // __builtin_HEXAGON_M2_vmac2su_s1
-      {Intrinsic::hexagon_M2_vmpy2es_s0, 21510}, // __builtin_HEXAGON_M2_vmpy2es_s0
-      {Intrinsic::hexagon_M2_vmpy2es_s1, 21542}, // __builtin_HEXAGON_M2_vmpy2es_s1
-      {Intrinsic::hexagon_M2_vmpy2s_s0, 21574}, // __builtin_HEXAGON_M2_vmpy2s_s0
-      {Intrinsic::hexagon_M2_vmpy2s_s0pack, 21605}, // __builtin_HEXAGON_M2_vmpy2s_s0pack
-      {Intrinsic::hexagon_M2_vmpy2s_s1, 21640}, // __builtin_HEXAGON_M2_vmpy2s_s1
-      {Intrinsic::hexagon_M2_vmpy2s_s1pack, 21671}, // __builtin_HEXAGON_M2_vmpy2s_s1pack
-      {Intrinsic::hexagon_M2_vmpy2su_s0, 21706}, // __builtin_HEXAGON_M2_vmpy2su_s0
-      {Intrinsic::hexagon_M2_vmpy2su_s1, 21738}, // __builtin_HEXAGON_M2_vmpy2su_s1
-      {Intrinsic::hexagon_M2_vraddh, 21770}, // __builtin_HEXAGON_M2_vraddh
-      {Intrinsic::hexagon_M2_vradduh, 21798}, // __builtin_HEXAGON_M2_vradduh
-      {Intrinsic::hexagon_M2_vrcmaci_s0, 21827}, // __builtin_HEXAGON_M2_vrcmaci_s0
-      {Intrinsic::hexagon_M2_vrcmaci_s0c, 21859}, // __builtin_HEXAGON_M2_vrcmaci_s0c
-      {Intrinsic::hexagon_M2_vrcmacr_s0, 21892}, // __builtin_HEXAGON_M2_vrcmacr_s0
-      {Intrinsic::hexagon_M2_vrcmacr_s0c, 21924}, // __builtin_HEXAGON_M2_vrcmacr_s0c
-      {Intrinsic::hexagon_M2_vrcmpyi_s0, 21957}, // __builtin_HEXAGON_M2_vrcmpyi_s0
-      {Intrinsic::hexagon_M2_vrcmpyi_s0c, 21989}, // __builtin_HEXAGON_M2_vrcmpyi_s0c
-      {Intrinsic::hexagon_M2_vrcmpyr_s0, 22022}, // __builtin_HEXAGON_M2_vrcmpyr_s0
-      {Intrinsic::hexagon_M2_vrcmpyr_s0c, 22054}, // __builtin_HEXAGON_M2_vrcmpyr_s0c
-      {Intrinsic::hexagon_M2_vrcmpys_acc_s1, 22087}, // __builtin_HEXAGON_M2_vrcmpys_acc_s1
-      {Intrinsic::hexagon_M2_vrcmpys_s1, 22123}, // __builtin_HEXAGON_M2_vrcmpys_s1
-      {Intrinsic::hexagon_M2_vrcmpys_s1rp, 22155}, // __builtin_HEXAGON_M2_vrcmpys_s1rp
-      {Intrinsic::hexagon_M2_vrmac_s0, 22189}, // __builtin_HEXAGON_M2_vrmac_s0
-      {Intrinsic::hexagon_M2_vrmpy_s0, 22219}, // __builtin_HEXAGON_M2_vrmpy_s0
-      {Intrinsic::hexagon_M2_xor_xacc, 22249}, // __builtin_HEXAGON_M2_xor_xacc
-      {Intrinsic::hexagon_M4_and_and, 22279}, // __builtin_HEXAGON_M4_and_and
-      {Intrinsic::hexagon_M4_and_andn, 22308}, // __builtin_HEXAGON_M4_and_andn
-      {Intrinsic::hexagon_M4_and_or, 22338}, // __builtin_HEXAGON_M4_and_or
-      {Intrinsic::hexagon_M4_and_xor, 22366}, // __builtin_HEXAGON_M4_and_xor
-      {Intrinsic::hexagon_M4_cmpyi_wh, 22395}, // __builtin_HEXAGON_M4_cmpyi_wh
-      {Intrinsic::hexagon_M4_cmpyi_whc, 22425}, // __builtin_HEXAGON_M4_cmpyi_whc
-      {Intrinsic::hexagon_M4_cmpyr_wh, 22456}, // __builtin_HEXAGON_M4_cmpyr_wh
-      {Intrinsic::hexagon_M4_cmpyr_whc, 22486}, // __builtin_HEXAGON_M4_cmpyr_whc
-      {Intrinsic::hexagon_M4_mac_up_s1_sat, 22517}, // __builtin_HEXAGON_M4_mac_up_s1_sat
-      {Intrinsic::hexagon_M4_mpyri_addi, 22552}, // __builtin_HEXAGON_M4_mpyri_addi
-      {Intrinsic::hexagon_M4_mpyri_addr, 22584}, // __builtin_HEXAGON_M4_mpyri_addr
-      {Intrinsic::hexagon_M4_mpyri_addr_u2, 22616}, // __builtin_HEXAGON_M4_mpyri_addr_u2
-      {Intrinsic::hexagon_M4_mpyrr_addi, 22651}, // __builtin_HEXAGON_M4_mpyrr_addi
-      {Intrinsic::hexagon_M4_mpyrr_addr, 22683}, // __builtin_HEXAGON_M4_mpyrr_addr
-      {Intrinsic::hexagon_M4_nac_up_s1_sat, 22715}, // __builtin_HEXAGON_M4_nac_up_s1_sat
-      {Intrinsic::hexagon_M4_or_and, 22750}, // __builtin_HEXAGON_M4_or_and
-      {Intrinsic::hexagon_M4_or_andn, 22778}, // __builtin_HEXAGON_M4_or_andn
-      {Intrinsic::hexagon_M4_or_or, 22807}, // __builtin_HEXAGON_M4_or_or
-      {Intrinsic::hexagon_M4_or_xor, 22834}, // __builtin_HEXAGON_M4_or_xor
-      {Intrinsic::hexagon_M4_pmpyw, 22862}, // __builtin_HEXAGON_M4_pmpyw
-      {Intrinsic::hexagon_M4_pmpyw_acc, 22889}, // __builtin_HEXAGON_M4_pmpyw_acc
-      {Intrinsic::hexagon_M4_vpmpyh, 22920}, // __builtin_HEXAGON_M4_vpmpyh
-      {Intrinsic::hexagon_M4_vpmpyh_acc, 22948}, // __builtin_HEXAGON_M4_vpmpyh_acc
-      {Intrinsic::hexagon_M4_vrmpyeh_acc_s0, 22980}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s0
-      {Intrinsic::hexagon_M4_vrmpyeh_acc_s1, 23016}, // __builtin_HEXAGON_M4_vrmpyeh_acc_s1
-      {Intrinsic::hexagon_M4_vrmpyeh_s0, 23052}, // __builtin_HEXAGON_M4_vrmpyeh_s0
-      {Intrinsic::hexagon_M4_vrmpyeh_s1, 23084}, // __builtin_HEXAGON_M4_vrmpyeh_s1
-      {Intrinsic::hexagon_M4_vrmpyoh_acc_s0, 23116}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s0
-      {Intrinsic::hexagon_M4_vrmpyoh_acc_s1, 23152}, // __builtin_HEXAGON_M4_vrmpyoh_acc_s1
-      {Intrinsic::hexagon_M4_vrmpyoh_s0, 23188}, // __builtin_HEXAGON_M4_vrmpyoh_s0
-      {Intrinsic::hexagon_M4_vrmpyoh_s1, 23220}, // __builtin_HEXAGON_M4_vrmpyoh_s1
-      {Intrinsic::hexagon_M4_xor_and, 23252}, // __builtin_HEXAGON_M4_xor_and
-      {Intrinsic::hexagon_M4_xor_andn, 23281}, // __builtin_HEXAGON_M4_xor_andn
-      {Intrinsic::hexagon_M4_xor_or, 23311}, // __builtin_HEXAGON_M4_xor_or
-      {Intrinsic::hexagon_M4_xor_xacc, 23339}, // __builtin_HEXAGON_M4_xor_xacc
-      {Intrinsic::hexagon_M5_vdmacbsu, 23369}, // __builtin_HEXAGON_M5_vdmacbsu
-      {Intrinsic::hexagon_M5_vdmpybsu, 23399}, // __builtin_HEXAGON_M5_vdmpybsu
-      {Intrinsic::hexagon_M5_vmacbsu, 23429}, // __builtin_HEXAGON_M5_vmacbsu
-      {Intrinsic::hexagon_M5_vmacbuu, 23458}, // __builtin_HEXAGON_M5_vmacbuu
-      {Intrinsic::hexagon_M5_vmpybsu, 23487}, // __builtin_HEXAGON_M5_vmpybsu
-      {Intrinsic::hexagon_M5_vmpybuu, 23516}, // __builtin_HEXAGON_M5_vmpybuu
-      {Intrinsic::hexagon_M5_vrmacbsu, 23545}, // __builtin_HEXAGON_M5_vrmacbsu
-      {Intrinsic::hexagon_M5_vrmacbuu, 23575}, // __builtin_HEXAGON_M5_vrmacbuu
-      {Intrinsic::hexagon_M5_vrmpybsu, 23605}, // __builtin_HEXAGON_M5_vrmpybsu
-      {Intrinsic::hexagon_M5_vrmpybuu, 23635}, // __builtin_HEXAGON_M5_vrmpybuu
-      {Intrinsic::hexagon_M6_vabsdiffb, 23665}, // __builtin_HEXAGON_M6_vabsdiffb
-      {Intrinsic::hexagon_M6_vabsdiffub, 23696}, // __builtin_HEXAGON_M6_vabsdiffub
-      {Intrinsic::hexagon_S2_addasl_rrri, 23728}, // __builtin_HEXAGON_S2_addasl_rrri
-      {Intrinsic::hexagon_S2_asl_i_p, 23761}, // __builtin_HEXAGON_S2_asl_i_p
-      {Intrinsic::hexagon_S2_asl_i_p_acc, 23790}, // __builtin_HEXAGON_S2_asl_i_p_acc
-      {Intrinsic::hexagon_S2_asl_i_p_and, 23823}, // __builtin_HEXAGON_S2_asl_i_p_and
-      {Intrinsic::hexagon_S2_asl_i_p_nac, 23856}, // __builtin_HEXAGON_S2_asl_i_p_nac
-      {Intrinsic::hexagon_S2_asl_i_p_or, 23889}, // __builtin_HEXAGON_S2_asl_i_p_or
-      {Intrinsic::hexagon_S2_asl_i_p_xacc, 23921}, // __builtin_HEXAGON_S2_asl_i_p_xacc
-      {Intrinsic::hexagon_S2_asl_i_r, 23955}, // __builtin_HEXAGON_S2_asl_i_r
-      {Intrinsic::hexagon_S2_asl_i_r_acc, 23984}, // __builtin_HEXAGON_S2_asl_i_r_acc
-      {Intrinsic::hexagon_S2_asl_i_r_and, 24017}, // __builtin_HEXAGON_S2_asl_i_r_and
-      {Intrinsic::hexagon_S2_asl_i_r_nac, 24050}, // __builtin_HEXAGON_S2_asl_i_r_nac
-      {Intrinsic::hexagon_S2_asl_i_r_or, 24083}, // __builtin_HEXAGON_S2_asl_i_r_or
-      {Intrinsic::hexagon_S2_asl_i_r_sat, 24115}, // __builtin_HEXAGON_S2_asl_i_r_sat
-      {Intrinsic::hexagon_S2_asl_i_r_xacc, 24148}, // __builtin_HEXAGON_S2_asl_i_r_xacc
-      {Intrinsic::hexagon_S2_asl_i_vh, 24182}, // __builtin_HEXAGON_S2_asl_i_vh
-      {Intrinsic::hexagon_S2_asl_i_vw, 24212}, // __builtin_HEXAGON_S2_asl_i_vw
-      {Intrinsic::hexagon_S2_asl_r_p, 24242}, // __builtin_HEXAGON_S2_asl_r_p
-      {Intrinsic::hexagon_S2_asl_r_p_acc, 24271}, // __builtin_HEXAGON_S2_asl_r_p_acc
-      {Intrinsic::hexagon_S2_asl_r_p_and, 24304}, // __builtin_HEXAGON_S2_asl_r_p_and
-      {Intrinsic::hexagon_S2_asl_r_p_nac, 24337}, // __builtin_HEXAGON_S2_asl_r_p_nac
-      {Intrinsic::hexagon_S2_asl_r_p_or, 24370}, // __builtin_HEXAGON_S2_asl_r_p_or
-      {Intrinsic::hexagon_S2_asl_r_p_xor, 24402}, // __builtin_HEXAGON_S2_asl_r_p_xor
-      {Intrinsic::hexagon_S2_asl_r_r, 24435}, // __builtin_HEXAGON_S2_asl_r_r
-      {Intrinsic::hexagon_S2_asl_r_r_acc, 24464}, // __builtin_HEXAGON_S2_asl_r_r_acc
-      {Intrinsic::hexagon_S2_asl_r_r_and, 24497}, // __builtin_HEXAGON_S2_asl_r_r_and
-      {Intrinsic::hexagon_S2_asl_r_r_nac, 24530}, // __builtin_HEXAGON_S2_asl_r_r_nac
-      {Intrinsic::hexagon_S2_asl_r_r_or, 24563}, // __builtin_HEXAGON_S2_asl_r_r_or
-      {Intrinsic::hexagon_S2_asl_r_r_sat, 24595}, // __builtin_HEXAGON_S2_asl_r_r_sat
-      {Intrinsic::hexagon_S2_asl_r_vh, 24628}, // __builtin_HEXAGON_S2_asl_r_vh
-      {Intrinsic::hexagon_S2_asl_r_vw, 24658}, // __builtin_HEXAGON_S2_asl_r_vw
-      {Intrinsic::hexagon_S2_asr_i_p, 24688}, // __builtin_HEXAGON_S2_asr_i_p
-      {Intrinsic::hexagon_S2_asr_i_p_acc, 24717}, // __builtin_HEXAGON_S2_asr_i_p_acc
-      {Intrinsic::hexagon_S2_asr_i_p_and, 24750}, // __builtin_HEXAGON_S2_asr_i_p_and
-      {Intrinsic::hexagon_S2_asr_i_p_nac, 24783}, // __builtin_HEXAGON_S2_asr_i_p_nac
-      {Intrinsic::hexagon_S2_asr_i_p_or, 24816}, // __builtin_HEXAGON_S2_asr_i_p_or
-      {Intrinsic::hexagon_S2_asr_i_p_rnd, 24848}, // __builtin_HEXAGON_S2_asr_i_p_rnd
-      {Intrinsic::hexagon_S2_asr_i_p_rnd_goodsyntax, 24881}, // __builtin_HEXAGON_S2_asr_i_p_rnd_goodsyntax
-      {Intrinsic::hexagon_S2_asr_i_r, 24925}, // __builtin_HEXAGON_S2_asr_i_r
-      {Intrinsic::hexagon_S2_asr_i_r_acc, 24954}, // __builtin_HEXAGON_S2_asr_i_r_acc
-      {Intrinsic::hexagon_S2_asr_i_r_and, 24987}, // __builtin_HEXAGON_S2_asr_i_r_and
-      {Intrinsic::hexagon_S2_asr_i_r_nac, 25020}, // __builtin_HEXAGON_S2_asr_i_r_nac
-      {Intrinsic::hexagon_S2_asr_i_r_or, 25053}, // __builtin_HEXAGON_S2_asr_i_r_or
-      {Intrinsic::hexagon_S2_asr_i_r_rnd, 25085}, // __builtin_HEXAGON_S2_asr_i_r_rnd
-      {Intrinsic::hexagon_S2_asr_i_r_rnd_goodsyntax, 25118}, // __builtin_HEXAGON_S2_asr_i_r_rnd_goodsyntax
-      {Intrinsic::hexagon_S2_asr_i_svw_trun, 25162}, // __builtin_HEXAGON_S2_asr_i_svw_trun
-      {Intrinsic::hexagon_S2_asr_i_vh, 25198}, // __builtin_HEXAGON_S2_asr_i_vh
-      {Intrinsic::hexagon_S2_asr_i_vw, 25228}, // __builtin_HEXAGON_S2_asr_i_vw
-      {Intrinsic::hexagon_S2_asr_r_p, 25258}, // __builtin_HEXAGON_S2_asr_r_p
-      {Intrinsic::hexagon_S2_asr_r_p_acc, 25287}, // __builtin_HEXAGON_S2_asr_r_p_acc
-      {Intrinsic::hexagon_S2_asr_r_p_and, 25320}, // __builtin_HEXAGON_S2_asr_r_p_and
-      {Intrinsic::hexagon_S2_asr_r_p_nac, 25353}, // __builtin_HEXAGON_S2_asr_r_p_nac
-      {Intrinsic::hexagon_S2_asr_r_p_or, 25386}, // __builtin_HEXAGON_S2_asr_r_p_or
-      {Intrinsic::hexagon_S2_asr_r_p_xor, 25418}, // __builtin_HEXAGON_S2_asr_r_p_xor
-      {Intrinsic::hexagon_S2_asr_r_r, 25451}, // __builtin_HEXAGON_S2_asr_r_r
-      {Intrinsic::hexagon_S2_asr_r_r_acc, 25480}, // __builtin_HEXAGON_S2_asr_r_r_acc
-      {Intrinsic::hexagon_S2_asr_r_r_and, 25513}, // __builtin_HEXAGON_S2_asr_r_r_and
-      {Intrinsic::hexagon_S2_asr_r_r_nac, 25546}, // __builtin_HEXAGON_S2_asr_r_r_nac
-      {Intrinsic::hexagon_S2_asr_r_r_or, 25579}, // __builtin_HEXAGON_S2_asr_r_r_or
-      {Intrinsic::hexagon_S2_asr_r_r_sat, 25611}, // __builtin_HEXAGON_S2_asr_r_r_sat
-      {Intrinsic::hexagon_S2_asr_r_svw_trun, 25644}, // __builtin_HEXAGON_S2_asr_r_svw_trun
-      {Intrinsic::hexagon_S2_asr_r_vh, 25680}, // __builtin_HEXAGON_S2_asr_r_vh
-      {Intrinsic::hexagon_S2_asr_r_vw, 25710}, // __builtin_HEXAGON_S2_asr_r_vw
-      {Intrinsic::hexagon_S2_brev, 25740}, // __builtin_HEXAGON_S2_brev
-      {Intrinsic::hexagon_S2_brevp, 25766}, // __builtin_HEXAGON_S2_brevp
-      {Intrinsic::hexagon_S2_cabacencbin, 25793}, // __builtin_HEXAGON_S2_cabacencbin
-      {Intrinsic::hexagon_S2_cl0, 25826}, // __builtin_HEXAGON_S2_cl0
-      {Intrinsic::hexagon_S2_cl0p, 25851}, // __builtin_HEXAGON_S2_cl0p
-      {Intrinsic::hexagon_S2_cl1, 25877}, // __builtin_HEXAGON_S2_cl1
-      {Intrinsic::hexagon_S2_cl1p, 25902}, // __builtin_HEXAGON_S2_cl1p
-      {Intrinsic::hexagon_S2_clb, 25928}, // __builtin_HEXAGON_S2_clb
-      {Intrinsic::hexagon_S2_clbnorm, 25953}, // __builtin_HEXAGON_S2_clbnorm
-      {Intrinsic::hexagon_S2_clbp, 25982}, // __builtin_HEXAGON_S2_clbp
-      {Intrinsic::hexagon_S2_clrbit_i, 26008}, // __builtin_HEXAGON_S2_clrbit_i
-      {Intrinsic::hexagon_S2_clrbit_r, 26038}, // __builtin_HEXAGON_S2_clrbit_r
-      {Intrinsic::hexagon_S2_ct0, 26068}, // __builtin_HEXAGON_S2_ct0
-      {Intrinsic::hexagon_S2_ct0p, 26093}, // __builtin_HEXAGON_S2_ct0p
-      {Intrinsic::hexagon_S2_ct1, 26119}, // __builtin_HEXAGON_S2_ct1
-      {Intrinsic::hexagon_S2_ct1p, 26144}, // __builtin_HEXAGON_S2_ct1p
-      {Intrinsic::hexagon_S2_deinterleave, 26170}, // __builtin_HEXAGON_S2_deinterleave
-      {Intrinsic::hexagon_S2_extractu, 26204}, // __builtin_HEXAGON_S2_extractu
-      {Intrinsic::hexagon_S2_extractu_rp, 26234}, // __builtin_HEXAGON_S2_extractu_rp
-      {Intrinsic::hexagon_S2_extractup, 26267}, // __builtin_HEXAGON_S2_extractup
-      {Intrinsic::hexagon_S2_extractup_rp, 26298}, // __builtin_HEXAGON_S2_extractup_rp
-      {Intrinsic::hexagon_S2_insert, 26332}, // __builtin_HEXAGON_S2_insert
-      {Intrinsic::hexagon_S2_insert_rp, 26360}, // __builtin_HEXAGON_S2_insert_rp
-      {Intrinsic::hexagon_S2_insertp, 26391}, // __builtin_HEXAGON_S2_insertp
-      {Intrinsic::hexagon_S2_insertp_rp, 26420}, // __builtin_HEXAGON_S2_insertp_rp
-      {Intrinsic::hexagon_S2_interleave, 26452}, // __builtin_HEXAGON_S2_interleave
-      {Intrinsic::hexagon_S2_lfsp, 26484}, // __builtin_HEXAGON_S2_lfsp
-      {Intrinsic::hexagon_S2_lsl_r_p, 26510}, // __builtin_HEXAGON_S2_lsl_r_p
-      {Intrinsic::hexagon_S2_lsl_r_p_acc, 26539}, // __builtin_HEXAGON_S2_lsl_r_p_acc
-      {Intrinsic::hexagon_S2_lsl_r_p_and, 26572}, // __builtin_HEXAGON_S2_lsl_r_p_and
-      {Intrinsic::hexagon_S2_lsl_r_p_nac, 26605}, // __builtin_HEXAGON_S2_lsl_r_p_nac
-      {Intrinsic::hexagon_S2_lsl_r_p_or, 26638}, // __builtin_HEXAGON_S2_lsl_r_p_or
-      {Intrinsic::hexagon_S2_lsl_r_p_xor, 26670}, // __builtin_HEXAGON_S2_lsl_r_p_xor
-      {Intrinsic::hexagon_S2_lsl_r_r, 26703}, // __builtin_HEXAGON_S2_lsl_r_r
-      {Intrinsic::hexagon_S2_lsl_r_r_acc, 26732}, // __builtin_HEXAGON_S2_lsl_r_r_acc
-      {Intrinsic::hexagon_S2_lsl_r_r_and, 26765}, // __builtin_HEXAGON_S2_lsl_r_r_and
-      {Intrinsic::hexagon_S2_lsl_r_r_nac, 26798}, // __builtin_HEXAGON_S2_lsl_r_r_nac
-      {Intrinsic::hexagon_S2_lsl_r_r_or, 26831}, // __builtin_HEXAGON_S2_lsl_r_r_or
-      {Intrinsic::hexagon_S2_lsl_r_vh, 26863}, // __builtin_HEXAGON_S2_lsl_r_vh
-      {Intrinsic::hexagon_S2_lsl_r_vw, 26893}, // __builtin_HEXAGON_S2_lsl_r_vw
-      {Intrinsic::hexagon_S2_lsr_i_p, 26923}, // __builtin_HEXAGON_S2_lsr_i_p
-      {Intrinsic::hexagon_S2_lsr_i_p_acc, 26952}, // __builtin_HEXAGON_S2_lsr_i_p_acc
-      {Intrinsic::hexagon_S2_lsr_i_p_and, 26985}, // __builtin_HEXAGON_S2_lsr_i_p_and
-      {Intrinsic::hexagon_S2_lsr_i_p_nac, 27018}, // __builtin_HEXAGON_S2_lsr_i_p_nac
-      {Intrinsic::hexagon_S2_lsr_i_p_or, 27051}, // __builtin_HEXAGON_S2_lsr_i_p_or
-      {Intrinsic::hexagon_S2_lsr_i_p_xacc, 27083}, // __builtin_HEXAGON_S2_lsr_i_p_xacc
-      {Intrinsic::hexagon_S2_lsr_i_r, 27117}, // __builtin_HEXAGON_S2_lsr_i_r
-      {Intrinsic::hexagon_S2_lsr_i_r_acc, 27146}, // __builtin_HEXAGON_S2_lsr_i_r_acc
-      {Intrinsic::hexagon_S2_lsr_i_r_and, 27179}, // __builtin_HEXAGON_S2_lsr_i_r_and
-      {Intrinsic::hexagon_S2_lsr_i_r_nac, 27212}, // __builtin_HEXAGON_S2_lsr_i_r_nac
-      {Intrinsic::hexagon_S2_lsr_i_r_or, 27245}, // __builtin_HEXAGON_S2_lsr_i_r_or
-      {Intrinsic::hexagon_S2_lsr_i_r_xacc, 27277}, // __builtin_HEXAGON_S2_lsr_i_r_xacc
-      {Intrinsic::hexagon_S2_lsr_i_vh, 27311}, // __builtin_HEXAGON_S2_lsr_i_vh
-      {Intrinsic::hexagon_S2_lsr_i_vw, 27341}, // __builtin_HEXAGON_S2_lsr_i_vw
-      {Intrinsic::hexagon_S2_lsr_r_p, 27371}, // __builtin_HEXAGON_S2_lsr_r_p
-      {Intrinsic::hexagon_S2_lsr_r_p_acc, 27400}, // __builtin_HEXAGON_S2_lsr_r_p_acc
-      {Intrinsic::hexagon_S2_lsr_r_p_and, 27433}, // __builtin_HEXAGON_S2_lsr_r_p_and
-      {Intrinsic::hexagon_S2_lsr_r_p_nac, 27466}, // __builtin_HEXAGON_S2_lsr_r_p_nac
-      {Intrinsic::hexagon_S2_lsr_r_p_or, 27499}, // __builtin_HEXAGON_S2_lsr_r_p_or
-      {Intrinsic::hexagon_S2_lsr_r_p_xor, 27531}, // __builtin_HEXAGON_S2_lsr_r_p_xor
-      {Intrinsic::hexagon_S2_lsr_r_r, 27564}, // __builtin_HEXAGON_S2_lsr_r_r
-      {Intrinsic::hexagon_S2_lsr_r_r_acc, 27593}, // __builtin_HEXAGON_S2_lsr_r_r_acc
-      {Intrinsic::hexagon_S2_lsr_r_r_and, 27626}, // __builtin_HEXAGON_S2_lsr_r_r_and
-      {Intrinsic::hexagon_S2_lsr_r_r_nac, 27659}, // __builtin_HEXAGON_S2_lsr_r_r_nac
-      {Intrinsic::hexagon_S2_lsr_r_r_or, 27692}, // __builtin_HEXAGON_S2_lsr_r_r_or
-      {Intrinsic::hexagon_S2_lsr_r_vh, 27724}, // __builtin_HEXAGON_S2_lsr_r_vh
-      {Intrinsic::hexagon_S2_lsr_r_vw, 27754}, // __builtin_HEXAGON_S2_lsr_r_vw
-      {Intrinsic::hexagon_S2_packhl, 27784}, // __builtin_HEXAGON_S2_packhl
-      {Intrinsic::hexagon_S2_parityp, 27812}, // __builtin_HEXAGON_S2_parityp
-      {Intrinsic::hexagon_S2_setbit_i, 27841}, // __builtin_HEXAGON_S2_setbit_i
-      {Intrinsic::hexagon_S2_setbit_r, 27871}, // __builtin_HEXAGON_S2_setbit_r
-      {Intrinsic::hexagon_S2_shuffeb, 27901}, // __builtin_HEXAGON_S2_shuffeb
-      {Intrinsic::hexagon_S2_shuffeh, 27930}, // __builtin_HEXAGON_S2_shuffeh
-      {Intrinsic::hexagon_S2_shuffob, 27959}, // __builtin_HEXAGON_S2_shuffob
-      {Intrinsic::hexagon_S2_shuffoh, 27988}, // __builtin_HEXAGON_S2_shuffoh
-      {Intrinsic::hexagon_S2_storew_locked, 28114}, // __builtin_HEXAGON_S2_storew_locked
-      {Intrinsic::hexagon_S2_svsathb, 28149}, // __builtin_HEXAGON_S2_svsathb
-      {Intrinsic::hexagon_S2_svsathub, 28178}, // __builtin_HEXAGON_S2_svsathub
-      {Intrinsic::hexagon_S2_tableidxb_goodsyntax, 28208}, // __builtin_HEXAGON_S2_tableidxb_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxd_goodsyntax, 28250}, // __builtin_HEXAGON_S2_tableidxd_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxh_goodsyntax, 28292}, // __builtin_HEXAGON_S2_tableidxh_goodsyntax
-      {Intrinsic::hexagon_S2_tableidxw_goodsyntax, 28334}, // __builtin_HEXAGON_S2_tableidxw_goodsyntax
-      {Intrinsic::hexagon_S2_togglebit_i, 28376}, // __builtin_HEXAGON_S2_togglebit_i
-      {Intrinsic::hexagon_S2_togglebit_r, 28409}, // __builtin_HEXAGON_S2_togglebit_r
-      {Intrinsic::hexagon_S2_tstbit_i, 28442}, // __builtin_HEXAGON_S2_tstbit_i
-      {Intrinsic::hexagon_S2_tstbit_r, 28472}, // __builtin_HEXAGON_S2_tstbit_r
-      {Intrinsic::hexagon_S2_valignib, 28502}, // __builtin_HEXAGON_S2_valignib
-      {Intrinsic::hexagon_S2_valignrb, 28532}, // __builtin_HEXAGON_S2_valignrb
-      {Intrinsic::hexagon_S2_vcnegh, 28562}, // __builtin_HEXAGON_S2_vcnegh
-      {Intrinsic::hexagon_S2_vcrotate, 28590}, // __builtin_HEXAGON_S2_vcrotate
-      {Intrinsic::hexagon_S2_vrcnegh, 28620}, // __builtin_HEXAGON_S2_vrcnegh
-      {Intrinsic::hexagon_S2_vrndpackwh, 28649}, // __builtin_HEXAGON_S2_vrndpackwh
-      {Intrinsic::hexagon_S2_vrndpackwhs, 28681}, // __builtin_HEXAGON_S2_vrndpackwhs
-      {Intrinsic::hexagon_S2_vsathb, 28714}, // __builtin_HEXAGON_S2_vsathb
-      {Intrinsic::hexagon_S2_vsathb_nopack, 28742}, // __builtin_HEXAGON_S2_vsathb_nopack
-      {Intrinsic::hexagon_S2_vsathub, 28777}, // __builtin_HEXAGON_S2_vsathub
-      {Intrinsic::hexagon_S2_vsathub_nopack, 28806}, // __builtin_HEXAGON_S2_vsathub_nopack
-      {Intrinsic::hexagon_S2_vsatwh, 28842}, // __builtin_HEXAGON_S2_vsatwh
-      {Intrinsic::hexagon_S2_vsatwh_nopack, 28870}, // __builtin_HEXAGON_S2_vsatwh_nopack
-      {Intrinsic::hexagon_S2_vsatwuh, 28905}, // __builtin_HEXAGON_S2_vsatwuh
-      {Intrinsic::hexagon_S2_vsatwuh_nopack, 28934}, // __builtin_HEXAGON_S2_vsatwuh_nopack
-      {Intrinsic::hexagon_S2_vsplatrb, 28970}, // __builtin_HEXAGON_S2_vsplatrb
-      {Intrinsic::hexagon_S2_vsplatrh, 29000}, // __builtin_HEXAGON_S2_vsplatrh
-      {Intrinsic::hexagon_S2_vspliceib, 29030}, // __builtin_HEXAGON_S2_vspliceib
-      {Intrinsic::hexagon_S2_vsplicerb, 29061}, // __builtin_HEXAGON_S2_vsplicerb
-      {Intrinsic::hexagon_S2_vsxtbh, 29092}, // __builtin_HEXAGON_S2_vsxtbh
-      {Intrinsic::hexagon_S2_vsxthw, 29120}, // __builtin_HEXAGON_S2_vsxthw
-      {Intrinsic::hexagon_S2_vtrunehb, 29148}, // __builtin_HEXAGON_S2_vtrunehb
-      {Intrinsic::hexagon_S2_vtrunewh, 29178}, // __builtin_HEXAGON_S2_vtrunewh
-      {Intrinsic::hexagon_S2_vtrunohb, 29208}, // __builtin_HEXAGON_S2_vtrunohb
-      {Intrinsic::hexagon_S2_vtrunowh, 29238}, // __builtin_HEXAGON_S2_vtrunowh
-      {Intrinsic::hexagon_S2_vzxtbh, 29268}, // __builtin_HEXAGON_S2_vzxtbh
-      {Intrinsic::hexagon_S2_vzxthw, 29296}, // __builtin_HEXAGON_S2_vzxthw
-      {Intrinsic::hexagon_S4_addaddi, 29324}, // __builtin_HEXAGON_S4_addaddi
-      {Intrinsic::hexagon_S4_addi_asl_ri, 29353}, // __builtin_HEXAGON_S4_addi_asl_ri
-      {Intrinsic::hexagon_S4_addi_lsr_ri, 29386}, // __builtin_HEXAGON_S4_addi_lsr_ri
-      {Intrinsic::hexagon_S4_andi_asl_ri, 29419}, // __builtin_HEXAGON_S4_andi_asl_ri
-      {Intrinsic::hexagon_S4_andi_lsr_ri, 29452}, // __builtin_HEXAGON_S4_andi_lsr_ri
-      {Intrinsic::hexagon_S4_clbaddi, 29485}, // __builtin_HEXAGON_S4_clbaddi
-      {Intrinsic::hexagon_S4_clbpaddi, 29514}, // __builtin_HEXAGON_S4_clbpaddi
-      {Intrinsic::hexagon_S4_clbpnorm, 29544}, // __builtin_HEXAGON_S4_clbpnorm
-      {Intrinsic::hexagon_S4_extract, 29574}, // __builtin_HEXAGON_S4_extract
-      {Intrinsic::hexagon_S4_extract_rp, 29603}, // __builtin_HEXAGON_S4_extract_rp
-      {Intrinsic::hexagon_S4_extractp, 29635}, // __builtin_HEXAGON_S4_extractp
-      {Intrinsic::hexagon_S4_extractp_rp, 29665}, // __builtin_HEXAGON_S4_extractp_rp
-      {Intrinsic::hexagon_S4_lsli, 29698}, // __builtin_HEXAGON_S4_lsli
-      {Intrinsic::hexagon_S4_ntstbit_i, 29724}, // __builtin_HEXAGON_S4_ntstbit_i
-      {Intrinsic::hexagon_S4_ntstbit_r, 29755}, // __builtin_HEXAGON_S4_ntstbit_r
-      {Intrinsic::hexagon_S4_or_andi, 29786}, // __builtin_HEXAGON_S4_or_andi
-      {Intrinsic::hexagon_S4_or_andix, 29815}, // __builtin_HEXAGON_S4_or_andix
-      {Intrinsic::hexagon_S4_or_ori, 29845}, // __builtin_HEXAGON_S4_or_ori
-      {Intrinsic::hexagon_S4_ori_asl_ri, 29873}, // __builtin_HEXAGON_S4_ori_asl_ri
-      {Intrinsic::hexagon_S4_ori_lsr_ri, 29905}, // __builtin_HEXAGON_S4_ori_lsr_ri
-      {Intrinsic::hexagon_S4_parity, 29937}, // __builtin_HEXAGON_S4_parity
-      {Intrinsic::hexagon_S4_stored_locked, 29965}, // __builtin_HEXAGON_S4_stored_locked
-      {Intrinsic::hexagon_S4_subaddi, 30000}, // __builtin_HEXAGON_S4_subaddi
-      {Intrinsic::hexagon_S4_subi_asl_ri, 30029}, // __builtin_HEXAGON_S4_subi_asl_ri
-      {Intrinsic::hexagon_S4_subi_lsr_ri, 30062}, // __builtin_HEXAGON_S4_subi_lsr_ri
-      {Intrinsic::hexagon_S4_vrcrotate, 30095}, // __builtin_HEXAGON_S4_vrcrotate
-      {Intrinsic::hexagon_S4_vrcrotate_acc, 30126}, // __builtin_HEXAGON_S4_vrcrotate_acc
-      {Intrinsic::hexagon_S4_vxaddsubh, 30161}, // __builtin_HEXAGON_S4_vxaddsubh
-      {Intrinsic::hexagon_S4_vxaddsubhr, 30192}, // __builtin_HEXAGON_S4_vxaddsubhr
-      {Intrinsic::hexagon_S4_vxaddsubw, 30224}, // __builtin_HEXAGON_S4_vxaddsubw
-      {Intrinsic::hexagon_S4_vxsubaddh, 30255}, // __builtin_HEXAGON_S4_vxsubaddh
-      {Intrinsic::hexagon_S4_vxsubaddhr, 30286}, // __builtin_HEXAGON_S4_vxsubaddhr
-      {Intrinsic::hexagon_S4_vxsubaddw, 30318}, // __builtin_HEXAGON_S4_vxsubaddw
-      {Intrinsic::hexagon_S5_asrhub_rnd_sat_goodsyntax, 30349}, // __builtin_HEXAGON_S5_asrhub_rnd_sat_goodsyntax
-      {Intrinsic::hexagon_S5_asrhub_sat, 30396}, // __builtin_HEXAGON_S5_asrhub_sat
-      {Intrinsic::hexagon_S5_popcountp, 30428}, // __builtin_HEXAGON_S5_popcountp
-      {Intrinsic::hexagon_S5_vasrhrnd_goodsyntax, 30459}, // __builtin_HEXAGON_S5_vasrhrnd_goodsyntax
-      {Intrinsic::hexagon_S6_rol_i_p, 30500}, // __builtin_HEXAGON_S6_rol_i_p
-      {Intrinsic::hexagon_S6_rol_i_p_acc, 30529}, // __builtin_HEXAGON_S6_rol_i_p_acc
-      {Intrinsic::hexagon_S6_rol_i_p_and, 30562}, // __builtin_HEXAGON_S6_rol_i_p_and
-      {Intrinsic::hexagon_S6_rol_i_p_nac, 30595}, // __builtin_HEXAGON_S6_rol_i_p_nac
-      {Intrinsic::hexagon_S6_rol_i_p_or, 30628}, // __builtin_HEXAGON_S6_rol_i_p_or
-      {Intrinsic::hexagon_S6_rol_i_p_xacc, 30660}, // __builtin_HEXAGON_S6_rol_i_p_xacc
-      {Intrinsic::hexagon_S6_rol_i_r, 30694}, // __builtin_HEXAGON_S6_rol_i_r
-      {Intrinsic::hexagon_S6_rol_i_r_acc, 30723}, // __builtin_HEXAGON_S6_rol_i_r_acc
-      {Intrinsic::hexagon_S6_rol_i_r_and, 30756}, // __builtin_HEXAGON_S6_rol_i_r_and
-      {Intrinsic::hexagon_S6_rol_i_r_nac, 30789}, // __builtin_HEXAGON_S6_rol_i_r_nac
-      {Intrinsic::hexagon_S6_rol_i_r_or, 30822}, // __builtin_HEXAGON_S6_rol_i_r_or
-      {Intrinsic::hexagon_S6_rol_i_r_xacc, 30854}, // __builtin_HEXAGON_S6_rol_i_r_xacc
-      {Intrinsic::hexagon_S6_vsplatrbp, 30888}, // __builtin_HEXAGON_S6_vsplatrbp
-      {Intrinsic::hexagon_S6_vtrunehb_ppp, 30919}, // __builtin_HEXAGON_S6_vtrunehb_ppp
-      {Intrinsic::hexagon_S6_vtrunohb_ppp, 30953}, // __builtin_HEXAGON_S6_vtrunohb_ppp
-      {Intrinsic::hexagon_V6_extractw, 30987}, // __builtin_HEXAGON_V6_extractw
-      {Intrinsic::hexagon_V6_extractw_128B, 31017}, // __builtin_HEXAGON_V6_extractw_128B
-      {Intrinsic::hexagon_V6_hi, 31052}, // __builtin_HEXAGON_V6_hi
-      {Intrinsic::hexagon_V6_hi_128B, 31076}, // __builtin_HEXAGON_V6_hi_128B
-      {Intrinsic::hexagon_V6_lo, 31105}, // __builtin_HEXAGON_V6_lo
-      {Intrinsic::hexagon_V6_lo_128B, 31129}, // __builtin_HEXAGON_V6_lo_128B
-      {Intrinsic::hexagon_V6_lvsplatb, 31158}, // __builtin_HEXAGON_V6_lvsplatb
-      {Intrinsic::hexagon_V6_lvsplatb_128B, 31188}, // __builtin_HEXAGON_V6_lvsplatb_128B
-      {Intrinsic::hexagon_V6_lvsplath, 31223}, // __builtin_HEXAGON_V6_lvsplath
-      {Intrinsic::hexagon_V6_lvsplath_128B, 31253}, // __builtin_HEXAGON_V6_lvsplath_128B
-      {Intrinsic::hexagon_V6_lvsplatw, 31288}, // __builtin_HEXAGON_V6_lvsplatw
-      {Intrinsic::hexagon_V6_lvsplatw_128B, 31318}, // __builtin_HEXAGON_V6_lvsplatw_128B
-      {Intrinsic::hexagon_V6_pred_and, 31353}, // __builtin_HEXAGON_V6_pred_and
-      {Intrinsic::hexagon_V6_pred_and_128B, 31383}, // __builtin_HEXAGON_V6_pred_and_128B
-      {Intrinsic::hexagon_V6_pred_and_n, 31418}, // __builtin_HEXAGON_V6_pred_and_n
-      {Intrinsic::hexagon_V6_pred_and_n_128B, 31450}, // __builtin_HEXAGON_V6_pred_and_n_128B
-      {Intrinsic::hexagon_V6_pred_not, 31487}, // __builtin_HEXAGON_V6_pred_not
-      {Intrinsic::hexagon_V6_pred_not_128B, 31517}, // __builtin_HEXAGON_V6_pred_not_128B
-      {Intrinsic::hexagon_V6_pred_or, 31552}, // __builtin_HEXAGON_V6_pred_or
-      {Intrinsic::hexagon_V6_pred_or_128B, 31581}, // __builtin_HEXAGON_V6_pred_or_128B
-      {Intrinsic::hexagon_V6_pred_or_n, 31615}, // __builtin_HEXAGON_V6_pred_or_n
-      {Intrinsic::hexagon_V6_pred_or_n_128B, 31646}, // __builtin_HEXAGON_V6_pred_or_n_128B
-      {Intrinsic::hexagon_V6_pred_scalar2, 31682}, // __builtin_HEXAGON_V6_pred_scalar2
-      {Intrinsic::hexagon_V6_pred_scalar2_128B, 31716}, // __builtin_HEXAGON_V6_pred_scalar2_128B
-      {Intrinsic::hexagon_V6_pred_scalar2v2, 31755}, // __builtin_HEXAGON_V6_pred_scalar2v2
-      {Intrinsic::hexagon_V6_pred_scalar2v2_128B, 31791}, // __builtin_HEXAGON_V6_pred_scalar2v2_128B
-      {Intrinsic::hexagon_V6_pred_xor, 31832}, // __builtin_HEXAGON_V6_pred_xor
-      {Intrinsic::hexagon_V6_pred_xor_128B, 31862}, // __builtin_HEXAGON_V6_pred_xor_128B
-      {Intrinsic::hexagon_V6_shuffeqh, 31897}, // __builtin_HEXAGON_V6_shuffeqh
-      {Intrinsic::hexagon_V6_shuffeqh_128B, 31927}, // __builtin_HEXAGON_V6_shuffeqh_128B
-      {Intrinsic::hexagon_V6_shuffeqw, 31962}, // __builtin_HEXAGON_V6_shuffeqw
-      {Intrinsic::hexagon_V6_shuffeqw_128B, 31992}, // __builtin_HEXAGON_V6_shuffeqw_128B
-      {Intrinsic::hexagon_V6_vS32b_nqpred_ai, 32027}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nqpred_ai_128B, 32064}, // __builtin_HEXAGON_V6_vS32b_nqpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai, 32106}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nt_nqpred_ai_128B, 32146}, // __builtin_HEXAGON_V6_vS32b_nt_nqpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai, 32191}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai
-      {Intrinsic::hexagon_V6_vS32b_nt_qpred_ai_128B, 32230}, // __builtin_HEXAGON_V6_vS32b_nt_qpred_ai_128B
-      {Intrinsic::hexagon_V6_vS32b_qpred_ai, 32274}, // __builtin_HEXAGON_V6_vS32b_qpred_ai
-      {Intrinsic::hexagon_V6_vS32b_qpred_ai_128B, 32310}, // __builtin_HEXAGON_V6_vS32b_qpred_ai_128B
-      {Intrinsic::hexagon_V6_vabsb, 32351}, // __builtin_HEXAGON_V6_vabsb
-      {Intrinsic::hexagon_V6_vabsb_128B, 32378}, // __builtin_HEXAGON_V6_vabsb_128B
-      {Intrinsic::hexagon_V6_vabsb_sat, 32410}, // __builtin_HEXAGON_V6_vabsb_sat
-      {Intrinsic::hexagon_V6_vabsb_sat_128B, 32441}, // __builtin_HEXAGON_V6_vabsb_sat_128B
-      {Intrinsic::hexagon_V6_vabsdiffh, 32477}, // __builtin_HEXAGON_V6_vabsdiffh
-      {Intrinsic::hexagon_V6_vabsdiffh_128B, 32508}, // __builtin_HEXAGON_V6_vabsdiffh_128B
-      {Intrinsic::hexagon_V6_vabsdiffub, 32544}, // __builtin_HEXAGON_V6_vabsdiffub
-      {Intrinsic::hexagon_V6_vabsdiffub_128B, 32576}, // __builtin_HEXAGON_V6_vabsdiffub_128B
-      {Intrinsic::hexagon_V6_vabsdiffuh, 32613}, // __builtin_HEXAGON_V6_vabsdiffuh
-      {Intrinsic::hexagon_V6_vabsdiffuh_128B, 32645}, // __builtin_HEXAGON_V6_vabsdiffuh_128B
-      {Intrinsic::hexagon_V6_vabsdiffw, 32682}, // __builtin_HEXAGON_V6_vabsdiffw
-      {Intrinsic::hexagon_V6_vabsdiffw_128B, 32713}, // __builtin_HEXAGON_V6_vabsdiffw_128B
-      {Intrinsic::hexagon_V6_vabsh, 32749}, // __builtin_HEXAGON_V6_vabsh
-      {Intrinsic::hexagon_V6_vabsh_128B, 32776}, // __builtin_HEXAGON_V6_vabsh_128B
-      {Intrinsic::hexagon_V6_vabsh_sat, 32808}, // __builtin_HEXAGON_V6_vabsh_sat
-      {Intrinsic::hexagon_V6_vabsh_sat_128B, 32839}, // __builtin_HEXAGON_V6_vabsh_sat_128B
-      {Intrinsic::hexagon_V6_vabsw, 32875}, // __builtin_HEXAGON_V6_vabsw
-      {Intrinsic::hexagon_V6_vabsw_128B, 32902}, // __builtin_HEXAGON_V6_vabsw_128B
-      {Intrinsic::hexagon_V6_vabsw_sat, 32934}, // __builtin_HEXAGON_V6_vabsw_sat
-      {Intrinsic::hexagon_V6_vabsw_sat_128B, 32965}, // __builtin_HEXAGON_V6_vabsw_sat_128B
-      {Intrinsic::hexagon_V6_vaddb, 33001}, // __builtin_HEXAGON_V6_vaddb
-      {Intrinsic::hexagon_V6_vaddb_128B, 33028}, // __builtin_HEXAGON_V6_vaddb_128B
-      {Intrinsic::hexagon_V6_vaddb_dv, 33060}, // __builtin_HEXAGON_V6_vaddb_dv
-      {Intrinsic::hexagon_V6_vaddb_dv_128B, 33090}, // __builtin_HEXAGON_V6_vaddb_dv_128B
-      {Intrinsic::hexagon_V6_vaddbnq, 33125}, // __builtin_HEXAGON_V6_vaddbnq
-      {Intrinsic::hexagon_V6_vaddbnq_128B, 33154}, // __builtin_HEXAGON_V6_vaddbnq_128B
-      {Intrinsic::hexagon_V6_vaddbq, 33188}, // __builtin_HEXAGON_V6_vaddbq
-      {Intrinsic::hexagon_V6_vaddbq_128B, 33216}, // __builtin_HEXAGON_V6_vaddbq_128B
-      {Intrinsic::hexagon_V6_vaddbsat, 33249}, // __builtin_HEXAGON_V6_vaddbsat
-      {Intrinsic::hexagon_V6_vaddbsat_128B, 33279}, // __builtin_HEXAGON_V6_vaddbsat_128B
-      {Intrinsic::hexagon_V6_vaddbsat_dv, 33314}, // __builtin_HEXAGON_V6_vaddbsat_dv
-      {Intrinsic::hexagon_V6_vaddbsat_dv_128B, 33347}, // __builtin_HEXAGON_V6_vaddbsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddclbh, 33452}, // __builtin_HEXAGON_V6_vaddclbh
-      {Intrinsic::hexagon_V6_vaddclbh_128B, 33482}, // __builtin_HEXAGON_V6_vaddclbh_128B
-      {Intrinsic::hexagon_V6_vaddclbw, 33517}, // __builtin_HEXAGON_V6_vaddclbw
-      {Intrinsic::hexagon_V6_vaddclbw_128B, 33547}, // __builtin_HEXAGON_V6_vaddclbw_128B
-      {Intrinsic::hexagon_V6_vaddh, 33582}, // __builtin_HEXAGON_V6_vaddh
-      {Intrinsic::hexagon_V6_vaddh_128B, 33609}, // __builtin_HEXAGON_V6_vaddh_128B
-      {Intrinsic::hexagon_V6_vaddh_dv, 33641}, // __builtin_HEXAGON_V6_vaddh_dv
-      {Intrinsic::hexagon_V6_vaddh_dv_128B, 33671}, // __builtin_HEXAGON_V6_vaddh_dv_128B
-      {Intrinsic::hexagon_V6_vaddhnq, 33706}, // __builtin_HEXAGON_V6_vaddhnq
-      {Intrinsic::hexagon_V6_vaddhnq_128B, 33735}, // __builtin_HEXAGON_V6_vaddhnq_128B
-      {Intrinsic::hexagon_V6_vaddhq, 33769}, // __builtin_HEXAGON_V6_vaddhq
-      {Intrinsic::hexagon_V6_vaddhq_128B, 33797}, // __builtin_HEXAGON_V6_vaddhq_128B
-      {Intrinsic::hexagon_V6_vaddhsat, 33830}, // __builtin_HEXAGON_V6_vaddhsat
-      {Intrinsic::hexagon_V6_vaddhsat_128B, 33860}, // __builtin_HEXAGON_V6_vaddhsat_128B
-      {Intrinsic::hexagon_V6_vaddhsat_dv, 33895}, // __builtin_HEXAGON_V6_vaddhsat_dv
-      {Intrinsic::hexagon_V6_vaddhsat_dv_128B, 33928}, // __builtin_HEXAGON_V6_vaddhsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddhw, 33966}, // __builtin_HEXAGON_V6_vaddhw
-      {Intrinsic::hexagon_V6_vaddhw_128B, 33994}, // __builtin_HEXAGON_V6_vaddhw_128B
-      {Intrinsic::hexagon_V6_vaddhw_acc, 34027}, // __builtin_HEXAGON_V6_vaddhw_acc
-      {Intrinsic::hexagon_V6_vaddhw_acc_128B, 34059}, // __builtin_HEXAGON_V6_vaddhw_acc_128B
-      {Intrinsic::hexagon_V6_vaddubh, 34096}, // __builtin_HEXAGON_V6_vaddubh
-      {Intrinsic::hexagon_V6_vaddubh_128B, 34125}, // __builtin_HEXAGON_V6_vaddubh_128B
-      {Intrinsic::hexagon_V6_vaddubh_acc, 34159}, // __builtin_HEXAGON_V6_vaddubh_acc
-      {Intrinsic::hexagon_V6_vaddubh_acc_128B, 34192}, // __builtin_HEXAGON_V6_vaddubh_acc_128B
-      {Intrinsic::hexagon_V6_vaddubsat, 34230}, // __builtin_HEXAGON_V6_vaddubsat
-      {Intrinsic::hexagon_V6_vaddubsat_128B, 34261}, // __builtin_HEXAGON_V6_vaddubsat_128B
-      {Intrinsic::hexagon_V6_vaddubsat_dv, 34297}, // __builtin_HEXAGON_V6_vaddubsat_dv
-      {Intrinsic::hexagon_V6_vaddubsat_dv_128B, 34331}, // __builtin_HEXAGON_V6_vaddubsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddububb_sat, 34370}, // __builtin_HEXAGON_V6_vaddububb_sat
-      {Intrinsic::hexagon_V6_vaddububb_sat_128B, 34405}, // __builtin_HEXAGON_V6_vaddububb_sat_128B
-      {Intrinsic::hexagon_V6_vadduhsat, 34445}, // __builtin_HEXAGON_V6_vadduhsat
-      {Intrinsic::hexagon_V6_vadduhsat_128B, 34476}, // __builtin_HEXAGON_V6_vadduhsat_128B
-      {Intrinsic::hexagon_V6_vadduhsat_dv, 34512}, // __builtin_HEXAGON_V6_vadduhsat_dv
-      {Intrinsic::hexagon_V6_vadduhsat_dv_128B, 34546}, // __builtin_HEXAGON_V6_vadduhsat_dv_128B
-      {Intrinsic::hexagon_V6_vadduhw, 34585}, // __builtin_HEXAGON_V6_vadduhw
-      {Intrinsic::hexagon_V6_vadduhw_128B, 34614}, // __builtin_HEXAGON_V6_vadduhw_128B
-      {Intrinsic::hexagon_V6_vadduhw_acc, 34648}, // __builtin_HEXAGON_V6_vadduhw_acc
-      {Intrinsic::hexagon_V6_vadduhw_acc_128B, 34681}, // __builtin_HEXAGON_V6_vadduhw_acc_128B
-      {Intrinsic::hexagon_V6_vadduwsat, 34719}, // __builtin_HEXAGON_V6_vadduwsat
-      {Intrinsic::hexagon_V6_vadduwsat_128B, 34750}, // __builtin_HEXAGON_V6_vadduwsat_128B
-      {Intrinsic::hexagon_V6_vadduwsat_dv, 34786}, // __builtin_HEXAGON_V6_vadduwsat_dv
-      {Intrinsic::hexagon_V6_vadduwsat_dv_128B, 34820}, // __builtin_HEXAGON_V6_vadduwsat_dv_128B
-      {Intrinsic::hexagon_V6_vaddw, 34859}, // __builtin_HEXAGON_V6_vaddw
-      {Intrinsic::hexagon_V6_vaddw_128B, 34886}, // __builtin_HEXAGON_V6_vaddw_128B
-      {Intrinsic::hexagon_V6_vaddw_dv, 34918}, // __builtin_HEXAGON_V6_vaddw_dv
-      {Intrinsic::hexagon_V6_vaddw_dv_128B, 34948}, // __builtin_HEXAGON_V6_vaddw_dv_128B
-      {Intrinsic::hexagon_V6_vaddwnq, 34983}, // __builtin_HEXAGON_V6_vaddwnq
-      {Intrinsic::hexagon_V6_vaddwnq_128B, 35012}, // __builtin_HEXAGON_V6_vaddwnq_128B
-      {Intrinsic::hexagon_V6_vaddwq, 35046}, // __builtin_HEXAGON_V6_vaddwq
-      {Intrinsic::hexagon_V6_vaddwq_128B, 35074}, // __builtin_HEXAGON_V6_vaddwq_128B
-      {Intrinsic::hexagon_V6_vaddwsat, 35107}, // __builtin_HEXAGON_V6_vaddwsat
-      {Intrinsic::hexagon_V6_vaddwsat_128B, 35137}, // __builtin_HEXAGON_V6_vaddwsat_128B
-      {Intrinsic::hexagon_V6_vaddwsat_dv, 35172}, // __builtin_HEXAGON_V6_vaddwsat_dv
-      {Intrinsic::hexagon_V6_vaddwsat_dv_128B, 35205}, // __builtin_HEXAGON_V6_vaddwsat_dv_128B
-      {Intrinsic::hexagon_V6_valignb, 35243}, // __builtin_HEXAGON_V6_valignb
-      {Intrinsic::hexagon_V6_valignb_128B, 35272}, // __builtin_HEXAGON_V6_valignb_128B
-      {Intrinsic::hexagon_V6_valignbi, 35306}, // __builtin_HEXAGON_V6_valignbi
-      {Intrinsic::hexagon_V6_valignbi_128B, 35336}, // __builtin_HEXAGON_V6_valignbi_128B
-      {Intrinsic::hexagon_V6_vand, 35371}, // __builtin_HEXAGON_V6_vand
-      {Intrinsic::hexagon_V6_vand_128B, 35397}, // __builtin_HEXAGON_V6_vand_128B
-      {Intrinsic::hexagon_V6_vandnqrt, 35428}, // __builtin_HEXAGON_V6_vandnqrt
-      {Intrinsic::hexagon_V6_vandnqrt_128B, 35458}, // __builtin_HEXAGON_V6_vandnqrt_128B
-      {Intrinsic::hexagon_V6_vandnqrt_acc, 35493}, // __builtin_HEXAGON_V6_vandnqrt_acc
-      {Intrinsic::hexagon_V6_vandnqrt_acc_128B, 35527}, // __builtin_HEXAGON_V6_vandnqrt_acc_128B
-      {Intrinsic::hexagon_V6_vandqrt, 35566}, // __builtin_HEXAGON_V6_vandqrt
-      {Intrinsic::hexagon_V6_vandqrt_128B, 35595}, // __builtin_HEXAGON_V6_vandqrt_128B
-      {Intrinsic::hexagon_V6_vandqrt_acc, 35629}, // __builtin_HEXAGON_V6_vandqrt_acc
-      {Intrinsic::hexagon_V6_vandqrt_acc_128B, 35662}, // __builtin_HEXAGON_V6_vandqrt_acc_128B
-      {Intrinsic::hexagon_V6_vandvnqv, 35700}, // __builtin_HEXAGON_V6_vandvnqv
-      {Intrinsic::hexagon_V6_vandvnqv_128B, 35730}, // __builtin_HEXAGON_V6_vandvnqv_128B
-      {Intrinsic::hexagon_V6_vandvqv, 35765}, // __builtin_HEXAGON_V6_vandvqv
-      {Intrinsic::hexagon_V6_vandvqv_128B, 35794}, // __builtin_HEXAGON_V6_vandvqv_128B
-      {Intrinsic::hexagon_V6_vandvrt, 35828}, // __builtin_HEXAGON_V6_vandvrt
-      {Intrinsic::hexagon_V6_vandvrt_128B, 35857}, // __builtin_HEXAGON_V6_vandvrt_128B
-      {Intrinsic::hexagon_V6_vandvrt_acc, 35891}, // __builtin_HEXAGON_V6_vandvrt_acc
-      {Intrinsic::hexagon_V6_vandvrt_acc_128B, 35924}, // __builtin_HEXAGON_V6_vandvrt_acc_128B
-      {Intrinsic::hexagon_V6_vaslh, 35962}, // __builtin_HEXAGON_V6_vaslh
-      {Intrinsic::hexagon_V6_vaslh_128B, 35989}, // __builtin_HEXAGON_V6_vaslh_128B
-      {Intrinsic::hexagon_V6_vaslh_acc, 36021}, // __builtin_HEXAGON_V6_vaslh_acc
-      {Intrinsic::hexagon_V6_vaslh_acc_128B, 36052}, // __builtin_HEXAGON_V6_vaslh_acc_128B
-      {Intrinsic::hexagon_V6_vaslhv, 36088}, // __builtin_HEXAGON_V6_vaslhv
-      {Intrinsic::hexagon_V6_vaslhv_128B, 36116}, // __builtin_HEXAGON_V6_vaslhv_128B
-      {Intrinsic::hexagon_V6_vaslw, 36149}, // __builtin_HEXAGON_V6_vaslw
-      {Intrinsic::hexagon_V6_vaslw_128B, 36176}, // __builtin_HEXAGON_V6_vaslw_128B
-      {Intrinsic::hexagon_V6_vaslw_acc, 36208}, // __builtin_HEXAGON_V6_vaslw_acc
-      {Intrinsic::hexagon_V6_vaslw_acc_128B, 36239}, // __builtin_HEXAGON_V6_vaslw_acc_128B
-      {Intrinsic::hexagon_V6_vaslwv, 36275}, // __builtin_HEXAGON_V6_vaslwv
-      {Intrinsic::hexagon_V6_vaslwv_128B, 36303}, // __builtin_HEXAGON_V6_vaslwv_128B
-      {Intrinsic::hexagon_V6_vasrh, 36336}, // __builtin_HEXAGON_V6_vasrh
-      {Intrinsic::hexagon_V6_vasrh_128B, 36363}, // __builtin_HEXAGON_V6_vasrh_128B
-      {Intrinsic::hexagon_V6_vasrh_acc, 36395}, // __builtin_HEXAGON_V6_vasrh_acc
-      {Intrinsic::hexagon_V6_vasrh_acc_128B, 36426}, // __builtin_HEXAGON_V6_vasrh_acc_128B
-      {Intrinsic::hexagon_V6_vasrhbrndsat, 36462}, // __builtin_HEXAGON_V6_vasrhbrndsat
-      {Intrinsic::hexagon_V6_vasrhbrndsat_128B, 36496}, // __builtin_HEXAGON_V6_vasrhbrndsat_128B
-      {Intrinsic::hexagon_V6_vasrhbsat, 36535}, // __builtin_HEXAGON_V6_vasrhbsat
-      {Intrinsic::hexagon_V6_vasrhbsat_128B, 36566}, // __builtin_HEXAGON_V6_vasrhbsat_128B
-      {Intrinsic::hexagon_V6_vasrhubrndsat, 36602}, // __builtin_HEXAGON_V6_vasrhubrndsat
-      {Intrinsic::hexagon_V6_vasrhubrndsat_128B, 36637}, // __builtin_HEXAGON_V6_vasrhubrndsat_128B
-      {Intrinsic::hexagon_V6_vasrhubsat, 36677}, // __builtin_HEXAGON_V6_vasrhubsat
-      {Intrinsic::hexagon_V6_vasrhubsat_128B, 36709}, // __builtin_HEXAGON_V6_vasrhubsat_128B
-      {Intrinsic::hexagon_V6_vasrhv, 36746}, // __builtin_HEXAGON_V6_vasrhv
-      {Intrinsic::hexagon_V6_vasrhv_128B, 36774}, // __builtin_HEXAGON_V6_vasrhv_128B
-      {Intrinsic::hexagon_V6_vasruhubrndsat, 36807}, // __builtin_HEXAGON_V6_vasruhubrndsat
-      {Intrinsic::hexagon_V6_vasruhubrndsat_128B, 36843}, // __builtin_HEXAGON_V6_vasruhubrndsat_128B
-      {Intrinsic::hexagon_V6_vasruhubsat, 36884}, // __builtin_HEXAGON_V6_vasruhubsat
-      {Intrinsic::hexagon_V6_vasruhubsat_128B, 36917}, // __builtin_HEXAGON_V6_vasruhubsat_128B
-      {Intrinsic::hexagon_V6_vasruwuhrndsat, 36955}, // __builtin_HEXAGON_V6_vasruwuhrndsat
-      {Intrinsic::hexagon_V6_vasruwuhrndsat_128B, 36991}, // __builtin_HEXAGON_V6_vasruwuhrndsat_128B
-      {Intrinsic::hexagon_V6_vasruwuhsat, 37032}, // __builtin_HEXAGON_V6_vasruwuhsat
-      {Intrinsic::hexagon_V6_vasruwuhsat_128B, 37065}, // __builtin_HEXAGON_V6_vasruwuhsat_128B
-      {Intrinsic::hexagon_V6_vasrw, 37103}, // __builtin_HEXAGON_V6_vasrw
-      {Intrinsic::hexagon_V6_vasrw_128B, 37130}, // __builtin_HEXAGON_V6_vasrw_128B
-      {Intrinsic::hexagon_V6_vasrw_acc, 37162}, // __builtin_HEXAGON_V6_vasrw_acc
-      {Intrinsic::hexagon_V6_vasrw_acc_128B, 37193}, // __builtin_HEXAGON_V6_vasrw_acc_128B
-      {Intrinsic::hexagon_V6_vasrwh, 37229}, // __builtin_HEXAGON_V6_vasrwh
-      {Intrinsic::hexagon_V6_vasrwh_128B, 37257}, // __builtin_HEXAGON_V6_vasrwh_128B
-      {Intrinsic::hexagon_V6_vasrwhrndsat, 37290}, // __builtin_HEXAGON_V6_vasrwhrndsat
-      {Intrinsic::hexagon_V6_vasrwhrndsat_128B, 37324}, // __builtin_HEXAGON_V6_vasrwhrndsat_128B
-      {Intrinsic::hexagon_V6_vasrwhsat, 37363}, // __builtin_HEXAGON_V6_vasrwhsat
-      {Intrinsic::hexagon_V6_vasrwhsat_128B, 37394}, // __builtin_HEXAGON_V6_vasrwhsat_128B
-      {Intrinsic::hexagon_V6_vasrwuhrndsat, 37430}, // __builtin_HEXAGON_V6_vasrwuhrndsat
-      {Intrinsic::hexagon_V6_vasrwuhrndsat_128B, 37465}, // __builtin_HEXAGON_V6_vasrwuhrndsat_128B
-      {Intrinsic::hexagon_V6_vasrwuhsat, 37505}, // __builtin_HEXAGON_V6_vasrwuhsat
-      {Intrinsic::hexagon_V6_vasrwuhsat_128B, 37537}, // __builtin_HEXAGON_V6_vasrwuhsat_128B
-      {Intrinsic::hexagon_V6_vasrwv, 37574}, // __builtin_HEXAGON_V6_vasrwv
-      {Intrinsic::hexagon_V6_vasrwv_128B, 37602}, // __builtin_HEXAGON_V6_vasrwv_128B
-      {Intrinsic::hexagon_V6_vassign, 37635}, // __builtin_HEXAGON_V6_vassign
-      {Intrinsic::hexagon_V6_vassign_128B, 37664}, // __builtin_HEXAGON_V6_vassign_128B
-      {Intrinsic::hexagon_V6_vassignp, 37698}, // __builtin_HEXAGON_V6_vassignp
-      {Intrinsic::hexagon_V6_vassignp_128B, 37728}, // __builtin_HEXAGON_V6_vassignp_128B
-      {Intrinsic::hexagon_V6_vavgb, 37763}, // __builtin_HEXAGON_V6_vavgb
-      {Intrinsic::hexagon_V6_vavgb_128B, 37790}, // __builtin_HEXAGON_V6_vavgb_128B
-      {Intrinsic::hexagon_V6_vavgbrnd, 37822}, // __builtin_HEXAGON_V6_vavgbrnd
-      {Intrinsic::hexagon_V6_vavgbrnd_128B, 37852}, // __builtin_HEXAGON_V6_vavgbrnd_128B
-      {Intrinsic::hexagon_V6_vavgh, 37887}, // __builtin_HEXAGON_V6_vavgh
-      {Intrinsic::hexagon_V6_vavgh_128B, 37914}, // __builtin_HEXAGON_V6_vavgh_128B
-      {Intrinsic::hexagon_V6_vavghrnd, 37946}, // __builtin_HEXAGON_V6_vavghrnd
-      {Intrinsic::hexagon_V6_vavghrnd_128B, 37976}, // __builtin_HEXAGON_V6_vavghrnd_128B
-      {Intrinsic::hexagon_V6_vavgub, 38011}, // __builtin_HEXAGON_V6_vavgub
-      {Intrinsic::hexagon_V6_vavgub_128B, 38039}, // __builtin_HEXAGON_V6_vavgub_128B
-      {Intrinsic::hexagon_V6_vavgubrnd, 38072}, // __builtin_HEXAGON_V6_vavgubrnd
-      {Intrinsic::hexagon_V6_vavgubrnd_128B, 38103}, // __builtin_HEXAGON_V6_vavgubrnd_128B
-      {Intrinsic::hexagon_V6_vavguh, 38139}, // __builtin_HEXAGON_V6_vavguh
-      {Intrinsic::hexagon_V6_vavguh_128B, 38167}, // __builtin_HEXAGON_V6_vavguh_128B
-      {Intrinsic::hexagon_V6_vavguhrnd, 38200}, // __builtin_HEXAGON_V6_vavguhrnd
-      {Intrinsic::hexagon_V6_vavguhrnd_128B, 38231}, // __builtin_HEXAGON_V6_vavguhrnd_128B
-      {Intrinsic::hexagon_V6_vavguw, 38267}, // __builtin_HEXAGON_V6_vavguw
-      {Intrinsic::hexagon_V6_vavguw_128B, 38295}, // __builtin_HEXAGON_V6_vavguw_128B
-      {Intrinsic::hexagon_V6_vavguwrnd, 38328}, // __builtin_HEXAGON_V6_vavguwrnd
-      {Intrinsic::hexagon_V6_vavguwrnd_128B, 38359}, // __builtin_HEXAGON_V6_vavguwrnd_128B
-      {Intrinsic::hexagon_V6_vavgw, 38395}, // __builtin_HEXAGON_V6_vavgw
-      {Intrinsic::hexagon_V6_vavgw_128B, 38422}, // __builtin_HEXAGON_V6_vavgw_128B
-      {Intrinsic::hexagon_V6_vavgwrnd, 38454}, // __builtin_HEXAGON_V6_vavgwrnd
-      {Intrinsic::hexagon_V6_vavgwrnd_128B, 38484}, // __builtin_HEXAGON_V6_vavgwrnd_128B
-      {Intrinsic::hexagon_V6_vcl0h, 38519}, // __builtin_HEXAGON_V6_vcl0h
-      {Intrinsic::hexagon_V6_vcl0h_128B, 38546}, // __builtin_HEXAGON_V6_vcl0h_128B
-      {Intrinsic::hexagon_V6_vcl0w, 38578}, // __builtin_HEXAGON_V6_vcl0w
-      {Intrinsic::hexagon_V6_vcl0w_128B, 38605}, // __builtin_HEXAGON_V6_vcl0w_128B
-      {Intrinsic::hexagon_V6_vcombine, 38637}, // __builtin_HEXAGON_V6_vcombine
-      {Intrinsic::hexagon_V6_vcombine_128B, 38667}, // __builtin_HEXAGON_V6_vcombine_128B
-      {Intrinsic::hexagon_V6_vd0, 38702}, // __builtin_HEXAGON_V6_vd0
-      {Intrinsic::hexagon_V6_vd0_128B, 38727}, // __builtin_HEXAGON_V6_vd0_128B
-      {Intrinsic::hexagon_V6_vdd0, 38757}, // __builtin_HEXAGON_V6_vdd0
-      {Intrinsic::hexagon_V6_vdd0_128B, 38783}, // __builtin_HEXAGON_V6_vdd0_128B
-      {Intrinsic::hexagon_V6_vdealb, 38814}, // __builtin_HEXAGON_V6_vdealb
-      {Intrinsic::hexagon_V6_vdealb4w, 38875}, // __builtin_HEXAGON_V6_vdealb4w
-      {Intrinsic::hexagon_V6_vdealb4w_128B, 38905}, // __builtin_HEXAGON_V6_vdealb4w_128B
-      {Intrinsic::hexagon_V6_vdealb_128B, 38842}, // __builtin_HEXAGON_V6_vdealb_128B
-      {Intrinsic::hexagon_V6_vdealh, 38940}, // __builtin_HEXAGON_V6_vdealh
-      {Intrinsic::hexagon_V6_vdealh_128B, 38968}, // __builtin_HEXAGON_V6_vdealh_128B
-      {Intrinsic::hexagon_V6_vdealvdd, 39001}, // __builtin_HEXAGON_V6_vdealvdd
-      {Intrinsic::hexagon_V6_vdealvdd_128B, 39031}, // __builtin_HEXAGON_V6_vdealvdd_128B
-      {Intrinsic::hexagon_V6_vdelta, 39066}, // __builtin_HEXAGON_V6_vdelta
-      {Intrinsic::hexagon_V6_vdelta_128B, 39094}, // __builtin_HEXAGON_V6_vdelta_128B
-      {Intrinsic::hexagon_V6_vdmpybus, 39127}, // __builtin_HEXAGON_V6_vdmpybus
-      {Intrinsic::hexagon_V6_vdmpybus_128B, 39157}, // __builtin_HEXAGON_V6_vdmpybus_128B
-      {Intrinsic::hexagon_V6_vdmpybus_acc, 39192}, // __builtin_HEXAGON_V6_vdmpybus_acc
-      {Intrinsic::hexagon_V6_vdmpybus_acc_128B, 39226}, // __builtin_HEXAGON_V6_vdmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vdmpybus_dv, 39265}, // __builtin_HEXAGON_V6_vdmpybus_dv
-      {Intrinsic::hexagon_V6_vdmpybus_dv_128B, 39298}, // __builtin_HEXAGON_V6_vdmpybus_dv_128B
-      {Intrinsic::hexagon_V6_vdmpybus_dv_acc, 39336}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc
-      {Intrinsic::hexagon_V6_vdmpybus_dv_acc_128B, 39373}, // __builtin_HEXAGON_V6_vdmpybus_dv_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhb, 39415}, // __builtin_HEXAGON_V6_vdmpyhb
-      {Intrinsic::hexagon_V6_vdmpyhb_128B, 39444}, // __builtin_HEXAGON_V6_vdmpyhb_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_acc, 39478}, // __builtin_HEXAGON_V6_vdmpyhb_acc
-      {Intrinsic::hexagon_V6_vdmpyhb_acc_128B, 39511}, // __builtin_HEXAGON_V6_vdmpyhb_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_dv, 39549}, // __builtin_HEXAGON_V6_vdmpyhb_dv
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_128B, 39581}, // __builtin_HEXAGON_V6_vdmpyhb_dv_128B
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc, 39618}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc
-      {Intrinsic::hexagon_V6_vdmpyhb_dv_acc_128B, 39654}, // __builtin_HEXAGON_V6_vdmpyhb_dv_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhisat, 39695}, // __builtin_HEXAGON_V6_vdmpyhisat
-      {Intrinsic::hexagon_V6_vdmpyhisat_128B, 39727}, // __builtin_HEXAGON_V6_vdmpyhisat_128B
-      {Intrinsic::hexagon_V6_vdmpyhisat_acc, 39764}, // __builtin_HEXAGON_V6_vdmpyhisat_acc
-      {Intrinsic::hexagon_V6_vdmpyhisat_acc_128B, 39800}, // __builtin_HEXAGON_V6_vdmpyhisat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsat, 39841}, // __builtin_HEXAGON_V6_vdmpyhsat
-      {Intrinsic::hexagon_V6_vdmpyhsat_128B, 39872}, // __builtin_HEXAGON_V6_vdmpyhsat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsat_acc, 39908}, // __builtin_HEXAGON_V6_vdmpyhsat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsat_acc_128B, 39943}, // __builtin_HEXAGON_V6_vdmpyhsat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsuisat, 39983}, // __builtin_HEXAGON_V6_vdmpyhsuisat
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_128B, 40017}, // __builtin_HEXAGON_V6_vdmpyhsuisat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc, 40056}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsuisat_acc_128B, 40094}, // __builtin_HEXAGON_V6_vdmpyhsuisat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhsusat, 40137}, // __builtin_HEXAGON_V6_vdmpyhsusat
-      {Intrinsic::hexagon_V6_vdmpyhsusat_128B, 40170}, // __builtin_HEXAGON_V6_vdmpyhsusat_128B
-      {Intrinsic::hexagon_V6_vdmpyhsusat_acc, 40208}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc
-      {Intrinsic::hexagon_V6_vdmpyhsusat_acc_128B, 40245}, // __builtin_HEXAGON_V6_vdmpyhsusat_acc_128B
-      {Intrinsic::hexagon_V6_vdmpyhvsat, 40287}, // __builtin_HEXAGON_V6_vdmpyhvsat
-      {Intrinsic::hexagon_V6_vdmpyhvsat_128B, 40319}, // __builtin_HEXAGON_V6_vdmpyhvsat_128B
-      {Intrinsic::hexagon_V6_vdmpyhvsat_acc, 40356}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc
-      {Intrinsic::hexagon_V6_vdmpyhvsat_acc_128B, 40392}, // __builtin_HEXAGON_V6_vdmpyhvsat_acc_128B
-      {Intrinsic::hexagon_V6_vdsaduh, 40433}, // __builtin_HEXAGON_V6_vdsaduh
-      {Intrinsic::hexagon_V6_vdsaduh_128B, 40462}, // __builtin_HEXAGON_V6_vdsaduh_128B
-      {Intrinsic::hexagon_V6_vdsaduh_acc, 40496}, // __builtin_HEXAGON_V6_vdsaduh_acc
-      {Intrinsic::hexagon_V6_vdsaduh_acc_128B, 40529}, // __builtin_HEXAGON_V6_vdsaduh_acc_128B
-      {Intrinsic::hexagon_V6_veqb, 40567}, // __builtin_HEXAGON_V6_veqb
-      {Intrinsic::hexagon_V6_veqb_128B, 40593}, // __builtin_HEXAGON_V6_veqb_128B
-      {Intrinsic::hexagon_V6_veqb_and, 40624}, // __builtin_HEXAGON_V6_veqb_and
-      {Intrinsic::hexagon_V6_veqb_and_128B, 40654}, // __builtin_HEXAGON_V6_veqb_and_128B
-      {Intrinsic::hexagon_V6_veqb_or, 40689}, // __builtin_HEXAGON_V6_veqb_or
-      {Intrinsic::hexagon_V6_veqb_or_128B, 40718}, // __builtin_HEXAGON_V6_veqb_or_128B
-      {Intrinsic::hexagon_V6_veqb_xor, 40752}, // __builtin_HEXAGON_V6_veqb_xor
-      {Intrinsic::hexagon_V6_veqb_xor_128B, 40782}, // __builtin_HEXAGON_V6_veqb_xor_128B
-      {Intrinsic::hexagon_V6_veqh, 40817}, // __builtin_HEXAGON_V6_veqh
-      {Intrinsic::hexagon_V6_veqh_128B, 40843}, // __builtin_HEXAGON_V6_veqh_128B
-      {Intrinsic::hexagon_V6_veqh_and, 40874}, // __builtin_HEXAGON_V6_veqh_and
-      {Intrinsic::hexagon_V6_veqh_and_128B, 40904}, // __builtin_HEXAGON_V6_veqh_and_128B
-      {Intrinsic::hexagon_V6_veqh_or, 40939}, // __builtin_HEXAGON_V6_veqh_or
-      {Intrinsic::hexagon_V6_veqh_or_128B, 40968}, // __builtin_HEXAGON_V6_veqh_or_128B
-      {Intrinsic::hexagon_V6_veqh_xor, 41002}, // __builtin_HEXAGON_V6_veqh_xor
-      {Intrinsic::hexagon_V6_veqh_xor_128B, 41032}, // __builtin_HEXAGON_V6_veqh_xor_128B
-      {Intrinsic::hexagon_V6_veqw, 41067}, // __builtin_HEXAGON_V6_veqw
-      {Intrinsic::hexagon_V6_veqw_128B, 41093}, // __builtin_HEXAGON_V6_veqw_128B
-      {Intrinsic::hexagon_V6_veqw_and, 41124}, // __builtin_HEXAGON_V6_veqw_and
-      {Intrinsic::hexagon_V6_veqw_and_128B, 41154}, // __builtin_HEXAGON_V6_veqw_and_128B
-      {Intrinsic::hexagon_V6_veqw_or, 41189}, // __builtin_HEXAGON_V6_veqw_or
-      {Intrinsic::hexagon_V6_veqw_or_128B, 41218}, // __builtin_HEXAGON_V6_veqw_or_128B
-      {Intrinsic::hexagon_V6_veqw_xor, 41252}, // __builtin_HEXAGON_V6_veqw_xor
-      {Intrinsic::hexagon_V6_veqw_xor_128B, 41282}, // __builtin_HEXAGON_V6_veqw_xor_128B
-      {Intrinsic::hexagon_V6_vgathermh, 41317}, // __builtin_HEXAGON_V6_vgathermh
-      {Intrinsic::hexagon_V6_vgathermh_128B, 41348}, // __builtin_HEXAGON_V6_vgathermh_128B
-      {Intrinsic::hexagon_V6_vgathermhq, 41384}, // __builtin_HEXAGON_V6_vgathermhq
-      {Intrinsic::hexagon_V6_vgathermhq_128B, 41416}, // __builtin_HEXAGON_V6_vgathermhq_128B
-      {Intrinsic::hexagon_V6_vgathermhw, 41453}, // __builtin_HEXAGON_V6_vgathermhw
-      {Intrinsic::hexagon_V6_vgathermhw_128B, 41485}, // __builtin_HEXAGON_V6_vgathermhw_128B
-      {Intrinsic::hexagon_V6_vgathermhwq, 41522}, // __builtin_HEXAGON_V6_vgathermhwq
-      {Intrinsic::hexagon_V6_vgathermhwq_128B, 41555}, // __builtin_HEXAGON_V6_vgathermhwq_128B
-      {Intrinsic::hexagon_V6_vgathermw, 41593}, // __builtin_HEXAGON_V6_vgathermw
-      {Intrinsic::hexagon_V6_vgathermw_128B, 41624}, // __builtin_HEXAGON_V6_vgathermw_128B
-      {Intrinsic::hexagon_V6_vgathermwq, 41660}, // __builtin_HEXAGON_V6_vgathermwq
-      {Intrinsic::hexagon_V6_vgathermwq_128B, 41692}, // __builtin_HEXAGON_V6_vgathermwq_128B
-      {Intrinsic::hexagon_V6_vgtb, 41729}, // __builtin_HEXAGON_V6_vgtb
-      {Intrinsic::hexagon_V6_vgtb_128B, 41755}, // __builtin_HEXAGON_V6_vgtb_128B
-      {Intrinsic::hexagon_V6_vgtb_and, 41786}, // __builtin_HEXAGON_V6_vgtb_and
-      {Intrinsic::hexagon_V6_vgtb_and_128B, 41816}, // __builtin_HEXAGON_V6_vgtb_and_128B
-      {Intrinsic::hexagon_V6_vgtb_or, 41851}, // __builtin_HEXAGON_V6_vgtb_or
-      {Intrinsic::hexagon_V6_vgtb_or_128B, 41880}, // __builtin_HEXAGON_V6_vgtb_or_128B
-      {Intrinsic::hexagon_V6_vgtb_xor, 41914}, // __builtin_HEXAGON_V6_vgtb_xor
-      {Intrinsic::hexagon_V6_vgtb_xor_128B, 41944}, // __builtin_HEXAGON_V6_vgtb_xor_128B
-      {Intrinsic::hexagon_V6_vgth, 41979}, // __builtin_HEXAGON_V6_vgth
-      {Intrinsic::hexagon_V6_vgth_128B, 42005}, // __builtin_HEXAGON_V6_vgth_128B
-      {Intrinsic::hexagon_V6_vgth_and, 42036}, // __builtin_HEXAGON_V6_vgth_and
-      {Intrinsic::hexagon_V6_vgth_and_128B, 42066}, // __builtin_HEXAGON_V6_vgth_and_128B
-      {Intrinsic::hexagon_V6_vgth_or, 42101}, // __builtin_HEXAGON_V6_vgth_or
-      {Intrinsic::hexagon_V6_vgth_or_128B, 42130}, // __builtin_HEXAGON_V6_vgth_or_128B
-      {Intrinsic::hexagon_V6_vgth_xor, 42164}, // __builtin_HEXAGON_V6_vgth_xor
-      {Intrinsic::hexagon_V6_vgth_xor_128B, 42194}, // __builtin_HEXAGON_V6_vgth_xor_128B
-      {Intrinsic::hexagon_V6_vgtub, 42229}, // __builtin_HEXAGON_V6_vgtub
-      {Intrinsic::hexagon_V6_vgtub_128B, 42256}, // __builtin_HEXAGON_V6_vgtub_128B
-      {Intrinsic::hexagon_V6_vgtub_and, 42288}, // __builtin_HEXAGON_V6_vgtub_and
-      {Intrinsic::hexagon_V6_vgtub_and_128B, 42319}, // __builtin_HEXAGON_V6_vgtub_and_128B
-      {Intrinsic::hexagon_V6_vgtub_or, 42355}, // __builtin_HEXAGON_V6_vgtub_or
-      {Intrinsic::hexagon_V6_vgtub_or_128B, 42385}, // __builtin_HEXAGON_V6_vgtub_or_128B
-      {Intrinsic::hexagon_V6_vgtub_xor, 42420}, // __builtin_HEXAGON_V6_vgtub_xor
-      {Intrinsic::hexagon_V6_vgtub_xor_128B, 42451}, // __builtin_HEXAGON_V6_vgtub_xor_128B
-      {Intrinsic::hexagon_V6_vgtuh, 42487}, // __builtin_HEXAGON_V6_vgtuh
-      {Intrinsic::hexagon_V6_vgtuh_128B, 42514}, // __builtin_HEXAGON_V6_vgtuh_128B
-      {Intrinsic::hexagon_V6_vgtuh_and, 42546}, // __builtin_HEXAGON_V6_vgtuh_and
-      {Intrinsic::hexagon_V6_vgtuh_and_128B, 42577}, // __builtin_HEXAGON_V6_vgtuh_and_128B
-      {Intrinsic::hexagon_V6_vgtuh_or, 42613}, // __builtin_HEXAGON_V6_vgtuh_or
-      {Intrinsic::hexagon_V6_vgtuh_or_128B, 42643}, // __builtin_HEXAGON_V6_vgtuh_or_128B
-      {Intrinsic::hexagon_V6_vgtuh_xor, 42678}, // __builtin_HEXAGON_V6_vgtuh_xor
-      {Intrinsic::hexagon_V6_vgtuh_xor_128B, 42709}, // __builtin_HEXAGON_V6_vgtuh_xor_128B
-      {Intrinsic::hexagon_V6_vgtuw, 42745}, // __builtin_HEXAGON_V6_vgtuw
-      {Intrinsic::hexagon_V6_vgtuw_128B, 42772}, // __builtin_HEXAGON_V6_vgtuw_128B
-      {Intrinsic::hexagon_V6_vgtuw_and, 42804}, // __builtin_HEXAGON_V6_vgtuw_and
-      {Intrinsic::hexagon_V6_vgtuw_and_128B, 42835}, // __builtin_HEXAGON_V6_vgtuw_and_128B
-      {Intrinsic::hexagon_V6_vgtuw_or, 42871}, // __builtin_HEXAGON_V6_vgtuw_or
-      {Intrinsic::hexagon_V6_vgtuw_or_128B, 42901}, // __builtin_HEXAGON_V6_vgtuw_or_128B
-      {Intrinsic::hexagon_V6_vgtuw_xor, 42936}, // __builtin_HEXAGON_V6_vgtuw_xor
-      {Intrinsic::hexagon_V6_vgtuw_xor_128B, 42967}, // __builtin_HEXAGON_V6_vgtuw_xor_128B
-      {Intrinsic::hexagon_V6_vgtw, 43003}, // __builtin_HEXAGON_V6_vgtw
-      {Intrinsic::hexagon_V6_vgtw_128B, 43029}, // __builtin_HEXAGON_V6_vgtw_128B
-      {Intrinsic::hexagon_V6_vgtw_and, 43060}, // __builtin_HEXAGON_V6_vgtw_and
-      {Intrinsic::hexagon_V6_vgtw_and_128B, 43090}, // __builtin_HEXAGON_V6_vgtw_and_128B
-      {Intrinsic::hexagon_V6_vgtw_or, 43125}, // __builtin_HEXAGON_V6_vgtw_or
-      {Intrinsic::hexagon_V6_vgtw_or_128B, 43154}, // __builtin_HEXAGON_V6_vgtw_or_128B
-      {Intrinsic::hexagon_V6_vgtw_xor, 43188}, // __builtin_HEXAGON_V6_vgtw_xor
-      {Intrinsic::hexagon_V6_vgtw_xor_128B, 43218}, // __builtin_HEXAGON_V6_vgtw_xor_128B
-      {Intrinsic::hexagon_V6_vinsertwr, 43253}, // __builtin_HEXAGON_V6_vinsertwr
-      {Intrinsic::hexagon_V6_vinsertwr_128B, 43284}, // __builtin_HEXAGON_V6_vinsertwr_128B
-      {Intrinsic::hexagon_V6_vlalignb, 43320}, // __builtin_HEXAGON_V6_vlalignb
-      {Intrinsic::hexagon_V6_vlalignb_128B, 43350}, // __builtin_HEXAGON_V6_vlalignb_128B
-      {Intrinsic::hexagon_V6_vlalignbi, 43385}, // __builtin_HEXAGON_V6_vlalignbi
-      {Intrinsic::hexagon_V6_vlalignbi_128B, 43416}, // __builtin_HEXAGON_V6_vlalignbi_128B
-      {Intrinsic::hexagon_V6_vlsrb, 43452}, // __builtin_HEXAGON_V6_vlsrb
-      {Intrinsic::hexagon_V6_vlsrb_128B, 43479}, // __builtin_HEXAGON_V6_vlsrb_128B
-      {Intrinsic::hexagon_V6_vlsrh, 43511}, // __builtin_HEXAGON_V6_vlsrh
-      {Intrinsic::hexagon_V6_vlsrh_128B, 43538}, // __builtin_HEXAGON_V6_vlsrh_128B
-      {Intrinsic::hexagon_V6_vlsrhv, 43570}, // __builtin_HEXAGON_V6_vlsrhv
-      {Intrinsic::hexagon_V6_vlsrhv_128B, 43598}, // __builtin_HEXAGON_V6_vlsrhv_128B
-      {Intrinsic::hexagon_V6_vlsrw, 43631}, // __builtin_HEXAGON_V6_vlsrw
-      {Intrinsic::hexagon_V6_vlsrw_128B, 43658}, // __builtin_HEXAGON_V6_vlsrw_128B
-      {Intrinsic::hexagon_V6_vlsrwv, 43690}, // __builtin_HEXAGON_V6_vlsrwv
-      {Intrinsic::hexagon_V6_vlsrwv_128B, 43718}, // __builtin_HEXAGON_V6_vlsrwv_128B
-      {Intrinsic::hexagon_V6_vlut4, 43751}, // __builtin_HEXAGON_V6_vlut4
-      {Intrinsic::hexagon_V6_vlut4_128B, 43778}, // __builtin_HEXAGON_V6_vlut4_128B
-      {Intrinsic::hexagon_V6_vlutvvb, 43810}, // __builtin_HEXAGON_V6_vlutvvb
-      {Intrinsic::hexagon_V6_vlutvvb_128B, 43839}, // __builtin_HEXAGON_V6_vlutvvb_128B
-      {Intrinsic::hexagon_V6_vlutvvb_nm, 43873}, // __builtin_HEXAGON_V6_vlutvvb_nm
-      {Intrinsic::hexagon_V6_vlutvvb_nm_128B, 43905}, // __builtin_HEXAGON_V6_vlutvvb_nm_128B
-      {Intrinsic::hexagon_V6_vlutvvb_oracc, 43942}, // __builtin_HEXAGON_V6_vlutvvb_oracc
-      {Intrinsic::hexagon_V6_vlutvvb_oracc_128B, 43977}, // __builtin_HEXAGON_V6_vlutvvb_oracc_128B
-      {Intrinsic::hexagon_V6_vlutvvb_oracci, 44017}, // __builtin_HEXAGON_V6_vlutvvb_oracci
-      {Intrinsic::hexagon_V6_vlutvvb_oracci_128B, 44053}, // __builtin_HEXAGON_V6_vlutvvb_oracci_128B
-      {Intrinsic::hexagon_V6_vlutvvbi, 44094}, // __builtin_HEXAGON_V6_vlutvvbi
-      {Intrinsic::hexagon_V6_vlutvvbi_128B, 44124}, // __builtin_HEXAGON_V6_vlutvvbi_128B
-      {Intrinsic::hexagon_V6_vlutvwh, 44159}, // __builtin_HEXAGON_V6_vlutvwh
-      {Intrinsic::hexagon_V6_vlutvwh_128B, 44188}, // __builtin_HEXAGON_V6_vlutvwh_128B
-      {Intrinsic::hexagon_V6_vlutvwh_nm, 44222}, // __builtin_HEXAGON_V6_vlutvwh_nm
-      {Intrinsic::hexagon_V6_vlutvwh_nm_128B, 44254}, // __builtin_HEXAGON_V6_vlutvwh_nm_128B
-      {Intrinsic::hexagon_V6_vlutvwh_oracc, 44291}, // __builtin_HEXAGON_V6_vlutvwh_oracc
-      {Intrinsic::hexagon_V6_vlutvwh_oracc_128B, 44326}, // __builtin_HEXAGON_V6_vlutvwh_oracc_128B
-      {Intrinsic::hexagon_V6_vlutvwh_oracci, 44366}, // __builtin_HEXAGON_V6_vlutvwh_oracci
-      {Intrinsic::hexagon_V6_vlutvwh_oracci_128B, 44402}, // __builtin_HEXAGON_V6_vlutvwh_oracci_128B
-      {Intrinsic::hexagon_V6_vlutvwhi, 44443}, // __builtin_HEXAGON_V6_vlutvwhi
-      {Intrinsic::hexagon_V6_vlutvwhi_128B, 44473}, // __builtin_HEXAGON_V6_vlutvwhi_128B
-      {Intrinsic::hexagon_V6_vmaskedstorenq, 44508}, // __builtin_HEXAGON_V6_vmaskedstorenq
-      {Intrinsic::hexagon_V6_vmaskedstorenq_128B, 44544}, // __builtin_HEXAGON_V6_vmaskedstorenq_128B
-      {Intrinsic::hexagon_V6_vmaskedstorentnq, 44585}, // __builtin_HEXAGON_V6_vmaskedstorentnq
-      {Intrinsic::hexagon_V6_vmaskedstorentnq_128B, 44623}, // __builtin_HEXAGON_V6_vmaskedstorentnq_128B
-      {Intrinsic::hexagon_V6_vmaskedstorentq, 44666}, // __builtin_HEXAGON_V6_vmaskedstorentq
-      {Intrinsic::hexagon_V6_vmaskedstorentq_128B, 44703}, // __builtin_HEXAGON_V6_vmaskedstorentq_128B
-      {Intrinsic::hexagon_V6_vmaskedstoreq, 44745}, // __builtin_HEXAGON_V6_vmaskedstoreq
-      {Intrinsic::hexagon_V6_vmaskedstoreq_128B, 44780}, // __builtin_HEXAGON_V6_vmaskedstoreq_128B
-      {Intrinsic::hexagon_V6_vmaxb, 44820}, // __builtin_HEXAGON_V6_vmaxb
-      {Intrinsic::hexagon_V6_vmaxb_128B, 44847}, // __builtin_HEXAGON_V6_vmaxb_128B
-      {Intrinsic::hexagon_V6_vmaxh, 44879}, // __builtin_HEXAGON_V6_vmaxh
-      {Intrinsic::hexagon_V6_vmaxh_128B, 44906}, // __builtin_HEXAGON_V6_vmaxh_128B
-      {Intrinsic::hexagon_V6_vmaxub, 44938}, // __builtin_HEXAGON_V6_vmaxub
-      {Intrinsic::hexagon_V6_vmaxub_128B, 44966}, // __builtin_HEXAGON_V6_vmaxub_128B
-      {Intrinsic::hexagon_V6_vmaxuh, 44999}, // __builtin_HEXAGON_V6_vmaxuh
-      {Intrinsic::hexagon_V6_vmaxuh_128B, 45027}, // __builtin_HEXAGON_V6_vmaxuh_128B
-      {Intrinsic::hexagon_V6_vmaxw, 45060}, // __builtin_HEXAGON_V6_vmaxw
-      {Intrinsic::hexagon_V6_vmaxw_128B, 45087}, // __builtin_HEXAGON_V6_vmaxw_128B
-      {Intrinsic::hexagon_V6_vminb, 45119}, // __builtin_HEXAGON_V6_vminb
-      {Intrinsic::hexagon_V6_vminb_128B, 45146}, // __builtin_HEXAGON_V6_vminb_128B
-      {Intrinsic::hexagon_V6_vminh, 45178}, // __builtin_HEXAGON_V6_vminh
-      {Intrinsic::hexagon_V6_vminh_128B, 45205}, // __builtin_HEXAGON_V6_vminh_128B
-      {Intrinsic::hexagon_V6_vminub, 45237}, // __builtin_HEXAGON_V6_vminub
-      {Intrinsic::hexagon_V6_vminub_128B, 45265}, // __builtin_HEXAGON_V6_vminub_128B
-      {Intrinsic::hexagon_V6_vminuh, 45298}, // __builtin_HEXAGON_V6_vminuh
-      {Intrinsic::hexagon_V6_vminuh_128B, 45326}, // __builtin_HEXAGON_V6_vminuh_128B
-      {Intrinsic::hexagon_V6_vminw, 45359}, // __builtin_HEXAGON_V6_vminw
-      {Intrinsic::hexagon_V6_vminw_128B, 45386}, // __builtin_HEXAGON_V6_vminw_128B
-      {Intrinsic::hexagon_V6_vmpabus, 45418}, // __builtin_HEXAGON_V6_vmpabus
-      {Intrinsic::hexagon_V6_vmpabus_128B, 45447}, // __builtin_HEXAGON_V6_vmpabus_128B
-      {Intrinsic::hexagon_V6_vmpabus_acc, 45481}, // __builtin_HEXAGON_V6_vmpabus_acc
-      {Intrinsic::hexagon_V6_vmpabus_acc_128B, 45514}, // __builtin_HEXAGON_V6_vmpabus_acc_128B
-      {Intrinsic::hexagon_V6_vmpabusv, 45552}, // __builtin_HEXAGON_V6_vmpabusv
-      {Intrinsic::hexagon_V6_vmpabusv_128B, 45582}, // __builtin_HEXAGON_V6_vmpabusv_128B
-      {Intrinsic::hexagon_V6_vmpabuu, 45617}, // __builtin_HEXAGON_V6_vmpabuu
-      {Intrinsic::hexagon_V6_vmpabuu_128B, 45646}, // __builtin_HEXAGON_V6_vmpabuu_128B
-      {Intrinsic::hexagon_V6_vmpabuu_acc, 45680}, // __builtin_HEXAGON_V6_vmpabuu_acc
-      {Intrinsic::hexagon_V6_vmpabuu_acc_128B, 45713}, // __builtin_HEXAGON_V6_vmpabuu_acc_128B
-      {Intrinsic::hexagon_V6_vmpabuuv, 45751}, // __builtin_HEXAGON_V6_vmpabuuv
-      {Intrinsic::hexagon_V6_vmpabuuv_128B, 45781}, // __builtin_HEXAGON_V6_vmpabuuv_128B
-      {Intrinsic::hexagon_V6_vmpahb, 45816}, // __builtin_HEXAGON_V6_vmpahb
-      {Intrinsic::hexagon_V6_vmpahb_128B, 45844}, // __builtin_HEXAGON_V6_vmpahb_128B
-      {Intrinsic::hexagon_V6_vmpahb_acc, 45877}, // __builtin_HEXAGON_V6_vmpahb_acc
-      {Intrinsic::hexagon_V6_vmpahb_acc_128B, 45909}, // __builtin_HEXAGON_V6_vmpahb_acc_128B
-      {Intrinsic::hexagon_V6_vmpahhsat, 45946}, // __builtin_HEXAGON_V6_vmpahhsat
-      {Intrinsic::hexagon_V6_vmpahhsat_128B, 45977}, // __builtin_HEXAGON_V6_vmpahhsat_128B
-      {Intrinsic::hexagon_V6_vmpauhb, 46013}, // __builtin_HEXAGON_V6_vmpauhb
-      {Intrinsic::hexagon_V6_vmpauhb_128B, 46042}, // __builtin_HEXAGON_V6_vmpauhb_128B
-      {Intrinsic::hexagon_V6_vmpauhb_acc, 46076}, // __builtin_HEXAGON_V6_vmpauhb_acc
-      {Intrinsic::hexagon_V6_vmpauhb_acc_128B, 46109}, // __builtin_HEXAGON_V6_vmpauhb_acc_128B
-      {Intrinsic::hexagon_V6_vmpauhuhsat, 46147}, // __builtin_HEXAGON_V6_vmpauhuhsat
-      {Intrinsic::hexagon_V6_vmpauhuhsat_128B, 46180}, // __builtin_HEXAGON_V6_vmpauhuhsat_128B
-      {Intrinsic::hexagon_V6_vmpsuhuhsat, 46218}, // __builtin_HEXAGON_V6_vmpsuhuhsat
-      {Intrinsic::hexagon_V6_vmpsuhuhsat_128B, 46251}, // __builtin_HEXAGON_V6_vmpsuhuhsat_128B
-      {Intrinsic::hexagon_V6_vmpybus, 46289}, // __builtin_HEXAGON_V6_vmpybus
-      {Intrinsic::hexagon_V6_vmpybus_128B, 46318}, // __builtin_HEXAGON_V6_vmpybus_128B
-      {Intrinsic::hexagon_V6_vmpybus_acc, 46352}, // __builtin_HEXAGON_V6_vmpybus_acc
-      {Intrinsic::hexagon_V6_vmpybus_acc_128B, 46385}, // __builtin_HEXAGON_V6_vmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vmpybusv, 46423}, // __builtin_HEXAGON_V6_vmpybusv
-      {Intrinsic::hexagon_V6_vmpybusv_128B, 46453}, // __builtin_HEXAGON_V6_vmpybusv_128B
-      {Intrinsic::hexagon_V6_vmpybusv_acc, 46488}, // __builtin_HEXAGON_V6_vmpybusv_acc
-      {Intrinsic::hexagon_V6_vmpybusv_acc_128B, 46522}, // __builtin_HEXAGON_V6_vmpybusv_acc_128B
-      {Intrinsic::hexagon_V6_vmpybv, 46561}, // __builtin_HEXAGON_V6_vmpybv
-      {Intrinsic::hexagon_V6_vmpybv_128B, 46589}, // __builtin_HEXAGON_V6_vmpybv_128B
-      {Intrinsic::hexagon_V6_vmpybv_acc, 46622}, // __builtin_HEXAGON_V6_vmpybv_acc
-      {Intrinsic::hexagon_V6_vmpybv_acc_128B, 46654}, // __builtin_HEXAGON_V6_vmpybv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyewuh, 46691}, // __builtin_HEXAGON_V6_vmpyewuh
-      {Intrinsic::hexagon_V6_vmpyewuh_128B, 46721}, // __builtin_HEXAGON_V6_vmpyewuh_128B
-      {Intrinsic::hexagon_V6_vmpyewuh_64, 46756}, // __builtin_HEXAGON_V6_vmpyewuh_64
-      {Intrinsic::hexagon_V6_vmpyewuh_64_128B, 46789}, // __builtin_HEXAGON_V6_vmpyewuh_64_128B
-      {Intrinsic::hexagon_V6_vmpyh, 46827}, // __builtin_HEXAGON_V6_vmpyh
-      {Intrinsic::hexagon_V6_vmpyh_128B, 46854}, // __builtin_HEXAGON_V6_vmpyh_128B
-      {Intrinsic::hexagon_V6_vmpyh_acc, 46886}, // __builtin_HEXAGON_V6_vmpyh_acc
-      {Intrinsic::hexagon_V6_vmpyh_acc_128B, 46917}, // __builtin_HEXAGON_V6_vmpyh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhsat_acc, 46953}, // __builtin_HEXAGON_V6_vmpyhsat_acc
-      {Intrinsic::hexagon_V6_vmpyhsat_acc_128B, 46987}, // __builtin_HEXAGON_V6_vmpyhsat_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhsrs, 47026}, // __builtin_HEXAGON_V6_vmpyhsrs
-      {Intrinsic::hexagon_V6_vmpyhsrs_128B, 47056}, // __builtin_HEXAGON_V6_vmpyhsrs_128B
-      {Intrinsic::hexagon_V6_vmpyhss, 47091}, // __builtin_HEXAGON_V6_vmpyhss
-      {Intrinsic::hexagon_V6_vmpyhss_128B, 47120}, // __builtin_HEXAGON_V6_vmpyhss_128B
-      {Intrinsic::hexagon_V6_vmpyhus, 47154}, // __builtin_HEXAGON_V6_vmpyhus
-      {Intrinsic::hexagon_V6_vmpyhus_128B, 47183}, // __builtin_HEXAGON_V6_vmpyhus_128B
-      {Intrinsic::hexagon_V6_vmpyhus_acc, 47217}, // __builtin_HEXAGON_V6_vmpyhus_acc
-      {Intrinsic::hexagon_V6_vmpyhus_acc_128B, 47250}, // __builtin_HEXAGON_V6_vmpyhus_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhv, 47288}, // __builtin_HEXAGON_V6_vmpyhv
-      {Intrinsic::hexagon_V6_vmpyhv_128B, 47316}, // __builtin_HEXAGON_V6_vmpyhv_128B
-      {Intrinsic::hexagon_V6_vmpyhv_acc, 47349}, // __builtin_HEXAGON_V6_vmpyhv_acc
-      {Intrinsic::hexagon_V6_vmpyhv_acc_128B, 47381}, // __builtin_HEXAGON_V6_vmpyhv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyhvsrs, 47418}, // __builtin_HEXAGON_V6_vmpyhvsrs
-      {Intrinsic::hexagon_V6_vmpyhvsrs_128B, 47449}, // __builtin_HEXAGON_V6_vmpyhvsrs_128B
-      {Intrinsic::hexagon_V6_vmpyieoh, 47485}, // __builtin_HEXAGON_V6_vmpyieoh
-      {Intrinsic::hexagon_V6_vmpyieoh_128B, 47515}, // __builtin_HEXAGON_V6_vmpyieoh_128B
-      {Intrinsic::hexagon_V6_vmpyiewh_acc, 47550}, // __builtin_HEXAGON_V6_vmpyiewh_acc
-      {Intrinsic::hexagon_V6_vmpyiewh_acc_128B, 47584}, // __builtin_HEXAGON_V6_vmpyiewh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiewuh, 47623}, // __builtin_HEXAGON_V6_vmpyiewuh
-      {Intrinsic::hexagon_V6_vmpyiewuh_128B, 47654}, // __builtin_HEXAGON_V6_vmpyiewuh_128B
-      {Intrinsic::hexagon_V6_vmpyiewuh_acc, 47690}, // __builtin_HEXAGON_V6_vmpyiewuh_acc
-      {Intrinsic::hexagon_V6_vmpyiewuh_acc_128B, 47725}, // __builtin_HEXAGON_V6_vmpyiewuh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyih, 47765}, // __builtin_HEXAGON_V6_vmpyih
-      {Intrinsic::hexagon_V6_vmpyih_128B, 47793}, // __builtin_HEXAGON_V6_vmpyih_128B
-      {Intrinsic::hexagon_V6_vmpyih_acc, 47826}, // __builtin_HEXAGON_V6_vmpyih_acc
-      {Intrinsic::hexagon_V6_vmpyih_acc_128B, 47858}, // __builtin_HEXAGON_V6_vmpyih_acc_128B
-      {Intrinsic::hexagon_V6_vmpyihb, 47895}, // __builtin_HEXAGON_V6_vmpyihb
-      {Intrinsic::hexagon_V6_vmpyihb_128B, 47924}, // __builtin_HEXAGON_V6_vmpyihb_128B
-      {Intrinsic::hexagon_V6_vmpyihb_acc, 47958}, // __builtin_HEXAGON_V6_vmpyihb_acc
-      {Intrinsic::hexagon_V6_vmpyihb_acc_128B, 47991}, // __builtin_HEXAGON_V6_vmpyihb_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiowh, 48029}, // __builtin_HEXAGON_V6_vmpyiowh
-      {Intrinsic::hexagon_V6_vmpyiowh_128B, 48059}, // __builtin_HEXAGON_V6_vmpyiowh_128B
-      {Intrinsic::hexagon_V6_vmpyiwb, 48094}, // __builtin_HEXAGON_V6_vmpyiwb
-      {Intrinsic::hexagon_V6_vmpyiwb_128B, 48123}, // __builtin_HEXAGON_V6_vmpyiwb_128B
-      {Intrinsic::hexagon_V6_vmpyiwb_acc, 48157}, // __builtin_HEXAGON_V6_vmpyiwb_acc
-      {Intrinsic::hexagon_V6_vmpyiwb_acc_128B, 48190}, // __builtin_HEXAGON_V6_vmpyiwb_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiwh, 48228}, // __builtin_HEXAGON_V6_vmpyiwh
-      {Intrinsic::hexagon_V6_vmpyiwh_128B, 48257}, // __builtin_HEXAGON_V6_vmpyiwh_128B
-      {Intrinsic::hexagon_V6_vmpyiwh_acc, 48291}, // __builtin_HEXAGON_V6_vmpyiwh_acc
-      {Intrinsic::hexagon_V6_vmpyiwh_acc_128B, 48324}, // __builtin_HEXAGON_V6_vmpyiwh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyiwub, 48362}, // __builtin_HEXAGON_V6_vmpyiwub
-      {Intrinsic::hexagon_V6_vmpyiwub_128B, 48392}, // __builtin_HEXAGON_V6_vmpyiwub_128B
-      {Intrinsic::hexagon_V6_vmpyiwub_acc, 48427}, // __builtin_HEXAGON_V6_vmpyiwub_acc
-      {Intrinsic::hexagon_V6_vmpyiwub_acc_128B, 48461}, // __builtin_HEXAGON_V6_vmpyiwub_acc_128B
-      {Intrinsic::hexagon_V6_vmpyowh, 48500}, // __builtin_HEXAGON_V6_vmpyowh
-      {Intrinsic::hexagon_V6_vmpyowh_128B, 48529}, // __builtin_HEXAGON_V6_vmpyowh_128B
-      {Intrinsic::hexagon_V6_vmpyowh_64_acc, 48563}, // __builtin_HEXAGON_V6_vmpyowh_64_acc
-      {Intrinsic::hexagon_V6_vmpyowh_64_acc_128B, 48599}, // __builtin_HEXAGON_V6_vmpyowh_64_acc_128B
-      {Intrinsic::hexagon_V6_vmpyowh_rnd, 48640}, // __builtin_HEXAGON_V6_vmpyowh_rnd
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_128B, 48673}, // __builtin_HEXAGON_V6_vmpyowh_rnd_128B
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc, 48711}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc
-      {Intrinsic::hexagon_V6_vmpyowh_rnd_sacc_128B, 48749}, // __builtin_HEXAGON_V6_vmpyowh_rnd_sacc_128B
-      {Intrinsic::hexagon_V6_vmpyowh_sacc, 48792}, // __builtin_HEXAGON_V6_vmpyowh_sacc
-      {Intrinsic::hexagon_V6_vmpyowh_sacc_128B, 48826}, // __builtin_HEXAGON_V6_vmpyowh_sacc_128B
-      {Intrinsic::hexagon_V6_vmpyub, 48865}, // __builtin_HEXAGON_V6_vmpyub
-      {Intrinsic::hexagon_V6_vmpyub_128B, 48893}, // __builtin_HEXAGON_V6_vmpyub_128B
-      {Intrinsic::hexagon_V6_vmpyub_acc, 48926}, // __builtin_HEXAGON_V6_vmpyub_acc
-      {Intrinsic::hexagon_V6_vmpyub_acc_128B, 48958}, // __builtin_HEXAGON_V6_vmpyub_acc_128B
-      {Intrinsic::hexagon_V6_vmpyubv, 48995}, // __builtin_HEXAGON_V6_vmpyubv
-      {Intrinsic::hexagon_V6_vmpyubv_128B, 49024}, // __builtin_HEXAGON_V6_vmpyubv_128B
-      {Intrinsic::hexagon_V6_vmpyubv_acc, 49058}, // __builtin_HEXAGON_V6_vmpyubv_acc
-      {Intrinsic::hexagon_V6_vmpyubv_acc_128B, 49091}, // __builtin_HEXAGON_V6_vmpyubv_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuh, 49129}, // __builtin_HEXAGON_V6_vmpyuh
-      {Intrinsic::hexagon_V6_vmpyuh_128B, 49157}, // __builtin_HEXAGON_V6_vmpyuh_128B
-      {Intrinsic::hexagon_V6_vmpyuh_acc, 49190}, // __builtin_HEXAGON_V6_vmpyuh_acc
-      {Intrinsic::hexagon_V6_vmpyuh_acc_128B, 49222}, // __builtin_HEXAGON_V6_vmpyuh_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuhe, 49259}, // __builtin_HEXAGON_V6_vmpyuhe
-      {Intrinsic::hexagon_V6_vmpyuhe_128B, 49288}, // __builtin_HEXAGON_V6_vmpyuhe_128B
-      {Intrinsic::hexagon_V6_vmpyuhe_acc, 49322}, // __builtin_HEXAGON_V6_vmpyuhe_acc
-      {Intrinsic::hexagon_V6_vmpyuhe_acc_128B, 49355}, // __builtin_HEXAGON_V6_vmpyuhe_acc_128B
-      {Intrinsic::hexagon_V6_vmpyuhv, 49393}, // __builtin_HEXAGON_V6_vmpyuhv
-      {Intrinsic::hexagon_V6_vmpyuhv_128B, 49422}, // __builtin_HEXAGON_V6_vmpyuhv_128B
-      {Intrinsic::hexagon_V6_vmpyuhv_acc, 49456}, // __builtin_HEXAGON_V6_vmpyuhv_acc
-      {Intrinsic::hexagon_V6_vmpyuhv_acc_128B, 49489}, // __builtin_HEXAGON_V6_vmpyuhv_acc_128B
-      {Intrinsic::hexagon_V6_vmux, 49527}, // __builtin_HEXAGON_V6_vmux
-      {Intrinsic::hexagon_V6_vmux_128B, 49553}, // __builtin_HEXAGON_V6_vmux_128B
-      {Intrinsic::hexagon_V6_vnavgb, 49584}, // __builtin_HEXAGON_V6_vnavgb
-      {Intrinsic::hexagon_V6_vnavgb_128B, 49612}, // __builtin_HEXAGON_V6_vnavgb_128B
-      {Intrinsic::hexagon_V6_vnavgh, 49645}, // __builtin_HEXAGON_V6_vnavgh
-      {Intrinsic::hexagon_V6_vnavgh_128B, 49673}, // __builtin_HEXAGON_V6_vnavgh_128B
-      {Intrinsic::hexagon_V6_vnavgub, 49706}, // __builtin_HEXAGON_V6_vnavgub
-      {Intrinsic::hexagon_V6_vnavgub_128B, 49735}, // __builtin_HEXAGON_V6_vnavgub_128B
-      {Intrinsic::hexagon_V6_vnavgw, 49769}, // __builtin_HEXAGON_V6_vnavgw
-      {Intrinsic::hexagon_V6_vnavgw_128B, 49797}, // __builtin_HEXAGON_V6_vnavgw_128B
-      {Intrinsic::hexagon_V6_vnormamth, 49830}, // __builtin_HEXAGON_V6_vnormamth
-      {Intrinsic::hexagon_V6_vnormamth_128B, 49861}, // __builtin_HEXAGON_V6_vnormamth_128B
-      {Intrinsic::hexagon_V6_vnormamtw, 49897}, // __builtin_HEXAGON_V6_vnormamtw
-      {Intrinsic::hexagon_V6_vnormamtw_128B, 49928}, // __builtin_HEXAGON_V6_vnormamtw_128B
-      {Intrinsic::hexagon_V6_vnot, 49964}, // __builtin_HEXAGON_V6_vnot
-      {Intrinsic::hexagon_V6_vnot_128B, 49990}, // __builtin_HEXAGON_V6_vnot_128B
-      {Intrinsic::hexagon_V6_vor, 50021}, // __builtin_HEXAGON_V6_vor
-      {Intrinsic::hexagon_V6_vor_128B, 50046}, // __builtin_HEXAGON_V6_vor_128B
-      {Intrinsic::hexagon_V6_vpackeb, 50076}, // __builtin_HEXAGON_V6_vpackeb
-      {Intrinsic::hexagon_V6_vpackeb_128B, 50105}, // __builtin_HEXAGON_V6_vpackeb_128B
-      {Intrinsic::hexagon_V6_vpackeh, 50139}, // __builtin_HEXAGON_V6_vpackeh
-      {Intrinsic::hexagon_V6_vpackeh_128B, 50168}, // __builtin_HEXAGON_V6_vpackeh_128B
-      {Intrinsic::hexagon_V6_vpackhb_sat, 50202}, // __builtin_HEXAGON_V6_vpackhb_sat
-      {Intrinsic::hexagon_V6_vpackhb_sat_128B, 50235}, // __builtin_HEXAGON_V6_vpackhb_sat_128B
-      {Intrinsic::hexagon_V6_vpackhub_sat, 50273}, // __builtin_HEXAGON_V6_vpackhub_sat
-      {Intrinsic::hexagon_V6_vpackhub_sat_128B, 50307}, // __builtin_HEXAGON_V6_vpackhub_sat_128B
-      {Intrinsic::hexagon_V6_vpackob, 50346}, // __builtin_HEXAGON_V6_vpackob
-      {Intrinsic::hexagon_V6_vpackob_128B, 50375}, // __builtin_HEXAGON_V6_vpackob_128B
-      {Intrinsic::hexagon_V6_vpackoh, 50409}, // __builtin_HEXAGON_V6_vpackoh
-      {Intrinsic::hexagon_V6_vpackoh_128B, 50438}, // __builtin_HEXAGON_V6_vpackoh_128B
-      {Intrinsic::hexagon_V6_vpackwh_sat, 50472}, // __builtin_HEXAGON_V6_vpackwh_sat
-      {Intrinsic::hexagon_V6_vpackwh_sat_128B, 50505}, // __builtin_HEXAGON_V6_vpackwh_sat_128B
-      {Intrinsic::hexagon_V6_vpackwuh_sat, 50543}, // __builtin_HEXAGON_V6_vpackwuh_sat
-      {Intrinsic::hexagon_V6_vpackwuh_sat_128B, 50577}, // __builtin_HEXAGON_V6_vpackwuh_sat_128B
-      {Intrinsic::hexagon_V6_vpopcounth, 50616}, // __builtin_HEXAGON_V6_vpopcounth
-      {Intrinsic::hexagon_V6_vpopcounth_128B, 50648}, // __builtin_HEXAGON_V6_vpopcounth_128B
-      {Intrinsic::hexagon_V6_vprefixqb, 50685}, // __builtin_HEXAGON_V6_vprefixqb
-      {Intrinsic::hexagon_V6_vprefixqb_128B, 50716}, // __builtin_HEXAGON_V6_vprefixqb_128B
-      {Intrinsic::hexagon_V6_vprefixqh, 50752}, // __builtin_HEXAGON_V6_vprefixqh
-      {Intrinsic::hexagon_V6_vprefixqh_128B, 50783}, // __builtin_HEXAGON_V6_vprefixqh_128B
-      {Intrinsic::hexagon_V6_vprefixqw, 50819}, // __builtin_HEXAGON_V6_vprefixqw
-      {Intrinsic::hexagon_V6_vprefixqw_128B, 50850}, // __builtin_HEXAGON_V6_vprefixqw_128B
-      {Intrinsic::hexagon_V6_vrdelta, 50886}, // __builtin_HEXAGON_V6_vrdelta
-      {Intrinsic::hexagon_V6_vrdelta_128B, 50915}, // __builtin_HEXAGON_V6_vrdelta_128B
-      {Intrinsic::hexagon_V6_vrmpybub_rtt, 50949}, // __builtin_HEXAGON_V6_vrmpybub_rtt
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_128B, 50983}, // __builtin_HEXAGON_V6_vrmpybub_rtt_128B
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc, 51022}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc
-      {Intrinsic::hexagon_V6_vrmpybub_rtt_acc_128B, 51060}, // __builtin_HEXAGON_V6_vrmpybub_rtt_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybus, 51103}, // __builtin_HEXAGON_V6_vrmpybus
-      {Intrinsic::hexagon_V6_vrmpybus_128B, 51133}, // __builtin_HEXAGON_V6_vrmpybus_128B
-      {Intrinsic::hexagon_V6_vrmpybus_acc, 51168}, // __builtin_HEXAGON_V6_vrmpybus_acc
-      {Intrinsic::hexagon_V6_vrmpybus_acc_128B, 51202}, // __builtin_HEXAGON_V6_vrmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybusi, 51241}, // __builtin_HEXAGON_V6_vrmpybusi
-      {Intrinsic::hexagon_V6_vrmpybusi_128B, 51272}, // __builtin_HEXAGON_V6_vrmpybusi_128B
-      {Intrinsic::hexagon_V6_vrmpybusi_acc, 51308}, // __builtin_HEXAGON_V6_vrmpybusi_acc
-      {Intrinsic::hexagon_V6_vrmpybusi_acc_128B, 51343}, // __builtin_HEXAGON_V6_vrmpybusi_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybusv, 51383}, // __builtin_HEXAGON_V6_vrmpybusv
-      {Intrinsic::hexagon_V6_vrmpybusv_128B, 51414}, // __builtin_HEXAGON_V6_vrmpybusv_128B
-      {Intrinsic::hexagon_V6_vrmpybusv_acc, 51450}, // __builtin_HEXAGON_V6_vrmpybusv_acc
-      {Intrinsic::hexagon_V6_vrmpybusv_acc_128B, 51485}, // __builtin_HEXAGON_V6_vrmpybusv_acc_128B
-      {Intrinsic::hexagon_V6_vrmpybv, 51525}, // __builtin_HEXAGON_V6_vrmpybv
-      {Intrinsic::hexagon_V6_vrmpybv_128B, 51554}, // __builtin_HEXAGON_V6_vrmpybv_128B
-      {Intrinsic::hexagon_V6_vrmpybv_acc, 51588}, // __builtin_HEXAGON_V6_vrmpybv_acc
-      {Intrinsic::hexagon_V6_vrmpybv_acc_128B, 51621}, // __builtin_HEXAGON_V6_vrmpybv_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyub, 51659}, // __builtin_HEXAGON_V6_vrmpyub
-      {Intrinsic::hexagon_V6_vrmpyub_128B, 51688}, // __builtin_HEXAGON_V6_vrmpyub_128B
-      {Intrinsic::hexagon_V6_vrmpyub_acc, 51722}, // __builtin_HEXAGON_V6_vrmpyub_acc
-      {Intrinsic::hexagon_V6_vrmpyub_acc_128B, 51755}, // __builtin_HEXAGON_V6_vrmpyub_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyub_rtt, 51793}, // __builtin_HEXAGON_V6_vrmpyub_rtt
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_128B, 51826}, // __builtin_HEXAGON_V6_vrmpyub_rtt_128B
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc, 51864}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc
-      {Intrinsic::hexagon_V6_vrmpyub_rtt_acc_128B, 51901}, // __builtin_HEXAGON_V6_vrmpyub_rtt_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyubi, 51943}, // __builtin_HEXAGON_V6_vrmpyubi
-      {Intrinsic::hexagon_V6_vrmpyubi_128B, 51973}, // __builtin_HEXAGON_V6_vrmpyubi_128B
-      {Intrinsic::hexagon_V6_vrmpyubi_acc, 52008}, // __builtin_HEXAGON_V6_vrmpyubi_acc
-      {Intrinsic::hexagon_V6_vrmpyubi_acc_128B, 52042}, // __builtin_HEXAGON_V6_vrmpyubi_acc_128B
-      {Intrinsic::hexagon_V6_vrmpyubv, 52081}, // __builtin_HEXAGON_V6_vrmpyubv
-      {Intrinsic::hexagon_V6_vrmpyubv_128B, 52111}, // __builtin_HEXAGON_V6_vrmpyubv_128B
-      {Intrinsic::hexagon_V6_vrmpyubv_acc, 52146}, // __builtin_HEXAGON_V6_vrmpyubv_acc
-      {Intrinsic::hexagon_V6_vrmpyubv_acc_128B, 52180}, // __builtin_HEXAGON_V6_vrmpyubv_acc_128B
-      {Intrinsic::hexagon_V6_vror, 52219}, // __builtin_HEXAGON_V6_vror
-      {Intrinsic::hexagon_V6_vror_128B, 52245}, // __builtin_HEXAGON_V6_vror_128B
-      {Intrinsic::hexagon_V6_vroundhb, 52276}, // __builtin_HEXAGON_V6_vroundhb
-      {Intrinsic::hexagon_V6_vroundhb_128B, 52306}, // __builtin_HEXAGON_V6_vroundhb_128B
-      {Intrinsic::hexagon_V6_vroundhub, 52341}, // __builtin_HEXAGON_V6_vroundhub
-      {Intrinsic::hexagon_V6_vroundhub_128B, 52372}, // __builtin_HEXAGON_V6_vroundhub_128B
-      {Intrinsic::hexagon_V6_vrounduhub, 52408}, // __builtin_HEXAGON_V6_vrounduhub
-      {Intrinsic::hexagon_V6_vrounduhub_128B, 52440}, // __builtin_HEXAGON_V6_vrounduhub_128B
-      {Intrinsic::hexagon_V6_vrounduwuh, 52477}, // __builtin_HEXAGON_V6_vrounduwuh
-      {Intrinsic::hexagon_V6_vrounduwuh_128B, 52509}, // __builtin_HEXAGON_V6_vrounduwuh_128B
-      {Intrinsic::hexagon_V6_vroundwh, 52546}, // __builtin_HEXAGON_V6_vroundwh
-      {Intrinsic::hexagon_V6_vroundwh_128B, 52576}, // __builtin_HEXAGON_V6_vroundwh_128B
-      {Intrinsic::hexagon_V6_vroundwuh, 52611}, // __builtin_HEXAGON_V6_vroundwuh
-      {Intrinsic::hexagon_V6_vroundwuh_128B, 52642}, // __builtin_HEXAGON_V6_vroundwuh_128B
-      {Intrinsic::hexagon_V6_vrsadubi, 52678}, // __builtin_HEXAGON_V6_vrsadubi
-      {Intrinsic::hexagon_V6_vrsadubi_128B, 52708}, // __builtin_HEXAGON_V6_vrsadubi_128B
-      {Intrinsic::hexagon_V6_vrsadubi_acc, 52743}, // __builtin_HEXAGON_V6_vrsadubi_acc
-      {Intrinsic::hexagon_V6_vrsadubi_acc_128B, 52777}, // __builtin_HEXAGON_V6_vrsadubi_acc_128B
-      {Intrinsic::hexagon_V6_vsathub, 52816}, // __builtin_HEXAGON_V6_vsathub
-      {Intrinsic::hexagon_V6_vsathub_128B, 52845}, // __builtin_HEXAGON_V6_vsathub_128B
-      {Intrinsic::hexagon_V6_vsatuwuh, 52879}, // __builtin_HEXAGON_V6_vsatuwuh
-      {Intrinsic::hexagon_V6_vsatuwuh_128B, 52909}, // __builtin_HEXAGON_V6_vsatuwuh_128B
-      {Intrinsic::hexagon_V6_vsatwh, 52944}, // __builtin_HEXAGON_V6_vsatwh
-      {Intrinsic::hexagon_V6_vsatwh_128B, 52972}, // __builtin_HEXAGON_V6_vsatwh_128B
-      {Intrinsic::hexagon_V6_vsb, 53005}, // __builtin_HEXAGON_V6_vsb
-      {Intrinsic::hexagon_V6_vsb_128B, 53030}, // __builtin_HEXAGON_V6_vsb_128B
-      {Intrinsic::hexagon_V6_vscattermh, 53060}, // __builtin_HEXAGON_V6_vscattermh
-      {Intrinsic::hexagon_V6_vscattermh_128B, 53092}, // __builtin_HEXAGON_V6_vscattermh_128B
-      {Intrinsic::hexagon_V6_vscattermh_add, 53129}, // __builtin_HEXAGON_V6_vscattermh_add
-      {Intrinsic::hexagon_V6_vscattermh_add_128B, 53165}, // __builtin_HEXAGON_V6_vscattermh_add_128B
-      {Intrinsic::hexagon_V6_vscattermhq, 53206}, // __builtin_HEXAGON_V6_vscattermhq
-      {Intrinsic::hexagon_V6_vscattermhq_128B, 53239}, // __builtin_HEXAGON_V6_vscattermhq_128B
-      {Intrinsic::hexagon_V6_vscattermhw, 53277}, // __builtin_HEXAGON_V6_vscattermhw
-      {Intrinsic::hexagon_V6_vscattermhw_128B, 53310}, // __builtin_HEXAGON_V6_vscattermhw_128B
-      {Intrinsic::hexagon_V6_vscattermhw_add, 53348}, // __builtin_HEXAGON_V6_vscattermhw_add
-      {Intrinsic::hexagon_V6_vscattermhw_add_128B, 53385}, // __builtin_HEXAGON_V6_vscattermhw_add_128B
-      {Intrinsic::hexagon_V6_vscattermhwq, 53427}, // __builtin_HEXAGON_V6_vscattermhwq
-      {Intrinsic::hexagon_V6_vscattermhwq_128B, 53461}, // __builtin_HEXAGON_V6_vscattermhwq_128B
-      {Intrinsic::hexagon_V6_vscattermw, 53500}, // __builtin_HEXAGON_V6_vscattermw
-      {Intrinsic::hexagon_V6_vscattermw_128B, 53532}, // __builtin_HEXAGON_V6_vscattermw_128B
-      {Intrinsic::hexagon_V6_vscattermw_add, 53569}, // __builtin_HEXAGON_V6_vscattermw_add
-      {Intrinsic::hexagon_V6_vscattermw_add_128B, 53605}, // __builtin_HEXAGON_V6_vscattermw_add_128B
-      {Intrinsic::hexagon_V6_vscattermwq, 53646}, // __builtin_HEXAGON_V6_vscattermwq
-      {Intrinsic::hexagon_V6_vscattermwq_128B, 53679}, // __builtin_HEXAGON_V6_vscattermwq_128B
-      {Intrinsic::hexagon_V6_vsh, 53717}, // __builtin_HEXAGON_V6_vsh
-      {Intrinsic::hexagon_V6_vsh_128B, 53742}, // __builtin_HEXAGON_V6_vsh_128B
-      {Intrinsic::hexagon_V6_vshufeh, 53772}, // __builtin_HEXAGON_V6_vshufeh
-      {Intrinsic::hexagon_V6_vshufeh_128B, 53801}, // __builtin_HEXAGON_V6_vshufeh_128B
-      {Intrinsic::hexagon_V6_vshuffb, 53835}, // __builtin_HEXAGON_V6_vshuffb
-      {Intrinsic::hexagon_V6_vshuffb_128B, 53864}, // __builtin_HEXAGON_V6_vshuffb_128B
-      {Intrinsic::hexagon_V6_vshuffeb, 53898}, // __builtin_HEXAGON_V6_vshuffeb
-      {Intrinsic::hexagon_V6_vshuffeb_128B, 53928}, // __builtin_HEXAGON_V6_vshuffeb_128B
-      {Intrinsic::hexagon_V6_vshuffh, 53963}, // __builtin_HEXAGON_V6_vshuffh
-      {Intrinsic::hexagon_V6_vshuffh_128B, 53992}, // __builtin_HEXAGON_V6_vshuffh_128B
-      {Intrinsic::hexagon_V6_vshuffob, 54026}, // __builtin_HEXAGON_V6_vshuffob
-      {Intrinsic::hexagon_V6_vshuffob_128B, 54056}, // __builtin_HEXAGON_V6_vshuffob_128B
-      {Intrinsic::hexagon_V6_vshuffvdd, 54091}, // __builtin_HEXAGON_V6_vshuffvdd
-      {Intrinsic::hexagon_V6_vshuffvdd_128B, 54122}, // __builtin_HEXAGON_V6_vshuffvdd_128B
-      {Intrinsic::hexagon_V6_vshufoeb, 54158}, // __builtin_HEXAGON_V6_vshufoeb
-      {Intrinsic::hexagon_V6_vshufoeb_128B, 54188}, // __builtin_HEXAGON_V6_vshufoeb_128B
-      {Intrinsic::hexagon_V6_vshufoeh, 54223}, // __builtin_HEXAGON_V6_vshufoeh
-      {Intrinsic::hexagon_V6_vshufoeh_128B, 54253}, // __builtin_HEXAGON_V6_vshufoeh_128B
-      {Intrinsic::hexagon_V6_vshufoh, 54288}, // __builtin_HEXAGON_V6_vshufoh
-      {Intrinsic::hexagon_V6_vshufoh_128B, 54317}, // __builtin_HEXAGON_V6_vshufoh_128B
-      {Intrinsic::hexagon_V6_vsubb, 54351}, // __builtin_HEXAGON_V6_vsubb
-      {Intrinsic::hexagon_V6_vsubb_128B, 54378}, // __builtin_HEXAGON_V6_vsubb_128B
-      {Intrinsic::hexagon_V6_vsubb_dv, 54410}, // __builtin_HEXAGON_V6_vsubb_dv
-      {Intrinsic::hexagon_V6_vsubb_dv_128B, 54440}, // __builtin_HEXAGON_V6_vsubb_dv_128B
-      {Intrinsic::hexagon_V6_vsubbnq, 54475}, // __builtin_HEXAGON_V6_vsubbnq
-      {Intrinsic::hexagon_V6_vsubbnq_128B, 54504}, // __builtin_HEXAGON_V6_vsubbnq_128B
-      {Intrinsic::hexagon_V6_vsubbq, 54538}, // __builtin_HEXAGON_V6_vsubbq
-      {Intrinsic::hexagon_V6_vsubbq_128B, 54566}, // __builtin_HEXAGON_V6_vsubbq_128B
-      {Intrinsic::hexagon_V6_vsubbsat, 54599}, // __builtin_HEXAGON_V6_vsubbsat
-      {Intrinsic::hexagon_V6_vsubbsat_128B, 54629}, // __builtin_HEXAGON_V6_vsubbsat_128B
-      {Intrinsic::hexagon_V6_vsubbsat_dv, 54664}, // __builtin_HEXAGON_V6_vsubbsat_dv
-      {Intrinsic::hexagon_V6_vsubbsat_dv_128B, 54697}, // __builtin_HEXAGON_V6_vsubbsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubh, 54802}, // __builtin_HEXAGON_V6_vsubh
-      {Intrinsic::hexagon_V6_vsubh_128B, 54829}, // __builtin_HEXAGON_V6_vsubh_128B
-      {Intrinsic::hexagon_V6_vsubh_dv, 54861}, // __builtin_HEXAGON_V6_vsubh_dv
-      {Intrinsic::hexagon_V6_vsubh_dv_128B, 54891}, // __builtin_HEXAGON_V6_vsubh_dv_128B
-      {Intrinsic::hexagon_V6_vsubhnq, 54926}, // __builtin_HEXAGON_V6_vsubhnq
-      {Intrinsic::hexagon_V6_vsubhnq_128B, 54955}, // __builtin_HEXAGON_V6_vsubhnq_128B
-      {Intrinsic::hexagon_V6_vsubhq, 54989}, // __builtin_HEXAGON_V6_vsubhq
-      {Intrinsic::hexagon_V6_vsubhq_128B, 55017}, // __builtin_HEXAGON_V6_vsubhq_128B
-      {Intrinsic::hexagon_V6_vsubhsat, 55050}, // __builtin_HEXAGON_V6_vsubhsat
-      {Intrinsic::hexagon_V6_vsubhsat_128B, 55080}, // __builtin_HEXAGON_V6_vsubhsat_128B
-      {Intrinsic::hexagon_V6_vsubhsat_dv, 55115}, // __builtin_HEXAGON_V6_vsubhsat_dv
-      {Intrinsic::hexagon_V6_vsubhsat_dv_128B, 55148}, // __builtin_HEXAGON_V6_vsubhsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubhw, 55186}, // __builtin_HEXAGON_V6_vsubhw
-      {Intrinsic::hexagon_V6_vsubhw_128B, 55214}, // __builtin_HEXAGON_V6_vsubhw_128B
-      {Intrinsic::hexagon_V6_vsububh, 55247}, // __builtin_HEXAGON_V6_vsububh
-      {Intrinsic::hexagon_V6_vsububh_128B, 55276}, // __builtin_HEXAGON_V6_vsububh_128B
-      {Intrinsic::hexagon_V6_vsububsat, 55310}, // __builtin_HEXAGON_V6_vsububsat
-      {Intrinsic::hexagon_V6_vsububsat_128B, 55341}, // __builtin_HEXAGON_V6_vsububsat_128B
-      {Intrinsic::hexagon_V6_vsububsat_dv, 55377}, // __builtin_HEXAGON_V6_vsububsat_dv
-      {Intrinsic::hexagon_V6_vsububsat_dv_128B, 55411}, // __builtin_HEXAGON_V6_vsububsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubububb_sat, 55450}, // __builtin_HEXAGON_V6_vsubububb_sat
-      {Intrinsic::hexagon_V6_vsubububb_sat_128B, 55485}, // __builtin_HEXAGON_V6_vsubububb_sat_128B
-      {Intrinsic::hexagon_V6_vsubuhsat, 55525}, // __builtin_HEXAGON_V6_vsubuhsat
-      {Intrinsic::hexagon_V6_vsubuhsat_128B, 55556}, // __builtin_HEXAGON_V6_vsubuhsat_128B
-      {Intrinsic::hexagon_V6_vsubuhsat_dv, 55592}, // __builtin_HEXAGON_V6_vsubuhsat_dv
-      {Intrinsic::hexagon_V6_vsubuhsat_dv_128B, 55626}, // __builtin_HEXAGON_V6_vsubuhsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubuhw, 55665}, // __builtin_HEXAGON_V6_vsubuhw
-      {Intrinsic::hexagon_V6_vsubuhw_128B, 55694}, // __builtin_HEXAGON_V6_vsubuhw_128B
-      {Intrinsic::hexagon_V6_vsubuwsat, 55728}, // __builtin_HEXAGON_V6_vsubuwsat
-      {Intrinsic::hexagon_V6_vsubuwsat_128B, 55759}, // __builtin_HEXAGON_V6_vsubuwsat_128B
-      {Intrinsic::hexagon_V6_vsubuwsat_dv, 55795}, // __builtin_HEXAGON_V6_vsubuwsat_dv
-      {Intrinsic::hexagon_V6_vsubuwsat_dv_128B, 55829}, // __builtin_HEXAGON_V6_vsubuwsat_dv_128B
-      {Intrinsic::hexagon_V6_vsubw, 55868}, // __builtin_HEXAGON_V6_vsubw
-      {Intrinsic::hexagon_V6_vsubw_128B, 55895}, // __builtin_HEXAGON_V6_vsubw_128B
-      {Intrinsic::hexagon_V6_vsubw_dv, 55927}, // __builtin_HEXAGON_V6_vsubw_dv
-      {Intrinsic::hexagon_V6_vsubw_dv_128B, 55957}, // __builtin_HEXAGON_V6_vsubw_dv_128B
-      {Intrinsic::hexagon_V6_vsubwnq, 55992}, // __builtin_HEXAGON_V6_vsubwnq
-      {Intrinsic::hexagon_V6_vsubwnq_128B, 56021}, // __builtin_HEXAGON_V6_vsubwnq_128B
-      {Intrinsic::hexagon_V6_vsubwq, 56055}, // __builtin_HEXAGON_V6_vsubwq
-      {Intrinsic::hexagon_V6_vsubwq_128B, 56083}, // __builtin_HEXAGON_V6_vsubwq_128B
-      {Intrinsic::hexagon_V6_vsubwsat, 56116}, // __builtin_HEXAGON_V6_vsubwsat
-      {Intrinsic::hexagon_V6_vsubwsat_128B, 56146}, // __builtin_HEXAGON_V6_vsubwsat_128B
-      {Intrinsic::hexagon_V6_vsubwsat_dv, 56181}, // __builtin_HEXAGON_V6_vsubwsat_dv
-      {Intrinsic::hexagon_V6_vsubwsat_dv_128B, 56214}, // __builtin_HEXAGON_V6_vsubwsat_dv_128B
-      {Intrinsic::hexagon_V6_vswap, 56252}, // __builtin_HEXAGON_V6_vswap
-      {Intrinsic::hexagon_V6_vswap_128B, 56279}, // __builtin_HEXAGON_V6_vswap_128B
-      {Intrinsic::hexagon_V6_vtmpyb, 56311}, // __builtin_HEXAGON_V6_vtmpyb
-      {Intrinsic::hexagon_V6_vtmpyb_128B, 56339}, // __builtin_HEXAGON_V6_vtmpyb_128B
-      {Intrinsic::hexagon_V6_vtmpyb_acc, 56372}, // __builtin_HEXAGON_V6_vtmpyb_acc
-      {Intrinsic::hexagon_V6_vtmpyb_acc_128B, 56404}, // __builtin_HEXAGON_V6_vtmpyb_acc_128B
-      {Intrinsic::hexagon_V6_vtmpybus, 56441}, // __builtin_HEXAGON_V6_vtmpybus
-      {Intrinsic::hexagon_V6_vtmpybus_128B, 56471}, // __builtin_HEXAGON_V6_vtmpybus_128B
-      {Intrinsic::hexagon_V6_vtmpybus_acc, 56506}, // __builtin_HEXAGON_V6_vtmpybus_acc
-      {Intrinsic::hexagon_V6_vtmpybus_acc_128B, 56540}, // __builtin_HEXAGON_V6_vtmpybus_acc_128B
-      {Intrinsic::hexagon_V6_vtmpyhb, 56579}, // __builtin_HEXAGON_V6_vtmpyhb
-      {Intrinsic::hexagon_V6_vtmpyhb_128B, 56608}, // __builtin_HEXAGON_V6_vtmpyhb_128B
-      {Intrinsic::hexagon_V6_vtmpyhb_acc, 56642}, // __builtin_HEXAGON_V6_vtmpyhb_acc
-      {Intrinsic::hexagon_V6_vtmpyhb_acc_128B, 56675}, // __builtin_HEXAGON_V6_vtmpyhb_acc_128B
-      {Intrinsic::hexagon_V6_vunpackb, 56713}, // __builtin_HEXAGON_V6_vunpackb
-      {Intrinsic::hexagon_V6_vunpackb_128B, 56743}, // __builtin_HEXAGON_V6_vunpackb_128B
-      {Intrinsic::hexagon_V6_vunpackh, 56778}, // __builtin_HEXAGON_V6_vunpackh
-      {Intrinsic::hexagon_V6_vunpackh_128B, 56808}, // __builtin_HEXAGON_V6_vunpackh_128B
-      {Intrinsic::hexagon_V6_vunpackob, 56843}, // __builtin_HEXAGON_V6_vunpackob
-      {Intrinsic::hexagon_V6_vunpackob_128B, 56874}, // __builtin_HEXAGON_V6_vunpackob_128B
-      {Intrinsic::hexagon_V6_vunpackoh, 56910}, // __builtin_HEXAGON_V6_vunpackoh
-      {Intrinsic::hexagon_V6_vunpackoh_128B, 56941}, // __builtin_HEXAGON_V6_vunpackoh_128B
-      {Intrinsic::hexagon_V6_vunpackub, 56977}, // __builtin_HEXAGON_V6_vunpackub
-      {Intrinsic::hexagon_V6_vunpackub_128B, 57008}, // __builtin_HEXAGON_V6_vunpackub_128B
-      {Intrinsic::hexagon_V6_vunpackuh, 57044}, // __builtin_HEXAGON_V6_vunpackuh
-      {Intrinsic::hexagon_V6_vunpackuh_128B, 57075}, // __builtin_HEXAGON_V6_vunpackuh_128B
-      {Intrinsic::hexagon_V6_vxor, 57111}, // __builtin_HEXAGON_V6_vxor
-      {Intrinsic::hexagon_V6_vxor_128B, 57137}, // __builtin_HEXAGON_V6_vxor_128B
-      {Intrinsic::hexagon_V6_vzb, 57168}, // __builtin_HEXAGON_V6_vzb
-      {Intrinsic::hexagon_V6_vzb_128B, 57193}, // __builtin_HEXAGON_V6_vzb_128B
-      {Intrinsic::hexagon_V6_vzh, 57223}, // __builtin_HEXAGON_V6_vzh
-      {Intrinsic::hexagon_V6_vzh_128B, 57248}, // __builtin_HEXAGON_V6_vzh_128B
-      {Intrinsic::hexagon_Y2_dccleana, 57278}, // __builtin_HEXAGON_Y2_dccleana
-      {Intrinsic::hexagon_Y2_dccleaninva, 57308}, // __builtin_HEXAGON_Y2_dccleaninva
-      {Intrinsic::hexagon_Y2_dcinva, 57341}, // __builtin_HEXAGON_Y2_dcinva
-      {Intrinsic::hexagon_Y2_dczeroa, 57369}, // __builtin_HEXAGON_Y2_dczeroa
-      {Intrinsic::hexagon_Y4_l2fetch, 57398}, // __builtin_HEXAGON_Y4_l2fetch
-      {Intrinsic::hexagon_Y5_l2fetch, 57427}, // __builtin_HEXAGON_Y5_l2fetch
-      {Intrinsic::hexagon_prefetch, 57693}, // __builtin_HEXAGON_prefetch
-      {Intrinsic::hexagon_V6_vaddcarry, 33385}, // __builtin_HEXAGON_v6_vaddcarry
-      {Intrinsic::hexagon_V6_vaddcarry_128B, 33416}, // __builtin_HEXAGON_v6_vaddcarry_128B
-      {Intrinsic::hexagon_V6_vsubcarry, 54735}, // __builtin_HEXAGON_v6_vsubcarry
-      {Intrinsic::hexagon_V6_vsubcarry_128B, 54766}, // __builtin_HEXAGON_v6_vsubcarry_128B
-      {Intrinsic::hexagon_mm256i_vaddw, 57669}, // __builtin__mm256i_vaddw
-      {Intrinsic::hexagon_S2_storerb_pbr, 28017}, // __builtin_brev_stb
-      {Intrinsic::hexagon_S2_storerd_pbr, 28036}, // __builtin_brev_std
-      {Intrinsic::hexagon_S2_storerh_pbr, 28076}, // __builtin_brev_sth
-      {Intrinsic::hexagon_S2_storerf_pbr, 28055}, // __builtin_brev_sthhi
-      {Intrinsic::hexagon_S2_storeri_pbr, 28095}, // __builtin_brev_stw
-      {Intrinsic::hexagon_circ_ldb, 57456}, // __builtin_circ_ldb
-      {Intrinsic::hexagon_circ_ldd, 57475}, // __builtin_circ_ldd
-      {Intrinsic::hexagon_circ_ldh, 57494}, // __builtin_circ_ldh
-      {Intrinsic::hexagon_circ_ldub, 57513}, // __builtin_circ_ldub
-      {Intrinsic::hexagon_circ_lduh, 57533}, // __builtin_circ_lduh
-      {Intrinsic::hexagon_circ_ldw, 57553}, // __builtin_circ_ldw
-      {Intrinsic::hexagon_circ_stb, 57572}, // __builtin_circ_stb
-      {Intrinsic::hexagon_circ_std, 57591}, // __builtin_circ_std
-      {Intrinsic::hexagon_circ_sth, 57610}, // __builtin_circ_sth
-      {Intrinsic::hexagon_circ_sthhi, 57629}, // __builtin_circ_sthhi
-      {Intrinsic::hexagon_circ_stw, 57650}, // __builtin_circ_stw
-    };
-    auto I = std::lower_bound(std::begin(hexagonNames),
-                              std::end(hexagonNames),
-                              BuiltinNameStr);
-    if (I != std::end(hexagonNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "mips") {
-    static const BuiltinEntry mipsNames[] = {
-      {Intrinsic::mips_absq_s_ph, 57720}, // __builtin_mips_absq_s_ph
-      {Intrinsic::mips_absq_s_qb, 57745}, // __builtin_mips_absq_s_qb
-      {Intrinsic::mips_absq_s_w, 57770}, // __builtin_mips_absq_s_w
-      {Intrinsic::mips_addq_ph, 57882}, // __builtin_mips_addq_ph
-      {Intrinsic::mips_addq_s_ph, 57905}, // __builtin_mips_addq_s_ph
-      {Intrinsic::mips_addq_s_w, 57930}, // __builtin_mips_addq_s_w
-      {Intrinsic::mips_addqh_ph, 57954}, // __builtin_mips_addqh_ph
-      {Intrinsic::mips_addqh_r_ph, 57978}, // __builtin_mips_addqh_r_ph
-      {Intrinsic::mips_addqh_r_w, 58004}, // __builtin_mips_addqh_r_w
-      {Intrinsic::mips_addqh_w, 58029}, // __builtin_mips_addqh_w
-      {Intrinsic::mips_addsc, 58328}, // __builtin_mips_addsc
-      {Intrinsic::mips_addu_ph, 58349}, // __builtin_mips_addu_ph
-      {Intrinsic::mips_addu_qb, 58372}, // __builtin_mips_addu_qb
-      {Intrinsic::mips_addu_s_ph, 58395}, // __builtin_mips_addu_s_ph
-      {Intrinsic::mips_addu_s_qb, 58420}, // __builtin_mips_addu_s_qb
-      {Intrinsic::mips_adduh_qb, 58445}, // __builtin_mips_adduh_qb
-      {Intrinsic::mips_adduh_r_qb, 58469}, // __builtin_mips_adduh_r_qb
-      {Intrinsic::mips_addwc, 58667}, // __builtin_mips_addwc
-      {Intrinsic::mips_append, 58729}, // __builtin_mips_append
-      {Intrinsic::mips_balign, 59295}, // __builtin_mips_balign
-      {Intrinsic::mips_bitrev, 59849}, // __builtin_mips_bitrev
-      {Intrinsic::mips_bposge32, 60227}, // __builtin_mips_bposge32
-      {Intrinsic::mips_cmp_eq_ph, 61466}, // __builtin_mips_cmp_eq_ph
-      {Intrinsic::mips_cmp_le_ph, 61491}, // __builtin_mips_cmp_le_ph
-      {Intrinsic::mips_cmp_lt_ph, 61516}, // __builtin_mips_cmp_lt_ph
-      {Intrinsic::mips_cmpgdu_eq_qb, 61541}, // __builtin_mips_cmpgdu_eq_qb
-      {Intrinsic::mips_cmpgdu_le_qb, 61569}, // __builtin_mips_cmpgdu_le_qb
-      {Intrinsic::mips_cmpgdu_lt_qb, 61597}, // __builtin_mips_cmpgdu_lt_qb
-      {Intrinsic::mips_cmpgu_eq_qb, 61625}, // __builtin_mips_cmpgu_eq_qb
-      {Intrinsic::mips_cmpgu_le_qb, 61652}, // __builtin_mips_cmpgu_le_qb
-      {Intrinsic::mips_cmpgu_lt_qb, 61679}, // __builtin_mips_cmpgu_lt_qb
-      {Intrinsic::mips_cmpu_eq_qb, 61706}, // __builtin_mips_cmpu_eq_qb
-      {Intrinsic::mips_cmpu_le_qb, 61732}, // __builtin_mips_cmpu_le_qb
-      {Intrinsic::mips_cmpu_lt_qb, 61758}, // __builtin_mips_cmpu_lt_qb
-      {Intrinsic::mips_dlsa, 62165}, // __builtin_mips_dlsa
-      {Intrinsic::mips_dpa_w_ph, 62323}, // __builtin_mips_dpa_w_ph
-      {Intrinsic::mips_dpaq_s_w_ph, 62491}, // __builtin_mips_dpaq_s_w_ph
-      {Intrinsic::mips_dpaq_sa_l_w, 62518}, // __builtin_mips_dpaq_sa_l_w
-      {Intrinsic::mips_dpaqx_s_w_ph, 62545}, // __builtin_mips_dpaqx_s_w_ph
-      {Intrinsic::mips_dpaqx_sa_w_ph, 62573}, // __builtin_mips_dpaqx_sa_w_ph
-      {Intrinsic::mips_dpau_h_qbl, 62602}, // __builtin_mips_dpau_h_qbl
-      {Intrinsic::mips_dpau_h_qbr, 62628}, // __builtin_mips_dpau_h_qbr
-      {Intrinsic::mips_dpax_w_ph, 62654}, // __builtin_mips_dpax_w_ph
-      {Intrinsic::mips_dps_w_ph, 62679}, // __builtin_mips_dps_w_ph
-      {Intrinsic::mips_dpsq_s_w_ph, 62703}, // __builtin_mips_dpsq_s_w_ph
-      {Intrinsic::mips_dpsq_sa_l_w, 62730}, // __builtin_mips_dpsq_sa_l_w
-      {Intrinsic::mips_dpsqx_s_w_ph, 62757}, // __builtin_mips_dpsqx_s_w_ph
-      {Intrinsic::mips_dpsqx_sa_w_ph, 62785}, // __builtin_mips_dpsqx_sa_w_ph
-      {Intrinsic::mips_dpsu_h_qbl, 62814}, // __builtin_mips_dpsu_h_qbl
-      {Intrinsic::mips_dpsu_h_qbr, 62840}, // __builtin_mips_dpsu_h_qbr
-      {Intrinsic::mips_dpsx_w_ph, 63010}, // __builtin_mips_dpsx_w_ph
-      {Intrinsic::mips_extp, 63035}, // __builtin_mips_extp
-      {Intrinsic::mips_extpdp, 63055}, // __builtin_mips_extpdp
-      {Intrinsic::mips_extr_r_w, 63077}, // __builtin_mips_extr_r_w
-      {Intrinsic::mips_extr_rs_w, 63101}, // __builtin_mips_extr_rs_w
-      {Intrinsic::mips_extr_s_h, 63126}, // __builtin_mips_extr_s_h
-      {Intrinsic::mips_extr_w, 63150}, // __builtin_mips_extr_w
-      {Intrinsic::mips_insv, 66202}, // __builtin_mips_insv
-      {Intrinsic::mips_lbux, 66310}, // __builtin_mips_lbux
-      {Intrinsic::mips_lhx, 66486}, // __builtin_mips_lhx
-      {Intrinsic::mips_lsa, 66505}, // __builtin_mips_lsa
-      {Intrinsic::mips_lwx, 66524}, // __builtin_mips_lwx
-      {Intrinsic::mips_madd, 66543}, // __builtin_mips_madd
-      {Intrinsic::mips_maddu, 66657}, // __builtin_mips_maddu
-      {Intrinsic::mips_maq_s_w_phl, 66766}, // __builtin_mips_maq_s_w_phl
-      {Intrinsic::mips_maq_s_w_phr, 66793}, // __builtin_mips_maq_s_w_phr
-      {Intrinsic::mips_maq_sa_w_phl, 66820}, // __builtin_mips_maq_sa_w_phl
-      {Intrinsic::mips_maq_sa_w_phr, 66848}, // __builtin_mips_maq_sa_w_phr
-      {Intrinsic::mips_modsub, 67948}, // __builtin_mips_modsub
-      {Intrinsic::mips_msub, 67991}, // __builtin_mips_msub
-      {Intrinsic::mips_msubu, 68105}, // __builtin_mips_msubu
-      {Intrinsic::mips_mthlip, 68214}, // __builtin_mips_mthlip
-      {Intrinsic::mips_mul_ph, 68236}, // __builtin_mips_mul_ph
-      {Intrinsic::mips_mul_s_ph, 68302}, // __builtin_mips_mul_s_ph
-      {Intrinsic::mips_muleq_s_w_phl, 68326}, // __builtin_mips_muleq_s_w_phl
-      {Intrinsic::mips_muleq_s_w_phr, 68355}, // __builtin_mips_muleq_s_w_phr
-      {Intrinsic::mips_muleu_s_ph_qbl, 68384}, // __builtin_mips_muleu_s_ph_qbl
-      {Intrinsic::mips_muleu_s_ph_qbr, 68414}, // __builtin_mips_muleu_s_ph_qbr
-      {Intrinsic::mips_mulq_rs_ph, 68444}, // __builtin_mips_mulq_rs_ph
-      {Intrinsic::mips_mulq_rs_w, 68470}, // __builtin_mips_mulq_rs_w
-      {Intrinsic::mips_mulq_s_ph, 68495}, // __builtin_mips_mulq_s_ph
-      {Intrinsic::mips_mulq_s_w, 68520}, // __builtin_mips_mulq_s_w
-      {Intrinsic::mips_mulsa_w_ph, 68590}, // __builtin_mips_mulsa_w_ph
-      {Intrinsic::mips_mulsaq_s_w_ph, 68616}, // __builtin_mips_mulsaq_s_w_ph
-      {Intrinsic::mips_mult, 68645}, // __builtin_mips_mult
-      {Intrinsic::mips_multu, 68665}, // __builtin_mips_multu
-      {Intrinsic::mips_packrl_ph, 69018}, // __builtin_mips_packrl_ph
-      {Intrinsic::mips_pick_ph, 69303}, // __builtin_mips_pick_ph
-      {Intrinsic::mips_pick_qb, 69326}, // __builtin_mips_pick_qb
-      {Intrinsic::mips_preceq_w_phl, 69349}, // __builtin_mips_preceq_w_phl
-      {Intrinsic::mips_preceq_w_phr, 69377}, // __builtin_mips_preceq_w_phr
-      {Intrinsic::mips_precequ_ph_qbl, 69405}, // __builtin_mips_precequ_ph_qbl
-      {Intrinsic::mips_precequ_ph_qbla, 69435}, // __builtin_mips_precequ_ph_qbla
-      {Intrinsic::mips_precequ_ph_qbr, 69466}, // __builtin_mips_precequ_ph_qbr
-      {Intrinsic::mips_precequ_ph_qbra, 69496}, // __builtin_mips_precequ_ph_qbra
-      {Intrinsic::mips_preceu_ph_qbl, 69527}, // __builtin_mips_preceu_ph_qbl
-      {Intrinsic::mips_preceu_ph_qbla, 69556}, // __builtin_mips_preceu_ph_qbla
-      {Intrinsic::mips_preceu_ph_qbr, 69586}, // __builtin_mips_preceu_ph_qbr
-      {Intrinsic::mips_preceu_ph_qbra, 69615}, // __builtin_mips_preceu_ph_qbra
-      {Intrinsic::mips_precr_qb_ph, 69645}, // __builtin_mips_precr_qb_ph
-      {Intrinsic::mips_precr_sra_ph_w, 69672}, // __builtin_mips_precr_sra_ph_w
-      {Intrinsic::mips_precr_sra_r_ph_w, 69702}, // __builtin_mips_precr_sra_r_ph_w
-      {Intrinsic::mips_precrq_ph_w, 69734}, // __builtin_mips_precrq_ph_w
-      {Intrinsic::mips_precrq_qb_ph, 69761}, // __builtin_mips_precrq_qb_ph
-      {Intrinsic::mips_precrq_rs_ph_w, 69789}, // __builtin_mips_precrq_rs_ph_w
-      {Intrinsic::mips_precrqu_s_qb_ph, 69819}, // __builtin_mips_precrqu_s_qb_ph
-      {Intrinsic::mips_prepend, 69850}, // __builtin_mips_prepend
-      {Intrinsic::mips_raddu_w_qb, 69873}, // __builtin_mips_raddu_w_qb
-      {Intrinsic::mips_rddsp, 69899}, // __builtin_mips_rddsp
-      {Intrinsic::mips_repl_ph, 69920}, // __builtin_mips_repl_ph
-      {Intrinsic::mips_repl_qb, 69943}, // __builtin_mips_repl_qb
-      {Intrinsic::mips_shilo, 70202}, // __builtin_mips_shilo
-      {Intrinsic::mips_shll_ph, 70223}, // __builtin_mips_shll_ph
-      {Intrinsic::mips_shll_qb, 70246}, // __builtin_mips_shll_qb
-      {Intrinsic::mips_shll_s_ph, 70269}, // __builtin_mips_shll_s_ph
-      {Intrinsic::mips_shll_s_w, 70294}, // __builtin_mips_shll_s_w
-      {Intrinsic::mips_shra_ph, 70318}, // __builtin_mips_shra_ph
-      {Intrinsic::mips_shra_qb, 70341}, // __builtin_mips_shra_qb
-      {Intrinsic::mips_shra_r_ph, 70364}, // __builtin_mips_shra_r_ph
-      {Intrinsic::mips_shra_r_qb, 70389}, // __builtin_mips_shra_r_qb
-      {Intrinsic::mips_shra_r_w, 70414}, // __builtin_mips_shra_r_w
-      {Intrinsic::mips_shrl_ph, 70438}, // __builtin_mips_shrl_ph
-      {Intrinsic::mips_shrl_qb, 70461}, // __builtin_mips_shrl_qb
-      {Intrinsic::mips_subq_ph, 71740}, // __builtin_mips_subq_ph
-      {Intrinsic::mips_subq_s_ph, 71763}, // __builtin_mips_subq_s_ph
-      {Intrinsic::mips_subq_s_w, 71788}, // __builtin_mips_subq_s_w
-      {Intrinsic::mips_subqh_ph, 71812}, // __builtin_mips_subqh_ph
-      {Intrinsic::mips_subqh_r_ph, 71836}, // __builtin_mips_subqh_r_ph
-      {Intrinsic::mips_subqh_r_w, 71862}, // __builtin_mips_subqh_r_w
-      {Intrinsic::mips_subqh_w, 71887}, // __builtin_mips_subqh_w
-      {Intrinsic::mips_subu_ph, 72294}, // __builtin_mips_subu_ph
-      {Intrinsic::mips_subu_qb, 72317}, // __builtin_mips_subu_qb
-      {Intrinsic::mips_subu_s_ph, 72340}, // __builtin_mips_subu_s_ph
-      {Intrinsic::mips_subu_s_qb, 72365}, // __builtin_mips_subu_s_qb
-      {Intrinsic::mips_subuh_qb, 72390}, // __builtin_mips_subuh_qb
-      {Intrinsic::mips_subuh_r_qb, 72414}, // __builtin_mips_subuh_r_qb
-      {Intrinsic::mips_wrdsp, 72696}, // __builtin_mips_wrdsp
-      {Intrinsic::mips_add_a_b, 57794}, // __builtin_msa_add_a_b
-      {Intrinsic::mips_add_a_d, 57816}, // __builtin_msa_add_a_d
-      {Intrinsic::mips_add_a_h, 57838}, // __builtin_msa_add_a_h
-      {Intrinsic::mips_add_a_w, 57860}, // __builtin_msa_add_a_w
-      {Intrinsic::mips_adds_a_b, 58052}, // __builtin_msa_adds_a_b
-      {Intrinsic::mips_adds_a_d, 58075}, // __builtin_msa_adds_a_d
-      {Intrinsic::mips_adds_a_h, 58098}, // __builtin_msa_adds_a_h
-      {Intrinsic::mips_adds_a_w, 58121}, // __builtin_msa_adds_a_w
-      {Intrinsic::mips_adds_s_b, 58144}, // __builtin_msa_adds_s_b
-      {Intrinsic::mips_adds_s_d, 58167}, // __builtin_msa_adds_s_d
-      {Intrinsic::mips_adds_s_h, 58190}, // __builtin_msa_adds_s_h
-      {Intrinsic::mips_adds_s_w, 58213}, // __builtin_msa_adds_s_w
-      {Intrinsic::mips_adds_u_b, 58236}, // __builtin_msa_adds_u_b
-      {Intrinsic::mips_adds_u_d, 58259}, // __builtin_msa_adds_u_d
-      {Intrinsic::mips_adds_u_h, 58282}, // __builtin_msa_adds_u_h
-      {Intrinsic::mips_adds_u_w, 58305}, // __builtin_msa_adds_u_w
-      {Intrinsic::mips_addv_b, 58495}, // __builtin_msa_addv_b
-      {Intrinsic::mips_addv_d, 58516}, // __builtin_msa_addv_d
-      {Intrinsic::mips_addv_h, 58537}, // __builtin_msa_addv_h
-      {Intrinsic::mips_addv_w, 58558}, // __builtin_msa_addv_w
-      {Intrinsic::mips_addvi_b, 58579}, // __builtin_msa_addvi_b
-      {Intrinsic::mips_addvi_d, 58601}, // __builtin_msa_addvi_d
-      {Intrinsic::mips_addvi_h, 58623}, // __builtin_msa_addvi_h
-      {Intrinsic::mips_addvi_w, 58645}, // __builtin_msa_addvi_w
-      {Intrinsic::mips_and_v, 58688}, // __builtin_msa_and_v
-      {Intrinsic::mips_andi_b, 58708}, // __builtin_msa_andi_b
-      {Intrinsic::mips_asub_s_b, 58751}, // __builtin_msa_asub_s_b
-      {Intrinsic::mips_asub_s_d, 58774}, // __builtin_msa_asub_s_d
-      {Intrinsic::mips_asub_s_h, 58797}, // __builtin_msa_asub_s_h
-      {Intrinsic::mips_asub_s_w, 58820}, // __builtin_msa_asub_s_w
-      {Intrinsic::mips_asub_u_b, 58843}, // __builtin_msa_asub_u_b
-      {Intrinsic::mips_asub_u_d, 58866}, // __builtin_msa_asub_u_d
-      {Intrinsic::mips_asub_u_h, 58889}, // __builtin_msa_asub_u_h
-      {Intrinsic::mips_asub_u_w, 58912}, // __builtin_msa_asub_u_w
-      {Intrinsic::mips_ave_s_b, 58935}, // __builtin_msa_ave_s_b
-      {Intrinsic::mips_ave_s_d, 58957}, // __builtin_msa_ave_s_d
-      {Intrinsic::mips_ave_s_h, 58979}, // __builtin_msa_ave_s_h
-      {Intrinsic::mips_ave_s_w, 59001}, // __builtin_msa_ave_s_w
-      {Intrinsic::mips_ave_u_b, 59023}, // __builtin_msa_ave_u_b
-      {Intrinsic::mips_ave_u_d, 59045}, // __builtin_msa_ave_u_d
-      {Intrinsic::mips_ave_u_h, 59067}, // __builtin_msa_ave_u_h
-      {Intrinsic::mips_ave_u_w, 59089}, // __builtin_msa_ave_u_w
-      {Intrinsic::mips_aver_s_b, 59111}, // __builtin_msa_aver_s_b
-      {Intrinsic::mips_aver_s_d, 59134}, // __builtin_msa_aver_s_d
-      {Intrinsic::mips_aver_s_h, 59157}, // __builtin_msa_aver_s_h
-      {Intrinsic::mips_aver_s_w, 59180}, // __builtin_msa_aver_s_w
-      {Intrinsic::mips_aver_u_b, 59203}, // __builtin_msa_aver_u_b
-      {Intrinsic::mips_aver_u_d, 59226}, // __builtin_msa_aver_u_d
-      {Intrinsic::mips_aver_u_h, 59249}, // __builtin_msa_aver_u_h
-      {Intrinsic::mips_aver_u_w, 59272}, // __builtin_msa_aver_u_w
-      {Intrinsic::mips_bclr_b, 59317}, // __builtin_msa_bclr_b
-      {Intrinsic::mips_bclr_d, 59338}, // __builtin_msa_bclr_d
-      {Intrinsic::mips_bclr_h, 59359}, // __builtin_msa_bclr_h
-      {Intrinsic::mips_bclr_w, 59380}, // __builtin_msa_bclr_w
-      {Intrinsic::mips_bclri_b, 59401}, // __builtin_msa_bclri_b
-      {Intrinsic::mips_bclri_d, 59423}, // __builtin_msa_bclri_d
-      {Intrinsic::mips_bclri_h, 59445}, // __builtin_msa_bclri_h
-      {Intrinsic::mips_bclri_w, 59467}, // __builtin_msa_bclri_w
-      {Intrinsic::mips_binsl_b, 59489}, // __builtin_msa_binsl_b
-      {Intrinsic::mips_binsl_d, 59511}, // __builtin_msa_binsl_d
-      {Intrinsic::mips_binsl_h, 59533}, // __builtin_msa_binsl_h
-      {Intrinsic::mips_binsl_w, 59555}, // __builtin_msa_binsl_w
-      {Intrinsic::mips_binsli_b, 59577}, // __builtin_msa_binsli_b
-      {Intrinsic::mips_binsli_d, 59600}, // __builtin_msa_binsli_d
-      {Intrinsic::mips_binsli_h, 59623}, // __builtin_msa_binsli_h
-      {Intrinsic::mips_binsli_w, 59646}, // __builtin_msa_binsli_w
-      {Intrinsic::mips_binsr_b, 59669}, // __builtin_msa_binsr_b
-      {Intrinsic::mips_binsr_d, 59691}, // __builtin_msa_binsr_d
-      {Intrinsic::mips_binsr_h, 59713}, // __builtin_msa_binsr_h
-      {Intrinsic::mips_binsr_w, 59735}, // __builtin_msa_binsr_w
-      {Intrinsic::mips_binsri_b, 59757}, // __builtin_msa_binsri_b
-      {Intrinsic::mips_binsri_d, 59780}, // __builtin_msa_binsri_d
-      {Intrinsic::mips_binsri_h, 59803}, // __builtin_msa_binsri_h
-      {Intrinsic::mips_binsri_w, 59826}, // __builtin_msa_binsri_w
-      {Intrinsic::mips_bmnz_v, 59871}, // __builtin_msa_bmnz_v
-      {Intrinsic::mips_bmnzi_b, 59892}, // __builtin_msa_bmnzi_b
-      {Intrinsic::mips_bmz_v, 59914}, // __builtin_msa_bmz_v
-      {Intrinsic::mips_bmzi_b, 59934}, // __builtin_msa_bmzi_b
-      {Intrinsic::mips_bneg_b, 59955}, // __builtin_msa_bneg_b
-      {Intrinsic::mips_bneg_d, 59976}, // __builtin_msa_bneg_d
-      {Intrinsic::mips_bneg_h, 59997}, // __builtin_msa_bneg_h
-      {Intrinsic::mips_bneg_w, 60018}, // __builtin_msa_bneg_w
-      {Intrinsic::mips_bnegi_b, 60039}, // __builtin_msa_bnegi_b
-      {Intrinsic::mips_bnegi_d, 60061}, // __builtin_msa_bnegi_d
-      {Intrinsic::mips_bnegi_h, 60083}, // __builtin_msa_bnegi_h
-      {Intrinsic::mips_bnegi_w, 60105}, // __builtin_msa_bnegi_w
-      {Intrinsic::mips_bnz_b, 60127}, // __builtin_msa_bnz_b
-      {Intrinsic::mips_bnz_d, 60147}, // __builtin_msa_bnz_d
-      {Intrinsic::mips_bnz_h, 60167}, // __builtin_msa_bnz_h
-      {Intrinsic::mips_bnz_v, 60187}, // __builtin_msa_bnz_v
-      {Intrinsic::mips_bnz_w, 60207}, // __builtin_msa_bnz_w
-      {Intrinsic::mips_bsel_v, 60251}, // __builtin_msa_bsel_v
-      {Intrinsic::mips_bseli_b, 60272}, // __builtin_msa_bseli_b
-      {Intrinsic::mips_bset_b, 60294}, // __builtin_msa_bset_b
-      {Intrinsic::mips_bset_d, 60315}, // __builtin_msa_bset_d
-      {Intrinsic::mips_bset_h, 60336}, // __builtin_msa_bset_h
-      {Intrinsic::mips_bset_w, 60357}, // __builtin_msa_bset_w
-      {Intrinsic::mips_bseti_b, 60378}, // __builtin_msa_bseti_b
-      {Intrinsic::mips_bseti_d, 60400}, // __builtin_msa_bseti_d
-      {Intrinsic::mips_bseti_h, 60422}, // __builtin_msa_bseti_h
-      {Intrinsic::mips_bseti_w, 60444}, // __builtin_msa_bseti_w
-      {Intrinsic::mips_bz_b, 60466}, // __builtin_msa_bz_b
-      {Intrinsic::mips_bz_d, 60485}, // __builtin_msa_bz_d
-      {Intrinsic::mips_bz_h, 60504}, // __builtin_msa_bz_h
-      {Intrinsic::mips_bz_v, 60523}, // __builtin_msa_bz_v
-      {Intrinsic::mips_bz_w, 60542}, // __builtin_msa_bz_w
-      {Intrinsic::mips_ceq_b, 60561}, // __builtin_msa_ceq_b
-      {Intrinsic::mips_ceq_d, 60581}, // __builtin_msa_ceq_d
-      {Intrinsic::mips_ceq_h, 60601}, // __builtin_msa_ceq_h
-      {Intrinsic::mips_ceq_w, 60621}, // __builtin_msa_ceq_w
-      {Intrinsic::mips_ceqi_b, 60641}, // __builtin_msa_ceqi_b
-      {Intrinsic::mips_ceqi_d, 60662}, // __builtin_msa_ceqi_d
-      {Intrinsic::mips_ceqi_h, 60683}, // __builtin_msa_ceqi_h
-      {Intrinsic::mips_ceqi_w, 60704}, // __builtin_msa_ceqi_w
-      {Intrinsic::mips_cfcmsa, 60725}, // __builtin_msa_cfcmsa
-      {Intrinsic::mips_cle_s_b, 60746}, // __builtin_msa_cle_s_b
-      {Intrinsic::mips_cle_s_d, 60768}, // __builtin_msa_cle_s_d
-      {Intrinsic::mips_cle_s_h, 60790}, // __builtin_msa_cle_s_h
-      {Intrinsic::mips_cle_s_w, 60812}, // __builtin_msa_cle_s_w
-      {Intrinsic::mips_cle_u_b, 60834}, // __builtin_msa_cle_u_b
-      {Intrinsic::mips_cle_u_d, 60856}, // __builtin_msa_cle_u_d
-      {Intrinsic::mips_cle_u_h, 60878}, // __builtin_msa_cle_u_h
-      {Intrinsic::mips_cle_u_w, 60900}, // __builtin_msa_cle_u_w
-      {Intrinsic::mips_clei_s_b, 60922}, // __builtin_msa_clei_s_b
-      {Intrinsic::mips_clei_s_d, 60945}, // __builtin_msa_clei_s_d
-      {Intrinsic::mips_clei_s_h, 60968}, // __builtin_msa_clei_s_h
-      {Intrinsic::mips_clei_s_w, 60991}, // __builtin_msa_clei_s_w
-      {Intrinsic::mips_clei_u_b, 61014}, // __builtin_msa_clei_u_b
-      {Intrinsic::mips_clei_u_d, 61037}, // __builtin_msa_clei_u_d
-      {Intrinsic::mips_clei_u_h, 61060}, // __builtin_msa_clei_u_h
-      {Intrinsic::mips_clei_u_w, 61083}, // __builtin_msa_clei_u_w
-      {Intrinsic::mips_clt_s_b, 61106}, // __builtin_msa_clt_s_b
-      {Intrinsic::mips_clt_s_d, 61128}, // __builtin_msa_clt_s_d
-      {Intrinsic::mips_clt_s_h, 61150}, // __builtin_msa_clt_s_h
-      {Intrinsic::mips_clt_s_w, 61172}, // __builtin_msa_clt_s_w
-      {Intrinsic::mips_clt_u_b, 61194}, // __builtin_msa_clt_u_b
-      {Intrinsic::mips_clt_u_d, 61216}, // __builtin_msa_clt_u_d
-      {Intrinsic::mips_clt_u_h, 61238}, // __builtin_msa_clt_u_h
-      {Intrinsic::mips_clt_u_w, 61260}, // __builtin_msa_clt_u_w
-      {Intrinsic::mips_clti_s_b, 61282}, // __builtin_msa_clti_s_b
-      {Intrinsic::mips_clti_s_d, 61305}, // __builtin_msa_clti_s_d
-      {Intrinsic::mips_clti_s_h, 61328}, // __builtin_msa_clti_s_h
-      {Intrinsic::mips_clti_s_w, 61351}, // __builtin_msa_clti_s_w
-      {Intrinsic::mips_clti_u_b, 61374}, // __builtin_msa_clti_u_b
-      {Intrinsic::mips_clti_u_d, 61397}, // __builtin_msa_clti_u_d
-      {Intrinsic::mips_clti_u_h, 61420}, // __builtin_msa_clti_u_h
-      {Intrinsic::mips_clti_u_w, 61443}, // __builtin_msa_clti_u_w
-      {Intrinsic::mips_copy_s_b, 61784}, // __builtin_msa_copy_s_b
-      {Intrinsic::mips_copy_s_d, 61807}, // __builtin_msa_copy_s_d
-      {Intrinsic::mips_copy_s_h, 61830}, // __builtin_msa_copy_s_h
-      {Intrinsic::mips_copy_s_w, 61853}, // __builtin_msa_copy_s_w
-      {Intrinsic::mips_copy_u_b, 61876}, // __builtin_msa_copy_u_b
-      {Intrinsic::mips_copy_u_d, 61899}, // __builtin_msa_copy_u_d
-      {Intrinsic::mips_copy_u_h, 61922}, // __builtin_msa_copy_u_h
-      {Intrinsic::mips_copy_u_w, 61945}, // __builtin_msa_copy_u_w
-      {Intrinsic::mips_ctcmsa, 61968}, // __builtin_msa_ctcmsa
-      {Intrinsic::mips_div_s_b, 61989}, // __builtin_msa_div_s_b
-      {Intrinsic::mips_div_s_d, 62011}, // __builtin_msa_div_s_d
-      {Intrinsic::mips_div_s_h, 62033}, // __builtin_msa_div_s_h
-      {Intrinsic::mips_div_s_w, 62055}, // __builtin_msa_div_s_w
-      {Intrinsic::mips_div_u_b, 62077}, // __builtin_msa_div_u_b
-      {Intrinsic::mips_div_u_d, 62099}, // __builtin_msa_div_u_d
-      {Intrinsic::mips_div_u_h, 62121}, // __builtin_msa_div_u_h
-      {Intrinsic::mips_div_u_w, 62143}, // __builtin_msa_div_u_w
-      {Intrinsic::mips_dotp_s_d, 62185}, // __builtin_msa_dotp_s_d
-      {Intrinsic::mips_dotp_s_h, 62208}, // __builtin_msa_dotp_s_h
-      {Intrinsic::mips_dotp_s_w, 62231}, // __builtin_msa_dotp_s_w
-      {Intrinsic::mips_dotp_u_d, 62254}, // __builtin_msa_dotp_u_d
-      {Intrinsic::mips_dotp_u_h, 62277}, // __builtin_msa_dotp_u_h
-      {Intrinsic::mips_dotp_u_w, 62300}, // __builtin_msa_dotp_u_w
-      {Intrinsic::mips_dpadd_s_d, 62347}, // __builtin_msa_dpadd_s_d
-      {Intrinsic::mips_dpadd_s_h, 62371}, // __builtin_msa_dpadd_s_h
-      {Intrinsic::mips_dpadd_s_w, 62395}, // __builtin_msa_dpadd_s_w
-      {Intrinsic::mips_dpadd_u_d, 62419}, // __builtin_msa_dpadd_u_d
-      {Intrinsic::mips_dpadd_u_h, 62443}, // __builtin_msa_dpadd_u_h
-      {Intrinsic::mips_dpadd_u_w, 62467}, // __builtin_msa_dpadd_u_w
-      {Intrinsic::mips_dpsub_s_d, 62866}, // __builtin_msa_dpsub_s_d
-      {Intrinsic::mips_dpsub_s_h, 62890}, // __builtin_msa_dpsub_s_h
-      {Intrinsic::mips_dpsub_s_w, 62914}, // __builtin_msa_dpsub_s_w
-      {Intrinsic::mips_dpsub_u_d, 62938}, // __builtin_msa_dpsub_u_d
-      {Intrinsic::mips_dpsub_u_h, 62962}, // __builtin_msa_dpsub_u_h
-      {Intrinsic::mips_dpsub_u_w, 62986}, // __builtin_msa_dpsub_u_w
-      {Intrinsic::mips_fadd_d, 63172}, // __builtin_msa_fadd_d
-      {Intrinsic::mips_fadd_w, 63193}, // __builtin_msa_fadd_w
-      {Intrinsic::mips_fcaf_d, 63214}, // __builtin_msa_fcaf_d
-      {Intrinsic::mips_fcaf_w, 63235}, // __builtin_msa_fcaf_w
-      {Intrinsic::mips_fceq_d, 63256}, // __builtin_msa_fceq_d
-      {Intrinsic::mips_fceq_w, 63277}, // __builtin_msa_fceq_w
-      {Intrinsic::mips_fclass_d, 63298}, // __builtin_msa_fclass_d
-      {Intrinsic::mips_fclass_w, 63321}, // __builtin_msa_fclass_w
-      {Intrinsic::mips_fcle_d, 63344}, // __builtin_msa_fcle_d
-      {Intrinsic::mips_fcle_w, 63365}, // __builtin_msa_fcle_w
-      {Intrinsic::mips_fclt_d, 63386}, // __builtin_msa_fclt_d
-      {Intrinsic::mips_fclt_w, 63407}, // __builtin_msa_fclt_w
-      {Intrinsic::mips_fcne_d, 63428}, // __builtin_msa_fcne_d
-      {Intrinsic::mips_fcne_w, 63449}, // __builtin_msa_fcne_w
-      {Intrinsic::mips_fcor_d, 63470}, // __builtin_msa_fcor_d
-      {Intrinsic::mips_fcor_w, 63491}, // __builtin_msa_fcor_w
-      {Intrinsic::mips_fcueq_d, 63512}, // __builtin_msa_fcueq_d
-      {Intrinsic::mips_fcueq_w, 63534}, // __builtin_msa_fcueq_w
-      {Intrinsic::mips_fcule_d, 63556}, // __builtin_msa_fcule_d
-      {Intrinsic::mips_fcule_w, 63578}, // __builtin_msa_fcule_w
-      {Intrinsic::mips_fcult_d, 63600}, // __builtin_msa_fcult_d
-      {Intrinsic::mips_fcult_w, 63622}, // __builtin_msa_fcult_w
-      {Intrinsic::mips_fcun_d, 63644}, // __builtin_msa_fcun_d
-      {Intrinsic::mips_fcun_w, 63665}, // __builtin_msa_fcun_w
-      {Intrinsic::mips_fcune_d, 63686}, // __builtin_msa_fcune_d
-      {Intrinsic::mips_fcune_w, 63708}, // __builtin_msa_fcune_w
-      {Intrinsic::mips_fdiv_d, 63730}, // __builtin_msa_fdiv_d
-      {Intrinsic::mips_fdiv_w, 63751}, // __builtin_msa_fdiv_w
-      {Intrinsic::mips_fexdo_h, 63772}, // __builtin_msa_fexdo_h
-      {Intrinsic::mips_fexdo_w, 63794}, // __builtin_msa_fexdo_w
-      {Intrinsic::mips_fexp2_d, 63816}, // __builtin_msa_fexp2_d
-      {Intrinsic::mips_fexp2_w, 63838}, // __builtin_msa_fexp2_w
-      {Intrinsic::mips_fexupl_d, 63860}, // __builtin_msa_fexupl_d
-      {Intrinsic::mips_fexupl_w, 63883}, // __builtin_msa_fexupl_w
-      {Intrinsic::mips_fexupr_d, 63906}, // __builtin_msa_fexupr_d
-      {Intrinsic::mips_fexupr_w, 63929}, // __builtin_msa_fexupr_w
-      {Intrinsic::mips_ffint_s_d, 63952}, // __builtin_msa_ffint_s_d
-      {Intrinsic::mips_ffint_s_w, 63976}, // __builtin_msa_ffint_s_w
-      {Intrinsic::mips_ffint_u_d, 64000}, // __builtin_msa_ffint_u_d
-      {Intrinsic::mips_ffint_u_w, 64024}, // __builtin_msa_ffint_u_w
-      {Intrinsic::mips_ffql_d, 64048}, // __builtin_msa_ffql_d
-      {Intrinsic::mips_ffql_w, 64069}, // __builtin_msa_ffql_w
-      {Intrinsic::mips_ffqr_d, 64090}, // __builtin_msa_ffqr_d
-      {Intrinsic::mips_ffqr_w, 64111}, // __builtin_msa_ffqr_w
-      {Intrinsic::mips_fill_b, 64132}, // __builtin_msa_fill_b
-      {Intrinsic::mips_fill_d, 64153}, // __builtin_msa_fill_d
-      {Intrinsic::mips_fill_h, 64174}, // __builtin_msa_fill_h
-      {Intrinsic::mips_fill_w, 64195}, // __builtin_msa_fill_w
-      {Intrinsic::mips_flog2_d, 64216}, // __builtin_msa_flog2_d
-      {Intrinsic::mips_flog2_w, 64238}, // __builtin_msa_flog2_w
-      {Intrinsic::mips_fmadd_d, 64260}, // __builtin_msa_fmadd_d
-      {Intrinsic::mips_fmadd_w, 64282}, // __builtin_msa_fmadd_w
-      {Intrinsic::mips_fmax_a_d, 64304}, // __builtin_msa_fmax_a_d
-      {Intrinsic::mips_fmax_a_w, 64327}, // __builtin_msa_fmax_a_w
-      {Intrinsic::mips_fmax_d, 64350}, // __builtin_msa_fmax_d
-      {Intrinsic::mips_fmax_w, 64371}, // __builtin_msa_fmax_w
-      {Intrinsic::mips_fmin_a_d, 64392}, // __builtin_msa_fmin_a_d
-      {Intrinsic::mips_fmin_a_w, 64415}, // __builtin_msa_fmin_a_w
-      {Intrinsic::mips_fmin_d, 64438}, // __builtin_msa_fmin_d
-      {Intrinsic::mips_fmin_w, 64459}, // __builtin_msa_fmin_w
-      {Intrinsic::mips_fmsub_d, 64480}, // __builtin_msa_fmsub_d
-      {Intrinsic::mips_fmsub_w, 64502}, // __builtin_msa_fmsub_w
-      {Intrinsic::mips_fmul_d, 64524}, // __builtin_msa_fmul_d
-      {Intrinsic::mips_fmul_w, 64545}, // __builtin_msa_fmul_w
-      {Intrinsic::mips_frcp_d, 64566}, // __builtin_msa_frcp_d
-      {Intrinsic::mips_frcp_w, 64587}, // __builtin_msa_frcp_w
-      {Intrinsic::mips_frint_d, 64608}, // __builtin_msa_frint_d
-      {Intrinsic::mips_frint_w, 64630}, // __builtin_msa_frint_w
-      {Intrinsic::mips_frsqrt_d, 64652}, // __builtin_msa_frsqrt_d
-      {Intrinsic::mips_frsqrt_w, 64675}, // __builtin_msa_frsqrt_w
-      {Intrinsic::mips_fsaf_d, 64698}, // __builtin_msa_fsaf_d
-      {Intrinsic::mips_fsaf_w, 64719}, // __builtin_msa_fsaf_w
-      {Intrinsic::mips_fseq_d, 64740}, // __builtin_msa_fseq_d
-      {Intrinsic::mips_fseq_w, 64761}, // __builtin_msa_fseq_w
-      {Intrinsic::mips_fsle_d, 64782}, // __builtin_msa_fsle_d
-      {Intrinsic::mips_fsle_w, 64803}, // __builtin_msa_fsle_w
-      {Intrinsic::mips_fslt_d, 64824}, // __builtin_msa_fslt_d
-      {Intrinsic::mips_fslt_w, 64845}, // __builtin_msa_fslt_w
-      {Intrinsic::mips_fsne_d, 64866}, // __builtin_msa_fsne_d
-      {Intrinsic::mips_fsne_w, 64887}, // __builtin_msa_fsne_w
-      {Intrinsic::mips_fsor_d, 64908}, // __builtin_msa_fsor_d
-      {Intrinsic::mips_fsor_w, 64929}, // __builtin_msa_fsor_w
-      {Intrinsic::mips_fsqrt_d, 64950}, // __builtin_msa_fsqrt_d
-      {Intrinsic::mips_fsqrt_w, 64972}, // __builtin_msa_fsqrt_w
-      {Intrinsic::mips_fsub_d, 64994}, // __builtin_msa_fsub_d
-      {Intrinsic::mips_fsub_w, 65015}, // __builtin_msa_fsub_w
-      {Intrinsic::mips_fsueq_d, 65036}, // __builtin_msa_fsueq_d
-      {Intrinsic::mips_fsueq_w, 65058}, // __builtin_msa_fsueq_w
-      {Intrinsic::mips_fsule_d, 65080}, // __builtin_msa_fsule_d
-      {Intrinsic::mips_fsule_w, 65102}, // __builtin_msa_fsule_w
-      {Intrinsic::mips_fsult_d, 65124}, // __builtin_msa_fsult_d
-      {Intrinsic::mips_fsult_w, 65146}, // __builtin_msa_fsult_w
-      {Intrinsic::mips_fsun_d, 65168}, // __builtin_msa_fsun_d
-      {Intrinsic::mips_fsun_w, 65189}, // __builtin_msa_fsun_w
-      {Intrinsic::mips_fsune_d, 65210}, // __builtin_msa_fsune_d
-      {Intrinsic::mips_fsune_w, 65232}, // __builtin_msa_fsune_w
-      {Intrinsic::mips_ftint_s_d, 65254}, // __builtin_msa_ftint_s_d
-      {Intrinsic::mips_ftint_s_w, 65278}, // __builtin_msa_ftint_s_w
-      {Intrinsic::mips_ftint_u_d, 65302}, // __builtin_msa_ftint_u_d
-      {Intrinsic::mips_ftint_u_w, 65326}, // __builtin_msa_ftint_u_w
-      {Intrinsic::mips_ftq_h, 65350}, // __builtin_msa_ftq_h
-      {Intrinsic::mips_ftq_w, 65370}, // __builtin_msa_ftq_w
-      {Intrinsic::mips_ftrunc_s_d, 65390}, // __builtin_msa_ftrunc_s_d
-      {Intrinsic::mips_ftrunc_s_w, 65415}, // __builtin_msa_ftrunc_s_w
-      {Intrinsic::mips_ftrunc_u_d, 65440}, // __builtin_msa_ftrunc_u_d
-      {Intrinsic::mips_ftrunc_u_w, 65465}, // __builtin_msa_ftrunc_u_w
-      {Intrinsic::mips_hadd_s_d, 65490}, // __builtin_msa_hadd_s_d
-      {Intrinsic::mips_hadd_s_h, 65513}, // __builtin_msa_hadd_s_h
-      {Intrinsic::mips_hadd_s_w, 65536}, // __builtin_msa_hadd_s_w
-      {Intrinsic::mips_hadd_u_d, 65559}, // __builtin_msa_hadd_u_d
-      {Intrinsic::mips_hadd_u_h, 65582}, // __builtin_msa_hadd_u_h
-      {Intrinsic::mips_hadd_u_w, 65605}, // __builtin_msa_hadd_u_w
-      {Intrinsic::mips_hsub_s_d, 65628}, // __builtin_msa_hsub_s_d
-      {Intrinsic::mips_hsub_s_h, 65651}, // __builtin_msa_hsub_s_h
-      {Intrinsic::mips_hsub_s_w, 65674}, // __builtin_msa_hsub_s_w
-      {Intrinsic::mips_hsub_u_d, 65697}, // __builtin_msa_hsub_u_d
-      {Intrinsic::mips_hsub_u_h, 65720}, // __builtin_msa_hsub_u_h
-      {Intrinsic::mips_hsub_u_w, 65743}, // __builtin_msa_hsub_u_w
-      {Intrinsic::mips_ilvev_b, 65766}, // __builtin_msa_ilvev_b
-      {Intrinsic::mips_ilvev_d, 65788}, // __builtin_msa_ilvev_d
-      {Intrinsic::mips_ilvev_h, 65810}, // __builtin_msa_ilvev_h
-      {Intrinsic::mips_ilvev_w, 65832}, // __builtin_msa_ilvev_w
-      {Intrinsic::mips_ilvl_b, 65854}, // __builtin_msa_ilvl_b
-      {Intrinsic::mips_ilvl_d, 65875}, // __builtin_msa_ilvl_d
-      {Intrinsic::mips_ilvl_h, 65896}, // __builtin_msa_ilvl_h
-      {Intrinsic::mips_ilvl_w, 65917}, // __builtin_msa_ilvl_w
-      {Intrinsic::mips_ilvod_b, 65938}, // __builtin_msa_ilvod_b
-      {Intrinsic::mips_ilvod_d, 65960}, // __builtin_msa_ilvod_d
-      {Intrinsic::mips_ilvod_h, 65982}, // __builtin_msa_ilvod_h
-      {Intrinsic::mips_ilvod_w, 66004}, // __builtin_msa_ilvod_w
-      {Intrinsic::mips_ilvr_b, 66026}, // __builtin_msa_ilvr_b
-      {Intrinsic::mips_ilvr_d, 66047}, // __builtin_msa_ilvr_d
-      {Intrinsic::mips_ilvr_h, 66068}, // __builtin_msa_ilvr_h
-      {Intrinsic::mips_ilvr_w, 66089}, // __builtin_msa_ilvr_w
-      {Intrinsic::mips_insert_b, 66110}, // __builtin_msa_insert_b
-      {Intrinsic::mips_insert_d, 66133}, // __builtin_msa_insert_d
-      {Intrinsic::mips_insert_h, 66156}, // __builtin_msa_insert_h
-      {Intrinsic::mips_insert_w, 66179}, // __builtin_msa_insert_w
-      {Intrinsic::mips_insve_b, 66222}, // __builtin_msa_insve_b
-      {Intrinsic::mips_insve_d, 66244}, // __builtin_msa_insve_d
-      {Intrinsic::mips_insve_h, 66266}, // __builtin_msa_insve_h
-      {Intrinsic::mips_insve_w, 66288}, // __builtin_msa_insve_w
-      {Intrinsic::mips_ld_b, 66330}, // __builtin_msa_ld_b
-      {Intrinsic::mips_ld_d, 66349}, // __builtin_msa_ld_d
-      {Intrinsic::mips_ld_h, 66368}, // __builtin_msa_ld_h
-      {Intrinsic::mips_ld_w, 66387}, // __builtin_msa_ld_w
-      {Intrinsic::mips_ldi_b, 66406}, // __builtin_msa_ldi_b
-      {Intrinsic::mips_ldi_d, 66426}, // __builtin_msa_ldi_d
-      {Intrinsic::mips_ldi_h, 66446}, // __builtin_msa_ldi_h
-      {Intrinsic::mips_ldi_w, 66466}, // __builtin_msa_ldi_w
-      {Intrinsic::mips_madd_q_h, 66563}, // __builtin_msa_madd_q_h
-      {Intrinsic::mips_madd_q_w, 66586}, // __builtin_msa_madd_q_w
-      {Intrinsic::mips_maddr_q_h, 66609}, // __builtin_msa_maddr_q_h
-      {Intrinsic::mips_maddr_q_w, 66633}, // __builtin_msa_maddr_q_w
-      {Intrinsic::mips_maddv_b, 66678}, // __builtin_msa_maddv_b
-      {Intrinsic::mips_maddv_d, 66700}, // __builtin_msa_maddv_d
-      {Intrinsic::mips_maddv_h, 66722}, // __builtin_msa_maddv_h
-      {Intrinsic::mips_maddv_w, 66744}, // __builtin_msa_maddv_w
-      {Intrinsic::mips_max_a_b, 66876}, // __builtin_msa_max_a_b
-      {Intrinsic::mips_max_a_d, 66898}, // __builtin_msa_max_a_d
-      {Intrinsic::mips_max_a_h, 66920}, // __builtin_msa_max_a_h
-      {Intrinsic::mips_max_a_w, 66942}, // __builtin_msa_max_a_w
-      {Intrinsic::mips_max_s_b, 66964}, // __builtin_msa_max_s_b
-      {Intrinsic::mips_max_s_d, 66986}, // __builtin_msa_max_s_d
-      {Intrinsic::mips_max_s_h, 67008}, // __builtin_msa_max_s_h
-      {Intrinsic::mips_max_s_w, 67030}, // __builtin_msa_max_s_w
-      {Intrinsic::mips_max_u_b, 67052}, // __builtin_msa_max_u_b
-      {Intrinsic::mips_max_u_d, 67074}, // __builtin_msa_max_u_d
-      {Intrinsic::mips_max_u_h, 67096}, // __builtin_msa_max_u_h
-      {Intrinsic::mips_max_u_w, 67118}, // __builtin_msa_max_u_w
-      {Intrinsic::mips_maxi_s_b, 67140}, // __builtin_msa_maxi_s_b
-      {Intrinsic::mips_maxi_s_d, 67163}, // __builtin_msa_maxi_s_d
-      {Intrinsic::mips_maxi_s_h, 67186}, // __builtin_msa_maxi_s_h
-      {Intrinsic::mips_maxi_s_w, 67209}, // __builtin_msa_maxi_s_w
-      {Intrinsic::mips_maxi_u_b, 67232}, // __builtin_msa_maxi_u_b
-      {Intrinsic::mips_maxi_u_d, 67255}, // __builtin_msa_maxi_u_d
-      {Intrinsic::mips_maxi_u_h, 67278}, // __builtin_msa_maxi_u_h
-      {Intrinsic::mips_maxi_u_w, 67301}, // __builtin_msa_maxi_u_w
-      {Intrinsic::mips_min_a_b, 67324}, // __builtin_msa_min_a_b
-      {Intrinsic::mips_min_a_d, 67346}, // __builtin_msa_min_a_d
-      {Intrinsic::mips_min_a_h, 67368}, // __builtin_msa_min_a_h
-      {Intrinsic::mips_min_a_w, 67390}, // __builtin_msa_min_a_w
-      {Intrinsic::mips_min_s_b, 67412}, // __builtin_msa_min_s_b
-      {Intrinsic::mips_min_s_d, 67434}, // __builtin_msa_min_s_d
-      {Intrinsic::mips_min_s_h, 67456}, // __builtin_msa_min_s_h
-      {Intrinsic::mips_min_s_w, 67478}, // __builtin_msa_min_s_w
-      {Intrinsic::mips_min_u_b, 67500}, // __builtin_msa_min_u_b
-      {Intrinsic::mips_min_u_d, 67522}, // __builtin_msa_min_u_d
-      {Intrinsic::mips_min_u_h, 67544}, // __builtin_msa_min_u_h
-      {Intrinsic::mips_min_u_w, 67566}, // __builtin_msa_min_u_w
-      {Intrinsic::mips_mini_s_b, 67588}, // __builtin_msa_mini_s_b
-      {Intrinsic::mips_mini_s_d, 67611}, // __builtin_msa_mini_s_d
-      {Intrinsic::mips_mini_s_h, 67634}, // __builtin_msa_mini_s_h
-      {Intrinsic::mips_mini_s_w, 67657}, // __builtin_msa_mini_s_w
-      {Intrinsic::mips_mini_u_b, 67680}, // __builtin_msa_mini_u_b
-      {Intrinsic::mips_mini_u_d, 67703}, // __builtin_msa_mini_u_d
-      {Intrinsic::mips_mini_u_h, 67726}, // __builtin_msa_mini_u_h
-      {Intrinsic::mips_mini_u_w, 67749}, // __builtin_msa_mini_u_w
-      {Intrinsic::mips_mod_s_b, 67772}, // __builtin_msa_mod_s_b
-      {Intrinsic::mips_mod_s_d, 67794}, // __builtin_msa_mod_s_d
-      {Intrinsic::mips_mod_s_h, 67816}, // __builtin_msa_mod_s_h
-      {Intrinsic::mips_mod_s_w, 67838}, // __builtin_msa_mod_s_w
-      {Intrinsic::mips_mod_u_b, 67860}, // __builtin_msa_mod_u_b
-      {Intrinsic::mips_mod_u_d, 67882}, // __builtin_msa_mod_u_d
-      {Intrinsic::mips_mod_u_h, 67904}, // __builtin_msa_mod_u_h
-      {Intrinsic::mips_mod_u_w, 67926}, // __builtin_msa_mod_u_w
-      {Intrinsic::mips_move_v, 67970}, // __builtin_msa_move_v
-      {Intrinsic::mips_msub_q_h, 68011}, // __builtin_msa_msub_q_h
-      {Intrinsic::mips_msub_q_w, 68034}, // __builtin_msa_msub_q_w
-      {Intrinsic::mips_msubr_q_h, 68057}, // __builtin_msa_msubr_q_h
-      {Intrinsic::mips_msubr_q_w, 68081}, // __builtin_msa_msubr_q_w
-      {Intrinsic::mips_msubv_b, 68126}, // __builtin_msa_msubv_b
-      {Intrinsic::mips_msubv_d, 68148}, // __builtin_msa_msubv_d
-      {Intrinsic::mips_msubv_h, 68170}, // __builtin_msa_msubv_h
-      {Intrinsic::mips_msubv_w, 68192}, // __builtin_msa_msubv_w
-      {Intrinsic::mips_mul_q_h, 68258}, // __builtin_msa_mul_q_h
-      {Intrinsic::mips_mul_q_w, 68280}, // __builtin_msa_mul_q_w
-      {Intrinsic::mips_mulr_q_h, 68544}, // __builtin_msa_mulr_q_h
-      {Intrinsic::mips_mulr_q_w, 68567}, // __builtin_msa_mulr_q_w
-      {Intrinsic::mips_mulv_b, 68686}, // __builtin_msa_mulv_b
-      {Intrinsic::mips_mulv_d, 68707}, // __builtin_msa_mulv_d
-      {Intrinsic::mips_mulv_h, 68728}, // __builtin_msa_mulv_h
-      {Intrinsic::mips_mulv_w, 68749}, // __builtin_msa_mulv_w
-      {Intrinsic::mips_nloc_b, 68770}, // __builtin_msa_nloc_b
-      {Intrinsic::mips_nloc_d, 68791}, // __builtin_msa_nloc_d
-      {Intrinsic::mips_nloc_h, 68812}, // __builtin_msa_nloc_h
-      {Intrinsic::mips_nloc_w, 68833}, // __builtin_msa_nloc_w
-      {Intrinsic::mips_nlzc_b, 68854}, // __builtin_msa_nlzc_b
-      {Intrinsic::mips_nlzc_d, 68875}, // __builtin_msa_nlzc_d
-      {Intrinsic::mips_nlzc_h, 68896}, // __builtin_msa_nlzc_h
-      {Intrinsic::mips_nlzc_w, 68917}, // __builtin_msa_nlzc_w
-      {Intrinsic::mips_nor_v, 68938}, // __builtin_msa_nor_v
-      {Intrinsic::mips_nori_b, 68958}, // __builtin_msa_nori_b
-      {Intrinsic::mips_or_v, 68979}, // __builtin_msa_or_v
-      {Intrinsic::mips_ori_b, 68998}, // __builtin_msa_ori_b
-      {Intrinsic::mips_pckev_b, 69043}, // __builtin_msa_pckev_b
-      {Intrinsic::mips_pckev_d, 69065}, // __builtin_msa_pckev_d
-      {Intrinsic::mips_pckev_h, 69087}, // __builtin_msa_pckev_h
-      {Intrinsic::mips_pckev_w, 69109}, // __builtin_msa_pckev_w
-      {Intrinsic::mips_pckod_b, 69131}, // __builtin_msa_pckod_b
-      {Intrinsic::mips_pckod_d, 69153}, // __builtin_msa_pckod_d
-      {Intrinsic::mips_pckod_h, 69175}, // __builtin_msa_pckod_h
-      {Intrinsic::mips_pckod_w, 69197}, // __builtin_msa_pckod_w
-      {Intrinsic::mips_pcnt_b, 69219}, // __builtin_msa_pcnt_b
-      {Intrinsic::mips_pcnt_d, 69240}, // __builtin_msa_pcnt_d
-      {Intrinsic::mips_pcnt_h, 69261}, // __builtin_msa_pcnt_h
-      {Intrinsic::mips_pcnt_w, 69282}, // __builtin_msa_pcnt_w
-      {Intrinsic::mips_sat_s_b, 69966}, // __builtin_msa_sat_s_b
-      {Intrinsic::mips_sat_s_d, 69988}, // __builtin_msa_sat_s_d
-      {Intrinsic::mips_sat_s_h, 70010}, // __builtin_msa_sat_s_h
-      {Intrinsic::mips_sat_s_w, 70032}, // __builtin_msa_sat_s_w
-      {Intrinsic::mips_sat_u_b, 70054}, // __builtin_msa_sat_u_b
-      {Intrinsic::mips_sat_u_d, 70076}, // __builtin_msa_sat_u_d
-      {Intrinsic::mips_sat_u_h, 70098}, // __builtin_msa_sat_u_h
-      {Intrinsic::mips_sat_u_w, 70120}, // __builtin_msa_sat_u_w
-      {Intrinsic::mips_shf_b, 70142}, // __builtin_msa_shf_b
-      {Intrinsic::mips_shf_h, 70162}, // __builtin_msa_shf_h
-      {Intrinsic::mips_shf_w, 70182}, // __builtin_msa_shf_w
-      {Intrinsic::mips_sld_b, 70484}, // __builtin_msa_sld_b
-      {Intrinsic::mips_sld_d, 70504}, // __builtin_msa_sld_d
-      {Intrinsic::mips_sld_h, 70524}, // __builtin_msa_sld_h
-      {Intrinsic::mips_sld_w, 70544}, // __builtin_msa_sld_w
-      {Intrinsic::mips_sldi_b, 70564}, // __builtin_msa_sldi_b
-      {Intrinsic::mips_sldi_d, 70585}, // __builtin_msa_sldi_d
-      {Intrinsic::mips_sldi_h, 70606}, // __builtin_msa_sldi_h
-      {Intrinsic::mips_sldi_w, 70627}, // __builtin_msa_sldi_w
-      {Intrinsic::mips_sll_b, 70648}, // __builtin_msa_sll_b
-      {Intrinsic::mips_sll_d, 70668}, // __builtin_msa_sll_d
-      {Intrinsic::mips_sll_h, 70688}, // __builtin_msa_sll_h
-      {Intrinsic::mips_sll_w, 70708}, // __builtin_msa_sll_w
-      {Intrinsic::mips_slli_b, 70728}, // __builtin_msa_slli_b
-      {Intrinsic::mips_slli_d, 70749}, // __builtin_msa_slli_d
-      {Intrinsic::mips_slli_h, 70770}, // __builtin_msa_slli_h
-      {Intrinsic::mips_slli_w, 70791}, // __builtin_msa_slli_w
-      {Intrinsic::mips_splat_b, 70812}, // __builtin_msa_splat_b
-      {Intrinsic::mips_splat_d, 70834}, // __builtin_msa_splat_d
-      {Intrinsic::mips_splat_h, 70856}, // __builtin_msa_splat_h
-      {Intrinsic::mips_splat_w, 70878}, // __builtin_msa_splat_w
-      {Intrinsic::mips_splati_b, 70900}, // __builtin_msa_splati_b
-      {Intrinsic::mips_splati_d, 70923}, // __builtin_msa_splati_d
-      {Intrinsic::mips_splati_h, 70946}, // __builtin_msa_splati_h
-      {Intrinsic::mips_splati_w, 70969}, // __builtin_msa_splati_w
-      {Intrinsic::mips_sra_b, 70992}, // __builtin_msa_sra_b
-      {Intrinsic::mips_sra_d, 71012}, // __builtin_msa_sra_d
-      {Intrinsic::mips_sra_h, 71032}, // __builtin_msa_sra_h
-      {Intrinsic::mips_sra_w, 71052}, // __builtin_msa_sra_w
-      {Intrinsic::mips_srai_b, 71072}, // __builtin_msa_srai_b
-      {Intrinsic::mips_srai_d, 71093}, // __builtin_msa_srai_d
-      {Intrinsic::mips_srai_h, 71114}, // __builtin_msa_srai_h
-      {Intrinsic::mips_srai_w, 71135}, // __builtin_msa_srai_w
-      {Intrinsic::mips_srar_b, 71156}, // __builtin_msa_srar_b
-      {Intrinsic::mips_srar_d, 71177}, // __builtin_msa_srar_d
-      {Intrinsic::mips_srar_h, 71198}, // __builtin_msa_srar_h
-      {Intrinsic::mips_srar_w, 71219}, // __builtin_msa_srar_w
-      {Intrinsic::mips_srari_b, 71240}, // __builtin_msa_srari_b
-      {Intrinsic::mips_srari_d, 71262}, // __builtin_msa_srari_d
-      {Intrinsic::mips_srari_h, 71284}, // __builtin_msa_srari_h
-      {Intrinsic::mips_srari_w, 71306}, // __builtin_msa_srari_w
-      {Intrinsic::mips_srl_b, 71328}, // __builtin_msa_srl_b
-      {Intrinsic::mips_srl_d, 71348}, // __builtin_msa_srl_d
-      {Intrinsic::mips_srl_h, 71368}, // __builtin_msa_srl_h
-      {Intrinsic::mips_srl_w, 71388}, // __builtin_msa_srl_w
-      {Intrinsic::mips_srli_b, 71408}, // __builtin_msa_srli_b
-      {Intrinsic::mips_srli_d, 71429}, // __builtin_msa_srli_d
-      {Intrinsic::mips_srli_h, 71450}, // __builtin_msa_srli_h
-      {Intrinsic::mips_srli_w, 71471}, // __builtin_msa_srli_w
-      {Intrinsic::mips_srlr_b, 71492}, // __builtin_msa_srlr_b
-      {Intrinsic::mips_srlr_d, 71513}, // __builtin_msa_srlr_d
-      {Intrinsic::mips_srlr_h, 71534}, // __builtin_msa_srlr_h
-      {Intrinsic::mips_srlr_w, 71555}, // __builtin_msa_srlr_w
-      {Intrinsic::mips_srlri_b, 71576}, // __builtin_msa_srlri_b
-      {Intrinsic::mips_srlri_d, 71598}, // __builtin_msa_srlri_d
-      {Intrinsic::mips_srlri_h, 71620}, // __builtin_msa_srlri_h
-      {Intrinsic::mips_srlri_w, 71642}, // __builtin_msa_srlri_w
-      {Intrinsic::mips_st_b, 71664}, // __builtin_msa_st_b
-      {Intrinsic::mips_st_d, 71683}, // __builtin_msa_st_d
-      {Intrinsic::mips_st_h, 71702}, // __builtin_msa_st_h
-      {Intrinsic::mips_st_w, 71721}, // __builtin_msa_st_w
-      {Intrinsic::mips_subs_s_b, 71910}, // __builtin_msa_subs_s_b
-      {Intrinsic::mips_subs_s_d, 71933}, // __builtin_msa_subs_s_d
-      {Intrinsic::mips_subs_s_h, 71956}, // __builtin_msa_subs_s_h
-      {Intrinsic::mips_subs_s_w, 71979}, // __builtin_msa_subs_s_w
-      {Intrinsic::mips_subs_u_b, 72002}, // __builtin_msa_subs_u_b
-      {Intrinsic::mips_subs_u_d, 72025}, // __builtin_msa_subs_u_d
-      {Intrinsic::mips_subs_u_h, 72048}, // __builtin_msa_subs_u_h
-      {Intrinsic::mips_subs_u_w, 72071}, // __builtin_msa_subs_u_w
-      {Intrinsic::mips_subsus_u_b, 72094}, // __builtin_msa_subsus_u_b
-      {Intrinsic::mips_subsus_u_d, 72119}, // __builtin_msa_subsus_u_d
-      {Intrinsic::mips_subsus_u_h, 72144}, // __builtin_msa_subsus_u_h
-      {Intrinsic::mips_subsus_u_w, 72169}, // __builtin_msa_subsus_u_w
-      {Intrinsic::mips_subsuu_s_b, 72194}, // __builtin_msa_subsuu_s_b
-      {Intrinsic::mips_subsuu_s_d, 72219}, // __builtin_msa_subsuu_s_d
-      {Intrinsic::mips_subsuu_s_h, 72244}, // __builtin_msa_subsuu_s_h
-      {Intrinsic::mips_subsuu_s_w, 72269}, // __builtin_msa_subsuu_s_w
-      {Intrinsic::mips_subv_b, 72440}, // __builtin_msa_subv_b
-      {Intrinsic::mips_subv_d, 72461}, // __builtin_msa_subv_d
-      {Intrinsic::mips_subv_h, 72482}, // __builtin_msa_subv_h
-      {Intrinsic::mips_subv_w, 72503}, // __builtin_msa_subv_w
-      {Intrinsic::mips_subvi_b, 72524}, // __builtin_msa_subvi_b
-      {Intrinsic::mips_subvi_d, 72546}, // __builtin_msa_subvi_d
-      {Intrinsic::mips_subvi_h, 72568}, // __builtin_msa_subvi_h
-      {Intrinsic::mips_subvi_w, 72590}, // __builtin_msa_subvi_w
-      {Intrinsic::mips_vshf_b, 72612}, // __builtin_msa_vshf_b
-      {Intrinsic::mips_vshf_d, 72633}, // __builtin_msa_vshf_d
-      {Intrinsic::mips_vshf_h, 72654}, // __builtin_msa_vshf_h
-      {Intrinsic::mips_vshf_w, 72675}, // __builtin_msa_vshf_w
-      {Intrinsic::mips_xor_v, 72717}, // __builtin_msa_xor_v
-      {Intrinsic::mips_xori_b, 72737}, // __builtin_msa_xori_b
-    };
-    auto I = std::lower_bound(std::begin(mipsNames),
-                              std::end(mipsNames),
-                              BuiltinNameStr);
-    if (I != std::end(mipsNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "nvvm") {
-    static const BuiltinEntry nvvmNames[] = {
-      {Intrinsic::nvvm_add_rm_d, 72758}, // __nvvm_add_rm_d
-      {Intrinsic::nvvm_add_rm_f, 72774}, // __nvvm_add_rm_f
-      {Intrinsic::nvvm_add_rm_ftz_f, 72790}, // __nvvm_add_rm_ftz_f
-      {Intrinsic::nvvm_add_rn_d, 72810}, // __nvvm_add_rn_d
-      {Intrinsic::nvvm_add_rn_f, 72826}, // __nvvm_add_rn_f
-      {Intrinsic::nvvm_add_rn_ftz_f, 72842}, // __nvvm_add_rn_ftz_f
-      {Intrinsic::nvvm_add_rp_d, 72862}, // __nvvm_add_rp_d
-      {Intrinsic::nvvm_add_rp_f, 72878}, // __nvvm_add_rp_f
-      {Intrinsic::nvvm_add_rp_ftz_f, 72894}, // __nvvm_add_rp_ftz_f
-      {Intrinsic::nvvm_add_rz_d, 72914}, // __nvvm_add_rz_d
-      {Intrinsic::nvvm_add_rz_f, 72930}, // __nvvm_add_rz_f
-      {Intrinsic::nvvm_add_rz_ftz_f, 72946}, // __nvvm_add_rz_ftz_f
-      {Intrinsic::nvvm_barrier, 73003}, // __nvvm_bar
-      {Intrinsic::nvvm_barrier0_and, 73085}, // __nvvm_bar0_and
-      {Intrinsic::nvvm_barrier0_or, 73101}, // __nvvm_bar0_or
-      {Intrinsic::nvvm_barrier0_popc, 73116}, // __nvvm_bar0_popc
-      {Intrinsic::nvvm_barrier_n, 73014}, // __nvvm_bar_n
-      {Intrinsic::nvvm_bar_sync, 72966}, // __nvvm_bar_sync
-      {Intrinsic::nvvm_bar_warp_sync, 72982}, // __nvvm_bar_warp_sync
-      {Intrinsic::nvvm_barrier_sync, 73027}, // __nvvm_barrier_sync
-      {Intrinsic::nvvm_barrier_sync_cnt, 73047}, // __nvvm_barrier_sync_cnt
-      {Intrinsic::nvvm_bitcast_d2ll, 73133}, // __nvvm_bitcast_d2ll
-      {Intrinsic::nvvm_bitcast_f2i, 73153}, // __nvvm_bitcast_f2i
-      {Intrinsic::nvvm_bitcast_i2f, 73172}, // __nvvm_bitcast_i2f
-      {Intrinsic::nvvm_bitcast_ll2d, 73191}, // __nvvm_bitcast_ll2d
-      {Intrinsic::nvvm_ceil_d, 73211}, // __nvvm_ceil_d
-      {Intrinsic::nvvm_ceil_f, 73225}, // __nvvm_ceil_f
-      {Intrinsic::nvvm_ceil_ftz_f, 73239}, // __nvvm_ceil_ftz_f
-      {Intrinsic::nvvm_cos_approx_f, 73257}, // __nvvm_cos_approx_f
-      {Intrinsic::nvvm_cos_approx_ftz_f, 73277}, // __nvvm_cos_approx_ftz_f
-      {Intrinsic::nvvm_d2f_rm, 73301}, // __nvvm_d2f_rm
-      {Intrinsic::nvvm_d2f_rm_ftz, 73315}, // __nvvm_d2f_rm_ftz
-      {Intrinsic::nvvm_d2f_rn, 73333}, // __nvvm_d2f_rn
-      {Intrinsic::nvvm_d2f_rn_ftz, 73347}, // __nvvm_d2f_rn_ftz
-      {Intrinsic::nvvm_d2f_rp, 73365}, // __nvvm_d2f_rp
-      {Intrinsic::nvvm_d2f_rp_ftz, 73379}, // __nvvm_d2f_rp_ftz
-      {Intrinsic::nvvm_d2f_rz, 73397}, // __nvvm_d2f_rz
-      {Intrinsic::nvvm_d2f_rz_ftz, 73411}, // __nvvm_d2f_rz_ftz
-      {Intrinsic::nvvm_d2i_hi, 73429}, // __nvvm_d2i_hi
-      {Intrinsic::nvvm_d2i_lo, 73443}, // __nvvm_d2i_lo
-      {Intrinsic::nvvm_d2i_rm, 73457}, // __nvvm_d2i_rm
-      {Intrinsic::nvvm_d2i_rn, 73471}, // __nvvm_d2i_rn
-      {Intrinsic::nvvm_d2i_rp, 73485}, // __nvvm_d2i_rp
-      {Intrinsic::nvvm_d2i_rz, 73499}, // __nvvm_d2i_rz
-      {Intrinsic::nvvm_d2ll_rm, 73513}, // __nvvm_d2ll_rm
-      {Intrinsic::nvvm_d2ll_rn, 73528}, // __nvvm_d2ll_rn
-      {Intrinsic::nvvm_d2ll_rp, 73543}, // __nvvm_d2ll_rp
-      {Intrinsic::nvvm_d2ll_rz, 73558}, // __nvvm_d2ll_rz
-      {Intrinsic::nvvm_d2ui_rm, 73573}, // __nvvm_d2ui_rm
-      {Intrinsic::nvvm_d2ui_rn, 73588}, // __nvvm_d2ui_rn
-      {Intrinsic::nvvm_d2ui_rp, 73603}, // __nvvm_d2ui_rp
-      {Intrinsic::nvvm_d2ui_rz, 73618}, // __nvvm_d2ui_rz
-      {Intrinsic::nvvm_d2ull_rm, 73633}, // __nvvm_d2ull_rm
-      {Intrinsic::nvvm_d2ull_rn, 73649}, // __nvvm_d2ull_rn
-      {Intrinsic::nvvm_d2ull_rp, 73665}, // __nvvm_d2ull_rp
-      {Intrinsic::nvvm_d2ull_rz, 73681}, // __nvvm_d2ull_rz
-      {Intrinsic::nvvm_div_approx_f, 73697}, // __nvvm_div_approx_f
-      {Intrinsic::nvvm_div_approx_ftz_f, 73717}, // __nvvm_div_approx_ftz_f
-      {Intrinsic::nvvm_div_rm_d, 73741}, // __nvvm_div_rm_d
-      {Intrinsic::nvvm_div_rm_f, 73757}, // __nvvm_div_rm_f
-      {Intrinsic::nvvm_div_rm_ftz_f, 73773}, // __nvvm_div_rm_ftz_f
-      {Intrinsic::nvvm_div_rn_d, 73793}, // __nvvm_div_rn_d
-      {Intrinsic::nvvm_div_rn_f, 73809}, // __nvvm_div_rn_f
-      {Intrinsic::nvvm_div_rn_ftz_f, 73825}, // __nvvm_div_rn_ftz_f
-      {Intrinsic::nvvm_div_rp_d, 73845}, // __nvvm_div_rp_d
-      {Intrinsic::nvvm_div_rp_f, 73861}, // __nvvm_div_rp_f
-      {Intrinsic::nvvm_div_rp_ftz_f, 73877}, // __nvvm_div_rp_ftz_f
-      {Intrinsic::nvvm_div_rz_d, 73897}, // __nvvm_div_rz_d
-      {Intrinsic::nvvm_div_rz_f, 73913}, // __nvvm_div_rz_f
-      {Intrinsic::nvvm_div_rz_ftz_f, 73929}, // __nvvm_div_rz_ftz_f
-      {Intrinsic::nvvm_ex2_approx_d, 73949}, // __nvvm_ex2_approx_d
-      {Intrinsic::nvvm_ex2_approx_f, 73969}, // __nvvm_ex2_approx_f
-      {Intrinsic::nvvm_ex2_approx_ftz_f, 73989}, // __nvvm_ex2_approx_ftz_f
-      {Intrinsic::nvvm_f2h_rn, 74013}, // __nvvm_f2h_rn
-      {Intrinsic::nvvm_f2h_rn_ftz, 74027}, // __nvvm_f2h_rn_ftz
-      {Intrinsic::nvvm_f2i_rm, 74045}, // __nvvm_f2i_rm
-      {Intrinsic::nvvm_f2i_rm_ftz, 74059}, // __nvvm_f2i_rm_ftz
-      {Intrinsic::nvvm_f2i_rn, 74077}, // __nvvm_f2i_rn
-      {Intrinsic::nvvm_f2i_rn_ftz, 74091}, // __nvvm_f2i_rn_ftz
-      {Intrinsic::nvvm_f2i_rp, 74109}, // __nvvm_f2i_rp
-      {Intrinsic::nvvm_f2i_rp_ftz, 74123}, // __nvvm_f2i_rp_ftz
-      {Intrinsic::nvvm_f2i_rz, 74141}, // __nvvm_f2i_rz
-      {Intrinsic::nvvm_f2i_rz_ftz, 74155}, // __nvvm_f2i_rz_ftz
-      {Intrinsic::nvvm_f2ll_rm, 74173}, // __nvvm_f2ll_rm
-      {Intrinsic::nvvm_f2ll_rm_ftz, 74188}, // __nvvm_f2ll_rm_ftz
-      {Intrinsic::nvvm_f2ll_rn, 74207}, // __nvvm_f2ll_rn
-      {Intrinsic::nvvm_f2ll_rn_ftz, 74222}, // __nvvm_f2ll_rn_ftz
-      {Intrinsic::nvvm_f2ll_rp, 74241}, // __nvvm_f2ll_rp
-      {Intrinsic::nvvm_f2ll_rp_ftz, 74256}, // __nvvm_f2ll_rp_ftz
-      {Intrinsic::nvvm_f2ll_rz, 74275}, // __nvvm_f2ll_rz
-      {Intrinsic::nvvm_f2ll_rz_ftz, 74290}, // __nvvm_f2ll_rz_ftz
-      {Intrinsic::nvvm_f2ui_rm, 74309}, // __nvvm_f2ui_rm
-      {Intrinsic::nvvm_f2ui_rm_ftz, 74324}, // __nvvm_f2ui_rm_ftz
-      {Intrinsic::nvvm_f2ui_rn, 74343}, // __nvvm_f2ui_rn
-      {Intrinsic::nvvm_f2ui_rn_ftz, 74358}, // __nvvm_f2ui_rn_ftz
-      {Intrinsic::nvvm_f2ui_rp, 74377}, // __nvvm_f2ui_rp
-      {Intrinsic::nvvm_f2ui_rp_ftz, 74392}, // __nvvm_f2ui_rp_ftz
-      {Intrinsic::nvvm_f2ui_rz, 74411}, // __nvvm_f2ui_rz
-      {Intrinsic::nvvm_f2ui_rz_ftz, 74426}, // __nvvm_f2ui_rz_ftz
-      {Intrinsic::nvvm_f2ull_rm, 74445}, // __nvvm_f2ull_rm
-      {Intrinsic::nvvm_f2ull_rm_ftz, 74461}, // __nvvm_f2ull_rm_ftz
-      {Intrinsic::nvvm_f2ull_rn, 74481}, // __nvvm_f2ull_rn
-      {Intrinsic::nvvm_f2ull_rn_ftz, 74497}, // __nvvm_f2ull_rn_ftz
-      {Intrinsic::nvvm_f2ull_rp, 74517}, // __nvvm_f2ull_rp
-      {Intrinsic::nvvm_f2ull_rp_ftz, 74533}, // __nvvm_f2ull_rp_ftz
-      {Intrinsic::nvvm_f2ull_rz, 74553}, // __nvvm_f2ull_rz
-      {Intrinsic::nvvm_f2ull_rz_ftz, 74569}, // __nvvm_f2ull_rz_ftz
-      {Intrinsic::nvvm_fabs_d, 74589}, // __nvvm_fabs_d
-      {Intrinsic::nvvm_fabs_f, 74603}, // __nvvm_fabs_f
-      {Intrinsic::nvvm_fabs_ftz_f, 74617}, // __nvvm_fabs_ftz_f
-      {Intrinsic::nvvm_floor_d, 74635}, // __nvvm_floor_d
-      {Intrinsic::nvvm_floor_f, 74650}, // __nvvm_floor_f
-      {Intrinsic::nvvm_floor_ftz_f, 74665}, // __nvvm_floor_ftz_f
-      {Intrinsic::nvvm_fma_rm_d, 74684}, // __nvvm_fma_rm_d
-      {Intrinsic::nvvm_fma_rm_f, 74700}, // __nvvm_fma_rm_f
-      {Intrinsic::nvvm_fma_rm_ftz_f, 74716}, // __nvvm_fma_rm_ftz_f
-      {Intrinsic::nvvm_fma_rn_d, 74736}, // __nvvm_fma_rn_d
-      {Intrinsic::nvvm_fma_rn_f, 74752}, // __nvvm_fma_rn_f
-      {Intrinsic::nvvm_fma_rn_ftz_f, 74768}, // __nvvm_fma_rn_ftz_f
-      {Intrinsic::nvvm_fma_rp_d, 74788}, // __nvvm_fma_rp_d
-      {Intrinsic::nvvm_fma_rp_f, 74804}, // __nvvm_fma_rp_f
-      {Intrinsic::nvvm_fma_rp_ftz_f, 74820}, // __nvvm_fma_rp_ftz_f
-      {Intrinsic::nvvm_fma_rz_d, 74840}, // __nvvm_fma_rz_d
-      {Intrinsic::nvvm_fma_rz_f, 74856}, // __nvvm_fma_rz_f
-      {Intrinsic::nvvm_fma_rz_ftz_f, 74872}, // __nvvm_fma_rz_ftz_f
-      {Intrinsic::nvvm_fmax_d, 74892}, // __nvvm_fmax_d
-      {Intrinsic::nvvm_fmax_f, 74906}, // __nvvm_fmax_f
-      {Intrinsic::nvvm_fmax_ftz_f, 74920}, // __nvvm_fmax_ftz_f
-      {Intrinsic::nvvm_fmin_d, 74938}, // __nvvm_fmin_d
-      {Intrinsic::nvvm_fmin_f, 74952}, // __nvvm_fmin_f
-      {Intrinsic::nvvm_fmin_ftz_f, 74966}, // __nvvm_fmin_ftz_f
-      {Intrinsic::nvvm_fns, 74984}, // __nvvm_fns
-      {Intrinsic::nvvm_i2d_rm, 74995}, // __nvvm_i2d_rm
-      {Intrinsic::nvvm_i2d_rn, 75009}, // __nvvm_i2d_rn
-      {Intrinsic::nvvm_i2d_rp, 75023}, // __nvvm_i2d_rp
-      {Intrinsic::nvvm_i2d_rz, 75037}, // __nvvm_i2d_rz
-      {Intrinsic::nvvm_i2f_rm, 75051}, // __nvvm_i2f_rm
-      {Intrinsic::nvvm_i2f_rn, 75065}, // __nvvm_i2f_rn
-      {Intrinsic::nvvm_i2f_rp, 75079}, // __nvvm_i2f_rp
-      {Intrinsic::nvvm_i2f_rz, 75093}, // __nvvm_i2f_rz
-      {Intrinsic::nvvm_isspacep_const, 75107}, // __nvvm_isspacep_const
-      {Intrinsic::nvvm_isspacep_global, 75129}, // __nvvm_isspacep_global
-      {Intrinsic::nvvm_isspacep_local, 75152}, // __nvvm_isspacep_local
-      {Intrinsic::nvvm_isspacep_shared, 75174}, // __nvvm_isspacep_shared
-      {Intrinsic::nvvm_istypep_sampler, 75197}, // __nvvm_istypep_sampler
-      {Intrinsic::nvvm_istypep_surface, 75220}, // __nvvm_istypep_surface
-      {Intrinsic::nvvm_istypep_texture, 75243}, // __nvvm_istypep_texture
-      {Intrinsic::nvvm_lg2_approx_d, 75266}, // __nvvm_lg2_approx_d
-      {Intrinsic::nvvm_lg2_approx_f, 75286}, // __nvvm_lg2_approx_f
-      {Intrinsic::nvvm_lg2_approx_ftz_f, 75306}, // __nvvm_lg2_approx_ftz_f
-      {Intrinsic::nvvm_ll2d_rm, 75330}, // __nvvm_ll2d_rm
-      {Intrinsic::nvvm_ll2d_rn, 75345}, // __nvvm_ll2d_rn
-      {Intrinsic::nvvm_ll2d_rp, 75360}, // __nvvm_ll2d_rp
-      {Intrinsic::nvvm_ll2d_rz, 75375}, // __nvvm_ll2d_rz
-      {Intrinsic::nvvm_ll2f_rm, 75390}, // __nvvm_ll2f_rm
-      {Intrinsic::nvvm_ll2f_rn, 75405}, // __nvvm_ll2f_rn
-      {Intrinsic::nvvm_ll2f_rp, 75420}, // __nvvm_ll2f_rp
-      {Intrinsic::nvvm_ll2f_rz, 75435}, // __nvvm_ll2f_rz
-      {Intrinsic::nvvm_lohi_i2d, 75450}, // __nvvm_lohi_i2d
-      {Intrinsic::nvvm_match_any_sync_i32, 75466}, // __nvvm_match_any_sync_i32
-      {Intrinsic::nvvm_match_any_sync_i64, 75492}, // __nvvm_match_any_sync_i64
-      {Intrinsic::nvvm_membar_cta, 75518}, // __nvvm_membar_cta
-      {Intrinsic::nvvm_membar_gl, 75536}, // __nvvm_membar_gl
-      {Intrinsic::nvvm_membar_sys, 75553}, // __nvvm_membar_sys
-      {Intrinsic::nvvm_mul24_i, 75779}, // __nvvm_mul24_i
-      {Intrinsic::nvvm_mul24_ui, 75794}, // __nvvm_mul24_ui
-      {Intrinsic::nvvm_mul_rm_d, 75571}, // __nvvm_mul_rm_d
-      {Intrinsic::nvvm_mul_rm_f, 75587}, // __nvvm_mul_rm_f
-      {Intrinsic::nvvm_mul_rm_ftz_f, 75603}, // __nvvm_mul_rm_ftz_f
-      {Intrinsic::nvvm_mul_rn_d, 75623}, // __nvvm_mul_rn_d
-      {Intrinsic::nvvm_mul_rn_f, 75639}, // __nvvm_mul_rn_f
-      {Intrinsic::nvvm_mul_rn_ftz_f, 75655}, // __nvvm_mul_rn_ftz_f
-      {Intrinsic::nvvm_mul_rp_d, 75675}, // __nvvm_mul_rp_d
-      {Intrinsic::nvvm_mul_rp_f, 75691}, // __nvvm_mul_rp_f
-      {Intrinsic::nvvm_mul_rp_ftz_f, 75707}, // __nvvm_mul_rp_ftz_f
-      {Intrinsic::nvvm_mul_rz_d, 75727}, // __nvvm_mul_rz_d
-      {Intrinsic::nvvm_mul_rz_f, 75743}, // __nvvm_mul_rz_f
-      {Intrinsic::nvvm_mul_rz_ftz_f, 75759}, // __nvvm_mul_rz_ftz_f
-      {Intrinsic::nvvm_mulhi_i, 75810}, // __nvvm_mulhi_i
-      {Intrinsic::nvvm_mulhi_ll, 75825}, // __nvvm_mulhi_ll
-      {Intrinsic::nvvm_mulhi_ui, 75841}, // __nvvm_mulhi_ui
-      {Intrinsic::nvvm_mulhi_ull, 75857}, // __nvvm_mulhi_ull
-      {Intrinsic::nvvm_prmt, 75874}, // __nvvm_prmt
-      {Intrinsic::nvvm_rcp_approx_ftz_d, 75886}, // __nvvm_rcp_approx_ftz_d
-      {Intrinsic::nvvm_rcp_rm_d, 75910}, // __nvvm_rcp_rm_d
-      {Intrinsic::nvvm_rcp_rm_f, 75926}, // __nvvm_rcp_rm_f
-      {Intrinsic::nvvm_rcp_rm_ftz_f, 75942}, // __nvvm_rcp_rm_ftz_f
-      {Intrinsic::nvvm_rcp_rn_d, 75962}, // __nvvm_rcp_rn_d
-      {Intrinsic::nvvm_rcp_rn_f, 75978}, // __nvvm_rcp_rn_f
-      {Intrinsic::nvvm_rcp_rn_ftz_f, 75994}, // __nvvm_rcp_rn_ftz_f
-      {Intrinsic::nvvm_rcp_rp_d, 76014}, // __nvvm_rcp_rp_d
-      {Intrinsic::nvvm_rcp_rp_f, 76030}, // __nvvm_rcp_rp_f
-      {Intrinsic::nvvm_rcp_rp_ftz_f, 76046}, // __nvvm_rcp_rp_ftz_f
-      {Intrinsic::nvvm_rcp_rz_d, 76066}, // __nvvm_rcp_rz_d
-      {Intrinsic::nvvm_rcp_rz_f, 76082}, // __nvvm_rcp_rz_f
-      {Intrinsic::nvvm_rcp_rz_ftz_f, 76098}, // __nvvm_rcp_rz_ftz_f
-      {Intrinsic::nvvm_read_ptx_sreg_clock, 76118}, // __nvvm_read_ptx_sreg_clock
-      {Intrinsic::nvvm_read_ptx_sreg_clock64, 76145}, // __nvvm_read_ptx_sreg_clock64
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_w, 76174}, // __nvvm_read_ptx_sreg_ctaid_w
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_x, 76203}, // __nvvm_read_ptx_sreg_ctaid_x
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_y, 76232}, // __nvvm_read_ptx_sreg_ctaid_y
-      {Intrinsic::nvvm_read_ptx_sreg_ctaid_z, 76261}, // __nvvm_read_ptx_sreg_ctaid_z
-      {Intrinsic::nvvm_read_ptx_sreg_envreg0, 76290}, // __nvvm_read_ptx_sreg_envreg0
-      {Intrinsic::nvvm_read_ptx_sreg_envreg1, 76319}, // __nvvm_read_ptx_sreg_envreg1
-      {Intrinsic::nvvm_read_ptx_sreg_envreg10, 76348}, // __nvvm_read_ptx_sreg_envreg10
-      {Intrinsic::nvvm_read_ptx_sreg_envreg11, 76378}, // __nvvm_read_ptx_sreg_envreg11
-      {Intrinsic::nvvm_read_ptx_sreg_envreg12, 76408}, // __nvvm_read_ptx_sreg_envreg12
-      {Intrinsic::nvvm_read_ptx_sreg_envreg13, 76438}, // __nvvm_read_ptx_sreg_envreg13
-      {Intrinsic::nvvm_read_ptx_sreg_envreg14, 76468}, // __nvvm_read_ptx_sreg_envreg14
-      {Intrinsic::nvvm_read_ptx_sreg_envreg15, 76498}, // __nvvm_read_ptx_sreg_envreg15
-      {Intrinsic::nvvm_read_ptx_sreg_envreg16, 76528}, // __nvvm_read_ptx_sreg_envreg16
-      {Intrinsic::nvvm_read_ptx_sreg_envreg17, 76558}, // __nvvm_read_ptx_sreg_envreg17
-      {Intrinsic::nvvm_read_ptx_sreg_envreg18, 76588}, // __nvvm_read_ptx_sreg_envreg18
-      {Intrinsic::nvvm_read_ptx_sreg_envreg19, 76618}, // __nvvm_read_ptx_sreg_envreg19
-      {Intrinsic::nvvm_read_ptx_sreg_envreg2, 76648}, // __nvvm_read_ptx_sreg_envreg2
-      {Intrinsic::nvvm_read_ptx_sreg_envreg20, 76677}, // __nvvm_read_ptx_sreg_envreg20
-      {Intrinsic::nvvm_read_ptx_sreg_envreg21, 76707}, // __nvvm_read_ptx_sreg_envreg21
-      {Intrinsic::nvvm_read_ptx_sreg_envreg22, 76737}, // __nvvm_read_ptx_sreg_envreg22
-      {Intrinsic::nvvm_read_ptx_sreg_envreg23, 76767}, // __nvvm_read_ptx_sreg_envreg23
-      {Intrinsic::nvvm_read_ptx_sreg_envreg24, 76797}, // __nvvm_read_ptx_sreg_envreg24
-      {Intrinsic::nvvm_read_ptx_sreg_envreg25, 76827}, // __nvvm_read_ptx_sreg_envreg25
-      {Intrinsic::nvvm_read_ptx_sreg_envreg26, 76857}, // __nvvm_read_ptx_sreg_envreg26
-      {Intrinsic::nvvm_read_ptx_sreg_envreg27, 76887}, // __nvvm_read_ptx_sreg_envreg27
-      {Intrinsic::nvvm_read_ptx_sreg_envreg28, 76917}, // __nvvm_read_ptx_sreg_envreg28
-      {Intrinsic::nvvm_read_ptx_sreg_envreg29, 76947}, // __nvvm_read_ptx_sreg_envreg29
-      {Intrinsic::nvvm_read_ptx_sreg_envreg3, 76977}, // __nvvm_read_ptx_sreg_envreg3
-      {Intrinsic::nvvm_read_ptx_sreg_envreg30, 77006}, // __nvvm_read_ptx_sreg_envreg30
-      {Intrinsic::nvvm_read_ptx_sreg_envreg31, 77036}, // __nvvm_read_ptx_sreg_envreg31
-      {Intrinsic::nvvm_read_ptx_sreg_envreg4, 77066}, // __nvvm_read_ptx_sreg_envreg4
-      {Intrinsic::nvvm_read_ptx_sreg_envreg5, 77095}, // __nvvm_read_ptx_sreg_envreg5
-      {Intrinsic::nvvm_read_ptx_sreg_envreg6, 77124}, // __nvvm_read_ptx_sreg_envreg6
-      {Intrinsic::nvvm_read_ptx_sreg_envreg7, 77153}, // __nvvm_read_ptx_sreg_envreg7
-      {Intrinsic::nvvm_read_ptx_sreg_envreg8, 77182}, // __nvvm_read_ptx_sreg_envreg8
-      {Intrinsic::nvvm_read_ptx_sreg_envreg9, 77211}, // __nvvm_read_ptx_sreg_envreg9
-      {Intrinsic::nvvm_read_ptx_sreg_gridid, 77240}, // __nvvm_read_ptx_sreg_gridid
-      {Intrinsic::nvvm_read_ptx_sreg_laneid, 77268}, // __nvvm_read_ptx_sreg_laneid
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_eq, 77296}, // __nvvm_read_ptx_sreg_lanemask_eq
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_ge, 77329}, // __nvvm_read_ptx_sreg_lanemask_ge
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_gt, 77362}, // __nvvm_read_ptx_sreg_lanemask_gt
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_le, 77395}, // __nvvm_read_ptx_sreg_lanemask_le
-      {Intrinsic::nvvm_read_ptx_sreg_lanemask_lt, 77428}, // __nvvm_read_ptx_sreg_lanemask_lt
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_w, 77461}, // __nvvm_read_ptx_sreg_nctaid_w
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_x, 77491}, // __nvvm_read_ptx_sreg_nctaid_x
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_y, 77521}, // __nvvm_read_ptx_sreg_nctaid_y
-      {Intrinsic::nvvm_read_ptx_sreg_nctaid_z, 77551}, // __nvvm_read_ptx_sreg_nctaid_z
-      {Intrinsic::nvvm_read_ptx_sreg_nsmid, 77581}, // __nvvm_read_ptx_sreg_nsmid
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_w, 77608}, // __nvvm_read_ptx_sreg_ntid_w
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_x, 77636}, // __nvvm_read_ptx_sreg_ntid_x
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_y, 77664}, // __nvvm_read_ptx_sreg_ntid_y
-      {Intrinsic::nvvm_read_ptx_sreg_ntid_z, 77692}, // __nvvm_read_ptx_sreg_ntid_z
-      {Intrinsic::nvvm_read_ptx_sreg_nwarpid, 77720}, // __nvvm_read_ptx_sreg_nwarpid
-      {Intrinsic::nvvm_read_ptx_sreg_pm0, 77749}, // __nvvm_read_ptx_sreg_pm0
-      {Intrinsic::nvvm_read_ptx_sreg_pm1, 77774}, // __nvvm_read_ptx_sreg_pm1
-      {Intrinsic::nvvm_read_ptx_sreg_pm2, 77799}, // __nvvm_read_ptx_sreg_pm2
-      {Intrinsic::nvvm_read_ptx_sreg_pm3, 77824}, // __nvvm_read_ptx_sreg_pm3
-      {Intrinsic::nvvm_read_ptx_sreg_smid, 77849}, // __nvvm_read_ptx_sreg_smid
-      {Intrinsic::nvvm_read_ptx_sreg_tid_w, 77875}, // __nvvm_read_ptx_sreg_tid_w
-      {Intrinsic::nvvm_read_ptx_sreg_tid_x, 77902}, // __nvvm_read_ptx_sreg_tid_x
-      {Intrinsic::nvvm_read_ptx_sreg_tid_y, 77929}, // __nvvm_read_ptx_sreg_tid_y
-      {Intrinsic::nvvm_read_ptx_sreg_tid_z, 77956}, // __nvvm_read_ptx_sreg_tid_z
-      {Intrinsic::nvvm_read_ptx_sreg_warpid, 77983}, // __nvvm_read_ptx_sreg_warpid
-      {Intrinsic::nvvm_read_ptx_sreg_warpsize, 78011}, // __nvvm_read_ptx_sreg_warpsize
-      {Intrinsic::nvvm_rotate_b32, 78041}, // __nvvm_rotate_b32
-      {Intrinsic::nvvm_rotate_b64, 78059}, // __nvvm_rotate_b64
-      {Intrinsic::nvvm_rotate_right_b64, 78077}, // __nvvm_rotate_right_b64
-      {Intrinsic::nvvm_round_d, 78101}, // __nvvm_round_d
-      {Intrinsic::nvvm_round_f, 78116}, // __nvvm_round_f
-      {Intrinsic::nvvm_round_ftz_f, 78131}, // __nvvm_round_ftz_f
-      {Intrinsic::nvvm_rsqrt_approx_d, 78150}, // __nvvm_rsqrt_approx_d
-      {Intrinsic::nvvm_rsqrt_approx_f, 78172}, // __nvvm_rsqrt_approx_f
-      {Intrinsic::nvvm_rsqrt_approx_ftz_f, 78194}, // __nvvm_rsqrt_approx_ftz_f
-      {Intrinsic::nvvm_sad_i, 78220}, // __nvvm_sad_i
-      {Intrinsic::nvvm_sad_ui, 78233}, // __nvvm_sad_ui
-      {Intrinsic::nvvm_saturate_d, 78247}, // __nvvm_saturate_d
-      {Intrinsic::nvvm_saturate_f, 78265}, // __nvvm_saturate_f
-      {Intrinsic::nvvm_saturate_ftz_f, 78283}, // __nvvm_saturate_ftz_f
-      {Intrinsic::nvvm_shfl_bfly_f32, 78305}, // __nvvm_shfl_bfly_f32
-      {Intrinsic::nvvm_shfl_bfly_i32, 78326}, // __nvvm_shfl_bfly_i32
-      {Intrinsic::nvvm_shfl_down_f32, 78347}, // __nvvm_shfl_down_f32
-      {Intrinsic::nvvm_shfl_down_i32, 78368}, // __nvvm_shfl_down_i32
-      {Intrinsic::nvvm_shfl_idx_f32, 78389}, // __nvvm_shfl_idx_f32
-      {Intrinsic::nvvm_shfl_idx_i32, 78409}, // __nvvm_shfl_idx_i32
-      {Intrinsic::nvvm_shfl_sync_bfly_f32, 78429}, // __nvvm_shfl_sync_bfly_f32
-      {Intrinsic::nvvm_shfl_sync_bfly_i32, 78455}, // __nvvm_shfl_sync_bfly_i32
-      {Intrinsic::nvvm_shfl_sync_down_f32, 78481}, // __nvvm_shfl_sync_down_f32
-      {Intrinsic::nvvm_shfl_sync_down_i32, 78507}, // __nvvm_shfl_sync_down_i32
-      {Intrinsic::nvvm_shfl_sync_idx_f32, 78533}, // __nvvm_shfl_sync_idx_f32
-      {Intrinsic::nvvm_shfl_sync_idx_i32, 78558}, // __nvvm_shfl_sync_idx_i32
-      {Intrinsic::nvvm_shfl_sync_up_f32, 78583}, // __nvvm_shfl_sync_up_f32
-      {Intrinsic::nvvm_shfl_sync_up_i32, 78607}, // __nvvm_shfl_sync_up_i32
-      {Intrinsic::nvvm_shfl_up_f32, 78631}, // __nvvm_shfl_up_f32
-      {Intrinsic::nvvm_shfl_up_i32, 78650}, // __nvvm_shfl_up_i32
-      {Intrinsic::nvvm_sin_approx_f, 78669}, // __nvvm_sin_approx_f
-      {Intrinsic::nvvm_sin_approx_ftz_f, 78689}, // __nvvm_sin_approx_ftz_f
-      {Intrinsic::nvvm_sqrt_approx_f, 78713}, // __nvvm_sqrt_approx_f
-      {Intrinsic::nvvm_sqrt_approx_ftz_f, 78734}, // __nvvm_sqrt_approx_ftz_f
-      {Intrinsic::nvvm_sqrt_f, 78759}, // __nvvm_sqrt_f
-      {Intrinsic::nvvm_sqrt_rm_d, 78773}, // __nvvm_sqrt_rm_d
-      {Intrinsic::nvvm_sqrt_rm_f, 78790}, // __nvvm_sqrt_rm_f
-      {Intrinsic::nvvm_sqrt_rm_ftz_f, 78807}, // __nvvm_sqrt_rm_ftz_f
-      {Intrinsic::nvvm_sqrt_rn_d, 78828}, // __nvvm_sqrt_rn_d
-      {Intrinsic::nvvm_sqrt_rn_f, 78845}, // __nvvm_sqrt_rn_f
-      {Intrinsic::nvvm_sqrt_rn_ftz_f, 78862}, // __nvvm_sqrt_rn_ftz_f
-      {Intrinsic::nvvm_sqrt_rp_d, 78883}, // __nvvm_sqrt_rp_d
-      {Intrinsic::nvvm_sqrt_rp_f, 78900}, // __nvvm_sqrt_rp_f
-      {Intrinsic::nvvm_sqrt_rp_ftz_f, 78917}, // __nvvm_sqrt_rp_ftz_f
-      {Intrinsic::nvvm_sqrt_rz_d, 78938}, // __nvvm_sqrt_rz_d
-      {Intrinsic::nvvm_sqrt_rz_f, 78955}, // __nvvm_sqrt_rz_f
-      {Intrinsic::nvvm_sqrt_rz_ftz_f, 78972}, // __nvvm_sqrt_rz_ftz_f
-      {Intrinsic::nvvm_suq_array_size, 78993}, // __nvvm_suq_array_size
-      {Intrinsic::nvvm_suq_channel_data_type, 79015}, // __nvvm_suq_channel_data_type
-      {Intrinsic::nvvm_suq_channel_order, 79044}, // __nvvm_suq_channel_order
-      {Intrinsic::nvvm_suq_depth, 79069}, // __nvvm_suq_depth
-      {Intrinsic::nvvm_suq_height, 79086}, // __nvvm_suq_height
-      {Intrinsic::nvvm_suq_width, 79104}, // __nvvm_suq_width
-      {Intrinsic::nvvm_sust_b_1d_array_i16_clamp, 79121}, // __nvvm_sust_b_1d_array_i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i16_trap, 79154}, // __nvvm_sust_b_1d_array_i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i16_zero, 79186}, // __nvvm_sust_b_1d_array_i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i32_clamp, 79218}, // __nvvm_sust_b_1d_array_i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i32_trap, 79251}, // __nvvm_sust_b_1d_array_i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i32_zero, 79283}, // __nvvm_sust_b_1d_array_i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i64_clamp, 79315}, // __nvvm_sust_b_1d_array_i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i64_trap, 79348}, // __nvvm_sust_b_1d_array_i64_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i64_zero, 79380}, // __nvvm_sust_b_1d_array_i64_zero
-      {Intrinsic::nvvm_sust_b_1d_array_i8_clamp, 79412}, // __nvvm_sust_b_1d_array_i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_i8_trap, 79444}, // __nvvm_sust_b_1d_array_i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_i8_zero, 79475}, // __nvvm_sust_b_1d_array_i8_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_clamp, 79506}, // __nvvm_sust_b_1d_array_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_trap, 79541}, // __nvvm_sust_b_1d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i16_zero, 79575}, // __nvvm_sust_b_1d_array_v2i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_clamp, 79609}, // __nvvm_sust_b_1d_array_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_trap, 79644}, // __nvvm_sust_b_1d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i32_zero, 79678}, // __nvvm_sust_b_1d_array_v2i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_clamp, 79712}, // __nvvm_sust_b_1d_array_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_trap, 79747}, // __nvvm_sust_b_1d_array_v2i64_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i64_zero, 79781}, // __nvvm_sust_b_1d_array_v2i64_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_clamp, 79815}, // __nvvm_sust_b_1d_array_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_trap, 79849}, // __nvvm_sust_b_1d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v2i8_zero, 79882}, // __nvvm_sust_b_1d_array_v2i8_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_clamp, 79915}, // __nvvm_sust_b_1d_array_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_trap, 79950}, // __nvvm_sust_b_1d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i16_zero, 79984}, // __nvvm_sust_b_1d_array_v4i16_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_clamp, 80018}, // __nvvm_sust_b_1d_array_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_trap, 80053}, // __nvvm_sust_b_1d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i32_zero, 80087}, // __nvvm_sust_b_1d_array_v4i32_zero
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_clamp, 80121}, // __nvvm_sust_b_1d_array_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_trap, 80155}, // __nvvm_sust_b_1d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_b_1d_array_v4i8_zero, 80188}, // __nvvm_sust_b_1d_array_v4i8_zero
-      {Intrinsic::nvvm_sust_b_1d_i16_clamp, 80221}, // __nvvm_sust_b_1d_i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_i16_trap, 80248}, // __nvvm_sust_b_1d_i16_trap
-      {Intrinsic::nvvm_sust_b_1d_i16_zero, 80274}, // __nvvm_sust_b_1d_i16_zero
-      {Intrinsic::nvvm_sust_b_1d_i32_clamp, 80300}, // __nvvm_sust_b_1d_i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_i32_trap, 80327}, // __nvvm_sust_b_1d_i32_trap
-      {Intrinsic::nvvm_sust_b_1d_i32_zero, 80353}, // __nvvm_sust_b_1d_i32_zero
-      {Intrinsic::nvvm_sust_b_1d_i64_clamp, 80379}, // __nvvm_sust_b_1d_i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_i64_trap, 80406}, // __nvvm_sust_b_1d_i64_trap
-      {Intrinsic::nvvm_sust_b_1d_i64_zero, 80432}, // __nvvm_sust_b_1d_i64_zero
-      {Intrinsic::nvvm_sust_b_1d_i8_clamp, 80458}, // __nvvm_sust_b_1d_i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_i8_trap, 80484}, // __nvvm_sust_b_1d_i8_trap
-      {Intrinsic::nvvm_sust_b_1d_i8_zero, 80509}, // __nvvm_sust_b_1d_i8_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i16_clamp, 80534}, // __nvvm_sust_b_1d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i16_trap, 80563}, // __nvvm_sust_b_1d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i16_zero, 80591}, // __nvvm_sust_b_1d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i32_clamp, 80619}, // __nvvm_sust_b_1d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i32_trap, 80648}, // __nvvm_sust_b_1d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i32_zero, 80676}, // __nvvm_sust_b_1d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i64_clamp, 80704}, // __nvvm_sust_b_1d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i64_trap, 80733}, // __nvvm_sust_b_1d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i64_zero, 80761}, // __nvvm_sust_b_1d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_1d_v2i8_clamp, 80789}, // __nvvm_sust_b_1d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_v2i8_trap, 80817}, // __nvvm_sust_b_1d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_1d_v2i8_zero, 80844}, // __nvvm_sust_b_1d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i16_clamp, 80871}, // __nvvm_sust_b_1d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i16_trap, 80900}, // __nvvm_sust_b_1d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i16_zero, 80928}, // __nvvm_sust_b_1d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i32_clamp, 80956}, // __nvvm_sust_b_1d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i32_trap, 80985}, // __nvvm_sust_b_1d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i32_zero, 81013}, // __nvvm_sust_b_1d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_1d_v4i8_clamp, 81041}, // __nvvm_sust_b_1d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_1d_v4i8_trap, 81069}, // __nvvm_sust_b_1d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_1d_v4i8_zero, 81096}, // __nvvm_sust_b_1d_v4i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i16_clamp, 81123}, // __nvvm_sust_b_2d_array_i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i16_trap, 81156}, // __nvvm_sust_b_2d_array_i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i16_zero, 81188}, // __nvvm_sust_b_2d_array_i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i32_clamp, 81220}, // __nvvm_sust_b_2d_array_i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i32_trap, 81253}, // __nvvm_sust_b_2d_array_i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i32_zero, 81285}, // __nvvm_sust_b_2d_array_i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i64_clamp, 81317}, // __nvvm_sust_b_2d_array_i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i64_trap, 81350}, // __nvvm_sust_b_2d_array_i64_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i64_zero, 81382}, // __nvvm_sust_b_2d_array_i64_zero
-      {Intrinsic::nvvm_sust_b_2d_array_i8_clamp, 81414}, // __nvvm_sust_b_2d_array_i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_i8_trap, 81446}, // __nvvm_sust_b_2d_array_i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_i8_zero, 81477}, // __nvvm_sust_b_2d_array_i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_clamp, 81508}, // __nvvm_sust_b_2d_array_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_trap, 81543}, // __nvvm_sust_b_2d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i16_zero, 81577}, // __nvvm_sust_b_2d_array_v2i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_clamp, 81611}, // __nvvm_sust_b_2d_array_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_trap, 81646}, // __nvvm_sust_b_2d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i32_zero, 81680}, // __nvvm_sust_b_2d_array_v2i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_clamp, 81714}, // __nvvm_sust_b_2d_array_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_trap, 81749}, // __nvvm_sust_b_2d_array_v2i64_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i64_zero, 81783}, // __nvvm_sust_b_2d_array_v2i64_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_clamp, 81817}, // __nvvm_sust_b_2d_array_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_trap, 81851}, // __nvvm_sust_b_2d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v2i8_zero, 81884}, // __nvvm_sust_b_2d_array_v2i8_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_clamp, 81917}, // __nvvm_sust_b_2d_array_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_trap, 81952}, // __nvvm_sust_b_2d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i16_zero, 81986}, // __nvvm_sust_b_2d_array_v4i16_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_clamp, 82020}, // __nvvm_sust_b_2d_array_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_trap, 82055}, // __nvvm_sust_b_2d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i32_zero, 82089}, // __nvvm_sust_b_2d_array_v4i32_zero
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_clamp, 82123}, // __nvvm_sust_b_2d_array_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_trap, 82157}, // __nvvm_sust_b_2d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_b_2d_array_v4i8_zero, 82190}, // __nvvm_sust_b_2d_array_v4i8_zero
-      {Intrinsic::nvvm_sust_b_2d_i16_clamp, 82223}, // __nvvm_sust_b_2d_i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_i16_trap, 82250}, // __nvvm_sust_b_2d_i16_trap
-      {Intrinsic::nvvm_sust_b_2d_i16_zero, 82276}, // __nvvm_sust_b_2d_i16_zero
-      {Intrinsic::nvvm_sust_b_2d_i32_clamp, 82302}, // __nvvm_sust_b_2d_i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_i32_trap, 82329}, // __nvvm_sust_b_2d_i32_trap
-      {Intrinsic::nvvm_sust_b_2d_i32_zero, 82355}, // __nvvm_sust_b_2d_i32_zero
-      {Intrinsic::nvvm_sust_b_2d_i64_clamp, 82381}, // __nvvm_sust_b_2d_i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_i64_trap, 82408}, // __nvvm_sust_b_2d_i64_trap
-      {Intrinsic::nvvm_sust_b_2d_i64_zero, 82434}, // __nvvm_sust_b_2d_i64_zero
-      {Intrinsic::nvvm_sust_b_2d_i8_clamp, 82460}, // __nvvm_sust_b_2d_i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_i8_trap, 82486}, // __nvvm_sust_b_2d_i8_trap
-      {Intrinsic::nvvm_sust_b_2d_i8_zero, 82511}, // __nvvm_sust_b_2d_i8_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i16_clamp, 82536}, // __nvvm_sust_b_2d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i16_trap, 82565}, // __nvvm_sust_b_2d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i16_zero, 82593}, // __nvvm_sust_b_2d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i32_clamp, 82621}, // __nvvm_sust_b_2d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i32_trap, 82650}, // __nvvm_sust_b_2d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i32_zero, 82678}, // __nvvm_sust_b_2d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i64_clamp, 82706}, // __nvvm_sust_b_2d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i64_trap, 82735}, // __nvvm_sust_b_2d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i64_zero, 82763}, // __nvvm_sust_b_2d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_2d_v2i8_clamp, 82791}, // __nvvm_sust_b_2d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_v2i8_trap, 82819}, // __nvvm_sust_b_2d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_2d_v2i8_zero, 82846}, // __nvvm_sust_b_2d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i16_clamp, 82873}, // __nvvm_sust_b_2d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i16_trap, 82902}, // __nvvm_sust_b_2d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i16_zero, 82930}, // __nvvm_sust_b_2d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i32_clamp, 82958}, // __nvvm_sust_b_2d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i32_trap, 82987}, // __nvvm_sust_b_2d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i32_zero, 83015}, // __nvvm_sust_b_2d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_2d_v4i8_clamp, 83043}, // __nvvm_sust_b_2d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_2d_v4i8_trap, 83071}, // __nvvm_sust_b_2d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_2d_v4i8_zero, 83098}, // __nvvm_sust_b_2d_v4i8_zero
-      {Intrinsic::nvvm_sust_b_3d_i16_clamp, 83125}, // __nvvm_sust_b_3d_i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_i16_trap, 83152}, // __nvvm_sust_b_3d_i16_trap
-      {Intrinsic::nvvm_sust_b_3d_i16_zero, 83178}, // __nvvm_sust_b_3d_i16_zero
-      {Intrinsic::nvvm_sust_b_3d_i32_clamp, 83204}, // __nvvm_sust_b_3d_i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_i32_trap, 83231}, // __nvvm_sust_b_3d_i32_trap
-      {Intrinsic::nvvm_sust_b_3d_i32_zero, 83257}, // __nvvm_sust_b_3d_i32_zero
-      {Intrinsic::nvvm_sust_b_3d_i64_clamp, 83283}, // __nvvm_sust_b_3d_i64_clamp
-      {Intrinsic::nvvm_sust_b_3d_i64_trap, 83310}, // __nvvm_sust_b_3d_i64_trap
-      {Intrinsic::nvvm_sust_b_3d_i64_zero, 83336}, // __nvvm_sust_b_3d_i64_zero
-      {Intrinsic::nvvm_sust_b_3d_i8_clamp, 83362}, // __nvvm_sust_b_3d_i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_i8_trap, 83388}, // __nvvm_sust_b_3d_i8_trap
-      {Intrinsic::nvvm_sust_b_3d_i8_zero, 83413}, // __nvvm_sust_b_3d_i8_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i16_clamp, 83438}, // __nvvm_sust_b_3d_v2i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i16_trap, 83467}, // __nvvm_sust_b_3d_v2i16_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i16_zero, 83495}, // __nvvm_sust_b_3d_v2i16_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i32_clamp, 83523}, // __nvvm_sust_b_3d_v2i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i32_trap, 83552}, // __nvvm_sust_b_3d_v2i32_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i32_zero, 83580}, // __nvvm_sust_b_3d_v2i32_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i64_clamp, 83608}, // __nvvm_sust_b_3d_v2i64_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i64_trap, 83637}, // __nvvm_sust_b_3d_v2i64_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i64_zero, 83665}, // __nvvm_sust_b_3d_v2i64_zero
-      {Intrinsic::nvvm_sust_b_3d_v2i8_clamp, 83693}, // __nvvm_sust_b_3d_v2i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_v2i8_trap, 83721}, // __nvvm_sust_b_3d_v2i8_trap
-      {Intrinsic::nvvm_sust_b_3d_v2i8_zero, 83748}, // __nvvm_sust_b_3d_v2i8_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i16_clamp, 83775}, // __nvvm_sust_b_3d_v4i16_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i16_trap, 83804}, // __nvvm_sust_b_3d_v4i16_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i16_zero, 83832}, // __nvvm_sust_b_3d_v4i16_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i32_clamp, 83860}, // __nvvm_sust_b_3d_v4i32_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i32_trap, 83889}, // __nvvm_sust_b_3d_v4i32_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i32_zero, 83917}, // __nvvm_sust_b_3d_v4i32_zero
-      {Intrinsic::nvvm_sust_b_3d_v4i8_clamp, 83945}, // __nvvm_sust_b_3d_v4i8_clamp
-      {Intrinsic::nvvm_sust_b_3d_v4i8_trap, 83973}, // __nvvm_sust_b_3d_v4i8_trap
-      {Intrinsic::nvvm_sust_b_3d_v4i8_zero, 84000}, // __nvvm_sust_b_3d_v4i8_zero
-      {Intrinsic::nvvm_sust_p_1d_array_i16_trap, 84027}, // __nvvm_sust_p_1d_array_i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_i32_trap, 84059}, // __nvvm_sust_p_1d_array_i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_i8_trap, 84091}, // __nvvm_sust_p_1d_array_i8_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i16_trap, 84122}, // __nvvm_sust_p_1d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i32_trap, 84156}, // __nvvm_sust_p_1d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v2i8_trap, 84190}, // __nvvm_sust_p_1d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i16_trap, 84223}, // __nvvm_sust_p_1d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i32_trap, 84257}, // __nvvm_sust_p_1d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_p_1d_array_v4i8_trap, 84291}, // __nvvm_sust_p_1d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_p_1d_i16_trap, 84324}, // __nvvm_sust_p_1d_i16_trap
-      {Intrinsic::nvvm_sust_p_1d_i32_trap, 84350}, // __nvvm_sust_p_1d_i32_trap
-      {Intrinsic::nvvm_sust_p_1d_i8_trap, 84376}, // __nvvm_sust_p_1d_i8_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i16_trap, 84401}, // __nvvm_sust_p_1d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i32_trap, 84429}, // __nvvm_sust_p_1d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_1d_v2i8_trap, 84457}, // __nvvm_sust_p_1d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i16_trap, 84484}, // __nvvm_sust_p_1d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i32_trap, 84512}, // __nvvm_sust_p_1d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_1d_v4i8_trap, 84540}, // __nvvm_sust_p_1d_v4i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i16_trap, 84567}, // __nvvm_sust_p_2d_array_i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i32_trap, 84599}, // __nvvm_sust_p_2d_array_i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_i8_trap, 84631}, // __nvvm_sust_p_2d_array_i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i16_trap, 84662}, // __nvvm_sust_p_2d_array_v2i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i32_trap, 84696}, // __nvvm_sust_p_2d_array_v2i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v2i8_trap, 84730}, // __nvvm_sust_p_2d_array_v2i8_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i16_trap, 84763}, // __nvvm_sust_p_2d_array_v4i16_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i32_trap, 84797}, // __nvvm_sust_p_2d_array_v4i32_trap
-      {Intrinsic::nvvm_sust_p_2d_array_v4i8_trap, 84831}, // __nvvm_sust_p_2d_array_v4i8_trap
-      {Intrinsic::nvvm_sust_p_2d_i16_trap, 84864}, // __nvvm_sust_p_2d_i16_trap
-      {Intrinsic::nvvm_sust_p_2d_i32_trap, 84890}, // __nvvm_sust_p_2d_i32_trap
-      {Intrinsic::nvvm_sust_p_2d_i8_trap, 84916}, // __nvvm_sust_p_2d_i8_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i16_trap, 84941}, // __nvvm_sust_p_2d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i32_trap, 84969}, // __nvvm_sust_p_2d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_2d_v2i8_trap, 84997}, // __nvvm_sust_p_2d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i16_trap, 85024}, // __nvvm_sust_p_2d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i32_trap, 85052}, // __nvvm_sust_p_2d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_2d_v4i8_trap, 85080}, // __nvvm_sust_p_2d_v4i8_trap
-      {Intrinsic::nvvm_sust_p_3d_i16_trap, 85107}, // __nvvm_sust_p_3d_i16_trap
-      {Intrinsic::nvvm_sust_p_3d_i32_trap, 85133}, // __nvvm_sust_p_3d_i32_trap
-      {Intrinsic::nvvm_sust_p_3d_i8_trap, 85159}, // __nvvm_sust_p_3d_i8_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i16_trap, 85184}, // __nvvm_sust_p_3d_v2i16_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i32_trap, 85212}, // __nvvm_sust_p_3d_v2i32_trap
-      {Intrinsic::nvvm_sust_p_3d_v2i8_trap, 85240}, // __nvvm_sust_p_3d_v2i8_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i16_trap, 85267}, // __nvvm_sust_p_3d_v4i16_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i32_trap, 85295}, // __nvvm_sust_p_3d_v4i32_trap
-      {Intrinsic::nvvm_sust_p_3d_v4i8_trap, 85323}, // __nvvm_sust_p_3d_v4i8_trap
-      {Intrinsic::nvvm_swap_lo_hi_b64, 85350}, // __nvvm_swap_lo_hi_b64
-      {Intrinsic::nvvm_trunc_d, 85372}, // __nvvm_trunc_d
-      {Intrinsic::nvvm_trunc_f, 85387}, // __nvvm_trunc_f
-      {Intrinsic::nvvm_trunc_ftz_f, 85402}, // __nvvm_trunc_ftz_f
-      {Intrinsic::nvvm_txq_array_size, 85421}, // __nvvm_txq_array_size
-      {Intrinsic::nvvm_txq_channel_data_type, 85443}, // __nvvm_txq_channel_data_type
-      {Intrinsic::nvvm_txq_channel_order, 85472}, // __nvvm_txq_channel_order
-      {Intrinsic::nvvm_txq_depth, 85497}, // __nvvm_txq_depth
-      {Intrinsic::nvvm_txq_height, 85514}, // __nvvm_txq_height
-      {Intrinsic::nvvm_txq_num_mipmap_levels, 85532}, // __nvvm_txq_num_mipmap_levels
-      {Intrinsic::nvvm_txq_num_samples, 85561}, // __nvvm_txq_num_samples
-      {Intrinsic::nvvm_txq_width, 85584}, // __nvvm_txq_width
-      {Intrinsic::nvvm_ui2d_rm, 85601}, // __nvvm_ui2d_rm
-      {Intrinsic::nvvm_ui2d_rn, 85616}, // __nvvm_ui2d_rn
-      {Intrinsic::nvvm_ui2d_rp, 85631}, // __nvvm_ui2d_rp
-      {Intrinsic::nvvm_ui2d_rz, 85646}, // __nvvm_ui2d_rz
-      {Intrinsic::nvvm_ui2f_rm, 85661}, // __nvvm_ui2f_rm
-      {Intrinsic::nvvm_ui2f_rn, 85676}, // __nvvm_ui2f_rn
-      {Intrinsic::nvvm_ui2f_rp, 85691}, // __nvvm_ui2f_rp
-      {Intrinsic::nvvm_ui2f_rz, 85706}, // __nvvm_ui2f_rz
-      {Intrinsic::nvvm_ull2d_rm, 85721}, // __nvvm_ull2d_rm
-      {Intrinsic::nvvm_ull2d_rn, 85737}, // __nvvm_ull2d_rn
-      {Intrinsic::nvvm_ull2d_rp, 85753}, // __nvvm_ull2d_rp
-      {Intrinsic::nvvm_ull2d_rz, 85769}, // __nvvm_ull2d_rz
-      {Intrinsic::nvvm_ull2f_rm, 85785}, // __nvvm_ull2f_rm
-      {Intrinsic::nvvm_ull2f_rn, 85801}, // __nvvm_ull2f_rn
-      {Intrinsic::nvvm_ull2f_rp, 85817}, // __nvvm_ull2f_rp
-      {Intrinsic::nvvm_ull2f_rz, 85833}, // __nvvm_ull2f_rz
-      {Intrinsic::nvvm_vote_all, 85849}, // __nvvm_vote_all
-      {Intrinsic::nvvm_vote_all_sync, 85865}, // __nvvm_vote_all_sync
-      {Intrinsic::nvvm_vote_any, 85886}, // __nvvm_vote_any
-      {Intrinsic::nvvm_vote_any_sync, 85902}, // __nvvm_vote_any_sync
-      {Intrinsic::nvvm_vote_ballot, 85923}, // __nvvm_vote_ballot
-      {Intrinsic::nvvm_vote_ballot_sync, 85942}, // __nvvm_vote_ballot_sync
-      {Intrinsic::nvvm_vote_uni, 85966}, // __nvvm_vote_uni
-      {Intrinsic::nvvm_vote_uni_sync, 85982}, // __nvvm_vote_uni_sync
-      {Intrinsic::nvvm_barrier0, 73071}, // __syncthreads
-    };
-    auto I = std::lower_bound(std::begin(nvvmNames),
-                              std::end(nvvmNames),
-                              BuiltinNameStr);
-    if (I != std::end(nvvmNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "ppc") {
-    static const BuiltinEntry ppcNames[] = {
-      {Intrinsic::ppc_altivec_crypto_vcipher, 86003}, // __builtin_altivec_crypto_vcipher
-      {Intrinsic::ppc_altivec_crypto_vcipherlast, 86036}, // __builtin_altivec_crypto_vcipherlast
-      {Intrinsic::ppc_altivec_crypto_vncipher, 86073}, // __builtin_altivec_crypto_vncipher
-      {Intrinsic::ppc_altivec_crypto_vncipherlast, 86107}, // __builtin_altivec_crypto_vncipherlast
-      {Intrinsic::ppc_altivec_crypto_vpermxor, 86145}, // __builtin_altivec_crypto_vpermxor
-      {Intrinsic::ppc_altivec_crypto_vpmsumb, 86179}, // __builtin_altivec_crypto_vpmsumb
-      {Intrinsic::ppc_altivec_crypto_vpmsumd, 86212}, // __builtin_altivec_crypto_vpmsumd
-      {Intrinsic::ppc_altivec_crypto_vpmsumh, 86245}, // __builtin_altivec_crypto_vpmsumh
-      {Intrinsic::ppc_altivec_crypto_vpmsumw, 86278}, // __builtin_altivec_crypto_vpmsumw
-      {Intrinsic::ppc_altivec_crypto_vsbox, 86311}, // __builtin_altivec_crypto_vsbox
-      {Intrinsic::ppc_altivec_crypto_vshasigmad, 86342}, // __builtin_altivec_crypto_vshasigmad
-      {Intrinsic::ppc_altivec_crypto_vshasigmaw, 86378}, // __builtin_altivec_crypto_vshasigmaw
-      {Intrinsic::ppc_altivec_dss, 86414}, // __builtin_altivec_dss
-      {Intrinsic::ppc_altivec_dssall, 86436}, // __builtin_altivec_dssall
-      {Intrinsic::ppc_altivec_dst, 86461}, // __builtin_altivec_dst
-      {Intrinsic::ppc_altivec_dstst, 86483}, // __builtin_altivec_dstst
-      {Intrinsic::ppc_altivec_dststt, 86507}, // __builtin_altivec_dststt
-      {Intrinsic::ppc_altivec_dstt, 86532}, // __builtin_altivec_dstt
-      {Intrinsic::ppc_altivec_mfvscr, 86555}, // __builtin_altivec_mfvscr
-      {Intrinsic::ppc_altivec_mtvscr, 86580}, // __builtin_altivec_mtvscr
-      {Intrinsic::ppc_altivec_vabsdub, 86605}, // __builtin_altivec_vabsdub
-      {Intrinsic::ppc_altivec_vabsduh, 86631}, // __builtin_altivec_vabsduh
-      {Intrinsic::ppc_altivec_vabsduw, 86657}, // __builtin_altivec_vabsduw
-      {Intrinsic::ppc_altivec_vaddcuq, 86683}, // __builtin_altivec_vaddcuq
-      {Intrinsic::ppc_altivec_vaddcuw, 86709}, // __builtin_altivec_vaddcuw
-      {Intrinsic::ppc_altivec_vaddecuq, 86735}, // __builtin_altivec_vaddecuq
-      {Intrinsic::ppc_altivec_vaddeuqm, 86762}, // __builtin_altivec_vaddeuqm
-      {Intrinsic::ppc_altivec_vaddsbs, 86789}, // __builtin_altivec_vaddsbs
-      {Intrinsic::ppc_altivec_vaddshs, 86815}, // __builtin_altivec_vaddshs
-      {Intrinsic::ppc_altivec_vaddsws, 86841}, // __builtin_altivec_vaddsws
-      {Intrinsic::ppc_altivec_vaddubs, 86867}, // __builtin_altivec_vaddubs
-      {Intrinsic::ppc_altivec_vadduhs, 86893}, // __builtin_altivec_vadduhs
-      {Intrinsic::ppc_altivec_vadduws, 86919}, // __builtin_altivec_vadduws
-      {Intrinsic::ppc_altivec_vavgsb, 86945}, // __builtin_altivec_vavgsb
-      {Intrinsic::ppc_altivec_vavgsh, 86970}, // __builtin_altivec_vavgsh
-      {Intrinsic::ppc_altivec_vavgsw, 86995}, // __builtin_altivec_vavgsw
-      {Intrinsic::ppc_altivec_vavgub, 87020}, // __builtin_altivec_vavgub
-      {Intrinsic::ppc_altivec_vavguh, 87045}, // __builtin_altivec_vavguh
-      {Intrinsic::ppc_altivec_vavguw, 87070}, // __builtin_altivec_vavguw
-      {Intrinsic::ppc_altivec_vbpermq, 87095}, // __builtin_altivec_vbpermq
-      {Intrinsic::ppc_altivec_vcfsx, 87121}, // __builtin_altivec_vcfsx
-      {Intrinsic::ppc_altivec_vcfux, 87145}, // __builtin_altivec_vcfux
-      {Intrinsic::ppc_altivec_vclzlsbb, 87169}, // __builtin_altivec_vclzlsbb
-      {Intrinsic::ppc_altivec_vcmpbfp, 87196}, // __builtin_altivec_vcmpbfp
-      {Intrinsic::ppc_altivec_vcmpbfp_p, 87222}, // __builtin_altivec_vcmpbfp_p
-      {Intrinsic::ppc_altivec_vcmpeqfp, 87250}, // __builtin_altivec_vcmpeqfp
-      {Intrinsic::ppc_altivec_vcmpeqfp_p, 87277}, // __builtin_altivec_vcmpeqfp_p
-      {Intrinsic::ppc_altivec_vcmpequb, 87306}, // __builtin_altivec_vcmpequb
-      {Intrinsic::ppc_altivec_vcmpequb_p, 87333}, // __builtin_altivec_vcmpequb_p
-      {Intrinsic::ppc_altivec_vcmpequd, 87362}, // __builtin_altivec_vcmpequd
-      {Intrinsic::ppc_altivec_vcmpequd_p, 87389}, // __builtin_altivec_vcmpequd_p
-      {Intrinsic::ppc_altivec_vcmpequh, 87418}, // __builtin_altivec_vcmpequh
-      {Intrinsic::ppc_altivec_vcmpequh_p, 87445}, // __builtin_altivec_vcmpequh_p
-      {Intrinsic::ppc_altivec_vcmpequw, 87474}, // __builtin_altivec_vcmpequw
-      {Intrinsic::ppc_altivec_vcmpequw_p, 87501}, // __builtin_altivec_vcmpequw_p
-      {Intrinsic::ppc_altivec_vcmpgefp, 87530}, // __builtin_altivec_vcmpgefp
-      {Intrinsic::ppc_altivec_vcmpgefp_p, 87557}, // __builtin_altivec_vcmpgefp_p
-      {Intrinsic::ppc_altivec_vcmpgtfp, 87586}, // __builtin_altivec_vcmpgtfp
-      {Intrinsic::ppc_altivec_vcmpgtfp_p, 87613}, // __builtin_altivec_vcmpgtfp_p
-      {Intrinsic::ppc_altivec_vcmpgtsb, 87642}, // __builtin_altivec_vcmpgtsb
-      {Intrinsic::ppc_altivec_vcmpgtsb_p, 87669}, // __builtin_altivec_vcmpgtsb_p
-      {Intrinsic::ppc_altivec_vcmpgtsd, 87698}, // __builtin_altivec_vcmpgtsd
-      {Intrinsic::ppc_altivec_vcmpgtsd_p, 87725}, // __builtin_altivec_vcmpgtsd_p
-      {Intrinsic::ppc_altivec_vcmpgtsh, 87754}, // __builtin_altivec_vcmpgtsh
-      {Intrinsic::ppc_altivec_vcmpgtsh_p, 87781}, // __builtin_altivec_vcmpgtsh_p
-      {Intrinsic::ppc_altivec_vcmpgtsw, 87810}, // __builtin_altivec_vcmpgtsw
-      {Intrinsic::ppc_altivec_vcmpgtsw_p, 87837}, // __builtin_altivec_vcmpgtsw_p
-      {Intrinsic::ppc_altivec_vcmpgtub, 87866}, // __builtin_altivec_vcmpgtub
-      {Intrinsic::ppc_altivec_vcmpgtub_p, 87893}, // __builtin_altivec_vcmpgtub_p
-      {Intrinsic::ppc_altivec_vcmpgtud, 87922}, // __builtin_altivec_vcmpgtud
-      {Intrinsic::ppc_altivec_vcmpgtud_p, 87949}, // __builtin_altivec_vcmpgtud_p
-      {Intrinsic::ppc_altivec_vcmpgtuh, 87978}, // __builtin_altivec_vcmpgtuh
-      {Intrinsic::ppc_altivec_vcmpgtuh_p, 88005}, // __builtin_altivec_vcmpgtuh_p
-      {Intrinsic::ppc_altivec_vcmpgtuw, 88034}, // __builtin_altivec_vcmpgtuw
-      {Intrinsic::ppc_altivec_vcmpgtuw_p, 88061}, // __builtin_altivec_vcmpgtuw_p
-      {Intrinsic::ppc_altivec_vcmpneb, 88090}, // __builtin_altivec_vcmpneb
-      {Intrinsic::ppc_altivec_vcmpneb_p, 88116}, // __builtin_altivec_vcmpneb_p
-      {Intrinsic::ppc_altivec_vcmpneh, 88144}, // __builtin_altivec_vcmpneh
-      {Intrinsic::ppc_altivec_vcmpneh_p, 88170}, // __builtin_altivec_vcmpneh_p
-      {Intrinsic::ppc_altivec_vcmpnew, 88198}, // __builtin_altivec_vcmpnew
-      {Intrinsic::ppc_altivec_vcmpnew_p, 88224}, // __builtin_altivec_vcmpnew_p
-      {Intrinsic::ppc_altivec_vcmpnezb, 88252}, // __builtin_altivec_vcmpnezb
-      {Intrinsic::ppc_altivec_vcmpnezb_p, 88279}, // __builtin_altivec_vcmpnezb_p
-      {Intrinsic::ppc_altivec_vcmpnezh, 88308}, // __builtin_altivec_vcmpnezh
-      {Intrinsic::ppc_altivec_vcmpnezh_p, 88335}, // __builtin_altivec_vcmpnezh_p
-      {Intrinsic::ppc_altivec_vcmpnezw, 88364}, // __builtin_altivec_vcmpnezw
-      {Intrinsic::ppc_altivec_vcmpnezw_p, 88391}, // __builtin_altivec_vcmpnezw_p
-      {Intrinsic::ppc_altivec_vctsxs, 88420}, // __builtin_altivec_vctsxs
-      {Intrinsic::ppc_altivec_vctuxs, 88445}, // __builtin_altivec_vctuxs
-      {Intrinsic::ppc_altivec_vctzlsbb, 88470}, // __builtin_altivec_vctzlsbb
-      {Intrinsic::ppc_altivec_vexptefp, 88497}, // __builtin_altivec_vexptefp
-      {Intrinsic::ppc_altivec_vgbbd, 88524}, // __builtin_altivec_vgbbd
-      {Intrinsic::ppc_altivec_vlogefp, 88548}, // __builtin_altivec_vlogefp
-      {Intrinsic::ppc_altivec_vmaddfp, 88574}, // __builtin_altivec_vmaddfp
-      {Intrinsic::ppc_altivec_vmaxfp, 88600}, // __builtin_altivec_vmaxfp
-      {Intrinsic::ppc_altivec_vmaxsb, 88625}, // __builtin_altivec_vmaxsb
-      {Intrinsic::ppc_altivec_vmaxsd, 88650}, // __builtin_altivec_vmaxsd
-      {Intrinsic::ppc_altivec_vmaxsh, 88675}, // __builtin_altivec_vmaxsh
-      {Intrinsic::ppc_altivec_vmaxsw, 88700}, // __builtin_altivec_vmaxsw
-      {Intrinsic::ppc_altivec_vmaxub, 88725}, // __builtin_altivec_vmaxub
-      {Intrinsic::ppc_altivec_vmaxud, 88750}, // __builtin_altivec_vmaxud
-      {Intrinsic::ppc_altivec_vmaxuh, 88775}, // __builtin_altivec_vmaxuh
-      {Intrinsic::ppc_altivec_vmaxuw, 88800}, // __builtin_altivec_vmaxuw
-      {Intrinsic::ppc_altivec_vmhaddshs, 88825}, // __builtin_altivec_vmhaddshs
-      {Intrinsic::ppc_altivec_vmhraddshs, 88853}, // __builtin_altivec_vmhraddshs
-      {Intrinsic::ppc_altivec_vminfp, 88882}, // __builtin_altivec_vminfp
-      {Intrinsic::ppc_altivec_vminsb, 88907}, // __builtin_altivec_vminsb
-      {Intrinsic::ppc_altivec_vminsd, 88932}, // __builtin_altivec_vminsd
-      {Intrinsic::ppc_altivec_vminsh, 88957}, // __builtin_altivec_vminsh
-      {Intrinsic::ppc_altivec_vminsw, 88982}, // __builtin_altivec_vminsw
-      {Intrinsic::ppc_altivec_vminub, 89007}, // __builtin_altivec_vminub
-      {Intrinsic::ppc_altivec_vminud, 89032}, // __builtin_altivec_vminud
-      {Intrinsic::ppc_altivec_vminuh, 89057}, // __builtin_altivec_vminuh
-      {Intrinsic::ppc_altivec_vminuw, 89082}, // __builtin_altivec_vminuw
-      {Intrinsic::ppc_altivec_vmladduhm, 89107}, // __builtin_altivec_vmladduhm
-      {Intrinsic::ppc_altivec_vmsummbm, 89135}, // __builtin_altivec_vmsummbm
-      {Intrinsic::ppc_altivec_vmsumshm, 89162}, // __builtin_altivec_vmsumshm
-      {Intrinsic::ppc_altivec_vmsumshs, 89189}, // __builtin_altivec_vmsumshs
-      {Intrinsic::ppc_altivec_vmsumubm, 89216}, // __builtin_altivec_vmsumubm
-      {Intrinsic::ppc_altivec_vmsumuhm, 89243}, // __builtin_altivec_vmsumuhm
-      {Intrinsic::ppc_altivec_vmsumuhs, 89270}, // __builtin_altivec_vmsumuhs
-      {Intrinsic::ppc_altivec_vmulesb, 89297}, // __builtin_altivec_vmulesb
-      {Intrinsic::ppc_altivec_vmulesh, 89323}, // __builtin_altivec_vmulesh
-      {Intrinsic::ppc_altivec_vmulesw, 89349}, // __builtin_altivec_vmulesw
-      {Intrinsic::ppc_altivec_vmuleub, 89375}, // __builtin_altivec_vmuleub
-      {Intrinsic::ppc_altivec_vmuleuh, 89401}, // __builtin_altivec_vmuleuh
-      {Intrinsic::ppc_altivec_vmuleuw, 89427}, // __builtin_altivec_vmuleuw
-      {Intrinsic::ppc_altivec_vmulosb, 89453}, // __builtin_altivec_vmulosb
-      {Intrinsic::ppc_altivec_vmulosh, 89479}, // __builtin_altivec_vmulosh
-      {Intrinsic::ppc_altivec_vmulosw, 89505}, // __builtin_altivec_vmulosw
-      {Intrinsic::ppc_altivec_vmuloub, 89531}, // __builtin_altivec_vmuloub
-      {Intrinsic::ppc_altivec_vmulouh, 89557}, // __builtin_altivec_vmulouh
-      {Intrinsic::ppc_altivec_vmulouw, 89583}, // __builtin_altivec_vmulouw
-      {Intrinsic::ppc_altivec_vnmsubfp, 89609}, // __builtin_altivec_vnmsubfp
-      {Intrinsic::ppc_altivec_vperm, 89636}, // __builtin_altivec_vperm_4si
-      {Intrinsic::ppc_altivec_vpkpx, 89664}, // __builtin_altivec_vpkpx
-      {Intrinsic::ppc_altivec_vpksdss, 89688}, // __builtin_altivec_vpksdss
-      {Intrinsic::ppc_altivec_vpksdus, 89714}, // __builtin_altivec_vpksdus
-      {Intrinsic::ppc_altivec_vpkshss, 89740}, // __builtin_altivec_vpkshss
-      {Intrinsic::ppc_altivec_vpkshus, 89766}, // __builtin_altivec_vpkshus
-      {Intrinsic::ppc_altivec_vpkswss, 89792}, // __builtin_altivec_vpkswss
-      {Intrinsic::ppc_altivec_vpkswus, 89818}, // __builtin_altivec_vpkswus
-      {Intrinsic::ppc_altivec_vpkudus, 89844}, // __builtin_altivec_vpkudus
-      {Intrinsic::ppc_altivec_vpkuhus, 89870}, // __builtin_altivec_vpkuhus
-      {Intrinsic::ppc_altivec_vpkuwus, 89896}, // __builtin_altivec_vpkuwus
-      {Intrinsic::ppc_altivec_vprtybd, 89922}, // __builtin_altivec_vprtybd
-      {Intrinsic::ppc_altivec_vprtybq, 89948}, // __builtin_altivec_vprtybq
-      {Intrinsic::ppc_altivec_vprtybw, 89974}, // __builtin_altivec_vprtybw
-      {Intrinsic::ppc_altivec_vrefp, 90000}, // __builtin_altivec_vrefp
-      {Intrinsic::ppc_altivec_vrfim, 90024}, // __builtin_altivec_vrfim
-      {Intrinsic::ppc_altivec_vrfin, 90048}, // __builtin_altivec_vrfin
-      {Intrinsic::ppc_altivec_vrfip, 90072}, // __builtin_altivec_vrfip
-      {Intrinsic::ppc_altivec_vrfiz, 90096}, // __builtin_altivec_vrfiz
-      {Intrinsic::ppc_altivec_vrlb, 90120}, // __builtin_altivec_vrlb
-      {Intrinsic::ppc_altivec_vrld, 90143}, // __builtin_altivec_vrld
-      {Intrinsic::ppc_altivec_vrldmi, 90166}, // __builtin_altivec_vrldmi
-      {Intrinsic::ppc_altivec_vrldnm, 90191}, // __builtin_altivec_vrldnm
-      {Intrinsic::ppc_altivec_vrlh, 90216}, // __builtin_altivec_vrlh
-      {Intrinsic::ppc_altivec_vrlw, 90239}, // __builtin_altivec_vrlw
-      {Intrinsic::ppc_altivec_vrlwmi, 90262}, // __builtin_altivec_vrlwmi
-      {Intrinsic::ppc_altivec_vrlwnm, 90287}, // __builtin_altivec_vrlwnm
-      {Intrinsic::ppc_altivec_vrsqrtefp, 90312}, // __builtin_altivec_vrsqrtefp
-      {Intrinsic::ppc_altivec_vsel, 90340}, // __builtin_altivec_vsel_4si
-      {Intrinsic::ppc_altivec_vsl, 90367}, // __builtin_altivec_vsl
-      {Intrinsic::ppc_altivec_vslb, 90389}, // __builtin_altivec_vslb
-      {Intrinsic::ppc_altivec_vslh, 90412}, // __builtin_altivec_vslh
-      {Intrinsic::ppc_altivec_vslo, 90435}, // __builtin_altivec_vslo
-      {Intrinsic::ppc_altivec_vslv, 90458}, // __builtin_altivec_vslv
-      {Intrinsic::ppc_altivec_vslw, 90481}, // __builtin_altivec_vslw
-      {Intrinsic::ppc_altivec_vsr, 90504}, // __builtin_altivec_vsr
-      {Intrinsic::ppc_altivec_vsrab, 90526}, // __builtin_altivec_vsrab
-      {Intrinsic::ppc_altivec_vsrah, 90550}, // __builtin_altivec_vsrah
-      {Intrinsic::ppc_altivec_vsraw, 90574}, // __builtin_altivec_vsraw
-      {Intrinsic::ppc_altivec_vsrb, 90598}, // __builtin_altivec_vsrb
-      {Intrinsic::ppc_altivec_vsrh, 90621}, // __builtin_altivec_vsrh
-      {Intrinsic::ppc_altivec_vsro, 90644}, // __builtin_altivec_vsro
-      {Intrinsic::ppc_altivec_vsrv, 90667}, // __builtin_altivec_vsrv
-      {Intrinsic::ppc_altivec_vsrw, 90690}, // __builtin_altivec_vsrw
-      {Intrinsic::ppc_altivec_vsubcuq, 90713}, // __builtin_altivec_vsubcuq
-      {Intrinsic::ppc_altivec_vsubcuw, 90739}, // __builtin_altivec_vsubcuw
-      {Intrinsic::ppc_altivec_vsubecuq, 90765}, // __builtin_altivec_vsubecuq
-      {Intrinsic::ppc_altivec_vsubeuqm, 90792}, // __builtin_altivec_vsubeuqm
-      {Intrinsic::ppc_altivec_vsubsbs, 90819}, // __builtin_altivec_vsubsbs
-      {Intrinsic::ppc_altivec_vsubshs, 90845}, // __builtin_altivec_vsubshs
-      {Intrinsic::ppc_altivec_vsubsws, 90871}, // __builtin_altivec_vsubsws
-      {Intrinsic::ppc_altivec_vsububs, 90897}, // __builtin_altivec_vsububs
-      {Intrinsic::ppc_altivec_vsubuhs, 90923}, // __builtin_altivec_vsubuhs
-      {Intrinsic::ppc_altivec_vsubuws, 90949}, // __builtin_altivec_vsubuws
-      {Intrinsic::ppc_altivec_vsum2sws, 90975}, // __builtin_altivec_vsum2sws
-      {Intrinsic::ppc_altivec_vsum4sbs, 91002}, // __builtin_altivec_vsum4sbs
-      {Intrinsic::ppc_altivec_vsum4shs, 91029}, // __builtin_altivec_vsum4shs
-      {Intrinsic::ppc_altivec_vsum4ubs, 91056}, // __builtin_altivec_vsum4ubs
-      {Intrinsic::ppc_altivec_vsumsws, 91083}, // __builtin_altivec_vsumsws
-      {Intrinsic::ppc_altivec_vupkhpx, 91109}, // __builtin_altivec_vupkhpx
-      {Intrinsic::ppc_altivec_vupkhsb, 91135}, // __builtin_altivec_vupkhsb
-      {Intrinsic::ppc_altivec_vupkhsh, 91161}, // __builtin_altivec_vupkhsh
-      {Intrinsic::ppc_altivec_vupkhsw, 91187}, // __builtin_altivec_vupkhsw
-      {Intrinsic::ppc_altivec_vupklpx, 91213}, // __builtin_altivec_vupklpx
-      {Intrinsic::ppc_altivec_vupklsb, 91239}, // __builtin_altivec_vupklsb
-      {Intrinsic::ppc_altivec_vupklsh, 91265}, // __builtin_altivec_vupklsh
-      {Intrinsic::ppc_altivec_vupklsw, 91291}, // __builtin_altivec_vupklsw
-      {Intrinsic::ppc_bpermd, 91317}, // __builtin_bpermd
-      {Intrinsic::ppc_divde, 91334}, // __builtin_divde
-      {Intrinsic::ppc_divdeu, 91350}, // __builtin_divdeu
-      {Intrinsic::ppc_divwe, 91367}, // __builtin_divwe
-      {Intrinsic::ppc_divweu, 91383}, // __builtin_divweu
-      {Intrinsic::ppc_get_texasr, 91400}, // __builtin_get_texasr
-      {Intrinsic::ppc_get_texasru, 91421}, // __builtin_get_texasru
-      {Intrinsic::ppc_get_tfhar, 91443}, // __builtin_get_tfhar
-      {Intrinsic::ppc_get_tfiar, 91463}, // __builtin_get_tfiar
-      {Intrinsic::ppc_qpx_qvfabs, 91483}, // __builtin_qpx_qvfabs
-      {Intrinsic::ppc_qpx_qvfadd, 91504}, // __builtin_qpx_qvfadd
-      {Intrinsic::ppc_qpx_qvfadds, 91525}, // __builtin_qpx_qvfadds
-      {Intrinsic::ppc_qpx_qvfcfid, 91547}, // __builtin_qpx_qvfcfid
-      {Intrinsic::ppc_qpx_qvfcfids, 91569}, // __builtin_qpx_qvfcfids
-      {Intrinsic::ppc_qpx_qvfcfidu, 91592}, // __builtin_qpx_qvfcfidu
-      {Intrinsic::ppc_qpx_qvfcfidus, 91615}, // __builtin_qpx_qvfcfidus
-      {Intrinsic::ppc_qpx_qvfcmpeq, 91639}, // __builtin_qpx_qvfcmpeq
-      {Intrinsic::ppc_qpx_qvfcmpgt, 91662}, // __builtin_qpx_qvfcmpgt
-      {Intrinsic::ppc_qpx_qvfcmplt, 91685}, // __builtin_qpx_qvfcmplt
-      {Intrinsic::ppc_qpx_qvfcpsgn, 91708}, // __builtin_qpx_qvfcpsgn
-      {Intrinsic::ppc_qpx_qvfctid, 91731}, // __builtin_qpx_qvfctid
-      {Intrinsic::ppc_qpx_qvfctidu, 91753}, // __builtin_qpx_qvfctidu
-      {Intrinsic::ppc_qpx_qvfctiduz, 91776}, // __builtin_qpx_qvfctiduz
-      {Intrinsic::ppc_qpx_qvfctidz, 91800}, // __builtin_qpx_qvfctidz
-      {Intrinsic::ppc_qpx_qvfctiw, 91823}, // __builtin_qpx_qvfctiw
-      {Intrinsic::ppc_qpx_qvfctiwu, 91845}, // __builtin_qpx_qvfctiwu
-      {Intrinsic::ppc_qpx_qvfctiwuz, 91868}, // __builtin_qpx_qvfctiwuz
-      {Intrinsic::ppc_qpx_qvfctiwz, 91892}, // __builtin_qpx_qvfctiwz
-      {Intrinsic::ppc_qpx_qvflogical, 91915}, // __builtin_qpx_qvflogical
-      {Intrinsic::ppc_qpx_qvfmadd, 91940}, // __builtin_qpx_qvfmadd
-      {Intrinsic::ppc_qpx_qvfmadds, 91962}, // __builtin_qpx_qvfmadds
-      {Intrinsic::ppc_qpx_qvfmsub, 91985}, // __builtin_qpx_qvfmsub
-      {Intrinsic::ppc_qpx_qvfmsubs, 92007}, // __builtin_qpx_qvfmsubs
-      {Intrinsic::ppc_qpx_qvfmul, 92030}, // __builtin_qpx_qvfmul
-      {Intrinsic::ppc_qpx_qvfmuls, 92051}, // __builtin_qpx_qvfmuls
-      {Intrinsic::ppc_qpx_qvfnabs, 92073}, // __builtin_qpx_qvfnabs
-      {Intrinsic::ppc_qpx_qvfneg, 92095}, // __builtin_qpx_qvfneg
-      {Intrinsic::ppc_qpx_qvfnmadd, 92116}, // __builtin_qpx_qvfnmadd
-      {Intrinsic::ppc_qpx_qvfnmadds, 92139}, // __builtin_qpx_qvfnmadds
-      {Intrinsic::ppc_qpx_qvfnmsub, 92163}, // __builtin_qpx_qvfnmsub
-      {Intrinsic::ppc_qpx_qvfnmsubs, 92186}, // __builtin_qpx_qvfnmsubs
-      {Intrinsic::ppc_qpx_qvfperm, 92210}, // __builtin_qpx_qvfperm
-      {Intrinsic::ppc_qpx_qvfre, 92232}, // __builtin_qpx_qvfre
-      {Intrinsic::ppc_qpx_qvfres, 92252}, // __builtin_qpx_qvfres
-      {Intrinsic::ppc_qpx_qvfrim, 92273}, // __builtin_qpx_qvfrim
-      {Intrinsic::ppc_qpx_qvfrin, 92294}, // __builtin_qpx_qvfrin
-      {Intrinsic::ppc_qpx_qvfrip, 92315}, // __builtin_qpx_qvfrip
-      {Intrinsic::ppc_qpx_qvfriz, 92336}, // __builtin_qpx_qvfriz
-      {Intrinsic::ppc_qpx_qvfrsp, 92357}, // __builtin_qpx_qvfrsp
-      {Intrinsic::ppc_qpx_qvfrsqrte, 92378}, // __builtin_qpx_qvfrsqrte
-      {Intrinsic::ppc_qpx_qvfrsqrtes, 92402}, // __builtin_qpx_qvfrsqrtes
-      {Intrinsic::ppc_qpx_qvfsel, 92427}, // __builtin_qpx_qvfsel
-      {Intrinsic::ppc_qpx_qvfsub, 92448}, // __builtin_qpx_qvfsub
-      {Intrinsic::ppc_qpx_qvfsubs, 92469}, // __builtin_qpx_qvfsubs
-      {Intrinsic::ppc_qpx_qvftstnan, 92491}, // __builtin_qpx_qvftstnan
-      {Intrinsic::ppc_qpx_qvfxmadd, 92515}, // __builtin_qpx_qvfxmadd
-      {Intrinsic::ppc_qpx_qvfxmadds, 92538}, // __builtin_qpx_qvfxmadds
-      {Intrinsic::ppc_qpx_qvfxmul, 92562}, // __builtin_qpx_qvfxmul
-      {Intrinsic::ppc_qpx_qvfxmuls, 92584}, // __builtin_qpx_qvfxmuls
-      {Intrinsic::ppc_qpx_qvfxxcpnmadd, 92607}, // __builtin_qpx_qvfxxcpnmadd
-      {Intrinsic::ppc_qpx_qvfxxcpnmadds, 92634}, // __builtin_qpx_qvfxxcpnmadds
-      {Intrinsic::ppc_qpx_qvfxxmadd, 92662}, // __builtin_qpx_qvfxxmadd
-      {Intrinsic::ppc_qpx_qvfxxmadds, 92686}, // __builtin_qpx_qvfxxmadds
-      {Intrinsic::ppc_qpx_qvfxxnpmadd, 92711}, // __builtin_qpx_qvfxxnpmadd
-      {Intrinsic::ppc_qpx_qvfxxnpmadds, 92737}, // __builtin_qpx_qvfxxnpmadds
-      {Intrinsic::ppc_qpx_qvgpci, 92764}, // __builtin_qpx_qvgpci
-      {Intrinsic::ppc_qpx_qvlfcd, 92785}, // __builtin_qpx_qvlfcd
-      {Intrinsic::ppc_qpx_qvlfcda, 92806}, // __builtin_qpx_qvlfcda
-      {Intrinsic::ppc_qpx_qvlfcs, 92828}, // __builtin_qpx_qvlfcs
-      {Intrinsic::ppc_qpx_qvlfcsa, 92849}, // __builtin_qpx_qvlfcsa
-      {Intrinsic::ppc_qpx_qvlfd, 92871}, // __builtin_qpx_qvlfd
-      {Intrinsic::ppc_qpx_qvlfda, 92891}, // __builtin_qpx_qvlfda
-      {Intrinsic::ppc_qpx_qvlfiwa, 92912}, // __builtin_qpx_qvlfiwa
-      {Intrinsic::ppc_qpx_qvlfiwaa, 92934}, // __builtin_qpx_qvlfiwaa
-      {Intrinsic::ppc_qpx_qvlfiwz, 92957}, // __builtin_qpx_qvlfiwz
-      {Intrinsic::ppc_qpx_qvlfiwza, 92979}, // __builtin_qpx_qvlfiwza
-      {Intrinsic::ppc_qpx_qvlfs, 93002}, // __builtin_qpx_qvlfs
-      {Intrinsic::ppc_qpx_qvlfsa, 93022}, // __builtin_qpx_qvlfsa
-      {Intrinsic::ppc_qpx_qvlpcld, 93043}, // __builtin_qpx_qvlpcld
-      {Intrinsic::ppc_qpx_qvlpcls, 93065}, // __builtin_qpx_qvlpcls
-      {Intrinsic::ppc_qpx_qvlpcrd, 93087}, // __builtin_qpx_qvlpcrd
-      {Intrinsic::ppc_qpx_qvlpcrs, 93109}, // __builtin_qpx_qvlpcrs
-      {Intrinsic::ppc_qpx_qvstfcd, 93131}, // __builtin_qpx_qvstfcd
-      {Intrinsic::ppc_qpx_qvstfcda, 93153}, // __builtin_qpx_qvstfcda
-      {Intrinsic::ppc_qpx_qvstfcs, 93176}, // __builtin_qpx_qvstfcs
-      {Intrinsic::ppc_qpx_qvstfcsa, 93198}, // __builtin_qpx_qvstfcsa
-      {Intrinsic::ppc_qpx_qvstfd, 93221}, // __builtin_qpx_qvstfd
-      {Intrinsic::ppc_qpx_qvstfda, 93242}, // __builtin_qpx_qvstfda
-      {Intrinsic::ppc_qpx_qvstfiw, 93264}, // __builtin_qpx_qvstfiw
-      {Intrinsic::ppc_qpx_qvstfiwa, 93286}, // __builtin_qpx_qvstfiwa
-      {Intrinsic::ppc_qpx_qvstfs, 93309}, // __builtin_qpx_qvstfs
-      {Intrinsic::ppc_qpx_qvstfsa, 93330}, // __builtin_qpx_qvstfsa
-      {Intrinsic::ppc_set_texasr, 93352}, // __builtin_set_texasr
-      {Intrinsic::ppc_set_texasru, 93373}, // __builtin_set_texasru
-      {Intrinsic::ppc_set_tfhar, 93395}, // __builtin_set_tfhar
-      {Intrinsic::ppc_set_tfiar, 93415}, // __builtin_set_tfiar
-      {Intrinsic::ppc_tabort, 93435}, // __builtin_tabort
-      {Intrinsic::ppc_tabortdc, 93452}, // __builtin_tabortdc
-      {Intrinsic::ppc_tabortdci, 93471}, // __builtin_tabortdci
-      {Intrinsic::ppc_tabortwc, 93491}, // __builtin_tabortwc
-      {Intrinsic::ppc_tabortwci, 93510}, // __builtin_tabortwci
-      {Intrinsic::ppc_tbegin, 93530}, // __builtin_tbegin
-      {Intrinsic::ppc_tcheck, 93547}, // __builtin_tcheck
-      {Intrinsic::ppc_tend, 93564}, // __builtin_tend
-      {Intrinsic::ppc_tendall, 93579}, // __builtin_tendall
-      {Intrinsic::ppc_trechkpt, 93597}, // __builtin_trechkpt
-      {Intrinsic::ppc_treclaim, 93616}, // __builtin_treclaim
-      {Intrinsic::ppc_tresume, 93635}, // __builtin_tresume
-      {Intrinsic::ppc_tsr, 93653}, // __builtin_tsr
-      {Intrinsic::ppc_tsuspend, 93667}, // __builtin_tsuspend
-      {Intrinsic::ppc_ttest, 93686}, // __builtin_ttest
-      {Intrinsic::ppc_vsx_xsmaxdp, 93702}, // __builtin_vsx_xsmaxdp
-      {Intrinsic::ppc_vsx_xsmindp, 93724}, // __builtin_vsx_xsmindp
-      {Intrinsic::ppc_vsx_xvcmpeqdp, 93746}, // __builtin_vsx_xvcmpeqdp
-      {Intrinsic::ppc_vsx_xvcmpeqdp_p, 93770}, // __builtin_vsx_xvcmpeqdp_p
-      {Intrinsic::ppc_vsx_xvcmpeqsp, 93796}, // __builtin_vsx_xvcmpeqsp
-      {Intrinsic::ppc_vsx_xvcmpeqsp_p, 93820}, // __builtin_vsx_xvcmpeqsp_p
-      {Intrinsic::ppc_vsx_xvcmpgedp, 93846}, // __builtin_vsx_xvcmpgedp
-      {Intrinsic::ppc_vsx_xvcmpgedp_p, 93870}, // __builtin_vsx_xvcmpgedp_p
-      {Intrinsic::ppc_vsx_xvcmpgesp, 93896}, // __builtin_vsx_xvcmpgesp
-      {Intrinsic::ppc_vsx_xvcmpgesp_p, 93920}, // __builtin_vsx_xvcmpgesp_p
-      {Intrinsic::ppc_vsx_xvcmpgtdp, 93946}, // __builtin_vsx_xvcmpgtdp
-      {Intrinsic::ppc_vsx_xvcmpgtdp_p, 93970}, // __builtin_vsx_xvcmpgtdp_p
-      {Intrinsic::ppc_vsx_xvcmpgtsp, 93996}, // __builtin_vsx_xvcmpgtsp
-      {Intrinsic::ppc_vsx_xvcmpgtsp_p, 94020}, // __builtin_vsx_xvcmpgtsp_p
-      {Intrinsic::ppc_vsx_xvcvdpsp, 94046}, // __builtin_vsx_xvcvdpsp
-      {Intrinsic::ppc_vsx_xvcvdpsxws, 94069}, // __builtin_vsx_xvcvdpsxws
-      {Intrinsic::ppc_vsx_xvcvdpuxws, 94094}, // __builtin_vsx_xvcvdpuxws
-      {Intrinsic::ppc_vsx_xvcvhpsp, 94119}, // __builtin_vsx_xvcvhpsp
-      {Intrinsic::ppc_vsx_xvcvspdp, 94142}, // __builtin_vsx_xvcvspdp
-      {Intrinsic::ppc_vsx_xvcvsphp, 94165}, // __builtin_vsx_xvcvsphp
-      {Intrinsic::ppc_vsx_xvcvsxdsp, 94188}, // __builtin_vsx_xvcvsxdsp
-      {Intrinsic::ppc_vsx_xvcvsxwdp, 94212}, // __builtin_vsx_xvcvsxwdp
-      {Intrinsic::ppc_vsx_xvcvuxdsp, 94236}, // __builtin_vsx_xvcvuxdsp
-      {Intrinsic::ppc_vsx_xvcvuxwdp, 94260}, // __builtin_vsx_xvcvuxwdp
-      {Intrinsic::ppc_vsx_xvdivdp, 94284}, // __builtin_vsx_xvdivdp
-      {Intrinsic::ppc_vsx_xvdivsp, 94306}, // __builtin_vsx_xvdivsp
-      {Intrinsic::ppc_vsx_xviexpdp, 94328}, // __builtin_vsx_xviexpdp
-      {Intrinsic::ppc_vsx_xviexpsp, 94351}, // __builtin_vsx_xviexpsp
-      {Intrinsic::ppc_vsx_xvmaxdp, 94374}, // __builtin_vsx_xvmaxdp
-      {Intrinsic::ppc_vsx_xvmaxsp, 94396}, // __builtin_vsx_xvmaxsp
-      {Intrinsic::ppc_vsx_xvmindp, 94418}, // __builtin_vsx_xvmindp
-      {Intrinsic::ppc_vsx_xvminsp, 94440}, // __builtin_vsx_xvminsp
-      {Intrinsic::ppc_vsx_xvredp, 94462}, // __builtin_vsx_xvredp
-      {Intrinsic::ppc_vsx_xvresp, 94483}, // __builtin_vsx_xvresp
-      {Intrinsic::ppc_vsx_xvrsqrtedp, 94504}, // __builtin_vsx_xvrsqrtedp
-      {Intrinsic::ppc_vsx_xvrsqrtesp, 94529}, // __builtin_vsx_xvrsqrtesp
-      {Intrinsic::ppc_vsx_xvtstdcdp, 94554}, // __builtin_vsx_xvtstdcdp
-      {Intrinsic::ppc_vsx_xvtstdcsp, 94578}, // __builtin_vsx_xvtstdcsp
-      {Intrinsic::ppc_vsx_xvxexpdp, 94602}, // __builtin_vsx_xvxexpdp
-      {Intrinsic::ppc_vsx_xvxexpsp, 94625}, // __builtin_vsx_xvxexpsp
-      {Intrinsic::ppc_vsx_xvxsigdp, 94648}, // __builtin_vsx_xvxsigdp
-      {Intrinsic::ppc_vsx_xvxsigsp, 94671}, // __builtin_vsx_xvxsigsp
-      {Intrinsic::ppc_vsx_xxextractuw, 94694}, // __builtin_vsx_xxextractuw
-      {Intrinsic::ppc_vsx_xxinsertw, 94720}, // __builtin_vsx_xxinsertw
-      {Intrinsic::ppc_vsx_xxleqv, 94744}, // __builtin_vsx_xxleqv
-    };
-    auto I = std::lower_bound(std::begin(ppcNames),
-                              std::end(ppcNames),
-                              BuiltinNameStr);
-    if (I != std::end(ppcNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "r600") {
-    static const BuiltinEntry r600Names[] = {
-      {Intrinsic::r600_group_barrier, 94765}, // __builtin_r600_group_barrier
-      {Intrinsic::r600_implicitarg_ptr, 94794}, // __builtin_r600_implicitarg_ptr
-      {Intrinsic::r600_rat_store_typed, 94825}, // __builtin_r600_rat_store_typed
-      {Intrinsic::r600_read_global_size_x, 94856}, // __builtin_r600_read_global_size_x
-      {Intrinsic::r600_read_global_size_y, 94890}, // __builtin_r600_read_global_size_y
-      {Intrinsic::r600_read_global_size_z, 94924}, // __builtin_r600_read_global_size_z
-      {Intrinsic::r600_read_ngroups_x, 94958}, // __builtin_r600_read_ngroups_x
-      {Intrinsic::r600_read_ngroups_y, 94988}, // __builtin_r600_read_ngroups_y
-      {Intrinsic::r600_read_ngroups_z, 95018}, // __builtin_r600_read_ngroups_z
-      {Intrinsic::r600_read_tgid_x, 95048}, // __builtin_r600_read_tgid_x
-      {Intrinsic::r600_read_tgid_y, 95075}, // __builtin_r600_read_tgid_y
-      {Intrinsic::r600_read_tgid_z, 95102}, // __builtin_r600_read_tgid_z
-    };
-    auto I = std::lower_bound(std::begin(r600Names),
-                              std::end(r600Names),
-                              BuiltinNameStr);
-    if (I != std::end(r600Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "s390") {
-    static const BuiltinEntry s390Names[] = {
-      {Intrinsic::s390_efpc, 95129}, // __builtin_s390_efpc
-      {Intrinsic::s390_lcbb, 95176}, // __builtin_s390_lcbb
-      {Intrinsic::s390_sfpc, 95216}, // __builtin_s390_sfpc
-      {Intrinsic::s390_vaccb, 95236}, // __builtin_s390_vaccb
-      {Intrinsic::s390_vacccq, 95257}, // __builtin_s390_vacccq
-      {Intrinsic::s390_vaccf, 95279}, // __builtin_s390_vaccf
-      {Intrinsic::s390_vaccg, 95300}, // __builtin_s390_vaccg
-      {Intrinsic::s390_vacch, 95321}, // __builtin_s390_vacch
-      {Intrinsic::s390_vaccq, 95342}, // __builtin_s390_vaccq
-      {Intrinsic::s390_vacq, 95363}, // __builtin_s390_vacq
-      {Intrinsic::s390_vaq, 95383}, // __builtin_s390_vaq
-      {Intrinsic::s390_vavgb, 95402}, // __builtin_s390_vavgb
-      {Intrinsic::s390_vavgf, 95423}, // __builtin_s390_vavgf
-      {Intrinsic::s390_vavgg, 95444}, // __builtin_s390_vavgg
-      {Intrinsic::s390_vavgh, 95465}, // __builtin_s390_vavgh
-      {Intrinsic::s390_vavglb, 95486}, // __builtin_s390_vavglb
-      {Intrinsic::s390_vavglf, 95508}, // __builtin_s390_vavglf
-      {Intrinsic::s390_vavglg, 95530}, // __builtin_s390_vavglg
-      {Intrinsic::s390_vavglh, 95552}, // __builtin_s390_vavglh
-      {Intrinsic::s390_vbperm, 95574}, // __builtin_s390_vbperm
-      {Intrinsic::s390_vcksm, 95596}, // __builtin_s390_vcksm
-      {Intrinsic::s390_verimb, 95617}, // __builtin_s390_verimb
-      {Intrinsic::s390_verimf, 95639}, // __builtin_s390_verimf
-      {Intrinsic::s390_verimg, 95661}, // __builtin_s390_verimg
-      {Intrinsic::s390_verimh, 95683}, // __builtin_s390_verimh
-      {Intrinsic::s390_verllb, 95705}, // __builtin_s390_verllb
-      {Intrinsic::s390_verllf, 95727}, // __builtin_s390_verllf
-      {Intrinsic::s390_verllg, 95749}, // __builtin_s390_verllg
-      {Intrinsic::s390_verllh, 95771}, // __builtin_s390_verllh
-      {Intrinsic::s390_verllvb, 95793}, // __builtin_s390_verllvb
-      {Intrinsic::s390_verllvf, 95816}, // __builtin_s390_verllvf
-      {Intrinsic::s390_verllvg, 95839}, // __builtin_s390_verllvg
-      {Intrinsic::s390_verllvh, 95862}, // __builtin_s390_verllvh
-      {Intrinsic::s390_vfaeb, 95885}, // __builtin_s390_vfaeb
-      {Intrinsic::s390_vfaef, 95906}, // __builtin_s390_vfaef
-      {Intrinsic::s390_vfaeh, 95927}, // __builtin_s390_vfaeh
-      {Intrinsic::s390_vfaezb, 95948}, // __builtin_s390_vfaezb
-      {Intrinsic::s390_vfaezf, 95970}, // __builtin_s390_vfaezf
-      {Intrinsic::s390_vfaezh, 95992}, // __builtin_s390_vfaezh
-      {Intrinsic::s390_vfeeb, 96014}, // __builtin_s390_vfeeb
-      {Intrinsic::s390_vfeef, 96035}, // __builtin_s390_vfeef
-      {Intrinsic::s390_vfeeh, 96056}, // __builtin_s390_vfeeh
-      {Intrinsic::s390_vfeezb, 96077}, // __builtin_s390_vfeezb
-      {Intrinsic::s390_vfeezf, 96099}, // __builtin_s390_vfeezf
-      {Intrinsic::s390_vfeezh, 96121}, // __builtin_s390_vfeezh
-      {Intrinsic::s390_vfeneb, 96143}, // __builtin_s390_vfeneb
-      {Intrinsic::s390_vfenef, 96165}, // __builtin_s390_vfenef
-      {Intrinsic::s390_vfeneh, 96187}, // __builtin_s390_vfeneh
-      {Intrinsic::s390_vfenezb, 96209}, // __builtin_s390_vfenezb
-      {Intrinsic::s390_vfenezf, 96232}, // __builtin_s390_vfenezf
-      {Intrinsic::s390_vfenezh, 96255}, // __builtin_s390_vfenezh
-      {Intrinsic::s390_vgfmab, 96278}, // __builtin_s390_vgfmab
-      {Intrinsic::s390_vgfmaf, 96300}, // __builtin_s390_vgfmaf
-      {Intrinsic::s390_vgfmag, 96322}, // __builtin_s390_vgfmag
-      {Intrinsic::s390_vgfmah, 96344}, // __builtin_s390_vgfmah
-      {Intrinsic::s390_vgfmb, 96366}, // __builtin_s390_vgfmb
-      {Intrinsic::s390_vgfmf, 96387}, // __builtin_s390_vgfmf
-      {Intrinsic::s390_vgfmg, 96408}, // __builtin_s390_vgfmg
-      {Intrinsic::s390_vgfmh, 96429}, // __builtin_s390_vgfmh
-      {Intrinsic::s390_vistrb, 96450}, // __builtin_s390_vistrb
-      {Intrinsic::s390_vistrf, 96472}, // __builtin_s390_vistrf
-      {Intrinsic::s390_vistrh, 96494}, // __builtin_s390_vistrh
-      {Intrinsic::s390_vlbb, 96516}, // __builtin_s390_vlbb
-      {Intrinsic::s390_vll, 96536}, // __builtin_s390_vll
-      {Intrinsic::s390_vlrl, 96555}, // __builtin_s390_vlrl
-      {Intrinsic::s390_vmaeb, 96575}, // __builtin_s390_vmaeb
-      {Intrinsic::s390_vmaef, 96596}, // __builtin_s390_vmaef
-      {Intrinsic::s390_vmaeh, 96617}, // __builtin_s390_vmaeh
-      {Intrinsic::s390_vmahb, 96638}, // __builtin_s390_vmahb
-      {Intrinsic::s390_vmahf, 96659}, // __builtin_s390_vmahf
-      {Intrinsic::s390_vmahh, 96680}, // __builtin_s390_vmahh
-      {Intrinsic::s390_vmaleb, 96701}, // __builtin_s390_vmaleb
-      {Intrinsic::s390_vmalef, 96723}, // __builtin_s390_vmalef
-      {Intrinsic::s390_vmaleh, 96745}, // __builtin_s390_vmaleh
-      {Intrinsic::s390_vmalhb, 96767}, // __builtin_s390_vmalhb
-      {Intrinsic::s390_vmalhf, 96789}, // __builtin_s390_vmalhf
-      {Intrinsic::s390_vmalhh, 96811}, // __builtin_s390_vmalhh
-      {Intrinsic::s390_vmalob, 96833}, // __builtin_s390_vmalob
-      {Intrinsic::s390_vmalof, 96855}, // __builtin_s390_vmalof
-      {Intrinsic::s390_vmaloh, 96877}, // __builtin_s390_vmaloh
-      {Intrinsic::s390_vmaob, 96899}, // __builtin_s390_vmaob
-      {Intrinsic::s390_vmaof, 96920}, // __builtin_s390_vmaof
-      {Intrinsic::s390_vmaoh, 96941}, // __builtin_s390_vmaoh
-      {Intrinsic::s390_vmeb, 96962}, // __builtin_s390_vmeb
-      {Intrinsic::s390_vmef, 96982}, // __builtin_s390_vmef
-      {Intrinsic::s390_vmeh, 97002}, // __builtin_s390_vmeh
-      {Intrinsic::s390_vmhb, 97022}, // __builtin_s390_vmhb
-      {Intrinsic::s390_vmhf, 97042}, // __builtin_s390_vmhf
-      {Intrinsic::s390_vmhh, 97062}, // __builtin_s390_vmhh
-      {Intrinsic::s390_vmleb, 97082}, // __builtin_s390_vmleb
-      {Intrinsic::s390_vmlef, 97103}, // __builtin_s390_vmlef
-      {Intrinsic::s390_vmleh, 97124}, // __builtin_s390_vmleh
-      {Intrinsic::s390_vmlhb, 97145}, // __builtin_s390_vmlhb
-      {Intrinsic::s390_vmlhf, 97166}, // __builtin_s390_vmlhf
-      {Intrinsic::s390_vmlhh, 97187}, // __builtin_s390_vmlhh
-      {Intrinsic::s390_vmlob, 97208}, // __builtin_s390_vmlob
-      {Intrinsic::s390_vmlof, 97229}, // __builtin_s390_vmlof
-      {Intrinsic::s390_vmloh, 97250}, // __builtin_s390_vmloh
-      {Intrinsic::s390_vmob, 97271}, // __builtin_s390_vmob
-      {Intrinsic::s390_vmof, 97291}, // __builtin_s390_vmof
-      {Intrinsic::s390_vmoh, 97311}, // __builtin_s390_vmoh
-      {Intrinsic::s390_vmslg, 97331}, // __builtin_s390_vmslg
-      {Intrinsic::s390_vpdi, 97352}, // __builtin_s390_vpdi
-      {Intrinsic::s390_vperm, 97372}, // __builtin_s390_vperm
-      {Intrinsic::s390_vpklsf, 97393}, // __builtin_s390_vpklsf
-      {Intrinsic::s390_vpklsg, 97415}, // __builtin_s390_vpklsg
-      {Intrinsic::s390_vpklsh, 97437}, // __builtin_s390_vpklsh
-      {Intrinsic::s390_vpksf, 97459}, // __builtin_s390_vpksf
-      {Intrinsic::s390_vpksg, 97480}, // __builtin_s390_vpksg
-      {Intrinsic::s390_vpksh, 97501}, // __builtin_s390_vpksh
-      {Intrinsic::s390_vsbcbiq, 97522}, // __builtin_s390_vsbcbiq
-      {Intrinsic::s390_vsbiq, 97545}, // __builtin_s390_vsbiq
-      {Intrinsic::s390_vscbib, 97566}, // __builtin_s390_vscbib
-      {Intrinsic::s390_vscbif, 97588}, // __builtin_s390_vscbif
-      {Intrinsic::s390_vscbig, 97610}, // __builtin_s390_vscbig
-      {Intrinsic::s390_vscbih, 97632}, // __builtin_s390_vscbih
-      {Intrinsic::s390_vscbiq, 97654}, // __builtin_s390_vscbiq
-      {Intrinsic::s390_vsl, 97676}, // __builtin_s390_vsl
-      {Intrinsic::s390_vslb, 97695}, // __builtin_s390_vslb
-      {Intrinsic::s390_vsldb, 97715}, // __builtin_s390_vsldb
-      {Intrinsic::s390_vsq, 97736}, // __builtin_s390_vsq
-      {Intrinsic::s390_vsra, 97755}, // __builtin_s390_vsra
-      {Intrinsic::s390_vsrab, 97775}, // __builtin_s390_vsrab
-      {Intrinsic::s390_vsrl, 97796}, // __builtin_s390_vsrl
-      {Intrinsic::s390_vsrlb, 97816}, // __builtin_s390_vsrlb
-      {Intrinsic::s390_vstl, 97837}, // __builtin_s390_vstl
-      {Intrinsic::s390_vstrcb, 97857}, // __builtin_s390_vstrcb
-      {Intrinsic::s390_vstrcf, 97879}, // __builtin_s390_vstrcf
-      {Intrinsic::s390_vstrch, 97901}, // __builtin_s390_vstrch
-      {Intrinsic::s390_vstrczb, 97923}, // __builtin_s390_vstrczb
-      {Intrinsic::s390_vstrczf, 97946}, // __builtin_s390_vstrczf
-      {Intrinsic::s390_vstrczh, 97969}, // __builtin_s390_vstrczh
-      {Intrinsic::s390_vstrl, 97992}, // __builtin_s390_vstrl
-      {Intrinsic::s390_vsumb, 98013}, // __builtin_s390_vsumb
-      {Intrinsic::s390_vsumgf, 98034}, // __builtin_s390_vsumgf
-      {Intrinsic::s390_vsumgh, 98056}, // __builtin_s390_vsumgh
-      {Intrinsic::s390_vsumh, 98078}, // __builtin_s390_vsumh
-      {Intrinsic::s390_vsumqf, 98099}, // __builtin_s390_vsumqf
-      {Intrinsic::s390_vsumqg, 98121}, // __builtin_s390_vsumqg
-      {Intrinsic::s390_vtm, 98143}, // __builtin_s390_vtm
-      {Intrinsic::s390_vuphb, 98162}, // __builtin_s390_vuphb
-      {Intrinsic::s390_vuphf, 98183}, // __builtin_s390_vuphf
-      {Intrinsic::s390_vuphh, 98204}, // __builtin_s390_vuphh
-      {Intrinsic::s390_vuplb, 98225}, // __builtin_s390_vuplb
-      {Intrinsic::s390_vuplf, 98246}, // __builtin_s390_vuplf
-      {Intrinsic::s390_vuplhb, 98267}, // __builtin_s390_vuplhb
-      {Intrinsic::s390_vuplhf, 98289}, // __builtin_s390_vuplhf
-      {Intrinsic::s390_vuplhh, 98311}, // __builtin_s390_vuplhh
-      {Intrinsic::s390_vuplhw, 98333}, // __builtin_s390_vuplhw
-      {Intrinsic::s390_vupllb, 98355}, // __builtin_s390_vupllb
-      {Intrinsic::s390_vupllf, 98377}, // __builtin_s390_vupllf
-      {Intrinsic::s390_vupllh, 98399}, // __builtin_s390_vupllh
-      {Intrinsic::s390_tend, 93564}, // __builtin_tend
-      {Intrinsic::s390_ppa_txassist, 95196}, // __builtin_tx_assist
-      {Intrinsic::s390_etnd, 95149}, // __builtin_tx_nesting_depth
-    };
-    auto I = std::lower_bound(std::begin(s390Names),
-                              std::end(s390Names),
-                              BuiltinNameStr);
-    if (I != std::end(s390Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "x86") {
-    static const BuiltinEntry x86Names[] = {
-      {Intrinsic::x86_addcarry_u32, 98929}, // __builtin_ia32_addcarry_u32
-      {Intrinsic::x86_addcarry_u64, 98957}, // __builtin_ia32_addcarry_u64
-      {Intrinsic::x86_addcarryx_u32, 98985}, // __builtin_ia32_addcarryx_u32
-      {Intrinsic::x86_addcarryx_u64, 99014}, // __builtin_ia32_addcarryx_u64
-      {Intrinsic::x86_avx512_mask_add_pd_512, 104566}, // __builtin_ia32_addpd512_mask
-      {Intrinsic::x86_avx512_mask_add_ps_512, 104595}, // __builtin_ia32_addps512_mask
-      {Intrinsic::x86_avx512_mask_add_sd_round, 104624}, // __builtin_ia32_addsd_round_mask
-      {Intrinsic::x86_avx512_mask_add_ss_round, 104656}, // __builtin_ia32_addss_round_mask
-      {Intrinsic::x86_sse3_addsub_pd, 135056}, // __builtin_ia32_addsubpd
-      {Intrinsic::x86_avx_addsub_pd_256, 99426}, // __builtin_ia32_addsubpd256
-      {Intrinsic::x86_sse3_addsub_ps, 135080}, // __builtin_ia32_addsubps
-      {Intrinsic::x86_avx_addsub_ps_256, 99453}, // __builtin_ia32_addsubps256
-      {Intrinsic::x86_aesni_aesdec, 99043}, // __builtin_ia32_aesdec128
-      {Intrinsic::x86_aesni_aesdec_256, 99068}, // __builtin_ia32_aesdec256
-      {Intrinsic::x86_aesni_aesdec_512, 99093}, // __builtin_ia32_aesdec512
-      {Intrinsic::x86_aesni_aesdeclast, 99118}, // __builtin_ia32_aesdeclast128
-      {Intrinsic::x86_aesni_aesdeclast_256, 99147}, // __builtin_ia32_aesdeclast256
-      {Intrinsic::x86_aesni_aesdeclast_512, 99176}, // __builtin_ia32_aesdeclast512
-      {Intrinsic::x86_aesni_aesenc, 99205}, // __builtin_ia32_aesenc128
-      {Intrinsic::x86_aesni_aesenc_256, 99230}, // __builtin_ia32_aesenc256
-      {Intrinsic::x86_aesni_aesenc_512, 99255}, // __builtin_ia32_aesenc512
-      {Intrinsic::x86_aesni_aesenclast, 99280}, // __builtin_ia32_aesenclast128
-      {Intrinsic::x86_aesni_aesenclast_256, 99309}, // __builtin_ia32_aesenclast256
-      {Intrinsic::x86_aesni_aesenclast_512, 99338}, // __builtin_ia32_aesenclast512
-      {Intrinsic::x86_aesni_aesimc, 99367}, // __builtin_ia32_aesimc128
-      {Intrinsic::x86_aesni_aeskeygenassist, 99392}, // __builtin_ia32_aeskeygenassist128
-      {Intrinsic::x86_bmi_bextr_32, 129324}, // __builtin_ia32_bextr_u32
-      {Intrinsic::x86_bmi_bextr_64, 129349}, // __builtin_ia32_bextr_u64
-      {Intrinsic::x86_tbm_bextri_u32, 136958}, // __builtin_ia32_bextri_u32
-      {Intrinsic::x86_tbm_bextri_u64, 136984}, // __builtin_ia32_bextri_u64
-      {Intrinsic::x86_sse41_blendvpd, 135257}, // __builtin_ia32_blendvpd
-      {Intrinsic::x86_avx_blendv_pd_256, 99480}, // __builtin_ia32_blendvpd256
-      {Intrinsic::x86_sse41_blendvps, 135281}, // __builtin_ia32_blendvps
-      {Intrinsic::x86_avx_blendv_ps_256, 99507}, // __builtin_ia32_blendvps256
-      {Intrinsic::x86_avx512_broadcastmb_128, 103118}, // __builtin_ia32_broadcastmb128
-      {Intrinsic::x86_avx512_broadcastmb_256, 103148}, // __builtin_ia32_broadcastmb256
-      {Intrinsic::x86_avx512_broadcastmb_512, 103178}, // __builtin_ia32_broadcastmb512
-      {Intrinsic::x86_avx512_broadcastmw_128, 103208}, // __builtin_ia32_broadcastmw128
-      {Intrinsic::x86_avx512_broadcastmw_256, 103238}, // __builtin_ia32_broadcastmw256
-      {Intrinsic::x86_avx512_broadcastmw_512, 103268}, // __builtin_ia32_broadcastmw512
-      {Intrinsic::x86_bmi_bzhi_64, 129397}, // __builtin_ia32_bzhi_di
-      {Intrinsic::x86_bmi_bzhi_32, 129374}, // __builtin_ia32_bzhi_si
-      {Intrinsic::x86_sse2_clflush, 133369}, // __builtin_ia32_clflush
-      {Intrinsic::x86_clflushopt, 129512}, // __builtin_ia32_clflushopt
-      {Intrinsic::x86_clrssbsy, 129538}, // __builtin_ia32_clrssbsy
-      {Intrinsic::x86_clwb, 129562}, // __builtin_ia32_clwb
-      {Intrinsic::x86_clzero, 129582}, // __builtin_ia32_clzero
-      {Intrinsic::x86_sse2_cmp_sd, 133392}, // __builtin_ia32_cmpsd
-      {Intrinsic::x86_avx512_mask_cmp_sd, 104688}, // __builtin_ia32_cmpsd_mask
-      {Intrinsic::x86_sse_cmp_ss, 132544}, // __builtin_ia32_cmpss
-      {Intrinsic::x86_avx512_mask_cmp_ss, 104714}, // __builtin_ia32_cmpss_mask
-      {Intrinsic::x86_sse_comieq_ss, 132565}, // __builtin_ia32_comieq
-      {Intrinsic::x86_sse_comige_ss, 132587}, // __builtin_ia32_comige
-      {Intrinsic::x86_sse_comigt_ss, 132609}, // __builtin_ia32_comigt
-      {Intrinsic::x86_sse_comile_ss, 132631}, // __builtin_ia32_comile
-      {Intrinsic::x86_sse_comilt_ss, 132653}, // __builtin_ia32_comilt
-      {Intrinsic::x86_sse_comineq_ss, 132675}, // __builtin_ia32_comineq
-      {Intrinsic::x86_sse2_comieq_sd, 133413}, // __builtin_ia32_comisdeq
-      {Intrinsic::x86_sse2_comige_sd, 133437}, // __builtin_ia32_comisdge
-      {Intrinsic::x86_sse2_comigt_sd, 133461}, // __builtin_ia32_comisdgt
-      {Intrinsic::x86_sse2_comile_sd, 133485}, // __builtin_ia32_comisdle
-      {Intrinsic::x86_sse2_comilt_sd, 133509}, // __builtin_ia32_comisdlt
-      {Intrinsic::x86_sse2_comineq_sd, 133533}, // __builtin_ia32_comisdneq
-      {Intrinsic::x86_avx512_mask_compress_pd_128, 104944}, // __builtin_ia32_compressdf128_mask
-      {Intrinsic::x86_avx512_mask_compress_pd_256, 104978}, // __builtin_ia32_compressdf256_mask
-      {Intrinsic::x86_avx512_mask_compress_pd_512, 105012}, // __builtin_ia32_compressdf512_mask
-      {Intrinsic::x86_avx512_mask_compress_q_128, 105148}, // __builtin_ia32_compressdi128_mask
-      {Intrinsic::x86_avx512_mask_compress_q_256, 105182}, // __builtin_ia32_compressdi256_mask
-      {Intrinsic::x86_avx512_mask_compress_q_512, 105216}, // __builtin_ia32_compressdi512_mask
-      {Intrinsic::x86_avx512_mask_compress_w_128, 105952}, // __builtin_ia32_compresshi128_mask
-      {Intrinsic::x86_avx512_mask_compress_w_256, 105986}, // __builtin_ia32_compresshi256_mask
-      {Intrinsic::x86_avx512_mask_compress_w_512, 106020}, // __builtin_ia32_compresshi512_mask
-      {Intrinsic::x86_avx512_mask_compress_b_128, 104740}, // __builtin_ia32_compressqi128_mask
-      {Intrinsic::x86_avx512_mask_compress_b_256, 104774}, // __builtin_ia32_compressqi256_mask
-      {Intrinsic::x86_avx512_mask_compress_b_512, 104808}, // __builtin_ia32_compressqi512_mask
-      {Intrinsic::x86_avx512_mask_compress_ps_128, 105046}, // __builtin_ia32_compresssf128_mask
-      {Intrinsic::x86_avx512_mask_compress_ps_256, 105080}, // __builtin_ia32_compresssf256_mask
-      {Intrinsic::x86_avx512_mask_compress_ps_512, 105114}, // __builtin_ia32_compresssf512_mask
-      {Intrinsic::x86_avx512_mask_compress_d_128, 104842}, // __builtin_ia32_compresssi128_mask
-      {Intrinsic::x86_avx512_mask_compress_d_256, 104876}, // __builtin_ia32_compresssi256_mask
-      {Intrinsic::x86_avx512_mask_compress_d_512, 104910}, // __builtin_ia32_compresssi512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_pd_128, 105484}, // __builtin_ia32_compressstoredf128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_pd_256, 105523}, // __builtin_ia32_compressstoredf256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_pd_512, 105562}, // __builtin_ia32_compressstoredf512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_q_128, 105718}, // __builtin_ia32_compressstoredi128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_q_256, 105757}, // __builtin_ia32_compressstoredi256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_q_512, 105796}, // __builtin_ia32_compressstoredi512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_w_128, 105835}, // __builtin_ia32_compressstorehi128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_w_256, 105874}, // __builtin_ia32_compressstorehi256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_w_512, 105913}, // __builtin_ia32_compressstorehi512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_b_128, 105250}, // __builtin_ia32_compressstoreqi128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_b_256, 105289}, // __builtin_ia32_compressstoreqi256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_b_512, 105328}, // __builtin_ia32_compressstoreqi512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_ps_128, 105601}, // __builtin_ia32_compressstoresf128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_ps_256, 105640}, // __builtin_ia32_compressstoresf256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_ps_512, 105679}, // __builtin_ia32_compressstoresf512_mask
-      {Intrinsic::x86_avx512_mask_compress_store_d_128, 105367}, // __builtin_ia32_compressstoresi128_mask
-      {Intrinsic::x86_avx512_mask_compress_store_d_256, 105406}, // __builtin_ia32_compressstoresi256_mask
-      {Intrinsic::x86_avx512_mask_compress_store_d_512, 105445}, // __builtin_ia32_compressstoresi512_mask
-      {Intrinsic::x86_sse42_crc32_64_64, 135744}, // __builtin_ia32_crc32di
-      {Intrinsic::x86_sse42_crc32_32_16, 135675}, // __builtin_ia32_crc32hi
-      {Intrinsic::x86_sse42_crc32_32_8, 135721}, // __builtin_ia32_crc32qi
-      {Intrinsic::x86_sse42_crc32_32_32, 135698}, // __builtin_ia32_crc32si
-      {Intrinsic::x86_sse2_cvtdq2ps, 133558}, // __builtin_ia32_cvtdq2ps
-      {Intrinsic::x86_avx_cvtdq2_ps_256, 99615}, // __builtin_ia32_cvtdq2ps256
-      {Intrinsic::x86_avx512_mask_cvtdq2ps_512, 106276}, // __builtin_ia32_cvtdq2ps512_mask
-      {Intrinsic::x86_sse2_cvtpd2dq, 133582}, // __builtin_ia32_cvtpd2dq
-      {Intrinsic::x86_avx512_mask_cvtpd2dq_128, 106308}, // __builtin_ia32_cvtpd2dq128_mask
-      {Intrinsic::x86_avx_cvt_pd2dq_256, 99561}, // __builtin_ia32_cvtpd2dq256
-      {Intrinsic::x86_avx512_mask_cvtpd2dq_512, 106340}, // __builtin_ia32_cvtpd2dq512_mask
-      {Intrinsic::x86_sse_cvtpd2pi, 132698}, // __builtin_ia32_cvtpd2pi
-      {Intrinsic::x86_sse2_cvtpd2ps, 133606}, // __builtin_ia32_cvtpd2ps
-      {Intrinsic::x86_avx_cvt_pd2_ps_256, 99534}, // __builtin_ia32_cvtpd2ps256
-      {Intrinsic::x86_avx512_mask_cvtpd2ps_512, 106401}, // __builtin_ia32_cvtpd2ps512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2ps, 106372}, // __builtin_ia32_cvtpd2ps_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_128, 106433}, // __builtin_ia32_cvtpd2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_256, 106465}, // __builtin_ia32_cvtpd2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2qq_512, 106497}, // __builtin_ia32_cvtpd2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_128, 106529}, // __builtin_ia32_cvtpd2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_256, 106562}, // __builtin_ia32_cvtpd2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2udq_512, 106595}, // __builtin_ia32_cvtpd2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_128, 106628}, // __builtin_ia32_cvtpd2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_256, 106661}, // __builtin_ia32_cvtpd2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvtpd2uqq_512, 106694}, // __builtin_ia32_cvtpd2uqq512_mask
-      {Intrinsic::x86_sse_cvtpi2pd, 132722}, // __builtin_ia32_cvtpi2pd
-      {Intrinsic::x86_sse_cvtpi2ps, 132746}, // __builtin_ia32_cvtpi2ps
-      {Intrinsic::x86_sse2_cvtps2dq, 133630}, // __builtin_ia32_cvtps2dq
-      {Intrinsic::x86_avx512_mask_cvtps2dq_128, 106727}, // __builtin_ia32_cvtps2dq128_mask
-      {Intrinsic::x86_avx_cvt_ps2dq_256, 99588}, // __builtin_ia32_cvtps2dq256
-      {Intrinsic::x86_avx512_mask_cvtps2dq_256, 106759}, // __builtin_ia32_cvtps2dq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2dq_512, 106791}, // __builtin_ia32_cvtps2dq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2pd_512, 106823}, // __builtin_ia32_cvtps2pd512_mask
-      {Intrinsic::x86_sse_cvtps2pi, 132770}, // __builtin_ia32_cvtps2pi
-      {Intrinsic::x86_avx512_mask_cvtps2qq_128, 106855}, // __builtin_ia32_cvtps2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2qq_256, 106887}, // __builtin_ia32_cvtps2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2qq_512, 106919}, // __builtin_ia32_cvtps2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_128, 106951}, // __builtin_ia32_cvtps2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_256, 106984}, // __builtin_ia32_cvtps2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2udq_512, 107017}, // __builtin_ia32_cvtps2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_128, 107050}, // __builtin_ia32_cvtps2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_256, 107083}, // __builtin_ia32_cvtps2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvtps2uqq_512, 107116}, // __builtin_ia32_cvtps2uqq512_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2pd_128, 107149}, // __builtin_ia32_cvtqq2pd128_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2pd_256, 107181}, // __builtin_ia32_cvtqq2pd256_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2pd_512, 107213}, // __builtin_ia32_cvtqq2pd512_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2ps_128, 107245}, // __builtin_ia32_cvtqq2ps128_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2ps_256, 107277}, // __builtin_ia32_cvtqq2ps256_mask
-      {Intrinsic::x86_avx512_mask_cvtqq2ps_512, 107309}, // __builtin_ia32_cvtqq2ps512_mask
-      {Intrinsic::x86_sse2_cvtsd2si, 133654}, // __builtin_ia32_cvtsd2si
-      {Intrinsic::x86_sse2_cvtsd2si64, 133678}, // __builtin_ia32_cvtsd2si64
-      {Intrinsic::x86_sse2_cvtsd2ss, 133704}, // __builtin_ia32_cvtsd2ss
-      {Intrinsic::x86_avx512_mask_cvtsd2ss_round, 107341}, // __builtin_ia32_cvtsd2ss_round_mask
-      {Intrinsic::x86_avx512_cvtsi2sd64, 103298}, // __builtin_ia32_cvtsi2sd64
-      {Intrinsic::x86_avx512_cvtsi2ss32, 103324}, // __builtin_ia32_cvtsi2ss32
-      {Intrinsic::x86_avx512_cvtsi2ss64, 103350}, // __builtin_ia32_cvtsi2ss64
-      {Intrinsic::x86_avx512_mask_cvtss2sd_round, 107376}, // __builtin_ia32_cvtss2sd_round_mask
-      {Intrinsic::x86_sse_cvtss2si, 132794}, // __builtin_ia32_cvtss2si
-      {Intrinsic::x86_sse_cvtss2si64, 132818}, // __builtin_ia32_cvtss2si64
-      {Intrinsic::x86_sse2_cvttpd2dq, 133728}, // __builtin_ia32_cvttpd2dq
-      {Intrinsic::x86_avx512_mask_cvttpd2dq_128, 107411}, // __builtin_ia32_cvttpd2dq128_mask
-      {Intrinsic::x86_avx_cvtt_pd2dq_256, 99642}, // __builtin_ia32_cvttpd2dq256
-      {Intrinsic::x86_avx512_mask_cvttpd2dq_512, 107444}, // __builtin_ia32_cvttpd2dq512_mask
-      {Intrinsic::x86_sse_cvttpd2pi, 132844}, // __builtin_ia32_cvttpd2pi
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_128, 107477}, // __builtin_ia32_cvttpd2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_256, 107510}, // __builtin_ia32_cvttpd2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2qq_512, 107543}, // __builtin_ia32_cvttpd2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_128, 107576}, // __builtin_ia32_cvttpd2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_256, 107610}, // __builtin_ia32_cvttpd2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2udq_512, 107644}, // __builtin_ia32_cvttpd2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_128, 107678}, // __builtin_ia32_cvttpd2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_256, 107712}, // __builtin_ia32_cvttpd2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvttpd2uqq_512, 107746}, // __builtin_ia32_cvttpd2uqq512_mask
-      {Intrinsic::x86_sse2_cvttps2dq, 133753}, // __builtin_ia32_cvttps2dq
-      {Intrinsic::x86_avx_cvtt_ps2dq_256, 99670}, // __builtin_ia32_cvttps2dq256
-      {Intrinsic::x86_avx512_mask_cvttps2dq_512, 107780}, // __builtin_ia32_cvttps2dq512_mask
-      {Intrinsic::x86_sse_cvttps2pi, 132869}, // __builtin_ia32_cvttps2pi
-      {Intrinsic::x86_avx512_mask_cvttps2qq_128, 107813}, // __builtin_ia32_cvttps2qq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2qq_256, 107846}, // __builtin_ia32_cvttps2qq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2qq_512, 107879}, // __builtin_ia32_cvttps2qq512_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_128, 107912}, // __builtin_ia32_cvttps2udq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_256, 107946}, // __builtin_ia32_cvttps2udq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2udq_512, 107980}, // __builtin_ia32_cvttps2udq512_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_128, 108014}, // __builtin_ia32_cvttps2uqq128_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_256, 108048}, // __builtin_ia32_cvttps2uqq256_mask
-      {Intrinsic::x86_avx512_mask_cvttps2uqq_512, 108082}, // __builtin_ia32_cvttps2uqq512_mask
-      {Intrinsic::x86_sse2_cvttsd2si, 133778}, // __builtin_ia32_cvttsd2si
-      {Intrinsic::x86_sse2_cvttsd2si64, 133803}, // __builtin_ia32_cvttsd2si64
-      {Intrinsic::x86_sse_cvttss2si, 132894}, // __builtin_ia32_cvttss2si
-      {Intrinsic::x86_sse_cvttss2si64, 132919}, // __builtin_ia32_cvttss2si64
-      {Intrinsic::x86_avx512_mask_cvtudq2ps_128, 108116}, // __builtin_ia32_cvtudq2ps128_mask
-      {Intrinsic::x86_avx512_mask_cvtudq2ps_256, 108149}, // __builtin_ia32_cvtudq2ps256_mask
-      {Intrinsic::x86_avx512_mask_cvtudq2ps_512, 108182}, // __builtin_ia32_cvtudq2ps512_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2pd_128, 108215}, // __builtin_ia32_cvtuqq2pd128_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2pd_256, 108248}, // __builtin_ia32_cvtuqq2pd256_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2pd_512, 108281}, // __builtin_ia32_cvtuqq2pd512_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2ps_128, 108314}, // __builtin_ia32_cvtuqq2ps128_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2ps_256, 108347}, // __builtin_ia32_cvtuqq2ps256_mask
-      {Intrinsic::x86_avx512_mask_cvtuqq2ps_512, 108380}, // __builtin_ia32_cvtuqq2ps512_mask
-      {Intrinsic::x86_avx512_cvtusi2sd, 103604}, // __builtin_ia32_cvtusi2sd32
-      {Intrinsic::x86_avx512_cvtusi642sd, 103658}, // __builtin_ia32_cvtusi2sd64
-      {Intrinsic::x86_avx512_cvtusi2ss, 103631}, // __builtin_ia32_cvtusi2ss32
-      {Intrinsic::x86_avx512_cvtusi642ss, 103685}, // __builtin_ia32_cvtusi2ss64
-      {Intrinsic::x86_avx512_mask_dbpsadbw_128, 108413}, // __builtin_ia32_dbpsadbw128_mask
-      {Intrinsic::x86_avx512_mask_dbpsadbw_256, 108445}, // __builtin_ia32_dbpsadbw256_mask
-      {Intrinsic::x86_avx512_mask_dbpsadbw_512, 108477}, // __builtin_ia32_dbpsadbw512_mask
-      {Intrinsic::x86_avx512_mask_div_pd_512, 108509}, // __builtin_ia32_divpd512_mask
-      {Intrinsic::x86_avx512_mask_div_ps_512, 108538}, // __builtin_ia32_divps512_mask
-      {Intrinsic::x86_avx512_mask_div_sd_round, 108567}, // __builtin_ia32_divsd_round_mask
-      {Intrinsic::x86_avx512_mask_div_ss_round, 108599}, // __builtin_ia32_divss_round_mask
-      {Intrinsic::x86_sse41_dppd, 135305}, // __builtin_ia32_dppd
-      {Intrinsic::x86_sse41_dpps, 135325}, // __builtin_ia32_dpps
-      {Intrinsic::x86_avx_dp_ps_256, 99698}, // __builtin_ia32_dpps256
-      {Intrinsic::x86_mmx_emms, 130298}, // __builtin_ia32_emms
-      {Intrinsic::x86_avx512_exp2_pd, 103712}, // __builtin_ia32_exp2pd_mask
-      {Intrinsic::x86_avx512_exp2_ps, 103739}, // __builtin_ia32_exp2ps_mask
-      {Intrinsic::x86_avx512_mask_expand_pd_128, 109471}, // __builtin_ia32_expanddf128_mask
-      {Intrinsic::x86_avx512_mask_expand_pd_256, 109503}, // __builtin_ia32_expanddf256_mask
-      {Intrinsic::x86_avx512_mask_expand_pd_512, 109535}, // __builtin_ia32_expanddf512_mask
-      {Intrinsic::x86_avx512_mask_expand_q_128, 109663}, // __builtin_ia32_expanddi128_mask
-      {Intrinsic::x86_avx512_mask_expand_q_256, 109695}, // __builtin_ia32_expanddi256_mask
-      {Intrinsic::x86_avx512_mask_expand_q_512, 109727}, // __builtin_ia32_expanddi512_mask
-      {Intrinsic::x86_avx512_mask_expand_w_128, 109759}, // __builtin_ia32_expandhi128_mask
-      {Intrinsic::x86_avx512_mask_expand_w_256, 109791}, // __builtin_ia32_expandhi256_mask
-      {Intrinsic::x86_avx512_mask_expand_w_512, 109823}, // __builtin_ia32_expandhi512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_pd_128, 109039}, // __builtin_ia32_expandloaddf128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_pd_256, 109075}, // __builtin_ia32_expandloaddf256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_pd_512, 109111}, // __builtin_ia32_expandloaddf512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_q_128, 109255}, // __builtin_ia32_expandloaddi128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_q_256, 109291}, // __builtin_ia32_expandloaddi256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_q_512, 109327}, // __builtin_ia32_expandloaddi512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_w_128, 109363}, // __builtin_ia32_expandloadhi128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_w_256, 109399}, // __builtin_ia32_expandloadhi256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_w_512, 109435}, // __builtin_ia32_expandloadhi512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_b_128, 108823}, // __builtin_ia32_expandloadqi128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_b_256, 108859}, // __builtin_ia32_expandloadqi256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_b_512, 108895}, // __builtin_ia32_expandloadqi512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_ps_128, 109147}, // __builtin_ia32_expandloadsf128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_ps_256, 109183}, // __builtin_ia32_expandloadsf256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_ps_512, 109219}, // __builtin_ia32_expandloadsf512_mask
-      {Intrinsic::x86_avx512_mask_expand_load_d_128, 108931}, // __builtin_ia32_expandloadsi128_mask
-      {Intrinsic::x86_avx512_mask_expand_load_d_256, 108967}, // __builtin_ia32_expandloadsi256_mask
-      {Intrinsic::x86_avx512_mask_expand_load_d_512, 109003}, // __builtin_ia32_expandloadsi512_mask
-      {Intrinsic::x86_avx512_mask_expand_b_128, 108631}, // __builtin_ia32_expandqi128_mask
-      {Intrinsic::x86_avx512_mask_expand_b_256, 108663}, // __builtin_ia32_expandqi256_mask
-      {Intrinsic::x86_avx512_mask_expand_b_512, 108695}, // __builtin_ia32_expandqi512_mask
-      {Intrinsic::x86_avx512_mask_expand_ps_128, 109567}, // __builtin_ia32_expandsf128_mask
-      {Intrinsic::x86_avx512_mask_expand_ps_256, 109599}, // __builtin_ia32_expandsf256_mask
-      {Intrinsic::x86_avx512_mask_expand_ps_512, 109631}, // __builtin_ia32_expandsf512_mask
-      {Intrinsic::x86_avx512_mask_expand_d_128, 108727}, // __builtin_ia32_expandsi128_mask
-      {Intrinsic::x86_avx512_mask_expand_d_256, 108759}, // __builtin_ia32_expandsi256_mask
-      {Intrinsic::x86_avx512_mask_expand_d_512, 108791}, // __builtin_ia32_expandsi512_mask
-      {Intrinsic::x86_sse4a_extrq, 136169}, // __builtin_ia32_extrq
-      {Intrinsic::x86_sse4a_extrqi, 136190}, // __builtin_ia32_extrqi
-      {Intrinsic::x86_mmx_femms, 130318}, // __builtin_ia32_femms
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_128, 109855}, // __builtin_ia32_fixupimmpd128_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_128, 123357}, // __builtin_ia32_fixupimmpd128_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_256, 109889}, // __builtin_ia32_fixupimmpd256_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_256, 123392}, // __builtin_ia32_fixupimmpd256_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_pd_512, 109923}, // __builtin_ia32_fixupimmpd512_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_pd_512, 123427}, // __builtin_ia32_fixupimmpd512_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_128, 109957}, // __builtin_ia32_fixupimmps128_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_128, 123462}, // __builtin_ia32_fixupimmps128_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_256, 109991}, // __builtin_ia32_fixupimmps256_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_256, 123497}, // __builtin_ia32_fixupimmps256_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ps_512, 110025}, // __builtin_ia32_fixupimmps512_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ps_512, 123532}, // __builtin_ia32_fixupimmps512_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_sd, 110059}, // __builtin_ia32_fixupimmsd_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_sd, 123567}, // __builtin_ia32_fixupimmsd_maskz
-      {Intrinsic::x86_avx512_mask_fixupimm_ss, 110090}, // __builtin_ia32_fixupimmss_mask
-      {Intrinsic::x86_avx512_maskz_fixupimm_ss, 123599}, // __builtin_ia32_fixupimmss_maskz
-      {Intrinsic::x86_avx512_mask_fpclass_pd_128, 110121}, // __builtin_ia32_fpclasspd128_mask
-      {Intrinsic::x86_avx512_mask_fpclass_pd_256, 110154}, // __builtin_ia32_fpclasspd256_mask
-      {Intrinsic::x86_avx512_mask_fpclass_pd_512, 110187}, // __builtin_ia32_fpclasspd512_mask
-      {Intrinsic::x86_avx512_mask_fpclass_ps_128, 110220}, // __builtin_ia32_fpclassps128_mask
-      {Intrinsic::x86_avx512_mask_fpclass_ps_256, 110253}, // __builtin_ia32_fpclassps256_mask
-      {Intrinsic::x86_avx512_mask_fpclass_ps_512, 110286}, // __builtin_ia32_fpclassps512_mask
-      {Intrinsic::x86_avx512_mask_fpclass_sd, 110319}, // __builtin_ia32_fpclasssd_mask
-      {Intrinsic::x86_avx512_mask_fpclass_ss, 110349}, // __builtin_ia32_fpclassss_mask
-      {Intrinsic::x86_fxrstor, 130040}, // __builtin_ia32_fxrstor
-      {Intrinsic::x86_fxrstor64, 130063}, // __builtin_ia32_fxrstor64
-      {Intrinsic::x86_fxsave, 130088}, // __builtin_ia32_fxsave
-      {Intrinsic::x86_fxsave64, 130110}, // __builtin_ia32_fxsave64
-      {Intrinsic::x86_avx512_gather3div2_df, 103994}, // __builtin_ia32_gather3div2df
-      {Intrinsic::x86_avx512_gather3div2_di, 104023}, // __builtin_ia32_gather3div2di
-      {Intrinsic::x86_avx512_gather3div4_df, 104052}, // __builtin_ia32_gather3div4df
-      {Intrinsic::x86_avx512_gather3div4_di, 104081}, // __builtin_ia32_gather3div4di
-      {Intrinsic::x86_avx512_gather3div4_sf, 104110}, // __builtin_ia32_gather3div4sf
-      {Intrinsic::x86_avx512_gather3div4_si, 104139}, // __builtin_ia32_gather3div4si
-      {Intrinsic::x86_avx512_gather3div8_sf, 104168}, // __builtin_ia32_gather3div8sf
-      {Intrinsic::x86_avx512_gather3div8_si, 104197}, // __builtin_ia32_gather3div8si
-      {Intrinsic::x86_avx512_gather3siv2_df, 104226}, // __builtin_ia32_gather3siv2df
-      {Intrinsic::x86_avx512_gather3siv2_di, 104255}, // __builtin_ia32_gather3siv2di
-      {Intrinsic::x86_avx512_gather3siv4_df, 104284}, // __builtin_ia32_gather3siv4df
-      {Intrinsic::x86_avx512_gather3siv4_di, 104313}, // __builtin_ia32_gather3siv4di
-      {Intrinsic::x86_avx512_gather3siv4_sf, 104342}, // __builtin_ia32_gather3siv4sf
-      {Intrinsic::x86_avx512_gather3siv4_si, 104371}, // __builtin_ia32_gather3siv4si
-      {Intrinsic::x86_avx512_gather3siv8_sf, 104400}, // __builtin_ia32_gather3siv8sf
-      {Intrinsic::x86_avx512_gather3siv8_si, 104429}, // __builtin_ia32_gather3siv8si
-      {Intrinsic::x86_avx2_gather_d_d, 100930}, // __builtin_ia32_gatherd_d
-      {Intrinsic::x86_avx2_gather_d_d_256, 100955}, // __builtin_ia32_gatherd_d256
-      {Intrinsic::x86_avx2_gather_d_pd, 100983}, // __builtin_ia32_gatherd_pd
-      {Intrinsic::x86_avx2_gather_d_pd_256, 101009}, // __builtin_ia32_gatherd_pd256
-      {Intrinsic::x86_avx2_gather_d_ps, 101038}, // __builtin_ia32_gatherd_ps
-      {Intrinsic::x86_avx2_gather_d_ps_256, 101064}, // __builtin_ia32_gatherd_ps256
-      {Intrinsic::x86_avx2_gather_d_q, 101093}, // __builtin_ia32_gatherd_q
-      {Intrinsic::x86_avx2_gather_d_q_256, 101118}, // __builtin_ia32_gatherd_q256
-      {Intrinsic::x86_avx512_gather_qps_512, 103965}, // __builtin_ia32_gatherdiv16sf
-      {Intrinsic::x86_avx512_gather_qpi_512, 103908}, // __builtin_ia32_gatherdiv16si
-      {Intrinsic::x86_avx512_gather_qpd_512, 103880}, // __builtin_ia32_gatherdiv8df
-      {Intrinsic::x86_avx512_gather_qpq_512, 103937}, // __builtin_ia32_gatherdiv8di
-      {Intrinsic::x86_avx512_gatherpf_dpd_512, 104458}, // __builtin_ia32_gatherpfdpd
-      {Intrinsic::x86_avx512_gatherpf_dps_512, 104485}, // __builtin_ia32_gatherpfdps
-      {Intrinsic::x86_avx512_gatherpf_qpd_512, 104512}, // __builtin_ia32_gatherpfqpd
-      {Intrinsic::x86_avx512_gatherpf_qps_512, 104539}, // __builtin_ia32_gatherpfqps
-      {Intrinsic::x86_avx2_gather_q_d, 101146}, // __builtin_ia32_gatherq_d
-      {Intrinsic::x86_avx2_gather_q_d_256, 101171}, // __builtin_ia32_gatherq_d256
-      {Intrinsic::x86_avx2_gather_q_pd, 101199}, // __builtin_ia32_gatherq_pd
-      {Intrinsic::x86_avx2_gather_q_pd_256, 101225}, // __builtin_ia32_gatherq_pd256
-      {Intrinsic::x86_avx2_gather_q_ps, 101254}, // __builtin_ia32_gatherq_ps
-      {Intrinsic::x86_avx2_gather_q_ps_256, 101280}, // __builtin_ia32_gatherq_ps256
-      {Intrinsic::x86_avx2_gather_q_q, 101309}, // __builtin_ia32_gatherq_q
-      {Intrinsic::x86_avx2_gather_q_q_256, 101334}, // __builtin_ia32_gatherq_q256
-      {Intrinsic::x86_avx512_gather_dps_512, 103851}, // __builtin_ia32_gathersiv16sf
-      {Intrinsic::x86_avx512_gather_dpi_512, 103794}, // __builtin_ia32_gathersiv16si
-      {Intrinsic::x86_avx512_gather_dpd_512, 103766}, // __builtin_ia32_gathersiv8df
-      {Intrinsic::x86_avx512_gather_dpq_512, 103823}, // __builtin_ia32_gathersiv8di
-      {Intrinsic::x86_avx512_mask_getexp_pd_128, 110379}, // __builtin_ia32_getexppd128_mask
-      {Intrinsic::x86_avx512_mask_getexp_pd_256, 110411}, // __builtin_ia32_getexppd256_mask
-      {Intrinsic::x86_avx512_mask_getexp_pd_512, 110443}, // __builtin_ia32_getexppd512_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_128, 110475}, // __builtin_ia32_getexpps128_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_256, 110507}, // __builtin_ia32_getexpps256_mask
-      {Intrinsic::x86_avx512_mask_getexp_ps_512, 110539}, // __builtin_ia32_getexpps512_mask
-      {Intrinsic::x86_avx512_mask_getexp_sd, 110571}, // __builtin_ia32_getexpsd128_round_mask
-      {Intrinsic::x86_avx512_mask_getexp_ss, 110609}, // __builtin_ia32_getexpss128_round_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_128, 110647}, // __builtin_ia32_getmantpd128_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_256, 110680}, // __builtin_ia32_getmantpd256_mask
-      {Intrinsic::x86_avx512_mask_getmant_pd_512, 110713}, // __builtin_ia32_getmantpd512_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_128, 110746}, // __builtin_ia32_getmantps128_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_256, 110779}, // __builtin_ia32_getmantps256_mask
-      {Intrinsic::x86_avx512_mask_getmant_ps_512, 110812}, // __builtin_ia32_getmantps512_mask
-      {Intrinsic::x86_avx512_mask_getmant_sd, 110845}, // __builtin_ia32_getmantsd_round_mask
-      {Intrinsic::x86_avx512_mask_getmant_ss, 110881}, // __builtin_ia32_getmantss_round_mask
-      {Intrinsic::x86_sse3_hadd_pd, 135104}, // __builtin_ia32_haddpd
-      {Intrinsic::x86_avx_hadd_pd_256, 99721}, // __builtin_ia32_haddpd256
-      {Intrinsic::x86_sse3_hadd_ps, 135126}, // __builtin_ia32_haddps
-      {Intrinsic::x86_avx_hadd_ps_256, 99746}, // __builtin_ia32_haddps256
-      {Intrinsic::x86_sse3_hsub_pd, 135148}, // __builtin_ia32_hsubpd
-      {Intrinsic::x86_avx_hsub_pd_256, 99771}, // __builtin_ia32_hsubpd256
-      {Intrinsic::x86_sse3_hsub_ps, 135170}, // __builtin_ia32_hsubps
-      {Intrinsic::x86_avx_hsub_ps_256, 99796}, // __builtin_ia32_hsubps256
-      {Intrinsic::x86_incsspd, 130134}, // __builtin_ia32_incsspd
-      {Intrinsic::x86_incsspq, 130157}, // __builtin_ia32_incsspq
-      {Intrinsic::x86_sse41_insertps, 135345}, // __builtin_ia32_insertps128
-      {Intrinsic::x86_sse4a_insertq, 136212}, // __builtin_ia32_insertq
-      {Intrinsic::x86_sse4a_insertqi, 136235}, // __builtin_ia32_insertqi
-      {Intrinsic::x86_sse3_ldu_dq, 135192}, // __builtin_ia32_lddqu
-      {Intrinsic::x86_avx_ldu_dq_256, 99821}, // __builtin_ia32_lddqu256
-      {Intrinsic::x86_sse2_lfence, 133830}, // __builtin_ia32_lfence
-      {Intrinsic::x86_llwpcb, 130180}, // __builtin_ia32_llwpcb
-      {Intrinsic::x86_lwpins32, 130202}, // __builtin_ia32_lwpins32
-      {Intrinsic::x86_lwpins64, 130226}, // __builtin_ia32_lwpins64
-      {Intrinsic::x86_lwpval32, 130250}, // __builtin_ia32_lwpval32
-      {Intrinsic::x86_lwpval64, 130274}, // __builtin_ia32_lwpval64
-      {Intrinsic::x86_avx2_maskload_d, 101362}, // __builtin_ia32_maskloadd
-      {Intrinsic::x86_avx2_maskload_d_256, 101387}, // __builtin_ia32_maskloadd256
-      {Intrinsic::x86_avx_maskload_pd, 99845}, // __builtin_ia32_maskloadpd
-      {Intrinsic::x86_avx_maskload_pd_256, 99871}, // __builtin_ia32_maskloadpd256
-      {Intrinsic::x86_avx_maskload_ps, 99900}, // __builtin_ia32_maskloadps
-      {Intrinsic::x86_avx_maskload_ps_256, 99926}, // __builtin_ia32_maskloadps256
-      {Intrinsic::x86_avx2_maskload_q, 101415}, // __builtin_ia32_maskloadq
-      {Intrinsic::x86_avx2_maskload_q_256, 101440}, // __builtin_ia32_maskloadq256
-      {Intrinsic::x86_sse2_maskmov_dqu, 133852}, // __builtin_ia32_maskmovdqu
-      {Intrinsic::x86_mmx_maskmovq, 130339}, // __builtin_ia32_maskmovq
-      {Intrinsic::x86_avx2_maskstore_d, 101468}, // __builtin_ia32_maskstored
-      {Intrinsic::x86_avx2_maskstore_d_256, 101494}, // __builtin_ia32_maskstored256
-      {Intrinsic::x86_avx_maskstore_pd, 99955}, // __builtin_ia32_maskstorepd
-      {Intrinsic::x86_avx_maskstore_pd_256, 99982}, // __builtin_ia32_maskstorepd256
-      {Intrinsic::x86_avx_maskstore_ps, 100012}, // __builtin_ia32_maskstoreps
-      {Intrinsic::x86_avx_maskstore_ps_256, 100039}, // __builtin_ia32_maskstoreps256
-      {Intrinsic::x86_avx2_maskstore_q, 101523}, // __builtin_ia32_maskstoreq
-      {Intrinsic::x86_avx2_maskstore_q_256, 101549}, // __builtin_ia32_maskstoreq256
-      {Intrinsic::x86_sse2_max_pd, 133878}, // __builtin_ia32_maxpd
-      {Intrinsic::x86_avx_max_pd_256, 100069}, // __builtin_ia32_maxpd256
-      {Intrinsic::x86_avx512_mask_max_pd_512, 110917}, // __builtin_ia32_maxpd512_mask
-      {Intrinsic::x86_sse_max_ps, 132946}, // __builtin_ia32_maxps
-      {Intrinsic::x86_avx_max_ps_256, 100093}, // __builtin_ia32_maxps256
-      {Intrinsic::x86_avx512_mask_max_ps_512, 110946}, // __builtin_ia32_maxps512_mask
-      {Intrinsic::x86_sse2_max_sd, 133899}, // __builtin_ia32_maxsd
-      {Intrinsic::x86_avx512_mask_max_sd_round, 110975}, // __builtin_ia32_maxsd_round_mask
-      {Intrinsic::x86_sse_max_ss, 132967}, // __builtin_ia32_maxss
-      {Intrinsic::x86_avx512_mask_max_ss_round, 111007}, // __builtin_ia32_maxss_round_mask
-      {Intrinsic::x86_sse2_mfence, 133920}, // __builtin_ia32_mfence
-      {Intrinsic::x86_sse2_min_pd, 133942}, // __builtin_ia32_minpd
-      {Intrinsic::x86_avx_min_pd_256, 100117}, // __builtin_ia32_minpd256
-      {Intrinsic::x86_avx512_mask_min_pd_512, 111039}, // __builtin_ia32_minpd512_mask
-      {Intrinsic::x86_sse_min_ps, 132988}, // __builtin_ia32_minps
-      {Intrinsic::x86_avx_min_ps_256, 100141}, // __builtin_ia32_minps256
-      {Intrinsic::x86_avx512_mask_min_ps_512, 111068}, // __builtin_ia32_minps512_mask
-      {Intrinsic::x86_sse2_min_sd, 133963}, // __builtin_ia32_minsd
-      {Intrinsic::x86_avx512_mask_min_sd_round, 111097}, // __builtin_ia32_minsd_round_mask
-      {Intrinsic::x86_sse_min_ss, 133009}, // __builtin_ia32_minss
-      {Intrinsic::x86_avx512_mask_min_ss_round, 111129}, // __builtin_ia32_minss_round_mask
-      {Intrinsic::x86_sse3_monitor, 135213}, // __builtin_ia32_monitor
-      {Intrinsic::x86_monitorx, 131885}, // __builtin_ia32_monitorx
-      {Intrinsic::x86_sse2_movmsk_pd, 133984}, // __builtin_ia32_movmskpd
-      {Intrinsic::x86_avx_movmsk_pd_256, 100165}, // __builtin_ia32_movmskpd256
-      {Intrinsic::x86_sse_movmsk_ps, 133030}, // __builtin_ia32_movmskps
-      {Intrinsic::x86_avx_movmsk_ps_256, 100192}, // __builtin_ia32_movmskps256
-      {Intrinsic::x86_mmx_movnt_dq, 130363}, // __builtin_ia32_movntq
-      {Intrinsic::x86_sse41_mpsadbw, 135372}, // __builtin_ia32_mpsadbw128
-      {Intrinsic::x86_avx2_mpsadbw, 101578}, // __builtin_ia32_mpsadbw256
-      {Intrinsic::x86_avx512_mask_mul_pd_512, 111161}, // __builtin_ia32_mulpd512_mask
-      {Intrinsic::x86_avx512_mask_mul_ps_512, 111190}, // __builtin_ia32_mulps512_mask
-      {Intrinsic::x86_avx512_mask_mul_sd_round, 111219}, // __builtin_ia32_mulsd_round_mask
-      {Intrinsic::x86_avx512_mask_mul_ss_round, 111251}, // __builtin_ia32_mulss_round_mask
-      {Intrinsic::x86_sse3_mwait, 135236}, // __builtin_ia32_mwait
-      {Intrinsic::x86_mwaitx, 131909}, // __builtin_ia32_mwaitx
-      {Intrinsic::x86_ssse3_pabs_b, 136259}, // __builtin_ia32_pabsb
-      {Intrinsic::x86_ssse3_pabs_d, 136280}, // __builtin_ia32_pabsd
-      {Intrinsic::x86_ssse3_pabs_w, 136301}, // __builtin_ia32_pabsw
-      {Intrinsic::x86_mmx_packssdw, 130385}, // __builtin_ia32_packssdw
-      {Intrinsic::x86_sse2_packssdw_128, 134008}, // __builtin_ia32_packssdw128
-      {Intrinsic::x86_avx2_packssdw, 101604}, // __builtin_ia32_packssdw256
-      {Intrinsic::x86_avx512_packssdw_512, 126183}, // __builtin_ia32_packssdw512
-      {Intrinsic::x86_mmx_packsswb, 130409}, // __builtin_ia32_packsswb
-      {Intrinsic::x86_sse2_packsswb_128, 134035}, // __builtin_ia32_packsswb128
-      {Intrinsic::x86_avx2_packsswb, 101631}, // __builtin_ia32_packsswb256
-      {Intrinsic::x86_avx512_packsswb_512, 126210}, // __builtin_ia32_packsswb512
-      {Intrinsic::x86_sse41_packusdw, 135398}, // __builtin_ia32_packusdw128
-      {Intrinsic::x86_avx2_packusdw, 101658}, // __builtin_ia32_packusdw256
-      {Intrinsic::x86_avx512_packusdw_512, 126237}, // __builtin_ia32_packusdw512
-      {Intrinsic::x86_mmx_packuswb, 130433}, // __builtin_ia32_packuswb
-      {Intrinsic::x86_sse2_packuswb_128, 134062}, // __builtin_ia32_packuswb128
-      {Intrinsic::x86_avx2_packuswb, 101685}, // __builtin_ia32_packuswb256
-      {Intrinsic::x86_avx512_packuswb_512, 126264}, // __builtin_ia32_packuswb512
-      {Intrinsic::x86_mmx_padd_b, 130457}, // __builtin_ia32_paddb
-      {Intrinsic::x86_mmx_padd_d, 130478}, // __builtin_ia32_paddd
-      {Intrinsic::x86_mmx_padd_q, 130499}, // __builtin_ia32_paddq
-      {Intrinsic::x86_mmx_padds_b, 130541}, // __builtin_ia32_paddsb
-      {Intrinsic::x86_sse2_padds_b, 134089}, // __builtin_ia32_paddsb128
-      {Intrinsic::x86_avx2_padds_b, 101712}, // __builtin_ia32_paddsb256
-      {Intrinsic::x86_avx512_mask_padds_b_512, 111283}, // __builtin_ia32_paddsb512_mask
-      {Intrinsic::x86_mmx_padds_w, 130563}, // __builtin_ia32_paddsw
-      {Intrinsic::x86_sse2_padds_w, 134114}, // __builtin_ia32_paddsw128
-      {Intrinsic::x86_avx2_padds_w, 101737}, // __builtin_ia32_paddsw256
-      {Intrinsic::x86_avx512_mask_padds_w_512, 111313}, // __builtin_ia32_paddsw512_mask
-      {Intrinsic::x86_mmx_paddus_b, 130585}, // __builtin_ia32_paddusb
-      {Intrinsic::x86_sse2_paddus_b, 134139}, // __builtin_ia32_paddusb128
-      {Intrinsic::x86_avx2_paddus_b, 101762}, // __builtin_ia32_paddusb256
-      {Intrinsic::x86_avx512_mask_paddus_b_512, 111343}, // __builtin_ia32_paddusb512_mask
-      {Intrinsic::x86_mmx_paddus_w, 130608}, // __builtin_ia32_paddusw
-      {Intrinsic::x86_sse2_paddus_w, 134165}, // __builtin_ia32_paddusw128
-      {Intrinsic::x86_avx2_paddus_w, 101788}, // __builtin_ia32_paddusw256
-      {Intrinsic::x86_avx512_mask_paddus_w_512, 111374}, // __builtin_ia32_paddusw512_mask
-      {Intrinsic::x86_mmx_padd_w, 130520}, // __builtin_ia32_paddw
-      {Intrinsic::x86_mmx_palignr_b, 130631}, // __builtin_ia32_palignr
-      {Intrinsic::x86_mmx_pand, 130654}, // __builtin_ia32_pand
-      {Intrinsic::x86_mmx_pandn, 130674}, // __builtin_ia32_pandn
-      {Intrinsic::x86_sse2_pause, 134191}, // __builtin_ia32_pause
-      {Intrinsic::x86_mmx_pavg_b, 130695}, // __builtin_ia32_pavgb
-      {Intrinsic::x86_3dnow_pavgusb, 98421}, // __builtin_ia32_pavgusb
-      {Intrinsic::x86_mmx_pavg_w, 130716}, // __builtin_ia32_pavgw
-      {Intrinsic::x86_sse41_pblendvb, 135425}, // __builtin_ia32_pblendvb128
-      {Intrinsic::x86_avx2_pblendvb, 101814}, // __builtin_ia32_pblendvb256
-      {Intrinsic::x86_pclmulqdq, 131931}, // __builtin_ia32_pclmulqdq128
-      {Intrinsic::x86_pclmulqdq_256, 131959}, // __builtin_ia32_pclmulqdq256
-      {Intrinsic::x86_pclmulqdq_512, 131987}, // __builtin_ia32_pclmulqdq512
-      {Intrinsic::x86_mmx_pcmpeq_b, 130737}, // __builtin_ia32_pcmpeqb
-      {Intrinsic::x86_mmx_pcmpeq_d, 130760}, // __builtin_ia32_pcmpeqd
-      {Intrinsic::x86_mmx_pcmpeq_w, 130783}, // __builtin_ia32_pcmpeqw
-      {Intrinsic::x86_sse42_pcmpestri128, 135767}, // __builtin_ia32_pcmpestri128
-      {Intrinsic::x86_sse42_pcmpestria128, 135795}, // __builtin_ia32_pcmpestria128
-      {Intrinsic::x86_sse42_pcmpestric128, 135824}, // __builtin_ia32_pcmpestric128
-      {Intrinsic::x86_sse42_pcmpestrio128, 135853}, // __builtin_ia32_pcmpestrio128
-      {Intrinsic::x86_sse42_pcmpestris128, 135882}, // __builtin_ia32_pcmpestris128
-      {Intrinsic::x86_sse42_pcmpestriz128, 135911}, // __builtin_ia32_pcmpestriz128
-      {Intrinsic::x86_sse42_pcmpestrm128, 135940}, // __builtin_ia32_pcmpestrm128
-      {Intrinsic::x86_mmx_pcmpgt_b, 130806}, // __builtin_ia32_pcmpgtb
-      {Intrinsic::x86_mmx_pcmpgt_d, 130829}, // __builtin_ia32_pcmpgtd
-      {Intrinsic::x86_mmx_pcmpgt_w, 130852}, // __builtin_ia32_pcmpgtw
-      {Intrinsic::x86_sse42_pcmpistri128, 135968}, // __builtin_ia32_pcmpistri128
-      {Intrinsic::x86_sse42_pcmpistria128, 135996}, // __builtin_ia32_pcmpistria128
-      {Intrinsic::x86_sse42_pcmpistric128, 136025}, // __builtin_ia32_pcmpistric128
-      {Intrinsic::x86_sse42_pcmpistrio128, 136054}, // __builtin_ia32_pcmpistrio128
-      {Intrinsic::x86_sse42_pcmpistris128, 136083}, // __builtin_ia32_pcmpistris128
-      {Intrinsic::x86_sse42_pcmpistriz128, 136112}, // __builtin_ia32_pcmpistriz128
-      {Intrinsic::x86_sse42_pcmpistrm128, 136141}, // __builtin_ia32_pcmpistrm128
-      {Intrinsic::x86_bmi_pdep_64, 129443}, // __builtin_ia32_pdep_di
-      {Intrinsic::x86_bmi_pdep_32, 129420}, // __builtin_ia32_pdep_si
-      {Intrinsic::x86_avx512_mask_permvar_df_256, 111405}, // __builtin_ia32_permvardf256_mask
-      {Intrinsic::x86_avx512_mask_permvar_df_512, 111438}, // __builtin_ia32_permvardf512_mask
-      {Intrinsic::x86_avx512_mask_permvar_di_256, 111471}, // __builtin_ia32_permvardi256_mask
-      {Intrinsic::x86_avx512_mask_permvar_di_512, 111504}, // __builtin_ia32_permvardi512_mask
-      {Intrinsic::x86_avx512_mask_permvar_hi_128, 111537}, // __builtin_ia32_permvarhi128_mask
-      {Intrinsic::x86_avx512_mask_permvar_hi_256, 111570}, // __builtin_ia32_permvarhi256_mask
-      {Intrinsic::x86_avx512_mask_permvar_hi_512, 111603}, // __builtin_ia32_permvarhi512_mask
-      {Intrinsic::x86_avx512_mask_permvar_qi_128, 111636}, // __builtin_ia32_permvarqi128_mask
-      {Intrinsic::x86_avx512_mask_permvar_qi_256, 111669}, // __builtin_ia32_permvarqi256_mask
-      {Intrinsic::x86_avx512_mask_permvar_qi_512, 111702}, // __builtin_ia32_permvarqi512_mask
-      {Intrinsic::x86_avx2_permps, 101869}, // __builtin_ia32_permvarsf256
-      {Intrinsic::x86_avx512_mask_permvar_sf_512, 111735}, // __builtin_ia32_permvarsf512_mask
-      {Intrinsic::x86_avx2_permd, 101841}, // __builtin_ia32_permvarsi256
-      {Intrinsic::x86_avx512_mask_permvar_si_512, 111768}, // __builtin_ia32_permvarsi512_mask
-      {Intrinsic::x86_bmi_pext_64, 129489}, // __builtin_ia32_pext_di
-      {Intrinsic::x86_bmi_pext_32, 129466}, // __builtin_ia32_pext_si
-      {Intrinsic::x86_3dnow_pf2id, 98444}, // __builtin_ia32_pf2id
-      {Intrinsic::x86_3dnowa_pf2iw, 98842}, // __builtin_ia32_pf2iw
-      {Intrinsic::x86_3dnow_pfacc, 98465}, // __builtin_ia32_pfacc
-      {Intrinsic::x86_3dnow_pfadd, 98486}, // __builtin_ia32_pfadd
-      {Intrinsic::x86_3dnow_pfcmpeq, 98507}, // __builtin_ia32_pfcmpeq
-      {Intrinsic::x86_3dnow_pfcmpge, 98530}, // __builtin_ia32_pfcmpge
-      {Intrinsic::x86_3dnow_pfcmpgt, 98553}, // __builtin_ia32_pfcmpgt
-      {Intrinsic::x86_3dnow_pfmax, 98576}, // __builtin_ia32_pfmax
-      {Intrinsic::x86_3dnow_pfmin, 98597}, // __builtin_ia32_pfmin
-      {Intrinsic::x86_3dnow_pfmul, 98618}, // __builtin_ia32_pfmul
-      {Intrinsic::x86_3dnowa_pfnacc, 98863}, // __builtin_ia32_pfnacc
-      {Intrinsic::x86_3dnowa_pfpnacc, 98885}, // __builtin_ia32_pfpnacc
-      {Intrinsic::x86_3dnow_pfrcp, 98639}, // __builtin_ia32_pfrcp
-      {Intrinsic::x86_3dnow_pfrcpit1, 98660}, // __builtin_ia32_pfrcpit1
-      {Intrinsic::x86_3dnow_pfrcpit2, 98684}, // __builtin_ia32_pfrcpit2
-      {Intrinsic::x86_3dnow_pfrsqit1, 98708}, // __builtin_ia32_pfrsqit1
-      {Intrinsic::x86_3dnow_pfrsqrt, 98732}, // __builtin_ia32_pfrsqrt
-      {Intrinsic::x86_3dnow_pfsub, 98755}, // __builtin_ia32_pfsub
-      {Intrinsic::x86_3dnow_pfsubr, 98776}, // __builtin_ia32_pfsubr
-      {Intrinsic::x86_ssse3_phadd_d, 136322}, // __builtin_ia32_phaddd
-      {Intrinsic::x86_ssse3_phadd_d_128, 136344}, // __builtin_ia32_phaddd128
-      {Intrinsic::x86_avx2_phadd_d, 101897}, // __builtin_ia32_phaddd256
-      {Intrinsic::x86_ssse3_phadd_sw, 136369}, // __builtin_ia32_phaddsw
-      {Intrinsic::x86_ssse3_phadd_sw_128, 136392}, // __builtin_ia32_phaddsw128
-      {Intrinsic::x86_avx2_phadd_sw, 101922}, // __builtin_ia32_phaddsw256
-      {Intrinsic::x86_ssse3_phadd_w, 136418}, // __builtin_ia32_phaddw
-      {Intrinsic::x86_ssse3_phadd_w_128, 136440}, // __builtin_ia32_phaddw128
-      {Intrinsic::x86_avx2_phadd_w, 101948}, // __builtin_ia32_phaddw256
-      {Intrinsic::x86_sse41_phminposuw, 135452}, // __builtin_ia32_phminposuw128
-      {Intrinsic::x86_ssse3_phsub_d, 136465}, // __builtin_ia32_phsubd
-      {Intrinsic::x86_ssse3_phsub_d_128, 136487}, // __builtin_ia32_phsubd128
-      {Intrinsic::x86_avx2_phsub_d, 101973}, // __builtin_ia32_phsubd256
-      {Intrinsic::x86_ssse3_phsub_sw, 136512}, // __builtin_ia32_phsubsw
-      {Intrinsic::x86_ssse3_phsub_sw_128, 136535}, // __builtin_ia32_phsubsw128
-      {Intrinsic::x86_avx2_phsub_sw, 101998}, // __builtin_ia32_phsubsw256
-      {Intrinsic::x86_ssse3_phsub_w, 136561}, // __builtin_ia32_phsubw
-      {Intrinsic::x86_ssse3_phsub_w_128, 136583}, // __builtin_ia32_phsubw128
-      {Intrinsic::x86_avx2_phsub_w, 102024}, // __builtin_ia32_phsubw256
-      {Intrinsic::x86_3dnow_pi2fd, 98798}, // __builtin_ia32_pi2fd
-      {Intrinsic::x86_3dnowa_pi2fw, 98908}, // __builtin_ia32_pi2fw
-      {Intrinsic::x86_ssse3_pmadd_ub_sw, 136608}, // __builtin_ia32_pmaddubsw
-      {Intrinsic::x86_ssse3_pmadd_ub_sw_128, 136633}, // __builtin_ia32_pmaddubsw128
-      {Intrinsic::x86_avx2_pmadd_ub_sw, 102049}, // __builtin_ia32_pmaddubsw256
-      {Intrinsic::x86_avx512_mask_pmaddubs_w_512, 111801}, // __builtin_ia32_pmaddubsw512_mask
-      {Intrinsic::x86_mmx_pmadd_wd, 130931}, // __builtin_ia32_pmaddwd
-      {Intrinsic::x86_sse2_pmadd_wd, 134212}, // __builtin_ia32_pmaddwd128
-      {Intrinsic::x86_avx2_pmadd_wd, 102077}, // __builtin_ia32_pmaddwd256
-      {Intrinsic::x86_avx512_mask_pmaddw_d_512, 111834}, // __builtin_ia32_pmaddwd512_mask
-      {Intrinsic::x86_mmx_pmaxs_w, 130954}, // __builtin_ia32_pmaxsw
-      {Intrinsic::x86_mmx_pmaxu_b, 130976}, // __builtin_ia32_pmaxub
-      {Intrinsic::x86_mmx_pmins_w, 130998}, // __builtin_ia32_pminsw
-      {Intrinsic::x86_mmx_pminu_b, 131020}, // __builtin_ia32_pminub
-      {Intrinsic::x86_avx512_mask_pmov_db_128, 111865}, // __builtin_ia32_pmovdb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_128, 111955}, // __builtin_ia32_pmovdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_256, 111895}, // __builtin_ia32_pmovdb256_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_256, 111988}, // __builtin_ia32_pmovdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_512, 111925}, // __builtin_ia32_pmovdb512_mask
-      {Intrinsic::x86_avx512_mask_pmov_db_mem_512, 112021}, // __builtin_ia32_pmovdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_128, 112054}, // __builtin_ia32_pmovdw128_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_128, 112144}, // __builtin_ia32_pmovdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_256, 112084}, // __builtin_ia32_pmovdw256_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_256, 112177}, // __builtin_ia32_pmovdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_512, 112114}, // __builtin_ia32_pmovdw512_mask
-      {Intrinsic::x86_avx512_mask_pmov_dw_mem_512, 112210}, // __builtin_ia32_pmovdw512mem_mask
-      {Intrinsic::x86_mmx_pmovmskb, 131042}, // __builtin_ia32_pmovmskb
-      {Intrinsic::x86_sse2_pmovmskb_128, 134238}, // __builtin_ia32_pmovmskb128
-      {Intrinsic::x86_avx2_pmovmskb, 102103}, // __builtin_ia32_pmovmskb256
-      {Intrinsic::x86_avx512_mask_pmov_qb_128, 112243}, // __builtin_ia32_pmovqb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_128, 112333}, // __builtin_ia32_pmovqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_256, 112273}, // __builtin_ia32_pmovqb256_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_256, 112366}, // __builtin_ia32_pmovqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_512, 112303}, // __builtin_ia32_pmovqb512_mask
-      {Intrinsic::x86_avx512_mask_pmov_qb_mem_512, 112399}, // __builtin_ia32_pmovqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_128, 112432}, // __builtin_ia32_pmovqd128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_128, 112522}, // __builtin_ia32_pmovqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_256, 112462}, // __builtin_ia32_pmovqd256_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_256, 112555}, // __builtin_ia32_pmovqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_512, 112492}, // __builtin_ia32_pmovqd512_mask
-      {Intrinsic::x86_avx512_mask_pmov_qd_mem_512, 112588}, // __builtin_ia32_pmovqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_128, 112621}, // __builtin_ia32_pmovqw128_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_128, 112711}, // __builtin_ia32_pmovqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_256, 112651}, // __builtin_ia32_pmovqw256_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_256, 112744}, // __builtin_ia32_pmovqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_512, 112681}, // __builtin_ia32_pmovqw512_mask
-      {Intrinsic::x86_avx512_mask_pmov_qw_mem_512, 112777}, // __builtin_ia32_pmovqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_128, 112999}, // __builtin_ia32_pmovsdb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_128, 113092}, // __builtin_ia32_pmovsdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_256, 113030}, // __builtin_ia32_pmovsdb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_256, 113126}, // __builtin_ia32_pmovsdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_512, 113061}, // __builtin_ia32_pmovsdb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_db_mem_512, 113160}, // __builtin_ia32_pmovsdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_128, 113194}, // __builtin_ia32_pmovsdw128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_128, 113287}, // __builtin_ia32_pmovsdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_256, 113225}, // __builtin_ia32_pmovsdw256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_256, 113321}, // __builtin_ia32_pmovsdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_512, 113256}, // __builtin_ia32_pmovsdw512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_dw_mem_512, 113355}, // __builtin_ia32_pmovsdw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_128, 113389}, // __builtin_ia32_pmovsqb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_128, 113482}, // __builtin_ia32_pmovsqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_256, 113420}, // __builtin_ia32_pmovsqb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_256, 113516}, // __builtin_ia32_pmovsqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_512, 113451}, // __builtin_ia32_pmovsqb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qb_mem_512, 113550}, // __builtin_ia32_pmovsqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_128, 113584}, // __builtin_ia32_pmovsqd128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_128, 113677}, // __builtin_ia32_pmovsqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_256, 113615}, // __builtin_ia32_pmovsqd256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_256, 113711}, // __builtin_ia32_pmovsqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_512, 113646}, // __builtin_ia32_pmovsqd512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qd_mem_512, 113745}, // __builtin_ia32_pmovsqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_128, 113779}, // __builtin_ia32_pmovsqw128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_128, 113872}, // __builtin_ia32_pmovsqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_256, 113810}, // __builtin_ia32_pmovsqw256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_256, 113906}, // __builtin_ia32_pmovsqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_512, 113841}, // __builtin_ia32_pmovsqw512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_qw_mem_512, 113940}, // __builtin_ia32_pmovsqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_128, 113974}, // __builtin_ia32_pmovswb128_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_128, 114067}, // __builtin_ia32_pmovswb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_256, 114005}, // __builtin_ia32_pmovswb256_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_256, 114101}, // __builtin_ia32_pmovswb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_512, 114036}, // __builtin_ia32_pmovswb512_mask
-      {Intrinsic::x86_avx512_mask_pmovs_wb_mem_512, 114135}, // __builtin_ia32_pmovswb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_128, 114169}, // __builtin_ia32_pmovusdb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_128, 114265}, // __builtin_ia32_pmovusdb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_256, 114201}, // __builtin_ia32_pmovusdb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_256, 114300}, // __builtin_ia32_pmovusdb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_512, 114233}, // __builtin_ia32_pmovusdb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_db_mem_512, 114335}, // __builtin_ia32_pmovusdb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_128, 114370}, // __builtin_ia32_pmovusdw128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_128, 114466}, // __builtin_ia32_pmovusdw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_256, 114402}, // __builtin_ia32_pmovusdw256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_256, 114501}, // __builtin_ia32_pmovusdw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_512, 114434}, // __builtin_ia32_pmovusdw512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_dw_mem_512, 114536}, // __builtin_ia32_pmovusdw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_128, 114571}, // __builtin_ia32_pmovusqb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_128, 114667}, // __builtin_ia32_pmovusqb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_256, 114603}, // __builtin_ia32_pmovusqb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_256, 114702}, // __builtin_ia32_pmovusqb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_512, 114635}, // __builtin_ia32_pmovusqb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qb_mem_512, 114737}, // __builtin_ia32_pmovusqb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_128, 114772}, // __builtin_ia32_pmovusqd128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_128, 114868}, // __builtin_ia32_pmovusqd128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_256, 114804}, // __builtin_ia32_pmovusqd256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_256, 114903}, // __builtin_ia32_pmovusqd256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_512, 114836}, // __builtin_ia32_pmovusqd512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qd_mem_512, 114938}, // __builtin_ia32_pmovusqd512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_128, 114973}, // __builtin_ia32_pmovusqw128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_128, 115069}, // __builtin_ia32_pmovusqw128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_256, 115005}, // __builtin_ia32_pmovusqw256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_256, 115104}, // __builtin_ia32_pmovusqw256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_512, 115037}, // __builtin_ia32_pmovusqw512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_qw_mem_512, 115139}, // __builtin_ia32_pmovusqw512mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_128, 115174}, // __builtin_ia32_pmovuswb128_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_128, 115270}, // __builtin_ia32_pmovuswb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_256, 115206}, // __builtin_ia32_pmovuswb256_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_256, 115305}, // __builtin_ia32_pmovuswb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_512, 115238}, // __builtin_ia32_pmovuswb512_mask
-      {Intrinsic::x86_avx512_mask_pmovus_wb_mem_512, 115340}, // __builtin_ia32_pmovuswb512mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_128, 112810}, // __builtin_ia32_pmovwb128_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_128, 112900}, // __builtin_ia32_pmovwb128mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_256, 112840}, // __builtin_ia32_pmovwb256_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_256, 112933}, // __builtin_ia32_pmovwb256mem_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_512, 112870}, // __builtin_ia32_pmovwb512_mask
-      {Intrinsic::x86_avx512_mask_pmov_wb_mem_512, 112966}, // __builtin_ia32_pmovwb512mem_mask
-      {Intrinsic::x86_sse41_pmuldq, 135481}, // __builtin_ia32_pmuldq128
-      {Intrinsic::x86_avx2_pmul_dq, 102130}, // __builtin_ia32_pmuldq256
-      {Intrinsic::x86_avx512_pmul_dq_512, 126291}, // __builtin_ia32_pmuldq512
-      {Intrinsic::x86_ssse3_pmul_hr_sw, 136661}, // __builtin_ia32_pmulhrsw
-      {Intrinsic::x86_ssse3_pmul_hr_sw_128, 136685}, // __builtin_ia32_pmulhrsw128
-      {Intrinsic::x86_avx2_pmul_hr_sw, 102155}, // __builtin_ia32_pmulhrsw256
-      {Intrinsic::x86_avx512_pmul_hr_sw_512, 126316}, // __builtin_ia32_pmulhrsw512
-      {Intrinsic::x86_3dnow_pmulhrw, 98819}, // __builtin_ia32_pmulhrw
-      {Intrinsic::x86_mmx_pmulhu_w, 131088}, // __builtin_ia32_pmulhuw
-      {Intrinsic::x86_sse2_pmulhu_w, 134290}, // __builtin_ia32_pmulhuw128
-      {Intrinsic::x86_avx2_pmulhu_w, 102207}, // __builtin_ia32_pmulhuw256
-      {Intrinsic::x86_avx512_pmulhu_w_512, 126368}, // __builtin_ia32_pmulhuw512
-      {Intrinsic::x86_mmx_pmulh_w, 131066}, // __builtin_ia32_pmulhw
-      {Intrinsic::x86_sse2_pmulh_w, 134265}, // __builtin_ia32_pmulhw128
-      {Intrinsic::x86_avx2_pmulh_w, 102182}, // __builtin_ia32_pmulhw256
-      {Intrinsic::x86_avx512_pmulh_w_512, 126343}, // __builtin_ia32_pmulhw512
-      {Intrinsic::x86_mmx_pmull_w, 131111}, // __builtin_ia32_pmullw
-      {Intrinsic::x86_mmx_pmulu_dq, 131133}, // __builtin_ia32_pmuludq
-      {Intrinsic::x86_sse2_pmulu_dq, 134316}, // __builtin_ia32_pmuludq128
-      {Intrinsic::x86_avx2_pmulu_dq, 102233}, // __builtin_ia32_pmuludq256
-      {Intrinsic::x86_avx512_pmulu_dq_512, 126394}, // __builtin_ia32_pmuludq512
-      {Intrinsic::x86_mmx_por, 131156}, // __builtin_ia32_por
-      {Intrinsic::x86_avx512_mask_prol_d_128, 115489}, // __builtin_ia32_prold128_mask
-      {Intrinsic::x86_avx512_mask_prol_d_256, 115518}, // __builtin_ia32_prold256_mask
-      {Intrinsic::x86_avx512_mask_prol_d_512, 115547}, // __builtin_ia32_prold512_mask
-      {Intrinsic::x86_avx512_mask_prol_q_128, 115576}, // __builtin_ia32_prolq128_mask
-      {Intrinsic::x86_avx512_mask_prol_q_256, 115605}, // __builtin_ia32_prolq256_mask
-      {Intrinsic::x86_avx512_mask_prol_q_512, 115634}, // __builtin_ia32_prolq512_mask
-      {Intrinsic::x86_avx512_mask_prolv_d_128, 115663}, // __builtin_ia32_prolvd128_mask
-      {Intrinsic::x86_avx512_mask_prolv_d_256, 115693}, // __builtin_ia32_prolvd256_mask
-      {Intrinsic::x86_avx512_mask_prolv_d_512, 115723}, // __builtin_ia32_prolvd512_mask
-      {Intrinsic::x86_avx512_mask_prolv_q_128, 115753}, // __builtin_ia32_prolvq128_mask
-      {Intrinsic::x86_avx512_mask_prolv_q_256, 115783}, // __builtin_ia32_prolvq256_mask
-      {Intrinsic::x86_avx512_mask_prolv_q_512, 115813}, // __builtin_ia32_prolvq512_mask
-      {Intrinsic::x86_avx512_mask_pror_d_128, 115843}, // __builtin_ia32_prord128_mask
-      {Intrinsic::x86_avx512_mask_pror_d_256, 115872}, // __builtin_ia32_prord256_mask
-      {Intrinsic::x86_avx512_mask_pror_d_512, 115901}, // __builtin_ia32_prord512_mask
-      {Intrinsic::x86_avx512_mask_pror_q_128, 115930}, // __builtin_ia32_prorq128_mask
-      {Intrinsic::x86_avx512_mask_pror_q_256, 115959}, // __builtin_ia32_prorq256_mask
-      {Intrinsic::x86_avx512_mask_pror_q_512, 115988}, // __builtin_ia32_prorq512_mask
-      {Intrinsic::x86_avx512_mask_prorv_d_128, 116017}, // __builtin_ia32_prorvd128_mask
-      {Intrinsic::x86_avx512_mask_prorv_d_256, 116047}, // __builtin_ia32_prorvd256_mask
-      {Intrinsic::x86_avx512_mask_prorv_d_512, 116077}, // __builtin_ia32_prorvd512_mask
-      {Intrinsic::x86_avx512_mask_prorv_q_128, 116107}, // __builtin_ia32_prorvq128_mask
-      {Intrinsic::x86_avx512_mask_prorv_q_256, 116137}, // __builtin_ia32_prorvq256_mask
-      {Intrinsic::x86_avx512_mask_prorv_q_512, 116167}, // __builtin_ia32_prorvq512_mask
-      {Intrinsic::x86_mmx_psad_bw, 131175}, // __builtin_ia32_psadbw
-      {Intrinsic::x86_sse2_psad_bw, 134342}, // __builtin_ia32_psadbw128
-      {Intrinsic::x86_avx2_psad_bw, 102259}, // __builtin_ia32_psadbw256
-      {Intrinsic::x86_avx512_psad_bw_512, 126420}, // __builtin_ia32_psadbw512
-      {Intrinsic::x86_ssse3_pshuf_b, 136712}, // __builtin_ia32_pshufb
-      {Intrinsic::x86_ssse3_pshuf_b_128, 136734}, // __builtin_ia32_pshufb128
-      {Intrinsic::x86_avx2_pshuf_b, 102284}, // __builtin_ia32_pshufb256
-      {Intrinsic::x86_avx512_pshuf_b_512, 126445}, // __builtin_ia32_pshufb512
-      {Intrinsic::x86_sse_pshuf_w, 133054}, // __builtin_ia32_pshufw
-      {Intrinsic::x86_ssse3_psign_b, 136759}, // __builtin_ia32_psignb
-      {Intrinsic::x86_ssse3_psign_b_128, 136781}, // __builtin_ia32_psignb128
-      {Intrinsic::x86_avx2_psign_b, 102309}, // __builtin_ia32_psignb256
-      {Intrinsic::x86_ssse3_psign_d, 136806}, // __builtin_ia32_psignd
-      {Intrinsic::x86_ssse3_psign_d_128, 136828}, // __builtin_ia32_psignd128
-      {Intrinsic::x86_avx2_psign_d, 102334}, // __builtin_ia32_psignd256
-      {Intrinsic::x86_ssse3_psign_w, 136853}, // __builtin_ia32_psignw
-      {Intrinsic::x86_ssse3_psign_w_128, 136875}, // __builtin_ia32_psignw128
-      {Intrinsic::x86_avx2_psign_w, 102359}, // __builtin_ia32_psignw256
-      {Intrinsic::x86_mmx_psll_d, 131197}, // __builtin_ia32_pslld
-      {Intrinsic::x86_sse2_psll_d, 134367}, // __builtin_ia32_pslld128
-      {Intrinsic::x86_avx2_psll_d, 102384}, // __builtin_ia32_pslld256
-      {Intrinsic::x86_avx512_psll_d_512, 126470}, // __builtin_ia32_pslld512
-      {Intrinsic::x86_mmx_pslli_d, 131260}, // __builtin_ia32_pslldi
-      {Intrinsic::x86_sse2_pslli_d, 134439}, // __builtin_ia32_pslldi128
-      {Intrinsic::x86_avx2_pslli_d, 102456}, // __builtin_ia32_pslldi256
-      {Intrinsic::x86_avx512_pslli_d_512, 126542}, // __builtin_ia32_pslldi512
-      {Intrinsic::x86_mmx_psll_q, 131218}, // __builtin_ia32_psllq
-      {Intrinsic::x86_sse2_psll_q, 134391}, // __builtin_ia32_psllq128
-      {Intrinsic::x86_avx2_psll_q, 102408}, // __builtin_ia32_psllq256
-      {Intrinsic::x86_avx512_psll_q_512, 126494}, // __builtin_ia32_psllq512
-      {Intrinsic::x86_mmx_pslli_q, 131282}, // __builtin_ia32_psllqi
-      {Intrinsic::x86_sse2_pslli_q, 134464}, // __builtin_ia32_psllqi128
-      {Intrinsic::x86_avx2_pslli_q, 102481}, // __builtin_ia32_psllqi256
-      {Intrinsic::x86_avx512_pslli_q_512, 126567}, // __builtin_ia32_psllqi512
-      {Intrinsic::x86_avx512_psllv_w_256, 126690}, // __builtin_ia32_psllv16hi
-      {Intrinsic::x86_avx512_psllv_d_512, 126617}, // __builtin_ia32_psllv16si
-      {Intrinsic::x86_avx2_psllv_q, 102579}, // __builtin_ia32_psllv2di
-      {Intrinsic::x86_avx512_psllv_w_512, 126715}, // __builtin_ia32_psllv32hi
-      {Intrinsic::x86_avx2_psllv_q_256, 102603}, // __builtin_ia32_psllv4di
-      {Intrinsic::x86_avx2_psllv_d, 102531}, // __builtin_ia32_psllv4si
-      {Intrinsic::x86_avx512_psllv_q_512, 126642}, // __builtin_ia32_psllv8di
-      {Intrinsic::x86_avx512_psllv_w_128, 126666}, // __builtin_ia32_psllv8hi
-      {Intrinsic::x86_avx2_psllv_d_256, 102555}, // __builtin_ia32_psllv8si
-      {Intrinsic::x86_mmx_psll_w, 131239}, // __builtin_ia32_psllw
-      {Intrinsic::x86_sse2_psll_w, 134415}, // __builtin_ia32_psllw128
-      {Intrinsic::x86_avx2_psll_w, 102432}, // __builtin_ia32_psllw256
-      {Intrinsic::x86_avx512_psll_w_512, 126518}, // __builtin_ia32_psllw512
-      {Intrinsic::x86_mmx_pslli_w, 131304}, // __builtin_ia32_psllwi
-      {Intrinsic::x86_sse2_pslli_w, 134489}, // __builtin_ia32_psllwi128
-      {Intrinsic::x86_avx2_pslli_w, 102506}, // __builtin_ia32_psllwi256
-      {Intrinsic::x86_avx512_pslli_w_512, 126592}, // __builtin_ia32_psllwi512
-      {Intrinsic::x86_mmx_psra_d, 131326}, // __builtin_ia32_psrad
-      {Intrinsic::x86_sse2_psra_d, 134514}, // __builtin_ia32_psrad128
-      {Intrinsic::x86_avx2_psra_d, 102627}, // __builtin_ia32_psrad256
-      {Intrinsic::x86_avx512_psra_d_512, 126740}, // __builtin_ia32_psrad512
-      {Intrinsic::x86_mmx_psrai_d, 131368}, // __builtin_ia32_psradi
-      {Intrinsic::x86_sse2_psrai_d, 134562}, // __builtin_ia32_psradi128
-      {Intrinsic::x86_avx2_psrai_d, 102675}, // __builtin_ia32_psradi256
-      {Intrinsic::x86_avx512_psrai_d_512, 126860}, // __builtin_ia32_psradi512
-      {Intrinsic::x86_avx512_psra_q_128, 126764}, // __builtin_ia32_psraq128
-      {Intrinsic::x86_avx512_psra_q_256, 126788}, // __builtin_ia32_psraq256
-      {Intrinsic::x86_avx512_psra_q_512, 126812}, // __builtin_ia32_psraq512
-      {Intrinsic::x86_avx512_psrai_q_128, 126885}, // __builtin_ia32_psraqi128
-      {Intrinsic::x86_avx512_psrai_q_256, 126910}, // __builtin_ia32_psraqi256
-      {Intrinsic::x86_avx512_psrai_q_512, 126935}, // __builtin_ia32_psraqi512
-      {Intrinsic::x86_avx512_psrav_w_256, 127108}, // __builtin_ia32_psrav16hi
-      {Intrinsic::x86_avx512_psrav_d_512, 126985}, // __builtin_ia32_psrav16si
-      {Intrinsic::x86_avx512_psrav_w_512, 127133}, // __builtin_ia32_psrav32hi
-      {Intrinsic::x86_avx2_psrav_d, 102725}, // __builtin_ia32_psrav4si
-      {Intrinsic::x86_avx512_psrav_q_512, 127060}, // __builtin_ia32_psrav8di
-      {Intrinsic::x86_avx512_psrav_w_128, 127084}, // __builtin_ia32_psrav8hi
-      {Intrinsic::x86_avx2_psrav_d_256, 102749}, // __builtin_ia32_psrav8si
-      {Intrinsic::x86_avx512_psrav_q_128, 127010}, // __builtin_ia32_psravq128
-      {Intrinsic::x86_avx512_psrav_q_256, 127035}, // __builtin_ia32_psravq256
-      {Intrinsic::x86_mmx_psra_w, 131347}, // __builtin_ia32_psraw
-      {Intrinsic::x86_sse2_psra_w, 134538}, // __builtin_ia32_psraw128
-      {Intrinsic::x86_avx2_psra_w, 102651}, // __builtin_ia32_psraw256
-      {Intrinsic::x86_avx512_psra_w_512, 126836}, // __builtin_ia32_psraw512
-      {Intrinsic::x86_mmx_psrai_w, 131390}, // __builtin_ia32_psrawi
-      {Intrinsic::x86_sse2_psrai_w, 134587}, // __builtin_ia32_psrawi128
-      {Intrinsic::x86_avx2_psrai_w, 102700}, // __builtin_ia32_psrawi256
-      {Intrinsic::x86_avx512_psrai_w_512, 126960}, // __builtin_ia32_psrawi512
-      {Intrinsic::x86_mmx_psrl_d, 131412}, // __builtin_ia32_psrld
-      {Intrinsic::x86_sse2_psrl_d, 134612}, // __builtin_ia32_psrld128
-      {Intrinsic::x86_avx2_psrl_d, 102773}, // __builtin_ia32_psrld256
-      {Intrinsic::x86_avx512_psrl_d_512, 127158}, // __builtin_ia32_psrld512
-      {Intrinsic::x86_mmx_psrli_d, 131475}, // __builtin_ia32_psrldi
-      {Intrinsic::x86_sse2_psrli_d, 134684}, // __builtin_ia32_psrldi128
-      {Intrinsic::x86_avx2_psrli_d, 102845}, // __builtin_ia32_psrldi256
-      {Intrinsic::x86_avx512_psrli_d_512, 127230}, // __builtin_ia32_psrldi512
-      {Intrinsic::x86_mmx_psrl_q, 131433}, // __builtin_ia32_psrlq
-      {Intrinsic::x86_sse2_psrl_q, 134636}, // __builtin_ia32_psrlq128
-      {Intrinsic::x86_avx2_psrl_q, 102797}, // __builtin_ia32_psrlq256
-      {Intrinsic::x86_avx512_psrl_q_512, 127182}, // __builtin_ia32_psrlq512
-      {Intrinsic::x86_mmx_psrli_q, 131497}, // __builtin_ia32_psrlqi
-      {Intrinsic::x86_sse2_psrli_q, 134709}, // __builtin_ia32_psrlqi128
-      {Intrinsic::x86_avx2_psrli_q, 102870}, // __builtin_ia32_psrlqi256
-      {Intrinsic::x86_avx512_psrli_q_512, 127255}, // __builtin_ia32_psrlqi512
-      {Intrinsic::x86_avx512_psrlv_w_256, 127378}, // __builtin_ia32_psrlv16hi
-      {Intrinsic::x86_avx512_psrlv_d_512, 127305}, // __builtin_ia32_psrlv16si
-      {Intrinsic::x86_avx2_psrlv_q, 102968}, // __builtin_ia32_psrlv2di
-      {Intrinsic::x86_avx512_psrlv_w_512, 127403}, // __builtin_ia32_psrlv32hi
-      {Intrinsic::x86_avx2_psrlv_q_256, 102992}, // __builtin_ia32_psrlv4di
-      {Intrinsic::x86_avx2_psrlv_d, 102920}, // __builtin_ia32_psrlv4si
-      {Intrinsic::x86_avx512_psrlv_q_512, 127330}, // __builtin_ia32_psrlv8di
-      {Intrinsic::x86_avx512_psrlv_w_128, 127354}, // __builtin_ia32_psrlv8hi
-      {Intrinsic::x86_avx2_psrlv_d_256, 102944}, // __builtin_ia32_psrlv8si
-      {Intrinsic::x86_mmx_psrl_w, 131454}, // __builtin_ia32_psrlw
-      {Intrinsic::x86_sse2_psrl_w, 134660}, // __builtin_ia32_psrlw128
-      {Intrinsic::x86_avx2_psrl_w, 102821}, // __builtin_ia32_psrlw256
-      {Intrinsic::x86_avx512_psrl_w_512, 127206}, // __builtin_ia32_psrlw512
-      {Intrinsic::x86_mmx_psrli_w, 131519}, // __builtin_ia32_psrlwi
-      {Intrinsic::x86_sse2_psrli_w, 134734}, // __builtin_ia32_psrlwi128
-      {Intrinsic::x86_avx2_psrli_w, 102895}, // __builtin_ia32_psrlwi256
-      {Intrinsic::x86_avx512_psrli_w_512, 127280}, // __builtin_ia32_psrlwi512
-      {Intrinsic::x86_mmx_psub_b, 131541}, // __builtin_ia32_psubb
-      {Intrinsic::x86_mmx_psub_d, 131562}, // __builtin_ia32_psubd
-      {Intrinsic::x86_mmx_psub_q, 131583}, // __builtin_ia32_psubq
-      {Intrinsic::x86_mmx_psubs_b, 131625}, // __builtin_ia32_psubsb
-      {Intrinsic::x86_sse2_psubs_b, 134759}, // __builtin_ia32_psubsb128
-      {Intrinsic::x86_avx2_psubs_b, 103016}, // __builtin_ia32_psubsb256
-      {Intrinsic::x86_avx512_mask_psubs_b_512, 116197}, // __builtin_ia32_psubsb512_mask
-      {Intrinsic::x86_mmx_psubs_w, 131647}, // __builtin_ia32_psubsw
-      {Intrinsic::x86_sse2_psubs_w, 134784}, // __builtin_ia32_psubsw128
-      {Intrinsic::x86_avx2_psubs_w, 103041}, // __builtin_ia32_psubsw256
-      {Intrinsic::x86_avx512_mask_psubs_w_512, 116227}, // __builtin_ia32_psubsw512_mask
-      {Intrinsic::x86_mmx_psubus_b, 131669}, // __builtin_ia32_psubusb
-      {Intrinsic::x86_sse2_psubus_b, 134809}, // __builtin_ia32_psubusb128
-      {Intrinsic::x86_avx2_psubus_b, 103066}, // __builtin_ia32_psubusb256
-      {Intrinsic::x86_avx512_mask_psubus_b_512, 116257}, // __builtin_ia32_psubusb512_mask
-      {Intrinsic::x86_mmx_psubus_w, 131692}, // __builtin_ia32_psubusw
-      {Intrinsic::x86_sse2_psubus_w, 134835}, // __builtin_ia32_psubusw128
-      {Intrinsic::x86_avx2_psubus_w, 103092}, // __builtin_ia32_psubusw256
-      {Intrinsic::x86_avx512_mask_psubus_w_512, 116288}, // __builtin_ia32_psubusw512_mask
-      {Intrinsic::x86_mmx_psub_w, 131604}, // __builtin_ia32_psubw
-      {Intrinsic::x86_avx512_mask_pternlog_d_128, 116319}, // __builtin_ia32_pternlogd128_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_d_128, 123631}, // __builtin_ia32_pternlogd128_maskz
-      {Intrinsic::x86_avx512_mask_pternlog_d_256, 116352}, // __builtin_ia32_pternlogd256_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_d_256, 123665}, // __builtin_ia32_pternlogd256_maskz
-      {Intrinsic::x86_avx512_mask_pternlog_d_512, 116385}, // __builtin_ia32_pternlogd512_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_d_512, 123699}, // __builtin_ia32_pternlogd512_maskz
-      {Intrinsic::x86_avx512_mask_pternlog_q_128, 116418}, // __builtin_ia32_pternlogq128_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_q_128, 123733}, // __builtin_ia32_pternlogq128_maskz
-      {Intrinsic::x86_avx512_mask_pternlog_q_256, 116451}, // __builtin_ia32_pternlogq256_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_q_256, 123767}, // __builtin_ia32_pternlogq256_maskz
-      {Intrinsic::x86_avx512_mask_pternlog_q_512, 116484}, // __builtin_ia32_pternlogq512_mask
-      {Intrinsic::x86_avx512_maskz_pternlog_q_512, 123801}, // __builtin_ia32_pternlogq512_maskz
-      {Intrinsic::x86_sse41_ptestc, 135506}, // __builtin_ia32_ptestc128
-      {Intrinsic::x86_avx_ptestc_256, 100219}, // __builtin_ia32_ptestc256
-      {Intrinsic::x86_sse41_ptestnzc, 135531}, // __builtin_ia32_ptestnzc128
-      {Intrinsic::x86_avx_ptestnzc_256, 100244}, // __builtin_ia32_ptestnzc256
-      {Intrinsic::x86_sse41_ptestz, 135558}, // __builtin_ia32_ptestz128
-      {Intrinsic::x86_avx_ptestz_256, 100271}, // __builtin_ia32_ptestz256
-      {Intrinsic::x86_mmx_punpckhbw, 131715}, // __builtin_ia32_punpckhbw
-      {Intrinsic::x86_mmx_punpckhdq, 131740}, // __builtin_ia32_punpckhdq
-      {Intrinsic::x86_mmx_punpckhwd, 131765}, // __builtin_ia32_punpckhwd
-      {Intrinsic::x86_mmx_punpcklbw, 131790}, // __builtin_ia32_punpcklbw
-      {Intrinsic::x86_mmx_punpckldq, 131815}, // __builtin_ia32_punpckldq
-      {Intrinsic::x86_mmx_punpcklwd, 131840}, // __builtin_ia32_punpcklwd
-      {Intrinsic::x86_mmx_pxor, 131865}, // __builtin_ia32_pxor
-      {Intrinsic::x86_avx512_mask_range_pd_128, 116517}, // __builtin_ia32_rangepd128_mask
-      {Intrinsic::x86_avx512_mask_range_pd_256, 116548}, // __builtin_ia32_rangepd256_mask
-      {Intrinsic::x86_avx512_mask_range_pd_512, 116579}, // __builtin_ia32_rangepd512_mask
-      {Intrinsic::x86_avx512_mask_range_ps_128, 116610}, // __builtin_ia32_rangeps128_mask
-      {Intrinsic::x86_avx512_mask_range_ps_256, 116641}, // __builtin_ia32_rangeps256_mask
-      {Intrinsic::x86_avx512_mask_range_ps_512, 116672}, // __builtin_ia32_rangeps512_mask
-      {Intrinsic::x86_avx512_mask_range_sd, 116703}, // __builtin_ia32_rangesd128_round_mask
-      {Intrinsic::x86_avx512_mask_range_ss, 116740}, // __builtin_ia32_rangess128_round_mask
-      {Intrinsic::x86_avx512_rcp14_pd_128, 127428}, // __builtin_ia32_rcp14pd128_mask
-      {Intrinsic::x86_avx512_rcp14_pd_256, 127459}, // __builtin_ia32_rcp14pd256_mask
-      {Intrinsic::x86_avx512_rcp14_pd_512, 127490}, // __builtin_ia32_rcp14pd512_mask
-      {Intrinsic::x86_avx512_rcp14_ps_128, 127521}, // __builtin_ia32_rcp14ps128_mask
-      {Intrinsic::x86_avx512_rcp14_ps_256, 127552}, // __builtin_ia32_rcp14ps256_mask
-      {Intrinsic::x86_avx512_rcp14_ps_512, 127583}, // __builtin_ia32_rcp14ps512_mask
-      {Intrinsic::x86_avx512_rcp14_sd, 127614}, // __builtin_ia32_rcp14sd_mask
-      {Intrinsic::x86_avx512_rcp14_ss, 127642}, // __builtin_ia32_rcp14ss_mask
-      {Intrinsic::x86_avx512_rcp28_pd, 127670}, // __builtin_ia32_rcp28pd_mask
-      {Intrinsic::x86_avx512_rcp28_ps, 127698}, // __builtin_ia32_rcp28ps_mask
-      {Intrinsic::x86_avx512_rcp28_sd, 127726}, // __builtin_ia32_rcp28sd_round_mask
-      {Intrinsic::x86_avx512_rcp28_ss, 127760}, // __builtin_ia32_rcp28ss_round_mask
-      {Intrinsic::x86_sse_rcp_ps, 133076}, // __builtin_ia32_rcpps
-      {Intrinsic::x86_avx_rcp_ps_256, 100296}, // __builtin_ia32_rcpps256
-      {Intrinsic::x86_sse_rcp_ss, 133097}, // __builtin_ia32_rcpss
-      {Intrinsic::x86_rdfsbase_32, 132015}, // __builtin_ia32_rdfsbase32
-      {Intrinsic::x86_rdfsbase_64, 132041}, // __builtin_ia32_rdfsbase64
-      {Intrinsic::x86_rdgsbase_32, 132067}, // __builtin_ia32_rdgsbase32
-      {Intrinsic::x86_rdgsbase_64, 132093}, // __builtin_ia32_rdgsbase64
-      {Intrinsic::x86_rdpid, 132119}, // __builtin_ia32_rdpid
-      {Intrinsic::x86_rdpkru, 132140}, // __builtin_ia32_rdpkru
-      {Intrinsic::x86_rdpmc, 132162}, // __builtin_ia32_rdpmc
-      {Intrinsic::x86_rdsspd, 132183}, // __builtin_ia32_rdsspd
-      {Intrinsic::x86_rdsspq, 132205}, // __builtin_ia32_rdsspq
-      {Intrinsic::x86_rdtsc, 132227}, // __builtin_ia32_rdtsc
-      {Intrinsic::x86_rdtscp, 132248}, // __builtin_ia32_rdtscp
-      {Intrinsic::x86_flags_read_u32, 129604}, // __builtin_ia32_readeflags_u32
-      {Intrinsic::x86_flags_read_u64, 129634}, // __builtin_ia32_readeflags_u64
-      {Intrinsic::x86_avx512_mask_reduce_pd_128, 116777}, // __builtin_ia32_reducepd128_mask
-      {Intrinsic::x86_avx512_mask_reduce_pd_256, 116809}, // __builtin_ia32_reducepd256_mask
-      {Intrinsic::x86_avx512_mask_reduce_pd_512, 116841}, // __builtin_ia32_reducepd512_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_128, 116873}, // __builtin_ia32_reduceps128_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_256, 116905}, // __builtin_ia32_reduceps256_mask
-      {Intrinsic::x86_avx512_mask_reduce_ps_512, 116937}, // __builtin_ia32_reduceps512_mask
-      {Intrinsic::x86_avx512_mask_reduce_sd, 116969}, // __builtin_ia32_reducesd_mask
-      {Intrinsic::x86_avx512_mask_reduce_ss, 116998}, // __builtin_ia32_reducess_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_128, 117027}, // __builtin_ia32_rndscalepd_128_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_256, 117062}, // __builtin_ia32_rndscalepd_256_mask
-      {Intrinsic::x86_avx512_mask_rndscale_pd_512, 117097}, // __builtin_ia32_rndscalepd_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_128, 117128}, // __builtin_ia32_rndscaleps_128_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_256, 117163}, // __builtin_ia32_rndscaleps_256_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ps_512, 117198}, // __builtin_ia32_rndscaleps_mask
-      {Intrinsic::x86_avx512_mask_rndscale_sd, 117229}, // __builtin_ia32_rndscalesd_round_mask
-      {Intrinsic::x86_avx512_mask_rndscale_ss, 117266}, // __builtin_ia32_rndscaless_round_mask
-      {Intrinsic::x86_sse41_round_pd, 135583}, // __builtin_ia32_roundpd
-      {Intrinsic::x86_avx_round_pd_256, 100320}, // __builtin_ia32_roundpd256
-      {Intrinsic::x86_sse41_round_ps, 135606}, // __builtin_ia32_roundps
-      {Intrinsic::x86_avx_round_ps_256, 100346}, // __builtin_ia32_roundps256
-      {Intrinsic::x86_sse41_round_sd, 135629}, // __builtin_ia32_roundsd
-      {Intrinsic::x86_sse41_round_ss, 135652}, // __builtin_ia32_roundss
-      {Intrinsic::x86_avx512_rsqrt14_pd_128, 127794}, // __builtin_ia32_rsqrt14pd128_mask
-      {Intrinsic::x86_avx512_rsqrt14_pd_256, 127827}, // __builtin_ia32_rsqrt14pd256_mask
-      {Intrinsic::x86_avx512_rsqrt14_pd_512, 127860}, // __builtin_ia32_rsqrt14pd512_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_128, 127893}, // __builtin_ia32_rsqrt14ps128_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_256, 127926}, // __builtin_ia32_rsqrt14ps256_mask
-      {Intrinsic::x86_avx512_rsqrt14_ps_512, 127959}, // __builtin_ia32_rsqrt14ps512_mask
-      {Intrinsic::x86_avx512_rsqrt14_sd, 127992}, // __builtin_ia32_rsqrt14sd_mask
-      {Intrinsic::x86_avx512_rsqrt14_ss, 128022}, // __builtin_ia32_rsqrt14ss_mask
-      {Intrinsic::x86_avx512_rsqrt28_pd, 128052}, // __builtin_ia32_rsqrt28pd_mask
-      {Intrinsic::x86_avx512_rsqrt28_ps, 128082}, // __builtin_ia32_rsqrt28ps_mask
-      {Intrinsic::x86_avx512_rsqrt28_sd, 128112}, // __builtin_ia32_rsqrt28sd_round_mask
-      {Intrinsic::x86_avx512_rsqrt28_ss, 128148}, // __builtin_ia32_rsqrt28ss_round_mask
-      {Intrinsic::x86_sse_rsqrt_ps, 133118}, // __builtin_ia32_rsqrtps
-      {Intrinsic::x86_avx_rsqrt_ps_256, 100372}, // __builtin_ia32_rsqrtps256
-      {Intrinsic::x86_sse_rsqrt_ss, 133141}, // __builtin_ia32_rsqrtss
-      {Intrinsic::x86_rstorssp, 132270}, // __builtin_ia32_rstorssp
-      {Intrinsic::x86_saveprevssp, 132294}, // __builtin_ia32_saveprevssp
-      {Intrinsic::x86_avx512_mask_scalef_pd_128, 117303}, // __builtin_ia32_scalefpd128_mask
-      {Intrinsic::x86_avx512_mask_scalef_pd_256, 117335}, // __builtin_ia32_scalefpd256_mask
-      {Intrinsic::x86_avx512_mask_scalef_pd_512, 117367}, // __builtin_ia32_scalefpd512_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_128, 117399}, // __builtin_ia32_scalefps128_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_256, 117431}, // __builtin_ia32_scalefps256_mask
-      {Intrinsic::x86_avx512_mask_scalef_ps_512, 117463}, // __builtin_ia32_scalefps512_mask
-      {Intrinsic::x86_avx512_mask_scalef_sd, 117495}, // __builtin_ia32_scalefsd_round_mask
-      {Intrinsic::x86_avx512_mask_scalef_ss, 117530}, // __builtin_ia32_scalefss_round_mask
-      {Intrinsic::x86_avx512_scatter_qps_512, 128390}, // __builtin_ia32_scatterdiv16sf
-      {Intrinsic::x86_avx512_scatter_qpi_512, 128331}, // __builtin_ia32_scatterdiv16si
-      {Intrinsic::x86_avx512_scatterdiv2_df, 128420}, // __builtin_ia32_scatterdiv2df
-      {Intrinsic::x86_avx512_scatterdiv2_di, 128449}, // __builtin_ia32_scatterdiv2di
-      {Intrinsic::x86_avx512_scatterdiv4_df, 128478}, // __builtin_ia32_scatterdiv4df
-      {Intrinsic::x86_avx512_scatterdiv4_di, 128507}, // __builtin_ia32_scatterdiv4di
-      {Intrinsic::x86_avx512_scatterdiv4_sf, 128536}, // __builtin_ia32_scatterdiv4sf
-      {Intrinsic::x86_avx512_scatterdiv4_si, 128565}, // __builtin_ia32_scatterdiv4si
-      {Intrinsic::x86_avx512_scatter_qpd_512, 128302}, // __builtin_ia32_scatterdiv8df
-      {Intrinsic::x86_avx512_scatter_qpq_512, 128361}, // __builtin_ia32_scatterdiv8di
-      {Intrinsic::x86_avx512_scatterdiv8_sf, 128594}, // __builtin_ia32_scatterdiv8sf
-      {Intrinsic::x86_avx512_scatterdiv8_si, 128623}, // __builtin_ia32_scatterdiv8si
-      {Intrinsic::x86_avx512_scatterpf_dpd_512, 128652}, // __builtin_ia32_scatterpfdpd
-      {Intrinsic::x86_avx512_scatterpf_dps_512, 128680}, // __builtin_ia32_scatterpfdps
-      {Intrinsic::x86_avx512_scatterpf_qpd_512, 128708}, // __builtin_ia32_scatterpfqpd
-      {Intrinsic::x86_avx512_scatterpf_qps_512, 128736}, // __builtin_ia32_scatterpfqps
-      {Intrinsic::x86_avx512_scatter_dps_512, 128272}, // __builtin_ia32_scattersiv16sf
-      {Intrinsic::x86_avx512_scatter_dpi_512, 128213}, // __builtin_ia32_scattersiv16si
-      {Intrinsic::x86_avx512_scattersiv2_df, 128764}, // __builtin_ia32_scattersiv2df
-      {Intrinsic::x86_avx512_scattersiv2_di, 128793}, // __builtin_ia32_scattersiv2di
-      {Intrinsic::x86_avx512_scattersiv4_df, 128822}, // __builtin_ia32_scattersiv4df
-      {Intrinsic::x86_avx512_scattersiv4_di, 128851}, // __builtin_ia32_scattersiv4di
-      {Intrinsic::x86_avx512_scattersiv4_sf, 128880}, // __builtin_ia32_scattersiv4sf
-      {Intrinsic::x86_avx512_scattersiv4_si, 128909}, // __builtin_ia32_scattersiv4si
-      {Intrinsic::x86_avx512_scatter_dpd_512, 128184}, // __builtin_ia32_scattersiv8df
-      {Intrinsic::x86_avx512_scatter_dpq_512, 128243}, // __builtin_ia32_scattersiv8di
-      {Intrinsic::x86_avx512_scattersiv8_sf, 128938}, // __builtin_ia32_scattersiv8sf
-      {Intrinsic::x86_avx512_scattersiv8_si, 128967}, // __builtin_ia32_scattersiv8si
-      {Intrinsic::x86_setssbsy, 132321}, // __builtin_ia32_setssbsy
-      {Intrinsic::x86_sse_sfence, 133164}, // __builtin_ia32_sfence
-      {Intrinsic::x86_sha1msg1, 132345}, // __builtin_ia32_sha1msg1
-      {Intrinsic::x86_sha1msg2, 132369}, // __builtin_ia32_sha1msg2
-      {Intrinsic::x86_sha1nexte, 132393}, // __builtin_ia32_sha1nexte
-      {Intrinsic::x86_sha1rnds4, 132418}, // __builtin_ia32_sha1rnds4
-      {Intrinsic::x86_sha256msg1, 132443}, // __builtin_ia32_sha256msg1
-      {Intrinsic::x86_sha256msg2, 132469}, // __builtin_ia32_sha256msg2
-      {Intrinsic::x86_sha256rnds2, 132495}, // __builtin_ia32_sha256rnds2
-      {Intrinsic::x86_slwpcb, 132522}, // __builtin_ia32_slwpcb
-      {Intrinsic::x86_sse2_sqrt_pd, 134861}, // __builtin_ia32_sqrtpd
-      {Intrinsic::x86_avx512_mask_sqrt_pd_128, 117565}, // __builtin_ia32_sqrtpd128_mask
-      {Intrinsic::x86_avx_sqrt_pd_256, 100398}, // __builtin_ia32_sqrtpd256
-      {Intrinsic::x86_avx512_mask_sqrt_pd_256, 117595}, // __builtin_ia32_sqrtpd256_mask
-      {Intrinsic::x86_avx512_mask_sqrt_pd_512, 117625}, // __builtin_ia32_sqrtpd512_mask
-      {Intrinsic::x86_sse_sqrt_ps, 133186}, // __builtin_ia32_sqrtps
-      {Intrinsic::x86_avx512_mask_sqrt_ps_128, 117655}, // __builtin_ia32_sqrtps128_mask
-      {Intrinsic::x86_avx_sqrt_ps_256, 100423}, // __builtin_ia32_sqrtps256
-      {Intrinsic::x86_avx512_mask_sqrt_ps_256, 117685}, // __builtin_ia32_sqrtps256_mask
-      {Intrinsic::x86_avx512_mask_sqrt_ps_512, 117715}, // __builtin_ia32_sqrtps512_mask
-      {Intrinsic::x86_sse2_sqrt_sd, 134883}, // __builtin_ia32_sqrtsd
-      {Intrinsic::x86_avx512_mask_sqrt_sd, 117745}, // __builtin_ia32_sqrtsd_round_mask
-      {Intrinsic::x86_sse_sqrt_ss, 133208}, // __builtin_ia32_sqrtss
-      {Intrinsic::x86_avx512_mask_sqrt_ss, 117778}, // __builtin_ia32_sqrtss_round_mask
-      {Intrinsic::x86_avx512_mask_store_ss, 117811}, // __builtin_ia32_storess_mask
-      {Intrinsic::x86_subborrow_u32, 136900}, // __builtin_ia32_subborrow_u32
-      {Intrinsic::x86_subborrow_u64, 136929}, // __builtin_ia32_subborrow_u64
-      {Intrinsic::x86_avx512_mask_sub_pd_512, 117839}, // __builtin_ia32_subpd512_mask
-      {Intrinsic::x86_avx512_mask_sub_ps_512, 117868}, // __builtin_ia32_subps512_mask
-      {Intrinsic::x86_avx512_mask_sub_sd_round, 117897}, // __builtin_ia32_subsd_round_mask
-      {Intrinsic::x86_avx512_mask_sub_ss_round, 117929}, // __builtin_ia32_subss_round_mask
-      {Intrinsic::x86_sse_ucomieq_ss, 133230}, // __builtin_ia32_ucomieq
-      {Intrinsic::x86_sse_ucomige_ss, 133253}, // __builtin_ia32_ucomige
-      {Intrinsic::x86_sse_ucomigt_ss, 133276}, // __builtin_ia32_ucomigt
-      {Intrinsic::x86_sse_ucomile_ss, 133299}, // __builtin_ia32_ucomile
-      {Intrinsic::x86_sse_ucomilt_ss, 133322}, // __builtin_ia32_ucomilt
-      {Intrinsic::x86_sse_ucomineq_ss, 133345}, // __builtin_ia32_ucomineq
-      {Intrinsic::x86_sse2_ucomieq_sd, 134905}, // __builtin_ia32_ucomisdeq
-      {Intrinsic::x86_sse2_ucomige_sd, 134930}, // __builtin_ia32_ucomisdge
-      {Intrinsic::x86_sse2_ucomigt_sd, 134955}, // __builtin_ia32_ucomisdgt
-      {Intrinsic::x86_sse2_ucomile_sd, 134980}, // __builtin_ia32_ucomisdle
-      {Intrinsic::x86_sse2_ucomilt_sd, 135005}, // __builtin_ia32_ucomisdlt
-      {Intrinsic::x86_sse2_ucomineq_sd, 135030}, // __builtin_ia32_ucomisdneq
-      {Intrinsic::x86_avx512_vcomi_sd, 128996}, // __builtin_ia32_vcomisd
-      {Intrinsic::x86_avx512_vcomi_ss, 129019}, // __builtin_ia32_vcomiss
-      {Intrinsic::x86_vcvtph2ps_128, 137010}, // __builtin_ia32_vcvtph2ps
-      {Intrinsic::x86_vcvtph2ps_256, 137035}, // __builtin_ia32_vcvtph2ps256
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_256, 117991}, // __builtin_ia32_vcvtph2ps256_mask
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_512, 118024}, // __builtin_ia32_vcvtph2ps512_mask
-      {Intrinsic::x86_avx512_mask_vcvtph2ps_128, 117961}, // __builtin_ia32_vcvtph2ps_mask
-      {Intrinsic::x86_vcvtps2ph_128, 137063}, // __builtin_ia32_vcvtps2ph
-      {Intrinsic::x86_vcvtps2ph_256, 137088}, // __builtin_ia32_vcvtps2ph256
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_256, 118087}, // __builtin_ia32_vcvtps2ph256_mask
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_512, 118120}, // __builtin_ia32_vcvtps2ph512_mask
-      {Intrinsic::x86_avx512_mask_vcvtps2ph_128, 118057}, // __builtin_ia32_vcvtps2ph_mask
-      {Intrinsic::x86_avx512_vcvtsd2si32, 129042}, // __builtin_ia32_vcvtsd2si32
-      {Intrinsic::x86_avx512_vcvtsd2si64, 129069}, // __builtin_ia32_vcvtsd2si64
-      {Intrinsic::x86_avx512_vcvtsd2usi32, 129096}, // __builtin_ia32_vcvtsd2usi32
-      {Intrinsic::x86_avx512_vcvtsd2usi64, 129124}, // __builtin_ia32_vcvtsd2usi64
-      {Intrinsic::x86_avx512_vcvtss2si32, 129152}, // __builtin_ia32_vcvtss2si32
-      {Intrinsic::x86_avx512_vcvtss2si64, 129179}, // __builtin_ia32_vcvtss2si64
-      {Intrinsic::x86_avx512_vcvtss2usi32, 129206}, // __builtin_ia32_vcvtss2usi32
-      {Intrinsic::x86_avx512_vcvtss2usi64, 129234}, // __builtin_ia32_vcvtss2usi64
-      {Intrinsic::x86_avx512_cvttsd2si, 103376}, // __builtin_ia32_vcvttsd2si32
-      {Intrinsic::x86_avx512_cvttsd2si64, 103404}, // __builtin_ia32_vcvttsd2si64
-      {Intrinsic::x86_avx512_cvttsd2usi, 103432}, // __builtin_ia32_vcvttsd2usi32
-      {Intrinsic::x86_avx512_cvttsd2usi64, 103461}, // __builtin_ia32_vcvttsd2usi64
-      {Intrinsic::x86_avx512_cvttss2si, 103490}, // __builtin_ia32_vcvttss2si32
-      {Intrinsic::x86_avx512_cvttss2si64, 103518}, // __builtin_ia32_vcvttss2si64
-      {Intrinsic::x86_avx512_cvttss2usi, 103546}, // __builtin_ia32_vcvttss2usi32
-      {Intrinsic::x86_avx512_cvttss2usi64, 103575}, // __builtin_ia32_vcvttss2usi64
-      {Intrinsic::x86_mmx_pextr_w, 130875}, // __builtin_ia32_vec_ext_v4hi
-      {Intrinsic::x86_mmx_pinsr_w, 130903}, // __builtin_ia32_vec_set_v4hi
-      {Intrinsic::x86_fma_vfmadd_pd, 129726}, // __builtin_ia32_vfmaddpd
-      {Intrinsic::x86_avx512_mask_vfmadd_pd_128, 118153}, // __builtin_ia32_vfmaddpd128_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_pd_128, 122137}, // __builtin_ia32_vfmaddpd128_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_pd_128, 123835}, // __builtin_ia32_vfmaddpd128_maskz
-      {Intrinsic::x86_fma_vfmadd_pd_256, 129750}, // __builtin_ia32_vfmaddpd256
-      {Intrinsic::x86_avx512_mask_vfmadd_pd_256, 118185}, // __builtin_ia32_vfmaddpd256_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_pd_256, 122170}, // __builtin_ia32_vfmaddpd256_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_pd_256, 123868}, // __builtin_ia32_vfmaddpd256_maskz
-      {Intrinsic::x86_avx512_mask_vfmadd_pd_512, 118217}, // __builtin_ia32_vfmaddpd512_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_pd_512, 122203}, // __builtin_ia32_vfmaddpd512_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_pd_512, 123901}, // __builtin_ia32_vfmaddpd512_maskz
-      {Intrinsic::x86_fma_vfmadd_ps, 129777}, // __builtin_ia32_vfmaddps
-      {Intrinsic::x86_avx512_mask_vfmadd_ps_128, 118249}, // __builtin_ia32_vfmaddps128_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_ps_128, 122236}, // __builtin_ia32_vfmaddps128_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_ps_128, 123934}, // __builtin_ia32_vfmaddps128_maskz
-      {Intrinsic::x86_fma_vfmadd_ps_256, 129801}, // __builtin_ia32_vfmaddps256
-      {Intrinsic::x86_avx512_mask_vfmadd_ps_256, 118281}, // __builtin_ia32_vfmaddps256_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_ps_256, 122269}, // __builtin_ia32_vfmaddps256_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_ps_256, 123967}, // __builtin_ia32_vfmaddps256_maskz
-      {Intrinsic::x86_avx512_mask_vfmadd_ps_512, 118313}, // __builtin_ia32_vfmaddps512_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_ps_512, 122302}, // __builtin_ia32_vfmaddps512_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_ps_512, 124000}, // __builtin_ia32_vfmaddps512_maskz
-      {Intrinsic::x86_fma4_vfmadd_sd, 129992}, // __builtin_ia32_vfmaddsd
-      {Intrinsic::x86_fma_vfmadd_sd, 129828}, // __builtin_ia32_vfmaddsd3
-      {Intrinsic::x86_avx512_mask_vfmadd_sd, 118345}, // __builtin_ia32_vfmaddsd3_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_sd, 122335}, // __builtin_ia32_vfmaddsd3_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_sd, 124033}, // __builtin_ia32_vfmaddsd3_maskz
-      {Intrinsic::x86_fma4_vfmadd_ss, 130016}, // __builtin_ia32_vfmaddss
-      {Intrinsic::x86_fma_vfmadd_ss, 129853}, // __builtin_ia32_vfmaddss3
-      {Intrinsic::x86_avx512_mask_vfmadd_ss, 118375}, // __builtin_ia32_vfmaddss3_mask
-      {Intrinsic::x86_avx512_mask3_vfmadd_ss, 122366}, // __builtin_ia32_vfmaddss3_mask3
-      {Intrinsic::x86_avx512_maskz_vfmadd_ss, 124064}, // __builtin_ia32_vfmaddss3_maskz
-      {Intrinsic::x86_fma_vfmaddsub_pd, 129878}, // __builtin_ia32_vfmaddsubpd
-      {Intrinsic::x86_avx512_mask_vfmaddsub_pd_128, 118405}, // __builtin_ia32_vfmaddsubpd128_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_pd_128, 122397}, // __builtin_ia32_vfmaddsubpd128_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_pd_128, 124095}, // __builtin_ia32_vfmaddsubpd128_maskz
-      {Intrinsic::x86_fma_vfmaddsub_pd_256, 129905}, // __builtin_ia32_vfmaddsubpd256
-      {Intrinsic::x86_avx512_mask_vfmaddsub_pd_256, 118440}, // __builtin_ia32_vfmaddsubpd256_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_pd_256, 122433}, // __builtin_ia32_vfmaddsubpd256_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_pd_256, 124131}, // __builtin_ia32_vfmaddsubpd256_maskz
-      {Intrinsic::x86_avx512_mask_vfmaddsub_pd_512, 118475}, // __builtin_ia32_vfmaddsubpd512_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_pd_512, 122469}, // __builtin_ia32_vfmaddsubpd512_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_pd_512, 124167}, // __builtin_ia32_vfmaddsubpd512_maskz
-      {Intrinsic::x86_fma_vfmaddsub_ps, 129935}, // __builtin_ia32_vfmaddsubps
-      {Intrinsic::x86_avx512_mask_vfmaddsub_ps_128, 118510}, // __builtin_ia32_vfmaddsubps128_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_ps_128, 122505}, // __builtin_ia32_vfmaddsubps128_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_ps_128, 124203}, // __builtin_ia32_vfmaddsubps128_maskz
-      {Intrinsic::x86_fma_vfmaddsub_ps_256, 129962}, // __builtin_ia32_vfmaddsubps256
-      {Intrinsic::x86_avx512_mask_vfmaddsub_ps_256, 118545}, // __builtin_ia32_vfmaddsubps256_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_ps_256, 122541}, // __builtin_ia32_vfmaddsubps256_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_ps_256, 124239}, // __builtin_ia32_vfmaddsubps256_maskz
-      {Intrinsic::x86_avx512_mask_vfmaddsub_ps_512, 118580}, // __builtin_ia32_vfmaddsubps512_mask
-      {Intrinsic::x86_avx512_mask3_vfmaddsub_ps_512, 122577}, // __builtin_ia32_vfmaddsubps512_mask3
-      {Intrinsic::x86_avx512_maskz_vfmaddsub_ps_512, 124275}, // __builtin_ia32_vfmaddsubps512_maskz
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_pd_128, 122873}, // __builtin_ia32_vfmsubaddpd128_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_pd_256, 122909}, // __builtin_ia32_vfmsubaddpd256_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_pd_512, 122945}, // __builtin_ia32_vfmsubaddpd512_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_ps_128, 122981}, // __builtin_ia32_vfmsubaddps128_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_ps_256, 123017}, // __builtin_ia32_vfmsubaddps256_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsubadd_ps_512, 123053}, // __builtin_ia32_vfmsubaddps512_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_pd_128, 122613}, // __builtin_ia32_vfmsubpd128_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_pd_256, 122646}, // __builtin_ia32_vfmsubpd256_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_pd_512, 122679}, // __builtin_ia32_vfmsubpd512_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_ps_128, 122712}, // __builtin_ia32_vfmsubps128_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_ps_256, 122745}, // __builtin_ia32_vfmsubps256_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_ps_512, 122778}, // __builtin_ia32_vfmsubps512_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_sd, 122811}, // __builtin_ia32_vfmsubsd3_mask3
-      {Intrinsic::x86_avx512_mask3_vfmsub_ss, 122842}, // __builtin_ia32_vfmsubss3_mask3
-      {Intrinsic::x86_avx512_mask_vfnmadd_pd_128, 118615}, // __builtin_ia32_vfnmaddpd128_mask
-      {Intrinsic::x86_avx512_mask_vfnmadd_pd_256, 118648}, // __builtin_ia32_vfnmaddpd256_mask
-      {Intrinsic::x86_avx512_mask_vfnmadd_pd_512, 118681}, // __builtin_ia32_vfnmaddpd512_mask
-      {Intrinsic::x86_avx512_mask_vfnmadd_ps_128, 118714}, // __builtin_ia32_vfnmaddps128_mask
-      {Intrinsic::x86_avx512_mask_vfnmadd_ps_256, 118747}, // __builtin_ia32_vfnmaddps256_mask
-      {Intrinsic::x86_avx512_mask_vfnmadd_ps_512, 118780}, // __builtin_ia32_vfnmaddps512_mask
-      {Intrinsic::x86_avx512_mask_vfnmsub_pd_128, 118813}, // __builtin_ia32_vfnmsubpd128_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_pd_128, 123089}, // __builtin_ia32_vfnmsubpd128_mask3
-      {Intrinsic::x86_avx512_mask_vfnmsub_pd_256, 118846}, // __builtin_ia32_vfnmsubpd256_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_pd_256, 123123}, // __builtin_ia32_vfnmsubpd256_mask3
-      {Intrinsic::x86_avx512_mask_vfnmsub_pd_512, 118879}, // __builtin_ia32_vfnmsubpd512_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_pd_512, 123157}, // __builtin_ia32_vfnmsubpd512_mask3
-      {Intrinsic::x86_avx512_mask_vfnmsub_ps_128, 118912}, // __builtin_ia32_vfnmsubps128_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_ps_128, 123191}, // __builtin_ia32_vfnmsubps128_mask3
-      {Intrinsic::x86_avx512_mask_vfnmsub_ps_256, 118945}, // __builtin_ia32_vfnmsubps256_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_ps_256, 123225}, // __builtin_ia32_vfnmsubps256_mask3
-      {Intrinsic::x86_avx512_mask_vfnmsub_ps_512, 118978}, // __builtin_ia32_vfnmsubps512_mask
-      {Intrinsic::x86_avx512_mask3_vfnmsub_ps_512, 123259}, // __builtin_ia32_vfnmsubps512_mask3
-      {Intrinsic::x86_avx512_mask3_vfnmsub_sd, 123293}, // __builtin_ia32_vfnmsubsd3_mask3
-      {Intrinsic::x86_avx512_mask3_vfnmsub_ss, 123325}, // __builtin_ia32_vfnmsubss3_mask3
-      {Intrinsic::x86_xop_vfrcz_pd, 137713}, // __builtin_ia32_vfrczpd
-      {Intrinsic::x86_xop_vfrcz_pd_256, 137736}, // __builtin_ia32_vfrczpd256
-      {Intrinsic::x86_xop_vfrcz_ps, 137762}, // __builtin_ia32_vfrczps
-      {Intrinsic::x86_xop_vfrcz_ps_256, 137785}, // __builtin_ia32_vfrczps256
-      {Intrinsic::x86_xop_vfrcz_sd, 137811}, // __builtin_ia32_vfrczsd
-      {Intrinsic::x86_xop_vfrcz_ss, 137834}, // __builtin_ia32_vfrczss
-      {Intrinsic::x86_vgf2p8affineinvqb_128, 137116}, // __builtin_ia32_vgf2p8affineinvqb_v16qi
-      {Intrinsic::x86_vgf2p8affineinvqb_256, 137155}, // __builtin_ia32_vgf2p8affineinvqb_v32qi
-      {Intrinsic::x86_vgf2p8affineinvqb_512, 137194}, // __builtin_ia32_vgf2p8affineinvqb_v64qi
-      {Intrinsic::x86_vgf2p8affineqb_128, 137233}, // __builtin_ia32_vgf2p8affineqb_v16qi
-      {Intrinsic::x86_vgf2p8affineqb_256, 137269}, // __builtin_ia32_vgf2p8affineqb_v32qi
-      {Intrinsic::x86_vgf2p8affineqb_512, 137305}, // __builtin_ia32_vgf2p8affineqb_v64qi
-      {Intrinsic::x86_vgf2p8mulb_128, 137341}, // __builtin_ia32_vgf2p8mulb_v16qi
-      {Intrinsic::x86_vgf2p8mulb_256, 137373}, // __builtin_ia32_vgf2p8mulb_v32qi
-      {Intrinsic::x86_vgf2p8mulb_512, 137405}, // __builtin_ia32_vgf2p8mulb_v64qi
-      {Intrinsic::x86_xop_vpcomb, 137857}, // __builtin_ia32_vpcomb
-      {Intrinsic::x86_xop_vpcomd, 137879}, // __builtin_ia32_vpcomd
-      {Intrinsic::x86_xop_vpcomq, 137901}, // __builtin_ia32_vpcomq
-      {Intrinsic::x86_xop_vpcomub, 137923}, // __builtin_ia32_vpcomub
-      {Intrinsic::x86_xop_vpcomud, 137946}, // __builtin_ia32_vpcomud
-      {Intrinsic::x86_xop_vpcomuq, 137969}, // __builtin_ia32_vpcomuq
-      {Intrinsic::x86_xop_vpcomuw, 137992}, // __builtin_ia32_vpcomuw
-      {Intrinsic::x86_xop_vpcomw, 138015}, // __builtin_ia32_vpcomw
-      {Intrinsic::x86_avx512_mask_conflict_q_128, 106165}, // __builtin_ia32_vpconflictdi_128_mask
-      {Intrinsic::x86_avx512_mask_conflict_q_256, 106202}, // __builtin_ia32_vpconflictdi_256_mask
-      {Intrinsic::x86_avx512_mask_conflict_q_512, 106239}, // __builtin_ia32_vpconflictdi_512_mask
-      {Intrinsic::x86_avx512_mask_conflict_d_128, 106054}, // __builtin_ia32_vpconflictsi_128_mask
-      {Intrinsic::x86_avx512_mask_conflict_d_256, 106091}, // __builtin_ia32_vpconflictsi_256_mask
-      {Intrinsic::x86_avx512_mask_conflict_d_512, 106128}, // __builtin_ia32_vpconflictsi_512_mask
-      {Intrinsic::x86_avx512_mask_vpdpbusd_128, 119011}, // __builtin_ia32_vpdpbusd128_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusd_128, 124311}, // __builtin_ia32_vpdpbusd128_maskz
-      {Intrinsic::x86_avx512_mask_vpdpbusd_256, 119043}, // __builtin_ia32_vpdpbusd256_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusd_256, 124344}, // __builtin_ia32_vpdpbusd256_maskz
-      {Intrinsic::x86_avx512_mask_vpdpbusd_512, 119075}, // __builtin_ia32_vpdpbusd512_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusd_512, 124377}, // __builtin_ia32_vpdpbusd512_maskz
-      {Intrinsic::x86_avx512_mask_vpdpbusds_128, 119107}, // __builtin_ia32_vpdpbusds128_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusds_128, 124410}, // __builtin_ia32_vpdpbusds128_maskz
-      {Intrinsic::x86_avx512_mask_vpdpbusds_256, 119140}, // __builtin_ia32_vpdpbusds256_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusds_256, 124444}, // __builtin_ia32_vpdpbusds256_maskz
-      {Intrinsic::x86_avx512_mask_vpdpbusds_512, 119173}, // __builtin_ia32_vpdpbusds512_mask
-      {Intrinsic::x86_avx512_maskz_vpdpbusds_512, 124478}, // __builtin_ia32_vpdpbusds512_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssd_128, 119206}, // __builtin_ia32_vpdpwssd128_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssd_128, 124512}, // __builtin_ia32_vpdpwssd128_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssd_256, 119238}, // __builtin_ia32_vpdpwssd256_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssd_256, 124545}, // __builtin_ia32_vpdpwssd256_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssd_512, 119270}, // __builtin_ia32_vpdpwssd512_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssd_512, 124578}, // __builtin_ia32_vpdpwssd512_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssds_128, 119302}, // __builtin_ia32_vpdpwssds128_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssds_128, 124611}, // __builtin_ia32_vpdpwssds128_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssds_256, 119335}, // __builtin_ia32_vpdpwssds256_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssds_256, 124645}, // __builtin_ia32_vpdpwssds256_maskz
-      {Intrinsic::x86_avx512_mask_vpdpwssds_512, 119368}, // __builtin_ia32_vpdpwssds512_mask
-      {Intrinsic::x86_avx512_maskz_vpdpwssds_512, 124679}, // __builtin_ia32_vpdpwssds512_maskz
-      {Intrinsic::x86_avx512_mask_vpermi2var_d_128, 119401}, // __builtin_ia32_vpermi2vard128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_d_256, 119436}, // __builtin_ia32_vpermi2vard256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_d_512, 119471}, // __builtin_ia32_vpermi2vard512_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_hi_128, 119506}, // __builtin_ia32_vpermi2varhi128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_hi_256, 119542}, // __builtin_ia32_vpermi2varhi256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_hi_512, 119578}, // __builtin_ia32_vpermi2varhi512_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_pd_128, 119614}, // __builtin_ia32_vpermi2varpd128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_pd_256, 119650}, // __builtin_ia32_vpermi2varpd256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_pd_512, 119686}, // __builtin_ia32_vpermi2varpd512_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_ps_128, 119722}, // __builtin_ia32_vpermi2varps128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_ps_256, 119758}, // __builtin_ia32_vpermi2varps256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_ps_512, 119794}, // __builtin_ia32_vpermi2varps512_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_q_128, 119830}, // __builtin_ia32_vpermi2varq128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_q_256, 119865}, // __builtin_ia32_vpermi2varq256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_q_512, 119900}, // __builtin_ia32_vpermi2varq512_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_qi_128, 119935}, // __builtin_ia32_vpermi2varqi128_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_qi_256, 119971}, // __builtin_ia32_vpermi2varqi256_mask
-      {Intrinsic::x86_avx512_mask_vpermi2var_qi_512, 120007}, // __builtin_ia32_vpermi2varqi512_mask
-      {Intrinsic::x86_xop_vpermil2pd, 138037}, // __builtin_ia32_vpermil2pd
-      {Intrinsic::x86_xop_vpermil2pd_256, 138063}, // __builtin_ia32_vpermil2pd256
-      {Intrinsic::x86_xop_vpermil2ps, 138092}, // __builtin_ia32_vpermil2ps
-      {Intrinsic::x86_xop_vpermil2ps_256, 138118}, // __builtin_ia32_vpermil2ps256
-      {Intrinsic::x86_avx_vpermilvar_pd, 100448}, // __builtin_ia32_vpermilvarpd
-      {Intrinsic::x86_avx_vpermilvar_pd_256, 100476}, // __builtin_ia32_vpermilvarpd256
-      {Intrinsic::x86_avx512_vpermilvar_pd_512, 129262}, // __builtin_ia32_vpermilvarpd512
-      {Intrinsic::x86_avx_vpermilvar_ps, 100507}, // __builtin_ia32_vpermilvarps
-      {Intrinsic::x86_avx_vpermilvar_ps_256, 100535}, // __builtin_ia32_vpermilvarps256
-      {Intrinsic::x86_avx512_vpermilvar_ps_512, 129293}, // __builtin_ia32_vpermilvarps512
-      {Intrinsic::x86_avx512_mask_vpermt2var_d_128, 120043}, // __builtin_ia32_vpermt2vard128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_d_128, 124713}, // __builtin_ia32_vpermt2vard128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_d_256, 120078}, // __builtin_ia32_vpermt2vard256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_d_256, 124749}, // __builtin_ia32_vpermt2vard256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_d_512, 120113}, // __builtin_ia32_vpermt2vard512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_d_512, 124785}, // __builtin_ia32_vpermt2vard512_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_hi_128, 120148}, // __builtin_ia32_vpermt2varhi128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_hi_128, 124821}, // __builtin_ia32_vpermt2varhi128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_hi_256, 120184}, // __builtin_ia32_vpermt2varhi256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_hi_256, 124858}, // __builtin_ia32_vpermt2varhi256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_hi_512, 120220}, // __builtin_ia32_vpermt2varhi512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_hi_512, 124895}, // __builtin_ia32_vpermt2varhi512_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_pd_128, 120256}, // __builtin_ia32_vpermt2varpd128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_pd_128, 124932}, // __builtin_ia32_vpermt2varpd128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_pd_256, 120292}, // __builtin_ia32_vpermt2varpd256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_pd_256, 124969}, // __builtin_ia32_vpermt2varpd256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_pd_512, 120328}, // __builtin_ia32_vpermt2varpd512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_pd_512, 125006}, // __builtin_ia32_vpermt2varpd512_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_ps_128, 120364}, // __builtin_ia32_vpermt2varps128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_ps_128, 125043}, // __builtin_ia32_vpermt2varps128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_ps_256, 120400}, // __builtin_ia32_vpermt2varps256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_ps_256, 125080}, // __builtin_ia32_vpermt2varps256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_ps_512, 120436}, // __builtin_ia32_vpermt2varps512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_ps_512, 125117}, // __builtin_ia32_vpermt2varps512_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_q_128, 120472}, // __builtin_ia32_vpermt2varq128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_q_128, 125154}, // __builtin_ia32_vpermt2varq128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_q_256, 120507}, // __builtin_ia32_vpermt2varq256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_q_256, 125190}, // __builtin_ia32_vpermt2varq256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_q_512, 120542}, // __builtin_ia32_vpermt2varq512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_q_512, 125226}, // __builtin_ia32_vpermt2varq512_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_qi_128, 120577}, // __builtin_ia32_vpermt2varqi128_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_qi_128, 125262}, // __builtin_ia32_vpermt2varqi128_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_qi_256, 120613}, // __builtin_ia32_vpermt2varqi256_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_qi_256, 125299}, // __builtin_ia32_vpermt2varqi256_maskz
-      {Intrinsic::x86_avx512_mask_vpermt2var_qi_512, 120649}, // __builtin_ia32_vpermt2varqi512_mask
-      {Intrinsic::x86_avx512_maskz_vpermt2var_qi_512, 125336}, // __builtin_ia32_vpermt2varqi512_maskz
-      {Intrinsic::x86_xop_vphaddbd, 138147}, // __builtin_ia32_vphaddbd
-      {Intrinsic::x86_xop_vphaddbq, 138171}, // __builtin_ia32_vphaddbq
-      {Intrinsic::x86_xop_vphaddbw, 138195}, // __builtin_ia32_vphaddbw
-      {Intrinsic::x86_xop_vphadddq, 138219}, // __builtin_ia32_vphadddq
-      {Intrinsic::x86_xop_vphaddubd, 138243}, // __builtin_ia32_vphaddubd
-      {Intrinsic::x86_xop_vphaddubq, 138268}, // __builtin_ia32_vphaddubq
-      {Intrinsic::x86_xop_vphaddubw, 138293}, // __builtin_ia32_vphaddubw
-      {Intrinsic::x86_xop_vphaddudq, 138318}, // __builtin_ia32_vphaddudq
-      {Intrinsic::x86_xop_vphadduwd, 138343}, // __builtin_ia32_vphadduwd
-      {Intrinsic::x86_xop_vphadduwq, 138368}, // __builtin_ia32_vphadduwq
-      {Intrinsic::x86_xop_vphaddwd, 138393}, // __builtin_ia32_vphaddwd
-      {Intrinsic::x86_xop_vphaddwq, 138417}, // __builtin_ia32_vphaddwq
-      {Intrinsic::x86_xop_vphsubbw, 138441}, // __builtin_ia32_vphsubbw
-      {Intrinsic::x86_xop_vphsubdq, 138465}, // __builtin_ia32_vphsubdq
-      {Intrinsic::x86_xop_vphsubwd, 138489}, // __builtin_ia32_vphsubwd
-      {Intrinsic::x86_xop_vpmacsdd, 138513}, // __builtin_ia32_vpmacsdd
-      {Intrinsic::x86_xop_vpmacsdqh, 138537}, // __builtin_ia32_vpmacsdqh
-      {Intrinsic::x86_xop_vpmacsdql, 138562}, // __builtin_ia32_vpmacsdql
-      {Intrinsic::x86_xop_vpmacssdd, 138587}, // __builtin_ia32_vpmacssdd
-      {Intrinsic::x86_xop_vpmacssdqh, 138612}, // __builtin_ia32_vpmacssdqh
-      {Intrinsic::x86_xop_vpmacssdql, 138638}, // __builtin_ia32_vpmacssdql
-      {Intrinsic::x86_xop_vpmacsswd, 138664}, // __builtin_ia32_vpmacsswd
-      {Intrinsic::x86_xop_vpmacssww, 138689}, // __builtin_ia32_vpmacssww
-      {Intrinsic::x86_xop_vpmacswd, 138714}, // __builtin_ia32_vpmacswd
-      {Intrinsic::x86_xop_vpmacsww, 138738}, // __builtin_ia32_vpmacsww
-      {Intrinsic::x86_xop_vpmadcsswd, 138762}, // __builtin_ia32_vpmadcsswd
-      {Intrinsic::x86_xop_vpmadcswd, 138788}, // __builtin_ia32_vpmadcswd
-      {Intrinsic::x86_avx512_mask_vpmadd52h_uq_128, 120685}, // __builtin_ia32_vpmadd52huq128_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52h_uq_128, 125373}, // __builtin_ia32_vpmadd52huq128_maskz
-      {Intrinsic::x86_avx512_mask_vpmadd52h_uq_256, 120720}, // __builtin_ia32_vpmadd52huq256_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52h_uq_256, 125409}, // __builtin_ia32_vpmadd52huq256_maskz
-      {Intrinsic::x86_avx512_mask_vpmadd52h_uq_512, 120755}, // __builtin_ia32_vpmadd52huq512_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52h_uq_512, 125445}, // __builtin_ia32_vpmadd52huq512_maskz
-      {Intrinsic::x86_avx512_mask_vpmadd52l_uq_128, 120790}, // __builtin_ia32_vpmadd52luq128_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52l_uq_128, 125481}, // __builtin_ia32_vpmadd52luq128_maskz
-      {Intrinsic::x86_avx512_mask_vpmadd52l_uq_256, 120825}, // __builtin_ia32_vpmadd52luq256_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52l_uq_256, 125517}, // __builtin_ia32_vpmadd52luq256_maskz
-      {Intrinsic::x86_avx512_mask_vpmadd52l_uq_512, 120860}, // __builtin_ia32_vpmadd52luq512_mask
-      {Intrinsic::x86_avx512_maskz_vpmadd52l_uq_512, 125553}, // __builtin_ia32_vpmadd52luq512_maskz
-      {Intrinsic::x86_avx512_mask_pmultishift_qb_128, 115375}, // __builtin_ia32_vpmultishiftqb128_mask
-      {Intrinsic::x86_avx512_mask_pmultishift_qb_256, 115413}, // __builtin_ia32_vpmultishiftqb256_mask
-      {Intrinsic::x86_avx512_mask_pmultishift_qb_512, 115451}, // __builtin_ia32_vpmultishiftqb512_mask
-      {Intrinsic::x86_xop_vpperm, 138813}, // __builtin_ia32_vpperm
-      {Intrinsic::x86_xop_vprotb, 138835}, // __builtin_ia32_vprotb
-      {Intrinsic::x86_xop_vprotbi, 138857}, // __builtin_ia32_vprotbi
-      {Intrinsic::x86_xop_vprotd, 138880}, // __builtin_ia32_vprotd
-      {Intrinsic::x86_xop_vprotdi, 138902}, // __builtin_ia32_vprotdi
-      {Intrinsic::x86_xop_vprotq, 138925}, // __builtin_ia32_vprotq
-      {Intrinsic::x86_xop_vprotqi, 138947}, // __builtin_ia32_vprotqi
-      {Intrinsic::x86_xop_vprotw, 138970}, // __builtin_ia32_vprotw
-      {Intrinsic::x86_xop_vprotwi, 138992}, // __builtin_ia32_vprotwi
-      {Intrinsic::x86_xop_vpshab, 139015}, // __builtin_ia32_vpshab
-      {Intrinsic::x86_xop_vpshad, 139037}, // __builtin_ia32_vpshad
-      {Intrinsic::x86_xop_vpshaq, 139059}, // __builtin_ia32_vpshaq
-      {Intrinsic::x86_xop_vpshaw, 139081}, // __builtin_ia32_vpshaw
-      {Intrinsic::x86_xop_vpshlb, 139103}, // __builtin_ia32_vpshlb
-      {Intrinsic::x86_xop_vpshld, 139125}, // __builtin_ia32_vpshld
-      {Intrinsic::x86_avx512_mask_vpshld_d_128, 120895}, // __builtin_ia32_vpshldd128_mask
-      {Intrinsic::x86_avx512_mask_vpshld_d_256, 120926}, // __builtin_ia32_vpshldd256_mask
-      {Intrinsic::x86_avx512_mask_vpshld_d_512, 120957}, // __builtin_ia32_vpshldd512_mask
-      {Intrinsic::x86_avx512_mask_vpshld_q_128, 120988}, // __builtin_ia32_vpshldq128_mask
-      {Intrinsic::x86_avx512_mask_vpshld_q_256, 121019}, // __builtin_ia32_vpshldq256_mask
-      {Intrinsic::x86_avx512_mask_vpshld_q_512, 121050}, // __builtin_ia32_vpshldq512_mask
-      {Intrinsic::x86_avx512_mask_vpshldv_d_128, 121174}, // __builtin_ia32_vpshldvd128_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_d_128, 125589}, // __builtin_ia32_vpshldvd128_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_d_256, 121206}, // __builtin_ia32_vpshldvd256_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_d_256, 125622}, // __builtin_ia32_vpshldvd256_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_d_512, 121238}, // __builtin_ia32_vpshldvd512_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_d_512, 125655}, // __builtin_ia32_vpshldvd512_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_q_128, 121270}, // __builtin_ia32_vpshldvq128_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_q_128, 125688}, // __builtin_ia32_vpshldvq128_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_q_256, 121302}, // __builtin_ia32_vpshldvq256_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_q_256, 125721}, // __builtin_ia32_vpshldvq256_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_q_512, 121334}, // __builtin_ia32_vpshldvq512_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_q_512, 125754}, // __builtin_ia32_vpshldvq512_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_w_128, 121366}, // __builtin_ia32_vpshldvw128_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_w_128, 125787}, // __builtin_ia32_vpshldvw128_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_w_256, 121398}, // __builtin_ia32_vpshldvw256_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_w_256, 125820}, // __builtin_ia32_vpshldvw256_maskz
-      {Intrinsic::x86_avx512_mask_vpshldv_w_512, 121430}, // __builtin_ia32_vpshldvw512_mask
-      {Intrinsic::x86_avx512_maskz_vpshldv_w_512, 125853}, // __builtin_ia32_vpshldvw512_maskz
-      {Intrinsic::x86_avx512_mask_vpshld_w_128, 121081}, // __builtin_ia32_vpshldw128_mask
-      {Intrinsic::x86_avx512_mask_vpshld_w_256, 121112}, // __builtin_ia32_vpshldw256_mask
-      {Intrinsic::x86_avx512_mask_vpshld_w_512, 121143}, // __builtin_ia32_vpshldw512_mask
-      {Intrinsic::x86_xop_vpshlq, 139147}, // __builtin_ia32_vpshlq
-      {Intrinsic::x86_xop_vpshlw, 139169}, // __builtin_ia32_vpshlw
-      {Intrinsic::x86_avx512_mask_vpshrd_d_128, 121462}, // __builtin_ia32_vpshrdd128_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_d_256, 121493}, // __builtin_ia32_vpshrdd256_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_d_512, 121524}, // __builtin_ia32_vpshrdd512_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_q_128, 121555}, // __builtin_ia32_vpshrdq128_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_q_256, 121586}, // __builtin_ia32_vpshrdq256_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_q_512, 121617}, // __builtin_ia32_vpshrdq512_mask
-      {Intrinsic::x86_avx512_mask_vpshrdv_d_128, 121741}, // __builtin_ia32_vpshrdvd128_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_d_128, 125886}, // __builtin_ia32_vpshrdvd128_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_d_256, 121773}, // __builtin_ia32_vpshrdvd256_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_d_256, 125919}, // __builtin_ia32_vpshrdvd256_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_d_512, 121805}, // __builtin_ia32_vpshrdvd512_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_d_512, 125952}, // __builtin_ia32_vpshrdvd512_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_q_128, 121837}, // __builtin_ia32_vpshrdvq128_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_q_128, 125985}, // __builtin_ia32_vpshrdvq128_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_q_256, 121869}, // __builtin_ia32_vpshrdvq256_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_q_256, 126018}, // __builtin_ia32_vpshrdvq256_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_q_512, 121901}, // __builtin_ia32_vpshrdvq512_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_q_512, 126051}, // __builtin_ia32_vpshrdvq512_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_w_128, 121933}, // __builtin_ia32_vpshrdvw128_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_w_128, 126084}, // __builtin_ia32_vpshrdvw128_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_w_256, 121965}, // __builtin_ia32_vpshrdvw256_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_w_256, 126117}, // __builtin_ia32_vpshrdvw256_maskz
-      {Intrinsic::x86_avx512_mask_vpshrdv_w_512, 121997}, // __builtin_ia32_vpshrdvw512_mask
-      {Intrinsic::x86_avx512_maskz_vpshrdv_w_512, 126150}, // __builtin_ia32_vpshrdvw512_maskz
-      {Intrinsic::x86_avx512_mask_vpshrd_w_128, 121648}, // __builtin_ia32_vpshrdw128_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_w_256, 121679}, // __builtin_ia32_vpshrdw256_mask
-      {Intrinsic::x86_avx512_mask_vpshrd_w_512, 121710}, // __builtin_ia32_vpshrdw512_mask
-      {Intrinsic::x86_avx512_mask_vpshufbitqmb_128, 122029}, // __builtin_ia32_vpshufbitqmb128_mask
-      {Intrinsic::x86_avx512_mask_vpshufbitqmb_256, 122065}, // __builtin_ia32_vpshufbitqmb256_mask
-      {Intrinsic::x86_avx512_mask_vpshufbitqmb_512, 122101}, // __builtin_ia32_vpshufbitqmb512_mask
-      {Intrinsic::x86_avx_vtestc_pd, 100566}, // __builtin_ia32_vtestcpd
-      {Intrinsic::x86_avx_vtestc_pd_256, 100590}, // __builtin_ia32_vtestcpd256
-      {Intrinsic::x86_avx_vtestc_ps, 100617}, // __builtin_ia32_vtestcps
-      {Intrinsic::x86_avx_vtestc_ps_256, 100641}, // __builtin_ia32_vtestcps256
-      {Intrinsic::x86_avx_vtestnzc_pd, 100668}, // __builtin_ia32_vtestnzcpd
-      {Intrinsic::x86_avx_vtestnzc_pd_256, 100694}, // __builtin_ia32_vtestnzcpd256
-      {Intrinsic::x86_avx_vtestnzc_ps, 100723}, // __builtin_ia32_vtestnzcps
-      {Intrinsic::x86_avx_vtestnzc_ps_256, 100749}, // __builtin_ia32_vtestnzcps256
-      {Intrinsic::x86_avx_vtestz_pd, 100778}, // __builtin_ia32_vtestzpd
-      {Intrinsic::x86_avx_vtestz_pd_256, 100802}, // __builtin_ia32_vtestzpd256
-      {Intrinsic::x86_avx_vtestz_ps, 100829}, // __builtin_ia32_vtestzps
-      {Intrinsic::x86_avx_vtestz_ps_256, 100853}, // __builtin_ia32_vtestzps256
-      {Intrinsic::x86_avx_vzeroall, 100880}, // __builtin_ia32_vzeroall
-      {Intrinsic::x86_avx_vzeroupper, 100904}, // __builtin_ia32_vzeroupper
-      {Intrinsic::x86_wrfsbase_32, 137437}, // __builtin_ia32_wrfsbase32
-      {Intrinsic::x86_wrfsbase_64, 137463}, // __builtin_ia32_wrfsbase64
-      {Intrinsic::x86_wrgsbase_32, 137489}, // __builtin_ia32_wrgsbase32
-      {Intrinsic::x86_wrgsbase_64, 137515}, // __builtin_ia32_wrgsbase64
-      {Intrinsic::x86_flags_write_u32, 129664}, // __builtin_ia32_writeeflags_u32
-      {Intrinsic::x86_flags_write_u64, 129695}, // __builtin_ia32_writeeflags_u64
-      {Intrinsic::x86_wrpkru, 137541}, // __builtin_ia32_wrpkru
-      {Intrinsic::x86_wrssd, 137563}, // __builtin_ia32_wrssd
-      {Intrinsic::x86_wrssq, 137584}, // __builtin_ia32_wrssq
-      {Intrinsic::x86_wrussd, 137605}, // __builtin_ia32_wrussd
-      {Intrinsic::x86_wrussq, 137627}, // __builtin_ia32_wrussq
-      {Intrinsic::x86_xabort, 137649}, // __builtin_ia32_xabort
-      {Intrinsic::x86_xbegin, 137671}, // __builtin_ia32_xbegin
-      {Intrinsic::x86_xend, 137693}, // __builtin_ia32_xend
-      {Intrinsic::x86_xtest, 139191}, // __builtin_ia32_xtest
-    };
-    auto I = std::lower_bound(std::begin(x86Names),
-                              std::end(x86Names),
-                              BuiltinNameStr);
-    if (I != std::end(x86Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "xcore") {
-    static const BuiltinEntry xcoreNames[] = {
-      {Intrinsic::xcore_bitrev, 139212}, // __builtin_bitrev
-      {Intrinsic::xcore_getid, 139229}, // __builtin_getid
-      {Intrinsic::xcore_getps, 139245}, // __builtin_getps
-      {Intrinsic::xcore_setps, 139261}, // __builtin_setps
-    };
-    auto I = std::lower_bound(std::begin(xcoreNames),
-                              std::end(xcoreNames),
-                              BuiltinNameStr);
-    if (I != std::end(xcoreNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  return Intrinsic::not_intrinsic;
-}
-#endif
-
-// Get the LLVM intrinsic that corresponds to a builtin.
-// This is used by the C front-end.  The builtin name is passed
-// in as BuiltinName, and a target prefix (e.g. 'ppc') is passed
-// in as TargetPrefix.  The result is assigned to 'IntrinsicID'.
-#ifdef GET_LLVM_INTRINSIC_FOR_MS_BUILTIN
-Intrinsic::ID Intrinsic::getIntrinsicForMSBuiltin(const char *TargetPrefixStr, StringRef BuiltinNameStr) {
-  static const char BuiltinNames[] = {
-  '_', '_', 'd', 'm', 'b', '\000', '_', '_', 'd', 's', 'b', '\000', '_', '_', 'i',
-  's', 'b', '\000', '_', 'M', 'o', 'v', 'e', 'F', 'r', 'o', 'm', 'C', 'o', 'p',
-  'r', 'o', 'c', 'e', 's', 's', 'o', 'r', '\000', '_', 'M', 'o', 'v', 'e', 'F',
-  'r', 'o', 'm', 'C', 'o', 'p', 'r', 'o', 'c', 'e', 's', 's', 'o', 'r', '2',
-  '\000',
-  };
-
-  struct BuiltinEntry {
-    Intrinsic::ID IntrinID;
-    unsigned StrTabOffset;
-    const char *getName() const {
-      return &BuiltinNames[StrTabOffset];
-    }
-    bool operator<(StringRef RHS) const {
-      return strncmp(getName(), RHS.data(), RHS.size()) < 0;
-    }
-  };
-  StringRef TargetPrefix(TargetPrefixStr);
-
-  if (TargetPrefix == "aarch64") {
-    static const BuiltinEntry aarch64Names[] = {
-      {Intrinsic::aarch64_dmb, 0}, // __dmb
-      {Intrinsic::aarch64_dsb, 6}, // __dsb
-      {Intrinsic::aarch64_isb, 12}, // __isb
-    };
-    auto I = std::lower_bound(std::begin(aarch64Names),
-                              std::end(aarch64Names),
-                              BuiltinNameStr);
-    if (I != std::end(aarch64Names) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  if (TargetPrefix == "arm") {
-    static const BuiltinEntry armNames[] = {
-      {Intrinsic::arm_mrc, 18}, // _MoveFromCoprocessor
-      {Intrinsic::arm_mrc2, 39}, // _MoveFromCoprocessor2
-      {Intrinsic::arm_dmb, 0}, // __dmb
-      {Intrinsic::arm_dsb, 6}, // __dsb
-      {Intrinsic::arm_isb, 12}, // __isb
-    };
-    auto I = std::lower_bound(std::begin(armNames),
-                              std::end(armNames),
-                              BuiltinNameStr);
-    if (I != std::end(armNames) &&
-        I->getName() == BuiltinNameStr)
-      return I->IntrinID;
-  }
-  return Intrinsic::not_intrinsic;
-}
-#endif
-
-#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
-// let's return it to _setjmp state
-#  pragma pop_macro("setjmp")
-#  undef setjmp_undefined_for_msvc
-#endif
-
diff --git a/linux-x64/clang/include/llvm/IR/Intrinsics.h b/linux-x64/clang/include/llvm/IR/Intrinsics.h
index fc79da7..e1e17f9 100644
--- a/linux-x64/clang/include/llvm/IR/Intrinsics.h
+++ b/linux-x64/clang/include/llvm/IR/Intrinsics.h
@@ -39,7 +39,7 @@
 
     // Get the intrinsic enums generated from Intrinsics.td
 #define GET_INTRINSIC_ENUM_VALUES
-#include "llvm/IR/Intrinsics.gen"
+#include "llvm/IR/IntrinsicEnums.inc"
 #undef GET_INTRINSIC_ENUM_VALUES
     , num_intrinsics
   };
@@ -97,7 +97,7 @@
   /// intrinsic. This is returned by getIntrinsicInfoTableEntries.
   struct IITDescriptor {
     enum IITDescriptorKind {
-      Void, VarArg, MMX, Token, Metadata, Half, Float, Double,
+      Void, VarArg, MMX, Token, Metadata, Half, Float, Double, Quad,
       Integer, Vector, Pointer, Struct,
       Argument, ExtendArgument, TruncArgument, HalfVecArgument,
       SameVecWidthArgument, PtrToArgument, PtrToElt, VecOfAnyPtrsToElt
diff --git a/linux-x64/clang/include/llvm/IR/Intrinsics.td b/linux-x64/clang/include/llvm/IR/Intrinsics.td
index fbb1c5c..0cec754 100644
--- a/linux-x64/clang/include/llvm/IR/Intrinsics.td
+++ b/linux-x64/clang/include/llvm/IR/Intrinsics.td
@@ -117,6 +117,7 @@
 
 class LLVMType<ValueType vt> {
   ValueType VT = vt;
+  int isAny = 0;
 }
 
 class LLVMQualPointerType<LLVMType elty, int addrspace>
@@ -131,6 +132,8 @@
 class LLVMAnyPointerType<LLVMType elty>
   : LLVMType<iPTRAny>{
   LLVMType ElTy = elty;
+
+  let isAny = 1;
 }
 
 // Match the type of another intrinsic parameter.  Number is an index into the
@@ -163,10 +166,12 @@
 class LLVMHalfElementsVectorType<int num> : LLVMMatchType<num>;
 
 def llvm_void_ty       : LLVMType<isVoid>;
-def llvm_any_ty        : LLVMType<Any>;
-def llvm_anyint_ty     : LLVMType<iAny>;
-def llvm_anyfloat_ty   : LLVMType<fAny>;
-def llvm_anyvector_ty  : LLVMType<vAny>;
+let isAny = 1 in {
+  def llvm_any_ty        : LLVMType<Any>;
+  def llvm_anyint_ty     : LLVMType<iAny>;
+  def llvm_anyfloat_ty   : LLVMType<fAny>;
+  def llvm_anyvector_ty  : LLVMType<vAny>;
+}
 def llvm_i1_ty         : LLVMType<i1>;
 def llvm_i8_ty         : LLVMType<i8>;
 def llvm_i16_ty        : LLVMType<i16>;
@@ -249,7 +254,6 @@
 
 def llvm_vararg_ty     : LLVMType<isVoid>;   // this means vararg here
 
-
 //===----------------------------------------------------------------------===//
 // Intrinsic Definitions.
 //===----------------------------------------------------------------------===//
@@ -537,7 +541,7 @@
                                                     [ LLVMMatchType<0>,
                                                       llvm_metadata_ty,
                                                       llvm_metadata_ty ]>;
-  def int_experimental_constrained_exp  : Intrinsic<[ llvm_anyfloat_ty ], 
+  def int_experimental_constrained_exp  : Intrinsic<[ llvm_anyfloat_ty ],
                                                     [ LLVMMatchType<0>,
                                                       llvm_metadata_ty,
                                                       llvm_metadata_ty ]>;
@@ -573,6 +577,10 @@
   def int_ctlz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
   def int_cttz : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>, llvm_i1_ty]>;
   def int_bitreverse : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>]>;
+  def int_fshl : Intrinsic<[llvm_anyint_ty],
+      [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
+  def int_fshr : Intrinsic<[llvm_anyint_ty],
+      [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>]>;
 }
 
 //===------------------------ Debugger Intrinsics -------------------------===//
@@ -595,6 +603,8 @@
                                        [llvm_metadata_ty,
                                         llvm_metadata_ty,
                                         llvm_metadata_ty]>;
+  def int_dbg_label        : Intrinsic<[],
+                                       [llvm_metadata_ty]>;
 }
 
 //===------------------ Exception Handling Intrinsics----------------------===//
@@ -706,16 +716,26 @@
                                      llvm_anyptr_ty],
                                     [IntrArgMemOnly, NoCapture<2>]>;
 
-// invariant.group.barrier can't be marked with 'readnone' (IntrNoMem),
+// launder.invariant.group can't be marked with 'readnone' (IntrNoMem),
 // because it would cause CSE of two barriers with the same argument.
-// Readonly and argmemonly says that barrier only reads its argument and
-// it can be CSE only if memory didn't change between 2 barriers call,
-// which is valid.
+// Inaccessiblememonly says that the barrier doesn't read the argument,
+// but it changes state not accessible to this module. This way
+// we can DSE through the barrier because it doesn't read the value
+// after store. Although the barrier doesn't modify any memory it
+// can't be marked as readonly, because it would be possible to
+// CSE 2 barriers with store in between.
 // The argument also can't be marked with 'returned' attribute, because
 // it would remove barrier.
-def int_invariant_group_barrier : Intrinsic<[llvm_anyptr_ty],
+// Note that it is still experimental, which means that its semantics
+// might change in the future.
+def int_launder_invariant_group : Intrinsic<[llvm_anyptr_ty],
                                             [LLVMMatchType<0>],
-                                            [IntrReadMem, IntrArgMemOnly]>;
+                                            [IntrInaccessibleMemOnly, IntrSpeculatable]>;
+
+
+def int_strip_invariant_group : Intrinsic<[llvm_anyptr_ty],
+                                          [LLVMMatchType<0>],
+                                          [IntrSpeculatable, IntrNoMem]>;
 
 //===------------------------ Stackmap Intrinsics -------------------------===//
 //
@@ -768,6 +788,7 @@
 def int_coro_end : Intrinsic<[llvm_i1_ty], [llvm_ptr_ty, llvm_i1_ty], []>;
 
 def int_coro_frame : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
+def int_coro_noop : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
 def int_coro_size : Intrinsic<[llvm_anyint_ty], [], [IntrNoMem]>;
 
 def int_coro_save : Intrinsic<[llvm_token_ty], [llvm_ptr_ty], []>;
@@ -887,6 +908,10 @@
 // Takes a pointer to a string and the length of the string.
 def int_xray_customevent : Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty],
                                      [NoCapture<0>, ReadOnly<0>, IntrWriteMem]>;
+// Typed event logging for x-ray.
+// Takes a numeric type tag, a pointer to a string and the length of the string.
+def int_xray_typedevent : Intrinsic<[], [llvm_i16_ty, llvm_ptr_ty, llvm_i32_ty],
+                                        [NoCapture<1>, ReadOnly<1>, IntrWriteMem]>;
 //===----------------------------------------------------------------------===//
 
 //===------ Memory intrinsics with element-wise atomicity guarantees ------===//
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td b/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
index 5034133..688e863 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsAArch64.td
@@ -149,6 +149,11 @@
 
   class AdvSIMD_1Arg_Intrinsic
     : Intrinsic<[llvm_any_ty], [LLVMMatchType<0>], [IntrNoMem]>;
+
+  class AdvSIMD_Dot_Intrinsic
+    : Intrinsic<[llvm_anyvector_ty],
+                [LLVMMatchType<0>, llvm_anyvector_ty, LLVMMatchType<1>],
+                [IntrNoMem]>;
 }
 
 // Arithmetic ops
@@ -415,6 +420,10 @@
   // Scalar FP Inexact Narrowing
   def int_aarch64_sisd_fcvtxn : Intrinsic<[llvm_float_ty], [llvm_double_ty],
                                         [IntrNoMem]>;
+
+  // v8.2-A Dot Product
+  def int_aarch64_neon_udot : AdvSIMD_Dot_Intrinsic;
+  def int_aarch64_neon_sdot : AdvSIMD_Dot_Intrinsic;
 }
 
 let TargetPrefix = "aarch64" in {  // All intrinsics start with "llvm.aarch64.".
@@ -575,6 +584,14 @@
 def int_aarch64_neon_tbx4 : AdvSIMD_Tbx4_Intrinsic;
 
 let TargetPrefix = "aarch64" in {
+  class FPCR_Get_Intrinsic
+    : Intrinsic<[llvm_i64_ty], [], [IntrNoMem]>;
+}
+
+// FPCR
+def int_aarch64_get_fpcr : FPCR_Get_Intrinsic;
+
+let TargetPrefix = "aarch64" in {
   class Crypto_AES_DataKey_Intrinsic
     : Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td b/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
index 408ab02..9f36141 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsAMDGPU.td
@@ -17,6 +17,13 @@
 class AMDGPUReadPreloadRegisterIntrinsicNamed<string name>
   : Intrinsic<[llvm_i32_ty], [], [IntrNoMem, IntrSpeculatable]>, GCCBuiltin<name>;
 
+// Used to tag image and resource intrinsics with information used to generate
+// mem operands.
+class AMDGPURsrcIntrinsic<int rsrcarg, bit isimage = 0> {
+  int RsrcArg = rsrcarg;
+  bit IsImage = isimage;
+}
+
 let TargetPrefix = "r600" in {
 
 multiclass AMDGPUReadPreloadRegisterIntrinsic_xyz {
@@ -69,6 +76,59 @@
   [llvm_v4f32_ty], [llvm_v4f32_ty], [IntrNoMem, IntrSpeculatable]
 >;
 
+def int_r600_store_stream_output : Intrinsic<
+  [], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []
+>;
+
+class TextureIntrinsicFloatInput : Intrinsic<[llvm_v4f32_ty], [
+  llvm_v4f32_ty, // Coord
+  llvm_i32_ty,   // offset_x
+  llvm_i32_ty,   // offset_y,
+  llvm_i32_ty,   // offset_z,
+  llvm_i32_ty,   // resource_id
+  llvm_i32_ty,   // samplerid
+  llvm_i32_ty,   // coord_type_x
+  llvm_i32_ty,   // coord_type_y
+  llvm_i32_ty,   // coord_type_z
+  llvm_i32_ty],  // coord_type_w
+  [IntrNoMem]
+>;
+
+class TextureIntrinsicInt32Input : Intrinsic<[llvm_v4i32_ty], [
+    llvm_v4i32_ty, // Coord
+    llvm_i32_ty,   // offset_x
+    llvm_i32_ty,   // offset_y,
+    llvm_i32_ty,   // offset_z,
+    llvm_i32_ty,   // resource_id
+    llvm_i32_ty,   // samplerid
+    llvm_i32_ty,   // coord_type_x
+    llvm_i32_ty,   // coord_type_y
+    llvm_i32_ty,   // coord_type_z
+    llvm_i32_ty],  // coord_type_w
+    [IntrNoMem]
+>;
+
+def int_r600_store_swizzle :
+  Intrinsic<[], [llvm_v4f32_ty, llvm_i32_ty, llvm_i32_ty], []
+>;
+
+def int_r600_tex : TextureIntrinsicFloatInput;
+def int_r600_texc : TextureIntrinsicFloatInput;
+def int_r600_txl : TextureIntrinsicFloatInput;
+def int_r600_txlc : TextureIntrinsicFloatInput;
+def int_r600_txb : TextureIntrinsicFloatInput;
+def int_r600_txbc : TextureIntrinsicFloatInput;
+def int_r600_txf : TextureIntrinsicInt32Input;
+def int_r600_txq : TextureIntrinsicInt32Input;
+def int_r600_ddx : TextureIntrinsicFloatInput;
+def int_r600_ddy : TextureIntrinsicFloatInput;
+
+def int_r600_dot4 : Intrinsic<[llvm_float_ty],
+  [llvm_v4f32_ty, llvm_v4f32_ty], [IntrNoMem, IntrSpeculatable]
+>;
+
+def int_r600_kill : Intrinsic<[], [llvm_float_ty], []>;
+
 } // End TargetPrefix = "r600"
 
 let TargetPrefix = "amdgcn" in {
@@ -300,6 +360,12 @@
   [IntrNoMem, IntrSpeculatable]
 >;
 
+// v_mad_f32|f16/v_mac_f32|f16, selected regardless of denorm support.
+def int_amdgcn_fmad_ftz :
+  Intrinsic<[llvm_anyfloat_ty],
+            [LLVMMatchType<0>, LLVMMatchType<0>, LLVMMatchType<0>],
+            [IntrNoMem, IntrSpeculatable]
+>;
 
 // Fields should mirror atomicrmw
 class AMDGPUAtomicIncIntrin : Intrinsic<[llvm_anyint_ty],
@@ -326,169 +392,403 @@
     [IntrArgMemOnly, NoCapture<0>]
 >;
 
-def int_amdgcn_ds_fadd : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_fadd">;
-def int_amdgcn_ds_fmin : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_fmin">;
-def int_amdgcn_ds_fmax : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_fmax">;
+def int_amdgcn_ds_fadd : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_faddf">;
+def int_amdgcn_ds_fmin : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_fminf">;
+def int_amdgcn_ds_fmax : AMDGPULDSF32Intrin<"__builtin_amdgcn_ds_fmaxf">;
 
-class AMDGPUImageLoad<bit NoMem = 0> : Intrinsic <
-  [llvm_anyfloat_ty], // vdata(VGPR)
-  [llvm_anyint_ty,    // vaddr(VGPR)
-   llvm_anyint_ty,    // rsrc(SGPR)
-   llvm_i32_ty,       // dmask(imm)
-   llvm_i1_ty,        // glc(imm)
-   llvm_i1_ty,        // slc(imm)
-   llvm_i1_ty,        // lwe(imm)
-   llvm_i1_ty],       // da(imm)
-  !if(NoMem, [IntrNoMem], [IntrReadMem]), "",
-  !if(NoMem, [], [SDNPMemOperand])>;
+} // TargetPrefix = "amdgcn"
 
-def int_amdgcn_image_load : AMDGPUImageLoad;
-def int_amdgcn_image_load_mip : AMDGPUImageLoad;
-def int_amdgcn_image_getresinfo : AMDGPUImageLoad<1>;
+// New-style image intrinsics
 
-class AMDGPUImageStore : Intrinsic <
-  [],
-  [llvm_anyfloat_ty,  // vdata(VGPR)
-   llvm_anyint_ty,    // vaddr(VGPR)
-   llvm_anyint_ty,    // rsrc(SGPR)
-   llvm_i32_ty,       // dmask(imm)
-   llvm_i1_ty,        // glc(imm)
-   llvm_i1_ty,        // slc(imm)
-   llvm_i1_ty,        // lwe(imm)
-   llvm_i1_ty],       // da(imm)
-  [IntrWriteMem], "", [SDNPMemOperand]>;
+//////////////////////////////////////////////////////////////////////////
+// Dimension-aware image intrinsics framework
+//////////////////////////////////////////////////////////////////////////
 
-def int_amdgcn_image_store : AMDGPUImageStore;
-def int_amdgcn_image_store_mip : AMDGPUImageStore;
+// Helper class to represent (type, name) combinations of arguments. The
+// argument names are explanatory and used as DAG operand names for codegen
+// pattern matching.
+class AMDGPUArg<LLVMType ty, string name> {
+  LLVMType Type = ty;
+  string Name = name;
+}
 
-class AMDGPUImageSample<bit NoMem = 0> : Intrinsic <
-    [llvm_anyfloat_ty], // vdata(VGPR)
-    [llvm_anyfloat_ty,  // vaddr(VGPR)
-     llvm_anyint_ty,    // rsrc(SGPR)
-     llvm_v4i32_ty,     // sampler(SGPR)
-     llvm_i32_ty,       // dmask(imm)
-     llvm_i1_ty,        // unorm(imm)
-     llvm_i1_ty,        // glc(imm)
-     llvm_i1_ty,        // slc(imm)
-     llvm_i1_ty,        // lwe(imm)
-     llvm_i1_ty],       // da(imm)
-     !if(NoMem, [IntrNoMem], [IntrReadMem]), "",
-     !if(NoMem, [], [SDNPMemOperand])>;
+// Return [AMDGPUArg<basety, names[0]>, AMDGPUArg<LLVMMatchType<0>, names[1]>, ...]
+class makeArgList<list<string> names, LLVMType basety> {
+  list<AMDGPUArg> ret =
+    !listconcat([AMDGPUArg<basety, names[0]>],
+                !foreach(name, !tail(names), AMDGPUArg<LLVMMatchType<0>, name>));
+}
 
-// Basic sample
-def int_amdgcn_image_sample : AMDGPUImageSample;
-def int_amdgcn_image_sample_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_d : AMDGPUImageSample;
-def int_amdgcn_image_sample_d_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_l : AMDGPUImageSample;
-def int_amdgcn_image_sample_b : AMDGPUImageSample;
-def int_amdgcn_image_sample_b_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_lz : AMDGPUImageSample;
-def int_amdgcn_image_sample_cd : AMDGPUImageSample;
-def int_amdgcn_image_sample_cd_cl : AMDGPUImageSample;
+// Return arglist, with LLVMMatchType's references shifted by 'shift'.
+class arglistmatchshift<list<AMDGPUArg> arglist, int shift> {
+  list<AMDGPUArg> ret =
+    !foreach(arg, arglist,
+             !if(!isa<LLVMMatchType>(arg.Type),
+                 AMDGPUArg<LLVMMatchType<!add(!cast<LLVMMatchType>(arg.Type).Number, shift)>,
+                           arg.Name>,
+                 arg));
+}
 
-// Sample with comparison
-def int_amdgcn_image_sample_c : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_d : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_d_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_l : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_b : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_b_cl : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_lz : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cd : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cd_cl : AMDGPUImageSample;
+// Return the concatenation of the given arglists. LLVMMatchType's are adjusted
+// accordingly, and shifted by an additional 'shift'.
+class arglistconcat<list<list<AMDGPUArg>> arglists, int shift = 0> {
+  list<AMDGPUArg> ret =
+    !foldl([]<AMDGPUArg>, arglists, lhs, rhs,
+           !listconcat(
+             lhs,
+             arglistmatchshift<rhs,
+                               !add(shift, !foldl(0, lhs, a, b,
+                                                  !add(a, b.Type.isAny)))>.ret));
+}
 
-// Sample with offsets
-def int_amdgcn_image_sample_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_d_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_d_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_l_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_b_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_b_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_lz_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_cd_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_cd_cl_o : AMDGPUImageSample;
+// Represent texture/image types / dimensionality.
+class AMDGPUDimProps<string name, list<string> coord_names, list<string> slice_names> {
+  AMDGPUDimProps Dim = !cast<AMDGPUDimProps>(NAME);
+  string Name = name; // e.g. "2darraymsaa"
+  bit DA = 0; // DA bit in MIMG encoding
 
-// Sample with comparison and offsets
-def int_amdgcn_image_sample_c_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_d_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_d_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_l_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_b_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_b_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_lz_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cd_o : AMDGPUImageSample;
-def int_amdgcn_image_sample_c_cd_cl_o : AMDGPUImageSample;
+  list<AMDGPUArg> CoordSliceArgs =
+    makeArgList<!listconcat(coord_names, slice_names), llvm_anyfloat_ty>.ret;
+  list<AMDGPUArg> CoordSliceIntArgs =
+    makeArgList<!listconcat(coord_names, slice_names), llvm_anyint_ty>.ret;
+  list<AMDGPUArg> GradientArgs =
+    makeArgList<!listconcat(!foreach(name, coord_names, "d" # name # "dh"),
+                            !foreach(name, coord_names, "d" # name # "dv")),
+                llvm_anyfloat_ty>.ret;
 
-// Basic gather4
-def int_amdgcn_image_gather4 : AMDGPUImageSample;
-def int_amdgcn_image_gather4_cl : AMDGPUImageSample;
-def int_amdgcn_image_gather4_l : AMDGPUImageSample;
-def int_amdgcn_image_gather4_b : AMDGPUImageSample;
-def int_amdgcn_image_gather4_b_cl : AMDGPUImageSample;
-def int_amdgcn_image_gather4_lz : AMDGPUImageSample;
+  bits<8> NumCoords = !size(CoordSliceArgs);
+  bits<8> NumGradients = !size(GradientArgs);
+}
 
-// Gather4 with comparison
-def int_amdgcn_image_gather4_c : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_cl : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_l : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_b : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_b_cl : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_lz : AMDGPUImageSample;
+def AMDGPUDim1D : AMDGPUDimProps<"1d", ["s"], []>;
+def AMDGPUDim2D : AMDGPUDimProps<"2d", ["s", "t"], []>;
+def AMDGPUDim3D : AMDGPUDimProps<"3d", ["s", "t", "r"], []>;
+let DA = 1 in {
+  def AMDGPUDimCube : AMDGPUDimProps<"cube", ["s", "t"], ["face"]>;
+  def AMDGPUDim1DArray : AMDGPUDimProps<"1darray", ["s"], ["slice"]>;
+  def AMDGPUDim2DArray : AMDGPUDimProps<"2darray", ["s", "t"], ["slice"]>;
+}
+def AMDGPUDim2DMsaa : AMDGPUDimProps<"2dmsaa", ["s", "t"], ["fragid"]>;
+let DA = 1 in {
+  def AMDGPUDim2DArrayMsaa : AMDGPUDimProps<"2darraymsaa", ["s", "t"], ["slice", "fragid"]>;
+}
 
-// Gather4 with offsets
-def int_amdgcn_image_gather4_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_l_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_b_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_b_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_lz_o : AMDGPUImageSample;
+def AMDGPUDims {
+  list<AMDGPUDimProps> NoMsaa = [AMDGPUDim1D, AMDGPUDim2D, AMDGPUDim3D,
+                                 AMDGPUDimCube, AMDGPUDim1DArray,
+                                 AMDGPUDim2DArray];
+  list<AMDGPUDimProps> Msaa = [AMDGPUDim2DMsaa, AMDGPUDim2DArrayMsaa];
+  list<AMDGPUDimProps> All = !listconcat(NoMsaa, Msaa);
+}
 
-// Gather4 with comparison and offsets
-def int_amdgcn_image_gather4_c_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_l_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_b_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_b_cl_o : AMDGPUImageSample;
-def int_amdgcn_image_gather4_c_lz_o : AMDGPUImageSample;
+// Represent sample variants, i.e. _C, _O, _B, ... and combinations thereof.
+class AMDGPUSampleVariant<string ucmod, string lcmod, list<AMDGPUArg> extra_addr> {
+  string UpperCaseMod = ucmod;
+  string LowerCaseMod = lcmod;
 
-def int_amdgcn_image_getlod : AMDGPUImageSample<1>;
+  // {offset} {bias} {z-compare}
+  list<AMDGPUArg> ExtraAddrArgs = extra_addr;
+  bit Gradients = 0;
 
-class AMDGPUImageAtomic : Intrinsic <
-  [llvm_i32_ty],
-  [llvm_i32_ty,       // vdata(VGPR)
-   llvm_anyint_ty,    // vaddr(VGPR)
-   llvm_v8i32_ty,     // rsrc(SGPR)
-   llvm_i1_ty,        // r128(imm)
-   llvm_i1_ty,        // da(imm)
-   llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>;
+  // Name of the {lod} or {clamp} argument that is appended to the coordinates,
+  // if any.
+  string LodOrClamp = "";
+}
 
-def int_amdgcn_image_atomic_swap : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_add : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_sub : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_smin : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_umin : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_smax : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_umax : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_and : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_or : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_xor : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_inc : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_dec : AMDGPUImageAtomic;
-def int_amdgcn_image_atomic_cmpswap : Intrinsic <
-  [llvm_i32_ty],
-  [llvm_i32_ty,       // src(VGPR)
-   llvm_i32_ty,       // cmp(VGPR)
-   llvm_anyint_ty,    // vaddr(VGPR)
-   llvm_v8i32_ty,     // rsrc(SGPR)
-   llvm_i1_ty,        // r128(imm)
-   llvm_i1_ty,        // da(imm)
-   llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>;
+// AMDGPUSampleVariants: all variants supported by IMAGE_SAMPLE
+// AMDGPUSampleVariantsNoGradients: variants supported by IMAGE_GATHER4
+defset list<AMDGPUSampleVariant> AMDGPUSampleVariants = {
+  multiclass AMDGPUSampleHelper_Offset<string ucmod, string lcmod,
+                                       list<AMDGPUArg> extra_addr> {
+    def NAME#lcmod : AMDGPUSampleVariant<ucmod, lcmod, extra_addr>;
+    def NAME#lcmod#_o : AMDGPUSampleVariant<
+        ucmod#"_O", lcmod#"_o", !listconcat([AMDGPUArg<llvm_i32_ty, "offset">], extra_addr)>;
+  }
+
+  multiclass AMDGPUSampleHelper_Compare<string ucmod, string lcmod,
+                                        list<AMDGPUArg> extra_addr> {
+    defm NAME : AMDGPUSampleHelper_Offset<ucmod, lcmod, extra_addr>;
+    defm NAME : AMDGPUSampleHelper_Offset<
+        "_C"#ucmod, "_c"#lcmod, !listconcat(extra_addr, [AMDGPUArg<llvm_float_ty, "zcompare">])>;
+  }
+
+  multiclass AMDGPUSampleHelper_Clamp<string ucmod, string lcmod,
+                                      list<AMDGPUArg> extra_addr> {
+    defm NAME : AMDGPUSampleHelper_Compare<ucmod, lcmod, extra_addr>;
+    let LodOrClamp = "clamp" in
+    defm NAME : AMDGPUSampleHelper_Compare<ucmod#"_CL", lcmod#"_cl", extra_addr>;
+  }
+
+  defset list<AMDGPUSampleVariant> AMDGPUSampleVariantsNoGradients = {
+    defm AMDGPUSample : AMDGPUSampleHelper_Clamp<"", "", []>;
+    defm AMDGPUSample : AMDGPUSampleHelper_Clamp<
+        "_B", "_b", [AMDGPUArg<llvm_anyfloat_ty, "bias">]>;
+    let LodOrClamp = "lod" in
+    defm AMDGPUSample : AMDGPUSampleHelper_Compare<"_L", "_l", []>;
+    defm AMDGPUSample : AMDGPUSampleHelper_Compare<"_LZ", "_lz", []>;
+  }
+
+  let Gradients = 1 in {
+    defm AMDGPUSample : AMDGPUSampleHelper_Clamp<"_D", "_d", []>;
+    defm AMDGPUSample : AMDGPUSampleHelper_Clamp<"_CD", "_cd", []>;
+  }
+}
+
+// Helper class to capture the profile of a dimension-aware image intrinsic.
+// This information is used to generate the intrinsic's type and to inform
+// codegen pattern matching.
+class AMDGPUDimProfile<string opmod,
+                       AMDGPUDimProps dim> {
+  AMDGPUDimProps Dim = dim;
+  string OpMod = opmod; // the corresponding instruction is named IMAGE_OpMod
+
+  // These are entended to be overwritten by subclasses
+  bit IsSample = 0;
+  bit IsAtomic = 0;
+  list<LLVMType> RetTypes = [];
+  list<AMDGPUArg> DataArgs = [];
+  list<AMDGPUArg> ExtraAddrArgs = [];
+  bit Gradients = 0;
+  string LodClampMip = "";
+
+  int NumRetAndDataAnyTypes =
+    !foldl(0, !listconcat(RetTypes, !foreach(arg, DataArgs, arg.Type)), a, b,
+           !add(a, b.isAny));
+
+  list<AMDGPUArg> AddrArgs =
+    arglistconcat<[ExtraAddrArgs,
+                   !if(Gradients, dim.GradientArgs, []),
+                   !listconcat(!if(IsSample, dim.CoordSliceArgs, dim.CoordSliceIntArgs),
+                               !if(!eq(LodClampMip, ""),
+                                   []<AMDGPUArg>,
+                                   [AMDGPUArg<LLVMMatchType<0>, LodClampMip>]))],
+                  NumRetAndDataAnyTypes>.ret;
+  list<LLVMType> AddrTypes = !foreach(arg, AddrArgs, arg.Type);
+  list<AMDGPUArg> AddrDefaultArgs =
+    !foreach(arg, AddrArgs,
+             AMDGPUArg<!if(!or(arg.Type.isAny, !isa<LLVMMatchType>(arg.Type)),
+                           !if(IsSample, llvm_float_ty, llvm_i32_ty), arg.Type),
+                       arg.Name>);
+  list<AMDGPUArg> AddrA16Args =
+    !foreach(arg, AddrArgs,
+             AMDGPUArg<!if(!or(arg.Type.isAny, !isa<LLVMMatchType>(arg.Type)),
+                           !if(IsSample, llvm_half_ty, llvm_i16_ty), arg.Type),
+                       arg.Name>);
+}
+
+class AMDGPUDimProfileCopy<AMDGPUDimProfile base> : AMDGPUDimProfile<base.OpMod, base.Dim> {
+  let IsSample = base.IsSample;
+  let IsAtomic = base.IsAtomic;
+  let RetTypes = base.RetTypes;
+  let DataArgs = base.DataArgs;
+  let ExtraAddrArgs = base.ExtraAddrArgs;
+  let Gradients = base.Gradients;
+  let LodClampMip = base.LodClampMip;
+}
+
+class AMDGPUDimSampleProfile<string opmod,
+                             AMDGPUDimProps dim,
+                             AMDGPUSampleVariant sample> : AMDGPUDimProfile<opmod, dim> {
+  let IsSample = 1;
+  let RetTypes = [llvm_anyfloat_ty];
+  let ExtraAddrArgs = sample.ExtraAddrArgs;
+  let Gradients = sample.Gradients;
+  let LodClampMip = sample.LodOrClamp;
+}
+
+class AMDGPUDimNoSampleProfile<string opmod,
+                               AMDGPUDimProps dim,
+                               list<LLVMType> retty,
+                               list<AMDGPUArg> dataargs,
+                               bit Mip = 0> : AMDGPUDimProfile<opmod, dim> {
+  let RetTypes = retty;
+  let DataArgs = dataargs;
+  let LodClampMip = !if(Mip, "mip", "");
+}
+
+class AMDGPUDimAtomicProfile<string opmod,
+                             AMDGPUDimProps dim,
+                             list<AMDGPUArg> dataargs> : AMDGPUDimProfile<opmod, dim> {
+  let RetTypes = [llvm_anyint_ty];
+  let DataArgs = dataargs;
+  let IsAtomic = 1;
+}
+
+class AMDGPUDimGetResInfoProfile<AMDGPUDimProps dim> : AMDGPUDimProfile<"GET_RESINFO", dim> {
+  let RetTypes = [llvm_anyfloat_ty];
+  let DataArgs = [];
+  let AddrArgs = [AMDGPUArg<llvm_anyint_ty, "mip">];
+  let LodClampMip = "mip";
+}
+
+// All dimension-aware intrinsics are derived from this class.
+class AMDGPUImageDimIntrinsic<AMDGPUDimProfile P_,
+                              list<IntrinsicProperty> props,
+                              list<SDNodeProperty> sdnodeprops> : Intrinsic<
+    P_.RetTypes,        // vdata(VGPR) -- for load/atomic-with-return
+    !listconcat(
+      !foreach(arg, P_.DataArgs, arg.Type),      // vdata(VGPR) -- for store/atomic
+      !if(P_.IsAtomic, [], [llvm_i32_ty]),       // dmask(imm)
+      P_.AddrTypes,                              // vaddr(VGPR)
+      [llvm_v8i32_ty],                           // rsrc(SGPR)
+      !if(P_.IsSample, [llvm_v4i32_ty,           // samp(SGPR)
+                        llvm_i1_ty], []),        // unorm(imm)
+      [llvm_i32_ty,                              // texfailctrl(imm; bit 0 = tfe, bit 1 = lwe)
+       llvm_i32_ty]),                            // cachepolicy(imm; bit 0 = glc, bit 1 = slc)
+      props, "", sdnodeprops>,
+  AMDGPURsrcIntrinsic<!add(!size(P_.DataArgs), !size(P_.AddrTypes),
+                           !if(P_.IsAtomic, 0, 1)), 1> {
+  AMDGPUDimProfile P = P_;
+
+  AMDGPUImageDimIntrinsic Intr = !cast<AMDGPUImageDimIntrinsic>(NAME);
+
+  let TargetPrefix = "amdgcn";
+}
+
+// Marker class for intrinsics with a DMask that determines the returned
+// channels.
+class AMDGPUImageDMaskIntrinsic;
+
+defset list<AMDGPUImageDimIntrinsic> AMDGPUImageDimIntrinsics = {
+
+  //////////////////////////////////////////////////////////////////////////
+  // Load and store intrinsics
+  //////////////////////////////////////////////////////////////////////////
+  multiclass AMDGPUImageDimIntrinsicsNoMsaa<string opmod,
+                                            list<LLVMType> retty,
+                                            list<AMDGPUArg> dataargs,
+                                            list<IntrinsicProperty> props,
+                                            list<SDNodeProperty> sdnodeprops,
+                                            bit Mip = 0> {
+    foreach dim = AMDGPUDims.NoMsaa in {
+      def !strconcat(NAME, "_", dim.Name)
+        : AMDGPUImageDimIntrinsic<
+            AMDGPUDimNoSampleProfile<opmod, dim, retty, dataargs, Mip>,
+            props, sdnodeprops>;
+    }
+  }
+
+  multiclass AMDGPUImageDimIntrinsicsAll<string opmod,
+                                         list<LLVMType> retty,
+                                         list<AMDGPUArg> dataargs,
+                                         list<IntrinsicProperty> props,
+                                         list<SDNodeProperty> sdnodeprops,
+                                         bit Mip = 0> {
+    foreach dim = AMDGPUDims.All in {
+      def !strconcat(NAME, "_", dim.Name)
+        : AMDGPUImageDimIntrinsic<
+            AMDGPUDimNoSampleProfile<opmod, dim, retty, dataargs, Mip>,
+            props, sdnodeprops>;
+    }
+  }
+
+  defm int_amdgcn_image_load
+    : AMDGPUImageDimIntrinsicsAll<"LOAD", [llvm_anyfloat_ty], [], [IntrReadMem],
+                                  [SDNPMemOperand]>,
+      AMDGPUImageDMaskIntrinsic;
+  defm int_amdgcn_image_load_mip
+    : AMDGPUImageDimIntrinsicsNoMsaa<"LOAD_MIP", [llvm_anyfloat_ty], [],
+                                     [IntrReadMem], [SDNPMemOperand], 1>,
+      AMDGPUImageDMaskIntrinsic;
+
+  defm int_amdgcn_image_store : AMDGPUImageDimIntrinsicsAll<
+              "STORE", [], [AMDGPUArg<llvm_anyfloat_ty, "vdata">],
+              [IntrWriteMem], [SDNPMemOperand]>;
+  defm int_amdgcn_image_store_mip : AMDGPUImageDimIntrinsicsNoMsaa<
+              "STORE_MIP", [], [AMDGPUArg<llvm_anyfloat_ty, "vdata">],
+              [IntrWriteMem], [SDNPMemOperand], 1>;
+
+  //////////////////////////////////////////////////////////////////////////
+  // sample and getlod intrinsics
+  //////////////////////////////////////////////////////////////////////////
+  multiclass AMDGPUImageDimSampleDims<string opmod,
+                                      AMDGPUSampleVariant sample,
+                                      bit NoMem = 0> {
+    foreach dim = AMDGPUDims.NoMsaa in {
+      def !strconcat(NAME, "_", dim.Name) : AMDGPUImageDimIntrinsic<
+          AMDGPUDimSampleProfile<opmod, dim, sample>,
+          !if(NoMem, [IntrNoMem], [IntrReadMem]),
+          !if(NoMem, [], [SDNPMemOperand])>;
+    }
+  }
+
+  foreach sample = AMDGPUSampleVariants in {
+    defm int_amdgcn_image_sample # sample.LowerCaseMod
+      : AMDGPUImageDimSampleDims<"SAMPLE" # sample.UpperCaseMod, sample>,
+        AMDGPUImageDMaskIntrinsic;
+  }
+
+  defm int_amdgcn_image_getlod
+    : AMDGPUImageDimSampleDims<"GET_LOD", AMDGPUSample, 1>,
+      AMDGPUImageDMaskIntrinsic;
+
+  //////////////////////////////////////////////////////////////////////////
+  // getresinfo intrinsics
+  //////////////////////////////////////////////////////////////////////////
+  foreach dim = AMDGPUDims.All in {
+    def !strconcat("int_amdgcn_image_getresinfo_", dim.Name)
+      : AMDGPUImageDimIntrinsic<AMDGPUDimGetResInfoProfile<dim>, [IntrNoMem], []>,
+        AMDGPUImageDMaskIntrinsic;
+  }
+
+  //////////////////////////////////////////////////////////////////////////
+  // gather4 intrinsics
+  //////////////////////////////////////////////////////////////////////////
+  foreach sample = AMDGPUSampleVariantsNoGradients in {
+    foreach dim = [AMDGPUDim2D, AMDGPUDimCube, AMDGPUDim2DArray] in {
+      def int_amdgcn_image_gather4 # sample.LowerCaseMod # _ # dim.Name:
+          AMDGPUImageDimIntrinsic<
+              AMDGPUDimSampleProfile<"GATHER4" # sample.UpperCaseMod, dim, sample>,
+              [IntrReadMem], [SDNPMemOperand]>;
+    }
+  }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// atomic intrinsics
+//////////////////////////////////////////////////////////////////////////
+defset list<AMDGPUImageDimIntrinsic> AMDGPUImageDimAtomicIntrinsics = {
+  multiclass AMDGPUImageDimAtomicX<string opmod, list<AMDGPUArg> dataargs> {
+    foreach dim = AMDGPUDims.All in {
+      def !strconcat(NAME, "_", dim.Name)
+        : AMDGPUImageDimIntrinsic<
+            AMDGPUDimAtomicProfile<opmod, dim, dataargs>,
+            [], [SDNPMemOperand]>;
+    }
+  }
+
+  multiclass AMDGPUImageDimAtomic<string opmod> {
+    defm "" : AMDGPUImageDimAtomicX<opmod, [AMDGPUArg<LLVMMatchType<0>, "vdata">]>;
+  }
+
+  defm int_amdgcn_image_atomic_swap : AMDGPUImageDimAtomic<"ATOMIC_SWAP">;
+  defm int_amdgcn_image_atomic_add : AMDGPUImageDimAtomic<"ATOMIC_ADD">;
+  defm int_amdgcn_image_atomic_sub : AMDGPUImageDimAtomic<"ATOMIC_SUB">;
+  defm int_amdgcn_image_atomic_smin : AMDGPUImageDimAtomic<"ATOMIC_SMIN">;
+  defm int_amdgcn_image_atomic_umin : AMDGPUImageDimAtomic<"ATOMIC_UMIN">;
+  defm int_amdgcn_image_atomic_smax : AMDGPUImageDimAtomic<"ATOMIC_SMAX">;
+  defm int_amdgcn_image_atomic_umax : AMDGPUImageDimAtomic<"ATOMIC_UMAX">;
+  defm int_amdgcn_image_atomic_and : AMDGPUImageDimAtomic<"ATOMIC_AND">;
+  defm int_amdgcn_image_atomic_or : AMDGPUImageDimAtomic<"ATOMIC_OR">;
+  defm int_amdgcn_image_atomic_xor : AMDGPUImageDimAtomic<"ATOMIC_XOR">;
+
+  // TODO: INC/DEC are weird: they seem to have a vdata argument in hardware,
+  //       even though it clearly shouldn't be needed
+  defm int_amdgcn_image_atomic_inc : AMDGPUImageDimAtomic<"ATOMIC_INC">;
+  defm int_amdgcn_image_atomic_dec : AMDGPUImageDimAtomic<"ATOMIC_DEC">;
+
+  defm int_amdgcn_image_atomic_cmpswap :
+      AMDGPUImageDimAtomicX<"ATOMIC_CMPSWAP", [AMDGPUArg<LLVMMatchType<0>, "src">,
+                                               AMDGPUArg<LLVMMatchType<0>, "cmp">]>;
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Buffer intrinsics
+//////////////////////////////////////////////////////////////////////////
+
+let TargetPrefix = "amdgcn" in {
+
+defset list<AMDGPURsrcIntrinsic> AMDGPUBufferIntrinsics = {
 
 class AMDGPUBufferLoad : Intrinsic <
   [llvm_anyfloat_ty],
@@ -497,7 +797,8 @@
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty,        // glc(imm)
    llvm_i1_ty],       // slc(imm)
-  [IntrReadMem], "", [SDNPMemOperand]>;
+  [IntrReadMem], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<0>;
 def int_amdgcn_buffer_load_format : AMDGPUBufferLoad;
 def int_amdgcn_buffer_load : AMDGPUBufferLoad;
 
@@ -509,7 +810,8 @@
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty,        // glc(imm)
    llvm_i1_ty],       // slc(imm)
-  [IntrWriteMem], "", [SDNPMemOperand]>;
+  [IntrWriteMem], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<1>;
 def int_amdgcn_buffer_store_format : AMDGPUBufferStore;
 def int_amdgcn_buffer_store : AMDGPUBufferStore;
 
@@ -524,7 +826,8 @@
      llvm_i32_ty,     // nfmt(imm)
      llvm_i1_ty,     // glc(imm)
      llvm_i1_ty],    // slc(imm)
-    [IntrReadMem], "", [SDNPMemOperand]>;
+    [IntrReadMem], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<0>;
 
 def int_amdgcn_tbuffer_store : Intrinsic <
     [],
@@ -538,7 +841,8 @@
      llvm_i32_ty,    // nfmt(imm)
      llvm_i1_ty,     // glc(imm)
      llvm_i1_ty],    // slc(imm)
-    [IntrWriteMem], "", [SDNPMemOperand]>;
+    [IntrWriteMem], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<1>;
 
 class AMDGPUBufferAtomic : Intrinsic <
   [llvm_i32_ty],
@@ -547,7 +851,8 @@
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>;
+  [], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<1, 0>;
 def int_amdgcn_buffer_atomic_swap : AMDGPUBufferAtomic;
 def int_amdgcn_buffer_atomic_add : AMDGPUBufferAtomic;
 def int_amdgcn_buffer_atomic_sub : AMDGPUBufferAtomic;
@@ -566,7 +871,10 @@
    llvm_i32_ty,       // vindex(VGPR)
    llvm_i32_ty,       // offset(SGPR/VGPR/imm)
    llvm_i1_ty],       // slc(imm)
-  [], "", [SDNPMemOperand]>;
+  [], "", [SDNPMemOperand]>,
+  AMDGPURsrcIntrinsic<2, 0>;
+
+} // defset AMDGPUBufferIntrinsics
 
 // Uses that do not set the done bit should set IntrWriteMem on the
 // call site.
@@ -879,6 +1187,116 @@
   GCCBuiltin<"__builtin_amdgcn_ds_bpermute">,
   Intrinsic<[llvm_i32_ty], [llvm_i32_ty, llvm_i32_ty], [IntrNoMem, IntrConvergent]>;
 
+//===----------------------------------------------------------------------===//
+// Deep learning intrinsics.
+//===----------------------------------------------------------------------===//
+
+// f32 %r = llvm.amdgcn.fdot2(v2f16 %a, v2f16 %b, f32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %c
+def int_amdgcn_fdot2 :
+  GCCBuiltin<"__builtin_amdgcn_fdot2">,
+  Intrinsic<
+    [llvm_float_ty], // %r
+    [
+      llvm_v2f16_ty, // %a
+      llvm_v2f16_ty, // %b
+      llvm_float_ty, // %c
+      llvm_i1_ty     // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// i32 %r = llvm.amdgcn.sdot2(v2i16 %a, v2i16 %b, i32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %c
+def int_amdgcn_sdot2 :
+  GCCBuiltin<"__builtin_amdgcn_sdot2">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_v2i16_ty, // %a
+      llvm_v2i16_ty, // %b
+      llvm_i32_ty,   // %c
+      llvm_i1_ty     // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// u32 %r = llvm.amdgcn.udot2(v2u16 %a, v2u16 %b, u32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %c
+def int_amdgcn_udot2 :
+  GCCBuiltin<"__builtin_amdgcn_udot2">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_v2i16_ty, // %a
+      llvm_v2i16_ty, // %b
+      llvm_i32_ty,   // %c
+      llvm_i1_ty     // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// i32 %r = llvm.amdgcn.sdot4(v4i8 (as i32) %a, v4i8 (as i32) %b, i32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %a[2] * %b[2] + %a[3] * %b[3] + %c
+def int_amdgcn_sdot4 :
+  GCCBuiltin<"__builtin_amdgcn_sdot4">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_i32_ty, // %a
+      llvm_i32_ty, // %b
+      llvm_i32_ty, // %c
+      llvm_i1_ty   // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// u32 %r = llvm.amdgcn.udot4(v4u8 (as u32) %a, v4u8 (as u32) %b, u32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %a[2] * %b[2] + %a[3] * %b[3] + %c
+def int_amdgcn_udot4 :
+  GCCBuiltin<"__builtin_amdgcn_udot4">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_i32_ty, // %a
+      llvm_i32_ty, // %b
+      llvm_i32_ty, // %c
+      llvm_i1_ty   // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// i32 %r = llvm.amdgcn.sdot8(v8i4 (as i32) %a, v8i4 (as i32) %b, i32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %a[2] * %b[2] + %a[3] * %b[3] +
+//        %a[4] * %b[4] + %a[5] * %b[5] + %a[6] * %b[6] + %a[7] * %b[7] + %c
+def int_amdgcn_sdot8 :
+  GCCBuiltin<"__builtin_amdgcn_sdot8">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_i32_ty, // %a
+      llvm_i32_ty, // %b
+      llvm_i32_ty, // %c
+      llvm_i1_ty   // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
+
+// u32 %r = llvm.amdgcn.udot8(v8u4 (as u32) %a, v8u4 (as u32) %b, u32 %c, i1 %clamp)
+//   %r = %a[0] * %b[0] + %a[1] * %b[1] + %a[2] * %b[2] + %a[3] * %b[3] +
+//        %a[4] * %b[4] + %a[5] * %b[5] + %a[6] * %b[6] + %a[7] * %b[7] + %c
+def int_amdgcn_udot8 :
+  GCCBuiltin<"__builtin_amdgcn_udot8">,
+  Intrinsic<
+    [llvm_i32_ty], // %r
+    [
+      llvm_i32_ty, // %a
+      llvm_i32_ty, // %b
+      llvm_i32_ty, // %c
+      llvm_i1_ty   // %clamp
+    ],
+    [IntrNoMem, IntrSpeculatable]
+  >;
 
 //===----------------------------------------------------------------------===//
 // Special Intrinsics for backend internal use only. No frontend
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td b/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
index fe38613..4e11f9c 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsARM.td
@@ -275,7 +275,7 @@
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
 def int_arm_stcl : GCCBuiltin<"__builtin_arm_stcl">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
-def int_arm_stc2 : GCCBuiltin<"__builtin_arm_stc2">, 
+def int_arm_stc2 : GCCBuiltin<"__builtin_arm_stc2">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
 def int_arm_stc2l : GCCBuiltin<"__builtin_arm_stc2l">,
    Intrinsic<[], [llvm_i32_ty, llvm_i32_ty, llvm_ptr_ty], []>;
@@ -369,6 +369,10 @@
   : Intrinsic<[llvm_anyvector_ty],
               [LLVMMatchType<0>, LLVMTruncatedType<0>, LLVMTruncatedType<0>],
               [IntrNoMem]>;
+
+class Neon_1FloatArg_Intrinsic
+  : Intrinsic<[llvm_anyfloat_ty], [LLVMMatchType<0>], [IntrNoMem]>;
+
 class Neon_CvtFxToFP_Intrinsic
   : Intrinsic<[llvm_anyfloat_ty], [llvm_anyint_ty, llvm_i32_ty], [IntrNoMem]>;
 class Neon_CvtFPToFx_Intrinsic
@@ -591,8 +595,8 @@
 def int_arm_neon_vtbx3 : Neon_Tbl5Arg_Intrinsic;
 def int_arm_neon_vtbx4 : Neon_Tbl6Arg_Intrinsic;
 
-// Vector Rounding
-def int_arm_neon_vrintn : Neon_1Arg_Intrinsic;
+// Vector and Scalar Rounding.
+def int_arm_neon_vrintn : Neon_1FloatArg_Intrinsic;
 def int_arm_neon_vrintx : Neon_1Arg_Intrinsic;
 def int_arm_neon_vrinta : Neon_1Arg_Intrinsic;
 def int_arm_neon_vrintz : Neon_1Arg_Intrinsic;
@@ -616,6 +620,18 @@
                                   [llvm_anyptr_ty, llvm_i32_ty],
                                   [IntrReadMem, IntrArgMemOnly]>;
 
+def int_arm_neon_vld1x2 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
+                                    [LLVMAnyPointerType<LLVMMatchType<0>>],
+                                    [IntrReadMem, IntrArgMemOnly]>;
+def int_arm_neon_vld1x3 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
+                                     LLVMMatchType<0>],
+                                    [LLVMAnyPointerType<LLVMMatchType<0>>],
+                                    [IntrReadMem, IntrArgMemOnly]>;
+def int_arm_neon_vld1x4 : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
+                                     LLVMMatchType<0>, LLVMMatchType<0>],
+                                    [LLVMAnyPointerType<LLVMMatchType<0>>],
+                                    [IntrReadMem, IntrArgMemOnly]>;
+
 // Vector load N-element structure to one lane.
 // Source operands are: the address, the N input vectors (since only one
 // lane is assigned), the lane number, and the alignment.
@@ -636,6 +652,20 @@
                                        LLVMMatchType<0>, llvm_i32_ty,
                                        llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
 
+// Vector load N-element structure to all lanes.
+// Source operands are the address and alignment.
+def int_arm_neon_vld2dup : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>],
+                                     [llvm_anyptr_ty, llvm_i32_ty],
+                                     [IntrReadMem, IntrArgMemOnly]>;
+def int_arm_neon_vld3dup : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
+                                      LLVMMatchType<0>],
+                                     [llvm_anyptr_ty, llvm_i32_ty],
+                                     [IntrReadMem, IntrArgMemOnly]>;
+def int_arm_neon_vld4dup : Intrinsic<[llvm_anyvector_ty, LLVMMatchType<0>,
+                                      LLVMMatchType<0>, LLVMMatchType<0>],
+                                     [llvm_anyptr_ty, llvm_i32_ty],
+                                     [IntrReadMem, IntrArgMemOnly]>;
+
 // Interleaving vector stores from N-element structures.
 // Source operands are: the address, the N vectors, and the alignment.
 def int_arm_neon_vst1 : Intrinsic<[],
@@ -655,6 +685,20 @@
                                    LLVMMatchType<1>, llvm_i32_ty],
                                   [IntrArgMemOnly]>;
 
+def int_arm_neon_vst1x2 : Intrinsic<[],
+                                    [llvm_anyptr_ty, llvm_anyvector_ty,
+                                     LLVMMatchType<1>],
+                                    [IntrArgMemOnly, NoCapture<0>]>;
+def int_arm_neon_vst1x3 : Intrinsic<[],
+                                    [llvm_anyptr_ty, llvm_anyvector_ty,
+                                     LLVMMatchType<1>, LLVMMatchType<1>],
+                                    [IntrArgMemOnly, NoCapture<0>]>;
+def int_arm_neon_vst1x4 : Intrinsic<[],
+                                    [llvm_anyptr_ty, llvm_anyvector_ty,
+                                     LLVMMatchType<1>, LLVMMatchType<1>,
+                                     LLVMMatchType<1>],
+                                    [IntrArgMemOnly, NoCapture<0>]>;
+
 // Vector store N-element structure from one lane.
 // Source operands are: the address, the N vectors, the lane number, and
 // the alignment.
@@ -713,4 +757,14 @@
 def int_arm_neon_sha256h2: SHA_3Arg_v4i32_Intrinsic;
 def int_arm_neon_sha256su1: SHA_3Arg_v4i32_Intrinsic;
 
+// Armv8.2-A dot product instructions
+class Neon_Dot_Intrinsic
+  : Intrinsic<[llvm_anyvector_ty],
+              [LLVMMatchType<0>, llvm_anyvector_ty,
+               LLVMMatchType<1>],
+              [IntrNoMem]>;
+def int_arm_neon_udot : Neon_Dot_Intrinsic;
+def int_arm_neon_sdot : Neon_Dot_Intrinsic;
+
+
 } // end TargetPrefix
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td b/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
index 609aebd..7f694f6 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsNVVM.td
@@ -3920,7 +3920,9 @@
 }
 
 multiclass NVVM_WMMA_LD {
+  defm _m32n8k16_load: NVVM_WMMA_LD_G<"m32n8k16">;
   defm _m16n16k16_load: NVVM_WMMA_LD_G<"m16n16k16">;
+  defm _m8n32k16_load: NVVM_WMMA_LD_G<"m8n32k16">;
 }
 
 defm int_nvvm_wmma: NVVM_WMMA_LD;
@@ -3947,7 +3949,7 @@
                    # !if(WithStride, ".stride", "")
                    # "." # Type>;
 
-multiclass NVVM_WMMA_STD_GLT<string Geometry, string Layout, 
+multiclass NVVM_WMMA_STD_GLT<string Geometry, string Layout,
                              string Type, LLVMType regty> {
   def _stride: NVVM_WMMA_STD_GLSTS<Geometry, Layout, Type, regty, 1>;
   def NAME:    NVVM_WMMA_STD_GLSTS<Geometry, Layout, Type, regty, 0>;
@@ -3963,7 +3965,9 @@
 }
 
 multiclass NVVM_WMMA_STD {
+  defm _m32n8k16_store:  NVVM_WMMA_STD_G<"m32n8k16">;
   defm _m16n16k16_store: NVVM_WMMA_STD_G<"m16n16k16">;
+  defm _m8n32k16_store:  NVVM_WMMA_STD_G<"m8n32k16">;
 }
 
 defm int_nvvm_wmma: NVVM_WMMA_STD;
@@ -4033,7 +4037,9 @@
 }
 
 multiclass NVVM_WMMA_MMA {
+  defm _m32n8k16_mma : NVVM_WMMA_MMA_G<"m32n8k16">;
   defm _m16n16k16_mma : NVVM_WMMA_MMA_G<"m16n16k16">;
+  defm _m8n32k16_mma : NVVM_WMMA_MMA_G<"m8n32k16">;
 }
 
 defm int_nvvm_wmma : NVVM_WMMA_MMA;
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td b/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
index 6321bb8..3433aaa 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsPowerPC.td
@@ -1,10 +1,10 @@
 //===- IntrinsicsPowerPC.td - Defines PowerPC intrinsics ---*- tablegen -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
 // This file is distributed under the University of Illinois Open Source
 // License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
 // This file defines all of the PowerPC-specific intrinsics.
@@ -36,8 +36,12 @@
 
   // Intrinsics used to generate ctr-based loops. These should only be
   // generated by the PowerPC backend!
+  // The branch intrinsic is marked as NoDuplicate because loop rotation will
+  // attempt to duplicate it forming loops where a block reachable from one
+  // instance of it can contain another.
   def int_ppc_mtctr : Intrinsic<[], [llvm_anyint_ty], []>;
-  def int_ppc_is_decremented_ctr_nonzero : Intrinsic<[llvm_i1_ty], [], []>;
+  def int_ppc_is_decremented_ctr_nonzero :
+    Intrinsic<[llvm_i1_ty], [], [IntrNoDuplicate]>;
 
   // Intrinsics for [double]word extended forms of divide instructions
   def int_ppc_divwe : GCCBuiltin<"__builtin_divwe">,
@@ -57,6 +61,29 @@
   def int_ppc_bpermd : GCCBuiltin<"__builtin_bpermd">,
                        Intrinsic<[llvm_i64_ty], [llvm_i64_ty, llvm_i64_ty],
                                  [IntrNoMem]>;
+
+  def int_ppc_truncf128_round_to_odd
+      : GCCBuiltin<"__builtin_truncf128_round_to_odd">,
+        Intrinsic <[llvm_double_ty], [llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_sqrtf128_round_to_odd
+      : GCCBuiltin<"__builtin_sqrtf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_addf128_round_to_odd
+      : GCCBuiltin<"__builtin_addf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_subf128_round_to_odd
+      : GCCBuiltin<"__builtin_subf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_mulf128_round_to_odd
+      : GCCBuiltin<"__builtin_mulf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_divf128_round_to_odd
+      : GCCBuiltin<"__builtin_divf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
+  def int_ppc_fmaf128_round_to_odd
+      : GCCBuiltin<"__builtin_fmaf128_round_to_odd">,
+        Intrinsic <[llvm_f128_ty], [llvm_f128_ty,llvm_f128_ty,llvm_f128_ty], [IntrNoMem]>;
+
 }
 
 
@@ -95,21 +122,21 @@
 
 /// PowerPC_Vec_BBB_Intrinsic - A PowerPC intrinsic that takes two v16i8
 /// vectors and returns one.  These intrinsics have no side effects.
-class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix> 
+class PowerPC_Vec_BBB_Intrinsic<string GCCIntSuffix>
   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
                           [llvm_v16i8_ty], [llvm_v16i8_ty, llvm_v16i8_ty],
                           [IntrNoMem]>;
 
 /// PowerPC_Vec_HHH_Intrinsic - A PowerPC intrinsic that takes two v8i16
 /// vectors and returns one.  These intrinsics have no side effects.
-class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix> 
+class PowerPC_Vec_HHH_Intrinsic<string GCCIntSuffix>
   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
                           [llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
                           [IntrNoMem]>;
 
 /// PowerPC_Vec_WWW_Intrinsic - A PowerPC intrinsic that takes two v4i32
 /// vectors and returns one.  These intrinsics have no side effects.
-class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix> 
+class PowerPC_Vec_WWW_Intrinsic<string GCCIntSuffix>
   : PowerPC_Vec_Intrinsic<GCCIntSuffix,
                           [llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
                           [IntrNoMem]>;
@@ -240,7 +267,7 @@
   def int_ppc_altivec_vcmpgtud : GCCBuiltin<"__builtin_altivec_vcmpgtud">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty],
                         [IntrNoMem]>;
-                                                
+
   def int_ppc_altivec_vcmpequw : GCCBuiltin<"__builtin_altivec_vcmpequw">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
                         [IntrNoMem]>;
@@ -256,7 +283,7 @@
   def int_ppc_altivec_vcmpnezw : GCCBuiltin<"__builtin_altivec_vcmpnezw">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
                         [IntrNoMem]>;
-                        
+
   def int_ppc_altivec_vcmpequh : GCCBuiltin<"__builtin_altivec_vcmpequh">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty],
                         [IntrNoMem]>;
@@ -328,7 +355,7 @@
   def int_ppc_altivec_vcmpnezw_p : GCCBuiltin<"__builtin_altivec_vcmpnezw_p">,
               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v4i32_ty,llvm_v4i32_ty],
                         [IntrNoMem]>;
-                        
+
   def int_ppc_altivec_vcmpequh_p : GCCBuiltin<"__builtin_altivec_vcmpequh_p">,
               Intrinsic<[llvm_i32_ty],[llvm_i32_ty,llvm_v8i16_ty,llvm_v8i16_ty],
                         [IntrNoMem]>;
@@ -447,10 +474,10 @@
             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
                        llvm_v4i32_ty], [IntrNoMem]>;
   def int_ppc_altivec_vmsumshs : GCCBuiltin<"__builtin_altivec_vmsumshs">,
-            Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
+            Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
                        llvm_v4i32_ty], [IntrNoMem]>;
   def int_ppc_altivec_vmsumubm : GCCBuiltin<"__builtin_altivec_vmsumubm">,
-            Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty, 
+            Intrinsic<[llvm_v4i32_ty], [llvm_v16i8_ty, llvm_v16i8_ty,
                        llvm_v4i32_ty], [IntrNoMem]>;
   def int_ppc_altivec_vmsumuhm : GCCBuiltin<"__builtin_altivec_vmsumuhm">,
             Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
@@ -517,7 +544,7 @@
 
   // Other multiplies.
   def int_ppc_altivec_vmladduhm : GCCBuiltin<"__builtin_altivec_vmladduhm">,
-            Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty, 
+            Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
                        llvm_v8i16_ty], [IntrNoMem]>;
 
   // Packs.
@@ -599,21 +626,21 @@
 
   // Add Extended Quadword
   def int_ppc_altivec_vaddeuqm : GCCBuiltin<"__builtin_altivec_vaddeuqm">,
-              Intrinsic<[llvm_v1i128_ty], 
+              Intrinsic<[llvm_v1i128_ty],
                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
                         [IntrNoMem]>;
   def int_ppc_altivec_vaddecuq : GCCBuiltin<"__builtin_altivec_vaddecuq">,
-              Intrinsic<[llvm_v1i128_ty], 
+              Intrinsic<[llvm_v1i128_ty],
                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
                         [IntrNoMem]>;
 
   // Sub Extended Quadword
   def int_ppc_altivec_vsubeuqm : GCCBuiltin<"__builtin_altivec_vsubeuqm">,
-              Intrinsic<[llvm_v1i128_ty], 
+              Intrinsic<[llvm_v1i128_ty],
                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
                         [IntrNoMem]>;
   def int_ppc_altivec_vsubecuq : GCCBuiltin<"__builtin_altivec_vsubecuq">,
-              Intrinsic<[llvm_v1i128_ty], 
+              Intrinsic<[llvm_v1i128_ty],
                         [llvm_v1i128_ty, llvm_v1i128_ty, llvm_v1i128_ty],
                         [IntrNoMem]>;
 }
@@ -630,7 +657,7 @@
 // Right Shifts.
 def int_ppc_altivec_vsr   : PowerPC_Vec_WWW_Intrinsic<"vsr">;
 def int_ppc_altivec_vsro  : PowerPC_Vec_WWW_Intrinsic<"vsro">;
-  
+
 def int_ppc_altivec_vsrb  : PowerPC_Vec_BBB_Intrinsic<"vsrb">;
 def int_ppc_altivec_vsrh  : PowerPC_Vec_HHH_Intrinsic<"vsrh">;
 def int_ppc_altivec_vsrw  : PowerPC_Vec_WWW_Intrinsic<"vsrw">;
@@ -652,10 +679,10 @@
               Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty], [IntrNoMem]>;
 
   def int_ppc_altivec_vperm : GCCBuiltin<"__builtin_altivec_vperm_4si">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 
+              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty, llvm_v16i8_ty], [IntrNoMem]>;
   def int_ppc_altivec_vsel : GCCBuiltin<"__builtin_altivec_vsel_4si">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, 
+              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
                          llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
   def int_ppc_altivec_vgbbd : GCCBuiltin<"__builtin_altivec_vgbbd">,
               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty], [IntrNoMem]>;
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td b/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
index e9e5e53..c94972c 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsWebAssembly.td
@@ -8,17 +8,23 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file defines all of the WebAssembly-specific intrinsics.
+/// This file defines all of the WebAssembly-specific intrinsics.
 ///
 //===----------------------------------------------------------------------===//
 
 let TargetPrefix = "wasm" in {  // All intrinsics start with "llvm.wasm.".
 
 // Query the current memory size, and increase the current memory size.
-// Note that mem.size is not IntrNoMem because it must be sequenced with
-// respect to mem.grow calls.
-// These are the new proposed names, which aren't yet official. Use at your own
-// risk.
+// Note that memory.size is not IntrNoMem because it must be sequenced with
+// respect to memory.grow calls.
+def int_wasm_memory_size : Intrinsic<[llvm_anyint_ty],
+                                     [llvm_i32_ty],
+                                     [IntrReadMem]>;
+def int_wasm_memory_grow : Intrinsic<[llvm_anyint_ty],
+                                     [llvm_i32_ty, LLVMMatchType<0>],
+                                     []>;
+
+// These are the old names.
 def int_wasm_mem_size : Intrinsic<[llvm_anyint_ty],
                                   [llvm_i32_ty],
                                   [IntrReadMem]>;
@@ -26,8 +32,7 @@
                                   [llvm_i32_ty, LLVMMatchType<0>],
                                   []>;
 
-// These are the existing names, which are currently official, but expected
-// to be deprecated in the future. They also lack the immediate field.
+// These are the old old names. They also lack the immediate field.
 def int_wasm_current_memory : Intrinsic<[llvm_anyint_ty], [], [IntrReadMem]>;
 def int_wasm_grow_memory : Intrinsic<[llvm_anyint_ty], [LLVMMatchType<0>], []>;
 
@@ -42,7 +47,44 @@
 
 // Since wasm does not use landingpad instructions, these instructions return
 // exception pointer and selector values until we lower them in WasmEHPrepare.
-def int_wasm_get_exception : Intrinsic<[llvm_ptr_ty], [], [IntrHasSideEffects]>;
-def int_wasm_get_ehselector : Intrinsic<[llvm_i32_ty], [],
+def int_wasm_get_exception : Intrinsic<[llvm_ptr_ty], [llvm_token_ty],
+                                       [IntrHasSideEffects]>;
+def int_wasm_get_ehselector : Intrinsic<[llvm_i32_ty], [llvm_token_ty],
                                         [IntrHasSideEffects]>;
+
+// wasm.catch returns the pointer to the exception object caught by wasm 'catch'
+// instruction.
+def int_wasm_catch : Intrinsic<[llvm_ptr_ty], [llvm_i32_ty],
+                               [IntrHasSideEffects]>;
+
+// WebAssembly EH must maintain the landingpads in the order assigned to them
+// by WasmEHPrepare pass to generate landingpad table in EHStreamer. This is
+// used in order to give them the indices in WasmEHPrepare.
+def int_wasm_landingpad_index: Intrinsic<[], [llvm_i32_ty], [IntrNoMem]>;
+
+// Returns LSDA address of the current function.
+def int_wasm_lsda : Intrinsic<[llvm_ptr_ty], [], [IntrNoMem]>;
+
+//===----------------------------------------------------------------------===//
+// Atomic intrinsics
+//===----------------------------------------------------------------------===//
+
+// wait / notify
+def int_wasm_atomic_wait_i32 :
+  Intrinsic<[llvm_i32_ty],
+            [LLVMPointerType<llvm_i32_ty>, llvm_i32_ty, llvm_i64_ty],
+            [IntrInaccessibleMemOrArgMemOnly, ReadOnly<0>, NoCapture<0>,
+             IntrHasSideEffects],
+             "", [SDNPMemOperand]>;
+def int_wasm_atomic_wait_i64 :
+  Intrinsic<[llvm_i32_ty],
+            [LLVMPointerType<llvm_i64_ty>, llvm_i64_ty, llvm_i64_ty],
+            [IntrInaccessibleMemOrArgMemOnly, ReadOnly<0>, NoCapture<0>,
+             IntrHasSideEffects],
+             "", [SDNPMemOperand]>;
+def int_wasm_atomic_notify:
+  Intrinsic<[llvm_i64_ty], [LLVMPointerType<llvm_i32_ty>, llvm_i64_ty],
+            [IntrInaccessibleMemOnly, NoCapture<0>, IntrHasSideEffects], "",
+            [SDNPMemOperand]>;
+
 }
diff --git a/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td b/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
index b0a9dc1..905afc1 100644
--- a/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
+++ b/linux-x64/clang/include/llvm/IR/IntrinsicsX86.td
@@ -180,12 +180,6 @@
 
 // Arithmetic ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss">,
-              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_sse_sqrt_ps : GCCBuiltin<"__builtin_ia32_sqrtps">,
-              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
-                        [IntrNoMem]>;
   def int_x86_sse_rcp_ss : GCCBuiltin<"__builtin_ia32_rcpss">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty],
                         [IntrNoMem]>;
@@ -217,6 +211,8 @@
   def int_x86_sse_cmp_ss : GCCBuiltin<"__builtin_ia32_cmpss">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
+  // NOTE: This comparison intrinsic is not used by clang as long as the
+  //       distinction in signaling behaviour is not implemented.
   def int_x86_sse_cmp_ps :
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
                          llvm_v4f32_ty, llvm_i8_ty], [IntrNoMem]>;
@@ -269,12 +265,6 @@
               Intrinsic<[llvm_i32_ty], [llvm_v4f32_ty], [IntrNoMem]>;
   def int_x86_sse_cvttss2si64 : GCCBuiltin<"__builtin_ia32_cvttss2si64">,
               Intrinsic<[llvm_i64_ty], [llvm_v4f32_ty], [IntrNoMem]>;
-  def int_x86_sse_cvtsi2ss : // TODO: Remove this intrinsic.
-              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_sse_cvtsi642ss : // TODO: Remove this intrinsic.
-              Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
-                         llvm_i64_ty], [IntrNoMem]>;
 
   def int_x86_sse_cvtps2pi : GCCBuiltin<"__builtin_ia32_cvtps2pi">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_v4f32_ty], [IntrNoMem]>;
@@ -310,12 +300,6 @@
 
 // FP arithmetic ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse2_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd">,
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_sse2_sqrt_pd : GCCBuiltin<"__builtin_ia32_sqrtpd">,
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty],
-                        [IntrNoMem]>;
   def int_x86_sse2_min_sd : GCCBuiltin<"__builtin_ia32_minsd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
                          llvm_v2f64_ty], [IntrNoMem]>;
@@ -335,6 +319,8 @@
   def int_x86_sse2_cmp_sd : GCCBuiltin<"__builtin_ia32_cmpsd">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
                          llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
+  // NOTE: This comparison intrinsic is not used by clang as long as the
+  //       distinction in signaling behaviour is not implemented.
   def int_x86_sse2_cmp_pd :
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
                          llvm_v2f64_ty, llvm_i8_ty], [IntrNoMem]>;
@@ -408,9 +394,6 @@
   def int_x86_sse2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
-  def int_x86_sse2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq128">,
-              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty,
-                         llvm_v4i32_ty], [IntrNoMem, Commutative]>;
   def int_x86_sse2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v8i16_ty,
                          llvm_v8i16_ty], [IntrNoMem, Commutative]>;
@@ -474,8 +457,6 @@
 
 // Conversion ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse2_cvtdq2ps : GCCBuiltin<"__builtin_ia32_cvtdq2ps">,
-              Intrinsic<[llvm_v4f32_ty], [llvm_v4i32_ty], [IntrNoMem]>;
   def int_x86_sse2_cvtpd2dq : GCCBuiltin<"__builtin_ia32_cvtpd2dq">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse2_cvttpd2dq : GCCBuiltin<"__builtin_ia32_cvttpd2dq">,
@@ -494,18 +475,9 @@
               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse2_cvttsd2si64 : GCCBuiltin<"__builtin_ia32_cvttsd2si64">,
               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty], [IntrNoMem]>;
-  def int_x86_sse2_cvtsi2sd : // TODO: Remove this intrinsic.
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_sse2_cvtsi642sd : // TODO: Remove this intrinsic.
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i64_ty], [IntrNoMem]>;
   def int_x86_sse2_cvtsd2ss : GCCBuiltin<"__builtin_ia32_cvtsd2ss">,
               Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty,
                          llvm_v2f64_ty], [IntrNoMem]>;
-  def int_x86_sse2_cvtss2sd : // TODO: Remove this intrinsic.
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_v4f32_ty], [IntrNoMem]>;
   def int_x86_sse_cvtpd2pi : GCCBuiltin<"__builtin_ia32_cvtpd2pi">,
               Intrinsic<[llvm_x86mmx_ty], [llvm_v2f64_ty], [IntrNoMem]>;
   def int_x86_sse_cvttpd2pi: GCCBuiltin<"__builtin_ia32_cvttpd2pi">,
@@ -803,13 +775,6 @@
                         [IntrNoMem]>;
 }
 
-// Vector multiply
-let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse41_pmuldq          : GCCBuiltin<"__builtin_ia32_pmuldq128">,
-              Intrinsic<[llvm_v2i64_ty], [llvm_v4i32_ty, llvm_v4i32_ty],
-                        [IntrNoMem, Commutative]>;
-}
-
 // Vector insert
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
   def int_x86_sse41_insertps       : GCCBuiltin<"__builtin_ia32_insertps128">,
@@ -988,11 +953,6 @@
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
                   llvm_v8f32_ty], [IntrNoMem]>;
 
-  def int_x86_avx_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256">,
-        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty], [IntrNoMem]>;
-  def int_x86_avx_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256">,
-        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
-
   def int_x86_avx_rsqrt_ps_256 : GCCBuiltin<"__builtin_ia32_rsqrtps256">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty], [IntrNoMem]>;
 
@@ -1039,325 +999,99 @@
         GCCBuiltin<"__builtin_ia32_vpermilvarps256">,
         Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_d_128 :
-       GCCBuiltin<"__builtin_ia32_vpermi2vard128_mask">,
-        Intrinsic<[llvm_v4i32_ty],
-        [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
-        [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_d_128 :
+       GCCBuiltin<"__builtin_ia32_vpermi2vard128">,
+       Intrinsic<[llvm_v4i32_ty],
+                 [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_d_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2vard256_mask">,
-          Intrinsic<[llvm_v8i32_ty],
-          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_d_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2vard256">,
+        Intrinsic<[llvm_v8i32_ty],
+                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_d_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2vard512_mask">,
-          Intrinsic<[llvm_v16i32_ty],
-          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_d_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2vard512">,
+        Intrinsic<[llvm_v16i32_ty],
+                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty],
+                  [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_hi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varhi128_mask">,
-          Intrinsic<[llvm_v8i16_ty],
-          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_hi_128 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varhi128">,
+        Intrinsic<[llvm_v8i16_ty],
+                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_hi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varhi256_mask">,
-          Intrinsic<[llvm_v16i16_ty],
-          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_hi_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varhi256">,
+        Intrinsic<[llvm_v16i16_ty],
+                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty],
+                  [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_hi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varhi512_mask">,
-          Intrinsic<[llvm_v32i16_ty],
-          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_hi_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varhi512">,
+        Intrinsic<[llvm_v32i16_ty],
+                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty],
+                  [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_pd_128 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_pd_128 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varpd128">,
+        Intrinsic<[llvm_v2f64_ty],
+                  [llvm_v2f64_ty, llvm_v2i64_ty, llvm_v2f64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_pd_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_pd_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varpd256">,
+        Intrinsic<[llvm_v4f64_ty],
+                  [llvm_v4f64_ty, llvm_v4i64_ty, llvm_v4f64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_pd_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varpd512_mask">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_pd_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varpd512">,
+        Intrinsic<[llvm_v8f64_ty],
+                  [llvm_v8f64_ty, llvm_v8i64_ty, llvm_v8f64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_ps_128 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_ps_128 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varps128">,
+        Intrinsic<[llvm_v4f32_ty],
+                  [llvm_v4f32_ty, llvm_v4i32_ty, llvm_v4f32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_ps_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_ps_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varps256">,
+        Intrinsic<[llvm_v8f32_ty],
+                  [llvm_v8f32_ty, llvm_v8i32_ty, llvm_v8f32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_ps_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varps512_mask">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_ps_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varps512">,
+        Intrinsic<[llvm_v16f32_ty],
+                  [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16f32_ty],
+                  [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_q_128 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varq128_mask">,
-          Intrinsic<[llvm_v2i64_ty],
-          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_q_128 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varq128">,
+        Intrinsic<[llvm_v2i64_ty],
+                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_q_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varq256_mask">,
-          Intrinsic<[llvm_v4i64_ty],
-          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_q_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varq256">,
+        Intrinsic<[llvm_v4i64_ty],
+                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermi2var_q_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varq512_mask">,
-          Intrinsic<[llvm_v8i64_ty],
-          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_q_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varq512">,
+        Intrinsic<[llvm_v8i64_ty],
+                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermt2var_d_512:
-        GCCBuiltin<"__builtin_ia32_vpermt2vard512_mask">,
-        Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
-                  llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_qi_128 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varqi128">,
+        Intrinsic<[llvm_v16i8_ty],
+                  [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v16i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermt2var_q_512:
-        GCCBuiltin<"__builtin_ia32_vpermt2varq512_mask">,
-        Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
-                  llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_qi_256 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varqi256">,
+        Intrinsic<[llvm_v32i8_ty],
+                  [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v32i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpermt2var_ps_512:
-        GCCBuiltin<"__builtin_ia32_vpermt2varps512_mask">,
-        Intrinsic<[llvm_v16f32_ty], [llvm_v16i32_ty,
-                  llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_pd_512:
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd512_mask">,
-        Intrinsic<[llvm_v8f64_ty], [llvm_v8i64_ty,
-                  llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_d_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2vard128_mask">,
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_d_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2vard128_maskz">,
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_d_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2vard256_mask">,
-          Intrinsic<[llvm_v8i32_ty],
-          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_d_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2vard256_maskz">,
-          Intrinsic<[llvm_v8i32_ty],
-          [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_d_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2vard512_maskz">,
-          Intrinsic<[llvm_v16i32_ty],
-          [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_hi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi128_mask">,
-          Intrinsic<[llvm_v8i16_ty],
-          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_hi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi128_maskz">,
-          Intrinsic<[llvm_v8i16_ty],
-          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_hi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi256_mask">,
-          Intrinsic<[llvm_v16i16_ty],
-          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_hi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi256_maskz">,
-          Intrinsic<[llvm_v16i16_ty],
-          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_hi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi512_mask">,
-          Intrinsic<[llvm_v32i16_ty],
-          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_hi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varhi512_maskz">,
-          Intrinsic<[llvm_v32i16_ty],
-          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_pd_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_pd_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd128_maskz">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2i64_ty, llvm_v2f64_ty, llvm_v2f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_pd_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_pd_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd256_maskz">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4i64_ty, llvm_v4f64_ty, llvm_v4f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_pd_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varpd512_maskz">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8i64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_ps_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_ps_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varps128_maskz">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4i32_ty, llvm_v4f32_ty, llvm_v4f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_ps_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_ps_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varps256_maskz">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8i32_ty, llvm_v8f32_ty, llvm_v8f32_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_ps_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varps512_maskz">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16i32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_q_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varq128_mask">,
-          Intrinsic<[llvm_v2i64_ty],
-          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_q_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varq128_maskz">,
-          Intrinsic<[llvm_v2i64_ty],
-          [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_q_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varq256_mask">,
-          Intrinsic<[llvm_v4i64_ty],
-          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_q_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varq256_maskz">,
-          Intrinsic<[llvm_v4i64_ty],
-          [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_q_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varq512_maskz">,
-          Intrinsic<[llvm_v8i64_ty],
-          [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermi2var_qi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varqi128_mask">,
-          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
-          llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_qi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi128_mask">,
-          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
-          llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_qi_128 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi128_maskz">,
-          Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
-          llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermi2var_qi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varqi256_mask">,
-          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
-          llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_qi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi256_mask">,
-          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
-          llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_qi_256 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi256_maskz">,
-          Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
-          llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermi2var_qi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermi2varqi512_mask">,
-          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
-          llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpermt2var_qi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi512_mask">,
-          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
-          llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vpermt2var_qi_512 :
-        GCCBuiltin<"__builtin_ia32_vpermt2varqi512_maskz">,
-          Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
-          llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vpermi2var_qi_512 :
+        GCCBuiltin<"__builtin_ia32_vpermi2varqi512">,
+        Intrinsic<[llvm_v64i8_ty],
+                  [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v64i8_ty], [IntrNoMem]>;
 
   def int_x86_avx512_vpermilvar_pd_512 :
         GCCBuiltin<"__builtin_ia32_vpermilvarpd512">,
@@ -1456,8 +1190,6 @@
 
 // Vector convert
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_avx_cvtdq2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtdq2ps256">,
-        Intrinsic<[llvm_v8f32_ty], [llvm_v8i32_ty], [IntrNoMem]>;
   def int_x86_avx_cvt_pd2_ps_256 : GCCBuiltin<"__builtin_ia32_cvtpd2ps256">,
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f64_ty], [IntrNoMem]>;
   def int_x86_avx_cvt_ps2dq_256 : GCCBuiltin<"__builtin_ia32_cvtps2dq256">,
@@ -1518,29 +1250,23 @@
         Intrinsic<[llvm_i32_ty], [llvm_v4i64_ty,
                   llvm_v4i64_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_fpclass_pd_128 :
-         GCCBuiltin<"__builtin_ia32_fpclasspd128_mask">,
-          Intrinsic<[llvm_i8_ty], [llvm_v2f64_ty, llvm_i32_ty, llvm_i8_ty],
+  def int_x86_avx512_fpclass_pd_128 :
+          Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_i32_ty],
           [IntrNoMem]>;
-  def int_x86_avx512_mask_fpclass_pd_256 :
-         GCCBuiltin<"__builtin_ia32_fpclasspd256_mask">,
-          Intrinsic<[llvm_i8_ty], [llvm_v4f64_ty, llvm_i32_ty, llvm_i8_ty],
+  def int_x86_avx512_fpclass_pd_256 :
+          Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_i32_ty],
           [IntrNoMem]>;
-  def int_x86_avx512_mask_fpclass_pd_512 :
-         GCCBuiltin<"__builtin_ia32_fpclasspd512_mask">,
-          Intrinsic<[llvm_i8_ty], [llvm_v8f64_ty, llvm_i32_ty, llvm_i8_ty],
+  def int_x86_avx512_fpclass_pd_512 :
+          Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_i32_ty],
           [IntrNoMem]>;
-  def int_x86_avx512_mask_fpclass_ps_128 :
-         GCCBuiltin<"__builtin_ia32_fpclassps128_mask">,
-          Intrinsic<[llvm_i8_ty], [llvm_v4f32_ty, llvm_i32_ty, llvm_i8_ty],
+  def int_x86_avx512_fpclass_ps_128 :
+          Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_i32_ty],
           [IntrNoMem]>;
-  def int_x86_avx512_mask_fpclass_ps_256 :
-         GCCBuiltin<"__builtin_ia32_fpclassps256_mask">,
-          Intrinsic<[llvm_i8_ty], [llvm_v8f32_ty, llvm_i32_ty, llvm_i8_ty],
+  def int_x86_avx512_fpclass_ps_256 :
+          Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_i32_ty],
           [IntrNoMem]>;
-  def int_x86_avx512_mask_fpclass_ps_512 :
-         GCCBuiltin<"__builtin_ia32_fpclassps512_mask">,
-          Intrinsic<[llvm_i16_ty], [llvm_v16f32_ty, llvm_i32_ty, llvm_i16_ty],
+  def int_x86_avx512_fpclass_ps_512 :
+          Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_i32_ty],
           [IntrNoMem]>;
   def int_x86_avx512_mask_fpclass_sd :
          GCCBuiltin<"__builtin_ia32_fpclasssd_mask">,
@@ -1606,11 +1332,6 @@
         GCCBuiltin<"__builtin_ia32_maskstoreps256">,
         Intrinsic<[], [llvm_ptr_ty,
                   llvm_v8i32_ty, llvm_v8f32_ty], [IntrArgMemOnly]>;
-
-  def int_x86_avx512_mask_store_ss :
-        GCCBuiltin<"__builtin_ia32_storess_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty, llvm_i8_ty],
-                  [IntrArgMemOnly]>;
 }
 
 // BITALG bits shuffle
@@ -1667,12 +1388,6 @@
   def int_x86_avx2_pmulh_w : GCCBuiltin<"__builtin_ia32_pmulhw256">,
               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
-  def int_x86_avx2_pmulu_dq : GCCBuiltin<"__builtin_ia32_pmuludq256">,
-              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
-                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
-  def int_x86_avx2_pmul_dq : GCCBuiltin<"__builtin_ia32_pmuldq256">,
-              Intrinsic<[llvm_v4i64_ty], [llvm_v8i32_ty,
-                         llvm_v8i32_ty], [IntrNoMem, Commutative]>;
   def int_x86_avx2_pmadd_wd : GCCBuiltin<"__builtin_ia32_pmaddwd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v16i16_ty,
                          llvm_v16i16_ty], [IntrNoMem, Commutative]>;
@@ -2025,81 +1740,81 @@
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty],
                         [IntrNoMem]>;
 
-  def int_x86_avx512_mask_prorv_d_128 : GCCBuiltin<"__builtin_ia32_prorvd128_mask">,
+  def int_x86_avx512_prorv_d_128 : GCCBuiltin<"__builtin_ia32_prorvd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prorv_d_256 : GCCBuiltin<"__builtin_ia32_prorvd256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prorv_d_256 : GCCBuiltin<"__builtin_ia32_prorvd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prorv_d_512 : GCCBuiltin<"__builtin_ia32_prorvd512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prorv_d_512 : GCCBuiltin<"__builtin_ia32_prorvd512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prorv_q_128 : GCCBuiltin<"__builtin_ia32_prorvq128_mask">,
+                         llvm_v16i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prorv_q_128 : GCCBuiltin<"__builtin_ia32_prorvq128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prorv_q_256 : GCCBuiltin<"__builtin_ia32_prorvq256_mask">,
+                         llvm_v2i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_prorv_q_256 : GCCBuiltin<"__builtin_ia32_prorvq256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prorv_q_512 : GCCBuiltin<"__builtin_ia32_prorvq512_mask">,
+                         llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_prorv_q_512 : GCCBuiltin<"__builtin_ia32_prorvq512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v8i64_ty], [IntrNoMem]>;
 
-   def int_x86_avx512_mask_prol_d_128 : GCCBuiltin<"__builtin_ia32_prold128_mask">,
+   def int_x86_avx512_prol_d_128 : GCCBuiltin<"__builtin_ia32_prold128">,
               Intrinsic<[llvm_v4i32_ty] , [llvm_v4i32_ty,
-                         llvm_i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prol_d_256 : GCCBuiltin<"__builtin_ia32_prold256_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prol_d_256 : GCCBuiltin<"__builtin_ia32_prold256">,
               Intrinsic<[llvm_v8i32_ty] , [llvm_v8i32_ty,
-                         llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prol_d_512 : GCCBuiltin<"__builtin_ia32_prold512_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prol_d_512 : GCCBuiltin<"__builtin_ia32_prold512">,
               Intrinsic<[llvm_v16i32_ty] , [llvm_v16i32_ty,
-                         llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prol_q_128 : GCCBuiltin<"__builtin_ia32_prolq128_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prol_q_128 : GCCBuiltin<"__builtin_ia32_prolq128">,
               Intrinsic<[llvm_v2i64_ty] , [llvm_v2i64_ty,
-                         llvm_i32_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prol_q_256 : GCCBuiltin<"__builtin_ia32_prolq256_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prol_q_256 : GCCBuiltin<"__builtin_ia32_prolq256">,
               Intrinsic<[llvm_v4i64_ty] , [llvm_v4i64_ty,
-                         llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prol_q_512 : GCCBuiltin<"__builtin_ia32_prolq512_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prol_q_512 : GCCBuiltin<"__builtin_ia32_prolq512">,
               Intrinsic<[llvm_v8i64_ty] , [llvm_v8i64_ty,
-                         llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem]>;
 
 
-  def int_x86_avx512_mask_prolv_d_128 : GCCBuiltin<"__builtin_ia32_prolvd128_mask">,
+  def int_x86_avx512_prolv_d_128 : GCCBuiltin<"__builtin_ia32_prolvd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prolv_d_256 : GCCBuiltin<"__builtin_ia32_prolvd256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prolv_d_256 : GCCBuiltin<"__builtin_ia32_prolvd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prolv_d_512 : GCCBuiltin<"__builtin_ia32_prolvd512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prolv_d_512 : GCCBuiltin<"__builtin_ia32_prolvd512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prolv_q_128 : GCCBuiltin<"__builtin_ia32_prolvq128_mask">,
+                         llvm_v16i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_prolv_q_128 : GCCBuiltin<"__builtin_ia32_prolvq128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prolv_q_256 : GCCBuiltin<"__builtin_ia32_prolvq256_mask">,
+                         llvm_v2i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_prolv_q_256 : GCCBuiltin<"__builtin_ia32_prolvq256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_prolv_q_512 : GCCBuiltin<"__builtin_ia32_prolvq512_mask">,
+                         llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_prolv_q_512 : GCCBuiltin<"__builtin_ia32_prolvq512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_d_128 : GCCBuiltin<"__builtin_ia32_prord128_mask">,
+                         llvm_v8i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_d_128 : GCCBuiltin<"__builtin_ia32_prord128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty,
-                         llvm_i32_ty, llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_d_256 : GCCBuiltin<"__builtin_ia32_prord256_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_d_256 : GCCBuiltin<"__builtin_ia32_prord256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
-                         llvm_i32_ty, llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_d_512 : GCCBuiltin<"__builtin_ia32_prord512_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_d_512 : GCCBuiltin<"__builtin_ia32_prord512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
-                         llvm_i32_ty, llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_q_128 : GCCBuiltin<"__builtin_ia32_prorq128_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_q_128 : GCCBuiltin<"__builtin_ia32_prorq128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty,
-                         llvm_i32_ty, llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_q_256 : GCCBuiltin<"__builtin_ia32_prorq256_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_q_256 : GCCBuiltin<"__builtin_ia32_prorq256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
-                         llvm_i32_ty, llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_pror_q_512 : GCCBuiltin<"__builtin_ia32_prorq512_mask">,
+                         llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_pror_q_512 : GCCBuiltin<"__builtin_ia32_prorq512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
-                         llvm_i32_ty, llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_i32_ty], [IntrNoMem]>;
 
 }
 
@@ -2188,754 +1903,115 @@
 // FMA3 and FMA4
 
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_fma_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss3">,
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd3">,
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma4_vfmadd_ss : GCCBuiltin<"__builtin_ia32_vfmaddss">,
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma4_vfmadd_sd : GCCBuiltin<"__builtin_ia32_vfmaddsd">,
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmadd_ps : GCCBuiltin<"__builtin_ia32_vfmaddps">,
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmadd_pd : GCCBuiltin<"__builtin_ia32_vfmaddpd">,
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmadd_ps_256 : GCCBuiltin<"__builtin_ia32_vfmaddps256">,
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmadd_pd_256 : GCCBuiltin<"__builtin_ia32_vfmaddpd256">,
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-
-  def int_x86_fma_vfmsub_ss : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsub_sd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsub_ps : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsub_pd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsub_ps_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsub_pd_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_ss : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_sd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_ps : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_pd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_ps_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmadd_pd_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_ss : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_sd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_ps : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_pd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_ps_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfnmsub_pd_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmaddsub_ps : GCCBuiltin<"__builtin_ia32_vfmaddsubps">,
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmaddsub_pd : GCCBuiltin<"__builtin_ia32_vfmaddsubpd">,
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmaddsub_ps_256 :
-               GCCBuiltin<"__builtin_ia32_vfmaddsubps256">,
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmaddsub_pd_256 :
-              GCCBuiltin<"__builtin_ia32_vfmaddsubpd256">,
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsubadd_ps : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f32_ty],
-                        [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsubadd_pd : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v2f64_ty],
-                        [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsubadd_ps_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v8f32_ty],
-                        [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty],
-                        [IntrNoMem]>;
-  def int_x86_fma_vfmsubadd_pd_256 : // TODO: remove this intrinsic
-              Intrinsic<[llvm_v4f64_ty],
-                        [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty],
-                        [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd128_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd128_maskz">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd256_mask3">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd256_maskz">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask">,
+  def int_x86_avx512_vfmadd_pd_512 :
           Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
+          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty],
+          [IntrNoMem]>;
 
-  def int_x86_avx512_mask3_vfmadd_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd512_mask3">,
+  def int_x86_avx512_vfmadd_ps_512 :
+          Intrinsic<[llvm_v16f32_ty],
+          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty],
+          [IntrNoMem]>;
+
+  // TODO: Can we use 2 vfmadds+shufflevector?
+  def int_x86_avx512_vfmaddsub_pd_512 :
           Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddpd512_maskz">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
+          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty, llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask3_vfmadd_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps128_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps128_maskz">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps256_mask3">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps256_maskz">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps512_mask">,
+  def int_x86_avx512_vfmaddsub_ps_512 :
           Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps512_mask3">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddps512_maskz">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
+          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty, llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask3_vfmaddsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
+  def int_x86_avx512_vfmadd_f64 :
+          Intrinsic<[llvm_double_ty],
+                    [llvm_double_ty, llvm_double_ty, llvm_double_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
+  def int_x86_avx512_vfmadd_f32 :
+          Intrinsic<[llvm_float_ty],
+                    [llvm_float_ty, llvm_float_ty, llvm_float_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_vfmaddsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd128_maskz">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmaddsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_mask3">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmaddsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd256_maskz">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmaddsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_mask3">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmaddsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubpd512_maskz">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmaddsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmaddsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps128_maskz">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmaddsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_mask3">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmaddsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps256_maskz">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmaddsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmaddsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_mask3">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmaddsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmaddsubps512_maskz">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-
-  def int_x86_avx512_mask_vfmadd_sd :
-         GCCBuiltin<"__builtin_ia32_vfmaddsd3_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfmadd_ss :
-         GCCBuiltin<"__builtin_ia32_vfmaddss3_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_sd :
-         GCCBuiltin<"__builtin_ia32_vfmaddsd3_maskz">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_vfmadd_ss :
-         GCCBuiltin<"__builtin_ia32_vfmaddss3_maskz">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_sd :
-         GCCBuiltin<"__builtin_ia32_vfmaddsd3_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmadd_ss :
-         GCCBuiltin<"__builtin_ia32_vfmaddss3_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_sd :
-         GCCBuiltin<"__builtin_ia32_vfmsubsd3_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_ss :
-         GCCBuiltin<"__builtin_ia32_vfmsubss3_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmsubpd128_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmsubpd256_mask3">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmsubpd512_mask3">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmsubps128_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmsubps256_mask3">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmsubps512_mask3">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddpd128_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddpd256_mask3">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddpd512_mask3">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddps128_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddps256_mask3">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfmsubadd_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfmsubaddps512_mask3">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddpd512_mask">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmadd_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmaddps512_mask">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_sd :
-         GCCBuiltin<"__builtin_ia32_vfnmsubsd3_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_ss :
-         GCCBuiltin<"__builtin_ia32_vfnmsubss3_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_pd_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd128_mask3">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_pd_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd256_mask3">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f64_ty, llvm_v4f64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_pd_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubpd512_mask3">,
-          Intrinsic<[llvm_v8f64_ty],
-          [llvm_v8f64_ty, llvm_v8f64_ty, llvm_v8f64_ty,  llvm_i8_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_ps_128 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps128_mask3">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_ps_256 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps256_mask3">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8f32_ty, llvm_v8f32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vfnmsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask3_vfnmsub_ps_512 :
-         GCCBuiltin<"__builtin_ia32_vfnmsubps512_mask3">,
-          Intrinsic<[llvm_v16f32_ty],
-          [llvm_v16f32_ty, llvm_v16f32_ty, llvm_v16f32_ty,  llvm_i16_ty,
-          llvm_i32_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_vpmadd52h_uq_128 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq128_mask">,
+  def int_x86_avx512_vpmadd52h_uq_128 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52huq128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52h_uq_128 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq128_maskz">,
+                         llvm_v2i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpmadd52l_uq_128 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52luq128">,
               Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpmadd52l_uq_128 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq128_mask">,
-              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52l_uq_128 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq128_maskz">,
-              Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
-                         llvm_v2i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpmadd52h_uq_256 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq256_mask">,
+                         llvm_v2i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpmadd52h_uq_256 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52huq256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52h_uq_256 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq256_maskz">,
+                         llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpmadd52l_uq_256 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52luq256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpmadd52l_uq_256 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq256_mask">,
-              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52l_uq_256 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq256_maskz">,
-              Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty, llvm_v4i64_ty,
-                         llvm_v4i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpmadd52h_uq_512 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq512_mask">,
+                         llvm_v4i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpmadd52h_uq_512 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52huq512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52h_uq_512 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52huq512_maskz">,
+                         llvm_v8i64_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpmadd52l_uq_512 :
+              GCCBuiltin<"__builtin_ia32_vpmadd52luq512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpmadd52l_uq_512 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq512_mask">,
-              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpmadd52l_uq_512 :
-              GCCBuiltin<"__builtin_ia32_vpmadd52luq512_maskz">,
-              Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty, llvm_v8i64_ty,
-                         llvm_v8i64_ty, llvm_i8_ty], [IntrNoMem]>;
+                         llvm_v8i64_ty], [IntrNoMem]>;
 }
 
 // VNNI
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_avx512_mask_vpdpbusd_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd128_mask">,
+  def int_x86_avx512_vpdpbusd_128 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusd_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd128_maskz">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpbusd_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpbusd_256 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusd_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd256_maskz">,
-              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpbusd_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpbusd_512 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusd512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusd_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusd512_maskz">,
-              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
+                         llvm_v16i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpdpbusds_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds128_mask">,
+  def int_x86_avx512_vpdpbusds_128 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusds128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusds_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds128_maskz">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpbusds_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpbusds_256 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusds256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusds_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds256_maskz">,
-              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpbusds_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpbusds_512 :
+              GCCBuiltin<"__builtin_ia32_vpdpbusds512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpbusds_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpbusds512_maskz">,
-              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
+                         llvm_v16i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpdpwssd_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd128_mask">,
+  def int_x86_avx512_vpdpwssd_128 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssd128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssd_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd128_maskz">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpwssd_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpwssd_256 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssd256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssd_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd256_maskz">,
-              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpwssd_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpwssd_512 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssd512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssd_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssd512_maskz">,
-              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
+                         llvm_v16i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpdpwssds_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds128_mask">,
+  def int_x86_avx512_vpdpwssds_128 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssds128">,
               Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssds_128 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds128_maskz">,
-              Intrinsic<[llvm_v4i32_ty], [llvm_v4i32_ty, llvm_v4i32_ty,
-                         llvm_v4i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpwssds_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds256_mask">,
+                         llvm_v4i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpwssds_256 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssds256">,
               Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssds_256 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds256_maskz">,
-              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty, llvm_v8i32_ty,
-                         llvm_v8i32_ty, llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpdpwssds_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds512_mask">,
+                         llvm_v8i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpdpwssds_512 :
+              GCCBuiltin<"__builtin_ia32_vpdpwssds512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_maskz_vpdpwssds_512 :
-              GCCBuiltin<"__builtin_ia32_vpdpwssds512_maskz">,
-              Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
-                         llvm_v16i32_ty, llvm_i16_ty], [IntrNoMem]>;
+                         llvm_v16i32_ty], [IntrNoMem]>;
 }
 
 //===----------------------------------------------------------------------===//
@@ -3383,48 +2459,42 @@
 }
 // Permute
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_avx512_mask_permvar_df_256 : GCCBuiltin<"__builtin_ia32_permvardf256_mask">,
+  def int_x86_avx512_permvar_df_256 : GCCBuiltin<"__builtin_ia32_permvardf256">,
               Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty,
-                        llvm_v4i64_ty, llvm_v4f64_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_df_512 : GCCBuiltin<"__builtin_ia32_permvardf512_mask">,
+                        llvm_v4i64_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_df_512 : GCCBuiltin<"__builtin_ia32_permvardf512">,
               Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty,
-                        llvm_v8i64_ty, llvm_v8f64_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_di_256 : GCCBuiltin<"__builtin_ia32_permvardi256_mask">,
+                        llvm_v8i64_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_di_256 : GCCBuiltin<"__builtin_ia32_permvardi256">,
               Intrinsic<[llvm_v4i64_ty], [llvm_v4i64_ty,
-                        llvm_v4i64_ty, llvm_v4i64_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_di_512 : GCCBuiltin<"__builtin_ia32_permvardi512_mask">,
+                        llvm_v4i64_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_di_512 : GCCBuiltin<"__builtin_ia32_permvardi512">,
               Intrinsic<[llvm_v8i64_ty], [llvm_v8i64_ty,
-                        llvm_v8i64_ty, llvm_v8i64_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_hi_128 : GCCBuiltin<"__builtin_ia32_permvarhi128_mask">,
+                        llvm_v8i64_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_hi_128 : GCCBuiltin<"__builtin_ia32_permvarhi128">,
               Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty,
-                        llvm_v8i16_ty, llvm_v8i16_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_hi_256 : GCCBuiltin<"__builtin_ia32_permvarhi256_mask">,
+                        llvm_v8i16_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_hi_256 : GCCBuiltin<"__builtin_ia32_permvarhi256">,
               Intrinsic<[llvm_v16i16_ty], [llvm_v16i16_ty,
-                        llvm_v16i16_ty, llvm_v16i16_ty, llvm_i16_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_hi_512 : GCCBuiltin<"__builtin_ia32_permvarhi512_mask">,
+                        llvm_v16i16_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_hi_512 : GCCBuiltin<"__builtin_ia32_permvarhi512">,
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
-                        llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_qi_128 : GCCBuiltin<"__builtin_ia32_permvarqi128_mask">,
+                        llvm_v32i16_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_qi_128 : GCCBuiltin<"__builtin_ia32_permvarqi128">,
               Intrinsic<[llvm_v16i8_ty], [llvm_v16i8_ty,
-                        llvm_v16i8_ty, llvm_v16i8_ty, llvm_i16_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_qi_256 : GCCBuiltin<"__builtin_ia32_permvarqi256_mask">,
+                        llvm_v16i8_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_qi_256 : GCCBuiltin<"__builtin_ia32_permvarqi256">,
               Intrinsic<[llvm_v32i8_ty], [llvm_v32i8_ty,
-                        llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_qi_512 : GCCBuiltin<"__builtin_ia32_permvarqi512_mask">,
+                        llvm_v32i8_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_qi_512 : GCCBuiltin<"__builtin_ia32_permvarqi512">,
               Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty,
-                        llvm_v64i8_ty, llvm_v64i8_ty, llvm_i64_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_sf_256 : // TODO: Remove this intrinsic
-              Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty,
-                        llvm_v8i32_ty, llvm_v8f32_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_sf_512 : GCCBuiltin<"__builtin_ia32_permvarsf512_mask">,
+                        llvm_v64i8_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_sf_512 : GCCBuiltin<"__builtin_ia32_permvarsf512">,
               Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty,
-                        llvm_v16i32_ty, llvm_v16f32_ty, llvm_i16_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_si_256 : // TODO: Remove this intrinsic
-              Intrinsic<[llvm_v8i32_ty], [llvm_v8i32_ty,
-                        llvm_v8i32_ty, llvm_v8i32_ty, llvm_i8_ty],  [IntrNoMem]>;
-  def int_x86_avx512_mask_permvar_si_512 : GCCBuiltin<"__builtin_ia32_permvarsi512_mask">,
+                        llvm_v16i32_ty],  [IntrNoMem]>;
+  def int_x86_avx512_permvar_si_512 : GCCBuiltin<"__builtin_ia32_permvarsi512">,
               Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty,
-                        llvm_v16i32_ty, llvm_v16i32_ty, llvm_i16_ty],  [IntrNoMem]>;
+                        llvm_v16i32_ty],  [IntrNoMem]>;
 }
 // Pack ops.
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
@@ -3741,9 +2811,6 @@
               Intrinsic<[llvm_i32_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
   def int_x86_avx512_cvttsd2usi64 : GCCBuiltin<"__builtin_ia32_vcvttsd2usi64">,
               Intrinsic<[llvm_i64_ty], [llvm_v2f64_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_cvtusi2sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd32">,
-              Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
-                         llvm_i32_ty], [IntrNoMem]>;
   def int_x86_avx512_cvtusi642sd : GCCBuiltin<"__builtin_ia32_cvtusi2sd64">,
               Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty,
                          llvm_i64_ty, llvm_i32_ty], [IntrNoMem]>;
@@ -3792,16 +2859,6 @@
 
 // Vector convert
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_avx512_mask_cvtdq2ps_128 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvtdq2ps_256 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtdq2ps_512 :
         GCCBuiltin<"__builtin_ia32_cvtdq2ps512_mask">,
           Intrinsic<[llvm_v16f32_ty],
@@ -3814,22 +2871,12 @@
           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtpd2dq_256 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtpd2dq_512 :
         GCCBuiltin<"__builtin_ia32_cvtpd2dq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
           [llvm_v8f64_ty, llvm_v8i32_ty,  llvm_i8_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtpd2ps_256 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4f64_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtpd2ps_512 :
         GCCBuiltin<"__builtin_ia32_cvtpd2ps512_mask">,
           Intrinsic<[llvm_v8f32_ty],
@@ -3926,16 +2973,6 @@
           [llvm_v16f32_ty, llvm_v16i32_ty,  llvm_i16_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtps2pd_128 : // FIXME: remove this intrinsic
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v4f32_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvtps2pd_256 : // FIXME: remove this intrinsic
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4f32_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtps2pd_512 :
         GCCBuiltin<"__builtin_ia32_cvtps2pd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
@@ -3996,18 +3033,6 @@
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtqq2pd_128 :
-        GCCBuiltin<"__builtin_ia32_cvtqq2pd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvtqq2pd_256 :
-        GCCBuiltin<"__builtin_ia32_cvtqq2pd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtqq2pd_512 :
         GCCBuiltin<"__builtin_ia32_cvtqq2pd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
@@ -4038,11 +3063,6 @@
           [llvm_v2f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvttpd2dq_256 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v4f64_ty, llvm_v4i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvttpd2dq_512 :
         GCCBuiltin<"__builtin_ia32_cvttpd2dq512_mask">,
           Intrinsic<[llvm_v8i32_ty],
@@ -4103,16 +3123,6 @@
           [llvm_v8f64_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvttps2dq_128 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v4f32_ty, llvm_v4i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvttps2dq_256 : // TODO: remove this intrinsic
-          Intrinsic<[llvm_v8i32_ty],
-          [llvm_v8f32_ty, llvm_v8i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvttps2dq_512 :
         GCCBuiltin<"__builtin_ia32_cvttps2dq512_mask">,
           Intrinsic<[llvm_v16i32_ty],
@@ -4173,36 +3183,12 @@
           [llvm_v8f32_ty, llvm_v8i64_ty,  llvm_i8_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtudq2ps_128 :
-        GCCBuiltin<"__builtin_ia32_cvtudq2ps128_mask">,
-          Intrinsic<[llvm_v4f32_ty],
-          [llvm_v4i32_ty, llvm_v4f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvtudq2ps_256 :
-        GCCBuiltin<"__builtin_ia32_cvtudq2ps256_mask">,
-          Intrinsic<[llvm_v8f32_ty],
-          [llvm_v8i32_ty, llvm_v8f32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtudq2ps_512 :
         GCCBuiltin<"__builtin_ia32_cvtudq2ps512_mask">,
           Intrinsic<[llvm_v16f32_ty],
           [llvm_v16i32_ty, llvm_v16f32_ty,  llvm_i16_ty,  llvm_i32_ty],
           [IntrNoMem]>;
 
-  def int_x86_avx512_mask_cvtuqq2pd_128 :
-        GCCBuiltin<"__builtin_ia32_cvtuqq2pd128_mask">,
-          Intrinsic<[llvm_v2f64_ty],
-          [llvm_v2i64_ty, llvm_v2f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_cvtuqq2pd_256 :
-        GCCBuiltin<"__builtin_ia32_cvtuqq2pd256_mask">,
-          Intrinsic<[llvm_v4f64_ty],
-          [llvm_v4i64_ty, llvm_v4f64_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-
   def int_x86_avx512_mask_cvtuqq2pd_512 :
         GCCBuiltin<"__builtin_ia32_cvtuqq2pd512_mask">,
           Intrinsic<[llvm_v8f64_ty],
@@ -4285,13 +3271,6 @@
 
 // Vector load with broadcast
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  // TODO: Remove the broadcast intrinsics with no gcc builtin and autoupgrade
-  def int_x86_avx512_vbroadcast_ss_512 :
-        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
-
-  def int_x86_avx512_vbroadcast_sd_512 :
-        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty], [IntrReadMem, IntrArgMemOnly]>;
-
    def int_x86_avx512_broadcastmw_512 :
           GCCBuiltin<"__builtin_ia32_broadcastmw512">,
           Intrinsic<[llvm_v16i32_ty], [llvm_i16_ty], [IntrNoMem]>;
@@ -4315,42 +3294,43 @@
 // Arithmetic ops
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
 
-  def int_x86_avx512_mask_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512_mask">,
+  def int_x86_avx512_add_ps_512 : GCCBuiltin<"__builtin_ia32_addps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_add_pd_512 : GCCBuiltin<"__builtin_ia32_addpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_sub_ps_512 : GCCBuiltin<"__builtin_ia32_subps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_sub_pd_512 : GCCBuiltin<"__builtin_ia32_subpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_mul_ps_512 : GCCBuiltin<"__builtin_ia32_mulps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_mul_pd_512 : GCCBuiltin<"__builtin_ia32_mulpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_div_ps_512 : GCCBuiltin<"__builtin_ia32_divps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_div_pd_512 : GCCBuiltin<"__builtin_ia32_divpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+
+  def int_x86_avx512_max_ps_512 : GCCBuiltin<"__builtin_ia32_maxps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_max_pd_512 : GCCBuiltin<"__builtin_ia32_maxpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_min_ps_512 : GCCBuiltin<"__builtin_ia32_minps512">,
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512_mask">,
+                     llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_min_pd_512 : GCCBuiltin<"__builtin_ia32_minpd512">,
           Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                     llvm_v8f64_ty, llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
+                     llvm_i32_ty], [IntrNoMem]>;
 
   def int_x86_avx512_mask_add_ss_round : GCCBuiltin<"__builtin_ia32_addss_round_mask">,
           Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
@@ -4438,31 +3418,17 @@
           Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
                     llvm_v16f32_ty, llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_sqrt_ss : GCCBuiltin<"__builtin_ia32_sqrtss_round_mask">,
+  def int_x86_avx512_mask_sqrt_ss :
         Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty, llvm_v4f32_ty,
                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_sd : GCCBuiltin<"__builtin_ia32_sqrtsd_round_mask">,
+  def int_x86_avx512_mask_sqrt_sd :
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty, llvm_v2f64_ty,
                                     llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_sqrt_pd_128 : GCCBuiltin<"__builtin_ia32_sqrtpd128_mask">,
-        Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
-                                    llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_pd_256 : GCCBuiltin<"__builtin_ia32_sqrtpd256_mask">,
-        Intrinsic<[llvm_v4f64_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
-                                    llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_pd_512 : GCCBuiltin<"__builtin_ia32_sqrtpd512_mask">,
-        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
-                                    llvm_i8_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_ps_128 : GCCBuiltin<"__builtin_ia32_sqrtps128_mask">,
-        Intrinsic<[llvm_v4f32_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
-                                     llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_ps_256 : GCCBuiltin<"__builtin_ia32_sqrtps256_mask">,
-        Intrinsic<[llvm_v8f32_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
-                                     llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_sqrt_ps_512 : GCCBuiltin<"__builtin_ia32_sqrtps512_mask">,
-        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
-                                     llvm_i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_sqrt_pd_512 :
+        Intrinsic<[llvm_v8f64_ty], [llvm_v8f64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_sqrt_ps_512 :
+        Intrinsic<[llvm_v16f32_ty], [llvm_v16f32_ty, llvm_i32_ty], [IntrNoMem]>;
   def int_x86_avx512_mask_fixupimm_pd_128 :
          GCCBuiltin<"__builtin_ia32_fixupimmpd128_mask">,
           Intrinsic<[llvm_v2f64_ty],
@@ -4783,60 +3749,33 @@
   def int_x86_avx512_mask_psubus_w_512 : GCCBuiltin<"__builtin_ia32_psubusw512_mask">,
           Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty, llvm_v32i16_ty,
                      llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_pmulu_dq_512 : GCCBuiltin<"__builtin_ia32_pmuludq512">,
-              Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_pmul_dq_512 : GCCBuiltin<"__builtin_ia32_pmuldq512">,
-              Intrinsic<[llvm_v8i64_ty], [llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
   def int_x86_avx512_pmulhu_w_512 : GCCBuiltin<"__builtin_ia32_pmulhuw512">,
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
                          llvm_v32i16_ty], [IntrNoMem, Commutative]>;
   def int_x86_avx512_pmulh_w_512 : GCCBuiltin<"__builtin_ia32_pmulhw512">,
               Intrinsic<[llvm_v32i16_ty], [llvm_v32i16_ty,
                          llvm_v32i16_ty], [IntrNoMem, Commutative]>;
-  def int_x86_avx512_mask_pmaddw_d_128 : // FIXME: remove this intrinsic
-          Intrinsic<[llvm_v4i32_ty],
-          [llvm_v8i16_ty, llvm_v8i16_ty, llvm_v4i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-  def int_x86_avx512_mask_pmaddw_d_256 : // FIXME: remove this intrinsic
-          Intrinsic<[llvm_v8i32_ty],
-          [llvm_v16i16_ty, llvm_v16i16_ty, llvm_v8i32_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-  def int_x86_avx512_mask_pmaddw_d_512 :
-         GCCBuiltin<"__builtin_ia32_pmaddwd512_mask">,
-          Intrinsic<[llvm_v16i32_ty],
-          [llvm_v32i16_ty, llvm_v32i16_ty, llvm_v16i32_ty,  llvm_i16_ty],
-          [IntrNoMem]>;
-  def int_x86_avx512_mask_pmaddubs_w_128 : // FIXME: remove this intrinsic
+  def int_x86_avx512_pmaddw_d_512 : GCCBuiltin<"__builtin_ia32_pmaddwd512">,
+              Intrinsic<[llvm_v16i32_ty], [llvm_v32i16_ty,
+                         llvm_v32i16_ty], [IntrNoMem, Commutative]>;
+  def int_x86_avx512_pmaddubs_w_512 : GCCBuiltin<"__builtin_ia32_pmaddubsw512">,
+              Intrinsic<[llvm_v32i16_ty], [llvm_v64i8_ty,
+                         llvm_v64i8_ty], [IntrNoMem]>;
+
+  def int_x86_avx512_dbpsadbw_128 :
+         GCCBuiltin<"__builtin_ia32_dbpsadbw128">,
           Intrinsic<[llvm_v8i16_ty],
-          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_v8i16_ty,  llvm_i8_ty],
-          [IntrNoMem]>;
-  def int_x86_avx512_mask_pmaddubs_w_256 : // FIXME: remove this intrinsic
+                    [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty], [IntrNoMem]>;
+
+  def int_x86_avx512_dbpsadbw_256 :
+         GCCBuiltin<"__builtin_ia32_dbpsadbw256">,
           Intrinsic<[llvm_v16i16_ty],
-          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_v16i16_ty,  llvm_i16_ty],
-          [IntrNoMem]>;
-  def int_x86_avx512_mask_pmaddubs_w_512 :
-         GCCBuiltin<"__builtin_ia32_pmaddubsw512_mask">,
+                    [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty], [IntrNoMem]>;
+
+  def int_x86_avx512_dbpsadbw_512 :
+         GCCBuiltin<"__builtin_ia32_dbpsadbw512">,
           Intrinsic<[llvm_v32i16_ty],
-          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_v32i16_ty,  llvm_i32_ty],
-          [IntrNoMem]>;
-
-  def int_x86_avx512_mask_dbpsadbw_128 :
-         GCCBuiltin<"__builtin_ia32_dbpsadbw128_mask">,
-          Intrinsic<[llvm_v8i16_ty],
-          [llvm_v16i8_ty, llvm_v16i8_ty, llvm_i32_ty, llvm_v8i16_ty,
-           llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_dbpsadbw_256 :
-         GCCBuiltin<"__builtin_ia32_dbpsadbw256_mask">,
-          Intrinsic<[llvm_v16i16_ty],
-          [llvm_v32i8_ty, llvm_v32i8_ty, llvm_i32_ty, llvm_v16i16_ty,
-           llvm_i16_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_dbpsadbw_512 :
-         GCCBuiltin<"__builtin_ia32_dbpsadbw512_mask">,
-          Intrinsic<[llvm_v32i16_ty],
-          [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty, llvm_v32i16_ty,
-           llvm_i32_ty], [IntrNoMem]>;
+                    [llvm_v64i8_ty, llvm_v64i8_ty, llvm_i32_ty], [IntrNoMem]>;
 }
 
 // Gather and Scatter ops
@@ -5207,31 +4146,6 @@
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                    llvm_i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_compress_store_ps_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresf512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v16f32_ty,
-                   llvm_i16_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_pd_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredf512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v8f64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_ps_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresf256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v8f32_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_pd_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredf256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v4f64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_ps_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresf128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v4f32_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_pd_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredf128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v2f64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-
   def int_x86_avx512_mask_compress_d_512 :
                              GCCBuiltin<"__builtin_ia32_compresssi512_mask">,
         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
@@ -5257,31 +4171,6 @@
         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
                    llvm_i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_compress_store_d_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresi512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v16i32_ty,
-                   llvm_i16_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_q_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredi512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v8i64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_d_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresi256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v8i32_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_q_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredi256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v4i64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_d_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstoresi128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v4i32_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_q_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstoredi128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v2i64_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-
   def int_x86_avx512_mask_compress_b_512 :
                              GCCBuiltin<"__builtin_ia32_compressqi512_mask">,
         Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
@@ -5307,31 +4196,6 @@
         Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
                    llvm_i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_compress_store_b_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstoreqi512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v64i8_ty,
-                   llvm_i64_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_w_512 :
-                            GCCBuiltin<"__builtin_ia32_compressstorehi512_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v32i16_ty,
-                   llvm_i32_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_b_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstoreqi256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v32i8_ty,
-                   llvm_i32_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_w_256 :
-                            GCCBuiltin<"__builtin_ia32_compressstorehi256_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v16i16_ty,
-                   llvm_i16_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_b_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstoreqi128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v16i8_ty,
-                   llvm_i16_ty], [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_compress_store_w_128 :
-                            GCCBuiltin<"__builtin_ia32_compressstorehi128_mask">,
-        Intrinsic<[], [llvm_ptr_ty, llvm_v8i16_ty,
-                   llvm_i8_ty], [IntrArgMemOnly]>;
-
 // expand
   def int_x86_avx512_mask_expand_ps_512 :
                              GCCBuiltin<"__builtin_ia32_expandsf512_mask">,
@@ -5358,31 +4222,6 @@
         Intrinsic<[llvm_v2f64_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                    llvm_i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_expand_load_ps_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsf512_mask">,
-        Intrinsic<[llvm_v16f32_ty], [llvm_ptr_ty, llvm_v16f32_ty,
-                   llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_pd_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddf512_mask">,
-        Intrinsic<[llvm_v8f64_ty], [llvm_ptr_ty, llvm_v8f64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_ps_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsf256_mask">,
-        Intrinsic<[llvm_v8f32_ty], [llvm_ptr_ty, llvm_v8f32_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_pd_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddf256_mask">,
-        Intrinsic<[llvm_v4f64_ty], [llvm_ptr_ty, llvm_v4f64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_ps_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsf128_mask">,
-        Intrinsic<[llvm_v4f32_ty], [llvm_ptr_ty, llvm_v4f32_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_pd_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddf128_mask">,
-        Intrinsic<[llvm_v2f64_ty], [llvm_ptr_ty, llvm_v2f64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-
   def int_x86_avx512_mask_expand_d_512 :
                              GCCBuiltin<"__builtin_ia32_expandsi512_mask">,
         Intrinsic<[llvm_v16i32_ty], [llvm_v16i32_ty, llvm_v16i32_ty,
@@ -5408,31 +4247,6 @@
         Intrinsic<[llvm_v2i64_ty], [llvm_v2i64_ty, llvm_v2i64_ty,
                    llvm_i8_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_expand_load_d_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsi512_mask">,
-        Intrinsic<[llvm_v16i32_ty], [llvm_ptr_ty, llvm_v16i32_ty,
-                   llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_q_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddi512_mask">,
-        Intrinsic<[llvm_v8i64_ty], [llvm_ptr_ty, llvm_v8i64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_d_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsi256_mask">,
-        Intrinsic<[llvm_v8i32_ty], [llvm_ptr_ty, llvm_v8i32_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_q_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddi256_mask">,
-        Intrinsic<[llvm_v4i64_ty], [llvm_ptr_ty, llvm_v4i64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_d_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloadsi128_mask">,
-        Intrinsic<[llvm_v4i32_ty], [llvm_ptr_ty, llvm_v4i32_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_q_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloaddi128_mask">,
-        Intrinsic<[llvm_v2i64_ty], [llvm_ptr_ty, llvm_v2i64_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
-
   def int_x86_avx512_mask_expand_b_512 :
                             GCCBuiltin<"__builtin_ia32_expandqi512_mask">,
         Intrinsic<[llvm_v64i8_ty], [llvm_v64i8_ty, llvm_v64i8_ty,
@@ -5457,130 +4271,87 @@
                             GCCBuiltin<"__builtin_ia32_expandhi128_mask">,
         Intrinsic<[llvm_v8i16_ty], [llvm_v8i16_ty, llvm_v8i16_ty,
                    llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_expand_load_b_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloadqi512_mask">,
-        Intrinsic<[llvm_v64i8_ty], [llvm_ptr_ty, llvm_v64i8_ty,
-                   llvm_i64_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_w_512 :
-                            GCCBuiltin<"__builtin_ia32_expandloadhi512_mask">,
-        Intrinsic<[llvm_v32i16_ty], [llvm_ptr_ty, llvm_v32i16_ty,
-                   llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_b_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloadqi256_mask">,
-        Intrinsic<[llvm_v32i8_ty], [llvm_ptr_ty, llvm_v32i8_ty,
-                   llvm_i32_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_w_256 :
-                            GCCBuiltin<"__builtin_ia32_expandloadhi256_mask">,
-        Intrinsic<[llvm_v16i16_ty], [llvm_ptr_ty, llvm_v16i16_ty,
-                   llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_b_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloadqi128_mask">,
-        Intrinsic<[llvm_v16i8_ty], [llvm_ptr_ty, llvm_v16i8_ty,
-                   llvm_i16_ty], [IntrReadMem, IntrArgMemOnly]>;
-  def int_x86_avx512_mask_expand_load_w_128 :
-                            GCCBuiltin<"__builtin_ia32_expandloadhi128_mask">,
-        Intrinsic<[llvm_v8i16_ty], [llvm_ptr_ty, llvm_v8i16_ty,
-                   llvm_i8_ty], [IntrReadMem, IntrArgMemOnly]>;
 }
 
 // VBMI2 Concat & Shift
 let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_avx512_mask_vpshld_q_512 :
-        GCCBuiltin<"__builtin_ia32_vpshldq512_mask">,
+  def int_x86_avx512_vpshld_q_512 :
+        GCCBuiltin<"__builtin_ia32_vpshldq512">,
         Intrinsic<[llvm_v8i64_ty],
-                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_q_256 :
-        GCCBuiltin<"__builtin_ia32_vpshldq256_mask">,
+                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_q_256 :
+        GCCBuiltin<"__builtin_ia32_vpshldq256">,
         Intrinsic<[llvm_v4i64_ty],
-                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_q_128 :
-        GCCBuiltin<"__builtin_ia32_vpshldq128_mask">,
+                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_q_128 :
+        GCCBuiltin<"__builtin_ia32_vpshldq128">,
         Intrinsic<[llvm_v2i64_ty],
-                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v2i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpshld_d_512 :
-        GCCBuiltin<"__builtin_ia32_vpshldd512_mask">,
+  def int_x86_avx512_vpshld_d_512 :
+        GCCBuiltin<"__builtin_ia32_vpshldd512">,
         Intrinsic<[llvm_v16i32_ty],
-                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty,
-                   llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_d_256 :
-        GCCBuiltin<"__builtin_ia32_vpshldd256_mask">,
+                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_d_256 :
+        GCCBuiltin<"__builtin_ia32_vpshldd256">,
         Intrinsic<[llvm_v8i32_ty],
-                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_d_128 :
-        GCCBuiltin<"__builtin_ia32_vpshldd128_mask">,
+                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_d_128 :
+        GCCBuiltin<"__builtin_ia32_vpshldd128">,
         Intrinsic<[llvm_v4i32_ty],
-                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpshld_w_512 :
-        GCCBuiltin<"__builtin_ia32_vpshldw512_mask">,
+  def int_x86_avx512_vpshld_w_512 :
+        GCCBuiltin<"__builtin_ia32_vpshldw512">,
         Intrinsic<[llvm_v32i16_ty],
-                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_v32i16_ty,
-                   llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_w_256 :
-        GCCBuiltin<"__builtin_ia32_vpshldw256_mask">,
+                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_w_256 :
+        GCCBuiltin<"__builtin_ia32_vpshldw256">,
         Intrinsic<[llvm_v16i16_ty],
-                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty, llvm_v16i16_ty,
-                   llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshld_w_128 :
-        GCCBuiltin<"__builtin_ia32_vpshldw128_mask">,
+                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshld_w_128 :
+        GCCBuiltin<"__builtin_ia32_vpshldw128">,
         Intrinsic<[llvm_v8i16_ty],
-                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpshrd_q_512 :
-        GCCBuiltin<"__builtin_ia32_vpshrdq512_mask">,
+  def int_x86_avx512_vpshrd_q_512 :
+        GCCBuiltin<"__builtin_ia32_vpshrdq512">,
         Intrinsic<[llvm_v8i64_ty],
-                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty, llvm_v8i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_q_256 :
-        GCCBuiltin<"__builtin_ia32_vpshrdq256_mask">,
+                  [llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_q_256 :
+        GCCBuiltin<"__builtin_ia32_vpshrdq256">,
         Intrinsic<[llvm_v4i64_ty],
-                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty, llvm_v4i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_q_128 :
-        GCCBuiltin<"__builtin_ia32_vpshrdq128_mask">,
+                  [llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_q_128 :
+        GCCBuiltin<"__builtin_ia32_vpshrdq128">,
         Intrinsic<[llvm_v2i64_ty],
-                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty, llvm_v2i64_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpshrd_d_512 :
-        GCCBuiltin<"__builtin_ia32_vpshrdd512_mask">,
+  def int_x86_avx512_vpshrd_d_512 :
+        GCCBuiltin<"__builtin_ia32_vpshrdd512">,
         Intrinsic<[llvm_v16i32_ty],
-                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty, llvm_v16i32_ty,
-                   llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_d_256 :
-        GCCBuiltin<"__builtin_ia32_vpshrdd256_mask">,
+                  [llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_d_256 :
+        GCCBuiltin<"__builtin_ia32_vpshrdd256">,
         Intrinsic<[llvm_v8i32_ty],
-                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty, llvm_v8i32_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_d_128 :
-        GCCBuiltin<"__builtin_ia32_vpshrdd128_mask">,
+                  [llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_d_128 :
+        GCCBuiltin<"__builtin_ia32_vpshrdd128">,
         Intrinsic<[llvm_v4i32_ty],
-                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty, llvm_v4i32_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_mask_vpshrd_w_512 :
-        GCCBuiltin<"__builtin_ia32_vpshrdw512_mask">,
+  def int_x86_avx512_vpshrd_w_512 :
+        GCCBuiltin<"__builtin_ia32_vpshrdw512">,
         Intrinsic<[llvm_v32i16_ty],
-                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty, llvm_v32i16_ty,
-                   llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_w_256 :
-        GCCBuiltin<"__builtin_ia32_vpshrdw256_mask">,
+                  [llvm_v32i16_ty, llvm_v32i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_w_256 :
+        GCCBuiltin<"__builtin_ia32_vpshrdw256">,
         Intrinsic<[llvm_v16i16_ty],
-                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty, llvm_v16i16_ty,
-                   llvm_i16_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_vpshrd_w_128 :
-        GCCBuiltin<"__builtin_ia32_vpshrdw128_mask">,
+                  [llvm_v16i16_ty, llvm_v16i16_ty, llvm_i32_ty], [IntrNoMem]>;
+  def int_x86_avx512_vpshrd_w_128 :
+        GCCBuiltin<"__builtin_ia32_vpshrdw128">,
         Intrinsic<[llvm_v8i16_ty],
-                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty, llvm_v8i16_ty,
-                   llvm_i8_ty], [IntrNoMem]>;
+                  [llvm_v8i16_ty, llvm_v8i16_ty, llvm_i32_ty], [IntrNoMem]>;
 
   def int_x86_avx512_mask_vpshldv_w_128 :
         GCCBuiltin<"__builtin_ia32_vpshldvw128_mask">,
@@ -5886,7 +4657,6 @@
                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
   def int_x86_avx512_mask_pmov_qw_512 :
-          GCCBuiltin<"__builtin_ia32_pmovqw512_mask">,
           Intrinsic<[llvm_v8i16_ty],
                     [llvm_v8i64_ty, llvm_v8i16_ty, llvm_i8_ty],
                     [IntrNoMem]>;
@@ -5945,8 +4715,7 @@
           Intrinsic<[],
                     [llvm_ptr_ty, llvm_v2i64_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_pmov_qd_256 :
-          GCCBuiltin<"__builtin_ia32_pmovqd256_mask">,
+  def int_x86_avx512_mask_pmov_qd_256 : // FIXME: Replace with trunc+select.
           Intrinsic<[llvm_v4i32_ty],
                     [llvm_v4i64_ty, llvm_v4i32_ty, llvm_i8_ty],
                     [IntrNoMem]>;
@@ -5975,8 +4744,7 @@
           Intrinsic<[],
                     [llvm_ptr_ty, llvm_v4i64_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_pmov_qd_512 :
-          GCCBuiltin<"__builtin_ia32_pmovqd512_mask">,
+  def int_x86_avx512_mask_pmov_qd_512 : // FIXME: Replace with trunc+select.
           Intrinsic<[llvm_v8i32_ty],
                     [llvm_v8i64_ty, llvm_v8i32_ty, llvm_i8_ty],
                     [IntrNoMem]>;
@@ -6066,7 +4834,6 @@
                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
   def int_x86_avx512_mask_pmov_db_512 :
-          GCCBuiltin<"__builtin_ia32_pmovdb512_mask">,
           Intrinsic<[llvm_v16i8_ty],
                     [llvm_v16i32_ty, llvm_v16i8_ty, llvm_i16_ty],
                     [IntrNoMem]>;
@@ -6156,7 +4923,6 @@
                     [llvm_ptr_ty, llvm_v8i32_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
   def int_x86_avx512_mask_pmov_dw_512 :
-          GCCBuiltin<"__builtin_ia32_pmovdw512_mask">,
           Intrinsic<[llvm_v16i16_ty],
                     [llvm_v16i32_ty, llvm_v16i16_ty, llvm_i16_ty],
                     [IntrNoMem]>;
@@ -6215,8 +4981,7 @@
           Intrinsic<[],
                     [llvm_ptr_ty, llvm_v8i16_ty, llvm_i8_ty],
                     [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_pmov_wb_256 :
-          GCCBuiltin<"__builtin_ia32_pmovwb256_mask">,
+  def int_x86_avx512_mask_pmov_wb_256 : // FIXME: Replace with trunc+select.
           Intrinsic<[llvm_v16i8_ty],
                     [llvm_v16i16_ty, llvm_v16i8_ty, llvm_i16_ty],
                     [IntrNoMem]>;
@@ -6245,8 +5010,7 @@
           Intrinsic<[],
                     [llvm_ptr_ty, llvm_v16i16_ty, llvm_i16_ty],
                     [IntrArgMemOnly]>;
-  def int_x86_avx512_mask_pmov_wb_512 :
-          GCCBuiltin<"__builtin_ia32_pmovwb512_mask">,
+  def int_x86_avx512_mask_pmov_wb_512 : // FIXME: Replace with trunc+select.
           Intrinsic<[llvm_v32i8_ty],
                     [llvm_v32i16_ty, llvm_v32i8_ty, llvm_i32_ty],
                     [IntrNoMem]>;
@@ -6279,97 +5043,63 @@
 
 // Bitwise ternary logic
 let TargetPrefix = "x86" in {
-  def int_x86_avx512_mask_pternlog_d_128 :
-          GCCBuiltin<"__builtin_ia32_pternlogd128_mask">,
+  def int_x86_avx512_pternlog_d_128 :
+          GCCBuiltin<"__builtin_ia32_pternlogd128">,
           Intrinsic<[llvm_v4i32_ty],
-                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
+                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_pternlog_d_128 :
-          GCCBuiltin<"__builtin_ia32_pternlogd128_maskz">,
-          Intrinsic<[llvm_v4i32_ty],
-                    [llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_pternlog_d_256 :
-          GCCBuiltin<"__builtin_ia32_pternlogd256_mask">,
+  def int_x86_avx512_pternlog_d_256 :
+          GCCBuiltin<"__builtin_ia32_pternlogd256">,
           Intrinsic<[llvm_v8i32_ty],
-                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
+                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_pternlog_d_256 :
-          GCCBuiltin<"__builtin_ia32_pternlogd256_maskz">,
-          Intrinsic<[llvm_v8i32_ty],
-                    [llvm_v8i32_ty, llvm_v8i32_ty, llvm_v8i32_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_pternlog_d_512 :
-          GCCBuiltin<"__builtin_ia32_pternlogd512_mask">,
+  def int_x86_avx512_pternlog_d_512 :
+          GCCBuiltin<"__builtin_ia32_pternlogd512">,
           Intrinsic<[llvm_v16i32_ty],
-                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
-                     llvm_i16_ty], [IntrNoMem]>;
+                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty,
+                     llvm_i32_ty], [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_pternlog_d_512 :
-          GCCBuiltin<"__builtin_ia32_pternlogd512_maskz">,
-          Intrinsic<[llvm_v16i32_ty],
-                    [llvm_v16i32_ty, llvm_v16i32_ty, llvm_v16i32_ty, llvm_i32_ty,
-                     llvm_i16_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_pternlog_q_128 :
-          GCCBuiltin<"__builtin_ia32_pternlogq128_mask">,
+  def int_x86_avx512_pternlog_q_128 :
+          GCCBuiltin<"__builtin_ia32_pternlogq128">,
           Intrinsic<[llvm_v2i64_ty],
-                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
+                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_pternlog_q_128 :
-          GCCBuiltin<"__builtin_ia32_pternlogq128_maskz">,
-          Intrinsic<[llvm_v2i64_ty],
-                    [llvm_v2i64_ty, llvm_v2i64_ty, llvm_v2i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_pternlog_q_256 :
-          GCCBuiltin<"__builtin_ia32_pternlogq256_mask">,
+  def int_x86_avx512_pternlog_q_256 :
+          GCCBuiltin<"__builtin_ia32_pternlogq256">,
           Intrinsic<[llvm_v4i64_ty],
-                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
+                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 
-  def int_x86_avx512_maskz_pternlog_q_256 :
-          GCCBuiltin<"__builtin_ia32_pternlogq256_maskz">,
-          Intrinsic<[llvm_v4i64_ty],
-                    [llvm_v4i64_ty, llvm_v4i64_ty, llvm_v4i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_mask_pternlog_q_512 :
-          GCCBuiltin<"__builtin_ia32_pternlogq512_mask">,
+  def int_x86_avx512_pternlog_q_512 :
+          GCCBuiltin<"__builtin_ia32_pternlogq512">,
           Intrinsic<[llvm_v8i64_ty],
-                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
-
-  def int_x86_avx512_maskz_pternlog_q_512 :
-          GCCBuiltin<"__builtin_ia32_pternlogq512_maskz">,
-          Intrinsic<[llvm_v8i64_ty],
-                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty,
-                     llvm_i8_ty], [IntrNoMem]>;
+                    [llvm_v8i64_ty, llvm_v8i64_ty, llvm_v8i64_ty, llvm_i32_ty],
+                    [IntrNoMem]>;
 }
 
 // Misc.
 let TargetPrefix = "x86" in {
-  def int_x86_avx512_mask_cmp_ps_512 :
+  // NOTE: These comparison intrinsics are not used by clang as long as the
+  //       distinction in signaling behaviour is not implemented.
+  def int_x86_avx512_cmp_ps_512 :
               Intrinsic<[llvm_v16i1_ty], [llvm_v16f32_ty, llvm_v16f32_ty,
                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_cmp_pd_512 :
+  def int_x86_avx512_cmp_pd_512 :
               Intrinsic<[llvm_v8i1_ty], [llvm_v8f64_ty, llvm_v8f64_ty,
                          llvm_i32_ty, llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_cmp_ps_256 :
+  def int_x86_avx512_cmp_ps_256 :
               Intrinsic<[llvm_v8i1_ty], [llvm_v8f32_ty, llvm_v8f32_ty,
                          llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_cmp_pd_256 :
+  def int_x86_avx512_cmp_pd_256 :
               Intrinsic<[llvm_v4i1_ty], [llvm_v4f64_ty, llvm_v4f64_ty,
                          llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_cmp_ps_128 :
+  def int_x86_avx512_cmp_ps_128 :
             Intrinsic<[llvm_v4i1_ty], [llvm_v4f32_ty, llvm_v4f32_ty,
                        llvm_i32_ty], [IntrNoMem]>;
-  def int_x86_avx512_mask_cmp_pd_128 :
+  def int_x86_avx512_cmp_pd_128 :
             Intrinsic<[llvm_v2i1_ty], [llvm_v2f64_ty, llvm_v2f64_ty,
                        llvm_i32_ty], [IntrNoMem]>;
 
@@ -6421,3 +5151,65 @@
   def int_x86_clzero : GCCBuiltin<"__builtin_ia32_clzero">,
       Intrinsic<[], [llvm_ptr_ty], []>;
 }
+
+//===----------------------------------------------------------------------===//
+// Cache write back intrinsics
+
+let TargetPrefix = "x86" in {
+  // Write back and invalidate
+  def int_x86_wbinvd : GCCBuiltin<"__builtin_ia32_wbinvd">,
+      Intrinsic<[], [], []>;
+
+  // Write back no-invalidate
+  def int_x86_wbnoinvd : GCCBuiltin<"__builtin_ia32_wbnoinvd">,
+      Intrinsic<[], [], []>;
+}
+
+//===----------------------------------------------------------------------===//
+// Cache-line demote
+
+let TargetPrefix = "x86" in {
+  def int_x86_cldemote : GCCBuiltin<"__builtin_ia32_cldemote">,
+      Intrinsic<[], [llvm_ptr_ty], []>;
+}
+
+//===----------------------------------------------------------------------===//
+// Wait and pause enhancements
+let TargetPrefix = "x86" in {
+  def int_x86_umonitor : GCCBuiltin<"__builtin_ia32_umonitor">,
+              Intrinsic<[], [llvm_ptr_ty], []>;
+  def int_x86_umwait : GCCBuiltin<"__builtin_ia32_umwait">,
+              Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+  def int_x86_tpause : GCCBuiltin<"__builtin_ia32_tpause">,
+              Intrinsic<[llvm_i8_ty], [llvm_i32_ty, llvm_i32_ty, llvm_i32_ty], []>;
+}
+
+//===----------------------------------------------------------------------===//
+// Direct Move Instructions
+
+let TargetPrefix = "x86" in {
+  def int_x86_directstore32 : GCCBuiltin<"__builtin_ia32_directstore_u32">,
+      Intrinsic<[], [llvm_ptr_ty, llvm_i32_ty], []>;
+  def int_x86_directstore64 : GCCBuiltin<"__builtin_ia32_directstore_u64">,
+      Intrinsic<[], [llvm_ptr_ty, llvm_i64_ty], []>;
+  def int_x86_movdir64b : GCCBuiltin<"__builtin_ia32_movdir64b">,
+      Intrinsic<[], [llvm_ptr_ty, llvm_ptr_ty], []>;
+}
+
+//===----------------------------------------------------------------------===//
+// PTWrite - Write data to processor trace pocket
+
+let TargetPrefix = "x86" in {
+  def int_x86_ptwrite32 : GCCBuiltin<"__builtin_ia32_ptwrite32">,
+              Intrinsic<[], [llvm_i32_ty], []>;
+  def int_x86_ptwrite64 : GCCBuiltin<"__builtin_ia32_ptwrite64">,
+              Intrinsic<[], [llvm_i64_ty], []>;
+}
+
+//===----------------------------------------------------------------------===//
+// INVPCID - Invalidate Process-Context Identifier
+
+let TargetPrefix = "x86" in {
+  def int_x86_invpcid : GCCBuiltin<"__builtin_ia32_invpcid">,
+              Intrinsic<[], [llvm_i32_ty, llvm_ptr_ty], []>;
+}
diff --git a/linux-x64/clang/include/llvm/IR/LLVMContext.h b/linux-x64/clang/include/llvm/IR/LLVMContext.h
index 5778b41..ebd4455 100644
--- a/linux-x64/clang/include/llvm/IR/LLVMContext.h
+++ b/linux-x64/clang/include/llvm/IR/LLVMContext.h
@@ -229,23 +229,23 @@
   /// to caller.
   std::unique_ptr<DiagnosticHandler> getDiagnosticHandler();
 
-  /// \brief Return if a code hotness metric should be included in optimization
+  /// Return if a code hotness metric should be included in optimization
   /// diagnostics.
   bool getDiagnosticsHotnessRequested() const;
-  /// \brief Set if a code hotness metric should be included in optimization
+  /// Set if a code hotness metric should be included in optimization
   /// diagnostics.
   void setDiagnosticsHotnessRequested(bool Requested);
 
-  /// \brief Return the minimum hotness value a diagnostic would need in order
+  /// Return the minimum hotness value a diagnostic would need in order
   /// to be included in optimization diagnostics. If there is no minimum, this
   /// returns None.
   uint64_t getDiagnosticsHotnessThreshold() const;
 
-  /// \brief Set the minimum hotness value a diagnostic needs in order to be
+  /// Set the minimum hotness value a diagnostic needs in order to be
   /// included in optimization diagnostics.
   void setDiagnosticsHotnessThreshold(uint64_t Threshold);
 
-  /// \brief Return the YAML file used by the backend to save optimization
+  /// Return the YAML file used by the backend to save optimization
   /// diagnostics.  If null, diagnostics are not saved in a file but only
   /// emitted via the diagnostic handler.
   yaml::Output *getDiagnosticsOutputFile();
@@ -256,11 +256,11 @@
   /// set, the handler is invoked for each diagnostic message.
   void setDiagnosticsOutputFile(std::unique_ptr<yaml::Output> F);
 
-  /// \brief Get the prefix that should be printed in front of a diagnostic of
+  /// Get the prefix that should be printed in front of a diagnostic of
   ///        the given \p Severity
   static const char *getDiagnosticMessagePrefix(DiagnosticSeverity Severity);
 
-  /// \brief Report a message to the currently installed diagnostic handler.
+  /// Report a message to the currently installed diagnostic handler.
   ///
   /// This function returns, in particular in the case of error reporting
   /// (DI.Severity == \a DS_Error), so the caller should leave the compilation
@@ -272,7 +272,7 @@
   /// "warning: " for \a DS_Warning, and "note: " for \a DS_Note.
   void diagnose(const DiagnosticInfo &DI);
 
-  /// \brief Registers a yield callback with the given context.
+  /// Registers a yield callback with the given context.
   ///
   /// The yield callback function may be called by LLVM to transfer control back
   /// to the client that invoked the LLVM compilation. This can be used to yield
@@ -291,7 +291,7 @@
   /// control to LLVM. Other LLVM contexts are unaffected by this restriction.
   void setYieldCallback(YieldCallbackTy Callback, void *OpaqueHandle);
 
-  /// \brief Calls the yield callback (if applicable).
+  /// Calls the yield callback (if applicable).
   ///
   /// This transfers control of the current thread back to the client, which may
   /// suspend the current thread. Only call this method when LLVM doesn't hold
@@ -307,7 +307,7 @@
   void emitError(const Instruction *I, const Twine &ErrorStr);
   void emitError(const Twine &ErrorStr);
 
-  /// \brief Query for a debug option's value.
+  /// Query for a debug option's value.
   ///
   /// This function returns typed data populated from command line parsing.
   template <typename ValT, typename Base, ValT(Base::*Mem)>
@@ -315,9 +315,16 @@
     return OptionRegistry::instance().template get<ValT, Base, Mem>();
   }
 
-  /// \brief Access the object which manages optimization bisection for failure
-  /// analysis.
-  OptPassGate &getOptPassGate();
+  /// Access the object which can disable optional passes and individual
+  /// optimizations at compile time.
+  OptPassGate &getOptPassGate() const;
+
+  /// Set the object which can disable optional passes and individual
+  /// optimizations at compile time.
+  ///
+  /// The lifetime of the object must be guaranteed to extend as long as the
+  /// LLVMContext is used by compilation.
+  void setOptPassGate(OptPassGate&);
 
 private:
   // Module needs access to the add/removeModule methods.
diff --git a/linux-x64/clang/include/llvm/IR/LegacyPassManagers.h b/linux-x64/clang/include/llvm/IR/LegacyPassManagers.h
index 3dc4a77..f6752f2 100644
--- a/linux-x64/clang/include/llvm/IR/LegacyPassManagers.h
+++ b/linux-x64/clang/include/llvm/IR/LegacyPassManagers.h
@@ -285,7 +285,7 @@
   SpecificBumpPtrAllocator<AUFoldingSetNode> AUFoldingSetNodeAllocator;
 
   // Maps from a pass to it's associated entry in UniqueAnalysisUsages.  Does
-  // not own the storage associated with either key or value.. 
+  // not own the storage associated with either key or value..
   DenseMap<Pass *, AnalysisUsage*> AnUsageMap;
 
   /// Collection of PassInfo objects found via analysis IDs and in this top
@@ -403,6 +403,15 @@
       InheritedAnalysis[Index++] = (*I)->getAvailableAnalysis();
   }
 
+  /// Set the initial size of the module if the user has specified that they
+  /// want remarks for size.
+  /// Returns 0 if the remark was not requested.
+  unsigned initSizeRemarkInfo(Module &M);
+
+  /// Emit a remark signifying that the number of IR instructions in the module
+  /// changed.
+  void emitInstrCountChangedRemark(Pass *P, Module &M, unsigned CountBefore);
+
 protected:
   // Top level manager.
   PMTopLevelManager *TPM;
diff --git a/linux-x64/clang/include/llvm/IR/MDBuilder.h b/linux-x64/clang/include/llvm/IR/MDBuilder.h
index d5218ea..174616c 100644
--- a/linux-x64/clang/include/llvm/IR/MDBuilder.h
+++ b/linux-x64/clang/include/llvm/IR/MDBuilder.h
@@ -38,17 +38,17 @@
 public:
   MDBuilder(LLVMContext &context) : Context(context) {}
 
-  /// \brief Return the given string as metadata.
+  /// Return the given string as metadata.
   MDString *createString(StringRef Str);
 
-  /// \brief Return the given constant as metadata.
+  /// Return the given constant as metadata.
   ConstantAsMetadata *createConstant(Constant *C);
 
   //===------------------------------------------------------------------===//
   // FPMath metadata.
   //===------------------------------------------------------------------===//
 
-  /// \brief Return metadata with the given settings.  The special value 0.0
+  /// Return metadata with the given settings.  The special value 0.0
   /// for the Accuracy parameter indicates the default (maximal precision)
   /// setting.
   MDNode *createFPMath(float Accuracy);
@@ -57,10 +57,10 @@
   // Prof metadata.
   //===------------------------------------------------------------------===//
 
-  /// \brief Return metadata containing two branch weights.
+  /// Return metadata containing two branch weights.
   MDNode *createBranchWeights(uint32_t TrueWeight, uint32_t FalseWeight);
 
-  /// \brief Return metadata containing a number of branch weights.
+  /// Return metadata containing a number of branch weights.
   MDNode *createBranchWeights(ArrayRef<uint32_t> Weights);
 
   /// Return metadata specifying that a branch or switch is unpredictable.
@@ -80,17 +80,17 @@
   // Range metadata.
   //===------------------------------------------------------------------===//
 
-  /// \brief Return metadata describing the range [Lo, Hi).
+  /// Return metadata describing the range [Lo, Hi).
   MDNode *createRange(const APInt &Lo, const APInt &Hi);
 
-  /// \brief Return metadata describing the range [Lo, Hi).
+  /// Return metadata describing the range [Lo, Hi).
   MDNode *createRange(Constant *Lo, Constant *Hi);
 
   //===------------------------------------------------------------------===//
   // Callees metadata.
   //===------------------------------------------------------------------===//
 
-  /// \brief Return metadata indicating the possible callees of indirect
+  /// Return metadata indicating the possible callees of indirect
   /// calls.
   MDNode *createCallees(ArrayRef<Function *> Callees);
 
@@ -99,28 +99,28 @@
   //===------------------------------------------------------------------===//
 
 protected:
-  /// \brief Return metadata appropriate for a AA root node (scope or TBAA).
+  /// Return metadata appropriate for a AA root node (scope or TBAA).
   /// Each returned node is distinct from all other metadata and will never
   /// be identified (uniqued) with anything else.
   MDNode *createAnonymousAARoot(StringRef Name = StringRef(),
                                 MDNode *Extra = nullptr);
 
 public:
-  /// \brief Return metadata appropriate for a TBAA root node. Each returned
+  /// Return metadata appropriate for a TBAA root node. Each returned
   /// node is distinct from all other metadata and will never be identified
   /// (uniqued) with anything else.
   MDNode *createAnonymousTBAARoot() {
     return createAnonymousAARoot();
   }
 
-  /// \brief Return metadata appropriate for an alias scope domain node.
+  /// Return metadata appropriate for an alias scope domain node.
   /// Each returned node is distinct from all other metadata and will never
   /// be identified (uniqued) with anything else.
   MDNode *createAnonymousAliasScopeDomain(StringRef Name = StringRef()) {
     return createAnonymousAARoot(Name);
   }
 
-  /// \brief Return metadata appropriate for an alias scope root node.
+  /// Return metadata appropriate for an alias scope root node.
   /// Each returned node is distinct from all other metadata and will never
   /// be identified (uniqued) with anything else.
   MDNode *createAnonymousAliasScope(MDNode *Domain,
@@ -128,22 +128,22 @@
     return createAnonymousAARoot(Name, Domain);
   }
 
-  /// \brief Return metadata appropriate for a TBAA root node with the given
+  /// Return metadata appropriate for a TBAA root node with the given
   /// name.  This may be identified (uniqued) with other roots with the same
   /// name.
   MDNode *createTBAARoot(StringRef Name);
 
-  /// \brief Return metadata appropriate for an alias scope domain node with
+  /// Return metadata appropriate for an alias scope domain node with
   /// the given name. This may be identified (uniqued) with other roots with
   /// the same name.
   MDNode *createAliasScopeDomain(StringRef Name);
 
-  /// \brief Return metadata appropriate for an alias scope node with
+  /// Return metadata appropriate for an alias scope node with
   /// the given name. This may be identified (uniqued) with other scopes with
   /// the same name and domain.
   MDNode *createAliasScope(StringRef Name, MDNode *Domain);
 
-  /// \brief Return metadata for a non-root TBAA node with the given name,
+  /// Return metadata for a non-root TBAA node with the given name,
   /// parent in the TBAA tree, and value for 'pointsToConstantMemory'.
   MDNode *createTBAANode(StringRef Name, MDNode *Parent,
                          bool isConstant = false);
@@ -156,33 +156,33 @@
       Offset(Offset), Size(Size), Type(Type) {}
   };
 
-  /// \brief Return metadata for a tbaa.struct node with the given
+  /// Return metadata for a tbaa.struct node with the given
   /// struct field descriptions.
   MDNode *createTBAAStructNode(ArrayRef<TBAAStructField> Fields);
 
-  /// \brief Return metadata for a TBAA struct node in the type DAG
+  /// Return metadata for a TBAA struct node in the type DAG
   /// with the given name, a list of pairs (offset, field type in the type DAG).
   MDNode *
   createTBAAStructTypeNode(StringRef Name,
                            ArrayRef<std::pair<MDNode *, uint64_t>> Fields);
 
-  /// \brief Return metadata for a TBAA scalar type node with the
+  /// Return metadata for a TBAA scalar type node with the
   /// given name, an offset and a parent in the TBAA type DAG.
   MDNode *createTBAAScalarTypeNode(StringRef Name, MDNode *Parent,
                                    uint64_t Offset = 0);
 
-  /// \brief Return metadata for a TBAA tag node with the given
+  /// Return metadata for a TBAA tag node with the given
   /// base type, access type and offset relative to the base type.
   MDNode *createTBAAStructTagNode(MDNode *BaseType, MDNode *AccessType,
                                   uint64_t Offset, bool IsConstant = false);
 
-  /// \brief Return metadata for a TBAA type node in the TBAA type DAG with the
+  /// Return metadata for a TBAA type node in the TBAA type DAG with the
   /// given parent type, size in bytes, type identifier and a list of fields.
   MDNode *createTBAATypeNode(MDNode *Parent, uint64_t Size, Metadata *Id,
                              ArrayRef<TBAAStructField> Fields =
                                  ArrayRef<TBAAStructField>());
 
-  /// \brief Return metadata for a TBAA access tag with the given base type,
+  /// Return metadata for a TBAA access tag with the given base type,
   /// final access type, offset of the access relative to the base type, size of
   /// the access and flag indicating whether the accessed object can be
   /// considered immutable for the purposes of the TBAA analysis.
@@ -190,11 +190,11 @@
                               uint64_t Offset, uint64_t Size,
                               bool IsImmutable = false);
 
-  /// \brief Return mutable version of the given mutable or immutable TBAA
+  /// Return mutable version of the given mutable or immutable TBAA
   /// access tag.
   MDNode *createMutableTBAAAccessTag(MDNode *Tag);
 
-  /// \brief Return metadata containing an irreducible loop header weight.
+  /// Return metadata containing an irreducible loop header weight.
   MDNode *createIrrLoopHeaderWeight(uint64_t Weight);
 };
 
diff --git a/linux-x64/clang/include/llvm/IR/Metadata.def b/linux-x64/clang/include/llvm/IR/Metadata.def
index 03cdcab..70a03f2 100644
--- a/linux-x64/clang/include/llvm/IR/Metadata.def
+++ b/linux-x64/clang/include/llvm/IR/Metadata.def
@@ -108,6 +108,7 @@
 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIVariable)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIGlobalVariable)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILocalVariable)
+HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DILabel)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIObjCProperty)
 HANDLE_SPECIALIZED_MDNODE_LEAF_UNIQUABLE(DIImportedEntity)
 HANDLE_SPECIALIZED_MDNODE_BRANCH(DIMacroNode)
diff --git a/linux-x64/clang/include/llvm/IR/Metadata.h b/linux-x64/clang/include/llvm/IR/Metadata.h
index bc0b87a..9ac97f4 100644
--- a/linux-x64/clang/include/llvm/IR/Metadata.h
+++ b/linux-x64/clang/include/llvm/IR/Metadata.h
@@ -52,20 +52,20 @@
   DEBUG_METADATA_VERSION = 3 // Current debug info version number.
 };
 
-/// \brief Root of the metadata hierarchy.
+/// Root of the metadata hierarchy.
 ///
 /// This is a root class for typeless data in the IR.
 class Metadata {
   friend class ReplaceableMetadataImpl;
 
-  /// \brief RTTI.
+  /// RTTI.
   const unsigned char SubclassID;
 
 protected:
-  /// \brief Active type of storage.
+  /// Active type of storage.
   enum StorageType { Uniqued, Distinct, Temporary };
 
-  /// \brief Storage flag for non-uniqued, otherwise unowned, metadata.
+  /// Storage flag for non-uniqued, otherwise unowned, metadata.
   unsigned char Storage;
   // TODO: expose remaining bits to subclasses.
 
@@ -86,7 +86,7 @@
 
   ~Metadata() = default;
 
-  /// \brief Default handling of a changed operand, which asserts.
+  /// Default handling of a changed operand, which asserts.
   ///
   /// If subclasses pass themselves in as owners to a tracking node reference,
   /// they must provide an implementation of this method.
@@ -97,7 +97,7 @@
 public:
   unsigned getMetadataID() const { return SubclassID; }
 
-  /// \brief User-friendly dump.
+  /// User-friendly dump.
   ///
   /// If \c M is provided, metadata nodes will be numbered canonically;
   /// otherwise, pointer addresses are substituted.
@@ -110,7 +110,7 @@
   void dump(const Module *M) const;
   /// @}
 
-  /// \brief Print.
+  /// Print.
   ///
   /// Prints definition of \c this.
   ///
@@ -123,7 +123,7 @@
              bool IsForDebug = false) const;
   /// @}
 
-  /// \brief Print as operand.
+  /// Print as operand.
   ///
   /// Prints reference of \c this.
   ///
@@ -162,7 +162,7 @@
   return OS;
 }
 
-/// \brief Metadata wrapper in the Value hierarchy.
+/// Metadata wrapper in the Value hierarchy.
 ///
 /// A member of the \a Value hierarchy to represent a reference to metadata.
 /// This allows, e.g., instrinsics to have metadata as operands.
@@ -177,7 +177,7 @@
 
   MetadataAsValue(Type *Ty, Metadata *MD);
 
-  /// \brief Drop use of metadata (during teardown).
+  /// Drop use of metadata (during teardown).
   void dropUse() { MD = nullptr; }
 
 public:
@@ -198,7 +198,7 @@
   void untrack();
 };
 
-/// \brief API for tracking metadata references through RAUW and deletion.
+/// API for tracking metadata references through RAUW and deletion.
 ///
 /// Shared API for updating \a Metadata pointers in subclasses that support
 /// RAUW.
@@ -207,7 +207,7 @@
 /// user-friendly tracking reference.
 class MetadataTracking {
 public:
-  /// \brief Track the reference to metadata.
+  /// Track the reference to metadata.
   ///
   /// Register \c MD with \c *MD, if the subclass supports tracking.  If \c *MD
   /// gets RAUW'ed, \c MD will be updated to the new address.  If \c *MD gets
@@ -220,7 +220,7 @@
     return track(&MD, *MD, static_cast<Metadata *>(nullptr));
   }
 
-  /// \brief Track the reference to metadata for \a Metadata.
+  /// Track the reference to metadata for \a Metadata.
   ///
   /// As \a track(Metadata*&), but with support for calling back to \c Owner to
   /// tell it that its operand changed.  This could trigger \c Owner being
@@ -229,7 +229,7 @@
     return track(Ref, MD, &Owner);
   }
 
-  /// \brief Track the reference to metadata for \a MetadataAsValue.
+  /// Track the reference to metadata for \a MetadataAsValue.
   ///
   /// As \a track(Metadata*&), but with support for calling back to \c Owner to
   /// tell it that its operand changed.  This could trigger \c Owner being
@@ -238,13 +238,13 @@
     return track(Ref, MD, &Owner);
   }
 
-  /// \brief Stop tracking a reference to metadata.
+  /// Stop tracking a reference to metadata.
   ///
   /// Stops \c *MD from tracking \c MD.
   static void untrack(Metadata *&MD) { untrack(&MD, *MD); }
   static void untrack(void *Ref, Metadata &MD);
 
-  /// \brief Move tracking from one reference to another.
+  /// Move tracking from one reference to another.
   ///
   /// Semantically equivalent to \c untrack(MD) followed by \c track(New),
   /// except that ownership callbacks are maintained.
@@ -257,19 +257,19 @@
   }
   static bool retrack(void *Ref, Metadata &MD, void *New);
 
-  /// \brief Check whether metadata is replaceable.
+  /// Check whether metadata is replaceable.
   static bool isReplaceable(const Metadata &MD);
 
   using OwnerTy = PointerUnion<MetadataAsValue *, Metadata *>;
 
 private:
-  /// \brief Track a reference to metadata for an owner.
+  /// Track a reference to metadata for an owner.
   ///
   /// Generalized version of tracking.
   static bool track(void *Ref, Metadata &MD, OwnerTy Owner);
 };
 
-/// \brief Shared implementation of use-lists for replaceable metadata.
+/// Shared implementation of use-lists for replaceable metadata.
 ///
 /// Most metadata cannot be RAUW'ed.  This is a shared implementation of
 /// use-lists and associated API for the two that support it (\a ValueAsMetadata
@@ -294,12 +294,12 @@
 
   LLVMContext &getContext() const { return Context; }
 
-  /// \brief Replace all uses of this with MD.
+  /// Replace all uses of this with MD.
   ///
   /// Replace all uses of this with \c MD, which is allowed to be null.
   void replaceAllUsesWith(Metadata *MD);
 
-  /// \brief Resolve all uses of this.
+  /// Resolve all uses of this.
   ///
   /// Resolve all uses of this, turning off RAUW permanently.  If \c
   /// ResolveUsers, call \a MDNode::resolve() on any users whose last operand
@@ -326,7 +326,7 @@
   static bool isReplaceable(const Metadata &MD);
 };
 
-/// \brief Value wrapper in the Metadata hierarchy.
+/// Value wrapper in the Metadata hierarchy.
 ///
 /// This is a custom value handle that allows other metadata to refer to
 /// classes in the Value hierarchy.
@@ -340,7 +340,7 @@
 
   Value *V;
 
-  /// \brief Drop users without RAUW (during teardown).
+  /// Drop users without RAUW (during teardown).
   void dropUsers() {
     ReplaceableMetadataImpl::resolveAllUses(/* ResolveUsers */ false);
   }
@@ -382,7 +382,7 @@
   static void handleRAUW(Value *From, Value *To);
 
 protected:
-  /// \brief Handle collisions after \a Value::replaceAllUsesWith().
+  /// Handle collisions after \a Value::replaceAllUsesWith().
   ///
   /// RAUW isn't supported directly for \a ValueAsMetadata, but if the wrapped
   /// \a Value gets RAUW'ed and the target already exists, this is used to
@@ -444,7 +444,7 @@
   }
 };
 
-/// \brief Transitional API for extracting constants from Metadata.
+/// Transitional API for extracting constants from Metadata.
 ///
 /// This namespace contains transitional functions for metadata that points to
 /// \a Constants.
@@ -520,7 +520,7 @@
 
 } // end namespace detail
 
-/// \brief Check whether Metadata has a Value.
+/// Check whether Metadata has a Value.
 ///
 /// As an analogue to \a isa(), check whether \c MD has an \a Value inside of
 /// type \c X.
@@ -539,7 +539,7 @@
   return hasa(&MD);
 }
 
-/// \brief Extract a Value from Metadata.
+/// Extract a Value from Metadata.
 ///
 /// As an analogue to \a cast(), extract the \a Value subclass \c X from \c MD.
 template <class X, class Y>
@@ -554,7 +554,7 @@
   return extract(&MD);
 }
 
-/// \brief Extract a Value from Metadata, allowing null.
+/// Extract a Value from Metadata, allowing null.
 ///
 /// As an analogue to \a cast_or_null(), extract the \a Value subclass \c X
 /// from \c MD, allowing \c MD to be null.
@@ -566,7 +566,7 @@
   return nullptr;
 }
 
-/// \brief Extract a Value from Metadata, if any.
+/// Extract a Value from Metadata, if any.
 ///
 /// As an analogue to \a dyn_cast_or_null(), extract the \a Value subclass \c X
 /// from \c MD, return null if \c MD doesn't contain a \a Value or if the \a
@@ -579,7 +579,7 @@
   return nullptr;
 }
 
-/// \brief Extract a Value from Metadata, if any, allowing null.
+/// Extract a Value from Metadata, if any, allowing null.
 ///
 /// As an analogue to \a dyn_cast_or_null(), extract the \a Value subclass \c X
 /// from \c MD, return null if \c MD doesn't contain a \a Value or if the \a
@@ -595,7 +595,7 @@
 } // end namespace mdconst
 
 //===----------------------------------------------------------------------===//
-/// \brief A single uniqued string.
+/// A single uniqued string.
 ///
 /// These are used to efficiently contain a byte sequence for metadata.
 /// MDString is always unnamed.
@@ -622,22 +622,22 @@
 
   using iterator = StringRef::iterator;
 
-  /// \brief Pointer to the first byte of the string.
+  /// Pointer to the first byte of the string.
   iterator begin() const { return getString().begin(); }
 
-  /// \brief Pointer to one byte past the end of the string.
+  /// Pointer to one byte past the end of the string.
   iterator end() const { return getString().end(); }
 
   const unsigned char *bytes_begin() const { return getString().bytes_begin(); }
   const unsigned char *bytes_end() const { return getString().bytes_end(); }
 
-  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast.
+  /// Methods for support type inquiry through isa, cast, and dyn_cast.
   static bool classof(const Metadata *MD) {
     return MD->getMetadataID() == MDStringKind;
   }
 };
 
-/// \brief A collection of metadata nodes that might be associated with a
+/// A collection of metadata nodes that might be associated with a
 /// memory access used by the alias-analysis infrastructure.
 struct AAMDNodes {
   explicit AAMDNodes(MDNode *T = nullptr, MDNode *S = nullptr,
@@ -652,16 +652,16 @@
 
   explicit operator bool() const { return TBAA || Scope || NoAlias; }
 
-  /// \brief The tag for type-based alias analysis.
+  /// The tag for type-based alias analysis.
   MDNode *TBAA;
 
-  /// \brief The tag for alias scope specification (used with noalias).
+  /// The tag for alias scope specification (used with noalias).
   MDNode *Scope;
 
-  /// \brief The tag specifying the noalias scope.
+  /// The tag specifying the noalias scope.
   MDNode *NoAlias;
 
-  /// \brief Given two sets of AAMDNodes that apply to the same pointer,
+  /// Given two sets of AAMDNodes that apply to the same pointer,
   /// give the best AAMDNodes that are compatible with both (i.e. a set of
   /// nodes whose allowable aliasing conclusions are a subset of those
   /// allowable by both of the inputs). However, for efficiency
@@ -699,7 +699,7 @@
   }
 };
 
-/// \brief Tracking metadata reference owned by Metadata.
+/// Tracking metadata reference owned by Metadata.
 ///
 /// Similar to \a TrackingMDRef, but it's expected to be owned by an instance
 /// of \a Metadata, which has the option of registering itself for callbacks to
@@ -761,7 +761,7 @@
   static SimpleType getSimplifiedValue(const MDOperand &MD) { return MD.get(); }
 };
 
-/// \brief Pointer to the context, with optional RAUW support.
+/// Pointer to the context, with optional RAUW support.
 ///
 /// Either a raw (non-null) pointer to the \a LLVMContext, or an owned pointer
 /// to \a ReplaceableMetadataImpl (which has a reference to \a LLVMContext).
@@ -785,7 +785,7 @@
 
   operator LLVMContext &() { return getContext(); }
 
-  /// \brief Whether this contains RAUW support.
+  /// Whether this contains RAUW support.
   bool hasReplaceableUses() const {
     return Ptr.is<ReplaceableMetadataImpl *>();
   }
@@ -809,7 +809,7 @@
     return getReplaceableUses();
   }
 
-  /// \brief Assign RAUW support to this.
+  /// Assign RAUW support to this.
   ///
   /// Make this replaceable, taking ownership of \c ReplaceableUses (which must
   /// not be null).
@@ -822,7 +822,7 @@
     Ptr = ReplaceableUses.release();
   }
 
-  /// \brief Drop RAUW support.
+  /// Drop RAUW support.
   ///
   /// Cede ownership of RAUW support, returning it.
   std::unique_ptr<ReplaceableMetadataImpl> takeReplaceableUses() {
@@ -843,7 +843,7 @@
 #define HANDLE_MDNODE_BRANCH(CLASS) HANDLE_MDNODE_LEAF(CLASS)
 #include "llvm/IR/Metadata.def"
 
-/// \brief Metadata node.
+/// Metadata node.
 ///
 /// Metadata nodes can be uniqued, like constants, or distinct.  Temporary
 /// metadata nodes (with full support for RAUW) can be used to delay uniquing
@@ -876,12 +876,12 @@
   void *operator new(size_t Size, unsigned NumOps);
   void operator delete(void *Mem);
 
-  /// \brief Required by std, but never called.
+  /// Required by std, but never called.
   void operator delete(void *, unsigned) {
     llvm_unreachable("Constructor throws?");
   }
 
-  /// \brief Required by std, but never called.
+  /// Required by std, but never called.
   void operator delete(void *, unsigned, bool) {
     llvm_unreachable("Constructor throws?");
   }
@@ -910,10 +910,10 @@
   static inline TempMDTuple getTemporary(LLVMContext &Context,
                                          ArrayRef<Metadata *> MDs);
 
-  /// \brief Create a (temporary) clone of this.
+  /// Create a (temporary) clone of this.
   TempMDNode clone() const;
 
-  /// \brief Deallocate a node created by getTemporary.
+  /// Deallocate a node created by getTemporary.
   ///
   /// Calls \c replaceAllUsesWith(nullptr) before deleting, so any remaining
   /// references will be reset.
@@ -921,10 +921,10 @@
 
   LLVMContext &getContext() const { return Context.getContext(); }
 
-  /// \brief Replace a specific operand.
+  /// Replace a specific operand.
   void replaceOperandWith(unsigned I, Metadata *New);
 
-  /// \brief Check if node is fully resolved.
+  /// Check if node is fully resolved.
   ///
   /// If \a isTemporary(), this always returns \c false; if \a isDistinct(),
   /// this always returns \c true.
@@ -941,7 +941,7 @@
   bool isDistinct() const { return Storage == Distinct; }
   bool isTemporary() const { return Storage == Temporary; }
 
-  /// \brief RAUW a temporary.
+  /// RAUW a temporary.
   ///
   /// \pre \a isTemporary() must be \c true.
   void replaceAllUsesWith(Metadata *MD) {
@@ -950,7 +950,7 @@
       Context.getReplaceableUses()->replaceAllUsesWith(MD);
   }
 
-  /// \brief Resolve cycles.
+  /// Resolve cycles.
   ///
   /// Once all forward declarations have been resolved, force cycles to be
   /// resolved.
@@ -961,7 +961,7 @@
   /// Resolve a unique, unresolved node.
   void resolve();
 
-  /// \brief Replace a temporary node with a permanent one.
+  /// Replace a temporary node with a permanent one.
   ///
   /// Try to create a uniqued version of \c N -- in place, if possible -- and
   /// return it.  If \c N cannot be uniqued, return a distinct node instead.
@@ -971,7 +971,7 @@
     return cast<T>(N.release()->replaceWithPermanentImpl());
   }
 
-  /// \brief Replace a temporary node with a uniqued one.
+  /// Replace a temporary node with a uniqued one.
   ///
   /// Create a uniqued version of \c N -- in place, if possible -- and return
   /// it.  Takes ownership of the temporary node.
@@ -983,7 +983,7 @@
     return cast<T>(N.release()->replaceWithUniquedImpl());
   }
 
-  /// \brief Replace a temporary node with a distinct one.
+  /// Replace a temporary node with a distinct one.
   ///
   /// Create a distinct version of \c N -- in place, if possible -- and return
   /// it.  Takes ownership of the temporary node.
@@ -999,7 +999,7 @@
   MDNode *replaceWithDistinctImpl();
 
 protected:
-  /// \brief Set an operand.
+  /// Set an operand.
   ///
   /// Sets the operand directly, without worrying about uniquing.
   void setOperand(unsigned I, Metadata *New);
@@ -1019,14 +1019,14 @@
   void decrementUnresolvedOperandCount();
   void countUnresolvedOperands();
 
-  /// \brief Mutate this to be "uniqued".
+  /// Mutate this to be "uniqued".
   ///
   /// Mutate this so that \a isUniqued().
   /// \pre \a isTemporary().
   /// \pre already added to uniquing set.
   void makeUniqued();
 
-  /// \brief Mutate this to be "distinct".
+  /// Mutate this to be "distinct".
   ///
   /// Mutate this so that \a isDistinct().
   /// \pre \a isTemporary().
@@ -1069,10 +1069,10 @@
     return op_begin()[I];
   }
 
-  /// \brief Return number of MDNode operands.
+  /// Return number of MDNode operands.
   unsigned getNumOperands() const { return NumOperands; }
 
-  /// \brief Methods for support type inquiry through isa, cast, and dyn_cast:
+  /// Methods for support type inquiry through isa, cast, and dyn_cast:
   static bool classof(const Metadata *MD) {
     switch (MD->getMetadataID()) {
     default:
@@ -1084,10 +1084,10 @@
     }
   }
 
-  /// \brief Check whether MDNode is a vtable access.
+  /// Check whether MDNode is a vtable access.
   bool isTBAAVtableAccess() const;
 
-  /// \brief Methods for metadata merging.
+  /// Methods for metadata merging.
   static MDNode *concatenate(MDNode *A, MDNode *B);
   static MDNode *intersect(MDNode *A, MDNode *B);
   static MDNode *getMostGenericTBAA(MDNode *A, MDNode *B);
@@ -1097,7 +1097,7 @@
   static MDNode *getMostGenericAlignmentOrDereferenceable(MDNode *A, MDNode *B);
 };
 
-/// \brief Tuple of metadata.
+/// Tuple of metadata.
 ///
 /// This is the simple \a MDNode arbitrary tuple.  Nodes are uniqued by
 /// default based on their operands.
@@ -1125,7 +1125,7 @@
   }
 
 public:
-  /// \brief Get the hash, if any.
+  /// Get the hash, if any.
   unsigned getHash() const { return SubclassData32; }
 
   static MDTuple *get(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
@@ -1136,14 +1136,14 @@
     return getImpl(Context, MDs, Uniqued, /* ShouldCreate */ false);
   }
 
-  /// \brief Return a distinct node.
+  /// Return a distinct node.
   ///
   /// Return a distinct node -- i.e., a node that is not uniqued.
   static MDTuple *getDistinct(LLVMContext &Context, ArrayRef<Metadata *> MDs) {
     return getImpl(Context, MDs, Distinct);
   }
 
-  /// \brief Return a temporary node.
+  /// Return a temporary node.
   ///
   /// For use in constructing cyclic MDNode structures. A temporary MDNode is
   /// not uniqued, may be RAUW'd, and must be manually deleted with
@@ -1153,7 +1153,7 @@
     return TempMDTuple(getImpl(Context, MDs, Temporary));
   }
 
-  /// \brief Return a (temporary) clone of this.
+  /// Return a (temporary) clone of this.
   TempMDTuple clone() const { return cloneImpl(); }
 
   static bool classof(const Metadata *MD) {
@@ -1182,7 +1182,7 @@
   MDNode::deleteTemporary(Node);
 }
 
-/// \brief Typed iterator through MDNode operands.
+/// Typed iterator through MDNode operands.
 ///
 /// An iterator that transforms an \a MDNode::iterator into an iterator over a
 /// particular Metadata subclass.
@@ -1213,7 +1213,7 @@
   bool operator!=(const TypedMDOperandIterator &X) const { return I != X.I; }
 };
 
-/// \brief Typed, array-like tuple of metadata.
+/// Typed, array-like tuple of metadata.
 ///
 /// This is a wrapper for \a MDTuple that makes it act like an array holding a
 /// particular type of metadata.
@@ -1314,7 +1314,7 @@
 };
 
 //===----------------------------------------------------------------------===//
-/// \brief A tuple of MDNodes.
+/// A tuple of MDNodes.
 ///
 /// Despite its name, a NamedMDNode isn't itself an MDNode. NamedMDNodes belong
 /// to modules, have names, and contain lists of MDNodes.
@@ -1377,7 +1377,7 @@
   NamedMDNode(const NamedMDNode &) = delete;
   ~NamedMDNode();
 
-  /// \brief Drop all references and remove the node from parent module.
+  /// Drop all references and remove the node from parent module.
   void eraseFromParent();
 
   /// Remove all uses and clear node vector.
@@ -1385,7 +1385,7 @@
   /// Drop all references to this node's operands.
   void clearOperands();
 
-  /// \brief Get the module that holds this named metadata collection.
+  /// Get the module that holds this named metadata collection.
   inline Module *getParent() { return Parent; }
   inline const Module *getParent() const { return Parent; }
 
diff --git a/linux-x64/clang/include/llvm/IR/Module.h b/linux-x64/clang/include/llvm/IR/Module.h
index 58e4bc4..a405f7d 100644
--- a/linux-x64/clang/include/llvm/IR/Module.h
+++ b/linux-x64/clang/include/llvm/IR/Module.h
@@ -59,7 +59,7 @@
 /// A module maintains a GlobalValRefMap object that is used to hold all
 /// constant references to global variables in the module.  When a global
 /// variable is destroyed, it should have no entries in the GlobalValueRefMap.
-/// @brief The main container class for the LLVM Intermediate Representation.
+/// The main container class for the LLVM Intermediate Representation.
 class Module {
 /// @name Types And Enumerations
 /// @{
@@ -207,13 +207,18 @@
   /// @returns the module identifier as a string
   const std::string &getModuleIdentifier() const { return ModuleID; }
 
+  /// Returns the number of non-debug IR instructions in the module.
+  /// This is equivalent to the sum of the IR instruction counts of each
+  /// function contained in the module.
+  unsigned getInstructionCount();
+
   /// Get the module's original source file name. When compiling from
   /// bitcode, this is taken from a bitcode record where it was recorded.
   /// For other compiles it is the same as the ModuleID, which would
   /// contain the source file name.
   const std::string &getSourceFileName() const { return SourceFileName; }
 
-  /// \brief Get a short "name" for the module.
+  /// Get a short "name" for the module.
   ///
   /// This is useful for debugging or logging. It is essentially a convenience
   /// wrapper around getModuleIdentifier().
@@ -251,9 +256,16 @@
   /// versions when the pass does not change.
   std::unique_ptr<RandomNumberGenerator> createRNG(const Pass* P) const;
 
-/// @}
-/// @name Module Level Mutators
-/// @{
+  /// Return true if size-info optimization remark is enabled, false
+  /// otherwise.
+  bool shouldEmitInstrCountChangedRemark() {
+    return getContext().getDiagHandlerPtr()->isAnalysisRemarkEnabled(
+        "size-info");
+  }
+
+  /// @}
+  /// @name Module Level Mutators
+  /// @{
 
   /// Set the module identifier.
   void setModuleIdentifier(StringRef ID) { ModuleID = ID; }
@@ -795,14 +807,14 @@
 /// @name Utility functions for querying Debug information.
 /// @{
 
-  /// \brief Returns the Number of Register ParametersDwarf Version by checking
+  /// Returns the Number of Register ParametersDwarf Version by checking
   /// module flags.
   unsigned getNumberRegisterParameters() const;
 
-  /// \brief Returns the Dwarf Version by checking module flags.
+  /// Returns the Dwarf Version by checking module flags.
   unsigned getDwarfVersion() const;
 
-  /// \brief Returns the CodeView Version by checking module flags.
+  /// Returns the CodeView Version by checking module flags.
   /// Returns zero if not present in module.
   unsigned getCodeViewFlag() const;
 
@@ -810,10 +822,10 @@
 /// @name Utility functions for querying and setting PIC level
 /// @{
 
-  /// \brief Returns the PIC level (small or large model)
+  /// Returns the PIC level (small or large model)
   PICLevel::Level getPICLevel() const;
 
-  /// \brief Set the PIC level (small or large model)
+  /// Set the PIC level (small or large model)
   void setPICLevel(PICLevel::Level PL);
 /// @}
 
@@ -821,20 +833,20 @@
 /// @name Utility functions for querying and setting PIE level
 /// @{
 
-  /// \brief Returns the PIE level (small or large model)
+  /// Returns the PIE level (small or large model)
   PIELevel::Level getPIELevel() const;
 
-  /// \brief Set the PIE level (small or large model)
+  /// Set the PIE level (small or large model)
   void setPIELevel(PIELevel::Level PL);
 /// @}
 
   /// @name Utility functions for querying and setting PGO summary
   /// @{
 
-  /// \brief Attach profile summary metadata to this module.
+  /// Attach profile summary metadata to this module.
   void setProfileSummary(Metadata *M);
 
-  /// \brief Returns profile summary metadata
+  /// Returns profile summary metadata
   Metadata *getProfileSummary();
   /// @}
 
@@ -849,7 +861,7 @@
   void setOwnedMemoryBuffer(std::unique_ptr<MemoryBuffer> MB);
 };
 
-/// \brief Given "llvm.used" or "llvm.compiler.used" as a global name, collect
+/// Given "llvm.used" or "llvm.compiler.used" as a global name, collect
 /// the initializer elements of that global in Set and return the global itself.
 GlobalVariable *collectUsedGlobalVariables(const Module &M,
                                            SmallPtrSetImpl<GlobalValue *> &Set,
diff --git a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
index 45f8cd7..fdf3d4b 100644
--- a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
+++ b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndex.h
@@ -25,8 +25,10 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/IR/GlobalValue.h"
 #include "llvm/IR/Module.h"
+#include "llvm/Support/Allocator.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/Support/ScaledNumber.h"
+#include "llvm/Support/StringSaver.h"
 #include <algorithm>
 #include <array>
 #include <cassert>
@@ -47,7 +49,7 @@
 
 } // end namespace yaml
 
-/// \brief Class to accumulate and hold information about a callee.
+/// Class to accumulate and hold information about a callee.
 struct CalleeInfo {
   enum class HotnessType : uint8_t {
     Unknown = 0,
@@ -103,15 +105,17 @@
 
 struct GlobalValueSummaryInfo {
   union NameOrGV {
-    NameOrGV(bool IsAnalysis) {
-      if (IsAnalysis)
+    NameOrGV(bool HaveGVs) {
+      if (HaveGVs)
         GV = nullptr;
       else
         Name = "";
     }
 
     /// The GlobalValue corresponding to this summary. This is only used in
-    /// per-module summaries, when module analysis is being run.
+    /// per-module summaries and when the IR is available. E.g. when module
+    /// analysis is being run, or when parsing both the IR and the summary
+    /// from assembly.
     const GlobalValue *GV;
 
     /// Summary string representation. This StringRef points to BC module
@@ -122,7 +126,7 @@
     StringRef Name;
   } U;
 
-  GlobalValueSummaryInfo(bool IsAnalysis) : U(IsAnalysis) {}
+  GlobalValueSummaryInfo(bool HaveGVs) : U(HaveGVs) {}
 
   /// List of global value summary structures for a particular value held
   /// in the GlobalValueMap. Requires a vector in the case of multiple
@@ -146,16 +150,16 @@
       RefAndFlag;
 
   ValueInfo() = default;
-  ValueInfo(bool IsAnalysis, const GlobalValueSummaryMapTy::value_type *R) {
+  ValueInfo(bool HaveGVs, const GlobalValueSummaryMapTy::value_type *R) {
     RefAndFlag.setPointer(R);
-    RefAndFlag.setInt(IsAnalysis);
+    RefAndFlag.setInt(HaveGVs);
   }
 
   operator bool() const { return getRef(); }
 
   GlobalValue::GUID getGUID() const { return getRef()->first; }
   const GlobalValue *getValue() const {
-    assert(isFromAnalysis());
+    assert(haveGVs());
     return getRef()->second.U.GV;
   }
 
@@ -164,11 +168,11 @@
   }
 
   StringRef name() const {
-    return isFromAnalysis() ? getRef()->second.U.GV->getName()
-                            : getRef()->second.U.Name;
+    return haveGVs() ? getRef()->second.U.GV->getName()
+                     : getRef()->second.U.Name;
   }
 
-  bool isFromAnalysis() const { return RefAndFlag.getInt(); }
+  bool haveGVs() const { return RefAndFlag.getInt(); }
 
   const GlobalValueSummaryMapTy::value_type *getRef() const {
     return RefAndFlag.getPointer();
@@ -177,16 +181,23 @@
   bool isDSOLocal() const;
 };
 
+inline raw_ostream &operator<<(raw_ostream &OS, const ValueInfo &VI) {
+  OS << VI.getGUID();
+  if (!VI.name().empty())
+    OS << " (" << VI.name() << ")";
+  return OS;
+}
+
 inline bool operator==(const ValueInfo &A, const ValueInfo &B) {
   assert(A.getRef() && B.getRef() &&
-         "Need ValueInfo with non-null Ref to compare GUIDs");
+         "Need ValueInfo with non-null Ref for comparison");
   return A.getRef() == B.getRef();
 }
 
 inline bool operator!=(const ValueInfo &A, const ValueInfo &B) {
   assert(A.getRef() && B.getRef() &&
-         "Need ValueInfo with non-null Ref to compare GUIDs");
-  return A.getGUID() != B.getGUID();
+         "Need ValueInfo with non-null Ref for comparison");
+  return A.getRef() != B.getRef();
 }
 
 inline bool operator<(const ValueInfo &A, const ValueInfo &B) {
@@ -209,25 +220,24 @@
   }
 
   static bool isEqual(ValueInfo L, ValueInfo R) {
-    // We are not supposed to mix ValueInfo(s) with different analysis flag
+    // We are not supposed to mix ValueInfo(s) with different HaveGVs flag
     // in a same container.
-    assert(isSpecialKey(L) || isSpecialKey(R) ||
-           (L.isFromAnalysis() == R.isFromAnalysis()));
+    assert(isSpecialKey(L) || isSpecialKey(R) || (L.haveGVs() == R.haveGVs()));
     return L.getRef() == R.getRef();
   }
   static unsigned getHashValue(ValueInfo I) { return (uintptr_t)I.getRef(); }
 };
 
-/// \brief Function and variable summary information to aid decisions and
+/// Function and variable summary information to aid decisions and
 /// implementation of importing.
 class GlobalValueSummary {
 public:
-  /// \brief Sububclass discriminator (for dyn_cast<> et al.)
+  /// Sububclass discriminator (for dyn_cast<> et al.)
   enum SummaryKind : unsigned { AliasKind, FunctionKind, GlobalVarKind };
 
   /// Group flags (Linkage, NotEligibleToImport, etc.) as a bitfield.
   struct GVFlags {
-    /// \brief The linkage type of the associated global value.
+    /// The linkage type of the associated global value.
     ///
     /// One use is to flag values that have local linkage types and need to
     /// have module identifier appended before placing into the combined
@@ -269,7 +279,7 @@
   /// GUID includes the module level id in the hash.
   GlobalValue::GUID OriginalName = 0;
 
-  /// \brief Path of module IR containing value's definition, used to locate
+  /// Path of module IR containing value's definition, used to locate
   /// module during importing.
   ///
   /// This is only used during parsing of the combined index, or when
@@ -296,7 +306,7 @@
 
   /// Returns the hash of the original name, it is identical to the GUID for
   /// externally visible symbols, but not for local ones.
-  GlobalValue::GUID getOriginalName() { return OriginalName; }
+  GlobalValue::GUID getOriginalName() const { return OriginalName; }
 
   /// Initialize the original name hash in this summary.
   void setOriginalName(GlobalValue::GUID Name) { OriginalName = Name; }
@@ -312,7 +322,7 @@
   StringRef modulePath() const { return ModulePath; }
 
   /// Get the flags for this GlobalValue (see \p struct GVFlags).
-  GVFlags flags() { return Flags; }
+  GVFlags flags() const { return Flags; }
 
   /// Return linkage type recorded for this global value.
   GlobalValue::LinkageTypes linkage() const {
@@ -350,7 +360,7 @@
   friend class ModuleSummaryIndex;
 };
 
-/// \brief Alias summary information.
+/// Alias summary information.
 class AliasSummary : public GlobalValueSummary {
   GlobalValueSummary *AliaseeSummary;
   // AliaseeGUID is only set and accessed when we are building a combined index
@@ -370,6 +380,8 @@
   void setAliasee(GlobalValueSummary *Aliasee) { AliaseeSummary = Aliasee; }
   void setAliaseeGUID(GlobalValue::GUID GUID) { AliaseeGUID = GUID; }
 
+  bool hasAliasee() const { return !!AliaseeSummary; }
+
   const GlobalValueSummary &getAliasee() const {
     assert(AliaseeSummary && "Unexpected missing aliasee summary");
     return *AliaseeSummary;
@@ -397,13 +409,20 @@
   return this;
 }
 
-/// \brief Function summary information to aid decisions and implementation of
+/// Function summary information to aid decisions and implementation of
 /// importing.
 class FunctionSummary : public GlobalValueSummary {
 public:
   /// <CalleeValueInfo, CalleeInfo> call edge pair.
   using EdgeTy = std::pair<ValueInfo, CalleeInfo>;
 
+  /// Types for -force-summary-edges-cold debugging option.
+  enum ForceSummaryHotnessType : unsigned {
+    FSHT_None,
+    FSHT_AllNonCritical,
+    FSHT_All
+  };
+
   /// An "identifier" for a virtual function. This contains the type identifier
   /// represented as a GUID and the offset from the address point to the virtual
   /// function pointer, where "address point" is as defined in the Itanium ABI:
@@ -421,6 +440,26 @@
     std::vector<uint64_t> Args;
   };
 
+  /// All type identifier related information. Because these fields are
+  /// relatively uncommon we only allocate space for them if necessary.
+  struct TypeIdInfo {
+    /// List of type identifiers used by this function in llvm.type.test
+    /// intrinsics referenced by something other than an llvm.assume intrinsic,
+    /// represented as GUIDs.
+    std::vector<GlobalValue::GUID> TypeTests;
+
+    /// List of virtual calls made by this function using (respectively)
+    /// llvm.assume(llvm.type.test) or llvm.type.checked.load intrinsics that do
+    /// not have all constant integer arguments.
+    std::vector<VFuncId> TypeTestAssumeVCalls, TypeCheckedLoadVCalls;
+
+    /// List of virtual calls made by this function using (respectively)
+    /// llvm.assume(llvm.type.test) or llvm.type.checked.load intrinsics with
+    /// all constant integer arguments.
+    std::vector<ConstVCall> TypeTestAssumeConstVCalls,
+        TypeCheckedLoadConstVCalls;
+  };
+
   /// Function attribute flags. Used to track if a function accesses memory,
   /// recurses or aliases.
   struct FFlags {
@@ -461,25 +500,6 @@
   /// List of <CalleeValueInfo, CalleeInfo> call edge pairs from this function.
   std::vector<EdgeTy> CallGraphEdgeList;
 
-  /// All type identifier related information. Because these fields are
-  /// relatively uncommon we only allocate space for them if necessary.
-  struct TypeIdInfo {
-    /// List of type identifiers used by this function in llvm.type.test
-    /// intrinsics other than by an llvm.assume intrinsic, represented as GUIDs.
-    std::vector<GlobalValue::GUID> TypeTests;
-
-    /// List of virtual calls made by this function using (respectively)
-    /// llvm.assume(llvm.type.test) or llvm.type.checked.load intrinsics that do
-    /// not have all constant integer arguments.
-    std::vector<VFuncId> TypeTestAssumeVCalls, TypeCheckedLoadVCalls;
-
-    /// List of virtual calls made by this function using (respectively)
-    /// llvm.assume(llvm.type.test) or llvm.type.checked.load intrinsics with
-    /// all constant integer arguments.
-    std::vector<ConstVCall> TypeTestAssumeConstVCalls,
-        TypeCheckedLoadConstVCalls;
-  };
-
   std::unique_ptr<TypeIdInfo> TIdInfo;
 
 public:
@@ -509,7 +529,7 @@
   }
 
   /// Get function attribute flags.
-  FFlags &fflags() { return FunFlags; }
+  FFlags fflags() const { return FunFlags; }
 
   /// Get the instruction count recorded for this function.
   unsigned instCount() const { return InstCount; }
@@ -569,6 +589,8 @@
     TIdInfo->TypeTests.push_back(Guid);
   }
 
+  const TypeIdInfo *getTypeIdInfo() const { return TIdInfo.get(); };
+
   friend struct GraphTraits<ValueInfo>;
 };
 
@@ -606,7 +628,7 @@
   }
 };
 
-/// \brief Global variable summary information to aid decisions and
+/// Global variable summary information to aid decisions and
 /// implementation of importing.
 ///
 /// Currently this doesn't add anything to the base \p GlobalValueSummary,
@@ -746,28 +768,34 @@
   /// valid object file.
   bool SkipModuleByDistributedBackend = false;
 
-  /// If true then we're performing analysis of IR module, filling summary
-  /// accordingly. The value of 'false' means we're reading summary from
-  /// BC or YAML source. Affects the type of value stored in NameOrGV union
-  bool IsAnalysis;
+  /// If true then we're performing analysis of IR module, or parsing along with
+  /// the IR from assembly. The value of 'false' means we're reading summary
+  /// from BC or YAML source. Affects the type of value stored in NameOrGV
+  /// union.
+  bool HaveGVs;
 
   std::set<std::string> CfiFunctionDefs;
   std::set<std::string> CfiFunctionDecls;
 
+  // Used in cases where we want to record the name of a global, but
+  // don't have the string owned elsewhere (e.g. the Strtab on a module).
+  StringSaver Saver;
+  BumpPtrAllocator Alloc;
+
   // YAML I/O support.
   friend yaml::MappingTraits<ModuleSummaryIndex>;
 
   GlobalValueSummaryMapTy::value_type *
   getOrInsertValuePtr(GlobalValue::GUID GUID) {
-    return &*GlobalValueMap.emplace(GUID, GlobalValueSummaryInfo(IsAnalysis)).first;
+    return &*GlobalValueMap.emplace(GUID, GlobalValueSummaryInfo(HaveGVs))
+                 .first;
   }
 
 public:
-  // See IsAnalysis variable comment.
-  ModuleSummaryIndex(bool IsPerformingAnalysis)
-      : IsAnalysis(IsPerformingAnalysis) {}
+  // See HaveGVs variable comment.
+  ModuleSummaryIndex(bool HaveGVs) : HaveGVs(HaveGVs), Saver(Alloc) {}
 
-  bool isPerformingAnalysis() const { return IsAnalysis; }
+  bool haveGVs() const { return HaveGVs; }
 
   gvsummary_iterator begin() { return GlobalValueMap.begin(); }
   const_gvsummary_iterator begin() const { return GlobalValueMap.begin(); }
@@ -820,7 +848,7 @@
       if (!S.second.SummaryList.size() ||
           !isa<FunctionSummary>(S.second.SummaryList.front().get()))
         continue;
-      discoverNodes(ValueInfo(IsAnalysis, &S), FunctionHasParent);
+      discoverNodes(ValueInfo(HaveGVs, &S), FunctionHasParent);
     }
 
     std::vector<FunctionSummary::EdgeTy> Edges;
@@ -857,31 +885,42 @@
   }
   bool isGUIDLive(GlobalValue::GUID GUID) const;
 
+  /// Return a ValueInfo for the index value_type (convenient when iterating
+  /// index).
+  ValueInfo getValueInfo(const GlobalValueSummaryMapTy::value_type &R) const {
+    return ValueInfo(HaveGVs, &R);
+  }
+
   /// Return a ValueInfo for GUID if it exists, otherwise return ValueInfo().
   ValueInfo getValueInfo(GlobalValue::GUID GUID) const {
     auto I = GlobalValueMap.find(GUID);
-    return ValueInfo(IsAnalysis, I == GlobalValueMap.end() ? nullptr : &*I);
+    return ValueInfo(HaveGVs, I == GlobalValueMap.end() ? nullptr : &*I);
   }
 
   /// Return a ValueInfo for \p GUID.
   ValueInfo getOrInsertValueInfo(GlobalValue::GUID GUID) {
-    return ValueInfo(IsAnalysis, getOrInsertValuePtr(GUID));
+    return ValueInfo(HaveGVs, getOrInsertValuePtr(GUID));
   }
 
+  // Save a string in the Index. Use before passing Name to
+  // getOrInsertValueInfo when the string isn't owned elsewhere (e.g. on the
+  // module's Strtab).
+  StringRef saveString(std::string String) { return Saver.save(String); }
+
   /// Return a ValueInfo for \p GUID setting value \p Name.
   ValueInfo getOrInsertValueInfo(GlobalValue::GUID GUID, StringRef Name) {
-    assert(!IsAnalysis);
+    assert(!HaveGVs);
     auto VP = getOrInsertValuePtr(GUID);
     VP->second.U.Name = Name;
-    return ValueInfo(IsAnalysis, VP);
+    return ValueInfo(HaveGVs, VP);
   }
 
   /// Return a ValueInfo for \p GV and mark it as belonging to GV.
   ValueInfo getOrInsertValueInfo(const GlobalValue *GV) {
-    assert(IsAnalysis);
+    assert(HaveGVs);
     auto VP = getOrInsertValuePtr(GV->getGUID());
     VP->second.U.GV = GV;
-    return ValueInfo(IsAnalysis, VP);
+    return ValueInfo(HaveGVs, VP);
   }
 
   /// Return the GUID for \p OriginalId in the OidGuidMap.
@@ -896,6 +935,12 @@
   std::set<std::string> &cfiFunctionDecls() { return CfiFunctionDecls; }
   const std::set<std::string> &cfiFunctionDecls() const { return CfiFunctionDecls; }
 
+  /// Add a global value summary for a value.
+  void addGlobalValueSummary(const GlobalValue &GV,
+                             std::unique_ptr<GlobalValueSummary> Summary) {
+    addGlobalValueSummary(getOrInsertValueInfo(&GV), std::move(Summary));
+  }
+
   /// Add a global value summary for a value of the given name.
   void addGlobalValueSummary(StringRef ValueName,
                              std::unique_ptr<GlobalValueSummary> Summary) {
@@ -947,8 +992,7 @@
   GlobalValueSummary *getGlobalValueSummary(const GlobalValue &GV,
                                             bool PerModuleIndex = true) const {
     assert(GV.hasName() && "Can't get GlobalValueSummary for GV with no name");
-    return getGlobalValueSummary(GlobalValue::getGUID(GV.getName()),
-                                 PerModuleIndex);
+    return getGlobalValueSummary(GV.getGUID(), PerModuleIndex);
   }
 
   /// Returns the first GlobalValueSummary for \p ValueGUID, asserting that
@@ -1005,6 +1049,13 @@
     return &*ModulePathStringTable.insert({ModPath, {ModId, Hash}}).first;
   }
 
+  /// Return module entry for module with the given \p ModPath.
+  ModuleInfo *getModule(StringRef ModPath) {
+    auto It = ModulePathStringTable.find(ModPath);
+    assert(It != ModulePathStringTable.end() && "Module not registered");
+    return &*It;
+  }
+
   /// Check if the given Module has any functions available for exporting
   /// in the index. We consider any module present in the ModulePathStringTable
   /// to have exported functions.
@@ -1031,7 +1082,7 @@
     return &I->second;
   }
 
-  /// Collect for the given module the list of function it defines
+  /// Collect for the given module the list of functions it defines
   /// (GUID -> Summary).
   void collectDefinedFunctionsForModule(StringRef ModulePath,
                                         GVSummaryMapTy &GVSummaryMap) const;
@@ -1041,6 +1092,12 @@
   void collectDefinedGVSummariesPerModule(
       StringMap<GVSummaryMapTy> &ModuleToDefinedGVSummaries) const;
 
+  /// Print to an output stream.
+  void print(raw_ostream &OS, bool IsForDebug = false) const;
+
+  /// Dump to stderr (for debugging).
+  void dump() const;
+
   /// Export summary to dot file for GraphViz.
   void exportToDot(raw_ostream& OS) const;
 
@@ -1087,11 +1144,11 @@
   static NodeRef getEntryNode(ModuleSummaryIndex *I) {
     std::unique_ptr<GlobalValueSummary> Root =
         make_unique<FunctionSummary>(I->calculateCallGraphRoot());
-    GlobalValueSummaryInfo G(I->isPerformingAnalysis());
+    GlobalValueSummaryInfo G(I->haveGVs());
     G.SummaryList.push_back(std::move(Root));
     static auto P =
         GlobalValueSummaryMapTy::value_type(GlobalValue::GUID(0), std::move(G));
-    return ValueInfo(I->isPerformingAnalysis(), &P);
+    return ValueInfo(I->haveGVs(), &P);
   }
 };
 
diff --git a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
index 8f30de6..1b339ab 100644
--- a/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
+++ b/linux-x64/clang/include/llvm/IR/ModuleSummaryIndexYAML.h
@@ -138,6 +138,7 @@
 struct FunctionSummaryYaml {
   unsigned Linkage;
   bool NotEligibleToImport, Live, IsLocal;
+  std::vector<uint64_t> Refs;
   std::vector<uint64_t> TypeTests;
   std::vector<FunctionSummary::VFuncId> TypeTestAssumeVCalls,
       TypeCheckedLoadVCalls;
@@ -180,6 +181,7 @@
     io.mapOptional("NotEligibleToImport", summary.NotEligibleToImport);
     io.mapOptional("Live", summary.Live);
     io.mapOptional("Local", summary.IsLocal);
+    io.mapOptional("Refs", summary.Refs);
     io.mapOptional("TypeTests", summary.TypeTests);
     io.mapOptional("TypeTestAssumeVCalls", summary.TypeTestAssumeVCalls);
     io.mapOptional("TypeCheckedLoadVCalls", summary.TypeCheckedLoadVCalls);
@@ -209,14 +211,21 @@
       io.setError("key not an integer");
       return;
     }
-    auto P = V.emplace(KeyInt, /*IsAnalysis=*/false);
-    auto &Elem = (*P.first).second;
+    if (!V.count(KeyInt))
+      V.emplace(KeyInt, /*IsAnalysis=*/false);
+    auto &Elem = V.find(KeyInt)->second;
     for (auto &FSum : FSums) {
+      std::vector<ValueInfo> Refs;
+      for (auto &RefGUID : FSum.Refs) {
+        if (!V.count(RefGUID))
+          V.emplace(RefGUID, /*IsAnalysis=*/false);
+        Refs.push_back(ValueInfo(/*IsAnalysis=*/false, &*V.find(RefGUID)));
+      }
       Elem.SummaryList.push_back(llvm::make_unique<FunctionSummary>(
           GlobalValueSummary::GVFlags(
               static_cast<GlobalValue::LinkageTypes>(FSum.Linkage),
               FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal),
-          0, FunctionSummary::FFlags{}, ArrayRef<ValueInfo>{},
+          0, FunctionSummary::FFlags{}, Refs,
           ArrayRef<FunctionSummary::EdgeTy>{}, std::move(FSum.TypeTests),
           std::move(FSum.TypeTestAssumeVCalls),
           std::move(FSum.TypeCheckedLoadVCalls),
@@ -228,15 +237,20 @@
     for (auto &P : V) {
       std::vector<FunctionSummaryYaml> FSums;
       for (auto &Sum : P.second.SummaryList) {
-        if (auto *FSum = dyn_cast<FunctionSummary>(Sum.get()))
+        if (auto *FSum = dyn_cast<FunctionSummary>(Sum.get())) {
+          std::vector<uint64_t> Refs;
+          for (auto &VI : FSum->refs())
+            Refs.push_back(VI.getGUID());
           FSums.push_back(FunctionSummaryYaml{
               FSum->flags().Linkage,
               static_cast<bool>(FSum->flags().NotEligibleToImport),
               static_cast<bool>(FSum->flags().Live),
-              static_cast<bool>(FSum->flags().DSOLocal), FSum->type_tests(),
-              FSum->type_test_assume_vcalls(), FSum->type_checked_load_vcalls(),
+              static_cast<bool>(FSum->flags().DSOLocal), Refs,
+              FSum->type_tests(), FSum->type_test_assume_vcalls(),
+              FSum->type_checked_load_vcalls(),
               FSum->type_test_assume_const_vcalls(),
               FSum->type_checked_load_const_vcalls()});
+          }
       }
       if (!FSums.empty())
         io.mapRequired(llvm::utostr(P.first).c_str(), FSums);
diff --git a/linux-x64/clang/include/llvm/IR/Operator.h b/linux-x64/clang/include/llvm/IR/Operator.h
index 01746e4..939cec7 100644
--- a/linux-x64/clang/include/llvm/IR/Operator.h
+++ b/linux-x64/clang/include/llvm/IR/Operator.h
@@ -207,17 +207,28 @@
   bool isFast() const          { return all(); }
 
   /// Flag setters
-  void setAllowReassoc()    { Flags |= AllowReassoc; }
-  void setNoNaNs()          { Flags |= NoNaNs; }
-  void setNoInfs()          { Flags |= NoInfs; }
-  void setNoSignedZeros()   { Flags |= NoSignedZeros; }
-  void setAllowReciprocal() { Flags |= AllowReciprocal; }
-  // TODO: Change the other set* functions to take a parameter?
-  void setAllowContract(bool B) {
+  void setAllowReassoc(bool B = true) {
+    Flags = (Flags & ~AllowReassoc) | B * AllowReassoc;
+  }
+  void setNoNaNs(bool B = true) {
+    Flags = (Flags & ~NoNaNs) | B * NoNaNs;
+  }
+  void setNoInfs(bool B = true) {
+    Flags = (Flags & ~NoInfs) | B * NoInfs;
+  }
+  void setNoSignedZeros(bool B = true) {
+    Flags = (Flags & ~NoSignedZeros) | B * NoSignedZeros;
+  }
+  void setAllowReciprocal(bool B = true) {
+    Flags = (Flags & ~AllowReciprocal) | B * AllowReciprocal;
+  }
+  void setAllowContract(bool B = true) {
     Flags = (Flags & ~AllowContract) | B * AllowContract;
   }
-  void setApproxFunc()      { Flags |= ApproxFunc; }
-  void setFast()            { set(); }
+  void setApproxFunc(bool B = true) {
+    Flags = (Flags & ~ApproxFunc) | B * ApproxFunc;
+  }
+  void setFast(bool B = true) { B ? set() : clear(); }
 
   void operator&=(const FastMathFlags &OtherFlags) {
     Flags &= OtherFlags.Flags;
@@ -507,7 +518,7 @@
       });
   }
 
-  /// \brief Accumulate the constant address offset of this GEP if possible.
+  /// Accumulate the constant address offset of this GEP if possible.
   ///
   /// This routine accepts an APInt into which it will accumulate the constant
   /// offset of this GEP if the GEP is in fact constant. If the GEP is not
diff --git a/linux-x64/clang/include/llvm/IR/OptBisect.h b/linux-x64/clang/include/llvm/IR/OptBisect.h
index cfc724c..aa24c94 100644
--- a/linux-x64/clang/include/llvm/IR/OptBisect.h
+++ b/linux-x64/clang/include/llvm/IR/OptBisect.h
@@ -47,7 +47,7 @@
 /// optimization-related problems.
 class OptBisect : public OptPassGate {
 public:
-  /// \brief Default constructor, initializes the OptBisect state based on the
+  /// Default constructor, initializes the OptBisect state based on the
   /// -opt-bisect-limit command line argument.
   ///
   /// By default, bisection is disabled.
diff --git a/linux-x64/clang/include/llvm/IR/PassManager.h b/linux-x64/clang/include/llvm/IR/PassManager.h
index 4f838a7..a5d4aaf 100644
--- a/linux-x64/clang/include/llvm/IR/PassManager.h
+++ b/linux-x64/clang/include/llvm/IR/PassManager.h
@@ -152,17 +152,17 @@
 /// ```
 class PreservedAnalyses {
 public:
-  /// \brief Convenience factory function for the empty preserved set.
+  /// Convenience factory function for the empty preserved set.
   static PreservedAnalyses none() { return PreservedAnalyses(); }
 
-  /// \brief Construct a special preserved set that preserves all passes.
+  /// Construct a special preserved set that preserves all passes.
   static PreservedAnalyses all() {
     PreservedAnalyses PA;
     PA.PreservedIDs.insert(&AllAnalysesKey);
     return PA;
   }
 
-  /// \brief Construct a preserved analyses object with a single preserved set.
+  /// Construct a preserved analyses object with a single preserved set.
   template <typename AnalysisSetT>
   static PreservedAnalyses allInSet() {
     PreservedAnalyses PA;
@@ -173,7 +173,7 @@
   /// Mark an analysis as preserved.
   template <typename AnalysisT> void preserve() { preserve(AnalysisT::ID()); }
 
-  /// \brief Given an analysis's ID, mark the analysis as preserved, adding it
+  /// Given an analysis's ID, mark the analysis as preserved, adding it
   /// to the set.
   void preserve(AnalysisKey *ID) {
     // Clear this ID from the explicit not-preserved set if present.
@@ -218,7 +218,7 @@
     NotPreservedAnalysisIDs.insert(ID);
   }
 
-  /// \brief Intersect this set with another in place.
+  /// Intersect this set with another in place.
   ///
   /// This is a mutating operation on this preserved set, removing all
   /// preserved passes which are not also preserved in the argument.
@@ -240,7 +240,7 @@
         PreservedIDs.erase(ID);
   }
 
-  /// \brief Intersect this set with a temporary other set in place.
+  /// Intersect this set with a temporary other set in place.
   ///
   /// This is a mutating operation on this preserved set, removing all
   /// preserved passes which are not also preserved in the argument.
@@ -402,7 +402,7 @@
   }
 };
 
-/// \brief Manages a sequence of passes over a particular unit of IR.
+/// Manages a sequence of passes over a particular unit of IR.
 ///
 /// A pass manager contains a sequence of passes to run over a particular unit
 /// of IR (e.g. Functions, Modules). It is itself a valid pass over that unit of
@@ -420,7 +420,7 @@
 class PassManager : public PassInfoMixin<
                         PassManager<IRUnitT, AnalysisManagerT, ExtraArgTs...>> {
 public:
-  /// \brief Construct a pass manager.
+  /// Construct a pass manager.
   ///
   /// If \p DebugLogging is true, we'll log our progress to llvm::dbgs().
   explicit PassManager(bool DebugLogging = false) : DebugLogging(DebugLogging) {}
@@ -439,7 +439,7 @@
     return *this;
   }
 
-  /// \brief Run all of the passes in this manager over the given unit of IR.
+  /// Run all of the passes in this manager over the given unit of IR.
   /// ExtraArgs are passed to each pass.
   PreservedAnalyses run(IRUnitT &IR, AnalysisManagerT &AM,
                         ExtraArgTs... ExtraArgs) {
@@ -496,21 +496,21 @@
 
   std::vector<std::unique_ptr<PassConceptT>> Passes;
 
-  /// \brief Flag indicating whether we should do debug logging.
+  /// Flag indicating whether we should do debug logging.
   bool DebugLogging;
 };
 
 extern template class PassManager<Module>;
 
-/// \brief Convenience typedef for a pass manager over modules.
+/// Convenience typedef for a pass manager over modules.
 using ModulePassManager = PassManager<Module>;
 
 extern template class PassManager<Function>;
 
-/// \brief Convenience typedef for a pass manager over functions.
+/// Convenience typedef for a pass manager over functions.
 using FunctionPassManager = PassManager<Function>;
 
-/// \brief A container for analyses that lazily runs them and caches their
+/// A container for analyses that lazily runs them and caches their
 /// results.
 ///
 /// This class can manage analyses for any IR unit where the address of the IR
@@ -527,7 +527,7 @@
       detail::AnalysisPassConcept<IRUnitT, PreservedAnalyses, Invalidator,
                                   ExtraArgTs...>;
 
-  /// \brief List of analysis pass IDs and associated concept pointers.
+  /// List of analysis pass IDs and associated concept pointers.
   ///
   /// Requires iterators to be valid across appending new entries and arbitrary
   /// erases. Provides the analysis ID to enable finding iterators to a given
@@ -536,10 +536,10 @@
   using AnalysisResultListT =
       std::list<std::pair<AnalysisKey *, std::unique_ptr<ResultConceptT>>>;
 
-  /// \brief Map type from IRUnitT pointer to our custom list type.
+  /// Map type from IRUnitT pointer to our custom list type.
   using AnalysisResultListMapT = DenseMap<IRUnitT *, AnalysisResultListT>;
 
-  /// \brief Map type from a pair of analysis ID and IRUnitT pointer to an
+  /// Map type from a pair of analysis ID and IRUnitT pointer to an
   /// iterator into a particular result list (which is where the actual analysis
   /// result is stored).
   using AnalysisResultMapT =
@@ -634,14 +634,14 @@
     const AnalysisResultMapT &Results;
   };
 
-  /// \brief Construct an empty analysis manager.
+  /// Construct an empty analysis manager.
   ///
   /// If \p DebugLogging is true, we'll log our progress to llvm::dbgs().
   AnalysisManager(bool DebugLogging = false) : DebugLogging(DebugLogging) {}
   AnalysisManager(AnalysisManager &&) = default;
   AnalysisManager &operator=(AnalysisManager &&) = default;
 
-  /// \brief Returns true if the analysis manager has an empty results cache.
+  /// Returns true if the analysis manager has an empty results cache.
   bool empty() const {
     assert(AnalysisResults.empty() == AnalysisResultLists.empty() &&
            "The storage and index of analysis results disagree on how many "
@@ -649,7 +649,7 @@
     return AnalysisResults.empty();
   }
 
-  /// \brief Clear any cached analysis results for a single unit of IR.
+  /// Clear any cached analysis results for a single unit of IR.
   ///
   /// This doesn't invalidate, but instead simply deletes, the relevant results.
   /// It is useful when the IR is being removed and we want to clear out all the
@@ -669,7 +669,7 @@
     AnalysisResultLists.erase(ResultsListI);
   }
 
-  /// \brief Clear all analysis results cached by this AnalysisManager.
+  /// Clear all analysis results cached by this AnalysisManager.
   ///
   /// Like \c clear(IRUnitT&), this doesn't invalidate the results; it simply
   /// deletes them.  This lets you clean up the AnalysisManager when the set of
@@ -680,7 +680,7 @@
     AnalysisResultLists.clear();
   }
 
-  /// \brief Get the result of an analysis pass for a given IR unit.
+  /// Get the result of an analysis pass for a given IR unit.
   ///
   /// Runs the analysis if a cached result is not available.
   template <typename PassT>
@@ -697,7 +697,7 @@
     return static_cast<ResultModelT &>(ResultConcept).Result;
   }
 
-  /// \brief Get the cached result of an analysis pass for a given IR unit.
+  /// Get the cached result of an analysis pass for a given IR unit.
   ///
   /// This method never runs the analysis.
   ///
@@ -718,7 +718,7 @@
     return &static_cast<ResultModelT *>(ResultConcept)->Result;
   }
 
-  /// \brief Register an analysis pass with the manager.
+  /// Register an analysis pass with the manager.
   ///
   /// The parameter is a callable whose result is an analysis pass. This allows
   /// passing in a lambda to construct the analysis.
@@ -752,7 +752,7 @@
     return true;
   }
 
-  /// \brief Invalidate a specific analysis pass for an IR module.
+  /// Invalidate a specific analysis pass for an IR module.
   ///
   /// Note that the analysis result can disregard invalidation, if it determines
   /// it is in fact still valid.
@@ -762,7 +762,7 @@
     invalidateImpl(PassT::ID(), IR);
   }
 
-  /// \brief Invalidate cached analyses for an IR unit.
+  /// Invalidate cached analyses for an IR unit.
   ///
   /// Walk through all of the analyses pertaining to this unit of IR and
   /// invalidate them, unless they are preserved by the PreservedAnalyses set.
@@ -829,7 +829,7 @@
   }
 
 private:
-  /// \brief Look up a registered analysis pass.
+  /// Look up a registered analysis pass.
   PassConceptT &lookUpPass(AnalysisKey *ID) {
     typename AnalysisPassMapT::iterator PI = AnalysisPasses.find(ID);
     assert(PI != AnalysisPasses.end() &&
@@ -837,7 +837,7 @@
     return *PI->second;
   }
 
-  /// \brief Look up a registered analysis pass.
+  /// Look up a registered analysis pass.
   const PassConceptT &lookUpPass(AnalysisKey *ID) const {
     typename AnalysisPassMapT::const_iterator PI = AnalysisPasses.find(ID);
     assert(PI != AnalysisPasses.end() &&
@@ -845,7 +845,7 @@
     return *PI->second;
   }
 
-  /// \brief Get an analysis result, running the pass if necessary.
+  /// Get an analysis result, running the pass if necessary.
   ResultConceptT &getResultImpl(AnalysisKey *ID, IRUnitT &IR,
                                 ExtraArgTs... ExtraArgs) {
     typename AnalysisResultMapT::iterator RI;
@@ -874,14 +874,14 @@
     return *RI->second->second;
   }
 
-  /// \brief Get a cached analysis result or return null.
+  /// Get a cached analysis result or return null.
   ResultConceptT *getCachedResultImpl(AnalysisKey *ID, IRUnitT &IR) const {
     typename AnalysisResultMapT::const_iterator RI =
         AnalysisResults.find({ID, &IR});
     return RI == AnalysisResults.end() ? nullptr : &*RI->second->second;
   }
 
-  /// \brief Invalidate a function pass result.
+  /// Invalidate a function pass result.
   void invalidateImpl(AnalysisKey *ID, IRUnitT &IR) {
     typename AnalysisResultMapT::iterator RI =
         AnalysisResults.find({ID, &IR});
@@ -895,38 +895,38 @@
     AnalysisResults.erase(RI);
   }
 
-  /// \brief Map type from module analysis pass ID to pass concept pointer.
+  /// Map type from module analysis pass ID to pass concept pointer.
   using AnalysisPassMapT =
       DenseMap<AnalysisKey *, std::unique_ptr<PassConceptT>>;
 
-  /// \brief Collection of module analysis passes, indexed by ID.
+  /// Collection of module analysis passes, indexed by ID.
   AnalysisPassMapT AnalysisPasses;
 
-  /// \brief Map from function to a list of function analysis results.
+  /// Map from function to a list of function analysis results.
   ///
   /// Provides linear time removal of all analysis results for a function and
   /// the ultimate storage for a particular cached analysis result.
   AnalysisResultListMapT AnalysisResultLists;
 
-  /// \brief Map from an analysis ID and function to a particular cached
+  /// Map from an analysis ID and function to a particular cached
   /// analysis result.
   AnalysisResultMapT AnalysisResults;
 
-  /// \brief Indicates whether we log to \c llvm::dbgs().
+  /// Indicates whether we log to \c llvm::dbgs().
   bool DebugLogging;
 };
 
 extern template class AnalysisManager<Module>;
 
-/// \brief Convenience typedef for the Module analysis manager.
+/// Convenience typedef for the Module analysis manager.
 using ModuleAnalysisManager = AnalysisManager<Module>;
 
 extern template class AnalysisManager<Function>;
 
-/// \brief Convenience typedef for the Function analysis manager.
+/// Convenience typedef for the Function analysis manager.
 using FunctionAnalysisManager = AnalysisManager<Function>;
 
-/// \brief An analysis over an "outer" IR unit that provides access to an
+/// An analysis over an "outer" IR unit that provides access to an
 /// analysis manager over an "inner" IR unit.  The inner unit must be contained
 /// in the outer unit.
 ///
@@ -977,10 +977,10 @@
       return *this;
     }
 
-    /// \brief Accessor for the analysis manager.
+    /// Accessor for the analysis manager.
     AnalysisManagerT &getManager() { return *InnerAM; }
 
-    /// \brief Handler for invalidation of the outer IR unit, \c IRUnitT.
+    /// Handler for invalidation of the outer IR unit, \c IRUnitT.
     ///
     /// If the proxy analysis itself is not preserved, we assume that the set of
     /// inner IR objects contained in IRUnit may have changed.  In this case,
@@ -1001,7 +1001,7 @@
   explicit InnerAnalysisManagerProxy(AnalysisManagerT &InnerAM)
       : InnerAM(&InnerAM) {}
 
-  /// \brief Run the analysis pass and create our proxy result object.
+  /// Run the analysis pass and create our proxy result object.
   ///
   /// This doesn't do any interesting work; it is primarily used to insert our
   /// proxy result object into the outer analysis cache so that we can proxy
@@ -1040,7 +1040,7 @@
 extern template class InnerAnalysisManagerProxy<FunctionAnalysisManager,
                                                 Module>;
 
-/// \brief An analysis over an "inner" IR unit that provides access to an
+/// An analysis over an "inner" IR unit that provides access to an
 /// analysis manager over a "outer" IR unit.  The inner unit must be contained
 /// in the outer unit.
 ///
@@ -1063,7 +1063,7 @@
     : public AnalysisInfoMixin<
           OuterAnalysisManagerProxy<AnalysisManagerT, IRUnitT, ExtraArgTs...>> {
 public:
-  /// \brief Result proxy object for \c OuterAnalysisManagerProxy.
+  /// Result proxy object for \c OuterAnalysisManagerProxy.
   class Result {
   public:
     explicit Result(const AnalysisManagerT &AM) : AM(&AM) {}
@@ -1130,7 +1130,7 @@
 
   OuterAnalysisManagerProxy(const AnalysisManagerT &AM) : AM(&AM) {}
 
-  /// \brief Run the analysis pass and create our proxy result object.
+  /// Run the analysis pass and create our proxy result object.
   /// Nothing to see here, it just forwards the \c AM reference into the
   /// result.
   Result run(IRUnitT &, AnalysisManager<IRUnitT, ExtraArgTs...> &,
@@ -1157,7 +1157,7 @@
 using ModuleAnalysisManagerFunctionProxy =
     OuterAnalysisManagerProxy<ModuleAnalysisManager, Function>;
 
-/// \brief Trivial adaptor that maps from a module to its functions.
+/// Trivial adaptor that maps from a module to its functions.
 ///
 /// Designed to allow composition of a FunctionPass(Manager) and
 /// a ModulePassManager, by running the FunctionPass(Manager) over every
@@ -1187,7 +1187,7 @@
   explicit ModuleToFunctionPassAdaptor(FunctionPassT Pass)
       : Pass(std::move(Pass)) {}
 
-  /// \brief Runs the function pass across every function in the module.
+  /// Runs the function pass across every function in the module.
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) {
     FunctionAnalysisManager &FAM =
         AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
@@ -1223,7 +1223,7 @@
   FunctionPassT Pass;
 };
 
-/// \brief A function to deduce a function pass type and wrap it in the
+/// A function to deduce a function pass type and wrap it in the
 /// templated adaptor.
 template <typename FunctionPassT>
 ModuleToFunctionPassAdaptor<FunctionPassT>
@@ -1231,7 +1231,7 @@
   return ModuleToFunctionPassAdaptor<FunctionPassT>(std::move(Pass));
 }
 
-/// \brief A utility pass template to force an analysis result to be available.
+/// A utility pass template to force an analysis result to be available.
 ///
 /// If there are extra arguments at the pass's run level there may also be
 /// extra arguments to the analysis manager's \c getResult routine. We can't
@@ -1246,7 +1246,7 @@
 struct RequireAnalysisPass
     : PassInfoMixin<RequireAnalysisPass<AnalysisT, IRUnitT, AnalysisManagerT,
                                         ExtraArgTs...>> {
-  /// \brief Run this pass over some unit of IR.
+  /// Run this pass over some unit of IR.
   ///
   /// This pass can be run over any unit of IR and use any analysis manager
   /// provided they satisfy the basic API requirements. When this pass is
@@ -1261,12 +1261,12 @@
   }
 };
 
-/// \brief A no-op pass template which simply forces a specific analysis result
+/// A no-op pass template which simply forces a specific analysis result
 /// to be invalidated.
 template <typename AnalysisT>
 struct InvalidateAnalysisPass
     : PassInfoMixin<InvalidateAnalysisPass<AnalysisT>> {
-  /// \brief Run this pass over some unit of IR.
+  /// Run this pass over some unit of IR.
   ///
   /// This pass can be run over any unit of IR and use any analysis manager,
   /// provided they satisfy the basic API requirements. When this pass is
@@ -1280,12 +1280,12 @@
   }
 };
 
-/// \brief A utility pass that does nothing, but preserves no analyses.
+/// A utility pass that does nothing, but preserves no analyses.
 ///
 /// Because this preserves no analyses, any analysis passes queried after this
 /// pass runs will recompute fresh results.
 struct InvalidateAllAnalysesPass : PassInfoMixin<InvalidateAllAnalysesPass> {
-  /// \brief Run this pass over some unit of IR.
+  /// Run this pass over some unit of IR.
   template <typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
   PreservedAnalyses run(IRUnitT &, AnalysisManagerT &, ExtraArgTs &&...) {
     return PreservedAnalyses::none();
diff --git a/linux-x64/clang/include/llvm/IR/PassManagerInternal.h b/linux-x64/clang/include/llvm/IR/PassManagerInternal.h
index 9195d4d..16a3258 100644
--- a/linux-x64/clang/include/llvm/IR/PassManagerInternal.h
+++ b/linux-x64/clang/include/llvm/IR/PassManagerInternal.h
@@ -29,17 +29,17 @@
 template <typename IRUnitT, typename... ExtraArgTs> class AnalysisManager;
 class PreservedAnalyses;
 
-/// \brief Implementation details of the pass manager interfaces.
+/// Implementation details of the pass manager interfaces.
 namespace detail {
 
-/// \brief Template for the abstract base class used to dispatch
+/// Template for the abstract base class used to dispatch
 /// polymorphically over pass objects.
 template <typename IRUnitT, typename AnalysisManagerT, typename... ExtraArgTs>
 struct PassConcept {
   // Boiler plate necessary for the container of derived classes.
   virtual ~PassConcept() = default;
 
-  /// \brief The polymorphic API which runs the pass over a given IR entity.
+  /// The polymorphic API which runs the pass over a given IR entity.
   ///
   /// Note that actual pass object can omit the analysis manager argument if
   /// desired. Also that the analysis manager may be null if there is no
@@ -47,11 +47,11 @@
   virtual PreservedAnalyses run(IRUnitT &IR, AnalysisManagerT &AM,
                                 ExtraArgTs... ExtraArgs) = 0;
 
-  /// \brief Polymorphic method to access the name of a pass.
+  /// Polymorphic method to access the name of a pass.
   virtual StringRef name() = 0;
 };
 
-/// \brief A template wrapper used to implement the polymorphic API.
+/// A template wrapper used to implement the polymorphic API.
 ///
 /// Can be instantiated for any object which provides a \c run method accepting
 /// an \c IRUnitT& and an \c AnalysisManager<IRUnit>&. It requires the pass to
@@ -85,7 +85,7 @@
   PassT Pass;
 };
 
-/// \brief Abstract concept of an analysis result.
+/// Abstract concept of an analysis result.
 ///
 /// This concept is parameterized over the IR unit that this result pertains
 /// to.
@@ -93,7 +93,7 @@
 struct AnalysisResultConcept {
   virtual ~AnalysisResultConcept() = default;
 
-  /// \brief Method to try and mark a result as invalid.
+  /// Method to try and mark a result as invalid.
   ///
   /// When the outer analysis manager detects a change in some underlying
   /// unit of the IR, it will call this method on all of the results cached.
@@ -112,7 +112,7 @@
                           InvalidatorT &Inv) = 0;
 };
 
-/// \brief SFINAE metafunction for computing whether \c ResultT provides an
+/// SFINAE metafunction for computing whether \c ResultT provides an
 /// \c invalidate member function.
 template <typename IRUnitT, typename ResultT> class ResultHasInvalidateMethod {
   using EnabledType = char;
@@ -148,7 +148,7 @@
   enum { Value = sizeof(check<ResultT>(rank<2>())) == sizeof(EnabledType) };
 };
 
-/// \brief Wrapper to model the analysis result concept.
+/// Wrapper to model the analysis result concept.
 ///
 /// By default, this will implement the invalidate method with a trivial
 /// implementation so that the actual analysis result doesn't need to provide
@@ -160,7 +160,7 @@
               ResultHasInvalidateMethod<IRUnitT, ResultT>::Value>
 struct AnalysisResultModel;
 
-/// \brief Specialization of \c AnalysisResultModel which provides the default
+/// Specialization of \c AnalysisResultModel which provides the default
 /// invalidate functionality.
 template <typename IRUnitT, typename PassT, typename ResultT,
           typename PreservedAnalysesT, typename InvalidatorT>
@@ -184,7 +184,7 @@
     return *this;
   }
 
-  /// \brief The model bases invalidation solely on being in the preserved set.
+  /// The model bases invalidation solely on being in the preserved set.
   //
   // FIXME: We should actually use two different concepts for analysis results
   // rather than two different models, and avoid the indirect function call for
@@ -199,7 +199,7 @@
   ResultT Result;
 };
 
-/// \brief Specialization of \c AnalysisResultModel which delegates invalidate
+/// Specialization of \c AnalysisResultModel which delegates invalidate
 /// handling to \c ResultT.
 template <typename IRUnitT, typename PassT, typename ResultT,
           typename PreservedAnalysesT, typename InvalidatorT>
@@ -223,7 +223,7 @@
     return *this;
   }
 
-  /// \brief The model delegates to the \c ResultT method.
+  /// The model delegates to the \c ResultT method.
   bool invalidate(IRUnitT &IR, const PreservedAnalysesT &PA,
                   InvalidatorT &Inv) override {
     return Result.invalidate(IR, PA, Inv);
@@ -232,7 +232,7 @@
   ResultT Result;
 };
 
-/// \brief Abstract concept of an analysis pass.
+/// Abstract concept of an analysis pass.
 ///
 /// This concept is parameterized over the IR unit that it can run over and
 /// produce an analysis result.
@@ -241,7 +241,7 @@
 struct AnalysisPassConcept {
   virtual ~AnalysisPassConcept() = default;
 
-  /// \brief Method to run this analysis over a unit of IR.
+  /// Method to run this analysis over a unit of IR.
   /// \returns A unique_ptr to the analysis result object to be queried by
   /// users.
   virtual std::unique_ptr<
@@ -249,11 +249,11 @@
   run(IRUnitT &IR, AnalysisManager<IRUnitT, ExtraArgTs...> &AM,
       ExtraArgTs... ExtraArgs) = 0;
 
-  /// \brief Polymorphic method to access the name of a pass.
+  /// Polymorphic method to access the name of a pass.
   virtual StringRef name() = 0;
 };
 
-/// \brief Wrapper to model the analysis pass concept.
+/// Wrapper to model the analysis pass concept.
 ///
 /// Can wrap any type which implements a suitable \c run method. The method
 /// must accept an \c IRUnitT& and an \c AnalysisManager<IRUnitT>& as arguments
@@ -283,7 +283,7 @@
       AnalysisResultModel<IRUnitT, PassT, typename PassT::Result,
                           PreservedAnalysesT, InvalidatorT>;
 
-  /// \brief The model delegates to the \c PassT::run method.
+  /// The model delegates to the \c PassT::run method.
   ///
   /// The return is wrapped in an \c AnalysisResultModel.
   std::unique_ptr<
@@ -293,7 +293,7 @@
     return llvm::make_unique<ResultModelT>(Pass.run(IR, AM, ExtraArgs...));
   }
 
-  /// \brief The model delegates to a static \c PassT::name method.
+  /// The model delegates to a static \c PassT::name method.
   ///
   /// The returned string ref must point to constant immutable data!
   StringRef name() override { return PassT::name(); }
diff --git a/linux-x64/clang/include/llvm/IR/PatternMatch.h b/linux-x64/clang/include/llvm/IR/PatternMatch.h
index 304b84b..af0616c 100644
--- a/linux-x64/clang/include/llvm/IR/PatternMatch.h
+++ b/linux-x64/clang/include/llvm/IR/PatternMatch.h
@@ -132,18 +132,6 @@
   return match_combine_and<LTy, RTy>(L, R);
 }
 
-struct match_zero {
-  template <typename ITy> bool match(ITy *V) {
-    if (const auto *C = dyn_cast<Constant>(V))
-      return C->isNullValue();
-    return false;
-  }
-};
-
-/// Match an arbitrary zero/null constant. This includes
-/// zero_initializer for vectors and ConstantPointerNull for pointers.
-inline match_zero m_Zero() { return match_zero(); }
-
 struct apint_match {
   const APInt *&Res;
 
@@ -365,6 +353,27 @@
   return cst_pred_ty<is_one>();
 }
 
+struct is_zero_int {
+  bool isValue(const APInt &C) { return C.isNullValue(); }
+};
+/// Match an integer 0 or a vector with all elements equal to 0.
+/// For vectors, this includes constants with undefined elements.
+inline cst_pred_ty<is_zero_int> m_ZeroInt() {
+  return cst_pred_ty<is_zero_int>();
+}
+
+struct is_zero {
+  template <typename ITy> bool match(ITy *V) {
+    auto *C = dyn_cast<Constant>(V);
+    return C && (C->isNullValue() || cst_pred_ty<is_zero_int>().match(C));
+  }
+};
+/// Match any null constant or a vector with all elements equal to 0.
+/// For vectors, this includes constants with undefined elements.
+inline is_zero m_Zero() {
+  return is_zero();
+}
+
 struct is_power2 {
   bool isValue(const APInt &C) { return C.isPowerOf2(); }
 };
@@ -398,6 +407,15 @@
   return cst_pred_ty<is_sign_mask>();
 }
 
+struct is_lowbit_mask {
+  bool isValue(const APInt &C) { return C.isMask(); }
+};
+/// Match an integer or vector with only the low bit(s) set.
+/// For vectors, this includes constants with undefined elements.
+inline cst_pred_ty<is_lowbit_mask> m_LowBitMask() {
+  return cst_pred_ty<is_lowbit_mask>();
+}
+
 struct is_nan {
   bool isValue(const APFloat &C) { return C.isNaN(); }
 };
@@ -480,6 +498,22 @@
 /// Match if we have a specific specified value.
 inline specificval_ty m_Specific(const Value *V) { return V; }
 
+/// Stores a reference to the Value *, not the Value * itself,
+/// thus can be used in commutative matchers.
+template <typename Class> struct deferredval_ty {
+  Class *const &Val;
+
+  deferredval_ty(Class *const &V) : Val(V) {}
+
+  template <typename ITy> bool match(ITy *const V) { return V == Val; }
+};
+
+/// A commutative-friendly version of m_Specific().
+inline deferredval_ty<Value> m_Deferred(Value *const &V) { return V; }
+inline deferredval_ty<const Value> m_Deferred(const Value *const &V) {
+  return V;
+}
+
 /// Match a specified floating point value or vector of all elements of
 /// that value.
 struct specific_fpval {
@@ -553,13 +587,15 @@
   LHS_t L;
   RHS_t R;
 
+  // The evaluation order is always stable, regardless of Commutability.
+  // The LHS is always matched first.
   AnyBinaryOp_match(const LHS_t &LHS, const RHS_t &RHS) : L(LHS), R(RHS) {}
 
   template <typename OpTy> bool match(OpTy *V) {
     if (auto *I = dyn_cast<BinaryOperator>(V))
       return (L.match(I->getOperand(0)) && R.match(I->getOperand(1))) ||
-             (Commutable && R.match(I->getOperand(0)) &&
-              L.match(I->getOperand(1)));
+             (Commutable && L.match(I->getOperand(1)) &&
+              R.match(I->getOperand(0)));
     return false;
   }
 };
@@ -579,20 +615,22 @@
   LHS_t L;
   RHS_t R;
 
+  // The evaluation order is always stable, regardless of Commutability.
+  // The LHS is always matched first.
   BinaryOp_match(const LHS_t &LHS, const RHS_t &RHS) : L(LHS), R(RHS) {}
 
   template <typename OpTy> bool match(OpTy *V) {
     if (V->getValueID() == Value::InstructionVal + Opcode) {
       auto *I = cast<BinaryOperator>(V);
       return (L.match(I->getOperand(0)) && R.match(I->getOperand(1))) ||
-             (Commutable && R.match(I->getOperand(0)) &&
-              L.match(I->getOperand(1)));
+             (Commutable && L.match(I->getOperand(1)) &&
+              R.match(I->getOperand(0)));
     }
     if (auto *CE = dyn_cast<ConstantExpr>(V))
       return CE->getOpcode() == Opcode &&
              ((L.match(CE->getOperand(0)) && R.match(CE->getOperand(1))) ||
-              (Commutable && R.match(CE->getOperand(0)) &&
-               L.match(CE->getOperand(1))));
+              (Commutable && L.match(CE->getOperand(1)) &&
+               R.match(CE->getOperand(0))));
     return false;
   }
 };
@@ -621,6 +659,13 @@
   return BinaryOp_match<LHS, RHS, Instruction::FSub>(L, R);
 }
 
+/// Match 'fneg X' as 'fsub -0.0, X'.
+template <typename RHS>
+inline BinaryOp_match<cstfp_pred_ty<is_neg_zero_fp>, RHS, Instruction::FSub>
+m_FNeg(const RHS &X) {
+  return m_FSub(m_NegZeroFP(), X);
+}
+
 template <typename LHS, typename RHS>
 inline BinaryOp_match<LHS, RHS, Instruction::Mul> m_Mul(const LHS &L,
                                                         const RHS &R) {
@@ -910,14 +955,16 @@
   LHS_t L;
   RHS_t R;
 
+  // The evaluation order is always stable, regardless of Commutability.
+  // The LHS is always matched first.
   CmpClass_match(PredicateTy &Pred, const LHS_t &LHS, const RHS_t &RHS)
       : Predicate(Pred), L(LHS), R(RHS) {}
 
   template <typename OpTy> bool match(OpTy *V) {
     if (auto *I = dyn_cast<Class>(V))
       if ((L.match(I->getOperand(0)) && R.match(I->getOperand(1))) ||
-          (Commutable && R.match(I->getOperand(0)) &&
-           L.match(I->getOperand(1)))) {
+          (Commutable && L.match(I->getOperand(1)) &&
+           R.match(I->getOperand(0)))) {
         Predicate = I->getPredicate();
         return true;
       }
@@ -1155,55 +1202,30 @@
 }
 
 //===----------------------------------------------------------------------===//
-// Matchers for unary operators
+// Matcher for StoreInst classes
 //
 
-template <typename LHS_t> struct neg_match {
-  LHS_t L;
+template <typename ValueOp_t, typename PointerOp_t> struct StoreClass_match {
+  ValueOp_t ValueOp;
+  PointerOp_t PointerOp;
 
-  neg_match(const LHS_t &LHS) : L(LHS) {}
+  StoreClass_match(const ValueOp_t &ValueOpMatch,
+                   const PointerOp_t &PointerOpMatch) :
+    ValueOp(ValueOpMatch), PointerOp(PointerOpMatch)  {}
 
   template <typename OpTy> bool match(OpTy *V) {
-    if (auto *O = dyn_cast<Operator>(V))
-      if (O->getOpcode() == Instruction::Sub)
-        return matchIfNeg(O->getOperand(0), O->getOperand(1));
-    return false;
-  }
-
-private:
-  bool matchIfNeg(Value *LHS, Value *RHS) {
-    return ((isa<ConstantInt>(LHS) && cast<ConstantInt>(LHS)->isZero()) ||
-            isa<ConstantAggregateZero>(LHS)) &&
-           L.match(RHS);
-  }
-};
-
-/// Match an integer negate.
-template <typename LHS> inline neg_match<LHS> m_Neg(const LHS &L) { return L; }
-
-template <typename LHS_t> struct fneg_match {
-  LHS_t L;
-
-  fneg_match(const LHS_t &LHS) : L(LHS) {}
-
-  template <typename OpTy> bool match(OpTy *V) {
-    if (auto *O = dyn_cast<Operator>(V))
-      if (O->getOpcode() == Instruction::FSub)
-        return matchIfFNeg(O->getOperand(0), O->getOperand(1));
-    return false;
-  }
-
-private:
-  bool matchIfFNeg(Value *LHS, Value *RHS) {
-    if (const auto *C = dyn_cast<Constant>(LHS))
-      return C->isNegativeZeroValue() && L.match(RHS);
+    if (auto *LI = dyn_cast<StoreInst>(V))
+      return ValueOp.match(LI->getValueOperand()) &&
+             PointerOp.match(LI->getPointerOperand());
     return false;
   }
 };
 
-/// Match a floating point negate.
-template <typename LHS> inline fneg_match<LHS> m_FNeg(const LHS &L) {
-  return L;
+/// Matches StoreInst.
+template <typename ValueOpTy, typename PointerOpTy>
+inline StoreClass_match<ValueOpTy, PointerOpTy>
+m_Store(const ValueOpTy &ValueOp, const PointerOpTy &PointerOp) {
+  return StoreClass_match<ValueOpTy, PointerOpTy>(ValueOp, PointerOp);
 }
 
 //===----------------------------------------------------------------------===//
@@ -1260,6 +1282,8 @@
   LHS_t L;
   RHS_t R;
 
+  // The evaluation order is always stable, regardless of Commutability.
+  // The LHS is always matched first.
   MaxMin_match(const LHS_t &LHS, const RHS_t &RHS) : L(LHS), R(RHS) {}
 
   template <typename OpTy> bool match(OpTy *V) {
@@ -1286,7 +1310,7 @@
       return false;
     // It does!  Bind the operands.
     return (L.match(LHS) && R.match(RHS)) ||
-           (Commutable && R.match(LHS) && L.match(RHS));
+           (Commutable && L.match(RHS) && R.match(LHS));
   }
 };
 
@@ -1578,6 +1602,16 @@
   return m_Intrinsic<Intrinsic::bswap>(Op0);
 }
 
+template <typename Opnd0>
+inline typename m_Intrinsic_Ty<Opnd0>::Ty m_FAbs(const Opnd0 &Op0) {
+  return m_Intrinsic<Intrinsic::fabs>(Op0);
+}
+
+template <typename Opnd0>
+inline typename m_Intrinsic_Ty<Opnd0>::Ty m_FCanonicalize(const Opnd0 &Op0) {
+  return m_Intrinsic<Intrinsic::canonicalize>(Op0);
+}
+
 template <typename Opnd0, typename Opnd1>
 inline typename m_Intrinsic_Ty<Opnd0, Opnd1>::Ty m_FMin(const Opnd0 &Op0,
                                                         const Opnd1 &Op1) {
@@ -1590,46 +1624,6 @@
   return m_Intrinsic<Intrinsic::maxnum>(Op0, Op1);
 }
 
-template <typename Opnd_t> struct Signum_match {
-  Opnd_t Val;
-  Signum_match(const Opnd_t &V) : Val(V) {}
-
-  template <typename OpTy> bool match(OpTy *V) {
-    unsigned TypeSize = V->getType()->getScalarSizeInBits();
-    if (TypeSize == 0)
-      return false;
-
-    unsigned ShiftWidth = TypeSize - 1;
-    Value *OpL = nullptr, *OpR = nullptr;
-
-    // This is the representation of signum we match:
-    //
-    //  signum(x) == (x >> 63) | (-x >>u 63)
-    //
-    // An i1 value is its own signum, so it's correct to match
-    //
-    //  signum(x) == (x >> 0)  | (-x >>u 0)
-    //
-    // for i1 values.
-
-    auto LHS = m_AShr(m_Value(OpL), m_SpecificInt(ShiftWidth));
-    auto RHS = m_LShr(m_Neg(m_Value(OpR)), m_SpecificInt(ShiftWidth));
-    auto Signum = m_Or(LHS, RHS);
-
-    return Signum.match(V) && OpL == OpR && Val.match(OpL);
-  }
-};
-
-/// Matches a signum pattern.
-///
-/// signum(x) =
-///      x >  0  ->  1
-///      x == 0  ->  0
-///      x <  0  -> -1
-template <typename Val_t> inline Signum_match<Val_t> m_Signum(const Val_t &V) {
-  return Signum_match<Val_t>(V);
-}
-
 //===----------------------------------------------------------------------===//
 // Matchers for two-operands operators with the operators in either order
 //
@@ -1684,6 +1678,13 @@
   return BinaryOp_match<LHS, RHS, Instruction::Xor, true>(L, R);
 }
 
+/// Matches a 'Neg' as 'sub 0, V'.
+template <typename ValTy>
+inline BinaryOp_match<cst_pred_ty<is_zero_int>, ValTy, Instruction::Sub>
+m_Neg(const ValTy &V) {
+  return m_Sub(m_ZeroInt(), V);
+}
+
 /// Matches a 'Not' as 'xor V, -1' or 'xor -1, V'.
 template <typename ValTy>
 inline BinaryOp_match<ValTy, cst_pred_ty<is_all_ones>, Instruction::Xor, true>
@@ -1730,6 +1731,46 @@
   return BinaryOp_match<LHS, RHS, Instruction::FMul, true>(L, R);
 }
 
+template <typename Opnd_t> struct Signum_match {
+  Opnd_t Val;
+  Signum_match(const Opnd_t &V) : Val(V) {}
+
+  template <typename OpTy> bool match(OpTy *V) {
+    unsigned TypeSize = V->getType()->getScalarSizeInBits();
+    if (TypeSize == 0)
+      return false;
+
+    unsigned ShiftWidth = TypeSize - 1;
+    Value *OpL = nullptr, *OpR = nullptr;
+
+    // This is the representation of signum we match:
+    //
+    //  signum(x) == (x >> 63) | (-x >>u 63)
+    //
+    // An i1 value is its own signum, so it's correct to match
+    //
+    //  signum(x) == (x >> 0)  | (-x >>u 0)
+    //
+    // for i1 values.
+
+    auto LHS = m_AShr(m_Value(OpL), m_SpecificInt(ShiftWidth));
+    auto RHS = m_LShr(m_Neg(m_Value(OpR)), m_SpecificInt(ShiftWidth));
+    auto Signum = m_Or(LHS, RHS);
+
+    return Signum.match(V) && OpL == OpR && Val.match(OpL);
+  }
+};
+
+/// Matches a signum pattern.
+///
+/// signum(x) =
+///      x >  0  ->  1
+///      x == 0  ->  0
+///      x <  0  -> -1
+template <typename Val_t> inline Signum_match<Val_t> m_Signum(const Val_t &V) {
+  return Signum_match<Val_t>(V);
+}
+
 } // end namespace PatternMatch
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/IR/ProfileSummary.h b/linux-x64/clang/include/llvm/IR/ProfileSummary.h
index d85ce8c..e386637 100644
--- a/linux-x64/clang/include/llvm/IR/ProfileSummary.h
+++ b/linux-x64/clang/include/llvm/IR/ProfileSummary.h
@@ -51,7 +51,7 @@
   SummaryEntryVector DetailedSummary;
   uint64_t TotalCount, MaxCount, MaxInternalCount, MaxFunctionCount;
   uint32_t NumCounts, NumFunctions;
-  /// \brief Return detailed summary as metadata.
+  /// Return detailed summary as metadata.
   Metadata *getDetailedSummaryMD(LLVMContext &Context);
 
 public:
@@ -67,9 +67,9 @@
         NumCounts(NumCounts), NumFunctions(NumFunctions) {}
 
   Kind getKind() const { return PSK; }
-  /// \brief Return summary information as metadata.
+  /// Return summary information as metadata.
   Metadata *getMD(LLVMContext &Context);
-  /// \brief Construct profile summary from metdata.
+  /// Construct profile summary from metdata.
   static ProfileSummary *getFromMD(Metadata *MD);
   SummaryEntryVector &getDetailedSummary() { return DetailedSummary; }
   uint32_t getNumFunctions() { return NumFunctions; }
diff --git a/linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.def b/linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def
similarity index 100%
rename from linux-x64/clang/include/llvm/CodeGen/RuntimeLibcalls.def
rename to linux-x64/clang/include/llvm/IR/RuntimeLibcalls.def
diff --git a/linux-x64/clang/include/llvm/IR/Statepoint.h b/linux-x64/clang/include/llvm/IR/Statepoint.h
index a87f67c..8908e1b 100644
--- a/linux-x64/clang/include/llvm/IR/Statepoint.h
+++ b/linux-x64/clang/include/llvm/IR/Statepoint.h
@@ -196,7 +196,7 @@
     return make_range(arg_begin(), arg_end());
   }
 
-  /// \brief Return true if the call or the callee has the given attribute.
+  /// Return true if the call or the callee has the given attribute.
   bool paramHasAttr(unsigned i, Attribute::AttrKind A) const {
     Function *F = getCalledFunction();
     return getCallSite().paramHasAttr(i + CallArgsBeginPos, A) ||
@@ -325,7 +325,7 @@
   explicit Statepoint(CallSite CS) : Base(CS) {}
 };
 
-/// Common base class for representing values projected from a statepoint.  
+/// Common base class for representing values projected from a statepoint.
 /// Currently, the only projections available are gc.result and gc.relocate.
 class GCProjectionInst : public IntrinsicInst {
 public:
diff --git a/linux-x64/clang/include/llvm/IR/TrackingMDRef.h b/linux-x64/clang/include/llvm/IR/TrackingMDRef.h
index bdec904..084efad 100644
--- a/linux-x64/clang/include/llvm/IR/TrackingMDRef.h
+++ b/linux-x64/clang/include/llvm/IR/TrackingMDRef.h
@@ -20,7 +20,7 @@
 
 namespace llvm {
 
-/// \brief Tracking metadata reference.
+/// Tracking metadata reference.
 ///
 /// This class behaves like \a TrackingVH, but for metadata.
 class TrackingMDRef {
@@ -70,7 +70,7 @@
     track();
   }
 
-  /// \brief Check whether this has a trivial destructor.
+  /// Check whether this has a trivial destructor.
   ///
   /// If \c MD isn't replaceable, the destructor will be a no-op.
   bool hasTrivialDestructor() const {
@@ -100,7 +100,7 @@
   }
 };
 
-/// \brief Typed tracking ref.
+/// Typed tracking ref.
 ///
 /// Track refererences of a particular type.  It's useful to use this for \a
 /// MDNode and \a ValueAsMetadata.
@@ -135,7 +135,7 @@
   void reset() { Ref.reset(); }
   void reset(T *MD) { Ref.reset(static_cast<Metadata *>(MD)); }
 
-  /// \brief Check whether this has a trivial destructor.
+  /// Check whether this has a trivial destructor.
   bool hasTrivialDestructor() const { return Ref.hasTrivialDestructor(); }
 };
 
diff --git a/linux-x64/clang/include/llvm/IR/Type.h b/linux-x64/clang/include/llvm/IR/Type.h
index 39a7976..9c1f99d 100644
--- a/linux-x64/clang/include/llvm/IR/Type.h
+++ b/linux-x64/clang/include/llvm/IR/Type.h
@@ -208,6 +208,9 @@
     return getScalarType()->isIntegerTy(BitWidth);
   }
 
+  /// Return true if this is an integer type or a pointer type.
+  bool isIntOrPtrTy() const { return isIntegerTy() || isPointerTy(); }
+
   /// True if this is an instance of FunctionType.
   bool isFunctionTy() const { return getTypeID() == FunctionTyID; }
 
@@ -229,7 +232,7 @@
   /// Return true if this type could be converted with a lossless BitCast to
   /// type 'Ty'. For example, i8* to i32*. BitCasts are valid for types of the
   /// same size only where no re-interpretation of the bits is done.
-  /// @brief Determine if this type could be losslessly bitcast to Ty
+  /// Determine if this type could be losslessly bitcast to Ty
   bool canLosslesslyBitCastTo(Type *Ty) const;
 
   /// Return true if this type is empty, that is, it has no elements or all of
diff --git a/linux-x64/clang/include/llvm/IR/Use.h b/linux-x64/clang/include/llvm/IR/Use.h
index 0ac1393..25c44e0 100644
--- a/linux-x64/clang/include/llvm/IR/Use.h
+++ b/linux-x64/clang/include/llvm/IR/Use.h
@@ -36,7 +36,7 @@
 class User;
 class Value;
 
-/// \brief A Use represents the edge between a Value definition and its users.
+/// A Use represents the edge between a Value definition and its users.
 ///
 /// This is notionally a two-dimensional linked list. It supports traversing
 /// all of the uses for a particular value definition. It also supports jumping
@@ -57,7 +57,7 @@
 public:
   Use(const Use &U) = delete;
 
-  /// \brief Provide a fast substitute to std::swap<Use>
+  /// Provide a fast substitute to std::swap<Use>
   /// that also works with less standard-compliant compilers
   void swap(Use &RHS);
 
@@ -107,7 +107,7 @@
   operator Value *() const { return Val; }
   Value *get() const { return Val; }
 
-  /// \brief Returns the User that contains this Use.
+  /// Returns the User that contains this Use.
   ///
   /// For an instruction operand, for example, this will return the
   /// instruction.
@@ -123,16 +123,16 @@
 
   Use *getNext() const { return Next; }
 
-  /// \brief Return the operand # of this use in its User.
+  /// Return the operand # of this use in its User.
   unsigned getOperandNo() const;
 
-  /// \brief Initializes the waymarking tags on an array of Uses.
+  /// Initializes the waymarking tags on an array of Uses.
   ///
   /// This sets up the array of Uses such that getUser() can find the User from
   /// any of those Uses.
   static Use *initTags(Use *Start, Use *Stop);
 
-  /// \brief Destroys Use operands when the number of operands of
+  /// Destroys Use operands when the number of operands of
   /// a User changes.
   static void zap(Use *Start, const Use *Stop, bool del = false);
 
@@ -161,7 +161,7 @@
   }
 };
 
-/// \brief Allow clients to treat uses just like values when using
+/// Allow clients to treat uses just like values when using
 /// casting operators.
 template <> struct simplify_type<Use> {
   using SimpleType = Value *;
diff --git a/linux-x64/clang/include/llvm/IR/UseListOrder.h b/linux-x64/clang/include/llvm/IR/UseListOrder.h
index a8b394f..b6bb0f1 100644
--- a/linux-x64/clang/include/llvm/IR/UseListOrder.h
+++ b/linux-x64/clang/include/llvm/IR/UseListOrder.h
@@ -23,7 +23,7 @@
 class Function;
 class Value;
 
-/// \brief Structure to hold a use-list order.
+/// Structure to hold a use-list order.
 struct UseListOrder {
   const Value *V = nullptr;
   const Function *F = nullptr;
diff --git a/linux-x64/clang/include/llvm/IR/User.h b/linux-x64/clang/include/llvm/IR/User.h
index 9d30be0..aea3146 100644
--- a/linux-x64/clang/include/llvm/IR/User.h
+++ b/linux-x64/clang/include/llvm/IR/User.h
@@ -36,7 +36,7 @@
 template <typename T> class ArrayRef;
 template <typename T> class MutableArrayRef;
 
-/// \brief Compile-time customization of User operands.
+/// Compile-time customization of User operands.
 ///
 /// Customizes operand-related allocators and accessors.
 template <class>
@@ -81,13 +81,13 @@
            "Error in initializing hung off uses for User");
   }
 
-  /// \brief Allocate the array of Uses, followed by a pointer
+  /// Allocate the array of Uses, followed by a pointer
   /// (with bottom bit set) to the User.
   /// \param IsPhi identifies callers which are phi nodes and which need
   /// N BasicBlock* allocated along with N
   void allocHungoffUses(unsigned N, bool IsPhi = false);
 
-  /// \brief Grow the number of hung off uses.  Note that allocHungoffUses
+  /// Grow the number of hung off uses.  Note that allocHungoffUses
   /// should be called if there are no uses.
   void growHungoffUses(unsigned N, bool IsPhi = false);
 
@@ -97,26 +97,26 @@
 public:
   User(const User &) = delete;
 
-  /// \brief Free memory allocated for User and Use objects.
+  /// Free memory allocated for User and Use objects.
   void operator delete(void *Usr);
-  /// \brief Placement delete - required by std, called if the ctor throws.
+  /// Placement delete - required by std, called if the ctor throws.
   void operator delete(void *Usr, unsigned) {
-    // Note: If a subclass manipulates the information which is required to calculate the 
-    // Usr memory pointer, e.g. NumUserOperands, the operator delete of that subclass has 
+    // Note: If a subclass manipulates the information which is required to calculate the
+    // Usr memory pointer, e.g. NumUserOperands, the operator delete of that subclass has
     // to restore the changed information to the original value, since the dtor of that class
-    // is not called if the ctor fails.  
+    // is not called if the ctor fails.
     User::operator delete(Usr);
 
 #ifndef LLVM_ENABLE_EXCEPTIONS
     llvm_unreachable("Constructor throws?");
 #endif
   }
-  /// \brief Placement delete - required by std, called if the ctor throws.
+  /// Placement delete - required by std, called if the ctor throws.
   void operator delete(void *Usr, unsigned, bool) {
-    // Note: If a subclass manipulates the information which is required to calculate the 
-    // Usr memory pointer, e.g. NumUserOperands, the operator delete of that subclass has 
+    // Note: If a subclass manipulates the information which is required to calculate the
+    // Usr memory pointer, e.g. NumUserOperands, the operator delete of that subclass has
     // to restore the changed information to the original value, since the dtor of that class
-    // is not called if the ctor fails.  
+    // is not called if the ctor fails.
     User::operator delete(Usr);
 
 #ifndef LLVM_ENABLE_EXCEPTIONS
@@ -210,7 +210,7 @@
     NumUserOperands = NumOps;
   }
 
-  /// \brief Subclasses with hung off uses need to manage the operand count
+  /// Subclasses with hung off uses need to manage the operand count
   /// themselves.  In these instances, the operand count isn't used to find the
   /// OperandList, so there's no issue in having the operand count change.
   void setNumHungOffUseOperands(unsigned NumOps) {
@@ -242,7 +242,7 @@
     return const_op_range(op_begin(), op_end());
   }
 
-  /// \brief Iterator for directly iterating over the operand Values.
+  /// Iterator for directly iterating over the operand Values.
   struct value_op_iterator
       : iterator_adaptor_base<value_op_iterator, op_iterator,
                               std::random_access_iterator_tag, Value *,
@@ -284,7 +284,7 @@
     return make_range(value_op_begin(), value_op_end());
   }
 
-  /// \brief Drop all references to operands.
+  /// Drop all references to operands.
   ///
   /// This function is in charge of "letting go" of all objects that this User
   /// refers to.  This allows one to 'delete' a whole class at a time, even
@@ -297,7 +297,7 @@
       U.set(nullptr);
   }
 
-  /// \brief Replace uses of one Value with another.
+  /// Replace uses of one Value with another.
   ///
   /// Replaces all references to the "From" definition with references to the
   /// "To" definition.
diff --git a/linux-x64/clang/include/llvm/IR/Value.h b/linux-x64/clang/include/llvm/IR/Value.h
index d848fe9..4f3a45c 100644
--- a/linux-x64/clang/include/llvm/IR/Value.h
+++ b/linux-x64/clang/include/llvm/IR/Value.h
@@ -57,7 +57,7 @@
 //                                 Value Class
 //===----------------------------------------------------------------------===//
 
-/// \brief LLVM Value Representation
+/// LLVM Value Representation
 ///
 /// This is a very important LLVM class. It is the base class of all values
 /// computed by a program that may be used as operands to other values. Value is
@@ -83,7 +83,7 @@
   unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this?
 
 protected:
-  /// \brief Hold subclass data that can be dropped.
+  /// Hold subclass data that can be dropped.
   ///
   /// This member is similar to SubclassData, however it is for holding
   /// information which may be used to aid optimization, but which may be
@@ -91,7 +91,7 @@
   unsigned char SubclassOptionalData : 7;
 
 private:
-  /// \brief Hold arbitrary subclass data.
+  /// Hold arbitrary subclass data.
   ///
   /// This member is defined by this class, but is not used for anything.
   /// Subclasses can use it to hold whatever state they find useful.  This
@@ -99,7 +99,7 @@
   unsigned short SubclassData;
 
 protected:
-  /// \brief The number of operands in the subclass.
+  /// The number of operands in the subclass.
   ///
   /// This member is defined by this class, but not used for anything.
   /// Subclasses can use it to store their number of operands, if they have
@@ -173,7 +173,7 @@
     bool operator==(const user_iterator_impl &x) const { return UI == x.UI; }
     bool operator!=(const user_iterator_impl &x) const { return !operator==(x); }
 
-    /// \brief Returns true if this iterator is equal to user_end() on the value.
+    /// Returns true if this iterator is equal to user_end() on the value.
     bool atEnd() const { return *this == user_iterator_impl(); }
 
     user_iterator_impl &operator++() { // Preincrement
@@ -218,17 +218,17 @@
   /// Delete a pointer to a generic Value.
   void deleteValue();
 
-  /// \brief Support for debugging, callable in GDB: V->dump()
+  /// Support for debugging, callable in GDB: V->dump()
   void dump() const;
 
-  /// \brief Implement operator<< on Value.
+  /// Implement operator<< on Value.
   /// @{
   void print(raw_ostream &O, bool IsForDebug = false) const;
   void print(raw_ostream &O, ModuleSlotTracker &MST,
              bool IsForDebug = false) const;
   /// @}
 
-  /// \brief Print the name of this Value out to the specified raw_ostream.
+  /// Print the name of this Value out to the specified raw_ostream.
   ///
   /// This is useful when you just want to print 'int %reg126', not the
   /// instruction that generated it. If you specify a Module for context, then
@@ -241,52 +241,53 @@
                       ModuleSlotTracker &MST) const;
   /// @}
 
-  /// \brief All values are typed, get the type of this value.
+  /// All values are typed, get the type of this value.
   Type *getType() const { return VTy; }
 
-  /// \brief All values hold a context through their type.
+  /// All values hold a context through their type.
   LLVMContext &getContext() const;
 
-  // \brief All values can potentially be named.
+  // All values can potentially be named.
   bool hasName() const { return HasName; }
   ValueName *getValueName() const;
   void setValueName(ValueName *VN);
 
 private:
   void destroyValueName();
-  void doRAUW(Value *New, bool NoMetadata);
+  enum class ReplaceMetadataUses { No, Yes };
+  void doRAUW(Value *New, ReplaceMetadataUses);
   void setNameImpl(const Twine &Name);
 
 public:
-  /// \brief Return a constant reference to the value's name.
+  /// Return a constant reference to the value's name.
   ///
   /// This guaranteed to return the same reference as long as the value is not
   /// modified.  If the value has a name, this does a hashtable lookup, so it's
   /// not free.
   StringRef getName() const;
 
-  /// \brief Change the name of the value.
+  /// Change the name of the value.
   ///
   /// Choose a new unique name if the provided name is taken.
   ///
   /// \param Name The new name; or "" if the value's name should be removed.
   void setName(const Twine &Name);
 
-  /// \brief Transfer the name from V to this value.
+  /// Transfer the name from V to this value.
   ///
   /// After taking V's name, sets V's name to empty.
   ///
   /// \note It is an error to call V->takeName(V).
   void takeName(Value *V);
 
-  /// \brief Change all uses of this to point to a new Value.
+  /// Change all uses of this to point to a new Value.
   ///
   /// Go through the uses list for this definition and make each use point to
   /// "V" instead of "this".  After this completes, 'this's use list is
   /// guaranteed to be empty.
   void replaceAllUsesWith(Value *V);
 
-  /// \brief Change non-metadata uses of this to point to a new Value.
+  /// Change non-metadata uses of this to point to a new Value.
   ///
   /// Go through the uses list for this definition and make each use point to
   /// "V" instead of "this". This function skips metadata entries in the list.
@@ -299,12 +300,6 @@
   /// values or constant users.
   void replaceUsesOutsideBlock(Value *V, BasicBlock *BB);
 
-  /// replaceUsesExceptBlockAddr - Go through the uses list for this definition
-  /// and make each use point to "V" instead of "this" when the use is outside
-  /// the block. 'This's use list is expected to have at least one element.
-  /// Unlike replaceAllUsesWith this function skips blockaddr uses.
-  void replaceUsesExceptBlockAddr(Value *New);
-
   //----------------------------------------------------------------------
   // Methods for handling the chain of uses of this Value.
   //
@@ -411,7 +406,7 @@
     return materialized_users();
   }
 
-  /// \brief Return true if there is exactly one user of this value.
+  /// Return true if there is exactly one user of this value.
   ///
   /// This is specialized because it is a common request and does not require
   /// traversing the whole use list.
@@ -421,27 +416,27 @@
     return ++I == E;
   }
 
-  /// \brief Return true if this Value has exactly N users.
+  /// Return true if this Value has exactly N users.
   bool hasNUses(unsigned N) const;
 
-  /// \brief Return true if this value has N users or more.
+  /// Return true if this value has N users or more.
   ///
   /// This is logically equivalent to getNumUses() >= N.
   bool hasNUsesOrMore(unsigned N) const;
 
-  /// \brief Check if this value is used in the specified basic block.
+  /// Check if this value is used in the specified basic block.
   bool isUsedInBasicBlock(const BasicBlock *BB) const;
 
-  /// \brief This method computes the number of uses of this Value.
+  /// This method computes the number of uses of this Value.
   ///
   /// This is a linear time operation.  Use hasOneUse, hasNUses, or
   /// hasNUsesOrMore to check for specific values.
   unsigned getNumUses() const;
 
-  /// \brief This method should only be used by the Use class.
+  /// This method should only be used by the Use class.
   void addUse(Use &U) { U.addToList(&UseList); }
 
-  /// \brief Concrete subclass of this.
+  /// Concrete subclass of this.
   ///
   /// An enumeration for keeping track of the concrete subclass of Value that
   /// is actually instantiated. Values of this enumeration are kept in the
@@ -456,7 +451,7 @@
 #include "llvm/IR/Value.def"
   };
 
-  /// \brief Return an ID for the concrete type of this object.
+  /// Return an ID for the concrete type of this object.
   ///
   /// This is used to implement the classof checks.  This should not be used
   /// for any other purpose, as the values may change as LLVM evolves.  Also,
@@ -470,36 +465,36 @@
     return SubclassID;
   }
 
-  /// \brief Return the raw optional flags value contained in this value.
+  /// Return the raw optional flags value contained in this value.
   ///
   /// This should only be used when testing two Values for equivalence.
   unsigned getRawSubclassOptionalData() const {
     return SubclassOptionalData;
   }
 
-  /// \brief Clear the optional flags contained in this value.
+  /// Clear the optional flags contained in this value.
   void clearSubclassOptionalData() {
     SubclassOptionalData = 0;
   }
 
-  /// \brief Check the optional flags for equality.
+  /// Check the optional flags for equality.
   bool hasSameSubclassOptionalData(const Value *V) const {
     return SubclassOptionalData == V->SubclassOptionalData;
   }
 
-  /// \brief Return true if there is a value handle associated with this value.
+  /// Return true if there is a value handle associated with this value.
   bool hasValueHandle() const { return HasValueHandle; }
 
-  /// \brief Return true if there is metadata referencing this value.
+  /// Return true if there is metadata referencing this value.
   bool isUsedByMetadata() const { return IsUsedByMD; }
 
-  /// \brief Return true if this value is a swifterror value.
+  /// Return true if this value is a swifterror value.
   ///
   /// swifterror values can be either a function argument or an alloca with a
   /// swifterror attribute.
   bool isSwiftError() const;
 
-  /// \brief Strip off pointer casts, all-zero GEPs, and aliases.
+  /// Strip off pointer casts, all-zero GEPs, and aliases.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'.
@@ -509,18 +504,19 @@
                          static_cast<const Value *>(this)->stripPointerCasts());
   }
 
-  /// \brief Strip off pointer casts, all-zero GEPs, aliases and barriers.
+  /// Strip off pointer casts, all-zero GEPs, aliases and invariant group
+  /// info.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'. This function should be used only in
   /// Alias analysis.
-  const Value *stripPointerCastsAndBarriers() const;
-  Value *stripPointerCastsAndBarriers() {
+  const Value *stripPointerCastsAndInvariantGroups() const;
+  Value *stripPointerCastsAndInvariantGroups() {
     return const_cast<Value *>(
-        static_cast<const Value *>(this)->stripPointerCastsAndBarriers());
+        static_cast<const Value *>(this)->stripPointerCastsAndInvariantGroups());
   }
 
-  /// \brief Strip off pointer casts and all-zero GEPs.
+  /// Strip off pointer casts and all-zero GEPs.
   ///
   /// Returns the original uncasted value.  If this is called on a non-pointer
   /// value, it returns 'this'.
@@ -530,7 +526,7 @@
           static_cast<const Value *>(this)->stripPointerCastsNoFollowAliases());
   }
 
-  /// \brief Strip off pointer casts and all-constant inbounds GEPs.
+  /// Strip off pointer casts and all-constant inbounds GEPs.
   ///
   /// Returns the original pointer value.  If this is called on a non-pointer
   /// value, it returns 'this'.
@@ -540,7 +536,7 @@
               static_cast<const Value *>(this)->stripInBoundsConstantOffsets());
   }
 
-  /// \brief Accumulate offsets from \a stripInBoundsConstantOffsets().
+  /// Accumulate offsets from \a stripInBoundsConstantOffsets().
   ///
   /// Stores the resulting constant offset stripped into the APInt provided.
   /// The provided APInt will be extended or truncated as needed to be the
@@ -555,7 +551,7 @@
         ->stripAndAccumulateInBoundsConstantOffsets(DL, Offset));
   }
 
-  /// \brief Strip off pointer casts and inbounds GEPs.
+  /// Strip off pointer casts and inbounds GEPs.
   ///
   /// Returns the original pointer value.  If this is called on a non-pointer
   /// value, it returns 'this'.
@@ -565,7 +561,7 @@
                       static_cast<const Value *>(this)->stripInBoundsOffsets());
   }
 
-  /// \brief Returns the number of bytes known to be dereferenceable for the
+  /// Returns the number of bytes known to be dereferenceable for the
   /// pointer value.
   ///
   /// If CanBeNull is set by this function the pointer can either be null or be
@@ -573,13 +569,13 @@
   uint64_t getPointerDereferenceableBytes(const DataLayout &DL,
                                           bool &CanBeNull) const;
 
-  /// \brief Returns an alignment of the pointer value.
+  /// Returns an alignment of the pointer value.
   ///
   /// Returns an alignment which is either specified explicitly, e.g. via
   /// align attribute of a function argument, or guaranteed by DataLayout.
   unsigned getPointerAlignment(const DataLayout &DL) const;
 
-  /// \brief Translate PHI node to its predecessor from the given basic block.
+  /// Translate PHI node to its predecessor from the given basic block.
   ///
   /// If this value is a PHI node with CurBB as its parent, return the value in
   /// the PHI node corresponding to PredBB.  If not, return ourself.  This is
@@ -592,14 +588,14 @@
              static_cast<const Value *>(this)->DoPHITranslation(CurBB, PredBB));
   }
 
-  /// \brief The maximum alignment for instructions.
+  /// The maximum alignment for instructions.
   ///
   /// This is the greatest alignment value supported by load, store, and alloca
   /// instructions, and global values.
   static const unsigned MaxAlignmentExponent = 29;
   static const unsigned MaximumAlignment = 1u << MaxAlignmentExponent;
 
-  /// \brief Mutate the type of this Value to be of the specified type.
+  /// Mutate the type of this Value to be of the specified type.
   ///
   /// Note that this is an extremely dangerous operation which can create
   /// completely invalid IR very easily.  It is strongly recommended that you
@@ -609,17 +605,17 @@
     VTy = Ty;
   }
 
-  /// \brief Sort the use-list.
+  /// Sort the use-list.
   ///
   /// Sorts the Value's use-list by Cmp using a stable mergesort.  Cmp is
   /// expected to compare two \a Use references.
   template <class Compare> void sortUseList(Compare Cmp);
 
-  /// \brief Reverse the use-list.
+  /// Reverse the use-list.
   void reverseUseList();
 
 private:
-  /// \brief Merge two lists together.
+  /// Merge two lists together.
   ///
   /// Merges \c L and \c R using \c Cmp.  To enable stable sorts, always pushes
   /// "equal" items from L before items from R.
diff --git a/linux-x64/clang/include/llvm/IR/ValueHandle.h b/linux-x64/clang/include/llvm/IR/ValueHandle.h
index b45cc7b..d94472c 100644
--- a/linux-x64/clang/include/llvm/IR/ValueHandle.h
+++ b/linux-x64/clang/include/llvm/IR/ValueHandle.h
@@ -22,7 +22,7 @@
 
 namespace llvm {
 
-/// \brief This is the common base class of value handles.
+/// This is the common base class of value handles.
 ///
 /// ValueHandle's are smart pointers to Value's that have special behavior when
 /// the value is deleted or ReplaceAllUsesWith'd.  See the specific handles
@@ -31,7 +31,7 @@
   friend class Value;
 
 protected:
-  /// \brief This indicates what sub class the handle actually is.
+  /// This indicates what sub class the handle actually is.
   ///
   /// This is to avoid having a vtable for the light-weight handle pointers. The
   /// fully general Callback version does have a vtable.
@@ -101,10 +101,10 @@
            V != DenseMapInfo<Value *>::getTombstoneKey();
   }
 
-  /// \brief Remove this ValueHandle from its current use list.
+  /// Remove this ValueHandle from its current use list.
   void RemoveFromUseList();
 
-  /// \brief Clear the underlying pointer without clearing the use list.
+  /// Clear the underlying pointer without clearing the use list.
   ///
   /// This should only be used if a derived class has manually removed the
   /// handle from the use list.
@@ -121,20 +121,20 @@
   HandleBaseKind getKind() const { return PrevPair.getInt(); }
   void setPrevPtr(ValueHandleBase **Ptr) { PrevPair.setPointer(Ptr); }
 
-  /// \brief Add this ValueHandle to the use list for V.
+  /// Add this ValueHandle to the use list for V.
   ///
   /// List is the address of either the head of the list or a Next node within
   /// the existing use list.
   void AddToExistingUseList(ValueHandleBase **List);
 
-  /// \brief Add this ValueHandle to the use list after Node.
+  /// Add this ValueHandle to the use list after Node.
   void AddToExistingUseListAfter(ValueHandleBase *Node);
 
-  /// \brief Add this ValueHandle to the use list for V.
+  /// Add this ValueHandle to the use list for V.
   void AddToUseList();
 };
 
-/// \brief A nullable Value handle that is nullable.
+/// A nullable Value handle that is nullable.
 ///
 /// This is a value handle that points to a value, and nulls itself
 /// out if that value is deleted.
@@ -172,7 +172,7 @@
   static SimpleType getSimplifiedValue(const WeakVH &WVH) { return WVH; }
 };
 
-/// \brief Value handle that is nullable, but tries to track the Value.
+/// Value handle that is nullable, but tries to track the Value.
 ///
 /// This is a value handle that tries hard to point to a Value, even across
 /// RAUW operations, but will null itself out if the value is destroyed.  this
@@ -219,7 +219,7 @@
   }
 };
 
-/// \brief Value handle that asserts if the Value is deleted.
+/// Value handle that asserts if the Value is deleted.
 ///
 /// This is a Value Handle that points to a value and asserts out if the value
 /// is destroyed while the handle is still live.  This is very useful for
@@ -318,7 +318,7 @@
 #endif
 };
 
-/// \brief Value handle that tracks a Value across RAUW.
+/// Value handle that tracks a Value across RAUW.
 ///
 /// TrackingVH is designed for situations where a client needs to hold a handle
 /// to a Value (or subclass) across some operations which may move that value,
@@ -379,7 +379,7 @@
   ValueTy &operator*() const { return *getValPtr(); }
 };
 
-/// \brief Value handle with callbacks on RAUW and destruction.
+/// Value handle with callbacks on RAUW and destruction.
 ///
 /// This is a value handle that allows subclasses to define callbacks that run
 /// when the underlying Value has RAUW called on it or is destroyed.  This
@@ -405,7 +405,7 @@
     return getValPtr();
   }
 
-  /// \brief Callback for Value destruction.
+  /// Callback for Value destruction.
   ///
   /// Called when this->getValPtr() is destroyed, inside ~Value(), so you
   /// may call any non-virtual Value method on getValPtr(), but no subclass
@@ -418,7 +418,7 @@
   /// Value that's being destroyed.
   virtual void deleted() { setValPtr(nullptr); }
 
-  /// \brief Callback for Value RAUW.
+  /// Callback for Value RAUW.
   ///
   /// Called when this->getValPtr()->replaceAllUsesWith(new_value) is called,
   /// _before_ any of the uses have actually been replaced.  If WeakTrackingVH
diff --git a/linux-x64/clang/include/llvm/IR/ValueMap.h b/linux-x64/clang/include/llvm/IR/ValueMap.h
index 11d5823..e7e3391 100644
--- a/linux-x64/clang/include/llvm/IR/ValueMap.h
+++ b/linux-x64/clang/include/llvm/IR/ValueMap.h
@@ -106,8 +106,12 @@
       : Map(NumInitBuckets), Data() {}
   explicit ValueMap(const ExtraData &Data, unsigned NumInitBuckets = 64)
       : Map(NumInitBuckets), Data(Data) {}
+  // ValueMap can't be copied nor moved, beucase the callbacks store pointer
+  // to it.
   ValueMap(const ValueMap &) = delete;
+  ValueMap(ValueMap &&) = delete;
   ValueMap &operator=(const ValueMap &) = delete;
+  ValueMap &operator=(ValueMap &&) = delete;
 
   bool hasMD() const { return bool(MDMap); }
   MDMapT &MD() {
diff --git a/linux-x64/clang/include/llvm/IR/ValueSymbolTable.h b/linux-x64/clang/include/llvm/IR/ValueSymbolTable.h
index 26cbbfa..012e717 100644
--- a/linux-x64/clang/include/llvm/IR/ValueSymbolTable.h
+++ b/linux-x64/clang/include/llvm/IR/ValueSymbolTable.h
@@ -48,13 +48,13 @@
 /// @name Types
 /// @{
 public:
-  /// @brief A mapping of names to values.
+  /// A mapping of names to values.
   using ValueMap = StringMap<Value*>;
 
-  /// @brief An iterator over a ValueMap.
+  /// An iterator over a ValueMap.
   using iterator = ValueMap::iterator;
 
-  /// @brief A const_iterator over a ValueMap.
+  /// A const_iterator over a ValueMap.
   using const_iterator = ValueMap::const_iterator;
 
 /// @}
@@ -71,35 +71,35 @@
   /// This method finds the value with the given \p Name in the
   /// the symbol table.
   /// @returns the value associated with the \p Name
-  /// @brief Lookup a named Value.
+  /// Lookup a named Value.
   Value *lookup(StringRef Name) const { return vmap.lookup(Name); }
 
   /// @returns true iff the symbol table is empty
-  /// @brief Determine if the symbol table is empty
+  /// Determine if the symbol table is empty
   inline bool empty() const { return vmap.empty(); }
 
-  /// @brief The number of name/type pairs is returned.
+  /// The number of name/type pairs is returned.
   inline unsigned size() const { return unsigned(vmap.size()); }
 
   /// This function can be used from the debugger to display the
   /// content of the symbol table while debugging.
-  /// @brief Print out symbol table on stderr
+  /// Print out symbol table on stderr
   void dump() const;
 
 /// @}
 /// @name Iteration
 /// @{
 
-  /// @brief Get an iterator that from the beginning of the symbol table.
+  /// Get an iterator that from the beginning of the symbol table.
   inline iterator begin() { return vmap.begin(); }
 
-  /// @brief Get a const_iterator that from the beginning of the symbol table.
+  /// Get a const_iterator that from the beginning of the symbol table.
   inline const_iterator begin() const { return vmap.begin(); }
 
-  /// @brief Get an iterator to the end of the symbol table.
+  /// Get an iterator to the end of the symbol table.
   inline iterator end() { return vmap.end(); }
 
-  /// @brief Get a const_iterator to the end of the symbol table.
+  /// Get a const_iterator to the end of the symbol table.
   inline const_iterator end() const { return vmap.end(); }
 
   /// @}
@@ -111,7 +111,7 @@
   /// This method adds the provided value \p N to the symbol table.  The Value
   /// must have a name which is used to place the value in the symbol table.
   /// If the inserted name conflicts, this renames the value.
-  /// @brief Add a named value to the symbol table
+  /// Add a named value to the symbol table
   void reinsertValue(Value *V);
 
   /// createValueName - This method attempts to create a value name and insert
diff --git a/linux-x64/clang/include/llvm/IR/Verifier.h b/linux-x64/clang/include/llvm/IR/Verifier.h
index bc10f33..7255132 100644
--- a/linux-x64/clang/include/llvm/IR/Verifier.h
+++ b/linux-x64/clang/include/llvm/IR/Verifier.h
@@ -80,7 +80,7 @@
   bool visitTBAAMetadata(Instruction &I, const MDNode *MD);
 };
 
-/// \brief Check a function for errors, useful for use when debugging a
+/// Check a function for errors, useful for use when debugging a
 /// pass.
 ///
 /// If there are no errors, the function returns false. If an error is found,
@@ -88,7 +88,7 @@
 /// returned.
 bool verifyFunction(const Function &F, raw_ostream *OS = nullptr);
 
-/// \brief Check a module for errors.
+/// Check a module for errors.
 ///
 /// If there are no errors, the function returns false. If an error is
 /// found, a message describing the error is written to OS (if
@@ -124,7 +124,7 @@
 /// "recovered" from by stripping the debug info.
 bool verifyModule(bool &BrokenDebugInfo, const Module &M, raw_ostream *OS);
 
-/// \brief Create a verifier pass.
+/// Create a verifier pass.
 ///
 /// Check a module or function for validity. This is essentially a pass wrapped
 /// around the above verifyFunction and verifyModule routines and
diff --git a/linux-x64/clang/include/llvm/InitializePasses.h b/linux-x64/clang/include/llvm/InitializePasses.h
index 5aa5112..d67b1d4 100644
--- a/linux-x64/clang/include/llvm/InitializePasses.h
+++ b/linux-x64/clang/include/llvm/InitializePasses.h
@@ -37,6 +37,9 @@
 /// Initialize all passes linked into the InstCombine library.
 void initializeInstCombine(PassRegistry&);
 
+/// Initialize all passes linked into the AggressiveInstCombine library.
+void initializeAggressiveInstCombine(PassRegistry&);
+
 /// Initialize all passes linked into the IPO library.
 void initializeIPO(PassRegistry&);
 
@@ -82,29 +85,26 @@
 void initializeBranchRelaxationPass(PassRegistry&);
 void initializeBreakCriticalEdgesPass(PassRegistry&);
 void initializeBreakFalseDepsPass(PassRegistry&);
-void initializeCallSiteSplittingLegacyPassPass(PassRegistry&);
 void initializeCFGOnlyPrinterLegacyPassPass(PassRegistry&);
 void initializeCFGOnlyViewerLegacyPassPass(PassRegistry&);
 void initializeCFGPrinterLegacyPassPass(PassRegistry&);
 void initializeCFGSimplifyPassPass(PassRegistry&);
 void initializeCFGViewerLegacyPassPass(PassRegistry&);
+void initializeCFIInstrInserterPass(PassRegistry&);
 void initializeCFLAndersAAWrapperPassPass(PassRegistry&);
 void initializeCFLSteensAAWrapperPassPass(PassRegistry&);
 void initializeCallGraphDOTPrinterPass(PassRegistry&);
 void initializeCallGraphPrinterLegacyPassPass(PassRegistry&);
 void initializeCallGraphViewerPass(PassRegistry&);
 void initializeCallGraphWrapperPassPass(PassRegistry&);
+void initializeCallSiteSplittingLegacyPassPass(PassRegistry&);
+void initializeCalledValuePropagationLegacyPassPass(PassRegistry &);
 void initializeCodeGenPreparePass(PassRegistry&);
 void initializeConstantHoistingLegacyPassPass(PassRegistry&);
-void initializeCalledValuePropagationLegacyPassPass(PassRegistry &);
 void initializeConstantMergeLegacyPassPass(PassRegistry&);
 void initializeConstantPropagationPass(PassRegistry&);
 void initializeCorrelatedValuePropagationPass(PassRegistry&);
 void initializeCostModelAnalysisPass(PassRegistry&);
-void initializeEarlyMachineLICMPass(PassRegistry&);
-void initializeEarlyTailDuplicatePass(PassRegistry&);
-void initializeEntryExitInstrumenterPass(PassRegistry&);
-void initializePostInlineEntryExitInstrumenterPass(PassRegistry&);
 void initializeCrossDSOCFIPass(PassRegistry&);
 void initializeDAEPass(PassRegistry&);
 void initializeDAHPass(PassRegistry&);
@@ -118,8 +118,8 @@
 void initializeDependenceAnalysisPass(PassRegistry&);
 void initializeDependenceAnalysisWrapperPassPass(PassRegistry&);
 void initializeDetectDeadLanesPass(PassRegistry&);
-void initializeDivergenceAnalysisPass(PassRegistry&);
 void initializeDivRemPairsLegacyPassPass(PassRegistry&);
+void initializeDivergenceAnalysisPass(PassRegistry&);
 void initializeDomOnlyPrinterPass(PassRegistry&);
 void initializeDomOnlyViewerPass(PassRegistry&);
 void initializeDomPrinterPass(PassRegistry&);
@@ -130,9 +130,12 @@
 void initializeEarlyCSELegacyPassPass(PassRegistry&);
 void initializeEarlyCSEMemSSALegacyPassPass(PassRegistry&);
 void initializeEarlyIfConverterPass(PassRegistry&);
+void initializeEarlyMachineLICMPass(PassRegistry&);
+void initializeEarlyTailDuplicatePass(PassRegistry&);
 void initializeEdgeBundlesPass(PassRegistry&);
 void initializeEfficiencySanitizerPass(PassRegistry&);
 void initializeEliminateAvailableExternallyLegacyPassPass(PassRegistry&);
+void initializeEntryExitInstrumenterPass(PassRegistry&);
 void initializeExpandISelPseudosPass(PassRegistry&);
 void initializeExpandMemCmpPassPass(PassRegistry&);
 void initializeExpandPostRAPass(PassRegistry&);
@@ -158,21 +161,22 @@
 void initializeGlobalSplitPass(PassRegistry&);
 void initializeGlobalsAAWrapperPassPass(PassRegistry&);
 void initializeGuardWideningLegacyPassPass(PassRegistry&);
+void initializeHWAddressSanitizerPass(PassRegistry&);
 void initializeIPCPPass(PassRegistry&);
 void initializeIPSCCPLegacyPassPass(PassRegistry&);
+void initializeIRCELegacyPassPass(PassRegistry&);
 void initializeIRTranslatorPass(PassRegistry&);
 void initializeIVUsersWrapperPassPass(PassRegistry&);
 void initializeIfConverterPass(PassRegistry&);
 void initializeImplicitNullChecksPass(PassRegistry&);
 void initializeIndVarSimplifyLegacyPassPass(PassRegistry&);
 void initializeIndirectBrExpandPassPass(PassRegistry&);
-void initializeIRCELegacyPassPass(PassRegistry&);
 void initializeInferAddressSpacesPass(PassRegistry&);
 void initializeInferFunctionAttrsLegacyPassPass(PassRegistry&);
 void initializeInlineCostAnalysisPass(PassRegistry&);
 void initializeInstCountPass(PassRegistry&);
 void initializeInstNamerPass(PassRegistry&);
-void initializeInstSimplifierPass(PassRegistry&);
+void initializeInstSimplifyLegacyPassPass(PassRegistry &);
 void initializeInstrProfilingLegacyPassPass(PassRegistry&);
 void initializeInstructionCombiningPassPass(PassRegistry&);
 void initializeInstructionSelectPass(PassRegistry&);
@@ -208,8 +212,10 @@
 void initializeLoopDeletionLegacyPassPass(PassRegistry&);
 void initializeLoopDistributeLegacyPass(PassRegistry&);
 void initializeLoopExtractorPass(PassRegistry&);
+void initializeLoopGuardWideningLegacyPassPass(PassRegistry&);
 void initializeLoopIdiomRecognizeLegacyPassPass(PassRegistry&);
 void initializeLoopInfoWrapperPassPass(PassRegistry&);
+void initializeLoopInstSimplifyLegacyPassPass(PassRegistry&);
 void initializeLoopInterchangePass(PassRegistry&);
 void initializeLoopLoadEliminationPass(PassRegistry&);
 void initializeLoopPassPass(PassRegistry&);
@@ -219,6 +225,7 @@
 void initializeLoopSimplifyCFGLegacyPassPass(PassRegistry&);
 void initializeLoopSimplifyPass(PassRegistry&);
 void initializeLoopStrengthReducePass(PassRegistry&);
+void initializeLoopUnrollAndJamPass(PassRegistry&);
 void initializeLoopUnrollPass(PassRegistry&);
 void initializeLoopUnswitchPass(PassRegistry&);
 void initializeLoopVectorizePass(PassRegistry&);
@@ -232,6 +239,7 @@
 void initializeLowerInvokeLegacyPassPass(PassRegistry&);
 void initializeLowerSwitchPass(PassRegistry&);
 void initializeLowerTypeTestsPass(PassRegistry&);
+void initializeMIRCanonicalizerPass(PassRegistry &);
 void initializeMIRPrintingPassPass(PassRegistry&);
 void initializeMachineBlockFrequencyInfoPass(PassRegistry&);
 void initializeMachineBlockPlacementPass(PassRegistry&);
@@ -290,6 +298,7 @@
 void initializePartiallyInlineLibCallsLegacyPassPass(PassRegistry&);
 void initializePatchableFunctionPass(PassRegistry&);
 void initializePeepholeOptimizerPass(PassRegistry&);
+void initializePhiValuesWrapperPassPass(PassRegistry&);
 void initializePhysicalRegisterUsageInfoPass(PassRegistry&);
 void initializePlaceBackedgeSafepointsImplPass(PassRegistry&);
 void initializePlaceSafepointsPass(PassRegistry&);
@@ -298,6 +307,7 @@
 void initializePostDomPrinterPass(PassRegistry&);
 void initializePostDomViewerPass(PassRegistry&);
 void initializePostDominatorTreeWrapperPassPass(PassRegistry&);
+void initializePostInlineEntryExitInstrumenterPass(PassRegistry&);
 void initializePostMachineSchedulerPass(PassRegistry&);
 void initializePostOrderFunctionAttrsLegacyPassPass(PassRegistry&);
 void initializePostRAHazardRecognizerPass(PassRegistry&);
@@ -313,12 +323,14 @@
 void initializePromoteLegacyPassPass(PassRegistry&);
 void initializePruneEHPass(PassRegistry&);
 void initializeRABasicPass(PassRegistry&);
-void initializeRegAllocFastPass(PassRegistry&);
 void initializeRAGreedyPass(PassRegistry&);
-void initializeReassociateLegacyPassPass(PassRegistry&);
-void initializeRegBankSelectPass(PassRegistry&);
 void initializeReachingDefAnalysisPass(PassRegistry&);
+void initializeReassociateLegacyPassPass(PassRegistry&);
+void initializeRegAllocFastPass(PassRegistry&);
+void initializeRegBankSelectPass(PassRegistry&);
 void initializeRegToMemPass(PassRegistry&);
+void initializeRegUsageInfoCollectorPass(PassRegistry&);
+void initializeRegUsageInfoPropagationPass(PassRegistry&);
 void initializeRegionInfoPassPass(PassRegistry&);
 void initializeRegionOnlyPrinterPass(PassRegistry&);
 void initializeRegionOnlyViewerPass(PassRegistry&);
@@ -330,12 +342,12 @@
 void initializeReversePostOrderFunctionAttrsLegacyPassPass(PassRegistry&);
 void initializeRewriteStatepointsForGCLegacyPassPass(PassRegistry &);
 void initializeRewriteSymbolsLegacyPassPass(PassRegistry&);
-void initializeSafepointIRVerifierPass(PassRegistry&);
 void initializeSCCPLegacyPassPass(PassRegistry&);
 void initializeSCEVAAWrapperPassPass(PassRegistry&);
 void initializeSLPVectorizerPass(PassRegistry&);
 void initializeSROALegacyPassPass(PassRegistry&);
 void initializeSafeStackLegacyPassPass(PassRegistry&);
+void initializeSafepointIRVerifierPass(PassRegistry&);
 void initializeSampleProfileLoaderLegacyPassPass(PassRegistry&);
 void initializeSanitizerCoverageModulePass(PassRegistry&);
 void initializeScalarEvolutionWrapperPassPass(PassRegistry&);
@@ -367,7 +379,6 @@
 void initializeStripNonLineTableDebugInfoPass(PassRegistry&);
 void initializeStripSymbolsPass(PassRegistry&);
 void initializeStructurizeCFGPass(PassRegistry&);
-void initializeHWAddressSanitizerPass(PassRegistry&);
 void initializeTailCallElimPass(PassRegistry&);
 void initializeTailDuplicatePass(PassRegistry&);
 void initializeTargetLibraryInfoWrapperPassPass(PassRegistry&);
@@ -383,12 +394,12 @@
 void initializeVerifierLegacyPassPass(PassRegistry&);
 void initializeVirtRegMapPass(PassRegistry&);
 void initializeVirtRegRewriterPass(PassRegistry&);
+void initializeWasmEHPreparePass(PassRegistry&);
 void initializeWholeProgramDevirtPass(PassRegistry&);
 void initializeWinEHPreparePass(PassRegistry&);
 void initializeWriteBitcodePassPass(PassRegistry&);
 void initializeWriteThinLTOBitcodePass(PassRegistry&);
 void initializeXRayInstrumentationPass(PassRegistry&);
-void initializeMIRCanonicalizerPass(PassRegistry &);
 
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/LTO/Config.h b/linux-x64/clang/include/llvm/LTO/Config.h
index 4bd981c..57bba5e 100644
--- a/linux-x64/clang/include/llvm/LTO/Config.h
+++ b/linux-x64/clang/include/llvm/LTO/Config.h
@@ -73,6 +73,14 @@
   /// Sample PGO profile path.
   std::string SampleProfile;
 
+  /// The directory to store .dwo files.
+  std::string DwoDir;
+
+  /// The path to write a .dwo file to. This should generally only be used when
+  /// running an individual backend directly via thinBackend(), as otherwise
+  /// all .dwo files will be written to the same path.
+  std::string DwoPath;
+
   /// Optimization remarks file path.
   std::string RemarksFilename = "";
 
@@ -82,6 +90,9 @@
   /// Whether to emit the pass manager debuggging informations.
   bool DebugPassManager = false;
 
+  /// Statistics output file path.
+  std::string StatsFile;
+
   bool ShouldDiscardValueNames = true;
   DiagnosticHandlerFunction DiagHandler;
 
diff --git a/linux-x64/clang/include/llvm/LinkAllIR.h b/linux-x64/clang/include/llvm/LinkAllIR.h
index 9a9f3d3..4f4af71 100644
--- a/linux-x64/clang/include/llvm/LinkAllIR.h
+++ b/linux-x64/clang/include/llvm/LinkAllIR.h
@@ -44,7 +44,7 @@
       llvm::LLVMContext Context;
       (void)new llvm::Module("", Context);
       (void)new llvm::UnreachableInst(Context);
-      (void)    llvm::createVerifierPass(); 
+      (void)    llvm::createVerifierPass();
     }
   } ForceVMCoreLinking;
 }
diff --git a/linux-x64/clang/include/llvm/LinkAllPasses.h b/linux-x64/clang/include/llvm/LinkAllPasses.h
index 2d7956d..bd432c5 100644
--- a/linux-x64/clang/include/llvm/LinkAllPasses.h
+++ b/linux-x64/clang/include/llvm/LinkAllPasses.h
@@ -39,14 +39,17 @@
 #include "llvm/IR/Function.h"
 #include "llvm/IR/IRPrintingPasses.h"
 #include "llvm/Support/Valgrind.h"
+#include "llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h"
 #include "llvm/Transforms/IPO.h"
 #include "llvm/Transforms/IPO/AlwaysInliner.h"
 #include "llvm/Transforms/IPO/FunctionAttrs.h"
+#include "llvm/Transforms/InstCombine/InstCombine.h"
 #include "llvm/Transforms/Instrumentation.h"
 #include "llvm/Transforms/Instrumentation/BoundsChecking.h"
 #include "llvm/Transforms/ObjCARC.h"
 #include "llvm/Transforms/Scalar.h"
 #include "llvm/Transforms/Scalar/GVN.h"
+#include "llvm/Transforms/Scalar/InstSimplifyPass.h"
 #include "llvm/Transforms/Utils.h"
 #include "llvm/Transforms/Utils/SymbolRewriter.h"
 #include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
@@ -65,6 +68,7 @@
 
       (void) llvm::createAAEvalPass();
       (void) llvm::createAggressiveDCEPass();
+      (void) llvm::createAggressiveInstCombinerPass();
       (void) llvm::createBitTrackingDCEPass();
       (void) llvm::createArgumentPromotionPass();
       (void) llvm::createAlignmentFromAssumptionsPass();
@@ -108,10 +112,12 @@
       (void) llvm::createGlobalOptimizerPass();
       (void) llvm::createGlobalsAAWrapperPass();
       (void) llvm::createGuardWideningPass();
+      (void) llvm::createLoopGuardWideningPass();
       (void) llvm::createIPConstantPropagationPass();
       (void) llvm::createIPSCCPPass();
       (void) llvm::createInductiveRangeCheckEliminationPass();
       (void) llvm::createIndVarSimplifyPass();
+      (void) llvm::createInstSimplifyLegacyPass();
       (void) llvm::createInstructionCombiningPass();
       (void) llvm::createInternalizePass();
       (void) llvm::createLCSSAPass();
@@ -126,6 +132,7 @@
       (void) llvm::createLoopStrengthReducePass();
       (void) llvm::createLoopRerollPass();
       (void) llvm::createLoopUnrollPass();
+      (void) llvm::createLoopUnrollAndJamPass();
       (void) llvm::createLoopUnswitchPass();
       (void) llvm::createLoopVersioningLICMPass();
       (void) llvm::createLoopIdiomPass();
@@ -196,7 +203,6 @@
       (void) llvm::createLowerAtomicPass();
       (void) llvm::createCorrelatedValuePropagationPass();
       (void) llvm::createMemDepPrinter();
-      (void) llvm::createInstructionSimplifierPass();
       (void) llvm::createLoopVectorizePass();
       (void) llvm::createSLPVectorizerPass();
       (void) llvm::createLoadStoreVectorizerPass();
diff --git a/linux-x64/clang/include/llvm/Linker/Linker.h b/linux-x64/clang/include/llvm/Linker/Linker.h
index 628e011..7776c72 100644
--- a/linux-x64/clang/include/llvm/Linker/Linker.h
+++ b/linux-x64/clang/include/llvm/Linker/Linker.h
@@ -34,7 +34,7 @@
 
   Linker(Module &M);
 
-  /// \brief Link \p Src into the composite.
+  /// Link \p Src into the composite.
   ///
   /// Passing OverrideSymbols as true will have symbols from Src
   /// shadow those in the Dest.
diff --git a/linux-x64/clang/include/llvm/MC/MCAsmBackend.h b/linux-x64/clang/include/llvm/MC/MCAsmBackend.h
index a8a5850..030d3c0 100644
--- a/linux-x64/clang/include/llvm/MC/MCAsmBackend.h
+++ b/linux-x64/clang/include/llvm/MC/MCAsmBackend.h
@@ -16,6 +16,7 @@
 #include "llvm/MC/MCDirectives.h"
 #include "llvm/MC/MCFixup.h"
 #include "llvm/MC/MCFragment.h"
+#include "llvm/Support/Endian.h"
 #include <cstdint>
 #include <memory>
 
@@ -29,6 +30,7 @@
 class MCFragment;
 class MCInst;
 class MCObjectStreamer;
+class MCObjectTargetWriter;
 class MCObjectWriter;
 struct MCCodePaddingContext;
 class MCRelaxableFragment;
@@ -41,21 +43,31 @@
   std::unique_ptr<MCCodePadder> CodePadder;
 
 protected: // Can only create subclasses.
-  MCAsmBackend();
-  MCAsmBackend(std::unique_ptr<MCCodePadder> TargetCodePadder);
+  MCAsmBackend(support::endianness Endian);
 
 public:
   MCAsmBackend(const MCAsmBackend &) = delete;
   MCAsmBackend &operator=(const MCAsmBackend &) = delete;
   virtual ~MCAsmBackend();
 
+  const support::endianness Endian;
+
   /// lifetime management
   virtual void reset() {}
 
   /// Create a new MCObjectWriter instance for use by the assembler backend to
   /// emit the final object file.
-  virtual std::unique_ptr<MCObjectWriter>
-  createObjectWriter(raw_pwrite_stream &OS) const = 0;
+  std::unique_ptr<MCObjectWriter>
+  createObjectWriter(raw_pwrite_stream &OS) const;
+
+  /// Create an MCObjectWriter that writes two object files: a .o file which is
+  /// linked into the final program and a .dwo file which is used by debuggers.
+  /// This function is only supported with ELF targets.
+  std::unique_ptr<MCObjectWriter>
+  createDwoObjectWriter(raw_pwrite_stream &OS, raw_pwrite_stream &DwoOS) const;
+
+  virtual std::unique_ptr<MCObjectTargetWriter>
+  createObjectTargetWriter() const = 0;
 
   /// \name Target Fixup Interfaces
   /// @{
@@ -80,9 +92,16 @@
   /// the offset specified by the fixup and following the fixup kind as
   /// appropriate. Errors (such as an out of range fixup value) should be
   /// reported via \p Ctx.
+  /// The  \p STI is present only for fragments of type MCRelaxableFragment and
+  /// MCDataFragment with hasInstructions() == true.
   virtual void applyFixup(const MCAssembler &Asm, const MCFixup &Fixup,
                           const MCValue &Target, MutableArrayRef<char> Data,
-                          uint64_t Value, bool IsResolved) const = 0;
+                          uint64_t Value, bool IsResolved,
+                          const MCSubtargetInfo *STI) const = 0;
+
+  /// Check whether the given target requires emitting differences of two
+  /// symbols as a set of relocations.
+  virtual bool requiresDiffExpressionRelocations() const { return false; }
 
   /// @}
 
@@ -92,14 +111,18 @@
   /// Check whether the given instruction may need relaxation.
   ///
   /// \param Inst - The instruction to test.
-  virtual bool mayNeedRelaxation(const MCInst &Inst) const = 0;
+  /// \param STI - The MCSubtargetInfo in effect when the instruction was
+  /// encoded.
+  virtual bool mayNeedRelaxation(const MCInst &Inst,
+                                 const MCSubtargetInfo &STI) const = 0;
 
   /// Target specific predicate for whether a given fixup requires the
   /// associated instruction to be relaxed.
   virtual bool fixupNeedsRelaxationAdvanced(const MCFixup &Fixup, bool Resolved,
                                             uint64_t Value,
                                             const MCRelaxableFragment *DF,
-                                            const MCAsmLayout &Layout) const;
+                                            const MCAsmLayout &Layout,
+                                            const bool WasForced) const;
 
   /// Simple predicate for targets where !Resolved implies requiring relaxation
   virtual bool fixupNeedsRelaxation(const MCFixup &Fixup, uint64_t Value,
@@ -127,7 +150,7 @@
   /// target cannot generate such a sequence, it should return an error.
   ///
   /// \return - True on success.
-  virtual bool writeNopData(uint64_t Count, MCObjectWriter *OW) const = 0;
+  virtual bool writeNopData(raw_ostream &OS, uint64_t Count) const = 0;
 
   /// Give backend an opportunity to finish layout after relaxation
   virtual void finishLayout(MCAssembler const &Asm,
@@ -136,7 +159,7 @@
   /// Handle any target-specific assembler flags. By default, do nothing.
   virtual void handleAssemblerFlag(MCAssemblerFlag Flag) {}
 
-  /// \brief Generate the compact unwind encoding for the CFI instructions.
+  /// Generate the compact unwind encoding for the CFI instructions.
   virtual uint32_t
       generateCompactUnwindEncoding(ArrayRef<MCCFIInstruction>) const {
     return 0;
diff --git a/linux-x64/clang/include/llvm/MC/MCAsmInfo.h b/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
index c538c46..120fb8f 100644
--- a/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCAsmInfo.h
@@ -84,6 +84,15 @@
   /// directive for emitting thread local BSS Symbols.  Default is false.
   bool HasMachoTBSSDirective = false;
 
+  /// True if this is a non-GNU COFF target. The COFF port of the GNU linker
+  /// doesn't handle associative comdats in the way that we would like to use
+  /// them.
+  bool HasCOFFAssociativeComdats = false;
+
+  /// True if this is a non-GNU COFF target. For GNU targets, we don't generate
+  /// constants into comdat sections.
+  bool HasCOFFComdatConstants = false;
+
   /// This is the maximum possible length of an instruction, which is needed to
   /// compute the size of an inline asm.  Defaults to 4.
   unsigned MaxInstLength = 4;
@@ -344,6 +353,10 @@
   /// For example, foo(plt) instead of foo@plt.  Defaults to false.
   bool UseParensForSymbolVariant = false;
 
+  /// True if the target supports flags in ".loc" directive, false if only
+  /// location is allowed.
+  bool SupportsExtendedDwarfLocDirective = true;
+
   //===--- Prologue State ----------------------------------------------===//
 
   std::vector<MCCFIInstruction> InitialFrameState;
@@ -416,7 +429,7 @@
     return nullptr;
   }
 
-  /// \brief True if the section is atomized using the symbols in it.
+  /// True if the section is atomized using the symbols in it.
   /// This is false if the section is not atomized at all (most ELF sections) or
   /// if it is atomized based on its contents (MachO' __TEXT,__cstring for
   /// example).
@@ -459,6 +472,8 @@
 
   bool hasMachoZeroFillDirective() const { return HasMachoZeroFillDirective; }
   bool hasMachoTBSSDirective() const { return HasMachoTBSSDirective; }
+  bool hasCOFFAssociativeComdats() const { return HasCOFFAssociativeComdats; }
+  bool hasCOFFComdatConstants() const { return HasCOFFComdatConstants; }
   unsigned getMaxInstLength() const { return MaxInstLength; }
   unsigned getMinInstAlignment() const { return MinInstAlignment; }
   bool getDollarIsPC() const { return DollarIsPC; }
@@ -579,6 +594,9 @@
   bool doDwarfFDESymbolsUseAbsDiff() const { return DwarfFDESymbolsUseAbsDiff; }
   bool useDwarfRegNumForCFI() const { return DwarfRegNumForCFI; }
   bool useParensForSymbolVariant() const { return UseParensForSymbolVariant; }
+  bool supportsExtendedDwarfLocDirective() const {
+    return SupportsExtendedDwarfLocDirective;
+  }
 
   void addInitialFrameState(const MCCFIInstruction &Inst) {
     InitialFrameState.push_back(Inst);
diff --git a/linux-x64/clang/include/llvm/MC/MCAsmLayout.h b/linux-x64/clang/include/llvm/MC/MCAsmLayout.h
index 1b20d5b..b711db3 100644
--- a/linux-x64/clang/include/llvm/MC/MCAsmLayout.h
+++ b/linux-x64/clang/include/llvm/MC/MCAsmLayout.h
@@ -37,11 +37,11 @@
   /// lower ordinal will be valid.
   mutable DenseMap<const MCSection *, MCFragment *> LastValidFragment;
 
-  /// \brief Make sure that the layout for the given fragment is valid, lazily
+  /// Make sure that the layout for the given fragment is valid, lazily
   /// computing it if necessary.
   void ensureValid(const MCFragment *F) const;
 
-  /// \brief Is the layout for this fragment valid?
+  /// Is the layout for this fragment valid?
   bool isFragmentValid(const MCFragment *F) const;
 
 public:
@@ -50,12 +50,12 @@
   /// Get the assembler object this is a layout for.
   MCAssembler &getAssembler() const { return Assembler; }
 
-  /// \brief Invalidate the fragments starting with F because it has been
+  /// Invalidate the fragments starting with F because it has been
   /// resized. The fragment's size should have already been updated, but
   /// its bundle padding will be recomputed.
   void invalidateFragmentsFrom(MCFragment *F);
 
-  /// \brief Perform layout for a single fragment, assuming that the previous
+  /// Perform layout for a single fragment, assuming that the previous
   /// fragment has already been laid out correctly, and the parent section has
   /// been initialized.
   void layoutFragment(MCFragment *Fragment);
@@ -72,31 +72,31 @@
   /// \name Fragment Layout Data
   /// @{
 
-  /// \brief Get the offset of the given fragment inside its containing section.
+  /// Get the offset of the given fragment inside its containing section.
   uint64_t getFragmentOffset(const MCFragment *F) const;
 
   /// @}
   /// \name Utility Functions
   /// @{
 
-  /// \brief Get the address space size of the given section, as it effects
+  /// Get the address space size of the given section, as it effects
   /// layout. This may differ from the size reported by \see getSectionSize() by
   /// not including section tail padding.
   uint64_t getSectionAddressSize(const MCSection *Sec) const;
 
-  /// \brief Get the data size of the given section, as emitted to the object
+  /// Get the data size of the given section, as emitted to the object
   /// file. This may include additional padding, or be 0 for virtual sections.
   uint64_t getSectionFileSize(const MCSection *Sec) const;
 
-  /// \brief Get the offset of the given symbol, as computed in the current
+  /// Get the offset of the given symbol, as computed in the current
   /// layout.
   /// \return True on success.
   bool getSymbolOffset(const MCSymbol &S, uint64_t &Val) const;
 
-  /// \brief Variant that reports a fatal error if the offset is not computable.
+  /// Variant that reports a fatal error if the offset is not computable.
   uint64_t getSymbolOffset(const MCSymbol &S) const;
 
-  /// \brief If this symbol is equivalent to A + Constant, return A.
+  /// If this symbol is equivalent to A + Constant, return A.
   const MCSymbol *getBaseSymbol(const MCSymbol &Symbol) const;
 
   /// @}
diff --git a/linux-x64/clang/include/llvm/MC/MCAssembler.h b/linux-x64/clang/include/llvm/MC/MCAssembler.h
index b91b044..0f9499d 100644
--- a/linux-x64/clang/include/llvm/MC/MCAssembler.h
+++ b/linux-x64/clang/include/llvm/MC/MCAssembler.h
@@ -99,11 +99,11 @@
 private:
   MCContext &Context;
 
-  MCAsmBackend &Backend;
+  std::unique_ptr<MCAsmBackend> Backend;
 
-  MCCodeEmitter &Emitter;
+  std::unique_ptr<MCCodeEmitter> Emitter;
 
-  MCObjectWriter &Writer;
+  std::unique_ptr<MCObjectWriter> Writer;
 
   SectionListType Sections;
 
@@ -130,7 +130,7 @@
   // refactoring too.
   mutable SmallPtrSet<const MCSymbol *, 32> ThumbFuncs;
 
-  /// \brief The bundle alignment size currently set in the assembler.
+  /// The bundle alignment size currently set in the assembler.
   ///
   /// By default it's 0, which means bundling is disabled.
   unsigned BundleAlignSize;
@@ -162,12 +162,14 @@
   /// evaluates to.
   /// \param Value [out] On return, the value of the fixup as currently laid
   /// out.
+  /// \param WasForced [out] On return, the value in the fixup is set to the
+  /// correct value if WasForced is true, even if evaluateFixup returns false.
   /// \return Whether the fixup value was fully resolved. This is true if the
   /// \p Value result is fixed, otherwise the value may change due to
   /// relocation.
   bool evaluateFixup(const MCAsmLayout &Layout, const MCFixup &Fixup,
                      const MCFragment *DF, MCValue &Target,
-                     uint64_t &Value) const;
+                     uint64_t &Value, bool &WasForced) const;
 
   /// Check whether a fixup can be satisfied, or whether it needs to be relaxed
   /// (increased in size, in order to hold its value correctly).
@@ -178,11 +180,11 @@
   bool fragmentNeedsRelaxation(const MCRelaxableFragment *IF,
                                const MCAsmLayout &Layout) const;
 
-  /// \brief Perform one layout iteration and return true if any offsets
+  /// Perform one layout iteration and return true if any offsets
   /// were adjusted.
   bool layoutOnce(MCAsmLayout &Layout);
 
-  /// \brief Perform one layout iteration of the given section and return true
+  /// Perform one layout iteration of the given section and return true
   /// if any offsets were adjusted.
   bool layoutSectionOnce(MCAsmLayout &Layout, MCSection &Sec);
 
@@ -214,8 +216,9 @@
   // concrete and require clients to pass in a target like object. The other
   // option is to make this abstract, and have targets provide concrete
   // implementations as we do with AsmParser.
-  MCAssembler(MCContext &Context, MCAsmBackend &Backend,
-              MCCodeEmitter &Emitter, MCObjectWriter &Writer);
+  MCAssembler(MCContext &Context, std::unique_ptr<MCAsmBackend> Backend,
+              std::unique_ptr<MCCodeEmitter> Emitter,
+              std::unique_ptr<MCObjectWriter> Writer);
   MCAssembler(const MCAssembler &) = delete;
   MCAssembler &operator=(const MCAssembler &) = delete;
   ~MCAssembler();
@@ -235,8 +238,8 @@
   /// defining a separate atom.
   bool isSymbolLinkerVisible(const MCSymbol &SD) const;
 
-  /// Emit the section contents using the given object writer.
-  void writeSectionData(const MCSection *Section,
+  /// Emit the section contents to \p OS.
+  void writeSectionData(raw_ostream &OS, const MCSection *Section,
                         const MCAsmLayout &Layout) const;
 
   /// Check whether a given symbol has been flagged with .thumb_func.
@@ -274,11 +277,17 @@
 
   MCContext &getContext() const { return Context; }
 
-  MCAsmBackend &getBackend() const { return Backend; }
+  MCAsmBackend *getBackendPtr() const { return Backend.get(); }
 
-  MCCodeEmitter &getEmitter() const { return Emitter; }
+  MCCodeEmitter *getEmitterPtr() const { return Emitter.get(); }
 
-  MCObjectWriter &getWriter() const { return Writer; }
+  MCObjectWriter *getWriterPtr() const { return Writer.get(); }
+
+  MCAsmBackend &getBackend() const { return *Backend; }
+
+  MCCodeEmitter &getEmitter() const { return *Emitter; }
+
+  MCObjectWriter &getWriter() const { return *Writer; }
 
   MCDwarfLineTableParams getDWARFLinetableParams() const { return LTParams; }
   void setDWARFLinetableParams(MCDwarfLineTableParams P) { LTParams = P; }
@@ -409,6 +418,13 @@
   const MCLOHContainer &getLOHContainer() const {
     return const_cast<MCAssembler *>(this)->getLOHContainer();
   }
+
+  struct CGProfileEntry {
+    const MCSymbolRefExpr *From;
+    const MCSymbolRefExpr *To;
+    uint64_t Count;
+  };
+  std::vector<CGProfileEntry> CGProfile;
   /// @}
   /// \name Backend Data Access
   /// @{
@@ -424,21 +440,22 @@
       FileNames.push_back(FileName);
   }
 
-  /// \brief Write the necessary bundle padding to the given object writer.
+  /// Write the necessary bundle padding to \p OS.
   /// Expects a fragment \p F containing instructions and its size \p FSize.
-  void writeFragmentPadding(const MCFragment &F, uint64_t FSize,
-                            MCObjectWriter *OW) const;
+  void writeFragmentPadding(raw_ostream &OS, const MCEncodedFragment &F,
+                            uint64_t FSize) const;
 
   /// @}
 
   void dump() const;
 };
 
-/// \brief Compute the amount of padding required before the fragment \p F to
+/// Compute the amount of padding required before the fragment \p F to
 /// obey bundling restrictions, where \p FOffset is the fragment's offset in
 /// its section and \p FSize is the fragment's size.
-uint64_t computeBundlePadding(const MCAssembler &Assembler, const MCFragment *F,
-                              uint64_t FOffset, uint64_t FSize);
+uint64_t computeBundlePadding(const MCAssembler &Assembler,
+                              const MCEncodedFragment *F, uint64_t FOffset,
+                              uint64_t FSize);
 
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/MC/MCCodePadder.h b/linux-x64/clang/include/llvm/MC/MCCodePadder.h
index b7772b6..4dde6bf 100644
--- a/linux-x64/clang/include/llvm/MC/MCCodePadder.h
+++ b/linux-x64/clang/include/llvm/MC/MCCodePadder.h
@@ -28,7 +28,6 @@
 
 struct MCCodePaddingContext {
   bool IsPaddingActive;
-  bool IsBasicBlockInsideInnermostLoop;
   bool IsBasicBlockReachableViaFallthrough;
   bool IsBasicBlockReachableViaBranch;
 };
diff --git a/linux-x64/clang/include/llvm/MC/MCCodeView.h b/linux-x64/clang/include/llvm/MC/MCCodeView.h
index c8f1451..1d9e3c6 100644
--- a/linux-x64/clang/include/llvm/MC/MCCodeView.h
+++ b/linux-x64/clang/include/llvm/MC/MCCodeView.h
@@ -27,7 +27,7 @@
 class MCStreamer;
 class CodeViewContext;
 
-/// \brief Instances of this class represent the information from a
+/// Instances of this class represent the information from a
 /// .cv_loc directive.
 class MCCVLoc {
   uint32_t FunctionId;
@@ -50,13 +50,13 @@
 public:
   unsigned getFunctionId() const { return FunctionId; }
 
-  /// \brief Get the FileNum of this MCCVLoc.
+  /// Get the FileNum of this MCCVLoc.
   unsigned getFileNum() const { return FileNum; }
 
-  /// \brief Get the Line of this MCCVLoc.
+  /// Get the Line of this MCCVLoc.
   unsigned getLine() const { return Line; }
 
-  /// \brief Get the Column of this MCCVLoc.
+  /// Get the Column of this MCCVLoc.
   unsigned getColumn() const { return Column; }
 
   bool isPrologueEnd() const { return PrologueEnd; }
@@ -64,13 +64,13 @@
 
   void setFunctionId(unsigned FID) { FunctionId = FID; }
 
-  /// \brief Set the FileNum of this MCCVLoc.
+  /// Set the FileNum of this MCCVLoc.
   void setFileNum(unsigned fileNum) { FileNum = fileNum; }
 
-  /// \brief Set the Line of this MCCVLoc.
+  /// Set the Line of this MCCVLoc.
   void setLine(unsigned line) { Line = line; }
 
-  /// \brief Set the Column of this MCCVLoc.
+  /// Set the Column of this MCCVLoc.
   void setColumn(unsigned column) {
     assert(column <= UINT16_MAX);
     Column = column;
@@ -80,7 +80,7 @@
   void setIsStmt(bool IS) { IsStmt = IS; }
 };
 
-/// \brief Instances of this class represent the line information for
+/// Instances of this class represent the line information for
 /// the CodeView line table entries.  Which is created after a machine
 /// instruction is assembled and uses an address from a temporary label
 /// created at the current address in the current section and the info from
@@ -201,7 +201,7 @@
 
   bool isValidCVFileNumber(unsigned FileNumber);
 
-  /// \brief Add a line entry.
+  /// Add a line entry.
   void addLineEntry(const MCCVLineEntry &LineEntry);
 
   std::vector<MCCVLineEntry> getFunctionLineEntries(unsigned FuncId);
diff --git a/linux-x64/clang/include/llvm/MC/MCContext.h b/linux-x64/clang/include/llvm/MC/MCContext.h
index c110ffd..a712e2d 100644
--- a/linux-x64/clang/include/llvm/MC/MCContext.h
+++ b/linux-x64/clang/include/llvm/MC/MCContext.h
@@ -137,6 +137,9 @@
     /// The compilation directory to use for DW_AT_comp_dir.
     SmallString<128> CompilationDir;
 
+    /// Prefix replacement map for source file information.
+    std::map<const std::string, const std::string> DebugPrefixMap;
+
     /// The main file name if passed in explicitly.
     std::string MainFileName;
 
@@ -272,7 +275,7 @@
                                        unsigned UniqueID,
                                        const MCSymbolELF *Associated);
 
-    /// \brief Map of currently defined macros.
+    /// Map of currently defined macros.
     StringMap<MCAsmMacro> MacroMap;
 
   public:
@@ -295,6 +298,10 @@
 
     CodeViewContext &getCVContext();
 
+    /// Clear the current cv_loc, if there is one. Avoids lazily creating a
+    /// CodeViewContext if none is needed.
+    void clearCVLocSeen();
+
     void setAllowTemporaryLabels(bool Value) { AllowTemporaryLabels = Value; }
     void setUseNamesOnTempLabels(bool Value) { UseNamesOnTempLabels = Value; }
 
@@ -338,7 +345,7 @@
     /// Gets a symbol that will be defined to the final stack offset of a local
     /// variable after codegen.
     ///
-    /// \param Idx - The index of a local variable passed to @llvm.localescape.
+    /// \param Idx - The index of a local variable passed to \@llvm.localescape.
     MCSymbol *getOrCreateFrameAllocSymbol(StringRef FuncName, unsigned Idx);
 
     MCSymbol *getOrCreateParentFrameOffsetSymbol(StringRef FuncName);
@@ -478,20 +485,32 @@
     /// \name Dwarf Management
     /// @{
 
-    /// \brief Get the compilation directory for DW_AT_comp_dir
+    /// Get the compilation directory for DW_AT_comp_dir
     /// The compilation directory should be set with \c setCompilationDir before
     /// calling this function. If it is unset, an empty string will be returned.
     StringRef getCompilationDir() const { return CompilationDir; }
 
-    /// \brief Set the compilation directory for DW_AT_comp_dir
+    /// Set the compilation directory for DW_AT_comp_dir
     void setCompilationDir(StringRef S) { CompilationDir = S.str(); }
 
-    /// \brief Get the main file name for use in error messages and debug
+    /// Get the debug prefix map.
+    const std::map<const std::string, const std::string> &
+    getDebugPrefixMap() const {
+      return DebugPrefixMap;
+    }
+
+    /// Add an entry to the debug prefix map.
+    void addDebugPrefixMapEntry(const std::string &From, const std::string &To);
+
+    // Remaps all debug directory paths in-place as per the debug prefix map.
+    void RemapDebugPaths();
+
+    /// Get the main file name for use in error messages and debug
     /// info. This can be set to ensure we've got the correct file name
     /// after preprocessing or for -save-temps.
     const std::string &getMainFileName() const { return MainFileName; }
 
-    /// \brief Set the main file name and override the default.
+    /// Set the main file name and override the default.
     void setMainFileName(StringRef S) { MainFileName = S; }
 
     /// Creates an entry in the dwarf file and directory tables.
@@ -546,6 +565,11 @@
                                             Source);
     }
 
+    /// Reports whether MD5 checksum usage is consistent (all-or-none).
+    bool isDwarfMD5UsageConsistent(unsigned CUID) const {
+      return getMCDwarfLineTable(CUID).isMD5UsageConsistent();
+    }
+
     /// Saves the information from the currently parsed dwarf .loc directive
     /// and sets DwarfLocSeen.  When the next instruction is assembled an entry
     /// in the line number table with this information and the address of the
@@ -649,7 +673,7 @@
 
 // operator new and delete aren't allowed inside namespaces.
 // The throw specifications are mandated by the standard.
-/// \brief Placement new for using the MCContext's allocator.
+/// Placement new for using the MCContext's allocator.
 ///
 /// This placement form of operator new uses the MCContext's allocator for
 /// obtaining memory. It is a non-throwing new, which means that it returns
@@ -675,7 +699,7 @@
                           size_t Alignment = 8) noexcept {
   return C.allocate(Bytes, Alignment);
 }
-/// \brief Placement delete companion to the new above.
+/// Placement delete companion to the new above.
 ///
 /// This operator is just a companion to the new above. There is no way of
 /// invoking it directly; see the new operator for more details. This operator
@@ -709,7 +733,7 @@
   return C.allocate(Bytes, Alignment);
 }
 
-/// \brief Placement delete[] companion to the new[] above.
+/// Placement delete[] companion to the new[] above.
 ///
 /// This operator is just a companion to the new[] above. There is no way of
 /// invoking it directly; see the new[] operator for more details. This operator
diff --git a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h
index bd3e5d4..df909a0 100644
--- a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h
+++ b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCExternalSymbolizer.h
@@ -22,7 +22,7 @@
 
 namespace llvm {
 
-/// \brief Symbolize using user-provided, C API, callbacks.
+/// Symbolize using user-provided, C API, callbacks.
 ///
 /// See llvm-c/Disassembler.h.
 class MCExternalSymbolizer : public MCSymbolizer {
diff --git a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCRelocationInfo.h b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCRelocationInfo.h
index 7836e88..6030ae6 100644
--- a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCRelocationInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCRelocationInfo.h
@@ -21,7 +21,7 @@
 class MCContext;
 class MCExpr;
 
-/// \brief Create MCExprs from relocations found in an object file.
+/// Create MCExprs from relocations found in an object file.
 class MCRelocationInfo {
 protected:
   MCContext &Ctx;
@@ -32,7 +32,7 @@
   MCRelocationInfo &operator=(const MCRelocationInfo &) = delete;
   virtual ~MCRelocationInfo();
 
-  /// \brief Create an MCExpr for the target-specific \p VariantKind.
+  /// Create an MCExpr for the target-specific \p VariantKind.
   /// The VariantKinds are defined in llvm-c/Disassembler.h.
   /// Used by MCExternalSymbolizer.
   /// \returns If possible, an MCExpr corresponding to VariantKind, else 0.
diff --git a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCSymbolizer.h b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCSymbolizer.h
index d85cf5e..0bfa569 100644
--- a/linux-x64/clang/include/llvm/MC/MCDisassembler/MCSymbolizer.h
+++ b/linux-x64/clang/include/llvm/MC/MCDisassembler/MCSymbolizer.h
@@ -27,7 +27,7 @@
 class MCInst;
 class raw_ostream;
 
-/// \brief Symbolize and annotate disassembled instructions.
+/// Symbolize and annotate disassembled instructions.
 ///
 /// For now this mimics the old symbolization logic (from both ARM and x86), that
 /// relied on user-provided (C API) callbacks to do the actual symbol lookup in
@@ -42,7 +42,7 @@
   std::unique_ptr<MCRelocationInfo> RelInfo;
 
 public:
-  /// \brief Construct an MCSymbolizer, taking ownership of \p RelInfo.
+  /// Construct an MCSymbolizer, taking ownership of \p RelInfo.
   MCSymbolizer(MCContext &Ctx, std::unique_ptr<MCRelocationInfo> RelInfo)
     : Ctx(Ctx), RelInfo(std::move(RelInfo)) {
   }
@@ -51,7 +51,7 @@
   MCSymbolizer &operator=(const MCSymbolizer &) = delete;
   virtual ~MCSymbolizer();
 
-  /// \brief Try to add a symbolic operand instead of \p Value to the MCInst.
+  /// Try to add a symbolic operand instead of \p Value to the MCInst.
   ///
   /// Instead of having a difficult to read immediate, a symbolic operand would
   /// represent this immediate in a more understandable way, for instance as a
@@ -70,7 +70,7 @@
                                         bool IsBranch, uint64_t Offset,
                                         uint64_t InstSize) = 0;
 
-  /// \brief Try to add a comment on the PC-relative load.
+  /// Try to add a comment on the PC-relative load.
   /// For instance, in Mach-O, this is used to add annotations to instructions
   /// that use C string literals, as found in __cstring.
   virtual void tryAddingPcLoadReferenceComment(raw_ostream &cStream,
diff --git a/linux-x64/clang/include/llvm/MC/MCDwarf.h b/linux-x64/clang/include/llvm/MC/MCDwarf.h
index 5cdb176..2bfaf19 100644
--- a/linux-x64/clang/include/llvm/MC/MCDwarf.h
+++ b/linux-x64/clang/include/llvm/MC/MCDwarf.h
@@ -42,16 +42,16 @@
 class SMLoc;
 class SourceMgr;
 
-/// \brief Instances of this class represent the name of the dwarf
+/// Instances of this class represent the name of the dwarf
 /// .file directive and its associated dwarf file number in the MC file,
 /// and MCDwarfFile's are created and uniqued by the MCContext class where
 /// the file number for each is its index into the vector of DwarfFiles (note
 /// index 0 is not used and not a valid dwarf file number).
 struct MCDwarfFile {
-  // \brief The base name of the file without its directory path.
+  // The base name of the file without its directory path.
   std::string Name;
 
-  // \brief The index into the list of directory names for this file name.
+  // The index into the list of directory names for this file name.
   unsigned DirIndex;
 
   /// The MD5 checksum, if there is one. Non-owning pointer to data allocated
@@ -63,7 +63,7 @@
   Optional<StringRef> Source;
 };
 
-/// \brief Instances of this class represent the information from a
+/// Instances of this class represent the information from a
 /// dwarf .loc directive.
 class MCDwarfLoc {
   uint32_t FileNum;
@@ -95,55 +95,55 @@
   // for an MCDwarfLoc object.
 
 public:
-  /// \brief Get the FileNum of this MCDwarfLoc.
+  /// Get the FileNum of this MCDwarfLoc.
   unsigned getFileNum() const { return FileNum; }
 
-  /// \brief Get the Line of this MCDwarfLoc.
+  /// Get the Line of this MCDwarfLoc.
   unsigned getLine() const { return Line; }
 
-  /// \brief Get the Column of this MCDwarfLoc.
+  /// Get the Column of this MCDwarfLoc.
   unsigned getColumn() const { return Column; }
 
-  /// \brief Get the Flags of this MCDwarfLoc.
+  /// Get the Flags of this MCDwarfLoc.
   unsigned getFlags() const { return Flags; }
 
-  /// \brief Get the Isa of this MCDwarfLoc.
+  /// Get the Isa of this MCDwarfLoc.
   unsigned getIsa() const { return Isa; }
 
-  /// \brief Get the Discriminator of this MCDwarfLoc.
+  /// Get the Discriminator of this MCDwarfLoc.
   unsigned getDiscriminator() const { return Discriminator; }
 
-  /// \brief Set the FileNum of this MCDwarfLoc.
+  /// Set the FileNum of this MCDwarfLoc.
   void setFileNum(unsigned fileNum) { FileNum = fileNum; }
 
-  /// \brief Set the Line of this MCDwarfLoc.
+  /// Set the Line of this MCDwarfLoc.
   void setLine(unsigned line) { Line = line; }
 
-  /// \brief Set the Column of this MCDwarfLoc.
+  /// Set the Column of this MCDwarfLoc.
   void setColumn(unsigned column) {
     assert(column <= UINT16_MAX);
     Column = column;
   }
 
-  /// \brief Set the Flags of this MCDwarfLoc.
+  /// Set the Flags of this MCDwarfLoc.
   void setFlags(unsigned flags) {
     assert(flags <= UINT8_MAX);
     Flags = flags;
   }
 
-  /// \brief Set the Isa of this MCDwarfLoc.
+  /// Set the Isa of this MCDwarfLoc.
   void setIsa(unsigned isa) {
     assert(isa <= UINT8_MAX);
     Isa = isa;
   }
 
-  /// \brief Set the Discriminator of this MCDwarfLoc.
+  /// Set the Discriminator of this MCDwarfLoc.
   void setDiscriminator(unsigned discriminator) {
     Discriminator = discriminator;
   }
 };
 
-/// \brief Instances of this class represent the line information for
+/// Instances of this class represent the line information for
 /// the dwarf line table entries.  Which is created after a machine
 /// instruction is assembled and uses an address from a temporary label
 /// created at the current address in the current section and the info from
@@ -168,13 +168,13 @@
   static void Make(MCObjectStreamer *MCOS, MCSection *Section);
 };
 
-/// \brief Instances of this class represent the line information for a compile
+/// Instances of this class represent the line information for a compile
 /// unit where machine instructions have been assembled after seeing .loc
 /// directives.  This is the information used to build the dwarf line
 /// table for a section.
 class MCLineSection {
 public:
-  // \brief Add an entry to this MCLineSection's line entries.
+  // Add an entry to this MCLineSection's line entries.
   void addLineEntry(const MCDwarfLineEntry &LineEntry, MCSection *Sec) {
     MCLineDivisions[Sec].push_back(LineEntry);
   }
@@ -213,11 +213,14 @@
   SmallVector<std::string, 3> MCDwarfDirs;
   SmallVector<MCDwarfFile, 3> MCDwarfFiles;
   StringMap<unsigned> SourceIdMap;
-  StringRef CompilationDir;
+  std::string CompilationDir;
   MCDwarfFile RootFile;
-  bool HasMD5 = false;
   bool HasSource = false;
+private:
+  bool HasAllMD5 = true;
+  bool HasAnyMD5 = false;
 
+public:
   MCDwarfLineTableHeader() = default;
 
   Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName,
@@ -231,11 +234,22 @@
   Emit(MCStreamer *MCOS, MCDwarfLineTableParams Params,
        ArrayRef<char> SpecialOpcodeLengths,
        Optional<MCDwarfLineStr> &LineStr) const;
+  void resetMD5Usage() {
+    HasAllMD5 = true;
+    HasAnyMD5 = false;
+  }
+  void trackMD5Usage(bool MD5Used) {
+    HasAllMD5 &= MD5Used;
+    HasAnyMD5 |= MD5Used;
+  }
+  bool isMD5UsageConsistent() const {
+    return MCDwarfFiles.empty() || (HasAllMD5 == HasAnyMD5);
+  }
 
 private:
   void emitV2FileDirTables(MCStreamer *MCOS) const;
-  void emitV5FileDirTables(MCStreamer *MCOS,
-                           Optional<MCDwarfLineStr> &LineStr) const;
+  void emitV5FileDirTables(MCStreamer *MCOS, Optional<MCDwarfLineStr> &LineStr,
+                           StringRef CtxCompilationDir) const;
 };
 
 class MCDwarfDwoLineTable {
@@ -251,7 +265,7 @@
     Header.RootFile.DirIndex = 0;
     Header.RootFile.Checksum = Checksum;
     Header.RootFile.Source = Source;
-    Header.HasMD5 = (Checksum != nullptr);
+    Header.trackMD5Usage(Checksum);
     Header.HasSource = Source.hasValue();
   }
 
@@ -294,10 +308,22 @@
     Header.RootFile.DirIndex = 0;
     Header.RootFile.Checksum = Checksum;
     Header.RootFile.Source = Source;
-    Header.HasMD5 = (Checksum != nullptr);
+    Header.trackMD5Usage(Checksum);
     Header.HasSource = Source.hasValue();
   }
 
+  void resetRootFile() {
+    assert(Header.MCDwarfFiles.empty());
+    Header.RootFile.Name.clear();
+    Header.resetMD5Usage();
+    Header.HasSource = false;
+  }
+
+  bool hasRootFile() const { return !Header.RootFile.Name.empty(); }
+
+  // Report whether MD5 usage has been consistent (all-or-none).
+  bool isMD5UsageConsistent() const { return Header.isMD5UsageConsistent(); }
+
   MCSymbol *getLabel() const {
     return Header.Label;
   }
@@ -336,6 +362,13 @@
   static void Encode(MCContext &Context, MCDwarfLineTableParams Params,
                      int64_t LineDelta, uint64_t AddrDelta, raw_ostream &OS);
 
+  /// Utility function to encode a Dwarf pair of LineDelta and AddrDeltas using
+  /// fixed length operands.
+  static bool FixedEncode(MCContext &Context,
+                          MCDwarfLineTableParams Params,
+                          int64_t LineDelta, uint64_t AddrDelta,
+                          raw_ostream &OS, uint32_t *Offset, uint32_t *Size);
+
   /// Utility function to emit the encoding to a streamer.
   static void Emit(MCStreamer *MCOS, MCDwarfLineTableParams Params,
                    int64_t LineDelta, uint64_t AddrDelta);
@@ -422,41 +455,41 @@
   }
 
 public:
-  /// \brief .cfi_def_cfa defines a rule for computing CFA as: take address from
+  /// .cfi_def_cfa defines a rule for computing CFA as: take address from
   /// Register and add Offset to it.
   static MCCFIInstruction createDefCfa(MCSymbol *L, unsigned Register,
                                        int Offset) {
     return MCCFIInstruction(OpDefCfa, L, Register, -Offset, "");
   }
 
-  /// \brief .cfi_def_cfa_register modifies a rule for computing CFA. From now
+  /// .cfi_def_cfa_register modifies a rule for computing CFA. From now
   /// on Register will be used instead of the old one. Offset remains the same.
   static MCCFIInstruction createDefCfaRegister(MCSymbol *L, unsigned Register) {
     return MCCFIInstruction(OpDefCfaRegister, L, Register, 0, "");
   }
 
-  /// \brief .cfi_def_cfa_offset modifies a rule for computing CFA. Register
+  /// .cfi_def_cfa_offset modifies a rule for computing CFA. Register
   /// remains the same, but offset is new. Note that it is the absolute offset
   /// that will be added to a defined register to the compute CFA address.
   static MCCFIInstruction createDefCfaOffset(MCSymbol *L, int Offset) {
     return MCCFIInstruction(OpDefCfaOffset, L, 0, -Offset, "");
   }
 
-  /// \brief .cfi_adjust_cfa_offset Same as .cfi_def_cfa_offset, but
+  /// .cfi_adjust_cfa_offset Same as .cfi_def_cfa_offset, but
   /// Offset is a relative value that is added/subtracted from the previous
   /// offset.
   static MCCFIInstruction createAdjustCfaOffset(MCSymbol *L, int Adjustment) {
     return MCCFIInstruction(OpAdjustCfaOffset, L, 0, Adjustment, "");
   }
 
-  /// \brief .cfi_offset Previous value of Register is saved at offset Offset
+  /// .cfi_offset Previous value of Register is saved at offset Offset
   /// from CFA.
   static MCCFIInstruction createOffset(MCSymbol *L, unsigned Register,
                                        int Offset) {
     return MCCFIInstruction(OpOffset, L, Register, Offset, "");
   }
 
-  /// \brief .cfi_rel_offset Previous value of Register is saved at offset
+  /// .cfi_rel_offset Previous value of Register is saved at offset
   /// Offset from the current CFA register. This is transformed to .cfi_offset
   /// using the known displacement of the CFA register from the CFA.
   static MCCFIInstruction createRelOffset(MCSymbol *L, unsigned Register,
@@ -464,54 +497,54 @@
     return MCCFIInstruction(OpRelOffset, L, Register, Offset, "");
   }
 
-  /// \brief .cfi_register Previous value of Register1 is saved in
+  /// .cfi_register Previous value of Register1 is saved in
   /// register Register2.
   static MCCFIInstruction createRegister(MCSymbol *L, unsigned Register1,
                                          unsigned Register2) {
     return MCCFIInstruction(OpRegister, L, Register1, Register2);
   }
 
-  /// \brief .cfi_window_save SPARC register window is saved.
+  /// .cfi_window_save SPARC register window is saved.
   static MCCFIInstruction createWindowSave(MCSymbol *L) {
     return MCCFIInstruction(OpWindowSave, L, 0, 0, "");
   }
 
-  /// \brief .cfi_restore says that the rule for Register is now the same as it
+  /// .cfi_restore says that the rule for Register is now the same as it
   /// was at the beginning of the function, after all initial instructions added
   /// by .cfi_startproc were executed.
   static MCCFIInstruction createRestore(MCSymbol *L, unsigned Register) {
     return MCCFIInstruction(OpRestore, L, Register, 0, "");
   }
 
-  /// \brief .cfi_undefined From now on the previous value of Register can't be
+  /// .cfi_undefined From now on the previous value of Register can't be
   /// restored anymore.
   static MCCFIInstruction createUndefined(MCSymbol *L, unsigned Register) {
     return MCCFIInstruction(OpUndefined, L, Register, 0, "");
   }
 
-  /// \brief .cfi_same_value Current value of Register is the same as in the
+  /// .cfi_same_value Current value of Register is the same as in the
   /// previous frame. I.e., no restoration is needed.
   static MCCFIInstruction createSameValue(MCSymbol *L, unsigned Register) {
     return MCCFIInstruction(OpSameValue, L, Register, 0, "");
   }
 
-  /// \brief .cfi_remember_state Save all current rules for all registers.
+  /// .cfi_remember_state Save all current rules for all registers.
   static MCCFIInstruction createRememberState(MCSymbol *L) {
     return MCCFIInstruction(OpRememberState, L, 0, 0, "");
   }
 
-  /// \brief .cfi_restore_state Restore the previously saved state.
+  /// .cfi_restore_state Restore the previously saved state.
   static MCCFIInstruction createRestoreState(MCSymbol *L) {
     return MCCFIInstruction(OpRestoreState, L, 0, 0, "");
   }
 
-  /// \brief .cfi_escape Allows the user to add arbitrary bytes to the unwind
+  /// .cfi_escape Allows the user to add arbitrary bytes to the unwind
   /// info.
   static MCCFIInstruction createEscape(MCSymbol *L, StringRef Vals) {
     return MCCFIInstruction(OpEscape, L, 0, 0, Vals);
   }
 
-  /// \brief A special wrapper for .cfi_escape that indicates GNU_ARGS_SIZE
+  /// A special wrapper for .cfi_escape that indicates GNU_ARGS_SIZE
   static MCCFIInstruction createGnuArgsSize(MCSymbol *L, int Size) {
     return MCCFIInstruction(OpGnuArgsSize, L, 0, Size, "");
   }
diff --git a/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
index fd8d118..389a4d7 100644
--- a/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCELFObjectWriter.h
@@ -12,6 +12,8 @@
 
 #include "llvm/ADT/Triple.h"
 #include "llvm/BinaryFormat/ELF.h"
+#include "llvm/MC/MCObjectWriter.h"
+#include "llvm/MC/MCSectionELF.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/raw_ostream.h"
 #include <cstdint>
@@ -50,7 +52,7 @@
   void dump() const { print(errs()); }
 };
 
-class MCELFObjectTargetWriter {
+class MCELFObjectTargetWriter : public MCObjectTargetWriter {
   const uint8_t OSABI;
   const uint16_t EMachine;
   const unsigned HasRelocationAddend : 1;
@@ -63,6 +65,11 @@
 public:
   virtual ~MCELFObjectTargetWriter() = default;
 
+  virtual Triple::ObjectFormatType getFormat() const { return Triple::ELF; }
+  static bool classof(const MCObjectTargetWriter *W) {
+    return W->getFormat() == Triple::ELF;
+  }
+
   static uint8_t getOSABI(Triple::OSType OSType) {
     switch (OSType) {
       case Triple::CloudABI:
@@ -84,6 +91,8 @@
   virtual void sortRelocs(const MCAssembler &Asm,
                           std::vector<ELFRelocationEntry> &Relocs);
 
+  virtual void addTargetSectionFlags(MCContext &Ctx, MCSectionELF &Sec);
+
   /// \name Accessors
   /// @{
   uint8_t getOSABI() const { return OSABI; }
@@ -132,7 +141,7 @@
   }
 };
 
-/// \brief Construct a new ELF writer instance.
+/// Construct a new ELF writer instance.
 ///
 /// \param MOTW - The target specific ELF writer subclass.
 /// \param OS - The stream to write to.
@@ -141,6 +150,11 @@
 createELFObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
                       raw_pwrite_stream &OS, bool IsLittleEndian);
 
+std::unique_ptr<MCObjectWriter>
+createELFDwoObjectWriter(std::unique_ptr<MCELFObjectTargetWriter> MOTW,
+                         raw_pwrite_stream &OS, raw_pwrite_stream &DwoOS,
+                         bool IsLittleEndian);
+
 } // end namespace llvm
 
 #endif // LLVM_MC_MCELFOBJECTWRITER_H
diff --git a/linux-x64/clang/include/llvm/MC/MCELFStreamer.h b/linux-x64/clang/include/llvm/MC/MCELFStreamer.h
index 2f23cd6..3797079 100644
--- a/linux-x64/clang/include/llvm/MC/MCELFStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCELFStreamer.h
@@ -24,7 +24,8 @@
 class MCELFStreamer : public MCObjectStreamer {
 public:
   MCELFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB,
-                raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter);
+                std::unique_ptr<MCObjectWriter> OW,
+                std::unique_ptr<MCCodeEmitter> Emitter);
 
   ~MCELFStreamer() override = default;
 
@@ -58,7 +59,8 @@
                              unsigned ByteAlignment) override;
 
   void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
-                    uint64_t Size = 0, unsigned ByteAlignment = 0) override;
+                    uint64_t Size = 0, unsigned ByteAlignment = 0,
+                    SMLoc L = SMLoc()) override;
   void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
                       unsigned ByteAlignment = 0) override;
   void EmitValueImpl(const MCExpr *Value, unsigned Size,
@@ -68,6 +70,9 @@
 
   void EmitValueToAlignment(unsigned, int64_t, unsigned, unsigned) override;
 
+  void emitCGProfileEntry(const MCSymbolRefExpr *From,
+                          const MCSymbolRefExpr *To, uint64_t Count) override;
+
   void FinishImpl() override;
 
   void EmitBundleAlignMode(unsigned AlignPow2) override;
@@ -80,8 +85,10 @@
   void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
 
   void fixSymbolsInTLSFixups(const MCExpr *expr);
+  void finalizeCGProfileEntry(const MCSymbolRefExpr *&S);
+  void finalizeCGProfile();
 
-  /// \brief Merge the content of the fragment \p EF into the fragment \p DF.
+  /// Merge the content of the fragment \p EF into the fragment \p DF.
   void mergeFragment(MCDataFragment *, MCDataFragment *);
 
   bool SeenIdent = false;
@@ -93,7 +100,7 @@
 
 MCELFStreamer *createARMELFStreamer(MCContext &Context,
                                     std::unique_ptr<MCAsmBackend> TAB,
-                                    raw_pwrite_stream &OS,
+                                    std::unique_ptr<MCObjectWriter> OW,
                                     std::unique_ptr<MCCodeEmitter> Emitter,
                                     bool RelaxAll, bool IsThumb);
 
diff --git a/linux-x64/clang/include/llvm/MC/MCExpr.h b/linux-x64/clang/include/llvm/MC/MCExpr.h
index fcbbe65..0d8f3ca 100644
--- a/linux-x64/clang/include/llvm/MC/MCExpr.h
+++ b/linux-x64/clang/include/llvm/MC/MCExpr.h
@@ -31,7 +31,7 @@
 
 using SectionAddrMap = DenseMap<const MCSection *, uint64_t>;
 
-/// \brief Base class for the full range of assembler expressions which are
+/// Base class for the full range of assembler expressions which are
 /// needed for parsing.
 class MCExpr {
 public:
@@ -85,7 +85,7 @@
   /// \name Expression Evaluation
   /// @{
 
-  /// \brief Try to evaluate the expression to an absolute value.
+  /// Try to evaluate the expression to an absolute value.
   ///
   /// \param Res - The absolute value, if evaluation succeeds.
   /// \param Layout - The assembler layout object to use for evaluating symbol
@@ -96,11 +96,12 @@
                           const SectionAddrMap &Addrs) const;
   bool evaluateAsAbsolute(int64_t &Res) const;
   bool evaluateAsAbsolute(int64_t &Res, const MCAssembler &Asm) const;
+  bool evaluateAsAbsolute(int64_t &Res, const MCAssembler *Asm) const;
   bool evaluateAsAbsolute(int64_t &Res, const MCAsmLayout &Layout) const;
 
   bool evaluateKnownAbsolute(int64_t &Res, const MCAsmLayout &Layout) const;
 
-  /// \brief Try to evaluate the expression to a relocatable value, i.e. an
+  /// Try to evaluate the expression to a relocatable value, i.e. an
   /// expression of the fixed form (a - b + constant).
   ///
   /// \param Res - The relocatable value, if evaluation succeeds.
@@ -110,14 +111,14 @@
   bool evaluateAsRelocatable(MCValue &Res, const MCAsmLayout *Layout,
                              const MCFixup *Fixup) const;
 
-  /// \brief Try to evaluate the expression to the form (a - b + constant) where
+  /// Try to evaluate the expression to the form (a - b + constant) where
   /// neither a nor b are variables.
   ///
   /// This is a more aggressive variant of evaluateAsRelocatable. The intended
   /// use is for when relocations are not available, like the .size directive.
   bool evaluateAsValue(MCValue &Res, const MCAsmLayout &Layout) const;
 
-  /// \brief Find the "associated section" for this expression, which is
+  /// Find the "associated section" for this expression, which is
   /// currently defined as the absolute section for constants, or
   /// otherwise the section associated with the first defined symbol in the
   /// expression.
@@ -131,7 +132,7 @@
   return OS;
 }
 
-//// \brief  Represent a constant integer expression.
+////  Represent a constant integer expression.
 class MCConstantExpr : public MCExpr {
   int64_t Value;
 
@@ -157,7 +158,7 @@
   }
 };
 
-/// \brief  Represent a reference to a symbol from inside an expression.
+///  Represent a reference to a symbol from inside an expression.
 ///
 /// A symbol reference in an expression may be a use of a label, a use of an
 /// assembler variable (defined constant), or constitute an implicit definition
@@ -217,6 +218,8 @@
     VK_PPC_LO,             // symbol@l
     VK_PPC_HI,             // symbol@h
     VK_PPC_HA,             // symbol@ha
+    VK_PPC_HIGH,           // symbol@high
+    VK_PPC_HIGHA,          // symbol@higha
     VK_PPC_HIGHER,         // symbol@higher
     VK_PPC_HIGHERA,        // symbol@highera
     VK_PPC_HIGHEST,        // symbol@highest
@@ -233,6 +236,8 @@
     VK_PPC_TPREL_LO,       // symbol@tprel@l
     VK_PPC_TPREL_HI,       // symbol@tprel@h
     VK_PPC_TPREL_HA,       // symbol@tprel@ha
+    VK_PPC_TPREL_HIGH,     // symbol@tprel@high
+    VK_PPC_TPREL_HIGHA,    // symbol@tprel@higha
     VK_PPC_TPREL_HIGHER,   // symbol@tprel@higher
     VK_PPC_TPREL_HIGHERA,  // symbol@tprel@highera
     VK_PPC_TPREL_HIGHEST,  // symbol@tprel@highest
@@ -240,6 +245,8 @@
     VK_PPC_DTPREL_LO,      // symbol@dtprel@l
     VK_PPC_DTPREL_HI,      // symbol@dtprel@h
     VK_PPC_DTPREL_HA,      // symbol@dtprel@ha
+    VK_PPC_DTPREL_HIGH,    // symbol@dtprel@high
+    VK_PPC_DTPREL_HIGHA,   // symbol@dtprel@higha
     VK_PPC_DTPREL_HIGHER,  // symbol@dtprel@higher
     VK_PPC_DTPREL_HIGHERA, // symbol@dtprel@highera
     VK_PPC_DTPREL_HIGHEST, // symbol@dtprel@highest
@@ -279,12 +286,14 @@
     VK_Hexagon_IE_GOT,
 
     VK_WebAssembly_FUNCTION, // Function table index, rather than virtual addr
+    VK_WebAssembly_GLOBAL,   // Global object index
     VK_WebAssembly_TYPEINDEX,// Type table index
 
     VK_AMDGPU_GOTPCREL32_LO, // symbol@gotpcrel32@lo
     VK_AMDGPU_GOTPCREL32_HI, // symbol@gotpcrel32@hi
     VK_AMDGPU_REL32_LO,      // symbol@rel32@lo
     VK_AMDGPU_REL32_HI,      // symbol@rel32@hi
+    VK_AMDGPU_REL64,         // symbol@rel64
 
     VK_TPREL,
     VK_DTPREL
@@ -346,7 +355,7 @@
   }
 };
 
-/// \brief Unary assembler expressions.
+/// Unary assembler expressions.
 class MCUnaryExpr : public MCExpr {
 public:
   enum Opcode {
@@ -390,10 +399,10 @@
   /// \name Accessors
   /// @{
 
-  /// \brief Get the kind of this unary expression.
+  /// Get the kind of this unary expression.
   Opcode getOpcode() const { return Op; }
 
-  /// \brief Get the child of this unary expression.
+  /// Get the child of this unary expression.
   const MCExpr *getSubExpr() const { return Expr; }
 
   /// @}
@@ -403,7 +412,7 @@
   }
 };
 
-/// \brief Binary assembler expressions.
+/// Binary assembler expressions.
 class MCBinaryExpr : public MCExpr {
 public:
   enum Opcode {
@@ -547,13 +556,13 @@
   /// \name Accessors
   /// @{
 
-  /// \brief Get the kind of this binary expression.
+  /// Get the kind of this binary expression.
   Opcode getOpcode() const { return Op; }
 
-  /// \brief Get the left-hand side expression of the binary operator.
+  /// Get the left-hand side expression of the binary operator.
   const MCExpr *getLHS() const { return LHS; }
 
-  /// \brief Get the right-hand side expression of the binary operator.
+  /// Get the right-hand side expression of the binary operator.
   const MCExpr *getRHS() const { return RHS; }
 
   /// @}
@@ -563,7 +572,7 @@
   }
 };
 
-/// \brief This is an extension point for target-specific MCExpr subclasses to
+/// This is an extension point for target-specific MCExpr subclasses to
 /// implement.
 ///
 /// NOTE: All subclasses are required to have trivial destructors because
@@ -580,6 +589,9 @@
   virtual bool evaluateAsRelocatableImpl(MCValue &Res,
                                          const MCAsmLayout *Layout,
                                          const MCFixup *Fixup) const = 0;
+  // This should be set when assigned expressions are not valid ".set"
+  // expressions, e.g. registers, and must be inlined.
+  virtual bool inlineAssignedExpr() const { return false; }
   virtual void visitUsedExpr(MCStreamer& Streamer) const = 0;
   virtual MCFragment *findAssociatedFragment() const = 0;
 
diff --git a/linux-x64/clang/include/llvm/MC/MCFixup.h b/linux-x64/clang/include/llvm/MC/MCFixup.h
index b83086c..5f301ea 100644
--- a/linux-x64/clang/include/llvm/MC/MCFixup.h
+++ b/linux-x64/clang/include/llvm/MC/MCFixup.h
@@ -19,7 +19,7 @@
 namespace llvm {
 class MCExpr;
 
-/// \brief Extensible enumeration to represent the type of a fixup.
+/// Extensible enumeration to represent the type of a fixup.
 enum MCFixupKind {
   FK_Data_1 = 0, ///< A one-byte fixup.
   FK_Data_2,     ///< A two-byte fixup.
@@ -41,6 +41,14 @@
   FK_SecRel_2,   ///< A two-byte section relative fixup.
   FK_SecRel_4,   ///< A four-byte section relative fixup.
   FK_SecRel_8,   ///< A eight-byte section relative fixup.
+  FK_Data_Add_1, ///< A one-byte add fixup.
+  FK_Data_Add_2, ///< A two-byte add fixup.
+  FK_Data_Add_4, ///< A four-byte add fixup.
+  FK_Data_Add_8, ///< A eight-byte add fixup.
+  FK_Data_Sub_1, ///< A one-byte sub fixup.
+  FK_Data_Sub_2, ///< A two-byte sub fixup.
+  FK_Data_Sub_4, ///< A four-byte sub fixup.
+  FK_Data_Sub_8, ///< A eight-byte sub fixup.
 
   FirstTargetFixupKind = 128,
 
@@ -49,7 +57,7 @@
   MaxTargetFixupKind = (1 << 8)
 };
 
-/// \brief Encode information on a single operation to perform on a byte
+/// Encode information on a single operation to perform on a byte
 /// sequence (e.g., an encoded instruction) which requires assemble- or run-
 /// time patching.
 ///
@@ -90,6 +98,28 @@
     return FI;
   }
 
+  /// Return a fixup corresponding to the add half of a add/sub fixup pair for
+  /// the given Fixup.
+  static MCFixup createAddFor(const MCFixup &Fixup) {
+    MCFixup FI;
+    FI.Value = Fixup.getValue();
+    FI.Offset = Fixup.getOffset();
+    FI.Kind = (unsigned)getAddKindForKind(Fixup.getKind());
+    FI.Loc = Fixup.getLoc();
+    return FI;
+  }
+
+  /// Return a fixup corresponding to the sub half of a add/sub fixup pair for
+  /// the given Fixup.
+  static MCFixup createSubFor(const MCFixup &Fixup) {
+    MCFixup FI;
+    FI.Value = Fixup.getValue();
+    FI.Offset = Fixup.getOffset();
+    FI.Kind = (unsigned)getSubKindForKind(Fixup.getKind());
+    FI.Loc = Fixup.getLoc();
+    return FI;
+  }
+
   MCFixupKind getKind() const { return MCFixupKind(Kind); }
 
   uint32_t getOffset() const { return Offset; }
@@ -97,7 +127,7 @@
 
   const MCExpr *getValue() const { return Value; }
 
-  /// \brief Return the generic fixup kind for a value with the given size. It
+  /// Return the generic fixup kind for a value with the given size. It
   /// is an error to pass an unsupported size.
   static MCFixupKind getKindForSize(unsigned Size, bool isPCRel) {
     switch (Size) {
@@ -109,6 +139,30 @@
     }
   }
 
+  /// Return the generic fixup kind for an addition with a given size. It
+  /// is an error to pass an unsupported size.
+  static MCFixupKind getAddKindForKind(unsigned Kind) {
+    switch (Kind) {
+    default: llvm_unreachable("Unknown type to convert!");
+    case FK_Data_1: return FK_Data_Add_1;
+    case FK_Data_2: return FK_Data_Add_2;
+    case FK_Data_4: return FK_Data_Add_4;
+    case FK_Data_8: return FK_Data_Add_8;
+    }
+  }
+
+  /// Return the generic fixup kind for an subtraction with a given size. It
+  /// is an error to pass an unsupported size.
+  static MCFixupKind getSubKindForKind(unsigned Kind) {
+    switch (Kind) {
+    default: llvm_unreachable("Unknown type to convert!");
+    case FK_Data_1: return FK_Data_Sub_1;
+    case FK_Data_2: return FK_Data_Sub_2;
+    case FK_Data_4: return FK_Data_Sub_4;
+    case FK_Data_8: return FK_Data_Sub_8;
+    }
+  }
+
   SMLoc getLoc() const { return Loc; }
 };
 
diff --git a/linux-x64/clang/include/llvm/MC/MCFixupKindInfo.h b/linux-x64/clang/include/llvm/MC/MCFixupKindInfo.h
index 58183bd..483abb3 100644
--- a/linux-x64/clang/include/llvm/MC/MCFixupKindInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCFixupKindInfo.h
@@ -12,7 +12,7 @@
 
 namespace llvm {
 
-/// \brief Target independent information on a fixup kind.
+/// Target independent information on a fixup kind.
 struct MCFixupKindInfo {
   enum FixupKindFlags {
     /// Is this fixup kind PCrelative? This is used by the assembler backend to
diff --git a/linux-x64/clang/include/llvm/MC/MCFragment.h b/linux-x64/clang/include/llvm/MC/MCFragment.h
index 38c3655..c999c9f 100644
--- a/linux-x64/clang/include/llvm/MC/MCFragment.h
+++ b/linux-x64/clang/include/llvm/MC/MCFragment.h
@@ -56,18 +56,13 @@
   bool HasInstructions;
 
 private:
-  /// \brief Should this fragment be aligned to the end of a bundle?
-  bool AlignToBundleEnd;
-
-  uint8_t BundlePadding;
-
   /// LayoutOrder - The layout order of this fragment.
   unsigned LayoutOrder;
 
   /// The data for the section this fragment is in.
   MCSection *Parent;
 
-  /// Atom - The atom this fragment is in, as represented by it's defining
+  /// Atom - The atom this fragment is in, as represented by its defining
   /// symbol.
   const MCSymbol *Atom;
 
@@ -84,7 +79,7 @@
 
 protected:
   MCFragment(FragmentType Kind, bool HasInstructions,
-             uint8_t BundlePadding, MCSection *Parent = nullptr);
+             MCSection *Parent = nullptr);
 
   ~MCFragment();
 
@@ -110,26 +105,11 @@
   unsigned getLayoutOrder() const { return LayoutOrder; }
   void setLayoutOrder(unsigned Value) { LayoutOrder = Value; }
 
-  /// \brief Does this fragment have instructions emitted into it? By default
+  /// Does this fragment have instructions emitted into it? By default
   /// this is false, but specific fragment types may set it to true.
   bool hasInstructions() const { return HasInstructions; }
 
-  /// \brief Should this fragment be placed at the end of an aligned bundle?
-  bool alignToBundleEnd() const { return AlignToBundleEnd; }
-  void setAlignToBundleEnd(bool V) { AlignToBundleEnd = V; }
-
-  /// \brief Get the padding size that must be inserted before this fragment.
-  /// Used for bundling. By default, no padding is inserted.
-  /// Note that padding size is restricted to 8 bits. This is an optimization
-  /// to reduce the amount of space used for each fragment. In practice, larger
-  /// padding should never be required.
-  uint8_t getBundlePadding() const { return BundlePadding; }
-
-  /// \brief Set the padding size for this fragment. By default it's a no-op,
-  /// and only some fragments have a meaningful implementation.
-  void setBundlePadding(uint8_t N) { BundlePadding = N; }
-
-  /// \brief Return true if given frgment has FT_Dummy type.
+  /// Return true if given frgment has FT_Dummy type.
   bool isDummy() const { return Kind == FT_Dummy; }
 
   void dump() const;
@@ -137,8 +117,7 @@
 
 class MCDummyFragment : public MCFragment {
 public:
-  explicit MCDummyFragment(MCSection *Sec)
-      : MCFragment(FT_Dummy, false, 0, Sec) {}
+  explicit MCDummyFragment(MCSection *Sec) : MCFragment(FT_Dummy, false, Sec) {}
 
   static bool classof(const MCFragment *F) { return F->getKind() == FT_Dummy; }
 };
@@ -147,10 +126,19 @@
 /// data.
 ///
 class MCEncodedFragment : public MCFragment {
+  /// Should this fragment be aligned to the end of a bundle?
+  bool AlignToBundleEnd = false;
+
+  uint8_t BundlePadding = 0;
+
 protected:
   MCEncodedFragment(MCFragment::FragmentType FType, bool HasInstructions,
                     MCSection *Sec)
-      : MCFragment(FType, HasInstructions, 0, Sec) {}
+      : MCFragment(FType, HasInstructions, Sec) {}
+
+  /// STI - The MCSubtargetInfo in effect when the instruction was encoded.
+  /// must be non-null for instructions.
+  const MCSubtargetInfo *STI = nullptr;
 
 public:
   static bool classof(const MCFragment *F) {
@@ -161,9 +149,36 @@
     case MCFragment::FT_Relaxable:
     case MCFragment::FT_CompactEncodedInst:
     case MCFragment::FT_Data:
+    case MCFragment::FT_Dwarf:
       return true;
     }
   }
+
+  /// Should this fragment be placed at the end of an aligned bundle?
+  bool alignToBundleEnd() const { return AlignToBundleEnd; }
+  void setAlignToBundleEnd(bool V) { AlignToBundleEnd = V; }
+
+  /// Get the padding size that must be inserted before this fragment.
+  /// Used for bundling. By default, no padding is inserted.
+  /// Note that padding size is restricted to 8 bits. This is an optimization
+  /// to reduce the amount of space used for each fragment. In practice, larger
+  /// padding should never be required.
+  uint8_t getBundlePadding() const { return BundlePadding; }
+
+  /// Set the padding size for this fragment. By default it's a no-op,
+  /// and only some fragments have a meaningful implementation.
+  void setBundlePadding(uint8_t N) { BundlePadding = N; }
+
+  /// Retrieve the MCSubTargetInfo in effect when the instruction was encoded.
+  /// Guaranteed to be non-null if hasInstructions() == true
+  const MCSubtargetInfo *getSubtargetInfo() const { return STI; }
+
+  /// Record that the fragment contains instructions with the MCSubtargetInfo in
+  /// effect when the instruction was encoded.
+  void setHasInstructions(const MCSubtargetInfo &STI) {
+    HasInstructions = true;
+    this->STI = &STI;
+  }
 };
 
 /// Interface implemented by fragments that contain encoded instructions and/or
@@ -202,6 +217,7 @@
                                                     Sec) {}
 
 public:
+
   using const_fixup_iterator = SmallVectorImpl<MCFixup>::const_iterator;
   using fixup_iterator = SmallVectorImpl<MCFixup>::iterator;
 
@@ -217,7 +233,7 @@
   static bool classof(const MCFragment *F) {
     MCFragment::FragmentType Kind = F->getKind();
     return Kind == MCFragment::FT_Relaxable || Kind == MCFragment::FT_Data ||
-           Kind == MCFragment::FT_CVDefRange;
+           Kind == MCFragment::FT_CVDefRange || Kind == MCFragment::FT_Dwarf;;
   }
 };
 
@@ -228,8 +244,6 @@
   MCDataFragment(MCSection *Sec = nullptr)
       : MCEncodedFragmentWithFixups<32, 4>(FT_Data, false, Sec) {}
 
-  void setHasInstructions(bool V) { HasInstructions = V; }
-
   static bool classof(const MCFragment *F) {
     return F->getKind() == MCFragment::FT_Data;
   }
@@ -259,20 +273,15 @@
   /// Inst - The instruction this is a fragment for.
   MCInst Inst;
 
-  /// STI - The MCSubtargetInfo in effect when the instruction was encoded.
-  const MCSubtargetInfo &STI;
-
 public:
   MCRelaxableFragment(const MCInst &Inst, const MCSubtargetInfo &STI,
                       MCSection *Sec = nullptr)
       : MCEncodedFragmentWithFixups(FT_Relaxable, true, Sec),
-        Inst(Inst), STI(STI) {}
+        Inst(Inst) { this->STI = &STI; }
 
   const MCInst &getInst() const { return Inst; }
   void setInst(const MCInst &Value) { Inst = Value; }
 
-  const MCSubtargetInfo &getSubtargetInfo() { return STI; }
-
   static bool classof(const MCFragment *F) {
     return F->getKind() == MCFragment::FT_Relaxable;
   }
@@ -300,9 +309,8 @@
 public:
   MCAlignFragment(unsigned Alignment, int64_t Value, unsigned ValueSize,
                   unsigned MaxBytesToEmit, MCSection *Sec = nullptr)
-      : MCFragment(FT_Align, false, 0, Sec), Alignment(Alignment),
-        EmitNops(false), Value(Value),
-        ValueSize(ValueSize), MaxBytesToEmit(MaxBytesToEmit) {}
+      : MCFragment(FT_Align, false, Sec), Alignment(Alignment), EmitNops(false),
+        Value(Value), ValueSize(ValueSize), MaxBytesToEmit(MaxBytesToEmit) {}
 
   /// \name Accessors
   /// @{
@@ -370,7 +378,7 @@
   };
 
   MCPaddingFragment(MCSection *Sec = nullptr)
-      : MCFragment(FT_Padding, false, 0, Sec), PaddingPoliciesMask(PFK_None),
+      : MCFragment(FT_Padding, false, Sec), PaddingPoliciesMask(PFK_None),
         IsInsertionPoint(false), Size(UINT64_C(0)),
         InstInfo({false, MCInst(), false, {0}}) {}
 
@@ -419,22 +427,23 @@
 
 class MCFillFragment : public MCFragment {
   /// Value to use for filling bytes.
-  uint8_t Value;
-
+  uint64_t Value;
+  uint8_t ValueSize;
   /// The number of bytes to insert.
-  const MCExpr &Size;
+  const MCExpr &NumValues;
 
   /// Source location of the directive that this fragment was created for.
   SMLoc Loc;
 
 public:
-  MCFillFragment(uint8_t Value, const MCExpr &Size, SMLoc Loc,
-                 MCSection *Sec = nullptr)
-      : MCFragment(FT_Fill, false, 0, Sec), Value(Value), Size(Size), Loc(Loc) {
-  }
+  MCFillFragment(uint64_t Value, uint8_t VSize, const MCExpr &NumValues,
+                 SMLoc Loc, MCSection *Sec = nullptr)
+      : MCFragment(FT_Fill, false, Sec), Value(Value), ValueSize(VSize),
+        NumValues(NumValues), Loc(Loc) {}
 
-  uint8_t getValue() const { return Value; }
-  const MCExpr &getSize() const { return Size; }
+  uint64_t getValue() const { return Value; }
+  uint8_t getValueSize() const { return ValueSize; }
+  const MCExpr &getNumValues() const { return NumValues; }
 
   SMLoc getLoc() const { return Loc; }
 
@@ -456,7 +465,7 @@
 public:
   MCOrgFragment(const MCExpr &Offset, int8_t Value, SMLoc Loc,
                 MCSection *Sec = nullptr)
-      : MCFragment(FT_Org, false, 0, Sec), Offset(&Offset), Value(Value), Loc(Loc) {}
+      : MCFragment(FT_Org, false, Sec), Offset(&Offset), Value(Value), Loc(Loc) {}
 
   /// \name Accessors
   /// @{
@@ -485,7 +494,7 @@
 
 public:
   MCLEBFragment(const MCExpr &Value_, bool IsSigned_, MCSection *Sec = nullptr)
-      : MCFragment(FT_LEB, false, 0, Sec), Value(&Value_), IsSigned(IsSigned_) {
+      : MCFragment(FT_LEB, false, Sec), Value(&Value_), IsSigned(IsSigned_) {
     Contents.push_back(0);
   }
 
@@ -506,7 +515,7 @@
   }
 };
 
-class MCDwarfLineAddrFragment : public MCFragment {
+class MCDwarfLineAddrFragment : public MCEncodedFragmentWithFixups<8, 1> {
   /// LineDelta - the value of the difference between the two line numbers
   /// between two .loc dwarf directives.
   int64_t LineDelta;
@@ -515,15 +524,11 @@
   /// make up the address delta between two .loc dwarf directives.
   const MCExpr *AddrDelta;
 
-  SmallString<8> Contents;
-
 public:
   MCDwarfLineAddrFragment(int64_t LineDelta, const MCExpr &AddrDelta,
                           MCSection *Sec = nullptr)
-      : MCFragment(FT_Dwarf, false, 0, Sec), LineDelta(LineDelta),
-        AddrDelta(&AddrDelta) {
-    Contents.push_back(0);
-  }
+      : MCEncodedFragmentWithFixups<8, 1>(FT_Dwarf, false, Sec),
+        LineDelta(LineDelta), AddrDelta(&AddrDelta) {}
 
   /// \name Accessors
   /// @{
@@ -532,9 +537,6 @@
 
   const MCExpr &getAddrDelta() const { return *AddrDelta; }
 
-  SmallString<8> &getContents() { return Contents; }
-  const SmallString<8> &getContents() const { return Contents; }
-
   /// @}
 
   static bool classof(const MCFragment *F) {
@@ -551,7 +553,7 @@
 
 public:
   MCDwarfCallFrameFragment(const MCExpr &AddrDelta, MCSection *Sec = nullptr)
-      : MCFragment(FT_DwarfFrame, false, 0, Sec), AddrDelta(&AddrDelta) {
+      : MCFragment(FT_DwarfFrame, false, Sec), AddrDelta(&AddrDelta) {
     Contents.push_back(0);
   }
 
@@ -576,7 +578,7 @@
 
 public:
   MCSymbolIdFragment(const MCSymbol *Sym, MCSection *Sec = nullptr)
-      : MCFragment(FT_SymbolId, false, 0, Sec), Sym(Sym) {}
+      : MCFragment(FT_SymbolId, false, Sec), Sym(Sym) {}
 
   /// \name Accessors
   /// @{
@@ -610,7 +612,7 @@
                               unsigned StartLineNum, const MCSymbol *FnStartSym,
                               const MCSymbol *FnEndSym,
                               MCSection *Sec = nullptr)
-      : MCFragment(FT_CVInlineLines, false, 0, Sec), SiteFuncId(SiteFuncId),
+      : MCFragment(FT_CVInlineLines, false, Sec), SiteFuncId(SiteFuncId),
         StartFileId(StartFileId), StartLineNum(StartLineNum),
         FnStartSym(FnStartSym), FnEndSym(FnEndSym) {}
 
diff --git a/linux-x64/clang/include/llvm/MC/MCInst.h b/linux-x64/clang/include/llvm/MC/MCInst.h
index db28fd0..67bb11a 100644
--- a/linux-x64/clang/include/llvm/MC/MCInst.h
+++ b/linux-x64/clang/include/llvm/MC/MCInst.h
@@ -30,7 +30,7 @@
 class MCInstPrinter;
 class raw_ostream;
 
-/// \brief Instances of this class represent operands of the MCInst class.
+/// Instances of this class represent operands of the MCInst class.
 /// This is a simple discriminated union.
 class MCOperand {
   enum MachineOperandType : unsigned char {
@@ -61,13 +61,13 @@
   bool isExpr() const { return Kind == kExpr; }
   bool isInst() const { return Kind == kInst; }
 
-  /// \brief Returns the register number.
+  /// Returns the register number.
   unsigned getReg() const {
     assert(isReg() && "This is not a register operand!");
     return RegVal;
   }
 
-  /// \brief Set the register number.
+  /// Set the register number.
   void setReg(unsigned Reg) {
     assert(isReg() && "This is not a register operand!");
     RegVal = Reg;
@@ -150,11 +150,13 @@
 
   void print(raw_ostream &OS) const;
   void dump() const;
+  bool isBareSymbolRef() const;
+  bool evaluateAsConstantImm(int64_t &Imm) const;
 };
 
 template <> struct isPodLike<MCOperand> { static const bool value = true; };
 
-/// \brief Instances of this class represent a single low-level machine
+/// Instances of this class represent a single low-level machine
 /// instruction.
 class MCInst {
   unsigned Opcode = 0;
@@ -201,7 +203,7 @@
   void print(raw_ostream &OS) const;
   void dump() const;
 
-  /// \brief Dump the MCInst as prettily as possible using the additional MC
+  /// Dump the MCInst as prettily as possible using the additional MC
   /// structures, if given. Operators are separated by the \p Separator
   /// string.
   void dump_pretty(raw_ostream &OS, const MCInstPrinter *Printer = nullptr,
diff --git a/linux-x64/clang/include/llvm/MC/MCInstBuilder.h b/linux-x64/clang/include/llvm/MC/MCInstBuilder.h
index 30609bd..c5c4f48 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstBuilder.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstBuilder.h
@@ -23,42 +23,42 @@
   MCInst Inst;
 
 public:
-  /// \brief Create a new MCInstBuilder for an MCInst with a specific opcode.
+  /// Create a new MCInstBuilder for an MCInst with a specific opcode.
   MCInstBuilder(unsigned Opcode) {
     Inst.setOpcode(Opcode);
   }
 
-  /// \brief Add a new register operand.
+  /// Add a new register operand.
   MCInstBuilder &addReg(unsigned Reg) {
     Inst.addOperand(MCOperand::createReg(Reg));
     return *this;
   }
 
-  /// \brief Add a new integer immediate operand.
+  /// Add a new integer immediate operand.
   MCInstBuilder &addImm(int64_t Val) {
     Inst.addOperand(MCOperand::createImm(Val));
     return *this;
   }
 
-  /// \brief Add a new floating point immediate operand.
+  /// Add a new floating point immediate operand.
   MCInstBuilder &addFPImm(double Val) {
     Inst.addOperand(MCOperand::createFPImm(Val));
     return *this;
   }
 
-  /// \brief Add a new MCExpr operand.
+  /// Add a new MCExpr operand.
   MCInstBuilder &addExpr(const MCExpr *Val) {
     Inst.addOperand(MCOperand::createExpr(Val));
     return *this;
   }
 
-  /// \brief Add a new MCInst operand.
+  /// Add a new MCInst operand.
   MCInstBuilder &addInst(const MCInst *Val) {
     Inst.addOperand(MCOperand::createInst(Val));
     return *this;
   }
 
-  /// \brief Add an operand.
+  /// Add an operand.
   MCInstBuilder &addOperand(const MCOperand &Op) {
     Inst.addOperand(Op);
     return *this;
diff --git a/linux-x64/clang/include/llvm/MC/MCInstPrinter.h b/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
index 0694030..df221e1 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstPrinter.h
@@ -15,7 +15,6 @@
 
 namespace llvm {
 
-template <typename T> class ArrayRef;
 class MCAsmInfo;
 class MCInst;
 class MCInstrInfo;
@@ -36,13 +35,13 @@
 
 } // end namespace HexStyle
 
-/// \brief This is an instance of a target assembly language printer that
+/// This is an instance of a target assembly language printer that
 /// converts an MCInst to valid target assembly syntax.
 class MCInstPrinter {
 protected:
-  /// \brief A stream that comments can be emitted to if desired.  Each comment
+  /// A stream that comments can be emitted to if desired.  Each comment
   /// must end with a newline.  This will be null if verbose assembly emission
-  /// is disable.
+  /// is disabled.
   raw_ostream *CommentStream = nullptr;
   const MCAsmInfo &MAI;
   const MCInstrInfo &MII;
@@ -66,18 +65,18 @@
 
   virtual ~MCInstPrinter();
 
-  /// \brief Specify a stream to emit comments to.
+  /// Specify a stream to emit comments to.
   void setCommentStream(raw_ostream &OS) { CommentStream = &OS; }
 
-  /// \brief Print the specified MCInst to the specified raw_ostream.
+  /// Print the specified MCInst to the specified raw_ostream.
   virtual void printInst(const MCInst *MI, raw_ostream &OS, StringRef Annot,
                          const MCSubtargetInfo &STI) = 0;
 
-  /// \brief Return the name of the specified opcode enum (e.g. "MOV32ri") or
+  /// Return the name of the specified opcode enum (e.g. "MOV32ri") or
   /// empty if we can't resolve it.
   StringRef getOpcodeName(unsigned Opcode) const;
 
-  /// \brief Print the assembler register name.
+  /// Print the assembler register name.
   virtual void printRegName(raw_ostream &OS, unsigned RegNo) const;
 
   bool getUseMarkup() const { return UseMarkup; }
diff --git a/linux-x64/clang/include/llvm/MC/MCInstrAnalysis.h b/linux-x64/clang/include/llvm/MC/MCInstrAnalysis.h
index dd3e1df..0777add 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstrAnalysis.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstrAnalysis.h
@@ -22,6 +22,9 @@
 
 namespace llvm {
 
+class MCRegisterInfo;
+class Triple;
+
 class MCInstrAnalysis {
 protected:
   friend class Target;
@@ -60,11 +63,56 @@
     return Info->get(Inst.getOpcode()).isTerminator();
   }
 
-  /// \brief Given a branch instruction try to get the address the branch
+  /// Returns true if at least one of the register writes performed by
+  /// \param Inst implicitly clears the upper portion of all super-registers.
+  ///
+  /// Example: on X86-64, a write to EAX implicitly clears the upper half of
+  /// RAX. Also (still on x86) an XMM write perfomed by an AVX 128-bit
+  /// instruction implicitly clears the upper portion of the correspondent
+  /// YMM register.
+  ///
+  /// This method also updates an APInt which is used as mask of register
+  /// writes. There is one bit for every explicit/implicit write performed by
+  /// the instruction. If a write implicitly clears its super-registers, then
+  /// the corresponding bit is set (vic. the corresponding bit is cleared).
+  ///
+  /// The first bits in the APint are related to explicit writes. The remaining
+  /// bits are related to implicit writes. The sequence of writes follows the
+  /// machine operand sequence. For implicit writes, the sequence is defined by
+  /// the MCInstrDesc.
+  ///
+  /// The assumption is that the bit-width of the APInt is correctly set by
+  /// the caller. The default implementation conservatively assumes that none of
+  /// the writes clears the upper portion of a super-register.
+  virtual bool clearsSuperRegisters(const MCRegisterInfo &MRI,
+                                    const MCInst &Inst,
+                                    APInt &Writes) const;
+
+  /// Returns true if \param Inst is a dependency breaking instruction for the
+  /// given subtarget.
+  ///
+  /// The value computed by a dependency breaking instruction is not dependent
+  /// on the inputs. An example of dependency breaking instruction on X86 is
+  /// `XOR %eax, %eax`.
+  /// TODO: In future, we could implement an alternative approach where this
+  /// method returns `true` if the input instruction is not dependent on
+  /// some/all of its input operands. An APInt mask could then be used to
+  /// identify independent operands.
+  virtual bool isDependencyBreaking(const MCSubtargetInfo &STI,
+                                    const MCInst &Inst) const;
+
+  /// Given a branch instruction try to get the address the branch
   /// targets. Return true on success, and the address in Target.
   virtual bool
   evaluateBranch(const MCInst &Inst, uint64_t Addr, uint64_t Size,
                  uint64_t &Target) const;
+
+  /// Returns (PLT virtual address, GOT virtual address) pairs for PLT entries.
+  virtual std::vector<std::pair<uint64_t, uint64_t>>
+  findPltEntries(uint64_t PltSectionVA, ArrayRef<uint8_t> PltContents,
+                 uint64_t GotPltSectionVA, const Triple &TargetTriple) const {
+    return {};
+  }
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/MC/MCInstrDesc.h b/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
index ff4c756..3e000a2 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstrDesc.h
@@ -35,12 +35,12 @@
   EARLY_CLOBBER // Operand is an early clobber register operand
 };
 
-/// \brief These are flags set on operands, but should be considered
+/// These are flags set on operands, but should be considered
 /// private, all access should go through the MCOperandInfo accessors.
 /// See the accessors for a description of what these are.
 enum OperandFlags { LookupPtrRegClass = 0, Predicate, OptionalDef };
 
-/// \brief Operands are tagged with one of the values of this enum.
+/// Operands are tagged with one of the values of this enum.
 enum OperandType {
   OPERAND_UNKNOWN = 0,
   OPERAND_IMMEDIATE = 1,
@@ -60,42 +60,39 @@
   OPERAND_FIRST_TARGET = 12,
 };
 
-enum GenericOperandType {
-};
-
 }
 
-/// \brief This holds information about one operand of a machine instruction,
+/// This holds information about one operand of a machine instruction,
 /// indicating the register class for register operands, etc.
 class MCOperandInfo {
 public:
-  /// \brief This specifies the register class enumeration of the operand
+  /// This specifies the register class enumeration of the operand
   /// if the operand is a register.  If isLookupPtrRegClass is set, then this is
   /// an index that is passed to TargetRegisterInfo::getPointerRegClass(x) to
   /// get a dynamic register class.
   int16_t RegClass;
 
-  /// \brief These are flags from the MCOI::OperandFlags enum.
+  /// These are flags from the MCOI::OperandFlags enum.
   uint8_t Flags;
 
-  /// \brief Information about the type of the operand.
+  /// Information about the type of the operand.
   uint8_t OperandType;
-  /// \brief The lower 16 bits are used to specify which constraints are set.
+  /// The lower 16 bits are used to specify which constraints are set.
   /// The higher 16 bits are used to specify the value of constraints (4 bits
   /// each).
   uint32_t Constraints;
 
-  /// \brief Set if this operand is a pointer value and it requires a callback
+  /// Set if this operand is a pointer value and it requires a callback
   /// to look up its register class.
   bool isLookupPtrRegClass() const {
     return Flags & (1 << MCOI::LookupPtrRegClass);
   }
 
-  /// \brief Set if this is one of the operands that made up of the predicate
+  /// Set if this is one of the operands that made up of the predicate
   /// operand that controls an isPredicable() instruction.
   bool isPredicate() const { return Flags & (1 << MCOI::Predicate); }
 
-  /// \brief Set if this operand is a optional def.
+  /// Set if this operand is a optional def.
   bool isOptionalDef() const { return Flags & (1 << MCOI::OptionalDef); }
 
   bool isGenericType() const {
@@ -114,7 +111,7 @@
 //===----------------------------------------------------------------------===//
 
 namespace MCID {
-/// \brief These should be considered private to the implementation of the
+/// These should be considered private to the implementation of the
 /// MCInstrDesc class.  Clients should use the predicate methods on MCInstrDesc,
 /// not use these directly.  These all correspond to bitfields in the
 /// MCInstrDesc::Flags field.
@@ -130,6 +127,7 @@
   IndirectBranch,
   Compare,
   MoveImm,
+  MoveReg,
   Bitcast,
   Select,
   DelaySlot,
@@ -151,11 +149,12 @@
   ExtractSubreg,
   InsertSubreg,
   Convergent,
-  Add
+  Add,
+  Trap
 };
 }
 
-/// \brief Describe properties that are true of each instruction in the target
+/// Describe properties that are true of each instruction in the target
 /// description file.  This captures information about side effects, register
 /// use and many other things.  There is one instance of this struct for each
 /// target instruction class, and the MachineInstr class points to this struct
@@ -177,12 +176,12 @@
   // deprecated due to a "complex" reason, below.
   int64_t DeprecatedFeature;
 
-  // A complex method to determine is a certain is deprecated or not, and return
-  // the reason for deprecation.
+  // A complex method to determine if a certain instruction is deprecated or
+  // not, and return the reason for deprecation.
   bool (*ComplexDeprecationInfo)(MCInst &, const MCSubtargetInfo &,
                                  std::string &);
 
-  /// \brief Returns the value of the specific constraint if
+  /// Returns the value of the specific constraint if
   /// it is set. Returns -1 if it is not set.
   int getOperandConstraint(unsigned OpNum,
                            MCOI::OperandConstraint Constraint) const {
@@ -194,15 +193,15 @@
     return -1;
   }
 
-  /// \brief Returns true if a certain instruction is deprecated and if so
+  /// Returns true if a certain instruction is deprecated and if so
   /// returns the reason in \p Info.
   bool getDeprecatedInfo(MCInst &MI, const MCSubtargetInfo &STI,
                          std::string &Info) const;
 
-  /// \brief Return the opcode number for this descriptor.
+  /// Return the opcode number for this descriptor.
   unsigned getOpcode() const { return Opcode; }
 
-  /// \brief Return the number of declared MachineOperands for this
+  /// Return the number of declared MachineOperands for this
   /// MachineInstruction.  Note that variadic (isVariadic() returns true)
   /// instructions may have additional operands at the end of the list, and note
   /// that the machine instruction may include implicit register def/uses as
@@ -218,44 +217,50 @@
     return make_range(opInfo_begin(), opInfo_end());
   }
 
-  /// \brief Return the number of MachineOperands that are register
+  /// Return the number of MachineOperands that are register
   /// definitions.  Register definitions always occur at the start of the
   /// machine operand list.  This is the number of "outs" in the .td file,
   /// and does not include implicit defs.
   unsigned getNumDefs() const { return NumDefs; }
 
-  /// \brief Return flags of this instruction.
+  /// Return flags of this instruction.
   uint64_t getFlags() const { return Flags; }
 
-  /// \brief Return true if this instruction can have a variable number of
+  /// Return true if this instruction can have a variable number of
   /// operands.  In this case, the variable operands will be after the normal
   /// operands but before the implicit definitions and uses (if any are
   /// present).
   bool isVariadic() const { return Flags & (1ULL << MCID::Variadic); }
 
-  /// \brief Set if this instruction has an optional definition, e.g.
+  /// Set if this instruction has an optional definition, e.g.
   /// ARM instructions which can set condition code if 's' bit is set.
   bool hasOptionalDef() const { return Flags & (1ULL << MCID::HasOptionalDef); }
 
-  /// \brief Return true if this is a pseudo instruction that doesn't
+  /// Return true if this is a pseudo instruction that doesn't
   /// correspond to a real machine instruction.
   bool isPseudo() const { return Flags & (1ULL << MCID::Pseudo); }
 
-  /// \brief Return true if the instruction is a return.
+  /// Return true if the instruction is a return.
   bool isReturn() const { return Flags & (1ULL << MCID::Return); }
 
-  /// \brief Return true if the instruction is an add instruction.
+  /// Return true if the instruction is an add instruction.
   bool isAdd() const { return Flags & (1ULL << MCID::Add); }
 
-  /// \brief  Return true if the instruction is a call.
+  /// Return true if this instruction is a trap.
+  bool isTrap() const { return Flags & (1ULL << MCID::Trap); }
+
+  /// Return true if the instruction is a register to register move.
+  bool isMoveReg() const { return Flags & (1ULL << MCID::MoveReg); }
+
+  ///  Return true if the instruction is a call.
   bool isCall() const { return Flags & (1ULL << MCID::Call); }
 
-  /// \brief Returns true if the specified instruction stops control flow
+  /// Returns true if the specified instruction stops control flow
   /// from executing the instruction immediately following it.  Examples include
   /// unconditional branches and return instructions.
   bool isBarrier() const { return Flags & (1ULL << MCID::Barrier); }
 
-  /// \brief Returns true if this instruction part of the terminator for
+  /// Returns true if this instruction part of the terminator for
   /// a basic block.  Typically this is things like return and branch
   /// instructions.
   ///
@@ -263,17 +268,17 @@
   /// but before control flow occurs.
   bool isTerminator() const { return Flags & (1ULL << MCID::Terminator); }
 
-  /// \brief Returns true if this is a conditional, unconditional, or
+  /// Returns true if this is a conditional, unconditional, or
   /// indirect branch.  Predicates below can be used to discriminate between
   /// these cases, and the TargetInstrInfo::AnalyzeBranch method can be used to
   /// get more information.
   bool isBranch() const { return Flags & (1ULL << MCID::Branch); }
 
-  /// \brief Return true if this is an indirect branch, such as a
+  /// Return true if this is an indirect branch, such as a
   /// branch through a register.
   bool isIndirectBranch() const { return Flags & (1ULL << MCID::IndirectBranch); }
 
-  /// \brief Return true if this is a branch which may fall
+  /// Return true if this is a branch which may fall
   /// through to the next instruction or may transfer control flow to some other
   /// block.  The TargetInstrInfo::AnalyzeBranch method can be used to get more
   /// information about this branch.
@@ -281,7 +286,7 @@
     return isBranch() & !isBarrier() & !isIndirectBranch();
   }
 
-  /// \brief Return true if this is a branch which always
+  /// Return true if this is a branch which always
   /// transfers control flow to some other block.  The
   /// TargetInstrInfo::AnalyzeBranch method can be used to get more information
   /// about this branch.
@@ -289,40 +294,40 @@
     return isBranch() & isBarrier() & !isIndirectBranch();
   }
 
-  /// \brief Return true if this is a branch or an instruction which directly
+  /// Return true if this is a branch or an instruction which directly
   /// writes to the program counter. Considered 'may' affect rather than
   /// 'does' affect as things like predication are not taken into account.
   bool mayAffectControlFlow(const MCInst &MI, const MCRegisterInfo &RI) const;
 
-  /// \brief Return true if this instruction has a predicate operand
+  /// Return true if this instruction has a predicate operand
   /// that controls execution. It may be set to 'always', or may be set to other
   /// values. There are various methods in TargetInstrInfo that can be used to
   /// control and modify the predicate in this instruction.
   bool isPredicable() const { return Flags & (1ULL << MCID::Predicable); }
 
-  /// \brief Return true if this instruction is a comparison.
+  /// Return true if this instruction is a comparison.
   bool isCompare() const { return Flags & (1ULL << MCID::Compare); }
 
-  /// \brief Return true if this instruction is a move immediate
+  /// Return true if this instruction is a move immediate
   /// (including conditional moves) instruction.
   bool isMoveImmediate() const { return Flags & (1ULL << MCID::MoveImm); }
 
-  /// \brief Return true if this instruction is a bitcast instruction.
+  /// Return true if this instruction is a bitcast instruction.
   bool isBitcast() const { return Flags & (1ULL << MCID::Bitcast); }
 
-  /// \brief Return true if this is a select instruction.
+  /// Return true if this is a select instruction.
   bool isSelect() const { return Flags & (1ULL << MCID::Select); }
 
-  /// \brief Return true if this instruction cannot be safely
+  /// Return true if this instruction cannot be safely
   /// duplicated.  For example, if the instruction has a unique labels attached
   /// to it, duplicating it would cause multiple definition errors.
   bool isNotDuplicable() const { return Flags & (1ULL << MCID::NotDuplicable); }
 
-  /// \brief Returns true if the specified instruction has a delay slot which
+  /// Returns true if the specified instruction has a delay slot which
   /// must be filled by the code generator.
   bool hasDelaySlot() const { return Flags & (1ULL << MCID::DelaySlot); }
 
-  /// \brief Return true for instructions that can be folded as memory operands
+  /// Return true for instructions that can be folded as memory operands
   /// in other instructions. The most common use for this is instructions that
   /// are simple loads from memory that don't modify the loaded value in any
   /// way, but it can also be used for instructions that can be expressed as
@@ -331,7 +336,7 @@
   /// that return a value in their only virtual register definition.
   bool canFoldAsLoad() const { return Flags & (1ULL << MCID::FoldableAsLoad); }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic REG_SEQUENCE instructions.
   /// E.g., on ARM,
   /// dX VMOVDRR rY, rZ
@@ -343,7 +348,7 @@
   /// override accordingly.
   bool isRegSequenceLike() const { return Flags & (1ULL << MCID::RegSequence); }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic EXTRACT_SUBREG instructions.
   /// E.g., on ARM,
   /// rX, rY VMOVRRD dZ
@@ -358,7 +363,7 @@
     return Flags & (1ULL << MCID::ExtractSubreg);
   }
 
-  /// \brief Return true if this instruction behaves
+  /// Return true if this instruction behaves
   /// the same way as the generic INSERT_SUBREG instructions.
   /// E.g., on ARM,
   /// dX = VSETLNi32 dY, rZ, Imm
@@ -371,7 +376,7 @@
   bool isInsertSubregLike() const { return Flags & (1ULL << MCID::InsertSubreg); }
 
 
-  /// \brief Return true if this instruction is convergent.
+  /// Return true if this instruction is convergent.
   ///
   /// Convergent instructions may not be made control-dependent on any
   /// additional values.
@@ -381,18 +386,18 @@
   // Side Effect Analysis
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return true if this instruction could possibly read memory.
+  /// Return true if this instruction could possibly read memory.
   /// Instructions with this flag set are not necessarily simple load
   /// instructions, they may load a value and modify it, for example.
   bool mayLoad() const { return Flags & (1ULL << MCID::MayLoad); }
 
-  /// \brief Return true if this instruction could possibly modify memory.
+  /// Return true if this instruction could possibly modify memory.
   /// Instructions with this flag set are not necessarily simple store
   /// instructions, they may store a modified value based on their operands, or
   /// may not actually modify anything, for example.
   bool mayStore() const { return Flags & (1ULL << MCID::MayStore); }
 
-  /// \brief Return true if this instruction has side
+  /// Return true if this instruction has side
   /// effects that are not modeled by other flags.  This does not return true
   /// for instructions whose effects are captured by:
   ///
@@ -412,7 +417,7 @@
   // Flags that indicate whether an instruction can be modified by a method.
   //===--------------------------------------------------------------------===//
 
-  /// \brief Return true if this may be a 2- or 3-address instruction (of the
+  /// Return true if this may be a 2- or 3-address instruction (of the
   /// form "X = op Y, Z, ..."), which produces the same result if Y and Z are
   /// exchanged.  If this flag is set, then the
   /// TargetInstrInfo::commuteInstruction method may be used to hack on the
@@ -424,7 +429,7 @@
   /// commute them.
   bool isCommutable() const { return Flags & (1ULL << MCID::Commutable); }
 
-  /// \brief Return true if this is a 2-address instruction which can be changed
+  /// Return true if this is a 2-address instruction which can be changed
   /// into a 3-address instruction if needed.  Doing this transformation can be
   /// profitable in the register allocator, because it means that the
   /// instruction can use a 2-address form if possible, but degrade into a less
@@ -442,7 +447,7 @@
     return Flags & (1ULL << MCID::ConvertibleTo3Addr);
   }
 
-  /// \brief Return true if this instruction requires custom insertion support
+  /// Return true if this instruction requires custom insertion support
   /// when the DAG scheduler is inserting it into a machine basic block.  If
   /// this is true for the instruction, it basically means that it is a pseudo
   /// instruction used at SelectionDAG time that is expanded out into magic code
@@ -454,13 +459,13 @@
     return Flags & (1ULL << MCID::UsesCustomInserter);
   }
 
-  /// \brief Return true if this instruction requires *adjustment* after
+  /// Return true if this instruction requires *adjustment* after
   /// instruction selection by calling a target hook. For example, this can be
   /// used to fill in ARM 's' optional operand depending on whether the
   /// conditional flag register is used.
   bool hasPostISelHook() const { return Flags & (1ULL << MCID::HasPostISelHook); }
 
-  /// \brief Returns true if this instruction is a candidate for remat. This
+  /// Returns true if this instruction is a candidate for remat. This
   /// flag is only used in TargetInstrInfo method isTriviallyRematerializable.
   ///
   /// If this flag is set, the isReallyTriviallyReMaterializable()
@@ -470,7 +475,7 @@
     return Flags & (1ULL << MCID::Rematerializable);
   }
 
-  /// \brief Returns true if this instruction has the same cost (or less) than a
+  /// Returns true if this instruction has the same cost (or less) than a
   /// move instruction. This is useful during certain types of optimizations
   /// (e.g., remat during two-address conversion or machine licm) where we would
   /// like to remat or hoist the instruction, but not if it costs more than
@@ -481,7 +486,7 @@
   /// for different subtargets.
   bool isAsCheapAsAMove() const { return Flags & (1ULL << MCID::CheapAsAMove); }
 
-  /// \brief Returns true if this instruction source operands have special
+  /// Returns true if this instruction source operands have special
   /// register allocation requirements that are not captured by the operand
   /// register classes. e.g. ARM::STRD's two source registers must be an even /
   /// odd pair, ARM::STM registers have to be in ascending order.  Post-register
@@ -491,7 +496,7 @@
     return Flags & (1ULL << MCID::ExtraSrcRegAllocReq);
   }
 
-  /// \brief Returns true if this instruction def operands have special register
+  /// Returns true if this instruction def operands have special register
   /// allocation requirements that are not captured by the operand register
   /// classes. e.g. ARM::LDRD's two def registers must be an even / odd pair,
   /// ARM::LDM registers have to be in ascending order.  Post-register
@@ -501,7 +506,7 @@
     return Flags & (1ULL << MCID::ExtraDefRegAllocReq);
   }
 
-  /// \brief Return a list of registers that are potentially read by any
+  /// Return a list of registers that are potentially read by any
   /// instance of this machine instruction.  For example, on X86, the "adc"
   /// instruction adds two register operands and adds the carry bit in from the
   /// flags register.  In this case, the instruction is marked as implicitly
@@ -511,7 +516,7 @@
   /// This method returns null if the instruction has no implicit uses.
   const MCPhysReg *getImplicitUses() const { return ImplicitUses; }
 
-  /// \brief Return the number of implicit uses this instruction has.
+  /// Return the number of implicit uses this instruction has.
   unsigned getNumImplicitUses() const {
     if (!ImplicitUses)
       return 0;
@@ -521,7 +526,7 @@
     return i;
   }
 
-  /// \brief Return a list of registers that are potentially written by any
+  /// Return a list of registers that are potentially written by any
   /// instance of this machine instruction.  For example, on X86, many
   /// instructions implicitly set the flags register.  In this case, they are
   /// marked as setting the FLAGS.  Likewise, many instructions always deposit
@@ -533,7 +538,7 @@
   /// This method returns null if the instruction has no implicit defs.
   const MCPhysReg *getImplicitDefs() const { return ImplicitDefs; }
 
-  /// \brief Return the number of implicit defs this instruct has.
+  /// Return the number of implicit defs this instruct has.
   unsigned getNumImplicitDefs() const {
     if (!ImplicitDefs)
       return 0;
@@ -543,7 +548,7 @@
     return i;
   }
 
-  /// \brief Return true if this instruction implicitly
+  /// Return true if this instruction implicitly
   /// uses the specified physical register.
   bool hasImplicitUseOfPhysReg(unsigned Reg) const {
     if (const MCPhysReg *ImpUses = ImplicitUses)
@@ -553,22 +558,22 @@
     return false;
   }
 
-  /// \brief Return true if this instruction implicitly
+  /// Return true if this instruction implicitly
   /// defines the specified physical register.
   bool hasImplicitDefOfPhysReg(unsigned Reg,
                                const MCRegisterInfo *MRI = nullptr) const;
 
-  /// \brief Return the scheduling class for this instruction.  The
+  /// Return the scheduling class for this instruction.  The
   /// scheduling class is an index into the InstrItineraryData table.  This
   /// returns zero if there is no known scheduling information for the
   /// instruction.
   unsigned getSchedClass() const { return SchedClass; }
 
-  /// \brief Return the number of bytes in the encoding of this instruction,
+  /// Return the number of bytes in the encoding of this instruction,
   /// or zero if the encoding size cannot be known from the opcode.
   unsigned getSize() const { return Size; }
 
-  /// \brief Find the index of the first operand in the
+  /// Find the index of the first operand in the
   /// operand list that is used to represent the predicate. It returns -1 if
   /// none is found.
   int findFirstPredOperandIdx() const {
@@ -580,7 +585,7 @@
     return -1;
   }
 
-  /// \brief Return true if this instruction defines the specified physical
+  /// Return true if this instruction defines the specified physical
   /// register, either explicitly or implicitly.
   bool hasDefOfPhysReg(const MCInst &MI, unsigned Reg,
                        const MCRegisterInfo &RI) const;
diff --git a/linux-x64/clang/include/llvm/MC/MCInstrInfo.h b/linux-x64/clang/include/llvm/MC/MCInstrInfo.h
index 80f1f32..18da87c 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstrInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstrInfo.h
@@ -20,7 +20,7 @@
 namespace llvm {
 
 //---------------------------------------------------------------------------
-/// \brief Interface to description of machine instruction set.
+/// Interface to description of machine instruction set.
 class MCInstrInfo {
   const MCInstrDesc *Desc;          // Raw array to allow static init'n
   const unsigned *InstrNameIndices; // Array for name indices in InstrNameData
@@ -28,7 +28,7 @@
   unsigned NumOpcodes;              // Number of entries in the desc array
 
 public:
-  /// \brief Initialize MCInstrInfo, called by TableGen auto-generated routines.
+  /// Initialize MCInstrInfo, called by TableGen auto-generated routines.
   /// *DO NOT USE*.
   void InitMCInstrInfo(const MCInstrDesc *D, const unsigned *NI, const char *ND,
                        unsigned NO) {
@@ -40,14 +40,14 @@
 
   unsigned getNumOpcodes() const { return NumOpcodes; }
 
-  /// \brief Return the machine instruction descriptor that corresponds to the
+  /// Return the machine instruction descriptor that corresponds to the
   /// specified instruction opcode.
   const MCInstrDesc &get(unsigned Opcode) const {
     assert(Opcode < NumOpcodes && "Invalid opcode!");
     return Desc[Opcode];
   }
 
-  /// \brief Returns the name for the instructions with the given opcode.
+  /// Returns the name for the instructions with the given opcode.
   StringRef getName(unsigned Opcode) const {
     assert(Opcode < NumOpcodes && "Invalid opcode!");
     return StringRef(&InstrNameData[InstrNameIndices[Opcode]]);
diff --git a/linux-x64/clang/include/llvm/MC/MCInstrItineraries.h b/linux-x64/clang/include/llvm/MC/MCInstrItineraries.h
index f0824e7..fe81376 100644
--- a/linux-x64/clang/include/llvm/MC/MCInstrItineraries.h
+++ b/linux-x64/clang/include/llvm/MC/MCInstrItineraries.h
@@ -67,12 +67,12 @@
   int NextCycles_;   ///< Number of machine cycles to next stage
   ReservationKinds Kind_; ///< Kind of the FU reservation
 
-  /// \brief Returns the number of cycles the stage is occupied.
+  /// Returns the number of cycles the stage is occupied.
   unsigned getCycles() const {
     return Cycles_;
   }
 
-  /// \brief Returns the choice of FUs.
+  /// Returns the choice of FUs.
   unsigned getUnits() const {
     return Units_;
   }
@@ -81,7 +81,7 @@
     return Kind_;
   }
 
-  /// \brief Returns the number of cycles from the start of this stage to the
+  /// Returns the number of cycles from the start of this stage to the
   /// start of the next stage in the itinerary
   unsigned getNextCycles() const {
     return (NextCycles_ >= 0) ? (unsigned)NextCycles_ : Cycles_;
@@ -120,28 +120,28 @@
     : SchedModel(SM), Stages(S), OperandCycles(OS), Forwardings(F),
       Itineraries(SchedModel.InstrItineraries) {}
 
-  /// \brief Returns true if there are no itineraries.
+  /// Returns true if there are no itineraries.
   bool isEmpty() const { return Itineraries == nullptr; }
 
-  /// \brief Returns true if the index is for the end marker itinerary.
+  /// Returns true if the index is for the end marker itinerary.
   bool isEndMarker(unsigned ItinClassIndx) const {
     return ((Itineraries[ItinClassIndx].FirstStage == UINT16_MAX) &&
             (Itineraries[ItinClassIndx].LastStage == UINT16_MAX));
   }
 
-  /// \brief Return the first stage of the itinerary.
+  /// Return the first stage of the itinerary.
   const InstrStage *beginStage(unsigned ItinClassIndx) const {
     unsigned StageIdx = Itineraries[ItinClassIndx].FirstStage;
     return Stages + StageIdx;
   }
 
-  /// \brief Return the last+1 stage of the itinerary.
+  /// Return the last+1 stage of the itinerary.
   const InstrStage *endStage(unsigned ItinClassIndx) const {
     unsigned StageIdx = Itineraries[ItinClassIndx].LastStage;
     return Stages + StageIdx;
   }
 
-  /// \brief Return the total stage latency of the given class.  The latency is
+  /// Return the total stage latency of the given class.  The latency is
   /// the maximum completion time for any stage in the itinerary.  If no stages
   /// exist, it defaults to one cycle.
   unsigned getStageLatency(unsigned ItinClassIndx) const {
@@ -160,7 +160,7 @@
     return Latency;
   }
 
-  /// \brief Return the cycle for the given class and operand.  Return -1 if no
+  /// Return the cycle for the given class and operand.  Return -1 if no
   /// cycle is specified for the operand.
   int getOperandCycle(unsigned ItinClassIndx, unsigned OperandIdx) const {
     if (isEmpty())
@@ -174,7 +174,7 @@
     return (int)OperandCycles[FirstIdx + OperandIdx];
   }
 
-  /// \brief Return true if there is a pipeline forwarding between instructions
+  /// Return true if there is a pipeline forwarding between instructions
   /// of itinerary classes DefClass and UseClasses so that value produced by an
   /// instruction of itinerary class DefClass, operand index DefIdx can be
   /// bypassed when it's read by an instruction of itinerary class UseClass,
@@ -197,7 +197,7 @@
       Forwardings[FirstUseIdx + UseIdx];
   }
 
-  /// \brief Compute and return the use operand latency of a given itinerary
+  /// Compute and return the use operand latency of a given itinerary
   /// class and operand index if the value is produced by an instruction of the
   /// specified itinerary class and def operand index.
   int getOperandLatency(unsigned DefClass, unsigned DefIdx,
@@ -221,7 +221,7 @@
     return UseCycle;
   }
 
-  /// \brief Return the number of micro-ops that the given class decodes to.
+  /// Return the number of micro-ops that the given class decodes to.
   /// Return -1 for classes that require dynamic lookup via TargetInstrInfo.
   int getNumMicroOps(unsigned ItinClassIndx) const {
     if (isEmpty())
diff --git a/linux-x64/clang/include/llvm/MC/MCLabel.h b/linux-x64/clang/include/llvm/MC/MCLabel.h
index b6579fd..aaf7069 100644
--- a/linux-x64/clang/include/llvm/MC/MCLabel.h
+++ b/linux-x64/clang/include/llvm/MC/MCLabel.h
@@ -18,11 +18,11 @@
 
 class raw_ostream;
 
-/// \brief Instances of this class represent a label name in the MC file,
+/// Instances of this class represent a label name in the MC file,
 /// and MCLabel are created and uniqued by the MCContext class.  MCLabel
 /// should only be constructed for valid instances in the object file.
 class MCLabel {
-  // \brief The instance number of this Directional Local Label.
+  // The instance number of this Directional Local Label.
   unsigned Instance;
 
 private: // MCContext creates and uniques these.
@@ -34,16 +34,16 @@
   MCLabel(const MCLabel &) = delete;
   MCLabel &operator=(const MCLabel &) = delete;
 
-  /// \brief Get the current instance of this Directional Local Label.
+  /// Get the current instance of this Directional Local Label.
   unsigned getInstance() const { return Instance; }
 
-  /// \brief Increment the current instance of this Directional Local Label.
+  /// Increment the current instance of this Directional Local Label.
   unsigned incInstance() { return ++Instance; }
 
-  /// \brief Print the value to the stream \p OS.
+  /// Print the value to the stream \p OS.
   void print(raw_ostream &OS) const;
 
-  /// \brief Print the value to stderr.
+  /// Print the value to stderr.
   void dump() const;
 };
 
diff --git a/linux-x64/clang/include/llvm/MC/MCMachObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCMachObjectWriter.h
index 594869f..22fbeb7 100644
--- a/linux-x64/clang/include/llvm/MC/MCMachObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCMachObjectWriter.h
@@ -26,7 +26,7 @@
 
 class MachObjectWriter;
 
-class MCMachObjectTargetWriter {
+class MCMachObjectTargetWriter : public MCObjectTargetWriter {
   const unsigned Is64Bit : 1;
   const uint32_t CPUType;
   const uint32_t CPUSubtype;
@@ -43,6 +43,11 @@
 public:
   virtual ~MCMachObjectTargetWriter();
 
+  virtual Triple::ObjectFormatType getFormat() const { return Triple::MachO; }
+  static bool classof(const MCObjectTargetWriter *W) {
+    return W->getFormat() == Triple::MachO;
+  }
+
   /// \name Lifetime Management
   /// @{
 
@@ -116,11 +121,15 @@
 
   MachSymbolData *findSymbolData(const MCSymbol &Sym);
 
+  void writeWithPadding(StringRef Str, uint64_t Size);
+
 public:
   MachObjectWriter(std::unique_ptr<MCMachObjectTargetWriter> MOTW,
                    raw_pwrite_stream &OS, bool IsLittleEndian)
-      : MCObjectWriter(OS, IsLittleEndian),
-        TargetObjectWriter(std::move(MOTW)) {}
+      : TargetObjectWriter(std::move(MOTW)),
+        W(OS, IsLittleEndian ? support::little : support::big) {}
+
+  support::endian::Writer W;
 
   const MCSymbol &findAliasedSymbol(const MCSymbol &Sym) const;
 
@@ -260,7 +269,7 @@
                                               const MCFragment &FB, bool InSet,
                                               bool IsPCRel) const override;
 
-  void writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override;
+  uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) override;
 };
 
 /// Construct a new Mach-O writer instance.
diff --git a/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h b/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
index c99f252..8cf9e1c 100644
--- a/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCObjectFileInfo.h
@@ -14,7 +14,9 @@
 #ifndef LLVM_MC_MCOBJECTFILEINFO_H
 #define LLVM_MC_MCOBJECTFILEINFO_H
 
+#include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/Triple.h"
+#include "llvm/MC/MCSymbol.h"
 #include "llvm/Support/CodeGen.h"
 
 namespace llvm {
@@ -40,12 +42,11 @@
   /// dwarf unwind.
   bool OmitDwarfIfHaveCompactUnwind;
 
-  /// PersonalityEncoding, LSDAEncoding, TTypeEncoding - Some encoding values
-  /// for EH.
-  unsigned PersonalityEncoding;
-  unsigned LSDAEncoding;
-  unsigned FDECFIEncoding;
-  unsigned TTypeEncoding;
+  /// FDE CFI encoding. Controls the encoding of the begin label in the
+  /// .eh_frame section. Unlike the LSDA encoding, personality encoding, and
+  /// type encodings, this is something that the assembler just "knows" about
+  /// its target
+  unsigned FDECFIEncoding = 0;
 
   /// Compact unwind encoding indicating that we should emit only an EH frame.
   unsigned CompactUnwindDwarfEHFrameOnly;
@@ -92,11 +93,11 @@
   // can be enabled by a compiler flag.
   MCSection *DwarfPubNamesSection;
 
-  /// DWARF5 Experimental Debug Info Sections
-  /// DwarfAccelNamesSection, DwarfAccelObjCSection,
-  /// DwarfAccelNamespaceSection, DwarfAccelTypesSection -
-  /// If we use the DWARF accelerated hash tables then we want to emit these
-  /// sections.
+  /// Accelerator table sections. DwarfDebugNamesSection is the DWARF v5
+  /// accelerator table, while DwarfAccelNamesSection, DwarfAccelObjCSection,
+  /// DwarfAccelNamespaceSection, DwarfAccelTypesSection are pre-DWARF v5
+  /// extensions.
+  MCSection *DwarfDebugNamesSection;
   MCSection *DwarfAccelNamesSection;
   MCSection *DwarfAccelObjCSection;
   MCSection *DwarfAccelNamespaceSection;
@@ -114,6 +115,11 @@
   /// The DWARF v5 string offset and address table sections.
   MCSection *DwarfStrOffSection;
   MCSection *DwarfAddrSection;
+  /// The DWARF v5 range list section.
+  MCSection *DwarfRnglistsSection;
+
+  /// The DWARF v5 range list section for fission.
+  MCSection *DwarfRnglistsDWOSection;
 
   // These are for Fission DWP files.
   MCSection *DwarfCUIndexSection;
@@ -158,6 +164,7 @@
 
   /// Section containing metadata on function stack sizes.
   MCSection *StackSizesSection;
+  mutable DenseMap<const MCSymbol *, unsigned> StackSizesUniquing;
 
   // ELF specific sections.
   MCSection *DataRelROSection;
@@ -183,6 +190,7 @@
   MCSection *ConstTextCoalSection;
   MCSection *ConstDataSection;
   MCSection *DataCoalSection;
+  MCSection *ConstDataCoalSection;
   MCSection *DataCommonSection;
   MCSection *DataBSSSection;
   MCSection *FourByteConstantSection;
@@ -217,10 +225,7 @@
     return CommDirectiveSupportsAlignment;
   }
 
-  unsigned getPersonalityEncoding() const { return PersonalityEncoding; }
-  unsigned getLSDAEncoding() const { return LSDAEncoding; }
   unsigned getFDEEncoding() const { return FDECFIEncoding; }
-  unsigned getTTypeEncoding() const { return TTypeEncoding; }
 
   unsigned getCompactUnwindDwarfEHFrameOnly() const {
     return CompactUnwindDwarfEHFrameOnly;
@@ -252,9 +257,12 @@
   MCSection *getDwarfLocSection() const { return DwarfLocSection; }
   MCSection *getDwarfARangesSection() const { return DwarfARangesSection; }
   MCSection *getDwarfRangesSection() const { return DwarfRangesSection; }
+  MCSection *getDwarfRnglistsSection() const { return DwarfRnglistsSection; }
   MCSection *getDwarfMacinfoSection() const { return DwarfMacinfoSection; }
 
-  // DWARF5 Experimental Debug Info Sections
+  MCSection *getDwarfDebugNamesSection() const {
+    return DwarfDebugNamesSection;
+  }
   MCSection *getDwarfAccelNamesSection() const {
     return DwarfAccelNamesSection;
   }
@@ -275,6 +283,9 @@
   MCSection *getDwarfStrOffDWOSection() const { return DwarfStrOffDWOSection; }
   MCSection *getDwarfStrOffSection() const { return DwarfStrOffSection; }
   MCSection *getDwarfAddrSection() const { return DwarfAddrSection; }
+  MCSection *getDwarfRnglistsDWOSection() const {
+    return DwarfRnglistsDWOSection;
+  }
   MCSection *getDwarfCUIndexSection() const { return DwarfCUIndexSection; }
   MCSection *getDwarfTUIndexSection() const { return DwarfTUIndexSection; }
   MCSection *getDwarfSwiftASTSection() const { return DwarfSwiftASTSection; }
@@ -296,7 +307,7 @@
   MCSection *getStackMapSection() const { return StackMapSection; }
   MCSection *getFaultMapSection() const { return FaultMapSection; }
 
-  MCSection *getStackSizesSection() const { return StackSizesSection; }
+  MCSection *getStackSizesSection(const MCSection &TextSec) const;
 
   // ELF specific sections.
   MCSection *getDataRelROSection() const { return DataRelROSection; }
@@ -326,6 +337,9 @@
   }
   const MCSection *getConstDataSection() const { return ConstDataSection; }
   const MCSection *getDataCoalSection() const { return DataCoalSection; }
+  const MCSection *getConstDataCoalSection() const {
+    return ConstDataCoalSection;
+  }
   const MCSection *getDataCommonSection() const { return DataCommonSection; }
   MCSection *getDataBSSSection() const { return DataBSSSection; }
   const MCSection *getFourByteConstantSection() const {
diff --git a/linux-x64/clang/include/llvm/MC/MCObjectStreamer.h b/linux-x64/clang/include/llvm/MC/MCObjectStreamer.h
index 8e9b4ac..035206d 100644
--- a/linux-x64/clang/include/llvm/MC/MCObjectStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCObjectStreamer.h
@@ -26,7 +26,7 @@
 class raw_ostream;
 class raw_pwrite_stream;
 
-/// \brief Streaming object file generation interface.
+/// Streaming object file generation interface.
 ///
 /// This class provides an implementation of the MCStreamer interface which is
 /// suitable for use with the assembler backend. Specific object file formats
@@ -34,9 +34,6 @@
 /// to that file format or custom semantics expected by the object writer
 /// implementation.
 class MCObjectStreamer : public MCStreamer {
-  std::unique_ptr<MCObjectWriter> ObjectWriter;
-  std::unique_ptr<MCAsmBackend> TAB;
-  std::unique_ptr<MCCodeEmitter> Emitter;
   std::unique_ptr<MCAssembler> Assembler;
   MCSection::iterator CurInsertionPoint;
   bool EmitEHFrame;
@@ -51,7 +48,7 @@
 
 protected:
   MCObjectStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB,
-                   raw_pwrite_stream &OS,
+                   std::unique_ptr<MCObjectWriter> OW,
                    std::unique_ptr<MCCodeEmitter> Emitter);
   ~MCObjectStreamer();
 
@@ -76,7 +73,9 @@
 
   /// Get a data fragment to write into, creating a new one if the current
   /// fragment is not a data fragment.
-  MCDataFragment *getOrCreateDataFragment();
+  /// Optionally a \p STI can be passed in so that a new fragment is created
+  /// if the Subtarget differs from the current fragment.
+  MCDataFragment *getOrCreateDataFragment(const MCSubtargetInfo* STI = nullptr);
   MCPaddingFragment *getOrCreatePaddingFragment();
 
 protected:
@@ -91,8 +90,11 @@
 public:
   void visitUsedSymbol(const MCSymbol &Sym) override;
 
-  MCAssembler &getAssembler() { return *Assembler; }
+  /// Create a dummy fragment to assign any pending labels.
+  void flushPendingLabels() { flushPendingLabels(nullptr); }
 
+  MCAssembler &getAssembler() { return *Assembler; }
+  MCAssembler *getAssemblerPtr() override;
   /// \name MCStreamer Interface
   /// @{
 
@@ -108,7 +110,7 @@
   void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
                        bool = false) override;
 
-  /// \brief Emit an instruction to a special fragment, because this instruction
+  /// Emit an instruction to a special fragment, because this instruction
   /// can change its size during relaxation.
   virtual void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &);
 
@@ -159,7 +161,8 @@
   void EmitGPRel32Value(const MCExpr *Value) override;
   void EmitGPRel64Value(const MCExpr *Value) override;
   bool EmitRelocDirective(const MCExpr &Offset, StringRef Name,
-                          const MCExpr *Expr, SMLoc Loc) override;
+                          const MCExpr *Expr, SMLoc Loc,
+                          const MCSubtargetInfo &STI) override;
   using MCStreamer::emitFill;
   void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
                 SMLoc Loc = SMLoc()) override;
@@ -167,6 +170,9 @@
                 SMLoc Loc = SMLoc()) override;
   void EmitFileDirective(StringRef Filename) override;
 
+  void EmitAddrsig() override;
+  void EmitAddrsigSym(const MCSymbol *Sym) override;
+
   void FinishImpl() override;
 
   /// Emit the absolute difference between two symbols if possible.
diff --git a/linux-x64/clang/include/llvm/MC/MCObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCObjectWriter.h
index cd90690..8bae2bf 100644
--- a/linux-x64/clang/include/llvm/MC/MCObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCObjectWriter.h
@@ -12,6 +12,7 @@
 
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/ADT/Triple.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/EndianStream.h"
 #include "llvm/Support/raw_ostream.h"
@@ -36,22 +37,9 @@
 /// points. Once assembly is complete, the object writer is given the
 /// MCAssembler instance, which contains all the symbol and section data which
 /// should be emitted as part of writeObject().
-///
-/// The object writer also contains a number of helper methods for writing
-/// binary data to the output stream.
 class MCObjectWriter {
-  raw_pwrite_stream *OS;
-
 protected:
-  unsigned IsLittleEndian : 1;
-
-  // Can only create subclasses.
-  MCObjectWriter(raw_pwrite_stream &OS, bool IsLittleEndian)
-      : OS(&OS), IsLittleEndian(IsLittleEndian) {}
-
-  unsigned getInitialOffset() {
-    return OS->tell();
-  }
+  MCObjectWriter() = default;
 
 public:
   MCObjectWriter(const MCObjectWriter &) = delete;
@@ -61,11 +49,6 @@
   /// lifetime management
   virtual void reset() {}
 
-  bool isLittleEndian() const { return IsLittleEndian; }
-
-  raw_pwrite_stream &getStream() { return *OS; }
-  void setStream(raw_pwrite_stream &NewOS) { OS = &NewOS; }
-
   /// \name High-Level API
   /// @{
 
@@ -109,90 +92,31 @@
                                                       bool InSet,
                                                       bool IsPCRel) const;
 
-  /// Write the object file.
+  /// Tell the object writer to emit an address-significance table during
+  /// writeObject(). If this function is not called, all symbols are treated as
+  /// address-significant.
+  virtual void emitAddrsigSection() {}
+
+  /// Record the given symbol in the address-significance table to be written
+  /// diring writeObject().
+  virtual void addAddrsigSymbol(const MCSymbol *Sym) {}
+
+  /// Write the object file and returns the number of bytes written.
   ///
   /// This routine is called by the assembler after layout and relaxation is
   /// complete, fixups have been evaluated and applied, and relocations
   /// generated.
-  virtual void writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) = 0;
+  virtual uint64_t writeObject(MCAssembler &Asm, const MCAsmLayout &Layout) = 0;
 
   /// @}
-  /// \name Binary Output
-  /// @{
+};
 
-  void write8(uint8_t Value) { *OS << char(Value); }
-
-  void writeLE16(uint16_t Value) {
-    support::endian::Writer<support::little>(*OS).write(Value);
-  }
-
-  void writeLE32(uint32_t Value) {
-    support::endian::Writer<support::little>(*OS).write(Value);
-  }
-
-  void writeLE64(uint64_t Value) {
-    support::endian::Writer<support::little>(*OS).write(Value);
-  }
-
-  void writeBE16(uint16_t Value) {
-    support::endian::Writer<support::big>(*OS).write(Value);
-  }
-
-  void writeBE32(uint32_t Value) {
-    support::endian::Writer<support::big>(*OS).write(Value);
-  }
-
-  void writeBE64(uint64_t Value) {
-    support::endian::Writer<support::big>(*OS).write(Value);
-  }
-
-  void write16(uint16_t Value) {
-    if (IsLittleEndian)
-      writeLE16(Value);
-    else
-      writeBE16(Value);
-  }
-
-  void write32(uint32_t Value) {
-    if (IsLittleEndian)
-      writeLE32(Value);
-    else
-      writeBE32(Value);
-  }
-
-  void write64(uint64_t Value) {
-    if (IsLittleEndian)
-      writeLE64(Value);
-    else
-      writeBE64(Value);
-  }
-
-  void WriteZeros(unsigned N) {
-    const char Zeros[16] = {0};
-
-    for (unsigned i = 0, e = N / 16; i != e; ++i)
-      *OS << StringRef(Zeros, 16);
-
-    *OS << StringRef(Zeros, N % 16);
-  }
-
-  void writeBytes(const SmallVectorImpl<char> &ByteVec,
-                  unsigned ZeroFillSize = 0) {
-    writeBytes(StringRef(ByteVec.data(), ByteVec.size()), ZeroFillSize);
-  }
-
-  void writeBytes(StringRef Str, unsigned ZeroFillSize = 0) {
-    // TODO: this version may need to go away once all fragment contents are
-    // converted to SmallVector<char, N>
-    assert(
-        (ZeroFillSize == 0 || Str.size() <= ZeroFillSize) &&
-        "data size greater than fill size, unexpected large write will occur");
-    *OS << Str;
-    if (ZeroFillSize)
-      WriteZeros(ZeroFillSize - Str.size());
-  }
-
-  /// @}
+/// Base class for classes that define behaviour that is specific to both the
+/// target and the object format.
+class MCObjectTargetWriter {
+public:
+  virtual ~MCObjectTargetWriter() = default;
+  virtual Triple::ObjectFormatType getFormat() const = 0;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/AsmCond.h b/linux-x64/clang/include/llvm/MC/MCParser/AsmCond.h
index 8e7bfc5..a6e0fbd 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/AsmCond.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/AsmCond.h
@@ -15,7 +15,7 @@
 /// AsmCond - Class to support conditional assembly
 ///
 /// The conditional assembly feature (.if, .else, .elseif and .endif) is
-/// implemented with AsmCond that tells us what we are in the middle of 
+/// implemented with AsmCond that tells us what we are in the middle of
 /// processing.  Ignore can be either true or false.  When true we are ignoring
 /// the block of code in the middle of a conditional.
 
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParser.h b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParser.h
index 0f79c47..0d56f36 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParser.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParser.h
@@ -91,7 +91,7 @@
   IdKind Kind;
 };
 
-/// \brief Generic Sema callback for assembly parser.
+/// Generic Sema callback for assembly parser.
 class MCAsmParserSemaCallback {
 public:
   virtual ~MCAsmParserSemaCallback();
@@ -105,7 +105,7 @@
                                     unsigned &Offset) = 0;
 };
 
-/// \brief Generic assembler parser interface, for use by target specific
+/// Generic assembler parser interface, for use by target specific
 /// assembly parsers.
 class MCAsmParser {
 public:
@@ -153,7 +153,7 @@
 
   virtual MCContext &getContext() = 0;
 
-  /// \brief Return the output streamer for the assembler.
+  /// Return the output streamer for the assembler.
   virtual MCStreamer &getStreamer() = 0;
 
   MCTargetAsmParser &getTargetParser() const { return *TargetParser; }
@@ -168,13 +168,13 @@
   void setEnablePrintSchedInfo(bool Value) { EnablePrintSchedInfo = Value; }
   bool shouldPrintSchedInfo() { return EnablePrintSchedInfo; }
 
-  /// \brief Run the parser on the input source buffer.
+  /// Run the parser on the input source buffer.
   virtual bool Run(bool NoInitialTextSection, bool NoFinalize = false) = 0;
 
   virtual void setParsingInlineAsm(bool V) = 0;
   virtual bool isParsingInlineAsm() = 0;
 
-  /// \brief Parse MS-style inline assembly.
+  /// Parse MS-style inline assembly.
   virtual bool parseMSInlineAsm(
       void *AsmLoc, std::string &AsmString, unsigned &NumOutputs,
       unsigned &NumInputs, SmallVectorImpl<std::pair<void *, bool>> &OpDecls,
@@ -182,22 +182,22 @@
       SmallVectorImpl<std::string> &Clobbers, const MCInstrInfo *MII,
       const MCInstPrinter *IP, MCAsmParserSemaCallback &SI) = 0;
 
-  /// \brief Emit a note at the location \p L, with the message \p Msg.
+  /// Emit a note at the location \p L, with the message \p Msg.
   virtual void Note(SMLoc L, const Twine &Msg, SMRange Range = None) = 0;
 
-  /// \brief Emit a warning at the location \p L, with the message \p Msg.
+  /// Emit a warning at the location \p L, with the message \p Msg.
   ///
   /// \return The return value is true, if warnings are fatal.
   virtual bool Warning(SMLoc L, const Twine &Msg, SMRange Range = None) = 0;
 
-  /// \brief Return an error at the location \p L, with the message \p Msg. This
+  /// Return an error at the location \p L, with the message \p Msg. This
   /// may be modified before being emitted.
   ///
   /// \return The return value is always true, as an idiomatic convenience to
   /// clients.
   bool Error(SMLoc L, const Twine &Msg, SMRange Range = None);
 
-  /// \brief Emit an error at the location \p L, with the message \p Msg.
+  /// Emit an error at the location \p L, with the message \p Msg.
   ///
   /// \return The return value is always true, as an idiomatic convenience to
   /// clients.
@@ -214,21 +214,23 @@
     return rv;
   }
 
+  void clearPendingErrors() { PendingErrors.clear(); }
+
   bool addErrorSuffix(const Twine &Suffix);
 
-  /// \brief Get the next AsmToken in the stream, possibly handling file
+  /// Get the next AsmToken in the stream, possibly handling file
   /// inclusion first.
   virtual const AsmToken &Lex() = 0;
 
-  /// \brief Get the current AsmToken from the stream.
+  /// Get the current AsmToken from the stream.
   const AsmToken &getTok() const;
 
-  /// \brief Report an error at the current lexer location.
+  /// Report an error at the current lexer location.
   bool TokError(const Twine &Msg, SMRange Range = None);
 
   bool parseTokenLoc(SMLoc &Loc);
   bool parseToken(AsmToken::TokenKind T, const Twine &Msg = "unexpected token");
-  /// \brief Attempt to parse and consume token, returning true on
+  /// Attempt to parse and consume token, returning true on
   /// success.
   bool parseOptionalToken(AsmToken::TokenKind T);
 
@@ -241,23 +243,23 @@
   bool check(bool P, const Twine &Msg);
   bool check(bool P, SMLoc Loc, const Twine &Msg);
 
-  /// \brief Parse an identifier or string (as a quoted identifier) and set \p
+  /// Parse an identifier or string (as a quoted identifier) and set \p
   /// Res to the identifier contents.
   virtual bool parseIdentifier(StringRef &Res) = 0;
 
-  /// \brief Parse up to the end of statement and return the contents from the
+  /// Parse up to the end of statement and return the contents from the
   /// current token until the end of the statement; the current token on exit
   /// will be either the EndOfStatement or EOF.
   virtual StringRef parseStringToEndOfStatement() = 0;
 
-  /// \brief Parse the current token as a string which may include escaped
+  /// Parse the current token as a string which may include escaped
   /// characters and return the string contents.
   virtual bool parseEscapedString(std::string &Data) = 0;
 
-  /// \brief Skip to the end of the current statement, for error recovery.
+  /// Skip to the end of the current statement, for error recovery.
   virtual void eatToEndOfStatement() = 0;
 
-  /// \brief Parse an arbitrary expression.
+  /// Parse an arbitrary expression.
   ///
   /// \param Res - The value of the expression. The result is undefined
   /// on error.
@@ -265,14 +267,14 @@
   virtual bool parseExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0;
   bool parseExpression(const MCExpr *&Res);
 
-  /// \brief Parse a primary expression.
+  /// Parse a primary expression.
   ///
   /// \param Res - The value of the expression. The result is undefined
   /// on error.
   /// \return - False on success.
   virtual bool parsePrimaryExpr(const MCExpr *&Res, SMLoc &EndLoc) = 0;
 
-  /// \brief Parse an arbitrary expression, assuming that an initial '(' has
+  /// Parse an arbitrary expression, assuming that an initial '(' has
   /// already been consumed.
   ///
   /// \param Res - The value of the expression. The result is undefined
@@ -280,19 +282,19 @@
   /// \return - False on success.
   virtual bool parseParenExpression(const MCExpr *&Res, SMLoc &EndLoc) = 0;
 
-  /// \brief Parse an expression which must evaluate to an absolute value.
+  /// Parse an expression which must evaluate to an absolute value.
   ///
   /// \param Res - The value of the absolute expression. The result is undefined
   /// on error.
   /// \return - False on success.
   virtual bool parseAbsoluteExpression(int64_t &Res) = 0;
 
-  /// \brief Ensure that we have a valid section set in the streamer. Otherwise,
+  /// Ensure that we have a valid section set in the streamer. Otherwise,
   /// report an error and switch to .text.
   /// \return - False on success.
   virtual bool checkForValidSection() = 0;
 
-  /// \brief Parse an arbitrary expression of a specified parenthesis depth,
+  /// Parse an arbitrary expression of a specified parenthesis depth,
   /// assuming that the initial '(' characters have already been consumed.
   ///
   /// \param ParenDepth - Specifies how many trailing expressions outside the
@@ -304,7 +306,7 @@
                                      SMLoc &EndLoc) = 0;
 };
 
-/// \brief Create an MCAsmParser instance.
+/// Create an MCAsmParser instance.
 MCAsmParser *createMCAsmParser(SourceMgr &, MCContext &, MCStreamer &,
                                const MCAsmInfo &, unsigned CB = 0);
 
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserExtension.h b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserExtension.h
index ffb8d7a..1a132bc 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserExtension.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserExtension.h
@@ -20,7 +20,7 @@
 
 class Twine;
 
-/// \brief Generic interface for extending the MCAsmParser,
+/// Generic interface for extending the MCAsmParser,
 /// which is implemented by target and object file assembly parser
 /// implementations.
 class MCAsmParserExtension {
@@ -45,7 +45,7 @@
   MCAsmParserExtension &operator=(const MCAsmParserExtension &) = delete;
   virtual ~MCAsmParserExtension();
 
-  /// \brief Initialize the extension for parsing using the given \p Parser.
+  /// Initialize the extension for parsing using the given \p Parser.
   /// The extension should use the AsmParser interfaces to register its
   /// parsing routines.
   virtual void Initialize(MCAsmParser &Parser);
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserUtils.h b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserUtils.h
index 84173bb..259113b 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserUtils.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/MCAsmParserUtils.h
@@ -25,7 +25,7 @@
 /// On success, returns false and sets the Symbol and Value output parameters.
 bool parseAssignmentExpression(StringRef Name, bool allow_redef,
                                MCAsmParser &Parser, MCSymbol *&Symbol,
-                               const MCExpr *&Value);
+                               const MCExpr *&Value, bool AllowExtendedExpr = false);
 
 } // namespace MCParserUtils
 
diff --git a/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h b/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
index d628794..2d188a6 100644
--- a/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
+++ b/linux-x64/clang/include/llvm/MC/MCParser/MCTargetAsmParser.h
@@ -14,6 +14,7 @@
 #include "llvm/MC/MCExpr.h"
 #include "llvm/MC/MCInstrInfo.h"
 #include "llvm/MC/MCParser/MCAsmLexer.h"
+#include "llvm/MC/MCParser/MCParsedAsmOperand.h"
 #include "llvm/MC/MCParser/MCAsmParserExtension.h"
 #include "llvm/MC/MCTargetOptions.h"
 #include "llvm/Support/SMLoc.h"
@@ -133,6 +134,53 @@
   MatchOperand_ParseFail // operand matched but had errors
 };
 
+enum class DiagnosticPredicateTy {
+  Match,
+  NearMatch,
+  NoMatch,
+};
+
+// When an operand is parsed, the assembler will try to iterate through a set of
+// possible operand classes that the operand might match and call the
+// corresponding PredicateMethod to determine that.
+//
+// If there are two AsmOperands that would give a specific diagnostic if there
+// is no match, there is currently no mechanism to distinguish which operand is
+// a closer match. The DiagnosticPredicate distinguishes between 'completely
+// no match' and 'near match', so the assembler can decide whether to give a
+// specific diagnostic, or use 'InvalidOperand' and continue to find a
+// 'better matching' diagnostic.
+//
+// For example:
+//    opcode opnd0, onpd1, opnd2
+//
+// where:
+//    opnd2 could be an 'immediate of range [-8, 7]'
+//    opnd2 could be a  'register + shift/extend'.
+//
+// If opnd2 is a valid register, but with a wrong shift/extend suffix, it makes
+// little sense to give a diagnostic that the operand should be an immediate
+// in range [-8, 7].
+//
+// This is a light-weight alternative to the 'NearMissInfo' approach
+// below which collects *all* possible diagnostics. This alternative
+// is optional and fully backward compatible with existing
+// PredicateMethods that return a 'bool' (match or no match).
+struct DiagnosticPredicate {
+  DiagnosticPredicateTy Type;
+
+  explicit DiagnosticPredicate(bool Match)
+      : Type(Match ? DiagnosticPredicateTy::Match
+                   : DiagnosticPredicateTy::NearMatch) {}
+  DiagnosticPredicate(DiagnosticPredicateTy T) : Type(T) {}
+  DiagnosticPredicate(const DiagnosticPredicate &) = default;
+
+  operator bool() const { return Type == DiagnosticPredicateTy::Match; }
+  bool isMatch() const { return Type == DiagnosticPredicateTy::Match; }
+  bool isNearMatch() const { return Type == DiagnosticPredicateTy::NearMatch; }
+  bool isNoMatch() const { return Type == DiagnosticPredicateTy::NoMatch; }
+};
+
 // When matching of an assembly instruction fails, there may be multiple
 // encodings that are close to being a match. It's often ambiguous which one
 // the programmer intended to use, so we want to report an error which mentions
@@ -324,6 +372,11 @@
     SemaCallback = Callback;
   }
 
+  // Target-specific parsing of assembler-level variable assignment.
+  virtual bool parseAssignmentExpression(const MCExpr *&Res, SMLoc &EndLoc) {
+    return getParser().parseExpression(Res, EndLoc);
+  }
+
   virtual bool ParseRegister(unsigned &RegNo, SMLoc &StartLoc,
                              SMLoc &EndLoc) = 0;
 
@@ -401,6 +454,15 @@
   virtual void convertToMapAndConstraints(unsigned Kind,
                                           const OperandVector &Operands) = 0;
 
+  /// Returns whether two registers are equal and is used by the tied-operands
+  /// checks in the AsmMatcher. This method can be overridden allow e.g. a
+  /// sub- or super-register as the tied operand.
+  virtual bool regsEqual(const MCParsedAsmOperand &Op1,
+                         const MCParsedAsmOperand &Op2) const {
+    assert(Op1.isReg() && Op2.isReg() && "Operands not all regs");
+    return Op1.getReg() == Op2.getReg();
+  }
+
   // Return whether this parser uses assignment statements with equals tokens
   virtual bool equalIsAsmAssignment() { return true; };
   // Return whether this start of statement identifier is a label
diff --git a/linux-x64/clang/include/llvm/MC/MCRegisterInfo.h b/linux-x64/clang/include/llvm/MC/MCRegisterInfo.h
index c57c9ef..8d8c677 100644
--- a/linux-x64/clang/include/llvm/MC/MCRegisterInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCRegisterInfo.h
@@ -41,7 +41,6 @@
   const uint16_t RegsSize;
   const uint16_t RegSetSize;
   const uint16_t ID;
-  const uint16_t PhysRegSize;
   const int8_t CopyCost;
   const bool Allocatable;
 
@@ -80,11 +79,6 @@
     return contains(Reg1) && contains(Reg2);
   }
 
-  /// Return the size of the physical register in bytes.
-  unsigned getPhysRegSize() const { return PhysRegSize; }
-  /// Temporary function to allow out-of-tree targets to switch.
-  unsigned getSize() const { return getPhysRegSize(); }
-
   /// getCopyCost - Return the cost of copying a value between two registers in
   /// this class. A negative number means the register class is very expensive
   /// to copy e.g. status flag register classes.
@@ -240,7 +234,7 @@
   friend class MCRegUnitMaskIterator;
   friend class MCRegUnitRootIterator;
 
-  /// \brief Initialize MCRegisterInfo, called by TableGen
+  /// Initialize MCRegisterInfo, called by TableGen
   /// auto-generated routines. *DO NOT USE*.
   void InitMCRegisterInfo(const MCRegisterDesc *D, unsigned NR, unsigned RA,
                           unsigned PC,
@@ -283,7 +277,7 @@
     Dwarf2LRegsSize = 0;
   }
 
-  /// \brief Used to initialize LLVM register to Dwarf
+  /// Used to initialize LLVM register to Dwarf
   /// register number mapping. Called by TableGen auto-generated routines.
   /// *DO NOT USE*.
   void mapLLVMRegsToDwarfRegs(const DwarfLLVMRegPair *Map, unsigned Size,
@@ -297,7 +291,7 @@
     }
   }
 
-  /// \brief Used to initialize Dwarf register to LLVM
+  /// Used to initialize Dwarf register to LLVM
   /// register number mapping. Called by TableGen auto-generated routines.
   /// *DO NOT USE*.
   void mapDwarfRegsToLLVMRegs(const DwarfLLVMRegPair *Map, unsigned Size,
@@ -324,7 +318,7 @@
     L2CVRegs[LLVMReg] = CVReg;
   }
 
-  /// \brief This method should return the register where the return
+  /// This method should return the register where the return
   /// address can be found.
   unsigned getRARegister() const {
     return RAReg;
@@ -341,86 +335,86 @@
     return Desc[RegNo];
   }
 
-  /// \brief Provide a get method, equivalent to [], but more useful with a
+  /// Provide a get method, equivalent to [], but more useful with a
   /// pointer to this object.
   const MCRegisterDesc &get(unsigned RegNo) const {
     return operator[](RegNo);
   }
 
-  /// \brief Returns the physical register number of sub-register "Index"
+  /// Returns the physical register number of sub-register "Index"
   /// for physical register RegNo. Return zero if the sub-register does not
   /// exist.
   unsigned getSubReg(unsigned Reg, unsigned Idx) const;
 
-  /// \brief Return a super-register of the specified register
+  /// Return a super-register of the specified register
   /// Reg so its sub-register of index SubIdx is Reg.
   unsigned getMatchingSuperReg(unsigned Reg, unsigned SubIdx,
                                const MCRegisterClass *RC) const;
 
-  /// \brief For a given register pair, return the sub-register index
+  /// For a given register pair, return the sub-register index
   /// if the second register is a sub-register of the first. Return zero
   /// otherwise.
   unsigned getSubRegIndex(unsigned RegNo, unsigned SubRegNo) const;
 
-  /// \brief Get the size of the bit range covered by a sub-register index.
+  /// Get the size of the bit range covered by a sub-register index.
   /// If the index isn't continuous, return the sum of the sizes of its parts.
   /// If the index is used to access subregisters of different sizes, return -1.
   unsigned getSubRegIdxSize(unsigned Idx) const;
 
-  /// \brief Get the offset of the bit range covered by a sub-register index.
+  /// Get the offset of the bit range covered by a sub-register index.
   /// If an Offset doesn't make sense (the index isn't continuous, or is used to
   /// access sub-registers at different offsets), return -1.
   unsigned getSubRegIdxOffset(unsigned Idx) const;
 
-  /// \brief Return the human-readable symbolic target-specific name for the
+  /// Return the human-readable symbolic target-specific name for the
   /// specified physical register.
   const char *getName(unsigned RegNo) const {
     return RegStrings + get(RegNo).Name;
   }
 
-  /// \brief Return the number of registers this target has (useful for
+  /// Return the number of registers this target has (useful for
   /// sizing arrays holding per register information)
   unsigned getNumRegs() const {
     return NumRegs;
   }
 
-  /// \brief Return the number of sub-register indices
+  /// Return the number of sub-register indices
   /// understood by the target. Index 0 is reserved for the no-op sub-register,
   /// while 1 to getNumSubRegIndices() - 1 represent real sub-registers.
   unsigned getNumSubRegIndices() const {
     return NumSubRegIndices;
   }
 
-  /// \brief Return the number of (native) register units in the
+  /// Return the number of (native) register units in the
   /// target. Register units are numbered from 0 to getNumRegUnits() - 1. They
   /// can be accessed through MCRegUnitIterator defined below.
   unsigned getNumRegUnits() const {
     return NumRegUnits;
   }
 
-  /// \brief Map a target register to an equivalent dwarf register
+  /// Map a target register to an equivalent dwarf register
   /// number.  Returns -1 if there is no equivalent value.  The second
   /// parameter allows targets to use different numberings for EH info and
   /// debugging info.
   int getDwarfRegNum(unsigned RegNum, bool isEH) const;
 
-  /// \brief Map a dwarf register back to a target register.
+  /// Map a dwarf register back to a target register.
   int getLLVMRegNum(unsigned RegNum, bool isEH) const;
 
-  /// \brief Map a DWARF EH register back to a target register (same as
+  /// Map a DWARF EH register back to a target register (same as
   /// getLLVMRegNum(RegNum, true)) but return -1 if there is no mapping,
   /// rather than asserting that there must be one.
   int getLLVMRegNumFromEH(unsigned RegNum) const;
 
-  /// \brief Map a target EH register number to an equivalent DWARF register
+  /// Map a target EH register number to an equivalent DWARF register
   /// number.
   int getDwarfRegNumFromDwarfEHRegNum(unsigned RegNum) const;
 
-  /// \brief Map a target register to an equivalent SEH register
+  /// Map a target register to an equivalent SEH register
   /// number.  Returns LLVM register number if there is no equivalent value.
   int getSEHRegNum(unsigned RegNum) const;
 
-  /// \brief Map a target register to an equivalent CodeView register
+  /// Map a target register to an equivalent CodeView register
   /// number.
   int getCodeViewRegNum(unsigned RegNum) const;
 
@@ -434,7 +428,7 @@
     return (unsigned)(regclass_end()-regclass_begin());
   }
 
-  /// \brief Returns the register class associated with the enumeration
+  /// Returns the register class associated with the enumeration
   /// value.  See class MCOperandInfo.
   const MCRegisterClass& getRegClass(unsigned i) const {
     assert(i < getNumRegClasses() && "Register Class ID out of range");
@@ -445,33 +439,33 @@
     return RegClassStrings + Class->NameIdx;
   }
 
-   /// \brief Returns the encoding for RegNo
+   /// Returns the encoding for RegNo
   uint16_t getEncodingValue(unsigned RegNo) const {
     assert(RegNo < NumRegs &&
            "Attempting to get encoding for invalid register number!");
     return RegEncodingTable[RegNo];
   }
 
-  /// \brief Returns true if RegB is a sub-register of RegA.
+  /// Returns true if RegB is a sub-register of RegA.
   bool isSubRegister(unsigned RegA, unsigned RegB) const {
     return isSuperRegister(RegB, RegA);
   }
 
-  /// \brief Returns true if RegB is a super-register of RegA.
+  /// Returns true if RegB is a super-register of RegA.
   bool isSuperRegister(unsigned RegA, unsigned RegB) const;
 
-  /// \brief Returns true if RegB is a sub-register of RegA or if RegB == RegA.
+  /// Returns true if RegB is a sub-register of RegA or if RegB == RegA.
   bool isSubRegisterEq(unsigned RegA, unsigned RegB) const {
     return isSuperRegisterEq(RegB, RegA);
   }
 
-  /// \brief Returns true if RegB is a super-register of RegA or if
+  /// Returns true if RegB is a super-register of RegA or if
   /// RegB == RegA.
   bool isSuperRegisterEq(unsigned RegA, unsigned RegB) const {
     return RegA == RegB || isSuperRegister(RegA, RegB);
   }
 
-  /// \brief Returns true if RegB is a super-register or sub-register of RegA
+  /// Returns true if RegB is a super-register or sub-register of RegA
   /// or if RegB == RegA.
   bool isSuperOrSubRegisterEq(unsigned RegA, unsigned RegB) const {
     return isSubRegisterEq(RegA, RegB) || isSuperRegister(RegA, RegB);
@@ -651,17 +645,17 @@
     Reg1 = MCRI->RegUnitRoots[RegUnit][1];
   }
 
-  /// \brief Dereference to get the current root register.
+  /// Dereference to get the current root register.
   unsigned operator*() const {
     return Reg0;
   }
 
-  /// \brief Check if the iterator is at the end of the list.
+  /// Check if the iterator is at the end of the list.
   bool isValid() const {
     return Reg0;
   }
 
-  /// \brief Preincrement to move to the next root register.
+  /// Preincrement to move to the next root register.
   void operator++() {
     assert(isValid() && "Cannot move off the end of the list.");
     Reg0 = Reg1;
diff --git a/linux-x64/clang/include/llvm/MC/MCSchedule.h b/linux-x64/clang/include/llvm/MC/MCSchedule.h
index 62f8efd..f2f1dfb 100644
--- a/linux-x64/clang/include/llvm/MC/MCSchedule.h
+++ b/linux-x64/clang/include/llvm/MC/MCSchedule.h
@@ -16,6 +16,7 @@
 #define LLVM_MC_MCSCHEDULE_H
 
 #include "llvm/ADT/Optional.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/DataTypes.h"
 #include <cassert>
 
@@ -23,6 +24,9 @@
 
 struct InstrItinerary;
 class MCSubtargetInfo;
+class MCInstrInfo;
+class MCInst;
+class InstrItineraryData;
 
 /// Define a kind of processor resource that will be modeled by the scheduler.
 struct MCProcResourceDesc {
@@ -128,6 +132,64 @@
   }
 };
 
+/// Specify the cost of a register definition in terms of number of physical
+/// register allocated at register renaming stage. For example, AMD Jaguar.
+/// natively supports 128-bit data types, and operations on 256-bit registers
+/// (i.e. YMM registers) are internally split into two COPs (complex operations)
+/// and each COP updates a physical register. Basically, on Jaguar, a YMM
+/// register write effectively consumes two physical registers. That means,
+/// the cost of a YMM write in the BtVer2 model is 2.
+struct MCRegisterCostEntry {
+  unsigned RegisterClassID;
+  unsigned Cost;
+};
+
+/// A register file descriptor.
+///
+/// This struct allows to describe processor register files. In particular, it
+/// helps describing the size of the register file, as well as the cost of
+/// allocating a register file at register renaming stage.
+/// FIXME: this struct can be extended to provide information about the number
+/// of read/write ports to the register file.  A value of zero for field
+/// 'NumPhysRegs' means: this register file has an unbounded number of physical
+/// registers.
+struct MCRegisterFileDesc {
+  const char *Name;
+  uint16_t NumPhysRegs;
+  uint16_t NumRegisterCostEntries;
+  // Index of the first cost entry in MCExtraProcessorInfo::RegisterCostTable.
+  uint16_t RegisterCostEntryIdx;
+};
+
+/// Provide extra details about the machine processor.
+///
+/// This is a collection of "optional" processor information that is not
+/// normally used by the LLVM machine schedulers, but that can be consumed by
+/// external tools like llvm-mca to improve the quality of the peformance
+/// analysis.
+struct MCExtraProcessorInfo {
+  // Actual size of the reorder buffer in hardware.
+  unsigned ReorderBufferSize;
+  // Number of instructions retired per cycle.
+  unsigned MaxRetirePerCycle;
+  const MCRegisterFileDesc *RegisterFiles;
+  unsigned NumRegisterFiles;
+  const MCRegisterCostEntry *RegisterCostTable;
+  unsigned NumRegisterCostEntries;
+
+  struct PfmCountersInfo {
+    // An optional name of a performance counter that can be used to measure
+    // cycles.
+    const char *CycleCounter;
+
+    // For each MCProcResourceDesc defined by the processor, an optional list of
+    // names of performance counters that can be used to measure the resource
+    // utilization.
+    const char **IssueCounters;
+  };
+  PfmCountersInfo PfmCounters;
+};
+
 /// Machine model for scheduling, bundling, and heuristics.
 ///
 /// The machine model directly provides basic information about the
@@ -138,9 +200,62 @@
 /// provides a detailed reservation table describing each cycle of instruction
 /// execution. Subtargets may define any or all of the above categories of data
 /// depending on the type of CPU and selected scheduler.
+///
+/// The machine independent properties defined here are used by the scheduler as
+/// an abstract machine model. A real micro-architecture has a number of
+/// buffers, queues, and stages. Declaring that a given machine-independent
+/// abstract property corresponds to a specific physical property across all
+/// subtargets can't be done. Nonetheless, the abstract model is
+/// useful. Futhermore, subtargets typically extend this model with processor
+/// specific resources to model any hardware features that can be exploited by
+/// sceduling heuristics and aren't sufficiently represented in the abstract.
+///
+/// The abstract pipeline is built around the notion of an "issue point". This
+/// is merely a reference point for counting machine cycles. The physical
+/// machine will have pipeline stages that delay execution. The scheduler does
+/// not model those delays because they are irrelevant as long as they are
+/// consistent. Inaccuracies arise when instructions have different execution
+/// delays relative to each other, in addition to their intrinsic latency. Those
+/// special cases can be handled by TableGen constructs such as, ReadAdvance,
+/// which reduces latency when reading data, and ResourceCycles, which consumes
+/// a processor resource when writing data for a number of abstract
+/// cycles.
+///
+/// TODO: One tool currently missing is the ability to add a delay to
+/// ResourceCycles. That would be easy to add and would likely cover all cases
+/// currently handled by the legacy itinerary tables.
+///
+/// A note on out-of-order execution and, more generally, instruction
+/// buffers. Part of the CPU pipeline is always in-order. The issue point, which
+/// is the point of reference for counting cycles, only makes sense as an
+/// in-order part of the pipeline. Other parts of the pipeline are sometimes
+/// falling behind and sometimes catching up. It's only interesting to model
+/// those other, decoupled parts of the pipeline if they may be predictably
+/// resource constrained in a way that the scheduler can exploit.
+///
+/// The LLVM machine model distinguishes between in-order constraints and
+/// out-of-order constraints so that the target's scheduling strategy can apply
+/// appropriate heuristics. For a well-balanced CPU pipeline, out-of-order
+/// resources would not typically be treated as a hard scheduling
+/// constraint. For example, in the GenericScheduler, a delay caused by limited
+/// out-of-order resources is not directly reflected in the number of cycles
+/// that the scheduler sees between issuing an instruction and its dependent
+/// instructions. In other words, out-of-order resources don't directly increase
+/// the latency between pairs of instructions. However, they can still be used
+/// to detect potential bottlenecks across a sequence of instructions and bias
+/// the scheduling heuristics appropriately.
 struct MCSchedModel {
   // IssueWidth is the maximum number of instructions that may be scheduled in
-  // the same per-cycle group.
+  // the same per-cycle group. This is meant to be a hard in-order constraint
+  // (a.k.a. "hazard"). In the GenericScheduler strategy, no more than
+  // IssueWidth micro-ops can ever be scheduled in a particular cycle.
+  //
+  // In practice, IssueWidth is useful to model any bottleneck between the
+  // decoder (after micro-op expansion) and the out-of-order reservation
+  // stations or the decoder bandwidth itself. If the total number of
+  // reservation stations is also a bottleneck, or if any other pipeline stage
+  // has a bandwidth limitation, then that can be naturally modeled by adding an
+  // out-of-order processor resource.
   unsigned IssueWidth;
   static const unsigned DefaultIssueWidth = 1;
 
@@ -198,11 +313,21 @@
   friend class InstrItineraryData;
   const InstrItinerary *InstrItineraries;
 
+  const MCExtraProcessorInfo *ExtraProcessorInfo;
+
+  bool hasExtraProcessorInfo() const { return ExtraProcessorInfo; }
+
   unsigned getProcessorID() const { return ProcID; }
 
   /// Does this machine model include instruction-level scheduling.
   bool hasInstrSchedModel() const { return SchedClassTable; }
 
+  const MCExtraProcessorInfo &getExtraProcessorInfo() const {
+    assert(hasExtraProcessorInfo() &&
+           "No extra information available for this model");
+    return *ExtraProcessorInfo;
+  }
+
   /// Return true if this machine model data for all instructions with a
   /// scheduling class (itinerary class or SchedRW list).
   bool isComplete() const { return CompleteModel; }
@@ -232,16 +357,27 @@
   static int computeInstrLatency(const MCSubtargetInfo &STI,
                                  const MCSchedClassDesc &SCDesc);
 
-  /// Returns the reciprocal throughput information from a MCSchedClassDesc.
-  static Optional<double>
+  int computeInstrLatency(const MCSubtargetInfo &STI, unsigned SClass) const;
+  int computeInstrLatency(const MCSubtargetInfo &STI, const MCInstrInfo &MCII,
+                          const MCInst &Inst) const;
+
+  // Returns the reciprocal throughput information from a MCSchedClassDesc.
+  static double
   getReciprocalThroughput(const MCSubtargetInfo &STI,
                           const MCSchedClassDesc &SCDesc);
 
+  static double
+  getReciprocalThroughput(unsigned SchedClass, const InstrItineraryData &IID);
+
+  double
+  getReciprocalThroughput(const MCSubtargetInfo &STI, const MCInstrInfo &MCII,
+                          const MCInst &Inst) const;
+
   /// Returns the default initialized model.
   static const MCSchedModel &GetDefaultSchedModel() { return Default; }
   static const MCSchedModel Default;
 };
 
-} // End llvm namespace
+} // namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/MC/MCSection.h b/linux-x64/clang/include/llvm/MC/MCSection.h
index 2771b1e..eb210b4 100644
--- a/linux-x64/clang/include/llvm/MC/MCSection.h
+++ b/linux-x64/clang/include/llvm/MC/MCSection.h
@@ -40,7 +40,7 @@
 public:
   enum SectionVariant { SV_COFF = 0, SV_ELF, SV_MachO, SV_Wasm };
 
-  /// \brief Express the state of bundle locked groups while emitting code.
+  /// Express the state of bundle locked groups while emitting code.
   enum BundleLockStateType {
     NotBundleLocked,
     BundleLocked,
@@ -65,19 +65,23 @@
   /// The index of this section in the layout order.
   unsigned LayoutOrder;
 
-  /// \brief Keeping track of bundle-locked state.
+  /// Keeping track of bundle-locked state.
   BundleLockStateType BundleLockState = NotBundleLocked;
 
-  /// \brief Current nesting depth of bundle_lock directives.
+  /// Current nesting depth of bundle_lock directives.
   unsigned BundleLockNestingDepth = 0;
 
-  /// \brief We've seen a bundle_lock directive but not its first instruction
+  /// We've seen a bundle_lock directive but not its first instruction
   /// yet.
   bool BundleGroupBeforeFirstInst : 1;
 
   /// Whether this section has had instructions emitted into it.
   bool HasInstructions : 1;
 
+  /// Whether this section has had data emitted into it.
+  /// Right now this is only used by the ARM backend.
+  bool HasData : 1;
+
   bool IsRegistered : 1;
 
   MCDummyFragment DummyFragment;
@@ -137,6 +141,9 @@
   bool hasInstructions() const { return HasInstructions; }
   void setHasInstructions(bool Value) { HasInstructions = Value; }
 
+  bool hasData() const { return HasData; }
+  void setHasData(bool Value) { HasData = Value; }
+
   bool isRegistered() const { return IsRegistered; }
   void setIsRegistered(bool Value) { IsRegistered = Value; }
 
diff --git a/linux-x64/clang/include/llvm/MC/MCStreamer.h b/linux-x64/clang/include/llvm/MC/MCStreamer.h
index 582a836..e4d0dc0 100644
--- a/linux-x64/clang/include/llvm/MC/MCStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCStreamer.h
@@ -170,7 +170,7 @@
   std::unique_ptr<AssemblerConstantPools> ConstantPools;
 };
 
-/// \brief Streaming machine code generation interface.
+/// Streaming machine code generation interface.
 ///
 /// This interface is intended to provide a programatic interface that is very
 /// similar to the level that an assembler .s file provides.  It has callbacks
@@ -197,11 +197,11 @@
   /// closed. Otherwise, issue an error and return null.
   WinEH::FrameInfo *EnsureValidWinFrameInfo(SMLoc Loc);
 
-  /// \brief Tracks an index to represent the order a symbol was emitted in.
+  /// Tracks an index to represent the order a symbol was emitted in.
   /// Zero means we did not emit that symbol.
   DenseMap<const MCSymbol *, unsigned> SymbolOrdering;
 
-  /// \brief This is stack of current and previous section values saved by
+  /// This is stack of current and previous section values saved by
   /// PushSection.
   SmallVector<std::pair<MCSectionSubPair, MCSectionSubPair>, 4> SectionStack;
 
@@ -211,6 +211,8 @@
   /// requires.
   unsigned NextWinCFIID = 0;
 
+  bool UseAssemblerInfoForParsing;
+
 protected:
   MCStreamer(MCContext &Ctx);
 
@@ -247,6 +249,11 @@
 
   MCContext &getContext() const { return Context; }
 
+  virtual MCAssembler *getAssemblerPtr() { return nullptr; }
+
+  void setUseAssemblerInfoForParsing(bool v) { UseAssemblerInfoForParsing = v; }
+  bool getUseAssemblerInfoForParsing() { return UseAssemblerInfoForParsing; }
+
   MCTargetStreamer *getTargetStreamer() {
     return TargetStreamer.get();
   }
@@ -268,19 +275,19 @@
   /// \name Assembly File Formatting.
   /// @{
 
-  /// \brief Return true if this streamer supports verbose assembly and if it is
+  /// Return true if this streamer supports verbose assembly and if it is
   /// enabled.
   virtual bool isVerboseAsm() const { return false; }
 
-  /// \brief Return true if this asm streamer supports emitting unformatted text
+  /// Return true if this asm streamer supports emitting unformatted text
   /// to the .s file with EmitRawText.
   virtual bool hasRawTextSupport() const { return false; }
 
-  /// \brief Is the integrated assembler required for this streamer to function
+  /// Is the integrated assembler required for this streamer to function
   /// correctly?
   virtual bool isIntegratedAssemblerRequired() const { return false; }
 
-  /// \brief Add a textual comment.
+  /// Add a textual comment.
   ///
   /// Typically for comments that can be emitted to the generated .s
   /// file if applicable as a QoI issue to make the output of the compiler
@@ -290,27 +297,27 @@
   /// If the comment includes embedded \n's, they will each get the comment
   /// prefix as appropriate.  The added comment should not end with a \n.
   /// By default, each comment is terminated with an end of line, i.e. the
-  /// EOL param is set to true by default. If one prefers not to end the 
-  /// comment with a new line then the EOL param should be passed 
+  /// EOL param is set to true by default. If one prefers not to end the
+  /// comment with a new line then the EOL param should be passed
   /// with a false value.
   virtual void AddComment(const Twine &T, bool EOL = true) {}
 
-  /// \brief Return a raw_ostream that comments can be written to. Unlike
+  /// Return a raw_ostream that comments can be written to. Unlike
   /// AddComment, you are required to terminate comments with \n if you use this
   /// method.
   virtual raw_ostream &GetCommentOS();
 
-  /// \brief Print T and prefix it with the comment string (normally #) and
+  /// Print T and prefix it with the comment string (normally #) and
   /// optionally a tab. This prints the comment immediately, not at the end of
   /// the current line. It is basically a safe version of EmitRawText: since it
   /// only prints comments, the object streamer ignores it instead of asserting.
   virtual void emitRawComment(const Twine &T, bool TabPrefix = true);
 
-  /// \brief Add explicit comment T. T is required to be a valid
+  /// Add explicit comment T. T is required to be a valid
   /// comment in the output and does not need to be escaped.
   virtual void addExplicitComment(const Twine &T);
 
-  /// \brief Emit added explicit comments.
+  /// Emit added explicit comments.
   virtual void emitExplicitComments();
 
   /// AddBlankLine - Emit a blank line to a .s file to pretty it up.
@@ -321,7 +328,7 @@
   /// \name Symbol & Section Management
   /// @{
 
-  /// \brief Return the current section that the streamer is emitting code to.
+  /// Return the current section that the streamer is emitting code to.
   MCSectionSubPair getCurrentSection() const {
     if (!SectionStack.empty())
       return SectionStack.back().first;
@@ -329,32 +336,32 @@
   }
   MCSection *getCurrentSectionOnly() const { return getCurrentSection().first; }
 
-  /// \brief Return the previous section that the streamer is emitting code to.
+  /// Return the previous section that the streamer is emitting code to.
   MCSectionSubPair getPreviousSection() const {
     if (!SectionStack.empty())
       return SectionStack.back().second;
     return MCSectionSubPair();
   }
 
-  /// \brief Returns an index to represent the order a symbol was emitted in.
+  /// Returns an index to represent the order a symbol was emitted in.
   /// (zero if we did not emit that symbol)
   unsigned GetSymbolOrder(const MCSymbol *Sym) const {
     return SymbolOrdering.lookup(Sym);
   }
 
-  /// \brief Update streamer for a new active section.
+  /// Update streamer for a new active section.
   ///
   /// This is called by PopSection and SwitchSection, if the current
   /// section changes.
   virtual void ChangeSection(MCSection *, const MCExpr *);
 
-  /// \brief Save the current and previous section on the section stack.
+  /// Save the current and previous section on the section stack.
   void PushSection() {
     SectionStack.push_back(
         std::make_pair(getCurrentSection(), getPreviousSection()));
   }
 
-  /// \brief Restore the current and previous section from the section stack.
+  /// Restore the current and previous section from the section stack.
   /// Calls ChangeSection as needed.
   ///
   /// Returns false if the stack was empty.
@@ -388,7 +395,7 @@
   virtual void SwitchSection(MCSection *Section,
                              const MCExpr *Subsection = nullptr);
 
-  /// \brief Set the current section where code is being emitted to \p Section.
+  /// Set the current section where code is being emitted to \p Section.
   /// This is required to update CurSection. This version does not call
   /// ChangeSection.
   void SwitchSectionNoChange(MCSection *Section,
@@ -400,18 +407,18 @@
       SectionStack.back().first = MCSectionSubPair(Section, Subsection);
   }
 
-  /// \brief Create the default sections and set the initial one.
+  /// Create the default sections and set the initial one.
   virtual void InitSections(bool NoExecStack);
 
   MCSymbol *endSection(MCSection *Section);
 
-  /// \brief Sets the symbol's section.
+  /// Sets the symbol's section.
   ///
   /// Each emitted symbol will be tracked in the ordering table,
   /// so we can sort on them later.
   void AssignFragment(MCSymbol *Symbol, MCFragment *Fragment);
 
-  /// \brief Emit a label for \p Symbol into the current section.
+  /// Emit a label for \p Symbol into the current section.
   ///
   /// This corresponds to an assembler statement such as:
   ///   foo:
@@ -425,17 +432,17 @@
 
   virtual void EmitEHSymAttributes(const MCSymbol *Symbol, MCSymbol *EHSymbol);
 
-  /// \brief Note in the output the specified \p Flag.
+  /// Note in the output the specified \p Flag.
   virtual void EmitAssemblerFlag(MCAssemblerFlag Flag);
 
-  /// \brief Emit the given list \p Options of strings as linker
+  /// Emit the given list \p Options of strings as linker
   /// options into the output.
   virtual void EmitLinkerOptions(ArrayRef<std::string> Kind) {}
 
-  /// \brief Note in the output the specified region \p Kind.
+  /// Note in the output the specified region \p Kind.
   virtual void EmitDataRegion(MCDataRegionType Kind) {}
 
-  /// \brief Specify the Mach-O minimum deployment target version.
+  /// Specify the Mach-O minimum deployment target version.
   virtual void EmitVersionMin(MCVersionMinType Type, unsigned Major,
                               unsigned Minor, unsigned Update) {}
 
@@ -446,11 +453,11 @@
 
   void EmitVersionForTarget(const Triple &Target);
 
-  /// \brief Note in the output that the specified \p Func is a Thumb mode
+  /// Note in the output that the specified \p Func is a Thumb mode
   /// function (ARM target only).
   virtual void EmitThumbFunc(MCSymbol *Func);
 
-  /// \brief Emit an assignment of \p Value to \p Symbol.
+  /// Emit an assignment of \p Value to \p Symbol.
   ///
   /// This corresponds to an assembler statement such as:
   ///  symbol = value
@@ -463,7 +470,7 @@
   /// \param Value - The value for the symbol.
   virtual void EmitAssignment(MCSymbol *Symbol, const MCExpr *Value);
 
-  /// \brief Emit an weak reference from \p Alias to \p Symbol.
+  /// Emit an weak reference from \p Alias to \p Symbol.
   ///
   /// This corresponds to an assembler statement such as:
   ///  .weakref alias, symbol
@@ -472,56 +479,61 @@
   /// \param Symbol - The symbol being aliased.
   virtual void EmitWeakReference(MCSymbol *Alias, const MCSymbol *Symbol);
 
-  /// \brief Add the given \p Attribute to \p Symbol.
+  /// Add the given \p Attribute to \p Symbol.
   virtual bool EmitSymbolAttribute(MCSymbol *Symbol,
                                    MCSymbolAttr Attribute) = 0;
 
-  /// \brief Set the \p DescValue for the \p Symbol.
+  /// Set the \p DescValue for the \p Symbol.
   ///
   /// \param Symbol - The symbol to have its n_desc field set.
   /// \param DescValue - The value to set into the n_desc field.
   virtual void EmitSymbolDesc(MCSymbol *Symbol, unsigned DescValue);
 
-  /// \brief Start emitting COFF symbol definition
+  /// Start emitting COFF symbol definition
   ///
   /// \param Symbol - The symbol to have its External & Type fields set.
   virtual void BeginCOFFSymbolDef(const MCSymbol *Symbol);
 
-  /// \brief Emit the storage class of the symbol.
+  /// Emit the storage class of the symbol.
   ///
   /// \param StorageClass - The storage class the symbol should have.
   virtual void EmitCOFFSymbolStorageClass(int StorageClass);
 
-  /// \brief Emit the type of the symbol.
+  /// Emit the type of the symbol.
   ///
   /// \param Type - A COFF type identifier (see COFF::SymbolType in X86COFF.h)
   virtual void EmitCOFFSymbolType(int Type);
 
-  /// \brief Marks the end of the symbol definition.
+  /// Marks the end of the symbol definition.
   virtual void EndCOFFSymbolDef();
 
   virtual void EmitCOFFSafeSEH(MCSymbol const *Symbol);
 
-  /// \brief Emits the symbol table index of a Symbol into the current section.
+  /// Emits the symbol table index of a Symbol into the current section.
   virtual void EmitCOFFSymbolIndex(MCSymbol const *Symbol);
 
-  /// \brief Emits a COFF section index.
+  /// Emits a COFF section index.
   ///
   /// \param Symbol - Symbol the section number relocation should point to.
   virtual void EmitCOFFSectionIndex(MCSymbol const *Symbol);
 
-  /// \brief Emits a COFF section relative relocation.
+  /// Emits a COFF section relative relocation.
   ///
   /// \param Symbol - Symbol the section relative relocation should point to.
   virtual void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset);
 
-  /// \brief Emit an ELF .size directive.
+  /// Emits a COFF image relative relocation.
+  ///
+  /// \param Symbol - Symbol the image relative relocation should point to.
+  virtual void EmitCOFFImgRel32(MCSymbol const *Symbol, int64_t Offset);
+
+  /// Emit an ELF .size directive.
   ///
   /// This corresponds to an assembler statement such as:
   ///  .size symbol, expression
   virtual void emitELFSize(MCSymbol *Symbol, const MCExpr *Value);
 
-  /// \brief Emit an ELF .symver directive.
+  /// Emit an ELF .symver directive.
   ///
   /// This corresponds to an assembler statement such as:
   ///  .symver _start, foo@@SOME_VERSION
@@ -530,11 +542,11 @@
   virtual void emitELFSymverDirective(StringRef AliasName,
                                       const MCSymbol *Aliasee);
 
-  /// \brief Emit a Linker Optimization Hint (LOH) directive.
+  /// Emit a Linker Optimization Hint (LOH) directive.
   /// \param Args - Arguments of the LOH.
   virtual void EmitLOHDirective(MCLOHType Kind, const MCLOHArgs &Args) {}
 
-  /// \brief Emit a common symbol.
+  /// Emit a common symbol.
   ///
   /// \param Symbol - The common symbol to emit.
   /// \param Size - The size of the common symbol.
@@ -543,7 +555,7 @@
   virtual void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                                 unsigned ByteAlignment) = 0;
 
-  /// \brief Emit a local common (.lcomm) symbol.
+  /// Emit a local common (.lcomm) symbol.
   ///
   /// \param Symbol - The common symbol to emit.
   /// \param Size - The size of the common symbol.
@@ -551,7 +563,7 @@
   virtual void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                                      unsigned ByteAlignment);
 
-  /// \brief Emit the zerofill section and an optional symbol.
+  /// Emit the zerofill section and an optional symbol.
   ///
   /// \param Section - The zerofill section to create and or to put the symbol
   /// \param Symbol - The zerofill symbol to emit, if non-NULL.
@@ -559,9 +571,10 @@
   /// \param ByteAlignment - The alignment of the zerofill symbol if
   /// non-zero. This must be a power of 2 on some targets.
   virtual void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
-                            uint64_t Size = 0, unsigned ByteAlignment = 0) = 0;
+                            uint64_t Size = 0, unsigned ByteAlignment = 0,
+                            SMLoc Loc = SMLoc()) = 0;
 
-  /// \brief Emit a thread local bss (.tbss) symbol.
+  /// Emit a thread local bss (.tbss) symbol.
   ///
   /// \param Section - The thread local common section.
   /// \param Symbol - The thread local common symbol to emit.
@@ -575,7 +588,7 @@
   /// \name Generating Data
   /// @{
 
-  /// \brief Emit the bytes in \p Data into the output.
+  /// Emit the bytes in \p Data into the output.
   ///
   /// This is used to implement assembler directives such as .byte, .ascii,
   /// etc.
@@ -585,7 +598,7 @@
   /// method uses .byte directives instead of .ascii or .asciz for readability.
   virtual void EmitBinaryData(StringRef Data);
 
-  /// \brief Emit the expression \p Value into the output as a native
+  /// Emit the expression \p Value into the output as a native
   /// integer of the given \p Size bytes.
   ///
   /// This is used to implement assembler directives such as .word, .quad,
@@ -600,7 +613,7 @@
 
   void EmitValue(const MCExpr *Value, unsigned Size, SMLoc Loc = SMLoc());
 
-  /// \brief Special case of EmitValue that avoids the client having
+  /// Special case of EmitValue that avoids the client having
   /// to pass in a MCExpr for constant integers.
   virtual void EmitIntValue(uint64_t Value, unsigned Size);
 
@@ -608,66 +621,66 @@
 
   virtual void EmitSLEB128Value(const MCExpr *Value);
 
-  /// \brief Special case of EmitULEB128Value that avoids the client having to
+  /// Special case of EmitULEB128Value that avoids the client having to
   /// pass in a MCExpr for constant integers.
   void EmitULEB128IntValue(uint64_t Value);
 
-  /// \brief Special case of EmitSLEB128Value that avoids the client having to
+  /// Special case of EmitSLEB128Value that avoids the client having to
   /// pass in a MCExpr for constant integers.
   void EmitSLEB128IntValue(int64_t Value);
 
-  /// \brief Special case of EmitValue that avoids the client having to pass in
+  /// Special case of EmitValue that avoids the client having to pass in
   /// a MCExpr for MCSymbols.
   void EmitSymbolValue(const MCSymbol *Sym, unsigned Size,
                        bool IsSectionRelative = false);
 
-  /// \brief Emit the expression \p Value into the output as a dtprel
+  /// Emit the expression \p Value into the output as a dtprel
   /// (64-bit DTP relative) value.
   ///
   /// This is used to implement assembler directives such as .dtpreldword on
   /// targets that support them.
   virtual void EmitDTPRel64Value(const MCExpr *Value);
 
-  /// \brief Emit the expression \p Value into the output as a dtprel
+  /// Emit the expression \p Value into the output as a dtprel
   /// (32-bit DTP relative) value.
   ///
   /// This is used to implement assembler directives such as .dtprelword on
   /// targets that support them.
   virtual void EmitDTPRel32Value(const MCExpr *Value);
 
-  /// \brief Emit the expression \p Value into the output as a tprel
+  /// Emit the expression \p Value into the output as a tprel
   /// (64-bit TP relative) value.
   ///
   /// This is used to implement assembler directives such as .tpreldword on
   /// targets that support them.
   virtual void EmitTPRel64Value(const MCExpr *Value);
 
-  /// \brief Emit the expression \p Value into the output as a tprel
+  /// Emit the expression \p Value into the output as a tprel
   /// (32-bit TP relative) value.
   ///
   /// This is used to implement assembler directives such as .tprelword on
   /// targets that support them.
   virtual void EmitTPRel32Value(const MCExpr *Value);
 
-  /// \brief Emit the expression \p Value into the output as a gprel64 (64-bit
+  /// Emit the expression \p Value into the output as a gprel64 (64-bit
   /// GP relative) value.
   ///
   /// This is used to implement assembler directives such as .gpdword on
   /// targets that support them.
   virtual void EmitGPRel64Value(const MCExpr *Value);
 
-  /// \brief Emit the expression \p Value into the output as a gprel32 (32-bit
+  /// Emit the expression \p Value into the output as a gprel32 (32-bit
   /// GP relative) value.
   ///
   /// This is used to implement assembler directives such as .gprel32 on
   /// targets that support them.
   virtual void EmitGPRel32Value(const MCExpr *Value);
 
-  /// \brief Emit NumBytes bytes worth of the value specified by FillValue.
+  /// Emit NumBytes bytes worth of the value specified by FillValue.
   /// This implements directives such as '.space'.
   void emitFill(uint64_t NumBytes, uint8_t FillValue);
 
-  /// \brief Emit \p Size bytes worth of the value specified by \p FillValue.
+  /// Emit \p Size bytes worth of the value specified by \p FillValue.
   ///
   /// This is used to implement assembler directives such as .space or .skip.
   ///
@@ -677,7 +690,7 @@
   virtual void emitFill(const MCExpr &NumBytes, uint64_t FillValue,
                         SMLoc Loc = SMLoc());
 
-  /// \brief Emit \p NumValues copies of \p Size bytes. Each \p Size bytes is
+  /// Emit \p NumValues copies of \p Size bytes. Each \p Size bytes is
   /// taken from the lowest order 4 bytes of \p Expr expression.
   ///
   /// This is used to implement assembler directives such as .fill.
@@ -688,11 +701,11 @@
   virtual void emitFill(const MCExpr &NumValues, int64_t Size, int64_t Expr,
                         SMLoc Loc = SMLoc());
 
-  /// \brief Emit NumBytes worth of zeros.
+  /// Emit NumBytes worth of zeros.
   /// This function properly handles data in virtual sections.
   void EmitZeros(uint64_t NumBytes);
 
-  /// \brief Emit some number of copies of \p Value until the byte alignment \p
+  /// Emit some number of copies of \p Value until the byte alignment \p
   /// ByteAlignment is reached.
   ///
   /// If the number of bytes need to emit for the alignment is not a multiple
@@ -713,7 +726,7 @@
                                     unsigned ValueSize = 1,
                                     unsigned MaxBytesToEmit = 0);
 
-  /// \brief Emit nops until the byte alignment \p ByteAlignment is reached.
+  /// Emit nops until the byte alignment \p ByteAlignment is reached.
   ///
   /// This used to align code where the alignment bytes may be executed.  This
   /// can emit different bytes for different sizes to optimize execution.
@@ -726,7 +739,7 @@
   virtual void EmitCodeAlignment(unsigned ByteAlignment,
                                  unsigned MaxBytesToEmit = 0);
 
-  /// \brief Emit some number of copies of \p Value until the byte offset \p
+  /// Emit some number of copies of \p Value until the byte offset \p
   /// Offset is reached.
   ///
   /// This is used to implement assembler directives such as .org.
@@ -745,15 +758,15 @@
 
   /// @}
 
-  /// \brief Switch to a new logical file.  This is used to implement the '.file
+  /// Switch to a new logical file.  This is used to implement the '.file
   /// "foo.c"' assembler directive.
   virtual void EmitFileDirective(StringRef Filename);
 
-  /// \brief Emit the "identifiers" directive.  This implements the
+  /// Emit the "identifiers" directive.  This implements the
   /// '.ident "version foo"' assembler directive.
   virtual void EmitIdent(StringRef IdentString) {}
 
-  /// \brief Associate a filename with a specified logical file number.  This
+  /// Associate a filename with a specified logical file number.  This
   /// implements the DWARF2 '.file 4 "foo.c"' assembler directive.
   unsigned EmitDwarfFileDirective(unsigned FileNo, StringRef Directory,
                                   StringRef Filename,
@@ -781,7 +794,7 @@
                                        Optional<StringRef> Source,
                                        unsigned CUID = 0);
 
-  /// \brief This implements the DWARF2 '.loc fileno lineno ...' assembler
+  /// This implements the DWARF2 '.loc fileno lineno ...' assembler
   /// directive.
   virtual void EmitDwarfLocDirective(unsigned FileNo, unsigned Line,
                                      unsigned Column, unsigned Flags,
@@ -795,27 +808,27 @@
                                    ArrayRef<uint8_t> Checksum,
                                    unsigned ChecksumKind);
 
-  /// \brief Introduces a function id for use with .cv_loc.
+  /// Introduces a function id for use with .cv_loc.
   virtual bool EmitCVFuncIdDirective(unsigned FunctionId);
 
-  /// \brief Introduces an inline call site id for use with .cv_loc. Includes
+  /// Introduces an inline call site id for use with .cv_loc. Includes
   /// extra information for inline line table generation.
   virtual bool EmitCVInlineSiteIdDirective(unsigned FunctionId, unsigned IAFunc,
                                            unsigned IAFile, unsigned IALine,
                                            unsigned IACol, SMLoc Loc);
 
-  /// \brief This implements the CodeView '.cv_loc' assembler directive.
+  /// This implements the CodeView '.cv_loc' assembler directive.
   virtual void EmitCVLocDirective(unsigned FunctionId, unsigned FileNo,
                                   unsigned Line, unsigned Column,
                                   bool PrologueEnd, bool IsStmt,
                                   StringRef FileName, SMLoc Loc);
 
-  /// \brief This implements the CodeView '.cv_linetable' assembler directive.
+  /// This implements the CodeView '.cv_linetable' assembler directive.
   virtual void EmitCVLinetableDirective(unsigned FunctionId,
                                         const MCSymbol *FnStart,
                                         const MCSymbol *FnEnd);
 
-  /// \brief This implements the CodeView '.cv_inline_linetable' assembler
+  /// This implements the CodeView '.cv_inline_linetable' assembler
   /// directive.
   virtual void EmitCVInlineLinetableDirective(unsigned PrimaryFunctionId,
                                               unsigned SourceFileId,
@@ -823,16 +836,16 @@
                                               const MCSymbol *FnStartSym,
                                               const MCSymbol *FnEndSym);
 
-  /// \brief This implements the CodeView '.cv_def_range' assembler
+  /// This implements the CodeView '.cv_def_range' assembler
   /// directive.
   virtual void EmitCVDefRangeDirective(
       ArrayRef<std::pair<const MCSymbol *, const MCSymbol *>> Ranges,
       StringRef FixedSizePortion);
 
-  /// \brief This implements the CodeView '.cv_stringtable' assembler directive.
+  /// This implements the CodeView '.cv_stringtable' assembler directive.
   virtual void EmitCVStringTableDirective() {}
 
-  /// \brief This implements the CodeView '.cv_filechecksums' assembler directive.
+  /// This implements the CodeView '.cv_filechecksums' assembler directive.
   virtual void EmitCVFileChecksumsDirective() {}
 
   /// This implements the CodeView '.cv_filechecksumoffset' assembler
@@ -894,6 +907,9 @@
                                 SMLoc Loc = SMLoc());
   virtual void EmitWinEHHandlerData(SMLoc Loc = SMLoc());
 
+  virtual void emitCGProfileEntry(const MCSymbolRefExpr *From,
+                                  const MCSymbolRefExpr *To, uint64_t Count);
+
   /// Get the .pdata section used for the given section. Typically the given
   /// section is either the main .text section or some other COMDAT .text
   /// section, but it may be any section containing code.
@@ -904,41 +920,45 @@
 
   virtual void EmitSyntaxDirective();
 
-  /// \brief Emit a .reloc directive.
+  /// Emit a .reloc directive.
   /// Returns true if the relocation could not be emitted because Name is not
   /// known.
   virtual bool EmitRelocDirective(const MCExpr &Offset, StringRef Name,
-                                  const MCExpr *Expr, SMLoc Loc) {
+                                  const MCExpr *Expr, SMLoc Loc,
+                                  const MCSubtargetInfo &STI) {
     return true;
   }
 
-  /// \brief Emit the given \p Instruction into the current section.
+  virtual void EmitAddrsig() {}
+  virtual void EmitAddrsigSym(const MCSymbol *Sym) {}
+
+  /// Emit the given \p Instruction into the current section.
   /// PrintSchedInfo == true then schedul comment should be added to output
   virtual void EmitInstruction(const MCInst &Inst, const MCSubtargetInfo &STI,
                                bool PrintSchedInfo = false);
 
-  /// \brief Set the bundle alignment mode from now on in the section.
+  /// Set the bundle alignment mode from now on in the section.
   /// The argument is the power of 2 to which the alignment is set. The
   /// value 0 means turn the bundle alignment off.
   virtual void EmitBundleAlignMode(unsigned AlignPow2);
 
-  /// \brief The following instructions are a bundle-locked group.
+  /// The following instructions are a bundle-locked group.
   ///
   /// \param AlignToEnd - If true, the bundle-locked group will be aligned to
   ///                     the end of a bundle.
   virtual void EmitBundleLock(bool AlignToEnd);
 
-  /// \brief Ends a bundle-locked group.
+  /// Ends a bundle-locked group.
   virtual void EmitBundleUnlock();
 
-  /// \brief If this file is backed by a assembly streamer, this dumps the
+  /// If this file is backed by a assembly streamer, this dumps the
   /// specified string in the output .s file.  This capability is indicated by
   /// the hasRawTextSupport() predicate.  By default this aborts.
   void EmitRawText(const Twine &String);
 
-  /// \brief Streamer specific finalization.
+  /// Streamer specific finalization.
   virtual void FinishImpl();
-  /// \brief Finish emission of machine code.
+  /// Finish emission of machine code.
   void Finish();
 
   virtual bool mayHaveInstructions(MCSection &Sec) const { return true; }
diff --git a/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h b/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
index 0a2b247..b3ce523 100644
--- a/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
+++ b/linux-x64/clang/include/llvm/MC/MCSubtargetInfo.h
@@ -27,7 +27,6 @@
 
 namespace llvm {
 
-class MachineInstr;
 class MCInst;
 
 //===----------------------------------------------------------------------===//
@@ -160,6 +159,13 @@
   /// Initialize an InstrItineraryData instance.
   void initInstrItins(InstrItineraryData &InstrItins) const;
 
+  /// Resolve a variant scheduling class for the given MCInst and CPU.
+  virtual unsigned
+  resolveVariantSchedClass(unsigned SchedClass, const MCInst *MI,
+                           unsigned CPUID) const {
+    return 0;
+  }
+
   /// Check whether the CPU string is valid.
   bool isCPUStringValid(StringRef CPU) const {
     auto Found = std::lower_bound(ProcDesc.begin(), ProcDesc.end(), CPU);
@@ -167,10 +173,6 @@
   }
 
   /// Returns string representation of scheduler comment
-  virtual std::string getSchedInfoStr(const MachineInstr &MI) const {
-    return {};
-  }
-
   virtual std::string getSchedInfoStr(MCInst const &MCI) const {
     return {};
   }
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbol.h b/linux-x64/clang/include/llvm/MC/MCSymbol.h
index cc8fc02..4681a1b 100644
--- a/linux-x64/clang/include/llvm/MC/MCSymbol.h
+++ b/linux-x64/clang/include/llvm/MC/MCSymbol.h
@@ -85,7 +85,7 @@
   /// "Lfoo" or ".foo".
   unsigned IsTemporary : 1;
 
-  /// \brief True if this symbol can be redefined.
+  /// True if this symbol can be redefined.
   unsigned IsRedefinable : 1;
 
   /// IsUsed - True if this symbol has been used.
@@ -141,7 +141,7 @@
   friend class MCExpr;
   friend class MCContext;
 
-  /// \brief The name for a symbol.
+  /// The name for a symbol.
   /// MCSymbol contains a uint64_t so is probably aligned to 8.  On a 32-bit
   /// system, the name is a pointer so isn't going to satisfy the 8 byte
   /// alignment of uint64_t.  Account for that here.
@@ -168,11 +168,11 @@
 
 private:
   void operator delete(void *);
-  /// \brief Placement delete - required by std, but never called.
+  /// Placement delete - required by std, but never called.
   void operator delete(void*, unsigned) {
     llvm_unreachable("Constructor throws?");
   }
-  /// \brief Placement delete - required by std, but never called.
+  /// Placement delete - required by std, but never called.
   void operator delete(void*, unsigned, bool) {
     llvm_unreachable("Constructor throws?");
   }
@@ -185,7 +185,7 @@
     return nullptr;
   }
 
-  /// \brief Get a reference to the name field.  Requires that we have a name
+  /// Get a reference to the name field.  Requires that we have a name
   const StringMapEntry<bool> *&getNameEntryPtr() {
     assert(FragmentAndHasName.getInt() && "Name is required");
     NameEntryStorageTy *Name = reinterpret_cast<NameEntryStorageTy *>(this);
@@ -222,11 +222,11 @@
   /// isUsed - Check if this is used.
   bool isUsed() const { return IsUsed; }
 
-  /// \brief Check if this symbol is redefinable.
+  /// Check if this symbol is redefinable.
   bool isRedefinable() const { return IsRedefinable; }
-  /// \brief Mark this symbol as redefinable.
+  /// Mark this symbol as redefinable.
   void setRedefinable(bool Value) { IsRedefinable = Value; }
-  /// \brief Prepare this symbol to be redefined.
+  /// Prepare this symbol to be redefined.
   void redefineIfPossible() {
     if (IsRedefinable) {
       if (SymbolContents == SymContentsVariable) {
@@ -316,6 +316,8 @@
     Index = Value;
   }
 
+  bool isUnset() const { return SymbolContents == SymContentsUnset; }
+
   uint64_t getOffset() const {
     assert((SymbolContents == SymContentsUnset ||
             SymbolContents == SymContentsOffset) &&
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbolMachO.h b/linux-x64/clang/include/llvm/MC/MCSymbolMachO.h
index 25220e4..6125c20 100644
--- a/linux-x64/clang/include/llvm/MC/MCSymbolMachO.h
+++ b/linux-x64/clang/include/llvm/MC/MCSymbolMachO.h
@@ -14,7 +14,7 @@
 
 namespace llvm {
 class MCSymbolMachO : public MCSymbol {
-  /// \brief We store the value for the 'desc' symbol field in the
+  /// We store the value for the 'desc' symbol field in the
   /// lowest 16 bits of the implementation defined flags.
   enum MachOSymbolFlags : uint16_t { // See <mach-o/nlist.h>.
     SF_DescFlagsMask                        = 0xFFFF,
@@ -104,7 +104,7 @@
     setFlags(Value & SF_DescFlagsMask);
   }
 
-  /// \brief Get the encoded value of the flags as they will be emitted in to
+  /// Get the encoded value of the flags as they will be emitted in to
   /// the MachO binary
   uint16_t getEncodedFlags(bool EncodeAsAltEntry) const {
     uint16_t Flags = getFlags();
diff --git a/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h b/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
index 10eadb0..e043453 100644
--- a/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
+++ b/linux-x64/clang/include/llvm/MC/MCSymbolWasm.h
@@ -45,6 +45,7 @@
   bool isFunction() const { return Type == wasm::WASM_SYMBOL_TYPE_FUNCTION; }
   bool isData() const { return Type == wasm::WASM_SYMBOL_TYPE_DATA; }
   bool isGlobal() const { return Type == wasm::WASM_SYMBOL_TYPE_GLOBAL; }
+  bool isSection() const { return Type == wasm::WASM_SYMBOL_TYPE_SECTION; }
   wasm::WasmSymbolType getType() const { return Type; }
   void setType(wasm::WasmSymbolType type) { Type = type; }
 
diff --git a/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.def b/linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc
similarity index 100%
rename from linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.def
rename to linux-x64/clang/include/llvm/MC/MCTargetOptionsCommandFlags.inc
diff --git a/linux-x64/clang/include/llvm/MC/MCValue.h b/linux-x64/clang/include/llvm/MC/MCValue.h
index ff223f7..11f5082 100644
--- a/linux-x64/clang/include/llvm/MC/MCValue.h
+++ b/linux-x64/clang/include/llvm/MC/MCValue.h
@@ -23,7 +23,7 @@
 class MCAsmInfo;
 class raw_ostream;
 
-/// \brief This represents an "assembler immediate".
+/// This represents an "assembler immediate".
 ///
 ///  In its most general form, this can hold ":Kind:(SymbolA - SymbolB +
 ///  imm64)".  Not all targets supports relocations of this general form, but we
@@ -49,13 +49,13 @@
   const MCSymbolRefExpr *getSymB() const { return SymB; }
   uint32_t getRefKind() const { return RefKind; }
 
-  /// \brief Is this an absolute (as opposed to relocatable) value.
+  /// Is this an absolute (as opposed to relocatable) value.
   bool isAbsolute() const { return !SymA && !SymB; }
 
-  /// \brief Print the value to the stream \p OS.
+  /// Print the value to the stream \p OS.
   void print(raw_ostream &OS) const;
 
-  /// \brief Print the value to stderr.
+  /// Print the value to stderr.
   void dump() const;
 
   MCSymbolRefExpr::VariantKind getAccessVariant() const;
diff --git a/linux-x64/clang/include/llvm/MC/MCWasmObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCWasmObjectWriter.h
index a4d5eb8..e45030f 100644
--- a/linux-x64/clang/include/llvm/MC/MCWasmObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCWasmObjectWriter.h
@@ -10,18 +10,16 @@
 #ifndef LLVM_MC_MCWASMOBJECTWRITER_H
 #define LLVM_MC_MCWASMOBJECTWRITER_H
 
-#include "llvm/ADT/Triple.h"
-#include "llvm/BinaryFormat/Wasm.h"
-#include "llvm/Support/DataTypes.h"
+#include "llvm/MC/MCObjectWriter.h"
+#include <memory>
 
 namespace llvm {
 
 class MCFixup;
-class MCObjectWriter;
 class MCValue;
 class raw_pwrite_stream;
 
-class MCWasmObjectTargetWriter {
+class MCWasmObjectTargetWriter : public MCObjectTargetWriter {
   const unsigned Is64Bit : 1;
 
 protected:
@@ -30,6 +28,11 @@
 public:
   virtual ~MCWasmObjectTargetWriter();
 
+  virtual Triple::ObjectFormatType getFormat() const { return Triple::Wasm; }
+  static bool classof(const MCObjectTargetWriter *W) {
+    return W->getFormat() == Triple::Wasm;
+  }
+
   virtual unsigned getRelocType(const MCValue &Target,
                                 const MCFixup &Fixup) const = 0;
 
@@ -39,7 +42,7 @@
   /// @}
 };
 
-/// \brief Construct a new Wasm writer instance.
+/// Construct a new Wasm writer instance.
 ///
 /// \param MOTW - The target specific Wasm writer subclass.
 /// \param OS - The stream to write to.
diff --git a/linux-x64/clang/include/llvm/MC/MCWasmStreamer.h b/linux-x64/clang/include/llvm/MC/MCWasmStreamer.h
index c0d4545..01e6a43 100644
--- a/linux-x64/clang/include/llvm/MC/MCWasmStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCWasmStreamer.h
@@ -15,6 +15,7 @@
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/MC/MCDirectives.h"
 #include "llvm/MC/MCObjectStreamer.h"
+#include "llvm/MC/MCObjectWriter.h"
 #include "llvm/MC/SectionKind.h"
 #include "llvm/Support/DataTypes.h"
 
@@ -27,8 +28,10 @@
 class MCWasmStreamer : public MCObjectStreamer {
 public:
   MCWasmStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> TAB,
-                 raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter)
-      : MCObjectStreamer(Context, std::move(TAB), OS, std::move(Emitter)),
+                 std::unique_ptr<MCObjectWriter> OW,
+                 std::unique_ptr<MCCodeEmitter> Emitter)
+      : MCObjectStreamer(Context, std::move(TAB), std::move(OW),
+                         std::move(Emitter)),
         SeenIdent(false) {}
 
   ~MCWasmStreamer() override;
@@ -57,7 +60,8 @@
                              unsigned ByteAlignment) override;
 
   void EmitZerofill(MCSection *Section, MCSymbol *Symbol = nullptr,
-                    uint64_t Size = 0, unsigned ByteAlignment = 0) override;
+                    uint64_t Size = 0, unsigned ByteAlignment = 0,
+                    SMLoc Loc = SMLoc()) override;
   void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
                       unsigned ByteAlignment = 0) override;
   void EmitValueImpl(const MCExpr *Value, unsigned Size,
@@ -73,7 +77,7 @@
   void EmitInstToFragment(const MCInst &Inst, const MCSubtargetInfo &) override;
   void EmitInstToData(const MCInst &Inst, const MCSubtargetInfo &) override;
 
-  /// \brief Merge the content of the fragment \p EF into the fragment \p DF.
+  /// Merge the content of the fragment \p EF into the fragment \p DF.
   void mergeFragment(MCDataFragment *, MCDataFragment *);
 
   bool SeenIdent;
diff --git a/linux-x64/clang/include/llvm/MC/MCWinCOFFObjectWriter.h b/linux-x64/clang/include/llvm/MC/MCWinCOFFObjectWriter.h
index 3234bd9..c1d35ea 100644
--- a/linux-x64/clang/include/llvm/MC/MCWinCOFFObjectWriter.h
+++ b/linux-x64/clang/include/llvm/MC/MCWinCOFFObjectWriter.h
@@ -10,6 +10,7 @@
 #ifndef LLVM_MC_MCWINCOFFOBJECTWRITER_H
 #define LLVM_MC_MCWINCOFFOBJECTWRITER_H
 
+#include "llvm/MC/MCObjectWriter.h"
 #include <memory>
 
 namespace llvm {
@@ -17,11 +18,10 @@
 class MCAsmBackend;
 class MCContext;
 class MCFixup;
-class MCObjectWriter;
 class MCValue;
 class raw_pwrite_stream;
 
-  class MCWinCOFFObjectTargetWriter {
+  class MCWinCOFFObjectTargetWriter : public MCObjectTargetWriter {
     virtual void anchor();
 
     const unsigned Machine;
@@ -32,6 +32,11 @@
   public:
     virtual ~MCWinCOFFObjectTargetWriter() = default;
 
+    virtual Triple::ObjectFormatType getFormat() const { return Triple::COFF; }
+    static bool classof(const MCObjectTargetWriter *W) {
+      return W->getFormat() == Triple::COFF;
+    }
+
     unsigned getMachine() const { return Machine; }
     virtual unsigned getRelocType(MCContext &Ctx, const MCValue &Target,
                                   const MCFixup &Fixup, bool IsCrossSection,
@@ -39,7 +44,7 @@
     virtual bool recordRelocation(const MCFixup &) const { return true; }
   };
 
-  /// \brief Construct a new Win COFF writer instance.
+  /// Construct a new Win COFF writer instance.
   ///
   /// \param MOTW - The target specific WinCOFF writer subclass.
   /// \param OS - The stream to write to.
diff --git a/linux-x64/clang/include/llvm/MC/MCWinCOFFStreamer.h b/linux-x64/clang/include/llvm/MC/MCWinCOFFStreamer.h
index 60c17ca..0049d04 100644
--- a/linux-x64/clang/include/llvm/MC/MCWinCOFFStreamer.h
+++ b/linux-x64/clang/include/llvm/MC/MCWinCOFFStreamer.h
@@ -28,7 +28,8 @@
 class MCWinCOFFStreamer : public MCObjectStreamer {
 public:
   MCWinCOFFStreamer(MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
-                    std::unique_ptr<MCCodeEmitter> CE, raw_pwrite_stream &OS);
+                    std::unique_ptr<MCCodeEmitter> CE,
+                    std::unique_ptr<MCObjectWriter> OW);
 
   /// state management
   void reset() override {
@@ -53,12 +54,13 @@
   void EmitCOFFSymbolIndex(MCSymbol const *Symbol) override;
   void EmitCOFFSectionIndex(MCSymbol const *Symbol) override;
   void EmitCOFFSecRel32(MCSymbol const *Symbol, uint64_t Offset) override;
+  void EmitCOFFImgRel32(MCSymbol const *Symbol, int64_t Offset) override;
   void EmitCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                         unsigned ByteAlignment) override;
   void EmitLocalCommonSymbol(MCSymbol *Symbol, uint64_t Size,
                              unsigned ByteAlignment) override;
   void EmitZerofill(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
-                    unsigned ByteAlignment) override;
+                    unsigned ByteAlignment, SMLoc Loc = SMLoc()) override;
   void EmitTBSSSymbol(MCSection *Section, MCSymbol *Symbol, uint64_t Size,
                       unsigned ByteAlignment) override;
   void EmitIdent(StringRef IdentString) override;
diff --git a/linux-x64/clang/include/llvm/MC/StringTableBuilder.h b/linux-x64/clang/include/llvm/MC/StringTableBuilder.h
index 89bc55a..265260f 100644
--- a/linux-x64/clang/include/llvm/MC/StringTableBuilder.h
+++ b/linux-x64/clang/include/llvm/MC/StringTableBuilder.h
@@ -20,7 +20,7 @@
 
 class raw_ostream;
 
-/// \brief Utility for building string tables with deduplicated suffixes.
+/// Utility for building string tables with deduplicated suffixes.
 class StringTableBuilder {
 public:
   enum Kind { ELF, WinCOFF, MachO, RAW, DWARF };
@@ -39,13 +39,13 @@
   StringTableBuilder(Kind K, unsigned Alignment = 1);
   ~StringTableBuilder();
 
-  /// \brief Add a string to the builder. Returns the position of S in the
+  /// Add a string to the builder. Returns the position of S in the
   /// table. The position will be changed if finalize is used.
   /// Can only be used before the table is finalized.
   size_t add(CachedHashStringRef S);
   size_t add(StringRef S) { return add(CachedHashStringRef(S)); }
 
-  /// \brief Analyze the strings and build the final table. No more strings can
+  /// Analyze the strings and build the final table. No more strings can
   /// be added after this point.
   void finalize();
 
@@ -53,7 +53,7 @@
   /// returned by add will still be valid.
   void finalizeInOrder();
 
-  /// \brief Get the offest of a string in the string table. Can only be used
+  /// Get the offest of a string in the string table. Can only be used
   /// after the table is finalized.
   size_t getOffset(CachedHashStringRef S) const;
   size_t getOffset(StringRef S) const {
diff --git a/linux-x64/clang/include/llvm/Object/Archive.h b/linux-x64/clang/include/llvm/Object/Archive.h
index 5a1512b..9ef1e48 100644
--- a/linux-x64/clang/include/llvm/Object/Archive.h
+++ b/linux-x64/clang/include/llvm/Object/Archive.h
@@ -91,9 +91,9 @@
 
     const Archive *Parent;
     ArchiveMemberHeader Header;
-    /// \brief Includes header but not padding byte.
+    /// Includes header but not padding byte.
     StringRef Data;
-    /// \brief Offset from Data to the start of the file.
+    /// Offset from Data to the start of the file.
     uint16_t StartOfFile;
 
     Expected<bool> isThinMember() const;
diff --git a/linux-x64/clang/include/llvm/Object/Binary.h b/linux-x64/clang/include/llvm/Object/Binary.h
index 5e93691..99745e2 100644
--- a/linux-x64/clang/include/llvm/Object/Binary.h
+++ b/linux-x64/clang/include/llvm/Object/Binary.h
@@ -156,7 +156,7 @@
   }
 };
 
-/// @brief Create a Binary from Source, autodetecting the file type.
+/// Create a Binary from Source, autodetecting the file type.
 ///
 /// @param Source The data to create the Binary from.
 Expected<std::unique_ptr<Binary>> createBinary(MemoryBufferRef Source,
diff --git a/linux-x64/clang/include/llvm/Object/COFF.h b/linux-x64/clang/include/llvm/Object/COFF.h
index 9190149..6caadea 100644
--- a/linux-x64/clang/include/llvm/Object/COFF.h
+++ b/linux-x64/clang/include/llvm/Object/COFF.h
@@ -276,6 +276,7 @@
 };
 
 struct coff_aux_section_definition;
+struct coff_aux_weak_external;
 
 class COFFSymbolRef {
 public:
@@ -360,6 +361,13 @@
     return getAux<coff_aux_section_definition>();
   }
 
+  const coff_aux_weak_external *getWeakExternal() const {
+    if (!getNumberOfAuxSymbols() ||
+        getStorageClass() != COFF::IMAGE_SYM_CLASS_WEAK_EXTERNAL)
+      return nullptr;
+    return getAux<coff_aux_weak_external>();
+  }
+
   bool isAbsolute() const {
     return getSectionNumber() == -1;
   }
@@ -452,11 +460,12 @@
     if (Characteristics & COFF::IMAGE_SCN_TYPE_NO_PAD)
       return 1;
 
-    // Bit [20:24] contains section alignment. Both 0 and 1 mean alignment 1.
+    // Bit [20:24] contains section alignment. 0 means use a default alignment
+    // of 16.
     uint32_t Shift = (Characteristics >> 20) & 0xF;
     if (Shift > 0)
       return 1U << (Shift - 1);
-    return 1;
+    return 16;
   }
 };
 
@@ -927,6 +936,7 @@
   uint8_t getBytesInAddress() const override;
   StringRef getFileFormatName() const override;
   Triple::ArchType getArch() const override;
+  Expected<uint64_t> getStartAddress() const override;
   SubtargetFeatures getFeatures() const override { return SubtargetFeatures(); }
 
   import_directory_iterator import_directory_begin() const;
@@ -963,6 +973,8 @@
   std::error_code getDataDirectory(uint32_t index,
                                    const data_directory *&Res) const;
   std::error_code getSection(int32_t index, const coff_section *&Res) const;
+  std::error_code getSection(StringRef SectionName,
+                             const coff_section *&Res) const;
 
   template <typename coff_symbol_type>
   std::error_code getSymbol(uint32_t Index,
@@ -1012,8 +1024,7 @@
     llvm_unreachable("null symbol table pointer!");
   }
 
-  iterator_range<const coff_relocation *>
-  getRelocations(const coff_section *Sec) const;
+  ArrayRef<coff_relocation> getRelocations(const coff_section *Sec) const;
 
   std::error_code getSectionName(const coff_section *Sec, StringRef &Res) const;
   uint64_t getSectionSize(const coff_section *Sec) const;
diff --git a/linux-x64/clang/include/llvm/Object/COFFImportFile.h b/linux-x64/clang/include/llvm/Object/COFFImportFile.h
index 7ca416f..0a4556a 100644
--- a/linux-x64/clang/include/llvm/Object/COFFImportFile.h
+++ b/linux-x64/clang/include/llvm/Object/COFFImportFile.h
@@ -74,6 +74,7 @@
   std::string Name;
   std::string ExtName;
   std::string SymbolName;
+  std::string AliasTarget;
 
   uint16_t Ordinal = 0;
   bool Noname = false;
@@ -81,10 +82,6 @@
   bool Private = false;
   bool Constant = false;
 
-  bool isWeak() {
-    return ExtName.size() && ExtName != Name;
-  }
-
   friend bool operator==(const COFFShortExport &L, const COFFShortExport &R) {
     return L.Name == R.Name && L.ExtName == R.ExtName &&
             L.Ordinal == R.Ordinal && L.Noname == R.Noname &&
@@ -98,8 +95,7 @@
 
 Error writeImportLibrary(StringRef ImportName, StringRef Path,
                          ArrayRef<COFFShortExport> Exports,
-                         COFF::MachineTypes Machine, bool MakeWeakAliases,
-                         bool MinGW);
+                         COFF::MachineTypes Machine, bool MinGW);
 
 } // namespace object
 } // namespace llvm
diff --git a/linux-x64/clang/include/llvm/Object/Decompressor.h b/linux-x64/clang/include/llvm/Object/Decompressor.h
index c8e888d..2a77d2f 100644
--- a/linux-x64/clang/include/llvm/Object/Decompressor.h
+++ b/linux-x64/clang/include/llvm/Object/Decompressor.h
@@ -17,10 +17,10 @@
 namespace llvm {
 namespace object {
 
-/// @brief Decompressor helps to handle decompression of compressed sections.
+/// Decompressor helps to handle decompression of compressed sections.
 class Decompressor {
 public:
-  /// @brief Create decompressor object.
+  /// Create decompressor object.
   /// @param Name        Section name.
   /// @param Data        Section content.
   /// @param IsLE        Flag determines if Data is in little endian form.
@@ -28,27 +28,27 @@
   static Expected<Decompressor> create(StringRef Name, StringRef Data,
                                        bool IsLE, bool Is64Bit);
 
-  /// @brief Resize the buffer and uncompress section data into it.
+  /// Resize the buffer and uncompress section data into it.
   /// @param Out         Destination buffer.
   template <class T> Error resizeAndDecompress(T &Out) {
     Out.resize(DecompressedSize);
     return decompress({Out.data(), (size_t)DecompressedSize});
   }
 
-  /// @brief Uncompress section data to raw buffer provided.
+  /// Uncompress section data to raw buffer provided.
   /// @param Buffer      Destination buffer.
   Error decompress(MutableArrayRef<char> Buffer);
 
-  /// @brief Return memory buffer size required for decompression.
+  /// Return memory buffer size required for decompression.
   uint64_t getDecompressedSize() { return DecompressedSize; }
 
-  /// @brief Return true if section is compressed, including gnu-styled case.
+  /// Return true if section is compressed, including gnu-styled case.
   static bool isCompressed(const object::SectionRef &Section);
 
-  /// @brief Return true if section is a ELF compressed one.
+  /// Return true if section is a ELF compressed one.
   static bool isCompressedELFSection(uint64_t Flags, StringRef Name);
 
-  /// @brief Return true if section name matches gnu style compressed one.
+  /// Return true if section name matches gnu style compressed one.
   static bool isGnuStyle(StringRef Name);
 
 private:
diff --git a/linux-x64/clang/include/llvm/Object/ELF.h b/linux-x64/clang/include/llvm/Object/ELF.h
index 46504e7..752d468 100644
--- a/linux-x64/clang/include/llvm/Object/ELF.h
+++ b/linux-x64/clang/include/llvm/Object/ELF.h
@@ -32,6 +32,7 @@
 namespace object {
 
 StringRef getELFRelocationTypeName(uint32_t Machine, uint32_t Type);
+uint32_t getELFRelrRelocationType(uint32_t Machine);
 StringRef getELFSectionTypeName(uint32_t Machine, uint32_t Type);
 
 // Subclasses of ELFFile may need this for template instantiation
@@ -60,6 +61,7 @@
   using Elf_Phdr = typename ELFT::Phdr;
   using Elf_Rel = typename ELFT::Rel;
   using Elf_Rela = typename ELFT::Rela;
+  using Elf_Relr = typename ELFT::Relr;
   using Elf_Verdef = typename ELFT::Verdef;
   using Elf_Verdaux = typename ELFT::Verdaux;
   using Elf_Verneed = typename ELFT::Verneed;
@@ -75,6 +77,7 @@
   using Elf_Sym_Range = typename ELFT::SymRange;
   using Elf_Rel_Range = typename ELFT::RelRange;
   using Elf_Rela_Range = typename ELFT::RelaRange;
+  using Elf_Relr_Range = typename ELFT::RelrRange;
   using Elf_Phdr_Range = typename ELFT::PhdrRange;
 
   const uint8_t *base() const {
@@ -110,8 +113,12 @@
   StringRef getRelocationTypeName(uint32_t Type) const;
   void getRelocationTypeName(uint32_t Type,
                              SmallVectorImpl<char> &Result) const;
+  uint32_t getRelrRelocationType() const;
 
-  /// \brief Get the symbol for a given relocation.
+  const char *getDynamicTagAsString(unsigned Arch, uint64_t Type) const;
+  const char *getDynamicTagAsString(uint64_t Type) const;
+
+  /// Get the symbol for a given relocation.
   Expected<const Elf_Sym *> getRelocationSymbol(const Elf_Rel *Rel,
                                                 const Elf_Shdr *SymTab) const;
 
@@ -129,6 +136,10 @@
 
   Expected<Elf_Shdr_Range> sections() const;
 
+  Expected<Elf_Dyn_Range> dynamicEntries() const;
+
+  Expected<const uint8_t *> toMappedAddr(uint64_t VAddr) const;
+
   Expected<Elf_Sym_Range> symbols(const Elf_Shdr *Sec) const {
     if (!Sec)
       return makeArrayRef<Elf_Sym>(nullptr, nullptr);
@@ -143,9 +154,15 @@
     return getSectionContentsAsArray<Elf_Rel>(Sec);
   }
 
+  Expected<Elf_Relr_Range> relrs(const Elf_Shdr *Sec) const {
+    return getSectionContentsAsArray<Elf_Relr>(Sec);
+  }
+
+  Expected<std::vector<Elf_Rela>> decode_relrs(Elf_Relr_Range relrs) const;
+
   Expected<std::vector<Elf_Rela>> android_relas(const Elf_Shdr *Sec) const;
 
-  /// \brief Iterate over program header table.
+  /// Iterate over program header table.
   Expected<Elf_Phdr_Range> program_headers() const {
     if (getHeader()->e_phnum && getHeader()->e_phentsize != sizeof(Elf_Phdr))
       return createError("invalid e_phentsize");
@@ -235,6 +252,7 @@
                                         Elf_Sym_Range Symtab,
                                         ArrayRef<Elf_Word> ShndxTable) const;
   Expected<const Elf_Shdr *> getSection(uint32_t Index) const;
+  Expected<const Elf_Shdr *> getSection(const StringRef SectionName) const;
 
   Expected<const Elf_Sym *> getSymbol(const Elf_Shdr *Sec,
                                       uint32_t Index) const;
@@ -397,6 +415,11 @@
 }
 
 template <class ELFT>
+uint32_t ELFFile<ELFT>::getRelrRelocationType() const {
+  return getELFRelrRelocationType(getHeader()->e_machine);
+}
+
+template <class ELFT>
 Expected<const typename ELFT::Sym *>
 ELFFile<ELFT>::getRelocationSymbol(const Elf_Rel *Rel,
                                    const Elf_Shdr *SymTab) const {
@@ -499,6 +522,22 @@
 }
 
 template <class ELFT>
+Expected<const typename ELFT::Shdr *>
+ELFFile<ELFT>::getSection(const StringRef SectionName) const {
+  auto TableOrErr = sections();
+  if (!TableOrErr)
+    return TableOrErr.takeError();
+  for (auto &Sec : *TableOrErr) {
+    auto SecNameOrErr = getSectionName(&Sec);
+    if (!SecNameOrErr)
+      return SecNameOrErr.takeError();
+    if (*SecNameOrErr == SectionName)
+      return &Sec;
+  }
+  return createError("invalid section name");
+}
+
+template <class ELFT>
 Expected<StringRef>
 ELFFile<ELFT>::getStringTable(const Elf_Shdr *Section) const {
   if (Section->sh_type != ELF::SHT_STRTAB)
diff --git a/linux-x64/clang/include/llvm/Object/ELFObjectFile.h b/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
index 4d00103..54907cb 100644
--- a/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/ELFObjectFile.h
@@ -15,6 +15,7 @@
 #define LLVM_OBJECT_ELFOBJECTFILE_H
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Triple.h"
@@ -83,6 +84,10 @@
   SubtargetFeatures getRISCVFeatures() const;
 
   void setARMSubArch(Triple &TheTriple) const override;
+
+  virtual uint16_t getEType() const = 0;
+
+  std::vector<std::pair<DataRefImpl, uint64_t>> getPltAddresses() const;
 };
 
 class ELFSectionRef : public SectionRef {
@@ -200,6 +205,7 @@
 
 template <class ELFT> class ELFObjectFile : public ELFObjectFileBase {
   uint16_t getEMachine() const override;
+  uint16_t getEType() const override;
   uint64_t getSymbolSize(DataRefImpl Sym) const override;
 
 public:
@@ -256,6 +262,7 @@
   bool isSectionVirtual(DataRefImpl Sec) const override;
   relocation_iterator section_rel_begin(DataRefImpl Sec) const override;
   relocation_iterator section_rel_end(DataRefImpl Sec) const override;
+  std::vector<SectionRef> dynamic_relocation_sections() const override;
   section_iterator getRelocatedSection(DataRefImpl Sec) const override;
 
   void moveRelocationNext(DataRefImpl &Rel) const override;
@@ -270,7 +277,7 @@
   uint64_t getSectionOffset(DataRefImpl Sec) const override;
   StringRef getRelocationTypeName(uint32_t Type) const;
 
-  /// \brief Get the relocation section that contains \a Rel.
+  /// Get the relocation section that contains \a Rel.
   const Elf_Shdr *getRelSection(DataRefImpl Rel) const {
     auto RelSecOrErr = EF.getSection(Rel.d.a);
     if (!RelSecOrErr)
@@ -368,6 +375,7 @@
   uint8_t getBytesInAddress() const override;
   StringRef getFileFormatName() const override;
   Triple::ArchType getArch() const override;
+  Expected<uint64_t> getStartAddress() const override;
 
   unsigned getPlatformFlags() const override { return EF.getHeader()->e_flags; }
 
@@ -507,6 +515,10 @@
   return EF.getHeader()->e_machine;
 }
 
+template <class ELFT> uint16_t ELFObjectFile<ELFT>::getEType() const {
+  return EF.getHeader()->e_type;
+}
+
 template <class ELFT>
 uint64_t ELFObjectFile<ELFT>::getSymbolSize(DataRefImpl Sym) const {
   return getSymbol(Sym)->st_size;
@@ -700,8 +712,9 @@
 template <class ELFT>
 bool ELFObjectFile<ELFT>::isSectionData(DataRefImpl Sec) const {
   const Elf_Shdr *EShdr = getSection(Sec);
-  return EShdr->sh_flags & (ELF::SHF_ALLOC | ELF::SHF_WRITE) &&
-         EShdr->sh_type == ELF::SHT_PROGBITS;
+  return EShdr->sh_type == ELF::SHT_PROGBITS &&
+         EShdr->sh_flags & ELF::SHF_ALLOC &&
+         !(EShdr->sh_flags & ELF::SHF_EXECINSTR);
 }
 
 template <class ELFT>
@@ -712,6 +725,35 @@
 }
 
 template <class ELFT>
+std::vector<SectionRef>
+ELFObjectFile<ELFT>::dynamic_relocation_sections() const {
+  std::vector<SectionRef> Res;
+  std::vector<uintptr_t> Offsets;
+
+  auto SectionsOrErr = EF.sections();
+  if (!SectionsOrErr)
+    return Res;
+
+  for (const Elf_Shdr &Sec : *SectionsOrErr) {
+    if (Sec.sh_type != ELF::SHT_DYNAMIC)
+      continue;
+    Elf_Dyn *Dynamic =
+        reinterpret_cast<Elf_Dyn *>((uintptr_t)base() + Sec.sh_offset);
+    for (; Dynamic->d_tag != ELF::DT_NULL; Dynamic++) {
+      if (Dynamic->d_tag == ELF::DT_REL || Dynamic->d_tag == ELF::DT_RELA ||
+          Dynamic->d_tag == ELF::DT_JMPREL) {
+        Offsets.push_back(Dynamic->d_un.d_val);
+      }
+    }
+  }
+  for (const Elf_Shdr &Sec : *SectionsOrErr) {
+    if (is_contained(Offsets, Sec.sh_offset))
+      Res.emplace_back(toDRI(&Sec), this);
+  }
+  return Res;
+}
+
+template <class ELFT>
 bool ELFObjectFile<ELFT>::isSectionVirtual(DataRefImpl Sec) const {
   return getSection(Sec)->sh_type == ELF::SHT_NOBITS;
 }
@@ -792,8 +834,6 @@
 
 template <class ELFT>
 uint64_t ELFObjectFile<ELFT>::getRelocationOffset(DataRefImpl Rel) const {
-  assert(EF.getHeader()->e_type == ELF::ET_REL &&
-         "Only relocatable object files have relocation offsets");
   const Elf_Shdr *sec = getRelSection(Rel);
   if (sec->sh_type == ELF::SHT_REL)
     return getRel(Rel)->r_offset;
@@ -988,8 +1028,6 @@
     case ELF::EM_SPARC:
     case ELF::EM_SPARC32PLUS:
       return "ELF32-sparc";
-    case ELF::EM_WEBASSEMBLY:
-      return "ELF32-wasm";
     case ELF::EM_AMDGPU:
       return "ELF32-amdgpu";
     default:
@@ -1013,8 +1051,6 @@
       return "ELF64-sparc";
     case ELF::EM_MIPS:
       return "ELF64-mips";
-    case ELF::EM_WEBASSEMBLY:
-      return "ELF64-wasm";
     case ELF::EM_AMDGPU:
       return "ELF64-amdgpu";
     case ELF::EM_BPF:
@@ -1076,12 +1112,6 @@
     return IsLittleEndian ? Triple::sparcel : Triple::sparc;
   case ELF::EM_SPARCV9:
     return Triple::sparcv9;
-  case ELF::EM_WEBASSEMBLY:
-    switch (EF.getHeader()->e_ident[ELF::EI_CLASS]) {
-    case ELF::ELFCLASS32: return Triple::wasm32;
-    case ELF::ELFCLASS64: return Triple::wasm64;
-    default: return Triple::UnknownArch;
-    }
 
   case ELF::EM_AMDGPU: {
     if (!IsLittleEndian)
@@ -1107,6 +1137,11 @@
 }
 
 template <class ELFT>
+Expected<uint64_t> ELFObjectFile<ELFT>::getStartAddress() const {
+  return EF.getHeader()->e_entry;
+}
+
+template <class ELFT>
 ELFObjectFileBase::elf_symbol_iterator_range
 ELFObjectFile<ELFT>::getDynamicSymbolIterators() const {
   return make_range(dynamic_symbol_begin(), dynamic_symbol_end());
diff --git a/linux-x64/clang/include/llvm/Object/ELFTypes.h b/linux-x64/clang/include/llvm/Object/ELFTypes.h
index 260ca96..fb38612 100644
--- a/linux-x64/clang/include/llvm/Object/ELFTypes.h
+++ b/linux-x64/clang/include/llvm/Object/ELFTypes.h
@@ -43,6 +43,7 @@
 template <class ELFT> struct Elf_Nhdr_Impl;
 template <class ELFT> class Elf_Note_Impl;
 template <class ELFT> class Elf_Note_Iterator_Impl;
+template <class ELFT> struct Elf_CGProfile_Impl;
 
 template <endianness E, bool Is64> struct ELFType {
 private:
@@ -61,6 +62,7 @@
   using Phdr = Elf_Phdr_Impl<ELFType<E, Is64>>;
   using Rel = Elf_Rel_Impl<ELFType<E, Is64>, false>;
   using Rela = Elf_Rel_Impl<ELFType<E, Is64>, true>;
+  using Relr = packed<uint>;
   using Verdef = Elf_Verdef_Impl<ELFType<E, Is64>>;
   using Verdaux = Elf_Verdaux_Impl<ELFType<E, Is64>>;
   using Verneed = Elf_Verneed_Impl<ELFType<E, Is64>>;
@@ -72,11 +74,13 @@
   using Nhdr = Elf_Nhdr_Impl<ELFType<E, Is64>>;
   using Note = Elf_Note_Impl<ELFType<E, Is64>>;
   using NoteIterator = Elf_Note_Iterator_Impl<ELFType<E, Is64>>;
+  using CGProfile = Elf_CGProfile_Impl<ELFType<E, Is64>>;
   using DynRange = ArrayRef<Dyn>;
   using ShdrRange = ArrayRef<Shdr>;
   using SymRange = ArrayRef<Sym>;
   using RelRange = ArrayRef<Rel>;
   using RelaRange = ArrayRef<Rela>;
+  using RelrRange = ArrayRef<Relr>;
   using PhdrRange = ArrayRef<Phdr>;
 
   using Half = packed<uint16_t>;
@@ -148,7 +152,7 @@
   using Elf_Shdr_Base<ELFT>::sh_entsize;
   using Elf_Shdr_Base<ELFT>::sh_size;
 
-  /// @brief Get the number of entities this section contains if it has any.
+  /// Get the number of entities this section contains if it has any.
   unsigned getEntityCount() const {
     if (sh_entsize == 0)
       return 0;
@@ -678,6 +682,13 @@
   }
 };
 
+template <class ELFT> struct Elf_CGProfile_Impl {
+  LLVM_ELF_IMPORT_TYPES_ELFT(ELFT)
+  Elf_Word cgp_from;
+  Elf_Word cgp_to;
+  Elf_Xword cgp_weight;
+};
+
 // MIPS .reginfo section
 template <class ELFT>
 struct Elf_Mips_RegInfo;
diff --git a/linux-x64/clang/include/llvm/Object/IRObjectFile.h b/linux-x64/clang/include/llvm/Object/IRObjectFile.h
index 6c271b1..993359b 100644
--- a/linux-x64/clang/include/llvm/Object/IRObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/IRObjectFile.h
@@ -50,11 +50,22 @@
     return v->isIR();
   }
 
-  /// \brief Finds and returns bitcode embedded in the given object file, or an
+  using module_iterator =
+      pointee_iterator<std::vector<std::unique_ptr<Module>>::const_iterator,
+                       const Module>;
+
+  module_iterator module_begin() const { return module_iterator(Mods.begin()); }
+  module_iterator module_end() const { return module_iterator(Mods.end()); }
+
+  iterator_range<module_iterator> modules() const {
+    return make_range(module_begin(), module_end());
+  }
+
+  /// Finds and returns bitcode embedded in the given object file, or an
   /// error code if not found.
   static Expected<MemoryBufferRef> findBitcodeInObject(const ObjectFile &Obj);
 
-  /// \brief Finds and returns bitcode in the given memory buffer (which may
+  /// Finds and returns bitcode in the given memory buffer (which may
   /// be either a bitcode file or a native object file with embedded bitcode),
   /// or an error code if not found.
   static Expected<MemoryBufferRef>
diff --git a/linux-x64/clang/include/llvm/Object/MachO.h b/linux-x64/clang/include/llvm/Object/MachO.h
index bfd3462..159c176 100644
--- a/linux-x64/clang/include/llvm/Object/MachO.h
+++ b/linux-x64/clang/include/llvm/Object/MachO.h
@@ -304,6 +304,8 @@
   std::error_code getSectionContents(DataRefImpl Sec,
                                      StringRef &Res) const override;
   uint64_t getSectionAlignment(DataRefImpl Sec) const override;
+  Expected<SectionRef> getSection(unsigned SectionIndex) const;
+  Expected<SectionRef> getSection(StringRef SectionName) const;
   bool isSectionCompressed(DataRefImpl Sec) const override;
   bool isSectionText(DataRefImpl Sec) const override;
   bool isSectionData(DataRefImpl Sec) const override;
@@ -331,7 +333,7 @@
 
   relocation_iterator locrel_begin() const;
   relocation_iterator locrel_end() const;
-  
+
   void moveRelocationNext(DataRefImpl &Rel) const override;
   uint64_t getRelocationOffset(DataRefImpl Rel) const override;
   symbol_iterator getRelocationSymbol(DataRefImpl Rel) const override;
diff --git a/linux-x64/clang/include/llvm/Object/MachOUniversal.h b/linux-x64/clang/include/llvm/Object/MachOUniversal.h
index 72837d0..9e70b0b 100644
--- a/linux-x64/clang/include/llvm/Object/MachOUniversal.h
+++ b/linux-x64/clang/include/llvm/Object/MachOUniversal.h
@@ -34,9 +34,9 @@
 public:
   class ObjectForArch {
     const MachOUniversalBinary *Parent;
-    /// \brief Index of object in the universal binary.
+    /// Index of object in the universal binary.
     uint32_t Index;
-    /// \brief Descriptor of the object.
+    /// Descriptor of the object.
     MachO::fat_arch Header;
     MachO::fat_arch_64 Header64;
 
diff --git a/linux-x64/clang/include/llvm/Object/ModuleSymbolTable.h b/linux-x64/clang/include/llvm/Object/ModuleSymbolTable.h
index 9e93228..c3cbc27 100644
--- a/linux-x64/clang/include/llvm/Object/ModuleSymbolTable.h
+++ b/linux-x64/clang/include/llvm/Object/ModuleSymbolTable.h
@@ -57,6 +57,15 @@
   static void CollectAsmSymbols(
       const Module &M,
       function_ref<void(StringRef, object::BasicSymbolRef::Flags)> AsmSymbol);
+
+  /// Parse inline ASM and collect the symvers directives that are defined in
+  /// the current module.
+  ///
+  /// For each found symbol, call \p AsmSymver with the name of the symbol and
+  /// its alias.
+  static void
+  CollectAsmSymvers(const Module &M,
+                    function_ref<void(StringRef, StringRef)> AsmSymver);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Object/ObjectFile.h b/linux-x64/clang/include/llvm/Object/ObjectFile.h
index 9c4ae94..02d62e8 100644
--- a/linux-x64/clang/include/llvm/Object/ObjectFile.h
+++ b/linux-x64/clang/include/llvm/Object/ObjectFile.h
@@ -65,7 +65,7 @@
   symbol_iterator getSymbol() const;
   uint64_t getType() const;
 
-  /// @brief Get a string that represents the type of this relocation.
+  /// Get a string that represents the type of this relocation.
   ///
   /// This is for display purposes only.
   void getTypeName(SmallVectorImpl<char> &Result) const;
@@ -100,7 +100,7 @@
   uint64_t getSize() const;
   std::error_code getContents(StringRef &Result) const;
 
-  /// @brief Get the alignment of this section as the actual value (not log 2).
+  /// Get the alignment of this section as the actual value (not log 2).
   uint64_t getAlignment() const;
 
   bool isCompressed() const;
@@ -154,12 +154,12 @@
   /// offset or a virtual address.
   uint64_t getValue() const;
 
-  /// @brief Get the alignment of this symbol as the actual value (not log 2).
+  /// Get the alignment of this symbol as the actual value (not log 2).
   uint32_t getAlignment() const;
   uint64_t getCommonSize() const;
   Expected<SymbolRef::Type> getType() const;
 
-  /// @brief Get section this symbol is defined in reference to. Result is
+  /// Get section this symbol is defined in reference to. Result is
   /// end_sections() if it is undefined or is an absolute symbol.
   Expected<section_iterator> getSection() const;
 
@@ -262,6 +262,10 @@
     return getCommonSymbolSizeImpl(Symb);
   }
 
+  virtual std::vector<SectionRef> dynamic_relocation_sections() const {
+    return std::vector<SectionRef>();
+  }
+
   using symbol_iterator_range = iterator_range<symbol_iterator>;
   symbol_iterator_range symbols() const {
     return symbol_iterator_range(symbol_begin(), symbol_end());
@@ -275,7 +279,7 @@
     return section_iterator_range(section_begin(), section_end());
   }
 
-  /// @brief The number of bytes used to represent an address in this object
+  /// The number of bytes used to represent an address in this object
   ///        file format.
   virtual uint8_t getBytesInAddress() const = 0;
 
@@ -283,8 +287,11 @@
   virtual Triple::ArchType getArch() const = 0;
   virtual SubtargetFeatures getFeatures() const = 0;
   virtual void setARMSubArch(Triple &TheTriple) const { }
+  virtual Expected<uint64_t> getStartAddress() const {
+    return errorCodeToError(object_error::parse_failed);
+  };
 
-  /// @brief Create a triple from the data in this object file.
+  /// Create a triple from the data in this object file.
   Triple makeTriple() const;
 
   virtual std::error_code
@@ -301,7 +308,7 @@
   /// @returns Pointer to ObjectFile subclass to handle this type of object.
   /// @param ObjectPath The path to the object file. ObjectPath.isObject must
   ///        return true.
-  /// @brief Create ObjectFile from path.
+  /// Create ObjectFile from path.
   static Expected<OwningBinary<ObjectFile>>
   createObjectFile(StringRef ObjectPath);
 
diff --git a/linux-x64/clang/include/llvm/Object/RelocVisitor.h b/linux-x64/clang/include/llvm/Object/RelocVisitor.h
index 2d0e938..008e109 100644
--- a/linux-x64/clang/include/llvm/Object/RelocVisitor.h
+++ b/linux-x64/clang/include/llvm/Object/RelocVisitor.h
@@ -23,6 +23,7 @@
 #include "llvm/Object/ELFObjectFile.h"
 #include "llvm/Object/MachO.h"
 #include "llvm/Object/ObjectFile.h"
+#include "llvm/Object/Wasm.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstdint>
@@ -31,7 +32,7 @@
 namespace llvm {
 namespace object {
 
-/// @brief Base class for object file relocation visitors.
+/// Base class for object file relocation visitors.
 class RelocVisitor {
 public:
   explicit RelocVisitor(const ObjectFile &Obj) : ObjToVisit(Obj) {}
@@ -46,6 +47,8 @@
       return visitCOFF(Rel, R, Value);
     if (isa<MachOObjectFile>(ObjToVisit))
       return visitMachO(Rel, R, Value);
+    if (isa<WasmObjectFile>(ObjToVisit))
+      return visitWasm(Rel, R, Value);
 
     HasError = true;
     return 0;
@@ -316,6 +319,27 @@
     HasError = true;
     return 0;
   }
+
+  uint64_t visitWasm(uint32_t Rel, RelocationRef R, uint64_t Value) {
+    if (ObjToVisit.getArch() == Triple::wasm32) {
+      switch (Rel) {
+      case wasm::R_WEBASSEMBLY_FUNCTION_INDEX_LEB:
+      case wasm::R_WEBASSEMBLY_TABLE_INDEX_SLEB:
+      case wasm::R_WEBASSEMBLY_TABLE_INDEX_I32:
+      case wasm::R_WEBASSEMBLY_MEMORY_ADDR_LEB:
+      case wasm::R_WEBASSEMBLY_MEMORY_ADDR_SLEB:
+      case wasm::R_WEBASSEMBLY_MEMORY_ADDR_I32:
+      case wasm::R_WEBASSEMBLY_TYPE_INDEX_LEB:
+      case wasm::R_WEBASSEMBLY_GLOBAL_INDEX_LEB:
+      case wasm::R_WEBASSEMBLY_FUNCTION_OFFSET_I32:
+      case wasm::R_WEBASSEMBLY_SECTION_OFFSET_I32:
+        // For wasm section, its offset at 0 -- ignoring Value
+        return 0;
+      }
+    }
+    HasError = true;
+    return 0;
+  }
 };
 
 } // end namespace object
diff --git a/linux-x64/clang/include/llvm/Object/Wasm.h b/linux-x64/clang/include/llvm/Object/Wasm.h
index d49acf3..fd34e45 100644
--- a/linux-x64/clang/include/llvm/Object/Wasm.h
+++ b/linux-x64/clang/include/llvm/Object/Wasm.h
@@ -21,6 +21,7 @@
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/BinaryFormat/Wasm.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Object/Binary.h"
 #include "llvm/Object/ObjectFile.h"
 #include "llvm/Support/Error.h"
@@ -53,6 +54,10 @@
     return Info.Kind == wasm::WASM_SYMBOL_TYPE_GLOBAL;
   }
 
+  bool isTypeSection() const {
+    return Info.Kind == wasm::WASM_SYMBOL_TYPE_SECTION;
+  }
+
   bool isDefined() const { return !isUndefined(); }
 
   bool isUndefined() const {
@@ -83,20 +88,10 @@
     return Info.Flags & wasm::WASM_SYMBOL_VISIBILITY_MASK;
   }
 
-  void print(raw_ostream &Out) const {
-    Out << "Name=" << Info.Name << ", Kind=" << Info.Kind
-        << ", Flags=" << Info.Flags;
-    if (!isTypeData()) {
-      Out << ", ElemIndex=" << Info.ElementIndex;
-    } else if (isDefined()) {
-      Out << ", Segment=" << Info.DataRef.Segment;
-      Out << ", Offset=" << Info.DataRef.Offset;
-      Out << ", Size=" << Info.DataRef.Size;
-    }
-  }
+  void print(raw_ostream &Out) const;
 
 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
-  LLVM_DUMP_METHOD void dump() const { print(dbgs()); }
+  LLVM_DUMP_METHOD void dump() const;
 #endif
 };
 
@@ -198,6 +193,12 @@
   SubtargetFeatures getFeatures() const override;
   bool isRelocatableObject() const override;
 
+  struct ReadContext {
+    const uint8_t *Start;
+    const uint8_t *Ptr;
+    const uint8_t *End;
+  };
+
 private:
   bool isValidFunctionIndex(uint32_t Index) const;
   bool isDefinedFunctionIndex(uint32_t Index) const;
@@ -206,40 +207,36 @@
   bool isValidFunctionSymbol(uint32_t Index) const;
   bool isValidGlobalSymbol(uint32_t Index) const;
   bool isValidDataSymbol(uint32_t Index) const;
+  bool isValidSectionSymbol(uint32_t Index) const;
   wasm::WasmFunction &getDefinedFunction(uint32_t Index);
   wasm::WasmGlobal &getDefinedGlobal(uint32_t Index);
 
   const WasmSection &getWasmSection(DataRefImpl Ref) const;
   const wasm::WasmRelocation &getWasmRelocation(DataRefImpl Ref) const;
 
-  WasmSection* findCustomSectionByName(StringRef Name);
-  WasmSection* findSectionByType(uint32_t Type);
-
   const uint8_t *getPtr(size_t Offset) const;
   Error parseSection(WasmSection &Sec);
-  Error parseCustomSection(WasmSection &Sec, const uint8_t *Ptr,
-                           const uint8_t *End);
+  Error parseCustomSection(WasmSection &Sec, ReadContext &Ctx);
 
   // Standard section types
-  Error parseTypeSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseImportSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseFunctionSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseTableSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseMemorySection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseGlobalSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseExportSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseStartSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseElemSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseCodeSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseDataSection(const uint8_t *Ptr, const uint8_t *End);
+  Error parseTypeSection(ReadContext &Ctx);
+  Error parseImportSection(ReadContext &Ctx);
+  Error parseFunctionSection(ReadContext &Ctx);
+  Error parseTableSection(ReadContext &Ctx);
+  Error parseMemorySection(ReadContext &Ctx);
+  Error parseGlobalSection(ReadContext &Ctx);
+  Error parseExportSection(ReadContext &Ctx);
+  Error parseStartSection(ReadContext &Ctx);
+  Error parseElemSection(ReadContext &Ctx);
+  Error parseCodeSection(ReadContext &Ctx);
+  Error parseDataSection(ReadContext &Ctx);
 
   // Custom section types
-  Error parseNameSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseLinkingSection(const uint8_t *Ptr, const uint8_t *End);
-  Error parseLinkingSectionSymtab(const uint8_t *&Ptr, const uint8_t *End);
-  Error parseLinkingSectionComdat(const uint8_t *&Ptr, const uint8_t *End);
-  Error parseRelocSection(StringRef Name, const uint8_t *Ptr,
-                          const uint8_t *End);
+  Error parseNameSection(ReadContext &Ctx);
+  Error parseLinkingSection(ReadContext &Ctx);
+  Error parseLinkingSectionSymtab(ReadContext &Ctx);
+  Error parseLinkingSectionComdat(ReadContext &Ctx);
+  Error parseRelocSection(StringRef Name, ReadContext &Ctx);
 
   wasm::WasmObjectHeader Header;
   std::vector<WasmSection> Sections;
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/COFFYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/COFFYAML.h
index 8794eaa..78f021f 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/COFFYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/COFFYAML.h
@@ -67,6 +67,7 @@
   yaml::BinaryRef SectionData;
   std::vector<CodeViewYAML::YAMLDebugSubsection> DebugS;
   std::vector<CodeViewYAML::LeafRecord> DebugT;
+  std::vector<CodeViewYAML::LeafRecord> DebugP;
   Optional<CodeViewYAML::DebugHSection> DebugH;
   std::vector<Relocation> Relocations;
   StringRef Name;
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypeHashing.h b/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypeHashing.h
index 4f0d9ef..344966f 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypeHashing.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypeHashing.h
@@ -32,10 +32,10 @@
 struct GlobalHash {
   GlobalHash() = default;
   explicit GlobalHash(StringRef S) : Hash(S) {
-    assert(S.size() == 20 && "Invalid hash size!");
+    assert(S.size() == 8 && "Invalid hash size!");
   }
   explicit GlobalHash(ArrayRef<uint8_t> S) : Hash(S) {
-    assert(S.size() == 20 && "Invalid hash size!");
+    assert(S.size() == 8 && "Invalid hash size!");
   }
   yaml::BinaryRef Hash;
 };
@@ -47,7 +47,7 @@
   std::vector<GlobalHash> Hashes;
 };
 
-DebugHSection fromDebugH(ArrayRef<uint8_t> DebugT);
+DebugHSection fromDebugH(ArrayRef<uint8_t> DebugH);
 ArrayRef<uint8_t> toDebugH(const DebugHSection &DebugH,
                            BumpPtrAllocator &Alloc);
 
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypes.h b/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypes.h
index bc3b556..1b1306d 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypes.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/CodeViewYAMLTypes.h
@@ -51,8 +51,10 @@
   static Expected<LeafRecord> fromCodeViewRecord(codeview::CVType Type);
 };
 
-std::vector<LeafRecord> fromDebugT(ArrayRef<uint8_t> DebugT);
-ArrayRef<uint8_t> toDebugT(ArrayRef<LeafRecord>, BumpPtrAllocator &Alloc);
+std::vector<LeafRecord> fromDebugT(ArrayRef<uint8_t> DebugTorP,
+                                   StringRef SectionName);
+ArrayRef<uint8_t> toDebugT(ArrayRef<LeafRecord>, BumpPtrAllocator &Alloc,
+                           StringRef SectionName);
 
 } // end namespace CodeViewYAML
 
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/DWARFEmitter.h b/linux-x64/clang/include/llvm/ObjectYAML/DWARFEmitter.h
index 0d7d8b4..ce32274 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/DWARFEmitter.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/DWARFEmitter.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 /// \file
-/// \brief Common declarations for yaml2obj
+/// Common declarations for yaml2obj
 //===----------------------------------------------------------------------===//
 
 #ifndef LLVM_OBJECTYAML_DWARFEMITTER_H
@@ -39,11 +39,12 @@
 void EmitDebugLine(raw_ostream &OS, const Data &DI);
 
 Expected<StringMap<std::unique_ptr<MemoryBuffer>>>
-EmitDebugSections(StringRef YAMLString,
+EmitDebugSections(StringRef YAMLString, bool ApplyFixups = false,
                   bool IsLittleEndian = sys::IsLittleEndianHost);
+StringMap<std::unique_ptr<MemoryBuffer>>
+EmitDebugSections(llvm::DWARFYAML::Data &DI, bool ApplyFixups);
 
 } // end namespace DWARFYAML
-
 } // end namespace llvm
 
 #endif // LLVM_OBJECTYAML_DWARFEMITTER_H
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/DWARFYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/DWARFYAML.h
index 2162f0f..705c887 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/DWARFYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/DWARFYAML.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file declares classes for handling the YAML representation
+/// This file declares classes for handling the YAML representation
 /// of DWARF Debug Info.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
index 7ba8396..92081f0 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/ELFYAML.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file declares classes for handling the YAML representation
+/// This file declares classes for handling the YAML representation
 /// of ELF.
 ///
 //===----------------------------------------------------------------------===//
@@ -123,6 +123,7 @@
   StringRef Link;
   StringRef Info;
   llvm::yaml::Hex64 AddressAlign;
+  Optional<llvm::yaml::Hex64> EntSize;
 
   Section(SectionKind Kind) : Kind(Kind) {}
   virtual ~Section();
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/MachOYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/MachOYAML.h
index 1fa8f92..cec4f86 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/MachOYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/MachOYAML.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file declares classes for handling the YAML representation
+/// This file declares classes for handling the YAML representation
 /// of Mach-O.
 ///
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h b/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
index 1c5e77e..8cd08e5 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/WasmYAML.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief This file declares classes for handling the YAML representation
+/// This file declares classes for handling the YAML representation
 /// of wasm binaries.
 ///
 //===----------------------------------------------------------------------===//
@@ -195,6 +195,7 @@
     return C && C->Name == "linking";
   }
 
+  uint32_t Version;
   std::vector<SymbolInfo> SymbolTable;
   std::vector<SegmentInfo> SegmentInfos;
   std::vector<InitFunction> InitFunctions;
diff --git a/linux-x64/clang/include/llvm/ObjectYAML/YAML.h b/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
index 93266dd..163cd8d 100644
--- a/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
+++ b/linux-x64/clang/include/llvm/ObjectYAML/YAML.h
@@ -21,7 +21,7 @@
 
 namespace yaml {
 
-/// \brief Specialized YAMLIO scalar type for representing a binary blob.
+/// Specialized YAMLIO scalar type for representing a binary blob.
 ///
 /// A typical use case would be to represent the content of a section in a
 /// binary file.
@@ -64,11 +64,11 @@
 class BinaryRef {
   friend bool operator==(const BinaryRef &LHS, const BinaryRef &RHS);
 
-  /// \brief Either raw binary data, or a string of hex bytes (must always
+  /// Either raw binary data, or a string of hex bytes (must always
   /// be an even number of characters).
   ArrayRef<uint8_t> Data;
 
-  /// \brief Discriminator between the two states of the `Data` member.
+  /// Discriminator between the two states of the `Data` member.
   bool DataIsHexString = true;
 
 public:
@@ -77,7 +77,7 @@
   BinaryRef(StringRef Data)
       : Data(reinterpret_cast<const uint8_t *>(Data.data()), Data.size()) {}
 
-  /// \brief The number of bytes that are represented by this BinaryRef.
+  /// The number of bytes that are represented by this BinaryRef.
   /// This is the number of bytes that writeAsBinary() will write.
   ArrayRef<uint8_t>::size_type binary_size() const {
     if (DataIsHexString)
@@ -85,11 +85,11 @@
     return Data.size();
   }
 
-  /// \brief Write the contents (regardless of whether it is binary or a
+  /// Write the contents (regardless of whether it is binary or a
   /// hex string) as binary to the given raw_ostream.
   void writeAsBinary(raw_ostream &OS) const;
 
-  /// \brief Write the contents (regardless of whether it is binary or a
+  /// Write the contents (regardless of whether it is binary or a
   /// hex string) as hex to the given raw_ostream.
   ///
   /// For example, a possible output could be `DEADBEEFCAFEBABE`.
diff --git a/linux-x64/clang/include/llvm/Option/Arg.h b/linux-x64/clang/include/llvm/Option/Arg.h
index c519a4a..d0086bb 100644
--- a/linux-x64/clang/include/llvm/Option/Arg.h
+++ b/linux-x64/clang/include/llvm/Option/Arg.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines the llvm::Arg class for parsed arguments.
+/// Defines the llvm::Arg class for parsed arguments.
 ///
 //===----------------------------------------------------------------------===//
 
@@ -28,35 +28,35 @@
 
 class ArgList;
 
-/// \brief A concrete instance of a particular driver option.
+/// A concrete instance of a particular driver option.
 ///
 /// The Arg class encodes just enough information to be able to
 /// derive the argument values efficiently.
 class Arg {
 private:
-  /// \brief The option this argument is an instance of.
+  /// The option this argument is an instance of.
   const Option Opt;
 
-  /// \brief The argument this argument was derived from (during tool chain
+  /// The argument this argument was derived from (during tool chain
   /// argument translation), if any.
   const Arg *BaseArg;
 
-  /// \brief How this instance of the option was spelled.
+  /// How this instance of the option was spelled.
   StringRef Spelling;
 
-  /// \brief The index at which this argument appears in the containing
+  /// The index at which this argument appears in the containing
   /// ArgList.
   unsigned Index;
 
-  /// \brief Was this argument used to effect compilation?
+  /// Was this argument used to effect compilation?
   ///
   /// This is used for generating "argument unused" diagnostics.
   mutable unsigned Claimed : 1;
 
-  /// \brief Does this argument own its values?
+  /// Does this argument own its values?
   mutable unsigned OwnsValues : 1;
 
-  /// \brief The argument values, as C strings.
+  /// The argument values, as C strings.
   SmallVector<const char *, 2> Values;
 
 public:
@@ -74,7 +74,7 @@
   StringRef getSpelling() const { return Spelling; }
   unsigned getIndex() const { return Index; }
 
-  /// \brief Return the base argument which generated this arg.
+  /// Return the base argument which generated this arg.
   ///
   /// This is either the argument itself or the argument it was
   /// derived from during tool chain specific argument translation.
@@ -88,7 +88,7 @@
 
   bool isClaimed() const { return getBaseArg().Claimed; }
 
-  /// \brief Set the Arg claimed bit.
+  /// Set the Arg claimed bit.
   void claim() const { getBaseArg().Claimed = true; }
 
   unsigned getNumValues() const { return Values.size(); }
@@ -107,10 +107,10 @@
     return false;
   }
 
-  /// \brief Append the argument onto the given array as strings.
+  /// Append the argument onto the given array as strings.
   void render(const ArgList &Args, ArgStringList &Output) const;
 
-  /// \brief Append the argument, render as an input, onto the given
+  /// Append the argument, render as an input, onto the given
   /// array as strings.
   ///
   /// The distinction is that some options only render their values
@@ -120,7 +120,7 @@
   void print(raw_ostream &O) const;
   void dump() const;
 
-  /// \brief Return a formatted version of the argument and
+  /// Return a formatted version of the argument and
   /// its values, for debugging and diagnostics.
   std::string getAsString(const ArgList &Args) const;
 };
diff --git a/linux-x64/clang/include/llvm/Option/ArgList.h b/linux-x64/clang/include/llvm/Option/ArgList.h
index a80921f..687c8cb 100644
--- a/linux-x64/clang/include/llvm/Option/ArgList.h
+++ b/linux-x64/clang/include/llvm/Option/ArgList.h
@@ -85,9 +85,6 @@
     SkipToNextArg();
   }
 
-  // FIXME: This conversion function makes no sense.
-  operator const Arg*() { return *Current; }
-
   reference operator*() const { return *Current; }
   pointer operator->() const { return Current; }
 
@@ -356,7 +353,7 @@
     return MakeArgStringRef(Str.toStringRef(Buf));
   }
 
-  /// \brief Create an arg string for (\p LHS + \p RHS), reusing the
+  /// Create an arg string for (\p LHS + \p RHS), reusing the
   /// string at \p Index if possible.
   const char *GetOrMakeJoinedArgString(unsigned Index, StringRef LHS,
                                         StringRef RHS) const;
diff --git a/linux-x64/clang/include/llvm/Option/OptTable.h b/linux-x64/clang/include/llvm/Option/OptTable.h
index 20b9bba..743c477 100644
--- a/linux-x64/clang/include/llvm/Option/OptTable.h
+++ b/linux-x64/clang/include/llvm/Option/OptTable.h
@@ -29,7 +29,7 @@
 class InputArgList;
 class Option;
 
-/// \brief Provide access to the Option info table.
+/// Provide access to the Option info table.
 ///
 /// The OptTable class provides a layer of indirection which allows Option
 /// instance to be created lazily. In the common case, only a few options will
@@ -38,7 +38,7 @@
 /// parts of the driver still use Option instances where convenient.
 class OptTable {
 public:
-  /// \brief Entry for a single option instance in the option data table.
+  /// Entry for a single option instance in the option data table.
   struct Info {
     /// A null terminated array of prefix strings to apply to name while
     /// matching.
@@ -57,7 +57,7 @@
   };
 
 private:
-  /// \brief The option information table.
+  /// The option information table.
   std::vector<Info> OptionInfos;
   bool IgnoreCase;
 
@@ -86,36 +86,36 @@
 public:
   ~OptTable();
 
-  /// \brief Return the total number of option classes.
+  /// Return the total number of option classes.
   unsigned getNumOptions() const { return OptionInfos.size(); }
 
-  /// \brief Get the given Opt's Option instance, lazily creating it
+  /// Get the given Opt's Option instance, lazily creating it
   /// if necessary.
   ///
   /// \return The option, or null for the INVALID option id.
   const Option getOption(OptSpecifier Opt) const;
 
-  /// \brief Lookup the name of the given option.
+  /// Lookup the name of the given option.
   const char *getOptionName(OptSpecifier id) const {
     return getInfo(id).Name;
   }
 
-  /// \brief Get the kind of the given option.
+  /// Get the kind of the given option.
   unsigned getOptionKind(OptSpecifier id) const {
     return getInfo(id).Kind;
   }
 
-  /// \brief Get the group id for the given option.
+  /// Get the group id for the given option.
   unsigned getOptionGroupID(OptSpecifier id) const {
     return getInfo(id).GroupID;
   }
 
-  /// \brief Get the help text to use to describe this option.
+  /// Get the help text to use to describe this option.
   const char *getOptionHelpText(OptSpecifier id) const {
     return getInfo(id).HelpText;
   }
 
-  /// \brief Get the meta-variable name to use when describing
+  /// Get the meta-variable name to use when describing
   /// this options values in the help text.
   const char *getOptionMetaVar(OptSpecifier id) const {
     return getInfo(id).MetaVar;
@@ -174,7 +174,7 @@
   /// \return true in success, and false in fail.
   bool addValues(const char *Option, const char *Values);
 
-  /// \brief Parse a single argument; returning the new argument and
+  /// Parse a single argument; returning the new argument and
   /// updating Index.
   ///
   /// \param [in,out] Index - The current parsing position in the argument
@@ -192,7 +192,7 @@
                    unsigned FlagsToInclude = 0,
                    unsigned FlagsToExclude = 0) const;
 
-  /// \brief Parse an list of arguments into an InputArgList.
+  /// Parse an list of arguments into an InputArgList.
   ///
   /// The resulting InputArgList will reference the strings in [\p ArgBegin,
   /// \p ArgEnd), and their lifetime should extend past that of the returned
@@ -214,7 +214,7 @@
                          unsigned &MissingArgCount, unsigned FlagsToInclude = 0,
                          unsigned FlagsToExclude = 0) const;
 
-  /// \brief Render the help text for an option table.
+  /// Render the help text for an option table.
   ///
   /// \param OS - The stream to write the help text to.
   /// \param Name - The name to use in the usage line.
diff --git a/linux-x64/clang/include/llvm/Option/Option.h b/linux-x64/clang/include/llvm/Option/Option.h
index d9aebd5..b09f604 100644
--- a/linux-x64/clang/include/llvm/Option/Option.h
+++ b/linux-x64/clang/include/llvm/Option/Option.h
@@ -95,7 +95,7 @@
     return OptionClass(Info->Kind);
   }
 
-  /// \brief Get the name of this option without any prefix.
+  /// Get the name of this option without any prefix.
   StringRef getName() const {
     assert(Info && "Must have a valid info!");
     return Info->Name;
@@ -113,7 +113,7 @@
     return Owner->getOption(Info->AliasID);
   }
 
-  /// \brief Get the alias arguments as a \0 separated list.
+  /// Get the alias arguments as a \0 separated list.
   /// E.g. ["foo", "bar"] would be returned as "foo\0bar\0".
   const char *getAliasArgs() const {
     assert(Info && "Must have a valid info!");
@@ -123,13 +123,13 @@
     return Info->AliasArgs;
   }
 
-  /// \brief Get the default prefix for this option.
+  /// Get the default prefix for this option.
   StringRef getPrefix() const {
     const char *Prefix = *Info->Prefixes;
     return Prefix ? Prefix : StringRef();
   }
 
-  /// \brief Get the name of this option with the default prefix.
+  /// Get the name of this option with the default prefix.
   std::string getPrefixedName() const {
     std::string Ret = getPrefix();
     Ret += getName();
diff --git a/linux-x64/clang/include/llvm/Pass.h b/linux-x64/clang/include/llvm/Pass.h
index a29b377..d65347d 100644
--- a/linux-x64/clang/include/llvm/Pass.h
+++ b/linux-x64/clang/include/llvm/Pass.h
@@ -353,18 +353,18 @@
 
 /// If the user specifies the -time-passes argument on an LLVM tool command line
 /// then the value of this boolean will be true, otherwise false.
-/// @brief This is the storage for the -time-passes option.
+/// This is the storage for the -time-passes option.
 extern bool TimePassesIsEnabled;
 
 /// isFunctionInPrintList - returns true if a function should be printed via
 //  debugging options like -print-after-all/-print-before-all.
-//  @brief Tells if the function IR should be printed by PrinterPass.
+//  Tells if the function IR should be printed by PrinterPass.
 extern bool isFunctionInPrintList(StringRef FunctionName);
 
 /// forcePrintModuleIR - returns true if IR printing passes should
 //  be printing module IR (even for local-pass printers e.g. function-pass)
 //  to provide more context, as enabled by debugging option -print-module-scope
-//  @brief Tells if IR printer should be printing module IR
+//  Tells if IR printer should be printing module IR
 extern bool forcePrintModuleIR();
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/PassAnalysisSupport.h b/linux-x64/clang/include/llvm/PassAnalysisSupport.h
index 1187187..a075eb5 100644
--- a/linux-x64/clang/include/llvm/PassAnalysisSupport.h
+++ b/linux-x64/clang/include/llvm/PassAnalysisSupport.h
@@ -231,7 +231,7 @@
   // should be a small number, we just do a linear search over a (dense)
   // vector.
   Pass *ResultPass = Resolver->findImplPass(PI);
-  assert(ResultPass && 
+  assert(ResultPass &&
          "getAnalysis*() called on an analysis that was not "
          "'required' by pass!");
 
diff --git a/linux-x64/clang/include/llvm/PassRegistry.h b/linux-x64/clang/include/llvm/PassRegistry.h
index 93edc12..5746213 100644
--- a/linux-x64/clang/include/llvm/PassRegistry.h
+++ b/linux-x64/clang/include/llvm/PassRegistry.h
@@ -9,7 +9,7 @@
 //
 // This file defines PassRegistry, a class that is used in the initialization
 // and registration of passes.  At application startup, passes are registered
-// with the PassRegistry, which is later provided to the PassManager for 
+// with the PassRegistry, which is later provided to the PassManager for
 // dependency resolution and similar tasks.
 //
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/Passes/PassBuilder.h b/linux-x64/clang/include/llvm/Passes/PassBuilder.h
index 5efcda0..24a93bc 100644
--- a/linux-x64/clang/include/llvm/Passes/PassBuilder.h
+++ b/linux-x64/clang/include/llvm/Passes/PassBuilder.h
@@ -27,6 +27,7 @@
 class StringRef;
 class AAManager;
 class TargetMachine;
+class ModuleSummaryIndex;
 
 /// A struct capturing PGO tunables.
 struct PGOOptions {
@@ -48,7 +49,7 @@
   bool SamplePGOSupport;
 };
 
-/// \brief This class provides access to building LLVM's passes.
+/// This class provides access to building LLVM's passes.
 ///
 /// It's members provide the baseline state available to passes during their
 /// construction. The \c PassRegistry.def file specifies how to construct all
@@ -59,7 +60,7 @@
   Optional<PGOOptions> PGOOpt;
 
 public:
-  /// \brief A struct to capture parsed pass pipeline names.
+  /// A struct to capture parsed pass pipeline names.
   ///
   /// A pipeline is defined as a series of names, each of which may in itself
   /// recursively contain a nested pipeline. A name is either the name of a pass
@@ -72,7 +73,7 @@
     std::vector<PipelineElement> InnerPipeline;
   };
 
-  /// \brief ThinLTO phase.
+  /// ThinLTO phase.
   ///
   /// This enumerates the LLVM ThinLTO optimization phases.
   enum class ThinLTOPhase {
@@ -84,7 +85,7 @@
     PostLink
   };
 
-  /// \brief LLVM-provided high-level optimization levels.
+  /// LLVM-provided high-level optimization levels.
   ///
   /// This enumerates the LLVM-provided high-level optimization levels. Each
   /// level has a specific goal and rationale.
@@ -174,7 +175,7 @@
                        Optional<PGOOptions> PGOOpt = None)
       : TM(TM), PGOOpt(PGOOpt) {}
 
-  /// \brief Cross register the analysis managers through their proxies.
+  /// Cross register the analysis managers through their proxies.
   ///
   /// This is an interface that can be used to cross register each
   // AnalysisManager with all the others analysis managers.
@@ -183,7 +184,7 @@
                             CGSCCAnalysisManager &CGAM,
                             ModuleAnalysisManager &MAM);
 
-  /// \brief Registers all available module analysis passes.
+  /// Registers all available module analysis passes.
   ///
   /// This is an interface that can be used to populate a \c
   /// ModuleAnalysisManager with all registered module analyses. Callers can
@@ -191,7 +192,7 @@
   /// pre-register analyses and this will not override those.
   void registerModuleAnalyses(ModuleAnalysisManager &MAM);
 
-  /// \brief Registers all available CGSCC analysis passes.
+  /// Registers all available CGSCC analysis passes.
   ///
   /// This is an interface that can be used to populate a \c CGSCCAnalysisManager
   /// with all registered CGSCC analyses. Callers can still manually register any
@@ -199,7 +200,7 @@
   /// not override those.
   void registerCGSCCAnalyses(CGSCCAnalysisManager &CGAM);
 
-  /// \brief Registers all available function analysis passes.
+  /// Registers all available function analysis passes.
   ///
   /// This is an interface that can be used to populate a \c
   /// FunctionAnalysisManager with all registered function analyses. Callers can
@@ -207,7 +208,7 @@
   /// pre-register analyses and this will not override those.
   void registerFunctionAnalyses(FunctionAnalysisManager &FAM);
 
-  /// \brief Registers all available loop analysis passes.
+  /// Registers all available loop analysis passes.
   ///
   /// This is an interface that can be used to populate a \c LoopAnalysisManager
   /// with all registered loop analyses. Callers can still manually register any
@@ -310,8 +311,9 @@
   /// only intended for use when attempting to optimize code. If frontends
   /// require some transformations for semantic reasons, they should explicitly
   /// build them.
-  ModulePassManager buildThinLTODefaultPipeline(OptimizationLevel Level,
-                                                bool DebugLogging = false);
+  ModulePassManager
+  buildThinLTODefaultPipeline(OptimizationLevel Level, bool DebugLogging,
+                              const ModuleSummaryIndex *ImportSummary);
 
   /// Build a pre-link, LTO-targeting default optimization pipeline to a pass
   /// manager.
@@ -340,13 +342,14 @@
   /// require some transformations for semantic reasons, they should explicitly
   /// build them.
   ModulePassManager buildLTODefaultPipeline(OptimizationLevel Level,
-                                            bool DebugLogging = false);
+                                            bool DebugLogging,
+                                            ModuleSummaryIndex *ExportSummary);
 
   /// Build the default `AAManager` with the default alias analysis pipeline
   /// registered.
   AAManager buildDefaultAAPipeline();
 
-  /// \brief Parse a textual pass pipeline description into a \c
+  /// Parse a textual pass pipeline description into a \c
   /// ModulePassManager.
   ///
   /// The format of the textual pass pipeline description looks something like:
@@ -410,7 +413,7 @@
   /// returns false.
   bool parseAAPipeline(AAManager &AA, StringRef PipelineText);
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding passes that perform peephole
@@ -421,7 +424,7 @@
     PeepholeEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding late loop canonicalization and
@@ -435,7 +438,7 @@
     LateLoopOptimizationsEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding loop passes to the end of the loop
@@ -445,7 +448,7 @@
     LoopOptimizerEndEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding optimization passes after most of the
@@ -455,7 +458,7 @@
     ScalarOptimizerLateEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding CallGraphSCC passes at the end of the
@@ -466,7 +469,7 @@
     CGSCCOptimizerLateEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for a default optimizer pipeline extension
+  /// Register a callback for a default optimizer pipeline extension
   /// point
   ///
   /// This extension point allows adding optimization passes before the
@@ -487,7 +490,7 @@
     PipelineStartEPCallbacks.push_back(C);
   }
 
-  /// \brief Register a callback for parsing an AliasAnalysis Name to populate
+  /// Register a callback for parsing an AliasAnalysis Name to populate
   /// the given AAManager \p AA
   void registerParseAACallback(
       const std::function<bool(StringRef Name, AAManager &AA)> &C) {
@@ -541,7 +544,7 @@
   }
   /// @}}
 
-  /// \brief Register a callback for a top-level pipeline entry.
+  /// Register a callback for a top-level pipeline entry.
   ///
   /// If the PassManager type is not given at the top level of the pipeline
   /// text, this Callback should be used to determine the appropriate stack of
diff --git a/linux-x64/clang/include/llvm/Passes/PassPlugin.h b/linux-x64/clang/include/llvm/Passes/PassPlugin.h
new file mode 100644
index 0000000..af8f11a
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Passes/PassPlugin.h
@@ -0,0 +1,114 @@
+//===- llvm/Passes/PassPlugin.h - Public Plugin API -----------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This defines the public entry point for new-PM pass plugins.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_PASSES_PASSPLUGIN_H
+#define LLVM_PASSES_PASSPLUGIN_H
+
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/DynamicLibrary.h"
+#include "llvm/Support/Error.h"
+#include <cstdint>
+#include <string>
+
+namespace llvm {
+class PassBuilder;
+
+/// \macro LLVM_PLUGIN_API_VERSION
+/// Identifies the API version understood by this plugin.
+///
+/// When a plugin is loaded, the driver will check it's supported plugin version
+/// against that of the plugin. A mismatch is an error. The supported version
+/// will be incremented for ABI-breaking changes to the \c PassPluginLibraryInfo
+/// struct, i.e. when callbacks are added, removed, or reordered.
+#define LLVM_PLUGIN_API_VERSION 1
+
+extern "C" {
+/// Information about the plugin required to load its passes
+///
+/// This struct defines the core interface for pass plugins and is supposed to
+/// be filled out by plugin implementors. LLVM-side users of a plugin are
+/// expected to use the \c PassPlugin class below to interface with it.
+struct PassPluginLibraryInfo {
+  /// The API version understood by this plugin, usually \c
+  /// LLVM_PLUGIN_API_VERSION
+  uint32_t APIVersion;
+  /// A meaningful name of the plugin.
+  const char *PluginName;
+  /// The version of the plugin.
+  const char *PluginVersion;
+
+  /// The callback for registering plugin passes with a \c PassBuilder
+  /// instance
+  void (*RegisterPassBuilderCallbacks)(PassBuilder &);
+};
+}
+
+/// A loaded pass plugin.
+///
+/// An instance of this class wraps a loaded pass plugin and gives access to
+/// its interface defined by the \c PassPluginLibraryInfo it exposes.
+class PassPlugin {
+public:
+  /// Attempts to load a pass plugin from a given file.
+  ///
+  /// \returns Returns an error if either the library cannot be found or loaded,
+  /// there is no public entry point, or the plugin implements the wrong API
+  /// version.
+  static Expected<PassPlugin> Load(const std::string &Filename);
+
+  /// Get the filename of the loaded plugin.
+  StringRef getFilename() const { return Filename; }
+
+  /// Get the plugin name
+  StringRef getPluginName() const { return Info.PluginName; }
+
+  /// Get the plugin version
+  StringRef getPluginVersion() const { return Info.PluginVersion; }
+
+  /// Get the plugin API version
+  uint32_t getAPIVersion() const { return Info.APIVersion; }
+
+  /// Invoke the PassBuilder callback registration
+  void registerPassBuilderCallbacks(PassBuilder &PB) const {
+    Info.RegisterPassBuilderCallbacks(PB);
+  }
+
+private:
+  PassPlugin(const std::string &Filename, const sys::DynamicLibrary &Library)
+      : Filename(Filename), Library(Library), Info() {}
+
+  std::string Filename;
+  sys::DynamicLibrary Library;
+  PassPluginLibraryInfo Info;
+};
+}
+
+/// The public entry point for a pass plugin.
+///
+/// When a plugin is loaded by the driver, it will call this entry point to
+/// obtain information about this plugin and about how to register its passes.
+/// This function needs to be implemented by the plugin, see the example below:
+///
+/// ```
+/// extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
+/// llvmGetPassPluginInfo() {
+///   return {
+///     LLVM_PLUGIN_API_VERSION, "MyPlugin", "v0.1", [](PassBuilder &PB) { ... }
+///   };
+/// }
+/// ```
+extern "C" ::llvm::PassPluginLibraryInfo LLVM_ATTRIBUTE_WEAK
+llvmGetPassPluginInfo();
+
+#endif /* LLVM_PASSES_PASSPLUGIN_H */
diff --git a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMapping.h b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMapping.h
index 5a4098c..94f8174 100644
--- a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMapping.h
+++ b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMapping.h
@@ -17,6 +17,7 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/Hashing.h"
 #include "llvm/ADT/None.h"
 #include "llvm/ADT/StringRef.h"
@@ -206,7 +207,7 @@
     /// A CodeRegion associates some code with a counter
     CodeRegion,
 
-    /// An ExpansionRegion represents a file expansion region that associates 
+    /// An ExpansionRegion represents a file expansion region that associates
     /// a source range with the expansion of a virtual source file, such as
     /// for a macro instantiation or #include file.
     ExpansionRegion,
@@ -506,10 +507,9 @@
 /// This is the main interface to get coverage information, using a profile to
 /// fill out execution counts.
 class CoverageMapping {
-  StringSet<> FunctionNames;
+  DenseMap<size_t, DenseSet<size_t>> RecordProvenance;
   std::vector<FunctionRecord> Functions;
   std::vector<std::pair<std::string, uint64_t>> FuncHashMismatches;
-  std::vector<std::pair<std::string, uint64_t>> FuncCounterMismatches;
 
   CoverageMapping() = default;
 
@@ -536,9 +536,7 @@
   ///
   /// This is a count of functions whose profile is out of date or otherwise
   /// can't be associated with any coverage information.
-  unsigned getMismatchedCount() const {
-    return FuncHashMismatches.size() + FuncCounterMismatches.size();
-  }
+  unsigned getMismatchedCount() const { return FuncHashMismatches.size(); }
 
   /// A hash mismatch occurs when a profile record for a symbol does not have
   /// the same hash as a coverage mapping record for the same symbol. This
@@ -548,14 +546,6 @@
     return FuncHashMismatches;
   }
 
-  /// A counter mismatch occurs when there is an error when evaluating the
-  /// counter expressions in a coverage mapping record. This returns a list of
-  /// counter mismatches, where each mismatch is a pair of the symbol name and
-  /// the number of valid evaluated counter expressions.
-  ArrayRef<std::pair<std::string, uint64_t>> getCounterMismatches() const {
-    return FuncCounterMismatches;
-  }
-
   /// Returns a lexicographically sorted, unique list of files that are
   /// covered.
   std::vector<StringRef> getUniqueSourceFiles() const;
diff --git a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
index 633e515..c88c71a 100644
--- a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
+++ b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingReader.h
@@ -32,7 +32,7 @@
 
 class CoverageMappingReader;
 
-/// \brief Coverage mapping information for a single function.
+/// Coverage mapping information for a single function.
 struct CoverageMappingRecord {
   StringRef FunctionName;
   uint64_t FunctionHash;
@@ -41,7 +41,7 @@
   ArrayRef<CounterMappingRegion> MappingRegions;
 };
 
-/// \brief A file format agnostic iterator over coverage mapping data.
+/// A file format agnostic iterator over coverage mapping data.
 class CoverageMappingIterator
     : public std::iterator<std::input_iterator_tag, CoverageMappingRecord> {
   CoverageMappingReader *Reader;
@@ -101,7 +101,7 @@
   CoverageMappingIterator end() { return CoverageMappingIterator(); }
 };
 
-/// \brief Base class for the raw coverage mapping and filenames data readers.
+/// Base class for the raw coverage mapping and filenames data readers.
 class RawCoverageReader {
 protected:
   StringRef Data;
@@ -114,7 +114,7 @@
   Error readString(StringRef &Result);
 };
 
-/// \brief Reader for the raw coverage filenames.
+/// Reader for the raw coverage filenames.
 class RawCoverageFilenamesReader : public RawCoverageReader {
   std::vector<StringRef> &Filenames;
 
@@ -128,7 +128,7 @@
   Error read();
 };
 
-/// \brief Checks if the given coverage mapping data is exported for
+/// Checks if the given coverage mapping data is exported for
 /// an unused function.
 class RawCoverageMappingDummyChecker : public RawCoverageReader {
 public:
@@ -138,7 +138,7 @@
   Expected<bool> isDummy();
 };
 
-/// \brief Reader for the raw coverage mapping data.
+/// Reader for the raw coverage mapping data.
 class RawCoverageMappingReader : public RawCoverageReader {
   ArrayRef<StringRef> TranslationUnitFilenames;
   std::vector<StringRef> &Filenames;
@@ -169,7 +169,7 @@
                              unsigned InferredFileID, size_t NumFileIDs);
 };
 
-/// \brief Reader for the coverage mapping data that is emitted by the
+/// Reader for the coverage mapping data that is emitted by the
 /// frontend and stored in an object file.
 class BinaryCoverageReader : public CoverageMappingReader {
 public:
diff --git a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
index b6f864a..86fb1bd 100644
--- a/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
+++ b/linux-x64/clang/include/llvm/ProfileData/Coverage/CoverageMappingWriter.h
@@ -25,7 +25,7 @@
 
 namespace coverage {
 
-/// \brief Writer of the filenames section for the instrumentation
+/// Writer of the filenames section for the instrumentation
 /// based code coverage.
 class CoverageFilenamesSectionWriter {
   ArrayRef<StringRef> Filenames;
@@ -34,11 +34,11 @@
   CoverageFilenamesSectionWriter(ArrayRef<StringRef> Filenames)
       : Filenames(Filenames) {}
 
-  /// \brief Write encoded filenames to the given output stream.
+  /// Write encoded filenames to the given output stream.
   void write(raw_ostream &OS);
 };
 
-/// \brief Writer for instrumentation based coverage mapping data.
+/// Writer for instrumentation based coverage mapping data.
 class CoverageMappingWriter {
   ArrayRef<unsigned> VirtualFileMapping;
   ArrayRef<CounterExpression> Expressions;
@@ -51,7 +51,7 @@
       : VirtualFileMapping(VirtualFileMapping), Expressions(Expressions),
         MappingRegions(MappingRegions) {}
 
-  /// \brief Write encoded coverage mapping data to the given output stream.
+  /// Write encoded coverage mapping data to the given output stream.
   void write(raw_ostream &OS);
 };
 
diff --git a/linux-x64/clang/include/llvm/ProfileData/GCOV.h b/linux-x64/clang/include/llvm/ProfileData/GCOV.h
index 497f80b..8500401 100644
--- a/linux-x64/clang/include/llvm/ProfileData/GCOV.h
+++ b/linux-x64/clang/include/llvm/ProfileData/GCOV.h
@@ -41,7 +41,7 @@
 
 enum GCOVVersion { V402, V404, V704 };
 
-/// \brief A struct for passing gcov options between functions.
+/// A struct for passing gcov options between functions.
 struct Options {
   Options(bool A, bool B, bool C, bool F, bool P, bool U, bool L, bool N)
       : AllBlocks(A), BranchInfo(B), BranchCount(C), FuncCoverage(F),
@@ -376,6 +376,7 @@
 };
 
 class FileInfo {
+protected:
   // It is unlikely--but possible--for multiple functions to be on the same
   // line.
   // Therefore this typedef allows LineData.Functions to store multiple
@@ -428,7 +429,7 @@
   void print(raw_ostream &OS, StringRef MainFilename, StringRef GCNOFile,
              StringRef GCDAFile);
 
-private:
+protected:
   std::string getCoveragePath(StringRef Filename, StringRef MainFilename);
   std::unique_ptr<raw_ostream> openCoveragePath(StringRef CoveragePath);
   void printFunctionSummary(raw_ostream &OS, const FunctionVector &Funcs) const;
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProf.h b/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
index 88ae0f0..206142b 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProf.h
@@ -544,9 +544,9 @@
 void InstrProfSymtab::finalizeSymtab() {
   if (Sorted)
     return;
-  std::sort(MD5NameMap.begin(), MD5NameMap.end(), less_first());
-  std::sort(MD5FuncMap.begin(), MD5FuncMap.end(), less_first());
-  std::sort(AddrToMD5Map.begin(), AddrToMD5Map.end(), less_first());
+  llvm::sort(MD5NameMap.begin(), MD5NameMap.end(), less_first());
+  llvm::sort(MD5FuncMap.begin(), MD5FuncMap.end(), less_first());
+  llvm::sort(AddrToMD5Map.begin(), AddrToMD5Map.end(), less_first());
   AddrToMD5Map.erase(std::unique(AddrToMD5Map.begin(), AddrToMD5Map.end()),
                      AddrToMD5Map.end());
   Sorted = true;
@@ -1021,7 +1021,7 @@
 // compiler-rt/lib/profile/InstrProfiling.h.
 // It should also match the synthesized type in
 // Transforms/Instrumentation/InstrProfiling.cpp:getOrCreateRegionCounters.
-template <class IntPtrT> struct LLVM_ALIGNAS(8) ProfileData {
+template <class IntPtrT> struct alignas(8) ProfileData {
   #define INSTR_PROF_DATA(Type, LLVMType, Name, Init) Type Name;
   #include "llvm/ProfileData/InstrProfData.inc"
 };
diff --git a/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc b/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
index bac8cce..454620e 100644
--- a/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
+++ b/linux-x64/clang/include/llvm/ProfileData/InstrProfData.inc
@@ -308,11 +308,11 @@
 
 #ifdef __cplusplus
   /*!
-   * \brief Return the number of value sites.
+   * Return the number of value sites.
    */
   uint32_t getNumValueSites() const { return NumValueSites; }
   /*!
-   * \brief Read data from this record and save it to Record.
+   * Read data from this record and save it to Record.
    */
   void deserializeTo(InstrProfRecord &Record,
                      InstrProfSymtab *SymTab);
@@ -458,7 +458,7 @@
 #endif
 
 /*!
- * \brief Return the \c ValueProfRecord header size including the
+ * Return the \c ValueProfRecord header size including the
  * padding bytes.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
@@ -471,7 +471,7 @@
 }
 
 /*!
- * \brief Return the total size of the value profile record including the
+ * Return the total size of the value profile record including the
  * header and the value data.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
@@ -482,7 +482,7 @@
 }
 
 /*!
- * \brief Return the pointer to the start of value data array.
+ * Return the pointer to the start of value data array.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
 InstrProfValueData *getValueProfRecordValueData(ValueProfRecord *This) {
@@ -491,7 +491,7 @@
 }
 
 /*!
- * \brief Return the total number of value data for \c This record.
+ * Return the total number of value data for \c This record.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
 uint32_t getValueProfRecordNumValueData(ValueProfRecord *This) {
@@ -503,7 +503,7 @@
 }
 
 /*!
- * \brief Use this method to advance to the next \c This \c ValueProfRecord.
+ * Use this method to advance to the next \c This \c ValueProfRecord.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
 ValueProfRecord *getValueProfRecordNext(ValueProfRecord *This) {
@@ -514,7 +514,7 @@
 }
 
 /*!
- * \brief Return the first \c ValueProfRecord instance.
+ * Return the first \c ValueProfRecord instance.
  */
 INSTR_PROF_VISIBILITY INSTR_PROF_INLINE
 ValueProfRecord *getFirstValueProfRecord(ValueProfData *This) {
diff --git a/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h b/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
index 51b065b..087588f 100644
--- a/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
+++ b/linux-x64/clang/include/llvm/ProfileData/ProfileCommon.h
@@ -61,7 +61,7 @@
   void computeDetailedSummary();
 
 public:
-  /// \brief A vector of useful cutoff values for detailed summary.
+  /// A vector of useful cutoff values for detailed summary.
   static const ArrayRef<uint32_t> DefaultCutoffs;
 };
 
diff --git a/linux-x64/clang/include/llvm/ProfileData/SampleProf.h b/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
index d79ef3b..0cd6dd2 100644
--- a/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
+++ b/linux-x64/clang/include/llvm/ProfileData/SampleProf.h
@@ -78,11 +78,29 @@
 namespace llvm {
 namespace sampleprof {
 
-static inline uint64_t SPMagic() {
+enum SampleProfileFormat {
+  SPF_None = 0,
+  SPF_Text = 0x1,
+  SPF_Compact_Binary = 0x2,
+  SPF_GCC = 0x3,
+  SPF_Binary = 0xff
+};
+
+static inline uint64_t SPMagic(SampleProfileFormat Format = SPF_Binary) {
   return uint64_t('S') << (64 - 8) | uint64_t('P') << (64 - 16) |
          uint64_t('R') << (64 - 24) | uint64_t('O') << (64 - 32) |
          uint64_t('F') << (64 - 40) | uint64_t('4') << (64 - 48) |
-         uint64_t('2') << (64 - 56) | uint64_t(0xff);
+         uint64_t('2') << (64 - 56) | uint64_t(Format);
+}
+
+// Get the proper representation of a string in the input Format.
+static inline StringRef getRepInFormat(StringRef Name,
+                                       SampleProfileFormat Format,
+                                       std::string &GUIDBuf) {
+  if (Name.empty())
+    return Name;
+  GUIDBuf = std::to_string(Function::getGUID(Name));
+  return (Format == SPF_Compact_Binary) ? StringRef(GUIDBuf) : Name;
 }
 
 static inline uint64_t SPVersion() { return 103; }
@@ -359,7 +377,7 @@
   /// GUID to \p S. Also traverse the BodySamples to add hot CallTarget's GUID
   /// to \p S.
   void findInlinedFunctions(DenseSet<GlobalValue::GUID> &S, const Module *M,
-                            uint64_t Threshold) const {
+                            uint64_t Threshold, bool isCompact) const {
     if (TotalSamples <= Threshold)
       return;
     S.insert(Function::getGUID(Name));
@@ -370,11 +388,12 @@
         if (TS.getValue() > Threshold) {
           Function *Callee = M->getFunction(TS.getKey());
           if (!Callee || !Callee->getSubprogram())
-            S.insert(Function::getGUID(TS.getKey()));
+            S.insert(isCompact ? std::stol(TS.getKey().data())
+                               : Function::getGUID(TS.getKey()));
         }
     for (const auto &CS : CallsiteSamples)
       for (const auto &NameFS : CS.second)
-        NameFS.second.findInlinedFunctions(S, M, Threshold);
+        NameFS.second.findInlinedFunctions(S, M, Threshold, isCompact);
   }
 
   /// Set the name of the function.
@@ -387,7 +406,7 @@
   /// We assume that a single function will not exceed 65535 LOC.
   static unsigned getOffset(const DILocation *DIL);
 
-  /// \brief Get the FunctionSamples of the inline instance where DIL originates
+  /// Get the FunctionSamples of the inline instance where DIL originates
   /// from.
   ///
   /// The FunctionSamples of the instruction (Machine or IR) associated to
diff --git a/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h b/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
index 0e9ab2d..0617b05 100644
--- a/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
+++ b/linux-x64/clang/include/llvm/ProfileData/SampleProfReader.h
@@ -235,7 +235,7 @@
 
 namespace sampleprof {
 
-/// \brief Sample-based profile reader.
+/// Sample-based profile reader.
 ///
 /// Each profile contains sample counts for all the functions
 /// executed. Inside each function, statements are annotated with the
@@ -264,105 +264,113 @@
 /// compact and I/O efficient. They can both be used interchangeably.
 class SampleProfileReader {
 public:
-  SampleProfileReader(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
-      : Profiles(0), Ctx(C), Buffer(std::move(B)) {}
+  SampleProfileReader(std::unique_ptr<MemoryBuffer> B, LLVMContext &C,
+                      SampleProfileFormat Format = SPF_None)
+      : Profiles(0), Ctx(C), Buffer(std::move(B)), Format(Format) {}
 
   virtual ~SampleProfileReader() = default;
 
-  /// \brief Read and validate the file header.
+  /// Read and validate the file header.
   virtual std::error_code readHeader() = 0;
 
-  /// \brief Read sample profiles from the associated file.
+  /// Read sample profiles from the associated file.
   virtual std::error_code read() = 0;
 
-  /// \brief Print the profile for \p FName on stream \p OS.
+  /// Print the profile for \p FName on stream \p OS.
   void dumpFunctionProfile(StringRef FName, raw_ostream &OS = dbgs());
 
-  /// \brief Print all the profiles on stream \p OS.
+  /// Print all the profiles on stream \p OS.
   void dump(raw_ostream &OS = dbgs());
 
-  /// \brief Return the samples collected for function \p F.
+  /// Return the samples collected for function \p F.
   FunctionSamples *getSamplesFor(const Function &F) {
     // The function name may have been updated by adding suffix. In sample
     // profile, the function names are all stripped, so we need to strip
     // the function name suffix before matching with profile.
-    if (Profiles.count(F.getName().split('.').first))
-      return &Profiles[(F.getName().split('.').first)];
+    StringRef Fname = F.getName().split('.').first;
+    std::string FGUID;
+    Fname = getRepInFormat(Fname, getFormat(), FGUID);
+    if (Profiles.count(Fname))
+      return &Profiles[Fname];
     return nullptr;
   }
 
-  /// \brief Return all the profiles.
+  /// Return all the profiles.
   StringMap<FunctionSamples> &getProfiles() { return Profiles; }
 
-  /// \brief Report a parse error message.
+  /// Report a parse error message.
   void reportError(int64_t LineNumber, Twine Msg) const {
     Ctx.diagnose(DiagnosticInfoSampleProfile(Buffer->getBufferIdentifier(),
                                              LineNumber, Msg));
   }
 
-  /// \brief Create a sample profile reader appropriate to the file format.
+  /// Create a sample profile reader appropriate to the file format.
   static ErrorOr<std::unique_ptr<SampleProfileReader>>
   create(const Twine &Filename, LLVMContext &C);
 
-  /// \brief Create a sample profile reader from the supplied memory buffer.
+  /// Create a sample profile reader from the supplied memory buffer.
   static ErrorOr<std::unique_ptr<SampleProfileReader>>
   create(std::unique_ptr<MemoryBuffer> &B, LLVMContext &C);
 
-  /// \brief Return the profile summary.
+  /// Return the profile summary.
   ProfileSummary &getSummary() { return *(Summary.get()); }
 
+  /// \brief Return the profile format.
+  SampleProfileFormat getFormat() { return Format; }
+
 protected:
-  /// \brief Map every function to its associated profile.
+  /// Map every function to its associated profile.
   ///
   /// The profile of every function executed at runtime is collected
   /// in the structure FunctionSamples. This maps function objects
   /// to their corresponding profiles.
   StringMap<FunctionSamples> Profiles;
 
-  /// \brief LLVM context used to emit diagnostics.
+  /// LLVM context used to emit diagnostics.
   LLVMContext &Ctx;
 
-  /// \brief Memory buffer holding the profile file.
+  /// Memory buffer holding the profile file.
   std::unique_ptr<MemoryBuffer> Buffer;
 
-  /// \brief Profile summary information.
+  /// Profile summary information.
   std::unique_ptr<ProfileSummary> Summary;
 
-  /// \brief Compute summary for this profile.
+  /// Compute summary for this profile.
   void computeSummary();
+
+  /// \brief The format of sample.
+  SampleProfileFormat Format = SPF_None;
 };
 
 class SampleProfileReaderText : public SampleProfileReader {
 public:
   SampleProfileReaderText(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
-      : SampleProfileReader(std::move(B), C) {}
+      : SampleProfileReader(std::move(B), C, SPF_Text) {}
 
-  /// \brief Read and validate the file header.
+  /// Read and validate the file header.
   std::error_code readHeader() override { return sampleprof_error::success; }
 
-  /// \brief Read sample profiles from the associated file.
+  /// Read sample profiles from the associated file.
   std::error_code read() override;
 
-  /// \brief Return true if \p Buffer is in the format supported by this class.
+  /// Return true if \p Buffer is in the format supported by this class.
   static bool hasFormat(const MemoryBuffer &Buffer);
 };
 
 class SampleProfileReaderBinary : public SampleProfileReader {
 public:
-  SampleProfileReaderBinary(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
-      : SampleProfileReader(std::move(B), C) {}
+  SampleProfileReaderBinary(std::unique_ptr<MemoryBuffer> B, LLVMContext &C,
+                            SampleProfileFormat Format = SPF_None)
+      : SampleProfileReader(std::move(B), C, Format) {}
 
-  /// \brief Read and validate the file header.
+  /// Read and validate the file header.
   std::error_code readHeader() override;
 
-  /// \brief Read sample profiles from the associated file.
+  /// Read sample profiles from the associated file.
   std::error_code read() override;
 
-  /// \brief Return true if \p Buffer is in the format supported by this class.
-  static bool hasFormat(const MemoryBuffer &Buffer);
-
 protected:
-  /// \brief Read a numeric value of type T from the profile.
+  /// Read a numeric value of type T from the profile.
   ///
   /// If an error occurs during decoding, a diagnostic message is emitted and
   /// EC is set.
@@ -370,7 +378,7 @@
   /// \returns the read value.
   template <typename T> ErrorOr<T> readNumber();
 
-  /// \brief Read a string from the profile.
+  /// Read a string from the profile.
   ///
   /// If an error occurs during decoding, a diagnostic message is emitted and
   /// EC is set.
@@ -378,29 +386,68 @@
   /// \returns the read value.
   ErrorOr<StringRef> readString();
 
-  /// Read a string indirectly via the name table.
-  ErrorOr<StringRef> readStringFromTable();
+  /// Read the string index and check whether it overflows the table.
+  template <typename T> inline ErrorOr<uint32_t> readStringIndex(T &Table);
 
-  /// \brief Return true if we've reached the end of file.
+  /// Return true if we've reached the end of file.
   bool at_eof() const { return Data >= End; }
 
   /// Read the contents of the given profile instance.
   std::error_code readProfile(FunctionSamples &FProfile);
 
-  /// \brief Points to the current location in the buffer.
+  /// Points to the current location in the buffer.
   const uint8_t *Data = nullptr;
 
-  /// \brief Points to the end of the buffer.
+  /// Points to the end of the buffer.
   const uint8_t *End = nullptr;
 
-  /// Function name table.
-  std::vector<StringRef> NameTable;
-
 private:
   std::error_code readSummaryEntry(std::vector<ProfileSummaryEntry> &Entries);
+  virtual std::error_code verifySPMagic(uint64_t Magic) = 0;
 
-  /// \brief Read profile summary.
+  /// Read profile summary.
   std::error_code readSummary();
+
+  /// Read the whole name table.
+  virtual std::error_code readNameTable() = 0;
+
+  /// Read a string indirectly via the name table.
+  virtual ErrorOr<StringRef> readStringFromTable() = 0;
+};
+
+class SampleProfileReaderRawBinary : public SampleProfileReaderBinary {
+private:
+  /// Function name table.
+  std::vector<StringRef> NameTable;
+  virtual std::error_code verifySPMagic(uint64_t Magic) override;
+  virtual std::error_code readNameTable() override;
+  /// Read a string indirectly via the name table.
+  virtual ErrorOr<StringRef> readStringFromTable() override;
+
+public:
+  SampleProfileReaderRawBinary(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
+      : SampleProfileReaderBinary(std::move(B), C, SPF_Binary) {}
+
+  /// \brief Return true if \p Buffer is in the format supported by this class.
+  static bool hasFormat(const MemoryBuffer &Buffer);
+};
+
+class SampleProfileReaderCompactBinary : public SampleProfileReaderBinary {
+private:
+  /// Function name table.
+  std::vector<std::string> NameTable;
+  virtual std::error_code verifySPMagic(uint64_t Magic) override;
+  virtual std::error_code readNameTable() override;
+  /// Read a string indirectly via the name table.
+  virtual ErrorOr<StringRef> readStringFromTable() override;
+
+public:
+  SampleProfileReaderCompactBinary(std::unique_ptr<MemoryBuffer> B,
+                                   LLVMContext &C)
+      : SampleProfileReaderBinary(std::move(B), C, SPF_Compact_Binary) {}
+
+  /// \brief Return true if \p Buffer is in the format supported by this class.
+  static bool hasFormat(const MemoryBuffer &Buffer);
 };
 
 using InlineCallStack = SmallVector<FunctionSamples *, 10>;
@@ -421,15 +468,16 @@
 class SampleProfileReaderGCC : public SampleProfileReader {
 public:
   SampleProfileReaderGCC(std::unique_ptr<MemoryBuffer> B, LLVMContext &C)
-      : SampleProfileReader(std::move(B), C), GcovBuffer(Buffer.get()) {}
+      : SampleProfileReader(std::move(B), C, SPF_GCC),
+        GcovBuffer(Buffer.get()) {}
 
-  /// \brief Read and validate the file header.
+  /// Read and validate the file header.
   std::error_code readHeader() override;
 
-  /// \brief Read sample profiles from the associated file.
+  /// Read sample profiles from the associated file.
   std::error_code read() override;
 
-  /// \brief Return true if \p Buffer is in the format supported by this class.
+  /// Return true if \p Buffer is in the format supported by this class.
   static bool hasFormat(const MemoryBuffer &Buffer);
 
 protected:
@@ -441,7 +489,7 @@
   template <typename T> ErrorOr<T> readNumber();
   ErrorOr<StringRef> readString();
 
-  /// \brief Read the section tag and check that it's the same as \p Expected.
+  /// Read the section tag and check that it's the same as \p Expected.
   std::error_code readSectionTag(uint32_t Expected);
 
   /// GCOV buffer containing the profile.
diff --git a/linux-x64/clang/include/llvm/ProfileData/SampleProfWriter.h b/linux-x64/clang/include/llvm/ProfileData/SampleProfWriter.h
index 86af103..74dc839 100644
--- a/linux-x64/clang/include/llvm/ProfileData/SampleProfWriter.h
+++ b/linux-x64/clang/include/llvm/ProfileData/SampleProfWriter.h
@@ -23,14 +23,13 @@
 #include <algorithm>
 #include <cstdint>
 #include <memory>
+#include <set>
 #include <system_error>
 
 namespace llvm {
 namespace sampleprof {
 
-enum SampleProfileFormat { SPF_None = 0, SPF_Text, SPF_Binary, SPF_GCC };
-
-/// \brief Sample-based profile writer. Base class.
+/// Sample-based profile writer. Base class.
 class SampleProfileWriter {
 public:
   virtual ~SampleProfileWriter() = default;
@@ -62,21 +61,21 @@
   SampleProfileWriter(std::unique_ptr<raw_ostream> &OS)
       : OutputStream(std::move(OS)) {}
 
-  /// \brief Write a file header for the profile file.
+  /// Write a file header for the profile file.
   virtual std::error_code
   writeHeader(const StringMap<FunctionSamples> &ProfileMap) = 0;
 
-  /// \brief Output stream where to emit the profile to.
+  /// Output stream where to emit the profile to.
   std::unique_ptr<raw_ostream> OutputStream;
 
-  /// \brief Profile summary.
+  /// Profile summary.
   std::unique_ptr<ProfileSummary> Summary;
 
-  /// \brief Compute summary for this profile.
+  /// Compute summary for this profile.
   void computeSummary(const StringMap<FunctionSamples> &ProfileMap);
 };
 
-/// \brief Sample-based profile writer (text format).
+/// Sample-based profile writer (text format).
 class SampleProfileWriterText : public SampleProfileWriter {
 public:
   std::error_code write(const FunctionSamples &S) override;
@@ -101,32 +100,49 @@
                               SampleProfileFormat Format);
 };
 
-/// \brief Sample-based profile writer (binary format).
+/// Sample-based profile writer (binary format).
 class SampleProfileWriterBinary : public SampleProfileWriter {
 public:
   std::error_code write(const FunctionSamples &S) override;
-
-protected:
   SampleProfileWriterBinary(std::unique_ptr<raw_ostream> &OS)
       : SampleProfileWriter(OS) {}
 
-  std::error_code
-  writeHeader(const StringMap<FunctionSamples> &ProfileMap) override;
+protected:
+  virtual std::error_code writeNameTable() = 0;
+  virtual std::error_code writeMagicIdent() = 0;
+  std::error_code writeHeader(const StringMap<FunctionSamples> &ProfileMap) override;
   std::error_code writeSummary();
   std::error_code writeNameIdx(StringRef FName);
   std::error_code writeBody(const FunctionSamples &S);
+  inline void stablizeNameTable(std::set<StringRef> &V);
+
+  MapVector<StringRef, uint32_t> NameTable;
 
 private:
   void addName(StringRef FName);
   void addNames(const FunctionSamples &S);
 
-  MapVector<StringRef, uint32_t> NameTable;
-
   friend ErrorOr<std::unique_ptr<SampleProfileWriter>>
   SampleProfileWriter::create(std::unique_ptr<raw_ostream> &OS,
                               SampleProfileFormat Format);
 };
 
+class SampleProfileWriterRawBinary : public SampleProfileWriterBinary {
+  using SampleProfileWriterBinary::SampleProfileWriterBinary;
+
+protected:
+  virtual std::error_code writeNameTable() override;
+  virtual std::error_code writeMagicIdent() override;
+};
+
+class SampleProfileWriterCompactBinary : public SampleProfileWriterBinary {
+  using SampleProfileWriterBinary::SampleProfileWriterBinary;
+
+protected:
+  virtual std::error_code writeNameTable() override;
+  virtual std::error_code writeMagicIdent() override;
+};
+
 } // end namespace sampleprof
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
index 30c7924..6772e5f 100644
--- a/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/AArch64TargetParser.def
@@ -35,6 +35,11 @@
              (AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
               AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
               AArch64::AEK_RDM | AArch64::AEK_RCPC))
+AARCH64_ARCH("armv8.4-a", ARMV8_4A, "8.4-A", "v8.4a",
+             ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
+             (AArch64::AEK_CRC | AArch64::AEK_CRYPTO | AArch64::AEK_FP |
+              AArch64::AEK_SIMD | AArch64::AEK_RAS | AArch64::AEK_LSE |
+              AArch64::AEK_RDM | AArch64::AEK_RCPC | AArch64::AEK_DOTPROD))
 #undef AARCH64_ARCH
 
 #ifndef AARCH64_ARCH_EXT_NAME
@@ -47,6 +52,10 @@
 AARCH64_ARCH_EXT_NAME("lse",      AArch64::AEK_LSE,      "+lse",   "-lse")
 AARCH64_ARCH_EXT_NAME("rdm",      AArch64::AEK_RDM,      "+rdm",   "-rdm")
 AARCH64_ARCH_EXT_NAME("crypto",   AArch64::AEK_CRYPTO,   "+crypto","-crypto")
+AARCH64_ARCH_EXT_NAME("sm4",      AArch64::AEK_SM4,      "+sm4",   "-sm4")
+AARCH64_ARCH_EXT_NAME("sha3",     AArch64::AEK_SHA3,     "+sha3",  "-sha3")
+AARCH64_ARCH_EXT_NAME("sha2",     AArch64::AEK_SHA2,     "+sha2",  "-sha2")
+AARCH64_ARCH_EXT_NAME("aes",      AArch64::AEK_AES,      "+aes",   "-aes")
 AARCH64_ARCH_EXT_NAME("dotprod",  AArch64::AEK_DOTPROD,  "+dotprod","-dotprod")
 AARCH64_ARCH_EXT_NAME("fp",       AArch64::AEK_FP,       "+fp-armv8",  "-fp-armv8")
 AARCH64_ARCH_EXT_NAME("simd",     AArch64::AEK_SIMD,     "+neon",  "-neon")
@@ -82,6 +91,8 @@
                 (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
                 (AArch64::AEK_CRC))
+AARCH64_CPU_NAME("exynos-m4", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
+                (AArch64::AEK_CRC))
 AARCH64_CPU_NAME("falkor", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false,
                 (AArch64::AEK_CRC | AArch64::AEK_RDM))
 AARCH64_CPU_NAME("saphira", ARMV8_3A, FK_CRYPTO_NEON_FP_ARMV8, false,
diff --git a/linux-x64/clang/include/llvm/Support/AMDGPUKernelDescriptor.h b/linux-x64/clang/include/llvm/Support/AMDGPUKernelDescriptor.h
deleted file mode 100644
index ce2c0c1..0000000
--- a/linux-x64/clang/include/llvm/Support/AMDGPUKernelDescriptor.h
+++ /dev/null
@@ -1,139 +0,0 @@
-//===--- AMDGPUKernelDescriptor.h -------------------------------*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-/// \file
-/// \brief AMDGPU kernel descriptor definitions. For more information, visit
-/// https://llvm.org/docs/AMDGPUUsage.html#kernel-descriptor-for-gfx6-gfx9
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_SUPPORT_AMDGPUKERNELDESCRIPTOR_H
-#define LLVM_SUPPORT_AMDGPUKERNELDESCRIPTOR_H
-
-#include <cstdint>
-
-// Creates enumeration entries used for packing bits into integers. Enumeration
-// entries include bit shift amount, bit width, and bit mask.
-#define AMDGPU_BITS_ENUM_ENTRY(name, shift, width) \
-  name ## _SHIFT = (shift),                        \
-  name ## _WIDTH = (width),                        \
-  name = (((1 << (width)) - 1) << (shift))         \
-
-// Gets bits for specified bit mask from specified source.
-#define AMDGPU_BITS_GET(src, mask) \
-  ((src & mask) >> mask ## _SHIFT) \
-
-// Sets bits for specified bit mask in specified destination.
-#define AMDGPU_BITS_SET(dst, mask, val)     \
-  dst &= (~(1 << mask ## _SHIFT) & ~mask);  \
-  dst |= (((val) << mask ## _SHIFT) & mask) \
-
-namespace llvm {
-namespace AMDGPU {
-namespace HSAKD {
-
-/// \brief Floating point rounding modes.
-enum : uint8_t {
-  AMDGPU_FLOAT_ROUND_MODE_NEAR_EVEN      = 0,
-  AMDGPU_FLOAT_ROUND_MODE_PLUS_INFINITY  = 1,
-  AMDGPU_FLOAT_ROUND_MODE_MINUS_INFINITY = 2,
-  AMDGPU_FLOAT_ROUND_MODE_ZERO           = 3,
-};
-
-/// \brief Floating point denorm modes.
-enum : uint8_t {
-  AMDGPU_FLOAT_DENORM_MODE_FLUSH_SRC_DST = 0,
-  AMDGPU_FLOAT_DENORM_MODE_FLUSH_DST     = 1,
-  AMDGPU_FLOAT_DENORM_MODE_FLUSH_SRC     = 2,
-  AMDGPU_FLOAT_DENORM_MODE_FLUSH_NONE    = 3,
-};
-
-/// \brief System VGPR workitem IDs.
-enum : uint8_t {
-  AMDGPU_SYSTEM_VGPR_WORKITEM_ID_X         = 0,
-  AMDGPU_SYSTEM_VGPR_WORKITEM_ID_X_Y       = 1,
-  AMDGPU_SYSTEM_VGPR_WORKITEM_ID_X_Y_Z     = 2,
-  AMDGPU_SYSTEM_VGPR_WORKITEM_ID_UNDEFINED = 3,
-};
-
-/// \brief Compute program resource register one layout.
-enum ComputePgmRsrc1 {
-  AMDGPU_BITS_ENUM_ENTRY(GRANULATED_WORKITEM_VGPR_COUNT, 0, 6),
-  AMDGPU_BITS_ENUM_ENTRY(GRANULATED_WAVEFRONT_SGPR_COUNT, 6, 4),
-  AMDGPU_BITS_ENUM_ENTRY(PRIORITY, 10, 2),
-  AMDGPU_BITS_ENUM_ENTRY(FLOAT_ROUND_MODE_32, 12, 2),
-  AMDGPU_BITS_ENUM_ENTRY(FLOAT_ROUND_MODE_16_64, 14, 2),
-  AMDGPU_BITS_ENUM_ENTRY(FLOAT_DENORM_MODE_32, 16, 2),
-  AMDGPU_BITS_ENUM_ENTRY(FLOAT_DENORM_MODE_16_64, 18, 2),
-  AMDGPU_BITS_ENUM_ENTRY(PRIV, 20, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_DX10_CLAMP, 21, 1),
-  AMDGPU_BITS_ENUM_ENTRY(DEBUG_MODE, 22, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_IEEE_MODE, 23, 1),
-  AMDGPU_BITS_ENUM_ENTRY(BULKY, 24, 1),
-  AMDGPU_BITS_ENUM_ENTRY(CDBG_USER, 25, 1),
-  AMDGPU_BITS_ENUM_ENTRY(FP16_OVFL, 26, 1),
-  AMDGPU_BITS_ENUM_ENTRY(RESERVED0, 27, 5),
-};
-
-/// \brief Compute program resource register two layout.
-enum ComputePgmRsrc2 {
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_SGPR_PRIVATE_SEGMENT_WAVE_OFFSET, 0, 1),
-  AMDGPU_BITS_ENUM_ENTRY(USER_SGPR_COUNT, 1, 5),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_TRAP_HANDLER, 6, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_SGPR_WORKGROUP_ID_X, 7, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_SGPR_WORKGROUP_ID_Y, 8, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_SGPR_WORKGROUP_ID_Z, 9, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_SGPR_WORKGROUP_INFO, 10, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_VGPR_WORKITEM_ID, 11, 2),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_ADDRESS_WATCH, 13, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_MEMORY, 14, 1),
-  AMDGPU_BITS_ENUM_ENTRY(GRANULATED_LDS_SIZE, 15, 9),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_IEEE_754_FP_INVALID_OPERATION, 24, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_FP_DENORMAL_SOURCE, 25, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_IEEE_754_FP_DIVISION_BY_ZERO, 26, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_IEEE_754_FP_OVERFLOW, 27, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_IEEE_754_FP_UNDERFLOW, 28, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_IEEE_754_FP_INEXACT, 29, 1),
-  AMDGPU_BITS_ENUM_ENTRY(ENABLE_EXCEPTION_INT_DIVIDE_BY_ZERO, 30, 1),
-  AMDGPU_BITS_ENUM_ENTRY(RESERVED1, 31, 1),
-};
-
-/// \brief Kernel descriptor layout. This layout should be kept backwards
-/// compatible as it is consumed by the command processor.
-struct KernelDescriptor final {
-  uint32_t GroupSegmentFixedSize;
-  uint32_t PrivateSegmentFixedSize;
-  uint32_t MaxFlatWorkGroupSize;
-  uint64_t IsDynamicCallStack : 1;
-  uint64_t IsXNACKEnabled : 1;
-  uint64_t Reserved0 : 30;
-  int64_t KernelCodeEntryByteOffset;
-  uint64_t Reserved1[3];
-  uint32_t ComputePgmRsrc1;
-  uint32_t ComputePgmRsrc2;
-  uint64_t EnableSGPRPrivateSegmentBuffer : 1;
-  uint64_t EnableSGPRDispatchPtr : 1;
-  uint64_t EnableSGPRQueuePtr : 1;
-  uint64_t EnableSGPRKernargSegmentPtr : 1;
-  uint64_t EnableSGPRDispatchID : 1;
-  uint64_t EnableSGPRFlatScratchInit : 1;
-  uint64_t EnableSGPRPrivateSegmentSize : 1;
-  uint64_t EnableSGPRGridWorkgroupCountX : 1;
-  uint64_t EnableSGPRGridWorkgroupCountY : 1;
-  uint64_t EnableSGPRGridWorkgroupCountZ : 1;
-  uint64_t Reserved2 : 54;
-
-  KernelDescriptor() = default;
-};
-
-} // end namespace HSAKD
-} // end namespace AMDGPU
-} // end namespace llvm
-
-#endif // LLVM_SUPPORT_AMDGPUKERNELDESCRIPTOR_H
diff --git a/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h b/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
index 00039a7..667fb3f 100644
--- a/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
+++ b/linux-x64/clang/include/llvm/Support/AMDGPUMetadata.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 /// \file
-/// \brief AMDGPU metadata definitions and in-memory representations.
+/// AMDGPU metadata definitions and in-memory representations.
 ///
 //
 //===----------------------------------------------------------------------===//
@@ -29,17 +29,17 @@
 //===----------------------------------------------------------------------===//
 namespace HSAMD {
 
-/// \brief HSA metadata major version.
+/// HSA metadata major version.
 constexpr uint32_t VersionMajor = 1;
-/// \brief HSA metadata minor version.
+/// HSA metadata minor version.
 constexpr uint32_t VersionMinor = 0;
 
-/// \brief HSA metadata beginning assembler directive.
+/// HSA metadata beginning assembler directive.
 constexpr char AssemblerDirectiveBegin[] = ".amd_amdgpu_hsa_metadata";
-/// \brief HSA metadata ending assembler directive.
+/// HSA metadata ending assembler directive.
 constexpr char AssemblerDirectiveEnd[] = ".end_amd_amdgpu_hsa_metadata";
 
-/// \brief Access qualifiers.
+/// Access qualifiers.
 enum class AccessQualifier : uint8_t {
   Default   = 0,
   ReadOnly  = 1,
@@ -48,7 +48,7 @@
   Unknown   = 0xff
 };
 
-/// \brief Address space qualifiers.
+/// Address space qualifiers.
 enum class AddressSpaceQualifier : uint8_t {
   Private  = 0,
   Global   = 1,
@@ -59,7 +59,7 @@
   Unknown  = 0xff
 };
 
-/// \brief Value kinds.
+/// Value kinds.
 enum class ValueKind : uint8_t {
   ByValue                = 0,
   GlobalBuffer           = 1,
@@ -78,7 +78,7 @@
   Unknown                = 0xff
 };
 
-/// \brief Value types.
+/// Value types.
 enum class ValueType : uint8_t {
   Struct  = 0,
   I8      = 1,
@@ -106,29 +106,29 @@
 namespace Attrs {
 
 namespace Key {
-/// \brief Key for Kernel::Attr::Metadata::mReqdWorkGroupSize.
+/// Key for Kernel::Attr::Metadata::mReqdWorkGroupSize.
 constexpr char ReqdWorkGroupSize[] = "ReqdWorkGroupSize";
-/// \brief Key for Kernel::Attr::Metadata::mWorkGroupSizeHint.
+/// Key for Kernel::Attr::Metadata::mWorkGroupSizeHint.
 constexpr char WorkGroupSizeHint[] = "WorkGroupSizeHint";
-/// \brief Key for Kernel::Attr::Metadata::mVecTypeHint.
+/// Key for Kernel::Attr::Metadata::mVecTypeHint.
 constexpr char VecTypeHint[] = "VecTypeHint";
-/// \brief Key for Kernel::Attr::Metadata::mRuntimeHandle.
+/// Key for Kernel::Attr::Metadata::mRuntimeHandle.
 constexpr char RuntimeHandle[] = "RuntimeHandle";
 } // end namespace Key
 
-/// \brief In-memory representation of kernel attributes metadata.
+/// In-memory representation of kernel attributes metadata.
 struct Metadata final {
-  /// \brief 'reqd_work_group_size' attribute. Optional.
+  /// 'reqd_work_group_size' attribute. Optional.
   std::vector<uint32_t> mReqdWorkGroupSize = std::vector<uint32_t>();
-  /// \brief 'work_group_size_hint' attribute. Optional.
+  /// 'work_group_size_hint' attribute. Optional.
   std::vector<uint32_t> mWorkGroupSizeHint = std::vector<uint32_t>();
-  /// \brief 'vec_type_hint' attribute. Optional.
+  /// 'vec_type_hint' attribute. Optional.
   std::string mVecTypeHint = std::string();
-  /// \brief External symbol created by runtime to store the kernel address
+  /// External symbol created by runtime to store the kernel address
   /// for enqueued blocks.
   std::string mRuntimeHandle = std::string();
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 
   /// \returns True if kernel attributes metadata is empty, false otherwise.
@@ -151,68 +151,68 @@
 namespace Arg {
 
 namespace Key {
-/// \brief Key for Kernel::Arg::Metadata::mName.
+/// Key for Kernel::Arg::Metadata::mName.
 constexpr char Name[] = "Name";
-/// \brief Key for Kernel::Arg::Metadata::mTypeName.
+/// Key for Kernel::Arg::Metadata::mTypeName.
 constexpr char TypeName[] = "TypeName";
-/// \brief Key for Kernel::Arg::Metadata::mSize.
+/// Key for Kernel::Arg::Metadata::mSize.
 constexpr char Size[] = "Size";
-/// \brief Key for Kernel::Arg::Metadata::mAlign.
+/// Key for Kernel::Arg::Metadata::mAlign.
 constexpr char Align[] = "Align";
-/// \brief Key for Kernel::Arg::Metadata::mValueKind.
+/// Key for Kernel::Arg::Metadata::mValueKind.
 constexpr char ValueKind[] = "ValueKind";
-/// \brief Key for Kernel::Arg::Metadata::mValueType.
+/// Key for Kernel::Arg::Metadata::mValueType.
 constexpr char ValueType[] = "ValueType";
-/// \brief Key for Kernel::Arg::Metadata::mPointeeAlign.
+/// Key for Kernel::Arg::Metadata::mPointeeAlign.
 constexpr char PointeeAlign[] = "PointeeAlign";
-/// \brief Key for Kernel::Arg::Metadata::mAddrSpaceQual.
+/// Key for Kernel::Arg::Metadata::mAddrSpaceQual.
 constexpr char AddrSpaceQual[] = "AddrSpaceQual";
-/// \brief Key for Kernel::Arg::Metadata::mAccQual.
+/// Key for Kernel::Arg::Metadata::mAccQual.
 constexpr char AccQual[] = "AccQual";
-/// \brief Key for Kernel::Arg::Metadata::mActualAccQual.
+/// Key for Kernel::Arg::Metadata::mActualAccQual.
 constexpr char ActualAccQual[] = "ActualAccQual";
-/// \brief Key for Kernel::Arg::Metadata::mIsConst.
+/// Key for Kernel::Arg::Metadata::mIsConst.
 constexpr char IsConst[] = "IsConst";
-/// \brief Key for Kernel::Arg::Metadata::mIsRestrict.
+/// Key for Kernel::Arg::Metadata::mIsRestrict.
 constexpr char IsRestrict[] = "IsRestrict";
-/// \brief Key for Kernel::Arg::Metadata::mIsVolatile.
+/// Key for Kernel::Arg::Metadata::mIsVolatile.
 constexpr char IsVolatile[] = "IsVolatile";
-/// \brief Key for Kernel::Arg::Metadata::mIsPipe.
+/// Key for Kernel::Arg::Metadata::mIsPipe.
 constexpr char IsPipe[] = "IsPipe";
 } // end namespace Key
 
-/// \brief In-memory representation of kernel argument metadata.
+/// In-memory representation of kernel argument metadata.
 struct Metadata final {
-  /// \brief Name. Optional.
+  /// Name. Optional.
   std::string mName = std::string();
-  /// \brief Type name. Optional.
+  /// Type name. Optional.
   std::string mTypeName = std::string();
-  /// \brief Size in bytes. Required.
+  /// Size in bytes. Required.
   uint32_t mSize = 0;
-  /// \brief Alignment in bytes. Required.
+  /// Alignment in bytes. Required.
   uint32_t mAlign = 0;
-  /// \brief Value kind. Required.
+  /// Value kind. Required.
   ValueKind mValueKind = ValueKind::Unknown;
-  /// \brief Value type. Required.
+  /// Value type. Required.
   ValueType mValueType = ValueType::Unknown;
-  /// \brief Pointee alignment in bytes. Optional.
+  /// Pointee alignment in bytes. Optional.
   uint32_t mPointeeAlign = 0;
-  /// \brief Address space qualifier. Optional.
+  /// Address space qualifier. Optional.
   AddressSpaceQualifier mAddrSpaceQual = AddressSpaceQualifier::Unknown;
-  /// \brief Access qualifier. Optional.
+  /// Access qualifier. Optional.
   AccessQualifier mAccQual = AccessQualifier::Unknown;
-  /// \brief Actual access qualifier. Optional.
+  /// Actual access qualifier. Optional.
   AccessQualifier mActualAccQual = AccessQualifier::Unknown;
-  /// \brief True if 'const' qualifier is specified. Optional.
+  /// True if 'const' qualifier is specified. Optional.
   bool mIsConst = false;
-  /// \brief True if 'restrict' qualifier is specified. Optional.
+  /// True if 'restrict' qualifier is specified. Optional.
   bool mIsRestrict = false;
-  /// \brief True if 'volatile' qualifier is specified. Optional.
+  /// True if 'volatile' qualifier is specified. Optional.
   bool mIsVolatile = false;
-  /// \brief True if 'pipe' qualifier is specified. Optional.
+  /// True if 'pipe' qualifier is specified. Optional.
   bool mIsPipe = false;
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 };
 
@@ -224,67 +224,67 @@
 namespace CodeProps {
 
 namespace Key {
-/// \brief Key for Kernel::CodeProps::Metadata::mKernargSegmentSize.
+/// Key for Kernel::CodeProps::Metadata::mKernargSegmentSize.
 constexpr char KernargSegmentSize[] = "KernargSegmentSize";
-/// \brief Key for Kernel::CodeProps::Metadata::mGroupSegmentFixedSize.
+/// Key for Kernel::CodeProps::Metadata::mGroupSegmentFixedSize.
 constexpr char GroupSegmentFixedSize[] = "GroupSegmentFixedSize";
-/// \brief Key for Kernel::CodeProps::Metadata::mPrivateSegmentFixedSize.
+/// Key for Kernel::CodeProps::Metadata::mPrivateSegmentFixedSize.
 constexpr char PrivateSegmentFixedSize[] = "PrivateSegmentFixedSize";
-/// \brief Key for Kernel::CodeProps::Metadata::mKernargSegmentAlign.
+/// Key for Kernel::CodeProps::Metadata::mKernargSegmentAlign.
 constexpr char KernargSegmentAlign[] = "KernargSegmentAlign";
-/// \brief Key for Kernel::CodeProps::Metadata::mWavefrontSize.
+/// Key for Kernel::CodeProps::Metadata::mWavefrontSize.
 constexpr char WavefrontSize[] = "WavefrontSize";
-/// \brief Key for Kernel::CodeProps::Metadata::mNumSGPRs.
+/// Key for Kernel::CodeProps::Metadata::mNumSGPRs.
 constexpr char NumSGPRs[] = "NumSGPRs";
-/// \brief Key for Kernel::CodeProps::Metadata::mNumVGPRs.
+/// Key for Kernel::CodeProps::Metadata::mNumVGPRs.
 constexpr char NumVGPRs[] = "NumVGPRs";
-/// \brief Key for Kernel::CodeProps::Metadata::mMaxFlatWorkGroupSize.
+/// Key for Kernel::CodeProps::Metadata::mMaxFlatWorkGroupSize.
 constexpr char MaxFlatWorkGroupSize[] = "MaxFlatWorkGroupSize";
-/// \brief Key for Kernel::CodeProps::Metadata::mIsDynamicCallStack.
+/// Key for Kernel::CodeProps::Metadata::mIsDynamicCallStack.
 constexpr char IsDynamicCallStack[] = "IsDynamicCallStack";
-/// \brief Key for Kernel::CodeProps::Metadata::mIsXNACKEnabled.
+/// Key for Kernel::CodeProps::Metadata::mIsXNACKEnabled.
 constexpr char IsXNACKEnabled[] = "IsXNACKEnabled";
-/// \brief Key for Kernel::CodeProps::Metadata::mNumSpilledSGPRs.
+/// Key for Kernel::CodeProps::Metadata::mNumSpilledSGPRs.
 constexpr char NumSpilledSGPRs[] = "NumSpilledSGPRs";
-/// \brief Key for Kernel::CodeProps::Metadata::mNumSpilledVGPRs.
+/// Key for Kernel::CodeProps::Metadata::mNumSpilledVGPRs.
 constexpr char NumSpilledVGPRs[] = "NumSpilledVGPRs";
 } // end namespace Key
 
-/// \brief In-memory representation of kernel code properties metadata.
+/// In-memory representation of kernel code properties metadata.
 struct Metadata final {
-  /// \brief Size in bytes of the kernarg segment memory. Kernarg segment memory
+  /// Size in bytes of the kernarg segment memory. Kernarg segment memory
   /// holds the values of the arguments to the kernel. Required.
   uint64_t mKernargSegmentSize = 0;
-  /// \brief Size in bytes of the group segment memory required by a workgroup.
+  /// Size in bytes of the group segment memory required by a workgroup.
   /// This value does not include any dynamically allocated group segment memory
   /// that may be added when the kernel is dispatched. Required.
   uint32_t mGroupSegmentFixedSize = 0;
-  /// \brief Size in bytes of the private segment memory required by a workitem.
+  /// Size in bytes of the private segment memory required by a workitem.
   /// Private segment memory includes arg, spill and private segments. Required.
   uint32_t mPrivateSegmentFixedSize = 0;
-  /// \brief Maximum byte alignment of variables used by the kernel in the
+  /// Maximum byte alignment of variables used by the kernel in the
   /// kernarg memory segment. Required.
   uint32_t mKernargSegmentAlign = 0;
-  /// \brief Wavefront size. Required.
+  /// Wavefront size. Required.
   uint32_t mWavefrontSize = 0;
-  /// \brief Total number of SGPRs used by a wavefront. Optional.
+  /// Total number of SGPRs used by a wavefront. Optional.
   uint16_t mNumSGPRs = 0;
-  /// \brief Total number of VGPRs used by a workitem. Optional.
+  /// Total number of VGPRs used by a workitem. Optional.
   uint16_t mNumVGPRs = 0;
-  /// \brief Maximum flat work-group size supported by the kernel. Optional.
+  /// Maximum flat work-group size supported by the kernel. Optional.
   uint32_t mMaxFlatWorkGroupSize = 0;
-  /// \brief True if the generated machine code is using a dynamically sized
+  /// True if the generated machine code is using a dynamically sized
   /// call stack. Optional.
   bool mIsDynamicCallStack = false;
-  /// \brief True if the generated machine code is capable of supporting XNACK.
+  /// True if the generated machine code is capable of supporting XNACK.
   /// Optional.
   bool mIsXNACKEnabled = false;
-  /// \brief Number of SGPRs spilled by a wavefront. Optional.
+  /// Number of SGPRs spilled by a wavefront. Optional.
   uint16_t mNumSpilledSGPRs = 0;
-  /// \brief Number of VGPRs spilled by a workitem. Optional.
+  /// Number of VGPRs spilled by a workitem. Optional.
   uint16_t mNumSpilledVGPRs = 0;
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 
   /// \returns True if kernel code properties metadata is empty, false
@@ -308,40 +308,40 @@
 namespace DebugProps {
 
 namespace Key {
-/// \brief Key for Kernel::DebugProps::Metadata::mDebuggerABIVersion.
+/// Key for Kernel::DebugProps::Metadata::mDebuggerABIVersion.
 constexpr char DebuggerABIVersion[] = "DebuggerABIVersion";
-/// \brief Key for Kernel::DebugProps::Metadata::mReservedNumVGPRs.
+/// Key for Kernel::DebugProps::Metadata::mReservedNumVGPRs.
 constexpr char ReservedNumVGPRs[] = "ReservedNumVGPRs";
-/// \brief Key for Kernel::DebugProps::Metadata::mReservedFirstVGPR.
+/// Key for Kernel::DebugProps::Metadata::mReservedFirstVGPR.
 constexpr char ReservedFirstVGPR[] = "ReservedFirstVGPR";
-/// \brief Key for Kernel::DebugProps::Metadata::mPrivateSegmentBufferSGPR.
+/// Key for Kernel::DebugProps::Metadata::mPrivateSegmentBufferSGPR.
 constexpr char PrivateSegmentBufferSGPR[] = "PrivateSegmentBufferSGPR";
-/// \brief Key for
+/// Key for
 ///     Kernel::DebugProps::Metadata::mWavefrontPrivateSegmentOffsetSGPR.
 constexpr char WavefrontPrivateSegmentOffsetSGPR[] =
     "WavefrontPrivateSegmentOffsetSGPR";
 } // end namespace Key
 
-/// \brief In-memory representation of kernel debug properties metadata.
+/// In-memory representation of kernel debug properties metadata.
 struct Metadata final {
-  /// \brief Debugger ABI version. Optional.
+  /// Debugger ABI version. Optional.
   std::vector<uint32_t> mDebuggerABIVersion = std::vector<uint32_t>();
-  /// \brief Consecutive number of VGPRs reserved for debugger use. Must be 0 if
+  /// Consecutive number of VGPRs reserved for debugger use. Must be 0 if
   /// mDebuggerABIVersion is not set. Optional.
   uint16_t mReservedNumVGPRs = 0;
-  /// \brief First fixed VGPR reserved. Must be uint16_t(-1) if
+  /// First fixed VGPR reserved. Must be uint16_t(-1) if
   /// mDebuggerABIVersion is not set or mReservedFirstVGPR is 0. Optional.
   uint16_t mReservedFirstVGPR = uint16_t(-1);
-  /// \brief Fixed SGPR of the first of 4 SGPRs used to hold the scratch V# used
+  /// Fixed SGPR of the first of 4 SGPRs used to hold the scratch V# used
   /// for the entire kernel execution. Must be uint16_t(-1) if
   /// mDebuggerABIVersion is not set or SGPR not used or not known. Optional.
   uint16_t mPrivateSegmentBufferSGPR = uint16_t(-1);
-  /// \brief Fixed SGPR used to hold the wave scratch offset for the entire
+  /// Fixed SGPR used to hold the wave scratch offset for the entire
   /// kernel execution. Must be uint16_t(-1) if mDebuggerABIVersion is not set
   /// or SGPR is not used or not known. Optional.
   uint16_t mWavefrontPrivateSegmentOffsetSGPR = uint16_t(-1);
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 
   /// \returns True if kernel debug properties metadata is empty, false
@@ -360,75 +360,75 @@
 } // end namespace DebugProps
 
 namespace Key {
-/// \brief Key for Kernel::Metadata::mName.
+/// Key for Kernel::Metadata::mName.
 constexpr char Name[] = "Name";
-/// \brief Key for Kernel::Metadata::mSymbolName.
+/// Key for Kernel::Metadata::mSymbolName.
 constexpr char SymbolName[] = "SymbolName";
-/// \brief Key for Kernel::Metadata::mLanguage.
+/// Key for Kernel::Metadata::mLanguage.
 constexpr char Language[] = "Language";
-/// \brief Key for Kernel::Metadata::mLanguageVersion.
+/// Key for Kernel::Metadata::mLanguageVersion.
 constexpr char LanguageVersion[] = "LanguageVersion";
-/// \brief Key for Kernel::Metadata::mAttrs.
+/// Key for Kernel::Metadata::mAttrs.
 constexpr char Attrs[] = "Attrs";
-/// \brief Key for Kernel::Metadata::mArgs.
+/// Key for Kernel::Metadata::mArgs.
 constexpr char Args[] = "Args";
-/// \brief Key for Kernel::Metadata::mCodeProps.
+/// Key for Kernel::Metadata::mCodeProps.
 constexpr char CodeProps[] = "CodeProps";
-/// \brief Key for Kernel::Metadata::mDebugProps.
+/// Key for Kernel::Metadata::mDebugProps.
 constexpr char DebugProps[] = "DebugProps";
 } // end namespace Key
 
-/// \brief In-memory representation of kernel metadata.
+/// In-memory representation of kernel metadata.
 struct Metadata final {
-  /// \brief Kernel source name. Required.
+  /// Kernel source name. Required.
   std::string mName = std::string();
-  /// \brief Kernel descriptor name. Required.
+  /// Kernel descriptor name. Required.
   std::string mSymbolName = std::string();
-  /// \brief Language. Optional.
+  /// Language. Optional.
   std::string mLanguage = std::string();
-  /// \brief Language version. Optional.
+  /// Language version. Optional.
   std::vector<uint32_t> mLanguageVersion = std::vector<uint32_t>();
-  /// \brief Attributes metadata. Optional.
+  /// Attributes metadata. Optional.
   Attrs::Metadata mAttrs = Attrs::Metadata();
-  /// \brief Arguments metadata. Optional.
+  /// Arguments metadata. Optional.
   std::vector<Arg::Metadata> mArgs = std::vector<Arg::Metadata>();
-  /// \brief Code properties metadata. Optional.
+  /// Code properties metadata. Optional.
   CodeProps::Metadata mCodeProps = CodeProps::Metadata();
-  /// \brief Debug properties metadata. Optional.
+  /// Debug properties metadata. Optional.
   DebugProps::Metadata mDebugProps = DebugProps::Metadata();
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 };
 
 } // end namespace Kernel
 
 namespace Key {
-/// \brief Key for HSA::Metadata::mVersion.
+/// Key for HSA::Metadata::mVersion.
 constexpr char Version[] = "Version";
-/// \brief Key for HSA::Metadata::mPrintf.
+/// Key for HSA::Metadata::mPrintf.
 constexpr char Printf[] = "Printf";
-/// \brief Key for HSA::Metadata::mKernels.
+/// Key for HSA::Metadata::mKernels.
 constexpr char Kernels[] = "Kernels";
 } // end namespace Key
 
-/// \brief In-memory representation of HSA metadata.
+/// In-memory representation of HSA metadata.
 struct Metadata final {
-  /// \brief HSA metadata version. Required.
+  /// HSA metadata version. Required.
   std::vector<uint32_t> mVersion = std::vector<uint32_t>();
-  /// \brief Printf metadata. Optional.
+  /// Printf metadata. Optional.
   std::vector<std::string> mPrintf = std::vector<std::string>();
-  /// \brief Kernels metadata. Required.
+  /// Kernels metadata. Required.
   std::vector<Kernel::Metadata> mKernels = std::vector<Kernel::Metadata>();
 
-  /// \brief Default constructor.
+  /// Default constructor.
   Metadata() = default;
 };
 
-/// \brief Converts \p String to \p HSAMetadata.
+/// Converts \p String to \p HSAMetadata.
 std::error_code fromString(std::string String, Metadata &HSAMetadata);
 
-/// \brief Converts \p HSAMetadata to \p String.
+/// Converts \p HSAMetadata to \p String.
 std::error_code toString(Metadata HSAMetadata, std::string &String);
 
 } // end namespace HSAMD
@@ -438,10 +438,10 @@
 //===----------------------------------------------------------------------===//
 namespace PALMD {
 
-/// \brief PAL metadata assembler directive.
+/// PAL metadata assembler directive.
 constexpr char AssemblerDirective[] = ".amd_amdgpu_pal_metadata";
 
-/// \brief PAL metadata keys.
+/// PAL metadata keys.
 enum Key : uint32_t {
   LS_NUM_USED_VGPRS = 0x10000021,
   HS_NUM_USED_VGPRS = 0x10000022,
@@ -468,10 +468,10 @@
   CS_SCRATCH_SIZE = 0x1000004a
 };
 
-/// \brief PAL metadata represented as a vector.
+/// PAL metadata represented as a vector.
 typedef std::vector<uint32_t> Metadata;
 
-/// \brief Converts \p PALMetadata to \p String.
+/// Converts \p PALMetadata to \p String.
 std::error_code toString(const Metadata &PALMetadata, std::string &String);
 
 } // end namespace PALMD
diff --git a/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h b/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h
new file mode 100644
index 0000000..751699e
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/AMDHSAKernelDescriptor.h
@@ -0,0 +1,185 @@
+//===--- AMDHSAKernelDescriptor.h -----------------------------*- C++ -*---===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// AMDHSA kernel descriptor definitions. For more information, visit
+/// https://llvm.org/docs/AMDGPUUsage.html#kernel-descriptor
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H
+#define LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H
+
+#include <cstddef>
+#include <cstdint>
+
+// Gets offset of specified member in specified type.
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)
+#endif // offsetof
+
+// Creates enumeration entries used for packing bits into integers. Enumeration
+// entries include bit shift amount, bit width, and bit mask.
+#ifndef AMDHSA_BITS_ENUM_ENTRY
+#define AMDHSA_BITS_ENUM_ENTRY(NAME, SHIFT, WIDTH) \
+  NAME ## _SHIFT = (SHIFT),                        \
+  NAME ## _WIDTH = (WIDTH),                        \
+  NAME = (((1 << (WIDTH)) - 1) << (SHIFT))
+#endif // AMDHSA_BITS_ENUM_ENTRY
+
+// Gets bits for specified bit mask from specified source.
+#ifndef AMDHSA_BITS_GET
+#define AMDHSA_BITS_GET(SRC, MSK) ((SRC & MSK) >> MSK ## _SHIFT)
+#endif // AMDHSA_BITS_GET
+
+// Sets bits for specified bit mask in specified destination.
+#ifndef AMDHSA_BITS_SET
+#define AMDHSA_BITS_SET(DST, MSK, VAL)  \
+  DST &= ~MSK;                          \
+  DST |= ((VAL << MSK ## _SHIFT) & MSK)
+#endif // AMDHSA_BITS_SET
+
+namespace llvm {
+namespace amdhsa {
+
+// Floating point rounding modes. Must match hardware definition.
+enum : uint8_t {
+  FLOAT_ROUND_MODE_NEAR_EVEN = 0,
+  FLOAT_ROUND_MODE_PLUS_INFINITY = 1,
+  FLOAT_ROUND_MODE_MINUS_INFINITY = 2,
+  FLOAT_ROUND_MODE_ZERO = 3,
+};
+
+// Floating point denorm modes. Must match hardware definition.
+enum : uint8_t {
+  FLOAT_DENORM_MODE_FLUSH_SRC_DST = 0,
+  FLOAT_DENORM_MODE_FLUSH_DST = 1,
+  FLOAT_DENORM_MODE_FLUSH_SRC = 2,
+  FLOAT_DENORM_MODE_FLUSH_NONE = 3,
+};
+
+// System VGPR workitem IDs. Must match hardware definition.
+enum : uint8_t {
+  SYSTEM_VGPR_WORKITEM_ID_X = 0,
+  SYSTEM_VGPR_WORKITEM_ID_X_Y = 1,
+  SYSTEM_VGPR_WORKITEM_ID_X_Y_Z = 2,
+  SYSTEM_VGPR_WORKITEM_ID_UNDEFINED = 3,
+};
+
+// Compute program resource register 1. Must match hardware definition.
+#define COMPUTE_PGM_RSRC1(NAME, SHIFT, WIDTH) \
+  AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC1_ ## NAME, SHIFT, WIDTH)
+enum : int32_t {
+  COMPUTE_PGM_RSRC1(GRANULATED_WORKITEM_VGPR_COUNT, 0, 6),
+  COMPUTE_PGM_RSRC1(GRANULATED_WAVEFRONT_SGPR_COUNT, 6, 4),
+  COMPUTE_PGM_RSRC1(PRIORITY, 10, 2),
+  COMPUTE_PGM_RSRC1(FLOAT_ROUND_MODE_32, 12, 2),
+  COMPUTE_PGM_RSRC1(FLOAT_ROUND_MODE_16_64, 14, 2),
+  COMPUTE_PGM_RSRC1(FLOAT_DENORM_MODE_32, 16, 2),
+  COMPUTE_PGM_RSRC1(FLOAT_DENORM_MODE_16_64, 18, 2),
+  COMPUTE_PGM_RSRC1(PRIV, 20, 1),
+  COMPUTE_PGM_RSRC1(ENABLE_DX10_CLAMP, 21, 1),
+  COMPUTE_PGM_RSRC1(DEBUG_MODE, 22, 1),
+  COMPUTE_PGM_RSRC1(ENABLE_IEEE_MODE, 23, 1),
+  COMPUTE_PGM_RSRC1(BULKY, 24, 1),
+  COMPUTE_PGM_RSRC1(CDBG_USER, 25, 1),
+  COMPUTE_PGM_RSRC1(FP16_OVFL, 26, 1), // GFX9+
+  COMPUTE_PGM_RSRC1(RESERVED0, 27, 5),
+};
+#undef COMPUTE_PGM_RSRC1
+
+// Compute program resource register 2. Must match hardware definition.
+#define COMPUTE_PGM_RSRC2(NAME, SHIFT, WIDTH) \
+  AMDHSA_BITS_ENUM_ENTRY(COMPUTE_PGM_RSRC2_ ## NAME, SHIFT, WIDTH)
+enum : int32_t {
+  COMPUTE_PGM_RSRC2(ENABLE_SGPR_PRIVATE_SEGMENT_WAVEFRONT_OFFSET, 0, 1),
+  COMPUTE_PGM_RSRC2(USER_SGPR_COUNT, 1, 5),
+  COMPUTE_PGM_RSRC2(ENABLE_TRAP_HANDLER, 6, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_SGPR_WORKGROUP_ID_X, 7, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_SGPR_WORKGROUP_ID_Y, 8, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_SGPR_WORKGROUP_ID_Z, 9, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_SGPR_WORKGROUP_INFO, 10, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_VGPR_WORKITEM_ID, 11, 2),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_ADDRESS_WATCH, 13, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_MEMORY, 14, 1),
+  COMPUTE_PGM_RSRC2(GRANULATED_LDS_SIZE, 15, 9),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_INVALID_OPERATION, 24, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_FP_DENORMAL_SOURCE, 25, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_DIVISION_BY_ZERO, 26, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_OVERFLOW, 27, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_UNDERFLOW, 28, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_IEEE_754_FP_INEXACT, 29, 1),
+  COMPUTE_PGM_RSRC2(ENABLE_EXCEPTION_INT_DIVIDE_BY_ZERO, 30, 1),
+  COMPUTE_PGM_RSRC2(RESERVED0, 31, 1),
+};
+#undef COMPUTE_PGM_RSRC2
+
+// Kernel code properties. Must be kept backwards compatible.
+#define KERNEL_CODE_PROPERTY(NAME, SHIFT, WIDTH) \
+  AMDHSA_BITS_ENUM_ENTRY(KERNEL_CODE_PROPERTY_ ## NAME, SHIFT, WIDTH)
+enum : int32_t {
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_PRIVATE_SEGMENT_BUFFER, 0, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_DISPATCH_PTR, 1, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_QUEUE_PTR, 2, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_KERNARG_SEGMENT_PTR, 3, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_DISPATCH_ID, 4, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_FLAT_SCRATCH_INIT, 5, 1),
+  KERNEL_CODE_PROPERTY(ENABLE_SGPR_PRIVATE_SEGMENT_SIZE, 6, 1),
+  KERNEL_CODE_PROPERTY(RESERVED0, 7, 9),
+};
+#undef KERNEL_CODE_PROPERTY
+
+// Kernel descriptor. Must be kept backwards compatible.
+struct kernel_descriptor_t {
+  uint32_t group_segment_fixed_size;
+  uint32_t private_segment_fixed_size;
+  uint8_t reserved0[8];
+  int64_t kernel_code_entry_byte_offset;
+  uint8_t reserved1[24];
+  uint32_t compute_pgm_rsrc1;
+  uint32_t compute_pgm_rsrc2;
+  uint16_t kernel_code_properties;
+  uint8_t reserved2[6];
+};
+
+static_assert(
+    sizeof(kernel_descriptor_t) == 64,
+    "invalid size for kernel_descriptor_t");
+static_assert(
+    offsetof(kernel_descriptor_t, group_segment_fixed_size) == 0,
+    "invalid offset for group_segment_fixed_size");
+static_assert(
+    offsetof(kernel_descriptor_t, private_segment_fixed_size) == 4,
+    "invalid offset for private_segment_fixed_size");
+static_assert(
+    offsetof(kernel_descriptor_t, reserved0) == 8,
+    "invalid offset for reserved0");
+static_assert(
+    offsetof(kernel_descriptor_t, kernel_code_entry_byte_offset) == 16,
+    "invalid offset for kernel_code_entry_byte_offset");
+static_assert(
+    offsetof(kernel_descriptor_t, reserved1) == 24,
+    "invalid offset for reserved1");
+static_assert(
+    offsetof(kernel_descriptor_t, compute_pgm_rsrc1) == 48,
+    "invalid offset for compute_pgm_rsrc1");
+static_assert(
+    offsetof(kernel_descriptor_t, compute_pgm_rsrc2) == 52,
+    "invalid offset for compute_pgm_rsrc2");
+static_assert(
+    offsetof(kernel_descriptor_t, kernel_code_properties) == 56,
+    "invalid offset for kernel_code_properties");
+static_assert(
+    offsetof(kernel_descriptor_t, reserved2) == 58,
+    "invalid offset for reserved2");
+
+} // end namespace amdhsa
+} // end namespace llvm
+
+#endif // LLVM_SUPPORT_AMDHSAKERNELDESCRIPTOR_H
diff --git a/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h b/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
index 6c83e44..b8a0376 100644
--- a/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
+++ b/linux-x64/clang/include/llvm/Support/ARMBuildAttributes.h
@@ -213,6 +213,8 @@
   // Tag_ABI_VFP_args, (=28), uleb128
   BaseAAPCS = 0,
   HardFPAAPCS = 1,
+  ToolChainFPPCS = 2,
+  CompatibleFPAAPCS = 3,
 
   // Tag_FP_HP_extension, (=36), uleb128
   AllowHPFP = 1, // Allow use of Half Precision FP
diff --git a/linux-x64/clang/include/llvm/Support/ARMTargetParser.def b/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
index 6c8eff1..78f5410 100644
--- a/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/ARMTargetParser.def
@@ -101,6 +101,11 @@
          ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
          (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
           ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS))
+ARM_ARCH("armv8.4-a", ARMV8_4A, "8.4-A", "v8.4a",
+         ARMBuildAttrs::CPUArch::v8_A, FK_CRYPTO_NEON_FP_ARMV8,
+         (ARM::AEK_SEC | ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM |
+          ARM::AEK_HWDIVTHUMB | ARM::AEK_DSP | ARM::AEK_CRC | ARM::AEK_RAS |
+          ARM::AEK_DOTPROD))
 ARM_ARCH("armv8-r", ARMV8R, "8-R", "v8r", ARMBuildAttrs::CPUArch::v8_R,
           FK_NEON_FP_ARMV8,
           (ARM::AEK_MP | ARM::AEK_VIRT | ARM::AEK_HWDIVARM | ARM::AEK_HWDIVTHUMB |
@@ -130,6 +135,8 @@
 ARM_ARCH_EXT_NAME("none",     ARM::AEK_NONE,     nullptr,  nullptr)
 ARM_ARCH_EXT_NAME("crc",      ARM::AEK_CRC,      "+crc",   "-crc")
 ARM_ARCH_EXT_NAME("crypto",   ARM::AEK_CRYPTO,   "+crypto","-crypto")
+ARM_ARCH_EXT_NAME("sha2",     ARM::AEK_SHA2,     "+sha2",  "-sha2")
+ARM_ARCH_EXT_NAME("aes",      ARM::AEK_AES,      "+aes",   "-aes")
 ARM_ARCH_EXT_NAME("dotprod",  ARM::AEK_DOTPROD,  "+dotprod","-dotprod")
 ARM_ARCH_EXT_NAME("dsp",      ARM::AEK_DSP,      "+dsp",   "-dsp")
 ARM_ARCH_EXT_NAME("fp",       ARM::AEK_FP,       nullptr,  nullptr)
@@ -253,6 +260,7 @@
 ARM_CPU_NAME("exynos-m1", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m2", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("exynos-m3", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
+ARM_CPU_NAME("exynos-m4", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 ARM_CPU_NAME("kryo", ARMV8A, FK_CRYPTO_NEON_FP_ARMV8, false, ARM::AEK_CRC)
 // Non-standard Arch names.
 ARM_CPU_NAME("iwmmxt", IWMMXT, FK_NONE, true, ARM::AEK_NONE)
diff --git a/linux-x64/clang/include/llvm/Support/AlignOf.h b/linux-x64/clang/include/llvm/Support/AlignOf.h
index abd19af..9e7a62b 100644
--- a/linux-x64/clang/include/llvm/Support/AlignOf.h
+++ b/linux-x64/clang/include/llvm/Support/AlignOf.h
@@ -20,7 +20,7 @@
 namespace llvm {
 
 /// \struct AlignedCharArray
-/// \brief Helper for building an aligned character array type.
+/// Helper for building an aligned character array type.
 ///
 /// This template is used to explicitly build up a collection of aligned
 /// character array types. We have to build these up using a macro and explicit
@@ -34,12 +34,12 @@
 
 template<std::size_t Alignment, std::size_t Size>
 struct AlignedCharArray {
-  LLVM_ALIGNAS(Alignment) char buffer[Size];
+  alignas(Alignment) char buffer[Size];
 };
 
 #else // _MSC_VER
 
-/// \brief Create a type with an aligned char buffer.
+/// Create a type with an aligned char buffer.
 template<std::size_t Alignment, std::size_t Size>
 struct AlignedCharArray;
 
@@ -124,7 +124,7 @@
 };
 } // end namespace detail
 
-/// \brief This union template exposes a suitably aligned and sized character
+/// This union template exposes a suitably aligned and sized character
 /// array member which can hold elements of any of up to ten types.
 ///
 /// These types may be arrays, structs, or any other types. The goal is to
diff --git a/linux-x64/clang/include/llvm/Support/Allocator.h b/linux-x64/clang/include/llvm/Support/Allocator.h
index 8ed4109..184ac49 100644
--- a/linux-x64/clang/include/llvm/Support/Allocator.h
+++ b/linux-x64/clang/include/llvm/Support/Allocator.h
@@ -23,8 +23,9 @@
 
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/Support/MathExtras.h"
 #include "llvm/Support/ErrorHandling.h"
+#include "llvm/Support/MathExtras.h"
+#include "llvm/Support/MemAlloc.h"
 #include <algorithm>
 #include <cassert>
 #include <cstddef>
@@ -36,7 +37,7 @@
 
 namespace llvm {
 
-/// \brief CRTP base class providing obvious overloads for the core \c
+/// CRTP base class providing obvious overloads for the core \c
 /// Allocate() methods of LLVM-style allocators.
 ///
 /// This base class both documents the full public interface exposed by all
@@ -44,7 +45,7 @@
 /// set of methods which the derived class must define.
 template <typename DerivedT> class AllocatorBase {
 public:
-  /// \brief Allocate \a Size bytes of \a Alignment aligned memory. This method
+  /// Allocate \a Size bytes of \a Alignment aligned memory. This method
   /// must be implemented by \c DerivedT.
   void *Allocate(size_t Size, size_t Alignment) {
 #ifdef __clang__
@@ -58,7 +59,7 @@
     return static_cast<DerivedT *>(this)->Allocate(Size, Alignment);
   }
 
-  /// \brief Deallocate \a Ptr to \a Size bytes of memory allocated by this
+  /// Deallocate \a Ptr to \a Size bytes of memory allocated by this
   /// allocator.
   void Deallocate(const void *Ptr, size_t Size) {
 #ifdef __clang__
@@ -75,12 +76,12 @@
   // The rest of these methods are helpers that redirect to one of the above
   // core methods.
 
-  /// \brief Allocate space for a sequence of objects without constructing them.
+  /// Allocate space for a sequence of objects without constructing them.
   template <typename T> T *Allocate(size_t Num = 1) {
     return static_cast<T *>(Allocate(Num * sizeof(T), alignof(T)));
   }
 
-  /// \brief Deallocate space for a sequence of objects without constructing them.
+  /// Deallocate space for a sequence of objects without constructing them.
   template <typename T>
   typename std::enable_if<
       !std::is_same<typename std::remove_cv<T>::type, void>::value, void>::type
@@ -95,11 +96,7 @@
 
   LLVM_ATTRIBUTE_RETURNS_NONNULL void *Allocate(size_t Size,
                                                 size_t /*Alignment*/) {
-    void* memPtr =  malloc(Size);
-    if (memPtr == nullptr) 
-      report_bad_alloc_error("Allocation in MallocAllocator failed.");
-
-    return memPtr;
+    return safe_malloc(Size);
   }
 
   // Pull in base class overloads.
@@ -124,7 +121,7 @@
 
 } // end namespace detail
 
-/// \brief Allocate memory in an ever growing pool, as if by bump-pointer.
+/// Allocate memory in an ever growing pool, as if by bump-pointer.
 ///
 /// This isn't strictly a bump-pointer allocator as it uses backing slabs of
 /// memory rather than relying on a boundless contiguous heap. However, it has
@@ -192,7 +189,7 @@
     return *this;
   }
 
-  /// \brief Deallocate all but the current slab and reset the current pointer
+  /// Deallocate all but the current slab and reset the current pointer
   /// to the beginning of it, freeing all memory allocated so far.
   void Reset() {
     // Deallocate all but the first slab, and deallocate all custom-sized slabs.
@@ -212,7 +209,7 @@
     Slabs.erase(std::next(Slabs.begin()), Slabs.end());
   }
 
-  /// \brief Allocate space at the specified alignment.
+  /// Allocate space at the specified alignment.
   LLVM_ATTRIBUTE_RETURNS_NONNULL LLVM_ATTRIBUTE_RETURNS_NOALIAS void *
   Allocate(size_t Size, size_t Alignment) {
     assert(Alignment > 0 && "0-byte alignnment is not allowed. Use 1 instead.");
@@ -307,30 +304,30 @@
   }
 
 private:
-  /// \brief The current pointer into the current slab.
+  /// The current pointer into the current slab.
   ///
   /// This points to the next free byte in the slab.
   char *CurPtr = nullptr;
 
-  /// \brief The end of the current slab.
+  /// The end of the current slab.
   char *End = nullptr;
 
-  /// \brief The slabs allocated so far.
+  /// The slabs allocated so far.
   SmallVector<void *, 4> Slabs;
 
-  /// \brief Custom-sized slabs allocated for too-large allocation requests.
+  /// Custom-sized slabs allocated for too-large allocation requests.
   SmallVector<std::pair<void *, size_t>, 0> CustomSizedSlabs;
 
-  /// \brief How many bytes we've allocated.
+  /// How many bytes we've allocated.
   ///
   /// Used so that we can compute how much space was wasted.
   size_t BytesAllocated = 0;
 
-  /// \brief The number of bytes to put between allocations when running under
+  /// The number of bytes to put between allocations when running under
   /// a sanitizer.
   size_t RedZoneSize = 1;
 
-  /// \brief The allocator instance we use to get slabs of memory.
+  /// The allocator instance we use to get slabs of memory.
   AllocatorT Allocator;
 
   static size_t computeSlabSize(unsigned SlabIdx) {
@@ -341,7 +338,7 @@
     return SlabSize * ((size_t)1 << std::min<size_t>(30, SlabIdx / 128));
   }
 
-  /// \brief Allocate a new slab and move the bump pointers over into the new
+  /// Allocate a new slab and move the bump pointers over into the new
   /// slab, modifying CurPtr and End.
   void StartNewSlab() {
     size_t AllocatedSlabSize = computeSlabSize(Slabs.size());
@@ -356,7 +353,7 @@
     End = ((char *)NewSlab) + AllocatedSlabSize;
   }
 
-  /// \brief Deallocate a sequence of slabs.
+  /// Deallocate a sequence of slabs.
   void DeallocateSlabs(SmallVectorImpl<void *>::iterator I,
                        SmallVectorImpl<void *>::iterator E) {
     for (; I != E; ++I) {
@@ -366,7 +363,7 @@
     }
   }
 
-  /// \brief Deallocate all memory for custom sized slabs.
+  /// Deallocate all memory for custom sized slabs.
   void DeallocateCustomSizedSlabs() {
     for (auto &PtrAndSize : CustomSizedSlabs) {
       void *Ptr = PtrAndSize.first;
@@ -378,11 +375,11 @@
   template <typename T> friend class SpecificBumpPtrAllocator;
 };
 
-/// \brief The standard BumpPtrAllocator which just uses the default template
+/// The standard BumpPtrAllocator which just uses the default template
 /// parameters.
 typedef BumpPtrAllocatorImpl<> BumpPtrAllocator;
 
-/// \brief A BumpPtrAllocator that allows only elements of a specific type to be
+/// A BumpPtrAllocator that allows only elements of a specific type to be
 /// allocated.
 ///
 /// This allows calling the destructor in DestroyAll() and when the allocator is
@@ -435,38 +432,10 @@
     Allocator.Reset();
   }
 
-  /// \brief Allocate space for an array of objects without constructing them.
+  /// Allocate space for an array of objects without constructing them.
   T *Allocate(size_t num = 1) { return Allocator.Allocate<T>(num); }
 };
 
-/// \{
-/// Counterparts of allocation functions defined in namespace 'std', which crash
-/// on allocation failure instead of returning null pointer.
-
-LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_malloc(size_t Sz) {
-  void *Result = std::malloc(Sz);
-  if (Result == nullptr)
-    report_bad_alloc_error("Allocation failed.");
-  return Result;
-}
-
-LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_calloc(size_t Count,
-                                                        size_t Sz) {
-  void *Result = std::calloc(Count, Sz);
-  if (Result == nullptr)
-    report_bad_alloc_error("Allocation failed.");
-  return Result;
-}
-
-LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_realloc(void *Ptr, size_t Sz) {
-  void *Result = std::realloc(Ptr, Sz);
-  if (Result == nullptr)
-    report_bad_alloc_error("Allocation failed.");
-  return Result;
-}
-
-/// \}
-
 } // end namespace llvm
 
 template <typename AllocatorT, size_t SlabSize, size_t SizeThreshold>
diff --git a/linux-x64/clang/include/llvm/Support/AtomicOrdering.h b/linux-x64/clang/include/llvm/Support/AtomicOrdering.h
index e93b755..a679ab3 100644
--- a/linux-x64/clang/include/llvm/Support/AtomicOrdering.h
+++ b/linux-x64/clang/include/llvm/Support/AtomicOrdering.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Atomic ordering constants.
+/// Atomic ordering constants.
 ///
 /// These values are used by LLVM to represent atomic ordering for C++11's
 /// memory model and more, as detailed in docs/Atomics.rst.
diff --git a/linux-x64/clang/include/llvm/Support/BinaryByteStream.h b/linux-x64/clang/include/llvm/Support/BinaryByteStream.h
index db1ccba..9808d3b 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryByteStream.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryByteStream.h
@@ -25,7 +25,7 @@
 
 namespace llvm {
 
-/// \brief An implementation of BinaryStream which holds its entire data set
+/// An implementation of BinaryStream which holds its entire data set
 /// in a single contiguous buffer.  BinaryByteStream guarantees that no read
 /// operation will ever incur a copy.  Note that BinaryByteStream does not
 /// own the underlying buffer.
@@ -69,7 +69,7 @@
   ArrayRef<uint8_t> Data;
 };
 
-/// \brief An implementation of BinaryStream whose data is backed by an llvm
+/// An implementation of BinaryStream whose data is backed by an llvm
 /// MemoryBuffer object.  MemoryBufferByteStream owns the MemoryBuffer in
 /// question.  As with BinaryByteStream, reading from a MemoryBufferByteStream
 /// will never cause a copy.
@@ -83,7 +83,7 @@
   std::unique_ptr<MemoryBuffer> MemBuffer;
 };
 
-/// \brief An implementation of BinaryStream which holds its entire data set
+/// An implementation of BinaryStream which holds its entire data set
 /// in a single contiguous buffer.  As with BinaryByteStream, the mutable
 /// version also guarantees that no read operation will ever incur a copy,
 /// and similarly it does not own the underlying buffer.
@@ -131,7 +131,7 @@
   BinaryByteStream ImmutableStream;
 };
 
-/// \brief An implementation of WritableBinaryStream which can write at its end
+/// An implementation of WritableBinaryStream which can write at its end
 /// causing the underlying data to grow.  This class owns the underlying data.
 class AppendingBinaryByteStream : public WritableBinaryStream {
   std::vector<uint8_t> Data;
@@ -193,7 +193,7 @@
 
   Error commit() override { return Error::success(); }
 
-  /// \brief Return the properties of this stream.
+  /// Return the properties of this stream.
   virtual BinaryStreamFlags getFlags() const override {
     return BSF_Write | BSF_Append;
   }
@@ -201,7 +201,7 @@
   MutableArrayRef<uint8_t> data() { return Data; }
 };
 
-/// \brief An implementation of WritableBinaryStream backed by an llvm
+/// An implementation of WritableBinaryStream backed by an llvm
 /// FileOutputBuffer.
 class FileBufferByteStream : public WritableBinaryStream {
 private:
@@ -222,6 +222,12 @@
       return Error::success();
     }
 
+    /// Returns a pointer to the start of the buffer.
+    uint8_t *getBufferStart() const { return FileBuffer->getBufferStart(); }
+
+    /// Returns a pointer to the end of the buffer.
+    uint8_t *getBufferEnd() const { return FileBuffer->getBufferEnd(); }
+
   private:
     std::unique_ptr<FileOutputBuffer> FileBuffer;
   };
@@ -253,6 +259,12 @@
 
   Error commit() override { return Impl.commit(); }
 
+  /// Returns a pointer to the start of the buffer.
+  uint8_t *getBufferStart() const { return Impl.getBufferStart(); }
+
+  /// Returns a pointer to the end of the buffer.
+  uint8_t *getBufferEnd() const { return Impl.getBufferEnd(); }
+
 private:
   StreamImpl Impl;
 };
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStream.h b/linux-x64/clang/include/llvm/Support/BinaryStream.h
index d69a03e..7677214 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStream.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStream.h
@@ -26,7 +26,7 @@
   LLVM_MARK_AS_BITMASK_ENUM(/* LargestValue = */ BSF_Append)
 };
 
-/// \brief An interface for accessing data in a stream-like format, but which
+/// An interface for accessing data in a stream-like format, but which
 /// discourages copying.  Instead of specifying a buffer in which to copy
 /// data on a read, the API returns an ArrayRef to data owned by the stream's
 /// implementation.  Since implementations may not necessarily store data in a
@@ -39,21 +39,21 @@
 
   virtual llvm::support::endianness getEndian() const = 0;
 
-  /// \brief Given an offset into the stream and a number of bytes, attempt to
+  /// Given an offset into the stream and a number of bytes, attempt to
   /// read the bytes and set the output ArrayRef to point to data owned by the
   /// stream.
   virtual Error readBytes(uint32_t Offset, uint32_t Size,
                           ArrayRef<uint8_t> &Buffer) = 0;
 
-  /// \brief Given an offset into the stream, read as much as possible without
+  /// Given an offset into the stream, read as much as possible without
   /// copying any data.
   virtual Error readLongestContiguousChunk(uint32_t Offset,
                                            ArrayRef<uint8_t> &Buffer) = 0;
 
-  /// \brief Return the number of bytes of data in this stream.
+  /// Return the number of bytes of data in this stream.
   virtual uint32_t getLength() = 0;
 
-  /// \brief Return the properties of this stream.
+  /// Return the properties of this stream.
   virtual BinaryStreamFlags getFlags() const { return BSF_None; }
 
 protected:
@@ -66,7 +66,7 @@
   }
 };
 
-/// \brief A BinaryStream which can be read from as well as written to.  Note
+/// A BinaryStream which can be read from as well as written to.  Note
 /// that writing to a BinaryStream always necessitates copying from the input
 /// buffer to the stream's backing store.  Streams are assumed to be buffered
 /// so that to be portable it is necessary to call commit() on the stream when
@@ -75,15 +75,15 @@
 public:
   ~WritableBinaryStream() override = default;
 
-  /// \brief Attempt to write the given bytes into the stream at the desired
+  /// Attempt to write the given bytes into the stream at the desired
   /// offset. This will always necessitate a copy.  Cannot shrink or grow the
   /// stream, only writes into existing allocated space.
   virtual Error writeBytes(uint32_t Offset, ArrayRef<uint8_t> Data) = 0;
 
-  /// \brief For buffered streams, commits changes to the backing store.
+  /// For buffered streams, commits changes to the backing store.
   virtual Error commit() = 0;
 
-  /// \brief Return the properties of this stream.
+  /// Return the properties of this stream.
   BinaryStreamFlags getFlags() const override { return BSF_Write; }
 
 protected:
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamArray.h b/linux-x64/clang/include/llvm/Support/BinaryStreamArray.h
index 3f5562b..d1571cb 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamArray.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamArray.h
@@ -111,7 +111,7 @@
 
   bool empty() const { return Stream.getLength() == 0; }
 
-  /// \brief given an offset into the array's underlying stream, return an
+  /// given an offset into the array's underlying stream, return an
   /// iterator to the record at that offset.  This is considered unsafe
   /// since the behavior is undefined if \p Offset does not refer to the
   /// beginning of a valid record.
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h b/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
index ae5ebb2..fe77b55 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamReader.h
@@ -24,7 +24,7 @@
 
 namespace llvm {
 
-/// \brief Provides read only access to a subclass of `BinaryStream`.  Provides
+/// Provides read only access to a subclass of `BinaryStream`.  Provides
 /// bounds checking and helpers for writing certain common data types such as
 /// null-terminated strings, integers in various flavors of endianness, etc.
 /// Can be subclassed to provide reading of custom datatypes, although no
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamRef.h b/linux-x64/clang/include/llvm/Support/BinaryStreamRef.h
index 5cf355b..d8dc139 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamRef.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamRef.h
@@ -147,7 +147,7 @@
   Optional<uint32_t> Length;
 };
 
-/// \brief BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.  It
+/// BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.  It
 /// provides copy-semantics and read only access to a "window" of the underlying
 /// BinaryStream. Note that BinaryStreamRef is *not* a BinaryStream.  That is to
 /// say, it does not inherit and override the methods of BinaryStream.  In
@@ -266,7 +266,7 @@
   /// Conver this WritableBinaryStreamRef to a read-only BinaryStreamRef.
   operator BinaryStreamRef() const;
 
-  /// \brief For buffered streams, commits changes to the backing store.
+  /// For buffered streams, commits changes to the backing store.
   Error commit();
 };
 
diff --git a/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h b/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
index f31db87..6e8a68a 100644
--- a/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
+++ b/linux-x64/clang/include/llvm/Support/BinaryStreamWriter.h
@@ -24,7 +24,7 @@
 
 namespace llvm {
 
-/// \brief Provides write only access to a subclass of `WritableBinaryStream`.
+/// Provides write only access to a subclass of `WritableBinaryStream`.
 /// Provides bounds checking and helpers for writing certain common data types
 /// such as null-terminated strings, integers in various flavors of endianness,
 /// etc.  Can be subclassed to provide reading and writing of custom datatypes,
diff --git a/linux-x64/clang/include/llvm/Support/BlockFrequency.h b/linux-x64/clang/include/llvm/Support/BlockFrequency.h
index 2e75cbd..4b468f7 100644
--- a/linux-x64/clang/include/llvm/Support/BlockFrequency.h
+++ b/linux-x64/clang/include/llvm/Support/BlockFrequency.h
@@ -28,32 +28,32 @@
 public:
   BlockFrequency(uint64_t Freq = 0) : Frequency(Freq) { }
 
-  /// \brief Returns the maximum possible frequency, the saturation value.
+  /// Returns the maximum possible frequency, the saturation value.
   static uint64_t getMaxFrequency() { return -1ULL; }
 
-  /// \brief Returns the frequency as a fixpoint number scaled by the entry
+  /// Returns the frequency as a fixpoint number scaled by the entry
   /// frequency.
   uint64_t getFrequency() const { return Frequency; }
 
-  /// \brief Multiplies with a branch probability. The computation will never
+  /// Multiplies with a branch probability. The computation will never
   /// overflow.
   BlockFrequency &operator*=(BranchProbability Prob);
   BlockFrequency operator*(BranchProbability Prob) const;
 
-  /// \brief Divide by a non-zero branch probability using saturating
+  /// Divide by a non-zero branch probability using saturating
   /// arithmetic.
   BlockFrequency &operator/=(BranchProbability Prob);
   BlockFrequency operator/(BranchProbability Prob) const;
 
-  /// \brief Adds another block frequency using saturating arithmetic.
+  /// Adds another block frequency using saturating arithmetic.
   BlockFrequency &operator+=(BlockFrequency Freq);
   BlockFrequency operator+(BlockFrequency Freq) const;
 
-  /// \brief Subtracts another block frequency using saturating arithmetic.
+  /// Subtracts another block frequency using saturating arithmetic.
   BlockFrequency &operator-=(BlockFrequency Freq);
   BlockFrequency operator-(BlockFrequency Freq) const;
 
-  /// \brief Shift block frequency to the right by count digits saturating to 1.
+  /// Shift block frequency to the right by count digits saturating to 1.
   BlockFrequency &operator>>=(const unsigned count);
 
   bool operator<(BlockFrequency RHS) const {
diff --git a/linux-x64/clang/include/llvm/Support/BranchProbability.h b/linux-x64/clang/include/llvm/Support/BranchProbability.h
index b403d7f..3a88e71 100644
--- a/linux-x64/clang/include/llvm/Support/BranchProbability.h
+++ b/linux-x64/clang/include/llvm/Support/BranchProbability.h
@@ -73,7 +73,7 @@
 
   void dump() const;
 
-  /// \brief Scale a large integer.
+  /// Scale a large integer.
   ///
   /// Scales \c Num.  Guarantees full precision.  Returns the floor of the
   /// result.
@@ -81,7 +81,7 @@
   /// \return \c Num times \c this.
   uint64_t scale(uint64_t Num) const;
 
-  /// \brief Scale a large integer by the inverse.
+  /// Scale a large integer by the inverse.
   ///
   /// Scales \c Num by the inverse of \c this.  Guarantees full precision.
   /// Returns the floor of the result.
diff --git a/linux-x64/clang/include/llvm/Support/CachePruning.h b/linux-x64/clang/include/llvm/Support/CachePruning.h
index f38ce17..cf3f8ec 100644
--- a/linux-x64/clang/include/llvm/Support/CachePruning.h
+++ b/linux-x64/clang/include/llvm/Support/CachePruning.h
@@ -52,9 +52,11 @@
   /// the number of files based pruning.
   ///
   /// This defaults to 1000000 because with that many files there are
-  /// diminishing returns on the effectiveness of the cache, and some file
-  /// systems have a limit on how many files can be contained in a directory
-  /// (notably ext4, which is limited to around 6000000 files).
+  /// diminishing returns on the effectiveness of the cache. Some systems have a
+  /// limit on total number of files, and some also limit the number of files
+  /// per directory, such as Linux ext4, with the default setting (block size is
+  /// 4096 and large_dir disabled), there is a per-directory entry limit of
+  /// 508*510*floor(4096/(40+8))~=20M for average filename length of 40.
   uint64_t MaxSizeFiles = 1000000;
 };
 
diff --git a/linux-x64/clang/include/llvm/Support/Casting.h b/linux-x64/clang/include/llvm/Support/Casting.h
index baa2a81..3f21e0f 100644
--- a/linux-x64/clang/include/llvm/Support/Casting.h
+++ b/linux-x64/clang/include/llvm/Support/Casting.h
@@ -60,7 +60,7 @@
   }
 };
 
-/// \brief Always allow upcasts, and perform no dynamic check for them.
+/// Always allow upcasts, and perform no dynamic check for them.
 template <typename To, typename From>
 struct isa_impl<
     To, From, typename std::enable_if<std::is_base_of<To, From>::value>::type> {
diff --git a/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h b/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
index 68bce06..039c374 100644
--- a/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
+++ b/linux-x64/clang/include/llvm/Support/CheckedArithmetic.h
@@ -16,66 +16,87 @@
 #define LLVM_SUPPORT_CHECKEDARITHMETIC_H
 
 #include "llvm/ADT/APInt.h"
+#include "llvm/ADT/Optional.h"
 
 #include <type_traits>
 
 namespace {
 
 /// Utility function to apply a given method of \c APInt \p F to \p LHS and
-/// \p RHS, and write the output into \p Res.
-/// \return Whether the operation overflows.
+/// \p RHS.
+/// \return Empty optional if the operation overflows, or result otherwise.
 template <typename T, typename F>
 typename std::enable_if<std::is_integral<T>::value && sizeof(T) * 8 <= 64,
-                        bool>::type
-checkedOp(T LHS, T RHS, F Op, T *Res = nullptr, bool Signed = true) {
+                        llvm::Optional<T>>::type
+checkedOp(T LHS, T RHS, F Op, bool Signed = true) {
   llvm::APInt ALHS(/*BitSize=*/sizeof(T) * 8, LHS, Signed);
   llvm::APInt ARHS(/*BitSize=*/sizeof(T) * 8, RHS, Signed);
   bool Overflow;
   llvm::APInt Out = (ALHS.*Op)(ARHS, Overflow);
-  if (Res)
-    *Res = Signed ? Out.getSExtValue() : Out.getZExtValue();
-  return Overflow;
+  if (Overflow)
+    return llvm::None;
+  return Signed ? Out.getSExtValue() : Out.getZExtValue();
 }
 }
 
 namespace llvm {
 
-/// Add two signed integers \p LHS and \p RHS, write into \p Res if non-null.
-/// Does not guarantee saturating arithmetic.
-/// \return Whether the result overflows.
+/// Add two signed integers \p LHS and \p RHS.
+/// \return Optional of sum if no signed overflow occurred,
+/// \c None otherwise.
 template <typename T>
-typename std::enable_if<std::is_signed<T>::value, bool>::type
-checkedAdd(T LHS, T RHS, T *Res = nullptr) {
-  return checkedOp(LHS, RHS, &llvm::APInt::sadd_ov, Res);
+typename std::enable_if<std::is_signed<T>::value, llvm::Optional<T>>::type
+checkedAdd(T LHS, T RHS) {
+  return checkedOp(LHS, RHS, &llvm::APInt::sadd_ov);
 }
 
-/// Multiply two signed integers \p LHS and \p RHS, write into \p Res if
-/// non-null.
-/// Does not guarantee saturating arithmetic.
-/// \return Whether the result overflows.
+/// Multiply two signed integers \p LHS and \p RHS.
+/// \return Optional of product if no signed overflow occurred,
+/// \c None otherwise.
 template <typename T>
-typename std::enable_if<std::is_signed<T>::value, bool>::type
-checkedMul(T LHS, T RHS, T *Res = nullptr) {
-  return checkedOp(LHS, RHS, &llvm::APInt::smul_ov, Res);
+typename std::enable_if<std::is_signed<T>::value, llvm::Optional<T>>::type
+checkedMul(T LHS, T RHS) {
+  return checkedOp(LHS, RHS, &llvm::APInt::smul_ov);
 }
 
-/// Add two unsigned integers \p LHS and \p RHS, write into \p Res if non-null.
-/// Does not guarantee saturating arithmetic.
-/// \return Whether the result overflows.
+/// Multiply A and B, and add C to the resulting product.
+/// \return Optional of result if no signed overflow occurred,
+/// \c None otherwise.
 template <typename T>
-typename std::enable_if<std::is_unsigned<T>::value, bool>::type
-checkedAddUnsigned(T LHS, T RHS, T *Res = nullptr) {
-  return checkedOp(LHS, RHS, &llvm::APInt::uadd_ov, Res, /*Signed=*/false);
+typename std::enable_if<std::is_signed<T>::value, llvm::Optional<T>>::type
+checkedMulAdd(T A, T B, T C) {
+  if (auto Product = checkedMul(A, B))
+    return checkedAdd(*Product, C);
+  return llvm::None;
 }
 
-/// Multiply two unsigned integers \p LHS and \p RHS, write into \p Res if
-/// non-null.
-/// Does not guarantee saturating arithmetic.
-/// \return Whether the result overflows.
+/// Add two unsigned integers \p LHS and \p RHS.
+/// \return Optional of sum if no unsigned overflow occurred,
+/// \c None otherwise.
 template <typename T>
-typename std::enable_if<std::is_unsigned<T>::value, bool>::type
-checkedMulUnsigned(T LHS, T RHS, T *Res = nullptr) {
-  return checkedOp(LHS, RHS, &llvm::APInt::umul_ov, Res, /*Signed=*/false);
+typename std::enable_if<std::is_unsigned<T>::value, llvm::Optional<T>>::type
+checkedAddUnsigned(T LHS, T RHS) {
+  return checkedOp(LHS, RHS, &llvm::APInt::uadd_ov, /*Signed=*/false);
+}
+
+/// Multiply two unsigned integers \p LHS and \p RHS.
+/// \return Optional of product if no unsigned overflow occurred,
+/// \c None otherwise.
+template <typename T>
+typename std::enable_if<std::is_unsigned<T>::value, llvm::Optional<T>>::type
+checkedMulUnsigned(T LHS, T RHS) {
+  return checkedOp(LHS, RHS, &llvm::APInt::umul_ov, /*Signed=*/false);
+}
+
+/// Multiply unsigned integers A and B, and add C to the resulting product.
+/// \return Optional of result if no unsigned overflow occurred,
+/// \c None otherwise.
+template <typename T>
+typename std::enable_if<std::is_unsigned<T>::value, llvm::Optional<T>>::type
+checkedMulAddUnsigned(T A, T B, T C) {
+  if (auto Product = checkedMulUnsigned(A, B))
+    return checkedAddUnsigned(*Product, C);
+  return llvm::None;
 }
 
 } // End llvm namespace
diff --git a/linux-x64/clang/include/llvm/Support/CodeGenCoverage.h b/linux-x64/clang/include/llvm/Support/CodeGenCoverage.h
index d5bd837..c863be3 100644
--- a/linux-x64/clang/include/llvm/Support/CodeGenCoverage.h
+++ b/linux-x64/clang/include/llvm/Support/CodeGenCoverage.h
@@ -23,15 +23,18 @@
   BitVector RuleCoverage;
 
 public:
+  using const_covered_iterator = BitVector::const_set_bits_iterator;
+
   CodeGenCoverage();
 
   void setCovered(uint64_t RuleID);
-  bool isCovered(uint64_t RuleID);
+  bool isCovered(uint64_t RuleID) const;
+  iterator_range<const_covered_iterator> covered() const;
 
   bool parse(MemoryBuffer &Buffer, StringRef BackendName);
   bool emit(StringRef FilePrefix, StringRef BackendName) const;
   void reset();
 };
-} // end namespace llvm
+} // namespace llvm
 
 #endif // ifndef LLVM_SUPPORT_CODEGENCOVERAGE_H
diff --git a/linux-x64/clang/include/llvm/Support/CommandLine.h b/linux-x64/clang/include/llvm/Support/CommandLine.h
index f043c11..799b41f 100644
--- a/linux-x64/clang/include/llvm/Support/CommandLine.h
+++ b/linux-x64/clang/include/llvm/Support/CommandLine.h
@@ -30,6 +30,7 @@
 #include "llvm/ADT/iterator_range.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/ManagedStatic.h"
+#include "llvm/Support/raw_ostream.h"
 #include <cassert>
 #include <climits>
 #include <cstddef>
@@ -94,7 +95,7 @@
 // Forward declaration - AddLiteralOption needs to be up here to make gcc happy.
 class Option;
 
-/// \brief Adds a new option for parsing and provides the option it refers to.
+/// Adds a new option for parsing and provides the option it refers to.
 ///
 /// \param O pointer to the option
 /// \param Name the string name for the option to handle during parsing
@@ -362,7 +363,10 @@
                              bool MultiArg = false);
 
   // Prints option name followed by message.  Always returns true.
-  bool error(const Twine &Message, StringRef ArgName = StringRef());
+  bool error(const Twine &Message, StringRef ArgName = StringRef(), raw_ostream &Errs = llvm::errs());
+  bool error(const Twine &Message, raw_ostream &Errs) {
+    return error(Message, StringRef(), Errs);
+  }
 
   inline int getNumOccurrences() const { return NumOccurrences; }
   inline void reset() { NumOccurrences = 0; }
@@ -1770,7 +1774,7 @@
 // Public interface for accessing registered options.
 //
 
-/// \brief Use this to get a StringMap to all registered named options
+/// Use this to get a StringMap to all registered named options
 /// (e.g. -help). Note \p Map Should be an empty StringMap.
 ///
 /// \return A reference to the StringMap used by the cl APIs to parse options.
@@ -1799,7 +1803,7 @@
 /// than just handing around a global list.
 StringMap<Option *> &getRegisteredOptions(SubCommand &Sub = *TopLevelSubCommand);
 
-/// \brief Use this to get all registered SubCommands from the provided parser.
+/// Use this to get all registered SubCommands from the provided parser.
 ///
 /// \return A range of all SubCommand pointers registered with the parser.
 ///
@@ -1825,7 +1829,7 @@
 // Standalone command line processing utilities.
 //
 
-/// \brief Tokenizes a command line that can contain escapes and quotes.
+/// Tokenizes a command line that can contain escapes and quotes.
 //
 /// The quoting rules match those used by GCC and other tools that use
 /// libiberty's buildargv() or expandargv() utilities, and do not match bash.
@@ -1841,7 +1845,7 @@
                             SmallVectorImpl<const char *> &NewArgv,
                             bool MarkEOLs = false);
 
-/// \brief Tokenizes a Windows command line which may contain quotes and escaped
+/// Tokenizes a Windows command line which may contain quotes and escaped
 /// quotes.
 ///
 /// See MSDN docs for CommandLineToArgvW for information on the quoting rules.
@@ -1856,7 +1860,7 @@
                                 SmallVectorImpl<const char *> &NewArgv,
                                 bool MarkEOLs = false);
 
-/// \brief String tokenization function type.  Should be compatible with either
+/// String tokenization function type.  Should be compatible with either
 /// Windows or Unix command line tokenizers.
 using TokenizerCallback = void (*)(StringRef Source, StringSaver &Saver,
                                    SmallVectorImpl<const char *> &NewArgv,
@@ -1889,7 +1893,7 @@
 bool readConfigFile(StringRef CfgFileName, StringSaver &Saver,
                     SmallVectorImpl<const char *> &Argv);
 
-/// \brief Expand response files on a command line recursively using the given
+/// Expand response files on a command line recursively using the given
 /// StringSaver and tokenization strategy.  Argv should contain the command line
 /// before expansion and will be modified in place. If requested, Argv will
 /// also be populated with nullptrs indicating where each response file line
@@ -1909,7 +1913,7 @@
                          SmallVectorImpl<const char *> &Argv,
                          bool MarkEOLs = false, bool RelativeNames = false);
 
-/// \brief Mark all options not part of this category as cl::ReallyHidden.
+/// Mark all options not part of this category as cl::ReallyHidden.
 ///
 /// \param Category the category of options to keep displaying
 ///
@@ -1919,7 +1923,7 @@
 void HideUnrelatedOptions(cl::OptionCategory &Category,
                           SubCommand &Sub = *TopLevelSubCommand);
 
-/// \brief Mark all options not part of the categories as cl::ReallyHidden.
+/// Mark all options not part of the categories as cl::ReallyHidden.
 ///
 /// \param Categories the categories of options to keep displaying.
 ///
@@ -1929,12 +1933,12 @@
 void HideUnrelatedOptions(ArrayRef<const cl::OptionCategory *> Categories,
                           SubCommand &Sub = *TopLevelSubCommand);
 
-/// \brief Reset all command line options to a state that looks as if they have
+/// Reset all command line options to a state that looks as if they have
 /// never appeared on the command line.  This is useful for being able to parse
 /// a command line multiple times (especially useful for writing tests).
 void ResetAllOptionOccurrences();
 
-/// \brief Reset the command line parser back to its initial state.  This
+/// Reset the command line parser back to its initial state.  This
 /// removes
 /// all options, categories, and subcommands and returns the parser to a state
 /// where no options are supported.
diff --git a/linux-x64/clang/include/llvm/Support/Compiler.h b/linux-x64/clang/include/llvm/Support/Compiler.h
index 43a96e4..4de815f 100644
--- a/linux-x64/clang/include/llvm/Support/Compiler.h
+++ b/linux-x64/clang/include/llvm/Support/Compiler.h
@@ -7,13 +7,545 @@
 //
 //===----------------------------------------------------------------------===//
 //
-// Due to layering constraints (Support depends on Demangler) this is a thin
-// wrapper around the implementation that lives in llvm-c, though most clients
-// can/should think of this as being provided by Support for simplicity (not
-// many clients are aware of their dependency on Demangler/it's a weird place to
-// own this - but didn't seem to justify splitting Support into "lower support"
-// and "upper support").
+// This file defines several macros, based on the current compiler.  This allows
+// use of compiler-specific features in a way that remains portable.
 //
 //===----------------------------------------------------------------------===//
 
-#include "llvm/Demangle/Compiler.h"
+#ifndef LLVM_SUPPORT_COMPILER_H
+#define LLVM_SUPPORT_COMPILER_H
+
+#include "llvm/Config/llvm-config.h"
+
+#include <new>
+#include <stddef.h>
+
+#if defined(_MSC_VER)
+#include <sal.h>
+#endif
+
+#ifndef __has_feature
+# define __has_feature(x) 0
+#endif
+
+#ifndef __has_extension
+# define __has_extension(x) 0
+#endif
+
+#ifndef __has_attribute
+# define __has_attribute(x) 0
+#endif
+
+#ifndef __has_cpp_attribute
+# define __has_cpp_attribute(x) 0
+#endif
+
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
+/// \macro LLVM_GNUC_PREREQ
+/// Extend the default __GNUC_PREREQ even if glibc's features.h isn't
+/// available.
+#ifndef LLVM_GNUC_PREREQ
+# if defined(__GNUC__) && defined(__GNUC_MINOR__) && defined(__GNUC_PATCHLEVEL__)
+#  define LLVM_GNUC_PREREQ(maj, min, patch) \
+    ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) + __GNUC_PATCHLEVEL__ >= \
+     ((maj) << 20) + ((min) << 10) + (patch))
+# elif defined(__GNUC__) && defined(__GNUC_MINOR__)
+#  define LLVM_GNUC_PREREQ(maj, min, patch) \
+    ((__GNUC__ << 20) + (__GNUC_MINOR__ << 10) >= ((maj) << 20) + ((min) << 10))
+# else
+#  define LLVM_GNUC_PREREQ(maj, min, patch) 0
+# endif
+#endif
+
+/// \macro LLVM_MSC_PREREQ
+/// Is the compiler MSVC of at least the specified version?
+/// The common \param version values to check for are:
+///  * 1900: Microsoft Visual Studio 2015 / 14.0
+#ifdef _MSC_VER
+#define LLVM_MSC_PREREQ(version) (_MSC_VER >= (version))
+
+// We require at least MSVC 2015.
+#if !LLVM_MSC_PREREQ(1900)
+#error LLVM requires at least MSVC 2015.
+#endif
+
+#else
+#define LLVM_MSC_PREREQ(version) 0
+#endif
+
+/// Does the compiler support ref-qualifiers for *this?
+///
+/// Sadly, this is separate from just rvalue reference support because GCC
+/// and MSVC implemented this later than everything else.
+#if __has_feature(cxx_rvalue_references) || LLVM_GNUC_PREREQ(4, 8, 1)
+#define LLVM_HAS_RVALUE_REFERENCE_THIS 1
+#else
+#define LLVM_HAS_RVALUE_REFERENCE_THIS 0
+#endif
+
+/// Expands to '&' if ref-qualifiers for *this are supported.
+///
+/// This can be used to provide lvalue/rvalue overrides of member functions.
+/// The rvalue override should be guarded by LLVM_HAS_RVALUE_REFERENCE_THIS
+#if LLVM_HAS_RVALUE_REFERENCE_THIS
+#define LLVM_LVALUE_FUNCTION &
+#else
+#define LLVM_LVALUE_FUNCTION
+#endif
+
+/// LLVM_LIBRARY_VISIBILITY - If a class marked with this attribute is linked
+/// into a shared library, then the class should be private to the library and
+/// not accessible from outside it.  Can also be used to mark variables and
+/// functions, making them private to any shared library they are linked into.
+/// On PE/COFF targets, library visibility is the default, so this isn't needed.
+#if (__has_attribute(visibility) || LLVM_GNUC_PREREQ(4, 0, 0)) &&              \
+    !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(_WIN32)
+#define LLVM_LIBRARY_VISIBILITY __attribute__ ((visibility("hidden")))
+#else
+#define LLVM_LIBRARY_VISIBILITY
+#endif
+
+#if defined(__GNUC__)
+#define LLVM_PREFETCH(addr, rw, locality) __builtin_prefetch(addr, rw, locality)
+#else
+#define LLVM_PREFETCH(addr, rw, locality)
+#endif
+
+#if __has_attribute(used) || LLVM_GNUC_PREREQ(3, 1, 0)
+#define LLVM_ATTRIBUTE_USED __attribute__((__used__))
+#else
+#define LLVM_ATTRIBUTE_USED
+#endif
+
+/// LLVM_NODISCARD - Warn if a type or return value is discarded.
+#if __cplusplus > 201402L && __has_cpp_attribute(nodiscard)
+#define LLVM_NODISCARD [[nodiscard]]
+#elif !__cplusplus
+// Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious
+// error when __has_cpp_attribute is given a scoped attribute in C mode.
+#define LLVM_NODISCARD
+#elif __has_cpp_attribute(clang::warn_unused_result)
+#define LLVM_NODISCARD [[clang::warn_unused_result]]
+#else
+#define LLVM_NODISCARD
+#endif
+
+// Some compilers warn about unused functions. When a function is sometimes
+// used or not depending on build settings (e.g. a function only called from
+// within "assert"), this attribute can be used to suppress such warnings.
+//
+// However, it shouldn't be used for unused *variables*, as those have a much
+// more portable solution:
+//   (void)unused_var_name;
+// Prefer cast-to-void wherever it is sufficient.
+#if __has_attribute(unused) || LLVM_GNUC_PREREQ(3, 1, 0)
+#define LLVM_ATTRIBUTE_UNUSED __attribute__((__unused__))
+#else
+#define LLVM_ATTRIBUTE_UNUSED
+#endif
+
+// FIXME: Provide this for PE/COFF targets.
+#if (__has_attribute(weak) || LLVM_GNUC_PREREQ(4, 0, 0)) &&                    \
+    (!defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(_WIN32))
+#define LLVM_ATTRIBUTE_WEAK __attribute__((__weak__))
+#else
+#define LLVM_ATTRIBUTE_WEAK
+#endif
+
+// Prior to clang 3.2, clang did not accept any spelling of
+// __has_attribute(const), so assume it is supported.
+#if defined(__clang__) || defined(__GNUC__)
+// aka 'CONST' but following LLVM Conventions.
+#define LLVM_READNONE __attribute__((__const__))
+#else
+#define LLVM_READNONE
+#endif
+
+#if __has_attribute(pure) || defined(__GNUC__)
+// aka 'PURE' but following LLVM Conventions.
+#define LLVM_READONLY __attribute__((__pure__))
+#else
+#define LLVM_READONLY
+#endif
+
+#if __has_builtin(__builtin_expect) || LLVM_GNUC_PREREQ(4, 0, 0)
+#define LLVM_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true)
+#define LLVM_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false)
+#else
+#define LLVM_LIKELY(EXPR) (EXPR)
+#define LLVM_UNLIKELY(EXPR) (EXPR)
+#endif
+
+/// LLVM_ATTRIBUTE_NOINLINE - On compilers where we have a directive to do so,
+/// mark a method "not for inlining".
+#if __has_attribute(noinline) || LLVM_GNUC_PREREQ(3, 4, 0)
+#define LLVM_ATTRIBUTE_NOINLINE __attribute__((noinline))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_NOINLINE __declspec(noinline)
+#else
+#define LLVM_ATTRIBUTE_NOINLINE
+#endif
+
+/// LLVM_ATTRIBUTE_ALWAYS_INLINE - On compilers where we have a directive to do
+/// so, mark a method "always inline" because it is performance sensitive. GCC
+/// 3.4 supported this but is buggy in various cases and produces unimplemented
+/// errors, just use it in GCC 4.0 and later.
+#if __has_attribute(always_inline) || LLVM_GNUC_PREREQ(4, 0, 0)
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE __forceinline
+#else
+#define LLVM_ATTRIBUTE_ALWAYS_INLINE
+#endif
+
+#ifdef __GNUC__
+#define LLVM_ATTRIBUTE_NORETURN __attribute__((noreturn))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_NORETURN __declspec(noreturn)
+#else
+#define LLVM_ATTRIBUTE_NORETURN
+#endif
+
+#if __has_attribute(returns_nonnull) || LLVM_GNUC_PREREQ(4, 9, 0)
+#define LLVM_ATTRIBUTE_RETURNS_NONNULL __attribute__((returns_nonnull))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_RETURNS_NONNULL _Ret_notnull_
+#else
+#define LLVM_ATTRIBUTE_RETURNS_NONNULL
+#endif
+
+/// \macro LLVM_ATTRIBUTE_RETURNS_NOALIAS Used to mark a function as returning a
+/// pointer that does not alias any other valid pointer.
+#ifdef __GNUC__
+#define LLVM_ATTRIBUTE_RETURNS_NOALIAS __attribute__((__malloc__))
+#elif defined(_MSC_VER)
+#define LLVM_ATTRIBUTE_RETURNS_NOALIAS __declspec(restrict)
+#else
+#define LLVM_ATTRIBUTE_RETURNS_NOALIAS
+#endif
+
+/// LLVM_FALLTHROUGH - Mark fallthrough cases in switch statements.
+#if __cplusplus > 201402L && __has_cpp_attribute(fallthrough)
+#define LLVM_FALLTHROUGH [[fallthrough]]
+#elif __has_cpp_attribute(gnu::fallthrough)
+#define LLVM_FALLTHROUGH [[gnu::fallthrough]]
+#elif !__cplusplus
+// Workaround for llvm.org/PR23435, since clang 3.6 and below emit a spurious
+// error when __has_cpp_attribute is given a scoped attribute in C mode.
+#define LLVM_FALLTHROUGH
+#elif __has_cpp_attribute(clang::fallthrough)
+#define LLVM_FALLTHROUGH [[clang::fallthrough]]
+#else
+#define LLVM_FALLTHROUGH
+#endif
+
+/// LLVM_EXTENSION - Support compilers where we have a keyword to suppress
+/// pedantic diagnostics.
+#ifdef __GNUC__
+#define LLVM_EXTENSION __extension__
+#else
+#define LLVM_EXTENSION
+#endif
+
+// LLVM_ATTRIBUTE_DEPRECATED(decl, "message")
+#if __has_feature(attribute_deprecated_with_message)
+# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
+  decl __attribute__((deprecated(message)))
+#elif defined(__GNUC__)
+# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
+  decl __attribute__((deprecated))
+#elif defined(_MSC_VER)
+# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
+  __declspec(deprecated(message)) decl
+#else
+# define LLVM_ATTRIBUTE_DEPRECATED(decl, message) \
+  decl
+#endif
+
+/// LLVM_BUILTIN_UNREACHABLE - On compilers which support it, expands
+/// to an expression which states that it is undefined behavior for the
+/// compiler to reach this point.  Otherwise is not defined.
+#if __has_builtin(__builtin_unreachable) || LLVM_GNUC_PREREQ(4, 5, 0)
+# define LLVM_BUILTIN_UNREACHABLE __builtin_unreachable()
+#elif defined(_MSC_VER)
+# define LLVM_BUILTIN_UNREACHABLE __assume(false)
+#endif
+
+/// LLVM_BUILTIN_TRAP - On compilers which support it, expands to an expression
+/// which causes the program to exit abnormally.
+#if __has_builtin(__builtin_trap) || LLVM_GNUC_PREREQ(4, 3, 0)
+# define LLVM_BUILTIN_TRAP __builtin_trap()
+#elif defined(_MSC_VER)
+// The __debugbreak intrinsic is supported by MSVC, does not require forward
+// declarations involving platform-specific typedefs (unlike RaiseException),
+// results in a call to vectored exception handlers, and encodes to a short
+// instruction that still causes the trapping behavior we want.
+# define LLVM_BUILTIN_TRAP __debugbreak()
+#else
+# define LLVM_BUILTIN_TRAP *(volatile int*)0x11 = 0
+#endif
+
+/// LLVM_BUILTIN_DEBUGTRAP - On compilers which support it, expands to
+/// an expression which causes the program to break while running
+/// under a debugger.
+#if __has_builtin(__builtin_debugtrap)
+# define LLVM_BUILTIN_DEBUGTRAP __builtin_debugtrap()
+#elif defined(_MSC_VER)
+// The __debugbreak intrinsic is supported by MSVC and breaks while
+// running under the debugger, and also supports invoking a debugger
+// when the OS is configured appropriately.
+# define LLVM_BUILTIN_DEBUGTRAP __debugbreak()
+#else
+// Just continue execution when built with compilers that have no
+// support. This is a debugging aid and not intended to force the
+// program to abort if encountered.
+# define LLVM_BUILTIN_DEBUGTRAP
+#endif
+
+/// \macro LLVM_ASSUME_ALIGNED
+/// Returns a pointer with an assumed alignment.
+#if __has_builtin(__builtin_assume_aligned) || LLVM_GNUC_PREREQ(4, 7, 0)
+# define LLVM_ASSUME_ALIGNED(p, a) __builtin_assume_aligned(p, a)
+#elif defined(LLVM_BUILTIN_UNREACHABLE)
+// As of today, clang does not support __builtin_assume_aligned.
+# define LLVM_ASSUME_ALIGNED(p, a) \
+           (((uintptr_t(p) % (a)) == 0) ? (p) : (LLVM_BUILTIN_UNREACHABLE, (p)))
+#else
+# define LLVM_ASSUME_ALIGNED(p, a) (p)
+#endif
+
+/// \macro LLVM_ALIGNAS
+/// Used to specify a minimum alignment for a structure or variable.
+#if __GNUC__ && !__has_feature(cxx_alignas) && !LLVM_GNUC_PREREQ(4, 8, 1)
+# define LLVM_ALIGNAS(x) __attribute__((aligned(x)))
+#else
+# define LLVM_ALIGNAS(x) alignas(x)
+#endif
+
+/// \macro LLVM_PACKED
+/// Used to specify a packed structure.
+/// LLVM_PACKED(
+///    struct A {
+///      int i;
+///      int j;
+///      int k;
+///      long long l;
+///   });
+///
+/// LLVM_PACKED_START
+/// struct B {
+///   int i;
+///   int j;
+///   int k;
+///   long long l;
+/// };
+/// LLVM_PACKED_END
+#ifdef _MSC_VER
+# define LLVM_PACKED(d) __pragma(pack(push, 1)) d __pragma(pack(pop))
+# define LLVM_PACKED_START __pragma(pack(push, 1))
+# define LLVM_PACKED_END   __pragma(pack(pop))
+#else
+# define LLVM_PACKED(d) d __attribute__((packed))
+# define LLVM_PACKED_START _Pragma("pack(push, 1)")
+# define LLVM_PACKED_END   _Pragma("pack(pop)")
+#endif
+
+/// \macro LLVM_PTR_SIZE
+/// A constant integer equivalent to the value of sizeof(void*).
+/// Generally used in combination with LLVM_ALIGNAS or when doing computation in
+/// the preprocessor.
+#ifdef __SIZEOF_POINTER__
+# define LLVM_PTR_SIZE __SIZEOF_POINTER__
+#elif defined(_WIN64)
+# define LLVM_PTR_SIZE 8
+#elif defined(_WIN32)
+# define LLVM_PTR_SIZE 4
+#elif defined(_MSC_VER)
+# error "could not determine LLVM_PTR_SIZE as a constant int for MSVC"
+#else
+# define LLVM_PTR_SIZE sizeof(void *)
+#endif
+
+/// \macro LLVM_MEMORY_SANITIZER_BUILD
+/// Whether LLVM itself is built with MemorySanitizer instrumentation.
+#if __has_feature(memory_sanitizer)
+# define LLVM_MEMORY_SANITIZER_BUILD 1
+# include <sanitizer/msan_interface.h>
+#else
+# define LLVM_MEMORY_SANITIZER_BUILD 0
+# define __msan_allocated_memory(p, size)
+# define __msan_unpoison(p, size)
+#endif
+
+/// \macro LLVM_ADDRESS_SANITIZER_BUILD
+/// Whether LLVM itself is built with AddressSanitizer instrumentation.
+#if __has_feature(address_sanitizer) || defined(__SANITIZE_ADDRESS__)
+# define LLVM_ADDRESS_SANITIZER_BUILD 1
+# include <sanitizer/asan_interface.h>
+#else
+# define LLVM_ADDRESS_SANITIZER_BUILD 0
+# define __asan_poison_memory_region(p, size)
+# define __asan_unpoison_memory_region(p, size)
+#endif
+
+/// \macro LLVM_THREAD_SANITIZER_BUILD
+/// Whether LLVM itself is built with ThreadSanitizer instrumentation.
+#if __has_feature(thread_sanitizer) || defined(__SANITIZE_THREAD__)
+# define LLVM_THREAD_SANITIZER_BUILD 1
+#else
+# define LLVM_THREAD_SANITIZER_BUILD 0
+#endif
+
+#if LLVM_THREAD_SANITIZER_BUILD
+// Thread Sanitizer is a tool that finds races in code.
+// See http://code.google.com/p/data-race-test/wiki/DynamicAnnotations .
+// tsan detects these exact functions by name.
+#ifdef __cplusplus
+extern "C" {
+#endif
+void AnnotateHappensAfter(const char *file, int line, const volatile void *cv);
+void AnnotateHappensBefore(const char *file, int line, const volatile void *cv);
+void AnnotateIgnoreWritesBegin(const char *file, int line);
+void AnnotateIgnoreWritesEnd(const char *file, int line);
+#ifdef __cplusplus
+}
+#endif
+
+// This marker is used to define a happens-before arc. The race detector will
+// infer an arc from the begin to the end when they share the same pointer
+// argument.
+# define TsanHappensBefore(cv) AnnotateHappensBefore(__FILE__, __LINE__, cv)
+
+// This marker defines the destination of a happens-before arc.
+# define TsanHappensAfter(cv) AnnotateHappensAfter(__FILE__, __LINE__, cv)
+
+// Ignore any races on writes between here and the next TsanIgnoreWritesEnd.
+# define TsanIgnoreWritesBegin() AnnotateIgnoreWritesBegin(__FILE__, __LINE__)
+
+// Resume checking for racy writes.
+# define TsanIgnoreWritesEnd() AnnotateIgnoreWritesEnd(__FILE__, __LINE__)
+#else
+# define TsanHappensBefore(cv)
+# define TsanHappensAfter(cv)
+# define TsanIgnoreWritesBegin()
+# define TsanIgnoreWritesEnd()
+#endif
+
+/// \macro LLVM_NO_SANITIZE
+/// Disable a particular sanitizer for a function.
+#if __has_attribute(no_sanitize)
+#define LLVM_NO_SANITIZE(KIND) __attribute__((no_sanitize(KIND)))
+#else
+#define LLVM_NO_SANITIZE(KIND)
+#endif
+
+/// Mark debug helper function definitions like dump() that should not be
+/// stripped from debug builds.
+/// Note that you should also surround dump() functions with
+/// `#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)` so they do always
+/// get stripped in release builds.
+// FIXME: Move this to a private config.h as it's not usable in public headers.
+#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
+#define LLVM_DUMP_METHOD LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED
+#else
+#define LLVM_DUMP_METHOD LLVM_ATTRIBUTE_NOINLINE
+#endif
+
+/// \macro LLVM_PRETTY_FUNCTION
+/// Gets a user-friendly looking function signature for the current scope
+/// using the best available method on each platform.  The exact format of the
+/// resulting string is implementation specific and non-portable, so this should
+/// only be used, for example, for logging or diagnostics.
+#if defined(_MSC_VER)
+#define LLVM_PRETTY_FUNCTION __FUNCSIG__
+#elif defined(__GNUC__) || defined(__clang__)
+#define LLVM_PRETTY_FUNCTION __PRETTY_FUNCTION__
+#else
+#define LLVM_PRETTY_FUNCTION __func__
+#endif
+
+/// \macro LLVM_THREAD_LOCAL
+/// A thread-local storage specifier which can be used with globals,
+/// extern globals, and static globals.
+///
+/// This is essentially an extremely restricted analog to C++11's thread_local
+/// support, and uses that when available. However, it falls back on
+/// platform-specific or vendor-provided extensions when necessary. These
+/// extensions don't support many of the C++11 thread_local's features. You
+/// should only use this for PODs that you can statically initialize to
+/// some constant value. In almost all circumstances this is most appropriate
+/// for use with a pointer, integer, or small aggregation of pointers and
+/// integers.
+#if LLVM_ENABLE_THREADS
+#if __has_feature(cxx_thread_local)
+#define LLVM_THREAD_LOCAL thread_local
+#elif defined(_MSC_VER)
+// MSVC supports this with a __declspec.
+#define LLVM_THREAD_LOCAL __declspec(thread)
+#else
+// Clang, GCC, and other compatible compilers used __thread prior to C++11 and
+// we only need the restricted functionality that provides.
+#define LLVM_THREAD_LOCAL __thread
+#endif
+#else // !LLVM_ENABLE_THREADS
+// If threading is disabled entirely, this compiles to nothing and you get
+// a normal global variable.
+#define LLVM_THREAD_LOCAL
+#endif
+
+/// \macro LLVM_ENABLE_EXCEPTIONS
+/// Whether LLVM is built with exception support.
+#if __has_feature(cxx_exceptions)
+#define LLVM_ENABLE_EXCEPTIONS 1
+#elif defined(__GNUC__) && defined(__EXCEPTIONS)
+#define LLVM_ENABLE_EXCEPTIONS 1
+#elif defined(_MSC_VER) && defined(_CPPUNWIND)
+#define LLVM_ENABLE_EXCEPTIONS 1
+#endif
+
+namespace llvm {
+
+/// Allocate a buffer of memory with the given size and alignment.
+///
+/// When the compiler supports aligned operator new, this will use it to to
+/// handle even over-aligned allocations.
+///
+/// However, this doesn't make any attempt to leverage the fancier techniques
+/// like posix_memalign due to portability. It is mostly intended to allow
+/// compatibility with platforms that, after aligned allocation was added, use
+/// reduced default alignment.
+inline void *allocate_buffer(size_t Size, size_t Alignment) {
+  return ::operator new(Size
+#if __cpp_aligned_new
+                        ,
+                        std::align_val_t(Alignment)
+#endif
+  );
+}
+
+/// Deallocate a buffer of memory with the given size and alignment.
+///
+/// If supported, this will used the sized delete operator. Also if supported,
+/// this will pass the alignment to the delete operator.
+///
+/// The pointer must have been allocated with the corresponding new operator,
+/// most likely using the above helper.
+inline void deallocate_buffer(void *Ptr, size_t Size, size_t Alignment) {
+  ::operator delete(Ptr
+#if __cpp_sized_deallocation
+                    ,
+                    Size
+#endif
+#if __cpp_aligned_new
+                    ,
+                    std::align_val_t(Alignment)
+#endif
+  );
+}
+
+} // End namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/Compression.h b/linux-x64/clang/include/llvm/Support/Compression.h
index 2d191ab..f7258f4 100644
--- a/linux-x64/clang/include/llvm/Support/Compression.h
+++ b/linux-x64/clang/include/llvm/Support/Compression.h
@@ -23,17 +23,15 @@
 
 namespace zlib {
 
-enum CompressionLevel {
-  NoCompression,
-  DefaultCompression,
-  BestSpeedCompression,
-  BestSizeCompression
-};
+static constexpr int NoCompression = 0;
+static constexpr int BestSpeedCompression = 1;
+static constexpr int DefaultCompression = 6;
+static constexpr int BestSizeCompression = 9;
 
 bool isAvailable();
 
 Error compress(StringRef InputBuffer, SmallVectorImpl<char> &CompressedBuffer,
-               CompressionLevel Level = DefaultCompression);
+               int Level = DefaultCompression);
 
 Error uncompress(StringRef InputBuffer, char *UncompressedBuffer,
                  size_t &UncompressedSize);
@@ -49,4 +47,3 @@
 } // End of namespace llvm
 
 #endif
-
diff --git a/linux-x64/clang/include/llvm/Support/ConvertUTF.h b/linux-x64/clang/include/llvm/Support/ConvertUTF.h
index 99ae171..6ae56c2 100644
--- a/linux-x64/clang/include/llvm/Support/ConvertUTF.h
+++ b/linux-x64/clang/include/llvm/Support/ConvertUTF.h
@@ -92,6 +92,7 @@
 
 #include <cstddef>
 #include <string>
+#include <system_error>
 
 // Wrap everything in namespace llvm so that programs can link with llvm and
 // their own version of the unicode libraries.
@@ -286,6 +287,21 @@
 bool convertUTF8ToUTF16String(StringRef SrcUTF8,
                               SmallVectorImpl<UTF16> &DstUTF16);
 
+#if defined(_WIN32)
+namespace sys {
+namespace windows {
+std::error_code UTF8ToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
+/// Convert to UTF16 from the current code page used in the system
+std::error_code CurCPToUTF16(StringRef utf8, SmallVectorImpl<wchar_t> &utf16);
+std::error_code UTF16ToUTF8(const wchar_t *utf16, size_t utf16_len,
+                            SmallVectorImpl<char> &utf8);
+/// Convert from UTF16 to the current code page used in the system
+std::error_code UTF16ToCurCP(const wchar_t *utf16, size_t utf16_len,
+                             SmallVectorImpl<char> &utf8);
+} // namespace windows
+} // namespace sys
+#endif
+
 } /* end namespace llvm */
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/CrashRecoveryContext.h b/linux-x64/clang/include/llvm/Support/CrashRecoveryContext.h
index 7026231..7b3fd4f 100644
--- a/linux-x64/clang/include/llvm/Support/CrashRecoveryContext.h
+++ b/linux-x64/clang/include/llvm/Support/CrashRecoveryContext.h
@@ -54,7 +54,7 @@
 
   /// Register cleanup handler, which is used when the recovery context is
   /// finished.
-  /// The recovery context owns the the handler.
+  /// The recovery context owns the handler.
   void registerCleanup(CrashRecoveryContextCleanup *cleanup);
 
   void unregisterCleanup(CrashRecoveryContextCleanup *cleanup);
diff --git a/linux-x64/clang/include/llvm/Support/DataExtractor.h b/linux-x64/clang/include/llvm/Support/DataExtractor.h
index 3144788..2b16398 100644
--- a/linux-x64/clang/include/llvm/Support/DataExtractor.h
+++ b/linux-x64/clang/include/llvm/Support/DataExtractor.h
@@ -15,7 +15,7 @@
 
 namespace llvm {
 
-/// An auxiliary type to facilitate extraction of 3-byte entities. 
+/// An auxiliary type to facilitate extraction of 3-byte entities.
 struct Uint24 {
   uint8_t Bytes[3];
   Uint24(uint8_t U) {
@@ -51,13 +51,13 @@
   DataExtractor(StringRef Data, bool IsLittleEndian, uint8_t AddressSize)
     : Data(Data), IsLittleEndian(IsLittleEndian), AddressSize(AddressSize) {}
 
-  /// \brief Get the data pointed to by this extractor.
+  /// Get the data pointed to by this extractor.
   StringRef getData() const { return Data; }
-  /// \brief Get the endianness for this extractor.
+  /// Get the endianness for this extractor.
   bool isLittleEndian() const { return IsLittleEndian; }
-  /// \brief Get the address size for this extractor.
+  /// Get the address size for this extractor.
   uint8_t getAddressSize() const { return AddressSize; }
-  /// \brief Set the address size for this extractor.
+  /// Set the address size for this extractor.
   void setAddressSize(uint8_t Size) { AddressSize = Size; }
 
   /// Extract a C string from \a *offset_ptr.
diff --git a/linux-x64/clang/include/llvm/Support/Debug.h b/linux-x64/clang/include/llvm/Support/Debug.h
index 48e9e1b..980abfb 100644
--- a/linux-x64/clang/include/llvm/Support/Debug.h
+++ b/linux-x64/clang/include/llvm/Support/Debug.h
@@ -11,17 +11,18 @@
 // code, without it being enabled all of the time, and without having to add
 // command line options to enable it.
 //
-// In particular, just wrap your code with the DEBUG() macro, and it will be
-// enabled automatically if you specify '-debug' on the command-line.
-// DEBUG() requires the DEBUG_TYPE macro to be defined. Set it to "foo" specify
-// that your debug code belongs to class "foo". Be careful that you only do
-// this after including Debug.h and not around any #include of headers. Headers
-// should define and undef the macro acround the code that needs to use the
-// DEBUG() macro. Then, on the command line, you can specify '-debug-only=foo'
-// to enable JUST the debug information for the foo class.
+// In particular, just wrap your code with the LLVM_DEBUG() macro, and it will
+// be enabled automatically if you specify '-debug' on the command-line.
+// LLVM_DEBUG() requires the DEBUG_TYPE macro to be defined. Set it to "foo"
+// specify that your debug code belongs to class "foo". Be careful that you only
+// do this after including Debug.h and not around any #include of headers.
+// Headers should define and undef the macro acround the code that needs to use
+// the LLVM_DEBUG() macro. Then, on the command line, you can specify
+// '-debug-only=foo' to enable JUST the debug information for the foo class.
 //
 // When compiling without assertions, the -debug-* options and all code in
-// DEBUG() statements disappears, so it does not affect the runtime of the code.
+// LLVM_DEBUG() statements disappears, so it does not affect the runtime of the
+// code.
 //
 //===----------------------------------------------------------------------===//
 
@@ -113,9 +114,9 @@
 // debug build, then the code specified as the option to the macro will be
 // executed.  Otherwise it will not be.  Example:
 //
-// DEBUG(dbgs() << "Bitset contains: " << Bitset << "\n");
+// LLVM_DEBUG(dbgs() << "Bitset contains: " << Bitset << "\n");
 //
-#define DEBUG(X) DEBUG_WITH_TYPE(DEBUG_TYPE, X)
+#define LLVM_DEBUG(X) DEBUG_WITH_TYPE(DEBUG_TYPE, X)
 
 } // end namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Support/DebugCounter.h b/linux-x64/clang/include/llvm/Support/DebugCounter.h
index 52e1bd7..83bd5a0 100644
--- a/linux-x64/clang/include/llvm/Support/DebugCounter.h
+++ b/linux-x64/clang/include/llvm/Support/DebugCounter.h
@@ -7,7 +7,7 @@
 //
 //===----------------------------------------------------------------------===//
 /// \file
-/// \brief This file provides an implementation of debug counters.  Debug
+/// This file provides an implementation of debug counters.  Debug
 /// counters are a tool that let you narrow down a miscompilation to a specific
 /// thing happening.
 ///
@@ -55,7 +55,7 @@
 
 class DebugCounter {
 public:
-  /// \brief Returns a reference to the singleton instance.
+  /// Returns a reference to the singleton instance.
   static DebugCounter &instance();
 
   // Used by the command line option parser to push a new value it parsed.
@@ -70,55 +70,49 @@
     return instance().addCounter(Name, Desc);
   }
   inline static bool shouldExecute(unsigned CounterName) {
-// Compile to nothing when debugging is off
-#ifdef NDEBUG
-    return true;
-#else
+    if (!isCountingEnabled())
+      return true;
+
     auto &Us = instance();
     auto Result = Us.Counters.find(CounterName);
     if (Result != Us.Counters.end()) {
-      auto &CounterPair = Result->second;
-      // We only execute while the skip (first) is zero and the count (second)
-      // is non-zero.
+      auto &CounterInfo = Result->second;
+      ++CounterInfo.Count;
+
+      // We only execute while the Skip is not smaller than Count,
+      // and the StopAfter + Skip is larger than Count.
       // Negative counters always execute.
-      if (CounterPair.first < 0)
+      if (CounterInfo.Skip < 0)
         return true;
-      if (CounterPair.first != 0) {
-        --CounterPair.first;
+      if (CounterInfo.Skip >= CounterInfo.Count)
         return false;
-      }
-      if (CounterPair.second < 0)
+      if (CounterInfo.StopAfter < 0)
         return true;
-      if (CounterPair.second != 0) {
-        --CounterPair.second;
-        return true;
-      }
-      return false;
+      return CounterInfo.StopAfter + CounterInfo.Skip >= CounterInfo.Count;
     }
     // Didn't find the counter, should we warn?
     return true;
-#endif // NDEBUG
   }
 
   // Return true if a given counter had values set (either programatically or on
   // the command line).  This will return true even if those values are
   // currently in a state where the counter will always execute.
   static bool isCounterSet(unsigned ID) {
-    return instance().Counters.count(ID);
+    return instance().Counters[ID].IsSet;
   }
 
-  // Return the skip and count for a counter. This only works for set counters.
-  static std::pair<int, int> getCounterValue(unsigned ID) {
+  // Return the Count for a counter. This only works for set counters.
+  static int64_t getCounterValue(unsigned ID) {
     auto &Us = instance();
     auto Result = Us.Counters.find(ID);
     assert(Result != Us.Counters.end() && "Asking about a non-set counter");
-    return Result->second;
+    return Result->second.Count;
   }
 
-  // Set a registered counter to a given value.
-  static void setCounterValue(unsigned ID, const std::pair<int, int> &Val) {
+  // Set a registered counter to a given Count value.
+  static void setCounterValue(unsigned ID, int64_t Count) {
     auto &Us = instance();
-    Us.Counters[ID] = Val;
+    Us.Counters[ID].Count = Count;
   }
 
   // Dump or print the current counter set into llvm::dbgs().
@@ -136,7 +130,7 @@
 
   // Return the name and description of the counter with the given ID.
   std::pair<std::string, std::string> getCounterInfo(unsigned ID) const {
-    return std::make_pair(RegisteredCounters[ID], CounterDesc.lookup(ID));
+    return std::make_pair(RegisteredCounters[ID], Counters.lookup(ID).Desc);
   }
 
   // Iterate through the registered counters
@@ -146,15 +140,43 @@
   }
   CounterVector::const_iterator end() const { return RegisteredCounters.end(); }
 
+  // Force-enables counting all DebugCounters.
+  //
+  // Since DebugCounters are incompatible with threading (not only do they not
+  // make sense, but we'll also see data races), this should only be used in
+  // contexts where we're certain we won't spawn threads.
+  static void enableAllCounters() { instance().Enabled = true; }
+
 private:
+  static bool isCountingEnabled() {
+// Compile to nothing when debugging is off
+#ifdef NDEBUG
+    return false;
+#else
+    return instance().Enabled;
+#endif
+  }
+
   unsigned addCounter(const std::string &Name, const std::string &Desc) {
     unsigned Result = RegisteredCounters.insert(Name);
-    CounterDesc[Result] = Desc;
+    Counters[Result] = {};
+    Counters[Result].Desc = Desc;
     return Result;
   }
-  DenseMap<unsigned, std::pair<long, long>> Counters;
-  DenseMap<unsigned, std::string> CounterDesc;
+  // Struct to store counter info.
+  struct CounterInfo {
+    int64_t Count = 0;
+    int64_t Skip = 0;
+    int64_t StopAfter = -1;
+    bool IsSet = false;
+    std::string Desc;
+  };
+  DenseMap<unsigned, CounterInfo> Counters;
   CounterVector RegisteredCounters;
+
+  // Whether we should do DebugCounting at all. DebugCounters aren't
+  // thread-safe, so this should always be false in multithreaded scenarios.
+  bool Enabled = false;
 };
 
 #define DEBUG_COUNTER(VARNAME, COUNTERNAME, DESC)                              \
diff --git a/linux-x64/clang/include/llvm/Support/DynamicLibrary.h b/linux-x64/clang/include/llvm/Support/DynamicLibrary.h
index 469d5df..9563b48 100644
--- a/linux-x64/clang/include/llvm/Support/DynamicLibrary.h
+++ b/linux-x64/clang/include/llvm/Support/DynamicLibrary.h
@@ -64,7 +64,7 @@
     /// if the library fails to load.
     ///
     /// It is safe to call this function multiple times for the same library.
-    /// @brief Open a dynamic library permanently.
+    /// Open a dynamic library permanently.
     static DynamicLibrary getPermanentLibrary(const char *filename,
                                               std::string *errMsg = nullptr);
 
@@ -110,10 +110,10 @@
     /// search permanently loaded libraries (getPermanentLibrary()) as well
     /// as explicitly registered symbols (AddSymbol()).
     /// @throws std::string on error.
-    /// @brief Search through libraries for address of a symbol
+    /// Search through libraries for address of a symbol
     static void *SearchForAddressOfSymbol(const char *symbolName);
 
-    /// @brief Convenience function for C++ophiles.
+    /// Convenience function for C++ophiles.
     static void *SearchForAddressOfSymbol(const std::string &symbolName) {
       return SearchForAddressOfSymbol(symbolName.c_str());
     }
@@ -121,7 +121,7 @@
     /// This functions permanently adds the symbol \p symbolName with the
     /// value \p symbolValue.  These symbols are searched before any
     /// libraries.
-    /// @brief Add searchable symbol/value pair.
+    /// Add searchable symbol/value pair.
     static void AddSymbol(StringRef symbolName, void *symbolValue);
 
     class HandleSet;
diff --git a/linux-x64/clang/include/llvm/Support/Endian.h b/linux-x64/clang/include/llvm/Support/Endian.h
index f50d9b5..a4d3f4f 100644
--- a/linux-x64/clang/include/llvm/Support/Endian.h
+++ b/linux-x64/clang/include/llvm/Support/Endian.h
@@ -34,7 +34,7 @@
 
 namespace detail {
 
-/// \brief ::value is either alignment, or alignof(T) if alignment is 0.
+/// ::value is either alignment, or alignof(T) if alignment is 0.
 template<class T, int alignment>
 struct PickAlignment {
  enum { value = alignment == 0 ? alignof(T) : alignment };
diff --git a/linux-x64/clang/include/llvm/Support/EndianStream.h b/linux-x64/clang/include/llvm/Support/EndianStream.h
index 43ecd4a..9742e25 100644
--- a/linux-x64/clang/include/llvm/Support/EndianStream.h
+++ b/linux-x64/clang/include/llvm/Support/EndianStream.h
@@ -23,44 +23,44 @@
 namespace support {
 
 namespace endian {
+
+template <typename value_type>
+inline void write(raw_ostream &os, value_type value, endianness endian) {
+  value = byte_swap<value_type>(value, endian);
+  os.write((const char *)&value, sizeof(value_type));
+}
+
+template <>
+inline void write<float>(raw_ostream &os, float value, endianness endian) {
+  write(os, FloatToBits(value), endian);
+}
+
+template <>
+inline void write<double>(raw_ostream &os, double value,
+                          endianness endian) {
+  write(os, DoubleToBits(value), endian);
+}
+
+template <typename value_type>
+inline void write(raw_ostream &os, ArrayRef<value_type> vals,
+                  endianness endian) {
+  for (value_type v : vals)
+    write(os, v, endian);
+}
+
 /// Adapter to write values to a stream in a particular byte order.
-template <endianness endian> struct Writer {
+struct Writer {
   raw_ostream &OS;
-  Writer(raw_ostream &OS) : OS(OS) {}
-  template <typename value_type> void write(ArrayRef<value_type> Vals) {
-    for (value_type V : Vals)
-      write(V);
+  endianness Endian;
+  Writer(raw_ostream &OS, endianness Endian) : OS(OS), Endian(Endian) {}
+  template <typename value_type> void write(ArrayRef<value_type> Val) {
+    endian::write(OS, Val, Endian);
   }
   template <typename value_type> void write(value_type Val) {
-    Val = byte_swap<value_type, endian>(Val);
-    OS.write((const char *)&Val, sizeof(value_type));
+    endian::write(OS, Val, Endian);
   }
 };
 
-template <>
-template <>
-inline void Writer<little>::write<float>(float Val) {
-  write(FloatToBits(Val));
-}
-
-template <>
-template <>
-inline void Writer<little>::write<double>(double Val) {
-  write(DoubleToBits(Val));
-}
-
-template <>
-template <>
-inline void Writer<big>::write<float>(float Val) {
-  write(FloatToBits(Val));
-}
-
-template <>
-template <>
-inline void Writer<big>::write<double>(double Val) {
-  write(DoubleToBits(Val));
-}
-
 } // end namespace endian
 
 } // end namespace support
diff --git a/linux-x64/clang/include/llvm/Support/Errc.h b/linux-x64/clang/include/llvm/Support/Errc.h
index 80bfe2a..dce4278 100644
--- a/linux-x64/clang/include/llvm/Support/Errc.h
+++ b/linux-x64/clang/include/llvm/Support/Errc.h
@@ -63,6 +63,7 @@
   no_such_process = int(std::errc::no_such_process),
   not_a_directory = int(std::errc::not_a_directory),
   not_enough_memory = int(std::errc::not_enough_memory),
+  not_supported = int(std::errc::not_supported),
   operation_not_permitted = int(std::errc::operation_not_permitted),
   permission_denied = int(std::errc::permission_denied),
   read_only_file_system = int(std::errc::read_only_file_system),
diff --git a/linux-x64/clang/include/llvm/Support/Errno.h b/linux-x64/clang/include/llvm/Support/Errno.h
index 35dc1ea..8069c36 100644
--- a/linux-x64/clang/include/llvm/Support/Errno.h
+++ b/linux-x64/clang/include/llvm/Support/Errno.h
@@ -34,9 +34,10 @@
 inline auto RetryAfterSignal(const FailT &Fail, const Fun &F,
                              const Args &... As) -> decltype(F(As...)) {
   decltype(F(As...)) Res;
-  do
+  do {
+    errno = 0;
     Res = F(As...);
-  while (Res == Fail && errno == EINTR);
+  } while (Res == Fail && errno == EINTR);
   return Res;
 }
 
diff --git a/linux-x64/clang/include/llvm/Support/Error.h b/linux-x64/clang/include/llvm/Support/Error.h
index 2527f89..8015cab 100644
--- a/linux-x64/clang/include/llvm/Support/Error.h
+++ b/linux-x64/clang/include/llvm/Support/Error.h
@@ -24,6 +24,7 @@
 #include "llvm/Support/Debug.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/ErrorOr.h"
+#include "llvm/Support/Format.h"
 #include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <cassert>
@@ -302,6 +303,14 @@
     return Tmp;
   }
 
+  friend raw_ostream &operator<<(raw_ostream &OS, const Error &E) {
+    if (auto P = E.getPtr())
+      P->log(OS);
+    else
+      OS << "success";
+    return OS;
+  }
+
   ErrorInfoBase *Payload = nullptr;
 };
 
@@ -421,7 +430,7 @@
 
   static const bool isRef = std::is_reference<T>::value;
 
-  using wrap = ReferenceStorage<typename std::remove_reference<T>::type>;
+  using wrap = std::reference_wrapper<typename std::remove_reference<T>::type>;
 
   using error_type = std::unique_ptr<ErrorInfoBase>;
 
@@ -505,7 +514,7 @@
       getErrorStorage()->~error_type();
   }
 
-  /// \brief Return false if there is an error.
+  /// Return false if there is an error.
   explicit operator bool() {
 #if LLVM_ENABLE_ABI_BREAKING_CHECKS
     Unchecked = HasError;
@@ -513,24 +522,24 @@
     return !HasError;
   }
 
-  /// \brief Returns a reference to the stored T value.
+  /// Returns a reference to the stored T value.
   reference get() {
     assertIsChecked();
     return *getStorage();
   }
 
-  /// \brief Returns a const reference to the stored T value.
+  /// Returns a const reference to the stored T value.
   const_reference get() const {
     assertIsChecked();
     return const_cast<Expected<T> *>(this)->get();
   }
 
-  /// \brief Check that this Expected<T> is an error of type ErrT.
+  /// Check that this Expected<T> is an error of type ErrT.
   template <typename ErrT> bool errorIsA() const {
     return HasError && (*getErrorStorage())->template isA<ErrT>();
   }
 
-  /// \brief Take ownership of the stored error.
+  /// Take ownership of the stored error.
   /// After calling this the Expected<T> is in an indeterminate state that can
   /// only be safely destructed. No further calls (beside the destructor) should
   /// be made on the Expected<T> vaule.
@@ -541,25 +550,25 @@
     return HasError ? Error(std::move(*getErrorStorage())) : Error::success();
   }
 
-  /// \brief Returns a pointer to the stored T value.
+  /// Returns a pointer to the stored T value.
   pointer operator->() {
     assertIsChecked();
     return toPointer(getStorage());
   }
 
-  /// \brief Returns a const pointer to the stored T value.
+  /// Returns a const pointer to the stored T value.
   const_pointer operator->() const {
     assertIsChecked();
     return toPointer(getStorage());
   }
 
-  /// \brief Returns a reference to the stored T value.
+  /// Returns a reference to the stored T value.
   reference operator*() {
     assertIsChecked();
     return *getStorage();
   }
 
-  /// \brief Returns a const reference to the stored T value.
+  /// Returns a const reference to the stored T value.
   const_reference operator*() const {
     assertIsChecked();
     return *getStorage();
@@ -1113,6 +1122,18 @@
   std::error_code EC;
 };
 
+/// Create formatted StringError object.
+template <typename... Ts>
+Error createStringError(std::error_code EC, char const *Fmt,
+                        const Ts &... Vals) {
+  std::string Buffer;
+  raw_string_ostream Stream(Buffer);
+  Stream << format(Fmt, Vals...);
+  return make_error<StringError>(Stream.str(), EC);
+}
+
+Error createStringError(std::error_code EC, char const *Msg);
+
 /// Helper for check-and-exit error handling.
 ///
 /// For tool use only. NOT FOR USE IN LIBRARY CODE.
diff --git a/linux-x64/clang/include/llvm/Support/ErrorOr.h b/linux-x64/clang/include/llvm/Support/ErrorOr.h
index 061fb65..e6ce764 100644
--- a/linux-x64/clang/include/llvm/Support/ErrorOr.h
+++ b/linux-x64/clang/include/llvm/Support/ErrorOr.h
@@ -24,19 +24,7 @@
 
 namespace llvm {
 
-/// \brief Stores a reference that can be changed.
-template <typename T>
-class ReferenceStorage {
-  T *Storage;
-
-public:
-  ReferenceStorage(T &Ref) : Storage(&Ref) {}
-
-  operator T &() const { return *Storage; }
-  T &get() const { return *Storage; }
-};
-
-/// \brief Represents either an error or a value T.
+/// Represents either an error or a value T.
 ///
 /// ErrorOr<T> is a pointer-like class that represents the result of an
 /// operation. The result is either an error, or a value of type T. This is
@@ -71,7 +59,7 @@
 
   static const bool isRef = std::is_reference<T>::value;
 
-  using wrap = ReferenceStorage<typename std::remove_reference<T>::type>;
+  using wrap = std::reference_wrapper<typename std::remove_reference<T>::type>;
 
 public:
   using storage_type = typename std::conditional<isRef, wrap, T>::type;
@@ -161,7 +149,7 @@
       getStorage()->~storage_type();
   }
 
-  /// \brief Return false if there is an error.
+  /// Return false if there is an error.
   explicit operator bool() const {
     return !HasError;
   }
diff --git a/linux-x64/clang/include/llvm/Support/FileCheck.h b/linux-x64/clang/include/llvm/Support/FileCheck.h
new file mode 100644
index 0000000..e68acca
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/FileCheck.h
@@ -0,0 +1,201 @@
+//==-- llvm/Support/FileCheck.h ---------------------------*- C++ -*-==//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file This file has some utilities to use FileCheck as an API
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_FILECHECK_H
+#define LLVM_SUPPORT_FILECHECK_H
+
+#include "llvm/ADT/StringMap.h"
+#include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Regex.h"
+#include "llvm/Support/SourceMgr.h"
+#include <vector>
+#include <map>
+
+namespace llvm {
+
+/// Contains info about various FileCheck options.
+struct FileCheckRequest {
+  std::vector<std::string> CheckPrefixes;
+  bool NoCanonicalizeWhiteSpace = false;
+  std::vector<std::string> ImplicitCheckNot;
+  std::vector<std::string> GlobalDefines;
+  bool AllowEmptyInput = false;
+  bool MatchFullLines = false;
+  bool EnableVarScope = false;
+  bool AllowDeprecatedDagOverlap = false;
+  bool Verbose = false;
+  bool VerboseVerbose = false;
+};
+
+
+//===----------------------------------------------------------------------===//
+// Pattern Handling Code.
+//===----------------------------------------------------------------------===//
+
+namespace Check {
+enum FileCheckType {
+  CheckNone = 0,
+  CheckPlain,
+  CheckNext,
+  CheckSame,
+  CheckNot,
+  CheckDAG,
+  CheckLabel,
+  CheckEmpty,
+
+  /// Indicates the pattern only matches the end of file. This is used for
+  /// trailing CHECK-NOTs.
+  CheckEOF,
+
+  /// Marks when parsing found a -NOT check combined with another CHECK suffix.
+  CheckBadNot
+};
+}
+
+class FileCheckPattern {
+  SMLoc PatternLoc;
+
+  /// A fixed string to match as the pattern or empty if this pattern requires
+  /// a regex match.
+  StringRef FixedStr;
+
+  /// A regex string to match as the pattern or empty if this pattern requires
+  /// a fixed string to match.
+  std::string RegExStr;
+
+  /// Entries in this vector map to uses of a variable in the pattern, e.g.
+  /// "foo[[bar]]baz".  In this case, the RegExStr will contain "foobaz" and
+  /// we'll get an entry in this vector that tells us to insert the value of
+  /// bar at offset 3.
+  std::vector<std::pair<StringRef, unsigned>> VariableUses;
+
+  /// Maps definitions of variables to their parenthesized capture numbers.
+  /// 
+  /// E.g. for the pattern "foo[[bar:.*]]baz", VariableDefs will map "bar" to
+  /// 1.
+  std::map<StringRef, unsigned> VariableDefs;
+
+  Check::FileCheckType CheckTy;
+
+  /// Contains the number of line this pattern is in.
+  unsigned LineNumber;
+
+public:
+  explicit FileCheckPattern(Check::FileCheckType Ty)
+      : CheckTy(Ty) {}
+
+  /// Returns the location in source code.
+  SMLoc getLoc() const { return PatternLoc; }
+
+  bool ParsePattern(StringRef PatternStr, StringRef Prefix, SourceMgr &SM,
+                    unsigned LineNumber, const FileCheckRequest &Req);
+  size_t Match(StringRef Buffer, size_t &MatchLen,
+               StringMap<StringRef> &VariableTable) const;
+  void PrintVariableUses(const SourceMgr &SM, StringRef Buffer,
+                         const StringMap<StringRef> &VariableTable,
+                         SMRange MatchRange = None) const;
+  void PrintFuzzyMatch(const SourceMgr &SM, StringRef Buffer,
+                       const StringMap<StringRef> &VariableTable) const;
+
+  bool hasVariable() const {
+    return !(VariableUses.empty() && VariableDefs.empty());
+  }
+
+  Check::FileCheckType getCheckTy() const { return CheckTy; }
+
+private:
+  bool AddRegExToRegEx(StringRef RS, unsigned &CurParen, SourceMgr &SM);
+  void AddBackrefToRegEx(unsigned BackrefNum);
+  unsigned
+  ComputeMatchDistance(StringRef Buffer,
+                       const StringMap<StringRef> &VariableTable) const;
+  bool EvaluateExpression(StringRef Expr, std::string &Value) const;
+  size_t FindRegexVarEnd(StringRef Str, SourceMgr &SM);
+};
+
+//===----------------------------------------------------------------------===//
+// Check Strings.
+//===----------------------------------------------------------------------===//
+
+/// A check that we found in the input file.
+struct FileCheckString {
+  /// The pattern to match.
+  FileCheckPattern Pat;
+
+  /// Which prefix name this check matched.
+  StringRef Prefix;
+
+  /// The location in the match file that the check string was specified.
+  SMLoc Loc;
+
+  /// All of the strings that are disallowed from occurring between this match
+  /// string and the previous one (or start of file).
+  std::vector<FileCheckPattern> DagNotStrings;
+
+  FileCheckString(const FileCheckPattern &P, StringRef S, SMLoc L)
+      : Pat(P), Prefix(S), Loc(L) {}
+
+  size_t Check(const SourceMgr &SM, StringRef Buffer, bool IsLabelScanMode,
+               size_t &MatchLen, StringMap<StringRef> &VariableTable,
+               FileCheckRequest &Req) const;
+
+  bool CheckNext(const SourceMgr &SM, StringRef Buffer) const;
+  bool CheckSame(const SourceMgr &SM, StringRef Buffer) const;
+  bool CheckNot(const SourceMgr &SM, StringRef Buffer,
+                const std::vector<const FileCheckPattern *> &NotStrings,
+                StringMap<StringRef> &VariableTable,
+                const FileCheckRequest &Req) const;
+  size_t CheckDag(const SourceMgr &SM, StringRef Buffer,
+                  std::vector<const FileCheckPattern *> &NotStrings,
+                  StringMap<StringRef> &VariableTable,
+                  const FileCheckRequest &Req) const;
+};
+
+/// FileCheck class takes the request and exposes various methods that
+/// use information from the request.
+class FileCheck {
+  FileCheckRequest Req;
+
+public:
+  FileCheck(FileCheckRequest Req) : Req(Req) {}
+
+  // Combines the check prefixes into a single regex so that we can efficiently
+  // scan for any of the set.
+  //
+  // The semantics are that the longest-match wins which matches our regex
+  // library.
+  Regex buildCheckPrefixRegex();
+
+  /// Read the check file, which specifies the sequence of expected strings.
+  ///
+  /// The strings are added to the CheckStrings vector. Returns true in case of
+  /// an error, false otherwise.
+  bool ReadCheckFile(SourceMgr &SM, StringRef Buffer, Regex &PrefixRE,
+                     std::vector<FileCheckString> &CheckStrings);
+
+  bool ValidateCheckPrefixes();
+
+  /// Canonicalize whitespaces in the file. Line endings are replaced with
+  /// UNIX-style '\n'.
+  StringRef CanonicalizeFile(MemoryBuffer &MB,
+                             SmallVectorImpl<char> &OutputBuffer);
+
+  /// Check the input to FileCheck provided in the \p Buffer against the \p
+  /// CheckStrings read from the check file.
+  ///
+  /// Returns false if the input fails to satisfy the checks.
+  bool CheckInput(SourceMgr &SM, StringRef Buffer,
+                  ArrayRef<FileCheckString> CheckStrings);
+};
+} // namespace llvm
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/FileOutputBuffer.h b/linux-x64/clang/include/llvm/Support/FileOutputBuffer.h
index 6aed423..ee8cbb7 100644
--- a/linux-x64/clang/include/llvm/Support/FileOutputBuffer.h
+++ b/linux-x64/clang/include/llvm/Support/FileOutputBuffer.h
@@ -30,13 +30,25 @@
 /// not committed, the file will be deleted in the FileOutputBuffer destructor.
 class FileOutputBuffer {
 public:
-  enum  {
-    F_executable = 1  /// set the 'x' bit on the resulting file
+  enum {
+    /// set the 'x' bit on the resulting file
+    F_executable = 1,
+
+    /// the contents of the new file are initialized from the file that exists
+    /// at the location (if present).  This allows in-place modification of an
+    /// existing file.
+    F_modify = 2
   };
 
   /// Factory method to create an OutputBuffer object which manages a read/write
   /// buffer of the specified size. When committed, the buffer will be written
   /// to the file at the specified path.
+  ///
+  /// When F_modify is specified and \p FilePath refers to an existing on-disk
+  /// file \p Size may be set to -1, in which case the entire file is used.
+  /// Otherwise, the file shrinks or grows as necessary based on the value of
+  /// \p Size.  It is an error to specify F_modify and Size=-1 if \p FilePath
+  /// does not exist.
   static Expected<std::unique_ptr<FileOutputBuffer>>
   create(StringRef FilePath, size_t Size, unsigned Flags = 0);
 
diff --git a/linux-x64/clang/include/llvm/Support/FileSystem.h b/linux-x64/clang/include/llvm/Support/FileSystem.h
index a9b02d9..02db459 100644
--- a/linux-x64/clang/include/llvm/Support/FileSystem.h
+++ b/linux-x64/clang/include/llvm/Support/FileSystem.h
@@ -30,6 +30,7 @@
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Chrono.h"
 #include "llvm/Support/Error.h"
 #include "llvm/Support/ErrorHandling.h"
@@ -53,6 +54,15 @@
 namespace sys {
 namespace fs {
 
+#if defined(_WIN32)
+// A Win32 HANDLE is a typedef of void*
+using file_t = void *;
+#else
+using file_t = int;
+#endif
+
+extern const file_t kInvalidFile;
+
 /// An enumeration for the file system's view of the type.
 enum class file_type {
   status_error,
@@ -153,7 +163,7 @@
   uid_t fs_st_uid = 0;
   gid_t fs_st_gid = 0;
   off_t fs_st_size = 0;
-  #elif defined (LLVM_ON_WIN32)
+  #elif defined (_WIN32)
   uint32_t LastAccessedTimeHigh = 0;
   uint32_t LastAccessedTimeLow = 0;
   uint32_t LastWriteTimeHigh = 0;
@@ -174,7 +184,7 @@
                     uid_t UID, gid_t GID, off_t Size)
       : fs_st_atime(ATime), fs_st_mtime(MTime), fs_st_uid(UID), fs_st_gid(GID),
         fs_st_size(Size), Type(Type), Perms(Perms) {}
-#elif defined(LLVM_ON_WIN32)
+#elif defined(_WIN32)
   basic_file_status(file_type Type, perms Perms, uint32_t LastAccessTimeHigh,
                     uint32_t LastAccessTimeLow, uint32_t LastWriteTimeHigh,
                     uint32_t LastWriteTimeLow, uint32_t FileSizeHigh,
@@ -196,7 +206,7 @@
   uint32_t getUser() const { return fs_st_uid; }
   uint32_t getGroup() const { return fs_st_gid; }
   uint64_t getSize() const { return fs_st_size; }
-  #elif defined (LLVM_ON_WIN32)
+  #elif defined (_WIN32)
   uint32_t getUser() const {
     return 9999; // Not applicable to Windows, so...
   }
@@ -223,7 +233,7 @@
   dev_t fs_st_dev = 0;
   nlink_t fs_st_nlinks = 0;
   ino_t fs_st_ino = 0;
-  #elif defined (LLVM_ON_WIN32)
+  #elif defined (_WIN32)
   uint32_t NumLinks = 0;
   uint32_t VolumeSerialNumber = 0;
   uint32_t FileIndexHigh = 0;
@@ -240,7 +250,7 @@
               time_t ATime, time_t MTime, uid_t UID, gid_t GID, off_t Size)
       : basic_file_status(Type, Perms, ATime, MTime, UID, GID, Size),
         fs_st_dev(Dev), fs_st_nlinks(Links), fs_st_ino(Ino) {}
-  #elif defined(LLVM_ON_WIN32)
+  #elif defined(_WIN32)
   file_status(file_type Type, perms Perms, uint32_t LinkCount,
               uint32_t LastAccessTimeHigh, uint32_t LastAccessTimeLow,
               uint32_t LastWriteTimeHigh, uint32_t LastWriteTimeLow,
@@ -262,7 +272,7 @@
 /// @name Physical Operators
 /// @{
 
-/// @brief Make \a path an absolute path.
+/// Make \a path an absolute path.
 ///
 /// Makes \a path absolute using the \a current_directory if it is not already.
 /// An empty \a path will result in the \a current_directory.
@@ -276,7 +286,7 @@
 std::error_code make_absolute(const Twine &current_directory,
                               SmallVectorImpl<char> &path);
 
-/// @brief Make \a path an absolute path.
+/// Make \a path an absolute path.
 ///
 /// Makes \a path absolute using the current directory if it is not already. An
 /// empty \a path will result in the current directory.
@@ -289,7 +299,7 @@
 ///          platform-specific error_code.
 std::error_code make_absolute(SmallVectorImpl<char> &path);
 
-/// @brief Create all the non-existent directories in path.
+/// Create all the non-existent directories in path.
 ///
 /// @param path Directories to create.
 /// @returns errc::success if is_directory(path), otherwise a platform
@@ -299,7 +309,7 @@
                                    bool IgnoreExisting = true,
                                    perms Perms = owner_all | group_all);
 
-/// @brief Create the directory in path.
+/// Create the directory in path.
 ///
 /// @param path Directory to create.
 /// @returns errc::success if is_directory(path), otherwise a platform
@@ -308,7 +318,7 @@
 std::error_code create_directory(const Twine &path, bool IgnoreExisting = true,
                                  perms Perms = owner_all | group_all);
 
-/// @brief Create a link from \a from to \a to.
+/// Create a link from \a from to \a to.
 ///
 /// The link may be a soft or a hard link, depending on the platform. The caller
 /// may not assume which one. Currently on windows it creates a hard link since
@@ -329,7 +339,7 @@
 /// specific error_code.
 std::error_code create_hard_link(const Twine &to, const Twine &from);
 
-/// @brief Collapse all . and .. patterns, resolve all symlinks, and optionally
+/// Collapse all . and .. patterns, resolve all symlinks, and optionally
 ///        expand ~ expressions to the user's home directory.
 ///
 /// @param path The path to resolve.
@@ -339,21 +349,21 @@
 std::error_code real_path(const Twine &path, SmallVectorImpl<char> &output,
                           bool expand_tilde = false);
 
-/// @brief Get the current path.
+/// Get the current path.
 ///
 /// @param result Holds the current path on return.
 /// @returns errc::success if the current path has been stored in result,
 ///          otherwise a platform-specific error_code.
 std::error_code current_path(SmallVectorImpl<char> &result);
 
-/// @brief Set the current path.
+/// Set the current path.
 ///
 /// @param path The path to set.
 /// @returns errc::success if the current path was successfully set,
 ///          otherwise a platform-specific error_code.
 std::error_code set_current_path(const Twine &path);
 
-/// @brief Remove path. Equivalent to POSIX remove().
+/// Remove path. Equivalent to POSIX remove().
 ///
 /// @param path Input path.
 /// @returns errc::success if path has been removed or didn't exist, otherwise a
@@ -361,14 +371,14 @@
 ///          returns error if the file didn't exist.
 std::error_code remove(const Twine &path, bool IgnoreNonExisting = true);
 
-/// @brief Recursively delete a directory.
+/// Recursively delete a directory.
 ///
 /// @param path Input path.
 /// @returns errc::success if path has been removed or didn't exist, otherwise a
 ///          platform-specific error code.
 std::error_code remove_directories(const Twine &path, bool IgnoreErrors = true);
 
-/// @brief Rename \a from to \a to.
+/// Rename \a from to \a to.
 ///
 /// Files are renamed as if by POSIX rename(), except that on Windows there may
 /// be a short interval of time during which the destination file does not
@@ -378,13 +388,19 @@
 /// @param to The path to rename to. This is created.
 std::error_code rename(const Twine &from, const Twine &to);
 
-/// @brief Copy the contents of \a From to \a To.
+/// Copy the contents of \a From to \a To.
 ///
 /// @param From The path to copy from.
 /// @param To The path to copy to. This is created.
 std::error_code copy_file(const Twine &From, const Twine &To);
 
-/// @brief Resize path to size. File is resized as if by POSIX truncate().
+/// Copy the contents of \a From to \a To.
+///
+/// @param From The path to copy from.
+/// @param ToFD The open file descriptor of the destination file.
+std::error_code copy_file(const Twine &From, int ToFD);
+
+/// Resize path to size. File is resized as if by POSIX truncate().
 ///
 /// @param FD Input file descriptor.
 /// @param Size Size to resize to.
@@ -392,21 +408,21 @@
 ///          platform-specific error_code.
 std::error_code resize_file(int FD, uint64_t Size);
 
-/// @brief Compute an MD5 hash of a file's contents.
+/// Compute an MD5 hash of a file's contents.
 ///
 /// @param FD Input file descriptor.
 /// @returns An MD5Result with the hash computed, if successful, otherwise a
 ///          std::error_code.
 ErrorOr<MD5::MD5Result> md5_contents(int FD);
 
-/// @brief Version of compute_md5 that doesn't require an open file descriptor.
+/// Version of compute_md5 that doesn't require an open file descriptor.
 ErrorOr<MD5::MD5Result> md5_contents(const Twine &Path);
 
 /// @}
 /// @name Physical Observers
 /// @{
 
-/// @brief Does file exist?
+/// Does file exist?
 ///
 /// @param status A basic_file_status previously returned from stat.
 /// @returns True if the file represented by status exists, false if it does
@@ -415,14 +431,14 @@
 
 enum class AccessMode { Exist, Write, Execute };
 
-/// @brief Can the file be accessed?
+/// Can the file be accessed?
 ///
 /// @param Path Input path.
 /// @returns errc::success if the path can be accessed, otherwise a
 ///          platform-specific error_code.
 std::error_code access(const Twine &Path, AccessMode Mode);
 
-/// @brief Does file exist?
+/// Does file exist?
 ///
 /// @param Path Input path.
 /// @returns True if it exists, false otherwise.
@@ -430,13 +446,13 @@
   return !access(Path, AccessMode::Exist);
 }
 
-/// @brief Can we execute this file?
+/// Can we execute this file?
 ///
 /// @param Path Input path.
 /// @returns True if we can execute it, false otherwise.
 bool can_execute(const Twine &Path);
 
-/// @brief Can we write this file?
+/// Can we write this file?
 ///
 /// @param Path Input path.
 /// @returns True if we can write to it, false otherwise.
@@ -444,7 +460,7 @@
   return !access(Path, AccessMode::Write);
 }
 
-/// @brief Do file_status's represent the same thing?
+/// Do file_status's represent the same thing?
 ///
 /// @param A Input file_status.
 /// @param B Input file_status.
@@ -455,7 +471,7 @@
 ///          otherwise.
 bool equivalent(file_status A, file_status B);
 
-/// @brief Do paths represent the same thing?
+/// Do paths represent the same thing?
 ///
 /// assert(status_known(A) || status_known(B));
 ///
@@ -467,14 +483,14 @@
 ///          platform-specific error_code.
 std::error_code equivalent(const Twine &A, const Twine &B, bool &result);
 
-/// @brief Simpler version of equivalent for clients that don't need to
+/// Simpler version of equivalent for clients that don't need to
 ///        differentiate between an error and false.
 inline bool equivalent(const Twine &A, const Twine &B) {
   bool result;
   return !equivalent(A, B, result) && result;
 }
 
-/// @brief Is the file mounted on a local filesystem?
+/// Is the file mounted on a local filesystem?
 ///
 /// @param path Input path.
 /// @param result Set to true if \a path is on fixed media such as a hard disk,
@@ -483,24 +499,24 @@
 ///          platform specific error_code.
 std::error_code is_local(const Twine &path, bool &result);
 
-/// @brief Version of is_local accepting an open file descriptor.
+/// Version of is_local accepting an open file descriptor.
 std::error_code is_local(int FD, bool &result);
 
-/// @brief Simpler version of is_local for clients that don't need to
+/// Simpler version of is_local for clients that don't need to
 ///        differentiate between an error and false.
 inline bool is_local(const Twine &Path) {
   bool Result;
   return !is_local(Path, Result) && Result;
 }
 
-/// @brief Simpler version of is_local accepting an open file descriptor for
+/// Simpler version of is_local accepting an open file descriptor for
 ///        clients that don't need to differentiate between an error and false.
 inline bool is_local(int FD) {
   bool Result;
   return !is_local(FD, Result) && Result;
 }
 
-/// @brief Does status represent a directory?
+/// Does status represent a directory?
 ///
 /// @param Path The path to get the type of.
 /// @param Follow For symbolic links, indicates whether to return the file type
@@ -508,13 +524,13 @@
 /// @returns A value from the file_type enumeration indicating the type of file.
 file_type get_file_type(const Twine &Path, bool Follow = true);
 
-/// @brief Does status represent a directory?
+/// Does status represent a directory?
 ///
 /// @param status A basic_file_status previously returned from status.
 /// @returns status.type() == file_type::directory_file.
 bool is_directory(const basic_file_status &status);
 
-/// @brief Is path a directory?
+/// Is path a directory?
 ///
 /// @param path Input path.
 /// @param result Set to true if \a path is a directory (after following
@@ -523,20 +539,20 @@
 ///          platform-specific error_code.
 std::error_code is_directory(const Twine &path, bool &result);
 
-/// @brief Simpler version of is_directory for clients that don't need to
+/// Simpler version of is_directory for clients that don't need to
 ///        differentiate between an error and false.
 inline bool is_directory(const Twine &Path) {
   bool Result;
   return !is_directory(Path, Result) && Result;
 }
 
-/// @brief Does status represent a regular file?
+/// Does status represent a regular file?
 ///
 /// @param status A basic_file_status previously returned from status.
 /// @returns status_known(status) && status.type() == file_type::regular_file.
 bool is_regular_file(const basic_file_status &status);
 
-/// @brief Is path a regular file?
+/// Is path a regular file?
 ///
 /// @param path Input path.
 /// @param result Set to true if \a path is a regular file (after following
@@ -545,7 +561,7 @@
 ///          platform-specific error_code.
 std::error_code is_regular_file(const Twine &path, bool &result);
 
-/// @brief Simpler version of is_regular_file for clients that don't need to
+/// Simpler version of is_regular_file for clients that don't need to
 ///        differentiate between an error and false.
 inline bool is_regular_file(const Twine &Path) {
   bool Result;
@@ -554,13 +570,13 @@
   return Result;
 }
 
-/// @brief Does status represent a symlink file?
+/// Does status represent a symlink file?
 ///
 /// @param status A basic_file_status previously returned from status.
 /// @returns status_known(status) && status.type() == file_type::symlink_file.
 bool is_symlink_file(const basic_file_status &status);
 
-/// @brief Is path a symlink file?
+/// Is path a symlink file?
 ///
 /// @param path Input path.
 /// @param result Set to true if \a path is a symlink file, false if it is not.
@@ -569,7 +585,7 @@
 ///          platform-specific error_code.
 std::error_code is_symlink_file(const Twine &path, bool &result);
 
-/// @brief Simpler version of is_symlink_file for clients that don't need to
+/// Simpler version of is_symlink_file for clients that don't need to
 ///        differentiate between an error and false.
 inline bool is_symlink_file(const Twine &Path) {
   bool Result;
@@ -578,14 +594,14 @@
   return Result;
 }
 
-/// @brief Does this status represent something that exists but is not a
+/// Does this status represent something that exists but is not a
 ///        directory or regular file?
 ///
 /// @param status A basic_file_status previously returned from status.
 /// @returns exists(s) && !is_regular_file(s) && !is_directory(s)
 bool is_other(const basic_file_status &status);
 
-/// @brief Is path something that exists but is not a directory,
+/// Is path something that exists but is not a directory,
 ///        regular file, or symlink?
 ///
 /// @param path Input path.
@@ -595,7 +611,7 @@
 ///          platform-specific error_code.
 std::error_code is_other(const Twine &path, bool &result);
 
-/// @brief Get file status as if by POSIX stat().
+/// Get file status as if by POSIX stat().
 ///
 /// @param path Input path.
 /// @param result Set to the file status.
@@ -606,10 +622,10 @@
 std::error_code status(const Twine &path, file_status &result,
                        bool follow = true);
 
-/// @brief A version for when a file descriptor is already available.
+/// A version for when a file descriptor is already available.
 std::error_code status(int FD, file_status &Result);
 
-/// @brief Set file permissions.
+/// Set file permissions.
 ///
 /// @param Path File to set permissions on.
 /// @param Permissions New file permissions.
@@ -620,7 +636,7 @@
 ///       Otherwise, the file will be marked as read-only.
 std::error_code setPermissions(const Twine &Path, perms Permissions);
 
-/// @brief Get file permissions.
+/// Get file permissions.
 ///
 /// @param Path File to get permissions from.
 /// @returns the permissions if they were successfully retrieved, otherwise a
@@ -630,7 +646,7 @@
 ///       will be returned.
 ErrorOr<perms> getPermissions(const Twine &Path);
 
-/// @brief Get file size.
+/// Get file size.
 ///
 /// @param Path Input path.
 /// @param Result Set to the size of the file in \a Path.
@@ -645,20 +661,20 @@
   return std::error_code();
 }
 
-/// @brief Set the file modification and access time.
+/// Set the file modification and access time.
 ///
 /// @returns errc::success if the file times were successfully set, otherwise a
 ///          platform-specific error_code or errc::function_not_supported on
 ///          platforms where the functionality isn't available.
 std::error_code setLastModificationAndAccessTime(int FD, TimePoint<> Time);
 
-/// @brief Is status available?
+/// Is status available?
 ///
 /// @param s Input file status.
 /// @returns True if status() != status_error.
 bool status_known(const basic_file_status &s);
 
-/// @brief Is status available?
+/// Is status available?
 ///
 /// @param path Input path.
 /// @param result Set to true if status() != status_error.
@@ -666,35 +682,58 @@
 ///          platform-specific error_code.
 std::error_code status_known(const Twine &path, bool &result);
 
+enum CreationDisposition : unsigned {
+  /// CD_CreateAlways - When opening a file:
+  ///   * If it already exists, truncate it.
+  ///   * If it does not already exist, create a new file.
+  CD_CreateAlways = 0,
+
+  /// CD_CreateNew - When opening a file:
+  ///   * If it already exists, fail.
+  ///   * If it does not already exist, create a new file.
+  CD_CreateNew = 1,
+
+  /// CD_OpenAlways - When opening a file:
+  ///   * If it already exists, open the file with the offset set to 0.
+  ///   * If it does not already exist, fail.
+  CD_OpenExisting = 2,
+
+  /// CD_OpenAlways - When opening a file:
+  ///   * If it already exists, open the file with the offset set to 0.
+  ///   * If it does not already exist, create a new file.
+  CD_OpenAlways = 3,
+};
+
+enum FileAccess : unsigned {
+  FA_Read = 1,
+  FA_Write = 2,
+};
+
 enum OpenFlags : unsigned {
-  F_None = 0,
-
-  /// F_Excl - When opening a file, this flag makes raw_fd_ostream
-  /// report an error if the file already exists.
-  F_Excl = 1,
-
-  /// F_Append - When opening a file, if it already exists append to the
-  /// existing file instead of returning an error.  This may not be specified
-  /// with F_Excl.
-  F_Append = 2,
-
-  /// F_NoTrunc - When opening a file, if it already exists don't truncate
-  /// the file contents.  F_Append implies F_NoTrunc, but F_Append seeks to
-  /// the end of the file, which F_NoTrunc doesn't.
-  F_NoTrunc = 4,
+  OF_None = 0,
+  F_None = 0, // For compatibility
 
   /// The file should be opened in text mode on platforms that make this
   /// distinction.
-  F_Text = 8,
+  OF_Text = 1,
+  F_Text = 1, // For compatibility
 
-  /// Open the file for read and write.
-  F_RW = 16,
+  /// The file should be opened in append mode.
+  OF_Append = 2,
+  F_Append = 2, // For compatibility
 
   /// Delete the file on close. Only makes a difference on windows.
-  F_Delete = 32
+  OF_Delete = 4,
+
+  /// When a child process is launched, this file should remain open in the
+  /// child process.
+  OF_ChildInherit = 8,
+
+  /// Force files Atime to be updated on access. Only makes a difference on windows.
+  OF_UpdateAtime = 16,
 };
 
-/// @brief Create a uniquely named file.
+/// Create a uniquely named file.
 ///
 /// Generates a unique path suitable for a temporary file and then opens it as a
 /// file. The name is based on \a model with '%' replaced by a random char in
@@ -717,10 +756,9 @@
 ///          otherwise a platform-specific error_code.
 std::error_code createUniqueFile(const Twine &Model, int &ResultFD,
                                  SmallVectorImpl<char> &ResultPath,
-                                 unsigned Mode = all_read | all_write,
-                                 sys::fs::OpenFlags Flags = sys::fs::F_RW);
+                                 unsigned Mode = all_read | all_write);
 
-/// @brief Simpler version for clients that don't want an open file. An empty
+/// Simpler version for clients that don't want an open file. An empty
 /// file will still be created.
 std::error_code createUniqueFile(const Twine &Model,
                                  SmallVectorImpl<char> &ResultPath,
@@ -764,7 +802,7 @@
   ~TempFile();
 };
 
-/// @brief Create a file in the system temporary directory.
+/// Create a file in the system temporary directory.
 ///
 /// The filename is of the form prefix-random_chars.suffix. Since the directory
 /// is not know to the caller, Prefix and Suffix cannot have path separators.
@@ -774,10 +812,9 @@
 /// running the assembler.
 std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
                                     int &ResultFD,
-                                    SmallVectorImpl<char> &ResultPath,
-                                    sys::fs::OpenFlags Flags = sys::fs::F_RW);
+                                    SmallVectorImpl<char> &ResultPath);
 
-/// @brief Simpler version for clients that don't want an open file. An empty
+/// Simpler version for clients that don't want an open file. An empty
 /// file will still be created.
 std::error_code createTemporaryFile(const Twine &Prefix, StringRef Suffix,
                                     SmallVectorImpl<char> &ResultPath);
@@ -785,7 +822,7 @@
 std::error_code createUniqueDirectory(const Twine &Prefix,
                                       SmallVectorImpl<char> &ResultPath);
 
-/// @brief Get a unique name, not currently exisiting in the filesystem. Subject
+/// Get a unique name, not currently exisiting in the filesystem. Subject
 /// to race conditions, prefer to use createUniqueFile instead.
 ///
 /// Similar to createUniqueFile, but instead of creating a file only
@@ -795,7 +832,7 @@
 std::error_code getPotentiallyUniqueFileName(const Twine &Model,
                                              SmallVectorImpl<char> &ResultPath);
 
-/// @brief Get a unique temporary file name, not currently exisiting in the
+/// Get a unique temporary file name, not currently exisiting in the
 /// filesystem. Subject to race conditions, prefer to use createTemporaryFile
 /// instead.
 ///
@@ -816,15 +853,181 @@
   return A;
 }
 
-std::error_code openFileForWrite(const Twine &Name, int &ResultFD,
-                                 OpenFlags Flags, unsigned Mode = 0666);
+inline FileAccess operator|(FileAccess A, FileAccess B) {
+  return FileAccess(unsigned(A) | unsigned(B));
+}
 
+inline FileAccess &operator|=(FileAccess &A, FileAccess B) {
+  A = A | B;
+  return A;
+}
+
+/// @brief Opens a file with the specified creation disposition, access mode,
+/// and flags and returns a file descriptor.
+///
+/// The caller is responsible for closing the file descriptor once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param ResultFD If the file could be opened successfully, its descriptor
+///                 is stored in this location. Otherwise, this is set to -1.
+/// @param Disp Value specifying the existing-file behavior.
+/// @param Access Value specifying whether to open the file in read, write, or
+///               read-write mode.
+/// @param Flags Additional flags.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns errc::success if \a Name has been opened, otherwise a
+///          platform-specific error_code.
+std::error_code openFile(const Twine &Name, int &ResultFD,
+                         CreationDisposition Disp, FileAccess Access,
+                         OpenFlags Flags, unsigned Mode = 0666);
+
+/// @brief Opens a file with the specified creation disposition, access mode,
+/// and flags and returns a platform-specific file object.
+///
+/// The caller is responsible for closing the file object once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param Disp Value specifying the existing-file behavior.
+/// @param Access Value specifying whether to open the file in read, write, or
+///               read-write mode.
+/// @param Flags Additional flags.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns errc::success if \a Name has been opened, otherwise a
+///          platform-specific error_code.
+Expected<file_t> openNativeFile(const Twine &Name, CreationDisposition Disp,
+                                FileAccess Access, OpenFlags Flags,
+                                unsigned Mode = 0666);
+
+/// @brief Opens the file with the given name in a write-only or read-write
+/// mode, returning its open file descriptor. If the file does not exist, it
+/// is created.
+///
+/// The caller is responsible for closing the file descriptor once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param ResultFD If the file could be opened successfully, its descriptor
+///                 is stored in this location. Otherwise, this is set to -1.
+/// @param Flags Additional flags used to determine whether the file should be
+///              opened in, for example, read-write or in write-only mode.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns errc::success if \a Name has been opened, otherwise a
+///          platform-specific error_code.
+inline std::error_code
+openFileForWrite(const Twine &Name, int &ResultFD,
+                 CreationDisposition Disp = CD_CreateAlways,
+                 OpenFlags Flags = OF_None, unsigned Mode = 0666) {
+  return openFile(Name, ResultFD, Disp, FA_Write, Flags, Mode);
+}
+
+/// @brief Opens the file with the given name in a write-only or read-write
+/// mode, returning its open file descriptor. If the file does not exist, it
+/// is created.
+///
+/// The caller is responsible for closing the freeing the file once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param Flags Additional flags used to determine whether the file should be
+///              opened in, for example, read-write or in write-only mode.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns a platform-specific file descriptor if \a Name has been opened,
+///          otherwise an error object.
+inline Expected<file_t> openNativeFileForWrite(const Twine &Name,
+                                               CreationDisposition Disp,
+                                               OpenFlags Flags,
+                                               unsigned Mode = 0666) {
+  return openNativeFile(Name, Disp, FA_Write, Flags, Mode);
+}
+
+/// @brief Opens the file with the given name in a write-only or read-write
+/// mode, returning its open file descriptor. If the file does not exist, it
+/// is created.
+///
+/// The caller is responsible for closing the file descriptor once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param ResultFD If the file could be opened successfully, its descriptor
+///                 is stored in this location. Otherwise, this is set to -1.
+/// @param Flags Additional flags used to determine whether the file should be
+///              opened in, for example, read-write or in write-only mode.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns errc::success if \a Name has been opened, otherwise a
+///          platform-specific error_code.
+inline std::error_code openFileForReadWrite(const Twine &Name, int &ResultFD,
+                                            CreationDisposition Disp,
+                                            OpenFlags Flags,
+                                            unsigned Mode = 0666) {
+  return openFile(Name, ResultFD, Disp, FA_Write | FA_Read, Flags, Mode);
+}
+
+/// @brief Opens the file with the given name in a write-only or read-write
+/// mode, returning its open file descriptor. If the file does not exist, it
+/// is created.
+///
+/// The caller is responsible for closing the freeing the file once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param Flags Additional flags used to determine whether the file should be
+///              opened in, for example, read-write or in write-only mode.
+/// @param Mode The access permissions of the file, represented in octal.
+/// @returns a platform-specific file descriptor if \a Name has been opened,
+///          otherwise an error object.
+inline Expected<file_t> openNativeFileForReadWrite(const Twine &Name,
+                                                   CreationDisposition Disp,
+                                                   OpenFlags Flags,
+                                                   unsigned Mode = 0666) {
+  return openNativeFile(Name, Disp, FA_Write | FA_Read, Flags, Mode);
+}
+
+/// @brief Opens the file with the given name in a read-only mode, returning
+/// its open file descriptor.
+///
+/// The caller is responsible for closing the file descriptor once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param ResultFD If the file could be opened successfully, its descriptor
+///                 is stored in this location. Otherwise, this is set to -1.
+/// @param RealPath If nonnull, extra work is done to determine the real path
+///                 of the opened file, and that path is stored in this
+///                 location.
+/// @returns errc::success if \a Name has been opened, otherwise a
+///          platform-specific error_code.
 std::error_code openFileForRead(const Twine &Name, int &ResultFD,
+                                OpenFlags Flags = OF_None,
                                 SmallVectorImpl<char> *RealPath = nullptr);
 
+/// @brief Opens the file with the given name in a read-only mode, returning
+/// its open file descriptor.
+///
+/// The caller is responsible for closing the freeing the file once they are
+/// finished with it.
+///
+/// @param Name The path of the file to open, relative or absolute.
+/// @param RealPath If nonnull, extra work is done to determine the real path
+///                 of the opened file, and that path is stored in this
+///                 location.
+/// @returns a platform-specific file descriptor if \a Name has been opened,
+///          otherwise an error object.
+Expected<file_t>
+openNativeFileForRead(const Twine &Name, OpenFlags Flags = OF_None,
+                      SmallVectorImpl<char> *RealPath = nullptr);
+
+/// @brief Close the file object.  This should be used instead of ::close for
+/// portability.
+///
+/// @param F On input, this is the file to close.  On output, the file is
+/// set to kInvalidFile.
+void closeFile(file_t &F);
+
 std::error_code getUniqueID(const Twine Path, UniqueID &Result);
 
-/// @brief Get disk space usage information.
+/// Get disk space usage information.
 ///
 /// Note: Users must be careful about "Time Of Check, Time Of Use" kind of bug.
 /// Note: Windows reports results according to the quota allocated to the user.
@@ -849,7 +1052,9 @@
   /// Platform-specific mapping state.
   size_t Size;
   void *Mapping;
-  int FD;
+#ifdef _WIN32
+  void *FileHandle;
+#endif
   mapmode Mode;
 
   std::error_code init(int FD, uint64_t Offset, mapmode Mode);
@@ -956,14 +1161,16 @@
     SmallString<128> path_storage;
     ec = detail::directory_iterator_construct(
         *State, path.toStringRef(path_storage), FollowSymlinks);
+    update_error_code_for_current_entry(ec);
   }
 
   explicit directory_iterator(const directory_entry &de, std::error_code &ec,
                               bool follow_symlinks = true)
       : FollowSymlinks(follow_symlinks) {
     State = std::make_shared<detail::DirIterState>();
-    ec =
-        detail::directory_iterator_construct(*State, de.path(), FollowSymlinks);
+    ec = detail::directory_iterator_construct(
+        *State, de.path(), FollowSymlinks);
+    update_error_code_for_current_entry(ec);
   }
 
   /// Construct end iterator.
@@ -972,6 +1179,7 @@
   // No operator++ because we need error_code.
   directory_iterator &increment(std::error_code &ec) {
     ec = directory_iterator_increment(*State);
+    update_error_code_for_current_entry(ec);
     return *this;
   }
 
@@ -993,6 +1201,24 @@
   }
   // Other members as required by
   // C++ Std, 24.1.1 Input iterators [input.iterators]
+
+private:
+  // Checks if current entry is valid and populates error code. For example,
+  // current entry may not exist due to broken symbol links.
+  void update_error_code_for_current_entry(std::error_code &ec) {
+    // Bail out if error has already occured earlier to avoid overwriting it.
+    if (ec)
+      return;
+
+    // Empty directory entry is used to mark the end of an interation, it's not
+    // an error.
+    if (State->CurrentEntry == directory_entry())
+      return;
+
+    ErrorOr<basic_file_status> status = State->CurrentEntry.status();
+    if (!status)
+      ec = status.getError();
+  }
 };
 
 namespace detail {
@@ -1030,11 +1256,9 @@
     if (State->HasNoPushRequest)
       State->HasNoPushRequest = false;
     else {
-      ErrorOr<basic_file_status> st = State->Stack.top()->status();
-      if (!st) return *this;
-      if (is_directory(*st)) {
+      ErrorOr<basic_file_status> status = State->Stack.top()->status();
+      if (status && is_directory(*status)) {
         State->Stack.push(directory_iterator(*State->Stack.top(), ec, Follow));
-        if (ec) return *this;
         if (State->Stack.top() != end_itr) {
           ++State->Level;
           return *this;
diff --git a/linux-x64/clang/include/llvm/Support/FormatAdapters.h b/linux-x64/clang/include/llvm/Support/FormatAdapters.h
index 197beb7..8320eaa 100644
--- a/linux-x64/clang/include/llvm/Support/FormatAdapters.h
+++ b/linux-x64/clang/include/llvm/Support/FormatAdapters.h
@@ -12,6 +12,7 @@
 
 #include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
 #include "llvm/Support/FormatCommon.h"
 #include "llvm/Support/FormatVariadicDetails.h"
 #include "llvm/Support/raw_ostream.h"
@@ -19,7 +20,7 @@
 namespace llvm {
 template <typename T> class FormatAdapter : public detail::format_adapter {
 protected:
-  explicit FormatAdapter(T &&Item) : Item(Item) {}
+  explicit FormatAdapter(T &&Item) : Item(std::forward<T>(Item)) {}
 
   T Item;
 };
@@ -71,6 +72,14 @@
     }
   }
 };
+
+class ErrorAdapter : public FormatAdapter<Error> {
+public:
+  ErrorAdapter(Error &&Item) : FormatAdapter(std::move(Item)) {}
+  ErrorAdapter(ErrorAdapter &&) = default;
+  ~ErrorAdapter() { consumeError(std::move(Item)); }
+  void format(llvm::raw_ostream &Stream, StringRef Style) { Stream << Item; }
+};
 }
 
 template <typename T>
@@ -88,6 +97,13 @@
 detail::RepeatAdapter<T> fmt_repeat(T &&Item, size_t Count) {
   return detail::RepeatAdapter<T>(std::forward<T>(Item), Count);
 }
+
+// llvm::Error values must be consumed before being destroyed.
+// Wrapping an error in fmt_consume explicitly indicates that the formatv_object
+// should take ownership and consume it.
+inline detail::ErrorAdapter fmt_consume(Error &&Item) {
+  return detail::ErrorAdapter(std::move(Item));
+}
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/FormatVariadic.h b/linux-x64/clang/include/llvm/Support/FormatVariadic.h
index 8c08a7d..b0f5825 100644
--- a/linux-x64/clang/include/llvm/Support/FormatVariadic.h
+++ b/linux-x64/clang/include/llvm/Support/FormatVariadic.h
@@ -118,7 +118,7 @@
 
       auto W = Adapters[R.Index];
 
-      FmtAlign Align(*W, R.Where, R.Align);
+      FmtAlign Align(*W, R.Where, R.Align, R.Pad);
       Align.format(S, R.Options);
     }
   }
@@ -168,7 +168,7 @@
   }
 };
 
-// \brief Format text given a format string and replacement parameters.
+// Format text given a format string and replacement parameters.
 //
 // ===General Description===
 //
@@ -237,6 +237,8 @@
 //      for type T containing a method whose signature is:
 //      void format(const T &Obj, raw_ostream &Stream, StringRef Options)
 //      Then this method is invoked as described in Step 1.
+//   3. If an appropriate operator<< for raw_ostream exists, it will be used.
+//      For this to work, (raw_ostream& << const T&) must return raw_ostream&.
 //
 // If a match cannot be found through either of the above methods, a compiler
 // error is generated.
@@ -258,13 +260,6 @@
       std::make_tuple(detail::build_format_adapter(std::forward<Ts>(Vals))...));
 }
 
-// Allow a formatv_object to be formatted (no options supported).
-template <typename T> struct format_provider<formatv_object<T>> {
-  static void format(const formatv_object<T> &V, raw_ostream &OS, StringRef) {
-    OS << V;
-  }
-};
-
 } // end namespace llvm
 
 #endif // LLVM_SUPPORT_FORMATVARIADIC_H
diff --git a/linux-x64/clang/include/llvm/Support/FormatVariadicDetails.h b/linux-x64/clang/include/llvm/Support/FormatVariadicDetails.h
index 9b60462..56dda43 100644
--- a/linux-x64/clang/include/llvm/Support/FormatVariadicDetails.h
+++ b/linux-x64/clang/include/llvm/Support/FormatVariadicDetails.h
@@ -17,6 +17,7 @@
 
 namespace llvm {
 template <typename T, typename Enable = void> struct format_provider {};
+class Error;
 
 namespace detail {
 class format_adapter {
@@ -38,6 +39,17 @@
   }
 };
 
+template <typename T>
+class stream_operator_format_adapter : public format_adapter {
+  T Item;
+
+public:
+  explicit stream_operator_format_adapter(T &&Item)
+      : Item(std::forward<T>(Item)) {}
+
+  void format(llvm::raw_ostream &S, StringRef Options) override { S << Item; }
+};
+
 template <typename T> class missing_format_adapter;
 
 // Test if format_provider<T> is defined on T and contains a member function
@@ -59,6 +71,23 @@
       (sizeof(test<llvm::format_provider<Decayed>>(nullptr)) == 1);
 };
 
+// Test if raw_ostream& << T -> raw_ostream& is findable via ADL.
+template <class T> class has_StreamOperator {
+public:
+  using ConstRefT = const typename std::decay<T>::type &;
+
+  template <typename U>
+  static char test(typename std::enable_if<
+                   std::is_same<decltype(std::declval<llvm::raw_ostream &>()
+                                         << std::declval<U>()),
+                                llvm::raw_ostream &>::value,
+                   int *>::type);
+
+  template <typename U> static double test(...);
+
+  static bool const value = (sizeof(test<ConstRefT>(nullptr)) == 1);
+};
+
 // Simple template that decides whether a type T should use the member-function
 // based format() invocation.
 template <typename T>
@@ -77,15 +106,24 @@
           bool, !uses_format_member<T>::value && has_FormatProvider<T>::value> {
 };
 
+// Simple template that decides whether a type T should use the operator<<
+// based format() invocation.  This takes last priority.
+template <typename T>
+struct uses_stream_operator
+    : public std::integral_constant<bool, !uses_format_member<T>::value &&
+                                              !uses_format_provider<T>::value &&
+                                              has_StreamOperator<T>::value> {};
+
 // Simple template that decides whether a type T has neither a member-function
 // nor format_provider based implementation that it can use.  Mostly used so
 // that the compiler spits out a nice diagnostic when a type with no format
 // implementation can be located.
 template <typename T>
 struct uses_missing_provider
-    : public std::integral_constant<bool,
-                                    !uses_format_member<T>::value &&
-                                        !uses_format_provider<T>::value> {};
+    : public std::integral_constant<bool, !uses_format_member<T>::value &&
+                                              !uses_format_provider<T>::value &&
+                                              !uses_stream_operator<T>::value> {
+};
 
 template <typename T>
 typename std::enable_if<uses_format_member<T>::value, T>::type
@@ -101,6 +139,19 @@
 }
 
 template <typename T>
+typename std::enable_if<uses_stream_operator<T>::value,
+                        stream_operator_format_adapter<T>>::type
+build_format_adapter(T &&Item) {
+  // If the caller passed an Error by value, then stream_operator_format_adapter
+  // would be responsible for consuming it.
+  // Make the caller opt into this by calling fmt_consume().
+  static_assert(
+      !std::is_same<llvm::Error, typename std::remove_cv<T>::type>::value,
+      "llvm::Error-by-value must be wrapped in fmt_consume() for formatv");
+  return stream_operator_format_adapter<T>(std::forward<T>(Item));
+}
+
+template <typename T>
 typename std::enable_if<uses_missing_provider<T>::value,
                         missing_format_adapter<T>>::type
 build_format_adapter(T &&Item) {
diff --git a/linux-x64/clang/include/llvm/Support/GenericDomTree.h b/linux-x64/clang/include/llvm/Support/GenericDomTree.h
index bcaac6b..c716e4a 100644
--- a/linux-x64/clang/include/llvm/Support/GenericDomTree.h
+++ b/linux-x64/clang/include/llvm/Support/GenericDomTree.h
@@ -50,7 +50,7 @@
 struct SemiNCAInfo;
 }  // namespace DomTreeBuilder
 
-/// \brief Base class for the actual dominator tree node.
+/// Base class for the actual dominator tree node.
 template <class NodeT> class DomTreeNodeBase {
   friend class PostDominatorTree;
   friend class DominatorTreeBase<NodeT, false>;
@@ -237,7 +237,7 @@
 bool Verify(const DomTreeT &DT, typename DomTreeT::VerificationLevel VL);
 }  // namespace DomTreeBuilder
 
-/// \brief Core dominator tree base class.
+/// Core dominator tree base class.
 ///
 /// This class is a generic template over graph nodes. It is instantiated for
 /// various graphs in the LLVM IR or in the code generator.
@@ -351,7 +351,7 @@
   /// block.  This is the same as using operator[] on this class.  The result
   /// may (but is not required to) be null for a forward (backwards)
   /// statically unreachable block.
-  DomTreeNodeBase<NodeT> *getNode(NodeT *BB) const {
+  DomTreeNodeBase<NodeT> *getNode(const NodeT *BB) const {
     auto I = DomTreeNodes.find(BB);
     if (I != DomTreeNodes.end())
       return I->second.get();
@@ -359,7 +359,9 @@
   }
 
   /// See getNode.
-  DomTreeNodeBase<NodeT> *operator[](NodeT *BB) const { return getNode(BB); }
+  DomTreeNodeBase<NodeT> *operator[](const NodeT *BB) const {
+    return getNode(BB);
+  }
 
   /// getRootNode - This returns the entry node for the CFG of the function.  If
   /// this tree represents the post-dominance relations for a function, however,
@@ -528,11 +530,10 @@
   /// CFG about its children and inverse children. This implies that deletions
   /// of CFG edges must not delete the CFG nodes before calling this function.
   ///
-  /// Batch updates should be generally faster when performing longer sequences
-  /// of updates than calling insertEdge/deleteEdge manually multiple times, as
-  /// it can reorder the updates and remove redundant ones internally.
-  /// The batch updater is also able to detect sequences of zero and exactly one
-  /// update -- it's optimized to do less work in these cases.
+  /// The applyUpdates function can reorder the updates and remove redundant
+  /// ones internally. The batch updater is also able to detect sequences of
+  /// zero and exactly one update -- it's optimized to do less work in these
+  /// cases.
   ///
   /// Note that for postdominators it automatically takes care of applying
   /// updates on reverse edges internally (so there's no need to swap the
@@ -852,13 +853,18 @@
     assert(isReachableFromEntry(B));
     assert(isReachableFromEntry(A));
 
+    const unsigned ALevel = A->getLevel();
     const DomTreeNodeBase<NodeT> *IDom;
-    while ((IDom = B->getIDom()) != nullptr && IDom != A && IDom != B)
+
+    // Don't walk nodes above A's subtree. When we reach A's level, we must
+    // either find A or be in some other subtree not dominated by A.
+    while ((IDom = B->getIDom()) != nullptr && IDom->getLevel() >= ALevel)
       B = IDom;  // Walk up the tree
-    return IDom != nullptr;
+
+    return B == A;
   }
 
-  /// \brief Wipe this tree's state without releasing any resources.
+  /// Wipe this tree's state without releasing any resources.
   ///
   /// This is essentially a post-move helper only. It leaves the object in an
   /// assignable and destroyable state, but otherwise invalid.
diff --git a/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h b/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
index 7ec0638..103ff8c 100644
--- a/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
+++ b/linux-x64/clang/include/llvm/Support/GenericDomTreeConstruction.h
@@ -82,8 +82,8 @@
     // Note that these children are from the future relative to what the
     // DominatorTree knows about -- using them to gets us some snapshot of the
     // CFG from the past (relative to the state of the CFG).
-    DenseMap<NodePtr, SmallDenseSet<NodePtrAndKind, 4>> FutureSuccessors;
-    DenseMap<NodePtr, SmallDenseSet<NodePtrAndKind, 4>> FuturePredecessors;
+    DenseMap<NodePtr, SmallVector<NodePtrAndKind, 4>> FutureSuccessors;
+    DenseMap<NodePtr, SmallVector<NodePtrAndKind, 4>> FuturePredecessors;
     // Remembers if the whole tree was recalculated at some point during the
     // current batch update.
     bool IsRecalculated = false;
@@ -146,15 +146,15 @@
           assert(llvm::find(Res, Child) != Res.end()
                  && "Expected child not found in the CFG");
           Res.erase(std::remove(Res.begin(), Res.end(), Child), Res.end());
-          DEBUG(dbgs() << "\tHiding edge " << BlockNamePrinter(N) << " -> "
-                       << BlockNamePrinter(Child) << "\n");
+          LLVM_DEBUG(dbgs() << "\tHiding edge " << BlockNamePrinter(N) << " -> "
+                            << BlockNamePrinter(Child) << "\n");
         } else {
           // If there's an deletion in the future, it means that the edge cannot
           // exist in the current CFG, but existed in it before.
           assert(llvm::find(Res, Child) == Res.end() &&
                  "Unexpected child found in the CFG");
-          DEBUG(dbgs() << "\tShowing virtual edge " << BlockNamePrinter(N)
-                       << " -> " << BlockNamePrinter(Child) << "\n");
+          LLVM_DEBUG(dbgs() << "\tShowing virtual edge " << BlockNamePrinter(N)
+                            << " -> " << BlockNamePrinter(Child) << "\n");
           Res.push_back(Child);
         }
       }
@@ -387,7 +387,7 @@
     SNCA.addVirtualRoot();
     unsigned Num = 1;
 
-    DEBUG(dbgs() << "\t\tLooking for trivial roots\n");
+    LLVM_DEBUG(dbgs() << "\t\tLooking for trivial roots\n");
 
     // Step #1: Find all the trivial roots that are going to will definitely
     // remain tree roots.
@@ -404,14 +404,14 @@
         Roots.push_back(N);
         // Run DFS not to walk this part of CFG later.
         Num = SNCA.runDFS(N, Num, AlwaysDescend, 1);
-        DEBUG(dbgs() << "Found a new trivial root: " << BlockNamePrinter(N)
-                     << "\n");
-        DEBUG(dbgs() << "Last visited node: "
-                     << BlockNamePrinter(SNCA.NumToNode[Num]) << "\n");
+        LLVM_DEBUG(dbgs() << "Found a new trivial root: " << BlockNamePrinter(N)
+                          << "\n");
+        LLVM_DEBUG(dbgs() << "Last visited node: "
+                          << BlockNamePrinter(SNCA.NumToNode[Num]) << "\n");
       }
     }
 
-    DEBUG(dbgs() << "\t\tLooking for non-trivial roots\n");
+    LLVM_DEBUG(dbgs() << "\t\tLooking for non-trivial roots\n");
 
     // Step #2: Find all non-trivial root candidates. Those are CFG nodes that
     // are reverse-unreachable were not visited by previous DFS walks (i.e. CFG
@@ -431,8 +431,8 @@
       SmallPtrSet<NodePtr, 4> ConnectToExitBlock;
       for (const NodePtr I : nodes(DT.Parent)) {
         if (SNCA.NodeToInfo.count(I) == 0) {
-          DEBUG(dbgs() << "\t\t\tVisiting node " << BlockNamePrinter(I)
-                       << "\n");
+          LLVM_DEBUG(dbgs()
+                     << "\t\t\tVisiting node " << BlockNamePrinter(I) << "\n");
           // Find the furthest away we can get by following successors, then
           // follow them in reverse.  This gives us some reasonable answer about
           // the post-dom tree inside any infinite loop. In particular, it
@@ -443,47 +443,49 @@
           // the lowest and highest points in the infinite loop.  In theory, it
           // would be nice to give the canonical backedge for the loop, but it's
           // expensive and does not always lead to a minimal set of roots.
-          DEBUG(dbgs() << "\t\t\tRunning forward DFS\n");
+          LLVM_DEBUG(dbgs() << "\t\t\tRunning forward DFS\n");
 
           const unsigned NewNum = SNCA.runDFS<true>(I, Num, AlwaysDescend, Num);
           const NodePtr FurthestAway = SNCA.NumToNode[NewNum];
-          DEBUG(dbgs() << "\t\t\tFound a new furthest away node "
-                       << "(non-trivial root): "
-                       << BlockNamePrinter(FurthestAway) << "\n");
+          LLVM_DEBUG(dbgs() << "\t\t\tFound a new furthest away node "
+                            << "(non-trivial root): "
+                            << BlockNamePrinter(FurthestAway) << "\n");
           ConnectToExitBlock.insert(FurthestAway);
           Roots.push_back(FurthestAway);
-          DEBUG(dbgs() << "\t\t\tPrev DFSNum: " << Num << ", new DFSNum: "
-                       << NewNum << "\n\t\t\tRemoving DFS info\n");
+          LLVM_DEBUG(dbgs() << "\t\t\tPrev DFSNum: " << Num << ", new DFSNum: "
+                            << NewNum << "\n\t\t\tRemoving DFS info\n");
           for (unsigned i = NewNum; i > Num; --i) {
             const NodePtr N = SNCA.NumToNode[i];
-            DEBUG(dbgs() << "\t\t\t\tRemoving DFS info for "
-                         << BlockNamePrinter(N) << "\n");
+            LLVM_DEBUG(dbgs() << "\t\t\t\tRemoving DFS info for "
+                              << BlockNamePrinter(N) << "\n");
             SNCA.NodeToInfo.erase(N);
             SNCA.NumToNode.pop_back();
           }
           const unsigned PrevNum = Num;
-          DEBUG(dbgs() << "\t\t\tRunning reverse DFS\n");
+          LLVM_DEBUG(dbgs() << "\t\t\tRunning reverse DFS\n");
           Num = SNCA.runDFS(FurthestAway, Num, AlwaysDescend, 1);
           for (unsigned i = PrevNum + 1; i <= Num; ++i)
-            DEBUG(dbgs() << "\t\t\t\tfound node "
-                         << BlockNamePrinter(SNCA.NumToNode[i]) << "\n");
+            LLVM_DEBUG(dbgs() << "\t\t\t\tfound node "
+                              << BlockNamePrinter(SNCA.NumToNode[i]) << "\n");
         }
       }
     }
 
-    DEBUG(dbgs() << "Total: " << Total << ", Num: " << Num << "\n");
-    DEBUG(dbgs() << "Discovered CFG nodes:\n");
-    DEBUG(for (size_t i = 0; i <= Num; ++i) dbgs()
-          << i << ": " << BlockNamePrinter(SNCA.NumToNode[i]) << "\n");
+    LLVM_DEBUG(dbgs() << "Total: " << Total << ", Num: " << Num << "\n");
+    LLVM_DEBUG(dbgs() << "Discovered CFG nodes:\n");
+    LLVM_DEBUG(for (size_t i = 0; i <= Num; ++i) dbgs()
+               << i << ": " << BlockNamePrinter(SNCA.NumToNode[i]) << "\n");
 
     assert((Total + 1 == Num) && "Everything should have been visited");
 
     // Step #3: If we found some non-trivial roots, make them non-redundant.
     if (HasNonTrivialRoots) RemoveRedundantRoots(DT, BUI, Roots);
 
-    DEBUG(dbgs() << "Found roots: ");
-    DEBUG(for (auto *Root : Roots) dbgs() << BlockNamePrinter(Root) << " ");
-    DEBUG(dbgs() << "\n");
+    LLVM_DEBUG(dbgs() << "Found roots: ");
+    LLVM_DEBUG(for (auto *Root
+                    : Roots) dbgs()
+               << BlockNamePrinter(Root) << " ");
+    LLVM_DEBUG(dbgs() << "\n");
 
     return Roots;
   }
@@ -499,7 +501,7 @@
   static void RemoveRedundantRoots(const DomTreeT &DT, BatchUpdatePtr BUI,
                                    RootsT &Roots) {
     assert(IsPostDom && "This function is for postdominators only");
-    DEBUG(dbgs() << "Removing redundant roots\n");
+    LLVM_DEBUG(dbgs() << "Removing redundant roots\n");
 
     SemiNCAInfo SNCA(BUI);
 
@@ -507,8 +509,8 @@
       auto &Root = Roots[i];
       // Trivial roots are always non-redundant.
       if (!HasForwardSuccessors(Root, BUI)) continue;
-      DEBUG(dbgs() << "\tChecking if " << BlockNamePrinter(Root)
-                   << " remains a root\n");
+      LLVM_DEBUG(dbgs() << "\tChecking if " << BlockNamePrinter(Root)
+                        << " remains a root\n");
       SNCA.clear();
       // Do a forward walk looking for the other roots.
       const unsigned Num = SNCA.runDFS<true>(Root, 0, AlwaysDescend, 0);
@@ -520,9 +522,9 @@
         // root from the set of roots, as it is reverse-reachable from the other
         // one.
         if (llvm::find(Roots, N) != Roots.end()) {
-          DEBUG(dbgs() << "\tForward DFS walk found another root "
-                       << BlockNamePrinter(N) << "\n\tRemoving root "
-                       << BlockNamePrinter(Root) << "\n");
+          LLVM_DEBUG(dbgs() << "\tForward DFS walk found another root "
+                            << BlockNamePrinter(N) << "\n\tRemoving root "
+                            << BlockNamePrinter(Root) << "\n");
           std::swap(Root, Roots.back());
           Roots.pop_back();
 
@@ -563,7 +565,8 @@
     SNCA.runSemiNCA(DT);
     if (BUI) {
       BUI->IsRecalculated = true;
-      DEBUG(dbgs() << "DomTree recalculated, skipping future batch updates\n");
+      LLVM_DEBUG(
+          dbgs() << "DomTree recalculated, skipping future batch updates\n");
     }
 
     if (DT.Roots.empty()) return;
@@ -585,8 +588,8 @@
     // Loop over all of the discovered blocks in the function...
     for (size_t i = 1, e = NumToNode.size(); i != e; ++i) {
       NodePtr W = NumToNode[i];
-      DEBUG(dbgs() << "\tdiscovered a new reachable node "
-                   << BlockNamePrinter(W) << "\n");
+      LLVM_DEBUG(dbgs() << "\tdiscovered a new reachable node "
+                        << BlockNamePrinter(W) << "\n");
 
       // Don't replace this with 'count', the insertion side effect is important
       if (DT.DomTreeNodes[W]) continue;  // Haven't calculated this node yet?
@@ -638,8 +641,8 @@
     assert((From || IsPostDom) &&
            "From has to be a valid CFG node or a virtual root");
     assert(To && "Cannot be a nullptr");
-    DEBUG(dbgs() << "Inserting edge " << BlockNamePrinter(From) << " -> "
-                 << BlockNamePrinter(To) << "\n");
+    LLVM_DEBUG(dbgs() << "Inserting edge " << BlockNamePrinter(From) << " -> "
+                      << BlockNamePrinter(To) << "\n");
     TreeNodePtr FromTN = DT.getNode(From);
 
     if (!FromTN) {
@@ -678,8 +681,8 @@
     if (RIt == DT.Roots.end())
       return false;  // To is not a root, nothing to update.
 
-    DEBUG(dbgs() << "\t\tAfter the insertion, " << BlockNamePrinter(To)
-                 << " is no longer a root\n\t\tRebuilding the tree!!!\n");
+    LLVM_DEBUG(dbgs() << "\t\tAfter the insertion, " << BlockNamePrinter(To)
+                      << " is no longer a root\n\t\tRebuilding the tree!!!\n");
 
     CalculateFromScratch(DT, BUI);
     return true;
@@ -706,8 +709,8 @@
       // can make a different (implicit) decision about which node within an
       // infinite loop becomes a root.
 
-      DEBUG(dbgs() << "Roots are different in updated trees\n"
-                   << "The entire tree needs to be rebuilt\n");
+      LLVM_DEBUG(dbgs() << "Roots are different in updated trees\n"
+                        << "The entire tree needs to be rebuilt\n");
       // It may be possible to update the tree without recalculating it, but
       // we do not know yet how to do it, and it happens rarely in practise.
       CalculateFromScratch(DT, BUI);
@@ -718,8 +721,8 @@
   // Handles insertion to a node already in the dominator tree.
   static void InsertReachable(DomTreeT &DT, const BatchUpdatePtr BUI,
                               const TreeNodePtr From, const TreeNodePtr To) {
-    DEBUG(dbgs() << "\tReachable " << BlockNamePrinter(From->getBlock())
-                 << " -> " << BlockNamePrinter(To->getBlock()) << "\n");
+    LLVM_DEBUG(dbgs() << "\tReachable " << BlockNamePrinter(From->getBlock())
+                      << " -> " << BlockNamePrinter(To->getBlock()) << "\n");
     if (IsPostDom && UpdateRootsBeforeInsertion(DT, BUI, From, To)) return;
     // DT.findNCD expects both pointers to be valid. When From is a virtual
     // root, then its CFG block pointer is a nullptr, so we have to 'compute'
@@ -732,7 +735,7 @@
     const TreeNodePtr NCD = DT.getNode(NCDBlock);
     assert(NCD);
 
-    DEBUG(dbgs() << "\t\tNCA == " << BlockNamePrinter(NCD) << "\n");
+    LLVM_DEBUG(dbgs() << "\t\tNCA == " << BlockNamePrinter(NCD) << "\n");
     const TreeNodePtr ToIDom = To->getIDom();
 
     // Nothing affected -- NCA property holds.
@@ -741,18 +744,20 @@
 
     // Identify and collect affected nodes.
     InsertionInfo II;
-    DEBUG(dbgs() << "Marking " << BlockNamePrinter(To) << " as affected\n");
+    LLVM_DEBUG(dbgs() << "Marking " << BlockNamePrinter(To)
+                      << " as affected\n");
     II.Affected.insert(To);
     const unsigned ToLevel = To->getLevel();
-    DEBUG(dbgs() << "Putting " << BlockNamePrinter(To) << " into a Bucket\n");
+    LLVM_DEBUG(dbgs() << "Putting " << BlockNamePrinter(To)
+                      << " into a Bucket\n");
     II.Bucket.push({ToLevel, To});
 
     while (!II.Bucket.empty()) {
       const TreeNodePtr CurrentNode = II.Bucket.top().second;
       const unsigned  CurrentLevel = CurrentNode->getLevel();
       II.Bucket.pop();
-      DEBUG(dbgs() << "\tAdding to Visited and AffectedQueue: "
-                   << BlockNamePrinter(CurrentNode) << "\n");
+      LLVM_DEBUG(dbgs() << "\tAdding to Visited and AffectedQueue: "
+                        << BlockNamePrinter(CurrentNode) << "\n");
 
       II.Visited.insert({CurrentNode, CurrentLevel});
       II.AffectedQueue.push_back(CurrentNode);
@@ -770,8 +775,8 @@
                              const TreeNodePtr TN, const unsigned RootLevel,
                              const TreeNodePtr NCD, InsertionInfo &II) {
     const unsigned NCDLevel = NCD->getLevel();
-    DEBUG(dbgs() << "Visiting " << BlockNamePrinter(TN) << ",  RootLevel "
-                 << RootLevel << "\n");
+    LLVM_DEBUG(dbgs() << "Visiting " << BlockNamePrinter(TN) << ",  RootLevel "
+                      << RootLevel << "\n");
 
     SmallVector<TreeNodePtr, 8> Stack = {TN};
     assert(TN->getBlock() && II.Visited.count(TN) && "Preconditions!");
@@ -780,7 +785,7 @@
 
     do {
       TreeNodePtr Next = Stack.pop_back_val();
-      DEBUG(dbgs() << " Next: " << BlockNamePrinter(Next) << "\n");
+      LLVM_DEBUG(dbgs() << " Next: " << BlockNamePrinter(Next) << "\n");
 
       for (const NodePtr Succ :
            ChildrenGetter<IsPostDom>::Get(Next->getBlock(), BUI)) {
@@ -788,8 +793,8 @@
         assert(SuccTN && "Unreachable successor found at reachable insertion");
         const unsigned SuccLevel = SuccTN->getLevel();
 
-        DEBUG(dbgs() << "\tSuccessor " << BlockNamePrinter(Succ) << ", level = "
-                     << SuccLevel << "\n");
+        LLVM_DEBUG(dbgs() << "\tSuccessor " << BlockNamePrinter(Succ)
+                          << ", level = " << SuccLevel << "\n");
 
         // Do not process the same node multiple times.
         if (Processed.count(Next) > 0)
@@ -798,11 +803,11 @@
         // Succ dominated by subtree From -- not affected.
         // (Based on the lemma 2.5 from the second paper.)
         if (SuccLevel > RootLevel) {
-          DEBUG(dbgs() << "\t\tDominated by subtree From\n");
+          LLVM_DEBUG(dbgs() << "\t\tDominated by subtree From\n");
           if (II.Visited.count(SuccTN) != 0) {
-            DEBUG(dbgs() << "\t\t\talready visited at level "
-                         << II.Visited[SuccTN] << "\n\t\t\tcurrent level "
-                         << RootLevel << ")\n");
+            LLVM_DEBUG(dbgs() << "\t\t\talready visited at level "
+                              << II.Visited[SuccTN] << "\n\t\t\tcurrent level "
+                              << RootLevel << ")\n");
 
             // A node can be necessary to visit again if we see it again at
             // a lower level than before.
@@ -810,15 +815,15 @@
               continue;
           }
 
-          DEBUG(dbgs() << "\t\tMarking visited not affected "
-                       << BlockNamePrinter(Succ) << "\n");
+          LLVM_DEBUG(dbgs() << "\t\tMarking visited not affected "
+                            << BlockNamePrinter(Succ) << "\n");
           II.Visited.insert({SuccTN, RootLevel});
           II.VisitedNotAffectedQueue.push_back(SuccTN);
           Stack.push_back(SuccTN);
         } else if ((SuccLevel > NCDLevel + 1) &&
             II.Affected.count(SuccTN) == 0) {
-          DEBUG(dbgs() << "\t\tMarking affected and adding "
-                       << BlockNamePrinter(Succ) << " to a Bucket\n");
+          LLVM_DEBUG(dbgs() << "\t\tMarking affected and adding "
+                            << BlockNamePrinter(Succ) << " to a Bucket\n");
           II.Affected.insert(SuccTN);
           II.Bucket.push({SuccLevel, SuccTN});
         }
@@ -831,11 +836,11 @@
   // Updates immediate dominators and levels after insertion.
   static void UpdateInsertion(DomTreeT &DT, const BatchUpdatePtr BUI,
                               const TreeNodePtr NCD, InsertionInfo &II) {
-    DEBUG(dbgs() << "Updating NCD = " << BlockNamePrinter(NCD) << "\n");
+    LLVM_DEBUG(dbgs() << "Updating NCD = " << BlockNamePrinter(NCD) << "\n");
 
     for (const TreeNodePtr TN : II.AffectedQueue) {
-      DEBUG(dbgs() << "\tIDom(" << BlockNamePrinter(TN)
-                   << ") = " << BlockNamePrinter(NCD) << "\n");
+      LLVM_DEBUG(dbgs() << "\tIDom(" << BlockNamePrinter(TN)
+                        << ") = " << BlockNamePrinter(NCD) << "\n");
       TN->setIDom(NCD);
     }
 
@@ -844,12 +849,13 @@
   }
 
   static void UpdateLevelsAfterInsertion(InsertionInfo &II) {
-    DEBUG(dbgs() << "Updating levels for visited but not affected nodes\n");
+    LLVM_DEBUG(
+        dbgs() << "Updating levels for visited but not affected nodes\n");
 
     for (const TreeNodePtr TN : II.VisitedNotAffectedQueue) {
-      DEBUG(dbgs() << "\tlevel(" << BlockNamePrinter(TN) << ") = ("
-                   << BlockNamePrinter(TN->getIDom()) << ") "
-                   << TN->getIDom()->getLevel() << " + 1\n");
+      LLVM_DEBUG(dbgs() << "\tlevel(" << BlockNamePrinter(TN) << ") = ("
+                        << BlockNamePrinter(TN->getIDom()) << ") "
+                        << TN->getIDom()->getLevel() << " + 1\n");
       TN->UpdateLevel();
     }
   }
@@ -857,23 +863,24 @@
   // Handles insertion to previously unreachable nodes.
   static void InsertUnreachable(DomTreeT &DT, const BatchUpdatePtr BUI,
                                 const TreeNodePtr From, const NodePtr To) {
-    DEBUG(dbgs() << "Inserting " << BlockNamePrinter(From)
-                 << " -> (unreachable) " << BlockNamePrinter(To) << "\n");
+    LLVM_DEBUG(dbgs() << "Inserting " << BlockNamePrinter(From)
+                      << " -> (unreachable) " << BlockNamePrinter(To) << "\n");
 
     // Collect discovered edges to already reachable nodes.
     SmallVector<std::pair<NodePtr, TreeNodePtr>, 8> DiscoveredEdgesToReachable;
     // Discover and connect nodes that became reachable with the insertion.
     ComputeUnreachableDominators(DT, BUI, To, From, DiscoveredEdgesToReachable);
 
-    DEBUG(dbgs() << "Inserted " << BlockNamePrinter(From)
-                 << " -> (prev unreachable) " << BlockNamePrinter(To) << "\n");
+    LLVM_DEBUG(dbgs() << "Inserted " << BlockNamePrinter(From)
+                      << " -> (prev unreachable) " << BlockNamePrinter(To)
+                      << "\n");
 
     // Used the discovered edges and inset discovered connecting (incoming)
     // edges.
     for (const auto &Edge : DiscoveredEdgesToReachable) {
-      DEBUG(dbgs() << "\tInserting discovered connecting edge "
-                   << BlockNamePrinter(Edge.first) << " -> "
-                   << BlockNamePrinter(Edge.second) << "\n");
+      LLVM_DEBUG(dbgs() << "\tInserting discovered connecting edge "
+                        << BlockNamePrinter(Edge.first) << " -> "
+                        << BlockNamePrinter(Edge.second) << "\n");
       InsertReachable(DT, BUI, DT.getNode(Edge.first), Edge.second);
     }
   }
@@ -901,14 +908,14 @@
     SNCA.runSemiNCA(DT);
     SNCA.attachNewSubtree(DT, Incoming);
 
-    DEBUG(dbgs() << "After adding unreachable nodes\n");
+    LLVM_DEBUG(dbgs() << "After adding unreachable nodes\n");
   }
 
   static void DeleteEdge(DomTreeT &DT, const BatchUpdatePtr BUI,
                          const NodePtr From, const NodePtr To) {
     assert(From && To && "Cannot disconnect nullptrs");
-    DEBUG(dbgs() << "Deleting edge " << BlockNamePrinter(From) << " -> "
-                 << BlockNamePrinter(To) << "\n");
+    LLVM_DEBUG(dbgs() << "Deleting edge " << BlockNamePrinter(From) << " -> "
+                      << BlockNamePrinter(To) << "\n");
 
 #ifndef NDEBUG
     // Ensure that the edge was in fact deleted from the CFG before informing
@@ -928,8 +935,9 @@
 
     const TreeNodePtr ToTN = DT.getNode(To);
     if (!ToTN) {
-      DEBUG(dbgs() << "\tTo (" << BlockNamePrinter(To)
-                   << ") already unreachable -- there is no edge to delete\n");
+      LLVM_DEBUG(
+          dbgs() << "\tTo (" << BlockNamePrinter(To)
+                 << ") already unreachable -- there is no edge to delete\n");
       return;
     }
 
@@ -941,8 +949,8 @@
       DT.DFSInfoValid = false;
 
       const TreeNodePtr ToIDom = ToTN->getIDom();
-      DEBUG(dbgs() << "\tNCD " << BlockNamePrinter(NCD) << ", ToIDom "
-                   << BlockNamePrinter(ToIDom) << "\n");
+      LLVM_DEBUG(dbgs() << "\tNCD " << BlockNamePrinter(NCD) << ", ToIDom "
+                        << BlockNamePrinter(ToIDom) << "\n");
 
       // To remains reachable after deletion.
       // (Based on the caption under Figure 4. from the second paper.)
@@ -959,9 +967,9 @@
   static void DeleteReachable(DomTreeT &DT, const BatchUpdatePtr BUI,
                               const TreeNodePtr FromTN,
                               const TreeNodePtr ToTN) {
-    DEBUG(dbgs() << "Deleting reachable " << BlockNamePrinter(FromTN) << " -> "
-                 << BlockNamePrinter(ToTN) << "\n");
-    DEBUG(dbgs() << "\tRebuilding subtree\n");
+    LLVM_DEBUG(dbgs() << "Deleting reachable " << BlockNamePrinter(FromTN)
+                      << " -> " << BlockNamePrinter(ToTN) << "\n");
+    LLVM_DEBUG(dbgs() << "\tRebuilding subtree\n");
 
     // Find the top of the subtree that needs to be rebuilt.
     // (Based on the lemma 2.6 from the second paper.)
@@ -974,7 +982,7 @@
     // Top of the subtree to rebuild is the root node. Rebuild the tree from
     // scratch.
     if (!PrevIDomSubTree) {
-      DEBUG(dbgs() << "The entire tree needs to be rebuilt\n");
+      LLVM_DEBUG(dbgs() << "The entire tree needs to be rebuilt\n");
       CalculateFromScratch(DT, BUI);
       return;
     }
@@ -985,11 +993,12 @@
       return DT.getNode(To)->getLevel() > Level;
     };
 
-    DEBUG(dbgs() << "\tTop of subtree: " << BlockNamePrinter(ToIDomTN) << "\n");
+    LLVM_DEBUG(dbgs() << "\tTop of subtree: " << BlockNamePrinter(ToIDomTN)
+                      << "\n");
 
     SemiNCAInfo SNCA(BUI);
     SNCA.runDFS(ToIDom, 0, DescendBelow, 0);
-    DEBUG(dbgs() << "\tRunning Semi-NCA\n");
+    LLVM_DEBUG(dbgs() << "\tRunning Semi-NCA\n");
     SNCA.runSemiNCA(DT, Level);
     SNCA.reattachExistingSubtree(DT, PrevIDomSubTree);
   }
@@ -998,19 +1007,20 @@
   // explained on the page 7 of the second paper.
   static bool HasProperSupport(DomTreeT &DT, const BatchUpdatePtr BUI,
                                const TreeNodePtr TN) {
-    DEBUG(dbgs() << "IsReachableFromIDom " << BlockNamePrinter(TN) << "\n");
+    LLVM_DEBUG(dbgs() << "IsReachableFromIDom " << BlockNamePrinter(TN)
+                      << "\n");
     for (const NodePtr Pred :
          ChildrenGetter<!IsPostDom>::Get(TN->getBlock(), BUI)) {
-      DEBUG(dbgs() << "\tPred " << BlockNamePrinter(Pred) << "\n");
+      LLVM_DEBUG(dbgs() << "\tPred " << BlockNamePrinter(Pred) << "\n");
       if (!DT.getNode(Pred)) continue;
 
       const NodePtr Support =
           DT.findNearestCommonDominator(TN->getBlock(), Pred);
-      DEBUG(dbgs() << "\tSupport " << BlockNamePrinter(Support) << "\n");
+      LLVM_DEBUG(dbgs() << "\tSupport " << BlockNamePrinter(Support) << "\n");
       if (Support != TN->getBlock()) {
-        DEBUG(dbgs() << "\t" << BlockNamePrinter(TN)
-                     << " is reachable from support "
-                     << BlockNamePrinter(Support) << "\n");
+        LLVM_DEBUG(dbgs() << "\t" << BlockNamePrinter(TN)
+                          << " is reachable from support "
+                          << BlockNamePrinter(Support) << "\n");
         return true;
       }
     }
@@ -1022,8 +1032,8 @@
   // (Based on the lemma 2.7 from the second paper.)
   static void DeleteUnreachable(DomTreeT &DT, const BatchUpdatePtr BUI,
                                 const TreeNodePtr ToTN) {
-    DEBUG(dbgs() << "Deleting unreachable subtree " << BlockNamePrinter(ToTN)
-                 << "\n");
+    LLVM_DEBUG(dbgs() << "Deleting unreachable subtree "
+                      << BlockNamePrinter(ToTN) << "\n");
     assert(ToTN);
     assert(ToTN->getBlock());
 
@@ -1031,8 +1041,9 @@
       // Deletion makes a region reverse-unreachable and creates a new root.
       // Simulate that by inserting an edge from the virtual root to ToTN and
       // adding it as a new root.
-      DEBUG(dbgs() << "\tDeletion made a region reverse-unreachable\n");
-      DEBUG(dbgs() << "\tAdding new root " << BlockNamePrinter(ToTN) << "\n");
+      LLVM_DEBUG(dbgs() << "\tDeletion made a region reverse-unreachable\n");
+      LLVM_DEBUG(dbgs() << "\tAdding new root " << BlockNamePrinter(ToTN)
+                        << "\n");
       DT.Roots.push_back(ToTN->getBlock());
       InsertReachable(DT, BUI, DT.getNode(nullptr), ToTN);
       return;
@@ -1069,15 +1080,15 @@
       const TreeNodePtr NCD = DT.getNode(NCDBlock);
       assert(NCD);
 
-      DEBUG(dbgs() << "Processing affected node " << BlockNamePrinter(TN)
-                   << " with NCD = " << BlockNamePrinter(NCD)
-                   << ", MinNode =" << BlockNamePrinter(MinNode) << "\n");
+      LLVM_DEBUG(dbgs() << "Processing affected node " << BlockNamePrinter(TN)
+                        << " with NCD = " << BlockNamePrinter(NCD)
+                        << ", MinNode =" << BlockNamePrinter(MinNode) << "\n");
       if (NCD != TN && NCD->getLevel() < MinNode->getLevel()) MinNode = NCD;
     }
 
     // Root reached, rebuild the whole tree from scratch.
     if (!MinNode->getIDom()) {
-      DEBUG(dbgs() << "The entire tree needs to be rebuilt\n");
+      LLVM_DEBUG(dbgs() << "The entire tree needs to be rebuilt\n");
       CalculateFromScratch(DT, BUI);
       return;
     }
@@ -1087,7 +1098,7 @@
     for (unsigned i = LastDFSNum; i > 0; --i) {
       const NodePtr N = SNCA.NumToNode[i];
       const TreeNodePtr TN = DT.getNode(N);
-      DEBUG(dbgs() << "Erasing node " << BlockNamePrinter(TN) << "\n");
+      LLVM_DEBUG(dbgs() << "Erasing node " << BlockNamePrinter(TN) << "\n");
 
       EraseNode(DT, TN);
     }
@@ -1095,8 +1106,8 @@
     // The affected subtree start at the To node -- there's no extra work to do.
     if (MinNode == ToTN) return;
 
-    DEBUG(dbgs() << "DeleteUnreachable: running DFS with MinNode = "
-                 << BlockNamePrinter(MinNode) << "\n");
+    LLVM_DEBUG(dbgs() << "DeleteUnreachable: running DFS with MinNode = "
+                      << BlockNamePrinter(MinNode) << "\n");
     const unsigned MinLevel = MinNode->getLevel();
     const TreeNodePtr PrevIDom = MinNode->getIDom();
     assert(PrevIDom);
@@ -1109,8 +1120,8 @@
     };
     SNCA.runDFS(MinNode->getBlock(), 0, DescendBelow, 0);
 
-    DEBUG(dbgs() << "Previous IDom(MinNode) = " << BlockNamePrinter(PrevIDom)
-                 << "\nRunning Semi-NCA\n");
+    LLVM_DEBUG(dbgs() << "Previous IDom(MinNode) = "
+                      << BlockNamePrinter(PrevIDom) << "\nRunning Semi-NCA\n");
 
     // Rebuild the remaining part of affected subtree.
     SNCA.runSemiNCA(DT, MinLevel);
@@ -1165,15 +1176,15 @@
     // predecessors. Note that these sets will only decrease size over time, as
     // the next CFG snapshots slowly approach the actual (current) CFG.
     for (UpdateT &U : BUI.Updates) {
-      BUI.FutureSuccessors[U.getFrom()].insert({U.getTo(), U.getKind()});
-      BUI.FuturePredecessors[U.getTo()].insert({U.getFrom(), U.getKind()});
+      BUI.FutureSuccessors[U.getFrom()].push_back({U.getTo(), U.getKind()});
+      BUI.FuturePredecessors[U.getTo()].push_back({U.getFrom(), U.getKind()});
     }
 
-    DEBUG(dbgs() << "About to apply " << NumLegalized << " updates\n");
-    DEBUG(if (NumLegalized < 32) for (const auto &U
-                                      : reverse(BUI.Updates)) dbgs()
-          << '\t' << U << "\n");
-    DEBUG(dbgs() << "\n");
+    LLVM_DEBUG(dbgs() << "About to apply " << NumLegalized << " updates\n");
+    LLVM_DEBUG(if (NumLegalized < 32) for (const auto &U
+                                           : reverse(BUI.Updates)) dbgs()
+               << '\t' << U << "\n");
+    LLVM_DEBUG(dbgs() << "\n");
 
     // If the DominatorTree was recalculated at some point, stop the batch
     // updates. Full recalculations ignore batch updates and look at the actual
@@ -1201,7 +1212,7 @@
   // minimizes the amount of work needed done during incremental updates.
   static void LegalizeUpdates(ArrayRef<UpdateT> AllUpdates,
                               SmallVectorImpl<UpdateT> &Result) {
-    DEBUG(dbgs() << "Legalizing " << AllUpdates.size() << " updates\n");
+    LLVM_DEBUG(dbgs() << "Legalizing " << AllUpdates.size() << " updates\n");
     // Count the total number of inserions of each edge.
     // Each insertion adds 1 and deletion subtracts 1. The end number should be
     // one of {-1 (deletion), 0 (NOP), +1 (insertion)}. Otherwise, the sequence
@@ -1241,26 +1252,31 @@
         Operations[{U.getTo(), U.getFrom()}] = int(i);
     }
 
-    std::sort(Result.begin(), Result.end(),
-              [&Operations](const UpdateT &A, const UpdateT &B) {
-                return Operations[{A.getFrom(), A.getTo()}] >
-                       Operations[{B.getFrom(), B.getTo()}];
-              });
+    llvm::sort(Result.begin(), Result.end(),
+               [&Operations](const UpdateT &A, const UpdateT &B) {
+                 return Operations[{A.getFrom(), A.getTo()}] >
+                        Operations[{B.getFrom(), B.getTo()}];
+               });
   }
 
   static void ApplyNextUpdate(DomTreeT &DT, BatchUpdateInfo &BUI) {
     assert(!BUI.Updates.empty() && "No updates to apply!");
     UpdateT CurrentUpdate = BUI.Updates.pop_back_val();
-    DEBUG(dbgs() << "Applying update: " << CurrentUpdate << "\n");
+    LLVM_DEBUG(dbgs() << "Applying update: " << CurrentUpdate << "\n");
 
     // Move to the next snapshot of the CFG by removing the reverse-applied
-    // current update.
+    // current update. Since updates are performed in the same order they are
+    // legalized it's sufficient to pop the last item here.
     auto &FS = BUI.FutureSuccessors[CurrentUpdate.getFrom()];
-    FS.erase({CurrentUpdate.getTo(), CurrentUpdate.getKind()});
+    assert(FS.back().getPointer() == CurrentUpdate.getTo() &&
+           FS.back().getInt() == CurrentUpdate.getKind());
+    FS.pop_back();
     if (FS.empty()) BUI.FutureSuccessors.erase(CurrentUpdate.getFrom());
 
     auto &FP = BUI.FuturePredecessors[CurrentUpdate.getTo()];
-    FP.erase({CurrentUpdate.getFrom(), CurrentUpdate.getKind()});
+    assert(FP.back().getPointer() == CurrentUpdate.getFrom() &&
+           FP.back().getInt() == CurrentUpdate.getKind());
+    FP.pop_back();
     if (FP.empty()) BUI.FuturePredecessors.erase(CurrentUpdate.getTo());
 
     if (CurrentUpdate.getKind() == UpdateKind::Insert)
@@ -1430,10 +1446,10 @@
       // Make a copy and sort it such that it is possible to check if there are
       // no gaps between DFS numbers of adjacent children.
       SmallVector<TreeNodePtr, 8> Children(Node->begin(), Node->end());
-      std::sort(Children.begin(), Children.end(),
-                [](const TreeNodePtr Ch1, const TreeNodePtr Ch2) {
-                  return Ch1->getDFSNumIn() < Ch2->getDFSNumIn();
-                });
+      llvm::sort(Children.begin(), Children.end(),
+                 [](const TreeNodePtr Ch1, const TreeNodePtr Ch2) {
+                   return Ch1->getDFSNumIn() < Ch2->getDFSNumIn();
+                 });
 
       auto PrintChildrenError = [Node, &Children, PrintNodeAndDFSNums](
           const TreeNodePtr FirstCh, const TreeNodePtr SecondCh) {
@@ -1530,8 +1546,8 @@
       const NodePtr BB = TN->getBlock();
       if (!BB || TN->getChildren().empty()) continue;
 
-      DEBUG(dbgs() << "Verifying parent property of node "
-                   << BlockNamePrinter(TN) << "\n");
+      LLVM_DEBUG(dbgs() << "Verifying parent property of node "
+                        << BlockNamePrinter(TN) << "\n");
       clear();
       doFullDFSWalk(DT, [BB](NodePtr From, NodePtr To) {
         return From != BB && To != BB;
diff --git a/linux-x64/clang/include/llvm/Support/GraphWriter.h b/linux-x64/clang/include/llvm/Support/GraphWriter.h
index 3df5c86..c9a9f40 100644
--- a/linux-x64/clang/include/llvm/Support/GraphWriter.h
+++ b/linux-x64/clang/include/llvm/Support/GraphWriter.h
@@ -41,7 +41,7 @@
 
 std::string EscapeString(const std::string &Label);
 
-/// \brief Get a color string for this node number. Simply round-robin selects
+/// Get a color string for this node number. Simply round-robin selects
 /// from a reasonable number of colors.
 StringRef getColorString(unsigned NodeNumber);
 
diff --git a/linux-x64/clang/include/llvm/Support/Host.h b/linux-x64/clang/include/llvm/Support/Host.h
index ddc5fa5..57c79c0 100644
--- a/linux-x64/clang/include/llvm/Support/Host.h
+++ b/linux-x64/clang/include/llvm/Support/Host.h
@@ -31,7 +31,7 @@
 #define BYTE_ORDER LITTLE_ENDIAN
 #endif
 #else
-#if !defined(BYTE_ORDER) && !defined(LLVM_ON_WIN32)
+#if !defined(BYTE_ORDER) && !defined(_WIN32)
 #include <machine/endian.h>
 #endif
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/InitLLVM.h b/linux-x64/clang/include/llvm/Support/InitLLVM.h
new file mode 100644
index 0000000..0f629c9
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/InitLLVM.h
@@ -0,0 +1,46 @@
+//===- InitLLVM.h -----------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_LLVM_H
+#define LLVM_SUPPORT_LLVM_H
+
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/Support/Allocator.h"
+#include "llvm/Support/PrettyStackTrace.h"
+
+// The main() functions in typical LLVM tools start with InitLLVM which does
+// the following one-time initializations:
+//
+//  1. Setting up a signal handler so that pretty stack trace is printed out
+//     if a process crashes.
+//
+//  2. If running on Windows, obtain command line arguments using a
+//     multibyte character-aware API and convert arguments into UTF-8
+//     encoding, so that you can assume that command line arguments are
+//     always encoded in UTF-8 on any platform.
+//
+// InitLLVM calls llvm_shutdown() on destruction, which cleans up
+// ManagedStatic objects.
+namespace llvm {
+class InitLLVM {
+public:
+  InitLLVM(int &Argc, const char **&Argv);
+  InitLLVM(int &Argc, char **&Argv)
+      : InitLLVM(Argc, const_cast<const char **&>(Argv)) {}
+
+  ~InitLLVM();
+
+private:
+  BumpPtrAllocator Alloc;
+  SmallVector<const char *, 0> Args;
+  PrettyStackTraceProgram StackPrinter;
+};
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/JSON.h b/linux-x64/clang/include/llvm/Support/JSON.h
new file mode 100644
index 0000000..da3c5ea
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/JSON.h
@@ -0,0 +1,704 @@
+//===--- JSON.h - JSON values, parsing and serialization -------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===---------------------------------------------------------------------===//
+///
+/// \file
+/// This file supports working with JSON data.
+///
+/// It comprises:
+///
+/// - classes which hold dynamically-typed parsed JSON structures
+///   These are value types that can be composed, inspected, and modified.
+///   See json::Value, and the related types json::Object and json::Array.
+///
+/// - functions to parse JSON text into Values, and to serialize Values to text.
+///   See parse(), operator<<, and format_provider.
+///
+/// - a convention and helpers for mapping between json::Value and user-defined
+///   types. See fromJSON(), ObjectMapper, and the class comment on Value.
+///
+/// Typically, JSON data would be read from an external source, parsed into
+/// a Value, and then converted into some native data structure before doing
+/// real work on it. (And vice versa when writing).
+///
+/// Other serialization mechanisms you may consider:
+///
+/// - YAML is also text-based, and more human-readable than JSON. It's a more
+///   complex format and data model, and YAML parsers aren't ubiquitous.
+///   YAMLParser.h is a streaming parser suitable for parsing large documents
+///   (including JSON, as YAML is a superset). It can be awkward to use
+///   directly. YAML I/O (YAMLTraits.h) provides data mapping that is more
+///   declarative than the toJSON/fromJSON conventions here.
+///
+/// - LLVM bitstream is a space- and CPU- efficient binary format. Typically it
+///   encodes LLVM IR ("bitcode"), but it can be a container for other data.
+///   Low-level reader/writer libraries are in Bitcode/Bitstream*.h
+///
+//===---------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_JSON_H
+#define LLVM_SUPPORT_JSON_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/Error.h"
+#include "llvm/Support/FormatVariadic.h"
+#include "llvm/Support/raw_ostream.h"
+#include <map>
+
+namespace llvm {
+namespace json {
+
+// === String encodings ===
+//
+// JSON strings are character sequences (not byte sequences like std::string).
+// We need to know the encoding, and for simplicity only support UTF-8.
+//
+//   - When parsing, invalid UTF-8 is a syntax error like any other
+//
+//   - When creating Values from strings, callers must ensure they are UTF-8.
+//        with asserts on, invalid UTF-8 will crash the program
+//        with asserts off, we'll substitute the replacement character (U+FFFD)
+//     Callers can use json::isUTF8() and json::fixUTF8() for validation.
+//
+//   - When retrieving strings from Values (e.g. asString()), the result will
+//     always be valid UTF-8.
+
+/// Returns true if \p S is valid UTF-8, which is required for use as JSON.
+/// If it returns false, \p Offset is set to a byte offset near the first error.
+bool isUTF8(llvm::StringRef S, size_t *ErrOffset = nullptr);
+/// Replaces invalid UTF-8 sequences in \p S with the replacement character
+/// (U+FFFD). The returned string is valid UTF-8.
+/// This is much slower than isUTF8, so test that first.
+std::string fixUTF8(llvm::StringRef S);
+
+class Array;
+class ObjectKey;
+class Value;
+template <typename T> Value toJSON(const llvm::Optional<T> &Opt);
+
+/// An Object is a JSON object, which maps strings to heterogenous JSON values.
+/// It simulates DenseMap<ObjectKey, Value>. ObjectKey is a maybe-owned string.
+class Object {
+  using Storage = DenseMap<ObjectKey, Value, llvm::DenseMapInfo<StringRef>>;
+  Storage M;
+
+public:
+  using key_type = ObjectKey;
+  using mapped_type = Value;
+  using value_type = Storage::value_type;
+  using iterator = Storage::iterator;
+  using const_iterator = Storage::const_iterator;
+
+  explicit Object() = default;
+  // KV is a trivial key-value struct for list-initialization.
+  // (using std::pair forces extra copies).
+  struct KV;
+  explicit Object(std::initializer_list<KV> Properties);
+
+  iterator begin() { return M.begin(); }
+  const_iterator begin() const { return M.begin(); }
+  iterator end() { return M.end(); }
+  const_iterator end() const { return M.end(); }
+
+  bool empty() const { return M.empty(); }
+  size_t size() const { return M.size(); }
+
+  void clear() { M.clear(); }
+  std::pair<iterator, bool> insert(KV E);
+  template <typename... Ts>
+  std::pair<iterator, bool> try_emplace(const ObjectKey &K, Ts &&... Args) {
+    return M.try_emplace(K, std::forward<Ts>(Args)...);
+  }
+  template <typename... Ts>
+  std::pair<iterator, bool> try_emplace(ObjectKey &&K, Ts &&... Args) {
+    return M.try_emplace(std::move(K), std::forward<Ts>(Args)...);
+  }
+
+  iterator find(StringRef K) { return M.find_as(K); }
+  const_iterator find(StringRef K) const { return M.find_as(K); }
+  // operator[] acts as if Value was default-constructible as null.
+  Value &operator[](const ObjectKey &K);
+  Value &operator[](ObjectKey &&K);
+  // Look up a property, returning nullptr if it doesn't exist.
+  Value *get(StringRef K);
+  const Value *get(StringRef K) const;
+  // Typed accessors return None/nullptr if
+  //   - the property doesn't exist
+  //   - or it has the wrong type
+  llvm::Optional<std::nullptr_t> getNull(StringRef K) const;
+  llvm::Optional<bool> getBoolean(StringRef K) const;
+  llvm::Optional<double> getNumber(StringRef K) const;
+  llvm::Optional<int64_t> getInteger(StringRef K) const;
+  llvm::Optional<llvm::StringRef> getString(StringRef K) const;
+  const json::Object *getObject(StringRef K) const;
+  json::Object *getObject(StringRef K);
+  const json::Array *getArray(StringRef K) const;
+  json::Array *getArray(StringRef K);
+};
+bool operator==(const Object &LHS, const Object &RHS);
+inline bool operator!=(const Object &LHS, const Object &RHS) {
+  return !(LHS == RHS);
+}
+
+/// An Array is a JSON array, which contains heterogeneous JSON values.
+/// It simulates std::vector<Value>.
+class Array {
+  std::vector<Value> V;
+
+public:
+  using value_type = Value;
+  using iterator = std::vector<Value>::iterator;
+  using const_iterator = std::vector<Value>::const_iterator;
+
+  explicit Array() = default;
+  explicit Array(std::initializer_list<Value> Elements);
+  template <typename Collection> explicit Array(const Collection &C) {
+    for (const auto &V : C)
+      emplace_back(V);
+  }
+
+  Value &operator[](size_t I) { return V[I]; }
+  const Value &operator[](size_t I) const { return V[I]; }
+  Value &front() { return V.front(); }
+  const Value &front() const { return V.front(); }
+  Value &back() { return V.back(); }
+  const Value &back() const { return V.back(); }
+  Value *data() { return V.data(); }
+  const Value *data() const { return V.data(); }
+
+  iterator begin() { return V.begin(); }
+  const_iterator begin() const { return V.begin(); }
+  iterator end() { return V.end(); }
+  const_iterator end() const { return V.end(); }
+
+  bool empty() const { return V.empty(); }
+  size_t size() const { return V.size(); }
+
+  void clear() { V.clear(); }
+  void push_back(const Value &E) { V.push_back(E); }
+  void push_back(Value &&E) { V.push_back(std::move(E)); }
+  template <typename... Args> void emplace_back(Args &&... A) {
+    V.emplace_back(std::forward<Args>(A)...);
+  }
+  void pop_back() { V.pop_back(); }
+  // FIXME: insert() takes const_iterator since C++11, old libstdc++ disagrees.
+  iterator insert(iterator P, const Value &E) { return V.insert(P, E); }
+  iterator insert(iterator P, Value &&E) {
+    return V.insert(P, std::move(E));
+  }
+  template <typename It> iterator insert(iterator P, It A, It Z) {
+    return V.insert(P, A, Z);
+  }
+  template <typename... Args> iterator emplace(const_iterator P, Args &&... A) {
+    return V.emplace(P, std::forward<Args>(A)...);
+  }
+
+  friend bool operator==(const Array &L, const Array &R) { return L.V == R.V; }
+};
+inline bool operator!=(const Array &L, const Array &R) { return !(L == R); }
+
+/// A Value is an JSON value of unknown type.
+/// They can be copied, but should generally be moved.
+///
+/// === Composing values ===
+///
+/// You can implicitly construct Values from:
+///   - strings: std::string, SmallString, formatv, StringRef, char*
+///              (char*, and StringRef are references, not copies!)
+///   - numbers
+///   - booleans
+///   - null: nullptr
+///   - arrays: {"foo", 42.0, false}
+///   - serializable things: types with toJSON(const T&)->Value, found by ADL
+///
+/// They can also be constructed from object/array helpers:
+///   - json::Object is a type like map<ObjectKey, Value>
+///   - json::Array is a type like vector<Value>
+/// These can be list-initialized, or used to build up collections in a loop.
+/// json::ary(Collection) converts all items in a collection to Values.
+///
+/// === Inspecting values ===
+///
+/// Each Value is one of the JSON kinds:
+///   null    (nullptr_t)
+///   boolean (bool)
+///   number  (double or int64)
+///   string  (StringRef)
+///   array   (json::Array)
+///   object  (json::Object)
+///
+/// The kind can be queried directly, or implicitly via the typed accessors:
+///   if (Optional<StringRef> S = E.getAsString()
+///     assert(E.kind() == Value::String);
+///
+/// Array and Object also have typed indexing accessors for easy traversal:
+///   Expected<Value> E = parse(R"( {"options": {"font": "sans-serif"}} )");
+///   if (Object* O = E->getAsObject())
+///     if (Object* Opts = O->getObject("options"))
+///       if (Optional<StringRef> Font = Opts->getString("font"))
+///         assert(Opts->at("font").kind() == Value::String);
+///
+/// === Converting JSON values to C++ types ===
+///
+/// The convention is to have a deserializer function findable via ADL:
+///     fromJSON(const json::Value&, T&)->bool
+/// Deserializers are provided for:
+///   - bool
+///   - int and int64_t
+///   - double
+///   - std::string
+///   - vector<T>, where T is deserializable
+///   - map<string, T>, where T is deserializable
+///   - Optional<T>, where T is deserializable
+/// ObjectMapper can help writing fromJSON() functions for object types.
+///
+/// For conversion in the other direction, the serializer function is:
+///    toJSON(const T&) -> json::Value
+/// If this exists, then it also allows constructing Value from T, and can
+/// be used to serialize vector<T>, map<string, T>, and Optional<T>.
+///
+/// === Serialization ===
+///
+/// Values can be serialized to JSON:
+///   1) raw_ostream << Value                    // Basic formatting.
+///   2) raw_ostream << formatv("{0}", Value)    // Basic formatting.
+///   3) raw_ostream << formatv("{0:2}", Value)  // Pretty-print with indent 2.
+///
+/// And parsed:
+///   Expected<Value> E = json::parse("[1, 2, null]");
+///   assert(E && E->kind() == Value::Array);
+class Value {
+public:
+  enum Kind {
+    Null,
+    Boolean,
+    /// Number values can store both int64s and doubles at full precision,
+    /// depending on what they were constructed/parsed from.
+    Number,
+    String,
+    Array,
+    Object,
+  };
+
+  // It would be nice to have Value() be null. But that would make {} null too.
+  Value(const Value &M) { copyFrom(M); }
+  Value(Value &&M) { moveFrom(std::move(M)); }
+  Value(std::initializer_list<Value> Elements);
+  Value(json::Array &&Elements) : Type(T_Array) {
+    create<json::Array>(std::move(Elements));
+  }
+  Value(json::Object &&Properties) : Type(T_Object) {
+    create<json::Object>(std::move(Properties));
+  }
+  // Strings: types with value semantics. Must be valid UTF-8.
+  Value(std::string V) : Type(T_String) {
+    if (LLVM_UNLIKELY(!isUTF8(V))) {
+      assert(false && "Invalid UTF-8 in value used as JSON");
+      V = fixUTF8(std::move(V));
+    }
+    create<std::string>(std::move(V));
+  }
+  Value(const llvm::SmallVectorImpl<char> &V)
+      : Value(std::string(V.begin(), V.end())){};
+  Value(const llvm::formatv_object_base &V) : Value(V.str()){};
+  // Strings: types with reference semantics. Must be valid UTF-8.
+  Value(StringRef V) : Type(T_StringRef) {
+    create<llvm::StringRef>(V);
+    if (LLVM_UNLIKELY(!isUTF8(V))) {
+      assert(false && "Invalid UTF-8 in value used as JSON");
+      *this = Value(fixUTF8(V));
+    }
+  }
+  Value(const char *V) : Value(StringRef(V)) {}
+  Value(std::nullptr_t) : Type(T_Null) {}
+  // Boolean (disallow implicit conversions).
+  // (The last template parameter is a dummy to keep templates distinct.)
+  template <
+      typename T,
+      typename = typename std::enable_if<std::is_same<T, bool>::value>::type,
+      bool = false>
+  Value(T B) : Type(T_Boolean) {
+    create<bool>(B);
+  }
+  // Integers (except boolean). Must be non-narrowing convertible to int64_t.
+  template <
+      typename T,
+      typename = typename std::enable_if<std::is_integral<T>::value>::type,
+      typename = typename std::enable_if<!std::is_same<T, bool>::value>::type>
+  Value(T I) : Type(T_Integer) {
+    create<int64_t>(int64_t{I});
+  }
+  // Floating point. Must be non-narrowing convertible to double.
+  template <typename T,
+            typename =
+                typename std::enable_if<std::is_floating_point<T>::value>::type,
+            double * = nullptr>
+  Value(T D) : Type(T_Double) {
+    create<double>(double{D});
+  }
+  // Serializable types: with a toJSON(const T&)->Value function, found by ADL.
+  template <typename T,
+            typename = typename std::enable_if<std::is_same<
+                Value, decltype(toJSON(*(const T *)nullptr))>::value>,
+            Value * = nullptr>
+  Value(const T &V) : Value(toJSON(V)) {}
+
+  Value &operator=(const Value &M) {
+    destroy();
+    copyFrom(M);
+    return *this;
+  }
+  Value &operator=(Value &&M) {
+    destroy();
+    moveFrom(std::move(M));
+    return *this;
+  }
+  ~Value() { destroy(); }
+
+  Kind kind() const {
+    switch (Type) {
+    case T_Null:
+      return Null;
+    case T_Boolean:
+      return Boolean;
+    case T_Double:
+    case T_Integer:
+      return Number;
+    case T_String:
+    case T_StringRef:
+      return String;
+    case T_Object:
+      return Object;
+    case T_Array:
+      return Array;
+    }
+    llvm_unreachable("Unknown kind");
+  }
+
+  // Typed accessors return None/nullptr if the Value is not of this type.
+  llvm::Optional<std::nullptr_t> getAsNull() const {
+    if (LLVM_LIKELY(Type == T_Null))
+      return nullptr;
+    return llvm::None;
+  }
+  llvm::Optional<bool> getAsBoolean() const {
+    if (LLVM_LIKELY(Type == T_Boolean))
+      return as<bool>();
+    return llvm::None;
+  }
+  llvm::Optional<double> getAsNumber() const {
+    if (LLVM_LIKELY(Type == T_Double))
+      return as<double>();
+    if (LLVM_LIKELY(Type == T_Integer))
+      return as<int64_t>();
+    return llvm::None;
+  }
+  // Succeeds if the Value is a Number, and exactly representable as int64_t.
+  llvm::Optional<int64_t> getAsInteger() const {
+    if (LLVM_LIKELY(Type == T_Integer))
+      return as<int64_t>();
+    if (LLVM_LIKELY(Type == T_Double)) {
+      double D = as<double>();
+      if (LLVM_LIKELY(std::modf(D, &D) == 0.0 &&
+                      D >= double(std::numeric_limits<int64_t>::min()) &&
+                      D <= double(std::numeric_limits<int64_t>::max())))
+        return D;
+    }
+    return llvm::None;
+  }
+  llvm::Optional<llvm::StringRef> getAsString() const {
+    if (Type == T_String)
+      return llvm::StringRef(as<std::string>());
+    if (LLVM_LIKELY(Type == T_StringRef))
+      return as<llvm::StringRef>();
+    return llvm::None;
+  }
+  const json::Object *getAsObject() const {
+    return LLVM_LIKELY(Type == T_Object) ? &as<json::Object>() : nullptr;
+  }
+  json::Object *getAsObject() {
+    return LLVM_LIKELY(Type == T_Object) ? &as<json::Object>() : nullptr;
+  }
+  const json::Array *getAsArray() const {
+    return LLVM_LIKELY(Type == T_Array) ? &as<json::Array>() : nullptr;
+  }
+  json::Array *getAsArray() {
+    return LLVM_LIKELY(Type == T_Array) ? &as<json::Array>() : nullptr;
+  }
+
+  /// Serializes this Value to JSON, writing it to the provided stream.
+  /// The formatting is compact (no extra whitespace) and deterministic.
+  /// For pretty-printing, use the formatv() format_provider below.
+  friend llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Value &);
+
+private:
+  void destroy();
+  void copyFrom(const Value &M);
+  // We allow moving from *const* Values, by marking all members as mutable!
+  // This hack is needed to support initializer-list syntax efficiently.
+  // (std::initializer_list<T> is a container of const T).
+  void moveFrom(const Value &&M);
+  friend class Array;
+  friend class Object;
+
+  template <typename T, typename... U> void create(U &&... V) {
+    new (reinterpret_cast<T *>(Union.buffer)) T(std::forward<U>(V)...);
+  }
+  template <typename T> T &as() const {
+    return *reinterpret_cast<T *>(Union.buffer);
+  }
+
+  template <typename Indenter>
+  void print(llvm::raw_ostream &, const Indenter &) const;
+  friend struct llvm::format_provider<llvm::json::Value>;
+
+  enum ValueType : char {
+    T_Null,
+    T_Boolean,
+    T_Double,
+    T_Integer,
+    T_StringRef,
+    T_String,
+    T_Object,
+    T_Array,
+  };
+  // All members mutable, see moveFrom().
+  mutable ValueType Type;
+  mutable llvm::AlignedCharArrayUnion<bool, double, int64_t, llvm::StringRef,
+                                      std::string, json::Array, json::Object>
+      Union;
+};
+
+bool operator==(const Value &, const Value &);
+inline bool operator!=(const Value &L, const Value &R) { return !(L == R); }
+llvm::raw_ostream &operator<<(llvm::raw_ostream &, const Value &);
+
+/// ObjectKey is a used to capture keys in Object. Like Value but:
+///   - only strings are allowed
+///   - it's optimized for the string literal case (Owned == nullptr)
+/// Like Value, strings must be UTF-8. See isUTF8 documentation for details.
+class ObjectKey {
+public:
+  ObjectKey(const char *S) : ObjectKey(StringRef(S)) {}
+  ObjectKey(std::string S) : Owned(new std::string(std::move(S))) {
+    if (LLVM_UNLIKELY(!isUTF8(*Owned))) {
+      assert(false && "Invalid UTF-8 in value used as JSON");
+      *Owned = fixUTF8(std::move(*Owned));
+    }
+    Data = *Owned;
+  }
+  ObjectKey(llvm::StringRef S) : Data(S) {
+    if (LLVM_UNLIKELY(!isUTF8(Data))) {
+      assert(false && "Invalid UTF-8 in value used as JSON");
+      *this = ObjectKey(fixUTF8(S));
+    }
+  }
+  ObjectKey(const llvm::SmallVectorImpl<char> &V)
+      : ObjectKey(std::string(V.begin(), V.end())) {}
+  ObjectKey(const llvm::formatv_object_base &V) : ObjectKey(V.str()) {}
+
+  ObjectKey(const ObjectKey &C) { *this = C; }
+  ObjectKey(ObjectKey &&C) : ObjectKey(static_cast<const ObjectKey &&>(C)) {}
+  ObjectKey &operator=(const ObjectKey &C) {
+    if (C.Owned) {
+      Owned.reset(new std::string(*C.Owned));
+      Data = *Owned;
+    } else {
+      Data = C.Data;
+    }
+    return *this;
+  }
+  ObjectKey &operator=(ObjectKey &&) = default;
+
+  operator llvm::StringRef() const { return Data; }
+  std::string str() const { return Data.str(); }
+
+private:
+  // FIXME: this is unneccesarily large (3 pointers). Pointer + length + owned
+  // could be 2 pointers at most.
+  std::unique_ptr<std::string> Owned;
+  llvm::StringRef Data;
+};
+
+inline bool operator==(const ObjectKey &L, const ObjectKey &R) {
+  return llvm::StringRef(L) == llvm::StringRef(R);
+}
+inline bool operator!=(const ObjectKey &L, const ObjectKey &R) {
+  return !(L == R);
+}
+inline bool operator<(const ObjectKey &L, const ObjectKey &R) {
+  return StringRef(L) < StringRef(R);
+}
+
+struct Object::KV {
+  ObjectKey K;
+  Value V;
+};
+
+inline Object::Object(std::initializer_list<KV> Properties) {
+  for (const auto &P : Properties) {
+    auto R = try_emplace(P.K, nullptr);
+    if (R.second)
+      R.first->getSecond().moveFrom(std::move(P.V));
+  }
+}
+inline std::pair<Object::iterator, bool> Object::insert(KV E) {
+  return try_emplace(std::move(E.K), std::move(E.V));
+}
+
+// Standard deserializers are provided for primitive types.
+// See comments on Value.
+inline bool fromJSON(const Value &E, std::string &Out) {
+  if (auto S = E.getAsString()) {
+    Out = *S;
+    return true;
+  }
+  return false;
+}
+inline bool fromJSON(const Value &E, int &Out) {
+  if (auto S = E.getAsInteger()) {
+    Out = *S;
+    return true;
+  }
+  return false;
+}
+inline bool fromJSON(const Value &E, int64_t &Out) {
+  if (auto S = E.getAsInteger()) {
+    Out = *S;
+    return true;
+  }
+  return false;
+}
+inline bool fromJSON(const Value &E, double &Out) {
+  if (auto S = E.getAsNumber()) {
+    Out = *S;
+    return true;
+  }
+  return false;
+}
+inline bool fromJSON(const Value &E, bool &Out) {
+  if (auto S = E.getAsBoolean()) {
+    Out = *S;
+    return true;
+  }
+  return false;
+}
+template <typename T> bool fromJSON(const Value &E, llvm::Optional<T> &Out) {
+  if (E.getAsNull()) {
+    Out = llvm::None;
+    return true;
+  }
+  T Result;
+  if (!fromJSON(E, Result))
+    return false;
+  Out = std::move(Result);
+  return true;
+}
+template <typename T> bool fromJSON(const Value &E, std::vector<T> &Out) {
+  if (auto *A = E.getAsArray()) {
+    Out.clear();
+    Out.resize(A->size());
+    for (size_t I = 0; I < A->size(); ++I)
+      if (!fromJSON((*A)[I], Out[I]))
+        return false;
+    return true;
+  }
+  return false;
+}
+template <typename T>
+bool fromJSON(const Value &E, std::map<std::string, T> &Out) {
+  if (auto *O = E.getAsObject()) {
+    Out.clear();
+    for (const auto &KV : *O)
+      if (!fromJSON(KV.second, Out[llvm::StringRef(KV.first)]))
+        return false;
+    return true;
+  }
+  return false;
+}
+
+// Allow serialization of Optional<T> for supported T.
+template <typename T> Value toJSON(const llvm::Optional<T> &Opt) {
+  return Opt ? Value(*Opt) : Value(nullptr);
+}
+
+/// Helper for mapping JSON objects onto protocol structs.
+///
+/// Example:
+/// \code
+///   bool fromJSON(const Value &E, MyStruct &R) {
+///     ObjectMapper O(E);
+///     if (!O || !O.map("mandatory_field", R.MandatoryField))
+///       return false;
+///     O.map("optional_field", R.OptionalField);
+///     return true;
+///   }
+/// \endcode
+class ObjectMapper {
+public:
+  ObjectMapper(const Value &E) : O(E.getAsObject()) {}
+
+  /// True if the expression is an object.
+  /// Must be checked before calling map().
+  operator bool() { return O; }
+
+  /// Maps a property to a field, if it exists.
+  template <typename T> bool map(StringRef Prop, T &Out) {
+    assert(*this && "Must check this is an object before calling map()");
+    if (const Value *E = O->get(Prop))
+      return fromJSON(*E, Out);
+    return false;
+  }
+
+  /// Maps a property to a field, if it exists.
+  /// (Optional requires special handling, because missing keys are OK).
+  template <typename T> bool map(StringRef Prop, llvm::Optional<T> &Out) {
+    assert(*this && "Must check this is an object before calling map()");
+    if (const Value *E = O->get(Prop))
+      return fromJSON(*E, Out);
+    Out = llvm::None;
+    return true;
+  }
+
+private:
+  const Object *O;
+};
+
+/// Parses the provided JSON source, or returns a ParseError.
+/// The returned Value is self-contained and owns its strings (they do not refer
+/// to the original source).
+llvm::Expected<Value> parse(llvm::StringRef JSON);
+
+class ParseError : public llvm::ErrorInfo<ParseError> {
+  const char *Msg;
+  unsigned Line, Column, Offset;
+
+public:
+  static char ID;
+  ParseError(const char *Msg, unsigned Line, unsigned Column, unsigned Offset)
+      : Msg(Msg), Line(Line), Column(Column), Offset(Offset) {}
+  void log(llvm::raw_ostream &OS) const override {
+    OS << llvm::formatv("[{0}:{1}, byte={2}]: {3}", Line, Column, Offset, Msg);
+  }
+  std::error_code convertToErrorCode() const override {
+    return llvm::inconvertibleErrorCode();
+  }
+};
+} // namespace json
+
+/// Allow printing json::Value with formatv().
+/// The default style is basic/compact formatting, like operator<<.
+/// A format string like formatv("{0:2}", Value) pretty-prints with indent 2.
+template <> struct format_provider<llvm::json::Value> {
+  static void format(const llvm::json::Value &, raw_ostream &, StringRef);
+};
+} // namespace llvm
+
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/JamCRC.h b/linux-x64/clang/include/llvm/Support/JamCRC.h
index 5268bbd..846d6ce 100644
--- a/linux-x64/clang/include/llvm/Support/JamCRC.h
+++ b/linux-x64/clang/include/llvm/Support/JamCRC.h
@@ -36,7 +36,7 @@
 public:
   JamCRC(uint32_t Init = 0xFFFFFFFFU) : CRC(Init) {}
 
-  // \brief Update the CRC calculation with Data.
+  // Update the CRC calculation with Data.
   void update(ArrayRef<char> Data);
 
   uint32_t getCRC() const { return CRC; }
diff --git a/linux-x64/clang/include/llvm/Support/KnownBits.h b/linux-x64/clang/include/llvm/Support/KnownBits.h
index 97e73b1..259df95 100644
--- a/linux-x64/clang/include/llvm/Support/KnownBits.h
+++ b/linux-x64/clang/include/llvm/Support/KnownBits.h
@@ -103,7 +103,7 @@
     One.setSignBit();
   }
 
-  /// Make this value negative.
+  /// Make this value non-negative.
   void makeNonNegative() {
     Zero.setSignBit();
   }
diff --git a/linux-x64/clang/include/llvm/Support/LineIterator.h b/linux-x64/clang/include/llvm/Support/LineIterator.h
index 9d4cd3b..892d289 100644
--- a/linux-x64/clang/include/llvm/Support/LineIterator.h
+++ b/linux-x64/clang/include/llvm/Support/LineIterator.h
@@ -18,7 +18,7 @@
 
 class MemoryBuffer;
 
-/// \brief A forward iterator which reads text lines from a buffer.
+/// A forward iterator which reads text lines from a buffer.
 ///
 /// This class provides a forward iterator interface for reading one line at
 /// a time from a buffer. When default constructed the iterator will be the
@@ -39,23 +39,23 @@
   StringRef CurrentLine;
 
 public:
-  /// \brief Default construct an "end" iterator.
+  /// Default construct an "end" iterator.
   line_iterator() : Buffer(nullptr) {}
 
-  /// \brief Construct a new iterator around some memory buffer.
+  /// Construct a new iterator around some memory buffer.
   explicit line_iterator(const MemoryBuffer &Buffer, bool SkipBlanks = true,
                          char CommentMarker = '\0');
 
-  /// \brief Return true if we've reached EOF or are an "end" iterator.
+  /// Return true if we've reached EOF or are an "end" iterator.
   bool is_at_eof() const { return !Buffer; }
 
-  /// \brief Return true if we're an "end" iterator or have reached EOF.
+  /// Return true if we're an "end" iterator or have reached EOF.
   bool is_at_end() const { return is_at_eof(); }
 
-  /// \brief Return the current line number. May return any number at EOF.
+  /// Return the current line number. May return any number at EOF.
   int64_t line_number() const { return LineNumber; }
 
-  /// \brief Advance to the next (non-empty, non-comment) line.
+  /// Advance to the next (non-empty, non-comment) line.
   line_iterator &operator++() {
     advance();
     return *this;
@@ -66,7 +66,7 @@
     return tmp;
   }
 
-  /// \brief Get the current line as a \c StringRef.
+  /// Get the current line as a \c StringRef.
   StringRef operator*() const { return CurrentLine; }
   const StringRef *operator->() const { return &CurrentLine; }
 
@@ -80,7 +80,7 @@
   }
 
 private:
-  /// \brief Advance the iterator to the next line.
+  /// Advance the iterator to the next line.
   void advance();
 };
 }
diff --git a/linux-x64/clang/include/llvm/Support/LockFileManager.h b/linux-x64/clang/include/llvm/Support/LockFileManager.h
index 1e417bd..86db0b2 100644
--- a/linux-x64/clang/include/llvm/Support/LockFileManager.h
+++ b/linux-x64/clang/include/llvm/Support/LockFileManager.h
@@ -11,14 +11,13 @@
 
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/SmallString.h"
-#include "llvm/Support/FileSystem.h"
 #include <system_error>
 #include <utility> // for std::pair
 
 namespace llvm {
 class StringRef;
 
-/// \brief Class that manages the creation of a lock file to aid
+/// Class that manages the creation of a lock file to aid
 /// implicit coordination between different processes.
 ///
 /// The implicit coordination works by creating a ".lock" file alongside
@@ -28,33 +27,33 @@
 /// operation.
 class LockFileManager {
 public:
-  /// \brief Describes the state of a lock file.
+  /// Describes the state of a lock file.
   enum LockFileState {
-    /// \brief The lock file has been created and is owned by this instance
+    /// The lock file has been created and is owned by this instance
     /// of the object.
     LFS_Owned,
-    /// \brief The lock file already exists and is owned by some other
+    /// The lock file already exists and is owned by some other
     /// instance.
     LFS_Shared,
-    /// \brief An error occurred while trying to create or find the lock
+    /// An error occurred while trying to create or find the lock
     /// file.
     LFS_Error
   };
 
-  /// \brief Describes the result of waiting for the owner to release the lock.
+  /// Describes the result of waiting for the owner to release the lock.
   enum WaitForUnlockResult {
-    /// \brief The lock was released successfully.
+    /// The lock was released successfully.
     Res_Success,
-    /// \brief Owner died while holding the lock.
+    /// Owner died while holding the lock.
     Res_OwnerDied,
-    /// \brief Reached timeout while waiting for the owner to release the lock.
+    /// Reached timeout while waiting for the owner to release the lock.
     Res_Timeout
   };
 
 private:
   SmallString<128> FileName;
   SmallString<128> LockFileName;
-  Optional<sys::fs::TempFile> UniqueLockFile;
+  SmallString<128> UniqueLockFileName;
 
   Optional<std::pair<std::string, int> > Owner;
   std::error_code ErrorCode;
@@ -73,22 +72,22 @@
   LockFileManager(StringRef FileName);
   ~LockFileManager();
 
-  /// \brief Determine the state of the lock file.
+  /// Determine the state of the lock file.
   LockFileState getState() const;
 
   operator LockFileState() const { return getState(); }
 
-  /// \brief For a shared lock, wait until the owner releases the lock.
+  /// For a shared lock, wait until the owner releases the lock.
   WaitForUnlockResult waitForUnlock();
 
-  /// \brief Remove the lock file.  This may delete a different lock file than
+  /// Remove the lock file.  This may delete a different lock file than
   /// the one previously read if there is a race.
   std::error_code unsafeRemoveLockFile();
 
-  /// \brief Get error message, or "" if there is no error.
+  /// Get error message, or "" if there is no error.
   std::string getErrorMessage() const;
 
-  /// \brief Set error and error message
+  /// Set error and error message
   void setError(const std::error_code &EC, StringRef ErrorMsg = "") {
     ErrorCode = EC;
     ErrorDiagMsg = ErrorMsg.str();
diff --git a/linux-x64/clang/include/llvm/Support/MD5.h b/linux-x64/clang/include/llvm/Support/MD5.h
index 2c0dc76..bb2bdbf 100644
--- a/linux-x64/clang/include/llvm/Support/MD5.h
+++ b/linux-x64/clang/include/llvm/Support/MD5.h
@@ -81,20 +81,20 @@
 
   MD5();
 
-  /// \brief Updates the hash for the byte stream provided.
+  /// Updates the hash for the byte stream provided.
   void update(ArrayRef<uint8_t> Data);
 
-  /// \brief Updates the hash for the StringRef provided.
+  /// Updates the hash for the StringRef provided.
   void update(StringRef Str);
 
-  /// \brief Finishes off the hash and puts the result in result.
+  /// Finishes off the hash and puts the result in result.
   void final(MD5Result &Result);
 
-  /// \brief Translates the bytes in \p Res to a hex string that is
+  /// Translates the bytes in \p Res to a hex string that is
   /// deposited into \p Str. The result will be of length 32.
   static void stringifyResult(MD5Result &Result, SmallString<32> &Str);
 
-  /// \brief Computes the hash for a given bytes.
+  /// Computes the hash for a given bytes.
   static std::array<uint8_t, 16> hash(ArrayRef<uint8_t> Data);
 
 private:
diff --git a/linux-x64/clang/include/llvm/Support/MathExtras.h b/linux-x64/clang/include/llvm/Support/MathExtras.h
index a37a167..b59f21b 100644
--- a/linux-x64/clang/include/llvm/Support/MathExtras.h
+++ b/linux-x64/clang/include/llvm/Support/MathExtras.h
@@ -23,22 +23,30 @@
 #include <limits>
 #include <type_traits>
 
-#ifdef _MSC_VER
-#include <intrin.h>
-#endif
-
 #ifdef __ANDROID_NDK__
 #include <android/api-level.h>
 #endif
 
+#ifdef _MSC_VER
+// Declare these intrinsics manually rather including intrin.h. It's very
+// expensive, and MathExtras.h is popular.
+// #include <intrin.h>
+extern "C" {
+unsigned char _BitScanForward(unsigned long *_Index, unsigned long _Mask);
+unsigned char _BitScanForward64(unsigned long *_Index, unsigned __int64 _Mask);
+unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask);
+unsigned char _BitScanReverse64(unsigned long *_Index, unsigned __int64 _Mask);
+}
+#endif
+
 namespace llvm {
-/// \brief The behavior an operation has on an input of 0.
+/// The behavior an operation has on an input of 0.
 enum ZeroBehavior {
-  /// \brief The returned value is undefined.
+  /// The returned value is undefined.
   ZB_Undefined,
-  /// \brief The returned value is numeric_limits<T>::max()
+  /// The returned value is numeric_limits<T>::max()
   ZB_Max,
-  /// \brief The returned value is numeric_limits<T>::digits
+  /// The returned value is numeric_limits<T>::digits
   ZB_Width
 };
 
@@ -101,7 +109,7 @@
 #endif
 } // namespace detail
 
-/// \brief Count number of 0's from the least significant bit to the most
+/// Count number of 0's from the least significant bit to the most
 ///   stopping at the first 1.
 ///
 /// Only unsigned integral types are allowed.
@@ -170,7 +178,7 @@
 #endif
 } // namespace detail
 
-/// \brief Count number of 0's from the most significant bit to the least
+/// Count number of 0's from the most significant bit to the least
 ///   stopping at the first 1.
 ///
 /// Only unsigned integral types are allowed.
@@ -185,7 +193,7 @@
   return llvm::detail::LeadingZerosCounter<T, sizeof(T)>::count(Val, ZB);
 }
 
-/// \brief Get the index of the first set bit starting from the least
+/// Get the index of the first set bit starting from the least
 ///   significant bit.
 ///
 /// Only unsigned integral types are allowed.
@@ -199,7 +207,7 @@
   return countTrailingZeros(Val, ZB_Undefined);
 }
 
-/// \brief Create a bitmask with the N right-most bits set to 1, and all other
+/// Create a bitmask with the N right-most bits set to 1, and all other
 /// bits set to 0.  Only unsigned types are allowed.
 template <typename T> T maskTrailingOnes(unsigned N) {
   static_assert(std::is_unsigned<T>::value, "Invalid type!");
@@ -208,25 +216,25 @@
   return N == 0 ? 0 : (T(-1) >> (Bits - N));
 }
 
-/// \brief Create a bitmask with the N left-most bits set to 1, and all other
+/// Create a bitmask with the N left-most bits set to 1, and all other
 /// bits set to 0.  Only unsigned types are allowed.
 template <typename T> T maskLeadingOnes(unsigned N) {
   return ~maskTrailingOnes<T>(CHAR_BIT * sizeof(T) - N);
 }
 
-/// \brief Create a bitmask with the N right-most bits set to 0, and all other
+/// Create a bitmask with the N right-most bits set to 0, and all other
 /// bits set to 1.  Only unsigned types are allowed.
 template <typename T> T maskTrailingZeros(unsigned N) {
   return maskLeadingOnes<T>(CHAR_BIT * sizeof(T) - N);
 }
 
-/// \brief Create a bitmask with the N left-most bits set to 0, and all other
+/// Create a bitmask with the N left-most bits set to 0, and all other
 /// bits set to 1.  Only unsigned types are allowed.
 template <typename T> T maskLeadingZeros(unsigned N) {
   return maskTrailingOnes<T>(CHAR_BIT * sizeof(T) - N);
 }
 
-/// \brief Get the index of the last set bit starting from the least
+/// Get the index of the last set bit starting from the least
 ///   significant bit.
 ///
 /// Only unsigned integral types are allowed.
@@ -243,7 +251,7 @@
          (std::numeric_limits<T>::digits - 1);
 }
 
-/// \brief Macro compressed bit reversal table for 256 bits.
+/// Macro compressed bit reversal table for 256 bits.
 ///
 /// http://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable
 static const unsigned char BitReverseTable256[256] = {
@@ -256,7 +264,7 @@
 #undef R6
 };
 
-/// \brief Reverse the bits in \p Val.
+/// Reverse the bits in \p Val.
 template <typename T>
 T reverseBits(T Val) {
   unsigned char in[sizeof(Val)];
@@ -442,7 +450,7 @@
   return sys::SwapByteOrder_64(Value);
 }
 
-/// \brief Count the number of ones from the most significant bit to the first
+/// Count the number of ones from the most significant bit to the first
 /// zero bit.
 ///
 /// Ex. countLeadingOnes(0xFF0FFF00) == 8.
@@ -455,10 +463,10 @@
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
-  return countLeadingZeros(~Value, ZB);
+  return countLeadingZeros<T>(~Value, ZB);
 }
 
-/// \brief Count the number of ones from the least significant bit to the first
+/// Count the number of ones from the least significant bit to the first
 /// zero bit.
 ///
 /// Ex. countTrailingOnes(0x00FF00FF) == 8.
@@ -471,7 +479,7 @@
   static_assert(std::numeric_limits<T>::is_integer &&
                     !std::numeric_limits<T>::is_signed,
                 "Only unsigned integral types are allowed.");
-  return countTrailingZeros(~Value, ZB);
+  return countTrailingZeros<T>(~Value, ZB);
 }
 
 namespace detail {
@@ -505,7 +513,7 @@
 };
 } // namespace detail
 
-/// \brief Count the number of set bits in a value.
+/// Count the number of set bits in a value.
 /// Ex. countPopulation(0xF000F000) = 8
 /// Returns 0 if the word is zero.
 template <typename T>
@@ -608,7 +616,7 @@
   return (A | B) & (1 + ~(A | B));
 }
 
-/// \brief Aligns \c Addr to \c Alignment bytes, rounding up.
+/// Aligns \c Addr to \c Alignment bytes, rounding up.
 ///
 /// Alignment should be a power of two.  This method rounds up, so
 /// alignAddr(7, 4) == 8 and alignAddr(8, 4) == 8.
@@ -621,7 +629,7 @@
   return (((uintptr_t)Addr + Alignment - 1) & ~(uintptr_t)(Alignment - 1));
 }
 
-/// \brief Returns the necessary adjustment for aligning \c Ptr to \c Alignment
+/// Returns the necessary adjustment for aligning \c Ptr to \c Alignment
 /// bytes, rounding up.
 inline size_t alignmentAdjustment(const void *Ptr, size_t Alignment) {
   return alignAddr(Ptr, Alignment) - (uintptr_t)Ptr;
diff --git a/linux-x64/clang/include/llvm/Support/MemAlloc.h b/linux-x64/clang/include/llvm/Support/MemAlloc.h
new file mode 100644
index 0000000..d06c659
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/MemAlloc.h
@@ -0,0 +1,49 @@
+//===- MemAlloc.h - Memory allocation functions -----------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+///
+/// This file defines counterparts of C library allocation functions defined in
+/// the namespace 'std'. The new allocation functions crash on allocation
+/// failure instead of returning null pointer.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_MEMALLOC_H
+#define LLVM_SUPPORT_MEMALLOC_H
+
+#include "llvm/Support/Compiler.h"
+#include "llvm/Support/ErrorHandling.h"
+#include <cstdlib>
+
+namespace llvm {
+
+LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_malloc(size_t Sz) {
+  void *Result = std::malloc(Sz);
+  if (Result == nullptr)
+    report_bad_alloc_error("Allocation failed");
+  return Result;
+}
+
+LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_calloc(size_t Count,
+                                                        size_t Sz) {
+  void *Result = std::calloc(Count, Sz);
+  if (Result == nullptr)
+    report_bad_alloc_error("Allocation failed");
+  return Result;
+}
+
+LLVM_ATTRIBUTE_RETURNS_NONNULL inline void *safe_realloc(void *Ptr, size_t Sz) {
+  void *Result = std::realloc(Ptr, Sz);
+  if (Result == nullptr)
+    report_bad_alloc_error("Allocation failed");
+  return Result;
+}
+
+}
+#endif
diff --git a/linux-x64/clang/include/llvm/Support/Memory.h b/linux-x64/clang/include/llvm/Support/Memory.h
index 3140dc6..fa026d4 100644
--- a/linux-x64/clang/include/llvm/Support/Memory.h
+++ b/linux-x64/clang/include/llvm/Support/Memory.h
@@ -25,7 +25,7 @@
   /// and a size. It is used by the Memory class (a friend) as the result of
   /// various memory allocation operations.
   /// @see Memory
-  /// @brief Memory block abstraction.
+  /// Memory block abstraction.
   class MemoryBlock {
   public:
     MemoryBlock() : Address(nullptr), Size(0) { }
@@ -42,7 +42,7 @@
   /// This class provides various memory handling functions that manipulate
   /// MemoryBlock instances.
   /// @since 1.4
-  /// @brief An abstraction for memory operations.
+  /// An abstraction for memory operations.
   class Memory {
   public:
     enum ProtectionFlags {
@@ -74,7 +74,7 @@
     /// \r a non-null MemoryBlock if the function was successful,
     /// otherwise a null MemoryBlock is with \p EC describing the error.
     ///
-    /// @brief Allocate mapped memory.
+    /// Allocate mapped memory.
     static MemoryBlock allocateMappedMemory(size_t NumBytes,
                                             const MemoryBlock *const NearBlock,
                                             unsigned Flags,
@@ -88,7 +88,7 @@
     /// \r error_success if the function was successful, or an error_code
     /// describing the failure if an error occurred.
     ///
-    /// @brief Release mapped memory.
+    /// Release mapped memory.
     static std::error_code releaseMappedMemory(MemoryBlock &Block);
 
     /// This method sets the protection flags for a block of memory to the
@@ -105,7 +105,7 @@
     /// \r error_success if the function was successful, or an error_code
     /// describing the failure if an error occurred.
     ///
-    /// @brief Set memory protection state.
+    /// Set memory protection state.
     static std::error_code protectMappedMemory(const MemoryBlock &Block,
                                                unsigned Flags);
 
diff --git a/linux-x64/clang/include/llvm/Support/MemoryBuffer.h b/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
index 2997ae4..8933295 100644
--- a/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
+++ b/linux-x64/clang/include/llvm/Support/MemoryBuffer.h
@@ -43,7 +43,6 @@
   const char *BufferStart; // Start of the buffer.
   const char *BufferEnd;   // End of the buffer.
 
-
 protected:
   MemoryBuffer() = default;
 
diff --git a/linux-x64/clang/include/llvm/Support/MipsABIFlags.h b/linux-x64/clang/include/llvm/Support/MipsABIFlags.h
index 40e62e7..12c3500 100644
--- a/linux-x64/clang/include/llvm/Support/MipsABIFlags.h
+++ b/linux-x64/clang/include/llvm/Support/MipsABIFlags.h
@@ -43,7 +43,8 @@
   AFL_ASE_MIPS16 = 0x00000400,    // MIPS16 ASE
   AFL_ASE_MICROMIPS = 0x00000800, // MICROMIPS ASE
   AFL_ASE_XPA = 0x00001000,       // XPA ASE
-  AFL_ASE_CRC = 0x00008000        // CRC ASE
+  AFL_ASE_CRC = 0x00008000,       // CRC ASE
+  AFL_ASE_GINV = 0x00020000       // GINV ASE
 };
 
 // Values for the isa_ext word of an ABI flags structure.
diff --git a/linux-x64/clang/include/llvm/Support/Mutex.h b/linux-x64/clang/include/llvm/Support/Mutex.h
index 0f4e61a..680d94b 100644
--- a/linux-x64/clang/include/llvm/Support/Mutex.h
+++ b/linux-x64/clang/include/llvm/Support/Mutex.h
@@ -14,6 +14,7 @@
 #ifndef LLVM_SUPPORT_MUTEX_H
 #define LLVM_SUPPORT_MUTEX_H
 
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Compiler.h"
 #include "llvm/Support/Threading.h"
 #include <cassert>
@@ -22,7 +23,7 @@
 {
   namespace sys
   {
-    /// @brief Platform agnostic Mutex class.
+    /// Platform agnostic Mutex class.
     class MutexImpl
     {
     /// @name Constructors
@@ -33,11 +34,11 @@
       /// to false, the lock will not be recursive which makes it cheaper but
       /// also more likely to deadlock (same thread can't acquire more than
       /// once).
-      /// @brief Default Constructor.
+      /// Default Constructor.
       explicit MutexImpl(bool recursive = true);
 
       /// Releases and removes the lock
-      /// @brief Destructor
+      /// Destructor
       ~MutexImpl();
 
     /// @}
@@ -48,14 +49,14 @@
       /// Attempts to unconditionally acquire the lock. If the lock is held by
       /// another thread, this method will wait until it can acquire the lock.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally acquire the lock.
+      /// Unconditionally acquire the lock.
       bool acquire();
 
       /// Attempts to release the lock. If the lock is held by the current
       /// thread, the lock is released allowing other threads to acquire the
       /// lock.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally release the lock.
+      /// Unconditionally release the lock.
       bool release();
 
       /// Attempts to acquire the lock without blocking. If the lock is not
@@ -63,7 +64,7 @@
       /// the lock is available, it is acquired.
       /// @returns false if any kind of error occurs or the lock is not
       /// available, true otherwise.
-      /// @brief Try to acquire the lock.
+      /// Try to acquire the lock.
       bool tryacquire();
 
     //@}
diff --git a/linux-x64/clang/include/llvm/Support/MutexGuard.h b/linux-x64/clang/include/llvm/Support/MutexGuard.h
index 07b64b6..641d64d 100644
--- a/linux-x64/clang/include/llvm/Support/MutexGuard.h
+++ b/linux-x64/clang/include/llvm/Support/MutexGuard.h
@@ -23,7 +23,7 @@
   /// these on the stack at the top of some scope to be assured that C++
   /// destruction of the object will always release the Mutex and thus avoid
   /// a host of nasty multi-threading problems in the face of exceptions, etc.
-  /// @brief Guard a section of code with a Mutex.
+  /// Guard a section of code with a Mutex.
   class MutexGuard {
     sys::Mutex &M;
     MutexGuard(const MutexGuard &) = delete;
diff --git a/linux-x64/clang/include/llvm/Support/OnDiskHashTable.h b/linux-x64/clang/include/llvm/Support/OnDiskHashTable.h
index 3ef004b..912e270 100644
--- a/linux-x64/clang/include/llvm/Support/OnDiskHashTable.h
+++ b/linux-x64/clang/include/llvm/Support/OnDiskHashTable.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief Defines facilities for reading and writing on-disk hash tables.
+/// Defines facilities for reading and writing on-disk hash tables.
 ///
 //===----------------------------------------------------------------------===//
 #ifndef LLVM_SUPPORT_ONDISKHASHTABLE_H
@@ -25,7 +25,7 @@
 
 namespace llvm {
 
-/// \brief Generates an on disk hash table.
+/// Generates an on disk hash table.
 ///
 /// This needs an \c Info that handles storing values into the hash table's
 /// payload and computes the hash for a given key. This should provide the
@@ -57,7 +57,7 @@
 /// };
 /// \endcode
 template <typename Info> class OnDiskChainedHashTableGenerator {
-  /// \brief A single item in the hash table.
+  /// A single item in the hash table.
   class Item {
   public:
     typename Info::key_type Key;
@@ -75,7 +75,7 @@
   offset_type NumEntries;
   llvm::SpecificBumpPtrAllocator<Item> BA;
 
-  /// \brief A linked list of values in a particular hash bucket.
+  /// A linked list of values in a particular hash bucket.
   struct Bucket {
     offset_type Off;
     unsigned Length;
@@ -85,7 +85,7 @@
   Bucket *Buckets;
 
 private:
-  /// \brief Insert an item into the appropriate hash bucket.
+  /// Insert an item into the appropriate hash bucket.
   void insert(Bucket *Buckets, size_t Size, Item *E) {
     Bucket &B = Buckets[E->Hash & (Size - 1)];
     E->Next = B.Head;
@@ -93,7 +93,7 @@
     B.Head = E;
   }
 
-  /// \brief Resize the hash table, moving the old entries into the new buckets.
+  /// Resize the hash table, moving the old entries into the new buckets.
   void resize(size_t NewSize) {
     Bucket *NewBuckets = static_cast<Bucket *>(
         safe_calloc(NewSize, sizeof(Bucket)));
@@ -112,14 +112,14 @@
   }
 
 public:
-  /// \brief Insert an entry into the table.
+  /// Insert an entry into the table.
   void insert(typename Info::key_type_ref Key,
               typename Info::data_type_ref Data) {
     Info InfoObj;
     insert(Key, Data, InfoObj);
   }
 
-  /// \brief Insert an entry into the table.
+  /// Insert an entry into the table.
   ///
   /// Uses the provided Info instead of a stack allocated one.
   void insert(typename Info::key_type_ref Key,
@@ -130,7 +130,7 @@
     insert(Buckets, NumBuckets, new (BA.Allocate()) Item(Key, Data, InfoObj));
   }
 
-  /// \brief Determine whether an entry has been inserted.
+  /// Determine whether an entry has been inserted.
   bool contains(typename Info::key_type_ref Key, Info &InfoObj) {
     unsigned Hash = InfoObj.ComputeHash(Key);
     for (Item *I = Buckets[Hash & (NumBuckets - 1)].Head; I; I = I->Next)
@@ -139,18 +139,18 @@
     return false;
   }
 
-  /// \brief Emit the table to Out, which must not be at offset 0.
+  /// Emit the table to Out, which must not be at offset 0.
   offset_type Emit(raw_ostream &Out) {
     Info InfoObj;
     return Emit(Out, InfoObj);
   }
 
-  /// \brief Emit the table to Out, which must not be at offset 0.
+  /// Emit the table to Out, which must not be at offset 0.
   ///
   /// Uses the provided Info instead of a stack allocated one.
   offset_type Emit(raw_ostream &Out, Info &InfoObj) {
     using namespace llvm::support;
-    endian::Writer<little> LE(Out);
+    endian::Writer LE(Out, little);
 
     // Now we're done adding entries, resize the bucket list if it's
     // significantly too large. (This only happens if the number of
@@ -233,7 +233,7 @@
   ~OnDiskChainedHashTableGenerator() { std::free(Buckets); }
 };
 
-/// \brief Provides lookup on an on disk hash table.
+/// Provides lookup on an on disk hash table.
 ///
 /// This needs an \c Info that handles reading values from the hash table's
 /// payload and computes the hash for a given key. This should provide the
@@ -339,14 +339,14 @@
     bool operator!=(const iterator &X) const { return X.Data != Data; }
   };
 
-  /// \brief Look up the stored data for a particular key.
+  /// Look up the stored data for a particular key.
   iterator find(const external_key_type &EKey, Info *InfoPtr = nullptr) {
     const internal_key_type &IKey = InfoObj.GetInternalKey(EKey);
     hash_value_type KeyHash = InfoObj.ComputeHash(IKey);
     return find_hashed(IKey, KeyHash, InfoPtr);
   }
 
-  /// \brief Look up the stored data for a particular key with a known hash.
+  /// Look up the stored data for a particular key with a known hash.
   iterator find_hashed(const internal_key_type &IKey, hash_value_type KeyHash,
                        Info *InfoPtr = nullptr) {
     using namespace llvm::support;
@@ -404,7 +404,7 @@
 
   Info &getInfoObj() { return InfoObj; }
 
-  /// \brief Create the hash table.
+  /// Create the hash table.
   ///
   /// \param Buckets is the beginning of the hash table itself, which follows
   /// the payload of entire structure. This is the value returned by
@@ -424,7 +424,7 @@
   }
 };
 
-/// \brief Provides lookup and iteration over an on disk hash table.
+/// Provides lookup and iteration over an on disk hash table.
 ///
 /// \copydetails llvm::OnDiskChainedHashTable
 template <typename Info>
@@ -440,7 +440,7 @@
   typedef typename base_type::offset_type       offset_type;
 
 private:
-  /// \brief Iterates over all of the keys in the table.
+  /// Iterates over all of the keys in the table.
   class iterator_base {
     const unsigned char *Ptr;
     offset_type NumItemsInBucketLeft;
@@ -497,7 +497,7 @@
       : base_type(NumBuckets, NumEntries, Buckets, Base, InfoObj),
         Payload(Payload) {}
 
-  /// \brief Iterates over all of the keys in the table.
+  /// Iterates over all of the keys in the table.
   class key_iterator : public iterator_base {
     Info *InfoObj;
 
@@ -543,7 +543,7 @@
     return make_range(key_begin(), key_end());
   }
 
-  /// \brief Iterates over all the entries in the table, returning the data.
+  /// Iterates over all the entries in the table, returning the data.
   class data_iterator : public iterator_base {
     Info *InfoObj;
 
@@ -586,7 +586,7 @@
     return make_range(data_begin(), data_end());
   }
 
-  /// \brief Create the hash table.
+  /// Create the hash table.
   ///
   /// \param Buckets is the beginning of the hash table itself, which follows
   /// the payload of entire structure. This is the value returned by
diff --git a/linux-x64/clang/include/llvm/Support/Options.h b/linux-x64/clang/include/llvm/Support/Options.h
index 9019804..dd321c6 100644
--- a/linux-x64/clang/include/llvm/Support/Options.h
+++ b/linux-x64/clang/include/llvm/Support/Options.h
@@ -56,7 +56,7 @@
 
 } // namespace detail
 
-/// \brief Singleton class used to register debug options.
+/// Singleton class used to register debug options.
 ///
 /// The OptionRegistry is responsible for managing lifetimes of the options and
 /// provides interfaces for option registration and reading values from options.
@@ -66,7 +66,7 @@
 private:
   DenseMap<void *, cl::Option *> Options;
 
-  /// \brief Adds a cl::Option to the registry.
+  /// Adds a cl::Option to the registry.
   ///
   /// \param Key unique key for option
   /// \param O option to map to \p Key
@@ -79,10 +79,10 @@
   ~OptionRegistry();
   OptionRegistry() {}
 
-  /// \brief Returns a reference to the singleton instance.
+  /// Returns a reference to the singleton instance.
   static OptionRegistry &instance();
 
-  /// \brief Registers an option with the OptionRegistry singleton.
+  /// Registers an option with the OptionRegistry singleton.
   ///
   /// \tparam ValT type of the option's data
   /// \tparam Base class used to key the option
@@ -100,7 +100,7 @@
     instance().addOption(&detail::OptionKey<ValT, Base, Mem>::ID, Option);
   }
 
-  /// \brief Returns the value of the option.
+  /// Returns the value of the option.
   ///
   /// \tparam ValT type of the option's data
   /// \tparam Base class used to key the option
diff --git a/linux-x64/clang/include/llvm/Support/Parallel.h b/linux-x64/clang/include/llvm/Support/Parallel.h
index 01b2bcd..1462265 100644
--- a/linux-x64/clang/include/llvm/Support/Parallel.h
+++ b/linux-x64/clang/include/llvm/Support/Parallel.h
@@ -100,7 +100,7 @@
 #else
 const ptrdiff_t MinParallelSize = 1024;
 
-/// \brief Inclusive median.
+/// Inclusive median.
 template <class RandomAccessIterator, class Comparator>
 RandomAccessIterator medianOf3(RandomAccessIterator Start,
                                RandomAccessIterator End,
@@ -118,7 +118,7 @@
                          const Comparator &Comp, TaskGroup &TG, size_t Depth) {
   // Do a sequential sort for small inputs.
   if (std::distance(Start, End) < detail::MinParallelSize || Depth == 0) {
-    std::sort(Start, End, Comp);
+    llvm::sort(Start, End, Comp);
     return;
   }
 
@@ -200,7 +200,7 @@
           const Comparator &Comp = Comparator()) {
   static_assert(is_execution_policy<Policy>::value,
                 "Invalid execution policy!");
-  std::sort(Start, End, Comp);
+  llvm::sort(Start, End, Comp);
 }
 
 template <class Policy, class IterTy, class FuncTy>
diff --git a/linux-x64/clang/include/llvm/Support/Path.h b/linux-x64/clang/include/llvm/Support/Path.h
index e597967..c4cc937 100644
--- a/linux-x64/clang/include/llvm/Support/Path.h
+++ b/linux-x64/clang/include/llvm/Support/Path.h
@@ -20,6 +20,7 @@
 #include "llvm/ADT/iterator.h"
 #include "llvm/Support/DataTypes.h"
 #include <iterator>
+#include <system_error>
 
 namespace llvm {
 namespace sys {
@@ -30,7 +31,7 @@
 /// @name Lexical Component Iterator
 /// @{
 
-/// @brief Path iterator.
+/// Path iterator.
 ///
 /// This is an input iterator that iterates over the individual components in
 /// \a path. The traversal order is as follows:
@@ -66,11 +67,11 @@
   const_iterator &operator++();    // preincrement
   bool operator==(const const_iterator &RHS) const;
 
-  /// @brief Difference in bytes between this and RHS.
+  /// Difference in bytes between this and RHS.
   ptrdiff_t operator-(const const_iterator &RHS) const;
 };
 
-/// @brief Reverse path iterator.
+/// Reverse path iterator.
 ///
 /// This is an input iterator that iterates over the individual components in
 /// \a path in reverse order. The traversal order is exactly reversed from that
@@ -91,26 +92,26 @@
   reverse_iterator &operator++();    // preincrement
   bool operator==(const reverse_iterator &RHS) const;
 
-  /// @brief Difference in bytes between this and RHS.
+  /// Difference in bytes between this and RHS.
   ptrdiff_t operator-(const reverse_iterator &RHS) const;
 };
 
-/// @brief Get begin iterator over \a path.
+/// Get begin iterator over \a path.
 /// @param path Input path.
 /// @returns Iterator initialized with the first component of \a path.
 const_iterator begin(StringRef path, Style style = Style::native);
 
-/// @brief Get end iterator over \a path.
+/// Get end iterator over \a path.
 /// @param path Input path.
 /// @returns Iterator initialized to the end of \a path.
 const_iterator end(StringRef path);
 
-/// @brief Get reverse begin iterator over \a path.
+/// Get reverse begin iterator over \a path.
 /// @param path Input path.
 /// @returns Iterator initialized with the first reverse component of \a path.
 reverse_iterator rbegin(StringRef path, Style style = Style::native);
 
-/// @brief Get reverse end iterator over \a path.
+/// Get reverse end iterator over \a path.
 /// @param path Input path.
 /// @returns Iterator initialized to the reverse end of \a path.
 reverse_iterator rend(StringRef path);
@@ -119,7 +120,7 @@
 /// @name Lexical Modifiers
 /// @{
 
-/// @brief Remove the last component from \a path unless it is the root dir.
+/// Remove the last component from \a path unless it is the root dir.
 ///
 /// @code
 ///   directory/filename.cpp => directory/
@@ -131,7 +132,7 @@
 /// @param path A path that is modified to not have a file component.
 void remove_filename(SmallVectorImpl<char> &path, Style style = Style::native);
 
-/// @brief Replace the file extension of \a path with \a extension.
+/// Replace the file extension of \a path with \a extension.
 ///
 /// @code
 ///   ./filename.cpp => ./filename.extension
@@ -146,7 +147,7 @@
 void replace_extension(SmallVectorImpl<char> &path, const Twine &extension,
                        Style style = Style::native);
 
-/// @brief Replace matching path prefix with another path.
+/// Replace matching path prefix with another path.
 ///
 /// @code
 ///   /foo, /old, /new => /foo
@@ -163,7 +164,7 @@
                          const StringRef &OldPrefix, const StringRef &NewPrefix,
                          Style style = Style::native);
 
-/// @brief Append to path.
+/// Append to path.
 ///
 /// @code
 ///   /foo  + bar/f => /foo/bar/f
@@ -181,7 +182,7 @@
 void append(SmallVectorImpl<char> &path, Style style, const Twine &a,
             const Twine &b = "", const Twine &c = "", const Twine &d = "");
 
-/// @brief Append to path.
+/// Append to path.
 ///
 /// @code
 ///   /foo  + [bar,f] => /foo/bar/f
@@ -215,7 +216,7 @@
 /// @param path A path that is transformed to native format.
 void native(SmallVectorImpl<char> &path, Style style = Style::native);
 
-/// @brief Replaces backslashes with slashes if Windows.
+/// Replaces backslashes with slashes if Windows.
 ///
 /// @param path processed path
 /// @result The result of replacing backslashes with forward slashes if Windows.
@@ -227,7 +228,7 @@
 /// @name Lexical Observers
 /// @{
 
-/// @brief Get root name.
+/// Get root name.
 ///
 /// @code
 ///   //net/hello => //net
@@ -239,7 +240,7 @@
 /// @result The root name of \a path if it has one, otherwise "".
 StringRef root_name(StringRef path, Style style = Style::native);
 
-/// @brief Get root directory.
+/// Get root directory.
 ///
 /// @code
 ///   /goo/hello => /
@@ -252,7 +253,7 @@
 ///               "".
 StringRef root_directory(StringRef path, Style style = Style::native);
 
-/// @brief Get root path.
+/// Get root path.
 ///
 /// Equivalent to root_name + root_directory.
 ///
@@ -260,7 +261,7 @@
 /// @result The root path of \a path if it has one, otherwise "".
 StringRef root_path(StringRef path, Style style = Style::native);
 
-/// @brief Get relative path.
+/// Get relative path.
 ///
 /// @code
 ///   C:\hello\world => hello\world
@@ -272,7 +273,7 @@
 /// @result The path starting after root_path if one exists, otherwise "".
 StringRef relative_path(StringRef path, Style style = Style::native);
 
-/// @brief Get parent path.
+/// Get parent path.
 ///
 /// @code
 ///   /          => <empty>
@@ -284,7 +285,7 @@
 /// @result The parent path of \a path if one exists, otherwise "".
 StringRef parent_path(StringRef path, Style style = Style::native);
 
-/// @brief Get filename.
+/// Get filename.
 ///
 /// @code
 ///   /foo.txt    => foo.txt
@@ -298,7 +299,7 @@
 ///         of \a path.
 StringRef filename(StringRef path, Style style = Style::native);
 
-/// @brief Get stem.
+/// Get stem.
 ///
 /// If filename contains a dot but not solely one or two dots, result is the
 /// substring of filename ending at (but not including) the last dot. Otherwise
@@ -316,7 +317,7 @@
 /// @result The stem of \a path.
 StringRef stem(StringRef path, Style style = Style::native);
 
-/// @brief Get extension.
+/// Get extension.
 ///
 /// If filename contains a dot but not solely one or two dots, result is the
 /// substring of filename starting at (and including) the last dot, and ending
@@ -332,18 +333,18 @@
 /// @result The extension of \a path.
 StringRef extension(StringRef path, Style style = Style::native);
 
-/// @brief Check whether the given char is a path separator on the host OS.
+/// Check whether the given char is a path separator on the host OS.
 ///
 /// @param value a character
 /// @result true if \a value is a path separator character on the host OS
 bool is_separator(char value, Style style = Style::native);
 
-/// @brief Return the preferred separator for this platform.
+/// Return the preferred separator for this platform.
 ///
 /// @result StringRef of the preferred separator, null-terminated.
 StringRef get_separator(Style style = Style::native);
 
-/// @brief Get the typical temporary directory for the system, e.g.,
+/// Get the typical temporary directory for the system, e.g.,
 /// "/var/tmp" or "C:/TEMP"
 ///
 /// @param erasedOnReboot Whether to favor a path that is erased on reboot
@@ -354,13 +355,13 @@
 /// @param result Holds the resulting path name.
 void system_temp_directory(bool erasedOnReboot, SmallVectorImpl<char> &result);
 
-/// @brief Get the user's home directory.
+/// Get the user's home directory.
 ///
 /// @param result Holds the resulting path name.
 /// @result True if a home directory is set, false otherwise.
 bool home_directory(SmallVectorImpl<char> &result);
 
-/// @brief Get the user's cache directory.
+/// Get the user's cache directory.
 ///
 /// Expect the resulting path to be a directory shared with other
 /// applications/services used by the user. Params \p Path1 to \p Path3 can be
@@ -376,7 +377,7 @@
 bool user_cache_directory(SmallVectorImpl<char> &Result, const Twine &Path1,
                           const Twine &Path2 = "", const Twine &Path3 = "");
 
-/// @brief Has root name?
+/// Has root name?
 ///
 /// root_name != ""
 ///
@@ -384,7 +385,7 @@
 /// @result True if the path has a root name, false otherwise.
 bool has_root_name(const Twine &path, Style style = Style::native);
 
-/// @brief Has root directory?
+/// Has root directory?
 ///
 /// root_directory != ""
 ///
@@ -392,7 +393,7 @@
 /// @result True if the path has a root directory, false otherwise.
 bool has_root_directory(const Twine &path, Style style = Style::native);
 
-/// @brief Has root path?
+/// Has root path?
 ///
 /// root_path != ""
 ///
@@ -400,7 +401,7 @@
 /// @result True if the path has a root path, false otherwise.
 bool has_root_path(const Twine &path, Style style = Style::native);
 
-/// @brief Has relative path?
+/// Has relative path?
 ///
 /// relative_path != ""
 ///
@@ -408,7 +409,7 @@
 /// @result True if the path has a relative path, false otherwise.
 bool has_relative_path(const Twine &path, Style style = Style::native);
 
-/// @brief Has parent path?
+/// Has parent path?
 ///
 /// parent_path != ""
 ///
@@ -416,7 +417,7 @@
 /// @result True if the path has a parent path, false otherwise.
 bool has_parent_path(const Twine &path, Style style = Style::native);
 
-/// @brief Has filename?
+/// Has filename?
 ///
 /// filename != ""
 ///
@@ -424,7 +425,7 @@
 /// @result True if the path has a filename, false otherwise.
 bool has_filename(const Twine &path, Style style = Style::native);
 
-/// @brief Has stem?
+/// Has stem?
 ///
 /// stem != ""
 ///
@@ -432,7 +433,7 @@
 /// @result True if the path has a stem, false otherwise.
 bool has_stem(const Twine &path, Style style = Style::native);
 
-/// @brief Has extension?
+/// Has extension?
 ///
 /// extension != ""
 ///
@@ -440,25 +441,25 @@
 /// @result True if the path has a extension, false otherwise.
 bool has_extension(const Twine &path, Style style = Style::native);
 
-/// @brief Is path absolute?
+/// Is path absolute?
 ///
 /// @param path Input path.
 /// @result True if the path is absolute, false if it is not.
 bool is_absolute(const Twine &path, Style style = Style::native);
 
-/// @brief Is path relative?
+/// Is path relative?
 ///
 /// @param path Input path.
 /// @result True if the path is relative, false if it is not.
 bool is_relative(const Twine &path, Style style = Style::native);
 
-/// @brief Remove redundant leading "./" pieces and consecutive separators.
+/// Remove redundant leading "./" pieces and consecutive separators.
 ///
 /// @param path Input path.
 /// @result The cleaned-up \a path.
 StringRef remove_leading_dotslash(StringRef path, Style style = Style::native);
 
-/// @brief In-place remove any './' and optionally '../' components from a path.
+/// In-place remove any './' and optionally '../' components from a path.
 ///
 /// @param path processed path
 /// @param remove_dot_dot specify if '../' (except for leading "../") should be
@@ -467,6 +468,10 @@
 bool remove_dots(SmallVectorImpl<char> &path, bool remove_dot_dot = false,
                  Style style = Style::native);
 
+#if defined(_WIN32)
+std::error_code widenPath(const Twine &Path8, SmallVectorImpl<wchar_t> &Path16);
+#endif
+
 } // end namespace path
 } // end namespace sys
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Support/PointerLikeTypeTraits.h b/linux-x64/clang/include/llvm/Support/PointerLikeTypeTraits.h
index 794230d..1710b57 100644
--- a/linux-x64/clang/include/llvm/Support/PointerLikeTypeTraits.h
+++ b/linux-x64/clang/include/llvm/Support/PointerLikeTypeTraits.h
@@ -16,6 +16,7 @@
 #define LLVM_SUPPORT_POINTERLIKETYPETRAITS_H
 
 #include "llvm/Support/DataTypes.h"
+#include <assert.h>
 #include <type_traits>
 
 namespace llvm {
@@ -111,6 +112,39 @@
   enum { NumLowBitsAvailable = 0 };
 };
 
+/// Provide suitable custom traits struct for function pointers.
+///
+/// Function pointers can't be directly given these traits as functions can't
+/// have their alignment computed with `alignof` and we need different casting.
+///
+/// To rely on higher alignment for a specialized use, you can provide a
+/// customized form of this template explicitly with higher alignment, and
+/// potentially use alignment attributes on functions to satisfy that.
+template <int Alignment, typename FunctionPointerT>
+struct FunctionPointerLikeTypeTraits {
+  enum { NumLowBitsAvailable = detail::ConstantLog2<Alignment>::value };
+  static inline void *getAsVoidPointer(FunctionPointerT P) {
+    assert((reinterpret_cast<uintptr_t>(P) &
+            ~((uintptr_t)-1 << NumLowBitsAvailable)) == 0 &&
+           "Alignment not satisfied for an actual function pointer!");
+    return reinterpret_cast<void *>(P);
+  }
+  static inline FunctionPointerT getFromVoidPointer(void *P) {
+    return reinterpret_cast<FunctionPointerT>(P);
+  }
+};
+
+/// Provide a default specialization for function pointers that assumes 4-byte
+/// alignment.
+///
+/// We assume here that functions used with this are always at least 4-byte
+/// aligned. This means that, for example, thumb functions won't work or systems
+/// with weird unaligned function pointers won't work. But all practical systems
+/// we support satisfy this requirement.
+template <typename ReturnT, typename... ParamTs>
+struct PointerLikeTypeTraits<ReturnT (*)(ParamTs...)>
+    : FunctionPointerLikeTypeTraits<4, ReturnT (*)(ParamTs...)> {};
+
 } // end namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/Process.h b/linux-x64/clang/include/llvm/Support/Process.h
index 82b0d9f..f9f1cac 100644
--- a/linux-x64/clang/include/llvm/Support/Process.h
+++ b/linux-x64/clang/include/llvm/Support/Process.h
@@ -26,7 +26,6 @@
 #define LLVM_SUPPORT_PROCESS_H
 
 #include "llvm/ADT/Optional.h"
-#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Chrono.h"
 #include "llvm/Support/DataTypes.h"
@@ -39,13 +38,13 @@
 namespace sys {
 
 
-/// \brief A collection of legacy interfaces for querying information about the
+/// A collection of legacy interfaces for querying information about the
 /// current executing process.
 class Process {
 public:
   static unsigned getPageSize();
 
-  /// \brief Return process memory usage.
+  /// Return process memory usage.
   /// This static function will return the total amount of memory allocated
   /// by the process. This only counts the memory allocated via the malloc,
   /// calloc and realloc functions and includes any "free" holes in the
@@ -67,10 +66,10 @@
   /// This function makes the necessary calls to the operating system to
   /// prevent core files or any other kind of large memory dumps that can
   /// occur when a program fails.
-  /// @brief Prevent core file generation.
+  /// Prevent core file generation.
   static void PreventCoreFiles();
 
-  /// \brief true if PreventCoreFiles has been called, false otherwise.
+  /// true if PreventCoreFiles has been called, false otherwise.
   static bool AreCoreFilesPrevented();
 
   // This function returns the environment variable \arg name's value as a UTF-8
@@ -90,14 +89,6 @@
   static Optional<std::string> FindInEnvPath(StringRef EnvName,
                                              StringRef FileName);
 
-  /// This function returns a SmallVector containing the arguments passed from
-  /// the operating system to the program.  This function expects to be handed
-  /// the vector passed in from main.
-  static std::error_code
-  GetArgumentVector(SmallVectorImpl<const char *> &Args,
-                    ArrayRef<const char *> ArgsFromMain,
-                    SpecificBumpPtrAllocator<char> &ArgAllocator);
-
   // This functions ensures that the standard file descriptors (input, output,
   // and error) are properly mapped to a file descriptor before we use any of
   // them.  This should only be called by standalone programs, library
diff --git a/linux-x64/clang/include/llvm/Support/Program.h b/linux-x64/clang/include/llvm/Support/Program.h
index 06fd350..1f4dbdc 100644
--- a/linux-x64/clang/include/llvm/Support/Program.h
+++ b/linux-x64/clang/include/llvm/Support/Program.h
@@ -17,6 +17,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/Optional.h"
 #include "llvm/ADT/StringRef.h"
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/ErrorOr.h"
 #include <system_error>
 
@@ -27,35 +28,32 @@
   // a colon on Unix or a semicolon on Windows.
 #if defined(LLVM_ON_UNIX)
   const char EnvPathSeparator = ':';
-#elif defined (LLVM_ON_WIN32)
+#elif defined (_WIN32)
   const char EnvPathSeparator = ';';
 #endif
 
-/// @brief This struct encapsulates information about a process.
-struct ProcessInfo {
-#if defined(LLVM_ON_UNIX)
-  typedef pid_t ProcessId;
-#elif defined(LLVM_ON_WIN32)
-  typedef unsigned long ProcessId; // Must match the type of DWORD on Windows.
-  typedef void * HANDLE; // Must match the type of HANDLE on Windows.
-  /// The handle to the process (available on Windows only).
-  HANDLE ProcessHandle;
+#if defined(_WIN32)
+  typedef unsigned long procid_t; // Must match the type of DWORD on Windows.
+  typedef void *process_t;        // Must match the type of HANDLE on Windows.
 #else
-#error "ProcessInfo is not defined for this platform!"
+  typedef pid_t procid_t;
+  typedef procid_t process_t;
 #endif
 
-  enum : ProcessId { InvalidPid = 0 };
+  /// This struct encapsulates information about a process.
+  struct ProcessInfo {
+    enum : procid_t { InvalidPid = 0 };
 
-  /// The process identifier.
-  ProcessId Pid;
+    procid_t Pid;      /// The process identifier.
+    process_t Process; /// Platform-dependent process object.
 
-  /// The return code, set after execution.
-  int ReturnCode;
+    /// The return code, set after execution.
+    int ReturnCode;
 
-  ProcessInfo();
-};
+    ProcessInfo();
+  };
 
-  /// \brief Find the first executable file \p Name in \p Paths.
+  /// Find the first executable file \p Name in \p Paths.
   ///
   /// This does not perform hashing as a shell would but instead stats each PATH
   /// entry individually so should generally be avoided. Core LLVM library
@@ -91,12 +89,13 @@
   int ExecuteAndWait(
       StringRef Program, ///< Path of the program to be executed. It is
       ///< presumed this is the result of the findProgramByName method.
-      const char **Args, ///< A vector of strings that are passed to the
+      ArrayRef<StringRef> Args, ///< An array of strings that are passed to the
       ///< program.  The first element should be the name of the program.
-      ///< The list *must* be terminated by a null char* entry.
-      const char **Env = nullptr, ///< An optional vector of strings to use for
-      ///< the program's environment. If not provided, the current program's
-      ///< environment will be used.
+      ///< The array should **not** be terminated by an empty StringRef.
+      Optional<ArrayRef<StringRef>> Env = None, ///< An optional vector of
+      ///< strings to use for the program's environment. If not provided, the
+      ///< current program's environment will be used.  If specified, the
+      ///< vector should **not** be terminated by an empty StringRef.
       ArrayRef<Optional<StringRef>> Redirects = {}, ///<
       ///< An array of optional paths. Should have a size of zero or three.
       ///< If the array is empty, no redirections are performed.
@@ -125,8 +124,8 @@
   /// \note On Microsoft Windows systems, users will need to either call
   /// \see Wait until the process finished execution or win32 CloseHandle() API
   /// on ProcessInfo.ProcessHandle to avoid memory leaks.
-  ProcessInfo ExecuteNoWait(StringRef Program, const char **Args,
-                            const char **Env = nullptr,
+  ProcessInfo ExecuteNoWait(StringRef Program, ArrayRef<StringRef> Args,
+                            Optional<ArrayRef<StringRef>> Env,
                             ArrayRef<Optional<StringRef>> Redirects = {},
                             unsigned MemoryLimit = 0,
                             std::string *ErrMsg = nullptr,
@@ -135,6 +134,11 @@
   /// Return true if the given arguments fit within system-specific
   /// argument length limits.
   bool commandLineFitsWithinSystemLimits(StringRef Program,
+                                         ArrayRef<StringRef> Args);
+
+  /// Return true if the given arguments fit within system-specific
+  /// argument length limits.
+  bool commandLineFitsWithinSystemLimits(StringRef Program,
                                          ArrayRef<const char *> Args);
 
   /// File encoding options when writing contents that a non-UTF8 tool will
@@ -191,6 +195,14 @@
       ///< string is non-empty upon return an error occurred while invoking the
       ///< program.
       );
+
+#if defined(_WIN32)
+  /// Given a list of command line arguments, quote and escape them as necessary
+  /// to build a single flat command line appropriate for calling CreateProcess
+  /// on
+  /// Windows.
+  std::string flattenWindowsCommandLine(ArrayRef<StringRef> Args);
+#endif
   }
 }
 
diff --git a/linux-x64/clang/include/llvm/Support/RWMutex.h b/linux-x64/clang/include/llvm/Support/RWMutex.h
index 85f4fc0..5ac3e55 100644
--- a/linux-x64/clang/include/llvm/Support/RWMutex.h
+++ b/linux-x64/clang/include/llvm/Support/RWMutex.h
@@ -21,7 +21,7 @@
 namespace llvm {
 namespace sys {
 
-    /// @brief Platform agnostic RWMutex class.
+    /// Platform agnostic RWMutex class.
     class RWMutexImpl
     {
     /// @name Constructors
@@ -29,7 +29,7 @@
     public:
 
       /// Initializes the lock but doesn't acquire it.
-      /// @brief Default Constructor.
+      /// Default Constructor.
       explicit RWMutexImpl();
 
     /// @}
@@ -40,7 +40,7 @@
     /// @}
 
       /// Releases and removes the lock
-      /// @brief Destructor
+      /// Destructor
       ~RWMutexImpl();
 
     /// @}
@@ -52,24 +52,24 @@
       /// lock is held by a writer, this method will wait until it can acquire
       /// the lock.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally acquire the lock in reader mode.
+      /// Unconditionally acquire the lock in reader mode.
       bool reader_acquire();
 
       /// Attempts to release the lock in reader mode.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally release the lock in reader mode.
+      /// Unconditionally release the lock in reader mode.
       bool reader_release();
 
       /// Attempts to unconditionally acquire the lock in reader mode. If the
       /// lock is held by any readers, this method will wait until it can
       /// acquire the lock.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally acquire the lock in writer mode.
+      /// Unconditionally acquire the lock in writer mode.
       bool writer_acquire();
 
       /// Attempts to release the lock in writer mode.
       /// @returns false if any kind of error occurs, true otherwise.
-      /// @brief Unconditionally release the lock in write mode.
+      /// Unconditionally release the lock in write mode.
       bool writer_release();
 
     //@}
diff --git a/linux-x64/clang/include/llvm/Support/Regex.h b/linux-x64/clang/include/llvm/Support/Regex.h
index f498835..d901eb1 100644
--- a/linux-x64/clang/include/llvm/Support/Regex.h
+++ b/linux-x64/clang/include/llvm/Support/Regex.h
@@ -86,11 +86,11 @@
     std::string sub(StringRef Repl, StringRef String,
                     std::string *Error = nullptr);
 
-    /// \brief If this function returns true, ^Str$ is an extended regular
+    /// If this function returns true, ^Str$ is an extended regular
     /// expression that matches Str and only Str.
     static bool isLiteralERE(StringRef Str);
 
-    /// \brief Turn String into a regex by escaping its special characters.
+    /// Turn String into a regex by escaping its special characters.
     static std::string escape(StringRef String);
 
   private:
diff --git a/linux-x64/clang/include/llvm/Support/SMLoc.h b/linux-x64/clang/include/llvm/Support/SMLoc.h
index 5b8be55..c74feff 100644
--- a/linux-x64/clang/include/llvm/Support/SMLoc.h
+++ b/linux-x64/clang/include/llvm/Support/SMLoc.h
@@ -44,8 +44,8 @@
 /// Represents a range in source code.
 ///
 /// SMRange is implemented using a half-open range, as is the convention in C++.
-/// In the string "abc", the range (1,3] represents the substring "bc", and the
-/// range (2,2] represents an empty range between the characters "b" and "c".
+/// In the string "abc", the range [1,3) represents the substring "bc", and the
+/// range [2,2) represents an empty range between the characters "b" and "c".
 class SMRange {
 public:
   SMLoc Start, End;
@@ -54,7 +54,7 @@
   SMRange(NoneType) {}
   SMRange(SMLoc St, SMLoc En) : Start(St), End(En) {
     assert(Start.isValid() == End.isValid() &&
-           "Start and end should either both be valid or both be invalid!");
+           "Start and End should either both be valid or both be invalid!");
   }
 
   bool isValid() const { return Start.isValid(); }
diff --git a/linux-x64/clang/include/llvm/Support/SaveAndRestore.h b/linux-x64/clang/include/llvm/Support/SaveAndRestore.h
index ef154ac..8e11789 100644
--- a/linux-x64/clang/include/llvm/Support/SaveAndRestore.h
+++ b/linux-x64/clang/include/llvm/Support/SaveAndRestore.h
@@ -32,18 +32,6 @@
   T OldValue;
 };
 
-/// Similar to \c SaveAndRestore.  Operates only on bools; the old value of a
-/// variable is saved, and during the dstor the old value is or'ed with the new
-/// value.
-struct SaveOr {
-  SaveOr(bool &X) : X(X), OldValue(X) { X = false; }
-  ~SaveOr() { X |= OldValue; }
-
-private:
-  bool &X;
-  const bool OldValue;
-};
-
 } // namespace llvm
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/ScaledNumber.h b/linux-x64/clang/include/llvm/Support/ScaledNumber.h
index cfbdbc7..3bd3cce 100644
--- a/linux-x64/clang/include/llvm/Support/ScaledNumber.h
+++ b/linux-x64/clang/include/llvm/Support/ScaledNumber.h
@@ -33,16 +33,16 @@
 namespace llvm {
 namespace ScaledNumbers {
 
-/// \brief Maximum scale; same as APFloat for easy debug printing.
+/// Maximum scale; same as APFloat for easy debug printing.
 const int32_t MaxScale = 16383;
 
-/// \brief Maximum scale; same as APFloat for easy debug printing.
+/// Maximum scale; same as APFloat for easy debug printing.
 const int32_t MinScale = -16382;
 
-/// \brief Get the width of a number.
+/// Get the width of a number.
 template <class DigitsT> inline int getWidth() { return sizeof(DigitsT) * 8; }
 
-/// \brief Conditionally round up a scaled number.
+/// Conditionally round up a scaled number.
 ///
 /// Given \c Digits and \c Scale, round up iff \c ShouldRound is \c true.
 /// Always returns \c Scale unless there's an overflow, in which case it
@@ -61,19 +61,19 @@
   return std::make_pair(Digits, Scale);
 }
 
-/// \brief Convenience helper for 32-bit rounding.
+/// Convenience helper for 32-bit rounding.
 inline std::pair<uint32_t, int16_t> getRounded32(uint32_t Digits, int16_t Scale,
                                                  bool ShouldRound) {
   return getRounded(Digits, Scale, ShouldRound);
 }
 
-/// \brief Convenience helper for 64-bit rounding.
+/// Convenience helper for 64-bit rounding.
 inline std::pair<uint64_t, int16_t> getRounded64(uint64_t Digits, int16_t Scale,
                                                  bool ShouldRound) {
   return getRounded(Digits, Scale, ShouldRound);
 }
 
-/// \brief Adjust a 64-bit scaled number down to the appropriate width.
+/// Adjust a 64-bit scaled number down to the appropriate width.
 ///
 /// \pre Adding 64 to \c Scale will not overflow INT16_MAX.
 template <class DigitsT>
@@ -91,24 +91,24 @@
                              Digits & (UINT64_C(1) << (Shift - 1)));
 }
 
-/// \brief Convenience helper for adjusting to 32 bits.
+/// Convenience helper for adjusting to 32 bits.
 inline std::pair<uint32_t, int16_t> getAdjusted32(uint64_t Digits,
                                                   int16_t Scale = 0) {
   return getAdjusted<uint32_t>(Digits, Scale);
 }
 
-/// \brief Convenience helper for adjusting to 64 bits.
+/// Convenience helper for adjusting to 64 bits.
 inline std::pair<uint64_t, int16_t> getAdjusted64(uint64_t Digits,
                                                   int16_t Scale = 0) {
   return getAdjusted<uint64_t>(Digits, Scale);
 }
 
-/// \brief Multiply two 64-bit integers to create a 64-bit scaled number.
+/// Multiply two 64-bit integers to create a 64-bit scaled number.
 ///
 /// Implemented with four 64-bit integer multiplies.
 std::pair<uint64_t, int16_t> multiply64(uint64_t LHS, uint64_t RHS);
 
-/// \brief Multiply two 32-bit integers to create a 32-bit scaled number.
+/// Multiply two 32-bit integers to create a 32-bit scaled number.
 ///
 /// Implemented with one 64-bit integer multiply.
 template <class DigitsT>
@@ -121,31 +121,31 @@
   return multiply64(LHS, RHS);
 }
 
-/// \brief Convenience helper for 32-bit product.
+/// Convenience helper for 32-bit product.
 inline std::pair<uint32_t, int16_t> getProduct32(uint32_t LHS, uint32_t RHS) {
   return getProduct(LHS, RHS);
 }
 
-/// \brief Convenience helper for 64-bit product.
+/// Convenience helper for 64-bit product.
 inline std::pair<uint64_t, int16_t> getProduct64(uint64_t LHS, uint64_t RHS) {
   return getProduct(LHS, RHS);
 }
 
-/// \brief Divide two 64-bit integers to create a 64-bit scaled number.
+/// Divide two 64-bit integers to create a 64-bit scaled number.
 ///
 /// Implemented with long division.
 ///
 /// \pre \c Dividend and \c Divisor are non-zero.
 std::pair<uint64_t, int16_t> divide64(uint64_t Dividend, uint64_t Divisor);
 
-/// \brief Divide two 32-bit integers to create a 32-bit scaled number.
+/// Divide two 32-bit integers to create a 32-bit scaled number.
 ///
 /// Implemented with one 64-bit integer divide/remainder pair.
 ///
 /// \pre \c Dividend and \c Divisor are non-zero.
 std::pair<uint32_t, int16_t> divide32(uint32_t Dividend, uint32_t Divisor);
 
-/// \brief Divide two 32-bit numbers to create a 32-bit scaled number.
+/// Divide two 32-bit numbers to create a 32-bit scaled number.
 ///
 /// Implemented with one 64-bit integer divide/remainder pair.
 ///
@@ -167,19 +167,19 @@
   return divide32(Dividend, Divisor);
 }
 
-/// \brief Convenience helper for 32-bit quotient.
+/// Convenience helper for 32-bit quotient.
 inline std::pair<uint32_t, int16_t> getQuotient32(uint32_t Dividend,
                                                   uint32_t Divisor) {
   return getQuotient(Dividend, Divisor);
 }
 
-/// \brief Convenience helper for 64-bit quotient.
+/// Convenience helper for 64-bit quotient.
 inline std::pair<uint64_t, int16_t> getQuotient64(uint64_t Dividend,
                                                   uint64_t Divisor) {
   return getQuotient(Dividend, Divisor);
 }
 
-/// \brief Implementation of getLg() and friends.
+/// Implementation of getLg() and friends.
 ///
 /// Returns the rounded lg of \c Digits*2^Scale and an int specifying whether
 /// this was rounded up (1), down (-1), or exact (0).
@@ -206,7 +206,7 @@
   return std::make_pair(Floor + Round, Round ? 1 : -1);
 }
 
-/// \brief Get the lg (rounded) of a scaled number.
+/// Get the lg (rounded) of a scaled number.
 ///
 /// Get the lg of \c Digits*2^Scale.
 ///
@@ -215,7 +215,7 @@
   return getLgImpl(Digits, Scale).first;
 }
 
-/// \brief Get the lg floor of a scaled number.
+/// Get the lg floor of a scaled number.
 ///
 /// Get the floor of the lg of \c Digits*2^Scale.
 ///
@@ -225,7 +225,7 @@
   return Lg.first - (Lg.second > 0);
 }
 
-/// \brief Get the lg ceiling of a scaled number.
+/// Get the lg ceiling of a scaled number.
 ///
 /// Get the ceiling of the lg of \c Digits*2^Scale.
 ///
@@ -235,7 +235,7 @@
   return Lg.first + (Lg.second < 0);
 }
 
-/// \brief Implementation for comparing scaled numbers.
+/// Implementation for comparing scaled numbers.
 ///
 /// Compare two 64-bit numbers with different scales.  Given that the scale of
 /// \c L is higher than that of \c R by \c ScaleDiff, compare them.  Return -1,
@@ -244,7 +244,7 @@
 /// \pre 0 <= ScaleDiff < 64.
 int compareImpl(uint64_t L, uint64_t R, int ScaleDiff);
 
-/// \brief Compare two scaled numbers.
+/// Compare two scaled numbers.
 ///
 /// Compare two scaled numbers.  Returns 0 for equal, -1 for less than, and 1
 /// for greater than.
@@ -271,7 +271,7 @@
   return -compareImpl(RDigits, LDigits, LScale - RScale);
 }
 
-/// \brief Match scales of two numbers.
+/// Match scales of two numbers.
 ///
 /// Given two scaled numbers, match up their scales.  Change the digits and
 /// scales in place.  Shift the digits as necessary to form equivalent numbers,
@@ -324,7 +324,7 @@
   return LScale;
 }
 
-/// \brief Get the sum of two scaled numbers.
+/// Get the sum of two scaled numbers.
 ///
 /// Get the sum of two scaled numbers with as much precision as possible.
 ///
@@ -352,19 +352,19 @@
   return std::make_pair(HighBit | Sum >> 1, Scale + 1);
 }
 
-/// \brief Convenience helper for 32-bit sum.
+/// Convenience helper for 32-bit sum.
 inline std::pair<uint32_t, int16_t> getSum32(uint32_t LDigits, int16_t LScale,
                                              uint32_t RDigits, int16_t RScale) {
   return getSum(LDigits, LScale, RDigits, RScale);
 }
 
-/// \brief Convenience helper for 64-bit sum.
+/// Convenience helper for 64-bit sum.
 inline std::pair<uint64_t, int16_t> getSum64(uint64_t LDigits, int16_t LScale,
                                              uint64_t RDigits, int16_t RScale) {
   return getSum(LDigits, LScale, RDigits, RScale);
 }
 
-/// \brief Get the difference of two scaled numbers.
+/// Get the difference of two scaled numbers.
 ///
 /// Get LHS minus RHS with as much precision as possible.
 ///
@@ -395,7 +395,7 @@
   return std::make_pair(LDigits, LScale);
 }
 
-/// \brief Convenience helper for 32-bit difference.
+/// Convenience helper for 32-bit difference.
 inline std::pair<uint32_t, int16_t> getDifference32(uint32_t LDigits,
                                                     int16_t LScale,
                                                     uint32_t RDigits,
@@ -403,7 +403,7 @@
   return getDifference(LDigits, LScale, RDigits, RScale);
 }
 
-/// \brief Convenience helper for 64-bit difference.
+/// Convenience helper for 64-bit difference.
 inline std::pair<uint64_t, int16_t> getDifference64(uint64_t LDigits,
                                                     int16_t LScale,
                                                     uint64_t RDigits,
@@ -443,7 +443,7 @@
   }
 };
 
-/// \brief Simple representation of a scaled number.
+/// Simple representation of a scaled number.
 ///
 /// ScaledNumber is a number represented by digits and a scale.  It uses simple
 /// saturation arithmetic and every operation is well-defined for every value.
@@ -534,7 +534,7 @@
   int16_t getScale() const { return Scale; }
   DigitsType getDigits() const { return Digits; }
 
-  /// \brief Convert to the given integer type.
+  /// Convert to the given integer type.
   ///
   /// Convert to \c IntT using simple saturating arithmetic, truncating if
   /// necessary.
@@ -548,17 +548,17 @@
     return Digits == DigitsType(1) << -Scale;
   }
 
-  /// \brief The log base 2, rounded.
+  /// The log base 2, rounded.
   ///
   /// Get the lg of the scalar.  lg 0 is defined to be INT32_MIN.
   int32_t lg() const { return ScaledNumbers::getLg(Digits, Scale); }
 
-  /// \brief The log base 2, rounded towards INT32_MIN.
+  /// The log base 2, rounded towards INT32_MIN.
   ///
   /// Get the lg floor.  lg 0 is defined to be INT32_MIN.
   int32_t lgFloor() const { return ScaledNumbers::getLgFloor(Digits, Scale); }
 
-  /// \brief The log base 2, rounded towards INT32_MAX.
+  /// The log base 2, rounded towards INT32_MAX.
   ///
   /// Get the lg ceiling.  lg 0 is defined to be INT32_MIN.
   int32_t lgCeiling() const {
@@ -574,7 +574,7 @@
 
   bool operator!() const { return isZero(); }
 
-  /// \brief Convert to a decimal representation in a string.
+  /// Convert to a decimal representation in a string.
   ///
   /// Convert to a string.  Uses scientific notation for very large/small
   /// numbers.  Scientific notation is used roughly for numbers outside of the
@@ -597,7 +597,7 @@
     return ScaledNumberBase::toString(Digits, Scale, Width, Precision);
   }
 
-  /// \brief Print a decimal representation.
+  /// Print a decimal representation.
   ///
   /// Print a string.  See toString for documentation.
   raw_ostream &print(raw_ostream &OS,
@@ -634,7 +634,7 @@
   void shiftLeft(int32_t Shift);
   void shiftRight(int32_t Shift);
 
-  /// \brief Adjust two floats to have matching exponents.
+  /// Adjust two floats to have matching exponents.
   ///
   /// Adjust \c this and \c X to have matching exponents.  Returns the new \c X
   /// by value.  Does nothing if \a isZero() for either.
@@ -647,7 +647,7 @@
   }
 
 public:
-  /// \brief Scale a large number accurately.
+  /// Scale a large number accurately.
   ///
   /// Scale N (multiply it by this).  Uses full precision multiplication, even
   /// if Width is smaller than 64, so information is not lost.
@@ -693,7 +693,7 @@
     return countLeadingZeros32(Digits) + Width - 32;
   }
 
-  /// \brief Adjust a number to width, rounding up if necessary.
+  /// Adjust a number to width, rounding up if necessary.
   ///
   /// Should only be called for \c Shift close to zero.
   ///
diff --git a/linux-x64/clang/include/llvm/Support/ScopedPrinter.h b/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
index 964d254..062439b 100644
--- a/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
+++ b/linux-x64/clang/include/llvm/Support/ScopedPrinter.h
@@ -138,7 +138,7 @@
       }
     }
 
-    std::sort(SetFlags.begin(), SetFlags.end(), &flagName<TFlag>);
+    llvm::sort(SetFlags.begin(), SetFlags.end(), &flagName<TFlag>);
 
     startLine() << Label << " [ (" << hex(Value) << ")\n";
     for (const auto &Flag : SetFlags) {
diff --git a/linux-x64/clang/include/llvm/Support/Signals.h b/linux-x64/clang/include/llvm/Support/Signals.h
index dec5f58..f25a049 100644
--- a/linux-x64/clang/include/llvm/Support/Signals.h
+++ b/linux-x64/clang/include/llvm/Support/Signals.h
@@ -29,7 +29,7 @@
 
   /// This function registers signal handlers to ensure that if a signal gets
   /// delivered that the named file is removed.
-  /// @brief Remove a file if a fatal signal occurs.
+  /// Remove a file if a fatal signal occurs.
   bool RemoveFileOnSignal(StringRef Filename, std::string* ErrMsg = nullptr);
 
   /// This function removes a file from the list of files to be removed on
@@ -38,7 +38,7 @@
 
   /// When an error signal (such as SIGABRT or SIGSEGV) is delivered to the
   /// process, print a stack trace and then exit.
-  /// \brief Print a stack trace if a fatal signal occurs.
+  /// Print a stack trace if a fatal signal occurs.
   /// \param Argv0 the current binary name, used to find the symbolizer
   ///        relative to the current binary before searching $PATH; can be
   ///        StringRef(), in which case we will only search $PATH.
@@ -50,16 +50,18 @@
   /// Disable all system dialog boxes that appear when the process crashes.
   void DisableSystemDialogsOnCrash();
 
-  /// \brief Print the stack trace using the given \c raw_ostream object.
+  /// Print the stack trace using the given \c raw_ostream object.
   void PrintStackTrace(raw_ostream &OS);
 
   // Run all registered signal handlers.
   void RunSignalHandlers();
 
-  /// AddSignalHandler - Add a function to be called when an abort/kill signal
-  /// is delivered to the process.  The handler can have a cookie passed to it
-  /// to identify what instance of the handler it is.
-  void AddSignalHandler(void (*FnPtr)(void *), void *Cookie);
+  using SignalHandlerCallback = void (*)(void *);
+
+  /// Add a function to be called when an abort/kill signal is delivered to the
+  /// process. The handler can have a cookie passed to it to identify what
+  /// instance of the handler it is.
+  void AddSignalHandler(SignalHandlerCallback FnPtr, void *Cookie);
 
   /// This function registers a function to be called when the user "interrupts"
   /// the program (typically by pressing ctrl-c).  When the user interrupts the
@@ -69,7 +71,7 @@
   /// functions.  An null interrupt function pointer disables the current
   /// installed function.  Note also that the handler may be executed on a
   /// different thread on some platforms.
-  /// @brief Register a function to be called when ctrl-c is pressed.
+  /// Register a function to be called when ctrl-c is pressed.
   void SetInterruptFunction(void (*IF)());
 } // End sys namespace
 } // End llvm namespace
diff --git a/linux-x64/clang/include/llvm/ExecutionEngine/ObjectMemoryBuffer.h b/linux-x64/clang/include/llvm/Support/SmallVectorMemoryBuffer.h
similarity index 71%
rename from linux-x64/clang/include/llvm/ExecutionEngine/ObjectMemoryBuffer.h
rename to linux-x64/clang/include/llvm/Support/SmallVectorMemoryBuffer.h
index 0f00ad0..c4a600e 100644
--- a/linux-x64/clang/include/llvm/ExecutionEngine/ObjectMemoryBuffer.h
+++ b/linux-x64/clang/include/llvm/Support/SmallVectorMemoryBuffer.h
@@ -1,4 +1,4 @@
-//===- ObjectMemoryBuffer.h - SmallVector-backed MemoryBuffrer  -*- C++ -*-===//
+//===- SmallVectorMemoryBuffer.h --------------------------------*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -21,34 +21,37 @@
 
 namespace llvm {
 
-/// \brief SmallVector-backed MemoryBuffer instance.
+/// SmallVector-backed MemoryBuffer instance.
 ///
 /// This class enables efficient construction of MemoryBuffers from SmallVector
 /// instances. This is useful for MCJIT and Orc, where object files are streamed
 /// into SmallVectors, then inspected using ObjectFile (which takes a
 /// MemoryBuffer).
-class ObjectMemoryBuffer : public MemoryBuffer {
+class SmallVectorMemoryBuffer : public MemoryBuffer {
 public:
-
-  /// \brief Construct an ObjectMemoryBuffer from the given SmallVector r-value.
+  /// Construct an SmallVectorMemoryBuffer from the given SmallVector
+  /// r-value.
   ///
   /// FIXME: It'd be nice for this to be a non-templated constructor taking a
   /// SmallVectorImpl here instead of a templated one taking a SmallVector<N>,
   /// but SmallVector's move-construction/assignment currently only take
   /// SmallVectors. If/when that is fixed we can simplify this constructor and
   /// the following one.
-  ObjectMemoryBuffer(SmallVectorImpl<char> &&SV)
-    : SV(std::move(SV)), BufferName("<in-memory object>") {
+  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV)
+      : SV(std::move(SV)), BufferName("<in-memory object>") {
     init(this->SV.begin(), this->SV.end(), false);
   }
 
-  /// \brief Construct a named ObjectMemoryBuffer from the given SmallVector
-  ///        r-value and StringRef.
-  ObjectMemoryBuffer(SmallVectorImpl<char> &&SV, StringRef Name)
-    : SV(std::move(SV)), BufferName(Name) {
+  /// Construct a named SmallVectorMemoryBuffer from the given
+  /// SmallVector r-value and StringRef.
+  SmallVectorMemoryBuffer(SmallVectorImpl<char> &&SV, StringRef Name)
+      : SV(std::move(SV)), BufferName(Name) {
     init(this->SV.begin(), this->SV.end(), false);
   }
 
+  // Key function.
+  ~SmallVectorMemoryBuffer() override;
+
   StringRef getBufferIdentifier() const override { return BufferName; }
 
   BufferKind getBufferKind() const override { return MemoryBuffer_Malloc; }
diff --git a/linux-x64/clang/include/llvm/Support/SourceMgr.h b/linux-x64/clang/include/llvm/Support/SourceMgr.h
index c08bf85..63ac893 100644
--- a/linux-x64/clang/include/llvm/Support/SourceMgr.h
+++ b/linux-x64/clang/include/llvm/Support/SourceMgr.h
@@ -18,6 +18,7 @@
 
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/None.h"
+#include "llvm/ADT/PointerUnion.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
@@ -57,8 +58,38 @@
     /// The memory buffer for the file.
     std::unique_ptr<MemoryBuffer> Buffer;
 
+    /// Helper type for OffsetCache below: since we're storing many offsets
+    /// into relatively small files (often smaller than 2^8 or 2^16 bytes),
+    /// we select the offset vector element type dynamically based on the
+    /// size of Buffer.
+    using VariableSizeOffsets = PointerUnion4<std::vector<uint8_t> *,
+                                              std::vector<uint16_t> *,
+                                              std::vector<uint32_t> *,
+                                              std::vector<uint64_t> *>;
+
+    /// Vector of offsets into Buffer at which there are line-endings
+    /// (lazily populated). Once populated, the '\n' that marks the end of
+    /// line number N from [1..] is at Buffer[OffsetCache[N-1]]. Since
+    /// these offsets are in sorted (ascending) order, they can be
+    /// binary-searched for the first one after any given offset (eg. an
+    /// offset corresponding to a particular SMLoc).
+    mutable VariableSizeOffsets OffsetCache;
+
+    /// Populate \c OffsetCache and look up a given \p Ptr in it, assuming
+    /// it points somewhere into \c Buffer. The static type parameter \p T
+    /// must be an unsigned integer type from uint{8,16,32,64}_t large
+    /// enough to store offsets inside \c Buffer.
+    template<typename T>
+    unsigned getLineNumber(const char *Ptr) const;
+
     /// This is the location of the parent include, or null if at the top level.
     SMLoc IncludeLoc;
+
+    SrcBuffer() = default;
+    SrcBuffer(SrcBuffer &&);
+    SrcBuffer(const SrcBuffer &) = delete;
+    SrcBuffer &operator=(const SrcBuffer &) = delete;
+    ~SrcBuffer();
   };
 
   /// This is all of the buffers that we are reading from.
@@ -67,10 +98,6 @@
   // This is the list of directories we should search for include files in.
   std::vector<std::string> IncludeDirectories;
 
-  /// This is a cache for line number queries, its implementation is really
-  /// private to SourceMgr.cpp.
-  mutable void *LineNoCache = nullptr;
-
   DiagHandlerTy DiagHandler = nullptr;
   void *DiagContext = nullptr;
 
@@ -80,7 +107,7 @@
   SourceMgr() = default;
   SourceMgr(const SourceMgr &) = delete;
   SourceMgr &operator=(const SourceMgr &) = delete;
-  ~SourceMgr();
+  ~SourceMgr() = default;
 
   void setIncludeDirs(const std::vector<std::string> &Dirs) {
     IncludeDirectories = Dirs;
diff --git a/linux-x64/clang/include/llvm/Support/StringSaver.h b/linux-x64/clang/include/llvm/Support/StringSaver.h
index e85b289..6b77d48 100644
--- a/linux-x64/clang/include/llvm/Support/StringSaver.h
+++ b/linux-x64/clang/include/llvm/Support/StringSaver.h
@@ -10,23 +10,49 @@
 #ifndef LLVM_SUPPORT_STRINGSAVER_H
 #define LLVM_SUPPORT_STRINGSAVER_H
 
+#include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Support/Allocator.h"
 
 namespace llvm {
 
-/// \brief Saves strings in the inheritor's stable storage and returns a
+/// Saves strings in the provided stable storage and returns a
 /// StringRef with a stable character pointer.
 class StringSaver final {
   BumpPtrAllocator &Alloc;
 
 public:
   StringSaver(BumpPtrAllocator &Alloc) : Alloc(Alloc) {}
+
+  // All returned strings are null-terminated: *save(S).end() == 0.
   StringRef save(const char *S) { return save(StringRef(S)); }
   StringRef save(StringRef S);
   StringRef save(const Twine &S) { return save(StringRef(S.str())); }
   StringRef save(const std::string &S) { return save(StringRef(S)); }
 };
+
+/// Saves strings in the provided stable storage and returns a StringRef with a
+/// stable character pointer. Saving the same string yields the same StringRef.
+///
+/// Compared to StringSaver, it does more work but avoids saving the same string
+/// multiple times.
+///
+/// Compared to StringPool, it performs fewer allocations but doesn't support
+/// refcounting/deletion.
+class UniqueStringSaver final {
+  StringSaver Strings;
+  llvm::DenseSet<llvm::StringRef> Unique;
+
+public:
+  UniqueStringSaver(BumpPtrAllocator &Alloc) : Strings(Alloc) {}
+
+  // All returned strings are null-terminated: *save(S).end() == 0.
+  StringRef save(const char *S) { return save(StringRef(S)); }
+  StringRef save(StringRef S);
+  StringRef save(const Twine &S) { return save(StringRef(S.str())); }
+  StringRef save(const std::string &S) { return save(StringRef(S)); }
+};
+
 }
 #endif
diff --git a/linux-x64/clang/include/llvm/Support/SystemUtils.h b/linux-x64/clang/include/llvm/Support/SystemUtils.h
index 2997b1b..bd60793 100644
--- a/linux-x64/clang/include/llvm/Support/SystemUtils.h
+++ b/linux-x64/clang/include/llvm/Support/SystemUtils.h
@@ -21,7 +21,7 @@
 /// Determine if the raw_ostream provided is connected to a terminal. If so,
 /// generate a warning message to errs() advising against display of bitcode
 /// and return true. Otherwise just return false.
-/// @brief Check for output written to a console
+/// Check for output written to a console
 bool CheckBitcodeOutputToConsole(
   raw_ostream &stream_to_check, ///< The stream to be checked
   bool print_warning = true     ///< Control whether warnings are printed
diff --git a/linux-x64/clang/include/llvm/Support/TargetOpcodes.def b/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
index 0614a00..9143e5b 100644
--- a/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
+++ b/linux-x64/clang/include/llvm/Support/TargetOpcodes.def
@@ -77,6 +77,9 @@
 /// DBG_VALUE - a mapping of the llvm.dbg.value intrinsic
 HANDLE_TARGET_OPCODE(DBG_VALUE)
 
+/// DBG_LABEL - a mapping of the llvm.dbg.label intrinsic
+HANDLE_TARGET_OPCODE(DBG_LABEL)
+
 /// REG_SEQUENCE - This variadic instruction is used to form a register that
 /// represents a consecutive sequence of sub-registers. It's used as a
 /// register coalescing / allocation aid and must be eliminated before code
@@ -183,10 +186,14 @@
 /// PATCHABLE_RET which specifically only works for return instructions.
 HANDLE_TARGET_OPCODE(PATCHABLE_TAIL_CALL)
 
-/// Wraps a logging call and its arguments with nop sleds. At runtime, this can be
-/// patched to insert instrumentation instructions.
+/// Wraps a logging call and its arguments with nop sleds. At runtime, this can
+/// be patched to insert instrumentation instructions.
 HANDLE_TARGET_OPCODE(PATCHABLE_EVENT_CALL)
 
+/// Wraps a typed logging call and its argument with nop sleds. At runtime, this
+/// can be patched to insert instrumentation instructions.
+HANDLE_TARGET_OPCODE(PATCHABLE_TYPED_EVENT_CALL)
+
 HANDLE_TARGET_OPCODE(ICALL_BRANCH_FUNNEL)
 
 /// The following generic opcodes are not supposed to appear after ISel.
@@ -261,9 +268,15 @@
 /// COPY is the relevant instruction.
 HANDLE_TARGET_OPCODE(G_BITCAST)
 
-/// Generic load.
+/// Generic load (including anyext load)
 HANDLE_TARGET_OPCODE(G_LOAD)
 
+/// Generic signext load
+HANDLE_TARGET_OPCODE(G_SEXTLOAD)
+
+/// Generic zeroext load
+HANDLE_TARGET_OPCODE(G_ZEXTLOAD)
+
 /// Generic store.
 HANDLE_TARGET_OPCODE(G_STORE)
 
@@ -451,15 +464,36 @@
 /// Generic shufflevector.
 HANDLE_TARGET_OPCODE(G_SHUFFLE_VECTOR)
 
+/// Generic count trailing zeroes.
+HANDLE_TARGET_OPCODE(G_CTTZ)
+
+/// Same as above, undefined for zero inputs.
+HANDLE_TARGET_OPCODE(G_CTTZ_ZERO_UNDEF)
+
+/// Generic count leading zeroes.
+HANDLE_TARGET_OPCODE(G_CTLZ)
+
+/// Same as above, undefined for zero inputs.
+HANDLE_TARGET_OPCODE(G_CTLZ_ZERO_UNDEF)
+
+/// Generic count bits.
+HANDLE_TARGET_OPCODE(G_CTPOP)
+
 /// Generic byte swap.
 HANDLE_TARGET_OPCODE(G_BSWAP)
 
+/// Generic AddressSpaceCast.
+HANDLE_TARGET_OPCODE(G_ADDRSPACE_CAST)
+
+/// Generic block address
+HANDLE_TARGET_OPCODE(G_BLOCK_ADDR)
+
 // TODO: Add more generic opcodes as we move along.
 
 /// Marker for the end of the generic opcode.
 /// This is used to check if an opcode is in the range of the
 /// generic opcodes.
-HANDLE_TARGET_OPCODE_MARKER(PRE_ISEL_GENERIC_OPCODE_END, G_BSWAP)
+HANDLE_TARGET_OPCODE_MARKER(PRE_ISEL_GENERIC_OPCODE_END, G_BLOCK_ADDR)
 
 /// BUILTIN_OP_END - This must be the last enum value in this list.
 /// The target-specific post-isel opcode values start here.
diff --git a/linux-x64/clang/include/llvm/Support/TargetParser.h b/linux-x64/clang/include/llvm/Support/TargetParser.h
index 8fba995..08ad42d 100644
--- a/linux-x64/clang/include/llvm/Support/TargetParser.h
+++ b/linux-x64/clang/include/llvm/Support/TargetParser.h
@@ -86,6 +86,8 @@
   AEK_RAS =         1 << 12,
   AEK_SVE =         1 << 13,
   AEK_DOTPROD =     1 << 14,
+  AEK_SHA2    =     1 << 15,
+  AEK_AES     =     1 << 16,
   // Unsupported extensions.
   AEK_OS = 0x8000000,
   AEK_IWMMXT = 0x10000000,
@@ -171,7 +173,11 @@
   AEK_SVE =         1 << 9,
   AEK_DOTPROD =     1 << 10,
   AEK_RCPC =        1 << 11,
-  AEK_RDM =         1 << 12
+  AEK_RDM =         1 << 12,
+  AEK_SM4 =         1 << 13,
+  AEK_SHA3 =        1 << 14,
+  AEK_SHA2 =        1 << 15,
+  AEK_AES =         1 << 16,
 };
 
 StringRef getCanonicalArchName(StringRef Arch);
@@ -200,6 +206,7 @@
 unsigned  getDefaultFPU(StringRef CPU, ArchKind AK);
 unsigned  getDefaultExtensions(StringRef CPU, ArchKind AK);
 StringRef getDefaultCPU(StringRef Arch);
+AArch64::ArchKind getCPUArchKind(StringRef CPU);
 
 // Parser
 unsigned parseFPU(StringRef FPU);
@@ -212,6 +219,8 @@
 ARM::ProfileKind parseArchProfile(StringRef Arch);
 unsigned parseArchVersion(StringRef Arch);
 
+bool isX18ReservedByDefault(const Triple &TT);
+
 } // namespace AArch64
 
 namespace X86 {
diff --git a/linux-x64/clang/include/llvm/Support/TargetRegistry.h b/linux-x64/clang/include/llvm/Support/TargetRegistry.h
index 0fc8c38..1bafc4e 100644
--- a/linux-x64/clang/include/llvm/Support/TargetRegistry.h
+++ b/linux-x64/clang/include/llvm/Support/TargetRegistry.h
@@ -46,6 +46,7 @@
 class MCInstPrinter;
 class MCInstrAnalysis;
 class MCInstrInfo;
+class MCObjectWriter;
 class MCRegisterInfo;
 class MCRelocationInfo;
 class MCStreamer;
@@ -60,27 +61,44 @@
 class TargetOptions;
 
 MCStreamer *createNullStreamer(MCContext &Ctx);
-MCStreamer *createAsmStreamer(MCContext &Ctx,
-                              std::unique_ptr<formatted_raw_ostream> OS,
-                              bool isVerboseAsm, bool useDwarfDirectory,
-                              MCInstPrinter *InstPrint, MCCodeEmitter *CE,
-                              MCAsmBackend *TAB, bool ShowInst);
+// Takes ownership of \p TAB and \p CE.
 
-/// Takes ownership of \p TAB and \p CE.
+/// Create a machine code streamer which will print out assembly for the native
+/// target, suitable for compiling with a native assembler.
+///
+/// \param InstPrint - If given, the instruction printer to use. If not given
+/// the MCInst representation will be printed.  This method takes ownership of
+/// InstPrint.
+///
+/// \param CE - If given, a code emitter to use to show the instruction
+/// encoding inline with the assembly. This method takes ownership of \p CE.
+///
+/// \param TAB - If given, a target asm backend to use to show the fixup
+/// information in conjunction with encoding information. This method takes
+/// ownership of \p TAB.
+///
+/// \param ShowInst - Whether to show the MCInst representation inline with
+/// the assembly.
+MCStreamer *
+createAsmStreamer(MCContext &Ctx, std::unique_ptr<formatted_raw_ostream> OS,
+                  bool isVerboseAsm, bool useDwarfDirectory,
+                  MCInstPrinter *InstPrint, std::unique_ptr<MCCodeEmitter> &&CE,
+                  std::unique_ptr<MCAsmBackend> &&TAB, bool ShowInst);
+
 MCStreamer *createELFStreamer(MCContext &Ctx,
                               std::unique_ptr<MCAsmBackend> &&TAB,
-                              raw_pwrite_stream &OS,
+                              std::unique_ptr<MCObjectWriter> &&OW,
                               std::unique_ptr<MCCodeEmitter> &&CE,
                               bool RelaxAll);
 MCStreamer *createMachOStreamer(MCContext &Ctx,
                                 std::unique_ptr<MCAsmBackend> &&TAB,
-                                raw_pwrite_stream &OS,
+                                std::unique_ptr<MCObjectWriter> &&OW,
                                 std::unique_ptr<MCCodeEmitter> &&CE,
                                 bool RelaxAll, bool DWARFMustBeAtTheEnd,
                                 bool LabelSections = false);
 MCStreamer *createWasmStreamer(MCContext &Ctx,
                                std::unique_ptr<MCAsmBackend> &&TAB,
-                               raw_pwrite_stream &OS,
+                               std::unique_ptr<MCObjectWriter> &&OW,
                                std::unique_ptr<MCCodeEmitter> &&CE,
                                bool RelaxAll);
 
@@ -143,22 +161,22 @@
   using ELFStreamerCtorTy =
       MCStreamer *(*)(const Triple &T, MCContext &Ctx,
                       std::unique_ptr<MCAsmBackend> &&TAB,
-                      raw_pwrite_stream &OS,
+                      std::unique_ptr<MCObjectWriter> &&OW,
                       std::unique_ptr<MCCodeEmitter> &&Emitter, bool RelaxAll);
   using MachOStreamerCtorTy =
       MCStreamer *(*)(MCContext &Ctx, std::unique_ptr<MCAsmBackend> &&TAB,
-                      raw_pwrite_stream &OS,
+                      std::unique_ptr<MCObjectWriter> &&OW,
                       std::unique_ptr<MCCodeEmitter> &&Emitter, bool RelaxAll,
                       bool DWARFMustBeAtTheEnd);
   using COFFStreamerCtorTy =
       MCStreamer *(*)(MCContext &Ctx, std::unique_ptr<MCAsmBackend> &&TAB,
-                      raw_pwrite_stream &OS,
+                      std::unique_ptr<MCObjectWriter> &&OW,
                       std::unique_ptr<MCCodeEmitter> &&Emitter, bool RelaxAll,
                       bool IncrementalLinkerCompatible);
   using WasmStreamerCtorTy =
       MCStreamer *(*)(const Triple &T, MCContext &Ctx,
                       std::unique_ptr<MCAsmBackend> &&TAB,
-                      raw_pwrite_stream &OS,
+                      std::unique_ptr<MCObjectWriter> &&OW,
                       std::unique_ptr<MCCodeEmitter> &&Emitter, bool RelaxAll);
   using NullTargetStreamerCtorTy = MCTargetStreamer *(*)(MCStreamer &S);
   using AsmTargetStreamerCtorTy = MCTargetStreamer *(*)(
@@ -441,12 +459,12 @@
   /// \param T The target triple.
   /// \param Ctx The target context.
   /// \param TAB The target assembler backend object. Takes ownership.
-  /// \param OS The stream object.
+  /// \param OW The stream object.
   /// \param Emitter The target independent assembler object.Takes ownership.
   /// \param RelaxAll Relax all fixups?
   MCStreamer *createMCObjectStreamer(const Triple &T, MCContext &Ctx,
                                      std::unique_ptr<MCAsmBackend> &&TAB,
-                                     raw_pwrite_stream &OS,
+                                     std::unique_ptr<MCObjectWriter> &&OW,
                                      std::unique_ptr<MCCodeEmitter> &&Emitter,
                                      const MCSubtargetInfo &STI, bool RelaxAll,
                                      bool IncrementalLinkerCompatible,
@@ -457,32 +475,35 @@
       llvm_unreachable("Unknown object format");
     case Triple::COFF:
       assert(T.isOSWindows() && "only Windows COFF is supported");
-      S = COFFStreamerCtorFn(Ctx, std::move(TAB), OS, std::move(Emitter),
-                             RelaxAll, IncrementalLinkerCompatible);
+      S = COFFStreamerCtorFn(Ctx, std::move(TAB), std::move(OW),
+                             std::move(Emitter), RelaxAll,
+                             IncrementalLinkerCompatible);
       break;
     case Triple::MachO:
       if (MachOStreamerCtorFn)
-        S = MachOStreamerCtorFn(Ctx, std::move(TAB), OS, std::move(Emitter),
-                                RelaxAll, DWARFMustBeAtTheEnd);
+        S = MachOStreamerCtorFn(Ctx, std::move(TAB), std::move(OW),
+                                std::move(Emitter), RelaxAll,
+                                DWARFMustBeAtTheEnd);
       else
-        S = createMachOStreamer(Ctx, std::move(TAB), OS, std::move(Emitter),
-                                RelaxAll, DWARFMustBeAtTheEnd);
+        S = createMachOStreamer(Ctx, std::move(TAB), std::move(OW),
+                                std::move(Emitter), RelaxAll,
+                                DWARFMustBeAtTheEnd);
       break;
     case Triple::ELF:
       if (ELFStreamerCtorFn)
-        S = ELFStreamerCtorFn(T, Ctx, std::move(TAB), OS, std::move(Emitter),
-                              RelaxAll);
+        S = ELFStreamerCtorFn(T, Ctx, std::move(TAB), std::move(OW),
+                              std::move(Emitter), RelaxAll);
       else
-        S = createELFStreamer(Ctx, std::move(TAB), OS, std::move(Emitter),
-                              RelaxAll);
+        S = createELFStreamer(Ctx, std::move(TAB), std::move(OW),
+                              std::move(Emitter), RelaxAll);
       break;
     case Triple::Wasm:
       if (WasmStreamerCtorFn)
-        S = WasmStreamerCtorFn(T, Ctx, std::move(TAB), OS, std::move(Emitter),
-                               RelaxAll);
+        S = WasmStreamerCtorFn(T, Ctx, std::move(TAB), std::move(OW),
+                               std::move(Emitter), RelaxAll);
       else
-        S = createWasmStreamer(Ctx, std::move(TAB), OS, std::move(Emitter),
-                               RelaxAll);
+        S = createWasmStreamer(Ctx, std::move(TAB), std::move(OW),
+                               std::move(Emitter), RelaxAll);
       break;
     }
     if (ObjectTargetStreamerCtorFn)
@@ -493,12 +514,14 @@
   MCStreamer *createAsmStreamer(MCContext &Ctx,
                                 std::unique_ptr<formatted_raw_ostream> OS,
                                 bool IsVerboseAsm, bool UseDwarfDirectory,
-                                MCInstPrinter *InstPrint, MCCodeEmitter *CE,
-                                MCAsmBackend *TAB, bool ShowInst) const {
+                                MCInstPrinter *InstPrint,
+                                std::unique_ptr<MCCodeEmitter> &&CE,
+                                std::unique_ptr<MCAsmBackend> &&TAB,
+                                bool ShowInst) const {
     formatted_raw_ostream &OSRef = *OS;
-    MCStreamer *S = llvm::createAsmStreamer(Ctx, std::move(OS), IsVerboseAsm,
-                                            UseDwarfDirectory, InstPrint, CE,
-                                            TAB, ShowInst);
+    MCStreamer *S = llvm::createAsmStreamer(
+        Ctx, std::move(OS), IsVerboseAsm, UseDwarfDirectory, InstPrint,
+        std::move(CE), std::move(TAB), ShowInst);
     createAsmTargetStreamer(*S, OSRef, InstPrint, IsVerboseAsm);
     return S;
   }
diff --git a/linux-x64/clang/include/llvm/Support/TaskQueue.h b/linux-x64/clang/include/llvm/Support/TaskQueue.h
new file mode 100644
index 0000000..49981ad
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/TaskQueue.h
@@ -0,0 +1,139 @@
+//===-- llvm/Support/TaskQueue.h - A TaskQueue implementation ---*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines a crude C++11 based task queue.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_TASK_QUEUE_H
+#define LLVM_SUPPORT_TASK_QUEUE_H
+
+#include "llvm/Config/llvm-config.h"
+#include "llvm/Support/ThreadPool.h"
+#include "llvm/Support/thread.h"
+
+#include <atomic>
+#include <cassert>
+#include <condition_variable>
+#include <deque>
+#include <functional>
+#include <future>
+#include <memory>
+#include <mutex>
+#include <utility>
+
+namespace llvm {
+/// TaskQueue executes serialized work on a user-defined Thread Pool.  It
+/// guarantees that if task B is enqueued after task A, task B begins after
+/// task A completes and there is no overlap between the two.
+class TaskQueue {
+  // Because we don't have init capture to use move-only local variables that
+  // are captured into a lambda, we create the promise inside an explicit
+  // callable struct. We want to do as much of the wrapping in the
+  // type-specialized domain (before type erasure) and then erase this into a
+  // std::function.
+  template <typename Callable> struct Task {
+    using ResultTy = typename std::result_of<Callable()>::type;
+    explicit Task(Callable C, TaskQueue &Parent)
+        : C(std::move(C)), P(std::make_shared<std::promise<ResultTy>>()),
+          Parent(&Parent) {}
+
+    template<typename T>
+    void invokeCallbackAndSetPromise(T*) {
+      P->set_value(C());
+    }
+
+    void invokeCallbackAndSetPromise(void*) {
+      C();
+      P->set_value();
+    }
+
+    void operator()() noexcept {
+      ResultTy *Dummy = nullptr;
+      invokeCallbackAndSetPromise(Dummy);
+      Parent->completeTask();
+    }
+
+    Callable C;
+    std::shared_ptr<std::promise<ResultTy>> P;
+    TaskQueue *Parent;
+  };
+
+public:
+  /// Construct a task queue with no work.
+  TaskQueue(ThreadPool &Scheduler) : Scheduler(Scheduler) { (void)Scheduler; }
+
+  /// Blocking destructor: the queue will wait for all work to complete.
+  ~TaskQueue() {
+    Scheduler.wait();
+    assert(Tasks.empty());
+  }
+
+  /// Asynchronous submission of a task to the queue. The returned future can be
+  /// used to wait for the task (and all previous tasks that have not yet
+  /// completed) to finish.
+  template <typename Callable>
+  std::future<typename std::result_of<Callable()>::type> async(Callable &&C) {
+#if !LLVM_ENABLE_THREADS
+    static_assert(false,
+                  "TaskQueue requires building with LLVM_ENABLE_THREADS!");
+#endif
+    Task<Callable> T{std::move(C), *this};
+    using ResultTy = typename std::result_of<Callable()>::type;
+    std::future<ResultTy> F = T.P->get_future();
+    {
+      std::lock_guard<std::mutex> Lock(QueueLock);
+      // If there's already a task in flight, just queue this one up.  If
+      // there is not a task in flight, bypass the queue and schedule this
+      // task immediately.
+      if (IsTaskInFlight)
+        Tasks.push_back(std::move(T));
+      else {
+        Scheduler.async(std::move(T));
+        IsTaskInFlight = true;
+      }
+    }
+    return std::move(F);
+  }
+
+private:
+  void completeTask() {
+    // We just completed a task.  If there are no more tasks in the queue,
+    // update IsTaskInFlight to false and stop doing work.  Otherwise
+    // schedule the next task (while not holding the lock).
+    std::function<void()> Continuation;
+    {
+      std::lock_guard<std::mutex> Lock(QueueLock);
+      if (Tasks.empty()) {
+        IsTaskInFlight = false;
+        return;
+      }
+
+      Continuation = std::move(Tasks.front());
+      Tasks.pop_front();
+    }
+    Scheduler.async(std::move(Continuation));
+  }
+
+  /// The thread pool on which to run the work.
+  ThreadPool &Scheduler;
+
+  /// State which indicates whether the queue currently is currently processing
+  /// any work.
+  bool IsTaskInFlight = false;
+
+  /// Mutex for synchronizing access to the Tasks array.
+  std::mutex QueueLock;
+
+  /// Tasks waiting for execution in the queue.
+  std::deque<std::function<void()>> Tasks;
+};
+} // namespace llvm
+
+#endif // LLVM_SUPPORT_TASK_QUEUE_H
diff --git a/linux-x64/clang/include/llvm/Support/ThreadLocal.h b/linux-x64/clang/include/llvm/Support/ThreadLocal.h
index 427a67e..885bd18 100644
--- a/linux-x64/clang/include/llvm/Support/ThreadLocal.h
+++ b/linux-x64/clang/include/llvm/Support/ThreadLocal.h
@@ -24,7 +24,7 @@
     // YOU SHOULD NEVER USE THIS DIRECTLY.
     class ThreadLocalImpl {
       typedef uint64_t ThreadLocalDataTy;
-      /// \brief Platform-specific thread local data.
+      /// Platform-specific thread local data.
       ///
       /// This is embedded in the class and we avoid malloc'ing/free'ing it,
       /// to make this class more safe for use along with CrashRecoveryContext.
diff --git a/linux-x64/clang/include/llvm/Support/ThreadPool.h b/linux-x64/clang/include/llvm/Support/ThreadPool.h
index fb82559..4fdbd52 100644
--- a/linux-x64/clang/include/llvm/Support/ThreadPool.h
+++ b/linux-x64/clang/include/llvm/Support/ThreadPool.h
@@ -14,6 +14,7 @@
 #ifndef LLVM_SUPPORT_THREAD_POOL_H
 #define LLVM_SUPPORT_THREAD_POOL_H
 
+#include "llvm/Config/llvm-config.h"
 #include "llvm/Support/thread.h"
 
 #include <future>
diff --git a/linux-x64/clang/include/llvm/Support/Threading.h b/linux-x64/clang/include/llvm/Support/Threading.h
index 6d813bc..e8021f6 100644
--- a/linux-x64/clang/include/llvm/Support/Threading.h
+++ b/linux-x64/clang/include/llvm/Support/Threading.h
@@ -72,7 +72,7 @@
 
   enum InitStatus { Uninitialized = 0, Wait = 1, Done = 2 };
 
-  /// \brief The llvm::once_flag structure
+  /// The llvm::once_flag structure
   ///
   /// This type is modeled after std::once_flag to use with llvm::call_once.
   /// This structure must be used as an opaque object. It is a struct to force
@@ -83,7 +83,7 @@
 
 #endif
 
-  /// \brief Execute the function specified as a parameter once.
+  /// Execute the function specified as a parameter once.
   ///
   /// Typical usage:
   /// \code
@@ -139,17 +139,17 @@
   /// not available.
   unsigned hardware_concurrency();
 
-  /// \brief Return the current thread id, as used in various OS system calls.
+  /// Return the current thread id, as used in various OS system calls.
   /// Note that not all platforms guarantee that the value returned will be
   /// unique across the entire system, so portable code should not assume
   /// this.
   uint64_t get_threadid();
 
-  /// \brief Get the maximum length of a thread name on this platform.
+  /// Get the maximum length of a thread name on this platform.
   /// A value of 0 means there is no limit.
   uint32_t get_max_thread_name_length();
 
-  /// \brief Set the name of the current thread.  Setting a thread's name can
+  /// Set the name of the current thread.  Setting a thread's name can
   /// be helpful for enabling useful diagnostics under a debugger or when
   /// logging.  The level of support for setting a thread's name varies
   /// wildly across operating systems, and we only make a best effort to
@@ -157,7 +157,7 @@
   /// or failure is returned.
   void set_thread_name(const Twine &Name);
 
-  /// \brief Get the name of the current thread.  The level of support for
+  /// Get the name of the current thread.  The level of support for
   /// getting a thread's name varies wildly across operating systems, and it
   /// is not even guaranteed that if you can successfully set a thread's name
   /// that you can later get it back.  This function is intended for diagnostic
diff --git a/linux-x64/clang/include/llvm/Support/Timer.h b/linux-x64/clang/include/llvm/Support/Timer.h
index 198855a..bfffbc3 100644
--- a/linux-x64/clang/include/llvm/Support/Timer.h
+++ b/linux-x64/clang/include/llvm/Support/Timer.h
@@ -10,6 +10,7 @@
 #ifndef LLVM_SUPPORT_TIMER_H
 #define LLVM_SUPPORT_TIMER_H
 
+#include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Support/DataTypes.h"
 #include <cassert>
@@ -194,6 +195,10 @@
 
 public:
   explicit TimerGroup(StringRef Name, StringRef Description);
+
+  explicit TimerGroup(StringRef Name, StringRef Description,
+                      const StringMap<TimeRecord> &Records);
+
   ~TimerGroup();
 
   void setName(StringRef NewName, StringRef NewDescription) {
@@ -207,6 +212,8 @@
   /// This static method prints all timers and clears them all out.
   static void printAll(raw_ostream &OS);
 
+  const char *printJSONValues(raw_ostream &OS, const char *delim);
+
   /// Prints all timers as JSON key/value pairs, and clears them all out.
   static const char *printAllJSONValues(raw_ostream &OS, const char *delim);
 
@@ -223,7 +230,6 @@
   void PrintQueuedTimers(raw_ostream &OS);
   void printJSONValue(raw_ostream &OS, const PrintRecord &R,
                       const char *suffix, double Value);
-  const char *printJSONValues(raw_ostream &OS, const char *delim);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Support/ToolOutputFile.h b/linux-x64/clang/include/llvm/Support/ToolOutputFile.h
index 7fd5f20..cf3bc2f 100644
--- a/linux-x64/clang/include/llvm/Support/ToolOutputFile.h
+++ b/linux-x64/clang/include/llvm/Support/ToolOutputFile.h
@@ -35,7 +35,7 @@
     /// The flag which indicates whether we should not delete the file.
     bool Keep;
 
-    explicit CleanupInstaller(StringRef ilename);
+    explicit CleanupInstaller(StringRef Filename);
     ~CleanupInstaller();
   } Installer;
 
diff --git a/linux-x64/clang/include/llvm/Support/TrailingObjects.h b/linux-x64/clang/include/llvm/Support/TrailingObjects.h
index cb5a52b..490bd94 100644
--- a/linux-x64/clang/include/llvm/Support/TrailingObjects.h
+++ b/linux-x64/clang/include/llvm/Support/TrailingObjects.h
@@ -89,25 +89,25 @@
 };
 
 /// This helper template works-around MSVC 2013's lack of useful
-/// alignas() support. The argument to LLVM_ALIGNAS(), in MSVC, is
+/// alignas() support. The argument to alignas(), in MSVC, is
 /// required to be a literal integer. But, you *can* use template
-/// specialization to select between a bunch of different LLVM_ALIGNAS
+/// specialization to select between a bunch of different alignas()
 /// expressions...
 template <int Align>
 class TrailingObjectsAligner : public TrailingObjectsBase {};
 template <>
-class LLVM_ALIGNAS(1) TrailingObjectsAligner<1> : public TrailingObjectsBase {};
+class alignas(1) TrailingObjectsAligner<1> : public TrailingObjectsBase {};
 template <>
-class LLVM_ALIGNAS(2) TrailingObjectsAligner<2> : public TrailingObjectsBase {};
+class alignas(2) TrailingObjectsAligner<2> : public TrailingObjectsBase {};
 template <>
-class LLVM_ALIGNAS(4) TrailingObjectsAligner<4> : public TrailingObjectsBase {};
+class alignas(4) TrailingObjectsAligner<4> : public TrailingObjectsBase {};
 template <>
-class LLVM_ALIGNAS(8) TrailingObjectsAligner<8> : public TrailingObjectsBase {};
+class alignas(8) TrailingObjectsAligner<8> : public TrailingObjectsBase {};
 template <>
-class LLVM_ALIGNAS(16) TrailingObjectsAligner<16> : public TrailingObjectsBase {
+class alignas(16) TrailingObjectsAligner<16> : public TrailingObjectsBase {
 };
 template <>
-class LLVM_ALIGNAS(32) TrailingObjectsAligner<32> : public TrailingObjectsBase {
+class alignas(32) TrailingObjectsAligner<32> : public TrailingObjectsBase {
 };
 
 // Just a little helper for transforming a type pack into the same
diff --git a/linux-x64/clang/include/llvm/Support/Unicode.h b/linux-x64/clang/include/llvm/Support/Unicode.h
index 815484f..983acaf 100644
--- a/linux-x64/clang/include/llvm/Support/Unicode.h
+++ b/linux-x64/clang/include/llvm/Support/Unicode.h
@@ -60,7 +60,7 @@
 ///   * 1 for each of the remaining characters.
 int columnWidthUTF8(StringRef Text);
 
-/// Fold input unicode character according the the Simple unicode case folding
+/// Fold input unicode character according the Simple unicode case folding
 /// rules.
 int foldCharSimple(int C);
 
diff --git a/linux-x64/clang/include/llvm/Support/UnicodeCharRanges.h b/linux-x64/clang/include/llvm/Support/UnicodeCharRanges.h
index 4c65583..3cf4a6d 100644
--- a/linux-x64/clang/include/llvm/Support/UnicodeCharRanges.h
+++ b/linux-x64/clang/include/llvm/Support/UnicodeCharRanges.h
@@ -23,7 +23,7 @@
 namespace llvm {
 namespace sys {
 
-/// \brief Represents a closed range of Unicode code points [Lower, Upper].
+/// Represents a closed range of Unicode code points [Lower, Upper].
 struct UnicodeCharRange {
   uint32_t Lower;
   uint32_t Upper;
@@ -36,14 +36,14 @@
   return Range.Upper < Value;
 }
 
-/// \brief Holds a reference to an ordered array of UnicodeCharRange and allows
+/// Holds a reference to an ordered array of UnicodeCharRange and allows
 /// to quickly check if a code point is contained in the set represented by this
 /// array.
 class UnicodeCharSet {
 public:
   typedef ArrayRef<UnicodeCharRange> CharRanges;
 
-  /// \brief Constructs a UnicodeCharSet instance from an array of
+  /// Constructs a UnicodeCharSet instance from an array of
   /// UnicodeCharRanges.
   ///
   /// Array pointed by \p Ranges should have the lifetime at least as long as
@@ -63,31 +63,31 @@
   }
 #endif
 
-  /// \brief Returns true if the character set contains the Unicode code point
+  /// Returns true if the character set contains the Unicode code point
   /// \p C.
   bool contains(uint32_t C) const {
     return std::binary_search(Ranges.begin(), Ranges.end(), C);
   }
 
 private:
-  /// \brief Returns true if each of the ranges is a proper closed range
+  /// Returns true if each of the ranges is a proper closed range
   /// [min, max], and if the ranges themselves are ordered and non-overlapping.
   bool rangesAreValid() const {
     uint32_t Prev = 0;
     for (CharRanges::const_iterator I = Ranges.begin(), E = Ranges.end();
          I != E; ++I) {
       if (I != Ranges.begin() && Prev >= I->Lower) {
-        DEBUG(dbgs() << "Upper bound 0x");
-        DEBUG(dbgs().write_hex(Prev));
-        DEBUG(dbgs() << " should be less than succeeding lower bound 0x");
-        DEBUG(dbgs().write_hex(I->Lower) << "\n");
+        LLVM_DEBUG(dbgs() << "Upper bound 0x");
+        LLVM_DEBUG(dbgs().write_hex(Prev));
+        LLVM_DEBUG(dbgs() << " should be less than succeeding lower bound 0x");
+        LLVM_DEBUG(dbgs().write_hex(I->Lower) << "\n");
         return false;
       }
       if (I->Upper < I->Lower) {
-        DEBUG(dbgs() << "Upper bound 0x");
-        DEBUG(dbgs().write_hex(I->Lower));
-        DEBUG(dbgs() << " should not be less than lower bound 0x");
-        DEBUG(dbgs().write_hex(I->Upper) << "\n");
+        LLVM_DEBUG(dbgs() << "Upper bound 0x");
+        LLVM_DEBUG(dbgs().write_hex(I->Lower));
+        LLVM_DEBUG(dbgs() << " should not be less than lower bound 0x");
+        LLVM_DEBUG(dbgs().write_hex(I->Upper) << "\n");
         return false;
       }
       Prev = I->Upper;
diff --git a/linux-x64/clang/include/llvm/Support/UniqueLock.h b/linux-x64/clang/include/llvm/Support/UniqueLock.h
index b4675f4..91dc911 100644
--- a/linux-x64/clang/include/llvm/Support/UniqueLock.h
+++ b/linux-x64/clang/include/llvm/Support/UniqueLock.h
@@ -24,7 +24,7 @@
   /// an associated mutex, which is guaranteed to be locked upon creation
   /// and unlocked after destruction. unique_lock can also unlock the mutex
   /// and re-lock it freely during its lifetime.
-  /// @brief Guard a section of code with a mutex.
+  /// Guard a section of code with a mutex.
   template<typename MutexT>
   class unique_lock {
     MutexT *M = nullptr;
diff --git a/linux-x64/clang/include/llvm/Support/VCSRevision.h b/linux-x64/clang/include/llvm/Support/VCSRevision.h
index 8510ea2..914d51a 100644
--- a/linux-x64/clang/include/llvm/Support/VCSRevision.h
+++ b/linux-x64/clang/include/llvm/Support/VCSRevision.h
@@ -1 +1 @@
-#define LLVM_REVISION "git-1d739ffb036"
+#define LLVM_REVISION "git-c822c63a8c6"
diff --git a/linux-x64/clang/include/llvm/Support/VersionTuple.h b/linux-x64/clang/include/llvm/Support/VersionTuple.h
new file mode 100644
index 0000000..e85a188
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Support/VersionTuple.h
@@ -0,0 +1,154 @@
+//===- VersionTuple.h - Version Number Handling -----------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Defines the llvm::VersionTuple class, which represents a version in
+/// the form major[.minor[.subminor]].
+///
+//===----------------------------------------------------------------------===//
+#ifndef LLVM_SUPPORT_VERSIONTUPLE_H
+#define LLVM_SUPPORT_VERSIONTUPLE_H
+
+#include "llvm/ADT/Optional.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/raw_ostream.h"
+#include <string>
+#include <tuple>
+
+namespace llvm {
+
+/// Represents a version number in the form major[.minor[.subminor[.build]]].
+class VersionTuple {
+  unsigned Major : 32;
+
+  unsigned Minor : 31;
+  unsigned HasMinor : 1;
+
+  unsigned Subminor : 31;
+  unsigned HasSubminor : 1;
+
+  unsigned Build : 31;
+  unsigned HasBuild : 1;
+
+public:
+  VersionTuple()
+      : Major(0), Minor(0), HasMinor(false), Subminor(0), HasSubminor(false),
+        Build(0), HasBuild(false) {}
+
+  explicit VersionTuple(unsigned Major)
+      : Major(Major), Minor(0), HasMinor(false), Subminor(0),
+        HasSubminor(false), Build(0), HasBuild(false) {}
+
+  explicit VersionTuple(unsigned Major, unsigned Minor)
+      : Major(Major), Minor(Minor), HasMinor(true), Subminor(0),
+        HasSubminor(false), Build(0), HasBuild(false) {}
+
+  explicit VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor)
+      : Major(Major), Minor(Minor), HasMinor(true), Subminor(Subminor),
+        HasSubminor(true), Build(0), HasBuild(false) {}
+
+  explicit VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor,
+                        unsigned Build)
+      : Major(Major), Minor(Minor), HasMinor(true), Subminor(Subminor),
+        HasSubminor(true), Build(Build), HasBuild(true) {}
+
+  /// Determine whether this version information is empty
+  /// (e.g., all version components are zero).
+  bool empty() const {
+    return Major == 0 && Minor == 0 && Subminor == 0 && Build == 0;
+  }
+
+  /// Retrieve the major version number.
+  unsigned getMajor() const { return Major; }
+
+  /// Retrieve the minor version number, if provided.
+  Optional<unsigned> getMinor() const {
+    if (!HasMinor)
+      return None;
+    return Minor;
+  }
+
+  /// Retrieve the subminor version number, if provided.
+  Optional<unsigned> getSubminor() const {
+    if (!HasSubminor)
+      return None;
+    return Subminor;
+  }
+
+  /// Retrieve the build version number, if provided.
+  Optional<unsigned> getBuild() const {
+    if (!HasBuild)
+      return None;
+    return Build;
+  }
+
+  /// Determine if two version numbers are equivalent. If not
+  /// provided, minor and subminor version numbers are considered to be zero.
+  friend bool operator==(const VersionTuple &X, const VersionTuple &Y) {
+    return X.Major == Y.Major && X.Minor == Y.Minor &&
+           X.Subminor == Y.Subminor && X.Build == Y.Build;
+  }
+
+  /// Determine if two version numbers are not equivalent.
+  ///
+  /// If not provided, minor and subminor version numbers are considered to be
+  /// zero.
+  friend bool operator!=(const VersionTuple &X, const VersionTuple &Y) {
+    return !(X == Y);
+  }
+
+  /// Determine whether one version number precedes another.
+  ///
+  /// If not provided, minor and subminor version numbers are considered to be
+  /// zero.
+  friend bool operator<(const VersionTuple &X, const VersionTuple &Y) {
+    return std::tie(X.Major, X.Minor, X.Subminor, X.Build) <
+           std::tie(Y.Major, Y.Minor, Y.Subminor, Y.Build);
+  }
+
+  /// Determine whether one version number follows another.
+  ///
+  /// If not provided, minor and subminor version numbers are considered to be
+  /// zero.
+  friend bool operator>(const VersionTuple &X, const VersionTuple &Y) {
+    return Y < X;
+  }
+
+  /// Determine whether one version number precedes or is
+  /// equivalent to another.
+  ///
+  /// If not provided, minor and subminor version numbers are considered to be
+  /// zero.
+  friend bool operator<=(const VersionTuple &X, const VersionTuple &Y) {
+    return !(Y < X);
+  }
+
+  /// Determine whether one version number follows or is
+  /// equivalent to another.
+  ///
+  /// If not provided, minor and subminor version numbers are considered to be
+  /// zero.
+  friend bool operator>=(const VersionTuple &X, const VersionTuple &Y) {
+    return !(X < Y);
+  }
+
+  /// Retrieve a string representation of the version number.
+  std::string getAsString() const;
+
+  /// Try to parse the given string as a version number.
+  /// \returns \c true if the string does not match the regular expression
+  ///   [0-9]+(\.[0-9]+){0,3}
+  bool tryParse(StringRef string);
+};
+
+/// Print a version number.
+raw_ostream &operator<<(raw_ostream &Out, const VersionTuple &V);
+
+} // end namespace llvm
+#endif // LLVM_SUPPORT_VERSIONTUPLE_H
diff --git a/linux-x64/clang/include/llvm/Support/Win64EH.h b/linux-x64/clang/include/llvm/Support/Win64EH.h
index f6c4927..928eb90 100644
--- a/linux-x64/clang/include/llvm/Support/Win64EH.h
+++ b/linux-x64/clang/include/llvm/Support/Win64EH.h
@@ -101,40 +101,40 @@
   // For more information please see MSDN at:
   // http://msdn.microsoft.com/en-us/library/ddssxxy8.aspx
 
-  /// \brief Return pointer to language specific data part of UnwindInfo.
+  /// Return pointer to language specific data part of UnwindInfo.
   void *getLanguageSpecificData() {
     return reinterpret_cast<void *>(&UnwindCodes[(NumCodes+1) & ~1]);
   }
 
-  /// \brief Return pointer to language specific data part of UnwindInfo.
+  /// Return pointer to language specific data part of UnwindInfo.
   const void *getLanguageSpecificData() const {
     return reinterpret_cast<const void *>(&UnwindCodes[(NumCodes + 1) & ~1]);
   }
 
-  /// \brief Return image-relative offset of language-specific exception handler.
+  /// Return image-relative offset of language-specific exception handler.
   uint32_t getLanguageSpecificHandlerOffset() const {
     return *reinterpret_cast<const support::ulittle32_t *>(
                getLanguageSpecificData());
   }
 
-  /// \brief Set image-relative offset of language-specific exception handler.
+  /// Set image-relative offset of language-specific exception handler.
   void setLanguageSpecificHandlerOffset(uint32_t offset) {
     *reinterpret_cast<support::ulittle32_t *>(getLanguageSpecificData()) =
         offset;
   }
 
-  /// \brief Return pointer to exception-specific data.
+  /// Return pointer to exception-specific data.
   void *getExceptionData() {
     return reinterpret_cast<void *>(reinterpret_cast<uint32_t *>(
                                                   getLanguageSpecificData())+1);
   }
 
-  /// \brief Return pointer to chained unwind info.
+  /// Return pointer to chained unwind info.
   RuntimeFunction *getChainedFunctionEntry() {
     return reinterpret_cast<RuntimeFunction *>(getLanguageSpecificData());
   }
 
-  /// \brief Return pointer to chained unwind info.
+  /// Return pointer to chained unwind info.
   const RuntimeFunction *getChainedFunctionEntry() const {
     return reinterpret_cast<const RuntimeFunction *>(getLanguageSpecificData());
   }
diff --git a/linux-x64/clang/include/llvm/Support/WithColor.h b/linux-x64/clang/include/llvm/Support/WithColor.h
index 39c9953..85fc5fa 100644
--- a/linux-x64/clang/include/llvm/Support/WithColor.h
+++ b/linux-x64/clang/include/llvm/Support/WithColor.h
@@ -10,8 +10,13 @@
 #ifndef LLVM_SUPPORT_WITHCOLOR_H
 #define LLVM_SUPPORT_WITHCOLOR_H
 
+#include "llvm/ADT/StringRef.h"
+#include "llvm/Support/CommandLine.h"
+
 namespace llvm {
 
+extern cl::OptionCategory ColorCategory;
+
 class raw_ostream;
 
 // Symbolic names for various syntax elements.
@@ -41,6 +46,20 @@
 
   raw_ostream &get() { return OS; }
   operator raw_ostream &() { return OS; }
+
+  /// Convenience method for printing "error: " to stderr.
+  static raw_ostream &error();
+  /// Convenience method for printing "warning: " to stderr.
+  static raw_ostream &warning();
+  /// Convenience method for printing "note: " to stderr.
+  static raw_ostream &note();
+
+  /// Convenience method for printing "error: " to the given stream.
+  static raw_ostream &error(raw_ostream &OS, StringRef Prefix = "");
+  /// Convenience method for printing "warning: " to the given stream.
+  static raw_ostream &warning(raw_ostream &OS, StringRef Prefix = "");
+  /// Convenience method for printing "note: " to the given stream.
+  static raw_ostream &note(raw_ostream &OS, StringRef Prefix = "");
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h b/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
index eeffb9c..185b357 100644
--- a/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
+++ b/linux-x64/clang/include/llvm/Support/X86DisassemblerDecoderCommon.h
@@ -93,6 +93,10 @@
                                         "operands change width")               \
   ENUM_ENTRY(IC_XS_OPSIZE,          3,  "requires an OPSIZE prefix, so "       \
                                         "operands change width")               \
+  ENUM_ENTRY(IC_XD_ADSIZE,          3,  "requires an ADSIZE prefix, so "       \
+                                        "operands change width")               \
+  ENUM_ENTRY(IC_XS_ADSIZE,          3,  "requires an ADSIZE prefix, so "       \
+                                        "operands change width")               \
   ENUM_ENTRY(IC_64BIT_REXW,         5,  "requires a REX.W prefix, so operands "\
                                         "change width; overrides IC_OPSIZE")   \
   ENUM_ENTRY(IC_64BIT_REXW_ADSIZE,  6,  "requires a REX.W prefix and 0x67 "    \
@@ -106,6 +110,8 @@
   ENUM_ENTRY(IC_64BIT_XS,           6,  "Just as meaningful as IC_64BIT_XD")   \
   ENUM_ENTRY(IC_64BIT_XD_OPSIZE,    3,  "Just as meaningful as IC_XD_OPSIZE")  \
   ENUM_ENTRY(IC_64BIT_XS_OPSIZE,    3,  "Just as meaningful as IC_XS_OPSIZE")  \
+  ENUM_ENTRY(IC_64BIT_XD_ADSIZE,    3,  "Just as meaningful as IC_XD_ADSIZE")  \
+  ENUM_ENTRY(IC_64BIT_XS_ADSIZE,    3,  "Just as meaningful as IC_XS_ADSIZE")  \
   ENUM_ENTRY(IC_64BIT_REXW_XS,      7,  "OPSIZE could mean a different "       \
                                         "opcode")                              \
   ENUM_ENTRY(IC_64BIT_REXW_XD,      7,  "Just as meaningful as "               \
@@ -446,7 +452,7 @@
 };
 #undef ENUM_ENTRY
 
-/// \brief The specification for how to extract and interpret one operand.
+/// The specification for how to extract and interpret one operand.
 struct OperandSpecifier {
   uint8_t encoding;
   uint8_t type;
diff --git a/linux-x64/clang/include/llvm/Support/X86TargetParser.def b/linux-x64/clang/include/llvm/Support/X86TargetParser.def
index 5c8c576..e4af065 100644
--- a/linux-x64/clang/include/llvm/Support/X86TargetParser.def
+++ b/linux-x64/clang/include/llvm/Support/X86TargetParser.def
@@ -65,6 +65,8 @@
 X86_CPU_TYPE                  ("k8",          AMD_K8)
 X86_CPU_TYPE                  ("k8-sse3",     AMD_K8SSE3)
 X86_CPU_TYPE                  ("goldmont",    INTEL_GOLDMONT)
+X86_CPU_TYPE                  ("goldmont-plus", INTEL_GOLDMONT_PLUS)
+X86_CPU_TYPE                  ("tremont",     INTEL_TREMONT)
 #undef X86_CPU_TYPE_COMPAT_WITH_ALIAS
 #undef X86_CPU_TYPE_COMPAT
 #undef X86_CPU_TYPE
diff --git a/linux-x64/clang/include/llvm/Support/YAMLParser.h b/linux-x64/clang/include/llvm/Support/YAMLParser.h
index 7333ad9..5b031a9 100644
--- a/linux-x64/clang/include/llvm/Support/YAMLParser.h
+++ b/linux-x64/clang/include/llvm/Support/YAMLParser.h
@@ -64,26 +64,26 @@
 class Scanner;
 struct Token;
 
-/// \brief Dump all the tokens in this stream to OS.
+/// Dump all the tokens in this stream to OS.
 /// \returns true if there was an error, false otherwise.
 bool dumpTokens(StringRef Input, raw_ostream &);
 
-/// \brief Scans all tokens in input without outputting anything. This is used
+/// Scans all tokens in input without outputting anything. This is used
 ///        for benchmarking the tokenizer.
 /// \returns true if there was an error, false otherwise.
 bool scanTokens(StringRef Input);
 
-/// \brief Escape \a Input for a double quoted scalar; if \p EscapePrintable
+/// Escape \a Input for a double quoted scalar; if \p EscapePrintable
 /// is true, all UTF8 sequences will be escaped, if \p EscapePrintable is
 /// false, those UTF8 sequences encoding printable unicode scalars will not be
 /// escaped, but emitted verbatim.
 std::string escape(StringRef Input, bool EscapePrintable = true);
 
-/// \brief This class represents a YAML stream potentially containing multiple
+/// This class represents a YAML stream potentially containing multiple
 ///        documents.
 class Stream {
 public:
-  /// \brief This keeps a reference to the string referenced by \p Input.
+  /// This keeps a reference to the string referenced by \p Input.
   Stream(StringRef Input, SourceMgr &, bool ShowColors = true,
          std::error_code *EC = nullptr);
 
@@ -110,7 +110,7 @@
   std::unique_ptr<Document> CurrentDoc;
 };
 
-/// \brief Abstract base class for all Nodes.
+/// Abstract base class for all Nodes.
 class Node {
   virtual void anchor();
 
@@ -145,15 +145,15 @@
 
   void operator delete(void *) noexcept = delete;
 
-  /// \brief Get the value of the anchor attached to this node. If it does not
+  /// Get the value of the anchor attached to this node. If it does not
   ///        have one, getAnchor().size() will be 0.
   StringRef getAnchor() const { return Anchor; }
 
-  /// \brief Get the tag as it was written in the document. This does not
+  /// Get the tag as it was written in the document. This does not
   ///   perform tag resolution.
   StringRef getRawTag() const { return Tag; }
 
-  /// \brief Get the verbatium tag for a given Node. This performs tag resoluton
+  /// Get the verbatium tag for a given Node. This performs tag resoluton
   ///   and substitution.
   std::string getVerbatimTag() const;
 
@@ -181,11 +181,11 @@
 private:
   unsigned int TypeID;
   StringRef Anchor;
-  /// \brief The tag as typed in the document.
+  /// The tag as typed in the document.
   StringRef Tag;
 };
 
-/// \brief A null value.
+/// A null value.
 ///
 /// Example:
 ///   !!null null
@@ -199,7 +199,7 @@
   static bool classof(const Node *N) { return N->getType() == NK_Null; }
 };
 
-/// \brief A scalar node is an opaque datum that can be presented as a
+/// A scalar node is an opaque datum that can be presented as a
 ///        series of zero or more Unicode scalar values.
 ///
 /// Example:
@@ -221,7 +221,7 @@
   // utf8).
   StringRef getRawValue() const { return Value; }
 
-  /// \brief Gets the value of this node as a StringRef.
+  /// Gets the value of this node as a StringRef.
   ///
   /// \param Storage is used to store the content of the returned StringRef iff
   ///        it requires any modification from how it appeared in the source.
@@ -240,7 +240,7 @@
                                  SmallVectorImpl<char> &Storage) const;
 };
 
-/// \brief A block scalar node is an opaque datum that can be presented as a
+/// A block scalar node is an opaque datum that can be presented as a
 ///        series of zero or more Unicode scalar values.
 ///
 /// Example:
@@ -259,7 +259,7 @@
     SourceRange = SMRange(Start, End);
   }
 
-  /// \brief Gets the value of this node as a StringRef.
+  /// Gets the value of this node as a StringRef.
   StringRef getValue() const { return Value; }
 
   static bool classof(const Node *N) {
@@ -270,7 +270,7 @@
   StringRef Value;
 };
 
-/// \brief A key and value pair. While not technically a Node under the YAML
+/// A key and value pair. While not technically a Node under the YAML
 ///        representation graph, it is easier to treat them this way.
 ///
 /// TODO: Consider making this not a child of Node.
@@ -284,14 +284,14 @@
   KeyValueNode(std::unique_ptr<Document> &D)
       : Node(NK_KeyValue, D, StringRef(), StringRef()) {}
 
-  /// \brief Parse and return the key.
+  /// Parse and return the key.
   ///
   /// This may be called multiple times.
   ///
   /// \returns The key, or nullptr if failed() == true.
   Node *getKey();
 
-  /// \brief Parse and return the value.
+  /// Parse and return the value.
   ///
   /// This may be called multiple times.
   ///
@@ -315,7 +315,7 @@
   Node *Value = nullptr;
 };
 
-/// \brief This is an iterator abstraction over YAML collections shared by both
+/// This is an iterator abstraction over YAML collections shared by both
 ///        sequences and maps.
 ///
 /// BaseT must have a ValueT* member named CurrentEntry and a member function
@@ -395,7 +395,7 @@
       i->skip();
 }
 
-/// \brief Represents a YAML map created from either a block map for a flow map.
+/// Represents a YAML map created from either a block map for a flow map.
 ///
 /// This parses the YAML stream as increment() is called.
 ///
@@ -442,7 +442,7 @@
   void increment();
 };
 
-/// \brief Represents a YAML sequence created from either a block sequence for a
+/// Represents a YAML sequence created from either a block sequence for a
 ///        flow sequence.
 ///
 /// This parses the YAML stream as increment() is called.
@@ -498,7 +498,7 @@
   Node *CurrentEntry = nullptr;
 };
 
-/// \brief Represents an alias to a Node with an anchor.
+/// Represents an alias to a Node with an anchor.
 ///
 /// Example:
 ///   *AnchorName
@@ -518,20 +518,20 @@
   StringRef Name;
 };
 
-/// \brief A YAML Stream is a sequence of Documents. A document contains a root
+/// A YAML Stream is a sequence of Documents. A document contains a root
 ///        node.
 class Document {
 public:
   Document(Stream &ParentStream);
 
-  /// \brief Root for parsing a node. Returns a single node.
+  /// Root for parsing a node. Returns a single node.
   Node *parseBlockNode();
 
-  /// \brief Finish parsing the current document and return true if there are
+  /// Finish parsing the current document and return true if there are
   ///        more. Return false otherwise.
   bool skip();
 
-  /// \brief Parse and return the root level node.
+  /// Parse and return the root level node.
   Node *getRoot() {
     if (Root)
       return Root;
@@ -544,18 +544,18 @@
   friend class Node;
   friend class document_iterator;
 
-  /// \brief Stream to read tokens from.
+  /// Stream to read tokens from.
   Stream &stream;
 
-  /// \brief Used to allocate nodes to. All are destroyed without calling their
+  /// Used to allocate nodes to. All are destroyed without calling their
   ///        destructor when the document is destroyed.
   BumpPtrAllocator NodeAllocator;
 
-  /// \brief The root node. Used to support skipping a partially parsed
+  /// The root node. Used to support skipping a partially parsed
   ///        document.
   Node *Root;
 
-  /// \brief Maps tag prefixes to their expansion.
+  /// Maps tag prefixes to their expansion.
   std::map<StringRef, StringRef> TagMap;
 
   Token &peekNext();
@@ -563,20 +563,20 @@
   void setError(const Twine &Message, Token &Location) const;
   bool failed() const;
 
-  /// \brief Parse %BLAH directives and return true if any were encountered.
+  /// Parse %BLAH directives and return true if any were encountered.
   bool parseDirectives();
 
-  /// \brief Parse %YAML
+  /// Parse %YAML
   void parseYAMLDirective();
 
-  /// \brief Parse %TAG
+  /// Parse %TAG
   void parseTAGDirective();
 
-  /// \brief Consume the next token and error if it is not \a TK.
+  /// Consume the next token and error if it is not \a TK.
   bool expectToken(int TK);
 };
 
-/// \brief Iterator abstraction for Documents over a Stream.
+/// Iterator abstraction for Documents over a Stream.
 class document_iterator {
 public:
   document_iterator() = default;
diff --git a/linux-x64/clang/include/llvm/Support/YAMLTraits.h b/linux-x64/clang/include/llvm/Support/YAMLTraits.h
index b874ad5..4b8c4e9 100644
--- a/linux-x64/clang/include/llvm/Support/YAMLTraits.h
+++ b/linux-x64/clang/include/llvm/Support/YAMLTraits.h
@@ -540,11 +540,14 @@
     case '.':
     case ',':
     case ' ':
-    // TAB (0x9), LF (0xA), CR (0xD) and NEL (0x85) are allowed.
+    // TAB (0x9) is allowed in unquoted strings.
     case 0x9:
+      continue;
+    // LF(0xA) and CR(0xD) may delimit values and so require at least single
+    // quotes.
     case 0xA:
     case 0xD:
-    case 0x85:
+      MaxQuotingNeeded = QuotingType::Single;
       continue;
     // DEL (0x7F) are excluded from the allowed character range.
     case 0x7F:
@@ -1311,7 +1314,7 @@
   Output(raw_ostream &, void *Ctxt = nullptr, int WrapColumn = 70);
   ~Output() override;
 
-  /// \brief Set whether or not to output optional values which are equal
+  /// Set whether or not to output optional values which are equal
   /// to the default value.  By default, when outputting if you attempt
   /// to write a value that is equal to the default, the value gets ignored.
   /// Sometimes, it is useful to be able to see these in the resulting YAML
diff --git a/linux-x64/clang/include/llvm/Support/raw_ostream.h b/linux-x64/clang/include/llvm/Support/raw_ostream.h
index d11f5a8..b9ea9b5 100644
--- a/linux-x64/clang/include/llvm/Support/raw_ostream.h
+++ b/linux-x64/clang/include/llvm/Support/raw_ostream.h
@@ -33,7 +33,9 @@
 
 namespace sys {
 namespace fs {
+enum FileAccess : unsigned;
 enum OpenFlags : unsigned;
+enum CreationDisposition : unsigned;
 } // end namespace fs
 } // end namespace sys
 
@@ -218,7 +220,7 @@
   raw_ostream &write_uuid(const uuid_t UUID);
 
   /// Output \p Str, turning '\\', '\t', '\n', '"', and anything that doesn't
-  /// satisfy std::isprint into an escape sequence.
+  /// satisfy llvm::isPrint into an escape sequence.
   raw_ostream &write_escaped(StringRef Str, bool UseHexEscapes = false);
 
   raw_ostream &write(unsigned char C);
@@ -242,6 +244,9 @@
   /// indent - Insert 'NumSpaces' spaces.
   raw_ostream &indent(unsigned NumSpaces);
 
+  /// write_zeros - Insert 'NumZeros' nulls.
+  raw_ostream &write_zeros(unsigned NumZeros);
+
   /// Changes the foreground color of text that will be output from this point
   /// forward.
   /// @param Color ANSI color to use, the special SAVEDCOLOR can be used to
@@ -293,9 +298,6 @@
   /// \invariant { Size > 0 }
   virtual void write_impl(const char *Ptr, size_t Size) = 0;
 
-  // An out of line virtual method to provide a home for the class vtable.
-  virtual void handle();
-
   /// Return the current position within the stream, not counting the bytes
   /// currently in the buffer.
   virtual uint64_t current_pos() const = 0;
@@ -329,6 +331,8 @@
   /// Copy data into the buffer. Size must not be greater than the number of
   /// unused bytes in the buffer.
   void copy_to_buffer(const char *Ptr, size_t Size);
+
+  virtual void anchor();
 };
 
 /// An abstract base class for streams implementations that also support a
@@ -336,6 +340,7 @@
 /// but needs to patch in a header that needs to know the output size.
 class raw_pwrite_stream : public raw_ostream {
   virtual void pwrite_impl(const char *Ptr, size_t Size, uint64_t Offset) = 0;
+  void anchor() override;
 
 public:
   explicit raw_pwrite_stream(bool Unbuffered = false)
@@ -383,6 +388,8 @@
   /// Set the flag indicating that an output error has been encountered.
   void error_detected(std::error_code EC) { this->EC = EC; }
 
+  void anchor() override;
+
 public:
   /// Open the specified file for writing. If an error occurs, information
   /// about the error is put into EC, and the stream should be immediately
@@ -392,7 +399,15 @@
   /// As a special case, if Filename is "-", then the stream will use
   /// STDOUT_FILENO instead of opening a file. This will not close the stdout
   /// descriptor.
+  raw_fd_ostream(StringRef Filename, std::error_code &EC);
   raw_fd_ostream(StringRef Filename, std::error_code &EC,
+                 sys::fs::CreationDisposition Disp);
+  raw_fd_ostream(StringRef Filename, std::error_code &EC,
+                 sys::fs::FileAccess Access);
+  raw_fd_ostream(StringRef Filename, std::error_code &EC,
+                 sys::fs::OpenFlags Flags);
+  raw_fd_ostream(StringRef Filename, std::error_code &EC,
+                 sys::fs::CreationDisposition Disp, sys::fs::FileAccess Access,
                  sys::fs::OpenFlags Flags);
 
   /// FD is the file descriptor that this writes to.  If ShouldClose is true,
diff --git a/linux-x64/clang/include/llvm/Support/type_traits.h b/linux-x64/clang/include/llvm/Support/type_traits.h
index cc08783..55d84f1 100644
--- a/linux-x64/clang/include/llvm/Support/type_traits.h
+++ b/linux-x64/clang/include/llvm/Support/type_traits.h
@@ -54,7 +54,7 @@
   static const bool value = isPodLike<T>::value && isPodLike<U>::value;
 };
 
-/// \brief Metafunction that determines whether the given type is either an
+/// Metafunction that determines whether the given type is either an
 /// integral type or an enumeration type, including enum classes.
 ///
 /// Note that this accepts potentially more integral types than is_integral
@@ -73,7 +73,7 @@
        std::is_convertible<UnderlyingT, unsigned long long>::value);
 };
 
-/// \brief If T is a pointer, just return it. If it is not, return T&.
+/// If T is a pointer, just return it. If it is not, return T&.
 template<typename T, typename Enable = void>
 struct add_lvalue_reference_if_not_pointer { using type = T &; };
 
@@ -83,7 +83,7 @@
   using type = T;
 };
 
-/// \brief If T is a pointer to X, return a pointer to const X. If it is not,
+/// If T is a pointer to X, return a pointer to const X. If it is not,
 /// return const T.
 template<typename T, typename Enable = void>
 struct add_const_past_pointer { using type = const T; };
@@ -104,12 +104,51 @@
   using type = typename add_const_past_pointer<T>::type;
 };
 
+namespace detail {
+/// Internal utility to detect trivial copy construction.
+template<typename T> union copy_construction_triviality_helper {
+    T t;
+    copy_construction_triviality_helper() = default;
+    copy_construction_triviality_helper(const copy_construction_triviality_helper&) = default;
+    ~copy_construction_triviality_helper() = default;
+};
+/// Internal utility to detect trivial move construction.
+template<typename T> union move_construction_triviality_helper {
+    T t;
+    move_construction_triviality_helper() = default;
+    move_construction_triviality_helper(move_construction_triviality_helper&&) = default;
+    ~move_construction_triviality_helper() = default;
+};
+} // end namespace detail
+
+/// An implementation of `std::is_trivially_copy_constructible` since we have
+/// users with STLs that don't yet include it.
+template <typename T>
+struct is_trivially_copy_constructible
+    : std::is_copy_constructible<
+          ::llvm::detail::copy_construction_triviality_helper<T>> {};
+template <typename T>
+struct is_trivially_copy_constructible<T &> : std::true_type {};
+template <typename T>
+struct is_trivially_copy_constructible<T &&> : std::false_type {};
+
+/// An implementation of `std::is_trivially_move_constructible` since we have
+/// users with STLs that don't yet include it.
+template <typename T>
+struct is_trivially_move_constructible
+    : std::is_move_constructible<
+          ::llvm::detail::move_construction_triviality_helper<T>> {};
+template <typename T>
+struct is_trivially_move_constructible<T &> : std::true_type {};
+template <typename T>
+struct is_trivially_move_constructible<T &&> : std::true_type {};
+
 } // end namespace llvm
 
 // If the compiler supports detecting whether a class is final, define
 // an LLVM_IS_FINAL macro. If it cannot be defined properly, this
 // macro will be left undefined.
-#if __cplusplus >= 201402L
+#if __cplusplus >= 201402L || defined(_MSC_VER)
 #define LLVM_IS_FINAL(Ty) std::is_final<Ty>()
 #elif __has_feature(is_final) || LLVM_GNUC_PREREQ(4, 7, 0)
 #define LLVM_IS_FINAL(Ty) __is_final(Ty)
diff --git a/linux-x64/clang/include/llvm/Support/xxhash.h b/linux-x64/clang/include/llvm/Support/xxhash.h
index f7ca460..6fd67ff 100644
--- a/linux-x64/clang/include/llvm/Support/xxhash.h
+++ b/linux-x64/clang/include/llvm/Support/xxhash.h
@@ -38,10 +38,12 @@
 #ifndef LLVM_SUPPORT_XXHASH_H
 #define LLVM_SUPPORT_XXHASH_H
 
+#include "llvm/ADT/ArrayRef.h"
 #include "llvm/ADT/StringRef.h"
 
 namespace llvm {
 uint64_t xxHash64(llvm::StringRef Data);
+uint64_t xxHash64(llvm::ArrayRef<uint8_t> Data);
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/TableGen/Record.h b/linux-x64/clang/include/llvm/TableGen/Record.h
index 3b2ebaa..e022bc8 100644
--- a/linux-x64/clang/include/llvm/TableGen/Record.h
+++ b/linux-x64/clang/include/llvm/TableGen/Record.h
@@ -54,7 +54,7 @@
 
 class RecTy {
 public:
-  /// \brief Subclass discriminator (for dyn_cast<> et al.)
+  /// Subclass discriminator (for dyn_cast<> et al.)
   enum RecTyKind {
     BitRecTyKind,
     BitsRecTyKind,
@@ -287,7 +287,7 @@
 
 class Init {
 protected:
-  /// \brief Discriminator enum (for isa<>, dyn_cast<>, et al.)
+  /// Discriminator enum (for isa<>, dyn_cast<>, et al.)
   ///
   /// This enum is laid out by a preorder traversal of the inheritance
   /// hierarchy, and does not contain an entry for abstract classes, as per
@@ -1357,30 +1357,31 @@
   unsigned ID;
 
   bool IsAnonymous;
+  bool IsClass;
 
-  void init();
   void checkName();
 
 public:
   // Constructs a record.
   explicit Record(Init *N, ArrayRef<SMLoc> locs, RecordKeeper &records,
-                  bool Anonymous = false) :
-    Name(N), Locs(locs.begin(), locs.end()), TrackedRecords(records),
-    ID(LastID++), IsAnonymous(Anonymous) {
-    init();
+                  bool Anonymous = false, bool Class = false)
+    : Name(N), Locs(locs.begin(), locs.end()), TrackedRecords(records),
+      ID(LastID++), IsAnonymous(Anonymous), IsClass(Class) {
+    checkName();
   }
 
-  explicit Record(StringRef N, ArrayRef<SMLoc> locs, RecordKeeper &records)
-      : Record(StringInit::get(N), locs, records) {}
+  explicit Record(StringRef N, ArrayRef<SMLoc> locs, RecordKeeper &records,
+                  bool Class = false)
+      : Record(StringInit::get(N), locs, records, false, Class) {}
 
   // When copy-constructing a Record, we must still guarantee a globally unique
   // ID number.  Don't copy TheInit either since it's owned by the original
   // record. All other fields can be copied normally.
-  Record(const Record &O) :
-    Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs),
-    Values(O.Values), SuperClasses(O.SuperClasses),
-    TrackedRecords(O.TrackedRecords), ID(LastID++),
-    IsAnonymous(O.IsAnonymous) { }
+  Record(const Record &O)
+    : Name(O.Name), Locs(O.Locs), TemplateArgs(O.TemplateArgs),
+      Values(O.Values), SuperClasses(O.SuperClasses),
+      TrackedRecords(O.TrackedRecords), ID(LastID++),
+      IsAnonymous(O.IsAnonymous), IsClass(O.IsClass) { }
 
   static unsigned getNewUID() { return LastID++; }
 
@@ -1407,6 +1408,8 @@
   /// get the corresponding DefInit.
   DefInit *getDefInit();
 
+  bool isClass() const { return IsClass; }
+
   ArrayRef<Init *> getTemplateArgs() const {
     return TemplateArgs;
   }
@@ -1452,13 +1455,6 @@
   void addValue(const RecordVal &RV) {
     assert(getValue(RV.getNameInit()) == nullptr && "Value already added!");
     Values.push_back(RV);
-    if (Values.size() > 1)
-      // Keep NAME at the end of the list.  It makes record dumps a
-      // bit prettier and allows TableGen tests to be written more
-      // naturally.  Tests can use CHECK-NEXT to look for Record
-      // fields they expect to see after a def.  They can't do that if
-      // NAME is the first Record field.
-      std::swap(Values[Values.size() - 2], Values[Values.size() - 1]);
   }
 
   void removeValue(Init *Name) {
@@ -1600,17 +1596,6 @@
 
 raw_ostream &operator<<(raw_ostream &OS, const Record &R);
 
-struct MultiClass {
-  Record Rec;  // Placeholder for template args and Name.
-  using RecordVector = std::vector<std::unique_ptr<Record>>;
-  RecordVector DefPrototypes;
-
-  void dump() const;
-
-  MultiClass(StringRef Name, SMLoc Loc, RecordKeeper &Records) :
-    Rec(Name, Loc, Records) {}
-};
-
 class RecordKeeper {
   friend class RecordRecTy;
   using RecordMap = std::map<std::string, std::unique_ptr<Record>>;
@@ -1780,11 +1765,6 @@
 
 raw_ostream &operator<<(raw_ostream &OS, const RecordKeeper &RK);
 
-/// Return an Init with a qualifier prefix referring
-/// to CurRec's name.
-Init *QualifyName(Record &CurRec, MultiClass *CurMultiClass,
-                  Init *Name, StringRef Scoper);
-
 //===----------------------------------------------------------------------===//
 //  Resolvers
 //===----------------------------------------------------------------------===//
@@ -1905,6 +1885,23 @@
   Init *resolve(Init *VarName) override;
 };
 
+/// Do not resolve anything, but keep track of whether a given variable was
+/// referenced.
+class HasReferenceResolver final : public Resolver {
+  Init *VarNameToTrack;
+  bool Found = false;
+
+public:
+  explicit HasReferenceResolver(Init *VarNameToTrack)
+      : Resolver(nullptr), VarNameToTrack(VarNameToTrack) {}
+
+  bool found() const { return Found; }
+
+  Init *resolve(Init *VarName) override;
+};
+
+void EmitJSON(RecordKeeper &RK, raw_ostream &OS);
+
 } // end namespace llvm
 
 #endif // LLVM_TABLEGEN_RECORD_H
diff --git a/linux-x64/clang/include/llvm/TableGen/SearchableTable.td b/linux-x64/clang/include/llvm/TableGen/SearchableTable.td
index 12aaf60..1089d36 100644
--- a/linux-x64/clang/include/llvm/TableGen/SearchableTable.td
+++ b/linux-x64/clang/include/llvm/TableGen/SearchableTable.td
@@ -8,32 +8,127 @@
 //===----------------------------------------------------------------------===//
 //
 // This file defines the key top-level classes needed to produce a reasonably
-// generic table that can be binary-searched via int and string entries.
+// generic table that can be binary-searched. Three types of objects can be
+// defined using the classes in this file:
 //
-// Each table must instantiate "Mappingkind", listing the fields that should be
-// included and fields that shoould be searchable. Only two kinds of fields are
-// searchable at the moment: "strings" (which are compared case-insensitively),
-// and "bits".
+// 1. (Generic) Enums. By instantiating the GenericEnum class once, an enum with
+// the name of the def is generated. It is guarded by the preprocessor define
+// GET_name_DECL, where name is the name of the def.
 //
-// For each "MappingKind" the generated header will create GET_MAPPINGKIND_DECL
-// and GET_MAPPINGKIND_IMPL guards.
+// 2. (Generic) Tables and search indices. By instantiating the GenericTable
+// class once, a table with the name of the instantiating def is generated and
+// guarded by the GET_name_IMPL preprocessor guard.
 //
-// Inside the DECL guard will be a set of function declarations:
-// "lookup{InstanceClass}By{SearchableField}", returning "const {InstanceClass}
-// *" and accepting either a StringRef or a uintN_t. Additionally, if
-// EnumNameField is still defined, there will be an "enum {InstanceClass}Values"
-// allowing C++ code to reference either the primary data table's entries (if
-// EnumValueField is not defined) or some other field (e.g. encoding) if it is.
-//
-// Inside the IMPL guard will be a primary data table "{InstanceClass}sList" and
-// as many searchable indexes as requested
-// ("{InstanceClass}sBy{SearchableField}"). Additionally implementations of the
-// lookup function will be provided.
+// Both a primary key and additional secondary keys / search indices can also
+// be defined, which result in the generation of lookup functions. Their
+// declarations and definitions are all guarded by GET_name_DECL and
+// GET_name_IMPL, respectively, where name is the name of the underlying table.
 //
 // See AArch64SystemOperands.td and its generated header for example uses.
 //
 //===----------------------------------------------------------------------===//
 
+// Define a record derived from this class to generate a generic enum.
+//
+// The name of the record is used as the type name of the C++ enum.
+class GenericEnum {
+  // Name of a TableGen class. The enum will have one entry for each record
+  // that derives from that class.
+  string FilterClass;
+
+  // (Optional) Name of a field that is present in all collected records and
+  // contains the name of enum entries.
+  //
+  // If NameField is not set, the record names will be used instead.
+  string NameField;
+
+  // (Optional) Name of a field that is present in all collected records and
+  // contains the numerical value of enum entries.
+  //
+  // If ValueField is not set, enum values will be assigned automatically,
+  // starting at 0, according to a lexicographical sort of the entry names.
+  string ValueField;
+}
+
+// Define a record derived from this class to generate a generic table. This
+// table can have a searchable primary key, and it can also be referenced by
+// external search indices.
+//
+// The name of the record is used as the name of the global primary array of
+// entries of the table in C++.
+class GenericTable {
+  // Name of a class. The table will have one entry for each record that
+  // derives from that class.
+  string FilterClass;
+
+  // Name of the C++ struct/class type that holds table entries. The
+  // declaration of this type is not generated automatically.
+  string CppTypeName = FilterClass;
+
+  // List of the names of fields of collected records that contain the data for
+  // table entries, in the order that is used for initialization in C++.
+  //
+  // For each field of the table named XXX, TableGen will look for a value
+  // called TypeOf_XXX and use that as a more detailed description of the
+  // type of the field if present. This is required for fields whose type
+  // cannot be deduced automatically, such as enum fields. For example:
+  //
+  //   def MyEnum : GenericEnum {
+  //     let FilterClass = "MyEnum";
+  //     ...
+  //   }
+  //
+  //   class MyTableEntry {
+  //     MyEnum V;
+  //     ...
+  //   }
+  //
+  //   def MyTable : GenericTable {
+  //     let FilterClass = "MyTableEntry";
+  //     let Fields = ["V", ...];
+  //     GenericEnum TypeOf_V = MyEnum;
+  //   }
+  //
+  // Fields of type bit, bits<N>, string, Intrinsic, and Instruction (or
+  // derived classes of those) are supported natively.
+  //
+  // Additionally, fields of type `code` can appear, where the value is used
+  // verbatim as an initializer. However, these fields cannot be used as
+  // search keys.
+  list<string> Fields;
+
+  // (Optional) List of fields that make up the primary key.
+  list<string> PrimaryKey;
+
+  // (Optional) Name of the primary key search function.
+  string PrimaryKeyName;
+
+  // See SearchIndex.EarlyOut
+  bit PrimaryKeyEarlyOut = 0;
+}
+
+// Define a record derived from this class to generate an additional search
+// index for a generic table that has been defined earlier.
+//
+// The name of the record will be used as the name of the C++ lookup function.
+class SearchIndex {
+  // Table that this search index refers to.
+  GenericTable Table;
+
+  // List of fields that make up the key.
+  list<string> Key;
+
+  // If true, the lookup function will check the first field of the key against
+  // the minimum and maximum values in the index before entering the binary
+  // search. This is convenient for tables that add extended data for a subset
+  // of a larger enum-based space, e.g. extended data about a subset of
+  // instructions.
+  //
+  // Can only be used when the first field is an integral (non-string) type.
+  bit EarlyOut = 0;
+}
+
+// Legacy table type with integrated enum.
 class SearchableTable {
   list<string> SearchableFields;
   string EnumNameField = "Name";
diff --git a/linux-x64/clang/include/llvm/Target/GenericOpcodes.td b/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
index 1af6a9a..90c121d 100644
--- a/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
+++ b/linux-x64/clang/include/llvm/Target/GenericOpcodes.td
@@ -120,12 +120,54 @@
   let mayStore = 1;
 }
 
+def G_CTLZ : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src);
+  let hasSideEffects = 0;
+}
+
+def G_CTLZ_ZERO_UNDEF : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src);
+  let hasSideEffects = 0;
+}
+
+def G_CTTZ : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src);
+  let hasSideEffects = 0;
+}
+
+def G_CTTZ_ZERO_UNDEF : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src);
+  let hasSideEffects = 0;
+}
+
+def G_CTPOP : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type0:$src);
+  let hasSideEffects = 0;
+}
+
 def G_BSWAP : GenericInstruction {
   let OutOperandList = (outs type0:$dst);
   let InOperandList = (ins type0:$src);
   let hasSideEffects = 0;
 }
 
+def G_ADDRSPACE_CAST : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins type1:$src);
+  let hasSideEffects = 0;
+}
+
+def G_BLOCK_ADDR : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins unknown:$ba);
+  let hasSideEffects = 0;
+}
+
 //------------------------------------------------------------------------------
 // Binary ops.
 //------------------------------------------------------------------------------
@@ -482,6 +524,22 @@
   let mayLoad = 1;
 }
 
+// Generic sign-extended load. Expects a MachineMemOperand in addition to explicit operands.
+def G_SEXTLOAD : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins ptype1:$addr);
+  let hasSideEffects = 0;
+  let mayLoad = 1;
+}
+
+// Generic zero-extended load. Expects a MachineMemOperand in addition to explicit operands.
+def G_ZEXTLOAD : GenericInstruction {
+  let OutOperandList = (outs type0:$dst);
+  let InOperandList = (ins ptype1:$addr);
+  let hasSideEffects = 0;
+  let mayLoad = 1;
+}
+
 // Generic store. Expects a MachineMemOperand in addition to explicit operands.
 def G_STORE : GenericInstruction {
   let OutOperandList = (outs);
diff --git a/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td b/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
index 0d3b4a4..d487759 100644
--- a/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
+++ b/linux-x64/clang/include/llvm/Target/GlobalISel/SelectionDAGCompat.td
@@ -28,6 +28,13 @@
   // (ISD::LOAD, ISD::ATOMIC_LOAD, ISD::STORE, ISD::ATOMIC_STORE) but GlobalISel
   // stores this information in the MachineMemoryOperand.
   bit CheckMMOIsNonAtomic = 0;
+
+  // SelectionDAG has one node for all loads and uses predicates to
+  // differentiate them. GlobalISel on the other hand uses separate opcodes.
+  // When this is true, the resulting opcode is G_LOAD/G_SEXTLOAD/G_ZEXTLOAD
+  // depending on the predicates on the node.
+  Instruction IfSignExtend = ?;
+  Instruction IfZeroExtend = ?;
 }
 
 // These are defined in the same order as the G_* instructions.
@@ -80,11 +87,15 @@
 // Broadly speaking G_LOAD is equivalent to ISD::LOAD but there are some
 // complications that tablegen must take care of. For example, Predicates such
 // as isSignExtLoad require that this is not a perfect 1:1 mapping since a
-// sign-extending load is (G_SEXT (G_LOAD x)) in GlobalISel. Additionally,
+// sign-extending load is (G_SEXTLOAD x) in GlobalISel. Additionally,
 // G_LOAD handles both atomic and non-atomic loads where as SelectionDAG had
 // separate nodes for them. This GINodeEquiv maps the non-atomic loads to
 // G_LOAD with a non-atomic MachineMemOperand.
-def : GINodeEquiv<G_LOAD, ld> { let CheckMMOIsNonAtomic = 1; }
+def : GINodeEquiv<G_LOAD, ld> {
+  let CheckMMOIsNonAtomic = 1;
+  let IfSignExtend = G_SEXTLOAD;
+  let IfZeroExtend = G_ZEXTLOAD;
+}
 // Broadly speaking G_STORE is equivalent to ISD::STORE but there are some
 // complications that tablegen must take care of. For example, predicates such
 // as isTruncStore require that this is not a perfect 1:1 mapping since a
diff --git a/linux-x64/clang/include/llvm/Target/Target.td b/linux-x64/clang/include/llvm/Target/Target.td
index 0a09e9b..b746505 100644
--- a/linux-x64/clang/include/llvm/Target/Target.td
+++ b/linux-x64/clang/include/llvm/Target/Target.td
@@ -384,6 +384,11 @@
 }
 
 //===----------------------------------------------------------------------===//
+// Pull in the common support for MCPredicate (portable scheduling predicates).
+//
+include "llvm/Target/TargetInstrPredicate.td"
+
+//===----------------------------------------------------------------------===//
 // Pull in the common support for scheduling
 //
 include "llvm/Target/TargetSchedule.td"
@@ -437,11 +442,13 @@
   bit isIndirectBranch = 0; // Is this instruction an indirect branch?
   bit isCompare    = 0;     // Is this instruction a comparison instruction?
   bit isMoveImm    = 0;     // Is this instruction a move immediate instruction?
+  bit isMoveReg    = 0;     // Is this instruction a move register instruction?
   bit isBitcast    = 0;     // Is this instruction a bitcast instruction?
   bit isSelect     = 0;     // Is this instruction a select instruction?
   bit isBarrier    = 0;     // Can control flow fall through this instruction?
   bit isCall       = 0;     // Is this instruction a call instruction?
   bit isAdd        = 0;     // Is this instruction an add instruction?
+  bit isTrap       = 0;     // Is this instruction a trap instruction?
   bit canFoldAsLoad = 0;    // Can this be folded as a simple memory operand?
   bit mayLoad      = ?;     // Is it possible for this inst to read memory?
   bit mayStore     = ?;     // Is it possible for this inst to write memory?
@@ -568,6 +575,12 @@
   /// can be queried via the getNamedOperandIdx() function which is generated
   /// by TableGen.
   bit UseNamedOperandTable = 0;
+
+  /// Should FastISel ignore this instruction. For certain ISAs, they have
+  /// instructions which map to the same ISD Opcode, value type operands and
+  /// instruction selection predicates. FastISel cannot handle such cases, but
+  /// SelectionDAG can.
+  bit FastISelShouldIgnore = 0;
 }
 
 /// PseudoInstExpansion - Expansion information for a pseudo-instruction.
@@ -997,6 +1010,12 @@
   let AsmString = "DBG_VALUE";
   let hasSideEffects = 0;
 }
+def DBG_LABEL : StandardPseudoInstruction {
+  let OutOperandList = (outs);
+  let InOperandList = (ins unknown:$label);
+  let AsmString = "DBG_LABEL";
+  let hasSideEffects = 0;
+}
 def REG_SEQUENCE : StandardPseudoInstruction {
   let OutOperandList = (outs unknown:$dst);
   let InOperandList = (ins unknown:$supersrc, variable_ops);
@@ -1099,7 +1118,7 @@
   let hasSideEffects = 0;
 }
 def PATCHABLE_RET : StandardPseudoInstruction {
-  let OutOperandList = (outs unknown:$dst);
+  let OutOperandList = (outs);
   let InOperandList = (ins variable_ops);
   let AsmString = "# XRay Function Patchable RET.";
   let usesCustomInserter = 1;
@@ -1116,7 +1135,7 @@
   let isReturn = 0; // Original return instruction will follow
 }
 def PATCHABLE_TAIL_CALL : StandardPseudoInstruction {
-  let OutOperandList = (outs unknown:$dst);
+  let OutOperandList = (outs);
   let InOperandList = (ins variable_ops);
   let AsmString = "# XRay Tail Call Exit.";
   let usesCustomInserter = 1;
@@ -1133,6 +1152,16 @@
   let mayStore = 1;
   let hasSideEffects = 1;
 }
+def PATCHABLE_TYPED_EVENT_CALL : StandardPseudoInstruction {
+  let OutOperandList = (outs);
+  let InOperandList = (ins i16imm:$type, ptr_rc:$event, i32imm:$size);
+  let AsmString = "# XRay Typed Event Log.";
+  let usesCustomInserter = 1;
+  let isCall = 1;
+  let mayLoad = 1;
+  let mayStore = 1;
+  let hasSideEffects = 1;
+}
 def FENTRY_CALL : StandardPseudoInstruction {
   let OutOperandList = (outs unknown:$dst);
   let InOperandList = (ins variable_ops);
@@ -1298,7 +1327,7 @@
 /// InstAlias - This defines an alternate assembly syntax that is allowed to
 /// match an instruction that has a different (more canonical) assembly
 /// representation.
-class InstAlias<string Asm, dag Result, int Emit = 1> {
+class InstAlias<string Asm, dag Result, int Emit = 1, string VariantName = ""> {
   string AsmString = Asm;      // The .s format to match the instruction with.
   dag ResultInst = Result;     // The MCInst to generate.
 
@@ -1322,7 +1351,7 @@
 
   // Assembler variant name to use for this alias. If not specified then
   // assembler variants will be determined based on AsmString
-  string AsmVariantName = "";
+  string AsmVariantName = VariantName;
 }
 
 //===----------------------------------------------------------------------===//
diff --git a/linux-x64/clang/include/llvm/Target/TargetCallingConv.td b/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
index 3d8639d..95d2b42 100644
--- a/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
+++ b/linux-x64/clang/include/llvm/Target/TargetCallingConv.td
@@ -1,10 +1,10 @@
 //===- TargetCallingConv.td - Target Calling Conventions ---*- tablegen -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
 // This file is distributed under the University of Illinois Open Source
 // License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
 // This file defines the target-independent interfaces with which targets
diff --git a/linux-x64/clang/include/llvm/Target/TargetInstrPredicate.td b/linux-x64/clang/include/llvm/Target/TargetInstrPredicate.td
new file mode 100644
index 0000000..8925e4b
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Target/TargetInstrPredicate.td
@@ -0,0 +1,227 @@
+//===- TargetInstrPredicate.td - ---------------------------*- tablegen -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines MCInstPredicate classes and its subclasses.
+//
+// MCInstPredicate is used to describe constraints on the opcode/operand(s) of
+// an instruction. Each MCInstPredicate class has a well-known semantic, and it
+// is used by a PredicateExpander to generate code for MachineInstr and/or
+// MCInst.
+//
+// MCInstPredicate definitions can be used to construct MCSchedPredicate
+// definitions. An MCSchedPredicate can be used in place of a SchedPredicate
+// when defining SchedReadVariant and SchedWriteVariant used by a processor
+// scheduling model.
+//
+// Here is an example of MCInstPredicate definition:
+//
+// def MCInstPredicateExample : CheckAll<[
+//    CheckOpcode<[BLR]>,
+//    CheckIsRegOperand<0>,
+//    CheckNot<CheckRegOperand<0, LR>>]>;
+//
+// Predicate `MCInstPredicateExample` checks that the machine instruction in
+// input is a BLR, and that operand at index 0 is register `LR`.
+//
+// That predicate could be used to rewrite the following definition (from
+// AArch64SchedExynosM3.td):
+//
+// def M3BranchLinkFastPred  : SchedPredicate<[{
+//    MI->getOpcode() == AArch64::BLR &&
+//    MI->getOperand(0).isReg() &&
+//    MI->getOperand(0).getReg() != AArch64::LR}]>;
+//
+// MCInstPredicate definitions are used to construct MCSchedPredicate (see the
+// definition of class MCSchedPredicate in llvm/Target/TargetSchedule.td).  An
+// MCSchedPredicate can be used by a `SchedVar` to associate a predicate with a
+// list of SchedReadWrites. Note that `SchedVar` are used to create SchedVariant
+// definitions.
+//
+// Each MCInstPredicate class has a well known semantic. For example,
+// `CheckOpcode` is only used to check the instruction opcode value.
+//
+// MCInstPredicate classes allow the definition of predicates in a declarative
+// way.  These predicates don't require a custom block of C++, and can be used
+// to define conditions on instructions without being bound to a particular
+// representation (i.e. MachineInstr vs MCInst).
+//
+// It also means that tablegen backends must know how to parse and expand them
+// into code that works on MCInst (or MachineInst).
+//
+// Instances of class PredicateExpander (see utils/Tablegen/PredicateExpander.h)
+// know how to expand a predicate. For each MCInstPredicate class, there must be
+// an "expand" method available in the PredicateExpander interface.
+//
+// For example, a `CheckOpcode` predicate is expanded using method
+// `PredicateExpander::expandCheckOpcode()`.
+//
+// New MCInstPredicate classes must be added to this file. For each new class
+// XYZ, an "expandXYZ" method must be added to the PredicateExpander.
+//
+//===----------------------------------------------------------------------===//
+
+// Forward declarations.
+class Instruction;
+
+// A generic machine instruction predicate.
+class MCInstPredicate;
+
+class MCTrue  : MCInstPredicate;   // A predicate that always evaluates to True.
+class MCFalse : MCInstPredicate;   // A predicate that always evaluates to False.
+def TruePred  : MCTrue;
+def FalsePred : MCFalse;
+
+// A predicate used to negate the outcome of another predicate.
+// It allows to easily express "set difference" operations. For example, it
+// makes it easy to describe a check that tests if an opcode is not part of a
+// set of opcodes.
+class CheckNot<MCInstPredicate P> : MCInstPredicate {
+  MCInstPredicate Pred = P;
+}
+
+// This class is used as a building block to define predicates on instruction
+// operands. It is used to reference a specific machine operand.
+class MCOperandPredicate<int Index> : MCInstPredicate {
+  int OpIndex = Index;
+}
+
+// Return true if machine operand at position `Index` is a register operand.
+class CheckIsRegOperand<int Index> : MCOperandPredicate<Index>;
+
+// Return true if machine operand at position `Index` is an immediate operand.
+class CheckIsImmOperand<int Index> : MCOperandPredicate<Index>;
+
+// Check if machine operands at index `First` and index `Second` both reference
+// the same register.
+class CheckSameRegOperand<int First, int Second> : MCInstPredicate {
+  int FirstIndex = First;
+  int SecondIndex = Second;
+}
+
+// Check that the machine register operand at position `Index` references
+// register R. This predicate assumes that we already checked that the machine
+// operand at position `Index` is a register operand.
+class CheckRegOperand<int Index, Register R> : MCOperandPredicate<Index> {
+  Register Reg = R;
+}
+
+// Check if register operand at index `Index` is the invalid register.
+class CheckInvalidRegOperand<int Index> : MCOperandPredicate<Index>;
+
+// Check that the operand at position `Index` is immediate `Imm`.
+class CheckImmOperand<int Index, int Imm> : MCOperandPredicate<Index> {
+  int ImmVal = Imm;
+}
+
+// Similar to CheckImmOperand, however the immediate is not a literal number.
+// This is useful when we want to compare the value of an operand against an
+// enum value, and we know the actual integer value of that enum.
+class CheckImmOperand_s<int Index, string Value> : MCOperandPredicate<Index> {
+  string ImmVal = Value;
+}
+
+// Check that the operand at position `Index` is immediate value zero.
+class CheckZeroOperand<int Index> : CheckImmOperand<Index, 0>;
+
+// Check that the instruction has exactly `Num` operands.
+class CheckNumOperands<int Num> : MCInstPredicate {
+  int NumOps = Num;
+}
+
+// Check that the instruction opcode is one of the opcodes in set `Opcodes`.
+// This is a simple set membership query. The easier way to check if an opcode
+// is not a member of the set is by using a `CheckNot<CheckOpcode<[...]>>`
+// sequence.
+class CheckOpcode<list<Instruction> Opcodes> : MCInstPredicate {
+  list<Instruction> ValidOpcodes = Opcodes;
+}
+
+// Check that the instruction opcode is a pseudo opcode member of the set
+// `Opcodes`.  This check is always expanded to "false" if we are generating
+// code for MCInst.
+class CheckPseudo<list<Instruction> Opcodes> : CheckOpcode<Opcodes>;
+
+// A non-portable predicate. Only to use as a last resort when a block of code
+// cannot possibly be converted in a declarative way using other MCInstPredicate
+// classes. This check is always expanded to "false" when generating code for
+// MCInst.
+class CheckNonPortable<string Code> : MCInstPredicate {
+  string CodeBlock = Code;
+}
+
+// A sequence of predicates. It is used as the base class for CheckAll, and
+// CheckAny. It allows to describe compositions of predicates.
+class CheckPredicateSequence<list<MCInstPredicate> Preds> : MCInstPredicate {
+  list<MCInstPredicate> Predicates = Preds;
+}
+
+// Check that all of the predicates in `Preds` evaluate to true.
+class CheckAll<list<MCInstPredicate> Sequence>
+    : CheckPredicateSequence<Sequence>;
+
+// Check that at least one of the predicates in `Preds` evaluates to true.
+class CheckAny<list<MCInstPredicate> Sequence>
+    : CheckPredicateSequence<Sequence>;
+
+
+// Used to expand the body of a function predicate. See the definition of
+// TIIPredicate below.
+class MCStatement;
+
+// Expands to a return statement. The return expression is a boolean expression
+// described by a MCInstPredicate.
+class MCReturnStatement<MCInstPredicate predicate> : MCStatement {
+  MCInstPredicate Pred = predicate;
+}
+
+// Used to automatically construct cases of a switch statement where the switch
+// variable is an instruction opcode. There is a 'case' for every opcode in the
+// `opcodes` list, and each case is associated with MCStatement `caseStmt`.
+class MCOpcodeSwitchCase<list<Instruction> opcodes, MCStatement caseStmt> {
+  list<Instruction> Opcodes = opcodes;
+  MCStatement CaseStmt = caseStmt;
+}
+
+// Expands to a switch statement. The switch variable is an instruction opcode.
+// The auto-generated switch is populated by a number of cases based on the
+// `cases` list in input. A default case is automatically generated, and it
+// evaluates to `default`.
+class MCOpcodeSwitchStatement<list<MCOpcodeSwitchCase> cases,
+                              MCStatement default> : MCStatement {
+  list<MCOpcodeSwitchCase> Cases = cases;
+  MCStatement DefaultCase = default;
+}
+
+// Check that a call to method `Name` in class "XXXGenInstrInfo" (where XXX is
+// the `Target` name) returns true.
+//
+// TIIPredicate definitions are used to model calls to the target-specific
+// InstrInfo. A TIIPredicate is treated specially by the InstrInfoEmitter
+// tablegen backend, which will use it to automatically generate a definition in
+// the target specific `GenInstrInfo` class.
+class TIIPredicate<string Target, string Name, MCStatement body>
+    : MCInstPredicate {
+  string TargetName = Target;
+  string FunctionName = Name;
+  MCStatement Body = body;
+}
+
+// A function predicate that takes as input a machine instruction, and returns
+// a boolean value.
+//
+// This predicate is expanded into a function call by the PredicateExpander.
+// In particular, the PredicateExpander would either expand this predicate into
+// a call to `MCInstFn`, or into a call to`MachineInstrFn` depending on whether
+// it is lowering predicates for MCInst or MachineInstr.
+//
+// In this context, `MCInstFn` and `MachineInstrFn` are both function names.
+class CheckFunctionPredicate<string MCInstFn, string MachineInstrFn> : MCInstPredicate {
+  string MCInstFnName = MCInstFn;
+  string MachineInstrFnName = MachineInstrFn;
+}
diff --git a/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h b/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
index d5ac3cd..40b77c3 100644
--- a/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
+++ b/linux-x64/clang/include/llvm/Target/TargetLoweringObjectFile.h
@@ -45,6 +45,13 @@
 protected:
   bool SupportIndirectSymViaGOTPCRel = false;
   bool SupportGOTPCRelWithOffset = true;
+  bool SupportDebugThreadLocalLocation = true;
+
+  /// PersonalityEncoding, LSDAEncoding, TTypeEncoding - Some encoding values
+  /// for EH.
+  unsigned PersonalityEncoding = 0;
+  unsigned LSDAEncoding = 0;
+  unsigned TTypeEncoding = 0;
 
   /// This section contains the static constructor pointer list.
   MCSection *StaticCtorSection = nullptr;
@@ -71,8 +78,7 @@
                                     const MCSymbol *Sym) const;
 
   /// Emit the module-level metadata that the platform cares about.
-  virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M,
-                                  const TargetMachine &TM) const {}
+  virtual void emitModuleMetadata(MCStreamer &Streamer, Module &M) const {}
 
   /// Given a constant with the SectionKind, return a section that it should be
   /// placed in.
@@ -136,6 +142,10 @@
                                             const TargetMachine &TM,
                                             MachineModuleInfo *MMI) const;
 
+  unsigned getPersonalityEncoding() const { return PersonalityEncoding; }
+  unsigned getLSDAEncoding() const { return LSDAEncoding; }
+  unsigned getTTypeEncoding() const { return TTypeEncoding; }
+
   const MCExpr *getTTypeReference(const MCSymbolRefExpr *Sym, unsigned Encoding,
                                   MCStreamer &Streamer) const;
 
@@ -149,7 +159,7 @@
     return StaticDtorSection;
   }
 
-  /// \brief Create a symbol reference to describe the given TLS variable when
+  /// Create a symbol reference to describe the given TLS variable when
   /// emitting the address in debug info.
   virtual const MCExpr *getDebugThreadLocalSymbol(const MCSymbol *Sym) const;
 
@@ -159,19 +169,24 @@
     return nullptr;
   }
 
-  /// \brief Target supports replacing a data "PC"-relative access to a symbol
+  /// Target supports replacing a data "PC"-relative access to a symbol
   /// through another symbol, by accessing the later via a GOT entry instead?
   bool supportIndirectSymViaGOTPCRel() const {
     return SupportIndirectSymViaGOTPCRel;
   }
 
-  /// \brief Target GOT "PC"-relative relocation supports encoding an additional
+  /// Target GOT "PC"-relative relocation supports encoding an additional
   /// binary expression with an offset?
   bool supportGOTPCRelWithOffset() const {
     return SupportGOTPCRelWithOffset;
   }
 
-  /// \brief Get the target specific PC relative GOT entry relocation
+  /// Target supports TLS offset relocation in debug section?
+  bool supportDebugThreadLocalLocation() const {
+    return SupportDebugThreadLocalLocation;
+  }
+
+  /// Get the target specific PC relative GOT entry relocation
   virtual const MCExpr *getIndirectSymViaGOTPCRel(const MCSymbol *Sym,
                                                   const MCValue &MV,
                                                   int64_t Offset,
diff --git a/linux-x64/clang/include/llvm/Target/TargetMachine.h b/linux-x64/clang/include/llvm/Target/TargetMachine.h
index 6f5d86e..1ca68c8 100644
--- a/linux-x64/clang/include/llvm/Target/TargetMachine.h
+++ b/linux-x64/clang/include/llvm/Target/TargetMachine.h
@@ -154,7 +154,7 @@
     return DL.getPointerSize(DL.getAllocaAddrSpace());
   }
 
-  /// \brief Reset the target options based on the function's attributes.
+  /// Reset the target options based on the function's attributes.
   // FIXME: Remove TargetOptions that affect per-function code generation
   // from TargetMachine.
   void resetTargetOptions(const Function &F) const;
@@ -195,13 +195,19 @@
   /// Returns the optimization level: None, Less, Default, or Aggressive.
   CodeGenOpt::Level getOptLevel() const;
 
-  /// \brief Overrides the optimization level.
+  /// Overrides the optimization level.
   void setOptLevel(CodeGenOpt::Level Level);
 
   void setFastISel(bool Enable) { Options.EnableFastISel = Enable; }
   bool getO0WantsFastISel() { return O0WantsFastISel; }
   void setO0WantsFastISel(bool Enable) { O0WantsFastISel = Enable; }
   void setGlobalISel(bool Enable) { Options.EnableGlobalISel = Enable; }
+  void setMachineOutliner(bool Enable) {
+    Options.EnableMachineOutliner = Enable;
+  }
+  void setSupportsDefaultOutlining(bool Enable) {
+    Options.SupportsDefaultOutlining = Enable;
+  }
 
   bool shouldPrintMachineCode() const { return Options.PrintMachineCode; }
 
@@ -219,14 +225,14 @@
     return Options.FunctionSections;
   }
 
-  /// \brief Get a \c TargetIRAnalysis appropriate for the target.
+  /// Get a \c TargetIRAnalysis appropriate for the target.
   ///
   /// This is used to construct the new pass manager's target IR analysis pass,
   /// set up appropriately for this target machine. Even the old pass manager
   /// uses this to answer queries about the IR.
   TargetIRAnalysis getTargetIRAnalysis();
 
-  /// \brief Return a TargetTransformInfo for a given function.
+  /// Return a TargetTransformInfo for a given function.
   ///
   /// The returned TargetTransformInfo is specialized to the subtarget
   /// corresponding to \p F.
@@ -252,7 +258,7 @@
   /// \p MMI is an optional parameter that, if set to non-nullptr,
   /// will be used to set the MachineModuloInfo for this PM.
   virtual bool addPassesToEmitFile(PassManagerBase &, raw_pwrite_stream &,
-                                   CodeGenFileType,
+                                   raw_pwrite_stream *, CodeGenFileType,
                                    bool /*DisableVerify*/ = true,
                                    MachineModuleInfo *MMI = nullptr) {
     return true;
@@ -299,14 +305,14 @@
 class LLVMTargetMachine : public TargetMachine {
 protected: // Can only create subclasses.
   LLVMTargetMachine(const Target &T, StringRef DataLayoutString,
-                    const Triple &TargetTriple, StringRef CPU, StringRef FS,
+                    const Triple &TT, StringRef CPU, StringRef FS,
                     const TargetOptions &Options, Reloc::Model RM,
                     CodeModel::Model CM, CodeGenOpt::Level OL);
 
   void initAsmInfo();
 
 public:
-  /// \brief Get a TargetTransformInfo implementation for the target.
+  /// Get a TargetTransformInfo implementation for the target.
   ///
   /// The TTI returned uses the common code generator to answer queries about
   /// the IR.
@@ -321,7 +327,8 @@
   /// \p MMI is an optional parameter that, if set to non-nullptr,
   /// will be used to set the MachineModuloInfofor this PM.
   bool addPassesToEmitFile(PassManagerBase &PM, raw_pwrite_stream &Out,
-                           CodeGenFileType FileType, bool DisableVerify = true,
+                           raw_pwrite_stream *DwoOut, CodeGenFileType FileType,
+                           bool DisableVerify = true,
                            MachineModuleInfo *MMI = nullptr) override;
 
   /// Add passes to the specified pass manager to get machine code emitted with
@@ -329,7 +336,7 @@
   /// fills the MCContext Ctx pointer which can be used to build custom
   /// MCStreamer.
   bool addPassesToEmitMC(PassManagerBase &PM, MCContext *&Ctx,
-                         raw_pwrite_stream &OS,
+                         raw_pwrite_stream &Out,
                          bool DisableVerify = true) override;
 
   /// Returns true if the target is expected to pass all machine verifier
@@ -338,10 +345,11 @@
   /// EXPENSIVE_CHECKS is enabled.
   virtual bool isMachineVerifierClean() const { return true; }
 
-  /// \brief Adds an AsmPrinter pass to the pipeline that prints assembly or
+  /// Adds an AsmPrinter pass to the pipeline that prints assembly or
   /// machine code from the MI representation.
   bool addAsmPrinter(PassManagerBase &PM, raw_pwrite_stream &Out,
-                     CodeGenFileType FileTYpe, MCContext &Context);
+                     raw_pwrite_stream *DwoOut, CodeGenFileType FileTYpe,
+                     MCContext &Context);
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Target/TargetOptions.h b/linux-x64/clang/include/llvm/Target/TargetOptions.h
index 844031f..07ed773 100644
--- a/linux-x64/clang/include/llvm/Target/TargetOptions.h
+++ b/linux-x64/clang/include/llvm/Target/TargetOptions.h
@@ -108,8 +108,10 @@
           DisableIntegratedAS(false), RelaxELFRelocations(false),
           FunctionSections(false), DataSections(false),
           UniqueSectionNames(true), TrapUnreachable(false),
-          EmulatedTLS(false), ExplicitEmulatedTLS(false),
-          EnableIPRA(false), EmitStackSizeSection(false) {}
+          NoTrapAfterNoreturn(false), EmulatedTLS(false),
+          ExplicitEmulatedTLS(false), EnableIPRA(false),
+          EmitStackSizeSection(false), EnableMachineOutliner(false),
+          SupportsDefaultOutlining(false), EmitAddrsig(false) {}
 
     /// PrintMachineCode - This flag is enabled when the -print-machineinstrs
     /// option is specified on the command line, and should enable debugging
@@ -213,6 +215,10 @@
     /// Emit target-specific trap instruction for 'unreachable' IR instructions.
     unsigned TrapUnreachable : 1;
 
+    /// Do not emit a trap instruction for 'unreachable' IR instructions behind
+    /// noreturn calls, even if TrapUnreachable is true.
+    unsigned NoTrapAfterNoreturn : 1;
+
     /// EmulatedTLS - This flag enables emulated TLS model, using emutls
     /// function in the runtime library..
     unsigned EmulatedTLS : 1;
@@ -226,6 +232,15 @@
     /// Emit section containing metadata on function stack sizes.
     unsigned EmitStackSizeSection : 1;
 
+    /// Enables the MachineOutliner pass.
+    unsigned EnableMachineOutliner : 1;
+
+    /// Set if the target supports default outlining behaviour.
+    unsigned SupportsDefaultOutlining : 1;
+
+    /// Emit address-significance table.
+    unsigned EmitAddrsig : 1;
+
     /// FloatABIType - This setting is set by -float-abi=xxx option is specfied
     /// on the command line. This setting may either be Default, Soft, or Hard.
     /// Default selects the target's default behavior. Soft selects the ABI for
diff --git a/linux-x64/clang/include/llvm/Target/TargetSchedule.td b/linux-x64/clang/include/llvm/Target/TargetSchedule.td
index 8fa9bae..6858084 100644
--- a/linux-x64/clang/include/llvm/Target/TargetSchedule.td
+++ b/linux-x64/clang/include/llvm/Target/TargetSchedule.td
@@ -280,10 +280,9 @@
 // ProcResources indicates the set of resources consumed by the write.
 // Optionally, ResourceCycles indicates the number of cycles the
 // resource is consumed. Each ResourceCycles item is paired with the
-// ProcResource item at the same position in its list. Since
-// ResourceCycles are rarely specialized, the list may be
-// incomplete. By default, resources are consumed for a single cycle,
-// regardless of latency, which models a fully pipelined processing
+// ProcResource item at the same position in its list. ResourceCycles
+// can be `[]`: in that case, all resources are consumed for a single
+// cycle, regardless of latency, which models a fully pipelined processing
 // unit. A value of 0 for ResourceCycles means that the resource must
 // be available but is not consumed, which is only relevant for
 // unbuffered resources.
@@ -354,13 +353,23 @@
   code Code = c;
 }
 
+// Base class for scheduling predicates.
+class SchedPredicateBase;
+
+// A scheduling predicate whose logic is defined by a MCInstPredicate.
+// This can directly be used by SchedWriteVariant definitions.
+class MCSchedPredicate<MCInstPredicate P> : SchedPredicateBase {
+  MCInstPredicate Pred = P;
+  SchedMachineModel SchedModel = ?;
+}
+
 // Define a predicate to determine which SchedVariant applies to a
 // particular MachineInstr. The code snippet is used as an
 // if-statement's expression. Available variables are MI, SchedModel,
 // and anything defined in a PredicateProlog.
 //
 // SchedModel silences warnings but is ignored.
-class SchedPredicate<code pred> {
+class SchedPredicate<code pred> : SchedPredicateBase {
   SchedMachineModel SchedModel = ?;
   code Predicate = pred;
 }
@@ -375,8 +384,8 @@
 // operands. In this case, latency is not additive. If the current Variant
 // is already part of a Sequence, then that entire chain leading up to
 // the Variant is distributed over the variadic operands.
-class SchedVar<SchedPredicate pred, list<SchedReadWrite> selected> {
-  SchedPredicate Predicate = pred;
+class SchedVar<SchedPredicateBase pred, list<SchedReadWrite> selected> {
+  SchedPredicateBase Predicate = pred;
   list<SchedReadWrite> Selected = selected;
 }
 
@@ -442,3 +451,102 @@
   SchedReadWrite AliasRW = alias;
   SchedMachineModel SchedModel = ?;
 }
+
+// Allow the definition of processor register files for register renaming
+// purposes.
+//
+// Each processor register file declares:
+//  - The set of registers that can be renamed.
+//  - The number of physical registers which can be used for register renaming
+//    purpose.
+//  - The cost of a register rename.
+//
+// The cost of a rename is the number of physical registers allocated by the
+// register alias table to map the new definition. By default, register can be
+// renamed at the cost of a single physical register.  Note that register costs
+// are defined at register class granularity (see field `Costs`).
+//
+// The set of registers that are subject to register renaming is declared using
+// a list of register classes (see field `RegClasses`). An empty list of
+// register classes means: all the logical registers defined by the target can
+// be fully renamed.
+//
+// A register R can be renamed if its register class appears in the `RegClasses`
+// set. When R is written, a new alias is allocated at the cost of one or more
+// physical registers; as a result, false dependencies on R are removed.
+//
+// A sub-register V of register R is implicitly part of the same register file.
+// However, V is only renamed if its register class is part of `RegClasses`.
+// Otherwise, the processor keeps it (as well as any other different part
+// of R) together with R, and a write of V always causes a compulsory read of R.
+//
+// This is what happens for example on AMD processors (at least from Bulldozer
+// onwards), where AL and AH are not treated as independent from AX, and AX is
+// not treated as independent from EAX. A write to AL has an implicity false
+// dependency on the last write to EAX (or a portion of EAX).  As a consequence,
+// a write to AL cannot go in parallel with a write to AH.
+//
+// There is no false dependency if the partial register write belongs to a
+// register class that is in `RegClasses`.
+// There is also no penalty for writes that "clear the content a super-register"
+// (see MC/MCInstrAnalysis.h - method MCInstrAnalysis::clearsSuperRegisters()).
+// On x86-64, 32-bit GPR writes implicitly zero the upper half of the underlying
+// physical register, effectively removing any false dependencies with the
+// previous register definition.
+//
+// TODO: This implementation assumes that there is no limit in the number of
+// renames per cycle, which might not be true for all hardware or register
+// classes. Also, there is no limit to how many times the same logical register
+// can be renamed during the same cycle.
+//
+// TODO: we don't currently model merge penalties for the case where a write to
+// a part of a register is followed by a read from a larger part of the same
+// register. On some Intel chips, different parts of a GPR can be stored in
+// different physical registers. However, there is a cost to pay for when the
+// partial write is combined with the previous super-register definition.  We
+// should add support for these cases, and correctly model merge problems with
+// partial register accesses.
+class RegisterFile<int numPhysRegs, list<RegisterClass> Classes = [],
+                   list<int> Costs = []> {
+  list<RegisterClass> RegClasses = Classes;
+  list<int> RegCosts = Costs;
+  int NumPhysRegs = numPhysRegs;
+  SchedMachineModel SchedModel = ?;
+}
+
+// Describe the retire control unit.
+// A retire control unit specifies the size of the reorder buffer, as well as
+// the maximum number of opcodes that can be retired every cycle.
+// A value less-than-or-equal-to zero for field 'ReorderBufferSize' means: "the
+// size is unknown". The idea is that external tools can fall-back to using
+// field MicroOpBufferSize in SchedModel if the reorder buffer size is unknown.
+// A zero or negative value for field 'MaxRetirePerCycle' means "no
+// restrictions on the number of instructions retired per cycle".
+// Models can optionally specify up to one instance of RetireControlUnit per
+// scheduling model.
+class RetireControlUnit<int bufferSize, int retirePerCycle> {
+  int ReorderBufferSize = bufferSize;
+  int MaxRetirePerCycle = retirePerCycle;
+  SchedMachineModel SchedModel = ?;
+}
+
+// Allow the definition of hardware counters.
+class PfmCounter {
+  SchedMachineModel SchedModel = ?;
+}
+
+// Each processor can define how to measure cycles by defining a
+// PfmCycleCounter.
+class PfmCycleCounter<string counter> : PfmCounter {
+  string Counter = counter;
+}
+
+// Each ProcResourceUnits can define how to measure issued uops by defining
+// a PfmIssueCounter.
+class PfmIssueCounter<ProcResourceUnits resource, list<string> counters>
+    : PfmCounter{
+  // The resource units on which uops are issued.
+  ProcResourceUnits Resource = resource;
+  // The list of counters that measure issue events.
+  list<string> Counters = counters;
+}
diff --git a/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td b/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
index 7ba8f7e..b4debef 100644
--- a/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
+++ b/linux-x64/clang/include/llvm/Target/TargetSelectionDAG.td
@@ -615,14 +615,18 @@
 // compact and readable.
 //
 
-/// PatFrag - Represents a pattern fragment.  This can match something on the
-/// DAG, from a single node to multiple nested other fragments.
+/// PatFrags - Represents a set of pattern fragments.  Each single fragment
+/// can match something on the DAG, from a single node to multiple nested other
+/// fragments.   The whole set of fragments matches if any of the single
+/// fragemnts match.  This allows e.g. matching and "add with overflow" and
+/// a regular "add" with the same fragment set.
 ///
-class PatFrag<dag ops, dag frag, code pred = [{}],
-              SDNodeXForm xform = NOOP_SDNodeXForm> : SDPatternOperator {
+class PatFrags<dag ops, list<dag> frags, code pred = [{}],
+               SDNodeXForm xform = NOOP_SDNodeXForm> : SDPatternOperator {
   dag Operands = ops;
-  dag Fragment = frag;
+  list<dag> Fragments = frags;
   code PredicateCode = pred;
+  code GISelPredicateCode = [{}];
   code ImmediateCode = [{}];
   SDNodeXForm OperandTransform = xform;
 
@@ -681,6 +685,11 @@
   ValueType ScalarMemoryVT = ?;
 }
 
+// PatFrag - A version of PatFrags matching only a single fragment.
+class PatFrag<dag ops, dag frag, code pred = [{}],
+              SDNodeXForm xform = NOOP_SDNodeXForm>
+  : PatFrags<ops, [frag], pred, xform>;
+
 // OutPatFrag is a pattern fragment that is used as part of an output pattern
 // (not an input pattern). These do not have predicates or transforms, but are
 // used to avoid repeated subexpressions in output patterns.
@@ -1058,6 +1067,15 @@
   let MemoryVT = f32;
 }
 
+def nonvolatile_load : PatFrag<(ops node:$ptr),
+                               (load node:$ptr), [{
+  return !cast<LoadSDNode>(N)->isVolatile();
+}]>;
+def nonvolatile_store : PatFrag<(ops node:$val, node:$ptr),
+                                (store node:$val, node:$ptr), [{
+  return !cast<StoreSDNode>(N)->isVolatile();
+}]>;
+
 // nontemporal store fragments.
 def nontemporalstore : PatFrag<(ops node:$val, node:$ptr),
                                (store node:$val, node:$ptr), [{
diff --git a/linux-x64/clang/include/llvm/Testing/Support/Error.h b/linux-x64/clang/include/llvm/Testing/Support/Error.h
index 50889b9..0e5b540 100644
--- a/linux-x64/clang/include/llvm/Testing/Support/Error.h
+++ b/linux-x64/clang/include/llvm/Testing/Support/Error.h
@@ -38,7 +38,7 @@
 
   bool MatchAndExplain(const ExpectedHolder<T> &Holder,
                        testing::MatchResultListener *listener) const override {
-    if (!Holder.Success)
+    if (!Holder.Success())
       return false;
 
     bool result = Matcher.MatchAndExplain(*Holder.Exp, listener);
@@ -82,6 +82,53 @@
   M Matcher;
 };
 
+template <typename InfoT>
+class ErrorMatchesMono : public testing::MatcherInterface<const ErrorHolder &> {
+public:
+  explicit ErrorMatchesMono(Optional<testing::Matcher<InfoT &>> Matcher)
+      : Matcher(std::move(Matcher)) {}
+
+  bool MatchAndExplain(const ErrorHolder &Holder,
+                       testing::MatchResultListener *listener) const override {
+    if (Holder.Success())
+      return false;
+
+    if (Holder.Infos.size() > 1) {
+      *listener << "multiple errors";
+      return false;
+    }
+
+    auto &Info = *Holder.Infos[0];
+    if (!Info.isA<InfoT>()) {
+      *listener << "Error was not of given type";
+      return false;
+    }
+
+    if (!Matcher)
+      return true;
+
+    return Matcher->MatchAndExplain(static_cast<InfoT &>(Info), listener);
+  }
+
+  void DescribeTo(std::ostream *OS) const override {
+    *OS << "failed with Error of given type";
+    if (Matcher) {
+      *OS << " and the error ";
+      Matcher->DescribeTo(OS);
+    }
+  }
+
+  void DescribeNegationTo(std::ostream *OS) const override {
+    *OS << "succeeded or did not fail with the error of given type";
+    if (Matcher) {
+      *OS << " or the error ";
+      Matcher->DescribeNegationTo(OS);
+    }
+  }
+
+private:
+  Optional<testing::Matcher<InfoT &>> Matcher;
+};
 } // namespace detail
 
 #define EXPECT_THAT_ERROR(Err, Matcher)                                        \
@@ -94,8 +141,19 @@
 #define ASSERT_THAT_EXPECTED(Err, Matcher)                                     \
   ASSERT_THAT(llvm::detail::TakeExpected(Err), Matcher)
 
-MATCHER(Succeeded, "") { return arg.Success; }
-MATCHER(Failed, "") { return !arg.Success; }
+MATCHER(Succeeded, "") { return arg.Success(); }
+MATCHER(Failed, "") { return !arg.Success(); }
+
+template <typename InfoT>
+testing::Matcher<const detail::ErrorHolder &> Failed() {
+  return MakeMatcher(new detail::ErrorMatchesMono<InfoT>(None));
+}
+
+template <typename InfoT, typename M>
+testing::Matcher<const detail::ErrorHolder &> Failed(M Matcher) {
+  return MakeMatcher(new detail::ErrorMatchesMono<InfoT>(
+      testing::SafeMatcherCast<InfoT &>(Matcher)));
+}
 
 template <typename M>
 detail::ValueMatchesPoly<M> HasValue(M Matcher) {
diff --git a/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h b/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
index d7f0c71..96264ac 100644
--- a/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
+++ b/linux-x64/clang/include/llvm/Testing/Support/SupportHelpers.h
@@ -17,8 +17,9 @@
 namespace llvm {
 namespace detail {
 struct ErrorHolder {
-  bool Success;
-  std::string Message;
+  std::vector<std::shared_ptr<ErrorInfoBase>> Infos;
+
+  bool Success() const { return Infos.empty(); }
 };
 
 template <typename T> struct ExpectedHolder : public ErrorHolder {
@@ -29,15 +30,22 @@
 };
 
 inline void PrintTo(const ErrorHolder &Err, std::ostream *Out) {
-  *Out << (Err.Success ? "succeeded" : "failed");
-  if (!Err.Success) {
-    *Out << "  (" << StringRef(Err.Message).trim().str() << ")";
+  raw_os_ostream OS(*Out);
+  OS << (Err.Success() ? "succeeded" : "failed");
+  if (!Err.Success()) {
+    const char *Delim = "  (";
+    for (const auto &Info : Err.Infos) {
+      OS << Delim;
+      Delim = "; ";
+      Info->log(OS);
+    }
+    OS << ")";
   }
 }
 
 template <typename T>
 void PrintTo(const ExpectedHolder<T> &Item, std::ostream *Out) {
-  if (Item.Success) {
+  if (Item.Success()) {
     *Out << "succeeded with value " << ::testing::PrintToString(*Item.Exp);
   } else {
     PrintTo(static_cast<const ErrorHolder &>(Item), Out);
diff --git a/linux-x64/clang/include/llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h b/linux-x64/clang/include/llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h
index a318d18..f970acd 100644
--- a/linux-x64/clang/include/llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h
+++ b/linux-x64/clang/include/llvm/Transforms/AggressiveInstCombine/AggressiveInstCombine.h
@@ -10,8 +10,8 @@
 ///
 /// This file provides the primary interface to the aggressive instcombine pass.
 /// This pass is suitable for use in the new pass manager. For a pass that works
-/// with the legacy pass manager, please look for
-/// \c createAggressiveInstCombinerPass() in Scalar.h.
+/// with the legacy pass manager, please use
+/// \c createAggressiveInstCombinerPass().
 ///
 //===----------------------------------------------------------------------===//
 
@@ -29,6 +29,13 @@
 public:
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
+
+//===----------------------------------------------------------------------===//
+//
+// AggressiveInstCombiner - Combine expression patterns to form expressions with
+// fewer, simple instructions. This pass does not modify the CFG.
+//
+FunctionPass *createAggressiveInstCombinerPass();
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO.h b/linux-x64/clang/include/llvm/Transforms/IPO.h
index 1514335..ebc76bf 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO.h
@@ -222,7 +222,7 @@
   Export, ///< Export information to summary.
 };
 
-/// \brief This pass lowers type metadata and the llvm.type.test intrinsic to
+/// This pass lowers type metadata and the llvm.type.test intrinsic to
 /// bitsets.
 ///
 /// The behavior depends on the summary arguments:
@@ -235,10 +235,10 @@
 ModulePass *createLowerTypeTestsPass(ModuleSummaryIndex *ExportSummary,
                                      const ModuleSummaryIndex *ImportSummary);
 
-/// \brief This pass export CFI checks for use by external modules.
+/// This pass export CFI checks for use by external modules.
 ModulePass *createCrossDSOCFIPass();
 
-/// \brief This pass implements whole-program devirtualization using type
+/// This pass implements whole-program devirtualization using type
 /// metadata.
 ///
 /// The behavior depends on the summary arguments:
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/FunctionImport.h b/linux-x64/clang/include/llvm/Transforms/IPO/FunctionImport.h
index 5fedde1..120a34e 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/FunctionImport.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/FunctionImport.h
@@ -33,11 +33,17 @@
 /// based on the provided summary informations.
 class FunctionImporter {
 public:
-  /// Set of functions to import from a source module. Each entry is a map
-  /// containing all the functions to import for a source module.
-  /// The keys is the GUID identifying a function to import, and the value
-  /// is the threshold applied when deciding to import it.
-  using FunctionsToImportTy = std::map<GlobalValue::GUID, unsigned>;
+  /// Set of functions to import from a source module. Each entry is a set
+  /// containing all the GUIDs of all functions to import for a source module.
+  using FunctionsToImportTy = std::unordered_set<GlobalValue::GUID>;
+
+  /// Map of callee GUID considered for import into a given module to a pair
+  /// consisting of the largest threshold applied when deciding whether to
+  /// import it and, if we decided to import, a pointer to the summary instance
+  /// imported. If we decided not to import, the summary will be nullptr.
+  using ImportThresholdsTy =
+      DenseMap<GlobalValue::GUID,
+               std::pair<unsigned, const GlobalValueSummary *>>;
 
   /// The map contains an entry for every module to import from, the key being
   /// the module identifier to pass to the ModuleLoader. The value is the set of
@@ -143,9 +149,9 @@
     std::map<std::string, GVSummaryMapTy> &ModuleToSummariesForIndex);
 
 /// Emit into \p OutputFilename the files module \p ModulePath will import from.
-std::error_code
-EmitImportsFiles(StringRef ModulePath, StringRef OutputFilename,
-                 const FunctionImporter::ImportMapTy &ModuleImports);
+std::error_code EmitImportsFiles(
+    StringRef ModulePath, StringRef OutputFilename,
+    const std::map<std::string, GVSummaryMapTy> &ModuleToSummariesForIndex);
 
 /// Resolve WeakForLinker values in \p TheModule based on the information
 /// recorded in the summaries during global summary-based analysis.
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/Inliner.h b/linux-x64/clang/include/llvm/Transforms/IPO/Inliner.h
index eda8cf4..610e450 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/Inliner.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/Inliner.h
@@ -96,12 +96,17 @@
 public:
   InlinerPass(InlineParams Params = getInlineParams())
       : Params(std::move(Params)) {}
+  ~InlinerPass();
+  InlinerPass(InlinerPass &&Arg)
+      : Params(std::move(Arg.Params)),
+        ImportedFunctionsStats(std::move(Arg.ImportedFunctionsStats)) {}
 
   PreservedAnalyses run(LazyCallGraph::SCC &C, CGSCCAnalysisManager &AM,
                         LazyCallGraph &CG, CGSCCUpdateResult &UR);
 
 private:
   InlineParams Params;
+  std::unique_ptr<ImportedFunctionsInliningStatistics> ImportedFunctionsStats;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/LowerTypeTests.h b/linux-x64/clang/include/llvm/Transforms/IPO/LowerTypeTests.h
index 3bcfe65..bc44838 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/LowerTypeTests.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/LowerTypeTests.h
@@ -26,6 +26,7 @@
 namespace llvm {
 
 class Module;
+class ModuleSummaryIndex;
 class raw_ostream;
 
 namespace lowertypetests {
@@ -197,6 +198,11 @@
 
 class LowerTypeTestsPass : public PassInfoMixin<LowerTypeTestsPass> {
 public:
+  ModuleSummaryIndex *ExportSummary;
+  const ModuleSummaryIndex *ImportSummary;
+  LowerTypeTestsPass(ModuleSummaryIndex *ExportSummary,
+                     const ModuleSummaryIndex *ImportSummary)
+      : ExportSummary(ExportSummary), ImportSummary(ImportSummary) {}
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/IPO/WholeProgramDevirt.h b/linux-x64/clang/include/llvm/Transforms/IPO/WholeProgramDevirt.h
index 1aa4c6f..bf2c79b 100644
--- a/linux-x64/clang/include/llvm/Transforms/IPO/WholeProgramDevirt.h
+++ b/linux-x64/clang/include/llvm/Transforms/IPO/WholeProgramDevirt.h
@@ -28,6 +28,7 @@
 template <typename T> class MutableArrayRef;
 class Function;
 class GlobalVariable;
+class ModuleSummaryIndex;
 
 namespace wholeprogramdevirt {
 
@@ -218,6 +219,13 @@
 } // end namespace wholeprogramdevirt
 
 struct WholeProgramDevirtPass : public PassInfoMixin<WholeProgramDevirtPass> {
+  ModuleSummaryIndex *ExportSummary;
+  const ModuleSummaryIndex *ImportSummary;
+  WholeProgramDevirtPass(ModuleSummaryIndex *ExportSummary,
+                         const ModuleSummaryIndex *ImportSummary)
+      : ExportSummary(ExportSummary), ImportSummary(ImportSummary) {
+    assert(!(ExportSummary && ImportSummary));
+  }
   PreservedAnalyses run(Module &M, ModuleAnalysisManager &);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombine.h b/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombine.h
index 6bd22dc..ab25fe0 100644
--- a/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombine.h
+++ b/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombine.h
@@ -10,8 +10,7 @@
 ///
 /// This file provides the primary interface to the instcombine pass. This pass
 /// is suitable for use in the new pass manager. For a pass that works with the
-/// legacy pass manager, please look for \c createInstructionCombiningPass() in
-/// Scalar.h.
+/// legacy pass manager, use \c createInstructionCombiningPass().
 ///
 //===----------------------------------------------------------------------===//
 
@@ -37,7 +36,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief The legacy pass manager's instcombine pass.
+/// The legacy pass manager's instcombine pass.
 ///
 /// This is a basic whole-function wrapper around the instcombine utility. It
 /// will try to combine all instructions in the function.
@@ -56,6 +55,20 @@
   void getAnalysisUsage(AnalysisUsage &AU) const override;
   bool runOnFunction(Function &F) override;
 };
+
+//===----------------------------------------------------------------------===//
+//
+// InstructionCombining - Combine instructions to form fewer, simple
+// instructions. This pass does not modify the CFG, and has a tendency to make
+// instructions dead, so a subsequent DCE pass is useful.
+//
+// This pass combines things like:
+//    %Y = add int 1, %X
+//    %Z = add int 1, %Y
+// into:
+//    %Z = add int 2, %X
+//
+FunctionPass *createInstructionCombiningPass(bool ExpensiveCombines = true);
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombineWorklist.h b/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombineWorklist.h
index 271e891..f860b4b 100644
--- a/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombineWorklist.h
+++ b/linux-x64/clang/include/llvm/Transforms/InstCombine/InstCombineWorklist.h
@@ -40,7 +40,7 @@
   /// in it.
   void Add(Instruction *I) {
     if (WorklistMap.insert(std::make_pair(I, Worklist.size())).second) {
-      DEBUG(dbgs() << "IC: ADD: " << *I << '\n');
+      LLVM_DEBUG(dbgs() << "IC: ADD: " << *I << '\n');
       Worklist.push_back(I);
     }
   }
@@ -57,7 +57,8 @@
     assert(Worklist.empty() && "Worklist must be empty to add initial group");
     Worklist.reserve(List.size()+16);
     WorklistMap.reserve(List.size());
-    DEBUG(dbgs() << "IC: ADDING: " << List.size() << " instrs to worklist\n");
+    LLVM_DEBUG(dbgs() << "IC: ADDING: " << List.size()
+                      << " instrs to worklist\n");
     unsigned Idx = 0;
     for (Instruction *I : reverse(List)) {
       WorklistMap.insert(std::make_pair(I, Idx++));
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
index b1e13f1..4a346c8 100644
--- a/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation.h
@@ -133,7 +133,8 @@
 FunctionPass *createMemorySanitizerPass(int TrackOrigins = 0,
                                         bool Recover = false);
 
-FunctionPass *createHWAddressSanitizerPass(bool Recover = false);
+FunctionPass *createHWAddressSanitizerPass(bool CompileKernel = false,
+                                           bool Recover = false);
 
 // Insert ThreadSanitizer (race detection) instrumentation
 FunctionPass *createThreadSanitizerPass();
@@ -186,7 +187,7 @@
 ModulePass *createSanitizerCoverageModulePass(
     const SanitizerCoverageOptions &Options = SanitizerCoverageOptions());
 
-/// \brief Calculate what to divide by to scale counts.
+/// Calculate what to divide by to scale counts.
 ///
 /// Given the maximum count, calculate a divisor that will scale all the
 /// weights to strictly less than std::numeric_limits<uint32_t>::max().
@@ -196,7 +197,7 @@
              : MaxCount / std::numeric_limits<uint32_t>::max() + 1;
 }
 
-/// \brief Scale an individual branch count.
+/// Scale an individual branch count.
 ///
 /// Scale a 64-bit weight down to 32-bits using \c Scale.
 ///
diff --git a/linux-x64/clang/include/llvm/Transforms/Instrumentation/CGProfile.h b/linux-x64/clang/include/llvm/Transforms/Instrumentation/CGProfile.h
new file mode 100644
index 0000000..c06c1a2
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Instrumentation/CGProfile.h
@@ -0,0 +1,31 @@
+//===- Transforms/Instrumentation/CGProfile.h -------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+/// This file provides the interface for LLVM's Call Graph Profile pass.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_CGPROFILE_H
+#define LLVM_TRANSFORMS_CGPROFILE_H
+
+#include "llvm/ADT/MapVector.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+class CGProfilePass : public PassInfoMixin<CGProfilePass> {
+public:
+  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
+
+private:
+  void addModuleFlags(
+      Module &M,
+      MapVector<std::pair<Function *, Function *>, uint64_t> &Counts) const;
+};
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_CGPROFILE_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar.h b/linux-x64/clang/include/llvm/Transforms/Scalar.h
index 84c7bd4..9491e1b 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar.h
@@ -80,7 +80,6 @@
 // values.
 FunctionPass *createCallSiteSplittingPass();
 
-
 //===----------------------------------------------------------------------===//
 //
 // AggressiveDCE - This pass uses the SSA based Aggressive DCE algorithm.  This
@@ -89,7 +88,6 @@
 //
 FunctionPass *createAggressiveDCEPass();
 
-
 //===----------------------------------------------------------------------===//
 //
 // GuardWidening - An optimization over the @llvm.experimental.guard intrinsic
@@ -101,6 +99,16 @@
 
 //===----------------------------------------------------------------------===//
 //
+// LoopGuardWidening - Analogous to the GuardWidening pass, but restricted to a
+// single loop at a time for use within a LoopPassManager.  Desired effect is
+// to widen guards into preheader or a single guard within loop if that's not
+// possible.
+//
+Pass *createLoopGuardWideningPass();
+
+
+//===----------------------------------------------------------------------===//
+//
 // BitTrackingDCE - This pass uses a bit-tracking DCE algorithm in order to
 // remove computations of dead bits.
 //
@@ -128,27 +136,6 @@
 
 //===----------------------------------------------------------------------===//
 //
-// InstructionCombining - Combine instructions to form fewer, simple
-// instructions. This pass does not modify the CFG, and has a tendency to make
-// instructions dead, so a subsequent DCE pass is useful.
-//
-// This pass combines things like:
-//    %Y = add int 1, %X
-//    %Z = add int 1, %Y
-// into:
-//    %Z = add int 2, %X
-//
-FunctionPass *createInstructionCombiningPass(bool ExpensiveCombines = true);
-
-//===----------------------------------------------------------------------===//
-//
-// AggressiveInstCombiner - Combine expression patterns to form expressions with
-// fewer, simple instructions. This pass does not modify the CFG.
-//
-FunctionPass *createAggressiveInstCombinerPass();
-
-//===----------------------------------------------------------------------===//
-//
 // LICM - This pass is a loop invariant code motion and memory promotion pass.
 //
 Pass *createLICMPass();
@@ -189,6 +176,12 @@
 
 //===----------------------------------------------------------------------===//
 //
+// LoopInstSimplify - This pass simplifies instructions in a loop's body.
+//
+Pass *createLoopInstSimplifyPass();
+
+//===----------------------------------------------------------------------===//
+//
 // LoopUnroll - This pass is a simple loop unrolling pass.
 //
 Pass *createLoopUnrollPass(int OptLevel = 2, int Threshold = -1, int Count = -1,
@@ -199,6 +192,12 @@
 
 //===----------------------------------------------------------------------===//
 //
+// LoopUnrollAndJam - This pass is a simple loop unroll and jam pass.
+//
+Pass *createLoopUnrollAndJamPass(int OptLevel = 2);
+
+//===----------------------------------------------------------------------===//
+//
 // LoopReroll - This pass is a simple loop rerolling pass.
 //
 Pass *createLoopRerollPass();
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/CallSiteSplitting.h b/linux-x64/clang/include/llvm/Transforms/Scalar/CallSiteSplitting.h
index 5ab951a..b2ca2a1 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/CallSiteSplitting.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/CallSiteSplitting.h
@@ -21,7 +21,7 @@
 namespace llvm {
 
 struct CallSiteSplittingPass : PassInfoMixin<CallSiteSplittingPass> {
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h b/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
index d3322dc..84589bf 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/ConstantHoisting.h
@@ -60,7 +60,7 @@
 /// clients.
 namespace consthoist {
 
-/// \brief Keeps track of the user of a constant and the operand index where the
+/// Keeps track of the user of a constant and the operand index where the
 /// constant is used.
 struct ConstantUser {
   Instruction *Inst;
@@ -71,7 +71,7 @@
 
 using ConstantUseListType = SmallVector<ConstantUser, 8>;
 
-/// \brief Keeps track of a constant candidate and its uses.
+/// Keeps track of a constant candidate and its uses.
 struct ConstantCandidate {
   ConstantUseListType Uses;
   ConstantInt *ConstInt;
@@ -79,14 +79,14 @@
 
   ConstantCandidate(ConstantInt *ConstInt) : ConstInt(ConstInt) {}
 
-  /// \brief Add the user to the use list and update the cost.
+  /// Add the user to the use list and update the cost.
   void addUser(Instruction *Inst, unsigned Idx, unsigned Cost) {
     CumulativeCost += Cost;
     Uses.push_back(ConstantUser(Inst, Idx));
   }
 };
 
-/// \brief This represents a constant that has been rebased with respect to a
+/// This represents a constant that has been rebased with respect to a
 /// base constant. The difference to the base constant is recorded in Offset.
 struct RebasedConstantInfo {
   ConstantUseListType Uses;
@@ -98,7 +98,7 @@
 
 using RebasedConstantListType = SmallVector<RebasedConstantInfo, 4>;
 
-/// \brief A base constant and all its rebased constants.
+/// A base constant and all its rebased constants.
 struct ConstantInfo {
   ConstantInt *BaseConstant;
   RebasedConstantListType RebasedConstants;
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/EarlyCSE.h b/linux-x64/clang/include/llvm/Transforms/Scalar/EarlyCSE.h
index dca3b2d..faf03a4 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/EarlyCSE.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/EarlyCSE.h
@@ -21,7 +21,7 @@
 
 class Function;
 
-/// \brief A simple and fast domtree-based CSE pass.
+/// A simple and fast domtree-based CSE pass.
 ///
 /// This pass does a simple depth-first walk over the dominator tree,
 /// eliminating trivially redundant instructions and using instsimplify to
@@ -31,7 +31,7 @@
 struct EarlyCSEPass : PassInfoMixin<EarlyCSEPass> {
   EarlyCSEPass(bool UseMemorySSA = false) : UseMemorySSA(UseMemorySSA) {}
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 
   bool UseMemorySSA;
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/GVN.h b/linux-x64/clang/include/llvm/Transforms/Scalar/GVN.h
index 440d3f6..319bd56 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/GVN.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/GVN.h
@@ -28,7 +28,7 @@
 #include "llvm/IR/PassManager.h"
 #include "llvm/Support/Allocator.h"
 #include "llvm/Support/Compiler.h"
-#include "llvm/Transforms/Utils/OrderedInstructions.h"
+#include "llvm/Transforms/Utils/ImplicitControlFlowTracking.h"
 #include <cstdint>
 #include <utility>
 #include <vector>
@@ -69,7 +69,7 @@
 public:
   struct Expression;
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 
   /// This removes the specified instruction from
@@ -158,11 +158,8 @@
   AssumptionCache *AC;
   SetVector<BasicBlock *> DeadBlocks;
   OptimizationRemarkEmitter *ORE;
-  // Maps a block to the topmost instruction with implicit control flow in it.
-  DenseMap<const BasicBlock *, const Instruction *>
-      FirstImplicitControlFlowInsts;
+  ImplicitControlFlowTracking *ICF;
 
-  OrderedInstructions *OI;
   ValueTable VN;
 
   /// A mapping from value numbers to lists of Value*'s that
@@ -291,17 +288,17 @@
 /// loads are eliminated by the pass.
 FunctionPass *createGVNPass(bool NoLoads = false);
 
-/// \brief A simple and fast domtree-based GVN pass to hoist common expressions
+/// A simple and fast domtree-based GVN pass to hoist common expressions
 /// from sibling branches.
 struct GVNHoistPass : PassInfoMixin<GVNHoistPass> {
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Uses an "inverted" value numbering to decide the similarity of
+/// Uses an "inverted" value numbering to decide the similarity of
 /// expressions and sinks similar expressions into successors.
 struct GVNSinkPass : PassInfoMixin<GVNSinkPass> {
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/GVNExpression.h b/linux-x64/clang/include/llvm/Transforms/Scalar/GVNExpression.h
index 99dae15..8b34696 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/GVNExpression.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/GVNExpression.h
@@ -159,7 +159,7 @@
     return ET > ET_BasicStart && ET < ET_BasicEnd;
   }
 
-  /// \brief Swap two operands. Used during GVN to put commutative operands in
+  /// Swap two operands. Used during GVN to put commutative operands in
   /// order.
   void swapOperands(unsigned First, unsigned Second) {
     std::swap(Operands[First], Operands[Second]);
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/InstSimplifyPass.h b/linux-x64/clang/include/llvm/Transforms/Scalar/InstSimplifyPass.h
new file mode 100644
index 0000000..da79a13
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/InstSimplifyPass.h
@@ -0,0 +1,46 @@
+//===- InstSimplifyPass.h ---------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+/// \file
+///
+/// Defines passes for running instruction simplification across chunks of IR.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_INSTSIMPLIFYPASS_H
+#define LLVM_TRANSFORMS_UTILS_INSTSIMPLIFYPASS_H
+
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class FunctionPass;
+
+/// Run instruction simplification across each instruction in the function.
+///
+/// Instruction simplification has useful constraints in some contexts:
+/// - It will never introduce *new* instructions.
+/// - There is no need to iterate to a fixed point.
+///
+/// Many passes use instruction simplification as a library facility, but it may
+/// also be useful (in tests and other contexts) to have access to this very
+/// restricted transform at a pass granularity. However, for a much more
+/// powerful and comprehensive peephole optimization engine, see the
+/// `instcombine` pass instead.
+class InstSimplifyPass : public PassInfoMixin<InstSimplifyPass> {
+public:
+  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
+};
+
+/// Create a legacy pass that does instruction simplification on each
+/// instruction in a function.
+FunctionPass *createInstSimplifyLegacyPass();
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_UTILS_INSTSIMPLIFYPASS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/JumpThreading.h b/linux-x64/clang/include/llvm/Transforms/Scalar/JumpThreading.h
index b3493a2..c8376dd 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/JumpThreading.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/JumpThreading.h
@@ -23,6 +23,7 @@
 #include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/Analysis/BlockFrequencyInfo.h"
 #include "llvm/Analysis/BranchProbabilityInfo.h"
+#include "llvm/IR/DomTreeUpdater.h"
 #include "llvm/IR/ValueHandle.h"
 #include <memory>
 #include <utility>
@@ -34,7 +35,7 @@
 class BranchInst;
 class CmpInst;
 class Constant;
-class DeferredDominance;
+class DomTreeUpdater;
 class Function;
 class Instruction;
 class IntrinsicInst;
@@ -78,7 +79,7 @@
   TargetLibraryInfo *TLI;
   LazyValueInfo *LVI;
   AliasAnalysis *AA;
-  DeferredDominance *DDT;
+  DomTreeUpdater *DTU;
   std::unique_ptr<BlockFrequencyInfo> BFI;
   std::unique_ptr<BranchProbabilityInfo> BPI;
   bool HasProfileData = false;
@@ -109,8 +110,8 @@
 
   // Glue for old PM.
   bool runImpl(Function &F, TargetLibraryInfo *TLI_, LazyValueInfo *LVI_,
-               AliasAnalysis *AA_, DeferredDominance *DDT_,
-               bool HasProfileData_, std::unique_ptr<BlockFrequencyInfo> BFI_,
+               AliasAnalysis *AA_, DomTreeUpdater *DTU_, bool HasProfileData_,
+               std::unique_ptr<BlockFrequencyInfo> BFI_,
                std::unique_ptr<BranchProbabilityInfo> BPI_);
 
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h
index 5eddd5f..e1b3379 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopAccessAnalysisPrinter.h
@@ -15,7 +15,7 @@
 
 namespace llvm {
 
-/// \brief Printer pass for the \c LoopAccessInfo results.
+/// Printer pass for the \c LoopAccessInfo results.
 class LoopAccessInfoPrinterPass
     : public PassInfoMixin<LoopAccessInfoPrinterPass> {
   raw_ostream &OS;
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopDataPrefetch.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopDataPrefetch.h
index 12c7a03..e1ad67a 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopDataPrefetch.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopDataPrefetch.h
@@ -24,7 +24,7 @@
 public:
   LoopDataPrefetchPass() = default;
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopInstSimplify.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopInstSimplify.h
new file mode 100644
index 0000000..04dc79c
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopInstSimplify.h
@@ -0,0 +1,34 @@
+//===- LoopInstSimplify.h - Loop Inst Simplify Pass -------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This pass performs lightweight instruction simplification on loop bodies.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_SCALAR_LOOPINSTSIMPLIFY_H
+#define LLVM_TRANSFORMS_SCALAR_LOOPINSTSIMPLIFY_H
+
+#include "llvm/Analysis/LoopAnalysisManager.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class Loop;
+class LPMUpdater;
+
+/// Performs Loop Inst Simplify Pass.
+class LoopInstSimplifyPass : public PassInfoMixin<LoopInstSimplifyPass> {
+public:
+  PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
+                        LoopStandardAnalysisResults &AR, LPMUpdater &U);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_SCALAR_LOOPINSTSIMPLIFY_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopPassManager.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopPassManager.h
index 56a45ed..5f61c39 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopPassManager.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopPassManager.h
@@ -71,7 +71,7 @@
 extern template class PassManager<Loop, LoopAnalysisManager,
                                   LoopStandardAnalysisResults &, LPMUpdater &>;
 
-/// \brief The Loop pass manager.
+/// The Loop pass manager.
 ///
 /// See the documentation for the PassManager template for details. It runs
 /// a sequence of Loop passes over each Loop that the manager is run over. This
@@ -253,7 +253,7 @@
       : Worklist(Worklist), LAM(LAM) {}
 };
 
-/// \brief Adaptor that maps from a function to its loops.
+/// Adaptor that maps from a function to its loops.
 ///
 /// Designed to allow composition of a LoopPass(Manager) and a
 /// FunctionPassManager. Note that if this pass is constructed with a \c
@@ -270,7 +270,7 @@
     LoopCanonicalizationFPM.addPass(LCSSAPass());
   }
 
-  /// \brief Runs the loop passes across every loop in the function.
+  /// Runs the loop passes across every loop in the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM) {
     // Before we even compute any loop analyses, first run a miniature function
     // pass pipeline to put loops into their canonical form. Note that we can
@@ -381,7 +381,7 @@
   FunctionPassManager LoopCanonicalizationFPM;
 };
 
-/// \brief A function to deduce a loop pass type and wrap it in the templated
+/// A function to deduce a loop pass type and wrap it in the templated
 /// adaptor.
 template <typename LoopPassT>
 FunctionToLoopPassAdaptor<LoopPassT>
@@ -389,7 +389,7 @@
   return FunctionToLoopPassAdaptor<LoopPassT>(std::move(Pass), DebugLogging);
 }
 
-/// \brief Pass for printing a loop's contents as textual IR.
+/// Pass for printing a loop's contents as textual IR.
 class PrintLoopPass : public PassInfoMixin<PrintLoopPass> {
   raw_ostream &OS;
   std::string Banner;
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollAndJamPass.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollAndJamPass.h
new file mode 100644
index 0000000..fc69aa3
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LoopUnrollAndJamPass.h
@@ -0,0 +1,35 @@
+//===- LoopUnrollAndJamPass.h -----------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_SCALAR_LOOPUNROLLANDJAMPASS_H
+#define LLVM_TRANSFORMS_SCALAR_LOOPUNROLLANDJAMPASS_H
+
+#include "llvm/Analysis/LoopAnalysisManager.h"
+#include "llvm/Analysis/LoopInfo.h"
+#include "llvm/IR/PassManager.h"
+
+namespace llvm {
+
+class Loop;
+struct LoopStandardAnalysisResults;
+class LPMUpdater;
+
+/// A simple loop rotation transformation.
+class LoopUnrollAndJamPass : public PassInfoMixin<LoopUnrollAndJamPass> {
+  const int OptLevel;
+
+public:
+  explicit LoopUnrollAndJamPass(int OptLevel = 2) : OptLevel(OptLevel) {}
+  PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM,
+                        LoopStandardAnalysisResults &AR, LPMUpdater &U);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_SCALAR_LOOPUNROLLANDJAMPASS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h b/linux-x64/clang/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h
index ab9dec0..b6ee652 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/LowerExpectIntrinsic.h
@@ -22,7 +22,7 @@
 namespace llvm {
 
 struct LowerExpectIntrinsicPass : PassInfoMixin<LowerExpectIntrinsicPass> {
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   ///
   /// This will lower all of the expect intrinsic calls in this function into
   /// branch weight metadata. That metadata will subsequently feed the analysis
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h b/linux-x64/clang/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h
index 3cad7bb..48df09c 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/MergedLoadStoreMotion.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 //
 //! \file
-//! \brief This pass performs merges of loads and stores on both sides of a
+//! This pass performs merges of loads and stores on both sides of a
 //  diamond (hammock). It hoists the loads and sinks the stores.
 //
 // The algorithm iteratively hoists two loads to the same address out of a
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/NewGVN.h b/linux-x64/clang/include/llvm/Transforms/Scalar/NewGVN.h
index 05db255..3f75418 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/NewGVN.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/NewGVN.h
@@ -23,7 +23,7 @@
 
 class NewGVNPass : public PassInfoMixin<NewGVNPass> {
 public:
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, AnalysisManager<Function> &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h b/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
index 9997dfa..ba7586d 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/Reassociate.h
@@ -29,6 +29,7 @@
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/PassManager.h"
 #include "llvm/IR/ValueHandle.h"
+#include <deque>
 
 namespace llvm {
 
@@ -54,7 +55,7 @@
   return LHS.Rank > RHS.Rank; // Sort so that highest rank goes to start.
 }
 
-/// \brief Utility class representing a base and exponent pair which form one
+/// Utility class representing a base and exponent pair which form one
 /// factor of some product.
 struct Factor {
   Value *Base;
@@ -69,9 +70,14 @@
 
 /// Reassociate commutative expressions.
 class ReassociatePass : public PassInfoMixin<ReassociatePass> {
+public:
+  using OrderedSet =
+      SetVector<AssertingVH<Instruction>, std::deque<AssertingVH<Instruction>>>;
+
+protected:
   DenseMap<BasicBlock *, unsigned> RankMap;
   DenseMap<AssertingVH<Value>, unsigned> ValueRankMap;
-  SetVector<AssertingVH<Instruction>> RedoInsts;
+  OrderedSet RedoInsts;
 
   // Arbitrary, but prevents quadratic behavior.
   static const unsigned GlobalReassociateLimit = 10;
@@ -108,8 +114,7 @@
                      SmallVectorImpl<reassociate::ValueEntry> &Ops);
   Value *RemoveFactorFromExpression(Value *V, Value *Factor);
   void EraseInst(Instruction *I);
-  void RecursivelyEraseDeadInsts(Instruction *I,
-                                 SetVector<AssertingVH<Instruction>> &Insts);
+  void RecursivelyEraseDeadInsts(Instruction *I, OrderedSet &Insts);
   void OptimizeInst(Instruction *I);
   Instruction *canonicalizeNegConstExpr(Instruction *I);
   void BuildPairMap(ReversePostOrderTraversal<Function *> &RPOT);
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
index 4a321e7..b36c6f4 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SROA.h
@@ -45,7 +45,7 @@
 
 } // end namespace sroa
 
-/// \brief An optimization pass providing Scalar Replacement of Aggregates.
+/// An optimization pass providing Scalar Replacement of Aggregates.
 ///
 /// This pass takes allocations which can be completely analyzed (that is, they
 /// don't escape) and tries to turn them into scalar SSA values. There are
@@ -68,7 +68,7 @@
   DominatorTree *DT = nullptr;
   AssumptionCache *AC = nullptr;
 
-  /// \brief Worklist of alloca instructions to simplify.
+  /// Worklist of alloca instructions to simplify.
   ///
   /// Each alloca in the function is added to this. Each new alloca formed gets
   /// added to it as well to recursively simplify unless that alloca can be
@@ -77,12 +77,12 @@
   /// already present to ensure it is re-visited.
   SetVector<AllocaInst *, SmallVector<AllocaInst *, 16>> Worklist;
 
-  /// \brief A collection of instructions to delete.
+  /// A collection of instructions to delete.
   /// We try to batch deletions to simplify code and make things a bit more
   /// efficient.
   SetVector<Instruction *, SmallVector<Instruction *, 8>> DeadInsts;
 
-  /// \brief Post-promotion worklist.
+  /// Post-promotion worklist.
   ///
   /// Sometimes we discover an alloca which has a high probability of becoming
   /// viable for SROA after a round of promotion takes place. In those cases,
@@ -92,17 +92,17 @@
   /// the event they are deleted.
   SetVector<AllocaInst *, SmallVector<AllocaInst *, 16>> PostPromotionWorklist;
 
-  /// \brief A collection of alloca instructions we can directly promote.
+  /// A collection of alloca instructions we can directly promote.
   std::vector<AllocaInst *> PromotableAllocas;
 
-  /// \brief A worklist of PHIs to speculate prior to promoting allocas.
+  /// A worklist of PHIs to speculate prior to promoting allocas.
   ///
   /// All of these PHIs have been checked for the safety of speculation and by
   /// being speculated will allow promoting allocas currently in the promotable
   /// queue.
   SetVector<PHINode *, SmallVector<PHINode *, 2>> SpeculatablePHIs;
 
-  /// \brief A worklist of select instructions to speculate prior to promoting
+  /// A worklist of select instructions to speculate prior to promoting
   /// allocas.
   ///
   /// All of these select instructions have been checked for the safety of
@@ -113,7 +113,7 @@
 public:
   SROA() = default;
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 
 private:
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h
index 63bfe63..eed50ec 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SimpleLoopUnswitch.h
@@ -17,9 +17,9 @@
 
 namespace llvm {
 
-/// This pass transforms loops that contain branches on loop-invariant
-/// conditions to have multiple loops. For example, it turns the left into the
-/// right code:
+/// This pass transforms loops that contain branches or switches on loop-
+/// invariant conditions to have multiple loops. For example, it turns the left
+/// into the right code:
 ///
 ///  for (...)                  if (lic)
 ///    A                          for (...)
@@ -35,6 +35,31 @@
 /// This pass expects LICM to be run before it to hoist invariant conditions out
 /// of the loop, to make the unswitching opportunity obvious.
 ///
+/// There is a taxonomy of unswitching that we use to classify different forms
+/// of this transformaiton:
+///
+/// - Trival unswitching: this is when the condition can be unswitched without
+///   cloning any code from inside the loop. A non-trivial unswitch requires
+///   code duplication.
+///
+/// - Full unswitching: this is when the branch or switch is completely moved
+///   from inside the loop to outside the loop. Partial unswitching removes the
+///   branch from the clone of the loop but must leave a (somewhat simplified)
+///   branch in the original loop. While theoretically partial unswitching can
+///   be done for switches, the requirements are extreme - we need the loop
+///   invariant input to the switch to be sufficient to collapse to a single
+///   successor in each clone.
+///
+/// This pass always does trivial, full unswitching for both branches and
+/// switches. For branches, it also always does trivial, partial unswitching.
+///
+/// If enabled (via the constructor's `NonTrivial` parameter), this pass will
+/// additionally do non-trivial, full unswitching for branches and switches, and
+/// will do non-trivial, partial unswitching for branches.
+///
+/// Because partial unswitching of switches is extremely unlikely to be possible
+/// in practice and significantly complicates the implementation, this pass does
+/// not currently implement that in any mode.
 class SimpleLoopUnswitchPass : public PassInfoMixin<SimpleLoopUnswitchPass> {
   bool NonTrivial;
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SimplifyCFG.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SimplifyCFG.h
index 6198957..ce0a35f 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SimplifyCFG.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SimplifyCFG.h
@@ -15,7 +15,7 @@
 #ifndef LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
 #define LLVM_TRANSFORMS_SCALAR_SIMPLIFYCFG_H
 
-#include "llvm/Analysis/Utils/Local.h"
+#include "llvm/Transforms/Utils/Local.h"
 #include "llvm/IR/Function.h"
 #include "llvm/IR/PassManager.h"
 
@@ -46,7 +46,7 @@
   /// Construct a pass with optional optimizations.
   SimplifyCFGPass(const SimplifyCFGOptions &PassOptions);
 
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h
index f39e03d..4a0bfd7 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculateAroundPHIs.h
@@ -102,7 +102,7 @@
 /// here are relatively simple ones around execution and codesize cost, without
 /// any need to consider simplifications or other transformations.
 struct SpeculateAroundPHIsPass : PassInfoMixin<SpeculateAroundPHIsPass> {
-  /// \brief Run the pass over the function.
+  /// Run the pass over the function.
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculativeExecution.h b/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculativeExecution.h
index 068f817..d00e950 100644
--- a/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculativeExecution.h
+++ b/linux-x64/clang/include/llvm/Transforms/Scalar/SpeculativeExecution.h
@@ -82,7 +82,7 @@
   bool considerHoistingFromTo(BasicBlock &FromBlock, BasicBlock &ToBlock);
 
   // If true, this pass is a nop unless the target architecture has branch
-  // divergence.  
+  // divergence.
   const bool OnlyIfDivergentTarget = false;
 
   TargetTransformInfo *TTI = nullptr;
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils.h b/linux-x64/clang/include/llvm/Transforms/Utils.h
index cfb89d1..0d997ce 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils.h
@@ -110,13 +110,6 @@
 Pass *createLoopSimplifyPass();
 extern char &LoopSimplifyID;
 
-//===----------------------------------------------------------------------===//
-//
-// InstructionSimplifier - Remove redundant instructions.
-//
-FunctionPass *createInstructionSimplifierPass();
-extern char &InstructionSimplifierID;
-
 /// This function returns a new pass that downgrades the debug info in the
 /// module to line tables only.
 ModulePass *createStripNonLineTableDebugInfoPass();
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
index 6f0d2de..63b5e6c 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/BasicBlockUtils.h
@@ -20,6 +20,7 @@
 #include "llvm/ADT/ArrayRef.h"
 #include "llvm/IR/BasicBlock.h"
 #include "llvm/IR/CFG.h"
+#include "llvm/IR/DomTreeUpdater.h"
 #include "llvm/IR/InstrTypes.h"
 #include <cassert>
 
@@ -27,8 +28,8 @@
 
 class BlockFrequencyInfo;
 class BranchProbabilityInfo;
-class DeferredDominance;
 class DominatorTree;
+class DomTreeUpdater;
 class Function;
 class Instruction;
 class LoopInfo;
@@ -39,7 +40,7 @@
 class Value;
 
 /// Delete the specified block, which must have no predecessors.
-void DeleteDeadBlock(BasicBlock *BB, DeferredDominance *DDT = nullptr);
+void DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU = nullptr);
 
 /// We know that BB has one predecessor. If there are any single-entry PHI nodes
 /// in it, fold them away. This handles the case when all entries to the PHI
@@ -56,7 +57,7 @@
 
 /// Attempts to merge a block into its predecessor, if possible. The return
 /// value indicates success or failure.
-bool MergeBlockIntoPredecessor(BasicBlock *BB, DominatorTree *DT = nullptr,
+bool MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU = nullptr,
                                LoopInfo *LI = nullptr,
                                MemoryDependenceResults *MemDep = nullptr);
 
@@ -228,7 +229,8 @@
 /// value defined by a PHI, propagate the right value into the return. It
 /// returns the new return instruction in the predecessor.
 ReturnInst *FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB,
-                                       BasicBlock *Pred);
+                                       BasicBlock *Pred,
+                                       DomTreeUpdater *DTU = nullptr);
 
 /// Split the containing block at the specified instruction - everything before
 /// SplitBefore stays in the old basic block, and the rest of the instructions
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h b/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
index 3a71559..bdcdf6f 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/BuildLibCalls.h
@@ -111,15 +111,54 @@
   Value *emitFPutC(Value *Char, Value *File, IRBuilder<> &B,
                    const TargetLibraryInfo *TLI);
 
-  /// Emit a call to the puts function. Str is required to be a pointer and
+  /// Emit a call to the fputc_unlocked function. This assumes that Char is an
+  /// i32, and File is a pointer to FILE.
+  Value *emitFPutCUnlocked(Value *Char, Value *File, IRBuilder<> &B,
+                           const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the fputs function. Str is required to be a pointer and
   /// File is a pointer to FILE.
   Value *emitFPutS(Value *Str, Value *File, IRBuilder<> &B,
                    const TargetLibraryInfo *TLI);
 
+  /// Emit a call to the fputs_unlocked function. Str is required to be a
+  /// pointer and File is a pointer to FILE.
+  Value *emitFPutSUnlocked(Value *Str, Value *File, IRBuilder<> &B,
+                           const TargetLibraryInfo *TLI);
+
   /// Emit a call to the fwrite function. This assumes that Ptr is a pointer,
   /// Size is an 'intptr_t', and File is a pointer to FILE.
   Value *emitFWrite(Value *Ptr, Value *Size, Value *File, IRBuilder<> &B,
                     const DataLayout &DL, const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the malloc function.
+  Value *emitMalloc(Value *Num, IRBuilder<> &B, const DataLayout &DL,
+                    const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the calloc function.
+  Value *emitCalloc(Value *Num, Value *Size, const AttributeList &Attrs,
+                    IRBuilder<> &B, const TargetLibraryInfo &TLI);
+
+  /// Emit a call to the fwrite_unlocked function. This assumes that Ptr is a
+  /// pointer, Size is an 'intptr_t', N is nmemb and File is a pointer to FILE.
+  Value *emitFWriteUnlocked(Value *Ptr, Value *Size, Value *N, Value *File,
+                            IRBuilder<> &B, const DataLayout &DL,
+                            const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the fgetc_unlocked function. File is a pointer to FILE.
+  Value *emitFGetCUnlocked(Value *File, IRBuilder<> &B,
+                           const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the fgets_unlocked function. Str is required to be a
+  /// pointer, Size is an i32 and File is a pointer to FILE.
+  Value *emitFGetSUnlocked(Value *Str, Value *Size, Value *File, IRBuilder<> &B,
+                           const TargetLibraryInfo *TLI);
+
+  /// Emit a call to the fread_unlocked function. This assumes that Ptr is a
+  /// pointer, Size is an 'intptr_t', N is nmemb and File is a pointer to FILE.
+  Value *emitFReadUnlocked(Value *Ptr, Value *Size, Value *N, Value *File,
+                           IRBuilder<> &B, const DataLayout &DL,
+                           const TargetLibraryInfo *TLI);
 }
 
 #endif
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h b/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
index cd02ca6..e4d6053 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/Cloning.h
@@ -22,6 +22,7 @@
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/AliasAnalysis.h"
 #include "llvm/Analysis/AssumptionCache.h"
+#include "llvm/Analysis/InlineCost.h"
 #include "llvm/IR/CallSite.h"
 #include "llvm/IR/ValueHandle.h"
 #include "llvm/Transforms/Utils/ValueMapper.h"
@@ -232,15 +233,18 @@
 /// and all varargs at the callsite will be passed to any calls to
 /// ForwardVarArgsTo. The caller of InlineFunction has to make sure any varargs
 /// are only used by ForwardVarArgsTo.
-bool InlineFunction(CallInst *C, InlineFunctionInfo &IFI,
-                    AAResults *CalleeAAR = nullptr, bool InsertLifetime = true);
-bool InlineFunction(InvokeInst *II, InlineFunctionInfo &IFI,
-                    AAResults *CalleeAAR = nullptr, bool InsertLifetime = true);
-bool InlineFunction(CallSite CS, InlineFunctionInfo &IFI,
-                    AAResults *CalleeAAR = nullptr, bool InsertLifetime = true,
-                    Function *ForwardVarArgsTo = nullptr);
+InlineResult InlineFunction(CallInst *C, InlineFunctionInfo &IFI,
+                            AAResults *CalleeAAR = nullptr,
+                            bool InsertLifetime = true);
+InlineResult InlineFunction(InvokeInst *II, InlineFunctionInfo &IFI,
+                            AAResults *CalleeAAR = nullptr,
+                            bool InsertLifetime = true);
+InlineResult InlineFunction(CallSite CS, InlineFunctionInfo &IFI,
+                            AAResults *CalleeAAR = nullptr,
+                            bool InsertLifetime = true,
+                            Function *ForwardVarArgsTo = nullptr);
 
-/// \brief Clones a loop \p OrigLoop.  Returns the loop and the blocks in \p
+/// Clones a loop \p OrigLoop.  Returns the loop and the blocks in \p
 /// Blocks.
 ///
 /// Updates LoopInfo and DominatorTree assuming the loop is dominated by block
@@ -252,7 +256,7 @@
                              DominatorTree *DT,
                              SmallVectorImpl<BasicBlock *> &Blocks);
 
-/// \brief Remaps instructions in \p Blocks using the mapping in \p VMap.
+/// Remaps instructions in \p Blocks using the mapping in \p VMap.
 void remapInstructionsInBlocks(const SmallVectorImpl<BasicBlock *> &Blocks,
                                ValueToValueMapTy &VMap);
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/CodeExtractor.h b/linux-x64/clang/include/llvm/Transforms/Utils/CodeExtractor.h
index 63d3451..0e5254a 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/CodeExtractor.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/CodeExtractor.h
@@ -34,7 +34,7 @@
 class Type;
 class Value;
 
-  /// \brief Utility class for extracting code into a new function.
+  /// Utility class for extracting code into a new function.
   ///
   /// This utility provides a simple interface for extracting some sequence of
   /// code into its own function, replacing it with a call to that function. It
@@ -65,20 +65,22 @@
     Type *RetTy;
 
   public:
-    /// \brief Create a code extractor for a sequence of blocks.
+    /// Create a code extractor for a sequence of blocks.
     ///
     /// Given a sequence of basic blocks where the first block in the sequence
     /// dominates the rest, prepare a code extractor object for pulling this
     /// sequence out into its new function. When a DominatorTree is also given,
     /// extra checking and transformations are enabled. If AllowVarArgs is true,
     /// vararg functions can be extracted. This is safe, if all vararg handling
-    /// code is extracted, including vastart.
+    /// code is extracted, including vastart. If AllowAlloca is true, then
+    /// extraction of blocks containing alloca instructions would be possible,
+    /// however code extractor won't validate whether extraction is legal.
     CodeExtractor(ArrayRef<BasicBlock *> BBs, DominatorTree *DT = nullptr,
                   bool AggregateArgs = false, BlockFrequencyInfo *BFI = nullptr,
                   BranchProbabilityInfo *BPI = nullptr,
-                  bool AllowVarArgs = false);
+                  bool AllowVarArgs = false, bool AllowAlloca = false);
 
-    /// \brief Create a code extractor for a loop body.
+    /// Create a code extractor for a loop body.
     ///
     /// Behaves just like the generic code sequence constructor, but uses the
     /// block sequence of the loop.
@@ -86,27 +88,19 @@
                   BlockFrequencyInfo *BFI = nullptr,
                   BranchProbabilityInfo *BPI = nullptr);
 
-    /// \brief Check to see if a block is valid for extraction.
-    ///
-    /// Blocks containing EHPads, allocas and invokes are not valid. If
-    /// AllowVarArgs is true, blocks with vastart can be extracted. This is
-    /// safe, if all vararg handling code is extracted, including vastart.
-    static bool isBlockValidForExtraction(const BasicBlock &BB,
-                                          bool AllowVarArgs);
-
-    /// \brief Perform the extraction, returning the new function.
+    /// Perform the extraction, returning the new function.
     ///
     /// Returns zero when called on a CodeExtractor instance where isEligible
     /// returns false.
     Function *extractCodeRegion();
 
-    /// \brief Test whether this code extractor is eligible.
+    /// Test whether this code extractor is eligible.
     ///
     /// Based on the blocks used when constructing the code extractor,
     /// determine whether it is eligible for extraction.
     bool isEligible() const { return !Blocks.empty(); }
 
-    /// \brief Compute the set of input values and output values for the code.
+    /// Compute the set of input values and output values for the code.
     ///
     /// These can be used either when performing the extraction or to evaluate
     /// the expected size of a call to the extracted function. Note that this
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/Evaluator.h b/linux-x64/clang/include/llvm/Transforms/Utils/Evaluator.h
index 0e987b9..9908ae6 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/Evaluator.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/Evaluator.h
@@ -18,6 +18,7 @@
 #include "llvm/ADT/SmallPtrSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/IR/BasicBlock.h"
+#include "llvm/IR/CallSite.h"
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/Value.h"
 #include "llvm/Support/Casting.h"
@@ -73,6 +74,18 @@
     ValueStack.back()[V] = C;
   }
 
+  /// Given call site return callee and list of its formal arguments
+  Function *getCalleeWithFormalArgs(CallSite &CS,
+                                    SmallVector<Constant *, 8> &Formals);
+
+  /// Given call site and callee returns list of callee formal argument
+  /// values converting them when necessary
+  bool getFormalParams(CallSite &CS, Function *F,
+                       SmallVector<Constant *, 8> &Formals);
+
+  /// Casts call result to a type of bitcast call expression
+  Constant *castCallResultIfNeeded(Value *CallExpr, Constant *RV);
+
   const DenseMap<Constant*, Constant*> &getMutatedMemory() const {
     return MutatedMemory;
   }
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/FunctionComparator.h b/linux-x64/clang/include/llvm/Transforms/Utils/FunctionComparator.h
index 7698a06..35ba095 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/FunctionComparator.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/FunctionComparator.h
@@ -18,7 +18,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/IR/Attributes.h"
-#include "llvm/IR/Instructions.h" 
+#include "llvm/IR/Instructions.h"
 #include "llvm/IR/Operator.h"
 #include "llvm/IR/ValueMap.h"
 #include "llvm/Support/AtomicOrdering.h"
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/ImplicitControlFlowTracking.h b/linux-x64/clang/include/llvm/Transforms/Utils/ImplicitControlFlowTracking.h
new file mode 100644
index 0000000..d45c013
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/ImplicitControlFlowTracking.h
@@ -0,0 +1,62 @@
+//===-- ImplicitControlFlowTracking.h ---------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+// This class allows to keep track on instructions with implicit control flow.
+// These are instructions that may not pass execution to their successors. For
+// example, throwing calls and guards do not always do this. If we need to know
+// for sure that some instruction is guaranteed to execute if the given block
+// is reached, then we need to make sure that there is no implicit control flow
+// instruction (ICFI) preceeding it. For example, this check is required if we
+// perform PRE moving non-speculable instruction to other place.
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_IMPLICITCONTROLFLOWTRACKING_H
+#define LLVM_TRANSFORMS_UTILS_IMPLICITCONTROLFLOWTRACKING_H
+
+#include "llvm/IR/Dominators.h"
+#include "llvm/Transforms/Utils/OrderedInstructions.h"
+
+namespace llvm {
+
+class ImplicitControlFlowTracking {
+public:
+  ImplicitControlFlowTracking(DominatorTree *DT)
+      : OI(OrderedInstructions(DT)) {}
+
+  // Returns the topmost instruction with implicit control flow from the given
+  // basic block. Returns nullptr if there is no such instructions in the block.
+  const Instruction *getFirstICFI(const BasicBlock *BB);
+
+  // Returns true if at least one instruction from the given basic block has
+  // implicit control flow.
+  bool hasICF(const BasicBlock *BB);
+
+  // Returns true if the first ICFI of Insn's block exists and dominates Insn.
+  bool isDominatedByICFIFromSameBlock(const Instruction *Insn);
+
+  // Clears information about this particular block.
+  void invalidateBlock(const BasicBlock *BB);
+
+  // Invalidates all information from this tracking.
+  void clear();
+
+private:
+  // Fills information about the given block's implicit control flow.
+  void fill(const BasicBlock *BB);
+
+  // Maps a block to the topmost instruction with implicit control flow in it.
+  DenseMap<const BasicBlock *, const Instruction *>
+      FirstImplicitControlFlowInsts;
+  OrderedInstructions OI;
+  // Blocks for which we have the actual information.
+  SmallPtrSet<const BasicBlock *, 8> KnownBlocks;
+};
+
+} // llvm
+
+#endif // LLVM_TRANSFORMS_UTILS_IMPLICITCONTROLFLOWTRACKING_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h b/linux-x64/clang/include/llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h
index b7a3d13..b55a989 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/ImportedFunctionsInliningStatistics.h
@@ -22,7 +22,7 @@
 namespace llvm {
 class Module;
 class Function;
-/// \brief Calculate and dump ThinLTO specific inliner stats.
+/// Calculate and dump ThinLTO specific inliner stats.
 /// The main statistics are:
 /// (1) Number of inlined imported functions,
 /// (2) Number of imported functions inlined into importing module (indirect),
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/IntegerDivision.h b/linux-x64/clang/include/llvm/Transforms/Utils/IntegerDivision.h
index 0ec3321..5d9927e 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/IntegerDivision.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/IntegerDivision.h
@@ -29,7 +29,7 @@
   /// e.g. when more information about the operands are known. Implements both
   /// 32bit and 64bit scalar division.
   ///
-  /// @brief Replace Rem with generated code.
+  /// Replace Rem with generated code.
   bool expandRemainder(BinaryOperator *Rem);
 
   /// Generate code to divide two integers, replacing Div with the generated
@@ -38,7 +38,7 @@
   /// when more information about the operands are known. Implements both
   /// 32bit and 64bit scalar division.
   ///
-  /// @brief Replace Div with generated code.
+  /// Replace Div with generated code.
   bool expandDivision(BinaryOperator* Div);
 
   /// Generate code to calculate the remainder of two integers, replacing Rem
@@ -46,26 +46,26 @@
   /// makes it useful for targets with little or no support for less than
   /// 32 bit arithmetic.
   ///
-  /// @brief Replace Rem with generated code.
+  /// Replace Rem with generated code.
   bool expandRemainderUpTo32Bits(BinaryOperator *Rem);
 
   /// Generate code to calculate the remainder of two integers, replacing Rem
   /// with the generated code. Uses ExpandReminder with a 64bit Rem.
   ///
-  /// @brief Replace Rem with generated code.
+  /// Replace Rem with generated code.
   bool expandRemainderUpTo64Bits(BinaryOperator *Rem);
 
   /// Generate code to divide two integers, replacing Div with the generated
   /// code. Uses ExpandDivision with a 32bit Div which makes it useful for
   /// targets with little or no support for less than 32 bit arithmetic.
   ///
-  /// @brief Replace Rem with generated code.
+  /// Replace Rem with generated code.
   bool expandDivisionUpTo32Bits(BinaryOperator *Div);
 
   /// Generate code to divide two integers, replacing Div with the generated
   /// code. Uses ExpandDivision with a 64bit Div.
   ///
-  /// @brief Replace Rem with generated code.
+  /// Replace Rem with generated code.
   bool expandDivisionUpTo64Bits(BinaryOperator *Div);
 
 } // End llvm namespace
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/Local.h b/linux-x64/clang/include/llvm/Transforms/Utils/Local.h
new file mode 100644
index 0000000..97f4a51
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/Local.h
@@ -0,0 +1,480 @@
+//===- Local.h - Functions to perform local transformations -----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This family of functions perform various local transformations to the
+// program.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_LOCAL_H
+#define LLVM_TRANSFORMS_UTILS_LOCAL_H
+
+#include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/STLExtras.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallVector.h"
+#include "llvm/ADT/TinyPtrVector.h"
+#include "llvm/Analysis/AliasAnalysis.h"
+#include "llvm/Analysis/Utils/Local.h"
+#include "llvm/IR/CallSite.h"
+#include "llvm/IR/Constant.h"
+#include "llvm/IR/Constants.h"
+#include "llvm/IR/DataLayout.h"
+#include "llvm/IR/DomTreeUpdater.h"
+#include "llvm/IR/Dominators.h"
+#include "llvm/IR/GetElementPtrTypeIterator.h"
+#include "llvm/IR/Operator.h"
+#include "llvm/IR/Type.h"
+#include "llvm/IR/User.h"
+#include "llvm/IR/Value.h"
+#include "llvm/Support/Casting.h"
+#include <cstdint>
+#include <limits>
+
+namespace llvm {
+
+class AllocaInst;
+class AssumptionCache;
+class BasicBlock;
+class BranchInst;
+class CallInst;
+class DbgVariableIntrinsic;
+class DbgValueInst;
+class DIBuilder;
+class Function;
+class Instruction;
+class LazyValueInfo;
+class LoadInst;
+class MDNode;
+class PHINode;
+class StoreInst;
+class TargetLibraryInfo;
+class TargetTransformInfo;
+
+/// A set of parameters used to control the transforms in the SimplifyCFG pass.
+/// Options may change depending on the position in the optimization pipeline.
+/// For example, canonical form that includes switches and branches may later be
+/// replaced by lookup tables and selects.
+struct SimplifyCFGOptions {
+  int BonusInstThreshold;
+  bool ForwardSwitchCondToPhi;
+  bool ConvertSwitchToLookupTable;
+  bool NeedCanonicalLoop;
+  bool SinkCommonInsts;
+  AssumptionCache *AC;
+
+  SimplifyCFGOptions(unsigned BonusThreshold = 1,
+                     bool ForwardSwitchCond = false,
+                     bool SwitchToLookup = false, bool CanonicalLoops = true,
+                     bool SinkCommon = false,
+                     AssumptionCache *AssumpCache = nullptr)
+      : BonusInstThreshold(BonusThreshold),
+        ForwardSwitchCondToPhi(ForwardSwitchCond),
+        ConvertSwitchToLookupTable(SwitchToLookup),
+        NeedCanonicalLoop(CanonicalLoops),
+        SinkCommonInsts(SinkCommon),
+        AC(AssumpCache) {}
+
+  // Support 'builder' pattern to set members by name at construction time.
+  SimplifyCFGOptions &bonusInstThreshold(int I) {
+    BonusInstThreshold = I;
+    return *this;
+  }
+  SimplifyCFGOptions &forwardSwitchCondToPhi(bool B) {
+    ForwardSwitchCondToPhi = B;
+    return *this;
+  }
+  SimplifyCFGOptions &convertSwitchToLookupTable(bool B) {
+    ConvertSwitchToLookupTable = B;
+    return *this;
+  }
+  SimplifyCFGOptions &needCanonicalLoops(bool B) {
+    NeedCanonicalLoop = B;
+    return *this;
+  }
+  SimplifyCFGOptions &sinkCommonInsts(bool B) {
+    SinkCommonInsts = B;
+    return *this;
+  }
+  SimplifyCFGOptions &setAssumptionCache(AssumptionCache *Cache) {
+    AC = Cache;
+    return *this;
+  }
+};
+
+//===----------------------------------------------------------------------===//
+//  Local constant propagation.
+//
+
+/// If a terminator instruction is predicated on a constant value, convert it
+/// into an unconditional branch to the constant destination.
+/// This is a nontrivial operation because the successors of this basic block
+/// must have their PHI nodes updated.
+/// Also calls RecursivelyDeleteTriviallyDeadInstructions() on any branch/switch
+/// conditions and indirectbr addresses this might make dead if
+/// DeleteDeadConditions is true.
+bool ConstantFoldTerminator(BasicBlock *BB, bool DeleteDeadConditions = false,
+                            const TargetLibraryInfo *TLI = nullptr,
+                            DomTreeUpdater *DTU = nullptr);
+
+//===----------------------------------------------------------------------===//
+//  Local dead code elimination.
+//
+
+/// Return true if the result produced by the instruction is not used, and the
+/// instruction has no side effects.
+bool isInstructionTriviallyDead(Instruction *I,
+                                const TargetLibraryInfo *TLI = nullptr);
+
+/// Return true if the result produced by the instruction would have no side
+/// effects if it was not used. This is equivalent to checking whether
+/// isInstructionTriviallyDead would be true if the use count was 0.
+bool wouldInstructionBeTriviallyDead(Instruction *I,
+                                     const TargetLibraryInfo *TLI = nullptr);
+
+/// If the specified value is a trivially dead instruction, delete it.
+/// If that makes any of its operands trivially dead, delete them too,
+/// recursively. Return true if any instructions were deleted.
+bool RecursivelyDeleteTriviallyDeadInstructions(Value *V,
+                                        const TargetLibraryInfo *TLI = nullptr);
+
+/// Delete all of the instructions in `DeadInsts`, and all other instructions
+/// that deleting these in turn causes to be trivially dead.
+///
+/// The initial instructions in the provided vector must all have empty use
+/// lists and satisfy `isInstructionTriviallyDead`.
+///
+/// `DeadInsts` will be used as scratch storage for this routine and will be
+/// empty afterward.
+void RecursivelyDeleteTriviallyDeadInstructions(
+    SmallVectorImpl<Instruction *> &DeadInsts,
+    const TargetLibraryInfo *TLI = nullptr);
+
+/// If the specified value is an effectively dead PHI node, due to being a
+/// def-use chain of single-use nodes that either forms a cycle or is terminated
+/// by a trivially dead instruction, delete it. If that makes any of its
+/// operands trivially dead, delete them too, recursively. Return true if a
+/// change was made.
+bool RecursivelyDeleteDeadPHINode(PHINode *PN,
+                                  const TargetLibraryInfo *TLI = nullptr);
+
+/// Scan the specified basic block and try to simplify any instructions in it
+/// and recursively delete dead instructions.
+///
+/// This returns true if it changed the code, note that it can delete
+/// instructions in other blocks as well in this block.
+bool SimplifyInstructionsInBlock(BasicBlock *BB,
+                                 const TargetLibraryInfo *TLI = nullptr);
+
+//===----------------------------------------------------------------------===//
+//  Control Flow Graph Restructuring.
+//
+
+/// Like BasicBlock::removePredecessor, this method is called when we're about
+/// to delete Pred as a predecessor of BB. If BB contains any PHI nodes, this
+/// drops the entries in the PHI nodes for Pred.
+///
+/// Unlike the removePredecessor method, this attempts to simplify uses of PHI
+/// nodes that collapse into identity values.  For example, if we have:
+///   x = phi(1, 0, 0, 0)
+///   y = and x, z
+///
+/// .. and delete the predecessor corresponding to the '1', this will attempt to
+/// recursively fold the 'and' to 0.
+void RemovePredecessorAndSimplify(BasicBlock *BB, BasicBlock *Pred,
+                                  DomTreeUpdater *DTU = nullptr);
+
+/// BB is a block with one predecessor and its predecessor is known to have one
+/// successor (BB!). Eliminate the edge between them, moving the instructions in
+/// the predecessor into BB. This deletes the predecessor block.
+void MergeBasicBlockIntoOnlyPred(BasicBlock *BB, DomTreeUpdater *DTU = nullptr);
+
+/// BB is known to contain an unconditional branch, and contains no instructions
+/// other than PHI nodes, potential debug intrinsics and the branch. If
+/// possible, eliminate BB by rewriting all the predecessors to branch to the
+/// successor block and return true. If we can't transform, return false.
+bool TryToSimplifyUncondBranchFromEmptyBlock(BasicBlock *BB,
+                                             DomTreeUpdater *DTU = nullptr);
+
+/// Check for and eliminate duplicate PHI nodes in this block. This doesn't try
+/// to be clever about PHI nodes which differ only in the order of the incoming
+/// values, but instcombine orders them so it usually won't matter.
+bool EliminateDuplicatePHINodes(BasicBlock *BB);
+
+/// This function is used to do simplification of a CFG.  For example, it
+/// adjusts branches to branches to eliminate the extra hop, it eliminates
+/// unreachable basic blocks, and does other peephole optimization of the CFG.
+/// It returns true if a modification was made, possibly deleting the basic
+/// block that was pointed to. LoopHeaders is an optional input parameter
+/// providing the set of loop headers that SimplifyCFG should not eliminate.
+bool simplifyCFG(BasicBlock *BB, const TargetTransformInfo &TTI,
+                 const SimplifyCFGOptions &Options = {},
+                 SmallPtrSetImpl<BasicBlock *> *LoopHeaders = nullptr);
+
+/// This function is used to flatten a CFG. For example, it uses parallel-and
+/// and parallel-or mode to collapse if-conditions and merge if-regions with
+/// identical statements.
+bool FlattenCFG(BasicBlock *BB, AliasAnalysis *AA = nullptr);
+
+/// If this basic block is ONLY a setcc and a branch, and if a predecessor
+/// branches to us and one of our successors, fold the setcc into the
+/// predecessor and use logical operations to pick the right destination.
+bool FoldBranchToCommonDest(BranchInst *BI, unsigned BonusInstThreshold = 1);
+
+/// This function takes a virtual register computed by an Instruction and
+/// replaces it with a slot in the stack frame, allocated via alloca.
+/// This allows the CFG to be changed around without fear of invalidating the
+/// SSA information for the value. It returns the pointer to the alloca inserted
+/// to create a stack slot for X.
+AllocaInst *DemoteRegToStack(Instruction &X,
+                             bool VolatileLoads = false,
+                             Instruction *AllocaPoint = nullptr);
+
+/// This function takes a virtual register computed by a phi node and replaces
+/// it with a slot in the stack frame, allocated via alloca. The phi node is
+/// deleted and it returns the pointer to the alloca inserted.
+AllocaInst *DemotePHIToStack(PHINode *P, Instruction *AllocaPoint = nullptr);
+
+/// Try to ensure that the alignment of \p V is at least \p PrefAlign bytes. If
+/// the owning object can be modified and has an alignment less than \p
+/// PrefAlign, it will be increased and \p PrefAlign returned. If the alignment
+/// cannot be increased, the known alignment of the value is returned.
+///
+/// It is not always possible to modify the alignment of the underlying object,
+/// so if alignment is important, a more reliable approach is to simply align
+/// all global variables and allocation instructions to their preferred
+/// alignment from the beginning.
+unsigned getOrEnforceKnownAlignment(Value *V, unsigned PrefAlign,
+                                    const DataLayout &DL,
+                                    const Instruction *CxtI = nullptr,
+                                    AssumptionCache *AC = nullptr,
+                                    const DominatorTree *DT = nullptr);
+
+/// Try to infer an alignment for the specified pointer.
+inline unsigned getKnownAlignment(Value *V, const DataLayout &DL,
+                                  const Instruction *CxtI = nullptr,
+                                  AssumptionCache *AC = nullptr,
+                                  const DominatorTree *DT = nullptr) {
+  return getOrEnforceKnownAlignment(V, 0, DL, CxtI, AC, DT);
+}
+
+///===---------------------------------------------------------------------===//
+///  Dbg Intrinsic utilities
+///
+
+/// Inserts a llvm.dbg.value intrinsic before a store to an alloca'd value
+/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
+void ConvertDebugDeclareToDebugValue(DbgVariableIntrinsic *DII,
+                                     StoreInst *SI, DIBuilder &Builder);
+
+/// Inserts a llvm.dbg.value intrinsic before a load of an alloca'd value
+/// that has an associated llvm.dbg.declare or llvm.dbg.addr intrinsic.
+void ConvertDebugDeclareToDebugValue(DbgVariableIntrinsic *DII,
+                                     LoadInst *LI, DIBuilder &Builder);
+
+/// Inserts a llvm.dbg.value intrinsic after a phi that has an associated
+/// llvm.dbg.declare or llvm.dbg.addr intrinsic.
+void ConvertDebugDeclareToDebugValue(DbgVariableIntrinsic *DII,
+                                     PHINode *LI, DIBuilder &Builder);
+
+/// Lowers llvm.dbg.declare intrinsics into appropriate set of
+/// llvm.dbg.value intrinsics.
+bool LowerDbgDeclare(Function &F);
+
+/// Propagate dbg.value intrinsics through the newly inserted PHIs.
+void insertDebugValuesForPHIs(BasicBlock *BB,
+                              SmallVectorImpl<PHINode *> &InsertedPHIs);
+
+/// Finds all intrinsics declaring local variables as living in the memory that
+/// 'V' points to. This may include a mix of dbg.declare and
+/// dbg.addr intrinsics.
+TinyPtrVector<DbgVariableIntrinsic *> FindDbgAddrUses(Value *V);
+
+/// Finds the llvm.dbg.value intrinsics describing a value.
+void findDbgValues(SmallVectorImpl<DbgValueInst *> &DbgValues, Value *V);
+
+/// Finds the debug info intrinsics describing a value.
+void findDbgUsers(SmallVectorImpl<DbgVariableIntrinsic *> &DbgInsts, Value *V);
+
+/// Replaces llvm.dbg.declare instruction when the address it
+/// describes is replaced with a new value. If Deref is true, an
+/// additional DW_OP_deref is prepended to the expression. If Offset
+/// is non-zero, a constant displacement is added to the expression
+/// (between the optional Deref operations). Offset can be negative.
+bool replaceDbgDeclare(Value *Address, Value *NewAddress,
+                       Instruction *InsertBefore, DIBuilder &Builder,
+                       bool DerefBefore, int Offset, bool DerefAfter);
+
+/// Replaces llvm.dbg.declare instruction when the alloca it describes
+/// is replaced with a new value. If Deref is true, an additional
+/// DW_OP_deref is prepended to the expression. If Offset is non-zero,
+/// a constant displacement is added to the expression (between the
+/// optional Deref operations). Offset can be negative. The new
+/// llvm.dbg.declare is inserted immediately after AI.
+bool replaceDbgDeclareForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
+                                DIBuilder &Builder, bool DerefBefore,
+                                int Offset, bool DerefAfter);
+
+/// Replaces multiple llvm.dbg.value instructions when the alloca it describes
+/// is replaced with a new value. If Offset is non-zero, a constant displacement
+/// is added to the expression (after the mandatory Deref). Offset can be
+/// negative. New llvm.dbg.value instructions are inserted at the locations of
+/// the instructions they replace.
+void replaceDbgValueForAlloca(AllocaInst *AI, Value *NewAllocaAddress,
+                              DIBuilder &Builder, int Offset = 0);
+
+/// Assuming the instruction \p I is going to be deleted, attempt to salvage
+/// debug users of \p I by writing the effect of \p I in a DIExpression.
+/// Returns true if any debug users were updated.
+bool salvageDebugInfo(Instruction &I);
+
+/// Point debug users of \p From to \p To or salvage them. Use this function
+/// only when replacing all uses of \p From with \p To, with a guarantee that
+/// \p From is going to be deleted.
+///
+/// Follow these rules to prevent use-before-def of \p To:
+///   . If \p To is a linked Instruction, set \p DomPoint to \p To.
+///   . If \p To is an unlinked Instruction, set \p DomPoint to the Instruction
+///     \p To will be inserted after.
+///   . If \p To is not an Instruction (e.g a Constant), the choice of
+///     \p DomPoint is arbitrary. Pick \p From for simplicity.
+///
+/// If a debug user cannot be preserved without reordering variable updates or
+/// introducing a use-before-def, it is either salvaged (\ref salvageDebugInfo)
+/// or deleted. Returns true if any debug users were updated.
+bool replaceAllDbgUsesWith(Instruction &From, Value &To, Instruction &DomPoint,
+                           DominatorTree &DT);
+
+/// Remove all instructions from a basic block other than it's terminator
+/// and any present EH pad instructions.
+unsigned removeAllNonTerminatorAndEHPadInstructions(BasicBlock *BB);
+
+/// Insert an unreachable instruction before the specified
+/// instruction, making it and the rest of the code in the block dead.
+unsigned changeToUnreachable(Instruction *I, bool UseLLVMTrap,
+                             bool PreserveLCSSA = false,
+                             DomTreeUpdater *DTU = nullptr);
+
+/// Convert the CallInst to InvokeInst with the specified unwind edge basic
+/// block.  This also splits the basic block where CI is located, because
+/// InvokeInst is a terminator instruction.  Returns the newly split basic
+/// block.
+BasicBlock *changeToInvokeAndSplitBasicBlock(CallInst *CI,
+                                             BasicBlock *UnwindEdge);
+
+/// Replace 'BB's terminator with one that does not have an unwind successor
+/// block. Rewrites `invoke` to `call`, etc. Updates any PHIs in unwind
+/// successor.
+///
+/// \param BB  Block whose terminator will be replaced.  Its terminator must
+///            have an unwind successor.
+void removeUnwindEdge(BasicBlock *BB, DomTreeUpdater *DTU = nullptr);
+
+/// Remove all blocks that can not be reached from the function's entry.
+///
+/// Returns true if any basic block was removed.
+bool removeUnreachableBlocks(Function &F, LazyValueInfo *LVI = nullptr,
+                             DomTreeUpdater *DTU = nullptr);
+
+/// Combine the metadata of two instructions so that K can replace J. Some
+/// metadata kinds can only be kept if K does not move, meaning it dominated
+/// J in the original IR.
+///
+/// Metadata not listed as known via KnownIDs is removed
+void combineMetadata(Instruction *K, const Instruction *J,
+                     ArrayRef<unsigned> KnownIDs, bool DoesKMove = true);
+
+/// Combine the metadata of two instructions so that K can replace J. This
+/// specifically handles the case of CSE-like transformations.
+///
+/// Unknown metadata is removed.
+void combineMetadataForCSE(Instruction *K, const Instruction *J);
+
+/// Patch the replacement so that it is not more restrictive than the value
+/// being replaced. It assumes that the replacement does not get moved from
+/// its original position.
+void patchReplacementInstruction(Instruction *I, Value *Repl);
+
+// Replace each use of 'From' with 'To', if that use does not belong to basic
+// block where 'From' is defined. Returns the number of replacements made.
+unsigned replaceNonLocalUsesWith(Instruction *From, Value *To);
+
+/// Replace each use of 'From' with 'To' if that use is dominated by
+/// the given edge.  Returns the number of replacements made.
+unsigned replaceDominatedUsesWith(Value *From, Value *To, DominatorTree &DT,
+                                  const BasicBlockEdge &Edge);
+/// Replace each use of 'From' with 'To' if that use is dominated by
+/// the end of the given BasicBlock. Returns the number of replacements made.
+unsigned replaceDominatedUsesWith(Value *From, Value *To, DominatorTree &DT,
+                                  const BasicBlock *BB);
+
+/// Return true if the CallSite CS calls a gc leaf function.
+///
+/// A leaf function is a function that does not safepoint the thread during its
+/// execution.  During a call or invoke to such a function, the callers stack
+/// does not have to be made parseable.
+///
+/// Most passes can and should ignore this information, and it is only used
+/// during lowering by the GC infrastructure.
+bool callsGCLeafFunction(ImmutableCallSite CS, const TargetLibraryInfo &TLI);
+
+/// Copy a nonnull metadata node to a new load instruction.
+///
+/// This handles mapping it to range metadata if the new load is an integer
+/// load instead of a pointer load.
+void copyNonnullMetadata(const LoadInst &OldLI, MDNode *N, LoadInst &NewLI);
+
+/// Copy a range metadata node to a new load instruction.
+///
+/// This handles mapping it to nonnull metadata if the new load is a pointer
+/// load instead of an integer load and the range doesn't cover null.
+void copyRangeMetadata(const DataLayout &DL, const LoadInst &OldLI, MDNode *N,
+                       LoadInst &NewLI);
+
+//===----------------------------------------------------------------------===//
+//  Intrinsic pattern matching
+//
+
+/// Try to match a bswap or bitreverse idiom.
+///
+/// If an idiom is matched, an intrinsic call is inserted before \c I. Any added
+/// instructions are returned in \c InsertedInsts. They will all have been added
+/// to a basic block.
+///
+/// A bitreverse idiom normally requires around 2*BW nodes to be searched (where
+/// BW is the bitwidth of the integer type). A bswap idiom requires anywhere up
+/// to BW / 4 nodes to be searched, so is significantly faster.
+///
+/// This function returns true on a successful match or false otherwise.
+bool recognizeBSwapOrBitReverseIdiom(
+    Instruction *I, bool MatchBSwaps, bool MatchBitReversals,
+    SmallVectorImpl<Instruction *> &InsertedInsts);
+
+//===----------------------------------------------------------------------===//
+//  Sanitizer utilities
+//
+
+/// Given a CallInst, check if it calls a string function known to CodeGen,
+/// and mark it with NoBuiltin if so.  To be used by sanitizers that intend
+/// to intercept string functions and want to avoid converting them to target
+/// specific instructions.
+void maybeMarkSanitizerLibraryCallNoBuiltin(CallInst *CI,
+                                            const TargetLibraryInfo *TLI);
+
+//===----------------------------------------------------------------------===//
+//  Transform predicates
+//
+
+/// Given an instruction, is it legal to set operand OpIdx to a non-constant
+/// value?
+bool canReplaceOperandWithVariable(const Instruction *I, unsigned OpIdx);
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_UTILS_LOCAL_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopRotationUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopRotationUtils.h
index ea4d2cd..231e5bb 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopRotationUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopRotationUtils.h
@@ -24,11 +24,16 @@
 struct SimplifyQuery;
 class TargetTransformInfo;
 
-/// \brief Convert a loop into a loop with bottom test.
-bool LoopRotation(Loop *L, unsigned MaxHeaderSize, LoopInfo *LI,
-                  const TargetTransformInfo *TTI, AssumptionCache *AC,
-                  DominatorTree *DT, ScalarEvolution *SE,
-                  const SimplifyQuery &SQ);
+/// Convert a loop into a loop with bottom test. It may
+/// perform loop latch simplication as well if the flag RotationOnly
+/// is false. The flag Threshold represents the size threshold of the loop
+/// header. If the loop header's size exceeds the threshold, the loop rotation
+/// will give up. The flag IsUtilMode controls the heuristic used in the
+/// LoopRotation. If it is true, the profitability heuristic will be ignored.
+bool LoopRotation(Loop *L, LoopInfo *LI, const TargetTransformInfo *TTI,
+                  AssumptionCache *AC, DominatorTree *DT, ScalarEvolution *SE,
+                  const SimplifyQuery &SQ, bool RotationOnly,
+                  unsigned Threshold, bool IsUtilMode);
 
 } // namespace llvm
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
index f3828bc..166da27 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopSimplify.h
@@ -52,7 +52,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Simplify each loop in a loop nest recursively.
+/// Simplify each loop in a loop nest recursively.
 ///
 /// This takes a potentially un-simplified loop L (and its children) and turns
 /// it into a simplified loop nest with preheaders and single backedges. It will
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
index 131a4b0..33dcc2a 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopUtils.h
@@ -289,16 +289,16 @@
   /// induction, the induction descriptor \p D will contain the data describing
   /// this induction. If by some other means the caller has a better SCEV
   /// expression for \p Phi than the one returned by the ScalarEvolution
-  /// analysis, it can be passed through \p Expr. If the def-use chain 
+  /// analysis, it can be passed through \p Expr. If the def-use chain
   /// associated with the phi includes casts (that we know we can ignore
   /// under proper runtime checks), they are passed through \p CastsToIgnore.
-  static bool 
+  static bool
   isInductionPHI(PHINode *Phi, const Loop* L, ScalarEvolution *SE,
                  InductionDescriptor &D, const SCEV *Expr = nullptr,
                  SmallVectorImpl<Instruction *> *CastsToIgnore = nullptr);
 
   /// Returns true if \p Phi is a floating point induction in the loop \p L.
-  /// If \p Phi is an induction, the induction descriptor \p D will contain 
+  /// If \p Phi is an induction, the induction descriptor \p D will contain
   /// the data describing this induction.
   static bool isFPInductionPHI(PHINode *Phi, const Loop* L,
                                ScalarEvolution *SE, InductionDescriptor &D);
@@ -334,11 +334,11 @@
       Instruction::BinaryOpsEnd;
   }
 
-  /// Returns a reference to the type cast instructions in the induction 
+  /// Returns a reference to the type cast instructions in the induction
   /// update chain, that are redundant when guarded with a runtime
   /// SCEV overflow check.
-  const SmallVectorImpl<Instruction *> &getCastInsts() const { 
-    return RedundantCasts; 
+  const SmallVectorImpl<Instruction *> &getCastInsts() const {
+    return RedundantCasts;
   }
 
 private:
@@ -385,7 +385,7 @@
 bool formLCSSAForInstructions(SmallVectorImpl<Instruction *> &Worklist,
                               DominatorTree &DT, LoopInfo &LI);
 
-/// \brief Put loop into LCSSA form.
+/// Put loop into LCSSA form.
 ///
 /// Looks at all instructions in the loop which have uses outside of the
 /// current loop. For each, an LCSSA PHI node is inserted and the uses outside
@@ -398,7 +398,7 @@
 /// Returns true if any modifications are made to the loop.
 bool formLCSSA(Loop &L, DominatorTree &DT, LoopInfo *LI, ScalarEvolution *SE);
 
-/// \brief Put a loop nest into LCSSA form.
+/// Put a loop nest into LCSSA form.
 ///
 /// This recursively forms LCSSA for a loop nest.
 ///
@@ -410,7 +410,7 @@
 bool formLCSSARecursively(Loop &L, DominatorTree &DT, LoopInfo *LI,
                           ScalarEvolution *SE);
 
-/// \brief Walk the specified region of the CFG (defined by all blocks
+/// Walk the specified region of the CFG (defined by all blocks
 /// dominated by the specified block, and that are in the current loop) in
 /// reverse depth first order w.r.t the DominatorTree. This allows us to visit
 /// uses before definitions, allowing us to sink a loop body in one pass without
@@ -423,7 +423,7 @@
                 AliasSetTracker *, LoopSafetyInfo *,
                 OptimizationRemarkEmitter *ORE);
 
-/// \brief Walk the specified region of the CFG (defined by all blocks
+/// Walk the specified region of the CFG (defined by all blocks
 /// dominated by the specified block, and that are in the current loop) in depth
 /// first order w.r.t the DominatorTree.  This allows us to visit definitions
 /// before uses, allowing us to hoist a loop body in one pass without iteration.
@@ -449,7 +449,7 @@
 void deleteDeadLoop(Loop *L, DominatorTree *DT, ScalarEvolution *SE,
                     LoopInfo *LI);
 
-/// \brief Try to promote memory values to scalars by sinking stores out of
+/// Try to promote memory values to scalars by sinking stores out of
 /// the loop and moving loads to before the loop.  We do this by looping over
 /// the stores in the loop, looking for stores to Must pointers which are
 /// loop invariant. It takes a set of must-alias values, Loop exit blocks
@@ -470,10 +470,10 @@
 SmallVector<DomTreeNode *, 16> collectChildrenInLoop(DomTreeNode *N,
                                                      const Loop *CurLoop);
 
-/// \brief Returns the instructions that use values defined in the loop.
+/// Returns the instructions that use values defined in the loop.
 SmallVector<Instruction *, 8> findDefsUsedOutsideOfLoop(Loop *L);
 
-/// \brief Find string metadata for loop
+/// Find string metadata for loop
 ///
 /// If it has a value (e.g. {"llvm.distribute", 1} return the value as an
 /// operand or null otherwise.  If the string metadata is not found return
@@ -481,11 +481,11 @@
 Optional<const MDOperand *> findStringMetadataForLoop(Loop *TheLoop,
                                                       StringRef Name);
 
-/// \brief Set input string into loop metadata by keeping other values intact.
+/// Set input string into loop metadata by keeping other values intact.
 void addStringMetadataToLoop(Loop *TheLoop, const char *MDString,
                              unsigned V = 0);
 
-/// \brief Get a loop's estimated trip count based on branch weight metadata.
+/// Get a loop's estimated trip count based on branch weight metadata.
 /// Returns 0 when the count is estimated to be 0, or None when a meaningful
 /// estimate can not be made.
 Optional<unsigned> getLoopEstimatedTripCount(Loop *L);
@@ -497,23 +497,32 @@
 /// getAnalysisUsage.
 void getLoopAnalysisUsage(AnalysisUsage &AU);
 
-/// Returns true if the hoister and sinker can handle this instruction.
-/// If SafetyInfo is null, we are checking for sinking instructions from
-/// preheader to loop body (no speculation).
-/// If SafetyInfo is not null, we are checking for hoisting/sinking
-/// instructions from loop body to preheader/exit. Check if the instruction
-/// can execute speculatively.
+/// Returns true if is legal to hoist or sink this instruction disregarding the
+/// possible introduction of faults.  Reasoning about potential faulting
+/// instructions is the responsibility of the caller since it is challenging to
+/// do efficiently from within this routine.
+/// \p TargetExecutesOncePerLoop is true only when it is guaranteed that the
+/// target executes at most once per execution of the loop body.  This is used
+/// to assess the legality of duplicating atomic loads.  Generally, this is
+/// true when moving out of loop and not true when moving into loops.  
 /// If \p ORE is set use it to emit optimization remarks.
 bool canSinkOrHoistInst(Instruction &I, AAResults *AA, DominatorTree *DT,
                         Loop *CurLoop, AliasSetTracker *CurAST,
-                        LoopSafetyInfo *SafetyInfo,
+                        bool TargetExecutesOncePerLoop,
                         OptimizationRemarkEmitter *ORE = nullptr);
 
+/// Generates an ordered vector reduction using extracts to reduce the value.
+Value *
+getOrderedReduction(IRBuilder<> &Builder, Value *Acc, Value *Src, unsigned Op,
+                    RecurrenceDescriptor::MinMaxRecurrenceKind MinMaxKind =
+                        RecurrenceDescriptor::MRK_Invalid,
+                    ArrayRef<Value *> RedOps = None);
+
 /// Generates a vector reduction using shufflevectors to reduce the value.
 Value *getShuffleReduction(IRBuilder<> &Builder, Value *Src, unsigned Op,
                            RecurrenceDescriptor::MinMaxRecurrenceKind
                                MinMaxKind = RecurrenceDescriptor::MRK_Invalid,
-                           ArrayRef<Value *> RedOps = ArrayRef<Value *>());
+                           ArrayRef<Value *> RedOps = None);
 
 /// Create a target reduction of the given vector. The reduction operation
 /// is described by the \p Opcode parameter. min/max reductions require
@@ -525,7 +534,7 @@
                             unsigned Opcode, Value *Src,
                             TargetTransformInfo::ReductionFlags Flags =
                                 TargetTransformInfo::ReductionFlags(),
-                            ArrayRef<Value *> RedOps = ArrayRef<Value *>());
+                            ArrayRef<Value *> RedOps = None);
 
 /// Create a generic target reduction using a recurrence descriptor \p Desc
 /// The target is queried to determine if intrinsics or shuffle sequences are
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/LoopVersioning.h b/linux-x64/clang/include/llvm/Transforms/Utils/LoopVersioning.h
index fa5d784..fcd734b 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/LoopVersioning.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/LoopVersioning.h
@@ -28,14 +28,14 @@
 class LoopInfo;
 class ScalarEvolution;
 
-/// \brief This class emits a version of the loop where run-time checks ensure
+/// This class emits a version of the loop where run-time checks ensure
 /// that may-alias pointers can't overlap.
 ///
 /// It currently only supports single-exit loops and assumes that the loop
 /// already has a preheader.
 class LoopVersioning {
 public:
-  /// \brief Expects LoopAccessInfo, Loop, LoopInfo, DominatorTree as input.
+  /// Expects LoopAccessInfo, Loop, LoopInfo, DominatorTree as input.
   /// It uses runtime check provided by the user. If \p UseLAIChecks is true,
   /// we will retain the default checks made by LAI. Otherwise, construct an
   /// object having no checks and we expect the user to add them.
@@ -43,7 +43,7 @@
                  DominatorTree *DT, ScalarEvolution *SE,
                  bool UseLAIChecks = true);
 
-  /// \brief Performs the CFG manipulation part of versioning the loop including
+  /// Performs the CFG manipulation part of versioning the loop including
   /// the DominatorTree and LoopInfo updates.
   ///
   /// The loop that was used to construct the class will be the "versioned" loop
@@ -58,38 +58,38 @@
   ///        transform L
   void versionLoop() { versionLoop(findDefsUsedOutsideOfLoop(VersionedLoop)); }
 
-  /// \brief Same but if the client has already precomputed the set of values
+  /// Same but if the client has already precomputed the set of values
   /// used outside the loop, this API will allows passing that.
   void versionLoop(const SmallVectorImpl<Instruction *> &DefsUsedOutside);
 
-  /// \brief Returns the versioned loop.  Control flows here if pointers in the
+  /// Returns the versioned loop.  Control flows here if pointers in the
   /// loop don't alias (i.e. all memchecks passed).  (This loop is actually the
   /// same as the original loop that we got constructed with.)
   Loop *getVersionedLoop() { return VersionedLoop; }
 
-  /// \brief Returns the fall-back loop.  Control flows here if pointers in the
+  /// Returns the fall-back loop.  Control flows here if pointers in the
   /// loop may alias (i.e. one of the memchecks failed).
   Loop *getNonVersionedLoop() { return NonVersionedLoop; }
 
-  /// \brief Sets the runtime alias checks for versioning the loop.
+  /// Sets the runtime alias checks for versioning the loop.
   void setAliasChecks(
       SmallVector<RuntimePointerChecking::PointerCheck, 4> Checks);
 
-  /// \brief Sets the runtime SCEV checks for versioning the loop.
+  /// Sets the runtime SCEV checks for versioning the loop.
   void setSCEVChecks(SCEVUnionPredicate Check);
 
-  /// \brief Annotate memory instructions in the versioned loop with no-alias
+  /// Annotate memory instructions in the versioned loop with no-alias
   /// metadata based on the memchecks issued.
   ///
   /// This is just wrapper that calls prepareNoAliasMetadata and
   /// annotateInstWithNoAlias on the instructions of the versioned loop.
   void annotateLoopWithNoAlias();
 
-  /// \brief Set up the aliasing scopes based on the memchecks.  This needs to
+  /// Set up the aliasing scopes based on the memchecks.  This needs to
   /// be called before the first call to annotateInstWithNoAlias.
   void prepareNoAliasMetadata();
 
-  /// \brief Add the noalias annotations to \p VersionedInst.
+  /// Add the noalias annotations to \p VersionedInst.
   ///
   /// \p OrigInst is the instruction corresponding to \p VersionedInst in the
   /// original loop.  Initialize the aliasing scopes with
@@ -98,50 +98,50 @@
                                const Instruction *OrigInst);
 
 private:
-  /// \brief Adds the necessary PHI nodes for the versioned loops based on the
+  /// Adds the necessary PHI nodes for the versioned loops based on the
   /// loop-defined values used outside of the loop.
   ///
   /// This needs to be called after versionLoop if there are defs in the loop
   /// that are used outside the loop.
   void addPHINodes(const SmallVectorImpl<Instruction *> &DefsUsedOutside);
 
-  /// \brief Add the noalias annotations to \p I.  Initialize the aliasing
+  /// Add the noalias annotations to \p I.  Initialize the aliasing
   /// scopes with prepareNoAliasMetadata once before this can be called.
   void annotateInstWithNoAlias(Instruction *I) {
     annotateInstWithNoAlias(I, I);
   }
 
-  /// \brief The original loop.  This becomes the "versioned" one.  I.e.,
+  /// The original loop.  This becomes the "versioned" one.  I.e.,
   /// control flows here if pointers in the loop don't alias.
   Loop *VersionedLoop;
-  /// \brief The fall-back loop.  I.e. control flows here if pointers in the
+  /// The fall-back loop.  I.e. control flows here if pointers in the
   /// loop may alias (memchecks failed).
   Loop *NonVersionedLoop;
 
-  /// \brief This maps the instructions from VersionedLoop to their counterpart
+  /// This maps the instructions from VersionedLoop to their counterpart
   /// in NonVersionedLoop.
   ValueToValueMapTy VMap;
 
-  /// \brief The set of alias checks that we are versioning for.
+  /// The set of alias checks that we are versioning for.
   SmallVector<RuntimePointerChecking::PointerCheck, 4> AliasChecks;
 
-  /// \brief The set of SCEV checks that we are versioning for.
+  /// The set of SCEV checks that we are versioning for.
   SCEVUnionPredicate Preds;
 
-  /// \brief Maps a pointer to the pointer checking group that the pointer
+  /// Maps a pointer to the pointer checking group that the pointer
   /// belongs to.
   DenseMap<const Value *, const RuntimePointerChecking::CheckingPtrGroup *>
       PtrToGroup;
 
-  /// \brief The alias scope corresponding to a pointer checking group.
+  /// The alias scope corresponding to a pointer checking group.
   DenseMap<const RuntimePointerChecking::CheckingPtrGroup *, MDNode *>
       GroupToScope;
 
-  /// \brief The list of alias scopes that a pointer checking group can't alias.
+  /// The list of alias scopes that a pointer checking group can't alias.
   DenseMap<const RuntimePointerChecking::CheckingPtrGroup *, MDNode *>
       GroupToNonAliasingScopeList;
 
-  /// \brief Analyses used.
+  /// Analyses used.
   const LoopAccessInfo &LAI;
   LoopInfo *LI;
   DominatorTree *DT;
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/ModuleUtils.h b/linux-x64/clang/include/llvm/Transforms/Utils/ModuleUtils.h
index 4b9bc82..14615c2 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/ModuleUtils.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/ModuleUtils.h
@@ -49,7 +49,7 @@
 Function *declareSanitizerInitFunction(Module &M, StringRef InitName,
                                        ArrayRef<Type *> InitArgTypes);
 
-/// \brief Creates sanitizer constructor function, and calls sanitizer's init
+/// Creates sanitizer constructor function, and calls sanitizer's init
 /// function from it.
 /// \return Returns pair of pointers to constructor, and init functions
 /// respectively.
@@ -62,10 +62,10 @@
 /// the list of public globals in the module.
 bool nameUnamedGlobals(Module &M);
 
-/// \brief Adds global values to the llvm.used list.
+/// Adds global values to the llvm.used list.
 void appendToUsed(Module &M, ArrayRef<GlobalValue *> Values);
 
-/// \brief Adds global values to the llvm.compiler.used list.
+/// Adds global values to the llvm.compiler.used list.
 void appendToCompilerUsed(Module &M, ArrayRef<GlobalValue *> Values);
 
 /// Filter out potentially dead comdat functions where other entries keep the
@@ -84,7 +84,7 @@
 void filterDeadComdatFunctions(
     Module &M, SmallVectorImpl<Function *> &DeadComdatFunctions);
 
-/// \brief Produce a unique identifier for this module by taking the MD5 sum of
+/// Produce a unique identifier for this module by taking the MD5 sum of
 /// the names of the module's strong external symbols that are not comdat
 /// members.
 ///
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/OrderedInstructions.h b/linux-x64/clang/include/llvm/Transforms/Utils/OrderedInstructions.h
index 165d4bd..7f57fde 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/OrderedInstructions.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/OrderedInstructions.h
@@ -35,6 +35,11 @@
   /// The dominator tree of the parent function.
   DominatorTree *DT;
 
+  /// Return true if the first instruction comes before the second in the
+  /// same basic block. It will create an ordered basic block, if it does
+  /// not yet exist in OBBMap.
+  bool localDominates(const Instruction *, const Instruction *) const;
+
 public:
   /// Constructor.
   OrderedInstructions(DominatorTree *DT) : DT(DT) {}
@@ -42,6 +47,12 @@
   /// Return true if first instruction dominates the second.
   bool dominates(const Instruction *, const Instruction *) const;
 
+  /// Return true if the first instruction comes before the second in the
+  /// dominator tree DFS traversal if they are in different basic blocks,
+  /// or if the first instruction comes before the second in the same basic
+  /// block.
+  bool dfsBefore(const Instruction *, const Instruction *) const;
+
   /// Invalidate the OrderedBasicBlock cache when its basic block changes.
   /// i.e. If an instruction is deleted or added to the basic block, the user
   /// should call this function to invalidate the OrderedBasicBlock cache for
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/PredicateInfo.h b/linux-x64/clang/include/llvm/Transforms/Utils/PredicateInfo.h
index 8150f15..b53eda7 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/PredicateInfo.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/PredicateInfo.h
@@ -8,7 +8,7 @@
 //===----------------------------------------------------------------------===//
 ///
 /// \file
-/// \brief  This file implements the PredicateInfo analysis, which creates an Extended
+///  This file implements the PredicateInfo analysis, which creates an Extended
 /// SSA form for operations used in branch comparisons and llvm.assume
 /// comparisons.
 ///
@@ -31,7 +31,7 @@
 /// %cmp = icmp eq i32, %x, 50
 /// br i1 %cmp, label %true, label %false
 /// true:
-/// %x.0 = call @llvm.ssa_copy.i32(i32 %x)
+/// %x.0 = call \@llvm.ssa_copy.i32(i32 %x)
 /// ret i32 %x.0
 /// false:
 /// ret i32 1
@@ -54,6 +54,7 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/DenseSet.h"
 #include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/SmallSet.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/ilist.h"
 #include "llvm/ADT/ilist_node.h"
@@ -69,6 +70,7 @@
 #include "llvm/IR/Use.h"
 #include "llvm/IR/User.h"
 #include "llvm/IR/Value.h"
+#include "llvm/IR/ValueHandle.h"
 #include "llvm/Pass.h"
 #include "llvm/PassAnalysisSupport.h"
 #include "llvm/Support/Casting.h"
@@ -193,7 +195,7 @@
 struct ValueDFS;
 }
 
-/// \brief Encapsulates PredicateInfo, including all data associated with memory
+/// Encapsulates PredicateInfo, including all data associated with memory
 /// accesses.
 class PredicateInfo {
 private:
@@ -261,6 +263,8 @@
   // The set of edges along which we can only handle phi uses, due to critical
   // edges.
   DenseSet<std::pair<BasicBlock *, BasicBlock *>> EdgeUsesOnly;
+  // The set of ssa_copy declarations we created with our custom mangling.
+  SmallSet<AssertingVH<Function>, 20> CreatedDeclarations;
 };
 
 // This pass does eager building and then printing of PredicateInfo. It is used
@@ -275,7 +279,7 @@
   void getAnalysisUsage(AnalysisUsage &AU) const override;
 };
 
-/// \brief Printer pass for \c PredicateInfo.
+/// Printer pass for \c PredicateInfo.
 class PredicateInfoPrinterPass
     : public PassInfoMixin<PredicateInfoPrinterPass> {
   raw_ostream &OS;
@@ -285,7 +289,7 @@
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
 
-/// \brief Verifier pass for \c PredicateInfo.
+/// Verifier pass for \c PredicateInfo.
 struct PredicateInfoVerifierPass : PassInfoMixin<PredicateInfoVerifierPass> {
   PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
 };
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/PromoteMemToReg.h b/linux-x64/clang/include/llvm/Transforms/Utils/PromoteMemToReg.h
index bb8a61a..5ddfbe2 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/PromoteMemToReg.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/PromoteMemToReg.h
@@ -23,7 +23,7 @@
 class AliasSetTracker;
 class AssumptionCache;
 
-/// \brief Return true if this alloca is legal for promotion.
+/// Return true if this alloca is legal for promotion.
 ///
 /// This is true if there are only loads, stores, and lifetime markers
 /// (transitively) using this alloca. This also enforces that there is only
@@ -31,7 +31,7 @@
 /// markers.
 bool isAllocaPromotable(const AllocaInst *AI);
 
-/// \brief Promote the specified list of alloca instructions into scalar
+/// Promote the specified list of alloca instructions into scalar
 /// registers, inserting PHI nodes as appropriate.
 ///
 /// This function makes use of DominanceFrontier information.  This function
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdater.h b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdater.h
index 6cd9f15..4a79116 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdater.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdater.h
@@ -30,7 +30,7 @@
 class Use;
 class Value;
 
-/// \brief Helper class for SSA formation on a set of values defined in
+/// Helper class for SSA formation on a set of values defined in
 /// multiple blocks.
 ///
 /// This is used when code duplication or another unstructured
@@ -62,25 +62,25 @@
   SSAUpdater &operator=(const SSAUpdater &) = delete;
   ~SSAUpdater();
 
-  /// \brief Reset this object to get ready for a new set of SSA updates with
+  /// Reset this object to get ready for a new set of SSA updates with
   /// type 'Ty'.
   ///
   /// PHI nodes get a name based on 'Name'.
   void Initialize(Type *Ty, StringRef Name);
 
-  /// \brief Indicate that a rewritten value is available in the specified block
+  /// Indicate that a rewritten value is available in the specified block
   /// with the specified value.
   void AddAvailableValue(BasicBlock *BB, Value *V);
 
-  /// \brief Return true if the SSAUpdater already has a value for the specified
+  /// Return true if the SSAUpdater already has a value for the specified
   /// block.
   bool HasValueForBlock(BasicBlock *BB) const;
 
-  /// \brief Construct SSA form, materializing a value that is live at the end
+  /// Construct SSA form, materializing a value that is live at the end
   /// of the specified block.
   Value *GetValueAtEndOfBlock(BasicBlock *BB);
 
-  /// \brief Construct SSA form, materializing a value that is live in the
+  /// Construct SSA form, materializing a value that is live in the
   /// middle of the specified block.
   ///
   /// \c GetValueInMiddleOfBlock is the same as \c GetValueAtEndOfBlock except
@@ -102,7 +102,7 @@
   /// merge the appropriate values, and this value isn't live out of the block.
   Value *GetValueInMiddleOfBlock(BasicBlock *BB);
 
-  /// \brief Rewrite a use of the symbolic value.
+  /// Rewrite a use of the symbolic value.
   ///
   /// This handles PHI nodes, which use their value in the corresponding
   /// predecessor. Note that this will not work if the use is supposed to be
@@ -111,7 +111,7 @@
   /// be below it.
   void RewriteUse(Use &U);
 
-  /// \brief Rewrite a use like \c RewriteUse but handling in-block definitions.
+  /// Rewrite a use like \c RewriteUse but handling in-block definitions.
   ///
   /// This version of the method can rewrite uses in the same block as
   /// a definition, because it assumes that all uses of a value are below any
@@ -122,7 +122,7 @@
   Value *GetValueAtEndOfBlockInternal(BasicBlock *BB);
 };
 
-/// \brief Helper class for promoting a collection of loads and stores into SSA
+/// Helper class for promoting a collection of loads and stores into SSA
 /// Form using the SSAUpdater.
 ///
 /// This handles complexities that SSAUpdater doesn't, such as multiple loads
@@ -139,32 +139,32 @@
                        SSAUpdater &S, StringRef Name = StringRef());
   virtual ~LoadAndStorePromoter() = default;
 
-  /// \brief This does the promotion.
+  /// This does the promotion.
   ///
   /// Insts is a list of loads and stores to promote, and Name is the basename
   /// for the PHIs to insert. After this is complete, the loads and stores are
   /// removed from the code.
   void run(const SmallVectorImpl<Instruction *> &Insts) const;
 
-  /// \brief Return true if the specified instruction is in the Inst list.
+  /// Return true if the specified instruction is in the Inst list.
   ///
   /// The Insts list is the one passed into the constructor. Clients should
   /// implement this with a more efficient version if possible.
   virtual bool isInstInList(Instruction *I,
                             const SmallVectorImpl<Instruction *> &Insts) const;
 
-  /// \brief This hook is invoked after all the stores are found and inserted as
+  /// This hook is invoked after all the stores are found and inserted as
   /// available values.
   virtual void doExtraRewritesBeforeFinalDeletion() const {}
 
-  /// \brief Clients can choose to implement this to get notified right before
+  /// Clients can choose to implement this to get notified right before
   /// a load is RAUW'd another value.
   virtual void replaceLoadWithValue(LoadInst *LI, Value *V) const {}
 
-  /// \brief Called before each instruction is deleted.
+  /// Called before each instruction is deleted.
   virtual void instructionDeleted(Instruction *I) const {}
 
-  /// \brief Called to update debug info associated with the instruction.
+  /// Called to update debug info associated with the instruction.
   virtual void updateDebugInfo(Instruction *I) const {}
 };
 
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterBulk.h b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterBulk.h
new file mode 100644
index 0000000..53a608f
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterBulk.h
@@ -0,0 +1,92 @@
+//===- SSAUpdaterBulk.h - Unstructured SSA Update Tool ----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file declares the SSAUpdaterBulk class.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_UTILS_SSAUPDATERBULK_H
+#define LLVM_TRANSFORMS_UTILS_SSAUPDATERBULK_H
+
+#include "llvm/ADT/DenseMap.h"
+#include "llvm/ADT/SmallPtrSet.h"
+#include "llvm/ADT/StringRef.h"
+#include "llvm/IR/PredIteratorCache.h"
+
+namespace llvm {
+
+class BasicBlock;
+class PHINode;
+template <typename T> class SmallVectorImpl;
+class Type;
+class Use;
+class Value;
+class DominatorTree;
+
+/// Helper class for SSA formation on a set of values defined in multiple
+/// blocks.
+///
+/// This is used when code duplication or another unstructured transformation
+/// wants to rewrite a set of uses of one value with uses of a set of values.
+/// The update is done only when RewriteAllUses is called, all other methods are
+/// used for book-keeping. That helps to share some common computations between
+/// updates of different uses (which is not the case when traditional SSAUpdater
+/// is used).
+class SSAUpdaterBulk {
+  struct RewriteInfo {
+    DenseMap<BasicBlock *, Value *> Defines;
+    SmallVector<Use *, 4> Uses;
+    StringRef Name;
+    Type *Ty;
+    RewriteInfo(){};
+    RewriteInfo(StringRef &N, Type *T) : Name(N), Ty(T){};
+  };
+  SmallVector<RewriteInfo, 4> Rewrites;
+
+  PredIteratorCache PredCache;
+
+  Value *computeValueAt(BasicBlock *BB, RewriteInfo &R, DominatorTree *DT);
+
+public:
+  explicit SSAUpdaterBulk(){};
+  SSAUpdaterBulk(const SSAUpdaterBulk &) = delete;
+  SSAUpdaterBulk &operator=(const SSAUpdaterBulk &) = delete;
+  ~SSAUpdaterBulk(){};
+
+  /// Add a new variable to the SSA rewriter. This needs to be called before
+  /// AddAvailableValue or AddUse calls. The return value is the variable ID,
+  /// which needs to be passed to AddAvailableValue and AddUse.
+  unsigned AddVariable(StringRef Name, Type *Ty);
+
+  /// Indicate that a rewritten value is available in the specified block with
+  /// the specified value.
+  void AddAvailableValue(unsigned Var, BasicBlock *BB, Value *V);
+
+  /// Record a use of the symbolic value. This use will be updated with a
+  /// rewritten value when RewriteAllUses is called.
+  void AddUse(unsigned Var, Use *U);
+
+  /// Return true if the SSAUpdater already has a value for the specified
+  /// variable in the specified block.
+  bool HasValueForBlock(unsigned Var, BasicBlock *BB);
+
+  /// Perform all the necessary updates, including new PHI-nodes insertion and
+  /// the requested uses update.
+  ///
+  /// The function requires dominator tree DT, which is used for computing
+  /// locations for new phi-nodes insertions. If a nonnull pointer to a vector
+  /// InsertedPHIs is passed, all the new phi-nodes will be added to this
+  /// vector.
+  void RewriteAllUses(DominatorTree *DT,
+                      SmallVectorImpl<PHINode *> *InsertedPHIs = nullptr);
+};
+
+} // end namespace llvm
+
+#endif // LLVM_TRANSFORMS_UTILS_SSAUPDATERBULK_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterImpl.h b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
index 3c8bd17..b7649ba 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SSAUpdaterImpl.h
@@ -379,7 +379,7 @@
         Traits::AddPHIOperand(PHI, PredInfo->AvailableVal, Pred);
       }
 
-      DEBUG(dbgs() << "  Inserted PHI: " << *PHI << "\n");
+      LLVM_DEBUG(dbgs() << "  Inserted PHI: " << *PHI << "\n");
 
       // If the client wants to know about all new instructions, tell it.
       if (InsertedPHIs) InsertedPHIs->push_back(PHI);
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyInstructions.h b/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyInstructions.h
deleted file mode 100644
index 3f83861..0000000
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyInstructions.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//===- SimplifyInstructions.h - Remove redundant instructions ---*- C++ -*-===//
-//
-//                     The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This is a utility pass used for testing the InstructionSimplify analysis.
-// The analysis is applied to every instruction, and if it simplifies then the
-// instruction is replaced by the simplification.  If you are looking for a pass
-// that performs serious instruction folding, use the instcombine pass instead.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef LLVM_TRANSFORMS_UTILS_SIMPLIFYINSTRUCTIONS_H
-#define LLVM_TRANSFORMS_UTILS_SIMPLIFYINSTRUCTIONS_H
-
-#include "llvm/IR/PassManager.h"
-
-namespace llvm {
-
-/// This pass removes redundant instructions.
-class InstSimplifierPass : public PassInfoMixin<InstSimplifierPass> {
-public:
-  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
-};
-} // end namespace llvm
-
-#endif // LLVM_TRANSFORMS_UTILS_SIMPLIFYINSTRUCTIONS_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h b/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
index 73a62f5..d007f90 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SimplifyLibCalls.h
@@ -30,7 +30,7 @@
 class Function;
 class OptimizationRemarkEmitter;
 
-/// \brief This class implements simplifications for calls to fortified library
+/// This class implements simplifications for calls to fortified library
 /// functions (__st*cpy_chk, __memcpy_chk, __memmove_chk, __memset_chk), to,
 /// when possible, replace them with their non-checking counterparts.
 /// Other optimizations can also be done, but it's possible to disable them and
@@ -45,7 +45,7 @@
   FortifiedLibCallSimplifier(const TargetLibraryInfo *TLI,
                              bool OnlyLowerUnknownSize = false);
 
-  /// \brief Take the given call instruction and return a more
+  /// Take the given call instruction and return a more
   /// optimal value to replace the instruction with or 0 if a more
   /// optimal form can't be found.
   /// The call must not be an indirect call.
@@ -60,7 +60,7 @@
   Value *optimizeStrpCpyChk(CallInst *CI, IRBuilder<> &B, LibFunc Func);
   Value *optimizeStrpNCpyChk(CallInst *CI, IRBuilder<> &B, LibFunc Func);
 
-  /// \brief Checks whether the call \p CI to a fortified libcall is foldable
+  /// Checks whether the call \p CI to a fortified libcall is foldable
   /// to the non-fortified version.
   bool isFortifiedCallFoldable(CallInst *CI, unsigned ObjSizeOp,
                                unsigned SizeOp, bool isString);
@@ -78,13 +78,13 @@
   bool UnsafeFPShrink;
   function_ref<void(Instruction *, Value *)> Replacer;
 
-  /// \brief Internal wrapper for RAUW that is the default implementation.
+  /// Internal wrapper for RAUW that is the default implementation.
   ///
   /// Other users may provide an alternate function with this signature instead
   /// of this one.
   static void replaceAllUsesWithDefault(Instruction *I, Value *With);
 
-  /// \brief Replace an instruction's uses with a value using our replacer.
+  /// Replace an instruction's uses with a value using our replacer.
   void replaceAllUsesWith(Instruction *I, Value *With);
 
 public:
@@ -124,6 +124,7 @@
   Value *optimizeMemCpy(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemMove(CallInst *CI, IRBuilder<> &B);
   Value *optimizeMemSet(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeRealloc(CallInst *CI, IRBuilder<> &B);
   Value *optimizeWcslen(CallInst *CI, IRBuilder<> &B);
   // Wrapper for all String/Memory Library Call Optimizations
   Value *optimizeStringMemoryLibCall(CallInst *CI, IRBuilder<> &B);
@@ -150,15 +151,22 @@
   Value *optimizeIsDigit(CallInst *CI, IRBuilder<> &B);
   Value *optimizeIsAscii(CallInst *CI, IRBuilder<> &B);
   Value *optimizeToAscii(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeAtoi(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeStrtol(CallInst *CI, IRBuilder<> &B);
 
   // Formatting and IO Library Call Optimizations
   Value *optimizeErrorReporting(CallInst *CI, IRBuilder<> &B,
                                 int StreamArg = -1);
   Value *optimizePrintF(CallInst *CI, IRBuilder<> &B);
   Value *optimizeSPrintF(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeSnPrintF(CallInst *CI, IRBuilder<> &B);
   Value *optimizeFPrintF(CallInst *CI, IRBuilder<> &B);
   Value *optimizeFWrite(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeFRead(CallInst *CI, IRBuilder<> &B);
   Value *optimizeFPuts(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeFGets(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeFPutc(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeFGetc(CallInst *CI, IRBuilder<> &B);
   Value *optimizePuts(CallInst *CI, IRBuilder<> &B);
 
   // Helper methods
@@ -169,6 +177,7 @@
                       SmallVectorImpl<CallInst *> &SinCosCalls);
   Value *optimizePrintFString(CallInst *CI, IRBuilder<> &B);
   Value *optimizeSPrintFString(CallInst *CI, IRBuilder<> &B);
+  Value *optimizeSnPrintFString(CallInst *CI, IRBuilder<> &B);
   Value *optimizeFPrintFString(CallInst *CI, IRBuilder<> &B);
 
   /// hasFloatVersion - Checks if there is a float version of the specified
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/SymbolRewriter.h b/linux-x64/clang/include/llvm/Transforms/Utils/SymbolRewriter.h
index e0caf77..5f6488e 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/SymbolRewriter.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/SymbolRewriter.h
@@ -134,7 +134,7 @@
 private:
   void loadAndParseMapFiles();
 
-  SymbolRewriter::RewriteDescriptorList Descriptors;  
+  SymbolRewriter::RewriteDescriptorList Descriptors;
 };
 
 } // end namespace llvm
diff --git a/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h b/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
index 3983637..a6b84af 100644
--- a/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
+++ b/linux-x64/clang/include/llvm/Transforms/Utils/UnrollLoop.h
@@ -19,11 +19,13 @@
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/StringRef.h"
 #include "llvm/Analysis/TargetTransformInfo.h"
+#include "llvm/Transforms/Utils/ValueMapper.h"
 
 namespace llvm {
 
 class AssumptionCache;
 class BasicBlock;
+class DependenceInfo;
 class DominatorTree;
 class Loop;
 class LoopInfo;
@@ -73,11 +75,52 @@
                       TargetTransformInfo::UnrollingPreferences &UP,
                       unsigned &TripCount, ScalarEvolution &SE);
 
+bool canPeel(Loop *L);
+
 bool peelLoop(Loop *L, unsigned PeelCount, LoopInfo *LI, ScalarEvolution *SE,
               DominatorTree *DT, AssumptionCache *AC, bool PreserveLCSSA);
 
+LoopUnrollResult UnrollAndJamLoop(Loop *L, unsigned Count, unsigned TripCount,
+                                  unsigned TripMultiple, bool UnrollRemainder,
+                                  LoopInfo *LI, ScalarEvolution *SE,
+                                  DominatorTree *DT, AssumptionCache *AC,
+                                  OptimizationRemarkEmitter *ORE);
+
+bool isSafeToUnrollAndJam(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
+                          DependenceInfo &DI);
+
+bool computeUnrollCount(Loop *L, const TargetTransformInfo &TTI,
+                        DominatorTree &DT, LoopInfo *LI, ScalarEvolution &SE,
+                        const SmallPtrSetImpl<const Value *> &EphValues,
+                        OptimizationRemarkEmitter *ORE, unsigned &TripCount,
+                        unsigned MaxTripCount, unsigned &TripMultiple,
+                        unsigned LoopSize,
+                        TargetTransformInfo::UnrollingPreferences &UP,
+                        bool &UseUpperBound);
+
+BasicBlock *foldBlockIntoPredecessor(BasicBlock *BB, LoopInfo *LI,
+                                     ScalarEvolution *SE, DominatorTree *DT);
+
+void remapInstruction(Instruction *I, ValueToValueMapTy &VMap);
+
+void simplifyLoopAfterUnroll(Loop *L, bool SimplifyIVs, LoopInfo *LI,
+                             ScalarEvolution *SE, DominatorTree *DT,
+                             AssumptionCache *AC);
+
 MDNode *GetUnrollMetadata(MDNode *LoopID, StringRef Name);
 
+TargetTransformInfo::UnrollingPreferences gatherUnrollingPreferences(
+    Loop *L, ScalarEvolution &SE, const TargetTransformInfo &TTI, int OptLevel,
+    Optional<unsigned> UserThreshold, Optional<unsigned> UserCount,
+    Optional<bool> UserAllowPartial, Optional<bool> UserRuntime,
+    Optional<bool> UserUpperBound, Optional<bool> UserAllowPeeling);
+
+unsigned ApproximateLoopSize(const Loop *L, unsigned &NumCalls,
+                             bool &NotDuplicatable, bool &Convergent,
+                             const TargetTransformInfo &TTI,
+                             const SmallPtrSetImpl<const Value *> &EphValues,
+                             unsigned BEInsns);
+
 } // end namespace llvm
 
 #endif // LLVM_TRANSFORMS_UTILS_UNROLLLOOP_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize.h b/linux-x64/clang/include/llvm/Transforms/Vectorize.h
index 19845e4..950af7f 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize.h
@@ -21,88 +21,88 @@
 class Pass;
 
 //===----------------------------------------------------------------------===//
-/// @brief Vectorize configuration.
+/// Vectorize configuration.
 struct VectorizeConfig {
   //===--------------------------------------------------------------------===//
   // Target architecture related parameters
 
-  /// @brief The size of the native vector registers.
+  /// The size of the native vector registers.
   unsigned VectorBits;
 
-  /// @brief Vectorize boolean values.
+  /// Vectorize boolean values.
   bool VectorizeBools;
 
-  /// @brief Vectorize integer values.
+  /// Vectorize integer values.
   bool VectorizeInts;
 
-  /// @brief Vectorize floating-point values.
+  /// Vectorize floating-point values.
   bool VectorizeFloats;
 
-  /// @brief Vectorize pointer values.
+  /// Vectorize pointer values.
   bool VectorizePointers;
 
-  /// @brief Vectorize casting (conversion) operations.
+  /// Vectorize casting (conversion) operations.
   bool VectorizeCasts;
 
-  /// @brief Vectorize floating-point math intrinsics.
+  /// Vectorize floating-point math intrinsics.
   bool VectorizeMath;
 
-  /// @brief Vectorize bit intrinsics.
+  /// Vectorize bit intrinsics.
   bool VectorizeBitManipulations;
 
-  /// @brief Vectorize the fused-multiply-add intrinsic.
+  /// Vectorize the fused-multiply-add intrinsic.
   bool VectorizeFMA;
 
-  /// @brief Vectorize select instructions.
+  /// Vectorize select instructions.
   bool VectorizeSelect;
 
-  /// @brief Vectorize comparison instructions.
+  /// Vectorize comparison instructions.
   bool VectorizeCmp;
 
-  /// @brief Vectorize getelementptr instructions.
+  /// Vectorize getelementptr instructions.
   bool VectorizeGEP;
 
-  /// @brief Vectorize loads and stores.
+  /// Vectorize loads and stores.
   bool VectorizeMemOps;
 
-  /// @brief Only generate aligned loads and stores.
+  /// Only generate aligned loads and stores.
   bool AlignedOnly;
 
   //===--------------------------------------------------------------------===//
   // Misc parameters
 
-  /// @brief The required chain depth for vectorization.
+  /// The required chain depth for vectorization.
   unsigned ReqChainDepth;
 
-  /// @brief The maximum search distance for instruction pairs.
+  /// The maximum search distance for instruction pairs.
   unsigned SearchLimit;
 
-  /// @brief The maximum number of candidate pairs with which to use a full
+  /// The maximum number of candidate pairs with which to use a full
   ///        cycle check.
   unsigned MaxCandPairsForCycleCheck;
 
-  /// @brief Replicating one element to a pair breaks the chain.
+  /// Replicating one element to a pair breaks the chain.
   bool SplatBreaksChain;
 
-  /// @brief The maximum number of pairable instructions per group.
+  /// The maximum number of pairable instructions per group.
   unsigned MaxInsts;
 
-  /// @brief The maximum number of candidate instruction pairs per group.
+  /// The maximum number of candidate instruction pairs per group.
   unsigned MaxPairs;
 
-  /// @brief The maximum number of pairing iterations.
+  /// The maximum number of pairing iterations.
   unsigned MaxIter;
 
-  /// @brief Don't try to form odd-length vectors.
+  /// Don't try to form odd-length vectors.
   bool Pow2LenOnly;
 
-  /// @brief Don't boost the chain-depth contribution of loads and stores.
+  /// Don't boost the chain-depth contribution of loads and stores.
   bool NoMemOpBoost;
 
-  /// @brief Use a fast instruction dependency analysis.
+  /// Use a fast instruction dependency analysis.
   bool FastDep;
 
-  /// @brief Initialize the VectorizeConfig from command line options.
+  /// Initialize the VectorizeConfig from command line options.
   VectorizeConfig();
 };
 
@@ -120,7 +120,7 @@
 Pass *createSLPVectorizerPass();
 
 //===----------------------------------------------------------------------===//
-/// @brief Vectorize the BasicBlock.
+/// Vectorize the BasicBlock.
 ///
 /// @param BB The BasicBlock to be vectorized
 /// @param P  The current running pass, should require AliasAnalysis and
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
new file mode 100644
index 0000000..224879c
--- /dev/null
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorizationLegality.h
@@ -0,0 +1,482 @@
+//===- llvm/Transforms/Vectorize/LoopVectorizationLegality.h ----*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+/// \file
+/// This file defines the LoopVectorizationLegality class. Original code
+/// in Loop Vectorizer has been moved out to its own file for modularity
+/// and reusability.
+///
+/// Currently, it works for innermost loop vectorization. Extending this to
+/// outer loop vectorization is a TODO item.
+///
+/// Also provides:
+/// 1) LoopVectorizeHints class which keeps a number of loop annotations
+/// locally for easy look up. It has the ability to write them back as
+/// loop metadata, upon request.
+/// 2) LoopVectorizationRequirements class for lazy bail out for the purpose
+/// of reporting useful failure to vectorize message.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZATIONLEGALITY_H
+#define LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZATIONLEGALITY_H
+
+#include "llvm/ADT/MapVector.h"
+#include "llvm/Analysis/LoopAccessAnalysis.h"
+#include "llvm/Analysis/OptimizationRemarkEmitter.h"
+#include "llvm/Transforms/Utils/LoopUtils.h"
+
+namespace llvm {
+
+/// Create an analysis remark that explains why vectorization failed
+///
+/// \p PassName is the name of the pass (e.g. can be AlwaysPrint).  \p
+/// RemarkName is the identifier for the remark.  If \p I is passed it is an
+/// instruction that prevents vectorization.  Otherwise \p TheLoop is used for
+/// the location of the remark.  \return the remark object that can be
+/// streamed to.
+OptimizationRemarkAnalysis createLVMissedAnalysis(const char *PassName,
+                                                  StringRef RemarkName,
+                                                  Loop *TheLoop,
+                                                  Instruction *I = nullptr);
+
+/// Utility class for getting and setting loop vectorizer hints in the form
+/// of loop metadata.
+/// This class keeps a number of loop annotations locally (as member variables)
+/// and can, upon request, write them back as metadata on the loop. It will
+/// initially scan the loop for existing metadata, and will update the local
+/// values based on information in the loop.
+/// We cannot write all values to metadata, as the mere presence of some info,
+/// for example 'force', means a decision has been made. So, we need to be
+/// careful NOT to add them if the user hasn't specifically asked so.
+class LoopVectorizeHints {
+  enum HintKind { HK_WIDTH, HK_UNROLL, HK_FORCE, HK_ISVECTORIZED };
+
+  /// Hint - associates name and validation with the hint value.
+  struct Hint {
+    const char *Name;
+    unsigned Value; // This may have to change for non-numeric values.
+    HintKind Kind;
+
+    Hint(const char *Name, unsigned Value, HintKind Kind)
+        : Name(Name), Value(Value), Kind(Kind) {}
+
+    bool validate(unsigned Val);
+  };
+
+  /// Vectorization width.
+  Hint Width;
+
+  /// Vectorization interleave factor.
+  Hint Interleave;
+
+  /// Vectorization forced
+  Hint Force;
+
+  /// Already Vectorized
+  Hint IsVectorized;
+
+  /// Return the loop metadata prefix.
+  static StringRef Prefix() { return "llvm.loop."; }
+
+  /// True if there is any unsafe math in the loop.
+  bool PotentiallyUnsafe = false;
+
+public:
+  enum ForceKind {
+    FK_Undefined = -1, ///< Not selected.
+    FK_Disabled = 0,   ///< Forcing disabled.
+    FK_Enabled = 1,    ///< Forcing enabled.
+  };
+
+  LoopVectorizeHints(const Loop *L, bool DisableInterleaving,
+                     OptimizationRemarkEmitter &ORE);
+
+  /// Mark the loop L as already vectorized by setting the width to 1.
+  void setAlreadyVectorized() {
+    IsVectorized.Value = 1;
+    Hint Hints[] = {IsVectorized};
+    writeHintsToMetadata(Hints);
+  }
+
+  bool allowVectorization(Function *F, Loop *L, bool AlwaysVectorize) const;
+
+  /// Dumps all the hint information.
+  void emitRemarkWithHints() const;
+
+  unsigned getWidth() const { return Width.Value; }
+  unsigned getInterleave() const { return Interleave.Value; }
+  unsigned getIsVectorized() const { return IsVectorized.Value; }
+  enum ForceKind getForce() const { return (ForceKind)Force.Value; }
+
+  /// If hints are provided that force vectorization, use the AlwaysPrint
+  /// pass name to force the frontend to print the diagnostic.
+  const char *vectorizeAnalysisPassName() const;
+
+  bool allowReordering() const {
+    // When enabling loop hints are provided we allow the vectorizer to change
+    // the order of operations that is given by the scalar loop. This is not
+    // enabled by default because can be unsafe or inefficient. For example,
+    // reordering floating-point operations will change the way round-off
+    // error accumulates in the loop.
+    return getForce() == LoopVectorizeHints::FK_Enabled || getWidth() > 1;
+  }
+
+  bool isPotentiallyUnsafe() const {
+    // Avoid FP vectorization if the target is unsure about proper support.
+    // This may be related to the SIMD unit in the target not handling
+    // IEEE 754 FP ops properly, or bad single-to-double promotions.
+    // Otherwise, a sequence of vectorized loops, even without reduction,
+    // could lead to different end results on the destination vectors.
+    return getForce() != LoopVectorizeHints::FK_Enabled && PotentiallyUnsafe;
+  }
+
+  void setPotentiallyUnsafe() { PotentiallyUnsafe = true; }
+
+private:
+  /// Find hints specified in the loop metadata and update local values.
+  void getHintsFromMetadata();
+
+  /// Checks string hint with one operand and set value if valid.
+  void setHint(StringRef Name, Metadata *Arg);
+
+  /// Create a new hint from name / value pair.
+  MDNode *createHintMetadata(StringRef Name, unsigned V) const;
+
+  /// Matches metadata with hint name.
+  bool matchesHintMetadataName(MDNode *Node, ArrayRef<Hint> HintTypes);
+
+  /// Sets current hints into loop metadata, keeping other values intact.
+  void writeHintsToMetadata(ArrayRef<Hint> HintTypes);
+
+  /// The loop these hints belong to.
+  const Loop *TheLoop;
+
+  /// Interface to emit optimization remarks.
+  OptimizationRemarkEmitter &ORE;
+};
+
+/// This holds vectorization requirements that must be verified late in
+/// the process. The requirements are set by legalize and costmodel. Once
+/// vectorization has been determined to be possible and profitable the
+/// requirements can be verified by looking for metadata or compiler options.
+/// For example, some loops require FP commutativity which is only allowed if
+/// vectorization is explicitly specified or if the fast-math compiler option
+/// has been provided.
+/// Late evaluation of these requirements allows helpful diagnostics to be
+/// composed that tells the user what need to be done to vectorize the loop. For
+/// example, by specifying #pragma clang loop vectorize or -ffast-math. Late
+/// evaluation should be used only when diagnostics can generated that can be
+/// followed by a non-expert user.
+class LoopVectorizationRequirements {
+public:
+  LoopVectorizationRequirements(OptimizationRemarkEmitter &ORE) : ORE(ORE) {}
+
+  void addUnsafeAlgebraInst(Instruction *I) {
+    // First unsafe algebra instruction.
+    if (!UnsafeAlgebraInst)
+      UnsafeAlgebraInst = I;
+  }
+
+  void addRuntimePointerChecks(unsigned Num) { NumRuntimePointerChecks = Num; }
+
+  bool doesNotMeet(Function *F, Loop *L, const LoopVectorizeHints &Hints);
+
+private:
+  unsigned NumRuntimePointerChecks = 0;
+  Instruction *UnsafeAlgebraInst = nullptr;
+
+  /// Interface to emit optimization remarks.
+  OptimizationRemarkEmitter &ORE;
+};
+
+/// LoopVectorizationLegality checks if it is legal to vectorize a loop, and
+/// to what vectorization factor.
+/// This class does not look at the profitability of vectorization, only the
+/// legality. This class has two main kinds of checks:
+/// * Memory checks - The code in canVectorizeMemory checks if vectorization
+///   will change the order of memory accesses in a way that will change the
+///   correctness of the program.
+/// * Scalars checks - The code in canVectorizeInstrs and canVectorizeMemory
+/// checks for a number of different conditions, such as the availability of a
+/// single induction variable, that all types are supported and vectorize-able,
+/// etc. This code reflects the capabilities of InnerLoopVectorizer.
+/// This class is also used by InnerLoopVectorizer for identifying
+/// induction variable and the different reduction variables.
+class LoopVectorizationLegality {
+public:
+  LoopVectorizationLegality(
+      Loop *L, PredicatedScalarEvolution &PSE, DominatorTree *DT,
+      TargetLibraryInfo *TLI, AliasAnalysis *AA, Function *F,
+      std::function<const LoopAccessInfo &(Loop &)> *GetLAA, LoopInfo *LI,
+      OptimizationRemarkEmitter *ORE, LoopVectorizationRequirements *R,
+      LoopVectorizeHints *H, DemandedBits *DB, AssumptionCache *AC)
+      : TheLoop(L), LI(LI), PSE(PSE), TLI(TLI), DT(DT), GetLAA(GetLAA),
+        ORE(ORE), Requirements(R), Hints(H), DB(DB), AC(AC) {}
+
+  /// ReductionList contains the reduction descriptors for all
+  /// of the reductions that were found in the loop.
+  using ReductionList = DenseMap<PHINode *, RecurrenceDescriptor>;
+
+  /// InductionList saves induction variables and maps them to the
+  /// induction descriptor.
+  using InductionList = MapVector<PHINode *, InductionDescriptor>;
+
+  /// RecurrenceSet contains the phi nodes that are recurrences other than
+  /// inductions and reductions.
+  using RecurrenceSet = SmallPtrSet<const PHINode *, 8>;
+
+  /// Returns true if it is legal to vectorize this loop.
+  /// This does not mean that it is profitable to vectorize this
+  /// loop, only that it is legal to do so.
+  /// Temporarily taking UseVPlanNativePath parameter. If true, take
+  /// the new code path being implemented for outer loop vectorization
+  /// (should be functional for inner loop vectorization) based on VPlan.
+  /// If false, good old LV code.
+  bool canVectorize(bool UseVPlanNativePath);
+
+  /// Returns the primary induction variable.
+  PHINode *getPrimaryInduction() { return PrimaryInduction; }
+
+  /// Returns the reduction variables found in the loop.
+  ReductionList *getReductionVars() { return &Reductions; }
+
+  /// Returns the induction variables found in the loop.
+  InductionList *getInductionVars() { return &Inductions; }
+
+  /// Return the first-order recurrences found in the loop.
+  RecurrenceSet *getFirstOrderRecurrences() { return &FirstOrderRecurrences; }
+
+  /// Return the set of instructions to sink to handle first-order recurrences.
+  DenseMap<Instruction *, Instruction *> &getSinkAfter() { return SinkAfter; }
+
+  /// Returns the widest induction type.
+  Type *getWidestInductionType() { return WidestIndTy; }
+
+  /// Returns True if V is a Phi node of an induction variable in this loop.
+  bool isInductionPhi(const Value *V);
+
+  /// Returns True if V is a cast that is part of an induction def-use chain,
+  /// and had been proven to be redundant under a runtime guard (in other
+  /// words, the cast has the same SCEV expression as the induction phi).
+  bool isCastedInductionVariable(const Value *V);
+
+  /// Returns True if V can be considered as an induction variable in this
+  /// loop. V can be the induction phi, or some redundant cast in the def-use
+  /// chain of the inducion phi.
+  bool isInductionVariable(const Value *V);
+
+  /// Returns True if PN is a reduction variable in this loop.
+  bool isReductionVariable(PHINode *PN) { return Reductions.count(PN); }
+
+  /// Returns True if Phi is a first-order recurrence in this loop.
+  bool isFirstOrderRecurrence(const PHINode *Phi);
+
+  /// Return true if the block BB needs to be predicated in order for the loop
+  /// to be vectorized.
+  bool blockNeedsPredication(BasicBlock *BB);
+
+  /// Check if this pointer is consecutive when vectorizing. This happens
+  /// when the last index of the GEP is the induction variable, or that the
+  /// pointer itself is an induction variable.
+  /// This check allows us to vectorize A[idx] into a wide load/store.
+  /// Returns:
+  /// 0 - Stride is unknown or non-consecutive.
+  /// 1 - Address is consecutive.
+  /// -1 - Address is consecutive, and decreasing.
+  /// NOTE: This method must only be used before modifying the original scalar
+  /// loop. Do not use after invoking 'createVectorizedLoopSkeleton' (PR34965).
+  int isConsecutivePtr(Value *Ptr);
+
+  /// Returns true if the value V is uniform within the loop.
+  bool isUniform(Value *V);
+
+  /// Returns the information that we collected about runtime memory check.
+  const RuntimePointerChecking *getRuntimePointerChecking() const {
+    return LAI->getRuntimePointerChecking();
+  }
+
+  const LoopAccessInfo *getLAI() const { return LAI; }
+
+  unsigned getMaxSafeDepDistBytes() { return LAI->getMaxSafeDepDistBytes(); }
+
+  uint64_t getMaxSafeRegisterWidth() const {
+    return LAI->getDepChecker().getMaxSafeRegisterWidth();
+  }
+
+  bool hasStride(Value *V) { return LAI->hasStride(V); }
+
+  /// Returns true if vector representation of the instruction \p I
+  /// requires mask.
+  bool isMaskRequired(const Instruction *I) { return (MaskedOp.count(I) != 0); }
+
+  unsigned getNumStores() const { return LAI->getNumStores(); }
+  unsigned getNumLoads() const { return LAI->getNumLoads(); }
+
+  // Returns true if the NoNaN attribute is set on the function.
+  bool hasFunNoNaNAttr() const { return HasFunNoNaNAttr; }
+
+private:
+  /// Return true if the pre-header, exiting and latch blocks of \p Lp and all
+  /// its nested loops are considered legal for vectorization. These legal
+  /// checks are common for inner and outer loop vectorization.
+  /// Temporarily taking UseVPlanNativePath parameter. If true, take
+  /// the new code path being implemented for outer loop vectorization
+  /// (should be functional for inner loop vectorization) based on VPlan.
+  /// If false, good old LV code.
+  bool canVectorizeLoopNestCFG(Loop *Lp, bool UseVPlanNativePath);
+
+  /// Return true if the pre-header, exiting and latch blocks of \p Lp
+  /// (non-recursive) are considered legal for vectorization.
+  /// Temporarily taking UseVPlanNativePath parameter. If true, take
+  /// the new code path being implemented for outer loop vectorization
+  /// (should be functional for inner loop vectorization) based on VPlan.
+  /// If false, good old LV code.
+  bool canVectorizeLoopCFG(Loop *Lp, bool UseVPlanNativePath);
+
+  /// Check if a single basic block loop is vectorizable.
+  /// At this point we know that this is a loop with a constant trip count
+  /// and we only need to check individual instructions.
+  bool canVectorizeInstrs();
+
+  /// When we vectorize loops we may change the order in which
+  /// we read and write from memory. This method checks if it is
+  /// legal to vectorize the code, considering only memory constrains.
+  /// Returns true if the loop is vectorizable
+  bool canVectorizeMemory();
+
+  /// Return true if we can vectorize this loop using the IF-conversion
+  /// transformation.
+  bool canVectorizeWithIfConvert();
+
+  /// Return true if we can vectorize this outer loop. The method performs
+  /// specific checks for outer loop vectorization.
+  bool canVectorizeOuterLoop();
+
+  /// Return true if all of the instructions in the block can be speculatively
+  /// executed. \p SafePtrs is a list of addresses that are known to be legal
+  /// and we know that we can read from them without segfault.
+  bool blockCanBePredicated(BasicBlock *BB, SmallPtrSetImpl<Value *> &SafePtrs);
+
+  /// Updates the vectorization state by adding \p Phi to the inductions list.
+  /// This can set \p Phi as the main induction of the loop if \p Phi is a
+  /// better choice for the main induction than the existing one.
+  void addInductionPhi(PHINode *Phi, const InductionDescriptor &ID,
+                       SmallPtrSetImpl<Value *> &AllowedExit);
+
+  /// Create an analysis remark that explains why vectorization failed
+  ///
+  /// \p RemarkName is the identifier for the remark.  If \p I is passed it is
+  /// an instruction that prevents vectorization.  Otherwise the loop is used
+  /// for the location of the remark.  \return the remark object that can be
+  /// streamed to.
+  OptimizationRemarkAnalysis
+  createMissedAnalysis(StringRef RemarkName, Instruction *I = nullptr) const {
+    return createLVMissedAnalysis(Hints->vectorizeAnalysisPassName(),
+                                  RemarkName, TheLoop, I);
+  }
+
+  /// If an access has a symbolic strides, this maps the pointer value to
+  /// the stride symbol.
+  const ValueToValueMap *getSymbolicStrides() {
+    // FIXME: Currently, the set of symbolic strides is sometimes queried before
+    // it's collected.  This happens from canVectorizeWithIfConvert, when the
+    // pointer is checked to reference consecutive elements suitable for a
+    // masked access.
+    return LAI ? &LAI->getSymbolicStrides() : nullptr;
+  }
+
+  /// The loop that we evaluate.
+  Loop *TheLoop;
+
+  /// Loop Info analysis.
+  LoopInfo *LI;
+
+  /// A wrapper around ScalarEvolution used to add runtime SCEV checks.
+  /// Applies dynamic knowledge to simplify SCEV expressions in the context
+  /// of existing SCEV assumptions. The analysis will also add a minimal set
+  /// of new predicates if this is required to enable vectorization and
+  /// unrolling.
+  PredicatedScalarEvolution &PSE;
+
+  /// Target Library Info.
+  TargetLibraryInfo *TLI;
+
+  /// Dominator Tree.
+  DominatorTree *DT;
+
+  // LoopAccess analysis.
+  std::function<const LoopAccessInfo &(Loop &)> *GetLAA;
+
+  // And the loop-accesses info corresponding to this loop.  This pointer is
+  // null until canVectorizeMemory sets it up.
+  const LoopAccessInfo *LAI = nullptr;
+
+  /// Interface to emit optimization remarks.
+  OptimizationRemarkEmitter *ORE;
+
+  //  ---  vectorization state --- //
+
+  /// Holds the primary induction variable. This is the counter of the
+  /// loop.
+  PHINode *PrimaryInduction = nullptr;
+
+  /// Holds the reduction variables.
+  ReductionList Reductions;
+
+  /// Holds all of the induction variables that we found in the loop.
+  /// Notice that inductions don't need to start at zero and that induction
+  /// variables can be pointers.
+  InductionList Inductions;
+
+  /// Holds all the casts that participate in the update chain of the induction
+  /// variables, and that have been proven to be redundant (possibly under a
+  /// runtime guard). These casts can be ignored when creating the vectorized
+  /// loop body.
+  SmallPtrSet<Instruction *, 4> InductionCastsToIgnore;
+
+  /// Holds the phi nodes that are first-order recurrences.
+  RecurrenceSet FirstOrderRecurrences;
+
+  /// Holds instructions that need to sink past other instructions to handle
+  /// first-order recurrences.
+  DenseMap<Instruction *, Instruction *> SinkAfter;
+
+  /// Holds the widest induction type encountered.
+  Type *WidestIndTy = nullptr;
+
+  /// Allowed outside users. This holds the induction and reduction
+  /// vars which can be accessed from outside the loop.
+  SmallPtrSet<Value *, 4> AllowedExit;
+
+  /// Can we assume the absence of NaNs.
+  bool HasFunNoNaNAttr = false;
+
+  /// Vectorization requirements that will go through late-evaluation.
+  LoopVectorizationRequirements *Requirements;
+
+  /// Used to emit an analysis of any legality issues.
+  LoopVectorizeHints *Hints;
+
+  /// The demanded bits analsyis is used to compute the minimum type size in
+  /// which a reduction can be computed.
+  DemandedBits *DB;
+
+  /// The assumption cache analysis is used to compute the minimum type size in
+  /// which a reduction can be computed.
+  AssumptionCache *AC;
+
+  /// While vectorizing these instructions we have to generate a
+  /// call to the appropriate masked intrinsic
+  SmallPtrSet<const Instruction *, 8> MaskedOp;
+};
+
+} // namespace llvm
+
+#endif // LLVM_TRANSFORMS_VECTORIZE_LOOPVECTORIZATIONLEGALITY_H
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
index 32b56d3..d79d846 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/LoopVectorize.h
@@ -26,6 +26,14 @@
 //    of vectorization. It decides on the optimal vector width, which
 //    can be one, if vectorization is not profitable.
 //
+// There is a development effort going on to migrate loop vectorizer to the
+// VPlan infrastructure and to introduce outer loop vectorization support (see
+// docs/Proposal/VectorizationPlan.rst and
+// http://lists.llvm.org/pipermail/llvm-dev/2017-December/119523.html). For this
+// purpose, we temporarily introduced the VPlan-native vectorization path: an
+// alternative vectorization path that is natively implemented on top of the
+// VPlan infrastructure. See EnableVPlanNativePath for enabling.
+//
 //===----------------------------------------------------------------------===//
 //
 // The reduction-variable vectorization is based on the paper:
diff --git a/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h b/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
index 979d5ef..3152e81 100644
--- a/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
+++ b/linux-x64/clang/include/llvm/Transforms/Vectorize/SLPVectorizer.h
@@ -82,7 +82,7 @@
                OptimizationRemarkEmitter *ORE_);
 
 private:
-  /// \brief Collect store and getelementptr instructions and organize them
+  /// Collect store and getelementptr instructions and organize them
   /// according to the underlying object of their pointer operands. We sort the
   /// instructions by their underlying objects to reduce the cost of
   /// consecutive access queries.
@@ -91,23 +91,23 @@
   ///       every time we run into a memory barrier.
   void collectSeedInstructions(BasicBlock *BB);
 
-  /// \brief Try to vectorize a chain that starts at two arithmetic instrs.
+  /// Try to vectorize a chain that starts at two arithmetic instrs.
   bool tryToVectorizePair(Value *A, Value *B, slpvectorizer::BoUpSLP &R);
 
-  /// \brief Try to vectorize a list of operands.
+  /// Try to vectorize a list of operands.
   /// \param UserCost Cost of the user operations of \p VL if they may affect
   /// the cost of the vectorization.
   /// \returns true if a value was vectorized.
   bool tryToVectorizeList(ArrayRef<Value *> VL, slpvectorizer::BoUpSLP &R,
                           int UserCost = 0, bool AllowReorder = false);
 
-  /// \brief Try to vectorize a chain that may start at the operands of \p I.
+  /// Try to vectorize a chain that may start at the operands of \p I.
   bool tryToVectorize(Instruction *I, slpvectorizer::BoUpSLP &R);
 
-  /// \brief Vectorize the store instructions collected in Stores.
+  /// Vectorize the store instructions collected in Stores.
   bool vectorizeStoreChains(slpvectorizer::BoUpSLP &R);
 
-  /// \brief Vectorize the index computations of the getelementptr instructions
+  /// Vectorize the index computations of the getelementptr instructions
   /// collected in GEPs.
   bool vectorizeGEPIndices(BasicBlock *BB, slpvectorizer::BoUpSLP &R);
 
@@ -133,7 +133,7 @@
   bool vectorizeSimpleInstructions(SmallVectorImpl<WeakVH> &Instructions,
                                    BasicBlock *BB, slpvectorizer::BoUpSLP &R);
 
-  /// \brief Scan the basic block and look for patterns that are likely to start
+  /// Scan the basic block and look for patterns that are likely to start
   /// a vectorization chain.
   bool vectorizeChainsInBlock(BasicBlock *BB, slpvectorizer::BoUpSLP &R);
 
diff --git a/linux-x64/clang/include/llvm/XRay/XRayRecord.h b/linux-x64/clang/include/llvm/XRay/XRayRecord.h
index 5c5e9f4..7687344 100644
--- a/linux-x64/clang/include/llvm/XRay/XRayRecord.h
+++ b/linux-x64/clang/include/llvm/XRay/XRayRecord.h
@@ -75,6 +75,9 @@
   /// The thread ID for the currently running thread.
   uint32_t TId;
 
+  /// The process ID for the currently running process.
+  uint32_t PId;
+
   /// The function call arguments.
   std::vector<uint64_t> CallArgs;
 };
diff --git a/linux-x64/clang/include/llvm/XRay/YAMLXRayRecord.h b/linux-x64/clang/include/llvm/XRay/YAMLXRayRecord.h
index b436aef..0de9ea0 100644
--- a/linux-x64/clang/include/llvm/XRay/YAMLXRayRecord.h
+++ b/linux-x64/clang/include/llvm/XRay/YAMLXRayRecord.h
@@ -37,6 +37,7 @@
   std::string Function;
   uint64_t TSC;
   uint32_t TId;
+  uint32_t PId;
   std::vector<uint64_t> CallArgs;
 };
 
@@ -79,6 +80,7 @@
     IO.mapOptional("args", Record.CallArgs);
     IO.mapRequired("cpu", Record.CPU);
     IO.mapRequired("thread", Record.TId);
+    IO.mapOptional("process", Record.PId, 0U);
     IO.mapRequired("kind", Record.Type);
     IO.mapRequired("tsc", Record.TSC);
   }